fmode-ng 0.0.240 → 0.0.242

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.
Files changed (36) hide show
  1. package/README.md +15 -0
  2. package/esm2022/lib/aigc/voice/fmode-voice.service.mjs +4 -4
  3. package/esm2022/lib/core/agent/chat/index.mjs +3 -2
  4. package/esm2022/lib/core/agent/index.mjs +7 -6
  5. package/esm2022/lib/core/agent/task/agent.task.mjs +1 -1
  6. package/esm2022/lib/core/index.mjs +8 -7
  7. package/esm2022/lib/core/parse/fmode.object.mjs +9 -1
  8. package/esm2022/lib/core/storage/hwobs.provider.mjs +92 -29
  9. package/esm2022/lib/core/storage/index.mjs +2 -1
  10. package/esm2022/lib/core/storage/s3.provider.mjs +111 -0
  11. package/esm2022/lib/core/storage/types.mjs +1 -1
  12. package/esm2022/lib/storage/index.mjs +2 -1
  13. package/esm2022/lib/storage/service-hwobs/hwobs.service.mjs +120 -81
  14. package/esm2022/lib/storage/service-hwobs/index.mjs +2 -3
  15. package/esm2022/lib/storage/service-s3/index.mjs +2 -0
  16. package/esm2022/lib/storage/service-s3/s3.service.mjs +376 -0
  17. package/fesm2022/fmode-ng.mjs +876 -278
  18. package/fesm2022/fmode-ng.mjs.map +1 -1
  19. package/lib/aigc/voice/fmode-voice.service.d.ts +3 -3
  20. package/lib/core/agent/chat/index.d.ts +1 -1
  21. package/lib/core/agent/index.d.ts +5 -5
  22. package/lib/core/agent/task/agent.task.d.ts +1 -2
  23. package/lib/core/index.d.ts +6 -6
  24. package/lib/core/parse/fmode.object.d.ts +3 -0
  25. package/lib/core/storage/hwobs.provider.d.ts +12 -0
  26. package/lib/core/storage/index.d.ts +1 -0
  27. package/lib/core/storage/s3.provider.d.ts +21 -0
  28. package/lib/core/storage/types.d.ts +11 -1
  29. package/lib/storage/index.d.ts +1 -0
  30. package/lib/storage/service-hwobs/hwobs.service.d.ts +18 -13
  31. package/lib/storage/service-hwobs/index.d.ts +1 -2
  32. package/lib/storage/service-s3/index.d.ts +1 -0
  33. package/lib/storage/service-s3/s3.service.d.ts +137 -0
  34. package/package.json +7 -3
  35. package/esm2022/lib/storage/service-hwobs/typings/esdk-obs-browser.mjs +0 -1
  36. package/lib/storage/service-hwobs/typings/esdk-obs-browser.d.ts +0 -7
package/README.md CHANGED
@@ -9,6 +9,21 @@
9
9
  npm install -S fmode-ng
10
10
  ```
11
11
 
12
+ # Rules 包依赖管理特别事项
13
+
14
+ - 以core库为核心
15
+ - 不依赖任何兼容性问题库
16
+ - 优先引用node/browser都兼容的esm库,尽量避免cjs
17
+ - 以前依赖的弱兼容库,需要及时升级替换或者重构
18
+ - 为core库添加非ui/angular依赖
19
+ - package.json depandencies
20
+ - ng-package.json allowedNonPeerDependencies
21
+ - package.json 各依赖项说明
22
+ - peerDependencies peerDependenciesMeta
23
+ - 用于声明相关性,不自动安装,仅约束兼容性报错
24
+ - 尽量减少,只写@angular大版本,方便升级增加新版本号
25
+ - dependencies 会自动安装的核心依赖库
26
+ - 每个库需要精挑细选,如果处了问题,请全局排查升级
12
27
 
13
28
  # Contrib
14
29
  This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.1.0.
@@ -14,9 +14,9 @@ function checkWorkletSupport() {
14
14
  }
15
15
  }
16
16
  Recorder.ConnectEnableWorklet = checkWorkletSupport(); // 明确禁用AudioWorklet 兼容不支持的场景
17
- import 'recorder-core/src/engine/pcm';
18
- import 'recorder-core/src/engine/wav';
19
- import 'recorder-core/src/extensions/waveview';
17
+ import 'recorder-core/src/engine/pcm.js';
18
+ import 'recorder-core/src/engine/wav.js';
19
+ import 'recorder-core/src/extensions/waveview.js';
20
20
  // import './lib/recorder/engine-pcm'
21
21
  // import './lib/recorder/engine-wav'
22
22
  // import './lib/recorder/extension-waveview'
@@ -633,4 +633,4 @@ export class FmodeVoiceService {
633
633
  return new Blob([audioBuffer], { type: 'audio/pcm' });
634
634
  }
635
635
  }
636
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtdm9pY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvYWlnYy92b2ljZS9mbW9kZS12b2ljZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxrRUFBa0U7QUFDbEUsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBRXBDLFlBQVk7QUFDWixTQUFTLG1CQUFtQjtJQUMxQixJQUFJLENBQUM7UUFDSCxPQUFPLENBQ0osTUFBYyxDQUFDLGdCQUFnQjtZQUMvQixNQUFjLENBQUMsWUFBWTtZQUMzQixNQUFjLENBQUMsWUFBWSxFQUFFLFlBQVk7WUFDMUMsQ0FBQyxnRUFBZ0UsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBQ0QsUUFBUSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixFQUFFLENBQUMsQ0FBQyw0QkFBNEI7QUFFbkYsT0FBTyw4QkFBOEIsQ0FBQTtBQUNyQyxPQUFPLDhCQUE4QixDQUFBO0FBQ3JDLE9BQU8sdUNBQXVDLENBQUE7QUFDOUMscUNBQXFDO0FBQ3JDLHFDQUFxQztBQUNyQyw2Q0FBNkM7QUFDN0MsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLDBCQUEwQixFQUFpQixjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUszRiw2REFBNkQ7QUFFN0QsTUFBTSxPQUFPLGlCQUFpQjtJQXlENUIsWUFDVSxRQUFrQixFQUNsQixVQUFzQjtRQUR0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGVBQVUsR0FBVixV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QUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCBSZWNvcmRlck1hbmFnZXIgZnJvbSBcIi4vbGliL3h1bmZlaS1yZWNvcmRlclwiXHJcbi8vIGltcG9ydCB7UmVjb3JkZXJNYW5hZ2VyfSBmcm9tIFwiLi9saWIvcmVjb3JkZXIvcmVjb3JkZXItbWFuYWdlclwiXHJcbmltcG9ydCBSZWNvcmRlciBmcm9tICdyZWNvcmRlci1jb3JlJ1xyXG5cclxuLy8g5qOA5rWL5rWP6KeI5Zmo5pSv5oyB5oOF5Ya1XHJcbmZ1bmN0aW9uIGNoZWNrV29ya2xldFN1cHBvcnQoKSB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb1dvcmtsZXROb2RlICYmXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb0NvbnRleHQgJiYgXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb0NvbnRleHQ/LmF1ZGlvV29ya2xldCAmJlxyXG4gICAgICAhL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpXHJcbiAgICApO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuUmVjb3JkZXIuQ29ubmVjdEVuYWJsZVdvcmtsZXQgPSBjaGVja1dvcmtsZXRTdXBwb3J0KCk7IC8vIOaYjuehruemgeeUqEF1ZGlvV29ya2xldCDlhbzlrrnkuI3mlK/mjIHnmoTlnLrmma9cclxuXHJcbmltcG9ydCAncmVjb3JkZXItY29yZS9zcmMvZW5naW5lL3BjbSdcclxuaW1wb3J0ICdyZWNvcmRlci1jb3JlL3NyYy9lbmdpbmUvd2F2J1xyXG5pbXBvcnQgJ3JlY29yZGVyLWNvcmUvc3JjL2V4dGVuc2lvbnMvd2F2ZXZpZXcnXHJcbi8vIGltcG9ydCAnLi9saWIvcmVjb3JkZXIvZW5naW5lLXBjbSdcclxuLy8gaW1wb3J0ICcuL2xpYi9yZWNvcmRlci9lbmdpbmUtd2F2J1xyXG4vLyBpbXBvcnQgJy4vbGliL3JlY29yZGVyL2V4dGVuc2lvbi13YXZldmlldydcclxuaW1wb3J0IENyeXB0b0pTIGZyb20gXCJjcnlwdG8tanNcIlxyXG5pbXBvcnQgeyBwY210b1dhdiB9IGZyb20gJy4vbGliL3BjbTJ3YXYnO1xyXG5pbXBvcnQgeyBjb252ZXJ0RnJhbWVCdWZmZXJUb0Jhc2U2NCwgcmVzYW1wbGVBdWRpbywgcmVzYW1wbGVCdWZmZXIgfSBmcm9tICcuL2xpYi9yZXNhbXBsZSc7XHJcbi8vIGltcG9ydCB7IFdlYlNwZWVjaCB9IGZyb20gJy4vY2xhc3MtYXNyJztcclxuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcbi8vIGltcG9ydCB7IERpYWdub3N0aWMgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZGlhZ25vc3RpYy9uZ3gnO1xyXG5pbXBvcnQgeyBEaWFnbm9zdGljIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2RpYWdub3N0aWMvbmd4JztcclxuLy8gaW1wb3J0IHsgRm1vZGVUVFNYdW5mZWkgfSBmcm8uL2NsYXNzLXR0cy14dW5mZWkudHMuYmFrZmVpJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEZtb2RlVm9pY2VTZXJ2aWNlIHtcclxuICBkaXNhYmxlQVNSOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gd2ViU3BlZWNoID0gV2ViU3BlZWNoO1xyXG5cclxuICAvLyDnirbmgIHnrqHnkIZcclxuICBwcml2YXRlIGlzUmVjb3JkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBpc1VzZXJGaW5pc2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHNob3VsZFJlY29ubmVjdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSByZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIG1heFJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXIgPSAzO1xyXG4gIHByaXZhdGUgcmVjb25uZWN0RGVsYXk6IG51bWJlciA9IDEwMDA7XHJcblxyXG4gIC8vIOW9leWItuebuOWFsyAtIOeLrOeri+S6jldlYlNvY2tldFxyXG4gIHJlY29yZFdhdkJsb2I6IEJsb2IgPSBudWxsO1xyXG4gIHJlY29yZFBjbUJsb2I6IEJsb2IgPSBudWxsO1xyXG4gIHJlY29yZER1cmF0aW9uOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgYWxsUmVjb3JkZWRCdWZmZXJzOiBBcnJheTxhbnk+ID0gW107IC8vIOWtmOWCqOaJgOacieW9leWItueahGJ1ZmZlclxyXG4gIHByaXZhdGUgY3VycmVudFJlY29yZGVyOiBhbnkgPSBudWxsOyAvLyDlvZPliY3nmoTlvZXliLblmajlrp7kvotcclxuICBcclxuICAvLyBXZWJTb2NrZXTnm7jlhbNcclxuICBpYXRXUzogV2ViU29ja2V0O1xyXG4gIGJ0blN0YXR1cyA9IFwiVU5ERUZJTkVEXCI7XHJcbiAgY29ublN0YXR1cyA9IFwiXCI7XHJcbiAgXHJcbiAgLy8g57uT5p6c55u45YWzXHJcbiAgcmVzdWx0VGV4dCA9IFwiXCI7XHJcbiAgcmVzdWx0VGV4dFRlbXAgPSBcIlwiO1xyXG4gIFxyXG4gIC8vIOiuoeaXtuebuOWFs1xyXG4gIGNvdW50ZG93bkludGVydmFsOiBhbnk7XHJcbiAgZHVyYXRpb25JbnRlcnZhbDogYW55O1xyXG4gIGR1cmF0aW9uU3RyOiBzdHJpbmcgPSBcIjAwOjAwXCI7XHJcbiAgZHVyYXRpb246IG51bWJlciA9IDA7XHJcbiAgbm93OiBEYXRlO1xyXG4gIFxyXG4gIC8vIOazouW9ouebuOWFs1xyXG4gIHdhdmVDbGllbnQ6IGFueTtcclxuICByZWNvcmRUeXBlID0gXCJwY21cIjtcclxuICBlbmNvZGluZ1R5cGUgPSBcInJhd1wiO1xyXG5cclxuICAvLyDlm57osIPlh73mlbBcclxuICBvblJlc3VsdFRleHRDaGFuZ2VkOiBGdW5jdGlvbjtcclxuICBvbkJlZm9yZUZpbmlzaFRhbGs6IEZ1bmN0aW9uO1xyXG4gIG9uQWZ0ZXJGaW5pc2hUYWxrOiBGdW5jdGlvbjtcclxuICBvbklucHV0Q2hhbmdlOiBGdW5jdGlvbjtcclxuICBvbkJlZm9yZVN0YXJ0VGFsazogRnVuY3Rpb247XHJcbiAgb25BZnRlclN0YXJ0VGFsazogRnVuY3Rpb247XHJcbiAgb25CZWZvcmVDYW5jZWxUYWxrOiBGdW5jdGlvbjtcclxuICBvbkFmdGVyQ2FuY2VsVGFsazogRnVuY3Rpb247XHJcbiAgb25BZnRlclJlY29yZFN0YXJ0OiBGdW5jdGlvbjtcclxuICBvbkR1cmF0aW9uU3RyQ2hhbmdlOiBGdW5jdGlvbjtcclxuXHJcbiAgLy8gQVBJ6YWN572uXHJcbiAgQVBQSUQgPSBcIjUwZjRhNDZjXCI7XHJcbiAgQVBJX1NFQ1JFVCA9IFwiTnpGbE5tRmhaREpqTUROa1pHTTNOekkwTXpnMk9HTm1cIjtcclxuICBBUElfS0VZID0gXCIxMDZkZGM0MGRmZDRiOWNhNmQ3YjQ3YzcwZmFkYTc0OVwiO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxyXG4gICAgcHJpdmF0ZSBkaWFnbm9zdGljOiBEaWFnbm9zdGljLFxyXG4gICkge1xyXG4gICAgdGhpcy5yZXF1ZXN0UGVybWlzc2lvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8g55So5oi35pON5L2c5pa55rOVXHJcbiAgdG9nZ2xlUmVjb3JkKCkge1xyXG4gICAgY29uc29sZS5sb2coJ3RvZ2dsZVJlY29yZCcsIHRoaXMuYnRuU3RhdHVzKTtcclxuICAgIGlmICh0aGlzLmJ0blN0YXR1cyA9PT0gXCJVTkRFRklORURcIiB8fCB0aGlzLmJ0blN0YXR1cyA9PT0gXCJDTE9TRURcIikge1xyXG4gICAgICB0aGlzLnN0YXJ0VGFsaygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJ0blN0YXR1cyA9PT0gXCJDT05ORUNUSU5HXCIgfHwgdGhpcy5idG5TdGF0dXMgPT09IFwiT1BFTlwiKSB7XHJcbiAgICAgIHRoaXMuZmluaXNoVGFsaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3RhcnRUYWxrKGV2ZW50Pykge1xyXG4gICAgY29uc29sZS5sb2coJ3N0YXJ0VGFsayBjYWxsZWQnKTtcclxuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xyXG4gICAgdGhpcy5vbkJlZm9yZVN0YXJ0VGFsayAmJiB0aGlzLm9uQmVmb3JlU3RhcnRUYWxrKCk7XHJcbiAgICBcclxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLm9wZW5XaXRoUHJpdmlsZWRnZSgpO1xyXG4gICAgICBcclxuICAgICAgLy8gMS4g6aaW5YWI5ZCv5Yqo54us56uL5b2V5Yi2XHJcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRJbmRlcGVuZGVudFJlY29yZGluZygpO1xyXG4gICAgICBcclxuICAgICAgLy8gMi4g54S25ZCO5ZCv5YqoV2ViU29ja2V06L+e5o6lXHJcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3VsZFJlY29ubmVjdCA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xyXG4gICAgICBcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0V2ViU29ja2V0KCk7XHJcbiAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICB0aGlzLnN0YXJ0Q291bnRkb3duKCk7XHJcbiAgICAgIHRoaXMub25BZnRlclN0YXJ0VGFsayAmJiB0aGlzLm9uQWZ0ZXJTdGFydFRhbGsoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCB0YWxrOicsIGVycm9yKTtcclxuICAgICAgdGhpcy5yZXNldFN0YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBmaW5pc2hUYWxrKCkge1xyXG4gICAgY29uc29sZS5sb2coJ2ZpbmlzaFRhbGsgY2FsbGVkJyk7XHJcbiAgICB0aGlzLmlzVXNlckZpbmlzaCA9IHRydWU7XHJcbiAgICB0aGlzLnNob3VsZFJlY29ubmVjdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkJlZm9yZUZpbmlzaFRhbGsgJiYgdGhpcy5vbkJlZm9yZUZpbmlzaFRhbGsoKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gMS4g5YWI5YWz6ZetV2ViU29ja2V0XHJcbiAgICAgIHRoaXMuY2xvc2VXZWJTb2NrZXQoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIDIuIOWBnOatoueLrOeri+W9leWItuW5tuiOt+WPluWujOaVtOmfs+mikVxyXG4gICAgICBhd2FpdCB0aGlzLnN0b3BJbmRlcGVuZGVudFJlY29yZGluZygpO1xyXG4gICAgICBcclxuICAgICAgLy8gMy4g5riF55CG54q25oCBXHJcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gICAgICB0aGlzLmNoYW5nZUJ0blN0YXR1cyhcIkNMT1NFRFwiKTtcclxuICAgICAgXHJcbiAgICAgIC8vIDQuIOW7tui/n+Wbnuiwg+ehruS/neaJgOacieWkhOeQhuWujOaIkFxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pc1VzZXJGaW5pc2gpIHtcclxuICAgICAgICAgIHRoaXMub25BZnRlckZpbmlzaFRhbGsgJiYgdGhpcy5vbkFmdGVyRmluaXNoVGFsaygpO1xyXG4gICAgICAgICAgdGhpcy5pc1VzZXJGaW5pc2ggPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICAgIFxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmluaXNoaW5nIHRhbGs6JywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsVGFsaygpIHtcclxuICAgIGNvbnNvbGUubG9nKCdjYW5jZWxUYWxrIGNhbGxlZCcpO1xyXG4gICAgdGhpcy5vbkJlZm9yZUNhbmNlbFRhbGsgJiYgdGhpcy5vbkJlZm9yZUNhbmNlbFRhbGsoKTtcclxuICAgIFxyXG4gICAgdGhpcy5pc1VzZXJGaW5pc2ggPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvdWxkUmVjb25uZWN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICBcclxuICAgIC8vIOWFs+mXrVdlYlNvY2tldFxyXG4gICAgdGhpcy5jbG9zZVdlYlNvY2tldCgpO1xyXG4gICAgXHJcbiAgICAvLyDlgZzmraLni6znq4vlvZXliLbkvYbkuI3kv53lrZjnu5PmnpxcclxuICAgIHRoaXMuY2FuY2VsSW5kZXBlbmRlbnRSZWNvcmRpbmcoKTtcclxuICAgIFxyXG4gICAgdGhpcy5yZXNldFN0YXRlKCk7XHJcbiAgICB0aGlzLm9uQWZ0ZXJDYW5jZWxUYWxrICYmIHRoaXMub25BZnRlckNhbmNlbFRhbGsoKTtcclxuICB9XHJcblxyXG4gIC8vIOeLrOeri+W9leWItuaWueazlSAtIOS4jldlYlNvY2tldOWujOWFqOino+iAplxyXG4gIGFzeW5jIHN0YXJ0SW5kZXBlbmRlbnRSZWNvcmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zb2xlLmxvZygnU3RhcnRpbmcgaW5kZXBlbmRlbnQgcmVjb3JkaW5nJyk7XHJcbiAgICBcclxuICAgIHRoaXMuYWxsUmVjb3JkZWRCdWZmZXJzID0gW107XHJcbiAgICB0aGlzLmNyZWF0ZUluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50UmVjb3JkZXIub3BlbigoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0luZGVwZW5kZW50IHJlY29yZGVyIG9wZW5lZCcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWIm+W7uuWPr+inhuWMllxyXG4gICAgICAgIGxldCB3YXZlRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5yZWNvcmQtd2F2ZVwiKTtcclxuICAgICAgICBpZiAod2F2ZURpdiAmJiBSZWNvcmRlci5XYXZlVmlldykge1xyXG4gICAgICAgICAgdGhpcy53YXZlQ2xpZW50ID0gUmVjb3JkZXIuV2F2ZVZpZXcoeyBlbGVtOiBcIi5yZWNvcmQtd2F2ZVwiIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5zdGFydCgpO1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlY29yZFN0YXJ0ICYmIHRoaXMub25BZnRlclJlY29yZFN0YXJ0KCk7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9LCAobXNnLCBpc1VzZXJOb3RBbGxvdykgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBvcGVuIGluZGVwZW5kZW50IHJlY29yZGVyOicsIG1zZyk7XHJcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN0b3BJbmRlcGVuZGVudFJlY29yZGluZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnNvbGUubG9nKCdTdG9wcGluZyBpbmRlcGVuZGVudCByZWNvcmRpbmcnKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRSZWNvcmRlcikge1xyXG4gICAgICBjb25zb2xlLmxvZygnTm8gaW5kZXBlbmRlbnQgcmVjb3JkZXIgdG8gc3RvcCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudFJlY29yZGVyLnN0b3AoXHJcbiAgICAgICAgYXN5bmMgKGJsb2I6IEJsb2IsIGR1cmF0aW9uOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdJbmRlcGVuZGVudCByZWNvcmRpbmcgc3RvcHBlZCBzdWNjZXNzZnVsbHknLCBibG9iLCBkdXJhdGlvbik7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIOS/neWtmOWujOaVtOeahOW9leWItue7k+aenFxyXG4gICAgICAgICAgdGhpcy5yZWNvcmRQY21CbG9iID0gYmxvYjtcclxuICAgICAgICAgIHRoaXMucmVjb3JkV2F2QmxvYiA9IGF3YWl0IHRoaXMucGNtQmxvYlRvV2F2QmxvYihibG9iLCA0NDEwMCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIOa4heeQhuW9leWItuWZqFxyXG4gICAgICAgICAgdGhpcy5jbGVhbnVwSW5kZXBlbmRlbnRSZWNvcmRlcigpO1xyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKG1zZykgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIueLrOeri+W9lemfs+WBnOatouWksei0pTpcIiArIG1zZyk7XHJcbiAgICAgICAgICB0aGlzLmNsZWFudXBJbmRlcGVuZGVudFJlY29yZGVyKCk7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxJbmRlcGVuZGVudFJlY29yZGluZygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdDYW5jZWxsaW5nIGluZGVwZW5kZW50IHJlY29yZGluZycpO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5jdXJyZW50UmVjb3JkZXIpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyDnm7TmjqXlhbPpl63vvIzkuI3kv53lrZjnu5PmnpxcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5jbG9zZSgpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNsb3NpbmcgaW5kZXBlbmRlbnQgcmVjb3JkZXI6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIHRoaXMucmVjb3JkUGNtQmxvYiA9IG51bGw7XHJcbiAgICB0aGlzLnJlY29yZFdhdkJsb2IgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVJbmRlcGVuZGVudFJlY29yZGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFJlY29yZGVyKSB7XHJcbiAgICAgIHRoaXMuY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1cnJlbnRSZWNvcmRlciA9IFJlY29yZGVyKHtcclxuICAgICAgdHlwZTogdGhpcy5yZWNvcmRUeXBlLFxyXG4gICAgICBzYW1wbGVSYXRlOiA0NDEwMCxcclxuICAgICAgYml0UmF0ZTogMTYsXHJcbiAgICAgIG9uUHJvY2VzczogKGJ1ZmZlcnMsIHBvd2VyTGV2ZWwsIGJ1ZmZlckR1cmF0aW9uLCBidWZmZXJTYW1wbGVSYXRlLCBuZXdCdWZmZXJJZHgsIGFzeW5jRW5kKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVjb3JkaW5nKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIOS/neWtmOaJgOaciWJ1ZmZlcueUqOS6juacgOe7iOWQiOaIkOWujOaVtOmfs+mikVxyXG4gICAgICAgIHRoaXMuYWxsUmVjb3JkZWRCdWZmZXJzID0gYnVmZmVycztcclxuXHJcbiAgICAgICAgLy8g6I635Y+W5pyA5paw55qE6Z+z6aKR54mH5q6155So5LqO5a6e5pe2QVNSXHJcbiAgICAgICAgbGV0IGZyYW1lQnVmZmVyID0gYnVmZmVycy5sZW5ndGggJiYgYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmICghZnJhbWVCdWZmZXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8g6YeN6YeH5qC35YiwMTZrSHrnlKjkuo5BU1JcclxuICAgICAgICBmcmFtZUJ1ZmZlciA9IHJlc2FtcGxlQnVmZmVyKGZyYW1lQnVmZmVyLCA0NDEwMCwgMTYwMDApO1xyXG5cclxuICAgICAgICAvLyDlj5HpgIHliLBXZWJTb2NrZXTov5vooYzlrp7ml7ZBU1JcclxuICAgICAgICB0aGlzLnNlbmRBdWRpb1RvV2ViU29ja2V0KGZyYW1lQnVmZmVyKTtcclxuXHJcbiAgICAgICAgLy8g5pu05paw5rOi5b2i5pi+56S6XHJcbiAgICAgICAgdGhpcy53YXZlQ2xpZW50Py5pbnB1dChidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV0sIHBvd2VyTGV2ZWwsIGJ1ZmZlclNhbXBsZVJhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UmVjb3JkZXIpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5jbG9zZSgpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNsZWFuaW5nIHVwIGluZGVwZW5kZW50IHJlY29yZGVyOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRBdWRpb1RvV2ViU29ja2V0KGZyYW1lQnVmZmVyOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlhdFdTICYmIHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4gJiYgIXRoaXMuZGlzYWJsZUFTUikge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHN0YXR1czogMSxcclxuICAgICAgICAgICAgZm9ybWF0OiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgIGVuY29kaW5nOiB0aGlzLmVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgYXVkaW86IGNvbnZlcnRGcmFtZUJ1ZmZlclRvQmFzZTY0KGZyYW1lQnVmZmVyKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNlbmRpbmcgYXVkaW8gZGF0YSB0byBXZWJTb2NrZXQ6XCIsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gV2ViU29ja2V055u45YWz5pa55rOVIC0g5LuF55So5LqOQVNS77yM5LiN5o6n5Yi25b2V5Yi2XHJcbiAgY29ubmVjdFdlYlNvY2tldCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiY29ubmVjdFdlYlNvY2tldCBjYWxsZWQsIHNob3VsZFJlY29ubmVjdDpcIiwgdGhpcy5zaG91bGRSZWNvbm5lY3QpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb25uZWN0IHx8ICF0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiTm90IGNvbm5lY3RpbmcgV2ViU29ja2V0IC0gc2hvdWxkUmVjb25uZWN0OlwiLCB0aGlzLnNob3VsZFJlY29ubmVjdCwgXCJpc1JlY29yZGluZzpcIiwgdGhpcy5pc1JlY29yZGluZyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlhbPpl63njrDmnInov57mjqVcclxuICAgIHRoaXMuY2xvc2VXZWJTb2NrZXQoKTtcclxuXHJcbiAgICBjb25zdCB3ZWJzb2NrZXRVcmwgPSB0aGlzLmdldFdlYlNvY2tldFVybCgpO1xyXG4gICAgY29uc29sZS5sb2coXCJDb25uZWN0aW5nIHRvOlwiLCB3ZWJzb2NrZXRVcmwpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChcIldlYlNvY2tldFwiIGluIHdpbmRvdykge1xyXG4gICAgICAgIHRoaXMuaWF0V1MgPSBuZXcgV2ViU29ja2V0KHdlYnNvY2tldFVybCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIua1j+iniOWZqOS4jeaUr+aMgVdlYlNvY2tldFwiKTtcclxuICAgICAgICBhbGVydChcIua1j+iniOWZqOS4jeaUr+aMgVdlYlNvY2tldFwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlQnRuU3RhdHVzKFwiQ09OTkVDVElOR1wiKTtcclxuXHJcbiAgICAgIHRoaXMuaWF0V1Mub25vcGVuID0gKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIldlYlNvY2tldCBjb25uZWN0ZWQgZm9yIEFTUlwiKTtcclxuICAgICAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzID0gMDtcclxuICAgICAgICB0aGlzLmNoYW5nZUJ0blN0YXR1cyhcIk9QRU5cIik7XHJcblxyXG4gICAgICAgIC8vIOWPkemAgeWIneWni+WPguaVsFxyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgIGNvbW1vbjoge1xyXG4gICAgICAgICAgICBhcHBfaWQ6IHRoaXMuQVBQSUQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYnVzaW5lc3M6IHtcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6IFwiemhfY25cIixcclxuICAgICAgICAgICAgZG9tYWluOiBcImlhdFwiLFxyXG4gICAgICAgICAgICBhY2NlbnQ6IFwibWFuZGFyaW5cIixcclxuICAgICAgICAgICAgdmFkX2VvczogMTAwMDAsIC8vIOWinuWKoOWIsDEw56eSXHJcbiAgICAgICAgICAgIGR3YTogXCJ3cGdzXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBzdGF0dXM6IDAsXHJcbiAgICAgICAgICAgIGZvcm1hdDogXCJhdWRpby9MMTY7cmF0ZT0xNjAwMFwiLFxyXG4gICAgICAgICAgICBlbmNvZGluZzogdGhpcy5lbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5pYXRXUy5zZW5kKEpTT04uc3RyaW5naWZ5KHBhcmFtcykpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5pYXRXUy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVuZGVyUmVzdWx0KGUuZGF0YSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmlhdFdTLm9uZXJyb3IgPSAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXZWJTb2NrZXQgZXJyb3I6XCIsIGUpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlV2ViU29ja2V0RXJyb3IoKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaWF0V1Mub25jbG9zZSA9IChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJXZWJTb2NrZXQgY2xvc2VkOlwiLCBlLmNvZGUsIGUucmVhc29uKTtcclxuICAgICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldENsb3NlKGUpO1xyXG4gICAgICB9O1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIFdlYlNvY2tldDpcIiwgZXJyb3IpO1xyXG4gICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldEVycm9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdlYlNvY2tldENsb3NlKGV2ZW50OiBDbG9zZUV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImhhbmRsZVdlYlNvY2tldENsb3NlXCIsIHtcclxuICAgICAgY29kZTogZXZlbnQuY29kZSxcclxuICAgICAgcmVhc29uOiBldmVudC5yZWFzb24sXHJcbiAgICAgIHNob3VsZFJlY29ubmVjdDogdGhpcy5zaG91bGRSZWNvbm5lY3QsXHJcbiAgICAgIGlzUmVjb3JkaW5nOiB0aGlzLmlzUmVjb3JkaW5nLFxyXG4gICAgICBpc1VzZXJGaW5pc2g6IHRoaXMuaXNVc2VyRmluaXNoXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDlpoLmnpznlKjmiLflt7Lnu4/nu5PmnZ/miJbkuI3lupTor6Xph43ov57vvIzliJnkuI3lpITnkIZcclxuICAgIGlmICh0aGlzLmlzVXNlckZpbmlzaCB8fCAhdGhpcy5zaG91bGRSZWNvbm5lY3QgfHwgIXRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWPkemAgee7k+adn+W4p++8iOWmguaenOmcgOimge+8iVxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuaWF0V1MgJiYgdGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgICBcInN0YXR1c1wiOiAyLFxyXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgIFwiZW5jb2RpbmdcIjogdGhpcy5lbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICAgIFwiYXVkaW9cIjogXCJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgZW5kIGZyYW1lIG9uIGNsb3NlOicsIGVycik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5q2j5bi45YWz6Zet56CB5oiW5pyN5Yqh56uv5Li75Yqo5YWz6Zet77yM5bCd6K+V6YeN6L+eXHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gMTAwMCB8fCBldmVudC5jb2RlID09PSAxMDA2IHx8IGV2ZW50LmNvZGUgPT09IDEwMTEpIHtcclxuICAgICAgdGhpcy5hdHRlbXB0UmVjb25uZWN0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiV2ViU29ja2V0IGNsb3NlZCB3aXRoIGVycm9yIGNvZGU6XCIsIGV2ZW50LmNvZGUpO1xyXG4gICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldEVycm9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdlYlNvY2tldEVycm9yKCkge1xyXG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29ubmVjdCB8fCAhdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0dGVtcHRSZWNvbm5lY3QoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXR0ZW1wdFJlY29ubmVjdCgpIHtcclxuICAgIGlmICh0aGlzLnJlY29ubmVjdEF0dGVtcHRzID49IHRoaXMubWF4UmVjb25uZWN0QXR0ZW1wdHMpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIk1heCByZWNvbm5lY3QgYXR0ZW1wdHMgcmVhY2hlZFwiKTtcclxuICAgICAgLy8g5LiN5pS55Y+Y5b2V5Yi254q25oCB77yM5Y+q5pivQVNS5pqC5pe25LiN5Y+v55SoXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzKys7XHJcbiAgICBjb25zb2xlLmxvZyhgQXR0ZW1wdGluZyBXZWJTb2NrZXQgcmVjb25uZWN0ICR7dGhpcy5yZWNvbm5lY3RBdHRlbXB0c30vJHt0aGlzLm1heFJlY29ubmVjdEF0dGVtcHRzfWApO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zaG91bGRSZWNvbm5lY3QgJiYgdGhpcy5pc1JlY29yZGluZyAmJiAhdGhpcy5pc1VzZXJGaW5pc2gpIHtcclxuICAgICAgICB0aGlzLmNvbm5lY3RXZWJTb2NrZXQoKTtcclxuICAgICAgfVxyXG4gICAgfSwgdGhpcy5yZWNvbm5lY3REZWxheSAqIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZVdlYlNvY2tldCgpIHtcclxuICAgIGlmICh0aGlzLmlhdFdTKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8g5Y+R6YCB57uT5p2f5binXHJcbiAgICAgICAgaWYgKHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICAgICAgXCJzdGF0dXNcIjogMixcclxuICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgICAgXCJlbmNvZGluZ1wiOiB0aGlzLmVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgICBcImF1ZGlvXCI6IFwiXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTiB8fCB0aGlzLmlhdFdTLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XHJcbiAgICAgICAgICB0aGlzLmlhdFdTLmNsb3NlKDEwMDAsIFwiVXNlciBpbml0aWF0ZWQgY2xvc2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBjbG9zaW5nIFdlYlNvY2tldDpcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaWF0V1MgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g54q25oCB566h55CGXHJcbiAgcHJpdmF0ZSByZXNldFN0YXRlKCkge1xyXG4gICAgdGhpcy5yZXN1bHRUZXh0ID0gXCJcIjtcclxuICAgIHRoaXMucmVzdWx0VGV4dFRlbXAgPSBcIlwiO1xyXG4gICAgdGhpcy5kdXJhdGlvblN0ciA9IFwiMDA6MDBcIjtcclxuICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG4gICAgdGhpcy5yZWNvcmREdXJhdGlvbiA9IDA7XHJcbiAgICB0aGlzLmFsbFJlY29yZGVkQnVmZmVycyA9IFtdO1xyXG4gICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclRpbWVycygpIHtcclxuICAgIGlmICh0aGlzLmNvdW50ZG93bkludGVydmFsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jb3VudGRvd25JbnRlcnZhbCk7XHJcbiAgICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZHVyYXRpb25JbnRlcnZhbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZHVyYXRpb25JbnRlcnZhbCk7XHJcbiAgICAgIHRoaXMuZHVyYXRpb25JbnRlcnZhbCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VCdG5TdGF0dXMoc3RhdHVzOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYnRuU3RhdHVzID0gc3RhdHVzO1xyXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgY2FzZSBcIkNPTk5FQ1RJTkdcIjpcclxuICAgICAgICB0aGlzLmNvbm5TdGF0dXMgPSBcIuW7uueri+i/nuaOpeS4rVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiT1BFTlwiOlxyXG4gICAgICAgIHRoaXMuY29ublN0YXR1cyA9IGDlvZXpn7PkuK3vvIgke3RoaXMuZHVyYXRpb25TdHJ977yJYDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkNMT1NJTkdcIjpcclxuICAgICAgICB0aGlzLmNvbm5TdGF0dXMgPSBcIuWFs+mXrei/nuaOpeS4rVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiQ0xPU0VEXCI6XHJcbiAgICAgICAgdGhpcy5jb25uU3RhdHVzID0gXCLlvIDlp4vlvZXpn7NcIjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOiuoeaXtuWZqFxyXG4gIHN0YXJ0Q291bnRkb3duKCkge1xyXG4gICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gICAgdGhpcy5yZWNvcmREdXJhdGlvbiA9IDA7XHJcbiAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuICAgIHRoaXMubm93ID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAvLyDlvZXpn7Pml7bplb/orqHml7blmajvvIgxMDBtc+eyvuW6pu+8iVxyXG4gICAgdGhpcy5kdXJhdGlvbkludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICAgIHRoaXMucmVjb3JkRHVyYXRpb24gKz0gMTAwO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDApO1xyXG5cclxuICAgIC8vIOaYvuekuuaXtumVv+iuoeaXtuWZqO+8iDHnp5Lnsr7luqbvvIlcclxuICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jb3VudFRpbWVyKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgY291bnRUaW1lcigpIHtcclxuICAgIHRoaXMuZHVyYXRpb24rKztcclxuICAgIGxldCBtaW51dGVTdHIgPSBTdHJpbmcoTWF0aC5mbG9vcih0aGlzLmR1cmF0aW9uIC8gNjApKS5wYWRTdGFydCgyLCBcIjBcIik7XHJcbiAgICBsZXQgc2Vjb25kU3RyID0gU3RyaW5nKHRoaXMuZHVyYXRpb24gJSA2MCkucGFkU3RhcnQoMiwgXCIwXCIpO1xyXG4gICAgbGV0IGR1cmF0aW9uU3RyID0gbWludXRlU3RyICsgXCI6XCIgKyBzZWNvbmRTdHI7XHJcbiAgICB0aGlzLmR1cmF0aW9uU3RyID0gZHVyYXRpb25TdHI7XHJcbiAgICB0aGlzLmNvbm5TdGF0dXMgPSBg5b2V6Z+z5Lit77yIJHt0aGlzLmR1cmF0aW9uU3Ryfe+8iWA7XHJcbiAgICB0aGlzLm9uRHVyYXRpb25TdHJDaGFuZ2UgJiYgdGhpcy5vbkR1cmF0aW9uU3RyQ2hhbmdlKGR1cmF0aW9uU3RyKTtcclxuICB9XHJcblxyXG4gIC8vIOe7k+aenOWkhOeQhlxyXG4gIHJlbmRlclJlc3VsdChyZXN1bHREYXRhOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBqc29uRGF0YSA9IEpTT04ucGFyc2UocmVzdWx0RGF0YSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoanNvbkRhdGEuZGF0YSAmJiBqc29uRGF0YS5kYXRhLnJlc3VsdCkge1xyXG4gICAgICAgIGxldCBkYXRhID0ganNvbkRhdGEuZGF0YS5yZXN1bHQ7XHJcbiAgICAgICAgbGV0IHN0ciA9IFwiXCI7XHJcbiAgICAgICAgbGV0IHdzID0gZGF0YS53cztcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBzdHIgPSBzdHIgKyB3c1tpXS5jd1swXS53O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5aSE55CG5Yqo5oCB5L+u5q2jXHJcbiAgICAgICAgaWYgKGRhdGEucGdzKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YS5wZ3MgPT09IFwiYXBkXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRUZXh0ID0gdGhpcy5yZXN1bHRUZXh0VGVtcDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVzdWx0VGV4dFRlbXAgPSB0aGlzLnJlc3VsdFRleHQgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzdWx0VGV4dCA9IHRoaXMucmVzdWx0VGV4dCArIHN0cjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25JbnB1dENoYW5nZSAmJiB0aGlzLm9uSW5wdXRDaGFuZ2UodGhpcy5nZXRVc2VySW5wdXQoKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOWkhOeQhue7k+adn+eKtuaAgVxyXG4gICAgICBpZiAoanNvbkRhdGEuY29kZSA9PT0gMCAmJiBqc29uRGF0YS5kYXRhLnN0YXR1cyA9PT0gMikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQVNSIHNlc3Npb24gY29tcGxldGVkLCB3aWxsIHJlY29ubmVjdCBpZiBzdGlsbCByZWNvcmRpbmdcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuaWF0V1MgJiYgdGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgICAgdGhpcy5pYXRXUy5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5aSE55CG6ZSZ6K+vXHJcbiAgICAgIGlmIChqc29uRGF0YS5jb2RlICE9PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkFTUiBlcnJvcjpcIiwganNvbkRhdGEpO1xyXG4gICAgICAgIGlmICh0aGlzLmlhdFdTICYmIHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgICAgIHRoaXMuaWF0V1MuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIHJlc3VsdDpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VXNlcklucHV0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gXCJcIiArICh0aGlzLnJlc3VsdFRleHRUZW1wIHx8IHRoaXMucmVzdWx0VGV4dCk7XHJcbiAgfVxyXG5cclxuICAvLyDmnYPpmZDlkozliJ3lp4vljJZcclxuICBhc3luYyBvcGVuV2l0aFByaXZpbGVkZ2UoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3RQZXJtaXNzaW9uKCk7XHJcbiAgICBcclxuICAgIGlmIChSZWNvcmRlci5Jc09wZW4oKSkgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgLy8g6L+Z6YeM5LiN5Yib5bu65b2V5Yi25Zmo77yM5Zug5Li65oiR5Lus5L2/55So54us56uL55qE5b2V5Yi25ZmoXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIOmfs+mikeWkhOeQhuaWueazlVxyXG4gIGFzeW5jIHBjbUJsb2JUb1dhdkJsb2IocGNtQmxvYjogQmxvYiwgc2FtcGxlUmF0ZTogbnVtYmVyKTogUHJvbWlzZTxCbG9iPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIGxldCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgXHJcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICBsZXQgcGNtRGF0YTogYW55ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBsZXQgd2F2QmxvYiA9IHBjbXRvV2F2KHBjbURhdGEsIHNhbXBsZVJhdGUsIDEsIDE2KTtcclxuICAgICAgICByZXNvbHZlKHdhdkJsb2IpO1xyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihwY21CbG9iKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGxheVBDTShwY21CbG9iOiBCbG9iLCBzYW1wbGVSYXRlOiBudW1iZXIpIHtcclxuICAgIGxldCB3YXZCbG9iID0gYXdhaXQgdGhpcy5wY21CbG9iVG9XYXZCbG9iKHBjbUJsb2IsIHNhbXBsZVJhdGUpO1xyXG4gICAgbGV0IHdhdlVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHdhdkJsb2IpO1xyXG4gICAgbGV0IGF1ZGlvID0gbmV3IEF1ZGlvKCk7XHJcbiAgICBhdWRpby5zcmMgPSB3YXZVcmw7XHJcbiAgICBhdWRpby5wbGF5KCk7XHJcbiAgfVxyXG5cclxuICBwbGF5UmVjb3JkKCkge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkUGNtQmxvYikge1xyXG4gICAgICB0aGlzLnBsYXlQQ00odGhpcy5yZWNvcmRQY21CbG9iLCA0NDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBXZWJTb2NrZXQgVVJM55Sf5oiQXHJcbiAgZ2V0V2ViU29ja2V0VXJsKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdXJsID0gXCJ3c3M6Ly9pYXQtYXBpLnhmeXVuLmNuL3YyL2lhdFwiO1xyXG4gICAgbGV0IGhvc3QgPSBcImlhdC1hcGkueGZ5dW4uY25cIjtcclxuICAgIFxyXG4gICAgbGV0IGFwaUtleSA9IHRoaXMuQVBJX0tFWTtcclxuICAgIGxldCBhcGlTZWNyZXQgPSB0aGlzLkFQSV9TRUNSRVQ7XHJcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKTtcclxuICAgIGxldCBhbGdvcml0aG0gPSBcImhtYWMtc2hhMjU2XCI7XHJcbiAgICBsZXQgaGVhZGVycyA9IFwiaG9zdCBkYXRlIHJlcXVlc3QtbGluZVwiO1xyXG4gICAgbGV0IHNpZ25hdHVyZU9yaWdpbiA9IGBob3N0OiAke2hvc3R9XFxuZGF0ZTogJHtkYXRlfVxcbkdFVCAvdjIvaWF0IEhUVFAvMS4xYDtcclxuICAgIGxldCBzaWduYXR1cmVTaGEgPSBDcnlwdG9KUy5IbWFjU0hBMjU2KHNpZ25hdHVyZU9yaWdpbiwgYXBpU2VjcmV0KTtcclxuICAgIGxldCBzaWduYXR1cmUgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeShzaWduYXR1cmVTaGEpO1xyXG4gICAgbGV0IGF1dGhvcml6YXRpb25PcmlnaW4gPSBgYXBpX2tleT1cIiR7YXBpS2V5fVwiLCBhbGdvcml0aG09XCIke2FsZ29yaXRobX1cIiwgaGVhZGVycz1cIiR7aGVhZGVyc31cIiwgc2lnbmF0dXJlPVwiJHtzaWduYXR1cmV9XCJgO1xyXG4gICAgbGV0IGF1dGhvcml6YXRpb24gPSBidG9hKGF1dGhvcml6YXRpb25PcmlnaW4pO1xyXG4gICAgdXJsID0gYCR7dXJsfT9hdXRob3JpemF0aW9uPSR7YXV0aG9yaXphdGlvbn0mZGF0ZT0ke2RhdGV9Jmhvc3Q9JHtob3N0fWA7XHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuXHJcbiAgdG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XHJcbiAgICB2YXIgYmluYXJ5ID0gXCJcIjtcclxuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICB2YXIgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpbmRvdy5idG9hKGJpbmFyeSk7XHJcbiAgfVxyXG5cclxuICAvLyDnp7vliqjnq6/mnYPpmZDmlrnms5VcclxuICBpc0NhcGFjaXRvcigpOiBib29sZWFuIHtcclxuICAgIGlmKCF0aGlzLnBsYXRmb3JtPy5pcykgcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybS5pcyhcImNhcGFjaXRvclwiKSB8fCB0aGlzLnBsYXRmb3JtLmlzKFwiY29yZG92YVwiKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RQZXJtaXNzaW9uKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzQ2FwYWNpdG9yKCkpIHJldHVybjtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0U3RvYWdlUGVybWlzc2lvbigpO1xyXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RDYW1lcmFQZXJtaXNzaW9uKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdE1pY1Blcm1pc3Npb24oKTtcclxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0UmVjb3JkQXVkaW9QZXJtaXNzaW9uKCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVxdWVzdFJlY29yZEF1ZGlvUGVybWlzc2lvbigpIHtsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5yZXF1ZXN0UnVudGltZVBlcm1pc3Npb25zKFt0aGlzLmRpYWdub3N0aWMucGVybWlzc2lvbi5SRUNPUkRfQVVESU9dKTtcclxuICAgIGNvbnNvbGUubG9nKFwicmVjb3JkIHBlcm1pc3Npb24gcmVxdWVzdDpcIiwgZGF0YSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0TWljUGVybWlzc2lvbigpIHtcclxuICAgIGxldCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5pc01pY3JvcGhvbmVBdXRob3JpemVkKCk7XHJcbiAgICBjb25zb2xlLmxvZyhcInBlcm1pc3Nvbl9NSUM6XCIsIGlzQXZhaWxhYmxlKTtcclxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcclxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMucmVxdWVzdE1pY3JvcGhvbmVBdXRob3JpemF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0U3RvYWdlUGVybWlzc2lvbigpIHtcclxuICAgIGxldCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5pc0V4dGVybmFsU3RvcmFnZUF1dGhvcml6ZWQoKTtcclxuICAgIGNvbnNvbGUubG9nKFwicGVybWlzc29uX1NUT1JBR0U6XCIsIGlzQXZhaWxhYmxlKTtcclxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcclxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMucmVxdWVzdEV4dGVybmFsU3RvcmFnZUF1dGhvcml6YXRpb24oKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RDYW1lcmFQZXJtaXNzaW9uKCkge1xyXG4gICAgbGV0IGlzQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLmlzQ2FtZXJhQXV0aG9yaXplZCgpO1xyXG4gICAgY29uc29sZS5sb2coXCJwZXJtaXNzb25fQ2FtZXJhOlwiLCBpc0F2YWlsYWJsZSk7XHJcbiAgICBpZiAoIWlzQXZhaWxhYmxlKSB7XHJcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLnJlcXVlc3RDYW1lcmFBdXRob3JpemF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyDlhbbku5bovoXliqnmlrnms5VcclxuICBzcGxpdEF1ZGlvRGF0YShhdWRpb0RhdGE6IGFueSkge1xyXG4gICAgY29uc3Qgc2VnbWVudFNpemUgPSAxMjgwO1xyXG4gICAgY29uc3Qgc2VnbWVudENvdW50ID0gTWF0aC5jZWlsKGF1ZGlvRGF0YS5sZW5ndGggLyBzZWdtZW50U2l6ZSk7XHJcbiAgICBjb25zdCBzZWdtZW50cyA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudENvdW50OyBpKyspIHtcclxuICAgICAgY29uc3Qgc3RhcnQgPSBpICogc2VnbWVudFNpemU7XHJcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgc2VnbWVudFNpemU7XHJcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBhdWRpb0RhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlZ21lbnRzO1xyXG4gIH1cclxuXHJcbiAgQnVmZmVyVG9CbG9iKGJ1ZmZlcjogYW55KSB7XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2F1ZGlvL3BjbScgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwbGF5QnVmZmVycygpIHtcclxuICAgIGxldCBhdWRpb0Jsb2IgPSBhd2FpdCB0aGlzLkJ1ZmZlcnNUb0Jsb2IodGhpcy5hbGxSZWNvcmRlZEJ1ZmZlcnMpO1xyXG4gICAgdGhpcy5wbGF5UENNKGF1ZGlvQmxvYiwgNDQxMDApO1xyXG4gIH1cclxuXHJcbiAgQnVmZmVyc1RvQmxvYihidWZmZXJzOiBBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgYXVkaW9CdWZmZXI6IGFueSA9IFtdO1xyXG4gICAgYnVmZmVycy5mb3JFYWNoKGJ1ZmZlciA9PiB7XHJcbiAgICAgIGJ1ZmZlci5mb3JFYWNoKGludDE2ID0+IHtcclxuICAgICAgICBhdWRpb0J1ZmZlci5wdXNoKGludDE2KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBuZXcgQmxvYihbYXVkaW9CdWZmZXJdLCB7IHR5cGU6ICdhdWRpby9wY20nIH0pO1xyXG4gIH1cclxufSJdfQ==
636
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUtdm9pY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvYWlnYy92b2ljZS9mbW9kZS12b2ljZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxrRUFBa0U7QUFDbEUsT0FBTyxRQUFRLE1BQU0sZUFBZSxDQUFBO0FBRXBDLFlBQVk7QUFDWixTQUFTLG1CQUFtQjtJQUMxQixJQUFJLENBQUM7UUFDSCxPQUFPLENBQ0osTUFBYyxDQUFDLGdCQUFnQjtZQUMvQixNQUFjLENBQUMsWUFBWTtZQUMzQixNQUFjLENBQUMsWUFBWSxFQUFFLFlBQVk7WUFDMUMsQ0FBQyxnRUFBZ0UsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUM1RixDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBQ0QsUUFBUSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixFQUFFLENBQUMsQ0FBQyw0QkFBNEI7QUFFbkYsT0FBTyxpQ0FBaUMsQ0FBQTtBQUN4QyxPQUFPLGlDQUFpQyxDQUFBO0FBQ3hDLE9BQU8sMENBQTBDLENBQUE7QUFDakQscUNBQXFDO0FBQ3JDLHFDQUFxQztBQUNyQyw2Q0FBNkM7QUFDN0MsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFBO0FBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLDBCQUEwQixFQUFpQixjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUszRiw2REFBNkQ7QUFFN0QsTUFBTSxPQUFPLGlCQUFpQjtJQXlENUIsWUFDVSxRQUFrQixFQUNsQixVQUFzQjtRQUR0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGVBQVUsR0FBVixV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QUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCBSZWNvcmRlck1hbmFnZXIgZnJvbSBcIi4vbGliL3h1bmZlaS1yZWNvcmRlclwiXHJcbi8vIGltcG9ydCB7UmVjb3JkZXJNYW5hZ2VyfSBmcm9tIFwiLi9saWIvcmVjb3JkZXIvcmVjb3JkZXItbWFuYWdlclwiXHJcbmltcG9ydCBSZWNvcmRlciBmcm9tICdyZWNvcmRlci1jb3JlJ1xyXG5cclxuLy8g5qOA5rWL5rWP6KeI5Zmo5pSv5oyB5oOF5Ya1XHJcbmZ1bmN0aW9uIGNoZWNrV29ya2xldFN1cHBvcnQoKSB7XHJcbiAgdHJ5IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb1dvcmtsZXROb2RlICYmXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb0NvbnRleHQgJiYgXHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5BdWRpb0NvbnRleHQ/LmF1ZGlvV29ya2xldCAmJlxyXG4gICAgICAhL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpXHJcbiAgICApO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuUmVjb3JkZXIuQ29ubmVjdEVuYWJsZVdvcmtsZXQgPSBjaGVja1dvcmtsZXRTdXBwb3J0KCk7IC8vIOaYjuehruemgeeUqEF1ZGlvV29ya2xldCDlhbzlrrnkuI3mlK/mjIHnmoTlnLrmma9cclxuXHJcbmltcG9ydCAncmVjb3JkZXItY29yZS9zcmMvZW5naW5lL3BjbS5qcydcclxuaW1wb3J0ICdyZWNvcmRlci1jb3JlL3NyYy9lbmdpbmUvd2F2LmpzJ1xyXG5pbXBvcnQgJ3JlY29yZGVyLWNvcmUvc3JjL2V4dGVuc2lvbnMvd2F2ZXZpZXcuanMnXHJcbi8vIGltcG9ydCAnLi9saWIvcmVjb3JkZXIvZW5naW5lLXBjbSdcclxuLy8gaW1wb3J0ICcuL2xpYi9yZWNvcmRlci9lbmdpbmUtd2F2J1xyXG4vLyBpbXBvcnQgJy4vbGliL3JlY29yZGVyL2V4dGVuc2lvbi13YXZldmlldydcclxuaW1wb3J0IENyeXB0b0pTIGZyb20gXCJjcnlwdG8tanNcIlxyXG5pbXBvcnQgeyBwY210b1dhdiB9IGZyb20gJy4vbGliL3BjbTJ3YXYnO1xyXG5pbXBvcnQgeyBjb252ZXJ0RnJhbWVCdWZmZXJUb0Jhc2U2NCwgcmVzYW1wbGVBdWRpbywgcmVzYW1wbGVCdWZmZXIgfSBmcm9tICcuL2xpYi9yZXNhbXBsZSc7XHJcbi8vIGltcG9ydCB7IFdlYlNwZWVjaCB9IGZyb20gJy4vY2xhc3MtYXNyJztcclxuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcbi8vIGltcG9ydCB7IERpYWdub3N0aWMgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZGlhZ25vc3RpYy9uZ3gnO1xyXG5pbXBvcnQgeyBEaWFnbm9zdGljIH0gZnJvbSAnQGF3ZXNvbWUtY29yZG92YS1wbHVnaW5zL2RpYWdub3N0aWMvbmd4JztcclxuLy8gaW1wb3J0IHsgRm1vZGVUVFNYdW5mZWkgfSBmcm8uL2NsYXNzLXR0cy14dW5mZWkudHMuYmFrZmVpJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEZtb2RlVm9pY2VTZXJ2aWNlIHtcclxuICBkaXNhYmxlQVNSOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gd2ViU3BlZWNoID0gV2ViU3BlZWNoO1xyXG5cclxuICAvLyDnirbmgIHnrqHnkIZcclxuICBwcml2YXRlIGlzUmVjb3JkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBpc1VzZXJGaW5pc2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIHNob3VsZFJlY29ubmVjdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSByZWNvbm5lY3RBdHRlbXB0czogbnVtYmVyID0gMDtcclxuICBwcml2YXRlIG1heFJlY29ubmVjdEF0dGVtcHRzOiBudW1iZXIgPSAzO1xyXG4gIHByaXZhdGUgcmVjb25uZWN0RGVsYXk6IG51bWJlciA9IDEwMDA7XHJcblxyXG4gIC8vIOW9leWItuebuOWFsyAtIOeLrOeri+S6jldlYlNvY2tldFxyXG4gIHJlY29yZFdhdkJsb2I6IEJsb2IgPSBudWxsO1xyXG4gIHJlY29yZFBjbUJsb2I6IEJsb2IgPSBudWxsO1xyXG4gIHJlY29yZER1cmF0aW9uOiBudW1iZXIgPSAwO1xyXG4gIHByaXZhdGUgYWxsUmVjb3JkZWRCdWZmZXJzOiBBcnJheTxhbnk+ID0gW107IC8vIOWtmOWCqOaJgOacieW9leWItueahGJ1ZmZlclxyXG4gIHByaXZhdGUgY3VycmVudFJlY29yZGVyOiBhbnkgPSBudWxsOyAvLyDlvZPliY3nmoTlvZXliLblmajlrp7kvotcclxuICBcclxuICAvLyBXZWJTb2NrZXTnm7jlhbNcclxuICBpYXRXUzogV2ViU29ja2V0O1xyXG4gIGJ0blN0YXR1cyA9IFwiVU5ERUZJTkVEXCI7XHJcbiAgY29ublN0YXR1cyA9IFwiXCI7XHJcbiAgXHJcbiAgLy8g57uT5p6c55u45YWzXHJcbiAgcmVzdWx0VGV4dCA9IFwiXCI7XHJcbiAgcmVzdWx0VGV4dFRlbXAgPSBcIlwiO1xyXG4gIFxyXG4gIC8vIOiuoeaXtuebuOWFs1xyXG4gIGNvdW50ZG93bkludGVydmFsOiBhbnk7XHJcbiAgZHVyYXRpb25JbnRlcnZhbDogYW55O1xyXG4gIGR1cmF0aW9uU3RyOiBzdHJpbmcgPSBcIjAwOjAwXCI7XHJcbiAgZHVyYXRpb246IG51bWJlciA9IDA7XHJcbiAgbm93OiBEYXRlO1xyXG4gIFxyXG4gIC8vIOazouW9ouebuOWFs1xyXG4gIHdhdmVDbGllbnQ6IGFueTtcclxuICByZWNvcmRUeXBlID0gXCJwY21cIjtcclxuICBlbmNvZGluZ1R5cGUgPSBcInJhd1wiO1xyXG5cclxuICAvLyDlm57osIPlh73mlbBcclxuICBvblJlc3VsdFRleHRDaGFuZ2VkOiBGdW5jdGlvbjtcclxuICBvbkJlZm9yZUZpbmlzaFRhbGs6IEZ1bmN0aW9uO1xyXG4gIG9uQWZ0ZXJGaW5pc2hUYWxrOiBGdW5jdGlvbjtcclxuICBvbklucHV0Q2hhbmdlOiBGdW5jdGlvbjtcclxuICBvbkJlZm9yZVN0YXJ0VGFsazogRnVuY3Rpb247XHJcbiAgb25BZnRlclN0YXJ0VGFsazogRnVuY3Rpb247XHJcbiAgb25CZWZvcmVDYW5jZWxUYWxrOiBGdW5jdGlvbjtcclxuICBvbkFmdGVyQ2FuY2VsVGFsazogRnVuY3Rpb247XHJcbiAgb25BZnRlclJlY29yZFN0YXJ0OiBGdW5jdGlvbjtcclxuICBvbkR1cmF0aW9uU3RyQ2hhbmdlOiBGdW5jdGlvbjtcclxuXHJcbiAgLy8gQVBJ6YWN572uXHJcbiAgQVBQSUQgPSBcIjUwZjRhNDZjXCI7XHJcbiAgQVBJX1NFQ1JFVCA9IFwiTnpGbE5tRmhaREpqTUROa1pHTTNOekkwTXpnMk9HTm1cIjtcclxuICBBUElfS0VZID0gXCIxMDZkZGM0MGRmZDRiOWNhNmQ3YjQ3YzcwZmFkYTc0OVwiO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxyXG4gICAgcHJpdmF0ZSBkaWFnbm9zdGljOiBEaWFnbm9zdGljLFxyXG4gICkge1xyXG4gICAgdGhpcy5yZXF1ZXN0UGVybWlzc2lvbigpO1xyXG4gIH1cclxuXHJcbiAgLy8g55So5oi35pON5L2c5pa55rOVXHJcbiAgdG9nZ2xlUmVjb3JkKCkge1xyXG4gICAgY29uc29sZS5sb2coJ3RvZ2dsZVJlY29yZCcsIHRoaXMuYnRuU3RhdHVzKTtcclxuICAgIGlmICh0aGlzLmJ0blN0YXR1cyA9PT0gXCJVTkRFRklORURcIiB8fCB0aGlzLmJ0blN0YXR1cyA9PT0gXCJDTE9TRURcIikge1xyXG4gICAgICB0aGlzLnN0YXJ0VGFsaygpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJ0blN0YXR1cyA9PT0gXCJDT05ORUNUSU5HXCIgfHwgdGhpcy5idG5TdGF0dXMgPT09IFwiT1BFTlwiKSB7XHJcbiAgICAgIHRoaXMuZmluaXNoVGFsaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc3RhcnRUYWxrKGV2ZW50Pykge1xyXG4gICAgY29uc29sZS5sb2coJ3N0YXJ0VGFsayBjYWxsZWQnKTtcclxuICAgIHRoaXMucmVzZXRTdGF0ZSgpO1xyXG4gICAgdGhpcy5vbkJlZm9yZVN0YXJ0VGFsayAmJiB0aGlzLm9uQmVmb3JlU3RhcnRUYWxrKCk7XHJcbiAgICBcclxuICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLm9wZW5XaXRoUHJpdmlsZWRnZSgpO1xyXG4gICAgICBcclxuICAgICAgLy8gMS4g6aaW5YWI5ZCv5Yqo54us56uL5b2V5Yi2XHJcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRJbmRlcGVuZGVudFJlY29yZGluZygpO1xyXG4gICAgICBcclxuICAgICAgLy8gMi4g54S25ZCO5ZCv5YqoV2ViU29ja2V06L+e5o6lXHJcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnNob3VsZFJlY29ubmVjdCA9IHRydWU7XHJcbiAgICAgIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xyXG4gICAgICBcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0V2ViU29ja2V0KCk7XHJcbiAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICB0aGlzLnN0YXJ0Q291bnRkb3duKCk7XHJcbiAgICAgIHRoaXMub25BZnRlclN0YXJ0VGFsayAmJiB0aGlzLm9uQWZ0ZXJTdGFydFRhbGsoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCB0YWxrOicsIGVycm9yKTtcclxuICAgICAgdGhpcy5yZXNldFN0YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBmaW5pc2hUYWxrKCkge1xyXG4gICAgY29uc29sZS5sb2coJ2ZpbmlzaFRhbGsgY2FsbGVkJyk7XHJcbiAgICB0aGlzLmlzVXNlckZpbmlzaCA9IHRydWU7XHJcbiAgICB0aGlzLnNob3VsZFJlY29ubmVjdCA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkJlZm9yZUZpbmlzaFRhbGsgJiYgdGhpcy5vbkJlZm9yZUZpbmlzaFRhbGsoKTtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gMS4g5YWI5YWz6ZetV2ViU29ja2V0XHJcbiAgICAgIHRoaXMuY2xvc2VXZWJTb2NrZXQoKTtcclxuICAgICAgXHJcbiAgICAgIC8vIDIuIOWBnOatoueLrOeri+W9leWItuW5tuiOt+WPluWujOaVtOmfs+mikVxyXG4gICAgICBhd2FpdCB0aGlzLnN0b3BJbmRlcGVuZGVudFJlY29yZGluZygpO1xyXG4gICAgICBcclxuICAgICAgLy8gMy4g5riF55CG54q25oCBXHJcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gICAgICB0aGlzLmNoYW5nZUJ0blN0YXR1cyhcIkNMT1NFRFwiKTtcclxuICAgICAgXHJcbiAgICAgIC8vIDQuIOW7tui/n+Wbnuiwg+ehruS/neaJgOacieWkhOeQhuWujOaIkFxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5pc1VzZXJGaW5pc2gpIHtcclxuICAgICAgICAgIHRoaXMub25BZnRlckZpbmlzaFRhbGsgJiYgdGhpcy5vbkFmdGVyRmluaXNoVGFsaygpO1xyXG4gICAgICAgICAgdGhpcy5pc1VzZXJGaW5pc2ggPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICAgIFxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmluaXNoaW5nIHRhbGs6JywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FuY2VsVGFsaygpIHtcclxuICAgIGNvbnNvbGUubG9nKCdjYW5jZWxUYWxrIGNhbGxlZCcpO1xyXG4gICAgdGhpcy5vbkJlZm9yZUNhbmNlbFRhbGsgJiYgdGhpcy5vbkJlZm9yZUNhbmNlbFRhbGsoKTtcclxuICAgIFxyXG4gICAgdGhpcy5pc1VzZXJGaW5pc2ggPSBmYWxzZTtcclxuICAgIHRoaXMuc2hvdWxkUmVjb25uZWN0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XHJcbiAgICBcclxuICAgIC8vIOWFs+mXrVdlYlNvY2tldFxyXG4gICAgdGhpcy5jbG9zZVdlYlNvY2tldCgpO1xyXG4gICAgXHJcbiAgICAvLyDlgZzmraLni6znq4vlvZXliLbkvYbkuI3kv53lrZjnu5PmnpxcclxuICAgIHRoaXMuY2FuY2VsSW5kZXBlbmRlbnRSZWNvcmRpbmcoKTtcclxuICAgIFxyXG4gICAgdGhpcy5yZXNldFN0YXRlKCk7XHJcbiAgICB0aGlzLm9uQWZ0ZXJDYW5jZWxUYWxrICYmIHRoaXMub25BZnRlckNhbmNlbFRhbGsoKTtcclxuICB9XHJcblxyXG4gIC8vIOeLrOeri+W9leWItuaWueazlSAtIOS4jldlYlNvY2tldOWujOWFqOino+iAplxyXG4gIGFzeW5jIHN0YXJ0SW5kZXBlbmRlbnRSZWNvcmRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zb2xlLmxvZygnU3RhcnRpbmcgaW5kZXBlbmRlbnQgcmVjb3JkaW5nJyk7XHJcbiAgICBcclxuICAgIHRoaXMuYWxsUmVjb3JkZWRCdWZmZXJzID0gW107XHJcbiAgICB0aGlzLmNyZWF0ZUluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIFxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50UmVjb3JkZXIub3BlbigoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0luZGVwZW5kZW50IHJlY29yZGVyIG9wZW5lZCcpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIOWIm+W7uuWPr+inhuWMllxyXG4gICAgICAgIGxldCB3YXZlRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5yZWNvcmQtd2F2ZVwiKTtcclxuICAgICAgICBpZiAod2F2ZURpdiAmJiBSZWNvcmRlci5XYXZlVmlldykge1xyXG4gICAgICAgICAgdGhpcy53YXZlQ2xpZW50ID0gUmVjb3JkZXIuV2F2ZVZpZXcoeyBlbGVtOiBcIi5yZWNvcmQtd2F2ZVwiIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5zdGFydCgpO1xyXG4gICAgICAgIHRoaXMub25BZnRlclJlY29yZFN0YXJ0ICYmIHRoaXMub25BZnRlclJlY29yZFN0YXJ0KCk7XHJcbiAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICB9LCAobXNnLCBpc1VzZXJOb3RBbGxvdykgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBvcGVuIGluZGVwZW5kZW50IHJlY29yZGVyOicsIG1zZyk7XHJcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihtc2cpKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHN0b3BJbmRlcGVuZGVudFJlY29yZGluZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnNvbGUubG9nKCdTdG9wcGluZyBpbmRlcGVuZGVudCByZWNvcmRpbmcnKTtcclxuICAgIFxyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRSZWNvcmRlcikge1xyXG4gICAgICBjb25zb2xlLmxvZygnTm8gaW5kZXBlbmRlbnQgcmVjb3JkZXIgdG8gc3RvcCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VycmVudFJlY29yZGVyLnN0b3AoXHJcbiAgICAgICAgYXN5bmMgKGJsb2I6IEJsb2IsIGR1cmF0aW9uOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdJbmRlcGVuZGVudCByZWNvcmRpbmcgc3RvcHBlZCBzdWNjZXNzZnVsbHknLCBibG9iLCBkdXJhdGlvbik7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIOS/neWtmOWujOaVtOeahOW9leWItue7k+aenFxyXG4gICAgICAgICAgdGhpcy5yZWNvcmRQY21CbG9iID0gYmxvYjtcclxuICAgICAgICAgIHRoaXMucmVjb3JkV2F2QmxvYiA9IGF3YWl0IHRoaXMucGNtQmxvYlRvV2F2QmxvYihibG9iLCA0NDEwMCk7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIC8vIOa4heeQhuW9leWItuWZqFxyXG4gICAgICAgICAgdGhpcy5jbGVhbnVwSW5kZXBlbmRlbnRSZWNvcmRlcigpO1xyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKG1zZykgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIueLrOeri+W9lemfs+WBnOatouWksei0pTpcIiArIG1zZyk7XHJcbiAgICAgICAgICB0aGlzLmNsZWFudXBJbmRlcGVuZGVudFJlY29yZGVyKCk7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxJbmRlcGVuZGVudFJlY29yZGluZygpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdDYW5jZWxsaW5nIGluZGVwZW5kZW50IHJlY29yZGluZycpO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5jdXJyZW50UmVjb3JkZXIpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyDnm7TmjqXlhbPpl63vvIzkuI3kv53lrZjnu5PmnpxcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5jbG9zZSgpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNsb3NpbmcgaW5kZXBlbmRlbnQgcmVjb3JkZXI6JywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHRoaXMuY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIHRoaXMucmVjb3JkUGNtQmxvYiA9IG51bGw7XHJcbiAgICB0aGlzLnJlY29yZFdhdkJsb2IgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVJbmRlcGVuZGVudFJlY29yZGVyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFJlY29yZGVyKSB7XHJcbiAgICAgIHRoaXMuY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1cnJlbnRSZWNvcmRlciA9IFJlY29yZGVyKHtcclxuICAgICAgdHlwZTogdGhpcy5yZWNvcmRUeXBlLFxyXG4gICAgICBzYW1wbGVSYXRlOiA0NDEwMCxcclxuICAgICAgYml0UmF0ZTogMTYsXHJcbiAgICAgIG9uUHJvY2VzczogKGJ1ZmZlcnMsIHBvd2VyTGV2ZWwsIGJ1ZmZlckR1cmF0aW9uLCBidWZmZXJTYW1wbGVSYXRlLCBuZXdCdWZmZXJJZHgsIGFzeW5jRW5kKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzUmVjb3JkaW5nKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIOS/neWtmOaJgOaciWJ1ZmZlcueUqOS6juacgOe7iOWQiOaIkOWujOaVtOmfs+mikVxyXG4gICAgICAgIHRoaXMuYWxsUmVjb3JkZWRCdWZmZXJzID0gYnVmZmVycztcclxuXHJcbiAgICAgICAgLy8g6I635Y+W5pyA5paw55qE6Z+z6aKR54mH5q6155So5LqO5a6e5pe2QVNSXHJcbiAgICAgICAgbGV0IGZyYW1lQnVmZmVyID0gYnVmZmVycy5sZW5ndGggJiYgYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIGlmICghZnJhbWVCdWZmZXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8g6YeN6YeH5qC35YiwMTZrSHrnlKjkuo5BU1JcclxuICAgICAgICBmcmFtZUJ1ZmZlciA9IHJlc2FtcGxlQnVmZmVyKGZyYW1lQnVmZmVyLCA0NDEwMCwgMTYwMDApO1xyXG5cclxuICAgICAgICAvLyDlj5HpgIHliLBXZWJTb2NrZXTov5vooYzlrp7ml7ZBU1JcclxuICAgICAgICB0aGlzLnNlbmRBdWRpb1RvV2ViU29ja2V0KGZyYW1lQnVmZmVyKTtcclxuXHJcbiAgICAgICAgLy8g5pu05paw5rOi5b2i5pi+56S6XHJcbiAgICAgICAgdGhpcy53YXZlQ2xpZW50Py5pbnB1dChidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV0sIHBvd2VyTGV2ZWwsIGJ1ZmZlclNhbXBsZVJhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYW51cEluZGVwZW5kZW50UmVjb3JkZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UmVjb3JkZXIpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlci5jbG9zZSgpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNsZWFuaW5nIHVwIGluZGVwZW5kZW50IHJlY29yZGVyOicsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmN1cnJlbnRSZWNvcmRlciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRBdWRpb1RvV2ViU29ja2V0KGZyYW1lQnVmZmVyOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlhdFdTICYmIHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4gJiYgIXRoaXMuZGlzYWJsZUFTUikge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHN0YXR1czogMSxcclxuICAgICAgICAgICAgZm9ybWF0OiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgIGVuY29kaW5nOiB0aGlzLmVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgYXVkaW86IGNvbnZlcnRGcmFtZUJ1ZmZlclRvQmFzZTY0KGZyYW1lQnVmZmVyKVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHNlbmRpbmcgYXVkaW8gZGF0YSB0byBXZWJTb2NrZXQ6XCIsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gV2ViU29ja2V055u45YWz5pa55rOVIC0g5LuF55So5LqOQVNS77yM5LiN5o6n5Yi25b2V5Yi2XHJcbiAgY29ubmVjdFdlYlNvY2tldCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiY29ubmVjdFdlYlNvY2tldCBjYWxsZWQsIHNob3VsZFJlY29ubmVjdDpcIiwgdGhpcy5zaG91bGRSZWNvbm5lY3QpO1xyXG4gICAgXHJcbiAgICBpZiAoIXRoaXMuc2hvdWxkUmVjb25uZWN0IHx8ICF0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiTm90IGNvbm5lY3RpbmcgV2ViU29ja2V0IC0gc2hvdWxkUmVjb25uZWN0OlwiLCB0aGlzLnNob3VsZFJlY29ubmVjdCwgXCJpc1JlY29yZGluZzpcIiwgdGhpcy5pc1JlY29yZGluZyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlhbPpl63njrDmnInov57mjqVcclxuICAgIHRoaXMuY2xvc2VXZWJTb2NrZXQoKTtcclxuXHJcbiAgICBjb25zdCB3ZWJzb2NrZXRVcmwgPSB0aGlzLmdldFdlYlNvY2tldFVybCgpO1xyXG4gICAgY29uc29sZS5sb2coXCJDb25uZWN0aW5nIHRvOlwiLCB3ZWJzb2NrZXRVcmwpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGlmIChcIldlYlNvY2tldFwiIGluIHdpbmRvdykge1xyXG4gICAgICAgIHRoaXMuaWF0V1MgPSBuZXcgV2ViU29ja2V0KHdlYnNvY2tldFVybCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIua1j+iniOWZqOS4jeaUr+aMgVdlYlNvY2tldFwiKTtcclxuICAgICAgICBhbGVydChcIua1j+iniOWZqOS4jeaUr+aMgVdlYlNvY2tldFwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2hhbmdlQnRuU3RhdHVzKFwiQ09OTkVDVElOR1wiKTtcclxuXHJcbiAgICAgIHRoaXMuaWF0V1Mub25vcGVuID0gKGUpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIldlYlNvY2tldCBjb25uZWN0ZWQgZm9yIEFTUlwiKTtcclxuICAgICAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzID0gMDtcclxuICAgICAgICB0aGlzLmNoYW5nZUJ0blN0YXR1cyhcIk9QRU5cIik7XHJcblxyXG4gICAgICAgIC8vIOWPkemAgeWIneWni+WPguaVsFxyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgIGNvbW1vbjoge1xyXG4gICAgICAgICAgICBhcHBfaWQ6IHRoaXMuQVBQSUQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgYnVzaW5lc3M6IHtcclxuICAgICAgICAgICAgbGFuZ3VhZ2U6IFwiemhfY25cIixcclxuICAgICAgICAgICAgZG9tYWluOiBcImlhdFwiLFxyXG4gICAgICAgICAgICBhY2NlbnQ6IFwibWFuZGFyaW5cIixcclxuICAgICAgICAgICAgdmFkX2VvczogMTAwMDAsIC8vIOWinuWKoOWIsDEw56eSXHJcbiAgICAgICAgICAgIGR3YTogXCJ3cGdzXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBzdGF0dXM6IDAsXHJcbiAgICAgICAgICAgIGZvcm1hdDogXCJhdWRpby9MMTY7cmF0ZT0xNjAwMFwiLFxyXG4gICAgICAgICAgICBlbmNvZGluZzogdGhpcy5lbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5pYXRXUy5zZW5kKEpTT04uc3RyaW5naWZ5KHBhcmFtcykpO1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5pYXRXUy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVuZGVyUmVzdWx0KGUuZGF0YSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLmlhdFdTLm9uZXJyb3IgPSAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXZWJTb2NrZXQgZXJyb3I6XCIsIGUpO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlV2ViU29ja2V0RXJyb3IoKTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuaWF0V1Mub25jbG9zZSA9IChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJXZWJTb2NrZXQgY2xvc2VkOlwiLCBlLmNvZGUsIGUucmVhc29uKTtcclxuICAgICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldENsb3NlKGUpO1xyXG4gICAgICB9O1xyXG5cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY3JlYXRlIFdlYlNvY2tldDpcIiwgZXJyb3IpO1xyXG4gICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldEVycm9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdlYlNvY2tldENsb3NlKGV2ZW50OiBDbG9zZUV2ZW50KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImhhbmRsZVdlYlNvY2tldENsb3NlXCIsIHtcclxuICAgICAgY29kZTogZXZlbnQuY29kZSxcclxuICAgICAgcmVhc29uOiBldmVudC5yZWFzb24sXHJcbiAgICAgIHNob3VsZFJlY29ubmVjdDogdGhpcy5zaG91bGRSZWNvbm5lY3QsXHJcbiAgICAgIGlzUmVjb3JkaW5nOiB0aGlzLmlzUmVjb3JkaW5nLFxyXG4gICAgICBpc1VzZXJGaW5pc2g6IHRoaXMuaXNVc2VyRmluaXNoXHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDlpoLmnpznlKjmiLflt7Lnu4/nu5PmnZ/miJbkuI3lupTor6Xph43ov57vvIzliJnkuI3lpITnkIZcclxuICAgIGlmICh0aGlzLmlzVXNlckZpbmlzaCB8fCAhdGhpcy5zaG91bGRSZWNvbm5lY3QgfHwgIXRoaXMuaXNSZWNvcmRpbmcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWPkemAgee7k+adn+W4p++8iOWmguaenOmcgOimge+8iVxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMuaWF0V1MgJiYgdGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICBcImRhdGFcIjoge1xyXG4gICAgICAgICAgICBcInN0YXR1c1wiOiAyLFxyXG4gICAgICAgICAgICBcImZvcm1hdFwiOiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgIFwiZW5jb2RpbmdcIjogdGhpcy5lbmNvZGluZ1R5cGUsXHJcbiAgICAgICAgICAgIFwiYXVkaW9cIjogXCJcIlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgZW5kIGZyYW1lIG9uIGNsb3NlOicsIGVycik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5q2j5bi45YWz6Zet56CB5oiW5pyN5Yqh56uv5Li75Yqo5YWz6Zet77yM5bCd6K+V6YeN6L+eXHJcbiAgICBpZiAoZXZlbnQuY29kZSA9PT0gMTAwMCB8fCBldmVudC5jb2RlID09PSAxMDA2IHx8IGV2ZW50LmNvZGUgPT09IDEwMTEpIHtcclxuICAgICAgdGhpcy5hdHRlbXB0UmVjb25uZWN0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiV2ViU29ja2V0IGNsb3NlZCB3aXRoIGVycm9yIGNvZGU6XCIsIGV2ZW50LmNvZGUpO1xyXG4gICAgICB0aGlzLmhhbmRsZVdlYlNvY2tldEVycm9yKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVdlYlNvY2tldEVycm9yKCkge1xyXG4gICAgaWYgKCF0aGlzLnNob3VsZFJlY29ubmVjdCB8fCAhdGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmF0dGVtcHRSZWNvbm5lY3QoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXR0ZW1wdFJlY29ubmVjdCgpIHtcclxuICAgIGlmICh0aGlzLnJlY29ubmVjdEF0dGVtcHRzID49IHRoaXMubWF4UmVjb25uZWN0QXR0ZW1wdHMpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIk1heCByZWNvbm5lY3QgYXR0ZW1wdHMgcmVhY2hlZFwiKTtcclxuICAgICAgLy8g5LiN5pS55Y+Y5b2V5Yi254q25oCB77yM5Y+q5pivQVNS5pqC5pe25LiN5Y+v55SoXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlY29ubmVjdEF0dGVtcHRzKys7XHJcbiAgICBjb25zb2xlLmxvZyhgQXR0ZW1wdGluZyBXZWJTb2NrZXQgcmVjb25uZWN0ICR7dGhpcy5yZWNvbm5lY3RBdHRlbXB0c30vJHt0aGlzLm1heFJlY29ubmVjdEF0dGVtcHRzfWApO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zaG91bGRSZWNvbm5lY3QgJiYgdGhpcy5pc1JlY29yZGluZyAmJiAhdGhpcy5pc1VzZXJGaW5pc2gpIHtcclxuICAgICAgICB0aGlzLmNvbm5lY3RXZWJTb2NrZXQoKTtcclxuICAgICAgfVxyXG4gICAgfSwgdGhpcy5yZWNvbm5lY3REZWxheSAqIHRoaXMucmVjb25uZWN0QXR0ZW1wdHMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbG9zZVdlYlNvY2tldCgpIHtcclxuICAgIGlmICh0aGlzLmlhdFdTKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8g5Y+R6YCB57uT5p2f5binXHJcbiAgICAgICAgaWYgKHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgICAgIHRoaXMuaWF0V1Muc2VuZChKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIFwiZGF0YVwiOiB7XHJcbiAgICAgICAgICAgICAgXCJzdGF0dXNcIjogMixcclxuICAgICAgICAgICAgICBcImZvcm1hdFwiOiBcImF1ZGlvL0wxNjtyYXRlPTE2MDAwXCIsXHJcbiAgICAgICAgICAgICAgXCJlbmNvZGluZ1wiOiB0aGlzLmVuY29kaW5nVHlwZSxcclxuICAgICAgICAgICAgICBcImF1ZGlvXCI6IFwiXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBpZiAodGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTiB8fCB0aGlzLmlhdFdTLnJlYWR5U3RhdGUgPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XHJcbiAgICAgICAgICB0aGlzLmlhdFdTLmNsb3NlKDEwMDAsIFwiVXNlciBpbml0aWF0ZWQgY2xvc2VcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBjbG9zaW5nIFdlYlNvY2tldDpcIiwgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaWF0V1MgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g54q25oCB566h55CGXHJcbiAgcHJpdmF0ZSByZXNldFN0YXRlKCkge1xyXG4gICAgdGhpcy5yZXN1bHRUZXh0ID0gXCJcIjtcclxuICAgIHRoaXMucmVzdWx0VGV4dFRlbXAgPSBcIlwiO1xyXG4gICAgdGhpcy5kdXJhdGlvblN0ciA9IFwiMDA6MDBcIjtcclxuICAgIHRoaXMuZHVyYXRpb24gPSAwO1xyXG4gICAgdGhpcy5yZWNvcmREdXJhdGlvbiA9IDA7XHJcbiAgICB0aGlzLmFsbFJlY29yZGVkQnVmZmVycyA9IFtdO1xyXG4gICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclRpbWVycygpIHtcclxuICAgIGlmICh0aGlzLmNvdW50ZG93bkludGVydmFsKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5jb3VudGRvd25JbnRlcnZhbCk7XHJcbiAgICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZHVyYXRpb25JbnRlcnZhbCkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZHVyYXRpb25JbnRlcnZhbCk7XHJcbiAgICAgIHRoaXMuZHVyYXRpb25JbnRlcnZhbCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VCdG5TdGF0dXMoc3RhdHVzOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuYnRuU3RhdHVzID0gc3RhdHVzO1xyXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgY2FzZSBcIkNPTk5FQ1RJTkdcIjpcclxuICAgICAgICB0aGlzLmNvbm5TdGF0dXMgPSBcIuW7uueri+i/nuaOpeS4rVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiT1BFTlwiOlxyXG4gICAgICAgIHRoaXMuY29ublN0YXR1cyA9IGDlvZXpn7PkuK3vvIgke3RoaXMuZHVyYXRpb25TdHJ977yJYDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIkNMT1NJTkdcIjpcclxuICAgICAgICB0aGlzLmNvbm5TdGF0dXMgPSBcIuWFs+mXrei/nuaOpeS4rVwiO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiQ0xPU0VEXCI6XHJcbiAgICAgICAgdGhpcy5jb25uU3RhdHVzID0gXCLlvIDlp4vlvZXpn7NcIjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOiuoeaXtuWZqFxyXG4gIHN0YXJ0Q291bnRkb3duKCkge1xyXG4gICAgdGhpcy5jbGVhclRpbWVycygpO1xyXG4gICAgdGhpcy5yZWNvcmREdXJhdGlvbiA9IDA7XHJcbiAgICB0aGlzLmR1cmF0aW9uID0gMDtcclxuICAgIHRoaXMubm93ID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAvLyDlvZXpn7Pml7bplb/orqHml7blmajvvIgxMDBtc+eyvuW6pu+8iVxyXG4gICAgdGhpcy5kdXJhdGlvbkludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xyXG4gICAgICAgIHRoaXMucmVjb3JkRHVyYXRpb24gKz0gMTAwO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDApO1xyXG5cclxuICAgIC8vIOaYvuekuuaXtumVv+iuoeaXtuWZqO+8iDHnp5Lnsr7luqbvvIlcclxuICAgIHRoaXMuY291bnRkb3duSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jb3VudFRpbWVyKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgY291bnRUaW1lcigpIHtcclxuICAgIHRoaXMuZHVyYXRpb24rKztcclxuICAgIGxldCBtaW51dGVTdHIgPSBTdHJpbmcoTWF0aC5mbG9vcih0aGlzLmR1cmF0aW9uIC8gNjApKS5wYWRTdGFydCgyLCBcIjBcIik7XHJcbiAgICBsZXQgc2Vjb25kU3RyID0gU3RyaW5nKHRoaXMuZHVyYXRpb24gJSA2MCkucGFkU3RhcnQoMiwgXCIwXCIpO1xyXG4gICAgbGV0IGR1cmF0aW9uU3RyID0gbWludXRlU3RyICsgXCI6XCIgKyBzZWNvbmRTdHI7XHJcbiAgICB0aGlzLmR1cmF0aW9uU3RyID0gZHVyYXRpb25TdHI7XHJcbiAgICB0aGlzLmNvbm5TdGF0dXMgPSBg5b2V6Z+z5Lit77yIJHt0aGlzLmR1cmF0aW9uU3Ryfe+8iWA7XHJcbiAgICB0aGlzLm9uRHVyYXRpb25TdHJDaGFuZ2UgJiYgdGhpcy5vbkR1cmF0aW9uU3RyQ2hhbmdlKGR1cmF0aW9uU3RyKTtcclxuICB9XHJcblxyXG4gIC8vIOe7k+aenOWkhOeQhlxyXG4gIHJlbmRlclJlc3VsdChyZXN1bHREYXRhOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGxldCBqc29uRGF0YSA9IEpTT04ucGFyc2UocmVzdWx0RGF0YSk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoanNvbkRhdGEuZGF0YSAmJiBqc29uRGF0YS5kYXRhLnJlc3VsdCkge1xyXG4gICAgICAgIGxldCBkYXRhID0ganNvbkRhdGEuZGF0YS5yZXN1bHQ7XHJcbiAgICAgICAgbGV0IHN0ciA9IFwiXCI7XHJcbiAgICAgICAgbGV0IHdzID0gZGF0YS53cztcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBzdHIgPSBzdHIgKyB3c1tpXS5jd1swXS53O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g5aSE55CG5Yqo5oCB5L+u5q2jXHJcbiAgICAgICAgaWYgKGRhdGEucGdzKSB7XHJcbiAgICAgICAgICBpZiAoZGF0YS5wZ3MgPT09IFwiYXBkXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRUZXh0ID0gdGhpcy5yZXN1bHRUZXh0VGVtcDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucmVzdWx0VGV4dFRlbXAgPSB0aGlzLnJlc3VsdFRleHQgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucmVzdWx0VGV4dCA9IHRoaXMucmVzdWx0VGV4dCArIHN0cjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25JbnB1dENoYW5nZSAmJiB0aGlzLm9uSW5wdXRDaGFuZ2UodGhpcy5nZXRVc2VySW5wdXQoKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOWkhOeQhue7k+adn+eKtuaAgVxyXG4gICAgICBpZiAoanNvbkRhdGEuY29kZSA9PT0gMCAmJiBqc29uRGF0YS5kYXRhLnN0YXR1cyA9PT0gMikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQVNSIHNlc3Npb24gY29tcGxldGVkLCB3aWxsIHJlY29ubmVjdCBpZiBzdGlsbCByZWNvcmRpbmdcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuaWF0V1MgJiYgdGhpcy5pYXRXUy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICAgICAgdGhpcy5pYXRXUy5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5aSE55CG6ZSZ6K+vXHJcbiAgICAgIGlmIChqc29uRGF0YS5jb2RlICE9PSAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkFTUiBlcnJvcjpcIiwganNvbkRhdGEpO1xyXG4gICAgICAgIGlmICh0aGlzLmlhdFdTICYmIHRoaXMuaWF0V1MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcclxuICAgICAgICAgIHRoaXMuaWF0V1MuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIHJlc3VsdDpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VXNlcklucHV0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gXCJcIiArICh0aGlzLnJlc3VsdFRleHRUZW1wIHx8IHRoaXMucmVzdWx0VGV4dCk7XHJcbiAgfVxyXG5cclxuICAvLyDmnYPpmZDlkozliJ3lp4vljJZcclxuICBhc3luYyBvcGVuV2l0aFByaXZpbGVkZ2UoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBhd2FpdCB0aGlzLnJlcXVlc3RQZXJtaXNzaW9uKCk7XHJcbiAgICBcclxuICAgIGlmIChSZWNvcmRlci5Jc09wZW4oKSkgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgLy8g6L+Z6YeM5LiN5Yib5bu65b2V5Yi25Zmo77yM5Zug5Li65oiR5Lus5L2/55So54us56uL55qE5b2V5Yi25ZmoXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIOmfs+mikeWkhOeQhuaWueazlVxyXG4gIGFzeW5jIHBjbUJsb2JUb1dhdkJsb2IocGNtQmxvYjogQmxvYiwgc2FtcGxlUmF0ZTogbnVtYmVyKTogUHJvbWlzZTxCbG9iPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIGxldCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgXHJcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZXZlbnQpIHtcclxuICAgICAgICBsZXQgcGNtRGF0YTogYW55ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICBsZXQgd2F2QmxvYiA9IHBjbXRvV2F2KHBjbURhdGEsIHNhbXBsZVJhdGUsIDEsIDE2KTtcclxuICAgICAgICByZXNvbHZlKHdhdkJsb2IpO1xyXG4gICAgICB9O1xyXG4gICAgICBcclxuICAgICAgZmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihwY21CbG9iKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcGxheVBDTShwY21CbG9iOiBCbG9iLCBzYW1wbGVSYXRlOiBudW1iZXIpIHtcclxuICAgIGxldCB3YXZCbG9iID0gYXdhaXQgdGhpcy5wY21CbG9iVG9XYXZCbG9iKHBjbUJsb2IsIHNhbXBsZVJhdGUpO1xyXG4gICAgbGV0IHdhdlVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHdhdkJsb2IpO1xyXG4gICAgbGV0IGF1ZGlvID0gbmV3IEF1ZGlvKCk7XHJcbiAgICBhdWRpby5zcmMgPSB3YXZVcmw7XHJcbiAgICBhdWRpby5wbGF5KCk7XHJcbiAgfVxyXG5cclxuICBwbGF5UmVjb3JkKCkge1xyXG4gICAgaWYgKHRoaXMucmVjb3JkUGNtQmxvYikge1xyXG4gICAgICB0aGlzLnBsYXlQQ00odGhpcy5yZWNvcmRQY21CbG9iLCA0NDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBXZWJTb2NrZXQgVVJM55Sf5oiQXHJcbiAgZ2V0V2ViU29ja2V0VXJsKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgdXJsID0gXCJ3c3M6Ly9pYXQtYXBpLnhmeXVuLmNuL3YyL2lhdFwiO1xyXG4gICAgbGV0IGhvc3QgPSBcImlhdC1hcGkueGZ5dW4uY25cIjtcclxuICAgIFxyXG4gICAgbGV0IGFwaUtleSA9IHRoaXMuQVBJX0tFWTtcclxuICAgIGxldCBhcGlTZWNyZXQgPSB0aGlzLkFQSV9TRUNSRVQ7XHJcbiAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKTtcclxuICAgIGxldCBhbGdvcml0aG0gPSBcImhtYWMtc2hhMjU2XCI7XHJcbiAgICBsZXQgaGVhZGVycyA9IFwiaG9zdCBkYXRlIHJlcXVlc3QtbGluZVwiO1xyXG4gICAgbGV0IHNpZ25hdHVyZU9yaWdpbiA9IGBob3N0OiAke2hvc3R9XFxuZGF0ZTogJHtkYXRlfVxcbkdFVCAvdjIvaWF0IEhUVFAvMS4xYDtcclxuICAgIGxldCBzaWduYXR1cmVTaGEgPSBDcnlwdG9KUy5IbWFjU0hBMjU2KHNpZ25hdHVyZU9yaWdpbiwgYXBpU2VjcmV0KTtcclxuICAgIGxldCBzaWduYXR1cmUgPSBDcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeShzaWduYXR1cmVTaGEpO1xyXG4gICAgbGV0IGF1dGhvcml6YXRpb25PcmlnaW4gPSBgYXBpX2tleT1cIiR7YXBpS2V5fVwiLCBhbGdvcml0aG09XCIke2FsZ29yaXRobX1cIiwgaGVhZGVycz1cIiR7aGVhZGVyc31cIiwgc2lnbmF0dXJlPVwiJHtzaWduYXR1cmV9XCJgO1xyXG4gICAgbGV0IGF1dGhvcml6YXRpb24gPSBidG9hKGF1dGhvcml6YXRpb25PcmlnaW4pO1xyXG4gICAgdXJsID0gYCR7dXJsfT9hdXRob3JpemF0aW9uPSR7YXV0aG9yaXphdGlvbn0mZGF0ZT0ke2RhdGV9Jmhvc3Q9JHtob3N0fWA7XHJcbiAgICByZXR1cm4gdXJsO1xyXG4gIH1cclxuXHJcbiAgdG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlcik6IHN0cmluZyB7XHJcbiAgICB2YXIgYmluYXJ5ID0gXCJcIjtcclxuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XHJcbiAgICB2YXIgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHdpbmRvdy5idG9hKGJpbmFyeSk7XHJcbiAgfVxyXG5cclxuICAvLyDnp7vliqjnq6/mnYPpmZDmlrnms5VcclxuICBpc0NhcGFjaXRvcigpOiBib29sZWFuIHtcclxuICAgIGlmKCF0aGlzLnBsYXRmb3JtPy5pcykgcmV0dXJuIGZhbHNlXHJcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybS5pcyhcImNhcGFjaXRvclwiKSB8fCB0aGlzLnBsYXRmb3JtLmlzKFwiY29yZG92YVwiKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RQZXJtaXNzaW9uKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzQ2FwYWNpdG9yKCkpIHJldHVybjtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0U3RvYWdlUGVybWlzc2lvbigpO1xyXG4gICAgICBhd2FpdCB0aGlzLnJlcXVlc3RDYW1lcmFQZXJtaXNzaW9uKCk7XHJcbiAgICAgIGF3YWl0IHRoaXMucmVxdWVzdE1pY1Blcm1pc3Npb24oKTtcclxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0UmVjb3JkQXVkaW9QZXJtaXNzaW9uKCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVxdWVzdFJlY29yZEF1ZGlvUGVybWlzc2lvbigpIHtsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5yZXF1ZXN0UnVudGltZVBlcm1pc3Npb25zKFt0aGlzLmRpYWdub3N0aWMucGVybWlzc2lvbi5SRUNPUkRfQVVESU9dKTtcclxuICAgIGNvbnNvbGUubG9nKFwicmVjb3JkIHBlcm1pc3Npb24gcmVxdWVzdDpcIiwgZGF0YSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0TWljUGVybWlzc2lvbigpIHtcclxuICAgIGxldCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5pc01pY3JvcGhvbmVBdXRob3JpemVkKCk7XHJcbiAgICBjb25zb2xlLmxvZyhcInBlcm1pc3Nvbl9NSUM6XCIsIGlzQXZhaWxhYmxlKTtcclxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcclxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMucmVxdWVzdE1pY3JvcGhvbmVBdXRob3JpemF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBhc3luYyByZXF1ZXN0U3RvYWdlUGVybWlzc2lvbigpIHtcclxuICAgIGxldCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMuZGlhZ25vc3RpYy5pc0V4dGVybmFsU3RvcmFnZUF1dGhvcml6ZWQoKTtcclxuICAgIGNvbnNvbGUubG9nKFwicGVybWlzc29uX1NUT1JBR0U6XCIsIGlzQXZhaWxhYmxlKTtcclxuICAgIGlmICghaXNBdmFpbGFibGUpIHtcclxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmRpYWdub3N0aWMucmVxdWVzdEV4dGVybmFsU3RvcmFnZUF1dGhvcml6YXRpb24oKTtcclxuICAgIH1cclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlcXVlc3RDYW1lcmFQZXJtaXNzaW9uKCkge1xyXG4gICAgbGV0IGlzQXZhaWxhYmxlID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLmlzQ2FtZXJhQXV0aG9yaXplZCgpO1xyXG4gICAgY29uc29sZS5sb2coXCJwZXJtaXNzb25fQ2FtZXJhOlwiLCBpc0F2YWlsYWJsZSk7XHJcbiAgICBpZiAoIWlzQXZhaWxhYmxlKSB7XHJcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5kaWFnbm9zdGljLnJlcXVlc3RDYW1lcmFBdXRob3JpemF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyDlhbbku5bovoXliqnmlrnms5VcclxuICBzcGxpdEF1ZGlvRGF0YShhdWRpb0RhdGE6IGFueSkge1xyXG4gICAgY29uc3Qgc2VnbWVudFNpemUgPSAxMjgwO1xyXG4gICAgY29uc3Qgc2VnbWVudENvdW50ID0gTWF0aC5jZWlsKGF1ZGlvRGF0YS5sZW5ndGggLyBzZWdtZW50U2l6ZSk7XHJcbiAgICBjb25zdCBzZWdtZW50cyA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudENvdW50OyBpKyspIHtcclxuICAgICAgY29uc3Qgc3RhcnQgPSBpICogc2VnbWVudFNpemU7XHJcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgc2VnbWVudFNpemU7XHJcbiAgICAgIGNvbnN0IHNlZ21lbnQgPSBhdWRpb0RhdGEuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcbiAgICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlZ21lbnRzO1xyXG4gIH1cclxuXHJcbiAgQnVmZmVyVG9CbG9iKGJ1ZmZlcjogYW55KSB7XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2F1ZGlvL3BjbScgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwbGF5QnVmZmVycygpIHtcclxuICAgIGxldCBhdWRpb0Jsb2IgPSBhd2FpdCB0aGlzLkJ1ZmZlcnNUb0Jsb2IodGhpcy5hbGxSZWNvcmRlZEJ1ZmZlcnMpO1xyXG4gICAgdGhpcy5wbGF5UENNKGF1ZGlvQmxvYiwgNDQxMDApO1xyXG4gIH1cclxuXHJcbiAgQnVmZmVyc1RvQmxvYihidWZmZXJzOiBBcnJheTxhbnk+KSB7XHJcbiAgICBsZXQgYXVkaW9CdWZmZXI6IGFueSA9IFtdO1xyXG4gICAgYnVmZmVycy5mb3JFYWNoKGJ1ZmZlciA9PiB7XHJcbiAgICAgIGJ1ZmZlci5mb3JFYWNoKGludDE2ID0+IHtcclxuICAgICAgICBhdWRpb0J1ZmZlci5wdXNoKGludDE2KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBuZXcgQmxvYihbYXVkaW9CdWZmZXJdLCB7IHR5cGU6ICdhdWRpby9wY20nIH0pO1xyXG4gIH1cclxufSJdfQ==
@@ -1,4 +1,5 @@
1
+ // 使用显式文件路径,避免裸路径目录导入(Deno/Node ESM 不支持)
1
2
  export * from "./fmode-chat";
2
3
  export * from "./interface";
3
- export * from "./completion";
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvYWdlbnQvY2hhdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQTtBQUM1QixjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLGNBQWMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2Ztb2RlLWNoYXRcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wbGV0aW9uXCIiXX0=
4
+ export * from "./completion/index";
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvYWdlbnQvY2hhdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyxvQkFBb0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIOS9v+eUqOaYvuW8j+aWh+S7tui3r+W+hO+8jOmBv+WFjeijuOi3r+W+hOebruW9leWvvOWFpe+8iERlbm8vTm9kZSBFU00g5LiN5pSv5oyB77yJXHJcbmV4cG9ydCAqIGZyb20gXCIuL2Ztb2RlLWNoYXRcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9pbnRlcmZhY2VcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9jb21wbGV0aW9uL2luZGV4XCIiXX0=
@@ -1,6 +1,7 @@
1
- export * from "./prompt";
2
- export * from "./story";
3
- export * from "./task";
4
- export * from "./chat";
5
- export * from "./waiting";
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvYWdlbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxRQUFRLENBQUE7QUFDdEIsY0FBYyxRQUFRLENBQUE7QUFDdEIsY0FBYyxXQUFXLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9wcm9tcHRcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9zdG9yeVwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2tcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9jaGF0XCJcclxuZXhwb3J0ICogZnJvbSBcIi4vd2FpdGluZ1wiIl19
1
+ // 使用显式 index 文件路径,避免裸路径目录导入(Deno/Node ESM 不支持)
2
+ export * from "./prompt/index";
3
+ export * from "./story/index";
4
+ export * from "./task/index";
5
+ export * from "./chat/index";
6
+ export * from "./waiting/index";
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvYWdlbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLGNBQWMsZ0JBQWdCLENBQUE7QUFDOUIsY0FBYyxlQUFlLENBQUE7QUFDN0IsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxpQkFBaUIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIOS9v+eUqOaYvuW8jyBpbmRleCDmlofku7bot6/lvoTvvIzpgb/lhY3oo7jot6/lvoTnm67lvZXlr7zlhaXvvIhEZW5vL05vZGUgRVNNIOS4jeaUr+aMge+8iVxyXG5leHBvcnQgKiBmcm9tIFwiLi9wcm9tcHQvaW5kZXhcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9zdG9yeS9pbmRleFwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2svaW5kZXhcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi9jaGF0L2luZGV4XCJcclxuZXhwb3J0ICogZnJvbSBcIi4vd2FpdGluZy9pbmRleFwiIl19
@@ -87,4 +87,4 @@ export class AgentTaskStep {
87
87
  });
88
88
  }
89
89
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQudGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvY29yZS9hZ2VudC90YXNrL2FnZW50LnRhc2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0NBQWtDO0FBQ2xDLG1CQUFtQjtBQUNuQixJQUFJO0FBRUosT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQWdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVczRixNQUFNLE9BQU8sYUFBYTtJQVd0QixPQUFPO1FBQ0gsSUFBRyxJQUFJLENBQUMsV0FBVyxFQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLElBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzVFLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBZUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUE7SUFDOUMsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLENBQUM7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBTUQsWUFBWSxRQUtYO1FBNUNELE9BQU87UUFDUCxjQUFTLEdBQU8sRUFBRSxDQUFBO1FBQ2xCLE9BQU87UUFDUCxTQUFJLEdBQU8sRUFBRSxDQUFBO1FBV2IsUUFBUTtRQUNSLFlBQU8sR0FBMEIsRUFBRSxDQUFBO1FBQ25DLFNBQVM7UUFDVCxzQkFBaUIsR0FBVyxLQUFLLENBQUM7UUFDbEMsU0FBUztRQUNULGVBQVUsR0FBVyxLQUFLLENBQUM7UUFDM0IsU0FBUztRQUNULGNBQVMsR0FBVyxLQUFLLENBQUM7UUFFMUIsVUFBVTtRQUNWLDZDQUE2QztRQUM3QyxtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUMvQixpQkFBWSxHQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVE7UUFDakMsY0FBUyxHQUFVLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQVF6QyxZQUFPLEdBQVUsRUFBRSxDQUFDLENBQUMsT0FBTztRQUM1QixVQUFLLEdBQVUsRUFBRSxDQUFDLENBQUMsT0FBTztRQUMxQixZQUFPLEdBQWlCLEVBQUUsQ0FBQSxDQUFDLE9BQU87UUFROUIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsRUFBRSxjQUFjLElBQUksS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBV0QsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQTtRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUMsRUFBRTtZQUMxQjs7Ozs7Ozs7ZUFRRztZQUNDLFNBQVMsOEJBQThCLENBQUMsU0FBZ0IsRUFBRSxhQUFvQjtnQkFDMUUsWUFBWTtnQkFDWixNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUU1Qiw4QkFBOEI7Z0JBQzlCLE9BQU8sUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJO2dCQUN2QyxrQkFBa0I7Z0JBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2YsbUJBQW1CO2dCQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQiwrQkFBK0I7Z0JBQzlCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDVixpQkFBaUI7b0JBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQjtvQkFDL0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FDTCxDQUFDO1lBQ04sQ0FBQztZQUVELE9BQU87WUFDUCxJQUFJLFNBQVMsR0FBRyw4QkFBOEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFDLElBQUksQ0FBQyxDQUFDO1lBRTVELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDcEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNWLHNCQUFzQjtvQkFDdEIsbUJBQW1CO29CQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtnQkFDekIsQ0FBQztnQkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO29CQUNYLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7b0JBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDZCw0QkFBNEI7Z0JBQ2hDLENBQUM7YUFDSixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQTtJQUNWLENBQUM7Q0FHSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGV4cG9ydCBpbnRlcmZhY2UgQWdlbnRUYXNrU3RlcHtcclxuLy8gICAgIHRpdGxlOnN0cmluZ1xyXG4vLyB9XHJcblxyXG5pbXBvcnQgeyBjb25jYXRNYXAsIGRlbGF5LCBpbnRlcnZhbCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCB0YWtlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgRm1BZ2VudFRhc2tDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vYWlnYy9hZ2VudC9mbS1hZ2VudC10YXNrL2ZtLWFnZW50LXRhc2suY29tcG9uZW50XCI7XHJcblxyXG5cclxuaW50ZXJmYWNlIEFnZW50VGFza0J1dHRvbntcclxuICAgIG5hbWU6c3RyaW5nXHJcbiAgICBoYW5kbGU6eyhvcHRpb25zPzphbnkpOnZvaWR9XHJcbiAgICBpc1Nob3c/OkZ1bmN0aW9uXHJcbiAgICBjb2xvcj86c3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBZ2VudFRhc2tTdGVwe1xyXG4gICAgdGl0bGU6c3RyaW5nO1xyXG4gICAgXHJcbiAgICAvLyDlhbHkuqvmlbDmja5cclxuICAgIHNoYXJlRGF0YTphbnkgPSB7fVxyXG4gICAgLy8g56eB5pyJ5pWw5o2uXHJcbiAgICBkYXRhOmFueSA9IHt9XHJcblxyXG4gICAgLy8g54i257qn57uE5Lu25Lyg6YCSXHJcbiAgICBwYXJlbnRDb21wOkZtQWdlbnRUYXNrQ29tcG9uZW50fHVuZGVmaW5lZFxyXG4gICAgcGFyZW50SW5kZXg6bnVtYmVyfHVuZGVmaW5lZFxyXG4gICAgcmVzdGFydCgpe1xyXG4gICAgICAgIGlmKHRoaXMucGFyZW50SW5kZXgpe1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudENvbXA/LnN0YXJ0VGFzayYmdGhpcy5wYXJlbnRDb21wPy5zdGFydFRhc2sodGhpcy5wYXJlbnRJbmRleClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saW1pdFN0YXJ0ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyDoh6rlrprkuYnmjInpkq5cclxuICAgIGJ1dHRvbnM6QXJyYXk8QWdlbnRUYXNrQnV0dG9uPiA9IFtdXHJcbiAgICAvLyDmraXpqqTmk43kvZzmjInpkq5cclxuICAgIHJlc3RhcnRCdXR0b25TaG93OmJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8vIOatpemqpOmZkOWItuW8gOWni1xyXG4gICAgbGltaXRTdGFydDpib29sZWFuID0gZmFsc2U7XHJcbiAgICAvLyDlj5bmtojmiYDmnInku7vliqFcclxuICAgIGNhbmNlbEFsbDpib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8g6L+b5bqm5LiO6ZSZ6K+v5o+Q56S6XHJcbiAgICAvLyDpgInpobnvvJrpmpDol4/ov5vluqbmnaHvvIzlr7nkuo7mlbDmja7loavlhpnlkozpgInmi6nnsbvmraXpqqTvvIzlj6/ku6XpmpDol4/ov5vluqbmnaHvvIzku6Xnu5PmnpzmoKHpqozliKTlrprmmK/lkKbkuIvkuIDmraVcclxuICAgIHByb2dyZXNzSGlkZGVuOmJvb2xlYW4gPSBmYWxzZTtcclxuICAgIF9zaW1Qcm9ncmVzczpudW1iZXIgPSAwOyAvLyDmqKHmi5/ov5vluqbmnaFcclxuICAgIF9wcm9ncmVzczpudW1iZXIgPSAwOyAvLyDlrp7pmYXov5vluqbmnaEg5LyY5YWI6L+U5Zue5pWw5o2u5aSE55CG6L+b5bqmXHJcbiAgICBnZXQgcHJvZ3Jlc3MoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3MgfHwgdGhpcy5fc2ltUHJvZ3Jlc3NcclxuICAgIH1cclxuICAgIHNldCBwcm9ncmVzcyh2KXtcclxuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgbWVzc2FnZTpzdHJpbmcgPSBcIlwiOyAvLyDnu5PmnpzmloflrZdcclxuICAgIGVycm9yOnN0cmluZyA9ICcnOyAvLyDplJnor6/mj5DnpLpcclxuICAgIGxvZ0xpc3Q6QXJyYXk8c3RyaW5nPiA9IFtdIC8vIOaJp+ihjOaXpeW/l1xyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvcihtZXRhRGF0YTp7XHJcbiAgICAgICAgdGl0bGU6c3RyaW5nXHJcbiAgICAgICAgc2hhcmVEYXRhPzphbnlcclxuICAgICAgICBwcm9ncmVzc0hpZGRlbj86Ym9vbGVhblxyXG4gICAgICAgIGhhbmRsZT86eygpOlByb21pc2U8YW55Pn1cclxuICAgIH0pe1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBtZXRhRGF0YT8udGl0bGU7XHJcbiAgICAgICAgdGhpcy5zaGFyZURhdGEgPSBtZXRhRGF0YT8uc2hhcmVEYXRhO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NIaWRkZW4gPSBtZXRhRGF0YT8ucHJvZ3Jlc3NIaWRkZW4gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oYW5kbGUgPSBtZXRhRGF0YT8uaGFuZGxlO1xyXG4gICAgfVxyXG4gICAgICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiDku7vliqHlpITnkIblh73mlbBcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj5cclxuICAgICAqIHJlc29sdmUodHJ1ZSkg5omn6KGM5oiQ5YqfXHJcbiAgICAgKiByZXNvbHZlKGZhbHNlKSDmiafooYzlpLHotKVcclxuICAgICAqIHJlamVjdCgpIOawuOS4jeinpuWPkVxyXG4gICAgICogICovIFxyXG4gICAgaGFuZGxlOnsoKTpQcm9taXNlPGJvb2xlYW4+fXx1bmRlZmluZWRcclxuICAgIHByb2dyZXNzU3ViJDpTdWJzY3JpcHRpb258dW5kZWZpbmVkXHJcbiAgICBzaW11bGF0b3JQcm9ncmVzcygpe1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NTdWIkPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgdGhpcy5yZXN0YXJ0QnV0dG9uU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PntcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIOekuuS+i++8muS7u+WKoeWkhOeQhuaooeaLn+WHveaVsFxyXG4gICAgICAgICAgICAgKiBAZGVzY1xyXG4gICAgICAgICAgICAgKiAxLumdnuagh+WHhuS7u+WKoe+8jOS9nOS4uui/m+W6puWKoOi9veWKqOeUu+S9v+eUqFxyXG4gICAgICAgICAgICAgKiAyLuWPr+iuoemHj+S7u+WKoe+8jOWPr+S4jeeUqOivpeWHveaVsO+8jOiHquWumuS5ieWkhOeQhuWHveaVsO+8jOS9humcgOimgeWQiOeQhuaOp+WItnRoaXMucHJvZ3Jlc3NcclxuICAgICAgICAgICAgICogQHBhcmFtIG1heE51bWJlciDmnIDlpKfnmb7liIbmr5RcclxuICAgICAgICAgICAgICogQHBhcmFtIHRvdGFsRHVyYXRpb24g5oC75L2T5Yqg6L295pe26Ze0XHJcbiAgICAgICAgICAgICAqIEByZXR1cm5zIFxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2dyZXNzSGFuZGxlckluY3JlYXNpbmdTcGVlZChtYXhOdW1iZXI6bnVtYmVyLCB0b3RhbER1cmF0aW9uOm51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaAu+WFsei+k+WHuueahOaVsOWtl+S4quaVsFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gbWF4TnVtYmVyIC0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yib5bu65LiA5Liqb2JzZXJ2YWJsZe+8jOagueaNruaMh+WumueahOaXtumXtOmXtOmalOWPkeWwhOWAvFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcnZhbCh0b3RhbER1cmF0aW9uIC8gY291bnQpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWPluWJjW1heOS4quWAvO+8iOS7jjDliLBtYXjvvIlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZShtYXhOdW1iZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlsIblj5HlsITnmoTlgLzmmKDlsITkuLrku44x5YiwOTDnmoTmlbDlrZdcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHggPT4geCArIDEpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIC8vIOS9v+eUqGNvbmNhdE1hcOWSjGRlbGF55p2l5o6n5Yi25q+P5Liq5YC855qE5Y+R5bCE5pe26Ze0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcChuID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS9v+eUqOaMh+aVsOihsOWHj+WHveaVsOiwg+aVtOW7tui/n+aXtumXtFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsYXlUaW1lID0gTWF0aC5leHAobiAvIDMwKSAqIDEwMDsgLy8g5Y+v5Lul6LCD5pW06L+Z6YeM55qE57O75pWw5p2l5pS55Y+Y6YCf5bqm5Y+Y5YyW5puy57q/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobikucGlwZShkZWxheShkZWxheVRpbWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIOS9v+eUqOekuuS+i1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb2dyZXNzJCA9IHByb2dyZXNzSGFuZGxlckluY3JlYXNpbmdTcGVlZCg4MCwgMTAqMTAwMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1N1YiQgPSBwcm9ncmVzcyQuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g6L+Z6YeM5Y+v5Lul5pu05paw6L+b5bqm5p2h5oiW6ICF5YGa5YW25LuW5pON5L2cXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1N1YiQ/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdDb21wbGV0ZWQhJylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG59Il19
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQudGFzay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Ztb2RlLW5nL3NyYy9saWIvY29yZS9hZ2VudC90YXNrL2FnZW50LnRhc2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsa0NBQWtDO0FBQ2xDLG1CQUFtQjtBQUNuQixJQUFJO0FBRUosT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBYyxFQUFFLEVBQWdCLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVczRixNQUFNLE9BQU8sYUFBYTtJQVd0QixPQUFPO1FBQ0gsSUFBRyxJQUFJLENBQUMsV0FBVyxFQUFDLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLElBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQzVFLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBZUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUE7SUFDOUMsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLENBQUM7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBTUQsWUFBWSxRQUtYO1FBNUNELE9BQU87UUFDUCxjQUFTLEdBQU8sRUFBRSxDQUFBO1FBQ2xCLE9BQU87UUFDUCxTQUFJLEdBQU8sRUFBRSxDQUFBO1FBV2IsUUFBUTtRQUNSLFlBQU8sR0FBMEIsRUFBRSxDQUFBO1FBQ25DLFNBQVM7UUFDVCxzQkFBaUIsR0FBVyxLQUFLLENBQUM7UUFDbEMsU0FBUztRQUNULGVBQVUsR0FBVyxLQUFLLENBQUM7UUFDM0IsU0FBUztRQUNULGNBQVMsR0FBVyxLQUFLLENBQUM7UUFFMUIsVUFBVTtRQUNWLDZDQUE2QztRQUM3QyxtQkFBYyxHQUFXLEtBQUssQ0FBQztRQUMvQixpQkFBWSxHQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVE7UUFDakMsY0FBUyxHQUFVLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQVF6QyxZQUFPLEdBQVUsRUFBRSxDQUFDLENBQUMsT0FBTztRQUM1QixVQUFLLEdBQVUsRUFBRSxDQUFDLENBQUMsT0FBTztRQUMxQixZQUFPLEdBQWlCLEVBQUUsQ0FBQSxDQUFDLE9BQU87UUFROUIsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLEVBQUUsS0FBSyxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxFQUFFLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsRUFBRSxjQUFjLElBQUksS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFLE1BQU0sQ0FBQztJQUNuQyxDQUFDO0lBV0QsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQTtRQUNoQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUMsRUFBRTtZQUMxQjs7Ozs7Ozs7ZUFRRztZQUNDLFNBQVMsOEJBQThCLENBQUMsU0FBZ0IsRUFBRSxhQUFvQjtnQkFDMUUsWUFBWTtnQkFDWixNQUFNLEtBQUssR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUU1Qiw4QkFBOEI7Z0JBQzlCLE9BQU8sUUFBUSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJO2dCQUN2QyxrQkFBa0I7Z0JBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2YsbUJBQW1CO2dCQUNuQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQiwrQkFBK0I7Z0JBQzlCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDVixpQkFBaUI7b0JBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQjtvQkFDL0QsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FDTCxDQUFDO1lBQ04sQ0FBQztZQUVELE9BQU87WUFDUCxJQUFJLFNBQVMsR0FBRyw4QkFBOEIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFDLElBQUksQ0FBQyxDQUFDO1lBRTVELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDcEMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNWLHNCQUFzQjtvQkFDdEIsbUJBQW1CO29CQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtnQkFDekIsQ0FBQztnQkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO29CQUNYLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7b0JBQ2pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDZCw0QkFBNEI7Z0JBQ2hDLENBQUM7YUFDSixDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQTtJQUNWLENBQUM7Q0FHSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIGV4cG9ydCBpbnRlcmZhY2UgQWdlbnRUYXNrU3RlcHtcclxuLy8gICAgIHRpdGxlOnN0cmluZ1xyXG4vLyB9XHJcblxyXG5pbXBvcnQgeyBjb25jYXRNYXAsIGRlbGF5LCBpbnRlcnZhbCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCB0YWtlIH0gZnJvbSBcInJ4anNcIjtcclxuLy8gaW1wb3J0IHsgRm1BZ2VudFRhc2tDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vLi4vYWlnYy9hZ2VudC9mbS1hZ2VudC10YXNrL2ZtLWFnZW50LXRhc2suY29tcG9uZW50XCI7XHJcblxyXG5cclxuaW50ZXJmYWNlIEFnZW50VGFza0J1dHRvbntcclxuICAgIG5hbWU6c3RyaW5nXHJcbiAgICBoYW5kbGU6eyhvcHRpb25zPzphbnkpOnZvaWR9XHJcbiAgICBpc1Nob3c/OkZ1bmN0aW9uXHJcbiAgICBjb2xvcj86c3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBZ2VudFRhc2tTdGVwe1xyXG4gICAgdGl0bGU6c3RyaW5nO1xyXG4gICAgXHJcbiAgICAvLyDlhbHkuqvmlbDmja5cclxuICAgIHNoYXJlRGF0YTphbnkgPSB7fVxyXG4gICAgLy8g56eB5pyJ5pWw5o2uXHJcbiAgICBkYXRhOmFueSA9IHt9XHJcblxyXG4gICAgLy8g54i257qn57uE5Lu25Lyg6YCSXHJcbiAgICBwYXJlbnRDb21wOmFueSB8IHVuZGVmaW5lZCAvLyBGbUFnZW50VGFza0NvbXBvbmVudFxyXG4gICAgcGFyZW50SW5kZXg6bnVtYmVyfHVuZGVmaW5lZFxyXG4gICAgcmVzdGFydCgpe1xyXG4gICAgICAgIGlmKHRoaXMucGFyZW50SW5kZXgpe1xyXG4gICAgICAgICAgICB0aGlzLnBhcmVudENvbXA/LnN0YXJ0VGFzayYmdGhpcy5wYXJlbnRDb21wPy5zdGFydFRhc2sodGhpcy5wYXJlbnRJbmRleClcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saW1pdFN0YXJ0ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyDoh6rlrprkuYnmjInpkq5cclxuICAgIGJ1dHRvbnM6QXJyYXk8QWdlbnRUYXNrQnV0dG9uPiA9IFtdXHJcbiAgICAvLyDmraXpqqTmk43kvZzmjInpkq5cclxuICAgIHJlc3RhcnRCdXR0b25TaG93OmJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8vIOatpemqpOmZkOWItuW8gOWni1xyXG4gICAgbGltaXRTdGFydDpib29sZWFuID0gZmFsc2U7XHJcbiAgICAvLyDlj5bmtojmiYDmnInku7vliqFcclxuICAgIGNhbmNlbEFsbDpib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8g6L+b5bqm5LiO6ZSZ6K+v5o+Q56S6XHJcbiAgICAvLyDpgInpobnvvJrpmpDol4/ov5vluqbmnaHvvIzlr7nkuo7mlbDmja7loavlhpnlkozpgInmi6nnsbvmraXpqqTvvIzlj6/ku6XpmpDol4/ov5vluqbmnaHvvIzku6Xnu5PmnpzmoKHpqozliKTlrprmmK/lkKbkuIvkuIDmraVcclxuICAgIHByb2dyZXNzSGlkZGVuOmJvb2xlYW4gPSBmYWxzZTtcclxuICAgIF9zaW1Qcm9ncmVzczpudW1iZXIgPSAwOyAvLyDmqKHmi5/ov5vluqbmnaFcclxuICAgIF9wcm9ncmVzczpudW1iZXIgPSAwOyAvLyDlrp7pmYXov5vluqbmnaEg5LyY5YWI6L+U5Zue5pWw5o2u5aSE55CG6L+b5bqmXHJcbiAgICBnZXQgcHJvZ3Jlc3MoKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3MgfHwgdGhpcy5fc2ltUHJvZ3Jlc3NcclxuICAgIH1cclxuICAgIHNldCBwcm9ncmVzcyh2KXtcclxuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgbWVzc2FnZTpzdHJpbmcgPSBcIlwiOyAvLyDnu5PmnpzmloflrZdcclxuICAgIGVycm9yOnN0cmluZyA9ICcnOyAvLyDplJnor6/mj5DnpLpcclxuICAgIGxvZ0xpc3Q6QXJyYXk8c3RyaW5nPiA9IFtdIC8vIOaJp+ihjOaXpeW/l1xyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvcihtZXRhRGF0YTp7XHJcbiAgICAgICAgdGl0bGU6c3RyaW5nXHJcbiAgICAgICAgc2hhcmVEYXRhPzphbnlcclxuICAgICAgICBwcm9ncmVzc0hpZGRlbj86Ym9vbGVhblxyXG4gICAgICAgIGhhbmRsZT86eygpOlByb21pc2U8YW55Pn1cclxuICAgIH0pe1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBtZXRhRGF0YT8udGl0bGU7XHJcbiAgICAgICAgdGhpcy5zaGFyZURhdGEgPSBtZXRhRGF0YT8uc2hhcmVEYXRhO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NIaWRkZW4gPSBtZXRhRGF0YT8ucHJvZ3Jlc3NIaWRkZW4gfHwgZmFsc2U7XHJcbiAgICAgICAgdGhpcy5oYW5kbGUgPSBtZXRhRGF0YT8uaGFuZGxlO1xyXG4gICAgfVxyXG4gICAgICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiDku7vliqHlpITnkIblh73mlbBcclxuICAgICAqIEByZXR1cm5zIFByb21pc2U8Ym9vbGVhbj5cclxuICAgICAqIHJlc29sdmUodHJ1ZSkg5omn6KGM5oiQ5YqfXHJcbiAgICAgKiByZXNvbHZlKGZhbHNlKSDmiafooYzlpLHotKVcclxuICAgICAqIHJlamVjdCgpIOawuOS4jeinpuWPkVxyXG4gICAgICogICovIFxyXG4gICAgaGFuZGxlOnsoKTpQcm9taXNlPGJvb2xlYW4+fXx1bmRlZmluZWRcclxuICAgIHByb2dyZXNzU3ViJDpTdWJzY3JpcHRpb258dW5kZWZpbmVkXHJcbiAgICBzaW11bGF0b3JQcm9ncmVzcygpe1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3NTdWIkPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgdGhpcy5yZXN0YXJ0QnV0dG9uU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PntcclxuICAgICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgICAqIOekuuS+i++8muS7u+WKoeWkhOeQhuaooeaLn+WHveaVsFxyXG4gICAgICAgICAgICAgKiBAZGVzY1xyXG4gICAgICAgICAgICAgKiAxLumdnuagh+WHhuS7u+WKoe+8jOS9nOS4uui/m+W6puWKoOi9veWKqOeUu+S9v+eUqFxyXG4gICAgICAgICAgICAgKiAyLuWPr+iuoemHj+S7u+WKoe+8jOWPr+S4jeeUqOivpeWHveaVsO+8jOiHquWumuS5ieWkhOeQhuWHveaVsO+8jOS9humcgOimgeWQiOeQhuaOp+WItnRoaXMucHJvZ3Jlc3NcclxuICAgICAgICAgICAgICogQHBhcmFtIG1heE51bWJlciDmnIDlpKfnmb7liIbmr5RcclxuICAgICAgICAgICAgICogQHBhcmFtIHRvdGFsRHVyYXRpb24g5oC75L2T5Yqg6L295pe26Ze0XHJcbiAgICAgICAgICAgICAqIEByZXR1cm5zIFxyXG4gICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHByb2dyZXNzSGFuZGxlckluY3JlYXNpbmdTcGVlZChtYXhOdW1iZXI6bnVtYmVyLCB0b3RhbER1cmF0aW9uOm51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIOaAu+WFsei+k+WHuueahOaVsOWtl+S4quaVsFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gbWF4TnVtYmVyIC0gMTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g5Yib5bu65LiA5Liqb2JzZXJ2YWJsZe+8jOagueaNruaMh+WumueahOaXtumXtOmXtOmalOWPkeWwhOWAvFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcnZhbCh0b3RhbER1cmF0aW9uIC8gY291bnQpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWPluWJjW1heOS4quWAvO+8iOS7jjDliLBtYXjvvIlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZShtYXhOdW1iZXIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDlsIblj5HlsITnmoTlgLzmmKDlsITkuLrku44x5YiwOTDnmoTmlbDlrZdcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKHggPT4geCArIDEpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIC8vIOS9v+eUqGNvbmNhdE1hcOWSjGRlbGF55p2l5o6n5Yi25q+P5Liq5YC855qE5Y+R5bCE5pe26Ze0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcChuID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOS9v+eUqOaMh+aVsOihsOWHj+WHveaVsOiwg+aVtOW7tui/n+aXtumXtFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVsYXlUaW1lID0gTWF0aC5leHAobiAvIDMwKSAqIDEwMDsgLy8g5Y+v5Lul6LCD5pW06L+Z6YeM55qE57O75pWw5p2l5pS55Y+Y6YCf5bqm5Y+Y5YyW5puy57q/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobikucGlwZShkZWxheShkZWxheVRpbWUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIOS9v+eUqOekuuS+i1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb2dyZXNzJCA9IHByb2dyZXNzSGFuZGxlckluY3JlYXNpbmdTcGVlZCg4MCwgMTAqMTAwMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1N1YiQgPSBwcm9ncmVzcyQuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0OiB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g6L+Z6YeM5Y+v5Lul5pu05paw6L+b5bqm5p2h5oiW6ICF5YGa5YW25LuW5pON5L2cXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3MgPSB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1N1YiQ/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdDb21wbGV0ZWQhJylcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgIH1cclxuXHJcblxyXG59Il19
@@ -1,9 +1,10 @@
1
- export * from "./agent";
2
- export * from "./voice";
3
- export * from "./parse";
4
- export * from "./social";
5
- export * from "./storage";
1
+ // 使用显式 index 文件路径,避免裸路径目录导入(Deno/Node ESM 不支持)
2
+ export * from "./agent/index";
3
+ export * from "./voice/index";
4
+ export * from "./parse/index";
5
+ export * from "./social/index";
6
+ export * from "./storage/index";
6
7
  export * from "./storage/util-file-md5";
7
8
  export * from "./storage/util-file-metadata";
8
- export * from "./ecom";
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxXQUFXLENBQUE7QUFDekIsY0FBYyx5QkFBeUIsQ0FBQTtBQUN2QyxjQUFjLDhCQUE4QixDQUFBO0FBQzVDLGNBQWMsUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYWdlbnRcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi92b2ljZVwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3BhcnNlXCJcclxuZXhwb3J0ICogZnJvbSBcIi4vc29jaWFsXCJcclxuZXhwb3J0ICogZnJvbSBcIi4vc3RvcmFnZVwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3N0b3JhZ2UvdXRpbC1maWxlLW1kNVwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3N0b3JhZ2UvdXRpbC1maWxlLW1ldGFkYXRhXCJcclxuZXhwb3J0ICogZnJvbSBcIi4vZWNvbVwiXHJcbiJdfQ==
9
+ export * from "./ecom/index";
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mbW9kZS1uZy9zcmMvbGliL2NvcmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0NBQStDO0FBQy9DLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUE7QUFDOUIsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLHlCQUF5QixDQUFBO0FBQ3ZDLGNBQWMsOEJBQThCLENBQUE7QUFDNUMsY0FBYyxjQUFjLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyDkvb/nlKjmmL7lvI8gaW5kZXgg5paH5Lu26Lev5b6E77yM6YG/5YWN6KO46Lev5b6E55uu5b2V5a+85YWl77yIRGVuby9Ob2RlIEVTTSDkuI3mlK/mjIHvvIlcclxuZXhwb3J0ICogZnJvbSBcIi4vYWdlbnQvaW5kZXhcIlxyXG5leHBvcnQgKiBmcm9tIFwiLi92b2ljZS9pbmRleFwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3BhcnNlL2luZGV4XCJcclxuZXhwb3J0ICogZnJvbSBcIi4vc29jaWFsL2luZGV4XCJcclxuZXhwb3J0ICogZnJvbSBcIi4vc3RvcmFnZS9pbmRleFwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3N0b3JhZ2UvdXRpbC1maWxlLW1kNVwiXHJcbmV4cG9ydCAqIGZyb20gXCIuL3N0b3JhZ2UvdXRpbC1maWxlLW1ldGFkYXRhXCJcclxuZXhwb3J0ICogZnJvbSBcIi4vZWNvbS9pbmRleFwiXHJcbiJdfQ==
@@ -1,3 +1,4 @@
1
+ import { FmodeACL } from "./datatype/acl";
1
2
  import { FmodeRelation } from "./datatype/relation";
2
3
  export class FmodeObject {
3
4
  static { this._instance = null; }
@@ -72,6 +73,13 @@ export class FmodeObject {
72
73
  return json;
73
74
  }
74
75
  // MARK: - 属性操作
76
+ setACL(acl) {
77
+ this.ACL = acl instanceof FmodeACL ? acl.toJSON() : acl;
78
+ return this;
79
+ }
80
+ getACL() {
81
+ return this.ACL;
82
+ }
75
83
  get(key) {
76
84
  if (this.data[key]?.__type == "Date") {
77
85
  return new Date(this.data[key]?.iso);
@@ -304,4 +312,4 @@ export class FmodeObject {
304
312
  // FmodeObject.registerSubclass = function(className: string, clazz: typeof FmodeObject) {
305
313
  // // 子类注册逻辑
306
314
  // };
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUub2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9jb3JlL3BhcnNlL2Ztb2RlLm9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUF1QnBELE1BQU0sT0FBTyxXQUFXO2FBQ2YsY0FBUyxHQUFlLElBQUksQUFBbkIsQ0FBb0I7SUFFcEMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFhO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzVCLENBQUM7SUFVRCxZQUFZLFNBQWlCO1FBSDdCLFNBQUksR0FBd0IsRUFBRSxDQUFDO1FBSTdCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDOUMsQ0FBQztJQUVELGVBQWU7SUFFZixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQWlCO1FBQzdCLE1BQU0sYUFBYSxHQUFHLEtBQU0sU0FBUSxXQUFXO1lBQzdDO2dCQUNFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuQixDQUFDO1NBQ0YsQ0FBQztRQUVGLGFBQWE7UUFDYixhQUFhLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDMUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQzFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUM5QyxhQUFhLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDOUMsYUFBYSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDO1FBQ3RELGFBQWEsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMs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RCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDaEMsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPO1lBQ1AsSUFBSSxFQUFFLFFBQVE7U0FDZixDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxJQUFJLE1BQU0sQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEQsT0FBTztZQUNMLE1BQU0sRUFBRSxNQUFNO1lBQ2QsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztTQUNoQixDQUFDO0lBQ0osQ0FBQzs7QUFHSCxZQUFZO0FBQ1osMEZBQTBGO0FBQzFGLGNBQWM7QUFDZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm1vZGVRdWVyeSB9IGZyb20gXCIuL2Ztb2RlLnF1ZXJ5XCI7XHJcbmltcG9ydCB7IEZtb2RlQUNMIH0gZnJvbSBcIi4vZGF0YXR5cGUvYWNsXCI7XHJcbmltcG9ydCB7IEZtb2RlR2VvUG9pbnQgfSBmcm9tIFwiLi9kYXRhdHlwZS9nZW9wb2ludFwiO1xyXG5pbXBvcnQgeyBGbW9kZVJlbGF0aW9uIH0gZnJvbSBcIi4vZGF0YXR5cGUvcmVsYXRpb25cIjtcclxuXHJcbi8vID09PT09PT09PT09PT09PT09PT09IENvcmUgVHlwZXMgPT09PT09PT09PT09PT09PT09PT1cclxudHlwZSBBQ0wgPSBSZWNvcmQ8c3RyaW5nLCB7IHJlYWQ6IGJvb2xlYW47IHdyaXRlOiBib29sZWFuIH0+O1xyXG50eXBlIEZpbGUgPSB7IF9fdHlwZTogJ0ZpbGUnOyBuYW1lOiBzdHJpbmc7IHVybDogc3RyaW5nIH07XHJcbnR5cGUgR2VvUG9pbnQgPSBGbW9kZUdlb1BvaW50fHsgX190eXBlOiAnR2VvUG9pbnQnOyBsYXRpdHVkZTogbnVtYmVyOyBsb25naXR1ZGU6IG51bWJlciB9O1xyXG50eXBlIFJlbGF0aW9uPFQgZXh0ZW5kcyBGbW9kZU9iamVjdD4gPSB7XHJcbiAgX190eXBlOiAnUmVsYXRpb24nO1xyXG4gIGNsYXNzTmFtZTogc3RyaW5nO1xyXG4gIGFkZDogKG9iamVjdHM6IFRbXSkgPT4gdm9pZDtcclxuICByZW1vdmU6IChvYmplY3RzOiBUW10pID0+IHZvaWQ7XHJcbiAgcXVlcnk6ICgpID0+IEZtb2RlUXVlcnk8VD47XHJcbn07XHJcblxyXG50eXBlIFBvaW50ZXIgPSB7IF9fdHlwZTogJ1BvaW50ZXInOyBjbGFzc05hbWU6IHN0cmluZzsgb2JqZWN0SWQ6IHN0cmluZyB9O1xyXG50eXBlIEJhc2VBdHRyaWJ1dGVzID0ge1xyXG4gIGlkPzogc3RyaW5nO1xyXG4gIGNyZWF0ZWRBdD86IERhdGU7XHJcbiAgdXBkYXRlZEF0PzogRGF0ZTtcclxuICBBQ0w/OiBBQ0wgfCBGbW9kZUFDTDtcclxufTtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgRm1vZGVPYmplY3Qge1xyXG4gIHN0YXRpYyBfaW5zdGFuY2U6IGFueSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBzdGF0aWMgYmluZEluc3RhbmNlKGluc3RhbmNlOiBhbnkpIHtcclxuICAgIHRoaXMuX2luc3RhbmNlID0gaW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBjbGFzc05hbWU6IHN0cmluZztcclxuICBpZD86IHN0cmluZztcclxuICBjcmVhdGVkQXQ/OiBEYXRlO1xyXG4gIHVwZGF0ZWRBdD86IERhdGU7XHJcbiAgQUNMPzogQUNMO1xyXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICBwcml2YXRlIF9wYXJzZUluc3RhbmNlOiBhbnk7IC8vIOWunuS+i+e6p+WIq+eahHBhcnNl5a6e5L6LXHJcblxyXG4gIGNvbnN0cnVjdG9yKGNsYXNzTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcclxuICAgIC8vIOWmguaenOmdmeaAgeWunuS+i+WtmOWcqO+8jOS9v+eUqOWug++8m+WQpuWImeiuvue9ruS4um51bGxcclxuICAgIHRoaXMuX3BhcnNlSW5zdGFuY2UgPSBGbW9kZU9iamVjdC5faW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICAvLyBNQVJLOiAtIOWfuuacrOaWueazlVxyXG5cclxuICBzdGF0aWMgZXh0ZW5kKGNsYXNzTmFtZTogc3RyaW5nKTogbmV3KCkgPT4gRm1vZGVPYmplY3Qge1xyXG4gICAgY29uc3QgRXh0ZW5kZWRDbGFzcyA9IGNsYXNzIGV4dGVuZHMgRm1vZGVPYmplY3Qge1xyXG4gICAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcihjbGFzc05hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgXHJcbiAgICAvLyDmt7vliqDpnZnmgIHmlrnms5XliLDmianlsZXnsbtcclxuICAgIEV4dGVuZGVkQ2xhc3MuZXh0ZW5kID0gRm1vZGVPYmplY3QuZXh0ZW5kO1xyXG4gICAgRXh0ZW5kZWRDbGFzcy5jcmVhdGUgPSBGbW9kZU9iamVjdC5jcmVhdGU7XHJcbiAgICBFeHRlbmRlZENsYXNzLmZldGNoQWxsID0gRm1vZGVPYmplY3QuZmV0Y2hBbGw7XHJcbiAgICBFeHRlbmRlZENsYXNzLmZyb21GaWxlID0gRm1vZGVPYmplY3QuZnJvbUZpbGU7XHJcbiAgICBFeHRlbmRlZENsYXNzLmJpbmRJbnN0YW5jZSA9IEZtb2RlT2JqZWN0LmJpbmRJbnN0YW5jZTtcclxuICAgIEV4dGVuZGVkQ2xhc3MuX2luc3RhbmNlID0gRm1vZGVPYmplY3QuX2luc3RhbmNlO1xyXG4gICAgXHJcbiAgICByZXR1cm4gRXh0ZW5kZWRDbGFzcyBhcyBhbnk7XHJcbiAgfVxyXG5cclxuICB0b1BvaW50ZXIoKTogUG9pbnRlciB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBfX3R5cGU6ICdQb2ludGVyJyxcclxuICAgICAgY2xhc3NOYW1lOiB0aGlzLmNsYXNzTmFtZSxcclxuICAgICAgb2JqZWN0SWQ6IHRoaXMuaWQhXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gVXBkYXRlIHRoZSB0b0pTT04gbWV0aG9kIHRvIHByb3Blcmx5IGZvcm1hdCBkYXRlcyBhbmQgcG9pbnRlcnNcclxudG9KU09OKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gIGNvbnN0IGpzb246IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XHJcbiAgICBfX3R5cGU6ICdPYmplY3QnLFxyXG4gICAgY2xhc3NOYW1lOiB0aGlzLmNsYXNzTmFtZSxcclxuICAgIC4uLnRoaXMuZGF0YVxyXG4gIH07XHJcblxyXG4gIGlmICh0aGlzLmlkKSB7XHJcbiAgICBqc29uLm9iamVjdElkID0gdGhpcy5pZDtcclxuICB9XHJcblxyXG4gIE9iamVjdC5rZXlzKGpzb24pLmZvckVhY2goa2V5PT57XHJcbiAgICBpZiAoanNvbltrZXldPy5nZXRUaW1lPy4oKSkge1xyXG4gICAgICBqc29uW2tleV0gPSB7IF9fdHlwZTogJ0RhdGUnLCBpc286IGpzb25ba2V5XS50b0lTT1N0cmluZygpIH07XHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgLy8gRm9ybWF0IGRhdGVzIHByb3Blcmx5XHJcbiAgdHJ5e1xyXG4gICAgaWYgKHRoaXMuY3JlYXRlZEF0KSB7XHJcbiAgICAgICAgaWYodHlwZW9mIHRoaXMuY3JlYXRlZEF0PT1cInN0cmluZ1wiKXtcclxuICAgICAgICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKHRoaXMuY3JlYXRlZEF0KVxyXG4gICAgICB9XHJcbiAgICAgIGpzb24uY3JlYXRlZEF0ID0geyBfX3R5cGU6ICdEYXRlJywgaXNvOiB0aGlzLmNyZWF0ZWRBdC50b0lTT1N0cmluZygpIH07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy51cGRhdGVkQXQpIHtcclxuICAgICAgaWYodHlwZW9mIHRoaXMudXBkYXRlZEF0PT1cInN0cmluZ1wiKXtcclxuICAgICAgICB0aGlzLnVwZGF0ZWRBdCA9IG5ldyBEYXRlKHRoaXMudXBkYXRlZEF0KVxyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMudXBkYXRlZEF0KVxyXG4gICAgICBqc29uLnVwZGF0ZWRBdCA9IHsgX190eXBlOiAnRGF0ZScsIGlzbzogdGhpcy51cGRhdGVkQXQudG9JU09TdHJpbmcoKSB9O1xyXG4gICAgfVxyXG4gIH1jYXRjaChlcnIpe31cclxuICBcclxuICAvLyBIYW5kbGUgQUNMXHJcbiAgaWYgKHRoaXMuQUNMKSB7XHJcbiAgICBqc29uLkFDTCA9IHRoaXMuQUNMO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGpzb247XHJcbn1cclxuXHJcblxyXG4gIC8vIE1BUks6IC0g5bGe5oCn5pON5L2cXHJcblxyXG4gIGdldChrZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICBpZih0aGlzLmRhdGFba2V5XT8uX190eXBlPT1cIkRhdGVcIil7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMuZGF0YVtrZXldPy5pc28pXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhW2tleV07XHJcbiAgfVxyXG5cclxuICBpc29TdHJUb0RhdGUodmFsdWU6YW55KXtcclxuICAgIGlmKHZhbHVlPy5pbmRleE9mPy4oXCJUXCIpPi0xJiZ2YWx1ZT8uaW5kZXhPZj8uKFwiWlwiKT4tMSYmdmFsdWU/Lmxlbmd0aD09MjQpe1xyXG4gICAgICB0cnl7ICBcclxuICAgICAgICBsZXQgdGltZSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdGltZVxyXG4gICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbiAgfVxyXG5cclxuICBzZXQoa2V5OiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+LCB2YWx1ZT86IGFueSk6IHRoaXMge1xyXG5cclxuICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0Jykge1xyXG4gICAgICBPYmplY3Qua2V5cyhrZXkpLmZvckVhY2goaz0+e1xyXG4gICAgICAgIGlmKGtleVtrXT8uaW5kZXhPZj8uKFwiVFwiKT4tMSYma2V5W2tdPy5pbmRleE9mPy4oXCJaXCIpPi0xKXtcclxuICAgICAgICAgIGtleVtrXSA9IHRoaXMuaXNvU3RyVG9EYXRlKGtleVtrXSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwga2V5KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmKHZhbHVlKXtcclxuICAgICAgICB2YWx1ZSA9IHRoaXMuaXNvU3RyVG9EYXRlKHZhbHVlKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHVuc2V0KGtleTogc3RyaW5nKTogdGhpcyB7XHJcbiAgICBkZWxldGUgdGhpcy5kYXRhW2tleV07XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGluY3JlbWVudChrZXk6IHN0cmluZywgYW1vdW50ID0gMSk6IHRoaXMge1xyXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0KGtleSkgfHwgMDtcclxuICAgIHRoaXMuc2V0KGtleSwgY3VycmVudCArIGFtb3VudCk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGFkZChrZXk6IHN0cmluZywgaXRlbXM6IGFueVtdKTogdGhpcyB7XHJcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXQoa2V5KSB8fCBbXTtcclxuICAgIHRoaXMuc2V0KGtleSwgWy4uLmN1cnJlbnQsIC4uLml0ZW1zXSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIGFkZFVuaXF1ZShrZXk6IHN0cmluZywgaXRlbXM6IGFueVtdKTogdGhpcyB7XHJcbiAgICBjb25zdCBjdXJyZW50ID0gbmV3IFNldCh0aGlzLmdldChrZXkpIHx8IG5ldyBTZXQoKSk7XHJcbiAgICBpdGVtcy5mb3JFYWNoKGl0ZW0gPT4gY3VycmVudC5hZGQoaXRlbSkpO1xyXG4gICAgdGhpcy5zZXQoa2V5LCBBcnJheS5mcm9tKGN1cnJlbnQpKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKGtleTogc3RyaW5nLCBpdGVtczogYW55W10pOiB0aGlzIHtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldChrZXkpIHx8IFtdO1xyXG4gICAgY29uc3QgdG9SZW1vdmUgPSBuZXcgU2V0KGl0ZW1zKTtcclxuICAgIHRoaXMuc2V0KGtleSwgY3VycmVudC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gIXRvUmVtb3ZlLmhhcyhpdGVtKSkpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBNQVJLOiAtIENSVUQg5pON5L2cXHJcblxyXG4vLyBVcGRhdGUgdGhlIHNhdmUgbWV0aG9kIHRvIHVzZSB0aGUgcHJvcGVyIHRvSlNPTiBmb3JtYXRcclxuYXN5bmMgc2F2ZShvcHRpb25zPzogeyB1c2VNYXN0ZXJLZXk/OiBib29sZWFuIH0pOiBQcm9taXNlPHRoaXM+IHtcclxuICAvLyDkvJjlhYjkvb/nlKjlrp7kvovnuqfliKvnmoRwYXJzZeWunuS+i++8jOWmguaenOayoeacieWImeS9v+eUqOmdmeaAgeWunuS+i1xyXG4gIGNvbnN0IHBhcnNlSW5zdGFuY2UgPSB0aGlzLl9wYXJzZUluc3RhbmNlIHx8IEZtb2RlT2JqZWN0Ll9pbnN0YW5jZTtcclxuICBpZiAoIXBhcnNlSW5zdGFuY2UpIHRocm93IG5ldyBFcnJvcignTm90IGluaXRpYWxpemVkJyk7XHJcblxyXG4gIGNvbnN0IG1ldGhvZCA9IHRoaXMuaWQgPyAnUFVUJyA6ICdQT1NUJztcclxuICBsZXQgdXJsID0gYCR7cGFyc2VJbnN0YW5jZS5zZXJ2ZXJVUkx9L2NsYXNzZXMvJHt0aGlzLmNsYXNzTmFtZX1gO1xyXG4gIGlmICh0aGlzLmlkKSB1cmwgKz0gYC8ke3RoaXMuaWR9YDtcclxuXHJcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6IHBhcnNlSW5zdGFuY2UuYXBwSWRcclxuICB9O1xyXG5cclxuICBpZiAob3B0aW9ucz8udXNlTWFzdGVyS2V5ICYmIHBhcnNlSW5zdGFuY2UuY29uZmlnLm1hc3RlcktleSkge1xyXG4gICAgaGVhZGVyc1snWC1QYXJzZS1NYXN0ZXItS2V5J10gPSBwYXJzZUluc3RhbmNlLmNvbmZpZy5tYXN0ZXJLZXk7XHJcbiAgfSBlbHNlIHtcclxuICAgIC8vIEFkZCBzZXNzaW9uIHRva2VuIGlmIGF2YWlsYWJsZSBhbmQgbm90IHVzaW5nIG1hc3RlciBrZXlcclxuICAgIGNvbnN0IHNlc3Npb25Ub2tlbiA9IHBhcnNlSW5zdGFuY2Uuc2Vzc2lvblRva2VuO1xyXG4gICAgaWYgKHNlc3Npb25Ub2tlbikge1xyXG4gICAgICBoZWFkZXJzWydYLVBhcnNlLVNlc3Npb24tVG9rZW4nXSA9IHNlc3Npb25Ub2tlbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEdldCBjbGVhbiBKU09OIHJlcHJlc2VudGF0aW9uXHJcbiAgY29uc3QgZGF0YSA9IHRoaXMudG9KU09OKCk7XHJcbiAgZGVsZXRlIGRhdGEuY3JlYXRlZEF0OyAvLyBUaGVzZSBhcmUgaGFuZGxlZCBieSBzZXJ2ZXJcclxuICBkZWxldGUgZGF0YS51cGRhdGVkQXQ7XHJcbiAgZGVsZXRlIGRhdGEuX190eXBlO1xyXG4gIGRlbGV0ZSBkYXRhLmNsYXNzTmFtZTtcclxuXHJcbiAgLy8gQ29udmVydCBhbnkgbmVzdGVkIEZtb2RlT2JqZWN0cyB0byBwb2ludGVyc1xyXG4gIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcclxuICAgIGlmICh0aGlzLmdldChrZXkpPy50b1BvaW50ZXIpIHtcclxuICAgICAgZGF0YVtrZXldID0gdGhpcy5nZXQoa2V5KS50b1BvaW50ZXIoKTtcclxuICAgIH1cclxuICB9XHJcbiAgbGV0IHJlc3VsdDphbnlcclxuICBsZXQgcmVzcG9uc2U6YW55XHJcblxyXG4gIGNvbnNvbGUubG9nKHVybCxkYXRhKVxyXG4gIHRyeXtcclxuICByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xyXG4gICAgbWV0aG9kLFxyXG4gICAgaGVhZGVycyxcclxuICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpXHJcbiAgfSk7XHJcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZGF0YSkpXHJcbiAgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gIH1jYXRjaChlcnIpe1xyXG4gICAgYWxlcnQoZXJyKTtcclxuICB9XHJcbiAgY29uc29sZS5sb2cocmVzdWx0KVxyXG4gIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IpO1xyXG5cclxuICB0aGlzLmlkID0gcmVzdWx0Lm9iamVjdElkIHx8IHRoaXMuaWQ7XHJcbiAgdGhpcy5jcmVhdGVkQXQgPSBuZXcgRGF0ZShyZXN1bHQuY3JlYXRlZEF0IHx8IHRoaXMuY3JlYXRlZEF0KTtcclxuICB0aGlzLnVwZGF0ZWRBdCA9IG5ldyBEYXRlKHJlc3VsdC51cGRhdGVkQXQgfHwgdGhpcy51cGRhdGVkQXQpO1xyXG4gIHJldHVybiB0aGlzO1xyXG59XHJcbiAgYXN5bmMgZGVzdHJveShvcHRpb25zPzogeyB1c2VNYXN0ZXJLZXk/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5pZCkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGVzdHJveSB1bnNhdmVkIG9iamVjdCcpO1xyXG5cclxuICAgIC8vIOS8mOWFiOS9v+eUqOWunuS+i+e6p+WIq+eahHBhcnNl5a6e5L6L77yM5aaC5p6c5rKh5pyJ5YiZ5L2/55So6Z2Z5oCB5a6e5L6LXHJcbiAgICBjb25zdCBwYXJzZUluc3RhbmNlID0gdGhpcy5fcGFyc2VJbnN0YW5jZSB8fCBGbW9kZU9iamVjdC5faW5zdGFuY2U7XHJcbiAgICBpZiAoIXBhcnNlSW5zdGFuY2UpIHRocm93IG5ldyBFcnJvcignTm90IGluaXRpYWxpemVkJyk7XHJcblxyXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiBwYXJzZUluc3RhbmNlLmFwcElkXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChvcHRpb25zPy51c2VNYXN0ZXJLZXkgJiYgcGFyc2VJbnN0YW5jZS5jb25maWcubWFzdGVyS2V5KSB7XHJcbiAgICAgIGhlYWRlcnNbJ1gtUGFyc2UtTWFzdGVyLUtleSddID0gcGFyc2VJbnN0YW5jZS5jb25maWcubWFzdGVyS2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQWRkIHNlc3Npb24gdG9rZW4gaWYgYXZhaWxhYmxlIGFuZCBub3QgdXNpbmcgbWFzdGVyIGtleVxyXG4gICAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSBwYXJzZUluc3RhbmNlLnNlc3Npb25Ub2tlbjtcclxuICAgICAgaWYgKHNlc3Npb25Ub2tlbikge1xyXG4gICAgICAgIGhlYWRlcnNbJ1gtUGFyc2UtU2Vzc2lvbi1Ub2tlbiddID0gc2Vzc2lvblRva2VuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXJsID0gYCR7cGFyc2VJbnN0YW5jZS5zZXJ2ZXJVUkx9L2NsYXNzZXMvJHt0aGlzLmNsYXNzTmFtZX0vJHt0aGlzLmlkfWA7XHJcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xyXG4gICAgICBtZXRob2Q6ICdERUxFVEUnLFxyXG4gICAgICBoZWFkZXJzXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvciB8fCAnRmFpbGVkIHRvIGRlbGV0ZSBvYmplY3QnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE1BUks6IC0g6Z2Z5oCB5pa55rOVXHJcblxyXG4gIHN0YXRpYyBhc3luYyBjcmVhdGU8VCBleHRlbmRzIEZtb2RlT2JqZWN0PihcclxuICAgIGNsYXNzTmFtZTogc3RyaW5nLFxyXG4gICAgYXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgYW55PixcclxuICAgIG9wdGlvbnM/OiB7IHVzZU1hc3RlcktleT86IGJvb2xlYW4gfVxyXG4gICk6IFByb21pc2U8VD4ge1xyXG4gICAgY29uc3Qgb2JqID0gbmV3IHRoaXMoY2xhc3NOYW1lKSBhcyBUO1xyXG4gICAgb2JqLnNldChhdHRyaWJ1dGVzKTtcclxuICAgIHJldHVybiBvYmouc2F2ZShvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBhc3luYyBmZXRjaEFsbDxUIGV4dGVuZHMgRm1vZGVPYmplY3Q+KFxyXG4gICAgb2JqZWN0czogVFtdLFxyXG4gICAgb3B0aW9ucz86IHsgdXNlTWFzdGVyS2V5PzogYm9vbGVhbiB9XHJcbiAgKTogUHJvbWlzZTxUW10+IHtcclxuICAgIGlmICghRm1vZGVPYmplY3QuX2luc3RhbmNlKSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbml0aWFsaXplZCcpO1xyXG4gICAgaWYgKG9iamVjdHMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XHJcblxyXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiBGbW9kZU9iamVjdC5faW5zdGFuY2UuYXBwSWRcclxuICAgIH07XHJcblxyXG4gICAgaWYgKG9wdGlvbnM/LnVzZU1hc3RlcktleSAmJiBGbW9kZU9iamVjdC5faW5zdGFuY2UuY29uZmlnLm1hc3RlcktleSkge1xyXG4gICAgICBoZWFkZXJzWydYLVBhcnNlLU1hc3Rlci1LZXknXSA9IEZtb2RlT2JqZWN0Ll9pbnN0YW5jZS5jb25maWcubWFzdGVyS2V5O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQWRkIHNlc3Npb24gdG9rZW4gaWYgYXZhaWxhYmxlIGFuZCBub3QgdXNpbmcgbWFzdGVyIGtleVxyXG4gICAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSBGbW9kZU9iamVjdC5faW5zdGFuY2Uuc2Vzc2lvblRva2VuO1xyXG4gICAgICBpZiAoc2Vzc2lvblRva2VuKSB7XHJcbiAgICAgICAgaGVhZGVyc1snWC1QYXJzZS1TZXNzaW9uLVRva2VuJ10gPSBzZXNzaW9uVG9rZW47XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cmwgPSBgJHtGbW9kZU9iamVjdC5faW5zdGFuY2Uuc2VydmVyVVJMfS9iYXRjaGA7XHJcbiAgICBjb25zdCByZXF1ZXN0cyA9IG9iamVjdHMubWFwKG9iaiA9PiAoe1xyXG4gICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICBwYXRoOiBgL2NsYXNzZXMvJHtvYmouY2xhc3NOYW1lfS8ke29iai5pZH1gXHJcbiAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIGhlYWRlcnMsXHJcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgcmVxdWVzdHMgfSlcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICBpZiAocmVzdWx0cy5lcnJvcikgdGhyb3cgbmV3IEVycm9yKHJlc3VsdHMuZXJyb3IpO1xyXG5cclxuICAgIHJldHVybiByZXN1bHRzLm1hcCgocmVzdWx0OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3Qgb2JqID0gb2JqZWN0c1tpbmRleF07XHJcbiAgICAgIG9iai5zZXQocmVzdWx0LnN1Y2Nlc3MpO1xyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBNQVJLOiAtIOWFs+ezu+aTjeS9nFxyXG5cclxuICByZWxhdGlvbjxUIGV4dGVuZHMgRm1vZGVPYmplY3Q+KGtleTogc3RyaW5nKTogRm1vZGVSZWxhdGlvbjxUPiB7XHJcbiAgICByZXR1cm4gbmV3IEZtb2RlUmVsYXRpb248VD4odGhpcywga2V5KTtcclxuICB9XHJcblxyXG4gIC8vIE1BUks6IC0g5paH5Lu25aSE55CGXHJcblxyXG4gIHN0YXRpYyBhc3luYyBmcm9tRmlsZShcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGRhdGE6IEJsb2IgfCBGaWxlIHwgYW55LFxyXG4gICAgX3R5cGU/OiBzdHJpbmdcclxuICApOiBQcm9taXNlPEZpbGU+IHtcclxuICAgIGlmICghRm1vZGVPYmplY3QuX2luc3RhbmNlKSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbml0aWFsaXplZCcpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVEYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmaWxlRGF0YS5hcHBlbmQoJ2ZpbGUnLCBkYXRhLCBuYW1lKTtcclxuXHJcbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6IEZtb2RlT2JqZWN0Ll9pbnN0YW5jZS5hcHBJZFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBZGQgc2Vzc2lvbiB0b2tlbiBpZiBhdmFpbGFibGVcclxuICAgIGNvbnN0IHNlc3Npb25Ub2tlbiA9IEZtb2RlT2JqZWN0Ll9pbnN0YW5jZS5zZXNzaW9uVG9rZW47XHJcbiAgICBpZiAoc2Vzc2lvblRva2VuKSB7XHJcbiAgICAgIGhlYWRlcnNbJ1gtUGFyc2UtU2Vzc2lvbi1Ub2tlbiddID0gc2Vzc2lvblRva2VuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVybCA9IGAke0Ztb2RlT2JqZWN0Ll9pbnN0YW5jZS5zZXJ2ZXJVUkx9L2ZpbGVzLyR7bmFtZX1gO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIGhlYWRlcnMsXHJcbiAgICAgIGJvZHk6IGZpbGVEYXRhXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBfX3R5cGU6ICdGaWxlJyxcclxuICAgICAgbmFtZTogcmVzdWx0Lm5hbWUsXHJcbiAgICAgIHVybDogcmVzdWx0LnVybFxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuXHJcbi8vIOa3u+WKoOmdmeaAgeaWueazleWIsOexu+S4ilxyXG4vLyBGbW9kZU9iamVjdC5yZWdpc3RlclN1YmNsYXNzID0gZnVuY3Rpb24oY2xhc3NOYW1lOiBzdHJpbmcsIGNsYXp6OiB0eXBlb2YgRm1vZGVPYmplY3QpIHtcclxuLy8gICAvLyDlrZDnsbvms6jlhozpgLvovpFcclxuLy8gfTsiXX0=
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm1vZGUub2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm1vZGUtbmcvc3JjL2xpYi9jb3JlL3BhcnNlL2Ztb2RlLm9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBdUJwRCxNQUFNLE9BQU8sV0FBVzthQUNmLGNBQVMsR0FBZSxJQUFJLEFBQW5CLENBQW9CO0lBRXBDLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBYTtRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBVUQsWUFBWSxTQUFpQjtRQUg3QixTQUFJLEdBQXdCLEVBQUUsQ0FBQztRQUk3QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQix5QkFBeUI7UUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDO0lBQzlDLENBQUM7SUFFRCxlQUFlO0lBRWYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFpQjtRQUM3QixNQUFNLGFBQWEsR0FBRyxLQUFNLFNBQVEsV0FBVztZQUM3QztnQkFDRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbkIsQ0FBQztTQUNGLENBQUM7UUFFRixhQUFhO1FBQ2IsYUFBYSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQzFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUMxQyxhQUFhLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDOUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQzlDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FB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QUFDLFNBQVMsQ0FBQyxLQUFLO1NBQ3RELENBQUM7UUFFRixpQ0FBaUM7UUFDakMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUM7UUFDeEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixPQUFPLENBQUMsdUJBQXVCLENBQUMsR0FBRyxZQUFZLENBQUM7UUFDbEQsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxTQUFTLFVBQVUsSUFBSSxFQUFFLENBQUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTztZQUNQLElBQUksRUFBRSxRQUFRO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckMsSUFBSSxNQUFNLENBQUMsS0FBSztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWhELE9BQU87WUFDTCxNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7U0FDaEIsQ0FBQztJQUNKLENBQUM7O0FBR0gsWUFBWTtBQUNaLDBGQUEwRjtBQUMxRixjQUFjO0FBQ2QsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZtb2RlUXVlcnkgfSBmcm9tIFwiLi9mbW9kZS5xdWVyeVwiO1xyXG5pbXBvcnQgeyBGbW9kZUFDTCB9IGZyb20gXCIuL2RhdGF0eXBlL2FjbFwiO1xyXG5pbXBvcnQgeyBGbW9kZUdlb1BvaW50IH0gZnJvbSBcIi4vZGF0YXR5cGUvZ2VvcG9pbnRcIjtcclxuaW1wb3J0IHsgRm1vZGVSZWxhdGlvbiB9IGZyb20gXCIuL2RhdGF0eXBlL3JlbGF0aW9uXCI7XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSBDb3JlIFR5cGVzID09PT09PT09PT09PT09PT09PT09XHJcbnR5cGUgQUNMID0gUmVjb3JkPHN0cmluZywgeyByZWFkOiBib29sZWFuOyB3cml0ZTogYm9vbGVhbiB9PjtcclxudHlwZSBGaWxlID0geyBfX3R5cGU6ICdGaWxlJzsgbmFtZTogc3RyaW5nOyB1cmw6IHN0cmluZyB9O1xyXG50eXBlIEdlb1BvaW50ID0gRm1vZGVHZW9Qb2ludHx7IF9fdHlwZTogJ0dlb1BvaW50JzsgbGF0aXR1ZGU6IG51bWJlcjsgbG9uZ2l0dWRlOiBudW1iZXIgfTtcclxudHlwZSBSZWxhdGlvbjxUIGV4dGVuZHMgRm1vZGVPYmplY3Q+ID0ge1xyXG4gIF9fdHlwZTogJ1JlbGF0aW9uJztcclxuICBjbGFzc05hbWU6IHN0cmluZztcclxuICBhZGQ6IChvYmplY3RzOiBUW10pID0+IHZvaWQ7XHJcbiAgcmVtb3ZlOiAob2JqZWN0czogVFtdKSA9PiB2b2lkO1xyXG4gIHF1ZXJ5OiAoKSA9PiBGbW9kZVF1ZXJ5PFQ+O1xyXG59O1xyXG5cclxudHlwZSBQb2ludGVyID0geyBfX3R5cGU6ICdQb2ludGVyJzsgY2xhc3NOYW1lOiBzdHJpbmc7IG9iamVjdElkOiBzdHJpbmcgfTtcclxudHlwZSBCYXNlQXR0cmlidXRlcyA9IHtcclxuICBpZD86IHN0cmluZztcclxuICBjcmVhdGVkQXQ/OiBEYXRlO1xyXG4gIHVwZGF0ZWRBdD86IERhdGU7XHJcbiAgQUNMPzogQUNMIHwgRm1vZGVBQ0w7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEZtb2RlT2JqZWN0IHtcclxuICBzdGF0aWMgX2luc3RhbmNlOiBhbnkgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgc3RhdGljIGJpbmRJbnN0YW5jZShpbnN0YW5jZTogYW55KSB7XHJcbiAgICB0aGlzLl9pbnN0YW5jZSA9IGluc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XHJcbiAgaWQ/OiBzdHJpbmc7XHJcbiAgY3JlYXRlZEF0PzogRGF0ZTtcclxuICB1cGRhdGVkQXQ/OiBEYXRlO1xyXG4gIEFDTD86IEFDTDtcclxuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgcHJpdmF0ZSBfcGFyc2VJbnN0YW5jZTogYW55OyAvLyDlrp7kvovnuqfliKvnmoRwYXJzZeWunuS+i1xyXG5cclxuICBjb25zdHJ1Y3RvcihjbGFzc05hbWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7XHJcbiAgICAvLyDlpoLmnpzpnZnmgIHlrp7kvovlrZjlnKjvvIzkvb/nlKjlroPvvJvlkKbliJnorr7nva7kuLpudWxsXHJcbiAgICB0aGlzLl9wYXJzZUluc3RhbmNlID0gRm1vZGVPYmplY3QuX2luc3RhbmNlO1xyXG4gIH1cclxuXHJcbiAgLy8gTUFSSzogLSDln7rmnKzmlrnms5VcclxuXHJcbiAgc3RhdGljIGV4dGVuZChjbGFzc05hbWU6IHN0cmluZyk6IG5ldygpID0+IEZtb2RlT2JqZWN0IHtcclxuICAgIGNvbnN0IEV4dGVuZGVkQ2xhc3MgPSBjbGFzcyBleHRlbmRzIEZtb2RlT2JqZWN0IHtcclxuICAgICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoY2xhc3NOYW1lKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIFxyXG4gICAgLy8g5re75Yqg6Z2Z5oCB5pa55rOV5Yiw5omp5bGV57G7XHJcbiAgICBFeHRlbmRlZENsYXNzLmV4dGVuZCA9IEZtb2RlT2JqZWN0LmV4dGVuZDtcclxuICAgIEV4dGVuZGVkQ2xhc3MuY3JlYXRlID0gRm1vZGVPYmplY3QuY3JlYXRlO1xyXG4gICAgRXh0ZW5kZWRDbGFzcy5mZXRjaEFsbCA9IEZtb2RlT2JqZWN0LmZldGNoQWxsO1xyXG4gICAgRXh0ZW5kZWRDbGFzcy5mcm9tRmlsZSA9IEZtb2RlT2JqZWN0LmZyb21GaWxlO1xyXG4gICAgRXh0ZW5kZWRDbGFzcy5iaW5kSW5zdGFuY2UgPSBGbW9kZU9iamVjdC5iaW5kSW5zdGFuY2U7XHJcbiAgICBFeHRlbmRlZENsYXNzLl9pbnN0YW5jZSA9IEZtb2RlT2JqZWN0Ll9pbnN0YW5jZTtcclxuICAgIFxyXG4gICAgcmV0dXJuIEV4dGVuZGVkQ2xhc3MgYXMgYW55O1xyXG4gIH1cclxuXHJcbiAgdG9Qb2ludGVyKCk6IFBvaW50ZXIge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgX190eXBlOiAnUG9pbnRlcicsXHJcbiAgICAgIGNsYXNzTmFtZTogdGhpcy5jbGFzc05hbWUsXHJcbiAgICAgIG9iamVjdElkOiB0aGlzLmlkIVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIFVwZGF0ZSB0aGUgdG9KU09OIG1ldGhvZCB0byBwcm9wZXJseSBmb3JtYXQgZGF0ZXMgYW5kIHBvaW50ZXJzXHJcbnRvSlNPTigpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICBjb25zdCBqc29uOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xyXG4gICAgX190eXBlOiAnT2JqZWN0JyxcclxuICAgIGNsYXNzTmFtZTogdGhpcy5jbGFzc05hbWUsXHJcbiAgICAuLi50aGlzLmRhdGFcclxuICB9O1xyXG5cclxuICBpZiAodGhpcy5pZCkge1xyXG4gICAganNvbi5vYmplY3RJZCA9IHRoaXMuaWQ7XHJcbiAgfVxyXG5cclxuICBPYmplY3Qua2V5cyhqc29uKS5mb3JFYWNoKGtleT0+e1xyXG4gICAgaWYgKGpzb25ba2V5XT8uZ2V0VGltZT8uKCkpIHtcclxuICAgICAganNvbltrZXldID0geyBfX3R5cGU6ICdEYXRlJywgaXNvOiBqc29uW2tleV0udG9JU09TdHJpbmcoKSB9O1xyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIC8vIEZvcm1hdCBkYXRlcyBwcm9wZXJseVxyXG4gIHRyeXtcclxuICAgIGlmICh0aGlzLmNyZWF0ZWRBdCkge1xyXG4gICAgICAgIGlmKHR5cGVvZiB0aGlzLmNyZWF0ZWRBdD09XCJzdHJpbmdcIil7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkQXQgPSBuZXcgRGF0ZSh0aGlzLmNyZWF0ZWRBdClcclxuICAgICAgfVxyXG4gICAgICBqc29uLmNyZWF0ZWRBdCA9IHsgX190eXBlOiAnRGF0ZScsIGlzbzogdGhpcy5jcmVhdGVkQXQudG9JU09TdHJpbmcoKSB9O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudXBkYXRlZEF0KSB7XHJcbiAgICAgIGlmKHR5cGVvZiB0aGlzLnVwZGF0ZWRBdD09XCJzdHJpbmdcIil7XHJcbiAgICAgICAgdGhpcy51cGRhdGVkQXQgPSBuZXcgRGF0ZSh0aGlzLnVwZGF0ZWRBdClcclxuICAgICAgfVxyXG4gICAgICBjb25zb2xlLmxvZyh0aGlzLnVwZGF0ZWRBdClcclxuICAgICAganNvbi51cGRhdGVkQXQgPSB7IF9fdHlwZTogJ0RhdGUnLCBpc286IHRoaXMudXBkYXRlZEF0LnRvSVNPU3RyaW5nKCkgfTtcclxuICAgIH1cclxuICB9Y2F0Y2goZXJyKXt9XHJcbiAgXHJcbiAgLy8gSGFuZGxlIEFDTFxyXG4gIGlmICh0aGlzLkFDTCkge1xyXG4gICAganNvbi5BQ0wgPSB0aGlzLkFDTDtcclxuICB9XHJcblxyXG4gIHJldHVybiBqc29uO1xyXG59XHJcblxyXG5cclxuICAvLyBNQVJLOiAtIOWxnuaAp+aTjeS9nFxyXG5cclxuICBzZXRBQ0woYWNsOiBBQ0wgfCBGbW9kZUFDTCk6IHRoaXMge1xyXG4gICAgdGhpcy5BQ0wgPSBhY2wgaW5zdGFuY2VvZiBGbW9kZUFDTCA/IGFjbC50b0pTT04oKSA6IGFjbDtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgZ2V0QUNMKCk6IEFDTCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5BQ0w7XHJcbiAgfVxyXG5cclxuICBnZXQoa2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgaWYodGhpcy5kYXRhW2tleV0/Ll9fdHlwZT09XCJEYXRlXCIpe1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLmRhdGFba2V5XT8uaXNvKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldO1xyXG4gIH1cclxuXHJcbiAgaXNvU3RyVG9EYXRlKHZhbHVlOmFueSl7XHJcbiAgICBpZih2YWx1ZT8uaW5kZXhPZj8uKFwiVFwiKT4tMSYmdmFsdWU/LmluZGV4T2Y/LihcIlpcIik+LTEmJnZhbHVlPy5sZW5ndGg9PTI0KXtcclxuICAgICAgdHJ5eyAgXHJcbiAgICAgICAgbGV0IHRpbWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgcmV0dXJuIHRpbWVcclxuICAgICAgfWNhdGNoKGVycil7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgc2V0KGtleTogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgYW55PiwgdmFsdWU/OiBhbnkpOiB0aGlzIHtcclxuXHJcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgT2JqZWN0LmtleXMoa2V5KS5mb3JFYWNoKGs9PntcclxuICAgICAgICBpZihrZXlba10/LmluZGV4T2Y/LihcIlRcIik+LTEmJmtleVtrXT8uaW5kZXhPZj8uKFwiWlwiKT4tMSl7XHJcbiAgICAgICAgICBrZXlba10gPSB0aGlzLmlzb1N0clRvRGF0ZShrZXlba10pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIGtleSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZih2YWx1ZSl7XHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLmlzb1N0clRvRGF0ZSh2YWx1ZSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICB1bnNldChrZXk6IHN0cmluZyk6IHRoaXMge1xyXG4gICAgZGVsZXRlIHRoaXMuZGF0YVtrZXldO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBpbmNyZW1lbnQoa2V5OiBzdHJpbmcsIGFtb3VudCA9IDEpOiB0aGlzIHtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmdldChrZXkpIHx8IDA7XHJcbiAgICB0aGlzLnNldChrZXksIGN1cnJlbnQgKyBhbW91bnQpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBhZGQoa2V5OiBzdHJpbmcsIGl0ZW1zOiBhbnlbXSk6IHRoaXMge1xyXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuZ2V0KGtleSkgfHwgW107XHJcbiAgICB0aGlzLnNldChrZXksIFsuLi5jdXJyZW50LCAuLi5pdGVtc10pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBhZGRVbmlxdWUoa2V5OiBzdHJpbmcsIGl0ZW1zOiBhbnlbXSk6IHRoaXMge1xyXG4gICAgY29uc3QgY3VycmVudCA9IG5ldyBTZXQodGhpcy5nZXQoa2V5KSB8fCBuZXcgU2V0KCkpO1xyXG4gICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IGN1cnJlbnQuYWRkKGl0ZW0pKTtcclxuICAgIHRoaXMuc2V0KGtleSwgQXJyYXkuZnJvbShjdXJyZW50KSk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIHJlbW92ZShrZXk6IHN0cmluZywgaXRlbXM6IGFueVtdKTogdGhpcyB7XHJcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5nZXQoa2V5KSB8fCBbXTtcclxuICAgIGNvbnN0IHRvUmVtb3ZlID0gbmV3IFNldChpdGVtcyk7XHJcbiAgICB0aGlzLnNldChrZXksIGN1cnJlbnQuZmlsdGVyKChpdGVtOiBhbnkpID0+ICF0b1JlbW92ZS5oYXMoaXRlbSkpKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gTUFSSzogLSBDUlVEIOaTjeS9nFxyXG5cclxuLy8gVXBkYXRlIHRoZSBzYXZlIG1ldGhvZCB0byB1c2UgdGhlIHByb3BlciB0b0pTT04gZm9ybWF0XHJcbmFzeW5jIHNhdmUob3B0aW9ucz86IHsgdXNlTWFzdGVyS2V5PzogYm9vbGVhbiB9KTogUHJvbWlzZTx0aGlzPiB7XHJcbiAgLy8g5LyY5YWI5L2/55So5a6e5L6L57qn5Yir55qEcGFyc2Xlrp7kvovvvIzlpoLmnpzmsqHmnInliJnkvb/nlKjpnZnmgIHlrp7kvotcclxuICBjb25zdCBwYXJzZUluc3RhbmNlID0gdGhpcy5fcGFyc2VJbnN0YW5jZSB8fCBGbW9kZU9iamVjdC5faW5zdGFuY2U7XHJcbiAgaWYgKCFwYXJzZUluc3RhbmNlKSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbml0aWFsaXplZCcpO1xyXG5cclxuICBjb25zdCBtZXRob2QgPSB0aGlzLmlkID8gJ1BVVCcgOiAnUE9TVCc7XHJcbiAgbGV0IHVybCA9IGAke3BhcnNlSW5zdGFuY2Uuc2VydmVyVVJMfS9jbGFzc2VzLyR7dGhpcy5jbGFzc05hbWV9YDtcclxuICBpZiAodGhpcy5pZCkgdXJsICs9IGAvJHt0aGlzLmlkfWA7XHJcblxyXG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiBwYXJzZUluc3RhbmNlLmFwcElkXHJcbiAgfTtcclxuXHJcbiAgaWYgKG9wdGlvbnM/LnVzZU1hc3RlcktleSAmJiBwYXJzZUluc3RhbmNlLmNvbmZpZy5tYXN0ZXJLZXkpIHtcclxuICAgIGhlYWRlcnNbJ1gtUGFyc2UtTWFzdGVyLUtleSddID0gcGFyc2VJbnN0YW5jZS5jb25maWcubWFzdGVyS2V5O1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyBBZGQgc2Vzc2lvbiB0b2tlbiBpZiBhdmFpbGFibGUgYW5kIG5vdCB1c2luZyBtYXN0ZXIga2V5XHJcbiAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSBwYXJzZUluc3RhbmNlLnNlc3Npb25Ub2tlbjtcclxuICAgIGlmIChzZXNzaW9uVG9rZW4pIHtcclxuICAgICAgaGVhZGVyc1snWC1QYXJzZS1TZXNzaW9uLVRva2VuJ10gPSBzZXNzaW9uVG9rZW47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBHZXQgY2xlYW4gSlNPTiByZXByZXNlbnRhdGlvblxyXG4gIGNvbnN0IGRhdGEgPSB0aGlzLnRvSlNPTigpO1xyXG4gIGRlbGV0ZSBkYXRhLmNyZWF0ZWRBdDsgLy8gVGhlc2UgYXJlIGhhbmRsZWQgYnkgc2VydmVyXHJcbiAgZGVsZXRlIGRhdGEudXBkYXRlZEF0O1xyXG4gIGRlbGV0ZSBkYXRhLl9fdHlwZTtcclxuICBkZWxldGUgZGF0YS5jbGFzc05hbWU7XHJcblxyXG4gIC8vIENvbnZlcnQgYW55IG5lc3RlZCBGbW9kZU9iamVjdHMgdG8gcG9pbnRlcnNcclxuICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XHJcbiAgICBpZiAodGhpcy5nZXQoa2V5KT8udG9Qb2ludGVyKSB7XHJcbiAgICAgIGRhdGFba2V5XSA9IHRoaXMuZ2V0KGtleSkudG9Qb2ludGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGxldCByZXN1bHQ6YW55XHJcbiAgbGV0IHJlc3BvbnNlOmFueVxyXG5cclxuICBjb25zb2xlLmxvZyh1cmwsZGF0YSlcclxuICB0cnl7XHJcbiAgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcclxuICAgIG1ldGhvZCxcclxuICAgIGhlYWRlcnMsXHJcbiAgICBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKVxyXG4gIH0pO1xyXG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGRhdGEpKVxyXG4gIHJlc3VsdCA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcclxuICB9Y2F0Y2goZXJyKXtcclxuICAgIGFsZXJ0KGVycik7XHJcbiAgfVxyXG4gIGNvbnNvbGUubG9nKHJlc3VsdClcclxuICBpZiAocmVzdWx0LmVycm9yKSB0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yKTtcclxuXHJcbiAgdGhpcy5pZCA9IHJlc3VsdC5vYmplY3RJZCB8fCB0aGlzLmlkO1xyXG4gIHRoaXMuY3JlYXRlZEF0ID0gbmV3IERhdGUocmVzdWx0LmNyZWF0ZWRBdCB8fCB0aGlzLmNyZWF0ZWRBdCk7XHJcbiAgdGhpcy51cGRhdGVkQXQgPSBuZXcgRGF0ZShyZXN1bHQudXBkYXRlZEF0IHx8IHRoaXMudXBkYXRlZEF0KTtcclxuICByZXR1cm4gdGhpcztcclxufVxyXG4gIGFzeW5jIGRlc3Ryb3kob3B0aW9ucz86IHsgdXNlTWFzdGVyS2V5PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIXRoaXMuaWQpIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGRlc3Ryb3kgdW5zYXZlZCBvYmplY3QnKTtcclxuXHJcbiAgICAvLyDkvJjlhYjkvb/nlKjlrp7kvovnuqfliKvnmoRwYXJzZeWunuS+i++8jOWmguaenOayoeacieWImeS9v+eUqOmdmeaAgeWunuS+i1xyXG4gICAgY29uc3QgcGFyc2VJbnN0YW5jZSA9IHRoaXMuX3BhcnNlSW5zdGFuY2UgfHwgRm1vZGVPYmplY3QuX2luc3RhbmNlO1xyXG4gICAgaWYgKCFwYXJzZUluc3RhbmNlKSB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbml0aWFsaXplZCcpO1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgICdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJzogcGFyc2VJbnN0YW5jZS5hcHBJZFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAob3B0aW9ucz8udXNlTWFzdGVyS2V5ICYmIHBhcnNlSW5zdGFuY2UuY29uZmlnLm1hc3RlcktleSkge1xyXG4gICAgICBoZWFkZXJzWydYLVBhcnNlLU1hc3Rlci1LZXknXSA9IHBhcnNlSW5zdGFuY2UuY29uZmlnLm1hc3RlcktleTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEFkZCBzZXNzaW9uIHRva2VuIGlmIGF2YWlsYWJsZSBhbmQgbm90IHVzaW5nIG1hc3RlciBrZXlcclxuICAgICAgY29uc3Qgc2Vzc2lvblRva2VuID0gcGFyc2VJbnN0YW5jZS5zZXNzaW9uVG9rZW47XHJcbiAgICAgIGlmIChzZXNzaW9uVG9rZW4pIHtcclxuICAgICAgICBoZWFkZXJzWydYLVBhcnNlLVNlc3Npb24tVG9rZW4nXSA9IHNlc3Npb25Ub2tlbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVybCA9IGAke3BhcnNlSW5zdGFuY2Uuc2VydmVyVVJMfS9jbGFzc2VzLyR7dGhpcy5jbGFzc05hbWV9LyR7dGhpcy5pZH1gO1xyXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcclxuICAgICAgbWV0aG9kOiAnREVMRVRFJyxcclxuICAgICAgaGVhZGVyc1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihyZXN1bHQuZXJyb3IgfHwgJ0ZhaWxlZCB0byBkZWxldGUgb2JqZWN0Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNQVJLOiAtIOmdmeaAgeaWueazlVxyXG5cclxuICBzdGF0aWMgYXN5bmMgY3JlYXRlPFQgZXh0ZW5kcyBGbW9kZU9iamVjdD4oXHJcbiAgICBjbGFzc05hbWU6IHN0cmluZyxcclxuICAgIGF0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcbiAgICBvcHRpb25zPzogeyB1c2VNYXN0ZXJLZXk/OiBib29sZWFuIH1cclxuICApOiBQcm9taXNlPFQ+IHtcclxuICAgIGNvbnN0IG9iaiA9IG5ldyB0aGlzKGNsYXNzTmFtZSkgYXMgVDtcclxuICAgIG9iai5zZXQoYXR0cmlidXRlcyk7XHJcbiAgICByZXR1cm4gb2JqLnNhdmUob3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgYXN5bmMgZmV0Y2hBbGw8VCBleHRlbmRzIEZtb2RlT2JqZWN0PihcclxuICAgIG9iamVjdHM6IFRbXSxcclxuICAgIG9wdGlvbnM/OiB7IHVzZU1hc3RlcktleT86IGJvb2xlYW4gfVxyXG4gICk6IFByb21pc2U8VFtdPiB7XHJcbiAgICBpZiAoIUZtb2RlT2JqZWN0Ll9pbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW5pdGlhbGl6ZWQnKTtcclxuICAgIGlmIChvYmplY3RzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xyXG5cclxuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJzogRm1vZGVPYmplY3QuX2luc3RhbmNlLmFwcElkXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChvcHRpb25zPy51c2VNYXN0ZXJLZXkgJiYgRm1vZGVPYmplY3QuX2luc3RhbmNlLmNvbmZpZy5tYXN0ZXJLZXkpIHtcclxuICAgICAgaGVhZGVyc1snWC1QYXJzZS1NYXN0ZXItS2V5J10gPSBGbW9kZU9iamVjdC5faW5zdGFuY2UuY29uZmlnLm1hc3RlcktleTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIEFkZCBzZXNzaW9uIHRva2VuIGlmIGF2YWlsYWJsZSBhbmQgbm90IHVzaW5nIG1hc3RlciBrZXlcclxuICAgICAgY29uc3Qgc2Vzc2lvblRva2VuID0gRm1vZGVPYmplY3QuX2luc3RhbmNlLnNlc3Npb25Ub2tlbjtcclxuICAgICAgaWYgKHNlc3Npb25Ub2tlbikge1xyXG4gICAgICAgIGhlYWRlcnNbJ1gtUGFyc2UtU2Vzc2lvbi1Ub2tlbiddID0gc2Vzc2lvblRva2VuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdXJsID0gYCR7Rm1vZGVPYmplY3QuX2luc3RhbmNlLnNlcnZlclVSTH0vYmF0Y2hgO1xyXG4gICAgY29uc3QgcmVxdWVzdHMgPSBvYmplY3RzLm1hcChvYmogPT4gKHtcclxuICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgcGF0aDogYC9jbGFzc2VzLyR7b2JqLmNsYXNzTmFtZX0vJHtvYmouaWR9YFxyXG4gICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICBoZWFkZXJzLFxyXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IHJlcXVlc3RzIH0pXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgaWYgKHJlc3VsdHMuZXJyb3IpIHRocm93IG5ldyBFcnJvcihyZXN1bHRzLmVycm9yKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0cy5tYXAoKHJlc3VsdDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iaiA9IG9iamVjdHNbaW5kZXhdO1xyXG4gICAgICBvYmouc2V0KHJlc3VsdC5zdWNjZXNzKTtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gTUFSSzogLSDlhbPns7vmk43kvZxcclxuXHJcbiAgcmVsYXRpb248VCBleHRlbmRzIEZtb2RlT2JqZWN0PihrZXk6IHN0cmluZyk6IEZtb2RlUmVsYXRpb248VD4ge1xyXG4gICAgcmV0dXJuIG5ldyBGbW9kZVJlbGF0aW9uPFQ+KHRoaXMsIGtleSk7XHJcbiAgfVxyXG5cclxuICAvLyBNQVJLOiAtIOaWh+S7tuWkhOeQhlxyXG5cclxuICBzdGF0aWMgYXN5bmMgZnJvbUZpbGUoXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBkYXRhOiBCbG9iIHwgRmlsZSB8IGFueSxcclxuICAgIF90eXBlPzogc3RyaW5nXHJcbiAgKTogUHJvbWlzZTxGaWxlPiB7XHJcbiAgICBpZiAoIUZtb2RlT2JqZWN0Ll9pbnN0YW5jZSkgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW5pdGlhbGl6ZWQnKTtcclxuXHJcbiAgICBjb25zdCBmaWxlRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZmlsZURhdGEuYXBwZW5kKCdmaWxlJywgZGF0YSwgbmFtZSk7XHJcblxyXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgICAgJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnOiBGbW9kZU9iamVjdC5faW5zdGFuY2UuYXBwSWRcclxuICAgIH07XHJcblxyXG4gICAgLy8gQWRkIHNlc3Npb24gdG9rZW4gaWYgYXZhaWxhYmxlXHJcbiAgICBjb25zdCBzZXNzaW9uVG9rZW4gPSBGbW9kZU9iamVjdC5faW5zdGFuY2Uuc2Vzc2lvblRva2VuO1xyXG4gICAgaWYgKHNlc3Npb25Ub2tlbikge1xyXG4gICAgICBoZWFkZXJzWydYLVBhcnNlLVNlc3Npb24tVG9rZW4nXSA9IHNlc3Npb25Ub2tlbjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cmwgPSBgJHtGbW9kZU9iamVjdC5faW5zdGFuY2Uuc2VydmVyVVJMfS9maWxlcy8ke25hbWV9YDtcclxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICBoZWFkZXJzLFxyXG4gICAgICBib2R5OiBmaWxlRGF0YVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xyXG4gICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5lcnJvcik7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgX190eXBlOiAnRmlsZScsXHJcbiAgICAgIG5hbWU6IHJlc3VsdC5uYW1lLFxyXG4gICAgICB1cmw6IHJlc3VsdC51cmxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG4vLyDmt7vliqDpnZnmgIHmlrnms5XliLDnsbvkuIpcclxuLy8gRm1vZGVPYmplY3QucmVnaXN0ZXJTdWJjbGFzcyA9IGZ1bmN0aW9uKGNsYXNzTmFtZTogc3RyaW5nLCBjbGF6ejogdHlwZW9mIEZtb2RlT2JqZWN0KSB7XHJcbi8vICAgLy8g5a2Q57G75rOo5YaM6YC76L6RXHJcbi8vIH07Il19