@colijnit/homedecorator 255.1.4 → 255.1.6

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 (89) hide show
  1. package/app/core/enum/message-type.enum.d.ts +3 -1
  2. package/app/core/interface/message-with-payload.interface.d.ts +6 -0
  3. package/app/core/model/homedecorator-settings-options.d.ts +2 -0
  4. package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
  5. package/app/core/service/homedecorator-connector-adapter.service.d.ts +2 -0
  6. package/app/core/service/homedecorator-connector.service.d.ts +5 -4
  7. package/app/core/service/homedecorator-settings.service.d.ts +2 -1
  8. package/app/core/service/presets.service.d.ts +3 -1
  9. package/app/homedecorator.component.d.ts +3 -1
  10. package/app/homedecorator.module.d.ts +2 -1
  11. package/app/plugins/core3d/service/floor-pattern.service.d.ts +1 -1
  12. package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +2 -1
  13. package/app/plugins/core3d/service/floor.service.d.ts +3 -1
  14. package/app/plugins/core3d/service/post-processing.service.d.ts +21 -7
  15. package/app/plugins/core3d/service/scene.service.d.ts +1 -1
  16. package/app/plugins/core3d/service/ssr.service.d.ts +0 -1
  17. package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +11 -2
  18. package/app/plugins/model-uploader/model-previewer/model-preview.component.scss +185 -15
  19. package/app/plugins/model-uploader/model-uploader.module.d.ts +5 -1
  20. package/app/plugins/render/render-dialog/render-dialog.component.d.ts +4 -1
  21. package/app/plugins/render/render-dialog/render-dialog.component.scss +5 -5
  22. package/app/plugins/room-planner/components/floorplanner/floorplanner.component.d.ts +3 -1
  23. package/app/plugins/room-planner/components/floorplanner/service/room.service.d.ts +1 -0
  24. package/app/plugins/room-planner/components/settings/settings.component.d.ts +5 -1
  25. package/app/plugins/room-planner/components/texture-editor/texture-editor.component.d.ts +4 -1
  26. package/app/plugins/room-planner/room-planner/room-planner.component.scss +1 -0
  27. package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +1 -3
  28. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.d.ts +2 -0
  29. package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
  30. package/app/plugins/toolbar/toolbar/toolbar.component.d.ts +2 -0
  31. package/assets/icons/dash-button.svg +7 -0
  32. package/assets/icons/pen-ruler.svg +1 -0
  33. package/assets/icons/retry-button.svg +7 -0
  34. package/bundles/colijnit-homedecorator.umd.js +822 -601
  35. package/bundles/colijnit-homedecorator.umd.js.map +1 -1
  36. package/esm2015/app/app.version.js +3 -3
  37. package/esm2015/app/core/enum/message-type.enum.js +3 -1
  38. package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
  39. package/esm2015/app/core/model/homedecorator-settings-options.js +3 -1
  40. package/esm2015/app/core/service/3dm-api.js +4 -4
  41. package/esm2015/app/core/service/homedecorator-app-event.service.js +2 -1
  42. package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +25 -2
  43. package/esm2015/app/core/service/homedecorator-connector.service.js +25 -22
  44. package/esm2015/app/core/service/homedecorator-settings.service.js +3 -2
  45. package/esm2015/app/core/service/presets.service.js +13 -5
  46. package/esm2015/app/core/utils/material.utils.js +3 -3
  47. package/esm2015/app/homedecorator.component.js +26 -19
  48. package/esm2015/app/homedecorator.module.js +8 -4
  49. package/esm2015/app/plugins/core3d/core3d/components/scenecontrol/scene-control.component.js +5 -5
  50. package/esm2015/app/plugins/core3d/items/custom-cylinder-floor-item.js +2 -2
  51. package/esm2015/app/plugins/core3d/items/custom-cylinder-wall-item.js +2 -2
  52. package/esm2015/app/plugins/core3d/items/custom-shape-floor-item.js +2 -2
  53. package/esm2015/app/plugins/core3d/items/custom-shape-wall-item.js +2 -2
  54. package/esm2015/app/plugins/core3d/items/factory.js +3 -2
  55. package/esm2015/app/plugins/core3d/service/ar.service.js +2 -1
  56. package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +24 -18
  57. package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +13 -8
  58. package/esm2015/app/plugins/core3d/service/floor.service.js +9 -4
  59. package/esm2015/app/plugins/core3d/service/light-presets.service.js +10 -8
  60. package/esm2015/app/plugins/core3d/service/lights.service.js +8 -1
  61. package/esm2015/app/plugins/core3d/service/outline.service.js +4 -6
  62. package/esm2015/app/plugins/core3d/service/post-processing.service.js +148 -51
  63. package/esm2015/app/plugins/core3d/service/scene-event.service.js +14 -7
  64. package/esm2015/app/plugins/core3d/service/scene.service.js +84 -74
  65. package/esm2015/app/plugins/core3d/service/ssr.service.js +2 -53
  66. package/esm2015/app/plugins/lite-selector/lite-selector/component/answers-slideout/answers-slideout.component.js +10 -5
  67. package/esm2015/app/plugins/lite-selector/lite-selector/lite-selector.component.js +2 -2
  68. package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +281 -166
  69. package/esm2015/app/plugins/model-uploader/model-uploader.module.js +22 -3
  70. package/esm2015/app/plugins/render/render-controls/render-controls.component.js +3 -2
  71. package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +19 -14
  72. package/esm2015/app/plugins/render/service/new-render.service.js +4 -2
  73. package/esm2015/app/plugins/room-planner/components/custom-cylinder-creator/custom-cylinder-creator.component.js +4 -2
  74. package/esm2015/app/plugins/room-planner/components/custome-shape-creator/custom-shape-creator.component.js +2 -2
  75. package/esm2015/app/plugins/room-planner/components/floorplanner/floorplanner.component.js +29 -15
  76. package/esm2015/app/plugins/room-planner/components/floorplanner/service/room.service.js +5 -2
  77. package/esm2015/app/plugins/room-planner/components/settings/settings.component.js +12 -5
  78. package/esm2015/app/plugins/room-planner/components/texture-editor/texture-editor.component.js +31 -15
  79. package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +691 -683
  80. package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +43 -41
  81. package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +1 -1
  82. package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +26 -20
  83. package/esm2015/app/plugins/toolbar/save-dialog/save-dialog.component.js +2 -2
  84. package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +15 -8
  85. package/esm2015/app/shared/loading-overlay/loading-overlay.component.js +4 -2
  86. package/esm2015/app/shared/model-dialog/model-dialog-furniture-list.component.js +3 -3
  87. package/fesm2015/colijnit-homedecorator.js +1656 -1322
  88. package/fesm2015/colijnit-homedecorator.js.map +1 -1
  89. package/package.json +1 -1
@@ -46,7 +46,7 @@ export class RoomService {
46
46
  this._subs = [];
47
47
  this._subs.push(this._appService.floorTexturesLoaded.subscribe((floors) => {
48
48
  if (floors) {
49
- this._defaultFloorTexture = floors.find(f => f.default === true);
49
+ this._defaultFloorTexture = floors.find(f => f.default === true && !f.useStandalone);
50
50
  }
51
51
  }), this._cameraService.cameraMovementChanged.subscribe(() => this._updateEdgeVisibility(this._cameraService.camera.position)), this._presetService.afterLoad.subscribe(() => this._updateEdgeVisibility(this._cameraService.camera.position)), this._viewModeService.viewModeChanged.subscribe((mode) => __awaiter(this, void 0, void 0, function* () {
52
52
  if ((mode === ViewMode.RoomPlan3D || mode === ViewMode.TopView) && !_arService.arModeHasBeenActive()) {
@@ -265,6 +265,9 @@ export class RoomService {
265
265
  }
266
266
  });
267
267
  }
268
+ resetAllRooms() {
269
+ this.rooms = [];
270
+ }
268
271
  _showHideWalls(show) {
269
272
  this.walls.forEach(w => w.showHideWall(show));
270
273
  this._sceneService.needsRender = true;
@@ -327,4 +330,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
327
330
  providedIn: 'root'
328
331
  }]
329
332
  }], ctorParameters: function () { return [{ type: i1.HomedecoratorAppService }, { type: i2.SceneService }, { type: i3.FloorService }, { type: i4.CeilingService }, { type: i5.CameraService }, { type: i6.ItemService }, { type: i7.ConfigurationService }, { type: i8.ViewModeService }, { type: i9.PresetsService }, { type: i10.ArService }]; } });
330
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUdwRCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQWV6RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFakUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0saURBQWlELENBQUM7QUFDakYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7Ozs7QUFPcEQsTUFBTSxPQUFPLFdBQVc7SUFnQnRCLFlBQ1UsV0FBb0MsRUFDcEMsYUFBMkIsRUFDM0IsYUFBMkIsRUFDM0IsZUFBK0IsRUFDL0IsY0FBNkIsRUFDN0IsWUFBeUIsRUFDekIscUJBQTJDLEVBQzNDLGdCQUFpQyxFQUNqQyxjQUE4QixFQUM5QixVQUFxQjtRQVRyQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDM0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxtQkFBYyxHQUFk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QUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNoQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakM7U0FDRjtJQUNILENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsY0FBYztRQUNkLDJEQUEyRDtRQUMzRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzdCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt5R0FuVlUsV0FBVzs2R0FBWCxXQUFXLGNBRlYsTUFBTTs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge01lc2gsIFZlY3RvcjN9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0Nvcm5lciwgRWRnZSwgSGFsZkVkZ2UsIFJvb20sIFdhbGx9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9pdGVtcy93YWxsLW9iamVjdHMnO1xyXG5pbXBvcnQge1NlbGVjdGVkV2FsbEV2ZW50fSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9zZWxlY3RlZC13YWxsLWV2ZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7U2VsZWN0ZWRGbG9vckV2ZW50fSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9zZWxlY3RlZC1mbG9vci1ldmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0VkZ2VWaXNpYmlsaXR5Q2hhbmdlc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2ludGVyZmFjZS9lZGdlLXZpc2liaWxpdHktY2hhbmdlcyc7XHJcbmltcG9ydCB7VGV4dHVyZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9tb2RlbC90ZXh0dXJlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQXBwU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NjZW5lU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZSc7XHJcbmltcG9ydCB7Rmxvb3JTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9mbG9vci5zZXJ2aWNlJztcclxuaW1wb3J0IHtDZWlsaW5nU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvY2VpbGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHtDYW1lcmFTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9jYW1lcmEuc2VydmljZSc7XHJcbmltcG9ydCB7SXRlbVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2l0ZW0uc2VydmljZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZpZXdNb2RlU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ZpZXctbW9kZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7QXJTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9hci5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9lbnVtL3ZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uRGF0YX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9pbnRlcmZhY2UvY29uZmlndXJhdGlvbi1kYXRhLmludGVyZmFjZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbktleX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9lbnVtL2NvbmZpZ3VyYXRpb24ta2V5LmVudW0nO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvY29yZS91dGlscyc7XHJcbmltcG9ydCB7VGhyZWVNZXNofSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvaXRlbXMvdGhyZWUtbWVzaCc7XHJcbmltcG9ydCB7Rmxvb3JQbGFuZUl0ZW19IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9pdGVtcy9mbG9vci1wbGFuZS1pdGVtJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJvb21TZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHVibGljIHJvb21zOiBSb29tW10gPSBbXTtcclxuICBwdWJsaWMgd2FsbHM6IFdhbGxbXSA9IFtdO1xyXG4gIHB1YmxpYyBvcnBoYW5XYWxsczogV2FsbFtdID0gW107XHJcbiAgcHVibGljIGZsb29yVGV4dHVyZXM6IHt9O1xyXG4gIHB1YmxpYyBmbG9vckNvbG9yczoge307XHJcblxyXG4gIHB1YmxpYyB3YWxsU2VsZWN0ZWQ6IFN1YmplY3Q8U2VsZWN0ZWRXYWxsRXZlbnQ+ID0gbmV3IFN1YmplY3Q8U2VsZWN0ZWRXYWxsRXZlbnQ+KCk7XHJcbiAgcHVibGljIGZsb29yU2VsZWN0ZWQ6IFN1YmplY3Q8U2VsZWN0ZWRGbG9vckV2ZW50PiA9IG5ldyBTdWJqZWN0PFNlbGVjdGVkRmxvb3JFdmVudD4oKTtcclxuICBwdWJsaWMgZWRnZVZpc2liaWxpdHlDaGFuZ2VkOiBTdWJqZWN0PEVkZ2VWaXNpYmlsaXR5Q2hhbmdlcz4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwcml2YXRlIF9lZGdlczogRWRnZVtdID0gW107XHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9kZWZhdWx0Rmxvb3JUZXh0dXJlOiBUZXh0dXJlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2FwcFNlcnZpY2U6IEhvbWVkZWNvcmF0b3JBcHBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mbG9vclNlcnZpY2U6IEZsb29yU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NlaWxpbmdTZXJ2aWNlOiBDZWlsaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NhbWVyYVNlcnZpY2U6IENhbWVyYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jb25maWd1cmF0aW9uU2VydmljZTogQ29uZmlndXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF92aWV3TW9kZVNlcnZpY2U6IFZpZXdNb2RlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ByZXNldFNlcnZpY2U6IFByZXNldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXJTZXJ2aWNlOiBBclNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5fYXBwU2VydmljZS5mbG9vclRleHR1cmVzTG9hZGVkLnN1YnNjcmliZSgoZmxvb3JzOiBUZXh0dXJlW10pID0+IHtcclxuICAgICAgICBpZiAoZmxvb3JzKSB7XHJcbiAgICAgICAgICB0aGlzLl9kZWZhdWx0Rmxvb3JUZXh0dXJlID0gZmxvb3JzLmZpbmQoZiA9PiBmLmRlZmF1bHQgPT09IHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl91cGRhdGVFZGdlVmlzaWJpbGl0eSh0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5wb3NpdGlvbikpLFxyXG4gICAgICB0aGlzLl9wcmVzZXRTZXJ2aWNlLmFmdGVyTG9hZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlRWRnZVZpc2liaWxpdHkodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEucG9zaXRpb24pKSxcclxuICAgICAgdGhpcy5fdmlld01vZGVTZXJ2aWNlLnZpZXdNb2RlQ2hhbmdlZC5zdWJzY3JpYmUoYXN5bmMgbW9kZSA9PiB7XHJcbiAgICAgICAgaWYgKChtb2RlID09PSBWaWV3TW9kZS5Sb29tUGxhbjNEIHx8IG1vZGUgPT09IFZpZXdNb2RlLlRvcFZpZXcpICYmICFfYXJTZXJ2aWNlLmFyTW9kZUhhc0JlZW5BY3RpdmUoKSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVGbG9vcnNBbmRFZGdlcygpO1xyXG4gICAgICAgICAgdGhpcy5fdmlld01vZGVTZXJ2aWNlLnJvb20zRFVwZGF0ZWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IFZpZXdNb2RlLlZSKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXRBbGxFZGdlc1Zpc2libGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5vbkNoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZWQ6IENvbmZpZ3VyYXRpb25EYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoQ29uZmlndXJhdGlvbktleS5TaG93V2FsbHMgaW4gY2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zaG93SGlkZVdhbGxzKGNoYW5nZWRbQ29uZmlndXJhdGlvbktleS5TaG93V2FsbHNdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RmlsbGVyUGxhbmVzKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWRnZXMucmVkdWNlKChwbGFuZXMsIGVkZ2UpID0+IHtcclxuICAgICAgY29uc3QgZmlsbGVycyA9IGVkZ2UuZ2V0VG9wU2lkZUZpbGxlcnMoKTtcclxuICAgICAgcmV0dXJuIHBsYW5lcy5jb25jYXQoZmlsbGVycyk7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmxvb3JQbGFuZXMoKTogVEhSRUUuTWVzaFtdIHtcclxuICAgIHJldHVybiBVdGlscy5tYXAodGhpcy5yb29tcywgKHJvb206IFJvb20pID0+IHtcclxuICAgICAgcmV0dXJuIHJvb20uZmxvb3JQbGFuZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZsb29yVGV4dHVyZSh1dWlkOiBzdHJpbmcpOiBUZXh0dXJlIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yVGV4dHVyZXNbdXVpZF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rmxvb3JUZXh0dXJlKHJvb206IFJvb20sIHRleHR1cmU6IFRleHR1cmUpOiB2b2lkIHtcclxuICAgIHRoaXMuZmxvb3JUZXh0dXJlc1tyb29tLmdldFV1aWQoKV0gPSB0ZXh0dXJlO1xyXG4gICAgdGhpcy5kZWxldGVGbG9vckNvbG9yKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgIHRoaXMuX2Zsb29yU2VydmljZS5zZXRGbG9vclRleHR1cmUocm9vbSwgdGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlRmxvb3JUZXh0dXJlKHV1aWQ6IHN0cmluZykge1xyXG4gICAgZGVsZXRlIHRoaXMuZmxvb3JUZXh0dXJlc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGbG9vckNvbG9yKHV1aWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JDb2xvcnNbdXVpZF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rmxvb3JDb2xvcihyb29tOiBSb29tLCBjb2xvcjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZsb29yQ29sb3JzW3Jvb20uZ2V0VXVpZCgpXSA9IGNvbG9yO1xyXG4gICAgdGhpcy5kZWxldGVGbG9vclRleHR1cmUocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgdGhpcy5fZmxvb3JTZXJ2aWNlLnNldEZsb29yQ29sb3Iocm9vbSwgY29sb3IpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUZsb29yQ29sb3IodXVpZDogc3RyaW5nKSB7XHJcbiAgICBkZWxldGUgdGhpcy5mbG9vckNvbG9yc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIC8vIGhhY2tcclxuICBwdWJsaWMgd2FsbEVkZ2VzKCk6IEhhbGZFZGdlW10ge1xyXG4gICAgY29uc3QgZWRnZXMgPSBbXTtcclxuXHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2goKHdhbGwpID0+IHtcclxuICAgICAgaWYgKHdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgZWRnZXMucHVzaCh3YWxsLmZyb250RWRnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHdhbGwuYmFja0VkZ2UpIHtcclxuICAgICAgICBlZGdlcy5wdXNoKHdhbGwuYmFja0VkZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBlZGdlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDbG9zZXN0V2FsbEVkZ2UoaXRlbVg6IG51bWJlciwgaXRlbVo6IG51bWJlcik6IEhhbGZFZGdlIHtcclxuICAgIGNvbnN0IHdhbGxFZGdlcyA9IHRoaXMud2FsbEVkZ2VzKCk7XHJcblxyXG4gICAgbGV0IHdhbGxFZGdlID0gbnVsbDtcclxuICAgIGxldCBtaW5EaXN0YW5jZSA9IG51bGw7XHJcblxyXG4gICAgd2FsbEVkZ2VzLmZvckVhY2goKGVkZ2U6IEhhbGZFZGdlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gZWRnZS5kaXN0YW5jZVRvKGl0ZW1YLCBpdGVtWik7XHJcbiAgICAgIGlmIChtaW5EaXN0YW5jZSA9PT0gbnVsbCB8fCBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XHJcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB3YWxsRWRnZSA9IGVkZ2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB3YWxsRWRnZTtcclxuICB9XHJcblxyXG4gIC8vIGhhY2tcclxuICBwdWJsaWMgd2FsbEVkZ2VQbGFuZXMoKTogVEhSRUUuTWVzaFtdIHtcclxuICAgIGNvbnN0IHBsYW5lcyA9IFtdO1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKCh3YWxsKSA9PiB7XHJcbiAgICAgIGlmICh3YWxsLmZyb250RWRnZSkge1xyXG4gICAgICAgIHBsYW5lcy5wdXNoKHdhbGwuZnJvbnRFZGdlLnBsYW5lKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAod2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICAgIHBsYW5lcy5wdXNoKHdhbGwuYmFja0VkZ2UucGxhbmUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwbGFuZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2VpbGluZ1BsYW5lcygpOiBNZXNoW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NlaWxpbmdTZXJ2aWNlLnBsYW5lcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyB3YWxsUmVtb3ZlZCh3YWxsOiBXYWxsKTogdm9pZCB7XHJcbiAgICB3YWxsLml0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9zY2VuZVNlcnZpY2UucmVtb3ZlT2JqZWN0KGkpKTtcclxuICAgIHdhbGwub25JdGVtcy5mb3JFYWNoKGkgPT4gdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChpKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlV2FsbChzdGFydDogQ29ybmVyLCBlbmQ6IENvcm5lcik6IFdhbGwge1xyXG4gICAgY29uc3Qgd2FsbCA9IG5ldyBXYWxsKHN0YXJ0LCBlbmQpO1xyXG4gICAgd2FsbC5oZWlnaHQgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxIZWlnaHQpIC8gMTAwO1xyXG4gICAgd2FsbC50aGlja25lc3MgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxUaGlja25lc3MpIC8gMTAwO1xyXG4gICAgdGhpcy53YWxscy5wdXNoKHdhbGwpO1xyXG4gICAgcmV0dXJuIHdhbGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlV2FsbCh3YWxsOiBXYWxsKTogdm9pZCB7XHJcbiAgICB3YWxsLml0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKGkpKTtcclxuICAgIHdhbGwub25JdGVtcy5mb3JFYWNoKGkgPT4gdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbShpKSk7XHJcbiAgICBVdGlscy5yZW1vdmVWYWx1ZSh0aGlzLndhbGxzLCB3YWxsKTtcclxuICAgIHdhbGwucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlV2FsbEhlaWdodHMobmV3SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCh3YWxsID0+IHtcclxuICAgICAgd2FsbC5oZWlnaHQgPSBuZXdIZWlnaHQgLyAxMDA7XHJcbiAgICAgIHdhbGwuZmlyZVJlZHJhdygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZUNlaWxpbmdzKCk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZVJvb21zKHJvb21Db3JuZXJzOiBDb3JuZXJbXVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2god2FsbCA9PiB3YWxsLnJlc2V0RnJvbnRCYWNrKCkpO1xyXG4gICAgdGhpcy5yb29tcy5mb3JFYWNoKHIgPT4gci5kaXNwb3NlKCkpO1xyXG4gICAgdGhpcy5yb29tcyA9IFtdO1xyXG4gICAgcm9vbUNvcm5lcnMuZm9yRWFjaCgoY29ybmVyczogQ29ybmVyW10pID0+IHtcclxuICAgICAgdGhpcy5yb29tcy5wdXNoKG5ldyBSb29tKGNvcm5lcnMsICB0aGlzLl9kZWZhdWx0Rmxvb3JUZXh0dXJlKSk7XHJcbiAgICB9KTtcclxuICAgIGF3YWl0IHRoaXMudXBkYXRlRmxvb3JzQW5kRWRnZXMoKTtcclxuICAgIHRoaXMuX2Fzc2lnbk9ycGhhbkVkZ2VzKCk7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2god2FsbCA9PiB3YWxsLnVwZGF0ZVdhbGxJdGVtcygpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCgod2FsbCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZVdhbGwod2FsbCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMud2FsbHMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZmxvb3JDb2xvcnMgPSB7fTtcclxuICAgIHRoaXMuZmxvb3JUZXh0dXJlcyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFdhbGwoZXZlbnQ6IE1vdXNlRXZlbnQsIHdhbGw6IFdhbGwsIGVkZ2U6IEhhbGZFZGdlKTogdm9pZCB7XHJcbiAgICB0aGlzLndhbGxTZWxlY3RlZC5uZXh0KHtldmVudDogZXZlbnQsIHdhbGw6IHdhbGwsIGVkZ2U6IGVkZ2V9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RGbG9vcihldmVudDogTW91c2VFdmVudCwgcm9vbTogUm9vbSk6IHZvaWQge1xyXG4gICAgdGhpcy5mbG9vclNlbGVjdGVkLm5leHQoe2V2ZW50OiBldmVudCwgcm9vbTogcm9vbX0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJvb21DZW50ZXIoKTogVmVjdG9yMyB7XHJcbiAgICBjb25zdCBmbG9vcnMgPSB0aGlzLmZsb29yUGxhbmVzKCk7XHJcbiAgICByZXR1cm4gZmxvb3JzICYmIGZsb29ycy5sZW5ndGggPiAwID8gZmxvb3JzWzBdLnBvc2l0aW9uIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVGbG9vcnNBbmRFZGdlcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2Zsb29yU2VydmljZS5yZW1vdmVGbG9vcnMoKTtcclxuICAgIHRoaXMuX2VkZ2VzLmZvckVhY2goKGVkZ2U6IEVkZ2UpID0+IHtcclxuICAgICAgZWRnZS5nZXRQbGFuZXMoKS5mb3JFYWNoKChwbGFuZTogTWVzaCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5yZW1vdmVPYmplY3QocGxhbmUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZWRnZXMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAvLyBkcmF3IGZsb29yc1xyXG4gICAgY29uc3Qgc29ydGVkUm9vbXM6IFJvb21bXSA9IHRoaXMucm9vbXMuc29ydCgoYSwgYikgPT4gYS5hcmVhIC0gYi5hcmVhKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkUm9vbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qgcm9vbTogUm9vbSA9IHNvcnRlZFJvb21zW2ldO1xyXG4gICAgICBjb25zdCBzdG9yZWRDb2xvciA9IHRoaXMuZ2V0Rmxvb3JDb2xvcihyb29tLmdldFV1aWQoKSk7XHJcbiAgICAgIGNvbnN0IHN0b3JlZFRleHR1cmUgPSB0aGlzLmdldEZsb29yVGV4dHVyZShyb29tLmdldFV1aWQoKSk7XHJcbiAgICAgIGNvbnN0IGNvbG9yID0gc3RvcmVkQ29sb3IgPyBzdG9yZWRDb2xvciA6IHJvb20uZmxvb3JDb2xvcjtcclxuICAgICAgY29uc3QgdGV4dHVyZSA9IHN0b3JlZFRleHR1cmUgPyBzdG9yZWRUZXh0dXJlIDogKHJvb20uZmxvb3JUZXh0dXJlID8gcm9vbS5mbG9vclRleHR1cmUgOiB1bmRlZmluZWQpO1xyXG4gICAgICBjb25zdCBmbG9vclBsYW5lOiBGbG9vclBsYW5lSXRlbSA9IGF3YWl0IHRoaXMuX2Zsb29yU2VydmljZS5nZW5lcmF0ZUZsb29yUGxhbmUoXHJcbiAgICAgICAgICBzdG9yZWRUZXh0dXJlID8gbnVsbCA6IGNvbG9yLCBzdG9yZWRDb2xvciA/IChzdG9yZWRUZXh0dXJlID8gdGV4dHVyZSA6IG51bGwpIDogdGV4dHVyZSwgcm9vbS5pbnRlcmlvckNvcm5lcnMsIHNvcnRlZFJvb21zLnNsaWNlKDAsIGkpKTtcclxuICAgICAgZmxvb3JQbGFuZS5jaGlsZHJlblswXS51c2VyRGF0YS5yb29tID0gcm9vbTtcclxuICAgICAgcm9vbS5mbG9vclRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgICByb29tLmZsb29yQ29sb3IgPSBjb2xvcjtcclxuICAgICAgcm9vbS5mbG9vclBsYW5lID0gZmxvb3JQbGFuZTtcclxuICAgIH1cclxuICAgIC8vIGF3YWl0IHRoaXMucm9vbXNcclxuICAgIC8vICAgLnNvcnQoKGEsIGIpID0+IGEuYXJlYSAtIGIuYXJlYSlcclxuICAgIC8vICAgLmZvckVhY2goYXN5bmMgKHJvb20sIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgLy8gICAgIGNvbnN0IHN0b3JlZENvbG9yID0gdGhpcy5nZXRGbG9vckNvbG9yKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgIC8vICAgICBjb25zdCBzdG9yZWRUZXh0dXJlID0gdGhpcy5nZXRGbG9vclRleHR1cmUocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgLy8gICAgIGNvbnN0IGNvbG9yID0gc3RvcmVkQ29sb3IgPyBzdG9yZWRDb2xvciA6IHJvb20uZmxvb3JDb2xvcjtcclxuICAgIC8vICAgICBjb25zdCB0ZXh0dXJlID0gc3RvcmVkVGV4dHVyZSA/IHN0b3JlZFRleHR1cmUgOiAocm9vbS5mbG9vclRleHR1cmUgPyByb29tLmZsb29yVGV4dHVyZSA6IHVuZGVmaW5lZCk7XHJcbiAgICAvLyAgICAgY29uc3QgZmxvb3JQbGFuZTogRmxvb3JQbGFuZUl0ZW0gPSBhd2FpdCB0aGlzLl9mbG9vclNlcnZpY2UuZ2VuZXJhdGVGbG9vclBsYW5lKFxyXG4gICAgLy8gICAgICAgc3RvcmVkVGV4dHVyZSA/IG51bGwgOiBjb2xvciwgc3RvcmVkQ29sb3IgPyAoc3RvcmVkVGV4dHVyZSA/IHRleHR1cmUgOiBudWxsKSA6IHRleHR1cmUsIHJvb20uaW50ZXJpb3JDb3JuZXJzLCBhcnJheS5zbGljZSgwLCBpbmRleCkpO1xyXG4gICAgLy8gICAgIGZsb29yUGxhbmUudXNlckRhdGEucm9vbSA9IHJvb207XHJcbiAgICAvLyAgICAgcm9vbS5mbG9vclRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgLy8gICAgIHJvb20uZmxvb3JDb2xvciA9IGNvbG9yO1xyXG4gICAgLy8gICAgIHJvb20uZmxvb3JQbGFuZSA9IGZsb29yUGxhbmU7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy9cclxuICAgIC8vIGRyYXcgZWRnZXNcclxuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy53YWxsRWRnZXMoKTtcclxuICAgIGlmIChlZGdlcyAmJiBlZGdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBoYWxmRWRnZSA9IGVkZ2VzW2ldO1xyXG4gICAgICAgIGNvbnN0IG5ld0VkZ2U6IEVkZ2UgPSBuZXcgRWRnZShoYWxmRWRnZSk7XHJcbiAgICAgICAgYXdhaXQgbmV3RWRnZS5pbml0KCk7XHJcbiAgICAgICAgaGFsZkVkZ2UuZWRnZXMucHVzaChuZXdFZGdlKTtcclxuICAgICAgICB0aGlzLl9lZGdlcy5wdXNoKG5ld0VkZ2UpO1xyXG4gICAgICAgIGNvbnN0IHBsYW5lcyA9IG5ld0VkZ2UuZ2V0UGxhbmVzKCk7XHJcbiAgICAgICAgcGxhbmVzLmZvckVhY2goKHBsYW5lKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYWRkT2JqZWN0KHBsYW5lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRyYXcgY2VpbGluZ3NcclxuICAgIHRoaXMudXBkYXRlQ2VpbGluZ3MoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVDZWlsaW5ncygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NlaWxpbmdTZXJ2aWNlLnJlbW92ZUNlaWxpbmdzKCk7XHJcbiAgICB0aGlzLnJvb21zXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmFyZWEgLSBiLmFyZWEpXHJcbiAgICAgIC5mb3JFYWNoKChyb29tOiBSb29tKSA9PiB7XHJcbiAgICAgICAgcm9vbS51cGRhdGVXYWxsSGVpZ2h0cygpO1xyXG4gICAgICAgIGNvbnN0IGNlaWxpbmc6IFRocmVlTWVzaCA9IHRoaXMuX2NlaWxpbmdTZXJ2aWNlLmdlbmVyYXRlQ2VpbGluZ1BsYW5lKDB4ZTVlNWU1LCByb29tLmludGVyaW9yQ29ybmVycywgcm9vbS5lZGdlSGVpZ2h0cyk7XHJcbiAgICAgICAgaWYgKGNlaWxpbmcpIHtcclxuICAgICAgICAgIGNlaWxpbmcudXNlckRhdGEucm9vbSA9IHJvb207XHJcbiAgICAgICAgICByb29tLmNlaWxpbmdQbGFuZSA9IGNlaWxpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Nob3dIaWRlV2FsbHMoc2hvdzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKHcgPT4gdy5zaG93SGlkZVdhbGwoc2hvdykpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUVkZ2VWaXNpYmlsaXR5KGNhbWVyYVBvc2l0aW9uOiBWZWN0b3IzKTogdm9pZCB7XHJcbiAgICB0aGlzLndhbGxFZGdlcygpLmZvckVhY2goZSA9PiB7XHJcbiAgICAgIGNvbnN0IHZpc2liaWxpdHlDaGFuZ2UgPSBlLnVwZGF0ZVZpc2liaWxpdHkoY2FtZXJhUG9zaXRpb24pO1xyXG4gICAgICBpZiAodmlzaWJpbGl0eUNoYW5nZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IGVkZ2VWaXNpYmlsaXR5Q2hhbmdlczogRWRnZVZpc2liaWxpdHlDaGFuZ2VzID0ge1xyXG4gICAgICAgICAgZWRnZTogZSxcclxuICAgICAgICAgIHZpc2liaWxpdHk6IHZpc2liaWxpdHlDaGFuZ2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZWRnZVZpc2liaWxpdHlDaGFuZ2VkLm5leHQoZWRnZVZpc2liaWxpdHlDaGFuZ2VzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRBbGxFZGdlc1Zpc2libGUoKSB7XHJcbiAgICB0aGlzLndhbGxFZGdlcygpLmZvckVhY2goKGU6IEhhbGZFZGdlKSA9PiB7XHJcbiAgICAgIGUudXBkYXRlVmlzaWJsaXR5KHRydWUpO1xyXG4gICAgICBjb25zdCBlZGdlVmlzaWJpbGl0eUNoYW5nZXM6IEVkZ2VWaXNpYmlsaXR5Q2hhbmdlcyA9IHtcclxuICAgICAgICBlZGdlOiBlLFxyXG4gICAgICAgIHZpc2liaWxpdHk6IHRydWVcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5lZGdlVmlzaWJpbGl0eUNoYW5nZWQubmV4dChlZGdlVmlzaWJpbGl0eUNoYW5nZXMpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVGbG9vclRleHR1cmVzKCkge1xyXG4gICAgY29uc3QgdXVpZHMgPSBVdGlscy5tYXAodGhpcy5yb29tcywgZnVuY3Rpb24gKHJvb20pIHtcclxuICAgICAgcmV0dXJuIHJvb20uZ2V0VXVpZCgpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZm9yIChjb25zdCB1dWlkIGluIHRoaXMuZmxvb3JUZXh0dXJlcykge1xyXG4gICAgICBpZiAoIVV0aWxzLmhhc1ZhbHVlKHV1aWRzLCB1dWlkKSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZsb29yVGV4dHVyZXNbdXVpZF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Fzc2lnbk9ycGhhbkVkZ2VzKCkge1xyXG4gICAgLy8ga2luZGEgaGFja3lcclxuICAgIC8vIGZpbmQgb3JwaGFuZWQgd2FsbCBzZWdtZW50cyAoaS5lLiBub3QgcGFydCBvZiByb29tcykgYW5kXHJcbiAgICAvLyBnaXZlIHRoZW0gZWRnZXNcclxuICAgIHRoaXMub3JwaGFuV2FsbHMgPSBbXTtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCgod2FsbCkgPT4ge1xyXG4gICAgICBpZiAoIXdhbGwuYmFja0VkZ2UgJiYgIXdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgd2FsbC5vcnBoYW4gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGJhY2sgPSBuZXcgSGFsZkVkZ2UobnVsbCwgd2FsbCwgZmFsc2UpO1xyXG4gICAgICAgIGJhY2suZ2VuZXJhdGVQbGFuZSgpO1xyXG4gICAgICAgIGNvbnN0IGZyb250ID0gbmV3IEhhbGZFZGdlKG51bGwsIHdhbGwsIHRydWUpO1xyXG4gICAgICAgIGZyb250LmdlbmVyYXRlUGxhbmUoKTtcclxuICAgICAgICB3YWxsLnVwZGF0ZUluV2FsbEl0ZW1zKCk7XHJcbiAgICAgICAgdGhpcy5vcnBoYW5XYWxscy5wdXNoKHdhbGwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vbS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvc2VydmljZS9yb29tLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUdwRCxPQUFPLEVBQUMsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQWV6RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFakUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0saURBQWlELENBQUM7QUFDakYsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7Ozs7QUFPcEQsTUFBTSxPQUFPLFdBQVc7SUFnQnRCLFlBQ1UsV0FBb0MsRUFDcEMsYUFBMkIsRUFDM0IsYUFBMkIsRUFDM0IsZUFBK0IsRUFDL0IsY0FBNkIsRUFDN0IsWUFBeUIsRUFDekIscUJBQTJDLEVBQzNDLGdCQUFpQyxFQUNqQyxjQUE4QixFQUM5QixVQUFxQjtRQVRyQixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDM0Isb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLG1CQUFjLEdBQWQsY0FBYyxDQUFlO1FBQzdCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDM0MscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxtQkFBYyxHQUFk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TTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtNZXNoLCBWZWN0b3IzfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDb3JuZXIsIEVkZ2UsIEhhbGZFZGdlLCBSb29tLCBXYWxsfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvaXRlbXMvd2FsbC1vYmplY3RzJztcclxuaW1wb3J0IHtTZWxlY3RlZFdhbGxFdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9pbnRlcmZhY2Uvc2VsZWN0ZWQtd2FsbC1ldmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1NlbGVjdGVkRmxvb3JFdmVudH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9pbnRlcmZhY2Uvc2VsZWN0ZWQtZmxvb3ItZXZlbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtFZGdlVmlzaWJpbGl0eUNoYW5nZXN9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9pbnRlcmZhY2UvZWRnZS12aXNpYmlsaXR5LWNoYW5nZXMnO1xyXG5pbXBvcnQge1RleHR1cmV9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvbW9kZWwvdGV4dHVyZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckFwcFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWFwcC5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Zsb29yU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvZmxvb3Iuc2VydmljZSc7XHJcbmltcG9ydCB7Q2VpbGluZ1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2NlaWxpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvY2FtZXJhLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS92aWV3LW1vZGUuc2VydmljZSc7XHJcbmltcG9ydCB7UHJlc2V0c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc2VydmljZS9wcmVzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0FyU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL3NlcnZpY2UvYXIuc2VydmljZSc7XHJcbmltcG9ydCB7Vmlld01vZGV9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvZW51bS92aWV3LW1vZGUuZW51bSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbkRhdGF9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvaW50ZXJmYWNlL2NvbmZpZ3VyYXRpb24tZGF0YS5pbnRlcmZhY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25LZXl9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvZW51bS9jb25maWd1cmF0aW9uLWtleS5lbnVtJztcclxuaW1wb3J0IHtVdGlsc30gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQge1RocmVlTWVzaH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZTNkL2l0ZW1zL3RocmVlLW1lc2gnO1xyXG5pbXBvcnQge0Zsb29yUGxhbmVJdGVtfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlM2QvaXRlbXMvZmxvb3ItcGxhbmUtaXRlbSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSb29tU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyByb29tczogUm9vbVtdID0gW107XHJcbiAgcHVibGljIHdhbGxzOiBXYWxsW10gPSBbXTtcclxuICBwdWJsaWMgb3JwaGFuV2FsbHM6IFdhbGxbXSA9IFtdO1xyXG4gIHB1YmxpYyBmbG9vclRleHR1cmVzOiB7fTtcclxuICBwdWJsaWMgZmxvb3JDb2xvcnM6IHt9O1xyXG5cclxuICBwdWJsaWMgd2FsbFNlbGVjdGVkOiBTdWJqZWN0PFNlbGVjdGVkV2FsbEV2ZW50PiA9IG5ldyBTdWJqZWN0PFNlbGVjdGVkV2FsbEV2ZW50PigpO1xyXG4gIHB1YmxpYyBmbG9vclNlbGVjdGVkOiBTdWJqZWN0PFNlbGVjdGVkRmxvb3JFdmVudD4gPSBuZXcgU3ViamVjdDxTZWxlY3RlZEZsb29yRXZlbnQ+KCk7XHJcbiAgcHVibGljIGVkZ2VWaXNpYmlsaXR5Q2hhbmdlZDogU3ViamVjdDxFZGdlVmlzaWJpbGl0eUNoYW5nZXM+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBfZWRnZXM6IEVkZ2VbXSA9IFtdO1xyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdEZsb29yVGV4dHVyZTogVGV4dHVyZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9hcHBTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZmxvb3JTZXJ2aWNlOiBGbG9vclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZWlsaW5nU2VydmljZTogQ2VpbGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmlld01vZGVTZXJ2aWNlOiBWaWV3TW9kZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcmVzZXRTZXJ2aWNlOiBQcmVzZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FyU2VydmljZTogQXJTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX2FwcFNlcnZpY2UuZmxvb3JUZXh0dXJlc0xvYWRlZC5zdWJzY3JpYmUoKGZsb29yczogVGV4dHVyZVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKGZsb29ycykge1xyXG4gICAgICAgICAgdGhpcy5fZGVmYXVsdEZsb29yVGV4dHVyZSA9IGZsb29ycy5maW5kKGYgPT4gZi5kZWZhdWx0ID09PSB0cnVlICYmICFmLnVzZVN0YW5kYWxvbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhTW92ZW1lbnRDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLl91cGRhdGVFZGdlVmlzaWJpbGl0eSh0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYS5wb3NpdGlvbikpLFxyXG4gICAgICB0aGlzLl9wcmVzZXRTZXJ2aWNlLmFmdGVyTG9hZC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fdXBkYXRlRWRnZVZpc2liaWxpdHkodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEucG9zaXRpb24pKSxcclxuICAgICAgdGhpcy5fdmlld01vZGVTZXJ2aWNlLnZpZXdNb2RlQ2hhbmdlZC5zdWJzY3JpYmUoYXN5bmMgbW9kZSA9PiB7XHJcbiAgICAgICAgaWYgKChtb2RlID09PSBWaWV3TW9kZS5Sb29tUGxhbjNEIHx8IG1vZGUgPT09IFZpZXdNb2RlLlRvcFZpZXcpICYmICFfYXJTZXJ2aWNlLmFyTW9kZUhhc0JlZW5BY3RpdmUoKSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVGbG9vcnNBbmRFZGdlcygpO1xyXG4gICAgICAgICAgdGhpcy5fdmlld01vZGVTZXJ2aWNlLnJvb20zRFVwZGF0ZWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT09IFZpZXdNb2RlLlZSKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXRBbGxFZGdlc1Zpc2libGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5vbkNoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZWQ6IENvbmZpZ3VyYXRpb25EYXRhKSA9PiB7XHJcbiAgICAgICAgICBpZiAoQ29uZmlndXJhdGlvbktleS5TaG93V2FsbHMgaW4gY2hhbmdlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zaG93SGlkZVdhbGxzKGNoYW5nZWRbQ29uZmlndXJhdGlvbktleS5TaG93V2FsbHNdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RmlsbGVyUGxhbmVzKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZWRnZXMucmVkdWNlKChwbGFuZXMsIGVkZ2UpID0+IHtcclxuICAgICAgY29uc3QgZmlsbGVycyA9IGVkZ2UuZ2V0VG9wU2lkZUZpbGxlcnMoKTtcclxuICAgICAgcmV0dXJuIHBsYW5lcy5jb25jYXQoZmlsbGVycyk7XHJcbiAgICB9LCBbXSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmxvb3JQbGFuZXMoKTogVEhSRUUuTWVzaFtdIHtcclxuICAgIHJldHVybiBVdGlscy5tYXAodGhpcy5yb29tcywgKHJvb206IFJvb20pID0+IHtcclxuICAgICAgcmV0dXJuIHJvb20uZmxvb3JQbGFuZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZsb29yVGV4dHVyZSh1dWlkOiBzdHJpbmcpOiBUZXh0dXJlIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yVGV4dHVyZXNbdXVpZF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rmxvb3JUZXh0dXJlKHJvb206IFJvb20sIHRleHR1cmU6IFRleHR1cmUpOiB2b2lkIHtcclxuICAgIHRoaXMuZmxvb3JUZXh0dXJlc1tyb29tLmdldFV1aWQoKV0gPSB0ZXh0dXJlO1xyXG4gICAgdGhpcy5kZWxldGVGbG9vckNvbG9yKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgIHRoaXMuX2Zsb29yU2VydmljZS5zZXRGbG9vclRleHR1cmUocm9vbSwgdGV4dHVyZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlRmxvb3JUZXh0dXJlKHV1aWQ6IHN0cmluZykge1xyXG4gICAgZGVsZXRlIHRoaXMuZmxvb3JUZXh0dXJlc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGbG9vckNvbG9yKHV1aWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JDb2xvcnNbdXVpZF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rmxvb3JDb2xvcihyb29tOiBSb29tLCBjb2xvcjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZsb29yQ29sb3JzW3Jvb20uZ2V0VXVpZCgpXSA9IGNvbG9yO1xyXG4gICAgdGhpcy5kZWxldGVGbG9vclRleHR1cmUocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgdGhpcy5fZmxvb3JTZXJ2aWNlLnNldEZsb29yQ29sb3Iocm9vbSwgY29sb3IpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUZsb29yQ29sb3IodXVpZDogc3RyaW5nKSB7XHJcbiAgICBkZWxldGUgdGhpcy5mbG9vckNvbG9yc1t1dWlkXTtcclxuICB9XHJcblxyXG4gIC8vIGhhY2tcclxuICBwdWJsaWMgd2FsbEVkZ2VzKCk6IEhhbGZFZGdlW10ge1xyXG4gICAgY29uc3QgZWRnZXMgPSBbXTtcclxuXHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2goKHdhbGwpID0+IHtcclxuICAgICAgaWYgKHdhbGwuZnJvbnRFZGdlKSB7XHJcbiAgICAgICAgZWRnZXMucHVzaCh3YWxsLmZyb250RWRnZSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHdhbGwuYmFja0VkZ2UpIHtcclxuICAgICAgICBlZGdlcy5wdXNoKHdhbGwuYmFja0VkZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBlZGdlcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDbG9zZXN0V2FsbEVkZ2UoaXRlbVg6IG51bWJlciwgaXRlbVo6IG51bWJlcik6IEhhbGZFZGdlIHtcclxuICAgIGNvbnN0IHdhbGxFZGdlcyA9IHRoaXMud2FsbEVkZ2VzKCk7XHJcblxyXG4gICAgbGV0IHdhbGxFZGdlID0gbnVsbDtcclxuICAgIGxldCBtaW5EaXN0YW5jZSA9IG51bGw7XHJcblxyXG4gICAgd2FsbEVkZ2VzLmZvckVhY2goKGVkZ2U6IEhhbGZFZGdlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gZWRnZS5kaXN0YW5jZVRvKGl0ZW1YLCBpdGVtWik7XHJcbiAgICAgIGlmIChtaW5EaXN0YW5jZSA9PT0gbnVsbCB8fCBkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XHJcbiAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB3YWxsRWRnZSA9IGVkZ2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB3YWxsRWRnZTtcclxuICB9XHJcblxyXG4gIC8vIGhhY2tcclxuICBwdWJsaWMgd2FsbEVkZ2VQbGFuZXMoKTogVEhSRUUuTWVzaFtdIHtcclxuICAgIGNvbnN0IHBsYW5lcyA9IFtdO1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKCh3YWxsKSA9PiB7XHJcbiAgICAgIGlmICh3YWxsLmZyb250RWRnZSkge1xyXG4gICAgICAgIHBsYW5lcy5wdXNoKHdhbGwuZnJvbnRFZGdlLnBsYW5lKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAod2FsbC5iYWNrRWRnZSkge1xyXG4gICAgICAgIHBsYW5lcy5wdXNoKHdhbGwuYmFja0VkZ2UucGxhbmUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBwbGFuZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2VpbGluZ1BsYW5lcygpOiBNZXNoW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NlaWxpbmdTZXJ2aWNlLnBsYW5lcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyB3YWxsUmVtb3ZlZCh3YWxsOiBXYWxsKTogdm9pZCB7XHJcbiAgICB3YWxsLml0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9zY2VuZVNlcnZpY2UucmVtb3ZlT2JqZWN0KGkpKTtcclxuICAgIHdhbGwub25JdGVtcy5mb3JFYWNoKGkgPT4gdGhpcy5fc2NlbmVTZXJ2aWNlLnJlbW92ZU9iamVjdChpKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlV2FsbChzdGFydDogQ29ybmVyLCBlbmQ6IENvcm5lcik6IFdhbGwge1xyXG4gICAgY29uc3Qgd2FsbCA9IG5ldyBXYWxsKHN0YXJ0LCBlbmQpO1xyXG4gICAgd2FsbC5oZWlnaHQgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxIZWlnaHQpIC8gMTAwO1xyXG4gICAgd2FsbC50aGlja25lc3MgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxUaGlja25lc3MpIC8gMTAwO1xyXG4gICAgdGhpcy53YWxscy5wdXNoKHdhbGwpO1xyXG4gICAgcmV0dXJuIHdhbGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlV2FsbCh3YWxsOiBXYWxsKTogdm9pZCB7XHJcbiAgICB3YWxsLml0ZW1zLmZvckVhY2goaSA9PiB0aGlzLl9pdGVtU2VydmljZS5yZW1vdmVJdGVtKGkpKTtcclxuICAgIHdhbGwub25JdGVtcy5mb3JFYWNoKGkgPT4gdGhpcy5faXRlbVNlcnZpY2UucmVtb3ZlSXRlbShpKSk7XHJcbiAgICBVdGlscy5yZW1vdmVWYWx1ZSh0aGlzLndhbGxzLCB3YWxsKTtcclxuICAgIHdhbGwucmVtb3ZlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlV2FsbEhlaWdodHMobmV3SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCh3YWxsID0+IHtcclxuICAgICAgd2FsbC5oZWlnaHQgPSBuZXdIZWlnaHQgLyAxMDA7XHJcbiAgICAgIHdhbGwuZmlyZVJlZHJhdygpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnVwZGF0ZUNlaWxpbmdzKCk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHVwZGF0ZVJvb21zKHJvb21Db3JuZXJzOiBDb3JuZXJbXVtdKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2god2FsbCA9PiB3YWxsLnJlc2V0RnJvbnRCYWNrKCkpO1xyXG4gICAgdGhpcy5yb29tcy5mb3JFYWNoKHIgPT4gci5kaXNwb3NlKCkpO1xyXG4gICAgdGhpcy5yb29tcyA9IFtdO1xyXG4gICAgcm9vbUNvcm5lcnMuZm9yRWFjaCgoY29ybmVyczogQ29ybmVyW10pID0+IHtcclxuICAgICAgdGhpcy5yb29tcy5wdXNoKG5ldyBSb29tKGNvcm5lcnMsICB0aGlzLl9kZWZhdWx0Rmxvb3JUZXh0dXJlKSk7XHJcbiAgICB9KTtcclxuICAgIGF3YWl0IHRoaXMudXBkYXRlRmxvb3JzQW5kRWRnZXMoKTtcclxuICAgIHRoaXMuX2Fzc2lnbk9ycGhhbkVkZ2VzKCk7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2god2FsbCA9PiB3YWxsLnVwZGF0ZVdhbGxJdGVtcygpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbHMuZm9yRWFjaCgod2FsbCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbW92ZVdhbGwod2FsbCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMud2FsbHMubGVuZ3RoID0gMDtcclxuICAgIHRoaXMuZmxvb3JDb2xvcnMgPSB7fTtcclxuICAgIHRoaXMuZmxvb3JUZXh0dXJlcyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFdhbGwoZXZlbnQ6IE1vdXNlRXZlbnQsIHdhbGw6IFdhbGwsIGVkZ2U6IEhhbGZFZGdlKTogdm9pZCB7XHJcbiAgICB0aGlzLndhbGxTZWxlY3RlZC5uZXh0KHtldmVudDogZXZlbnQsIHdhbGw6IHdhbGwsIGVkZ2U6IGVkZ2V9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWxlY3RGbG9vcihldmVudDogTW91c2VFdmVudCwgcm9vbTogUm9vbSk6IHZvaWQge1xyXG4gICAgdGhpcy5mbG9vclNlbGVjdGVkLm5leHQoe2V2ZW50OiBldmVudCwgcm9vbTogcm9vbX0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJvb21DZW50ZXIoKTogVmVjdG9yMyB7XHJcbiAgICBjb25zdCBmbG9vcnMgPSB0aGlzLmZsb29yUGxhbmVzKCk7XHJcbiAgICByZXR1cm4gZmxvb3JzICYmIGZsb29ycy5sZW5ndGggPiAwID8gZmxvb3JzWzBdLnBvc2l0aW9uIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVGbG9vcnNBbmRFZGdlcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuX2Zsb29yU2VydmljZS5yZW1vdmVGbG9vcnMoKTtcclxuICAgIHRoaXMuX2VkZ2VzLmZvckVhY2goKGVkZ2U6IEVkZ2UpID0+IHtcclxuICAgICAgZWRnZS5nZXRQbGFuZXMoKS5mb3JFYWNoKChwbGFuZTogTWVzaCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3NjZW5lU2VydmljZS5yZW1vdmVPYmplY3QocGxhbmUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fZWRnZXMubGVuZ3RoID0gMDtcclxuXHJcbiAgICAvLyBkcmF3IGZsb29yc1xyXG4gICAgY29uc3Qgc29ydGVkUm9vbXM6IFJvb21bXSA9IHRoaXMucm9vbXMuc29ydCgoYSwgYikgPT4gYS5hcmVhIC0gYi5hcmVhKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc29ydGVkUm9vbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3Qgcm9vbTogUm9vbSA9IHNvcnRlZFJvb21zW2ldO1xyXG4gICAgICBjb25zdCBzdG9yZWRDb2xvciA9IHRoaXMuZ2V0Rmxvb3JDb2xvcihyb29tLmdldFV1aWQoKSk7XHJcbiAgICAgIGNvbnN0IHN0b3JlZFRleHR1cmUgPSB0aGlzLmdldEZsb29yVGV4dHVyZShyb29tLmdldFV1aWQoKSk7XHJcbiAgICAgIGNvbnN0IGNvbG9yID0gc3RvcmVkQ29sb3IgPyBzdG9yZWRDb2xvciA6IHJvb20uZmxvb3JDb2xvcjtcclxuICAgICAgY29uc3QgdGV4dHVyZSA9IHN0b3JlZFRleHR1cmUgPyBzdG9yZWRUZXh0dXJlIDogKHJvb20uZmxvb3JUZXh0dXJlID8gcm9vbS5mbG9vclRleHR1cmUgOiB1bmRlZmluZWQpO1xyXG4gICAgICBjb25zdCBmbG9vclBsYW5lOiBGbG9vclBsYW5lSXRlbSA9IGF3YWl0IHRoaXMuX2Zsb29yU2VydmljZS5nZW5lcmF0ZUZsb29yUGxhbmUoXHJcbiAgICAgICAgICBzdG9yZWRUZXh0dXJlID8gbnVsbCA6IGNvbG9yLCBzdG9yZWRDb2xvciA/IChzdG9yZWRUZXh0dXJlID8gdGV4dHVyZSA6IG51bGwpIDogdGV4dHVyZSwgcm9vbS5pbnRlcmlvckNvcm5lcnMsIHNvcnRlZFJvb21zLnNsaWNlKDAsIGkpKTtcclxuICAgICAgZmxvb3JQbGFuZS5jaGlsZHJlblswXS51c2VyRGF0YS5yb29tID0gcm9vbTtcclxuICAgICAgcm9vbS5mbG9vclRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgICByb29tLmZsb29yQ29sb3IgPSBjb2xvcjtcclxuICAgICAgcm9vbS5mbG9vclBsYW5lID0gZmxvb3JQbGFuZTtcclxuICAgIH1cclxuICAgIC8vIGF3YWl0IHRoaXMucm9vbXNcclxuICAgIC8vICAgLnNvcnQoKGEsIGIpID0+IGEuYXJlYSAtIGIuYXJlYSlcclxuICAgIC8vICAgLmZvckVhY2goYXN5bmMgKHJvb20sIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgLy8gICAgIGNvbnN0IHN0b3JlZENvbG9yID0gdGhpcy5nZXRGbG9vckNvbG9yKHJvb20uZ2V0VXVpZCgpKTtcclxuICAgIC8vICAgICBjb25zdCBzdG9yZWRUZXh0dXJlID0gdGhpcy5nZXRGbG9vclRleHR1cmUocm9vbS5nZXRVdWlkKCkpO1xyXG4gICAgLy8gICAgIGNvbnN0IGNvbG9yID0gc3RvcmVkQ29sb3IgPyBzdG9yZWRDb2xvciA6IHJvb20uZmxvb3JDb2xvcjtcclxuICAgIC8vICAgICBjb25zdCB0ZXh0dXJlID0gc3RvcmVkVGV4dHVyZSA/IHN0b3JlZFRleHR1cmUgOiAocm9vbS5mbG9vclRleHR1cmUgPyByb29tLmZsb29yVGV4dHVyZSA6IHVuZGVmaW5lZCk7XHJcbiAgICAvLyAgICAgY29uc3QgZmxvb3JQbGFuZTogRmxvb3JQbGFuZUl0ZW0gPSBhd2FpdCB0aGlzLl9mbG9vclNlcnZpY2UuZ2VuZXJhdGVGbG9vclBsYW5lKFxyXG4gICAgLy8gICAgICAgc3RvcmVkVGV4dHVyZSA/IG51bGwgOiBjb2xvciwgc3RvcmVkQ29sb3IgPyAoc3RvcmVkVGV4dHVyZSA/IHRleHR1cmUgOiBudWxsKSA6IHRleHR1cmUsIHJvb20uaW50ZXJpb3JDb3JuZXJzLCBhcnJheS5zbGljZSgwLCBpbmRleCkpO1xyXG4gICAgLy8gICAgIGZsb29yUGxhbmUudXNlckRhdGEucm9vbSA9IHJvb207XHJcbiAgICAvLyAgICAgcm9vbS5mbG9vclRleHR1cmUgPSB0ZXh0dXJlO1xyXG4gICAgLy8gICAgIHJvb20uZmxvb3JDb2xvciA9IGNvbG9yO1xyXG4gICAgLy8gICAgIHJvb20uZmxvb3JQbGFuZSA9IGZsb29yUGxhbmU7XHJcbiAgICAvLyAgIH0pO1xyXG4gICAgLy9cclxuICAgIC8vIGRyYXcgZWRnZXNcclxuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy53YWxsRWRnZXMoKTtcclxuICAgIGlmIChlZGdlcyAmJiBlZGdlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWRnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBoYWxmRWRnZSA9IGVkZ2VzW2ldO1xyXG4gICAgICAgIGNvbnN0IG5ld0VkZ2U6IEVkZ2UgPSBuZXcgRWRnZShoYWxmRWRnZSk7XHJcbiAgICAgICAgYXdhaXQgbmV3RWRnZS5pbml0KCk7XHJcbiAgICAgICAgaGFsZkVkZ2UuZWRnZXMucHVzaChuZXdFZGdlKTtcclxuICAgICAgICB0aGlzLl9lZGdlcy5wdXNoKG5ld0VkZ2UpO1xyXG4gICAgICAgIGNvbnN0IHBsYW5lcyA9IG5ld0VkZ2UuZ2V0UGxhbmVzKCk7XHJcbiAgICAgICAgcGxhbmVzLmZvckVhY2goKHBsYW5lKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9zY2VuZVNlcnZpY2UuYWRkT2JqZWN0KHBsYW5lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGRyYXcgY2VpbGluZ3NcclxuICAgIHRoaXMudXBkYXRlQ2VpbGluZ3MoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVDZWlsaW5ncygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NlaWxpbmdTZXJ2aWNlLnJlbW92ZUNlaWxpbmdzKCk7XHJcbiAgICB0aGlzLnJvb21zXHJcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmFyZWEgLSBiLmFyZWEpXHJcbiAgICAgIC5mb3JFYWNoKChyb29tOiBSb29tKSA9PiB7XHJcbiAgICAgICAgcm9vbS51cGRhdGVXYWxsSGVpZ2h0cygpO1xyXG4gICAgICAgIGNvbnN0IGNlaWxpbmc6IFRocmVlTWVzaCA9IHRoaXMuX2NlaWxpbmdTZXJ2aWNlLmdlbmVyYXRlQ2VpbGluZ1BsYW5lKDB4ZTVlNWU1LCByb29tLmludGVyaW9yQ29ybmVycywgcm9vbS5lZGdlSGVpZ2h0cyk7XHJcbiAgICAgICAgaWYgKGNlaWxpbmcpIHtcclxuICAgICAgICAgIGNlaWxpbmcudXNlckRhdGEucm9vbSA9IHJvb207XHJcbiAgICAgICAgICByb29tLmNlaWxpbmdQbGFuZSA9IGNlaWxpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldEFsbFJvb21zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb29tcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd0hpZGVXYWxscyhzaG93OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLndhbGxzLmZvckVhY2godyA9PiB3LnNob3dIaWRlV2FsbChzaG93KSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlRWRnZVZpc2liaWxpdHkoY2FtZXJhUG9zaXRpb246IFZlY3RvcjMpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbEVkZ2VzKCkuZm9yRWFjaChlID0+IHtcclxuICAgICAgY29uc3QgdmlzaWJpbGl0eUNoYW5nZSA9IGUudXBkYXRlVmlzaWJpbGl0eShjYW1lcmFQb3NpdGlvbik7XHJcbiAgICAgIGlmICh2aXNpYmlsaXR5Q2hhbmdlICE9PSBudWxsKSB7XHJcbiAgICAgICAgY29uc3QgZWRnZVZpc2liaWxpdHlDaGFuZ2VzOiBFZGdlVmlzaWJpbGl0eUNoYW5nZXMgPSB7XHJcbiAgICAgICAgICBlZGdlOiBlLFxyXG4gICAgICAgICAgdmlzaWJpbGl0eTogdmlzaWJpbGl0eUNoYW5nZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5lZGdlVmlzaWJpbGl0eUNoYW5nZWQubmV4dChlZGdlVmlzaWJpbGl0eUNoYW5nZXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEFsbEVkZ2VzVmlzaWJsZSgpIHtcclxuICAgIHRoaXMud2FsbEVkZ2VzKCkuZm9yRWFjaCgoZTogSGFsZkVkZ2UpID0+IHtcclxuICAgICAgZS51cGRhdGVWaXNpYmxpdHkodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IGVkZ2VWaXNpYmlsaXR5Q2hhbmdlczogRWRnZVZpc2liaWxpdHlDaGFuZ2VzID0ge1xyXG4gICAgICAgIGVkZ2U6IGUsXHJcbiAgICAgICAgdmlzaWJpbGl0eTogdHJ1ZVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmVkZ2VWaXNpYmlsaXR5Q2hhbmdlZC5uZXh0KGVkZ2VWaXNpYmlsaXR5Q2hhbmdlcyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZUZsb29yVGV4dHVyZXMoKSB7XHJcbiAgICBjb25zdCB1dWlkcyA9IFV0aWxzLm1hcCh0aGlzLnJvb21zLCBmdW5jdGlvbiAocm9vbSkge1xyXG4gICAgICByZXR1cm4gcm9vbS5nZXRVdWlkKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHV1aWQgaW4gdGhpcy5mbG9vclRleHR1cmVzKSB7XHJcbiAgICAgIGlmICghVXRpbHMuaGFzVmFsdWUodXVpZHMsIHV1aWQpKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZmxvb3JUZXh0dXJlc1t1dWlkXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfYXNzaWduT3JwaGFuRWRnZXMoKSB7XHJcbiAgICAvLyBraW5kYSBoYWNreVxyXG4gICAgLy8gZmluZCBvcnBoYW5lZCB3YWxsIHNlZ21lbnRzIChpLmUuIG5vdCBwYXJ0IG9mIHJvb21zKSBhbmRcclxuICAgIC8vIGdpdmUgdGhlbSBlZGdlc1xyXG4gICAgdGhpcy5vcnBoYW5XYWxscyA9IFtdO1xyXG4gICAgdGhpcy53YWxscy5mb3JFYWNoKCh3YWxsKSA9PiB7XHJcbiAgICAgIGlmICghd2FsbC5iYWNrRWRnZSAmJiAhd2FsbC5mcm9udEVkZ2UpIHtcclxuICAgICAgICB3YWxsLm9ycGhhbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgYmFjayA9IG5ldyBIYWxmRWRnZShudWxsLCB3YWxsLCBmYWxzZSk7XHJcbiAgICAgICAgYmFjay5nZW5lcmF0ZVBsYW5lKCk7XHJcbiAgICAgICAgY29uc3QgZnJvbnQgPSBuZXcgSGFsZkVkZ2UobnVsbCwgd2FsbCwgdHJ1ZSk7XHJcbiAgICAgICAgZnJvbnQuZ2VuZXJhdGVQbGFuZSgpO1xyXG4gICAgICAgIHdhbGwudXBkYXRlSW5XYWxsSXRlbXMoKTtcclxuICAgICAgICB0aGlzLm9ycGhhbldhbGxzLnB1c2god2FsbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -36,7 +36,7 @@ import * as i18 from "@angular/common";
36
36
  import * as i19 from "@angular/material/input";
37
37
  import * as i20 from "../../../../core/pipe/localize.pipe";
38
38
  export class SettingsComponent {
39
- constructor(settingsService, _snackBar, _messageBus, _configurationService, _sceneService, _itemService, _appService, _fontService) {
39
+ constructor(settingsService, _snackBar, _messageBus, _configurationService, _sceneService, _itemService, _appService, _fontService, _settingsService) {
40
40
  this.settingsService = settingsService;
41
41
  this._snackBar = _snackBar;
42
42
  this._messageBus = _messageBus;
@@ -45,6 +45,7 @@ export class SettingsComponent {
45
45
  this._itemService = _itemService;
46
46
  this._appService = _appService;
47
47
  this._fontService = _fontService;
48
+ this._settingsService = _settingsService;
48
49
  this.configurationKey = ConfigurationKey;
49
50
  this.onWallsHeightUpdate = new EventEmitter();
50
51
  this.version = 'Version: ' + (VersionInfo.appVersion || 'Unknown')
@@ -63,6 +64,8 @@ export class SettingsComponent {
63
64
  this.showCameraControls = this._configurationService.getValue(ConfigurationKey.ShowWalkThroughCameraControls);
64
65
  this.showLightControls = this._configurationService.getValue(ConfigurationKey.ShowLightingControls);
65
66
  this.showPostProcessingSettings = this._configurationService.getValue(ConfigurationKey.ShowPostProcessingSettings);
67
+ this.showAA = this._settingsService.settings.options.aaEnabled;
68
+ this.showAO = this._settingsService.settings.options.aoEnabled;
66
69
  this.showWalls = this._configurationService.getValue(ConfigurationKey.ShowWalls);
67
70
  this.showCeiling = this._configurationService.getValue(ConfigurationKey.ShowCeiling);
68
71
  this.wallSnapping = this._configurationService.getValue(ConfigurationKey.WallSnapping);
@@ -86,6 +89,10 @@ export class SettingsComponent {
86
89
  this[key] = checked;
87
90
  this._configurationService.setValue(key, checked);
88
91
  }
92
+ toggleOption(option, checked) {
93
+ this._settingsService.settings.options[option] = checked;
94
+ this._settingsService.settingsChanged.next();
95
+ }
89
96
  setInteriorLightIntensity(value) {
90
97
  this._configurationService.setValue(ConfigurationKey.InteriorLightIntensity, value);
91
98
  }
@@ -166,8 +173,8 @@ export class SettingsComponent {
166
173
  });
167
174
  }
168
175
  }
169
- SettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SettingsComponent, deps: [{ token: i1.HomedecoratorSettingsService }, { token: i2.MatSnackBar }, { token: i3.MessageBusService }, { token: i4.ConfigurationService }, { token: i5.SceneService }, { token: i6.ItemService }, { token: i7.HomedecoratorAppService }, { token: i8.FontService }], target: i0.ɵɵFactoryTarget.Component });
170
- SettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SettingsComponent, selector: "rp-settings", inputs: { minWallHeight: "minWallHeight", placeCameraDisabled: "placeCameraDisabled" }, outputs: { onWallsHeightUpdate: "onWallsHeightUpdate" }, viewQueries: [{ propertyName: "versionFieldRef", first: true, predicate: ["versionField"], descendants: true, static: true }], ngImport: i0, template: "\r\n\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_TOUCH' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"enableTouch\"\r\n (change)=\"toggle(configurationKey.EnableTouch, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n\r\n<h3 class=\"mat-subheading-2\">{{'WALLS' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <rp-dimension-input\r\n [sourceValue]=\"wallHeight\"\r\n [minValue]=\"minWallHeight\"\r\n title=\"{{'DEFAULT_HEIGHT' | localize}}\"\r\n (dimensionChanged)=\"applyNewHeight($event)\"\r\n >\r\n </rp-dimension-input>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'DEFAULT_THICKNESS' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{wallThickness}}</span>\r\n</div>\r\n<div *ngIf=\"showDetailedWallMeasurements\" class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DETAILED_WALL_MEASUREMENTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showDetailedWallMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowDetailedWallMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DISTANCES_OF_WALL_ITEMS_IN_2D' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showWallItemMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowWallItemMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_SNAPPING_OF_WALLS_TO_BASIC_ANGLES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"wallSnapping\"\r\n (change)=\"toggle(configurationKey.WallSnapping, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_SNAPPING_TO_WALL_JOINTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"cornerSnapping\"\r\n (change)=\"toggle(configurationKey.CornerSnapping, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'OBJECTS' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DISTANCES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showObjectDistances\"\r\n (change)=\"toggle(configurationKey.ShowObjectDistances, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_MEASUREMENTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showObjectMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowObjectMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_ROTATION_SNAPPING' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"rotationSnappingEnabled\"\r\n (change)=\"toggle(configurationKey.RotationSnappingEnabled, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'DISPLAY_CUSTOM_SHAPE_NAMES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"displayCustomShapeNames\"\r\n (change)=\"toggle(configurationKey.DisplayCustomShapeNames, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'UNIT_INFO' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'MEASUREMENTS' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{dimensioningUnit}}</span>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ANGLES' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{angleUnit}}</span>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'CAMERA' | localize}}</h3>\r\n<b class=\"mat-body-2\">{{'SET_START_POSITION_FOR_WALK_THROUGH_MODE' | localize}}</b>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n [disabled]=\"placeCameraDisabled\"\r\n class=\"place-camera\"\r\n (click)=\"placeCamera()\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">photo_camera</mat-icon>\r\n {{'PLACE_CAMERA' | localize}}\r\n </button>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_CAMERA_CONFIGURATION' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showCameraControls\"\r\n (change)=\"toggle(configurationKey.ShowWalkThroughCameraControls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<div class=\"panel-item\" fxLayout=\"column\">\r\n <h3 class=\"mat-subheading-2\">{{'CLEAR_ROOM' | localize}}</h3>\r\n <b class=\"mat-body-2\">{{'CLEAR_ALL_FURNITURE_FROM_ROOM' | localize}}</b>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n class=\"remove-all\"\r\n (click)=\"removeAll()\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">delete_sweep</mat-icon>\r\n {{'CLEAR_FURNITURE' | localize}}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-container *ngIf=\"settingsService.settings.options.development\">\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <h3 class=\"mat-subheading-2\">{{'LIGHTS' | localize}}</h3>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_LIGHTING_CONFIGURATION' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showLightControls\"\r\n (change)=\"toggle(configurationKey.ShowLightingControls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n (click)=\"toggle(configurationKey.ShowLightplansDialog, true)\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\r\n {{'MANAGE_LIGHTPLANS' | localize}}\r\n </button>\r\n </div>\r\n <div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_INTERIOR_LIGHTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showInteriorLights\"\r\n (change)=\"toggle(configurationKey.ShowInteriorLights, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'INTERIOR_LIGHT_INTENSITY' | localize}}</b>\r\n <mat-slider\r\n class=\"slider-group-slider\"\r\n [min]=\"1\"\r\n [max]=\"1600\"\r\n [step]=\"1\"\r\n [value]=\"interiorLightIntensity\"\r\n thumbLabel\r\n (input)=\"setInteriorLightIntensity($event.value)\"\r\n fxFlex=\"grow\">\r\n </mat-slider>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_POST_PROCESSING_SETTINGS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showPostProcessingSettings\"\r\n (change)=\"toggle(configurationKey.ShowPostProcessingSettings, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_WALLS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showWalls\"\r\n (change)=\"toggle(configurationKey.ShowWalls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_CEILING' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showCeiling\"\r\n (change)=\"toggle(configurationKey.ShowCeiling, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button (click)=\"hideMaterials()\">{{ 'HIDE_MATERIALS' | localize }}</button>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button (click)=\"showConnectors()\">{{ 'SHOW_CONNECTORS' | localize }}</button>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n (click)=\"showSettingsOptions = true\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">settings</mat-icon>\r\n {{'SHOW_SETTINGS_OPTIONS' | localize}}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <b class=\"mat-body-2\">{{'APP_VERSION' | localize}}:</b>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n #versionField\r\n type=\"text\"\r\n readonly=\"true\"\r\n [value]=\"version\"\r\n (click)=\"selectVersionFieldContent()\"\r\n />\r\n <mat-icon matSuffix (click)=\"copyToClipboard()\">file_copy</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n <h3 class=\"mat-subheading-2\">{{'CONNECTION' | localize}}</h3>\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <b class=\"mat-body-2\">{{'iONE backend url' | localize}}:</b>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n #ioneBackendUrl\r\n type=\"text\"\r\n [value]=\"settingsService.settings?.url\"\r\n (keydown)=\"handleBackendUrlChange($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n</ng-container>\r\n<div class=\"powered-by-wrapper\">\r\n <span>MyRoomPlans is powered by</span>\r\n <span class=\"powered-logo-wrapper\">\r\n <a href=\"https://www.colijn-it.nl\" target=\"_blank\" alt=\"Colijn IT\" class=\"colijn-it-logo\"><img src=\"assets/images/colijn-logo.webp\"/></a>\r\n <a href=\"https://ione360.com\" target=\"_blank\" alt=\"iONE360\" class=\"ione-360-logo\"><img src=\"assets/images/ione360-logo.webp\"/></a>\r\n </span>\r\n <span>Copyright Colijn IT 2021</span>\r\n</div>\r\n<settings-options *ngIf=\"showSettingsOptions\" (onclose)=\"showSettingsOptions = false\"></settings-options>\r\n", styles: [":host{overflow-y:auto;overflow-x:hidden}:host .powered-by-wrapper{margin-top:20px;font-size:12px}:host .powered-by-wrapper .powered-logo-wrapper{display:flex;align-items:center;justify-content:space-between}:host .powered-by-wrapper .colijn-it-logo{margin:0 5px}:host .powered-by-wrapper .colijn-it-logo img{width:100px}:host .powered-by-wrapper .ione-360-logo{margin:5px}:host .powered-by-wrapper .ione-360-logo img{width:134px}.panel-item{min-height:40px}.panel-item+h3{margin-top:16px}mat-form-field{width:100%}::ng-deep .mat-drawer-content{overflow-y:auto;overflow-x:hidden}\n"], components: [{ type: i9.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: i10.DimensionInputComponent, selector: "rp-dimension-input", inputs: ["minValue", "maxValue", "sourceValue", "title"], outputs: ["dimensionChanged", "focus", "blur"] }, { type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i13.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "vertical", "displayWith", "valueText"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { type: i14.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i15.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i16.SettingsOptionsComponent, selector: "settings-options", outputs: ["onclose"] }], directives: [{ type: i17.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i17.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i18.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i17.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i19.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i15.MatSuffix, selector: "[matSuffix]" }], pipes: { "localize": i20.LocalizePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
176
+ SettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SettingsComponent, deps: [{ token: i1.HomedecoratorSettingsService }, { token: i2.MatSnackBar }, { token: i3.MessageBusService }, { token: i4.ConfigurationService }, { token: i5.SceneService }, { token: i6.ItemService }, { token: i7.HomedecoratorAppService }, { token: i8.FontService }, { token: i1.HomedecoratorSettingsService }], target: i0.ɵɵFactoryTarget.Component });
177
+ SettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SettingsComponent, selector: "rp-settings", inputs: { minWallHeight: "minWallHeight", placeCameraDisabled: "placeCameraDisabled" }, outputs: { onWallsHeightUpdate: "onWallsHeightUpdate" }, viewQueries: [{ propertyName: "versionFieldRef", first: true, predicate: ["versionField"], descendants: true, static: true }], ngImport: i0, template: "\r\n\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_TOUCH' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"enableTouch\"\r\n (change)=\"toggle(configurationKey.EnableTouch, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n\r\n<h3 class=\"mat-subheading-2\">{{'WALLS' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <rp-dimension-input\r\n [sourceValue]=\"wallHeight\"\r\n [minValue]=\"minWallHeight\"\r\n title=\"{{'DEFAULT_HEIGHT' | localize}}\"\r\n (dimensionChanged)=\"applyNewHeight($event)\"\r\n >\r\n </rp-dimension-input>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'DEFAULT_THICKNESS' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{wallThickness}}</span>\r\n</div>\r\n<div *ngIf=\"showDetailedWallMeasurements\" class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DETAILED_WALL_MEASUREMENTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showDetailedWallMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowDetailedWallMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DISTANCES_OF_WALL_ITEMS_IN_2D' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showWallItemMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowWallItemMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_SNAPPING_OF_WALLS_TO_BASIC_ANGLES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"wallSnapping\"\r\n (change)=\"toggle(configurationKey.WallSnapping, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_SNAPPING_TO_WALL_JOINTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"cornerSnapping\"\r\n (change)=\"toggle(configurationKey.CornerSnapping, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'OBJECTS' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_DISTANCES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showObjectDistances\"\r\n (change)=\"toggle(configurationKey.ShowObjectDistances, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_MEASUREMENTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showObjectMeasurements\"\r\n (change)=\"toggle(configurationKey.ShowObjectMeasurements, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ENABLE_ROTATION_SNAPPING' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"rotationSnappingEnabled\"\r\n (change)=\"toggle(configurationKey.RotationSnappingEnabled, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n<div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'DISPLAY_CUSTOM_SHAPE_NAMES' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"displayCustomShapeNames\"\r\n (change)=\"toggle(configurationKey.DisplayCustomShapeNames, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'UNIT_INFO' | localize}}</h3>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'MEASUREMENTS' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{dimensioningUnit}}</span>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'ANGLES' | localize}}:</b>\r\n <span class=\"mat-body-1\">{{angleUnit}}</span>\r\n</div>\r\n\r\n<h3 class=\"mat-subheading-2\">{{'CAMERA' | localize}}</h3>\r\n<b class=\"mat-body-2\">{{'SET_START_POSITION_FOR_WALK_THROUGH_MODE' | localize}}</b>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n [disabled]=\"placeCameraDisabled\"\r\n class=\"place-camera\"\r\n (click)=\"placeCamera()\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">photo_camera</mat-icon>\r\n {{'PLACE_CAMERA' | localize}}\r\n </button>\r\n</div>\r\n<div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_CAMERA_CONFIGURATION' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showCameraControls\"\r\n (change)=\"toggle(configurationKey.ShowWalkThroughCameraControls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n</div>\r\n\r\n<div class=\"panel-item\" fxLayout=\"column\">\r\n <h3 class=\"mat-subheading-2\">{{'CLEAR_ROOM' | localize}}</h3>\r\n <b class=\"mat-body-2\">{{'CLEAR_ALL_FURNITURE_FROM_ROOM' | localize}}</b>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n class=\"remove-all\"\r\n (click)=\"removeAll()\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">delete_sweep</mat-icon>\r\n {{'CLEAR_FURNITURE' | localize}}\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<ng-container *ngIf=\"settingsService.settings.options.development\">\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <h3 class=\"mat-subheading-2\">{{'LIGHTS' | localize}}</h3>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_LIGHTING_CONFIGURATION' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showLightControls\"\r\n (change)=\"toggle(configurationKey.ShowLightingControls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n (click)=\"toggle(configurationKey.ShowLightplansDialog, true)\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">wb_incandescent</mat-icon>\r\n {{'MANAGE_LIGHTPLANS' | localize}}\r\n </button>\r\n </div>\r\n <div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_INTERIOR_LIGHTS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showInteriorLights\"\r\n (change)=\"toggle(configurationKey.ShowInteriorLights, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" psefxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'INTERIOR_LIGHT_INTENSITY' | localize}}</b>\r\n <mat-slider\r\n class=\"slider-group-slider\"\r\n [min]=\"1\"\r\n [max]=\"1600\"\r\n [step]=\"1\"\r\n [value]=\"interiorLightIntensity\"\r\n thumbLabel\r\n (input)=\"setInteriorLightIntensity($event.value)\"\r\n fxFlex=\"grow\">\r\n </mat-slider>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_POST_PROCESSING_SETTINGS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showPostProcessingSettings\"\r\n (change)=\"toggle(configurationKey.ShowPostProcessingSettings, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_AA' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showAA\"\r\n (change)=\"toggleOption('aaEnabled', $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_AO' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showAO\"\r\n (change)=\"toggleOption('aoEnabled', $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_WALLS' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showWalls\"\r\n (change)=\"toggle(configurationKey.ShowWalls, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <b class=\"mat-body-2\">{{'SHOW_CEILING' | localize}}</b>\r\n <mat-slide-toggle\r\n min=\"0\"\r\n max=\"1\"\r\n [checked]=\"showCeiling\"\r\n (change)=\"toggle(configurationKey.ShowCeiling, $event.checked)\"\r\n >\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button (click)=\"hideMaterials()\">{{ 'HIDE_MATERIALS' | localize }}</button>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button (click)=\"showConnectors()\">{{ 'SHOW_CONNECTORS' | localize }}</button>\r\n </div>\r\n <div class=\"panel-item\" fxLayout=\"row\" fxLayoutAlign=\"space-between center\">\r\n <button\r\n mat-button\r\n (click)=\"showSettingsOptions = true\"\r\n fxLayout=\"row\"\r\n fxLayoutalign=\"center center\"\r\n >\r\n <mat-icon class=\"homedecorator-material-icons\">settings</mat-icon>\r\n {{'SHOW_SETTINGS_OPTIONS' | localize}}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <mat-divider></mat-divider>\r\n\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <b class=\"mat-body-2\">{{'APP_VERSION' | localize}}:</b>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n #versionField\r\n type=\"text\"\r\n readonly=\"true\"\r\n [value]=\"version\"\r\n (click)=\"selectVersionFieldContent()\"\r\n />\r\n <mat-icon matSuffix (click)=\"copyToClipboard()\">file_copy</mat-icon>\r\n </mat-form-field>\r\n </div>\r\n <h3 class=\"mat-subheading-2\">{{'CONNECTION' | localize}}</h3>\r\n <div class=\"panel-item\" fxLayout=\"column\">\r\n <b class=\"mat-body-2\">{{'iONE backend url' | localize}}:</b>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n #ioneBackendUrl\r\n type=\"text\"\r\n [value]=\"settingsService.settings?.url\"\r\n (keydown)=\"handleBackendUrlChange($event)\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n\r\n</ng-container>\r\n<div class=\"powered-by-wrapper\">\r\n <span>MyRoomPlans is powered by</span>\r\n <span class=\"powered-logo-wrapper\">\r\n <a href=\"https://www.colijn-it.nl\" target=\"_blank\" alt=\"Colijn IT\" class=\"colijn-it-logo\"><img src=\"assets/images/colijn-logo.webp\"/></a>\r\n <a href=\"https://ione360.com\" target=\"_blank\" alt=\"iONE360\" class=\"ione-360-logo\"><img src=\"assets/images/ione360-logo.webp\"/></a>\r\n </span>\r\n <span>Copyright Colijn IT 2021</span>\r\n</div>\r\n<settings-options *ngIf=\"showSettingsOptions\" (onclose)=\"showSettingsOptions = false\"></settings-options>\r\n", styles: [":host{overflow-y:auto;overflow-x:hidden}:host .powered-by-wrapper{margin-top:20px;font-size:12px}:host .powered-by-wrapper .powered-logo-wrapper{display:flex;align-items:center;justify-content:space-between}:host .powered-by-wrapper .colijn-it-logo{margin:0 5px}:host .powered-by-wrapper .colijn-it-logo img{width:100px}:host .powered-by-wrapper .ione-360-logo{margin:5px}:host .powered-by-wrapper .ione-360-logo img{width:134px}.panel-item{min-height:40px}.panel-item+h3{margin-top:16px}mat-form-field{width:100%}::ng-deep .mat-drawer-content{overflow-y:auto;overflow-x:hidden}\n"], components: [{ type: i9.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: i10.DimensionInputComponent, selector: "rp-dimension-input", inputs: ["minValue", "maxValue", "sourceValue", "title"], outputs: ["dimensionChanged", "focus", "blur"] }, { type: i11.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i12.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i13.MatSlider, selector: "mat-slider", inputs: ["disabled", "color", "tabIndex", "invert", "max", "min", "step", "thumbLabel", "tickInterval", "value", "vertical", "displayWith", "valueText"], outputs: ["change", "input", "valueChange"], exportAs: ["matSlider"] }, { type: i14.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i15.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i16.SettingsOptionsComponent, selector: "settings-options", outputs: ["onclose"] }], directives: [{ type: i17.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i17.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i18.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i17.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i19.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i15.MatSuffix, selector: "[matSuffix]" }], pipes: { "localize": i20.LocalizePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
171
178
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SettingsComponent, decorators: [{
172
179
  type: Component,
173
180
  args: [{
@@ -176,7 +183,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
176
183
  styleUrls: ['./settings.component.scss'],
177
184
  changeDetection: ChangeDetectionStrategy.OnPush
178
185
  }]
179
- }], ctorParameters: function () { return [{ type: i1.HomedecoratorSettingsService }, { type: i2.MatSnackBar }, { type: i3.MessageBusService }, { type: i4.ConfigurationService }, { type: i5.SceneService }, { type: i6.ItemService }, { type: i7.HomedecoratorAppService }, { type: i8.FontService }]; }, propDecorators: { versionFieldRef: [{
186
+ }], ctorParameters: function () { return [{ type: i1.HomedecoratorSettingsService }, { type: i2.MatSnackBar }, { type: i3.MessageBusService }, { type: i4.ConfigurationService }, { type: i5.SceneService }, { type: i6.ItemService }, { type: i7.HomedecoratorAppService }, { type: i8.FontService }, { type: i1.HomedecoratorSettingsService }]; }, propDecorators: { versionFieldRef: [{
180
187
  type: ViewChild,
181
188
  args: ['versionField', { static: true }]
182
189
  }], minWallHeight: [{
@@ -186,4 +193,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
186
193
  }], onWallsHeightUpdate: [{
187
194
  type: Output
188
195
  }] } });
189
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL3NldHRpbmdzL3NldHRpbmdzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd4SSxPQUFPLEVBQUMsSUFBSSxFQUFXLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQVFwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVF2RCxNQUFNLE9BQU8saUJBQWlCO0lBcUM1QixZQUNTLGVBQTZDLEVBQzVDLFNBQXNCLEVBQ3RCLFdBQThCLEVBQzlCLHFCQUEyQyxFQUMzQyxhQUEyQixFQUMzQixZQUF5QixFQUN6QixXQUFvQyxFQUNwQyxZQUF5QjtRQVAxQixvQkFBZSxHQUFmLGVBQWUsQ0FBOEI7UUFDNUMsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFDOUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFzQjtRQUMzQyxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsaUJBQVksR0FBWixZQUFZLENBQWE7UUE1Q25CLHFCQUFnQixHQUE0QixnQkFBZ0IsQ0FBQztRQU9uRSx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXBELFlBQU8sR0FDVixXQUFXLEdBQUcsQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQztjQUNuRCxLQUFLO2NBQ0wsWUFBWSxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsQ0FBQztRQXFCaEQsd0JBQW1CLEdBQVksS0FBSyxDQUFDO0lBWXpDLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDM0csSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN2SCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQy9HLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BHLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDbkgsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkYsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDN0csSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzNHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBYztRQUNsQyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBcUIsRUFBRSxPQUFnQjtRQUNuRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxLQUFhO1FBQzVDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUN4QyxDQUFDO0lBRU0sV0FBVyxDQUFDLENBQVMsRUFBRSxDQUFTO1FBQ3JDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRVksV0FBVzs7WUFDdEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2xFLDZDQUE2QztZQUM3QyxvQkFBb0I7WUFDcEIsNkVBQTZFO1lBQzdFLG9DQUFvQztZQUNwQyxNQUFNO1lBQ04sdUZBQXVGO1FBQ3pGLENBQUM7S0FBQTtJQUVNLHNCQUFzQixDQUFDLEtBQW9CO1FBQ2hELElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUU7WUFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFJLEtBQUssQ0FBQyxVQUFrQixDQUFDLEtBQUssQ0FBQztZQUNwRSxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDO0lBRU0sYUFBYTtRQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDO1FBQy9FLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFZLEVBQUUsRUFBRTtZQUM3QixFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTyxFQUFFLEVBQUU7Z0JBQ3ZGLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLElBQUksQ0FBQyxDQUFDO2dCQUMzRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTyxFQUFFLEVBQUU7b0JBQ3pCLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO29CQUN6RSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ3hCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO3dCQUNsQixHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDekIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFZLEVBQUUsRUFBRTtZQUN6RCxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBVyxFQUFFLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDbkQsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2pCLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUU7d0JBQ2QsSUFBSSxFQUFFLFlBQVksSUFBSSxFQUFFOzRCQUN0QixNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQzs0QkFDNUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dDQUN4QixHQUFHLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztnQ0FDaEIsR0FBRyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7NEJBQzFCLENBQUMsQ0FBQyxDQUFDO3lCQUNKO29CQUNILENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksU0FBUyxHQUFlLENBQUMsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztvQkFDaEUsSUFBSSxDQUFDLFNBQVMsRUFBRTt3QkFDZCxTQUFTLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUNwRixDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUNsQjtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDeEMsQ0FBQztJQUVELHlCQUF5QjtRQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzVDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsSUFBSSxFQUFFO1lBQ25ELFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7K0dBMUtVLGlCQUFpQjttR0FBakIsaUJBQWlCLG1VQ3ZCOUIsZ3JYQTRTQTs0RkRyUmEsaUJBQWlCO2tCQU43QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxhQUFhO29CQUN2QixXQUFXLEVBQUUsMkJBQTJCO29CQUN4QyxTQUFTLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztvQkFDeEMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEO3FVQUk4QyxlQUFlO3NCQUEzRCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRWxDLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVJLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNYXRTbmFja0Jhcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuXHJcbmltcG9ydCB7TWVzaCwgT2JqZWN0M0R9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uS2V5fSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vY29uZmlndXJhdGlvbi1rZXkuZW51bSc7XHJcbmltcG9ydCB7VmVyc2lvbkluZm99IGZyb20gJy4uLy4uLy4uLy4uL2FwcC52ZXJzaW9uJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7Rm9udFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2ZvbnQuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0nO1xyXG5pbXBvcnQge21ha2VUZXh0TWVzaH0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2h1ZC91dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JwLXNldHRpbmdzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NldHRpbmdzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFNldHRpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHB1YmxpYyByZWFkb25seSBjb25maWd1cmF0aW9uS2V5OiB0eXBlb2YgQ29uZmlndXJhdGlvbktleSA9IENvbmZpZ3VyYXRpb25LZXk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3ZlcnNpb25GaWVsZCcsIHsgc3RhdGljOiB0cnVlIH0pIHZlcnNpb25GaWVsZFJlZjogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgbWluV2FsbEhlaWdodDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHBsYWNlQ2FtZXJhRGlzYWJsZWQ6IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBvbldhbGxzSGVpZ2h0VXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIHB1YmxpYyB2ZXJzaW9uOiBzdHJpbmdcclxuICAgID0gJ1ZlcnNpb246ICcgKyAoVmVyc2lvbkluZm8uYXBwVmVyc2lvbiB8fCAnVW5rbm93bicpXHJcbiAgICArICcgfCAnXHJcbiAgICArICdSZXZpc2lvbjogJyArIChWZXJzaW9uSW5mby5yZXZpc2lvbiB8fCAnVW5rbm93bicpO1xyXG5cclxuICBwdWJsaWMgd2FsbEhlaWdodDogbnVtYmVyO1xyXG4gIHB1YmxpYyBkaW1lbnNpb25pbmdVbml0OiBzdHJpbmc7XHJcbiAgcHVibGljIGFuZ2xlVW5pdDogc3RyaW5nO1xyXG4gIHB1YmxpYyB3YWxsVGhpY2tuZXNzOiBudW1iZXI7XHJcbiAgcHVibGljIHNob3dPYmplY3REaXN0YW5jZXM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dPYmplY3RNZWFzdXJlbWVudHM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dXYWxsSXRlbU1lYXN1cmVtZW50czogYm9vbGVhbjtcclxuICBwdWJsaWMgcm90YXRpb25TbmFwcGluZ0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dDYW1lcmFDb250cm9sczogYm9vbGVhbjtcclxuICBwdWJsaWMgc2hvd0xpZ2h0Q29udHJvbHM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dQb3N0UHJvY2Vzc2luZ1NldHRpbmdzOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzaG93V2FsbHM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dDZWlsaW5nOiBib29sZWFuO1xyXG4gIHB1YmxpYyB3YWxsU25hcHBpbmc6IGJvb2xlYW47XHJcbiAgcHVibGljIGNvcm5lclNuYXBwaW5nOiBib29sZWFuO1xyXG4gIHB1YmxpYyBkaXNwbGF5Q3VzdG9tU2hhcGVOYW1lczogYm9vbGVhbjtcclxuICBwdWJsaWMgc2hvd0ludGVyaW9yTGlnaHRzOiBib29sZWFuO1xyXG4gIHB1YmxpYyBpbnRlcmlvckxpZ2h0SW50ZW5zaXR5OiBudW1iZXI7XHJcbiAgcHVibGljIHNob3dTZXR0aW5nc09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZW5hYmxlVG91Y2g6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHNldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgIHByaXZhdGUgX21lc3NhZ2VCdXM6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hcHBTZXJ2aWNlOiBIb21lZGVjb3JhdG9yQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgX2ZvbnRTZXJ2aWNlOiBGb250U2VydmljZVxyXG4gICkge31cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy53YWxsSGVpZ2h0ID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5XYWxsSGVpZ2h0KTtcclxuICAgIHRoaXMud2FsbFRoaWNrbmVzcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuV2FsbFRoaWNrbmVzcyk7XHJcbiAgICB0aGlzLnNob3dPYmplY3REaXN0YW5jZXMgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LlNob3dPYmplY3REaXN0YW5jZXMpO1xyXG4gICAgdGhpcy5zaG93T2JqZWN0TWVhc3VyZW1lbnRzID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5TaG93T2JqZWN0TWVhc3VyZW1lbnRzKTtcclxuICAgIHRoaXMuc2hvd0RldGFpbGVkV2FsbE1lYXN1cmVtZW50cyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuU2hvd0RldGFpbGVkV2FsbE1lYXN1cmVtZW50cyk7XHJcbiAgICB0aGlzLnNob3dXYWxsSXRlbU1lYXN1cmVtZW50cyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuU2hvd1dhbGxJdGVtTWVhc3VyZW1lbnRzKTtcclxuICAgIHRoaXMucm90YXRpb25TbmFwcGluZ0VuYWJsZWQgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LlJvdGF0aW9uU25hcHBpbmdFbmFibGVkKTtcclxuICAgIHRoaXMuc2hvd0NhbWVyYUNvbnRyb2xzID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5TaG93V2Fsa1Rocm91Z2hDYW1lcmFDb250cm9scyk7XHJcbiAgICB0aGlzLnNob3dMaWdodENvbnRyb2xzID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5TaG93TGlnaHRpbmdDb250cm9scyk7XHJcbiAgICB0aGlzLnNob3dQb3N0UHJvY2Vzc2luZ1NldHRpbmdzID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5TaG93UG9zdFByb2Nlc3NpbmdTZXR0aW5ncyk7XHJcbiAgICB0aGlzLnNob3dXYWxscyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuU2hvd1dhbGxzKTtcclxuICAgIHRoaXMuc2hvd0NlaWxpbmcgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LlNob3dDZWlsaW5nKTtcclxuICAgIHRoaXMud2FsbFNuYXBwaW5nID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5XYWxsU25hcHBpbmcpO1xyXG4gICAgdGhpcy5jb3JuZXJTbmFwcGluZyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuQ29ybmVyU25hcHBpbmcpO1xyXG4gICAgdGhpcy5kaXNwbGF5Q3VzdG9tU2hhcGVOYW1lcyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuRGlzcGxheUN1c3RvbVNoYXBlTmFtZXMpO1xyXG4gICAgdGhpcy5zaG93SW50ZXJpb3JMaWdodHMgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LlNob3dJbnRlcmlvckxpZ2h0cyk7XHJcbiAgICB0aGlzLmludGVyaW9yTGlnaHRJbnRlbnNpdHkgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LkludGVyaW9yTGlnaHRJbnRlbnNpdHkpO1xyXG4gICAgdGhpcy5kaW1lbnNpb25pbmdVbml0ID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5EaW1lbnNpb25pbmdVbml0KTtcclxuICAgIHRoaXMuYW5nbGVVbml0ID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5BbmdsZVVuaXQpO1xyXG4gICAgdGhpcy5lbmFibGVUb3VjaCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuRW5hYmxlVG91Y2gpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnZlcnNpb25GaWVsZFJlZiA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhcHBseU5ld0hlaWdodChoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2Uuc2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5XYWxsSGVpZ2h0LCBoZWlnaHQpO1xyXG4gICAgdGhpcy53YWxsSGVpZ2h0ID0gaGVpZ2h0O1xyXG4gICAgdGhpcy5vbldhbGxzSGVpZ2h0VXBkYXRlLmVtaXQoaGVpZ2h0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b2dnbGUoa2V5OiBDb25maWd1cmF0aW9uS2V5LCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzW2tleV0gPSBjaGVja2VkO1xyXG4gICAgdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2Uuc2V0VmFsdWUoa2V5LCBjaGVja2VkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRJbnRlcmlvckxpZ2h0SW50ZW5zaXR5KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLnNldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuSW50ZXJpb3JMaWdodEludGVuc2l0eSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUFsbCgpIHtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUFsbCgpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb21wYXJlRW51bShhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGEudG9Mb3dlckNhc2UoKSA9PT0gYi50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBsYWNlQ2FtZXJhKCkge1xyXG4gICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLl9hcHBTZXJ2aWNlLmNhdGVnb3JpZXMuZmluZChjID0+IGMuaWQgPT09ICdzcGVjaWFsJyk7XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TaG93RnVybml0dXJlU2lkZWJhciwgY2F0ZWdvcnkpO1xyXG4gICAgLy8gdGhpcy50aHJlZVNlcnZpY2UubW9kZWwuc2NlbmUuc2V0RHJhZ2dlZCh7XHJcbiAgICAvLyAgIG5hbWU6ICdDYW1lcmEnLFxyXG4gICAgLy8gICBjb25zdHJ1Y3RGbjogKHBvcykgPT4gdGhpcy5sb2FkRnVybml0dXJlU2VydmljZS5sb2FkRnVybml0dXJlKHBvcywgc2t1KSxcclxuICAgIC8vICAgdHlwZTogSXRlbVR5cGUuQ3VzdG9tRmxvb3JJdGVtLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyB0aGlzLm1lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TdGFydERyYWcsIHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVCYWNrZW5kVXJsQ2hhbmdlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcclxuICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudXJsID0gKGV2ZW50LnNyY0VsZW1lbnQgYXMgYW55KS52YWx1ZTtcclxuICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NMb2FkZWQubmV4dCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWRlTWF0ZXJpYWxzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUuY2hpbGRyZW4uZmlsdGVyKGMgPT4gYyBpbnN0YW5jZW9mIEl0ZW0pO1xyXG4gICAgaXRlbXMuZm9yRWFjaCgoc2M6IE9iamVjdDNEKSA9PiB7XHJcbiAgICAgIHNjLmNoaWxkcmVuLmZpbHRlcihjID0+IGMubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ19sZWcnKSA9PT0gLTEpLmZvckVhY2goKGM6IE1lc2gpID0+IHtcclxuICAgICAgICBjb25zdCBtZXNoZXMgPSBjLmNoaWxkcmVuLmZpbHRlcihjYyA9PiBjYyBpbnN0YW5jZW9mIE1lc2gpO1xyXG4gICAgICAgIG1lc2hlcy5mb3JFYWNoKChtOiBNZXNoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtYXRlcmlhbHMgPSAhQXJyYXkuaXNBcnJheShtLm1hdGVyaWFsKSA/IFttLm1hdGVyaWFsXSA6IG0ubWF0ZXJpYWw7XHJcbiAgICAgICAgICBtYXRlcmlhbHMuZm9yRWFjaCgobWF0KSA9PiB7XHJcbiAgICAgICAgICAgIG1hdC5vcGFjaXR5ID0gMC4yO1xyXG4gICAgICAgICAgICBtYXQudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dDb25uZWN0b3JzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLmNoaWxkcmVuLmZvckVhY2goKHNjOiBPYmplY3QzRCkgPT4ge1xyXG4gICAgICBzYy50cmF2ZXJzZSgoYzogT2JqZWN0M0QpID0+IHtcclxuICAgICAgICBpZiAoYy5uYW1lICYmIGMubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2NfJykpIHtcclxuICAgICAgICAgIGMudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICBjLnRyYXZlcnNlKGNjID0+IHtcclxuICAgICAgICAgICAgaWYgKGNjIGluc3RhbmNlb2YgTWVzaCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1hdGVyaWFscyA9ICFBcnJheS5pc0FycmF5KGNjLm1hdGVyaWFsKSA/IFtjYy5tYXRlcmlhbF0gOiBjYy5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICBtYXRlcmlhbHMuZm9yRWFjaCgobWF0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBtYXQub3BhY2l0eSA9IDE7XHJcbiAgICAgICAgICAgICAgICBtYXQudHJhbnNwYXJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBsZXQgdGV4dExhYmVsOiBNZXNoID0gPE1lc2g+Yy5nZXRPYmplY3RCeU5hbWUoJ2Nvbl90ZXh0X2xhYmVsJyk7XHJcbiAgICAgICAgICBpZiAoIXRleHRMYWJlbCkge1xyXG4gICAgICAgICAgICB0ZXh0TGFiZWwgPSBtYWtlVGV4dE1lc2goYy5uYW1lLCB0aGlzLl9mb250U2VydmljZS5tb25vc3BhY2VGb250LCAnMHgwMDAwMDAnLCAwLjAyKTtcclxuICAgICAgICAgICAgYy5hZGQodGV4dExhYmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VmVyc2lvbkZpZWxkQ29udGVudCgpIHtcclxuICAgIHRoaXMudmVyc2lvbkZpZWxkUmVmLm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XHJcbiAgfVxyXG5cclxuICBjb3B5VG9DbGlwYm9hcmQoKSB7XHJcbiAgICB0aGlzLnZlcnNpb25GaWVsZFJlZi5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcclxuICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oJ0NvcGllZCBpbiB0aGUgY2xpcGJvYXJkJywgbnVsbCwge1xyXG4gICAgICBkdXJhdGlvbjogMTAwMFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG5cclxuPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gIDxiIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7J0VOQUJMRV9UT1VDSCcgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwiZW5hYmxlVG91Y2hcIlxyXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5FbmFibGVUb3VjaCwgJGV2ZW50LmNoZWNrZWQpXCJcclxuICA+XHJcbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG48L2Rpdj5cclxuXHJcblxyXG48aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+e3snV0FMTFMnIHwgbG9jYWxpemV9fTwvaDM+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8cnAtZGltZW5zaW9uLWlucHV0XHJcbiAgICBbc291cmNlVmFsdWVdPVwid2FsbEhlaWdodFwiXHJcbiAgICBbbWluVmFsdWVdPVwibWluV2FsbEhlaWdodFwiXHJcbiAgICB0aXRsZT1cInt7J0RFRkFVTFRfSEVJR0hUJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgKGRpbWVuc2lvbkNoYW5nZWQpPVwiYXBwbHlOZXdIZWlnaHQoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvcnAtZGltZW5zaW9uLWlucHV0PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gIDxiIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7J0RFRkFVTFRfVEhJQ0tORVNTJyB8IGxvY2FsaXplfX06PC9iPlxyXG4gIDxzcGFuIGNsYXNzPVwibWF0LWJvZHktMVwiPnt7d2FsbFRoaWNrbmVzc319PC9zcGFuPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHNcIiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gIDxiIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7J1NIT1dfREVUQUlMRURfV0FMTF9NRUFTVVJFTUVOVFMnIHwgbG9jYWxpemV9fTwvYj5cclxuICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgbWluPVwiMFwiXHJcbiAgICBtYXg9XCIxXCJcclxuICAgIFtjaGVja2VkXT1cInNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHNcIlxyXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5TaG93RGV0YWlsZWRXYWxsTWVhc3VyZW1lbnRzLCAkZXZlbnQuY2hlY2tlZClcIlxyXG4gID5cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snU0hPV19ESVNUQU5DRVNfT0ZfV0FMTF9JVEVNU19JTl8yRCcgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwic2hvd1dhbGxJdGVtTWVhc3VyZW1lbnRzXCJcclxuICAgIChjaGFuZ2UpPVwidG9nZ2xlKGNvbmZpZ3VyYXRpb25LZXkuU2hvd1dhbGxJdGVtTWVhc3VyZW1lbnRzLCAkZXZlbnQuY2hlY2tlZClcIlxyXG4gID5cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snRU5BQkxFX1NOQVBQSU5HX09GX1dBTExTX1RPX0JBU0lDX0FOR0xFUycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwid2FsbFNuYXBwaW5nXCJcclxuICAgIChjaGFuZ2UpPVwidG9nZ2xlKGNvbmZpZ3VyYXRpb25LZXkuV2FsbFNuYXBwaW5nLCAkZXZlbnQuY2hlY2tlZClcIlxyXG4gID5cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snRU5BQkxFX1NOQVBQSU5HX1RPX1dBTExfSk9JTlRTJyB8IGxvY2FsaXplfX08L2I+XHJcbiAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgIG1pbj1cIjBcIlxyXG4gICAgbWF4PVwiMVwiXHJcbiAgICBbY2hlY2tlZF09XCJjb3JuZXJTbmFwcGluZ1wiXHJcbiAgICAoY2hhbmdlKT1cInRvZ2dsZShjb25maWd1cmF0aW9uS2V5LkNvcm5lclNuYXBwaW5nLCAkZXZlbnQuY2hlY2tlZClcIlxyXG4gID5cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbjwvZGl2PlxyXG5cclxuPGgzIGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMlwiPnt7J09CSkVDVFMnIHwgbG9jYWxpemV9fTwvaDM+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydTSE9XX0RJU1RBTkNFUycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwic2hvd09iamVjdERpc3RhbmNlc1wiXHJcbiAgICAoY2hhbmdlKT1cInRvZ2dsZShjb25maWd1cmF0aW9uS2V5LlNob3dPYmplY3REaXN0YW5jZXMsICRldmVudC5jaGVja2VkKVwiXHJcbiAgPlxyXG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgcHNlZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydTSE9XX01FQVNVUkVNRU5UUycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwic2hvd09iamVjdE1lYXN1cmVtZW50c1wiXHJcbiAgICAoY2hhbmdlKT1cInRvZ2dsZShjb25maWd1cmF0aW9uS2V5LlNob3dPYmplY3RNZWFzdXJlbWVudHMsICRldmVudC5jaGVja2VkKVwiXHJcbiAgPlxyXG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgcHNlZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydFTkFCTEVfUk9UQVRJT05fU05BUFBJTkcnIHwgbG9jYWxpemV9fTwvYj5cclxuICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgbWluPVwiMFwiXHJcbiAgICBtYXg9XCIxXCJcclxuICAgIFtjaGVja2VkXT1cInJvdGF0aW9uU25hcHBpbmdFbmFibGVkXCJcclxuICAgIChjaGFuZ2UpPVwidG9nZ2xlKGNvbmZpZ3VyYXRpb25LZXkuUm90YXRpb25TbmFwcGluZ0VuYWJsZWQsICRldmVudC5jaGVja2VkKVwiXHJcbiAgPlxyXG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgcHNlZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydESVNQTEFZX0NVU1RPTV9TSEFQRV9OQU1FUycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwiZGlzcGxheUN1c3RvbVNoYXBlTmFtZXNcIlxyXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5EaXNwbGF5Q3VzdG9tU2hhcGVOYW1lcywgJGV2ZW50LmNoZWNrZWQpXCJcclxuICA+XHJcbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG48L2Rpdj5cclxuXHJcbjxoMyBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTJcIj57eydVTklUX0lORk8nIHwgbG9jYWxpemV9fTwvaDM+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydNRUFTVVJFTUVOVFMnIHwgbG9jYWxpemV9fTo8L2I+XHJcbiAgPHNwYW4gY2xhc3M9XCJtYXQtYm9keS0xXCI+e3tkaW1lbnNpb25pbmdVbml0fX08L3NwYW4+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snQU5HTEVTJyB8IGxvY2FsaXplfX06PC9iPlxyXG4gIDxzcGFuIGNsYXNzPVwibWF0LWJvZHktMVwiPnt7YW5nbGVVbml0fX08L3NwYW4+XHJcbjwvZGl2PlxyXG5cclxuPGgzIGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMlwiPnt7J0NBTUVSQScgfCBsb2NhbGl6ZX19PC9oMz5cclxuPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snU0VUX1NUQVJUX1BPU0lUSU9OX0ZPUl9XQUxLX1RIUk9VR0hfTU9ERScgfCBsb2NhbGl6ZX19PC9iPlxyXG48ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgPGJ1dHRvblxyXG4gICAgbWF0LWJ1dHRvblxyXG4gICAgW2Rpc2FibGVkXT1cInBsYWNlQ2FtZXJhRGlzYWJsZWRcIlxyXG4gICAgY2xhc3M9XCJwbGFjZS1jYW1lcmFcIlxyXG4gICAgKGNsaWNrKT1cInBsYWNlQ2FtZXJhKClcIlxyXG4gICAgZnhMYXlvdXQ9XCJyb3dcIlxyXG4gICAgZnhMYXlvdXRhbGlnbj1cImNlbnRlciBjZW50ZXJcIlxyXG4gID5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5waG90b19jYW1lcmE8L21hdC1pY29uPlxyXG4gICAge3snUExBQ0VfQ0FNRVJBJyB8IGxvY2FsaXplfX1cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydTSE9XX0NBTUVSQV9DT05GSUdVUkFUSU9OJyB8IGxvY2FsaXplfX08L2I+XHJcbiAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgIG1pbj1cIjBcIlxyXG4gICAgbWF4PVwiMVwiXHJcbiAgICBbY2hlY2tlZF09XCJzaG93Q2FtZXJhQ29udHJvbHNcIlxyXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5TaG93V2Fsa1Rocm91Z2hDYW1lcmFDb250cm9scywgJGV2ZW50LmNoZWNrZWQpXCJcclxuICA+XHJcbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICA8aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+e3snQ0xFQVJfUk9PTScgfCBsb2NhbGl6ZX19PC9oMz5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydDTEVBUl9BTExfRlVSTklUVVJFX0ZST01fUk9PTScgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICBjbGFzcz1cInJlbW92ZS1hbGxcIlxyXG4gICAgICAoY2xpY2spPVwicmVtb3ZlQWxsKClcIlxyXG4gICAgICBmeExheW91dD1cInJvd1wiXHJcbiAgICAgIGZ4TGF5b3V0YWxpZ249XCJjZW50ZXIgY2VudGVyXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmRlbGV0ZV9zd2VlcDwvbWF0LWljb24+XHJcbiAgICAgIHt7J0NMRUFSX0ZVUk5JVFVSRScgfCBsb2NhbGl6ZX19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwic2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuZGV2ZWxvcG1lbnRcIj5cclxuICA8ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICA8aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+e3snTElHSFRTJyB8IGxvY2FsaXplfX08L2gzPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gICAgICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydTSE9XX0xJR0hUSU5HX0NPTkZJR1VSQVRJT04nIHwgbG9jYWxpemV9fTwvYj5cclxuICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICBtYXg9XCIxXCJcclxuICAgICAgICBbY2hlY2tlZF09XCJzaG93TGlnaHRDb250cm9sc1wiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5TaG93TGlnaHRpbmdDb250cm9scywgJGV2ZW50LmNoZWNrZWQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlKGNvbmZpZ3VyYXRpb25LZXkuU2hvd0xpZ2h0cGxhbnNEaWFsb2csIHRydWUpXCJcclxuICAgICAgICBmeExheW91dD1cInJvd1wiXHJcbiAgICAgICAgZnhMYXlvdXRhbGlnbj1cImNlbnRlciBjZW50ZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPndiX2luY2FuZGVzY2VudDwvbWF0LWljb24+XHJcbiAgICAgICAge3snTUFOQUdFX0xJR0hUUExBTlMnIHwgbG9jYWxpemV9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBwc2VmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gICAgICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydTSE9XX0lOVEVSSU9SX0xJR0hUUycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgIFtjaGVja2VkXT1cInNob3dJbnRlcmlvckxpZ2h0c1wiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5TaG93SW50ZXJpb3JMaWdodHMsICRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgID5cclxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIHBzZWZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgICAgIDxiIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7J0lOVEVSSU9SX0xJR0hUX0lOVEVOU0lUWScgfCBsb2NhbGl6ZX19PC9iPlxyXG4gICAgICA8bWF0LXNsaWRlclxyXG4gICAgICAgIGNsYXNzPVwic2xpZGVyLWdyb3VwLXNsaWRlclwiXHJcbiAgICAgICAgW21pbl09XCIxXCJcclxuICAgICAgICBbbWF4XT1cIjE2MDBcIlxyXG4gICAgICAgIFtzdGVwXT1cIjFcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJpbnRlcmlvckxpZ2h0SW50ZW5zaXR5XCJcclxuICAgICAgICB0aHVtYkxhYmVsXHJcbiAgICAgICAgKGlucHV0KT1cInNldEludGVyaW9yTGlnaHRJbnRlbnNpdHkoJGV2ZW50LnZhbHVlKVwiXHJcbiAgICAgICAgZnhGbGV4PVwiZ3Jvd1wiPlxyXG4gICAgICA8L21hdC1zbGlkZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICAgICAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snU0hPV19QT1NUX1BST0NFU1NJTkdfU0VUVElOR1MnIHwgbG9jYWxpemV9fTwvYj5cclxuICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICBtYXg9XCIxXCJcclxuICAgICAgICBbY2hlY2tlZF09XCJzaG93UG9zdFByb2Nlc3NpbmdTZXR0aW5nc1wiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5TaG93UG9zdFByb2Nlc3NpbmdTZXR0aW5ncywgJGV2ZW50LmNoZWNrZWQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICAgICAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snU0hPV19XQUxMUycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgIFtjaGVja2VkXT1cInNob3dXYWxsc1wiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5TaG93V2FsbHMsICRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgID5cclxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgICAgIDxiIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7J1NIT1dfQ0VJTElORycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgIFtjaGVja2VkXT1cInNob3dDZWlsaW5nXCJcclxuICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZShjb25maWd1cmF0aW9uS2V5LlNob3dDZWlsaW5nLCAkZXZlbnQuY2hlY2tlZClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJoaWRlTWF0ZXJpYWxzKClcIj57eyAnSElERV9NQVRFUklBTFMnIHwgbG9jYWxpemUgfX08L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gICAgICA8YnV0dG9uIChjbGljayk9XCJzaG93Q29ubmVjdG9ycygpXCI+e3sgJ1NIT1dfQ09OTkVDVE9SUycgfCBsb2NhbGl6ZSB9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBtYXQtYnV0dG9uXHJcbiAgICAgICAgKGNsaWNrKT1cInNob3dTZXR0aW5nc09wdGlvbnMgPSB0cnVlXCJcclxuICAgICAgICBmeExheW91dD1cInJvd1wiXHJcbiAgICAgICAgZnhMYXlvdXRhbGlnbj1cImNlbnRlciBjZW50ZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPnNldHRpbmdzPC9tYXQtaWNvbj5cclxuICAgICAgICB7eydTSE9XX1NFVFRJTkdTX09QVElPTlMnIHwgbG9jYWxpemV9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snQVBQX1ZFUlNJT04nIHwgbG9jYWxpemV9fTo8L2I+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgI3ZlcnNpb25GaWVsZFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICByZWFkb25seT1cInRydWVcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJ2ZXJzaW9uXCJcclxuICAgICAgICAoY2xpY2spPVwic2VsZWN0VmVyc2lvbkZpZWxkQ29udGVudCgpXCJcclxuICAgICAgLz5cclxuICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKClcIj5maWxlX2NvcHk8L21hdC1pY29uPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuICA8aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+e3snQ09OTkVDVElPTicgfCBsb2NhbGl6ZX19PC9oMz5cclxuICA8ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydpT05FIGJhY2tlbmQgdXJsJyB8IGxvY2FsaXplfX06PC9iPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICNpb25lQmFja2VuZFVybFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBbdmFsdWVdPVwic2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzPy51cmxcIlxyXG4gICAgICAgIChrZXlkb3duKT1cImhhbmRsZUJhY2tlbmRVcmxDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9uZy1jb250YWluZXI+XHJcbjxkaXYgY2xhc3M9XCJwb3dlcmVkLWJ5LXdyYXBwZXJcIj5cclxuICA8c3Bhbj5NeVJvb21QbGFucyBpcyBwb3dlcmVkIGJ5PC9zcGFuPlxyXG4gIDxzcGFuIGNsYXNzPVwicG93ZXJlZC1sb2dvLXdyYXBwZXJcIj5cclxuICAgIDxhIGhyZWY9XCJodHRwczovL3d3dy5jb2xpam4taXQubmxcIiB0YXJnZXQ9XCJfYmxhbmtcIiBhbHQ9XCJDb2xpam4gSVRcIiBjbGFzcz1cImNvbGlqbi1pdC1sb2dvXCI+PGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL2NvbGlqbi1sb2dvLndlYnBcIi8+PC9hPlxyXG4gICAgPGEgaHJlZj1cImh0dHBzOi8vaW9uZTM2MC5jb21cIiB0YXJnZXQ9XCJfYmxhbmtcIiBhbHQ9XCJpT05FMzYwXCIgY2xhc3M9XCJpb25lLTM2MC1sb2dvXCI+PGltZyBzcmM9XCJhc3NldHMvaW1hZ2VzL2lvbmUzNjAtbG9nby53ZWJwXCIvPjwvYT5cclxuICA8L3NwYW4+XHJcbiAgPHNwYW4+Q29weXJpZ2h0IENvbGlqbiBJVCAyMDIxPC9zcGFuPlxyXG48L2Rpdj5cclxuPHNldHRpbmdzLW9wdGlvbnMgKm5nSWY9XCJzaG93U2V0dGluZ3NPcHRpb25zXCIgKG9uY2xvc2UpPVwic2hvd1NldHRpbmdzT3B0aW9ucyA9IGZhbHNlXCI+PC9zZXR0aW5ncy1vcHRpb25zPlxyXG4iXX0=
196
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL3NldHRpbmdzL3NldHRpbmdzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd4SSxPQUFPLEVBQUMsSUFBSSxFQUFXLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQVFwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVF2RCxNQUFNLE9BQU8saUJBQWlCO0lBdUM1QixZQUNTLGVBQTZDLEVBQzVDLFNBQXNCLEVBQ3RCLFdBQThCLEVBQzlCLHFCQUEyQyxFQUMzQyxhQUEyQixFQUMzQixZQUF5QixFQUN6QixXQUFvQyxFQUNwQyxZQUF5QixFQUN6QixnQkFBOEM7UUFSL0Msb0JBQWUsR0FBZixlQUFlLENBQThCO1FBQzVDLGNBQVMsR0FBVCxTQUFTLENBQWE7UUFDdEIsZ0JBQVcsR0FBWCxXQUFX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NUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNYXRTbmFja0Jhcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuXHJcbmltcG9ydCB7TWVzaCwgT2JqZWN0M0R9IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uS2V5fSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL2VudW0vY29uZmlndXJhdGlvbi1rZXkuZW51bSc7XHJcbmltcG9ydCB7VmVyc2lvbkluZm99IGZyb20gJy4uLy4uLy4uLy4uL2FwcC52ZXJzaW9uJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZXNzYWdlQnVzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlL21lc3NhZ2UtYnVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtTY2VuZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL3NjZW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQge0l0ZW1TZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlM2Qvc2VydmljZS9pdGVtLnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JBcHBTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7Rm9udFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUzZC9zZXJ2aWNlL2ZvbnQuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2l0ZW1zL2l0ZW0nO1xyXG5pbXBvcnQge21ha2VUZXh0TWVzaH0gZnJvbSAnLi4vLi4vLi4vY29yZTNkL2h1ZC91dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JwLXNldHRpbmdzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NldHRpbmdzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFNldHRpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHB1YmxpYyByZWFkb25seSBjb25maWd1cmF0aW9uS2V5OiB0eXBlb2YgQ29uZmlndXJhdGlvbktleSA9IENvbmZpZ3VyYXRpb25LZXk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3ZlcnNpb25GaWVsZCcsIHsgc3RhdGljOiB0cnVlIH0pIHZlcnNpb25GaWVsZFJlZjogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgbWluV2FsbEhlaWdodDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHBsYWNlQ2FtZXJhRGlzYWJsZWQ6IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBvbldhbGxzSGVpZ2h0VXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gIHB1YmxpYyB2ZXJzaW9uOiBzdHJpbmdcclxuICAgID0gJ1ZlcnNpb246ICcgKyAoVmVyc2lvbkluZm8uYXBwVmVyc2lvbiB8fCAnVW5rbm93bicpXHJcbiAgICArICcgfCAnXHJcbiAgICArICdSZXZpc2lvbjogJyArIChWZXJzaW9uSW5mby5yZXZpc2lvbiB8fCAnVW5rbm93bicpO1xyXG5cclxuICBwdWJsaWMgd2FsbEhlaWdodDogbnVtYmVyO1xyXG4gIHB1YmxpYyBkaW1lbnNpb25pbmdVbml0OiBzdHJpbmc7XHJcbiAgcHVibGljIGFuZ2xlVW5pdDogc3RyaW5nO1xyXG4gIHB1YmxpYyB3YWxsVGhpY2tuZXNzOiBudW1iZXI7XHJcbiAgcHVibGljIHNob3dPYmplY3REaXN0YW5jZXM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dPYmplY3RNZWFzdXJlbWVudHM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dXYWxsSXRlbU1lYXN1cmVtZW50czogYm9vbGVhbjtcclxuICBwdWJsaWMgcm90YXRpb25TbmFwcGluZ0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dDYW1lcmFDb250cm9sczogYm9vbGVhbjtcclxuICBwdWJsaWMgc2hvd0xpZ2h0Q29udHJvbHM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dQb3N0UHJvY2Vzc2luZ1NldHRpbmdzOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzaG93QUE6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dBTzogYm9vbGVhbjtcclxuICBwdWJsaWMgc2hvd1dhbGxzOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzaG93Q2VpbGluZzogYm9vbGVhbjtcclxuICBwdWJsaWMgd2FsbFNuYXBwaW5nOiBib29sZWFuO1xyXG4gIHB1YmxpYyBjb3JuZXJTbmFwcGluZzogYm9vbGVhbjtcclxuICBwdWJsaWMgZGlzcGxheUN1c3RvbVNoYXBlTmFtZXM6IGJvb2xlYW47XHJcbiAgcHVibGljIHNob3dJbnRlcmlvckxpZ2h0czogYm9vbGVhbjtcclxuICBwdWJsaWMgaW50ZXJpb3JMaWdodEludGVuc2l0eTogbnVtYmVyO1xyXG4gIHB1YmxpYyBzaG93U2V0dGluZ3NPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGVuYWJsZVRvdWNoOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlQnVzOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3NjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfYXBwU2VydmljZTogSG9tZWRlY29yYXRvckFwcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mb250U2VydmljZTogRm9udFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2VcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMud2FsbEhlaWdodCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuV2FsbEhlaWdodCk7XHJcbiAgICB0aGlzLndhbGxUaGlja25lc3MgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxUaGlja25lc3MpO1xyXG4gICAgdGhpcy5zaG93T2JqZWN0RGlzdGFuY2VzID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5TaG93T2JqZWN0RGlzdGFuY2VzKTtcclxuICAgIHRoaXMuc2hvd09iamVjdE1lYXN1cmVtZW50cyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuU2hvd09iamVjdE1lYXN1cmVtZW50cyk7XHJcbiAgICB0aGlzLnNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHMgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LlNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHMpO1xyXG4gICAgdGhpcy5zaG93V2FsbEl0ZW1NZWFzdXJlbWVudHMgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LlNob3dXYWxsSXRlbU1lYXN1cmVtZW50cyk7XHJcbiAgICB0aGlzLnJvdGF0aW9uU25hcHBpbmdFbmFibGVkID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5Sb3RhdGlvblNuYXBwaW5nRW5hYmxlZCk7XHJcbiAgICB0aGlzLnNob3dDYW1lcmFDb250cm9scyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuU2hvd1dhbGtUaHJvdWdoQ2FtZXJhQ29udHJvbHMpO1xyXG4gICAgdGhpcy5zaG93TGlnaHRDb250cm9scyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuU2hvd0xpZ2h0aW5nQ29udHJvbHMpO1xyXG4gICAgdGhpcy5zaG93UG9zdFByb2Nlc3NpbmdTZXR0aW5ncyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuU2hvd1Bvc3RQcm9jZXNzaW5nU2V0dGluZ3MpO1xyXG4gICAgdGhpcy5zaG93QUEgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5hYUVuYWJsZWQ7XHJcbiAgICB0aGlzLnNob3dBTyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLmFvRW5hYmxlZDtcclxuICAgIHRoaXMuc2hvd1dhbGxzID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5TaG93V2FsbHMpO1xyXG4gICAgdGhpcy5zaG93Q2VpbGluZyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuU2hvd0NlaWxpbmcpO1xyXG4gICAgdGhpcy53YWxsU25hcHBpbmcgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxTbmFwcGluZyk7XHJcbiAgICB0aGlzLmNvcm5lclNuYXBwaW5nID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5Db3JuZXJTbmFwcGluZyk7XHJcbiAgICB0aGlzLmRpc3BsYXlDdXN0b21TaGFwZU5hbWVzID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5EaXNwbGF5Q3VzdG9tU2hhcGVOYW1lcyk7XHJcbiAgICB0aGlzLnNob3dJbnRlcmlvckxpZ2h0cyA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuU2hvd0ludGVyaW9yTGlnaHRzKTtcclxuICAgIHRoaXMuaW50ZXJpb3JMaWdodEludGVuc2l0eSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuSW50ZXJpb3JMaWdodEludGVuc2l0eSk7XHJcbiAgICB0aGlzLmRpbWVuc2lvbmluZ1VuaXQgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LkRpbWVuc2lvbmluZ1VuaXQpO1xyXG4gICAgdGhpcy5hbmdsZVVuaXQgPSB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5nZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LkFuZ2xlVW5pdCk7XHJcbiAgICB0aGlzLmVuYWJsZVRvdWNoID0gdGhpcy5fY29uZmlndXJhdGlvblNlcnZpY2UuZ2V0VmFsdWUoQ29uZmlndXJhdGlvbktleS5FbmFibGVUb3VjaCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudmVyc2lvbkZpZWxkUmVmID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGx5TmV3SGVpZ2h0KGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5zZXRWYWx1ZShDb25maWd1cmF0aW9uS2V5LldhbGxIZWlnaHQsIGhlaWdodCk7XHJcbiAgICB0aGlzLndhbGxIZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB0aGlzLm9uV2FsbHNIZWlnaHRVcGRhdGUuZW1pdChoZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZ2dsZShrZXk6IENvbmZpZ3VyYXRpb25LZXksIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXNba2V5XSA9IGNoZWNrZWQ7XHJcbiAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5zZXRWYWx1ZShrZXksIGNoZWNrZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvZ2dsZU9wdGlvbihvcHRpb246IHN0cmluZywgY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnNbb3B0aW9uXSA9IGNoZWNrZWQ7XHJcbiAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NDaGFuZ2VkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRJbnRlcmlvckxpZ2h0SW50ZW5zaXR5KHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbmZpZ3VyYXRpb25TZXJ2aWNlLnNldFZhbHVlKENvbmZpZ3VyYXRpb25LZXkuSW50ZXJpb3JMaWdodEludGVuc2l0eSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZUFsbCgpIHtcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLnJlbW92ZUFsbCgpO1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb21wYXJlRW51bShhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGEudG9Mb3dlckNhc2UoKSA9PT0gYi50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHBsYWNlQ2FtZXJhKCkge1xyXG4gICAgY29uc3QgY2F0ZWdvcnkgPSB0aGlzLl9hcHBTZXJ2aWNlLmNhdGVnb3JpZXMuZmluZChjID0+IGMuaWQgPT09ICdzcGVjaWFsJyk7XHJcbiAgICB0aGlzLl9tZXNzYWdlQnVzLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxlZnRTaWRlYmFyKTtcclxuICAgIHRoaXMuX21lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TaG93RnVybml0dXJlU2lkZWJhciwgY2F0ZWdvcnkpO1xyXG4gICAgLy8gdGhpcy50aHJlZVNlcnZpY2UubW9kZWwuc2NlbmUuc2V0RHJhZ2dlZCh7XHJcbiAgICAvLyAgIG5hbWU6ICdDYW1lcmEnLFxyXG4gICAgLy8gICBjb25zdHJ1Y3RGbjogKHBvcykgPT4gdGhpcy5sb2FkRnVybml0dXJlU2VydmljZS5sb2FkRnVybml0dXJlKHBvcywgc2t1KSxcclxuICAgIC8vICAgdHlwZTogSXRlbVR5cGUuQ3VzdG9tRmxvb3JJdGVtLFxyXG4gICAgLy8gfSk7XHJcbiAgICAvLyB0aGlzLm1lc3NhZ2VCdXMuZW1pdChNZXNzYWdlVHlwZS5TdGFydERyYWcsIHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVCYWNrZW5kVXJsQ2hhbmdlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJ1RhYicpIHtcclxuICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudXJsID0gKGV2ZW50LnNyY0VsZW1lbnQgYXMgYW55KS52YWx1ZTtcclxuICAgICAgdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NMb2FkZWQubmV4dCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWRlTWF0ZXJpYWxzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9zY2VuZVNlcnZpY2Uuc2NlbmUuY2hpbGRyZW4uZmlsdGVyKGMgPT4gYyBpbnN0YW5jZW9mIEl0ZW0pO1xyXG4gICAgaXRlbXMuZm9yRWFjaCgoc2M6IE9iamVjdDNEKSA9PiB7XHJcbiAgICAgIHNjLmNoaWxkcmVuLmZpbHRlcihjID0+IGMubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ19sZWcnKSA9PT0gLTEpLmZvckVhY2goKGM6IE1lc2gpID0+IHtcclxuICAgICAgICBjb25zdCBtZXNoZXMgPSBjLmNoaWxkcmVuLmZpbHRlcihjYyA9PiBjYyBpbnN0YW5jZW9mIE1lc2gpO1xyXG4gICAgICAgIG1lc2hlcy5mb3JFYWNoKChtOiBNZXNoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtYXRlcmlhbHMgPSAhQXJyYXkuaXNBcnJheShtLm1hdGVyaWFsKSA/IFttLm1hdGVyaWFsXSA6IG0ubWF0ZXJpYWw7XHJcbiAgICAgICAgICBtYXRlcmlhbHMuZm9yRWFjaCgobWF0KSA9PiB7XHJcbiAgICAgICAgICAgIG1hdC5vcGFjaXR5ID0gMC4yO1xyXG4gICAgICAgICAgICBtYXQudHJhbnNwYXJlbnQgPSB0cnVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dDb25uZWN0b3JzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc2NlbmVTZXJ2aWNlLnNjZW5lLmNoaWxkcmVuLmZvckVhY2goKHNjOiBPYmplY3QzRCkgPT4ge1xyXG4gICAgICBzYy50cmF2ZXJzZSgoYzogT2JqZWN0M0QpID0+IHtcclxuICAgICAgICBpZiAoYy5uYW1lICYmIGMubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2NfJykpIHtcclxuICAgICAgICAgIGMudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICBjLnRyYXZlcnNlKGNjID0+IHtcclxuICAgICAgICAgICAgaWYgKGNjIGluc3RhbmNlb2YgTWVzaCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1hdGVyaWFscyA9ICFBcnJheS5pc0FycmF5KGNjLm1hdGVyaWFsKSA/IFtjYy5tYXRlcmlhbF0gOiBjYy5tYXRlcmlhbDtcclxuICAgICAgICAgICAgICBtYXRlcmlhbHMuZm9yRWFjaCgobWF0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBtYXQub3BhY2l0eSA9IDE7XHJcbiAgICAgICAgICAgICAgICBtYXQudHJhbnNwYXJlbnQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBsZXQgdGV4dExhYmVsOiBNZXNoID0gPE1lc2g+Yy5nZXRPYmplY3RCeU5hbWUoJ2Nvbl90ZXh0X2xhYmVsJyk7XHJcbiAgICAgICAgICBpZiAoIXRleHRMYWJlbCkge1xyXG4gICAgICAgICAgICB0ZXh0TGFiZWwgPSBtYWtlVGV4dE1lc2goYy5uYW1lLCB0aGlzLl9mb250U2VydmljZS5tb25vc3BhY2VGb250LCAnMHgwMDAwMDAnLCAwLjAyKTtcclxuICAgICAgICAgICAgYy5hZGQodGV4dExhYmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9zY2VuZVNlcnZpY2UubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VmVyc2lvbkZpZWxkQ29udGVudCgpIHtcclxuICAgIHRoaXMudmVyc2lvbkZpZWxkUmVmLm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XHJcbiAgfVxyXG5cclxuICBjb3B5VG9DbGlwYm9hcmQoKSB7XHJcbiAgICB0aGlzLnZlcnNpb25GaWVsZFJlZi5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xyXG4gICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTtcclxuICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oJ0NvcGllZCBpbiB0aGUgY2xpcGJvYXJkJywgbnVsbCwge1xyXG4gICAgICBkdXJhdGlvbjogMTAwMFxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIlxyXG5cclxuPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gIDxiIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7J0VOQUJMRV9UT1VDSCcgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwiZW5hYmxlVG91Y2hcIlxyXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5FbmFibGVUb3VjaCwgJGV2ZW50LmNoZWNrZWQpXCJcclxuICA+XHJcbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG48L2Rpdj5cclxuXHJcblxyXG48aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+e3snV0FMTFMnIHwgbG9jYWxpemV9fTwvaDM+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8cnAtZGltZW5zaW9uLWlucHV0XHJcbiAgICBbc291cmNlVmFsdWVdPVwid2FsbEhlaWdodFwiXHJcbiAgICBbbWluVmFsdWVdPVwibWluV2FsbEhlaWdodFwiXHJcbiAgICB0aXRsZT1cInt7J0RFRkFVTFRfSEVJR0hUJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgKGRpbWVuc2lvbkNoYW5nZWQpPVwiYXBwbHlOZXdIZWlnaHQoJGV2ZW50KVwiXHJcbiAgPlxyXG4gIDwvcnAtZGltZW5zaW9uLWlucHV0PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gIDxiIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7J0RFRkFVTFRfVEhJQ0tORVNTJyB8IGxvY2FsaXplfX06PC9iPlxyXG4gIDxzcGFuIGNsYXNzPVwibWF0LWJvZHktMVwiPnt7d2FsbFRoaWNrbmVzc319PC9zcGFuPlxyXG48L2Rpdj5cclxuPGRpdiAqbmdJZj1cInNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHNcIiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gIDxiIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7J1NIT1dfREVUQUlMRURfV0FMTF9NRUFTVVJFTUVOVFMnIHwgbG9jYWxpemV9fTwvYj5cclxuICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgbWluPVwiMFwiXHJcbiAgICBtYXg9XCIxXCJcclxuICAgIFtjaGVja2VkXT1cInNob3dEZXRhaWxlZFdhbGxNZWFzdXJlbWVudHNcIlxyXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5TaG93RGV0YWlsZWRXYWxsTWVhc3VyZW1lbnRzLCAkZXZlbnQuY2hlY2tlZClcIlxyXG4gID5cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snU0hPV19ESVNUQU5DRVNfT0ZfV0FMTF9JVEVNU19JTl8yRCcgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwic2hvd1dhbGxJdGVtTWVhc3VyZW1lbnRzXCJcclxuICAgIChjaGFuZ2UpPVwidG9nZ2xlKGNvbmZpZ3VyYXRpb25LZXkuU2hvd1dhbGxJdGVtTWVhc3VyZW1lbnRzLCAkZXZlbnQuY2hlY2tlZClcIlxyXG4gID5cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snRU5BQkxFX1NOQVBQSU5HX09GX1dBTExTX1RPX0JBU0lDX0FOR0xFUycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwid2FsbFNuYXBwaW5nXCJcclxuICAgIChjaGFuZ2UpPVwidG9nZ2xlKGNvbmZpZ3VyYXRpb25LZXkuV2FsbFNuYXBwaW5nLCAkZXZlbnQuY2hlY2tlZClcIlxyXG4gID5cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snRU5BQkxFX1NOQVBQSU5HX1RPX1dBTExfSk9JTlRTJyB8IGxvY2FsaXplfX08L2I+XHJcbiAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgIG1pbj1cIjBcIlxyXG4gICAgbWF4PVwiMVwiXHJcbiAgICBbY2hlY2tlZF09XCJjb3JuZXJTbmFwcGluZ1wiXHJcbiAgICAoY2hhbmdlKT1cInRvZ2dsZShjb25maWd1cmF0aW9uS2V5LkNvcm5lclNuYXBwaW5nLCAkZXZlbnQuY2hlY2tlZClcIlxyXG4gID5cclxuICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbjwvZGl2PlxyXG5cclxuPGgzIGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMlwiPnt7J09CSkVDVFMnIHwgbG9jYWxpemV9fTwvaDM+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydTSE9XX0RJU1RBTkNFUycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwic2hvd09iamVjdERpc3RhbmNlc1wiXHJcbiAgICAoY2hhbmdlKT1cInRvZ2dsZShjb25maWd1cmF0aW9uS2V5LlNob3dPYmplY3REaXN0YW5jZXMsICRldmVudC5jaGVja2VkKVwiXHJcbiAgPlxyXG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgcHNlZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydTSE9XX01FQVNVUkVNRU5UUycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwic2hvd09iamVjdE1lYXN1cmVtZW50c1wiXHJcbiAgICAoY2hhbmdlKT1cInRvZ2dsZShjb25maWd1cmF0aW9uS2V5LlNob3dPYmplY3RNZWFzdXJlbWVudHMsICRldmVudC5jaGVja2VkKVwiXHJcbiAgPlxyXG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgcHNlZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydFTkFCTEVfUk9UQVRJT05fU05BUFBJTkcnIHwgbG9jYWxpemV9fTwvYj5cclxuICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgbWluPVwiMFwiXHJcbiAgICBtYXg9XCIxXCJcclxuICAgIFtjaGVja2VkXT1cInJvdGF0aW9uU25hcHBpbmdFbmFibGVkXCJcclxuICAgIChjaGFuZ2UpPVwidG9nZ2xlKGNvbmZpZ3VyYXRpb25LZXkuUm90YXRpb25TbmFwcGluZ0VuYWJsZWQsICRldmVudC5jaGVja2VkKVwiXHJcbiAgPlxyXG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgcHNlZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydESVNQTEFZX0NVU1RPTV9TSEFQRV9OQU1FUycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICBtaW49XCIwXCJcclxuICAgIG1heD1cIjFcIlxyXG4gICAgW2NoZWNrZWRdPVwiZGlzcGxheUN1c3RvbVNoYXBlTmFtZXNcIlxyXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5EaXNwbGF5Q3VzdG9tU2hhcGVOYW1lcywgJGV2ZW50LmNoZWNrZWQpXCJcclxuICA+XHJcbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG48L2Rpdj5cclxuXHJcbjxoMyBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTJcIj57eydVTklUX0lORk8nIHwgbG9jYWxpemV9fTwvaDM+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydNRUFTVVJFTUVOVFMnIHwgbG9jYWxpemV9fTo8L2I+XHJcbiAgPHNwYW4gY2xhc3M9XCJtYXQtYm9keS0xXCI+e3tkaW1lbnNpb25pbmdVbml0fX08L3NwYW4+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snQU5HTEVTJyB8IGxvY2FsaXplfX06PC9iPlxyXG4gIDxzcGFuIGNsYXNzPVwibWF0LWJvZHktMVwiPnt7YW5nbGVVbml0fX08L3NwYW4+XHJcbjwvZGl2PlxyXG5cclxuPGgzIGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMlwiPnt7J0NBTUVSQScgfCBsb2NhbGl6ZX19PC9oMz5cclxuPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snU0VUX1NUQVJUX1BPU0lUSU9OX0ZPUl9XQUxLX1RIUk9VR0hfTU9ERScgfCBsb2NhbGl6ZX19PC9iPlxyXG48ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgPGJ1dHRvblxyXG4gICAgbWF0LWJ1dHRvblxyXG4gICAgW2Rpc2FibGVkXT1cInBsYWNlQ2FtZXJhRGlzYWJsZWRcIlxyXG4gICAgY2xhc3M9XCJwbGFjZS1jYW1lcmFcIlxyXG4gICAgKGNsaWNrKT1cInBsYWNlQ2FtZXJhKClcIlxyXG4gICAgZnhMYXlvdXQ9XCJyb3dcIlxyXG4gICAgZnhMYXlvdXRhbGlnbj1cImNlbnRlciBjZW50ZXJcIlxyXG4gID5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5waG90b19jYW1lcmE8L21hdC1pY29uPlxyXG4gICAge3snUExBQ0VfQ0FNRVJBJyB8IGxvY2FsaXplfX1cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydTSE9XX0NBTUVSQV9DT05GSUdVUkFUSU9OJyB8IGxvY2FsaXplfX08L2I+XHJcbiAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgIG1pbj1cIjBcIlxyXG4gICAgbWF4PVwiMVwiXHJcbiAgICBbY2hlY2tlZF09XCJzaG93Q2FtZXJhQ29udHJvbHNcIlxyXG4gICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5TaG93V2Fsa1Rocm91Z2hDYW1lcmFDb250cm9scywgJGV2ZW50LmNoZWNrZWQpXCJcclxuICA+XHJcbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICA8aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+e3snQ0xFQVJfUk9PTScgfCBsb2NhbGl6ZX19PC9oMz5cclxuICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydDTEVBUl9BTExfRlVSTklUVVJFX0ZST01fUk9PTScgfCBsb2NhbGl6ZX19PC9iPlxyXG4gIDxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICAgIDxidXR0b25cclxuICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICBjbGFzcz1cInJlbW92ZS1hbGxcIlxyXG4gICAgICAoY2xpY2spPVwicmVtb3ZlQWxsKClcIlxyXG4gICAgICBmeExheW91dD1cInJvd1wiXHJcbiAgICAgIGZ4TGF5b3V0YWxpZ249XCJjZW50ZXIgY2VudGVyXCJcclxuICAgID5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmRlbGV0ZV9zd2VlcDwvbWF0LWljb24+XHJcbiAgICAgIHt7J0NMRUFSX0ZVUk5JVFVSRScgfCBsb2NhbGl6ZX19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwic2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMuZGV2ZWxvcG1lbnRcIj5cclxuICA8ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICA8aDMgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0yXCI+e3snTElHSFRTJyB8IGxvY2FsaXplfX08L2gzPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gICAgICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydTSE9XX0xJR0hUSU5HX0NPTkZJR1VSQVRJT04nIHwgbG9jYWxpemV9fTwvYj5cclxuICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICBtYXg9XCIxXCJcclxuICAgICAgICBbY2hlY2tlZF09XCJzaG93TGlnaHRDb250cm9sc1wiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5TaG93TGlnaHRpbmdDb250cm9scywgJGV2ZW50LmNoZWNrZWQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlKGNvbmZpZ3VyYXRpb25LZXkuU2hvd0xpZ2h0cGxhbnNEaWFsb2csIHRydWUpXCJcclxuICAgICAgICBmeExheW91dD1cInJvd1wiXHJcbiAgICAgICAgZnhMYXlvdXRhbGlnbj1cImNlbnRlciBjZW50ZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPndiX2luY2FuZGVzY2VudDwvbWF0LWljb24+XHJcbiAgICAgICAge3snTUFOQUdFX0xJR0hUUExBTlMnIHwgbG9jYWxpemV9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBwc2VmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gICAgICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydTSE9XX0lOVEVSSU9SX0xJR0hUUycgfCBsb2NhbGl6ZX19PC9iPlxyXG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgIFtjaGVja2VkXT1cInNob3dJbnRlcmlvckxpZ2h0c1wiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5TaG93SW50ZXJpb3JMaWdodHMsICRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgID5cclxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIHBzZWZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgICAgIDxiIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7J0lOVEVSSU9SX0xJR0hUX0lOVEVOU0lUWScgfCBsb2NhbGl6ZX19PC9iPlxyXG4gICAgICA8bWF0LXNsaWRlclxyXG4gICAgICAgIGNsYXNzPVwic2xpZGVyLWdyb3VwLXNsaWRlclwiXHJcbiAgICAgICAgW21pbl09XCIxXCJcclxuICAgICAgICBbbWF4XT1cIjE2MDBcIlxyXG4gICAgICAgIFtzdGVwXT1cIjFcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJpbnRlcmlvckxpZ2h0SW50ZW5zaXR5XCJcclxuICAgICAgICB0aHVtYkxhYmVsXHJcbiAgICAgICAgKGlucHV0KT1cInNldEludGVyaW9yTGlnaHRJbnRlbnNpdHkoJGV2ZW50LnZhbHVlKVwiXHJcbiAgICAgICAgZnhGbGV4PVwiZ3Jvd1wiPlxyXG4gICAgICA8L21hdC1zbGlkZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICAgICAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snU0hPV19QT1NUX1BST0NFU1NJTkdfU0VUVElOR1MnIHwgbG9jYWxpemV9fTwvYj5cclxuICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICBtYXg9XCIxXCJcclxuICAgICAgICBbY2hlY2tlZF09XCJzaG93UG9zdFByb2Nlc3NpbmdTZXR0aW5nc1wiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGUoY29uZmlndXJhdGlvbktleS5TaG93UG9zdFByb2Nlc3NpbmdTZXR0aW5ncywgJGV2ZW50LmNoZWNrZWQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICAgICAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snU0hPV19BQScgfCBsb2NhbGl6ZX19PC9iPlxyXG4gICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgIG1pbj1cIjBcIlxyXG4gICAgICAgIG1heD1cIjFcIlxyXG4gICAgICAgIFtjaGVja2VkXT1cInNob3dBQVwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVPcHRpb24oJ2FhRW5hYmxlZCcsICRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgID5cclxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgICAgIDxiIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7J1NIT1dfQU8nIHwgbG9jYWxpemV9fTwvYj5cclxuICAgICAgPG1hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICBtaW49XCIwXCJcclxuICAgICAgICBtYXg9XCIxXCJcclxuICAgICAgICBbY2hlY2tlZF09XCJzaG93QU9cIlxyXG4gICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlT3B0aW9uKCdhb0VuYWJsZWQnLCAkZXZlbnQuY2hlY2tlZClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsLWl0ZW1cIiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gICAgICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydTSE9XX1dBTExTJyB8IGxvY2FsaXplfX08L2I+XHJcbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgbWF4PVwiMVwiXHJcbiAgICAgICAgW2NoZWNrZWRdPVwic2hvd1dhbGxzXCJcclxuICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZShjb25maWd1cmF0aW9uS2V5LlNob3dXYWxscywgJGV2ZW50LmNoZWNrZWQpXCJcclxuICAgICAgPlxyXG4gICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICAgICAgPGIgY2xhc3M9XCJtYXQtYm9keS0yXCI+e3snU0hPV19DRUlMSU5HJyB8IGxvY2FsaXplfX08L2I+XHJcbiAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlXHJcbiAgICAgICAgbWluPVwiMFwiXHJcbiAgICAgICAgbWF4PVwiMVwiXHJcbiAgICAgICAgW2NoZWNrZWRdPVwic2hvd0NlaWxpbmdcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlKGNvbmZpZ3VyYXRpb25LZXkuU2hvd0NlaWxpbmcsICRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgID5cclxuICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImhpZGVNYXRlcmlhbHMoKVwiPnt7ICdISURFX01BVEVSSUFMUycgfCBsb2NhbGl6ZSB9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCI+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cInNob3dDb25uZWN0b3JzKClcIj57eyAnU0hPV19DT05ORUNUT1JTJyB8IGxvY2FsaXplIH19PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAoY2xpY2spPVwic2hvd1NldHRpbmdzT3B0aW9ucyA9IHRydWVcIlxyXG4gICAgICAgIGZ4TGF5b3V0PVwicm93XCJcclxuICAgICAgICBmeExheW91dGFsaWduPVwiY2VudGVyIGNlbnRlclwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+c2V0dGluZ3M8L21hdC1pY29uPlxyXG4gICAgICAgIHt7J1NIT1dfU0VUVElOR1NfT1BUSU9OUycgfCBsb2NhbGl6ZX19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwicGFuZWwtaXRlbVwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcbiAgICA8YiBjbGFzcz1cIm1hdC1ib2R5LTJcIj57eydBUFBfVkVSU0lPTicgfCBsb2NhbGl6ZX19OjwvYj5cclxuICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAjdmVyc2lvbkZpZWxkXHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIHJlYWRvbmx5PVwidHJ1ZVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cInZlcnNpb25cIlxyXG4gICAgICAgIChjbGljayk9XCJzZWxlY3RWZXJzaW9uRmllbGRDb250ZW50KClcIlxyXG4gICAgICAvPlxyXG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4IChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoKVwiPmZpbGVfY29weTwvbWF0LWljb24+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG4gIDxoMyBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTJcIj57eydDT05ORUNUSU9OJyB8IGxvY2FsaXplfX08L2gzPlxyXG4gIDxkaXYgY2xhc3M9XCJwYW5lbC1pdGVtXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgIDxiIGNsYXNzPVwibWF0LWJvZHktMlwiPnt7J2lPTkUgYmFja2VuZCB1cmwnIHwgbG9jYWxpemV9fTo8L2I+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgI2lvbmVCYWNrZW5kVXJsXHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJzZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3M/LnVybFwiXHJcbiAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlQmFja2VuZFVybENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9kaXY+XHJcblxyXG48L25nLWNvbnRhaW5lcj5cclxuPGRpdiBjbGFzcz1cInBvd2VyZWQtYnktd3JhcHBlclwiPlxyXG4gIDxzcGFuPk15Um9vbVBsYW5zIGlzIHBvd2VyZWQgYnk8L3NwYW4+XHJcbiAgPHNwYW4gY2xhc3M9XCJwb3dlcmVkLWxvZ28td3JhcHBlclwiPlxyXG4gICAgPGEgaHJlZj1cImh0dHBzOi8vd3d3LmNvbGlqbi1pdC5ubFwiIHRhcmdldD1cIl9ibGFua1wiIGFsdD1cIkNvbGlqbiBJVFwiIGNsYXNzPVwiY29saWpuLWl0LWxvZ29cIj48aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvY29saWpuLWxvZ28ud2VicFwiLz48L2E+XHJcbiAgICA8YSBocmVmPVwiaHR0cHM6Ly9pb25lMzYwLmNvbVwiIHRhcmdldD1cIl9ibGFua1wiIGFsdD1cImlPTkUzNjBcIiBjbGFzcz1cImlvbmUtMzYwLWxvZ29cIj48aW1nIHNyYz1cImFzc2V0cy9pbWFnZXMvaW9uZTM2MC1sb2dvLndlYnBcIi8+PC9hPlxyXG4gIDwvc3Bhbj5cclxuICA8c3Bhbj5Db3B5cmlnaHQgQ29saWpuIElUIDIwMjE8L3NwYW4+XHJcbjwvZGl2PlxyXG48c2V0dGluZ3Mtb3B0aW9ucyAqbmdJZj1cInNob3dTZXR0aW5nc09wdGlvbnNcIiAob25jbG9zZSk9XCJzaG93U2V0dGluZ3NPcHRpb25zID0gZmFsc2VcIj48L3NldHRpbmdzLW9wdGlvbnM+XHJcbiJdfQ==