oxygen-cli 1.21.0 → 1.22.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/errors/OxygenError.js +10 -4
- package/build/errors/helper.js +3 -2
- package/build/ox_modules/module-email.js +2 -2
- package/build/ox_modules/module-mob.js +4 -4
- package/build/ox_modules/module-utils.js +20 -1
- package/build/ox_modules/module-web.js +4 -4
- package/build/ox_modules/utils.js +2 -2
- package/package.json +7 -6
|
@@ -264,9 +264,9 @@ class MobileModule extends _WebDriverModule.default {
|
|
|
264
264
|
delete wdioOpts.capabilities['perfectoMobile:options'];
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
-
if (wdioOpts.capabilities['
|
|
268
|
-
name = wdioOpts.capabilities['
|
|
269
|
-
delete wdioOpts.capabilities['
|
|
267
|
+
if (wdioOpts.capabilities['bstack:options'] && wdioOpts.capabilities['bstack:options']['name']) {
|
|
268
|
+
name = wdioOpts.capabilities['bstack:options']['name'];
|
|
269
|
+
delete wdioOpts.capabilities['bstack:options'];
|
|
270
270
|
}
|
|
271
271
|
|
|
272
272
|
this.wdioOpts = wdioOpts; // init webdriver
|
|
@@ -696,4 +696,4 @@ class MobileModule extends _WebDriverModule.default {
|
|
|
696
696
|
}
|
|
697
697
|
|
|
698
698
|
exports.default = MobileModule;
|
|
699
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1tb2IuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0JST1dTRVJfTkFNRSIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIk1vYmlsZU1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsImFwcENvbnRleHQiLCJfbG9hZEhlbHBlckZ1bmN0aW9ucyIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJ3YWl0Rm9yVGltZW91dCIsIm5hbWUiLCJnZXREcml2ZXIiLCJnZXRDYXBhYmlsaXRpZXMiLCJjYXBzIiwiaW5pdCIsImFwcGl1bVVybCIsImlzSW5pdGlhbGl6ZWQiLCJyZW9wZW5TZXNzaW9uIiwiZGVidWciLCJkcml2ZXIiLCJyZWxvYWRTZXNzaW9uIiwiX2lzSW5pdGlhbGl6ZWQiLCJjdHgiLCJwbGF0Zm9ybU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VOYW1lIiwiYnJvd3Nlck5hbWUiLCJhdXRvbWF0aW9uTmFtZSIsInVkaWQiLCJhcHAiLCJlbmFibGVBcHBpdW1CZWhhdmlvciIsInVzZUFwcGl1bUZvcldlYiIsImNvbGxlY3REZXZpY2VMb2dzIiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFwcFBhY2thZ2UiLCJ0b0xvd2VyQ2FzZSIsInJlY29yZEhBUiIsImJyb3dzZXIiLCJwZXJmb3JtYW5jZSIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsInByb3ZpZGVyIiwibW9kVXRpbHMiLCJkZXRlcm1pbmVQcm92aWRlciIsIlBFUkZFQ1RPIiwibWF4SW5zdGFuY2VzIiwib3BlbkRldmljZVRpbWVvdXQiLCJtYW51ZmFjdHVyZXIiLCJtb2RlbCIsIndkaW8iLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwicGVyZmVjdG9FeGVjdXRpb25Db250ZXh0IiwicGVyZmVjdG9SZXBvcnRpbmciLCJQZXJmZWN0byIsIlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsIndlYmRyaXZlciIsImV4ZWN1dGVTY3JpcHQiLCJjb21tYW5kIiwicGFyYW1zIiwiZXhlY3V0ZSIsInJlcG9ydGluZ0NsaWVudCIsIlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50IiwidGVzdFN0YXJ0IiwiZSIsImdldEFwcGl1bUluaXRFcnJvciIsImdldENvbnRleHQiLCJzZXRXZWJWaWV3Q29udGV4dCIsIkJST1dTRVJTVEFDSyIsInNldFRpbWVvdXQiLCJkaXNwb3NlIiwic3RhdHVzIiwic3RlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmYWlsZWRGaW5kZWQiLCJmaW5kIiwiaXRlbSIsInRvVXBwZXJDYXNlIiwidGVzdFN0b3AiLCJDb25zdGFudHMiLCJyZXN1bHRzIiwicGFzc2VkIiwiZmFpbGVkIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayIsImRlbGV0ZVNlc3Npb24iLCJpbmNsdWRlcyIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJ3YXJuIiwidHJhbnNhY3Rpb24iLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsImVycm9yIiwidGFrZVNjcmVlbnNob3QiLCJyZXR2YWwiLCJjYWxsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ3YWl0VW50aWxSZXRWYWwiLCJ3YWl0VW50aWwiLCJpbWFnZXMiLCJwdXNoSW1hZ2VUb0ltYWdlcyIsImZldGNoVGl0bGUiLCJpbWFnZSIsInRpdGxlIiwiZ2V0VGl0bGUiLCJ0ZXh0VG9JbWFnZSIsInJlcXVpcmUiLCJ0aXRsZUltYWdlIiwiZ2VuZXJhdGUiLCJmb250RmFtaWx5IiwicHVzaCIsImlzV2ViVmlld0NvbnRleHQiLCJoYW5kbGVzIiwiZ2V0V2luZG93SGFuZGxlcyIsImhhbmRsZSIsInN3aXRjaFRvV2luZG93IiwibWVyZ2VkSW1hZ2UiLCJkaXJlY3Rpb24iLCJ0aW1lb3V0IiwidGhlbiIsImNhdGNoIiwiZXJyIiwiX2FkanVzdEFwcGl1bUxvZyIsImxvZyIsInNyYyIsInRpbWUiLCJ0aW1lc3RhbXAiLCJtc2ciLCJtZXNzYWdlIiwibGV2ZWwiLCJfaXRlcmF0aW9uU3RhcnQiLCJfaXRlcmF0aW9uRW5kIiwidHlwZSIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIiwibG9ncyIsImdldERldmljZUxvZ3MiLCJjb2xsZWN0QnJvd3NlckxvZ3MiLCJnZXRCcm93c2VyTG9ncyIsImNvbGxlY3RBcHBpdW1Mb2dzIiwiZ2V0QXBwaXVtTG9ncyIsImxvZ0VudHJ5IiwiX2dldFdkaW9Mb2NhdG9yIiwibG9jYXRvciIsIlNDUklQVF9FUlJPUiIsImluZGV4T2YiLCJwbGF0Zm9ybSIsInN1YnN0ciIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImFzc2VydENvbnRleHQiLCJjb250ZXh0TGlzdCIsImdldExvZ1R5cGVzIiwicmVxdWVzdEJvZHkiLCJzZXNzaW9uSWQiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwiYm9keSIsInJlcyIsInRvU3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBR0EsTUFBTUEsV0FBVyxHQUFHLEtBQXBCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsOEJBQTNCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsU0FBN0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUFDLE1BQUQsRUFBUyxhQUFULENBQS9CO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLENBQUMsTUFBRCxFQUFRLEtBQVIsRUFBYyxPQUFkLEVBQXNCLE9BQXRCLEVBQThCLFFBQTlCLEVBQXVDLFVBQXZDLENBQXhCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsS0FBSyxJQUFsQyxDLENBQW1EOztBQUVwQyxNQUFNQyxZQUFOLFNBQTJCQyx3QkFBM0IsQ0FBMkM7QUFDdERDLEVBQUFBLFdBQVcsQ0FBQ0MsT0FBRCxFQUFVQyxPQUFWLEVBQW1CQyxFQUFuQixFQUF1QkMsTUFBdkIsRUFBK0JDLE9BQS9CLEVBQXdDQyxRQUF4QyxFQUFrRDtBQUN6RCxVQUFNTCxPQUFOLEVBQWVDLE9BQWYsRUFBd0JDLEVBQXhCLEVBQTRCQyxNQUE1QixFQUFvQ0MsT0FBcEMsRUFBNkNDLFFBQTdDO0FBQ0EsU0FBS0MsWUFBTCxHQUFvQixFQUFwQjtBQUNBLFNBQUtDLHVCQUFMLEdBQStCLElBQS9CO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QixJQUF2QjtBQUNBLFNBQUtDLE9BQUwsR0FBZSxFQUFmO0FBQ0EsU0FBS0MsVUFBTCxHQUFrQixZQUFsQjs7QUFDQSxTQUFLQyxvQkFBTCxHQVB5RCxDQVF6RDs7O0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxvQkFBZjtBQUNBLFNBQUtDLFNBQUwsR0FBaUJBLGVBQWpCLENBVnlELENBV3pEOztBQUNBLFNBQUtDLGNBQUwsR0FBc0JsQixvQkFBdEI7QUFDSDs7QUFFTyxNQUFKbUIsSUFBSSxHQUFHO0FBQ1AsV0FBT3hCLFdBQVA7QUFDSDtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUNJeUIsRUFBQUEsU0FBUyxHQUFHO0FBQ1IsV0FBTyxNQUFNQSxTQUFOLEVBQVA7QUFDSDtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUNJQyxFQUFBQSxlQUFlLEdBQUc7QUFDZCxXQUFPLEtBQUtDLElBQUwsSUFBYSxNQUFNRCxlQUFOLEVBQXBCO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNjLFFBQUpFLElBQUksQ0FBQ0QsSUFBRCxFQUFPRSxTQUFQLEVBQWtCO0FBQ3hCO0FBQ0EsUUFBSSxLQUFLQyxhQUFULEVBQXdCO0FBQ3BCLFVBQUksS0FBS3JCLE9BQUwsQ0FBYXNCLGFBQWIsS0FBK0IsS0FBbkMsRUFBMEM7QUFBRTtBQUN4QyxhQUFLbkIsTUFBTCxDQUFZb0IsS0FBWixDQUFrQixrREFBbEI7QUFDQSxhQUFLQyxNQUFMLENBQVlDLGFBQVo7QUFDQSxhQUFLQyxjQUFMLEdBQXNCLElBQXRCO0FBQ0gsT0FKRCxNQUlPO0FBQ0gsYUFBS3ZCLE1BQUwsQ0FBWW9CLEtBQVosQ0FBa0Isb0dBQWxCO0FBQ0g7O0FBQ0Q7QUFDSCxLQVh1QixDQWF4Qjs7O0FBQ0EsUUFBSSxLQUFLSSxHQUFMLENBQVNULElBQVQsSUFBaUIsS0FBS1MsR0FBTCxDQUFTVCxJQUFULENBQWMsd0JBQWQsQ0FBckIsRUFBOEQ7QUFDMUQsVUFBSUEsSUFBSixFQUFVO0FBQ04sZUFBT0EsSUFBSSxDQUFDVSxZQUFaO0FBQ0EsZUFBT1YsSUFBSSxDQUFDVyxlQUFaO0FBQ0EsZUFBT1gsSUFBSSxDQUFDWSxVQUFaO0FBQ0EsZUFBT1osSUFBSSxDQUFDYSxXQUFaO0FBQ0EsZUFBT2IsSUFBSSxDQUFDYyxjQUFaO0FBQ0EsZUFBT2QsSUFBSSxDQUFDZSxJQUFaOztBQUVBLFlBQUlmLElBQUksQ0FBQ2dCLEdBQVQsRUFBYztBQUNWaEIsVUFBQUEsSUFBSSxDQUFDaUIsb0JBQUwsR0FBNEIsSUFBNUI7QUFDSCxTQUZELE1BRU87QUFDSGpCLFVBQUFBLElBQUksQ0FBQ2tCLGVBQUwsR0FBdUIsSUFBdkI7QUFDQWxCLFVBQUFBLElBQUksQ0FBQ2lCLG9CQUFMLEdBQTRCLElBQTVCO0FBQ0g7QUFDSixPQWRELE1BY087QUFDSCxhQUFLUixHQUFMLENBQVNULElBQVQsQ0FBY2tCLGVBQWQsR0FBZ0MsSUFBaEM7QUFDQSxhQUFLVCxHQUFMLENBQVNULElBQVQsQ0FBY2lCLG9CQUFkLEdBQXFDLElBQXJDO0FBQ0g7QUFDSjs7QUFFRCxRQUFJLENBQUNmLFNBQUwsRUFBZ0I7QUFDWkEsTUFBQUEsU0FBUyxHQUFHLEtBQUtwQixPQUFMLENBQWFvQixTQUFiLElBQTBCNUIsa0JBQXRDO0FBQ0gsS0FyQ3VCLENBdUN4Qjs7O0FBQ0EsU0FBSzBCLElBQUwsR0FBWSxFQUFaOztBQUNBLFFBQUksS0FBS1MsR0FBTCxDQUFTVCxJQUFiLEVBQW1CO0FBQ2YsV0FBS0EsSUFBTCxHQUFZLEVBQUUsR0FBRyxLQUFLUyxHQUFMLENBQVNUO0FBQWQsT0FBWjtBQUNIOztBQUNELFFBQUlBLElBQUosRUFBVTtBQUNOLFdBQUtBLElBQUwsR0FBWSxFQUFFLEdBQUcsS0FBS0EsSUFBVjtBQUFnQixXQUFHQTtBQUFuQixPQUFaO0FBQ0gsS0E5Q3VCLENBZ0R4Qjs7O0FBQ0EsUUFBSSxLQUFLbEIsT0FBTCxDQUFhcUMsaUJBQWpCLEVBQW9DO0FBQ2hDLFdBQUtuQixJQUFMLENBQVVvQixzQkFBVixHQUFtQyxJQUFuQztBQUNILEtBbkR1QixDQXFEeEI7OztBQUNBLFFBQUksS0FBS3BCLElBQUwsQ0FBVWEsV0FBVixLQUEwQixLQUFLYixJQUFMLENBQVVxQixVQUFWLElBQXdCLEtBQUtyQixJQUFMLENBQVVnQixHQUE1RCxDQUFKLEVBQXNFO0FBQ2xFLGFBQU8sS0FBS2hCLElBQUwsQ0FBVWEsV0FBakI7QUFDSCxLQUZELENBR0E7QUFIQSxTQUlLLElBQUksQ0FBQyxLQUFLYixJQUFMLENBQVVhLFdBQVgsSUFBMEIsQ0FBQyxLQUFLYixJQUFMLENBQVVxQixVQUFyQyxJQUFtRCxDQUFDLEtBQUtyQixJQUFMLENBQVVnQixHQUFsRSxFQUF1RTtBQUN4RSxhQUFLaEIsSUFBTCxDQUFVYSxXQUFWLEdBQXdCdEMsb0JBQXhCO0FBQ0gsT0E1RHVCLENBNkR4Qjs7O0FBQ0EsUUFBSSxLQUFLeUIsSUFBTCxDQUFVYSxXQUFWLElBQXlCLE9BQU8sS0FBS2IsSUFBTCxDQUFVYSxXQUFqQixLQUFpQyxRQUE5RCxFQUF3RTtBQUNwRSxXQUFLYixJQUFMLENBQVVhLFdBQVYsR0FBd0IsS0FBS2IsSUFBTCxDQUFVYSxXQUFWLENBQXNCUyxXQUF0QixFQUF4QjtBQUNILEtBaEV1QixDQWlFeEI7OztBQUNBLFFBQUksS0FBS3hDLE9BQUwsQ0FBYXlDLFNBQWIsSUFBMEIsS0FBS3ZCLElBQUwsQ0FBVWEsV0FBVixLQUEwQixRQUF4RCxFQUFrRTtBQUM5RCxXQUFLYixJQUFMLENBQVUsbUJBQVYsSUFBaUM7QUFBTTtBQUNuQ3dCLFFBQUFBLE9BQU8sRUFBRSxLQURvQjtBQUU3QkMsUUFBQUEsV0FBVyxFQUFFO0FBRmdCLE9BQWpDO0FBSUgsS0F2RXVCLENBeUV4Qjs7O0FBQ0EsVUFBTUMsR0FBRyxHQUFHQyxhQUFJQyxLQUFKLENBQVUxQixTQUFWLENBQVo7O0FBQ0EsVUFBTTJCLFFBQVEsR0FBR0gsR0FBRyxDQUFDRyxRQUFKLENBQWFDLE9BQWIsQ0FBcUIsSUFBckIsRUFBMkIsRUFBM0IsQ0FBakI7QUFDQSxVQUFNQyxJQUFJLEdBQUdMLEdBQUcsQ0FBQ00sUUFBakI7QUFDQSxVQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ1IsR0FBRyxDQUFDTyxJQUFKLEtBQWFKLFFBQVEsS0FBSyxPQUFiLEdBQXVCLEdBQXZCLEdBQTZCLEVBQTFDLENBQUQsQ0FBckI7QUFDQSxVQUFNTSxJQUFJLEdBQUdULEdBQUcsQ0FBQ1UsUUFBakIsQ0E5RXdCLENBZ0Z4Qjs7QUFDQSxRQUFJVixHQUFHLENBQUNXLElBQVIsRUFBYztBQUNWLFlBQU1BLElBQUksR0FBR1gsR0FBRyxDQUFDVyxJQUFKLENBQVNDLEtBQVQsQ0FBZSxHQUFmLENBQWI7QUFDQSxXQUFLeEQsT0FBTCxDQUFheUQsUUFBYixHQUF3QjtBQUNwQkMsUUFBQUEsSUFBSSxFQUFFSCxJQUFJLENBQUMsQ0FBRCxDQURVO0FBRXBCSSxRQUFBQSxHQUFHLEVBQUVKLElBQUksQ0FBQyxDQUFEO0FBRlcsT0FBeEI7QUFJSDs7QUFFRCxRQUFJRSxRQUFRLEdBQUcsRUFDWCxJQUFHLEtBQUt6RCxPQUFMLENBQWF5RCxRQUFiLElBQXlCLEVBQTVCLENBRFc7QUFFWFYsTUFBQUEsUUFBUSxFQUFFQSxRQUZDO0FBR1hHLE1BQUFBLFFBQVEsRUFBRUQsSUFIQztBQUlYRSxNQUFBQSxJQUFJLEVBQUVBLElBSks7QUFLWEUsTUFBQUEsSUFBSSxFQUFFQSxJQUxLO0FBTVhPLE1BQUFBLFlBQVksRUFBRSxLQUFLMUMsSUFOUjtBQU9YMkMsTUFBQUEsUUFBUSxFQUFFLFFBUEM7QUFRWEMsTUFBQUEsTUFBTSxFQUFFLE1BUkc7QUFTWEMsTUFBQUEsY0FBYyxFQUFFLElBVEw7QUFTVztBQUN0QkMsTUFBQUEsc0JBQXNCLEVBQUUsTUFBSSxJQVZqQjtBQVdYQyxNQUFBQSxvQkFBb0IsRUFBRTtBQVhYLEtBQWY7O0FBY0EsUUFBSUMsUUFBUSxHQUFHQyxlQUFTQyxpQkFBVCxDQUEyQlgsUUFBM0IsQ0FBZjs7QUFDQSxRQUFJMUMsSUFBSSxHQUFHLE1BQVg7O0FBRUEsUUFBSW1ELFFBQVEsS0FBS0MsZUFBU0QsUUFBVCxDQUFrQkcsUUFBbkMsRUFBNkM7QUFDekNaLE1BQUFBLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQlUsWUFBdEIsR0FBcUMsQ0FBckM7QUFDQWIsTUFBQUEsUUFBUSxDQUFDSixJQUFULEdBQWdCLG9DQUFoQjtBQUNBSSxNQUFBQSxRQUFRLENBQUNOLElBQVQsR0FBZ0IsRUFBaEI7QUFDQU0sTUFBQUEsUUFBUSxDQUFDVixRQUFULEdBQW9CLE1BQXBCO0FBQ0FVLE1BQUFBLFFBQVEsQ0FBQ2MsaUJBQVQsR0FBNkIsRUFBN0I7QUFFQSxhQUFPZCxRQUFRLENBQUNHLFlBQVQsQ0FBc0JZLFlBQTdCO0FBQ0EsYUFBT2YsUUFBUSxDQUFDRyxZQUFULENBQXNCYSxLQUE3QjtBQUNBLGFBQU9oQixRQUFRLENBQUNHLFlBQVQsQ0FBc0I3QixXQUE3QjtBQUVBaEIsTUFBQUEsSUFBSSxHQUFHMEMsUUFBUSxDQUFDRyxZQUFULENBQXNCLHdCQUF0QixFQUFnRCxNQUFoRCxDQUFQO0FBQ0EsYUFBT0gsUUFBUSxDQUFDRyxZQUFULENBQXNCLHdCQUF0QixDQUFQO0FBQ0g7O0FBRUQsUUFBSUgsUUFBUSxDQUFDRyxZQUFULENBQXNCLHNCQUF0QixLQUFpREgsUUFBUSxDQUFDRyxZQUFULENBQXNCLHNCQUF0QixFQUE4QyxNQUE5QyxDQUFyRCxFQUE0RztBQUN4RzdDLE1BQUFBLElBQUksR0FBRzBDLFFBQVEsQ0FBQ0csWUFBVCxDQUFzQixzQkFBdEIsRUFBOEMsTUFBOUMsQ0FBUDtBQUNBLGFBQU9ILFFBQVEsQ0FBQ0csWUFBVCxDQUFzQixzQkFBdEIsQ0FBUDtBQUNIOztBQUVELFNBQUtILFFBQUwsR0FBZ0JBLFFBQWhCLENBOUh3QixDQWdJeEI7O0FBQ0EsUUFBSTtBQUNBLFdBQUtqQyxNQUFMLEdBQWMsTUFBTWtELElBQUksQ0FBQ0MsTUFBTCxDQUFZbEIsUUFBWixDQUFwQjtBQUNBLFdBQUtqQyxNQUFMLENBQVkwQyxRQUFaLEdBQXVCQSxRQUF2Qjs7QUFFQSxVQUFJLEtBQUtsRSxPQUFMLENBQWE0RSxzQkFBakIsRUFBeUM7QUFDckMsYUFBS3BELE1BQUwsQ0FBWW9ELHNCQUFaLEdBQXFDLEtBQUs1RSxPQUFMLENBQWE0RSxzQkFBbEQ7QUFDSDs7QUFFRCxVQUFJLEtBQUs1RSxPQUFMLENBQWE2RSxlQUFqQixFQUFrQztBQUM5QixhQUFLckQsTUFBTCxDQUFZcUQsZUFBWixHQUE4QixLQUFLN0UsT0FBTCxDQUFhNkUsZUFBM0M7QUFDSDs7QUFFRCxVQUFJWCxRQUFRLEtBQUtDLGVBQVNELFFBQVQsQ0FBa0JHLFFBQW5DLEVBQTZDO0FBQ3pDLGNBQU1TLHdCQUF3QixHQUFHLE1BQU0sSUFBSUMsMkJBQWtCQyxRQUFsQixDQUEyQkMsd0JBQS9CLENBQXdEO0FBQzNGQyxVQUFBQSxTQUFTLEVBQUU7QUFDUEMsWUFBQUEsYUFBYSxFQUFFLE9BQU9DLE9BQVAsRUFBZ0JDLE1BQWhCLEtBQTJCO0FBQ3RDLHFCQUFPLE1BQU0sS0FBSzdELE1BQUwsQ0FBWThELE9BQVosQ0FBb0JGLE9BQXBCLEVBQTZCQyxNQUE3QixDQUFiO0FBQ0g7QUFITTtBQURnRixTQUF4RCxDQUF2QztBQU9BLGFBQUtFLGVBQUwsR0FBdUIsSUFBSVIsMkJBQWtCQyxRQUFsQixDQUEyQlEsdUJBQS9CLENBQXVEVix3QkFBdkQsQ0FBdkI7QUFDQSxjQUFNLEtBQUtTLGVBQUwsQ0FBcUJFLFNBQXJCLENBQStCMUUsSUFBL0IsQ0FBTjtBQUNIO0FBQ0osS0F2QkQsQ0F1QkUsT0FBTzJFLENBQVAsRUFBVTtBQUNSLFlBQU03RSxnQkFBVThFLGtCQUFWLENBQTZCRCxDQUE3QixDQUFOO0FBQ0g7O0FBRUQsU0FBS2hGLFVBQUwsR0FBa0IsTUFBTSxLQUFLYyxNQUFMLENBQVlvRSxVQUFaLEVBQXhCLENBNUp3QixDQThKeEI7QUFDQTtBQUNBOztBQUNBLFFBQUksS0FBSzFFLElBQUwsQ0FBVWEsV0FBVixLQUEyQixrQkFBL0IsRUFBbUQ7QUFDL0MsWUFBTSxLQUFLOEQsaUJBQUwsRUFBTjtBQUNIOztBQUVELFFBQUkzQixRQUFRLEtBQUtDLGVBQVNELFFBQVQsQ0FBa0I0QixZQUFuQyxFQUFpRCxDQUM3QztBQUNBO0FBQ0gsS0FIRCxNQUdPO0FBQ0gsWUFBTSxLQUFLdEUsTUFBTCxDQUFZdUUsVUFBWixDQUF1QjtBQUFFLG9CQUFZLEtBQUtqRjtBQUFuQixPQUF2QixDQUFOO0FBQ0g7O0FBQ0QsVUFBTUssSUFBTixDQUFXLEtBQUtLLE1BQWhCO0FBQ0g7QUFFRDtBQUNKO0FBQ0E7QUFDQTtBQUNBOzs7QUFDaUIsUUFBUHdFLE9BQU8sQ0FBQ0MsTUFBRCxFQUFTO0FBQ2xCLFFBQUksQ0FBQ0EsTUFBTCxFQUFhO0FBQ1RBLE1BQUFBLE1BQU0sR0FBRyxRQUFUOztBQUVBLFVBQUksS0FBSy9GLEVBQUwsQ0FBUWdHLEtBQVIsSUFBaUJDLEtBQUssQ0FBQ0MsT0FBTixDQUFjLEtBQUtsRyxFQUFMLENBQVFnRyxLQUF0QixDQUFqQixJQUFpRCxLQUFLaEcsRUFBTCxDQUFRZ0csS0FBUixDQUFjRyxNQUFkLEdBQXVCLENBQTVFLEVBQStFO0FBQzNFLGNBQU1DLFlBQVksR0FBRyxLQUFLcEcsRUFBTCxDQUFRZ0csS0FBUixDQUFjSyxJQUFkLENBQW9CQyxJQUFELElBQVVBLElBQUksQ0FBQ1AsTUFBTCxLQUFnQixRQUE3QyxDQUFyQjs7QUFDQSxZQUFJSyxZQUFKLEVBQWtCO0FBQ2RMLFVBQUFBLE1BQU0sR0FBRyxRQUFUO0FBQ0g7QUFDSjtBQUNKOztBQUVELFFBQUksS0FBS3pFLE1BQUwsSUFBZSxLQUFLSCxhQUF4QixFQUF1QztBQUNuQzRFLE1BQUFBLE1BQU0sR0FBR0EsTUFBTSxDQUFDUSxXQUFQLEVBQVQ7O0FBRUEsVUFBSSxLQUFLakYsTUFBTCxDQUFZMEMsUUFBWixLQUF5QkMsZUFBU0QsUUFBVCxDQUFrQkcsUUFBL0MsRUFBeUQ7QUFDckQsY0FBTSxLQUFLa0IsZUFBTCxDQUFxQm1CLFFBQXJCLENBQThCO0FBQ2hDVCxVQUFBQSxNQUFNLEVBQUVBLE1BQU0sS0FBSyxRQUFYLEdBQ0lsQiwyQkFBa0I0QixTQUFsQixDQUE0QkMsT0FBNUIsQ0FBb0NDLE1BRHhDLEdBRUk5QiwyQkFBa0I0QixTQUFsQixDQUE0QkMsT0FBNUIsQ0FBb0NFO0FBSGhCLFNBQTlCLENBQU47QUFLSCxPQU5ELE1BTU8sSUFBSSxLQUFLdEYsTUFBTCxDQUFZMEMsUUFBWixLQUF5QkMsZUFBU0QsUUFBVCxDQUFrQjRCLFlBQS9DLEVBQTZEO0FBQ2hFLGNBQU0sS0FBS2lCLCtCQUFMLENBQXFDZCxNQUFyQyxDQUFOO0FBQ0EsY0FBTSxLQUFLZSxhQUFMLEVBQU47QUFDSDs7QUFFRCxVQUFJO0FBQ0EsWUFBSSxDQUFDLENBQUMsVUFBRCxFQUFhLFFBQWIsRUFBdUJDLFFBQXZCLENBQWdDaEIsTUFBaEMsQ0FBTCxFQUE4QztBQUMxQyxjQUFJLEtBQUtpQixzQkFBVCxFQUFpQyxDQUM3QjtBQUNBO0FBQ0gsV0FIRCxNQUdPO0FBQ0gsa0JBQU0sS0FBSzFGLE1BQUwsQ0FBWXdGLGFBQVosRUFBTjtBQUNIO0FBQ0o7QUFDSixPQVRELENBU0UsT0FBT3RCLENBQVAsRUFBVTtBQUNSLGFBQUt2RixNQUFMLENBQVlnSCxJQUFaLENBQWlCLDZCQUE2QnpCLENBQTlDLEVBRFEsQ0FDNkM7QUFDeEQ7O0FBQ0QsV0FBS2xFLE1BQUwsR0FBYyxJQUFkO0FBQ0EsV0FBS2pCLHVCQUFMLEdBQStCLElBQS9CO0FBQ0EsWUFBTXlGLE9BQU47QUFDSCxLQTdCRCxNQTZCTztBQUNIO0FBQ0g7QUFDSjtBQUVEO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNJb0IsRUFBQUEsV0FBVyxDQUFDckcsSUFBRCxFQUFPO0FBQ2RzRyxJQUFBQSxNQUFNLENBQUNDLG9CQUFQLEdBQThCdkcsSUFBOUI7QUFDSDtBQUVEO0FBQ0o7QUFDQTs7O0FBRUl3RyxFQUFBQSxTQUFTLENBQUN4RyxJQUFELEVBQU87QUFDWixXQUFPcEIsZUFBZSxDQUFDc0gsUUFBaEIsQ0FBeUJsRyxJQUF6QixDQUFQO0FBQ0g7O0FBRUR5RyxFQUFBQSxxQkFBcUIsQ0FBQ3pHLElBQUQsRUFBTztBQUN4QixRQUFJLENBQUNyQixzQkFBc0IsQ0FBQ3VILFFBQXZCLENBQWdDbEcsSUFBaEMsQ0FBTCxFQUE0QztBQUN4QyxVQUFJMEcsS0FBSjs7QUFDQSxVQUFJO0FBQ0EsWUFDSSxLQUFLakcsTUFBTCxJQUNBLEtBQUtBLE1BQUwsQ0FBWWtHLGNBRmhCLEVBR0U7QUFDRSxjQUFJQyxNQUFKO0FBQ0EsZUFBS25HLE1BQUwsQ0FBWW9HLElBQVosQ0FBaUIsTUFBTTtBQUNuQixtQkFBTyxJQUFJQyxPQUFKLENBQVksQ0FBQ0MsT0FBRCxFQUFVQyxNQUFWLEtBQXFCO0FBQ3BDLG9CQUFNQyxlQUFlLEdBQUcsS0FBS3hHLE1BQUwsQ0FBWXlHLFNBQVosQ0FBc0IsWUFBVztBQUNyRCxvQkFBSTtBQUNBLHNCQUFJQyxNQUFNLEdBQUcsRUFBYjs7QUFFQSx3QkFBTUMsaUJBQWlCLEdBQUcsT0FBTUMsVUFBVSxHQUFHLElBQW5CLEtBQTRCO0FBQ2xELDBCQUFNQyxLQUFLLEdBQUcsTUFBTSxLQUFLN0csTUFBTCxDQUFZa0csY0FBWixFQUFwQjs7QUFDQSx3QkFBSVUsVUFBSixFQUFnQjtBQUNaLDRCQUFNRSxLQUFLLEdBQUcsTUFBTSxLQUFLOUcsTUFBTCxDQUFZK0csUUFBWixFQUFwQjs7QUFDQSwwQkFBSUQsS0FBSixFQUFXO0FBQ1AsOEJBQU1FLFdBQVcsR0FBR0MsT0FBTyxDQUFDLGVBQUQsQ0FBM0I7O0FBQ0EsNEJBQUlDLFVBQVUsR0FBRyxNQUFNRixXQUFXLENBQUNHLFFBQVosQ0FBcUJMLEtBQXJCLEVBQTRCO0FBQUUvRywwQkFBQUEsS0FBSyxFQUFFLEtBQVQ7QUFBZ0JxSCwwQkFBQUEsVUFBVSxFQUFFO0FBQTVCLHlCQUE1QixDQUF2Qjs7QUFDQSw0QkFBSUYsVUFBVSxJQUFJLE9BQU9BLFVBQVAsS0FBc0IsUUFBeEMsRUFBa0Q7QUFDOUNBLDBCQUFBQSxVQUFVLEdBQUdBLFVBQVUsQ0FBQzFGLE9BQVgsQ0FBbUIsd0JBQW5CLEVBQTZDLEVBQTdDLENBQWI7QUFDQWtGLDBCQUFBQSxNQUFNLENBQUNXLElBQVAsQ0FBWUgsVUFBWjtBQUNIO0FBQ0o7QUFDSjs7QUFFRFIsb0JBQUFBLE1BQU0sQ0FBQ1csSUFBUCxDQUFZUixLQUFaO0FBQ0gsbUJBZkQ7O0FBaUJBLHdCQUFNUyxnQkFBZ0IsR0FBRyxNQUFNLEtBQUtBLGdCQUFMLEVBQS9COztBQUNBLHNCQUFJQSxnQkFBSixFQUFzQjtBQUNsQjtBQUNBLDBCQUFNQyxPQUFPLEdBQUcsTUFBTSxLQUFLdkgsTUFBTCxDQUFZd0gsZ0JBQVosRUFBdEI7O0FBQ0Esd0JBQ0lELE9BQU8sSUFDUDVDLEtBQUssQ0FBQ0MsT0FBTixDQUFjMkMsT0FBZCxDQURBLElBRUFBLE9BQU8sQ0FBQzFDLE1BQVIsR0FBaUIsQ0FIckIsRUFJRTtBQUNFLDJCQUFLLE1BQU00QyxNQUFYLElBQXFCRixPQUFyQixFQUE4QjtBQUMxQiw4QkFBTSxLQUFLdkgsTUFBTCxDQUFZMEgsY0FBWixDQUEyQkQsTUFBM0IsQ0FBTjtBQUNBLDhCQUFNZCxpQkFBaUIsRUFBdkI7QUFDSDtBQUNKO0FBQ0osbUJBYkQsTUFhTztBQUNILDBCQUFNQSxpQkFBaUIsQ0FBQyxLQUFELENBQXZCO0FBQ0gsbUJBcENELENBc0NBOzs7QUFDQSx3QkFBTWdCLFdBQVcsR0FBRyxNQUFNLHVCQUFZakIsTUFBWixFQUFvQjtBQUFFa0Isb0JBQUFBLFNBQVMsRUFBRTtBQUFiLG1CQUFwQixDQUExQjs7QUFDQSxzQkFBSUQsV0FBVyxJQUFJLE9BQU9BLFdBQVAsS0FBdUIsUUFBMUMsRUFBb0Q7QUFDaER4QixvQkFBQUEsTUFBTSxHQUFHd0IsV0FBVyxDQUFDbkcsT0FBWixDQUFvQix5QkFBcEIsRUFBK0MsRUFBL0MsQ0FBVDtBQUNIOztBQUVELHlCQUFPLElBQVA7QUFDSCxpQkE3Q0QsQ0E2Q0UsT0FBTzBDLENBQVAsRUFBVTtBQUNSK0Isa0JBQUFBLEtBQUssR0FBRy9CLENBQVI7QUFDQSx5QkFBTyxLQUFQO0FBQ0g7QUFDSixlQWxEdUIsRUFtRHhCO0FBQUUyRCxnQkFBQUEsT0FBTyxFQUFFLEtBQUc7QUFBZCxlQW5Ed0IsQ0FBeEI7O0FBcURBLGtCQUFJckIsZUFBZSxJQUFJQSxlQUFlLENBQUNzQixJQUF2QyxFQUE2QztBQUN6Q3RCLGdCQUFBQSxlQUFlLENBQUNzQixJQUFoQixDQUFxQixNQUFNO0FBQ3ZCeEIsa0JBQUFBLE9BQU87QUFDVixpQkFGRCxFQUVHeUIsS0FGSCxDQUVVQyxHQUFELElBQVM7QUFDZHpCLGtCQUFBQSxNQUFNLENBQUN5QixHQUFELENBQU47QUFDSCxpQkFKRDtBQUtILGVBTkQsTUFNTztBQUNIMUIsZ0JBQUFBLE9BQU87QUFDVjtBQUNKLGFBL0RNLENBQVA7QUFnRUgsV0FqRUQ7O0FBbUVBLGNBQUlMLEtBQUosRUFBVztBQUNQLGlCQUFLdEgsTUFBTCxDQUFZc0gsS0FBWixDQUFrQix1QkFBbEIsRUFBMkNBLEtBQTNDO0FBQ0g7O0FBRUQsaUJBQU9FLE1BQVA7QUFDSDtBQUNKLE9BL0VELENBK0VFLE9BQU9qQyxDQUFQLEVBQVU7QUFDUixhQUFLdkYsTUFBTCxDQUFZc0gsS0FBWixDQUFrQix1QkFBbEIsRUFBMkMvQixDQUEzQzs7QUFDQSxZQUFJK0IsS0FBSixFQUFXO0FBQ1AsZUFBS3RILE1BQUwsQ0FBWXNILEtBQVosQ0FBa0IsbUNBQWxCLEVBQXVEQSxLQUF2RDtBQUNILFNBSk8sQ0FLUjs7QUFDSDtBQUNKO0FBQ0osR0EzWHFELENBNlh0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQWdDLEVBQUFBLGdCQUFnQixDQUFDQyxHQUFELEVBQU1DLEdBQU4sRUFBVztBQUN2QixRQUFJLENBQUNELEdBQUQsSUFBUSxPQUFPQSxHQUFQLEtBQWUsUUFBM0IsRUFBcUM7QUFDakMsYUFBTyxJQUFQO0FBQ0gsS0FIc0IsQ0FJdkI7OztBQUNBLFdBQU87QUFDSEUsTUFBQUEsSUFBSSxFQUFFRixHQUFHLENBQUNHLFNBRFA7QUFFSEMsTUFBQUEsR0FBRyxFQUFFSixHQUFHLENBQUNLLE9BRk47QUFHSEMsTUFBQUEsS0FBSyxFQUFFTixHQUFHLENBQUNNLEtBSFI7QUFJSEwsTUFBQUEsR0FBRyxFQUFFQTtBQUpGLEtBQVA7QUFNSDs7QUFFRE0sRUFBQUEsZUFBZSxHQUFHO0FBQ2Q7QUFDQTVDLElBQUFBLE1BQU0sQ0FBQ0Msb0JBQVAsR0FBOEIsSUFBOUI7QUFDSDs7QUFFa0IsUUFBYjRDLGFBQWEsQ0FBQ3pDLEtBQUQsRUFBUTtBQUN2QixRQUFJQSxLQUFLLElBQUlBLEtBQUssQ0FBQzBDLElBQU4sS0FBZUMsZ0JBQVlDLFNBQVosQ0FBc0JDLHdCQUFsRCxFQUE0RTtBQUN4RSxXQUFLcEQsc0JBQUwsR0FBOEIsSUFBOUI7QUFDQTtBQUNILEtBSEQsTUFHTztBQUNILFdBQUtBLHNCQUFMLEdBQThCLEtBQTlCO0FBQ0gsS0FOc0IsQ0FPdkI7OztBQUNBLFFBQUksQ0FBQyxLQUFLN0YsYUFBVixFQUF5QjtBQUNyQjtBQUNILEtBVnNCLENBV3ZCOzs7QUFDQSxRQUFJLEtBQUtyQixPQUFMLENBQWFxQyxpQkFBakIsRUFBb0M7QUFDaEMsVUFBSTtBQUNBLGNBQU1rSSxJQUFJLEdBQUcsTUFBTSxLQUFLQyxhQUFMLEVBQW5COztBQUNBLFlBQUlELElBQUksSUFBSXBFLEtBQUssQ0FBQ0MsT0FBTixDQUFjbUUsSUFBZCxDQUFaLEVBQWlDO0FBQzdCLGVBQUssSUFBSWIsR0FBVCxJQUFnQmEsSUFBaEIsRUFBc0I7QUFDbEIsaUJBQUtySyxFQUFMLENBQVFxSyxJQUFSLENBQWExQixJQUFiLENBQWtCLEtBQUtZLGdCQUFMLENBQXNCQyxHQUF0QixFQUEyQixRQUEzQixDQUFsQjtBQUNIO0FBQ0o7QUFDSixPQVBELENBUUEsT0FBT2hFLENBQVAsRUFBVTtBQUNOO0FBQ0EsYUFBS3ZGLE1BQUwsQ0FBWXNILEtBQVosQ0FBa0IsOEJBQWxCLEVBQWtEL0IsQ0FBbEQ7QUFDSDtBQUNKLEtBekJzQixDQTJCdkI7OztBQUNBLFFBQUksS0FBSzFGLE9BQUwsQ0FBYXlLLGtCQUFqQixFQUFxQztBQUNqQyxVQUFJO0FBQ0EsY0FBTUYsSUFBSSxHQUFHLE1BQU0sS0FBS0csY0FBTCxFQUFuQjs7QUFDQSxZQUFJSCxJQUFJLElBQUlwRSxLQUFLLENBQUNDLE9BQU4sQ0FBY21FLElBQWQsQ0FBWixFQUFpQztBQUM3QixlQUFLLElBQUliLEdBQVQsSUFBZ0JhLElBQWhCLEVBQXNCO0FBQ2xCLGlCQUFLckssRUFBTCxDQUFRcUssSUFBUixDQUFhMUIsSUFBYixDQUFrQixLQUFLWSxnQkFBTCxDQUFzQkMsR0FBdEIsRUFBMkIsU0FBM0IsQ0FBbEI7QUFDSDtBQUNKO0FBQ0osT0FQRCxDQVFBLE9BQU9oRSxDQUFQLEVBQVU7QUFDTjtBQUNBLGFBQUt2RixNQUFMLENBQVlzSCxLQUFaLENBQWtCLCtCQUFsQixFQUFtRC9CLENBQW5EO0FBQ0g7QUFDSixLQXpDc0IsQ0EyQ3ZCOzs7QUFDQSxRQUFJLEtBQUsxRixPQUFMLENBQWEySyxpQkFBakIsRUFBb0M7QUFDaEMsVUFBSTtBQUNBLGNBQU1KLElBQUksR0FBRyxLQUFLSyxhQUFMLEVBQWI7O0FBQ0EsWUFBSUwsSUFBSSxJQUFJcEUsS0FBSyxDQUFDQyxPQUFOLENBQWNtRSxJQUFkLENBQVosRUFBaUM7QUFDN0IsZUFBSyxJQUFJTSxRQUFULElBQXFCTixJQUFyQixFQUEyQjtBQUN2QixpQkFBS3JLLEVBQUwsQ0FBUXFLLElBQVIsQ0FBYTFCLElBQWIsQ0FBa0IsS0FBS1ksZ0JBQUwsQ0FBc0JvQixRQUF0QixFQUFnQyxRQUFoQyxDQUFsQjtBQUNIO0FBQ0o7QUFDSixPQVBELENBUUEsT0FBT25GLENBQVAsRUFBVTtBQUNOO0FBQ0EsYUFBS3ZGLE1BQUwsQ0FBWXNILEtBQVosQ0FBa0IsOEJBQWxCLEVBQWtEL0IsQ0FBbEQ7QUFDSDtBQUNKO0FBQ0o7O0FBRURvRixFQUFBQSxlQUFlLENBQUNDLE9BQUQsRUFBVTtBQUNyQixRQUFJLENBQUNBLE9BQUwsRUFBYztBQUNWLFlBQU0sSUFBSW5LLG9CQUFKLENBQVlDLGdCQUFVd0osU0FBVixDQUFvQlcsWUFBaEMsRUFBOEMsMENBQTlDLENBQU47QUFDSDs7QUFDRCxRQUFJLE9BQU9ELE9BQVAsS0FBbUIsUUFBdkIsRUFBaUM7QUFDN0IsYUFBT0EsT0FBUDtBQUNIOztBQUNELFFBQUlBLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixHQUFoQixNQUF5QixDQUE3QixFQUFnQztBQUM1QixhQUFPRixPQUFQLENBRDRCLENBQ1o7QUFDbkI7O0FBQ0QsVUFBTUcsUUFBUSxHQUFHLEtBQUtoSyxJQUFMLElBQWEsS0FBS0EsSUFBTCxDQUFVVSxZQUF2QixHQUFzQyxLQUFLVixJQUFMLENBQVVVLFlBQVYsQ0FBdUJZLFdBQXZCLEVBQXRDLEdBQTZFLElBQTlGOztBQUVBLFFBQUksS0FBSzlCLFVBQUwsS0FBb0IsWUFBcEIsSUFBb0N3SyxRQUFRLEtBQUssU0FBckQsRUFBZ0U7QUFDNUQsVUFBSUgsT0FBTyxDQUFDRSxPQUFSLENBQWdCLEtBQWhCLE1BQTJCLENBQS9CLEVBQWtDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBRixRQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ0ksTUFBUixDQUFlLE1BQU05RSxNQUFyQixDQUFWOztBQUNBLFlBQUkwRSxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsTUFBaEIsTUFBNEIsQ0FBQyxDQUFqQyxFQUFvQztBQUNoQ0YsVUFBQUEsT0FBTyxHQUFHLEtBQUs3SixJQUFMLENBQVVxQixVQUFWLEdBQXVCLE1BQXZCLEdBQWdDd0ksT0FBMUM7QUFDSDs7QUFDRCxlQUFPLDBDQUEwQ0EsT0FBMUMsR0FBb0QsSUFBM0Q7QUFDSCxPQVRELE1BU08sSUFBSUEsT0FBTyxDQUFDRSxPQUFSLENBQWdCLFFBQWhCLE1BQThCLENBQWxDLEVBQ0gsT0FBTyx5Q0FBeUNGLE9BQU8sQ0FBQ0ksTUFBUixDQUFlLFNBQVM5RSxNQUF4QixDQUF6QyxHQUEyRSxJQUFsRixDQURHLEtBRUYsSUFBSTBFLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixPQUFoQixNQUE2QixDQUFqQyxFQUNELE9BQU8sb0NBQW9DRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxRQUFROUUsTUFBdkIsQ0FBcEMsR0FBcUUsSUFBNUUsQ0FEQyxLQUVBLElBQUkwRSxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsZ0JBQWhCLE1BQXNDLENBQTFDLEVBQ0QsT0FBTyw0Q0FBNENGLE9BQU8sQ0FBQ0ksTUFBUixDQUFlLGlCQUFpQjlFLE1BQWhDLENBQTVDLEdBQXNGLElBQTdGLENBREMsS0FFQSxJQUFJMEUsT0FBTyxDQUFDRSxPQUFSLENBQWdCLE9BQWhCLE1BQTZCLENBQWpDLEVBQ0QsT0FBTywyQ0FBMkNGLE9BQU8sQ0FBQ0ksTUFBUixDQUFlLFFBQVE5RSxNQUF2QixDQUEzQyxHQUE0RSxJQUFuRixDQURDLEtBRUEsSUFBSTBFLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixnQkFBaEIsTUFBc0MsQ0FBMUMsRUFDRCxPQUFPLG1EQUFtREYsT0FBTyxDQUFDSSxNQUFSLENBQWUsaUJBQWlCOUUsTUFBaEMsQ0FBbkQsR0FBNkYsSUFBcEcsQ0FEQyxLQUVBLElBQUkwRSxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsWUFBaEIsTUFBa0MsQ0FBdEMsRUFDRCxPQUFPLDJDQUFQLENBREMsS0FFQSxJQUFJRixPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsR0FBaEIsTUFBeUIsQ0FBN0IsRUFBbUM7QUFDcEMsZUFBT0YsT0FBUDtBQUNQLEtBeEJELE1Bd0JPLElBQUksS0FBS3JLLFVBQUwsS0FBb0IsWUFBcEIsSUFBb0N3SyxRQUFRLEtBQUssS0FBckQsRUFBNEQ7QUFDL0QsVUFBSUgsT0FBTyxDQUFDRSxPQUFSLENBQWdCLEdBQWhCLE1BQXlCLENBQTdCLEVBQWdDO0FBQzVCLGVBQU9GLE9BQVA7QUFDUCxLQUhNLE1BR0EsSUFBSSxLQUFLckssVUFBTCxLQUFvQixZQUF4QixFQUFzQztBQUFhO0FBQ3RELFVBQUlxSyxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsS0FBaEIsTUFBMkIsQ0FBL0IsRUFDSSxPQUFPLE1BQU1GLE9BQU8sQ0FBQ0ksTUFBUixDQUFlLE1BQU05RSxNQUFyQixDQUFiLENBREosQ0FDb0Q7QUFEcEQsV0FFSyxJQUFJMEUsT0FBTyxDQUFDRSxPQUFSLENBQWdCLE9BQWhCLE1BQTZCLENBQWpDLEVBQ0QsT0FBTyxXQUFXRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxRQUFROUUsTUFBdkIsQ0FBWCxHQUE0QyxHQUFuRCxDQURDLEtBRUEsSUFBSTBFLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixPQUFoQixNQUE2QixDQUFqQyxFQUNELE9BQU8sTUFBTUYsT0FBTyxDQUFDSSxNQUFSLENBQWUsUUFBUTlFLE1BQXZCLENBQWIsQ0FEQyxLQUVBLElBQUkwRSxPQUFPLENBQUNFLE9BQVIsQ0FBZ0IsZ0JBQWhCLE1BQXNDLENBQTFDLEVBQ0QsT0FBTyxPQUFPRixPQUFPLENBQUNJLE1BQVIsQ0FBZSxRQUFROUUsTUFBdkIsQ0FBZCxDQURDLEtBRUEsSUFBSTBFLE9BQU8sQ0FBQ0UsT0FBUixDQUFnQixNQUFoQixNQUE0QixDQUFoQyxFQUNELE9BQU9GLE9BQU8sQ0FBQ0ksTUFBUixDQUFlLE9BQU85RSxNQUF0QixDQUFQLENBVnFDLENBVVc7QUFDdkQ7O0FBRUQsV0FBTzBFLE9BQVA7QUFDSDs7QUFFRHBLLEVBQUFBLG9CQUFvQixHQUFHO0FBQ25CLFNBQUtGLE9BQUwsQ0FBYTJLLGNBQWIsR0FBOEIsS0FBS04sZUFBbkM7QUFDQSxTQUFLckssT0FBTCxDQUFhNEssWUFBYixHQUE0QmxILGVBQVNrSCxZQUFyQztBQUNBLFNBQUs1SyxPQUFMLENBQWE2SyxVQUFiLEdBQTBCbkgsZUFBU21ILFVBQW5DO0FBQ0EsU0FBSzdLLE9BQUwsQ0FBYThLLFdBQWIsR0FBMkJwSCxlQUFTb0gsV0FBcEM7QUFDQSxTQUFLOUssT0FBTCxDQUFhK0ssZUFBYixHQUErQnJILGVBQVNxSCxlQUF4QztBQUNBLFNBQUsvSyxPQUFMLENBQWFnTCxnQkFBYixHQUFnQ3RILGVBQVNzSCxnQkFBekM7QUFDQSxTQUFLaEwsT0FBTCxDQUFhaUwsa0JBQWIsR0FBa0N2SCxlQUFTdUgsa0JBQTNDO0FBQ0EsU0FBS2pMLE9BQUwsQ0FBYWtMLHNCQUFiLEdBQXNDeEgsZUFBU3dILHNCQUEvQztBQUNBLFNBQUtsTCxPQUFMLENBQWFtTCxjQUFiLEdBQThCekgsZUFBU3lILGNBQXZDO0FBQ0EsU0FBS25MLE9BQUwsQ0FBYW9MLDRCQUFiLEdBQTRDMUgsZUFBUzBILDRCQUFyRDtBQUNBLFNBQUtwTCxPQUFMLENBQWFxTCxvQkFBYixHQUFvQzNILGVBQVMySCxvQkFBN0M7QUFDQSxTQUFLckwsT0FBTCxDQUFhc0wsK0JBQWIsR0FBK0M1SCxlQUFTNEgsK0JBQXhEO0FBQ0EsU0FBS3RMLE9BQUwsQ0FBYXVMLGtCQUFiLEdBQWtDN0gsZUFBUzZILGtCQUEzQztBQUNBLFNBQUt2TCxPQUFMLENBQWF3TCwwQkFBYixHQUEwQzlILGVBQVM4SCwwQkFBbkQ7QUFDQSxTQUFLeEwsT0FBTCxDQUFheUwscUJBQWIsR0FBcUMvSCxlQUFTK0gscUJBQTlDO0FBQ0EsU0FBS3pMLE9BQUwsQ0FBYTBMLGFBQWIsR0FBNkJoSSxlQUFTZ0ksYUFBdEM7QUFDQSxTQUFLMUwsT0FBTCxDQUFhMkwsV0FBYixHQUEyQmpJLGVBQVNpSSxXQUFwQztBQUNBLFNBQUszTCxPQUFMLENBQWE0TCxXQUFiLEdBQTJCbEksZUFBU2tJLFdBQXBDO0FBQ0g7O0FBRWtCLFFBQWJyRixhQUFhLEdBQUc7QUFDbEIsUUFBSTtBQUNBLFVBQUksS0FBS3hGLE1BQUwsSUFBZSxLQUFLQSxNQUFMLENBQVl3RixhQUEvQixFQUE4QztBQUMxQyxjQUFNLEtBQUt4RixNQUFMLENBQVl3RixhQUFaLEVBQU47QUFDSDtBQUNKLEtBSkQsQ0FJRSxPQUFPdEIsQ0FBUCxFQUFVO0FBQ1IsV0FBS3ZGLE1BQUwsQ0FBWXNILEtBQVosQ0FBa0IscUJBQWxCLEVBQXlDL0IsQ0FBekM7QUFDSDtBQUNKOztBQUVvQyxRQUEvQnFCLCtCQUErQixDQUFDZCxNQUFELEVBQVM7QUFDMUMsV0FBTyxJQUFJNEIsT0FBSixDQUFZLENBQUNDLE9BQUQsRUFBVUMsTUFBVixLQUFxQjtBQUNwQyxZQUFNdUUsV0FBVyxHQUFHO0FBQ2hCckcsUUFBQUEsTUFBTSxFQUFFQSxNQUFNLEtBQUssUUFBWCxHQUFzQixRQUF0QixHQUFpQztBQUR6QixPQUFwQjtBQUlBLFVBQUlqRyxPQUFKOztBQUVBLFVBQUksS0FBS3lELFFBQUwsQ0FBY0csWUFBZCxDQUEyQjdCLFdBQS9CLEVBQTRDO0FBQ3hDL0IsUUFBQUEsT0FBTyxHQUFHO0FBQ040QyxVQUFBQSxHQUFHLEVBQUcsa0RBQWlELEtBQUtwQixNQUFMLENBQVkrSyxTQUFVLE9BRHZFO0FBRU5DLFVBQUFBLE1BQU0sRUFBRSxLQUZGO0FBR05DLFVBQUFBLElBQUksRUFBRSxJQUhBO0FBSU5DLFVBQUFBLGtCQUFrQixFQUFFLEtBSmQ7QUFLTkMsVUFBQUEsSUFBSSxFQUFFTCxXQUxBO0FBTU4sa0JBQVE7QUFDSixvQkFBUSxLQUFLN0ksUUFBTCxDQUFjQyxJQURsQjtBQUVKLG9CQUFRLEtBQUtELFFBQUwsQ0FBY0UsR0FGbEI7QUFHSiwrQkFBbUI7QUFIZjtBQU5GLFNBQVY7QUFZSCxPQWJELE1BYU87QUFDSDNELFFBQUFBLE9BQU8sR0FBRztBQUNONEMsVUFBQUEsR0FBRyxFQUFHLDREQUEyRCxLQUFLcEIsTUFBTCxDQUFZK0ssU0FBVSxPQURqRjtBQUVOQyxVQUFBQSxNQUFNLEVBQUUsS0FGRjtBQUdOQyxVQUFBQSxJQUFJLEVBQUUsSUFIQTtBQUlOQyxVQUFBQSxrQkFBa0IsRUFBRSxLQUpkO0FBS05DLFVBQUFBLElBQUksRUFBRUwsV0FMQTtBQU1OLGtCQUFRO0FBQ0osb0JBQVEsS0FBSzdJLFFBQUwsQ0FBY0csWUFBZCxDQUEyQixtQkFBM0IsQ0FESjtBQUVKLG9CQUFRLEtBQUtILFFBQUwsQ0FBY0csWUFBZCxDQUEyQixrQkFBM0IsQ0FGSjtBQUdKLCtCQUFtQjtBQUhmO0FBTkYsU0FBVjtBQVlIOztBQUVELFVBQUk7QUFDQSw4QkFBUTVELE9BQVIsRUFBaUIsQ0FBQ3dKLEdBQUQsRUFBTW9ELEdBQU4sRUFBV0QsSUFBWCxLQUFvQjtBQUNqQzdFLFVBQUFBLE9BQU87QUFDVixTQUZEO0FBR0gsT0FKRCxDQUlFLE9BQU9wQyxDQUFQLEVBQVU7QUFDUixhQUFLdkYsTUFBTCxDQUFZc0gsS0FBWixDQUFrQixtREFBbUQvQixDQUFDLENBQUNtSCxRQUFGLEVBQXJFO0FBQ0EvRSxRQUFBQSxPQUFPO0FBQ1Y7QUFDSixLQTNDTSxDQUFQO0FBNENIOztBQXBsQnFEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSBtb2JcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIG1vYmlsZSBhdXRvbWF0aW9uLlxyXG4gKiBAc2FtcGxlICoqTG9jYXRvcnM6KiogIFxyXG4gKiBcclxuICogTmF0aXZlIGFwcGxpY2F0aW9uIGxvY2F0b3JzIGZvciFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYW5kcm9pZC5wbmcpICBcclxuICogKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogKiBgfkFDQ0VTU0lCSUxJVFlfSURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBBY2Nlc3NpYmlsaXR5IElkLlxyXG4gKiAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGlkLlxyXG4gKiAqIGBjbGFzcz1DTEFTU2AgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGNsYXNzLlxyXG4gKiAqIGB0ZXh0PVRFWFRgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyB2aXNpYmxlIHRleHQuXHJcbiAqICogYHRleHQtY29udGFpbnM9VEVYVGAgLSBMb2NhdGVzIGVsZW1lbnQgd2hvc2UgdmlzaWJsZSB0ZXh0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3RyaW5nLlxyXG4gKiAqIGBkZXNjPURFU0NSSVBUSU9OYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgZGVzY3JpcHRpb24uXHJcbiAqICogYGRlc2MtY29udGFpbnM9REVTQ1JJUFRJT05gIC0gTG9jYXRlcyBlbGVtZW50IHdob3NlIGRlc2NyaXB0aW9uIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3RyaW5nLlxyXG4gKiAqIGBzY3JvbGxhYmxlYCAtIExvY2F0ZXMgZWxlbWVudHMgdGhhdCBhcmUgc2Nyb2xsYWJsZS4gIFxyXG4gKiAgXHJcbiAqIE5hdGl2ZSBhcHBsaWNhdGlvbiBsb2NhdG9ycyBmb3IhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FwcGxlLnBuZykgIFxyXG4gKiAgXHJcbiAqICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICogYGlkPUlEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgSUQuXHJcbiAqICogYH5BQ0NFU1NJQklMSVRZX0lEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJZC4gIFxyXG4gKiAgXHJcbiAqIEh5YnJpZCFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvaHlicmlkLnBuZykgIGFuZCBXZWIhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL3dlYi5wbmcpICBhcHBsaWNhdGlvbiBsb2NhdG9ycyBmb3IhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FuZHJvaWQucG5nKSAgIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hcHBsZS5wbmcpICBcclxuICogIFxyXG4gKiAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGlkLlxyXG4gKiAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBuYW1lIGF0dHJpYnV0ZS5cclxuICogKiBgdGFnPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyB0YWcgbmFtZS5cclxuICogKiBgbGluaz1URVhUYCAtIExvY2F0ZXMgYW5jaG9yIGVsZW1lbnQgd2hvc2UgdGV4dCBtYXRjaGVzIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICogYGxpbmstY29udGFpbnM9VEVYVGAgLSBMb2NhdGVzIGFuY2hvciBlbGVtZW50IHdob3NlIHRleHQgY29udGFpbnMgdGhlIGdpdmVuIHN0cmluZy5cclxuICogKiBgY3NzPUNTU19TRUxFQ1RPUmAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYSBDU1Mgc2VsZWN0b3IuXHJcbiAqIFxyXG4gKiAqKlBhdHRlcm4gYXJndW1lbnRzOioqXHJcbiAqIFxyXG4gKiBDb21tYW5kcyB3aGljaCBleHBlY3QgYSBzdHJpbmcgbWF0Y2hpbmcgcGF0dGVybiBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIHBhdHRlcm5zIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlOlxyXG4gKiBcclxuICogKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICogYFBBVFRFUk5gIC0gVmVyYmF0aW0gbWF0Y2hpbmcuXHJcbiAqIFxyXG4gKi9cclxuaW1wb3J0IFVSTCBmcm9tICd1cmwnO1xyXG5pbXBvcnQgKiBhcyB3ZGlvIGZyb20gJ3dlYmRyaXZlcmlvJztcclxuaW1wb3J0IFdlYkRyaXZlck1vZHVsZSBmcm9tICcuLi9jb3JlL1dlYkRyaXZlck1vZHVsZSc7XHJcbmltcG9ydCBtb2RVdGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IGVyckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IHBlcmZlY3RvUmVwb3J0aW5nIGZyb20gJ3BlcmZlY3RvLXJlcG9ydGluZyc7XHJcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3JlcXVlc3QnO1xyXG5pbXBvcnQgbWVyZ2VJbWFnZXMgZnJvbSAnLi4vbGliL2ltZy1tZXJnZSc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ21vYic7XHJcbmNvbnN0IERFRkFVTFRfQVBQSVVNX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJztcclxuY29uc3QgREVGQVVMVF9CUk9XU0VSX05BTUUgPSAnZGVmYXVsdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywndGFwJywnY2xpY2snLCdzd2lwZScsJ3N1Ym1pdCcsJ3NldFZhbHVlJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9iaWxlTW9kdWxlIGV4dGVuZHMgV2ViRHJpdmVyTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0ge307XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5uZXR3b3JrUmVxdWVzdHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dCA9ICdOQVRJVkVfQVBQJztcclxuICAgICAgICB0aGlzLl9sb2FkSGVscGVyRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgLy8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IChzb21lIG1vZHVsZSBjb21tYW5kcyBtaWdodCByZWZlciB0byB0aGlzLk94RXJyb3IgYW5kIHRoaXMuZXJySGVscGVyKVxyXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJIZWxwZXIgPSBlcnJIZWxwZXI7XHJcbiAgICAgICAgLy8gaG9sZHMgZWxlbWVudCBvcGVyYXRpb24gdGltZW91dCB2YWx1ZVxyXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0RHJpdmVyXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBXRElPIGRyaXZlci5cclxuICAgICAqL1xyXG4gICAgZ2V0RHJpdmVyKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXREcml2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXRDYXBhYmlsaXRpZXNcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENhcGFiaWxpdGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBzIHx8IHN1cGVyLmdldENhcGFiaWxpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IEFwcGl1bSBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMuIElmIG5vdCBzcGVjaWZpZWQgY2FwYWJpbGl0aWVzIHdpbGwgYmUgdGFrZW4gZnJvbSBzdWl0ZSBkZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBhcHBpdW1VcmwgLSBSZW1vdGUgQXBwaXVtIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIGFwcGl1bVVybCkge1xyXG4gICAgICAgIC8vIGlmIHJlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlaW5pdGlsaXplIHRoZSBtb2R1bGVcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVvcGVuU2Vzc2lvbiAhPT0gZmFsc2UpIHsgLy8gdHJ1ZSBvciBmYWxzZSBpZiBleHBsaXNpdGx5IHNldC4gdHJ1ZSBvbiBudWxsIG9yIHVuZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdyZW9wZW5TZXNzaW9uIGlzIHRydWUgLSByZWxvYWRpbmcgdGhlIHNlc3Npb24uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnJlbG9hZFNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ21vYi5pbml0IHdhcyBjYWxsZWQgZm9yIGFscmVhZHkgaW5pdGlhbGl6ZWQgbW9kdWxlLiByZW9wZW5TZXNzaW9uIGlzIGZhbHNlIHNvIHRoZSBjYWxsIGlzIGlnbm9yZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWRcclxuICAgICAgICBpZiAodGhpcy5jdHguY2FwcyAmJiB0aGlzLmN0eC5jYXBzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLnBsYXRmb3JtTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLnBsYXRmb3JtVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLmRldmljZU5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy5icm93c2VyTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLmF1dG9tYXRpb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMudWRpZDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2Fwcy5hcHApIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXBzLmVuYWJsZUFwcGl1bUJlaGF2aW9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2Fwcy51c2VBcHBpdW1Gb3JXZWIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHMuZW5hYmxlQXBwaXVtQmVoYXZpb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHguY2Fwcy51c2VBcHBpdW1Gb3JXZWIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHguY2Fwcy5lbmFibGVBcHBpdW1CZWhhdmlvciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgICAgIGFwcGl1bVVybCA9IHRoaXMub3B0aW9ucy5hcHBpdW1VcmwgfHwgREVGQVVMVF9BUFBJVU1fVVJMO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbWVyZ2UgY2FwYWJpbGl0aWVzIGZyb20gY29udGV4dCBhbmQgZnJvbSBpbml0IGZ1bmN0aW9uIGFyZ3VtZW50LCBnaXZlIHByZWZlcmVuY2UgdG8gY29udGV4dC1wYXNzZWQgY2FwYWJpbGl0aWVzXHJcbiAgICAgICAgdGhpcy5jYXBzID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmN0eC5jYXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jYXBzLCAuLi5jYXBzIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gY2xlYXIgdGhlIGV4aXN0aW5nIGRldmljZSBsb2dzLCBpZiBjb2xsZWN0RGV2aWNlTG9ncyBvcHRpb24gaXMgdHJ1ZSAod2Ugd2FudCB0byBpbmNsdWRlIGxvZ3Mgb25seSByZWxldmFudCBmb3IgdGhpcyBzZXNzaW9uKVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdERldmljZUxvZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmNsZWFyRGV2aWNlTG9nc09uU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWYgYm90aCBicm93c2VyTmFtZSBhbmQgYXBwUGFja2FnZSB3ZXJlIHNwZWNpZmllZCAtIHJlbW92ZSBicm93c2VyTmFtZVxyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgKHRoaXMuY2Fwcy5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHApKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhcHMuYnJvd3Nlck5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIG5vIGFwcFBhY2thZ2Ugbm9yIGFwcCBjYXBhYmlsaXR5LCBub3QgYnJvd3Nlck5hbWUgYXJlIGRlZmluZWQsIGFzc3VtZSB3ZSB3YW50IHRvIHJ1biB0aGUgdGVzdCBhZ2FpbnN0IGRlZmF1bHQgYnJvd3NlclxyXG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgIXRoaXMuY2Fwcy5hcHBQYWNrYWdlICYmICF0aGlzLmNhcHMuYXBwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IERFRkFVTFRfQlJPV1NFUl9OQU1FO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB3ZWJkcml2ZXIgZXhwZWN0cyBsb3dlciBjYXNlIG5hbWVzXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiB0eXBlb2YgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYWRqdXN0IGNhcGFiaWxpdGllcyB0byBlbmFibGUgY29sbGVjdGluZyBicm93c2VyIGFuZCBwZXJmb3JtYW5jZSBzdGF0cyBpbiBDaHJvbWUgXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHNbJ2dvb2c6bG9nZ2luZ1ByZWZzJ10gPSB7ICAgICAvLyBmb3IgQ2hyb21lRHJpdmVyID49IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcG9wdWxhdGUgV0RJTyBvcHRpb25zXHJcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLnBhcnNlKGFwcGl1bVVybCk7XHJcbiAgICAgICAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJyk7XHJcbiAgICAgICAgY29uc3QgaG9zdCA9IHVybC5ob3N0bmFtZTtcclxuICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodXJsLnBvcnQgfHwgKHByb3RvY29sID09PSAnaHR0cHMnID8gNDQzIDogODApKTtcclxuICAgICAgICBjb25zdCBwYXRoID0gdXJsLnBhdGhuYW1lO1xyXG5cclxuICAgICAgICAvLyBhdXRoIGlzIG5lZWRlZCBtb3N0bHkgZm9yIGNsb3VkIHByb3ZpZGVycyBzdWNoIGFzIExhbWJkYVRlc3RcclxuICAgICAgICBpZiAodXJsLmF1dGgpIHtcclxuICAgICAgICAgICAgY29uc3QgYXV0aCA9IHVybC5hdXRoLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy53ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IGF1dGhbMF0sXHJcbiAgICAgICAgICAgICAgICBrZXk6IGF1dGhbMV1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLndkaW9PcHRzIHx8IHt9LFxyXG4gICAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wsXHJcbiAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxyXG4gICAgICAgICAgICBwb3J0OiBwb3J0LFxyXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2FwcyxcclxuICAgICAgICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxyXG4gICAgICAgICAgICBydW5uZXI6ICdyZXBsJyxcclxuICAgICAgICAgICAgd2FpdGZvclRpbWVvdXQ6IDUwMDAsIC8vIGluY3JlYXNlIHRoZSBkZWZhdWx0IDMwMDBcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogMzEwKjEwMDAsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IHByb3ZpZGVyID0gbW9kVXRpbHMuZGV0ZXJtaW5lUHJvdmlkZXIod2Rpb09wdHMpO1xyXG4gICAgICAgIGxldCBuYW1lID0gJ25hbWUnO1xyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLmNhcGFiaWxpdGllcy5tYXhJbnN0YW5jZXMgPSAxO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wYXRoID0gJy9uZXhwZXJpZW5jZS9wZXJmZWN0b21vYmlsZS93ZC9odWInO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wb3J0ID0gODA7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnByb3RvY29sID0gJ2h0dHAnO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5vcGVuRGV2aWNlVGltZW91dCA9IDE1O1xyXG5cclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllcy5tYW51ZmFjdHVyZXI7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMubW9kZWw7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWU7XHJcblxyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnJvd3NlcnN0YWNrOm9wdGlvbnMnXSAmJiB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjazpvcHRpb25zJ11bJ25hbWUnXSkge1xyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydicm93c2Vyc3RhY2s6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjazpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLndkaW9PcHRzID0gd2Rpb09wdHM7XHJcblxyXG4gICAgICAgIC8vIGluaXQgd2ViZHJpdmVyXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBhd2FpdCB3ZGlvLnJlbW90ZSh3ZGlvT3B0cyk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLnByb3ZpZGVyID0gcHJvdmlkZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCA9IGF3YWl0IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdlYmRyaXZlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlU2NyaXB0OiBhc3luYyAoY29tbWFuZCwgcGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kcml2ZXIuZXhlY3V0ZShjb21tYW5kLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGluZ0NsaWVudCA9IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b1JlcG9ydGluZ0NsaWVudChwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0YXJ0KG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0Q29udGV4dCgpO1xyXG5cclxuICAgICAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBvbiBBbmRyb2lkIDcrIGVtdWxhdG9yLCBhbmQgdGh1cy9vciB1c2luZyBhIFdlYlZpZXcgQnJvd3NlciBUZXN0ZXIgLVxyXG4gICAgICAgIC8vIHBlcmZvcm0gYW4gYWN0dWFsIGFwcENvbnRleHQgc3dpdGNoIHRvIFdFQlxyXG4gICAgICAgIC8vIHNvIEFwcGl1bSB3aWxsIGRlbGVnYXRlIGNvbW1hbmRzIHRvIENocm9tZSBEcml2ZXIgaW5zdGVhZCBvZiBBcHBpdW0gRHJpdmVyXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gICdjaHJvbWl1bS13ZWJ2aWV3Jykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldFdlYlZpZXdDb250ZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgLy8gZmFpbHMgb24gYnJvd3NlcnN0YWNrXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc3RhdHVzIC0gVGVzdCBzdGF0dXMsIGVpdGhlciBgcGFzc2VkYCBvciBgZmFpbGVkYC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICBpZiAoIXN0YXR1cykge1xyXG4gICAgICAgICAgICBzdGF0dXMgPSAncGFzc2VkJztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJzLnN0ZXBzICYmIEFycmF5LmlzQXJyYXkodGhpcy5ycy5zdGVwcykgJiYgdGhpcy5ycy5zdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWlsZWRGaW5kZWQgPSB0aGlzLnJzLnN0ZXBzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFpbGVkRmluZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RvcCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPT09ICdQQVNTRUQnID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5wYXNzZWQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLmZhaWxlZFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrKHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICghWydDQU5DRUxFRCcsICdGQUlMRUQnXS5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlU2Vzc2lvbiB3aWxsIHRha2UgNSBtaW4gdG8gY2FsbFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Vycm9yIGRpc3Bvc2luZyBkcml2ZXI6ICcgKyBlKTsgICAgLy8gaWdub3JlIGFueSBlcnJvcnMgYXQgZGlzcG9zYWwgc3RhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZVxyXG4gICAgICogICAgICAgICAgICAgIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqIEBmb3IgYW5kcm9pZCwgaW9zLCBoeWJyaWQsIHdlYlxyXG4gICAgICovXHJcbiAgICB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZVxyXG4gICAgICovXHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFVudGlsUmV0VmFsID0gdGhpcy5kcml2ZXIud2FpdFVudGlsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB1c2hJbWFnZVRvSW1hZ2VzID0gYXN5bmMoZmV0Y2hUaXRsZSA9IHRydWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZXRjaFRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaXRsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0VG9JbWFnZSA9IHJlcXVpcmUoJ3RleHQtdG8taW1hZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlSW1hZ2UgPSBhd2FpdCB0ZXh0VG9JbWFnZS5nZW5lcmF0ZSh0aXRsZSwgeyBkZWJ1ZzogZmFsc2UsIGZvbnRGYW1pbHk6ICdBcmlhbCcgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZUltYWdlICYmIHR5cGVvZiB0aXRsZUltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVJbWFnZSA9IHRpdGxlSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKHRpdGxlSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzV2ViVmlld0NvbnRleHQgPSBhd2FpdCB0aGlzLmlzV2ViVmlld0NvbnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzV2ViVmlld0NvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgYWxsIChzY3JlZW5zaG90IGFuZCB0aXRsZSkgaW1hZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGhhbmRsZXMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZSBvZiBoYW5kbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KGhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHB1c2hJbWFnZVRvSW1hZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHVzaEltYWdlVG9JbWFnZXMoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhbGwgaW1hZ2VzIGludG8gb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZEltYWdlID0gYXdhaXQgbWVyZ2VJbWFnZXMoaW1hZ2VzLCB7IGRpcmVjdGlvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlZEltYWdlICYmIHR5cGVvZiBtZXJnZWRJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IG1lcmdlZEltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRVbnRpbFJldFZhbCAmJiB3YWl0VW50aWxSZXRWYWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRVbnRpbFJldFZhbC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCcsIGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIF9nZXRMb2dzKG5hbWUpIHtcclxuICAgIC8vICAgICBpZiAoIU5PX0xPR1NfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9ncygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBfYWRqdXN0QXBwaXVtTG9nKGxvZywgc3JjKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBkZXZpY2UgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncykgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZ25vcmUgdGhlIHJlc3QgaWYgbW9iIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIHRoZSBkZXZpY2UgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0RGV2aWNlTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2csICdkZXZpY2UnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGRldmljZSBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCB0aGUgYnJvd3NlciBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0QnJvd3NlckxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nLCAnYnJvd3NlcicpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QXBwaXVtTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZ0VudHJ5IG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikge1xyXG4gICAgICAgIGlmICghbG9jYXRvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBsb2NhdG9yIG5vdCBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhdG9yICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignLycpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yOyAvLyBsZWF2ZSB4cGF0aCBsb2NhdG9yIGFzIGlzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gdGhpcy5jYXBzICYmIHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUgPyB0aGlzLmNhcHMucGxhdGZvcm1OYW1lLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hcHBDb250ZXh0ID09PSAnTkFUSVZFX0FQUCcgJiYgcGxhdGZvcm0gPT09ICdhbmRyb2lkJykge1xyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gcHJlcGVuZCBwYWNrYWdlIG5hbWUgaWYgaXQncyBub3Qgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBnZXRDdXJyZW50UGFja2FnZSgpIHNlZW1zIHRvIGNyYXNoIHBvc3NpYmx5IGR1ZSB0byBhIHdkaW8gYnVnLiBcclxuICAgICAgICAgICAgICAgIC8vICAgICAgIHNvIHdlIGdldCBwYWNrYWdlIG5hbWUgZnJvbSBjYXBzIGluc3RlYWQuXHJcbiAgICAgICAgICAgICAgICBsb2NhdG9yID0gbG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJzppZC8nKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdG9yID0gdGhpcy5jYXBzLmFwcFBhY2thZ2UgKyAnOmlkLycgKyBsb2NhdG9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkucmVzb3VyY2VJZChcIicgKyBsb2NhdG9yICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjbGFzcz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmNsYXNzTmFtZShcIicgKyBsb2NhdG9yLnN1YnN0cignY2xhc3M9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGV4dD0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnRleHQoXCInICsgbG9jYXRvci5zdWJzdHIoJ3RleHQ9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGV4dC1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnRleHRDb250YWlucyhcIicgKyBsb2NhdG9yLnN1YnN0cigndGV4dC1jb250YWlucz0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdkZXNjPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuZGVzY3JpcHRpb24oXCInICsgbG9jYXRvci5zdWJzdHIoJ2Rlc2M9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignZGVzYy1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uQ29udGFpbnMoXCInICsgbG9jYXRvci5zdWJzdHIoJ2Rlc2MtY29udGFpbnM9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignc2Nyb2xsYWJsZScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuc2Nyb2xsYWJsZSh0cnVlKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignficpID09PSAwKSAgICAvLyBhY2Nlc3NpYmlsaXR5IGlkXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwQ29udGV4dCA9PT0gJ05BVElWRV9BUFAnICYmIHBsYXRmb3JtID09PSAnaW9zJykge1xyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCd+JykgPT09IDApIC8vIGFjY2Vzc2liaWxpdHkgaWRcclxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBDb250ZXh0ICE9PSAnTkFUSVZFX0FQUCcpIHsgICAgICAgICAgICAvLyBIeWJyaWQgb3IgV2ViIGFwcGxpY2F0aW9uXHJcbiAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcjJyArIGxvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCk7ICAgICAgLy8gY29udmVydCAnaWQ9JyB0byAnIydcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbmFtZT0nICsgbG9jYXRvci5zdWJzdHIoJ25hbWU9Jy5sZW5ndGgpICsgJ10nO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbms9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJz0nICsgbG9jYXRvci5zdWJzdHIoJ2xpbms9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbmstY29udGFpbnM9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyo9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjc3M9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvci5zdWJzdHIoJ2Nzcz0nLmxlbmd0aCk7ICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGNzcywganVzdCByZW1vdmUgY3NzPSBwcmVmaXhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IHRoaXMuX2dldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRDb250ZXh0ID0gbW9kVXRpbHMuYXNzZXJ0Q29udGV4dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuY29udGV4dExpc3QgPSBtb2RVdGlscy5jb250ZXh0TGlzdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0TG9nVHlwZXMgPSBtb2RVdGlscy5nZXRMb2dUeXBlcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVTZXNzaW9uKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdkZWxldGVTZXNzaW9uIGVycm9yJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBsZXQgb3B0aW9ucztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYCxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiByZXF1ZXN0Qm9keSxcclxuICAgICAgICAgICAgICAgICAgICAnYXV0aCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5rZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZW5kSW1tZWRpYXRlbHknOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS1jbG91ZC5icm93c2Vyc3RhY2suY29tL2FwcC1hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjay51c2VyJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjay5rZXknXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbmRJbW1lZGlhdGVseSc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0KG9wdGlvbnMsIChlcnIsIHJlcywgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBCcm93c2Vyc3RhY2s6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
699
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1tb2IuanMiXSwibmFtZXMiOlsiTU9EVUxFX05BTUUiLCJERUZBVUxUX0FQUElVTV9VUkwiLCJERUZBVUxUX0JST1dTRVJfTkFNRSIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJBQ1RJT05fQ09NTUFORFMiLCJERUZBVUxUX1dBSVRfVElNRU9VVCIsIk1vYmlsZU1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwibmV0d29ya1JlcXVlc3RzIiwiaGVscGVycyIsImFwcENvbnRleHQiLCJfbG9hZEhlbHBlckZ1bmN0aW9ucyIsIk94RXJyb3IiLCJlcnJIZWxwZXIiLCJ3YWl0Rm9yVGltZW91dCIsIm5hbWUiLCJnZXREcml2ZXIiLCJnZXRDYXBhYmlsaXRpZXMiLCJjYXBzIiwiaW5pdCIsImFwcGl1bVVybCIsImlzSW5pdGlhbGl6ZWQiLCJyZW9wZW5TZXNzaW9uIiwiZGVidWciLCJkcml2ZXIiLCJyZWxvYWRTZXNzaW9uIiwiX2lzSW5pdGlhbGl6ZWQiLCJjdHgiLCJwbGF0Zm9ybU5hbWUiLCJwbGF0Zm9ybVZlcnNpb24iLCJkZXZpY2VOYW1lIiwiYnJvd3Nlck5hbWUiLCJhdXRvbWF0aW9uTmFtZSIsInVkaWQiLCJhcHAiLCJlbmFibGVBcHBpdW1CZWhhdmlvciIsInVzZUFwcGl1bUZvcldlYiIsImNvbGxlY3REZXZpY2VMb2dzIiwiY2xlYXJEZXZpY2VMb2dzT25TdGFydCIsImFwcFBhY2thZ2UiLCJ0b0xvd2VyQ2FzZSIsInJlY29yZEhBUiIsImJyb3dzZXIiLCJwZXJmb3JtYW5jZSIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5IiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsInByb3ZpZGVyIiwibW9kVXRpbHMiLCJkZXRlcm1pbmVQcm92aWRlciIsIlBFUkZFQ1RPIiwibWF4SW5zdGFuY2VzIiwib3BlbkRldmljZVRpbWVvdXQiLCJtYW51ZmFjdHVyZXIiLCJtb2RlbCIsIndkaW8iLCJyZW1vdGUiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwicGVyZmVjdG9FeGVjdXRpb25Db250ZXh0IiwicGVyZmVjdG9SZXBvcnRpbmciLCJQZXJmZWN0byIsIlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsIndlYmRyaXZlciIsImV4ZWN1dGVTY3JpcHQiLCJjb21tYW5kIiwicGFyYW1zIiwiZXhlY3V0ZSIsInJlcG9ydGluZ0NsaWVudCIsIlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50IiwidGVzdFN0YXJ0IiwiZSIsImdldEFwcGl1bUluaXRFcnJvciIsImdldENvbnRleHQiLCJzZXRXZWJWaWV3Q29udGV4dCIsIkJST1dTRVJTVEFDSyIsInNldFRpbWVvdXQiLCJkaXNwb3NlIiwic3RhdHVzIiwic3RlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmYWlsZWRGaW5kZWQiLCJmaW5kIiwiaXRlbSIsInRvVXBwZXJDYXNlIiwidGVzdFN0b3AiLCJDb25zdGFudHMiLCJyZXN1bHRzIiwicGFzc2VkIiwiZmFpbGVkIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayIsImRlbGV0ZVNlc3Npb24iLCJpbmNsdWRlcyIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJ3YXJuIiwidHJhbnNhY3Rpb24iLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsImVycm9yIiwidGFrZVNjcmVlbnNob3QiLCJyZXR2YWwiLCJjYWxsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ3YWl0VW50aWxSZXRWYWwiLCJ3YWl0VW50aWwiLCJpbWFnZXMiLCJwdXNoSW1hZ2VUb0ltYWdlcyIsImZldGNoVGl0bGUiLCJpbWFnZSIsInRpdGxlIiwiZ2V0VGl0bGUiLCJ0ZXh0VG9JbWFnZSIsInJlcXVpcmUiLCJ0aXRsZUltYWdlIiwiZ2VuZXJhdGUiLCJmb250RmFtaWx5IiwicHVzaCIsImlzV2ViVmlld0NvbnRleHQiLCJoYW5kbGVzIiwiZ2V0V2luZG93SGFuZGxlcyIsImhhbmRsZSIsInN3aXRjaFRvV2luZG93IiwibWVyZ2VkSW1hZ2UiLCJkaXJlY3Rpb24iLCJ0aW1lb3V0IiwidGhlbiIsImNhdGNoIiwiZXJyIiwiX2FkanVzdEFwcGl1bUxvZyIsImxvZyIsInNyYyIsInRpbWUiLCJ0aW1lc3RhbXAiLCJtc2ciLCJtZXNzYWdlIiwibGV2ZWwiLCJfaXRlcmF0aW9uU3RhcnQiLCJfaXRlcmF0aW9uRW5kIiwidHlwZSIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUIiwibG9ncyIsImdldERldmljZUxvZ3MiLCJjb2xsZWN0QnJvd3NlckxvZ3MiLCJnZXRCcm93c2VyTG9ncyIsImNvbGxlY3RBcHBpdW1Mb2dzIiwiZ2V0QXBwaXVtTG9ncyIsImxvZ0VudHJ5IiwiX2dldFdkaW9Mb2NhdG9yIiwibG9jYXRvciIsIlNDUklQVF9FUlJPUiIsImluZGV4T2YiLCJwbGF0Zm9ybSIsInN1YnN0ciIsImdldFdkaW9Mb2NhdG9yIiwibWF0Y2hQYXR0ZXJuIiwiZ2V0RWxlbWVudCIsImdldEVsZW1lbnRzIiwiZ2V0Q2hpbGRFbGVtZW50IiwiZ2V0Q2hpbGRFbGVtZW50cyIsInNldFRpbWVvdXRJbXBsaWNpdCIsInJlc3RvcmVUaW1lb3V0SW1wbGljaXQiLCJhc3NlcnRBcmd1bWVudCIsImFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmciLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudEJvb2wiLCJhc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCIsImFzc2VydEFyZ3VtZW50VGltZW91dCIsImFzc2VydENvbnRleHQiLCJjb250ZXh0TGlzdCIsImdldExvZ1R5cGVzIiwicmVxdWVzdEJvZHkiLCJzZXNzaW9uSWQiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwiYm9keSIsInJlcyIsInRvU3RyaW5nIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBR0EsTUFBTUEsV0FBVyxHQUFHLEtBQXBCO0FBQ0EsTUFBTUMsa0JBQWtCLEdBQUcsOEJBQTNCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsU0FBN0I7QUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxDQUFDLE1BQUQsRUFBUyxhQUFULENBQS9CO0FBQ0EsTUFBTUMsZUFBZSxHQUFHLENBQUMsTUFBRCxFQUFRLEtBQVIsRUFBYyxPQUFkLEVBQXNCLE9BQXRCLEVBQThCLFFBQTlCLEVBQXVDLFVBQXZDLENBQXhCO0FBQ0EsTUFBTUMsb0JBQW9CLEdBQUcsS0FBSyxJQUFsQyxD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Q0FESjtBQUVKLG9CQUFRLEtBQUtILFFBQUwsQ0FBY0csWUFBZCxDQUEyQixrQkFBM0IsQ0FGSjtBQUdKLCtCQUFtQjtBQUhmO0FBTkYsU0FBVjtBQVlIOztBQUVELFVBQUk7QUFDQSw4QkFBUTVELE9BQVIsRUFBaUIsQ0FBQ3dKLEdBQUQsRUFBTW9ELEdBQU4sRUFBV0QsSUFBWCxLQUFvQjtBQUNqQzdFLFVBQUFBLE9BQU87QUFDVixTQUZEO0FBR0gsT0FKRCxDQUlFLE9BQU9wQyxDQUFQLEVBQVU7QUFDUixhQUFLdkYsTUFBTCxDQUFZc0gsS0FBWixDQUFrQixtREFBbUQvQixDQUFDLENBQUNtSCxRQUFGLEVBQXJFO0FBQ0EvRSxRQUFBQSxPQUFPO0FBQ1Y7QUFDSixLQTNDTSxDQUFQO0FBNENIOztBQXBsQnFEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4ndXNlIHN0cmljdCc7XHJcbi8qKlxyXG4gKiBAbmFtZSBtb2JcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1ldGhvZHMgZm9yIG1vYmlsZSBhdXRvbWF0aW9uLlxyXG4gKiBAc2FtcGxlICoqTG9jYXRvcnM6KiogIFxyXG4gKiBcclxuICogTmF0aXZlIGFwcGxpY2F0aW9uIGxvY2F0b3JzIGZvciFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvYW5kcm9pZC5wbmcpICBcclxuICogKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogKiBgfkFDQ0VTU0lCSUxJVFlfSURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBBY2Nlc3NpYmlsaXR5IElkLlxyXG4gKiAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGlkLlxyXG4gKiAqIGBjbGFzcz1DTEFTU2AgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGNsYXNzLlxyXG4gKiAqIGB0ZXh0PVRFWFRgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyB2aXNpYmxlIHRleHQuXHJcbiAqICogYHRleHQtY29udGFpbnM9VEVYVGAgLSBMb2NhdGVzIGVsZW1lbnQgd2hvc2UgdmlzaWJsZSB0ZXh0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3RyaW5nLlxyXG4gKiAqIGBkZXNjPURFU0NSSVBUSU9OYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgZGVzY3JpcHRpb24uXHJcbiAqICogYGRlc2MtY29udGFpbnM9REVTQ1JJUFRJT05gIC0gTG9jYXRlcyBlbGVtZW50IHdob3NlIGRlc2NyaXB0aW9uIGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgc3RyaW5nLlxyXG4gKiAqIGBzY3JvbGxhYmxlYCAtIExvY2F0ZXMgZWxlbWVudHMgdGhhdCBhcmUgc2Nyb2xsYWJsZS4gIFxyXG4gKiAgXHJcbiAqIE5hdGl2ZSBhcHBsaWNhdGlvbiBsb2NhdG9ycyBmb3IhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FwcGxlLnBuZykgIFxyXG4gKiAgXHJcbiAqICogYC9YUEFUSGAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqICogYGlkPUlEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgSUQuXHJcbiAqICogYH5BQ0NFU1NJQklMSVRZX0lEYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgQWNjZXNzaWJpbGl0eSBJZC4gIFxyXG4gKiAgXHJcbiAqIEh5YnJpZCFbXSguLi8uLi8uZ2l0Ym9vay9hc3NldHMvaHlicmlkLnBuZykgIGFuZCBXZWIhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL3dlYi5wbmcpICBhcHBsaWNhdGlvbiBsb2NhdG9ycyBmb3IhW10oLi4vLi4vLmdpdGJvb2svYXNzZXRzL2FuZHJvaWQucG5nKSAgIVtdKC4uLy4uLy5naXRib29rL2Fzc2V0cy9hcHBsZS5wbmcpICBcclxuICogIFxyXG4gKiAqIGAvWFBBVEhgIC0gTG9jYXRlcyBlbGVtZW50IHVzaW5nIGFuIFhQYXRoIDEuMCBleHByZXNzaW9uLlxyXG4gKiAqIGBpZD1JRGAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIGlkLlxyXG4gKiAqIGBuYW1lPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBuYW1lIGF0dHJpYnV0ZS5cclxuICogKiBgdGFnPU5BTUVgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyB0YWcgbmFtZS5cclxuICogKiBgbGluaz1URVhUYCAtIExvY2F0ZXMgYW5jaG9yIGVsZW1lbnQgd2hvc2UgdGV4dCBtYXRjaGVzIHRoZSBnaXZlbiBzdHJpbmcuXHJcbiAqICogYGxpbmstY29udGFpbnM9VEVYVGAgLSBMb2NhdGVzIGFuY2hvciBlbGVtZW50IHdob3NlIHRleHQgY29udGFpbnMgdGhlIGdpdmVuIHN0cmluZy5cclxuICogKiBgY3NzPUNTU19TRUxFQ1RPUmAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYSBDU1Mgc2VsZWN0b3IuXHJcbiAqIFxyXG4gKiAqKlBhdHRlcm4gYXJndW1lbnRzOioqXHJcbiAqIFxyXG4gKiBDb21tYW5kcyB3aGljaCBleHBlY3QgYSBzdHJpbmcgbWF0Y2hpbmcgcGF0dGVybiBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIHBhdHRlcm5zIHVubGVzcyBzcGVjaWZpZWQgb3RoZXJ3aXNlOlxyXG4gKiBcclxuICogKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICogYFBBVFRFUk5gIC0gVmVyYmF0aW0gbWF0Y2hpbmcuXHJcbiAqIFxyXG4gKi9cclxuaW1wb3J0IFVSTCBmcm9tICd1cmwnO1xyXG5pbXBvcnQgKiBhcyB3ZGlvIGZyb20gJ3dlYmRyaXZlcmlvJztcclxuaW1wb3J0IFdlYkRyaXZlck1vZHVsZSBmcm9tICcuLi9jb3JlL1dlYkRyaXZlck1vZHVsZSc7XHJcbmltcG9ydCBtb2RVdGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IGVyckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IHBlcmZlY3RvUmVwb3J0aW5nIGZyb20gJ3BlcmZlY3RvLXJlcG9ydGluZyc7XHJcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3JlcXVlc3QnO1xyXG5pbXBvcnQgbWVyZ2VJbWFnZXMgZnJvbSAnLi4vbGliL2ltZy1tZXJnZSc7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ21vYic7XHJcbmNvbnN0IERFRkFVTFRfQVBQSVVNX1VSTCA9ICdodHRwOi8vbG9jYWxob3N0OjQ3MjMvd2QvaHViJztcclxuY29uc3QgREVGQVVMVF9CUk9XU0VSX05BTUUgPSAnZGVmYXVsdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywndGFwJywnY2xpY2snLCdzd2lwZScsJ3N1Ym1pdCcsJ3NldFZhbHVlJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9iaWxlTW9kdWxlIGV4dGVuZHMgV2ViRHJpdmVyTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0ge307XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5uZXR3b3JrUmVxdWVzdHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMuYXBwQ29udGV4dCA9ICdOQVRJVkVfQVBQJztcclxuICAgICAgICB0aGlzLl9sb2FkSGVscGVyRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgLy8gc3VwcG9ydCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IChzb21lIG1vZHVsZSBjb21tYW5kcyBtaWdodCByZWZlciB0byB0aGlzLk94RXJyb3IgYW5kIHRoaXMuZXJySGVscGVyKVxyXG4gICAgICAgIHRoaXMuT3hFcnJvciA9IE94RXJyb3I7XHJcbiAgICAgICAgdGhpcy5lcnJIZWxwZXIgPSBlcnJIZWxwZXI7XHJcbiAgICAgICAgLy8gaG9sZHMgZWxlbWVudCBvcGVyYXRpb24gdGltZW91dCB2YWx1ZVxyXG4gICAgICAgIHRoaXMud2FpdEZvclRpbWVvdXQgPSBERUZBVUxUX1dBSVRfVElNRU9VVDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0RHJpdmVyXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBXRElPIGRyaXZlci5cclxuICAgICAqL1xyXG4gICAgZ2V0RHJpdmVyKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXREcml2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXRDYXBhYmlsaXRpZXNcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENhcGFiaWxpdGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBzIHx8IHN1cGVyLmdldENhcGFiaWxpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgbmV3IEFwcGl1bSBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMuIElmIG5vdCBzcGVjaWZpZWQgY2FwYWJpbGl0aWVzIHdpbGwgYmUgdGFrZW4gZnJvbSBzdWl0ZSBkZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBhcHBpdW1VcmwgLSBSZW1vdGUgQXBwaXVtIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDcyMy93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIGFwcGl1bVVybCkge1xyXG4gICAgICAgIC8vIGlmIHJlb3BlblNlc3Npb24gaXMgdHJ1ZSAtIHJlaW5pdGlsaXplIHRoZSBtb2R1bGVcclxuICAgICAgICBpZiAodGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVvcGVuU2Vzc2lvbiAhPT0gZmFsc2UpIHsgLy8gdHJ1ZSBvciBmYWxzZSBpZiBleHBsaXNpdGx5IHNldC4gdHJ1ZSBvbiBudWxsIG9yIHVuZGVmaW5lZC5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdyZW9wZW5TZXNzaW9uIGlzIHRydWUgLSByZWxvYWRpbmcgdGhlIHNlc3Npb24uLi4nKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnJlbG9hZFNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ21vYi5pbml0IHdhcyBjYWxsZWQgZm9yIGFscmVhZHkgaW5pdGlhbGl6ZWQgbW9kdWxlLiByZW9wZW5TZXNzaW9uIGlzIGZhbHNlIHNvIHRoZSBjYWxsIGlzIGlnbm9yZWQuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWRcclxuICAgICAgICBpZiAodGhpcy5jdHguY2FwcyAmJiB0aGlzLmN0eC5jYXBzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgaWYgKGNhcHMpIHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLnBsYXRmb3JtTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLnBsYXRmb3JtVmVyc2lvbjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLmRldmljZU5hbWU7XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgY2Fwcy5icm93c2VyTmFtZTtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSBjYXBzLmF1dG9tYXRpb25OYW1lO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIGNhcHMudWRpZDtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2Fwcy5hcHApIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXBzLmVuYWJsZUFwcGl1bUJlaGF2aW9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2Fwcy51c2VBcHBpdW1Gb3JXZWIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcHMuZW5hYmxlQXBwaXVtQmVoYXZpb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHguY2Fwcy51c2VBcHBpdW1Gb3JXZWIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdHguY2Fwcy5lbmFibGVBcHBpdW1CZWhhdmlvciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghYXBwaXVtVXJsKSB7XHJcbiAgICAgICAgICAgIGFwcGl1bVVybCA9IHRoaXMub3B0aW9ucy5hcHBpdW1VcmwgfHwgREVGQVVMVF9BUFBJVU1fVVJMO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbWVyZ2UgY2FwYWJpbGl0aWVzIGZyb20gY29udGV4dCBhbmQgZnJvbSBpbml0IGZ1bmN0aW9uIGFyZ3VtZW50LCBnaXZlIHByZWZlcmVuY2UgdG8gY29udGV4dC1wYXNzZWQgY2FwYWJpbGl0aWVzXHJcbiAgICAgICAgdGhpcy5jYXBzID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmN0eC5jYXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jYXBzLCAuLi5jYXBzIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtYWtlIHN1cmUgdG8gY2xlYXIgdGhlIGV4aXN0aW5nIGRldmljZSBsb2dzLCBpZiBjb2xsZWN0RGV2aWNlTG9ncyBvcHRpb24gaXMgdHJ1ZSAod2Ugd2FudCB0byBpbmNsdWRlIGxvZ3Mgb25seSByZWxldmFudCBmb3IgdGhpcyBzZXNzaW9uKVxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdERldmljZUxvZ3MpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmNsZWFyRGV2aWNlTG9nc09uU3RhcnQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWYgYm90aCBicm93c2VyTmFtZSBhbmQgYXBwUGFja2FnZSB3ZXJlIHNwZWNpZmllZCAtIHJlbW92ZSBicm93c2VyTmFtZVxyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgKHRoaXMuY2Fwcy5hcHBQYWNrYWdlIHx8IHRoaXMuY2Fwcy5hcHApKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhcHMuYnJvd3Nlck5hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmIG5vIGFwcFBhY2thZ2Ugbm9yIGFwcCBjYXBhYmlsaXR5LCBub3QgYnJvd3Nlck5hbWUgYXJlIGRlZmluZWQsIGFzc3VtZSB3ZSB3YW50IHRvIHJ1biB0aGUgdGVzdCBhZ2FpbnN0IGRlZmF1bHQgYnJvd3NlclxyXG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLmNhcHMuYnJvd3Nlck5hbWUgJiYgIXRoaXMuY2Fwcy5hcHBQYWNrYWdlICYmICF0aGlzLmNhcHMuYXBwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IERFRkFVTFRfQlJPV1NFUl9OQU1FO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB3ZWJkcml2ZXIgZXhwZWN0cyBsb3dlciBjYXNlIG5hbWVzXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSAmJiB0eXBlb2YgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYWRqdXN0IGNhcGFiaWxpdGllcyB0byBlbmFibGUgY29sbGVjdGluZyBicm93c2VyIGFuZCBwZXJmb3JtYW5jZSBzdGF0cyBpbiBDaHJvbWUgXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHNbJ2dvb2c6bG9nZ2luZ1ByZWZzJ10gPSB7ICAgICAvLyBmb3IgQ2hyb21lRHJpdmVyID49IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcG9wdWxhdGUgV0RJTyBvcHRpb25zXHJcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLnBhcnNlKGFwcGl1bVVybCk7XHJcbiAgICAgICAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJyk7XHJcbiAgICAgICAgY29uc3QgaG9zdCA9IHVybC5ob3N0bmFtZTtcclxuICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodXJsLnBvcnQgfHwgKHByb3RvY29sID09PSAnaHR0cHMnID8gNDQzIDogODApKTtcclxuICAgICAgICBjb25zdCBwYXRoID0gdXJsLnBhdGhuYW1lO1xyXG5cclxuICAgICAgICAvLyBhdXRoIGlzIG5lZWRlZCBtb3N0bHkgZm9yIGNsb3VkIHByb3ZpZGVycyBzdWNoIGFzIExhbWJkYVRlc3RcclxuICAgICAgICBpZiAodXJsLmF1dGgpIHtcclxuICAgICAgICAgICAgY29uc3QgYXV0aCA9IHVybC5hdXRoLnNwbGl0KCc6Jyk7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy53ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IGF1dGhbMF0sXHJcbiAgICAgICAgICAgICAgICBrZXk6IGF1dGhbMV1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciB3ZGlvT3B0cyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zLndkaW9PcHRzIHx8IHt9LFxyXG4gICAgICAgICAgICBwcm90b2NvbDogcHJvdG9jb2wsXHJcbiAgICAgICAgICAgIGhvc3RuYW1lOiBob3N0LFxyXG4gICAgICAgICAgICBwb3J0OiBwb3J0LFxyXG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxyXG4gICAgICAgICAgICBjYXBhYmlsaXRpZXM6IHRoaXMuY2FwcyxcclxuICAgICAgICAgICAgbG9nTGV2ZWw6ICdzaWxlbnQnLFxyXG4gICAgICAgICAgICBydW5uZXI6ICdyZXBsJyxcclxuICAgICAgICAgICAgd2FpdGZvclRpbWVvdXQ6IDUwMDAsIC8vIGluY3JlYXNlIHRoZSBkZWZhdWx0IDMwMDBcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5VGltZW91dDogMzEwKjEwMDAsXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeUNvdW50OiAxXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgbGV0IHByb3ZpZGVyID0gbW9kVXRpbHMuZGV0ZXJtaW5lUHJvdmlkZXIod2Rpb09wdHMpO1xyXG4gICAgICAgIGxldCBuYW1lID0gJ25hbWUnO1xyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLmNhcGFiaWxpdGllcy5tYXhJbnN0YW5jZXMgPSAxO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wYXRoID0gJy9uZXhwZXJpZW5jZS9wZXJmZWN0b21vYmlsZS93ZC9odWInO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5wb3J0ID0gODA7XHJcbiAgICAgICAgICAgIHdkaW9PcHRzLnByb3RvY29sID0gJ2h0dHAnO1xyXG4gICAgICAgICAgICB3ZGlvT3B0cy5vcGVuRGV2aWNlVGltZW91dCA9IDE1O1xyXG5cclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllcy5tYW51ZmFjdHVyZXI7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMubW9kZWw7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWU7XHJcblxyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ11bJ25hbWUnXTtcclxuICAgICAgICAgICAgZGVsZXRlIHdkaW9PcHRzLmNhcGFiaWxpdGllc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHdkaW9PcHRzLmNhcGFiaWxpdGllc1snYnN0YWNrOm9wdGlvbnMnXSAmJiB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ11bJ25hbWUnXSkge1xyXG4gICAgICAgICAgICBuYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzWydic3RhY2s6b3B0aW9ucyddWyduYW1lJ107XHJcbiAgICAgICAgICAgIGRlbGV0ZSB3ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2JzdGFjazpvcHRpb25zJ107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLndkaW9PcHRzID0gd2Rpb09wdHM7XHJcblxyXG4gICAgICAgIC8vIGluaXQgd2ViZHJpdmVyXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIgPSBhd2FpdCB3ZGlvLnJlbW90ZSh3ZGlvT3B0cyk7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLnByb3ZpZGVyID0gcHJvdmlkZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCA9IGF3YWl0IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdlYmRyaXZlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlU2NyaXB0OiBhc3luYyAoY29tbWFuZCwgcGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kcml2ZXIuZXhlY3V0ZShjb21tYW5kLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGluZ0NsaWVudCA9IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b1JlcG9ydGluZ0NsaWVudChwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0YXJ0KG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBlcnJIZWxwZXIuZ2V0QXBwaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hcHBDb250ZXh0ID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0Q29udGV4dCgpO1xyXG5cclxuICAgICAgICAvLyBpZiB3ZSBhcmUgcnVubmluZyBvbiBBbmRyb2lkIDcrIGVtdWxhdG9yLCBhbmQgdGh1cy9vciB1c2luZyBhIFdlYlZpZXcgQnJvd3NlciBUZXN0ZXIgLVxyXG4gICAgICAgIC8vIHBlcmZvcm0gYW4gYWN0dWFsIGFwcENvbnRleHQgc3dpdGNoIHRvIFdFQlxyXG4gICAgICAgIC8vIHNvIEFwcGl1bSB3aWxsIGRlbGVnYXRlIGNvbW1hbmRzIHRvIENocm9tZSBEcml2ZXIgaW5zdGVhZCBvZiBBcHBpdW0gRHJpdmVyXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gICdjaHJvbWl1bS13ZWJ2aWV3Jykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldFdlYlZpZXdDb250ZXh0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgLy8gZmFpbHMgb24gYnJvd3NlcnN0YWNrXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7ICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLmluaXQodGhpcy5kcml2ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGRpc3Bvc2VcclxuICAgICAqIEBzdW1tYXJ5IEVuZHMgdGhlIGN1cnJlbnQgc2Vzc2lvbi5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gc3RhdHVzIC0gVGVzdCBzdGF0dXMsIGVpdGhlciBgcGFzc2VkYCBvciBgZmFpbGVkYC5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGlzcG9zZShzdGF0dXMpIHtcclxuICAgICAgICBpZiAoIXN0YXR1cykge1xyXG4gICAgICAgICAgICBzdGF0dXMgPSAncGFzc2VkJztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJzLnN0ZXBzICYmIEFycmF5LmlzQXJyYXkodGhpcy5ycy5zdGVwcykgJiYgdGhpcy5ycy5zdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWlsZWRGaW5kZWQgPSB0aGlzLnJzLnN0ZXBzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFpbGVkRmluZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RvcCh7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPT09ICdQQVNTRUQnID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5wYXNzZWQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZlY3RvUmVwb3J0aW5nLkNvbnN0YW50cy5yZXN1bHRzLmZhaWxlZFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrKHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICghWydDQU5DRUxFRCcsICdGQUlMRUQnXS5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVsZXRlU2Vzc2lvbiB3aWxsIHRha2UgNSBtaW4gdG8gY2FsbFxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Vycm9yIGRpc3Bvc2luZyBkcml2ZXI6ICcgKyBlKTsgICAgLy8gaWdub3JlIGFueSBlcnJvcnMgYXQgZGlzcG9zYWwgc3RhZ2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgICAgICBzdXBlci5kaXNwb3NlKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZVxyXG4gICAgICogICAgICAgICAgICAgIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqIEBmb3IgYW5kcm9pZCwgaW9zLCBoeWJyaWQsIHdlYlxyXG4gICAgICovXHJcbiAgICB0cmFuc2FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZVxyXG4gICAgICovXHJcblxyXG4gICAgX2lzQWN0aW9uKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gQUNUSU9OX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU2NyZWVuc2hvdFNpbGVudChuYW1lKSB7XHJcbiAgICAgICAgaWYgKCFOT19TQ1JFRU5TSE9UX0NPTU1BTkRTLmluY2x1ZGVzKG5hbWUpKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlciAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFVudGlsUmV0VmFsID0gdGhpcy5kcml2ZXIud2FpdFVudGlsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB1c2hJbWFnZVRvSW1hZ2VzID0gYXN5bmMoZmV0Y2hUaXRsZSA9IHRydWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gYXdhaXQgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3QoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZXRjaFRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRUaXRsZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0VG9JbWFnZSA9IHJlcXVpcmUoJ3RleHQtdG8taW1hZ2UnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlSW1hZ2UgPSBhd2FpdCB0ZXh0VG9JbWFnZS5nZW5lcmF0ZSh0aXRsZSwgeyBkZWJ1ZzogZmFsc2UsIGZvbnRGYW1pbHk6ICdBcmlhbCcgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZUltYWdlICYmIHR5cGVvZiB0aXRsZUltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVJbWFnZSA9IHRpdGxlSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKHRpdGxlSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzV2ViVmlld0NvbnRleHQgPSBhd2FpdCB0aGlzLmlzV2ViVmlld0NvbnRleHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzV2ViVmlld0NvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgYWxsIChzY3JlZW5zaG90IGFuZCB0aXRsZSkgaW1hZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXMgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGhhbmRsZXMpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcy5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZSBvZiBoYW5kbGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnN3aXRjaFRvV2luZG93KGhhbmRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHB1c2hJbWFnZVRvSW1hZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcHVzaEltYWdlVG9JbWFnZXMoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXJnZSBhbGwgaW1hZ2VzIGludG8gb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZEltYWdlID0gYXdhaXQgbWVyZ2VJbWFnZXMoaW1hZ2VzLCB7IGRpcmVjdGlvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlZEltYWdlICYmIHR5cGVvZiBtZXJnZWRJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IG1lcmdlZEltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRVbnRpbFJldFZhbCAmJiB3YWl0VW50aWxSZXRWYWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRVbnRpbFJldFZhbC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90JywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCcsIGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIF9nZXRMb2dzKG5hbWUpIHtcclxuICAgIC8vICAgICBpZiAoIU5PX0xPR1NfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TG9ncygpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICBfYWRqdXN0QXBwaXVtTG9nKGxvZywgc3JjKSB7XHJcbiAgICAgICAgaWYgKCFsb2cgfHwgdHlwZW9mIGxvZyAhPT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IGNvbnZlcnQgbG9nLnRpbWVzdGFtcCBmcm9tIHRoZSBkZXZpY2UgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncykgICAgICAgIFxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGxldmVsOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogc3JjXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBpZ25vcmUgdGhlIHJlc3QgaWYgbW9iIG1vZHVsZSBpcyBub3QgaW5pdGlhbGl6ZWRcclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYWxsIHRoZSBkZXZpY2UgbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0RGV2aWNlTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0RGV2aWNlTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEFwcGl1bUxvZyhsb2csICdkZXZpY2UnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGRldmljZSBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCB0aGUgYnJvd3NlciBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZ2V0QnJvd3NlckxvZ3MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2dzICYmIEFycmF5LmlzQXJyYXkobG9ncykpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJzLmxvZ3MucHVzaCh0aGlzLl9hZGp1c3RBcHBpdW1Mb2cobG9nLCAnYnJvd3NlcicpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBjb2xsZWN0IGFsbCBBcHBpdW0gbG9ncyBmb3IgdGhpcyBzZXNzaW9uXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QXBwaXVtTG9ncykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IHRoaXMuZ2V0QXBwaXVtTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZ0VudHJ5IG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QXBwaXVtTG9nKGxvZ0VudHJ5LCAnYXBwaXVtJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gaWdub3JlIGVycm9yc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBBcHBpdW0gbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfZ2V0V2Rpb0xvY2F0b3IobG9jYXRvcikge1xyXG4gICAgICAgIGlmICghbG9jYXRvcikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgJ0ludmFsaWQgYXJndW1lbnQgLSBsb2NhdG9yIG5vdCBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhdG9yICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxvY2F0b3IuaW5kZXhPZignLycpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsb2NhdG9yOyAvLyBsZWF2ZSB4cGF0aCBsb2NhdG9yIGFzIGlzXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHBsYXRmb3JtID0gdGhpcy5jYXBzICYmIHRoaXMuY2Fwcy5wbGF0Zm9ybU5hbWUgPyB0aGlzLmNhcHMucGxhdGZvcm1OYW1lLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hcHBDb250ZXh0ID09PSAnTkFUSVZFX0FQUCcgJiYgcGxhdGZvcm0gPT09ICdhbmRyb2lkJykge1xyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCdpZD0nKSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gcHJlcGVuZCBwYWNrYWdlIG5hbWUgaWYgaXQncyBub3Qgc3BlY2lmaWVkXHJcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBnZXRDdXJyZW50UGFja2FnZSgpIHNlZW1zIHRvIGNyYXNoIHBvc3NpYmx5IGR1ZSB0byBhIHdkaW8gYnVnLiBcclxuICAgICAgICAgICAgICAgIC8vICAgICAgIHNvIHdlIGdldCBwYWNrYWdlIG5hbWUgZnJvbSBjYXBzIGluc3RlYWQuXHJcbiAgICAgICAgICAgICAgICBsb2NhdG9yID0gbG9jYXRvci5zdWJzdHIoJ2lkPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJzppZC8nKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2NhdG9yID0gdGhpcy5jYXBzLmFwcFBhY2thZ2UgKyAnOmlkLycgKyBsb2NhdG9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkucmVzb3VyY2VJZChcIicgKyBsb2NhdG9yICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjbGFzcz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmNsYXNzTmFtZShcIicgKyBsb2NhdG9yLnN1YnN0cignY2xhc3M9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGV4dD0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnRleHQoXCInICsgbG9jYXRvci5zdWJzdHIoJ3RleHQ9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZigndGV4dC1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLnRleHRDb250YWlucyhcIicgKyBsb2NhdG9yLnN1YnN0cigndGV4dC1jb250YWlucz0nLmxlbmd0aCkgKyAnXCIpJztcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdkZXNjPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuZGVzY3JpcHRpb24oXCInICsgbG9jYXRvci5zdWJzdHIoJ2Rlc2M9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignZGVzYy1jb250YWlucz0nKSA9PT0gMClcclxuICAgICAgICAgICAgICAgIHJldHVybiAnYW5kcm9pZD1uZXcgVWlTZWxlY3RvcigpLmRlc2NyaXB0aW9uQ29udGFpbnMoXCInICsgbG9jYXRvci5zdWJzdHIoJ2Rlc2MtY29udGFpbnM9Jy5sZW5ndGgpICsgJ1wiKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignc2Nyb2xsYWJsZScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdhbmRyb2lkPW5ldyBVaVNlbGVjdG9yKCkuc2Nyb2xsYWJsZSh0cnVlKSc7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvY2F0b3IuaW5kZXhPZignficpID09PSAwKSAgICAvLyBhY2Nlc3NpYmlsaXR5IGlkXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXBwQ29udGV4dCA9PT0gJ05BVElWRV9BUFAnICYmIHBsYXRmb3JtID09PSAnaW9zJykge1xyXG4gICAgICAgICAgICBpZiAobG9jYXRvci5pbmRleE9mKCd+JykgPT09IDApIC8vIGFjY2Vzc2liaWxpdHkgaWRcclxuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hcHBDb250ZXh0ICE9PSAnTkFUSVZFX0FQUCcpIHsgICAgICAgICAgICAvLyBIeWJyaWQgb3IgV2ViIGFwcGxpY2F0aW9uXHJcbiAgICAgICAgICAgIGlmIChsb2NhdG9yLmluZGV4T2YoJ2lkPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcjJyArIGxvY2F0b3Iuc3Vic3RyKCdpZD0nLmxlbmd0aCk7ICAgICAgLy8gY29udmVydCAnaWQ9JyB0byAnIydcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCduYW1lPScpID09PSAwKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdbbmFtZT0nICsgbG9jYXRvci5zdWJzdHIoJ25hbWU9Jy5sZW5ndGgpICsgJ10nO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbms9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJz0nICsgbG9jYXRvci5zdWJzdHIoJ2xpbms9Jy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChsb2NhdG9yLmluZGV4T2YoJ2xpbmstY29udGFpbnM9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyo9JyArIGxvY2F0b3Iuc3Vic3RyKCdsaW5rPScubGVuZ3RoKTtcclxuICAgICAgICAgICAgZWxzZSBpZiAobG9jYXRvci5pbmRleE9mKCdjc3M9JykgPT09IDApXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYXRvci5zdWJzdHIoJ2Nzcz0nLmxlbmd0aCk7ICAgICAgICAgICAvLyBpbiBjYXNlIG9mIGNzcywganVzdCByZW1vdmUgY3NzPSBwcmVmaXhcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9sb2FkSGVscGVyRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRXZGlvTG9jYXRvciA9IHRoaXMuX2dldFdkaW9Mb2NhdG9yO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4gPSBtb2RVdGlscy5tYXRjaFBhdHRlcm47XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnQgPSBtb2RVdGlscy5nZXRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50cyA9IG1vZFV0aWxzLmdldEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnQgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudHMgPSBtb2RVdGlscy5nZXRDaGlsZEVsZW1lbnRzO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5zZXRUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5zZXRUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQgPSBtb2RVdGlscy5yZXN0b3JlVGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXIgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmU7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRDb250ZXh0ID0gbW9kVXRpbHMuYXNzZXJ0Q29udGV4dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuY29udGV4dExpc3QgPSBtb2RVdGlscy5jb250ZXh0TGlzdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0TG9nVHlwZXMgPSBtb2RVdGlscy5nZXRMb2dUeXBlcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVTZXNzaW9uKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdkZWxldGVTZXNzaW9uIGVycm9yJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBsZXQgb3B0aW9ucztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS5icm93c2Vyc3RhY2suY29tL2F1dG9tYXRlL3Nlc3Npb25zLyR7dGhpcy5kcml2ZXIuc2Vzc2lvbklkfS5qc29uYCxcclxuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICAgICAgICAgIGpzb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBib2R5OiByZXF1ZXN0Qm9keSxcclxuICAgICAgICAgICAgICAgICAgICAnYXV0aCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZXInOiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5rZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdzZW5kSW1tZWRpYXRlbHknOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IGBodHRwczovL2FwaS1jbG91ZC5icm93c2Vyc3RhY2suY29tL2FwcC1hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAsXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICAgICAgICAgICAgICBqc29uOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgJ2F1dGgnOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjay51c2VyJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ2Jyb3dzZXJzdGFjay5rZXknXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbmRJbW1lZGlhdGVseSc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0KG9wdGlvbnMsIChlcnIsIHJlcywgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBCcm93c2Vyc3RhY2s6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -7,6 +7,8 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
require("source-map-support/register");
|
|
9
9
|
|
|
10
|
+
var _fastXmlParser = _interopRequireDefault(require("fast-xml-parser"));
|
|
11
|
+
|
|
10
12
|
var _OxygenModule = _interopRequireDefault(require("../core/OxygenModule"));
|
|
11
13
|
|
|
12
14
|
var _utils = _interopRequireDefault(require("./utils"));
|
|
@@ -228,8 +230,25 @@ class UtilsModule extends _OxygenModule.default {
|
|
|
228
230
|
throw new _OxygenError.default(_helper.default.errorCode.DNS_ERROR, e.message);
|
|
229
231
|
}
|
|
230
232
|
}
|
|
233
|
+
/**
|
|
234
|
+
* @summary Parse XML data to JS object
|
|
235
|
+
* @function xmlToJson
|
|
236
|
+
* @param {string|Buffer} xmlDataStr - Like <root a="nice" b="very nice" ><a>wow</a></root>
|
|
237
|
+
* @param {boolean|Object} options - Options (https://github.com/NaturalIntelligence/fast-xml-parser/blob/b0ea6358844ccca95cab02758e038c1c3321427e/docs/v4/2.XMLparseOptions.md)
|
|
238
|
+
*/
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
xmlToJson(xmlDataStr, options = {}) {
|
|
242
|
+
try {
|
|
243
|
+
const parser = new _fastXmlParser.default.XMLParser(options);
|
|
244
|
+
const output = parser.parse(xmlDataStr);
|
|
245
|
+
return output;
|
|
246
|
+
} catch (e) {
|
|
247
|
+
throw new _OxygenError.default(_helper.default.errorCode.XML_ERROR, e.message);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
231
250
|
|
|
232
251
|
}
|
|
233
252
|
|
|
234
253
|
exports.default = UtilsModule;
|
|
235
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS11dGlscy5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlV0aWxzTW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX2Fsd2F5c0luaXRpYWxpemVkIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwicGF1c2UiLCJtcyIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImxpYlV0aWxzIiwic2xlZXAiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHQiLCJyZWFkQ3N2IiwiZmlsZVBhdGgiLCJwYXJzZSIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJleHQiLCJleHRuYW1lIiwiT3hFcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1NWX0VSUk9SIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsImUiLCJyZXBsYWNlIiwiYm9tIiwiY2hhckNvZGVBdCIsInRhYmxlIiwiY29sdW1ucyIsInRyaW0iLCJtZXNzYWdlIiwid3JpdGVDc3YiLCJPYmplY3RzVG9Dc3YiLCJjc3YiLCJ0b0Rpc2siLCJhbGxDb2x1bW5zIiwicmVhZFhsc3giLCJyZWFkZXIiLCJFeGNlbFJlYWRlciIsInJlYWQiLCJkbnNSZXNvbHZlIiwiaG9zdG5hbWUiLCJyclR5cGUiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicnJUeXBlcyIsImluY2x1ZGVzIiwiU0NSSVBUX0VSUk9SIiwiam9pbiIsImRuc1Byb21pc2VzIiwicHJvbWlzZXMiLCJyZXNvbHZlIiwiRE5TX0VSUk9SIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFlQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQXBCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFD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QTtBQUNBOzs7QUFDb0IsUUFBVjhCLFVBQVUsQ0FBQ0MsUUFBRCxFQUFXQyxNQUFNLEdBQUcsR0FBcEIsRUFBeUI7QUFDckN4QyxtQkFBTXlDLDRCQUFOLENBQW1DRixRQUFuQyxFQUE2QyxVQUE3Qzs7QUFDQSxVQUFNRyxPQUFPLEdBQUcsQ0FBQyxHQUFELEVBQU0sTUFBTixFQUFjLEtBQWQsRUFBcUIsT0FBckIsRUFBOEIsSUFBOUIsRUFBb0MsT0FBcEMsRUFBNkMsSUFBN0MsRUFBbUQsS0FBbkQsRUFBMEQsS0FBMUQsRUFBaUUsS0FBakUsRUFBd0UsS0FBeEUsQ0FBaEI7O0FBRUEsUUFBSSxDQUFDQSxPQUFPLENBQUNDLFFBQVIsQ0FBaUJILE1BQWpCLENBQUwsRUFBK0I7QUFDM0IsWUFBTSxJQUFJekIsb0JBQUosQ0FBWUMsZ0JBQVlDLFNBQVosQ0FBc0IyQixZQUFsQyxFQUFpRCx5REFBd0RGLE9BQU8sQ0FBQ0csSUFBUixDQUFhLElBQWIsQ0FBbUIsRUFBNUgsQ0FBTjtBQUNIOztBQUVELFVBQU1DLFdBQVcsR0FBR3BDLE9BQU8sQ0FBQyxLQUFELENBQVAsQ0FBZXFDLFFBQW5DOztBQUNBLFFBQUk7QUFDQSxhQUFPLE1BQU1ELFdBQVcsQ0FBQ0UsT0FBWixDQUFvQlQsUUFBcEIsRUFBOEJDLE1BQTlCLENBQWI7QUFDSCxLQUZELENBRUUsT0FBT25CLENBQVAsRUFBVTtBQUNSLFlBQU0sSUFBSU4sb0JBQUosQ0FBWUMsZ0JBQVlDLFNBQVosQ0FBc0JnQyxTQUFsQyxFQUE2QzVCLENBQUMsQ0FBQ08sT0FBL0MsQ0FBTjtBQUNIO0FBQ0o7O0FBdktpRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIHV0aWxzXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtaXNjZWxsYW5lb3VzIHV0aWxpdHkgbWV0aG9kcy5cclxuICovXHJcblxyXG5jb25zdCBNT0RVTEVfTkFNRSA9ICd1dGlscyc7XHJcbmltcG9ydCBPeHlnZW5Nb2R1bGUgZnJvbSAnLi4vY29yZS9PeHlnZW5Nb2R1bGUnO1xyXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XHJcbmltcG9ydCBsaWJVdGlscyBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCBPeEVycm9yIGZyb20gJy4uL2Vycm9ycy9PeHlnZW5FcnJvcic7XHJcbmltcG9ydCBlcnJvckhlbHBlciBmcm9tICcuLi9lcnJvcnMvaGVscGVyJztcclxuaW1wb3J0IEV4Y2VsUmVhZGVyIGZyb20gJy4uL2xpYi9wYXJhbS1yZWFkZXItZXhjZWwnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVXRpbHNNb2R1bGUgZXh0ZW5kcyBPeHlnZW5Nb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy5fYWx3YXlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2lzSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBAc3VtbWFyeSBHZXRzIG1vZHVsZSBuYW1lXHJcbiAgICAgKiBAZnVuY3Rpb24gbmFtZVxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBDb25zdGFudCB2YWx1ZSBcInV0aWxzXCIuXHJcbiAgICAgKi9cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFBhdXNlIHRlc3QgZXhlY3V0aW9uIGZvciB0aGUgZ2l2ZW4gYW1vdW50IG9mIG1pbGxpc2Vjb25kcy5cclxuICAgICAqIEBmdW5jdGlvbiBwYXVzZVxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IG1zIC0gTWlsbGlzZWNvbmRzIHRvIHBhdXNlIHRoZSBleGVjdXRpb24gZm9yLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBwYXVzZShtcykge1xyXG4gICAgICAgIHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUobXMsICdtcycpO1xyXG4gICAgICAgIGF3YWl0IGxpYlV0aWxzLnNsZWVwKG1zKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IERlY3J5cHQgdGV4dFxyXG4gICAgICogQGZ1bmN0aW9uIGRlY3J5cHRcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0ZXh0IC0gVGV4dFxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBEZWNyeXB0UmVzdWx0IE9iamVjdCB3aXRoIGdldERlY3J5cHRSZXN1bHQgbWV0aG9kXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIHRvIGVuY3J5cHQgcGxhaW50ZXh0IGludG8gY2lwaGVydGV4dCBcclxuICAgICAqIGNvbnN0IGVuY3J5cHQgPSB1dGlscy5lbmNyeXB0KCdodHRwczovL3d3dy53aWtpcGVkaWEub3JnLycpO1xyXG4gICAgICogbG9nLmluZm8oZW5jcnlwdCk7IC8vIHdpbGwgcHJpbnQgYjc1N2JhMmMyZmM1MGZiYjUxMWQ1OTY4MTZjYTA2YzRmYTU2ZjRlOThjZTIyMmYzMGJjNThkNTI1MWVkNjM1ZVxyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBkZWNyeXB0IGNpcGhlcnRleHQgYW5kIHVzZSBpdCBpbiBzY3JpcHQgIFxyXG4gICAgICogY29uc3QgZGVjcnlwdCA9IHV0aWxzLmRlY3J5cHQoZW5jcnlwdCk7XHJcbiAgICAgKiBsb2cuaW5mbyhkZWNyeXB0KTsgLy8gd2lsbCBwcmludCBFTkNSWVBURURcclxuICAgICAqIFxyXG4gICAgICogd2ViLmluaXQoKTtcclxuICAgICAqIHdlYi5vcGVuKGRlY3J5cHQpOyAvLyB3aWxsIG9wZW4gaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZ2V0IG9yaWdpbmFsIHBsYWludGV4dCB1c2UgZ2V0RGVjcnlwdFJlc3VsdFxyXG4gICAgICogY29uc3QgdmFsdWUgPSBkZWNyeXB0LmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAqIGxvZy5pbmZvKHZhbHVlKTsgLy93aWxsIHByaW50IGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvXHJcbiAgICAgKi9cclxuICAgIGRlY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHJldHVybiBsaWJVdGlscy5kZWNyeXB0KHRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRW5jcnlwdCB0ZXh0XHJcbiAgICAgKiBAZnVuY3Rpb24gZW5jcnlwdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0XHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IEVuY3J5cHRlZCB0ZXh0XHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIHRvIGVuY3J5cHQgcGxhaW50ZXh0IGludG8gY2lwaGVydGV4dCBcclxuICAgICAqIGNvbnN0IGVuY3J5cHQgPSB1dGlscy5lbmNyeXB0KCdodHRwczovL3d3dy53aWtpcGVkaWEub3JnLycpO1xyXG4gICAgICogbG9nLmluZm8oZW5jcnlwdCk7IC8vIHdpbGwgcHJpbnQgYjc1N2JhMmMyZmM1MGZiYjUxMWQ1OTY4MTZjYTA2YzRmYTU2ZjRlOThjZTIyMmYzMGJjNThkNTI1MWVkNjM1ZVxyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBkZWNyeXB0IGNpcGhlcnRleHQgYW5kIHVzZSBpdCBpbiBzY3JpcHQgIFxyXG4gICAgICogY29uc3QgZGVjcnlwdCA9IHV0aWxzLmRlY3J5cHQoZW5jcnlwdCk7XHJcbiAgICAgKiBsb2cuaW5mbyhkZWNyeXB0KTsgLy8gd2lsbCBwcmludCBFTkNSWVBURURcclxuICAgICAqIFxyXG4gICAgICogd2ViLmluaXQoKTtcclxuICAgICAqIHdlYi5vcGVuKGRlY3J5cHQpOyAvLyB3aWxsIG9wZW4gaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqIFxyXG4gICAgICogLy8gdG8gZ2V0IG9yaWdpbmFsIHBsYWludGV4dCB1c2UgZ2V0RGVjcnlwdFJlc3VsdFxyXG4gICAgICogY29uc3QgdmFsdWUgPSBkZWNyeXB0LmdldERlY3J5cHRSZXN1bHQoKTtcclxuICAgICAqIGxvZy5pbmZvKHZhbHVlKTsgLy93aWxsIHByaW50IGh0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvXHJcbiAgICAgKi9cclxuICAgIGVuY3J5cHQodGV4dCkge1xyXG4gICAgICAgIHJldHVybiBsaWJVdGlscy5lbmNyeXB0KHRleHQpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZWFkcyBkYXRhIGZyb20gY3N2IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiByZWFkQ3N2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0aW9ucyAtIE9wdGlvbnMgKGh0dHBzOi8vY3N2LmpzLm9yZy9wYXJzZS9vcHRpb25zLylcclxuICAgICAqL1xyXG4gICAgcmVhZENzdihmaWxlUGF0aCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3QgcGFyc2UgPSByZXF1aXJlKCdjc3YtcGFyc2UvbGliL3N5bmMnKTtcclxuICAgICAgICB2YXIgZnMgPSByZXF1aXJlKCdmcycpO1xyXG4gICAgICAgIHZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xyXG5cclxuICAgICAgICB2YXIgZXh0ID0gcGF0aC5leHRuYW1lKGZpbGVQYXRoKTtcclxuICAgICAgICBpZiAoZXh0ICE9PSAnLmNzdicgJiYgZXh0ICE9PSAnLnR4dCcpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgJ1Vuc3VwcG9ydGVkIGZpbGUgZXh0ZW5zaW9uOiAnICsgZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkYXRhO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCAnVW5hYmxlIHRvIHJlYWQgcGFyYW1ldGVycyBmaWxlOiAnICsgZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDU1ZzIHByb2R1Y2VkIGJ5IE9TIFggRXhjZWwgaGF2ZSBoZWFkZXIgdGVybWluYXRlZCB3aXRoIDBkMGQwYVxyXG4gICAgICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1xcclxcci9nLCAnXFxyJyk7XHJcblxyXG4gICAgICAgIC8vIHN0cmlwIEJPTSBmb3IgVVRGLThcclxuICAgICAgICB2YXIgYm9tID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2F0Y2hlcyAweEVGQkJCRiAoVVRGLTggQk9NKSBiZWNhdXNlIHRoZSBidWZmZXItdG8tc3RyaW5nXHJcbiAgICAgICAgLy8gY29udmVyc2lvbiB0cmFuc2xhdGVzIGl0IHRvIDB4RkVGRiAoVVRGLTE2IEJPTSlcclxuICAgICAgICBpZiAoZGF0YS5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcclxuICAgICAgICAgICAgYm9tID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZhciB0YWJsZSA9IHBhcnNlKGRhdGEsIHsgYm9tOiBib20sIGNvbHVtbnM6IHRydWUsIHRyaW06IHRydWUsIC4uLm9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgV3JpdGVzIGRhdGEgaW50byBjc3YgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHdyaXRlQ3N2XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZmlsZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIGZpbGVcclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgLSBDU1YgZGF0YSBpbiBmb3JtYXQgW3tjb2x1bW5fbmFtZV8xOiAnZm9vJywgY29sdW1uX25hbWVfMjogJ2Jhcid9XVxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyAoaHR0cHM6Ly9naXRodWIuY29tL2FudG9uLWJvdC9vYmplY3RzLXRvLWNzdiNhc3luYy10b2Rpc2tmaWxlbmFtZS1vcHRpb25zKVxyXG4gICAgICovXHJcbiAgICBhc3luYyB3cml0ZUNzdihmaWxlUGF0aCwgZGF0YSwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgT2JqZWN0c1RvQ3N2ID0gcmVxdWlyZSgnb2JqZWN0cy10by1jc3YnKTtcclxuICAgICAgICAgICAgY29uc3QgY3N2ID0gbmV3IE9iamVjdHNUb0NzdihkYXRhKTtcclxuICAgICAgICAgICAgYXdhaXQgY3N2LnRvRGlzayhmaWxlUGF0aCwgeyBhbGxDb2x1bW5zOiB0cnVlLCAuLi5vcHRpb25zIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkNTVl9FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZWFkcyBkYXRhIGZyb20gWGxzeCBmaWxlXHJcbiAgICAgKiBAZnVuY3Rpb24gcmVhZFhsc3hcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHJldHVybiB7QXJyYXl9IC0gQXJyYXkgb2YgeGxzeCBkYXRhXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHJlYWRYbHN4KGZpbGVQYXRoKSB7XHJcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEV4Y2VsUmVhZGVyKCk7XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlYWRlci5yZWFkKGZpbGVQYXRoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFVzZXMgdGhlIEROUyBwcm90b2NvbCB0byByZXNvbHZlIGEgaG9zdCBuYW1lXHJcbiAgICAgKiBAZnVuY3Rpb24gZG5zUmVzb2x2ZVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGhvc3RuYW1lIC0gSG9zdCBuYW1lIHRvIHJlc29sdmUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHJyVHlwZSAtIFJlc291cmNlIHJlY29yZCB0eXBlLiBEZWZhdWx0OiAnQScuXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmdbXSB8IE9iamVjdH0gLSBBcnJheSBvciBPYmplY3Qgb2YgcmVzb3VyY2UgcmVjb3Jkcy4gVGhlIHR5cGUgYW5kIHN0cnVjdHVyZSBvZiBpbmRpdmlkdWFsIHJlc3VsdHMgdmFyeSBiYXNlZCBvbiBycnR5cGVcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZG5zUmVzb2x2ZShob3N0bmFtZSwgcnJUeXBlID0gJ0EnKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhob3N0bmFtZSwgJ2hvc3RuYW1lJyk7XHJcbiAgICAgICAgY29uc3QgcnJUeXBlcyA9IFsnQScsICdBQUFBJywgJ0FOWScsICdDTkFNRScsICdNWCcsICdOQVBUUicsICdOUycsICdQVFInLCAnU09BJywgJ1NSVicsICdUWFQnXTtcclxuXHJcbiAgICAgICAgaWYgKCFyclR5cGVzLmluY2x1ZGVzKHJyVHlwZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLlNDUklQVF9FUlJPUiwgYEludmFsaWQgYXJndW1lbnQgLSAncnJUeXBlJy4gQXZhaWxhYmxlIHJyVHlwZSB2YWx1ZXM6ICR7cnJUeXBlcy5qb2luKCcsICcpfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZG5zUHJvbWlzZXMgPSByZXF1aXJlKCdkbnMnKS5wcm9taXNlcztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZG5zUHJvbWlzZXMucmVzb2x2ZShob3N0bmFtZSwgcnJUeXBlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5ETlNfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|
|
254
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS11dGlscy5qcyJdLCJuYW1lcyI6WyJNT0RVTEVfTkFNRSIsIlV0aWxzTW9kdWxlIiwiT3h5Z2VuTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwiX2Fsd2F5c0luaXRpYWxpemVkIiwiX2lzSW5pdGlhbGl6ZWQiLCJuYW1lIiwicGF1c2UiLCJtcyIsInV0aWxzIiwiYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSIsImxpYlV0aWxzIiwic2xlZXAiLCJkZWNyeXB0IiwidGV4dCIsImVuY3J5cHQiLCJyZWFkQ3N2IiwiZmlsZVBhdGgiLCJwYXJzZSIsInJlcXVpcmUiLCJmcyIsInBhdGgiLCJleHQiLCJleHRuYW1lIiwiT3hFcnJvciIsImVycm9ySGVscGVyIiwiZXJyb3JDb2RlIiwiQ1NWX0VSUk9SIiwiZGF0YSIsInJlYWRGaWxlU3luYyIsImUiLCJyZXBsYWNlIiwiYm9tIiwiY2hhckNvZGVBdCIsInRhYmxlIiwiY29sdW1ucyIsInRyaW0iLCJtZXNzYWdlIiwid3JpdGVDc3YiLCJPYmplY3RzVG9Dc3YiLCJjc3YiLCJ0b0Rpc2siLCJhbGxDb2x1bW5zIiwicmVhZFhsc3giLCJyZWFkZXIiLCJFeGNlbFJlYWRlciIsInJlYWQiLCJkbnNSZXNvbHZlIiwiaG9zdG5hbWUiLCJyclR5cGUiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicnJUeXBlcyIsImluY2x1ZGVzIiwiU0NSSVBUX0VSUk9SIiwiam9pbiIsImRuc1Byb21pc2VzIiwicHJvbWlzZXMiLCJyZXNvbHZlIiwiRE5TX0VSUk9SIiwieG1sVG9Kc29uIiwieG1sRGF0YVN0ciIsInBhcnNlciIsImZhc3RYbWxQYXJzZXIiLCJYTUxQYXJzZXIiLCJvdXRwdXQiLCJYTUxfRVJST1IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQWVBOztBQUNB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LE1BQU0sR0FBRyxJQUFJQyx1QkFBY0MsU0FBbEIsQ0FBNEJqRSxPQUE1QixDQUFmO0FBQ0EsWUFBTWtFLE1BQU0sR0FBR0gsTUFBTSxDQUFDM0MsS0FBUCxDQUFhMEMsVUFBYixDQUFmO0FBQ0EsYUFBT0ksTUFBUDtBQUNILEtBSkQsQ0FJRSxPQUFPbEMsQ0FBUCxFQUFVO0FBQ1IsWUFBTSxJQUFJTixvQkFBSixDQUFZQyxnQkFBWUMsU0FBWixDQUFzQnVDLFNBQWxDLEVBQTZDbkMsQ0FBQyxDQUFDTyxPQUEvQyxDQUFOO0FBQ0g7QUFDSjs7QUF2TGlEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQG5hbWUgdXRpbHNcclxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIG1pc2NlbGxhbmVvdXMgdXRpbGl0eSBtZXRob2RzLlxyXG4gKi9cclxuXHJcbmNvbnN0IE1PRFVMRV9OQU1FID0gJ3V0aWxzJztcclxuaW1wb3J0IGZhc3RYbWxQYXJzZXIgZnJvbSAnZmFzdC14bWwtcGFyc2VyJztcclxuaW1wb3J0IE94eWdlbk1vZHVsZSBmcm9tICcuLi9jb3JlL094eWdlbk1vZHVsZSc7XHJcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcclxuaW1wb3J0IGxpYlV0aWxzIGZyb20gJy4uL2xpYi91dGlsJztcclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgRXhjZWxSZWFkZXIgZnJvbSAnLi4vbGliL3BhcmFtLXJlYWRlci1leGNlbCc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVdGlsc01vZHVsZSBleHRlbmRzIE94eWdlbk1vZHVsZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcykge1xyXG4gICAgICAgIHN1cGVyKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKTtcclxuICAgICAgICB0aGlzLl9hbHdheXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5faXNJbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEBzdW1tYXJ5IEdldHMgbW9kdWxlIG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBuYW1lXHJcbiAgICAgKiBAcmV0dXJuIHtTdHJpbmd9IENvbnN0YW50IHZhbHVlIFwidXRpbHNcIi5cclxuICAgICAqL1xyXG4gICAgZ2V0IG5hbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIE1PRFVMRV9OQU1FO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgUGF1c2UgdGVzdCBleGVjdXRpb24gZm9yIHRoZSBnaXZlbiBhbW91bnQgb2YgbWlsbGlzZWNvbmRzLlxyXG4gICAgICogQGZ1bmN0aW9uIHBhdXNlXHJcbiAgICAgKiBAcGFyYW0ge051bWJlcn0gbXMgLSBNaWxsaXNlY29uZHMgdG8gcGF1c2UgdGhlIGV4ZWN1dGlvbiBmb3IuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBhdXNlKG1zKSB7XHJcbiAgICAgICAgdXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZShtcywgJ21zJyk7XHJcbiAgICAgICAgYXdhaXQgbGliVXRpbHMuc2xlZXAobXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgRGVjcnlwdCB0ZXh0XHJcbiAgICAgKiBAZnVuY3Rpb24gZGVjcnlwdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHRleHQgLSBUZXh0XHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IERlY3J5cHRSZXN1bHQgT2JqZWN0IHdpdGggZ2V0RGVjcnlwdFJlc3VsdCBtZXRob2RcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnL1xyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBnZXQgb3JpZ2luYWwgcGxhaW50ZXh0IHVzZSBnZXREZWNyeXB0UmVzdWx0XHJcbiAgICAgKiBjb25zdCB2YWx1ZSA9IGRlY3J5cHQuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICogbG9nLmluZm8odmFsdWUpOyAvL3dpbGwgcHJpbnQgaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqL1xyXG4gICAgZGVjcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmRlY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBFbmNyeXB0IHRleHRcclxuICAgICAqIEBmdW5jdGlvbiBlbmNyeXB0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdGV4dCAtIFRleHRcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gRW5jcnlwdGVkIHRleHRcclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogLy8gdG8gZW5jcnlwdCBwbGFpbnRleHQgaW50byBjaXBoZXJ0ZXh0IFxyXG4gICAgICogY29uc3QgZW5jcnlwdCA9IHV0aWxzLmVuY3J5cHQoJ2h0dHBzOi8vd3d3Lndpa2lwZWRpYS5vcmcvJyk7XHJcbiAgICAgKiBsb2cuaW5mbyhlbmNyeXB0KTsgLy8gd2lsbCBwcmludCBiNzU3YmEyYzJmYzUwZmJiNTExZDU5NjgxNmNhMDZjNGZhNTZmNGU5OGNlMjIyZjMwYmM1OGQ1MjUxZWQ2MzVlXHJcbiAgICAgKiBcclxuICAgICAqIC8vIHRvIGRlY3J5cHQgY2lwaGVydGV4dCBhbmQgdXNlIGl0IGluIHNjcmlwdCAgXHJcbiAgICAgKiBjb25zdCBkZWNyeXB0ID0gdXRpbHMuZGVjcnlwdChlbmNyeXB0KTtcclxuICAgICAqIGxvZy5pbmZvKGRlY3J5cHQpOyAvLyB3aWxsIHByaW50IEVOQ1JZUFRFRFxyXG4gICAgICogXHJcbiAgICAgKiB3ZWIuaW5pdCgpO1xyXG4gICAgICogd2ViLm9wZW4oZGVjcnlwdCk7IC8vIHdpbGwgb3BlbiBodHRwczovL3d3dy53aWtpcGVkaWEub3JnL1xyXG4gICAgICogXHJcbiAgICAgKiAvLyB0byBnZXQgb3JpZ2luYWwgcGxhaW50ZXh0IHVzZSBnZXREZWNyeXB0UmVzdWx0XHJcbiAgICAgKiBjb25zdCB2YWx1ZSA9IGRlY3J5cHQuZ2V0RGVjcnlwdFJlc3VsdCgpO1xyXG4gICAgICogbG9nLmluZm8odmFsdWUpOyAvL3dpbGwgcHJpbnQgaHR0cHM6Ly93d3cud2lraXBlZGlhLm9yZy9cclxuICAgICAqL1xyXG4gICAgZW5jcnlwdCh0ZXh0KSB7XHJcbiAgICAgICAgcmV0dXJuIGxpYlV0aWxzLmVuY3J5cHQodGV4dCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBjc3YgZmlsZVxyXG4gICAgICogQGZ1bmN0aW9uIHJlYWRDc3ZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHBhcmFtIHtPYmplY3Q9fSBvcHRpb25zIC0gT3B0aW9ucyAoaHR0cHM6Ly9jc3YuanMub3JnL3BhcnNlL29wdGlvbnMvKVxyXG4gICAgICovXHJcbiAgICByZWFkQ3N2KGZpbGVQYXRoLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICBjb25zdCBwYXJzZSA9IHJlcXVpcmUoJ2Nzdi1wYXJzZS9saWIvc3luYycpO1xyXG4gICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XHJcbiAgICAgICAgdmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XHJcblxyXG4gICAgICAgIHZhciBleHQgPSBwYXRoLmV4dG5hbWUoZmlsZVBhdGgpO1xyXG4gICAgICAgIGlmIChleHQgIT09ICcuY3N2JyAmJiBleHQgIT09ICcudHh0Jykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCAnVW5zdXBwb3J0ZWQgZmlsZSBleHRlbnNpb246ICcgKyBleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGRhdGE7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsICdVbmFibGUgdG8gcmVhZCBwYXJhbWV0ZXJzIGZpbGU6ICcgKyBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENTVnMgcHJvZHVjZWQgYnkgT1MgWCBFeGNlbCBoYXZlIGhlYWRlciB0ZXJtaW5hdGVkIHdpdGggMGQwZDBhXHJcbiAgICAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvXFxyXFxyL2csICdcXHInKTtcclxuXHJcbiAgICAgICAgLy8gc3RyaXAgQk9NIGZvciBVVEYtOFxyXG4gICAgICAgIHZhciBib20gPSBmYWxzZTtcclxuICAgICAgICAvLyBjYXRjaGVzIDB4RUZCQkJGIChVVEYtOCBCT00pIGJlY2F1c2UgdGhlIGJ1ZmZlci10by1zdHJpbmdcclxuICAgICAgICAvLyBjb252ZXJzaW9uIHRyYW5zbGF0ZXMgaXQgdG8gMHhGRUZGIChVVEYtMTYgQk9NKVxyXG4gICAgICAgIGlmIChkYXRhLmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xyXG4gICAgICAgICAgICBib20gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdmFyIHRhYmxlID0gcGFyc2UoZGF0YSwgeyBib206IGJvbSwgY29sdW1uczogdHJ1ZSwgdHJpbTogdHJ1ZSwgLi4ub3B0aW9ucyB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5DU1ZfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBXcml0ZXMgZGF0YSBpbnRvIGNzdiBmaWxlXHJcbiAgICAgKiBAZnVuY3Rpb24gd3JpdGVDc3ZcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBmaWxlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gZmlsZVxyXG4gICAgICogQHBhcmFtIHtBcnJheX0gZGF0YSAtIENTViBkYXRhIGluIGZvcm1hdCBbe2NvbHVtbl9uYW1lXzE6ICdmb28nLCBjb2x1bW5fbmFtZV8yOiAnYmFyJ31dXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdGlvbnMgLSBPcHRpb25zIChodHRwczovL2dpdGh1Yi5jb20vYW50b24tYm90L29iamVjdHMtdG8tY3N2I2FzeW5jLXRvZGlza2ZpbGVuYW1lLW9wdGlvbnMpXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHdyaXRlQ3N2KGZpbGVQYXRoLCBkYXRhLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBPYmplY3RzVG9Dc3YgPSByZXF1aXJlKCdvYmplY3RzLXRvLWNzdicpO1xyXG4gICAgICAgICAgICBjb25zdCBjc3YgPSBuZXcgT2JqZWN0c1RvQ3N2KGRhdGEpO1xyXG4gICAgICAgICAgICBhd2FpdCBjc3YudG9EaXNrKGZpbGVQYXRoLCB7IGFsbENvbHVtbnM6IHRydWUsIC4uLm9wdGlvbnMgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuQ1NWX0VSUk9SLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJlYWRzIGRhdGEgZnJvbSBYbHN4IGZpbGVcclxuICAgICAqIEBmdW5jdGlvbiByZWFkWGxzeFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGZpbGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byBmaWxlXHJcbiAgICAgKiBAcmV0dXJuIHtBcnJheX0gLSBBcnJheSBvZiB4bHN4IGRhdGFcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcmVhZFhsc3goZmlsZVBhdGgpIHtcclxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRXhjZWxSZWFkZXIoKTtcclxuICAgICAgICByZXR1cm4gYXdhaXQgcmVhZGVyLnJlYWQoZmlsZVBhdGgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgVXNlcyB0aGUgRE5TIHByb3RvY29sIHRvIHJlc29sdmUgYSBob3N0IG5hbWVcclxuICAgICAqIEBmdW5jdGlvbiBkbnNSZXNvbHZlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gaG9zdG5hbWUgLSBIb3N0IG5hbWUgdG8gcmVzb2x2ZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nPX0gcnJUeXBlIC0gUmVzb3VyY2UgcmVjb3JkIHR5cGUuIERlZmF1bHQ6ICdBJy5cclxuICAgICAqIEByZXR1cm4ge1N0cmluZ1tdIHwgT2JqZWN0fSAtIEFycmF5IG9yIE9iamVjdCBvZiByZXNvdXJjZSByZWNvcmRzLiBUaGUgdHlwZSBhbmQgc3RydWN0dXJlIG9mIGluZGl2aWR1YWwgcmVzdWx0cyB2YXJ5IGJhc2VkIG9uIHJydHlwZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBkbnNSZXNvbHZlKGhvc3RuYW1lLCByclR5cGUgPSAnQScpIHtcclxuICAgICAgICB1dGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKGhvc3RuYW1lLCAnaG9zdG5hbWUnKTtcclxuICAgICAgICBjb25zdCByclR5cGVzID0gWydBJywgJ0FBQUEnLCAnQU5ZJywgJ0NOQU1FJywgJ01YJywgJ05BUFRSJywgJ05TJywgJ1BUUicsICdTT0EnLCAnU1JWJywgJ1RYVCddO1xyXG5cclxuICAgICAgICBpZiAoIXJyVHlwZXMuaW5jbHVkZXMocnJUeXBlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJvckhlbHBlci5lcnJvckNvZGUuU0NSSVBUX0VSUk9SLCBgSW52YWxpZCBhcmd1bWVudCAtICdyclR5cGUnLiBBdmFpbGFibGUgcnJUeXBlIHZhbHVlczogJHtyclR5cGVzLmpvaW4oJywgJyl9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkbnNQcm9taXNlcyA9IHJlcXVpcmUoJ2RucycpLnByb21pc2VzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBkbnNQcm9taXNlcy5yZXNvbHZlKGhvc3RuYW1lLCByclR5cGUpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJyb3JIZWxwZXIuZXJyb3JDb2RlLkROU19FUlJPUiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBQYXJzZSBYTUwgZGF0YSB0byBKUyBvYmplY3QgXHJcbiAgICAgKiBAZnVuY3Rpb24geG1sVG9Kc29uXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IHhtbERhdGFTdHIgLSBMaWtlIDxyb290IGE9XCJuaWNlXCIgYj1cInZlcnkgbmljZVwiID48YT53b3c8L2E+PC9yb290PlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufE9iamVjdH0gb3B0aW9ucyAtIE9wdGlvbnMgKGh0dHBzOi8vZ2l0aHViLmNvbS9OYXR1cmFsSW50ZWxsaWdlbmNlL2Zhc3QteG1sLXBhcnNlci9ibG9iL2IwZWE2MzU4ODQ0Y2NjYTk1Y2FiMDI3NThlMDM4YzFjMzMyMTQyN2UvZG9jcy92NC8yLlhNTHBhcnNlT3B0aW9ucy5tZCkgXHJcbiAgICAgKi9cclxuICAgIHhtbFRvSnNvbih4bWxEYXRhU3RyLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgZmFzdFhtbFBhcnNlci5YTUxQYXJzZXIob3B0aW9ucyk7XHJcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHBhcnNlci5wYXJzZSh4bWxEYXRhU3RyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVycm9ySGVscGVyLmVycm9yQ29kZS5YTUxfRVJST1IsIGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|