@one-paragon/angular-utilities 0.3.7-beta.1 → 0.3.7-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -57,8 +57,6 @@ export class TableContainerComponent {
57
57
  this.onSaveState = new EventEmitter();
58
58
  this.state = inject(TableStore);
59
59
  this.state$ = this.state.getSavableState().pipe(map(state => cloneDeep(state)), defaultShareReplay());
60
- this.groupedSubject = new ReplaySubject();
61
- this.grouped = this.groupedSubject.pipe(switchAll(), defaultShareReplay());
62
60
  this.config = inject(TableBuilderConfigToken);
63
61
  this.exportToCsvService = inject((ExportToCsvService));
64
62
  this.wrapper = inject(TableWrapperDirective, { optional: true });
@@ -170,7 +168,6 @@ export class TableContainerComponent {
170
168
  return ({ mappedData: filterData(resultData, f.value.onlyAddedFilters || f.value.allFilters, !!f.value.onlyAddedFilters) });
171
169
  }, initialDataState)).pipe(map(({ mappedData: resultData }) => resultData.filter(item => !item[tbNoShowSymbol])), defaultShareReplay());
172
170
  const flatGrouped$ = combineLatest([sortedAndFilteredData$.pipe(timestamp()), this.state.groupByKeys$.pipe(timestamp()), this.state.expandedGroups$.pipe(timestamp())]).pipe(scan(updateGroupByState, initialGroupByState), map(({ displayData }) => displayData), defaultShareReplay());
173
- this.groupedSubject.next(flatGrouped$.pipe(map(maybeGrouped => !!maybeGrouped[0]?.isGroupHeader)));
174
171
  this.displayDataSubject.next(flatGrouped$);
175
172
  this.dataSubject.next(sortedAndFilteredData$);
176
173
  }
@@ -226,11 +223,11 @@ export class TableContainerComponent {
226
223
  this.myColumns$ = this.state.metaDataArray$.pipe(mapArray(metaData => ({ metaData, customCell: customCellMap.get(metaData.key) })));
227
224
  }
228
225
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: TableContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
229
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.3", type: TableContainerComponent, isStandalone: true, selector: "tb-table-container", inputs: { tableId: "tableId", tableBuilder: "tableBuilder", indexColumn: "indexColumn", selectionColumn: "selectionColumn", trackBy: "trackBy", isSticky: "isSticky", pageSize: "pageSize", inputFilters: "inputFilters", groupHeaderTemplate: "groupHeaderTemplate" }, outputs: { selection$: "selection$", data: "data", onStateReset: "onStateReset", onSaveState: "onSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore], queries: [{ propertyName: "customFilterDirectives", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filterDirectives", predicate: TableFilterDirective, descendants: true }, { propertyName: "customRows", predicate: MatRowDef }, { propertyName: "customCells", predicate: CustomCellDirective }], viewQueries: [{ propertyName: "genericTableComponent", first: true, predicate: GenericTableComponent, descendants: true }], ngImport: i0, template: "<ng-content select=\"[before]\" />\r\n\r\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\r\n <ng-content select=\".tb-header-title\"/>\r\n }\r\n @if((state.groupByKeys$ | async)?.length){\r\n <group-by-list />\r\n }\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list />\r\n @if (!tableSettings.hideHeader) {\r\n @if (!(collapseHeader$ | async)) {\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n @else {\r\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [displayData$]=\"displayData\" [indexColumn]='indexColumn'\r\n [selectionColumn]='selectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\r\n [isSticky]='isSticky' [columnInfos]='myColumns$' [groupHeaderTemplate]=\"groupHeaderTemplate\"\r\n [grouped]=\"!!(grouped | async)\">\r\n </tb-generic-table>\r\n </div>\r\n\r\n\r\n\r\n <ng-template #headerMenu>\r\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\r\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\r\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\r\n </ng-template>\r\n\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n @if (!tableSettings.hideExport) {\r\n <button mat-menu-item (click)=\"exportToCsv()\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n }\r\n @if (currentStateKey$ | async; as currentKey) {\r\n @if (tableId) {\r\n <button mat-menu-item (click)=\"saveState()\">\r\n <mat-icon color=\"primary\">save</mat-icon>\r\n <span>Save to {{currentKey}}</span>\r\n </button>\r\n <button mat-menu-item [matMenuTriggerFor]=\"savedNames\">\r\n <span>Choose Profile</span>\r\n </button>\r\n }\r\n }\r\n\r\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\r\n <button mat-menu-item clickEmitter #add='clickEmitter'>\r\n <mat-icon>add</mat-icon>\r\n <span>New</span>\r\n </button>\r\n @for (key of stateKeys$ | async; track key) {\r\n <button mat-menu-item (click)='setProfileState(key)'>\r\n <span>{{key}}</span>\r\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\r\n </button>\r\n }\r\n </mat-menu>\r\n <ng-container *opDialog='add'>\r\n <mat-form-field>\r\n <input class=\"add-key\" matInput #addedKey />\r\n </mat-form-field>\r\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);' [disabled]=\"!addedKey.value\">\r\n Add\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: i3.MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { kind: "component", type: i4.GroupByListComponent, selector: "group-by-list" }, { kind: "component", type: i5.FilterChipsComponent, selector: "lib-filter-list" }, { kind: "component", type: i6.GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { kind: "component", type: i7.GenColDisplayerComponent, selector: "tb-col-displayer" }, { kind: "component", type: i8.SortMenuComponent, selector: "tb-sort-menu" }, { kind: "component", type: i9.GenericTableComponent, selector: "tb-generic-table", inputs: ["trackBy", "grouped", "displayData$", "data$", "indexColumn", "selectionColumn", "rows", "isSticky", "columnBuilders", "columnInfos", "groupHeaderTemplate"], outputs: ["selection$"] }, { kind: "directive", type: i10.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "directive", type: i11.ClickEmitterDirective, selector: "[clickEmitter]", exportAs: ["clickEmitter"] }, { kind: "directive", type: i12.DialogDirective, selector: "[opDialog]", inputs: ["opDialogAddDialogClass", "opDialogConfig", "opDialog", "opDialogOrigin"], outputs: ["opDialogClosed"] }, { kind: "ngmodule", type: i13.MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: i14.MatMenuModule }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: i15.MatIconModule }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: i16.MatTooltipModule }, { kind: "directive", type: i16.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: i17.MatInputModule }, { kind: "directive", type: i17.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i18.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
226
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.3", type: TableContainerComponent, isStandalone: true, selector: "tb-table-container", inputs: { tableId: "tableId", tableBuilder: "tableBuilder", indexColumn: "indexColumn", selectionColumn: "selectionColumn", trackBy: "trackBy", isSticky: "isSticky", pageSize: "pageSize", inputFilters: "inputFilters", groupHeaderTemplate: "groupHeaderTemplate" }, outputs: { selection$: "selection$", data: "data", onStateReset: "onStateReset", onSaveState: "onSaveState", state$: "state$" }, providers: [TableStore, ExportToCsvService, WrapperFilterStore], queries: [{ propertyName: "customFilterDirectives", predicate: TableCustomFilterDirective, descendants: true }, { propertyName: "filterDirectives", predicate: TableFilterDirective, descendants: true }, { propertyName: "customRows", predicate: MatRowDef }, { propertyName: "customCells", predicate: CustomCellDirective }], viewQueries: [{ propertyName: "genericTableComponent", first: true, predicate: GenericTableComponent, descendants: true }], ngImport: i0, template: "<ng-content select=\"[before]\" />\r\n\r\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\r\n <ng-content select=\".tb-header-title\"/>\r\n }\r\n @if((state.groupByKeys$ | async)?.length){\r\n <group-by-list />\r\n }\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list />\r\n @if (!tableSettings.hideHeader) {\r\n @if (!(collapseHeader$ | async)) {\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n @else {\r\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [displayData$]=\"displayData\" [indexColumn]='indexColumn'\r\n [selectionColumn]='selectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\r\n [isSticky]='isSticky' [columnInfos]='myColumns$' [groupHeaderTemplate]=\"groupHeaderTemplate\">\r\n </tb-generic-table>\r\n </div>\r\n\r\n\r\n\r\n <ng-template #headerMenu>\r\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\r\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\r\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\r\n </ng-template>\r\n\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n @if (!tableSettings.hideExport) {\r\n <button mat-menu-item (click)=\"exportToCsv()\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n }\r\n @if (currentStateKey$ | async; as currentKey) {\r\n @if (tableId) {\r\n <button mat-menu-item (click)=\"saveState()\">\r\n <mat-icon color=\"primary\">save</mat-icon>\r\n <span>Save to {{currentKey}}</span>\r\n </button>\r\n <button mat-menu-item [matMenuTriggerFor]=\"savedNames\">\r\n <span>Choose Profile</span>\r\n </button>\r\n }\r\n }\r\n\r\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\r\n <button mat-menu-item clickEmitter #add='clickEmitter'>\r\n <mat-icon>add</mat-icon>\r\n <span>New</span>\r\n </button>\r\n @for (key of stateKeys$ | async; track key) {\r\n <button mat-menu-item (click)='setProfileState(key)'>\r\n <span>{{key}}</span>\r\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\r\n </button>\r\n }\r\n </mat-menu>\r\n <ng-container *opDialog='add'>\r\n <mat-form-field>\r\n <input class=\"add-key\" matInput #addedKey />\r\n </mat-form-field>\r\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);' [disabled]=\"!addedKey.value\">\r\n Add\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"], dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "directive", type: i3.MultiSortDirective, selector: "[multiSort]", inputs: ["matSortDisabled"], exportAs: ["multiSort"] }, { kind: "component", type: i4.GroupByListComponent, selector: "group-by-list" }, { kind: "component", type: i5.FilterChipsComponent, selector: "lib-filter-list" }, { kind: "component", type: i6.GenFilterDisplayerComponent, selector: "tb-filter-displayer" }, { kind: "component", type: i7.GenColDisplayerComponent, selector: "tb-col-displayer" }, { kind: "component", type: i8.SortMenuComponent, selector: "tb-sort-menu" }, { kind: "component", type: i9.GenericTableComponent, selector: "tb-generic-table", inputs: ["trackBy", "displayData$", "data$", "indexColumn", "selectionColumn", "rows", "isSticky", "columnBuilders", "columnInfos", "groupHeaderTemplate"], outputs: ["selection$"] }, { kind: "directive", type: i10.StopPropagationDirective, selector: "[stop-propagation]" }, { kind: "directive", type: i11.ClickEmitterDirective, selector: "[clickEmitter]", exportAs: ["clickEmitter"] }, { kind: "directive", type: i12.DialogDirective, selector: "[opDialog]", inputs: ["opDialogAddDialogClass", "opDialogConfig", "opDialog", "opDialogOrigin"], outputs: ["opDialogClosed"] }, { kind: "ngmodule", type: i13.MatButtonModule }, { kind: "component", type: i13.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: i14.MatMenuModule }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: i15.MatIconModule }, { kind: "component", type: i15.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: i16.MatTooltipModule }, { kind: "directive", type: i16.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: i17.MatInputModule }, { kind: "directive", type: i17.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i18.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
230
227
  }
231
228
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: TableContainerComponent, decorators: [{
232
229
  type: Component,
233
- args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], standalone: true, imports: containerImports, template: "<ng-content select=\"[before]\" />\r\n\r\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\r\n <ng-content select=\".tb-header-title\"/>\r\n }\r\n @if((state.groupByKeys$ | async)?.length){\r\n <group-by-list />\r\n }\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list />\r\n @if (!tableSettings.hideHeader) {\r\n @if (!(collapseHeader$ | async)) {\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n @else {\r\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [displayData$]=\"displayData\" [indexColumn]='indexColumn'\r\n [selectionColumn]='selectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\r\n [isSticky]='isSticky' [columnInfos]='myColumns$' [groupHeaderTemplate]=\"groupHeaderTemplate\"\r\n [grouped]=\"!!(grouped | async)\">\r\n </tb-generic-table>\r\n </div>\r\n\r\n\r\n\r\n <ng-template #headerMenu>\r\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\r\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\r\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\r\n </ng-template>\r\n\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n @if (!tableSettings.hideExport) {\r\n <button mat-menu-item (click)=\"exportToCsv()\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n }\r\n @if (currentStateKey$ | async; as currentKey) {\r\n @if (tableId) {\r\n <button mat-menu-item (click)=\"saveState()\">\r\n <mat-icon color=\"primary\">save</mat-icon>\r\n <span>Save to {{currentKey}}</span>\r\n </button>\r\n <button mat-menu-item [matMenuTriggerFor]=\"savedNames\">\r\n <span>Choose Profile</span>\r\n </button>\r\n }\r\n }\r\n\r\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\r\n <button mat-menu-item clickEmitter #add='clickEmitter'>\r\n <mat-icon>add</mat-icon>\r\n <span>New</span>\r\n </button>\r\n @for (key of stateKeys$ | async; track key) {\r\n <button mat-menu-item (click)='setProfileState(key)'>\r\n <span>{{key}}</span>\r\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\r\n </button>\r\n }\r\n </mat-menu>\r\n <ng-container *opDialog='add'>\r\n <mat-form-field>\r\n <input class=\"add-key\" matInput #addedKey />\r\n </mat-form-field>\r\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);' [disabled]=\"!addedKey.value\">\r\n Add\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
230
+ args: [{ selector: 'tb-table-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [TableStore, ExportToCsvService, WrapperFilterStore], standalone: true, imports: containerImports, template: "<ng-content select=\"[before]\" />\r\n\r\n<ng-container multiSort *ngrxLet=\"state.tableSettings$ as tableSettings\">\r\n <div class=\"header-wrapper\">\r\n <div class=\"title\">\r\n @if ((!(collapseHeader$ | async)) || tableSettings.showTitleWhenHeaderCollapsed) {\r\n <ng-content select=\".tb-header-title\"/>\r\n }\r\n @if((state.groupByKeys$ | async)?.length){\r\n <group-by-list />\r\n }\r\n </div>\r\n <div class=\"flx-row-end\">\r\n <lib-filter-list />\r\n @if (!tableSettings.hideHeader) {\r\n @if (!(collapseHeader$ | async)) {\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n <button mat-icon-button color='primary' [matMenuTriggerFor]=\"mainMenu\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #mainMenu='matMenu'>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n @else {\r\n <mat-icon color=\"primary\" [matMenuTriggerFor]=\"mainMenu\" class=\"flat-menu-button pointer\">more_horiz</mat-icon>\r\n <mat-menu #mainMenu='matMenu'>\r\n <div class=\"flex-column\">\r\n <ng-container *ngTemplateOutlet=\"headerMenu\"/>\r\n </div>\r\n <ng-container *ngTemplateOutlet=\"headerMenuExtra\"/>\r\n </mat-menu>\r\n }\r\n <mat-icon [matTooltip]=\"(collapseHeader$ | async) ? 'expand' : 'collapse'\" class=\"collapse-icon header\"\r\n (click)=\"state.toggleCollapseHeader()\">\r\n {{(collapseHeader$ | async) ? 'expand_less' : 'expand_more'}}\r\n </mat-icon>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <div>\r\n <tb-generic-table [rows]='customRows' [data$]=\"data\" [displayData$]=\"displayData\" [indexColumn]='indexColumn'\r\n [selectionColumn]='selectionColumn' (selection$)='selection$.emit($event)' [trackBy]='trackBy'\r\n [isSticky]='isSticky' [columnInfos]='myColumns$' [groupHeaderTemplate]=\"groupHeaderTemplate\">\r\n </tb-generic-table>\r\n </div>\r\n\r\n\r\n\r\n <ng-template #headerMenu>\r\n @if (!tableSettings.hideFilter) {<tb-filter-displayer/>}\r\n @if (!tableSettings.hideColumnSettings) {<tb-col-displayer/>}\r\n @if (!tableSettings.hideSort) {<tb-sort-menu/>}\r\n </ng-template>\r\n\r\n <ng-template #headerMenuExtra>\r\n <button mat-menu-item (click)=\"resetState()\">\r\n <mat-icon color=\"primary\">autorenew</mat-icon>\r\n <span>Reset table</span>\r\n </button>\r\n @if (!tableSettings.hideExport) {\r\n <button mat-menu-item (click)=\"exportToCsv()\">\r\n <mat-icon color=\"primary\">file_download</mat-icon>\r\n <span>Export Table</span>\r\n </button>\r\n }\r\n @if (currentStateKey$ | async; as currentKey) {\r\n @if (tableId) {\r\n <button mat-menu-item (click)=\"saveState()\">\r\n <mat-icon color=\"primary\">save</mat-icon>\r\n <span>Save to {{currentKey}}</span>\r\n </button>\r\n <button mat-menu-item [matMenuTriggerFor]=\"savedNames\">\r\n <span>Choose Profile</span>\r\n </button>\r\n }\r\n }\r\n\r\n <mat-menu #savedNames='matMenu' panelClass='wide-menu'>\r\n <button mat-menu-item clickEmitter #add='clickEmitter'>\r\n <mat-icon>add</mat-icon>\r\n <span>New</span>\r\n </button>\r\n @for (key of stateKeys$ | async; track key) {\r\n <button mat-menu-item (click)='setProfileState(key)'>\r\n <span>{{key}}</span>\r\n <mat-icon color='warn' (click)='deleteProfileState(key)' stop-propagation>delete_forever</mat-icon>\r\n </button>\r\n }\r\n </mat-menu>\r\n <ng-container *opDialog='add'>\r\n <mat-form-field>\r\n <input class=\"add-key\" matInput #addedKey />\r\n </mat-form-field>\r\n <button mat-button (click)='setProfileState(addedKey.value); add.next(false);' [disabled]=\"!addedKey.value\">\r\n Add\r\n </button>\r\n </ng-container>\r\n </ng-template>\r\n</ng-container>\r\n", styles: [".wide-menu{width:200px!important}.header-wrapper{display:flex;flex-direction:row;justify-content:space-between;width:100%}.flx-row-end{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.flat-menu{line-height:initial;height:initial}.pointer{cursor:pointer}.add-key{width:90%}\n", ".collapse-icon{font-size:16px;height:16px;color:#3f51b5;align-self:flex-start}.collapse-icon:hover{cursor:pointer}.hide{display:none}\n"] }]
234
231
  }], propDecorators: { genericTableComponent: [{
235
232
  type: ViewChild,
236
233
  args: [GenericTableComponent]
@@ -275,4 +272,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
275
272
  }], state$: [{
276
273
  type: Output
277
274
  }] } });
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWYsdUJBQXVCLEVBR3ZCLFNBQVMsRUFDVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBYyxJQUFJLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0YsT0FBTyxFQUFtQixTQUFTLEVBQVksTUFBTSw2QkFBNkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9ILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1B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K0JBQ0Usb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsY0FDbkQsSUFBSSxXQUNQLGdCQUFnQjs4QkFHaUIscUJBQXFCO3NCQUE5RCxTQUFTO3VCQUFDLHFCQUFxQjtnQkFDa0Msc0JBQXNCO3NCQUF2RixlQUFlO3VCQUFDLDBCQUEwQixFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQztnQkFDSixnQkFBZ0I7c0JBQTNFLGVBQWU7dUJBQUMsb0JBQW9CLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO2dCQUM5QixVQUFVO3NCQUFyQyxlQUFlO3VCQUFDLFNBQVM7Z0JBQ1ksV0FBVztzQkFBaEQsZUFBZTt1QkFBQyxtQkFBbUI7Z0JBRTNCLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDTyxRQUFRO3NCQUFwQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBU0csSUFBSTtzQkFBYixNQUFNO2dCQUtHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFFRyxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT3V0cHV0LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgUHJlZGljYXRlLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZnJvbSwgUmVwbGF5U3ViamVjdCwgY29tYmluZUxhdGVzdCwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQXJyYXlBZGRpdGlvbmFsLCBGaWVsZFR5cGUsIE1ldGFEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yZXBvcnQtZGVmJztcclxuaW1wb3J0IHsgZmlyc3QsIGxhc3QsIG1hcCwgdGFwLCB3aXRoTGF0ZXN0RnJvbSwgbWVyZ2VBbGwsIHNjYW4sIHN3aXRjaEFsbCwgc3RhcnRXaXRoLCB0aW1lc3RhbXAsIGRlbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXIgfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RhYmxlLWJ1aWxkZXInO1xyXG5pbXBvcnQgeyBNYXRSb3dEZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJsZSc7XHJcbmltcG9ydCB7IEN1c3RvbUNlbGxEaXJlY3RpdmUsIFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCBUYWJsZUZpbHRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyAgc3RhdGVJcywgVGFibGVTdG9yZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtc3RvcmUnO1xyXG5pbXBvcnQgeyBtYXBBcnJheSwgbm90TnVsbCB9IGZyb20gJy4uLy4uLy4uL3J4anMvcnhqcy1vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBFeHBvcnRUb0NzdlNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQtdG8tY3N2LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcnJheURlZmF1bHRzIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9EZWZhdWx0U2V0dGluZ3MnO1xyXG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXJDb25maWdUb2tlbiB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGFibGVCdWlsZGVyQ29uZmlnJztcclxuaW1wb3J0IHsgSW5pdGlhbGl6YXRpb25TdGF0ZSwgVGFibGVTdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvVGFibGVTdGF0ZSc7XHJcbmltcG9ydCB7IGZpbHRlckRhdGEsIHNvcnREYXRhLCB0Yk5vU2hvd1N5bWJvbCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9zb3J0LWRhdGEtZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBXcmFwcGVyRmlsdGVyU3RvcmUgfSBmcm9tICcuLi90YWJsZS1jb250YWluZXItZmlsdGVyL3RhYmxlLXdyYXBwZXItZmlsdGVyLXN0b3JlJztcclxuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgQ29sdW1uSW5mbyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvQ29sdW1uSW5mbyc7XHJcbmltcG9ydCB7IGRlZmF1bHRTaGFyZVJlcGxheSB9IGZyb20gJy4uLy4uLy4uL3J4anMnO1xyXG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJGdW5jLCBpc0N1c3RvbUZpbHRlciwgaXNGaWx0ZXJJbmZvIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9maWx0ZXItaW5mbyc7XHJcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2RpY3Rpb25hcnknO1xyXG5pbXBvcnQgeyBUYWJsZVdyYXBwZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3RhYmxlLXdyYXBwZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgY3JlYXRlTGlua0NyZWF0b3IgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saW5rLWNyZWF0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IEdlbmVyaWNUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2dlbmVyaWMtdGFibGUvZ2VuZXJpYy10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXJTdGF0ZVN0b3JlIH0gZnJvbSAnLi4vLi4vbmdyeC90YWJsZUJ1aWxkZXJTdGF0ZVN0b3JlJztcclxuaW1wb3J0IHsgY29udGFpbmVySW1wb3J0cyB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLWltcG9ydHMnO1xyXG5pbXBvcnQgeyBpbml0aWFsRmlsdGVyU3RhdGUsIHByZWRpY2F0ZUFuZEZpbHRlckluZm9zLCB1cGRhdGVGaWx0ZXJTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZmlsdGVyLXN0YXRlLmhlbHBlcnMnO1xyXG5pbXBvcnQgeyBpbml0aWFsU29ydFN0YXRlLCB1cGRhdGVTb3J0U3RhdGUgfSBmcm9tICcuL3RhYmxlLWNvbnRhaW5lci5oZWxwZXJzL3NvcnQtc3RhdGUuaGVscGVycyc7XHJcbmltcG9ydCB7IGluaXRpYWxHcm91cEJ5U3RhdGUsIHVwZGF0ZUdyb3VwQnlTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZ3JvdXBCeS5oZWxwZXJzJztcclxuaW1wb3J0IHsgaW5pdGlhbERhdGFTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvZGF0YS1zdGF0ZS5oZWxwZXJzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGItdGFibGUtY29udGFpbmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtY29udGFpbmVyLmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLWNvbnRhaW5lci5jc3MnLCcuLi8uLi9zdHlsZXMvY29sbGFwc2VyLnN0eWxlcy5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbVGFibGVTdG9yZSwgRXhwb3J0VG9Dc3ZTZXJ2aWNlLCBXcmFwcGVyRmlsdGVyU3RvcmVdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogY29udGFpbmVySW1wb3J0c1xyXG59KSBleHBvcnQgY2xhc3MgVGFibGVDb250YWluZXJDb21wb25lbnQ8VCA9IGFueT4ge1xyXG5cclxuICBAVmlld0NoaWxkKEdlbmVyaWNUYWJsZUNvbXBvbmVudCkgcHJpdmF0ZSBnZW5lcmljVGFibGVDb21wb25lbnQhOiBHZW5lcmljVGFibGVDb21wb25lbnQ7XHJcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgY3VzdG9tRmlsdGVyRGlyZWN0aXZlcyE6IFF1ZXJ5TGlzdDxUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZT47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUZpbHRlckRpcmVjdGl2ZSwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgZmlsdGVyRGlyZWN0aXZlcyE6IFF1ZXJ5TGlzdDxUYWJsZUZpbHRlckRpcmVjdGl2ZT47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihNYXRSb3dEZWYpIGN1c3RvbVJvd3MhOiBRdWVyeUxpc3Q8TWF0Um93RGVmPGFueT4+O1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oQ3VzdG9tQ2VsbERpcmVjdGl2ZSkgY3VzdG9tQ2VsbHMhOiBRdWVyeUxpc3Q8Q3VzdG9tQ2VsbERpcmVjdGl2ZT47XHJcblxyXG4gIEBJbnB1dCgpIHRhYmxlSWQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdGFibGVCdWlsZGVyITogVGFibGVCdWlsZGVyO1xyXG4gIEBJbnB1dCgpIGluZGV4Q29sdW1uID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VsZWN0aW9uQ29sdW1uID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdHJhY2tCeSE6IHN0cmluZztcclxuICBASW5wdXQoKSBpc1N0aWNreSA9IHRydWU7XHJcbiAgQElucHV0KCkgc2V0IHBhZ2VTaXplKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuc3RhdGUuc2V0UGFnZVNpemUodmFsdWUpO1xyXG4gIH1cclxuICBASW5wdXQoKSBpbnB1dEZpbHRlcnM/OiBPYnNlcnZhYmxlPEFycmF5PFByZWRpY2F0ZTxUPj4+O1xyXG4gIEBJbnB1dCgpIGdyb3VwSGVhZGVyVGVtcGxhdGUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uJCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBkaXNwbGF5RGF0YVN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxPYnNlcnZhYmxlPFRbXT4+KDEpO1xyXG4gIGRpc3BsYXlEYXRhID0gdGhpcy5kaXNwbGF5RGF0YVN1YmplY3QucGlwZShcclxuICAgIHN3aXRjaEFsbCgpLFxyXG4gICAgZGVsYXkoMCksXHJcbiAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKSxcclxuICApO1xyXG5cclxuICBkYXRhU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PE9ic2VydmFibGU8VFtdPj4oMSk7XHJcbiAgQE91dHB1dCgpIGRhdGEgPSB0aGlzLmRhdGFTdWJqZWN0LnBpcGUoXHJcbiAgICBzd2l0Y2hBbGwoKSxcclxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpLFxyXG5cclxuICApO1xyXG4gIEBPdXRwdXQoKSBvblN0YXRlUmVzZXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uU2F2ZVN0YXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHN0YXRlID0gaW5qZWN0KFRhYmxlU3RvcmUpO1xyXG4gIEBPdXRwdXQoKSBzdGF0ZSQgPSB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUoXHJcbiAgICBtYXAoc3RhdGUgPT4gY2xvbmVEZWVwKHN0YXRlKSksXHJcbiAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKSxcclxuICApO1xyXG4gIGdyb3VwZWRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxib29sZWFuPj4oKTtcclxuICBncm91cGVkID0gdGhpcy5ncm91cGVkU3ViamVjdC5waXBlKFxyXG4gICAgc3dpdGNoQWxsKCksXHJcbiAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKSxcclxuICApO1xyXG4gIG15Q29sdW1ucyQhOiBPYnNlcnZhYmxlPENvbHVtbkluZm9bXT47XHJcbiAgc3RhdGVLZXlzJD86IE9ic2VydmFibGU8c3RyaW5nW10gfCBudWxsPjtcclxuICBjdXJyZW50U3RhdGVLZXkkPzogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG5cclxuICBjb25maWcgPSBpbmplY3QoVGFibGVCdWlsZGVyQ29uZmlnVG9rZW4pO1xyXG4gIGV4cG9ydFRvQ3N2U2VydmljZSA9IGluamVjdChFeHBvcnRUb0NzdlNlcnZpY2U8VD4pO1xyXG4gIHdyYXBwZXIgPSBpbmplY3QoVGFibGVXcmFwcGVyRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG4gIHN0b3JlID0gaW5qZWN0KFRhYmxlQnVpbGRlclN0YXRlU3RvcmUpO1xyXG4gIF8gPSB0aGlzLnN0YXRlLm9uKCB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUobGFzdCgpKSwgZmluYWxTdGF0ZSA9PiB7XHJcbiAgICBpZih0aGlzLnRhYmxlSWQpIHtcclxuICAgICAgdGhpcy5zdG9yZS5zZXRMb2NhbFByb2ZpbGUoe2tleTp0aGlzLnRhYmxlSWQsdmFsdWU6IGZpbmFsU3RhdGV9KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGZpcnN0UGFnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2VuZXJpY1RhYmxlQ29tcG9uZW50Py5wYWdpbmF0b3JDb21wb25lbnQ/LnBhZ2luYXRvcj8uZmlyc3RQYWdlKCk7XHJcbiAgfVxyXG5cclxuICBsYXN0UGFnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2VuZXJpY1RhYmxlQ29tcG9uZW50Py5wYWdpbmF0b3JDb21wb25lbnQ/LnBhZ2luYXRvcj8ubGFzdFBhZ2UoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0U3RhdGUoKSB7XHJcbiAgICB0aGlzLmN1c3RvbUZpbHRlckRpcmVjdGl2ZXMuZm9yRWFjaCggY2YgPT4gY2YucmVzZXQoKSk7XHJcbiAgICB0aGlzLmZpbHRlckRpcmVjdGl2ZXMuZm9yRWFjaCggY2YgPT4gY2YucmVzZXQoKSApO1xyXG4gICAgdGhpcy5zdGF0ZS5yZXNldFN0YXRlKCk7XHJcbiAgICB0aGlzLm9uU3RhdGVSZXNldC5uZXh0KG51bGwpXHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplU3RhdGUoKSB7XHJcbiAgICB0aGlzLnN0YXRlLnNldFRhYmxlU2V0dGluZ3ModGhpcy50YWJsZUJ1aWxkZXIuc2V0dGluZ3MpO1xyXG4gICAgdGhpcy5zdGF0ZS5ydW5PbmNlV2hlbihcclxuICAgICAgc3RhdGVJcyhJbml0aWFsaXphdGlvblN0YXRlLk1ldGFEYXRhTG9hZGVkKSxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIGlmKHRoaXMudGFibGVJZCkge1xyXG4gICAgICAgICAgY29uc3QgcGVyc2lzdGVkU3RhdGUkID0gdGhpcy5zdG9yZS5zZWxlY3RMb2NhbFByb2ZpbGVTdGF0ZSh0aGlzLnRhYmxlSWQpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCggcGVyc2lzdGVkU3RhdGUgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKCFwZXJzaXN0ZWRTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zZXRJbml0aWFsaXphdGlvblN0YXRlKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBub3ROdWxsKCksXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZS51cGRhdGVTdGF0ZUZyb21QZXJzaXN0ZWRTdGF0ZShwZXJzaXN0ZWRTdGF0ZSQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXRlLnNldEluaXRpYWxpemF0aW9uU3RhdGUoSW5pdGlhbGl6YXRpb25TdGF0ZS5Mb2FkZWRGcm9tU3RvcmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBjdXN0b21GaWx0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJlZGljYXRlPFQ+W10+KFtdKTtcclxuICBpbml0aWFsaXplRGF0YSgpIHtcclxuXHJcbiAgICBjb25zdCBwcmVkaWNhdGVGaWx0ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaW5wdXRGaWx0ZXJzPy5waXBlKHN0YXJ0V2l0aChbXSkpID8/IG9mKFtdIGFzIFByZWRpY2F0ZTxUPltdKSwgdGhpcy5jdXN0b21GaWx0ZXJzJF0pXHJcbiAgICAgIC5waXBlKG1hcCgoW2EsIGJdKSA9PiBbLi4uYSwgLi4uYl0pKTtcclxuICAgIFxyXG4gICAgY29uc3QgZmlsdGVyU3RhdGUkID0gcHJlZGljYXRlQW5kRmlsdGVySW5mb3ModGhpcy5zdGF0ZS5maWx0ZXJzJCwgcHJlZGljYXRlRmlsdGVycyQpLnBpcGUoXHJcbiAgICAgIHNjYW4odXBkYXRlRmlsdGVyU3RhdGUsIGluaXRpYWxGaWx0ZXJTdGF0ZSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc29ydHNTdGF0ZSQgPSB0aGlzLnN0YXRlLnNvcnQkLnBpcGUoc2Nhbih1cGRhdGVTb3J0U3RhdGUsIGluaXRpYWxTb3J0U3RhdGUpKTtcclxuICAgIFxyXG4gICAgY29uc3Qgc29ydGVkQW5kRmlsdGVyZWREYXRhJCA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLnRhYmxlQnVpbGRlci5nZXREYXRhJCgpLnBpcGUodGltZXN0YW1wKCkpLFxyXG4gICAgICBzb3J0c1N0YXRlJC5waXBlKHRpbWVzdGFtcCgpKSxcclxuICAgICAgZmlsdGVyU3RhdGUkLnBpcGUodGltZXN0YW1wKCkpXHJcbiAgICBdKS5waXBlKHNjYW4oKHsgbWFwcGVkRGF0YTogcmVzdWx0RGF0YSB9LCBbZGF0YSwgc29ydCwgZl0sIGluZGV4KT0+IHtcclxuXHJcbiAgICAgIGlmKGluZGV4ID09PSAwIHx8IChkYXRhLnRpbWVzdGFtcCA+IHNvcnQudGltZXN0YW1wICYmIGRhdGEudGltZXN0YW1wID4gZi50aW1lc3RhbXApKXtcclxuICAgICAgICByZXR1cm4gKHsgbWFwcGVkRGF0YTogZmlsdGVyRGF0YShzb3J0RGF0YShkYXRhLnZhbHVlICwgc29ydC52YWx1ZS5zb3J0c1RvUnVuICksIGYudmFsdWUuYWxsRmlsdGVycyl9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoc29ydC50aW1lc3RhbXAgPiBmLnRpbWVzdGFtcCl7XHJcbiAgICAgICAgcmV0dXJuICh7IG1hcHBlZERhdGE6IHNvcnREYXRhKHJlc3VsdERhdGEsIHNvcnQudmFsdWUuc29ydHNUb1J1bil9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuICh7IG1hcHBlZERhdGE6IGZpbHRlckRhdGEocmVzdWx0RGF0YSwgZi52YWx1ZS5vbmx5QWRkZWRGaWx0ZXJzIHx8IGYudmFsdWUuYWxsRmlsdGVycywgISFmLnZhbHVlLm9ubHlBZGRlZEZpbHRlcnMpfSk7XHJcbiAgICB9LCBpbml0aWFsRGF0YVN0YXRlKSkucGlwZShcclxuICAgICAgbWFwKCh7IG1hcHBlZERhdGE6IHJlc3VsdERhdGEgfSkgPT4gcmVzdWx0RGF0YS5maWx0ZXIoaXRlbSA9PiAhaXRlbVt0Yk5vU2hvd1N5bWJvbF0pKSxcclxuICAgICAgZGVmYXVsdFNoYXJlUmVwbGF5KClcclxuICAgICAgKVxyXG4gICAgXHJcbiAgICBjb25zdCBmbGF0R3JvdXBlZCQgPSBjb21iaW5lTGF0ZXN0KFtzb3J0ZWRBbmRGaWx0ZXJlZERhdGEkLnBpcGUodGltZXN0YW1wKCkpLCB0aGlzLnN0YXRlLmdyb3VwQnlLZXlzJC5waXBlKHRpbWVzdGFtcCgpKSwgdGhpcy5zdGF0ZS5leHBhbmRlZEdyb3VwcyQucGlwZSh0aW1lc3RhbXAoKSldKS5waXBlKFxyXG4gICAgICBzY2FuKHVwZGF0ZUdyb3VwQnlTdGF0ZSwgaW5pdGlhbEdyb3VwQnlTdGF0ZSksXHJcbiAgICAgIG1hcCgoe2Rpc3BsYXlEYXRhfSkgPT4gZGlzcGxheURhdGEpLFxyXG4gICAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmdyb3VwZWRTdWJqZWN0Lm5leHQoZmxhdEdyb3VwZWQkLnBpcGUobWFwKG1heWJlR3JvdXBlZCA9PiAhIW1heWJlR3JvdXBlZFswXT8uaXNHcm91cEhlYWRlcikpKTtcclxuICAgIHRoaXMuZGlzcGxheURhdGFTdWJqZWN0Lm5leHQoZmxhdEdyb3VwZWQkKTtcclxuICAgIHRoaXMuZGF0YVN1YmplY3QubmV4dChzb3J0ZWRBbmRGaWx0ZXJlZERhdGEkKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pbml0aWFsaXplU3RhdGUoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGEoKTtcclxuXHJcbiAgICBpZih0aGlzLnRhYmxlSWQpIHtcclxuICAgICAgdGhpcy5zdGF0ZUtleXMkID0gdGhpcy5zdG9yZS5zZWxlY3RMb2NhbFByb2ZpbGVLZXlzKHRoaXMudGFibGVJZCk7XHJcbiAgICAgIHRoaXMuY3VycmVudFN0YXRlS2V5JCA9IHRoaXMuc3RvcmUuc2VsZWN0TG9jYWxQcm9maWxlQ3VycmVudEtleSh0aGlzLnRhYmxlSWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0VG9Dc3YoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzb3J0ZWQgPSB0aGlzLmRhdGEucGlwZShcclxuICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zdGF0ZS5zb3J0JCksXHJcbiAgICAgIG1hcCgoW2RhdGEsIHNvcnRlZF0pID0+IHNvcnREYXRhKGRhdGEsIHNvcnRlZCkpXHJcbiAgICApO1xyXG4gICAgdGhpcy5leHBvcnRUb0NzdlNlcnZpY2UuZXhwb3J0VG9Dc3Yoc29ydGVkKTtcclxuICB9XHJcblxyXG4gIHNhdmVTdGF0ZSgpIHtcclxuICAgIHRoaXMuc3RhdGUuZ2V0U2F2YWJsZVN0YXRlKCkucGlwZShcclxuICAgICAgZmlyc3QoKVxyXG4gICAgKS5zdWJzY3JpYmUodGFibGVTdGF0ZSA9PiB7XHJcbiAgICAgIHRoaXMub25TYXZlU3RhdGUubmV4dChudWxsKTtcclxuICAgICAgdGhpcy5zdG9yZS5zYXZlTG9jYWxQcm9maWxlKHsga2V5OiB0aGlzLnRhYmxlSWQsIHZhbHVlOnRhYmxlU3RhdGUsIHBlcnNpc3Q6IHRydWV9ICk7XHJcbiAgICAgIHRoaXMuc3RvcmUuc2V0TG9jYWxQcm9maWxlKHsga2V5OiB0aGlzLnRhYmxlSWQsIHZhbHVlOnRhYmxlU3RhdGUgfSApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQcm9maWxlU3RhdGUodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc3RvcmUuc2V0TG9jYWxQcm9maWxlc1N0YXRlKHtrZXk6dGhpcy50YWJsZUlkLCBjdXJyZW50OiB2YWx9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVByb2ZpbGVTdGF0ZShzdGF0ZUtleTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0b3JlLmRlbGV0ZUxvY2FsUHJvZmlsZSh7a2V5OnRoaXMudGFibGVJZCwgc3RhdGVLZXl9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtbnMoKTtcclxuICAgIHRoaXMuc3RhdGUucnVuT25jZVdoZW4oXHJcbiAgICAgIHN0YXRlSXMoSW5pdGlhbGl6YXRpb25TdGF0ZS5Mb2FkZWRGcm9tU3RvcmUpLFxyXG4gICAgICBzdGF0ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5hZGRGaWx0ZXJEaXJlY3RpdmVzKHN0YXRlKTtcclxuICAgICAgICB0aGlzLnN0YXRlLnVwZGF0ZVN0YXRlKHtpbml0aWFsaXphdGlvblN0YXRlOiBJbml0aWFsaXphdGlvblN0YXRlLlJlYWR5fSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZUNvbHVtbnMoKSB7XHJcbiAgICBjb25zdCBjdXN0b21DZWxsTWFwID0gbmV3IE1hcCh0aGlzLmN1c3RvbUNlbGxzLm1hcChjYyA9PiBbY2MuY3VzdG9tQ2VsbCxjY10pKTtcclxuICAgIHRoaXMuc3RhdGUuc2V0TWV0YURhdGEodGhpcy50YWJsZUJ1aWxkZXIubWV0YURhdGEkIS5waXBlKFxyXG4gICAgICBtYXAoKG1kcykgPT4ge1xyXG4gICAgICAgIG1kcyA9IG1kcy5tYXAodGhpcy5tYXBNZXRhRGF0YXMpO1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAuLi5tZHMsXHJcbiAgICAgICAgICAuLi50aGlzLmN1c3RvbUNlbGxzLm1hcCggY2MgPT4gY2MuZ2V0TWV0YURhdGEobWRzLmZpbmQoIGl0ZW0gPT4gaXRlbS5rZXkgPT09IGNjLmN1c3RvbUNlbGwgKSkgKVxyXG4gICAgICAgIF1cclxuICAgICAgfSlcclxuICAgICkpO1xyXG4gICAgdGhpcy5zdGF0ZS5zZXRMaW5rTWFwcyh0aGlzLnRhYmxlQnVpbGRlci5tZXRhRGF0YSQhLnBpcGUoXHJcbiAgICAgIG1hcCgobWRzKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG1kcy5yZWR1Y2UoKGFjYywgbWQpID0+IHtcclxuICAgICAgICAgIGlmKG1kLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkxpbmspeyBhY2NbbWQua2V5XT0gY3JlYXRlTGlua0NyZWF0b3IobWQpfVxyXG4gICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICB9LHt9KVxyXG4gICAgICB9KVxyXG4gICAgKSlcclxuXHJcbiAgICB0aGlzLm15Q29sdW1ucyQgPSB0aGlzLnN0YXRlLm1ldGFEYXRhQXJyYXkkLnBpcGUoXHJcbiAgICAgIG1hcEFycmF5KCBtZXRhRGF0YSA9PiAoe21ldGFEYXRhLCBjdXN0b21DZWxsOiBjdXN0b21DZWxsTWFwLmdldChtZXRhRGF0YS5rZXkpIX0pKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG1hcE1ldGFEYXRhcyA9IChtZXRhIDogTWV0YURhdGE8VD4pID0+IHtcclxuICAgIGlmKG1ldGEuZmllbGRUeXBlID09PSBGaWVsZFR5cGUuQXJyYXkpe1xyXG4gICAgICBjb25zdCBhZGRpdGlvbmFsID0gey4uLm1ldGEuYWRkaXRpb25hbH0gYXMgQXJyYXlBZGRpdGlvbmFsO1xyXG4gICAgICBhZGRpdGlvbmFsLmFycmF5U3R5bGUgPSBhZGRpdGlvbmFsPy5hcnJheVN0eWxlID8/IEFycmF5RGVmYXVsdHMuYXJyYXlTdHlsZTtcclxuICAgICAgYWRkaXRpb25hbC5saW1pdCA9IGFkZGl0aW9uYWwubGltaXQgPz8gdGhpcy5jb25maWcuYXJyYXlJbmZvPy5saW1pdCA/PyBBcnJheURlZmF1bHRzLmxpbWl0O1xyXG4gICAgICByZXR1cm4gey4uLm1ldGEsYWRkaXRpb25hbH1cclxuICAgIH1cclxuICAgIHJldHVybiBtZXRhO1xyXG4gIH1cclxuXHJcbiAgY29sbGFwc2VIZWFkZXIkID0gdGhpcy5zdGF0ZS5zdGF0ZSQucGlwZShtYXAoc3RhdGUgPT4gc3RhdGUucGVyc2lzdGVkVGFibGVTZXR0aW5ncy5jb2xsYXBzZUhlYWRlcikpO1xyXG5cclxuICBhZGRGaWx0ZXJEaXJlY3RpdmVzID0gKHN0YXRlOiBUYWJsZVN0YXRlKSA9PiB7XHJcbiAgICBsZXQgYWxsRmlsdGVyRGlyZWN0aXZlcyA9IFsuLi50aGlzLmZpbHRlckRpcmVjdGl2ZXMsIC4uLnRoaXMuY3VzdG9tRmlsdGVyRGlyZWN0aXZlc107XHJcbiAgICBpZih0aGlzLndyYXBwZXIpIHtcclxuICAgICAgYWxsRmlsdGVyRGlyZWN0aXZlcyA9IFsuLi5hbGxGaWx0ZXJEaXJlY3RpdmVzLCAuLi50aGlzLndyYXBwZXIucmVnaXN0cmF0aW9uc107XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VzdG9tRmlsdGVyczogKFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlIHwgVGFibGVGaWx0ZXJEaXJlY3RpdmUgKVtdID0gW107XHJcblxyXG4gICAgYWxsRmlsdGVyRGlyZWN0aXZlcy5maWx0ZXIoIGYgPT4gIWYudXNlZCkuZm9yRWFjaCggZiA9PiB7XHJcbiAgICAgIGYudXNlZCA9IHRydWU7XHJcbiAgICAgIGlmKGYuc2F2YWJsZSkge1xyXG4gICAgICAgIHZhciBmaWx0ZXIgPSBzdGF0ZS5maWx0ZXJzW2YuZmlsdGVySWRdO1xyXG4gICAgICAgIGlmKGlzRmlsdGVySW5mbyhmaWx0ZXIpKSB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXJEaXJlY3RpdmU6IFRhYmxlRmlsdGVyRGlyZWN0aXZlID0gZiBhcyBUYWJsZUZpbHRlckRpcmVjdGl2ZTtcclxuICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5maWVsZFR5cGUgPSBmaWx0ZXIuZmllbGRUeXBlO1xyXG4gICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLmZpbHRlclR5cGUgPSBmaWx0ZXIuZmlsdGVyVHlwZTtcclxuICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5zZXRGaWx0ZXJWYWx1ZShmaWx0ZXIuZmlsdGVyVmFsdWUpO1xyXG4gICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLmtleSA9IGZpbHRlci5rZXk7XHJcbiAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUudXBkYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGlzQ3VzdG9tRmlsdGVyKGZpbHRlcikpIHtcclxuICAgICAgICAgIGYuYWN0aXZlID0gZmlsdGVyLmFjdGl2ZSA/PyBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zdGF0ZS5hZGRGaWx0ZXIoKGYuZmlsdGVyJCBhcyBhbnkpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdXN0b21GaWx0ZXJzLnB1c2goZik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGN1c3RvbUZpbHRlcnMkID0gIGZyb20oIGN1c3RvbUZpbHRlcnMubWFwKCBjZiA9PiBjZi5maWx0ZXIkICApKS5waXBlKFxyXG4gICAgICBtZXJnZUFsbCgpLFxyXG4gICAgICBzY2FuKCAoYSxiKT0+IHtcclxuICAgICAgICAgIGlmKGIuYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGFbYi5maWx0ZXJJZF0gPSBpc0N1c3RvbUZpbHRlcihiKSA/IGIucHJlZGljYXRlIDogY3JlYXRlRmlsdGVyRnVuYyhiKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBhW2IuZmlsdGVySWRdIDtcclxuICAgICAgICAgIH1cclxuICAgICAgcmV0dXJuIGE7XHJcbiAgICAgIH0sIHt9IGFzIERpY3Rpb25hcnk8UHJlZGljYXRlPGFueT4+KSxcclxuICAgICAgbWFwKCBmID0+IE9iamVjdC52YWx1ZXMoZikpXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdGF0ZS5vbihjdXN0b21GaWx0ZXJzJCwgKGYpID0+IHtcclxuICAgICAgdGhpcy5jdXN0b21GaWx0ZXJzJC5uZXh0KGYpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250ZW50IHNlbGVjdD1cIltiZWZvcmVdXCIgLz5cclxuXHJcbjxuZy1jb250YWluZXIgbXVsdGlTb3J0ICpuZ3J4TGV0PVwic3RhdGUudGFibGVTZXR0aW5ncyQgYXMgdGFibGVTZXR0aW5nc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItd3JhcHBlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgIEBpZiAoKCEoY29sbGFwc2VIZWFkZXIkIHwgYXN5bmMpKSB8fCB0YWJsZVNldHRpbmdzLnNob3dUaXRsZVdoZW5IZWFkZXJDb2xsYXBzZWQpIHtcclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIudGItaGVhZGVyLXRpdGxlXCIvPlxyXG4gICAgICB9XHJcbiAgICAgIEBpZigoc3RhdGUuZ3JvdXBCeUtleXMkIHwgYXN5bmMpPy5sZW5ndGgpe1xyXG4gICAgICAgIDxncm91cC1ieS1saXN0IC8+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZseC1yb3ctZW5kXCI+XHJcbiAgICAgIDxsaWItZmlsdGVyLWxpc3QgLz5cclxuICAgICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlSGVhZGVyKSB7XHJcbiAgICAgICAgQGlmICghKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSkge1xyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVcIi8+XHJcbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj0ncHJpbWFyeScgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1haW5NZW51XCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI21haW5NZW51PSdtYXRNZW51Jz5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVFeHRyYVwiLz5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBlbHNlIHtcclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWFpbk1lbnVcIiBjbGFzcz1cImZsYXQtbWVudS1idXR0b24gcG9pbnRlclwiPm1vcmVfaG9yaXo8L21hdC1pY29uPlxyXG4gICAgICAgICAgPG1hdC1tZW51ICNtYWluTWVudT0nbWF0TWVudSc+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51XCIvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlck1lbnVFeHRyYVwiLz5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxtYXQtaWNvbiBbbWF0VG9vbHRpcF09XCIoY29sbGFwc2VIZWFkZXIkIHwgYXN5bmMpID8gJ2V4cGFuZCcgOiAnY29sbGFwc2UnXCIgY2xhc3M9XCJjb2xsYXBzZS1pY29uIGhlYWRlclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwic3RhdGUudG9nZ2xlQ29sbGFwc2VIZWFkZXIoKVwiPlxyXG4gICAgICAgICAge3soY29sbGFwc2VIZWFkZXIkIHwgYXN5bmMpID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZSd9fVxyXG4gICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgIH1cclxuXHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdj5cclxuICAgIDx0Yi1nZW5lcmljLXRhYmxlIFtyb3dzXT0nY3VzdG9tUm93cycgW2RhdGEkXT1cImRhdGFcIiBbZGlzcGxheURhdGEkXT1cImRpc3BsYXlEYXRhXCIgW2luZGV4Q29sdW1uXT0naW5kZXhDb2x1bW4nXHJcbiAgICAgIFtzZWxlY3Rpb25Db2x1bW5dPSdzZWxlY3Rpb25Db2x1bW4nIChzZWxlY3Rpb24kKT0nc2VsZWN0aW9uJC5lbWl0KCRldmVudCknIFt0cmFja0J5XT0ndHJhY2tCeSdcclxuICAgICAgW2lzU3RpY2t5XT0naXNTdGlja3knIFtjb2x1bW5JbmZvc109J215Q29sdW1ucyQnIFtncm91cEhlYWRlclRlbXBsYXRlXT1cImdyb3VwSGVhZGVyVGVtcGxhdGVcIlxyXG4gICAgICBbZ3JvdXBlZF09XCIhIShncm91cGVkIHwgYXN5bmMpXCI+XHJcbiAgICA8L3RiLWdlbmVyaWMtdGFibGU+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51PlxyXG4gICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlRmlsdGVyKSB7PHRiLWZpbHRlci1kaXNwbGF5ZXIvPn1cclxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUNvbHVtblNldHRpbmdzKSB7PHRiLWNvbC1kaXNwbGF5ZXIvPn1cclxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZVNvcnQpIHs8dGItc29ydC1tZW51Lz59XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51RXh0cmE+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInJlc2V0U3RhdGUoKVwiPlxyXG4gICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+YXV0b3JlbmV3PC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4+UmVzZXQgdGFibGU8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUV4cG9ydCkge1xyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4cG9ydFRvQ3N2KClcIj5cclxuICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4+RXhwb3J0IFRhYmxlPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIEBpZiAoY3VycmVudFN0YXRlS2V5JCB8IGFzeW5jOyBhcyBjdXJyZW50S2V5KSB7XHJcbiAgICAgIEBpZiAodGFibGVJZCkge1xyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2F2ZVN0YXRlKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5zYXZlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuPlNhdmUgdG8ge3tjdXJyZW50S2V5fX08L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJzYXZlZE5hbWVzXCI+XHJcbiAgICAgICAgICA8c3Bhbj5DaG9vc2UgUHJvZmlsZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIDxtYXQtbWVudSAjc2F2ZWROYW1lcz0nbWF0TWVudScgcGFuZWxDbGFzcz0nd2lkZS1tZW51Jz5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsaWNrRW1pdHRlciAgI2FkZD0nY2xpY2tFbWl0dGVyJz5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj5OZXc8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICBAZm9yIChrZXkgb2Ygc3RhdGVLZXlzJCB8IGFzeW5jOyB0cmFjayBrZXkpIHtcclxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT0nc2V0UHJvZmlsZVN0YXRlKGtleSknPlxyXG4gICAgICAgICAgPHNwYW4+e3trZXl9fTwvc3Bhbj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj0nd2FybicgKGNsaWNrKT0nZGVsZXRlUHJvZmlsZVN0YXRlKGtleSknIHN0b3AtcHJvcGFnYXRpb24+ZGVsZXRlX2ZvcmV2ZXI8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1tZW51PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqb3BEaWFsb2c9J2FkZCc+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJhZGQta2V5XCIgbWF0SW5wdXQgI2FkZGVkS2V5IC8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPSdzZXRQcm9maWxlU3RhdGUoYWRkZWRLZXkudmFsdWUpOyBhZGQubmV4dChmYWxzZSk7JyBbZGlzYWJsZWRdPVwiIWFkZGVkS2V5LnZhbHVlXCI+XHJcbiAgICAgICAgQWRkXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3RhYmxlLWJ1aWxkZXIvY29tcG9uZW50cy90YWJsZS1jb250YWluZXIvdGFibGUtY29udGFpbmVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixlQUFlLEVBRWYsdUJBQXVCLEVBR3ZCLFNBQVMsRUFDVCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBYyxJQUFJLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0YsT0FBTyxFQUFtQixTQUFTLEVBQVksTUFBTSw2QkFBNkIsQ0FBQztBQUNuRixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9ILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RyxPQUFPLEVBQUcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1B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RSxJQUFJLEVBQUM7Z0JBQzlCLFVBQVU7c0JBQXJDLGVBQWU7dUJBQUMsU0FBUztnQkFDWSxXQUFXO3NCQUFoRCxlQUFlO3VCQUFDLG1CQUFtQjtnQkFFM0IsT0FBTztzQkFBZixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFTRyxJQUFJO3NCQUFiLE1BQU07Z0JBS0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPdXRwdXQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBQcmVkaWNhdGUsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG4gIGluamVjdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBmcm9tLCBSZXBsYXlTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBBcnJheUFkZGl0aW9uYWwsIEZpZWxkVHlwZSwgTWV0YURhdGEgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlcG9ydC1kZWYnO1xyXG5pbXBvcnQgeyBmaXJzdCwgbGFzdCwgbWFwLCB0YXAsIHdpdGhMYXRlc3RGcm9tLCBtZXJnZUFsbCwgc2Nhbiwgc3dpdGNoQWxsLCBzdGFydFdpdGgsIHRpbWVzdGFtcCwgZGVsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRhYmxlQnVpbGRlciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvdGFibGUtYnVpbGRlcic7XHJcbmltcG9ydCB7IE1hdFJvd0RlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgQ3VzdG9tQ2VsbERpcmVjdGl2ZSwgVGFibGVDdXN0b21GaWx0ZXJEaXJlY3RpdmUsIFRhYmxlRmlsdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7ICBzdGF0ZUlzLCBUYWJsZVN0b3JlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90YWJsZS1zdG9yZSc7XHJcbmltcG9ydCB7IG1hcEFycmF5LCBub3ROdWxsIH0gZnJvbSAnLi4vLi4vLi4vcnhqcy9yeGpzLW9wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEV4cG9ydFRvQ3N2U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4cG9ydC10by1jc3Yuc2VydmljZSc7XHJcbmltcG9ydCB7IEFycmF5RGVmYXVsdHMgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0RlZmF1bHRTZXR0aW5ncyc7XHJcbmltcG9ydCB7IFRhYmxlQnVpbGRlckNvbmZpZ1Rva2VuIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UYWJsZUJ1aWxkZXJDb25maWcnO1xyXG5pbXBvcnQgeyBJbml0aWFsaXphdGlvblN0YXRlLCBUYWJsZVN0YXRlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UYWJsZVN0YXRlJztcclxuaW1wb3J0IHsgZmlsdGVyRGF0YSwgc29ydERhdGEsIHRiTm9TaG93U3ltYm9sIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL3NvcnQtZGF0YS1mdW5jdGlvbic7XHJcbmltcG9ydCB7IFdyYXBwZXJGaWx0ZXJTdG9yZSB9IGZyb20gJy4uL3RhYmxlLWNvbnRhaW5lci1maWx0ZXIvdGFibGUtd3JhcHBlci1maWx0ZXItc3RvcmUnO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBDb2x1bW5JbmZvIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9Db2x1bW5JbmZvJztcclxuaW1wb3J0IHsgZGVmYXVsdFNoYXJlUmVwbGF5IH0gZnJvbSAnLi4vLi4vLi4vcnhqcyc7XHJcbmltcG9ydCB7IGNyZWF0ZUZpbHRlckZ1bmMsIGlzQ3VzdG9tRmlsdGVyLCBpc0ZpbHRlckluZm8gfSBmcm9tICcuLi8uLi9jbGFzc2VzL2ZpbHRlci1pbmZvJztcclxuaW1wb3J0IHsgRGljdGlvbmFyeSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZGljdGlvbmFyeSc7XHJcbmltcG9ydCB7IFRhYmxlV3JhcHBlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvdGFibGUtd3JhcHBlci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBjcmVhdGVMaW5rQ3JlYXRvciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpbmstY3JlYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2VuZXJpY1RhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vZ2VuZXJpYy10YWJsZS9nZW5lcmljLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRhYmxlQnVpbGRlclN0YXRlU3RvcmUgfSBmcm9tICcuLi8uLi9uZ3J4L3RhYmxlQnVpbGRlclN0YXRlU3RvcmUnO1xyXG5pbXBvcnQgeyBjb250YWluZXJJbXBvcnRzIH0gZnJvbSAnLi90YWJsZS1jb250YWluZXItaW1wb3J0cyc7XHJcbmltcG9ydCB7IGluaXRpYWxGaWx0ZXJTdGF0ZSwgcHJlZGljYXRlQW5kRmlsdGVySW5mb3MsIHVwZGF0ZUZpbHRlclN0YXRlIH0gZnJvbSAnLi90YWJsZS1jb250YWluZXIuaGVscGVycy9maWx0ZXItc3RhdGUuaGVscGVycyc7XHJcbmltcG9ydCB7IGluaXRpYWxTb3J0U3RhdGUsIHVwZGF0ZVNvcnRTdGF0ZSB9IGZyb20gJy4vdGFibGUtY29udGFpbmVyLmhlbHBlcnMvc29ydC1zdGF0ZS5oZWxwZXJzJztcclxuaW1wb3J0IHsgaW5pdGlhbEdyb3VwQnlTdGF0ZSwgdXBkYXRlR3JvdXBCeVN0YXRlIH0gZnJvbSAnLi90YWJsZS1jb250YWluZXIuaGVscGVycy9ncm91cEJ5LmhlbHBlcnMnO1xyXG5pbXBvcnQgeyBpbml0aWFsRGF0YVN0YXRlIH0gZnJvbSAnLi90YWJsZS1jb250YWluZXIuaGVscGVycy9kYXRhLXN0YXRlLmhlbHBlcnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0Yi10YWJsZS1jb250YWluZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jb250YWluZXIuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtY29udGFpbmVyLmNzcycsJy4uLy4uL3N0eWxlcy9jb2xsYXBzZXIuc3R5bGVzLnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtUYWJsZVN0b3JlLCBFeHBvcnRUb0NzdlNlcnZpY2UsIFdyYXBwZXJGaWx0ZXJTdG9yZV0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBjb250YWluZXJJbXBvcnRzXHJcbn0pIGV4cG9ydCBjbGFzcyBUYWJsZUNvbnRhaW5lckNvbXBvbmVudDxUID0gYW55PiB7XHJcblxyXG4gIEBWaWV3Q2hpbGQoR2VuZXJpY1RhYmxlQ29tcG9uZW50KSBwcml2YXRlIGdlbmVyaWNUYWJsZUNvbXBvbmVudCE6IEdlbmVyaWNUYWJsZUNvbXBvbmVudDtcclxuICBAQ29udGVudENoaWxkcmVuKFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBjdXN0b21GaWx0ZXJEaXJlY3RpdmVzITogUXVlcnlMaXN0PFRhYmxlQ3VzdG9tRmlsdGVyRGlyZWN0aXZlPjtcclxuICBAQ29udGVudENoaWxkcmVuKFRhYmxlRmlsdGVyRGlyZWN0aXZlLCB7ZGVzY2VuZGFudHM6IHRydWV9KSBmaWx0ZXJEaXJlY3RpdmVzITogUXVlcnlMaXN0PFRhYmxlRmlsdGVyRGlyZWN0aXZlPjtcclxuICBAQ29udGVudENoaWxkcmVuKE1hdFJvd0RlZikgY3VzdG9tUm93cyE6IFF1ZXJ5TGlzdDxNYXRSb3dEZWY8YW55Pj47XHJcbiAgQENvbnRlbnRDaGlsZHJlbihDdXN0b21DZWxsRGlyZWN0aXZlKSBjdXN0b21DZWxscyE6IFF1ZXJ5TGlzdDxDdXN0b21DZWxsRGlyZWN0aXZlPjtcclxuXHJcbiAgQElucHV0KCkgdGFibGVJZCE6IHN0cmluZztcclxuICBASW5wdXQoKSB0YWJsZUJ1aWxkZXIhOiBUYWJsZUJ1aWxkZXI7XHJcbiAgQElucHV0KCkgaW5kZXhDb2x1bW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWxlY3Rpb25Db2x1bW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB0cmFja0J5ITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlzU3RpY2t5ID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzZXQgcGFnZVNpemUodmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdGF0ZS5zZXRQYWdlU2l6ZSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGlucHV0RmlsdGVycz86IE9ic2VydmFibGU8QXJyYXk8UHJlZGljYXRlPFQ+Pj47XHJcbiAgQElucHV0KCkgZ3JvdXBIZWFkZXJUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb24kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIGRpc3BsYXlEYXRhU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PE9ic2VydmFibGU8VFtdPj4oMSk7XHJcbiAgZGlzcGxheURhdGEgPSB0aGlzLmRpc3BsYXlEYXRhU3ViamVjdC5waXBlKFxyXG4gICAgc3dpdGNoQWxsKCksXHJcbiAgICBkZWxheSgwKSxcclxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpLFxyXG4gICk7XHJcblxyXG4gIGRhdGFTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxUW10+PigxKTtcclxuICBAT3V0cHV0KCkgZGF0YSA9IHRoaXMuZGF0YVN1YmplY3QucGlwZShcclxuICAgIHN3aXRjaEFsbCgpLFxyXG4gICAgZGVmYXVsdFNoYXJlUmVwbGF5KCksXHJcblxyXG4gICk7XHJcbiAgQE91dHB1dCgpIG9uU3RhdGVSZXNldCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25TYXZlU3RhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgc3RhdGUgPSBpbmplY3QoVGFibGVTdG9yZSk7XHJcbiAgQE91dHB1dCgpIHN0YXRlJCA9IHRoaXMuc3RhdGUuZ2V0U2F2YWJsZVN0YXRlKCkucGlwZShcclxuICAgIG1hcChzdGF0ZSA9PiBjbG9uZURlZXAoc3RhdGUpKSxcclxuICAgIGRlZmF1bHRTaGFyZVJlcGxheSgpLFxyXG4gICk7XHJcblxyXG4gIG15Q29sdW1ucyQhOiBPYnNlcnZhYmxlPENvbHVtbkluZm9bXT47XHJcbiAgc3RhdGVLZXlzJD86IE9ic2VydmFibGU8c3RyaW5nW10gfCBudWxsPjtcclxuICBjdXJyZW50U3RhdGVLZXkkPzogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG5cclxuICBjb25maWcgPSBpbmplY3QoVGFibGVCdWlsZGVyQ29uZmlnVG9rZW4pO1xyXG4gIGV4cG9ydFRvQ3N2U2VydmljZSA9IGluamVjdChFeHBvcnRUb0NzdlNlcnZpY2U8VD4pO1xyXG4gIHdyYXBwZXIgPSBpbmplY3QoVGFibGVXcmFwcGVyRGlyZWN0aXZlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG4gIHN0b3JlID0gaW5qZWN0KFRhYmxlQnVpbGRlclN0YXRlU3RvcmUpO1xyXG4gIF8gPSB0aGlzLnN0YXRlLm9uKCB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUobGFzdCgpKSwgZmluYWxTdGF0ZSA9PiB7XHJcbiAgICBpZih0aGlzLnRhYmxlSWQpIHtcclxuICAgICAgdGhpcy5zdG9yZS5zZXRMb2NhbFByb2ZpbGUoe2tleTp0aGlzLnRhYmxlSWQsdmFsdWU6IGZpbmFsU3RhdGV9KTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcblxyXG4gIGZpcnN0UGFnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2VuZXJpY1RhYmxlQ29tcG9uZW50Py5wYWdpbmF0b3JDb21wb25lbnQ/LnBhZ2luYXRvcj8uZmlyc3RQYWdlKCk7XHJcbiAgfVxyXG5cclxuICBsYXN0UGFnZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2VuZXJpY1RhYmxlQ29tcG9uZW50Py5wYWdpbmF0b3JDb21wb25lbnQ/LnBhZ2luYXRvcj8ubGFzdFBhZ2UoKTtcclxuICB9XHJcblxyXG4gIHJlc2V0U3RhdGUoKSB7XHJcbiAgICB0aGlzLmN1c3RvbUZpbHRlckRpcmVjdGl2ZXMuZm9yRWFjaCggY2YgPT4gY2YucmVzZXQoKSk7XHJcbiAgICB0aGlzLmZpbHRlckRpcmVjdGl2ZXMuZm9yRWFjaCggY2YgPT4gY2YucmVzZXQoKSApO1xyXG4gICAgdGhpcy5zdGF0ZS5yZXNldFN0YXRlKCk7XHJcbiAgICB0aGlzLm9uU3RhdGVSZXNldC5uZXh0KG51bGwpXHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplU3RhdGUoKSB7XHJcbiAgICB0aGlzLnN0YXRlLnNldFRhYmxlU2V0dGluZ3ModGhpcy50YWJsZUJ1aWxkZXIuc2V0dGluZ3MpO1xyXG4gICAgdGhpcy5zdGF0ZS5ydW5PbmNlV2hlbihcclxuICAgICAgc3RhdGVJcyhJbml0aWFsaXphdGlvblN0YXRlLk1ldGFEYXRhTG9hZGVkKSxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIGlmKHRoaXMudGFibGVJZCkge1xyXG4gICAgICAgICAgY29uc3QgcGVyc2lzdGVkU3RhdGUkID0gdGhpcy5zdG9yZS5zZWxlY3RMb2NhbFByb2ZpbGVTdGF0ZSh0aGlzLnRhYmxlSWQpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCggcGVyc2lzdGVkU3RhdGUgPT4ge1xyXG4gICAgICAgICAgICAgIGlmKCFwZXJzaXN0ZWRTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zZXRJbml0aWFsaXphdGlvblN0YXRlKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBub3ROdWxsKCksXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZS51cGRhdGVTdGF0ZUZyb21QZXJzaXN0ZWRTdGF0ZShwZXJzaXN0ZWRTdGF0ZSQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnN0YXRlLnNldEluaXRpYWxpemF0aW9uU3RhdGUoSW5pdGlhbGl6YXRpb25TdGF0ZS5Mb2FkZWRGcm9tU3RvcmUpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBjdXN0b21GaWx0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UHJlZGljYXRlPFQ+W10+KFtdKTtcclxuICBpbml0aWFsaXplRGF0YSgpIHtcclxuXHJcbiAgICBjb25zdCBwcmVkaWNhdGVGaWx0ZXJzJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuaW5wdXRGaWx0ZXJzPy5waXBlKHN0YXJ0V2l0aChbXSkpID8/IG9mKFtdIGFzIFByZWRpY2F0ZTxUPltdKSwgdGhpcy5jdXN0b21GaWx0ZXJzJF0pXHJcbiAgICAgIC5waXBlKG1hcCgoW2EsIGJdKSA9PiBbLi4uYSwgLi4uYl0pKTtcclxuICAgIFxyXG4gICAgY29uc3QgZmlsdGVyU3RhdGUkID0gcHJlZGljYXRlQW5kRmlsdGVySW5mb3ModGhpcy5zdGF0ZS5maWx0ZXJzJCwgcHJlZGljYXRlRmlsdGVycyQpLnBpcGUoXHJcbiAgICAgIHNjYW4odXBkYXRlRmlsdGVyU3RhdGUsIGluaXRpYWxGaWx0ZXJTdGF0ZSlcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc29ydHNTdGF0ZSQgPSB0aGlzLnN0YXRlLnNvcnQkLnBpcGUoc2Nhbih1cGRhdGVTb3J0U3RhdGUsIGluaXRpYWxTb3J0U3RhdGUpKTtcclxuICAgIFxyXG4gICAgY29uc3Qgc29ydGVkQW5kRmlsdGVyZWREYXRhJCA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLnRhYmxlQnVpbGRlci5nZXREYXRhJCgpLnBpcGUodGltZXN0YW1wKCkpLFxyXG4gICAgICBzb3J0c1N0YXRlJC5waXBlKHRpbWVzdGFtcCgpKSxcclxuICAgICAgZmlsdGVyU3RhdGUkLnBpcGUodGltZXN0YW1wKCkpXHJcbiAgICBdKS5waXBlKHNjYW4oKHsgbWFwcGVkRGF0YTogcmVzdWx0RGF0YSB9LCBbZGF0YSwgc29ydCwgZl0sIGluZGV4KT0+IHtcclxuXHJcbiAgICAgIGlmKGluZGV4ID09PSAwIHx8IChkYXRhLnRpbWVzdGFtcCA+IHNvcnQudGltZXN0YW1wICYmIGRhdGEudGltZXN0YW1wID4gZi50aW1lc3RhbXApKXtcclxuICAgICAgICByZXR1cm4gKHsgbWFwcGVkRGF0YTogZmlsdGVyRGF0YShzb3J0RGF0YShkYXRhLnZhbHVlICwgc29ydC52YWx1ZS5zb3J0c1RvUnVuICksIGYudmFsdWUuYWxsRmlsdGVycyl9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoc29ydC50aW1lc3RhbXAgPiBmLnRpbWVzdGFtcCl7XHJcbiAgICAgICAgcmV0dXJuICh7IG1hcHBlZERhdGE6IHNvcnREYXRhKHJlc3VsdERhdGEsIHNvcnQudmFsdWUuc29ydHNUb1J1bil9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuICh7IG1hcHBlZERhdGE6IGZpbHRlckRhdGEocmVzdWx0RGF0YSwgZi52YWx1ZS5vbmx5QWRkZWRGaWx0ZXJzIHx8IGYudmFsdWUuYWxsRmlsdGVycywgISFmLnZhbHVlLm9ubHlBZGRlZEZpbHRlcnMpfSk7XHJcbiAgICB9LCBpbml0aWFsRGF0YVN0YXRlKSkucGlwZShcclxuICAgICAgbWFwKCh7IG1hcHBlZERhdGE6IHJlc3VsdERhdGEgfSkgPT4gcmVzdWx0RGF0YS5maWx0ZXIoaXRlbSA9PiAhaXRlbVt0Yk5vU2hvd1N5bWJvbF0pKSxcclxuICAgICAgZGVmYXVsdFNoYXJlUmVwbGF5KClcclxuICAgICAgKVxyXG4gICAgXHJcbiAgICBjb25zdCBmbGF0R3JvdXBlZCQgPSBjb21iaW5lTGF0ZXN0KFtzb3J0ZWRBbmRGaWx0ZXJlZERhdGEkLnBpcGUodGltZXN0YW1wKCkpLCB0aGlzLnN0YXRlLmdyb3VwQnlLZXlzJC5waXBlKHRpbWVzdGFtcCgpKSwgdGhpcy5zdGF0ZS5leHBhbmRlZEdyb3VwcyQucGlwZSh0aW1lc3RhbXAoKSldKS5waXBlKFxyXG4gICAgICBzY2FuKHVwZGF0ZUdyb3VwQnlTdGF0ZSwgaW5pdGlhbEdyb3VwQnlTdGF0ZSksXHJcbiAgICAgIG1hcCgoe2Rpc3BsYXlEYXRhfSkgPT4gZGlzcGxheURhdGEpLFxyXG4gICAgICBkZWZhdWx0U2hhcmVSZXBsYXkoKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmRpc3BsYXlEYXRhU3ViamVjdC5uZXh0KGZsYXRHcm91cGVkJCk7XHJcbiAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQoc29ydGVkQW5kRmlsdGVyZWREYXRhJCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVN0YXRlKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVEYXRhKCk7XHJcblxyXG4gICAgaWYodGhpcy50YWJsZUlkKSB7XHJcbiAgICAgIHRoaXMuc3RhdGVLZXlzJCA9IHRoaXMuc3RvcmUuc2VsZWN0TG9jYWxQcm9maWxlS2V5cyh0aGlzLnRhYmxlSWQpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTdGF0ZUtleSQgPSB0aGlzLnN0b3JlLnNlbGVjdExvY2FsUHJvZmlsZUN1cnJlbnRLZXkodGhpcy50YWJsZUlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydFRvQ3N2KCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc29ydGVkID0gdGhpcy5kYXRhLnBpcGUoXHJcbiAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuc3RhdGUuc29ydCQpLFxyXG4gICAgICBtYXAoKFtkYXRhLCBzb3J0ZWRdKSA9PiBzb3J0RGF0YShkYXRhLCBzb3J0ZWQpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuZXhwb3J0VG9Dc3ZTZXJ2aWNlLmV4cG9ydFRvQ3N2KHNvcnRlZCk7XHJcbiAgfVxyXG5cclxuICBzYXZlU3RhdGUoKSB7XHJcbiAgICB0aGlzLnN0YXRlLmdldFNhdmFibGVTdGF0ZSgpLnBpcGUoXHJcbiAgICAgIGZpcnN0KClcclxuICAgICkuc3Vic2NyaWJlKHRhYmxlU3RhdGUgPT4ge1xyXG4gICAgICB0aGlzLm9uU2F2ZVN0YXRlLm5leHQobnVsbCk7XHJcbiAgICAgIHRoaXMuc3RvcmUuc2F2ZUxvY2FsUHJvZmlsZSh7IGtleTogdGhpcy50YWJsZUlkLCB2YWx1ZTp0YWJsZVN0YXRlLCBwZXJzaXN0OiB0cnVlfSApO1xyXG4gICAgICB0aGlzLnN0b3JlLnNldExvY2FsUHJvZmlsZSh7IGtleTogdGhpcy50YWJsZUlkLCB2YWx1ZTp0YWJsZVN0YXRlIH0gKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJvZmlsZVN0YXRlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0b3JlLnNldExvY2FsUHJvZmlsZXNTdGF0ZSh7a2V5OnRoaXMudGFibGVJZCwgY3VycmVudDogdmFsfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVQcm9maWxlU3RhdGUoc3RhdGVLZXk6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdG9yZS5kZWxldGVMb2NhbFByb2ZpbGUoe2tleTp0aGlzLnRhYmxlSWQsIHN0YXRlS2V5fSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5zKCk7XHJcbiAgICB0aGlzLnN0YXRlLnJ1bk9uY2VXaGVuKFxyXG4gICAgICBzdGF0ZUlzKEluaXRpYWxpemF0aW9uU3RhdGUuTG9hZGVkRnJvbVN0b3JlKSxcclxuICAgICAgc3RhdGUgPT4ge1xyXG4gICAgICAgIHRoaXMuYWRkRmlsdGVyRGlyZWN0aXZlcyhzdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZS51cGRhdGVTdGF0ZSh7aW5pdGlhbGl6YXRpb25TdGF0ZTogSW5pdGlhbGl6YXRpb25TdGF0ZS5SZWFkeX0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpemVDb2x1bW5zKCkge1xyXG4gICAgY29uc3QgY3VzdG9tQ2VsbE1hcCA9IG5ldyBNYXAodGhpcy5jdXN0b21DZWxscy5tYXAoY2MgPT4gW2NjLmN1c3RvbUNlbGwsY2NdKSk7XHJcbiAgICB0aGlzLnN0YXRlLnNldE1ldGFEYXRhKHRoaXMudGFibGVCdWlsZGVyLm1ldGFEYXRhJCEucGlwZShcclxuICAgICAgbWFwKChtZHMpID0+IHtcclxuICAgICAgICBtZHMgPSBtZHMubWFwKHRoaXMubWFwTWV0YURhdGFzKTtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgLi4ubWRzLFxyXG4gICAgICAgICAgLi4udGhpcy5jdXN0b21DZWxscy5tYXAoIGNjID0+IGNjLmdldE1ldGFEYXRhKG1kcy5maW5kKCBpdGVtID0+IGl0ZW0ua2V5ID09PSBjYy5jdXN0b21DZWxsICkpIClcclxuICAgICAgICBdXHJcbiAgICAgIH0pXHJcbiAgICApKTtcclxuICAgIHRoaXMuc3RhdGUuc2V0TGlua01hcHModGhpcy50YWJsZUJ1aWxkZXIubWV0YURhdGEkIS5waXBlKFxyXG4gICAgICBtYXAoKG1kcykgPT4ge1xyXG4gICAgICAgIHJldHVybiBtZHMucmVkdWNlKChhY2MsIG1kKSA9PiB7XHJcbiAgICAgICAgICBpZihtZC5maWVsZFR5cGUgPT09IEZpZWxkVHlwZS5MaW5rKXsgYWNjW21kLmtleV09IGNyZWF0ZUxpbmtDcmVhdG9yKG1kKX1cclxuICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSx7fSlcclxuICAgICAgfSlcclxuICAgICkpXHJcblxyXG4gICAgdGhpcy5teUNvbHVtbnMkID0gdGhpcy5zdGF0ZS5tZXRhRGF0YUFycmF5JC5waXBlKFxyXG4gICAgICBtYXBBcnJheSggbWV0YURhdGEgPT4gKHttZXRhRGF0YSwgY3VzdG9tQ2VsbDogY3VzdG9tQ2VsbE1hcC5nZXQobWV0YURhdGEua2V5KSF9KSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBtYXBNZXRhRGF0YXMgPSAobWV0YSA6IE1ldGFEYXRhPFQ+KSA9PiB7XHJcbiAgICBpZihtZXRhLmZpZWxkVHlwZSA9PT0gRmllbGRUeXBlLkFycmF5KXtcclxuICAgICAgY29uc3QgYWRkaXRpb25hbCA9IHsuLi5tZXRhLmFkZGl0aW9uYWx9IGFzIEFycmF5QWRkaXRpb25hbDtcclxuICAgICAgYWRkaXRpb25hbC5hcnJheVN0eWxlID0gYWRkaXRpb25hbD8uYXJyYXlTdHlsZSA/PyBBcnJheURlZmF1bHRzLmFycmF5U3R5bGU7XHJcbiAgICAgIGFkZGl0aW9uYWwubGltaXQgPSBhZGRpdGlvbmFsLmxpbWl0ID8/IHRoaXMuY29uZmlnLmFycmF5SW5mbz8ubGltaXQgPz8gQXJyYXlEZWZhdWx0cy5saW1pdDtcclxuICAgICAgcmV0dXJuIHsuLi5tZXRhLGFkZGl0aW9uYWx9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWV0YTtcclxuICB9XHJcblxyXG4gIGNvbGxhcHNlSGVhZGVyJCA9IHRoaXMuc3RhdGUuc3RhdGUkLnBpcGUobWFwKHN0YXRlID0+IHN0YXRlLnBlcnNpc3RlZFRhYmxlU2V0dGluZ3MuY29sbGFwc2VIZWFkZXIpKTtcclxuXHJcbiAgYWRkRmlsdGVyRGlyZWN0aXZlcyA9IChzdGF0ZTogVGFibGVTdGF0ZSkgPT4ge1xyXG4gICAgbGV0IGFsbEZpbHRlckRpcmVjdGl2ZXMgPSBbLi4udGhpcy5maWx0ZXJEaXJlY3RpdmVzLCAuLi50aGlzLmN1c3RvbUZpbHRlckRpcmVjdGl2ZXNdO1xyXG4gICAgaWYodGhpcy53cmFwcGVyKSB7XHJcbiAgICAgIGFsbEZpbHRlckRpcmVjdGl2ZXMgPSBbLi4uYWxsRmlsdGVyRGlyZWN0aXZlcywgLi4udGhpcy53cmFwcGVyLnJlZ2lzdHJhdGlvbnNdO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1c3RvbUZpbHRlcnM6IChUYWJsZUN1c3RvbUZpbHRlckRpcmVjdGl2ZSB8IFRhYmxlRmlsdGVyRGlyZWN0aXZlIClbXSA9IFtdO1xyXG5cclxuICAgIGFsbEZpbHRlckRpcmVjdGl2ZXMuZmlsdGVyKCBmID0+ICFmLnVzZWQpLmZvckVhY2goIGYgPT4ge1xyXG4gICAgICBmLnVzZWQgPSB0cnVlO1xyXG4gICAgICBpZihmLnNhdmFibGUpIHtcclxuICAgICAgICB2YXIgZmlsdGVyID0gc3RhdGUuZmlsdGVyc1tmLmZpbHRlcklkXTtcclxuICAgICAgICBpZihpc0ZpbHRlckluZm8oZmlsdGVyKSkge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyRGlyZWN0aXZlOiBUYWJsZUZpbHRlckRpcmVjdGl2ZSA9IGYgYXMgVGFibGVGaWx0ZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUuZmllbGRUeXBlID0gZmlsdGVyLmZpZWxkVHlwZTtcclxuICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5maWx0ZXJUeXBlID0gZmlsdGVyLmZpbHRlclR5cGU7XHJcbiAgICAgICAgICBmaWx0ZXJEaXJlY3RpdmUuc2V0RmlsdGVyVmFsdWUoZmlsdGVyLmZpbHRlclZhbHVlKTtcclxuICAgICAgICAgIGZpbHRlckRpcmVjdGl2ZS5rZXkgPSBmaWx0ZXIua2V5O1xyXG4gICAgICAgICAgZmlsdGVyRGlyZWN0aXZlLnVwZGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpc0N1c3RvbUZpbHRlcihmaWx0ZXIpKSB7XHJcbiAgICAgICAgICBmLmFjdGl2ZSA9IGZpbHRlci5hY3RpdmUgPz8gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhdGUuYWRkRmlsdGVyKChmLmZpbHRlciQgYXMgYW55KSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3VzdG9tRmlsdGVycy5wdXNoKGYpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjdXN0b21GaWx0ZXJzJCA9ICBmcm9tKCBjdXN0b21GaWx0ZXJzLm1hcCggY2YgPT4gY2YuZmlsdGVyJCAgKSkucGlwZShcclxuICAgICAgbWVyZ2VBbGwoKSxcclxuICAgICAgc2NhbiggKGEsYik9PiB7XHJcbiAgICAgICAgICBpZihiLmFjdGl2ZSkge1xyXG4gICAgICAgICAgICBhW2IuZmlsdGVySWRdID0gaXNDdXN0b21GaWx0ZXIoYikgPyBiLnByZWRpY2F0ZSA6IGNyZWF0ZUZpbHRlckZ1bmMoYik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWxldGUgYVtiLmZpbHRlcklkXSA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIHJldHVybiBhO1xyXG4gICAgICB9LCB7fSBhcyBEaWN0aW9uYXJ5PFByZWRpY2F0ZTxhbnk+PiksXHJcbiAgICAgIG1hcCggZiA9PiBPYmplY3QudmFsdWVzKGYpKVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3RhdGUub24oY3VzdG9tRmlsdGVycyQsIChmKSA9PiB7XHJcbiAgICAgIHRoaXMuY3VzdG9tRmlsdGVycyQubmV4dChmKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJbYmVmb3JlXVwiIC8+XHJcblxyXG48bmctY29udGFpbmVyIG11bHRpU29ydCAqbmdyeExldD1cInN0YXRlLnRhYmxlU2V0dGluZ3MkIGFzIHRhYmxlU2V0dGluZ3NcIj5cclxuICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXdyYXBwZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxyXG4gICAgICBAaWYgKCghKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSkgfHwgdGFibGVTZXR0aW5ncy5zaG93VGl0bGVXaGVuSGVhZGVyQ29sbGFwc2VkKSB7XHJcbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRiLWhlYWRlci10aXRsZVwiLz5cclxuICAgICAgfVxyXG4gICAgICBAaWYoKHN0YXRlLmdyb3VwQnlLZXlzJCB8IGFzeW5jKT8ubGVuZ3RoKXtcclxuICAgICAgICA8Z3JvdXAtYnktbGlzdCAvPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbHgtcm93LWVuZFwiPlxyXG4gICAgICA8bGliLWZpbHRlci1saXN0IC8+XHJcbiAgICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUhlYWRlcikge1xyXG4gICAgICAgIEBpZiAoIShjb2xsYXBzZUhlYWRlciQgfCBhc3luYykpIHtcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51XCIvPlxyXG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gY29sb3I9J3ByaW1hcnknIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYWluTWVudVwiPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPG1hdC1tZW51ICNtYWluTWVudT0nbWF0TWVudSc+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51RXh0cmFcIi8+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgIH1cclxuICAgICAgICBAZWxzZSB7XHJcbiAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1haW5NZW51XCIgY2xhc3M9XCJmbGF0LW1lbnUtYnV0dG9uIHBvaW50ZXJcIj5tb3JlX2hvcml6PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxtYXQtbWVudSAjbWFpbk1lbnU9J21hdE1lbnUnPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyTWVudVwiLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJNZW51RXh0cmFcIi8+XHJcbiAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgIH1cclxuICAgICAgICA8bWF0LWljb24gW21hdFRvb2x0aXBdPVwiKGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdleHBhbmQnIDogJ2NvbGxhcHNlJ1wiIGNsYXNzPVwiY29sbGFwc2UtaWNvbiBoZWFkZXJcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInN0YXRlLnRvZ2dsZUNvbGxhcHNlSGVhZGVyKClcIj5cclxuICAgICAgICAgIHt7KGNvbGxhcHNlSGVhZGVyJCB8IGFzeW5jKSA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnfX1cclxuICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICB9XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXY+XHJcbiAgICA8dGItZ2VuZXJpYy10YWJsZSBbcm93c109J2N1c3RvbVJvd3MnIFtkYXRhJF09XCJkYXRhXCIgW2Rpc3BsYXlEYXRhJF09XCJkaXNwbGF5RGF0YVwiIFtpbmRleENvbHVtbl09J2luZGV4Q29sdW1uJ1xyXG4gICAgICBbc2VsZWN0aW9uQ29sdW1uXT0nc2VsZWN0aW9uQ29sdW1uJyAoc2VsZWN0aW9uJCk9J3NlbGVjdGlvbiQuZW1pdCgkZXZlbnQpJyBbdHJhY2tCeV09J3RyYWNrQnknXHJcbiAgICAgIFtpc1N0aWNreV09J2lzU3RpY2t5JyBbY29sdW1uSW5mb3NdPSdteUNvbHVtbnMkJyBbZ3JvdXBIZWFkZXJUZW1wbGF0ZV09XCJncm91cEhlYWRlclRlbXBsYXRlXCI+XHJcbiAgICA8L3RiLWdlbmVyaWMtdGFibGU+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51PlxyXG4gICAgQGlmICghdGFibGVTZXR0aW5ncy5oaWRlRmlsdGVyKSB7PHRiLWZpbHRlci1kaXNwbGF5ZXIvPn1cclxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUNvbHVtblNldHRpbmdzKSB7PHRiLWNvbC1kaXNwbGF5ZXIvPn1cclxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZVNvcnQpIHs8dGItc29ydC1tZW51Lz59XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51RXh0cmE+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInJlc2V0U3RhdGUoKVwiPlxyXG4gICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+YXV0b3JlbmV3PC9tYXQtaWNvbj5cclxuICAgICAgPHNwYW4+UmVzZXQgdGFibGU8L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIEBpZiAoIXRhYmxlU2V0dGluZ3MuaGlkZUV4cG9ydCkge1xyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImV4cG9ydFRvQ3N2KClcIj5cclxuICAgICAgICA8bWF0LWljb24gY29sb3I9XCJwcmltYXJ5XCI+ZmlsZV9kb3dubG9hZDwvbWF0LWljb24+XHJcbiAgICAgICAgPHNwYW4+RXhwb3J0IFRhYmxlPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuICAgIEBpZiAoY3VycmVudFN0YXRlS2V5JCB8IGFzeW5jOyBhcyBjdXJyZW50S2V5KSB7XHJcbiAgICAgIEBpZiAodGFibGVJZCkge1xyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwic2F2ZVN0YXRlKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5zYXZlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDxzcGFuPlNhdmUgdG8ge3tjdXJyZW50S2V5fX08L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJzYXZlZE5hbWVzXCI+XHJcbiAgICAgICAgICA8c3Bhbj5DaG9vc2UgUHJvZmlsZTwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIDxtYXQtbWVudSAjc2F2ZWROYW1lcz0nbWF0TWVudScgcGFuZWxDbGFzcz0nd2lkZS1tZW51Jz5cclxuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsaWNrRW1pdHRlciAgI2FkZD0nY2xpY2tFbWl0dGVyJz5cclxuICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cclxuICAgICAgICA8c3Bhbj5OZXc8L3NwYW4+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICBAZm9yIChrZXkgb2Ygc3RhdGVLZXlzJCB8IGFzeW5jOyB0cmFjayBrZXkpIHtcclxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT0nc2V0UHJvZmlsZVN0YXRlKGtleSknPlxyXG4gICAgICAgICAgPHNwYW4+e3trZXl9fTwvc3Bhbj5cclxuICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj0nd2FybicgKGNsaWNrKT0nZGVsZXRlUHJvZmlsZVN0YXRlKGtleSknIHN0b3AtcHJvcGFnYXRpb24+ZGVsZXRlX2ZvcmV2ZXI8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICB9XHJcbiAgICA8L21hdC1tZW51PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqb3BEaWFsb2c9J2FkZCc+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJhZGQta2V5XCIgbWF0SW5wdXQgI2FkZGVkS2V5IC8+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPSdzZXRQcm9maWxlU3RhdGUoYWRkZWRLZXkudmFsdWUpOyBhZGQubmV4dChmYWxzZSk7JyBbZGlzYWJsZWRdPVwiIWFkZGVkS2V5LnZhbHVlXCI+XHJcbiAgICAgICAgQWRkXHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==
@@ -32,4 +32,4 @@ export var ArrayStyle;
32
32
  ArrayStyle[ArrayStyle["CommaDelimited"] = 0] = "CommaDelimited";
33
33
  ArrayStyle[ArrayStyle["NewLine"] = 1] = "NewLine";
34
34
  })(ArrayStyle || (ArrayStyle = {}));
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2ludGVyZmFjZXMvcmVwb3J0LWRlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLENBQU4sSUFBWSxTQWVYO0FBZkQsV0FBWSxTQUFTO0lBQ2pCLCtDQUFXLENBQUE7SUFDWCx5Q0FBUSxDQUFBO0lBQ1IseUNBQVEsQ0FBQTtJQUNSLGlEQUFZLENBQUE7SUFDWixpREFBWSxDQUFBO0lBQ1osMkNBQVMsQ0FBQTtJQUNULDZDQUFVLENBQUE7SUFDViw2Q0FBVSxDQUFBO0lBQ1YsNkNBQVUsQ0FBQTtJQUNWLCtDQUFXLENBQUE7SUFDWCx3REFBZ0IsQ0FBQTtJQUNoQixzREFBZSxDQUFBO0lBQ2YsMENBQVMsQ0FBQTtJQUNULGtEQUFhLENBQUE7QUFDakIsQ0FBQyxFQWZXLFNBQVMsS0FBVCxTQUFTLFFBZXBCO0FBRUQsTUFBTSxDQUFOLElBQVksYUFHWDtBQUhELFdBQVksYUFBYTtJQUNyQiw0QkFBVSxDQUFBO0lBQ1YsOEJBQVksQ0FBQTtBQUNoQixDQUFDLEVBSFcsYUFBYSxLQUFiLGFBQWEsUUFHeEI7QUFFRCxNQUFNLENBQU4sSUFBWSxNQUtYO0FBTEQsV0FBWSxNQUFNO0lBQ2hCLDBCQUFnQixDQUFBO0lBQ2hCLHdCQUFjLENBQUE7SUFDZCw0QkFBa0IsQ0FBQTtJQUNsQixzQkFBWSxDQUFBO0FBQ2QsQ0FBQyxFQUxXLE1BQU0sS0FBTixNQUFNLFFBS2pCO0FBbUdELE1BQU0sQ0FBTixJQUFZLFVBR1g7QUFIRCxXQUFZLFVBQVU7SUFDcEIsK0RBQWMsQ0FBQTtJQUNkLGlEQUFPLENBQUE7QUFDVCxDQUFDLEVBSFcsVUFBVSxLQUFWLFVBQVUsUUFHckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi9kaWN0aW9uYXJ5JztcclxuaW1wb3J0IHsgUGlwZVRyYW5zZm9ybSwgUHJlZGljYXRlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXJFeHBvcnQgfSBmcm9tICcuLi9jbGFzc2VzL1RhYmxlQnVpbGRlckNvbmZpZyc7XHJcbmltcG9ydCB7IFF1ZXJ5UGFyYW1zSGFuZGxpbmcgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuXHJcbmV4cG9ydCBlbnVtIEZpZWxkVHlwZSB7XHJcbiAgICBVbmtub3duID0gMCxcclxuICAgIERhdGUgPSAxLFxyXG4gICAgTGluayA9IDIsXHJcbiAgICBJbWFnZVVybCA9IDMsXHJcbiAgICBDdXJyZW5jeSA9IDQsXHJcbiAgICBBcnJheSA9IDUsXHJcbiAgICBIaWRkZW4gPSA2LFxyXG4gICAgTnVtYmVyID0gNyxcclxuICAgIFN0cmluZyA9IDgsXHJcbiAgICBCb29sZWFuID0gOSxcclxuICAgIFBob25lTnVtYmVyID0gMTAsXHJcbiAgICBFeHByZXNzaW9uID0gMTEsXHJcbiAgICBFbnVtID0gMTIsXHJcbiAgICBEYXRlVGltZSA9IDEzLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBTb3J0RGlyZWN0aW9uIHtcclxuICAgIGFzYz0gJ2FzYycsXHJcbiAgICBkZXNjPSAnZGVzYydcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVGFyZ2V0IHtcclxuICBCbGFuayA9ICdfYmxhbmsnLFxyXG4gIFNlbGYgPSAnX3NlbGYnLFxyXG4gIFBhcmVudCA9ICdfcGFyZW50JyxcclxuICBUb3AgPSAnX3RvcCdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZXRhRGF0YTxUID0gYW55LCBBZGRpdGlvbmFsRmllbGRzIGV4dGVuZHMgc3RyaW5nW10gPSBbXT4ge1xyXG4gIGtleTogKGtleW9mIFQgfCBBZGRpdGlvbmFsRmllbGRzW251bWJlcl0pICYgc3RyaW5nO1xyXG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xyXG4gIGZpZWxkVHlwZTogRmllbGRUeXBlO1xyXG4gIGFkZGl0aW9uYWw/OiBBZGRpdGlvbmFsPFQ+O1xyXG4gIG9yZGVyPzogbnVtYmVyO1xyXG4gIHByZVNvcnQ/OiBTb3J0RGVmO1xyXG4gIF9pbnRlcm5hbE5vdFVzZXJEZWZpbmVkPzogYm9vbGVhbjtcclxuICB3aWR0aD86IHN0cmluZztcclxuICBub0V4cG9ydD86IGJvb2xlYW47XHJcbiAgbm9GaWx0ZXI/OiBib29sZWFuO1xyXG4gIG5vU29ydD86IGJvb2xlYW47XHJcbiAgY3VzdG9tQ2VsbD86IGJvb2xlYW47XHJcbiAgdHJhbnNmb3JtPzogKChvOiBULCAuLi5hcmdzOiBhbnlbXSk9PiBhbnkpIHwgKChvOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKT0+IGFueSkgfCBQaXBlVHJhbnNmb3JtO1xyXG4gIGNsaWNrPzogKGVsZW1lbnQ6IFQsIGtleTogc3RyaW5nICkgPT4gdm9pZDtcclxuICB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgY2xhc3Nlcz86IERpY3Rpb25hcnk8UHJlZGljYXRlPFQ+PjtcclxuICB0b29sVGlwPzogc3RyaW5nO1xyXG4gIHVzZUljb24/OiBib29sZWFuO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgIFJlcG9ydERlZjxEYXRhVHlwZSA9IGFueT4ge1xyXG4gICAgZGF0YTogRGF0YVR5cGVbXTtcclxuICAgIG1ldGFEYXRhOiBNZXRhRGF0YSBbXTtcclxuICAgIHRvdGFsUmVjb3Jkcz86IG51bWJlcjtcclxuICAgIGNvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU29ydERlZiB7XHJcbiAgICBkaXJlY3Rpb246IFNvcnREaXJlY3Rpb247XHJcbiAgICBwcmVjZWRlbmNlPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlck9wdGlvbnMge1xyXG4gIGZpbHRlcmFibGVWYWx1ZXMgOiBzdHJpbmdbXVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVRpbWVPcHRpb25zIHtcclxuICBmb3JtYXQ/OiBzdHJpbmc7XHJcbiAgaW5jbHVkZVNlY29uZHM/OiBib29sZWFuO1xyXG4gIGluY2x1ZGVNaWxsaXNlY29uZHM6IGJvb2xlYW47XHJcbn1cclxudHlwZSBpbnRlcnBvbGF0ZWRSb3V0ZSA9IHN0cmluZztcclxuZXhwb3J0IGludGVyZmFjZSBBZGRpdGlvbmFsPFQgPSBhbnk+IHtcclxuICBsaW5rPyA6IHtcclxuICAgIGJhc2U/OiBzdHJpbmc7XHJcbiAgICB1cmxLZXk/OiBzdHJpbmc7XHJcbiAgICB0YXJnZXQ/OiBUYXJnZXQ7XHJcbiAgICB1c2VSb3V0ZXJMaW5rPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogSWYgeW91IHdhbnQgdG8gdXNlIGEgcm91dGUgd2l0aCBpbnRlcnBvbGF0ZWQgcGFyYW1zLCB5b3UgY2FuIHVzZSB0aGlzLiBXcmFwIHRoZSBwcm9wZXJ0eSBuYW1lIGluIGN1cmx5IGJyYWNlcy5cclxuICAgICAqIEZvciBleGFtcGxlLCBpZiBpbnRlcnBvbGF0ZWRSb3V0ZSA9IC91c2Vycy97aWR9L2VkaXQsIHtpZH0gd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCdzIGlkIHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBpbnRlcnBvbGF0ZWRSb3V0ZT86IGludGVycG9sYXRlZFJvdXRlO1xyXG4gICAgcm91dGVyTGlua09wdGlvbnM/OntcclxuICAgICAgcXVlcnlQYXJhbXM/OiBbc3RyaW5nLCBpbnRlcnBvbGF0ZWRSb3V0ZV1bXTtcclxuICAgICAgZnJhZ21lbnQ/OiBzdHJpbmc7XHJcbiAgICAgIHByZXNlcnZlRnJhZ21lbnQ/OiBib29sZWFuO1xyXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nPzogUXVlcnlQYXJhbXNIYW5kbGluZztcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBsaW5rLmJhc2VcclxuICAgKi9cclxuICBiYXNlPzogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgbGluay51cmxLZXlcclxuICAgKi9cclxuICB1cmxLZXk/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBsaW5rLnRhcmdldFxyXG4gICAqL1xyXG4gIHRhcmdldD86IFRhcmdldDtcclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGxpbmsudXNlUm91dGVyTGlua1xyXG4gICAqL1xyXG4gIHVzZVJvdXRlckxpbms/OiBib29sZWFuO1xyXG4gIGZvb3Rlcj86IHsgdHlwZTogJ3N1bScgfTtcclxuICBleHBvcnQ/OiBUYWJsZUJ1aWxkZXJFeHBvcnQ7XHJcbiAgZGF0ZUZvcm1hdD86IHN0cmluZztcclxuICBkYXRlVGltZU9wdGlvbnM/OiAgRGF0ZVRpbWVPcHRpb25zO1xyXG4gIGZpbHRlck9wdGlvbnM/OiBGaWx0ZXJPcHRpb25zO1xyXG4gIHN0eWxlcz86IERpY3Rpb25hcnk8c3RyaW5nPjtcclxuICBjb2x1bW5QYXJ0U3R5bGVzPzoge1xyXG4gICAgaGVhZGVyPzogRGljdGlvbmFyeTxzdHJpbmc+LFxyXG4gICAgYm9keT86IERpY3Rpb25hcnk8c3RyaW5nPixcclxuICAgIGZvb3Rlcj86IERpY3Rpb25hcnk8c3RyaW5nPixcclxuICB9XHJcbiAgY29sdW1uUGFydENsYXNzZXM/OiB7XHJcbiAgICBoZWFkZXI/OiBEaWN0aW9uYXJ5PFByZWRpY2F0ZTxUPj4sXHJcbiAgICBmb290ZXI/OiBEaWN0aW9uYXJ5PFByZWRpY2F0ZTxUPj4sXHJcbiAgfVxyXG4gIGVudW1NYXA/OiB7W2tleTpudW1iZXJdOnN0cmluZ307XHJcbiAgYm9vbGVhbj8gOiB7XHJcbiAgICBzaG93Rm9yRmFsc2U/IDogdHJ1ZSB8IHsgaWNvbiA6IHN0cmluZyB9LFxyXG4gICAgZm9yVHJ1ZT8gOiB7IGljb24gOiBzdHJpbmcgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGVudW0gQXJyYXlTdHlsZSB7XHJcbiAgQ29tbWFEZWxpbWl0ZWQsXHJcbiAgTmV3TGluZVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFycmF5QWRkaXRpb25hbCBleHRlbmRzIEFkZGl0aW9uYWwge1xyXG4gICAgbGltaXQ/OiBudW1iZXI7XHJcbiAgICBhcnJheVN0eWxlPzogQXJyYXlTdHlsZTtcclxufVxyXG4iXX0=
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWRlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdXRpbGl0aWVzL3NyYy90YWJsZS1idWlsZGVyL2ludGVyZmFjZXMvcmVwb3J0LWRlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLENBQU4sSUFBWSxTQWVYO0FBZkQsV0FBWSxTQUFTO0lBQ2pCLCtDQUFXLENBQUE7SUFDWCx5Q0FBUSxDQUFBO0lBQ1IseUNBQVEsQ0FBQTtJQUNSLGlEQUFZLENBQUE7SUFDWixpREFBWSxDQUFBO0lBQ1osMkNBQVMsQ0FBQTtJQUNULDZDQUFVLENBQUE7SUFDViw2Q0FBVSxDQUFBO0lBQ1YsNkNBQVUsQ0FBQTtJQUNWLCtDQUFXLENBQUE7SUFDWCx3REFBZ0IsQ0FBQTtJQUNoQixzREFBZSxDQUFBO0lBQ2YsMENBQVMsQ0FBQTtJQUNULGtEQUFhLENBQUE7QUFDakIsQ0FBQyxFQWZXLFNBQVMsS0FBVCxTQUFTLFFBZXBCO0FBRUQsTUFBTSxDQUFOLElBQVksYUFHWDtBQUhELFdBQVksYUFBYTtJQUNyQiw0QkFBVSxDQUFBO0lBQ1YsOEJBQVksQ0FBQTtBQUNoQixDQUFDLEVBSFcsYUFBYSxLQUFiLGFBQWEsUUFHeEI7QUFFRCxNQUFNLENBQU4sSUFBWSxNQUtYO0FBTEQsV0FBWSxNQUFNO0lBQ2hCLDBCQUFnQixDQUFBO0lBQ2hCLHdCQUFjLENBQUE7SUFDZCw0QkFBa0IsQ0FBQTtJQUNsQixzQkFBWSxDQUFBO0FBQ2QsQ0FBQyxFQUxXLE1BQU0sS0FBTixNQUFNLFFBS2pCO0FBbUdELE1BQU0sQ0FBTixJQUFZLFVBR1g7QUFIRCxXQUFZLFVBQVU7SUFDcEIsK0RBQWMsQ0FBQTtJQUNkLGlEQUFPLENBQUE7QUFDVCxDQUFDLEVBSFcsVUFBVSxLQUFWLFVBQVUsUUFHckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi9kaWN0aW9uYXJ5JztcclxuaW1wb3J0IHsgUGlwZVRyYW5zZm9ybSwgUHJlZGljYXRlLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUYWJsZUJ1aWxkZXJFeHBvcnQgfSBmcm9tICcuLi9jbGFzc2VzL1RhYmxlQnVpbGRlckNvbmZpZyc7XHJcbmltcG9ydCB7IFF1ZXJ5UGFyYW1zSGFuZGxpbmcgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuXHJcbmV4cG9ydCBlbnVtIEZpZWxkVHlwZSB7XHJcbiAgICBVbmtub3duID0gMCxcclxuICAgIERhdGUgPSAxLFxyXG4gICAgTGluayA9IDIsXHJcbiAgICBJbWFnZVVybCA9IDMsXHJcbiAgICBDdXJyZW5jeSA9IDQsXHJcbiAgICBBcnJheSA9IDUsXHJcbiAgICBIaWRkZW4gPSA2LFxyXG4gICAgTnVtYmVyID0gNyxcclxuICAgIFN0cmluZyA9IDgsXHJcbiAgICBCb29sZWFuID0gOSxcclxuICAgIFBob25lTnVtYmVyID0gMTAsXHJcbiAgICBFeHByZXNzaW9uID0gMTEsXHJcbiAgICBFbnVtID0gMTIsXHJcbiAgICBEYXRlVGltZSA9IDEzLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBTb3J0RGlyZWN0aW9uIHtcclxuICAgIGFzYz0gJ2FzYycsXHJcbiAgICBkZXNjPSAnZGVzYydcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVGFyZ2V0IHtcclxuICBCbGFuayA9ICdfYmxhbmsnLFxyXG4gIFNlbGYgPSAnX3NlbGYnLFxyXG4gIFBhcmVudCA9ICdfcGFyZW50JyxcclxuICBUb3AgPSAnX3RvcCdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZXRhRGF0YTxUID0gYW55LCBBZGRpdGlvbmFsRmllbGRzIGV4dGVuZHMgc3RyaW5nW10gPSBbXT4ge1xyXG4gIGtleTogKGtleW9mIFQgfCBBZGRpdGlvbmFsRmllbGRzW251bWJlcl0pICYgc3RyaW5nO1xyXG4gIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xyXG4gIGZpZWxkVHlwZTogRmllbGRUeXBlO1xyXG4gIGFkZGl0aW9uYWw/OiBBZGRpdGlvbmFsPFQ+O1xyXG4gIG9yZGVyPzogbnVtYmVyO1xyXG4gIHByZVNvcnQ/OiBTb3J0RGVmO1xyXG4gIF9pbnRlcm5hbE5vdFVzZXJEZWZpbmVkPzogYm9vbGVhbjtcclxuICB3aWR0aD86IHN0cmluZztcclxuICBub0V4cG9ydD86IGJvb2xlYW47XHJcbiAgbm9GaWx0ZXI/OiBib29sZWFuO1xyXG4gIG5vU29ydD86IGJvb2xlYW47XHJcbiAgY3VzdG9tQ2VsbD86IGJvb2xlYW47XHJcbiAgdHJhbnNmb3JtPzogKChvOiBULCAuLi5hcmdzOiBhbnlbXSk9PiBhbnkpIHwgKChvOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKT0+IGFueSkgfCBQaXBlVHJhbnNmb3JtO1xyXG4gIGNsaWNrPzogKGVsZW1lbnQ6IFQsIGtleTogc3RyaW5nICkgPT4gdm9pZDtcclxuICB0ZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgY2xhc3Nlcz86IERpY3Rpb25hcnk8UHJlZGljYXRlPFQ+PjtcclxuICB0b29sVGlwPzogc3RyaW5nIHwgKCh0OlQpID0+IHN0cmluZyk7XHJcbiAgdXNlSWNvbj86IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSAgUmVwb3J0RGVmPERhdGFUeXBlID0gYW55PiB7XHJcbiAgICBkYXRhOiBEYXRhVHlwZVtdO1xyXG4gICAgbWV0YURhdGE6IE1ldGFEYXRhIFtdO1xyXG4gICAgdG90YWxSZWNvcmRzPzogbnVtYmVyO1xyXG4gICAgY291bnQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTb3J0RGVmIHtcclxuICAgIGRpcmVjdGlvbjogU29ydERpcmVjdGlvbjtcclxuICAgIHByZWNlZGVuY2U/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmlsdGVyT3B0aW9ucyB7XHJcbiAgZmlsdGVyYWJsZVZhbHVlcyA6IHN0cmluZ1tdXHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBEYXRlVGltZU9wdGlvbnMge1xyXG4gIGZvcm1hdD86IHN0cmluZztcclxuICBpbmNsdWRlU2Vjb25kcz86IGJvb2xlYW47XHJcbiAgaW5jbHVkZU1pbGxpc2Vjb25kczogYm9vbGVhbjtcclxufVxyXG50eXBlIGludGVycG9sYXRlZFJvdXRlID0gc3RyaW5nO1xyXG5leHBvcnQgaW50ZXJmYWNlIEFkZGl0aW9uYWw8VCA9IGFueT4ge1xyXG4gIGxpbms/IDoge1xyXG4gICAgYmFzZT86IHN0cmluZztcclxuICAgIHVybEtleT86IHN0cmluZztcclxuICAgIHRhcmdldD86IFRhcmdldDtcclxuICAgIHVzZVJvdXRlckxpbms/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB5b3Ugd2FudCB0byB1c2UgYSByb3V0ZSB3aXRoIGludGVycG9sYXRlZCBwYXJhbXMsIHlvdSBjYW4gdXNlIHRoaXMuIFdyYXAgdGhlIHByb3BlcnR5IG5hbWUgaW4gY3VybHkgYnJhY2VzLlxyXG4gICAgICogRm9yIGV4YW1wbGUsIGlmIGludGVycG9sYXRlZFJvdXRlID0gL3VzZXJzL3tpZH0vZWRpdCwge2lkfSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50J3MgaWQgcHJvcGVydHkuXHJcbiAgICAgKi9cclxuICAgIGludGVycG9sYXRlZFJvdXRlPzogaW50ZXJwb2xhdGVkUm91dGU7XHJcbiAgICByb3V0ZXJMaW5rT3B0aW9ucz86e1xyXG4gICAgICBxdWVyeVBhcmFtcz86IFtzdHJpbmcsIGludGVycG9sYXRlZFJvdXRlXVtdO1xyXG4gICAgICBmcmFnbWVudD86IHN0cmluZztcclxuICAgICAgcHJlc2VydmVGcmFnbWVudD86IGJvb2xlYW47XHJcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGxpbmsuYmFzZVxyXG4gICAqL1xyXG4gIGJhc2U/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgUGxlYXNlIHVzZSBsaW5rLnVybEtleVxyXG4gICAqL1xyXG4gIHVybEtleT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBQbGVhc2UgdXNlIGxpbmsudGFyZ2V0XHJcbiAgICovXHJcbiAgdGFyZ2V0PzogVGFyZ2V0O1xyXG4gIC8qKlxyXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgbGluay51c2VSb3V0ZXJMaW5rXHJcbiAgICovXHJcbiAgdXNlUm91dGVyTGluaz86IGJvb2xlYW47XHJcbiAgZm9vdGVyPzogeyB0eXBlOiAnc3VtJyB9O1xyXG4gIGV4cG9ydD86IFRhYmxlQnVpbGRlckV4cG9ydDtcclxuICBkYXRlRm9ybWF0Pzogc3RyaW5nO1xyXG4gIGRhdGVUaW1lT3B0aW9ucz86ICBEYXRlVGltZU9wdGlvbnM7XHJcbiAgZmlsdGVyT3B0aW9ucz86IEZpbHRlck9wdGlvbnM7XHJcbiAgc3R5bGVzPzogRGljdGlvbmFyeTxzdHJpbmcgfCB7Y29uZGl0aW9uOiAodDpUKSA9PiBib29sZWFuIHwgdHJ1ZSwgdmFsdWU6ICh0OlQpID0+IHN0cmluZyB8IHN0cmluZ30+O1xyXG4gIGNvbHVtblBhcnRTdHlsZXM/OiB7XHJcbiAgICBoZWFkZXI/OiBEaWN0aW9uYXJ5PHN0cmluZz4sXHJcbiAgICBib2R5PzogRGljdGlvbmFyeTxzdHJpbmcgfCB7Y29uZGl0aW9uOiAodDogVCkgPT4gYm9vbGVhbiB8IHRydWUsIHZhbHVlOiAodDogVCkgPT4gc3RyaW5nIHwgc3RyaW5nfT4sXHJcbiAgICBmb290ZXI/OiBEaWN0aW9uYXJ5PHN0cmluZz4sXHJcbiAgfVxyXG4gIGNvbHVtblBhcnRDbGFzc2VzPzoge1xyXG4gICAgaGVhZGVyPzogRGljdGlvbmFyeTxQcmVkaWNhdGU8VD4+LFxyXG4gICAgZm9vdGVyPzogRGljdGlvbmFyeTxQcmVkaWNhdGU8VD4+LFxyXG4gIH1cclxuICBlbnVtTWFwPzoge1trZXk6bnVtYmVyXTpzdHJpbmd9O1xyXG4gIGJvb2xlYW4/IDoge1xyXG4gICAgc2hvd0ZvckZhbHNlPyA6IHRydWUgfCB7IGljb24gOiBzdHJpbmcgfSxcclxuICAgIGZvclRydWU/IDogeyBpY29uIDogc3RyaW5nIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEFycmF5U3R5bGUge1xyXG4gIENvbW1hRGVsaW1pdGVkLFxyXG4gIE5ld0xpbmVcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcnJheUFkZGl0aW9uYWwgZXh0ZW5kcyBBZGRpdGlvbmFsIHtcclxuICAgIGxpbWl0PzogbnVtYmVyO1xyXG4gICAgYXJyYXlTdHlsZT86IEFycmF5U3R5bGU7XHJcbn1cclxuIl19
@@ -33,4 +33,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
33
33
  type: Input,
34
34
  args: ['conditionalClasses']
35
35
  }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uYWwtY2xhc3Nlcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL2RpcmVjdGl2ZXMvY29uZGl0aW9uYWwtY2xhc3Nlcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDOztBQU92RixNQUFNLE9BQU8sMkJBQTJCO0lBRXRDLFlBQW9CLEVBQWMsRUFBVSxRQUFtQjtRQUEzQyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQU1oRSxtQkFBYyxHQUFhLEVBQUUsQ0FBQztJQUw3QixDQUFDO0lBT0YsV0FBVyxDQUFDLE9BQXNCO1FBQ2pDLElBQUksT0FBTyxHQUFjLEVBQUUsQ0FBQztRQUM1QixJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2lCQUNsQyxNQUFNLENBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBUSxDQUFDLEdBQUcsQ0FBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBRSxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQ25GLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0UsZUFBZSxDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBRSxDQUFFLENBQUM7UUFFdEYsb0JBQW9CLENBQUMsT0FBTyxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUcsQ0FBQyxDQUFFLENBQUUsQ0FBQztRQUV6RixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUMvQixDQUFDOzhHQXpCVywyQkFBMkI7a0dBQTNCLDJCQUEyQjs7MkZBQTNCLDJCQUEyQjtrQkFKdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7dUdBTVMsT0FBTztzQkFBZixLQUFLO2dCQUN1QixPQUFPO3NCQUFuQyxLQUFLO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWN0aW9uYXJ5LCBQcmVkaWNhdGUgfSBmcm9tICdAbmdyeC9lbnRpdHknO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbY29uZGl0aW9uYWxDbGFzc2VzXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uYWxDbGFzc2VzRGlyZWN0aXZlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XHJcbiAgfVxyXG5cclxuIEBJbnB1dCgpIGVsZW1lbnQ/OiBhbnk7XHJcbiBASW5wdXQoJ2NvbmRpdGlvbmFsQ2xhc3NlcycpIGNsYXNzZXM/OiBEaWN0aW9uYXJ5PFByZWRpY2F0ZTxhbnk+PjtcclxuXHJcbiBjbGFzc2VzQXBwbGllZDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgbGV0IHRvQXBwbHk6IHN0cmluZyBbXSA9IFtdO1xyXG4gIGlmKHRoaXMuY2xhc3Nlcykge1xyXG4gICAgdG9BcHBseSA9IE9iamVjdC5rZXlzKHRoaXMuY2xhc3NlcylcclxuICAgIC5maWx0ZXIoIGtleSA9PiB0aGlzLmNsYXNzZXMhW2tleV0hKHRoaXMuZWxlbWVudCkgKTtcclxuICB9XHJcblxyXG4gIHZhciBjbGFzc2VzTm90WWV0QXBwbGllZCA9IHRvQXBwbHkuZmlsdGVyKCBjID0+ICF0aGlzLmNsYXNzZXNBcHBsaWVkLmluY2x1ZGVzKGMpICk7XHJcbiAgdmFyIGNsYXNzZXNUb1JlbW92ZSA9IHRoaXMuY2xhc3Nlc0FwcGxpZWQuZmlsdGVyKCBjID0+ICF0b0FwcGx5LmluY2x1ZGVzKGMpKTtcclxuXHJcbiAgY2xhc3Nlc1RvUmVtb3ZlLmZvckVhY2goIGMgPT4gdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyggdGhpcy5lbC5uYXRpdmVFbGVtZW50LCBjICkgKTtcclxuXHJcbiAgY2xhc3Nlc05vdFlldEFwcGxpZWQuZm9yRWFjaCggYyA9PiB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKCB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQgLCBjICkgKTtcclxuXHJcbiAgdGhpcy5jbGFzc2VzQXBwbGllZCA9IHRvQXBwbHk7XHJcbiB9XHJcblxyXG5cclxufVxyXG4iXX0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uYWwtY2xhc3Nlcy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXV0aWxpdGllcy9zcmMvdXRpbGl0aWVzL2RpcmVjdGl2ZXMvY29uZGl0aW9uYWwtY2xhc3Nlcy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDOztBQU92RixNQUFNLE9BQU8sMkJBQTJCO0lBRXRDLFlBQW9CLEVBQWMsRUFBVSxRQUFtQjtRQUEzQyxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQU0vRCxtQkFBYyxHQUFhLEVBQUUsQ0FBQztJQUw5QixDQUFDO0lBT0QsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxHQUFjLEVBQUUsQ0FBQztRQUM1QixJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2lCQUNsQyxNQUFNLENBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBUSxDQUFDLEdBQUcsQ0FBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBRSxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxvQkFBb0IsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBRSxDQUFDO1FBQ25GLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0UsZUFBZSxDQUFDLE9BQU8sQ0FBRSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBRSxDQUFFLENBQUM7UUFFdEYsb0JBQW9CLENBQUMsT0FBTyxDQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUcsQ0FBQyxDQUFFLENBQUUsQ0FBQztRQUV6RixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUNoQyxDQUFDOzhHQXpCVSwyQkFBMkI7a0dBQTNCLDJCQUEyQjs7MkZBQTNCLDJCQUEyQjtrQkFKdkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtpQkFDakI7dUdBTVUsT0FBTztzQkFBZixLQUFLO2dCQUN1QixPQUFPO3NCQUFuQyxLQUFLO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWN0aW9uYXJ5LCBQcmVkaWNhdGUgfSBmcm9tICdAbmdyeC9lbnRpdHknO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbY29uZGl0aW9uYWxDbGFzc2VzXScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uYWxDbGFzc2VzRGlyZWN0aXZlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBlbGVtZW50PzogYW55O1xyXG4gIEBJbnB1dCgnY29uZGl0aW9uYWxDbGFzc2VzJykgY2xhc3Nlcz86IERpY3Rpb25hcnk8UHJlZGljYXRlPGFueT4+O1xyXG5cclxuICBjbGFzc2VzQXBwbGllZDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgbGV0IHRvQXBwbHk6IHN0cmluZyBbXSA9IFtdO1xyXG4gICAgaWYodGhpcy5jbGFzc2VzKSB7XHJcbiAgICAgIHRvQXBwbHkgPSBPYmplY3Qua2V5cyh0aGlzLmNsYXNzZXMpXHJcbiAgICAgIC5maWx0ZXIoIGtleSA9PiB0aGlzLmNsYXNzZXMhW2tleV0hKHRoaXMuZWxlbWVudCkgKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgY2xhc3Nlc05vdFlldEFwcGxpZWQgPSB0b0FwcGx5LmZpbHRlciggYyA9PiAhdGhpcy5jbGFzc2VzQXBwbGllZC5pbmNsdWRlcyhjKSApO1xyXG4gICAgdmFyIGNsYXNzZXNUb1JlbW92ZSA9IHRoaXMuY2xhc3Nlc0FwcGxpZWQuZmlsdGVyKCBjID0+ICF0b0FwcGx5LmluY2x1ZGVzKGMpKTtcclxuXHJcbiAgICBjbGFzc2VzVG9SZW1vdmUuZm9yRWFjaCggYyA9PiB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKCB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIGMgKSApO1xyXG5cclxuICAgIGNsYXNzZXNOb3RZZXRBcHBsaWVkLmZvckVhY2goIGMgPT4gdGhpcy5yZW5kZXJlci5hZGRDbGFzcyggdGhpcy5lbC5uYXRpdmVFbGVtZW50ICwgYyApICk7XHJcblxyXG4gICAgdGhpcy5jbGFzc2VzQXBwbGllZCA9IHRvQXBwbHk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19
@@ -2,18 +2,31 @@ import { Directive, Input } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  export class StylerDirective {
4
4
  set styler(styles) {
5
- if (styles) {
6
- Object.keys(styles).forEach(style => {
7
- this.el.nativeElement.style[style] = styles[style];
8
- });
9
- }
5
+ const toApply = Object.entries(styles ?? {}).reduce((acc, [key, val]) => {
6
+ if (typeof (val) === 'string') {
7
+ acc[key] = val;
8
+ this.el.nativeElement.style[key] = val;
9
+ }
10
+ else if (val?.condition === true || val?.condition(this.element)) {
11
+ const value = typeof (val.value) === 'string' ? val.value : val?.value(this.element);
12
+ acc[key] = value;
13
+ this.el.nativeElement.style[key] = value;
14
+ }
15
+ return acc;
16
+ }, {});
17
+ Object.keys(this.stylesApplied).filter(key => !Object.keys(toApply).includes(key)).forEach(key => {
18
+ this.renderer.removeStyle(this.el.nativeElement, key);
19
+ });
20
+ this.stylesApplied = toApply;
10
21
  }
11
22
  ;
12
- constructor(el) {
23
+ constructor(el, renderer) {
13
24
  this.el = el;
25
+ this.renderer = renderer;
26
+ this.stylesApplied = {};
14
27
  }
15
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: StylerDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
16
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.3", type: StylerDirective, isStandalone: true, selector: "[styler]", inputs: { styler: "styler" }, ngImport: i0 }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: StylerDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.3", type: StylerDirective, isStandalone: true, selector: "[styler]", inputs: { element: "element", styler: "styler" }, ngImport: i0 }); }
17
30
  }
18
31
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: StylerDirective, decorators: [{
19
32
  type: Directive,
@@ -21,7 +34,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
21
34
  selector: '[styler]',
22
35
  standalone: true
23
36
  }]
24
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { styler: [{
37
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { element: [{
38
+ type: Input
39
+ }], styler: [{
25
40
  type: Input
26
41
  }] } });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3V0aWxpdGllcy9kaXJlY3RpdmVzL3N0eWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFHLEtBQUssRUFBYyxNQUFNLGVBQWUsQ0FBQzs7QUFNM0QsTUFBTSxPQUFPLGVBQWU7SUFDN0IsSUFBYSxNQUFNLENBQUMsTUFBTTtRQUN4QixJQUFHLE1BQU0sRUFBQztZQUNSLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNuQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JELENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBQUEsQ0FBQztJQUNGLFlBQW9CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO0lBQ25DLENBQUM7OEdBVGMsZUFBZTtrR0FBZixlQUFlOzsyRkFBZixlQUFlO2tCQUg5QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxVQUFVO29CQUNwQixVQUFVLEVBQUUsSUFBSTtpQkFDbkI7K0VBQ2MsTUFBTTtzQkFBbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgIElucHV0LCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tzdHlsZXJdJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWVcclxufSkgZXhwb3J0IGNsYXNzIFN0eWxlckRpcmVjdGl2ZSB7XHJcbiAgQElucHV0KCkgc2V0IHN0eWxlcihzdHlsZXMpe1xyXG4gICAgaWYoc3R5bGVzKXtcclxuICAgICAgT2JqZWN0LmtleXMoc3R5bGVzKS5mb3JFYWNoKCBzdHlsZSA9PiB7XHJcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlW3N0eWxlXSA9IHN0eWxlc1tzdHlsZV07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikge1xyXG4gfVxyXG59XHJcbiJdfQ==
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11dGlsaXRpZXMvc3JjL3V0aWxpdGllcy9kaXJlY3RpdmVzL3N0eWxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFHLEtBQUssRUFBeUIsTUFBTSxlQUFlLENBQUM7O0FBT3RFLE1BQU0sT0FBTyxlQUFlO0lBRzdCLElBQWEsTUFBTSxDQUFDLE1BQTBHO1FBQzVILE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ3RFLElBQUcsT0FBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsRUFBQztnQkFDMUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDZixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ3hDO2lCQUFNLElBQUcsR0FBRyxFQUFFLFNBQVMsS0FBSyxJQUFJLElBQUksR0FBRyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUM7Z0JBQ2hFLE1BQU0sS0FBSyxHQUFJLE9BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDakIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUMxQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQXdCLENBQUMsQ0FBQztRQUU3QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9GLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7SUFDL0IsQ0FBQztJQUFBLENBQUM7SUFDRixZQUFvQixFQUFjLEVBQVUsUUFBbUI7UUFBM0MsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLGFBQVEsR0FBUixRQUFRLENBQVc7UUFwQi9ELGtCQUFhLEdBQXdCLEVBQUUsQ0FBQztJQXFCekMsQ0FBQzs4R0F0QmMsZUFBZTtrR0FBZixlQUFlOzsyRkFBZixlQUFlO2tCQUg5QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxVQUFVO29CQUNwQixVQUFVLEVBQUUsSUFBSTtpQkFDbkI7dUdBRVUsT0FBTztzQkFBZixLQUFLO2dCQUNPLE1BQU07c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsICBJbnB1dCwgRWxlbWVudFJlZiwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICdAbmdyeC9lbnRpdHknO1xyXG5cclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbc3R5bGVyXScsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pIGV4cG9ydCBjbGFzcyBTdHlsZXJEaXJlY3RpdmUge1xyXG4gIHN0eWxlc0FwcGxpZWQgOiBEaWN0aW9uYXJ5PHN0cmluZz4gPSB7fTtcclxuICBASW5wdXQoKSBlbGVtZW50PzogYW55O1xyXG4gIEBJbnB1dCgpIHNldCBzdHlsZXIoc3R5bGVzOiBEaWN0aW9uYXJ5PHN0cmluZyB8IHtjb25kaXRpb246ICgodDphbnkpID0+IGJvb2xlYW4pIHwgdHJ1ZSwgdmFsdWU6ICgodDphbnkpID0+IHN0cmluZykgfCBzdHJpbmd9Pil7XHJcbiAgICBjb25zdCB0b0FwcGx5ID0gT2JqZWN0LmVudHJpZXMoc3R5bGVzID8/IHt9KS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsXSkgPT4ge1xyXG4gICAgICBpZih0eXBlb2YodmFsKSA9PT0gJ3N0cmluZycpe1xyXG4gICAgICAgIGFjY1trZXldID0gdmFsO1xyXG4gICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZVtrZXldID0gdmFsO1xyXG4gICAgICB9IGVsc2UgaWYodmFsPy5jb25kaXRpb24gPT09IHRydWUgfHwgdmFsPy5jb25kaXRpb24odGhpcy5lbGVtZW50KSl7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSAgdHlwZW9mKHZhbC52YWx1ZSkgPT09ICdzdHJpbmcnID8gdmFsLnZhbHVlIDogdmFsPy52YWx1ZSh0aGlzLmVsZW1lbnQpO1xyXG4gICAgICAgIGFjY1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnN0eWxlW2tleV0gPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwge30gYXMgRGljdGlvbmFyeTxzdHJpbmc+KTtcclxuXHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0eWxlc0FwcGxpZWQpLmZpbHRlcihrZXkgPT4gIU9iamVjdC5rZXlzKHRvQXBwbHkpLmluY2x1ZGVzKGtleSkpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIGtleSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc3R5bGVzQXBwbGllZCA9IHRvQXBwbHk7XHJcbiAgfTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHtcclxuIH1cclxufVxyXG4iXX0=