@worktile/theia 16.3.2 → 16.3.4

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 (43) hide show
  1. package/editor.module.d.ts +1 -1
  2. package/esm2022/components/contextmenu/contextmenu.component.mjs +1 -1
  3. package/esm2022/plugins/code/code.component.mjs +8 -8
  4. package/esm2022/plugins/code/code.editor.mjs +18 -7
  5. package/esm2022/plugins/color/toolbar-item.component.mjs +1 -1
  6. package/esm2022/plugins/image/image.component.mjs +5 -8
  7. package/esm2022/plugins/image/image.editor.mjs +19 -4
  8. package/esm2022/plugins/image/image.plugin.mjs +3 -3
  9. package/esm2022/plugins/link/edit/link-edit.component.mjs +4 -15
  10. package/esm2022/plugins/link/link.component.mjs +4 -4
  11. package/esm2022/plugins/link/link.editor.mjs +21 -4
  12. package/esm2022/plugins/link/link.plugin.mjs +3 -3
  13. package/esm2022/plugins/public-api.mjs +2 -1
  14. package/esm2022/plugins/table/components/table.component.mjs +3 -2
  15. package/esm2022/plugins/table/components/toolbar/table-options.component.mjs +3 -3
  16. package/esm2022/plugins/table/components/toolbar/table-toolbar.component.mjs +7 -17
  17. package/esm2022/plugins/table/table.editor.mjs +101 -17
  18. package/esm2022/plugins/table/table.plugin.mjs +2 -2
  19. package/esm2022/plugins/table/table.store.mjs +1 -25
  20. package/esm2022/plugins/table/utils/remove-row-column.mjs +3 -4
  21. package/esm2022/services/table-contextmenu.service.mjs +6 -8
  22. package/esm2022/transforms/delete-node-by-type.mjs +10 -0
  23. package/esm2022/transforms/index.mjs +4 -2
  24. package/esm2022/transforms/set-node-by-type.mjs +10 -0
  25. package/esm2022/utils/copy-node.mjs +5 -2
  26. package/fesm2022/worktile-theia.mjs +347 -275
  27. package/fesm2022/worktile-theia.mjs.map +1 -1
  28. package/package.json +1 -1
  29. package/plugins/code/code.editor.d.ts +2 -3
  30. package/plugins/image/image.component.d.ts +1 -4
  31. package/plugins/image/image.editor.d.ts +4 -7
  32. package/plugins/link/edit/link-edit.component.d.ts +3 -2
  33. package/plugins/link/link.editor.d.ts +3 -1
  34. package/plugins/public-api.d.ts +1 -0
  35. package/plugins/table/table.editor.d.ts +13 -6
  36. package/plugins/table/table.store.d.ts +0 -3
  37. package/transforms/delete-node-by-type.d.ts +3 -0
  38. package/transforms/index.d.ts +3 -1
  39. package/transforms/set-node-by-type.d.ts +3 -0
  40. package/esm2022/plugins/table/utils/set-cells-background-color.mjs +0 -22
  41. package/esm2022/plugins/table/utils/set-node-options.mjs +0 -11
  42. package/plugins/table/utils/set-cells-background-color.d.ts +0 -3
  43. package/plugins/table/utils/set-node-options.d.ts +0 -3
@@ -2,17 +2,14 @@ import { Component, Input } from '@angular/core';
2
2
  import { getPluginOptions } from '../../../../core';
3
3
  import { PluginKeys, TheEditor } from '../../../../interfaces';
4
4
  import * as TheQueries from '../../../../queries';
5
- import * as TheTransforms from '../../../../transforms';
6
5
  import { copyNode } from '../../../../utils';
7
6
  import { createTablePosition } from '../../utils/create-table-position';
8
7
  import { isRectangularInTableCells } from '../../utils/is-selection-in-table';
9
- import { mergeCell } from '../../utils/merge-cell';
10
8
  import { removeColumnOrRows } from '../../utils/remove-row-column';
11
- import { setSelectedCellsBackgroundColor } from '../../utils/set-cells-background-color';
12
9
  import { setCellMenuVisibility } from '../../utils/set-menu-cell-invisibility';
13
- import { splitCell } from '../../utils/split-cell';
14
10
  import { getSelectedCell } from '../../utils/table-entry';
15
11
  import { TheTableOptionsComponent } from './table-options.component';
12
+ import { TableEditor } from '../../table.editor';
16
13
  import * as i0 from "@angular/core";
17
14
  import * as i1 from "ngx-tethys/popover";
18
15
  import * as i2 from "ngx-tethys/notify";
@@ -45,7 +42,7 @@ export class TheTableToolbarComponent {
45
42
  visibility: false,
46
43
  icon: 'table-merge-cells',
47
44
  actionHandle: () => {
48
- mergeCell(this.editor, this.tableStore.getSelectedCellPositions());
45
+ TableEditor.mergeCell(this.editor);
49
46
  this.popoverRef.close();
50
47
  this.tableStore.clearSelectedCells();
51
48
  }
@@ -56,7 +53,7 @@ export class TheTableToolbarComponent {
56
53
  visibility: false,
57
54
  icon: 'table-unmerge-cells',
58
55
  actionHandle: () => {
59
- splitCell(this.editor);
56
+ TableEditor.splitCell(this.editor);
60
57
  this.popoverRef.close();
61
58
  this.tableStore.clearSelectedCells();
62
59
  }
@@ -123,7 +120,7 @@ export class TheTableToolbarComponent {
123
120
  e.stopPropagation();
124
121
  }
125
122
  changeColor(newColor) {
126
- setSelectedCellsBackgroundColor(this.editor, newColor, this.tableStore);
123
+ TableEditor.setCellsBackgroundColor(this.editor, newColor);
127
124
  this.selectedColor = newColor;
128
125
  }
129
126
  setFullscreen(event) {
@@ -140,14 +137,7 @@ export class TheTableToolbarComponent {
140
137
  }
141
138
  setEquallyColumnHandle(event) {
142
139
  this.preventDefault(event);
143
- const columns = this.tableElement.columns;
144
- const sumWidth = columns.reduce((previousValue, currentValue) => {
145
- return previousValue + currentValue.width;
146
- }, 0);
147
- const equalColumns = columns.map(() => {
148
- return { width: sumWidth / columns.length };
149
- });
150
- TheTransforms.setNode(this.editor, { columns: equalColumns }, this.tableElement);
140
+ TableEditor.setEquallyColumn(this.editor);
151
141
  }
152
142
  openTableOptionMenu(event) {
153
143
  this.preventDefault(event);
@@ -167,7 +157,7 @@ export class TheTableToolbarComponent {
167
157
  });
168
158
  }
169
159
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: TheTableToolbarComponent, deps: [{ token: i1.ThyPopover }, { token: i1.ThyPopoverRef }, { token: i2.ThyNotifyService }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
170
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: TheTableToolbarComponent, selector: "the-table-toolbar", inputs: { tableStore: "tableStore", tableElement: "tableElement" }, ngImport: i0, template: "<thy-actions thySize=\"xxs\" (mousedown)=\"preventDefault($event)\">\n <ng-container *ngFor=\"let item of cellMenuList\">\n <a\n *ngIf=\"item.visibility\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"item.icon\"\n [thyTooltip]=\"item.name\"\n (click)=\"item.actionHandle()\"\n ></a>\n </ng-container>\n <thy-divider *ngIf=\"hasDivider\" class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"> </thy-divider>\n <a\n href=\"javascript:;\"\n thyAction\n thyTooltip=\"\u5355\u5143\u683C\u80CC\u666F\"\n thyColorPicker\n [(ngModel)]=\"selectedColor\"\n (ngModelChange)=\"changeColor($event)\"\n (click)=\"openColorPanel($event)\"\n thyPlacement=\"bottomLeft\"\n [thyHasBackdrop]=\"false\"\n >\n <thy-icon thyIconName=\"background-tt\" thyIconType=\"twotone\" [thyTwotoneColor]=\"selectedColor\"></thy-icon>\n </a>\n <a\n href=\"javascript:;\"\n *ngIf=\"tableStore.isSelectedTable && !isColumnEqual\"\n thyAction\n thyTooltip=\"\u5217\u7B49\u5BBD\"\n (click)=\"setEquallyColumnHandle($event)\"\n >\n <thy-icon thyIconName=\"table-column-equal-width\"></thy-icon>\n </a>\n <a\n href=\"javascript:;\"\n *ngIf=\"tableStore.isSelectedTable && tableOptions?.showFullscreen\"\n thyAction\n thyTooltip=\"\u5168\u5C4F\"\n (click)=\"setFullscreen($event)\"\n >\n <thy-icon thyIconName=\"arrows-alt\"></thy-icon>\n </a>\n <a\n *ngIf=\"tableStore.isSelectedTable && !tableStore?.isFullscreen\"\n class=\"fullscreen-hidden\"\n href=\"javascript:;\"\n thyAction\n thyActionIcon=\"copy\"\n thyTooltip=\"\u590D\u5236\"\n (click)=\"onCopy($event)\"\n ></a>\n <ng-container *ngIf=\"tableStore.isSelectedTable\">\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n <a href=\"javascript:;\" class=\"link-with-down\" thyAction (mousedown)=\"preventDefault($event)\" (click)=\"openTableOptionMenu($event)\">\n <span>\u8868\u683C\u9009\u9879</span>\n <thy-icon class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n </ng-container>\n <ng-container *ngIf=\"tableStore?.isFullscreen ? deleteIcon && !tableStore.isSelectedTable : deleteIcon\">\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n <a\n href=\"javascript:;\"\n thyAction\n thyType=\"danger\"\n [thyActionIcon]=\"deleteIcon\"\n [thyTooltip]=\"iconName\"\n (click)=\"onDelete($event)\"\n (mouseenter)=\"onEnterDelete($event)\"\n (mouseleave)=\"onLeaveDelete($event)\"\n ></a>\n </ng-container>\n</thy-actions>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ThyIconComponent, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: i6.ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: i7.ThyActionComponent, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "component", type: i7.ThyActionsComponent, selector: "thy-actions", inputs: ["thySize"] }, { kind: "component", type: i8.ThyDividerComponent, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "directive", type: i9.ThyColorPickerDirective, selector: "[thyColorPicker]", inputs: ["thyOffset", "thyHasBackdrop", "thyDefaultColor", "thyTransparentColorSelectable", "thyPresetColors", "thyPlacement", "thyTrigger", "thyShowDelay", "thyHideDelay"], outputs: ["thyPanelOpen", "thyPanelClose"] }] }); }
160
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.4", type: TheTableToolbarComponent, selector: "the-table-toolbar", inputs: { tableStore: "tableStore", tableElement: "tableElement" }, ngImport: i0, template: "<thy-actions thySize=\"xxs\" (mousedown)=\"preventDefault($event)\">\n <ng-container *ngFor=\"let item of cellMenuList\">\n <a\n *ngIf=\"item.visibility\"\n href=\"javascript:;\"\n thyAction\n [thyActionIcon]=\"item.icon\"\n [thyTooltip]=\"item.name\"\n (click)=\"item.actionHandle()\"\n ></a>\n </ng-container>\n <thy-divider *ngIf=\"hasDivider\" class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"> </thy-divider>\n <a\n href=\"javascript:;\"\n thyAction\n thyTooltip=\"\u5355\u5143\u683C\u80CC\u666F\"\n thyColorPicker\n [(ngModel)]=\"selectedColor\"\n (ngModelChange)=\"changeColor($event)\"\n (click)=\"openColorPanel($event)\"\n thyPlacement=\"bottomLeft\"\n [thyHasBackdrop]=\"false\"\n >\n <thy-icon thyIconName=\"background-tt\" thyIconType=\"twotone\" [thyTwotoneColor]=\"selectedColor\"></thy-icon>\n </a>\n <a\n href=\"javascript:;\"\n *ngIf=\"tableStore.isSelectedTable && !isColumnEqual\"\n thyAction\n thyTooltip=\"\u5217\u7B49\u5BBD\"\n (click)=\"setEquallyColumnHandle($event)\"\n >\n <thy-icon thyIconName=\"table-column-equal-width\"></thy-icon>\n </a>\n <a\n href=\"javascript:;\"\n *ngIf=\"tableStore.isSelectedTable && tableOptions?.showFullscreen\"\n thyAction\n thyTooltip=\"\u5168\u5C4F\"\n (click)=\"setFullscreen($event)\"\n >\n <thy-icon thyIconName=\"arrows-alt\"></thy-icon>\n </a>\n <a\n *ngIf=\"tableStore.isSelectedTable && !tableStore?.isFullscreen\"\n class=\"fullscreen-hidden\"\n href=\"javascript:;\"\n thyAction\n thyActionIcon=\"copy\"\n thyTooltip=\"\u590D\u5236\"\n (click)=\"onCopy($event)\"\n ></a>\n <ng-container *ngIf=\"tableStore.isSelectedTable\">\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n <a href=\"javascript:;\" class=\"link-with-down\" thyAction (mousedown)=\"preventDefault($event)\" (click)=\"openTableOptionMenu($event)\">\n <span>\u8868\u683C\u9009\u9879</span>\n <thy-icon class=\"font-size-sm text-desc ml-1\" thyIconName=\"caret-down\"></thy-icon>\n </a>\n </ng-container>\n <ng-container *ngIf=\"tableStore?.isFullscreen ? deleteIcon && !tableStore.isSelectedTable : deleteIcon\">\n <thy-divider class=\"mr-2 ml-1 align-self-center\" [thyVertical]=\"true\" thyColor=\"light\"></thy-divider>\n <a\n href=\"javascript:;\"\n thyAction\n thyType=\"danger\"\n [thyActionIcon]=\"deleteIcon\"\n [thyTooltip]=\"iconName\"\n (click)=\"onDelete($event)\"\n (mouseenter)=\"onEnterDelete($event)\"\n (mouseleave)=\"onLeaveDelete($event)\"\n ></a>\n </ng-container>\n</thy-actions>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ThyIconComponent, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: i6.ThyTooltipDirective, selector: "[thyTooltip],[thy-tooltip]", inputs: ["thyTooltip", "thyTooltipPlacement", "thyTooltipClass", "thyTooltipShowDelay", "thyTooltipHideDelay", "thyTooltipTrigger", "thyTooltipDisabled", "thyTooltipTemplateContext", "thyTooltipOffset", "thyTooltipPin"], exportAs: ["thyTooltip"] }, { kind: "component", type: i7.ThyActionComponent, selector: "thy-action, [thyAction]", inputs: ["thyType", "thyIcon", "thyActionIcon", "thyActive", "thyActionActive", "thyTheme", "thyHoverIcon", "thyDisabled"] }, { kind: "component", type: i7.ThyActionsComponent, selector: "thy-actions", inputs: ["thySize"] }, { kind: "component", type: i8.ThyDividerComponent, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }, { kind: "directive", type: i9.ThyColorPickerDirective, selector: "[thyColorPicker]", inputs: ["thyOffset", "thyHasBackdrop", "thyDefaultColor", "thyTransparentColorSelectable", "thyPresetColors", "thyPlacement", "thyTrigger", "thyShowDelay", "thyHideDelay", "thyDisabled"], outputs: ["thyPanelOpen", "thyPanelClose"] }] }); }
171
161
  }
172
162
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.4", ngImport: i0, type: TheTableToolbarComponent, decorators: [{
173
163
  type: Component,
@@ -183,4 +173,4 @@ export var DeleteIcon;
183
173
  DeleteIcon["table-delete-columns"] = "table-delete-columns";
184
174
  DeleteIcon["trash"] = "trash";
185
175
  })(DeleteIcon || (DeleteIcon = {}));
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3Rvb2xiYXIvdGFibGUtdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3Rvb2xiYXIvdGFibGUtdG9vbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFNdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxhQUFhLE1BQU0sd0JBQXdCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUN6RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxN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Qy9DLDZCQUFpQixDQUFBO0FBQ3JCLENBQUMsRUFKVyxVQUFVLEtBQVYsVUFBVSxRQUlyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHlOb3RpZnlTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9ub3RpZnknO1xuaW1wb3J0IHsgVGh5UG9wb3ZlciwgVGh5UG9wb3ZlclJlZiB9IGZyb20gJ25neC10ZXRoeXMvcG9wb3Zlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IFRhYmxlRWxlbWVudCB9IGZyb20gJy4uLy4uLy4uLy4uLy9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgZ2V0UGx1Z2luT3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUGx1Z2luS2V5cywgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgKiBhcyBUaGVRdWVyaWVzIGZyb20gJy4uLy4uLy4uLy4uL3F1ZXJpZXMnO1xuaW1wb3J0ICogYXMgVGhlVHJhbnNmb3JtcyBmcm9tICcuLi8uLi8uLi8uLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGNvcHlOb2RlIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgVGFibGVTdG9yZSB9IGZyb20gJy4uLy4uL3RhYmxlLnN0b3JlJztcbmltcG9ydCB7IE1lbnVFbnRpdHkgfSBmcm9tICcuLi8uLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVUYWJsZVBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMvY3JlYXRlLXRhYmxlLXBvc2l0aW9uJztcbmltcG9ydCB7IGlzUmVjdGFuZ3VsYXJJblRhYmxlQ2VsbHMgfSBmcm9tICcuLi8uLi91dGlscy9pcy1zZWxlY3Rpb24taW4tdGFibGUnO1xuaW1wb3J0IHsgbWVyZ2VDZWxsIH0gZnJvbSAnLi4vLi4vdXRpbHMvbWVyZ2UtY2VsbCc7XG5pbXBvcnQgeyByZW1vdmVDb2x1bW5PclJvd3MgfSBmcm9tICcuLi8uLi91dGlscy9yZW1vdmUtcm93LWNvbHVtbic7XG5pbXBvcnQgeyBzZXRTZWxlY3RlZENlbGxzQmFja2dyb3VuZENvbG9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2V0LWNlbGxzLWJhY2tncm91bmQtY29sb3InO1xuaW1wb3J0IHsgc2V0Q2VsbE1lbnVWaXNpYmlsaXR5IH0gZnJvbSAnLi4vLi4vdXRpbHMvc2V0LW1lbnUtY2VsbC1pbnZpc2liaWxpdHknO1xuaW1wb3J0IHsgc3BsaXRDZWxsIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3BsaXQtY2VsbCc7XG5pbXBvcnQgeyBnZXRTZWxlY3RlZENlbGwgfSBmcm9tICcuLi8uLi91dGlscy90YWJsZS1lbnRyeSc7XG5pbXBvcnQgeyBUaGVUYWJsZU9wdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLW9wdGlvbnMuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0aGUtdGFibGUtdG9vbGJhcicsXG4gICAgdGVtcGxhdGVVcmw6ICd0YWJsZS10b29sYmFyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUaGVUYWJsZVRvb2xiYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgc2VsZWN0ZWRDb2xvcjogc3RyaW5nO1xuXG4gICAgZGVsZXRlSWNvbjogRGVsZXRlSWNvbjtcblxuICAgIGljb25OYW1lOiBzdHJpbmc7XG5cbiAgICBpc1JlY3RhbmdsZTogYm9vbGVhbjtcblxuICAgIGlzQ29sdW1uRXF1YWw6IGJvb2xlYW47XG5cbiAgICB0YWJsZUNoYW5nZVN1YnNjcmliZXI6IFN1YnNjcmlwdGlvbjtcblxuICAgIEBJbnB1dCgpIHRhYmxlU3RvcmU6IFRhYmxlU3RvcmU7XG5cbiAgICBASW5wdXQoKSB0YWJsZUVsZW1lbnQ6IFRhYmxlRWxlbWVudDtcblxuICAgIGdldCBlZGl0b3IoKTogRWRpdG9yIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVTdG9yZSAmJiB0aGlzLnRhYmxlU3RvcmUuZWRpdG9yO1xuICAgIH1cblxuICAgIGNlbGxNZW51TGlzdDogTWVudUVudGl0eVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6ICdtZXJnZS1jZWxscycsXG4gICAgICAgICAgICBuYW1lOiAn5ZCI5bm25Y2V5YWD5qC8JyxcbiAgICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlLFxuICAgICAgICAgICAgaWNvbjogJ3RhYmxlLW1lcmdlLWNlbGxzJyxcbiAgICAgICAgICAgIGFjdGlvbkhhbmRsZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIG1lcmdlQ2VsbCh0aGlzLmVkaXRvciwgdGhpcy50YWJsZVN0b3JlLmdldFNlbGVjdGVkQ2VsbFBvc2l0aW9ucygpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RvcmUuY2xlYXJTZWxlY3RlZENlbGxzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogJ3NwbGl0LWNlbGxzJyxcbiAgICAgICAgICAgIG5hbWU6ICfmi4bliIbljZXlhYPmoLwnLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBpY29uOiAndGFibGUtdW5tZXJnZS1jZWxscycsXG4gICAgICAgICAgICBhY3Rpb25IYW5kbGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzcGxpdENlbGwodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdG9yZS5jbGVhclNlbGVjdGVkQ2VsbHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBnZXQgaGFzRGl2aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbE1lbnVMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0udmlzaWJpbGl0eSkubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICBnZXQgdGFibGVPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gZ2V0UGx1Z2luT3B0aW9ucyh0aGlzLmVkaXRvciwgUGx1Z2luS2V5cy50YWJsZSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgdGh5UG9wb3ZlcjogVGh5UG9wb3ZlcixcbiAgICAgICAgcHJpdmF0ZSBwb3BvdmVyUmVmOiBUaHlQb3BvdmVyUmVmPFRoZVRhYmxlVG9vbGJhckNvbXBvbmVudD4sXG4gICAgICAgIHByaXZhdGUgdGh5Tm90aWZ5U2VydmljZTogVGh5Tm90aWZ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaXNDb2x1bW5FcXVhbCA9IHRoaXMudGFibGVFbGVtZW50Py5jb2x1bW5zPy5ldmVyeShjb2wgPT4gdGhpcy50YWJsZUVsZW1lbnQuY29sdW1uc1swXS53aWR0aCA9PT0gY29sLndpZHRoKSA/PyB0cnVlO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxQb3NpdGlvbnMgPSB0aGlzLnRhYmxlU3RvcmUuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKCk7XG4gICAgICAgIGNvbnN0IHRhYmxlSW5mbyA9IHsgc2VsZWN0ZWRDZWxsUG9zaXRpb25zLCBpc1NlbGVjdGVkVGFibGU6IHRoaXMudGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGUgfTtcbiAgICAgICAgdGhpcy5pc1JlY3RhbmdsZSA9IGlzUmVjdGFuZ3VsYXJJblRhYmxlQ2VsbHModGhpcy5lZGl0b3IsIHNlbGVjdGVkQ2VsbFBvc2l0aW9ucyk7XG4gICAgICAgIHRoaXMuc2V0RGVsZXRlSWNvbigpO1xuICAgICAgICBzZXRDZWxsTWVudVZpc2liaWxpdHkodGhpcy5lZGl0b3IsIHRoaXMuY2VsbE1lbnVMaXN0LCB0YWJsZUluZm8pO1xuICAgICAgICBjb25zdCBjZWxsID0gZ2V0U2VsZWN0ZWRDZWxsKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbG9yID0gY2VsbCA/IGNlbGwuYmFja2dyb3VuZENvbG9yIDogJyc7XG5cbiAgICAgICAgY29uc3QgcGF0aCA9IFRoZUVkaXRvci5maW5kUGF0aCh0aGlzLmVkaXRvciwgdGhpcy50YWJsZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnRhYmxlQ2hhbmdlU3Vic2NyaWJlciA9IHRoaXMudGFibGVTdG9yZS50YWJsZUNoYW5nZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gKFRoZVF1ZXJpZXMuZ2V0Tm9kZSh0aGlzLmVkaXRvciwgcGF0aCkgYXMgVGFibGVFbGVtZW50KS5jb2x1bW5zO1xuICAgICAgICAgICAgdGhpcy5pc0NvbHVtbkVxdWFsID0gY29sdW1ucz8uZXZlcnkoY29sID0+IGNvbHVtbnNbMF0ud2lkdGggPT09IGNvbC53aWR0aCkgPz8gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudGFibGVDaGFuZ2VTdWJzY3JpYmVyPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHNldERlbGV0ZUljb24oKSB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dzSW5kZXgsIHNlbGVjdGVkQ29sdW1uc0luZGV4IH0gPSB0aGlzLnRhYmxlU3RvcmU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFBvc2l0aW9ucyA9IHRoaXMudGFibGVTdG9yZS5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKTtcbiAgICAgICAgY29uc3QgcG9zID0gY3JlYXRlVGFibGVQb3NpdGlvbih0aGlzLmVkaXRvcik7XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGVTdG9yZS5zZWxlY3RlZFJvd3NJbmRleC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUljb24gPSBEZWxldGVJY29uWyd0YWJsZS1kZWxldGUtcm93cyddO1xuICAgICAgICAgICAgdGhpcy5pY29uTmFtZSA9ICfliKDpmaTmlbTooYwnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhYmxlU3RvcmUuc2VsZWN0ZWRDb2x1bW5zSW5kZXgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVJY29uID0gRGVsZXRlSWNvblsndGFibGUtZGVsZXRlLWNvbHVtbnMnXTtcbiAgICAgICAgICAgIHRoaXMuaWNvbk5hbWUgPSAn5Yig6Zmk5pW05YiXJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWJsZVN0b3JlLmlzU2VsZWN0ZWRUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVJY29uID0gRGVsZXRlSWNvbi50cmFzaDtcbiAgICAgICAgICAgIHRoaXMuaWNvbk5hbWUgPSAn5Yig6Zmk6KGo5qC8JztcbiAgICAgICAgfVxuICAgICAgICAvLyDmu6HotrPlt7LpgInkuK3mlbTooYzmiJbogIXmlbTliJdcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZFdob2xlUm93T3JDb2x1bW5DZWxsID1cbiAgICAgICAgICAgIHNlbGVjdGVkUm93c0luZGV4Lmxlbmd0aCAqIHBvcy5nZXRXaWR0aCgpID09PSBzZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoIHx8XG4gICAgICAgICAgICBzZWxlY3RlZENvbHVtbnNJbmRleC5sZW5ndGggKiBwb3MuZ2V0SGVpZ2h0KCkgPT09IHNlbGVjdGVkQ2VsbFBvc2l0aW9ucy5sZW5ndGg7XG4gICAgICAgIGlmICghaXNTZWxlY3RlZFdob2xlUm93T3JDb2x1bW5DZWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUljb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5pY29uTmFtZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRlbGV0ZShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZW1vdmVDb2x1bW5PclJvd3ModGhpcy5lZGl0b3IsIHRoaXMudGFibGVTdG9yZSk7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZS5jbGVhckRhbmdlcm91c0NlbGxzKCk7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZS5jbGVhclNlbGVjdGVkQ2VsbHMoKTtcbiAgICAgICAgdGhpcy5wb3BvdmVyUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgb25FbnRlckRlbGV0ZShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLnRhYmxlU3RvcmUuc2V0RGFuZ2Vyb3VzQ2VsbHMoKTtcbiAgICB9XG5cbiAgICBvbkxlYXZlRGVsZXRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZS5jbGVhckRhbmdlcm91c0NlbGxzKCk7XG4gICAgfVxuXG4gICAgb3BlbkNvbG9yUGFuZWwoZTogTW91c2VFdmVudCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY2hhbmdlQ29sb3IobmV3Q29sb3I6IHN0cmluZykge1xuICAgICAgICBzZXRTZWxlY3RlZENlbGxzQmFja2dyb3VuZENvbG9yKHRoaXMuZWRpdG9yLCBuZXdDb2xvciwgdGhpcy50YWJsZVN0b3JlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbG9yID0gbmV3Q29sb3I7XG4gICAgfVxuXG4gICAgc2V0RnVsbHNjcmVlbihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLnBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy50YWJsZU9wdGlvbnMuc2V0RnVsbHNjcmVlbih0aGlzLmVkaXRvciwgZXZlbnQsIHRoaXMudGFibGVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBwcmV2ZW50RGVmYXVsdChldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBvbkNvcHkoZTogRXZlbnQpIHtcbiAgICAgICAgZT8ucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBjb3B5Tm9kZSh0aGlzLmVkaXRvciwgdGhpcy50YWJsZUVsZW1lbnQsIHRoaXMudGh5Tm90aWZ5U2VydmljZSk7XG4gICAgfVxuXG4gICAgc2V0RXF1YWxseUNvbHVtbkhhbmRsZShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLnByZXZlbnREZWZhdWx0KGV2ZW50KTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMudGFibGVFbGVtZW50LmNvbHVtbnM7XG4gICAgICAgIGNvbnN0IHN1bVdpZHRoID0gY29sdW1ucy5yZWR1Y2UoKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWUgKyBjdXJyZW50VmFsdWUud2lkdGg7XG4gICAgICAgIH0sIDApO1xuICAgICAgICBjb25zdCBlcXVhbENvbHVtbnMgPSBjb2x1bW5zLm1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyB3aWR0aDogc3VtV2lkdGggLyBjb2x1bW5zLmxlbmd0aCB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBUaGVUcmFuc2Zvcm1zLnNldE5vZGUodGhpcy5lZGl0b3IsIHsgY29sdW1uczogZXF1YWxDb2x1bW5zIH0sIHRoaXMudGFibGVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBvcGVuVGFibGVPcHRpb25NZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQoZXZlbnQpO1xuICAgICAgICB0aGlzLnRoeVBvcG92ZXIub3BlbihUaGVUYWJsZU9wdGlvbnNDb21wb25lbnQsIHtcbiAgICAgICAgICAgIG9yaWdpbjogZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgICAgIGVkaXRvcjogdGhpcy5lZGl0b3JcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgICAgIGluc2lkZUNsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgb3V0c2lkZUNsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tTGVmdCcsXG4gICAgICAgICAgICBvcmlnaW5BY3RpdmVDbGFzczogJ2FjdGl2ZScsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAndGFibGUtb3B0aW9ucy1wYW5lbCcsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWZcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBEZWxldGVJY29uIHtcbiAgICAndGFibGUtZGVsZXRlLXJvd3MnID0gJ3RhYmxlLWRlbGV0ZS1yb3dzJyxcbiAgICAndGFibGUtZGVsZXRlLWNvbHVtbnMnID0gJ3RhYmxlLWRlbGV0ZS1jb2x1bW5zJyxcbiAgICAndHJhc2gnID0gJ3RyYXNoJ1xufVxuIiwiPHRoeS1hY3Rpb25zIHRoeVNpemU9XCJ4eHNcIiAobW91c2Vkb3duKT1cInByZXZlbnREZWZhdWx0KCRldmVudClcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjZWxsTWVudUxpc3RcIj5cbiAgICA8YVxuICAgICAgKm5nSWY9XCJpdGVtLnZpc2liaWxpdHlcIlxuICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICB0aHlBY3Rpb25cbiAgICAgIFt0aHlBY3Rpb25JY29uXT1cIml0ZW0uaWNvblwiXG4gICAgICBbdGh5VG9vbHRpcF09XCJpdGVtLm5hbWVcIlxuICAgICAgKGNsaWNrKT1cIml0ZW0uYWN0aW9uSGFuZGxlKClcIlxuICAgID48L2E+XG4gIDwvbmctY29udGFpbmVyPlxuICA8dGh5LWRpdmlkZXIgKm5nSWY9XCJoYXNEaXZpZGVyXCIgY2xhc3M9XCJtci0yIG1sLTEgYWxpZ24tc2VsZi1jZW50ZXJcIiBbdGh5VmVydGljYWxdPVwidHJ1ZVwiIHRoeUNvbG9yPVwibGlnaHRcIj4gPC90aHktZGl2aWRlcj5cbiAgPGFcbiAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICB0aHlBY3Rpb25cbiAgICB0aHlUb29sdGlwPVwi5Y2V5YWD5qC86IOM5pmvXCJcbiAgICB0aHlDb2xvclBpY2tlclxuICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb2xvclwiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ29sb3IoJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cIm9wZW5Db2xvclBhbmVsKCRldmVudClcIlxuICAgIHRoeVBsYWNlbWVudD1cImJvdHRvbUxlZnRcIlxuICAgIFt0aHlIYXNCYWNrZHJvcF09XCJmYWxzZVwiXG4gID5cbiAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJiYWNrZ3JvdW5kLXR0XCIgdGh5SWNvblR5cGU9XCJ0d290b25lXCIgW3RoeVR3b3RvbmVDb2xvcl09XCJzZWxlY3RlZENvbG9yXCI+PC90aHktaWNvbj5cbiAgPC9hPlxuICA8YVxuICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICpuZ0lmPVwidGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGUgJiYgIWlzQ29sdW1uRXF1YWxcIlxuICAgIHRoeUFjdGlvblxuICAgIHRoeVRvb2x0aXA9XCLliJfnrYnlrr1cIlxuICAgIChjbGljayk9XCJzZXRFcXVhbGx5Q29sdW1uSGFuZGxlKCRldmVudClcIlxuICA+XG4gICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwidGFibGUtY29sdW1uLWVxdWFsLXdpZHRoXCI+PC90aHktaWNvbj5cbiAgPC9hPlxuICA8YVxuICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICpuZ0lmPVwidGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGUgJiYgdGFibGVPcHRpb25zPy5zaG93RnVsbHNjcmVlblwiXG4gICAgdGh5QWN0aW9uXG4gICAgdGh5VG9vbHRpcD1cIuWFqOWxj1wiXG4gICAgKGNsaWNrKT1cInNldEZ1bGxzY3JlZW4oJGV2ZW50KVwiXG4gID5cbiAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJhcnJvd3MtYWx0XCI+PC90aHktaWNvbj5cbiAgPC9hPlxuICA8YVxuICAgICpuZ0lmPVwidGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGUgJiYgIXRhYmxlU3RvcmU/LmlzRnVsbHNjcmVlblwiXG4gICAgY2xhc3M9XCJmdWxsc2NyZWVuLWhpZGRlblwiXG4gICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgdGh5QWN0aW9uXG4gICAgdGh5QWN0aW9uSWNvbj1cImNvcHlcIlxuICAgIHRoeVRvb2x0aXA9XCLlpI3liLZcIlxuICAgIChjbGljayk9XCJvbkNvcHkoJGV2ZW50KVwiXG4gID48L2E+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZVN0b3JlLmlzU2VsZWN0ZWRUYWJsZVwiPlxuICAgIDx0aHktZGl2aWRlciBjbGFzcz1cIm1yLTIgbWwtMSBhbGlnbi1zZWxmLWNlbnRlclwiIFt0aHlWZXJ0aWNhbF09XCJ0cnVlXCIgdGh5Q29sb3I9XCJsaWdodFwiPjwvdGh5LWRpdmlkZXI+XG4gICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwibGluay13aXRoLWRvd25cIiB0aHlBY3Rpb24gKG1vdXNlZG93bik9XCJwcmV2ZW50RGVmYXVsdCgkZXZlbnQpXCIgKGNsaWNrKT1cIm9wZW5UYWJsZU9wdGlvbk1lbnUoJGV2ZW50KVwiPlxuICAgICAgPHNwYW4+6KGo5qC86YCJ6aG5PC9zcGFuPlxuICAgICAgPHRoeS1pY29uIGNsYXNzPVwiZm9udC1zaXplLXNtIHRleHQtZGVzYyBtbC0xXCIgdGh5SWNvbk5hbWU9XCJjYXJldC1kb3duXCI+PC90aHktaWNvbj5cbiAgICA8L2E+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGVTdG9yZT8uaXNGdWxsc2NyZWVuID8gZGVsZXRlSWNvbiAmJiAhdGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGUgOiBkZWxldGVJY29uXCI+XG4gICAgPHRoeS1kaXZpZGVyIGNsYXNzPVwibXItMiBtbC0xIGFsaWduLXNlbGYtY2VudGVyXCIgW3RoeVZlcnRpY2FsXT1cInRydWVcIiB0aHlDb2xvcj1cImxpZ2h0XCI+PC90aHktZGl2aWRlcj5cbiAgICA8YVxuICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICB0aHlBY3Rpb25cbiAgICAgIHRoeVR5cGU9XCJkYW5nZXJcIlxuICAgICAgW3RoeUFjdGlvbkljb25dPVwiZGVsZXRlSWNvblwiXG4gICAgICBbdGh5VG9vbHRpcF09XCJpY29uTmFtZVwiXG4gICAgICAoY2xpY2spPVwib25EZWxldGUoJGV2ZW50KVwiXG4gICAgICAobW91c2VlbnRlcik9XCJvbkVudGVyRGVsZXRlKCRldmVudClcIlxuICAgICAgKG1vdXNlbGVhdmUpPVwib25MZWF2ZURlbGV0ZSgkZXZlbnQpXCJcbiAgICA+PC9hPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvdGh5LWFjdGlvbnM+XG4iXX0=
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3Rvb2xiYXIvdGFibGUtdG9vbGJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3Rvb2xiYXIvdGFibGUtdG9vbGJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFNdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEtBQUssVUFBVSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUc3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7Ozs7OztBQU1qRCxNQUFNLE9BQU8sd0JBQXdCO0lBaUJqQyxJQUFJLE1BQU07UUFDTixPQUFPLElBQUks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QWUsRUFBRSxJQUFJO1lBQ3JCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLFNBQVMsRUFBRSxZQUFZO1lBQ3ZCLGlCQUFpQixFQUFFLFFBQVE7WUFDM0IsVUFBVSxFQUFFLHFCQUFxQjtZQUNqQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1NBQzFDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBNUtRLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDZIQ3hCckMsb3JGQXlFQTs7MkZEakRhLHdCQUF3QjtrQkFKcEMsU0FBUzsrQkFDSSxtQkFBbUI7MkxBZ0JwQixVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7O0FBZ0tWLE1BQU0sQ0FBTixJQUFZLFVBSVg7QUFKRCxXQUFZLFVBQVU7SUFDbEIscURBQXlDLENBQUE7SUFDekMsMkRBQStDLENBQUE7SUFDL0MsNkJBQWlCLENBQUE7QUFDckIsQ0FBQyxFQUpXLFVBQVUsS0FBVixVQUFVLFFBSXJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoeU5vdGlmeVNlcnZpY2UgfSBmcm9tICduZ3gtdGV0aHlzL25vdGlmeSc7XG5pbXBvcnQgeyBUaHlQb3BvdmVyLCBUaHlQb3BvdmVyUmVmIH0gZnJvbSAnbmd4LXRldGh5cy9wb3BvdmVyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRWRpdG9yIH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgVGFibGVFbGVtZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vL2N1c3RvbS10eXBlcyc7XG5pbXBvcnQgeyBnZXRQbHVnaW5PcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBQbHVnaW5LZXlzLCBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCAqIGFzIFRoZVF1ZXJpZXMgZnJvbSAnLi4vLi4vLi4vLi4vcXVlcmllcyc7XG5pbXBvcnQgeyBjb3B5Tm9kZSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IFRhYmxlU3RvcmUgfSBmcm9tICcuLi8uLi90YWJsZS5zdG9yZSc7XG5pbXBvcnQgeyBNZW51RW50aXR5IH0gZnJvbSAnLi4vLi4vdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgY3JlYXRlVGFibGVQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzL2NyZWF0ZS10YWJsZS1wb3NpdGlvbic7XG5pbXBvcnQgeyBpc1JlY3Rhbmd1bGFySW5UYWJsZUNlbGxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvaXMtc2VsZWN0aW9uLWluLXRhYmxlJztcbmltcG9ydCB7IHJlbW92ZUNvbHVtbk9yUm93cyB9IGZyb20gJy4uLy4uL3V0aWxzL3JlbW92ZS1yb3ctY29sdW1uJztcbmltcG9ydCB7IHNldENlbGxNZW51VmlzaWJpbGl0eSB9IGZyb20gJy4uLy4uL3V0aWxzL3NldC1tZW51LWNlbGwtaW52aXNpYmlsaXR5JztcbmltcG9ydCB7IGdldFNlbGVjdGVkQ2VsbCB9IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxlLWVudHJ5JztcbmltcG9ydCB7IFRoZVRhYmxlT3B0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vdGFibGUtb3B0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVFZGl0b3IgfSBmcm9tICcuLi8uLi90YWJsZS5lZGl0b3InO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RoZS10YWJsZS10b29sYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3RhYmxlLXRvb2xiYXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRoZVRhYmxlVG9vbGJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBzZWxlY3RlZENvbG9yOiBzdHJpbmc7XG5cbiAgICBkZWxldGVJY29uOiBEZWxldGVJY29uO1xuXG4gICAgaWNvbk5hbWU6IHN0cmluZztcblxuICAgIGlzUmVjdGFuZ2xlOiBib29sZWFuO1xuXG4gICAgaXNDb2x1bW5FcXVhbDogYm9vbGVhbjtcblxuICAgIHRhYmxlQ2hhbmdlU3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uO1xuXG4gICAgQElucHV0KCkgdGFibGVTdG9yZTogVGFibGVTdG9yZTtcblxuICAgIEBJbnB1dCgpIHRhYmxlRWxlbWVudDogVGFibGVFbGVtZW50O1xuXG4gICAgZ2V0IGVkaXRvcigpOiBFZGl0b3Ige1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZVN0b3JlICYmIHRoaXMudGFibGVTdG9yZS5lZGl0b3I7XG4gICAgfVxuXG4gICAgY2VsbE1lbnVMaXN0OiBNZW51RW50aXR5W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogJ21lcmdlLWNlbGxzJyxcbiAgICAgICAgICAgIG5hbWU6ICflkIjlubbljZXlhYPmoLwnLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBpY29uOiAndGFibGUtbWVyZ2UtY2VsbHMnLFxuICAgICAgICAgICAgYWN0aW9uSGFuZGxlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgVGFibGVFZGl0b3IubWVyZ2VDZWxsKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RvcmUuY2xlYXJTZWxlY3RlZENlbGxzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGtleTogJ3NwbGl0LWNlbGxzJyxcbiAgICAgICAgICAgIG5hbWU6ICfmi4bliIbljZXlhYPmoLwnLFxuICAgICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2UsXG4gICAgICAgICAgICBpY29uOiAndGFibGUtdW5tZXJnZS1jZWxscycsXG4gICAgICAgICAgICBhY3Rpb25IYW5kbGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBUYWJsZUVkaXRvci5zcGxpdENlbGwodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdG9yZS5jbGVhclNlbGVjdGVkQ2VsbHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBnZXQgaGFzRGl2aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbE1lbnVMaXN0LmZpbHRlcihpdGVtID0+IGl0ZW0udmlzaWJpbGl0eSkubGVuZ3RoID4gMTtcbiAgICB9XG5cbiAgICBnZXQgdGFibGVPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gZ2V0UGx1Z2luT3B0aW9ucyh0aGlzLmVkaXRvciwgUGx1Z2luS2V5cy50YWJsZSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgdGh5UG9wb3ZlcjogVGh5UG9wb3ZlcixcbiAgICAgICAgcHJpdmF0ZSBwb3BvdmVyUmVmOiBUaHlQb3BvdmVyUmVmPFRoZVRhYmxlVG9vbGJhckNvbXBvbmVudD4sXG4gICAgICAgIHByaXZhdGUgdGh5Tm90aWZ5U2VydmljZTogVGh5Tm90aWZ5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaXNDb2x1bW5FcXVhbCA9IHRoaXMudGFibGVFbGVtZW50Py5jb2x1bW5zPy5ldmVyeShjb2wgPT4gdGhpcy50YWJsZUVsZW1lbnQuY29sdW1uc1swXS53aWR0aCA9PT0gY29sLndpZHRoKSA/PyB0cnVlO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxQb3NpdGlvbnMgPSB0aGlzLnRhYmxlU3RvcmUuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKCk7XG4gICAgICAgIGNvbnN0IHRhYmxlSW5mbyA9IHsgc2VsZWN0ZWRDZWxsUG9zaXRpb25zLCBpc1NlbGVjdGVkVGFibGU6IHRoaXMudGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGUgfTtcbiAgICAgICAgdGhpcy5pc1JlY3RhbmdsZSA9IGlzUmVjdGFuZ3VsYXJJblRhYmxlQ2VsbHModGhpcy5lZGl0b3IsIHNlbGVjdGVkQ2VsbFBvc2l0aW9ucyk7XG4gICAgICAgIHRoaXMuc2V0RGVsZXRlSWNvbigpO1xuICAgICAgICBzZXRDZWxsTWVudVZpc2liaWxpdHkodGhpcy5lZGl0b3IsIHRoaXMuY2VsbE1lbnVMaXN0LCB0YWJsZUluZm8pO1xuICAgICAgICBjb25zdCBjZWxsID0gZ2V0U2VsZWN0ZWRDZWxsKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvbG9yID0gY2VsbCA/IGNlbGwuYmFja2dyb3VuZENvbG9yIDogJyc7XG5cbiAgICAgICAgY29uc3QgcGF0aCA9IFRoZUVkaXRvci5maW5kUGF0aCh0aGlzLmVkaXRvciwgdGhpcy50YWJsZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnRhYmxlQ2hhbmdlU3Vic2NyaWJlciA9IHRoaXMudGFibGVTdG9yZS50YWJsZUNoYW5nZSgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gKFRoZVF1ZXJpZXMuZ2V0Tm9kZSh0aGlzLmVkaXRvciwgcGF0aCkgYXMgVGFibGVFbGVtZW50KS5jb2x1bW5zO1xuICAgICAgICAgICAgdGhpcy5pc0NvbHVtbkVxdWFsID0gY29sdW1ucz8uZXZlcnkoY29sID0+IGNvbHVtbnNbMF0ud2lkdGggPT09IGNvbC53aWR0aCkgPz8gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudGFibGVDaGFuZ2VTdWJzY3JpYmVyPy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHNldERlbGV0ZUljb24oKSB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dzSW5kZXgsIHNlbGVjdGVkQ29sdW1uc0luZGV4IH0gPSB0aGlzLnRhYmxlU3RvcmU7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFBvc2l0aW9ucyA9IHRoaXMudGFibGVTdG9yZS5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKTtcbiAgICAgICAgY29uc3QgcG9zID0gY3JlYXRlVGFibGVQb3NpdGlvbih0aGlzLmVkaXRvcik7XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGVTdG9yZS5zZWxlY3RlZFJvd3NJbmRleC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUljb24gPSBEZWxldGVJY29uWyd0YWJsZS1kZWxldGUtcm93cyddO1xuICAgICAgICAgICAgdGhpcy5pY29uTmFtZSA9ICfliKDpmaTmlbTooYwnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhYmxlU3RvcmUuc2VsZWN0ZWRDb2x1bW5zSW5kZXgubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVJY29uID0gRGVsZXRlSWNvblsndGFibGUtZGVsZXRlLWNvbHVtbnMnXTtcbiAgICAgICAgICAgIHRoaXMuaWNvbk5hbWUgPSAn5Yig6Zmk5pW05YiXJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWJsZVN0b3JlLmlzU2VsZWN0ZWRUYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5kZWxldGVJY29uID0gRGVsZXRlSWNvbi50cmFzaDtcbiAgICAgICAgICAgIHRoaXMuaWNvbk5hbWUgPSAn5Yig6Zmk6KGo5qC8JztcbiAgICAgICAgfVxuICAgICAgICAvLyDmu6HotrPlt7LpgInkuK3mlbTooYzmiJbogIXmlbTliJdcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZFdob2xlUm93T3JDb2x1bW5DZWxsID1cbiAgICAgICAgICAgIHNlbGVjdGVkUm93c0luZGV4Lmxlbmd0aCAqIHBvcy5nZXRXaWR0aCgpID09PSBzZWxlY3RlZENlbGxQb3NpdGlvbnMubGVuZ3RoIHx8XG4gICAgICAgICAgICBzZWxlY3RlZENvbHVtbnNJbmRleC5sZW5ndGggKiBwb3MuZ2V0SGVpZ2h0KCkgPT09IHNlbGVjdGVkQ2VsbFBvc2l0aW9ucy5sZW5ndGg7XG4gICAgICAgIGlmICghaXNTZWxlY3RlZFdob2xlUm93T3JDb2x1bW5DZWxsKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUljb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5pY29uTmFtZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRlbGV0ZShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZW1vdmVDb2x1bW5PclJvd3ModGhpcy5lZGl0b3IsIHRoaXMudGFibGVTdG9yZSk7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZS5jbGVhckRhbmdlcm91c0NlbGxzKCk7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZS5jbGVhclNlbGVjdGVkQ2VsbHMoKTtcbiAgICAgICAgdGhpcy5wb3BvdmVyUmVmLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgb25FbnRlckRlbGV0ZShldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICB0aGlzLnRhYmxlU3RvcmUuc2V0RGFuZ2Vyb3VzQ2VsbHMoKTtcbiAgICB9XG5cbiAgICBvbkxlYXZlRGVsZXRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZS5jbGVhckRhbmdlcm91c0NlbGxzKCk7XG4gICAgfVxuXG4gICAgb3BlbkNvbG9yUGFuZWwoZTogTW91c2VFdmVudCkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY2hhbmdlQ29sb3IobmV3Q29sb3I6IHN0cmluZykge1xuICAgICAgICBUYWJsZUVkaXRvci5zZXRDZWxsc0JhY2tncm91bmRDb2xvcih0aGlzLmVkaXRvciwgbmV3Q29sb3IpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29sb3IgPSBuZXdDb2xvcjtcbiAgICB9XG5cbiAgICBzZXRGdWxsc2NyZWVuKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMucG9wb3ZlclJlZi5jbG9zZSgpO1xuICAgICAgICB0aGlzLnRhYmxlT3B0aW9ucy5zZXRGdWxsc2NyZWVuKHRoaXMuZWRpdG9yLCBldmVudCwgdGhpcy50YWJsZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByZXZlbnREZWZhdWx0KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIG9uQ29weShlOiBFdmVudCkge1xuICAgICAgICBlPy5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvcHlOb2RlKHRoaXMuZWRpdG9yLCB0aGlzLnRhYmxlRWxlbWVudCwgdGhpcy50aHlOb3RpZnlTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBzZXRFcXVhbGx5Q29sdW1uSGFuZGxlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQoZXZlbnQpO1xuICAgICAgICBUYWJsZUVkaXRvci5zZXRFcXVhbGx5Q29sdW1uKHRoaXMuZWRpdG9yKTtcbiAgICB9XG5cbiAgICBvcGVuVGFibGVPcHRpb25NZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMucHJldmVudERlZmF1bHQoZXZlbnQpO1xuICAgICAgICB0aGlzLnRoeVBvcG92ZXIub3BlbihUaGVUYWJsZU9wdGlvbnNDb21wb25lbnQsIHtcbiAgICAgICAgICAgIG9yaWdpbjogZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgICAgICAgIGVkaXRvcjogdGhpcy5lZGl0b3JcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtaW5XaWR0aDogMCxcbiAgICAgICAgICAgIGluc2lkZUNsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgb3V0c2lkZUNsb3NhYmxlOiB0cnVlLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tTGVmdCcsXG4gICAgICAgICAgICBvcmlnaW5BY3RpdmVDbGFzczogJ2FjdGl2ZScsXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAndGFibGUtb3B0aW9ucy1wYW5lbCcsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWZcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBEZWxldGVJY29uIHtcbiAgICAndGFibGUtZGVsZXRlLXJvd3MnID0gJ3RhYmxlLWRlbGV0ZS1yb3dzJyxcbiAgICAndGFibGUtZGVsZXRlLWNvbHVtbnMnID0gJ3RhYmxlLWRlbGV0ZS1jb2x1bW5zJyxcbiAgICAndHJhc2gnID0gJ3RyYXNoJ1xufVxuIiwiPHRoeS1hY3Rpb25zIHRoeVNpemU9XCJ4eHNcIiAobW91c2Vkb3duKT1cInByZXZlbnREZWZhdWx0KCRldmVudClcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjZWxsTWVudUxpc3RcIj5cbiAgICA8YVxuICAgICAgKm5nSWY9XCJpdGVtLnZpc2liaWxpdHlcIlxuICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICB0aHlBY3Rpb25cbiAgICAgIFt0aHlBY3Rpb25JY29uXT1cIml0ZW0uaWNvblwiXG4gICAgICBbdGh5VG9vbHRpcF09XCJpdGVtLm5hbWVcIlxuICAgICAgKGNsaWNrKT1cIml0ZW0uYWN0aW9uSGFuZGxlKClcIlxuICAgID48L2E+XG4gIDwvbmctY29udGFpbmVyPlxuICA8dGh5LWRpdmlkZXIgKm5nSWY9XCJoYXNEaXZpZGVyXCIgY2xhc3M9XCJtci0yIG1sLTEgYWxpZ24tc2VsZi1jZW50ZXJcIiBbdGh5VmVydGljYWxdPVwidHJ1ZVwiIHRoeUNvbG9yPVwibGlnaHRcIj4gPC90aHktZGl2aWRlcj5cbiAgPGFcbiAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICB0aHlBY3Rpb25cbiAgICB0aHlUb29sdGlwPVwi5Y2V5YWD5qC86IOM5pmvXCJcbiAgICB0aHlDb2xvclBpY2tlclxuICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRDb2xvclwiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwiY2hhbmdlQ29sb3IoJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cIm9wZW5Db2xvclBhbmVsKCRldmVudClcIlxuICAgIHRoeVBsYWNlbWVudD1cImJvdHRvbUxlZnRcIlxuICAgIFt0aHlIYXNCYWNrZHJvcF09XCJmYWxzZVwiXG4gID5cbiAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJiYWNrZ3JvdW5kLXR0XCIgdGh5SWNvblR5cGU9XCJ0d290b25lXCIgW3RoeVR3b3RvbmVDb2xvcl09XCJzZWxlY3RlZENvbG9yXCI+PC90aHktaWNvbj5cbiAgPC9hPlxuICA8YVxuICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICpuZ0lmPVwidGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGUgJiYgIWlzQ29sdW1uRXF1YWxcIlxuICAgIHRoeUFjdGlvblxuICAgIHRoeVRvb2x0aXA9XCLliJfnrYnlrr1cIlxuICAgIChjbGljayk9XCJzZXRFcXVhbGx5Q29sdW1uSGFuZGxlKCRldmVudClcIlxuICA+XG4gICAgPHRoeS1pY29uIHRoeUljb25OYW1lPVwidGFibGUtY29sdW1uLWVxdWFsLXdpZHRoXCI+PC90aHktaWNvbj5cbiAgPC9hPlxuICA8YVxuICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICpuZ0lmPVwidGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGUgJiYgdGFibGVPcHRpb25zPy5zaG93RnVsbHNjcmVlblwiXG4gICAgdGh5QWN0aW9uXG4gICAgdGh5VG9vbHRpcD1cIuWFqOWxj1wiXG4gICAgKGNsaWNrKT1cInNldEZ1bGxzY3JlZW4oJGV2ZW50KVwiXG4gID5cbiAgICA8dGh5LWljb24gdGh5SWNvbk5hbWU9XCJhcnJvd3MtYWx0XCI+PC90aHktaWNvbj5cbiAgPC9hPlxuICA8YVxuICAgICpuZ0lmPVwidGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGUgJiYgIXRhYmxlU3RvcmU/LmlzRnVsbHNjcmVlblwiXG4gICAgY2xhc3M9XCJmdWxsc2NyZWVuLWhpZGRlblwiXG4gICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgdGh5QWN0aW9uXG4gICAgdGh5QWN0aW9uSWNvbj1cImNvcHlcIlxuICAgIHRoeVRvb2x0aXA9XCLlpI3liLZcIlxuICAgIChjbGljayk9XCJvbkNvcHkoJGV2ZW50KVwiXG4gID48L2E+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWJsZVN0b3JlLmlzU2VsZWN0ZWRUYWJsZVwiPlxuICAgIDx0aHktZGl2aWRlciBjbGFzcz1cIm1yLTIgbWwtMSBhbGlnbi1zZWxmLWNlbnRlclwiIFt0aHlWZXJ0aWNhbF09XCJ0cnVlXCIgdGh5Q29sb3I9XCJsaWdodFwiPjwvdGh5LWRpdmlkZXI+XG4gICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwibGluay13aXRoLWRvd25cIiB0aHlBY3Rpb24gKG1vdXNlZG93bik9XCJwcmV2ZW50RGVmYXVsdCgkZXZlbnQpXCIgKGNsaWNrKT1cIm9wZW5UYWJsZU9wdGlvbk1lbnUoJGV2ZW50KVwiPlxuICAgICAgPHNwYW4+6KGo5qC86YCJ6aG5PC9zcGFuPlxuICAgICAgPHRoeS1pY29uIGNsYXNzPVwiZm9udC1zaXplLXNtIHRleHQtZGVzYyBtbC0xXCIgdGh5SWNvbk5hbWU9XCJjYXJldC1kb3duXCI+PC90aHktaWNvbj5cbiAgICA8L2E+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFibGVTdG9yZT8uaXNGdWxsc2NyZWVuID8gZGVsZXRlSWNvbiAmJiAhdGFibGVTdG9yZS5pc1NlbGVjdGVkVGFibGUgOiBkZWxldGVJY29uXCI+XG4gICAgPHRoeS1kaXZpZGVyIGNsYXNzPVwibXItMiBtbC0xIGFsaWduLXNlbGYtY2VudGVyXCIgW3RoeVZlcnRpY2FsXT1cInRydWVcIiB0aHlDb2xvcj1cImxpZ2h0XCI+PC90aHktZGl2aWRlcj5cbiAgICA8YVxuICAgICAgaHJlZj1cImphdmFzY3JpcHQ6O1wiXG4gICAgICB0aHlBY3Rpb25cbiAgICAgIHRoeVR5cGU9XCJkYW5nZXJcIlxuICAgICAgW3RoeUFjdGlvbkljb25dPVwiZGVsZXRlSWNvblwiXG4gICAgICBbdGh5VG9vbHRpcF09XCJpY29uTmFtZVwiXG4gICAgICAoY2xpY2spPVwib25EZWxldGUoJGV2ZW50KVwiXG4gICAgICAobW91c2VlbnRlcik9XCJvbkVudGVyRGVsZXRlKCRldmVudClcIlxuICAgICAgKG1vdXNlbGVhdmUpPVwib25MZWF2ZURlbGV0ZSgkZXZlbnQpXCJcbiAgICA+PC9hPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvdGh5LWFjdGlvbnM+XG4iXX0=
@@ -1,7 +1,8 @@
1
1
  import { Editor, Element, Transforms, Text, Node } from 'slate';
2
2
  import { AngularEditor, ELEMENT_TO_COMPONENT } from 'slate-angular';
3
3
  import { TableOptions } from './table.types';
4
- import { ALIGN_BLOCK_TYPES, ElementKinds, MarkProps, VerticalAlignment } from '../../constants';
4
+ import { ALIGN_BLOCK_TYPES, ElementKinds, MarkProps, VerticalAlignment, TableHeaderBackgroundColor, SpecialBackgroundColor } from '../../constants';
5
+ import { TheEditor } from '../../interfaces';
5
6
  import { insertTable, insertColumn, insertRow, removeColumn, removeRow, removeTable } from './transforms';
6
7
  import { clearCell } from './transforms/clear-cell';
7
8
  import { getOriginCell } from './utils';
@@ -9,6 +10,10 @@ import * as TheTransforms from '../../transforms';
9
10
  import * as TheQueries from '../../queries';
10
11
  import { setCellIndent, sortCell } from './utils/handle-cell';
11
12
  import { createTablePosition } from './utils/create-table-position';
13
+ import { THE_EDITOR_PREVIOUS_SELECTION } from '../../utils/weak-maps';
14
+ import { splitCell } from './utils/split-cell';
15
+ import { getTablePath } from './utils/table-entry';
16
+ import { mergeCell } from './utils/merge-cell';
12
17
  export const TableEditor = {
13
18
  insertTable(editor, optionsParam) {
14
19
  const opts = new TableOptions(optionsParam);
@@ -38,11 +43,81 @@ export const TableEditor = {
38
43
  const opts = new TableOptions(optionsParam);
39
44
  clearCell(opts, editor, nodeEntry);
40
45
  },
46
+ setCellsBackgroundColor(editor, color, cells) {
47
+ if (!cells) {
48
+ cells = TableEditor.getSelectedCells(editor) || [];
49
+ }
50
+ if (cells.length) {
51
+ // 点击自定义颜色面板输入框设置颜色值时,会丢失焦点和选区(目前无法做到焦点同时存在于编辑器和输入框)
52
+ let location;
53
+ if (!editor.selection) {
54
+ const { rangeRef } = THE_EDITOR_PREVIOUS_SELECTION.get(editor);
55
+ location = rangeRef.current.anchor;
56
+ }
57
+ const isHeader = TableEditor.isActiveHeader(editor, location);
58
+ if (color === 'transparent' ||
59
+ (color === TableHeaderBackgroundColor && isHeader) ||
60
+ (color === SpecialBackgroundColor && !isHeader)) {
61
+ color = null;
62
+ }
63
+ Editor.withoutNormalizing(editor, () => {
64
+ cells.map(cell => {
65
+ const cellPath = AngularEditor.findPath(editor, cell);
66
+ Transforms.setNodes(editor, { backgroundColor: color }, { at: cellPath });
67
+ });
68
+ });
69
+ }
70
+ },
71
+ mergeCell(editor) {
72
+ const selectedCellsPosition = TableEditor.getSelectedCellPositions(editor);
73
+ selectedCellsPosition.length && mergeCell(editor, selectedCellsPosition);
74
+ },
75
+ splitCell(editor) {
76
+ splitCell(editor);
77
+ },
78
+ setTableOptions(editor, newOptions) {
79
+ const tablePosition = createTablePosition(editor);
80
+ const tablePath = getTablePath(editor);
81
+ const table = tablePosition.table;
82
+ const options = { ...table.options, ...newOptions };
83
+ Transforms.setNodes(editor, { options }, { at: tablePath });
84
+ },
85
+ setEquallyColumn(editor) {
86
+ const [tableEntry] = Editor.nodes(editor, { at: editor.selection, match: (n) => n.type === ElementKinds.table });
87
+ const tableElement = (tableEntry && tableEntry[0]);
88
+ if (tableElement) {
89
+ const columns = tableElement.columns;
90
+ const sumWidth = columns.reduce((previousValue, currentValue) => {
91
+ return previousValue + currentValue.width;
92
+ }, 0);
93
+ const equalColumns = columns.map(() => {
94
+ return { width: sumWidth / columns.length };
95
+ });
96
+ TheTransforms.setNode(editor, { columns: equalColumns }, tableElement);
97
+ }
98
+ },
99
+ clearCellsContent(editor, cells) {
100
+ if (!cells) {
101
+ cells = TableEditor.getSelectedCells(editor) || [];
102
+ }
103
+ if (cells.length > 0) {
104
+ const tablePosition = createTablePosition(editor);
105
+ if (tablePosition.isInTable()) {
106
+ Editor.withoutNormalizing(editor, () => {
107
+ cells.forEach(cell => {
108
+ const path = TheEditor.findPath(editor, cell);
109
+ TableEditor.clearCell(editor, [cell, path]);
110
+ });
111
+ });
112
+ Transforms.select(editor, Editor.start(editor, tablePosition.cellEntry[1]));
113
+ }
114
+ }
115
+ },
41
116
  isActive(editor) {
42
117
  const [table] = Editor.nodes(editor, { match: n => Element.isElement(n) && n.type === ElementKinds.table });
43
118
  return !!table;
44
119
  },
45
- getSelectedCells(editor) {
120
+ getSelectedCellPositions(editor) {
46
121
  const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table);
47
122
  if (tableNode) {
48
123
  const tableComponent = ELEMENT_TO_COMPONENT.get(tableNode[0]);
@@ -53,18 +128,27 @@ export const TableEditor = {
53
128
  }
54
129
  return null;
55
130
  },
56
- setAlign(editor, alignment) {
131
+ getSelectedCells(editor) {
132
+ const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table);
133
+ if (tableNode) {
134
+ const tableComponent = ELEMENT_TO_COMPONENT.get(tableNode[0]);
135
+ return tableComponent?.tableStore?.selectedCells || null;
136
+ }
137
+ return null;
138
+ },
139
+ setAlign(editor, alignment, cells) {
57
140
  return TableEditor.handleSelectedCells(editor, (_, cellRange) => {
58
141
  Transforms.setNodes(editor, { align: alignment }, {
59
142
  at: cellRange,
60
143
  match: (n) => ALIGN_BLOCK_TYPES.includes(n.type)
61
144
  });
62
- });
145
+ }, cells);
63
146
  },
64
- setVerticalAlign(editor, alignment) {
147
+ setVerticalAlign(editor, alignment, cells) {
65
148
  const isSelected = TableEditor.handleSelectedCells(editor, cellPath => {
66
149
  Transforms.setNodes(editor, { verticalAlign: alignment }, { at: cellPath });
67
- });
150
+ }, cells);
151
+ console.log(isSelected);
68
152
  if (!isSelected) {
69
153
  const cellEntry = TheQueries.getAboveByType(editor, ElementKinds.tableCell);
70
154
  if (cellEntry) {
@@ -80,7 +164,7 @@ export const TableEditor = {
80
164
  return true;
81
165
  },
82
166
  isVerticalAlignActive(editor, alignment) {
83
- const cells = TableEditor.getSelectedCells(editor);
167
+ const cells = TableEditor.getSelectedCellPositions(editor);
84
168
  if (cells) {
85
169
  const lastCell = cells[cells.length - 1];
86
170
  const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table);
@@ -136,17 +220,17 @@ export const TableEditor = {
136
220
  TheTransforms.setMarks(editor, marks, cellRange);
137
221
  });
138
222
  },
139
- handleSelectedCells(editor, handle) {
140
- const cells = TableEditor.getSelectedCells(editor);
223
+ handleSelectedCells(editor, handle, cells) {
224
+ if (!cells) {
225
+ cells = TableEditor.getSelectedCells(editor);
226
+ }
141
227
  if (cells) {
142
- const tableNode = TheQueries.getAboveByType(editor, ElementKinds.table);
143
228
  Editor.withoutNormalizing(editor, () => {
144
- for (const cell of cells) {
145
- const { row, col } = cell;
146
- const cellPath = [...tableNode[1], row, col];
229
+ cells.forEach(cell => {
230
+ const cellPath = TheEditor.findPath(editor, cell);
147
231
  const cellRange = { anchor: Editor.start(editor, cellPath), focus: Editor.end(editor, cellPath) };
148
232
  handle(cellPath, cellRange);
149
- }
233
+ });
150
234
  });
151
235
  return true;
152
236
  }
@@ -180,14 +264,14 @@ export const TableEditor = {
180
264
  match: n => Element.isElement(n) &&
181
265
  ((n.type === ElementKinds.tableRow && n.header) || (n.type === ElementKinds.table && n.options?.headerRow))
182
266
  });
183
- const selectedCells = TableEditor.getSelectedCells(editor) ?? [];
267
+ const selectedCells = TableEditor.getSelectedCellPositions(editor) ?? [];
184
268
  sortCell(selectedCells);
185
269
  const isContainHeaderRow = !!selectedCells && selectedCells[0].row === 0;
186
270
  return isHeaderRow && isContainHeaderRow;
187
271
  },
188
272
  hasHeaderColumnCell(editor) {
189
273
  const table = TheQueries.getAboveByType(editor, ElementKinds.table);
190
- const selectedCells = TableEditor.getSelectedCells(editor) ?? [];
274
+ const selectedCells = TableEditor.getSelectedCellPositions(editor) ?? [];
191
275
  sortCell(selectedCells);
192
276
  const isContainHeaderColumn = !!selectedCells && selectedCells[0].col === 0;
193
277
  const isHeaderColumn = table && table[0] && table[0]?.options?.headerColumn;
@@ -211,4 +295,4 @@ export const TableEditor = {
211
295
  });
212
296
  }
213
297
  };
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvdGFibGUuZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFhLFVBQVUsRUFBRSxJQUFJLEVBQWUsSUFBSSxFQUFtQixNQUFNLE9BQU8sQ0FBQztBQUN6RyxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFhLGlCQUFpQixFQUFFLFlBQVksRUFBVyxTQUFTLEVBQWEsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcvSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDeEMsT0FBTyxLQUFLLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRztJQUN2QixXQUFXLENBQUMsTUFBYyxFQUFFLFlBQTJCO1FBQ25ELE1BQU0sSUFBSSxHQUFHLElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENB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LCBFbGVtZW50LCBOb2RlRW50cnksIFRyYW5zZm9ybXMsIFRleHQsIFBhdGgsIFJhbmdlLCBOb2RlLCBMb2NhdGlvbiwgUG9pbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yLCBFTEVNRU5UX1RPX0NPTVBPTkVOVCB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgVGFibGVPcHRpb25zIH0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBBbGlnbm1lbnQsIEFMSUdOX0JMT0NLX1RZUEVTLCBFbGVtZW50S2luZHMsIEluZGVudHMsIE1hcmtQcm9wcywgTWFya1R5cGVzLCBWZXJ0aWNhbEFsaWdubWVudCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEN1c3RvbUVsZW1lbnQsIFRhYmxlQ2VsbEVsZW1lbnQsIFRhYmxlRWxlbWVudCB9IGZyb20gJy4uLy4uL2N1c3RvbS10eXBlcyc7XG5pbXBvcnQgeyBpbnNlcnRUYWJsZSwgaW5zZXJ0Q29sdW1uLCBpbnNlcnRSb3csIHJlbW92ZUNvbHVtbiwgcmVtb3ZlUm93LCByZW1vdmVUYWJsZSB9IGZyb20gJy4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBjbGVhckNlbGwgfSBmcm9tICcuL3RyYW5zZm9ybXMvY2xlYXItY2VsbCc7XG5pbXBvcnQgdHlwZSB7IFRoZVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBnZXRPcmlnaW5DZWxsIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgKiBhcyBUaGVUcmFuc2Zvcm1zIGZyb20gJy4uLy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0ICogYXMgVGhlUXVlcmllcyBmcm9tICcuLi8uLi9xdWVyaWVzJztcbmltcG9ydCB7IHNldENlbGxJbmRlbnQsIHNvcnRDZWxsIH0gZnJvbSAnLi91dGlscy9oYW5kbGUtY2VsbCc7XG5pbXBvcnQgeyBjcmVhdGVUYWJsZVBvc2l0aW9uIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtdGFibGUtcG9zaXRpb24nO1xuXG5leHBvcnQgY29uc3QgVGFibGVFZGl0b3IgPSB7XG4gICAgaW5zZXJ0VGFibGUoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICBpbnNlcnRUYWJsZShvcHRzLCBlZGl0b3IpO1xuICAgIH0sXG4gICAgaW5zZXJ0Q29sdW1uKGVkaXRvcjogRWRpdG9yLCBjb3VudDogbnVtYmVyID0gMSwgYXQ/OiBudW1iZXIsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICBpbnNlcnRDb2x1bW4ob3B0cywgZWRpdG9yLCBjb3VudCwgYXQpO1xuICAgIH0sXG4gICAgaW5zZXJ0Um93KGVkaXRvcjogRWRpdG9yLCBjb3VudDogbnVtYmVyID0gMSwgYXQ/OiBudW1iZXIsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICBpbnNlcnRSb3cob3B0cywgZWRpdG9yLCBjb3VudCwgYXQpO1xuICAgIH0sXG4gICAgcmVtb3ZlVGFibGUoZWRpdG9yOiBFZGl0b3IsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICByZW1vdmVUYWJsZShvcHRzLCBlZGl0b3IpO1xuICAgIH0sXG4gICAgcmVtb3ZlUm93KGVkaXRvcjogRWRpdG9yLCByb3dJbmRleD86IG51bWJlciwgb3B0aW9uc1BhcmFtPzogVGFibGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKG9wdGlvbnNQYXJhbSk7XG4gICAgICAgIHJlbW92ZVJvdyhvcHRzLCBlZGl0b3IsIHJvd0luZGV4KTtcbiAgICB9LFxuICAgIHJlbW92ZUNvbHVtbihlZGl0b3I6IEVkaXRvciwgY29sSW5kZXg/OiBudW1iZXIsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICByZW1vdmVDb2x1bW4ob3B0cywgZWRpdG9yLCBjb2xJbmRleCk7XG4gICAgfSxcbiAgICBjbGVhckNlbGwoZWRpdG9yOiBFZGl0b3IsIG5vZGVFbnRyeT86IE5vZGVFbnRyeTxFbGVtZW50Piwgb3B0aW9uc1BhcmFtPzogVGFibGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKG9wdGlvbnNQYXJhbSk7XG4gICAgICAgIGNsZWFyQ2VsbChvcHRzLCBlZGl0b3IsIG5vZGVFbnRyeSk7XG4gICAgfSxcbiAgICBpc0FjdGl2ZShlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICBjb25zdCBbdGFibGVdID0gRWRpdG9yLm5vZGVzKGVkaXRvciwgeyBtYXRjaDogbiA9PiBFbGVtZW50LmlzRWxlbWVudChuKSAmJiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSB9KTtcbiAgICAgICAgcmV0dXJuICEhdGFibGU7XG4gICAgfSxcbiAgICBnZXRTZWxlY3RlZENlbGxzKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGUpO1xuICAgICAgICBpZiAodGFibGVOb2RlKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZUNvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldCh0YWJsZU5vZGVbMF0pIGFzIFRoZVRhYmxlQ29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsUG9zaXRpb25zID0gdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKTtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2VsbFBvc2l0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbFBvc2l0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHNldEFsaWduKGVkaXRvcjogRWRpdG9yLCBhbGlnbm1lbnQ6IEFsaWdubWVudCkge1xuICAgICAgICByZXR1cm4gVGFibGVFZGl0b3IuaGFuZGxlU2VsZWN0ZWRDZWxscyhlZGl0b3IsIChfLCBjZWxsUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoXG4gICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgIHsgYWxpZ246IGFsaWdubWVudCB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYXQ6IGNlbGxSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBBTElHTl9CTE9DS19UWVBFUy5pbmNsdWRlcyhuLnR5cGUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBzZXRWZXJ0aWNhbEFsaWduKGVkaXRvcjogVGhlRWRpdG9yLCBhbGlnbm1lbnQ6IFZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgY2VsbFBhdGggPT4ge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhlZGl0b3IsIHsgdmVydGljYWxBbGlnbjogYWxpZ25tZW50IH0sIHsgYXQ6IGNlbGxQYXRoIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFpc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsRW50cnkgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLnRhYmxlQ2VsbCk7XG4gICAgICAgICAgICBpZiAoY2VsbEVudHJ5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgWywgY2VsbFBhdGhdID0gY2VsbEVudHJ5O1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgeyB2ZXJ0aWNhbEFsaWduOiBhbGlnbm1lbnQgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXQ6IGNlbGxQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZUNlbGxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBpc1ZlcnRpY2FsQWxpZ25BY3RpdmUoZWRpdG9yOiBUaGVFZGl0b3IsIGFsaWdubWVudDogVmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgY29uc3QgY2VsbHMgPSBUYWJsZUVkaXRvci5nZXRTZWxlY3RlZENlbGxzKGVkaXRvcik7XG4gICAgICAgIGlmIChjZWxscykge1xuICAgICAgICAgICAgY29uc3QgbGFzdENlbGwgPSBjZWxsc1tjZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGUpO1xuICAgICAgICAgICAgY29uc3QgY2VsbFBhdGggPSBbLi4udGFibGVOb2RlWzFdLCBsYXN0Q2VsbC5yb3csIGxhc3RDZWxsLmNvbF07XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gTm9kZS5nZXQoZWRpdG9yLCBjZWxsUGF0aCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHsgdmVydGljYWxBbGlnbiB9ID0gY2VsbDtcbiAgICAgICAgICAgIGlmICghdmVydGljYWxBbGlnbiAmJiBhbGlnbm1lbnQgPT09IFZlcnRpY2FsQWxpZ25tZW50LnRvcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2FsQWxpZ24gPT09IGFsaWdubWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxFbGVtZW50ID0gVGhlUXVlcmllcy5nZXRBYm92ZUJ5VHlwZShlZGl0b3IsIEVsZW1lbnRLaW5kcy50YWJsZUNlbGwpO1xuICAgICAgICAgICAgaWYgKGNlbGxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB2ZXJ0aWNhbEFsaWduIH0gPSBjZWxsRWxlbWVudFswXTtcbiAgICAgICAgICAgICAgICBpZiAoIXZlcnRpY2FsQWxpZ24gJiYgYWxpZ25tZW50ID09PSBWZXJ0aWNhbEFsaWdubWVudC50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEFsaWduID09PSBhbGlnbm1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICB0b2dnbGVNYXJrKGVkaXRvcjogVGhlRWRpdG9yLCBpc0FjdGl2ZTogYm9vbGVhbiwgZm9ybWF0OiBzdHJpbmcgfCBzdHJpbmdbXSwgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgYXQgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy51bnNldE5vZGVzKGVkaXRvciwgZm9ybWF0LCB7XG4gICAgICAgICAgICAgICAgICAgIGF0LFxuICAgICAgICAgICAgICAgICAgICBtYXRjaDogVGV4dC5pc1RleHQsXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgeyBbZm9ybWF0IGFzIHN0cmluZ106IHZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2g6IFRleHQuaXNUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgY2xlYXJNYXJrKGVkaXRvcjogVGhlRWRpdG9yKSB7XG4gICAgICAgIHJldHVybiBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgKGNlbGxQYXRoLCBjZWxsUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHVuc2V0TWFya3M6IHsgW2tleSBpbiBNYXJrVHlwZXNdPzogbnVsbCB8IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgICBNYXJrUHJvcHMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHVuc2V0TWFya3Nba2V5XSA9IG51bGw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFRoZVRyYW5zZm9ybXMuc2V0TWFya3MoZWRpdG9yLCB1bnNldE1hcmtzLCBjZWxsUmFuZ2UpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgZm9ybWF0QnJ1c2goZWRpdG9yOiBUaGVFZGl0b3IsIG1hcmtzOiB7IFtrZXkgaW4gTWFya1R5cGVzXT86IGFueSB9KSB7XG4gICAgICAgIHJldHVybiBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgKGNlbGxQYXRoLCBjZWxsUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIFRoZVRyYW5zZm9ybXMuc2V0TWFya3MoZWRpdG9yLCBtYXJrcywgY2VsbFJhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBoYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvcjogVGhlRWRpdG9yLCBoYW5kbGU6IChjZWxsUGF0aDogUGF0aCwgY2VsbFJhbmdlOiBSYW5nZSkgPT4gdm9pZCkge1xuICAgICAgICBjb25zdCBjZWxscyA9IFRhYmxlRWRpdG9yLmdldFNlbGVjdGVkQ2VsbHMoZWRpdG9yKTtcbiAgICAgICAgaWYgKGNlbGxzKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZU5vZGUgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLnRhYmxlKTtcbiAgICAgICAgICAgIEVkaXRvci53aXRob3V0Tm9ybWFsaXppbmcoZWRpdG9yLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjZWxsIG9mIGNlbGxzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgcm93LCBjb2wgfSA9IGNlbGw7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQYXRoID0gWy4uLnRhYmxlTm9kZVsxXSwgcm93LCBjb2xdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsUmFuZ2UgPSB7IGFuY2hvcjogRWRpdG9yLnN0YXJ0KGVkaXRvciwgY2VsbFBhdGgpLCBmb2N1czogRWRpdG9yLmVuZChlZGl0b3IsIGNlbGxQYXRoKSB9O1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUoY2VsbFBhdGgsIGNlbGxSYW5nZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlclJvdyhlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBjb25zdCBbdGFibGVFbnRyeV0gPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7IGF0OiBsb2NhdGlvbiwgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSB9KTtcbiAgICAgICAgY29uc3QgdGFibGVDb21wb25lbnQgPSBFTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQodGFibGVFbnRyeVswXSkgYXMgVGhlVGFibGVDb21wb25lbnQ7XG4gICAgICAgIHJldHVybiB0YWJsZUNvbXBvbmVudC5oZWFkZXJSb3c7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlckNvbHVtbihlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBjb25zdCBbdGFibGVFbnRyeV0gPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7IGF0OiBsb2NhdGlvbiwgbWF0Y2g6IChuOiBFbGVtZW50KSA9PiBuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSB9KTtcbiAgICAgICAgcmV0dXJuIHRhYmxlRW50cnkgJiYgKHRhYmxlRW50cnlbMF0gYXMgVGFibGVFbGVtZW50KT8ub3B0aW9ucz8uaGVhZGVyQ29sdW1uO1xuICAgIH0sXG5cbiAgICBpc0FjdGl2ZUhlYWRlcihlZGl0b3I6IFRoZUVkaXRvciwgbG9jYXRpb24/OiBMb2NhdGlvbikge1xuICAgICAgICBsb2NhdGlvbiA9IGxvY2F0aW9uIHx8IGVkaXRvci5zZWxlY3Rpb247XG4gICAgICAgIGlmICghVGFibGVFZGl0b3IuaGFzSGVhZGVyUm93KGVkaXRvciwgbG9jYXRpb24pICYmICFUYWJsZUVkaXRvci5oYXNIZWFkZXJDb2x1bW4oZWRpdG9yLCBsb2NhdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGNyZWF0ZVRhYmxlUG9zaXRpb24oZWRpdG9yLCAobG9jYXRpb24gYXMgUG9pbnQpLnBhdGgpO1xuICAgICAgICBpZiAoVGFibGVFZGl0b3IuaGFzSGVhZGVyUm93KGVkaXRvciwgbG9jYXRpb24pICYmIHBvc2l0aW9uLmdldFJvd0luZGV4KCkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChUYWJsZUVkaXRvci5oYXNIZWFkZXJDb2x1bW4oZWRpdG9yLCBsb2NhdGlvbikgJiYgcG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIGhhc0hlYWRlclJvd0NlbGwoZWRpdG9yOiBUaGVFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgaXNIZWFkZXJSb3cgPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7XG4gICAgICAgICAgICBtYXRjaDogbiA9PlxuICAgICAgICAgICAgICAgIEVsZW1lbnQuaXNFbGVtZW50KG4pICYmXG4gICAgICAgICAgICAgICAgKChuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZVJvdyAmJiBuLmhlYWRlcikgfHwgKG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlICYmIG4ub3B0aW9ucz8uaGVhZGVyUm93KSlcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBUYWJsZUVkaXRvci5nZXRTZWxlY3RlZENlbGxzKGVkaXRvcikgPz8gW107XG4gICAgICAgIHNvcnRDZWxsKHNlbGVjdGVkQ2VsbHMpO1xuICAgICAgICBjb25zdCBpc0NvbnRhaW5IZWFkZXJSb3cgPSAhIXNlbGVjdGVkQ2VsbHMgJiYgc2VsZWN0ZWRDZWxsc1swXS5yb3cgPT09IDA7XG5cbiAgICAgICAgcmV0dXJuIGlzSGVhZGVyUm93ICYmIGlzQ29udGFpbkhlYWRlclJvdztcbiAgICB9LFxuICAgIGhhc0hlYWRlckNvbHVtbkNlbGwoZWRpdG9yOiBUaGVFZGl0b3IpIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLnRhYmxlKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxscyA9IFRhYmxlRWRpdG9yLmdldFNlbGVjdGVkQ2VsbHMoZWRpdG9yKSA/PyBbXTtcbiAgICAgICAgc29ydENlbGwoc2VsZWN0ZWRDZWxscyk7XG4gICAgICAgIGNvbnN0IGlzQ29udGFpbkhlYWRlckNvbHVtbiA9ICEhc2VsZWN0ZWRDZWxscyAmJiBzZWxlY3RlZENlbGxzWzBdLmNvbCA9PT0gMDtcbiAgICAgICAgY29uc3QgaXNIZWFkZXJDb2x1bW4gPSB0YWJsZSAmJiB0YWJsZVswXSAmJiAodGFibGVbMF0gYXMgVGFibGVFbGVtZW50KT8ub3B0aW9ucz8uaGVhZGVyQ29sdW1uO1xuXG4gICAgICAgIHJldHVybiBpc0hlYWRlckNvbHVtbiAmJiBpc0NvbnRhaW5IZWFkZXJDb2x1bW47XG4gICAgfSxcbiAgICBzZWxlY3RPcmlnaW5DZWxsKGVkaXRvcjogVGhlRWRpdG9yLCB0YWJsZTogVGFibGVFbGVtZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyLCBpc1N0YXJ0OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IG9yaWdpbiA9IGdldE9yaWdpbkNlbGwodGFibGUsIHJvd0luZGV4LCBjb2x1bW5JbmRleCk7XG4gICAgICAgIGlmIChvcmlnaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgb3JpZ2luKTtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2VsZWN0KGVkaXRvciwgaXNTdGFydCA/IEVkaXRvci5zdGFydChlZGl0b3IsIHBhdGgpIDogRWRpdG9yLmVuZChlZGl0b3IsIHBhdGgpKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaGFuZGxlSW5kZW50KGVkaXRvcjogVGhlRWRpdG9yLCBpbmRlbnRUeXBlOiBJbmRlbnRzKSB7XG4gICAgICAgIHJldHVybiBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgKGNlbGxQYXRoLCBjZWxsUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKFRoZVF1ZXJpZXMuZ2V0Tm9kZShlZGl0b3IsIGNlbGxQYXRoKSBhcyBDdXN0b21FbGVtZW50KS5jaGlsZHJlbiBhcyBFbGVtZW50W107XG5cbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRDZWxsSW5kZW50KGVkaXRvciwgaW5kZW50VHlwZSwgY2hpbGQsIFsuLi5jZWxsUGF0aCwgaW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufTtcbiJdfQ==
298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvdGFibGUuZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFhLFVBQVUsRUFBRSxJQUFJLEVBQWUsSUFBSSxFQUFtQixNQUFNLE9BQU8sQ0FBQztBQUN6RyxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsWUFBWSxFQUVaLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsMEJBQTBCLEVBQzFCLHNCQUFzQixFQUN6QixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDMUcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXBELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDeEMsT0FBTyxLQUFLLGFBQWEsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEtBQUssVUFBVSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFB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RCxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQzlGO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFpQixFQUFFLFVBQW1CO1FBQy9DLE9BQU8sV0FBVyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsRUFBRTtZQUNuRSxNQUFNLFFBQVEsR0FBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQW1CLENBQUMsUUFBcUIsQ0FBQztZQUUvRixJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pCLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFjLEVBQUUsS0FBYSxFQUFFLEVBQUU7b0JBQy9DLGFBQWEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLENBQUMsQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRpdG9yLCBFbGVtZW50LCBOb2RlRW50cnksIFRyYW5zZm9ybXMsIFRleHQsIFBhdGgsIFJhbmdlLCBOb2RlLCBMb2NhdGlvbiwgUG9pbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBBbmd1bGFyRWRpdG9yLCBFTEVNRU5UX1RPX0NPTVBPTkVOVCB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgVGFibGVPcHRpb25zLCBUaGVUYWJsZU9wdGlvbnMgfSBmcm9tICcuL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7XG4gICAgQWxpZ25tZW50LFxuICAgIEFMSUdOX0JMT0NLX1RZUEVTLFxuICAgIEVsZW1lbnRLaW5kcyxcbiAgICBJbmRlbnRzLFxuICAgIE1hcmtQcm9wcyxcbiAgICBNYXJrVHlwZXMsXG4gICAgVmVydGljYWxBbGlnbm1lbnQsXG4gICAgVGFibGVIZWFkZXJCYWNrZ3JvdW5kQ29sb3IsXG4gICAgU3BlY2lhbEJhY2tncm91bmRDb2xvclxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgVGhlRWRpdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDdXN0b21FbGVtZW50LCBUYWJsZUNlbGxFbGVtZW50LCBUYWJsZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgaW5zZXJ0VGFibGUsIGluc2VydENvbHVtbiwgaW5zZXJ0Um93LCByZW1vdmVDb2x1bW4sIHJlbW92ZVJvdywgcmVtb3ZlVGFibGUgfSBmcm9tICcuL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgY2xlYXJDZWxsIH0gZnJvbSAnLi90cmFuc2Zvcm1zL2NsZWFyLWNlbGwnO1xuaW1wb3J0IHR5cGUgeyBUaGVUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZ2V0T3JpZ2luQ2VsbCB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0ICogYXMgVGhlVHJhbnNmb3JtcyBmcm9tICcuLi8uLi90cmFuc2Zvcm1zJztcbmltcG9ydCAqIGFzIFRoZVF1ZXJpZXMgZnJvbSAnLi4vLi4vcXVlcmllcyc7XG5pbXBvcnQgeyBzZXRDZWxsSW5kZW50LCBzb3J0Q2VsbCB9IGZyb20gJy4vdXRpbHMvaGFuZGxlLWNlbGwnO1xuaW1wb3J0IHsgY3JlYXRlVGFibGVQb3NpdGlvbiB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLXRhYmxlLXBvc2l0aW9uJztcbmltcG9ydCB7IFRIRV9FRElUT1JfUFJFVklPVVNfU0VMRUNUSU9OIH0gZnJvbSAnLi4vLi4vdXRpbHMvd2Vhay1tYXBzJztcbmltcG9ydCB7IHNwbGl0Q2VsbCB9IGZyb20gJy4vdXRpbHMvc3BsaXQtY2VsbCc7XG5pbXBvcnQgeyBnZXRUYWJsZVBhdGggfSBmcm9tICcuL3V0aWxzL3RhYmxlLWVudHJ5JztcbmltcG9ydCB7IG1lcmdlQ2VsbCB9IGZyb20gJy4vdXRpbHMvbWVyZ2UtY2VsbCc7XG5cbmV4cG9ydCBjb25zdCBUYWJsZUVkaXRvciA9IHtcbiAgICBpbnNlcnRUYWJsZShlZGl0b3I6IEVkaXRvciwgb3B0aW9uc1BhcmFtPzogVGFibGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKG9wdGlvbnNQYXJhbSk7XG4gICAgICAgIGluc2VydFRhYmxlKG9wdHMsIGVkaXRvcik7XG4gICAgfSxcblxuICAgIGluc2VydENvbHVtbihlZGl0b3I6IEVkaXRvciwgY291bnQ6IG51bWJlciA9IDEsIGF0PzogbnVtYmVyLCBvcHRpb25zUGFyYW0/OiBUYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMob3B0aW9uc1BhcmFtKTtcbiAgICAgICAgaW5zZXJ0Q29sdW1uKG9wdHMsIGVkaXRvciwgY291bnQsIGF0KTtcbiAgICB9LFxuXG4gICAgaW5zZXJ0Um93KGVkaXRvcjogRWRpdG9yLCBjb3VudDogbnVtYmVyID0gMSwgYXQ/OiBudW1iZXIsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICBpbnNlcnRSb3cob3B0cywgZWRpdG9yLCBjb3VudCwgYXQpO1xuICAgIH0sXG5cbiAgICByZW1vdmVUYWJsZShlZGl0b3I6IEVkaXRvciwgb3B0aW9uc1BhcmFtPzogVGFibGVPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKG9wdGlvbnNQYXJhbSk7XG4gICAgICAgIHJlbW92ZVRhYmxlKG9wdHMsIGVkaXRvcik7XG4gICAgfSxcblxuICAgIHJlbW92ZVJvdyhlZGl0b3I6IEVkaXRvciwgcm93SW5kZXg/OiBudW1iZXIsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICByZW1vdmVSb3cob3B0cywgZWRpdG9yLCByb3dJbmRleCk7XG4gICAgfSxcblxuICAgIHJlbW92ZUNvbHVtbihlZGl0b3I6IEVkaXRvciwgY29sSW5kZXg/OiBudW1iZXIsIG9wdGlvbnNQYXJhbT86IFRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucyhvcHRpb25zUGFyYW0pO1xuICAgICAgICByZW1vdmVDb2x1bW4ob3B0cywgZWRpdG9yLCBjb2xJbmRleCk7XG4gICAgfSxcblxuICAgIGNsZWFyQ2VsbChlZGl0b3I6IEVkaXRvciwgbm9kZUVudHJ5PzogTm9kZUVudHJ5PEVsZW1lbnQ+LCBvcHRpb25zUGFyYW0/OiBUYWJsZU9wdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG5ldyBUYWJsZU9wdGlvbnMob3B0aW9uc1BhcmFtKTtcbiAgICAgICAgY2xlYXJDZWxsKG9wdHMsIGVkaXRvciwgbm9kZUVudHJ5KTtcbiAgICB9LFxuXG4gICAgc2V0Q2VsbHNCYWNrZ3JvdW5kQ29sb3IoZWRpdG9yOiBFZGl0b3IsIGNvbG9yOiBzdHJpbmcsIGNlbGxzPzogVGFibGVDZWxsRWxlbWVudFtdKSB7XG4gICAgICAgIGlmICghY2VsbHMpIHtcbiAgICAgICAgICAgIGNlbGxzID0gVGFibGVFZGl0b3IuZ2V0U2VsZWN0ZWRDZWxscyhlZGl0b3IpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIOeCueWHu+iHquWumuS5ieminOiJsumdouadv+i+k+WFpeahhuiuvue9ruminOiJsuWAvOaXtu+8jOS8muS4ouWkseeEpueCueWSjOmAieWMuu+8iOebruWJjeaXoOazleWBmuWIsOeEpueCueWQjOaXtuWtmOWcqOS6jue8lui+keWZqOWSjOi+k+WFpeahhu+8iVxuICAgICAgICAgICAgbGV0IGxvY2F0aW9uOiBQb2ludDtcbiAgICAgICAgICAgIGlmICghZWRpdG9yLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcmFuZ2VSZWYgfSA9IFRIRV9FRElUT1JfUFJFVklPVVNfU0VMRUNUSU9OLmdldChlZGl0b3IpO1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gcmFuZ2VSZWYuY3VycmVudC5hbmNob3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzSGVhZGVyID0gVGFibGVFZGl0b3IuaXNBY3RpdmVIZWFkZXIoZWRpdG9yLCBsb2NhdGlvbik7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY29sb3IgPT09ICd0cmFuc3BhcmVudCcgfHxcbiAgICAgICAgICAgICAgICAoY29sb3IgPT09IFRhYmxlSGVhZGVyQmFja2dyb3VuZENvbG9yICYmIGlzSGVhZGVyKSB8fFxuICAgICAgICAgICAgICAgIChjb2xvciA9PT0gU3BlY2lhbEJhY2tncm91bmRDb2xvciAmJiAhaXNIZWFkZXIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb2xvciA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNlbGxzLm1hcChjZWxsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbFBhdGggPSBBbmd1bGFyRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoZWRpdG9yLCB7IGJhY2tncm91bmRDb2xvcjogY29sb3IgfSwgeyBhdDogY2VsbFBhdGggfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXJnZUNlbGwoZWRpdG9yOiBFZGl0b3IpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsc1Bvc2l0aW9uID0gVGFibGVFZGl0b3IuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKGVkaXRvcik7XG4gICAgICAgIHNlbGVjdGVkQ2VsbHNQb3NpdGlvbi5sZW5ndGggJiYgbWVyZ2VDZWxsKGVkaXRvciwgc2VsZWN0ZWRDZWxsc1Bvc2l0aW9uKTtcbiAgICB9LFxuXG4gICAgc3BsaXRDZWxsKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIHNwbGl0Q2VsbChlZGl0b3IpO1xuICAgIH0sXG5cbiAgICBzZXRUYWJsZU9wdGlvbnMoZWRpdG9yOiBFZGl0b3IsIG5ld09wdGlvbnM6IFRoZVRhYmxlT3B0aW9ucykge1xuICAgICAgICBjb25zdCB0YWJsZVBvc2l0aW9uID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICBjb25zdCB0YWJsZVBhdGggPSBnZXRUYWJsZVBhdGgoZWRpdG9yKTtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0YWJsZVBvc2l0aW9uLnRhYmxlO1xuICAgICAgICBjb25zdCBvcHRpb25zID0geyAuLi50YWJsZS5vcHRpb25zLCAuLi5uZXdPcHRpb25zIH07XG4gICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoZWRpdG9yLCB7IG9wdGlvbnMgfSwgeyBhdDogdGFibGVQYXRoIH0pO1xuICAgIH0sXG5cbiAgICBzZXRFcXVhbGx5Q29sdW1uKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IFt0YWJsZUVudHJ5XSA9IEVkaXRvci5ub2RlcyhlZGl0b3IsIHsgYXQ6IGVkaXRvci5zZWxlY3Rpb24sIG1hdGNoOiAobjogRWxlbWVudCkgPT4gbi50eXBlID09PSBFbGVtZW50S2luZHMudGFibGUgfSk7XG4gICAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9ICh0YWJsZUVudHJ5ICYmIHRhYmxlRW50cnlbMF0pIGFzIFRhYmxlRWxlbWVudDtcbiAgICAgICAgaWYgKHRhYmxlRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlRWxlbWVudC5jb2x1bW5zO1xuICAgICAgICAgICAgY29uc3Qgc3VtV2lkdGggPSBjb2x1bW5zLnJlZHVjZSgocHJldmlvdXNWYWx1ZSwgY3VycmVudFZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWUgKyBjdXJyZW50VmFsdWUud2lkdGg7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIGNvbnN0IGVxdWFsQ29sdW1ucyA9IGNvbHVtbnMubWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyB3aWR0aDogc3VtV2lkdGggLyBjb2x1bW5zLmxlbmd0aCB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFRoZVRyYW5zZm9ybXMuc2V0Tm9kZShlZGl0b3IsIHsgY29sdW1uczogZXF1YWxDb2x1bW5zIH0sIHRhYmxlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDZWxsc0NvbnRlbnQoZWRpdG9yOiBFZGl0b3IsIGNlbGxzPzogVGFibGVDZWxsRWxlbWVudFtdKSB7XG4gICAgICAgIGlmICghY2VsbHMpIHtcbiAgICAgICAgICAgIGNlbGxzID0gVGFibGVFZGl0b3IuZ2V0U2VsZWN0ZWRDZWxscyhlZGl0b3IpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZVBvc2l0aW9uID0gY3JlYXRlVGFibGVQb3NpdGlvbihlZGl0b3IpO1xuICAgICAgICAgICAgaWYgKHRhYmxlUG9zaXRpb24uaXNJblRhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjZWxscy5mb3JFYWNoKGNlbGwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFRoZUVkaXRvci5maW5kUGF0aChlZGl0b3IsIGNlbGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVFZGl0b3IuY2xlYXJDZWxsKGVkaXRvciwgW2NlbGwsIHBhdGhdKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZWxlY3QoZWRpdG9yLCBFZGl0b3Iuc3RhcnQoZWRpdG9yLCB0YWJsZVBvc2l0aW9uLmNlbGxFbnRyeVsxXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIGlzQWN0aXZlKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IFt0YWJsZV0gPSBFZGl0b3Iubm9kZXMoZWRpdG9yLCB7IG1hdGNoOiBuID0+IEVsZW1lbnQuaXNFbGVtZW50KG4pICYmIG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlIH0pO1xuICAgICAgICByZXR1cm4gISF0YWJsZTtcbiAgICB9LFxuXG4gICAgZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKGVkaXRvcjogRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGUpO1xuICAgICAgICBpZiAodGFibGVOb2RlKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZUNvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldCh0YWJsZU5vZGVbMF0pIGFzIFRoZVRhYmxlQ29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsUG9zaXRpb25zID0gdGFibGVDb21wb25lbnQudGFibGVTdG9yZS5nZXRTZWxlY3RlZENlbGxQb3NpdGlvbnMoKTtcblxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2VsbFBvc2l0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkQ2VsbFBvc2l0aW9ucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgZ2V0U2VsZWN0ZWRDZWxscyhlZGl0b3I6IEVkaXRvcikge1xuICAgICAgICBjb25zdCB0YWJsZU5vZGUgPSBUaGVRdWVyaWVzLmdldEFib3ZlQnlUeXBlKGVkaXRvciwgRWxlbWVudEtpbmRzLnRhYmxlKTtcbiAgICAgICAgaWYgKHRhYmxlTm9kZSkge1xuICAgICAgICAgICAgY29uc3QgdGFibGVDb21wb25lbnQgPSBFTEVNRU5UX1RPX0NPTVBPTkVOVC5nZXQodGFibGVOb2RlWzBdKSBhcyBUaGVUYWJsZUNvbXBvbmVudDtcbiAgICAgICAgICAgIHJldHVybiB0YWJsZUNvbXBvbmVudD8udGFibGVTdG9yZT8uc2VsZWN0ZWRDZWxscyB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG5cbiAgICBzZXRBbGlnbihlZGl0b3I6IEVkaXRvciwgYWxpZ25tZW50OiBBbGlnbm1lbnQsIGNlbGxzPzogVGFibGVDZWxsRWxlbWVudFtdKSB7XG4gICAgICAgIHJldHVybiBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKFxuICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgKF8sIGNlbGxSYW5nZSkgPT4ge1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZXMoXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvcixcbiAgICAgICAgICAgICAgICAgICAgeyBhbGlnbjogYWxpZ25tZW50IH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0OiBjZWxsUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDogKG46IEVsZW1lbnQpID0+IEFMSUdOX0JMT0NLX1RZUEVTLmluY2x1ZGVzKG4udHlwZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2VsbHNcbiAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgc2V0VmVydGljYWxBbGlnbihlZGl0b3I6IFRoZUVkaXRvciwgYWxpZ25tZW50OiBWZXJ0aWNhbEFsaWdubWVudCwgY2VsbHM/OiBUYWJsZUNlbGxFbGVtZW50W10pIHtcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IFRhYmxlRWRpdG9yLmhhbmRsZVNlbGVjdGVkQ2VsbHMoXG4gICAgICAgICAgICBlZGl0b3IsXG4gICAgICAgICAgICBjZWxsUGF0aCA9PiB7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhlZGl0b3IsIHsgdmVydGljYWxBbGlnbjogYWxpZ25tZW50IH0sIHsgYXQ6IGNlbGxQYXRoIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNlbGxzXG4gICAgICAgICk7XG4gICAgICAgIGNvbnNvbGUubG9nKGlzU2VsZWN0ZWQpO1xuICAgICAgICBpZiAoIWlzU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxFbnRyeSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGVDZWxsKTtcbiAgICAgICAgICAgIGlmIChjZWxsRW50cnkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbLCBjZWxsUGF0aF0gPSBjZWxsRW50cnk7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICB7IHZlcnRpY2FsQWxpZ246IGFsaWdubWVudCB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhdDogY2VsbFBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDogKG46IEVsZW1lbnQpID0+IG4udHlwZSA9PT0gRWxlbWVudEtpbmRzLnRhYmxlQ2VsbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuXG4gICAgaXNWZXJ0aWNhbEFsaWduQWN0aXZlKGVkaXRvcjogVGhlRWRpdG9yLCBhbGlnbm1lbnQ6IFZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gVGFibGVFZGl0b3IuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKGVkaXRvcik7XG4gICAgICAgIGlmIChjZWxscykge1xuICAgICAgICAgICAgY29uc3QgbGFzdENlbGwgPSBjZWxsc1tjZWxscy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGUpO1xuICAgICAgICAgICAgY29uc3QgY2VsbFBhdGggPSBbLi4udGFibGVOb2RlWzFdLCBsYXN0Q2VsbC5yb3csIGxhc3RDZWxsLmNvbF07XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gTm9kZS5nZXQoZWRpdG9yLCBjZWxsUGF0aCkgYXMgVGFibGVDZWxsRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHsgdmVydGljYWxBbGlnbiB9ID0gY2VsbDtcbiAgICAgICAgICAgIGlmICghdmVydGljYWxBbGlnbiAmJiBhbGlnbm1lbnQgPT09IFZlcnRpY2FsQWxpZ25tZW50LnRvcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZlcnRpY2FsQWxpZ24gPT09IGFsaWdubWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxFbGVtZW50ID0gVGhlUXVlcmllcy5nZXRBYm92ZUJ5VHlwZShlZGl0b3IsIEVsZW1lbnRLaW5kcy50YWJsZUNlbGwpO1xuICAgICAgICAgICAgaWYgKGNlbGxFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB2ZXJ0aWNhbEFsaWduIH0gPSBjZWxsRWxlbWVudFswXTtcbiAgICAgICAgICAgICAgICBpZiAoIXZlcnRpY2FsQWxpZ24gJiYgYWxpZ25tZW50ID09PSBWZXJ0aWNhbEFsaWdubWVudC50b3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2ZXJ0aWNhbEFsaWduID09PSBhbGlnbm1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIHRvZ2dsZU1hcmsoZWRpdG9yOiBUaGVFZGl0b3IsIGlzQWN0aXZlOiBib29sZWFuLCBmb3JtYXQ6IHN0cmluZyB8IHN0cmluZ1tdLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIFRhYmxlRWRpdG9yLmhhbmRsZVNlbGVjdGVkQ2VsbHMoZWRpdG9yLCBhdCA9PiB7XG4gICAgICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnVuc2V0Tm9kZXMoZWRpdG9yLCBmb3JtYXQsIHtcbiAgICAgICAgICAgICAgICAgICAgYXQsXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoOiBUZXh0LmlzVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgZWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICB7IFtmb3JtYXQgYXMgc3RyaW5nXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDogVGV4dC5pc1RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGxpdDogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGNsZWFyTWFyayhlZGl0b3I6IFRoZUVkaXRvcikge1xuICAgICAgICByZXR1cm4gVGFibGVFZGl0b3IuaGFuZGxlU2VsZWN0ZWRDZWxscyhlZGl0b3IsIChjZWxsUGF0aCwgY2VsbFJhbmdlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bnNldE1hcmtzOiB7IFtrZXkgaW4gTWFya1R5cGVzXT86IG51bGwgfCBzdHJpbmcgfSA9IHt9O1xuICAgICAgICAgICAgTWFya1Byb3BzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICB1bnNldE1hcmtzW2tleV0gPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBUaGVUcmFuc2Zvcm1zLnNldE1hcmtzKGVkaXRvciwgdW5zZXRNYXJrcywgY2VsbFJhbmdlKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIGZvcm1hdEJydXNoKGVkaXRvcjogVGhlRWRpdG9yLCBtYXJrczogeyBba2V5IGluIE1hcmtUeXBlc10/OiBhbnkgfSkge1xuICAgICAgICByZXR1cm4gVGFibGVFZGl0b3IuaGFuZGxlU2VsZWN0ZWRDZWxscyhlZGl0b3IsIChjZWxsUGF0aCwgY2VsbFJhbmdlKSA9PiB7XG4gICAgICAgICAgICBUaGVUcmFuc2Zvcm1zLnNldE1hcmtzKGVkaXRvciwgbWFya3MsIGNlbGxSYW5nZSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBoYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvcjogVGhlRWRpdG9yLCBoYW5kbGU6IChjZWxsUGF0aDogUGF0aCwgY2VsbFJhbmdlOiBSYW5nZSkgPT4gdm9pZCwgY2VsbHM/OiBUYWJsZUNlbGxFbGVtZW50W10pIHtcbiAgICAgICAgaWYgKCFjZWxscykge1xuICAgICAgICAgICAgY2VsbHMgPSBUYWJsZUVkaXRvci5nZXRTZWxlY3RlZENlbGxzKGVkaXRvcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbGxzKSB7XG4gICAgICAgICAgICBFZGl0b3Iud2l0aG91dE5vcm1hbGl6aW5nKGVkaXRvciwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNlbGxzLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxQYXRoID0gVGhlRWRpdG9yLmZpbmRQYXRoKGVkaXRvciwgY2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxSYW5nZSA9IHsgYW5jaG9yOiBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBjZWxsUGF0aCksIGZvY3VzOiBFZGl0b3IuZW5kKGVkaXRvciwgY2VsbFBhdGgpIH07XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZShjZWxsUGF0aCwgY2VsbFJhbmdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICBoYXNIZWFkZXJSb3coZWRpdG9yOiBUaGVFZGl0b3IsIGxvY2F0aW9uPzogTG9jYXRpb24pIHtcbiAgICAgICAgY29uc3QgW3RhYmxlRW50cnldID0gRWRpdG9yLm5vZGVzKGVkaXRvciwgeyBhdDogbG9jYXRpb24sIG1hdGNoOiAobjogRWxlbWVudCkgPT4gbi50eXBlID09PSBFbGVtZW50S2luZHMudGFibGUgfSk7XG4gICAgICAgIGNvbnN0IHRhYmxlQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHRhYmxlRW50cnlbMF0pIGFzIFRoZVRhYmxlQ29tcG9uZW50O1xuICAgICAgICByZXR1cm4gdGFibGVDb21wb25lbnQuaGVhZGVyUm93O1xuICAgIH0sXG5cbiAgICBoYXNIZWFkZXJDb2x1bW4oZWRpdG9yOiBUaGVFZGl0b3IsIGxvY2F0aW9uPzogTG9jYXRpb24pIHtcbiAgICAgICAgY29uc3QgW3RhYmxlRW50cnldID0gRWRpdG9yLm5vZGVzKGVkaXRvciwgeyBhdDogbG9jYXRpb24sIG1hdGNoOiAobjogRWxlbWVudCkgPT4gbi50eXBlID09PSBFbGVtZW50S2luZHMudGFibGUgfSk7XG4gICAgICAgIHJldHVybiB0YWJsZUVudHJ5ICYmICh0YWJsZUVudHJ5WzBdIGFzIFRhYmxlRWxlbWVudCk/Lm9wdGlvbnM/LmhlYWRlckNvbHVtbjtcbiAgICB9LFxuXG4gICAgaXNBY3RpdmVIZWFkZXIoZWRpdG9yOiBUaGVFZGl0b3IsIGxvY2F0aW9uPzogTG9jYXRpb24pIHtcbiAgICAgICAgbG9jYXRpb24gPSBsb2NhdGlvbiB8fCBlZGl0b3Iuc2VsZWN0aW9uO1xuICAgICAgICBpZiAoIVRhYmxlRWRpdG9yLmhhc0hlYWRlclJvdyhlZGl0b3IsIGxvY2F0aW9uKSAmJiAhVGFibGVFZGl0b3IuaGFzSGVhZGVyQ29sdW1uKGVkaXRvciwgbG9jYXRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBjcmVhdGVUYWJsZVBvc2l0aW9uKGVkaXRvciwgKGxvY2F0aW9uIGFzIFBvaW50KS5wYXRoKTtcbiAgICAgICAgaWYgKFRhYmxlRWRpdG9yLmhhc0hlYWRlclJvdyhlZGl0b3IsIGxvY2F0aW9uKSAmJiBwb3NpdGlvbi5nZXRSb3dJbmRleCgpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVGFibGVFZGl0b3IuaGFzSGVhZGVyQ29sdW1uKGVkaXRvciwgbG9jYXRpb24pICYmIHBvc2l0aW9uLmdldENvbHVtbkluZGV4KCkgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG5cbiAgICBoYXNIZWFkZXJSb3dDZWxsKGVkaXRvcjogVGhlRWRpdG9yKSB7XG4gICAgICAgIGNvbnN0IGlzSGVhZGVyUm93ID0gRWRpdG9yLm5vZGVzKGVkaXRvciwge1xuICAgICAgICAgICAgbWF0Y2g6IG4gPT5cbiAgICAgICAgICAgICAgICBFbGVtZW50LmlzRWxlbWVudChuKSAmJlxuICAgICAgICAgICAgICAgICgobi50eXBlID09PSBFbGVtZW50S2luZHMudGFibGVSb3cgJiYgbi5oZWFkZXIpIHx8IChuLnR5cGUgPT09IEVsZW1lbnRLaW5kcy50YWJsZSAmJiBuLm9wdGlvbnM/LmhlYWRlclJvdykpXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gVGFibGVFZGl0b3IuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKGVkaXRvcikgPz8gW107XG4gICAgICAgIHNvcnRDZWxsKHNlbGVjdGVkQ2VsbHMpO1xuICAgICAgICBjb25zdCBpc0NvbnRhaW5IZWFkZXJSb3cgPSAhIXNlbGVjdGVkQ2VsbHMgJiYgc2VsZWN0ZWRDZWxsc1swXS5yb3cgPT09IDA7XG5cbiAgICAgICAgcmV0dXJuIGlzSGVhZGVyUm93ICYmIGlzQ29udGFpbkhlYWRlclJvdztcbiAgICB9LFxuXG4gICAgaGFzSGVhZGVyQ29sdW1uQ2VsbChlZGl0b3I6IFRoZUVkaXRvcikge1xuICAgICAgICBjb25zdCB0YWJsZSA9IFRoZVF1ZXJpZXMuZ2V0QWJvdmVCeVR5cGUoZWRpdG9yLCBFbGVtZW50S2luZHMudGFibGUpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gVGFibGVFZGl0b3IuZ2V0U2VsZWN0ZWRDZWxsUG9zaXRpb25zKGVkaXRvcikgPz8gW107XG4gICAgICAgIHNvcnRDZWxsKHNlbGVjdGVkQ2VsbHMpO1xuICAgICAgICBjb25zdCBpc0NvbnRhaW5IZWFkZXJDb2x1bW4gPSAhIXNlbGVjdGVkQ2VsbHMgJiYgc2VsZWN0ZWRDZWxsc1swXS5jb2wgPT09IDA7XG4gICAgICAgIGNvbnN0IGlzSGVhZGVyQ29sdW1uID0gdGFibGUgJiYgdGFibGVbMF0gJiYgKHRhYmxlWzBdIGFzIFRhYmxlRWxlbWVudCk/Lm9wdGlvbnM/LmhlYWRlckNvbHVtbjtcblxuICAgICAgICByZXR1cm4gaXNIZWFkZXJDb2x1bW4gJiYgaXNDb250YWluSGVhZGVyQ29sdW1uO1xuICAgIH0sXG4gICAgc2VsZWN0T3JpZ2luQ2VsbChlZGl0b3I6IFRoZUVkaXRvciwgdGFibGU6IFRhYmxlRWxlbWVudCwgcm93SW5kZXg6IG51bWJlciwgY29sdW1uSW5kZXg6IG51bWJlciwgaXNTdGFydDogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBvcmlnaW4gPSBnZXRPcmlnaW5DZWxsKHRhYmxlLCByb3dJbmRleCwgY29sdW1uSW5kZXgpO1xuICAgICAgICBpZiAob3JpZ2luKSB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gQW5ndWxhckVkaXRvci5maW5kUGF0aChlZGl0b3IsIG9yaWdpbik7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnNlbGVjdChlZGl0b3IsIGlzU3RhcnQgPyBFZGl0b3Iuc3RhcnQoZWRpdG9yLCBwYXRoKSA6IEVkaXRvci5lbmQoZWRpdG9yLCBwYXRoKSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgaGFuZGxlSW5kZW50KGVkaXRvcjogVGhlRWRpdG9yLCBpbmRlbnRUeXBlOiBJbmRlbnRzKSB7XG4gICAgICAgIHJldHVybiBUYWJsZUVkaXRvci5oYW5kbGVTZWxlY3RlZENlbGxzKGVkaXRvciwgKGNlbGxQYXRoLCBjZWxsUmFuZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gKFRoZVF1ZXJpZXMuZ2V0Tm9kZShlZGl0b3IsIGNlbGxQYXRoKSBhcyBDdXN0b21FbGVtZW50KS5jaGlsZHJlbiBhcyBFbGVtZW50W107XG5cbiAgICAgICAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogRWxlbWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRDZWxsSW5kZW50KGVkaXRvciwgaW5kZW50VHlwZSwgY2hpbGQsIFsuLi5jZWxsUGF0aCwgaW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufTtcbiJdfQ==