oxygen-cli 1.42.0 → 1.43.0
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/CHANGELOG.md +8 -0
- package/build/core/OxygenCore.js +53 -10
- package/build/core/utils.js +21 -1
- package/build/lib/cli-util.js +3 -2
- package/build/lib/util.js +10 -10
- package/build/ox_modules/module-mob.js +34 -2
- package/build/ox_modules/module-web.js +58 -2
- package/build/ox_modules/utils.js +7 -1
- package/build/ox_reporters/reporter-rp.js +3 -2
- package/package.json +2 -1
|
@@ -64,16 +64,38 @@ var _perfectoReporting = _interopRequireDefault(require("perfecto-reporting"));
|
|
|
64
64
|
var _request = _interopRequireDefault(require("request"));
|
|
65
65
|
var _imgMerge = _interopRequireDefault(require("../lib/img-merge"));
|
|
66
66
|
var _autoStart = require("../ox_modules/module-web/webdriver/auto-start");
|
|
67
|
+
var _sanitizeHtml = _interopRequireDefault(require("sanitize-html"));
|
|
67
68
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
68
69
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
69
70
|
const MODULE_NAME = 'web';
|
|
70
71
|
const DEFAULT_SELENIUM_URL = 'http://localhost:4444/wd/hub';
|
|
71
72
|
const DEFAULT_BROWSER_NAME = 'chrome';
|
|
72
73
|
const DEFAULT_MOBILE_BROWSER = 'default';
|
|
73
|
-
const NO_SCREENSHOT_COMMANDS = ['init', 'assertAlert'];
|
|
74
|
+
const NO_SCREENSHOT_COMMANDS = ['init', 'assertAlert', 'dispose'];
|
|
75
|
+
const NO_SNAPSHOT_COMMANDS = ['init', 'assertAlert', 'dispose', 'transaction', 'deleteCookies', 'getCookies', 'getCssValue', 'getHTML', 'getSource', 'getTitle', 'getWindowHandles', 'getWindowSize', 'getXMLPageSource', 'isAlertPresent', 'isChecked', 'isExist', 'isInteractable', 'isSelected', 'isVisible', 'mock', 'mockClearAll', 'mockRestoreAll', 'newWindow', 'setAutoWaitForAngular', 'setTimeout', 'takeScreenshot', 'waitForAngular', 'waitForWindow'];
|
|
74
76
|
const ACTION_COMMANDS = ['open', 'click'];
|
|
75
77
|
const DEFAULT_WAIT_TIMEOUT = 60 * 1000; // default 60s wait timeout
|
|
76
78
|
|
|
79
|
+
const SANITIZE_HTML_OPTS = {
|
|
80
|
+
allowedTags: ['body', 'button', 'form', 'img', 'input', 'select', 'textarea', 'option', 'address', 'article', 'aside', 'footer', 'header', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hgroup', 'main', 'nav', 'section', 'blockquote', 'dd', 'div', 'dl', 'dt', 'figcaption', 'figure', 'hr', 'li', 'main', 'ol', 'p', 'pre', 'ul', 'a', 'abbr', 'b', 'bdi', 'bdo', 'cite', 'code', 'data', 'dfn', 'em', 'i', 'kbd', 'mark', 'q', 'rb', 'rp', 'rt', 'rtc', 'ruby', 's', 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'var', 'wbr', 'caption', 'col', 'colgroup', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr', 'title'],
|
|
81
|
+
allowedAttributes: false,
|
|
82
|
+
/*{
|
|
83
|
+
'*': [
|
|
84
|
+
'id',
|
|
85
|
+
'class',
|
|
86
|
+
'name',
|
|
87
|
+
'data-*',
|
|
88
|
+
'role',
|
|
89
|
+
'type',
|
|
90
|
+
'aria-*',
|
|
91
|
+
'href',
|
|
92
|
+
'alt',
|
|
93
|
+
'src'
|
|
94
|
+
]
|
|
95
|
+
},*/
|
|
96
|
+
allowedClasses: undefined,
|
|
97
|
+
allowedStyles: undefined
|
|
98
|
+
};
|
|
77
99
|
class WebModule extends _WebDriverModule.default {
|
|
78
100
|
constructor(options, context, rs, logger, modules, services) {
|
|
79
101
|
super(options, context, rs, logger, modules, services);
|
|
@@ -562,6 +584,40 @@ class WebModule extends _WebDriverModule.default {
|
|
|
562
584
|
}
|
|
563
585
|
}
|
|
564
586
|
}
|
|
587
|
+
_takeSnapshotSilent(name) {
|
|
588
|
+
if (!NO_SNAPSHOT_COMMANDS.includes(name)) {
|
|
589
|
+
let error;
|
|
590
|
+
try {
|
|
591
|
+
if (this.driver && this.driver.getPageSource) {
|
|
592
|
+
let retval;
|
|
593
|
+
this.driver.call(() => {
|
|
594
|
+
return new Promise((resolve, reject) => {
|
|
595
|
+
this.driver.getPageSource().then(result => {
|
|
596
|
+
retval = result;
|
|
597
|
+
retval = (0, _sanitizeHtml.default)(retval, SANITIZE_HTML_OPTS);
|
|
598
|
+
// remove empty lines
|
|
599
|
+
retval = retval.replace(/(^[ \t]*\n)/gm, "");
|
|
600
|
+
resolve();
|
|
601
|
+
}).catch(error => {
|
|
602
|
+
this.logger.error('Cannot get snapshot (1)', error);
|
|
603
|
+
reject();
|
|
604
|
+
});
|
|
605
|
+
});
|
|
606
|
+
});
|
|
607
|
+
if (error) {
|
|
608
|
+
this.logger.error('Cannot get snapshot (2)', error);
|
|
609
|
+
}
|
|
610
|
+
return retval;
|
|
611
|
+
}
|
|
612
|
+
} catch (e) {
|
|
613
|
+
this.logger.error('Cannot get snapshot (3)', e);
|
|
614
|
+
if (error) {
|
|
615
|
+
this.logger.error('Cannot get snapshot inner error', error);
|
|
616
|
+
}
|
|
617
|
+
// ignore
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
}
|
|
565
621
|
_adjustBrowserLog(log) {
|
|
566
622
|
if (!log || typeof log !== 'object') {
|
|
567
623
|
return null;
|
|
@@ -861,4 +917,4 @@ class WebModule extends _WebDriverModule.default {
|
|
|
861
917
|
}
|
|
862
918
|
}
|
|
863
919
|
exports.default = WebModule;
|
|
864
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImRlZmF1bHQiLCJyZXF1aXJlIiwiX2Nocm9tZUhhciIsIl91cmwiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwid2RpbyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX1dlYkRyaXZlck1vZHVsZSIsIl93aGVuIiwiX3V0aWxzIiwiX2hlbHBlciIsIl9PeHlnZW5FcnJvciIsIl91dGlsIiwiX3NhdWNlbGFicyIsIl9ub2RlUmVzdENsaWVudCIsIl90ZXN0aW5nYm90QXBpIiwiX2NoaWxkX3Byb2Nlc3MiLCJfcGVyZmVjdG9SZXBvcnRpbmciLCJfcmVxdWVzdCIsIl9pbWdNZXJnZSIsIl9hdXRvU3RhcnQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJoYXMiLCJnZXQiLCJzZXQiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJNT0RVTEVfTkFNRSIsIkRFRkFVTFRfU0VMRU5JVU1fVVJMIiwiREVGQVVMVF9CUk9XU0VSX05BTUUiLCJERUZBVUxUX01PQklMRV9CUk9XU0VSIiwiTk9fU0NSRUVOU0hPVF9DT01NQU5EUyIsIkFDVElPTl9DT01NQU5EUyIsIkRFRkFVTFRfV0FJVF9USU1FT1VUIiwiV2ViTW9kdWxlIiwiV2ViRHJpdmVyTW9kdWxlIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwiY29udGV4dCIsInJzIiwibG9nZ2VyIiwibW9kdWxlcyIsInNlcnZpY2VzIiwidHJhbnNhY3Rpb25zIiwibGFzdE5hdmlnYXRpb25TdGFydFRpbWUiLCJoZWxwZXJzIiwiX2xvYWRIZWxwZXJGdW5jdGlvbnMiLCJPeEVycm9yIiwiZXJySGVscGVyIiwid2FpdEZvclRpbWVvdXQiLCJ3ZFByb2MiLCJuYW1lIiwiZ2V0RHJpdmVyIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiY2FwcyIsImluaXQiLCJzZWxlbml1bVVybCIsImlzSW5pdGlhbGl6ZWQiLCJjdHgiLCJhdXRvU3RhcnRXZWJEcml2ZXIiLCJhcHBpdW1VcmwiLCJzdGFydHNXaXRoIiwicmVtb3RlVXJsIiwicHJvYyIsImRlZmF1bHRCcm93c2VyIiwiYnJvd3Nlck5hbWUiLCJlcnJvckNvZGUiLCJJTlZBTElEX0NBUEFCSUxJVElFUyIsInRvTG93ZXJDYXNlIiwicmVjb3JkSEFSIiwiYnJvd3NlciIsInBlcmZvcm1hbmNlIiwidXJsIiwiVVJMIiwicGFyc2UiLCJwcm90b2NvbCIsInJlcGxhY2UiLCJob3N0IiwiaG9zdG5hbWUiLCJwb3J0IiwicGFyc2VJbnQiLCJwYXRoIiwicGF0aG5hbWUiLCJhdXRoIiwic3BsaXQiLCJ3ZGlvT3B0cyIsInVzZXIiLCJrZXkiLCJzZWxlbml1bVVybEJhc2UiLCJpc1J1bm5pbmdPblNlbGVub2lkIiwiX2lzU2VsZW5vaWRIdWIiLCJlbmFibGVWaWRlbyIsInVuZGVmaW5lZCIsInZpZGVvRnJhbWVSYXRlIiwiY2FwYWJpbGl0aWVzIiwibG9nTGV2ZWwiLCJydW5uZXIiLCJ3YWl0Zm9yVGltZW91dCIsImNvbm5lY3Rpb25SZXRyeVRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlDb3VudCIsImluaXRFcnJvciIsIl90aGlzIiwicHJvdmlkZXIiLCJtb2RVdGlscyIsImRldGVybWluZVByb3ZpZGVyIiwiZW5yaWNoUHJvdmlkZXJXZGlvT3B0aW9ucyIsImRyaXZlciIsInJlbW90ZSIsInNlc3Npb25JZCIsInNlbGVuaXVtQnJvd3NlclRpbWVvdXQiLCJzZWxlbml1bVRpbWVvdXQiLCJQRVJGRUNUTyIsInBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCIsInBlcmZlY3RvUmVwb3J0aW5nIiwiUGVyZmVjdG8iLCJQZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJ3ZWJkcml2ZXIiLCJleGVjdXRlU2NyaXB0IiwiY29tbWFuZCIsInBhcmFtcyIsImV4ZWN1dGUiLCJyZXBvcnRpbmdDbGllbnQiLCJQZXJmZWN0b1JlcG9ydGluZ0NsaWVudCIsInRlc3RTdGFydCIsImdldFNlbGVuaXVtSW5pdEVycm9yIiwiY29sbGVjdEJyb3dzZXJMb2dzIiwiZ2V0QnJvd3NlckxvZ3MiLCJlcnJvciIsIkxBTUJEQVRFU1QiLCJCUk9XU0VSU1RBQ0siLCJpbmNsdWRlcyIsIm1heGltaXplV2luZG93Iiwic2V0VGltZW91dCIsImVyciIsIlVOS05PV05fRVJST1IiLCJtZXNzYWdlIiwidXRpbCIsImluc3BlY3QiLCJvdmVyd3JpdGVXZGlvQ29tbWFuZHMiLCJkaXNwb3NlIiwic3RhdHVzIiwiX3doZW5XZWJNb2R1bGVEaXNwb3NlIiwiZGVmZXIiLCJzdGVwcyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImZhaWxlZEZpbmRlZCIsImZpbmQiLCJpdGVtIiwidG9VcHBlckNhc2UiLCJTQVVDRUxBQlMiLCJ1c2VybmFtZSIsImFjY2Vzc0tleSIsInBhc3NlZCIsImlkIiwiYm9keSIsIm15QWNjb3VudCIsIlNhdWNlTGFicyIsInVwZGF0ZUpvYiIsInN0b3BKb2IiLCJfc2VuZFJlc3VsdFN0YXR1c1RvTGFtYmRhVGVzdCIsImRlbGV0ZVNlc3Npb24iLCJURVNUSU5HQk9UIiwiX3NlbmRSZXN1bHRTdGF0dXNUb1Rlc3RpbmdCb3QiLCJ0ZXN0U3RvcCIsIkNvbnN0YW50cyIsInJlc3VsdHMiLCJmYWlsZWQiLCJfc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrIiwiY2xvc2VCcm93c2VyV2luZG93cyIsImRpc3Bvc2VDb250aW51ZSIsIndhcm4iLCJraWxsIiwicHJvbWlzZSIsInNlbGVuaXVtU2Vzc2lvblRpbWVvdXQiLCJzZWxlbml1bVBpZCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsImV4ZWNTeW5jIiwic3RkaW8iLCJwZ3JlcFJlc3VsdCIsInRvU3RyaW5nIiwicmVzb2x2ZSIsIl9pdGVyYXRpb25TdGFydCIsImdsb2JhbCIsIl9sYXN0VHJhbnNhY3Rpb25OYW1lIiwiX2l0ZXJhdGlvbkVuZCIsInR5cGUiLCJlcnJvckhlbHBlciIsIlNFTEVOSVVNX1NFU1NJT05fVElNRU9VVCIsImxvZ3MiLCJsb2ciLCJwdXNoIiwiX2FkanVzdEJyb3dzZXJMb2ciLCJfZ2V0SEFSIiwiaGFyIiwiaGFzRmFpbGVkIiwiX2FkZFNlbGVub2lkVmlkZW9Bc1Rlc3RBdHRhY2htZW50IiwiX2lzQWN0aW9uIiwiX3Rha2VTY3JlZW5zaG90U2lsZW50IiwidGFrZVNjcmVlbnNob3QiLCJyZXR2YWwiLCJQcm9taXNlIiwicmVqZWN0Iiwid2FpdFVudGlsUmV0VmFsIiwid2FpdFVudGlsIiwiaW1hZ2VzIiwiaGFuZGxlcyIsImdldFdpbmRvd0hhbmRsZXMiLCJoYW5kbGUiLCJzd2l0Y2hUb1dpbmRvdyIsImltYWdlIiwidGl0bGUiLCJnZXRUaXRsZSIsInRleHRUb0ltYWdlIiwidGl0bGVJbWFnZSIsImdlbmVyYXRlIiwiY29uc29sZSIsIm1lcmdlZEltYWdlIiwibWVyZ2VJbWFnZXMiLCJkaXJlY3Rpb24iLCJ0aW1lb3V0IiwidGhlbiIsImNhdGNoIiwiZXciLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibGV2ZWwiLCJzcmMiLCJfZ2V0U3RhdHMiLCJjb21tYW5kTmFtZSIsImZldGNoU3RhdHMiLCJuYXZpZ2F0aW9uU3RhcnQiLCJkb21Db250ZW50TG9hZGVkIiwibG9hZCIsInNhbWVQYWdlIiwibGFzdEVycm9yIiwidGltaW5ncyIsIndpbmRvdyIsInRpbWluZyIsImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IiwibG9hZEV2ZW50U3RhcnQiLCJleGVjdXRlRXJyb3IiLCJEb21Db250ZW50TG9hZGVkRXZlbnQiLCJMb2FkRXZlbnQiLCJ0cmFuc2FjdGlvbiIsInNsaWNlIiwiY291bnRlciIsImtleXMiLCJmaWx0ZXIiLCJnZXRXZGlvTG9jYXRvciIsIm1hdGNoUGF0dGVybiIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsInR5cGVzIiwiZ2V0TG9nVHlwZXMiLCJnZXRMb2dzIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnRzIiwibXNnT2JqIiwiaGFyRnJvbU1lc3NhZ2VzIiwiY2hlY2tXYWl0Rm9yQW5ndWxhciIsImF1dG9XYWl0Rm9yQW5ndWxhciIsIndhaXRGb3JBbmd1bGFyIiwiYXV0b1dhaXRGb3JBbmd1bGFyUm9vdFNlbGVjdG9yIiwiYXV0b1dhaXRGb3JBbmd1bGFyU29mdFdhaXQiLCJhdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0IiwibGFtYmRhQ3JlZGVudGlhbHMiLCJsYW1iZGFBdXRvbWF0aW9uQ2xpZW50IiwibGFtYmRhUmVzdENsaWVudCIsIkF1dG9tYXRpb25DbGllbnQiLCJyZXF1ZXN0Qm9keSIsInN0YXR1c19pbmQiLCJ1cGRhdGVTZXNzaW9uQnlJZCIsInRiIiwiVGVzdGluZ0JvdCIsImFwaV9rZXkiLCJhcGlfc2VjcmV0IiwidGVzdERhdGEiLCJ1cGRhdGVUZXN0IiwidGVzdERldGFpbHMiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwicmVxdWVzdCIsInJlcyIsImluZGV4T2YiLCJyZWNvcmRWaWRlbyIsInZpZGVvRmlsZVVybCIsImZpbGVOYW1lIiwiYXR0YWNobWVudHMiLCJuZXdWaWRlb0F0dGFjaG1lbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtd2ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2ViXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBicm93c2VyIGF1dG9tYXRpb24uXHJcbiAqIEBzYW1wbGUgKipOb3RlczoqKiAgXHJcbiAqICAgXHJcbiAqIENvbW1hbmRzIHdoaWNoIG9wZXJhdGUgb24gZWxlbWVudHMgc3VjaCBhcyBjbGljaywgYXNzZXJ0LCB3YWl0Rm9yLCB0eXBlLCBzZWxlY3QsIGFuZCBvdGhlcnMgd2lsbCBhdXRvbWF0aWNhbGx5IHdhaXQgZm9yIGEgcGVyaW9kIG9mIHRpbWUgZm9yIHRoZSBlbGVtZW50IHRvIGFwcGVhciBpbiBET00gYW5kIGJlY29tZSB2aXNpYmxlLiBCeSBkZWZhdWx0IHRoaXMgcGVyaW9kIGVxdWFscyB0byA2MCBzZWNvbmRzLCBidXQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGBzZXRUaW1lb3V0YGNvbW1hbmQuXHJcbiAqICAgXHJcbiAqICoqU3RyaW5nIG1hdGNoaW5nIHBhdHRlcm5zOioqIFxyXG4gKiBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGByZWdleGk6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogICogYGV4YWN0OlNUUklOR2AgLSBNYXRjaCB0aGUgc3RyaW5nIHZlcmJhdGltLlxyXG4gKiAgKiBgZ2xvYjpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgZ2xvYiBwYXR0ZXJuLiBgP2Agd2lsbCBtYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciBleGNlcHQgbmV3IGxpbmUgXFwoXFxuXFwpLiBgKmAgd2lsbCBtYXRjaCBhbnkgc2VxdWVuY2UgXFwoMCBvciBtb3JlXFwpIG9mIGNoYXJhY3RlcnMgZXhjZXB0IG5ldyBsaW5lLiBFbXB0eSAgICAgUEFUVEVSTiB3aWxsIG1hdGNoIG9ubHkgb3RoZXIgZW1wdHkgc3RyaW5ncy5cclxuICogICogYFBBVFRFUk5gIC0gU2FtZSBhcyBnbG9iIG1hdGNoaW5nLiAgXHJcbiAqXHJcbiAqICoqTG9jYXRvcnM6KiogXHJcbiAqIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGFuIGVsZW1lbnQgbG9jYXRvciBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIGxvY2F0b3IgdHlwZXMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRCBhdHRyaWJ1dGUuXHJcbiAqICAqIGBjc3M9Q1NTX1NFTEVDVE9SYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIENTUyBzZWxlY3Rvci5cclxuICogICogYGxpbms9VEVYVGAgLSBMb2NhdGVzIGxpbmsgZWxlbWVudCB3aG9zZSB2aXNpYmxlIHRleHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbGluay1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgbGluayBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbmFtZT1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgTkFNRSBhdHRyaWJ1dGUuXHJcbiAqICAqIGB0YWc9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxyXG4gKiAgKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogICogYChYUEFUSClbXWAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgcXVvdGVzICovXHJcbmltcG9ydCB7IGhhckZyb21NZXNzYWdlcyB9IGZyb20gJ2Nocm9tZS1oYXInO1xyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJztcclxuaW1wb3J0IFNhdWNlTGFicyBmcm9tICdzYXVjZWxhYnMnO1xyXG5pbXBvcnQgbGFtYmRhUmVzdENsaWVudCBmcm9tICdAbGFtYmRhdGVzdC9ub2RlLXJlc3QtY2xpZW50JztcclxuaW1wb3J0IFRlc3RpbmdCb3QgZnJvbSAndGVzdGluZ2JvdC1hcGknO1xyXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgcGVyZmVjdG9SZXBvcnRpbmcgZnJvbSAncGVyZmVjdG8tcmVwb3J0aW5nJztcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XHJcbmltcG9ydCBtZXJnZUltYWdlcyBmcm9tICcuLi9saWIvaW1nLW1lcmdlJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgeyBhdXRvU3RhcnRXZWJEcml2ZXIgfSBmcm9tICcuLi9veF9tb2R1bGVzL21vZHVsZS13ZWIvd2ViZHJpdmVyL2F1dG8tc3RhcnQnO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnd2ViJztcclxuY29uc3QgREVGQVVMVF9TRUxFTklVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9OQU1FID0gJ2Nocm9tZSc7XHJcbmNvbnN0IERFRkFVTFRfTU9CSUxFX0JST1dTRVIgPSAnZGVmYXVsdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywgJ2NsaWNrJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViTW9kdWxlIGV4dGVuZHMgV2ViRHJpdmVyTW9kdWxlIHtcclxuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGNvbnRleHQsIHJzLCBsb2dnZXIsIG1vZHVsZXMsIHNlcnZpY2VzKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0ge307ICAgICAgICAgICAgICAgICAgICAgIC8vIHRyYW5zYWN0aW9uLT5oYXIgZGljdGlvbmFyeVxyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycyA9IHt9O1xyXG4gICAgICAgIHRoaXMuX2xvYWRIZWxwZXJGdW5jdGlvbnMoKTtcclxuICAgICAgICAvLyBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKHNvbWUgbW9kdWxlIGNvbW1hbmRzIG1pZ2h0IHJlZmVyIHRvIHRoaXMuT3hFcnJvciBhbmQgdGhpcy5lcnJIZWxwZXIpXHJcbiAgICAgICAgdGhpcy5PeEVycm9yID0gT3hFcnJvcjtcclxuICAgICAgICB0aGlzLmVyckhlbHBlciA9IGVyckhlbHBlcjtcclxuICAgICAgICAvLyBob2xkcyBlbGVtZW50IG9wZXJhdGlvbiB0aW1lb3V0IHZhbHVlXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yVGltZW91dCA9IERFRkFVTFRfV0FJVF9USU1FT1VUO1xyXG4gICAgICAgIHRoaXMud2RQcm9jID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbmFtZSgpIHtcclxuICAgICAgICByZXR1cm4gTU9EVUxFX05BTUU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0RHJpdmVyXHJcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIHRoZSB1bmRlcmx5aW5nIFdESU8gZHJpdmVyLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBXRElPIGRyaXZlci5cclxuICAgICAqL1xyXG4gICAgZ2V0RHJpdmVyKCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXREcml2ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXRDYXBhYmlsaXRpZXNcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgY3VycmVudGx5IGRlZmluZWQgY2FwYWJpbGl0aWVzLlxyXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBDdXJyZW50IGNhcGFiaWxpdGllcyBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIGdldENhcGFiaWxpdGllcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXBzIHx8IHN1cGVyLmdldENhcGFiaWxpdGllcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGluaXRcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIG5ldyBTZWxlbml1bSBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBjYXBzIC0gRGVzaXJlZCBjYXBhYmlsaXRpZXMuIElmIG5vdCBzcGVjaWZpZWQgY2FwYWJpbGl0aWVzIHdpbGwgYmUgdGFrZW4gZnJvbSBzdWl0ZSBkZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBzZWxlbml1bVVybCAtIFJlbW90ZSBzZXJ2ZXIgVVJMIChkZWZhdWx0OiBodHRwOi8vbG9jYWxob3N0OjQ0NDQvd2QvaHViKS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgaW5pdChjYXBzLCBzZWxlbml1bVVybCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGFrZSBjYXBhYmlsaXRpZXMgZWl0aGVyIGZyb20gaW5pdCBtZXRob2QgYXJndW1lbnQgb3IgZnJvbSBjb250ZXh0IHBhcmFtZXRlcnMgcGFzc2VkIGluIHRoZSBjb25zdHJ1Y3RvclxyXG4gICAgICAgIC8vIG1lcmdlIGNhcGFiaWxpdGllcyBmcm9tIGNvbnRleHQgYW5kIGZyb20gaW5pdCBmdW5jdGlvbiBhcmd1bWVudCwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGNvbnRleHQtcGFzc2VkIGNhcGFiaWxpdGllc1xyXG4gICAgICAgIHRoaXMuY2FwcyA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLmN0eC5jYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jdHguY2FwcyB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY2Fwcykge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMgPSB7IC4uLnRoaXMuY2FwcywgLi4uY2FwcyB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZWxlbml1bVVybCAmJiAhdGhpcy5vcHRpb25zLmF1dG9TdGFydFdlYkRyaXZlcikge1xyXG4gICAgICAgICAgICAvLyBpZiBhcHBpdW1VcmwgcG9pbnRzIHRvIGFuIGV4dGVybmFsIGV4ZWN1dGlvbiBncmlkIChzdWNoIGFzIEJTKVxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFwcGl1bVVybCAmJiAhdGhpcy5vcHRpb25zLmFwcGl1bVVybC5zdGFydHNXaXRoKCdodHRwOi8vbG9jYWxob3N0JykpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVuaXVtVXJsID0gdGhpcy5vcHRpb25zLmFwcGl1bVVybDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGVuaXVtVXJsID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVXJsIHx8IERFRkFVTFRfU0VMRU5JVU1fVVJMO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNoZWNrIGlmIHdlIHNob3VsZCBpbmRldGlmeSBhbmQgYXV0by1zdGFydCBhIHJlbGV2YW50IHdlYmRyaXZlclxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5hdXRvU3RhcnRXZWJEcml2ZXIpIHtcclxuICAgICAgICAgICAgY29uc3QgeyByZW1vdGVVcmwsIHByb2MgfSA9IGF3YWl0IGF1dG9TdGFydFdlYkRyaXZlcih0aGlzLmNhcHMpO1xyXG4gICAgICAgICAgICBzZWxlbml1bVVybCA9IHJlbW90ZVVybDtcclxuICAgICAgICAgICAgdGhpcy53ZFByb2MgPSBwcm9jO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcG9wdWxhdGUgYnJvd3Nlck5hbWUgY2FwcyBmcm9tIG9wdGlvbnMuIEZJWE1FOiB3aHkgaXMgdGhpcyBldmVuIG5lZWRlZD9cclxuICAgICAgICBsZXQgZGVmYXVsdEJyb3dzZXIgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIXRoaXMuY2Fwcy5icm93c2VyTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLm9wdGlvbnMuYnJvd3Nlck5hbWUgfHwgREVGQVVMVF9CUk9XU0VSX05BTUU7XHJcbiAgICAgICAgICAgIGRlZmF1bHRCcm93c2VyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gRklYTUU6IHNoYWxsIHdlIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBicm93c2VyTmFtZSBpcyBub3Qgc3BlY2lmaWVkLCBuZWl0aGVyIGluIGNhcHMgbm9yIGluIG9wdGlvbnM/IVxyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuSU5WQUxJRF9DQVBBQklMSVRJRVMsXHJcbiAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGluaXRpYWxpemUgYHdlYmAgbW9kdWxlIC0gYnJvd3Nlck5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGp1c3QgYnJvd3Nlck5hbWUtc1xyXG4gICAgICAgIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2llJykge1xyXG4gICAgICAgICAgICAvLyBJRSBpcyBzcGVjaWZpZWQgYXMgJ2llJyB0aHJvdWdoIHRoZSBjb21tYW5kIGxpbmUgYW5kIHBvc3NpYmx5IHN1aXRlc1xyXG4gICAgICAgICAgICAvLyBidXQgc2VsZW5pdW0gc3RhbmRhbG9uZSBzZXJ2ZXIgZXhwZWN0cyAnaW50ZXJuZXQgZXhwbG9yZXInXHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9ICdpbnRlcm5ldCBleHBsb3Jlcic7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHNbJ2xhbWJkYTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgLy8gbGFtYmRhdGVzdCBleHBlY3RzIG9yaWdpbmFsIGNhc2UgbmFtZXNcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwc1sncGVyZmVjdG9Nb2JpbGU6b3B0aW9ucyddKSB7XHJcbiAgICAgICAgICAgIC8vIHBlcmZlY3RvTW9iaWxlIGV4cGVjdHMgb3JpZ2luYWwgY2FzZSBuYW1lc1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzLmJyb3dzZXJOYW1lICE9PSAnTWljcm9zb2Z0RWRnZScpIHtcclxuICAgICAgICAgICAgLy8gc2VsZW5pdW0gc3RhbmRhbG9uZSBzZXJ2ZXIgZXhwZWN0cyBhbGwgYnJvd3Nlck5hbWVzIHRvIGJlIGxvd2VyY2FzZVxyXG4gICAgICAgICAgICAvLyBleGNlcHQgXCJNaWNyb3NvZnRFZGdlXCJcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gdGhpcy5jYXBzLmJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBhZGp1c3QgY2FwYWJpbGl0aWVzIHRvIGVuYWJsZSBjb2xsZWN0aW5nIGJyb3dzZXIgYW5kIHBlcmZvcm1hbmNlIHN0YXRzIGluIENocm9tZSBcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwc1snZ29vZzpsb2dnaW5nUHJlZnMnXSA9IHsgICAgIC8vIGZvciBDaHJvbWVEcml2ZXIgPj0gNzVcclxuICAgICAgICAgICAgICAgIGJyb3dzZXI6ICdBTEwnLFxyXG4gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2U6ICdBTEwnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgIC8vIHNwZWNpZnlpbmcgdGhpcyBsZWFkcyBDaHJvbWUgNzcrIHRvIHJlZnVzZSBsb2FkaW5nXHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5sb2dnaW5nUHJlZnMgPSB7ICAgICAgICAgICAgIC8vIGZvciBDaHJvbWVEcml2ZXIgPCA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmNocm9tZU9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICBwZXJmTG9nZ2luZ1ByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlTmV0d29yazogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVQYWdlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcG9wdWxhdGUgV0RJTyBvcHRpb25zXHJcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLnBhcnNlKHNlbGVuaXVtVXJsIHx8IERFRkFVTFRfU0VMRU5JVU1fVVJMKTtcclxuICAgICAgICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKTtcclxuICAgICAgICBjb25zdCBob3N0ID0gdXJsLmhvc3RuYW1lO1xyXG4gICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh1cmwucG9ydCB8fCAocHJvdG9jb2wgPT09ICdodHRwcycgPyA0NDMgOiA4MCkpO1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSB1cmwucGF0aG5hbWU7XHJcblxyXG4gICAgICAgIC8vIGF1dGggaXMgbmVlZGVkIG1vc3RseSBmb3IgY2xvdWQgcHJvdmlkZXJzIHN1Y2ggYXMgTGFtYmRhVGVzdFxyXG4gICAgICAgIGlmICh1cmwuYXV0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRoID0gdXJsLmF1dGguc3BsaXQoJzonKTtcclxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLndkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogYXV0aFswXSxcclxuICAgICAgICAgICAgICAgIGtleTogYXV0aFsxXVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVuaXVtVXJsQmFzZSA9IGAke3Byb3RvY29sfTovLyR7aG9zdH06JHtwb3J0fWA7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgc2VsZW5pdW0gaHViIGlzIGJhc2VkIG9uIFNlbGVub2lkLCB0aGVuIGVuYWJsZSB2aWRlbyByZWNvcmRpbmdcclxuICAgICAgICB0aGlzLmlzUnVubmluZ09uU2VsZW5vaWQgPSBhd2FpdCB0aGlzLl9pc1NlbGVub2lkSHViKHRoaXMuc2VsZW5pdW1VcmxCYXNlKTtcclxuICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmdPblNlbGVub2lkKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddLmVuYWJsZVZpZGVvID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddLmVuYWJsZVZpZGVvID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2Fwc1snc2VsZW5vaWQ6b3B0aW9ucyddLnZpZGVvRnJhbWVSYXRlID0gNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBnZW5lcmF0ZSBXZWJkcml2ZXIuaW8gb3B0aW9uc1xyXG4gICAgICAgIGNvbnN0IHdkaW9PcHRzID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMud2Rpb09wdHMgfHwge30sXHJcbiAgICAgICAgICAgIHByb3RvY29sOiBwcm90b2NvbCxcclxuICAgICAgICAgICAgaG9zdG5hbWU6IGhvc3QsXHJcbiAgICAgICAgICAgIHBvcnQ6IHBvcnQsXHJcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXHJcbiAgICAgICAgICAgIGNhcGFiaWxpdGllczogdGhpcy5jYXBzLFxyXG4gICAgICAgICAgICBsb2dMZXZlbDogJ3NpbGVudCcsXHJcbiAgICAgICAgICAgIHJ1bm5lcjogJ3JlcGwnLFxyXG4gICAgICAgICAgICB3YWl0Zm9yVGltZW91dDogNTAwMCwgLy8gaW5jcmVhc2UgdGhlIGRlZmF1bHQgMzAwMFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlUaW1lb3V0OiAzMTAqMTAwMCxcclxuICAgICAgICAgICAgY29ubmVjdGlvblJldHJ5Q291bnQ6IDFcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgaW5pdEVycm9yID0gbnVsbDtcclxuICAgICAgICBjb25zdCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBtb2RVdGlscy5kZXRlcm1pbmVQcm92aWRlcih3ZGlvT3B0cyk7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IG1vZFV0aWxzLmVucmljaFByb3ZpZGVyV2Rpb09wdGlvbnMocHJvdmlkZXIsIHdkaW9PcHRzKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgYnJvd3NlciBmb3IgbW9iaWxlIHdlYiB0ZXN0cywgaWYgZXhlY3V0ZWQgYWdhaW5zdCByZW1vdGUgZGV2aWNlcyBvZiBhIGNsb3VkIHByb3ZpZGVyXHJcbiAgICAgICAgaWYgKGRlZmF1bHRCcm93c2VyICYmIHByb3ZpZGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHdkaW9PcHRzLmNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9IERFRkFVTFRfTU9CSUxFX0JST1dTRVI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2Rpb09wdHMgPSB3ZGlvT3B0cztcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmRyaXZlciA9IGF3YWl0IHdkaW8ucmVtb3RlKHdkaW9PcHRzKTtcclxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyLnByb3ZpZGVyID0gcHJvdmlkZXI7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtQnJvd3NlclRpbWVvdXQgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLnNlbGVuaXVtVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bVRpbWVvdXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE8pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCA9IGF3YWl0IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHdlYmRyaXZlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlU2NyaXB0OiBhc3luYyAoY29tbWFuZCwgcGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5kcml2ZXIuZXhlY3V0ZShjb21tYW5kLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGluZ0NsaWVudCA9IG5ldyBwZXJmZWN0b1JlcG9ydGluZy5QZXJmZWN0by5QZXJmZWN0b1JlcG9ydGluZ0NsaWVudChwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0YXJ0KG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGVyckhlbHBlci5nZXRTZWxlbml1bUluaXRFcnJvcihlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJlc2V0IGJyb3dzZXIgbG9ncyBpZiBhdXRvIGNvbGxlY3QgbG9ncyBvcHRpb24gaXMgZW5hYmxlZFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEJyb3dzZXJMb2dzICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIC8vIHNpbXBseSBjYWxsIHRoaXMgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGxvZ3MgYW5kIHN0YXJ0IHRoZSB0ZXN0IHdpdGggdGhlIGNsZWFuIGxvZ3NcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0QnJvd3NlckxvZ3MoKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCByZXRyaWV2ZSBicm93c2VyIGxvZ3MuJywgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIFttb2RVdGlscy5wcm92aWRlci5MQU1CREFURVNULCBtb2RVdGlscy5wcm92aWRlci5CUk9XU0VSU1RBQ0ssIG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPXS5pbmNsdWRlcyh0aGlzLmRyaXZlci5wcm92aWRlcilcclxuICAgICAgICAgICAgICAgIC8vWydNaWNyb3NvZnRFZGdlJywgJ21zZWRnZScsICdFZGdlJywgJ0ludGVybmV0IEV4cGxvcmVyJ10uaW5jbHVkZXModGhpcy5kcml2ZXIuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBtYXhpbWl6ZSB3aW5kb3cgaWYgdGhlIHRlc3QgaXMgZXhlY3V0ZWQgYWdhaW5zdCBleHRlcm5hbCBjbG91ZCBwcm92aWRlciBpbmZyYXN0cnVjdHVyZVxyXG4gICAgICAgICAgICAgICAgLy8gYXMgbW9zdCBvZiBjbG91ZCBwcm92aWRlcnMgZG8gbm90IHN1cHBvcnQgdGhpcyBmdW5jdGlvbmFsaXR5XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBtYXhpbWl6ZSBicm93c2VyIHdpbmRvd1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIubWF4aW1pemVXaW5kb3coKTtcclxuICAgICAgICAgICAgICAgIC8vIHNldCBpbml0aWFsIFRpbWVvdXRcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLnNldFRpbWVvdXQoe1xyXG4gICAgICAgICAgICAgICAgICAgICdpbXBsaWNpdCc6IHRoaXMud2FpdEZvclRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3BhZ2VMb2FkJzogdGhpcy53YWl0Rm9yVGltZW91dFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5VTktOT1dOX0VSUk9SLCBlcnIubWVzc2FnZSwgdXRpbC5pbnNwZWN0KGVycikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgbW9kVXRpbHMub3ZlcndyaXRlV2Rpb0NvbW1hbmRzKHRoaXMuZHJpdmVyKTtcclxuXHJcbiAgICAgICAgc3VwZXIuaW5pdCh0aGlzLmRyaXZlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gZGlzcG9zZVxyXG4gICAgICogQHN1bW1hcnkgRW5kcyB0aGUgY3VycmVudCBzZXNzaW9uLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBzdGF0dXMgLSBUZXN0IHN0YXR1cywgZWl0aGVyIGBwYXNzZWRgIG9yIGBmYWlsZWRgLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBkaXNwb3NlKHN0YXR1cykge1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25zID0ge307XHJcbiAgICAgICAgdGhpcy5fd2hlbldlYk1vZHVsZURpc3Bvc2UgPSBkZWZlcigpO1xyXG5cclxuICAgICAgICBpZiAoIXN0YXR1cykge1xyXG4gICAgICAgICAgICBzdGF0dXMgPSAncGFzc2VkJztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJzLnN0ZXBzICYmIEFycmF5LmlzQXJyYXkodGhpcy5ycy5zdGVwcykgJiYgdGhpcy5ycy5zdGVwcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWlsZWRGaW5kZWQgPSB0aGlzLnJzLnN0ZXBzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uc3RhdHVzID09PSAnZmFpbGVkJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFpbGVkRmluZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ2ZhaWxlZCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN0YXR1cyA9IHN0YXR1cy50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuU0FVQ0VMQUJTKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXNlcm5hbWUgPSB0aGlzLndkaW9PcHRzLmNhcGFiaWxpdGllc1snc2F1Y2U6b3B0aW9ucyddWyd1c2VybmFtZSddO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjY2Vzc0tleSA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ11bJ2FjY2Vzc0tleSddO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhc3NlZCA9IHN0YXR1cyA9PT0gJ1BBU1NFRCc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IFwie1xcXCJwYXNzZWRcXFwiOlwiK3Bhc3NlZCtcIn1cIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXlBY2NvdW50ID0gbmV3IFNhdWNlTGFicyh7IHVzZXI6IHVzZXJuYW1lLCBrZXk6IGFjY2Vzc0tleX0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15QWNjb3VudC51cGRhdGVKb2IodXNlcm5hbWUsIGlkLCBib2R5KTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBteUFjY291bnQuc3RvcEpvYih1c2VybmFtZSwgaWQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuTEFNQkRBVEVTVCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3Qoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlRFU1RJTkdCT1QpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90KHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVwb3J0aW5nQ2xpZW50LnRlc3RTdG9wKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPT09ICdQQVNTRUQnID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdG9SZXBvcnRpbmcuQ29uc3RhbnRzLnJlc3VsdHMucGFzc2VkIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyZmVjdG9SZXBvcnRpbmcuQ29uc3RhbnRzLnJlc3VsdHMuZmFpbGVkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5CUk9XU0VSU1RBQ0spIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG51bGwgJiYgWydQQVNTRUQnLCdGQUlMRUQnXS5pbmNsdWRlcyhzdGF0dXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jbG9zZUJyb3dzZXJXaW5kb3dzKHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNhbmNlbGVkIG9yIG90aGVyIHN0YXR1c1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oJ0Vycm9yIGRpc3Bvc2luZyBkcml2ZXI6ICcsIGUpOyAgICAvLyBpZ25vcmUgYW55IGVycm9ycyBhdCBkaXNwb3NhbCBzdGFnZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLndkUHJvYykge1xyXG4gICAgICAgICAgICB0aGlzLndkUHJvYy5raWxsKCk7XHJcbiAgICAgICAgICAgIHRoaXMud2RQcm9jID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZS5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZVNlc3Npb24oKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy8gZGVsZXRlU2Vzc2lvbiBvbmx5IGlmIG5vIHNlc3Npb24gdGltZW91dCBiZWNhdXNlIGl0IHdpbGwgdGFrZSA1IG1pbiB0byBleGVjdXRlIG90aGVyd2lzZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5kcml2ZXIgJiYgdGhpcy5kcml2ZXIuZGVsZXRlU2Vzc2lvbiAmJiAhdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdkZWxldGVTZXNzaW9uIGVycm9yJywgZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNsb3NlQnJvd3NlcldpbmRvd3Moc3RhdHVzKSB7XHJcbiAgICAgICAgaWYgKHN0YXR1cyAmJiAnRkFJTEVEJyA9PT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkgJiYgdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZShzdGF0dXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkaXNwb3NlQ29udGludWUoc3RhdHVzKSB7XHJcbiAgICAgICAgdGhpcy5kcml2ZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBudWxsO1xyXG4gICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcclxuXHJcbiAgICAgICAgLy8gY2xlYW51cCBjaHJvbWVkcml2ZXIncyBvbmx5IHdoZW4gcnVubmluZyBmcm9tIHdpdGhpbiB0aGUgSURFIGFuZCB0ZXN0IGRpZCBub3QgZmFpbFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNlbGVuaXVtUGlkICYmICghc3RhdHVzIHx8ICdGQUlMRUQnICE9PSBzdGF0dXMudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ3Rhc2traWxsIC9JTSBjaHJvbWVkcml2ZXIuZXhlIC9GJywgeyBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ2lnbm9yZSddIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGdyZXBSZXN1bHQgPSBleGVjU3luYyhcInBncmVwIC1kJyAnIGNocm9tZWRyaXZlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGdyZXBSZXN1bHQgJiYgcGdyZXBSZXN1bHQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGdyZXBSZXN1bHQgPSBwZ3JlcFJlc3VsdC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGdyZXBSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKCdraWxsIC05ICcgKyBwZ3JlcFJlc3VsdCwgeyBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ2lnbm9yZSddIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNsZWFudXAgZWRnZWRyaXZlcidzIG9ubHkgd2hlbiBydW5uaW5nIGZyb20gd2l0aGluIHRoZSBJREUgYW5kIHRlc3QgZGlkIG5vdCBmYWlsXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2VsZW5pdW1QaWQgJiYgKCFzdGF0dXMgfHwgJ0ZBSUxFRCcgIT09IHN0YXR1cy50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZm9yIG5vd1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcGdyZXBSZXN1bHQgPSBleGVjU3luYyhcInBncmVwIC1kJyAnIG1zZWRnZWRyaXZlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGdyZXBSZXN1bHQgJiYgcGdyZXBSZXN1bHQudG9TdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGdyZXBSZXN1bHQgPSBwZ3JlcFJlc3VsdC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGdyZXBSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNTeW5jKCdraWxsIC05ICcgKyBwZ3JlcFJlc3VsdCwgeyBzdGRpbzogWydpZ25vcmUnLCAnaWdub3JlJywgJ2lnbm9yZSddIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlLnJlc29sdmUobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2l0ZXJhdGlvblN0YXJ0KCkge1xyXG4gICAgICAgIC8vIGNsZWFyIHRyYW5zYWN0aW9uIG5hbWUgc2F2ZWQgaW4gcHJldmlvdXMgaXRlcmF0aW9uIGlmIGFueVxyXG4gICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2l0ZXJhdGlvbkVuZChlcnJvcikge1xyXG4gICAgICAgIGlmIChlcnJvciAmJiBlcnJvci50eXBlID09PSBlcnJvckhlbHBlci5lcnJvckNvZGUuU0VMRU5JVU1fU0VTU0lPTl9USU1FT1VUKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IHRydWU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZW5pdW1TZXNzaW9uVGltZW91dCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbGxlY3QgYnJvd3NlciBsb2dzIGZvciB0aGlzIHNlc3Npb25cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmNvbGxlY3RCcm93c2VyTG9ncyA9PT0gdHJ1ZSAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsb2dzID0gYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvZ3MgJiYgQXJyYXkuaXNBcnJheShsb2dzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGxvZyBvZiBsb2dzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnMubG9ncy5wdXNoKHRoaXMuX2FkanVzdEJyb3dzZXJMb2cobG9nKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3JzXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBzaG91bGQgY2xlYXIgdHJhbnNhY3Rpb25zIHRvIGF2b2lkIGR1cGxpY2F0ZSBuYW1lcyBhY3Jvc3MgaXRlcmF0aW9uc1xyXG4gICAgICAgIC8vIGFsc28gc2hvdWxkIHRocm93IG9uIGR1cGxpY2F0ZSBuYW1lcy5cclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJlY29yZEhBUiAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgIC8vIHRoZXJlIG1pZ2h0IGJlIG5vIHRyYW5zYWN0aW9ucyBzZXQgaWYgdGVzdCBmYWlscyBiZWZvcmUgd2ViLnRyYW5zYWN0aW9uIGNvbW1hbmRcclxuICAgICAgICAgICAgaWYgKGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbnNbZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lXSA9IGF3YWl0IHRoaXMuX2dldEhBUigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJzLmhhciA9IHRoaXMudHJhbnNhY3Rpb25zO1xyXG4gICAgICAgIGNvbnN0IGhhc0ZhaWxlZCA9IGVycm9yICE9PSB1bmRlZmluZWQgJiYgZXJyb3IgIT09IG51bGw7XHJcbiAgICAgICAgdGhpcy5fYWRkU2VsZW5vaWRWaWRlb0FzVGVzdEF0dGFjaG1lbnQoaGFzRmFpbGVkKTtcclxuICAgIH1cclxuXHJcbiAgICBfaXNBY3Rpb24obmFtZSkge1xyXG4gICAgICAgIHJldHVybiBBQ1RJT05fQ09NTUFORFMuaW5jbHVkZXMobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Rha2VTY3JlZW5zaG90U2lsZW50KG5hbWUpIHtcclxuICAgICAgICBpZiAoIU5PX1NDUkVFTlNIT1RfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIudGFrZVNjcmVlbnNob3RcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXR2YWw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FsbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhaXRVbnRpbFJldFZhbCA9IHRoaXMuZHJpdmVyLndhaXRVbnRpbChhc3luYygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGFsbCAoc2NyZWVuc2hvdCBhbmQgdGl0bGUpIGltYWdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFdpbmRvd0hhbmRsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXMpICYmIGhhbmRsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaGFuZGxlIG9mIGhhbmRsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc3dpdGNoVG9XaW5kb3coaGFuZGxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2UgPSBhd2FpdCB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldFRpdGxlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFRvSW1hZ2UgPSByZXF1aXJlKCcuLi9saWIvdGV4dC10by1pbWFnZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZUltYWdlID0gYXdhaXQgdGV4dFRvSW1hZ2UuZ2VuZXJhdGUodGl0bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZUltYWdlICYmIHR5cGVvZiB0aXRsZUltYWdlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZUltYWdlID0gdGl0bGVJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaCh0aXRsZUltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQ2FudmFzIG9wZXJhdGlvbiBmYWlsZWQuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIElnbm9yZSBjYW52YXMtcmVsYXRlZCBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZXMucHVzaChpbWFnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1lcmdlIGFsbCBpbWFnZXMgaW50byBvbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZEltYWdlID0gYXdhaXQgbWVyZ2VJbWFnZXMoaW1hZ2VzLCB7IGRpcmVjdGlvbjogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZWRJbWFnZSAmJiB0eXBlb2YgbWVyZ2VkSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gbWVyZ2VkSW1hZ2UucmVwbGFjZSgnZGF0YTppbWFnZS9qcGVnO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0aW1lb3V0OiAzMCoxMDAwIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FpdFVudGlsUmV0VmFsICYmIHdhaXRVbnRpbFJldFZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRVbnRpbFJldFZhbC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChldykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgKDEpJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgKDIpJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCAoMyknLCBlKTtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNjcmVlbnNob3QgaW5uZXIgZXJyb3InLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfYWRqdXN0QnJvd3NlckxvZyhsb2cpIHtcclxuICAgICAgICBpZiAoIWxvZyB8fCB0eXBlb2YgbG9nICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETzogY29udmVydCBsb2cudGltZXN0YW1wIGZyb20gdGhlIGJyb3dzZXIgdGltZSB6b25lIHRvIHRoZSBsb2NhbCBvbmUgKHNvIHdlIGNhbiBsYXRlciBjb3JyZWxhdGUgYmV0d2VlbiBzdGVwcyBhbmQgbG9ncylcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0aW1lOiBsb2cudGltZXN0YW1wLFxyXG4gICAgICAgICAgICBtc2c6IGxvZy5tZXNzYWdlLFxyXG4gICAgICAgICAgICAvLyBjb252ZXJ0IFNFVkVSRSBsb2cgbGV2ZWwgdG8gRVJST1JcclxuICAgICAgICAgICAgbGV2ZWw6IGxvZy5sZXZlbCA9PT0gJ1NFVkVSRScgPyAnRVJST1InIDogbG9nLmxldmVsLFxyXG4gICAgICAgICAgICBzcmM6ICdicm93c2VyJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIEZJWE1FOiBUaGVyZSBpcyBhIGJ1ZyB3aXRoIElFLiBTZWUgdGhlIGNvbW1lbnQgd2l0aGluIGZ1bmN0aW9uIGJvZHkuXHJcbiAgICAgKlxyXG4gICAgICogIGRvbUNvbnRlbnRMb2FkZWQgKGFrYSBGaXJzdCBWaXN1YWwgVGltZSktIFJlcHJlc2VudHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCBhbmQgbmF2aWdhdGlvblN0YXJ0LlxyXG4gICAgICogIGxvYWQgKGFrYSBGdWxsIExvYWQgVGltZSkgICAgICAgICAgICAgICAtIFJlcHJlc2VudHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsb2FkRXZlbnRTdGFydCBhbmQgbmF2aWdhdGlvblN0YXJ0LlxyXG4gICAgICpcclxuICAgICAqIFRoZSBwcm9jZXNzaW5nIG1vZGVsOlxyXG4gICAgICpcclxuICAgICAqICAxLiBuYXZpZ2F0aW9uU3RhcnQgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgaGFzIHJlcXVlc3RlZCB0aGUgZG9jdW1lbnQuXHJcbiAgICAgKiAgMi4gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAtIE5vdCByZWxldmFudCB0byB1cy4gU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL25hdmlnYXRpb24tdGltaW5nLyNwcm9jZXNzIGZvciBtb3JlIGluZm9ybWF0aW9uLlxyXG4gICAgICogIDMuIGRvbUxvYWRpbmcgICAgICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBzdGFydHMgcGFyc2luZyB0aGUgZG9jdW1lbnQuXHJcbiAgICAgKiAgNC4gZG9tSW50ZXJhY3RpdmUgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIGhhcyBmaW5pc2hlZCBwYXJzaW5nIHRoZSBkb2N1bWVudCBhbmQgdGhlIHVzZXIgY2FuIGludGVyYWN0IHdpdGggdGhlIHBhZ2UuXHJcbiAgICAgKiAgNS4gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgICAtIFRoZSBkb2N1bWVudCBoYXMgYmVlbiBjb21wbGV0ZWx5IGxvYWRlZCBhbmQgcGFyc2VkIGFuZCBkZWZlcnJlZCBzY3JpcHRzLCBpZiBhbnksIGhhdmUgZXhlY3V0ZWQuIFxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3luYyBzY3JpcHRzLCBpZiBhbnksIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGV4ZWN1dGVkLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHlsZXNoZWV0c1sxXSwgaW1hZ2VzLCBhbmQgc3ViZnJhbWVzIG1pZ2h0IG9yIG1pZ2h0IG5vdCBoYXZlIGZpbmlzaGVkIGxvYWRpbmcuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdIC0gU3R5bGVzaGVldHMgL3VzdWFsbHkvIGRlZmVyIHRoaXMgZXZlbnQhIC0gaHR0cDovL21vbGlseS5kZS93ZWJsb2cvZG9tY29udGVudGxvYWRlZFxyXG4gICAgICogIDYuIGRvbUNvbnRlbnRMb2FkZWRFdmVudEVuZCAgICAgLSBUaGUgRE9NQ29udGVudExvYWRlZCBldmVudCBjYWxsYmFjaywgaWYgYW55LCBmaW5pc2hlZCBleGVjdXRpbmcuIEUuZy5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRPTSBmdWxseSBsb2FkZWQgYW5kIHBhcnNlZFwiKTtcclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAqICA3LiBkb21Db21wbGV0ZSAgICAgICAgICAgICAgICAgIC0gVGhlIERPTSB0cmVlIGlzIGNvbXBsZXRlbHkgYnVpbHQuIEFzeW5jIHNjcmlwdHMsIGlmIGFueSwgaGF2ZSBleGVjdXRlZC5cclxuICAgICAqICA4LiBsb2FkRXZlbnRTdGFydCAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nIGFsbCB0aGUgcmVzb3VyY2VzIGxpa2UgaW1hZ2VzLCBzd2YsIGV0Yy5cclxuICAgICAqICA5LiBsb2FkRXZlbnRFbmQgICAgICAgICAgICAgICAgIC0gVGhlIGxvYWQgZXZlbnQgY2FsbGJhY2ssIGlmIGFueSwgZmluaXNoZWQgZXhlY3V0aW5nLlxyXG4gICAgICovXHJcbiAgICBfZ2V0U3RhdHMoY29tbWFuZE5hbWUpIHtcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmZldGNoU3RhdHMgJiYgdGhpcy5pc0luaXRpYWxpemVkICYmIHRoaXMuX2lzQWN0aW9uKGNvbW1hbmROYW1lKSkge1xyXG4gICAgICAgICAgICB2YXIgbmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICB2YXIgZG9tQ29udGVudExvYWRlZCA9IDA7XHJcbiAgICAgICAgICAgIHZhciBsb2FkID0gMDtcclxuICAgICAgICAgICAgdmFyIHNhbWVQYWdlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgZm9sbG93aW5nIHNpdHVhdGlvbjpcclxuICAgICAgICAgICAgLy8gaWYgbmF2aWdhdGVTdGFydCBlcXVhbHMgdG8gdGhlIG9uZSB3ZSBnb3QgZnJvbSBwcmV2aW91cyBhdHRlbXB0ICh3ZSBuZWVkIHRvIHNhdmUgaXQpXHJcbiAgICAgICAgICAgIC8vIGl0IG1lYW5zIHdlIGFyZSBzdGlsbCBvbiB0aGUgc2FtZSBwYWdlIGFuZCBkb24ndCBuZWVkIHRvIHJlY29yZCBsb2FkL2RvbUNvbnRlbnRMb2FkZWQgdGltZXNcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmNhbGwoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsYXN0RXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFVudGlsUmV0VmFsID0gdGhpcy5kcml2ZXIud2FpdFVudGlsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmdsb2JhbCB3aW5kb3cqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1pbmdzID0gYXdhaXQgdGhpcy5kcml2ZXIuZXhlY3V0ZShmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25TdGFydDogd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydDogd2luZG93LnBlcmZvcm1hbmNlLnRpbWluZy5kb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRFdmVudFN0YXJ0OiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLmxvYWRFdmVudFN0YXJ0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aW1pbmdzLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0ID4gMCAmJiB0aW1pbmdzLmxvYWRFdmVudFN0YXJ0ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW1lUGFnZSA9IHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgJiYgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9PSB0aW1pbmdzLm5hdmlnYXRpb25TdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvblN0YXJ0ID0gdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IHRpbWluZ3MubmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPSB0aW1pbmdzLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZEV2ZW50U3RhcnQgPSB0aW1pbmdzLmxvYWRFdmVudFN0YXJ0O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tQ29udGVudExvYWRlZCA9IGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IC0gbmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkID0gbG9hZEV2ZW50U3RhcnQgLSBuYXZpZ2F0aW9uU3RhcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPiAwICYmIGxvYWRFdmVudFN0YXJ0ID4gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXhlY3V0ZUVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sbGVjdCBlcnJvciBpbnNpZGUgZHJpdmVyLmV4ZWN1dGUgb3IgZHJpdmVyLndhaXRVbnRpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFcnJvciA9IGV4ZWN1dGVFcnJvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyB0aW1lb3V0OiAzMCoxMDAwIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhaXRVbnRpbFJldFZhbCAmJiB3YWl0VW50aWxSZXRWYWwudGhlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFVudGlsUmV0VmFsLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnQgZXJyb3IgZnJvbSBkcml2ZXIuZXhlY3V0ZSBvciBkcml2ZXIud2FpdFVudGlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByaW50IGVycm9yIGZyb20gZHJpdmVyLmV4ZWN1dGUgb3IgZHJpdmVyLndhaXRVbnRpbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhsYXN0RXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICAgICAgICAgICAgLy8gY291bGRuJ3QgZ2V0IHRpbWluZ3MuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubGFzdE5hdmlnYXRpb25TdGFydFRpbWUgPSBuYXZpZ2F0aW9uU3RhcnQ7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc2FtZVBhZ2UgPyB7fSA6IHsgRG9tQ29udGVudExvYWRlZEV2ZW50OiBkb21Db250ZW50TG9hZGVkLCBMb2FkRXZlbnQ6IGxvYWQgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IE9wZW5zIG5ldyB0cmFuc2FjdGlvbi5cclxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgdHJhbnNhY3Rpb24gd2lsbCBwZXJzaXN0IHRpbGwgYSBuZXcgb25lIGlzIG9wZW5lZC4gVHJhbnNhY3Rpb24gbmFtZXMgbXVzdCBiZSB1bmlxdWUuXHJcbiAgICAgKiBAZnVuY3Rpb24gdHJhbnNhY3Rpb25cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIC0gVGhlIHRyYW5zYWN0aW9uIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHRyYW5zYWN0aW9uKG5hbWUpIHtcclxuICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBqdXN0IGluIGNhc2UgdXNlciBwYXNzZWQgYSBjb21wbGV4IG9iamVjdCBieSBtaXN0YWtlXHJcbiAgICAgICAgbmFtZSA9IG5hbWUudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgLy8gbGltaXQgdGhlIG5hbWUgbGVuZ3RoIChzaW5jZSB3ZSBjYW4ndCBzdG9yZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gNTEyQiBpbiB0aGUgZGF0YWJhc2UpXHJcbiAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgNTEyKTtcclxuXHJcbiAgICAgICAgaWYgKGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uc1tnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWVdID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuaXNJbml0aWFsaXplZCAmJiB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPT09ICdjaHJvbWUnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uc1tnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWVdID0gYXdhaXQgdGhpcy5fZ2V0SEFSKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy50cmFuc2FjdGlvbnNbbmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ZXIgPSBPYmplY3Qua2V5cyh0aGlzLnRyYW5zYWN0aW9ucykuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnN0YXJ0c1dpdGgobmFtZSkpLmxlbmd0aCArIDE7XHJcbiAgICAgICAgICAgIGdsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZSA9IG5hbWUrJyAoIycrY291bnRlcisnKSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2xvYWRIZWxwZXJGdW5jdGlvbnMoKSB7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldFdkaW9Mb2NhdG9yID0gbW9kVXRpbHMuZ2V0V2Rpb0xvY2F0b3I7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLm1hdGNoUGF0dGVybiA9IG1vZFV0aWxzLm1hdGNoUGF0dGVybjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudCA9IG1vZFV0aWxzLmdldEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0RWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmdldENoaWxkRWxlbWVudCA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50cyA9IG1vZFV0aWxzLmdldENoaWxkRWxlbWVudHM7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLnNldFRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnNldFRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdCA9IG1vZFV0aWxzLnJlc3RvcmVUaW1lb3V0SW1wbGljaXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50ID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmcgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZTtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRCb29sID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudFRpbWVvdXQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudFRpbWVvdXQ7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50U3RyaW5nID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRTdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2dldEhBUigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldExvZ1R5cGVzKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZXMuaW5jbHVkZXMoJ3BlcmZvcm1hbmNlJykpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRMb2dzKCdwZXJmb3JtYW5jZScpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGluIG9uZSBpbnN0YW5jZSwgbG9ncyB3YXMgbm90IGl0ZXJhYmxlIGZvciBzb21lIHJlYXNvbiAtIGhlbmNlIHRoZSBmb2xsb3dpbmcgY2hlY2s6XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxvZ3MgfHwgdHlwZW9mIGxvZ3NbU3ltYm9sLml0ZXJhdG9yXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdnZXRIQVI6IGxvZ3Mgbm90IGl0ZXJhYmxlOiAnICsgSlNPTi5zdHJpbmdpZnkobG9ncykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbG9nIG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2dPYmogPSBKU09OLnBhcnNlKGxvZy5tZXNzYWdlKTsgICAvLyByZXR1cm5lZCBhcyBzdHJpbmdcclxuICAgICAgICAgICAgICAgICAgICBldmVudHMucHVzaChtc2dPYmoubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaGFyID0gaGFyRnJvbU1lc3NhZ2VzKGV2ZW50cyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaGFyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGZldGNoIEhBUjogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja1dhaXRGb3JBbmd1bGFyKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9XYWl0Rm9yQW5ndWxhcikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JBbmd1bGFyKHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyUm9vdFNlbGVjdG9yLCB0aGlzLmF1dG9XYWl0Rm9yQW5ndWxhclNvZnRXYWl0LCB0aGlzLmF1dG9XYWl0Rm9yQW5ndWxhclRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2VuZFJlc3VsdFN0YXR1c1RvTGFtYmRhVGVzdChzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBsYW1iZGFDcmVkZW50aWFscyA9IHtcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB0aGlzLndkaW9PcHRzLnVzZXIsXHJcbiAgICAgICAgICAgICAgICBhY2Nlc3NLZXk6IHRoaXMud2Rpb09wdHMua2V5XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgY29uc3QgbGFtYmRhQXV0b21hdGlvbkNsaWVudCA9IGxhbWJkYVJlc3RDbGllbnQuQXV0b21hdGlvbkNsaWVudChcclxuICAgICAgICAgICAgICAgIGxhbWJkYUNyZWRlbnRpYWxzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzX2luZDogc3RhdHVzID09PSAnUEFTU0VEJyA/ICdwYXNzZWQnIDogJ2ZhaWxlZCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGxhbWJkYUF1dG9tYXRpb25DbGllbnQudXBkYXRlU2Vzc2lvbkJ5SWQoc2Vzc2lvbklkLCByZXF1ZXN0Qm9keSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIExhbWJkYVRlc3Q6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3NlbmRSZXN1bHRTdGF0dXNUb1Rlc3RpbmdCb3Qoc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICBjb25zdCB0YiA9IG5ldyBUZXN0aW5nQm90KHtcclxuICAgICAgICAgICAgICAgIGFwaV9rZXk6IHRoaXMud2Rpb09wdHMudXNlcixcclxuICAgICAgICAgICAgICAgIGFwaV9zZWNyZXQ6IHRoaXMud2Rpb09wdHMua2V5XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB0ZXN0RGF0YSA9IHsgXCJ0ZXN0W3N1Y2Nlc3NdXCIgOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gXCIxXCIgOiBcIjBcIiB9O1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGIudXBkYXRlVGVzdCh0ZXN0RGF0YSwgc2Vzc2lvbklkLCBmdW5jdGlvbihlcnJvciwgdGVzdERldGFpbHMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gVGVzdGluZ0JvdDogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2VuZFJlc3VsdFN0YXR1c1RvQnJvd3NlcnN0YWNrKHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0ge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJ1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHVybDogYGh0dHBzOi8vYXBpLmJyb3dzZXJzdGFjay5jb20vYXV0b21hdGUvc2Vzc2lvbnMvJHt0aGlzLmRyaXZlci5zZXNzaW9uSWR9Lmpzb25gLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUFVUJyxcclxuICAgICAgICAgICAgICAgIGpzb246IHRydWUsXHJcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYm9keTogcmVxdWVzdEJvZHksXHJcbiAgICAgICAgICAgICAgICAnYXV0aCc6IHtcclxuICAgICAgICAgICAgICAgICAgICAndXNlcic6IHRoaXMud2Rpb09wdHMudXNlcixcclxuICAgICAgICAgICAgICAgICAgICAncGFzcyc6IHRoaXMud2Rpb09wdHMua2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICdzZW5kSW1tZWRpYXRlbHknOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0KG9wdGlvbnMsIChlcnIsIHJlcywgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBCcm93c2Vyc3RhY2s6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2lzU2VsZW5vaWRIdWIoc2VsZW5pdW1VcmwpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgdXJsOiBgJHtzZWxlbml1bVVybH1gLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIGpzb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0KG9wdGlvbnMsIChlcnIsIHJlcywgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keSAmJiBib2R5Lmxlbmd0aCAmJiBib2R5LmluZGV4T2YoJ1lvdSBhcmUgdXNpbmcgU2VsZW5vaWQnKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gQnJvd3NlcnN0YWNrOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIHRoZSB0ZXN0IGlzIHJ1bm5pbmcgaW5zaWRlIFNlbGVub2lkLCB0aGVuIGRvd25sb2FkIHRoZSB2aWRlbyBpZiB0ZXN0IGhhcyBmYWlsZWRcclxuICAgIGFzeW5jIF9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudChoYXNGYWlsZWQgPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc1J1bm5pbmdPblNlbGVub2lkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMucmVjb3JkVmlkZW8gJiYgIWhhc0ZhaWxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHZpZGVvRmlsZVVybCA9IGAke3RoaXMuc2VsZW5pdW1VcmxCYXNlfS92aWRlby8ke3RoaXMuc2Vzc2lvbklkfS5tcDRgO1xyXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7dGhpcy5zZXNzaW9uSWR9Lm1wNGA7XHJcbiAgICAgICAgdGhpcy5ycy5hdHRhY2htZW50cy5wdXNoKG1vZFV0aWxzLm5ld1ZpZGVvQXR0YWNobWVudChmaWxlTmFtZSwgdmlkZW9GaWxlVXJsKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFlBQVk7O0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQUFBLE1BQUEsQ0FBQUMsY0FBQSxDQUFBQyxPQUFBO0VBQUFDLEtBQUE7QUFBQTtBQUFBRCxPQUFBLENBQUFFLE9BQUE7QUFBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLElBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLElBQUEsR0FBQUMsdUJBQUEsQ0FBQUwsT0FBQTtBQUNBLElBQUFNLGdCQUFBLEdBQUFILHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBTyxLQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxNQUFBLEdBQUFMLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBUyxPQUFBLEdBQUFOLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBVSxZQUFBLEdBQUFQLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFB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
|
|
920
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsImRlZmF1bHQiLCJyZXF1aXJlIiwiX2Nocm9tZUhhciIsIl91cmwiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0Iiwid2RpbyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX1dlYkRyaXZlck1vZHVsZSIsIl93aGVuIiwiX3V0aWxzIiwiX2hlbHBlciIsIl9PeHlnZW5FcnJvciIsIl91dGlsIiwiX3NhdWNlbGFicyIsIl9ub2RlUmVzdENsaWVudCIsIl90ZXN0aW5nYm90QXBpIiwiX2NoaWxkX3Byb2Nlc3MiLCJfcGVyZmVjdG9SZXBvcnRpbmciLCJfcmVxdWVzdCIsIl9pbWdNZXJnZSIsIl9hdXRvU3RhcnQiLCJfc2FuaXRpemVIdG1sIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiTU9EVUxFX05BTUUiLCJERUZBVUxUX1NFTEVOSVVNX1VSTCIsIkRFRkFVTFRfQlJPV1NFUl9OQU1FIiwiREVGQVVMVF9NT0JJTEVfQlJPV1NFUiIsIk5PX1NDUkVFTlNIT1RfQ09NTUFORFMiLCJOT19TTkFQU0hPVF9DT01NQU5EUyIsIkFDVElPTl9DT01NQU5EUyIsIkRFRkFVTFRfV0FJVF9USU1FT1VUIiwiU0FOSVRJWkVfSFRNTF9PUFRTIiwiYWxsb3dlZFRhZ3MiLCJhbGxvd2VkQXR0cmlidXRlcyIsImFsbG93ZWRDbGFzc2VzIiwidW5kZWZpbmVkIiwiYWxsb3dlZFN0eWxlcyIsIldlYk1vZHVsZSIsIldlYkRyaXZlck1vZHVsZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNvbnRleHQiLCJycyIsImxvZ2dlciIsIm1vZHVsZXMiLCJzZXJ2aWNlcyIsInRyYW5zYWN0aW9ucyIsImxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lIiwiaGVscGVycyIsIl9sb2FkSGVscGVyRnVuY3Rpb25zIiwiT3hFcnJvciIsImVyckhlbHBlciIsIndhaXRGb3JUaW1lb3V0Iiwid2RQcm9jIiwibmFtZSIsImdldERyaXZlciIsImdldENhcGFiaWxpdGllcyIsImNhcHMiLCJpbml0Iiwic2VsZW5pdW1VcmwiLCJpc0luaXRpYWxpemVkIiwiY3R4IiwiYXV0b1N0YXJ0V2ViRHJpdmVyIiwiYXBwaXVtVXJsIiwic3RhcnRzV2l0aCIsInJlbW90ZVVybCIsInByb2MiLCJkZWZhdWx0QnJvd3NlciIsImJyb3dzZXJOYW1lIiwiZXJyb3JDb2RlIiwiSU5WQUxJRF9DQVBBQklMSVRJRVMiLCJ0b0xvd2VyQ2FzZSIsInJlY29yZEhBUiIsImJyb3dzZXIiLCJwZXJmb3JtYW5jZSIsInVybCIsIlVSTCIsInBhcnNlIiwicHJvdG9jb2wiLCJyZXBsYWNlIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInBhcnNlSW50IiwicGF0aCIsInBhdGhuYW1lIiwiYXV0aCIsInNwbGl0Iiwid2Rpb09wdHMiLCJ1c2VyIiwia2V5Iiwic2VsZW5pdW1VcmxCYXNlIiwiaXNSdW5uaW5nT25TZWxlbm9pZCIsIl9pc1NlbGVub2lkSHViIiwiZW5hYmxlVmlkZW8iLCJ2aWRlb0ZyYW1lUmF0ZSIsImNhcGFiaWxpdGllcyIsImxvZ0xldmVsIiwicnVubmVyIiwid2FpdGZvclRpbWVvdXQiLCJjb25uZWN0aW9uUmV0cnlUaW1lb3V0IiwiY29ubmVjdGlvblJldHJ5Q291bnQiLCJpbml0RXJyb3IiLCJfdGhpcyIsInByb3ZpZGVyIiwibW9kVXRpbHMiLCJkZXRlcm1pbmVQcm92aWRlciIsImVucmljaFByb3ZpZGVyV2Rpb09wdGlvbnMiLCJkcml2ZXIiLCJyZW1vdGUiLCJzZXNzaW9uSWQiLCJzZWxlbml1bUJyb3dzZXJUaW1lb3V0Iiwic2VsZW5pdW1UaW1lb3V0IiwiUEVSRkVDVE8iLCJwZXJmZWN0b0V4ZWN1dGlvbkNvbnRleHQiLCJwZXJmZWN0b1JlcG9ydGluZyIsIlBlcmZlY3RvIiwiUGVyZmVjdG9FeGVjdXRpb25Db250ZXh0Iiwid2ViZHJpdmVyIiwiZXhlY3V0ZVNjcmlwdCIsImNvbW1hbmQiLCJwYXJhbXMiLCJleGVjdXRlIiwicmVwb3J0aW5nQ2xpZW50IiwiUGVyZmVjdG9SZXBvcnRpbmdDbGllbnQiLCJ0ZXN0U3RhcnQiLCJnZXRTZWxlbml1bUluaXRFcnJvciIsImNvbGxlY3RCcm93c2VyTG9ncyIsImdldEJyb3dzZXJMb2dzIiwiZXJyb3IiLCJMQU1CREFURVNUIiwiQlJPV1NFUlNUQUNLIiwiaW5jbHVkZXMiLCJtYXhpbWl6ZVdpbmRvdyIsInNldFRpbWVvdXQiLCJlcnIiLCJVTktOT1dOX0VSUk9SIiwibWVzc2FnZSIsInV0aWwiLCJpbnNwZWN0Iiwib3ZlcndyaXRlV2Rpb0NvbW1hbmRzIiwiZGlzcG9zZSIsInN0YXR1cyIsIl93aGVuV2ViTW9kdWxlRGlzcG9zZSIsImRlZmVyIiwic3RlcHMiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJmYWlsZWRGaW5kZWQiLCJmaW5kIiwiaXRlbSIsInRvVXBwZXJDYXNlIiwiU0FVQ0VMQUJTIiwidXNlcm5hbWUiLCJhY2Nlc3NLZXkiLCJwYXNzZWQiLCJpZCIsImJvZHkiLCJteUFjY291bnQiLCJTYXVjZUxhYnMiLCJ1cGRhdGVKb2IiLCJzdG9wSm9iIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0xhbWJkYVRlc3QiLCJkZWxldGVTZXNzaW9uIiwiVEVTVElOR0JPVCIsIl9zZW5kUmVzdWx0U3RhdHVzVG9UZXN0aW5nQm90IiwidGVzdFN0b3AiLCJDb25zdGFudHMiLCJyZXN1bHRzIiwiZmFpbGVkIiwiX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayIsImNsb3NlQnJvd3NlcldpbmRvd3MiLCJkaXNwb3NlQ29udGludWUiLCJ3YXJuIiwia2lsbCIsInByb21pc2UiLCJzZWxlbml1bVNlc3Npb25UaW1lb3V0Iiwic2VsZW5pdW1QaWQiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJleGVjU3luYyIsInN0ZGlvIiwicGdyZXBSZXN1bHQiLCJ0b1N0cmluZyIsInJlc29sdmUiLCJfaXRlcmF0aW9uU3RhcnQiLCJnbG9iYWwiLCJfbGFzdFRyYW5zYWN0aW9uTmFtZSIsIl9pdGVyYXRpb25FbmQiLCJ0eXBlIiwiZXJyb3JIZWxwZXIiLCJTRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQiLCJsb2dzIiwibG9nIiwicHVzaCIsIl9hZGp1c3RCcm93c2VyTG9nIiwiX2dldEhBUiIsImhhciIsImhhc0ZhaWxlZCIsIl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudCIsIl9pc0FjdGlvbiIsIl90YWtlU2NyZWVuc2hvdFNpbGVudCIsInRha2VTY3JlZW5zaG90IiwicmV0dmFsIiwiUHJvbWlzZSIsInJlamVjdCIsIndhaXRVbnRpbFJldFZhbCIsIndhaXRVbnRpbCIsImltYWdlcyIsImhhbmRsZXMiLCJnZXRXaW5kb3dIYW5kbGVzIiwiaGFuZGxlIiwic3dpdGNoVG9XaW5kb3ciLCJpbWFnZSIsInRpdGxlIiwiZ2V0VGl0bGUiLCJ0ZXh0VG9JbWFnZSIsInRpdGxlSW1hZ2UiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJtZXJnZWRJbWFnZSIsIm1lcmdlSW1hZ2VzIiwiZGlyZWN0aW9uIiwidGltZW91dCIsInRoZW4iLCJjYXRjaCIsImV3IiwiX3Rha2VTbmFwc2hvdFNpbGVudCIsImdldFBhZ2VTb3VyY2UiLCJyZXN1bHQiLCJzYW5pdGl6ZUh0bWwiLCJ0aW1lIiwidGltZXN0YW1wIiwibXNnIiwibGV2ZWwiLCJzcmMiLCJfZ2V0U3RhdHMiLCJjb21tYW5kTmFtZSIsImZldGNoU3RhdHMiLCJuYXZpZ2F0aW9uU3RhcnQiLCJkb21Db250ZW50TG9hZGVkIiwibG9hZCIsInNhbWVQYWdlIiwibGFzdEVycm9yIiwidGltaW5ncyIsIndpbmRvdyIsInRpbWluZyIsImRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IiwibG9hZEV2ZW50U3RhcnQiLCJleGVjdXRlRXJyb3IiLCJEb21Db250ZW50TG9hZGVkRXZlbnQiLCJMb2FkRXZlbnQiLCJ0cmFuc2FjdGlvbiIsInNsaWNlIiwiY291bnRlciIsImtleXMiLCJmaWx0ZXIiLCJnZXRXZGlvTG9jYXRvciIsIm1hdGNoUGF0dGVybiIsImdldEVsZW1lbnQiLCJnZXRFbGVtZW50cyIsImdldENoaWxkRWxlbWVudCIsImdldENoaWxkRWxlbWVudHMiLCJzZXRUaW1lb3V0SW1wbGljaXQiLCJyZXN0b3JlVGltZW91dEltcGxpY2l0IiwiYXNzZXJ0QXJndW1lbnQiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwiYXNzZXJ0QXJndW1lbnROdW1iZXIiLCJhc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlIiwiYXNzZXJ0QXJndW1lbnRCb29sIiwiYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWwiLCJhc3NlcnRBcmd1bWVudFRpbWVvdXQiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsInR5cGVzIiwiZ2V0TG9nVHlwZXMiLCJnZXRMb2dzIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnRzIiwibXNnT2JqIiwiaGFyRnJvbU1lc3NhZ2VzIiwiY2hlY2tXYWl0Rm9yQW5ndWxhciIsImF1dG9XYWl0Rm9yQW5ndWxhciIsIndhaXRGb3JBbmd1bGFyIiwiYXV0b1dhaXRGb3JBbmd1bGFyUm9vdFNlbGVjdG9yIiwiYXV0b1dhaXRGb3JBbmd1bGFyU29mdFdhaXQiLCJhdXRvV2FpdEZvckFuZ3VsYXJUaW1lb3V0IiwibGFtYmRhQ3JlZGVudGlhbHMiLCJsYW1iZGFBdXRvbWF0aW9uQ2xpZW50IiwibGFtYmRhUmVzdENsaWVudCIsIkF1dG9tYXRpb25DbGllbnQiLCJyZXF1ZXN0Qm9keSIsInN0YXR1c19pbmQiLCJ1cGRhdGVTZXNzaW9uQnlJZCIsInRiIiwiVGVzdGluZ0JvdCIsImFwaV9rZXkiLCJhcGlfc2VjcmV0IiwidGVzdERhdGEiLCJ1cGRhdGVUZXN0IiwidGVzdERldGFpbHMiLCJtZXRob2QiLCJqc29uIiwicmVqZWN0VW5hdXRob3JpemVkIiwicmVxdWVzdCIsInJlcyIsImluZGV4T2YiLCJyZWNvcmRWaWRlbyIsInZpZGVvRmlsZVVybCIsImZpbGVOYW1lIiwiYXR0YWNobWVudHMiLCJuZXdWaWRlb0F0dGFjaG1lbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvb3hfbW9kdWxlcy9tb2R1bGUtd2ViLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG4vKipcclxuICogQG5hbWUgd2ViXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciBicm93c2VyIGF1dG9tYXRpb24uXHJcbiAqIEBzYW1wbGUgKipOb3RlczoqKiAgXHJcbiAqICAgXHJcbiAqIENvbW1hbmRzIHdoaWNoIG9wZXJhdGUgb24gZWxlbWVudHMgc3VjaCBhcyBjbGljaywgYXNzZXJ0LCB3YWl0Rm9yLCB0eXBlLCBzZWxlY3QsIGFuZCBvdGhlcnMgd2lsbCBhdXRvbWF0aWNhbGx5IHdhaXQgZm9yIGEgcGVyaW9kIG9mIHRpbWUgZm9yIHRoZSBlbGVtZW50IHRvIGFwcGVhciBpbiBET00gYW5kIGJlY29tZSB2aXNpYmxlLiBCeSBkZWZhdWx0IHRoaXMgcGVyaW9kIGVxdWFscyB0byA2MCBzZWNvbmRzLCBidXQgY2FuIGJlIGNoYW5nZWQgdXNpbmcgdGhlIGBzZXRUaW1lb3V0YGNvbW1hbmQuXHJcbiAqICAgXHJcbiAqICoqU3RyaW5nIG1hdGNoaW5nIHBhdHRlcm5zOioqIFxyXG4gKiBcclxuICogIENvbW1hbmRzIHdoaWNoIGV4cGVjdCBhIHN0cmluZyBtYXRjaGluZyBwYXR0ZXJuIGluIHRoZWlyIGFyZ3VtZW50cywgc3VwcG9ydCBmb2xsb3dpbmcgcGF0dGVybnMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgcmVnZXg6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyByZWd1bGFyIGV4cHJlc3Npb24uXHJcbiAqICAqIGByZWdleGk6UEFUVEVSTmAgLSBNYXRjaCB1c2luZyBjYXNlLWluc2Vuc2l0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbi5cclxuICogICogYGV4YWN0OlNUUklOR2AgLSBNYXRjaCB0aGUgc3RyaW5nIHZlcmJhdGltLlxyXG4gKiAgKiBgZ2xvYjpQQVRURVJOYCAtIE1hdGNoIHVzaW5nIGNhc2UtaW5zZW5zaXRpdmUgZ2xvYiBwYXR0ZXJuLiBgP2Agd2lsbCBtYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciBleGNlcHQgbmV3IGxpbmUgXFwoXFxuXFwpLiBgKmAgd2lsbCBtYXRjaCBhbnkgc2VxdWVuY2UgXFwoMCBvciBtb3JlXFwpIG9mIGNoYXJhY3RlcnMgZXhjZXB0IG5ldyBsaW5lLiBFbXB0eSAgICAgUEFUVEVSTiB3aWxsIG1hdGNoIG9ubHkgb3RoZXIgZW1wdHkgc3RyaW5ncy5cclxuICogICogYFBBVFRFUk5gIC0gU2FtZSBhcyBnbG9iIG1hdGNoaW5nLiAgXHJcbiAqXHJcbiAqICoqTG9jYXRvcnM6KiogXHJcbiAqIFxyXG4gKiAgQ29tbWFuZHMgd2hpY2ggZXhwZWN0IGFuIGVsZW1lbnQgbG9jYXRvciBpbiB0aGVpciBhcmd1bWVudHMsIHN1cHBvcnQgZm9sbG93aW5nIGxvY2F0b3IgdHlwZXMgdW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2U6XHJcbiAqIFxyXG4gKiAgKiBgaWQ9SURgIC0gTG9jYXRlcyBlbGVtZW50IGJ5IGl0cyBJRCBhdHRyaWJ1dGUuXHJcbiAqICAqIGBjc3M9Q1NTX1NFTEVDVE9SYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhIENTUyBzZWxlY3Rvci5cclxuICogICogYGxpbms9VEVYVGAgLSBMb2NhdGVzIGxpbmsgZWxlbWVudCB3aG9zZSB2aXNpYmxlIHRleHQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbGluay1jb250YWlucz1URVhUYCAtIExvY2F0ZXMgbGluayBlbGVtZW50IHdob3NlIHZpc2libGUgdGV4dCBjb250YWlucyB0aGUgZ2l2ZW4gc3RyaW5nLlxyXG4gKiAgKiBgbmFtZT1OQU1FYCAtIExvY2F0ZXMgZWxlbWVudCBieSBpdHMgTkFNRSBhdHRyaWJ1dGUuXHJcbiAqICAqIGB0YWc9TkFNRWAgLSBMb2NhdGVzIGVsZW1lbnQgYnkgaXRzIHRhZyBuYW1lLlxyXG4gKiAgKiBgL1hQQVRIYCAtIExvY2F0ZXMgZWxlbWVudCB1c2luZyBhbiBYUGF0aCAxLjAgZXhwcmVzc2lvbi5cclxuICogICogYChYUEFUSClbXWAgLSBMb2NhdGVzIGVsZW1lbnQgdXNpbmcgYW4gWFBhdGggMS4wIGV4cHJlc3Npb24uXHJcbiAqL1xyXG5cclxuLyogZXNsaW50LWRpc2FibGUgcXVvdGVzICovXHJcbmltcG9ydCB7IGhhckZyb21NZXNzYWdlcyB9IGZyb20gJ2Nocm9tZS1oYXInO1xyXG5pbXBvcnQgVVJMIGZyb20gJ3VybCc7XHJcbmltcG9ydCAqIGFzIHdkaW8gZnJvbSAnd2ViZHJpdmVyaW8nO1xyXG5pbXBvcnQgV2ViRHJpdmVyTW9kdWxlIGZyb20gJy4uL2NvcmUvV2ViRHJpdmVyTW9kdWxlJztcclxuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICd3aGVuJztcclxuaW1wb3J0IG1vZFV0aWxzIGZyb20gJy4vdXRpbHMnO1xyXG5pbXBvcnQgZXJySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgT3hFcnJvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJztcclxuaW1wb3J0IFNhdWNlTGFicyBmcm9tICdzYXVjZWxhYnMnO1xyXG5pbXBvcnQgbGFtYmRhUmVzdENsaWVudCBmcm9tICdAbGFtYmRhdGVzdC9ub2RlLXJlc3QtY2xpZW50JztcclxuaW1wb3J0IFRlc3RpbmdCb3QgZnJvbSAndGVzdGluZ2JvdC1hcGknO1xyXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xyXG5pbXBvcnQgcGVyZmVjdG9SZXBvcnRpbmcgZnJvbSAncGVyZmVjdG8tcmVwb3J0aW5nJztcclxuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XHJcbmltcG9ydCBtZXJnZUltYWdlcyBmcm9tICcuLi9saWIvaW1nLW1lcmdlJztcclxuaW1wb3J0IGVycm9ySGVscGVyIGZyb20gJy4uL2Vycm9ycy9oZWxwZXInO1xyXG5pbXBvcnQgeyBhdXRvU3RhcnRXZWJEcml2ZXIgfSBmcm9tICcuLi9veF9tb2R1bGVzL21vZHVsZS13ZWIvd2ViZHJpdmVyL2F1dG8tc3RhcnQnO1xyXG5pbXBvcnQgc2FuaXRpemVIdG1sIGZyb20gJ3Nhbml0aXplLWh0bWwnO1xyXG5cclxuY29uc3QgTU9EVUxFX05BTUUgPSAnd2ViJztcclxuY29uc3QgREVGQVVMVF9TRUxFTklVTV9VUkwgPSAnaHR0cDovL2xvY2FsaG9zdDo0NDQ0L3dkL2h1Yic7XHJcbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9OQU1FID0gJ2Nocm9tZSc7XHJcbmNvbnN0IERFRkFVTFRfTU9CSUxFX0JST1dTRVIgPSAnZGVmYXVsdCc7XHJcbmNvbnN0IE5PX1NDUkVFTlNIT1RfQ09NTUFORFMgPSBbJ2luaXQnLCAnYXNzZXJ0QWxlcnQnLCAnZGlzcG9zZSddO1xyXG5jb25zdCBOT19TTkFQU0hPVF9DT01NQU5EUyA9IFtcclxuICAgICdpbml0JyxcclxuICAgICdhc3NlcnRBbGVydCcsXHJcbiAgICAnZGlzcG9zZScsXHJcbiAgICAndHJhbnNhY3Rpb24nLFxyXG4gICAgJ2RlbGV0ZUNvb2tpZXMnLFxyXG4gICAgJ2dldENvb2tpZXMnLFxyXG4gICAgJ2dldENzc1ZhbHVlJyxcclxuICAgICdnZXRIVE1MJyxcclxuICAgICdnZXRTb3VyY2UnLFxyXG4gICAgJ2dldFRpdGxlJyxcclxuICAgICdnZXRXaW5kb3dIYW5kbGVzJyxcclxuICAgICdnZXRXaW5kb3dTaXplJyxcclxuICAgICdnZXRYTUxQYWdlU291cmNlJyxcclxuICAgICdpc0FsZXJ0UHJlc2VudCcsXHJcbiAgICAnaXNDaGVja2VkJyxcclxuICAgICdpc0V4aXN0JyxcclxuICAgICdpc0ludGVyYWN0YWJsZScsXHJcbiAgICAnaXNTZWxlY3RlZCcsXHJcbiAgICAnaXNWaXNpYmxlJyxcclxuICAgICdtb2NrJyxcclxuICAgICdtb2NrQ2xlYXJBbGwnLFxyXG4gICAgJ21vY2tSZXN0b3JlQWxsJyxcclxuICAgICduZXdXaW5kb3cnLFxyXG4gICAgJ3NldEF1dG9XYWl0Rm9yQW5ndWxhcicsXHJcbiAgICAnc2V0VGltZW91dCcsXHJcbiAgICAndGFrZVNjcmVlbnNob3QnLFxyXG4gICAgJ3dhaXRGb3JBbmd1bGFyJyxcclxuICAgICd3YWl0Rm9yV2luZG93J1xyXG4gICAgXTtcclxuY29uc3QgQUNUSU9OX0NPTU1BTkRTID0gWydvcGVuJywgJ2NsaWNrJ107XHJcbmNvbnN0IERFRkFVTFRfV0FJVF9USU1FT1VUID0gNjAgKiAxMDAwOyAgICAgICAgICAgIC8vIGRlZmF1bHQgNjBzIHdhaXQgdGltZW91dFxyXG5cclxuY29uc3QgU0FOSVRJWkVfSFRNTF9PUFRTID0ge1xyXG4gICAgYWxsb3dlZFRhZ3M6IFtcclxuICAgICdib2R5JyxcclxuICAgICdidXR0b24nLFxyXG4gICAgJ2Zvcm0nLFxyXG4gICAgJ2ltZycsXHJcbiAgICAnaW5wdXQnLFxyXG4gICAgJ3NlbGVjdCcsXHJcbiAgICAndGV4dGFyZWEnLFxyXG4gICAgJ29wdGlvbicsXHJcbiAgICAnYWRkcmVzcycsXHJcbiAgICAnYXJ0aWNsZScsXHJcbiAgICAnYXNpZGUnLFxyXG4gICAgJ2Zvb3RlcicsXHJcbiAgICAnaGVhZGVyJyxcclxuICAgICdoMScsXHJcbiAgICAnaDInLFxyXG4gICAgJ2gzJyxcclxuICAgICdoNCcsXHJcbiAgICAnaDUnLFxyXG4gICAgJ2g2JyxcclxuICAgICdoZ3JvdXAnLFxyXG4gICAgJ21haW4nLFxyXG4gICAgJ25hdicsXHJcbiAgICAnc2VjdGlvbicsXHJcbiAgICAnYmxvY2txdW90ZScsXHJcbiAgICAnZGQnLFxyXG4gICAgJ2RpdicsXHJcbiAgICAnZGwnLFxyXG4gICAgJ2R0JyxcclxuICAgICdmaWdjYXB0aW9uJyxcclxuICAgICdmaWd1cmUnLFxyXG4gICAgJ2hyJyxcclxuICAgICdsaScsXHJcbiAgICAnbWFpbicsXHJcbiAgICAnb2wnLFxyXG4gICAgJ3AnLFxyXG4gICAgJ3ByZScsXHJcbiAgICAndWwnLFxyXG4gICAgJ2EnLFxyXG4gICAgJ2FiYnInLFxyXG4gICAgJ2InLFxyXG4gICAgJ2JkaScsXHJcbiAgICAnYmRvJyxcclxuICAgICdjaXRlJyxcclxuICAgICdjb2RlJyxcclxuICAgICdkYXRhJyxcclxuICAgICdkZm4nLFxyXG4gICAgJ2VtJyxcclxuICAgICdpJyxcclxuICAgICdrYmQnLFxyXG4gICAgJ21hcmsnLFxyXG4gICAgJ3EnLFxyXG4gICAgJ3JiJyxcclxuICAgICdycCcsXHJcbiAgICAncnQnLFxyXG4gICAgJ3J0YycsXHJcbiAgICAncnVieScsXHJcbiAgICAncycsXHJcbiAgICAnc2FtcCcsXHJcbiAgICAnc21hbGwnLFxyXG4gICAgJ3NwYW4nLFxyXG4gICAgJ3N0cm9uZycsXHJcbiAgICAnc3ViJyxcclxuICAgICdzdXAnLFxyXG4gICAgJ3RpbWUnLFxyXG4gICAgJ3UnLFxyXG4gICAgJ3ZhcicsXHJcbiAgICAnd2JyJyxcclxuICAgICdjYXB0aW9uJyxcclxuICAgICdjb2wnLFxyXG4gICAgJ2NvbGdyb3VwJyxcclxuICAgICd0YWJsZScsXHJcbiAgICAndGJvZHknLFxyXG4gICAgJ3RkJyxcclxuICAgICd0Zm9vdCcsXHJcbiAgICAndGgnLFxyXG4gICAgJ3RoZWFkJyxcclxuICAgICd0cicsXHJcbiAgICAndGl0bGUnXHJcbiAgICBdLFxyXG4gICAgYWxsb3dlZEF0dHJpYnV0ZXM6IGZhbHNlLC8qe1xyXG4gICAgJyonOiBbXHJcbiAgICAgICdpZCcsXHJcbiAgICAgICdjbGFzcycsXHJcbiAgICAgICduYW1lJyxcclxuICAgICAgJ2RhdGEtKicsXHJcbiAgICAgICdyb2xlJyxcclxuICAgICAgJ3R5cGUnLFxyXG4gICAgICAnYXJpYS0qJyxcclxuICAgICAgJ2hyZWYnLFxyXG4gICAgICAnYWx0JyxcclxuICAgICAgJ3NyYydcclxuICAgIF1cclxuICB9LCovXHJcbiAgICBhbGxvd2VkQ2xhc3NlczogdW5kZWZpbmVkLFxyXG4gICAgYWxsb3dlZFN0eWxlczogdW5kZWZpbmVkXHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJNb2R1bGUgZXh0ZW5kcyBXZWJEcml2ZXJNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgY29udGV4dCwgcnMsIGxvZ2dlciwgbW9kdWxlcywgc2VydmljZXMpIHtcclxuICAgICAgICBzdXBlcihvcHRpb25zLCBjb250ZXh0LCBycywgbG9nZ2VyLCBtb2R1bGVzLCBzZXJ2aWNlcyk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTsgICAgICAgICAgICAgICAgICAgICAgLy8gdHJhbnNhY3Rpb24tPmhhciBkaWN0aW9uYXJ5XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzID0ge307XHJcbiAgICAgICAgdGhpcy5fbG9hZEhlbHBlckZ1bmN0aW9ucygpO1xyXG4gICAgICAgIC8vIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAoc29tZSBtb2R1bGUgY29tbWFuZHMgbWlnaHQgcmVmZXIgdG8gdGhpcy5PeEVycm9yIGFuZCB0aGlzLmVyckhlbHBlcilcclxuICAgICAgICB0aGlzLk94RXJyb3IgPSBPeEVycm9yO1xyXG4gICAgICAgIHRoaXMuZXJySGVscGVyID0gZXJySGVscGVyO1xyXG4gICAgICAgIC8vIGhvbGRzIGVsZW1lbnQgb3BlcmF0aW9uIHRpbWVvdXQgdmFsdWVcclxuICAgICAgICB0aGlzLndhaXRGb3JUaW1lb3V0ID0gREVGQVVMVF9XQUlUX1RJTUVPVVQ7XHJcbiAgICAgICAgdGhpcy53ZFByb2MgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBuYW1lKCkge1xyXG4gICAgICAgIHJldHVybiBNT0RVTEVfTkFNRTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBnZXREcml2ZXJcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgV0RJTyBkcml2ZXIuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFdESU8gZHJpdmVyLlxyXG4gICAgICovXHJcbiAgICBnZXREcml2ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldERyaXZlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGZ1bmN0aW9uIGdldENhcGFiaWxpdGllc1xyXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyBjdXJyZW50bHkgZGVmaW5lZCBjYXBhYmlsaXRpZXMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IEN1cnJlbnQgY2FwYWJpbGl0aWVzIG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgZ2V0Q2FwYWJpbGl0aWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcHMgfHwgc3VwZXIuZ2V0Q2FwYWJpbGl0aWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgbmV3IFNlbGVuaXVtIHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IGNhcHMgLSBEZXNpcmVkIGNhcGFiaWxpdGllcy4gSWYgbm90IHNwZWNpZmllZCBjYXBhYmlsaXRpZXMgd2lsbCBiZSB0YWtlbiBmcm9tIHN1aXRlIGRlZmluaXRpb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHNlbGVuaXVtVXJsIC0gUmVtb3RlIHNlcnZlciBVUkwgKGRlZmF1bHQ6IGh0dHA6Ly9sb2NhbGhvc3Q6NDQ0NC93ZC9odWIpLlxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbml0KGNhcHMsIHNlbGVuaXVtVXJsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0YWtlIGNhcGFiaWxpdGllcyBlaXRoZXIgZnJvbSBpbml0IG1ldGhvZCBhcmd1bWVudCBvciBmcm9tIGNvbnRleHQgcGFyYW1ldGVycyBwYXNzZWQgaW4gdGhlIGNvbnN0cnVjdG9yXHJcbiAgICAgICAgLy8gbWVyZ2UgY2FwYWJpbGl0aWVzIGZyb20gY29udGV4dCBhbmQgZnJvbSBpbml0IGZ1bmN0aW9uIGFyZ3VtZW50LCBnaXZlIHByZWZlcmVuY2UgdG8gY29udGV4dC1wYXNzZWQgY2FwYWJpbGl0aWVzXHJcbiAgICAgICAgdGhpcy5jYXBzID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuY3R4LmNhcHMpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzID0geyAuLi50aGlzLmN0eC5jYXBzIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwcyA9IHsgLi4udGhpcy5jYXBzLCAuLi5jYXBzIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNlbGVuaXVtVXJsICYmICF0aGlzLm9wdGlvbnMuYXV0b1N0YXJ0V2ViRHJpdmVyKSB7XHJcbiAgICAgICAgICAgIC8vIGlmIGFwcGl1bVVybCBwb2ludHMgdG8gYW4gZXh0ZXJuYWwgZXhlY3V0aW9uIGdyaWQgKHN1Y2ggYXMgQlMpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXBwaXVtVXJsICYmICF0aGlzLm9wdGlvbnMuYXBwaXVtVXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly9sb2NhbGhvc3QnKSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSB0aGlzLm9wdGlvbnMuYXBwaXVtVXJsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc2VsZW5pdW1VcmwgPSB0aGlzLm9wdGlvbnMuc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgd2Ugc2hvdWxkIGluZGV0aWZ5IGFuZCBhdXRvLXN0YXJ0IGEgcmVsZXZhbnQgd2ViZHJpdmVyXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmF1dG9TdGFydFdlYkRyaXZlcikge1xyXG4gICAgICAgICAgICBjb25zdCB7IHJlbW90ZVVybCwgcHJvYyB9ID0gYXdhaXQgYXV0b1N0YXJ0V2ViRHJpdmVyKHRoaXMuY2Fwcyk7XHJcbiAgICAgICAgICAgIHNlbGVuaXVtVXJsID0gcmVtb3RlVXJsO1xyXG4gICAgICAgICAgICB0aGlzLndkUHJvYyA9IHByb2M7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBicm93c2VyTmFtZSBjYXBzIGZyb20gb3B0aW9ucy4gRklYTUU6IHdoeSBpcyB0aGlzIGV2ZW4gbmVlZGVkP1xyXG4gICAgICAgIGxldCBkZWZhdWx0QnJvd3NlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghdGhpcy5jYXBzLmJyb3dzZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9IHRoaXMub3B0aW9ucy5icm93c2VyTmFtZSB8fCBERUZBVUxUX0JST1dTRVJfTkFNRTtcclxuICAgICAgICAgICAgZGVmYXVsdEJyb3dzZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGSVhNRTogc2hhbGwgd2UgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGJyb3dzZXJOYW1lIGlzIG5vdCBzcGVjaWZpZWQsIG5laXRoZXIgaW4gY2FwcyBub3IgaW4gb3B0aW9ucz8hXHJcbiAgICAgICAgaWYgKCF0aGlzLmNhcHMuYnJvd3Nlck5hbWUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5JTlZBTElEX0NBUEFCSUxJVElFUyxcclxuICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBgd2ViYCBtb2R1bGUgLSBicm93c2VyTmFtZSBtdXN0IGJlIHNwZWNpZmllZC4nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBicm93c2VyTmFtZS1zXHJcbiAgICAgICAgaWYgKHRoaXMuY2Fwcy5icm93c2VyTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWUnKSB7XHJcbiAgICAgICAgICAgIC8vIElFIGlzIHNwZWNpZmllZCBhcyAnaWUnIHRocm91Z2ggdGhlIGNvbW1hbmQgbGluZSBhbmQgcG9zc2libHkgc3VpdGVzXHJcbiAgICAgICAgICAgIC8vIGJ1dCBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzICdpbnRlcm5ldCBleHBsb3JlcidcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gJ2ludGVybmV0IGV4cGxvcmVyJztcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2Fwc1snbGFtYmRhOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAvLyBsYW1iZGF0ZXN0IGV4cGVjdHMgb3JpZ2luYWwgY2FzZSBuYW1lc1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXBzWydwZXJmZWN0b01vYmlsZTpvcHRpb25zJ10pIHtcclxuICAgICAgICAgICAgLy8gcGVyZmVjdG9Nb2JpbGUgZXhwZWN0cyBvcmlnaW5hbCBjYXNlIG5hbWVzXHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhcHMuYnJvd3Nlck5hbWUgIT09ICdNaWNyb3NvZnRFZGdlJykge1xyXG4gICAgICAgICAgICAvLyBzZWxlbml1bSBzdGFuZGFsb25lIHNlcnZlciBleHBlY3RzIGFsbCBicm93c2VyTmFtZXMgdG8gYmUgbG93ZXJjYXNlXHJcbiAgICAgICAgICAgIC8vIGV4Y2VwdCBcIk1pY3Jvc29mdEVkZ2VcIlxyXG4gICAgICAgICAgICB0aGlzLmNhcHMuYnJvd3Nlck5hbWUgPSB0aGlzLmNhcHMuYnJvd3Nlck5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGFkanVzdCBjYXBhYmlsaXRpZXMgdG8gZW5hYmxlIGNvbGxlY3RpbmcgYnJvd3NlciBhbmQgcGVyZm9ybWFuY2Ugc3RhdHMgaW4gQ2hyb21lIFxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzWydnb29nOmxvZ2dpbmdQcmVmcyddID0geyAgICAgLy8gZm9yIENocm9tZURyaXZlciA+PSA3NVxyXG4gICAgICAgICAgICAgICAgYnJvd3NlcjogJ0FMTCcsXHJcbiAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZTogJ0FMTCdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgLy8gc3BlY2lmeWluZyB0aGlzIGxlYWRzIENocm9tZSA3NysgdG8gcmVmdXNlIGxvYWRpbmdcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmxvZ2dpbmdQcmVmcyA9IHsgICAgICAgICAgICAgLy8gZm9yIENocm9tZURyaXZlciA8IDc1XHJcbiAgICAgICAgICAgICAgICBicm93c2VyOiAnQUxMJyxcclxuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiAnQUxMJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0aGlzLmNhcHMuY2hyb21lT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgICAgIHBlcmZMb2dnaW5nUHJlZnM6IHtcclxuICAgICAgICAgICAgICAgICAgICBlbmFibGVOZXR3b3JrOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZVBhZ2U6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICovXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBwb3B1bGF0ZSBXRElPIG9wdGlvbnNcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwucGFyc2Uoc2VsZW5pdW1VcmwgfHwgREVGQVVMVF9TRUxFTklVTV9VUkwpO1xyXG4gICAgICAgIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpO1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB1cmwuaG9zdG5hbWU7XHJcbiAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHVybC5wb3J0IHx8IChwcm90b2NvbCA9PT0gJ2h0dHBzJyA/IDQ0MyA6IDgwKSk7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHVybC5wYXRobmFtZTtcclxuXHJcbiAgICAgICAgLy8gYXV0aCBpcyBuZWVkZWQgbW9zdGx5IGZvciBjbG91ZCBwcm92aWRlcnMgc3VjaCBhcyBMYW1iZGFUZXN0XHJcbiAgICAgICAgaWYgKHVybC5hdXRoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF1dGggPSB1cmwuYXV0aC5zcGxpdCgnOicpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgICAgICB1c2VyOiBhdXRoWzBdLFxyXG4gICAgICAgICAgICAgICAga2V5OiBhdXRoWzFdXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZW5pdW1VcmxCYXNlID0gYCR7cHJvdG9jb2x9Oi8vJHtob3N0fToke3BvcnR9YDtcclxuICAgICAgICAvLyBjaGVjayBpZiBzZWxlbml1bSBodWIgaXMgYmFzZWQgb24gU2VsZW5vaWQsIHRoZW4gZW5hYmxlIHZpZGVvIHJlY29yZGluZ1xyXG4gICAgICAgIHRoaXMuaXNSdW5uaW5nT25TZWxlbm9pZCA9IGF3YWl0IHRoaXMuX2lzU2VsZW5vaWRIdWIodGhpcy5zZWxlbml1bVVybEJhc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzUnVubmluZ09uU2VsZW5vaWQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNhcHNbJ3NlbGVub2lkOm9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10uZW5hYmxlVmlkZW8gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10uZW5hYmxlVmlkZW8gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXBzWydzZWxlbm9pZDpvcHRpb25zJ10udmlkZW9GcmFtZVJhdGUgPSA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIFdlYmRyaXZlci5pbyBvcHRpb25zXHJcbiAgICAgICAgY29uc3Qgd2Rpb09wdHMgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucy53ZGlvT3B0cyB8fCB7fSxcclxuICAgICAgICAgICAgcHJvdG9jb2w6IHByb3RvY29sLFxyXG4gICAgICAgICAgICBob3N0bmFtZTogaG9zdCxcclxuICAgICAgICAgICAgcG9ydDogcG9ydCxcclxuICAgICAgICAgICAgcGF0aDogcGF0aCxcclxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzOiB0aGlzLmNhcHMsXHJcbiAgICAgICAgICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcclxuICAgICAgICAgICAgcnVubmVyOiAncmVwbCcsXHJcbiAgICAgICAgICAgIHdhaXRmb3JUaW1lb3V0OiA1MDAwLCAvLyBpbmNyZWFzZSB0aGUgZGVmYXVsdCAzMDAwXHJcbiAgICAgICAgICAgIGNvbm5lY3Rpb25SZXRyeVRpbWVvdXQ6IDMxMCoxMDAwLFxyXG4gICAgICAgICAgICBjb25uZWN0aW9uUmV0cnlDb3VudDogMVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBpbml0RXJyb3IgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgICAgICBjb25zdCBwcm92aWRlciA9IG1vZFV0aWxzLmRldGVybWluZVByb3ZpZGVyKHdkaW9PcHRzKTtcclxuICAgICAgICBjb25zdCBuYW1lID0gbW9kVXRpbHMuZW5yaWNoUHJvdmlkZXJXZGlvT3B0aW9ucyhwcm92aWRlciwgd2Rpb09wdHMpO1xyXG5cclxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBicm93c2VyIGZvciBtb2JpbGUgd2ViIHRlc3RzLCBpZiBleGVjdXRlZCBhZ2FpbnN0IHJlbW90ZSBkZXZpY2VzIG9mIGEgY2xvdWQgcHJvdmlkZXJcclxuICAgICAgICBpZiAoZGVmYXVsdEJyb3dzZXIgJiYgcHJvdmlkZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID0gd2Rpb09wdHMuY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID0gREVGQVVMVF9NT0JJTEVfQlJPV1NFUjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy53ZGlvT3B0cyA9IHdkaW9PcHRzO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJpdmVyID0gYXdhaXQgd2Rpby5yZW1vdGUod2Rpb09wdHMpO1xyXG4gICAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgdGhpcy5kcml2ZXIucHJvdmlkZXIgPSBwcm92aWRlcjtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc2VsZW5pdW1Ccm93c2VyVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1Ccm93c2VyVGltZW91dCA9IHRoaXMub3B0aW9ucy5zZWxlbml1bUJyb3dzZXJUaW1lb3V0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuc2VsZW5pdW1UaW1lb3V0ID0gdGhpcy5vcHRpb25zLnNlbGVuaXVtVGltZW91dDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5QRVJGRUNUTykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGVyZmVjdG9FeGVjdXRpb25Db250ZXh0ID0gYXdhaXQgbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgd2ViZHJpdmVyOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVTY3JpcHQ6IGFzeW5jIChjb21tYW5kLCBwYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGNvbW1hbmQsIHBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nQ2xpZW50ID0gbmV3IHBlcmZlY3RvUmVwb3J0aW5nLlBlcmZlY3RvLlBlcmZlY3RvUmVwb3J0aW5nQ2xpZW50KHBlcmZlY3RvRXhlY3V0aW9uQ29udGV4dCk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlcG9ydGluZ0NsaWVudC50ZXN0U3RhcnQobmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgZXJySGVscGVyLmdldFNlbGVuaXVtSW5pdEVycm9yKGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzZXQgYnJvd3NlciBsb2dzIGlmIGF1dG8gY29sbGVjdCBsb2dzIG9wdGlvbiBpcyBlbmFibGVkXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5jb2xsZWN0QnJvd3NlckxvZ3MgJiYgdGhpcy5jYXBzLmJyb3dzZXJOYW1lID09PSAnY2hyb21lJykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2ltcGx5IGNhbGwgdGhpcyB0byBjbGVhciB0aGUgcHJldmlvdXMgbG9ncyBhbmQgc3RhcnQgdGhlIHRlc3Qgd2l0aCB0aGUgY2xlYW4gbG9nc1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRCcm93c2VyTG9ncygpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IHJldHJpZXZlIGJyb3dzZXIgbG9ncy4nLCBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgW21vZFV0aWxzLnByb3ZpZGVyLkxBTUJEQVRFU1QsIG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSywgbW9kVXRpbHMucHJvdmlkZXIuUEVSRkVDVE9dLmluY2x1ZGVzKHRoaXMuZHJpdmVyLnByb3ZpZGVyKVxyXG4gICAgICAgICAgICAgICAgLy9bJ01pY3Jvc29mdEVkZ2UnLCAnbXNlZGdlJywgJ0VkZ2UnLCAnSW50ZXJuZXQgRXhwbG9yZXInXS5pbmNsdWRlcyh0aGlzLmRyaXZlci5jYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gZG8gbm90IG1heGltaXplIHdpbmRvdyBpZiB0aGUgdGVzdCBpcyBleGVjdXRlZCBhZ2FpbnN0IGV4dGVybmFsIGNsb3VkIHByb3ZpZGVyIGluZnJhc3RydWN0dXJlXHJcbiAgICAgICAgICAgICAgICAvLyBhcyBtb3N0IG9mIGNsb3VkIHByb3ZpZGVycyBkbyBub3Qgc3VwcG9ydCB0aGlzIGZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIG1heGltaXplIGJyb3dzZXIgd2luZG93XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5tYXhpbWl6ZVdpbmRvdygpO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IGluaXRpYWwgVGltZW91dFxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5kcml2ZXIuc2V0VGltZW91dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgJ2ltcGxpY2l0JzogdGhpcy53YWl0Rm9yVGltZW91dCxcclxuICAgICAgICAgICAgICAgICAgICAncGFnZUxvYWQnOiB0aGlzLndhaXRGb3JUaW1lb3V0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlVOS05PV05fRVJST1IsIGVyci5tZXNzYWdlLCB1dGlsLmluc3BlY3QoZXJyKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBtb2RVdGlscy5vdmVyd3JpdGVXZGlvQ29tbWFuZHModGhpcy5kcml2ZXIpO1xyXG5cclxuICAgICAgICBzdXBlci5pbml0KHRoaXMuZHJpdmVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBmdW5jdGlvbiBkaXNwb3NlXHJcbiAgICAgKiBAc3VtbWFyeSBFbmRzIHRoZSBjdXJyZW50IHNlc3Npb24uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZz19IHN0YXR1cyAtIFRlc3Qgc3RhdHVzLCBlaXRoZXIgYHBhc3NlZGAgb3IgYGZhaWxlZGAuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRpc3Bvc2Uoc3RhdHVzKSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvbnMgPSB7fTtcclxuICAgICAgICB0aGlzLl93aGVuV2ViTW9kdWxlRGlzcG9zZSA9IGRlZmVyKCk7XHJcblxyXG4gICAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIHN0YXR1cyA9ICdwYXNzZWQnO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucnMuc3RlcHMgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnJzLnN0ZXBzKSAmJiB0aGlzLnJzLnN0ZXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWxlZEZpbmRlZCA9IHRoaXMucnMuc3RlcHMuZmluZCgoaXRlbSkgPT4gaXRlbS5zdGF0dXMgPT09ICdmYWlsZWQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmYWlsZWRGaW5kZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnZmFpbGVkJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZHJpdmVyICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3RhdHVzID0gc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5TQVVDRUxBQlMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IHRoaXMud2Rpb09wdHMuY2FwYWJpbGl0aWVzWydzYXVjZTpvcHRpb25zJ11bJ3VzZXJuYW1lJ107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWNjZXNzS2V5ID0gdGhpcy53ZGlvT3B0cy5jYXBhYmlsaXRpZXNbJ3NhdWNlOm9wdGlvbnMnXVsnYWNjZXNzS2V5J107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzc2VkID0gc3RhdHVzID09PSAnUEFTU0VEJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZHJpdmVyLnNlc3Npb25JZDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gXCJ7XFxcInBhc3NlZFxcXCI6XCIrcGFzc2VkK1wifVwiO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBteUFjY291bnQgPSBuZXcgU2F1Y2VMYWJzKHsgdXNlcjogdXNlcm5hbWUsIGtleTogYWNjZXNzS2V5fSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbXlBY2NvdW50LnVwZGF0ZUpvYih1c2VybmFtZSwgaWQsIGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG15QWNjb3VudC5zdG9wSm9iKHVzZXJuYW1lLCBpZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZHJpdmVyLnByb3ZpZGVyID09PSBtb2RVdGlscy5wcm92aWRlci5MQU1CREFURVNUKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2VuZFJlc3VsdFN0YXR1c1RvTGFtYmRhVGVzdChzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbW9kVXRpbHMucHJvdmlkZXIuVEVTVElOR0JPVCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb1Rlc3RpbmdCb3Qoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLlBFUkZFQ1RPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXBvcnRpbmdDbGllbnQudGVzdFN0b3Aoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5wYXNzZWQgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmZWN0b1JlcG9ydGluZy5Db25zdGFudHMucmVzdWx0cy5mYWlsZWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcml2ZXIucHJvdmlkZXIgPT09IG1vZFV0aWxzLnByb3ZpZGVyLkJST1dTRVJTVEFDSykge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NlbmRSZXN1bHRTdGF0dXNUb0Jyb3dzZXJzdGFjayhzdGF0dXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlci5wcm92aWRlciA9PT0gbnVsbCAmJiBbJ1BBU1NFRCcsJ0ZBSUxFRCddLmluY2x1ZGVzKHN0YXR1cykpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlQnJvd3NlcldpbmRvd3Moc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuY2VsZWQgb3Igb3RoZXIgc3RhdHVzXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwb3NlQ29udGludWUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybignRXJyb3IgZGlzcG9zaW5nIGRyaXZlcjogJywgZSk7ICAgIC8vIGlnbm9yZSBhbnkgZXJyb3JzIGF0IGRpc3Bvc2FsIHN0YWdlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRpc3Bvc2VDb250aW51ZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMud2RQcm9jKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2RQcm9jLmtpbGwoKTtcclxuICAgICAgICAgICAgdGhpcy53ZFByb2MgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3doZW5XZWJNb2R1bGVEaXNwb3NlLnByb21pc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlU2Vzc2lvbigpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBkZWxldGVTZXNzaW9uIG9ubHkgaWYgbm8gc2Vzc2lvbiB0aW1lb3V0IGJlY2F1c2UgaXQgd2lsbCB0YWtlIDUgbWluIHRvIGV4ZWN1dGUgb3RoZXJ3aXNlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRyaXZlciAmJiB0aGlzLmRyaXZlci5kZWxldGVTZXNzaW9uICYmICF0aGlzLnNlbGVuaXVtU2Vzc2lvblRpbWVvdXQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRlbGV0ZVNlc3Npb24oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2RlbGV0ZVNlc3Npb24gZXJyb3InLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2xvc2VCcm93c2VyV2luZG93cyhzdGF0dXMpIHtcclxuICAgICAgICBpZiAoc3RhdHVzICYmICdGQUlMRUQnID09PSBzdGF0dXMudG9VcHBlckNhc2UoKSAmJiB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnNlbGVuaXVtUGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKHN0YXR1cyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVTZXNzaW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzcG9zZUNvbnRpbnVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc3Bvc2VDb250aW51ZShzdGF0dXMpIHtcclxuICAgICAgICB0aGlzLmRyaXZlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG51bGw7XHJcbiAgICAgICAgc3VwZXIuZGlzcG9zZSgpO1xyXG5cclxuICAgICAgICAvLyBjbGVhbnVwIGNocm9tZWRyaXZlcidzIG9ubHkgd2hlbiBydW5uaW5nIGZyb20gd2l0aGluIHRoZSBJREUgYW5kIHRlc3QgZGlkIG5vdCBmYWlsXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuc2VsZW5pdW1QaWQgJiYgKCFzdGF0dXMgfHwgJ0ZBSUxFRCcgIT09IHN0YXR1cy50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcclxuICAgICAgICAgICAgICAgICAgICBleGVjU3luYygndGFza2tpbGwgL0lNIGNocm9tZWRyaXZlci5leGUgL0YnLCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwZ3JlcFJlc3VsdCA9IGV4ZWNTeW5jKFwicGdyZXAgLWQnICcgY2hyb21lZHJpdmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCAmJiBwZ3JlcFJlc3VsdC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZ3JlcFJlc3VsdCA9IHBncmVwUmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ2tpbGwgLTkgJyArIHBncmVwUmVzdWx0LCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2xlYW51cCBlZGdlZHJpdmVyJ3Mgb25seSB3aGVuIHJ1bm5pbmcgZnJvbSB3aXRoaW4gdGhlIElERSBhbmQgdGVzdCBkaWQgbm90IGZhaWxcclxuICAgICAgICBpZiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5zZWxlbml1bVBpZCAmJiAoIXN0YXR1cyB8fCAnRkFJTEVEJyAhPT0gc3RhdHVzLnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBmb3Igbm93XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwZ3JlcFJlc3VsdCA9IGV4ZWNTeW5jKFwicGdyZXAgLWQnICcgbXNlZGdlZHJpdmVyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCAmJiBwZ3JlcFJlc3VsdC50b1N0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZ3JlcFJlc3VsdCA9IHBncmVwUmVzdWx0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZ3JlcFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY1N5bmMoJ2tpbGwgLTkgJyArIHBncmVwUmVzdWx0LCB7IHN0ZGlvOiBbJ2lnbm9yZScsICdpZ25vcmUnLCAnaWdub3JlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fd2hlbldlYk1vZHVsZURpc3Bvc2UucmVzb2x2ZShudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBfaXRlcmF0aW9uU3RhcnQoKSB7XHJcbiAgICAgICAgLy8gY2xlYXIgdHJhbnNhY3Rpb24gbmFtZSBzYXZlZCBpbiBwcmV2aW91cyBpdGVyYXRpb24gaWYgYW55XHJcbiAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXRlcmF0aW9uRW5kKGVycm9yKSB7XHJcbiAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLnR5cGUgPT09IGVycm9ySGVscGVyLmVycm9yQ29kZS5TRUxFTklVTV9TRVNTSU9OX1RJTUVPVVQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlbml1bVNlc3Npb25UaW1lb3V0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29sbGVjdCBicm93c2VyIGxvZ3MgZm9yIHRoaXMgc2Vzc2lvblxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29sbGVjdEJyb3dzZXJMb2dzID09PSB0cnVlICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxvZ3MgPSBhd2FpdCB0aGlzLmdldEJyb3dzZXJMb2dzKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobG9ncyAmJiBBcnJheS5pc0FycmF5KGxvZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbG9nIG9mIGxvZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ycy5sb2dzLnB1c2godGhpcy5fYWRqdXN0QnJvd3NlckxvZyhsb2cpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBlcnJvcnNcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgcmV0cmlldmUgYnJvd3NlciBsb2dzLicsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFRPRE86IHNob3VsZCBjbGVhciB0cmFuc2FjdGlvbnMgdG8gYXZvaWQgZHVwbGljYXRlIG5hbWVzIGFjcm9zcyBpdGVyYXRpb25zXHJcbiAgICAgICAgLy8gYWxzbyBzaG91bGQgdGhyb3cgb24gZHVwbGljYXRlIG5hbWVzLlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmVjb3JkSEFSICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgLy8gdGhlcmUgbWlnaHQgYmUgbm8gdHJhbnNhY3Rpb25zIHNldCBpZiB0ZXN0IGZhaWxzIGJlZm9yZSB3ZWIudHJhbnNhY3Rpb24gY29tbWFuZFxyXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uc1tnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWVdID0gYXdhaXQgdGhpcy5fZ2V0SEFSKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucnMuaGFyID0gdGhpcy50cmFuc2FjdGlvbnM7XHJcbiAgICAgICAgY29uc3QgaGFzRmFpbGVkID0gZXJyb3IgIT09IHVuZGVmaW5lZCAmJiBlcnJvciAhPT0gbnVsbDtcclxuICAgICAgICB0aGlzLl9hZGRTZWxlbm9pZFZpZGVvQXNUZXN0QXR0YWNobWVudChoYXNGYWlsZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIF9pc0FjdGlvbihuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIEFDVElPTl9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBfdGFrZVNjcmVlbnNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU0NSRUVOU0hPVF9DT01NQU5EUy5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3I7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci50YWtlU2NyZWVuc2hvdFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdFVudGlsUmV0VmFsID0gdGhpcy5kcml2ZXIud2FpdFVudGlsKGFzeW5jKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGltYWdlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbGxlY3QgYWxsIChzY3JlZW5zaG90IGFuZCB0aXRsZSkgaW1hZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0V2luZG93SGFuZGxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGFuZGxlcykgJiYgaGFuZGxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBoYW5kbGUgb2YgaGFuZGxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5zd2l0Y2hUb1dpbmRvdyhoYW5kbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IGF3YWl0IHRoaXMuZHJpdmVyLnRha2VTY3JlZW5zaG90KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0VGl0bGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0VG9JbWFnZSA9IHJlcXVpcmUoJy4uL2xpYi90ZXh0LXRvLWltYWdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlSW1hZ2UgPSBhd2FpdCB0ZXh0VG9JbWFnZS5nZW5lcmF0ZSh0aXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlSW1hZ2UgJiYgdHlwZW9mIHRpdGxlSW1hZ2UgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlSW1hZ2UgPSB0aXRsZUltYWdlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKHRpdGxlSW1hZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW52YXMgb3BlcmF0aW9uIGZhaWxlZC4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gSWdub3JlIGNhbnZhcy1yZWxhdGVkIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKGltYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVyZ2UgYWxsIGltYWdlcyBpbnRvIG9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkSW1hZ2UgPSBhd2FpdCBtZXJnZUltYWdlcyhpbWFnZXMsIHsgZGlyZWN0aW9uOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlZEltYWdlICYmIHR5cGVvZiBtZXJnZWRJbWFnZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBtZXJnZWRJbWFnZS5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3YWl0VW50aWxSZXRWYWwgJiYgd2FpdFVudGlsUmV0VmFsLnRoZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdFVudGlsUmV0VmFsLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCAoMSknLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCAoMiknLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzY3JlZW5zaG90ICgzKScsIGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc2NyZWVuc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF90YWtlU25hcHNob3RTaWxlbnQobmFtZSkge1xyXG4gICAgICAgIGlmICghTk9fU05BUFNIT1RfQ09NTUFORFMuaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuZ2V0UGFnZVNvdXJjZVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldHZhbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyaXZlci5jYWxsKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJpdmVyLmdldFBhZ2VTb3VyY2UoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gc2FuaXRpemVIdG1sKHJldHZhbCwgU0FOSVRJWkVfSFRNTF9PUFRTKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGVtcHR5IGxpbmVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHJldHZhbC5yZXBsYWNlKC8oXlsgXFx0XSpcXG4pL2dtLCBcIlwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdDYW5ub3QgZ2V0IHNuYXBzaG90ICgxKScsIGVycm9yKTsgcmVqZWN0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc25hcHNob3QgKDIpJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBnZXQgc25hcHNob3QgKDMpJywgZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignQ2Fubm90IGdldCBzbmFwc2hvdCBpbm5lciBlcnJvcicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9hZGp1c3RCcm93c2VyTG9nKGxvZykge1xyXG4gICAgICAgIGlmICghbG9nIHx8IHR5cGVvZiBsb2cgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPOiBjb252ZXJ0IGxvZy50aW1lc3RhbXAgZnJvbSB0aGUgYnJvd3NlciB0aW1lIHpvbmUgdG8gdGhlIGxvY2FsIG9uZSAoc28gd2UgY2FuIGxhdGVyIGNvcnJlbGF0ZSBiZXR3ZWVuIHN0ZXBzIGFuZCBsb2dzKVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRpbWU6IGxvZy50aW1lc3RhbXAsXHJcbiAgICAgICAgICAgIG1zZzogbG9nLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgU0VWRVJFIGxvZyBsZXZlbCB0byBFUlJPUlxyXG4gICAgICAgICAgICBsZXZlbDogbG9nLmxldmVsID09PSAnU0VWRVJFJyA/ICdFUlJPUicgOiBsb2cubGV2ZWwsXHJcbiAgICAgICAgICAgIHNyYzogJ2Jyb3dzZXInXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKlxyXG4gICAgICogRklYTUU6IFRoZXJlIGlzIGEgYnVnIHdpdGggSUUuIFNlZSB0aGUgY29tbWVudCB3aXRoaW4gZnVuY3Rpb24gYm9keS5cclxuICAgICAqXHJcbiAgICAgKiAgZG9tQ29udGVudExvYWRlZCAoYWthIEZpcnN0IFZpc3VhbCBUaW1lKS0gUmVwcmVzZW50cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0IGFuZCBuYXZpZ2F0aW9uU3RhcnQuXHJcbiAgICAgKiAgbG9hZCAoYWthIEZ1bGwgTG9hZCBUaW1lKSAgICAgICAgICAgICAgIC0gUmVwcmVzZW50cyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxvYWRFdmVudFN0YXJ0IGFuZCBuYXZpZ2F0aW9uU3RhcnQuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHByb2Nlc3NpbmcgbW9kZWw6XHJcbiAgICAgKlxyXG4gICAgICogIDEuIG5hdmlnYXRpb25TdGFydCAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXMgcmVxdWVzdGVkIHRoZSBkb2N1bWVudC5cclxuICAgICAqICAyLiAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgIC0gTm90IHJlbGV2YW50IHRvIHVzLiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvbmF2aWdhdGlvbi10aW1pbmcvI3Byb2Nlc3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uXHJcbiAgICAgKiAgMy4gZG9tTG9hZGluZyAgICAgICAgICAgICAgICAgICAtIFRoZSBicm93c2VyIHN0YXJ0cyBwYXJzaW5nIHRoZSBkb2N1bWVudC5cclxuICAgICAqICA0LiBkb21JbnRlcmFjdGl2ZSAgICAgICAgICAgICAgIC0gVGhlIGJyb3dzZXIgaGFzIGZpbmlzaGVkIHBhcnNpbmcgdGhlIGRvY3VtZW50IGFuZCB0aGUgdXNlciBjYW4gaW50ZXJhY3Qgd2l0aCB0aGUgcGFnZS5cclxuICAgICAqICA1LiBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCAgIC0gVGhlIGRvY3VtZW50IGhhcyBiZWVuIGNvbXBsZXRlbHkgbG9hZGVkIGFuZCBwYXJzZWQgYW5kIGRlZmVycmVkIHNjcmlwdHMsIGlmIGFueSwgaGF2ZSBleGVjdXRlZC4gXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzeW5jIHNjcmlwdHMsIGlmIGFueSwgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgZXhlY3V0ZWQuXHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0eWxlc2hlZXRzWzFdLCBpbWFnZXMsIGFuZCBzdWJmcmFtZXMgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgZmluaXNoZWQgbG9hZGluZy5cclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0gLSBTdHlsZXNoZWV0cyAvdXN1YWxseS8gZGVmZXIgdGhpcyBldmVudCEgLSBodHRwOi8vbW9saWx5LmRlL3dlYmxvZy9kb21jb250ZW50bG9hZGVkXHJcbiAgICAgKiAgNi4gZG9tQ29udGVudExvYWRlZEV2ZW50RW5kICAgICAtIFRoZSBET01Db250ZW50TG9hZGVkIGV2ZW50IGNhbGxiYWNrLCBpZiBhbnksIGZpbmlzaGVkIGV4ZWN1dGluZy4gRS5nLlxyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRE9NIGZ1bGx5IGxvYWRlZCBhbmQgcGFyc2VkXCIpO1xyXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICogIDcuIGRvbUNvbXBsZXRlICAgICAgICAgICAgICAgICAgLSBUaGUgRE9NIHRyZWUgaXMgY29tcGxldGVseSBidWlsdC4gQXN5bmMgc2NyaXB0cywgaWYgYW55LCBoYXZlIGV4ZWN1dGVkLlxyXG4gICAgICogIDguIGxvYWRFdmVudFN0YXJ0ICAgICAgICAgICAgICAgLSBUaGUgYnJvd3NlciBoYXZlIGZpbmlzaGVkIGxvYWRpbmcgYWxsIHRoZSByZXNvdXJjZXMgbGlrZSBpbWFnZXMsIHN3ZiwgZXRjLlxyXG4gICAgICogIDkuIGxvYWRFdmVudEVuZCAgICAgICAgICAgICAgICAgLSBUaGUgbG9hZCBldmVudCBjYWxsYmFjaywgaWYgYW55LCBmaW5pc2hlZCBleGVjdXRpbmcuXHJcbiAgICAgKi9cclxuICAgIF9nZXRTdGF0cyhjb21tYW5kTmFtZSkge1xyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZmV0Y2hTdGF0cyAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQgJiYgdGhpcy5faXNBY3Rpb24oY29tbWFuZE5hbWUpKSB7XHJcbiAgICAgICAgICAgIHZhciBuYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIHZhciBkb21Db250ZW50TG9hZGVkID0gMDtcclxuICAgICAgICAgICAgdmFyIGxvYWQgPSAwO1xyXG4gICAgICAgICAgICB2YXIgc2FtZVBhZ2UgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFRPRE86IGhhbmRsZSBmb2xsb3dpbmcgc2l0dWF0aW9uOlxyXG4gICAgICAgICAgICAvLyBpZiBuYXZpZ2F0ZVN0YXJ0IGVxdWFscyB0byB0aGUgb25lIHdlIGdvdCBmcm9tIHByZXZpb3VzIGF0dGVtcHQgKHdlIG5lZWQgdG8gc2F2ZSBpdClcclxuICAgICAgICAgICAgLy8gaXQgbWVhbnMgd2UgYXJlIHN0aWxsIG9uIHRoZSBzYW1lIHBhZ2UgYW5kIGRvbid0IG5lZWQgdG8gcmVjb3JkIGxvYWQvZG9tQ29udGVudExvYWRlZCB0aW1lc1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kcml2ZXIuY2FsbCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3RFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0VW50aWxSZXRWYWwgPSB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qZ2xvYmFsIHdpbmRvdyovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbWluZ3MgPSBhd2FpdCB0aGlzLmRyaXZlci5leGVjdXRlKGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvblN0YXJ0OiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLm5hdmlnYXRpb25TdGFydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0OiB3aW5kb3cucGVyZm9ybWFuY2UudGltaW5nLmRvbUNvbnRlbnRMb2FkZWRFdmVudFN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZEV2ZW50U3RhcnQ6IHdpbmRvdy5wZXJmb3JtYW5jZS50aW1pbmcubG9hZEV2ZW50U3RhcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXJyb3IgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbWluZ3MuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgPiAwICYmIHRpbWluZ3MubG9hZEV2ZW50U3RhcnQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbWVQYWdlID0gdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSAmJiB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID09IHRpbWluZ3MubmF2aWdhdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uU3RhcnQgPSB0aGlzLmxhc3ROYXZpZ2F0aW9uU3RhcnRUaW1lID0gdGltaW5ncy5uYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA9IHRpbWluZ3MuZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2FkRXZlbnRTdGFydCA9IHRpbWluZ3MubG9hZEV2ZW50U3RhcnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Db250ZW50TG9hZGVkID0gZG9tQ29udGVudExvYWRlZEV2ZW50U3RhcnQgLSBuYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWQgPSBsb2FkRXZlbnRTdGFydCAtIG5hdmlnYXRpb25TdGFydDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb21Db250ZW50TG9hZGVkRXZlbnRTdGFydCA+IDAgJiYgbG9hZEV2ZW50U3RhcnQgPiAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleGVjdXRlRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb2xsZWN0IGVycm9yIGluc2lkZSBkcml2ZXIuZXhlY3V0ZSBvciBkcml2ZXIud2FpdFVudGlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEVycm9yID0gZXhlY3V0ZUVycm9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHRpbWVvdXQ6IDMwKjEwMDAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FpdFVudGlsUmV0VmFsICYmIHdhaXRVbnRpbFJldFZhbC50aGVuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0VW50aWxSZXRWYWwudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmludCBlcnJvciBmcm9tIGRyaXZlci5leGVjdXRlIG9yIGRyaXZlci53YWl0VW50aWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGFzdEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0RXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJpbnQgZXJyb3IgZnJvbSBkcml2ZXIuZXhlY3V0ZSBvciBkcml2ZXIud2FpdFVudGlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGxhc3RFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge307XHJcbiAgICAgICAgICAgICAgICAvLyBjb3VsZG4ndCBnZXQgdGltaW5ncy5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5sYXN0TmF2aWdhdGlvblN0YXJ0VGltZSA9IG5hdmlnYXRpb25TdGFydDtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzYW1lUGFnZSA/IHt9IDogeyBEb21Db250ZW50TG9hZGVkRXZlbnQ6IGRvbUNvbnRlbnRMb2FkZWQsIExvYWRFdmVudDogbG9hZCB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgT3BlbnMgbmV3IHRyYW5zYWN0aW9uLlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHBlcnNpc3QgdGlsbCBhIG5ldyBvbmUgaXMgb3BlbmVkLiBUcmFuc2FjdGlvbiBuYW1lcyBtdXN0IGJlIHVuaXF1ZS5cclxuICAgICAqIEBmdW5jdGlvbiB0cmFuc2FjdGlvblxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgLSBUaGUgdHJhbnNhY3Rpb24gbmFtZS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdHJhbnNhY3Rpb24obmFtZSkge1xyXG4gICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGp1c3QgaW4gY2FzZSB1c2VyIHBhc3NlZCBhIGNvbXBsZXggb2JqZWN0IGJ5IG1pc3Rha2VcclxuICAgICAgICBuYW1lID0gbmFtZS50b1N0cmluZygpO1xyXG5cclxuICAgICAgICAvLyBsaW1pdCB0aGUgbmFtZSBsZW5ndGggKHNpbmNlIHdlIGNhbid0IHN0b3JlIHZhbHVlcyBsYXJnZXIgdGhhbiA1MTJCIGluIHRoZSBkYXRhYmFzZSlcclxuICAgICAgICBuYW1lID0gbmFtZS5zbGljZSgwLCA1MTIpO1xyXG5cclxuICAgICAgICBpZiAoZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZWNvcmRIQVIgJiYgdGhpcy5pc0luaXRpYWxpemVkICYmIHRoaXMuY2Fwcy5icm93c2VyTmFtZSA9PT0gJ2Nocm9tZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25zW2dsb2JhbC5fbGFzdFRyYW5zYWN0aW9uTmFtZV0gPSBhd2FpdCB0aGlzLl9nZXRIQVIoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRyYW5zYWN0aW9uc1tuYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgY29uc3QgY291bnRlciA9IE9iamVjdC5rZXlzKHRoaXMudHJhbnNhY3Rpb25zKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uc3RhcnRzV2l0aChuYW1lKSkubGVuZ3RoICsgMTtcclxuICAgICAgICAgICAgZ2xvYmFsLl9sYXN0VHJhbnNhY3Rpb25OYW1lID0gbmFtZSsnICgjJytjb3VudGVyKycpJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBnbG9iYWwuX2xhc3RUcmFuc2FjdGlvbk5hbWUgPSBuYW1lO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbG9hZEhlbHBlckZ1bmN0aW9ucygpIHtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0V2Rpb0xvY2F0b3IgPSBtb2RVdGlscy5nZXRXZGlvTG9jYXRvcjtcclxuICAgICAgICB0aGlzLmhlbHBlcnMubWF0Y2hQYXR0ZXJuID0gbW9kVXRpbHMubWF0Y2hQYXR0ZXJuO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0RWxlbWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0RWxlbWVudHMgPSBtb2RVdGlscy5nZXRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuZ2V0Q2hpbGRFbGVtZW50ID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5nZXRDaGlsZEVsZW1lbnRzID0gbW9kVXRpbHMuZ2V0Q2hpbGRFbGVtZW50cztcclxuICAgICAgICB0aGlzLmhlbHBlcnMuc2V0VGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMuc2V0VGltZW91dEltcGxpY2l0O1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5yZXN0b3JlVGltZW91dEltcGxpY2l0ID0gbW9kVXRpbHMucmVzdG9yZVRpbWVvdXRJbXBsaWNpdDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnQgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50Tm9uRW1wdHlTdHJpbmc7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnROdW1iZXI7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudE51bWJlck5vbk5lZ2F0aXZlO1xyXG4gICAgICAgIHRoaXMuaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudEJvb2w7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsID0gbW9kVXRpbHMuYXNzZXJ0QXJndW1lbnRCb29sT3B0aW9uYWw7XHJcbiAgICAgICAgdGhpcy5oZWxwZXJzLmFzc2VydEFyZ3VtZW50VGltZW91dCA9IG1vZFV0aWxzLmFzc2VydEFyZ3VtZW50VGltZW91dDtcclxuICAgICAgICB0aGlzLmhlbHBlcnMuYXNzZXJ0QXJndW1lbnRTdHJpbmcgPSBtb2RVdGlscy5hc3NlcnRBcmd1bWVudFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZ2V0SEFSKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gYXdhaXQgdGhpcy5kcml2ZXIuZ2V0TG9nVHlwZXMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlcy5pbmNsdWRlcygncGVyZm9ybWFuY2UnKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbG9ncyA9IGF3YWl0IHRoaXMuZHJpdmVyLmdldExvZ3MoJ3BlcmZvcm1hbmNlJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaW4gb25lIGluc3RhbmNlLCBsb2dzIHdhcyBub3QgaXRlcmFibGUgZm9yIHNvbWUgcmVhc29uIC0gaGVuY2UgdGhlIGZvbGxvd2luZyBjaGVjazpcclxuICAgICAgICAgICAgICAgIGlmICghbG9ncyB8fCB0eXBlb2YgbG9nc1tTeW1ib2wuaXRlcmF0b3JdICE9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ2dldEhBUjogbG9ncyBub3QgaXRlcmFibGU6ICcgKyBKU09OLnN0cmluZ2lmeShsb2dzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2cgb2YgbG9ncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1zZ09iaiA9IEpTT04ucGFyc2UobG9nLm1lc3NhZ2UpOyAgIC8vIHJldHVybmVkIGFzIHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50cy5wdXNoKG1zZ09iai5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBoYXIgPSBoYXJGcm9tTWVzc2FnZXMoZXZlbnRzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShoYXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gZmV0Y2ggSEFSOiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrV2FpdEZvckFuZ3VsYXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvckFuZ3VsYXIodGhpcy5hdXRvV2FpdEZvckFuZ3VsYXJSb290U2VsZWN0b3IsIHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyU29mdFdhaXQsIHRoaXMuYXV0b1dhaXRGb3JBbmd1bGFyVGltZW91dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9MYW1iZGFUZXN0KHN0YXR1cykge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhbWJkYUNyZWRlbnRpYWxzID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHRoaXMud2Rpb09wdHMudXNlcixcclxuICAgICAgICAgICAgICAgIGFjY2Vzc0tleTogdGhpcy53ZGlvT3B0cy5rZXlcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5kcml2ZXIuc2Vzc2lvbklkO1xyXG4gICAgICAgICAgICBjb25zdCBsYW1iZGFBdXRvbWF0aW9uQ2xpZW50ID0gbGFtYmRhUmVzdENsaWVudC5BdXRvbWF0aW9uQ2xpZW50KFxyXG4gICAgICAgICAgICAgICAgbGFtYmRhQ3JlZGVudGlhbHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXNfaW5kOiBzdGF0dXMgPT09ICdQQVNTRUQnID8gJ3Bhc3NlZCcgOiAnZmFpbGVkJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgbGFtYmRhQXV0b21hdGlvbkNsaWVudC51cGRhdGVTZXNzaW9uQnlJZChzZXNzaW9uSWQsIHJlcXVlc3RCb2R5LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ1VuYWJsZSB0byBzZW5kIHJlc3VsdCBzdGF0dXMgdG8gTGFtYmRhVGVzdDogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfc2VuZFJlc3VsdFN0YXR1c1RvVGVzdGluZ0JvdChzdGF0dXMpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmRyaXZlci5zZXNzaW9uSWQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHRiID0gbmV3IFRlc3RpbmdCb3Qoe1xyXG4gICAgICAgICAgICAgICAgYXBpX2tleTogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgYXBpX3NlY3JldDogdGhpcy53ZGlvT3B0cy5rZXlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlc3REYXRhID0geyBcInRlc3Rbc3VjY2Vzc11cIiA6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyBcIjFcIiA6IFwiMFwiIH07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0Yi51cGRhdGVUZXN0KHRlc3REYXRhLCBzZXNzaW9uSWQsIGZ1bmN0aW9uKGVycm9yLCB0ZXN0RGV0YWlscykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBUZXN0aW5nQm90OiAnICsgZS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9zZW5kUmVzdWx0U3RhdHVzVG9Ccm93c2Vyc3RhY2soc3RhdHVzKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHkgPSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyA9PT0gJ1BBU1NFRCcgPyAncGFzc2VkJyA6ICdmYWlsZWQnXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICAgICAgdXJsOiBgaHR0cHM6Ly9hcGkuYnJvd3NlcnN0YWNrLmNvbS9hdXRvbWF0ZS9zZXNzaW9ucy8ke3RoaXMuZHJpdmVyLnNlc3Npb25JZH0uanNvbmAsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQVVQnLFxyXG4gICAgICAgICAgICAgICAganNvbjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBib2R5OiByZXF1ZXN0Qm9keSxcclxuICAgICAgICAgICAgICAgICdhdXRoJzoge1xyXG4gICAgICAgICAgICAgICAgICAgICd1c2VyJzogdGhpcy53ZGlvT3B0cy51c2VyLFxyXG4gICAgICAgICAgICAgICAgICAgICdwYXNzJzogdGhpcy53ZGlvT3B0cy5rZXksXHJcbiAgICAgICAgICAgICAgICAgICAgJ3NlbmRJbW1lZGlhdGVseSc6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdVbmFibGUgdG8gc2VuZCByZXN1bHQgc3RhdHVzIHRvIEJyb3dzZXJzdGFjazogJyArIGUudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfaXNTZWxlbm9pZEh1YihzZWxlbml1bVVybCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgICAgICB1cmw6IGAke3NlbGVuaXVtVXJsfWAsXHJcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAganNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVyciwgcmVzLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5ICYmIGJvZHkubGVuZ3RoICYmIGJvZHkuaW5kZXhPZignWW91IGFyZSB1c2luZyBTZWxlbm9pZCcpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignVW5hYmxlIHRvIHNlbmQgcmVzdWx0IHN0YXR1cyB0byBCcm93c2Vyc3RhY2s6ICcgKyBlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgdGhlIHRlc3QgaXMgcnVubmluZyBpbnNpZGUgU2VsZW5vaWQsIHRoZW4gZG93bmxvYWQgdGhlIHZpZGVvIGlmIHRlc3QgaGFzIGZhaWxlZFxyXG4gICAgYXN5bmMgX2FkZFNlbGVub2lkVmlkZW9Bc1Rlc3RBdHRhY2htZW50KGhhc0ZhaWxlZCA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZ09uU2VsZW5vaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZWNvcmRWaWRlbyAmJiAhaGFzRmFpbGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmlkZW9GaWxlVXJsID0gYCR7dGhpcy5zZWxlbml1bVVybEJhc2V9L3ZpZGVvLyR7dGhpcy5zZXNzaW9uSWR9Lm1wNGA7XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBgJHt0aGlzLnNlc3Npb25JZH0ubXA0YDtcclxuICAgICAgICB0aGlzLnJzLmF0dGFjaG1lbnRzLnB1c2gobW9kVXRpbHMubmV3VmlkZW9BdHRhY2htZW50KGZpbGVOYW1lLCB2aWRlb0ZpbGVVcmwpKTtcclxuICAgIH1cclxufVxyXG5cclxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsWUFBWTs7QUFDWjtBQUNBO0FB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
|