ccgf-game-tool 1.0.13 → 1.0.15
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/constants.js +10 -2
- package/dist/doctor.js +4 -2
- package/dist/main.js +69 -3
- package/dist/panels/workbench/index.js +36 -4
- package/dist/templates.js +14 -2
- package/dist/types.js +1 -1
- package/i18n/en.js +2 -1
- package/i18n/zh.js +2 -1
- package/package.json +16 -1
- package/static/template/workbench/panel.html +11 -2
|
@@ -53,11 +53,13 @@ module.exports = Editor.Panel.define({
|
|
|
53
53
|
selectedManager: null,
|
|
54
54
|
showCreateManager: false,
|
|
55
55
|
newManagerName: '',
|
|
56
|
+
newManagerOrder: 40,
|
|
56
57
|
// 新建模块表单
|
|
57
58
|
newModuleName: '',
|
|
58
59
|
newModuleOrder: 1,
|
|
59
60
|
// 模块 order 编辑
|
|
60
61
|
editOrder: 0,
|
|
62
|
+
editManagerOrder: 0,
|
|
61
63
|
// 当前模块的 view 列表
|
|
62
64
|
views: [],
|
|
63
65
|
// 创建 view 弹窗
|
|
@@ -226,7 +228,7 @@ module.exports = Editor.Panel.define({
|
|
|
226
228
|
this.message = this.t('ui_versions_already_latest');
|
|
227
229
|
return;
|
|
228
230
|
}
|
|
229
|
-
if (!(await this.runUpdate('
|
|
231
|
+
if (!(await this.runUpdate('update-framework', name)))
|
|
230
232
|
return;
|
|
231
233
|
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) || '' });
|
|
232
234
|
},
|
|
@@ -241,7 +243,7 @@ module.exports = Editor.Panel.define({
|
|
|
241
243
|
return;
|
|
242
244
|
}
|
|
243
245
|
// 于是 sync-extension 拷回来的还是旧版本 —— 表现就是'点了没用'。
|
|
244
|
-
if (!(await this.runUpdate('
|
|
246
|
+
if (!(await this.runUpdate('update-extension', name)))
|
|
245
247
|
return;
|
|
246
248
|
// 装进 node_modules 还不够:编辑器只认 extensions/ 下那份,必须落盘
|
|
247
249
|
try {
|
|
@@ -419,6 +421,8 @@ module.exports = Editor.Panel.define({
|
|
|
419
421
|
},
|
|
420
422
|
selectManager(manager) {
|
|
421
423
|
this.selectedManager = manager;
|
|
424
|
+
// 必须在赋值**之后**同步 —— 否则读到的还是上一个选中项的 order
|
|
425
|
+
this.syncEditManagerOrder();
|
|
422
426
|
this.message = '';
|
|
423
427
|
},
|
|
424
428
|
async onCreateManager() {
|
|
@@ -428,7 +432,7 @@ module.exports = Editor.Panel.define({
|
|
|
428
432
|
return;
|
|
429
433
|
}
|
|
430
434
|
try {
|
|
431
|
-
const res = await Editor.Message.request('ccgf-game-tool', 'create-manager', name);
|
|
435
|
+
const res = await Editor.Message.request('ccgf-game-tool', 'create-manager', name, this.newManagerOrder);
|
|
432
436
|
this.showSuccess(this.t('ui_msg_manager_created', { name: res.className }));
|
|
433
437
|
this.newManagerName = '';
|
|
434
438
|
this.showCreateManager = false;
|
|
@@ -461,6 +465,34 @@ module.exports = Editor.Panel.define({
|
|
|
461
465
|
this.showError((e === null || e === void 0 ? void 0 : e.message) || e);
|
|
462
466
|
}
|
|
463
467
|
},
|
|
468
|
+
/** 选中 manager 时把它的 order 填进编辑框(照模块那套) */
|
|
469
|
+
syncEditManagerOrder() {
|
|
470
|
+
var _a;
|
|
471
|
+
if (this.selectedManager) {
|
|
472
|
+
this.editManagerOrder = (_a = this.selectedManager.order) !== null && _a !== void 0 ? _a : 0;
|
|
473
|
+
}
|
|
474
|
+
},
|
|
475
|
+
/** 更新 manager 的 order:直接改写脚本里的 @RegisterManager({order}) */
|
|
476
|
+
async onUpdateManagerOrder() {
|
|
477
|
+
if (!this.selectedManager)
|
|
478
|
+
return;
|
|
479
|
+
try {
|
|
480
|
+
const res = await Editor.Message.request('ccgf-game-tool', 'update-manager-order', this.selectedManager.name, this.editManagerOrder);
|
|
481
|
+
this.showSuccess(this.t('ui_msg_manager_order_saved', { name: res.className, order: res.order }));
|
|
482
|
+
await this.loadManagers();
|
|
483
|
+
// 列表重排了,编辑框也要跟着显示最新的 —— 否则保存完还显示保存前的值
|
|
484
|
+
this.syncEditManagerOrder();
|
|
485
|
+
}
|
|
486
|
+
catch (e) {
|
|
487
|
+
this.showError((e === null || e === void 0 ? void 0 : e.message) || e);
|
|
488
|
+
}
|
|
489
|
+
},
|
|
490
|
+
onNewManagerOrder(e) {
|
|
491
|
+
this.newManagerOrder = Number(e.target.value) || 0;
|
|
492
|
+
},
|
|
493
|
+
onEditManagerOrder(e) {
|
|
494
|
+
this.editManagerOrder = Number(e.target.value) || 0;
|
|
495
|
+
},
|
|
464
496
|
onNewManagerName(e) {
|
|
465
497
|
this.newManagerName = e.target.value;
|
|
466
498
|
},
|
|
@@ -723,4 +755,4 @@ module.exports = Editor.Panel.define({
|
|
|
723
755
|
}
|
|
724
756
|
},
|
|
725
757
|
});
|
|
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=
|
|
758
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zb3VyY2UvcGFuZWxzL3dvcmtiZW5jaC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDOztBQUUvQyx1Q0FBd0M7QUFDeEMsK0JBQTRCO0FBQzVCLDZCQUFxQztBQUVyQyw2QkFBNkI7QUFDN0IsSUFBSSxnQkFBZ0IsR0FBUSxJQUFJLENBQUM7QUFFakMsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVksQ0FBQztBQUU3QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFVLENBQUM7QUFDdEQseUJBQXlCO0FBQ3pCLE1BQU0sYUFBYSxHQUEyQjtJQUMxQyxLQUFLLEVBQUUsbUJBQW1CO0lBQzFCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsSUFBSSxFQUFFLGtCQUFrQjtDQUMzQixDQUFDO0FBRUYsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNqQyxTQUFTLEVBQUU7UUFDUCxJQUFJLEtBQUssQ0FBQztRQUNWLElBQUksS0FBSyxDQUFDO0tBQ2I7SUFDRCxRQUFRLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUNqRyxLQUFLLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwyQ0FBMkMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUMxRixDQUFDLEVBQUU7UUFDQyxHQUFHLEVBQUUsTUFBTTtLQUNkO0lBQ0QsS0FBSyxDQUFDLEtBQUs7UUFDUCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixPQUFPO1FBQ1gsQ0FBQztRQUVELCtCQUErQjtR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RUFBRSxDQUFDO1lBQ3hCLENBQUM7WUFDRCxRQUFRLEVBQUUsSUFBQSx1QkFBWSxFQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwrQ0FBK0MsQ0FBQyxFQUFFLE9BQU8sQ0FBQztTQUNwRyxDQUFDLENBQUM7UUFDSCxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEYsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBQ0QsV0FBVyxLQUFLLENBQUM7SUFDakIsS0FBSztRQUNELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNOLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixDQUFDO0lBQ0wsQ0FBQztDQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHZ1ZS9vbmUtY29tcG9uZW50LXBlci1maWxlICovXHJcblxyXG5pbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcy1leHRyYSc7XHJcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcclxuaW1wb3J0IHsgY3JlYXRlQXBwLCBBcHAgfSBmcm9tICd2dWUnO1xyXG5cclxuLyoqIOiHquWKqOmHjeivleeahOWumuaXtuWZqCjmqKHlnZfnuqc65ZCM5LiA5pe25Yi75Y+q55WZ5LiA5LiqKSAqL1xyXG5sZXQgc2hhcmVkUmV0cnlUaW1lcjogYW55ID0gbnVsbDtcclxuXHJcbmNvbnN0IHBhbmVsRGF0YU1hcCA9IG5ldyBXZWFrTWFwPGFueSwgQXBwPigpO1xyXG5cclxuY29uc3QgU0VWRVJJVElFUyA9IFsnZXJyb3InLCAnd2FybicsICdpbmZvJ10gYXMgY29uc3Q7XHJcbi8qKiDkvZPmo4DkuKXph43nuqfliKsgLT4gaTE4biBrZXkgKi9cclxuY29uc3QgU0VWRVJJVFlfS0VZUzogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIGVycm9yOiAndWlfc2V2ZXJpdHlfZXJyb3InLFxyXG4gICAgd2FybjogJ3VpX3NldmVyaXR5X3dhcm4nLFxyXG4gICAgaW5mbzogJ3VpX3NldmVyaXR5X2luZm8nLFxyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBFZGl0b3IuUGFuZWwuZGVmaW5lKHtcclxuICAgIGxpc3RlbmVyczoge1xyXG4gICAgICAgIHNob3coKSB7IH0sXHJcbiAgICAgICAgaGlkZSgpIHsgfSxcclxuICAgIH0sXHJcbiAgICB0ZW1wbGF0ZTogcmVhZEZpbGVTeW5jKGpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vc3RhdGljL3RlbXBsYXRlL3dvcmtiZW5jaC9pbmRleC5odG1sJyksICd1dGYtOCcpLFxyXG4gICAgc3R5bGU6IHJlYWRGaWxlU3luYyhqb2luKF9fZGlybmFtZSwgJy4uLy4uLy4uL3N0YXRpYy9zdHlsZS93b3JrYmVuY2gvaW5kZXguY3NzJyksICd1dGYtOCcpLFxyXG4gICAgJDoge1xyXG4gICAgICAgIGFwcDogJyNhcHAnLFxyXG4gICAgfSxcclxuICAgIGFzeW5jIHJlYWR5KCkge1xyXG4gICAgICAgIGNvbnN0ICRhcHAgPSB0aGlzLiQuYXBwO1xyXG4gICAgICAgIGlmICghJGFwcCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDmlofmoYjlhYjlj5blm57mnaXlho3mjILovb3vvJrlkKbliJnpppbluKfkvJrmiorljp/lp4sga2V5IOaYvuekuue7meeUqOaIt1xyXG4gICAgICAgIGxldCBzdHJpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc3RyaW5ncyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LWkxOG4nKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8qIOWPluS4jeWIsOWwsemAgOWMluS4uiBrZXnvvIzkvYbkuI3lvbHlk43pnaLmnb/lip/og70gKi9cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFwcCA9IGNyZWF0ZUFwcCh7XHJcbiAgICAgICAgICAgIGRhdGEoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qKiDkuLvov5vnqIvmjInlvZPliY3nvJbovpHlmajor63oqIDop6PmnpDlpb3nmoTmlofmoYjooaggKi9cclxuICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvKiog5b2T5YmN5YiH6aG177yabW9kdWxlIHwgbWFuYWdlciAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYjogJ21vZHVsZScsXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaooeWdl+WIl+ihqFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZXM6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTW9kdWxlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dDcmVhdGVNb2R1bGU6IGZhbHNlLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBtYW5hZ2VyIOWIl+ihqO+8iOWFqOWxgOWNleS+i+acjeWKoe+8iVxyXG4gICAgICAgICAgICAgICAgICAgIG1hbmFnZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE1hbmFnZXI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NyZWF0ZU1hbmFnZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIG5ld01hbmFnZXJOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBuZXdNYW5hZ2VyT3JkZXI6IDQwLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDmlrDlu7rmqKHlnZfooajljZVcclxuICAgICAgICAgICAgICAgICAgICBuZXdNb2R1bGVOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBuZXdNb2R1bGVPcmRlcjogMSxcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5qih5Z2XIG9yZGVyIOe8lui+kVxyXG4gICAgICAgICAgICAgICAgICAgIGVkaXRPcmRlcjogMCxcclxuICAgICAgICAgICAgICAgICAgICBlZGl0TWFuYWdlck9yZGVyOiAwLFxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyDlvZPliY3mqKHlnZfnmoQgdmlldyDliJfooahcclxuICAgICAgICAgICAgICAgICAgICB2aWV3czogW10sXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIm+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/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZU9mKHRoaXMudmVyc2lvbnM/LmZyYW1ld29yaykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV92ZXJzaW9uc19hbHJlYWR5X2xhdGVzdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGF3YWl0IHRoaXMucnVuVXBkYXRlKCd1cGRhdGUtZnJhbWV3b3JrJywgbmFtZSkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV9tc2dfZnJhbWV3b3JrX3VwZGF0ZWQnLCB7IHZlcnNpb246IHRoaXMudmVyc2lvbnM/LmZyYW1ld29yaz8ubGF0ZXN0IHx8ICcnIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyB1cGRhdGVFeHRlbnNpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudmVyc2lvbnM/LmV4dGVuc2lvbj8ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyDlt7LmmK/mnIDmlrDlsLHliKvnnJ/ljrvoo4XkuIDpgY0s5pu05Yir5oqlXCLlt7Lmm7TmlrBcIiDigJTigJQg6YKj5piv5Zyo6aqX55So5oi3XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZU9mKHRoaXMudmVyc2lvbnM/LmV4dGVuc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gdGhpcy50KCd1aV92ZXJzaW9uc19hbHJlYWR5X2xhdGVzdCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOS6juaYryBzeW5jLWV4dGVuc2lvbiDmi7flm57mnaXnmoTov5jmmK/ml6fniYjmnKwg4oCU4oCUIOihqOeOsOWwseaYryfngrnkuobmsqHnlKgn44CCXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5ydW5VcGRhdGUoJ3VwZGF0ZS1leHRlbnNpb24nLCBuYW1lKSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAvLyDoo4Xov5sgbm9kZV9tb2R1bGVzIOi/mOS4jeWknzrnvJbovpHlmajlj6rorqQgZXh0ZW5zaW9ucy8g5LiL6YKj5Lu9LOW/hemhu+iQveebmFxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3N5bmMtZXh0ZW5zaW9uJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHRoaXMudCgndWlfbXNnX2V4dGVuc2lvbl91cGRhdGVkJywgeyB2ZXJzaW9uOiB0aGlzLnZlcnNpb25zPy5leHRlbnNpb24/LmxhdGVzdCB8fCAnJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkuI7lhazlhbHmqKHlnZflronoo4XotbDlkIzkuIDmnaHot6865aSN55So546w5oiQ55qEIG5wbSDmiafooYzkuI7lpLHotKXlsZXnpLogKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIHJ1blVwZGF0ZShtZXNzYWdlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCBtZXNzYWdlLCBuYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gcmVzICYmIHJlcy5vayA9PT0gZmFsc2UgPyAnJyA6IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLm9rID09PSBmYWxzZSkgdGhpcy5zaG93RXJyb3IocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFZlcnNpb25zKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZE1vZHVsZXMoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2R1bGVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbW9kdWxlcycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU9yZGVyID0gdGhpcy5uZXh0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNb2R1bGUgJiYgIXRoaXMubW9kdWxlcy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZHVsZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY0VkaXRPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgbmV4dE9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5tb2R1bGVzLmxlbmd0aCkgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KC4uLnRoaXMubW9kdWxlcy5tYXAoKG06IGFueSkgPT4gbS5vcmRlcikpICsgMTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDmqKHlnZfmk43kvZwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdE1vZHVsZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFZGl0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRWaWV3cygpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBzeW5jRWRpdE9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vZCA9IHRoaXMubW9kdWxlcy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2QpIHRoaXMuZWRpdE9yZGVyID0gbW9kLm9yZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgbG9hZFZpZXdzKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LXZpZXdzJywgdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZU1vZHVsZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5uZXdNb2R1bGVOYW1lLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodGhpcy50KCd1aV9uZWVkX21vZHVsZV9uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2NyZWF0ZS1tb2R1bGUnLCBuYW1lLCB0aGlzLm5ld01vZHVsZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ19tb2R1bGVfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmRpck5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlTW9kdWxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZHVsZSA9IHJlcy5kaXJOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFZGl0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uVXBkYXRlT3JkZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHRoaXMudCgndWlfbmVlZF9zZWxlY3RfbW9kdWxlJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3VwZGF0ZS1tb2R1bGUtb3JkZXInLCB0aGlzLnNlbGVjdGVkTW9kdWxlLCB0aGlzLmVkaXRPcmRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfb3JkZXJfdXBkYXRlZCcsIHsgbmFtZTogcmVzLm1vZHVsZU5hbWUsIG9yZGVyOiByZXMub3JkZXIgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkRlbGV0ZU1vZHVsZSgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWV3Q291bnQgPSB0aGlzLnZpZXdzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yig6Zmk5YmN5YWI6Zeu5Li76L+b56iL77ya5pyJ5rKh5pyJ6LWE5rqQ5byV55So5LqG6K+l5qih5Z2X55qE6ISa5pysXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlZnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbW9kdWxlLXJlZnMnLCB0aGlzLnNlbGVjdGVkTW9kdWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcyA9IHJlcz8ucmVmZXJlbmNlZEJ5ID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLyog5p+l5LiN5Yiw5bCx5LiN6Zi75pat5Yig6Zmk77yM5Y+q5piv5bCR5LiA5bGC5o+Q6YaSICovXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdhcm5SZWZzID0gcmVmcy5sZW5ndGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnXFxuXFxu4pqgICcgKyB0aGlzLnQoJ3VpX2NvbmZpcm1fcmVmcycsIHsgY291bnQ6IHJlZnMubGVuZ3RoIH0pICsgJ1xcbsK3ICcgKyByZWZzLmpvaW4oJ1xcbsK3ICcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJyc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVkaXRvci5EaWFsb2cud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50KCd1aV9jb25maXJtX2RlbGV0ZV9tb2R1bGUnLCB7IG5hbWU6IHRoaXMuc2VsZWN0ZWRNb2R1bGUsIGNvdW50OiB2aWV3Q291bnQgfSkgKyB3YXJuUmVmcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBidXR0b25zOiBbdGhpcy50KCd1aV9kZWxldGUnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sIGRlZmF1bHQ6IDEsIGNhbmNlbDogMSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2RlbGV0ZS1tb2R1bGUnLCB0aGlzLnNlbGVjdGVkTW9kdWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ19tb2R1bGVfZGVsZXRlZCcsIHsgbmFtZTogdGhpcy5zZWxlY3RlZE1vZHVsZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFuYWdlciDmk43kvZwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIHN3aXRjaFRhYihuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYiA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICd2ZXJzaW9ucycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVmVyc2lvbnMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdtYW5hZ2VyJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3NoYXJlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkU2hhcmVkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRNYW5hZ2VycygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hbmFnZXJzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktbWFuYWdlcnMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiX6KGo6YeN5bu65ZCO5oqK6YCJ5Lit6aG56YeN5paw57uR5a6a5Yiw5paw5a+56LGh5LiK77yM6YG/5YWN5pi+56S66L+H5pyf5pWw5o2uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlbGVjdGVkTWFuYWdlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hbmFnZXIgPSBjdXJyZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMubWFuYWdlcnMuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IGN1cnJlbnQubmFtZSkgPz8gbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc2VsZWN0TWFuYWdlcihtYW5hZ2VyOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFuYWdlciA9IG1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5b+F6aG75Zyo6LWL5YC8KirkuYvlkI4qKuWQjOatpSDigJTigJQg5ZCm5YiZ6K+75Yiw55qE6L+Y5piv5LiK5LiA5Liq6YCJ5Lit6aG555qEIG9yZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jRWRpdE1hbmFnZXJPcmRlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZU1hbmFnZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmV3TWFuYWdlck5hbWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfbWFuYWdlcl9uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2NyZWF0ZS1tYW5hZ2VyJywgbmFtZSwgdGhpcy5uZXdNYW5hZ2VyT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX21hbmFnZXJfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmNsYXNzTmFtZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TWFuYWdlck5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlTWFuYWdlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjcmVhdGVkID0gdGhpcy5tYW5hZ2Vycy5maW5kKChtOiBhbnkpID0+IG0ubmFtZSA9PT0gcmVzLmNsYXNzTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcmVhdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE1hbmFnZXIoY3JlYXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uRGVsZXRlTWFuYWdlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNYW5hZ2VyKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuc2VsZWN0ZWRNYW5hZ2VyLm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgRWRpdG9yLkRpYWxvZy53YXJuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnQoJ3VpX2NvbmZpcm1fZGVsZXRlX21hbmFnZXInLCB7IG5hbWUgfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYnV0dG9uczogW3RoaXMudCgndWlfZGVsZXRlJyksIHRoaXMudCgndWlfY2FuY2VsJyldLCBkZWZhdWx0OiAxLCBjYW5jZWw6IDEgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzcG9uc2UgIT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdkZWxldGUtbWFuYWdlcicsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX21hbmFnZXJfZGVsZXRlZCcsIHsgbmFtZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYW5hZ2VyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTWFuYWdlcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDpgInkuK0gbWFuYWdlciDml7bmiorlroPnmoQgb3JkZXIg5aGr6L+b57yW6L6R5qGGKOeFp+aooeWdl+mCo+WllykgKi9cclxuICAgICAgICAgICAgICAgIHN5bmNFZGl0TWFuYWdlck9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWFuYWdlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRNYW5hZ2VyT3JkZXIgPSB0aGlzLnNlbGVjdGVkTWFuYWdlci5vcmRlciA/PyAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIOabtOaWsCBtYW5hZ2VyIOeahCBvcmRlcjrnm7TmjqXmlLnlhpnohJrmnKzph4znmoQgQFJlZ2lzdGVyTWFuYWdlcih7b3JkZXJ9KSAqL1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25VcGRhdGVNYW5hZ2VyT3JkZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTWFuYWdlcikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2NnZi1nYW1lLXRvb2wnLCAndXBkYXRlLW1hbmFnZXItb3JkZXInLCB0aGlzLnNlbGVjdGVkTWFuYWdlci5uYW1lLCB0aGlzLmVkaXRNYW5hZ2VyT3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbWFuYWdlcl9vcmRlcl9zYXZlZCcsIHsgbmFtZTogcmVzLmNsYXNzTmFtZSwgb3JkZXI6IHJlcy5vcmRlciB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1hbmFnZXJzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIl+ihqOmHjeaOkuS6hu+8jOe8lui+keahhuS5n+imgei3n+edgOaYvuekuuacgOaWsOeahCDigJTigJQg5ZCm5YiZ5L+d5a2Y5a6M6L+Y5pi+56S65L+d5a2Y5YmN55qE5YC8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3luY0VkaXRNYW5hZ2VyT3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIG9uTmV3TWFuYWdlck9yZGVyKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3TWFuYWdlck9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBvbkVkaXRNYW5hZ2VyT3JkZXIoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0TWFuYWdlck9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uTmV3TWFuYWdlck5hbWUoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNYW5hZ2VyTmFtZSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWaWV3IOaTjeS9nCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uRGVsZXRlVmlldyhuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV9kZWxldGVfdmlldycsIHsgbmFtZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBidXR0b25zOiBbdGhpcy50KCd1aV9kZWxldGUnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sIGRlZmF1bHQ6IDEsIGNhbmNlbDogMSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2RlbGV0ZS12aWV3JywgdGhpcy5zZWxlY3RlZE1vZHVsZSwgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfdmlld19kZWxldGVkJywgeyBuYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIG9wZW5DcmVhdGVWaWV3TW9kYWwoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGNsb3NlQ3JlYXRlVmlld01vZGFsKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZVZpZXcoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMudmlld05hbWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfdmlld19uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2NnZi1nYW1lLXRvb2wnLCAnY3JlYXRlLXZpZXcnLCB0aGlzLnNlbGVjdGVkTW9kdWxlLCBuYW1lLCB0aGlzLmxheWVyLCB0aGlzLnRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX3ZpZXdfY3JlYXRlZCcsIHsgbmFtZTogcmVzLmNsYXNzTmFtZSwgdGVtcGxhdGU6IHJlcy50ZW1wbGF0ZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZVZpZXdNb2RhbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFZpZXdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE92ZXJ2aWV3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/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=
|