@colijnit/homedecorator 258.1.1 → 258.1.2

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 (92) hide show
  1. package/app/core/enum/icon.enum.d.ts +1 -0
  2. package/app/core/enum/message-type.enum.d.ts +2 -1
  3. package/app/core/interface/message-with-payload.interface.d.ts +1 -0
  4. package/app/core/model/homedecorator-settings-options.d.ts +1 -1
  5. package/app/core/model/homedecorator-settings.d.ts +3 -0
  6. package/app/core/service/3dm-api.d.ts +2 -2
  7. package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
  8. package/app/core/service/homedecorator-connector-adapter.service.d.ts +9 -1
  9. package/app/core/service/homedecorator-connector.service.d.ts +15 -2
  10. package/app/core/service/utils.service.d.ts +1 -1
  11. package/app/core/utils/object.utils.d.ts +2 -0
  12. package/app/homedecorator.module.d.ts +2 -1
  13. package/app/plugins/core3d/service/wall-measurements.service.d.ts +2 -0
  14. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +3 -0
  15. package/app/plugins/product-catalog/product-catalog/product-catalog.component.d.ts +2 -0
  16. package/app/plugins/product-configurator/product-configurator-selector-list-of-values.component.scss +28 -0
  17. package/app/plugins/product-configurator/product-configurator-selector-option-button.component.d.ts +19 -0
  18. package/app/plugins/product-configurator/product-configurator-selector-option-button.component.scss +38 -0
  19. package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.d.ts +20 -0
  20. package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.scss +0 -0
  21. package/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.d.ts +19 -0
  22. package/app/plugins/product-configurator/product-configurator-selector-option-tile.component.scss +56 -0
  23. package/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.d.ts +20 -0
  24. package/app/plugins/product-configurator/product-configurator-selector.component.d.ts +26 -0
  25. package/app/plugins/product-configurator/product-configurator-selector.component.scss +46 -0
  26. package/app/plugins/product-configurator/product-configurator.component.d.ts +38 -0
  27. package/app/plugins/product-configurator/product-configurator.component.scss +35 -0
  28. package/app/plugins/product-configurator/product-configurator.module.d.ts +18 -0
  29. package/app/plugins/product-configurator/template_variables.scss +13 -0
  30. package/app/plugins/render/model/blender-render-settings.d.ts +10 -0
  31. package/app/plugins/render/model/blender-scene-settings.d.ts +18 -0
  32. package/app/plugins/render/render-controls/render-controls.component.d.ts +19 -7
  33. package/app/plugins/render/service/new-render.service.d.ts +21 -4
  34. package/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.scss +1 -1
  35. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +5 -0
  36. package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +4 -0
  37. package/app/plugins/threedselector/threedselector/threedselector.component.scss +17 -0
  38. package/app/plugins/threedselector/threedselector.module.d.ts +2 -1
  39. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
  40. package/assets/icons/circle_regular.svg +0 -0
  41. package/bundles/colijnit-homedecorator.umd.js +1986 -835
  42. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  43. package/esm2015/app/app.version.js +3 -3
  44. package/esm2015/app/core/enum/icon.enum.js +2 -1
  45. package/esm2015/app/core/enum/message-type.enum.js +2 -1
  46. package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
  47. package/esm2015/app/core/model/homedecorator-settings-options.js +2 -2
  48. package/esm2015/app/core/model/homedecorator-settings.js +3 -1
  49. package/esm2015/app/core/model/icon.js +2 -1
  50. package/esm2015/app/core/service/3dm-api.js +15 -22
  51. package/esm2015/app/core/service/homedecorator-app-event.service.js +3 -2
  52. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +65 -7
  53. package/esm2015/app/core/service/homedecorator-connector.service.js +150 -6
  54. package/esm2015/app/core/service/homedecorator-settings.service.js +8 -1
  55. package/esm2015/app/core/service/utils.service.js +116 -93
  56. package/esm2015/app/core/utils/object.utils.js +13 -1
  57. package/esm2015/app/homedecorator.component.js +1 -2
  58. package/esm2015/app/homedecorator.module.js +8 -4
  59. package/esm2015/app/plugins/core3d/core3d/core3d.component.js +2 -2
  60. package/esm2015/app/plugins/core3d/service/wall-measurements.service.js +7 -1
  61. package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +98 -50
  62. package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +4 -4
  63. package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +21 -11
  64. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-button.component.js +67 -0
  65. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.js +57 -0
  66. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.js +75 -0
  67. package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.js +90 -0
  68. package/esm2015/app/plugins/product-configurator/product-configurator-selector.component.js +253 -0
  69. package/esm2015/app/plugins/product-configurator/product-configurator.component.js +151 -0
  70. package/esm2015/app/plugins/product-configurator/product-configurator.module.js +115 -0
  71. package/esm2015/app/plugins/render/model/blender-render-settings.js +3 -0
  72. package/esm2015/app/plugins/render/model/blender-scene-settings.js +10 -0
  73. package/esm2015/app/plugins/render/model/render-parameters.js +3 -3
  74. package/esm2015/app/plugins/render/render-controls/render-controls.component.js +532 -446
  75. package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +6 -40
  76. package/esm2015/app/plugins/render/service/new-render.service.js +212 -44
  77. package/esm2015/app/plugins/render/service/render.service.js +6 -9
  78. package/esm2015/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.js +1 -1
  79. package/esm2015/app/plugins/room-planner/components/texture-picker/texture-picker.component.js +1 -1
  80. package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +12 -10
  81. package/esm2015/app/plugins/threedselector/element-buttons/element-buttons.component.js +2 -2
  82. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +55 -1
  83. package/esm2015/app/plugins/threedselector/threedselector/service/load-furniture.service.js +3 -3
  84. package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +64 -15
  85. package/esm2015/app/plugins/threedselector/threedselector/utils/asset.utils.js +1 -1
  86. package/esm2015/app/plugins/threedselector/threedselector.module.js +8 -4
  87. package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +1 -1
  88. package/esm2015/app/shared/category-library/category-library.component.js +1 -1
  89. package/fesm2015/colijnit-homedecorator.js +2522 -1149
  90. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  91. package/package.json +4 -4
  92. package/styles.scss +1 -1
@@ -62,11 +62,10 @@ export class RenderService {
62
62
  this.renders = [];
63
63
  this.cameraPositions = [];
64
64
  this.imageSizes = [
65
- // {id: 1, name: 'Small', width: 400, height: 300},
66
- { id: 2, name: ' 720p (HD)', width: 1280, height: 720 },
67
- { id: 3, name: '1080P (HD)', width: 1920, height: 1080 },
65
+ { id: 1, name: ' 720p (HD)', width: 1280, height: 720 },
66
+ { id: 2, name: '1080P (HD)', width: 1920, height: 1080 },
68
67
  { id: 3, name: '1440p (2K)', width: 2560, height: 1440 },
69
- { id: 5, name: '2160p (4K)', width: 4096, height: 2160 }
68
+ { id: 4, name: '2160p (4K)', width: 4096, height: 2160 }
70
69
  ];
71
70
  this.lightnings = [
72
71
  { id: 1, name: 'Light', settings: [] },
@@ -98,7 +97,7 @@ export class RenderService {
98
97
  { id: 5, name: 'scene_01', sceneAssetId: 'scene_01' }
99
98
  ];
100
99
  this._ceilingLightMargin = 0.5;
101
- this.selectedImageSize = 3;
100
+ this.selectedImageSize = 2;
102
101
  this.selectedEnvironment = 1;
103
102
  this.selectedRenderScene = this.renderScenes[0].sceneAssetId;
104
103
  this.blendFilesRender = this._settingsService.settings.blendFilesRender;
@@ -114,16 +113,14 @@ export class RenderService {
114
113
  this.sceneData = {};
115
114
  this._subs.push(this._settingsService.settingsLoaded.subscribe((loaded) => {
116
115
  if (loaded) {
117
- // if (!this._settingsService.settings.options.useNewRender) {
118
116
  this.serverData = this._settingsService.settings.renderParameters;
119
117
  if (this.serverData) {
120
118
  this.serverData.setup = false;
121
119
  this.checkConnection();
122
120
  this._renderServiceHeartBeat();
123
121
  }
124
- // }
125
122
  }
126
- }), this._buildFurnitureService.buildFinished.subscribe((result) => this._checkVisibleUpdates(result.furniture ? result.furniture : null)));
123
+ }));
127
124
  }
128
125
  static MakeWindowMaterialTransparent(material) {
129
126
  // console.log(material);
@@ -657,4 +654,4 @@ RenderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", versio
657
654
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RenderService, decorators: [{
658
655
  type: Injectable
659
656
  }], ctorParameters: function () { return [{ type: i1.HomedecoratorSettingsService }, { type: i2.BuildFurnitureService }, { type: i3.ExportService }, { type: i4.CameraService }, { type: i5.SceneService }, { type: i6.HomedecoratorConnectorService }, { type: i7.HomedecoratorConnectorAdapterService }, { type: i8.ThreedselectorService }, { type: i9.ToastService }, { type: i10.MessageBusService }, { type: i11.GoogleTagManagerService }, { type: i12.RoomService }, { type: i13.FloorService }, { type: i14.LoadFurnitureService }]; } });
660
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3JlbmRlci9zZXJ2aWNlL3JlbmRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFZLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDOUcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRXZFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQU0zRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFnQjNELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFckUs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LEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDeEMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksZUFBZSxFQUFFO2dCQUMxQyxPQUF3QixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckM7WUFDRCxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxTQUFTLEVBQUU7Z0JBQ3BDLE1BQU0sU0FBUyxHQUFjLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzlCLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7d0JBQ3BDLElBQUksSUFBSSxZQUFZLGVBQWUsRUFBRTs0QkFDbkMsT0FBTyxJQUFJLENBQUM7eUJBQ2I7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sMkJBQTJCO1FBRWpDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBRTVELElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLG1DQUFtQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7OzJHQTdyQlUsYUFBYTsrR0FBYixhQUFhOzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0JveDMsIERpcmVjdGlvbmFsTGlnaHQsIE1hdGVyaWFsLCBNZXNoLCBNZXNoUGhvbmdNYXRlcmlhbCwgT2JqZWN0M0QsIFNwb3RMaWdodCwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0dMVEZFeHBvcnRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2V4cG9ydGVycy9HTFRGRXhwb3J0ZXInO1xyXG5pbXBvcnQge1NjZW5lfSBmcm9tICd0aHJlZS9zcmMvc2NlbmVzL1NjZW5lJztcclxuaW1wb3J0IHtSZW5kZXJNb2Rlc30gZnJvbSAnLi4vZW51bS9yZW5kZXItbW9kZXMnO1xyXG5pbXBvcnQge0Nvbm5lY3Rpb25TdGF0dXN9IGZyb20gJy4uL2VudW0vY29ubmVjdGlvbi1zdGF0dXMnO1xyXG5pbXBvcnQge1JlbmRlcn0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyJztcclxuaW1wb3J0IHtDYW1lcmFQb3NpdGlvbn0gZnJvbSAnLi4vbW9kZWwvY2FtZXJhLXBvc2l0aW9uJztcclxuaW1wb3J0IHtJbWFnZVNpemV9IGZyb20gJy4uL21vZGVsL2ltYWdlLXNpemUnO1xyXG5pbXBvcnQge0xpZ2h0bmluZ30gZnJvbSAnLi4vbW9kZWwvbGlnaHRuaW5nJztcclxuaW1wb3J0IHtSZW5kZXJFbnZpcm9ubWVudH0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyLWVudmlyb25tZW50JztcclxuaW1wb3J0IHtSZW5kZXJRdWV1ZUl0ZW19IGZyb20gJy4uL21vZGVsL3JlbmRlci1xdWV1ZS1pdGVtJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdWlsZEZ1cm5pdHVyZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvYnVpbGQtZnVybml0dXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0V4cG9ydFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci1hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RocmVlZHNlbGVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vdGhyZWVkc2VsZWN0b3IvdGhyZWVkc2VsZWN0b3Ivc2VydmljZS90aHJlZWRzZWxlY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtUb2FzdFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2dvb2dsZS10YWctbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtSb29tU2VydmljZX0gZnJvbSAnLi4vLi4vcm9vbS1wbGFubmVyL2NvbXBvbmVudHMvZmxvb3JwbGFubmVyL3NlcnZpY2Uvcm9vbS5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvYWRGdXJuaXR1cmVTZXJ2aWNlfSBmcm9tICcuLi8uLi90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci9zZXJ2aWNlL2xvYWQtZnVybml0dXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0N1c3RvbUZsb29yR3JvdXBSZXN1bHR9IGZyb20gJy4uLy4uL2NvcmUzZC9tb2RlbC9jdXN0b20tZmxvb3ItZ3JvdXAtcmVzdWx0JztcclxuaW1wb3J0IHtUb2FzdH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90b2FzdCc7XHJcbmltcG9ydCB7VG9hc3RUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3RvYXN0LXR5cGUnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1JlbmRlckRhdGF9IGZyb20gJy4uL21vZGVsL3JlbmRlci1kYXRhJztcclxuaW1wb3J0IHtSZW5kZXJTZXR0aW5nc30gZnJvbSAnLi4vbW9kZWwvcmVuZGVyLXNldHRpbmdzJztcclxuaW1wb3J0IHtGaWxlVXRpbHN9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvZmlsZS51dGlscyc7XHJcbmltcG9ydCB7UmVuZGVyU3RhdHVzfSBmcm9tICcuLi9lbnVtL3JlbmRlci1zdGF0dXMnO1xyXG5pbXBvcnQge0N1c3RvbUZsb29ySXRlbX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1mbG9vci1pdGVtJztcclxuaW1wb3J0IHtJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvaXRlbSc7XHJcbmltcG9ydCB7SXRlbUdyb3VwfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvaXRlbS1ncm91cCc7XHJcbmltcG9ydCB7RXhwb3J0T2JqZWN0fSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL2V4cG9ydC1vYmplY3QnO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJFdmVudH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2dvb2dsZS10YWctbWFuYWdlci1ldmVudC5lbnVtJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFJlbmRlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgcmVhZG9ubHkgcmVuZGVyTW9kZXMgPSBSZW5kZXJNb2RlcztcclxuXHJcbiAgcHVibGljIHNlcnZpY2U6IGFueTtcclxuXHJcbiAgcHVibGljIHNlcnZlckRhdGE6IGFueTtcclxuICBwdWJsaWMgc2NlbmVEYXRhOiBhbnk7XHJcbiAgcHVibGljIHByZXZJdGVtOiBhbnk7XHJcblxyXG4gIHB1YmxpYyBzdHJlYW1pbmc6IGFueSA9IHt9O1xyXG5cclxuICBwdWJsaWMgcmVuZGVyZWRSb29tSW1hZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgY29ubmVjdGlvblN0YXR1czogQ29ubmVjdGlvblN0YXR1cyA9IENvbm5lY3Rpb25TdGF0dXMuSXNVbmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyByZW5kZXJzOiBSZW5kZXJbXSA9IFtdO1xyXG4gIHB1YmxpYyBjYW1lcmFQb3NpdGlvbnM6IENhbWVyYVBvc2l0aW9uW10gPSBbXTtcclxuICBwdWJsaWMgaW1hZ2VTaXplczogSW1hZ2VTaXplW10gPSBbXHJcbiAgICAvLyB7aWQ6IDEsIG5hbWU6ICdTbWFsbCcsIHdpZHRoOiA0MDAsIGhlaWdodDogMzAwfSxcclxuICAgIHtpZDogMiwgbmFtZTogJyA3MjBwIChIRCknLCB3aWR0aDogMTI4MCwgaGVpZ2h0OiA3MjB9LFxyXG4gICAge2lkOiAzLCBuYW1lOiAnMTA4MFAgKEhEKScsIHdpZHRoOiAxOTIwLCBoZWlnaHQ6IDEwODB9LFxyXG4gICAge2lkOiAzLCBuYW1lOiAnMTQ0MHAgKDJLKScsIHdpZHRoOiAyNTYwLCBoZWlnaHQ6IDE0NDB9LFxyXG4gICAge2lkOiA1LCBuYW1lOiAnMjE2MHAgKDRLKScsIHdpZHRoOiA0MDk2LCBoZWlnaHQ6IDIxNjB9XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIGxpZ2h0bmluZ3M6IExpZ2h0bmluZ1tdID0gW1xyXG4gICAge2lkOiAxLCBuYW1lOiAnTGlnaHQnLCBzZXR0aW5nczogW119LFxyXG4gICAge2lkOiAyLCBuYW1lOiAnTWVkaXVtJywgc2V0dGluZ3M6IFtdfSxcclxuICAgIHtpZDogMywgbmFtZTogJ0hlYXknLCBzZXR0aW5nczogW119XHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHJlbmRlckVudmlyb25tZW50czogUmVuZGVyRW52aXJvbm1lbnRbXSA9IFtcclxuICAgIHtpZDogMSwgbmFtZTogJ05vbmUnLCBoZHJGaWxlOiAnJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiAyLCBuYW1lOiAnTW9kZXJuIGNpdHknLCBoZHJGaWxlOiAnY2FuYXJ5X3doYXJmXzJrLmhkcicsIGludGVuc2l0eTogMi41fSxcclxuICAgIHtpZDogMywgbmFtZTogJ0NpdHkgcGFyaycsIGhkckZpbGU6ICdkcmVzZGVuX21vYXRfMmsuaGRyJywgaW50ZW5zaXR5OiAyLjV9LFxyXG4gICAge2lkOiA0LCBuYW1lOiAnTmlnaHQgaW4gdGhlIGNpdHknLCBoZHJGaWxlOiAnaGFuc2FwbGF0el8yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDUsIG5hbWU6ICdOaWdodCBpbiB0aGUgY291bnRyeXNpZGUnLCBoZHJGaWxlOiAna2xvcHBlbmhlaW1fMDJfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiA2LCBuYW1lOiAnRm9yZXN0JywgaGRyRmlsZTogJ25hZ295YV93YWxsX3BhdGhfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiA3LCBuYW1lOiAnU25vdycsIGhkckZpbGU6ICdzbm93eV9mb3Jlc3RfcGF0aF8wMV8yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDgsIG5hbWU6ICdQYXN0dXJlJywgaGRyRmlsZTogJ3NwcnVpdF9zdW5yaXNlXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogOSwgbmFtZTogJ0ZpZWxkJywgaGRyRmlsZTogJ3N1bmZsb3dlcnNfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiAxMCwgbmFtZTogJ09sZCBjaXR5IGFuZCBjYW5hbHMnLCBoZHJGaWxlOiAndGVhcnNfb2Zfc3RlZWxfYnJpZGdlXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogMTEsIG5hbWU6ICdFc3RhdGUnLCBoZHJGaWxlOiAndGllcmdhcnRlbl8yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDEyLCBuYW1lOiAnQmVhY2gnLCBoZHJGaWxlOiAndW1obGFuZ2Ffc3VucmlzZV8yay5oZHInLCBpbnRlbnNpdHk6IDIuNX0sXHJcbiAgICB7aWQ6IDEzLCBuYW1lOiAnUmVzaWRlbnRpYWwgYXJlYSB3aXRoIHBhcmsnLCBoZHJGaWxlOiAndXJiYW5fc3RyZWV0XzAxXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogMTQsIG5hbWU6ICdSZXNpZGVudGlhbCBhcmVhJywgaGRyRmlsZTogJ3VyYmFuX3N0cmVldF8wM18yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHJlbmRlclNjZW5lczogYW55ID0gW1xyXG4gICAge2lkOiAxLCBuYW1lOiAnc2NlbmVfZ3Jhc3NfY3ljbGVzX01SUCcsIHNjZW5lQXNzZXRJZDogJ3NjZW5lX2dyYXNzX2N5Y2xlc19NUlAnfSxcclxuICAgIHtpZDogMiwgbmFtZTogJ3NjZW5lX2xha2VfY3ljbGVzX01SUCcsIHNjZW5lQXNzZXRJZDogJ3NjZW5lX2xha2VfY3ljbGVzX01SUCd9LFxyXG4gICAge2lkOiAzLCBuYW1lOiAnc2NlbmVfc2t5X2N5Y2xlc19NUlAnLCBzY2VuZUFzc2V0SWQ6ICdzY2VuZV9za3lfY3ljbGVzX01SUCd9LFxyXG4gICAge2lkOiA0LCBuYW1lOiAnc2NlbmVfZ2FyZGVuX2N5Y2xlc19NUlAnLCBzY2VuZUFzc2V0SWQ6ICdzY2VuZV9nYXJkZW5fY3ljbGVzX01SUCd9LFxyXG4gICAge2lkOiA1LCBuYW1lOiAnc2NlbmVfbmF0dXJlX2N5Y2xlc19NUlAnLCBzY2VuZUFzc2V0SWQ6ICdzY2VuZV9uYXR1cmVfY3ljbGVzX01SUCd9LFxyXG4gICAge2lkOiA1LCBuYW1lOiAnc2NlbmVfMDEnLCBzY2VuZUFzc2V0SWQ6ICdzY2VuZV8wMSd9XHJcbiAgXTtcclxuXHJcblxyXG4gIHByaXZhdGUgX2NlaWxpbmdMaWdodE1hcmdpbjogbnVtYmVyID0gMC41O1xyXG5cclxuICBwdWJsaWMgc2VsZWN0ZWRJbWFnZVNpemU6IG51bWJlciA9IDM7XHJcbiAgcHVibGljIHNlbGVjdGVkRW52aXJvbm1lbnQ6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIHNlbGVjdGVkUmVuZGVyU2NlbmU6IHN0cmluZyA9IHRoaXMucmVuZGVyU2NlbmVzWzBdLnNjZW5lQXNzZXRJZDtcclxuXHJcbiAgcHVibGljIGJsZW5kRmlsZXNSZW5kZXI6IGJvb2xlYW4gPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYmxlbmRGaWxlc1JlbmRlcjtcclxuXHJcbiAgcHVibGljIHBvc2l0aW9uczogbnVtYmVyID0gMTtcclxuICBwdWJsaWMgc2F2ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgcmVuZGVyUm9vbUltYWdlQ2hhbmdlZDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcclxuICBwdWJsaWMgcmVuZGVyaW5nU3RhcnRlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgcHVibGljIHJlbmRlckltYWdlQ2hhbmdlZDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcclxuXHJcbiAgcHVibGljIHJlbmRlclF1ZXVlOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBjdXJyZW50UXVldWVSZW5kZXJJdGVtOiBSZW5kZXJRdWV1ZUl0ZW0gPSBuZXcgUmVuZGVyUXVldWVJdGVtKCk7XHJcbiAgcHVibGljIGN1cnJlbnRQcm9kdWN0SGFzaDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIHN0YW5kQWxvbmVDYW1lcmFNYXRyaXg6IG51bWJlcltdO1xyXG5cclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgc3RhdGljIE1ha2VXaW5kb3dNYXRlcmlhbFRyYW5zcGFyZW50KG1hdGVyaWFsOiBNYXRlcmlhbCk6IE1hdGVyaWFsIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKG1hdGVyaWFsKTtcclxuICAgIG1hdGVyaWFsLnRyYW5zcGFyZW50ID0gdHJ1ZTtcclxuICAgIG1hdGVyaWFsLm9wYWNpdHkgPSBNYXRoLm1pbihtYXRlcmlhbC5vcGFjaXR5LCAwLjQpO1xyXG4gICAgcmV0dXJuIG1hdGVyaWFsO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9idWlsZEZ1cm5pdHVyZVNlcnZpY2U6IEJ1aWxkRnVybml0dXJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2V4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pb25lOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2lvbmVDb25uZWN0b3JBZGFwdGVyOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90aHJlZWRTZWxlY3RvclNlcnZpY2U6IFRocmVlZHNlbGVjdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1c1NlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZ29vZ2xlVGFnTWFuYWdlcjogR29vZ2xlVGFnTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9yb29tU2VydmljZTogUm9vbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vclNlcnZpY2U6IEZsb29yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2xvYWRGdXJuaXR1cmVTZXJ2aWNlOiBMb2FkRnVybml0dXJlU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5zY2VuZURhdGEgPSB7fTtcclxuXHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5nc0xvYWRlZC5zdWJzY3JpYmUoKGxvYWRlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChsb2FkZWQpIHtcclxuICAgICAgICAgIC8vIGlmICghdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMudXNlTmV3UmVuZGVyKSB7XHJcbiAgICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MucmVuZGVyUGFyYW1ldGVycztcclxuICAgICAgICAgIGlmICh0aGlzLnNlcnZlckRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhLnNldHVwID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlclNlcnZpY2VIZWFydEJlYXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9idWlsZEZ1cm5pdHVyZVNlcnZpY2UuYnVpbGRGaW5pc2hlZC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHJlc3VsdDogQ3VzdG9tRmxvb3JHcm91cFJlc3VsdCkgPT4gdGhpcy5fY2hlY2tWaXNpYmxlVXBkYXRlcyhyZXN1bHQuZnVybml0dXJlID8gcmVzdWx0LmZ1cm5pdHVyZSA6IG51bGwpXHJcbiAgICAgIClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgY2hlY2tDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy9cclxuICAgIC8vIGlmICh0aGlzLnNlcnZpY2UudmFsaWRhdGUoKSA9PT0gZmFsc2UpIHtcclxuICAgIC8vXHJcbiAgICAvLyAgIHRyeSB7XHJcbiAgICAvL1xyXG4gICAgLy8gICAgIGNvbnN0IHVybCA9IGAkeyh0aGlzLnNlcnZlckRhdGEuc2VjdXJlID8gJ3dzcycgOiAnd3MnKX06Ly8ke3RoaXMuc2VydmVyRGF0YS5ob3N0fToke3RoaXMuc2VydmVyRGF0YS5wb3J0fS9zZXJ2aWNlL2A7XHJcbiAgICAvLyAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLmNvbm5lY3QodXJsKS50aGVuKCgpID0+IHtcclxuICAgIC8vICAgICAgIHRoaXMuc2VydmVyRGF0YS5zZXR1cCA9IHRydWU7XHJcbiAgICAvLyAgICAgfSkuY2F0Y2goKHJlaikgPT4ge1xyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy9cclxuICAgIC8vICAgICB0aGlzLnNlcnZpY2Uub24oJ2Vycm9yJywgYXN5bmMgKG9iamVjdCkgPT4ge1xyXG4gICAgLy8gICAgICAgdGhpcy5zZXJ2ZXJEYXRhLnNldHVwID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzICE9PSBDb25uZWN0aW9uU3RhdHVzLlRyeWluZ1RvQ29ubmVjdCkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPSBDb25uZWN0aW9uU3RhdHVzLklzRGlzQ29ubmVjdGVkO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgYXdhaXQgdGhpcy5fb25SZW5kZXJFcnJvcigpO1xyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gICAgIHRoaXMuc2VydmljZS5vbignY2xvc2UnLCBhc3luYyAob2JqZWN0KSA9PiB7XHJcbiAgICAvLyAgICAgICB0aGlzLnNlcnZlckRhdGEuc2V0dXAgPSBmYWxzZTtcclxuICAgIC8vICAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgIT09IENvbm5lY3Rpb25TdGF0dXMuVHJ5aW5nVG9Db25uZWN0KSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXR1cyA9IENvbm5lY3Rpb25TdGF0dXMuSXNEaXNDb25uZWN0ZWQ7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBhd2FpdCB0aGlzLl9vblJlbmRlckNsb3NlKCk7XHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvL1xyXG4gICAgLy8gICB9IGNhdGNoIChlcnIpIHtcclxuICAgIC8vXHJcbiAgICAvLyAgICAgdGhpcy5zZXJ2ZXJEYXRhLnNldHVwID0gZmFsc2U7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlbmRlclNlcnZpY2VIZWFydEJlYXQoKTogdm9pZCB7XHJcblxyXG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzID09PSBDb25uZWN0aW9uU3RhdHVzLklzRGlzQ29ubmVjdGVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dSZW5kZXJDb25uZWN0aW9uSW5mbykge1xyXG4gICAgICAgICAgY29uc3QgdG9hc3QgPSBuZXcgVG9hc3QoKTtcclxuICAgICAgICAgIHRvYXN0Lm1lc3NhZ2UgPSAnQ09OTkVDVElPTl9XSVRIX1JFTkRFUl9TRVJWSUNFX0xPU1QnO1xyXG4gICAgICAgICAgdG9hc3QudHlwZSA9IFRvYXN0VHlwZS5FcnJvcjtcclxuICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93VG9hc3QodG9hc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPSBDb25uZWN0aW9uU3RhdHVzLlRyeWluZ1RvQ29ubmVjdDtcclxuICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyA9PT0gQ29ubmVjdGlvblN0YXR1cy5UcnlpbmdUb0Nvbm5lY3QpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXJ2ZXJEYXRhLnNldHVwID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZW5kZXJTZXJ2aWNlVHJ5VG9Db25uZWN0KTtcclxuICAgICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93UmVuZGVyQ29ubmVjdGlvbkluZm8pIHtcclxuICAgICAgICAgICAgY29uc3QgdG9hc3QgPSBuZXcgVG9hc3QoKTtcclxuICAgICAgICAgICAgdG9hc3QubWVzc2FnZSA9ICdSRV9DT05ORUNURURfV0lUSF9SRU5ERVJfU0VSVklDRSc7XHJcbiAgICAgICAgICAgIHRvYXN0LnR5cGUgPSBUb2FzdFR5cGUuU3VjY2VzcztcclxuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3dUb2FzdCh0b2FzdCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPSBDb25uZWN0aW9uU3RhdHVzLklzQ29ubmVjdGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPT09IENvbm5lY3Rpb25TdGF0dXMuSXNDb25uZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLl9tZXNzYWdlQnVzU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlJlbmRlclNlcnZpY2VDb25uZWN0ZWQpO1xyXG4gICAgICB9XHJcbiAgICB9LCAyMDAwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZW5kZXJQYXJhbWV0ZXJzKHR5cGU6IFJlbmRlck1vZGVzKTogUmVuZGVyRGF0YSB7XHJcblxyXG4gICAgY29uc3QgcGFyYW1zOiBSZW5kZXJEYXRhID0gbmV3IFJlbmRlckRhdGEoKTtcclxuXHJcbiAgICBpZiAodHlwZSAhPT0gUmVuZGVyTW9kZXMuUmVuZGVySW9uZSkge1xyXG4gICAgICBjb25zdCBjdXJyZW50SW1hZ2VTaXplID0gdGhpcy5nZXRJbWFnZVNpemVPbklkKHRoaXMuc2VsZWN0ZWRJbWFnZVNpemUpO1xyXG4gICAgICBwYXJhbXMuaW1hZ2VXaWR0aCA9IE51bWJlcihjdXJyZW50SW1hZ2VTaXplLndpZHRoKTtcclxuICAgICAgcGFyYW1zLmltYWdlSGVpZ2h0ID0gTnVtYmVyKGN1cnJlbnRJbWFnZVNpemUuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJhbXMuY29uZmlndXJlZEl0ZW0gPSB0aGlzLl9nZXRDb25maWd1cmVkRnVybml0dXJlSXRlbSgpO1xyXG4gICAgcGFyYW1zLmNhbWVyYUZPViA9IHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLmZvdjtcclxuICAgIHBhcmFtcy50eXBlID0gdHlwZTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gdGhpcy5yZW5kZXJNb2Rlcy5SZW5kZXJTaG9wKSB7XHJcbiAgICAgIHBhcmFtcy5jYW1lcmFGT1YgPSAzMDtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MucmVuZGVyUGFyYW1ldGVycy5zZXR0aW5ncyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgcGFyYW1zLnNldHRpbmdzID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnJlbmRlclBhcmFtZXRlcnMuc2V0dGluZ3M7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gdGhpcy5yZW5kZXJNb2Rlcy5SZW5kZXJSb29tKSB7XHJcbiAgICAgIGNvbnN0IHJlbmRlckVudmlyb25tZW50ID0gdGhpcy5nZXRSZW5kZXJFbnZpcm9ubWVudE9uSWQodGhpcy5zZWxlY3RlZEVudmlyb25tZW50KTtcclxuICAgICAgcGFyYW1zLnNldHRpbmdzID0gbmV3IFJlbmRlclNldHRpbmdzKCk7XHJcbiAgICAgIHBhcmFtcy5zZXR0aW5ncy5lbnZpcm9ubWVudEhkciA9IHJlbmRlckVudmlyb25tZW50LmhkckZpbGU7XHJcbiAgICAgIHBhcmFtcy5zZXR0aW5ncy5lbnZpcm9ubWVudEludGVuc2l0eSA9IHJlbmRlckVudmlyb25tZW50LmludGVuc2l0eTtcclxuXHJcbiAgICAgIGNvbnN0IGZsb29yUGxhbkhhc1Jvb21zID0gdGhpcy5fcm9vbVNlcnZpY2Uucm9vbXNbMF07XHJcbiAgICAgIGNvbnN0IGNlaWxpbmdPckZsb29yID0gZmxvb3JQbGFuSGFzUm9vbXMgPyB0aGlzLl9yb29tU2VydmljZS5yb29tc1swXS5jZWlsaW5nUGxhbmUgOiB0aGlzLl9mbG9vclNlcnZpY2UuZ2V0Rmxvb3JQbGFuZSgpO1xyXG4gICAgICBjb25zdCBiYiA9IG5ldyBCb3gzKCkuc2V0RnJvbU9iamVjdChjZWlsaW5nT3JGbG9vcik7XHJcbiAgICAgIGNvbnN0IGJiU2l6ZTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgIGJiLmdldFNpemUoYmJTaXplKTtcclxuICAgICAgcGFyYW1zLnNldHRpbmdzLmV4dHJhTGlnaHRzID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIHgxOiBiYi5taW4ueCArIHRoaXMuX2NlaWxpbmdMaWdodE1hcmdpbixcclxuICAgICAgICAgIHoxOiBiYi5taW4ueiArIHRoaXMuX2NlaWxpbmdMaWdodE1hcmdpbixcclxuICAgICAgICAgIHgyOiBiYi5tYXgueCAtIHRoaXMuX2NlaWxpbmdMaWdodE1hcmdpbixcclxuICAgICAgICAgIHoyOiBiYi5tYXgueiAtIHRoaXMuX2NlaWxpbmdMaWdodE1hcmdpbixcclxuICAgICAgICAgIGhlaWdodDogZmxvb3JQbGFuSGFzUm9vbXMgPyBjZWlsaW5nT3JGbG9vci5wb3NpdGlvbi55IDogMi42LFxyXG4gICAgICAgIH1cclxuICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG4gIH1cclxuXHJcbiAgLy8gVGhlIEdMVEZFeHBvcnRlciBuZWVkcyBsaWdodHMgdG8gYmUgY29uZmlndXJlZCBsaWtlIHRoaXMsXHJcbiAgLy8gb3RoZXJ3aXNlIHRoZXkgd2lsbCBhbGwgcG9pbnQgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLlxyXG4gIHByaXZhdGUgX2ZpeExpZ2h0KGVsZW1lbnQ6IERpcmVjdGlvbmFsTGlnaHQgfCBTcG90TGlnaHQpOiB2b2lkIHtcclxuICAgIGVsZW1lbnQudGFyZ2V0LnBhcmVudCA9IGVsZW1lbnQ7XHJcbiAgICBlbGVtZW50Lmxvb2tBdChlbGVtZW50LnRhcmdldC5wb3NpdGlvbik7XHJcbiAgICBlbGVtZW50LnRhcmdldC5wb3NpdGlvbi54ID0gMDtcclxuICAgIGVsZW1lbnQudGFyZ2V0LnBvc2l0aW9uLnkgPSAwO1xyXG4gICAgZWxlbWVudC50YXJnZXQucG9zaXRpb24ueiA9IC0xO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZWxlbWVudE11c3RCZVJlbW92ZWQoZWxlbWVudDogT2JqZWN0M0QpOiBib29sZWFuIHtcclxuICAgIGlmIChlbGVtZW50LnR5cGUgPT09ICdQZXJzcGVjdGl2ZUNhbWVyYScpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoIWVsZW1lbnQubmFtZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGNOYW1lID0gZWxlbWVudC5uYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAvLyBlbGVtZW50cyB3aXRoIGEgbmFtZSBzdGFydGluZyB3aXRoIGNfIGFyZSBjb25uZWN0b3JzLFxyXG4gICAgLy8gd2hpY2ggc2hvdWxkIG5vdCBiZSB2aXNpYmxlLlxyXG4gICAgaWYgKGxjTmFtZS5zdGFydHNXaXRoKCdjXycpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlbGVtZW50Lm5hbWUuc3RhcnRzV2l0aCgnc25hcHBpbmctcHJldmlldy1tZXNoJykpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfZXhwb3J0VG9HbGIoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IGFzc2V0UGF0aDogc3RyaW5nID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmFzc2V0UGF0aDtcclxuICAgIC8vIFRoZSBncm91bmQgcGxhbmUgbG9va3Mgb2RkIGluIHJlbmRlcnMuXHJcbiAgICAvLyBUaGUgaHVkLXJpbmcgYW5kIGh1ZC1jaXJjbGUgYXJlIHRoZSB3YWxrdGhyb3VnaCBtb2RlIG1hcmtlcixcclxuICAgIC8vIHdoaWNoIGlzIG5vdCBzdXBwb3NlZCB0byBiZSByZW5kZXJlZC5cclxuICAgIGNvbnN0IGVsZW1lbnRzVG9SZW1vdmUgPSBbJ2dyb3VuZC1wbGFuZScsICdodWQtcmluZycsICdodWQtY2lyY2xlJ107XHJcblxyXG4gICAgbGV0IHNjZW5lOiBTY2VuZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIHNjZW5lID0gdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLmNsb25lKCk7XHJcblxyXG4gICAgICBlbGVtZW50c1RvUmVtb3ZlLmZvckVhY2goZWxlbWVudE5hbWUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkT2JqZWN0OiBPYmplY3QzRCA9IHNjZW5lLmdldE9iamVjdEJ5TmFtZShlbGVtZW50TmFtZSk7XHJcbiAgICAgICAgc2NlbmUucmVtb3ZlKHNlbGVjdGVkT2JqZWN0KTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIFVzaW5nIHRoZSBwYXJlbnRzLCBiZWNhdXNlIHNjZW5lLnJlbW92ZSBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgY29ycmVjdGx5LlxyXG4gICAgICBjb25zdCBwYXJlbnRzID0gW107XHJcbiAgICAgIHNjZW5lLnRyYXZlcnNlKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgRGlyZWN0aW9uYWxMaWdodCB8fCBlbGVtZW50IGluc3RhbmNlb2YgU3BvdExpZ2h0KSB7XHJcbiAgICAgICAgICB0aGlzLl9maXhMaWdodChlbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50LnZpc2libGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkVsZW1lbnQgXCIgKyBlbGVtZW50Lm5hbWUgKyBcIiB3YXMgaW52aXNpYmxlLCBtYWtpbmcgaXQgdmlzaWJsZS5cIik7XHJcbiAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBNZXNoICYmIGVsZW1lbnQubmFtZSAmJiBlbGVtZW50Lm5hbWUuc3RhcnRzV2l0aCgnY3VzdG9tTWVzaFdpbmRvdycpKSB7XHJcbiAgICAgICAgICBsZXQgaGFzQ3VzdG9tVGV4dHVyZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmIChlbGVtZW50Lm1hdGVyaWFsIGluc3RhbmNlb2YgTWF0ZXJpYWwpIHtcclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50Lm1hdGVyaWFsIGluc3RhbmNlb2YgTWVzaFBob25nTWF0ZXJpYWwgJiYgZWxlbWVudC5tYXRlcmlhbC5tYXApIHtcclxuICAgICAgICAgICAgICBoYXNDdXN0b21UZXh0dXJlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbGVtZW50Lm1hdGVyaWFsID0gUmVuZGVyU2VydmljZS5NYWtlV2luZG93TWF0ZXJpYWxUcmFuc3BhcmVudChlbGVtZW50Lm1hdGVyaWFsKTtcclxuXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudC5tYXRlcmlhbCkpIHtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQubWF0ZXJpYWwuZm9yRWFjaChmdW5jdGlvbiAobWF0ZXJpYWw6IE1hdGVyaWFsLCBpbmRleCkge1xyXG4gICAgICAgICAgICAgIGlmIChtYXRlcmlhbCBpbnN0YW5jZW9mIE1lc2hQaG9uZ01hdGVyaWFsICYmIG1hdGVyaWFsLm1hcCkge1xyXG4gICAgICAgICAgICAgICAgaGFzQ3VzdG9tVGV4dHVyZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsZW1lbnQubWF0ZXJpYWxbaW5kZXhdID0gUmVuZGVyU2VydmljZS5NYWtlV2luZG93TWF0ZXJpYWxUcmFuc3BhcmVudChtYXRlcmlhbCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghaGFzQ3VzdG9tVGV4dHVyZSkge1xyXG4gICAgICAgICAgICBlbGVtZW50Lm5hbWUgPSAnZ2xhc3MnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnRNdXN0QmVSZW1vdmVkKGVsZW1lbnQpKSB7XHJcbiAgICAgICAgICBwYXJlbnRzLnB1c2goZWxlbWVudC5wYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHBhcmVudHMuZm9yRWFjaChwYXJlbnQgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgIGlmICh0aGlzLl9lbGVtZW50TXVzdEJlUmVtb3ZlZChwYXJlbnQuY2hpbGRyZW5baV0pKSB7XHJcbiAgICAgICAgICAgIHBhcmVudC5yZW1vdmUocGFyZW50LmNoaWxkcmVuW2ldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBzY2VuZS5hZGQodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEuY2xvbmUoKSk7XHJcblxyXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgIHRyczogZmFsc2UsXHJcbiAgICAgICAgb25seVZpc2libGU6IGZhbHNlLFxyXG4gICAgICAgIHRydW5jYXRlRHJhd1JhbmdlOiB0cnVlLFxyXG4gICAgICAgIGJpbmFyeTogdHJ1ZSxcclxuICAgICAgICBmb3JjZUluZGljZXM6IGZhbHNlLFxyXG4gICAgICAgIGZvcmNlUG93ZXJPZlR3b1RleHR1cmVzOiBmYWxzZSxcclxuICAgICAgICAvLyBtYXhUZXh0dXJlU2l6ZTogNTAwLFxyXG4gICAgICAgIGVtYmVkSW1hZ2VzOiB0cnVlLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgZXhwb3J0ZXI6IEdMVEZFeHBvcnRlciA9IG5ldyBHTFRGRXhwb3J0ZXIoKTtcclxuICAgICAgbGV0IGZpbGVuYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcclxuICAgICAgICBleHBvcnRlci5wYXJzZShzY2VuZSwgYXN5bmMgKGV4cG9ydGVkU2NlbmU6IEFycmF5QnVmZmVyKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBibG9iOiBCbG9iID0gbmV3IEJsb2IoW2V4cG9ydGVkU2NlbmVdLCB7dHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSd9KTtcclxuICAgICAgICAgIGNvbnN0IHJlc3VsdDogYW55ID0gYXdhaXQgRmlsZVV0aWxzLlNhdmVHTEJGaWxlKGJsb2IsIGFzc2V0UGF0aCk7XHJcbiAgICAgICAgICBpZiAocmVzdWx0ICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBmaWxlbmFtZSA9IHJlc3VsdC5wYXRoO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzb2x2ZShmaWxlbmFtZSk7XHJcbiAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgIH0sIG9wdGlvbnMpO1xyXG4gICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhyb3cgKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHN0YXJ0UmVuZGVyaW5nKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIGlmICh0aGlzLnJlbmRlclF1ZXVlLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5yZW5kZXJRdWV1ZVswXS5yZW5kZXJQcm9ncmVzcyA9PT0gMCB8fCB0aGlzLnJlbmRlclF1ZXVlWzBdLnJlbmRlclByb2dyZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLnJlbmRlclF1ZXVlWzBdLnJlbmRlclN0YXR1cyA9IFJlbmRlclN0YXR1cy5Jc1J1bm5pbmc7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtID0gdGhpcy5yZW5kZXJRdWV1ZVswXTtcclxuICAgICAgICB0aGlzLnJlbmRlclF1ZXVlLnNoaWZ0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMuZ2xiUGF0aCA9IGF3YWl0IHRoaXMuX2V4cG9ydFRvR2xiKClcclxuICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9zdGFydFJlbmRlckxvb3AoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY29saWpuUmVuZGVyU2NlbmUocGFyYW1zOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG5cclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlcXVlc3RQYXJhbXMgPSBbe1xyXG4gICAgICAgIGlkOiAxLFxyXG4gICAgICAgIGpzb25ycGM6ICcyLjAnLFxyXG4gICAgICAgIG1ldGhvZDogJ2NvbGlqbl9yZW5kZXJfc2NlbmVfZnJvbV9nbGInLFxyXG4gICAgICAgIHBhcmFtczogcGFyYW1zXHJcbiAgICAgIH1dO1xyXG4gICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcclxuICAgICAgeGhyLm9wZW4oJ1BPU1QnLCB0aGlzLl9nZXRSZW5kZXJTZXJ2aWNlVXJsKCkpO1xyXG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpO1xyXG4gICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDwgMzAwKSB7XHJcbiAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xyXG4gICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShyZXF1ZXN0UGFyYW1zKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXJ0UmVuZGVyTG9vcCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICAvLyB0ZW1wb3Jhcnkgc29sdXRpb24gYmVjYXVzZSBsYXJnZSByZXF1ZXN0IG92ZXIgd2Vic29ja2V0cyBhcmUgbm90IHdvcmtpbmcgYmVjYXVzZSBvZiBhbiBlcnJvciBpbiB0aGUgc29mdHdhcmUgb2YgbWlnZW5pdXNcclxuICAgIGxldCBbaW5mb10gPSBhd2FpdCB0aGlzLl9jb2xpam5SZW5kZXJTY2VuZSh0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucGFyYW1zKTtcclxuICAgIGluZm8gPSBpbmZvLnJlc3VsdDtcclxuXHJcbiAgICAvKlxyXG4gICAgY29uc3QgWyBpbmZvIF0gPSBhd2FpdCB0aGlzLnNlcnZpY2UucXVldWVfY29tbWFuZHMoKVxyXG4gICAgICAucXVldWUobmV3IENvbW1hbmQoJ2NvbGlqbl9yZW5kZXJfc2NlbmUnLCB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucGFyYW1zKSwgdHJ1ZSlcclxuICAgICAgLmV4ZWN1dGUoKTtcclxuICAgICovXHJcblxyXG4gICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLmhvc3QgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudXJsO1xyXG4gICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLmtleSA9IGluZm8uc2NlbmVfbmFtZTtcclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS50eXBlID0gdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcy50eXBlO1xyXG4gICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnN0YXJ0RGF0ZVRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLmltYWdlU2l6ZSA9IHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMuaW1hZ2VXaWR0aCArICcgeCAnICsgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcy5pbWFnZUhlaWdodDtcclxuXHJcbiAgICB0aGlzLl9zZXRSZW5kZXJQcm9ncmVzcyhSZW5kZXJTdGF0dXMuSXNSdW5uaW5nLCAwLCAwKTtcclxuXHJcbiAgICB0aGlzLnNjZW5lRGF0YSA9IGluZm87XHJcbiAgICBpZiAoIXRoaXMuc2NlbmVEYXRhIHx8IHRoaXMuc2NlbmVEYXRhLmVycm9yKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNjZW5lRGF0YS5pbWFnZV9pbmZvICYmIHRoaXMuc2NlbmVEYXRhLmltYWdlX2luZm8ubmVlZHNfcmVuZGVyID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5yZW5kZXJlZCA9IHRydWU7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0UmVuZGVyU3RyZWFtKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9hZnRlclJlbmRlcmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcXVpdFJlbmRlckxvb3AoKSB7XHJcblxyXG4gICAgLy8gaWYgKHRoaXMuc2NlbmVEYXRhLmxvb3BfbmFtZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VydmljZS52YWxpZGF0ZSgpICE9PSBmYWxzZSkge1xyXG4gICAgLy8gICBjb25zdCBbXSA9IGF3YWl0IHRoaXMuc2VydmljZS5xdWV1ZV9jb21tYW5kcygpXHJcbiAgICAvLyAgICAgLnF1ZXVlKG5ldyBDb21tYW5kKCdyZW5kZXJfbG9vcF9xdWl0Jywge1xyXG4gICAgLy8gICAgICAgcmVuZGVyX2xvb3BfbmFtZTogdGhpcy5zY2VuZURhdGEubG9vcF9uYW1lXHJcbiAgICAvLyAgICAgfSkpXHJcbiAgICAvLyAgICAgLmV4ZWN1dGUoKTtcclxuICAgIC8vICAgdGhpcy5zZXJ2aWNlLnJlbW92ZV9zdHJlYW0odGhpcy5zY2VuZURhdGEubG9vcF9uYW1lKTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3N0YXJ0UmVuZGVyU3RyZWFtKCkge1xyXG4gICAgLy9cclxuICAgIC8vIHRyeSB7XHJcbiAgICAvL1xyXG4gICAgLy8gICB0aGlzLnN0cmVhbWluZy5zdHJlYW0gPSB0aGlzLnNlcnZpY2UuY3JlYXRlX3N0cmVhbSgpO1xyXG4gICAgLy8gICBhd2FpdCB0aGlzLnN0cmVhbWluZy5zdHJlYW0uc3RhcnQoe3JlbmRlcl9sb29wX25hbWU6IHRoaXMuc2NlbmVEYXRhLmxvb3BfbmFtZSwgaW1hZ2VfZm9ybWF0OiAnanBnJywgcXVhbGl0eTogJzEwMCd9KTtcclxuICAgIC8vXHJcbiAgICAvLyAgIHRoaXMuc3RyZWFtaW5nLnN0cmVhbS5vbignaW1hZ2UnLCBhc3luYyAob2JqZWN0KSA9PiB7XHJcbiAgICAvLyAgICAgdGhpcy5faHRtbEltYWdlRGlzcGxheShvYmplY3QsIG51bGwpO1xyXG4gICAgLy8gICAgIGNvbnN0IFtwcm9ncmVzc10gPSBhd2FpdCB0aGlzLnNlcnZpY2UucXVldWVfY29tbWFuZHMoKVxyXG4gICAgLy8gICAgICAgLnF1ZXVlKG5ldyBDb21tYW5kKCdyZW5kZXJfbG9vcF9nZXRfcmVuZGVyX3Byb2dyZXNzJywge1xyXG4gICAgLy8gICAgICAgICByZW5kZXJfbG9vcF9uYW1lOiB0aGlzLnNjZW5lRGF0YS5sb29wX25hbWVcclxuICAgIC8vICAgICAgIH0pLCB0cnVlKVxyXG4gICAgLy8gICAgICAgLmV4ZWN1dGUoKTtcclxuICAgIC8vXHJcbiAgICAvLyAgICAgaWYgKHByb2dyZXNzLnByb2dyZXNzaW9uICE9PSB1bmRlZmluZWQpIHtcclxuICAgIC8vICAgICAgIHRoaXMuX3NldFJlbmRlclByb2dyZXNzKFJlbmRlclN0YXR1cy5Jc1J1bm5pbmcsIE1hdGguY2VpbCgocHJvZ3Jlc3MucHJvZ3Jlc3Npb24gKiAxMDApKSwgcHJvZ3Jlc3MuaXRlcmF0aW9uKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gICAgIGlmIChvYmplY3QucmVzdWx0ID09PSAxKSB7XHJcbiAgICAvL1xyXG4gICAgLy8gICAgICAgYXdhaXQgdGhpcy5zZXJ2aWNlLnF1ZXVlX2NvbW1hbmRzKClcclxuICAgIC8vICAgICAgICAgLnF1ZXVlKG5ldyBDb21tYW5kKCdyZW5kZXJfbG9vcF9zYXZlX3RvX2Rpc2snLCB7XHJcbiAgICAvLyAgICAgICAgICAgcmVuZGVyX2xvb3BfbmFtZTogdGhpcy5zY2VuZURhdGEubG9vcF9uYW1lLFxyXG4gICAgLy8gICAgICAgICAgIGZvcm1hdDogJ2pwZycsXHJcbiAgICAvLyAgICAgICAgICAgcXVhbGl0eTogOTAsXHJcbiAgICAvLyAgICAgICAgICAgcGF0aDogdGhpcy5zY2VuZURhdGEuaW1hZ2VfaW5mby51cmxcclxuICAgIC8vICAgICAgICAgfSksIHRydWUpXHJcbiAgICAvLyAgICAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAvL1xyXG4gICAgLy8gICAgICAgaWYgKHRoaXMuc3RyZWFtaW5nLnN0cmVhbSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuc3RyZWFtaW5nLnN0cmVhbS5zdG9wKCk7XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgICBhd2FpdCB0aGlzLl9xdWl0UmVuZGVyTG9vcCgpO1xyXG4gICAgLy8gICAgICAgdGhpcy5fYWZ0ZXJSZW5kZXJpbmcoKTtcclxuICAgIC8vICAgICAgIHJldHVybjtcclxuICAgIC8vXHJcbiAgICAvLyAgICAgfSBlbHNlIGlmIChvYmplY3QucmVzdWx0IDwgMCkge1xyXG4gICAgLy9cclxuICAgIC8vICAgICAgIGF3YWl0IHRoaXMuX29uUmVuZGVyRXJyb3IoKTtcclxuICAgIC8vICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy9cclxuICAgIC8vIH0gY2F0Y2ggKGVycikge1xyXG4gICAgLy9cclxuICAgIC8vICAgYXdhaXQgdGhpcy5fb25SZW5kZXJFcnJvcigpO1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRSZW5kZXJQcm9ncmVzcyhzdGF0dXM6IFJlbmRlclN0YXR1cywgcHJvZ3Jlc3M6IG51bWJlciwgaXRlcmF0aW9uczogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuc2VydmVyRGF0YSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0uZW5kRGF0ZVRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnJlbmRlclN0YXR1cyA9IHN0YXR1cztcclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5yZW5kZXJQcm9ncmVzcyA9IHByb2dyZXNzO1xyXG4gICAgaWYgKGl0ZXJhdGlvbnMgPiAwKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5yZW5kZXJJdGVyYXRpb25zID0gaXRlcmF0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IFJlbmRlck1vZGVzLlJlbmRlcklvbmUpIHtcclxuICAgICAgY29uc3QgcmVuZGVyOiBSZW5kZXIgPSB0aGlzLmdldFJlbmRlck9uSWQodGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcy5yZW5kZXIuaWQpO1xyXG4gICAgICByZW5kZXIuc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgICByZW5kZXIucHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX29uUmVuZGVyRXJyb3IoKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgdGhpcy5fc2V0UmVuZGVyUHJvZ3Jlc3MoUmVuZGVyU3RhdHVzLklzU3RvcHBlZCwgMCwgMCk7XHJcbiAgICBhd2FpdCB0aGlzLl9xdWl0UmVuZGVyTG9vcCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfb25SZW5kZXJDbG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICB0aGlzLl9zZXRSZW5kZXJQcm9ncmVzcyhSZW5kZXJTdGF0dXMuSXNTdG9wcGVkLCAwLCAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FmdGVyUmVuZGVyaW5nKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNlcnZlckRhdGEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3NldFJlbmRlclByb2dyZXNzKFJlbmRlclN0YXR1cy5Jc1N1Y2Nlc3MsIDEwMCwgMCk7XHJcblxyXG4gICAgY29uc3QgaW1hZ2VVcmwgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoLnJlcGxhY2UoJ2NvbnRlbnQ0My8nLCAnJykgKyB0aGlzLnNjZW5lRGF0YS5pbWFnZV9pbmZvLnVybDtcclxuICAgIGlmICh0aGlzLnNlcnZlckRhdGEucmVuZGVyTW9kZSA9PT0gUmVuZGVyTW9kZXMuUmVuZGVyUm9vbSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVkUm9vbUltYWdlcy51bnNoaWZ0KGltYWdlVXJsKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckltYWdlQ2hhbmdlZC5uZXh0KGltYWdlVXJsKTtcclxuXHJcbiAgICBpZiAodGhpcy5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IFJlbmRlck1vZGVzLlJlbmRlcklvbmUpIHtcclxuICAgICAgY29uc3QgcmVuZGVyOiBSZW5kZXIgPSB0aGlzLmdldFJlbmRlck9uSWQodGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcy5yZW5kZXIuaWQpO1xyXG4gICAgICByZW5kZXIudXJsID0gaW1hZ2VVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29uZmlndXJlZEl0ZW0gPSB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucGFyYW1zLmNvbmZpZ3VyZWRJdGVtO1xyXG4gICAgY29uc3QgaXNTaW5nbGVJdGVtID0gdGhpcy5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgIT09IFJlbmRlck1vZGVzLlJlbmRlclJvb207XHJcbiAgICB0aGlzLl9nb29nbGVUYWdNYW5hZ2VyLnNlbmRFdmVudChHb29nbGVUYWdNYW5hZ2VyRXZlbnQuUmVuZGVyLCB7XHJcbiAgICAgICdhcnRpY2xlTnInOiBpc1NpbmdsZUl0ZW0gPyBjb25maWd1cmVkSXRlbS5za3UgOiAncmVuZGVyUm9vbScsXHJcbiAgICAgICdwcm9kdWN0JzogaXNTaW5nbGVJdGVtID8gY29uZmlndXJlZEl0ZW0ubmFtZSA6ICdyZW5kZXJSb29tJyxcclxuICAgICAgJ2RpbWVuc2lvbnMnOiB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0uaW1hZ2VTaXplXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN0YXJ0UmVuZGVyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRSZW5kZXJTZXJ2aWNlVXJsKCk6IHN0cmluZyB7XHJcblxyXG4gICAgcmV0dXJuIGAkeyh0aGlzLnNlcnZlckRhdGEuc2VjdXJlID8gJ2h0dHBzJyA6ICdodHRwJyl9Oi8vJHt0aGlzLnNlcnZlckRhdGEuaG9zdH06JHt0aGlzLnNlcnZlckRhdGEucG9ydH1gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZvcmNlUmVuZGVySW1hZ2UoKTogdm9pZCB7XHJcbiAgICBjb25zdCBmbG9vckdyb3VwID0gdGhpcy5fZ2V0Rmlyc3RDdXN0b21GbG9vckl0ZW1Gcm9tU2NlbmUoKTtcclxuICAgIGlmIChmbG9vckdyb3VwICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2NoZWNrVmlzaWJsZVVwZGF0ZXMoZmxvb3JHcm91cCwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9jaGVja1Zpc2libGVVcGRhdGVzKGZ1cm5pdHVyZTogSXRlbSwgZm9yY2VSZW5kZXI6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCF0aGlzLnNlcnZlckRhdGEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghZnVybml0dXJlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IHRoaXMucmVuZGVyTW9kZXMuUmVuZGVySW9uZSkge1xyXG4gICAgICBjb25zdCBvYmplY3QgPSB0aGlzLl9leHBvcnRTZXJ2aWNlLmdldEV4cG9ydE9iamVjdEZyb21DdXN0b21GbG9vckdyb3VwKGZ1cm5pdHVyZSk7XHJcbiAgICAgIHRoaXMuY3VycmVudFByb2R1Y3RIYXNoID0gb2JqZWN0LmRlZmF1bHRSZW5kZXJQYXRoO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlcnZlckRhdGEucmVuZGVyTW9kZSA9PT0gdGhpcy5yZW5kZXJNb2Rlcy5SZW5kZXJTaG9wKSB7XHJcbiAgICAgIGNvbnN0IG9iamVjdCA9IHRoaXMuX2V4cG9ydFNlcnZpY2UuZ2V0RXhwb3J0T2JqZWN0RnJvbUN1c3RvbUZsb29yR3JvdXAoZnVybml0dXJlKTtcclxuXHJcbiAgICAgIGlmICghKEpTT04uc3RyaW5naWZ5KHRoaXMucHJldkl0ZW0pICE9PSBKU09OLnN0cmluZ2lmeShvYmplY3QpIHx8IGZvcmNlUmVuZGVyKSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5yZW5kZXJpbmdTdGFydGVkLm5leHQoKTtcclxuICAgICAgdGhpcy5wcmV2SXRlbSA9IG9iamVjdDtcclxuICAgICAgY29uc3QgcXVldWVJdGVtID0gbmV3IFJlbmRlclF1ZXVlSXRlbSgpO1xyXG4gICAgICBxdWV1ZUl0ZW0ucGFyYW1zID0gdGhpcy5nZXRSZW5kZXJQYXJhbWV0ZXJzKHRoaXMucmVuZGVyTW9kZXMuUmVuZGVyU2hvcCk7XHJcbiAgICAgIHF1ZXVlSXRlbS5wYXJhbXMuY2FtZXJhTWF0cml4ID0gdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEubWF0cml4V29ybGRJbnZlcnNlLmVsZW1lbnRzO1xyXG4gICAgICBxdWV1ZUl0ZW0ucGFyYW1zLmZvcmNlUmVuZGVyID0gZm9yY2VSZW5kZXI7XHJcbiAgICAgIHRoaXMucmVuZGVyUXVldWUgPSBbXTtcclxuICAgICAgdGhpcy5yZW5kZXJRdWV1ZS5wdXNoKHF1ZXVlSXRlbSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc3RhcnRSZW5kZXJpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2h0bWxJbWFnZURpc3BsYXkoaW1hZ2UsIHVybENyZWF0b3IpIHtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB1cmxDcmVhdG9yID0gdXJsQ3JlYXRvciB8fCAod2luZG93ID8gKHdpbmRvdy5VUkwgfHwgKHdpbmRvdyBhcyBhbnkpLndlYmtpdFVSTCkgOiB1bmRlZmluZWQpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ltYWdlLmltYWdlXSwge3R5cGU6IGltYWdlLm1pbWVfdHlwZX0pO1xyXG4gICAgY29uc3QgdXJsID0gdXJsQ3JlYXRvci5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJSb29tSW1hZ2VDaGFuZ2VkLm5leHQodXJsKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZW5kZXJPbklkKGlkOiBudW1iZXIpOiBhbnkge1xyXG4gICAgbGV0IHJldHVyblJlbmRlciA9IG51bGw7XHJcbiAgICB0aGlzLnJlbmRlcnMuZm9yRWFjaCgoeDogUmVuZGVyKSA9PiB7XHJcbiAgICAgIGlmICh4LmlkID09PSBpZCkge1xyXG4gICAgICAgIHJldHVyblJlbmRlciA9IHg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJldHVyblJlbmRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJbWFnZVNpemVPbklkKGlkOiBudW1iZXIpOiBhbnkge1xyXG4gICAgbGV0IHJldHVyblNpemUgPSBudWxsO1xyXG4gICAgdGhpcy5pbWFnZVNpemVzLmZvckVhY2goKHg6IEltYWdlU2l6ZSkgPT4ge1xyXG4gICAgICBpZiAoeC5pZCA9PT0gaWQpIHtcclxuICAgICAgICByZXR1cm5TaXplID0geDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmV0dXJuU2l6ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZW5kZXJFbnZpcm9ubWVudE9uSWQoaWQ6IG51bWJlcik6IFJlbmRlckVudmlyb25tZW50IHtcclxuICAgIGxldCByZXR1cm5FbnZpcm9ubWVudCA9IG51bGw7XHJcbiAgICB0aGlzLnJlbmRlckVudmlyb25tZW50cy5mb3JFYWNoKChyZW5kZXJFbnZpcm9ubWVudDogUmVuZGVyRW52aXJvbm1lbnQpID0+IHtcclxuICAgICAgaWYgKHJlbmRlckVudmlyb25tZW50LmlkID09PSBpZCkge1xyXG4gICAgICAgIHJldHVybkVudmlyb25tZW50ID0gcmVuZGVyRW52aXJvbm1lbnQ7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5FbnZpcm9ubWVudDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRMaWdodG5pbmdPbklkKGlkOiBudW1iZXIpOiBhbnkge1xyXG4gICAgbGV0IHJldHVybkxpZ2h0bmluZyA9IG51bGw7XHJcbiAgICB0aGlzLmxpZ2h0bmluZ3MuZm9yRWFjaCgoeDogTGlnaHRuaW5nKSA9PiB7XHJcbiAgICAgIGlmICh4LmlkID09PSBpZCkge1xyXG4gICAgICAgIHJldHVybkxpZ2h0bmluZyA9IHg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJldHVybkxpZ2h0bmluZztcclxuICB9XHJcblxyXG5cclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRXhwb3J0IGZ1bmN0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Rmlyc3RDdXN0b21GbG9vckl0ZW1Gcm9tU2NlbmUoKTogQ3VzdG9tRmxvb3JJdGVtIHwgbnVsbCB7XHJcblxyXG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUuY2hpbGRyZW47XHJcblxyXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGEgPSAwOyBhIDwgY2hpbGRyZW4ubGVuZ3RoOyBhKyspIHtcclxuICAgICAgaWYgKGNoaWxkcmVuW2FdIGluc3RhbmNlb2YgQ3VzdG9tRmxvb3JJdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIDxDdXN0b21GbG9vckl0ZW0+Y2hpbGRyZW5bYV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNoaWxkcmVuW2FdIGluc3RhbmNlb2YgSXRlbUdyb3VwKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbUdyb3VwID0gPEl0ZW1Hcm91cD5jaGlsZHJlblthXTtcclxuICAgICAgICBpZiAoaXRlbUdyb3VwLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGl0ZW1Hcm91cC5pdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBDdXN0b21GbG9vckl0ZW0pIHtcclxuICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRDb25maWd1cmVkRnVybml0dXJlSXRlbSgpOiBFeHBvcnRPYmplY3QgfCBudWxsIHtcclxuXHJcbiAgICBjb25zdCBmbG9vcmdyb3VwID0gdGhpcy5fZ2V0Rmlyc3RDdXN0b21GbG9vckl0ZW1Gcm9tU2NlbmUoKTtcclxuXHJcbiAgICBpZiAoZmxvb3Jncm91cCA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fZXhwb3J0U2VydmljZS5nZXRFeHBvcnRPYmplY3RGcm9tQ3VzdG9tRmxvb3JHcm91cChmbG9vcmdyb3VwKTtcclxuICB9XHJcbn1cclxuIl19
657
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3JlbmRlci9zZXJ2aWNlL3JlbmRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFZLFNBQVMsRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDOUcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRXZFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQU0zRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFnQjNELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFFckUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRXhELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtEQUFrRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBR3ZGLE1BQU0sT0FBTyxhQUFhO0lBdUZ4QixZQUNVLGdCQUE4QyxFQUM5QyxzQkFBNkMsRUFDN0MsY0FBNkIsRUFDN0IsY0FBNkIsRUFDN0IsYUFBMkIsRUFDM0IsS0FBb0MsRUFDcEMscUJBQTJELEVBQzNELHNCQUE2QyxFQUM3QyxhQUEyQixFQUMzQixrQkFBcUMsRUFDckMsaUJBQTBDLEVBQzFDLFlBQXlCLEVBQ3pCLGFBQTJCLEVBQzNCLHFCQUEyQztRQWIzQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQThCO1FBQzlDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBdUI7UUFDN0MsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0IsVUFBSyxHQUFMLEtBQUssQ0FBK0I7UUFDcEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFzQztRQUMzRCwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzdDLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUF5QjtRQUMxQyxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQiwwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBbkdyQyxnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQVFuQyxjQUFTLEdBQVEsRUFBRSxDQUFDO1FBRXBCLHVCQUFrQixHQUFhLEVBQUUsQ0FBQztRQUVsQyxxQkFBZ0IsR0FBcUIsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1FBRWxFLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFDdkIsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBQ3ZDLGVBQVUsR0FBZ0I7WUFDL0IsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFDO1lBQ3JELEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBQztZQUN0RCxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7WUFDdEQsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDO1NBQ3ZELENBQUM7UUFFSyxlQUFVLEdBQWdCO1lBQy9CLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUM7WUFDcEMsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBQztZQUNyQyxFQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFDO1NBQ3BDLENBQUM7UUFFSyx1QkFBa0IsR0FBd0I7WUFDL0MsRUFBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDO1lBQ2xELEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDO1lBQzVFLEVBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxTQUFT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SUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQzlCLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7d0JBQ3BDLElBQUksSUFBSSxZQUFZLGVBQWUsRUFBRTs0QkFDbkMsT0FBTyxJQUFJLENBQUM7eUJBQ2I7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sMkJBQTJCO1FBRWpDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxDQUFDO1FBRTVELElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtZQUN2QixPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLG1DQUFtQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7OzJHQXZyQlUsYUFBYTsrR0FBYixhQUFhOzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0JveDMsIERpcmVjdGlvbmFsTGlnaHQsIE1hdGVyaWFsLCBNZXNoLCBNZXNoUGhvbmdNYXRlcmlhbCwgT2JqZWN0M0QsIFNwb3RMaWdodCwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0dMVEZFeHBvcnRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2V4cG9ydGVycy9HTFRGRXhwb3J0ZXInO1xyXG5pbXBvcnQge1NjZW5lfSBmcm9tICd0aHJlZS9zcmMvc2NlbmVzL1NjZW5lJztcclxuaW1wb3J0IHtSZW5kZXJNb2Rlc30gZnJvbSAnLi4vZW51bS9yZW5kZXItbW9kZXMnO1xyXG5pbXBvcnQge0Nvbm5lY3Rpb25TdGF0dXN9IGZyb20gJy4uL2VudW0vY29ubmVjdGlvbi1zdGF0dXMnO1xyXG5pbXBvcnQge1JlbmRlcn0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyJztcclxuaW1wb3J0IHtDYW1lcmFQb3NpdGlvbn0gZnJvbSAnLi4vbW9kZWwvY2FtZXJhLXBvc2l0aW9uJztcclxuaW1wb3J0IHtJbWFnZVNpemV9IGZyb20gJy4uL21vZGVsL2ltYWdlLXNpemUnO1xyXG5pbXBvcnQge0xpZ2h0bmluZ30gZnJvbSAnLi4vbW9kZWwvbGlnaHRuaW5nJztcclxuaW1wb3J0IHtSZW5kZXJFbnZpcm9ubWVudH0gZnJvbSAnLi4vbW9kZWwvcmVuZGVyLWVudmlyb25tZW50JztcclxuaW1wb3J0IHtSZW5kZXJRdWV1ZUl0ZW19IGZyb20gJy4uL21vZGVsL3JlbmRlci1xdWV1ZS1pdGVtJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtCdWlsZEZ1cm5pdHVyZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RocmVlZHNlbGVjdG9yL3RocmVlZHNlbGVjdG9yL3NlcnZpY2UvYnVpbGQtZnVybml0dXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0V4cG9ydFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2UvY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yQWRhcHRlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWNvbm5lY3Rvci1hZGFwdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RocmVlZHNlbGVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vdGhyZWVkc2VsZWN0b3IvdGhyZWVkc2VsZWN0b3Ivc2VydmljZS90aHJlZWRzZWxlY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtUb2FzdFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL2dvb2dsZS10YWctbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtSb29tU2VydmljZX0gZnJvbSAnLi4vLi4vcm9vbS1wbGFubmVyL2NvbXBvbmVudHMvZmxvb3JwbGFubmVyL3NlcnZpY2Uvcm9vbS5zZXJ2aWNlJztcclxuaW1wb3J0IHtGbG9vclNlcnZpY2V9IGZyb20gJy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2Zsb29yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvYWRGdXJuaXR1cmVTZXJ2aWNlfSBmcm9tICcuLi8uLi90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci9zZXJ2aWNlL2xvYWQtZnVybml0dXJlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0N1c3RvbUZsb29yR3JvdXBSZXN1bHR9IGZyb20gJy4uLy4uL2NvcmUzZC9tb2RlbC9jdXN0b20tZmxvb3ItZ3JvdXAtcmVzdWx0JztcclxuaW1wb3J0IHtUb2FzdH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbC90b2FzdCc7XHJcbmltcG9ydCB7VG9hc3RUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL3RvYXN0LXR5cGUnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1JlbmRlckRhdGF9IGZyb20gJy4uL21vZGVsL3JlbmRlci1kYXRhJztcclxuaW1wb3J0IHtSZW5kZXJTZXR0aW5nc30gZnJvbSAnLi4vbW9kZWwvcmVuZGVyLXNldHRpbmdzJztcclxuaW1wb3J0IHtGaWxlVXRpbHN9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvZmlsZS51dGlscyc7XHJcbmltcG9ydCB7UmVuZGVyU3RhdHVzfSBmcm9tICcuLi9lbnVtL3JlbmRlci1zdGF0dXMnO1xyXG5pbXBvcnQge0N1c3RvbUZsb29ySXRlbX0gZnJvbSAnLi4vLi4vY29yZTNkL2l0ZW1zL2N1c3RvbS1mbG9vci1pdGVtJztcclxuaW1wb3J0IHtJdGVtfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvaXRlbSc7XHJcbmltcG9ydCB7SXRlbUdyb3VwfSBmcm9tICcuLi8uLi9jb3JlM2QvaXRlbXMvaXRlbS1ncm91cCc7XHJcbmltcG9ydCB7RXhwb3J0T2JqZWN0fSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVsL2V4cG9ydC1vYmplY3QnO1xyXG5pbXBvcnQge0dvb2dsZVRhZ01hbmFnZXJFdmVudH0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL2dvb2dsZS10YWctbWFuYWdlci1ldmVudC5lbnVtJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFJlbmRlclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgcmVhZG9ubHkgcmVuZGVyTW9kZXMgPSBSZW5kZXJNb2RlcztcclxuXHJcbiAgcHVibGljIHNlcnZpY2U6IGFueTtcclxuXHJcbiAgcHVibGljIHNlcnZlckRhdGE6IGFueTtcclxuICBwdWJsaWMgc2NlbmVEYXRhOiBhbnk7XHJcbiAgcHVibGljIHByZXZJdGVtOiBhbnk7XHJcblxyXG4gIHB1YmxpYyBzdHJlYW1pbmc6IGFueSA9IHt9O1xyXG5cclxuICBwdWJsaWMgcmVuZGVyZWRSb29tSW1hZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgY29ubmVjdGlvblN0YXR1czogQ29ubmVjdGlvblN0YXR1cyA9IENvbm5lY3Rpb25TdGF0dXMuSXNVbmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyByZW5kZXJzOiBSZW5kZXJbXSA9IFtdO1xyXG4gIHB1YmxpYyBjYW1lcmFQb3NpdGlvbnM6IENhbWVyYVBvc2l0aW9uW10gPSBbXTtcclxuICBwdWJsaWMgaW1hZ2VTaXplczogSW1hZ2VTaXplW10gPSBbXHJcbiAgICB7aWQ6IDEsIG5hbWU6ICcgNzIwcCAoSEQpJywgd2lkdGg6IDEyODAsIGhlaWdodDogNzIwfSxcclxuICAgIHtpZDogMiwgbmFtZTogJzEwODBQIChIRCknLCB3aWR0aDogMTkyMCwgaGVpZ2h0OiAxMDgwfSxcclxuICAgIHtpZDogMywgbmFtZTogJzE0NDBwICgySyknLCB3aWR0aDogMjU2MCwgaGVpZ2h0OiAxNDQwfSxcclxuICAgIHtpZDogNCwgbmFtZTogJzIxNjBwICg0SyknLCB3aWR0aDogNDA5NiwgaGVpZ2h0OiAyMTYwfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyBsaWdodG5pbmdzOiBMaWdodG5pbmdbXSA9IFtcclxuICAgIHtpZDogMSwgbmFtZTogJ0xpZ2h0Jywgc2V0dGluZ3M6IFtdfSxcclxuICAgIHtpZDogMiwgbmFtZTogJ01lZGl1bScsIHNldHRpbmdzOiBbXX0sXHJcbiAgICB7aWQ6IDMsIG5hbWU6ICdIZWF5Jywgc2V0dGluZ3M6IFtdfVxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyByZW5kZXJFbnZpcm9ubWVudHM6IFJlbmRlckVudmlyb25tZW50W10gPSBbXHJcbiAgICB7aWQ6IDEsIG5hbWU6ICdOb25lJywgaGRyRmlsZTogJycsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogMiwgbmFtZTogJ01vZGVybiBjaXR5JywgaGRyRmlsZTogJ2NhbmFyeV93aGFyZl8yay5oZHInLCBpbnRlbnNpdHk6IDIuNX0sXHJcbiAgICB7aWQ6IDMsIG5hbWU6ICdDaXR5IHBhcmsnLCBoZHJGaWxlOiAnZHJlc2Rlbl9tb2F0XzJrLmhkcicsIGludGVuc2l0eTogMi41fSxcclxuICAgIHtpZDogNCwgbmFtZTogJ05pZ2h0IGluIHRoZSBjaXR5JywgaGRyRmlsZTogJ2hhbnNhcGxhdHpfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiA1LCBuYW1lOiAnTmlnaHQgaW4gdGhlIGNvdW50cnlzaWRlJywgaGRyRmlsZTogJ2tsb3BwZW5oZWltXzAyXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogNiwgbmFtZTogJ0ZvcmVzdCcsIGhkckZpbGU6ICduYWdveWFfd2FsbF9wYXRoXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogNywgbmFtZTogJ1Nub3cnLCBoZHJGaWxlOiAnc25vd3lfZm9yZXN0X3BhdGhfMDFfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiA4LCBuYW1lOiAnUGFzdHVyZScsIGhkckZpbGU6ICdzcHJ1aXRfc3VucmlzZV8yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDksIG5hbWU6ICdGaWVsZCcsIGhkckZpbGU6ICdzdW5mbG93ZXJzXzJrLmhkcicsIGludGVuc2l0eTogMS4wfSxcclxuICAgIHtpZDogMTAsIG5hbWU6ICdPbGQgY2l0eSBhbmQgY2FuYWxzJywgaGRyRmlsZTogJ3RlYXJzX29mX3N0ZWVsX2JyaWRnZV8yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDExLCBuYW1lOiAnRXN0YXRlJywgaGRyRmlsZTogJ3RpZXJnYXJ0ZW5fMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gICAge2lkOiAxMiwgbmFtZTogJ0JlYWNoJywgaGRyRmlsZTogJ3VtaGxhbmdhX3N1bnJpc2VfMmsuaGRyJywgaW50ZW5zaXR5OiAyLjV9LFxyXG4gICAge2lkOiAxMywgbmFtZTogJ1Jlc2lkZW50aWFsIGFyZWEgd2l0aCBwYXJrJywgaGRyRmlsZTogJ3VyYmFuX3N0cmVldF8wMV8yay5oZHInLCBpbnRlbnNpdHk6IDEuMH0sXHJcbiAgICB7aWQ6IDE0LCBuYW1lOiAnUmVzaWRlbnRpYWwgYXJlYScsIGhkckZpbGU6ICd1cmJhbl9zdHJlZXRfMDNfMmsuaGRyJywgaW50ZW5zaXR5OiAxLjB9LFxyXG4gIF07XHJcblxyXG4gIHB1YmxpYyByZW5kZXJTY2VuZXM6IGFueSA9IFtcclxuICAgIHtpZDogMSwgbmFtZTogJ3NjZW5lX2dyYXNzX2N5Y2xlc19NUlAnLCBzY2VuZUFzc2V0SWQ6ICdzY2VuZV9ncmFzc19jeWNsZXNfTVJQJ30sXHJcbiAgICB7aWQ6IDIsIG5hbWU6ICdzY2VuZV9sYWtlX2N5Y2xlc19NUlAnLCBzY2VuZUFzc2V0SWQ6ICdzY2VuZV9sYWtlX2N5Y2xlc19NUlAnfSxcclxuICAgIHtpZDogMywgbmFtZTogJ3NjZW5lX3NreV9jeWNsZXNfTVJQJywgc2NlbmVBc3NldElkOiAnc2NlbmVfc2t5X2N5Y2xlc19NUlAnfSxcclxuICAgIHtpZDogNCwgbmFtZTogJ3NjZW5lX2dhcmRlbl9jeWNsZXNfTVJQJywgc2NlbmVBc3NldElkOiAnc2NlbmVfZ2FyZGVuX2N5Y2xlc19NUlAnfSxcclxuICAgIHtpZDogNSwgbmFtZTogJ3NjZW5lX25hdHVyZV9jeWNsZXNfTVJQJywgc2NlbmVBc3NldElkOiAnc2NlbmVfbmF0dXJlX2N5Y2xlc19NUlAnfSxcclxuICAgIHtpZDogNSwgbmFtZTogJ3NjZW5lXzAxJywgc2NlbmVBc3NldElkOiAnc2NlbmVfMDEnfVxyXG4gIF07XHJcblxyXG5cclxuICBwcml2YXRlIF9jZWlsaW5nTGlnaHRNYXJnaW46IG51bWJlciA9IDAuNTtcclxuXHJcbiAgcHVibGljIHNlbGVjdGVkSW1hZ2VTaXplOiBudW1iZXIgPSAyO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEVudmlyb25tZW50OiBudW1iZXIgPSAxO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFJlbmRlclNjZW5lOiBzdHJpbmcgPSB0aGlzLnJlbmRlclNjZW5lc1swXS5zY2VuZUFzc2V0SWQ7XHJcblxyXG4gIHB1YmxpYyBibGVuZEZpbGVzUmVuZGVyOiBib29sZWFuID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmJsZW5kRmlsZXNSZW5kZXI7XHJcblxyXG4gIHB1YmxpYyBwb3NpdGlvbnM6IG51bWJlciA9IDE7XHJcbiAgcHVibGljIHNhdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHJlbmRlclJvb21JbWFnZUNoYW5nZWQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XHJcbiAgcHVibGljIHJlbmRlcmluZ1N0YXJ0ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIHB1YmxpYyByZW5kZXJJbWFnZUNoYW5nZWQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XHJcblxyXG4gIHB1YmxpYyByZW5kZXJRdWV1ZTogYW55W10gPSBbXTtcclxuICBwdWJsaWMgY3VycmVudFF1ZXVlUmVuZGVySXRlbTogUmVuZGVyUXVldWVJdGVtID0gbmV3IFJlbmRlclF1ZXVlSXRlbSgpO1xyXG4gIHB1YmxpYyBjdXJyZW50UHJvZHVjdEhhc2g6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyBzdGFuZEFsb25lQ2FtZXJhTWF0cml4OiBudW1iZXJbXTtcclxuXHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHN0YXRpYyBNYWtlV2luZG93TWF0ZXJpYWxUcmFuc3BhcmVudChtYXRlcmlhbDogTWF0ZXJpYWwpOiBNYXRlcmlhbCB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhtYXRlcmlhbCk7XHJcbiAgICBtYXRlcmlhbC50cmFuc3BhcmVudCA9IHRydWU7XHJcbiAgICBtYXRlcmlhbC5vcGFjaXR5ID0gTWF0aC5taW4obWF0ZXJpYWwub3BhY2l0eSwgMC40KTtcclxuICAgIHJldHVybiBtYXRlcmlhbDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYnVpbGRGdXJuaXR1cmVTZXJ2aWNlOiBCdWlsZEZ1cm5pdHVyZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9leHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW9uZTogSG9tZWRlY29yYXRvckNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pb25lQ29ubmVjdG9yQWRhcHRlcjogSG9tZWRlY29yYXRvckNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdGhyZWVkU2VsZWN0b3JTZXJ2aWNlOiBUaHJlZWRzZWxlY3RvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VCdXNTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2dvb2dsZVRhZ01hbmFnZXI6IEdvb2dsZVRhZ01hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcm9vbVNlcnZpY2U6IFJvb21TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JTZXJ2aWNlOiBGbG9vclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sb2FkRnVybml0dXJlU2VydmljZTogTG9hZEZ1cm5pdHVyZVNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuc2NlbmVEYXRhID0ge307XHJcblxyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NMb2FkZWQuc3Vic2NyaWJlKChsb2FkZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAobG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLnNlcnZlckRhdGEgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MucmVuZGVyUGFyYW1ldGVycztcclxuICAgICAgICAgIGlmICh0aGlzLnNlcnZlckRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXJ2ZXJEYXRhLnNldHVwID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25uZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlclNlcnZpY2VIZWFydEJlYXQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGNoZWNrQ29ubmVjdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vXHJcbiAgICAvLyBpZiAodGhpcy5zZXJ2aWNlLnZhbGlkYXRlKCkgPT09IGZhbHNlKSB7XHJcbiAgICAvL1xyXG4gICAgLy8gICB0cnkge1xyXG4gICAgLy9cclxuICAgIC8vICAgICBjb25zdCB1cmwgPSBgJHsodGhpcy5zZXJ2ZXJEYXRhLnNlY3VyZSA/ICd3c3MnIDogJ3dzJyl9Oi8vJHt0aGlzLnNlcnZlckRhdGEuaG9zdH06JHt0aGlzLnNlcnZlckRhdGEucG9ydH0vc2VydmljZS9gO1xyXG4gICAgLy8gICAgIGF3YWl0IHRoaXMuc2VydmljZS5jb25uZWN0KHVybCkudGhlbigoKSA9PiB7XHJcbiAgICAvLyAgICAgICB0aGlzLnNlcnZlckRhdGEuc2V0dXAgPSB0cnVlO1xyXG4gICAgLy8gICAgIH0pLmNhdGNoKChyZWopID0+IHtcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vXHJcbiAgICAvLyAgICAgdGhpcy5zZXJ2aWNlLm9uKCdlcnJvcicsIGFzeW5jIChvYmplY3QpID0+IHtcclxuICAgIC8vICAgICAgIHRoaXMuc2VydmVyRGF0YS5zZXR1cCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyAhPT0gQ29ubmVjdGlvblN0YXR1cy5UcnlpbmdUb0Nvbm5lY3QpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzID0gQ29ubmVjdGlvblN0YXR1cy5Jc0Rpc0Nvbm5lY3RlZDtcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGF3YWl0IHRoaXMuX29uUmVuZGVyRXJyb3IoKTtcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vICAgICB0aGlzLnNlcnZpY2Uub24oJ2Nsb3NlJywgYXN5bmMgKG9iamVjdCkgPT4ge1xyXG4gICAgLy8gICAgICAgdGhpcy5zZXJ2ZXJEYXRhLnNldHVwID0gZmFsc2U7XHJcbiAgICAvLyAgICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzICE9PSBDb25uZWN0aW9uU3RhdHVzLlRyeWluZ1RvQ29ubmVjdCkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPSBDb25uZWN0aW9uU3RhdHVzLklzRGlzQ29ubmVjdGVkO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgYXdhaXQgdGhpcy5fb25SZW5kZXJDbG9zZSgpO1xyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy9cclxuICAgIC8vICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAvL1xyXG4gICAgLy8gICAgIHRoaXMuc2VydmVyRGF0YS5zZXR1cCA9IGZhbHNlO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW5kZXJTZXJ2aWNlSGVhcnRCZWF0KCk6IHZvaWQge1xyXG5cclxuICAgIHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXR1cyA9PT0gQ29ubmVjdGlvblN0YXR1cy5Jc0Rpc0Nvbm5lY3RlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zaG93UmVuZGVyQ29ubmVjdGlvbkluZm8pIHtcclxuICAgICAgICAgIGNvbnN0IHRvYXN0ID0gbmV3IFRvYXN0KCk7XHJcbiAgICAgICAgICB0b2FzdC5tZXNzYWdlID0gJ0NPTk5FQ1RJT05fV0lUSF9SRU5ERVJfU0VSVklDRV9MT1NUJztcclxuICAgICAgICAgIHRvYXN0LnR5cGUgPSBUb2FzdFR5cGUuRXJyb3I7XHJcbiAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvd1RvYXN0KHRvYXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzID0gQ29ubmVjdGlvblN0YXR1cy5UcnlpbmdUb0Nvbm5lY3Q7XHJcbiAgICAgICAgdGhpcy5jaGVja0Nvbm5lY3Rpb24oKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0dXMgPT09IENvbm5lY3Rpb25TdGF0dXMuVHJ5aW5nVG9Db25uZWN0KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VydmVyRGF0YS5zZXR1cCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VCdXNTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuUmVuZGVyU2VydmljZVRyeVRvQ29ubmVjdCk7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuc2hvd1JlbmRlckNvbm5lY3Rpb25JbmZvKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvYXN0ID0gbmV3IFRvYXN0KCk7XHJcbiAgICAgICAgICAgIHRvYXN0Lm1lc3NhZ2UgPSAnUkVfQ09OTkVDVEVEX1dJVEhfUkVOREVSX1NFUlZJQ0UnO1xyXG4gICAgICAgICAgICB0b2FzdC50eXBlID0gVG9hc3RUeXBlLlN1Y2Nlc3M7XHJcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93VG9hc3QodG9hc3QpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdHVzID0gQ29ubmVjdGlvblN0YXR1cy5Jc0Nvbm5lY3RlZDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25uZWN0aW9uU3RhdHVzID09PSBDb25uZWN0aW9uU3RhdHVzLklzQ29ubmVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5SZW5kZXJTZXJ2aWNlQ29ubmVjdGVkKTtcclxuICAgICAgfVxyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVuZGVyUGFyYW1ldGVycyh0eXBlOiBSZW5kZXJNb2Rlcyk6IFJlbmRlckRhdGEge1xyXG5cclxuICAgIGNvbnN0IHBhcmFtczogUmVuZGVyRGF0YSA9IG5ldyBSZW5kZXJEYXRhKCk7XHJcblxyXG4gICAgaWYgKHR5cGUgIT09IFJlbmRlck1vZGVzLlJlbmRlcklvbmUpIHtcclxuICAgICAgY29uc3QgY3VycmVudEltYWdlU2l6ZSA9IHRoaXMuZ2V0SW1hZ2VTaXplT25JZCh0aGlzLnNlbGVjdGVkSW1hZ2VTaXplKTtcclxuICAgICAgcGFyYW1zLmltYWdlV2lkdGggPSBOdW1iZXIoY3VycmVudEltYWdlU2l6ZS53aWR0aCk7XHJcbiAgICAgIHBhcmFtcy5pbWFnZUhlaWdodCA9IE51bWJlcihjdXJyZW50SW1hZ2VTaXplLmhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyYW1zLmNvbmZpZ3VyZWRJdGVtID0gdGhpcy5fZ2V0Q29uZmlndXJlZEZ1cm5pdHVyZUl0ZW0oKTtcclxuICAgIHBhcmFtcy5jYW1lcmFGT1YgPSB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5mb3Y7XHJcbiAgICBwYXJhbXMudHlwZSA9IHR5cGU7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IHRoaXMucmVuZGVyTW9kZXMuUmVuZGVyU2hvcCkge1xyXG4gICAgICBwYXJhbXMuY2FtZXJhRk9WID0gMzA7XHJcblxyXG4gICAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnJlbmRlclBhcmFtZXRlcnMuc2V0dGluZ3MgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHBhcmFtcy5zZXR0aW5ncyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5yZW5kZXJQYXJhbWV0ZXJzLnNldHRpbmdzO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IHRoaXMucmVuZGVyTW9kZXMuUmVuZGVyUm9vbSkge1xyXG4gICAgICBjb25zdCByZW5kZXJFbnZpcm9ubWVudCA9IHRoaXMuZ2V0UmVuZGVyRW52aXJvbm1lbnRPbklkKHRoaXMuc2VsZWN0ZWRFbnZpcm9ubWVudCk7XHJcbiAgICAgIHBhcmFtcy5zZXR0aW5ncyA9IG5ldyBSZW5kZXJTZXR0aW5ncygpO1xyXG4gICAgICBwYXJhbXMuc2V0dGluZ3MuZW52aXJvbm1lbnRIZHIgPSByZW5kZXJFbnZpcm9ubWVudC5oZHJGaWxlO1xyXG4gICAgICBwYXJhbXMuc2V0dGluZ3MuZW52aXJvbm1lbnRJbnRlbnNpdHkgPSByZW5kZXJFbnZpcm9ubWVudC5pbnRlbnNpdHk7XHJcblxyXG4gICAgICBjb25zdCBmbG9vclBsYW5IYXNSb29tcyA9IHRoaXMuX3Jvb21TZXJ2aWNlLnJvb21zWzBdO1xyXG4gICAgICBjb25zdCBjZWlsaW5nT3JGbG9vciA9IGZsb29yUGxhbkhhc1Jvb21zID8gdGhpcy5fcm9vbVNlcnZpY2Uucm9vbXNbMF0uY2VpbGluZ1BsYW5lIDogdGhpcy5fZmxvb3JTZXJ2aWNlLmdldEZsb29yUGxhbmUoKTtcclxuICAgICAgY29uc3QgYmIgPSBuZXcgQm94MygpLnNldEZyb21PYmplY3QoY2VpbGluZ09yRmxvb3IpO1xyXG4gICAgICBjb25zdCBiYlNpemU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICBiYi5nZXRTaXplKGJiU2l6ZSk7XHJcbiAgICAgIHBhcmFtcy5zZXR0aW5ncy5leHRyYUxpZ2h0cyA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB4MTogYmIubWluLnggKyB0aGlzLl9jZWlsaW5nTGlnaHRNYXJnaW4sXHJcbiAgICAgICAgICB6MTogYmIubWluLnogKyB0aGlzLl9jZWlsaW5nTGlnaHRNYXJnaW4sXHJcbiAgICAgICAgICB4MjogYmIubWF4LnggLSB0aGlzLl9jZWlsaW5nTGlnaHRNYXJnaW4sXHJcbiAgICAgICAgICB6MjogYmIubWF4LnogLSB0aGlzLl9jZWlsaW5nTGlnaHRNYXJnaW4sXHJcbiAgICAgICAgICBoZWlnaHQ6IGZsb29yUGxhbkhhc1Jvb21zID8gY2VpbGluZ09yRmxvb3IucG9zaXRpb24ueSA6IDIuNixcclxuICAgICAgICB9XHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtcztcclxuICB9XHJcblxyXG4gIC8vIFRoZSBHTFRGRXhwb3J0ZXIgbmVlZHMgbGlnaHRzIHRvIGJlIGNvbmZpZ3VyZWQgbGlrZSB0aGlzLFxyXG4gIC8vIG90aGVyd2lzZSB0aGV5IHdpbGwgYWxsIHBvaW50IGluIHRoZSBzYW1lIGRpcmVjdGlvbi5cclxuICBwcml2YXRlIF9maXhMaWdodChlbGVtZW50OiBEaXJlY3Rpb25hbExpZ2h0IHwgU3BvdExpZ2h0KTogdm9pZCB7XHJcbiAgICBlbGVtZW50LnRhcmdldC5wYXJlbnQgPSBlbGVtZW50O1xyXG4gICAgZWxlbWVudC5sb29rQXQoZWxlbWVudC50YXJnZXQucG9zaXRpb24pO1xyXG4gICAgZWxlbWVudC50YXJnZXQucG9zaXRpb24ueCA9IDA7XHJcbiAgICBlbGVtZW50LnRhcmdldC5wb3NpdGlvbi55ID0gMDtcclxuICAgIGVsZW1lbnQudGFyZ2V0LnBvc2l0aW9uLnogPSAtMTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2VsZW1lbnRNdXN0QmVSZW1vdmVkKGVsZW1lbnQ6IE9iamVjdDNEKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZWxlbWVudC50eXBlID09PSAnUGVyc3BlY3RpdmVDYW1lcmEnKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFlbGVtZW50Lm5hbWUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxjTmFtZSA9IGVsZW1lbnQubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgLy8gZWxlbWVudHMgd2l0aCBhIG5hbWUgc3RhcnRpbmcgd2l0aCBjXyBhcmUgY29ubmVjdG9ycyxcclxuICAgIC8vIHdoaWNoIHNob3VsZCBub3QgYmUgdmlzaWJsZS5cclxuICAgIGlmIChsY05hbWUuc3RhcnRzV2l0aCgnY18nKSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZWxlbWVudC5uYW1lLnN0YXJ0c1dpdGgoJ3NuYXBwaW5nLXByZXZpZXctbWVzaCcpKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2V4cG9ydFRvR2xiKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICBjb25zdCBhc3NldFBhdGg6IHN0cmluZyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGg7XHJcbiAgICAvLyBUaGUgZ3JvdW5kIHBsYW5lIGxvb2tzIG9kZCBpbiByZW5kZXJzLlxyXG4gICAgLy8gVGhlIGh1ZC1yaW5nIGFuZCBodWQtY2lyY2xlIGFyZSB0aGUgd2Fsa3Rocm91Z2ggbW9kZSBtYXJrZXIsXHJcbiAgICAvLyB3aGljaCBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcmVuZGVyZWQuXHJcbiAgICBjb25zdCBlbGVtZW50c1RvUmVtb3ZlID0gWydncm91bmQtcGxhbmUnLCAnaHVkLXJpbmcnLCAnaHVkLWNpcmNsZSddO1xyXG5cclxuICAgIGxldCBzY2VuZTogU2NlbmU7XHJcbiAgICB0cnkge1xyXG4gICAgICBzY2VuZSA9IHRoaXMuX3NjZW5lU2VydmljZS5zY2VuZS5jbG9uZSgpO1xyXG5cclxuICAgICAgZWxlbWVudHNUb1JlbW92ZS5mb3JFYWNoKGVsZW1lbnROYW1lID0+IHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZE9iamVjdDogT2JqZWN0M0QgPSBzY2VuZS5nZXRPYmplY3RCeU5hbWUoZWxlbWVudE5hbWUpO1xyXG4gICAgICAgIHNjZW5lLnJlbW92ZShzZWxlY3RlZE9iamVjdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyBVc2luZyB0aGUgcGFyZW50cywgYmVjYXVzZSBzY2VuZS5yZW1vdmUgZG9lcyBub3Qgc2VlbSB0byB3b3JrIGNvcnJlY3RseS5cclxuICAgICAgY29uc3QgcGFyZW50cyA9IFtdO1xyXG4gICAgICBzY2VuZS50cmF2ZXJzZShlbGVtZW50ID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIERpcmVjdGlvbmFsTGlnaHQgfHwgZWxlbWVudCBpbnN0YW5jZW9mIFNwb3RMaWdodCkge1xyXG4gICAgICAgICAgdGhpcy5fZml4TGlnaHQoZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC52aXNpYmxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJFbGVtZW50IFwiICsgZWxlbWVudC5uYW1lICsgXCIgd2FzIGludmlzaWJsZSwgbWFraW5nIGl0IHZpc2libGUuXCIpO1xyXG4gICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgTWVzaCAmJiBlbGVtZW50Lm5hbWUgJiYgZWxlbWVudC5uYW1lLnN0YXJ0c1dpdGgoJ2N1c3RvbU1lc2hXaW5kb3cnKSkge1xyXG4gICAgICAgICAgbGV0IGhhc0N1c3RvbVRleHR1cmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5tYXRlcmlhbCBpbnN0YW5jZW9mIE1hdGVyaWFsKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5tYXRlcmlhbCBpbnN0YW5jZW9mIE1lc2hQaG9uZ01hdGVyaWFsICYmIGVsZW1lbnQubWF0ZXJpYWwubWFwKSB7XHJcbiAgICAgICAgICAgICAgaGFzQ3VzdG9tVGV4dHVyZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxlbWVudC5tYXRlcmlhbCA9IFJlbmRlclNlcnZpY2UuTWFrZVdpbmRvd01hdGVyaWFsVHJhbnNwYXJlbnQoZWxlbWVudC5tYXRlcmlhbCk7XHJcblxyXG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQubWF0ZXJpYWwpKSB7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50Lm1hdGVyaWFsLmZvckVhY2goZnVuY3Rpb24gKG1hdGVyaWFsOiBNYXRlcmlhbCwgaW5kZXgpIHtcclxuICAgICAgICAgICAgICBpZiAobWF0ZXJpYWwgaW5zdGFuY2VvZiBNZXNoUGhvbmdNYXRlcmlhbCAmJiBtYXRlcmlhbC5tYXApIHtcclxuICAgICAgICAgICAgICAgIGhhc0N1c3RvbVRleHR1cmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbGVtZW50Lm1hdGVyaWFsW2luZGV4XSA9IFJlbmRlclNlcnZpY2UuTWFrZVdpbmRvd01hdGVyaWFsVHJhbnNwYXJlbnQobWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoIWhhc0N1c3RvbVRleHR1cmUpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5uYW1lID0gJ2dsYXNzJztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50TXVzdEJlUmVtb3ZlZChlbGVtZW50KSkge1xyXG4gICAgICAgICAgcGFyZW50cy5wdXNoKGVsZW1lbnQucGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBwYXJlbnRzLmZvckVhY2gocGFyZW50ID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gcGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZWxlbWVudE11c3RCZVJlbW92ZWQocGFyZW50LmNoaWxkcmVuW2ldKSkge1xyXG4gICAgICAgICAgICBwYXJlbnQucmVtb3ZlKHBhcmVudC5jaGlsZHJlbltpXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgc2NlbmUuYWRkKHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLmNsb25lKCkpO1xyXG5cclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICB0cnM6IGZhbHNlLFxyXG4gICAgICAgIG9ubHlWaXNpYmxlOiBmYWxzZSxcclxuICAgICAgICB0cnVuY2F0ZURyYXdSYW5nZTogdHJ1ZSxcclxuICAgICAgICBiaW5hcnk6IHRydWUsXHJcbiAgICAgICAgZm9yY2VJbmRpY2VzOiBmYWxzZSxcclxuICAgICAgICBmb3JjZVBvd2VyT2ZUd29UZXh0dXJlczogZmFsc2UsXHJcbiAgICAgICAgLy8gbWF4VGV4dHVyZVNpemU6IDUwMCxcclxuICAgICAgICBlbWJlZEltYWdlczogdHJ1ZSxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IGV4cG9ydGVyOiBHTFRGRXhwb3J0ZXIgPSBuZXcgR0xURkV4cG9ydGVyKCk7XHJcbiAgICAgIGxldCBmaWxlbmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgZXhwb3J0ZXIucGFyc2Uoc2NlbmUsIGFzeW5jIChleHBvcnRlZFNjZW5lOiBBcnJheUJ1ZmZlcikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYmxvYjogQmxvYiA9IG5ldyBCbG9iKFtleHBvcnRlZFNjZW5lXSwge3R5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nfSk7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IGF3YWl0IEZpbGVVdGlscy5TYXZlR0xCRmlsZShibG9iLCBhc3NldFBhdGgpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgZmlsZW5hbWUgPSByZXN1bHQucGF0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc29sdmUoZmlsZW5hbWUpO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB9LCBvcHRpb25zKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHRocm93IChlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzdGFydFJlbmRlcmluZygpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBpZiAodGhpcy5yZW5kZXJRdWV1ZS5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICBhd2FpdCB0aGlzLmNoZWNrQ29ubmVjdGlvbigpO1xyXG5cclxuICAgICAgaWYgKHRoaXMucmVuZGVyUXVldWVbMF0ucmVuZGVyUHJvZ3Jlc3MgPT09IDAgfHwgdGhpcy5yZW5kZXJRdWV1ZVswXS5yZW5kZXJQcm9ncmVzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJRdWV1ZVswXS5yZW5kZXJTdGF0dXMgPSBSZW5kZXJTdGF0dXMuSXNSdW5uaW5nO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbSA9IHRoaXMucmVuZGVyUXVldWVbMF07XHJcbiAgICAgICAgdGhpcy5yZW5kZXJRdWV1ZS5zaGlmdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucGFyYW1zLmdsYlBhdGggPSBhd2FpdCB0aGlzLl9leHBvcnRUb0dsYigpXHJcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RhcnRSZW5kZXJMb29wKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2NvbGlqblJlbmRlclNjZW5lKHBhcmFtczogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCByZXF1ZXN0UGFyYW1zID0gW3tcclxuICAgICAgICBpZDogMSxcclxuICAgICAgICBqc29ucnBjOiAnMi4wJyxcclxuICAgICAgICBtZXRob2Q6ICdjb2xpam5fcmVuZGVyX3NjZW5lX2Zyb21fZ2xiJyxcclxuICAgICAgICBwYXJhbXM6IHBhcmFtc1xyXG4gICAgICB9XTtcclxuICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgIHhoci5vcGVuKCdQT1NUJywgdGhpcy5fZ2V0UmVuZGVyU2VydmljZVVybCgpKTtcclxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTtcclxuICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICBpZiAoeGhyLnN0YXR1cyA+PSAyMDAgJiYgeGhyLnN0YXR1cyA8IDMwMCkge1xyXG4gICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcclxuICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkocmVxdWVzdFBhcmFtcykpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9zdGFydFJlbmRlckxvb3AoKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgLy8gdGVtcG9yYXJ5IHNvbHV0aW9uIGJlY2F1c2UgbGFyZ2UgcmVxdWVzdCBvdmVyIHdlYnNvY2tldHMgYXJlIG5vdCB3b3JraW5nIGJlY2F1c2Ugb2YgYW4gZXJyb3IgaW4gdGhlIHNvZnR3YXJlIG9mIG1pZ2VuaXVzXHJcbiAgICBsZXQgW2luZm9dID0gYXdhaXQgdGhpcy5fY29saWpuUmVuZGVyU2NlbmUodGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcyk7XHJcbiAgICBpbmZvID0gaW5mby5yZXN1bHQ7XHJcblxyXG4gICAgLypcclxuICAgIGNvbnN0IFsgaW5mbyBdID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnF1ZXVlX2NvbW1hbmRzKClcclxuICAgICAgLnF1ZXVlKG5ldyBDb21tYW5kKCdjb2xpam5fcmVuZGVyX3NjZW5lJywgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcyksIHRydWUpXHJcbiAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAqL1xyXG5cclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5ob3N0ID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnVybDtcclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5rZXkgPSBpbmZvLnNjZW5lX25hbWU7XHJcbiAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0udHlwZSA9IHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMudHlwZTtcclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5zdGFydERhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5pbWFnZVNpemUgPSB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucGFyYW1zLmltYWdlV2lkdGggKyAnIHggJyArIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMuaW1hZ2VIZWlnaHQ7XHJcblxyXG4gICAgdGhpcy5fc2V0UmVuZGVyUHJvZ3Jlc3MoUmVuZGVyU3RhdHVzLklzUnVubmluZywgMCwgMCk7XHJcblxyXG4gICAgdGhpcy5zY2VuZURhdGEgPSBpbmZvO1xyXG4gICAgaWYgKCF0aGlzLnNjZW5lRGF0YSB8fCB0aGlzLnNjZW5lRGF0YS5lcnJvcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zY2VuZURhdGEuaW1hZ2VfaW5mbyAmJiB0aGlzLnNjZW5lRGF0YS5pbWFnZV9pbmZvLm5lZWRzX3JlbmRlciA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucmVuZGVyZWQgPSB0cnVlO1xyXG4gICAgICBhd2FpdCB0aGlzLl9zdGFydFJlbmRlclN0cmVhbSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fYWZ0ZXJSZW5kZXJpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3F1aXRSZW5kZXJMb29wKCkge1xyXG5cclxuICAgIC8vIGlmICh0aGlzLnNjZW5lRGF0YS5sb29wX25hbWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlcnZpY2UudmFsaWRhdGUoKSAhPT0gZmFsc2UpIHtcclxuICAgIC8vICAgY29uc3QgW10gPSBhd2FpdCB0aGlzLnNlcnZpY2UucXVldWVfY29tbWFuZHMoKVxyXG4gICAgLy8gICAgIC5xdWV1ZShuZXcgQ29tbWFuZCgncmVuZGVyX2xvb3BfcXVpdCcsIHtcclxuICAgIC8vICAgICAgIHJlbmRlcl9sb29wX25hbWU6IHRoaXMuc2NlbmVEYXRhLmxvb3BfbmFtZVxyXG4gICAgLy8gICAgIH0pKVxyXG4gICAgLy8gICAgIC5leGVjdXRlKCk7XHJcbiAgICAvLyAgIHRoaXMuc2VydmljZS5yZW1vdmVfc3RyZWFtKHRoaXMuc2NlbmVEYXRhLmxvb3BfbmFtZSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9zdGFydFJlbmRlclN0cmVhbSgpIHtcclxuICAgIC8vXHJcbiAgICAvLyB0cnkge1xyXG4gICAgLy9cclxuICAgIC8vICAgdGhpcy5zdHJlYW1pbmcuc3RyZWFtID0gdGhpcy5zZXJ2aWNlLmNyZWF0ZV9zdHJlYW0oKTtcclxuICAgIC8vICAgYXdhaXQgdGhpcy5zdHJlYW1pbmcuc3RyZWFtLnN0YXJ0KHtyZW5kZXJfbG9vcF9uYW1lOiB0aGlzLnNjZW5lRGF0YS5sb29wX25hbWUsIGltYWdlX2Zvcm1hdDogJ2pwZycsIHF1YWxpdHk6ICcxMDAnfSk7XHJcbiAgICAvL1xyXG4gICAgLy8gICB0aGlzLnN0cmVhbWluZy5zdHJlYW0ub24oJ2ltYWdlJywgYXN5bmMgKG9iamVjdCkgPT4ge1xyXG4gICAgLy8gICAgIHRoaXMuX2h0bWxJbWFnZURpc3BsYXkob2JqZWN0LCBudWxsKTtcclxuICAgIC8vICAgICBjb25zdCBbcHJvZ3Jlc3NdID0gYXdhaXQgdGhpcy5zZXJ2aWNlLnF1ZXVlX2NvbW1hbmRzKClcclxuICAgIC8vICAgICAgIC5xdWV1ZShuZXcgQ29tbWFuZCgncmVuZGVyX2xvb3BfZ2V0X3JlbmRlcl9wcm9ncmVzcycsIHtcclxuICAgIC8vICAgICAgICAgcmVuZGVyX2xvb3BfbmFtZTogdGhpcy5zY2VuZURhdGEubG9vcF9uYW1lXHJcbiAgICAvLyAgICAgICB9KSwgdHJ1ZSlcclxuICAgIC8vICAgICAgIC5leGVjdXRlKCk7XHJcbiAgICAvL1xyXG4gICAgLy8gICAgIGlmIChwcm9ncmVzcy5wcm9ncmVzc2lvbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLl9zZXRSZW5kZXJQcm9ncmVzcyhSZW5kZXJTdGF0dXMuSXNSdW5uaW5nLCBNYXRoLmNlaWwoKHByb2dyZXNzLnByb2dyZXNzaW9uICogMTAwKSksIHByb2dyZXNzLml0ZXJhdGlvbik7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy9cclxuICAgIC8vICAgICBpZiAob2JqZWN0LnJlc3VsdCA9PT0gMSkge1xyXG4gICAgLy9cclxuICAgIC8vICAgICAgIGF3YWl0IHRoaXMuc2VydmljZS5xdWV1ZV9jb21tYW5kcygpXHJcbiAgICAvLyAgICAgICAgIC5xdWV1ZShuZXcgQ29tbWFuZCgncmVuZGVyX2xvb3Bfc2F2ZV90b19kaXNrJywge1xyXG4gICAgLy8gICAgICAgICAgIHJlbmRlcl9sb29wX25hbWU6IHRoaXMuc2NlbmVEYXRhLmxvb3BfbmFtZSxcclxuICAgIC8vICAgICAgICAgICBmb3JtYXQ6ICdqcGcnLFxyXG4gICAgLy8gICAgICAgICAgIHF1YWxpdHk6IDkwLFxyXG4gICAgLy8gICAgICAgICAgIHBhdGg6IHRoaXMuc2NlbmVEYXRhLmltYWdlX2luZm8udXJsXHJcbiAgICAvLyAgICAgICAgIH0pLCB0cnVlKVxyXG4gICAgLy8gICAgICAgICAuZXhlY3V0ZSgpO1xyXG4gICAgLy9cclxuICAgIC8vICAgICAgIGlmICh0aGlzLnN0cmVhbWluZy5zdHJlYW0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLnN0cmVhbWluZy5zdHJlYW0uc3RvcCgpO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgYXdhaXQgdGhpcy5fcXVpdFJlbmRlckxvb3AoKTtcclxuICAgIC8vICAgICAgIHRoaXMuX2FmdGVyUmVuZGVyaW5nKCk7XHJcbiAgICAvLyAgICAgICByZXR1cm47XHJcbiAgICAvL1xyXG4gICAgLy8gICAgIH0gZWxzZSBpZiAob2JqZWN0LnJlc3VsdCA8IDApIHtcclxuICAgIC8vXHJcbiAgICAvLyAgICAgICBhd2FpdCB0aGlzLl9vblJlbmRlckVycm9yKCk7XHJcbiAgICAvLyAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vXHJcbiAgICAvLyB9IGNhdGNoIChlcnIpIHtcclxuICAgIC8vXHJcbiAgICAvLyAgIGF3YWl0IHRoaXMuX29uUmVuZGVyRXJyb3IoKTtcclxuICAgIC8vICAgcmV0dXJuO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2V0UmVuZGVyUHJvZ3Jlc3Moc3RhdHVzOiBSZW5kZXJTdGF0dXMsIHByb2dyZXNzOiBudW1iZXIsIGl0ZXJhdGlvbnM6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNlcnZlckRhdGEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLmVuZERhdGVUaW1lID0gbmV3IERhdGUoKTtcclxuICAgIHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5yZW5kZXJTdGF0dXMgPSBzdGF0dXM7XHJcbiAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucmVuZGVyUHJvZ3Jlc3MgPSBwcm9ncmVzcztcclxuICAgIGlmIChpdGVyYXRpb25zID4gMCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRRdWV1ZVJlbmRlckl0ZW0ucmVuZGVySXRlcmF0aW9ucyA9IGl0ZXJhdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VydmVyRGF0YS5yZW5kZXJNb2RlID09PSBSZW5kZXJNb2Rlcy5SZW5kZXJJb25lKSB7XHJcbiAgICAgIGNvbnN0IHJlbmRlcjogUmVuZGVyID0gdGhpcy5nZXRSZW5kZXJPbklkKHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMucmVuZGVyLmlkKTtcclxuICAgICAgcmVuZGVyLnN0YXR1cyA9IHN0YXR1cztcclxuICAgICAgcmVuZGVyLnByb2dyZXNzID0gcHJvZ3Jlc3M7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9vblJlbmRlckVycm9yKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICAgIHRoaXMuX3NldFJlbmRlclByb2dyZXNzKFJlbmRlclN0YXR1cy5Jc1N0b3BwZWQsIDAsIDApO1xyXG4gICAgYXdhaXQgdGhpcy5fcXVpdFJlbmRlckxvb3AoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX29uUmVuZGVyQ2xvc2UoKTogUHJvbWlzZTx2b2lkPiB7XHJcblxyXG4gICAgdGhpcy5fc2V0UmVuZGVyUHJvZ3Jlc3MoUmVuZGVyU3RhdHVzLklzU3RvcHBlZCwgMCwgMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hZnRlclJlbmRlcmluZygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zZXJ2ZXJEYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zZXRSZW5kZXJQcm9ncmVzcyhSZW5kZXJTdGF0dXMuSXNTdWNjZXNzLCAxMDAsIDApO1xyXG5cclxuICAgIGNvbnN0IGltYWdlVXJsID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLmFzc2V0UGF0aC5yZXBsYWNlKCdjb250ZW50NDMvJywgJycpICsgdGhpcy5zY2VuZURhdGEuaW1hZ2VfaW5mby51cmw7XHJcbiAgICBpZiAodGhpcy5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IFJlbmRlck1vZGVzLlJlbmRlclJvb20pIHtcclxuICAgICAgdGhpcy5yZW5kZXJlZFJvb21JbWFnZXMudW5zaGlmdChpbWFnZVVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJJbWFnZUNoYW5nZWQubmV4dChpbWFnZVVybCk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VydmVyRGF0YS5yZW5kZXJNb2RlID09PSBSZW5kZXJNb2Rlcy5SZW5kZXJJb25lKSB7XHJcbiAgICAgIGNvbnN0IHJlbmRlcjogUmVuZGVyID0gdGhpcy5nZXRSZW5kZXJPbklkKHRoaXMuY3VycmVudFF1ZXVlUmVuZGVySXRlbS5wYXJhbXMucmVuZGVyLmlkKTtcclxuICAgICAgcmVuZGVyLnVybCA9IGltYWdlVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbmZpZ3VyZWRJdGVtID0gdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLnBhcmFtcy5jb25maWd1cmVkSXRlbTtcclxuICAgIGNvbnN0IGlzU2luZ2xlSXRlbSA9IHRoaXMuc2VydmVyRGF0YS5yZW5kZXJNb2RlICE9PSBSZW5kZXJNb2Rlcy5SZW5kZXJSb29tO1xyXG4gICAgdGhpcy5fZ29vZ2xlVGFnTWFuYWdlci5zZW5kRXZlbnQoR29vZ2xlVGFnTWFuYWdlckV2ZW50LlJlbmRlciwge1xyXG4gICAgICAnYXJ0aWNsZU5yJzogaXNTaW5nbGVJdGVtID8gY29uZmlndXJlZEl0ZW0uc2t1IDogJ3JlbmRlclJvb20nLFxyXG4gICAgICAncHJvZHVjdCc6IGlzU2luZ2xlSXRlbSA/IGNvbmZpZ3VyZWRJdGVtLm5hbWUgOiAncmVuZGVyUm9vbScsXHJcbiAgICAgICdkaW1lbnNpb25zJzogdGhpcy5jdXJyZW50UXVldWVSZW5kZXJJdGVtLmltYWdlU2l6ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zdGFydFJlbmRlcmluZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyU2VydmljZVVybCgpOiBzdHJpbmcge1xyXG5cclxuICAgIHJldHVybiBgJHsodGhpcy5zZXJ2ZXJEYXRhLnNlY3VyZSA/ICdodHRwcycgOiAnaHR0cCcpfTovLyR7dGhpcy5zZXJ2ZXJEYXRhLmhvc3R9OiR7dGhpcy5zZXJ2ZXJEYXRhLnBvcnR9YDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb3JjZVJlbmRlckltYWdlKCk6IHZvaWQge1xyXG4gICAgY29uc3QgZmxvb3JHcm91cCA9IHRoaXMuX2dldEZpcnN0Q3VzdG9tRmxvb3JJdGVtRnJvbVNjZW5lKCk7XHJcbiAgICBpZiAoZmxvb3JHcm91cCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9jaGVja1Zpc2libGVVcGRhdGVzKGZsb29yR3JvdXAsIHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfY2hlY2tWaXNpYmxlVXBkYXRlcyhmdXJuaXR1cmU6IEl0ZW0sIGZvcmNlUmVuZGVyOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICghdGhpcy5zZXJ2ZXJEYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWZ1cm5pdHVyZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VydmVyRGF0YS5yZW5kZXJNb2RlID09PSB0aGlzLnJlbmRlck1vZGVzLlJlbmRlcklvbmUpIHtcclxuICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5fZXhwb3J0U2VydmljZS5nZXRFeHBvcnRPYmplY3RGcm9tQ3VzdG9tRmxvb3JHcm91cChmdXJuaXR1cmUpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQcm9kdWN0SGFzaCA9IG9iamVjdC5kZWZhdWx0UmVuZGVyUGF0aDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZXJ2ZXJEYXRhLnJlbmRlck1vZGUgPT09IHRoaXMucmVuZGVyTW9kZXMuUmVuZGVyU2hvcCkge1xyXG4gICAgICBjb25zdCBvYmplY3QgPSB0aGlzLl9leHBvcnRTZXJ2aWNlLmdldEV4cG9ydE9iamVjdEZyb21DdXN0b21GbG9vckdyb3VwKGZ1cm5pdHVyZSk7XHJcblxyXG4gICAgICBpZiAoIShKU09OLnN0cmluZ2lmeSh0aGlzLnByZXZJdGVtKSAhPT0gSlNPTi5zdHJpbmdpZnkob2JqZWN0KSB8fCBmb3JjZVJlbmRlcikpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmVuZGVyaW5nU3RhcnRlZC5uZXh0KCk7XHJcbiAgICAgIHRoaXMucHJldkl0ZW0gPSBvYmplY3Q7XHJcbiAgICAgIGNvbnN0IHF1ZXVlSXRlbSA9IG5ldyBSZW5kZXJRdWV1ZUl0ZW0oKTtcclxuICAgICAgcXVldWVJdGVtLnBhcmFtcyA9IHRoaXMuZ2V0UmVuZGVyUGFyYW1ldGVycyh0aGlzLnJlbmRlck1vZGVzLlJlbmRlclNob3ApO1xyXG4gICAgICBxdWV1ZUl0ZW0ucGFyYW1zLmNhbWVyYU1hdHJpeCA9IHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZS5lbGVtZW50cztcclxuICAgICAgcXVldWVJdGVtLnBhcmFtcy5mb3JjZVJlbmRlciA9IGZvcmNlUmVuZGVyO1xyXG4gICAgICB0aGlzLnJlbmRlclF1ZXVlID0gW107XHJcbiAgICAgIHRoaXMucmVuZGVyUXVldWUucHVzaChxdWV1ZUl0ZW0pO1xyXG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0UmVuZGVyaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9odG1sSW1hZ2VEaXNwbGF5KGltYWdlLCB1cmxDcmVhdG9yKSB7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdXJsQ3JlYXRvciA9IHVybENyZWF0b3IgfHwgKHdpbmRvdyA/ICh3aW5kb3cuVVJMIHx8ICh3aW5kb3cgYXMgYW55KS53ZWJraXRVUkwpIDogdW5kZWZpbmVkKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtpbWFnZS5pbWFnZV0sIHt0eXBlOiBpbWFnZS5taW1lX3R5cGV9KTtcclxuICAgIGNvbnN0IHVybCA9IHVybENyZWF0b3IuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyUm9vbUltYWdlQ2hhbmdlZC5uZXh0KHVybCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVuZGVyT25JZChpZDogbnVtYmVyKTogYW55IHtcclxuICAgIGxldCByZXR1cm5SZW5kZXIgPSBudWxsO1xyXG4gICAgdGhpcy5yZW5kZXJzLmZvckVhY2goKHg6IFJlbmRlcikgPT4ge1xyXG4gICAgICBpZiAoeC5pZCA9PT0gaWQpIHtcclxuICAgICAgICByZXR1cm5SZW5kZXIgPSB4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5SZW5kZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW1hZ2VTaXplT25JZChpZDogbnVtYmVyKTogYW55IHtcclxuICAgIGxldCByZXR1cm5TaXplID0gbnVsbDtcclxuICAgIHRoaXMuaW1hZ2VTaXplcy5mb3JFYWNoKCh4OiBJbWFnZVNpemUpID0+IHtcclxuICAgICAgaWYgKHguaWQgPT09IGlkKSB7XHJcbiAgICAgICAgcmV0dXJuU2l6ZSA9IHg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJldHVyblNpemU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVuZGVyRW52aXJvbm1lbnRPbklkKGlkOiBudW1iZXIpOiBSZW5kZXJFbnZpcm9ubWVudCB7XHJcbiAgICBsZXQgcmV0dXJuRW52aXJvbm1lbnQgPSBudWxsO1xyXG4gICAgdGhpcy5yZW5kZXJFbnZpcm9ubWVudHMuZm9yRWFjaCgocmVuZGVyRW52aXJvbm1lbnQ6IFJlbmRlckVudmlyb25tZW50KSA9PiB7XHJcbiAgICAgIGlmIChyZW5kZXJFbnZpcm9ubWVudC5pZCA9PT0gaWQpIHtcclxuICAgICAgICByZXR1cm5FbnZpcm9ubWVudCA9IHJlbmRlckVudmlyb25tZW50O1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmV0dXJuRW52aXJvbm1lbnQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0TGlnaHRuaW5nT25JZChpZDogbnVtYmVyKTogYW55IHtcclxuICAgIGxldCByZXR1cm5MaWdodG5pbmcgPSBudWxsO1xyXG4gICAgdGhpcy5saWdodG5pbmdzLmZvckVhY2goKHg6IExpZ2h0bmluZykgPT4ge1xyXG4gICAgICBpZiAoeC5pZCA9PT0gaWQpIHtcclxuICAgICAgICByZXR1cm5MaWdodG5pbmcgPSB4O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXR1cm5MaWdodG5pbmc7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIEV4cG9ydCBmdW5jdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXHJcblxyXG4gIHByaXZhdGUgX2dldEZpcnN0Q3VzdG9tRmxvb3JJdGVtRnJvbVNjZW5lKCk6IEN1c3RvbUZsb29ySXRlbSB8IG51bGwge1xyXG5cclxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLmNoaWxkcmVuO1xyXG5cclxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPD0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBhID0gMDsgYSA8IGNoaWxkcmVuLmxlbmd0aDsgYSsrKSB7XHJcbiAgICAgIGlmIChjaGlsZHJlblthXSBpbnN0YW5jZW9mIEN1c3RvbUZsb29ySXRlbSkge1xyXG4gICAgICAgIHJldHVybiA8Q3VzdG9tRmxvb3JJdGVtPmNoaWxkcmVuW2FdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjaGlsZHJlblthXSBpbnN0YW5jZW9mIEl0ZW1Hcm91cCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IDxJdGVtR3JvdXA+Y2hpbGRyZW5bYV07XHJcbiAgICAgICAgaWYgKGl0ZW1Hcm91cC5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBpdGVtR3JvdXAuaXRlbXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgQ3VzdG9tRmxvb3JJdGVtKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0Q29uZmlndXJlZEZ1cm5pdHVyZUl0ZW0oKTogRXhwb3J0T2JqZWN0IHwgbnVsbCB7XHJcblxyXG4gICAgY29uc3QgZmxvb3Jncm91cCA9IHRoaXMuX2dldEZpcnN0Q3VzdG9tRmxvb3JJdGVtRnJvbVNjZW5lKCk7XHJcblxyXG4gICAgaWYgKGZsb29yZ3JvdXAgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2V4cG9ydFNlcnZpY2UuZ2V0RXhwb3J0T2JqZWN0RnJvbUN1c3RvbUZsb29yR3JvdXAoZmxvb3Jncm91cCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -410,7 +410,7 @@ FloorCatalogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
410
410
  </div>
411
411
  </div>
412
412
 
413
- `, isInline: true, styles: [".base-button{cursor:pointer;color:#fff;background:#da9803;border:1px solid #da9803;border-radius:3px;box-sizing:border-box;padding:4px 10px;line-height:30px;width:100%}.base-button:hover{background:#da9803;color:#fff}.floor-catalog-wrap .floor-catalog-selected-floor{background:#eee;display:flex;box-sizing:border-box;padding:15px;margin:5px 0 15px}.floor-catalog-wrap .floor-catalog-selected-floor .selected-floor-thumbnail{min-width:105px;max-width:160px;margin-right:10px;justify-content:center;align-items:center;vertical-align:middle;display:flex;height:auto}.floor-catalog-wrap .floor-catalog-selected-floor .selected-floor-thumbnail img{display:block;max-width:100%;height:max-content}.floor-catalog-wrap .selected-floor-info{display:flex;flex-direction:column;grid-gap:10px;gap:10px}.floor-catalog-wrap .selected-floor-info p{margin:0;font-size:14px}.floor-catalog-wrap .floor-catalog-standard-floor{background:#eee;box-sizing:border-box;padding:15px;margin:5px 0 15px}.floor-catalog-wrap .floor-catalog-standard-floor .selected-floor-info p{margin:0;font-size:14px}.selected-floor-properties p{font-weight:bold;margin:0 0 10px;padding:0;font-size:14px}.selected-floor-properties .selected-floor-scale,.selected-floor-properties .floor-installation{display:flex;grid-gap:10px;gap:10px;margin-bottom:20px;align-items:center}.selected-floor-properties .selected-floor-scale .up-down-input-wrapper,.selected-floor-properties .floor-installation .up-down-input-wrapper{position:relative}.selected-floor-properties .selected-floor-scale .up-down-input-wrapper label,.selected-floor-properties .floor-installation .up-down-input-wrapper label{position:absolute;font-size:12px;padding:5px}.selected-floor-properties .selected-floor-scale .selected-floor-input,.selected-floor-properties .floor-installation .selected-floor-input{border:1px solid #9FA9B4;box-sizing:border-box;padding:15px 10px 0;border-radius:3px;line-height:30px;width:100%}.selected-floor-properties .selected-floor-scale .placement-input,.selected-floor-properties .floor-installation .placement-input{min-width:300px}.selected-floor-properties .selected-floor-scale .scale-input,.selected-floor-properties .floor-installation .scale-input{min-width:100px}.selected-floor-properties .selected-floor-scale .range-slider,.selected-floor-properties .floor-installation .range-slider{color:#da9803;min-width:180px}.selected-floor-properties .up-down-buttons{display:flex;grid-gap:10px;gap:10px;align-items:center;justify-content:center}.selected-floor-properties button{margin:0;cursor:pointer;border:none;box-sizing:border-box;padding:0;height:22px;width:22px;background:transparent;border-radius:100%}.selected-floor-properties button ::ng-deep co-icon{display:block;width:22px;height:22px}.selected-floor-properties button:hover ::ng-deep co-icon svg{fill:#da9803}:host ::ng-deep mat-icon{width:18px;height:18px}:host ::ng-deep mat-icon svg path{fill:#5b6875}.placeholderimage{height:90px;width:150px;background-color:#5b6875}.floor-detail-item{display:flex;justify-content:space-between}.floor-detail-item p{font-weight:300;font-size:14px}.floor-detail-download{display:flex;justify-content:end}.floor-detail-download button{max-width:150px}\n"], components: [{ type: i5.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }, { type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "required", "checked", "aria-describedby"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i7.ExportPdfComponent, selector: "rp-pdf-export", inputs: ["labelPlanksLeft", "labelPlanksRight", "labelPlanksTotal", "labelPlanksAngle"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": i9.LocalizePipe } });
413
+ `, isInline: true, styles: [".base-button{cursor:pointer;color:#fff;background:#da9803;border:1px solid #da9803;border-radius:3px;box-sizing:border-box;padding:4px 10px;line-height:30px;width:100%}.base-button:hover{background:#da9803;color:#fff}.floor-catalog-wrap .floor-catalog-selected-floor{background:#eee;display:flex;box-sizing:border-box;padding:15px;margin:5px 0 15px}.floor-catalog-wrap .floor-catalog-selected-floor .selected-floor-thumbnail{min-width:105px;max-width:160px;margin-right:10px;justify-content:center;align-items:center;vertical-align:middle;display:flex;height:auto}.floor-catalog-wrap .floor-catalog-selected-floor .selected-floor-thumbnail img{display:block;max-width:100%;height:max-content}.floor-catalog-wrap .selected-floor-info{display:flex;flex-direction:column;grid-gap:10px;gap:10px}.floor-catalog-wrap .selected-floor-info p{margin:0;font-size:14px}.floor-catalog-wrap .floor-catalog-standard-floor{background:#eee;box-sizing:border-box;padding:15px;margin:5px 0 15px}.floor-catalog-wrap .floor-catalog-standard-floor .selected-floor-info p{margin:0;font-size:14px}.selected-floor-properties p{font-weight:bold;margin:0 0 10px;padding:0;font-size:14px}.selected-floor-properties .selected-floor-scale,.selected-floor-properties .floor-installation{display:flex;grid-gap:10px;gap:10px;margin-bottom:20px;align-items:center}.selected-floor-properties .selected-floor-scale .up-down-input-wrapper,.selected-floor-properties .floor-installation .up-down-input-wrapper{position:relative}.selected-floor-properties .selected-floor-scale .up-down-input-wrapper label,.selected-floor-properties .floor-installation .up-down-input-wrapper label{position:absolute;font-size:12px;padding:5px}.selected-floor-properties .selected-floor-scale .selected-floor-input,.selected-floor-properties .floor-installation .selected-floor-input{border:1px solid #9FA9B4;box-sizing:border-box;padding:15px 10px 0;border-radius:3px;line-height:30px;width:100%}.selected-floor-properties .selected-floor-scale .placement-input,.selected-floor-properties .floor-installation .placement-input{min-width:300px}.selected-floor-properties .selected-floor-scale .scale-input,.selected-floor-properties .floor-installation .scale-input{min-width:100px}.selected-floor-properties .selected-floor-scale .range-slider,.selected-floor-properties .floor-installation .range-slider{color:#da9803;min-width:180px}.selected-floor-properties .up-down-buttons{display:flex;grid-gap:10px;gap:10px;align-items:center;justify-content:center}.selected-floor-properties button{margin:0;cursor:pointer;border:none;box-sizing:border-box;padding:0;height:22px;width:22px;background:transparent;border-radius:100%}.selected-floor-properties button ::ng-deep co-icon{display:block;width:22px;height:22px}.selected-floor-properties button:hover ::ng-deep co-icon svg{fill:#da9803}:host ::ng-deep mat-icon{width:18px;height:18px}:host ::ng-deep mat-icon svg path{fill:#5b6875}.placeholderimage{height:90px;width:150px;background-color:#5b6875}.floor-detail-item{display:flex;justify-content:space-between}.floor-detail-item p{font-weight:300;font-size:14px}.floor-detail-download{display:flex;justify-content:flex-end}.floor-detail-download button{max-width:150px}\n"], components: [{ type: i5.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }, { type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "required", "checked", "aria-describedby"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i7.ExportPdfComponent, selector: "rp-pdf-export", inputs: ["labelPlanksLeft", "labelPlanksRight", "labelPlanksTotal", "labelPlanksAngle"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": i9.LocalizePipe } });
414
414
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FloorCatalogComponent, decorators: [{
415
415
  type: Component,
416
416
  args: [{