From f2c73ef189e4741c342a511002588cc2138fabfb Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Sun, 21 Aug 2022 18:13:38 +0200 Subject: [PATCH] added a security disclaimer Closes #54 --- src/settings-tab.ts | 5 +++++ test-vault/.obsidian/hotkeys.json | 12 +++++++++++- .../.obsidian/plugins/obsidian-custom-frames/main.js | 6 +++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/settings-tab.ts b/src/settings-tab.ts index d847a25..e8a62c3 100644 --- a/src/settings-tab.ts +++ b/src/settings-tab.ts @@ -187,6 +187,11 @@ export class CustomFramesSettingTab extends PluginSettingTab { this.display(); }); + var disclaimer = this.containerEl.createEl("p", { cls: "mod-warning" }); + disclaimer.createSpan({ text: "Please be advised that, when adding a site as a custom frame, you potentially expose personal information you enter to other plugins you have installed. For more information, see " }); + disclaimer.createEl("a", { text: "this discussion", href: "https://github.com/Ellpeck/ObsidianCustomFrames/issues/54#issuecomment-1210879685", cls: "mod-warning" }); + disclaimer.createSpan({ text: "." }); + this.containerEl.createEl("hr"); this.containerEl.createEl("p", { text: "If you like this plugin and want to support its development, you can do so through my website by clicking this fancy image!" }); this.containerEl.createEl("a", { href: "https://ellpeck.de/support" }) diff --git a/test-vault/.obsidian/hotkeys.json b/test-vault/.obsidian/hotkeys.json index 9e26dfe..c7d2e95 100644 --- a/test-vault/.obsidian/hotkeys.json +++ b/test-vault/.obsidian/hotkeys.json @@ -1 +1,11 @@ -{} \ No newline at end of file +{ + "app:reload": [ + { + "modifiers": [ + "Mod", + "Shift" + ], + "key": "R" + } + ] +} \ No newline at end of file diff --git a/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js b/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js index 7475a3a..023f051 100644 --- a/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js +++ b/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js @@ -395,6 +395,10 @@ var CustomFramesSettingTab = class extends import_obsidian2.PluginSettingTab { yield this.plugin.saveSettings(); this.display(); })); + var disclaimer = this.containerEl.createEl("p", { cls: "mod-warning" }); + disclaimer.createSpan({ text: "Please be advised that, when adding a site as a custom frame, you potentially expose personal information you enter to other plugins you have installed. For more information, see " }); + disclaimer.createEl("a", { text: "this discussion", href: "https://github.com/Ellpeck/ObsidianCustomFrames/issues/54#issuecomment-1210879685", cls: "mod-warning" }); + disclaimer.createSpan({ text: "." }); this.containerEl.createEl("hr"); this.containerEl.createEl("p", { text: "If you like this plugin and want to support its development, you can do so through my website by clicking this fancy image!" }); this.containerEl.createEl("a", { href: "https://ellpeck.de/support" }).createEl("img", { attr: { src: "https://ellpeck.de/res/generalsupport.png" }, cls: "custom-frames-support" }); @@ -557,4 +561,4 @@ var CustomFramesPlugin = class extends import_obsidian4.Plugin { }); } }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiwgZ2V0SWQgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZXNTZXR0aW5nVGFiIH0gZnJvbSBcIi4vc2V0dGluZ3MtdGFiXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lVmlldyB9IGZyb20gXCIuL3ZpZXdcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUZyYW1lc1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcblxyXG5cdHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuXHJcblx0YXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuXHJcblx0XHRmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnNldHRpbmdzLmZyYW1lcykge1xyXG5cdFx0XHRpZiAoIWZyYW1lLnVybCB8fCAhZnJhbWUuZGlzcGxheU5hbWUpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdGxldCBuYW1lID0gYGN1c3RvbS1mcmFtZXMtJHtnZXRJZChmcmFtZSl9YDtcclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGZyYW1lLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBTa2lwcGluZyBmcmFtZSAke25hbWV9IHdoaWNoIGlzIGhpZGRlbiBvbiBtb2JpbGVgKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBSZWdpc3RlcmluZyBmcmFtZSAke25hbWV9IGZvciBVUkwgJHtmcmFtZS51cmx9YCk7XHJcblxyXG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJWaWV3KG5hbWUsIGwgPT4gbmV3IEN1c3RvbUZyYW1lVmlldyhsLCB0aGlzLnNldHRpbmdzLCBmcmFtZSwgbmFtZSkpO1xyXG5cdFx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0XHRpZDogYG9wZW4tJHtuYW1lfWAsXHJcblx0XHRcdFx0XHRuYW1lOiBgT3BlbiAke2ZyYW1lLmRpc3BsYXlOYW1lfWAsXHJcblx0XHRcdFx0XHRjYWxsYmFjazogKCkgPT4gdGhpcy5vcGVuTGVhZihuYW1lLCBmcmFtZS5vcGVuSW5DZW50ZXIsIGZhbHNlKSxcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aWYgKGZyYW1lLmFkZFJpYmJvbkljb24pXHJcblx0XHRcdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oZ2V0SWNvbihmcmFtZSksIGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdFx0ZSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgUGxhdGZvcm0uaXNNYWNPUyA/IGUubWV0YUtleSA6IGUuY3RybEtleSkpO1xyXG5cdFx0XHR9IGNhdGNoIHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBDb3VsZG4ndCByZWdpc3RlciBmcmFtZSAke25hbWV9LCBpcyB0aGVyZSBhbHJlYWR5IG9uZSB3aXRoIHRoZSBzYW1lIG5hbWU/YCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcblx0XHR0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXCJjdXN0b20tZnJhbWVzXCIsIChzLCBlKSA9PiB7XHJcblx0XHRcdGUuZW1wdHkoKTtcclxuXHRcdFx0ZS5hZGRDbGFzcyhcImN1c3RvbS1mcmFtZXMtdmlldy1maWxlXCIpO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lTWF0Y2ggPSAvZnJhbWU6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCBmcmFtZU5hbWUgPSBmcmFtZU1hdGNoICYmIGZyYW1lTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRpZiAoIWZyYW1lTmFtZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQ291bGRuJ3QgcGFyc2UgZnJhbWUgbmFtZVwiIH0pO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgZGF0YSA9IHRoaXMuc2V0dGluZ3MuZnJhbWVzLmZpbmQoZiA9PiBmLmRpc3BsYXlOYW1lID09IGZyYW1lTmFtZSk7XHJcblx0XHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGBDb3VsZG4ndCBmaW5kIGEgZnJhbWUgd2l0aCBuYW1lICR7ZnJhbWVOYW1lfWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChQbGF0Zm9ybS5pc01vYmlsZUFwcCAmJiBkYXRhLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGAke2ZyYW1lTmFtZX0gaXMgaGlkZGVuIG9uIG1vYmlsZWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsZXQgc3R5bGVNYXRjaCA9IC9zdHlsZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHN0eWxlID0gc3R5bGVNYXRjaCAmJiBzdHlsZU1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0c3R5bGUgfHw9IFwiaGVpZ2h0OiA2MDBweDtcIjtcclxuXHJcblx0XHRcdGxldCB1cmxTdWZmaXhNYXRjaCA9IC91cmxzdWZmaXg6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCB1cmxTdWZmaXggPSB1cmxTdWZmaXhNYXRjaCAmJiB1cmxTdWZmaXhNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdHVybFN1ZmZpeCB8fD0gXCJcIjtcclxuXHJcblx0XHRcdGxldCBmcmFtZSA9IG5ldyBDdXN0b21GcmFtZSh0aGlzLnNldHRpbmdzLCBkYXRhKTtcclxuXHRcdFx0ZS5hcHBlbmRDaGlsZChmcmFtZS5jcmVhdGUoc3R5bGUsIHVybFN1ZmZpeCkpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgb3BlbkxlYWYobmFtZTogc3RyaW5nLCBjZW50ZXI6IGJvb2xlYW4sIHNwbGl0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRpZiAoY2VudGVyKSB7XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5kZXRhY2hMZWF2ZXNPZlR5cGUobmFtZSk7XHJcblx0XHRcdGxldCBsZWFmID0gdGhpcy5hcHAud29ya3NwYWNlLmdldExlYWYoc3BsaXQpO1xyXG5cdFx0XHRhd2FpdCBsZWFmLnNldFZpZXdTdGF0ZSh7IHR5cGU6IG5hbWUsIGFjdGl2ZTogdHJ1ZSB9KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICghdGhpcy5hcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShuYW1lKS5sZW5ndGgpXHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAud29ya3NwYWNlLmdldFJpZ2h0TGVhZihmYWxzZSkuc2V0Vmlld1N0YXRlKHsgdHlwZTogbmFtZSwgYWN0aXZlOiB0cnVlIH0pO1xyXG5cdFx0XHR0aGlzLmFwcC53b3Jrc3BhY2UucmV2ZWFsTGVhZih0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKG5hbWUpWzBdKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwgImltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lU2V0dGluZ3MsIEN1c3RvbUZyYW1lc1NldHRpbmdzLCBnZXRJZCB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRnJhbWUge1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRhOiBDdXN0b21GcmFtZVNldHRpbmdzO1xyXG4gICAgcHJpdmF0ZSBmcmFtZTogSFRNTElGcmFtZUVsZW1lbnQgfCBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzLCBkYXRhOiBDdXN0b21GcmFtZVNldHRpbmdzKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZShhZGRpdGlvbmFsU3R5bGU6IHN0cmluZyA9IHVuZGVmaW5lZCwgdXJsU3VmZml4OiBzdHJpbmcgPSB1bmRlZmluZWQpOiBhbnkge1xyXG4gICAgICAgIGxldCBzdHlsZSA9IGBwYWRkaW5nOiAke3RoaXMuc2V0dGluZ3MucGFkZGluZ31weDtgO1xyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsU3R5bGUpXHJcbiAgICAgICAgICAgIHN0eWxlICs9IGFkZGl0aW9uYWxTdHlsZTtcclxuICAgICAgICBpZiAoUGxhdGZvcm0uaXNEZXNrdG9wQXBwICYmICF0aGlzLmRhdGEuZm9yY2VJZnJhbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ3ZWJ2aWV3XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcImFsbG93cG9wdXBzXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRab29tRmFjdG9yKHRoaXMuZGF0YS56b29tTGV2ZWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5pbnNlcnRDU1ModGhpcy5kYXRhLmN1c3RvbUNzcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInNhbmRib3hcIiwgXCJhbGxvdy1mb3JtcyBhbGxvdy1tb2RhbHMgYWxsb3ctcG9wdXBzIGFsbG93LXByZXNlbnRhdGlvbiBhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIGFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvblwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJhbGxvd1wiLCBcImVuY3J5cHRlZC1tZWRpYTsgZnVsbHNjcmVlbjsgb3ZlcnNpemVkLWltYWdlczsgcGljdHVyZS1pbi1waWN0dXJlOyBzeW5jLXhocjsgZ2VvbG9jYXRpb247XCIpO1xyXG4gICAgICAgICAgICBzdHlsZSArPSBgdHJhbnNmb3JtOiBzY2FsZSgke3RoaXMuZGF0YS56b29tTGV2ZWx9KTsgdHJhbnNmb3JtLW9yaWdpbjogMCAwO2A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJhbWUuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLWZyYW1lXCIpO1xyXG4gICAgICAgIHRoaXMuZnJhbWUuYWRkQ2xhc3MoYGN1c3RvbS1mcmFtZXMtJHtnZXRJZCh0aGlzLmRhdGEpfWApO1xyXG4gICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgc3R5bGUpO1xyXG5cclxuICAgICAgICBsZXQgc3JjID0gdGhpcy5kYXRhLnVybDtcclxuICAgICAgICBpZiAodXJsU3VmZml4KSB7XHJcbiAgICAgICAgICAgIGlmICghdXJsU3VmZml4LnN0YXJ0c1dpdGgoXCIvXCIpKVxyXG4gICAgICAgICAgICAgICAgc3JjICs9IFwiL1wiO1xyXG4gICAgICAgICAgICBzcmMgKz0gdXJsU3VmZml4O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInNyY1wiLCBzcmMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5mcmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnJlbG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmV0dXJuKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lm9wZW4odGhpcy5kYXRhLnVybCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5sb2FkVVJMKHRoaXMuZGF0YS51cmwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29CYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZ29CYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnb0ZvcndhcmQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cuaGlzdG9yeS5mb3J3YXJkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5nb0ZvcndhcmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZURldlRvb2xzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZyYW1lLmlzRGV2VG9vbHNPcGVuZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5vcGVuRGV2VG9vbHMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuY2xvc2VEZXZUb29scygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCA/IHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmIDogdGhpcy5mcmFtZS5nZXRVUkwoKTtcclxuICAgIH1cclxufVxyXG4iLCAiZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogQ3VzdG9tRnJhbWVzU2V0dGluZ3MgPSB7XHJcbiAgICBmcmFtZXM6IFtdLFxyXG4gICAgcGFkZGluZzogNVxyXG59O1xyXG5leHBvcnQgY29uc3QgcHJlc2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tRnJhbWVTZXR0aW5ncz4gPSB7XHJcbiAgICBcIm9ic2lkaWFuXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJPYnNpZGlhbiBGb3J1bVwiLFxyXG4gICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwiZGV0ZXhpZnlcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2RldGV4aWZ5LmtpcmVsYWJzLm9yZy9jbGFzc2lmeS5odG1sXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiRGV0ZXhpZnlcIixcclxuICAgICAgICBpY29uOiBcInR5cGVcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogdHJ1ZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogLjk1LFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IGAvKiBoaWRlIGluZm8gY2x1dHRlciBhbmQgYWQgYmFubmVyICovXHJcbiNjbGFzc2lmeS0taW5mby1hcmVhLFxyXG4uYWRzYnlnb29nbGUge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudFxyXG59YFxyXG4gICAgfSxcclxuICAgIFwiY2FsZW5kYXJcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvdS8wL3IvZGF5XCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIENhbGVuZGFyXCIsXHJcbiAgICAgICAgaWNvbjogXCJjYWxlbmRhclwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgcmlnaHQtc2lkZSBtZW51LCBhbmQgc29tZSBidXR0b25zICovXHJcbmRpdi5kNk1jRixcclxuZGl2LnB3NmNCYixcclxuZGl2LmdiX1RkLmdiX1ZhLmdiX0lkLFxyXG5kaXYuS2s3bE1jLVFXUHhrZi1MZ2JzU2UtaGFBY2xmLFxyXG5kaXYuaDhBcWhiLFxyXG5kaXYuZ2JvRUFiLFxyXG5kaXYuZHdsdk5kIHtcclxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcImtlZXBcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2tlZXAuZ29vZ2xlLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBLZWVwXCIsXHJcbiAgICAgICAgaWNvbjogXCJmaWxlc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgbWVudSBiYXIgYW5kIHRoZSBcIktlZXBcIiB0ZXh0ICovXHJcbmh0bWwgPiBib2R5ID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6Zmlyc3QtY2hpbGQsXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gYTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcInRvZG9pc3RcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL3RvZG9pc3QuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVG9kb2lzdFwiLFxyXG4gICAgICAgIGljb246IFwibGlzdC1jaGVja3NcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIGhlbHAsIGhvbWUsIHNlYXJjaCwgYW5kIHByb2R1Y3Rpdml0eSBvdmVydmlldyBidXR0b25zLCBjcmVhdGUgZXh0cmEgc3BhY2UsIGFuZCBwcmV2ZW50IHRvYXN0IHBvcC11cCBmcm9tIGFjdGluZyB3ZWlyZCAqL1xyXG5bYXJpYS1sYWJlbD1cIkdvIHRvIEhvbWUgdmlld1wiXSwgI3F1aWNrX2ZpbmQsIFthcmlhLWxhYmVsPVwiUHJvZHVjdGl2aXR5XCJdLCBbYXJpYS1sYWJlbD1cIkhlbHAgJiBGZWVkYmFja1wiXSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4udmlld19jb250ZW50IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcbn1cclxuXHJcbi52aWV3X2hlYWRlciB7XHJcblx0cGFkZGluZy1sZWZ0OiAxNXB4O1xyXG5cdHBhZGRpbmctdG9wOiAxMHB4O1xyXG59XHJcblxyXG4udW5kb190b2FzdCB7XHJcblx0d2lkdGg6IDk1JTtcclxufWBcclxuICAgIH0sXHJcbiAgICBcIm5vdGlvblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vd3d3Lm5vdGlvbi5zby9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJOb3Rpb25cIixcclxuICAgICAgICBpY29uOiBcImJveFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwidHdpdHRlclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdHdpdHRlci5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUd2l0dGVyXCIsXHJcbiAgICAgICAgaWNvbjogXCJ0d2l0dGVyXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVzU2V0dGluZ3Mge1xyXG4gICAgZnJhbWVzOiBDdXN0b21GcmFtZVNldHRpbmdzW107XHJcbiAgICBwYWRkaW5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVTZXR0aW5ncyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBoaWRlT25Nb2JpbGU6IGJvb2xlYW47XHJcbiAgICBhZGRSaWJib25JY29uOiBib29sZWFuO1xyXG4gICAgb3BlbkluQ2VudGVyOiBib29sZWFuO1xyXG4gICAgem9vbUxldmVsOiBudW1iZXI7XHJcbiAgICBmb3JjZUlmcmFtZTogYm9vbGVhbjtcclxuICAgIGN1c3RvbUNzczogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbihzZXR0aW5nczogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzLmljb24gPyBgbHVjaWRlLSR7c2V0dGluZ3MuaWNvbn1gIDogXCJkb2N1bWVudHNcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldElkKHNldHRpbmdzOiBDdXN0b21GcmFtZVNldHRpbmdzKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3MuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgXCItXCIpO1xyXG59XHJcbiIsICJpbXBvcnQgeyBBcHAsIEJ1dHRvbkNvbXBvbmVudCwgRHJvcGRvd25Db21wb25lbnQsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgZGVmYXVsdFNldHRpbmdzLCBwcmVzZXRzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcclxuaW1wb3J0IEN1c3RvbUZyYW1lc1BsdWdpbiBmcm9tIFwiLi9tYWluXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRnJhbWVzU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG5cclxuICAgIHBsdWdpbjogQ3VzdG9tRnJhbWVzUGx1Z2luO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IEN1c3RvbUZyYW1lc1BsdWdpbikge1xyXG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuICAgIH1cclxuXHJcbiAgICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIkN1c3RvbSBGcmFtZXMgU2V0dGluZ3NcIiB9KTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiUGxlYXNlIG5vdGUgdGhhdCBPYnNpZGlhbiBoYXMgdG8gYmUgcmVzdGFydGVkIG9yIHJlbG9hZGVkIGZvciBtb3N0IG9mIHRoZXNlIHNldHRpbmdzIHRvIHRha2UgZWZmZWN0LlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoXCJGcmFtZSBQYWRkaW5nXCIpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIHBhZGRpbmcgdGhhdCBzaG91bGQgYmUgbGVmdCBhcm91bmQgdGhlIGluc2lkZSBvZiBjdXN0b20gZnJhbWUgcGFuZXMsIGluIHBpeGVscy5cIilcclxuICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0LmlucHV0RWwudHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICB0LnNldFZhbHVlKFN0cmluZyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYWRkaW5nKSk7XHJcbiAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnBhZGRpbmcgPSB2Lmxlbmd0aCA/IE51bWJlcih2KSA6IGRlZmF1bHRTZXR0aW5ncy5wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMpIHtcclxuICAgICAgICAgICAgbGV0IGhlYWRpbmcgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDNcIiwgeyB0ZXh0OiBmcmFtZS5kaXNwbGF5TmFtZSB8fCBcIlVubmFtZWQgRnJhbWVcIiB9KTtcclxuICAgICAgICAgICAgbGV0IHRvZ2dsZSA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiU2hvdyBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1zaG93XCIpXHJcbiAgICAgICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudC5oaWRkZW4gPSAhY29udGVudC5oaWRkZW47XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnNldEJ1dHRvblRleHQoY29udGVudC5oaWRkZW4gPyBcIlNob3cgU2V0dGluZ3NcIiA6IFwiSGlkZSBTZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuaGlkZGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc3BsYXkgTmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgZGlzcGxheSBuYW1lIHRoYXQgdGhpcyBmcmFtZSBzaG91bGQgaGF2ZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuZGlzcGxheU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmRpc3BsYXlOYW1lID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZy5zZXRUZXh0KGZyYW1lLmRpc3BsYXlOYW1lIHx8IFwiVW5uYW1lZCBGcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiSWNvblwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJUaGUgaWNvbiB0aGF0IHRoaXMgZnJhbWUncyBwYW5lIHNob3VsZCBoYXZlLiBUaGUgbmFtZXMgb2YgYW55IFwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJhXCIsIHsgdGV4dDogXCJMdWNpZGUgaWNvbnNcIiwgaHJlZjogXCJodHRwczovL2x1Y2lkZS5kZXYvXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCIgY2FuIGJlIHVzZWQuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlVSTFwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgVVJMIHRoYXQgc2hvdWxkIGJlIG9wZW5lZCBpbiB0aGlzIGZyYW1lLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnVybCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc2FibGUgb24gTW9iaWxlXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIkN1c3RvbSBGcmFtZXMgaXMgYSBsb3QgbW9yZSByZXN0cmljdGVkIG9uIG1vYmlsZSBkZXZpY2VzIGFuZCBkb2Vzbid0IGFsbG93IGZvciB0aGUgc2FtZSB0eXBlcyBvZiBjb250ZW50IHRvIGJlIGRpc3BsYXllZC4gSWYgYSBmcmFtZSBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQgb24gbW9iaWxlLCBpdCBjYW4gYmUgZGlzYWJsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaGlkZU9uTW9iaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oaWRlT25Nb2JpbGUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJBZGQgUmliYm9uIEljb25cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBhIGJ1dHRvbiB0byBvcGVuIHRoaXMgZnJhbWUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByaWJib24uXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuYWRkUmliYm9uSWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuYWRkUmliYm9uSWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIk9wZW4gaW4gQ2VudGVyXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgdGhpcyBmcmFtZSBzaG91bGQgYmUgb3BlbmVkIGluIHRoZSB1bnBpbm5lZCBjZW50ZXIgZWRpdG9yIHJhdGhlciB0aGFuIG9uZSBvZiB0aGUgcGFuZXMgb24gdGhlIHNpZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBzaXRlcyB0aGF0IGRvbid0IHdvcmsgd2VsbCBpbiBhIG5hcnJvdyB2aWV3LCBvciBzaXRlcyB0aGF0IGRvbid0IHJlcXVpcmUgYSBub3RlIHRvIGJlIG9wZW4gd2hlbiB2aWV3ZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUub3BlbkluQ2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5vcGVuSW5DZW50ZXIgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJGb3JjZSBpZnJhbWVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiV2hldGhlciB0aGlzIGZyYW1lIHNob3VsZCB1c2UgaWZyYW1lcyBvbiBkZXNrdG9wIGFzIG9wcG9zZWQgdG8gRWxlY3Ryb24gd2Vidmlld3MuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImJyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJlbVwiLCB7IHRleHQ6IFwiT25seSBlbmFibGUgdGhpcyBzZXR0aW5nIGlmIHRoZSBmcmFtZSBpcyBjYXVzaW5nIGlzc3VlcyBvciBmcmVxdWVudCBjcmFzaGVzLiBUaGlzIHNldHRpbmcgY2F1c2VzIGFsbCBEZXNrdG9wLW9ubHkgc2V0dGluZ3MgdG8gYmUgaWdub3JlZC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmZvcmNlSWZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5mb3JjZUlmcmFtZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlBhZ2UgWm9vbVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgem9vbSB0aGF0IHRoaXMgZnJhbWUncyBwYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQgd2l0aCwgYXMgYSBwZXJjZW50YWdlLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLnR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoU3RyaW5nKGZyYW1lLnpvb21MZXZlbCAqIDEwMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnpvb21MZXZlbCA9IHYubGVuZ3RoID8gTnVtYmVyKHYpIC8gMTAwIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiQWRkaXRpb25hbCBDU1NcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQSBzbmlwcGV0IG9mIGFkZGl0aW9uYWwgQ1NTIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyBmcmFtZS5cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImVtXCIsIHsgdGV4dDogXCJOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGFwcGxpZWQgb24gRGVza3RvcC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHRBcmVhKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC5yb3dzID0gNTtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwuY29scyA9IDUwO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuY3VzdG9tQ3NzKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5jdXN0b21Dc3MgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIlJlbW92ZSBGcmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5yZW1vdmUoZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIkNyZWF0ZSBhIG5ldyBmcmFtZSwgZWl0aGVyIGZyb20gYSBwcmVzZXQgc2hpcHBlZCB3aXRoIHRoZSBwbHVnaW4sIG9yIGEgY3VzdG9tIG9uZSB0aGF0IHlvdSBjYW4gZWRpdCB5b3Vyc2VsZi4gRWFjaCBmcmFtZSdzIHBhbmUgY2FuIGJlIG9wZW5lZCB1c2luZyB0aGUgXFxcIkN1c3RvbSBGcmFtZXM6IE9wZW5cXFwiIGNvbW1hbmQuXCIgfSk7XHJcblxyXG4gICAgICAgIGxldCBhZGREaXYgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZURpdigpO1xyXG4gICAgICAgIGxldCBkcm9wZG93biA9IG5ldyBEcm9wZG93bkNvbXBvbmVudChhZGREaXYpO1xyXG4gICAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbihcIm5ld1wiLCBcIkN1c3RvbVwiKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMocHJlc2V0cykpXHJcbiAgICAgICAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbihrZXksIHByZXNldHNba2V5XS5kaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChhZGREaXYpXHJcbiAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiQWRkIEZyYW1lXCIpXHJcbiAgICAgICAgICAgIC5zZXRDbGFzcyhcImN1c3RvbS1mcmFtZXMtYWRkXCIpXHJcbiAgICAgICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBkcm9wZG93bi5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PSBcIm5ld1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIk5ldyBGcmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ3NzOiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5wdXNoKHByZXNldHNbb3B0aW9uXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImhyXCIpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJJZiB5b3UgbGlrZSB0aGlzIHBsdWdpbiBhbmQgd2FudCB0byBzdXBwb3J0IGl0cyBkZXZlbG9wbWVudCwgeW91IGNhbiBkbyBzbyB0aHJvdWdoIG15IHdlYnNpdGUgYnkgY2xpY2tpbmcgdGhpcyBmYW5jeSBpbWFnZSFcIiB9KTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiYVwiLCB7IGhyZWY6IFwiaHR0cHM6Ly9lbGxwZWNrLmRlL3N1cHBvcnRcIiB9KVxyXG4gICAgICAgICAgICAuY3JlYXRlRWwoXCJpbWdcIiwgeyBhdHRyOiB7IHNyYzogXCJodHRwczovL2VsbHBlY2suZGUvcmVzL2dlbmVyYWxzdXBwb3J0LnBuZ1wiIH0sIGNsczogXCJjdXN0b20tZnJhbWVzLXN1cHBvcnRcIiB9KTtcclxuICAgIH1cclxufVxyXG4iLCAiaW1wb3J0IHsgSXRlbVZpZXcsIFdvcmtzcGFjZUxlYWYsIE1lbnUgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWUgfSBmcm9tIFwiLi9mcmFtZVwiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZVNldHRpbmdzLCBDdXN0b21GcmFtZXNTZXR0aW5ncywgZ2V0SWNvbiB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRnJhbWVWaWV3IGV4dGVuZHMgSXRlbVZpZXcge1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGFjdGlvbnM6IEFjdGlvbltdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogXCJSZXR1cm4gdG8gb3JpZ2luYWwgcGFnZVwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImhvbWVcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUucmV0dXJuKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiT3BlbiBkZXYgdG9vbHNcIixcclxuICAgICAgICAgICAgaWNvbjogXCJiaW5hcnlcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUudG9nZ2xlRGV2VG9vbHMoKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJDb3B5IGxpbmtcIixcclxuICAgICAgICAgICAgaWNvbjogXCJsaW5rXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh2LmZyYW1lLmdldEN1cnJlbnRVcmwoKSlcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiT3BlbiBpbiBicm93c2VyXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiZ2xvYmVcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IG9wZW4odi5mcmFtZS5nZXRDdXJyZW50VXJsKCkpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlJlZnJlc2hcIixcclxuICAgICAgICAgICAgaWNvbjogXCJyZWZyZXNoLWN3XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnJlZnJlc2goKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJHbyBiYWNrXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYXJyb3ctbGVmdFwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5nb0JhY2soKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJHbyBmb3J3YXJkXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYXJyb3ctcmlnaHRcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUuZ29Gb3J3YXJkKClcclxuICAgICAgICB9XHJcbiAgICBdO1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBmcmFtZTogQ3VzdG9tRnJhbWU7XHJcblxyXG4gICAgY29uc3RydWN0b3IobGVhZjogV29ya3NwYWNlTGVhZiwgc2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzLCBkYXRhOiBDdXN0b21GcmFtZVNldHRpbmdzLCBuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBzdXBlcihsZWFmKTtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgdGhpcy5mcmFtZSA9IG5ldyBDdXN0b21GcmFtZShzZXR0aW5ncywgZGF0YSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBDdXN0b21GcmFtZVZpZXcuYWN0aW9ucylcclxuICAgICAgICAgICAgdGhpcy5hZGRBY3Rpb24oYWN0aW9uLmljb24sIGFjdGlvbi5uYW1lLCAoKSA9PiBhY3Rpb24uYWN0aW9uKHRoaXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBvbmxvYWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuZW1wdHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRFbC5hZGRDbGFzcyhcImN1c3RvbS1mcmFtZXMtdmlld1wiKTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRFbC5hcHBlbmRDaGlsZCh0aGlzLmZyYW1lLmNyZWF0ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkhlYWRlck1lbnUobWVudTogTWVudSk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm9uSGVhZGVyTWVudShtZW51KTtcclxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgQ3VzdG9tRnJhbWVWaWV3LmFjdGlvbnMpIHtcclxuICAgICAgICAgICAgbWVudS5hZGRJdGVtKGkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaS5zZXRUaXRsZShhY3Rpb24ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpLnNldEljb24oYWN0aW9uLmljb24pO1xyXG4gICAgICAgICAgICAgICAgaS5vbkNsaWNrKCgpID0+IGFjdGlvbi5hY3Rpb24odGhpcykpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Vmlld1R5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERpc3BsYXlUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kaXNwbGF5TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJY29uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGdldEljb24odGhpcy5kYXRhKTtcclxuICAgIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIEFjdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBhY3Rpb246ICh2aWV3OiBDdXN0b21GcmFtZVZpZXcpID0+IGFueTtcclxufSJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQSx1QkFBaUM7OztBQ0FqQyxzQkFBeUI7OztBQ0FsQixJQUFNLGtCQUF3QztBQUFBLEVBQ2pELFFBQVE7QUFBQSxFQUNSLFNBQVM7QUFBQTtBQUVOLElBQU0sVUFBK0M7QUFBQSxFQUN4RCxZQUFZO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsSUFDZixjQUFjO0FBQUEsSUFDZCxXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUE7QUFBQSxFQUVmLFlBQVk7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNZixZQUFZO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsSUFDZixjQUFjO0FBQUEsSUFDZCxXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVdmLFFBQVE7QUFBQSxJQUNKLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFB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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiwgZ2V0SWQgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZXNTZXR0aW5nVGFiIH0gZnJvbSBcIi4vc2V0dGluZ3MtdGFiXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lVmlldyB9IGZyb20gXCIuL3ZpZXdcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUZyYW1lc1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcblxyXG5cdHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuXHJcblx0YXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuXHJcblx0XHRmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnNldHRpbmdzLmZyYW1lcykge1xyXG5cdFx0XHRpZiAoIWZyYW1lLnVybCB8fCAhZnJhbWUuZGlzcGxheU5hbWUpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdGxldCBuYW1lID0gYGN1c3RvbS1mcmFtZXMtJHtnZXRJZChmcmFtZSl9YDtcclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGZyYW1lLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBTa2lwcGluZyBmcmFtZSAke25hbWV9IHdoaWNoIGlzIGhpZGRlbiBvbiBtb2JpbGVgKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBSZWdpc3RlcmluZyBmcmFtZSAke25hbWV9IGZvciBVUkwgJHtmcmFtZS51cmx9YCk7XHJcblxyXG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJWaWV3KG5hbWUsIGwgPT4gbmV3IEN1c3RvbUZyYW1lVmlldyhsLCB0aGlzLnNldHRpbmdzLCBmcmFtZSwgbmFtZSkpO1xyXG5cdFx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0XHRpZDogYG9wZW4tJHtuYW1lfWAsXHJcblx0XHRcdFx0XHRuYW1lOiBgT3BlbiAke2ZyYW1lLmRpc3BsYXlOYW1lfWAsXHJcblx0XHRcdFx0XHRjYWxsYmFjazogKCkgPT4gdGhpcy5vcGVuTGVhZihuYW1lLCBmcmFtZS5vcGVuSW5DZW50ZXIsIGZhbHNlKSxcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aWYgKGZyYW1lLmFkZFJpYmJvbkljb24pXHJcblx0XHRcdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oZ2V0SWNvbihmcmFtZSksIGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdFx0ZSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgUGxhdGZvcm0uaXNNYWNPUyA/IGUubWV0YUtleSA6IGUuY3RybEtleSkpO1xyXG5cdFx0XHR9IGNhdGNoIHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBDb3VsZG4ndCByZWdpc3RlciBmcmFtZSAke25hbWV9LCBpcyB0aGVyZSBhbHJlYWR5IG9uZSB3aXRoIHRoZSBzYW1lIG5hbWU/YCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcblx0XHR0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXCJjdXN0b20tZnJhbWVzXCIsIChzLCBlKSA9PiB7XHJcblx0XHRcdGUuZW1wdHkoKTtcclxuXHRcdFx0ZS5hZGRDbGFzcyhcImN1c3RvbS1mcmFtZXMtdmlldy1maWxlXCIpO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lTWF0Y2ggPSAvZnJhbWU6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCBmcmFtZU5hbWUgPSBmcmFtZU1hdGNoICYmIGZyYW1lTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRpZiAoIWZyYW1lTmFtZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQ291bGRuJ3QgcGFyc2UgZnJhbWUgbmFtZVwiIH0pO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgZGF0YSA9IHRoaXMuc2V0dGluZ3MuZnJhbWVzLmZpbmQoZiA9PiBmLmRpc3BsYXlOYW1lID09IGZyYW1lTmFtZSk7XHJcblx0XHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGBDb3VsZG4ndCBmaW5kIGEgZnJhbWUgd2l0aCBuYW1lICR7ZnJhbWVOYW1lfWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChQbGF0Zm9ybS5pc01vYmlsZUFwcCAmJiBkYXRhLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGAke2ZyYW1lTmFtZX0gaXMgaGlkZGVuIG9uIG1vYmlsZWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsZXQgc3R5bGVNYXRjaCA9IC9zdHlsZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHN0eWxlID0gc3R5bGVNYXRjaCAmJiBzdHlsZU1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0c3R5bGUgfHw9IFwiaGVpZ2h0OiA2MDBweDtcIjtcclxuXHJcblx0XHRcdGxldCB1cmxTdWZmaXhNYXRjaCA9IC91cmxzdWZmaXg6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCB1cmxTdWZmaXggPSB1cmxTdWZmaXhNYXRjaCAmJiB1cmxTdWZmaXhNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdHVybFN1ZmZpeCB8fD0gXCJcIjtcclxuXHJcblx0XHRcdGxldCBmcmFtZSA9IG5ldyBDdXN0b21GcmFtZSh0aGlzLnNldHRpbmdzLCBkYXRhKTtcclxuXHRcdFx0ZS5hcHBlbmRDaGlsZChmcmFtZS5jcmVhdGUoc3R5bGUsIHVybFN1ZmZpeCkpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgb3BlbkxlYWYobmFtZTogc3RyaW5nLCBjZW50ZXI6IGJvb2xlYW4sIHNwbGl0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRpZiAoY2VudGVyKSB7XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5kZXRhY2hMZWF2ZXNPZlR5cGUobmFtZSk7XHJcblx0XHRcdGxldCBsZWFmID0gdGhpcy5hcHAud29ya3NwYWNlLmdldExlYWYoc3BsaXQpO1xyXG5cdFx0XHRhd2FpdCBsZWFmLnNldFZpZXdTdGF0ZSh7IHR5cGU6IG5hbWUsIGFjdGl2ZTogdHJ1ZSB9KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICghdGhpcy5hcHAud29ya3NwYWNlLmdldExlYXZlc09mVHlwZShuYW1lKS5sZW5ndGgpXHJcblx0XHRcdFx0YXdhaXQgdGhpcy5hcHAud29ya3NwYWNlLmdldFJpZ2h0TGVhZihmYWxzZSkuc2V0Vmlld1N0YXRlKHsgdHlwZTogbmFtZSwgYWN0aXZlOiB0cnVlIH0pO1xyXG5cdFx0XHR0aGlzLmFwcC53b3Jrc3BhY2UucmV2ZWFsTGVhZih0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKG5hbWUpWzBdKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwgImltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lU2V0dGluZ3MsIEN1c3RvbUZyYW1lc1NldHRpbmdzLCBnZXRJZCB9IGZyb20gXCIuL3NldHRpbmdzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRnJhbWUge1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRhOiBDdXN0b21GcmFtZVNldHRpbmdzO1xyXG4gICAgcHJpdmF0ZSBmcmFtZTogSFRNTElGcmFtZUVsZW1lbnQgfCBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzLCBkYXRhOiBDdXN0b21GcmFtZVNldHRpbmdzKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZShhZGRpdGlvbmFsU3R5bGU6IHN0cmluZyA9IHVuZGVmaW5lZCwgdXJsU3VmZml4OiBzdHJpbmcgPSB1bmRlZmluZWQpOiBhbnkge1xyXG4gICAgICAgIGxldCBzdHlsZSA9IGBwYWRkaW5nOiAke3RoaXMuc2V0dGluZ3MucGFkZGluZ31weDtgO1xyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsU3R5bGUpXHJcbiAgICAgICAgICAgIHN0eWxlICs9IGFkZGl0aW9uYWxTdHlsZTtcclxuICAgICAgICBpZiAoUGxhdGZvcm0uaXNEZXNrdG9wQXBwICYmICF0aGlzLmRhdGEuZm9yY2VJZnJhbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ3ZWJ2aWV3XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcImFsbG93cG9wdXBzXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRab29tRmFjdG9yKHRoaXMuZGF0YS56b29tTGV2ZWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5pbnNlcnRDU1ModGhpcy5kYXRhLmN1c3RvbUNzcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInNhbmRib3hcIiwgXCJhbGxvdy1mb3JtcyBhbGxvdy1tb2RhbHMgYWxsb3ctcG9wdXBzIGFsbG93LXByZXNlbnRhdGlvbiBhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIGFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvblwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJhbGxvd1wiLCBcImVuY3J5cHRlZC1tZWRpYTsgZnVsbHNjcmVlbjsgb3ZlcnNpemVkLWltYWdlczsgcGljdHVyZS1pbi1waWN0dXJlOyBzeW5jLXhocjsgZ2VvbG9jYXRpb247XCIpO1xyXG4gICAgICAgICAgICBzdHlsZSArPSBgdHJhbnNmb3JtOiBzY2FsZSgke3RoaXMuZGF0YS56b29tTGV2ZWx9KTsgdHJhbnNmb3JtLW9yaWdpbjogMCAwO2A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJhbWUuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLWZyYW1lXCIpO1xyXG4gICAgICAgIHRoaXMuZnJhbWUuYWRkQ2xhc3MoYGN1c3RvbS1mcmFtZXMtJHtnZXRJZCh0aGlzLmRhdGEpfWApO1xyXG4gICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgc3R5bGUpO1xyXG5cclxuICAgICAgICBsZXQgc3JjID0gdGhpcy5kYXRhLnVybDtcclxuICAgICAgICBpZiAodXJsU3VmZml4KSB7XHJcbiAgICAgICAgICAgIGlmICghdXJsU3VmZml4LnN0YXJ0c1dpdGgoXCIvXCIpKVxyXG4gICAgICAgICAgICAgICAgc3JjICs9IFwiL1wiO1xyXG4gICAgICAgICAgICBzcmMgKz0gdXJsU3VmZml4O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInNyY1wiLCBzcmMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5mcmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnJlbG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmV0dXJuKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lm9wZW4odGhpcy5kYXRhLnVybCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5sb2FkVVJMKHRoaXMuZGF0YS51cmwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ29CYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZ29CYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnb0ZvcndhcmQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cuaGlzdG9yeS5mb3J3YXJkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5nb0ZvcndhcmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRvZ2dsZURldlRvb2xzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmZyYW1lLmlzRGV2VG9vbHNPcGVuZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5vcGVuRGV2VG9vbHMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUuY2xvc2VEZXZUb29scygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDdXJyZW50VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCA/IHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmIDogdGhpcy5mcmFtZS5nZXRVUkwoKTtcclxuICAgIH1cclxufVxyXG4iLCAiZXhwb3J0IGNvbnN0IGRlZmF1bHRTZXR0aW5nczogQ3VzdG9tRnJhbWVzU2V0dGluZ3MgPSB7XHJcbiAgICBmcmFtZXM6IFtdLFxyXG4gICAgcGFkZGluZzogNVxyXG59O1xyXG5leHBvcnQgY29uc3QgcHJlc2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tRnJhbWVTZXR0aW5ncz4gPSB7XHJcbiAgICBcIm9ic2lkaWFuXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJPYnNpZGlhbiBGb3J1bVwiLFxyXG4gICAgICAgIGljb246IFwiZWRpdFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwiZGV0ZXhpZnlcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2RldGV4aWZ5LmtpcmVsYWJzLm9yZy9jbGFzc2lmeS5odG1sXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiRGV0ZXhpZnlcIixcclxuICAgICAgICBpY29uOiBcInR5cGVcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogdHJ1ZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogLjk1LFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IGAvKiBoaWRlIGluZm8gY2x1dHRlciBhbmQgYWQgYmFubmVyICovXHJcbiNjbGFzc2lmeS0taW5mby1hcmVhLFxyXG4uYWRzYnlnb29nbGUge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudFxyXG59YFxyXG4gICAgfSxcclxuICAgIFwiY2FsZW5kYXJcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2NhbGVuZGFyLmdvb2dsZS5jb20vY2FsZW5kYXIvdS8wL3IvZGF5XCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIENhbGVuZGFyXCIsXHJcbiAgICAgICAgaWNvbjogXCJjYWxlbmRhclwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgcmlnaHQtc2lkZSBtZW51LCBhbmQgc29tZSBidXR0b25zICovXHJcbmRpdi5kNk1jRixcclxuZGl2LnB3NmNCYixcclxuZGl2LmdiX1RkLmdiX1ZhLmdiX0lkLFxyXG5kaXYuS2s3bE1jLVFXUHhrZi1MZ2JzU2UtaGFBY2xmLFxyXG5kaXYuaDhBcWhiLFxyXG5kaXYuZ2JvRUFiLFxyXG5kaXYuZHdsdk5kIHtcclxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcImtlZXBcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2tlZXAuZ29vZ2xlLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBLZWVwXCIsXHJcbiAgICAgICAgaWNvbjogXCJmaWxlc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgbWVudSBiYXIgYW5kIHRoZSBcIktlZXBcIiB0ZXh0ICovXHJcbmh0bWwgPiBib2R5ID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6Zmlyc3QtY2hpbGQsXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gYTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcInRvZG9pc3RcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL3RvZG9pc3QuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVG9kb2lzdFwiLFxyXG4gICAgICAgIGljb246IFwibGlzdC1jaGVja3NcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIGhlbHAsIGhvbWUsIHNlYXJjaCwgYW5kIHByb2R1Y3Rpdml0eSBvdmVydmlldyBidXR0b25zLCBjcmVhdGUgZXh0cmEgc3BhY2UsIGFuZCBwcmV2ZW50IHRvYXN0IHBvcC11cCBmcm9tIGFjdGluZyB3ZWlyZCAqL1xyXG5bYXJpYS1sYWJlbD1cIkdvIHRvIEhvbWUgdmlld1wiXSwgI3F1aWNrX2ZpbmQsIFthcmlhLWxhYmVsPVwiUHJvZHVjdGl2aXR5XCJdLCBbYXJpYS1sYWJlbD1cIkhlbHAgJiBGZWVkYmFja1wiXSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4udmlld19jb250ZW50IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcbn1cclxuXHJcbi52aWV3X2hlYWRlciB7XHJcblx0cGFkZGluZy1sZWZ0OiAxNXB4O1xyXG5cdHBhZGRpbmctdG9wOiAxMHB4O1xyXG59XHJcblxyXG4udW5kb190b2FzdCB7XHJcblx0d2lkdGg6IDk1JTtcclxufWBcclxuICAgIH0sXHJcbiAgICBcIm5vdGlvblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vd3d3Lm5vdGlvbi5zby9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJOb3Rpb25cIixcclxuICAgICAgICBpY29uOiBcImJveFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwidHdpdHRlclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdHdpdHRlci5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUd2l0dGVyXCIsXHJcbiAgICAgICAgaWNvbjogXCJ0d2l0dGVyXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVzU2V0dGluZ3Mge1xyXG4gICAgZnJhbWVzOiBDdXN0b21GcmFtZVNldHRpbmdzW107XHJcbiAgICBwYWRkaW5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVTZXR0aW5ncyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBoaWRlT25Nb2JpbGU6IGJvb2xlYW47XHJcbiAgICBhZGRSaWJib25JY29uOiBib29sZWFuO1xyXG4gICAgb3BlbkluQ2VudGVyOiBib29sZWFuO1xyXG4gICAgem9vbUxldmVsOiBudW1iZXI7XHJcbiAgICBmb3JjZUlmcmFtZTogYm9vbGVhbjtcclxuICAgIGN1c3RvbUNzczogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbihzZXR0aW5nczogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzLmljb24gPyBgbHVjaWRlLSR7c2V0dGluZ3MuaWNvbn1gIDogXCJkb2N1bWVudHNcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldElkKHNldHRpbmdzOiBDdXN0b21GcmFtZVNldHRpbmdzKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3MuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgXCItXCIpO1xyXG59XHJcbiIsICJpbXBvcnQgeyBBcHAsIEJ1dHRvbkNvbXBvbmVudCwgRHJvcGRvd25Db21wb25lbnQsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgZGVmYXVsdFNldHRpbmdzLCBwcmVzZXRzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcclxuaW1wb3J0IEN1c3RvbUZyYW1lc1BsdWdpbiBmcm9tIFwiLi9tYWluXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRnJhbWVzU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG5cclxuICAgIHBsdWdpbjogQ3VzdG9tRnJhbWVzUGx1Z2luO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IEN1c3RvbUZyYW1lc1BsdWdpbikge1xyXG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuICAgIH1cclxuXHJcbiAgICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIkN1c3RvbSBGcmFtZXMgU2V0dGluZ3NcIiB9KTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiUGxlYXNlIG5vdGUgdGhhdCBPYnNpZGlhbiBoYXMgdG8gYmUgcmVzdGFydGVkIG9yIHJlbG9hZGVkIGZvciBtb3N0IG9mIHRoZXNlIHNldHRpbmdzIHRvIHRha2UgZWZmZWN0LlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoXCJGcmFtZSBQYWRkaW5nXCIpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIHBhZGRpbmcgdGhhdCBzaG91bGQgYmUgbGVmdCBhcm91bmQgdGhlIGluc2lkZSBvZiBjdXN0b20gZnJhbWUgcGFuZXMsIGluIHBpeGVscy5cIilcclxuICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0LmlucHV0RWwudHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICB0LnNldFZhbHVlKFN0cmluZyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYWRkaW5nKSk7XHJcbiAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnBhZGRpbmcgPSB2Lmxlbmd0aCA/IE51bWJlcih2KSA6IGRlZmF1bHRTZXR0aW5ncy5wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMpIHtcclxuICAgICAgICAgICAgbGV0IGhlYWRpbmcgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDNcIiwgeyB0ZXh0OiBmcmFtZS5kaXNwbGF5TmFtZSB8fCBcIlVubmFtZWQgRnJhbWVcIiB9KTtcclxuICAgICAgICAgICAgbGV0IHRvZ2dsZSA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiU2hvdyBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1zaG93XCIpXHJcbiAgICAgICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudC5oaWRkZW4gPSAhY29udGVudC5oaWRkZW47XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnNldEJ1dHRvblRleHQoY29udGVudC5oaWRkZW4gPyBcIlNob3cgU2V0dGluZ3NcIiA6IFwiSGlkZSBTZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuaGlkZGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc3BsYXkgTmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgZGlzcGxheSBuYW1lIHRoYXQgdGhpcyBmcmFtZSBzaG91bGQgaGF2ZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuZGlzcGxheU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmRpc3BsYXlOYW1lID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZy5zZXRUZXh0KGZyYW1lLmRpc3BsYXlOYW1lIHx8IFwiVW5uYW1lZCBGcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiSWNvblwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJUaGUgaWNvbiB0aGF0IHRoaXMgZnJhbWUncyBwYW5lIHNob3VsZCBoYXZlLiBUaGUgbmFtZXMgb2YgYW55IFwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJhXCIsIHsgdGV4dDogXCJMdWNpZGUgaWNvbnNcIiwgaHJlZjogXCJodHRwczovL2x1Y2lkZS5kZXYvXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCIgY2FuIGJlIHVzZWQuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlVSTFwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgVVJMIHRoYXQgc2hvdWxkIGJlIG9wZW5lZCBpbiB0aGlzIGZyYW1lLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnVybCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc2FibGUgb24gTW9iaWxlXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIkN1c3RvbSBGcmFtZXMgaXMgYSBsb3QgbW9yZSByZXN0cmljdGVkIG9uIG1vYmlsZSBkZXZpY2VzIGFuZCBkb2Vzbid0IGFsbG93IGZvciB0aGUgc2FtZSB0eXBlcyBvZiBjb250ZW50IHRvIGJlIGRpc3BsYXllZC4gSWYgYSBmcmFtZSBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQgb24gbW9iaWxlLCBpdCBjYW4gYmUgZGlzYWJsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaGlkZU9uTW9iaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oaWRlT25Nb2JpbGUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJBZGQgUmliYm9uIEljb25cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBhIGJ1dHRvbiB0byBvcGVuIHRoaXMgZnJhbWUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByaWJib24uXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuYWRkUmliYm9uSWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuYWRkUmliYm9uSWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIk9wZW4gaW4gQ2VudGVyXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgdGhpcyBmcmFtZSBzaG91bGQgYmUgb3BlbmVkIGluIHRoZSB1bnBpbm5lZCBjZW50ZXIgZWRpdG9yIHJhdGhlciB0aGFuIG9uZSBvZiB0aGUgcGFuZXMgb24gdGhlIHNpZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBzaXRlcyB0aGF0IGRvbid0IHdvcmsgd2VsbCBpbiBhIG5hcnJvdyB2aWV3LCBvciBzaXRlcyB0aGF0IGRvbid0IHJlcXVpcmUgYSBub3RlIHRvIGJlIG9wZW4gd2hlbiB2aWV3ZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUub3BlbkluQ2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5vcGVuSW5DZW50ZXIgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJGb3JjZSBpZnJhbWVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiV2hldGhlciB0aGlzIGZyYW1lIHNob3VsZCB1c2UgaWZyYW1lcyBvbiBkZXNrdG9wIGFzIG9wcG9zZWQgdG8gRWxlY3Ryb24gd2Vidmlld3MuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImJyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJlbVwiLCB7IHRleHQ6IFwiT25seSBlbmFibGUgdGhpcyBzZXR0aW5nIGlmIHRoZSBmcmFtZSBpcyBjYXVzaW5nIGlzc3VlcyBvciBmcmVxdWVudCBjcmFzaGVzLiBUaGlzIHNldHRpbmcgY2F1c2VzIGFsbCBEZXNrdG9wLW9ubHkgc2V0dGluZ3MgdG8gYmUgaWdub3JlZC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmZvcmNlSWZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5mb3JjZUlmcmFtZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlBhZ2UgWm9vbVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgem9vbSB0aGF0IHRoaXMgZnJhbWUncyBwYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQgd2l0aCwgYXMgYSBwZXJjZW50YWdlLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLnR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoU3RyaW5nKGZyYW1lLnpvb21MZXZlbCAqIDEwMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnpvb21MZXZlbCA9IHYubGVuZ3RoID8gTnVtYmVyKHYpIC8gMTAwIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiQWRkaXRpb25hbCBDU1NcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQSBzbmlwcGV0IG9mIGFkZGl0aW9uYWwgQ1NTIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyBmcmFtZS5cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImVtXCIsIHsgdGV4dDogXCJOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGFwcGxpZWQgb24gRGVza3RvcC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHRBcmVhKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC5yb3dzID0gNTtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwuY29scyA9IDUwO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuY3VzdG9tQ3NzKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5jdXN0b21Dc3MgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIlJlbW92ZSBGcmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5yZW1vdmUoZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIkNyZWF0ZSBhIG5ldyBmcmFtZSwgZWl0aGVyIGZyb20gYSBwcmVzZXQgc2hpcHBlZCB3aXRoIHRoZSBwbHVnaW4sIG9yIGEgY3VzdG9tIG9uZSB0aGF0IHlvdSBjYW4gZWRpdCB5b3Vyc2VsZi4gRWFjaCBmcmFtZSdzIHBhbmUgY2FuIGJlIG9wZW5lZCB1c2luZyB0aGUgXFxcIkN1c3RvbSBGcmFtZXM6IE9wZW5cXFwiIGNvbW1hbmQuXCIgfSk7XHJcblxyXG4gICAgICAgIGxldCBhZGREaXYgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZURpdigpO1xyXG4gICAgICAgIGxldCBkcm9wZG93biA9IG5ldyBEcm9wZG93bkNvbXBvbmVudChhZGREaXYpO1xyXG4gICAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbihcIm5ld1wiLCBcIkN1c3RvbVwiKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMocHJlc2V0cykpXHJcbiAgICAgICAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbihrZXksIHByZXNldHNba2V5XS5kaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChhZGREaXYpXHJcbiAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiQWRkIEZyYW1lXCIpXHJcbiAgICAgICAgICAgIC5zZXRDbGFzcyhcImN1c3RvbS1mcmFtZXMtYWRkXCIpXHJcbiAgICAgICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBkcm9wZG93bi5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PSBcIm5ld1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIk5ldyBGcmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ3NzOiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5wdXNoKHByZXNldHNbb3B0aW9uXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFyIGRpc2NsYWltZXIgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IGNsczogXCJtb2Qtd2FybmluZ1wiIH0pO1xyXG4gICAgICAgIGRpc2NsYWltZXIuY3JlYXRlU3Bhbih7IHRleHQ6IFwiUGxlYXNlIGJlIGFkdmlzZWQgdGhhdCwgd2hlbiBhZGRpbmcgYSBzaXRlIGFzIGEgY3VzdG9tIGZyYW1lLCB5b3UgcG90ZW50aWFsbHkgZXhwb3NlIHBlcnNvbmFsIGluZm9ybWF0aW9uIHlvdSBlbnRlciB0byBvdGhlciBwbHVnaW5zIHlvdSBoYXZlIGluc3RhbGxlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBcIiB9KTtcclxuICAgICAgICBkaXNjbGFpbWVyLmNyZWF0ZUVsKFwiYVwiLCB7IHRleHQ6IFwidGhpcyBkaXNjdXNzaW9uXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0VsbHBlY2svT2JzaWRpYW5DdXN0b21GcmFtZXMvaXNzdWVzLzU0I2lzc3VlY29tbWVudC0xMjEwODc5Njg1XCIsIGNsczogXCJtb2Qtd2FybmluZ1wiIH0pO1xyXG4gICAgICAgIGRpc2NsYWltZXIuY3JlYXRlU3Bhbih7IHRleHQ6IFwiLlwiIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIklmIHlvdSBsaWtlIHRoaXMgcGx1Z2luIGFuZCB3YW50IHRvIHN1cHBvcnQgaXRzIGRldmVsb3BtZW50LCB5b3UgY2FuIGRvIHNvIHRocm91Z2ggbXkgd2Vic2l0ZSBieSBjbGlja2luZyB0aGlzIGZhbmN5IGltYWdlIVwiIH0pO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJhXCIsIHsgaHJlZjogXCJodHRwczovL2VsbHBlY2suZGUvc3VwcG9ydFwiIH0pXHJcbiAgICAgICAgICAgIC5jcmVhdGVFbChcImltZ1wiLCB7IGF0dHI6IHsgc3JjOiBcImh0dHBzOi8vZWxscGVjay5kZS9yZXMvZ2VuZXJhbHN1cHBvcnQucG5nXCIgfSwgY2xzOiBcImN1c3RvbS1mcmFtZXMtc3VwcG9ydFwiIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsICJpbXBvcnQgeyBJdGVtVmlldywgV29ya3NwYWNlTGVhZiwgTWVudSB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZSB9IGZyb20gXCIuL2ZyYW1lXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lU2V0dGluZ3MsIEN1c3RvbUZyYW1lc1NldHRpbmdzLCBnZXRJY29uIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21GcmFtZVZpZXcgZXh0ZW5kcyBJdGVtVmlldyB7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgYWN0aW9uczogQWN0aW9uW10gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlJldHVybiB0byBvcmlnaW5hbCBwYWdlXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiaG9tZVwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5yZXR1cm4oKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJPcGVuIGRldiB0b29sc1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImJpbmFyeVwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS50b2dnbGVEZXZUb29scygpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkNvcHkgbGlua1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImxpbmtcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHYuZnJhbWUuZ2V0Q3VycmVudFVybCgpKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJPcGVuIGluIGJyb3dzZXJcIixcclxuICAgICAgICAgICAgaWNvbjogXCJnbG9iZVwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gb3Blbih2LmZyYW1lLmdldEN1cnJlbnRVcmwoKSlcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiUmVmcmVzaFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcInJlZnJlc2gtY3dcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUucmVmcmVzaCgpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkdvIGJhY2tcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvdy1sZWZ0XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLmdvQmFjaygpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkdvIGZvcndhcmRcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvdy1yaWdodFwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5nb0ZvcndhcmQoKVxyXG4gICAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRhOiBDdXN0b21GcmFtZVNldHRpbmdzO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGZyYW1lOiBDdXN0b21GcmFtZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihsZWFmOiBXb3Jrc3BhY2VMZWFmLCBzZXR0aW5nczogQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRhdGE6IEN1c3RvbUZyYW1lU2V0dGluZ3MsIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKGxlYWYpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IEN1c3RvbUZyYW1lKHNldHRpbmdzLCBkYXRhKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIEN1c3RvbUZyYW1lVmlldy5hY3Rpb25zKVxyXG4gICAgICAgICAgICB0aGlzLmFkZEFjdGlvbihhY3Rpb24uaWNvbiwgYWN0aW9uLm5hbWUsICgpID0+IGFjdGlvbi5hY3Rpb24odGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIG9ubG9hZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRlbnRFbC5lbXB0eSgpO1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy12aWV3XCIpO1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmFwcGVuZENoaWxkKHRoaXMuZnJhbWUuY3JlYXRlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uSGVhZGVyTWVudShtZW51OiBNZW51KTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIub25IZWFkZXJNZW51KG1lbnUpO1xyXG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBDdXN0b21GcmFtZVZpZXcuYWN0aW9ucykge1xyXG4gICAgICAgICAgICBtZW51LmFkZEl0ZW0oaSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpLnNldFRpdGxlKGFjdGlvbi5uYW1lKTtcclxuICAgICAgICAgICAgICAgIGkuc2V0SWNvbihhY3Rpb24uaWNvbik7XHJcbiAgICAgICAgICAgICAgICBpLm9uQ2xpY2soKCkgPT4gYWN0aW9uLmFjdGlvbih0aGlzKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRWaWV3VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGlzcGxheVRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmRpc3BsYXlOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEljb24oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gZ2V0SWNvbih0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgQWN0aW9uIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGljb246IHN0cmluZztcclxuICAgIGFjdGlvbjogKHZpZXc6IEN1c3RvbUZyYW1lVmlldykgPT4gYW55O1xyXG59Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQUFpQzs7O0FDQWpDLHNCQUF5Qjs7O0FDQWxCLElBQU0sa0JBQXdDO0FBQUEsRUFDakQsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBO0FBRU4sSUFBTSxVQUErQztBQUFBLEVBQ3hELFlBQVk7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQTtBQUFBLEVBRWYsWUFBWTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1mLFlBQVk7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBV2YsUUFBUTtBQUFBLElBQ0osS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1mLFdBQVc7QUFBQSxJQUNQLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFrQmYs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