@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
@@ -11,7 +11,7 @@ import { Component, ElementRef, Inject, ViewChild } from '@angular/core';
11
11
  import { MAT_DIALOG_DATA } from '@angular/material/dialog';
12
12
  import { RelativePositionUtils } from '../../../core/utils/relative-position.utils';
13
13
  import { Vector2 } from 'three';
14
- import { cmPerFoot, pixelsPerFoot } from '../../room-planner/components/floorplanner/const/defaults';
14
+ import { cmPerFoot, drawModeCursorHeight, drawModeCursorImageUrl, pixelsPerFoot } from '../../room-planner/components/floorplanner/const/defaults';
15
15
  import { MessageType } from '../../../core/enum/message-type.enum';
16
16
  import * as i0 from "@angular/core";
17
17
  import * as i1 from "@angular/material/dialog";
@@ -34,8 +34,8 @@ export class DrawDialogComponent {
34
34
  this.draftingMode = 'movement';
35
35
  this.cameraOffset = { x: window.innerWidth / 2, y: window.innerHeight / 2 };
36
36
  this.cameraZoom = 1;
37
- this.maxZoom = 5;
38
- this.minZoom = 1;
37
+ this.maxZoom = 10;
38
+ this.minZoom = 0.1;
39
39
  this.scrollSensitivity = 0.005;
40
40
  this.isDragging = false;
41
41
  this.dragStart = { x: 0, y: 0 };
@@ -74,6 +74,17 @@ export class DrawDialogComponent {
74
74
  this._context.stroke();
75
75
  }
76
76
  }
77
+ if (this.draftingMode === 'movement') {
78
+ this._canvas.style.cursor = 'pointer';
79
+ }
80
+ else {
81
+ if (this.isDragging) {
82
+ this._canvas.style.cursor = 'pointer';
83
+ }
84
+ else {
85
+ this._canvas.style.cursor = `url(${drawModeCursorImageUrl}) 0 ${drawModeCursorHeight}, auto`;
86
+ }
87
+ }
77
88
  requestAnimationFrame(() => this.draw());
78
89
  };
79
90
  }
@@ -109,6 +120,9 @@ export class DrawDialogComponent {
109
120
  this.hiddenImage.nativeElement.src = url;
110
121
  }
111
122
  }
123
+ updateUserValue() {
124
+ this.customerInputLenght = this.inputLength.nativeElement.value;
125
+ }
112
126
  handleMouseDown(event) {
113
127
  if (this.draftingMode === 'movement') {
114
128
  this.isDragging = true;
@@ -154,16 +168,13 @@ export class DrawDialogComponent {
154
168
  this.cameraZoom = Math.max(this.cameraZoom, this.minZoom);
155
169
  }
156
170
  handleMouseWheel(event) {
157
- if (this.draftingMode === 'movement') {
158
- const zoomAmount = event.deltaY * this.scrollSensitivity;
159
- console.log(zoomAmount);
160
- if (!this.isDragging) {
161
- if (zoomAmount) {
162
- this.cameraZoom -= zoomAmount;
163
- }
164
- this.cameraZoom = Math.min(this.cameraZoom, this.maxZoom);
165
- this.cameraZoom = Math.max(this.cameraZoom, this.minZoom);
171
+ const zoomAmount = event.deltaY * this.scrollSensitivity;
172
+ if (!this.isDragging) {
173
+ if (zoomAmount) {
174
+ this.cameraZoom -= zoomAmount;
166
175
  }
176
+ this.cameraZoom = Math.min(this.cameraZoom, this.maxZoom);
177
+ this.cameraZoom = Math.max(this.cameraZoom, this.minZoom);
167
178
  }
168
179
  }
169
180
  getEventLocation(e) {
@@ -176,12 +187,6 @@ export class DrawDialogComponent {
176
187
  }
177
188
  setModus(modus) {
178
189
  this.draftingMode = modus;
179
- if (this.draftingMode === 'scaling') {
180
- this._canvas.style.cursor = `url(assets/cursors/pencil.png) 0 26}, auto`;
181
- }
182
- else {
183
- this._canvas.style.cursor = '';
184
- }
185
190
  }
186
191
  submitLength() {
187
192
  if (this.inputLength.nativeElement.value !== '' && this.measurePoints.length === 2) {
@@ -205,6 +210,7 @@ export class DrawDialogComponent {
205
210
  backgroundWidth: this.hiddenImage.nativeElement.width,
206
211
  cameraZoom: this.cameraZoom
207
212
  };
213
+ this._messageService.emit(MessageType.StartWithEmptyRoom);
208
214
  this._messageService.emit(MessageType.LoadScaledDiagram, output);
209
215
  this._dialog.closeAll();
210
216
  }
@@ -255,7 +261,7 @@ export class DrawDialogComponent {
255
261
  }
256
262
  }
257
263
  DrawDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DrawDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i1.MatDialog }, { token: i2.MessageBusService }, { token: i3.UtilsService }, { token: i4.PresetsService }], target: i0.ɵɵFactoryTarget.Component });
258
- DrawDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DrawDialogComponent, selector: "rp-draw-dialog", viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["drawCanvas"], descendants: true, read: ElementRef, static: true }, { propertyName: "inputLength", first: true, predicate: ["inputLength"], descendants: true }, { propertyName: "hiddenImage", first: true, predicate: ["hiddenImage"], descendants: true }], ngImport: i0, template: "<h1 mat-dialog-title>{{ 'OPEN_A_DIAGRAM' | localize }}</h1>\r\n\r\n\r\n<div class=\"top-bar-container\" >\r\n <div class=\"reference-input-container\" *ngIf=\"draftingMode === 'scaling'\">\r\n <div class=\"input-button-container\">\r\n <input\r\n #inputLength\r\n type=\"number\"\r\n placeholder=\"{{ 'PDF_REFERENCE_PLACEHOLDER' | localize}}\"\r\n [attr.disabled]=\"this.measurePoints.length === 0 ? '' : null\"\r\n >\r\n <button (click)=\"resetPoints()\" title=\"Reset referentie meting\">\r\n <mat-icon class=\"homedecorator-material-icons\">refresh</mat-icon>\r\n </button>\r\n </div>\r\n <p class=\"helper-text\">{{ 'PDF_REFERENCE_HELPER' | localize }}</p>\r\n </div>\r\n\r\n<!-- <div class=\"rotation-input-container\" *ngIf=\"draftingMode === 'scaling'\">-->\r\n<!-- rotatiedingen-->\r\n<!-- </div>-->\r\n\r\n <div class=\"zoom-button-containers\" *ngIf=\"draftingMode === 'movement'\">\r\n <button (click)=\"clickingZoom('in')\">\r\n <mat-icon class=\"homedecorator-material-icons\">zoom_in</mat-icon>\r\n </button>\r\n <button (click)=\"clickingZoom('reset')\">\r\n <mat-icon class=\"homedecorator-material-icons\">all_out</mat-icon>\r\n </button>\r\n <button (click)=\"clickingZoom('out')\">\r\n <mat-icon class=\"homedecorator-material-icons\">zoom_out</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"main-button-container\">\r\n <mat-button-toggle-group\r\n class=\"mode-toggle\"\r\n (change)=\"setModus($event.value)\"\r\n [value]=\"draftingMode\">\r\n <mat-button-toggle [value]=\"'movement'\" [matTooltip]=\"'Zoom / verplaats modus'\">\r\n <mat-icon svgIcon=\"hand-pointer\"></mat-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'scaling'\" [matTooltip]=\"'Maak referentie meting'\">\r\n <mat-icon svgIcon=\"pen-ruler\"></mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div class=\"canvas-wrapper\">\r\n <canvas\r\n #drawCanvas\r\n (mousedown)=\"handleMouseDown($event)\"\r\n (mousemove)=\"handleMouseMove($event)\"\r\n (mouseup)=\"handleMouseUp($event)\"\r\n (mouseleave)=\"handleMouseLeave($event)\"\r\n (wheel)=\"handleMouseWheel($event)\"\r\n ></canvas>\r\n</div>\r\n\r\n<div class=\"save-cancel-button-container\">\r\n <button (click)=\"cancelAndReset()\">\r\n <mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon>\r\n <span>Cancel</span>\r\n </button>\r\n <button (click)=\"submitLength()\" title=\"Opslaan\" *ngIf=\"draftingMode === 'scaling'\">\r\n <mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon>\r\n <span>Ok</span>\r\n </button>\r\n</div>\r\n\r\n<img #hiddenImage src=\"\" style=\"display: none;\">\r\n", styles: ["canvas{position:relative}button{cursor:pointer;color:#fff;background:#dda73f;border:1px solid #dda73f;border-radius:3px;box-sizing:border-box;padding:5px;display:flex;align-items:center}button:hover{background:#dda73f;color:#fff}.main-button-container{display:flex;justify-content:center;margin-bottom:15px}.main-button-container .mat-button-toggle-checked{background:#dda73f;color:#fff}.reference-input-container .input-button-container{display:flex;align-items:center}.reference-input-container .input-button-container input{min-width:285px;border:1px solid #f7f7f9;border-radius:3px;height:35px;line-height:35px;box-sizing:border-box;padding:10px}.reference-input-container .input-button-container input:disabled{background:#f7f7f9;cursor:default}.reference-input-container .input-button-container button{border:none;display:inline-block}.reference-input-container .helper-text{font-size:13px;font-style:italic;margin:0;padding:0;display:block}.zoom-button-containers{display:flex;justify-items:center;justify-content:right}.zoom-button-containers button{margin:0 5px}.save-cancel-button-container{display:flex;justify-content:center;justify-items:center}.save-cancel-button-container button{margin:3px 10px;padding:8px 15px}.save-cancel-button-container button .homedecorator-material-icons{font-size:18px}.save-cancel-button-container button span{line-height:18px;font-size:15px}.canvas-wrapper{overflow:scroll;max-height:60vh;max-width:80vw}\n"], components: [{ type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "localize": i9.LocalizePipe } });
264
+ DrawDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DrawDialogComponent, selector: "rp-draw-dialog", viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["drawCanvas"], descendants: true, read: ElementRef, static: true }, { propertyName: "inputLength", first: true, predicate: ["inputLength"], descendants: true }, { propertyName: "hiddenImage", first: true, predicate: ["hiddenImage"], descendants: true }], ngImport: i0, template: "<h1 mat-dialog-title>{{ 'OPEN_A_DIAGRAM' | localize }}</h1>\r\n\r\n\r\n<div class=\"top-bar-container\" >\r\n <div class=\"reference-input-container\" *ngIf=\"draftingMode === 'scaling'\">\r\n <div class=\"input-button-container\">\r\n <input\r\n (change)=\"updateUserValue()\"\r\n [value]=\"customerInputLenght\"\r\n #inputLength\r\n type=\"number\"\r\n placeholder=\"{{ 'PDF_REFERENCE_PLACEHOLDER' | localize}}\"\r\n [attr.disabled]=\"this.measurePoints.length === 0 ? '' : null\"\r\n >\r\n <button (click)=\"resetPoints()\" title=\"Reset referentie meting\">\r\n <mat-icon class=\"homedecorator-material-icons\">refresh</mat-icon>\r\n </button>\r\n </div>\r\n <p class=\"helper-text\">{{ 'PDF_REFERENCE_HELPER' | localize }}</p>\r\n </div>\r\n\r\n<!-- <div class=\"rotation-input-container\" *ngIf=\"draftingMode === 'scaling'\">-->\r\n<!-- rotatiedingen-->\r\n<!-- </div>-->\r\n\r\n <div class=\"zoom-button-containers\" *ngIf=\"draftingMode === 'movement'\">\r\n <button (click)=\"clickingZoom('in')\">\r\n <mat-icon class=\"homedecorator-material-icons\">zoom_in</mat-icon>\r\n </button>\r\n <button (click)=\"clickingZoom('reset')\">\r\n <mat-icon class=\"homedecorator-material-icons\">all_out</mat-icon>\r\n </button>\r\n <button (click)=\"clickingZoom('out')\">\r\n <mat-icon class=\"homedecorator-material-icons\">zoom_out</mat-icon>\r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div class=\"main-button-container\">\r\n <mat-button-toggle-group\r\n class=\"mode-toggle\"\r\n (change)=\"setModus($event.value)\"\r\n [value]=\"draftingMode\">\r\n <mat-button-toggle [value]=\"'movement'\" [matTooltip]=\"'Zoom / verplaats modus'\">\r\n <mat-icon svgIcon=\"hand-pointer\"></mat-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'scaling'\" [matTooltip]=\"'Maak referentie meting'\">\r\n <mat-icon svgIcon=\"pen-ruler\"></mat-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div class=\"canvas-wrapper\">\r\n <canvas\r\n #drawCanvas\r\n (mousedown)=\"handleMouseDown($event)\"\r\n (mousemove)=\"handleMouseMove($event)\"\r\n (mouseup)=\"handleMouseUp($event)\"\r\n (mouseleave)=\"handleMouseLeave($event)\"\r\n (wheel)=\"handleMouseWheel($event)\"\r\n ></canvas>\r\n</div>\r\n\r\n<div class=\"save-cancel-button-container\">\r\n <button (click)=\"cancelAndReset()\">\r\n <mat-icon class=\"homedecorator-material-icons\">cancel</mat-icon>\r\n <span>Cancel</span>\r\n </button>\r\n <button (click)=\"submitLength()\" title=\"Opslaan\" *ngIf=\"draftingMode === 'scaling'\">\r\n <mat-icon class=\"homedecorator-material-icons\">check_circle</mat-icon>\r\n <span>Ok</span>\r\n </button>\r\n</div>\r\n\r\n<img #hiddenImage src=\"\" style=\"display: none;\">\r\n", styles: ["canvas{position:relative}button{cursor:pointer;color:#fff;background:#dda73f;border:1px solid #dda73f;border-radius:3px;box-sizing:border-box;padding:5px;display:flex;align-items:center}button:hover{background:#dda73f;color:#fff}.main-button-container{display:flex;justify-content:center;margin-bottom:15px}.main-button-container .mat-button-toggle-checked{background:#dda73f;color:#fff}.reference-input-container .input-button-container{display:flex;align-items:center}.reference-input-container .input-button-container input{min-width:285px;border:1px solid #f7f7f9;border-radius:3px;height:35px;line-height:35px;box-sizing:border-box;padding:10px}.reference-input-container .input-button-container input:disabled{background:#f7f7f9;cursor:default}.reference-input-container .input-button-container button{border:none;display:inline-block}.reference-input-container .helper-text{font-size:13px;font-style:italic;margin:0;padding:0;display:block}.zoom-button-containers{display:flex;justify-items:center;justify-content:right}.zoom-button-containers button{margin:0 5px}.save-cancel-button-container{display:flex;justify-content:center;justify-items:center}.save-cancel-button-container button{margin:3px 10px;padding:8px 15px}.save-cancel-button-container button .homedecorator-material-icons{font-size:18px}.save-cancel-button-container button span{line-height:18px;font-size:15px}.canvas-wrapper{overflow:hidden;max-height:60vh;max-width:80vw}\n"], components: [{ type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }], directives: [{ type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i8.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "localize": i9.LocalizePipe } });
259
265
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DrawDialogComponent, decorators: [{
260
266
  type: Component,
261
267
  args: [{
@@ -276,4 +282,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
276
282
  type: ViewChild,
277
283
  args: ['hiddenImage']
278
284
  }] } });
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy90b29sYmFyL2RyYXctZGlhbG9nL2RyYXctZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvdG9vbGJhci9kcmF3LWRpYWxvZy9kcmF3LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFDLGVBQWUsRUFBMEIsTUFBTSwwQkFBMEIsQ0FBQztBQUlsRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUNsRixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzlCLE9BQU8sRUFDTCxTQUFTLEVBR1QsYUFBYSxFQUNkLE1BQU0sMkRBQTJELENBQUM7QUFDbkUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7OztBQU9qRSxNQUFNLE9BQU8sbUJBQW1CO0lBOEI5QixZQUNrQyxJQUFtQixFQUMzQyxVQUE2QyxFQUM3QyxPQUFrQixFQUNsQixlQUFrQyxFQUNsQyxNQUFvQixFQUNwQixjQUE4QjtRQUxOLFNBQUksR0FBSixJQUFJLENBQWU7UUFDM0MsZUFBVSxHQUFWLFVBQVUsQ0FBbUM7UUFDN0MsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQUNsQixvQkFBZSxHQUFmLGVBQWUsQ0FBbUI7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUEzQmpDLGlCQUFZLEdBQVcsVUFBVSxDQUFDO1FBRWxDLGlCQUFZ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QUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0SSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDOztpSEF4UVUsbUJBQW1CLGtCQStCcEIsZUFBZTtxR0EvQmQsbUJBQW1CLDhJQUVFLFVBQVUscU9DdEI1Qyw2dkZBeUVBOzRGRHJEYSxtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsOEJBQThCLENBQUM7aUJBQzVDOzswQkFnQ0ksTUFBTTsyQkFBQyxlQUFlO3VMQTVCbEIsYUFBYTtzQkFEbkIsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBR3hCLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsYUFBYTtnQkFFUyxXQUFXO3NCQUEzQyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbHNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7UHJlc2V0c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9wcmVzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlbGF0aXZlUG9zaXRpb25VdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9yZWxhdGl2ZS1wb3NpdGlvbi51dGlscyc7XHJcbmltcG9ydCB7VmVjdG9yMn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1xyXG4gIGNtUGVyRm9vdCxcclxuICBkcmF3TW9kZUN1cnNvckhlaWdodCxcclxuICBkcmF3TW9kZUN1cnNvckltYWdlVXJsLFxyXG4gIHBpeGVsc1BlckZvb3RcclxufSBmcm9tICcuLi8uLi9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvY29uc3QvZGVmYXVsdHMnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdycC1kcmF3LWRpYWxvZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RyYXctZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kcmF3LWRpYWxvZy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcmF3RGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBAVmlld0NoaWxkKCdkcmF3Q2FudmFzJywge3JlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZX0pXHJcbiAgcHVibGljIGNhbnZhc0VsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0TGVuZ3RoJykgcHVibGljIGlucHV0TGVuZ3RoOiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCdoaWRkZW5JbWFnZScpIHB1YmxpYyBoaWRkZW5JbWFnZTogRWxlbWVudFJlZjtcclxuXHJcbiAgcHVibGljIGRyYWZ0aW5nTW9kZTogc3RyaW5nID0gJ21vdmVtZW50JztcclxuICBwdWJsaWMgZGlhZ3JhbUltYWdlOiBzdHJpbmc7XHJcbiAgcHVibGljIGNhbWVyYU9mZnNldDogYW55ID0ge3g6IHdpbmRvdy5pbm5lcldpZHRoIC8gMiwgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMn07XHJcbiAgcHVibGljIGNhbWVyYVpvb206IG51bWJlciA9IDE7XHJcbiAgcHVibGljIG1heFpvb206IG51bWJlciA9IDU7XHJcbiAgcHVibGljIG1pblpvb206IG51bWJlciA9IDE7XHJcbiAgcHVibGljIHNjcm9sbFNlbnNpdGl2aXR5OiBudW1iZXIgPSAwLjAwNTtcclxuICBwdWJsaWMgaXNEcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkcmFnU3RhcnQ6IGFueSA9IHt4OiAwLCB5OiAwfTtcclxuICBwdWJsaWMgaW5pdGlhbFBpbmNoRGlzdGFuY2UgPSBudWxsO1xyXG4gIHB1YmxpYyBsYXN0Wm9vbTogbnVtYmVyID0gdGhpcy5jYW1lcmFab29tO1xyXG4gIHB1YmxpYyBiYWNrZ3JvdW5kSW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgcHVibGljIG1lYXN1cmVQb2ludHM6IFZlY3RvcjJbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9jYW52YXNIZWlnaHRPZmZzZXQ6IG51bWJlciA9IDE1MDtcclxuICBwcml2YXRlIF9jYW52YXNXaWR0aE9mZnNldDogbnVtYmVyID0gMTUwO1xyXG4gIHByaXZhdGUgX2NhbnZhczogYW55O1xyXG4gIHByaXZhdGUgX2NvbnRleHQ6IGFueTtcclxuICBwcml2YXRlIF9tb3VzZURvd25Qb3NpdGlvbjogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgcHJpdmF0ZSBfdmlld1NjYWxlOiBudW1iZXIgPSAxMDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiB7IGZpbGU6IGFueSB9LFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RHJhd0RpYWxvZ0NvbXBvbmVudD4sXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3V0aWxzOiBVdGlsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcmVzZXRTZXJ2aWNlOiBQcmVzZXRzU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXNFbGVtZW50ICYmIHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuX2NhbnZhcyA9IHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICB0aGlzLl9jb250ZXh0ID0gdGhpcy5jYW52YXNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgdGhpcy5fY2FudmFzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuX2NhbnZhc0hlaWdodE9mZnNldDtcclxuICAgICAgdGhpcy5fY2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGggLSB0aGlzLl9jYW52YXNXaWR0aE9mZnNldDtcclxuICAgICAgdGhpcy5oYW5kbGVTdGFydENhbnZhcygpO1xyXG4gICAgICB0aGlzLmRyYXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jYW52YXNFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRyYXcgPSAoKTogdm9pZCA9PiB7XHJcbiAgICBpZiAodGhpcy5oaWRkZW5JbWFnZS5uYXRpdmVFbGVtZW50LmhlaWdodCAhPT0gMCkge1xyXG4gICAgICB0aGlzLl9jYW52YXMuaGVpZ2h0ID0gdGhpcy5oaWRkZW5JbWFnZS5uYXRpdmVFbGVtZW50LmhlaWdodDtcclxuICAgICAgdGhpcy5fY2FudmFzLndpZHRoID0gdGhpcy5oaWRkZW5JbWFnZS5uYXRpdmVFbGVtZW50LndpZHRoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fY2FudmFzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuX2NhbnZhc0hlaWdodE9mZnNldDtcclxuICAgICAgdGhpcy5fY2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGggLSB0aGlzLl9jYW52YXNXaWR0aE9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jb250ZXh0LnNjYWxlKHRoaXMuY2FtZXJhWm9vbSwgdGhpcy5jYW1lcmFab29tKTtcclxuICAgIHRoaXMuX2NvbnRleHQudHJhbnNsYXRlKC13aW5kb3cuaW5uZXJXaWR0aCAvIDIgKyB0aGlzLmNhbWVyYU9mZnNldC54LCAtd2luZG93LmlubmVySGVpZ2h0IC8gMiArIHRoaXMuY2FtZXJhT2Zmc2V0LnkpO1xyXG4gICAgdGhpcy5fY29udGV4dC5kcmF3SW1hZ2UodGhpcy5iYWNrZ3JvdW5kSW1hZ2UsIDAsIDApO1xyXG5cclxuICAgIGlmICh0aGlzLm1lYXN1cmVQb2ludHMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgdGhpcy5tZWFzdXJlUG9pbnRzKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgICAgICB0aGlzLl9jb250ZXh0LmFyYyhwb2ludC54LCBwb2ludC55LCA1LCAwLCAyICogTWF0aC5QSSk7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC5maWxsU3R5bGUgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC5maWxsKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubWVhc3VyZVBvaW50cy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICB0aGlzLl9jb250ZXh0LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMubWVhc3VyZVBvaW50c1swXS54LCB0aGlzLm1lYXN1cmVQb2ludHNbMF0ueSk7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5tZWFzdXJlUG9pbnRzWzFdLngsIHRoaXMubWVhc3VyZVBvaW50c1sxXS55KTtcclxuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVXaWR0aCA9ICc1JztcclxuICAgICAgICB0aGlzLl9jb250ZXh0LnN0cm9rZVN0eWxlID0gJyNmZjAwMDAnO1xyXG4gICAgICAgIHRoaXMuX2NvbnRleHQuc3Ryb2tlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmRyYXcoKSk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGhhbmRsZVN0YXJ0Q2FudmFzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFncmFtSW1hZ2UgPSB0aGlzLmRhdGEuZmlsZTtcclxuICAgIGlmICh0aGlzLmNhbnZhc0VsZW1lbnQgJiYgdGhpcy5jYW52YXNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgaW1hZ2U6IHN0cmluZyA9IHRoaXMuZGlhZ3JhbUltYWdlO1xyXG4gICAgICBjb25zdCBiYXNlNjREYXRhOiBzdHJpbmcgPSBpbWFnZS5zcGxpdCgnLCcpWzFdO1xyXG4gICAgICBjb25zdCBjb250ZW50VHlwZTogc3RyaW5nID0gJ2ltYWdlL3BuZyc7XHJcbiAgICAgIGNvbnN0IGJsb2I6IEJsb2IgPSB0aGlzLl9iYXNlNjRUb0Jsb2IoYmFzZTY0RGF0YSwgY29udGVudFR5cGUpO1xyXG4gICAgICBjb25zdCB1cmw6IHN0cmluZyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgIGNvbnN0IGNhbnZhc0JhY2tncm91bmQ6IEhUTUxJbWFnZUVsZW1lbnQgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgY2FudmFzQmFja2dyb3VuZC5zcmMgPSB1cmw7XHJcbiAgICAgIHRoaXMuYmFja2dyb3VuZEltYWdlID0gY2FudmFzQmFja2dyb3VuZDtcclxuICAgICAgdGhpcy5oaWRkZW5JbWFnZS5uYXRpdmVFbGVtZW50LnNyYyA9IHVybDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNb3VzZURvd24oZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRyYWZ0aW5nTW9kZSA9PT0gJ21vdmVtZW50Jykge1xyXG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmRyYWdTdGFydC54ID0gdGhpcy5nZXRFdmVudExvY2F0aW9uKGV2ZW50KS54IC8gdGhpcy5jYW1lcmFab29tIC0gdGhpcy5jYW1lcmFPZmZzZXQueDtcclxuICAgICAgdGhpcy5kcmFnU3RhcnQueSA9IHRoaXMuZ2V0RXZlbnRMb2NhdGlvbihldmVudCkueSAvIHRoaXMuY2FtZXJhWm9vbSAtIHRoaXMuY2FtZXJhT2Zmc2V0Lnk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwb2ludDogVmVjdG9yMiA9IHRoaXMuX2dldFJlbGF0aXZlQ29vcmRpbmF0ZXMoZXZlbnQpO1xyXG4gICAgICBpZiAodGhpcy5tZWFzdXJlUG9pbnRzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgICB0aGlzLm1lYXN1cmVQb2ludHMucHVzaChwb2ludCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRyYWZ0aW5nTW9kZSA9PT0gJ21vdmVtZW50Jykge1xyXG4gICAgICBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XHJcbiAgICAgICAgdGhpcy5jYW1lcmFPZmZzZXQueCA9IHRoaXMuZ2V0RXZlbnRMb2NhdGlvbihldmVudCkueCAvIHRoaXMuY2FtZXJhWm9vbSAtIHRoaXMuZHJhZ1N0YXJ0Lng7XHJcbiAgICAgICAgdGhpcy5jYW1lcmFPZmZzZXQueSA9IHRoaXMuZ2V0RXZlbnRMb2NhdGlvbihldmVudCkueSAvIHRoaXMuY2FtZXJhWm9vbSAtIHRoaXMuZHJhZ1N0YXJ0Lnk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNb3VzZVVwKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuaW5pdGlhbFBpbmNoRGlzdGFuY2UgPSBudWxsO1xyXG4gICAgdGhpcy5sYXN0Wm9vbSA9IHRoaXMuY2FtZXJhWm9vbTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsaWNraW5nWm9vbShvcHRpb246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgem9vbUluOiBudW1iZXIgPSAtMC41O1xyXG4gICAgY29uc3Qgem9vbU91dDogbnVtYmVyID0gMC41O1xyXG4gICAgY29uc3Qgem9vbVJlc2V0OiBudW1iZXIgPSAxO1xyXG5cclxuICAgIGlmIChvcHRpb24gPT09ICdpbicpIHtcclxuICAgICAgdGhpcy5jYW1lcmFab29tIC09IHpvb21JbjtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9uID09PSAnb3V0Jykge1xyXG4gICAgICB0aGlzLmNhbWVyYVpvb20gLT0gem9vbU91dDtcclxuICAgIH0gZWxzZSBpZiAob3B0aW9uID09PSAncmVzZXQnKSB7XHJcbiAgICAgIHRoaXMuY2FtZXJhWm9vbSA9IHpvb21SZXNldDtcclxuICAgIH1cclxuICAgIHRoaXMuY2FtZXJhWm9vbSA9IE1hdGgubWluKHRoaXMuY2FtZXJhWm9vbSwgdGhpcy5tYXhab29tKTtcclxuICAgIHRoaXMuY2FtZXJhWm9vbSA9IE1hdGgubWF4KHRoaXMuY2FtZXJhWm9vbSwgdGhpcy5taW5ab29tKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNb3VzZVdoZWVsKGV2ZW50OiBXaGVlbEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kcmFmdGluZ01vZGUgPT09ICdtb3ZlbWVudCcpIHtcclxuICAgICAgY29uc3Qgem9vbUFtb3VudDogbnVtYmVyID0gZXZlbnQuZGVsdGFZICogdGhpcy5zY3JvbGxTZW5zaXRpdml0eTtcclxuICAgICAgY29uc29sZS5sb2coem9vbUFtb3VudCk7XHJcbiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSB7XHJcbiAgICAgICAgaWYgKHpvb21BbW91bnQpIHtcclxuICAgICAgICAgIHRoaXMuY2FtZXJhWm9vbSAtPSB6b29tQW1vdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhbWVyYVpvb20gPSBNYXRoLm1pbih0aGlzLmNhbWVyYVpvb20sIHRoaXMubWF4Wm9vbSk7XHJcbiAgICAgICAgdGhpcy5jYW1lcmFab29tID0gTWF0aC5tYXgodGhpcy5jYW1lcmFab29tLCB0aGlzLm1pblpvb20pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RXZlbnRMb2NhdGlvbihlKSB7XHJcbiAgICBpZiAoZS50b3VjaGVzICYmIGUudG91Y2hlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgcmV0dXJuIHt4OiBlLnRvdWNoZXNbMF0uY2xpZW50WCwgeTogZS50b3VjaGVzWzBdLmNsaWVudFl9O1xyXG4gICAgfSBlbHNlIGlmIChlLmNsaWVudFggJiYgZS5jbGllbnRZKSB7XHJcbiAgICAgIHJldHVybiB7eDogZS5jbGllbnRYLCB5OiBlLmNsaWVudFl9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE1vZHVzKG1vZHVzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZHJhZnRpbmdNb2RlID0gbW9kdXM7XHJcblxyXG4gICAgaWYgKHRoaXMuZHJhZnRpbmdNb2RlID09PSAnc2NhbGluZycpIHtcclxuICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLmN1cnNvciA9IGB1cmwoYXNzZXRzL2N1cnNvcnMvcGVuY2lsLnBuZykgMCAyNn0sIGF1dG9gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLmN1cnNvciA9ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN1Ym1pdExlbmd0aCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlucHV0TGVuZ3RoLm5hdGl2ZUVsZW1lbnQudmFsdWUgIT09ICcnICYmIHRoaXMubWVhc3VyZVBvaW50cy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgY29uc3QgdXNlcklucHV0Q006IG51bWJlciA9IHRoaXMuaW5wdXRMZW5ndGgubmF0aXZlRWxlbWVudC52YWx1ZTtcclxuICAgICAgY29uc3QgZGlzdGFuY2VYOiBudW1iZXIgPSAodGhpcy5tZWFzdXJlUG9pbnRzWzFdLnggLSB0aGlzLm1lYXN1cmVQb2ludHNbMF0ueCk7XHJcbiAgICAgIGNvbnN0IGRpc3RhbmNlWTogbnVtYmVyID0gKHRoaXMubWVhc3VyZVBvaW50c1sxXS55IC0gdGhpcy5tZWFzdXJlUG9pbnRzWzBdLnkpO1xyXG4gICAgICBjb25zdCBkaXN0YW5jZTogbnVtYmVyID0gTWF0aC5oeXBvdChkaXN0YW5jZVgsIGRpc3RhbmNlWSk7IC8vIGRpc3RhbmNlIGluIHB4XHJcbiAgICAgIGNvbnN0IGNtUGVyUGl4ZWw6IG51bWJlciA9IGNtUGVyRm9vdCAqICgxLjAgLyBwaXhlbHNQZXJGb290KSAvIHRoaXMuX3ZpZXdTY2FsZTtcclxuICAgICAgY29uc3QgZGlzdGFuY2VDTTogbnVtYmVyID0gZGlzdGFuY2UgKiBjbVBlclBpeGVsO1xyXG5cclxuICAgICAgLy8gVGhlIHJvb20gdXNlcyAxLzEwMCBzY2FsZSB0aGlzIG1lYW5zIHRoYXQgMW0gaW4gdGhlIHBpY3R1cmUsIHNob3VsZCBnaXZlIHVzIGEgMSBjbSBsaW5lLlxyXG4gICAgICAvLyBFeGFtcGxlOiB1c2VyaW5wdXQgPSAyODJjbSAtPiBzaG91bGQgYmUgMi44MmNtIGxpbmVcclxuICAgICAgLy8gVGFrZSB0aGUgdXNlciBpbnB1dCBhbmQgZGl2aWRlIGJ5IDEwMFxyXG4gICAgICAvLyBUaGUgc2NhbGUgaXMgdGhlIHVzZXJJbnB1dFRvU2NhbGUgLyBkaXN0YW5jZUNNXHJcbiAgICAgIGNvbnN0IHVzZXJJbnB1dFRvU2NhbGU6IG51bWJlciA9IHVzZXJJbnB1dENNIC8gMTAwO1xyXG4gICAgICBjb25zdCBzY2FsZWQ6IG51bWJlciA9IHVzZXJJbnB1dFRvU2NhbGUgLyBkaXN0YW5jZUNNO1xyXG5cclxuICAgICAgY29uc3Qgb3V0cHV0OiBhbnkgPSB7XHJcbiAgICAgICAgcmVsYXRpdmVMZW5ndGg6IHVzZXJJbnB1dENNLFxyXG4gICAgICAgIHNjYWxlOiBzY2FsZWQsXHJcbiAgICAgICAgYmFja2dyb3VuZDogdGhpcy5iYWNrZ3JvdW5kSW1hZ2UsXHJcbiAgICAgICAgYmFja2dyb3VuZEhlaWdodDogdGhpcy5oaWRkZW5JbWFnZS5uYXRpdmVFbGVtZW50LmhlaWdodCxcclxuICAgICAgICBiYWNrZ3JvdW5kV2lkdGg6IHRoaXMuaGlkZGVuSW1hZ2UubmF0aXZlRWxlbWVudC53aWR0aCxcclxuICAgICAgICBjYW1lcmFab29tOiB0aGlzLmNhbWVyYVpvb21cclxuICAgICAgfTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5Mb2FkU2NhbGVkRGlhZ3JhbSwgb3V0cHV0KTtcclxuICAgICAgdGhpcy5fZGlhbG9nLmNsb3NlQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRQb2ludHMoKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lYXN1cmVQb2ludHMgPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldExhc3RQb2ludCgpOiB2b2lkIHtcclxuICAgIHRoaXMubWVhc3VyZVBvaW50cy5wb3AoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWxBbmRSZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2RpYWxvZy5jbG9zZUFsbCgpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5OZXdSb29tKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Jhc2U2NFRvQmxvYihiYXNlNjQ6IHN0cmluZywgY29udGVudFR5cGUgPSAnJyk6IEJsb2Ige1xyXG4gICAgY29uc3QgYnl0ZUNoYXJhY3RlcnM6IHN0cmluZyA9IGF0b2IoYmFzZTY0KTtcclxuICAgIGNvbnN0IGJ5dGVBcnJheXM6IGFueVtdID0gW107XHJcbiAgICBjb25zdCBzbGljZVNpemU6IG51bWJlciA9IDUxMjtcclxuICAgIGZvciAobGV0IG9mZnNldDogbnVtYmVyID0gMDsgb2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBvZmZzZXQgKz0gc2xpY2VTaXplKSB7XHJcbiAgICAgIGNvbnN0IHNsaWNlOiBzdHJpbmcgPSBieXRlQ2hhcmFjdGVycy5zbGljZShvZmZzZXQsIG9mZnNldCArIHNsaWNlU2l6ZSk7XHJcbiAgICAgIGNvbnN0IGJ5dGVOdW1iZXJzOiBhbnlbXSA9IG5ldyBBcnJheShzbGljZS5sZW5ndGgpO1xyXG4gICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgc2xpY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBieXRlTnVtYmVyc1tpXSA9IHNsaWNlLmNoYXJDb2RlQXQoaSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYnl0ZUFycmF5OiBVaW50OEFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xyXG4gICAgICBieXRlQXJyYXlzLnB1c2goYnl0ZUFycmF5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgQmxvYihieXRlQXJyYXlzLCB7dHlwZTogY29udGVudFR5cGV9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFJlbGF0aXZlQ29vcmRpbmF0ZXMoZXZlbnQ6IE1vdXNlRXZlbnQpOiBWZWN0b3IyIHtcclxuICAgIC8vIFdoZW4gc29tZW9uZSBoYXMgbW92ZWQgdGhlIGNhbWVyYSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHBvaW50IGxhbmRzIG9uIHRoZSBtYXJrIHRoZSB1c2VyIGNsaWNrZWRcclxuICAgIGNvbnN0IHdpZHRoT2Zmc2V0OiBudW1iZXIgPSB3aW5kb3cuaW5uZXJXaWR0aCAvIDI7XHJcbiAgICBjb25zdCBoZWlnaHRPZmZzZXQ6IG51bWJlciA9IHdpbmRvdy5pbm5lckhlaWdodCAvIDI7XHJcbiAgICBsZXQgb2Zmc2V0WEJhc2U6IG51bWJlciA9IDA7XHJcbiAgICBsZXQgb2Zmc2V0WUJhc2U6IG51bWJlciA9IDA7XHJcbiAgICBpZiAodGhpcy5jYW1lcmFPZmZzZXQueCAhPT0gd2lkdGhPZmZzZXQpIHtcclxuICAgICAgb2Zmc2V0WEJhc2UgPSB3aWR0aE9mZnNldCAtIHRoaXMuY2FtZXJhT2Zmc2V0Lng7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jYW1lcmFPZmZzZXQueSAhPT0gaGVpZ2h0T2Zmc2V0KSB7XHJcbiAgICAgIG9mZnNldFlCYXNlID0gaGVpZ2h0T2Zmc2V0IC0gdGhpcy5jYW1lcmFPZmZzZXQueTtcclxuICAgIH1cclxuXHJcbiAgICBvZmZzZXRYQmFzZSA9IG9mZnNldFhCYXNlICogdGhpcy5jYW1lcmFab29tO1xyXG4gICAgb2Zmc2V0WUJhc2UgPSBvZmZzZXRZQmFzZSAqIHRoaXMuY2FtZXJhWm9vbTtcclxuXHJcbiAgICB0aGlzLl9tb3VzZURvd25Qb3NpdGlvbi5jb3B5KFJlbGF0aXZlUG9zaXRpb25VdGlscy5HZXRDbGllbnRNb3VzZVBvc2l0aW9uKGV2ZW50KSk7XHJcbiAgICBjb25zdCBjYW52YXNYOiBudW1iZXIgPSAodGhpcy5fbW91c2VEb3duUG9zaXRpb24ueCArIG9mZnNldFhCYXNlKSAqIHRoaXMuX2NhbnZhcy53aWR0aCAvIHRoaXMuX2NhbnZhcy5jbGllbnRXaWR0aCAvIHRoaXMuY2FtZXJhWm9vbTtcclxuICAgIGNvbnN0IGNhbnZhc1k6IG51bWJlciA9ICh0aGlzLl9tb3VzZURvd25Qb3NpdGlvbi55ICsgb2Zmc2V0WUJhc2UpICogdGhpcy5fY2FudmFzLmhlaWdodCAvIHRoaXMuX2NhbnZhcy5jbGllbnRIZWlnaHQgLyB0aGlzLmNhbWVyYVpvb207XHJcbiAgICByZXR1cm4gbmV3IFZlY3RvcjIoY2FudmFzWCwgY2FudmFzWSk7XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8aDEgbWF0LWRpYWxvZy10aXRsZT57eyAnT1BFTl9BX0RJQUdSQU0nIHwgbG9jYWxpemUgfX08L2gxPlxyXG5cclxuXHJcbjxkaXYgIGNsYXNzPVwidG9wLWJhci1jb250YWluZXJcIiA+XHJcbiAgPGRpdiBjbGFzcz1cInJlZmVyZW5jZS1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cImRyYWZ0aW5nTW9kZSA9PT0gJ3NjYWxpbmcnXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICAjaW5wdXRMZW5ndGhcclxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdQREZfUkVGRVJFTkNFX1BMQUNFSE9MREVSJyB8IGxvY2FsaXplfX1cIlxyXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cInRoaXMubWVhc3VyZVBvaW50cy5sZW5ndGggPT09IDAgPyAnJyA6IG51bGxcIlxyXG4gICAgICA+XHJcbiAgICAgIDxidXR0b24gKGNsaWNrKT1cInJlc2V0UG9pbnRzKClcIiB0aXRsZT1cIlJlc2V0IHJlZmVyZW50aWUgbWV0aW5nXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPnJlZnJlc2g8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPHAgY2xhc3M9XCJoZWxwZXItdGV4dFwiPnt7ICdQREZfUkVGRVJFTkNFX0hFTFBFUicgfCBsb2NhbGl6ZSB9fTwvcD5cclxuICA8L2Rpdj5cclxuXHJcbjwhLS0gIDxkaXYgY2xhc3M9XCJyb3RhdGlvbi1pbnB1dC1jb250YWluZXJcIiAqbmdJZj1cImRyYWZ0aW5nTW9kZSA9PT0gJ3NjYWxpbmcnXCI+LS0+XHJcbjwhLS0gICAgcm90YXRpZWRpbmdlbi0tPlxyXG48IS0tICA8L2Rpdj4tLT5cclxuXHJcbiAgPGRpdiBjbGFzcz1cInpvb20tYnV0dG9uLWNvbnRhaW5lcnNcIiAgKm5nSWY9XCJkcmFmdGluZ01vZGUgPT09ICdtb3ZlbWVudCdcIj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cImNsaWNraW5nWm9vbSgnaW4nKVwiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+em9vbV9pbjwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cImNsaWNraW5nWm9vbSgncmVzZXQnKVwiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+YWxsX291dDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cImNsaWNraW5nWm9vbSgnb3V0JylcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPnpvb21fb3V0PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtYWluLWJ1dHRvbi1jb250YWluZXJcIj5cclxuICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXBcclxuICAgIGNsYXNzPVwibW9kZS10b2dnbGVcIlxyXG4gICAgKGNoYW5nZSk9XCJzZXRNb2R1cygkZXZlbnQudmFsdWUpXCJcclxuICAgIFt2YWx1ZV09XCJkcmFmdGluZ01vZGVcIj5cclxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSBbdmFsdWVdPVwiJ21vdmVtZW50J1wiIFttYXRUb29sdGlwXT1cIidab29tIC8gdmVycGxhYXRzIG1vZHVzJ1wiPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImhhbmQtcG9pbnRlclwiPjwvbWF0LWljb24+XHJcbiAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCInc2NhbGluZydcIiBbbWF0VG9vbHRpcF09XCInTWFhayByZWZlcmVudGllIG1ldGluZydcIj5cclxuICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJwZW4tcnVsZXJcIj48L21hdC1pY29uPlxyXG4gICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJjYW52YXMtd3JhcHBlclwiPlxyXG4gIDxjYW52YXNcclxuICAgICNkcmF3Q2FudmFzXHJcbiAgICAobW91c2Vkb3duKT1cImhhbmRsZU1vdXNlRG93bigkZXZlbnQpXCJcclxuICAgIChtb3VzZW1vdmUpPVwiaGFuZGxlTW91c2VNb3ZlKCRldmVudClcIlxyXG4gICAgKG1vdXNldXApPVwiaGFuZGxlTW91c2VVcCgkZXZlbnQpXCJcclxuICAgIChtb3VzZWxlYXZlKT1cImhhbmRsZU1vdXNlTGVhdmUoJGV2ZW50KVwiXHJcbiAgICAod2hlZWwpPVwiaGFuZGxlTW91c2VXaGVlbCgkZXZlbnQpXCJcclxuICA+PC9jYW52YXM+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInNhdmUtY2FuY2VsLWJ1dHRvbi1jb250YWluZXJcIj5cclxuICA8YnV0dG9uIChjbGljayk9XCJjYW5jZWxBbmRSZXNldCgpXCI+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+Y2FuY2VsPC9tYXQtaWNvbj5cclxuICAgIDxzcGFuPkNhbmNlbDwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIChjbGljayk9XCJzdWJtaXRMZW5ndGgoKVwiIHRpdGxlPVwiT3BzbGFhblwiICpuZ0lmPVwiZHJhZnRpbmdNb2RlID09PSAnc2NhbGluZydcIj5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxyXG4gICAgPHNwYW4+T2s8L3NwYW4+XHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PlxyXG5cclxuPGltZyAjaGlkZGVuSW1hZ2Ugc3JjPVwiXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG4iXX0=
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy90b29sYmFyL2RyYXctZGlhbG9nL2RyYXctZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvdG9vbGJhci9kcmF3LWRpYWxvZy9kcmF3LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFDLGVBQWUsRUFBMEIsTUFBTSwwQkFBMEIsQ0FBQztBQUlsRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUNsRixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sT0FBTyxDQUFDO0FBQzlCLE9BQU8sRUFDTCxTQUFTLEVBQ1Qsb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixhQUFhLEVBQ2QsTUFBTSwyREFBMkQsQ0FBQztBQUNuRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7O0FBUWpFLE1BQU0sT0FBTyxtQkFBbUI7SUE4QjlCLFlBQ2tDLElBQW1CLEVBQzNDLFVBQTZDLEVBQzdDLE9BQWtCLEVBQ2xCLGVBQWtDLEVBQ2xDLE1BQW9CLEVBQ3BCLGNBQThCO1FBTE4sU0FBSSxHQUFKLElBQUksQ0FBZTtRQUMzQyxlQUFVLEdBQVYsVUFBVSxDQUFtQztRQUM3QyxZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQ2xCLG9CQUFlLEdBQWYsZUFBZSxDQUFtQjtRQUNsQyxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQTNCakMsaUJBQVks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RixNQUFNLE9BQU8sR0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNwSSxNQUFNLE9BQU8sR0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0SSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDOztpSEE3UVUsbUJBQW1CLGtCQStCcEIsZUFBZTtxR0EvQmQsbUJBQW1CLDhJQUVFLFVBQVUscU9DdkI1QyxrMUZBMkVBOzRGRHREYSxtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsOEJBQThCLENBQUM7aUJBQzVDOzswQkFnQ0ksTUFBTTsyQkFBQyxlQUFlO3VMQTVCbEIsYUFBYTtzQkFEbkIsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBR3hCLFdBQVc7c0JBQTNDLFNBQVM7dUJBQUMsYUFBYTtnQkFFUyxXQUFXO3NCQUEzQyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5qZWN0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZywgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbHNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7UHJlc2V0c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9wcmVzZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlbGF0aXZlUG9zaXRpb25VdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9yZWxhdGl2ZS1wb3NpdGlvbi51dGlscyc7XHJcbmltcG9ydCB7VmVjdG9yMn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge1xyXG4gIGNtUGVyRm9vdCxcclxuICBkcmF3TW9kZUN1cnNvckhlaWdodCxcclxuICBkcmF3TW9kZUN1cnNvckltYWdlVXJsLFxyXG4gIHBpeGVsc1BlckZvb3RcclxufSBmcm9tICcuLi8uLi9yb29tLXBsYW5uZXIvY29tcG9uZW50cy9mbG9vcnBsYW5uZXIvY29uc3QvZGVmYXVsdHMnO1xyXG5pbXBvcnQge01lc3NhZ2VUeXBlfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vbWVzc2FnZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge0Zsb29ycGxhbm5lck1vZGV9IGZyb20gJy4uLy4uL3Jvb20tcGxhbm5lci9jb21wb25lbnRzL2Zsb29ycGxhbm5lci9mbG9vcnBsYW5uZXItbW9kZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JwLWRyYXctZGlhbG9nJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHJhdy1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RyYXctZGlhbG9nLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERyYXdEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2RyYXdDYW52YXMnLCB7cmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlfSlcclxuICBwdWJsaWMgY2FudmFzRWxlbWVudDogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRMZW5ndGgnKSBwdWJsaWMgaW5wdXRMZW5ndGg6IEVsZW1lbnRSZWY7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2hpZGRlbkltYWdlJykgcHVibGljIGhpZGRlbkltYWdlOiBFbGVtZW50UmVmO1xyXG4gIHB1YmxpYyBjdXN0b21lcklucHV0TGVuZ2h0OiBudW1iZXI7XHJcbiAgcHVibGljIGRyYWZ0aW5nTW9kZTogc3RyaW5nID0gJ21vdmVtZW50JztcclxuICBwdWJsaWMgZGlhZ3JhbUltYWdlOiBzdHJpbmc7XHJcbiAgcHVibGljIGNhbWVyYU9mZnNldDogYW55ID0ge3g6IHdpbmRvdy5pbm5lcldpZHRoIC8gMiwgeTogd2luZG93LmlubmVySGVpZ2h0IC8gMn07XHJcbiAgcHVibGljIGNhbWVyYVpvb206IG51bWJlciA9IDE7XHJcbiAgcHVibGljIG1heFpvb206IG51bWJlciA9IDEwO1xyXG4gIHB1YmxpYyBtaW5ab29tOiBudW1iZXIgPSAwLjE7XHJcbiAgcHVibGljIHNjcm9sbFNlbnNpdGl2aXR5OiBudW1iZXIgPSAwLjAwNTtcclxuICBwdWJsaWMgaXNEcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkcmFnU3RhcnQ6IGFueSA9IHt4OiAwLCB5OiAwfTtcclxuICBwdWJsaWMgaW5pdGlhbFBpbmNoRGlzdGFuY2UgPSBudWxsO1xyXG4gIHB1YmxpYyBsYXN0Wm9vbTogbnVtYmVyID0gdGhpcy5jYW1lcmFab29tO1xyXG4gIHB1YmxpYyBiYWNrZ3JvdW5kSW1hZ2U6IEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgcHVibGljIG1lYXN1cmVQb2ludHM6IFZlY3RvcjJbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIF9jYW52YXNIZWlnaHRPZmZzZXQ6IG51bWJlciA9IDE1MDtcclxuICBwcml2YXRlIF9jYW52YXNXaWR0aE9mZnNldDogbnVtYmVyID0gMTUwO1xyXG4gIHByaXZhdGUgX2NhbnZhczogYW55O1xyXG4gIHByaXZhdGUgX2NvbnRleHQ6IGFueTtcclxuICBwcml2YXRlIF9tb3VzZURvd25Qb3NpdGlvbjogVmVjdG9yMiA9IG5ldyBWZWN0b3IyKCk7XHJcbiAgcHJpdmF0ZSBfdmlld1NjYWxlOiBudW1iZXIgPSAxMDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiB7IGZpbGU6IGFueSB9LFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RHJhd0RpYWxvZ0NvbXBvbmVudD4sXHJcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3V0aWxzOiBVdGlsc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcmVzZXRTZXJ2aWNlOiBQcmVzZXRzU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5jYW52YXNFbGVtZW50ICYmIHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuX2NhbnZhcyA9IHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICB0aGlzLl9jb250ZXh0ID0gdGhpcy5jYW52YXNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgdGhpcy5fY2FudmFzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuX2NhbnZhc0hlaWdodE9mZnNldDtcclxuICAgICAgdGhpcy5fY2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGggLSB0aGlzLl9jYW52YXNXaWR0aE9mZnNldDtcclxuICAgICAgdGhpcy5oYW5kbGVTdGFydENhbnZhcygpO1xyXG4gICAgICB0aGlzLmRyYXcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gdW5kZWZpbmVkO1xyXG4gICAgdGhpcy5jYW52YXNFbGVtZW50ID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRyYXcgPSAoKTogdm9pZCA9PiB7XHJcbiAgICBpZiAodGhpcy5oaWRkZW5JbWFnZS5uYXRpdmVFbGVtZW50LmhlaWdodCAhPT0gMCkge1xyXG4gICAgICB0aGlzLl9jYW52YXMuaGVpZ2h0ID0gdGhpcy5oaWRkZW5JbWFnZS5uYXRpdmVFbGVtZW50LmhlaWdodDtcclxuICAgICAgdGhpcy5fY2FudmFzLndpZHRoID0gdGhpcy5oaWRkZW5JbWFnZS5uYXRpdmVFbGVtZW50LndpZHRoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fY2FudmFzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRoaXMuX2NhbnZhc0hlaWdodE9mZnNldDtcclxuICAgICAgdGhpcy5fY2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGggLSB0aGlzLl9jYW52YXNXaWR0aE9mZnNldDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9jb250ZXh0LnNjYWxlKHRoaXMuY2FtZXJhWm9vbSwgdGhpcy5jYW1lcmFab29tKTtcclxuICAgIHRoaXMuX2NvbnRleHQudHJhbnNsYXRlKC13aW5kb3cuaW5uZXJXaWR0aCAvIDIgKyB0aGlzLmNhbWVyYU9mZnNldC54LCAtd2luZG93LmlubmVySGVpZ2h0IC8gMiArIHRoaXMuY2FtZXJhT2Zmc2V0LnkpO1xyXG4gICAgdGhpcy5fY29udGV4dC5kcmF3SW1hZ2UodGhpcy5iYWNrZ3JvdW5kSW1hZ2UsIDAsIDApO1xyXG5cclxuICAgIGlmICh0aGlzLm1lYXN1cmVQb2ludHMubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgIGZvciAoY29uc3QgcG9pbnQgb2YgdGhpcy5tZWFzdXJlUG9pbnRzKSB7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC5iZWdpblBhdGgoKTtcclxuICAgICAgICB0aGlzLl9jb250ZXh0LmFyYyhwb2ludC54LCBwb2ludC55LCA1LCAwLCAyICogTWF0aC5QSSk7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC5maWxsU3R5bGUgPSAnI2ZmMDAwMCc7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC5maWxsKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubWVhc3VyZVBvaW50cy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICB0aGlzLl9jb250ZXh0LmJlZ2luUGF0aCgpO1xyXG4gICAgICAgIHRoaXMuX2NvbnRleHQubW92ZVRvKHRoaXMubWVhc3VyZVBvaW50c1swXS54LCB0aGlzLm1lYXN1cmVQb2ludHNbMF0ueSk7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dC5saW5lVG8odGhpcy5tZWFzdXJlUG9pbnRzWzFdLngsIHRoaXMubWVhc3VyZVBvaW50c1sxXS55KTtcclxuICAgICAgICB0aGlzLl9jb250ZXh0LmxpbmVXaWR0aCA9ICc1JztcclxuICAgICAgICB0aGlzLl9jb250ZXh0LnN0cm9rZVN0eWxlID0gJyNmZjAwMDAnO1xyXG4gICAgICAgIHRoaXMuX2NvbnRleHQuc3Ryb2tlKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRyYWZ0aW5nTW9kZSA9PT0gJ21vdmVtZW50Jykge1xyXG4gICAgICB0aGlzLl9jYW52YXMuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xyXG4gICAgICAgIHRoaXMuX2NhbnZhcy5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY2FudmFzLnN0eWxlLmN1cnNvciA9IGB1cmwoJHtkcmF3TW9kZUN1cnNvckltYWdlVXJsfSkgMCAke2RyYXdNb2RlQ3Vyc29ySGVpZ2h0fSwgYXV0b2A7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmRyYXcoKSk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGhhbmRsZVN0YXJ0Q2FudmFzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5kaWFncmFtSW1hZ2UgPSB0aGlzLmRhdGEuZmlsZTtcclxuICAgIGlmICh0aGlzLmNhbnZhc0VsZW1lbnQgJiYgdGhpcy5jYW52YXNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgaW1hZ2U6IHN0cmluZyA9IHRoaXMuZGlhZ3JhbUltYWdlO1xyXG4gICAgICBjb25zdCBiYXNlNjREYXRhOiBzdHJpbmcgPSBpbWFnZS5zcGxpdCgnLCcpWzFdO1xyXG4gICAgICBjb25zdCBjb250ZW50VHlwZTogc3RyaW5nID0gJ2ltYWdlL3BuZyc7XHJcbiAgICAgIGNvbnN0IGJsb2I6IEJsb2IgPSB0aGlzLl9iYXNlNjRUb0Jsb2IoYmFzZTY0RGF0YSwgY29udGVudFR5cGUpO1xyXG4gICAgICBjb25zdCB1cmw6IHN0cmluZyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgIGNvbnN0IGNhbnZhc0JhY2tncm91bmQ6IEhUTUxJbWFnZUVsZW1lbnQgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgY2FudmFzQmFja2dyb3VuZC5zcmMgPSB1cmw7XHJcbiAgICAgIHRoaXMuYmFja2dyb3VuZEltYWdlID0gY2FudmFzQmFja2dyb3VuZDtcclxuICAgICAgdGhpcy5oaWRkZW5JbWFnZS5uYXRpdmVFbGVtZW50LnNyYyA9IHVybDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVVc2VyVmFsdWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmN1c3RvbWVySW5wdXRMZW5naHQgPSB0aGlzLmlucHV0TGVuZ3RoLm5hdGl2ZUVsZW1lbnQudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kcmFmdGluZ01vZGUgPT09ICdtb3ZlbWVudCcpIHtcclxuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5kcmFnU3RhcnQueCA9IHRoaXMuZ2V0RXZlbnRMb2NhdGlvbihldmVudCkueCAvIHRoaXMuY2FtZXJhWm9vbSAtIHRoaXMuY2FtZXJhT2Zmc2V0Lng7XHJcbiAgICAgIHRoaXMuZHJhZ1N0YXJ0LnkgPSB0aGlzLmdldEV2ZW50TG9jYXRpb24oZXZlbnQpLnkgLyB0aGlzLmNhbWVyYVpvb20gLSB0aGlzLmNhbWVyYU9mZnNldC55O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcG9pbnQ6IFZlY3RvcjIgPSB0aGlzLl9nZXRSZWxhdGl2ZUNvb3JkaW5hdGVzKGV2ZW50KTtcclxuICAgICAgaWYgKHRoaXMubWVhc3VyZVBvaW50cy5sZW5ndGggPCAyKSB7XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlUG9pbnRzLnB1c2gocG9pbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5kcmFmdGluZ01vZGUgPT09ICdtb3ZlbWVudCcpIHtcclxuICAgICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xyXG4gICAgICAgIHRoaXMuY2FtZXJhT2Zmc2V0LnggPSB0aGlzLmdldEV2ZW50TG9jYXRpb24oZXZlbnQpLnggLyB0aGlzLmNhbWVyYVpvb20gLSB0aGlzLmRyYWdTdGFydC54O1xyXG4gICAgICAgIHRoaXMuY2FtZXJhT2Zmc2V0LnkgPSB0aGlzLmdldEV2ZW50TG9jYXRpb24oZXZlbnQpLnkgLyB0aGlzLmNhbWVyYVpvb20gLSB0aGlzLmRyYWdTdGFydC55O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTW91c2VVcChldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmluaXRpYWxQaW5jaERpc3RhbmNlID0gbnVsbDtcclxuICAgIHRoaXMubGFzdFpvb20gPSB0aGlzLmNhbWVyYVpvb207XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTW91c2VMZWF2ZShldmVudDogTW91c2VFdmVudCkge1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGlja2luZ1pvb20ob3B0aW9uOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHpvb21JbjogbnVtYmVyID0gLTAuNTtcclxuICAgIGNvbnN0IHpvb21PdXQ6IG51bWJlciA9IDAuNTtcclxuICAgIGNvbnN0IHpvb21SZXNldDogbnVtYmVyID0gMTtcclxuXHJcbiAgICBpZiAob3B0aW9uID09PSAnaW4nKSB7XHJcbiAgICAgIHRoaXMuY2FtZXJhWm9vbSAtPSB6b29tSW47XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbiA9PT0gJ291dCcpIHtcclxuICAgICAgdGhpcy5jYW1lcmFab29tIC09IHpvb21PdXQ7XHJcbiAgICB9IGVsc2UgaWYgKG9wdGlvbiA9PT0gJ3Jlc2V0Jykge1xyXG4gICAgICB0aGlzLmNhbWVyYVpvb20gPSB6b29tUmVzZXQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbWVyYVpvb20gPSBNYXRoLm1pbih0aGlzLmNhbWVyYVpvb20sIHRoaXMubWF4Wm9vbSk7XHJcbiAgICB0aGlzLmNhbWVyYVpvb20gPSBNYXRoLm1heCh0aGlzLmNhbWVyYVpvb20sIHRoaXMubWluWm9vbSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlTW91c2VXaGVlbChldmVudDogV2hlZWxFdmVudCkge1xyXG4gICAgY29uc3Qgem9vbUFtb3VudDogbnVtYmVyID0gZXZlbnQuZGVsdGFZICogdGhpcy5zY3JvbGxTZW5zaXRpdml0eTtcclxuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nKSB7XHJcbiAgICAgIGlmICh6b29tQW1vdW50KSB7XHJcbiAgICAgICAgdGhpcy5jYW1lcmFab29tIC09IHpvb21BbW91bnQ7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jYW1lcmFab29tID0gTWF0aC5taW4odGhpcy5jYW1lcmFab29tLCB0aGlzLm1heFpvb20pO1xyXG4gICAgICB0aGlzLmNhbWVyYVpvb20gPSBNYXRoLm1heCh0aGlzLmNhbWVyYVpvb20sIHRoaXMubWluWm9vbSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RXZlbnRMb2NhdGlvbihlKSB7XHJcbiAgICBpZiAoZS50b3VjaGVzICYmIGUudG91Y2hlcy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgcmV0dXJuIHt4OiBlLnRvdWNoZXNbMF0uY2xpZW50WCwgeTogZS50b3VjaGVzWzBdLmNsaWVudFl9O1xyXG4gICAgfSBlbHNlIGlmIChlLmNsaWVudFggJiYgZS5jbGllbnRZKSB7XHJcbiAgICAgIHJldHVybiB7eDogZS5jbGllbnRYLCB5OiBlLmNsaWVudFl9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE1vZHVzKG1vZHVzOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuZHJhZnRpbmdNb2RlID0gbW9kdXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3VibWl0TGVuZ3RoKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaW5wdXRMZW5ndGgubmF0aXZlRWxlbWVudC52YWx1ZSAhPT0gJycgJiYgdGhpcy5tZWFzdXJlUG9pbnRzLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICBjb25zdCB1c2VySW5wdXRDTTogbnVtYmVyID0gdGhpcy5pbnB1dExlbmd0aC5uYXRpdmVFbGVtZW50LnZhbHVlO1xyXG4gICAgICBjb25zdCBkaXN0YW5jZVg6IG51bWJlciA9ICh0aGlzLm1lYXN1cmVQb2ludHNbMV0ueCAtIHRoaXMubWVhc3VyZVBvaW50c1swXS54KTtcclxuICAgICAgY29uc3QgZGlzdGFuY2VZOiBudW1iZXIgPSAodGhpcy5tZWFzdXJlUG9pbnRzWzFdLnkgLSB0aGlzLm1lYXN1cmVQb2ludHNbMF0ueSk7XHJcbiAgICAgIGNvbnN0IGRpc3RhbmNlOiBudW1iZXIgPSBNYXRoLmh5cG90KGRpc3RhbmNlWCwgZGlzdGFuY2VZKTsgLy8gZGlzdGFuY2UgaW4gcHhcclxuICAgICAgY29uc3QgY21QZXJQaXhlbDogbnVtYmVyID0gY21QZXJGb290ICogKDEuMCAvIHBpeGVsc1BlckZvb3QpIC8gdGhpcy5fdmlld1NjYWxlO1xyXG4gICAgICBjb25zdCBkaXN0YW5jZUNNOiBudW1iZXIgPSBkaXN0YW5jZSAqIGNtUGVyUGl4ZWw7XHJcblxyXG4gICAgICAvLyBUaGUgcm9vbSB1c2VzIDEvMTAwIHNjYWxlIHRoaXMgbWVhbnMgdGhhdCAxbSBpbiB0aGUgcGljdHVyZSwgc2hvdWxkIGdpdmUgdXMgYSAxIGNtIGxpbmUuXHJcbiAgICAgIC8vIEV4YW1wbGU6IHVzZXJpbnB1dCA9IDI4MmNtIC0+IHNob3VsZCBiZSAyLjgyY20gbGluZVxyXG4gICAgICAvLyBUYWtlIHRoZSB1c2VyIGlucHV0IGFuZCBkaXZpZGUgYnkgMTAwXHJcbiAgICAgIC8vIFRoZSBzY2FsZSBpcyB0aGUgdXNlcklucHV0VG9TY2FsZSAvIGRpc3RhbmNlQ01cclxuICAgICAgY29uc3QgdXNlcklucHV0VG9TY2FsZTogbnVtYmVyID0gdXNlcklucHV0Q00gLyAxMDA7XHJcbiAgICAgIGNvbnN0IHNjYWxlZDogbnVtYmVyID0gdXNlcklucHV0VG9TY2FsZSAvIGRpc3RhbmNlQ007XHJcblxyXG4gICAgICBjb25zdCBvdXRwdXQ6IGFueSA9IHtcclxuICAgICAgICByZWxhdGl2ZUxlbmd0aDogdXNlcklucHV0Q00sXHJcbiAgICAgICAgc2NhbGU6IHNjYWxlZCxcclxuICAgICAgICBiYWNrZ3JvdW5kOiB0aGlzLmJhY2tncm91bmRJbWFnZSxcclxuICAgICAgICBiYWNrZ3JvdW5kSGVpZ2h0OiB0aGlzLmhpZGRlbkltYWdlLm5hdGl2ZUVsZW1lbnQuaGVpZ2h0LFxyXG4gICAgICAgIGJhY2tncm91bmRXaWR0aDogdGhpcy5oaWRkZW5JbWFnZS5uYXRpdmVFbGVtZW50LndpZHRoLFxyXG4gICAgICAgIGNhbWVyYVpvb206IHRoaXMuY2FtZXJhWm9vbVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlN0YXJ0V2l0aEVtcHR5Um9vbSk7XHJcbiAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuTG9hZFNjYWxlZERpYWdyYW0sIG91dHB1dCk7XHJcbiAgICAgIHRoaXMuX2RpYWxvZy5jbG9zZUFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0UG9pbnRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5tZWFzdXJlUG9pbnRzID0gW107XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXRMYXN0UG9pbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lYXN1cmVQb2ludHMucG9wKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2FuY2VsQW5kUmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaWFsb2cuY2xvc2VBbGwoKTtcclxuICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuTmV3Um9vbSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9iYXNlNjRUb0Jsb2IoYmFzZTY0OiBzdHJpbmcsIGNvbnRlbnRUeXBlID0gJycpOiBCbG9iIHtcclxuICAgIGNvbnN0IGJ5dGVDaGFyYWN0ZXJzOiBzdHJpbmcgPSBhdG9iKGJhc2U2NCk7XHJcbiAgICBjb25zdCBieXRlQXJyYXlzOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3Qgc2xpY2VTaXplOiBudW1iZXIgPSA1MTI7XHJcbiAgICBmb3IgKGxldCBvZmZzZXQ6IG51bWJlciA9IDA7IG9mZnNldCA8IGJ5dGVDaGFyYWN0ZXJzLmxlbmd0aDsgb2Zmc2V0ICs9IHNsaWNlU2l6ZSkge1xyXG4gICAgICBjb25zdCBzbGljZTogc3RyaW5nID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xyXG4gICAgICBjb25zdCBieXRlTnVtYmVyczogYW55W10gPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTtcclxuICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHNsaWNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgYnl0ZU51bWJlcnNbaV0gPSBzbGljZS5jaGFyQ29kZUF0KGkpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGJ5dGVBcnJheTogVWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ5dGVOdW1iZXJzKTtcclxuICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEJsb2IoYnl0ZUFycmF5cywge3R5cGU6IGNvbnRlbnRUeXBlfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRSZWxhdGl2ZUNvb3JkaW5hdGVzKGV2ZW50OiBNb3VzZUV2ZW50KTogVmVjdG9yMiB7XHJcbiAgICAvLyBXaGVuIHNvbWVvbmUgaGFzIG1vdmVkIHRoZSBjYW1lcmEsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBwb2ludCBsYW5kcyBvbiB0aGUgbWFyayB0aGUgdXNlciBjbGlja2VkXHJcbiAgICBjb25zdCB3aWR0aE9mZnNldDogbnVtYmVyID0gd2luZG93LmlubmVyV2lkdGggLyAyO1xyXG4gICAgY29uc3QgaGVpZ2h0T2Zmc2V0OiBudW1iZXIgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLyAyO1xyXG4gICAgbGV0IG9mZnNldFhCYXNlOiBudW1iZXIgPSAwO1xyXG4gICAgbGV0IG9mZnNldFlCYXNlOiBudW1iZXIgPSAwO1xyXG4gICAgaWYgKHRoaXMuY2FtZXJhT2Zmc2V0LnggIT09IHdpZHRoT2Zmc2V0KSB7XHJcbiAgICAgIG9mZnNldFhCYXNlID0gd2lkdGhPZmZzZXQgLSB0aGlzLmNhbWVyYU9mZnNldC54O1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2FtZXJhT2Zmc2V0LnkgIT09IGhlaWdodE9mZnNldCkge1xyXG4gICAgICBvZmZzZXRZQmFzZSA9IGhlaWdodE9mZnNldCAtIHRoaXMuY2FtZXJhT2Zmc2V0Lnk7XHJcbiAgICB9XHJcblxyXG4gICAgb2Zmc2V0WEJhc2UgPSBvZmZzZXRYQmFzZSAqIHRoaXMuY2FtZXJhWm9vbTtcclxuICAgIG9mZnNldFlCYXNlID0gb2Zmc2V0WUJhc2UgKiB0aGlzLmNhbWVyYVpvb207XHJcblxyXG4gICAgdGhpcy5fbW91c2VEb3duUG9zaXRpb24uY29weShSZWxhdGl2ZVBvc2l0aW9uVXRpbHMuR2V0Q2xpZW50TW91c2VQb3NpdGlvbihldmVudCkpO1xyXG4gICAgY29uc3QgY2FudmFzWDogbnVtYmVyID0gKHRoaXMuX21vdXNlRG93blBvc2l0aW9uLnggKyBvZmZzZXRYQmFzZSkgKiB0aGlzLl9jYW52YXMud2lkdGggLyB0aGlzLl9jYW52YXMuY2xpZW50V2lkdGggLyB0aGlzLmNhbWVyYVpvb207XHJcbiAgICBjb25zdCBjYW52YXNZOiBudW1iZXIgPSAodGhpcy5fbW91c2VEb3duUG9zaXRpb24ueSArIG9mZnNldFlCYXNlKSAqIHRoaXMuX2NhbnZhcy5oZWlnaHQgLyB0aGlzLl9jYW52YXMuY2xpZW50SGVpZ2h0IC8gdGhpcy5jYW1lcmFab29tO1xyXG4gICAgcmV0dXJuIG5ldyBWZWN0b3IyKGNhbnZhc1gsIGNhbnZhc1kpO1xyXG4gIH1cclxufVxyXG5cclxuIiwiPGgxIG1hdC1kaWFsb2ctdGl0bGU+e3sgJ09QRU5fQV9ESUFHUkFNJyB8IGxvY2FsaXplIH19PC9oMT5cclxuXHJcblxyXG48ZGl2ICBjbGFzcz1cInRvcC1iYXItY29udGFpbmVyXCIgPlxyXG4gIDxkaXYgY2xhc3M9XCJyZWZlcmVuY2UtaW5wdXQtY29udGFpbmVyXCIgKm5nSWY9XCJkcmFmdGluZ01vZGUgPT09ICdzY2FsaW5nJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVVc2VyVmFsdWUoKVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cImN1c3RvbWVySW5wdXRMZW5naHRcIlxyXG4gICAgICAgICNpbnB1dExlbmd0aFxyXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ1BERl9SRUZFUkVOQ0VfUExBQ0VIT0xERVInIHwgbG9jYWxpemV9fVwiXHJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwidGhpcy5tZWFzdXJlUG9pbnRzLmxlbmd0aCA9PT0gMCA/ICcnIDogbnVsbFwiXHJcbiAgICAgID5cclxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVzZXRQb2ludHMoKVwiIHRpdGxlPVwiUmVzZXQgcmVmZXJlbnRpZSBtZXRpbmdcIj5cclxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+cmVmcmVzaDwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8cCBjbGFzcz1cImhlbHBlci10ZXh0XCI+e3sgJ1BERl9SRUZFUkVOQ0VfSEVMUEVSJyB8IGxvY2FsaXplIH19PC9wPlxyXG4gIDwvZGl2PlxyXG5cclxuPCEtLSAgPGRpdiBjbGFzcz1cInJvdGF0aW9uLWlucHV0LWNvbnRhaW5lclwiICpuZ0lmPVwiZHJhZnRpbmdNb2RlID09PSAnc2NhbGluZydcIj4tLT5cclxuPCEtLSAgICByb3RhdGllZGluZ2VuLS0+XHJcbjwhLS0gIDwvZGl2Pi0tPlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiem9vbS1idXR0b24tY29udGFpbmVyc1wiICAqbmdJZj1cImRyYWZ0aW5nTW9kZSA9PT0gJ21vdmVtZW50J1wiPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xpY2tpbmdab29tKCdpbicpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj56b29tX2luPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xpY2tpbmdab29tKCdyZXNldCcpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5hbGxfb3V0PC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xpY2tpbmdab29tKCdvdXQnKVwiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJob21lZGVjb3JhdG9yLW1hdGVyaWFsLWljb25zXCI+em9vbV9vdXQ8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cIm1haW4tYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cFxyXG4gICAgY2xhc3M9XCJtb2RlLXRvZ2dsZVwiXHJcbiAgICAoY2hhbmdlKT1cInNldE1vZHVzKCRldmVudC52YWx1ZSlcIlxyXG4gICAgW3ZhbHVlXT1cImRyYWZ0aW5nTW9kZVwiPlxyXG4gICAgPG1hdC1idXR0b24tdG9nZ2xlIFt2YWx1ZV09XCInbW92ZW1lbnQnXCIgW21hdFRvb2x0aXBdPVwiJ1pvb20gLyB2ZXJwbGFhdHMgbW9kdXMnXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiaGFuZC1wb2ludGVyXCI+PC9tYXQtaWNvbj5cclxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cIidzY2FsaW5nJ1wiIFttYXRUb29sdGlwXT1cIidNYWFrIHJlZmVyZW50aWUgbWV0aW5nJ1wiPlxyXG4gICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInBlbi1ydWxlclwiPjwvbWF0LWljb24+XHJcbiAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImNhbnZhcy13cmFwcGVyXCI+XHJcbiAgPGNhbnZhc1xyXG4gICAgI2RyYXdDYW52YXNcclxuICAgIChtb3VzZWRvd24pPVwiaGFuZGxlTW91c2VEb3duKCRldmVudClcIlxyXG4gICAgKG1vdXNlbW92ZSk9XCJoYW5kbGVNb3VzZU1vdmUoJGV2ZW50KVwiXHJcbiAgICAobW91c2V1cCk9XCJoYW5kbGVNb3VzZVVwKCRldmVudClcIlxyXG4gICAgKG1vdXNlbGVhdmUpPVwiaGFuZGxlTW91c2VMZWF2ZSgkZXZlbnQpXCJcclxuICAgICh3aGVlbCk9XCJoYW5kbGVNb3VzZVdoZWVsKCRldmVudClcIlxyXG4gID48L2NhbnZhcz5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwic2F2ZS1jYW5jZWwtYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gIDxidXR0b24gKGNsaWNrKT1cImNhbmNlbEFuZFJlc2V0KClcIj5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgPHNwYW4+Q2FuY2VsPC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxidXR0b24gKGNsaWNrKT1cInN1Ym1pdExlbmd0aCgpXCIgdGl0bGU9XCJPcHNsYWFuXCIgKm5nSWY9XCJkcmFmdGluZ01vZGUgPT09ICdzY2FsaW5nJ1wiPlxyXG4gICAgPG1hdC1pY29uIGNsYXNzPVwiaG9tZWRlY29yYXRvci1tYXRlcmlhbC1pY29uc1wiPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XHJcbiAgICA8c3Bhbj5Pazwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcblxyXG48aW1nICNoaWRkZW5JbWFnZSBzcmM9XCJcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiJdfQ==
@@ -133,7 +133,7 @@ export class SaveDialogComponent {
133
133
  }
134
134
  }
135
135
  SaveDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SaveDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.PermanentStoreService }, { token: i2.HomedecoratorIconCacheService }, { token: i3.MatDialog }, { token: i3.MatDialogRef }, { token: i4.MessageBusService }, { token: i5.PresetsService }, { token: i6.HomedecoratorDictionaryService }, { token: i7.HomedecoratorSettingsService }], target: i0.ɵɵFactoryTarget.Component });
136
- SaveDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SaveDialogComponent, selector: "rp-save-dialog", ngImport: i0, template: "<h1 mat-dialog-title>{{'SAVE_THE_PLAN' | localize}}</h1>\r\n<div mat-dialog-content class=\"dialog-wrapper\" cdkTrapFocus>\r\n <mat-nav-list>\r\n <mat-list-item (click)=\"saveToCloud()\">\r\n <h4 mat-line><strong>{{'SAVE_TO_CLOUD' | localize}}</strong></h4>\r\n <p mat-line class=\"item-description\">{{'ACCESS_THE_PLAN_USING_A_UNIQUE_CODE' | localize}}</p>\r\n </mat-list-item>\r\n <mat-list-item *ngIf=\"wasPlanSaved\" (click)=\"saveToCloud(true)\">\r\n <h4 mat-line><strong>{{'SAVE_AS_NEW' | localize}}</strong></h4>\r\n <p mat-line class=\"item-description\">{{'CREATE_A_COPY_OF_THE_PLAN' | localize}}</p>\r\n </mat-list-item>\r\n <button mat-mini-fab class=\"download-button\" (click)=\"download()\" *ngIf=\"permanentStoreService.code || showLocalSave\">\r\n <co-icon [iconData]=\"iconCache.getIcon(icon.Download)\"></co-icon>\r\n </button>\r\n </mat-nav-list>\r\n</div>\r\n", styles: [":host .mat-dialog-content{margin:0;padding:0;overflow:hidden}:host .mat-nav-list{display:flex;flex-direction:column}:host .mat-nav-list .mat-list-item:not(:last-child){margin-bottom:30px}:host .download-button{box-shadow:none;background-color:#3760a1;display:flex;align-items:center;justify-content:center;align-self:flex-end}:host .download-button ::ng-deep co-icon [fill]{fill:#fff}.mat-dialog-actions{margin-bottom:0}.item-description{white-space:inherit!important}\n"], components: [{ type: i8.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { type: i8.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: i9.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: i10.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }], directives: [{ type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i11.MatLine, selector: "[mat-line], [matLine]" }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": i13.LocalizePipe } });
136
+ SaveDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: SaveDialogComponent, selector: "rp-save-dialog", ngImport: i0, template: "<h1 mat-dialog-title>{{'SAVE_THE_PLAN' | localize}}</h1>\r\n<div mat-dialog-content class=\"dialog-wrapper\" cdkTrapFocus>\r\n <mat-nav-list>\r\n <mat-list-item (click)=\"saveToCloud()\">\r\n <h4 mat-line><strong>{{'SAVE_TO_CLOUD' | localize}}</strong></h4>\r\n <p mat-line class=\"item-description\">{{'ACCESS_THE_PLAN_USING_A_UNIQUE_CODE' | localize}}</p>\r\n </mat-list-item>\r\n <mat-list-item *ngIf=\"wasPlanSaved\" (click)=\"saveToCloud(true)\">\r\n <h4 mat-line><strong>{{'SAVE_AS_NEW' | localize}}</strong></h4>\r\n <p mat-line class=\"item-description\">{{'CREATE_A_COPY_OF_THE_PLAN' | localize}}</p>\r\n </mat-list-item>\r\n <ng-container *ngIf=\"permanentStoreService.code || showLocalSave\">\r\n <button mat-mini-fab class=\"download-button\" (click)=\"download()\">\r\n <co-icon [iconData]=\"iconCache.getIcon(icon.Download)\"></co-icon>\r\n </button>\r\n </ng-container>\r\n </mat-nav-list>\r\n</div>\r\n", styles: [":host .mat-dialog-content{margin:0;padding:0;overflow:hidden}:host .mat-nav-list{display:flex;flex-direction:column}:host .mat-nav-list .mat-list-item:not(:last-child){margin-bottom:30px}:host .download-button{box-shadow:none;background-color:#3760a1;display:flex;align-items:center;justify-content:center;align-self:flex-end}:host .download-button ::ng-deep co-icon [fill]{fill:#fff}.mat-dialog-actions{margin-bottom:0}.item-description{white-space:inherit!important}\n"], components: [{ type: i8.MatNavList, selector: "mat-nav-list", inputs: ["disableRipple", "disabled"], exportAs: ["matNavList"] }, { type: i8.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["disableRipple", "disabled"], exportAs: ["matListItem"] }, { type: i9.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: i10.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }], directives: [{ type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i11.MatLine, selector: "[mat-line], [matLine]" }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "localize": i13.LocalizePipe } });
137
137
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SaveDialogComponent, decorators: [{
138
138
  type: Component,
139
139
  args: [{
@@ -145,4 +145,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
145
145
  type: Inject,
146
146
  args: [MAT_DIALOG_DATA]
147
147
  }] }, { type: i1.PermanentStoreService }, { type: i2.HomedecoratorIconCacheService }, { type: i3.MatDialog }, { type: i3.MatDialogRef }, { type: i4.MessageBusService }, { type: i5.PresetsService }, { type: i6.HomedecoratorDictionaryService }, { type: i7.HomedecoratorSettingsService }]; } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy90b29sYmFyL3NhdmUtZGlhbG9nL3NhdmUtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvdG9vbGJhci9zYXZlLWRpYWxvZy9zYXZlLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFPdEQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ25HLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUVqRSxPQUFPLEVBQUMsb0JBQW9CLEVBQWtCLE1BQU0sd0NBQXdDLENBQUM7QUFDN0YsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0scURBQXFELENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU96RixNQUFNLE9BQU8sbUJBQW1CO0lBSTlCLFlBQ2tDLElBQWdFLEVBQ3pGLHFCQUE0QyxFQUM1QyxTQUF3QyxFQUN2QyxPQUFrQixFQUNsQixVQUE2QyxFQUM3QyxlQUFrQyxFQUNsQyxlQUErQixFQUMvQixrQkFBa0QsRUFDbEQsZ0JBQThDO1FBUnRCLFNBQUksR0FBSixJQUFJLENBQTREO1FBQ3pGLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsY0FBUyxHQUFULFNBQVMsQ0FBK0I7UUFD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QUFJLEdBQUcsSUFBSSxJQUFJLENBQ25CLENBQUUsTUFBTSxDQUFFLEVBQ1YsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FDN0IsQ0FBQztZQUNGLE1BQU0sQ0FBQyxJQUFJLEVBQUUsYUFBYSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1RCxDQUFDO0tBQUE7SUFFTyxVQUFVLENBQUMsVUFBa0IsT0FBTztRQUMxQyxNQUFNLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7O2lIQWhIVSxtQkFBbUIsa0JBS3BCLGVBQWU7cUdBTGQsbUJBQW1CLHNEQ3RCaEMsODVCQWdCQTs0RkRNYSxtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsOEJBQThCLENBQUM7aUJBQzVDOzswQkFNSSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge01hdERpYWxvZywgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge3NhdmVBc30gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtQZXJtYW5lbnRTdG9yZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9wZXJtYW5lbnQtc3RvcmUuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWljb24tY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1kaWN0aW9uYXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Rvd25sb2FkRGlhbG9nQ29tcG9uZW50LCBEb3dubG9hZFR5cGV9IGZyb20gJy4uL2Rvd25sb2FkLWRpYWxvZy9kb3dubG9hZC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtQbHVnaW5JbnRlcmZhY2V9IGZyb20gJy4uLy4uL3BsdWdpbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1NhdmVkRGlhbG9nQ29tcG9uZW50LCBTYXZlZERpYWxvZ0RhdGF9IGZyb20gJy4uL3NhdmVkLWRpYWxvZy9zYXZlZC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtFcnJvckRpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Vycm9yLWRpYWxvZy9lcnJvci1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnAtc2F2ZS1kaWFsb2cnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zYXZlLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2F2ZS1kaWFsb2cuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2F2ZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGljb246IHR5cGVvZiBJY29uRW51bSA9IEljb25FbnVtO1xyXG4gIHB1YmxpYyBzaG93TG9jYWxTYXZlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHsgb3BlbkRvd25sb2FkRGlhbG9nOiBib29sZWFuLCBzYXZlT25PcGVuRGlhbG9nOiBib29sZWFuIH0sXHJcbiAgICBwdWJsaWMgcGVybWFuZW50U3RvcmVTZXJ2aWNlOiBQZXJtYW5lbnRTdG9yZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgaWNvbkNhY2hlOiBIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U2F2ZURpYWxvZ0NvbXBvbmVudD4sXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcmVzZXRzU2VydmljZTogUHJlc2V0c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWN0aW9uYXJ5U2VydmljZTogSG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNob3dMb2NhbFNhdmUgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5kZXZlbG9wbWVudCB8fCBwZXJtYW5lbnRTdG9yZVNlcnZpY2Uuc2hvd0xvY2FsU2F2ZTtcclxuICB9XHJcblxyXG4gIGdldCB3YXNQbGFuU2F2ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnBlcm1hbmVudFN0b3JlU2VydmljZS5jb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5vcGVuRG93bmxvYWREaWFsb2cpIHtcclxuICAgICAgdGhpcy5kb3dubG9hZCgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGEuc2F2ZU9uT3BlbkRpYWxvZykge1xyXG4gICAgICB0aGlzLnNhdmVUb0Nsb3VkKHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRvd25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICBjb25zdCBkb3dubG9hZERpYWxvZyA9IHRoaXMuX2RpYWxvZy5vcGVuKERvd25sb2FkRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnNDAwcHgnXHJcbiAgICB9KTtcclxuICAgIGRvd25sb2FkRGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKGFzeW5jICh0eXBlOiBEb3dubG9hZFR5cGUpID0+IHtcclxuICAgICAgaWYgKHR5cGUgPT09IERvd25sb2FkVHlwZS5Eb3dubG9hZCkge1xyXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkRmlsZSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IERvd25sb2FkVHlwZS5Eb3dubG9hZE5ldykge1xyXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkRmlsZSh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2F2ZVRvQ2xvdWQoYXNOZXcgPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNob3dMb2FkaW5nSW5kaWNhdG9yLCB7dGl0bGU6ICdTYXZpbmcuLi4nfSk7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9wcmVzZXRzU2VydmljZS5wbHVnaW5zLm1hcChcclxuICAgICAgICBhc3luYyAocGx1Z2luOiBQbHVnaW5JbnRlcmZhY2UpID0+IGF3YWl0IHBsdWdpbi5jb3B5U2NlbmVJbnN0YW5jZShhc05ldylcclxuICAgICAgKSk7XHJcbiAgICAgIGxldCBzY2hlbWEgPSB0aGlzLl9wcmVzZXRzU2VydmljZS5jcmVhdGVTdGF0ZSgpO1xyXG4gICAgICBpZiAoc2NoZW1hLmxlbmd0aCA+IHRoaXMucGVybWFuZW50U3RvcmVTZXJ2aWNlLm1heFNjaGVtYVNpemUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0Vycm9yKFxyXG4gICAgICAgICAgJ1lvdXIgcHJvamVjdCBoYXMgZ290dGVuIHRvbyBsYXJnZSB0byBiZSBzdG9yZWQgaW4gdGhlIGNsb3VkLiBQbGVhc2Ugc2VsZWN0IFwiRG93bmxvYWQgYSBjb3B5XCIgdG8gc3RvcmUgeW91ciBwcm9qZWN0IGxvY2FsbHkuJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlUHJlc2V0KTtcclxuICAgICAgY29uc3QganNvblBhcnNlZCA9IEpTT04ucGFyc2Uoc2NoZW1hKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBqc29uUGFyc2VkLmZ1cm5pdHVyZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChqc29uUGFyc2VkLmZ1cm5pdHVyZVtpXS5lbGV2YXRpb25GaXhlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmVsZXZhdGlvbkZpeGVkID0gdHJ1ZTtcclxuICAgICAgICAgIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmZpeGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGpzb25QYXJzZWQuZnVybml0dXJlW2ldICYmIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3MgJiYganNvblBhcnNlZC5mdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncykge1xyXG4gICAgICAgICAganNvblBhcnNlZC5mdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncy5wYXNzd29yZCA9ICcnO1xyXG4gICAgICAgICAganNvblBhcnNlZC5mdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncy51c2VybmFtZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBzY2hlbWEgPSBKU09OLnN0cmluZ2lmeShqc29uUGFyc2VkKTtcclxuICAgICAgY29uc3Qgc3ViID0gdGhpcy5wZXJtYW5lbnRTdG9yZVNlcnZpY2Uuc2F2ZShzY2hlbWEsIGFzTmV3KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgY29kZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhOiBTYXZlZERpYWxvZ0RhdGEgPSB7Y29kZX07XHJcbiAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xhc3RQbGFuSWQnLCBjb2RlKTtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxvYWRpbmdJbmRpY2F0b3IpO1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nLmNsb3NlQWxsKCk7XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2cub3BlbihTYXZlZERpYWxvZ0NvbXBvbmVudCwge2RhdGF9KTtcclxuICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb2NjdXJlZCB3aGlsZSBzYXZpbmcgdGhlIHBsYW4nLCBlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLl9zaG93RXJyb3IoJ0Vycm9yIG9jY3VyZWQgd2hpbGUgc2F2aW5nIHRoZSBwbGFuLiBQbGVhc2UgY2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4gbGF0ZXIuJyk7XHJcbiAgICAgICAgICB0aGlzLnBlcm1hbmVudFN0b3JlU2VydmljZS5zaG93TG9jYWxTYXZlID0gdHJ1ZTtcclxuICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb2NjdXJlZCB3aGlsZSBzYXZpbmcgdGhlIHBsYW4nLCBlKTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTG9hZGluZ0luZGljYXRvcik7XHJcbiAgICAgIHRoaXMuX2RpYWxvZy5jbG9zZUFsbCgpO1xyXG4gICAgICB0aGlzLl9zaG93RXJyb3IoJ0Vycm9yIG9jY3VyZWQgd2hpbGUgc2F2aW5nIHRoZSBwbGFuLiBQbGVhc2UgY2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4gbGF0ZXIuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9kb3dubG9hZEZpbGUoYXNOZXc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fcHJlc2V0c1NlcnZpY2UucGx1Z2lucy5tYXAoXHJcbiAgICAgIGFzeW5jIChwbHVnaW46IFBsdWdpbkludGVyZmFjZSkgPT4gYXdhaXQgcGx1Z2luLmNvcHlTY2VuZUluc3RhbmNlKGFzTmV3KVxyXG4gICAgKSk7XHJcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLl9wcmVzZXRzU2VydmljZS5jcmVhdGVTdGF0ZSgpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlUHJlc2V0KTtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgY29uc3QgZmlsZSA9IG5ldyBCbG9iKFxyXG4gICAgICBbIHNjaGVtYSBdLFxyXG4gICAgICB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9XHJcbiAgICApO1xyXG4gICAgc2F2ZUFzKGZpbGUsIGBNeVJvb21wbGFuJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9Lm1ycGApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd0Vycm9yKG1lc3NhZ2U6IHN0cmluZyA9ICdFcnJvcicpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRhdGEgPSB7IG1lc3NhZ2U6IHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldChtZXNzYWdlKSB9O1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTG9hZGluZ0luZGljYXRvcik7XHJcbiAgICB0aGlzLl9kaWFsb2cub3BlbihFcnJvckRpYWxvZ0NvbXBvbmVudCwgeyBkYXRhIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8aDEgbWF0LWRpYWxvZy10aXRsZT57eydTQVZFX1RIRV9QTEFOJyB8IGxvY2FsaXplfX08L2gxPlxyXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cImRpYWxvZy13cmFwcGVyXCIgY2RrVHJhcEZvY3VzPlxyXG4gIDxtYXQtbmF2LWxpc3Q+XHJcbiAgICA8bWF0LWxpc3QtaXRlbSAoY2xpY2spPVwic2F2ZVRvQ2xvdWQoKVwiPlxyXG4gICAgICA8aDQgbWF0LWxpbmU+PHN0cm9uZz57eydTQVZFX1RPX0NMT1VEJyB8IGxvY2FsaXplfX08L3N0cm9uZz48L2g0PlxyXG4gICAgICA8cCBtYXQtbGluZSBjbGFzcz1cIml0ZW0tZGVzY3JpcHRpb25cIj57eydBQ0NFU1NfVEhFX1BMQU5fVVNJTkdfQV9VTklRVUVfQ09ERScgfCBsb2NhbGl6ZX19PC9wPlxyXG4gICAgPC9tYXQtbGlzdC1pdGVtPlxyXG4gICAgPG1hdC1saXN0LWl0ZW0gKm5nSWY9XCJ3YXNQbGFuU2F2ZWRcIiAoY2xpY2spPVwic2F2ZVRvQ2xvdWQodHJ1ZSlcIj5cclxuICAgICAgPGg0IG1hdC1saW5lPjxzdHJvbmc+e3snU0FWRV9BU19ORVcnIHwgbG9jYWxpemV9fTwvc3Ryb25nPjwvaDQ+XHJcbiAgICAgIDxwIG1hdC1saW5lIGNsYXNzPVwiaXRlbS1kZXNjcmlwdGlvblwiPnt7J0NSRUFURV9BX0NPUFlfT0ZfVEhFX1BMQU4nIHwgbG9jYWxpemV9fTwvcD5cclxuICAgIDwvbWF0LWxpc3QtaXRlbT5cclxuICAgIDxidXR0b24gbWF0LW1pbmktZmFiIGNsYXNzPVwiZG93bmxvYWQtYnV0dG9uXCIgKGNsaWNrKT1cImRvd25sb2FkKClcIiAqbmdJZj1cInBlcm1hbmVudFN0b3JlU2VydmljZS5jb2RlIHx8IHNob3dMb2NhbFNhdmVcIj5cclxuICAgICAgPGNvLWljb24gW2ljb25EYXRhXT1cImljb25DYWNoZS5nZXRJY29uKGljb24uRG93bmxvYWQpXCI+PC9jby1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9tYXQtbmF2LWxpc3Q+XHJcbjwvZGl2PlxyXG4iXX0=
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZS1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy90b29sYmFyL3NhdmUtZGlhbG9nL3NhdmUtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvdG9vbGJhci9zYXZlLWRpYWxvZy9zYXZlLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBUyxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFPdEQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFlBQVksRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQ25HLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUVqRSxPQUFPLEVBQUMsb0JBQW9CLEVBQWtCLE1BQU0sd0NBQXdDLENBQUM7QUFDN0YsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0scURBQXFELENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU96RixNQUFNLE9BQU8sbUJBQW1CO0lBSTlCLFlBQ2tDLElBQWdFLEVBQ3pGLHFCQUE0QyxFQUM1QyxTQUF3QyxFQUN2QyxPQUFrQixFQUNsQixVQUE2QyxFQUM3QyxlQUFrQyxFQUNsQyxlQUErQixFQUMvQixrQkFBa0QsRUFDbEQsZ0JBQThDO1FBUnRCLFNBQUksR0FBSixJQUFJLENBQTREO1FBQ3pGLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsY0FBUyxHQUFULFNBQVMsQ0FBK0I7UUFD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QUFJLEdBQUcsSUFBSSxJQUFJLENBQ25CLENBQUUsTUFBTSxDQUFFLEVBQ1YsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FDN0IsQ0FBQztZQUNGLE1BQU0sQ0FBQyxJQUFJLEVBQUUsYUFBYSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1RCxDQUFDO0tBQUE7SUFFTyxVQUFVLENBQUMsVUFBa0IsT0FBTztRQUMxQyxNQUFNLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7O2lIQWhIVSxtQkFBbUIsa0JBS3BCLGVBQWU7cUdBTGQsbUJBQW1CLHNEQ3RCaEMsaTlCQWtCQTs0RkRJYSxtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsV0FBVyxFQUFFLDhCQUE4QjtvQkFDM0MsU0FBUyxFQUFFLENBQUMsOEJBQThCLENBQUM7aUJBQzVDOzswQkFNSSxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge01hdERpYWxvZywgTWF0RGlhbG9nUmVmfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge3NhdmVBc30gZnJvbSAnZmlsZS1zYXZlcic7XHJcbmltcG9ydCB7TUFUX0RJQUxPR19EQVRBfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQge0ljb25FbnVtfSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vaWNvbi5lbnVtJztcclxuaW1wb3J0IHtQZXJtYW5lbnRTdG9yZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9wZXJtYW5lbnQtc3RvcmUuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckljb25DYWNoZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLWljb24tY2FjaGUuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmVzZXRzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL3ByZXNldHMuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1kaWN0aW9uYXJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Rvd25sb2FkRGlhbG9nQ29tcG9uZW50LCBEb3dubG9hZFR5cGV9IGZyb20gJy4uL2Rvd25sb2FkLWRpYWxvZy9kb3dubG9hZC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtQbHVnaW5JbnRlcmZhY2V9IGZyb20gJy4uLy4uL3BsdWdpbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQge1NhdmVkRGlhbG9nQ29tcG9uZW50LCBTYXZlZERpYWxvZ0RhdGF9IGZyb20gJy4uL3NhdmVkLWRpYWxvZy9zYXZlZC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtFcnJvckRpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Vycm9yLWRpYWxvZy9lcnJvci1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncnAtc2F2ZS1kaWFsb2cnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zYXZlLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2F2ZS1kaWFsb2cuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2F2ZURpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgcHVibGljIHJlYWRvbmx5IGljb246IHR5cGVvZiBJY29uRW51bSA9IEljb25FbnVtO1xyXG4gIHB1YmxpYyBzaG93TG9jYWxTYXZlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHsgb3BlbkRvd25sb2FkRGlhbG9nOiBib29sZWFuLCBzYXZlT25PcGVuRGlhbG9nOiBib29sZWFuIH0sXHJcbiAgICBwdWJsaWMgcGVybWFuZW50U3RvcmVTZXJ2aWNlOiBQZXJtYW5lbnRTdG9yZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgaWNvbkNhY2hlOiBIb21lZGVjb3JhdG9ySWNvbkNhY2hlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2RpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHJpdmF0ZSBfZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U2F2ZURpYWxvZ0NvbXBvbmVudD4sXHJcbiAgICBwcml2YXRlIF9tZXNzYWdlU2VydmljZTogTWVzc2FnZUJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wcmVzZXRzU2VydmljZTogUHJlc2V0c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kaWN0aW9uYXJ5U2VydmljZTogSG9tZWRlY29yYXRvckRpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNob3dMb2NhbFNhdmUgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5kZXZlbG9wbWVudCB8fCBwZXJtYW5lbnRTdG9yZVNlcnZpY2Uuc2hvd0xvY2FsU2F2ZTtcclxuICB9XHJcblxyXG4gIGdldCB3YXNQbGFuU2F2ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnBlcm1hbmVudFN0b3JlU2VydmljZS5jb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5vcGVuRG93bmxvYWREaWFsb2cpIHtcclxuICAgICAgdGhpcy5kb3dubG9hZCgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGEuc2F2ZU9uT3BlbkRpYWxvZykge1xyXG4gICAgICB0aGlzLnNhdmVUb0Nsb3VkKHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRvd25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICBjb25zdCBkb3dubG9hZERpYWxvZyA9IHRoaXMuX2RpYWxvZy5vcGVuKERvd25sb2FkRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnNDAwcHgnXHJcbiAgICB9KTtcclxuICAgIGRvd25sb2FkRGlhbG9nLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKGFzeW5jICh0eXBlOiBEb3dubG9hZFR5cGUpID0+IHtcclxuICAgICAgaWYgKHR5cGUgPT09IERvd25sb2FkVHlwZS5Eb3dubG9hZCkge1xyXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkRmlsZSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IERvd25sb2FkVHlwZS5Eb3dubG9hZE5ldykge1xyXG4gICAgICAgIHRoaXMuX2Rvd25sb2FkRmlsZSh0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgc2F2ZVRvQ2xvdWQoYXNOZXcgPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICB0aGlzLl9tZXNzYWdlU2VydmljZS5lbWl0KE1lc3NhZ2VUeXBlLlNob3dMb2FkaW5nSW5kaWNhdG9yLCB7dGl0bGU6ICdTYXZpbmcuLi4nfSk7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzLl9wcmVzZXRzU2VydmljZS5wbHVnaW5zLm1hcChcclxuICAgICAgICBhc3luYyAocGx1Z2luOiBQbHVnaW5JbnRlcmZhY2UpID0+IGF3YWl0IHBsdWdpbi5jb3B5U2NlbmVJbnN0YW5jZShhc05ldylcclxuICAgICAgKSk7XHJcbiAgICAgIGxldCBzY2hlbWEgPSB0aGlzLl9wcmVzZXRzU2VydmljZS5jcmVhdGVTdGF0ZSgpO1xyXG4gICAgICBpZiAoc2NoZW1hLmxlbmd0aCA+IHRoaXMucGVybWFuZW50U3RvcmVTZXJ2aWNlLm1heFNjaGVtYVNpemUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2hvd0Vycm9yKFxyXG4gICAgICAgICAgJ1lvdXIgcHJvamVjdCBoYXMgZ290dGVuIHRvbyBsYXJnZSB0byBiZSBzdG9yZWQgaW4gdGhlIGNsb3VkLiBQbGVhc2Ugc2VsZWN0IFwiRG93bmxvYWQgYSBjb3B5XCIgdG8gc3RvcmUgeW91ciBwcm9qZWN0IGxvY2FsbHkuJ1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlUHJlc2V0KTtcclxuICAgICAgY29uc3QganNvblBhcnNlZCA9IEpTT04ucGFyc2Uoc2NoZW1hKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBqc29uUGFyc2VkLmZ1cm5pdHVyZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChqc29uUGFyc2VkLmZ1cm5pdHVyZVtpXS5lbGV2YXRpb25GaXhlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmVsZXZhdGlvbkZpeGVkID0gdHJ1ZTtcclxuICAgICAgICAgIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmZpeGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGpzb25QYXJzZWQuZnVybml0dXJlW2ldICYmIGpzb25QYXJzZWQuZnVybml0dXJlW2ldLmV4dGVybmFsU2V0dGluZ3MgJiYganNvblBhcnNlZC5mdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncykge1xyXG4gICAgICAgICAganNvblBhcnNlZC5mdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncy5wYXNzd29yZCA9ICcnO1xyXG4gICAgICAgICAganNvblBhcnNlZC5mdXJuaXR1cmVbaV0uZXh0ZXJuYWxTZXR0aW5ncy5zZXR0aW5ncy51c2VybmFtZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBzY2hlbWEgPSBKU09OLnN0cmluZ2lmeShqc29uUGFyc2VkKTtcclxuICAgICAgY29uc3Qgc3ViID0gdGhpcy5wZXJtYW5lbnRTdG9yZVNlcnZpY2Uuc2F2ZShzY2hlbWEsIGFzTmV3KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgY29kZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhOiBTYXZlZERpYWxvZ0RhdGEgPSB7Y29kZX07XHJcbiAgICAgICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2xhc3RQbGFuSWQnLCBjb2RlKTtcclxuICAgICAgICAgIHRoaXMuX21lc3NhZ2VTZXJ2aWNlLmVtaXQoTWVzc2FnZVR5cGUuSGlkZUxvYWRpbmdJbmRpY2F0b3IpO1xyXG4gICAgICAgICAgdGhpcy5fZGlhbG9nLmNsb3NlQWxsKCk7XHJcbiAgICAgICAgICB0aGlzLl9kaWFsb2cub3BlbihTYXZlZERpYWxvZ0NvbXBvbmVudCwge2RhdGF9KTtcclxuICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb2NjdXJlZCB3aGlsZSBzYXZpbmcgdGhlIHBsYW4nLCBlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLl9zaG93RXJyb3IoJ0Vycm9yIG9jY3VyZWQgd2hpbGUgc2F2aW5nIHRoZSBwbGFuLiBQbGVhc2UgY2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4gbGF0ZXIuJyk7XHJcbiAgICAgICAgICB0aGlzLnBlcm1hbmVudFN0b3JlU2VydmljZS5zaG93TG9jYWxTYXZlID0gdHJ1ZTtcclxuICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb2NjdXJlZCB3aGlsZSBzYXZpbmcgdGhlIHBsYW4nLCBlKTtcclxuICAgICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTG9hZGluZ0luZGljYXRvcik7XHJcbiAgICAgIHRoaXMuX2RpYWxvZy5jbG9zZUFsbCgpO1xyXG4gICAgICB0aGlzLl9zaG93RXJyb3IoJ0Vycm9yIG9jY3VyZWQgd2hpbGUgc2F2aW5nIHRoZSBwbGFuLiBQbGVhc2UgY2hlY2sgeW91ciBjb25uZWN0aW9uIGFuZCB0cnkgYWdhaW4gbGF0ZXIuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9kb3dubG9hZEZpbGUoYXNOZXc6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5fcHJlc2V0c1NlcnZpY2UucGx1Z2lucy5tYXAoXHJcbiAgICAgIGFzeW5jIChwbHVnaW46IFBsdWdpbkludGVyZmFjZSkgPT4gYXdhaXQgcGx1Z2luLmNvcHlTY2VuZUluc3RhbmNlKGFzTmV3KVxyXG4gICAgKSk7XHJcbiAgICBjb25zdCBzY2hlbWEgPSB0aGlzLl9wcmVzZXRzU2VydmljZS5jcmVhdGVTdGF0ZSgpO1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5TYXZlUHJlc2V0KTtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgY29uc3QgZmlsZSA9IG5ldyBCbG9iKFxyXG4gICAgICBbIHNjaGVtYSBdLFxyXG4gICAgICB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9XHJcbiAgICApO1xyXG4gICAgc2F2ZUFzKGZpbGUsIGBNeVJvb21wbGFuJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9Lm1ycGApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd0Vycm9yKG1lc3NhZ2U6IHN0cmluZyA9ICdFcnJvcicpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRhdGEgPSB7IG1lc3NhZ2U6IHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldChtZXNzYWdlKSB9O1xyXG4gICAgdGhpcy5fbWVzc2FnZVNlcnZpY2UuZW1pdChNZXNzYWdlVHlwZS5IaWRlTG9hZGluZ0luZGljYXRvcik7XHJcbiAgICB0aGlzLl9kaWFsb2cub3BlbihFcnJvckRpYWxvZ0NvbXBvbmVudCwgeyBkYXRhIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8aDEgbWF0LWRpYWxvZy10aXRsZT57eydTQVZFX1RIRV9QTEFOJyB8IGxvY2FsaXplfX08L2gxPlxyXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cImRpYWxvZy13cmFwcGVyXCIgY2RrVHJhcEZvY3VzPlxyXG4gIDxtYXQtbmF2LWxpc3Q+XHJcbiAgICA8bWF0LWxpc3QtaXRlbSAoY2xpY2spPVwic2F2ZVRvQ2xvdWQoKVwiPlxyXG4gICAgICA8aDQgbWF0LWxpbmU+PHN0cm9uZz57eydTQVZFX1RPX0NMT1VEJyB8IGxvY2FsaXplfX08L3N0cm9uZz48L2g0PlxyXG4gICAgICA8cCBtYXQtbGluZSBjbGFzcz1cIml0ZW0tZGVzY3JpcHRpb25cIj57eydBQ0NFU1NfVEhFX1BMQU5fVVNJTkdfQV9VTklRVUVfQ09ERScgfCBsb2NhbGl6ZX19PC9wPlxyXG4gICAgPC9tYXQtbGlzdC1pdGVtPlxyXG4gICAgPG1hdC1saXN0LWl0ZW0gKm5nSWY9XCJ3YXNQbGFuU2F2ZWRcIiAoY2xpY2spPVwic2F2ZVRvQ2xvdWQodHJ1ZSlcIj5cclxuICAgICAgPGg0IG1hdC1saW5lPjxzdHJvbmc+e3snU0FWRV9BU19ORVcnIHwgbG9jYWxpemV9fTwvc3Ryb25nPjwvaDQ+XHJcbiAgICAgIDxwIG1hdC1saW5lIGNsYXNzPVwiaXRlbS1kZXNjcmlwdGlvblwiPnt7J0NSRUFURV9BX0NPUFlfT0ZfVEhFX1BMQU4nIHwgbG9jYWxpemV9fTwvcD5cclxuICAgIDwvbWF0LWxpc3QtaXRlbT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwZXJtYW5lbnRTdG9yZVNlcnZpY2UuY29kZSB8fCBzaG93TG9jYWxTYXZlXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LW1pbmktZmFiIGNsYXNzPVwiZG93bmxvYWQtYnV0dG9uXCIgKGNsaWNrKT1cImRvd25sb2FkKClcIj5cclxuICAgICAgICA8Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlLmdldEljb24oaWNvbi5Eb3dubG9hZClcIj48L2NvLWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9tYXQtbmF2LWxpc3Q+XHJcbjwvZGl2PlxyXG4iXX0=