ccgf-game-tool 1.0.11 → 1.0.13
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/dist/main.js
CHANGED
|
@@ -319,14 +319,17 @@ function runNpm(action, specs) {
|
|
|
319
319
|
* 只接受 catalog 里存在的包名 —— 不把扩展变成"任意 npm 命令执行器"。
|
|
320
320
|
*/
|
|
321
321
|
async function runSharedAction(action, packageName) {
|
|
322
|
-
|
|
322
|
+
// 面板可能传字符串,也可能不小心包成数组 —— 两种都收,
|
|
323
|
+
// 别让"少一个括号"变成用户看到的"缺少包名"。
|
|
324
|
+
const wanted = Array.isArray(packageName) ? packageName[0] : packageName;
|
|
325
|
+
if (!wanted || typeof wanted !== 'string') {
|
|
323
326
|
throw new Error('缺少包名');
|
|
324
327
|
}
|
|
325
328
|
const before = await querySharedState();
|
|
326
|
-
const entry = before.modules.find((m) => m.name ===
|
|
329
|
+
const entry = before.modules.find((m) => m.name === wanted);
|
|
327
330
|
if (!entry) {
|
|
328
331
|
const known = before.modules.map((m) => m.name);
|
|
329
|
-
throw new Error(`不在可安装列表里的包:${
|
|
332
|
+
throw new Error(`不在可安装列表里的包:${wanted}`
|
|
330
333
|
+ (known.length ? `(当前列表:${known.join(', ')})` : '(当前列表为空)'));
|
|
331
334
|
}
|
|
332
335
|
// 安装要把**本地能解析到的依赖一起带上**:只装它一个的话,npm 会去 registry 找依赖,
|
|
@@ -346,7 +349,7 @@ async function runSharedAction(action, packageName) {
|
|
|
346
349
|
* 失败时一句**单行**摘要(面板消息区用)。完整输出在 `result` 里,由弹窗展示 ——
|
|
347
350
|
* 之前把整段 npm 输出塞进消息区,会把右栏挤变形并和消息叠在一起。
|
|
348
351
|
*/
|
|
349
|
-
message: result.ok ? null : (0, shared_1.summarizeNpmFailure)(action,
|
|
352
|
+
message: result.ok ? null : (0, shared_1.summarizeNpmFailure)(action, wanted, result) }, querySharedState());
|
|
350
353
|
}
|
|
351
354
|
/** 资源是否存在 */
|
|
352
355
|
function assetExists(url) {
|
|
@@ -403,6 +406,7 @@ exports.methods = {
|
|
|
403
406
|
* 落盘之后需要重启编辑器才生效 —— 这一点由面板文案告知,这里不假装热更新。
|
|
404
407
|
*/
|
|
405
408
|
syncExtension(name) {
|
|
409
|
+
var _a;
|
|
406
410
|
const root = projectPath();
|
|
407
411
|
const from = (0, path_1.join)(root, "node_modules", name);
|
|
408
412
|
if (!(0, fs_extra_1.existsSync)(from)) {
|
|
@@ -411,7 +415,13 @@ exports.methods = {
|
|
|
411
415
|
const to = (0, path_1.join)(root, "extensions", name.split("/").pop());
|
|
412
416
|
(0, fs_extra_1.removeSync)(to);
|
|
413
417
|
(0, fs_extra_1.copySync)(from, to);
|
|
414
|
-
|
|
418
|
+
// 回报**实际拷过去的版本**:这样面板能说"已更新到 x.y.z"而不是拿 latest 猜。
|
|
419
|
+
let version = null;
|
|
420
|
+
try {
|
|
421
|
+
version = (_a = JSON.parse((0, fs_extra_1.readFileSync)((0, path_1.join)(to, 'package.json'), 'utf8')).version) !== null && _a !== void 0 ? _a : null;
|
|
422
|
+
}
|
|
423
|
+
catch ( /* 读不到就算了,不编一个 */_b) { /* 读不到就算了,不编一个 */ }
|
|
424
|
+
return { ok: true, path: to, version };
|
|
415
425
|
},
|
|
416
426
|
async queryVersions(forceRegistry = false) {
|
|
417
427
|
const root = projectPath();
|
|
@@ -841,12 +851,12 @@ exports.methods = {
|
|
|
841
851
|
* 安装一个公共模块:**直接代跑 `npm install`**。
|
|
842
852
|
* 失败时抛出的错误里带着 npm 的原始输出,面板会原样展示。
|
|
843
853
|
*/
|
|
844
|
-
async installSharedModule(
|
|
845
|
-
return runSharedAction('install',
|
|
854
|
+
async installSharedModule(wanted) {
|
|
855
|
+
return runSharedAction('install', wanted);
|
|
846
856
|
},
|
|
847
857
|
/** 卸载一个公共模块:直接代跑 `npm uninstall` */
|
|
848
|
-
async uninstallSharedModule(
|
|
849
|
-
return runSharedAction('uninstall',
|
|
858
|
+
async uninstallSharedModule(wanted) {
|
|
859
|
+
return runSharedAction('uninstall', wanted);
|
|
850
860
|
},
|
|
851
861
|
};
|
|
852
862
|
/**
|
|
@@ -859,4 +869,4 @@ function load() { }
|
|
|
859
869
|
* @zh 卸载扩展时触发的方法
|
|
860
870
|
*/
|
|
861
871
|
function unload() { }
|
|
862
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQWcvQkEsb0JBQTBCO0FBTTFCLHdCQUE0QjtBQXQvQjVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQWlEO0FBQ2pELHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUtvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2Is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U0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCx3RUFBd0U7SUFFeEU7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQWU7UUFDcEMsT0FBTyxNQUFNLGdCQUFnQixDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFdBQW1CO1FBQ3pDLE9BQU8sZUFBZSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxXQUFtQjtRQUMzQyxPQUFPLGVBQWUsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNKLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxTQUFnQixJQUFJLEtBQUssQ0FBQztBQUUxQjs7O0dBR0c7QUFDSCxTQUFnQixNQUFNLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1pZ25vcmVcclxuaW1wb3J0IHBhY2thZ2VKU09OIGZyb20gJy4uL3BhY2thZ2UuanNvbic7XHJcbmltcG9ydCB7IHNwYXduLCBzcGF3blN5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcclxuaW1wb3J0IHsgY29weVN5bmMsIGV4aXN0c1N5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHJlbW92ZVN5bmMsIHN0YXRTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMtZXh0cmEnO1xyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7XHJcbiAgICBHQU1FUExBWV9ESVIsXHJcbiAgICBMQVlFUlMsXHJcbiAgICBNQU5BR0VSX0RJUixcclxuICAgIFBSRUZBQl9URU1QTEFURVMsXHJcbiAgICBQUkVGQUJfVEVNUExBVEVfTEFCRUxTLFxyXG4gICAgUkVHSVNUUllfQ0FDSEVfTVMsXHJcbiAgICBSRVNPVVJDRVNfRElSLFxyXG4gICAgVFByZWZhYlRlbXBsYXRlLFxyXG4gICAgVklFV1NfU1VCRElSLFxyXG59IGZyb20gJy4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgYnVpbGRPcmRlclBsYW4sIGxpc3RNYW5hZ2VycywgbGlzdE1vZHVsZXMsIGxpc3RWaWV3cywgcnVuRG9jdG9yIH0gZnJvbSAnLi9kb2N0b3InO1xyXG5pbXBvcnQge1xyXG4gICAgSURFTlRJRklFUl9SRSxcclxuICAgIG5vcm1hbGl6ZU1hbmFnZXJOYW1lLFxyXG4gICAgbm9ybWFsaXplTW9kdWxlLFxyXG4gICAgbm9ybWFsaXplVmlld05hbWUsXHJcbiAgICB2aWV3UHJlZmFiUGF0aCxcclxufSBmcm9tICcuL25hbWluZyc7XHJcbmltcG9ydCB7XHJcbiAgICBjb2xsZWN0U25hcHNob3QsXHJcbiAgICBmaW5kRGV2V29ya3NwYWNlU2hhcmVkUGFja2FnZXNEaXIsXHJcbiAgICBsaXN0TG9jYWxDYXRhbG9nLFxyXG4gICAgcmVhZEluc3RhbGxlZFBhY2thZ2UsXHJcbiAgICByZWFkUHJvamVjdE1hbmlmZXN0LFxyXG59IGZyb20gJy4vcHJvamVjdCc7XHJcbmltcG9ydCB7XHJcbiAgICBpc1NoYXJlZE1vZHVsZVBhY2thZ2UsXHJcbiAgICBLTk9XTl9QQUNLQUdFUyxcclxuICAgIHBhcnNlVmlld1Jlc3VsdCxcclxuICAgIHZpZXdBcmd2LFxyXG59IGZyb20gJy4vcmVnaXN0cnknO1xyXG5pbXBvcnQge1xyXG4gICAgTlBNX1RJTUVPVVRfTVMsXHJcbiAgICBidWlsZE5wbVJlc3VsdCxcclxuICAgIGJ1aWxkU2hhcmVkU3RhdHVzLFxyXG4gICAgY2F0YWxvZ0VudHJ5RnJvbUluc3RhbGxlZCxcclxuICAgIGNvbGxlY3RJbnN0YWxsU3BlY3MsXHJcbiAgICBkZWNvZGVQcm9jZXNzT3V0cHV0LFxyXG4gICAgZmluZFBhY2thZ2VSZWZzLFxyXG4gICAgZm9ybWF0TnBtQ29tbWFuZCxcclxuICAgIGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QsXHJcbiAgICBtZXJnZUNhdGFsb2csXHJcbiAgICBucG1TcGF3blNwZWMsXHJcbiAgICBzcGF3blNwZWNGb3IsXHJcbiAgICBzdW1tYXJpemVOcG1GYWlsdXJlLFxyXG59IGZyb20gJy4vc2hhcmVkJztcclxuaW1wb3J0IHtcclxuICAgIGJ1aWxkTWFuYWdlclNjcmlwdCxcclxuICAgIGJ1aWxkRXZlbnRzU2NyaXB0LFxyXG4gICAgYnVpbGRNb2RlbFNjcmlwdCxcclxuICAgIGJ1aWxkTW9kdWxlU2NyaXB0LFxyXG4gICAgYnVpbGRWaWV3UHJlZmFiLFxyXG4gICAgYnVpbGRWaWV3U2NyaXB0LFxyXG4gICAgaXNQcmVmYWJUZW1wbGF0ZSxcclxuICAgIFRGcmFtZXdvcmtJbXBvcnQsfSBmcm9tICcuL3RlbXBsYXRlcyc7XHJcbmltcG9ydCB7IElGaW5kaW5nLCBJTnBtUnVuUmVzdWx0LCBJSW5zdGFsbGVkUGFja2FnZVZpZXcsIElQcm9qZWN0U25hcHNob3QsIElTaGFyZWRDYXRhbG9nRW50cnkgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5paH5qGIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiDmianlsZXoh6rluKbnmoTkuK3mlofmlofmoYjooajjgIJcclxuICog5a6D5pei5piv44CMa2V5IOWFqOmbhuOAjeeahOadpea6kO+8jOS5n+aYr+e8lui+keWZqCBpMThuIOaLv+S4jeWIsOaXtueahOWFnOW6leOAglxyXG4gKi9cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcclxuY29uc3QgWkhfU1RSSU5HUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHJlcXVpcmUoJy4uL2kxOG4vemguanMnKTtcclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5bCP5bel5YW3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKiDlt6XnqIvmoLnnm67lvZUgKi9cclxuZnVuY3Rpb24gcHJvamVjdFBhdGgoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFZGl0b3IuUHJvamVjdC5wYXRoO1xyXG59XHJcblxyXG4vKipcclxuICog6L+Z5Liq5bel56iL5byV55So5qGG5p626K+l55So5ZOq56eN5YaZ5rOVOlxyXG4gKiAtIOW8gOWPkeW3peS9nOWMuijku5PlupPph4ws5qGG5p625rqQ56CB5ZyoIGFzc2V0cy9zY3JpcHRzL2ZyYW1ld29yayDkuIspIC0+IOebuOWvuei3r+W+hFxyXG4gKiAtIOijheaIkCBucG0g5YyF55qE5paw5bel56iLIC0+IOWMheWQjSBAY2NnZi9mcmFtZXdvcmtcclxuICpcclxuICog5Yik5o2u5pivXCLmoYbmnrbmupDnoIHlnKjkuI3lnKhcIizkuI4gY29uc3RhbnRzLnRzIOeahCBGUkFNRVdPUktfREVWX0RJUiDlkIzkuIDkuKrlgLzjgIJcclxuICovXHJcbmZ1bmN0aW9uIGZyYW1ld29ya0ltcG9ydE1vZGUoKTogVEZyYW1ld29ya0ltcG9ydCB7XHJcbiAgICByZXR1cm4gZXhpc3RzU3luYyhqb2luKHByb2plY3RQYXRoKCksICdhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsnKSkgPyAnd29ya3NwYWNlJyA6ICdwYWNrYWdlJztcclxufVxyXG5cclxuLyoqIOebuOWvuei3r+W+hCAtPiBkYjovLyDotYTmupAgdXJsICovXHJcbmZ1bmN0aW9uIGRiVXJsKHJlbDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnZGI6Ly8nICsgcmVsLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcclxufVxyXG5cclxuLyoqIHV1aWQgLT4g6aKE5Yi25L2T6YeM6ISa5pys57uE5Lu255qEIF9fdHlwZV9fICovXHJcbmZ1bmN0aW9uIGNvbXByZXNzVXVpZCh1dWlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEVkaXRvci5VdGlscy5VVUlELmNvbXByZXNzVVVJRCh1dWlkLCBmYWxzZSk7XHJcbn1cclxuXHJcbi8qKiDlj5bkuIDku73lt6XnqIvlv6vnhafvvIjkvZPmo4DjgIHliJfooajpg73ln7rkuo7lroPvvIzkv53or4HpnaLmnb/nnIvliLDnmoTlkozkvZPmo4DnnIvliLDnmoTmmK/lkIzkuIDku73mlbDmja7vvIkgKi9cclxuZnVuY3Rpb24gc25hcHNob3QoKTogSVByb2plY3RTbmFwc2hvdCB7XHJcbiAgICByZXR1cm4gY29sbGVjdFNuYXBzaG90KHByb2plY3RQYXRoKCksIGNvbXByZXNzVXVpZCk7XHJcbn1cclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogcmVnaXN0cnkg5pCc57Si57uT5p6c55qE57yT5a2Y44CCXHJcbiAqXHJcbiAqIOS4gOasoeaQnOe0ouWunua1iyAxfjQg56eSIOKAlOKAlCDogIzpnaLmnb/liIfpobXjgIHoo4XlrozliLfmlrDpg73kvJrosIPnlKjmn6Xor6LvvIzkuI3og73mr4/mrKHpg73ljrvmkJzjgIJcclxuICog5pi+5byP54K544CM5Yi35paw44CN5pe255SoIGBmb3JjZWAg57uV6L+H5a6D44CCXHJcbiAqL1xyXG5sZXQgcmVnaXN0cnlDYWNoZTogeyBhdDogbnVtYmVyOyBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W107IGVycm9yOiBzdHJpbmcgfCBudWxsIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbi8qKlxyXG4gKiAqKuWksei0peS4jeaKm+W8guW4uCzkuZ/kuI3orqnpnaLmnb/nqbrnnYDoo4XkvZxcIuayoeacieaooeWdl1wiKio65oqK5Y6f5Zug5LiA6LW35Zue5LygLOmdouadv+aYvuekuuaIkOaPkOekuiDigJTigJRcclxuICog6L+Z5piv5pyA5Yid5bCx5a6a5LiL55qE6KaB5rGCKFwi5rKh5pyJ572R57uc5bCx5o+Q56S65bCx6KGM5LqGXCIp44CCXHJcbiAqXHJcbiAqIOi/nOeoi+S/oeaBr+eahOadpea6kDoqKumAkOS4qiBgbnBtIHZpZXcgPG5hbWU+IC0tanNvbmAg57K+56Gu5p+l6K+iKirjgIJcclxuICpcclxuICog5pu+57uP55SoIGBucG0gc2VhcmNoYCArIOWFs+mUruivjSzlt7Llup/lvIMg4oCU4oCUIOaQnOe0ouWvuSBzY29wZWQg5YyFKGBAY2NnZi8qYCnlvojkuI3lj6/pnaAsXHJcbiAqIOW4uOW4uOaQnOS4jeWIsCzkuo7mmK9cIuWFrOWFseaooeWdl+i/nOeoi+WIl+ihqFwi5ZKMXCLmnIDmlrDniYjmnKxcIumDveS8muaYr+epuueahCjlrp7mtYvouKnov4cp44CCXHJcbiAqIOS7o+S7tzrljIXlkI3opoHnu7TmiqTlnKggcmVnaXN0cnkudHMg55qEIEtOT1dOX1BBQ0tBR0VTIOmHjCzmlrDlop7ljIXml7bliqDkuIDooYzjgIJcclxuICpcclxuICog5LmL5omA5Lul55SoIG5wbSDlkb3ku6TogIzkuI3mmK/oh6rlt7Hlj5EgSFRUUFMg6K+35rGCOm5wbSDkvJroh6rliqjluKbkuIrlt6XnqIvnmoQgYC5ucG1yY2BcclxuICogKOengeaciea6kOOAgemVnOWDj+OAgeS7o+eQhuetiemFjee9rumDvei3n+edgOi1sCks5LiN55So5oiR5Lus6YeN5aSN5a6e546w5LiA6YGN44CCXHJcbiAqL1xyXG4vKipcclxuICogKirlvILmraUqKui3keS4gOasoSBucG3jgIJcclxuICpcclxuICog5Li65LuA5LmI5LiN6IO957un57ut55SoIHNwYXduU3luYzrov5nkuKrlh73mlbDlnKgqKue8lui+keWZqOS4u+i/m+eoiyoq6YeM6KKr6LCD55SoLHNwYXduU3luYyDkvJrmiorkuLvlvqrnjq9cclxuICog5pW05Liq5Y2g5L2PIOKAlOKAlCDmr4/mn6XkuIDkuKrljIXlh6Dnmb7mr6vnp5Is5Yeg5Liq5YyF5LiL5p2l57yW6L6R5ZmoIFVJIOWwseWNoeS9j+OAgeeCueWIq+WkhOayoeWPjeW6lCjlrp7mtYsp44CCXHJcbiAqIOaNouaIkCBzcGF3biArIFByb21pc2U65ZCM5qC3562J57uT5p6cLOS9huS4remXtOiuqeWHuuS6i+S7tuW+queOryznvJbovpHlmajkuI3lhrvnu5PjgIJcclxuICovXHJcbi8qKlxyXG4gKiDmn6Xov5znqIvkv6Hmga/nlKjnmoQqKuefrSoq6LaF5pe244CCXHJcbiAqXHJcbiAqIOS4jeiDveeUqCBOUE1fVElNRU9VVF9NUygxMjAg56eSKTrpgqPmmK/nu5lcIuWuieijhVwi55So55qELOeUqOaIt+WPr+S7peetiTtcclxuICog6ICMXCLmn6XkuIDkuIvmnIDmlrDniYjmnKxcIuimgeaYr+etieS4pOWIhumSnyzpgqPkuIDpobXlsLHnrYnkuo7lup/kuobjgIJcclxuICovXHJcbmNvbnN0IFJFR0lTVFJZX1FVRVJZX1RJTUVPVVRfTVMgPSAyNTAwMDtcclxuXHJcbi8qKiDlkIzkuIDml7bliLvlj6rlhYHorrjkuIDkuKrlkI7lj7DliLfmlrDlnKjot5Es5ZCm5YiZ5q+P5qyh5YiH6aG1562+6YO95Lya5YaN6LW35LiA6L2uIG5wbSAqL1xyXG5sZXQgcmVnaXN0cnlSZWZyZXNoaW5nID0gZmFsc2U7XHJcblxyXG5mdW5jdGlvbiBydW5OcG1Bc3luYyhcclxuICAgIGNvbW1hbmQ6IHN0cmluZyxcclxuICAgIHNwYXduU3BlYzogeyBjb21tYW5kOiBzdHJpbmc7IGFyZ3M6IHN0cmluZ1tdOyB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM/OiBib29sZWFuIH0sXHJcbiAgICBjd2Q6IHN0cmluZyxcclxuICAgIHRpbWVvdXRNczogbnVtYmVyID0gTlBNX1RJTUVPVVRfTVMsXHJcbik6IFByb21pc2U8eyByZXN1bHQ6IElOcG1SdW5SZXN1bHQ7IHN0ZG91dDogc3RyaW5nIH0+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcclxuICAgICAgICBjb25zdCBlcnJDaHVua3M6IEJ1ZmZlcltdID0gW107XHJcbiAgICAgICAgbGV0IGNoaWxkOiBhbnk7XHJcbiAgICAgICAgY29uc3QgZmluaXNoID0gKGV4aXRDb2RlOiBudW1iZXIgfCBudWxsLCBzcGF3bkVycm9yOiB7IGNvZGU/OiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9IHwgbnVsbCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzdGRvdXQgPSBkZWNvZGVQcm9jZXNzT3V0cHV0KEJ1ZmZlci5jb25jYXQoY2h1bmtzKSk7XHJcbiAgICAgICAgICAgIHJlc29sdmUoe1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZCxcclxuICAgICAgICAgICAgICAgICAgICBleGl0Q29kZSxcclxuICAgICAgICAgICAgICAgICAgICBzdGRvdXQsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RkZXJyOiBkZWNvZGVQcm9jZXNzT3V0cHV0KEJ1ZmZlci5jb25jYXQoZXJyQ2h1bmtzKSksXHJcbiAgICAgICAgICAgICAgICAgICAgc3Bhd25FcnJvcixcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgc3Rkb3V0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNoaWxkID0gc3Bhd24oc3Bhd25TcGVjLmNvbW1hbmQsIHNwYXduU3BlYy5hcmdzLCB7XHJcbiAgICAgICAgICAgICAgICBjd2QsXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dzSGlkZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogc3Bhd25TcGVjLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICAgICAgZmluaXNoKG51bGwsIHsgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7IHRyeSB7IGNoaWxkLmtpbGwoKTsgfSBjYXRjaCB7IC8qIOW3sue7j+mAgOS6hiAqLyB9IH0sIHRpbWVvdXRNcyk7XHJcbiAgICAgICAgY2hpbGQuc3Rkb3V0Py5vbignZGF0YScsIChkOiBCdWZmZXIpID0+IGNodW5rcy5wdXNoKGQpKTtcclxuICAgICAgICBjaGlsZC5zdGRlcnI/Lm9uKCdkYXRhJywgKGQ6IEJ1ZmZlcikgPT4gZXJyQ2h1bmtzLnB1c2goZCkpO1xyXG4gICAgICAgIGNoaWxkLm9uKCdlcnJvcicsIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICBmaW5pc2gobnVsbCwgeyBjb2RlOiBlcnI/LmNvZGUsIG1lc3NhZ2U6IGVycj8ubWVzc2FnZSA/IFN0cmluZyhlcnIubWVzc2FnZSkgOiBTdHJpbmcoZXJyKSB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjaGlsZC5vbignY2xvc2UnLCAoY29kZTogbnVtYmVyIHwgbnVsbCkgPT4ge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xyXG4gICAgICAgICAgICBpZiAodGltZXIgPT09IG51bGwpIHJldHVybjtcclxuICAgICAgICAgICAgZmluaXNoKGNvZGUsIG51bGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuLyoqXHJcbiAqIOi/nOeoi+S/oeaBryjluKbnvJPlrZgp44CCKirov5nkuKrlh73mlbDmsLjov5zkuI3pmLvloZ7jgIHmsLjov5zkuI0gYXdhaXQg5aSW6YOo6L+b56iLKirjgIJcclxuICpcclxuICog5Li65LuA5LmI6L+Z5LmI6K6+6K6hOuWug+i3keWcqOe8lui+keWZqOS4u+i/m+eoi+mHjCzogIwgbnBtIOavj+S4qui/m+eoi+imgSAxfjMg56eSLOe9kee7nOWdj+S6hui/mOWPr+iDveS4gOebtOS4jei/lOWbnuOAglxyXG4gKiDml6nlhYjnlKjlkIzmraUgc3Bhd24gKyDpgJDkuKrmn6Us6KGo546w5bCx5pivXCLngrnlvIDov5nkuIDpobUs57yW6L6R5Zmo5Yir5aSE5Lmf5rKh5Y+N5bqUXCLjgIJcclxuICog546w5ZyoOuWRveS4ree8k+WtmOeri+WIu+i/lOWbnjvov4fmnJ/liJkqKuWFiOi/lOWbnuaXp+WAvCoqLOWQjOaXtuWQjuWPsOWIt+aWsCjkuI0gYXdhaXQpO1xyXG4gKiDku47msqHmiJDlip/ov4fml7bov5Tlm57mmI7noa7nmoTmj5DnpLrmlofmoYgs6ICM5LiN5piv6K6p6LCD55So5pa55bmy562J44CCXHJcbiAqXHJcbiAqIOWksei0peS4jeaKm+W8guW4uCzkuZ/kuI3orqnpnaLmnb/nqbrnnYDoo4XkvZxcIuayoeacieaooeWdl1wiOuaKiuWOn+WboOS4gOi1t+WbnuS8oCzpnaLmnb/mmL7npLrmiJDmj5DnpLog4oCU4oCUXHJcbiAqIOi/meaYr+acgOWIneWwseWumuS4i+eahOimgeaxgihcIuayoeaciee9kee7nOWwseaPkOekuuWwseihjOS6hlwiKeOAglxyXG4gKi9cclxuZnVuY3Rpb24gcXVlcnlSZWdpc3RyeShmb3JjZTogYm9vbGVhbik6IHsgZW50cmllczogSVNoYXJlZENhdGFsb2dFbnRyeVtdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IHtcclxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICBjb25zdCBmcmVzaCA9IHJlZ2lzdHJ5Q2FjaGUgJiYgbm93IC0gcmVnaXN0cnlDYWNoZS5hdCA8IFJFR0lTVFJZX0NBQ0hFX01TO1xyXG5cclxuICAgIGlmICghZm9yY2UgJiYgZnJlc2gpIHtcclxuICAgICAgICByZXR1cm4geyBlbnRyaWVzOiByZWdpc3RyeUNhY2hlIS5lbnRyaWVzLCBlcnJvcjogcmVnaXN0cnlDYWNoZSEuZXJyb3IgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDpnIDopoHmm7TmlrA65ZCO5Y+w5Y675Yi3LOS4jeWcqOi/memHjOetiVxyXG4gICAgdm9pZCByZWZyZXNoUmVnaXN0cnkoKTtcclxuXHJcbiAgICBpZiAocmVnaXN0cnlDYWNoZSkge1xyXG4gICAgICAgIHJldHVybiB7IGVudHJpZXM6IHJlZ2lzdHJ5Q2FjaGUuZW50cmllcywgZXJyb3I6IHJlZ2lzdHJ5Q2FjaGUuZXJyb3IgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgZW50cmllczogW10sXHJcbiAgICAgICAgZXJyb3I6IHJlZ2lzdHJ5UmVmcmVzaGluZyA/ICfmraPlnKjojrflj5bov5znqIvkv6Hmga/igKYnIDogJ+i/nOeoi+S/oeaBr+aaguS4jeWPr+eUqCjnprvnur/miJbotoXml7YpJyxcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKiDnnJ/mraPnmoTmi4nlj5Y65byC5q2l44CB5pyJ5bm25Y+R6Ze444CB5Y2V5YyF5aSx6LSl5LiN5ouW5Z6u5pW05Lu95YiX6KGoICovXHJcbmFzeW5jIGZ1bmN0aW9uIHJlZnJlc2hSZWdpc3RyeSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChyZWdpc3RyeVJlZnJlc2hpbmcpIHJldHVybjtcclxuICAgIHJlZ2lzdHJ5UmVmcmVzaGluZyA9IHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IGVudHJpZXM6IElTaGFyZWRDYXRhbG9nRW50cnlbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZhaWx1cmVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgS05PV05fUEFDS0FHRVMpIHtcclxuICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9ICducG0gdmlldyAnICsgbmFtZSArICcgLS1qc29uJztcclxuICAgICAgICAgICAgY29uc3Qgc3Bhd25TcGVjID0gc3Bhd25TcGVjRm9yKFxyXG4gICAgICAgICAgICAgICAgW3Byb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyAnbnBtLmNtZCcgOiAnbnBtJywgLi4udmlld0FyZ3YobmFtZSldLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCB7IHJlc3VsdCwgc3Rkb3V0IH0gPSBhd2FpdCBydW5OcG1Bc3luYyhjb21tYW5kLCBzcGF3blNwZWMsIHByb2plY3RQYXRoKCksIFJFR0lTVFJZX1FVRVJZX1RJTUVPVVRfTVMpO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5vaykge1xyXG4gICAgICAgICAgICAgICAgZmFpbHVyZXMucHVzaChuYW1lICsgJzonICsgKHJlc3VsdC5oaW50ID8/ICgn6LaF5pe25oiW6YCA5Ye656CBICcgKyAocmVzdWx0LmV4aXRDb2RlID8/ICfmnKrnn6UnKSkpKTtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gcGFyc2VWaWV3UmVzdWx0KHN0ZG91dCk7XHJcbiAgICAgICAgICAgIGlmIChlbnRyeSkgZW50cmllcy5wdXNoKGVudHJ5KTtcclxuICAgICAgICAgICAgZWxzZSBmYWlsdXJlcy5wdXNoKG5hbWUgKyAnOui/lOWbnuWGheWuueS4jeaYr+mihOacn+eahCBKU09OIOW9oueKticpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gKirpg6jliIYqKuWksei0peS5n+imgeaKpeWHuuadpTrml6nlhYjlj6rlnKhcIuWFqOmDqOWksei0pVwi5pe25omN5Zue5LygLFxuICAgICAgICAvLyDnu5PmnpxcIjMg5Liq5p+l5YiwICsgMSDkuKrotoXml7ZcIuWujOWFqOmdmem7mCDigJTigJQg6Z2i5p2/5pi+56S6XCLml6Dms5Xnoa7orqRcIuWNtOS4jee7meS7u+S9leWOn+WboOOAglxuICAgICAgICBjb25zdCBlcnJvciA9IGZhaWx1cmVzLmxlbmd0aCA+IDAgPyAoJ+mDqOWIhui/nOeoi+S/oeaBr+iOt+WPluWksei0pTonICsgZmFpbHVyZXMuam9pbignOycpKSA6IG51bGw7XHJcbiAgICAgICAgcmVnaXN0cnlDYWNoZSA9IHsgYXQ6IERhdGUubm93KCksIGVudHJpZXMsIGVycm9yIH07XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIHJlZ2lzdHJ5UmVmcmVzaGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICog57uE6KOF5YWs5YWx5qih5Z2X55qE5a6M5pW054q25oCB44CCXHJcbiAqXHJcbiAqIOS4ieS4quadpea6kOWQiOi1t+adpeaJjeaYr+WujOaVtOWIl+ihqO+8mlxyXG4gKiAxLiDmnKzmoYbmnrYqKuW8gOWPkeW3peS9nOWMuioq6YeM55qEIGBwYWNrYWdlcy9zaGFyZWQvKmDvvIjlj6rmnInmnKzku5PlupPmiY3orqTvvIzop4FcclxuICogICAgYGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0RpcmDvvInigJTigJQg6IO957uZ5Ye6IGBmaWxlOmAg5a6J6KOF6K+05piO56ym77ybXHJcbiAqIDIuIGBub2RlX21vZHVsZXNgIOmHjOW3sue7j+ijheS6hueahO+8iOmdoOWMhea4heWNlemHjOeahOagh+iusOiupOWHuuadpe+8ie+8m1xyXG4gKiAzLiAqKui/nOeoiyByZWdpc3RyeSoq77yI5oyJ5Y+R546w5YWz6ZSu6K+N5pCc57Si77yJ4oCU4oCUIOimhuebllwi6L+Y5rKh6KOF44CB5L2G5Y+v5Lul6KOFXCLnmoTpgqPkupvjgIJcclxuICpcclxuICog5Yi75oSPKirkuI0qKumdoOWMheWQjeWMuemFjeadpeivhuWIq+WFrOWFseaooeWdl++8mnNjb3BlIOi/mOayoeWumu+8iOingSBST0FETUFQIOeahCBTMWHvvInvvIxcclxuICog5o2i5LiqIHNjb3BlIOWwseiupOS4jeWHuuadpeS6huOAglxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gcXVlcnlTaGFyZWRTdGF0ZShmb3JjZVJlZ2lzdHJ5ID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgY29uc3QgbWFuaWZlc3QgPSByZWFkUHJvamVjdE1hbmlmZXN0KHJvb3QpO1xyXG4gICAgY29uc3QgcHJvamVjdERlcGVuZGVuY2llczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgICAuLi4obWFuaWZlc3Q/LmRlcGVuZGVuY2llcyA/PyB7fSksXHJcbiAgICAgICAgLi4uKG1hbmlmZXN0Py5kZXZEZXBlbmRlbmNpZXMgPz8ge30pLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzaGFyZWREaXIgPSBmaW5kRGV2V29ya3NwYWNlU2hhcmVkUGFja2FnZXNEaXIocm9vdCk7XHJcbiAgICBjb25zdCBsb2NhbCA9IHNoYXJlZERpciA/IGxpc3RMb2NhbENhdGFsb2coc2hhcmVkRGlyLCByb290KSA6IFtdO1xyXG5cclxuICAgIGNvbnN0IGluc3RhbGxlZFNoYXJlZDogSVNoYXJlZENhdGFsb2dFbnRyeVtdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMocHJvamVjdERlcGVuZGVuY2llcykpIHtcclxuICAgICAgICBjb25zdCBwa2cgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBuYW1lKTtcclxuICAgICAgICBpZiAocGtnLmluc3RhbGxlZCAmJiBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0KHBrZy5tYW5pZmVzdCkpIHtcclxuICAgICAgICAgICAgaW5zdGFsbGVkU2hhcmVkLnB1c2goY2F0YWxvZ0VudHJ5RnJvbUluc3RhbGxlZChuYW1lLCBwa2cubWFuaWZlc3QsIHBrZy52ZXJzaW9uKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlZ2lzdHJ5ID0gYXdhaXQgcXVlcnlSZWdpc3RyeShmb3JjZVJlZ2lzdHJ5KTtcclxuICAgIC8vIOahhuaetuS4juaJqeWxleS4jeaYr+WFrOWFseaooeWdlyzomb3nhLblroPku6zkuZ/oo4XnnYDjgIHkuZ/lnKggS05PV05fUEFDS0FHRVMg6YeMIOKAlOKAlCDkuKTlpITpg73opoHmu6TmjoksXHJcbiAgICAvLyDlkKbliJnkvb/nlKjogIXnmoRcIuWFrOWFseaooeWdl1wi5YiX6KGo6YeM5Lya5YaS5Ye65qGG5p625ZKM57yW6L6R5Zmo5omp5bGV44CCXHJcbiAgICBjb25zdCBzaGFyZWRPbmx5ID0gKGU6IElTaGFyZWRDYXRhbG9nRW50cnkpID0+IGlzU2hhcmVkTW9kdWxlUGFja2FnZShlLm5hbWUpO1xyXG4gICAgY29uc3QgY2F0YWxvZyA9IG1lcmdlQ2F0YWxvZyhcclxuICAgICAgICBtZXJnZUNhdGFsb2cobG9jYWwsIHJlZ2lzdHJ5LmVudHJpZXMuZmlsdGVyKHNoYXJlZE9ubHkpKSxcclxuICAgICAgICBpbnN0YWxsZWRTaGFyZWQuZmlsdGVyKHNoYXJlZE9ubHkpLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBcIuWPr+abtOaWsFwi6KaB6Z2g6L+c56iL55qE5pyA5paw54mI5pys5Y+377yM6ICMIG1lcmdlQ2F0YWxvZyDorqnmnKzlnLDpobnkvJjlhYjvvIjlkIzlkI3nmoTov5znqIvpobnkvJrooqvnm5bmjonvvInvvIxcclxuICAgIC8vIOaJgOS7pei/memHjOWNleeLrOeVmeS4gOS7veWMheWQjSAtPiDov5znqIvmnIDmlrDniYjmnKzjgIJcclxuICAgIGNvbnN0IHJlZ2lzdHJ5VmVyc2lvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVnaXN0cnkuZW50cmllcykge1xyXG4gICAgICAgIHJlZ2lzdHJ5VmVyc2lvbnNbZW50cnkubmFtZV0gPSBlbnRyeS52ZXJzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOimgeafpeWunuaXtueKtuaAgeeahOWMhSA9IOWIl+ihqOmHjOeahCArIOWug+S7rOWjsOaYjueahOS+nei1luOAglxyXG4gICAgLy8g5L6d6LWW5Y+v6IO95LiN5Zyo5YiX6KGo6YeM77yI5pmu6YCaIG5wbSDljIXvvInvvIzkvYblroPoo4XmsqHoo4XlkIzmoLfopoHmmL7npLrlh7rmnaXjgIJcclxuICAgIGNvbnN0IHdhbnRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBjYXRhbG9nKSB7XHJcbiAgICAgICAgd2FudGVkLmFkZChlbnRyeS5uYW1lKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGRlcCBvZiBPYmplY3Qua2V5cyhlbnRyeS5kZWNsYXJlZERlcGVuZGVuY2llcykpIHtcclxuICAgICAgICAgICAgd2FudGVkLmFkZChkZXApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGluc3RhbGxlZFBhY2thZ2VzOiBSZWNvcmQ8c3RyaW5nLCBJSW5zdGFsbGVkUGFja2FnZVZpZXc+ID0ge307XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygd2FudGVkKSB7XHJcbiAgICAgICAgY29uc3QgcGtnID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgbmFtZSk7XHJcbiAgICAgICAgaW5zdGFsbGVkUGFja2FnZXNbbmFtZV0gPSB7XHJcbiAgICAgICAgICAgIGluc3RhbGxlZDogcGtnLmluc3RhbGxlZCxcclxuICAgICAgICAgICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXHJcbiAgICAgICAgICAgIGlzU2hhcmVkTW9kdWxlOiBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0KHBrZy5tYW5pZmVzdCksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgIGNvbnN0IHNvdXJjZXMgPSB7IC4uLnNuYXAuZ2FtZXBsYXlTb3VyY2VzLCAuLi5zbmFwLm1hbmFnZXJTb3VyY2VzIH07XHJcblxyXG4gICAgY29uc3QgbW9kdWxlcyA9IGNhdGFsb2cubWFwKChlbnRyeSkgPT4gYnVpbGRTaGFyZWRTdGF0dXMoZW50cnksIHtcclxuICAgICAgICBwcm9qZWN0RGVwZW5kZW5jaWVzLFxyXG4gICAgICAgIGluc3RhbGxlZFBhY2thZ2VzLFxyXG4gICAgICAgIHJlZmVyZW5jZXM6IHsgW2VudHJ5Lm5hbWVdOiBmaW5kUGFja2FnZVJlZnMoc291cmNlcywgZW50cnkubmFtZSkgfSxcclxuICAgICAgICBjYXRhbG9nLFxyXG4gICAgICAgIHJlZ2lzdHJ5VmVyc2lvbnMsXHJcbiAgICB9KSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBtb2R1bGVzLFxyXG4gICAgICAgIC8qKiDmnKzlnLDlronoo4XmupDvvJsqKuWPquacieacrOahhuaetueahOW8gOWPkeS7k+W6k+mHjOaJjemdniBudWxsKirvvIjpnaLlkJHnlKjmiLfnmoTlt6XnqIvph4zmsLjov5zmmK8gbnVsbO+8iSAqL1xyXG4gICAgICAgIGxvY2FsU291cmNlOiBzaGFyZWREaXIsXHJcbiAgICAgICAgLyoqIOW3peeoi+acieWPr+ivu+eahCBwYWNrYWdlLmpzb24g5ZCXICovXHJcbiAgICAgICAgaGFzTWFuaWZlc3Q6IG1hbmlmZXN0ICE9PSBudWxsLFxyXG4gICAgICAgIC8qKiDov5znqIvliJfooajmi4nlj5blpLHotKXnmoTljp/lm6DvvJvkuLogbnVsbCDooajnpLrov5nmrKHmmK/miJDlip/nmoTvvIjmiJbnlKjkuobnvJPlrZjvvIkgKi9cclxuICAgICAgICByZWdpc3RyeUVycm9yOiByZWdpc3RyeS5lcnJvcixcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDot5HkuIDmrKEgbnBt44CCXHJcbiAqXHJcbiAqIOWFqOeoiyoq5LiN5oqb5byC5bi4KirvvJrpgIDlh7rnoIHjgIFzdGRvdXTjgIFzdGRlcnLjgIHku6Xlj4ogc3Bhd24g6Ieq6Lqr55qE5aSx6LSl6YO95pS26L+bIElOcG1SdW5SZXN1bHRcclxuICog5Zue5Lyg57uZ6Z2i5p2/IOKAlOKAlCDnlKjmiLfopoHnnIvnmoTmmK8gbnBtIOiHquW3seivtOeahOivne+8jOiAjOS4jeaYr+S4gOWPpei9rOi/sOeahFwi5a6J6KOF5aSx6LSlXCLjgIJcclxuICovXHJcbmZ1bmN0aW9uIHJ1bk5wbShhY3Rpb246ICdpbnN0YWxsJyB8ICd1bmluc3RhbGwnLCBzcGVjczogc3RyaW5nW10pOiBJTnBtUnVuUmVzdWx0IHtcclxuICAgIGNvbnN0IHNwYXduU3BlYyA9IG5wbVNwYXduU3BlYyhhY3Rpb24sIHNwZWNzKTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgLy8gMS4gKirkuI3mjIflrpogZW5jb2RpbmcqKu+8muaLv+WIsOWOn+WniyBCdWZmZXIg6Ieq5bex6Kej56CB77yM5ZCm5YiZIGNtZCDnmoQgR0JLIOa2iOaBr+S8muWPmOS5seegge+8m1xyXG4gICAgICAgIC8vIDIuICoqd2luZG93c1ZlcmJhdGltQXJndW1lbnRzIOW/hemhu+adpeiHqiBzcGF3blNwZWMqKu+8muWwkeS6huWug++8jE5vZGUg5Lya5oqK5oiR5Yqg5aW955qEXHJcbiAgICAgICAgLy8gICAg5byV5Y+35YaN6L2s5LmJ5LiA6YGN77yMY21kIOaUtuWIsCBgXFxcIm5wbS5jbWQgaW5zdGFsbCAuLi5cXFwiYO+8jOS6juaYr+aVtOihjOiiq+W9k+aIkOWRveS7pOWQjVxyXG4gICAgICAgIC8vICAgIO+8iOaKpVwiJ25wbS5jbWQgaW5zdGFsbCAuLi4nIOS4jeaYr+WGhemDqOaIluWklumDqOWRveS7pFwi77yMbnBtIOagueacrOayoeiiq+WQr+WKqO+8ieOAglxyXG4gICAgICAgIGNvbnN0IHNwYXduZWQgPSBzcGF3blN5bmMoc3Bhd25TcGVjLmNvbW1hbmQsIHNwYXduU3BlYy5hcmdzLCB7XHJcbiAgICAgICAgICAgIGN3ZDogcHJvamVjdFBhdGgoKSxcclxuICAgICAgICAgICAgdGltZW91dDogTlBNX1RJTUVPVVRfTVMsXHJcbiAgICAgICAgICAgIHdpbmRvd3NIaWRlOiB0cnVlLFxyXG4gICAgICAgICAgICBtYXhCdWZmZXI6IDE2ICogMTAyNCAqIDEwMjQsXHJcbiAgICAgICAgICAgIHdpbmRvd3NWZXJiYXRpbUFyZ3VtZW50czogc3Bhd25TcGVjLndpbmRvd3NWZXJiYXRpbUFyZ3VtZW50cyxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICBjb21tYW5kOiBmb3JtYXROcG1Db21tYW5kKGFjdGlvbiwgc3BlY3MpLFxyXG4gICAgICAgICAgICBleGl0Q29kZTogdHlwZW9mIHNwYXduZWQuc3RhdHVzID09PSAnbnVtYmVyJyA/IHNwYXduZWQuc3RhdHVzIDogbnVsbCxcclxuICAgICAgICAgICAgc3Rkb3V0OiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3Rkb3V0KSxcclxuICAgICAgICAgICAgc3RkZXJyOiBkZWNvZGVQcm9jZXNzT3V0cHV0KHNwYXduZWQuc3RkZXJyKSxcclxuICAgICAgICAgICAgc3Bhd25FcnJvcjogc3Bhd25lZC5lcnJvclxyXG4gICAgICAgICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29kZTogKHNwYXduZWQuZXJyb3IgYXMgTm9kZUpTLkVycm5vRXhjZXB0aW9uKS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHNwYXduZWQuZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkTnBtUmVzdWx0KHtcclxuICAgICAgICAgICAgY29tbWFuZDogZm9ybWF0TnBtQ29tbWFuZChhY3Rpb24sIHNwZWNzKSxcclxuICAgICAgICAgICAgZXhpdENvZGU6IG51bGwsXHJcbiAgICAgICAgICAgIHN0ZG91dDogJycsXHJcbiAgICAgICAgICAgIHN0ZGVycjogJycsXHJcbiAgICAgICAgICAgIHNwYXduRXJyb3I6IHsgbWVzc2FnZTogZXJyPy5tZXNzYWdlID8gU3RyaW5nKGVyci5tZXNzYWdlKSA6IFN0cmluZyhlcnIpIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDku6Pot5EgbnBtIOijhSAvIOWNuOS4gOS4quWFrOWFseaooeWdl++8jOeEtuWQjuWbnuS4gOS7veWIt+aWsOi/h+eahOeKtuaAgeOAglxyXG4gKlxyXG4gKiDlj6rmjqXlj5cgY2F0YWxvZyDph4zlrZjlnKjnmoTljIXlkI0g4oCU4oCUIOS4jeaKiuaJqeWxleWPmOaIkFwi5Lu75oSPIG5wbSDlkb3ku6TmiafooYzlmahcIuOAglxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gcnVuU2hhcmVkQWN0aW9uKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcsIHBhY2thZ2VOYW1lOiBzdHJpbmcpIHtcclxuICAgIGlmICghcGFja2FnZU5hbWUgfHwgdHlwZW9mIHBhY2thZ2VOYW1lICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcign57y65bCR5YyF5ZCNJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmVmb3JlID0gYXdhaXQgcXVlcnlTaGFyZWRTdGF0ZSgpO1xyXG4gICAgY29uc3QgZW50cnkgPSBiZWZvcmUubW9kdWxlcy5maW5kKChtKSA9PiBtLm5hbWUgPT09IHBhY2thZ2VOYW1lKTtcclxuICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICBjb25zdCBrbm93biA9IGJlZm9yZS5tb2R1bGVzLm1hcCgobSkgPT4gbS5uYW1lKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGDkuI3lnKjlj6/lronoo4XliJfooajph4znmoTljIXvvJoke3BhY2thZ2VOYW1lfWBcclxuICAgICAgICAgICAgKyAoa25vd24ubGVuZ3RoID8gYO+8iOW9k+WJjeWIl+ihqO+8miR7a25vd24uam9pbignLCAnKX3vvIlgIDogJ++8iOW9k+WJjeWIl+ihqOS4uuepuu+8iScpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5a6J6KOF6KaB5oqKKirmnKzlnLDog73op6PmnpDliLDnmoTkvp3otZbkuIDotbfluKbkuIoqKu+8muWPquijheWug+S4gOS4queahOivne+8jG5wbSDkvJrljrsgcmVnaXN0cnkg5om+5L6d6LWW77yMXHJcbiAgICAvLyDogIzmnKzlnLDmupDph4znmoTkvp3otZblubbmsqHmnInlj5HluIMg4oCU4oCUIOW/heeEtiBFNDA077yI5a6e5rWL6L+H77yJ44CCXHJcbiAgICAvLyDljbjovb3mjIkqKuWMheWQjSoq77yIbnBtIOiupOWMheWQje+8jOS4jeiupCBmaWxlOiDor7TmmI7nrKbvvInjgIJcclxuICAgIGNvbnN0IHNwZWNzID0gYWN0aW9uID09PSAndW5pbnN0YWxsJ1xyXG4gICAgICAgID8gW2VudHJ5Lm5hbWVdXHJcbiAgICAgICAgOiBjb2xsZWN0SW5zdGFsbFNwZWNzKGVudHJ5LCBiZWZvcmUubW9kdWxlcyk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBydW5OcG0oYWN0aW9uLCBzcGVjcyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDlpLHotKUqKuS4jeaKm+W8guW4uCoq77ya6Z2i5p2/6ZyA6KaB5ou/5Yiw57uT5p6E5YyW55qE57uT5p6c77yI5ZG95Luk44CB6YCA5Ye656CB44CB5Y6f5aeL6L6T5Ye677yJ77yMXHJcbiAgICAgICAgICog5omN6IO95Zyo5by556qX6YeM5Y6f5qC35bGV56S6IG5wbSDoh6rlt7Hor7TnmoTor53jgILpnZ7ms5XovpPlhaXku43nhLbmipsg4oCU4oCUIOmCo+aYr+iwg+eUqOaWueWGmemUmeS6huOAglxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9rOiByZXN1bHQub2ssXHJcbiAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIOWksei0peaXtuS4gOWPpSoq5Y2V6KGMKirmkZjopoHvvIjpnaLmnb/mtojmga/ljLrnlKjvvInjgILlrozmlbTovpPlh7rlnKggYHJlc3VsdGAg6YeM77yM55Sx5by556qX5bGV56S6IOKAlOKAlFxyXG4gICAgICAgICAqIOS5i+WJjeaKiuaVtOautSBucG0g6L6T5Ye65aGe6L+b5raI5oGv5Yy677yM5Lya5oqK5Y+z5qCP5oyk5Y+Y5b2i5bm25ZKM5raI5oGv5Y+g5Zyo5LiA6LW344CCXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWVzc2FnZTogcmVzdWx0Lm9rID8gbnVsbCA6IHN1bW1hcml6ZU5wbUZhaWx1cmUoYWN0aW9uLCBwYWNrYWdlTmFtZSwgcmVzdWx0KSxcclxuICAgICAgICAvLyDoo4Xlroznq4vliLvlm57kuIDku73mlrDnirbmgIHvvIzpnaLmnb/kuI3nlKjlho3ot5HkuIDmrKHmn6Xor6JcclxuICAgICAgICAuLi5xdWVyeVNoYXJlZFN0YXRlKCksXHJcbiAgICB9O1xyXG59XHJcblxyXG4vKiog6LWE5rqQ5piv5ZCm5a2Y5ZyoICovXHJcbmZ1bmN0aW9uIGFzc2V0RXhpc3RzKHVybDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICByZXR1cm4gRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHVybCkudGhlbigoaW5mbzogdW5rbm93bikgPT4gISFpbmZvKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOehruS/neebruW9leWtmOWcqO+8jOS4jeWtmOWcqOWImeWIm+W7ulxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlRGlyKGRpclVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIGRpclVybCk7XHJcbiAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBkaXJVcmwsIG51bGwpO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiog55uu5b2V5LiN5a2Y5Zyo5YiZ5bu677yM56m655uu5b2V5YiZ5Yig5o6J77yI55Sf5oiQL+WIoOmZpOWQjua4heeQhueUqO+8iSAqL1xyXG5hc3luYyBmdW5jdGlvbiBwcnVuZUVtcHR5RGlyKGFic0Rpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGlmIChzdGF0U3luYyhhYnNEaXIpLmlzRGlyZWN0b3J5KCkgJiYgcmVhZGRpclN5bmMoYWJzRGlyKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmVtb3ZlU3luYyhhYnNEaXIpO1xyXG4gICAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAvKiDkuI3lrZjlnKjlsLHnrpfkuoYgKi9cclxuICAgIH1cclxufVxyXG5cclxuLyoqIOaJvuWHuuW8leeUqOS6huaMh+WumiBjaWQg6ZuG5ZCI55qE5bey5bqP5YiX5YyW6LWE5rqQICovXHJcbmZ1bmN0aW9uIGZpbmRBc3NldFJlZnMoc25hcDogSVByb2plY3RTbmFwc2hvdCwgY2lkczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XHJcbiAgICBjb25zdCBoaXRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgaWYgKCFjaWRzLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBoaXRzO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCByZWwgb2YgT2JqZWN0LmtleXMoc25hcC5zZXJpYWxpemVkKSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBzbmFwLnNlcmlhbGl6ZWRbcmVsXTtcclxuICAgICAgICBpZiAoY2lkcy5zb21lKChjaWQpID0+IHRleHQuaW5jbHVkZXMoY2lkKSkpIHtcclxuICAgICAgICAgICAgaGl0cy5wdXNoKHJlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhpdHM7XHJcbn1cclxuXHJcbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOaWueazlSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuZXhwb3J0IGNvbnN0IG1ldGhvZHM6IHsgW2tleTogc3RyaW5nXTogKC4uLmFueTogYW55KSA9PiBhbnkgfSA9IHtcclxuICAgIC8qKlxyXG4gICAgICog5qGG5p625LiO5omp5bGV5ZCE6Ieq55qE54mI5pys5L+h5oGvKOacrOWcsCArIG5wbSDmnIDmlrAp44CCXHJcbiAgICAgKlxyXG4gICAgICog5omp5bGV6Ieq6Lqr54mI5pys6K+75a6D6Ieq5bex55qEIHBhY2thZ2UuanNvbjvmoYbmnrbniYjmnKzor7vlt6XnqIsgbm9kZV9tb2R1bGVzIOmHjOeahOmCo+S7vSDigJTigJRcclxuICAgICAqIOS4pOiAhemDveaYr1wi5a6e6ZmF6KOF5LqG5LuA5LmIXCLnmoTkuovlrp4s5LiN5piv6YWN572u6YeM5YaZ5LqG5LuA5LmI44CCXHJcbiAgICAgKiDmnInmsqHmnInmlrDniYjkuqTnu5npnaLmnb/mr5TovoMgdmVyc2lvbiDkuI4gbGF0ZXN0LOi/memHjOS4jeabv+Wug+WIpOaWrSjlhY3lvpfkuKTovrnlkITlhpnkuIDlpZcp44CCXHJcbiAgICAgKi9cclxuICAgIC8qKlxyXG4gICAgICog5oqKIG5vZGVfbW9kdWxlcyDph4znmoTmianlsZXmi7fov5sgZXh0ZW5zaW9ucy/jgIJcclxuICAgICAqXHJcbiAgICAgKiDnvJbovpHlmagqKuWPquS7juW3peeoi+eahCBleHRlbnNpb25zLyDliqDovb3mianlsZUqKizmiYDku6UgbnBtIGluc3RhbGwg5a6M5b+F6aG76JC96L+Z5LiA55uYLFxyXG4gICAgICog5ZCm5YiZXCLmm7TmlrDmiJDlip9cIuWPquWPkeeUn+WcqCBub2RlX21vZHVsZXMg6YeMLOe8lui+keWZqOmHjOS4gOeCueWPmOWMlumDveayoeacieOAglxyXG4gICAgICog6JC955uY5LmL5ZCO6ZyA6KaB6YeN5ZCv57yW6L6R5Zmo5omN55Sf5pWIIOKAlOKAlCDov5nkuIDngrnnlLHpnaLmnb/mlofmoYjlkYrnn6Us6L+Z6YeM5LiN5YGH6KOF54Ot5pu05paw44CCXHJcbiAgICAgKi9cclxuICAgIHN5bmNFeHRlbnNpb24obmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgZnJvbSA9IGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXNcIiwgbmFtZSk7XHJcbiAgICAgICAgaWYgKCFleGlzdHNTeW5jKGZyb20pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG9rOiBmYWxzZSwgbWVzc2FnZTogXCJub2RlX21vZHVsZXMg6YeM5rKh5pyJIFwiICsgbmFtZSArIFwiLOWFiOWuieijheWGjeiQveebmFwiIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRvID0gam9pbihyb290LCBcImV4dGVuc2lvbnNcIiwgbmFtZS5zcGxpdChcIi9cIikucG9wKCkgYXMgc3RyaW5nKTtcclxuICAgICAgICByZW1vdmVTeW5jKHRvKTtcclxuICAgICAgICBjb3B5U3luYyhmcm9tLCB0byk7XHJcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHBhdGg6IHRvIH07XHJcbiAgICB9LFxyXG5cclxuICAgIGFzeW5jIHF1ZXJ5VmVyc2lvbnMoZm9yY2VSZWdpc3RyeSA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE9mID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoaXQgPSByZWdpc3RyeS5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIGhpdCA/IGhpdC52ZXJzaW9uIDogbnVsbDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBmcmFtZXdvcmtOYW1lID0gJ0BjY2dmL2ZyYW1ld29yayc7XHJcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgZnJhbWV3b3JrTmFtZSk7XHJcblxyXG4gICAgICAgIC8qKiDmnKzku5PlupPnmoTlvIDlj5Hlt6XkvZzljLo65qGG5p625piv5rqQ56CB44CB5omp5bGV5bCx5piv6L+Z5LiA5Lu9IOKAlOKAlCDpnaLmnb/mja7mraTmlLnnp7DlkbzlubbnpoHnlKjmm7TmlrAgKi9cclxuICAgICAgICBjb25zdCBpbldvcmtzcGFjZSA9IGV4aXN0c1N5bmMoam9pbihyb290LCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmcmFtZXdvcms6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGZyYW1ld29ya05hbWUsXHJcbiAgICAgICAgICAgICAgICBpbnN0YWxsZWQ6IGZyYW1ld29yay5pbnN0YWxsZWQsXHJcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2U6IGluV29ya3NwYWNlLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogZnJhbWV3b3JrLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBsYXRlc3Q6IGxhdGVzdE9mKGZyYW1ld29ya05hbWUpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleHRlbnNpb246IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHBhY2thZ2VKU09OLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBwYWNrYWdlSlNPTi52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlOiBpbldvcmtzcGFjZSxcclxuICAgICAgICAgICAgICAgIGxhdGVzdDogbGF0ZXN0T2YocGFja2FnZUpTT04ubmFtZSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBvcGVuV29ya2JlbmNoKCkge1xyXG4gICAgICAgIEVkaXRvci5QYW5lbC5vcGVuKGAke3BhY2thZ2VKU09OLm5hbWV9LndvcmtiZW5jaGApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog6Z2i5p2/55qE5bGC57qn5LiL5ouJ55Sx5Li76L+b56iL5LiL5Y+R77yM6YG/5YWN5omp5bGV6YeM5Ye6546w56ys5LqM5Lu95bGC57qn5YiX6KGoICovXHJcbiAgICBxdWVyeUxheWVycygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5MQVlFUlNdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOmdouadv+aWh+ahiO+8muS7pSBpMThuL3poLmpzIOeahCBrZXkg5YWo6ZuG5Li65YeG77yM6YCQ5Liq5Lqk57uZ57yW6L6R5ZmoIGkxOG4g6Kej5p6Q5b2T5YmN6K+t6KiA44CCXHJcbiAgICAgKiDov5nmoLfpnaLmnb/kvqfkuI3pnIDopoHliKTmlq3or63oqIDvvIzkuZ/kuI3kvp3otZYgRWRpdG9yLkkxOG4g5piv5ZCm5a2Y5Zyo5LqO6Z2i5p2/5LiK5LiL5paH6YeM44CCXHJcbiAgICAgKi9cclxuICAgIHF1ZXJ5STE4bigpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCB0YWJsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFpIX1NUUklOR1MpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGwgPSBgJHtwYWNrYWdlSlNPTi5uYW1lfS4ke2tleX1gO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9IFpIX1NUUklOR1Nba2V5XTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpdCA9IEVkaXRvci5JMThuLnQoZnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGl0ICYmIGhpdCAhPT0gZnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBoaXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOe8lui+keWZqCBpMThuIOS4jeWPr+eUqOWwseS/neeVmeS4reaWhyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhYmxlW2tleV0gPSB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDpooTliLbkvZPmqKHmnb/liJfooajvvIjkvpvpnaLmnb/kuIvmi4nvvIkgKi9cclxuICAgIHF1ZXJ5VGVtcGxhdGVzKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiB7XHJcbiAgICAgICAgcmV0dXJuIFBSRUZBQl9URU1QTEFURVMubWFwKChpZCkgPT4gKHsgaWQsIGxhYmVsOiBQUkVGQUJfVEVNUExBVEVfTEFCRUxTW2lkXSB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+iIGdhbWVwbGF5IOS4i+W3suacieeahOaooeWdl+WIl+ihqO+8iOWQqyBvcmRlcu+8ieOAglxyXG4gICAgICog5LiO5L2T5qOA5YWx55SoIGRvY3Rvci5saXN0TW9kdWxlc++8jOS/neivgemdouadv+aYvuekuuWSjOS9k+ajgOWIpOWumuS4gOiHtOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeU1vZHVsZXMoKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RNb2R1bGVzKHNuYXApLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5kaXIsXHJcbiAgICAgICAgICAgIG9yZGVyOiBtLm9yZGVyID8/IDAsXHJcbiAgICAgICAgICAgIGhhc01vZGVsOiBtLm1vZGVsRmlsZSAhPT0gbnVsbCxcclxuICAgICAgICAgICAgaGFzTW9kdWxlOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyDpnaLmnb/nlKjov5nkuInkuKrot6/lvoTlgZrjgIzkuIDplK7miZPlvIDohJrmnKzjgI3vvJtldmVudHNGaWxlIOWPr+iDveS4uiBudWxs77yI6ICB5qih5Z2X77yJXHJcbiAgICAgICAgICAgIG1vZHVsZUZpbGU6IG0ubW9kdWxlRmlsZSxcclxuICAgICAgICAgICAgbW9kZWxGaWxlOiBtLm1vZGVsRmlsZSxcclxuICAgICAgICAgICAgZXZlbnRzRmlsZTogbS5ldmVudHNGaWxlLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWQr+WKqOmhuuW6j+mihOiniCArIOWxgue6p+WNoOeUqO+8iOW8gOWPkei+heWKqe+8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlPdmVydmlldygpIHtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3cyA9IGxpc3RWaWV3cyhzbmFwKTtcclxuICAgICAgICBjb25zdCB1c2FnZSA9IExBWUVSUy5tYXAoKGxheWVyKSA9PiAoe1xyXG4gICAgICAgICAgICBsYXllcixcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLmZpbHRlcigodikgPT4gdi5yZWdpc3RlcmVkTGF5ZXIgPT09IGxheWVyKS5tYXAoKHYpID0+IHYuY2xhc3NOYW1lKSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IGxpc3RNb2R1bGVzKHNuYXApO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9yZGVyOiBidWlsZE9yZGVyUGxhbihzbmFwKSxcclxuICAgICAgICAgICAgbGF5ZXJzOiB1c2FnZSxcclxuICAgICAgICAgICAgbW9kdWxlQ291bnQ6IG1vZHVsZXMubGVuZ3RoLFxyXG4gICAgICAgICAgICBtYW5hZ2VyQ291bnQ6IGxpc3RNYW5hZ2VycyhzbmFwKS5sZW5ndGgsXHJcbiAgICAgICAgICAgIHZpZXdDb3VudDogdmlld3MubGVuZ3RoLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDkuIDplK7kvZPmo4AgKi9cclxuICAgIGFzeW5jIHJ1bkRvY3RvcigpOiBQcm9taXNlPHsgZmluZGluZ3M6IElGaW5kaW5nW107IHN1bW1hcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmRpbmdzID0gcnVuRG9jdG9yKHNuYXBzaG90KCksIExBWUVSUyk7XHJcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IHsgZXJyb3I6IDAsIHdhcm46IDAsIGluZm86IDAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmluZGluZ3MpIHtcclxuICAgICAgICAgICAgc3VtbWFyeVtmLnNldmVyaXR5XSA9IChzdW1tYXJ5W2Yuc2V2ZXJpdHldID8/IDApICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZmluZGluZ3MsIHN1bW1hcnkgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6Lmn5DmqKHlnZfnmoQgVmlldyDliJfooajjgIJcclxuICAgICAqIOavlOaXp+WunueOsOWkmuS6hiBwcmVmYWJFeGlzdHMg4oCU4oCUIOaXp+eJiOaMiee6puWumuaLvCBVUkwg5Y205LuO5LiN5p+l55uY77yMXHJcbiAgICAgKiDkuo7mmK/igJzohJrmnKzlnKjjgIHpooTliLbkvZPkuKLkuobigJ3nmoQgVmlldyDkuZ/kvJrooqvliJflh7rmnaXvvIzngrnkuobmiY3lpLHotKXjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlWaWV3cyhtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICByZXR1cm4gbGlzdFZpZXdzKHNuYXApXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYubW9kdWxlRGlyID09PSBtb2R1bGVEaXIpXHJcbiAgICAgICAgICAgIC5tYXAoKHYpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2LmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIHNjcmlwdFVybDogZGJVcmwodi5zY3JpcHRGaWxlKSxcclxuICAgICAgICAgICAgICAgIHByZWZhYlVybDogdi5yZWdpc3RlcmVkUGF0aCA/IGRiVXJsKGAke1JFU09VUkNFU19ESVJ9LyR7di5yZWdpc3RlcmVkUGF0aH0ucHJlZmFiYCkgOiAnJyxcclxuICAgICAgICAgICAgICAgIHByZWZhYkV4aXN0czogdi5yZWdpc3RlcmVkUGF0aCA/IHNuYXAucHJlZmFic0J5UmVzb3VyY2VQYXRoW3YucmVnaXN0ZXJlZFBhdGhdICE9PSB1bmRlZmluZWQgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGxheWVyOiB2LnJlZ2lzdGVyZWRMYXllciA/PyAnJyxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFuYWdlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAvKiogbWFuYWdlciDliJfooajvvIhhc3NldHMvc2NyaXB0cy9tYW5hZ2VyIOS4i+ebtOWxnueahCAqTWFuYWdlci50c++8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlNYW5hZ2VycygpIHtcclxuICAgICAgICByZXR1cm4gbGlzdE1hbmFnZXJzKHNuYXBzaG90KCkpLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgIGZpbGU6IG0uc2NyaXB0RmlsZSxcclxuICAgICAgICAgICAgZXh0ZW5kc1NpbmdsZXRvbjogbS5leHRlbmRzU2luZ2xldG9uLFxyXG4gICAgICAgICAgICBiYXNlQ2xhc3M6IG0uYmFzZUNsYXNzLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7ogbWFuYWdlcu+8mueUn+aIkOS4gOS4que7p+aJv+ahhuaetiBBU2luZ2xldG9uIOeahOWFqOWxgOWNleS+i+iEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1hbmFnZXJOYW1lIOWQjeWtl++8jOWmgiBcImNvbmZpZ1wiIC8gXCJDb25maWdcIiAvIFwiQ29uZmlnTWFuYWdlclwiXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3QgZGlyVXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJVcmwpO1xyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHtkaXJVcmx9LyR7Y2xhc3NOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHNjcmlwdFVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYW5hZ2VyIOW3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOWug++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0Jywgc2NyaXB0VXJsLCBidWlsZE1hbmFnZXJTY3JpcHQoY2xhc3NOYW1lLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7ogbWFuYWdlciDlpLHotKU6ICR7c2NyaXB0VXJsfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRpclVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBzY3JpcHRVcmwsIGZpbGU6IGAke01BTkFHRVJfRElSfS8ke2NsYXNzTmFtZX0udHNgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDliKDpmaQgbWFuYWdlciDohJrmnKwgKi9cclxuICAgIGFzeW5jIGRlbGV0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGlmICghaW5mbykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsCBtYW5hZ2VyIOiEmuacrO+8miR7Y2xhc3NOYW1lfS50c2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke01BTkFHRVJfRElSfWApO1xyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgcmVtb3ZlZDogc2NyaXB0VXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X5YmN55qE5byV55So5qOA5p+l77ya5ZOq5Lqb6LWE5rqQ5byV55So5LqG6K+l5qih5Z2X55qE6ISa5pys44CCXHJcbiAgICAgKiDpnaLmnb/lnKjnoa7orqTmoYbph4zlsZXnpLrvvIzpgb/lhY3liKDlroznlZnkuIvmgqznqbrlvJXnlKjjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlNb2R1bGVSZWZzKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXdzID0gbGlzdFZpZXdzKHNuYXApLmZpbHRlcigodikgPT4gdi5tb2R1bGVEaXIgPT09IG1vZHVsZURpcik7XHJcbiAgICAgICAgY29uc3QgY2lkcyA9IHZpZXdzLm1hcCgodikgPT4gc25hcC5zY3JpcHRDaWRzW3Yuc2NyaXB0RmlsZV0pLmZpbHRlcihCb29sZWFuKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVDaWQgPSBzbmFwLnNjcmlwdENpZHNbYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkubW9kdWxlQ2xhc3N9LnRzYF07XHJcbiAgICAgICAgY29uc3QgYWxsQ2lkcyA9IG1vZHVsZUNpZCA/IGNpZHMuY29uY2F0KFttb2R1bGVDaWRdKSA6IGNpZHM7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLm1hcCgodikgPT4gdi5jbGFzc05hbWUpLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQnk6IGZpbmRBc3NldFJlZnMoc25hcCwgYWxsQ2lkcyksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWcqOe8lui+keWZqOmHjOaJk+W8gOafkOS4quW3peeoi+WGheaWh+S7tu+8iOS9k+ajgOe7k+aenC/mpoLop4jngrnlh7vlrprkvY3nlKjvvIkgKi9cclxuICAgIGFzeW5jIG9wZW5Tb3VyY2UocmVsUGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFyZWxQYXRoIHx8IHJlbFBhdGguaW5jbHVkZXMoJy4uJykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTot6/lvoQ6IFwiJHtyZWxQYXRofVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVybCA9IGRiVXJsKHJlbFBhdGgpO1xyXG4gICAgICAgIC8vIOWFiOehruiupOi1hOa6kOWtmOWcqOS4lOW3suiiq+e8lui+keWZqOWvvOWFpe+8jOWGjeiwiOaJk+W8gO+8m+WQpuWImee7meWHuuaYjuehruWOn+WboFxyXG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDotYTmupDkuI3lrZjlnKjmiJbmnKrooqvnvJbovpHlmajlr7zlhaU6ICR7cmVsUGF0aH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnb3Blbi1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu65qih5Z2X77ya55Sf5oiQIE1vZHVsZSArIE1vZGVsICsg5LqL5Lu25aOw5piOIOS4ieS4quiEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUg5qih5Z2X5ZCN77yM5aaCIFwiYmFnXCIgLyBcIkJhZ1wiIC8gXCJCYWdNb2R1bGVcIlxyXG4gICAgICogQHBhcmFtIG9yZGVyICAgICAg5qih5Z2X5ZCv5Yqo6aG65bqPXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1vZHVsZShtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmFtaW5nID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke25hbWluZy5kaXJ9YDtcclxuXHJcbiAgICAgICAgLy8g5YWI5p+l5a2Y5Zyo5oCn77yM57uZ5Ye65piO56Gu5Y6f5Zug77yI5pen54mI5Y+q5ZyoIGNyZWF0ZS1hc3NldCDov5Tlm57nqbrml7bor7TigJzlj6/og73lt7LlrZjlnKjigJ3vvIlcclxuICAgICAgICBjb25zdCBtb2R1bGVVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c2A7XHJcbiAgICAgICAgY29uc3QgbW9kZWxVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZGVsQ2xhc3N9LnRzYDtcclxuICAgICAgICBjb25zdCBldmVudHNVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLmV2ZW50c05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kdWxlVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaooeWdl+W3suWtmOWcqO+8miR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kZWxVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5qih5Z6L5bey5a2Y5Zyo77yaJHtuYW1pbmcubW9kZWxDbGFzc30udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKGV2ZW50c1VybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDkuovku7blo7DmmI7lt7LlrZjlnKjvvJoke25hbWluZy5ldmVudHNOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIC8qKiDlt7LliJvlu7rmiJDlip/nmoTotYTmupDvvJvku7vkuIDmraXlpLHotKXml7bmjInpgIbluo/lm57mu5rvvIzpgb/lhY3nlZnkuIvljYrmiJDlk4EgKi9cclxuICAgICAgICBjb25zdCBjcmVhdGVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZU9yUm9sbGJhY2sgPSBhc3luYyAodXJsOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgdXJsLCBjb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFhc3NldCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBjcmVhdGVkLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZG9uZSBvZiBjcmVhdGVkLnJldmVyc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIGRvbmUpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgbW9kdWxlRGlyVXJsKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBg5Yib5bu6JHtsYWJlbH3lpLHotKU6ICR7dXJsfSR7Y291bnQgPiAwID8gYO+8iOW3suWbnua7miAke2NvdW50fSDkuKrmlofku7bvvIlgIDogJyd9YCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3JlYXRlZC5wdXNoKHVybCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhcclxuICAgICAgICAgICAgbW9kdWxlVXJsLCBidWlsZE1vZHVsZVNjcmlwdChuYW1pbmcubW9kdWxlQ2xhc3MsIG5hbWluZy5tb2RlbENsYXNzLCBvcmRlciwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgJ+aooeWdlycsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCBjcmVhdGVPclJvbGxiYWNrKG1vZGVsVXJsLCBidWlsZE1vZGVsU2NyaXB0KG5hbWluZy5tb2RlbENsYXNzLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCAn5qih5Z6LJyk7XHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhldmVudHNVcmwsIGJ1aWxkRXZlbnRzU2NyaXB0KG5hbWluZy5kaXIsIG5hbWluZy5tb2R1bGVDbGFzcyksICfkuovku7blo7DmmI4nKTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRpck5hbWU6IG5hbWluZy5kaXIsXHJcbiAgICAgICAgICAgIHByZWZpeDogbmFtaW5nLnByZWZpeCxcclxuICAgICAgICAgICAgbW9kdWxlVXJsLFxyXG4gICAgICAgICAgICBtb2RlbFVybCxcclxuICAgICAgICAgICAgZXZlbnRzVXJsLFxyXG4gICAgICAgICAgICBvcmRlcixcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOabtOaWsOaooeWdl+eahCBvcmRlcu+8muWGmeWbniBNb2R1bGUg6ISa5pys55qEIEBSZWdpc3Rlck1vZHVsZSh7b3JkZXJ9KeOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyB1cGRhdGVNb2R1bGVPcmRlcihtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBHQU1FUExBWV9ESVIsIG1vZHVsZURpcik7XHJcblxyXG4gICAgICAgIGxldCBmaWxlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmaWxlcyA9IHJlYWRkaXJTeW5jKG1vZHVsZURpclBhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLDmqKHlnZfnm67lvZU6ICR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVGaWxlID0gZmlsZXMuZmluZCgoZikgPT4gZi5lbmRzV2l0aCgnTW9kdWxlLnRzJykpO1xyXG4gICAgICAgIGlmICghbW9kdWxlRmlsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsOaooeWdl+iEmuacrDogJHttb2R1bGVEaXJ9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4obW9kdWxlRGlyUGF0aCwgbW9kdWxlRmlsZSk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvb3JkZXJcXHMqOlxccypcXGQrLywgYG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIGlmIChuZXdDb250ZW50ID09PSBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5pyq5ZyoICR7bW9kdWxlRmlsZX0g5Lit5om+5YiwIG9yZGVyIOWtl+autWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3cml0ZUZpbGVTeW5jKGZ1bGxQYXRoLCBuZXdDb250ZW50KTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRiVXJsKGAke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9YCkpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBtb2R1bGVOYW1lOiBtb2R1bGVEaXIsIG9yZGVyIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu6IFZpZXfvvJrlnKjmjIflrprmqKHlnZfkuIvnlJ/miJDohJrmnKwgKyDpooTliLbkvZPvvIzlubbmiorohJrmnKzmjILovb3liLDpooTliLbkvZPmoLnoioLngrnjgIJcclxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSDpooTliLbkvZPmqKHmnb/vvIzop4EgY29uc3RhbnRzLlBSRUZBQl9URU1QTEFURVNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlVmlldyhtb2R1bGVOYW1lOiBzdHJpbmcsIHZpZXdOYW1lOiBzdHJpbmcsIGxheWVyOiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcgPSAnZW1wdHknKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIUxBWUVSUy5pbmNsdWRlcyhsYXllciBhcyBhbnkpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5bGC57qnOiBcIiR7bGF5ZXJ9XCLvvIjlkIjms5XlgLzvvJoke0xBWUVSUy5qb2luKCcsICcpfe+8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzUHJlZmFiVGVtcGxhdGUodGVtcGxhdGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6aKE5Yi25L2T5qih5p2/OiBcIiR7dGVtcGxhdGV9XCLvvIjlkIjms5XlgLzvvJoke1BSRUZBQl9URU1QTEFURVMuam9pbignLCAnKX3vvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplVmlld05hbWUodmlld05hbWUpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlBhdGggPSB2aWV3UHJlZmFiUGF0aChtb2R1bGVEaXIsIGNsYXNzTmFtZSk7XHJcblxyXG4gICAgICAgIC8vIOi3qOaooeWdl+mHjeWQjeS8muWKoOi9vemUmemihOWItuS9k++8iFZpZXdNYW5hZ2VyIOaMieexu+WQjeWFqOWxgOafpeaJvu+8ie+8jOaPkOWJjeaMoeS9j1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNoID0gbGlzdFZpZXdzKHNuYXApLmZpbmQoXHJcbiAgICAgICAgICAgICh2KSA9PiB2LmNsYXNzTmFtZSA9PT0gY2xhc3NOYW1lICYmIHYubW9kdWxlRGlyICE9PSBtb2R1bGVEaXIsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY2xhc2gpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgYFZpZXcg5ZCN5a2XIFwiJHtjbGFzc05hbWV9XCIg5bey6KKr5qih5Z2XIFwiJHtjbGFzaC5tb2R1bGVEaXJ9XCIg5Y2g55So77ybYCArXHJcbiAgICAgICAgICAgICAgICBg5qGG5p625oyJ57G75ZCN5YWo5bGA5p+l5om+77yM6YeN5ZCN5Lya5Yqg6L296ZSZ6aKE5Yi25L2T77yM6K+35o2i5Liq5ZCN5a2XYCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHZpZXdzRGlyVXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcih2aWV3c0RpclVybCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGAke3ZpZXdzRGlyVXJsfS8ke2NsYXNzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhzY3JpcHRVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVmlldyDohJrmnKzlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6UgVmlld++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0Q29udGVudCA9IGJ1aWxkVmlld1NjcmlwdChjbGFzc05hbWUsIHByZWZhYlBhdGgsIGxheWVyLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdEFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHNjcmlwdFVybCwgc2NyaXB0Q29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXNjcmlwdEFzc2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu66ISa5pys5aSx6LSlOiAke3NjcmlwdFVybH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByZWZhYkRpclVybCA9IGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9YDtcclxuICAgICAgICBjb25zdCBwcmVmYWJVcmwgPSBgJHtwcmVmYWJEaXJVcmx9LyR7Y2xhc3NOYW1lfS5wcmVmYWJgO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihwcmVmYWJEaXJVcmwpO1xyXG5cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMocHJlZmFiVXJsKSkge1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6aKE5Yi25L2T5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnByZWZhYu+8iOW3suWbnua7muiEmuacrO+8jOWmgumcgOmHjeW7uuivt+WFiOWIoOmZpOivpSBWaWV377yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wcmVzc2VkVXVpZCA9IGNvbXByZXNzVXVpZChzY3JpcHRBc3NldC51dWlkKTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZmFiQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGJ1aWxkVmlld1ByZWZhYihjbGFzc05hbWUsIGNvbXByZXNzZWRVdWlkLCB0ZW1wbGF0ZSkpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmYWJBc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgcHJlZmFiVXJsLCBwcmVmYWJDb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFwcmVmYWJBc3NldCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7rpooTliLbkvZPlpLHotKU6ICR7cHJlZmFiVXJsfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyDlm57mu5rohJrmnKzvvIzpgb/lhY3nlZnkuIvigJzmnInohJrmnKzmsqHpooTliLbkvZPigJ3nmoTljYrmiJDlk4FcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0Jywgdmlld3NEaXJVcmwpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHByZWZhYkRpclVybCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHZpZXdzRGlyVXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBtb2R1bGVEaXIsIHNjcmlwdFVybCwgcHJlZmFiVXJsLCBwcmVmYWJQYXRoLCBsYXllciwgdGVtcGxhdGUgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaQgdmlld++8muWPquWIoOiHqui6q++8iOiEmuacrCArIOmihOWItuS9kyArIOWQhOiHqiBtZXRh77yJ77yM5LiN56Kw5YW25LuW6LWE5rqQ44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRlbGV0ZVZpZXcobW9kdWxlTmFtZTogc3RyaW5nLCB2aWV3TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVWaWV3TmFtZSh2aWV3TmFtZSk7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiVXJsID0gYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn0vJHtjbGFzc05hbWV9LnByZWZhYmA7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgZGVsZXRlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHVybCBvZiBbcHJlZmFiVXJsLCBzY3JpcHRVcmxdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICAgICAgaWYgKGluZm8pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkLnB1c2godXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5riF55CG56m655uu5b2V77yI5pen54mI5Lya55WZ5LiLIHJlc291cmNlcy92aWV3cy885qih5Z2XPiDov5nnp43nqbrlo7PvvIlcclxuICAgICAgICBhd2FpdCBwcnVuZUVtcHR5RGlyKGpvaW4ocHJvamVjdFBhdGgoKSwgUkVTT1VSQ0VTX0RJUiwgJ3ZpZXdzJywgbW9kdWxlRGlyKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgbW9kdWxlRGlyLCBkZWxldGVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X77ya5YigIGdhbWVwbGF5LzzmqKHlnZc+LyDkuI4gcmVzb3VyY2VzL3ZpZXdzLzzmqKHlnZc+LyDkuKTkuKrnm67lvZXvvIjov57lkIwgbWV0Ye+8ieOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVNb2R1bGUobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclBhdGggPSBqb2luKHByb2plY3RQYXRoKCksIEdBTUVQTEFZX0RJUiwgbW9kdWxlRGlyKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBSRVNPVVJDRVNfRElSLCAndmlld3MnLCBtb2R1bGVEaXIpO1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBbcHJlZmFiRGlyUGF0aCwgbW9kdWxlRGlyUGF0aF0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3luYyhwKTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2gocCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOS4jeWtmOWcqOWImei3s+i/hyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3c2ApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChHQU1FUExBWV9ESVIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbW9kdWxlRGlyLCByZW1vdmVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6LlhazlhbHmqKHlnZfvvJrmnKzlnLDlt6XkvZzljLogKyDlt7Llronoo4UgKyDov5znqIsgcmVnaXN0cnnjgIJcclxuICAgICAqIEBwYXJhbSBmb3JjZSDlvLrliLbph43mlrDmi4nlj5bov5znqIvliJfooajvvIjpnaLmnb/nmoTjgIzliLfmlrDjgI3nlKjvvIlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlTaGFyZWRNb2R1bGVzKGZvcmNlPzogYm9vbGVhbikge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlID09PSB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlronoo4XkuIDkuKrlhazlhbHmqKHlnZfvvJoqKuebtOaOpeS7o+i3kSBgbnBtIGluc3RhbGxgKirjgIJcclxuICAgICAqIOWksei0peaXtuaKm+WHuueahOmUmeivr+mHjOW4puedgCBucG0g55qE5Y6f5aeL6L6T5Ye677yM6Z2i5p2/5Lya5Y6f5qC35bGV56S644CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluc3RhbGxTaGFyZWRNb2R1bGUocGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ2luc3RhbGwnLCBwYWNrYWdlTmFtZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDljbjovb3kuIDkuKrlhazlhbHmqKHlnZfvvJrnm7TmjqXku6Pot5EgYG5wbSB1bmluc3RhbGxgICovXHJcbiAgICBhc3luYyB1bmluc3RhbGxTaGFyZWRNb2R1bGUocGFja2FnZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ3VuaW5zdGFsbCcsIHBhY2thZ2VOYW1lKTtcclxuICAgIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogQGVuIE1ldGhvZCBUcmlnZ2VyZWQgb24gRXh0ZW5zaW9uIFN0YXJ0dXBcclxuICogQHpoIOaJqeWxleWQr+WKqOaXtuinpuWPkeeahOaWueazlVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWQoKSB7IH1cclxuXHJcbi8qKlxyXG4gKiBAZW4gTWV0aG9kIHRyaWdnZXJlZCB3aGVuIHVuaW5zdGFsbGluZyB0aGUgZXh0ZW5zaW9uXHJcbiAqIEB6aCDljbjovb3mianlsZXml7bop6blj5HnmoTmlrnms5VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmxvYWQoKSB7IH1cclxuIl19
|
|
872
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXcvQkEsb0JBQTBCO0FBTTFCLHdCQUE0QjtBQTkvQjVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQWlEO0FBQ2pELHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUtvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2Is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YWNrYWdlSlNPTiBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xyXG5pbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IGNvcHlTeW5jLCBleGlzdHNTeW5jLCByZWFkZGlyU3luYywgcmVhZEZpbGVTeW5jLCByZW1vdmVTeW5jLCBzdGF0U3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJztcclxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQge1xyXG4gICAgR0FNRVBMQVlfRElSLFxyXG4gICAgTEFZRVJTLFxyXG4gICAgTUFOQUdFUl9ESVIsXHJcbiAgICBQUkVGQUJfVEVNUExBVEVTLFxyXG4gICAgUFJFRkFCX1RFTVBMQVRFX0xBQkVMUyxcclxuICAgIFJFR0lTVFJZX0NBQ0hFX01TLFxyXG4gICAgUkVTT1VSQ0VTX0RJUixcclxuICAgIFRQcmVmYWJUZW1wbGF0ZSxcclxuICAgIFZJRVdTX1NVQkRJUixcclxufSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IGJ1aWxkT3JkZXJQbGFuLCBsaXN0TWFuYWdlcnMsIGxpc3RNb2R1bGVzLCBsaXN0Vmlld3MsIHJ1bkRvY3RvciB9IGZyb20gJy4vZG9jdG9yJztcclxuaW1wb3J0IHtcclxuICAgIElERU5USUZJRVJfUkUsXHJcbiAgICBub3JtYWxpemVNYW5hZ2VyTmFtZSxcclxuICAgIG5vcm1hbGl6ZU1vZHVsZSxcclxuICAgIG5vcm1hbGl6ZVZpZXdOYW1lLFxyXG4gICAgdmlld1ByZWZhYlBhdGgsXHJcbn0gZnJvbSAnLi9uYW1pbmcnO1xyXG5pbXBvcnQge1xyXG4gICAgY29sbGVjdFNuYXBzaG90LFxyXG4gICAgZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyLFxyXG4gICAgbGlzdExvY2FsQ2F0YWxvZyxcclxuICAgIHJlYWRJbnN0YWxsZWRQYWNrYWdlLFxyXG4gICAgcmVhZFByb2plY3RNYW5pZmVzdCxcclxufSBmcm9tICcuL3Byb2plY3QnO1xyXG5pbXBvcnQge1xyXG4gICAgaXNTaGFyZWRNb2R1bGVQYWNrYWdlLFxyXG4gICAgS05PV05fUEFDS0FHRVMsXHJcbiAgICBwYXJzZVZpZXdSZXN1bHQsXHJcbiAgICB2aWV3QXJndixcclxufSBmcm9tICcuL3JlZ2lzdHJ5JztcclxuaW1wb3J0IHtcclxuICAgIE5QTV9USU1FT1VUX01TLFxyXG4gICAgYnVpbGROcG1SZXN1bHQsXHJcbiAgICBidWlsZFNoYXJlZFN0YXR1cyxcclxuICAgIGNhdGFsb2dFbnRyeUZyb21JbnN0YWxsZWQsXHJcbiAgICBjb2xsZWN0SW5zdGFsbFNwZWNzLFxyXG4gICAgZGVjb2RlUHJvY2Vzc091dHB1dCxcclxuICAgIGZpbmRQYWNrYWdlUmVmcyxcclxuICAgIGZvcm1hdE5wbUNvbW1hbmQsXHJcbiAgICBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0LFxyXG4gICAgbWVyZ2VDYXRhbG9nLFxyXG4gICAgbnBtU3Bhd25TcGVjLFxyXG4gICAgc3Bhd25TcGVjRm9yLFxyXG4gICAgc3VtbWFyaXplTnBtRmFpbHVyZSxcclxufSBmcm9tICcuL3NoYXJlZCc7XHJcbmltcG9ydCB7XHJcbiAgICBidWlsZE1hbmFnZXJTY3JpcHQsXHJcbiAgICBidWlsZEV2ZW50c1NjcmlwdCxcclxuICAgIGJ1aWxkTW9kZWxTY3JpcHQsXHJcbiAgICBidWlsZE1vZHVsZVNjcmlwdCxcclxuICAgIGJ1aWxkVmlld1ByZWZhYixcclxuICAgIGJ1aWxkVmlld1NjcmlwdCxcclxuICAgIGlzUHJlZmFiVGVtcGxhdGUsXHJcbiAgICBURnJhbWV3b3JrSW1wb3J0LH0gZnJvbSAnLi90ZW1wbGF0ZXMnO1xyXG5pbXBvcnQgeyBJRmluZGluZywgSU5wbVJ1blJlc3VsdCwgSUluc3RhbGxlZFBhY2thZ2VWaWV3LCBJUHJvamVjdFNuYXBzaG90LCBJU2hhcmVkQ2F0YWxvZ0VudHJ5IH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOaWh+ahiCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICog5omp5bGV6Ieq5bim55qE5Lit5paH5paH5qGI6KGo44CCXHJcbiAqIOWug+aXouaYr+OAjGtleSDlhajpm4bjgI3nmoTmnaXmupDvvIzkuZ/mmK/nvJbovpHlmaggaTE4biDmi7/kuI3liLDml7bnmoTlhZzlupXjgIJcclxuICovXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbmNvbnN0IFpIX1NUUklOR1M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSByZXF1aXJlKCcuLi9pMThuL3poLmpzJyk7XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWwj+W3peWFtyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKiog5bel56iL5qC555uu5b2VICovXHJcbmZ1bmN0aW9uIHByb2plY3RQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gRWRpdG9yLlByb2plY3QucGF0aDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOi/meS4quW3peeoi+W8leeUqOahhuaetuivpeeUqOWTquenjeWGmeazlTpcclxuICogLSDlvIDlj5Hlt6XkvZzljLoo5LuT5bqT6YeMLOahhuaetua6kOeggeWcqCBhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsg5LiLKSAtPiDnm7jlr7not6/lvoRcclxuICogLSDoo4XmiJAgbnBtIOWMheeahOaWsOW3peeoiyAtPiDljIXlkI0gQGNjZ2YvZnJhbWV3b3JrXHJcbiAqXHJcbiAqIOWIpOaNruaYr1wi5qGG5p625rqQ56CB5Zyo5LiN5ZyoXCIs5LiOIGNvbnN0YW50cy50cyDnmoQgRlJBTUVXT1JLX0RFVl9ESVIg5ZCM5LiA5Liq5YC844CCXHJcbiAqL1xyXG5mdW5jdGlvbiBmcmFtZXdvcmtJbXBvcnRNb2RlKCk6IFRGcmFtZXdvcmtJbXBvcnQge1xyXG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoam9pbihwcm9qZWN0UGF0aCgpLCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpID8gJ3dvcmtzcGFjZScgOiAncGFja2FnZSc7XHJcbn1cclxuXHJcbi8qKiDnm7jlr7not6/lvoQgLT4gZGI6Ly8g6LWE5rqQIHVybCAqL1xyXG5mdW5jdGlvbiBkYlVybChyZWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ2RiOi8vJyArIHJlbC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcbn1cclxuXHJcbi8qKiB1dWlkIC0+IOmihOWItuS9k+mHjOiEmuacrOe7hOS7tueahCBfX3R5cGVfXyAqL1xyXG5mdW5jdGlvbiBjb21wcmVzc1V1aWQodXVpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFZGl0b3IuVXRpbHMuVVVJRC5jb21wcmVzc1VVSUQodXVpZCwgZmFsc2UpO1xyXG59XHJcblxyXG4vKiog5Y+W5LiA5Lu95bel56iL5b+r54Wn77yI5L2T5qOA44CB5YiX6KGo6YO95Z+65LqO5a6D77yM5L+d6K+B6Z2i5p2/55yL5Yiw55qE5ZKM5L2T5qOA55yL5Yiw55qE5piv5ZCM5LiA5Lu95pWw5o2u77yJICovXHJcbmZ1bmN0aW9uIHNuYXBzaG90KCk6IElQcm9qZWN0U25hcHNob3Qge1xyXG4gICAgcmV0dXJuIGNvbGxlY3RTbmFwc2hvdChwcm9qZWN0UGF0aCgpLCBjb21wcmVzc1V1aWQpO1xyXG59XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5YWs5YWx5qih5Z2XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIHJlZ2lzdHJ5IOaQnOe0oue7k+aenOeahOe8k+WtmOOAglxyXG4gKlxyXG4gKiDkuIDmrKHmkJzntKLlrp7mtYsgMX40IOenkiDigJTigJQg6ICM6Z2i5p2/5YiH6aG144CB6KOF5a6M5Yi35paw6YO95Lya6LCD55So5p+l6K+i77yM5LiN6IO95q+P5qyh6YO95Y675pCc44CCXHJcbiAqIOaYvuW8j+eCueOAjOWIt+aWsOOAjeaXtueUqCBgZm9yY2VgIOe7lei/h+Wug+OAglxyXG4gKi9cclxubGV0IHJlZ2lzdHJ5Q2FjaGU6IHsgYXQ6IG51bWJlcjsgZW50cmllczogSVNoYXJlZENhdGFsb2dFbnRyeVtdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbCA9IG51bGw7XHJcblxyXG4vKipcclxuICogKirlpLHotKXkuI3mipvlvILluLgs5Lmf5LiN6K6p6Z2i5p2/56m6552A6KOF5L2cXCLmsqHmnInmqKHlnZdcIioqOuaKiuWOn+WboOS4gOi1t+WbnuS8oCzpnaLmnb/mmL7npLrmiJDmj5DnpLog4oCU4oCUXHJcbiAqIOi/meaYr+acgOWIneWwseWumuS4i+eahOimgeaxgihcIuayoeaciee9kee7nOWwseaPkOekuuWwseihjOS6hlwiKeOAglxyXG4gKlxyXG4gKiDov5znqIvkv6Hmga/nmoTmnaXmupA6KirpgJDkuKogYG5wbSB2aWV3IDxuYW1lPiAtLWpzb25gIOeyvuehruafpeivoioq44CCXHJcbiAqXHJcbiAqIOabvue7j+eUqCBgbnBtIHNlYXJjaGAgKyDlhbPplK7or40s5bey5bqf5byDIOKAlOKAlCDmkJzntKLlr7kgc2NvcGVkIOWMhShgQGNjZ2YvKmAp5b6I5LiN5Y+v6Z2gLFxyXG4gKiDluLjluLjmkJzkuI3liLAs5LqO5pivXCLlhazlhbHmqKHlnZfov5znqIvliJfooahcIuWSjFwi5pyA5paw54mI5pysXCLpg73kvJrmmK/nqbrnmoQo5a6e5rWL6Lip6L+HKeOAglxyXG4gKiDku6Pku7c65YyF5ZCN6KaB57u05oqk5ZyoIHJlZ2lzdHJ5LnRzIOeahCBLTk9XTl9QQUNLQUdFUyDph4ws5paw5aKe5YyF5pe25Yqg5LiA6KGM44CCXHJcbiAqXHJcbiAqIOS5i+aJgOS7peeUqCBucG0g5ZG95Luk6ICM5LiN5piv6Ieq5bex5Y+RIEhUVFBTIOivt+axgjpucG0g5Lya6Ieq5Yqo5bim5LiK5bel56iL55qEIGAubnBtcmNgXHJcbiAqICjnp4HmnInmupDjgIHplZzlg4/jgIHku6PnkIbnrYnphY3nva7pg73ot5/nnYDotbApLOS4jeeUqOaIkeS7rOmHjeWkjeWunueOsOS4gOmBjeOAglxyXG4gKi9cclxuLyoqXHJcbiAqICoq5byC5q2lKirot5HkuIDmrKEgbnBt44CCXHJcbiAqXHJcbiAqIOS4uuS7gOS5iOS4jeiDvee7p+e7reeUqCBzcGF3blN5bmM66L+Z5Liq5Ye95pWw5ZyoKirnvJbovpHlmajkuLvov5vnqIsqKumHjOiiq+iwg+eUqCxzcGF3blN5bmMg5Lya5oqK5Li75b6q546vXHJcbiAqIOaVtOS4quWNoOS9jyDigJTigJQg5q+P5p+l5LiA5Liq5YyF5Yeg55m+5q+r56eSLOWHoOS4quWMheS4i+adpee8lui+keWZqCBVSSDlsLHljaHkvY/jgIHngrnliKvlpITmsqHlj43lupQo5a6e5rWLKeOAglxyXG4gKiDmjaLmiJAgc3Bhd24gKyBQcm9taXNlOuWQjOagt+etiee7k+aenCzkvYbkuK3pl7Torqnlh7rkuovku7blvqrnjq8s57yW6L6R5Zmo5LiN5Ya757uT44CCXHJcbiAqL1xyXG4vKipcclxuICog5p+l6L+c56iL5L+h5oGv55So55qEKirnn60qKui2heaXtuOAglxyXG4gKlxyXG4gKiDkuI3og73nlKggTlBNX1RJTUVPVVRfTVMoMTIwIOenkik66YKj5piv57uZXCLlronoo4VcIueUqOeahCznlKjmiLflj6/ku6XnrYk7XHJcbiAqIOiAjFwi5p+l5LiA5LiL5pyA5paw54mI5pysXCLopoHmmK/nrYnkuKTliIbpkp8s6YKj5LiA6aG15bCx562J5LqO5bqf5LqG44CCXHJcbiAqL1xyXG5jb25zdCBSRUdJU1RSWV9RVUVSWV9USU1FT1VUX01TID0gMjUwMDA7XHJcblxyXG4vKiog5ZCM5LiA5pe25Yi75Y+q5YWB6K645LiA5Liq5ZCO5Y+w5Yi35paw5Zyo6LeRLOWQpuWImeavj+asoeWIh+mhteetvumDveS8muWGjei1t+S4gOi9riBucG0gKi9cclxubGV0IHJlZ2lzdHJ5UmVmcmVzaGluZyA9IGZhbHNlO1xyXG5cclxuZnVuY3Rpb24gcnVuTnBtQXN5bmMoXHJcbiAgICBjb21tYW5kOiBzdHJpbmcsXHJcbiAgICBzcGF3blNwZWM6IHsgY29tbWFuZDogc3RyaW5nOyBhcmdzOiBzdHJpbmdbXTsgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzPzogYm9vbGVhbiB9LFxyXG4gICAgY3dkOiBzdHJpbmcsXHJcbiAgICB0aW1lb3V0TXM6IG51bWJlciA9IE5QTV9USU1FT1VUX01TLFxyXG4pOiBQcm9taXNlPHsgcmVzdWx0OiBJTnBtUnVuUmVzdWx0OyBzdGRvdXQ6IHN0cmluZyB9PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XHJcbiAgICAgICAgY29uc3QgZXJyQ2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xyXG4gICAgICAgIGxldCBjaGlsZDogYW55O1xyXG4gICAgICAgIGNvbnN0IGZpbmlzaCA9IChleGl0Q29kZTogbnVtYmVyIHwgbnVsbCwgc3Bhd25FcnJvcjogeyBjb2RlPzogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGwpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3Rkb3V0ID0gZGVjb2RlUHJvY2Vzc091dHB1dChCdWZmZXIuY29uY2F0KGNodW5rcykpO1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhpdENvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHN0ZGVycjogZGVjb2RlUHJvY2Vzc091dHB1dChCdWZmZXIuY29uY2F0KGVyckNodW5rcykpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNwYXduRXJyb3IsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN0ZG91dCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjaGlsZCA9IHNwYXduKHNwYXduU3BlYy5jb21tYW5kLCBzcGF3blNwZWMuYXJncywge1xyXG4gICAgICAgICAgICAgICAgY3dkLFxyXG4gICAgICAgICAgICAgICAgd2luZG93c0hpZGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IHNwYXduU3BlYy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgICAgIGZpbmlzaChudWxsLCB7IG1lc3NhZ2U6IGVycj8ubWVzc2FnZSA/IFN0cmluZyhlcnIubWVzc2FnZSkgOiBTdHJpbmcoZXJyKSB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4geyB0cnkgeyBjaGlsZC5raWxsKCk7IH0gY2F0Y2ggeyAvKiDlt7Lnu4/pgIDkuoYgKi8gfSB9LCB0aW1lb3V0TXMpO1xyXG4gICAgICAgIGNoaWxkLnN0ZG91dD8ub24oJ2RhdGEnLCAoZDogQnVmZmVyKSA9PiBjaHVua3MucHVzaChkKSk7XHJcbiAgICAgICAgY2hpbGQuc3RkZXJyPy5vbignZGF0YScsIChkOiBCdWZmZXIpID0+IGVyckNodW5rcy5wdXNoKGQpKTtcclxuICAgICAgICBjaGlsZC5vbignZXJyb3InLCAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgZmluaXNoKG51bGwsIHsgY29kZTogZXJyPy5jb2RlLCBtZXNzYWdlOiBlcnI/Lm1lc3NhZ2UgPyBTdHJpbmcoZXJyLm1lc3NhZ2UpIDogU3RyaW5nKGVycikgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2hpbGQub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlciB8IG51bGwpID0+IHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgaWYgKHRpbWVyID09PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgIGZpbmlzaChjb2RlLCBudWxsKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcbi8qKlxyXG4gKiDov5znqIvkv6Hmga8o5bim57yT5a2YKeOAgioq6L+Z5Liq5Ye95pWw5rC46L+c5LiN6Zi75aGe44CB5rC46L+c5LiNIGF3YWl0IOWklumDqOi/m+eoiyoq44CCXHJcbiAqXHJcbiAqIOS4uuS7gOS5iOi/meS5iOiuvuiuoTrlroPot5HlnKjnvJbovpHlmajkuLvov5vnqIvph4ws6ICMIG5wbSDmr4/kuKrov5vnqIvopoEgMX4zIOenkiznvZHnu5zlnY/kuobov5jlj6/og73kuIDnm7TkuI3ov5Tlm57jgIJcclxuICog5pep5YWI55So5ZCM5q2lIHNwYXduICsg6YCQ5Liq5p+lLOihqOeOsOWwseaYr1wi54K55byA6L+Z5LiA6aG1LOe8lui+keWZqOWIq+WkhOS5n+ayoeWPjeW6lFwi44CCXHJcbiAqIOeOsOWcqDrlkb3kuK3nvJPlrZjnq4vliLvov5Tlm5476L+H5pyf5YiZKirlhYjov5Tlm57ml6flgLwqKizlkIzml7blkI7lj7DliLfmlrAo5LiNIGF3YWl0KTtcclxuICog5LuO5rKh5oiQ5Yqf6L+H5pe26L+U5Zue5piO56Gu55qE5o+Q56S65paH5qGILOiAjOS4jeaYr+iuqeiwg+eUqOaWueW5suetieOAglxyXG4gKlxyXG4gKiDlpLHotKXkuI3mipvlvILluLgs5Lmf5LiN6K6p6Z2i5p2/56m6552A6KOF5L2cXCLmsqHmnInmqKHlnZdcIjrmiorljp/lm6DkuIDotbflm57kvKAs6Z2i5p2/5pi+56S65oiQ5o+Q56S6IOKAlOKAlFxyXG4gKiDov5nmmK/mnIDliJ3lsLHlrprkuIvnmoTopoHmsYIoXCLmsqHmnInnvZHnu5zlsLHmj5DnpLrlsLHooYzkuoZcIinjgIJcclxuICovXHJcbmZ1bmN0aW9uIHF1ZXJ5UmVnaXN0cnkoZm9yY2U6IGJvb2xlYW4pOiB7IGVudHJpZXM6IElTaGFyZWRDYXRhbG9nRW50cnlbXTsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB7XHJcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgY29uc3QgZnJlc2ggPSByZWdpc3RyeUNhY2hlICYmIG5vdyAtIHJlZ2lzdHJ5Q2FjaGUuYXQgPCBSRUdJU1RSWV9DQUNIRV9NUztcclxuXHJcbiAgICBpZiAoIWZvcmNlICYmIGZyZXNoKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogcmVnaXN0cnlDYWNoZSEuZW50cmllcywgZXJyb3I6IHJlZ2lzdHJ5Q2FjaGUhLmVycm9yIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6ZyA6KaB5pu05pawOuWQjuWPsOWOu+WItyzkuI3lnKjov5nph4znrYlcclxuICAgIHZvaWQgcmVmcmVzaFJlZ2lzdHJ5KCk7XHJcblxyXG4gICAgaWYgKHJlZ2lzdHJ5Q2FjaGUpIHtcclxuICAgICAgICByZXR1cm4geyBlbnRyaWVzOiByZWdpc3RyeUNhY2hlLmVudHJpZXMsIGVycm9yOiByZWdpc3RyeUNhY2hlLmVycm9yIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGVudHJpZXM6IFtdLFxyXG4gICAgICAgIGVycm9yOiByZWdpc3RyeVJlZnJlc2hpbmcgPyAn5q2j5Zyo6I635Y+W6L+c56iL5L+h5oGv4oCmJyA6ICfov5znqIvkv6Hmga/mmoLkuI3lj6/nlKgo56a757q/5oiW6LaF5pe2KScsXHJcbiAgICB9O1xyXG59XHJcblxyXG4vKiog55yf5q2j55qE5ouJ5Y+WOuW8guatpeOAgeacieW5tuWPkemXuOOAgeWNleWMheWksei0peS4jeaLluWeruaVtOS7veWIl+ihqCAqL1xyXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoUmVnaXN0cnkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAocmVnaXN0cnlSZWZyZXNoaW5nKSByZXR1cm47XHJcbiAgICByZWdpc3RyeVJlZnJlc2hpbmcgPSB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcclxuICAgICAgICBjb25zdCBmYWlsdXJlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIEtOT1dOX1BBQ0tBR0VTKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSAnbnBtIHZpZXcgJyArIG5hbWUgKyAnIC0tanNvbic7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwYXduU3BlYyA9IHNwYXduU3BlY0ZvcihcclxuICAgICAgICAgICAgICAgIFtwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ25wbS5jbWQnIDogJ25wbScsIC4uLnZpZXdBcmd2KG5hbWUpXSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgeyByZXN1bHQsIHN0ZG91dCB9ID0gYXdhaXQgcnVuTnBtQXN5bmMoY29tbWFuZCwgc3Bhd25TcGVjLCBwcm9qZWN0UGF0aCgpLCBSRUdJU1RSWV9RVUVSWV9USU1FT1VUX01TKTtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcclxuICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gobmFtZSArICc6JyArIChyZXN1bHQuaGludCA/PyAoJ+i2heaXtuaIlumAgOWHuueggSAnICsgKHJlc3VsdC5leGl0Q29kZSA/PyAn5pyq55+lJykpKSk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHBhcnNlVmlld1Jlc3VsdChzdGRvdXQpO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkpIGVudHJpZXMucHVzaChlbnRyeSk7XHJcbiAgICAgICAgICAgIGVsc2UgZmFpbHVyZXMucHVzaChuYW1lICsgJzrov5Tlm57lhoXlrrnkuI3mmK/pooTmnJ/nmoQgSlNPTiDlvaLnirYnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICoq6YOo5YiGKirlpLHotKXkuZ/opoHmiqXlh7rmnaU65pep5YWI5Y+q5ZyoXCLlhajpg6jlpLHotKVcIuaXtuaJjeWbnuS8oCxcclxuICAgICAgICAvLyDnu5PmnpxcIjMg5Liq5p+l5YiwICsgMSDkuKrotoXml7ZcIuWujOWFqOmdmem7mCDigJTigJQg6Z2i5p2/5pi+56S6XCLml6Dms5Xnoa7orqRcIuWNtOS4jee7meS7u+S9leWOn+WboOOAglxyXG4gICAgICAgIGNvbnN0IGVycm9yID0gZmFpbHVyZXMubGVuZ3RoID4gMCA/ICgn6YOo5YiG6L+c56iL5L+h5oGv6I635Y+W5aSx6LSlOicgKyBmYWlsdXJlcy5qb2luKCc7JykpIDogbnVsbDtcclxuICAgICAgICByZWdpc3RyeUNhY2hlID0geyBhdDogRGF0ZS5ub3coKSwgZW50cmllcywgZXJyb3IgfTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgcmVnaXN0cnlSZWZyZXNoaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDnu4Too4XlhazlhbHmqKHlnZfnmoTlrozmlbTnirbmgIHjgIJcclxuICpcclxuICog5LiJ5Liq5p2l5rqQ5ZCI6LW35p2l5omN5piv5a6M5pW05YiX6KGo77yaXHJcbiAqIDEuIOacrOahhuaetioq5byA5Y+R5bel5L2c5Yy6Kirph4znmoQgYHBhY2thZ2VzL3NoYXJlZC8qYO+8iOWPquacieacrOS7k+W6k+aJjeiupO+8jOingVxyXG4gKiAgICBgZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyYO+8ieKAlOKAlCDog73nu5nlh7ogYGZpbGU6YCDlronoo4Xor7TmmI7nrKbvvJtcclxuICogMi4gYG5vZGVfbW9kdWxlc2Ag6YeM5bey57uP6KOF5LqG55qE77yI6Z2g5YyF5riF5Y2V6YeM55qE5qCH6K6w6K6k5Ye65p2l77yJ77ybXHJcbiAqIDMuICoq6L+c56iLIHJlZ2lzdHJ5KirvvIjmjInlj5HnjrDlhbPplK7or43mkJzntKLvvInigJTigJQg6KaG55uWXCLov5jmsqHoo4XjgIHkvYblj6/ku6Xoo4VcIueahOmCo+S6m+OAglxyXG4gKlxyXG4gKiDliLvmhI8qKuS4jSoq6Z2g5YyF5ZCN5Yy56YWN5p2l6K+G5Yir5YWs5YWx5qih5Z2X77yac2NvcGUg6L+Y5rKh5a6a77yI6KeBIFJPQURNQVAg55qEIFMxYe+8ie+8jFxyXG4gKiDmjaLkuKogc2NvcGUg5bCx6K6k5LiN5Ye65p2l5LqG44CCXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlUmVnaXN0cnkgPSBmYWxzZSkge1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICBjb25zdCBtYW5pZmVzdCA9IHJlYWRQcm9qZWN0TWFuaWZlc3Qocm9vdCk7XHJcbiAgICBjb25zdCBwcm9qZWN0RGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAgIC4uLihtYW5pZmVzdD8uZGVwZW5kZW5jaWVzID8/IHt9KSxcclxuICAgICAgICAuLi4obWFuaWZlc3Q/LmRldkRlcGVuZGVuY2llcyA/PyB7fSksXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNoYXJlZERpciA9IGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0Rpcihyb290KTtcclxuICAgIGNvbnN0IGxvY2FsID0gc2hhcmVkRGlyID8gbGlzdExvY2FsQ2F0YWxvZyhzaGFyZWREaXIsIHJvb3QpIDogW107XHJcblxyXG4gICAgY29uc3QgaW5zdGFsbGVkU2hhcmVkOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhwcm9qZWN0RGVwZW5kZW5jaWVzKSkge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IHJlYWRJbnN0YWxsZWRQYWNrYWdlKHJvb3QsIG5hbWUpO1xyXG4gICAgICAgIGlmIChwa2cuaW5zdGFsbGVkICYmIGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QocGtnLm1hbmlmZXN0KSkge1xyXG4gICAgICAgICAgICBpbnN0YWxsZWRTaGFyZWQucHVzaChjYXRhbG9nRW50cnlGcm9tSW5zdGFsbGVkKG5hbWUsIHBrZy5tYW5pZmVzdCwgcGtnLnZlcnNpb24pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgLy8g5qGG5p625LiO5omp5bGV5LiN5piv5YWs5YWx5qih5Z2XLOiZveeEtuWug+S7rOS5n+ijheedgOOAgeS5n+WcqCBLTk9XTl9QQUNLQUdFUyDph4wg4oCU4oCUIOS4pOWkhOmDveimgea7pOaOiSxcclxuICAgIC8vIOWQpuWImeS9v+eUqOiAheeahFwi5YWs5YWx5qih5Z2XXCLliJfooajph4zkvJrlhpLlh7rmoYbmnrblkoznvJbovpHlmajmianlsZXjgIJcclxuICAgIGNvbnN0IHNoYXJlZE9ubHkgPSAoZTogSVNoYXJlZENhdGFsb2dFbnRyeSkgPT4gaXNTaGFyZWRNb2R1bGVQYWNrYWdlKGUubmFtZSk7XHJcbiAgICBjb25zdCBjYXRhbG9nID0gbWVyZ2VDYXRhbG9nKFxyXG4gICAgICAgIG1lcmdlQ2F0YWxvZyhsb2NhbCwgcmVnaXN0cnkuZW50cmllcy5maWx0ZXIoc2hhcmVkT25seSkpLFxyXG4gICAgICAgIGluc3RhbGxlZFNoYXJlZC5maWx0ZXIoc2hhcmVkT25seSksXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFwi5Y+v5pu05pawXCLopoHpnaDov5znqIvnmoTmnIDmlrDniYjmnKzlj7fvvIzogIwgbWVyZ2VDYXRhbG9nIOiuqeacrOWcsOmhueS8mOWFiO+8iOWQjOWQjeeahOi/nOeoi+mhueS8muiiq+ebluaOie+8ie+8jFxyXG4gICAgLy8g5omA5Lul6L+Z6YeM5Y2V54us55WZ5LiA5Lu95YyF5ZCNIC0+IOi/nOeoi+acgOaWsOeJiOacrOOAglxyXG4gICAgY29uc3QgcmVnaXN0cnlWZXJzaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5lbnRyaWVzKSB7XHJcbiAgICAgICAgcmVnaXN0cnlWZXJzaW9uc1tlbnRyeS5uYW1lXSA9IGVudHJ5LnZlcnNpb247XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6KaB5p+l5a6e5pe254q25oCB55qE5YyFID0g5YiX6KGo6YeM55qEICsg5a6D5Lus5aOw5piO55qE5L6d6LWW44CCXHJcbiAgICAvLyDkvp3otZblj6/og73kuI3lnKjliJfooajph4zvvIjmma7pgJogbnBtIOWMhe+8ie+8jOS9huWug+ijheayoeijheWQjOagt+imgeaYvuekuuWHuuadpeOAglxyXG4gICAgY29uc3Qgd2FudGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNhdGFsb2cpIHtcclxuICAgICAgICB3YW50ZWQuYWRkKGVudHJ5Lm5hbWUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIE9iamVjdC5rZXlzKGVudHJ5LmRlY2xhcmVkRGVwZW5kZW5jaWVzKSkge1xyXG4gICAgICAgICAgICB3YW50ZWQuYWRkKGRlcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgaW5zdGFsbGVkUGFja2FnZXM6IFJlY29yZDxzdHJpbmcsIElJbnN0YWxsZWRQYWNrYWdlVmlldz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB3YW50ZWQpIHtcclxuICAgICAgICBjb25zdCBwa2cgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBuYW1lKTtcclxuICAgICAgICBpbnN0YWxsZWRQYWNrYWdlc1tuYW1lXSA9IHtcclxuICAgICAgICAgICAgaW5zdGFsbGVkOiBwa2cuaW5zdGFsbGVkLFxyXG4gICAgICAgICAgICB2ZXJzaW9uOiBwa2cudmVyc2lvbixcclxuICAgICAgICAgICAgaXNTaGFyZWRNb2R1bGU6IGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QocGtnLm1hbmlmZXN0KSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgY29uc3Qgc291cmNlcyA9IHsgLi4uc25hcC5nYW1lcGxheVNvdXJjZXMsIC4uLnNuYXAubWFuYWdlclNvdXJjZXMgfTtcclxuXHJcbiAgICBjb25zdCBtb2R1bGVzID0gY2F0YWxvZy5tYXAoKGVudHJ5KSA9PiBidWlsZFNoYXJlZFN0YXR1cyhlbnRyeSwge1xyXG4gICAgICAgIHByb2plY3REZXBlbmRlbmNpZXMsXHJcbiAgICAgICAgaW5zdGFsbGVkUGFja2FnZXMsXHJcbiAgICAgICAgcmVmZXJlbmNlczogeyBbZW50cnkubmFtZV06IGZpbmRQYWNrYWdlUmVmcyhzb3VyY2VzLCBlbnRyeS5uYW1lKSB9LFxyXG4gICAgICAgIGNhdGFsb2csXHJcbiAgICAgICAgcmVnaXN0cnlWZXJzaW9ucyxcclxuICAgIH0pKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1vZHVsZXMsXHJcbiAgICAgICAgLyoqIOacrOWcsOWuieijhea6kO+8myoq5Y+q5pyJ5pys5qGG5p6255qE5byA5Y+R5LuT5bqT6YeM5omN6Z2eIG51bGwqKu+8iOmdouWQkeeUqOaIt+eahOW3peeoi+mHjOawuOi/nOaYryBudWxs77yJICovXHJcbiAgICAgICAgbG9jYWxTb3VyY2U6IHNoYXJlZERpcixcclxuICAgICAgICAvKiog5bel56iL5pyJ5Y+v6K+755qEIHBhY2thZ2UuanNvbiDlkJcgKi9cclxuICAgICAgICBoYXNNYW5pZmVzdDogbWFuaWZlc3QgIT09IG51bGwsXHJcbiAgICAgICAgLyoqIOi/nOeoi+WIl+ihqOaLieWPluWksei0peeahOWOn+WboO+8m+S4uiBudWxsIOihqOekuui/measoeaYr+aIkOWKn+eahO+8iOaIlueUqOS6hue8k+WtmO+8iSAqL1xyXG4gICAgICAgIHJlZ2lzdHJ5RXJyb3I6IHJlZ2lzdHJ5LmVycm9yLFxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOi3keS4gOasoSBucG3jgIJcclxuICpcclxuICog5YWo56iLKirkuI3mipvlvILluLgqKu+8mumAgOWHuueggeOAgXN0ZG91dOOAgXN0ZGVycuOAgeS7peWPiiBzcGF3biDoh6rouqvnmoTlpLHotKXpg73mlLbov5sgSU5wbVJ1blJlc3VsdFxyXG4gKiDlm57kvKDnu5npnaLmnb8g4oCU4oCUIOeUqOaIt+imgeeci+eahOaYryBucG0g6Ieq5bex6K+055qE6K+d77yM6ICM5LiN5piv5LiA5Y+l6L2s6L+w55qEXCLlronoo4XlpLHotKVcIuOAglxyXG4gKi9cclxuZnVuY3Rpb24gcnVuTnBtKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcsIHNwZWNzOiBzdHJpbmdbXSk6IElOcG1SdW5SZXN1bHQge1xyXG4gICAgY29uc3Qgc3Bhd25TcGVjID0gbnBtU3Bhd25TcGVjKGFjdGlvbiwgc3BlY3MpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyAxLiAqKuS4jeaMh+WumiBlbmNvZGluZyoq77ya5ou/5Yiw5Y6f5aeLIEJ1ZmZlciDoh6rlt7Hop6PnoIHvvIzlkKbliJkgY21kIOeahCBHQksg5raI5oGv5Lya5Y+Y5Lmx56CB77ybXHJcbiAgICAgICAgLy8gMi4gKip3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMg5b+F6aG75p2l6IeqIHNwYXduU3BlYyoq77ya5bCR5LqG5a6D77yMTm9kZSDkvJrmiormiJHliqDlpb3nmoRcclxuICAgICAgICAvLyAgICDlvJXlj7flho3ovazkuYnkuIDpgY3vvIxjbWQg5pS25YiwIGBcXFwibnBtLmNtZCBpbnN0YWxsIC4uLlxcXCJg77yM5LqO5piv5pW06KGM6KKr5b2T5oiQ5ZG95Luk5ZCNXHJcbiAgICAgICAgLy8gICAg77yI5oqlXCInbnBtLmNtZCBpbnN0YWxsIC4uLicg5LiN5piv5YaF6YOo5oiW5aSW6YOo5ZG95LukXCLvvIxucG0g5qC55pys5rKh6KKr5ZCv5Yqo77yJ44CCXHJcbiAgICAgICAgY29uc3Qgc3Bhd25lZCA9IHNwYXduU3luYyhzcGF3blNwZWMuY29tbWFuZCwgc3Bhd25TcGVjLmFyZ3MsIHtcclxuICAgICAgICAgICAgY3dkOiBwcm9qZWN0UGF0aCgpLFxyXG4gICAgICAgICAgICB0aW1lb3V0OiBOUE1fVElNRU9VVF9NUyxcclxuICAgICAgICAgICAgd2luZG93c0hpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIG1heEJ1ZmZlcjogMTYgKiAxMDI0ICogMTAyNCxcclxuICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBzcGF3blNwZWMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgIGNvbW1hbmQ6IGZvcm1hdE5wbUNvbW1hbmQoYWN0aW9uLCBzcGVjcyksXHJcbiAgICAgICAgICAgIGV4aXRDb2RlOiB0eXBlb2Ygc3Bhd25lZC5zdGF0dXMgPT09ICdudW1iZXInID8gc3Bhd25lZC5zdGF0dXMgOiBudWxsLFxyXG4gICAgICAgICAgICBzdGRvdXQ6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRvdXQpLFxyXG4gICAgICAgICAgICBzdGRlcnI6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRlcnIpLFxyXG4gICAgICAgICAgICBzcGF3bkVycm9yOiBzcGF3bmVkLmVycm9yXHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAoc3Bhd25lZC5lcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3Bhd25lZC5lcnJvci5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICBjb21tYW5kOiBmb3JtYXROcG1Db21tYW5kKGFjdGlvbiwgc3BlY3MpLFxyXG4gICAgICAgICAgICBleGl0Q29kZTogbnVsbCxcclxuICAgICAgICAgICAgc3Rkb3V0OiAnJyxcclxuICAgICAgICAgICAgc3RkZXJyOiAnJyxcclxuICAgICAgICAgICAgc3Bhd25FcnJvcjogeyBtZXNzYWdlOiBlcnI/Lm1lc3NhZ2UgPyBTdHJpbmcoZXJyLm1lc3NhZ2UpIDogU3RyaW5nKGVycikgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOS7o+i3kSBucG0g6KOFIC8g5Y245LiA5Liq5YWs5YWx5qih5Z2X77yM54S25ZCO5Zue5LiA5Lu95Yi35paw6L+H55qE54q25oCB44CCXHJcbiAqXHJcbiAqIOWPquaOpeWPlyBjYXRhbG9nIOmHjOWtmOWcqOeahOWMheWQjSDigJTigJQg5LiN5oqK5omp5bGV5Y+Y5oiQXCLku7vmhI8gbnBtIOWRveS7pOaJp+ihjOWZqFwi44CCXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBydW5TaGFyZWRBY3Rpb24oYWN0aW9uOiAnaW5zdGFsbCcgfCAndW5pbnN0YWxsJywgcGFja2FnZU5hbWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XHJcbiAgICAvLyDpnaLmnb/lj6/og73kvKDlrZfnrKbkuLIs5Lmf5Y+v6IO95LiN5bCP5b+D5YyF5oiQ5pWw57uEIOKAlOKAlCDkuKTnp43pg73mlLYsXHJcbiAgICAvLyDliKvorqlcIuWwkeS4gOS4quaLrOWPt1wi5Y+Y5oiQ55So5oi355yL5Yiw55qEXCLnvLrlsJHljIXlkI1cIuOAglxyXG4gICAgY29uc3Qgd2FudGVkID0gQXJyYXkuaXNBcnJheShwYWNrYWdlTmFtZSkgPyAocGFja2FnZU5hbWUgYXMgYW55KVswXSA6IHBhY2thZ2VOYW1lO1xyXG4gICAgaWYgKCF3YW50ZWQgfHwgdHlwZW9mIHdhbnRlZCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+e8uuWwkeWMheWQjScpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJlZm9yZSA9IGF3YWl0IHF1ZXJ5U2hhcmVkU3RhdGUoKTtcclxuICAgIGNvbnN0IGVudHJ5ID0gYmVmb3JlLm1vZHVsZXMuZmluZCgobSkgPT4gbS5uYW1lID09PSB3YW50ZWQpO1xyXG4gICAgaWYgKCFlbnRyeSkge1xyXG4gICAgICAgIGNvbnN0IGtub3duID0gYmVmb3JlLm1vZHVsZXMubWFwKChtKSA9PiBtLm5hbWUpO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYOS4jeWcqOWPr+WuieijheWIl+ihqOmHjOeahOWMhe+8miR7d2FudGVkfWBcclxuICAgICAgICAgICAgKyAoa25vd24ubGVuZ3RoID8gYO+8iOW9k+WJjeWIl+ihqO+8miR7a25vd24uam9pbignLCAnKX3vvIlgIDogJ++8iOW9k+WJjeWIl+ihqOS4uuepuu+8iScpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5a6J6KOF6KaB5oqKKirmnKzlnLDog73op6PmnpDliLDnmoTkvp3otZbkuIDotbfluKbkuIoqKu+8muWPquijheWug+S4gOS4queahOivne+8jG5wbSDkvJrljrsgcmVnaXN0cnkg5om+5L6d6LWW77yMXHJcbiAgICAvLyDogIzmnKzlnLDmupDph4znmoTkvp3otZblubbmsqHmnInlj5HluIMg4oCU4oCUIOW/heeEtiBFNDA077yI5a6e5rWL6L+H77yJ44CCXHJcbiAgICAvLyDljbjovb3mjIkqKuWMheWQjSoq77yIbnBtIOiupOWMheWQje+8jOS4jeiupCBmaWxlOiDor7TmmI7nrKbvvInjgIJcclxuICAgIGNvbnN0IHNwZWNzID0gYWN0aW9uID09PSAndW5pbnN0YWxsJ1xyXG4gICAgICAgID8gW2VudHJ5Lm5hbWVdXHJcbiAgICAgICAgOiBjb2xsZWN0SW5zdGFsbFNwZWNzKGVudHJ5LCBiZWZvcmUubW9kdWxlcyk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBydW5OcG0oYWN0aW9uLCBzcGVjcyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDlpLHotKUqKuS4jeaKm+W8guW4uCoq77ya6Z2i5p2/6ZyA6KaB5ou/5Yiw57uT5p6E5YyW55qE57uT5p6c77yI5ZG95Luk44CB6YCA5Ye656CB44CB5Y6f5aeL6L6T5Ye677yJ77yMXHJcbiAgICAgICAgICog5omN6IO95Zyo5by556qX6YeM5Y6f5qC35bGV56S6IG5wbSDoh6rlt7Hor7TnmoTor53jgILpnZ7ms5XovpPlhaXku43nhLbmipsg4oCU4oCUIOmCo+aYr+iwg+eUqOaWueWGmemUmeS6huOAglxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9rOiByZXN1bHQub2ssXHJcbiAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIOWksei0peaXtuS4gOWPpSoq5Y2V6KGMKirmkZjopoHvvIjpnaLmnb/mtojmga/ljLrnlKjvvInjgILlrozmlbTovpPlh7rlnKggYHJlc3VsdGAg6YeM77yM55Sx5by556qX5bGV56S6IOKAlOKAlFxyXG4gICAgICAgICAqIOS5i+WJjeaKiuaVtOautSBucG0g6L6T5Ye65aGe6L+b5raI5oGv5Yy677yM5Lya5oqK5Y+z5qCP5oyk5Y+Y5b2i5bm25ZKM5raI5oGv5Y+g5Zyo5LiA6LW344CCXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWVzc2FnZTogcmVzdWx0Lm9rID8gbnVsbCA6IHN1bW1hcml6ZU5wbUZhaWx1cmUoYWN0aW9uLCB3YW50ZWQsIHJlc3VsdCksXHJcbiAgICAgICAgLy8g6KOF5a6M56uL5Yi75Zue5LiA5Lu95paw54q25oCB77yM6Z2i5p2/5LiN55So5YaN6LeR5LiA5qyh5p+l6K+iXHJcbiAgICAgICAgLi4ucXVlcnlTaGFyZWRTdGF0ZSgpLFxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqIOi1hOa6kOaYr+WQpuWtmOWcqCAqL1xyXG5mdW5jdGlvbiBhc3NldEV4aXN0cyh1cmw6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCB1cmwpLnRoZW4oKGluZm86IHVua25vd24pID0+ICEhaW5mbyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDnoa7kv53nm67lvZXlrZjlnKjvvIzkuI3lrZjlnKjliJnliJvlu7pcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZURpcihkaXJVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCBkaXJVcmwpO1xyXG4gICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgZGlyVXJsLCBudWxsKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqIOebruW9leS4jeWtmOWcqOWImeW7uu+8jOepuuebruW9leWImeWIoOaOie+8iOeUn+aIkC/liKDpmaTlkI7muIXnkIbnlKjvvIkgKi9cclxuYXN5bmMgZnVuY3Rpb24gcHJ1bmVFbXB0eURpcihhYnNEaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAoc3RhdFN5bmMoYWJzRGlyKS5pc0RpcmVjdG9yeSgpICYmIHJlYWRkaXJTeW5jKGFic0RpcikubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZVN5bmMoYWJzRGlyKTtcclxuICAgICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgLyog5LiN5a2Y5Zyo5bCx566X5LqGICovXHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiDmib7lh7rlvJXnlKjkuobmjIflrpogY2lkIOmbhuWQiOeahOW3suW6j+WIl+WMlui1hOa6kCAqL1xyXG5mdW5jdGlvbiBmaW5kQXNzZXRSZWZzKHNuYXA6IElQcm9qZWN0U25hcHNob3QsIGNpZHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgaGl0czogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmICghY2lkcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gaGl0cztcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcmVsIG9mIE9iamVjdC5rZXlzKHNuYXAuc2VyaWFsaXplZCkpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gc25hcC5zZXJpYWxpemVkW3JlbF07XHJcbiAgICAgICAgaWYgKGNpZHMuc29tZSgoY2lkKSA9PiB0ZXh0LmluY2x1ZGVzKGNpZCkpKSB7XHJcbiAgICAgICAgICAgIGhpdHMucHVzaChyZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoaXRzO1xyXG59XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDmlrnms5UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBtZXRob2RzOiB7IFtrZXk6IHN0cmluZ106ICguLi5hbnk6IGFueSkgPT4gYW55IH0gPSB7XHJcbiAgICAvKipcclxuICAgICAqIOahhuaetuS4juaJqeWxleWQhOiHqueahOeJiOacrOS/oeaBryjmnKzlnLAgKyBucG0g5pyA5pawKeOAglxyXG4gICAgICpcclxuICAgICAqIOaJqeWxleiHqui6q+eJiOacrOivu+Wug+iHquW3seeahCBwYWNrYWdlLmpzb2475qGG5p6254mI5pys6K+75bel56iLIG5vZGVfbW9kdWxlcyDph4znmoTpgqPku70g4oCU4oCUXHJcbiAgICAgKiDkuKTogIXpg73mmK9cIuWunumZheijheS6huS7gOS5iFwi55qE5LqL5a6eLOS4jeaYr+mFjee9rumHjOWGmeS6huS7gOS5iOOAglxyXG4gICAgICog5pyJ5rKh5pyJ5paw54mI5Lqk57uZ6Z2i5p2/5q+U6L6DIHZlcnNpb24g5LiOIGxhdGVzdCzov5nph4zkuI3mm7/lroPliKTmlq0o5YWN5b6X5Lik6L655ZCE5YaZ5LiA5aWXKeOAglxyXG4gICAgICovXHJcbiAgICAvKipcclxuICAgICAqIOaKiiBub2RlX21vZHVsZXMg6YeM55qE5omp5bGV5ou36L+bIGV4dGVuc2lvbnMv44CCXHJcbiAgICAgKlxyXG4gICAgICog57yW6L6R5ZmoKirlj6rku47lt6XnqIvnmoQgZXh0ZW5zaW9ucy8g5Yqg6L295omp5bGVKios5omA5LulIG5wbSBpbnN0YWxsIOWujOW/hemhu+iQvei/meS4gOebmCxcclxuICAgICAqIOWQpuWImVwi5pu05paw5oiQ5YqfXCLlj6rlj5HnlJ/lnKggbm9kZV9tb2R1bGVzIOmHjCznvJbovpHlmajph4zkuIDngrnlj5jljJbpg73msqHmnInjgIJcclxuICAgICAqIOiQveebmOS5i+WQjumcgOimgemHjeWQr+e8lui+keWZqOaJjeeUn+aViCDigJTigJQg6L+Z5LiA54K555Sx6Z2i5p2/5paH5qGI5ZGK55+lLOi/memHjOS4jeWBh+ijheeDreabtOaWsOOAglxyXG4gICAgICovXHJcbiAgICBzeW5jRXh0ZW5zaW9uKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IGZyb20gPSBqb2luKHJvb3QsIFwibm9kZV9tb2R1bGVzXCIsIG5hbWUpO1xyXG4gICAgICAgIGlmICghZXhpc3RzU3luYyhmcm9tKSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIG1lc3NhZ2U6IFwibm9kZV9tb2R1bGVzIOmHjOayoeaciSBcIiArIG5hbWUgKyBcIizlhYjlronoo4Xlho3okL3nm5hcIiB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0byA9IGpvaW4ocm9vdCwgXCJleHRlbnNpb25zXCIsIG5hbWUuc3BsaXQoXCIvXCIpLnBvcCgpIGFzIHN0cmluZyk7XHJcbiAgICAgICAgcmVtb3ZlU3luYyh0byk7XHJcbiAgICAgICAgY29weVN5bmMoZnJvbSwgdG8pO1xyXG4gICAgICAgIC8vIOWbnuaKpSoq5a6e6ZmF5ou36L+H5Y6755qE54mI5pysKio66L+Z5qC36Z2i5p2/6IO96K+0XCLlt7Lmm7TmlrDliLAgeC55LnpcIuiAjOS4jeaYr+aLvyBsYXRlc3Qg54yc44CCXHJcbiAgICAgICAgbGV0IHZlcnNpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZlcnNpb24gPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhqb2luKHRvLCAncGFja2FnZS5qc29uJyksICd1dGY4JykpLnZlcnNpb24gPz8gbnVsbDtcclxuICAgICAgICB9IGNhdGNoIHsgLyog6K+75LiN5Yiw5bCx566X5LqGLOS4jee8luS4gOS4qiAqLyB9XHJcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHBhdGg6IHRvLCB2ZXJzaW9uIH07XHJcbiAgICB9LFxyXG5cclxuICAgIGFzeW5jIHF1ZXJ5VmVyc2lvbnMoZm9yY2VSZWdpc3RyeSA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE9mID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoaXQgPSByZWdpc3RyeS5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIGhpdCA/IGhpdC52ZXJzaW9uIDogbnVsbDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBmcmFtZXdvcmtOYW1lID0gJ0BjY2dmL2ZyYW1ld29yayc7XHJcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgZnJhbWV3b3JrTmFtZSk7XHJcblxyXG4gICAgICAgIC8qKiDmnKzku5PlupPnmoTlvIDlj5Hlt6XkvZzljLo65qGG5p625piv5rqQ56CB44CB5omp5bGV5bCx5piv6L+Z5LiA5Lu9IOKAlOKAlCDpnaLmnb/mja7mraTmlLnnp7DlkbzlubbnpoHnlKjmm7TmlrAgKi9cclxuICAgICAgICBjb25zdCBpbldvcmtzcGFjZSA9IGV4aXN0c1N5bmMoam9pbihyb290LCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmcmFtZXdvcms6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGZyYW1ld29ya05hbWUsXHJcbiAgICAgICAgICAgICAgICBpbnN0YWxsZWQ6IGZyYW1ld29yay5pbnN0YWxsZWQsXHJcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2U6IGluV29ya3NwYWNlLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogZnJhbWV3b3JrLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBsYXRlc3Q6IGxhdGVzdE9mKGZyYW1ld29ya05hbWUpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleHRlbnNpb246IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHBhY2thZ2VKU09OLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBwYWNrYWdlSlNPTi52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlOiBpbldvcmtzcGFjZSxcclxuICAgICAgICAgICAgICAgIGxhdGVzdDogbGF0ZXN0T2YocGFja2FnZUpTT04ubmFtZSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBvcGVuV29ya2JlbmNoKCkge1xyXG4gICAgICAgIEVkaXRvci5QYW5lbC5vcGVuKGAke3BhY2thZ2VKU09OLm5hbWV9LndvcmtiZW5jaGApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog6Z2i5p2/55qE5bGC57qn5LiL5ouJ55Sx5Li76L+b56iL5LiL5Y+R77yM6YG/5YWN5omp5bGV6YeM5Ye6546w56ys5LqM5Lu95bGC57qn5YiX6KGoICovXHJcbiAgICBxdWVyeUxheWVycygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5MQVlFUlNdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOmdouadv+aWh+ahiO+8muS7pSBpMThuL3poLmpzIOeahCBrZXkg5YWo6ZuG5Li65YeG77yM6YCQ5Liq5Lqk57uZ57yW6L6R5ZmoIGkxOG4g6Kej5p6Q5b2T5YmN6K+t6KiA44CCXHJcbiAgICAgKiDov5nmoLfpnaLmnb/kvqfkuI3pnIDopoHliKTmlq3or63oqIDvvIzkuZ/kuI3kvp3otZYgRWRpdG9yLkkxOG4g5piv5ZCm5a2Y5Zyo5LqO6Z2i5p2/5LiK5LiL5paH6YeM44CCXHJcbiAgICAgKi9cclxuICAgIHF1ZXJ5STE4bigpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCB0YWJsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFpIX1NUUklOR1MpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGwgPSBgJHtwYWNrYWdlSlNPTi5uYW1lfS4ke2tleX1gO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9IFpIX1NUUklOR1Nba2V5XTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpdCA9IEVkaXRvci5JMThuLnQoZnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGl0ICYmIGhpdCAhPT0gZnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBoaXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOe8lui+keWZqCBpMThuIOS4jeWPr+eUqOWwseS/neeVmeS4reaWhyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhYmxlW2tleV0gPSB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDpooTliLbkvZPmqKHmnb/liJfooajvvIjkvpvpnaLmnb/kuIvmi4nvvIkgKi9cclxuICAgIHF1ZXJ5VGVtcGxhdGVzKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiB7XHJcbiAgICAgICAgcmV0dXJuIFBSRUZBQl9URU1QTEFURVMubWFwKChpZCkgPT4gKHsgaWQsIGxhYmVsOiBQUkVGQUJfVEVNUExBVEVfTEFCRUxTW2lkXSB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+iIGdhbWVwbGF5IOS4i+W3suacieeahOaooeWdl+WIl+ihqO+8iOWQqyBvcmRlcu+8ieOAglxyXG4gICAgICog5LiO5L2T5qOA5YWx55SoIGRvY3Rvci5saXN0TW9kdWxlc++8jOS/neivgemdouadv+aYvuekuuWSjOS9k+ajgOWIpOWumuS4gOiHtOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeU1vZHVsZXMoKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RNb2R1bGVzKHNuYXApLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5kaXIsXHJcbiAgICAgICAgICAgIG9yZGVyOiBtLm9yZGVyID8/IDAsXHJcbiAgICAgICAgICAgIGhhc01vZGVsOiBtLm1vZGVsRmlsZSAhPT0gbnVsbCxcclxuICAgICAgICAgICAgaGFzTW9kdWxlOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyDpnaLmnb/nlKjov5nkuInkuKrot6/lvoTlgZrjgIzkuIDplK7miZPlvIDohJrmnKzjgI3vvJtldmVudHNGaWxlIOWPr+iDveS4uiBudWxs77yI6ICB5qih5Z2X77yJXHJcbiAgICAgICAgICAgIG1vZHVsZUZpbGU6IG0ubW9kdWxlRmlsZSxcclxuICAgICAgICAgICAgbW9kZWxGaWxlOiBtLm1vZGVsRmlsZSxcclxuICAgICAgICAgICAgZXZlbnRzRmlsZTogbS5ldmVudHNGaWxlLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWQr+WKqOmhuuW6j+mihOiniCArIOWxgue6p+WNoOeUqO+8iOW8gOWPkei+heWKqe+8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlPdmVydmlldygpIHtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3cyA9IGxpc3RWaWV3cyhzbmFwKTtcclxuICAgICAgICBjb25zdCB1c2FnZSA9IExBWUVSUy5tYXAoKGxheWVyKSA9PiAoe1xyXG4gICAgICAgICAgICBsYXllcixcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLmZpbHRlcigodikgPT4gdi5yZWdpc3RlcmVkTGF5ZXIgPT09IGxheWVyKS5tYXAoKHYpID0+IHYuY2xhc3NOYW1lKSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IGxpc3RNb2R1bGVzKHNuYXApO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9yZGVyOiBidWlsZE9yZGVyUGxhbihzbmFwKSxcclxuICAgICAgICAgICAgbGF5ZXJzOiB1c2FnZSxcclxuICAgICAgICAgICAgbW9kdWxlQ291bnQ6IG1vZHVsZXMubGVuZ3RoLFxyXG4gICAgICAgICAgICBtYW5hZ2VyQ291bnQ6IGxpc3RNYW5hZ2VycyhzbmFwKS5sZW5ndGgsXHJcbiAgICAgICAgICAgIHZpZXdDb3VudDogdmlld3MubGVuZ3RoLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDkuIDplK7kvZPmo4AgKi9cclxuICAgIGFzeW5jIHJ1bkRvY3RvcigpOiBQcm9taXNlPHsgZmluZGluZ3M6IElGaW5kaW5nW107IHN1bW1hcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmRpbmdzID0gcnVuRG9jdG9yKHNuYXBzaG90KCksIExBWUVSUyk7XHJcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IHsgZXJyb3I6IDAsIHdhcm46IDAsIGluZm86IDAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmluZGluZ3MpIHtcclxuICAgICAgICAgICAgc3VtbWFyeVtmLnNldmVyaXR5XSA9IChzdW1tYXJ5W2Yuc2V2ZXJpdHldID8/IDApICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZmluZGluZ3MsIHN1bW1hcnkgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6Lmn5DmqKHlnZfnmoQgVmlldyDliJfooajjgIJcclxuICAgICAqIOavlOaXp+WunueOsOWkmuS6hiBwcmVmYWJFeGlzdHMg4oCU4oCUIOaXp+eJiOaMiee6puWumuaLvCBVUkwg5Y205LuO5LiN5p+l55uY77yMXHJcbiAgICAgKiDkuo7mmK/igJzohJrmnKzlnKjjgIHpooTliLbkvZPkuKLkuobigJ3nmoQgVmlldyDkuZ/kvJrooqvliJflh7rmnaXvvIzngrnkuobmiY3lpLHotKXjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlWaWV3cyhtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICByZXR1cm4gbGlzdFZpZXdzKHNuYXApXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYubW9kdWxlRGlyID09PSBtb2R1bGVEaXIpXHJcbiAgICAgICAgICAgIC5tYXAoKHYpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2LmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIHNjcmlwdFVybDogZGJVcmwodi5zY3JpcHRGaWxlKSxcclxuICAgICAgICAgICAgICAgIHByZWZhYlVybDogdi5yZWdpc3RlcmVkUGF0aCA/IGRiVXJsKGAke1JFU09VUkNFU19ESVJ9LyR7di5yZWdpc3RlcmVkUGF0aH0ucHJlZmFiYCkgOiAnJyxcclxuICAgICAgICAgICAgICAgIHByZWZhYkV4aXN0czogdi5yZWdpc3RlcmVkUGF0aCA/IHNuYXAucHJlZmFic0J5UmVzb3VyY2VQYXRoW3YucmVnaXN0ZXJlZFBhdGhdICE9PSB1bmRlZmluZWQgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGxheWVyOiB2LnJlZ2lzdGVyZWRMYXllciA/PyAnJyxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFuYWdlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAvKiogbWFuYWdlciDliJfooajvvIhhc3NldHMvc2NyaXB0cy9tYW5hZ2VyIOS4i+ebtOWxnueahCAqTWFuYWdlci50c++8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlNYW5hZ2VycygpIHtcclxuICAgICAgICByZXR1cm4gbGlzdE1hbmFnZXJzKHNuYXBzaG90KCkpLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgIGZpbGU6IG0uc2NyaXB0RmlsZSxcclxuICAgICAgICAgICAgZXh0ZW5kc1NpbmdsZXRvbjogbS5leHRlbmRzU2luZ2xldG9uLFxyXG4gICAgICAgICAgICBiYXNlQ2xhc3M6IG0uYmFzZUNsYXNzLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7ogbWFuYWdlcu+8mueUn+aIkOS4gOS4que7p+aJv+ahhuaetiBBU2luZ2xldG9uIOeahOWFqOWxgOWNleS+i+iEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1hbmFnZXJOYW1lIOWQjeWtl++8jOWmgiBcImNvbmZpZ1wiIC8gXCJDb25maWdcIiAvIFwiQ29uZmlnTWFuYWdlclwiXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3QgZGlyVXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJVcmwpO1xyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHtkaXJVcmx9LyR7Y2xhc3NOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHNjcmlwdFVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYW5hZ2VyIOW3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOWug++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0Jywgc2NyaXB0VXJsLCBidWlsZE1hbmFnZXJTY3JpcHQoY2xhc3NOYW1lLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7ogbWFuYWdlciDlpLHotKU6ICR7c2NyaXB0VXJsfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRpclVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBzY3JpcHRVcmwsIGZpbGU6IGAke01BTkFHRVJfRElSfS8ke2NsYXNzTmFtZX0udHNgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDliKDpmaQgbWFuYWdlciDohJrmnKwgKi9cclxuICAgIGFzeW5jIGRlbGV0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGlmICghaW5mbykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsCBtYW5hZ2VyIOiEmuacrO+8miR7Y2xhc3NOYW1lfS50c2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke01BTkFHRVJfRElSfWApO1xyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgcmVtb3ZlZDogc2NyaXB0VXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X5YmN55qE5byV55So5qOA5p+l77ya5ZOq5Lqb6LWE5rqQ5byV55So5LqG6K+l5qih5Z2X55qE6ISa5pys44CCXHJcbiAgICAgKiDpnaLmnb/lnKjnoa7orqTmoYbph4zlsZXnpLrvvIzpgb/lhY3liKDlroznlZnkuIvmgqznqbrlvJXnlKjjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlNb2R1bGVSZWZzKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXdzID0gbGlzdFZpZXdzKHNuYXApLmZpbHRlcigodikgPT4gdi5tb2R1bGVEaXIgPT09IG1vZHVsZURpcik7XHJcbiAgICAgICAgY29uc3QgY2lkcyA9IHZpZXdzLm1hcCgodikgPT4gc25hcC5zY3JpcHRDaWRzW3Yuc2NyaXB0RmlsZV0pLmZpbHRlcihCb29sZWFuKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVDaWQgPSBzbmFwLnNjcmlwdENpZHNbYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkubW9kdWxlQ2xhc3N9LnRzYF07XHJcbiAgICAgICAgY29uc3QgYWxsQ2lkcyA9IG1vZHVsZUNpZCA/IGNpZHMuY29uY2F0KFttb2R1bGVDaWRdKSA6IGNpZHM7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLm1hcCgodikgPT4gdi5jbGFzc05hbWUpLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQnk6IGZpbmRBc3NldFJlZnMoc25hcCwgYWxsQ2lkcyksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWcqOe8lui+keWZqOmHjOaJk+W8gOafkOS4quW3peeoi+WGheaWh+S7tu+8iOS9k+ajgOe7k+aenC/mpoLop4jngrnlh7vlrprkvY3nlKjvvIkgKi9cclxuICAgIGFzeW5jIG9wZW5Tb3VyY2UocmVsUGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFyZWxQYXRoIHx8IHJlbFBhdGguaW5jbHVkZXMoJy4uJykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTot6/lvoQ6IFwiJHtyZWxQYXRofVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVybCA9IGRiVXJsKHJlbFBhdGgpO1xyXG4gICAgICAgIC8vIOWFiOehruiupOi1hOa6kOWtmOWcqOS4lOW3suiiq+e8lui+keWZqOWvvOWFpe+8jOWGjeiwiOaJk+W8gO+8m+WQpuWImee7meWHuuaYjuehruWOn+WboFxyXG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDotYTmupDkuI3lrZjlnKjmiJbmnKrooqvnvJbovpHlmajlr7zlhaU6ICR7cmVsUGF0aH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnb3Blbi1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu65qih5Z2X77ya55Sf5oiQIE1vZHVsZSArIE1vZGVsICsg5LqL5Lu25aOw5piOIOS4ieS4quiEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUg5qih5Z2X5ZCN77yM5aaCIFwiYmFnXCIgLyBcIkJhZ1wiIC8gXCJCYWdNb2R1bGVcIlxyXG4gICAgICogQHBhcmFtIG9yZGVyICAgICAg5qih5Z2X5ZCv5Yqo6aG65bqPXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1vZHVsZShtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmFtaW5nID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke25hbWluZy5kaXJ9YDtcclxuXHJcbiAgICAgICAgLy8g5YWI5p+l5a2Y5Zyo5oCn77yM57uZ5Ye65piO56Gu5Y6f5Zug77yI5pen54mI5Y+q5ZyoIGNyZWF0ZS1hc3NldCDov5Tlm57nqbrml7bor7TigJzlj6/og73lt7LlrZjlnKjigJ3vvIlcclxuICAgICAgICBjb25zdCBtb2R1bGVVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c2A7XHJcbiAgICAgICAgY29uc3QgbW9kZWxVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZGVsQ2xhc3N9LnRzYDtcclxuICAgICAgICBjb25zdCBldmVudHNVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLmV2ZW50c05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kdWxlVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaooeWdl+W3suWtmOWcqO+8miR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kZWxVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5qih5Z6L5bey5a2Y5Zyo77yaJHtuYW1pbmcubW9kZWxDbGFzc30udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKGV2ZW50c1VybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDkuovku7blo7DmmI7lt7LlrZjlnKjvvJoke25hbWluZy5ldmVudHNOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIC8qKiDlt7LliJvlu7rmiJDlip/nmoTotYTmupDvvJvku7vkuIDmraXlpLHotKXml7bmjInpgIbluo/lm57mu5rvvIzpgb/lhY3nlZnkuIvljYrmiJDlk4EgKi9cclxuICAgICAgICBjb25zdCBjcmVhdGVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZU9yUm9sbGJhY2sgPSBhc3luYyAodXJsOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgdXJsLCBjb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFhc3NldCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBjcmVhdGVkLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZG9uZSBvZiBjcmVhdGVkLnJldmVyc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIGRvbmUpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgbW9kdWxlRGlyVXJsKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBg5Yib5bu6JHtsYWJlbH3lpLHotKU6ICR7dXJsfSR7Y291bnQgPiAwID8gYO+8iOW3suWbnua7miAke2NvdW50fSDkuKrmlofku7bvvIlgIDogJyd9YCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3JlYXRlZC5wdXNoKHVybCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhcclxuICAgICAgICAgICAgbW9kdWxlVXJsLCBidWlsZE1vZHVsZVNjcmlwdChuYW1pbmcubW9kdWxlQ2xhc3MsIG5hbWluZy5tb2RlbENsYXNzLCBvcmRlciwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgJ+aooeWdlycsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCBjcmVhdGVPclJvbGxiYWNrKG1vZGVsVXJsLCBidWlsZE1vZGVsU2NyaXB0KG5hbWluZy5tb2RlbENsYXNzLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCAn5qih5Z6LJyk7XHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhldmVudHNVcmwsIGJ1aWxkRXZlbnRzU2NyaXB0KG5hbWluZy5kaXIsIG5hbWluZy5tb2R1bGVDbGFzcyksICfkuovku7blo7DmmI4nKTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRpck5hbWU6IG5hbWluZy5kaXIsXHJcbiAgICAgICAgICAgIHByZWZpeDogbmFtaW5nLnByZWZpeCxcclxuICAgICAgICAgICAgbW9kdWxlVXJsLFxyXG4gICAgICAgICAgICBtb2RlbFVybCxcclxuICAgICAgICAgICAgZXZlbnRzVXJsLFxyXG4gICAgICAgICAgICBvcmRlcixcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOabtOaWsOaooeWdl+eahCBvcmRlcu+8muWGmeWbniBNb2R1bGUg6ISa5pys55qEIEBSZWdpc3Rlck1vZHVsZSh7b3JkZXJ9KeOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyB1cGRhdGVNb2R1bGVPcmRlcihtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBHQU1FUExBWV9ESVIsIG1vZHVsZURpcik7XHJcblxyXG4gICAgICAgIGxldCBmaWxlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmaWxlcyA9IHJlYWRkaXJTeW5jKG1vZHVsZURpclBhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLDmqKHlnZfnm67lvZU6ICR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVGaWxlID0gZmlsZXMuZmluZCgoZikgPT4gZi5lbmRzV2l0aCgnTW9kdWxlLnRzJykpO1xyXG4gICAgICAgIGlmICghbW9kdWxlRmlsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsOaooeWdl+iEmuacrDogJHttb2R1bGVEaXJ9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4obW9kdWxlRGlyUGF0aCwgbW9kdWxlRmlsZSk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvb3JkZXJcXHMqOlxccypcXGQrLywgYG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIGlmIChuZXdDb250ZW50ID09PSBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5pyq5ZyoICR7bW9kdWxlRmlsZX0g5Lit5om+5YiwIG9yZGVyIOWtl+autWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3cml0ZUZpbGVTeW5jKGZ1bGxQYXRoLCBuZXdDb250ZW50KTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRiVXJsKGAke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9YCkpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBtb2R1bGVOYW1lOiBtb2R1bGVEaXIsIG9yZGVyIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu6IFZpZXfvvJrlnKjmjIflrprmqKHlnZfkuIvnlJ/miJDohJrmnKwgKyDpooTliLbkvZPvvIzlubbmiorohJrmnKzmjILovb3liLDpooTliLbkvZPmoLnoioLngrnjgIJcclxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSDpooTliLbkvZPmqKHmnb/vvIzop4EgY29uc3RhbnRzLlBSRUZBQl9URU1QTEFURVNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlVmlldyhtb2R1bGVOYW1lOiBzdHJpbmcsIHZpZXdOYW1lOiBzdHJpbmcsIGxheWVyOiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcgPSAnZW1wdHknKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIUxBWUVSUy5pbmNsdWRlcyhsYXllciBhcyBhbnkpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5bGC57qnOiBcIiR7bGF5ZXJ9XCLvvIjlkIjms5XlgLzvvJoke0xBWUVSUy5qb2luKCcsICcpfe+8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzUHJlZmFiVGVtcGxhdGUodGVtcGxhdGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6aKE5Yi25L2T5qih5p2/OiBcIiR7dGVtcGxhdGV9XCLvvIjlkIjms5XlgLzvvJoke1BSRUZBQl9URU1QTEFURVMuam9pbignLCAnKX3vvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplVmlld05hbWUodmlld05hbWUpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlBhdGggPSB2aWV3UHJlZmFiUGF0aChtb2R1bGVEaXIsIGNsYXNzTmFtZSk7XHJcblxyXG4gICAgICAgIC8vIOi3qOaooeWdl+mHjeWQjeS8muWKoOi9vemUmemihOWItuS9k++8iFZpZXdNYW5hZ2VyIOaMieexu+WQjeWFqOWxgOafpeaJvu+8ie+8jOaPkOWJjeaMoeS9j1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNoID0gbGlzdFZpZXdzKHNuYXApLmZpbmQoXHJcbiAgICAgICAgICAgICh2KSA9PiB2LmNsYXNzTmFtZSA9PT0gY2xhc3NOYW1lICYmIHYubW9kdWxlRGlyICE9PSBtb2R1bGVEaXIsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY2xhc2gpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgYFZpZXcg5ZCN5a2XIFwiJHtjbGFzc05hbWV9XCIg5bey6KKr5qih5Z2XIFwiJHtjbGFzaC5tb2R1bGVEaXJ9XCIg5Y2g55So77ybYCArXHJcbiAgICAgICAgICAgICAgICBg5qGG5p625oyJ57G75ZCN5YWo5bGA5p+l5om+77yM6YeN5ZCN5Lya5Yqg6L296ZSZ6aKE5Yi25L2T77yM6K+35o2i5Liq5ZCN5a2XYCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHZpZXdzRGlyVXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcih2aWV3c0RpclVybCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGAke3ZpZXdzRGlyVXJsfS8ke2NsYXNzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhzY3JpcHRVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVmlldyDohJrmnKzlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6UgVmlld++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0Q29udGVudCA9IGJ1aWxkVmlld1NjcmlwdChjbGFzc05hbWUsIHByZWZhYlBhdGgsIGxheWVyLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdEFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHNjcmlwdFVybCwgc2NyaXB0Q29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXNjcmlwdEFzc2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu66ISa5pys5aSx6LSlOiAke3NjcmlwdFVybH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByZWZhYkRpclVybCA9IGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9YDtcclxuICAgICAgICBjb25zdCBwcmVmYWJVcmwgPSBgJHtwcmVmYWJEaXJVcmx9LyR7Y2xhc3NOYW1lfS5wcmVmYWJgO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihwcmVmYWJEaXJVcmwpO1xyXG5cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMocHJlZmFiVXJsKSkge1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6aKE5Yi25L2T5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnByZWZhYu+8iOW3suWbnua7muiEmuacrO+8jOWmgumcgOmHjeW7uuivt+WFiOWIoOmZpOivpSBWaWV377yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wcmVzc2VkVXVpZCA9IGNvbXByZXNzVXVpZChzY3JpcHRBc3NldC51dWlkKTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZmFiQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGJ1aWxkVmlld1ByZWZhYihjbGFzc05hbWUsIGNvbXByZXNzZWRVdWlkLCB0ZW1wbGF0ZSkpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmYWJBc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgcHJlZmFiVXJsLCBwcmVmYWJDb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFwcmVmYWJBc3NldCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7rpooTliLbkvZPlpLHotKU6ICR7cHJlZmFiVXJsfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyDlm57mu5rohJrmnKzvvIzpgb/lhY3nlZnkuIvigJzmnInohJrmnKzmsqHpooTliLbkvZPigJ3nmoTljYrmiJDlk4FcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0Jywgdmlld3NEaXJVcmwpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHByZWZhYkRpclVybCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHZpZXdzRGlyVXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBtb2R1bGVEaXIsIHNjcmlwdFVybCwgcHJlZmFiVXJsLCBwcmVmYWJQYXRoLCBsYXllciwgdGVtcGxhdGUgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaQgdmlld++8muWPquWIoOiHqui6q++8iOiEmuacrCArIOmihOWItuS9kyArIOWQhOiHqiBtZXRh77yJ77yM5LiN56Kw5YW25LuW6LWE5rqQ44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRlbGV0ZVZpZXcobW9kdWxlTmFtZTogc3RyaW5nLCB2aWV3TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVWaWV3TmFtZSh2aWV3TmFtZSk7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiVXJsID0gYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn0vJHtjbGFzc05hbWV9LnByZWZhYmA7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgZGVsZXRlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHVybCBvZiBbcHJlZmFiVXJsLCBzY3JpcHRVcmxdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICAgICAgaWYgKGluZm8pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkLnB1c2godXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5riF55CG56m655uu5b2V77yI5pen54mI5Lya55WZ5LiLIHJlc291cmNlcy92aWV3cy885qih5Z2XPiDov5nnp43nqbrlo7PvvIlcclxuICAgICAgICBhd2FpdCBwcnVuZUVtcHR5RGlyKGpvaW4ocHJvamVjdFBhdGgoKSwgUkVTT1VSQ0VTX0RJUiwgJ3ZpZXdzJywgbW9kdWxlRGlyKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgbW9kdWxlRGlyLCBkZWxldGVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X77ya5YigIGdhbWVwbGF5LzzmqKHlnZc+LyDkuI4gcmVzb3VyY2VzL3ZpZXdzLzzmqKHlnZc+LyDkuKTkuKrnm67lvZXvvIjov57lkIwgbWV0Ye+8ieOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVNb2R1bGUobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclBhdGggPSBqb2luKHByb2plY3RQYXRoKCksIEdBTUVQTEFZX0RJUiwgbW9kdWxlRGlyKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBSRVNPVVJDRVNfRElSLCAndmlld3MnLCBtb2R1bGVEaXIpO1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBbcHJlZmFiRGlyUGF0aCwgbW9kdWxlRGlyUGF0aF0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3luYyhwKTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2gocCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOS4jeWtmOWcqOWImei3s+i/hyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3c2ApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChHQU1FUExBWV9ESVIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbW9kdWxlRGlyLCByZW1vdmVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6LlhazlhbHmqKHlnZfvvJrmnKzlnLDlt6XkvZzljLogKyDlt7Llronoo4UgKyDov5znqIsgcmVnaXN0cnnjgIJcclxuICAgICAqIEBwYXJhbSBmb3JjZSDlvLrliLbph43mlrDmi4nlj5bov5znqIvliJfooajvvIjpnaLmnb/nmoTjgIzliLfmlrDjgI3nlKjvvIlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlTaGFyZWRNb2R1bGVzKGZvcmNlPzogYm9vbGVhbikge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlID09PSB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlronoo4XkuIDkuKrlhazlhbHmqKHlnZfvvJoqKuebtOaOpeS7o+i3kSBgbnBtIGluc3RhbGxgKirjgIJcclxuICAgICAqIOWksei0peaXtuaKm+WHuueahOmUmeivr+mHjOW4puedgCBucG0g55qE5Y6f5aeL6L6T5Ye677yM6Z2i5p2/5Lya5Y6f5qC35bGV56S644CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluc3RhbGxTaGFyZWRNb2R1bGUod2FudGVkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gcnVuU2hhcmVkQWN0aW9uKCdpbnN0YWxsJywgd2FudGVkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWNuOi9veS4gOS4quWFrOWFseaooeWdl++8muebtOaOpeS7o+i3kSBgbnBtIHVuaW5zdGFsbGAgKi9cclxuICAgIGFzeW5jIHVuaW5zdGFsbFNoYXJlZE1vZHVsZSh3YW50ZWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ3VuaW5zdGFsbCcsIHdhbnRlZCk7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBlbiBNZXRob2QgVHJpZ2dlcmVkIG9uIEV4dGVuc2lvbiBTdGFydHVwXHJcbiAqIEB6aCDmianlsZXlkK/liqjml7bop6blj5HnmoTmlrnms5VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkKCkgeyB9XHJcblxyXG4vKipcclxuICogQGVuIE1ldGhvZCB0cmlnZ2VyZWQgd2hlbiB1bmluc3RhbGxpbmcgdGhlIGV4dGVuc2lvblxyXG4gKiBAemgg5Y246L295omp5bGV5pe26Kem5Y+R55qE5pa55rOVXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdW5sb2FkKCkgeyB9XHJcbiJdfQ==
|
|
@@ -215,31 +215,34 @@ module.exports = Editor.Panel.define({
|
|
|
215
215
|
return !!(info && info.latest && info.version && info.latest !== info.version);
|
|
216
216
|
},
|
|
217
217
|
async updateFramework() {
|
|
218
|
-
var _a, _b, _c;
|
|
218
|
+
var _a, _b, _c, _d, _e;
|
|
219
219
|
// 上一版这里直接用了 name,而 name 只定义在 updateExtension 里 ——
|
|
220
220
|
// 那个标识符会落到全局(window.name,通常是空串),于是变成 "@latest",
|
|
221
221
|
// 主进程收到的就是"缺少包名"。自己定义自己的,别蹭别人的变量。
|
|
222
222
|
const name = (_b = (_a = this.versions) === null || _a === void 0 ? void 0 : _a.framework) === null || _b === void 0 ? void 0 : _b.name;
|
|
223
223
|
if (!name)
|
|
224
|
-
return;
|
|
224
|
+
return false;
|
|
225
225
|
if (!this.updateOf((_c = this.versions) === null || _c === void 0 ? void 0 : _c.framework)) {
|
|
226
226
|
this.message = this.t('ui_versions_already_latest');
|
|
227
227
|
return;
|
|
228
228
|
}
|
|
229
|
-
await this.runUpdate('install-shared-module', name
|
|
229
|
+
if (!(await this.runUpdate('install-shared-module', name)))
|
|
230
|
+
return;
|
|
231
|
+
this.message = this.t('ui_msg_framework_updated', { version: ((_e = (_d = this.versions) === null || _d === void 0 ? void 0 : _d.framework) === null || _e === void 0 ? void 0 : _e.latest) || '' });
|
|
230
232
|
},
|
|
231
233
|
async updateExtension() {
|
|
232
234
|
var _a, _b, _c, _d, _e;
|
|
233
235
|
const name = (_b = (_a = this.versions) === null || _a === void 0 ? void 0 : _a.extension) === null || _b === void 0 ? void 0 : _b.name;
|
|
234
236
|
if (!name)
|
|
235
|
-
return;
|
|
237
|
+
return false;
|
|
236
238
|
// 已是最新就别真去装一遍,更别报"已更新" —— 那是在骗用户
|
|
237
239
|
if (!this.updateOf((_c = this.versions) === null || _c === void 0 ? void 0 : _c.extension)) {
|
|
238
240
|
this.message = this.t('ui_versions_already_latest');
|
|
239
241
|
return;
|
|
240
242
|
}
|
|
241
243
|
// 于是 sync-extension 拷回来的还是旧版本 —— 表现就是'点了没用'。
|
|
242
|
-
await this.runUpdate('install-shared-module', name
|
|
244
|
+
if (!(await this.runUpdate('install-shared-module', name)))
|
|
245
|
+
return;
|
|
243
246
|
// 装进 node_modules 还不够:编辑器只认 extensions/ 下那份,必须落盘
|
|
244
247
|
try {
|
|
245
248
|
await Editor.Message.request('ccgf-game-tool', 'sync-extension', name);
|
|
@@ -252,18 +255,21 @@ module.exports = Editor.Panel.define({
|
|
|
252
255
|
/** 与公共模块安装走同一条路:复用现成的 npm 执行与失败展示 */
|
|
253
256
|
async runUpdate(message, name) {
|
|
254
257
|
if (!name)
|
|
255
|
-
return;
|
|
258
|
+
return false;
|
|
256
259
|
this.updating = true;
|
|
257
260
|
this.message = '';
|
|
258
261
|
try {
|
|
259
|
-
const res = await Editor.Message.request('ccgf-game-tool', message,
|
|
262
|
+
const res = await Editor.Message.request('ccgf-game-tool', message, name, true);
|
|
260
263
|
this.message = res && res.ok === false ? '' : name;
|
|
261
264
|
if (res && res.ok === false)
|
|
262
265
|
this.showError(res.message);
|
|
266
|
+
return false;
|
|
263
267
|
await this.loadVersions();
|
|
268
|
+
return true;
|
|
264
269
|
}
|
|
265
270
|
catch (e) {
|
|
266
271
|
this.showError((e === null || e === void 0 ? void 0 : e.message) || e);
|
|
272
|
+
return false;
|
|
267
273
|
}
|
|
268
274
|
finally {
|
|
269
275
|
this.updating = false;
|
|
@@ -717,4 +723,4 @@ module.exports = Editor.Panel.define({
|
|
|
717
723
|
}
|
|
718
724
|
},
|
|
719
725
|
});
|
|
720
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvcGFuZWxzL3dvcmtiZW5jaC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDOztBQUUvQyx1Q0FBd0M7QUFDeEMsK0JBQTRCO0FBQzVCLDZCQUFxQztBQUVyQyw2QkFBNkI7QUFDN0IsSUFBSSxnQkFBZ0IsR0FBUSxJQUFJLENBQUM7QUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztBQUU3QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFVLENBQUM7QUFDdEQseUJBQXlCO0FBQ3pCLE1BQU0sYUFBYSxHQUEyQjtJQUMxQyxLQUFLLEVBQUUsbUJBQW1CO0lBQzFCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsSUFBSSxFQUFFLGtCQUFrQjtDQUMzQixDQUFDO0FBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxTQUFTLEVBQUU7UUFDUCxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksS0FBSyxDQUFDO0tBQ2I7SUFDRCxRQUFRLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNqRyxLQUFLLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwyQ0FBMkMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUMxRixDQUFDLEVBQUU7UUFDQyxHQUFHLEVBQUUsTUFBTTtLQUNkO0lBQ0QsS0FBSyxDQUFDLEtBQUs7UUFDUCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixPQUFPO1FBQ1gsQ0FBQztRQUVELCtCQUErQjtR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QUM7Q0FDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSB2dWUvb25lLWNvbXBvbmVudC1wZXItZmlsZSAqL1xyXG5cclxuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMtZXh0cmEnO1xyXG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XHJcbmltcG9ydCB7IGNyZWF0ZUFwcCwgQXBwIH0gZnJvbSAndnVlJztcclxuXHJcbi8qKiDoh6rliqjph43or5XnmoTlrprml7blmago5qih5Z2X57qnOuWQjOS4gOaXtuWIu+WPqueVmeS4gOS4qikgKi9cclxubGV0IHNoYXJlZFJldHJ5VGltZXI6IGFueSA9IG51bGw7XHJcblxyXG5jb25zdCBwYW5lbERhdGFNYXAgPSBuZXcgV2Vha01hcDxhbnksIEFwcD4oKTtcclxuXHJcbmNvbnN0IFNFVkVSSVRJRVMgPSBbJ2Vycm9yJywgJ3dhcm4nLCAnaW5mbyddIGFzIGNvbnN0O1xyXG4vKiog5L2T5qOA5Lil6YeN57qn5YirIC0+IGkxOG4ga2V5ICovXHJcbmNvbnN0IFNFVkVSSVRZX0tFWVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICBlcnJvcjogJ3VpX3NldmVyaXR5X2Vycm9yJyxcclxuICAgIHdhcm46ICd1aV9zZXZlcml0eV93YXJuJyxcclxuICAgIGluZm86ICd1aV9zZXZlcml0eV9pbmZvJyxcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gRWRpdG9yLlBhbmVsLmRlZmluZSh7XHJcbiAgICBsaXN0ZW5lcnM6IHtcclxuICAgICAgICBzaG93KCkgeyB9LFxyXG4gICAgICAgIGhpZGUoKSB7IH0sXHJcbiAgICB9LFxyXG4gICAgdGVtcGxhdGU6IHJlYWRGaWxlU3luYyhqb2luKF9fZGlybmFtZSwgJy4uLy4uLy4uL3N0YXRpYy90ZW1wbGF0ZS93b3JrYmVuY2gvaW5kZXguaHRtbCcpLCAndXRmLTgnKSxcclxuICAgIHN0eWxlOiByZWFkRmlsZVN5bmMoam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9zdGF0aWMvc3R5bGUvd29ya2JlbmNoL2luZGV4LmNzcycpLCAndXRmLTgnKSxcclxuICAgICQ6IHtcclxuICAgICAgICBhcHA6ICcjYXBwJyxcclxuICAgIH0sXHJcbiAgICBhc3luYyByZWFkeSgpIHtcclxuICAgICAgICBjb25zdCAkYXBwID0gdGhpcy4kLmFwcDtcclxuICAgICAgICBpZiAoISRhcHApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5paH5qGI5YWI5Y+W5Zue5p2l5YaN5oyC6L2977ya5ZCm5YiZ6aaW5bin5Lya5oqK5Y6f5aeLIGtleSDmmL7npLrnu5nnlKjmiLdcclxuICAgICAgICBsZXQgc3RyaW5nczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHN0cmluZ3MgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1pMThuJyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvKiDlj5bkuI3liLDlsLHpgIDljJbkuLoga2V577yM5L2G5LiN5b2x5ZON6Z2i5p2/5Yqf6IO9ICovXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhcHAgPSBjcmVhdGVBcHAoe1xyXG4gICAgICAgICAgICBkYXRhKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAvKiog5Li76L+b56iL5oyJ5b2T5YmN57yW6L6R5Zmo6K+t6KiA6Kej5p6Q5aW955qE5paH5qGI6KGoICovXHJcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5ncyxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOW9k+WJjeWIh+mhte+8mm1vZHVsZSB8IG1hbmFnZXIgKi9cclxuICAgICAgICAgICAgICAgICAgICB0YWI6ICdtb2R1bGUnLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmqKHlnZfliJfooahcclxuICAgICAgICAgICAgICAgICAgICBtb2R1bGVzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE1vZHVsZTogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBzaG93Q3JlYXRlTW9kdWxlOiBmYWxzZSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gbWFuYWdlciDliJfooajvvIjlhajlsYDljZXkvovmnI3liqHvvIlcclxuICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRNYW5hZ2VyOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dDcmVhdGVNYW5hZ2VyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBuZXdNYW5hZ2VyTmFtZTogJycsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaWsOW7uuaooeWdl+ihqOWNlVxyXG4gICAgICAgICAgICAgICAgICAgIG5ld01vZHVsZU5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld01vZHVsZU9yZGVyOiAxLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmqKHlnZcgb3JkZXIg57yW6L6RXHJcbiAgICAgICAgICAgICAgICAgICAgZWRpdE9yZGVyOiAwLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDlvZPliY3mqKHlnZfnmoQgdmlldyDliJfooahcclxuICAgICAgICAgICAgICAgICAgICB2aWV3czogW10sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIm+W7uiB2aWV3IOW8ueeql1xyXG4gICAgICAgICAgICAgICAgICAgIHNob3dDcmVhdGVWaWV3TW9kYWw6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBsYXllcjogJ1dpbmRvdycsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6ICdlbXB0eScsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOWxgue6p+S4juaooeadv+mDveeUseS4u+i/m+eoi+S4i+WPke+8jOaJqeWxlemHjOS4jeWGjeWtmOesrOS6jOS7vSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGxheWVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzOiBbXSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qaC6KeI77yI5ZCv5Yqo6aG65bqPICsg5bGC57qn5Y2g55So77yJXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd092ZXJ2aWV3OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvdmVydmlldzogbnVsbCxcclxuICAgICAgICAgICAgICAgIHZlcnNpb25zOiBudWxsIGFzIGFueSxcclxuICAgICAgICAgICAgICAgIHVwZGF0aW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBvdmVydmlld0xvYWRpbmc6IGZhbHNlLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDkvZPmo4BcclxuICAgICAgICAgICAgICAgICAgICBzaG93RG9jdG9yOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBkb2N0b3JSdW5uaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBmaW5kaW5nczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdG9yR3JvdXBzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBkb2N0b3JTdW1tYXJ5OiB7IGVycm9yOiAwLCB3YXJuOiAwLCBpbmZvOiAwIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOa2iOaBr1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzRXJyb3I6IGZhbHNlLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDlhazlhbHmqKHlnZdcclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRNb2R1bGVzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFNoYXJlZDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5q2j5Zyo6LeRIG5wbe+8muacn+mXtOemgeeUqOWuieijhS/ljbjovb3mjInpkq4gKi9cclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRCdXN5OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAvKiogbnBtIOe7k+aenOW8ueeql+eahOaVsOaNru+8iOWksei0peaXtuWxleekuuWOn+Wni+i+k+WHuu+8iSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlc3VsdDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5by556qX5piv5ZCm5Y+v6KeBIOKAlOKAlCDkuI7mlbDmja7liIblvIDvvIzov5nmoLflhbPmjonkuYvlkI7ov5jog73ku47mtojmga/ooYzlho3ngrnlvIAgKi9cclxuICAgICAgICAgICAgICAgICAgICBzaG93U2hhcmVkUmVzdWx0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5pys5Zyw5a6J6KOF5rqQ55uu5b2V77yb5Li6IG51bGwg6K+05piO6L+Z5piv5pmu6YCa5bel56iLICovXHJcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxTb3VyY2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOi/nOeoi+WIl+ihqOaLieWPluWksei0peeahOWOn+WboO+8iOacieWAvOaXtumdouadv+aYvuekuuaPkOekuu+8jOS9huS4jeW9seWTjeWFtuWug+WKn+iDve+8iSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdHJ5UGVuZGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0cnlFcnJvcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAvKiog5q2j5Zyo5ouJ6L+c56iL5YiX6KGo77yI5LiA5qyh5pCc57SiIDF+NCDnp5LvvIzopoHnu5nkuKrlj43ppojvvIkgKi9cclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RyeUxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICAgICAgICAgIC8qKiDlvZPliY3pgInkuK3nmoTmqKHlnZflr7nosaHvvIjliJfooajph4zlj6rlrZjkuobnsr7nroDkv6Hmga/vvIzov5nph4zlj5blm57lrozmlbTnmoTpgqPmnaHvvIkgKi9cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlSW5mbygpOiBhbnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLm1vZHVsZXMgYXMgYW55W10pLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSB0aGlzLnNlbGVjdGVkTW9kdWxlKSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIOW9k+WJjeaooeWdl+eahOiEmuacrOaWh+S7tu+8jOS+m+mdouadv+S4gOmUruaJk+W8gOOAglxyXG4gICAgICAgICAgICAgICAgICog5LqL5Lu25aOw5piO5paH5Lu25Y+v6IO95LiN5a2Y5Zyo77yI5qih5Z2X5piv5pen54mI5omp5bGV5bu655qE77yJ77yM5omA5Lul5oyJ5a2Y5Zyo5oCn6L+H5ruk44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlRmlsZXMoKTogQXJyYXk8eyBuYW1lOiBzdHJpbmc7IGZpbGU6IHN0cmluZyB9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbzogYW55ID0gdGhpcy5zZWxlY3RlZE1vZHVsZUluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSByZXR1cm4gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtpbmZvLm1vZHVsZUZpbGUsIGluZm8ubW9kZWxGaWxlLCBpbmZvLmV2ZW50c0ZpbGVdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpbGU6IHVua25vd24pOiBmaWxlIGlzIHN0cmluZyA9PiB0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKGZpbGU6IHN0cmluZykgPT4gKHsgbmFtZTogZmlsZS5zcGxpdCgnLycpLnBvcCgpIHx8IGZpbGUsIGZpbGUgfSkpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5bey5a6J6KOFID0gcGFja2FnZS5qc29uIOmHjOWjsOaYjuS6hioq5LiUKiogbm9kZV9tb2R1bGVzIOmHjOWtmOWcqCAqL1xyXG4gICAgICAgICAgICAgICAgaW5zdGFsbGVkU2hhcmVkKCk6IGFueVtdIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmlsdGVyKChtOiBhbnkpID0+IG0uc3RhdGUgPT09ICdpbnN0YWxsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOacquWuieijhe+8iOWQq1wi5aOw5piO5LqG5L2GIG5vZGVfbW9kdWxlcyDph4zmsqHmnIlcIui/meS4gOaAge+8iSAqL1xyXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlU2hhcmVkKCk6IGFueVtdIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmlsdGVyKChtOiBhbnkpID0+IG0uc3RhdGUgIT09ICdpbnN0YWxsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRTaGFyZWRJbmZvKCk6IGFueSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkU2hhcmVkKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTaGFyZWQpIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog55WM6Z2i5LiK6KaB5bGV56S655qE6YKj5p2hIG5wbSDlkb3ku6Qg4oCU4oCUIOS4juaMiemSruWNs+WwhuaJp+ihjOeahOWKqOS9nOS4gOiHtFxyXG4gICAgICAgICAgICAgICAgICog77yI5pyq5a6J6KOF5pi+56S6IGluc3RhbGzvvIzlt7Llronoo4XmmL7npLogdW5pbnN0YWxs77yJ44CCXHJcbiAgICAgICAgICAgICAgICAgKiDlkb3ku6TnlLHkuLvov5vnqIvkuIvlj5HvvIzpnaLmnb/kuI3oh6rlt7Hmi7zlj4LmlbDjgIJcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgc2hhcmVkQWN0aW9uQ29tbWFuZCgpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm86IGFueSA9IHRoaXMuc2VsZWN0ZWRTaGFyZWRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLnN0YXRlID09PSAnaW5zdGFsbGVkJyA/IGluZm8udW5pbnN0YWxsQ29tbWFuZCA6IGluZm8uaW5zdGFsbENvbW1hbmQ7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog5a6J6KOF5oyJ6ZKu55qE5paH5a2X44CCXHJcbiAgICAgICAgICAgICAgICAgKlxyXG4gICAgICAgICAgICAgICAgICog5bey5pyJ5paw54mI5pys5pe255u05o6l5YaZ5oiQXCLmm7TmlrDliLAgeC55LnpcIiDigJTigJQg55So5oi35LiN6ZyA6KaB6Ieq5bex5Y675q+U5a+554mI5pys5Y+344CCXHJcbiAgICAgICAgICAgICAgICAgKiDms6jmhI/lj6rlnKggYHVwZGF0ZS1hdmFpbGFibGVgIOaXtui/meS5iOWGme+8mueci+S4jeWIsOi/nOeoi+eJiOacrO+8iHVua25vd27vvInml7ZcclxuICAgICAgICAgICAgICAgICAqIOS4jeiDveaal+ekulwi6L+Z5bCx5piv5pyA5pawXCLvvIzpgqPkuKrnirbmgIHlnKjor6bmg4Xph4zlj6bmnInor7TmmI7jgIJcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgc2hhcmVkQWN0aW9uTGFiZWwoKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvOiBhbnkgPSB0aGlzLnNlbGVjdGVkU2hhcmVkSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudCgndWlfc2hhcmVkX2luc3RhbGwnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8udXBkYXRlU3RhdGUgPT09ICd1cGRhdGUtYXZhaWxhYmxlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50KCd1aV9zaGFyZWRfdXBkYXRlX3RvJywgeyB2ZXJzaW9uOiBpbmZvLmxhdGVzdFZlcnNpb24gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmZvLnN0YXRlID09PSAnaW5zdGFsbGVkJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMudCgndWlfc2hhcmVkX3JlaW5zdGFsbCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy50KCd1aV9zaGFyZWRfaW5zdGFsbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGkxOG4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiDlj5bmlofmoYjjgIJge25hbWV9YCDlvaLlvI/nmoTljaDkvY3nrKbnlKggcGFyYW1zIOabv+aNouOAglxyXG4gICAgICAgICAgICAgICAgICog5paH5qGI6KGo55Sx5Li76L+b56iL5oyJ5b2T5YmN57yW6L6R5Zmo6K+t6KiA6Kej5p6Q5ZCO5LiL5Y+R77yM6L+Z6YeM5LiN5YGa6K+t6KiA5Yik5pat44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHQoa2V5OiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dDogc3RyaW5nID0gdGhpcy5zdHJpbmdzW2tleV0gPz8ga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHBhcmFtcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnNwbGl0KGB7JHtrfX1gKS5qb2luKFN0cmluZyhwYXJhbXNba10pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dDtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDliJ3lp4vljJYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRDb25maWcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllcnMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1sYXllcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS10ZW1wbGF0ZXMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGF5ZXJzLmxlbmd0aCAmJiAhdGhpcy5sYXllcnMuaW5jbHVkZXModGhpcy5sYXllcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXIgPSB0aGlzLmxheWVyc1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZE92ZXJ2aWV3KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnZpZXcgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1vdmVydmlldycpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOeJiOacrOS/oeaBrzrmoYbmnrbor7vlt6XnqIsgbm9kZV9tb2R1bGVzIOmHjOmCo+S7vSzmianlsZXor7voh6rlt7Eg4oCU4oCUIOmDveaYr1wi5a6e6ZmF6KOF5LqG5LuA5LmIXCIgKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRWZXJzaW9ucygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnNpb25zID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktdmVyc2lvbnMnKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkuKTovrnniYjmnKzkuI3kuIDmoLflsLHnrpfmnInmlrDniYgo5q+U6L6D6YC76L6R5Y+q5q2k5LiA5aSELOS4u+i/m+eoi+S4jemHjeWkjeWIpOaWrSkgKi9cclxuICAgICAgICAgICAgICAgIHVwZGF0ZU9mKGluZm86IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhIShpbmZvICYmIGluZm8ubGF0ZXN0ICYmIGluZm8udmVyc2lvbiAmJiBpbmZvLmxhdGVzdCAhPT0gaW5mby52ZXJzaW9uKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgdXBkYXRlRnJhbWV3b3JrKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS4iuS4gOeJiOi/memHjOebtOaOpeeUqOS6hiBuYW1lLOiAjCBuYW1lIOWPquWumuS5ieWcqCB1cGRhdGVFeHRlbnNpb24g6YeMIOKAlOKAlFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOmCo+S4quagh+ivhuespuS8muiQveWIsOWFqOWxgCh3aW5kb3cubmFtZSzpgJrluLjmmK/nqbrkuLIpLOS6juaYr+WPmOaIkCBcIkBsYXRlc3RcIixcclxuICAgICAgICAgICAgICAgICAgICAvLyDkuLvov5vnqIvmlLbliLDnmoTlsLHmmK9cIue8uuWwkeWMheWQjVwi44CC6Ieq5bex5a6a5LmJ6Ieq5bex55qELOWIq+i5reWIq+S6uueahOWPmOmHj+OAglxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnZlcnNpb25zPy5mcmFtZXdvcms/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZU9mKHRoaXMudmVyc2lvbnM/LmZyYW1ld29yaykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV92ZXJzaW9uc19hbHJlYWR5X2xhdGVzdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuVXBkYXRlKCdpbnN0YWxsLXNoYXJlZC1tb2R1bGUnLCBuYW1lICsgJ0BsYXRlc3QnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgdXBkYXRlRXh0ZW5zaW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnZlcnNpb25zPy5leHRlbnNpb24/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5bey5piv5pyA5paw5bCx5Yir55yf5Y676KOF5LiA6YGNLOabtOWIq+aKpVwi5bey5pu05pawXCIg4oCU4oCUIOmCo+aYr+WcqOmql+eUqOaIt1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGRhdGVPZih0aGlzLnZlcnNpb25zPy5leHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHRoaXMudCgndWlfdmVyc2lvbnNfYWxyZWFkeV9sYXRlc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyDkuo7mmK8gc3luYy1leHRlbnNpb24g5ou35Zue5p2l55qE6L+Y5piv5pen54mI5pysIOKAlOKAlCDooajnjrDlsLHmmK8n54K55LqG5rKh55SoJ+OAglxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuVXBkYXRlKCdpbnN0YWxsLXNoYXJlZC1tb2R1bGUnLCBuYW1lICsgJ0BsYXRlc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDoo4Xov5sgbm9kZV9tb2R1bGVzIOi/mOS4jeWknzrnvJbovpHlmajlj6rorqQgZXh0ZW5zaW9ucy8g5LiL6YKj5Lu9LOW/hemhu+iQveebmFxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3N5bmMtZXh0ZW5zaW9uJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHRoaXMudCgndWlfbXNnX2V4dGVuc2lvbl91cGRhdGVkJywgeyB2ZXJzaW9uOiB0aGlzLnZlcnNpb25zPy5leHRlbnNpb24/LmxhdGVzdCB8fCAnJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkuI7lhazlhbHmqKHlnZflronoo4XotbDlkIzkuIDmnaHot6865aSN55So546w5oiQ55qEIG5wbSDmiafooYzkuI7lpLHotKXlsZXnpLogKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIHJ1blVwZGF0ZShtZXNzYWdlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCBtZXNzYWdlLCBbbmFtZV0sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSByZXMgJiYgcmVzLm9rID09PSBmYWxzZSA/ICcnIDogbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMub2sgPT09IGZhbHNlKSB0aGlzLnNob3dFcnJvcihyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFZlcnNpb25zKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZE1vZHVsZXMoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbW9kdWxlcycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU9yZGVyID0gdGhpcy5uZXh0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNb2R1bGUgJiYgIXRoaXMubW9kdWxlcy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZHVsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY0VkaXRPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgbmV4dE9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tb2R1bGVzLmxlbmd0aCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLnRoaXMubW9kdWxlcy5tYXAoKG06IGFueSkgPT4gbS5vcmRlcikpICsgMTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDmqKHlnZfmk43kvZwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdE1vZHVsZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFZGl0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRWaWV3cygpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzeW5jRWRpdE9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZCA9IHRoaXMubW9kdWxlcy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHRoaXMuZWRpdE9yZGVyID0gbW9kLm9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZFZpZXdzKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LXZpZXdzJywgdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZU1vZHVsZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uZXdNb2R1bGVOYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodGhpcy50KCd1aV9uZWVkX21vZHVsZV9uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2NyZWF0ZS1tb2R1bGUnLCBuYW1lLCB0aGlzLm5ld01vZHVsZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ19tb2R1bGVfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmRpck5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlTW9kdWxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZHVsZSA9IHJlcy5kaXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFZGl0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uVXBkYXRlT3JkZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHRoaXMudCgndWlfbmVlZF9zZWxlY3RfbW9kdWxlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3VwZGF0ZS1tb2R1bGUtb3JkZXInLCB0aGlzLnNlbGVjdGVkTW9kdWxlLCB0aGlzLmVkaXRPcmRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfb3JkZXJfdXBkYXRlZCcsIHsgbmFtZTogcmVzLm1vZHVsZU5hbWUsIG9yZGVyOiByZXMub3JkZXIgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkRlbGV0ZU1vZHVsZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3Q291bnQgPSB0aGlzLnZpZXdzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yig6Zmk5YmN5YWI6Zeu5Li76L+b56iL77ya5pyJ5rKh5pyJ6LWE5rqQ5byV55So5LqG6K+l5qih5Z2X55qE6ISa5pysXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlZnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbW9kdWxlLXJlZnMnLCB0aGlzLnNlbGVjdGVkTW9kdWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcyA9IHJlcz8ucmVmZXJlbmNlZEJ5ID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyog5p+l5LiN5Yiw5bCx5LiN6Zi75pat5Yig6Zmk77yM5Y+q5piv5bCR5LiA5bGC5o+Q6YaSICovXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhcm5SZWZzID0gcmVmcy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnXFxuXFxu4pqgICcgKyB0aGlzLnQoJ3VpX2NvbmZpcm1fcmVmcycsIHsgY291bnQ6IHJlZnMubGVuZ3RoIH0pICsgJ1xcbsK3ICcgKyByZWZzLmpvaW4oJ1xcbsK3ICcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJyc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVkaXRvci5EaWFsb2cud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50KCd1aV9jb25maXJtX2RlbGV0ZV9tb2R1bGUnLCB7IG5hbWU6IHRoaXMuc2VsZWN0ZWRNb2R1bGUsIGNvdW50OiB2aWV3Q291bnQgfSkgKyB3YXJuUmVmcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBidXR0b25zOiBbdGhpcy50KCd1aV9kZWxldGUnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sIGRlZmF1bHQ6IDEsIGNhbmNlbDogMSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2RlbGV0ZS1tb2R1bGUnLCB0aGlzLnNlbGVjdGVkTW9kdWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ19tb2R1bGVfZGVsZXRlZCcsIHsgbmFtZTogdGhpcy5zZWxlY3RlZE1vZHVsZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFuYWdlciDmk43kvZwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaFRhYihuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYiA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICd2ZXJzaW9ucycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVmVyc2lvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdtYW5hZ2VyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3NoYXJlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2hhcmVkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRNYW5hZ2VycygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hbmFnZXJzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbWFuYWdlcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX6KGo6YeN5bu65ZCO5oqK6YCJ5Lit6aG56YeN5paw57uR5a6a5Yiw5paw5a+56LGh5LiK77yM6YG/5YWN5pi+56S66L+H5pyf5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlbGVjdGVkTWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hbmFnZXIgPSBjdXJyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMubWFuYWdlcnMuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IGN1cnJlbnQubmFtZSkgPz8gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZWN0TWFuYWdlcihtYW5hZ2VyOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFuYWdlciA9IG1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uQ3JlYXRlTWFuYWdlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uZXdNYW5hZ2VyTmFtZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHRoaXMudCgndWlfbmVlZF9tYW5hZ2VyX25hbWUnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAnY3JlYXRlLW1hbmFnZXInLCBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ19tYW5hZ2VyX2NyZWF0ZWQnLCB7IG5hbWU6IHJlcy5jbGFzc05hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01hbmFnZXJOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZU1hbmFnZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFuYWdlcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3JlYXRlZCA9IHRoaXMubWFuYWdlcnMuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHJlcy5jbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3JlYXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RNYW5hZ2VyKGNyZWF0ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE92ZXJ2aWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkRlbGV0ZU1hbmFnZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTWFuYWdlcikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnNlbGVjdGVkTWFuYWdlci5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVkaXRvci5EaWFsb2cud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50KCd1aV9jb25maXJtX2RlbGV0ZV9tYW5hZ2VyJywgeyBuYW1lIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGJ1dHRvbnM6IFt0aGlzLnQoJ3VpX2RlbGV0ZScpLCB0aGlzLnQoJ3VpX2NhbmNlbCcpXSwgZGVmYXVsdDogMSwgY2FuY2VsOiAxIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3BvbnNlICE9PSAwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAnZGVsZXRlLW1hbmFnZXInLCBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ19tYW5hZ2VyX2RlbGV0ZWQnLCB7IG5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFuYWdlciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1hbmFnZXJzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE92ZXJ2aWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBvbk5ld01hbmFnZXJOYW1lKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TWFuYWdlck5hbWUgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVmlldyDmk43kvZwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkRlbGV0ZVZpZXcobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWRpdG9yLkRpYWxvZy53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnQoJ3VpX2NvbmZpcm1fZGVsZXRlX3ZpZXcnLCB7IG5hbWUgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYnV0dG9uczogW3RoaXMudCgndWlfZGVsZXRlJyksIHRoaXMudCgndWlfY2FuY2VsJyldLCBkZWZhdWx0OiAxLCBjYW5jZWw6IDEgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzcG9uc2UgIT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdkZWxldGUtdmlldycsIHRoaXMuc2VsZWN0ZWRNb2R1bGUsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX3ZpZXdfZGVsZXRlZCcsIHsgbmFtZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFZpZXdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE92ZXJ2aWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBvcGVuQ3JlYXRlVmlld01vZGFsKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld05hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVWaWV3TW9kYWwgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBjbG9zZUNyZWF0ZVZpZXdNb2RhbCgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVWaWV3TW9kYWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25DcmVhdGVWaWV3KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnZpZXdOYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodGhpcy50KCd1aV9uZWVkX3ZpZXdfbmFtZScpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NjZ2YtZ2FtZS10b29sJywgJ2NyZWF0ZS12aWV3JywgdGhpcy5zZWxlY3RlZE1vZHVsZSwgbmFtZSwgdGhpcy5sYXllciwgdGhpcy50ZW1wbGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ192aWV3X2NyZWF0ZWQnLCB7IG5hbWU6IHJlcy5jbGFzc05hbWUsIHRlbXBsYXRlOiByZXMudGVtcGxhdGUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVWaWV3TW9kYWwgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRWaWV3cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOS9k+ajgOe7k+aenOmHjOeahOaWh+S7tui3r+W+hCAtPiDlnKjnvJbovpHlmajph4zmiZPlvIAgKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9wZW5Tb3VyY2UoZmlsZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWxlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAnb3Blbi1zb3VyY2UnLCBmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDkvZPmo4AgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgcnVuRG9jdG9yKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdG9yUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncnVuLWRvY3RvcicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRpbmdzID0gcmVzLmZpbmRpbmdzID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3RvclN1bW1hcnkgPSByZXMuc3VtbWFyeSA/PyB7IGVycm9yOiAwLCB3YXJuOiAwLCBpbmZvOiAwIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOaMiSBlcnJvciDihpIgd2FybiDihpIgaW5mbyDliIbnu4TvvIznqbrnu4TkuI3mmL7npLpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N0b3JHcm91cHMgPSBTRVZFUklUSUVTXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChzZXZlcml0eSkgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXZlcml0eSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy50KFNFVkVSSVRZX0tFWVNbc2V2ZXJpdHldKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogdGhpcy5maW5kaW5ncy5maWx0ZXIoKGY6IGFueSkgPT4gZi5zZXZlcml0eSA9PT0gc2V2ZXJpdHkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChnOiBhbnkpID0+IGcuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RG9jdG9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3RvclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDmpoLop4ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb3Blbk92ZXJ2aWV3KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnZpZXdMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dPdmVydmlldyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVydmlld0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGNsb3NlT3ZlcnZpZXcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93T3ZlcnZpZXcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDooajljZXkuovku7YgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIG9uTmV3TW9kdWxlTmFtZShlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU5hbWUgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvbk5ld01vZHVsZU9yZGVyKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TW9kdWxlT3JkZXIgPSBOdW1iZXIoZS50YXJnZXQudmFsdWUpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25FZGl0T3JkZXIoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0T3JkZXIgPSBOdW1iZXIoZS50YXJnZXQudmFsdWUpIHx8IDA7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25WaWV3TmFtZShlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25MYXllcih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllciA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uVGVtcGxhdGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc2hvd1N1Y2Nlc3MobXNnOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2hvd0Vycm9yKG1zZzogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5YWs5YWx5qih5Z2XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICAvKiogQHBhcmFtIGZvcmNlIOW8uuWItumHjeaWsOaLieWPlui/nOeoi+WIl+ihqO+8iOOAjOWIt+aWsOOAjeaMiemSrueUqO+8m+WQpuWImeeUqOS4u+i/m+eoi+mHjOeahOe8k+WtmO+8iSAqL1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZFNoYXJlZE1vZHVsZXMoZm9yY2U6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVnaXN0cnlMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5U2hhcmVkU3RhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1zaGFyZWQtbW9kdWxlcycsIGZvcmNlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFJlZ2lzdHJ5TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOS4u+i/m+eoi+WbnuadpeeahOeKtuaAgee7n+S4gOWcqOi/memHjOiQveWIsCBkYXRhIOS4iu+8iOafpeivouS4juijhS/ljbjlhbHnlKjlkIzkuIDku73nu5PmnoTvvIkgKi9cclxuICAgICAgICAgICAgICAgIGFwcGx5U2hhcmVkU3RhdGUocmVzOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZE1vZHVsZXMgPSByZXM/Lm1vZHVsZXMgPz8gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NhbFNvdXJjZSA9IHJlcz8ubG9jYWxTb3VyY2UgPz8gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAvLyDkuLvov5vnqIvlnKhcIuWQjuWPsOWIt+aWsOS4rVwi5pe25Lya5bim5Zue5LiA5Liq6L+b6KGM5Lit55qE6K+05piOIOKAlOKAlCDpgqPkuI3mmK/lpLHotKUs5LiN6K+l5oyJ5aSx6LSl5pi+56S644CCXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGVuZGluZyA9IHR5cGVvZiByZXM/LnJlZ2lzdHJ5RXJyb3IgPT09ICdzdHJpbmcnICYmIHJlcy5yZWdpc3RyeUVycm9yLmluZGV4T2YoJ+ato+WcqOiOt+WPlicpID49IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZWdpc3RyeVBlbmRpbmcgPSBwZW5kaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS4gOasoeaAp+eahOiHquWKqOmHjeivlTrlh6Dnp5LlkI7lkI7lj7Dlt7Lnu4/liLflpb3kuoYs6L+Z5LiA6aG16Ieq5bex5pu05pawLOS4jeeUqOeUqOaIt+WOu+eCueWIt+aWsFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcmVkUmV0cnlUaW1lciA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmV0cnlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJldHJ5VGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFNoYXJlZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFJlZ2lzdHJ5RXJyb3IgPSByZXM/LnJlZ2lzdHJ5RXJyb3IgPz8gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAvLyDpgInkuK3pobnlj6/og73lt7Lnu4/kuI3lnKjliJfooajph4zkuobvvIjmr5TlpoLliJrooqvljbjovb3vvIlcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNoYXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAhKHRoaXMuc2hhcmVkTW9kdWxlcyBhcyBhbnlbXSkuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRTaGFyZWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTaGFyZWQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZWN0U2hhcmVkKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTaGFyZWQgPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkluc3RhbGxTaGFyZWQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5TaGFyZWQoJ2luc3RhbGwnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25Vbmluc3RhbGxTaGFyZWQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuc2VsZWN0ZWRTaGFyZWRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDljbjovb3liY3mj5DphpLkuKTnsbvkvJrooqvmiZPmlq3nmoTkuJzopb/vvJrov5jlnKggaW1wb3J0IOWug+eahOiEmuacrOOAgeS7peWPiuS+nei1luWug+eahOWFrOWFseaooeWdl+OAglxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWPquajgOafpeWJjeiAheeahOivne+8jFwi5Y+m5LiA5Liq5YWs5YWx5qih5Z2X5L6d6LWW5a6DXCLkvJrlrozlhajmvI/mjonjgIJcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5yZWZlcmVuY2VkQnkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAn4pqgICcgKyB0aGlzLnQoJ3VpX3NoYXJlZF9yZWZzX3dhcm4nKSArICdcXG7CtyAnICsgaW5mby5yZWZlcmVuY2VkQnkuam9pbignXFxuwrcgJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmRlcGVuZGVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAn4pqgICcgKyB0aGlzLnQoJ3VpX3NoYXJlZF9kZXBzX3dhcm4nKSArICdcXG7CtyAnICsgaW5mby5kZXBlbmRlbnRzLmpvaW4oJ1xcbsK3ICcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgRWRpdG9yLkRpYWxvZy53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnQoJ3VpX2NvbmZpcm1fdW5pbnN0YWxsX3NoYXJlZCcsIHsgbmFtZTogaW5mby5uYW1lIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICsgKHdhcm5pbmdzLmxlbmd0aCA/ICdcXG5cXG4nICsgd2FybmluZ3Muam9pbignXFxuXFxuJykgOiAnJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFt0aGlzLnQoJ3VpX3NoYXJlZF91bmluc3RhbGwnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJ1blNoYXJlZCgndW5pbnN0YWxsJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkvp3otZbpobnmnKzouqvkuZ/mmK/lhazlhbHmqKHlnZfml7bvvIzngrnkuIDkuIvot7Pov4fljrvnnIvlroPnmoTnirbmgIEgKi9cclxuICAgICAgICAgICAgICAgIG9uQ2xpY2tEZXBlbmRlbmN5KGRlcGVuZGVuY3k6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5Py5pc1NoYXJlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNoYXJlZChkZXBlbmRlbmN5Lm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiDku6Pot5EgbnBtIOWuieijhSAvIOWNuOi9veOAglxyXG4gICAgICAgICAgICAgICAgICog5aSx6LSl5pe2KirkuI3lvLnkuIDmnaHovazov7DnmoRcIuWuieijheWksei0pVwiKirvvIzogIzmmK/mioogbnBtIOeahOWOn+Wni+i+k+WHuuaVtOS4quaUvui/m+W8ueeqlyDigJTigJRcclxuICAgICAgICAgICAgICAgICAqIOeUqOaIt+imgeiviuaWreeahOWwseaYr+mCo+autei+k+WHuuOAglxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBydW5TaGFyZWQoYWN0aW9uOiAnaW5zdGFsbCcgfCAndW5pbnN0YWxsJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLnNlbGVjdGVkU2hhcmVkSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRCdXN5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NjZ2YtZ2FtZS10b29sJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9PT0gJ2luc3RhbGwnID8gJ2luc3RhbGwtc2hhcmVkLW1vZHVsZScgOiAndW5pbnN0YWxsLXNoYXJlZC1tb2R1bGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5U2hhcmVkU3RhdGUocmVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXM/Lm9rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPT09ICdpbnN0YWxsJyA/ICd1aV9tc2dfc2hhcmVkX2luc3RhbGxlZCcgOiAndWlfbXNnX3NoYXJlZF91bmluc3RhbGxlZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiBpbmZvLm5hbWUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5aSx6LSl77ya5pWw5o2u55WZ552A5L6b5by556qX5bGV56S677yM5bm256uL5Yi75omT5byA5a6DXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFJlc3VsdCA9IHJlcz8ucmVzdWx0ID8/IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTaGFyZWRSZXN1bHQgPSB0aGlzLnNoYXJlZFJlc3VsdCAhPT0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHJlcz8ubWVzc2FnZSB8fCBgbnBtICR7YWN0aW9ufSBmYWlsZWRgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkQnVzeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOS7jua2iOaBr+ihjOWGjeeCueW8gOS4iuS4gOasoeeahCBucG0g6L6T5Ye6ICovXHJcbiAgICAgICAgICAgICAgICBvcGVuU2hhcmVkUmVzdWx0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNoYXJlZFJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTaGFyZWRSZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOWPquWFs+W8ueeql++8jCoq5L+d55WZ5pWw5o2uKiog4oCU4oCUIOWQpuWImeWFs+aOieS5i+WQjuWwseWGjeS5n+eci+S4jeWIsOmCo+autei+k+WHuuS6hiAqL1xyXG4gICAgICAgICAgICAgICAgY2xvc2VTaGFyZWRSZXN1bHQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U2hhcmVkUmVzdWx0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBtb3VudGVkKCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkQ29uZmlnKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZTogcmVhZEZpbGVTeW5jKGpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vc3RhdGljL3RlbXBsYXRlL3dvcmtiZW5jaC9wYW5lbC5odG1sJyksICd1dGYtOCcpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFwcC5jb25maWcuY29tcGlsZXJPcHRpb25zLmlzQ3VzdG9tRWxlbWVudCA9ICh0YWc6IHN0cmluZykgPT4gdGFnLnN0YXJ0c1dpdGgoJ3VpLScpO1xyXG4gICAgICAgIGFwcC5tb3VudCgkYXBwKTtcclxuICAgICAgICBwYW5lbERhdGFNYXAuc2V0KHRoaXMsIGFwcCk7XHJcbiAgICB9LFxyXG4gICAgYmVmb3JlQ2xvc2UoKSB7IH0sXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICBjb25zdCBhcHAgPSBwYW5lbERhdGFNYXAuZ2V0KHRoaXMpO1xyXG4gICAgICAgIGlmIChhcHApIHtcclxuICAgICAgICAgICAgYXBwLnVubW91bnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG59KTtcclxuIl19
|
|
726
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvcGFuZWxzL3dvcmtiZW5jaC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDOztBQUUvQyx1Q0FBd0M7QUFDeEMsK0JBQTRCO0FBQzVCLDZCQUFxQztBQUVyQyw2QkFBNkI7QUFDN0IsSUFBSSxnQkFBZ0IsR0FBUSxJQUFJLENBQUM7QUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztBQUU3QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFVLENBQUM7QUFDdEQseUJBQXlCO0FBQ3pCLE1BQU0sYUFBYSxHQUEyQjtJQUMxQyxLQUFLLEVBQUUsbUJBQW1CO0lBQzFCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsSUFBSSxFQUFFLGtCQUFrQjtDQUMzQixDQUFDO0FBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxTQUFTLEVBQUU7UUFDUCxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksS0FBSyxDQUFDO0tBQ2I7SUFDRCxRQUFRLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNqRyxLQUFLLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwyQ0FBMkMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUMxRixDQUFDLEVBQUU7UUFDQyxHQUFHLEVBQUUsTUFBTTtLQUNkO0lBQ0QsS0FBSyxDQUFDLEtBQUs7UUFDUCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixPQUFPO1FBQ1gsQ0FBQztRQUVELCtCQUErQjtR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Q0FBQztRQUNwRixHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxXQUFXLEtBQUssQ0FBQztJQUNqQixLQUFLO1FBQ0QsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0NBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgdnVlL29uZS1jb21wb25lbnQtcGVyLWZpbGUgKi9cclxuXHJcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJztcclxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQgeyBjcmVhdGVBcHAsIEFwcCB9IGZyb20gJ3Z1ZSc7XHJcblxyXG4vKiog6Ieq5Yqo6YeN6K+V55qE5a6a5pe25ZmoKOaooeWdl+e6pzrlkIzkuIDml7bliLvlj6rnlZnkuIDkuKopICovXHJcbmxldCBzaGFyZWRSZXRyeVRpbWVyOiBhbnkgPSBudWxsO1xyXG5cclxuY29uc3QgcGFuZWxEYXRhTWFwID0gbmV3IFdlYWtNYXA8YW55LCBBcHA+KCk7XHJcblxyXG5jb25zdCBTRVZFUklUSUVTID0gWydlcnJvcicsICd3YXJuJywgJ2luZm8nXSBhcyBjb25zdDtcclxuLyoqIOS9k+ajgOS4pemHjee6p+WIqyAtPiBpMThuIGtleSAqL1xyXG5jb25zdCBTRVZFUklUWV9LRVlTOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgZXJyb3I6ICd1aV9zZXZlcml0eV9lcnJvcicsXHJcbiAgICB3YXJuOiAndWlfc2V2ZXJpdHlfd2FybicsXHJcbiAgICBpbmZvOiAndWlfc2V2ZXJpdHlfaW5mbycsXHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IEVkaXRvci5QYW5lbC5kZWZpbmUoe1xyXG4gICAgbGlzdGVuZXJzOiB7XHJcbiAgICAgICAgc2hvdygpIHsgfSxcclxuICAgICAgICBoaWRlKCkgeyB9LFxyXG4gICAgfSxcclxuICAgIHRlbXBsYXRlOiByZWFkRmlsZVN5bmMoam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9zdGF0aWMvdGVtcGxhdGUvd29ya2JlbmNoL2luZGV4Lmh0bWwnKSwgJ3V0Zi04JyksXHJcbiAgICBzdHlsZTogcmVhZEZpbGVTeW5jKGpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vc3RhdGljL3N0eWxlL3dvcmtiZW5jaC9pbmRleC5jc3MnKSwgJ3V0Zi04JyksXHJcbiAgICAkOiB7XHJcbiAgICAgICAgYXBwOiAnI2FwcCcsXHJcbiAgICB9LFxyXG4gICAgYXN5bmMgcmVhZHkoKSB7XHJcbiAgICAgICAgY29uc3QgJGFwcCA9IHRoaXMuJC5hcHA7XHJcbiAgICAgICAgaWYgKCEkYXBwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOaWh+ahiOWFiOWPluWbnuadpeWGjeaMgui9ve+8muWQpuWImemmluW4p+S8muaKiuWOn+WniyBrZXkg5pi+56S657uZ55So5oi3XHJcbiAgICAgICAgbGV0IHN0cmluZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzdHJpbmdzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktaTE4bicpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLyog5Y+W5LiN5Yiw5bCx6YCA5YyW5Li6IGtlee+8jOS9huS4jeW9seWTjemdouadv+WKn+iDvSAqL1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXBwID0gY3JlYXRlQXBwKHtcclxuICAgICAgICAgICAgZGF0YSgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOS4u+i/m+eoi+aMieW9k+WJjee8lui+keWZqOivreiogOino+aekOWlveeahOaWh+ahiOihqCAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ3MsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDlvZPliY3liIfpobXvvJptb2R1bGUgfCBtYW5hZ2VyICovXHJcbiAgICAgICAgICAgICAgICAgICAgdGFiOiAnbW9kdWxlJyxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qih5Z2X5YiX6KGoXHJcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRNb2R1bGU6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NyZWF0ZU1vZHVsZTogZmFsc2UsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1hbmFnZXIg5YiX6KGo77yI5YWo5bGA5Y2V5L6L5pyN5Yqh77yJXHJcbiAgICAgICAgICAgICAgICAgICAgbWFuYWdlcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTWFuYWdlcjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBzaG93Q3JlYXRlTWFuYWdlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3TWFuYWdlck5hbWU6ICcnLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmlrDlu7rmqKHlnZfooajljZVcclxuICAgICAgICAgICAgICAgICAgICBuZXdNb2R1bGVOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBuZXdNb2R1bGVPcmRlcjogMSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qih5Z2XIG9yZGVyIOe8lui+kVxyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRPcmRlcjogMCxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5b2T5YmN5qih5Z2X55qEIHZpZXcg5YiX6KGoXHJcbiAgICAgICAgICAgICAgICAgICAgdmlld3M6IFtdLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDliJvlu7ogdmlldyDlvLnnqpdcclxuICAgICAgICAgICAgICAgICAgICBzaG93Q3JlYXRlVmlld01vZGFsOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB2aWV3TmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXI6ICdXaW5kb3cnLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiAnZW1wdHknLFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDlsYLnuqfkuI7mqKHmnb/pg73nlLHkuLvov5vnqIvkuIvlj5HvvIzmianlsZXph4zkuI3lho3lrZjnrKzkuozku70gKi9cclxuICAgICAgICAgICAgICAgICAgICBsYXllcnM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlczogW10sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOamguiniO+8iOWQr+WKqOmhuuW6jyArIOWxgue6p+WNoOeUqO+8iVxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dPdmVydmlldzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcnZpZXc6IG51bGwsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uczogbnVsbCBhcyBhbnksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgb3ZlcnZpZXdMb2FkaW5nOiBmYWxzZSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5L2T5qOAXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0RvY3RvcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdG9yUnVubmluZzogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZmluZGluZ3M6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3Rvckdyb3VwczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgZG9jdG9yU3VtbWFyeTogeyBlcnJvcjogMCwgd2FybjogMCwgaW5mbzogMCB9LFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmtojmga9cclxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBpc0Vycm9yOiBmYWxzZSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5YWs5YWx5qih5Z2XXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkTW9kdWxlczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTaGFyZWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOato+WcqOi3kSBucG3vvJrmnJ/pl7TnpoHnlKjlronoo4Uv5Y246L295oyJ6ZKuICovXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkQnVzeTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIG5wbSDnu5PmnpzlvLnnqpfnmoTmlbDmja7vvIjlpLHotKXml7blsZXnpLrljp/lp4vovpPlh7rvvIkgKi9cclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZXN1bHQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOW8ueeql+aYr+WQpuWPr+ingSDigJTigJQg5LiO5pWw5o2u5YiG5byA77yM6L+Z5qC35YWz5o6J5LmL5ZCO6L+Y6IO95LuO5raI5oGv6KGM5YaN54K55byAICovXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NoYXJlZFJlc3VsdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOacrOWcsOWuieijhea6kOebruW9le+8m+S4uiBudWxsIOivtOaYjui/meaYr+aZrumAmuW3peeoiyAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU291cmNlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDov5znqIvliJfooajmi4nlj5blpLHotKXnmoTljp/lm6DvvIjmnInlgLzml7bpnaLmnb/mmL7npLrmj5DnpLrvvIzkvYbkuI3lvbHlk43lhbblroPlip/og73vvIkgKi9cclxuICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZWdpc3RyeVBlbmRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlZFJlZ2lzdHJ5RXJyb3I6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqIOato+WcqOaLiei/nOeoi+WIl+ihqO+8iOS4gOasoeaQnOe0oiAxfjQg56eS77yM6KaB57uZ5Liq5Y+N6aaI77yJICovXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmVnaXN0cnlMb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgICAgICAvKiog5b2T5YmN6YCJ5Lit55qE5qih5Z2X5a+56LGh77yI5YiX6KGo6YeM5Y+q5a2Y5LqG57K+566A5L+h5oGv77yM6L+Z6YeM5Y+W5Zue5a6M5pW055qE6YKj5p2h77yJICovXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE1vZHVsZUluZm8oKTogYW55IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5tb2R1bGVzIGFzIGFueVtdKS5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZHVsZSkgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAgICAgKiDlvZPliY3mqKHlnZfnmoTohJrmnKzmlofku7bvvIzkvpvpnaLmnb/kuIDplK7miZPlvIDjgIJcclxuICAgICAgICAgICAgICAgICAqIOS6i+S7tuWjsOaYjuaWh+S7tuWPr+iDveS4jeWtmOWcqO+8iOaooeWdl+aYr+aXp+eJiOaJqeWxleW7uueahO+8ie+8jOaJgOS7peaMieWtmOWcqOaAp+i/h+a7pOOAglxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE1vZHVsZUZpbGVzKCk6IEFycmF5PHsgbmFtZTogc3RyaW5nOyBmaWxlOiBzdHJpbmcgfT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm86IGFueSA9IHRoaXMuc2VsZWN0ZWRNb2R1bGVJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbaW5mby5tb2R1bGVGaWxlLCBpbmZvLm1vZGVsRmlsZSwgaW5mby5ldmVudHNGaWxlXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChmaWxlOiB1bmtub3duKTogZmlsZSBpcyBzdHJpbmcgPT4gdHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChmaWxlOiBzdHJpbmcpID0+ICh7IG5hbWU6IGZpbGUuc3BsaXQoJy8nKS5wb3AoKSB8fCBmaWxlLCBmaWxlIH0pKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOW3suWuieijhSA9IHBhY2thZ2UuanNvbiDph4zlo7DmmI7kuoYqKuS4lCoqIG5vZGVfbW9kdWxlcyDph4zlrZjlnKggKi9cclxuICAgICAgICAgICAgICAgIGluc3RhbGxlZFNoYXJlZCgpOiBhbnlbXSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnNoYXJlZE1vZHVsZXMgYXMgYW55W10pLmZpbHRlcigobTogYW55KSA9PiBtLnN0YXRlID09PSAnaW5zdGFsbGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDmnKrlronoo4XvvIjlkKtcIuWjsOaYjuS6huS9hiBub2RlX21vZHVsZXMg6YeM5rKh5pyJXCLov5nkuIDmgIHvvIkgKi9cclxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZVNoYXJlZCgpOiBhbnlbXSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnNoYXJlZE1vZHVsZXMgYXMgYW55W10pLmZpbHRlcigobTogYW55KSA9PiBtLnN0YXRlICE9PSAnaW5zdGFsbGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkU2hhcmVkSW5mbygpOiBhbnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZFNoYXJlZCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLnNoYXJlZE1vZHVsZXMgYXMgYW55W10pLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSB0aGlzLnNlbGVjdGVkU2hhcmVkKSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIOeVjOmdouS4iuimgeWxleekuueahOmCo+adoSBucG0g5ZG95LukIOKAlOKAlCDkuI7mjInpkq7ljbPlsIbmiafooYznmoTliqjkvZzkuIDoh7RcclxuICAgICAgICAgICAgICAgICAqIO+8iOacquWuieijheaYvuekuiBpbnN0YWxs77yM5bey5a6J6KOF5pi+56S6IHVuaW5zdGFsbO+8ieOAglxyXG4gICAgICAgICAgICAgICAgICog5ZG95Luk55Sx5Li76L+b56iL5LiL5Y+R77yM6Z2i5p2/5LiN6Ieq5bex5ou85Y+C5pWw44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHNoYXJlZEFjdGlvbkNvbW1hbmQoKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvOiBhbnkgPSB0aGlzLnNlbGVjdGVkU2hhcmVkSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHJldHVybiAnJztcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mby5zdGF0ZSA9PT0gJ2luc3RhbGxlZCcgPyBpbmZvLnVuaW5zdGFsbENvbW1hbmQgOiBpbmZvLmluc3RhbGxDb21tYW5kO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIOWuieijheaMiemSrueahOaWh+Wtl+OAglxyXG4gICAgICAgICAgICAgICAgICpcclxuICAgICAgICAgICAgICAgICAqIOW3suacieaWsOeJiOacrOaXtuebtOaOpeWGmeaIkFwi5pu05paw5YiwIHgueS56XCIg4oCU4oCUIOeUqOaIt+S4jemcgOimgeiHquW3seWOu+avlOWvueeJiOacrOWPt+OAglxyXG4gICAgICAgICAgICAgICAgICog5rOo5oSP5Y+q5ZyoIGB1cGRhdGUtYXZhaWxhYmxlYCDml7bov5nkuYjlhpnvvJrnnIvkuI3liLDov5znqIvniYjmnKzvvIh1bmtub3du77yJ5pe2XHJcbiAgICAgICAgICAgICAgICAgKiDkuI3og73mmpfnpLpcIui/meWwseaYr+acgOaWsFwi77yM6YKj5Liq54q25oCB5Zyo6K+m5oOF6YeM5Y+m5pyJ6K+05piO44CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHNoYXJlZEFjdGlvbkxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbzogYW55ID0gdGhpcy5zZWxlY3RlZFNoYXJlZEluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnQoJ3VpX3NoYXJlZF9pbnN0YWxsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLnVwZGF0ZVN0YXRlID09PSAndXBkYXRlLWF2YWlsYWJsZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudCgndWlfc2hhcmVkX3VwZGF0ZV90bycsIHsgdmVyc2lvbjogaW5mby5sYXRlc3RWZXJzaW9uIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mby5zdGF0ZSA9PT0gJ2luc3RhbGxlZCdcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnQoJ3VpX3NoYXJlZF9yZWluc3RhbGwnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMudCgndWlfc2hhcmVkX2luc3RhbGwnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1ldGhvZHM6IHtcclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBpMThuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog5Y+W5paH5qGI44CCYHtuYW1lfWAg5b2i5byP55qE5Y2g5L2N56ym55SoIHBhcmFtcyDmm7/mjaLjgIJcclxuICAgICAgICAgICAgICAgICAqIOaWh+ahiOihqOeUseS4u+i/m+eoi+aMieW9k+WJjee8lui+keWZqOivreiogOino+aekOWQjuS4i+WPke+8jOi/memHjOS4jeWBmuivreiogOWIpOaWreOAglxyXG4gICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB0KGtleTogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQ6IHN0cmluZyA9IHRoaXMuc3RyaW5nc1trZXldID8/IGtleTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5zcGxpdChgeyR7a319YCkuam9pbihTdHJpbmcocGFyYW1zW2tdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5Yid5aeL5YyWIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkQ29uZmlnKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXJzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbGF5ZXJzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktdGVtcGxhdGVzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmxheWVycy5sZW5ndGggJiYgIXRoaXMubGF5ZXJzLmluY2x1ZGVzKHRoaXMubGF5ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVyID0gdGhpcy5sYXllcnNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRPdmVydmlldygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJ2aWV3ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktb3ZlcnZpZXcnKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDniYjmnKzkv6Hmga865qGG5p626K+75bel56iLIG5vZGVfbW9kdWxlcyDph4zpgqPku70s5omp5bGV6K+76Ieq5bexIOKAlOKAlCDpg73mmK9cIuWunumZheijheS6huS7gOS5iFwiICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkVmVyc2lvbnMoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52ZXJzaW9ucyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LXZlcnNpb25zJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5Lik6L6554mI5pys5LiN5LiA5qC35bCx566X5pyJ5paw54mIKOavlOi+g+mAu+i+keWPquatpOS4gOWkhCzkuLvov5vnqIvkuI3ph43lpI3liKTmlq0pICovXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVPZihpbmZvOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gISEoaW5mbyAmJiBpbmZvLmxhdGVzdCAmJiBpbmZvLnZlcnNpb24gJiYgaW5mby5sYXRlc3QgIT09IGluZm8udmVyc2lvbik7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIHVwZGF0ZUZyYW1ld29yaygpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyDkuIrkuIDniYjov5nph4znm7TmjqXnlKjkuoYgbmFtZSzogIwgbmFtZSDlj6rlrprkuYnlnKggdXBkYXRlRXh0ZW5zaW9uIOmHjCDigJTigJRcclxuICAgICAgICAgICAgICAgICAgICAvLyDpgqPkuKrmoIfor4bnrKbkvJrokL3liLDlhajlsYAod2luZG93Lm5hbWUs6YCa5bi45piv56m65LiyKSzkuo7mmK/lj5jmiJAgXCJAbGF0ZXN0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Li76L+b56iL5pS25Yiw55qE5bCx5pivXCLnvLrlsJHljIXlkI1cIuOAguiHquW3seWumuS5ieiHquW3seeahCzliKvoua3liKvkurrnmoTlj5jph4/jgIJcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy52ZXJzaW9ucz8uZnJhbWV3b3JrPy5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGRhdGVPZih0aGlzLnZlcnNpb25zPy5mcmFtZXdvcmspKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHRoaXMudCgndWlfdmVyc2lvbnNfYWxyZWFkeV9sYXRlc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhd2FpdCB0aGlzLnJ1blVwZGF0ZSgnaW5zdGFsbC1zaGFyZWQtbW9kdWxlJywgbmFtZSkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV9tc2dfZnJhbWV3b3JrX3VwZGF0ZWQnLCB7IHZlcnNpb246IHRoaXMudmVyc2lvbnM/LmZyYW1ld29yaz8ubGF0ZXN0IHx8ICcnIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyB1cGRhdGVFeHRlbnNpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudmVyc2lvbnM/LmV4dGVuc2lvbj8ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDlt7LmmK/mnIDmlrDlsLHliKvnnJ/ljrvoo4XkuIDpgY0s5pu05Yir5oqlXCLlt7Lmm7TmlrBcIiDigJTigJQg6YKj5piv5Zyo6aqX55So5oi3XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZU9mKHRoaXMudmVyc2lvbnM/LmV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV92ZXJzaW9uc19hbHJlYWR5X2xhdGVzdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS6juaYryBzeW5jLWV4dGVuc2lvbiDmi7flm57mnaXnmoTov5jmmK/ml6fniYjmnKwg4oCU4oCUIOihqOeOsOWwseaYryfngrnkuobmsqHnlKgn44CCXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5ydW5VcGRhdGUoJ2luc3RhbGwtc2hhcmVkLW1vZHVsZScsIG5hbWUpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOijhei/myBub2RlX21vZHVsZXMg6L+Y5LiN5aSfOue8lui+keWZqOWPquiupCBleHRlbnNpb25zLyDkuIvpgqPku70s5b+F6aG76JC955uYXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAnc3luYy1leHRlbnNpb24nLCBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV9tc2dfZXh0ZW5zaW9uX3VwZGF0ZWQnLCB7IHZlcnNpb246IHRoaXMudmVyc2lvbnM/LmV4dGVuc2lvbj8ubGF0ZXN0IHx8ICcnIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOS4juWFrOWFseaooeWdl+Wuieijhei1sOWQjOS4gOadoei3rzrlpI3nlKjnjrDmiJDnmoQgbnBtIOaJp+ihjOS4juWksei0peWxleekuiAqL1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgcnVuVXBkYXRlKG1lc3NhZ2U6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsIG1lc3NhZ2UsIG5hbWUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSByZXMgJiYgcmVzLm9rID09PSBmYWxzZSA/ICcnIDogbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMub2sgPT09IGZhbHNlKSB0aGlzLnNob3dFcnJvcihyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmVyc2lvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkTW9kdWxlcygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZHVsZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1tb2R1bGVzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TW9kdWxlT3JkZXIgPSB0aGlzLm5leHRPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1vZHVsZSAmJiAhdGhpcy5tb2R1bGVzLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSB0aGlzLnNlbGVjdGVkTW9kdWxlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZHVsZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jRWRpdE9yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE92ZXJ2aWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBuZXh0T3JkZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm1vZHVsZXMubGVuZ3RoKSByZXR1cm4gMTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoLi4udGhpcy5tb2R1bGVzLm1hcCgobTogYW55KSA9PiBtLm9yZGVyKSkgKyAxO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOaooeWdl+aTjeS9nCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZWN0TW9kdWxlKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY0VkaXRPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFZpZXdzKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHN5bmNFZGl0T3JkZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9kID0gdGhpcy5tb2R1bGVzLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSB0aGlzLnNlbGVjdGVkTW9kdWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZCkgdGhpcy5lZGl0T3JkZXIgPSBtb2Qub3JkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkVmlld3MoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktdmlld3MnLCB0aGlzLnNlbGVjdGVkTW9kdWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uQ3JlYXRlTW9kdWxlKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5ld01vZHVsZU5hbWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfbW9kdWxlX25hbWUnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAnY3JlYXRlLW1vZHVsZScsIG5hbWUsIHRoaXMubmV3TW9kdWxlT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX21vZHVsZV9jcmVhdGVkJywgeyBuYW1lOiByZXMuZGlyTmFtZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TW9kdWxlTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVNb2R1bGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gcmVzLmRpck5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY0VkaXRPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRWaWV3cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25VcGRhdGVPcmRlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodGhpcy50KCd1aV9uZWVkX3NlbGVjdF9tb2R1bGUnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAndXBkYXRlLW1vZHVsZS1vcmRlcicsIHRoaXMuc2VsZWN0ZWRNb2R1bGUsIHRoaXMuZWRpdE9yZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ19vcmRlcl91cGRhdGVkJywgeyBuYW1lOiByZXMubW9kdWxlTmFtZSwgb3JkZXI6IHJlcy5vcmRlciB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uRGVsZXRlTW9kdWxlKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZXdDb3VudCA9IHRoaXMudmlld3MubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDliKDpmaTliY3lhYjpl67kuLvov5vnqIvvvJrmnInmsqHmnInotYTmupDlvJXnlKjkuobor6XmqKHlnZfnmoTohJrmnKxcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVmczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1tb2R1bGUtcmVmcycsIHRoaXMuc2VsZWN0ZWRNb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZzID0gcmVzPy5yZWZlcmVuY2VkQnkgPz8gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiDmn6XkuI3liLDlsLHkuI3pmLvmlq3liKDpmaTvvIzlj6rmmK/lsJHkuIDlsYLmj5DphpIgKi9cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FyblJlZnMgPSByZWZzLmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdcXG5cXG7imqAgJyArIHRoaXMudCgndWlfY29uZmlybV9yZWZzJywgeyBjb3VudDogcmVmcy5sZW5ndGggfSkgKyAnXFxuwrcgJyArIHJlZnMuam9pbignXFxuwrcgJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWRpdG9yLkRpYWxvZy53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnQoJ3VpX2NvbmZpcm1fZGVsZXRlX21vZHVsZScsIHsgbmFtZTogdGhpcy5zZWxlY3RlZE1vZHVsZSwgY291bnQ6IHZpZXdDb3VudCB9KSArIHdhcm5SZWZzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGJ1dHRvbnM6IFt0aGlzLnQoJ3VpX2RlbGV0ZScpLCB0aGlzLnQoJ3VpX2NhbmNlbCcpXSwgZGVmYXVsdDogMSwgY2FuY2VsOiAxIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3BvbnNlICE9PSAwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAnZGVsZXRlLW1vZHVsZScsIHRoaXMuc2VsZWN0ZWRNb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX21vZHVsZV9kZWxldGVkJywgeyBuYW1lOiB0aGlzLnNlbGVjdGVkTW9kdWxlIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZHVsZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYW5hZ2VyIOaTjeS9nCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoVGFiKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFiID0gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ3ZlcnNpb25zJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRWZXJzaW9ucygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ21hbmFnZXInKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZE1hbmFnZXJzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnc2hhcmVkJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRTaGFyZWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZE1hbmFnZXJzKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFuYWdlcnMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS1tYW5hZ2VycycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDliJfooajph43lu7rlkI7miorpgInkuK3pobnph43mlrDnu5HlrprliLDmlrDlr7nosaHkuIrvvIzpgb/lhY3mmL7npLrov4fmnJ/mlbDmja5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRNYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFuYWdlciA9IGN1cnJlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5tYW5hZ2Vycy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gY3VycmVudC5uYW1lKSA/PyBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RNYW5hZ2VyKG1hbmFnZXI6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYW5hZ2VyID0gbWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25DcmVhdGVNYW5hZ2VyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLm5ld01hbmFnZXJOYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodGhpcy50KCd1aV9uZWVkX21hbmFnZXJfbmFtZScpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdjcmVhdGUtbWFuYWdlcicsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX21hbmFnZXJfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmNsYXNzTmFtZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TWFuYWdlck5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlTWFuYWdlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkID0gdGhpcy5tYW5hZ2Vycy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gcmVzLmNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcmVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE1hbmFnZXIoY3JlYXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uRGVsZXRlTWFuYWdlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNYW5hZ2VyKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuc2VsZWN0ZWRNYW5hZ2VyLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWRpdG9yLkRpYWxvZy53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnQoJ3VpX2NvbmZpcm1fZGVsZXRlX21hbmFnZXInLCB7IG5hbWUgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYnV0dG9uczogW3RoaXMudCgndWlfZGVsZXRlJyksIHRoaXMudCgndWlfY2FuY2VsJyldLCBkZWZhdWx0OiAxLCBjYW5jZWw6IDEgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzcG9uc2UgIT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdkZWxldGUtbWFuYWdlcicsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX21hbmFnZXJfZGVsZXRlZCcsIHsgbmFtZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFuYWdlcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIG9uTmV3TWFuYWdlck5hbWUoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNYW5hZ2VyTmFtZSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWaWV3IOaTjeS9nCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uRGVsZXRlVmlldyhuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV9kZWxldGVfdmlldycsIHsgbmFtZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBidXR0b25zOiBbdGhpcy50KCd1aV9kZWxldGUnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sIGRlZmF1bHQ6IDEsIGNhbmNlbDogMSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2RlbGV0ZS12aWV3JywgdGhpcy5zZWxlY3RlZE1vZHVsZSwgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfdmlld19kZWxldGVkJywgeyBuYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIG9wZW5DcmVhdGVWaWV3TW9kYWwoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGNsb3NlQ3JlYXRlVmlld01vZGFsKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZVZpZXcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudmlld05hbWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfdmlld19uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2NnZi1nYW1lLXRvb2wnLCAnY3JlYXRlLXZpZXcnLCB0aGlzLnNlbGVjdGVkTW9kdWxlLCBuYW1lLCB0aGlzLmxheWVyLCB0aGlzLnRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX3ZpZXdfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmNsYXNzTmFtZSwgdGVtcGxhdGU6IHJlcy50ZW1wbGF0ZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFZpZXdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE92ZXJ2aWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5L2T5qOA57uT5p6c6YeM55qE5paH5Lu26Lev5b6EIC0+IOWcqOe8lui+keWZqOmHjOaJk+W8gCAqL1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgb3BlblNvdXJjZShmaWxlOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdvcGVuLXNvdXJjZScsIGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOS9k+ajgCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBydW5Eb2N0b3IoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N0b3JSdW5uaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdydW4tZG9jdG9yJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZGluZ3MgPSByZXMuZmluZGluZ3MgPz8gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdG9yU3VtbWFyeSA9IHJlcy5zdW1tYXJ5ID8/IHsgZXJyb3I6IDAsIHdhcm46IDAsIGluZm86IDAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5oyJIGVycm9yIOKGkiB3YXJuIOKGkiBpbmZvIOWIhue7hO+8jOepuue7hOS4jeaYvuekulxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3Rvckdyb3VwcyA9IFNFVkVSSVRJRVNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKHNldmVyaXR5KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldmVyaXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnQoU0VWRVJJVFlfS0VZU1tzZXZlcml0eV0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB0aGlzLmZpbmRpbmdzLmZpbHRlcigoZjogYW55KSA9PiBmLnNldmVyaXR5ID09PSBzZXZlcml0eSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGc6IGFueSkgPT4gZy5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dEb2N0b3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdG9yUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOamguiniCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvcGVuT3ZlcnZpZXcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVydmlld0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE92ZXJ2aWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd092ZXJ2aWV3ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJ2aWV3TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgY2xvc2VPdmVydmlldygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dPdmVydmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOihqOWNleS6i+S7tiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgb25OZXdNb2R1bGVOYW1lKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TW9kdWxlTmFtZSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uTmV3TW9kdWxlT3JkZXIoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVPcmRlciA9IE51bWJlcihlLnRhcmdldC52YWx1ZSkgfHwgMDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvbkVkaXRPcmRlcihlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRPcmRlciA9IE51bWJlcihlLnRhcmdldC52YWx1ZSkgfHwgMDtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvblZpZXdOYW1lKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld05hbWUgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvbkxheWVyKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxheWVyID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25UZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzaG93U3VjY2Vzcyhtc2c6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzaG93RXJyb3IobXNnOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIC8qKiBAcGFyYW0gZm9yY2Ug5by65Yi26YeN5paw5ouJ5Y+W6L+c56iL5YiX6KGo77yI44CM5Yi35paw44CN5oyJ6ZKu55So77yb5ZCm5YiZ55So5Li76L+b56iL6YeM55qE57yT5a2Y77yJICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkU2hhcmVkTW9kdWxlcyhmb3JjZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZWdpc3RyeUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlTaGFyZWRTdGF0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LXNoYXJlZC1tb2R1bGVzJywgZm9yY2UpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVnaXN0cnlMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5Li76L+b56iL5Zue5p2l55qE54q25oCB57uf5LiA5Zyo6L+Z6YeM6JC95YiwIGRhdGEg5LiK77yI5p+l6K+i5LiO6KOFL+WNuOWFseeUqOWQjOS4gOS7vee7k+aehO+8iSAqL1xyXG4gICAgICAgICAgICAgICAgYXBwbHlTaGFyZWRTdGF0ZShyZXM6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkTW9kdWxlcyA9IHJlcz8ubW9kdWxlcyA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2FsU291cmNlID0gcmVzPy5sb2NhbFNvdXJjZSA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS4u+i/m+eoi+WcqFwi5ZCO5Y+w5Yi35paw5LitXCLml7bkvJrluKblm57kuIDkuKrov5vooYzkuK3nmoTor7TmmI4g4oCU4oCUIOmCo+S4jeaYr+Wksei0pSzkuI3or6XmjInlpLHotKXmmL7npLrjgIJcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwZW5kaW5nID0gdHlwZW9mIHJlcz8ucmVnaXN0cnlFcnJvciA9PT0gJ3N0cmluZycgJiYgcmVzLnJlZ2lzdHJ5RXJyb3IuaW5kZXhPZign5q2j5Zyo6I635Y+WJykgPj0gMDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFJlZ2lzdHJ5UGVuZGluZyA9IHBlbmRpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5LiA5qyh5oCn55qE6Ieq5Yqo6YeN6K+VOuWHoOenkuWQjuWQjuWPsOW3sue7j+WIt+WlveS6hizov5nkuIDpobXoh6rlt7Hmm7TmlrAs5LiN55So55So5oi35Y6754K55Yi35pawXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFyZWRSZXRyeVRpbWVyID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZXRyeVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmVkUmV0cnlUaW1lciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2hhcmVkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVnaXN0cnlFcnJvciA9IHJlcz8ucmVnaXN0cnlFcnJvciA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOmAieS4remhueWPr+iDveW3sue7j+S4jeWcqOWIl+ihqOmHjOS6hu+8iOavlOWmguWImuiiq+WNuOi9ve+8iVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2hhcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICEodGhpcy5zaGFyZWRNb2R1bGVzIGFzIGFueVtdKS5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZFNoYXJlZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNoYXJlZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RTaGFyZWQobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNoYXJlZCA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uSW5zdGFsbFNoYXJlZCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJ1blNoYXJlZCgnaW5zdGFsbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvblVuaW5zdGFsbFNoYXJlZCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5zZWxlY3RlZFNoYXJlZEluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWNuOi9veWJjeaPkOmGkuS4pOexu+S8muiiq+aJk+aWreeahOS4nOilv++8mui/mOWcqCBpbXBvcnQg5a6D55qE6ISa5pys44CB5Lul5Y+K5L6d6LWW5a6D55qE5YWs5YWx5qih5Z2X44CCXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Y+q5qOA5p+l5YmN6ICF55qE6K+d77yMXCLlj6bkuIDkuKrlhazlhbHmqKHlnZfkvp3otZblroNcIuS8muWujOWFqOa8j+aOieOAglxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLnJlZmVyZW5jZWRCeS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICfimqAgJyArIHRoaXMudCgndWlfc2hhcmVkX3JlZnNfd2FybicpICsgJ1xcbsK3ICcgKyBpbmZvLnJlZmVyZW5jZWRCeS5qb2luKCdcXG7CtyAnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8uZGVwZW5kZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICfimqAgJyArIHRoaXMudCgndWlfc2hhcmVkX2RlcHNfd2FybicpICsgJ1xcbsK3ICcgKyBpbmZvLmRlcGVuZGVudHMuam9pbignXFxuwrcgJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV91bmluc3RhbGxfc2hhcmVkJywgeyBuYW1lOiBpbmZvLm5hbWUgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKyAod2FybmluZ3MubGVuZ3RoID8gJ1xcblxcbicgKyB3YXJuaW5ncy5qb2luKCdcXG5cXG4nKSA6ICcnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uczogW3RoaXMudCgndWlfc2hhcmVkX3VuaW5zdGFsbCcpLCB0aGlzLnQoJ3VpX2NhbmNlbCcpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLnJlc3BvbnNlICE9PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuU2hhcmVkKCd1bmluc3RhbGwnKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOS+nei1lumhueacrOi6q+S5n+aYr+WFrOWFseaooeWdl+aXtu+8jOeCueS4gOS4i+i3s+i/h+WOu+eci+Wug+eahOeKtuaAgSAqL1xyXG4gICAgICAgICAgICAgICAgb25DbGlja0RlcGVuZGVuY3koZGVwZW5kZW5jeTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVuY3k/LmlzU2hhcmVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0U2hhcmVkKGRlcGVuZGVuY3kubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAqIOS7o+i3kSBucG0g5a6J6KOFIC8g5Y246L2944CCXHJcbiAgICAgICAgICAgICAgICAgKiDlpLHotKXml7YqKuS4jeW8ueS4gOadoei9rOi/sOeahFwi5a6J6KOF5aSx6LSlXCIqKu+8jOiAjOaYr+aKiiBucG0g55qE5Y6f5aeL6L6T5Ye65pW05Liq5pS+6L+b5by556qXIOKAlOKAlFxyXG4gICAgICAgICAgICAgICAgICog55So5oi36KaB6K+K5pat55qE5bCx5piv6YKj5q616L6T5Ye644CCXHJcbiAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIHJ1blNoYXJlZChhY3Rpb246ICdpbnN0YWxsJyB8ICd1bmluc3RhbGwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5mbyA9IHRoaXMuc2VsZWN0ZWRTaGFyZWRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghaW5mbykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZEJ1c3kgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2NnZi1nYW1lLXRvb2wnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID09PSAnaW5zdGFsbCcgPyAnaW5zdGFsbC1zaGFyZWQtbW9kdWxlJyA6ICd1bmluc3RhbGwtc2hhcmVkLW1vZHVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlTaGFyZWRTdGF0ZShyZXMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcz8ub2spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiA9PT0gJ2luc3RhbGwnID8gJ3VpX21zZ19zaGFyZWRfaW5zdGFsbGVkJyA6ICd1aV9tc2dfc2hhcmVkX3VuaW5zdGFsbGVkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6IGluZm8ubmFtZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDlpLHotKXvvJrmlbDmja7nlZnnnYDkvpvlvLnnqpflsZXnpLrvvIzlubbnq4vliLvmiZPlvIDlroNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVzdWx0ID0gcmVzPy5yZXN1bHQgPz8gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NoYXJlZFJlc3VsdCA9IHRoaXMuc2hhcmVkUmVzdWx0ICE9PSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IocmVzPy5tZXNzYWdlIHx8IGBucG0gJHthY3Rpb259IGZhaWxlZGApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRCdXN5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5LuO5raI5oGv6KGM5YaN54K55byA5LiK5LiA5qyh55qEIG5wbSDovpPlh7ogKi9cclxuICAgICAgICAgICAgICAgIG9wZW5TaGFyZWRSZXN1bHQoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hhcmVkUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NoYXJlZFJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5Y+q5YWz5by556qX77yMKirkv53nlZnmlbDmja4qKiDigJTigJQg5ZCm5YiZ5YWz5o6J5LmL5ZCO5bCx5YaN5Lmf55yL5LiN5Yiw6YKj5q616L6T5Ye65LqGICovXHJcbiAgICAgICAgICAgICAgICBjbG9zZVNoYXJlZFJlc3VsdCgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTaGFyZWRSZXN1bHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG1vdW50ZWQoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDb25maWcoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1hbmFnZXJzKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRlbXBsYXRlOiByZWFkRmlsZVN5bmMoam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9zdGF0aWMvdGVtcGxhdGUvd29ya2JlbmNoL3BhbmVsLmh0bWwnKSwgJ3V0Zi04JyksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYXBwLmNvbmZpZy5jb21waWxlck9wdGlvbnMuaXNDdXN0b21FbGVtZW50ID0gKHRhZzogc3RyaW5nKSA9PiB0YWcuc3RhcnRzV2l0aCgndWktJyk7XHJcbiAgICAgICAgYXBwLm1vdW50KCRhcHApO1xyXG4gICAgICAgIHBhbmVsRGF0YU1hcC5zZXQodGhpcywgYXBwKTtcclxuICAgIH0sXHJcbiAgICBiZWZvcmVDbG9zZSgpIHsgfSxcclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIGNvbnN0IGFwcCA9IHBhbmVsRGF0YU1hcC5nZXQodGhpcyk7XHJcbiAgICAgICAgaWYgKGFwcCkge1xyXG4gICAgICAgICAgICBhcHAudW5tb3VudCgpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbn0pO1xyXG4iXX0=
|
package/package.json
CHANGED
|
@@ -162,10 +162,6 @@
|
|
|
162
162
|
<div v-else-if="sharedRegistryError" class="state-banner error">
|
|
163
163
|
{{ t('ui_shared_registry_error', { reason: sharedRegistryError }) }}
|
|
164
164
|
</div>
|
|
165
|
-
<div v-else-if="sharedRegistryError" class="state-banner error">
|
|
166
|
-
<div v-if="sharedRegistryPending" class="empty-hint">{{ t('ui_shared_registry_pending') }}</div>
|
|
167
|
-
{{ t('ui_shared_registry_error', { reason: sharedRegistryError }) }}
|
|
168
|
-
</div>
|
|
169
165
|
|
|
170
166
|
<template v-if="!sharedRegistryPending && sharedModules.length">
|
|
171
167
|
<div class="group-title" v-if="installedShared.length">
|