ccgf-game-tool 1.0.13 → 1.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.js CHANGED
@@ -318,6 +318,28 @@ function runNpm(action, specs) {
318
318
  *
319
319
  * 只接受 catalog 里存在的包名 —— 不把扩展变成"任意 npm 命令执行器"。
320
320
  */
321
+ /**
322
+ * 装一个**不属于公共模块**的包(框架、编辑器扩展自己)。
323
+ *
324
+ * 为什么不复用 runSharedAction:那条路的语义是"从公共模块列表里装一个",
325
+ * 会先在 catalog 里查名字 —— 而框架与扩展**本来就被排除在公共模块列表之外**
326
+ * (它们不该出现在使用者的公共模块页里),于是必然报"不在可安装列表里的包"。
327
+ * 两件事的合法包集合不同,就不该共用一个入口。
328
+ */
329
+ async function installProjectPackage(spec) {
330
+ var _a, _b;
331
+ if (!spec || typeof spec !== 'string')
332
+ throw new Error('缺少包名');
333
+ const root = projectPath();
334
+ const command = 'npm install ' + spec;
335
+ const spawnSpec = (0, shared_1.npmSpawnSpec)('install', [spec]);
336
+ const { result } = await runNpmAsync(command, spawnSpec, root, shared_1.NPM_TIMEOUT_MS);
337
+ return {
338
+ ok: result.ok,
339
+ message: result.ok ? null : ((_a = result.hint) !== null && _a !== void 0 ? _a : ('npm 退出码 ' + ((_b = result.exitCode) !== null && _b !== void 0 ? _b : '未知'))),
340
+ version: null,
341
+ };
342
+ }
321
343
  async function runSharedAction(action, packageName) {
322
344
  // 面板可能传字符串,也可能不小心包成数组 —— 两种都收,
323
345
  // 别让"少一个括号"变成用户看到的"缺少包名"。
@@ -391,6 +413,19 @@ function findAssetRefs(snap, cids) {
391
413
  }
392
414
  /* -------------------------------- 方法 -------------------------------- */
393
415
  exports.methods = {
416
+ /** 更新框架:直接按 spec 装,不进公共模块列表 */
417
+ async updateFrameworkPackage() {
418
+ return installProjectPackage('@ccgf/framework@latest');
419
+ },
420
+ /** 更新扩展:装到 node_modules 后**必须**落到 extensions/ —— 编辑器只认那里 */
421
+ async updateExtensionPackage() {
422
+ var _a, _b;
423
+ const r = await installProjectPackage('ccgf-game-tool@latest');
424
+ if (!r.ok)
425
+ return r;
426
+ const s = this.syncExtension('ccgf-game-tool');
427
+ return { ok: s.ok !== false, message: (_a = s.message) !== null && _a !== void 0 ? _a : null, version: (_b = s.version) !== null && _b !== void 0 ? _b : null };
428
+ },
394
429
  /**
395
430
  * 框架与扩展各自的版本信息(本地 + npm 最新)。
396
431
  *
@@ -869,4 +904,4 @@ function load() { }
869
904
  * @zh 卸载扩展时触发的方法
870
905
  */
871
906
  function unload() { }
872
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXcvQkEsb0JBQTBCO0FBTTFCLHdCQUE0QjtBQTkvQjVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQWlEO0FBQ2pELHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUtvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2Is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YWNrYWdlSlNPTiBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xyXG5pbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IGNvcHlTeW5jLCBleGlzdHNTeW5jLCByZWFkZGlyU3luYywgcmVhZEZpbGVTeW5jLCByZW1vdmVTeW5jLCBzdGF0U3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJztcclxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQge1xyXG4gICAgR0FNRVBMQVlfRElSLFxyXG4gICAgTEFZRVJTLFxyXG4gICAgTUFOQUdFUl9ESVIsXHJcbiAgICBQUkVGQUJfVEVNUExBVEVTLFxyXG4gICAgUFJFRkFCX1RFTVBMQVRFX0xBQkVMUyxcclxuICAgIFJFR0lTVFJZX0NBQ0hFX01TLFxyXG4gICAgUkVTT1VSQ0VTX0RJUixcclxuICAgIFRQcmVmYWJUZW1wbGF0ZSxcclxuICAgIFZJRVdTX1NVQkRJUixcclxufSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IGJ1aWxkT3JkZXJQbGFuLCBsaXN0TWFuYWdlcnMsIGxpc3RNb2R1bGVzLCBsaXN0Vmlld3MsIHJ1bkRvY3RvciB9IGZyb20gJy4vZG9jdG9yJztcclxuaW1wb3J0IHtcclxuICAgIElERU5USUZJRVJfUkUsXHJcbiAgICBub3JtYWxpemVNYW5hZ2VyTmFtZSxcclxuICAgIG5vcm1hbGl6ZU1vZHVsZSxcclxuICAgIG5vcm1hbGl6ZVZpZXdOYW1lLFxyXG4gICAgdmlld1ByZWZhYlBhdGgsXHJcbn0gZnJvbSAnLi9uYW1pbmcnO1xyXG5pbXBvcnQge1xyXG4gICAgY29sbGVjdFNuYXBzaG90LFxyXG4gICAgZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyLFxyXG4gICAgbGlzdExvY2FsQ2F0YWxvZyxcclxuICAgIHJlYWRJbnN0YWxsZWRQYWNrYWdlLFxyXG4gICAgcmVhZFByb2plY3RNYW5pZmVzdCxcclxufSBmcm9tICcuL3Byb2plY3QnO1xyXG5pbXBvcnQge1xyXG4gICAgaXNTaGFyZWRNb2R1bGVQYWNrYWdlLFxyXG4gICAgS05PV05fUEFDS0FHRVMsXHJcbiAgICBwYXJzZVZpZXdSZXN1bHQsXHJcbiAgICB2aWV3QXJndixcclxufSBmcm9tICcuL3JlZ2lzdHJ5JztcclxuaW1wb3J0IHtcclxuICAgIE5QTV9USU1FT1VUX01TLFxyXG4gICAgYnVpbGROcG1SZXN1bHQsXHJcbiAgICBidWlsZFNoYXJlZFN0YXR1cyxcclxuICAgIGNhdGFsb2dFbnRyeUZyb21JbnN0YWxsZWQsXHJcbiAgICBjb2xsZWN0SW5zdGFsbFNwZWNzLFxyXG4gICAgZGVjb2RlUHJvY2Vzc091dHB1dCxcclxuICAgIGZpbmRQYWNrYWdlUmVmcyxcclxuICAgIGZvcm1hdE5wbUNvbW1hbmQsXHJcbiAgICBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0LFxyXG4gICAgbWVyZ2VDYXRhbG9nLFxyXG4gICAgbnBtU3Bhd25TcGVjLFxyXG4gICAgc3Bhd25TcGVjRm9yLFxyXG4gICAgc3VtbWFyaXplTnBtRmFpbHVyZSxcclxufSBmcm9tICcuL3NoYXJlZCc7XHJcbmltcG9ydCB7XHJcbiAgICBidWlsZE1hbmFnZXJTY3JpcHQsXHJcbiAgICBidWlsZEV2ZW50c1NjcmlwdCxcclxuICAgIGJ1aWxkTW9kZWxTY3JpcHQsXHJcbiAgICBidWlsZE1vZHVsZVNjcmlwdCxcclxuICAgIGJ1aWxkVmlld1ByZWZhYixcclxuICAgIGJ1aWxkVmlld1NjcmlwdCxcclxuICAgIGlzUHJlZmFiVGVtcGxhdGUsXHJcbiAgICBURnJhbWV3b3JrSW1wb3J0LH0gZnJvbSAnLi90ZW1wbGF0ZXMnO1xyXG5pbXBvcnQgeyBJRmluZGluZywgSU5wbVJ1blJlc3VsdCwgSUluc3RhbGxlZFBhY2thZ2VWaWV3LCBJUHJvamVjdFNuYXBzaG90LCBJU2hhcmVkQ2F0YWxvZ0VudHJ5IH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOaWh+ahiCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICog5omp5bGV6Ieq5bim55qE5Lit5paH5paH5qGI6KGo44CCXHJcbiAqIOWug+aXouaYr+OAjGtleSDlhajpm4bjgI3nmoTmnaXmupDvvIzkuZ/mmK/nvJbovpHlmaggaTE4biDmi7/kuI3liLDml7bnmoTlhZzlupXjgIJcclxuICovXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbmNvbnN0IFpIX1NUUklOR1M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSByZXF1aXJlKCcuLi9pMThuL3poLmpzJyk7XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWwj+W3peWFtyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKiog5bel56iL5qC555uu5b2VICovXHJcbmZ1bmN0aW9uIHByb2plY3RQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gRWRpdG9yLlByb2plY3QucGF0aDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOi/meS4quW3peeoi+W8leeUqOahhuaetuivpeeUqOWTquenjeWGmeazlTpcclxuICogLSDlvIDlj5Hlt6XkvZzljLoo5LuT5bqT6YeMLOahhuaetua6kOeggeWcqCBhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsg5LiLKSAtPiDnm7jlr7not6/lvoRcclxuICogLSDoo4XmiJAgbnBtIOWMheeahOaWsOW3peeoiyAtPiDljIXlkI0gQGNjZ2YvZnJhbWV3b3JrXHJcbiAqXHJcbiAqIOWIpOaNruaYr1wi5qGG5p625rqQ56CB5Zyo5LiN5ZyoXCIs5LiOIGNvbnN0YW50cy50cyDnmoQgRlJBTUVXT1JLX0RFVl9ESVIg5ZCM5LiA5Liq5YC844CCXHJcbiAqL1xyXG5mdW5jdGlvbiBmcmFtZXdvcmtJbXBvcnRNb2RlKCk6IFRGcmFtZXdvcmtJbXBvcnQge1xyXG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoam9pbihwcm9qZWN0UGF0aCgpLCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpID8gJ3dvcmtzcGFjZScgOiAncGFja2FnZSc7XHJcbn1cclxuXHJcbi8qKiDnm7jlr7not6/lvoQgLT4gZGI6Ly8g6LWE5rqQIHVybCAqL1xyXG5mdW5jdGlvbiBkYlVybChyZWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ2RiOi8vJyArIHJlbC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcbn1cclxuXHJcbi8qKiB1dWlkIC0+IOmihOWItuS9k+mHjOiEmuacrOe7hOS7tueahCBfX3R5cGVfXyAqL1xyXG5mdW5jdGlvbiBjb21wcmVzc1V1aWQodXVpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFZGl0b3IuVXRpbHMuVVVJRC5jb21wcmVzc1VVSUQodXVpZCwgZmFsc2UpO1xyXG59XHJcblxyXG4vKiog5Y+W5LiA5Lu95bel56iL5b+r54Wn77yI5L2T5qOA44CB5YiX6KGo6YO95Z+65LqO5a6D77yM5L+d6K+B6Z2i5p2/55yL5Yiw55qE5ZKM5L2T5qOA55yL5Yiw55qE5piv5ZCM5LiA5Lu95pWw5o2u77yJICovXHJcbmZ1bmN0aW9uIHNuYXBzaG90KCk6IElQcm9qZWN0U25hcHNob3Qge1xyXG4gICAgcmV0dXJuIGNvbGxlY3RTbmFwc2hvdChwcm9qZWN0UGF0aCgpLCBjb21wcmVzc1V1aWQpO1xyXG59XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5YWs5YWx5qih5Z2XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIHJlZ2lzdHJ5IOaQnOe0oue7k+aenOeahOe8k+WtmOOAglxyXG4gKlxyXG4gKiDkuIDmrKHmkJzntKLlrp7mtYsgMX40IOenkiDigJTigJQg6ICM6Z2i5p2/5YiH6aG144CB6KOF5a6M5Yi35paw6YO95Lya6LCD55So5p+l6K+i77yM5LiN6IO95q+P5qyh6YO95Y675pCc44CCXHJcbiAqIOaYvuW8j+eCueOAjOWIt+aWsOOAjeaXtueUqCBgZm9yY2VgIOe7lei/h+Wug+OAglxyXG4gKi9cclxubGV0IHJlZ2lzdHJ5Q2FjaGU6IHsgYXQ6IG51bWJlcjsgZW50cmllczogSVNoYXJlZENhdGFsb2dFbnRyeVtdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbCA9IG51bGw7XHJcblxyXG4vKipcclxuICogKirlpLHotKXkuI3mipvlvILluLgs5Lmf5LiN6K6p6Z2i5p2/56m6552A6KOF5L2cXCLmsqHmnInmqKHlnZdcIioqOuaKiuWOn+WboOS4gOi1t+WbnuS8oCzpnaLmnb/mmL7npLrmiJDmj5DnpLog4oCU4oCUXHJcbiAqIOi/meaYr+acgOWIneWwseWumuS4i+eahOimgeaxgihcIuayoeaciee9kee7nOWwseaPkOekuuWwseihjOS6hlwiKeOAglxyXG4gKlxyXG4gKiDov5znqIvkv6Hmga/nmoTmnaXmupA6KirpgJDkuKogYG5wbSB2aWV3IDxuYW1lPiAtLWpzb25gIOeyvuehruafpeivoioq44CCXHJcbiAqXHJcbiAqIOabvue7j+eUqCBgbnBtIHNlYXJjaGAgKyDlhbPplK7or40s5bey5bqf5byDIOKAlOKAlCDmkJzntKLlr7kgc2NvcGVkIOWMhShgQGNjZ2YvKmAp5b6I5LiN5Y+v6Z2gLFxyXG4gKiDluLjluLjmkJzkuI3liLAs5LqO5pivXCLlhazlhbHmqKHlnZfov5znqIvliJfooahcIuWSjFwi5pyA5paw54mI5pysXCLpg73kvJrmmK/nqbrnmoQo5a6e5rWL6Lip6L+HKeOAglxyXG4gKiDku6Pku7c65YyF5ZCN6KaB57u05oqk5ZyoIHJlZ2lzdHJ5LnRzIOeahCBLTk9XTl9QQUNLQUdFUyDph4ws5paw5aKe5YyF5pe25Yqg5LiA6KGM44CCXHJcbiAqXHJcbiAqIOS5i+aJgOS7peeUqCBucG0g5ZG95Luk6ICM5LiN5piv6Ieq5bex5Y+RIEhUVFBTIOivt+axgjpucG0g5Lya6Ieq5Yqo5bim5LiK5bel56iL55qEIGAubnBtcmNgXHJcbiAqICjnp4HmnInmupDjgIHplZzlg4/jgIHku6PnkIbnrYnphY3nva7pg73ot5/nnYDotbApLOS4jeeUqOaIkeS7rOmHjeWkjeWunueOsOS4gOmBjeOAglxyXG4gKi9cclxuLyoqXHJcbiAqICoq5byC5q2lKirot5HkuIDmrKEgbnBt44CCXHJcbiAqXHJcbiAqIOS4uuS7gOS5iOS4jeiDvee7p+e7reeUqCBzcGF3blN5bmM66L+Z5Liq5Ye95pWw5ZyoKirnvJbovpHlmajkuLvov5vnqIsqKumHjOiiq+iwg+eUqCxzcGF3blN5bmMg5Lya5oqK5Li75b6q546vXHJcbiAqIOaVtOS4quWNoOS9jyDigJTigJQg5q+P5p+l5LiA5Liq5YyF5Yeg55m+5q+r56eSLOWHoOS4quWMheS4i+adpee8lui+keWZqCBVSSDlsLHljaHkvY/jgIHngrnliKvlpITmsqHlj43lupQo5a6e5rWLKeOAglxyXG4gKiDmjaLmiJAgc3Bhd24gKyBQcm9taXNlOuWQjOagt+etiee7k+aenCzkvYbkuK3pl7Torqnlh7rkuovku7blvqrnjq8s57yW6L6R5Zmo5LiN5Ya757uT44CCXHJcbiAqL1xyXG4vKipcclxuICog5p+l6L+c56iL5L+h5oGv55So55qEKirnn60qKui2heaXtuOAglxyXG4gKlxyXG4gKiDkuI3og73nlKggTlBNX1RJTUVPVVRfTVMoMTIwIOenkik66YKj5piv57uZXCLlronoo4VcIueUqOeahCznlKjmiLflj6/ku6XnrYk7XHJcbiAqIOiAjFwi5p+l5LiA5LiL5pyA5paw54mI5pysXCLopoHmmK/nrYnkuKTliIbpkp8s6YKj5LiA6aG15bCx562J5LqO5bqf5LqG44CCXHJcbiAqL1xyXG5jb25zdCBSRUdJU1RSWV9RVUVSWV9USU1FT1VUX01TID0gMjUwMDA7XHJcblxyXG4vKiog5ZCM5LiA5pe25Yi75Y+q5YWB6K645LiA5Liq5ZCO5Y+w5Yi35paw5Zyo6LeRLOWQpuWImeavj+asoeWIh+mhteetvumDveS8muWGjei1t+S4gOi9riBucG0gKi9cclxubGV0IHJlZ2lzdHJ5UmVmcmVzaGluZyA9IGZhbHNlO1xyXG5cclxuZnVuY3Rpb24gcnVuTnBtQXN5bmMoXHJcbiAgICBjb21tYW5kOiBzdHJpbmcsXHJcbiAgICBzcGF3blNwZWM6IHsgY29tbWFuZDogc3RyaW5nOyBhcmdzOiBzdHJpbmdbXTsgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzPzogYm9vbGVhbiB9LFxyXG4gICAgY3dkOiBzdHJpbmcsXHJcbiAgICB0aW1lb3V0TXM6IG51bWJlciA9IE5QTV9USU1FT1VUX01TLFxyXG4pOiBQcm9taXNlPHsgcmVzdWx0OiBJTnBtUnVuUmVzdWx0OyBzdGRvdXQ6IHN0cmluZyB9PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XHJcbiAgICAgICAgY29uc3QgZXJyQ2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xyXG4gICAgICAgIGxldCBjaGlsZDogYW55O1xyXG4gICAgICAgIGNvbnN0IGZpbmlzaCA9IChleGl0Q29kZTogbnVtYmVyIHwgbnVsbCwgc3Bhd25FcnJvcjogeyBjb2RlPzogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGwpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3Rkb3V0ID0gZGVjb2RlUHJvY2Vzc091dHB1dChCdWZmZXIuY29uY2F0KGNodW5rcykpO1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhpdENvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHN0ZGVycjogZGVjb2RlUHJvY2Vzc091dHB1dChCdWZmZXIuY29uY2F0KGVyckNodW5rcykpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNwYXduRXJyb3IsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN0ZG91dCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjaGlsZCA9IHNwYXduKHNwYXduU3BlYy5jb21tYW5kLCBzcGF3blNwZWMuYXJncywge1xyXG4gICAgICAgICAgICAgICAgY3dkLFxyXG4gICAgICAgICAgICAgICAgd2luZG93c0hpZGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IHNwYXduU3BlYy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgICAgIGZpbmlzaChudWxsLCB7IG1lc3NhZ2U6IGVycj8ubWVzc2FnZSA/IFN0cmluZyhlcnIubWVzc2FnZSkgOiBTdHJpbmcoZXJyKSB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4geyB0cnkgeyBjaGlsZC5raWxsKCk7IH0gY2F0Y2ggeyAvKiDlt7Lnu4/pgIDkuoYgKi8gfSB9LCB0aW1lb3V0TXMpO1xyXG4gICAgICAgIGNoaWxkLnN0ZG91dD8ub24oJ2RhdGEnLCAoZDogQnVmZmVyKSA9PiBjaHVua3MucHVzaChkKSk7XHJcbiAgICAgICAgY2hpbGQuc3RkZXJyPy5vbignZGF0YScsIChkOiBCdWZmZXIpID0+IGVyckNodW5rcy5wdXNoKGQpKTtcclxuICAgICAgICBjaGlsZC5vbignZXJyb3InLCAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgZmluaXNoKG51bGwsIHsgY29kZTogZXJyPy5jb2RlLCBtZXNzYWdlOiBlcnI/Lm1lc3NhZ2UgPyBTdHJpbmcoZXJyLm1lc3NhZ2UpIDogU3RyaW5nKGVycikgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2hpbGQub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlciB8IG51bGwpID0+IHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgaWYgKHRpbWVyID09PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgIGZpbmlzaChjb2RlLCBudWxsKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcbi8qKlxyXG4gKiDov5znqIvkv6Hmga8o5bim57yT5a2YKeOAgioq6L+Z5Liq5Ye95pWw5rC46L+c5LiN6Zi75aGe44CB5rC46L+c5LiNIGF3YWl0IOWklumDqOi/m+eoiyoq44CCXHJcbiAqXHJcbiAqIOS4uuS7gOS5iOi/meS5iOiuvuiuoTrlroPot5HlnKjnvJbovpHlmajkuLvov5vnqIvph4ws6ICMIG5wbSDmr4/kuKrov5vnqIvopoEgMX4zIOenkiznvZHnu5zlnY/kuobov5jlj6/og73kuIDnm7TkuI3ov5Tlm57jgIJcclxuICog5pep5YWI55So5ZCM5q2lIHNwYXduICsg6YCQ5Liq5p+lLOihqOeOsOWwseaYr1wi54K55byA6L+Z5LiA6aG1LOe8lui+keWZqOWIq+WkhOS5n+ayoeWPjeW6lFwi44CCXHJcbiAqIOeOsOWcqDrlkb3kuK3nvJPlrZjnq4vliLvov5Tlm5476L+H5pyf5YiZKirlhYjov5Tlm57ml6flgLwqKizlkIzml7blkI7lj7DliLfmlrAo5LiNIGF3YWl0KTtcclxuICog5LuO5rKh5oiQ5Yqf6L+H5pe26L+U5Zue5piO56Gu55qE5o+Q56S65paH5qGILOiAjOS4jeaYr+iuqeiwg+eUqOaWueW5suetieOAglxyXG4gKlxyXG4gKiDlpLHotKXkuI3mipvlvILluLgs5Lmf5LiN6K6p6Z2i5p2/56m6552A6KOF5L2cXCLmsqHmnInmqKHlnZdcIjrmiorljp/lm6DkuIDotbflm57kvKAs6Z2i5p2/5pi+56S65oiQ5o+Q56S6IOKAlOKAlFxyXG4gKiDov5nmmK/mnIDliJ3lsLHlrprkuIvnmoTopoHmsYIoXCLmsqHmnInnvZHnu5zlsLHmj5DnpLrlsLHooYzkuoZcIinjgIJcclxuICovXHJcbmZ1bmN0aW9uIHF1ZXJ5UmVnaXN0cnkoZm9yY2U6IGJvb2xlYW4pOiB7IGVudHJpZXM6IElTaGFyZWRDYXRhbG9nRW50cnlbXTsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB7XHJcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgY29uc3QgZnJlc2ggPSByZWdpc3RyeUNhY2hlICYmIG5vdyAtIHJlZ2lzdHJ5Q2FjaGUuYXQgPCBSRUdJU1RSWV9DQUNIRV9NUztcclxuXHJcbiAgICBpZiAoIWZvcmNlICYmIGZyZXNoKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogcmVnaXN0cnlDYWNoZSEuZW50cmllcywgZXJyb3I6IHJlZ2lzdHJ5Q2FjaGUhLmVycm9yIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6ZyA6KaB5pu05pawOuWQjuWPsOWOu+WItyzkuI3lnKjov5nph4znrYlcclxuICAgIHZvaWQgcmVmcmVzaFJlZ2lzdHJ5KCk7XHJcblxyXG4gICAgaWYgKHJlZ2lzdHJ5Q2FjaGUpIHtcclxuICAgICAgICByZXR1cm4geyBlbnRyaWVzOiByZWdpc3RyeUNhY2hlLmVudHJpZXMsIGVycm9yOiByZWdpc3RyeUNhY2hlLmVycm9yIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGVudHJpZXM6IFtdLFxyXG4gICAgICAgIGVycm9yOiByZWdpc3RyeVJlZnJlc2hpbmcgPyAn5q2j5Zyo6I635Y+W6L+c56iL5L+h5oGv4oCmJyA6ICfov5znqIvkv6Hmga/mmoLkuI3lj6/nlKgo56a757q/5oiW6LaF5pe2KScsXHJcbiAgICB9O1xyXG59XHJcblxyXG4vKiog55yf5q2j55qE5ouJ5Y+WOuW8guatpeOAgeacieW5tuWPkemXuOOAgeWNleWMheWksei0peS4jeaLluWeruaVtOS7veWIl+ihqCAqL1xyXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoUmVnaXN0cnkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAocmVnaXN0cnlSZWZyZXNoaW5nKSByZXR1cm47XHJcbiAgICByZWdpc3RyeVJlZnJlc2hpbmcgPSB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcclxuICAgICAgICBjb25zdCBmYWlsdXJlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIEtOT1dOX1BBQ0tBR0VTKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSAnbnBtIHZpZXcgJyArIG5hbWUgKyAnIC0tanNvbic7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwYXduU3BlYyA9IHNwYXduU3BlY0ZvcihcclxuICAgICAgICAgICAgICAgIFtwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ25wbS5jbWQnIDogJ25wbScsIC4uLnZpZXdBcmd2KG5hbWUpXSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgeyByZXN1bHQsIHN0ZG91dCB9ID0gYXdhaXQgcnVuTnBtQXN5bmMoY29tbWFuZCwgc3Bhd25TcGVjLCBwcm9qZWN0UGF0aCgpLCBSRUdJU1RSWV9RVUVSWV9USU1FT1VUX01TKTtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcclxuICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gobmFtZSArICc6JyArIChyZXN1bHQuaGludCA/PyAoJ+i2heaXtuaIlumAgOWHuueggSAnICsgKHJlc3VsdC5leGl0Q29kZSA/PyAn5pyq55+lJykpKSk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHBhcnNlVmlld1Jlc3VsdChzdGRvdXQpO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkpIGVudHJpZXMucHVzaChlbnRyeSk7XHJcbiAgICAgICAgICAgIGVsc2UgZmFpbHVyZXMucHVzaChuYW1lICsgJzrov5Tlm57lhoXlrrnkuI3mmK/pooTmnJ/nmoQgSlNPTiDlvaLnirYnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICoq6YOo5YiGKirlpLHotKXkuZ/opoHmiqXlh7rmnaU65pep5YWI5Y+q5ZyoXCLlhajpg6jlpLHotKVcIuaXtuaJjeWbnuS8oCxcclxuICAgICAgICAvLyDnu5PmnpxcIjMg5Liq5p+l5YiwICsgMSDkuKrotoXml7ZcIuWujOWFqOmdmem7mCDigJTigJQg6Z2i5p2/5pi+56S6XCLml6Dms5Xnoa7orqRcIuWNtOS4jee7meS7u+S9leWOn+WboOOAglxyXG4gICAgICAgIGNvbnN0IGVycm9yID0gZmFpbHVyZXMubGVuZ3RoID4gMCA/ICgn6YOo5YiG6L+c56iL5L+h5oGv6I635Y+W5aSx6LSlOicgKyBmYWlsdXJlcy5qb2luKCc7JykpIDogbnVsbDtcclxuICAgICAgICByZWdpc3RyeUNhY2hlID0geyBhdDogRGF0ZS5ub3coKSwgZW50cmllcywgZXJyb3IgfTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgcmVnaXN0cnlSZWZyZXNoaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDnu4Too4XlhazlhbHmqKHlnZfnmoTlrozmlbTnirbmgIHjgIJcclxuICpcclxuICog5LiJ5Liq5p2l5rqQ5ZCI6LW35p2l5omN5piv5a6M5pW05YiX6KGo77yaXHJcbiAqIDEuIOacrOahhuaetioq5byA5Y+R5bel5L2c5Yy6Kirph4znmoQgYHBhY2thZ2VzL3NoYXJlZC8qYO+8iOWPquacieacrOS7k+W6k+aJjeiupO+8jOingVxyXG4gKiAgICBgZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyYO+8ieKAlOKAlCDog73nu5nlh7ogYGZpbGU6YCDlronoo4Xor7TmmI7nrKbvvJtcclxuICogMi4gYG5vZGVfbW9kdWxlc2Ag6YeM5bey57uP6KOF5LqG55qE77yI6Z2g5YyF5riF5Y2V6YeM55qE5qCH6K6w6K6k5Ye65p2l77yJ77ybXHJcbiAqIDMuICoq6L+c56iLIHJlZ2lzdHJ5KirvvIjmjInlj5HnjrDlhbPplK7or43mkJzntKLvvInigJTigJQg6KaG55uWXCLov5jmsqHoo4XjgIHkvYblj6/ku6Xoo4VcIueahOmCo+S6m+OAglxyXG4gKlxyXG4gKiDliLvmhI8qKuS4jSoq6Z2g5YyF5ZCN5Yy56YWN5p2l6K+G5Yir5YWs5YWx5qih5Z2X77yac2NvcGUg6L+Y5rKh5a6a77yI6KeBIFJPQURNQVAg55qEIFMxYe+8ie+8jFxyXG4gKiDmjaLkuKogc2NvcGUg5bCx6K6k5LiN5Ye65p2l5LqG44CCXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlUmVnaXN0cnkgPSBmYWxzZSkge1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICBjb25zdCBtYW5pZmVzdCA9IHJlYWRQcm9qZWN0TWFuaWZlc3Qocm9vdCk7XHJcbiAgICBjb25zdCBwcm9qZWN0RGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAgIC4uLihtYW5pZmVzdD8uZGVwZW5kZW5jaWVzID8/IHt9KSxcclxuICAgICAgICAuLi4obWFuaWZlc3Q/LmRldkRlcGVuZGVuY2llcyA/PyB7fSksXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNoYXJlZERpciA9IGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0Rpcihyb290KTtcclxuICAgIGNvbnN0IGxvY2FsID0gc2hhcmVkRGlyID8gbGlzdExvY2FsQ2F0YWxvZyhzaGFyZWREaXIsIHJvb3QpIDogW107XHJcblxyXG4gICAgY29uc3QgaW5zdGFsbGVkU2hhcmVkOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhwcm9qZWN0RGVwZW5kZW5jaWVzKSkge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IHJlYWRJbnN0YWxsZWRQYWNrYWdlKHJvb3QsIG5hbWUpO1xyXG4gICAgICAgIGlmIChwa2cuaW5zdGFsbGVkICYmIGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QocGtnLm1hbmlmZXN0KSkge1xyXG4gICAgICAgICAgICBpbnN0YWxsZWRTaGFyZWQucHVzaChjYXRhbG9nRW50cnlGcm9tSW5zdGFsbGVkKG5hbWUsIHBrZy5tYW5pZmVzdCwgcGtnLnZlcnNpb24pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgLy8g5qGG5p625LiO5omp5bGV5LiN5piv5YWs5YWx5qih5Z2XLOiZveeEtuWug+S7rOS5n+ijheedgOOAgeS5n+WcqCBLTk9XTl9QQUNLQUdFUyDph4wg4oCU4oCUIOS4pOWkhOmDveimgea7pOaOiSxcclxuICAgIC8vIOWQpuWImeS9v+eUqOiAheeahFwi5YWs5YWx5qih5Z2XXCLliJfooajph4zkvJrlhpLlh7rmoYbmnrblkoznvJbovpHlmajmianlsZXjgIJcclxuICAgIGNvbnN0IHNoYXJlZE9ubHkgPSAoZTogSVNoYXJlZENhdGFsb2dFbnRyeSkgPT4gaXNTaGFyZWRNb2R1bGVQYWNrYWdlKGUubmFtZSk7XHJcbiAgICBjb25zdCBjYXRhbG9nID0gbWVyZ2VDYXRhbG9nKFxyXG4gICAgICAgIG1lcmdlQ2F0YWxvZyhsb2NhbCwgcmVnaXN0cnkuZW50cmllcy5maWx0ZXIoc2hhcmVkT25seSkpLFxyXG4gICAgICAgIGluc3RhbGxlZFNoYXJlZC5maWx0ZXIoc2hhcmVkT25seSksXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFwi5Y+v5pu05pawXCLopoHpnaDov5znqIvnmoTmnIDmlrDniYjmnKzlj7fvvIzogIwgbWVyZ2VDYXRhbG9nIOiuqeacrOWcsOmhueS8mOWFiO+8iOWQjOWQjeeahOi/nOeoi+mhueS8muiiq+ebluaOie+8ie+8jFxyXG4gICAgLy8g5omA5Lul6L+Z6YeM5Y2V54us55WZ5LiA5Lu95YyF5ZCNIC0+IOi/nOeoi+acgOaWsOeJiOacrOOAglxyXG4gICAgY29uc3QgcmVnaXN0cnlWZXJzaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5lbnRyaWVzKSB7XHJcbiAgICAgICAgcmVnaXN0cnlWZXJzaW9uc1tlbnRyeS5uYW1lXSA9IGVudHJ5LnZlcnNpb247XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6KaB5p+l5a6e5pe254q25oCB55qE5YyFID0g5YiX6KGo6YeM55qEICsg5a6D5Lus5aOw5piO55qE5L6d6LWW44CCXHJcbiAgICAvLyDkvp3otZblj6/og73kuI3lnKjliJfooajph4zvvIjmma7pgJogbnBtIOWMhe+8ie+8jOS9huWug+ijheayoeijheWQjOagt+imgeaYvuekuuWHuuadpeOAglxyXG4gICAgY29uc3Qgd2FudGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNhdGFsb2cpIHtcclxuICAgICAgICB3YW50ZWQuYWRkKGVudHJ5Lm5hbWUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIE9iamVjdC5rZXlzKGVudHJ5LmRlY2xhcmVkRGVwZW5kZW5jaWVzKSkge1xyXG4gICAgICAgICAgICB3YW50ZWQuYWRkKGRlcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgaW5zdGFsbGVkUGFja2FnZXM6IFJlY29yZDxzdHJpbmcsIElJbnN0YWxsZWRQYWNrYWdlVmlldz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB3YW50ZWQpIHtcclxuICAgICAgICBjb25zdCBwa2cgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBuYW1lKTtcclxuICAgICAgICBpbnN0YWxsZWRQYWNrYWdlc1tuYW1lXSA9IHtcclxuICAgICAgICAgICAgaW5zdGFsbGVkOiBwa2cuaW5zdGFsbGVkLFxyXG4gICAgICAgICAgICB2ZXJzaW9uOiBwa2cudmVyc2lvbixcclxuICAgICAgICAgICAgaXNTaGFyZWRNb2R1bGU6IGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QocGtnLm1hbmlmZXN0KSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgY29uc3Qgc291cmNlcyA9IHsgLi4uc25hcC5nYW1lcGxheVNvdXJjZXMsIC4uLnNuYXAubWFuYWdlclNvdXJjZXMgfTtcclxuXHJcbiAgICBjb25zdCBtb2R1bGVzID0gY2F0YWxvZy5tYXAoKGVudHJ5KSA9PiBidWlsZFNoYXJlZFN0YXR1cyhlbnRyeSwge1xyXG4gICAgICAgIHByb2plY3REZXBlbmRlbmNpZXMsXHJcbiAgICAgICAgaW5zdGFsbGVkUGFja2FnZXMsXHJcbiAgICAgICAgcmVmZXJlbmNlczogeyBbZW50cnkubmFtZV06IGZpbmRQYWNrYWdlUmVmcyhzb3VyY2VzLCBlbnRyeS5uYW1lKSB9LFxyXG4gICAgICAgIGNhdGFsb2csXHJcbiAgICAgICAgcmVnaXN0cnlWZXJzaW9ucyxcclxuICAgIH0pKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1vZHVsZXMsXHJcbiAgICAgICAgLyoqIOacrOWcsOWuieijhea6kO+8myoq5Y+q5pyJ5pys5qGG5p6255qE5byA5Y+R5LuT5bqT6YeM5omN6Z2eIG51bGwqKu+8iOmdouWQkeeUqOaIt+eahOW3peeoi+mHjOawuOi/nOaYryBudWxs77yJICovXHJcbiAgICAgICAgbG9jYWxTb3VyY2U6IHNoYXJlZERpcixcclxuICAgICAgICAvKiog5bel56iL5pyJ5Y+v6K+755qEIHBhY2thZ2UuanNvbiDlkJcgKi9cclxuICAgICAgICBoYXNNYW5pZmVzdDogbWFuaWZlc3QgIT09IG51bGwsXHJcbiAgICAgICAgLyoqIOi/nOeoi+WIl+ihqOaLieWPluWksei0peeahOWOn+WboO+8m+S4uiBudWxsIOihqOekuui/measoeaYr+aIkOWKn+eahO+8iOaIlueUqOS6hue8k+WtmO+8iSAqL1xyXG4gICAgICAgIHJlZ2lzdHJ5RXJyb3I6IHJlZ2lzdHJ5LmVycm9yLFxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOi3keS4gOasoSBucG3jgIJcclxuICpcclxuICog5YWo56iLKirkuI3mipvlvILluLgqKu+8mumAgOWHuueggeOAgXN0ZG91dOOAgXN0ZGVycuOAgeS7peWPiiBzcGF3biDoh6rouqvnmoTlpLHotKXpg73mlLbov5sgSU5wbVJ1blJlc3VsdFxyXG4gKiDlm57kvKDnu5npnaLmnb8g4oCU4oCUIOeUqOaIt+imgeeci+eahOaYryBucG0g6Ieq5bex6K+055qE6K+d77yM6ICM5LiN5piv5LiA5Y+l6L2s6L+w55qEXCLlronoo4XlpLHotKVcIuOAglxyXG4gKi9cclxuZnVuY3Rpb24gcnVuTnBtKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcsIHNwZWNzOiBzdHJpbmdbXSk6IElOcG1SdW5SZXN1bHQge1xyXG4gICAgY29uc3Qgc3Bhd25TcGVjID0gbnBtU3Bhd25TcGVjKGFjdGlvbiwgc3BlY3MpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyAxLiAqKuS4jeaMh+WumiBlbmNvZGluZyoq77ya5ou/5Yiw5Y6f5aeLIEJ1ZmZlciDoh6rlt7Hop6PnoIHvvIzlkKbliJkgY21kIOeahCBHQksg5raI5oGv5Lya5Y+Y5Lmx56CB77ybXHJcbiAgICAgICAgLy8gMi4gKip3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMg5b+F6aG75p2l6IeqIHNwYXduU3BlYyoq77ya5bCR5LqG5a6D77yMTm9kZSDkvJrmiormiJHliqDlpb3nmoRcclxuICAgICAgICAvLyAgICDlvJXlj7flho3ovazkuYnkuIDpgY3vvIxjbWQg5pS25YiwIGBcXFwibnBtLmNtZCBpbnN0YWxsIC4uLlxcXCJg77yM5LqO5piv5pW06KGM6KKr5b2T5oiQ5ZG95Luk5ZCNXHJcbiAgICAgICAgLy8gICAg77yI5oqlXCInbnBtLmNtZCBpbnN0YWxsIC4uLicg5LiN5piv5YaF6YOo5oiW5aSW6YOo5ZG95LukXCLvvIxucG0g5qC55pys5rKh6KKr5ZCv5Yqo77yJ44CCXHJcbiAgICAgICAgY29uc3Qgc3Bhd25lZCA9IHNwYXduU3luYyhzcGF3blNwZWMuY29tbWFuZCwgc3Bhd25TcGVjLmFyZ3MsIHtcclxuICAgICAgICAgICAgY3dkOiBwcm9qZWN0UGF0aCgpLFxyXG4gICAgICAgICAgICB0aW1lb3V0OiBOUE1fVElNRU9VVF9NUyxcclxuICAgICAgICAgICAgd2luZG93c0hpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIG1heEJ1ZmZlcjogMTYgKiAxMDI0ICogMTAyNCxcclxuICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBzcGF3blNwZWMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgIGNvbW1hbmQ6IGZvcm1hdE5wbUNvbW1hbmQoYWN0aW9uLCBzcGVjcyksXHJcbiAgICAgICAgICAgIGV4aXRDb2RlOiB0eXBlb2Ygc3Bhd25lZC5zdGF0dXMgPT09ICdudW1iZXInID8gc3Bhd25lZC5zdGF0dXMgOiBudWxsLFxyXG4gICAgICAgICAgICBzdGRvdXQ6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRvdXQpLFxyXG4gICAgICAgICAgICBzdGRlcnI6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRlcnIpLFxyXG4gICAgICAgICAgICBzcGF3bkVycm9yOiBzcGF3bmVkLmVycm9yXHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAoc3Bhd25lZC5lcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3Bhd25lZC5lcnJvci5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICBjb21tYW5kOiBmb3JtYXROcG1Db21tYW5kKGFjdGlvbiwgc3BlY3MpLFxyXG4gICAgICAgICAgICBleGl0Q29kZTogbnVsbCxcclxuICAgICAgICAgICAgc3Rkb3V0OiAnJyxcclxuICAgICAgICAgICAgc3RkZXJyOiAnJyxcclxuICAgICAgICAgICAgc3Bhd25FcnJvcjogeyBtZXNzYWdlOiBlcnI/Lm1lc3NhZ2UgPyBTdHJpbmcoZXJyLm1lc3NhZ2UpIDogU3RyaW5nKGVycikgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOS7o+i3kSBucG0g6KOFIC8g5Y245LiA5Liq5YWs5YWx5qih5Z2X77yM54S25ZCO5Zue5LiA5Lu95Yi35paw6L+H55qE54q25oCB44CCXHJcbiAqXHJcbiAqIOWPquaOpeWPlyBjYXRhbG9nIOmHjOWtmOWcqOeahOWMheWQjSDigJTigJQg5LiN5oqK5omp5bGV5Y+Y5oiQXCLku7vmhI8gbnBtIOWRveS7pOaJp+ihjOWZqFwi44CCXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBydW5TaGFyZWRBY3Rpb24oYWN0aW9uOiAnaW5zdGFsbCcgfCAndW5pbnN0YWxsJywgcGFja2FnZU5hbWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XHJcbiAgICAvLyDpnaLmnb/lj6/og73kvKDlrZfnrKbkuLIs5Lmf5Y+v6IO95LiN5bCP5b+D5YyF5oiQ5pWw57uEIOKAlOKAlCDkuKTnp43pg73mlLYsXHJcbiAgICAvLyDliKvorqlcIuWwkeS4gOS4quaLrOWPt1wi5Y+Y5oiQ55So5oi355yL5Yiw55qEXCLnvLrlsJHljIXlkI1cIuOAglxyXG4gICAgY29uc3Qgd2FudGVkID0gQXJyYXkuaXNBcnJheShwYWNrYWdlTmFtZSkgPyAocGFja2FnZU5hbWUgYXMgYW55KVswXSA6IHBhY2thZ2VOYW1lO1xyXG4gICAgaWYgKCF3YW50ZWQgfHwgdHlwZW9mIHdhbnRlZCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ+e8uuWwkeWMheWQjScpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJlZm9yZSA9IGF3YWl0IHF1ZXJ5U2hhcmVkU3RhdGUoKTtcclxuICAgIGNvbnN0IGVudHJ5ID0gYmVmb3JlLm1vZHVsZXMuZmluZCgobSkgPT4gbS5uYW1lID09PSB3YW50ZWQpO1xyXG4gICAgaWYgKCFlbnRyeSkge1xyXG4gICAgICAgIGNvbnN0IGtub3duID0gYmVmb3JlLm1vZHVsZXMubWFwKChtKSA9PiBtLm5hbWUpO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYOS4jeWcqOWPr+WuieijheWIl+ihqOmHjOeahOWMhe+8miR7d2FudGVkfWBcclxuICAgICAgICAgICAgKyAoa25vd24ubGVuZ3RoID8gYO+8iOW9k+WJjeWIl+ihqO+8miR7a25vd24uam9pbignLCAnKX3vvIlgIDogJ++8iOW9k+WJjeWIl+ihqOS4uuepuu+8iScpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5a6J6KOF6KaB5oqKKirmnKzlnLDog73op6PmnpDliLDnmoTkvp3otZbkuIDotbfluKbkuIoqKu+8muWPquijheWug+S4gOS4queahOivne+8jG5wbSDkvJrljrsgcmVnaXN0cnkg5om+5L6d6LWW77yMXHJcbiAgICAvLyDogIzmnKzlnLDmupDph4znmoTkvp3otZblubbmsqHmnInlj5HluIMg4oCU4oCUIOW/heeEtiBFNDA077yI5a6e5rWL6L+H77yJ44CCXHJcbiAgICAvLyDljbjovb3mjIkqKuWMheWQjSoq77yIbnBtIOiupOWMheWQje+8jOS4jeiupCBmaWxlOiDor7TmmI7nrKbvvInjgIJcclxuICAgIGNvbnN0IHNwZWNzID0gYWN0aW9uID09PSAndW5pbnN0YWxsJ1xyXG4gICAgICAgID8gW2VudHJ5Lm5hbWVdXHJcbiAgICAgICAgOiBjb2xsZWN0SW5zdGFsbFNwZWNzKGVudHJ5LCBiZWZvcmUubW9kdWxlcyk7XHJcbiAgICBjb25zdCByZXN1bHQgPSBydW5OcG0oYWN0aW9uLCBzcGVjcyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDlpLHotKUqKuS4jeaKm+W8guW4uCoq77ya6Z2i5p2/6ZyA6KaB5ou/5Yiw57uT5p6E5YyW55qE57uT5p6c77yI5ZG95Luk44CB6YCA5Ye656CB44CB5Y6f5aeL6L6T5Ye677yJ77yMXHJcbiAgICAgICAgICog5omN6IO95Zyo5by556qX6YeM5Y6f5qC35bGV56S6IG5wbSDoh6rlt7Hor7TnmoTor53jgILpnZ7ms5XovpPlhaXku43nhLbmipsg4oCU4oCUIOmCo+aYr+iwg+eUqOaWueWGmemUmeS6huOAglxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG9rOiByZXN1bHQub2ssXHJcbiAgICAgICAgcmVzdWx0LFxyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIOWksei0peaXtuS4gOWPpSoq5Y2V6KGMKirmkZjopoHvvIjpnaLmnb/mtojmga/ljLrnlKjvvInjgILlrozmlbTovpPlh7rlnKggYHJlc3VsdGAg6YeM77yM55Sx5by556qX5bGV56S6IOKAlOKAlFxyXG4gICAgICAgICAqIOS5i+WJjeaKiuaVtOautSBucG0g6L6T5Ye65aGe6L+b5raI5oGv5Yy677yM5Lya5oqK5Y+z5qCP5oyk5Y+Y5b2i5bm25ZKM5raI5oGv5Y+g5Zyo5LiA6LW344CCXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgbWVzc2FnZTogcmVzdWx0Lm9rID8gbnVsbCA6IHN1bW1hcml6ZU5wbUZhaWx1cmUoYWN0aW9uLCB3YW50ZWQsIHJlc3VsdCksXHJcbiAgICAgICAgLy8g6KOF5a6M56uL5Yi75Zue5LiA5Lu95paw54q25oCB77yM6Z2i5p2/5LiN55So5YaN6LeR5LiA5qyh5p+l6K+iXHJcbiAgICAgICAgLi4ucXVlcnlTaGFyZWRTdGF0ZSgpLFxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqIOi1hOa6kOaYr+WQpuWtmOWcqCAqL1xyXG5mdW5jdGlvbiBhc3NldEV4aXN0cyh1cmw6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgcmV0dXJuIEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCB1cmwpLnRoZW4oKGluZm86IHVua25vd24pID0+ICEhaW5mbyk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDnoa7kv53nm67lvZXlrZjlnKjvvIzkuI3lrZjlnKjliJnliJvlu7pcclxuICovXHJcbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZURpcihkaXJVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCBkaXJVcmwpO1xyXG4gICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgZGlyVXJsLCBudWxsKTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqIOebruW9leS4jeWtmOWcqOWImeW7uu+8jOepuuebruW9leWImeWIoOaOie+8iOeUn+aIkC/liKDpmaTlkI7muIXnkIbnlKjvvIkgKi9cclxuYXN5bmMgZnVuY3Rpb24gcHJ1bmVFbXB0eURpcihhYnNEaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAoc3RhdFN5bmMoYWJzRGlyKS5pc0RpcmVjdG9yeSgpICYmIHJlYWRkaXJTeW5jKGFic0RpcikubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJlbW92ZVN5bmMoYWJzRGlyKTtcclxuICAgICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgLyog5LiN5a2Y5Zyo5bCx566X5LqGICovXHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiDmib7lh7rlvJXnlKjkuobmjIflrpogY2lkIOmbhuWQiOeahOW3suW6j+WIl+WMlui1hOa6kCAqL1xyXG5mdW5jdGlvbiBmaW5kQXNzZXRSZWZzKHNuYXA6IElQcm9qZWN0U25hcHNob3QsIGNpZHM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgY29uc3QgaGl0czogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmICghY2lkcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gaGl0cztcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgcmVsIG9mIE9iamVjdC5rZXlzKHNuYXAuc2VyaWFsaXplZCkpIHtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gc25hcC5zZXJpYWxpemVkW3JlbF07XHJcbiAgICAgICAgaWYgKGNpZHMuc29tZSgoY2lkKSA9PiB0ZXh0LmluY2x1ZGVzKGNpZCkpKSB7XHJcbiAgICAgICAgICAgIGhpdHMucHVzaChyZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoaXRzO1xyXG59XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDmlrnms5UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmV4cG9ydCBjb25zdCBtZXRob2RzOiB7IFtrZXk6IHN0cmluZ106ICguLi5hbnk6IGFueSkgPT4gYW55IH0gPSB7XHJcbiAgICAvKipcclxuICAgICAqIOahhuaetuS4juaJqeWxleWQhOiHqueahOeJiOacrOS/oeaBryjmnKzlnLAgKyBucG0g5pyA5pawKeOAglxyXG4gICAgICpcclxuICAgICAqIOaJqeWxleiHqui6q+eJiOacrOivu+Wug+iHquW3seeahCBwYWNrYWdlLmpzb2475qGG5p6254mI5pys6K+75bel56iLIG5vZGVfbW9kdWxlcyDph4znmoTpgqPku70g4oCU4oCUXHJcbiAgICAgKiDkuKTogIXpg73mmK9cIuWunumZheijheS6huS7gOS5iFwi55qE5LqL5a6eLOS4jeaYr+mFjee9rumHjOWGmeS6huS7gOS5iOOAglxyXG4gICAgICog5pyJ5rKh5pyJ5paw54mI5Lqk57uZ6Z2i5p2/5q+U6L6DIHZlcnNpb24g5LiOIGxhdGVzdCzov5nph4zkuI3mm7/lroPliKTmlq0o5YWN5b6X5Lik6L655ZCE5YaZ5LiA5aWXKeOAglxyXG4gICAgICovXHJcbiAgICAvKipcclxuICAgICAqIOaKiiBub2RlX21vZHVsZXMg6YeM55qE5omp5bGV5ou36L+bIGV4dGVuc2lvbnMv44CCXHJcbiAgICAgKlxyXG4gICAgICog57yW6L6R5ZmoKirlj6rku47lt6XnqIvnmoQgZXh0ZW5zaW9ucy8g5Yqg6L295omp5bGVKios5omA5LulIG5wbSBpbnN0YWxsIOWujOW/hemhu+iQvei/meS4gOebmCxcclxuICAgICAqIOWQpuWImVwi5pu05paw5oiQ5YqfXCLlj6rlj5HnlJ/lnKggbm9kZV9tb2R1bGVzIOmHjCznvJbovpHlmajph4zkuIDngrnlj5jljJbpg73msqHmnInjgIJcclxuICAgICAqIOiQveebmOS5i+WQjumcgOimgemHjeWQr+e8lui+keWZqOaJjeeUn+aViCDigJTigJQg6L+Z5LiA54K555Sx6Z2i5p2/5paH5qGI5ZGK55+lLOi/memHjOS4jeWBh+ijheeDreabtOaWsOOAglxyXG4gICAgICovXHJcbiAgICBzeW5jRXh0ZW5zaW9uKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IGZyb20gPSBqb2luKHJvb3QsIFwibm9kZV9tb2R1bGVzXCIsIG5hbWUpO1xyXG4gICAgICAgIGlmICghZXhpc3RzU3luYyhmcm9tKSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBvazogZmFsc2UsIG1lc3NhZ2U6IFwibm9kZV9tb2R1bGVzIOmHjOayoeaciSBcIiArIG5hbWUgKyBcIizlhYjlronoo4Xlho3okL3nm5hcIiB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0byA9IGpvaW4ocm9vdCwgXCJleHRlbnNpb25zXCIsIG5hbWUuc3BsaXQoXCIvXCIpLnBvcCgpIGFzIHN0cmluZyk7XHJcbiAgICAgICAgcmVtb3ZlU3luYyh0byk7XHJcbiAgICAgICAgY29weVN5bmMoZnJvbSwgdG8pO1xyXG4gICAgICAgIC8vIOWbnuaKpSoq5a6e6ZmF5ou36L+H5Y6755qE54mI5pysKio66L+Z5qC36Z2i5p2/6IO96K+0XCLlt7Lmm7TmlrDliLAgeC55LnpcIuiAjOS4jeaYr+aLvyBsYXRlc3Qg54yc44CCXHJcbiAgICAgICAgbGV0IHZlcnNpb246IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHZlcnNpb24gPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhqb2luKHRvLCAncGFja2FnZS5qc29uJyksICd1dGY4JykpLnZlcnNpb24gPz8gbnVsbDtcclxuICAgICAgICB9IGNhdGNoIHsgLyog6K+75LiN5Yiw5bCx566X5LqGLOS4jee8luS4gOS4qiAqLyB9XHJcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHBhdGg6IHRvLCB2ZXJzaW9uIH07XHJcbiAgICB9LFxyXG5cclxuICAgIGFzeW5jIHF1ZXJ5VmVyc2lvbnMoZm9yY2VSZWdpc3RyeSA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE9mID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBoaXQgPSByZWdpc3RyeS5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIGhpdCA/IGhpdC52ZXJzaW9uIDogbnVsbDtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBmcmFtZXdvcmtOYW1lID0gJ0BjY2dmL2ZyYW1ld29yayc7XHJcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrID0gcmVhZEluc3RhbGxlZFBhY2thZ2Uocm9vdCwgZnJhbWV3b3JrTmFtZSk7XHJcblxyXG4gICAgICAgIC8qKiDmnKzku5PlupPnmoTlvIDlj5Hlt6XkvZzljLo65qGG5p625piv5rqQ56CB44CB5omp5bGV5bCx5piv6L+Z5LiA5Lu9IOKAlOKAlCDpnaLmnb/mja7mraTmlLnnp7DlkbzlubbnpoHnlKjmm7TmlrAgKi9cclxuICAgICAgICBjb25zdCBpbldvcmtzcGFjZSA9IGV4aXN0c1N5bmMoam9pbihyb290LCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmcmFtZXdvcms6IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGZyYW1ld29ya05hbWUsXHJcbiAgICAgICAgICAgICAgICBpbnN0YWxsZWQ6IGZyYW1ld29yay5pbnN0YWxsZWQsXHJcbiAgICAgICAgICAgICAgICB3b3Jrc3BhY2U6IGluV29ya3NwYWNlLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogZnJhbWV3b3JrLnZlcnNpb24sXHJcbiAgICAgICAgICAgICAgICBsYXRlc3Q6IGxhdGVzdE9mKGZyYW1ld29ya05hbWUpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleHRlbnNpb246IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHBhY2thZ2VKU09OLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBwYWNrYWdlSlNPTi52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlOiBpbldvcmtzcGFjZSxcclxuICAgICAgICAgICAgICAgIGxhdGVzdDogbGF0ZXN0T2YocGFja2FnZUpTT04ubmFtZSksXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcbiAgICBvcGVuV29ya2JlbmNoKCkge1xyXG4gICAgICAgIEVkaXRvci5QYW5lbC5vcGVuKGAke3BhY2thZ2VKU09OLm5hbWV9LndvcmtiZW5jaGApO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog6Z2i5p2/55qE5bGC57qn5LiL5ouJ55Sx5Li76L+b56iL5LiL5Y+R77yM6YG/5YWN5omp5bGV6YeM5Ye6546w56ys5LqM5Lu95bGC57qn5YiX6KGoICovXHJcbiAgICBxdWVyeUxheWVycygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5MQVlFUlNdO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOmdouadv+aWh+ahiO+8muS7pSBpMThuL3poLmpzIOeahCBrZXkg5YWo6ZuG5Li65YeG77yM6YCQ5Liq5Lqk57uZ57yW6L6R5ZmoIGkxOG4g6Kej5p6Q5b2T5YmN6K+t6KiA44CCXHJcbiAgICAgKiDov5nmoLfpnaLmnb/kvqfkuI3pnIDopoHliKTmlq3or63oqIDvvIzkuZ/kuI3kvp3otZYgRWRpdG9yLkkxOG4g5piv5ZCm5a2Y5Zyo5LqO6Z2i5p2/5LiK5LiL5paH6YeM44CCXHJcbiAgICAgKi9cclxuICAgIHF1ZXJ5STE4bigpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICBjb25zdCB0YWJsZTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFpIX1NUUklOR1MpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGwgPSBgJHtwYWNrYWdlSlNPTi5uYW1lfS4ke2tleX1gO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9IFpIX1NUUklOR1Nba2V5XTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpdCA9IEVkaXRvci5JMThuLnQoZnVsbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaGl0ICYmIGhpdCAhPT0gZnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBoaXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOe8lui+keWZqCBpMThuIOS4jeWPr+eUqOWwseS/neeVmeS4reaWhyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRhYmxlW2tleV0gPSB0ZXh0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFibGU7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDpooTliLbkvZPmqKHmnb/liJfooajvvIjkvpvpnaLmnb/kuIvmi4nvvIkgKi9cclxuICAgIHF1ZXJ5VGVtcGxhdGVzKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiB7XHJcbiAgICAgICAgcmV0dXJuIFBSRUZBQl9URU1QTEFURVMubWFwKChpZCkgPT4gKHsgaWQsIGxhYmVsOiBQUkVGQUJfVEVNUExBVEVfTEFCRUxTW2lkXSB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+iIGdhbWVwbGF5IOS4i+W3suacieeahOaooeWdl+WIl+ihqO+8iOWQqyBvcmRlcu+8ieOAglxyXG4gICAgICog5LiO5L2T5qOA5YWx55SoIGRvY3Rvci5saXN0TW9kdWxlc++8jOS/neivgemdouadv+aYvuekuuWSjOS9k+ajgOWIpOWumuS4gOiHtOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBxdWVyeU1vZHVsZXMoKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RNb2R1bGVzKHNuYXApLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5kaXIsXHJcbiAgICAgICAgICAgIG9yZGVyOiBtLm9yZGVyID8/IDAsXHJcbiAgICAgICAgICAgIGhhc01vZGVsOiBtLm1vZGVsRmlsZSAhPT0gbnVsbCxcclxuICAgICAgICAgICAgaGFzTW9kdWxlOiB0cnVlLFxyXG4gICAgICAgICAgICAvLyDpnaLmnb/nlKjov5nkuInkuKrot6/lvoTlgZrjgIzkuIDplK7miZPlvIDohJrmnKzjgI3vvJtldmVudHNGaWxlIOWPr+iDveS4uiBudWxs77yI6ICB5qih5Z2X77yJXHJcbiAgICAgICAgICAgIG1vZHVsZUZpbGU6IG0ubW9kdWxlRmlsZSxcclxuICAgICAgICAgICAgbW9kZWxGaWxlOiBtLm1vZGVsRmlsZSxcclxuICAgICAgICAgICAgZXZlbnRzRmlsZTogbS5ldmVudHNGaWxlLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWQr+WKqOmhuuW6j+mihOiniCArIOWxgue6p+WNoOeUqO+8iOW8gOWPkei+heWKqe+8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlPdmVydmlldygpIHtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3cyA9IGxpc3RWaWV3cyhzbmFwKTtcclxuICAgICAgICBjb25zdCB1c2FnZSA9IExBWUVSUy5tYXAoKGxheWVyKSA9PiAoe1xyXG4gICAgICAgICAgICBsYXllcixcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLmZpbHRlcigodikgPT4gdi5yZWdpc3RlcmVkTGF5ZXIgPT09IGxheWVyKS5tYXAoKHYpID0+IHYuY2xhc3NOYW1lKSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IGxpc3RNb2R1bGVzKHNuYXApO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG9yZGVyOiBidWlsZE9yZGVyUGxhbihzbmFwKSxcclxuICAgICAgICAgICAgbGF5ZXJzOiB1c2FnZSxcclxuICAgICAgICAgICAgbW9kdWxlQ291bnQ6IG1vZHVsZXMubGVuZ3RoLFxyXG4gICAgICAgICAgICBtYW5hZ2VyQ291bnQ6IGxpc3RNYW5hZ2VycyhzbmFwKS5sZW5ndGgsXHJcbiAgICAgICAgICAgIHZpZXdDb3VudDogdmlld3MubGVuZ3RoLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDkuIDplK7kvZPmo4AgKi9cclxuICAgIGFzeW5jIHJ1bkRvY3RvcigpOiBQcm9taXNlPHsgZmluZGluZ3M6IElGaW5kaW5nW107IHN1bW1hcnk6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmRpbmdzID0gcnVuRG9jdG9yKHNuYXBzaG90KCksIExBWUVSUyk7XHJcbiAgICAgICAgY29uc3Qgc3VtbWFyeSA9IHsgZXJyb3I6IDAsIHdhcm46IDAsIGluZm86IDAgfTtcclxuICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZmluZGluZ3MpIHtcclxuICAgICAgICAgICAgc3VtbWFyeVtmLnNldmVyaXR5XSA9IChzdW1tYXJ5W2Yuc2V2ZXJpdHldID8/IDApICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZmluZGluZ3MsIHN1bW1hcnkgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6Lmn5DmqKHlnZfnmoQgVmlldyDliJfooajjgIJcclxuICAgICAqIOavlOaXp+WunueOsOWkmuS6hiBwcmVmYWJFeGlzdHMg4oCU4oCUIOaXp+eJiOaMiee6puWumuaLvCBVUkwg5Y205LuO5LiN5p+l55uY77yMXHJcbiAgICAgKiDkuo7mmK/igJzohJrmnKzlnKjjgIHpooTliLbkvZPkuKLkuobigJ3nmoQgVmlldyDkuZ/kvJrooqvliJflh7rmnaXvvIzngrnkuobmiY3lpLHotKXjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlWaWV3cyhtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICByZXR1cm4gbGlzdFZpZXdzKHNuYXApXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHYpID0+IHYubW9kdWxlRGlyID09PSBtb2R1bGVEaXIpXHJcbiAgICAgICAgICAgIC5tYXAoKHYpID0+ICh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiB2LmNsYXNzTmFtZSxcclxuICAgICAgICAgICAgICAgIHNjcmlwdFVybDogZGJVcmwodi5zY3JpcHRGaWxlKSxcclxuICAgICAgICAgICAgICAgIHByZWZhYlVybDogdi5yZWdpc3RlcmVkUGF0aCA/IGRiVXJsKGAke1JFU09VUkNFU19ESVJ9LyR7di5yZWdpc3RlcmVkUGF0aH0ucHJlZmFiYCkgOiAnJyxcclxuICAgICAgICAgICAgICAgIHByZWZhYkV4aXN0czogdi5yZWdpc3RlcmVkUGF0aCA/IHNuYXAucHJlZmFic0J5UmVzb3VyY2VQYXRoW3YucmVnaXN0ZXJlZFBhdGhdICE9PSB1bmRlZmluZWQgOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGxheWVyOiB2LnJlZ2lzdGVyZWRMYXllciA/PyAnJyxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWFuYWdlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAvKiogbWFuYWdlciDliJfooajvvIhhc3NldHMvc2NyaXB0cy9tYW5hZ2VyIOS4i+ebtOWxnueahCAqTWFuYWdlci50c++8iSAqL1xyXG4gICAgYXN5bmMgcXVlcnlNYW5hZ2VycygpIHtcclxuICAgICAgICByZXR1cm4gbGlzdE1hbmFnZXJzKHNuYXBzaG90KCkpLm1hcCgobSkgPT4gKHtcclxuICAgICAgICAgICAgbmFtZTogbS5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgIGZpbGU6IG0uc2NyaXB0RmlsZSxcclxuICAgICAgICAgICAgZXh0ZW5kc1NpbmdsZXRvbjogbS5leHRlbmRzU2luZ2xldG9uLFxyXG4gICAgICAgICAgICBiYXNlQ2xhc3M6IG0uYmFzZUNsYXNzLFxyXG4gICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJvlu7ogbWFuYWdlcu+8mueUn+aIkOS4gOS4que7p+aJv+ahhuaetiBBU2luZ2xldG9uIOeahOWFqOWxgOWNleS+i+iEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1hbmFnZXJOYW1lIOWQjeWtl++8jOWmgiBcImNvbmZpZ1wiIC8gXCJDb25maWdcIiAvIFwiQ29uZmlnTWFuYWdlclwiXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3QgZGlyVXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJVcmwpO1xyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHtkaXJVcmx9LyR7Y2xhc3NOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHNjcmlwdFVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtYW5hZ2VyIOW3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOWug++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0Jywgc2NyaXB0VXJsLCBidWlsZE1hbmFnZXJTY3JpcHQoY2xhc3NOYW1lLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7ogbWFuYWdlciDlpLHotKU6ICR7c2NyaXB0VXJsfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRpclVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBzY3JpcHRVcmwsIGZpbGU6IGAke01BTkFHRVJfRElSfS8ke2NsYXNzTmFtZX0udHNgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDliKDpmaQgbWFuYWdlciDohJrmnKwgKi9cclxuICAgIGFzeW5jIGRlbGV0ZU1hbmFnZXIobWFuYWdlck5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbWFuYWdlck5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtYW5hZ2VyTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoQgbWFuYWdlciDlkI06IFwiJHttYW5hZ2VyTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVNYW5hZ2VyTmFtZShtYW5hZ2VyTmFtZSk7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtNQU5BR0VSX0RJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgaW5mbyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3F1ZXJ5LWFzc2V0LWluZm8nLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGlmICghaW5mbykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsCBtYW5hZ2VyIOiEmuacrO+8miR7Y2xhc3NOYW1lfS50c2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke01BTkFHRVJfRElSfWApO1xyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgcmVtb3ZlZDogc2NyaXB0VXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X5YmN55qE5byV55So5qOA5p+l77ya5ZOq5Lqb6LWE5rqQ5byV55So5LqG6K+l5qih5Z2X55qE6ISa5pys44CCXHJcbiAgICAgKiDpnaLmnb/lnKjnoa7orqTmoYbph4zlsZXnpLrvvIzpgb/lhY3liKDlroznlZnkuIvmgqznqbrlvJXnlKjjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlNb2R1bGVSZWZzKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IHZpZXdzID0gbGlzdFZpZXdzKHNuYXApLmZpbHRlcigodikgPT4gdi5tb2R1bGVEaXIgPT09IG1vZHVsZURpcik7XHJcbiAgICAgICAgY29uc3QgY2lkcyA9IHZpZXdzLm1hcCgodikgPT4gc25hcC5zY3JpcHRDaWRzW3Yuc2NyaXB0RmlsZV0pLmZpbHRlcihCb29sZWFuKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVDaWQgPSBzbmFwLnNjcmlwdENpZHNbYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkubW9kdWxlQ2xhc3N9LnRzYF07XHJcbiAgICAgICAgY29uc3QgYWxsQ2lkcyA9IG1vZHVsZUNpZCA/IGNpZHMuY29uY2F0KFttb2R1bGVDaWRdKSA6IGNpZHM7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdmlld3M6IHZpZXdzLm1hcCgodikgPT4gdi5jbGFzc05hbWUpLFxyXG4gICAgICAgICAgICByZWZlcmVuY2VkQnk6IGZpbmRBc3NldFJlZnMoc25hcCwgYWxsQ2lkcyksXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWcqOe8lui+keWZqOmHjOaJk+W8gOafkOS4quW3peeoi+WGheaWh+S7tu+8iOS9k+ajgOe7k+aenC/mpoLop4jngrnlh7vlrprkvY3nlKjvvIkgKi9cclxuICAgIGFzeW5jIG9wZW5Tb3VyY2UocmVsUGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFyZWxQYXRoIHx8IHJlbFBhdGguaW5jbHVkZXMoJy4uJykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTot6/lvoQ6IFwiJHtyZWxQYXRofVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHVybCA9IGRiVXJsKHJlbFBhdGgpO1xyXG4gICAgICAgIC8vIOWFiOehruiupOi1hOa6kOWtmOWcqOS4lOW3suiiq+e8lui+keWZqOWvvOWFpe+8jOWGjeiwiOaJk+W8gO+8m+WQpuWImee7meWHuuaYjuehruWOn+WboFxyXG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDotYTmupDkuI3lrZjlnKjmiJbmnKrooqvnvJbovpHlmajlr7zlhaU6ICR7cmVsUGF0aH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnb3Blbi1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgcmV0dXJuIHsgdXJsIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu65qih5Z2X77ya55Sf5oiQIE1vZHVsZSArIE1vZGVsICsg5LqL5Lu25aOw5piOIOS4ieS4quiEmuacrOOAglxyXG4gICAgICogQHBhcmFtIG1vZHVsZU5hbWUg5qih5Z2X5ZCN77yM5aaCIFwiYmFnXCIgLyBcIkJhZ1wiIC8gXCJCYWdNb2R1bGVcIlxyXG4gICAgICogQHBhcmFtIG9yZGVyICAgICAg5qih5Z2X5ZCv5Yqo6aG65bqPXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZU1vZHVsZShtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmFtaW5nID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke25hbWluZy5kaXJ9YDtcclxuXHJcbiAgICAgICAgLy8g5YWI5p+l5a2Y5Zyo5oCn77yM57uZ5Ye65piO56Gu5Y6f5Zug77yI5pen54mI5Y+q5ZyoIGNyZWF0ZS1hc3NldCDov5Tlm57nqbrml7bor7TigJzlj6/og73lt7LlrZjlnKjigJ3vvIlcclxuICAgICAgICBjb25zdCBtb2R1bGVVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c2A7XHJcbiAgICAgICAgY29uc3QgbW9kZWxVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLm1vZGVsQ2xhc3N9LnRzYDtcclxuICAgICAgICBjb25zdCBldmVudHNVcmwgPSBgJHttb2R1bGVEaXJVcmx9LyR7bmFtaW5nLmV2ZW50c05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kdWxlVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaooeWdl+W3suWtmOWcqO+8miR7bmFtaW5nLm1vZHVsZUNsYXNzfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMobW9kZWxVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5qih5Z6L5bey5a2Y5Zyo77yaJHtuYW1pbmcubW9kZWxDbGFzc30udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKGV2ZW50c1VybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDkuovku7blo7DmmI7lt7LlrZjlnKjvvJoke25hbWluZy5ldmVudHNOYW1lfS50c++8iOWmgumcgOmHjeW7uu+8jOivt+WFiOWIoOmZpOivpeaooeWdl++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgZW5zdXJlRGlyKG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIC8qKiDlt7LliJvlu7rmiJDlip/nmoTotYTmupDvvJvku7vkuIDmraXlpLHotKXml7bmjInpgIbluo/lm57mu5rvvIzpgb/lhY3nlZnkuIvljYrmiJDlk4EgKi9cclxuICAgICAgICBjb25zdCBjcmVhdGVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZU9yUm9sbGJhY2sgPSBhc3luYyAodXJsOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBhc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgdXJsLCBjb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFhc3NldCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSBjcmVhdGVkLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZG9uZSBvZiBjcmVhdGVkLnJldmVyc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIGRvbmUpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgbW9kdWxlRGlyVXJsKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgICAgICBg5Yib5bu6JHtsYWJlbH3lpLHotKU6ICR7dXJsfSR7Y291bnQgPiAwID8gYO+8iOW3suWbnua7miAke2NvdW50fSDkuKrmlofku7bvvIlgIDogJyd9YCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY3JlYXRlZC5wdXNoKHVybCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhcclxuICAgICAgICAgICAgbW9kdWxlVXJsLCBidWlsZE1vZHVsZVNjcmlwdChuYW1pbmcubW9kdWxlQ2xhc3MsIG5hbWluZy5tb2RlbENsYXNzLCBvcmRlciwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgJ+aooeWdlycsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCBjcmVhdGVPclJvbGxiYWNrKG1vZGVsVXJsLCBidWlsZE1vZGVsU2NyaXB0KG5hbWluZy5tb2RlbENsYXNzLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpLCAn5qih5Z6LJyk7XHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhldmVudHNVcmwsIGJ1aWxkRXZlbnRzU2NyaXB0KG5hbWluZy5kaXIsIG5hbWluZy5tb2R1bGVDbGFzcyksICfkuovku7blo7DmmI4nKTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIG1vZHVsZURpclVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRpck5hbWU6IG5hbWluZy5kaXIsXHJcbiAgICAgICAgICAgIHByZWZpeDogbmFtaW5nLnByZWZpeCxcclxuICAgICAgICAgICAgbW9kdWxlVXJsLFxyXG4gICAgICAgICAgICBtb2RlbFVybCxcclxuICAgICAgICAgICAgZXZlbnRzVXJsLFxyXG4gICAgICAgICAgICBvcmRlcixcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOabtOaWsOaooeWdl+eahCBvcmRlcu+8muWGmeWbniBNb2R1bGUg6ISa5pys55qEIEBSZWdpc3Rlck1vZHVsZSh7b3JkZXJ9KeOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyB1cGRhdGVNb2R1bGVPcmRlcihtb2R1bGVOYW1lOiBzdHJpbmcsIG9yZGVyOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcmRlciAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0Zpbml0ZShvcmRlcikgfHwgb3JkZXIgPCAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBHQU1FUExBWV9ESVIsIG1vZHVsZURpcik7XHJcblxyXG4gICAgICAgIGxldCBmaWxlczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmaWxlcyA9IHJlYWRkaXJTeW5jKG1vZHVsZURpclBhdGgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLDmqKHlnZfnm67lvZU6ICR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVGaWxlID0gZmlsZXMuZmluZCgoZikgPT4gZi5lbmRzV2l0aCgnTW9kdWxlLnRzJykpO1xyXG4gICAgICAgIGlmICghbW9kdWxlRmlsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaJvuS4jeWIsOaooeWdl+iEmuacrDogJHttb2R1bGVEaXJ9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGpvaW4obW9kdWxlRGlyUGF0aCwgbW9kdWxlRmlsZSk7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhmdWxsUGF0aCwgJ3V0Zi04Jyk7XHJcbiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgvb3JkZXJcXHMqOlxccypcXGQrLywgYG9yZGVyOiAke29yZGVyfWApO1xyXG4gICAgICAgIGlmIChuZXdDb250ZW50ID09PSBjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5pyq5ZyoICR7bW9kdWxlRmlsZX0g5Lit5om+5YiwIG9yZGVyIOWtl+autWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3cml0ZUZpbGVTeW5jKGZ1bGxQYXRoLCBuZXdDb250ZW50KTtcclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGRiVXJsKGAke0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9YCkpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBtb2R1bGVOYW1lOiBtb2R1bGVEaXIsIG9yZGVyIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu6IFZpZXfvvJrlnKjmjIflrprmqKHlnZfkuIvnlJ/miJDohJrmnKwgKyDpooTliLbkvZPvvIzlubbmiorohJrmnKzmjILovb3liLDpooTliLbkvZPmoLnoioLngrnjgIJcclxuICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSDpooTliLbkvZPmqKHmnb/vvIzop4EgY29uc3RhbnRzLlBSRUZBQl9URU1QTEFURVNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgY3JlYXRlVmlldyhtb2R1bGVOYW1lOiBzdHJpbmcsIHZpZXdOYW1lOiBzdHJpbmcsIGxheWVyOiBzdHJpbmcsIHRlbXBsYXRlOiBzdHJpbmcgPSAnZW1wdHknKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cIu+8jOivt+S9v+eUqOWQiOazleeahOagh+ivhuespmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIUxBWUVSUy5pbmNsdWRlcyhsYXllciBhcyBhbnkpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5bGC57qnOiBcIiR7bGF5ZXJ9XCLvvIjlkIjms5XlgLzvvJoke0xBWUVSUy5qb2luKCcsICcpfe+8iWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWlzUHJlZmFiVGVtcGxhdGUodGVtcGxhdGUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6aKE5Yi25L2T5qih5p2/OiBcIiR7dGVtcGxhdGV9XCLvvIjlkIjms5XlgLzvvJoke1BSRUZBQl9URU1QTEFURVMuam9pbignLCAnKX3vvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplVmlld05hbWUodmlld05hbWUpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlBhdGggPSB2aWV3UHJlZmFiUGF0aChtb2R1bGVEaXIsIGNsYXNzTmFtZSk7XHJcblxyXG4gICAgICAgIC8vIOi3qOaooeWdl+mHjeWQjeS8muWKoOi9vemUmemihOWItuS9k++8iFZpZXdNYW5hZ2VyIOaMieexu+WQjeWFqOWxgOafpeaJvu+8ie+8jOaPkOWJjeaMoeS9j1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIGNvbnN0IGNsYXNoID0gbGlzdFZpZXdzKHNuYXApLmZpbmQoXHJcbiAgICAgICAgICAgICh2KSA9PiB2LmNsYXNzTmFtZSA9PT0gY2xhc3NOYW1lICYmIHYubW9kdWxlRGlyICE9PSBtb2R1bGVEaXIsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY2xhc2gpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICAgICAgYFZpZXcg5ZCN5a2XIFwiJHtjbGFzc05hbWV9XCIg5bey6KKr5qih5Z2XIFwiJHtjbGFzaC5tb2R1bGVEaXJ9XCIg5Y2g55So77ybYCArXHJcbiAgICAgICAgICAgICAgICBg5qGG5p625oyJ57G75ZCN5YWo5bGA5p+l5om+77yM6YeN5ZCN5Lya5Yqg6L296ZSZ6aKE5Yi25L2T77yM6K+35o2i5Liq5ZCN5a2XYCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHZpZXdzRGlyVXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcih2aWV3c0RpclVybCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGAke3ZpZXdzRGlyVXJsfS8ke2NsYXNzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhzY3JpcHRVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVmlldyDohJrmnKzlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6UgVmlld++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0Q29udGVudCA9IGJ1aWxkVmlld1NjcmlwdChjbGFzc05hbWUsIHByZWZhYlBhdGgsIGxheWVyLCBmcmFtZXdvcmtJbXBvcnRNb2RlKCkpO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdEFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHNjcmlwdFVybCwgc2NyaXB0Q29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIXNjcmlwdEFzc2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu66ISa5pys5aSx6LSlOiAke3NjcmlwdFVybH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHByZWZhYkRpclVybCA9IGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9YDtcclxuICAgICAgICBjb25zdCBwcmVmYWJVcmwgPSBgJHtwcmVmYWJEaXJVcmx9LyR7Y2xhc3NOYW1lfS5wcmVmYWJgO1xyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihwcmVmYWJEaXJVcmwpO1xyXG5cclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMocHJlZmFiVXJsKSkge1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBzY3JpcHRVcmwpLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6aKE5Yi25L2T5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnByZWZhYu+8iOW3suWbnua7muiEmuacrO+8jOWmgumcgOmHjeW7uuivt+WFiOWIoOmZpOivpSBWaWV377yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wcmVzc2VkVXVpZCA9IGNvbXByZXNzVXVpZChzY3JpcHRBc3NldC51dWlkKTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZmFiQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGJ1aWxkVmlld1ByZWZhYihjbGFzc05hbWUsIGNvbXByZXNzZWRVdWlkLCB0ZW1wbGF0ZSkpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmYWJBc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAnYXNzZXQtZGInLCAnY3JlYXRlLWFzc2V0JywgcHJlZmFiVXJsLCBwcmVmYWJDb250ZW50LCB7IG92ZXJ3cml0ZTogZmFsc2UgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFwcmVmYWJBc3NldCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDliJvlu7rpooTliLbkvZPlpLHotKU6ICR7cHJlZmFiVXJsfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyDlm57mu5rohJrmnKzvvIzpgb/lhY3nlZnkuIvigJzmnInohJrmnKzmsqHpooTliLbkvZPigJ3nmoTljYrmiJDlk4FcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0Jywgdmlld3NEaXJVcmwpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHByZWZhYkRpclVybCk7XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHZpZXdzRGlyVXJsKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgY2xhc3NOYW1lLCBtb2R1bGVEaXIsIHNjcmlwdFVybCwgcHJlZmFiVXJsLCBwcmVmYWJQYXRoLCBsYXllciwgdGVtcGxhdGUgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliKDpmaQgdmlld++8muWPquWIoOiHqui6q++8iOiEmuacrCArIOmihOWItuS9kyArIOWQhOiHqiBtZXRh77yJ77yM5LiN56Kw5YW25LuW6LWE5rqQ44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGRlbGV0ZVZpZXcobW9kdWxlTmFtZTogc3RyaW5nLCB2aWV3TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdmlld05hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdCh2aWV3TmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTop4blm77lkI06IFwiJHt2aWV3TmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBub3JtYWxpemVWaWV3TmFtZSh2aWV3TmFtZSk7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiVXJsID0gYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn0vJHtjbGFzc05hbWV9LnByZWZhYmA7XHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYGRiOi8vJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn0vJHtjbGFzc05hbWV9LnRzYDtcclxuXHJcbiAgICAgICAgY29uc3QgZGVsZXRlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHVybCBvZiBbcHJlZmFiVXJsLCBzY3JpcHRVcmxdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKTtcclxuICAgICAgICAgICAgaWYgKGluZm8pIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHVybCk7XHJcbiAgICAgICAgICAgICAgICBkZWxldGVkLnB1c2godXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5riF55CG56m655uu5b2V77yI5pen54mI5Lya55WZ5LiLIHJlc291cmNlcy92aWV3cy885qih5Z2XPiDov5nnp43nqbrlo7PvvIlcclxuICAgICAgICBhd2FpdCBwcnVuZUVtcHR5RGlyKGpvaW4ocHJvamVjdFBhdGgoKSwgUkVTT1VSQ0VTX0RJUiwgJ3ZpZXdzJywgbW9kdWxlRGlyKSk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfS8ke1ZJRVdTX1NVQkRJUn1gKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgbW9kdWxlRGlyLCBkZWxldGVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6Zmk5qih5Z2X77ya5YigIGdhbWVwbGF5LzzmqKHlnZc+LyDkuI4gcmVzb3VyY2VzL3ZpZXdzLzzmqKHlnZc+LyDkuKTkuKrnm67lvZXvvIjov57lkIwgbWV0Ye+8ieOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVNb2R1bGUobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpclBhdGggPSBqb2luKHByb2plY3RQYXRoKCksIEdBTUVQTEFZX0RJUiwgbW9kdWxlRGlyKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBSRVNPVVJDRVNfRElSLCAndmlld3MnLCBtb2R1bGVEaXIpO1xyXG5cclxuICAgICAgICBjb25zdCByZW1vdmVkOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBbcHJlZmFiRGlyUGF0aCwgbW9kdWxlRGlyUGF0aF0pIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlU3luYyhwKTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2gocCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIC8qIOS4jeWtmOWcqOWImei3s+i/hyAqL1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3c2ApO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChHQU1FUExBWV9ESVIpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbW9kdWxlRGlyLCByZW1vdmVkIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDlhazlhbHmqKHlnZcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmn6Xor6LlhazlhbHmqKHlnZfvvJrmnKzlnLDlt6XkvZzljLogKyDlt7Llronoo4UgKyDov5znqIsgcmVnaXN0cnnjgIJcclxuICAgICAqIEBwYXJhbSBmb3JjZSDlvLrliLbph43mlrDmi4nlj5bov5znqIvliJfooajvvIjpnaLmnb/nmoTjgIzliLfmlrDjgI3nlKjvvIlcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlTaGFyZWRNb2R1bGVzKGZvcmNlPzogYm9vbGVhbikge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlID09PSB0cnVlKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlronoo4XkuIDkuKrlhazlhbHmqKHlnZfvvJoqKuebtOaOpeS7o+i3kSBgbnBtIGluc3RhbGxgKirjgIJcclxuICAgICAqIOWksei0peaXtuaKm+WHuueahOmUmeivr+mHjOW4puedgCBucG0g55qE5Y6f5aeL6L6T5Ye677yM6Z2i5p2/5Lya5Y6f5qC35bGV56S644CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGluc3RhbGxTaGFyZWRNb2R1bGUod2FudGVkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gcnVuU2hhcmVkQWN0aW9uKCdpbnN0YWxsJywgd2FudGVkKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOWNuOi9veS4gOS4quWFrOWFseaooeWdl++8muebtOaOpeS7o+i3kSBgbnBtIHVuaW5zdGFsbGAgKi9cclxuICAgIGFzeW5jIHVuaW5zdGFsbFNoYXJlZE1vZHVsZSh3YW50ZWQ6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBydW5TaGFyZWRBY3Rpb24oJ3VuaW5zdGFsbCcsIHdhbnRlZCk7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBlbiBNZXRob2QgVHJpZ2dlcmVkIG9uIEV4dGVuc2lvbiBTdGFydHVwXHJcbiAqIEB6aCDmianlsZXlkK/liqjml7bop6blj5HnmoTmlrnms5VcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2FkKCkgeyB9XHJcblxyXG4vKipcclxuICogQGVuIE1ldGhvZCB0cmlnZ2VyZWQgd2hlbiB1bmluc3RhbGxpbmcgdGhlIGV4dGVuc2lvblxyXG4gKiBAemgg5Y246L295omp5bGV5pe26Kem5Y+R55qE5pa55rOVXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdW5sb2FkKCkgeyB9XHJcbiJdfQ==
907
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NvdXJjZS9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQTBoQ0Esb0JBQTBCO0FBTTFCLHdCQUE0QjtBQWhpQzVCLGFBQWE7QUFDYixtRUFBMEM7QUFDMUMsaURBQWlEO0FBQ2pELHVDQUFnSDtBQUNoSCwrQkFBNEI7QUFDNUIsMkNBVXFCO0FBQ3JCLHFDQUEyRjtBQUMzRixxQ0FNa0I7QUFDbEIsdUNBTW1CO0FBQ25CLHlDQUtvQjtBQUNwQixxQ0Fja0I7QUFDbEIsMkNBUTBDO0FBRzFDLHdFQUF3RTtBQUV4RTs7O0dBR0c7QUFDSCw4REFBOEQ7QUFDOUQsTUFBTSxVQUFVLEdBQTJCLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUVwRSx5RUFBeUU7QUFFekUsWUFBWTtBQUNaLFNBQVMsV0FBVztJQUNoQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLG1CQUFtQjtJQUN4QixPQUFPLElBQUEscUJBQVUsRUFBQyxJQUFBLFdBQUksRUFBQyxXQUFXLEVBQUUsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2pHLENBQUM7QUFFRCwyQkFBMkI7QUFDM0IsU0FBUyxLQUFLLENBQUMsR0FBVztJQUN0QixPQUFPLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsaUNBQWlDO0FBQ2pDLFNBQVMsWUFBWSxDQUFDLElBQVk7SUFDOUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFFRCw2Q0FBNkM7QUFDN0MsU0FBUyxRQUFRO0lBQ2Is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QUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUM7Q0FDSixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsU0FBZ0IsSUFBSSxLQUFLLENBQUM7QUFFMUI7OztHQUdHO0FBQ0gsU0FBZ0IsTUFBTSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtaWdub3JlXHJcbmltcG9ydCBwYWNrYWdlSlNPTiBmcm9tICcuLi9wYWNrYWdlLmpzb24nO1xyXG5pbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XHJcbmltcG9ydCB7IGNvcHlTeW5jLCBleGlzdHNTeW5jLCByZWFkZGlyU3luYywgcmVhZEZpbGVTeW5jLCByZW1vdmVTeW5jLCBzdGF0U3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJztcclxuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xyXG5pbXBvcnQge1xyXG4gICAgR0FNRVBMQVlfRElSLFxyXG4gICAgTEFZRVJTLFxyXG4gICAgTUFOQUdFUl9ESVIsXHJcbiAgICBQUkVGQUJfVEVNUExBVEVTLFxyXG4gICAgUFJFRkFCX1RFTVBMQVRFX0xBQkVMUyxcclxuICAgIFJFR0lTVFJZX0NBQ0hFX01TLFxyXG4gICAgUkVTT1VSQ0VTX0RJUixcclxuICAgIFRQcmVmYWJUZW1wbGF0ZSxcclxuICAgIFZJRVdTX1NVQkRJUixcclxufSBmcm9tICcuL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IGJ1aWxkT3JkZXJQbGFuLCBsaXN0TWFuYWdlcnMsIGxpc3RNb2R1bGVzLCBsaXN0Vmlld3MsIHJ1bkRvY3RvciB9IGZyb20gJy4vZG9jdG9yJztcclxuaW1wb3J0IHtcclxuICAgIElERU5USUZJRVJfUkUsXHJcbiAgICBub3JtYWxpemVNYW5hZ2VyTmFtZSxcclxuICAgIG5vcm1hbGl6ZU1vZHVsZSxcclxuICAgIG5vcm1hbGl6ZVZpZXdOYW1lLFxyXG4gICAgdmlld1ByZWZhYlBhdGgsXHJcbn0gZnJvbSAnLi9uYW1pbmcnO1xyXG5pbXBvcnQge1xyXG4gICAgY29sbGVjdFNuYXBzaG90LFxyXG4gICAgZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyLFxyXG4gICAgbGlzdExvY2FsQ2F0YWxvZyxcclxuICAgIHJlYWRJbnN0YWxsZWRQYWNrYWdlLFxyXG4gICAgcmVhZFByb2plY3RNYW5pZmVzdCxcclxufSBmcm9tICcuL3Byb2plY3QnO1xyXG5pbXBvcnQge1xyXG4gICAgaXNTaGFyZWRNb2R1bGVQYWNrYWdlLFxyXG4gICAgS05PV05fUEFDS0FHRVMsXHJcbiAgICBwYXJzZVZpZXdSZXN1bHQsXHJcbiAgICB2aWV3QXJndixcclxufSBmcm9tICcuL3JlZ2lzdHJ5JztcclxuaW1wb3J0IHtcclxuICAgIE5QTV9USU1FT1VUX01TLFxyXG4gICAgYnVpbGROcG1SZXN1bHQsXHJcbiAgICBidWlsZFNoYXJlZFN0YXR1cyxcclxuICAgIGNhdGFsb2dFbnRyeUZyb21JbnN0YWxsZWQsXHJcbiAgICBjb2xsZWN0SW5zdGFsbFNwZWNzLFxyXG4gICAgZGVjb2RlUHJvY2Vzc091dHB1dCxcclxuICAgIGZpbmRQYWNrYWdlUmVmcyxcclxuICAgIGZvcm1hdE5wbUNvbW1hbmQsXHJcbiAgICBpc1NoYXJlZE1vZHVsZU1hbmlmZXN0LFxyXG4gICAgbWVyZ2VDYXRhbG9nLFxyXG4gICAgbnBtU3Bhd25TcGVjLFxyXG4gICAgc3Bhd25TcGVjRm9yLFxyXG4gICAgc3VtbWFyaXplTnBtRmFpbHVyZSxcclxufSBmcm9tICcuL3NoYXJlZCc7XHJcbmltcG9ydCB7XHJcbiAgICBidWlsZE1hbmFnZXJTY3JpcHQsXHJcbiAgICBidWlsZEV2ZW50c1NjcmlwdCxcclxuICAgIGJ1aWxkTW9kZWxTY3JpcHQsXHJcbiAgICBidWlsZE1vZHVsZVNjcmlwdCxcclxuICAgIGJ1aWxkVmlld1ByZWZhYixcclxuICAgIGJ1aWxkVmlld1NjcmlwdCxcclxuICAgIGlzUHJlZmFiVGVtcGxhdGUsXHJcbiAgICBURnJhbWV3b3JrSW1wb3J0LH0gZnJvbSAnLi90ZW1wbGF0ZXMnO1xyXG5pbXBvcnQgeyBJRmluZGluZywgSU5wbVJ1blJlc3VsdCwgSUluc3RhbGxlZFBhY2thZ2VWaWV3LCBJUHJvamVjdFNuYXBzaG90LCBJU2hhcmVkQ2F0YWxvZ0VudHJ5IH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOaWh+ahiCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICog5omp5bGV6Ieq5bim55qE5Lit5paH5paH5qGI6KGo44CCXHJcbiAqIOWug+aXouaYr+OAjGtleSDlhajpm4bjgI3nmoTmnaXmupDvvIzkuZ/mmK/nvJbovpHlmaggaTE4biDmi7/kuI3liLDml7bnmoTlhZzlupXjgIJcclxuICovXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXHJcbmNvbnN0IFpIX1NUUklOR1M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSByZXF1aXJlKCcuLi9pMThuL3poLmpzJyk7XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWwj+W3peWFtyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKiog5bel56iL5qC555uu5b2VICovXHJcbmZ1bmN0aW9uIHByb2plY3RQYXRoKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gRWRpdG9yLlByb2plY3QucGF0aDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOi/meS4quW3peeoi+W8leeUqOahhuaetuivpeeUqOWTquenjeWGmeazlTpcclxuICogLSDlvIDlj5Hlt6XkvZzljLoo5LuT5bqT6YeMLOahhuaetua6kOeggeWcqCBhc3NldHMvc2NyaXB0cy9mcmFtZXdvcmsg5LiLKSAtPiDnm7jlr7not6/lvoRcclxuICogLSDoo4XmiJAgbnBtIOWMheeahOaWsOW3peeoiyAtPiDljIXlkI0gQGNjZ2YvZnJhbWV3b3JrXHJcbiAqXHJcbiAqIOWIpOaNruaYr1wi5qGG5p625rqQ56CB5Zyo5LiN5ZyoXCIs5LiOIGNvbnN0YW50cy50cyDnmoQgRlJBTUVXT1JLX0RFVl9ESVIg5ZCM5LiA5Liq5YC844CCXHJcbiAqL1xyXG5mdW5jdGlvbiBmcmFtZXdvcmtJbXBvcnRNb2RlKCk6IFRGcmFtZXdvcmtJbXBvcnQge1xyXG4gICAgcmV0dXJuIGV4aXN0c1N5bmMoam9pbihwcm9qZWN0UGF0aCgpLCAnYXNzZXRzL3NjcmlwdHMvZnJhbWV3b3JrJykpID8gJ3dvcmtzcGFjZScgOiAncGFja2FnZSc7XHJcbn1cclxuXHJcbi8qKiDnm7jlr7not6/lvoQgLT4gZGI6Ly8g6LWE5rqQIHVybCAqL1xyXG5mdW5jdGlvbiBkYlVybChyZWw6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gJ2RiOi8vJyArIHJlbC5yZXBsYWNlKC9cXFxcL2csICcvJyk7XHJcbn1cclxuXHJcbi8qKiB1dWlkIC0+IOmihOWItuS9k+mHjOiEmuacrOe7hOS7tueahCBfX3R5cGVfXyAqL1xyXG5mdW5jdGlvbiBjb21wcmVzc1V1aWQodXVpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBFZGl0b3IuVXRpbHMuVVVJRC5jb21wcmVzc1VVSUQodXVpZCwgZmFsc2UpO1xyXG59XHJcblxyXG4vKiog5Y+W5LiA5Lu95bel56iL5b+r54Wn77yI5L2T5qOA44CB5YiX6KGo6YO95Z+65LqO5a6D77yM5L+d6K+B6Z2i5p2/55yL5Yiw55qE5ZKM5L2T5qOA55yL5Yiw55qE5piv5ZCM5LiA5Lu95pWw5o2u77yJICovXHJcbmZ1bmN0aW9uIHNuYXBzaG90KCk6IElQcm9qZWN0U25hcHNob3Qge1xyXG4gICAgcmV0dXJuIGNvbGxlY3RTbmFwc2hvdChwcm9qZWN0UGF0aCgpLCBjb21wcmVzc1V1aWQpO1xyXG59XHJcblxyXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5YWs5YWx5qih5Z2XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIHJlZ2lzdHJ5IOaQnOe0oue7k+aenOeahOe8k+WtmOOAglxyXG4gKlxyXG4gKiDkuIDmrKHmkJzntKLlrp7mtYsgMX40IOenkiDigJTigJQg6ICM6Z2i5p2/5YiH6aG144CB6KOF5a6M5Yi35paw6YO95Lya6LCD55So5p+l6K+i77yM5LiN6IO95q+P5qyh6YO95Y675pCc44CCXHJcbiAqIOaYvuW8j+eCueOAjOWIt+aWsOOAjeaXtueUqCBgZm9yY2VgIOe7lei/h+Wug+OAglxyXG4gKi9cclxubGV0IHJlZ2lzdHJ5Q2FjaGU6IHsgYXQ6IG51bWJlcjsgZW50cmllczogSVNoYXJlZENhdGFsb2dFbnRyeVtdOyBlcnJvcjogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbCA9IG51bGw7XHJcblxyXG4vKipcclxuICogKirlpLHotKXkuI3mipvlvILluLgs5Lmf5LiN6K6p6Z2i5p2/56m6552A6KOF5L2cXCLmsqHmnInmqKHlnZdcIioqOuaKiuWOn+WboOS4gOi1t+WbnuS8oCzpnaLmnb/mmL7npLrmiJDmj5DnpLog4oCU4oCUXHJcbiAqIOi/meaYr+acgOWIneWwseWumuS4i+eahOimgeaxgihcIuayoeaciee9kee7nOWwseaPkOekuuWwseihjOS6hlwiKeOAglxyXG4gKlxyXG4gKiDov5znqIvkv6Hmga/nmoTmnaXmupA6KirpgJDkuKogYG5wbSB2aWV3IDxuYW1lPiAtLWpzb25gIOeyvuehruafpeivoioq44CCXHJcbiAqXHJcbiAqIOabvue7j+eUqCBgbnBtIHNlYXJjaGAgKyDlhbPplK7or40s5bey5bqf5byDIOKAlOKAlCDmkJzntKLlr7kgc2NvcGVkIOWMhShgQGNjZ2YvKmAp5b6I5LiN5Y+v6Z2gLFxyXG4gKiDluLjluLjmkJzkuI3liLAs5LqO5pivXCLlhazlhbHmqKHlnZfov5znqIvliJfooahcIuWSjFwi5pyA5paw54mI5pysXCLpg73kvJrmmK/nqbrnmoQo5a6e5rWL6Lip6L+HKeOAglxyXG4gKiDku6Pku7c65YyF5ZCN6KaB57u05oqk5ZyoIHJlZ2lzdHJ5LnRzIOeahCBLTk9XTl9QQUNLQUdFUyDph4ws5paw5aKe5YyF5pe25Yqg5LiA6KGM44CCXHJcbiAqXHJcbiAqIOS5i+aJgOS7peeUqCBucG0g5ZG95Luk6ICM5LiN5piv6Ieq5bex5Y+RIEhUVFBTIOivt+axgjpucG0g5Lya6Ieq5Yqo5bim5LiK5bel56iL55qEIGAubnBtcmNgXHJcbiAqICjnp4HmnInmupDjgIHplZzlg4/jgIHku6PnkIbnrYnphY3nva7pg73ot5/nnYDotbApLOS4jeeUqOaIkeS7rOmHjeWkjeWunueOsOS4gOmBjeOAglxyXG4gKi9cclxuLyoqXHJcbiAqICoq5byC5q2lKirot5HkuIDmrKEgbnBt44CCXHJcbiAqXHJcbiAqIOS4uuS7gOS5iOS4jeiDvee7p+e7reeUqCBzcGF3blN5bmM66L+Z5Liq5Ye95pWw5ZyoKirnvJbovpHlmajkuLvov5vnqIsqKumHjOiiq+iwg+eUqCxzcGF3blN5bmMg5Lya5oqK5Li75b6q546vXHJcbiAqIOaVtOS4quWNoOS9jyDigJTigJQg5q+P5p+l5LiA5Liq5YyF5Yeg55m+5q+r56eSLOWHoOS4quWMheS4i+adpee8lui+keWZqCBVSSDlsLHljaHkvY/jgIHngrnliKvlpITmsqHlj43lupQo5a6e5rWLKeOAglxyXG4gKiDmjaLmiJAgc3Bhd24gKyBQcm9taXNlOuWQjOagt+etiee7k+aenCzkvYbkuK3pl7Torqnlh7rkuovku7blvqrnjq8s57yW6L6R5Zmo5LiN5Ya757uT44CCXHJcbiAqL1xyXG4vKipcclxuICog5p+l6L+c56iL5L+h5oGv55So55qEKirnn60qKui2heaXtuOAglxyXG4gKlxyXG4gKiDkuI3og73nlKggTlBNX1RJTUVPVVRfTVMoMTIwIOenkik66YKj5piv57uZXCLlronoo4VcIueUqOeahCznlKjmiLflj6/ku6XnrYk7XHJcbiAqIOiAjFwi5p+l5LiA5LiL5pyA5paw54mI5pysXCLopoHmmK/nrYnkuKTliIbpkp8s6YKj5LiA6aG15bCx562J5LqO5bqf5LqG44CCXHJcbiAqL1xyXG5jb25zdCBSRUdJU1RSWV9RVUVSWV9USU1FT1VUX01TID0gMjUwMDA7XHJcblxyXG4vKiog5ZCM5LiA5pe25Yi75Y+q5YWB6K645LiA5Liq5ZCO5Y+w5Yi35paw5Zyo6LeRLOWQpuWImeavj+asoeWIh+mhteetvumDveS8muWGjei1t+S4gOi9riBucG0gKi9cclxubGV0IHJlZ2lzdHJ5UmVmcmVzaGluZyA9IGZhbHNlO1xyXG5cclxuZnVuY3Rpb24gcnVuTnBtQXN5bmMoXHJcbiAgICBjb21tYW5kOiBzdHJpbmcsXHJcbiAgICBzcGF3blNwZWM6IHsgY29tbWFuZDogc3RyaW5nOyBhcmdzOiBzdHJpbmdbXTsgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzPzogYm9vbGVhbiB9LFxyXG4gICAgY3dkOiBzdHJpbmcsXHJcbiAgICB0aW1lb3V0TXM6IG51bWJlciA9IE5QTV9USU1FT1VUX01TLFxyXG4pOiBQcm9taXNlPHsgcmVzdWx0OiBJTnBtUnVuUmVzdWx0OyBzdGRvdXQ6IHN0cmluZyB9PiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XHJcbiAgICAgICAgY29uc3QgZXJyQ2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xyXG4gICAgICAgIGxldCBjaGlsZDogYW55O1xyXG4gICAgICAgIGNvbnN0IGZpbmlzaCA9IChleGl0Q29kZTogbnVtYmVyIHwgbnVsbCwgc3Bhd25FcnJvcjogeyBjb2RlPzogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfSB8IG51bGwpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3Rkb3V0ID0gZGVjb2RlUHJvY2Vzc091dHB1dChCdWZmZXIuY29uY2F0KGNodW5rcykpO1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdDogYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhpdENvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LFxyXG4gICAgICAgICAgICAgICAgICAgIHN0ZGVycjogZGVjb2RlUHJvY2Vzc091dHB1dChCdWZmZXIuY29uY2F0KGVyckNodW5rcykpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNwYXduRXJyb3IsXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN0ZG91dCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjaGlsZCA9IHNwYXduKHNwYXduU3BlYy5jb21tYW5kLCBzcGF3blNwZWMuYXJncywge1xyXG4gICAgICAgICAgICAgICAgY3dkLFxyXG4gICAgICAgICAgICAgICAgd2luZG93c0hpZGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHM6IHNwYXduU3BlYy53aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XHJcbiAgICAgICAgICAgIGZpbmlzaChudWxsLCB7IG1lc3NhZ2U6IGVycj8ubWVzc2FnZSA/IFN0cmluZyhlcnIubWVzc2FnZSkgOiBTdHJpbmcoZXJyKSB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4geyB0cnkgeyBjaGlsZC5raWxsKCk7IH0gY2F0Y2ggeyAvKiDlt7Lnu4/pgIDkuoYgKi8gfSB9LCB0aW1lb3V0TXMpO1xyXG4gICAgICAgIGNoaWxkLnN0ZG91dD8ub24oJ2RhdGEnLCAoZDogQnVmZmVyKSA9PiBjaHVua3MucHVzaChkKSk7XHJcbiAgICAgICAgY2hpbGQuc3RkZXJyPy5vbignZGF0YScsIChkOiBCdWZmZXIpID0+IGVyckNodW5rcy5wdXNoKGQpKTtcclxuICAgICAgICBjaGlsZC5vbignZXJyb3InLCAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgZmluaXNoKG51bGwsIHsgY29kZTogZXJyPy5jb2RlLCBtZXNzYWdlOiBlcnI/Lm1lc3NhZ2UgPyBTdHJpbmcoZXJyLm1lc3NhZ2UpIDogU3RyaW5nKGVycikgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY2hpbGQub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlciB8IG51bGwpID0+IHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcclxuICAgICAgICAgICAgaWYgKHRpbWVyID09PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgICAgIGZpbmlzaChjb2RlLCBudWxsKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcbi8qKlxyXG4gKiDov5znqIvkv6Hmga8o5bim57yT5a2YKeOAgioq6L+Z5Liq5Ye95pWw5rC46L+c5LiN6Zi75aGe44CB5rC46L+c5LiNIGF3YWl0IOWklumDqOi/m+eoiyoq44CCXHJcbiAqXHJcbiAqIOS4uuS7gOS5iOi/meS5iOiuvuiuoTrlroPot5HlnKjnvJbovpHlmajkuLvov5vnqIvph4ws6ICMIG5wbSDmr4/kuKrov5vnqIvopoEgMX4zIOenkiznvZHnu5zlnY/kuobov5jlj6/og73kuIDnm7TkuI3ov5Tlm57jgIJcclxuICog5pep5YWI55So5ZCM5q2lIHNwYXduICsg6YCQ5Liq5p+lLOihqOeOsOWwseaYr1wi54K55byA6L+Z5LiA6aG1LOe8lui+keWZqOWIq+WkhOS5n+ayoeWPjeW6lFwi44CCXHJcbiAqIOeOsOWcqDrlkb3kuK3nvJPlrZjnq4vliLvov5Tlm5476L+H5pyf5YiZKirlhYjov5Tlm57ml6flgLwqKizlkIzml7blkI7lj7DliLfmlrAo5LiNIGF3YWl0KTtcclxuICog5LuO5rKh5oiQ5Yqf6L+H5pe26L+U5Zue5piO56Gu55qE5o+Q56S65paH5qGILOiAjOS4jeaYr+iuqeiwg+eUqOaWueW5suetieOAglxyXG4gKlxyXG4gKiDlpLHotKXkuI3mipvlvILluLgs5Lmf5LiN6K6p6Z2i5p2/56m6552A6KOF5L2cXCLmsqHmnInmqKHlnZdcIjrmiorljp/lm6DkuIDotbflm57kvKAs6Z2i5p2/5pi+56S65oiQ5o+Q56S6IOKAlOKAlFxyXG4gKiDov5nmmK/mnIDliJ3lsLHlrprkuIvnmoTopoHmsYIoXCLmsqHmnInnvZHnu5zlsLHmj5DnpLrlsLHooYzkuoZcIinjgIJcclxuICovXHJcbmZ1bmN0aW9uIHF1ZXJ5UmVnaXN0cnkoZm9yY2U6IGJvb2xlYW4pOiB7IGVudHJpZXM6IElTaGFyZWRDYXRhbG9nRW50cnlbXTsgZXJyb3I6IHN0cmluZyB8IG51bGwgfSB7XHJcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xyXG4gICAgY29uc3QgZnJlc2ggPSByZWdpc3RyeUNhY2hlICYmIG5vdyAtIHJlZ2lzdHJ5Q2FjaGUuYXQgPCBSRUdJU1RSWV9DQUNIRV9NUztcclxuXHJcbiAgICBpZiAoIWZvcmNlICYmIGZyZXNoKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogcmVnaXN0cnlDYWNoZSEuZW50cmllcywgZXJyb3I6IHJlZ2lzdHJ5Q2FjaGUhLmVycm9yIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6ZyA6KaB5pu05pawOuWQjuWPsOWOu+WItyzkuI3lnKjov5nph4znrYlcclxuICAgIHZvaWQgcmVmcmVzaFJlZ2lzdHJ5KCk7XHJcblxyXG4gICAgaWYgKHJlZ2lzdHJ5Q2FjaGUpIHtcclxuICAgICAgICByZXR1cm4geyBlbnRyaWVzOiByZWdpc3RyeUNhY2hlLmVudHJpZXMsIGVycm9yOiByZWdpc3RyeUNhY2hlLmVycm9yIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIGVudHJpZXM6IFtdLFxyXG4gICAgICAgIGVycm9yOiByZWdpc3RyeVJlZnJlc2hpbmcgPyAn5q2j5Zyo6I635Y+W6L+c56iL5L+h5oGv4oCmJyA6ICfov5znqIvkv6Hmga/mmoLkuI3lj6/nlKgo56a757q/5oiW6LaF5pe2KScsXHJcbiAgICB9O1xyXG59XHJcblxyXG4vKiog55yf5q2j55qE5ouJ5Y+WOuW8guatpeOAgeacieW5tuWPkemXuOOAgeWNleWMheWksei0peS4jeaLluWeruaVtOS7veWIl+ihqCAqL1xyXG5hc3luYyBmdW5jdGlvbiByZWZyZXNoUmVnaXN0cnkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAocmVnaXN0cnlSZWZyZXNoaW5nKSByZXR1cm47XHJcbiAgICByZWdpc3RyeVJlZnJlc2hpbmcgPSB0cnVlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBjb25zdCBlbnRyaWVzOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcclxuICAgICAgICBjb25zdCBmYWlsdXJlczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIEtOT1dOX1BBQ0tBR0VTKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSAnbnBtIHZpZXcgJyArIG5hbWUgKyAnIC0tanNvbic7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwYXduU3BlYyA9IHNwYXduU3BlY0ZvcihcclxuICAgICAgICAgICAgICAgIFtwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ25wbS5jbWQnIDogJ25wbScsIC4uLnZpZXdBcmd2KG5hbWUpXSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgeyByZXN1bHQsIHN0ZG91dCB9ID0gYXdhaXQgcnVuTnBtQXN5bmMoY29tbWFuZCwgc3Bhd25TcGVjLCBwcm9qZWN0UGF0aCgpLCBSRUdJU1RSWV9RVUVSWV9USU1FT1VUX01TKTtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQub2spIHtcclxuICAgICAgICAgICAgICAgIGZhaWx1cmVzLnB1c2gobmFtZSArICc6JyArIChyZXN1bHQuaGludCA/PyAoJ+i2heaXtuaIlumAgOWHuueggSAnICsgKHJlc3VsdC5leGl0Q29kZSA/PyAn5pyq55+lJykpKSk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHBhcnNlVmlld1Jlc3VsdChzdGRvdXQpO1xyXG4gICAgICAgICAgICBpZiAoZW50cnkpIGVudHJpZXMucHVzaChlbnRyeSk7XHJcbiAgICAgICAgICAgIGVsc2UgZmFpbHVyZXMucHVzaChuYW1lICsgJzrov5Tlm57lhoXlrrnkuI3mmK/pooTmnJ/nmoQgSlNPTiDlvaLnirYnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICoq6YOo5YiGKirlpLHotKXkuZ/opoHmiqXlh7rmnaU65pep5YWI5Y+q5ZyoXCLlhajpg6jlpLHotKVcIuaXtuaJjeWbnuS8oCxcclxuICAgICAgICAvLyDnu5PmnpxcIjMg5Liq5p+l5YiwICsgMSDkuKrotoXml7ZcIuWujOWFqOmdmem7mCDigJTigJQg6Z2i5p2/5pi+56S6XCLml6Dms5Xnoa7orqRcIuWNtOS4jee7meS7u+S9leWOn+WboOOAglxyXG4gICAgICAgIGNvbnN0IGVycm9yID0gZmFpbHVyZXMubGVuZ3RoID4gMCA/ICgn6YOo5YiG6L+c56iL5L+h5oGv6I635Y+W5aSx6LSlOicgKyBmYWlsdXJlcy5qb2luKCc7JykpIDogbnVsbDtcclxuICAgICAgICByZWdpc3RyeUNhY2hlID0geyBhdDogRGF0ZS5ub3coKSwgZW50cmllcywgZXJyb3IgfTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgcmVnaXN0cnlSZWZyZXNoaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDnu4Too4XlhazlhbHmqKHlnZfnmoTlrozmlbTnirbmgIHjgIJcclxuICpcclxuICog5LiJ5Liq5p2l5rqQ5ZCI6LW35p2l5omN5piv5a6M5pW05YiX6KGo77yaXHJcbiAqIDEuIOacrOahhuaetioq5byA5Y+R5bel5L2c5Yy6Kirph4znmoQgYHBhY2thZ2VzL3NoYXJlZC8qYO+8iOWPquacieacrOS7k+W6k+aJjeiupO+8jOingVxyXG4gKiAgICBgZmluZERldldvcmtzcGFjZVNoYXJlZFBhY2thZ2VzRGlyYO+8ieKAlOKAlCDog73nu5nlh7ogYGZpbGU6YCDlronoo4Xor7TmmI7nrKbvvJtcclxuICogMi4gYG5vZGVfbW9kdWxlc2Ag6YeM5bey57uP6KOF5LqG55qE77yI6Z2g5YyF5riF5Y2V6YeM55qE5qCH6K6w6K6k5Ye65p2l77yJ77ybXHJcbiAqIDMuICoq6L+c56iLIHJlZ2lzdHJ5KirvvIjmjInlj5HnjrDlhbPplK7or43mkJzntKLvvInigJTigJQg6KaG55uWXCLov5jmsqHoo4XjgIHkvYblj6/ku6Xoo4VcIueahOmCo+S6m+OAglxyXG4gKlxyXG4gKiDliLvmhI8qKuS4jSoq6Z2g5YyF5ZCN5Yy56YWN5p2l6K+G5Yir5YWs5YWx5qih5Z2X77yac2NvcGUg6L+Y5rKh5a6a77yI6KeBIFJPQURNQVAg55qEIFMxYe+8ie+8jFxyXG4gKiDmjaLkuKogc2NvcGUg5bCx6K6k5LiN5Ye65p2l5LqG44CCXHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBxdWVyeVNoYXJlZFN0YXRlKGZvcmNlUmVnaXN0cnkgPSBmYWxzZSkge1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICBjb25zdCBtYW5pZmVzdCA9IHJlYWRQcm9qZWN0TWFuaWZlc3Qocm9vdCk7XHJcbiAgICBjb25zdCBwcm9qZWN0RGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAgIC4uLihtYW5pZmVzdD8uZGVwZW5kZW5jaWVzID8/IHt9KSxcclxuICAgICAgICAuLi4obWFuaWZlc3Q/LmRldkRlcGVuZGVuY2llcyA/PyB7fSksXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNoYXJlZERpciA9IGZpbmREZXZXb3Jrc3BhY2VTaGFyZWRQYWNrYWdlc0Rpcihyb290KTtcclxuICAgIGNvbnN0IGxvY2FsID0gc2hhcmVkRGlyID8gbGlzdExvY2FsQ2F0YWxvZyhzaGFyZWREaXIsIHJvb3QpIDogW107XHJcblxyXG4gICAgY29uc3QgaW5zdGFsbGVkU2hhcmVkOiBJU2hhcmVkQ2F0YWxvZ0VudHJ5W10gPSBbXTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhwcm9qZWN0RGVwZW5kZW5jaWVzKSkge1xyXG4gICAgICAgIGNvbnN0IHBrZyA9IHJlYWRJbnN0YWxsZWRQYWNrYWdlKHJvb3QsIG5hbWUpO1xyXG4gICAgICAgIGlmIChwa2cuaW5zdGFsbGVkICYmIGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QocGtnLm1hbmlmZXN0KSkge1xyXG4gICAgICAgICAgICBpbnN0YWxsZWRTaGFyZWQucHVzaChjYXRhbG9nRW50cnlGcm9tSW5zdGFsbGVkKG5hbWUsIHBrZy5tYW5pZmVzdCwgcGtnLnZlcnNpb24pKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVnaXN0cnkgPSBhd2FpdCBxdWVyeVJlZ2lzdHJ5KGZvcmNlUmVnaXN0cnkpO1xyXG4gICAgLy8g5qGG5p625LiO5omp5bGV5LiN5piv5YWs5YWx5qih5Z2XLOiZveeEtuWug+S7rOS5n+ijheedgOOAgeS5n+WcqCBLTk9XTl9QQUNLQUdFUyDph4wg4oCU4oCUIOS4pOWkhOmDveimgea7pOaOiSxcclxuICAgIC8vIOWQpuWImeS9v+eUqOiAheeahFwi5YWs5YWx5qih5Z2XXCLliJfooajph4zkvJrlhpLlh7rmoYbmnrblkoznvJbovpHlmajmianlsZXjgIJcclxuICAgIGNvbnN0IHNoYXJlZE9ubHkgPSAoZTogSVNoYXJlZENhdGFsb2dFbnRyeSkgPT4gaXNTaGFyZWRNb2R1bGVQYWNrYWdlKGUubmFtZSk7XHJcbiAgICBjb25zdCBjYXRhbG9nID0gbWVyZ2VDYXRhbG9nKFxyXG4gICAgICAgIG1lcmdlQ2F0YWxvZyhsb2NhbCwgcmVnaXN0cnkuZW50cmllcy5maWx0ZXIoc2hhcmVkT25seSkpLFxyXG4gICAgICAgIGluc3RhbGxlZFNoYXJlZC5maWx0ZXIoc2hhcmVkT25seSksXHJcbiAgICApO1xyXG5cclxuICAgIC8vIFwi5Y+v5pu05pawXCLopoHpnaDov5znqIvnmoTmnIDmlrDniYjmnKzlj7fvvIzogIwgbWVyZ2VDYXRhbG9nIOiuqeacrOWcsOmhueS8mOWFiO+8iOWQjOWQjeeahOi/nOeoi+mhueS8muiiq+ebluaOie+8ie+8jFxyXG4gICAgLy8g5omA5Lul6L+Z6YeM5Y2V54us55WZ5LiA5Lu95YyF5ZCNIC0+IOi/nOeoi+acgOaWsOeJiOacrOOAglxyXG4gICAgY29uc3QgcmVnaXN0cnlWZXJzaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xyXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5lbnRyaWVzKSB7XHJcbiAgICAgICAgcmVnaXN0cnlWZXJzaW9uc1tlbnRyeS5uYW1lXSA9IGVudHJ5LnZlcnNpb247XHJcbiAgICB9XHJcblxyXG4gICAgLy8g6KaB5p+l5a6e5pe254q25oCB55qE5YyFID0g5YiX6KGo6YeM55qEICsg5a6D5Lus5aOw5piO55qE5L6d6LWW44CCXHJcbiAgICAvLyDkvp3otZblj6/og73kuI3lnKjliJfooajph4zvvIjmma7pgJogbnBtIOWMhe+8ie+8jOS9huWug+ijheayoeijheWQjOagt+imgeaYvuekuuWHuuadpeOAglxyXG4gICAgY29uc3Qgd2FudGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGNhdGFsb2cpIHtcclxuICAgICAgICB3YW50ZWQuYWRkKGVudHJ5Lm5hbWUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZGVwIG9mIE9iamVjdC5rZXlzKGVudHJ5LmRlY2xhcmVkRGVwZW5kZW5jaWVzKSkge1xyXG4gICAgICAgICAgICB3YW50ZWQuYWRkKGRlcCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgaW5zdGFsbGVkUGFja2FnZXM6IFJlY29yZDxzdHJpbmcsIElJbnN0YWxsZWRQYWNrYWdlVmlldz4gPSB7fTtcclxuICAgIGZvciAoY29uc3QgbmFtZSBvZiB3YW50ZWQpIHtcclxuICAgICAgICBjb25zdCBwa2cgPSByZWFkSW5zdGFsbGVkUGFja2FnZShyb290LCBuYW1lKTtcclxuICAgICAgICBpbnN0YWxsZWRQYWNrYWdlc1tuYW1lXSA9IHtcclxuICAgICAgICAgICAgaW5zdGFsbGVkOiBwa2cuaW5zdGFsbGVkLFxyXG4gICAgICAgICAgICB2ZXJzaW9uOiBwa2cudmVyc2lvbixcclxuICAgICAgICAgICAgaXNTaGFyZWRNb2R1bGU6IGlzU2hhcmVkTW9kdWxlTWFuaWZlc3QocGtnLm1hbmlmZXN0KSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgY29uc3Qgc291cmNlcyA9IHsgLi4uc25hcC5nYW1lcGxheVNvdXJjZXMsIC4uLnNuYXAubWFuYWdlclNvdXJjZXMgfTtcclxuXHJcbiAgICBjb25zdCBtb2R1bGVzID0gY2F0YWxvZy5tYXAoKGVudHJ5KSA9PiBidWlsZFNoYXJlZFN0YXR1cyhlbnRyeSwge1xyXG4gICAgICAgIHByb2plY3REZXBlbmRlbmNpZXMsXHJcbiAgICAgICAgaW5zdGFsbGVkUGFja2FnZXMsXHJcbiAgICAgICAgcmVmZXJlbmNlczogeyBbZW50cnkubmFtZV06IGZpbmRQYWNrYWdlUmVmcyhzb3VyY2VzLCBlbnRyeS5uYW1lKSB9LFxyXG4gICAgICAgIGNhdGFsb2csXHJcbiAgICAgICAgcmVnaXN0cnlWZXJzaW9ucyxcclxuICAgIH0pKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAgIG1vZHVsZXMsXHJcbiAgICAgICAgLyoqIOacrOWcsOWuieijhea6kO+8myoq5Y+q5pyJ5pys5qGG5p6255qE5byA5Y+R5LuT5bqT6YeM5omN6Z2eIG51bGwqKu+8iOmdouWQkeeUqOaIt+eahOW3peeoi+mHjOawuOi/nOaYryBudWxs77yJICovXHJcbiAgICAgICAgbG9jYWxTb3VyY2U6IHNoYXJlZERpcixcclxuICAgICAgICAvKiog5bel56iL5pyJ5Y+v6K+755qEIHBhY2thZ2UuanNvbiDlkJcgKi9cclxuICAgICAgICBoYXNNYW5pZmVzdDogbWFuaWZlc3QgIT09IG51bGwsXHJcbiAgICAgICAgLyoqIOi/nOeoi+WIl+ihqOaLieWPluWksei0peeahOWOn+WboO+8m+S4uiBudWxsIOihqOekuui/measoeaYr+aIkOWKn+eahO+8iOaIlueUqOS6hue8k+WtmO+8iSAqL1xyXG4gICAgICAgIHJlZ2lzdHJ5RXJyb3I6IHJlZ2lzdHJ5LmVycm9yLFxyXG4gICAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOi3keS4gOasoSBucG3jgIJcclxuICpcclxuICog5YWo56iLKirkuI3mipvlvILluLgqKu+8mumAgOWHuueggeOAgXN0ZG91dOOAgXN0ZGVycuOAgeS7peWPiiBzcGF3biDoh6rouqvnmoTlpLHotKXpg73mlLbov5sgSU5wbVJ1blJlc3VsdFxyXG4gKiDlm57kvKDnu5npnaLmnb8g4oCU4oCUIOeUqOaIt+imgeeci+eahOaYryBucG0g6Ieq5bex6K+055qE6K+d77yM6ICM5LiN5piv5LiA5Y+l6L2s6L+w55qEXCLlronoo4XlpLHotKVcIuOAglxyXG4gKi9cclxuZnVuY3Rpb24gcnVuTnBtKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcsIHNwZWNzOiBzdHJpbmdbXSk6IElOcG1SdW5SZXN1bHQge1xyXG4gICAgY29uc3Qgc3Bhd25TcGVjID0gbnBtU3Bhd25TcGVjKGFjdGlvbiwgc3BlY3MpO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyAxLiAqKuS4jeaMh+WumiBlbmNvZGluZyoq77ya5ou/5Yiw5Y6f5aeLIEJ1ZmZlciDoh6rlt7Hop6PnoIHvvIzlkKbliJkgY21kIOeahCBHQksg5raI5oGv5Lya5Y+Y5Lmx56CB77ybXHJcbiAgICAgICAgLy8gMi4gKip3aW5kb3dzVmVyYmF0aW1Bcmd1bWVudHMg5b+F6aG75p2l6IeqIHNwYXduU3BlYyoq77ya5bCR5LqG5a6D77yMTm9kZSDkvJrmiormiJHliqDlpb3nmoRcclxuICAgICAgICAvLyAgICDlvJXlj7flho3ovazkuYnkuIDpgY3vvIxjbWQg5pS25YiwIGBcXFwibnBtLmNtZCBpbnN0YWxsIC4uLlxcXCJg77yM5LqO5piv5pW06KGM6KKr5b2T5oiQ5ZG95Luk5ZCNXHJcbiAgICAgICAgLy8gICAg77yI5oqlXCInbnBtLmNtZCBpbnN0YWxsIC4uLicg5LiN5piv5YaF6YOo5oiW5aSW6YOo5ZG95LukXCLvvIxucG0g5qC55pys5rKh6KKr5ZCv5Yqo77yJ44CCXHJcbiAgICAgICAgY29uc3Qgc3Bhd25lZCA9IHNwYXduU3luYyhzcGF3blNwZWMuY29tbWFuZCwgc3Bhd25TcGVjLmFyZ3MsIHtcclxuICAgICAgICAgICAgY3dkOiBwcm9qZWN0UGF0aCgpLFxyXG4gICAgICAgICAgICB0aW1lb3V0OiBOUE1fVElNRU9VVF9NUyxcclxuICAgICAgICAgICAgd2luZG93c0hpZGU6IHRydWUsXHJcbiAgICAgICAgICAgIG1heEJ1ZmZlcjogMTYgKiAxMDI0ICogMTAyNCxcclxuICAgICAgICAgICAgd2luZG93c1ZlcmJhdGltQXJndW1lbnRzOiBzcGF3blNwZWMud2luZG93c1ZlcmJhdGltQXJndW1lbnRzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBidWlsZE5wbVJlc3VsdCh7XHJcbiAgICAgICAgICAgIGNvbW1hbmQ6IGZvcm1hdE5wbUNvbW1hbmQoYWN0aW9uLCBzcGVjcyksXHJcbiAgICAgICAgICAgIGV4aXRDb2RlOiB0eXBlb2Ygc3Bhd25lZC5zdGF0dXMgPT09ICdudW1iZXInID8gc3Bhd25lZC5zdGF0dXMgOiBudWxsLFxyXG4gICAgICAgICAgICBzdGRvdXQ6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRvdXQpLFxyXG4gICAgICAgICAgICBzdGRlcnI6IGRlY29kZVByb2Nlc3NPdXRwdXQoc3Bhd25lZC5zdGRlcnIpLFxyXG4gICAgICAgICAgICBzcGF3bkVycm9yOiBzcGF3bmVkLmVycm9yXHJcbiAgICAgICAgICAgICAgICA/IHtcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAoc3Bhd25lZC5lcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogc3Bhd25lZC5lcnJvci5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gYnVpbGROcG1SZXN1bHQoe1xyXG4gICAgICAgICAgICBjb21tYW5kOiBmb3JtYXROcG1Db21tYW5kKGFjdGlvbiwgc3BlY3MpLFxyXG4gICAgICAgICAgICBleGl0Q29kZTogbnVsbCxcclxuICAgICAgICAgICAgc3Rkb3V0OiAnJyxcclxuICAgICAgICAgICAgc3RkZXJyOiAnJyxcclxuICAgICAgICAgICAgc3Bhd25FcnJvcjogeyBtZXNzYWdlOiBlcnI/Lm1lc3NhZ2UgPyBTdHJpbmcoZXJyLm1lc3NhZ2UpIDogU3RyaW5nKGVycikgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOS7o+i3kSBucG0g6KOFIC8g5Y245LiA5Liq5YWs5YWx5qih5Z2X77yM54S25ZCO5Zue5LiA5Lu95Yi35paw6L+H55qE54q25oCB44CCXHJcbiAqXHJcbiAqIOWPquaOpeWPlyBjYXRhbG9nIOmHjOWtmOWcqOeahOWMheWQjSDigJTigJQg5LiN5oqK5omp5bGV5Y+Y5oiQXCLku7vmhI8gbnBtIOWRveS7pOaJp+ihjOWZqFwi44CCXHJcbiAqL1xyXG4vKipcclxuICog6KOF5LiA5LiqKirkuI3lsZ7kuo7lhazlhbHmqKHlnZcqKueahOWMhSjmoYbmnrbjgIHnvJbovpHlmajmianlsZXoh6rlt7Ep44CCXHJcbiAqXHJcbiAqIOS4uuS7gOS5iOS4jeWkjeeUqCBydW5TaGFyZWRBY3Rpb2466YKj5p2h6Lev55qE6K+t5LmJ5pivXCLku47lhazlhbHmqKHlnZfliJfooajph4zoo4XkuIDkuKpcIixcclxuICog5Lya5YWI5ZyoIGNhdGFsb2cg6YeM5p+l5ZCN5a2XIOKAlOKAlCDogIzmoYbmnrbkuI7mianlsZUqKuacrOadpeWwseiiq+aOkumZpOWcqOWFrOWFseaooeWdl+WIl+ihqOS5i+WklioqXHJcbiAqICjlroPku6zkuI3or6Xlh7rnjrDlnKjkvb/nlKjogIXnmoTlhazlhbHmqKHlnZfpobXph4wpLOS6juaYr+W/heeEtuaKpVwi5LiN5Zyo5Y+v5a6J6KOF5YiX6KGo6YeM55qE5YyFXCLjgIJcclxuICog5Lik5Lu25LqL55qE5ZCI5rOV5YyF6ZuG5ZCI5LiN5ZCMLOWwseS4jeivpeWFseeUqOS4gOS4quWFpeWPo+OAglxyXG4gKi9cclxuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFByb2plY3RQYWNrYWdlKHNwZWM6IHN0cmluZyk6IFByb21pc2U8eyBvazogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIHwgbnVsbDsgdmVyc2lvbjogc3RyaW5nIHwgbnVsbCB9PiB7XHJcbiAgICBpZiAoIXNwZWMgfHwgdHlwZW9mIHNwZWMgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgRXJyb3IoJ+e8uuWwkeWMheWQjScpO1xyXG4gICAgY29uc3Qgcm9vdCA9IHByb2plY3RQYXRoKCk7XHJcbiAgICBjb25zdCBjb21tYW5kID0gJ25wbSBpbnN0YWxsICcgKyBzcGVjO1xyXG4gICAgY29uc3Qgc3Bhd25TcGVjID0gbnBtU3Bhd25TcGVjKCdpbnN0YWxsJywgW3NwZWNdKTtcclxuICAgIGNvbnN0IHsgcmVzdWx0IH0gPSBhd2FpdCBydW5OcG1Bc3luYyhjb21tYW5kLCBzcGF3blNwZWMsIHJvb3QsIE5QTV9USU1FT1VUX01TKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgb2s6IHJlc3VsdC5vayxcclxuICAgICAgICBtZXNzYWdlOiByZXN1bHQub2sgPyBudWxsIDogKHJlc3VsdC5oaW50ID8/ICgnbnBtIOmAgOWHuueggSAnICsgKHJlc3VsdC5leGl0Q29kZSA/PyAn5pyq55+lJykpKSxcclxuICAgICAgICB2ZXJzaW9uOiBudWxsLFxyXG4gICAgfTtcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gcnVuU2hhcmVkQWN0aW9uKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcsIHBhY2thZ2VOYW1lOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xyXG4gICAgLy8g6Z2i5p2/5Y+v6IO95Lyg5a2X56ym5LiyLOS5n+WPr+iDveS4jeWwj+W/g+WMheaIkOaVsOe7hCDigJTigJQg5Lik56eN6YO95pS2LFxyXG4gICAgLy8g5Yir6K6pXCLlsJHkuIDkuKrmi6zlj7dcIuWPmOaIkOeUqOaIt+eci+WIsOeahFwi57y65bCR5YyF5ZCNXCLjgIJcclxuICAgIGNvbnN0IHdhbnRlZCA9IEFycmF5LmlzQXJyYXkocGFja2FnZU5hbWUpID8gKHBhY2thZ2VOYW1lIGFzIGFueSlbMF0gOiBwYWNrYWdlTmFtZTtcclxuICAgIGlmICghd2FudGVkIHx8IHR5cGVvZiB3YW50ZWQgIT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCfnvLrlsJHljIXlkI0nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBiZWZvcmUgPSBhd2FpdCBxdWVyeVNoYXJlZFN0YXRlKCk7XHJcbiAgICBjb25zdCBlbnRyeSA9IGJlZm9yZS5tb2R1bGVzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gd2FudGVkKTtcclxuICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICBjb25zdCBrbm93biA9IGJlZm9yZS5tb2R1bGVzLm1hcCgobSkgPT4gbS5uYW1lKTtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIGDkuI3lnKjlj6/lronoo4XliJfooajph4znmoTljIXvvJoke3dhbnRlZH1gXHJcbiAgICAgICAgICAgICsgKGtub3duLmxlbmd0aCA/IGDvvIjlvZPliY3liJfooajvvJoke2tub3duLmpvaW4oJywgJyl977yJYCA6ICfvvIjlvZPliY3liJfooajkuLrnqbrvvIknKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWuieijheimgeaKiioq5pys5Zyw6IO96Kej5p6Q5Yiw55qE5L6d6LWW5LiA6LW35bim5LiKKirvvJrlj6roo4XlroPkuIDkuKrnmoTor53vvIxucG0g5Lya5Y67IHJlZ2lzdHJ5IOaJvuS+nei1lu+8jFxyXG4gICAgLy8g6ICM5pys5Zyw5rqQ6YeM55qE5L6d6LWW5bm25rKh5pyJ5Y+R5biDIOKAlOKAlCDlv4XnhLYgRTQwNO+8iOWunua1i+i/h++8ieOAglxyXG4gICAgLy8g5Y246L295oyJKirljIXlkI0qKu+8iG5wbSDorqTljIXlkI3vvIzkuI3orqQgZmlsZTog6K+05piO56ym77yJ44CCXHJcbiAgICBjb25zdCBzcGVjcyA9IGFjdGlvbiA9PT0gJ3VuaW5zdGFsbCdcclxuICAgICAgICA/IFtlbnRyeS5uYW1lXVxyXG4gICAgICAgIDogY29sbGVjdEluc3RhbGxTcGVjcyhlbnRyeSwgYmVmb3JlLm1vZHVsZXMpO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gcnVuTnBtKGFjdGlvbiwgc3BlY3MpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICog5aSx6LSlKirkuI3mipvlvILluLgqKu+8mumdouadv+mcgOimgeaLv+WIsOe7k+aehOWMlueahOe7k+aenO+8iOWRveS7pOOAgemAgOWHuueggeOAgeWOn+Wni+i+k+WHuu+8ie+8jFxyXG4gICAgICAgICAqIOaJjeiDveWcqOW8ueeql+mHjOWOn+agt+WxleekuiBucG0g6Ieq5bex6K+055qE6K+d44CC6Z2e5rOV6L6T5YWl5LuN54S25oqbIOKAlOKAlCDpgqPmmK/osIPnlKjmlrnlhpnplJnkuobjgIJcclxuICAgICAgICAgKi9cclxuICAgICAgICBvazogcmVzdWx0Lm9rLFxyXG4gICAgICAgIHJlc3VsdCxcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiDlpLHotKXml7bkuIDlj6UqKuWNleihjCoq5pGY6KaB77yI6Z2i5p2/5raI5oGv5Yy655So77yJ44CC5a6M5pW06L6T5Ye65ZyoIGByZXN1bHRgIOmHjO+8jOeUseW8ueeql+WxleekuiDigJTigJRcclxuICAgICAgICAgKiDkuYvliY3miormlbTmrrUgbnBtIOi+k+WHuuWhnui/m+a2iOaBr+WMuu+8jOS8muaKiuWPs+agj+aMpOWPmOW9ouW5tuWSjOa2iOaBr+WPoOWcqOS4gOi1t+OAglxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIG1lc3NhZ2U6IHJlc3VsdC5vayA/IG51bGwgOiBzdW1tYXJpemVOcG1GYWlsdXJlKGFjdGlvbiwgd2FudGVkLCByZXN1bHQpLFxyXG4gICAgICAgIC8vIOijheWujOeri+WIu+WbnuS4gOS7veaWsOeKtuaAge+8jOmdouadv+S4jeeUqOWGjei3keS4gOasoeafpeivolxyXG4gICAgICAgIC4uLnF1ZXJ5U2hhcmVkU3RhdGUoKSxcclxuICAgIH07XHJcbn1cclxuXHJcbi8qKiDotYTmupDmmK/lkKblrZjlnKggKi9cclxuZnVuY3Rpb24gYXNzZXRFeGlzdHModXJsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHJldHVybiBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgdXJsKS50aGVuKChpbmZvOiB1bmtub3duKSA9PiAhIWluZm8pO1xyXG59XHJcblxyXG4vKipcclxuICog56Gu5L+d55uu5b2V5a2Y5Zyo77yM5LiN5a2Y5Zyo5YiZ5Yib5bu6XHJcbiAqL1xyXG5hc3luYyBmdW5jdGlvbiBlbnN1cmVEaXIoZGlyVXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgZGlyVXJsKTtcclxuICAgIGlmICghaW5mbykge1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIGRpclVybCwgbnVsbCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKiDnm67lvZXkuI3lrZjlnKjliJnlu7rvvIznqbrnm67lvZXliJnliKDmjonvvIjnlJ/miJAv5Yig6Zmk5ZCO5riF55CG55So77yJICovXHJcbmFzeW5jIGZ1bmN0aW9uIHBydW5lRW1wdHlEaXIoYWJzRGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHN0YXRTeW5jKGFic0RpcikuaXNEaXJlY3RvcnkoKSAmJiByZWFkZGlyU3luYyhhYnNEaXIpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZW1vdmVTeW5jKGFic0Rpcik7XHJcbiAgICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIC8qIOS4jeWtmOWcqOWwseeul+S6hiAqL1xyXG4gICAgfVxyXG59XHJcblxyXG4vKiog5om+5Ye65byV55So5LqG5oyH5a6aIGNpZCDpm4blkIjnmoTlt7Lluo/liJfljJbotYTmupAgKi9cclxuZnVuY3Rpb24gZmluZEFzc2V0UmVmcyhzbmFwOiBJUHJvamVjdFNuYXBzaG90LCBjaWRzOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuICAgIGNvbnN0IGhpdHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAoIWNpZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGhpdHM7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IHJlbCBvZiBPYmplY3Qua2V5cyhzbmFwLnNlcmlhbGl6ZWQpKSB7XHJcbiAgICAgICAgY29uc3QgdGV4dCA9IHNuYXAuc2VyaWFsaXplZFtyZWxdO1xyXG4gICAgICAgIGlmIChjaWRzLnNvbWUoKGNpZCkgPT4gdGV4dC5pbmNsdWRlcyhjaWQpKSkge1xyXG4gICAgICAgICAgICBoaXRzLnB1c2gocmVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGl0cztcclxufVxyXG5cclxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5pa55rOVIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5leHBvcnQgY29uc3QgbWV0aG9kczogeyBba2V5OiBzdHJpbmddOiAoLi4uYW55OiBhbnkpID0+IGFueSB9ID0ge1xyXG4gICAgLyoqIOabtOaWsOahhuaetjrnm7TmjqXmjIkgc3BlYyDoo4Us5LiN6L+b5YWs5YWx5qih5Z2X5YiX6KGoICovXHJcbiAgICBhc3luYyB1cGRhdGVGcmFtZXdvcmtQYWNrYWdlKCkge1xyXG4gICAgICAgIHJldHVybiBpbnN0YWxsUHJvamVjdFBhY2thZ2UoJ0BjY2dmL2ZyYW1ld29ya0BsYXRlc3QnKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOabtOaWsOaJqeWxlTroo4XliLAgbm9kZV9tb2R1bGVzIOWQjioq5b+F6aG7KirokL3liLAgZXh0ZW5zaW9ucy8g4oCU4oCUIOe8lui+keWZqOWPquiupOmCo+mHjCAqL1xyXG4gICAgYXN5bmMgdXBkYXRlRXh0ZW5zaW9uUGFja2FnZSgpIHtcclxuICAgICAgICBjb25zdCByID0gYXdhaXQgaW5zdGFsbFByb2plY3RQYWNrYWdlKCdjY2dmLWdhbWUtdG9vbEBsYXRlc3QnKTtcclxuICAgICAgICBpZiAoIXIub2spIHJldHVybiByO1xyXG4gICAgICAgIGNvbnN0IHMgPSB0aGlzLnN5bmNFeHRlbnNpb24oJ2NjZ2YtZ2FtZS10b29sJyk7XHJcbiAgICAgICAgcmV0dXJuIHsgb2s6IHMub2sgIT09IGZhbHNlLCBtZXNzYWdlOiBzLm1lc3NhZ2UgPz8gbnVsbCwgdmVyc2lvbjogcy52ZXJzaW9uID8/IG51bGwgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmoYbmnrbkuI7mianlsZXlkIToh6rnmoTniYjmnKzkv6Hmga8o5pys5ZywICsgbnBtIOacgOaWsCnjgIJcclxuICAgICAqXHJcbiAgICAgKiDmianlsZXoh6rouqvniYjmnKzor7vlroPoh6rlt7HnmoQgcGFja2FnZS5qc29uO+ahhuaetueJiOacrOivu+W3peeoiyBub2RlX21vZHVsZXMg6YeM55qE6YKj5Lu9IOKAlOKAlFxyXG4gICAgICog5Lik6ICF6YO95pivXCLlrp7pmYXoo4Xkuobku4DkuYhcIueahOS6i+WunizkuI3mmK/phY3nva7ph4zlhpnkuobku4DkuYjjgIJcclxuICAgICAqIOacieayoeacieaWsOeJiOS6pOe7memdouadv+avlOi+gyB2ZXJzaW9uIOS4jiBsYXRlc3Qs6L+Z6YeM5LiN5pu/5a6D5Yik5patKOWFjeW+l+S4pOi+ueWQhOWGmeS4gOWllynjgIJcclxuICAgICAqL1xyXG4gICAgLyoqXHJcbiAgICAgKiDmioogbm9kZV9tb2R1bGVzIOmHjOeahOaJqeWxleaLt+i/myBleHRlbnNpb25zL+OAglxyXG4gICAgICpcclxuICAgICAqIOe8lui+keWZqCoq5Y+q5LuO5bel56iL55qEIGV4dGVuc2lvbnMvIOWKoOi9veaJqeWxlSoqLOaJgOS7pSBucG0gaW5zdGFsbCDlrozlv4XpobvokL3ov5nkuIDnm5gsXHJcbiAgICAgKiDlkKbliJlcIuabtOaWsOaIkOWKn1wi5Y+q5Y+R55Sf5ZyoIG5vZGVfbW9kdWxlcyDph4ws57yW6L6R5Zmo6YeM5LiA54K55Y+Y5YyW6YO95rKh5pyJ44CCXHJcbiAgICAgKiDokL3nm5jkuYvlkI7pnIDopoHph43lkK/nvJbovpHlmajmiY3nlJ/mlYgg4oCU4oCUIOi/meS4gOeCueeUsemdouadv+aWh+ahiOWRiuefpSzov5nph4zkuI3lgYfoo4Xng63mm7TmlrDjgIJcclxuICAgICAqL1xyXG4gICAgc3luY0V4dGVuc2lvbihuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCByb290ID0gcHJvamVjdFBhdGgoKTtcclxuICAgICAgICBjb25zdCBmcm9tID0gam9pbihyb290LCBcIm5vZGVfbW9kdWxlc1wiLCBuYW1lKTtcclxuICAgICAgICBpZiAoIWV4aXN0c1N5bmMoZnJvbSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgb2s6IGZhbHNlLCBtZXNzYWdlOiBcIm5vZGVfbW9kdWxlcyDph4zmsqHmnIkgXCIgKyBuYW1lICsgXCIs5YWI5a6J6KOF5YaN6JC955uYXCIgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdG8gPSBqb2luKHJvb3QsIFwiZXh0ZW5zaW9uc1wiLCBuYW1lLnNwbGl0KFwiL1wiKS5wb3AoKSBhcyBzdHJpbmcpO1xyXG4gICAgICAgIHJlbW92ZVN5bmModG8pO1xyXG4gICAgICAgIGNvcHlTeW5jKGZyb20sIHRvKTtcclxuICAgICAgICAvLyDlm57miqUqKuWunumZheaLt+i/h+WOu+eahOeJiOacrCoqOui/meagt+mdouadv+iDveivtFwi5bey5pu05paw5YiwIHgueS56XCLogIzkuI3mmK/mi78gbGF0ZXN0IOeMnOOAglxyXG4gICAgICAgIGxldCB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB2ZXJzaW9uID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoam9pbih0bywgJ3BhY2thZ2UuanNvbicpLCAndXRmOCcpKS52ZXJzaW9uID8/IG51bGw7XHJcbiAgICAgICAgfSBjYXRjaCB7IC8qIOivu+S4jeWIsOWwseeul+S6hizkuI3nvJbkuIDkuKogKi8gfVxyXG4gICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCBwYXRoOiB0bywgdmVyc2lvbiB9O1xyXG4gICAgfSxcclxuXHJcbiAgICBhc3luYyBxdWVyeVZlcnNpb25zKGZvcmNlUmVnaXN0cnkgPSBmYWxzZSkge1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBwcm9qZWN0UGF0aCgpO1xyXG4gICAgICAgIGNvbnN0IHJlZ2lzdHJ5ID0gYXdhaXQgcXVlcnlSZWdpc3RyeShmb3JjZVJlZ2lzdHJ5KTtcclxuICAgICAgICBjb25zdCBsYXRlc3RPZiA9IChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaGl0ID0gcmVnaXN0cnkuZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBoaXQgPyBoaXQudmVyc2lvbiA6IG51bGw7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZnJhbWV3b3JrTmFtZSA9ICdAY2NnZi9mcmFtZXdvcmsnO1xyXG4gICAgICAgIGNvbnN0IGZyYW1ld29yayA9IHJlYWRJbnN0YWxsZWRQYWNrYWdlKHJvb3QsIGZyYW1ld29ya05hbWUpO1xyXG5cclxuICAgICAgICAvKiog5pys5LuT5bqT55qE5byA5Y+R5bel5L2c5Yy6OuahhuaetuaYr+a6kOeggeOAgeaJqeWxleWwseaYr+i/meS4gOS7vSDigJTigJQg6Z2i5p2/5o2u5q2k5pS556ew5ZG85bm256aB55So5pu05pawICovXHJcbiAgICAgICAgY29uc3QgaW5Xb3Jrc3BhY2UgPSBleGlzdHNTeW5jKGpvaW4ocm9vdCwgJ2Fzc2V0cy9zY3JpcHRzL2ZyYW1ld29yaycpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZnJhbWV3b3JrOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBmcmFtZXdvcmtOYW1lLFxyXG4gICAgICAgICAgICAgICAgaW5zdGFsbGVkOiBmcmFtZXdvcmsuaW5zdGFsbGVkLFxyXG4gICAgICAgICAgICAgICAgd29ya3NwYWNlOiBpbldvcmtzcGFjZSxcclxuICAgICAgICAgICAgICAgIHZlcnNpb246IGZyYW1ld29yay52ZXJzaW9uLFxyXG4gICAgICAgICAgICAgICAgbGF0ZXN0OiBsYXRlc3RPZihmcmFtZXdvcmtOYW1lKSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXh0ZW5zaW9uOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBwYWNrYWdlSlNPTi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogcGFja2FnZUpTT04udmVyc2lvbixcclxuICAgICAgICAgICAgICAgIHdvcmtzcGFjZTogaW5Xb3Jrc3BhY2UsXHJcbiAgICAgICAgICAgICAgICBsYXRlc3Q6IGxhdGVzdE9mKHBhY2thZ2VKU09OLm5hbWUpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG4gICAgb3BlbldvcmtiZW5jaCgpIHtcclxuICAgICAgICBFZGl0b3IuUGFuZWwub3BlbihgJHtwYWNrYWdlSlNPTi5uYW1lfS53b3JrYmVuY2hgKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqIOmdouadv+eahOWxgue6p+S4i+aLieeUseS4u+i/m+eoi+S4i+WPke+8jOmBv+WFjeaJqeWxlemHjOWHuueOsOesrOS6jOS7veWxgue6p+WIl+ihqCAqL1xyXG4gICAgcXVlcnlMYXllcnMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBbLi4uTEFZRVJTXTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDpnaLmnb/mlofmoYjvvJrku6UgaTE4bi96aC5qcyDnmoQga2V5IOWFqOmbhuS4uuWHhu+8jOmAkOS4quS6pOe7mee8lui+keWZqCBpMThuIOino+aekOW9k+WJjeivreiogOOAglxyXG4gICAgICog6L+Z5qC36Z2i5p2/5L6n5LiN6ZyA6KaB5Yik5pat6K+t6KiA77yM5Lmf5LiN5L6d6LWWIEVkaXRvci5JMThuIOaYr+WQpuWtmOWcqOS6jumdouadv+S4iuS4i+aWh+mHjOOAglxyXG4gICAgICovXHJcbiAgICBxdWVyeUkxOG4oKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3QgdGFibGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhaSF9TVFJJTkdTKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmdWxsID0gYCR7cGFja2FnZUpTT04ubmFtZX0uJHtrZXl9YDtcclxuICAgICAgICAgICAgbGV0IHRleHQgPSBaSF9TVFJJTkdTW2tleV07XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaXQgPSBFZGl0b3IuSTE4bi50KGZ1bGwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGhpdCAmJiBoaXQgIT09IGZ1bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gaGl0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvKiDnvJbovpHlmaggaTE4biDkuI3lj6/nlKjlsLHkv53nlZnkuK3mlocgKi9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0YWJsZVtrZXldID0gdGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog6aKE5Yi25L2T5qih5p2/5YiX6KGo77yI5L6b6Z2i5p2/5LiL5ouJ77yJICovXHJcbiAgICBxdWVyeVRlbXBsYXRlcygpOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4ge1xyXG4gICAgICAgIHJldHVybiBQUkVGQUJfVEVNUExBVEVTLm1hcCgoaWQpID0+ICh7IGlkLCBsYWJlbDogUFJFRkFCX1RFTVBMQVRFX0xBQkVMU1tpZF0gfSkpO1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOafpeivoiBnYW1lcGxheSDkuIvlt7LmnInnmoTmqKHlnZfliJfooajvvIjlkKsgb3JkZXLvvInjgIJcclxuICAgICAqIOS4juS9k+ajgOWFseeUqCBkb2N0b3IubGlzdE1vZHVsZXPvvIzkv53or4HpnaLmnb/mmL7npLrlkozkvZPmo4DliKTlrprkuIDoh7TjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcXVlcnlNb2R1bGVzKCkge1xyXG4gICAgICAgIGNvbnN0IHNuYXAgPSBzbmFwc2hvdCgpO1xyXG4gICAgICAgIHJldHVybiBsaXN0TW9kdWxlcyhzbmFwKS5tYXAoKG0pID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IG0uZGlyLFxyXG4gICAgICAgICAgICBvcmRlcjogbS5vcmRlciA/PyAwLFxyXG4gICAgICAgICAgICBoYXNNb2RlbDogbS5tb2RlbEZpbGUgIT09IG51bGwsXHJcbiAgICAgICAgICAgIGhhc01vZHVsZTogdHJ1ZSxcclxuICAgICAgICAgICAgLy8g6Z2i5p2/55So6L+Z5LiJ5Liq6Lev5b6E5YGa44CM5LiA6ZSu5omT5byA6ISa5pys44CN77ybZXZlbnRzRmlsZSDlj6/og73kuLogbnVsbO+8iOiAgeaooeWdl++8iVxyXG4gICAgICAgICAgICBtb2R1bGVGaWxlOiBtLm1vZHVsZUZpbGUsXHJcbiAgICAgICAgICAgIG1vZGVsRmlsZTogbS5tb2RlbEZpbGUsXHJcbiAgICAgICAgICAgIGV2ZW50c0ZpbGU6IG0uZXZlbnRzRmlsZSxcclxuICAgICAgICB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDlkK/liqjpobrluo/pooTop4ggKyDlsYLnuqfljaDnlKjvvIjlvIDlj5HovoXliqnvvIkgKi9cclxuICAgIGFzeW5jIHF1ZXJ5T3ZlcnZpZXcoKSB7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgY29uc3Qgdmlld3MgPSBsaXN0Vmlld3Moc25hcCk7XHJcbiAgICAgICAgY29uc3QgdXNhZ2UgPSBMQVlFUlMubWFwKChsYXllcikgPT4gKHtcclxuICAgICAgICAgICAgbGF5ZXIsXHJcbiAgICAgICAgICAgIHZpZXdzOiB2aWV3cy5maWx0ZXIoKHYpID0+IHYucmVnaXN0ZXJlZExheWVyID09PSBsYXllcikubWFwKCh2KSA9PiB2LmNsYXNzTmFtZSksXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIGNvbnN0IG1vZHVsZXMgPSBsaXN0TW9kdWxlcyhzbmFwKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvcmRlcjogYnVpbGRPcmRlclBsYW4oc25hcCksXHJcbiAgICAgICAgICAgIGxheWVyczogdXNhZ2UsXHJcbiAgICAgICAgICAgIG1vZHVsZUNvdW50OiBtb2R1bGVzLmxlbmd0aCxcclxuICAgICAgICAgICAgbWFuYWdlckNvdW50OiBsaXN0TWFuYWdlcnMoc25hcCkubGVuZ3RoLFxyXG4gICAgICAgICAgICB2aWV3Q291bnQ6IHZpZXdzLmxlbmd0aCxcclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5LiA6ZSu5L2T5qOAICovXHJcbiAgICBhc3luYyBydW5Eb2N0b3IoKTogUHJvbWlzZTx7IGZpbmRpbmdzOiBJRmluZGluZ1tdOyBzdW1tYXJ5OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IH0+IHtcclxuICAgICAgICBjb25zdCBmaW5kaW5ncyA9IHJ1bkRvY3RvcihzbmFwc2hvdCgpLCBMQVlFUlMpO1xyXG4gICAgICAgIGNvbnN0IHN1bW1hcnkgPSB7IGVycm9yOiAwLCB3YXJuOiAwLCBpbmZvOiAwIH07XHJcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpbmRpbmdzKSB7XHJcbiAgICAgICAgICAgIHN1bW1hcnlbZi5zZXZlcml0eV0gPSAoc3VtbWFyeVtmLnNldmVyaXR5XSA/PyAwKSArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGZpbmRpbmdzLCBzdW1tYXJ5IH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+i5p+Q5qih5Z2X55qEIFZpZXcg5YiX6KGo44CCXHJcbiAgICAgKiDmr5Tml6flrp7njrDlpJrkuoYgcHJlZmFiRXhpc3RzIOKAlOKAlCDml6fniYjmjInnuqblrprmi7wgVVJMIOWNtOS7juS4jeafpeebmO+8jFxyXG4gICAgICog5LqO5piv4oCc6ISa5pys5Zyo44CB6aKE5Yi25L2T5Lii5LqG4oCd55qEIFZpZXcg5Lmf5Lya6KKr5YiX5Ye65p2l77yM54K55LqG5omN5aSx6LSl44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHF1ZXJ5Vmlld3MobW9kdWxlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3Qgc25hcCA9IHNuYXBzaG90KCk7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RWaWV3cyhzbmFwKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh2KSA9PiB2Lm1vZHVsZURpciA9PT0gbW9kdWxlRGlyKVxyXG4gICAgICAgICAgICAubWFwKCh2KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogdi5jbGFzc05hbWUsXHJcbiAgICAgICAgICAgICAgICBzY3JpcHRVcmw6IGRiVXJsKHYuc2NyaXB0RmlsZSksXHJcbiAgICAgICAgICAgICAgICBwcmVmYWJVcmw6IHYucmVnaXN0ZXJlZFBhdGggPyBkYlVybChgJHtSRVNPVVJDRVNfRElSfS8ke3YucmVnaXN0ZXJlZFBhdGh9LnByZWZhYmApIDogJycsXHJcbiAgICAgICAgICAgICAgICBwcmVmYWJFeGlzdHM6IHYucmVnaXN0ZXJlZFBhdGggPyBzbmFwLnByZWZhYnNCeVJlc291cmNlUGF0aFt2LnJlZ2lzdGVyZWRQYXRoXSAhPT0gdW5kZWZpbmVkIDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBsYXllcjogdi5yZWdpc3RlcmVkTGF5ZXIgPz8gJycsXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgIH0sXHJcblxyXG4gICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbmFnZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgLyoqIG1hbmFnZXIg5YiX6KGo77yIYXNzZXRzL3NjcmlwdHMvbWFuYWdlciDkuIvnm7TlsZ7nmoQgKk1hbmFnZXIudHPvvIkgKi9cclxuICAgIGFzeW5jIHF1ZXJ5TWFuYWdlcnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIGxpc3RNYW5hZ2VycyhzbmFwc2hvdCgpKS5tYXAoKG0pID0+ICh7XHJcbiAgICAgICAgICAgIG5hbWU6IG0uY2xhc3NOYW1lLFxyXG4gICAgICAgICAgICBmaWxlOiBtLnNjcmlwdEZpbGUsXHJcbiAgICAgICAgICAgIGV4dGVuZHNTaW5nbGV0b246IG0uZXh0ZW5kc1NpbmdsZXRvbixcclxuICAgICAgICAgICAgYmFzZUNsYXNzOiBtLmJhc2VDbGFzcyxcclxuICAgICAgICB9KSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yib5bu6IG1hbmFnZXLvvJrnlJ/miJDkuIDkuKrnu6fmib/moYbmnrYgQVNpbmdsZXRvbiDnmoTlhajlsYDljZXkvovohJrmnKzjgIJcclxuICAgICAqIEBwYXJhbSBtYW5hZ2VyTmFtZSDlkI3lrZfvvIzlpoIgXCJjb25maWdcIiAvIFwiQ29uZmlnXCIgLyBcIkNvbmZpZ01hbmFnZXJcIlxyXG4gICAgICovXHJcbiAgICBhc3luYyBjcmVhdGVNYW5hZ2VyKG1hbmFnZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1hbmFnZXJOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobWFuYWdlck5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG1hbmFnZXIg5ZCNOiBcIiR7bWFuYWdlck5hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplTWFuYWdlck5hbWUobWFuYWdlck5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRpclVybCA9IGBkYjovLyR7TUFOQUdFUl9ESVJ9YDtcclxuICAgICAgICBhd2FpdCBlbnN1cmVEaXIoZGlyVXJsKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2NyaXB0VXJsID0gYCR7ZGlyVXJsfS8ke2NsYXNzTmFtZX0udHNgO1xyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhzY3JpcHRVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbWFuYWdlciDlt7LlrZjlnKjvvJoke2NsYXNzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTlroPvvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHNjcmlwdFVybCwgYnVpbGRNYW5hZ2VyU2NyaXB0KGNsYXNzTmFtZSwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoIWFzc2V0KSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu6IG1hbmFnZXIg5aSx6LSlOiAke3NjcmlwdFVybH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkaXJVcmwpO1xyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgc2NyaXB0VXJsLCBmaWxlOiBgJHtNQU5BR0VSX0RJUn0vJHtjbGFzc05hbWV9LnRzYCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiog5Yig6ZmkIG1hbmFnZXIg6ISa5pysICovXHJcbiAgICBhc3luYyBkZWxldGVNYW5hZ2VyKG1hbmFnZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1hbmFnZXJOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobWFuYWdlck5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qEIG1hbmFnZXIg5ZCNOiBcIiR7bWFuYWdlck5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplTWFuYWdlck5hbWUobWFuYWdlck5hbWUpO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGBkYjovLyR7TUFOQUdFUl9ESVJ9LyR7Y2xhc3NOYW1lfS50c2A7XHJcblxyXG4gICAgICAgIGNvbnN0IGluZm8gPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdxdWVyeS1hc3NldC1pbmZvJywgc2NyaXB0VXJsKTtcclxuICAgICAgICBpZiAoIWluZm8pIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLAgbWFuYWdlciDohJrmnKzvvJoke2NsYXNzTmFtZX0udHNgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKTtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtNQU5BR0VSX0RJUn1gKTtcclxuICAgICAgICByZXR1cm4geyBjbGFzc05hbWUsIHJlbW92ZWQ6IHNjcmlwdFVybCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIoOmZpOaooeWdl+WJjeeahOW8leeUqOajgOafpe+8muWTquS6m+i1hOa6kOW8leeUqOS6huivpeaooeWdl+eahOiEmuacrOOAglxyXG4gICAgICog6Z2i5p2/5Zyo56Gu6K6k5qGG6YeM5bGV56S677yM6YG/5YWN5Yig5a6M55WZ5LiL5oKs56m65byV55So44CCXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHF1ZXJ5TW9kdWxlUmVmcyhtb2R1bGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIW1vZHVsZU5hbWUgfHwgIUlERU5USUZJRVJfUkUudGVzdChtb2R1bGVOYW1lKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOaooeWdl+WQjTogXCIke21vZHVsZU5hbWV9XCJgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyID0gbm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLmRpcjtcclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCB2aWV3cyA9IGxpc3RWaWV3cyhzbmFwKS5maWx0ZXIoKHYpID0+IHYubW9kdWxlRGlyID09PSBtb2R1bGVEaXIpO1xyXG4gICAgICAgIGNvbnN0IGNpZHMgPSB2aWV3cy5tYXAoKHYpID0+IHNuYXAuc2NyaXB0Q2lkc1t2LnNjcmlwdEZpbGVdKS5maWx0ZXIoQm9vbGVhbik7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlQ2lkID0gc25hcC5zY3JpcHRDaWRzW2Ake0dBTUVQTEFZX0RJUn0vJHttb2R1bGVEaXJ9LyR7bm9ybWFsaXplTW9kdWxlKG1vZHVsZU5hbWUpLm1vZHVsZUNsYXNzfS50c2BdO1xyXG4gICAgICAgIGNvbnN0IGFsbENpZHMgPSBtb2R1bGVDaWQgPyBjaWRzLmNvbmNhdChbbW9kdWxlQ2lkXSkgOiBjaWRzO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZpZXdzOiB2aWV3cy5tYXAoKHYpID0+IHYuY2xhc3NOYW1lKSxcclxuICAgICAgICAgICAgcmVmZXJlbmNlZEJ5OiBmaW5kQXNzZXRSZWZzKHNuYXAsIGFsbENpZHMpLFxyXG4gICAgICAgIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDlnKjnvJbovpHlmajph4zmiZPlvIDmn5DkuKrlt6XnqIvlhoXmlofku7bvvIjkvZPmo4Dnu5Pmnpwv5qaC6KeI54K55Ye75a6a5L2N55So77yJICovXHJcbiAgICBhc3luYyBvcGVuU291cmNlKHJlbFBhdGg6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghcmVsUGF0aCB8fCByZWxQYXRoLmluY2x1ZGVzKCcuLicpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6Lev5b6EOiBcIiR7cmVsUGF0aH1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB1cmwgPSBkYlVybChyZWxQYXRoKTtcclxuICAgICAgICAvLyDlhYjnoa7orqTotYTmupDlrZjlnKjkuJTlt7LooqvnvJbovpHlmajlr7zlhaXvvIzlho3osIjmiZPlvIDvvJvlkKbliJnnu5nlh7rmmI7noa7ljp/lm6BcclxuICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHVybCk7XHJcbiAgICAgICAgaWYgKCFpbmZvKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6LWE5rqQ5LiN5a2Y5Zyo5oiW5pyq6KKr57yW6L6R5Zmo5a+85YWlOiAke3JlbFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ29wZW4tYXNzZXQnLCB1cmwpO1xyXG4gICAgICAgIHJldHVybiB7IHVybCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIm+W7uuaooeWdl++8mueUn+aIkCBNb2R1bGUgKyBNb2RlbCArIOS6i+S7tuWjsOaYjiDkuInkuKrohJrmnKzjgIJcclxuICAgICAqIEBwYXJhbSBtb2R1bGVOYW1lIOaooeWdl+WQje+8jOWmgiBcImJhZ1wiIC8gXCJCYWdcIiAvIFwiQmFnTW9kdWxlXCJcclxuICAgICAqIEBwYXJhbSBvcmRlciAgICAgIOaooeWdl+WQr+WKqOmhuuW6j1xyXG4gICAgICovXHJcbiAgICBhc3luYyBjcmVhdGVNb2R1bGUobW9kdWxlTmFtZTogc3RyaW5nLCBvcmRlcjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwi77yM6K+35L2/55So5ZCI5rOV55qE5qCH6K+G56ymYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3JkZXIgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNGaW5pdGUob3JkZXIpIHx8IG9yZGVyIDwgMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahCBvcmRlcjogJHtvcmRlcn1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5hbWluZyA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKTtcclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJVcmwgPSBgZGI6Ly8ke0dBTUVQTEFZX0RJUn0vJHtuYW1pbmcuZGlyfWA7XHJcblxyXG4gICAgICAgIC8vIOWFiOafpeWtmOWcqOaAp++8jOe7meWHuuaYjuehruWOn+WboO+8iOaXp+eJiOWPquWcqCBjcmVhdGUtYXNzZXQg6L+U5Zue56m65pe26K+04oCc5Y+v6IO95bey5a2Y5Zyo4oCd77yJXHJcbiAgICAgICAgY29uc3QgbW9kdWxlVXJsID0gYCR7bW9kdWxlRGlyVXJsfS8ke25hbWluZy5tb2R1bGVDbGFzc30udHNgO1xyXG4gICAgICAgIGNvbnN0IG1vZGVsVXJsID0gYCR7bW9kdWxlRGlyVXJsfS8ke25hbWluZy5tb2RlbENsYXNzfS50c2A7XHJcbiAgICAgICAgY29uc3QgZXZlbnRzVXJsID0gYCR7bW9kdWxlRGlyVXJsfS8ke25hbWluZy5ldmVudHNOYW1lfS50c2A7XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKG1vZHVsZVVybCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmqKHlnZflt7LlrZjlnKjvvJoke25hbWluZy5tb2R1bGVDbGFzc30udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKG1vZGVsVXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOaooeWei+W3suWtmOWcqO+8miR7bmFtaW5nLm1vZGVsQ2xhc3N9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk6K+l5qih5Z2X77yJYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhd2FpdCBhc3NldEV4aXN0cyhldmVudHNVcmwpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5LqL5Lu25aOw5piO5bey5a2Y5Zyo77yaJHtuYW1pbmcuZXZlbnRzTmFtZX0udHPvvIjlpoLpnIDph43lu7rvvIzor7flhYjliKDpmaTor6XmqKHlnZfvvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihtb2R1bGVEaXJVcmwpO1xyXG5cclxuICAgICAgICAvKiog5bey5Yib5bu65oiQ5Yqf55qE6LWE5rqQ77yb5Lu75LiA5q2l5aSx6LSl5pe25oyJ6YCG5bqP5Zue5rua77yM6YG/5YWN55WZ5LiL5Y2K5oiQ5ZOBICovXHJcbiAgICAgICAgY29uc3QgY3JlYXRlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBjb25zdCBjcmVhdGVPclJvbGxiYWNrID0gYXN5bmMgKHVybDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgYXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHVybCwgY29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICghYXNzZXQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gY3JlYXRlZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRvbmUgb2YgY3JlYXRlZC5yZXZlcnNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCBkb25lKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIG1vZHVsZURpclVybCk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAgICAgYOWIm+W7uiR7bGFiZWx95aSx6LSlOiAke3VybH0ke2NvdW50ID4gMCA/IGDvvIjlt7Llm57mu5ogJHtjb3VudH0g5Liq5paH5Lu277yJYCA6ICcnfWAsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNyZWF0ZWQucHVzaCh1cmwpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGF3YWl0IGNyZWF0ZU9yUm9sbGJhY2soXHJcbiAgICAgICAgICAgIG1vZHVsZVVybCwgYnVpbGRNb2R1bGVTY3JpcHQobmFtaW5nLm1vZHVsZUNsYXNzLCBuYW1pbmcubW9kZWxDbGFzcywgb3JkZXIsIGZyYW1ld29ya0ltcG9ydE1vZGUoKSksICfmqKHlnZcnLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYXdhaXQgY3JlYXRlT3JSb2xsYmFjayhtb2RlbFVybCwgYnVpbGRNb2RlbFNjcmlwdChuYW1pbmcubW9kZWxDbGFzcywgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKSwgJ+aooeWeiycpO1xyXG4gICAgICAgIGF3YWl0IGNyZWF0ZU9yUm9sbGJhY2soZXZlbnRzVXJsLCBidWlsZEV2ZW50c1NjcmlwdChuYW1pbmcuZGlyLCBuYW1pbmcubW9kdWxlQ2xhc3MpLCAn5LqL5Lu25aOw5piOJyk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBtb2R1bGVEaXJVcmwpO1xyXG5cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkaXJOYW1lOiBuYW1pbmcuZGlyLFxyXG4gICAgICAgICAgICBwcmVmaXg6IG5hbWluZy5wcmVmaXgsXHJcbiAgICAgICAgICAgIG1vZHVsZVVybCxcclxuICAgICAgICAgICAgbW9kZWxVcmwsXHJcbiAgICAgICAgICAgIGV2ZW50c1VybCxcclxuICAgICAgICAgICAgb3JkZXIsXHJcbiAgICAgICAgfTtcclxuICAgIH0sXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmm7TmlrDmqKHlnZfnmoQgb3JkZXLvvJrlhpnlm54gTW9kdWxlIOiEmuacrOeahCBAUmVnaXN0ZXJNb2R1bGUoe29yZGVyfSnjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBkYXRlTW9kdWxlT3JkZXIobW9kdWxlTmFtZTogc3RyaW5nLCBvcmRlcjogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCFtb2R1bGVOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3QobW9kdWxlTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDpnZ7ms5XnmoTmqKHlnZflkI06IFwiJHttb2R1bGVOYW1lfVwiYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3JkZXIgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNGaW5pdGUob3JkZXIpIHx8IG9yZGVyIDwgMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahCBvcmRlcjogJHtvcmRlcn1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRGlyUGF0aCA9IGpvaW4ocHJvamVjdFBhdGgoKSwgR0FNRVBMQVlfRElSLCBtb2R1bGVEaXIpO1xyXG5cclxuICAgICAgICBsZXQgZmlsZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgZmlsZXMgPSByZWFkZGlyU3luYyhtb2R1bGVEaXJQYXRoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5om+5LiN5Yiw5qih5Z2X55uu5b2VOiAke21vZHVsZURpcn1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kdWxlRmlsZSA9IGZpbGVzLmZpbmQoKGYpID0+IGYuZW5kc1dpdGgoJ01vZHVsZS50cycpKTtcclxuICAgICAgICBpZiAoIW1vZHVsZUZpbGUpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmib7kuI3liLDmqKHlnZfohJrmnKw6ICR7bW9kdWxlRGlyfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZnVsbFBhdGggPSBqb2luKG1vZHVsZURpclBhdGgsIG1vZHVsZUZpbGUpO1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZnVsbFBhdGgsICd1dGYtOCcpO1xyXG4gICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL29yZGVyXFxzKjpcXHMqXFxkKy8sIGBvcmRlcjogJHtvcmRlcn1gKTtcclxuICAgICAgICBpZiAobmV3Q29udGVudCA9PT0gY29udGVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOacquWcqCAke21vZHVsZUZpbGV9IOS4reaJvuWIsCBvcmRlciDlrZfmrrVgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgd3JpdGVGaWxlU3luYyhmdWxsUGF0aCwgbmV3Q29udGVudCk7XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBkYlVybChgJHtHQU1FUExBWV9ESVJ9LyR7bW9kdWxlRGlyfWApKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgbW9kdWxlTmFtZTogbW9kdWxlRGlyLCBvcmRlciB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIm+W7uiBWaWV377ya5Zyo5oyH5a6a5qih5Z2X5LiL55Sf5oiQ6ISa5pysICsg6aKE5Yi25L2T77yM5bm25oqK6ISa5pys5oyC6L295Yiw6aKE5Yi25L2T5qC56IqC54K544CCXHJcbiAgICAgKiBAcGFyYW0gdGVtcGxhdGUg6aKE5Yi25L2T5qih5p2/77yM6KeBIGNvbnN0YW50cy5QUkVGQUJfVEVNUExBVEVTXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZVZpZXcobW9kdWxlTmFtZTogc3RyaW5nLCB2aWV3TmFtZTogc3RyaW5nLCBsYXllcjogc3RyaW5nLCB0ZW1wbGF0ZTogc3RyaW5nID0gJ2VtcHR5Jykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZpZXdOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3Qodmlld05hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6KeG5Zu+5ZCNOiBcIiR7dmlld05hbWV9XCLvvIzor7fkvb/nlKjlkIjms5XnmoTmoIfor4bnrKZgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFMQVlFUlMuaW5jbHVkZXMobGF5ZXIgYXMgYW55KSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOWxgue6pzogXCIke2xheWVyfVwi77yI5ZCI5rOV5YC877yaJHtMQVlFUlMuam9pbignLCAnKX3vvIlgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFpc1ByZWZhYlRlbXBsYXRlKHRlbXBsYXRlKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmdnuazleeahOmihOWItuS9k+aooeadvzogXCIke3RlbXBsYXRlfVwi77yI5ZCI5rOV5YC877yaJHtQUkVGQUJfVEVNUExBVEVTLmpvaW4oJywgJyl977yJYCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG5vcm1hbGl6ZVZpZXdOYW1lKHZpZXdOYW1lKTtcclxuICAgICAgICBjb25zdCBwcmVmYWJQYXRoID0gdmlld1ByZWZhYlBhdGgobW9kdWxlRGlyLCBjbGFzc05hbWUpO1xyXG5cclxuICAgICAgICAvLyDot6jmqKHlnZfph43lkI3kvJrliqDovb3plJnpooTliLbkvZPvvIhWaWV3TWFuYWdlciDmjInnsbvlkI3lhajlsYDmn6Xmib7vvInvvIzmj5DliY3mjKHkvY9cclxuICAgICAgICBjb25zdCBzbmFwID0gc25hcHNob3QoKTtcclxuICAgICAgICBjb25zdCBjbGFzaCA9IGxpc3RWaWV3cyhzbmFwKS5maW5kKFxyXG4gICAgICAgICAgICAodikgPT4gdi5jbGFzc05hbWUgPT09IGNsYXNzTmFtZSAmJiB2Lm1vZHVsZURpciAhPT0gbW9kdWxlRGlyLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNsYXNoKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgICAgIGBWaWV3IOWQjeWtlyBcIiR7Y2xhc3NOYW1lfVwiIOW3suiiq+aooeWdlyBcIiR7Y2xhc2gubW9kdWxlRGlyfVwiIOWNoOeUqO+8m2AgK1xyXG4gICAgICAgICAgICAgICAgYOahhuaetuaMieexu+WQjeWFqOWxgOafpeaJvu+8jOmHjeWQjeS8muWKoOi9vemUmemihOWItuS9k++8jOivt+aNouS4quWQjeWtl2AsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB2aWV3c0RpclVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtWSUVXU19TVUJESVJ9YDtcclxuICAgICAgICBhd2FpdCBlbnN1cmVEaXIodmlld3NEaXJVcmwpO1xyXG5cclxuICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHt2aWV3c0RpclVybH0vJHtjbGFzc05hbWV9LnRzYDtcclxuICAgICAgICBpZiAoYXdhaXQgYXNzZXRFeGlzdHMoc2NyaXB0VXJsKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFZpZXcg6ISa5pys5bey5a2Y5Zyo77yaJHtjbGFzc05hbWV9LnRz77yI5aaC6ZyA6YeN5bu677yM6K+35YWI5Yig6Zmk6K+lIFZpZXfvvIlgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHNjcmlwdENvbnRlbnQgPSBidWlsZFZpZXdTY3JpcHQoY2xhc3NOYW1lLCBwcmVmYWJQYXRoLCBsYXllciwgZnJhbWV3b3JrSW1wb3J0TW9kZSgpKTtcclxuICAgICAgICBjb25zdCBzY3JpcHRBc3NldCA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoXHJcbiAgICAgICAgICAgICdhc3NldC1kYicsICdjcmVhdGUtYXNzZXQnLCBzY3JpcHRVcmwsIHNjcmlwdENvbnRlbnQsIHsgb3ZlcndyaXRlOiBmYWxzZSB9LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFzY3JpcHRBc3NldCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOWIm+W7uuiEmuacrOWksei0pTogJHtzY3JpcHRVcmx9YCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwcmVmYWJEaXJVcmwgPSBgZGI6Ly8ke1JFU09VUkNFU19ESVJ9L3ZpZXdzLyR7bW9kdWxlRGlyfWA7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiVXJsID0gYCR7cHJlZmFiRGlyVXJsfS8ke2NsYXNzTmFtZX0ucHJlZmFiYDtcclxuICAgICAgICBhd2FpdCBlbnN1cmVEaXIocHJlZmFiRGlyVXJsKTtcclxuXHJcbiAgICAgICAgaWYgKGF3YWl0IGFzc2V0RXhpc3RzKHByZWZhYlVybCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAnZGVsZXRlLWFzc2V0Jywgc2NyaXB0VXJsKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOmihOWItuS9k+W3suWtmOWcqO+8miR7Y2xhc3NOYW1lfS5wcmVmYWLvvIjlt7Llm57mu5rohJrmnKzvvIzlpoLpnIDph43lu7ror7flhYjliKDpmaTor6UgVmlld++8iWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgY29tcHJlc3NlZFV1aWQgPSBjb21wcmVzc1V1aWQoc2NyaXB0QXNzZXQudXVpZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWZhYkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeShidWlsZFZpZXdQcmVmYWIoY2xhc3NOYW1lLCBjb21wcmVzc2VkVXVpZCwgdGVtcGxhdGUpKTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZmFiQXNzZXQgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgJ2Fzc2V0LWRiJywgJ2NyZWF0ZS1hc3NldCcsIHByZWZhYlVybCwgcHJlZmFiQ29udGVudCwgeyBvdmVyd3JpdGU6IGZhbHNlIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICghcHJlZmFiQXNzZXQpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg5Yib5bu66aKE5Yi25L2T5aSx6LSlOiAke3ByZWZhYlVybH1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgLy8g5Zue5rua6ISa5pys77yM6YG/5YWN55WZ5LiL4oCc5pyJ6ISa5pys5rKh6aKE5Yi25L2T4oCd55qE5Y2K5oiQ5ZOBXHJcbiAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ2RlbGV0ZS1hc3NldCcsIHNjcmlwdFVybCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKTtcclxuICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIHZpZXdzRGlyVXJsKTtcclxuICAgICAgICAgICAgdGhyb3cgZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCBwcmVmYWJEaXJVcmwpO1xyXG4gICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2Fzc2V0LWRiJywgJ3JlZnJlc2gtYXNzZXQnLCB2aWV3c0RpclVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IGNsYXNzTmFtZSwgbW9kdWxlRGlyLCBzY3JpcHRVcmwsIHByZWZhYlVybCwgcHJlZmFiUGF0aCwgbGF5ZXIsIHRlbXBsYXRlIH07XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yig6ZmkIHZpZXfvvJrlj6rliKDoh6rouqvvvIjohJrmnKwgKyDpooTliLbkvZMgKyDlkIToh6ogbWV0Ye+8ie+8jOS4jeeisOWFtuS7lui1hOa6kOOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBkZWxldGVWaWV3KG1vZHVsZU5hbWU6IHN0cmluZywgdmlld05hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXZpZXdOYW1lIHx8ICFJREVOVElGSUVSX1JFLnRlc3Qodmlld05hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE6KeG5Zu+5ZCNOiBcIiR7dmlld05hbWV9XCJgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZHVsZURpciA9IG5vcm1hbGl6ZU1vZHVsZShtb2R1bGVOYW1lKS5kaXI7XHJcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gbm9ybWFsaXplVmlld05hbWUodmlld05hbWUpO1xyXG4gICAgICAgIGNvbnN0IHByZWZhYlVybCA9IGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3MvJHttb2R1bGVEaXJ9LyR7Y2xhc3NOYW1lfS5wcmVmYWJgO1xyXG4gICAgICAgIGNvbnN0IHNjcmlwdFVybCA9IGBkYjovLyR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtWSUVXU19TVUJESVJ9LyR7Y2xhc3NOYW1lfS50c2A7XHJcblxyXG4gICAgICAgIGNvbnN0IGRlbGV0ZWQ6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCB1cmwgb2YgW3ByZWZhYlVybCwgc2NyaXB0VXJsXSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmZvID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncXVlcnktYXNzZXQtaW5mbycsIHVybCk7XHJcbiAgICAgICAgICAgIGlmIChpbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdkZWxldGUtYXNzZXQnLCB1cmwpO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlZC5wdXNoKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOa4heeQhuepuuebruW9le+8iOaXp+eJiOS8mueVmeS4iyByZXNvdXJjZXMvdmlld3MvPOaooeWdlz4g6L+Z56eN56m65aOz77yJXHJcbiAgICAgICAgYXdhaXQgcHJ1bmVFbXB0eURpcihqb2luKHByb2plY3RQYXRoKCksIFJFU09VUkNFU19ESVIsICd2aWV3cycsIG1vZHVsZURpcikpO1xyXG5cclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgYGRiOi8vJHtSRVNPVVJDRVNfRElSfS92aWV3cy8ke21vZHVsZURpcn1gKTtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgZGJVcmwoYCR7R0FNRVBMQVlfRElSfS8ke21vZHVsZURpcn0vJHtWSUVXU19TVUJESVJ9YCkpO1xyXG5cclxuICAgICAgICByZXR1cm4geyBjbGFzc05hbWUsIG1vZHVsZURpciwgZGVsZXRlZCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIoOmZpOaooeWdl++8muWIoCBnYW1lcGxheS885qih5Z2XPi8g5LiOIHJlc291cmNlcy92aWV3cy885qih5Z2XPi8g5Lik5Liq55uu5b2V77yI6L+e5ZCMIG1ldGHvvInjgIJcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZGVsZXRlTW9kdWxlKG1vZHVsZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghbW9kdWxlTmFtZSB8fCAhSURFTlRJRklFUl9SRS50ZXN0KG1vZHVsZU5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg6Z2e5rOV55qE5qih5Z2X5ZCNOiBcIiR7bW9kdWxlTmFtZX1cImApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXIgPSBub3JtYWxpemVNb2R1bGUobW9kdWxlTmFtZSkuZGlyO1xyXG5cclxuICAgICAgICBjb25zdCBtb2R1bGVEaXJQYXRoID0gam9pbihwcm9qZWN0UGF0aCgpLCBHQU1FUExBWV9ESVIsIG1vZHVsZURpcik7XHJcbiAgICAgICAgY29uc3QgcHJlZmFiRGlyUGF0aCA9IGpvaW4ocHJvamVjdFBhdGgoKSwgUkVTT1VSQ0VTX0RJUiwgJ3ZpZXdzJywgbW9kdWxlRGlyKTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZDogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgW3ByZWZhYkRpclBhdGgsIG1vZHVsZURpclBhdGhdKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhdFN5bmMocCkuaXNEaXJlY3RvcnkoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVN5bmMocCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKHApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAvKiDkuI3lrZjlnKjliJnot7Pov4cgKi9cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnYXNzZXQtZGInLCAncmVmcmVzaC1hc3NldCcsIGBkYjovLyR7UkVTT1VSQ0VTX0RJUn0vdmlld3NgKTtcclxuICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdhc3NldC1kYicsICdyZWZyZXNoLWFzc2V0JywgZGJVcmwoR0FNRVBMQVlfRElSKSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IG1vZHVsZURpciwgcmVtb3ZlZCB9O1xyXG4gICAgfSxcclxuXHJcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5YWs5YWx5qih5Z2XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgIC8qKlxyXG4gICAgICog5p+l6K+i5YWs5YWx5qih5Z2X77ya5pys5Zyw5bel5L2c5Yy6ICsg5bey5a6J6KOFICsg6L+c56iLIHJlZ2lzdHJ544CCXHJcbiAgICAgKiBAcGFyYW0gZm9yY2Ug5by65Yi26YeN5paw5ouJ5Y+W6L+c56iL5YiX6KGo77yI6Z2i5p2/55qE44CM5Yi35paw44CN55So77yJXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHF1ZXJ5U2hhcmVkTW9kdWxlcyhmb3JjZT86IGJvb2xlYW4pIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgcXVlcnlTaGFyZWRTdGF0ZShmb3JjZSA9PT0gdHJ1ZSk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5a6J6KOF5LiA5Liq5YWs5YWx5qih5Z2X77yaKirnm7TmjqXku6Pot5EgYG5wbSBpbnN0YWxsYCoq44CCXHJcbiAgICAgKiDlpLHotKXml7bmipvlh7rnmoTplJnor6/ph4zluKbnnYAgbnBtIOeahOWOn+Wni+i+k+WHuu+8jOmdouadv+S8muWOn+agt+WxleekuuOAglxyXG4gICAgICovXHJcbiAgICBhc3luYyBpbnN0YWxsU2hhcmVkTW9kdWxlKHdhbnRlZDogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHJ1blNoYXJlZEFjdGlvbignaW5zdGFsbCcsIHdhbnRlZCk7XHJcbiAgICB9LFxyXG5cclxuICAgIC8qKiDljbjovb3kuIDkuKrlhazlhbHmqKHlnZfvvJrnm7TmjqXku6Pot5EgYG5wbSB1bmluc3RhbGxgICovXHJcbiAgICBhc3luYyB1bmluc3RhbGxTaGFyZWRNb2R1bGUod2FudGVkOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gcnVuU2hhcmVkQWN0aW9uKCd1bmluc3RhbGwnLCB3YW50ZWQpO1xyXG4gICAgfSxcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAZW4gTWV0aG9kIFRyaWdnZXJlZCBvbiBFeHRlbnNpb24gU3RhcnR1cFxyXG4gKiBAemgg5omp5bGV5ZCv5Yqo5pe26Kem5Y+R55qE5pa55rOVXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbG9hZCgpIHsgfVxyXG5cclxuLyoqXHJcbiAqIEBlbiBNZXRob2QgdHJpZ2dlcmVkIHdoZW4gdW5pbnN0YWxsaW5nIHRoZSBleHRlbnNpb25cclxuICogQHpoIOWNuOi9veaJqeWxleaXtuinpuWPkeeahOaWueazlVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVubG9hZCgpIHsgfVxyXG4iXX0=
@@ -226,7 +226,7 @@ module.exports = Editor.Panel.define({
226
226
  this.message = this.t('ui_versions_already_latest');
227
227
  return;
228
228
  }
229
- if (!(await this.runUpdate('install-shared-module', name)))
229
+ if (!(await this.runUpdate('update-framework', name)))
230
230
  return;
231
231
  this.message = this.t('ui_msg_framework_updated', { version: ((_e = (_d = this.versions) === null || _d === void 0 ? void 0 : _d.framework) === null || _e === void 0 ? void 0 : _e.latest) || '' });
232
232
  },
@@ -241,7 +241,7 @@ module.exports = Editor.Panel.define({
241
241
  return;
242
242
  }
243
243
  // 于是 sync-extension 拷回来的还是旧版本 —— 表现就是'点了没用'。
244
- if (!(await this.runUpdate('install-shared-module', name)))
244
+ if (!(await this.runUpdate('update-extension', name)))
245
245
  return;
246
246
  // 装进 node_modules 还不够:编辑器只认 extensions/ 下那份,必须落盘
247
247
  try {
@@ -723,4 +723,4 @@ module.exports = Editor.Panel.define({
723
723
  }
724
724
  },
725
725
  });
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=
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/jgIJcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy52ZXJzaW9ucz8uZnJhbWV3b3JrPy5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGRhdGVPZih0aGlzLnZlcnNpb25zPy5mcmFtZXdvcmspKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHRoaXMudCgndWlfdmVyc2lvbnNfYWxyZWFkeV9sYXRlc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhd2FpdCB0aGlzLnJ1blVwZGF0ZSgndXBkYXRlLWZyYW1ld29yaycsIG5hbWUpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHRoaXMudCgndWlfbXNnX2ZyYW1ld29ya191cGRhdGVkJywgeyB2ZXJzaW9uOiB0aGlzLnZlcnNpb25zPy5mcmFtZXdvcms/LmxhdGVzdCB8fCAnJyB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgdXBkYXRlRXh0ZW5zaW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLnZlcnNpb25zPy5leHRlbnNpb24/Lm5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5bey5piv5pyA5paw5bCx5Yir55yf5Y676KOF5LiA6YGNLOabtOWIq+aKpVwi5bey5pu05pawXCIg4oCU4oCUIOmCo+aYr+WcqOmql+eUqOaIt1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGRhdGVPZih0aGlzLnZlcnNpb25zPy5leHRlbnNpb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHRoaXMudCgndWlfdmVyc2lvbnNfYWxyZWFkeV9sYXRlc3QnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyDkuo7mmK8gc3luYy1leHRlbnNpb24g5ou35Zue5p2l55qE6L+Y5piv5pen54mI5pysIOKAlOKAlCDooajnjrDlsLHmmK8n54K55LqG5rKh55SoJ+OAglxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGF3YWl0IHRoaXMucnVuVXBkYXRlKCd1cGRhdGUtZXh0ZW5zaW9uJywgbmFtZSkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6KOF6L+bIG5vZGVfbW9kdWxlcyDov5jkuI3lpJ8657yW6L6R5Zmo5Y+q6K6kIGV4dGVuc2lvbnMvIOS4i+mCo+S7vSzlv4XpobvokL3nm5hcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdzeW5jLWV4dGVuc2lvbicsIG5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSB0aGlzLnQoJ3VpX21zZ19leHRlbnNpb25fdXBkYXRlZCcsIHsgdmVyc2lvbjogdGhpcy52ZXJzaW9ucz8uZXh0ZW5zaW9uPy5sYXRlc3QgfHwgJycgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5LiO5YWs5YWx5qih5Z2X5a6J6KOF6LWw5ZCM5LiA5p2h6LevOuWkjeeUqOeOsOaIkOeahCBucG0g5omn6KGM5LiO5aSx6LSl5bGV56S6ICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBydW5VcGRhdGUobWVzc2FnZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgbWVzc2FnZSwgbmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHJlcyAmJiByZXMub2sgPT09IGZhbHNlID8gJycgOiBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzICYmIHJlcy5vayA9PT0gZmFsc2UpIHRoaXMuc2hvd0Vycm9yKHJlcy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRWZXJzaW9ucygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRNb2R1bGVzKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kdWxlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LW1vZHVsZXMnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVPcmRlciA9IHRoaXMubmV4dE9yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTW9kdWxlICYmICF0aGlzLm1vZHVsZXMuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRNb2R1bGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld3MgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN5bmNFZGl0T3JkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIG5leHRPcmRlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubW9kdWxlcy5sZW5ndGgpIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCguLi50aGlzLm1vZHVsZXMubWFwKChtOiBhbnkpID0+IG0ub3JkZXIpKSArIDE7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5qih5Z2X5pON5L2cIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RNb2R1bGUobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1vZHVsZSA9IG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jRWRpdE9yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgc3luY0VkaXRPcmRlcigpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtb2QgPSB0aGlzLm1vZHVsZXMuZmluZCgobTogYW55KSA9PiBtLm5hbWUgPT09IHRoaXMuc2VsZWN0ZWRNb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kKSB0aGlzLmVkaXRPcmRlciA9IG1vZC5vcmRlcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRWaWV3cygpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld3MgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdxdWVyeS12aWV3cycsIHRoaXMuc2VsZWN0ZWRNb2R1bGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25DcmVhdGVNb2R1bGUoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmV3TW9kdWxlTmFtZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHRoaXMudCgndWlfbmVlZF9tb2R1bGVfbmFtZScpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdjcmVhdGUtbW9kdWxlJywgbmFtZSwgdGhpcy5uZXdNb2R1bGVPcmRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbW9kdWxlX2NyZWF0ZWQnLCB7IG5hbWU6IHJlcy5kaXJOYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0NyZWF0ZU1vZHVsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNb2R1bGUgPSByZXMuZGlyTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW5jRWRpdE9yZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFZpZXdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvblVwZGF0ZU9yZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfc2VsZWN0X21vZHVsZScpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICd1cGRhdGUtbW9kdWxlLW9yZGVyJywgdGhpcy5zZWxlY3RlZE1vZHVsZSwgdGhpcy5lZGl0T3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dTdWNjZXNzKHRoaXMudCgndWlfbXNnX29yZGVyX3VwZGF0ZWQnLCB7IG5hbWU6IHJlcy5tb2R1bGVOYW1lLCBvcmRlcjogcmVzLm9yZGVyIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25EZWxldGVNb2R1bGUoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkTW9kdWxlKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgdmlld0NvdW50ID0gdGhpcy52aWV3cy5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOWIoOmZpOWJjeWFiOmXruS4u+i/m+eoi++8muacieayoeaciei1hOa6kOW8leeUqOS6huivpeaooeWdl+eahOiEmuacrFxyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZWZzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LW1vZHVsZS1yZWZzJywgdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnMgPSByZXM/LnJlZmVyZW5jZWRCeSA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIOafpeS4jeWIsOWwseS4jemYu+aWreWIoOmZpO+8jOWPquaYr+WwkeS4gOWxguaPkOmGkiAqL1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3YXJuUmVmcyA9IHJlZnMubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ1xcblxcbuKaoCAnICsgdGhpcy50KCd1aV9jb25maXJtX3JlZnMnLCB7IGNvdW50OiByZWZzLmxlbmd0aCB9KSArICdcXG7CtyAnICsgcmVmcy5qb2luKCdcXG7CtyAnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV9kZWxldGVfbW9kdWxlJywgeyBuYW1lOiB0aGlzLnNlbGVjdGVkTW9kdWxlLCBjb3VudDogdmlld0NvdW50IH0pICsgd2FyblJlZnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYnV0dG9uczogW3RoaXMudCgndWlfZGVsZXRlJyksIHRoaXMudCgndWlfY2FuY2VsJyldLCBkZWZhdWx0OiAxLCBjYW5jZWw6IDEgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzcG9uc2UgIT09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBFZGl0b3IuTWVzc2FnZS5yZXF1ZXN0KCdjY2dmLWdhbWUtdG9vbCcsICdkZWxldGUtbW9kdWxlJywgdGhpcy5zZWxlY3RlZE1vZHVsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbW9kdWxlX2RlbGV0ZWQnLCB7IG5hbWU6IHRoaXMuc2VsZWN0ZWRNb2R1bGUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTW9kdWxlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1hbmFnZXIg5pON5L2cIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hUYWIobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWIgPSBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAndmVyc2lvbnMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFZlcnNpb25zKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnbWFuYWdlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkTWFuYWdlcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdzaGFyZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZFNoYXJlZE1vZHVsZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBsb2FkTWFuYWdlcnMoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYW5hZ2VycyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3F1ZXJ5LW1hbmFnZXJzJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWIl+ihqOmHjeW7uuWQjuaKiumAieS4remhuemHjeaWsOe7keWumuWIsOaWsOWvueixoeS4iu+8jOmBv+WFjeaYvuekuui/h+acn+aVsOaNrlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZE1hbmFnZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYW5hZ2VyID0gY3VycmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm1hbmFnZXJzLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSBjdXJyZW50Lm5hbWUpID8/IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdE1hbmFnZXIobWFuYWdlcjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hbmFnZXIgPSBtYW5hZ2VyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvbkNyZWF0ZU1hbmFnZXIoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMubmV3TWFuYWdlck5hbWUudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih0aGlzLnQoJ3VpX25lZWRfbWFuYWdlcl9uYW1lJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2NyZWF0ZS1tYW5hZ2VyJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbWFuYWdlcl9jcmVhdGVkJywgeyBuYW1lOiByZXMuY2xhc3NOYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNYW5hZ2VyTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dDcmVhdGVNYW5hZ2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE1hbmFnZXJzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZWQgPSB0aGlzLm1hbmFnZXJzLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSByZXMuY2xhc3NOYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNyZWF0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TWFuYWdlcihjcmVhdGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25EZWxldGVNYW5hZ2VyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1hbmFnZXIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5zZWxlY3RlZE1hbmFnZXIubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBFZGl0b3IuRGlhbG9nLndhcm4oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudCgndWlfY29uZmlybV9kZWxldGVfbWFuYWdlcicsIHsgbmFtZSB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBidXR0b25zOiBbdGhpcy50KCd1aV9kZWxldGUnKSwgdGhpcy50KCd1aV9jYW5jZWwnKV0sIGRlZmF1bHQ6IDEsIGNhbmNlbDogMSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSAhPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ2RlbGV0ZS1tYW5hZ2VyJywgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfbWFuYWdlcl9kZWxldGVkJywgeyBuYW1lIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1hbmFnZXIgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRNYW5hZ2VycygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgb25OZXdNYW5hZ2VyTmFtZShlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01hbmFnZXJOYW1lID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZpZXcg5pON5L2cIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25EZWxldGVWaWV3KG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3RlZE1vZHVsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEVkaXRvci5EaWFsb2cud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50KCd1aV9jb25maXJtX2RlbGV0ZV92aWV3JywgeyBuYW1lIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGJ1dHRvbnM6IFt0aGlzLnQoJ3VpX2RlbGV0ZScpLCB0aGlzLnQoJ3VpX2NhbmNlbCcpXSwgZGVmYXVsdDogMSwgY2FuY2VsOiAxIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3BvbnNlICE9PSAwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAnZGVsZXRlLXZpZXcnLCB0aGlzLnNlbGVjdGVkTW9kdWxlLCBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoJ3VpX21zZ192aWV3X2RlbGV0ZWQnLCB7IG5hbWUgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRWaWV3cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPdmVydmlldygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihlPy5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgb3BlbkNyZWF0ZVZpZXdNb2RhbCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRNb2R1bGUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdOYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlVmlld01vZGFsID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgY2xvc2VDcmVhdGVWaWV3TW9kYWwoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlVmlld01vZGFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uQ3JlYXRlVmlldygpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy52aWV3TmFtZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHRoaXMudCgndWlfbmVlZF92aWV3X25hbWUnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjY2dmLWdhbWUtdG9vbCcsICdjcmVhdGUtdmlldycsIHRoaXMuc2VsZWN0ZWRNb2R1bGUsIG5hbWUsIHRoaXMubGF5ZXIsIHRoaXMudGVtcGxhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1N1Y2Nlc3ModGhpcy50KCd1aV9tc2dfdmlld19jcmVhdGVkJywgeyBuYW1lOiByZXMuY2xhc3NOYW1lLCB0ZW1wbGF0ZTogcmVzLnRlbXBsYXRlIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q3JlYXRlVmlld01vZGFsID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld05hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlld3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkvZPmo4Dnu5Pmnpzph4znmoTmlofku7bot6/lvoQgLT4g5Zyo57yW6L6R5Zmo6YeM5omT5byAICovXHJcbiAgICAgICAgICAgICAgICBhc3luYyBvcGVuU291cmNlKGZpbGU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ29wZW4tc291cmNlJywgZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5L2T5qOAIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIHJ1bkRvY3RvcigpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3RvclJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IEVkaXRvci5NZXNzYWdlLnJlcXVlc3QoJ2NjZ2YtZ2FtZS10b29sJywgJ3J1bi1kb2N0b3InKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kaW5ncyA9IHJlcy5maW5kaW5ncyA/PyBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N0b3JTdW1tYXJ5ID0gcmVzLnN1bW1hcnkgPz8geyBlcnJvcjogMCwgd2FybjogMCwgaW5mbzogMCB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmjIkgZXJyb3Ig4oaSIHdhcm4g4oaSIGluZm8g5YiG57uE77yM56m657uE5LiN5pi+56S6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdG9yR3JvdXBzID0gU0VWRVJJVElFU1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoc2V2ZXJpdHkpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMudChTRVZFUklUWV9LRVlTW3NldmVyaXR5XSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHRoaXMuZmluZGluZ3MuZmlsdGVyKChmOiBhbnkpID0+IGYuc2V2ZXJpdHkgPT09IHNldmVyaXR5KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZzogYW55KSA9PiBnLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RvY3RvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N0b3JSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g5qaC6KeIIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9wZW5PdmVydmlldygpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJ2aWV3TG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3ZlcnZpZXcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93T3ZlcnZpZXcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcnZpZXdMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICBjbG9zZU92ZXJ2aWV3KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd092ZXJ2aWV3ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g6KGo5Y2V5LqL5Lu2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbiAgICAgICAgICAgICAgICBvbk5ld01vZHVsZU5hbWUoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdNb2R1bGVOYW1lID0gZS50YXJnZXQudmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgb25OZXdNb2R1bGVPcmRlcihlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld01vZHVsZU9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uRWRpdE9yZGVyKGU6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdE9yZGVyID0gTnVtYmVyKGUudGFyZ2V0LnZhbHVlKSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uVmlld05hbWUoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3TmFtZSA9IGUudGFyZ2V0LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uTGF5ZXIodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGF5ZXIgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvblRlbXBsYXRlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHNob3dTdWNjZXNzKG1zZzogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNob3dFcnJvcihtc2c6IHN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIOWFrOWFseaooeWdlyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4gICAgICAgICAgICAgICAgLyoqIEBwYXJhbSBmb3JjZSDlvLrliLbph43mlrDmi4nlj5bov5znqIvliJfooajvvIjjgIzliLfmlrDjgI3mjInpkq7nlKjvvJvlkKbliJnnlKjkuLvov5vnqIvph4znmoTnvJPlrZjvvIkgKi9cclxuICAgICAgICAgICAgICAgIGFzeW5jIGxvYWRTaGFyZWRNb2R1bGVzKGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZFJlZ2lzdHJ5TG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVNoYXJlZFN0YXRlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdCgnY2NnZi1nYW1lLXRvb2wnLCAncXVlcnktc2hhcmVkLW1vZHVsZXMnLCBmb3JjZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKGU/Lm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZWdpc3RyeUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDkuLvov5vnqIvlm57mnaXnmoTnirbmgIHnu5/kuIDlnKjov5nph4zokL3liLAgZGF0YSDkuIrvvIjmn6Xor6LkuI7oo4Uv5Y245YWx55So5ZCM5LiA5Lu957uT5p6E77yJICovXHJcbiAgICAgICAgICAgICAgICBhcHBseVNoYXJlZFN0YXRlKHJlczogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRNb2R1bGVzID0gcmVzPy5tb2R1bGVzID8/IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9jYWxTb3VyY2UgPSByZXM/LmxvY2FsU291cmNlID8/IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Li76L+b56iL5ZyoXCLlkI7lj7DliLfmlrDkuK1cIuaXtuS8muW4puWbnuS4gOS4qui/m+ihjOS4reeahOivtOaYjiDigJTigJQg6YKj5LiN5piv5aSx6LSlLOS4jeivpeaMieWksei0peaYvuekuuOAglxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlbmRpbmcgPSB0eXBlb2YgcmVzPy5yZWdpc3RyeUVycm9yID09PSAnc3RyaW5nJyAmJiByZXMucmVnaXN0cnlFcnJvci5pbmRleE9mKCfmraPlnKjojrflj5YnKSA+PSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkUmVnaXN0cnlQZW5kaW5nID0gcGVuZGluZztcclxuICAgICAgICAgICAgICAgICAgICBpZiAocGVuZGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDkuIDmrKHmgKfnmoToh6rliqjph43or5U65Yeg56eS5ZCO5ZCO5Y+w5bey57uP5Yi35aW95LqGLOi/meS4gOmhteiHquW3seabtOaWsCzkuI3nlKjnlKjmiLfljrvngrnliLfmlrBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoYXJlZFJldHJ5VGltZXIgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFJldHJ5VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRSZXRyeVRpbWVyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRTaGFyZWRNb2R1bGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAxMDAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZWdpc3RyeUVycm9yID0gcmVzPy5yZWdpc3RyeUVycm9yID8/IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6YCJ5Lit6aG55Y+v6IO95bey57uP5LiN5Zyo5YiX6KGo6YeM5LqG77yI5q+U5aaC5Yia6KKr5Y246L2977yJXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTaGFyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgISh0aGlzLnNoYXJlZE1vZHVsZXMgYXMgYW55W10pLmZpbmQoKG06IGFueSkgPT4gbS5uYW1lID09PSB0aGlzLnNlbGVjdGVkU2hhcmVkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2hhcmVkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIHNlbGVjdFNoYXJlZChuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2hhcmVkID0gbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnJztcclxuICAgICAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAgICAgYXN5bmMgb25JbnN0YWxsU2hhcmVkKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucnVuU2hhcmVkKCdpbnN0YWxsJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIGFzeW5jIG9uVW5pbnN0YWxsU2hhcmVkKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZm8gPSB0aGlzLnNlbGVjdGVkU2hhcmVkSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWluZm8pIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Y246L295YmN5o+Q6YaS5Lik57G75Lya6KKr5omT5pat55qE5Lic6KW/77ya6L+Y5ZyoIGltcG9ydCDlroPnmoTohJrmnKzjgIHku6Xlj4rkvp3otZblroPnmoTlhazlhbHmqKHlnZfjgIJcclxuICAgICAgICAgICAgICAgICAgICAvLyDlj6rmo4Dmn6XliY3ogIXnmoTor53vvIxcIuWPpuS4gOS4quWFrOWFseaooeWdl+S+nei1luWug1wi5Lya5a6M5YWo5ryP5o6J44CCXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FybmluZ3M6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8ucmVmZXJlbmNlZEJ5Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ+KaoCAnICsgdGhpcy50KCd1aV9zaGFyZWRfcmVmc193YXJuJykgKyAnXFxuwrcgJyArIGluZm8ucmVmZXJlbmNlZEJ5LmpvaW4oJ1xcbsK3ICcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5mby5kZXBlbmRlbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ+KaoCAnICsgdGhpcy50KCd1aV9zaGFyZWRfZGVwc193YXJuJykgKyAnXFxuwrcgJyArIGluZm8uZGVwZW5kZW50cy5qb2luKCdcXG7CtyAnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IEVkaXRvci5EaWFsb2cud2FybihcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50KCd1aV9jb25maXJtX3VuaW5zdGFsbF9zaGFyZWQnLCB7IG5hbWU6IGluZm8ubmFtZSB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICArICh3YXJuaW5ncy5sZW5ndGggPyAnXFxuXFxuJyArIHdhcm5pbmdzLmpvaW4oJ1xcblxcbicpIDogJycpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbdGhpcy50KCd1aV9zaGFyZWRfdW5pbnN0YWxsJyksIHRoaXMudCgndWlfY2FuY2VsJyldLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIucmVzcG9uc2UgIT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5ydW5TaGFyZWQoJ3VuaW5zdGFsbCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgICAgICAvKiog5L6d6LWW6aG55pys6Lqr5Lmf5piv5YWs5YWx5qih5Z2X5pe277yM54K55LiA5LiL6Lez6L+H5Y6755yL5a6D55qE54q25oCBICovXHJcbiAgICAgICAgICAgICAgICBvbkNsaWNrRGVwZW5kZW5jeShkZXBlbmRlbmN5OiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVwZW5kZW5jeT8uaXNTaGFyZWRNb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTaGFyZWQoZGVwZW5kZW5jeS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICog5Luj6LeRIG5wbSDlronoo4UgLyDljbjovb3jgIJcclxuICAgICAgICAgICAgICAgICAqIOWksei0peaXtioq5LiN5by55LiA5p2h6L2s6L+w55qEXCLlronoo4XlpLHotKVcIioq77yM6ICM5piv5oqKIG5wbSDnmoTljp/lp4vovpPlh7rmlbTkuKrmlL7ov5vlvLnnqpcg4oCU4oCUXHJcbiAgICAgICAgICAgICAgICAgKiDnlKjmiLfopoHor4rmlq3nmoTlsLHmmK/pgqPmrrXovpPlh7rjgIJcclxuICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgYXN5bmMgcnVuU2hhcmVkKGFjdGlvbjogJ2luc3RhbGwnIHwgJ3VuaW5zdGFsbCcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmZvID0gdGhpcy5zZWxlY3RlZFNoYXJlZEluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkQnVzeSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgRWRpdG9yLk1lc3NhZ2UucmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjY2dmLWdhbWUtdG9vbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPT09ICdpbnN0YWxsJyA/ICdpbnN0YWxsLXNoYXJlZC1tb2R1bGUnIDogJ3VuaW5zdGFsbC1zaGFyZWQtbW9kdWxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseVNoYXJlZFN0YXRlKHJlcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzPy5vaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U3VjY2Vzcyh0aGlzLnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID09PSAnaW5zdGFsbCcgPyAndWlfbXNnX3NoYXJlZF9pbnN0YWxsZWQnIDogJ3VpX21zZ19zaGFyZWRfdW5pbnN0YWxsZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogaW5mby5uYW1lIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWksei0pe+8muaVsOaNrueVmeedgOS+m+W8ueeql+Wxleekuu+8jOW5tueri+WIu+aJk+W8gOWug1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFyZWRSZXN1bHQgPSByZXM/LnJlc3VsdCA/PyBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U2hhcmVkUmVzdWx0ID0gdGhpcy5zaGFyZWRSZXN1bHQgIT09IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcihyZXM/Lm1lc3NhZ2UgfHwgYG5wbSAke2FjdGlvbn0gZmFpbGVkYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IoZT8ubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZEJ1c3kgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDku47mtojmga/ooYzlho3ngrnlvIDkuIrkuIDmrKHnmoQgbnBtIOi+k+WHuiAqL1xyXG4gICAgICAgICAgICAgICAgb3BlblNoYXJlZFJlc3VsdCgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRSZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U2hhcmVkUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgICAgIC8qKiDlj6rlhbPlvLnnqpfvvIwqKuS/neeVmeaVsOaNrioqIOKAlOKAlCDlkKbliJnlhbPmjonkuYvlkI7lsLHlho3kuZ/nnIvkuI3liLDpgqPmrrXovpPlh7rkuoYgKi9cclxuICAgICAgICAgICAgICAgIGNsb3NlU2hhcmVkUmVzdWx0KCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NoYXJlZFJlc3VsdCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbW91bnRlZCgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZENvbmZpZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTW9kdWxlcygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkTWFuYWdlcnMoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGVtcGxhdGU6IHJlYWRGaWxlU3luYyhqb2luKF9fZGlybmFtZSwgJy4uLy4uLy4uL3N0YXRpYy90ZW1wbGF0ZS93b3JrYmVuY2gvcGFuZWwuaHRtbCcpLCAndXRmLTgnKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBhcHAuY29uZmlnLmNvbXBpbGVyT3B0aW9ucy5pc0N1c3RvbUVsZW1lbnQgPSAodGFnOiBzdHJpbmcpID0+IHRhZy5zdGFydHNXaXRoKCd1aS0nKTtcclxuICAgICAgICBhcHAubW91bnQoJGFwcCk7XHJcbiAgICAgICAgcGFuZWxEYXRhTWFwLnNldCh0aGlzLCBhcHApO1xyXG4gICAgfSxcclxuICAgIGJlZm9yZUNsb3NlKCkgeyB9LFxyXG4gICAgY2xvc2UoKSB7XHJcbiAgICAgICAgY29uc3QgYXBwID0gcGFuZWxEYXRhTWFwLmdldCh0aGlzKTtcclxuICAgICAgICBpZiAoYXBwKSB7XHJcbiAgICAgICAgICAgIGFwcC51bm1vdW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufSk7XHJcbiJdfQ==
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "$schema": "./@types/schema/package/index.json",
3
3
  "package_version": 2,
4
4
  "name": "ccgf-game-tool",
5
- "version": "1.0.13",
5
+ "version": "1.0.14",
6
6
  "publishConfig": {
7
7
  "access": "public"
8
8
  },
@@ -122,6 +122,16 @@
122
122
  "syncExtension"
123
123
  ]
124
124
  },
125
+ "update-framework": {
126
+ "methods": [
127
+ "updateFrameworkPackage"
128
+ ]
129
+ },
130
+ "update-extension": {
131
+ "methods": [
132
+ "updateExtensionPackage"
133
+ ]
134
+ },
125
135
  "query-versions": {
126
136
  "methods": [
127
137
  "queryVersions"