tin-spa 2.1.13 → 2.1.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/esm2020/lib/classes/Classes.mjs +20 -1
  2. package/esm2020/lib/components/accounts/accountDialog.component.mjs +55 -0
  3. package/esm2020/lib/components/accounts/accounts.component.mjs +62 -6
  4. package/esm2020/lib/components/filter/filter.component.mjs +7 -4
  5. package/esm2020/lib/components/form/form.component.mjs +3 -3
  6. package/esm2020/lib/components/inventory/inventory.component.mjs +1 -1
  7. package/esm2020/lib/components/login/login.component.mjs +6 -5
  8. package/esm2020/lib/components/logs/logs.component.mjs +1 -1
  9. package/esm2020/lib/components/membership/membership.component.mjs +2 -2
  10. package/esm2020/lib/components/table/table.component.mjs +17 -4
  11. package/esm2020/lib/components/tenant-settings/tenant-settings.component.mjs +3 -3
  12. package/esm2020/lib/components/transactions/transactDialog.component.mjs +81 -0
  13. package/esm2020/lib/components/transactions/transactions.component.mjs +91 -0
  14. package/esm2020/lib/components/users/users.component.mjs +1 -1
  15. package/esm2020/lib/modules/admin/admin-routing.module.mjs +3 -1
  16. package/esm2020/lib/services/data.service.mjs +22 -4
  17. package/esm2020/lib/tin-spa.module.mjs +10 -3
  18. package/fesm2015/tin-spa.mjs +325 -28
  19. package/fesm2015/tin-spa.mjs.map +1 -1
  20. package/fesm2020/tin-spa.mjs +320 -28
  21. package/fesm2020/tin-spa.mjs.map +1 -1
  22. package/lib/classes/Classes.d.ts +22 -0
  23. package/lib/components/accounts/accountDialog.component.d.ts +25 -0
  24. package/lib/components/accounts/accounts.component.d.ts +18 -1
  25. package/lib/components/filter/filter.component.d.ts +2 -1
  26. package/lib/components/table/table.component.d.ts +2 -1
  27. package/lib/components/transactions/transactDialog.component.d.ts +24 -0
  28. package/lib/components/transactions/transactions.component.d.ts +30 -0
  29. package/lib/services/data.service.d.ts +7 -1
  30. package/lib/tin-spa.module.d.ts +9 -6
  31. package/package.json +1 -1
@@ -216,7 +216,6 @@ export class TableComponent {
216
216
  }
217
217
  }
218
218
  testIconCondition(value, icon) {
219
- // const option = this.getOptions(column);
220
219
  if (icon.condition) {
221
220
  return icon.condition(value);
222
221
  }
@@ -224,6 +223,16 @@ export class TableComponent {
224
223
  return true;
225
224
  }
226
225
  }
226
+ testColorCondition(value, color) {
227
+ if (!color)
228
+ return false;
229
+ if (color.condition) {
230
+ return color.condition(value);
231
+ }
232
+ else {
233
+ return true;
234
+ }
235
+ }
227
236
  testDisabled(row, buttonName) {
228
237
  let button = this.getButton(buttonName);
229
238
  if (button.disabled) {
@@ -276,6 +285,9 @@ export class TableComponent {
276
285
  if (this.config.loadAction) {
277
286
  this.loadData(this.config.loadAction, "");
278
287
  }
288
+ else {
289
+ this.dataLoad.emit();
290
+ }
279
291
  }
280
292
  dataLoaded(x) {
281
293
  this.dataLoad.emit(x);
@@ -378,6 +390,7 @@ export class TableComponent {
378
390
  this.inputChanged(x);
379
391
  });
380
392
  dialogRef.afterClosed().subscribe((result) => {
393
+ console.log(result);
381
394
  if (result.message == "success") {
382
395
  this.actionClickedEmit('edit', result.data);
383
396
  this.refreshClicked();
@@ -423,10 +436,10 @@ export class TableComponent {
423
436
  }
424
437
  }
425
438
  TableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableComponent, deps: [{ token: i1.DataServiceLib }, { token: i2.MessageService }, { token: i3.BreakpointObserver }, { token: i4.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
426
- TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableComponent, selector: "spa-table", inputs: { data: "data", config: "config", reload: "reload" }, outputs: { dataLoad: "dataLoad", refreshClick: "refreshClick", searchClick: "searchClick", createClick: "createClick", actionClick: "actionClick", inputChange: "inputChange" }, viewQueries: [{ propertyName: "tablePaginator", first: true, predicate: ["tablePaginator"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n<spa-search *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\"></spa-search>\n\n<div class=\"top\">\n\n <div class=\"tin-row\" >\n <button *ngIf=\"createButton\" id=\"btnNew\" mat-raised-button color=\"primary\" style=\"margin-right: 10px;\" (click)=\"newModel()\">{{createButton.display}}</button>\n <!-- <spa-tiles *ngIf=\"config.tileConfig\" [reload]=\"tileReload\" [config]=\"config.tileConfig\"></spa-tiles> -->\n </div>\n\n <div *ngIf=\"config.tileConfig\" style=\"min-width: 75%;\">\n <spa-tiles [reload]=\"tileReload\" [config]=\"config.tileConfig\"></spa-tiles>\n </div>\n\n <div *ngIf=\"config.showFilter\" class=\"d-flex justify-content-end\">\n <spa-filter [showButton]=\"showFilterButton\" [data]=\"tableDataSource\" (refreshClick)=\"refreshClicked()\"></spa-filter>\n </div>\n\n</div>\n\n\n<div *ngIf=\"config.title\" class=\"title\">\n <label style=\"font-size: larger;\">{{config.title | camelToWords}}</label>\n</div>\n\n<div>\n\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\n\n\n\n <div *ngIf=\"dataSource\">\n\n\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\n <th mat-header-cell *matHeaderCellDef>{{ column.alias ?? column.name | camelToWords }}</th>\n <td mat-cell *matCellDef=\"let row;\" >\n\n <ng-container [ngSwitch]=\"column.type\">\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <spa-check [value]=\"row[column.name]\" [readonly]=\"true\"></spa-check>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'select'\">\n <spa-select [options]=\"column.options\" [optionDisplay]=\"column.optionDisplay\" [optionValue]=\"column.optionValue\" [(value)]=\"row[column.name]\" width=\"90%\" ></spa-select>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'chip'\">\n <mat-chip-list>\n <mat-chip (click)=\"viewModel(row)\" [ngStyle]=\"{'background-color':getColor(row[column.name], column?.options)}\" style=\"font-size: 12px;\"> {{row[column.name]}} </mat-chip>\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </mat-chip-list>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{row[column.name] | date : 'dd/MM/yyyy'}}\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'datetime'\">\n {{row[column.name] | date : 'dd/MM/yyyy HH:mm'}}\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <!-- <ng-container *ngSwitchCase=\"'spinner'\">\n <mat-spinner [diameter]=\"20\">\n\n </mat-spinner>\n </ng-container> -->\n\n <ng-container *ngSwitchCase=\"'money'\">\n {{row[column.name] | currency:'':''}}\n\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <label>{{row[column.name]}}</label>\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n\n </ng-container>\n\n </ng-container>\n\n\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\n\n\n <ng-container *ngFor=\"let button of displayedButtons\">\n\n <ng-container *ngIf=\"button.name != 'create' && testVisible(row,button.name)\">\n\n <button mat-mini-fab [matTooltip]=\"button.tip ?? button.name \" matTooltipPosition=\"above\" style=\"margin-right:5px\"\n [ngStyle]=\"{'background-color':getButtonColor(button, row)}\"\n [disabled]=\"testDisabled(row,button.name)\" (click)=\"actionClicked(button.name, row)\">\n <mat-icon>{{getIcon(button.name)}}</mat-icon>\n </button>\n\n </ng-container>\n\n <ng-container *ngIf=\"button.name != 'create' && !testVisible(row,button.name)\">\n <label style=\"margin-right: 35px;\"></label>\n </ng-container>\n\n </ng-container>\n\n\n </td>\n </ng-container>\n\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': config.greyOut && config.greyOut(row)}\"></tr>\n </table>\n\n </div>\n\n <mat-paginator #tablePaginator [pageSizeOptions]=\"[10, 20, 50]\" showFirstLastButtons></mat-paginator>\n\n</div>\n\n<p *ngIf=\"dataSource?.length == 0\"><em>No Data</em></p>\n\n\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i7.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i10.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i12.CheckComponent, selector: "spa-check", inputs: ["readonly", "display", "value"], outputs: ["valueChange", "click", "check", "uncheck"] }, { kind: "component", type: i13.SelectComponent, selector: "spa-select", inputs: ["width", "readonly", "readonlyMode", "hint", "placeholder", "multiple", "display", "value", "options", "optionValue", "optionDisplay", "optionDisplayExtra"], outputs: ["valueChange"] }, { kind: "component", type: i14.FilterComponent, selector: "spa-filter", inputs: ["showButton", "data"], outputs: ["refreshClick"] }, { kind: "component", type: i15.TilesComponent, selector: "spa-tiles", inputs: ["config", "data", "reload"], outputs: ["tileClick"] }, { kind: "component", type: i16.SearchComponent, selector: "spa-search", inputs: ["config"], outputs: ["searchClick"] }, { kind: "pipe", type: i5.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "pipe", type: i17.CamelToWordsPipe, name: "camelToWords" }] });
439
+ TableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableComponent, selector: "spa-table", inputs: { data: "data", config: "config", reload: "reload" }, outputs: { dataLoad: "dataLoad", refreshClick: "refreshClick", searchClick: "searchClick", createClick: "createClick", actionClick: "actionClick", inputChange: "inputChange" }, viewQueries: [{ propertyName: "tablePaginator", first: true, predicate: ["tablePaginator"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n<spa-search *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\"></spa-search>\n\n<div class=\"top\">\n\n <div class=\"tin-row\" >\n <button *ngIf=\"createButton\" id=\"btnNew\" mat-raised-button color=\"primary\" style=\"margin-right: 10px;\" (click)=\"newModel()\">{{createButton.display}}</button>\n <!-- <spa-tiles *ngIf=\"config.tileConfig\" [reload]=\"tileReload\" [config]=\"config.tileConfig\"></spa-tiles> -->\n </div>\n\n <div *ngIf=\"config.tileConfig\" style=\"min-width: 75%;\">\n <spa-tiles [reload]=\"tileReload\" [config]=\"config.tileConfig\"></spa-tiles>\n </div>\n\n <div *ngIf=\"config.showFilter\" class=\"d-flex justify-content-end\">\n <spa-filter [showButton]=\"showFilterButton\" [data]=\"tableDataSource\" (refreshClick)=\"refreshClicked()\"></spa-filter>\n </div>\n\n</div>\n\n\n<div *ngIf=\"config.title\" class=\"title\">\n <label style=\"font-size: larger;\">{{config.title | camelToWords}}</label>\n</div>\n\n<div>\n\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\n\n\n\n <div *ngIf=\"dataSource\">\n\n\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\n <th mat-header-cell *matHeaderCellDef>{{ column.alias ?? column.name | camelToWords }}</th>\n <td mat-cell *matCellDef=\"let row;\" >\n\n <ng-container [ngSwitch]=\"column.type\">\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <spa-check [value]=\"row[column.name]\" [readonly]=\"true\"></spa-check>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'select'\">\n <spa-select [options]=\"column.options\" [optionDisplay]=\"column.optionDisplay\" [optionValue]=\"column.optionValue\" [(value)]=\"row[column.name]\" width=\"90%\" ></spa-select>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'chip'\">\n <mat-chip-list>\n <mat-chip (click)=\"viewModel(row)\" [ngStyle]=\"{'background-color':getColor(row[column.name], column?.options)}\" style=\"font-size: 12px;\"> {{row[column.name]}} </mat-chip>\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </mat-chip-list>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{row[column.name] | date : 'dd/MM/yyyy'}}\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'datetime'\">\n {{row[column.name] | date : 'dd/MM/yyyy HH:mm'}}\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <!-- <ng-container *ngSwitchCase=\"'spinner'\">\n <mat-spinner [diameter]=\"20\">\n\n </mat-spinner>\n </ng-container> -->\n\n <ng-container *ngSwitchCase=\"'money'\">\n\n <label [ngStyle]=\"{'color': testColorCondition(row, column.color) ? column.color.name : ''}\">{{row[column.name] | currency:'':''}}</label>\n\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <label [ngStyle]=\"{'color': testColorCondition(row, column.color) ? column.color.name : ''}\">{{row[column.name]}}</label>\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n\n </ng-container>\n\n </ng-container>\n\n\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\n\n\n <ng-container *ngFor=\"let button of displayedButtons\">\n\n <ng-container *ngIf=\"button.name != 'create' && testVisible(row,button.name)\">\n\n <button mat-mini-fab [matTooltip]=\"button.tip ?? button.name \" matTooltipPosition=\"above\" style=\"margin-right:5px\"\n [ngStyle]=\"{'background-color':getButtonColor(button, row)}\"\n [disabled]=\"testDisabled(row,button.name)\" (click)=\"actionClicked(button.name, row)\">\n <mat-icon>{{getIcon(button.name)}}</mat-icon>\n </button>\n\n </ng-container>\n\n <ng-container *ngIf=\"button.name != 'create' && !testVisible(row,button.name)\">\n <label style=\"margin-right: 35px;\"></label>\n </ng-container>\n\n </ng-container>\n\n\n </td>\n </ng-container>\n\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': config.greyOut && config.greyOut(row)}\"></tr>\n </table>\n\n </div>\n\n <mat-paginator #tablePaginator [pageSizeOptions]=\"[10, 20, 50]\" showFirstLastButtons></mat-paginator>\n\n</div>\n\n<p *ngIf=\"dataSource?.length == 0\"><em>No Data</em></p>\n\n\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i7.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { kind: "component", type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i10.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i12.CheckComponent, selector: "spa-check", inputs: ["readonly", "display", "value"], outputs: ["valueChange", "click", "check", "uncheck"] }, { kind: "component", type: i13.SelectComponent, selector: "spa-select", inputs: ["width", "readonly", "readonlyMode", "hint", "placeholder", "multiple", "display", "value", "options", "optionValue", "optionDisplay", "optionDisplayExtra"], outputs: ["valueChange"] }, { kind: "component", type: i14.FilterComponent, selector: "spa-filter", inputs: ["showText", "showButton", "data"], outputs: ["refreshClick"] }, { kind: "component", type: i15.TilesComponent, selector: "spa-tiles", inputs: ["config", "data", "reload"], outputs: ["tileClick"] }, { kind: "component", type: i16.SearchComponent, selector: "spa-search", inputs: ["config"], outputs: ["searchClick"] }, { kind: "pipe", type: i5.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i5.DatePipe, name: "date" }, { kind: "pipe", type: i17.CamelToWordsPipe, name: "camelToWords" }] });
427
440
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableComponent, decorators: [{
428
441
  type: Component,
429
- args: [{ selector: 'spa-table', template: "\n<spa-search *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\"></spa-search>\n\n<div class=\"top\">\n\n <div class=\"tin-row\" >\n <button *ngIf=\"createButton\" id=\"btnNew\" mat-raised-button color=\"primary\" style=\"margin-right: 10px;\" (click)=\"newModel()\">{{createButton.display}}</button>\n <!-- <spa-tiles *ngIf=\"config.tileConfig\" [reload]=\"tileReload\" [config]=\"config.tileConfig\"></spa-tiles> -->\n </div>\n\n <div *ngIf=\"config.tileConfig\" style=\"min-width: 75%;\">\n <spa-tiles [reload]=\"tileReload\" [config]=\"config.tileConfig\"></spa-tiles>\n </div>\n\n <div *ngIf=\"config.showFilter\" class=\"d-flex justify-content-end\">\n <spa-filter [showButton]=\"showFilterButton\" [data]=\"tableDataSource\" (refreshClick)=\"refreshClicked()\"></spa-filter>\n </div>\n\n</div>\n\n\n<div *ngIf=\"config.title\" class=\"title\">\n <label style=\"font-size: larger;\">{{config.title | camelToWords}}</label>\n</div>\n\n<div>\n\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\n\n\n\n <div *ngIf=\"dataSource\">\n\n\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\n <th mat-header-cell *matHeaderCellDef>{{ column.alias ?? column.name | camelToWords }}</th>\n <td mat-cell *matCellDef=\"let row;\" >\n\n <ng-container [ngSwitch]=\"column.type\">\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <spa-check [value]=\"row[column.name]\" [readonly]=\"true\"></spa-check>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'select'\">\n <spa-select [options]=\"column.options\" [optionDisplay]=\"column.optionDisplay\" [optionValue]=\"column.optionValue\" [(value)]=\"row[column.name]\" width=\"90%\" ></spa-select>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'chip'\">\n <mat-chip-list>\n <mat-chip (click)=\"viewModel(row)\" [ngStyle]=\"{'background-color':getColor(row[column.name], column?.options)}\" style=\"font-size: 12px;\"> {{row[column.name]}} </mat-chip>\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </mat-chip-list>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{row[column.name] | date : 'dd/MM/yyyy'}}\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'datetime'\">\n {{row[column.name] | date : 'dd/MM/yyyy HH:mm'}}\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <!-- <ng-container *ngSwitchCase=\"'spinner'\">\n <mat-spinner [diameter]=\"20\">\n\n </mat-spinner>\n </ng-container> -->\n\n <ng-container *ngSwitchCase=\"'money'\">\n {{row[column.name] | currency:'':''}}\n\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <label>{{row[column.name]}}</label>\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n\n </ng-container>\n\n </ng-container>\n\n\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\n\n\n <ng-container *ngFor=\"let button of displayedButtons\">\n\n <ng-container *ngIf=\"button.name != 'create' && testVisible(row,button.name)\">\n\n <button mat-mini-fab [matTooltip]=\"button.tip ?? button.name \" matTooltipPosition=\"above\" style=\"margin-right:5px\"\n [ngStyle]=\"{'background-color':getButtonColor(button, row)}\"\n [disabled]=\"testDisabled(row,button.name)\" (click)=\"actionClicked(button.name, row)\">\n <mat-icon>{{getIcon(button.name)}}</mat-icon>\n </button>\n\n </ng-container>\n\n <ng-container *ngIf=\"button.name != 'create' && !testVisible(row,button.name)\">\n <label style=\"margin-right: 35px;\"></label>\n </ng-container>\n\n </ng-container>\n\n\n </td>\n </ng-container>\n\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': config.greyOut && config.greyOut(row)}\"></tr>\n </table>\n\n </div>\n\n <mat-paginator #tablePaginator [pageSizeOptions]=\"[10, 20, 50]\" showFirstLastButtons></mat-paginator>\n\n</div>\n\n<p *ngIf=\"dataSource?.length == 0\"><em>No Data</em></p>\n\n\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}\n"] }]
442
+ args: [{ selector: 'spa-table', template: "\n<spa-search *ngIf=\"config.searchConfig\" [config]=\"config.searchConfig\" style=\"margin-bottom: 20px;\" (searchClick)=\"searchClicked($event)\"></spa-search>\n\n<div class=\"top\">\n\n <div class=\"tin-row\" >\n <button *ngIf=\"createButton\" id=\"btnNew\" mat-raised-button color=\"primary\" style=\"margin-right: 10px;\" (click)=\"newModel()\">{{createButton.display}}</button>\n <!-- <spa-tiles *ngIf=\"config.tileConfig\" [reload]=\"tileReload\" [config]=\"config.tileConfig\"></spa-tiles> -->\n </div>\n\n <div *ngIf=\"config.tileConfig\" style=\"min-width: 75%;\">\n <spa-tiles [reload]=\"tileReload\" [config]=\"config.tileConfig\"></spa-tiles>\n </div>\n\n <div *ngIf=\"config.showFilter\" class=\"d-flex justify-content-end\">\n <spa-filter [showButton]=\"showFilterButton\" [data]=\"tableDataSource\" (refreshClick)=\"refreshClicked()\"></spa-filter>\n </div>\n\n</div>\n\n\n<div *ngIf=\"config.title\" class=\"title\">\n <label style=\"font-size: larger;\">{{config.title | camelToWords}}</label>\n</div>\n\n<div>\n\n <p *ngIf=\"!config\"><em>Configure Table</em></p>\n <p *ngIf=\"!dataSource\"><em>Loading...</em></p>\n\n\n\n <div *ngIf=\"dataSource\">\n\n\n <table mat-table [dataSource]=\"tableDataSource\" [ngClass]=\"elevation\">\n <ng-container *ngFor=\"let column of config.columns\" [matColumnDef]=\"column.name\">\n <th mat-header-cell *matHeaderCellDef>{{ column.alias ?? column.name | camelToWords }}</th>\n <td mat-cell *matCellDef=\"let row;\" >\n\n <ng-container [ngSwitch]=\"column.type\">\n\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <spa-check [value]=\"row[column.name]\" [readonly]=\"true\"></spa-check>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'select'\">\n <spa-select [options]=\"column.options\" [optionDisplay]=\"column.optionDisplay\" [optionValue]=\"column.optionValue\" [(value)]=\"row[column.name]\" width=\"90%\" ></spa-select>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'chip'\">\n <mat-chip-list>\n <mat-chip (click)=\"viewModel(row)\" [ngStyle]=\"{'background-color':getColor(row[column.name], column?.options)}\" style=\"font-size: 12px;\"> {{row[column.name]}} </mat-chip>\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </mat-chip-list>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'icon'\">\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'date'\">\n {{row[column.name] | date : 'dd/MM/yyyy'}}\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'datetime'\">\n {{row[column.name] | date : 'dd/MM/yyyy HH:mm'}}\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <!-- <ng-container *ngSwitchCase=\"'spinner'\">\n <mat-spinner [diameter]=\"20\">\n\n </mat-spinner>\n </ng-container> -->\n\n <ng-container *ngSwitchCase=\"'money'\">\n\n <label [ngStyle]=\"{'color': testColorCondition(row, column.color) ? column.color.name : ''}\">{{row[column.name] | currency:'':''}}</label>\n\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <label [ngStyle]=\"{'color': testColorCondition(row, column.color) ? column.color.name : ''}\">{{row[column.name]}}</label>\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"column.icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\n\n <ng-container *ngFor=\"let icon of column.icons\">\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"icon?.tip\" matTooltipPosition=\"above\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\n </ng-container>\n\n </ng-container>\n\n </ng-container>\n\n\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"action\">\n <th mat-header-cell *matHeaderCellDef> Action </th>\n <td mat-cell *matCellDef=\"let row\" [ngStyle]=\"{width:false ? '50px' : actionsWidth}\">\n\n\n <ng-container *ngFor=\"let button of displayedButtons\">\n\n <ng-container *ngIf=\"button.name != 'create' && testVisible(row,button.name)\">\n\n <button mat-mini-fab [matTooltip]=\"button.tip ?? button.name \" matTooltipPosition=\"above\" style=\"margin-right:5px\"\n [ngStyle]=\"{'background-color':getButtonColor(button, row)}\"\n [disabled]=\"testDisabled(row,button.name)\" (click)=\"actionClicked(button.name, row)\">\n <mat-icon>{{getIcon(button.name)}}</mat-icon>\n </button>\n\n </ng-container>\n\n <ng-container *ngIf=\"button.name != 'create' && !testVisible(row,button.name)\">\n <label style=\"margin-right: 35px;\"></label>\n </ng-container>\n\n </ng-container>\n\n\n </td>\n </ng-container>\n\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\" [ngClass]=\"{'make-gray': config.greyOut && config.greyOut(row)}\"></tr>\n </table>\n\n </div>\n\n <mat-paginator #tablePaginator [pageSizeOptions]=\"[10, 20, 50]\" showFirstLastButtons></mat-paginator>\n\n</div>\n\n<p *ngIf=\"dataSource?.length == 0\"><em>No Data</em></p>\n\n\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}\n"] }]
430
443
  }], ctorParameters: function () { return [{ type: i1.DataServiceLib }, { type: i2.MessageService }, { type: i3.BreakpointObserver }, { type: i4.MatDialog }]; }, propDecorators: { tablePaginator: [{
431
444
  type: ViewChild,
432
445
  args: ['tablePaginator']
@@ -449,4 +462,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
449
462
  }], inputChange: [{
450
463
  type: Output
451
464
  }] } });
452
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUEwQixVQUFVLEVBQXFCLE1BQU0sdUJBQXVCLENBQUM7QUFJOUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSTFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPL0IsTUFBTSxPQUFPLGNBQWM7SUFFekIsWUFBb0IsV0FBMkIsRUFBVSxjQUE4QixFQUFVLGtCQUFzQyxFQUFTLE1BQWlCO1FBQTdJLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBZ0VqSyxjQUFTLEdBQUcsa0JBQWtCLENBQUM7UUFDL0IsaUJBQVksR0FBRyxNQUFNLENBQUM7UUFFdEIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLGVBQVUsR0FBc0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQW1CckMsU0FBSSxHQUFPLEVBQUUsQ0FBQztRQUdiLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlC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ciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IERhdGVQaXBlLCBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQWN0aW9uLCBCdXR0b24sIENvbHVtbiwgRm9ybUNvbmZpZywgSWNvbiwgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBkZXRhaWxzRGlhbG9nIH0gZnJvbSAnLi9kZXRhaWxzRGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RpbkNvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzcGEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLCBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlciwgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nKVxuICB7XG4gICAgLy8gZGV0ZWN0IHNjcmVlbiBzaXplIGNoYW5nZXNcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFsgXCIobWF4LXdpZHRoOiA2MDBweClcIl0pLnN1YnNjcmliZSgocmVzdWx0OiBCcmVha3BvaW50U3RhdGUpID0+IHtcblxuICAgICAgaWYgKHJlc3VsdC5tYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuc21hbGxTY3JlZW4gPSB0cnVlXG4gICAgICAgIHRoaXMuc2V0Q29sdW1ucygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNtYWxsU2NyZWVuID0gZmFsc2VcbiAgICAgICAgdGhpcy5zZXRDb2x1bW5zKClcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5lbGV2YXRpb24pe1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmVsZXZhdGlvbiA9PSBcIm5vbmVcIil7XG4gICAgICAgIHRoaXMuZWxldmF0aW9uID0gXCJcIlxuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5jb25maWcuZWxldmF0aW9uID09IFwibG93XCIpIHtcbiAgICAgICAgdGhpcy5lbGV2YXRpb24gPSBcIm1hdC1lbGV2YXRpb24tejFcIlxuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5jb25maWcuZWxldmF0aW9uID09IFwibWVkaXVtXCIpIHtcbiAgICAgICAgdGhpcy5lbGV2YXRpb24gPSBcIm1hdC1lbGV2YXRpb24tejVcIlxuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5jb25maWcuZWxldmF0aW9uID09IFwiaGlnaFwiKSB7XG4gICAgICAgIHRoaXMuZWxldmF0aW9uID0gXCJtYXQtZWxldmF0aW9uLXo5XCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldENvbHVtbnMoKVxuXG4gICAgdGhpcy5jcmVhdGVCdXR0b24gPSB0aGlzLmdldEJ1dHRvbignY3JlYXRlJylcblxuXG5cbiAgICBpZiAodGhpcy5jb25maWcubG9hZEFjdGlvbil7XG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24sIFwiXCIpO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybURlZmF1bHRzKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcuc2VhcmNoQ29uZmlnKXtcbiAgICAgIHRoaXMuc2hvd0ZpbHRlckJ1dHRvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbG9hZCAhPSBudWxsKXtcbiAgICAgIHRoaXMucmVsb2FkLnN1YnNjcmliZSh2ID0+IHtcblxuICAgICAgICBpZiAodiA9PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5sb2FkQWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnPy5sb2FkQWN0aW9uLCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICBlbGV2YXRpb24gPSBcIm1hdC1lbGV2YXRpb24tejVcIjtcbiAgYWN0aW9uc1dpZHRoID0gXCI1MHB4XCI7XG5cbiAgc2hvd0ZpbHRlckJ1dHRvbiA9IHRydWU7XG4gIHRpbGVSZWxvYWQgOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcblxuXG4gIG5nT25DaGFuZ2VzKCkge1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5sb2FkQWN0aW9uKXtcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiVGFibGUgZGF0YSBDaGFuZ2VkXCIpXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSB0aGlzLmRhdGE7XG5cbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KHRoaXMuZGF0YVNvdXJjZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy50YWJsZVBhZ2luYXRvcjsgfSwgNSlcbiAgICB9XG5cbiAgfVxuXG5cbiAgQFZpZXdDaGlsZCgndGFibGVQYWdpbmF0b3InKSB0YWJsZVBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG5cbiAgQElucHV0KCkgZGF0YTogYW55ID1bXTtcbiAgQElucHV0KCkgY29uZmlnOiBUYWJsZUNvbmZpZztcbiAgQElucHV0KCkgcmVsb2FkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBAT3V0cHV0KCkgZGF0YUxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZWZyZXNoQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNyZWF0ZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBpbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBpbnB1dENoYW5nZWQoZXZlbnQpIHtcbiAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoeyBmaWVsZDogZXZlbnQuZmllbGQsIHZhbHVlOiBldmVudC52YWx1ZSB9KVxuICAgIC8vIGNvbnNvbGUubG9nKFwiQ2hhbmdlZCBcIiArIEpTT04uc3RyaW5naWZ5KGV2ZW50KSlcbiAgfVxuXG4gIHNtYWxsU2NyZWVuID0gZmFsc2VcblxuICBjcmVhdGVCdXR0b246IEJ1dHRvbjtcblxuXG4gIC8vVGFibGVcbiAgdGFibGVEYXRhU291cmNlO1xuICBkYXRhU291cmNlOiBhbnlbXTtcbiAgLy8gY29sdW1uczogQ29sdW1uW10gPSBbXTtcbiAgZGlzcGxheWVkQ29sdW1ucyA9IFtdXG4gIC8vIEBJbnB1dCgpIG9wdGlvblZhbHVlID0gXCJcIjtcbiAgLy8gQElucHV0KCkgb3B0aW9uRGlzcGxheSA9IFwiXCI7XG4gIGRpc3BsYXllZEJ1dHRvbnMgPSBbXVxuXG4gIGZvcm1EZWZhdWx0cygpIHtcblxuICAgIGlmICghdGhpcy5jb25maWcuZm9ybUNvbmZpZykge1xuICAgICAgbGV0IGNvbmZpZyA9IG5ldyBGb3JtQ29uZmlnXG5cbiAgICAgIGNvbmZpZy5maWVsZHMgPSBbXVxuXG4gICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcblxuICAgICAgICBsZXQgZmllbGQgPSB7IG5hbWU6IGNvbHVtbi5uYW1lLCB0eXBlOiBjb2x1bW4udHlwZSB9XG4gICAgICAgIGNvbmZpZy5maWVsZHMucHVzaChmaWVsZClcblxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY29uZmlnLmZvcm1Db25maWcgPSBjb25maWc7XG4gICAgfVxuICB9XG5cbiAgc2V0Q29sdW1ucygpIHtcblxuICAgIC8vY29sdW1uc1xuICAgIGlmICghdGhpcy5jb25maWc/LmNvbHVtbnMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLnNtYWxsU2NyZWVuKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbmZpZy5taW5Db2x1bW5zXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSlcbiAgICB9XG5cblxuICAgIC8vYnV0dG9uc1xuICAgIGlmICghdGhpcy5jb25maWc/LmJ1dHRvbnMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBidXR0b25zQ291bnQgPSB0aGlzLmNvbmZpZy5idXR0b25zLmZpbHRlcih4ID0+IHgubmFtZSAhPSAnY3JlYXRlJykubGVuZ3RoID8/IDBcbiAgICBpZiAoYnV0dG9uc0NvdW50ID4gMCkge1xuXG4gICAgICBpZiAoIXRoaXMuZGlzcGxheWVkQ29sdW1ucy5maW5kKHggPT4geCA9PSAnYWN0aW9uJykgJiYgdGhpcy5jb25maWcuYnV0dG9ucykge1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaChcImFjdGlvblwiKVxuICAgICAgfVxuXG5cblxuICAgICAgaWYgKHRoaXMuc21hbGxTY3JlZW4pIHtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcubWluQnV0dG9ucyl7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5ZWRCdXR0b25zID0gdGhpcy5jb25maWcuYnV0dG9ucy5maWx0ZXIoeCA9PiB0aGlzLmNvbmZpZy5taW5CdXR0b25zLmluY2x1ZGVzKHgubmFtZSkpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHRoaXMuZGlzcGxheWVkQnV0dG9ucyA9IHRoaXMuY29uZmlnLmJ1dHRvbnMuZmlsdGVyKHggPT4geC5uYW1lICE9ICdjcmVhdGUnKS5zbGljZSgwLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRCdXR0b25zID0gdGhpcy5jb25maWcuYnV0dG9ucy5maWx0ZXIoeCA9PiB4Lm5hbWUgIT0gJ2NyZWF0ZScpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFjdGlvbnNXaWR0aCA9IGAke3RoaXMuZGlzcGxheWVkQnV0dG9ucy5sZW5ndGggKiA0MCArMjB9cHhgXG5cblxuICAgIH1cblxuICB9XG5cbiAgc2V0QnV0dG9ucygpe1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5idXR0b25zKSByZXR1cm5cblxuICAgIGlmICghdGhpcy5zbWFsbFNjcmVlbil7XG4gICAgICB0aGlzLmRpc3BsYXllZEJ1dHRvbnMgPSB0aGlzLmNvbmZpZy5idXR0b25zO1xuXG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmRpc3BsYXllZEJ1dHRvbnMgPSB0aGlzLmNvbmZpZy5idXR0b25zO1xuXG4gICAgfVxuXG4gIH1cblxuXG4gIGdldEJ1dHRvbihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmJ1dHRvbnMpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiTm8gYnV0dG9ucyBmb3VuZFwiKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmJ1dHRvbnMuZmluZCh4ID0+IHgubmFtZSA9PSBuYW1lKVxuICB9XG5cbiAgZ2V0SWNvbihidXR0b25OYW1lOiBzdHJpbmcpe1xuXG4gICAgbGV0IGIgPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcbiAgICBpZiAoYi5pY29uKXtcbiAgICAgIHJldHVybiBiLmljb24ubmFtZVxuICAgIH1cblxuICAgIGxldCBpID0gJ3BhZ2V2aWV3J1xuXG4gICAgc3dpdGNoIChidXR0b25OYW1lKSB7XG5cbiAgICAgIGNhc2UgJ3ZpZXcnOlxuICAgICAgICBpID0gJ3BhZ2V2aWV3J1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICBpID0gJ2VkaXQnXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgaSA9ICdkZWxldGUnXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gaTtcbiAgfVxuXG4gIGdldEJ1dHRvbkNvbG9yKGJ1dHRvbjogQnV0dG9uLCByb3cpIHtcblxuICAgIGlmIChidXR0b24uZGlzYWJsZWQpe1xuICAgICAgaWYgKGJ1dHRvbi5kaXNhYmxlZChyb3cpKXtcbiAgICAgICAgcmV0dXJuICdsaWdodGdyYXknXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvbi5jb2xvcil7XG4gICAgICByZXR1cm4gYnV0dG9uLmNvbG9yO1xuICAgIH1cblxuICAgIGlmIChidXR0b24ubmFtZSA9PSAnZGVsZXRlJyl7XG4gICAgICByZXR1cm4gJyNGNDQzMzYnXG4gICAgfVxuXG4gICAgcmV0dXJuJyAjNDA1MEI1J1xuICB9XG5cblxuICBnZXRPcHRpb25zKGNvbHVtbil7XG4gICAgbGV0IHggPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQob3B0ID0+IG9wdC5uYW1lID09PSBjb2x1bW4pO1xuICAgIHJldHVybiAgeFxuICB9XG5cbiAgZ2V0Q29sb3Iodiwgb3B0aW9ucykge1xuXG4gICAgbGV0IGRlZmF1bHRDb2xvciA9ICdsaWdodGdyZXknXG5cbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBkZWZhdWx0Q29sb3JcblxuICAgIGxldCBjID0gb3B0aW9ucy5maW5kKHggPT4geC52YWx1ZSA9PSB2KVxuXG4gICAgaWYgKGMpIHtcbiAgICAgIHJldHVybiBjLmNvbG9yXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWZhdWx0Q29sb3JcbiAgICB9XG5cblxuICB9XG5cblxuICB0ZXN0SWNvbkNvbmRpdGlvbih2YWx1ZTogYW55LCBpY29uIDogSWNvbik6IGJvb2xlYW4ge1xuXG4gICAgLy8gY29uc3Qgb3B0aW9uID0gdGhpcy5nZXRPcHRpb25zKGNvbHVtbik7XG5cbiAgICBpZiAoaWNvbi5jb25kaXRpb24pIHtcbiAgICAgIHJldHVybiBpY29uLmNvbmRpdGlvbih2YWx1ZSk7XG5cbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHRlc3REaXNhYmxlZChyb3csIGJ1dHRvbk5hbWU6IHN0cmluZyk6IGJvb2xlYW57XG5cbiAgICBsZXQgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oYnV0dG9uTmFtZSlcblxuICAgIGlmIChidXR0b24uZGlzYWJsZWQpe1xuXG4gICAgICByZXR1cm4gYnV0dG9uLmRpc2FibGVkKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cblxuICB0ZXN0VmlzaWJsZShyb3csIGJ1dHRvbk5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXG4gICAgbGV0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpXG5cbiAgICBpZiAoYnV0dG9uLnZpc2libGUpIHtcblxuICAgICAgcmV0dXJuIGJ1dHRvbi52aXNpYmxlKHJvdyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuXG4gIC8vQWN0aW9uc1xuXG4gIGxvYWREYXRhKGFjdGlvbjogQWN0aW9uLCBkYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhcImxvYWRpbmdcIilcblxuICAgIGlmIChhY3Rpb24pIHtcblxuICAgICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKGFjdGlvbiwgZGF0YSkuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcubG9nUmVzcG9uc2Upe1xuICAgICAgICAgIGNvbnNvbGUubG9nKGFwaVJlc3BvbnNlKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gYXBpUmVzcG9uc2UuZGF0YVxuXG4gICAgICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KGFwaVJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnRhYmxlUGFnaW5hdG9yO1xuXG4gICAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKGFwaVJlc3BvbnNlLmRhdGEpO1xuICAgICAgICAgIHRoaXMudGFibGVEYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMudGFibGVQYWdpbmF0b3I7XG5cbiAgICAgICAgICB0aGlzLmRhdGFMb2FkZWQoYXBpUmVzcG9uc2UuZGF0YSk7XG5cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICB9KTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgLy9FdmVudHNcbiAgc2VhcmNoQ2xpY2tlZCh4KXtcbiAgICBjb25zb2xlLmxvZyhcIlNlYXJjaFwiKVxuICAgIHRoaXMucmVmcmVzaENsaWNrLmVtaXQoeCk7XG5cbiAgICAvLyBjb25zb2xlLmxvZyh4KVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnNlYXJjaENvbmZpZy5zZWFyY2hBY3Rpb24pe1xuICAgICAgdGhpcy5jb25maWcuc2VhcmNoQ29uZmlnLnNlYXJjaEFjdGlvbi5tZXRob2QgPT0gJ3Bvc3QnXG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnLnNlYXJjaENvbmZpZy5zZWFyY2hBY3Rpb24sIHgpO1xuICAgIH1cbiAgfVxuXG4gIHJlZnJlc2hDbGlja2VkKCkge1xuICAgIGNvbnNvbGUubG9nKFwiUmVmcmVzaFwiKVxuICAgIHRoaXMucmVmcmVzaENsaWNrLmVtaXQoKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5sb2FkQWN0aW9uKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24sXCJcIik7XG4gICAgfVxuICB9XG5cbiAgZGF0YUxvYWRlZCh4KSB7XG5cbiAgICB0aGlzLmRhdGFMb2FkLmVtaXQoeClcblxuICAgIGNvbnNvbGUubG9nKFwiZGF0YWxvYWRlZFwiKVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLnRpbGVDb25maWc/LmxvYWRBY3Rpb24pIHtcbiAgICAgIHRoaXMudGlsZVJlbG9hZC5uZXh0KHRydWUpO1xuICAgIH1cbiAgfVxuXG5cblxuICBhY3Rpb25DbGlja2VkKG5hbWUsIHJvdykge1xuXG4gICAgaWYgKG5hbWUgPT0gJ3ZpZXcnKSB7XG4gICAgICB0aGlzLnZpZXdNb2RlbChyb3cpXG4gICAgfVxuICAgIGVsc2UgaWYgKG5hbWUgPT0gJ2VkaXQnKSB7XG4gICAgICB0aGlzLmVkaXRNb2RlbChyb3cpO1xuICAgIH1cbiAgICBlbHNlIGlmIChuYW1lID09ICdkZWxldGUnKSB7XG4gICAgICB0aGlzLmRlbGV0ZU1vZGVsKHJvdyk7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmN1c3RvbU1vZGVsKG5hbWUscm93KTtcbiAgICB9XG5cbiAgfVxuXG5cbiAgYWN0aW9uQ2xpY2tlZEVtaXQobmFtZSwgcm93KSB7XG4gICAgY29uc29sZS5sb2coXCJBY3Rpb24gY2xpY2tlZFwiKVxuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7bmFtZTpuYW1lLGRhdGEgOiByb3d9KTtcbiAgfVxuXG4gIGN1c3RvbU1vZGVsKG5hbWUscm93KSB7XG5cbiAgICBsZXQgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24obmFtZSk7XG4gICAgaWYgKGJ1dHRvbiApIHtcbiAgICAgIHRoaXMuZG9BY3Rpb24oYnV0dG9uLm5hbWUscm93KVxuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQobmFtZSxyb3cpO1xuXG4gIH1cblxuXG4gIHZpZXdNb2RlbChyb3cpIHtcblxuICAgIGNvbnNvbGUubG9nKFwidmlldyBDbGlja2VkXCIpXG5cbiAgICBsZXQgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oJ3ZpZXcnKTtcblxuICAgIGlmICghYnV0dG9uKSByZXR1cm47XG5cbiAgICBpZiAoIWJ1dHRvbi5kaWFsb2cpIHtcbiAgICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQoYnV0dG9uLm5hbWUsIHJvdyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5mb3JtQ29uZmlnKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGNvbmZpZ3VyZSBmb3JtXCIpXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihkZXRhaWxzRGlhbG9nLCB7XG4gICAgICB3aWR0aDogXCI5MDBweFwiLFxuICAgICAgZGF0YTogeyBtb2RlOiBcInZpZXdcIiwgY29uZmlnOiB0aGlzLmNvbmZpZywgZGV0YWlsczogcm93LCBzbWFsbFNjcmVlbjogdGhpcy5zbWFsbFNjcmVlbiB9LFxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQubWVzc2FnZSkge1xuICAgICAgICB0aGlzLnJlZnJlc2hDbGlja2VkKCk7XG4gICAgICB9XG4gICAgfSk7XG5cblxuXG4gIH1cblxuICBuZXdNb2RlbCgpIHtcblxuICAgIGxldCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbignY3JlYXRlJyk7XG4gICAgaWYgKCFidXR0b24pIHJldHVybjtcblxuICAgIGlmICghYnV0dG9uLmRpYWxvZykge1xuICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdChidXR0b24ubmFtZSwgbnVsbCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5mb3JtQ29uZmlnKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiUGxlYXNlIGNvbmZpZ3VyZSBmb3JtXCIpXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihkZXRhaWxzRGlhbG9nLCB7XG4gICAgICB3aWR0aDogXCI5MDBweFwiLFxuICAgICAgZGF0YTogeyBtb2RlOiBcImNyZWF0ZVwiLCBjb25maWc6IHRoaXMuY29uZmlnLCBzbWFsbFNjcmVlbjogdGhpcy5zbWFsbFNjcmVlbiB9XG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5tZXNzYWdlID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQoJ2NyZWF0ZScscmVzdWx0LmRhdGEpO1xuICAgICAgICB0aGlzLnJlZnJlc2hDbGlja2VkKCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5tZXNzYWdlID09IFwiZW1pdFwiKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQoJ2NyZWF0ZScscmVzdWx0LmRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZWRpdE1vZGVsKHJvdykge1xuXG4gICAgbGV0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKCdlZGl0Jyk7XG4gICAgaWYgKCFidXR0b24pIHJldHVybjtcblxuICAgIGlmICghYnV0dG9uLmRpYWxvZykge1xuICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdChidXR0b24ubmFtZSwgcm93KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmZvcm1Db25maWcpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQbGVhc2UgY29uZmlndXJlIGZvcm1cIilcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKGRldGFpbHNEaWFsb2csIHtcbiAgICAgIHdpZHRoOiBcIjkwMHB4XCIsXG4gICAgICBkYXRhOiB7IG1vZGU6IFwiZWRpdFwiLCBjb25maWc6IHRoaXMuY29uZmlnLCBkZXRhaWxzOiByb3csIHNtYWxsU2NyZWVuOiB0aGlzLnNtYWxsU2NyZWVuIH0sXG4gICAgfSk7XG5cblxuICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5pbnB1dENoYW5nZS5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgIHRoaXMuaW5wdXRDaGFuZ2VkKHgpXG4gICAgfSk7XG5cblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0Lm1lc3NhZ2UgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdCgnZWRpdCcscmVzdWx0LmRhdGEpO1xuICAgICAgICB0aGlzLnJlZnJlc2hDbGlja2VkKCk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5tZXNzYWdlID09IFwiZW1pdFwiKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQoJ2VkaXQnLHJlc3VsdC5kYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZU1vZGVsKHJvdykge1xuXG4gICAgbGV0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKCdkZWxldGUnKTtcbiAgICBpZiAoIWJ1dHRvbikgcmV0dXJuO1xuXG5cbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYERFTEVURSA/YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT0gXCJ5ZXNcIikge1xuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KCdkZWxldGUnLCByb3cpXG4gICAgICAgIHRoaXMuZG9BY3Rpb24oYnV0dG9uLm5hbWUscm93KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cblxuICBkb0FjdGlvbihidXR0b25OYW1lOiBzdHJpbmcsIHJvdykge1xuXG4gICAgbGV0IGIgPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKVxuXG4gICAgaWYgKCFiKSByZXR1cm47XG5cbiAgICBpZiAoIWIuYWN0aW9uKSByZXR1cm47XG5cbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoYi5hY3Rpb24sIHJvdykuc3Vic2NyaWJlKChhcGlSZXNwb25zZSkgPT4ge1xuXG4gICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICBpZiAoYi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KGIuYWN0aW9uLnN1Y2Nlc3NNZXNzYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiVXBkYXRlZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBhcGlSZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIChlcnJvcikgPT57XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgZXJyb3IpO1xuICAgIH1cblxuICAgICk7XG5cbiAgfVxuXG5cbn1cbiIsIlxuPHNwYS1zZWFyY2ggKm5nSWY9XCJjb25maWcuc2VhcmNoQ29uZmlnXCIgW2NvbmZpZ109XCJjb25maWcuc2VhcmNoQ29uZmlnXCIgc3R5bGU9XCJtYXJnaW4tYm90dG9tOiAyMHB4O1wiIChzZWFyY2hDbGljayk9XCJzZWFyY2hDbGlja2VkKCRldmVudClcIj48L3NwYS1zZWFyY2g+XG5cbjxkaXYgY2xhc3M9XCJ0b3BcIj5cblxuICA8ZGl2IGNsYXNzPVwidGluLXJvd1wiID5cbiAgICA8YnV0dG9uICpuZ0lmPVwiY3JlYXRlQnV0dG9uXCIgaWQ9XCJidG5OZXdcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweDtcIiAoY2xpY2spPVwibmV3TW9kZWwoKVwiPnt7Y3JlYXRlQnV0dG9uLmRpc3BsYXl9fTwvYnV0dG9uPlxuICAgIDwhLS0gPHNwYS10aWxlcyAqbmdJZj1cImNvbmZpZy50aWxlQ29uZmlnXCIgW3JlbG9hZF09XCJ0aWxlUmVsb2FkXCIgW2NvbmZpZ109XCJjb25maWcudGlsZUNvbmZpZ1wiPjwvc3BhLXRpbGVzPiAtLT5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cImNvbmZpZy50aWxlQ29uZmlnXCIgc3R5bGU9XCJtaW4td2lkdGg6IDc1JTtcIj5cbiAgICA8c3BhLXRpbGVzICBbcmVsb2FkXT1cInRpbGVSZWxvYWRcIiBbY29uZmlnXT1cImNvbmZpZy50aWxlQ29uZmlnXCI+PC9zcGEtdGlsZXM+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJjb25maWcuc2hvd0ZpbHRlclwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cbiAgICA8c3BhLWZpbHRlciBbc2hvd0J1dHRvbl09XCJzaG93RmlsdGVyQnV0dG9uXCIgW2RhdGFdPVwidGFibGVEYXRhU291cmNlXCIgKHJlZnJlc2hDbGljayk9XCJyZWZyZXNoQ2xpY2tlZCgpXCI+PC9zcGEtZmlsdGVyPlxuICA8L2Rpdj5cblxuPC9kaXY+XG5cblxuPGRpdiAqbmdJZj1cImNvbmZpZy50aXRsZVwiIGNsYXNzPVwidGl0bGVcIj5cbiAgPGxhYmVsIHN0eWxlPVwiZm9udC1zaXplOiBsYXJnZXI7XCI+e3tjb25maWcudGl0bGUgfCBjYW1lbFRvV29yZHN9fTwvbGFiZWw+XG48L2Rpdj5cblxuPGRpdj5cblxuICA8cCAqbmdJZj1cIiFjb25maWdcIj48ZW0+Q29uZmlndXJlIFRhYmxlPC9lbT48L3A+XG4gIDxwICpuZ0lmPVwiIWRhdGFTb3VyY2VcIj48ZW0+TG9hZGluZy4uLjwvZW0+PC9wPlxuXG5cblxuICA8ZGl2ICpuZ0lmPVwiZGF0YVNvdXJjZVwiPlxuXG5cbiAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cInRhYmxlRGF0YVNvdXJjZVwiICBbbmdDbGFzc109XCJlbGV2YXRpb25cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb25maWcuY29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLm5hbWVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj57eyBjb2x1bW4uYWxpYXMgPz8gY29sdW1uLm5hbWUgfCBjYW1lbFRvV29yZHMgfX08L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93O1wiID5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cbiAgICAgICAgICAgICAgPHNwYS1jaGVjayBbdmFsdWVdPVwicm93W2NvbHVtbi5uYW1lXVwiIFtyZWFkb25seV09XCJ0cnVlXCI+PC9zcGEtY2hlY2s+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cbiAgICAgICAgICAgICAgPHNwYS1zZWxlY3QgW29wdGlvbnNdPVwiY29sdW1uLm9wdGlvbnNcIiBbb3B0aW9uRGlzcGxheV09XCJjb2x1bW4ub3B0aW9uRGlzcGxheVwiIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIiBbKHZhbHVlKV09XCJyb3dbY29sdW1uLm5hbWVdXCIgd2lkdGg9XCI5MCVcIiA+PC9zcGEtc2VsZWN0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGlwJ1wiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKGNsaWNrKT1cInZpZXdNb2RlbChyb3cpXCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWNvbG9yJzpnZXRDb2xvcihyb3dbY29sdW1uLm5hbWVdLCBjb2x1bW4/Lm9wdGlvbnMpfVwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4O1wiPiB7e3Jvd1tjb2x1bW4ubmFtZV19fSA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cImNvbHVtbi5pY29uICYmIHRlc3RJY29uQ29uZGl0aW9uKHJvdywgY29sdW1uLmljb24pXCIgW21hdFRvb2x0aXBdPVwiY29sdW1uLmljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmljb24/LmNvbG9yfVwiPnt7Y29sdW1uLmljb24ubmFtZSB9fTwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwiaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzppY29uPy5jb2xvcn1cIj57e2ljb24ubmFtZSB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpY29uJ1wiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwiY29sdW1uLmljb24gJiYgdGVzdEljb25Db25kaXRpb24ocm93LCBjb2x1bW4uaWNvbilcIiBbbWF0VG9vbHRpcF09XCJjb2x1bW4uaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbHVtbi5pY29uc1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwiaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzppY29uPy5jb2xvcn1cIj57e2ljb24ubmFtZSB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxuICAgICAgICAgICAgICB7e3Jvd1tjb2x1bW4ubmFtZV0gfCBkYXRlIDogJ2RkL01NL3l5eXknfX1cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cImNvbHVtbi5pY29uICYmIHRlc3RJY29uQ29uZGl0aW9uKHJvdywgY29sdW1uLmljb24pXCIgW21hdFRvb2x0aXBdPVwiY29sdW1uLmljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmljb24/LmNvbG9yfVwiPnt7Y29sdW1uLmljb24ubmFtZSB9fTwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaWNvbiBvZiBjb2x1bW4uaWNvbnNcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwidGVzdEljb25Db25kaXRpb24ocm93LCBpY29uKVwiIFttYXRUb29sdGlwXT1cImljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgW25nU3R5bGVdPVwieydjb2xvcic6aWNvbj8uY29sb3J9XCI+e3tpY29uLm5hbWUgfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZXRpbWUnXCI+XG4gICAgICAgICAgICAgIHt7cm93W2NvbHVtbi5uYW1lXSB8IGRhdGUgOiAnZGQvTU0veXl5eSBISDptbSd9fVxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwiY29sdW1uLmljb24gJiYgdGVzdEljb25Db25kaXRpb24ocm93LCBjb2x1bW4uaWNvbilcIiBbbWF0VG9vbHRpcF09XCJjb2x1bW4uaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbHVtbi5pY29uc1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwiaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzppY29uPy5jb2xvcn1cIj57e2ljb24ubmFtZSB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NwaW5uZXInXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCIyMFwiPlxuXG4gICAgICAgICAgICAgICAgPC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21vbmV5J1wiPlxuICAgICAgICAgICAgICB7e3Jvd1tjb2x1bW4ubmFtZV0gfCBjdXJyZW5jeTonJzonJ319XG5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cImNvbHVtbi5pY29uICYmIHRlc3RJY29uQ29uZGl0aW9uKHJvdywgY29sdW1uLmljb24pXCIgW21hdFRvb2x0aXBdPVwiY29sdW1uLmljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmljb24/LmNvbG9yfVwiPnt7Y29sdW1uLmljb24ubmFtZSB9fTwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaWNvbiBvZiBjb2x1bW4uaWNvbnNcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwidGVzdEljb25Db25kaXRpb24ocm93LCBpY29uKVwiIFttYXRUb29sdGlwXT1cImljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgW25nU3R5bGVdPVwieydjb2xvcic6aWNvbj8uY29sb3J9XCI+e3tpY29uLm5hbWUgfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICAgIDxsYWJlbD57e3Jvd1tjb2x1bW4ubmFtZV19fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cImNvbHVtbi5pY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmNvbHVtbi5pY29uPy5jb2xvcn1cIj57e2NvbHVtbi5pY29uLm5hbWUgfX08L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cInRlc3RJY29uQ29uZGl0aW9uKHJvdywgaWNvbilcIiBbbWF0VG9vbHRpcF09XCJpY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYWN0aW9uXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IEFjdGlvbiA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW25nU3R5bGVdPVwie3dpZHRoOmZhbHNlID8gJzUwcHgnIDogYWN0aW9uc1dpZHRofVwiPlxuXG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZGlzcGxheWVkQnV0dG9uc1wiPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnV0dG9uLm5hbWUgIT0gJ2NyZWF0ZScgJiYgdGVzdFZpc2libGUocm93LGJ1dHRvbi5uYW1lKVwiPlxuXG4gICAgICAgICAgICAgIDxidXR0b24gIG1hdC1taW5pLWZhYiAgW21hdFRvb2x0aXBdPVwiYnV0dG9uLnRpcCA/PyBidXR0b24ubmFtZSBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjVweFwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6Z2V0QnV0dG9uQ29sb3IoYnV0dG9uLCByb3cpfVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0ZXN0RGlzYWJsZWQocm93LGJ1dHRvbi5uYW1lKVwiICAoY2xpY2spPVwiYWN0aW9uQ2xpY2tlZChidXR0b24ubmFtZSwgcm93KVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj57e2dldEljb24oYnV0dG9uLm5hbWUpfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJidXR0b24ubmFtZSAhPSAnY3JlYXRlJyAmJiAhdGVzdFZpc2libGUocm93LGJ1dHRvbi5uYW1lKVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDM1cHg7XCI+PC9sYWJlbD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiIFtuZ0NsYXNzXT1cInsnbWFrZS1ncmF5JzogY29uZmlnLmdyZXlPdXQgJiYgY29uZmlnLmdyZXlPdXQocm93KX1cIj48L3RyPlxuICAgIDwvdGFibGU+XG5cbiAgPC9kaXY+XG5cbiAgPG1hdC1wYWdpbmF0b3IgI3RhYmxlUGFnaW5hdG9yIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzEwLCAyMCwgNTBdXCIgc2hvd0ZpcnN0TGFzdEJ1dHRvbnM+PC9tYXQtcGFnaW5hdG9yPlxuXG48L2Rpdj5cblxuPHAgKm5nSWY9XCJkYXRhU291cmNlPy5sZW5ndGggPT0gMFwiPjxlbT5ObyBEYXRhPC9lbT48L3A+XG5cblxuIl19
465
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsT0FBTyxFQUFpQyxVQUFVLEVBQXFCLE1BQU0sdUJBQXVCLENBQUM7QUFJckcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSTFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPL0IsTUFBTSxPQUFPLGNBQWM7SUFFekIsWUFBb0IsV0FBMkIsRUFBVSxjQUE4QixFQUFVLGtCQUFzQyxFQUFTLE1BQWlCO1FBQTdJLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBZ0VqSyxjQUFTLEdBQUcsa0JBQWtCLENBQUM7UUFDL0IsaUJBQVksR0FBRyxNQUFNLENBQUM7UUFFdEIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLGVBQVUsR0FBc0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQW1CckMsU0FBSSxHQUFPLEVBQUUsQ0FBQztRQUdiLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2pDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFPM0MsZ0JBQVcsR0FBRyxLQUFLLENBQUE7UUFRbkIsMEJBQTBCO1FBQzFCLHFCQUFnQixHQUFHLEVBQUUsQ0FBQTtRQUNyQiw2QkFBNkI7UUFDN0IsK0JBQStCO1FBQy9CLHFCQUFnQixHQUFHLEVBQUUsQ0FBQTtRQWhIbkIsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBdUIsRUFBRSxFQUFFO1lBRTdGLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUE7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQTthQUNsQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQTtnQkFDeEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFBO2FBQ2xCO1FBRUgsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsUUFBUTtRQUVOLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUM7WUFDeEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLEVBQUM7Z0JBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFBO2FBQ3BCO2lCQUNJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFBO2FBQ3BDO2lCQUNJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksUUFBUSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFBO2FBQ3BDO2lCQUNJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksTUFBTSxFQUFFO2dCQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLGtCQUFrQixDQUFBO2FBQ3BDO1NBQ0Y7UUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUE7UUFFakIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBSTVDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUMzQztRQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFDO1lBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7U0FDL0I7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUV4QixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQ2IsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRTt3QkFDM0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztxQkFDNUM7aUJBQ0Y7WUFFSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQVVELFdBQVc7UUFFVCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUM7WUFDMUIsb0NBQW9DO1lBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUU1QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksa0JBQWtCLENBQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3BFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1NBQy9FO0lBRUgsQ0FBQztJQWdCRCxZQUFZLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUNqRSxrREFBa0Q7SUFDcEQsQ0FBQztJQWdCRCxZQUFZO1FBRVYsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQzNCLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxDQUFBO1lBRTNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO1lBRWxCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFFbkMsSUFBSSxLQUFLLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO2dCQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUUzQixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxVQUFVO1FBRVIsU0FBUztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtZQUN6QixPQUFNO1NBQ1A7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFBO1NBQy9DO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDcEU7UUFHRCxTQUFTO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO1lBQ3pCLE9BQU07U0FDUDtRQUVELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQTtRQUNsRixJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUU7WUFFcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQzFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7YUFDckM7WUFJRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBRXBCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUM7b0JBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7aUJBQ2pHO3FCQUFJO29CQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ3pGO2FBQ0Y7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLENBQUM7YUFDN0U7WUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxFQUFFLEdBQUUsRUFBRSxJQUFJLENBQUE7U0FHakU7SUFFSCxDQUFDO0lBRUQsVUFBVTtRQUVSLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87WUFBRSxPQUFNO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFDO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztTQUU3QzthQUFJO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1NBRTdDO0lBRUgsQ0FBQztJQUdELFNBQVMsQ0FBQyxJQUFZO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUE7WUFDL0IsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRUQsT0FBTyxDQUFDLFVBQWtCO1FBRXhCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFDO1lBQ1QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtTQUNuQjtRQUVELElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQTtRQUVsQixRQUFRLFVBQVUsRUFBRTtZQUVsQixLQUFLLE1BQU07Z0JBQ1QsQ0FBQyxHQUFHLFVBQVUsQ0FBQTtnQkFDZCxNQUFNO1lBQ1IsS0FBSyxNQUFNO2dCQUNULENBQUMsR0FBRyxNQUFNLENBQUE7Z0JBQ1YsTUFBTTtZQUNSLEtBQUssUUFBUTtnQkFDWCxDQUFDLEdBQUcsUUFBUSxDQUFBO2dCQUNaLE1BQU07WUFFUjtnQkFDRSxNQUFNO1NBQ1Q7UUFFRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBYyxFQUFFLEdBQUc7UUFFaEMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFDO1lBQ2xCLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQztnQkFDdkIsT0FBTyxXQUFXLENBQUE7YUFDbkI7U0FDRjtRQUVELElBQUksTUFBTSxDQUFDLEtBQUssRUFBQztZQUNmLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNyQjtRQUVELElBQUksTUFBTSxDQUFDLElBQUksSUFBSSxRQUFRLEVBQUM7WUFDMUIsT0FBTyxTQUFTLENBQUE7U0FDakI7UUFFRCxPQUFNLFVBQVUsQ0FBQTtJQUNsQixDQUFDO0lBR0QsVUFBVSxDQUFDLE1BQU07UUFDZixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBQzdELE9BQVEsQ0FBQyxDQUFBO0lBQ1gsQ0FBQztJQUVELFFBQVEsQ0FBQyxDQUFDLEVBQUUsT0FBTztRQUVqQixJQUFJLFlBQVksR0FBRyxXQUFXLENBQUE7UUFFOUIsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLFlBQVksQ0FBQTtRQUVqQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUV2QyxJQUFJLENBQUMsRUFBRTtZQUNMLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQTtTQUNmO2FBQU07WUFDTCxPQUFPLFlBQVksQ0FBQTtTQUNwQjtJQUdILENBQUM7SUFHRCxpQkFBaUIsQ0FBQyxLQUFVLEVBQUUsSUFBVztRQUV2QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBRTlCO2FBQUk7WUFDSCxPQUFPLElBQUksQ0FBQztTQUNiO0lBQ0gsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQVUsRUFBRSxLQUFZO1FBRXpDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFekIsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ25CLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUUvQjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsR0FBRyxFQUFFLFVBQWtCO1FBRWxDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUE7UUFFdkMsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFDO1lBRWxCLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM3QjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUdELFdBQVcsQ0FBQyxHQUFHLEVBQUUsVUFBa0I7UUFFakMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUV2QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFFbEIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBR0QsU0FBUztJQUVULFFBQVEsQ0FBQyxNQUFjLEVBQUUsSUFBUztRQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRXRCLElBQUksTUFBTSxFQUFFO1lBRVYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQXdCLEVBQUUsRUFBRTtnQkFFNUUsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBQztvQkFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtpQkFDekI7Z0JBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFBO2dCQUVsQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksa0JBQWtCLENBQU0sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUVyRCxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2hFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7b0JBRXJELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUduQztxQkFBTTtvQkFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM1RDtZQUVILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFFSCxDQUFDO0lBR0QsUUFBUTtJQUNSLGFBQWEsQ0FBQyxDQUFDO1FBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUxQixpQkFBaUI7UUFFakIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUM7WUFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUE7WUFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDekQ7SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUd6QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUMsRUFBRSxDQUFDLENBQUM7U0FDMUM7YUFBSTtZQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLENBQUM7UUFFVixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUVyQixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRXpCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUlELGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRztRQUVyQixJQUFJLElBQUksSUFBSSxNQUFNLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUNwQjthQUNJLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTtZQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JCO2FBQ0ksSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkI7YUFBSTtZQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO0lBRUgsQ0FBQztJQUdELGlCQUFpQixDQUFDLElBQUksRUFBRSxHQUFHO1FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBQyxJQUFJLEVBQUMsSUFBSSxFQUFHLEdBQUcsRUFBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFJLEVBQUMsR0FBRztRQUVsQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksTUFBTSxFQUFHO1lBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQy9CO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBQyxHQUFHLENBQUMsQ0FBQztJQUVuQyxDQUFDO0lBR0QsU0FBUyxDQUFDLEdBQUc7UUFFWCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBRTNCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXBCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1lBQ2xELE9BQU87U0FDUjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNoRCxLQUFLLEVBQUUsT0FBTztZQUNkLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUN6RixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNsQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUlMLENBQUM7SUFFRCxRQUFRO1FBRU4sSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDMUMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUE7WUFDbEQsT0FBTztTQUNSO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hELEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUM3RSxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN2QjtpQkFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxFQUFFO2dCQUNuQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM5QztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUFHO1FBRVgsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDekMsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUE7WUFDbEQsT0FBTztTQUNSO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2hELEtBQUssRUFBRSxPQUFPO1lBQ2QsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO1NBQ3pGLENBQUMsQ0FBQztRQUdILFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN0QixDQUFDLENBQUMsQ0FBQztRQUdILFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ25CLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxTQUFTLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7aUJBQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sRUFBRTtnQkFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDNUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBRztRQUViLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBR3BCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzNELElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQTtnQkFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2hDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBR0QsUUFBUSxDQUFDLFVBQWtCLEVBQUUsR0FBRztRQUU5QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRWxDLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTztRQUVmLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUVoRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ3BEO3FCQUFNO29CQUNMLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN0QztnQkFFRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7YUFDdkI7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM1RDtRQUNILENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FFQSxDQUFDO0lBRUosQ0FBQzs7MkdBL2pCVSxjQUFjOytGQUFkLGNBQWMsdWFDbEIzQixxa1FBaUtBOzJGRC9JYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLFdBQVc7MkxBMEZRLGNBQWM7c0JBQTFDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQUdsQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUsIEN1cnJlbmN5UGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBY3Rpb24sIEJ1dHRvbiwgQ29sb3IsIENvbHVtbiwgRm9ybUNvbmZpZywgSWNvbiwgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBkZXRhaWxzRGlhbG9nIH0gZnJvbSAnLi9kZXRhaWxzRGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2VMaWIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL1RpbkNvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzcGEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLCBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlciwgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nKVxuICB7XG4gICAgLy8gZGV0ZWN0IHNjcmVlbiBzaXplIGNoYW5nZXNcbiAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKFsgXCIobWF4LXdpZHRoOiA2MDBweClcIl0pLnN1YnNjcmliZSgocmVzdWx0OiBCcmVha3BvaW50U3RhdGUpID0+IHtcblxuICAgICAgaWYgKHJlc3VsdC5tYXRjaGVzKSB7XG4gICAgICAgIHRoaXMuc21hbGxTY3JlZW4gPSB0cnVlXG4gICAgICAgIHRoaXMuc2V0Q29sdW1ucygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNtYWxsU2NyZWVuID0gZmFsc2VcbiAgICAgICAgdGhpcy5zZXRDb2x1bW5zKClcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5lbGV2YXRpb24pe1xuICAgICAgaWYgKHRoaXMuY29uZmlnLmVsZXZhdGlvbiA9PSBcIm5vbmVcIil7XG4gICAgICAgIHRoaXMuZWxldmF0aW9uID0gXCJcIlxuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5jb25maWcuZWxldmF0aW9uID09IFwibG93XCIpIHtcbiAgICAgICAgdGhpcy5lbGV2YXRpb24gPSBcIm1hdC1lbGV2YXRpb24tejFcIlxuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5jb25maWcuZWxldmF0aW9uID09IFwibWVkaXVtXCIpIHtcbiAgICAgICAgdGhpcy5lbGV2YXRpb24gPSBcIm1hdC1lbGV2YXRpb24tejVcIlxuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5jb25maWcuZWxldmF0aW9uID09IFwiaGlnaFwiKSB7XG4gICAgICAgIHRoaXMuZWxldmF0aW9uID0gXCJtYXQtZWxldmF0aW9uLXo5XCJcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNldENvbHVtbnMoKVxuXG4gICAgdGhpcy5jcmVhdGVCdXR0b24gPSB0aGlzLmdldEJ1dHRvbignY3JlYXRlJylcblxuXG5cbiAgICBpZiAodGhpcy5jb25maWcubG9hZEFjdGlvbil7XG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24sIFwiXCIpO1xuICAgIH1cblxuICAgIHRoaXMuZm9ybURlZmF1bHRzKCk7XG5cbiAgICBpZiAodGhpcy5jb25maWcuc2VhcmNoQ29uZmlnKXtcbiAgICAgIHRoaXMuc2hvd0ZpbHRlckJ1dHRvbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlbG9hZCAhPSBudWxsKXtcbiAgICAgIHRoaXMucmVsb2FkLnN1YnNjcmliZSh2ID0+IHtcblxuICAgICAgICBpZiAodiA9PSB0cnVlKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5sb2FkQWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnPy5sb2FkQWN0aW9uLCBcIlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICBlbGV2YXRpb24gPSBcIm1hdC1lbGV2YXRpb24tejVcIjtcbiAgYWN0aW9uc1dpZHRoID0gXCI1MHB4XCI7XG5cbiAgc2hvd0ZpbHRlckJ1dHRvbiA9IHRydWU7XG4gIHRpbGVSZWxvYWQgOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcblxuXG4gIG5nT25DaGFuZ2VzKCkge1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5sb2FkQWN0aW9uKXtcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiVGFibGUgZGF0YSBDaGFuZ2VkXCIpXG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSB0aGlzLmRhdGE7XG5cbiAgICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZTxhbnk+KHRoaXMuZGF0YVNvdXJjZSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy50YWJsZVBhZ2luYXRvcjsgfSwgNSlcbiAgICB9XG5cbiAgfVxuXG5cbiAgQFZpZXdDaGlsZCgndGFibGVQYWdpbmF0b3InKSB0YWJsZVBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG5cbiAgQElucHV0KCkgZGF0YTogYW55ID1bXTtcbiAgQElucHV0KCkgY29uZmlnOiBUYWJsZUNvbmZpZztcbiAgQElucHV0KCkgcmVsb2FkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBAT3V0cHV0KCkgZGF0YUxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSByZWZyZXNoQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWFyY2hDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNyZWF0ZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBpbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBpbnB1dENoYW5nZWQoZXZlbnQpIHtcbiAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoeyBmaWVsZDogZXZlbnQuZmllbGQsIHZhbHVlOiBldmVudC52YWx1ZSB9KVxuICAgIC8vIGNvbnNvbGUubG9nKFwiQ2hhbmdlZCBcIiArIEpTT04uc3RyaW5naWZ5KGV2ZW50KSlcbiAgfVxuXG4gIHNtYWxsU2NyZWVuID0gZmFsc2VcblxuICBjcmVhdGVCdXR0b246IEJ1dHRvbjtcblxuXG4gIC8vVGFibGVcbiAgdGFibGVEYXRhU291cmNlO1xuICBkYXRhU291cmNlOiBhbnlbXTtcbiAgLy8gY29sdW1uczogQ29sdW1uW10gPSBbXTtcbiAgZGlzcGxheWVkQ29sdW1ucyA9IFtdXG4gIC8vIEBJbnB1dCgpIG9wdGlvblZhbHVlID0gXCJcIjtcbiAgLy8gQElucHV0KCkgb3B0aW9uRGlzcGxheSA9IFwiXCI7XG4gIGRpc3BsYXllZEJ1dHRvbnMgPSBbXVxuXG4gIGZvcm1EZWZhdWx0cygpIHtcblxuICAgIGlmICghdGhpcy5jb25maWcuZm9ybUNvbmZpZykge1xuICAgICAgbGV0IGNvbmZpZyA9IG5ldyBGb3JtQ29uZmlnXG5cbiAgICAgIGNvbmZpZy5maWVsZHMgPSBbXVxuXG4gICAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcblxuICAgICAgICBsZXQgZmllbGQgPSB7IG5hbWU6IGNvbHVtbi5uYW1lLCB0eXBlOiBjb2x1bW4udHlwZSB9XG4gICAgICAgIGNvbmZpZy5maWVsZHMucHVzaChmaWVsZClcblxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY29uZmlnLmZvcm1Db25maWcgPSBjb25maWc7XG4gICAgfVxuICB9XG5cbiAgc2V0Q29sdW1ucygpIHtcblxuICAgIC8vY29sdW1uc1xuICAgIGlmICghdGhpcy5jb25maWc/LmNvbHVtbnMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLnNtYWxsU2NyZWVuKSB7XG4gICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbmZpZy5taW5Db2x1bW5zXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSlcbiAgICB9XG5cblxuICAgIC8vYnV0dG9uc1xuICAgIGlmICghdGhpcy5jb25maWc/LmJ1dHRvbnMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBidXR0b25zQ291bnQgPSB0aGlzLmNvbmZpZy5idXR0b25zLmZpbHRlcih4ID0+IHgubmFtZSAhPSAnY3JlYXRlJykubGVuZ3RoID8/IDBcbiAgICBpZiAoYnV0dG9uc0NvdW50ID4gMCkge1xuXG4gICAgICBpZiAoIXRoaXMuZGlzcGxheWVkQ29sdW1ucy5maW5kKHggPT4geCA9PSAnYWN0aW9uJykgJiYgdGhpcy5jb25maWcuYnV0dG9ucykge1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaChcImFjdGlvblwiKVxuICAgICAgfVxuXG5cblxuICAgICAgaWYgKHRoaXMuc21hbGxTY3JlZW4pIHtcblxuICAgICAgICBpZiAodGhpcy5jb25maWcubWluQnV0dG9ucyl7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5ZWRCdXR0b25zID0gdGhpcy5jb25maWcuYnV0dG9ucy5maWx0ZXIoeCA9PiB0aGlzLmNvbmZpZy5taW5CdXR0b25zLmluY2x1ZGVzKHgubmFtZSkpXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHRoaXMuZGlzcGxheWVkQnV0dG9ucyA9IHRoaXMuY29uZmlnLmJ1dHRvbnMuZmlsdGVyKHggPT4geC5uYW1lICE9ICdjcmVhdGUnKS5zbGljZSgwLCAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ZWRCdXR0b25zID0gdGhpcy5jb25maWcuYnV0dG9ucy5maWx0ZXIoeCA9PiB4Lm5hbWUgIT0gJ2NyZWF0ZScpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFjdGlvbnNXaWR0aCA9IGAke3RoaXMuZGlzcGxheWVkQnV0dG9ucy5sZW5ndGggKiA0MCArMjB9cHhgXG5cblxuICAgIH1cblxuICB9XG5cbiAgc2V0QnV0dG9ucygpe1xuXG4gICAgaWYgKCF0aGlzLmNvbmZpZy5idXR0b25zKSByZXR1cm5cblxuICAgIGlmICghdGhpcy5zbWFsbFNjcmVlbil7XG4gICAgICB0aGlzLmRpc3BsYXllZEJ1dHRvbnMgPSB0aGlzLmNvbmZpZy5idXR0b25zO1xuXG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmRpc3BsYXllZEJ1dHRvbnMgPSB0aGlzLmNvbmZpZy5idXR0b25zO1xuXG4gICAgfVxuXG4gIH1cblxuXG4gIGdldEJ1dHRvbihuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmJ1dHRvbnMpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwiTm8gYnV0dG9ucyBmb3VuZFwiKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmJ1dHRvbnMuZmluZCh4ID0+IHgubmFtZSA9PSBuYW1lKVxuICB9XG5cbiAgZ2V0SWNvbihidXR0b25OYW1lOiBzdHJpbmcpe1xuXG4gICAgbGV0IGIgPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKTtcbiAgICBpZiAoYi5pY29uKXtcbiAgICAgIHJldHVybiBiLmljb24ubmFtZVxuICAgIH1cblxuICAgIGxldCBpID0gJ3BhZ2V2aWV3J1xuXG4gICAgc3dpdGNoIChidXR0b25OYW1lKSB7XG5cbiAgICAgIGNhc2UgJ3ZpZXcnOlxuICAgICAgICBpID0gJ3BhZ2V2aWV3J1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICBpID0gJ2VkaXQnXG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgaSA9ICdkZWxldGUnXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gaTtcbiAgfVxuXG4gIGdldEJ1dHRvbkNvbG9yKGJ1dHRvbjogQnV0dG9uLCByb3cpIHtcblxuICAgIGlmIChidXR0b24uZGlzYWJsZWQpe1xuICAgICAgaWYgKGJ1dHRvbi5kaXNhYmxlZChyb3cpKXtcbiAgICAgICAgcmV0dXJuICdsaWdodGdyYXknXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJ1dHRvbi5jb2xvcil7XG4gICAgICByZXR1cm4gYnV0dG9uLmNvbG9yO1xuICAgIH1cblxuICAgIGlmIChidXR0b24ubmFtZSA9PSAnZGVsZXRlJyl7XG4gICAgICByZXR1cm4gJyNGNDQzMzYnXG4gICAgfVxuXG4gICAgcmV0dXJuJyAjNDA1MEI1J1xuICB9XG5cblxuICBnZXRPcHRpb25zKGNvbHVtbil7XG4gICAgbGV0IHggPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQob3B0ID0+IG9wdC5uYW1lID09PSBjb2x1bW4pO1xuICAgIHJldHVybiAgeFxuICB9XG5cbiAgZ2V0Q29sb3Iodiwgb3B0aW9ucykge1xuXG4gICAgbGV0IGRlZmF1bHRDb2xvciA9ICdsaWdodGdyZXknXG5cbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBkZWZhdWx0Q29sb3JcblxuICAgIGxldCBjID0gb3B0aW9ucy5maW5kKHggPT4geC52YWx1ZSA9PSB2KVxuXG4gICAgaWYgKGMpIHtcbiAgICAgIHJldHVybiBjLmNvbG9yXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWZhdWx0Q29sb3JcbiAgICB9XG5cblxuICB9XG5cblxuICB0ZXN0SWNvbkNvbmRpdGlvbih2YWx1ZTogYW55LCBpY29uIDogSWNvbik6IGJvb2xlYW4ge1xuXG4gICAgaWYgKGljb24uY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gaWNvbi5jb25kaXRpb24odmFsdWUpO1xuXG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0ZXN0Q29sb3JDb25kaXRpb24odmFsdWU6IGFueSwgY29sb3I6IENvbG9yKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIWNvbG9yKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAoY29sb3IuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gY29sb3IuY29uZGl0aW9uKHZhbHVlKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0ZXN0RGlzYWJsZWQocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFue1xuXG4gICAgbGV0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpXG5cbiAgICBpZiAoYnV0dG9uLmRpc2FibGVkKXtcblxuICAgICAgcmV0dXJuIGJ1dHRvbi5kaXNhYmxlZChyb3cpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG5cbiAgdGVzdFZpc2libGUocm93LCBidXR0b25OYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblxuICAgIGxldCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihidXR0b25OYW1lKVxuXG4gICAgaWYgKGJ1dHRvbi52aXNpYmxlKSB7XG5cbiAgICAgIHJldHVybiBidXR0b24udmlzaWJsZShyb3cpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cblxuICAvL0FjdGlvbnNcblxuICBsb2FkRGF0YShhY3Rpb246IEFjdGlvbiwgZGF0YTogYW55KSB7XG4gICAgY29uc29sZS5sb2coXCJsb2FkaW5nXCIpXG5cbiAgICBpZiAoYWN0aW9uKSB7XG5cbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShhY3Rpb24sIGRhdGEpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxvZ1Jlc3BvbnNlKXtcbiAgICAgICAgICBjb25zb2xlLmxvZyhhcGlSZXNwb25zZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IGFwaVJlc3BvbnNlLmRhdGFcblxuICAgICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8YW55PihhcGlSZXNwb25zZS5kYXRhKTtcbiAgICAgICAgdGhpcy50YWJsZURhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy50YWJsZVBhZ2luYXRvcjtcblxuICAgICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMudGFibGVEYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShhcGlSZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICB0aGlzLnRhYmxlRGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnRhYmxlUGFnaW5hdG9yO1xuXG4gICAgICAgICAgdGhpcy5kYXRhTG9hZGVkKGFwaVJlc3BvbnNlLmRhdGEpO1xuXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnRvYXN0KFwiRXJyb3I6IFwiICsgYXBpUmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuXG4gIC8vRXZlbnRzXG4gIHNlYXJjaENsaWNrZWQoeCl7XG4gICAgY29uc29sZS5sb2coXCJTZWFyY2hcIilcbiAgICB0aGlzLnJlZnJlc2hDbGljay5lbWl0KHgpO1xuXG4gICAgLy8gY29uc29sZS5sb2coeClcblxuICAgIGlmICh0aGlzLmNvbmZpZy5zZWFyY2hDb25maWcuc2VhcmNoQWN0aW9uKXtcbiAgICAgIHRoaXMuY29uZmlnLnNlYXJjaENvbmZpZy5zZWFyY2hBY3Rpb24ubWV0aG9kID09ICdwb3N0J1xuICAgICAgdGhpcy5sb2FkRGF0YSh0aGlzLmNvbmZpZy5zZWFyY2hDb25maWcuc2VhcmNoQWN0aW9uLCB4KTtcbiAgICB9XG4gIH1cblxuICByZWZyZXNoQ2xpY2tlZCgpIHtcbiAgICBjb25zb2xlLmxvZyhcIlJlZnJlc2hcIilcbiAgICB0aGlzLnJlZnJlc2hDbGljay5lbWl0KCk7XG5cblxuICAgIGlmICh0aGlzLmNvbmZpZy5sb2FkQWN0aW9uKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMuY29uZmlnLmxvYWRBY3Rpb24sXCJcIik7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmRhdGFMb2FkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBkYXRhTG9hZGVkKHgpIHtcblxuICAgIHRoaXMuZGF0YUxvYWQuZW1pdCh4KVxuXG4gICAgY29uc29sZS5sb2coXCJkYXRhbG9hZGVkXCIpXG5cbiAgICBpZiAodGhpcy5jb25maWcudGlsZUNvbmZpZz8ubG9hZEFjdGlvbikge1xuICAgICAgdGhpcy50aWxlUmVsb2FkLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cblxuXG4gIGFjdGlvbkNsaWNrZWQobmFtZSwgcm93KSB7XG5cbiAgICBpZiAobmFtZSA9PSAndmlldycpIHtcbiAgICAgIHRoaXMudmlld01vZGVsKHJvdylcbiAgICB9XG4gICAgZWxzZSBpZiAobmFtZSA9PSAnZWRpdCcpIHtcbiAgICAgIHRoaXMuZWRpdE1vZGVsKHJvdyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG5hbWUgPT0gJ2RlbGV0ZScpIHtcbiAgICAgIHRoaXMuZGVsZXRlTW9kZWwocm93KTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMuY3VzdG9tTW9kZWwobmFtZSxyb3cpO1xuICAgIH1cblxuICB9XG5cblxuICBhY3Rpb25DbGlja2VkRW1pdChuYW1lLCByb3cpIHtcbiAgICBjb25zb2xlLmxvZyhcIkFjdGlvbiBjbGlja2VkXCIpXG4gICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KHtuYW1lOm5hbWUsZGF0YSA6IHJvd30pO1xuICB9XG5cbiAgY3VzdG9tTW9kZWwobmFtZSxyb3cpIHtcblxuICAgIGxldCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbihuYW1lKTtcbiAgICBpZiAoYnV0dG9uICkge1xuICAgICAgdGhpcy5kb0FjdGlvbihidXR0b24ubmFtZSxyb3cpXG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdChuYW1lLHJvdyk7XG5cbiAgfVxuXG5cbiAgdmlld01vZGVsKHJvdykge1xuXG4gICAgY29uc29sZS5sb2coXCJ2aWV3IENsaWNrZWRcIilcblxuICAgIGxldCBidXR0b24gPSB0aGlzLmdldEJ1dHRvbigndmlldycpO1xuXG4gICAgaWYgKCFidXR0b24pIHJldHVybjtcblxuICAgIGlmICghYnV0dG9uLmRpYWxvZykge1xuICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdChidXR0b24ubmFtZSwgcm93KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmZvcm1Db25maWcpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQbGVhc2UgY29uZmlndXJlIGZvcm1cIilcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKGRldGFpbHNEaWFsb2csIHtcbiAgICAgIHdpZHRoOiBcIjkwMHB4XCIsXG4gICAgICBkYXRhOiB7IG1vZGU6IFwidmlld1wiLCBjb25maWc6IHRoaXMuY29uZmlnLCBkZXRhaWxzOiByb3csIHNtYWxsU2NyZWVuOiB0aGlzLnNtYWxsU2NyZWVuIH0sXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5tZXNzYWdlKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuXG5cbiAgfVxuXG4gIG5ld01vZGVsKCkge1xuXG4gICAgbGV0IGJ1dHRvbiA9IHRoaXMuZ2V0QnV0dG9uKCdjcmVhdGUnKTtcbiAgICBpZiAoIWJ1dHRvbikgcmV0dXJuO1xuXG4gICAgaWYgKCFidXR0b24uZGlhbG9nKSB7XG4gICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KGJ1dHRvbi5uYW1lLCBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmZvcm1Db25maWcpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJQbGVhc2UgY29uZmlndXJlIGZvcm1cIilcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKGRldGFpbHNEaWFsb2csIHtcbiAgICAgIHdpZHRoOiBcIjkwMHB4XCIsXG4gICAgICBkYXRhOiB7IG1vZGU6IFwiY3JlYXRlXCIsIGNvbmZpZzogdGhpcy5jb25maWcsIHNtYWxsU2NyZWVuOiB0aGlzLnNtYWxsU2NyZWVuIH1cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0Lm1lc3NhZ2UgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdCgnY3JlYXRlJyxyZXN1bHQuZGF0YSk7XG4gICAgICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm1lc3NhZ2UgPT0gXCJlbWl0XCIpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdCgnY3JlYXRlJyxyZXN1bHQuZGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBlZGl0TW9kZWwocm93KSB7XG5cbiAgICBsZXQgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oJ2VkaXQnKTtcbiAgICBpZiAoIWJ1dHRvbikgcmV0dXJuO1xuXG4gICAgaWYgKCFidXR0b24uZGlhbG9nKSB7XG4gICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KGJ1dHRvbi5uYW1lLCByb3cpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb25maWcuZm9ybUNvbmZpZykge1xuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlBsZWFzZSBjb25maWd1cmUgZm9ybVwiKVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oZGV0YWlsc0RpYWxvZywge1xuICAgICAgd2lkdGg6IFwiOTAwcHhcIixcbiAgICAgIGRhdGE6IHsgbW9kZTogXCJlZGl0XCIsIGNvbmZpZzogdGhpcy5jb25maWcsIGRldGFpbHM6IHJvdywgc21hbGxTY3JlZW46IHRoaXMuc21hbGxTY3JlZW4gfSxcbiAgICB9KTtcblxuXG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmlucHV0Q2hhbmdlLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgdGhpcy5pbnB1dENoYW5nZWQoeClcbiAgICB9KTtcblxuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdClcbiAgICAgIGlmIChyZXN1bHQubWVzc2FnZSA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aGlzLmFjdGlvbkNsaWNrZWRFbWl0KCdlZGl0JyxyZXN1bHQuZGF0YSk7XG4gICAgICAgIHRoaXMucmVmcmVzaENsaWNrZWQoKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzdWx0Lm1lc3NhZ2UgPT0gXCJlbWl0XCIpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25DbGlja2VkRW1pdCgnZWRpdCcscmVzdWx0LmRhdGEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlTW9kZWwocm93KSB7XG5cbiAgICBsZXQgYnV0dG9uID0gdGhpcy5nZXRCdXR0b24oJ2RlbGV0ZScpO1xuICAgIGlmICghYnV0dG9uKSByZXR1cm47XG5cblxuICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuY29uZmlybShgREVMRVRFID9gKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCA9PSBcInllc1wiKSB7XG4gICAgICAgIHRoaXMuYWN0aW9uQ2xpY2tlZEVtaXQoJ2RlbGV0ZScsIHJvdylcbiAgICAgICAgdGhpcy5kb0FjdGlvbihidXR0b24ubmFtZSxyb3cpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuXG4gIGRvQWN0aW9uKGJ1dHRvbk5hbWU6IHN0cmluZywgcm93KSB7XG5cbiAgICBsZXQgYiA9IHRoaXMuZ2V0QnV0dG9uKGJ1dHRvbk5hbWUpXG5cbiAgICBpZiAoIWIpIHJldHVybjtcblxuICAgIGlmICghYi5hY3Rpb24pIHJldHVybjtcblxuICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaShiLmFjdGlvbiwgcm93KS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlKSA9PiB7XG5cbiAgICAgIGlmIChhcGlSZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgIGlmIChiLmFjdGlvbi5zdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoYi5hY3Rpb24uc3VjY2Vzc01lc3NhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJVcGRhdGVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWZyZXNoQ2xpY2tlZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIkVycm9yOiBcIiArIGFwaVJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgKGVycm9yKSA9PntcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJFcnJvcjogXCIgKyBlcnJvcik7XG4gICAgfVxuXG4gICAgKTtcblxuICB9XG5cblxufVxuIiwiXG48c3BhLXNlYXJjaCAqbmdJZj1cImNvbmZpZy5zZWFyY2hDb25maWdcIiBbY29uZmlnXT1cImNvbmZpZy5zZWFyY2hDb25maWdcIiBzdHlsZT1cIm1hcmdpbi1ib3R0b206IDIwcHg7XCIgKHNlYXJjaENsaWNrKT1cInNlYXJjaENsaWNrZWQoJGV2ZW50KVwiPjwvc3BhLXNlYXJjaD5cblxuPGRpdiBjbGFzcz1cInRvcFwiPlxuXG4gIDxkaXYgY2xhc3M9XCJ0aW4tcm93XCIgPlxuICAgIDxidXR0b24gKm5nSWY9XCJjcmVhdGVCdXR0b25cIiBpZD1cImJ0bk5ld1wiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAxMHB4O1wiIChjbGljayk9XCJuZXdNb2RlbCgpXCI+e3tjcmVhdGVCdXR0b24uZGlzcGxheX19PC9idXR0b24+XG4gICAgPCEtLSA8c3BhLXRpbGVzICpuZ0lmPVwiY29uZmlnLnRpbGVDb25maWdcIiBbcmVsb2FkXT1cInRpbGVSZWxvYWRcIiBbY29uZmlnXT1cImNvbmZpZy50aWxlQ29uZmlnXCI+PC9zcGEtdGlsZXM+IC0tPlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiY29uZmlnLnRpbGVDb25maWdcIiBzdHlsZT1cIm1pbi13aWR0aDogNzUlO1wiPlxuICAgIDxzcGEtdGlsZXMgIFtyZWxvYWRdPVwidGlsZVJlbG9hZFwiIFtjb25maWddPVwiY29uZmlnLnRpbGVDb25maWdcIj48L3NwYS10aWxlcz5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cImNvbmZpZy5zaG93RmlsdGVyXCIgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxuICAgIDxzcGEtZmlsdGVyIFtzaG93QnV0dG9uXT1cInNob3dGaWx0ZXJCdXR0b25cIiBbZGF0YV09XCJ0YWJsZURhdGFTb3VyY2VcIiAocmVmcmVzaENsaWNrKT1cInJlZnJlc2hDbGlja2VkKClcIj48L3NwYS1maWx0ZXI+XG4gIDwvZGl2PlxuXG48L2Rpdj5cblxuXG48ZGl2ICpuZ0lmPVwiY29uZmlnLnRpdGxlXCIgY2xhc3M9XCJ0aXRsZVwiPlxuICA8bGFiZWwgc3R5bGU9XCJmb250LXNpemU6IGxhcmdlcjtcIj57e2NvbmZpZy50aXRsZSB8IGNhbWVsVG9Xb3Jkc319PC9sYWJlbD5cbjwvZGl2PlxuXG48ZGl2PlxuXG4gIDxwICpuZ0lmPVwiIWNvbmZpZ1wiPjxlbT5Db25maWd1cmUgVGFibGU8L2VtPjwvcD5cbiAgPHAgKm5nSWY9XCIhZGF0YVNvdXJjZVwiPjxlbT5Mb2FkaW5nLi4uPC9lbT48L3A+XG5cblxuXG4gIDxkaXYgKm5nSWY9XCJkYXRhU291cmNlXCI+XG5cblxuICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwidGFibGVEYXRhU291cmNlXCIgIFtuZ0NsYXNzXT1cImVsZXZhdGlvblwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbmZpZy5jb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPnt7IGNvbHVtbi5hbGlhcyA/PyBjb2x1bW4ubmFtZSB8IGNhbWVsVG9Xb3JkcyB9fTwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3c7XCIgPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uLnR5cGVcIj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxuICAgICAgICAgICAgICA8c3BhLWNoZWNrIFt2YWx1ZV09XCJyb3dbY29sdW1uLm5hbWVdXCIgW3JlYWRvbmx5XT1cInRydWVcIj48L3NwYS1jaGVjaz5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc2VsZWN0J1wiPlxuICAgICAgICAgICAgICA8c3BhLXNlbGVjdCBbb3B0aW9uc109XCJjb2x1bW4ub3B0aW9uc1wiIFtvcHRpb25EaXNwbGF5XT1cImNvbHVtbi5vcHRpb25EaXNwbGF5XCIgW29wdGlvblZhbHVlXT1cImNvbHVtbi5vcHRpb25WYWx1ZVwiIFsodmFsdWUpXT1cInJvd1tjb2x1bW4ubmFtZV1cIiB3aWR0aD1cIjkwJVwiID48L3NwYS1zZWxlY3Q+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoaXAnXCI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0PlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAoY2xpY2spPVwidmlld01vZGVsKHJvdylcIiBbbmdTdHlsZV09XCJ7J2JhY2tncm91bmQtY29sb3InOmdldENvbG9yKHJvd1tjb2x1bW4ubmFtZV0sIGNvbHVtbj8ub3B0aW9ucyl9XCIgc3R5bGU9XCJmb250LXNpemU6IDEycHg7XCI+IHt7cm93W2NvbHVtbi5uYW1lXX19IDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwiY29sdW1uLmljb24gJiYgdGVzdEljb25Db25kaXRpb24ocm93LCBjb2x1bW4uaWNvbilcIiBbbWF0VG9vbHRpcF09XCJjb2x1bW4uaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaWNvbiBvZiBjb2x1bW4uaWNvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cInRlc3RJY29uQ29uZGl0aW9uKHJvdywgaWNvbilcIiBbbWF0VG9vbHRpcF09XCJpY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Q+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ljb24nXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cImNvbHVtbi5pY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmNvbHVtbi5pY29uPy5jb2xvcn1cIj57e2NvbHVtbi5pY29uLm5hbWUgfX08L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cInRlc3RJY29uQ29uZGl0aW9uKHJvdywgaWNvbilcIiBbbWF0VG9vbHRpcF09XCJpY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XG4gICAgICAgICAgICAgIHt7cm93W2NvbHVtbi5uYW1lXSB8IGRhdGUgOiAnZGQvTU0veXl5eSd9fVxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwiY29sdW1uLmljb24gJiYgdGVzdEljb25Db25kaXRpb24ocm93LCBjb2x1bW4uaWNvbilcIiBbbWF0VG9vbHRpcF09XCJjb2x1bW4uaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbHVtbi5pY29uc1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwiaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzppY29uPy5jb2xvcn1cIj57e2ljb24ubmFtZSB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRldGltZSdcIj5cbiAgICAgICAgICAgICAge3tyb3dbY29sdW1uLm5hbWVdIHwgZGF0ZSA6ICdkZC9NTS95eXl5IEhIOm1tJ319XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cImNvbHVtbi5pY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmNvbHVtbi5pY29uPy5jb2xvcn1cIj57e2NvbHVtbi5pY29uLm5hbWUgfX08L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cInRlc3RJY29uQ29uZGl0aW9uKHJvdywgaWNvbilcIiBbbWF0VG9vbHRpcF09XCJpY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3Bpbm5lcidcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjIwXCI+XG5cbiAgICAgICAgICAgICAgICA8L21hdC1zcGlubmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbW9uZXknXCI+XG5cbiAgICAgICAgICAgICAgPGxhYmVsIFtuZ1N0eWxlXT1cInsnY29sb3InOiB0ZXN0Q29sb3JDb25kaXRpb24ocm93LCBjb2x1bW4uY29sb3IpID8gY29sdW1uLmNvbG9yLm5hbWUgOiAnJ31cIj57e3Jvd1tjb2x1bW4ubmFtZV0gfCBjdXJyZW5jeTonJzonJ319PC9sYWJlbD5cblxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwiY29sdW1uLmljb24gJiYgdGVzdEljb25Db25kaXRpb24ocm93LCBjb2x1bW4uaWNvbilcIiBbbWF0VG9vbHRpcF09XCJjb2x1bW4uaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbHVtbi5pY29uc1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwiaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzppY29uPy5jb2xvcn1cIj57e2ljb24ubmFtZSB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgICAgICAgPGxhYmVsIFtuZ1N0eWxlXT1cInsnY29sb3InOiB0ZXN0Q29sb3JDb25kaXRpb24ocm93LCBjb2x1bW4uY29sb3IpID8gY29sdW1uLmNvbG9yLm5hbWUgOiAnJ31cIj57e3Jvd1tjb2x1bW4ubmFtZV19fTwvbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cImNvbHVtbi5pY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmNvbHVtbi5pY29uPy5jb2xvcn1cIj57e2NvbHVtbi5pY29uLm5hbWUgfX08L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cInRlc3RJY29uQ29uZGl0aW9uKHJvdywgaWNvbilcIiBbbWF0VG9vbHRpcF09XCJpY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYWN0aW9uXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IEFjdGlvbiA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgW25nU3R5bGVdPVwie3dpZHRoOmZhbHNlID8gJzUwcHgnIDogYWN0aW9uc1dpZHRofVwiPlxuXG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZGlzcGxheWVkQnV0dG9uc1wiPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnV0dG9uLm5hbWUgIT0gJ2NyZWF0ZScgJiYgdGVzdFZpc2libGUocm93LGJ1dHRvbi5uYW1lKVwiPlxuXG4gICAgICAgICAgICAgIDxidXR0b24gIG1hdC1taW5pLWZhYiAgW21hdFRvb2x0aXBdPVwiYnV0dG9uLnRpcCA/PyBidXR0b24ubmFtZSBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OjVweFwiXG4gICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6Z2V0QnV0dG9uQ29sb3IoYnV0dG9uLCByb3cpfVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0ZXN0RGlzYWJsZWQocm93LGJ1dHRvbi5uYW1lKVwiICAoY2xpY2spPVwiYWN0aW9uQ2xpY2tlZChidXR0b24ubmFtZSwgcm93KVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj57e2dldEljb24oYnV0dG9uLm5hbWUpfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJidXR0b24ubmFtZSAhPSAnY3JlYXRlJyAmJiAhdGVzdFZpc2libGUocm93LGJ1dHRvbi5uYW1lKVwiPlxuICAgICAgICAgICAgICA8bGFiZWwgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDM1cHg7XCI+PC9sYWJlbD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zO1wiIFtuZ0NsYXNzXT1cInsnbWFrZS1ncmF5JzogY29uZmlnLmdyZXlPdXQgJiYgY29uZmlnLmdyZXlPdXQocm93KX1cIj48L3RyPlxuICAgIDwvdGFibGU+XG5cbiAgPC9kaXY+XG5cbiAgPG1hdC1wYWdpbmF0b3IgI3RhYmxlUGFnaW5hdG9yIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzEwLCAyMCwgNTBdXCIgc2hvd0ZpcnN0TGFzdEJ1dHRvbnM+PC9tYXQtcGFnaW5hdG9yPlxuXG48L2Rpdj5cblxuPHAgKm5nSWY9XCJkYXRhU291cmNlPy5sZW5ndGggPT0gMFwiPjxlbT5ObyBEYXRhPC9lbT48L3A+XG5cblxuIl19
@@ -118,9 +118,9 @@ export class TenantSettingsComponent {
118
118
  }
119
119
  }
120
120
  TenantSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TenantSettingsComponent, deps: [{ token: i1.DataServiceLib }, { token: i2.MessageService }, { token: i3.AuthService }], target: i0.ɵɵFactoryTarget.Component });
121
- TenantSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TenantSettingsComponent, selector: "spa-tenant-settings", ngImport: i0, template: "<div class=\"container\">\r\n\r\n <div>\r\n\r\n <label class=\"title\" style=\"font-size: larger;\">Organisation Details</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n\r\n <div *ngIf=\"myTenant && plan\" class=\"mb-2 mt-3 tin-grid\" style=\" font-size: 14px;\">\r\n\r\n <div class=\"tin-row mb-2\" *ngIf=\"ownTenant\">\r\n <spa-text display=\"Name\" [(value)]=\"myTenant.name\" hint=\"This name will be displayed to all members of your organisation.\" style=\"min-width: 300px;\"> </spa-text>\r\n <button mat-stroked-button color=\"primary\" (click)=\"renameTenant()\">Save</button>\r\n </div>\r\n\r\n <div class=\"tin-row mb-2\">\r\n <spa-select display=\"Current Organisation\" [options]=\"tenants\" optionDisplay=\"name\" optionValue=\"tenantID\" [(value)]=\"currentTenantID\"\r\n hint=\"You are required to login again after switching organisations.\" style=\"min-width: 300px;\"></spa-select>\r\n <button mat-stroked-button color=\"primary\" (click)=\"switchTenant()\">Switch</button>\r\n </div>\r\n\r\n <div *ngIf=\"ownTenant\">\r\n <spa-label display=\"Plan\" [value]=\"plan.name\"></spa-label>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" style=\"font-size: larger;\">Members</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">Request other users to join your organisation as partners or employees to form a partnership or company.</label>\r\n\r\n <spa-table [config]=\"membersTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" style=\"font-size: larger;\">Invitations</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">The following are requests for you to join other organisations.</label>\r\n\r\n <spa-table [config]=\"invTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" style=\"font-size: larger;\">Member Organisations</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">Organisations that you are a member of.</label>\r\n\r\n <spa-table [config]=\"orgsTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" style=\"font-size: larger;\">Billing and Subscription</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n\r\n <div *ngIf=\"myTenant && plan\" class=\"mb-1 mt-3\" style=\"max-width: 300px; font-size: 14px;\">\r\n <spa-label display=\"Plan\" [value]=\"plan.name\"></spa-label>\r\n <spa-label display=\"Next Payment\" format=\"money\" [value]=\"plan.price\"></spa-label>\r\n <spa-label display=\"Due Date\" format=\"date\" value=\"2024-01-01\"></spa-label>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"mt-5\"><label>.</label></div>\r\n\r\n\r\n\r\n</div>\r\n\r\n\r\n", styles: [".title{margin-top:1em;font-size:larger;font-weight:300}.subtitle{font-size:smaller}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.TextComponent, selector: "spa-text", inputs: ["readonly", "hint", "display", "placeholder", "value", "format", "type", "rows", "width", "options", "optionValue", "required", "min", "max", "regex"], outputs: ["valueChange", "leave", "enterPress"] }, { kind: "component", type: i7.LabelComponent, selector: "spa-label", inputs: ["display", "value", "format"] }, { kind: "component", type: i8.SelectComponent, selector: "spa-select", inputs: ["width", "readonly", "readonlyMode", "hint", "placeholder", "multiple", "display", "value", "options", "optionValue", "optionDisplay", "optionDisplayExtra"], outputs: ["valueChange"] }, { kind: "component", type: i9.TableComponent, selector: "spa-table", inputs: ["data", "config", "reload"], outputs: ["dataLoad", "refreshClick", "searchClick", "createClick", "actionClick", "inputChange"] }] });
121
+ TenantSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TenantSettingsComponent, selector: "spa-tenant-settings", ngImport: i0, template: "<div class=\"container\">\r\n\r\n <div>\r\n\r\n <label class=\"title\" >Organisation Details</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n\r\n <div *ngIf=\"myTenant && plan\" class=\"mb-2 mt-3 tin-grid\" style=\" font-size: 14px;\">\r\n\r\n <div class=\"tin-col mb-2\" *ngIf=\"ownTenant\" style=\"max-width: 500px;\">\r\n <spa-text display=\"Name\" [(value)]=\"myTenant.name\" hint=\"This name will be displayed to all members of your organisation.\" style=\"min-width: 300px;\"> </spa-text>\r\n <button mat-stroked-button color=\"primary\" (click)=\"renameTenant()\">Save</button>\r\n </div>\r\n\r\n <div class=\"tin-col mb-2\" style=\"max-width: 500px;\">\r\n <spa-select display=\"Current Organisation\" [options]=\"tenants\" optionDisplay=\"name\" optionValue=\"tenantID\" [(value)]=\"currentTenantID\"\r\n hint=\"You are required to login again after switching organisations.\" style=\"min-width: 300px;\"></spa-select>\r\n <button mat-stroked-button color=\"primary\" (click)=\"switchTenant()\">Switch</button>\r\n </div>\r\n\r\n <div *ngIf=\"ownTenant\">\r\n <spa-label display=\"Plan\" [value]=\"plan.name\"></spa-label>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" >Members</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">Request other users to join your organisation as partners or employees to form a partnership or company.</label>\r\n\r\n <spa-table [config]=\"membersTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" >Invitations</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">The following are requests for you to join other organisations.</label>\r\n\r\n <spa-table [config]=\"invTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" >Member Organisations</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">Organisations that you are a member of.</label>\r\n\r\n <spa-table [config]=\"orgsTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" >Billing and Subscription</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n\r\n <div *ngIf=\"myTenant && plan\" class=\"mb-1 mt-3\" style=\"max-width: 300px; font-size: 14px;\">\r\n <spa-label display=\"Plan\" [value]=\"plan.name\"></spa-label>\r\n <spa-label display=\"Next Payment\" format=\"money\" [value]=\"plan.price\"></spa-label>\r\n <spa-label display=\"Due Date\" format=\"date\" value=\"2024-01-01\"></spa-label>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"mt-5\"><label>.</label></div>\r\n\r\n\r\n\r\n</div>\r\n\r\n\r\n", styles: [".title{margin-top:1em;font-size:28px;font-weight:300}.subtitle{font-size:smaller}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6.TextComponent, selector: "spa-text", inputs: ["readonly", "hint", "display", "placeholder", "value", "format", "type", "rows", "width", "options", "optionValue", "required", "min", "max", "regex"], outputs: ["valueChange", "leave", "enterPress"] }, { kind: "component", type: i7.LabelComponent, selector: "spa-label", inputs: ["display", "value", "format"] }, { kind: "component", type: i8.SelectComponent, selector: "spa-select", inputs: ["width", "readonly", "readonlyMode", "hint", "placeholder", "multiple", "display", "value", "options", "optionValue", "optionDisplay", "optionDisplayExtra"], outputs: ["valueChange"] }, { kind: "component", type: i9.TableComponent, selector: "spa-table", inputs: ["data", "config", "reload"], outputs: ["dataLoad", "refreshClick", "searchClick", "createClick", "actionClick", "inputChange"] }] });
122
122
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TenantSettingsComponent, decorators: [{
123
123
  type: Component,
124
- args: [{ selector: 'spa-tenant-settings', template: "<div class=\"container\">\r\n\r\n <div>\r\n\r\n <label class=\"title\" style=\"font-size: larger;\">Organisation Details</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n\r\n <div *ngIf=\"myTenant && plan\" class=\"mb-2 mt-3 tin-grid\" style=\" font-size: 14px;\">\r\n\r\n <div class=\"tin-row mb-2\" *ngIf=\"ownTenant\">\r\n <spa-text display=\"Name\" [(value)]=\"myTenant.name\" hint=\"This name will be displayed to all members of your organisation.\" style=\"min-width: 300px;\"> </spa-text>\r\n <button mat-stroked-button color=\"primary\" (click)=\"renameTenant()\">Save</button>\r\n </div>\r\n\r\n <div class=\"tin-row mb-2\">\r\n <spa-select display=\"Current Organisation\" [options]=\"tenants\" optionDisplay=\"name\" optionValue=\"tenantID\" [(value)]=\"currentTenantID\"\r\n hint=\"You are required to login again after switching organisations.\" style=\"min-width: 300px;\"></spa-select>\r\n <button mat-stroked-button color=\"primary\" (click)=\"switchTenant()\">Switch</button>\r\n </div>\r\n\r\n <div *ngIf=\"ownTenant\">\r\n <spa-label display=\"Plan\" [value]=\"plan.name\"></spa-label>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" style=\"font-size: larger;\">Members</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">Request other users to join your organisation as partners or employees to form a partnership or company.</label>\r\n\r\n <spa-table [config]=\"membersTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" style=\"font-size: larger;\">Invitations</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">The following are requests for you to join other organisations.</label>\r\n\r\n <spa-table [config]=\"invTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" style=\"font-size: larger;\">Member Organisations</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">Organisations that you are a member of.</label>\r\n\r\n <spa-table [config]=\"orgsTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" style=\"font-size: larger;\">Billing and Subscription</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n\r\n <div *ngIf=\"myTenant && plan\" class=\"mb-1 mt-3\" style=\"max-width: 300px; font-size: 14px;\">\r\n <spa-label display=\"Plan\" [value]=\"plan.name\"></spa-label>\r\n <spa-label display=\"Next Payment\" format=\"money\" [value]=\"plan.price\"></spa-label>\r\n <spa-label display=\"Due Date\" format=\"date\" value=\"2024-01-01\"></spa-label>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"mt-5\"><label>.</label></div>\r\n\r\n\r\n\r\n</div>\r\n\r\n\r\n", styles: [".title{margin-top:1em;font-size:larger;font-weight:300}.subtitle{font-size:smaller}\n"] }]
124
+ args: [{ selector: 'spa-tenant-settings', template: "<div class=\"container\">\r\n\r\n <div>\r\n\r\n <label class=\"title\" >Organisation Details</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n\r\n <div *ngIf=\"myTenant && plan\" class=\"mb-2 mt-3 tin-grid\" style=\" font-size: 14px;\">\r\n\r\n <div class=\"tin-col mb-2\" *ngIf=\"ownTenant\" style=\"max-width: 500px;\">\r\n <spa-text display=\"Name\" [(value)]=\"myTenant.name\" hint=\"This name will be displayed to all members of your organisation.\" style=\"min-width: 300px;\"> </spa-text>\r\n <button mat-stroked-button color=\"primary\" (click)=\"renameTenant()\">Save</button>\r\n </div>\r\n\r\n <div class=\"tin-col mb-2\" style=\"max-width: 500px;\">\r\n <spa-select display=\"Current Organisation\" [options]=\"tenants\" optionDisplay=\"name\" optionValue=\"tenantID\" [(value)]=\"currentTenantID\"\r\n hint=\"You are required to login again after switching organisations.\" style=\"min-width: 300px;\"></spa-select>\r\n <button mat-stroked-button color=\"primary\" (click)=\"switchTenant()\">Switch</button>\r\n </div>\r\n\r\n <div *ngIf=\"ownTenant\">\r\n <spa-label display=\"Plan\" [value]=\"plan.name\"></spa-label>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" >Members</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">Request other users to join your organisation as partners or employees to form a partnership or company.</label>\r\n\r\n <spa-table [config]=\"membersTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" >Invitations</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">The following are requests for you to join other organisations.</label>\r\n\r\n <spa-table [config]=\"invTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" >Member Organisations</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n <label class=\"subtitle text-muted\">Organisations that you are a member of.</label>\r\n\r\n <spa-table [config]=\"orgsTableConfig\"></spa-table>\r\n\r\n </div>\r\n\r\n\r\n <div class=\"mt-3\" *ngIf=\"ownTenant\">\r\n\r\n <label class=\"title\" >Billing and Subscription</label>\r\n <hr style=\"margin-top: 0px; margin-bottom: 0px;\">\r\n\r\n <div *ngIf=\"myTenant && plan\" class=\"mb-1 mt-3\" style=\"max-width: 300px; font-size: 14px;\">\r\n <spa-label display=\"Plan\" [value]=\"plan.name\"></spa-label>\r\n <spa-label display=\"Next Payment\" format=\"money\" [value]=\"plan.price\"></spa-label>\r\n <spa-label display=\"Due Date\" format=\"date\" value=\"2024-01-01\"></spa-label>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"mt-5\"><label>.</label></div>\r\n\r\n\r\n\r\n</div>\r\n\r\n\r\n", styles: [".title{margin-top:1em;font-size:28px;font-weight:300}.subtitle{font-size:smaller}\n"] }]
125
125
  }], ctorParameters: function () { return [{ type: i1.DataServiceLib }, { type: i2.MessageService }, { type: i3.AuthService }]; } });
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RlbmFudC1zZXR0aW5ncy90ZW5hbnQtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGVuYW50LXNldHRpbmdzL3RlbmFudC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQVlsRCxNQUFNLE9BQU8sdUJBQXVCO0lBRWxDLFlBQW1CLFdBQTJCLEVBQVUsY0FBOEIsRUFBUyxXQUF3QjtRQUFwRyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWN2SCxVQUFLLEdBQUc7WUFDTixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUM3QiwrQkFBK0I7WUFDL0IsK0JBQStCO1NBQ2hDLENBQUE7UUF1REQsc0JBQWlCLEdBQWU7WUFFOUIsTUFBTSxFQUFFO2dCQUNOLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtnQkFDeEQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUcsTUFBTSxFQUFFLFdBQVcsRUFBRyxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRTthQUN4STtTQUVG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QkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUVWLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzNELElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFFbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFFOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUF3QixFQUFFLEVBQUU7b0JBRXRJLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTt3QkFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztxQkFDM0I7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7b0hBdEVVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLDJEQ1pwQyxzbEdBa0ZBOzJGRHRFYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db25maWcsIFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UaW5Db3JlJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3BhLXRlbmFudC1zZXR0aW5ncycsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW5hbnQtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZW5hbnQtc2V0dGluZ3MuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRlbmFudFNldHRpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLCBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLm15Um9sZU9ic2Vydi5zdWJzY3JpYmUocm9sID0+IHRoaXMubXlSb2xlID0gcm9sKTtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgdGhpcy5sb2FkVGVuYW50cygpXG4gIH1cblxuICBteVJvbGVcbiAgdGVuYW50cztcbiAgbXlUZW5hbnQ7XG4gIGN1cnJlbnRUZW5hbnRJRDtcbiAgcGxhbjtcbiAgb3duVGVuYW50O1xuICByb2xlcyA9IFtcbiAgICB7IG5hbWU6ICdEZWZhdWx0JywgdmFsdWU6IDEgfSxcbiAgICAvLyB7IG5hbWU6ICdBZG1pbicsIHZhbHVlOiAyIH0sXG4gICAgLy8geyBuYW1lOiAnT3duZXInLCB2YWx1ZTogMyB9LFxuICBdXG5cbiAgbG9hZERhdGEoKXtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoeyB1cmw6ICd0ZW5hbnQvbWV0YS94JyB9LCBcIlwiKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5teVRlbmFudCA9IGFwaVJlc3BvbnNlLmRhdGEudGVuYW50O1xuICAgICAgdGhpcy5jdXJyZW50VGVuYW50SUQgPSBhcGlSZXNwb25zZS5kYXRhLmN1cnJlbnRUZW5hbnRJRDtcbiAgICAgIHRoaXMucGxhbiA9IGFwaVJlc3BvbnNlLmRhdGEucGxhbjtcbiAgICAgIHRoaXMub3duVGVuYW50ID0gYXBpUmVzcG9uc2UuZGF0YS5vd25UZW5hbnRcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRUZW5hbnRzKCkge1xuICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaSh7IHVybDogJ3RlbmFudC9tZXRhX3RlbmFudHMveCcgfSwgXCJcIikuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIHRoaXMudGVuYW50ID0gYXBpUmVzcG9uc2UuZGF0YS50ZW5hbnQ7XG4gICAgICB0aGlzLnRlbmFudHMgPSBhcGlSZXNwb25zZS5kYXRhLnRlbmFudHM7XG4gICAgfSk7XG4gIH1cblxuICByZW5hbWVUZW5hbnQoKSB7XG5cbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYFJlbmFtZSA/YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT0gXCJ5ZXNcIikge1xuXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaSh7IHVybDogJ3RlbmFudC90ZW5hbnRzP2FjdGlvbj1yZW5hbWUnLCBtZXRob2Q6ICdwb3N0JyB9LCB0aGlzLm15VGVuYW50KS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xuXG4gICAgICAgICAgY29uc29sZS5sb2coYXBpUmVzcG9uc2UpXG4gICAgICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJSZW5hbWVkIFN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3dpdGNoVGVuYW50KCkge1xuXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5jb25maXJtKGBTd2l0Y2ggP2ApLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09IFwieWVzXCIpIHtcblxuICAgICAgICB0aGlzLm15VGVuYW50LnRlbmFudElEID0gdGhpcy5jdXJyZW50VGVuYW50SUQ7XG5cbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKHsgdXJsOiAndGVuYW50L3RlbmFudHM/YWN0aW9uPXN3aXRjaCcsIG1ldGhvZDogJ3Bvc3QnIH0sIHRoaXMubXlUZW5hbnQpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XG5cbiAgICAgICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlN3aXRjaGVkIFN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nb2ZmKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cblxuXG4gIG1lbWJlcnNGb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xuXG4gICAgZmllbGRzOiBbXG4gICAgICB7IG5hbWU6ICdlbWFpbCcsIHR5cGU6ICd0ZXh0JywgIHJlcXVpcmVkOiB0cnVlLCBtaW46IDIgfSxcbiAgICAgIHsgbmFtZTogJ3JvbGVJRCcsIHR5cGU6ICdzZWxlY3QnLCByZXF1aXJlZDogdHJ1ZSwgb3B0aW9uczogdGhpcy5yb2xlcywgb3B0aW9uRGlzcGxheSA6ICduYW1lJywgb3B0aW9uVmFsdWUgOiAndmFsdWUnLCBkZWZhdWx0VmFsdWU6IDEgfSxcbiAgICBdLFxuXG4gIH1cblxuXG4gIG1lbWJlcnNUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XG5cbiAgICBncmV5T3V0IDogKHZhbHVlKSA9PiB2YWx1ZS5hY2NlcHRlZCA9PSBmYWxzZSxcbiAgICBlbGV2YXRpb246ICdsb3cnLFxuICAgIGxvZ1Jlc3BvbnNlIDogdHJ1ZSxcbiAgICBtaW5Db2x1bW5zOiBbJ25hbWUnXSxcbiAgICBtaW5CdXR0b25zOiBbJ2RlbGV0ZSddLFxuXG4gICAgY29sdW1uczogW1xuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgeyBuYW1lOiAnZW1haWwnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgIHsgbmFtZTogJ3JvbGVOYW1lJywgYWxpYXMgOiAnUm9sZScsIHR5cGU6ICd0ZXh0J30sXG4gICAgXSxcblxuICAgIGJ1dHRvbnM6IFtcbiAgICAgIHsgbmFtZTogJ2NyZWF0ZScsIGRpc3BsYXk6ICdJbnZpdGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICd0ZW5hbnQvbWVtYmVycz9hY3Rpb249aW52aXRlJywgbWV0aG9kOiAncG9zdCd9IH0sXG4gICAgICB7IG5hbWU6ICdlZGl0JywgZGlhbG9nIDogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ3RlbmFudC9tZW1iZXJzP2FjdGlvbj1yb2xlJywgbWV0aG9kOiAncG9zdCcgfSwgZGlzYWJsZWQ6IHggPT4geC5yb2xlSUQgIT0gMSB9LFxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgY29uZmlybTogeyBtZXNzYWdlOiAnUmVtb3ZlIE1lbWJlciBmcm9tIHRoaXMgT3JnYW5pc2F0aW9uID8nIH0sIGFjdGlvbjogeyB1cmw6ICd0ZW5hbnQvbWVtYmVycz9hY3Rpb249cmVtb3ZlJywgbWV0aG9kOiAncG9zdCcgfSwgZGlzYWJsZWQgOiB4ID0+IHgucm9sZUlEICE9IDEgfSxcbiAgICBdLFxuXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICd0ZW5hbnQvbWVtYmVycy94JyB9LFxuXG4gICAgZm9ybUNvbmZpZzogdGhpcy5tZW1iZXJzRm9ybUNvbmZpZyxcbiAgfVxuXG5cbiAgaW52VGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xuXG4gICAgZ3JleU91dDogKHZhbHVlKSA9PiB2YWx1ZS5hY2NlcHRlZCA9PSBmYWxzZSxcbiAgICBlbGV2YXRpb246ICdsb3cnLFxuICAgIG1pbkNvbHVtbnM6IFsndGVuYW50TmFtZSddLFxuXG4gICAgY29sdW1uczogW1xuICAgICAgeyBuYW1lOiAndGVuYW50TmFtZScsIGFsaWFzIDogJ09yZ2FuaXNhdGlvbicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgeyBuYW1lOiAnb3duZXInLCB0eXBlOiAndGV4dCcsIH0sXG4gICAgXSxcblxuICAgIGJ1dHRvbnM6IFtcbiAgICAgIHsgbmFtZTogJ2FjY2VwdCcsIGljb246IHsgJ25hbWUnOiAnZG9uZScsIH0sIGNvbG9yOiAnZ3JlZW4nLCBhY3Rpb246IHsgdXJsOiAndGVuYW50L21lbWJlcnM/YWN0aW9uPWFjY2VwdCcsIG1ldGhvZDogJ3Bvc3QnLCB9LCBjb25maXJtOiB7IG1lc3NhZ2U6ICdBY2NlcHQgPycgfSwgZGlzYWJsZWQ6ICh4KSA9PiB4LmFjY2VwdGVkIH0sXG4gICAgICB7IG5hbWU6ICdkZWNsaW5lJywgaWNvbjogeyAnbmFtZSc6ICdjbG9zZScsIH0sIGNvbG9yOiAncmVkJywgYWN0aW9uOiB7IHVybDogJ3RlbmFudC9tZW1iZXJzP2FjdGlvbj1yZW1vdmUnLCBtZXRob2Q6ICdwb3N0JywgfSwgY29uZmlybTogeyBtZXNzYWdlOiAnRGVjbGluZSA/JyB9LCBkaXNhYmxlZDogKHgpID0+IHguYWNjZXB0ZWQgfSxcbiAgICBdLFxuXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICd0ZW5hbnQvaW52aXRhdGlvbnMveCcgfSxcblxuICB9XG5cblxuICBvcmdzVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xuICAgIGdyZXlPdXQ6ICh2YWx1ZSkgPT4gdmFsdWUuYWNjZXB0ZWQgPT0gZmFsc2UsXG4gICAgZWxldmF0aW9uOiAnbG93JyxcbiAgICBtaW5Db2x1bW5zOiBbJ25hbWUnXSxcblxuICAgIGNvbHVtbnM6IFtcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgIHsgbmFtZTogJ2NyZWF0ZWRCeU5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnT3duZXInIH0sXG4gICAgXSxcblxuICAgIGJ1dHRvbnM6IFtcbiAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGNvbmZpcm06IHsgbWVzc2FnZTogJ1JlbW92ZSBNZW1iZXIgZnJvbSB0aGlzIE9yZ2FuaXNhdGlvbiA/JyB9LCBhY3Rpb246IHsgdXJsOiAndGVuYW50L21lbWJlcnM/YWN0aW9uPXJlbW92ZScsIG1ldGhvZDogJ3Bvc3QnIH0gLCBkaXNhYmxlZCA6IHggPT4geC5vd259LCAvL2FjdGlvbjogeyB1cmw6ICd0ZW5hbnQvbWVtYmVycz9hY3Rpb249ZGVsZXRlJywgbWV0aG9kOiAncG9zdCcgfVxuICAgIF0sXG5cbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ3RlbmFudC9teV90ZW5hbnRzL3gnIH0sXG5cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG5cclxuICA8ZGl2PlxyXG5cclxuICAgIDxsYWJlbCBjbGFzcz1cInRpdGxlXCIgc3R5bGU9XCJmb250LXNpemU6IGxhcmdlcjtcIj5PcmdhbmlzYXRpb24gRGV0YWlsczwvbGFiZWw+XHJcbiAgICA8aHIgc3R5bGU9XCJtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweDtcIj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwibXlUZW5hbnQgJiYgcGxhblwiIGNsYXNzPVwibWItMiBtdC0zIHRpbi1ncmlkXCIgc3R5bGU9XCIgZm9udC1zaXplOiAxNHB4O1wiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cInRpbi1yb3cgbWItMlwiICpuZ0lmPVwib3duVGVuYW50XCI+XHJcbiAgICAgICAgPHNwYS10ZXh0IGRpc3BsYXk9XCJOYW1lXCIgWyh2YWx1ZSldPVwibXlUZW5hbnQubmFtZVwiIGhpbnQ9XCJUaGlzIG5hbWUgd2lsbCBiZSBkaXNwbGF5ZWQgdG8gYWxsIG1lbWJlcnMgb2YgeW91ciBvcmdhbmlzYXRpb24uXCIgc3R5bGU9XCJtaW4td2lkdGg6IDMwMHB4O1wiPiA8L3NwYS10ZXh0PlxyXG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJyZW5hbWVUZW5hbnQoKVwiPlNhdmU8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGluLXJvdyBtYi0yXCI+XHJcbiAgICAgICAgPHNwYS1zZWxlY3QgZGlzcGxheT1cIkN1cnJlbnQgT3JnYW5pc2F0aW9uXCIgW29wdGlvbnNdPVwidGVuYW50c1wiIG9wdGlvbkRpc3BsYXk9XCJuYW1lXCIgb3B0aW9uVmFsdWU9XCJ0ZW5hbnRJRFwiIFsodmFsdWUpXT1cImN1cnJlbnRUZW5hbnRJRFwiXHJcbiAgICAgICAgICBoaW50PVwiWW91IGFyZSByZXF1aXJlZCB0byBsb2dpbiBhZ2FpbiBhZnRlciBzd2l0Y2hpbmcgb3JnYW5pc2F0aW9ucy5cIiBzdHlsZT1cIm1pbi13aWR0aDogMzAwcHg7XCI+PC9zcGEtc2VsZWN0PlxyXG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJzd2l0Y2hUZW5hbnQoKVwiPlN3aXRjaDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJvd25UZW5hbnRcIj5cclxuICAgICAgICA8c3BhLWxhYmVsIGRpc3BsYXk9XCJQbGFuXCIgW3ZhbHVlXT1cInBsYW4ubmFtZVwiPjwvc3BhLWxhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPVwib3duVGVuYW50XCI+XHJcblxyXG4gICAgPGxhYmVsIGNsYXNzPVwidGl0bGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogbGFyZ2VyO1wiPk1lbWJlcnM8L2xhYmVsPlxyXG4gICAgPGhyIHN0eWxlPVwibWFyZ2luLXRvcDogMHB4OyBtYXJnaW4tYm90dG9tOiAwcHg7XCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJzdWJ0aXRsZSB0ZXh0LW11dGVkXCI+UmVxdWVzdCBvdGhlciB1c2VycyB0byBqb2luIHlvdXIgb3JnYW5pc2F0aW9uIGFzIHBhcnRuZXJzIG9yIGVtcGxveWVlcyB0byBmb3JtIGEgcGFydG5lcnNoaXAgb3IgY29tcGFueS48L2xhYmVsPlxyXG5cclxuICAgIDxzcGEtdGFibGUgW2NvbmZpZ109XCJtZW1iZXJzVGFibGVDb25maWdcIj48L3NwYS10YWJsZT5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9XCJvd25UZW5hbnRcIj5cclxuXHJcbiAgICA8bGFiZWwgY2xhc3M9XCJ0aXRsZVwiIHN0eWxlPVwiZm9udC1zaXplOiBsYXJnZXI7XCI+SW52aXRhdGlvbnM8L2xhYmVsPlxyXG4gICAgPGhyIHN0eWxlPVwibWFyZ2luLXRvcDogMHB4OyBtYXJnaW4tYm90dG9tOiAwcHg7XCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJzdWJ0aXRsZSB0ZXh0LW11dGVkXCI+VGhlIGZvbGxvd2luZyBhcmUgcmVxdWVzdHMgZm9yIHlvdSB0byBqb2luIG90aGVyIG9yZ2FuaXNhdGlvbnMuPC9sYWJlbD5cclxuXHJcbiAgICA8c3BhLXRhYmxlIFtjb25maWddPVwiaW52VGFibGVDb25maWdcIj48L3NwYS10YWJsZT5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj1cIm93blRlbmFudFwiPlxyXG5cclxuICAgIDxsYWJlbCBjbGFzcz1cInRpdGxlXCIgc3R5bGU9XCJmb250LXNpemU6IGxhcmdlcjtcIj5NZW1iZXIgT3JnYW5pc2F0aW9uczwvbGFiZWw+XHJcbiAgICA8aHIgc3R5bGU9XCJtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweDtcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cInN1YnRpdGxlIHRleHQtbXV0ZWRcIj5PcmdhbmlzYXRpb25zIHRoYXQgeW91IGFyZSBhIG1lbWJlciBvZi48L2xhYmVsPlxyXG5cclxuICAgIDxzcGEtdGFibGUgW2NvbmZpZ109XCJvcmdzVGFibGVDb25maWdcIj48L3NwYS10YWJsZT5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPVwib3duVGVuYW50XCI+XHJcblxyXG4gICAgPGxhYmVsIGNsYXNzPVwidGl0bGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogbGFyZ2VyO1wiPkJpbGxpbmcgYW5kIFN1YnNjcmlwdGlvbjwvbGFiZWw+XHJcbiAgICA8aHIgc3R5bGU9XCJtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweDtcIj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJteVRlbmFudCAmJiBwbGFuXCIgY2xhc3M9XCJtYi0xIG10LTNcIiBzdHlsZT1cIm1heC13aWR0aDogMzAwcHg7IGZvbnQtc2l6ZTogMTRweDtcIj5cclxuICAgICAgICA8c3BhLWxhYmVsIGRpc3BsYXk9XCJQbGFuXCIgW3ZhbHVlXT1cInBsYW4ubmFtZVwiPjwvc3BhLWxhYmVsPlxyXG4gICAgICAgIDxzcGEtbGFiZWwgZGlzcGxheT1cIk5leHQgUGF5bWVudFwiIGZvcm1hdD1cIm1vbmV5XCIgW3ZhbHVlXT1cInBsYW4ucHJpY2VcIj48L3NwYS1sYWJlbD5cclxuICAgICAgICA8c3BhLWxhYmVsIGRpc3BsYXk9XCJEdWUgRGF0ZVwiIGZvcm1hdD1cImRhdGVcIiB2YWx1ZT1cIjIwMjQtMDEtMDFcIj48L3NwYS1sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwibXQtNVwiPjxsYWJlbD4uPC9sYWJlbD48L2Rpdj5cclxuXHJcblxyXG5cclxuPC9kaXY+XHJcblxyXG5cclxuIl19
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVuYW50LXNldHRpbmdzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RlbmFudC1zZXR0aW5ncy90ZW5hbnQtc2V0dGluZ3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGVuYW50LXNldHRpbmdzL3RlbmFudC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7OztBQVlsRCxNQUFNLE9BQU8sdUJBQXVCO0lBRWxDLFlBQW1CLFdBQTJCLEVBQVUsY0FBOEIsRUFBUyxXQUF3QjtRQUFwRyxnQkFBVyxHQUFYLFdBQVcsQ0FBZ0I7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWN2SCxVQUFLLEdBQUc7WUFDTixFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUM3QiwrQkFBK0I7WUFDL0IsK0JBQStCO1NBQ2hDLENBQUE7UUF1REQsc0JBQWlCLEdBQWU7WUFFOUIsTUFBTSxFQUFFO2dCQUNOLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFHLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRTtnQkFDeEQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUcsTUFBTSxFQUFFLFdBQVcsRUFBRyxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFBRTthQUN4STtTQUVG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QkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUVWLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzNELElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFFbkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFFOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUF3QixFQUFFLEVBQUU7b0JBRXRJLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTt3QkFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztxQkFDM0I7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7b0hBdEVVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLDJEQ1pwQyxrZ0dBa0ZBOzJGRHRFYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db25maWcsIFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEFwaVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9UaW5Db3JlJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWVzc2FnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3BhLXRlbmFudC1zZXR0aW5ncycsXG4gIHRlbXBsYXRlVXJsOiAnLi90ZW5hbnQtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90ZW5hbnQtc2V0dGluZ3MuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIFRlbmFudFNldHRpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlTGliLCBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSwgcHVibGljIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmF1dGhTZXJ2aWNlLm15Um9sZU9ic2Vydi5zdWJzY3JpYmUocm9sID0+IHRoaXMubXlSb2xlID0gcm9sKTtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgdGhpcy5sb2FkVGVuYW50cygpXG4gIH1cblxuICBteVJvbGVcbiAgdGVuYW50cztcbiAgbXlUZW5hbnQ7XG4gIGN1cnJlbnRUZW5hbnRJRDtcbiAgcGxhbjtcbiAgb3duVGVuYW50O1xuICByb2xlcyA9IFtcbiAgICB7IG5hbWU6ICdEZWZhdWx0JywgdmFsdWU6IDEgfSxcbiAgICAvLyB7IG5hbWU6ICdBZG1pbicsIHZhbHVlOiAyIH0sXG4gICAgLy8geyBuYW1lOiAnT3duZXInLCB2YWx1ZTogMyB9LFxuICBdXG5cbiAgbG9hZERhdGEoKXtcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLkNhbGxBcGkoeyB1cmw6ICd0ZW5hbnQvbWV0YS94JyB9LCBcIlwiKS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5teVRlbmFudCA9IGFwaVJlc3BvbnNlLmRhdGEudGVuYW50O1xuICAgICAgdGhpcy5jdXJyZW50VGVuYW50SUQgPSBhcGlSZXNwb25zZS5kYXRhLmN1cnJlbnRUZW5hbnRJRDtcbiAgICAgIHRoaXMucGxhbiA9IGFwaVJlc3BvbnNlLmRhdGEucGxhbjtcbiAgICAgIHRoaXMub3duVGVuYW50ID0gYXBpUmVzcG9uc2UuZGF0YS5vd25UZW5hbnRcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRUZW5hbnRzKCkge1xuICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaSh7IHVybDogJ3RlbmFudC9tZXRhX3RlbmFudHMveCcgfSwgXCJcIikuc3Vic2NyaWJlKChhcGlSZXNwb25zZTogQXBpUmVzcG9uc2UpID0+IHtcbiAgICAgIC8vIHRoaXMudGVuYW50ID0gYXBpUmVzcG9uc2UuZGF0YS50ZW5hbnQ7XG4gICAgICB0aGlzLnRlbmFudHMgPSBhcGlSZXNwb25zZS5kYXRhLnRlbmFudHM7XG4gICAgfSk7XG4gIH1cblxuICByZW5hbWVUZW5hbnQoKSB7XG5cbiAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmNvbmZpcm0oYFJlbmFtZSA/YCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQgPT0gXCJ5ZXNcIikge1xuXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuQ2FsbEFwaSh7IHVybDogJ3RlbmFudC90ZW5hbnRzP2FjdGlvbj1yZW5hbWUnLCBtZXRob2Q6ICdwb3N0JyB9LCB0aGlzLm15VGVuYW50KS5zdWJzY3JpYmUoKGFwaVJlc3BvbnNlOiBBcGlSZXNwb25zZSkgPT4ge1xuXG4gICAgICAgICAgY29uc29sZS5sb2coYXBpUmVzcG9uc2UpXG4gICAgICAgICAgaWYgKGFwaVJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UudG9hc3QoXCJSZW5hbWVkIFN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3dpdGNoVGVuYW50KCkge1xuXG4gICAgdGhpcy5tZXNzYWdlU2VydmljZS5jb25maXJtKGBTd2l0Y2ggP2ApLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0ID09IFwieWVzXCIpIHtcblxuICAgICAgICB0aGlzLm15VGVuYW50LnRlbmFudElEID0gdGhpcy5jdXJyZW50VGVuYW50SUQ7XG5cbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5DYWxsQXBpKHsgdXJsOiAndGVuYW50L3RlbmFudHM/YWN0aW9uPXN3aXRjaCcsIG1ldGhvZDogJ3Bvc3QnIH0sIHRoaXMubXlUZW5hbnQpLnN1YnNjcmliZSgoYXBpUmVzcG9uc2U6IEFwaVJlc3BvbnNlKSA9PiB7XG5cbiAgICAgICAgICBpZiAoYXBpUmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS50b2FzdChcIlN3aXRjaGVkIFN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nb2ZmKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG5cblxuXG4gIG1lbWJlcnNGb3JtQ29uZmlnOiBGb3JtQ29uZmlnID0ge1xuXG4gICAgZmllbGRzOiBbXG4gICAgICB7IG5hbWU6ICdlbWFpbCcsIHR5cGU6ICd0ZXh0JywgIHJlcXVpcmVkOiB0cnVlLCBtaW46IDIgfSxcbiAgICAgIHsgbmFtZTogJ3JvbGVJRCcsIHR5cGU6ICdzZWxlY3QnLCByZXF1aXJlZDogdHJ1ZSwgb3B0aW9uczogdGhpcy5yb2xlcywgb3B0aW9uRGlzcGxheSA6ICduYW1lJywgb3B0aW9uVmFsdWUgOiAndmFsdWUnLCBkZWZhdWx0VmFsdWU6IDEgfSxcbiAgICBdLFxuXG4gIH1cblxuXG4gIG1lbWJlcnNUYWJsZUNvbmZpZzogVGFibGVDb25maWcgPSB7XG5cbiAgICBncmV5T3V0IDogKHZhbHVlKSA9PiB2YWx1ZS5hY2NlcHRlZCA9PSBmYWxzZSxcbiAgICBlbGV2YXRpb246ICdsb3cnLFxuICAgIGxvZ1Jlc3BvbnNlIDogdHJ1ZSxcbiAgICBtaW5Db2x1bW5zOiBbJ25hbWUnXSxcbiAgICBtaW5CdXR0b25zOiBbJ2RlbGV0ZSddLFxuXG4gICAgY29sdW1uczogW1xuICAgICAgeyBuYW1lOiAnbmFtZScsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgeyBuYW1lOiAnZW1haWwnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgIHsgbmFtZTogJ3JvbGVOYW1lJywgYWxpYXMgOiAnUm9sZScsIHR5cGU6ICd0ZXh0J30sXG4gICAgXSxcblxuICAgIGJ1dHRvbnM6IFtcbiAgICAgIHsgbmFtZTogJ2NyZWF0ZScsIGRpc3BsYXk6ICdJbnZpdGUnLCBkaWFsb2c6IHRydWUsIGFjdGlvbjogeyB1cmw6ICd0ZW5hbnQvbWVtYmVycz9hY3Rpb249aW52aXRlJywgbWV0aG9kOiAncG9zdCd9IH0sXG4gICAgICB7IG5hbWU6ICdlZGl0JywgZGlhbG9nIDogdHJ1ZSwgYWN0aW9uOiB7IHVybDogJ3RlbmFudC9tZW1iZXJzP2FjdGlvbj1yb2xlJywgbWV0aG9kOiAncG9zdCcgfSwgZGlzYWJsZWQ6IHggPT4geC5yb2xlSUQgIT0gMSB9LFxuICAgICAgeyBuYW1lOiAnZGVsZXRlJywgY29uZmlybTogeyBtZXNzYWdlOiAnUmVtb3ZlIE1lbWJlciBmcm9tIHRoaXMgT3JnYW5pc2F0aW9uID8nIH0sIGFjdGlvbjogeyB1cmw6ICd0ZW5hbnQvbWVtYmVycz9hY3Rpb249cmVtb3ZlJywgbWV0aG9kOiAncG9zdCcgfSwgZGlzYWJsZWQgOiB4ID0+IHgucm9sZUlEICE9IDEgfSxcbiAgICBdLFxuXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICd0ZW5hbnQvbWVtYmVycy94JyB9LFxuXG4gICAgZm9ybUNvbmZpZzogdGhpcy5tZW1iZXJzRm9ybUNvbmZpZyxcbiAgfVxuXG5cbiAgaW52VGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xuXG4gICAgZ3JleU91dDogKHZhbHVlKSA9PiB2YWx1ZS5hY2NlcHRlZCA9PSBmYWxzZSxcbiAgICBlbGV2YXRpb246ICdsb3cnLFxuICAgIG1pbkNvbHVtbnM6IFsndGVuYW50TmFtZSddLFxuXG4gICAgY29sdW1uczogW1xuICAgICAgeyBuYW1lOiAndGVuYW50TmFtZScsIGFsaWFzIDogJ09yZ2FuaXNhdGlvbicsIHR5cGU6ICd0ZXh0JyB9LFxuICAgICAgeyBuYW1lOiAnb3duZXInLCB0eXBlOiAndGV4dCcsIH0sXG4gICAgXSxcblxuICAgIGJ1dHRvbnM6IFtcbiAgICAgIHsgbmFtZTogJ2FjY2VwdCcsIGljb246IHsgJ25hbWUnOiAnZG9uZScsIH0sIGNvbG9yOiAnZ3JlZW4nLCBhY3Rpb246IHsgdXJsOiAndGVuYW50L21lbWJlcnM/YWN0aW9uPWFjY2VwdCcsIG1ldGhvZDogJ3Bvc3QnLCB9LCBjb25maXJtOiB7IG1lc3NhZ2U6ICdBY2NlcHQgPycgfSwgZGlzYWJsZWQ6ICh4KSA9PiB4LmFjY2VwdGVkIH0sXG4gICAgICB7IG5hbWU6ICdkZWNsaW5lJywgaWNvbjogeyAnbmFtZSc6ICdjbG9zZScsIH0sIGNvbG9yOiAncmVkJywgYWN0aW9uOiB7IHVybDogJ3RlbmFudC9tZW1iZXJzP2FjdGlvbj1yZW1vdmUnLCBtZXRob2Q6ICdwb3N0JywgfSwgY29uZmlybTogeyBtZXNzYWdlOiAnRGVjbGluZSA/JyB9LCBkaXNhYmxlZDogKHgpID0+IHguYWNjZXB0ZWQgfSxcbiAgICBdLFxuXG4gICAgbG9hZEFjdGlvbjogeyB1cmw6ICd0ZW5hbnQvaW52aXRhdGlvbnMveCcgfSxcblxuICB9XG5cblxuICBvcmdzVGFibGVDb25maWc6IFRhYmxlQ29uZmlnID0ge1xuICAgIGdyZXlPdXQ6ICh2YWx1ZSkgPT4gdmFsdWUuYWNjZXB0ZWQgPT0gZmFsc2UsXG4gICAgZWxldmF0aW9uOiAnbG93JyxcbiAgICBtaW5Db2x1bW5zOiBbJ25hbWUnXSxcblxuICAgIGNvbHVtbnM6IFtcbiAgICAgIHsgbmFtZTogJ25hbWUnLCB0eXBlOiAndGV4dCcgfSxcbiAgICAgIHsgbmFtZTogJ2NyZWF0ZWRCeU5hbWUnLCB0eXBlOiAndGV4dCcsIGFsaWFzOiAnT3duZXInIH0sXG4gICAgXSxcblxuICAgIGJ1dHRvbnM6IFtcbiAgICAgIHsgbmFtZTogJ2RlbGV0ZScsIGNvbmZpcm06IHsgbWVzc2FnZTogJ1JlbW92ZSBNZW1iZXIgZnJvbSB0aGlzIE9yZ2FuaXNhdGlvbiA/JyB9LCBhY3Rpb246IHsgdXJsOiAndGVuYW50L21lbWJlcnM/YWN0aW9uPXJlbW92ZScsIG1ldGhvZDogJ3Bvc3QnIH0gLCBkaXNhYmxlZCA6IHggPT4geC5vd259LCAvL2FjdGlvbjogeyB1cmw6ICd0ZW5hbnQvbWVtYmVycz9hY3Rpb249ZGVsZXRlJywgbWV0aG9kOiAncG9zdCcgfVxuICAgIF0sXG5cbiAgICBsb2FkQWN0aW9uOiB7IHVybDogJ3RlbmFudC9teV90ZW5hbnRzL3gnIH0sXG5cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG5cclxuICA8ZGl2PlxyXG5cclxuICAgIDxsYWJlbCBjbGFzcz1cInRpdGxlXCIgPk9yZ2FuaXNhdGlvbiBEZXRhaWxzPC9sYWJlbD5cclxuICAgIDxociBzdHlsZT1cIm1hcmdpbi10b3A6IDBweDsgbWFyZ2luLWJvdHRvbTogMHB4O1wiPlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJteVRlbmFudCAmJiBwbGFuXCIgY2xhc3M9XCJtYi0yIG10LTMgdGluLWdyaWRcIiBzdHlsZT1cIiBmb250LXNpemU6IDE0cHg7XCI+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGluLWNvbCBtYi0yXCIgKm5nSWY9XCJvd25UZW5hbnRcIiBzdHlsZT1cIm1heC13aWR0aDogNTAwcHg7XCI+XHJcbiAgICAgICAgPHNwYS10ZXh0IGRpc3BsYXk9XCJOYW1lXCIgWyh2YWx1ZSldPVwibXlUZW5hbnQubmFtZVwiIGhpbnQ9XCJUaGlzIG5hbWUgd2lsbCBiZSBkaXNwbGF5ZWQgdG8gYWxsIG1lbWJlcnMgb2YgeW91ciBvcmdhbmlzYXRpb24uXCIgc3R5bGU9XCJtaW4td2lkdGg6IDMwMHB4O1wiPiA8L3NwYS10ZXh0PlxyXG4gICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIChjbGljayk9XCJyZW5hbWVUZW5hbnQoKVwiPlNhdmU8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGluLWNvbCBtYi0yXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDUwMHB4O1wiPlxyXG4gICAgICAgIDxzcGEtc2VsZWN0IGRpc3BsYXk9XCJDdXJyZW50IE9yZ2FuaXNhdGlvblwiIFtvcHRpb25zXT1cInRlbmFudHNcIiBvcHRpb25EaXNwbGF5PVwibmFtZVwiIG9wdGlvblZhbHVlPVwidGVuYW50SURcIiBbKHZhbHVlKV09XCJjdXJyZW50VGVuYW50SURcIlxyXG4gICAgICAgICAgaGludD1cIllvdSBhcmUgcmVxdWlyZWQgdG8gbG9naW4gYWdhaW4gYWZ0ZXIgc3dpdGNoaW5nIG9yZ2FuaXNhdGlvbnMuXCIgc3R5bGU9XCJtaW4td2lkdGg6IDMwMHB4O1wiPjwvc3BhLXNlbGVjdD5cclxuICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwic3dpdGNoVGVuYW50KClcIj5Td2l0Y2g8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwib3duVGVuYW50XCI+XHJcbiAgICAgICAgPHNwYS1sYWJlbCBkaXNwbGF5PVwiUGxhblwiIFt2YWx1ZV09XCJwbGFuLm5hbWVcIj48L3NwYS1sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj1cIm93blRlbmFudFwiPlxyXG5cclxuICAgIDxsYWJlbCBjbGFzcz1cInRpdGxlXCIgPk1lbWJlcnM8L2xhYmVsPlxyXG4gICAgPGhyIHN0eWxlPVwibWFyZ2luLXRvcDogMHB4OyBtYXJnaW4tYm90dG9tOiAwcHg7XCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJzdWJ0aXRsZSB0ZXh0LW11dGVkXCI+UmVxdWVzdCBvdGhlciB1c2VycyB0byBqb2luIHlvdXIgb3JnYW5pc2F0aW9uIGFzIHBhcnRuZXJzIG9yIGVtcGxveWVlcyB0byBmb3JtIGEgcGFydG5lcnNoaXAgb3IgY29tcGFueS48L2xhYmVsPlxyXG5cclxuICAgIDxzcGEtdGFibGUgW2NvbmZpZ109XCJtZW1iZXJzVGFibGVDb25maWdcIj48L3NwYS10YWJsZT5cclxuXHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJtdC0zXCIgKm5nSWY9XCJvd25UZW5hbnRcIj5cclxuXHJcbiAgICA8bGFiZWwgY2xhc3M9XCJ0aXRsZVwiID5JbnZpdGF0aW9uczwvbGFiZWw+XHJcbiAgICA8aHIgc3R5bGU9XCJtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweDtcIj5cclxuICAgIDxsYWJlbCBjbGFzcz1cInN1YnRpdGxlIHRleHQtbXV0ZWRcIj5UaGUgZm9sbG93aW5nIGFyZSByZXF1ZXN0cyBmb3IgeW91IHRvIGpvaW4gb3RoZXIgb3JnYW5pc2F0aW9ucy48L2xhYmVsPlxyXG5cclxuICAgIDxzcGEtdGFibGUgW2NvbmZpZ109XCJpbnZUYWJsZUNvbmZpZ1wiPjwvc3BhLXRhYmxlPlxyXG5cclxuICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICA8ZGl2IGNsYXNzPVwibXQtM1wiICpuZ0lmPVwib3duVGVuYW50XCI+XHJcblxyXG4gICAgPGxhYmVsIGNsYXNzPVwidGl0bGVcIiA+TWVtYmVyIE9yZ2FuaXNhdGlvbnM8L2xhYmVsPlxyXG4gICAgPGhyIHN0eWxlPVwibWFyZ2luLXRvcDogMHB4OyBtYXJnaW4tYm90dG9tOiAwcHg7XCI+XHJcbiAgICA8bGFiZWwgY2xhc3M9XCJzdWJ0aXRsZSB0ZXh0LW11dGVkXCI+T3JnYW5pc2F0aW9ucyB0aGF0IHlvdSBhcmUgYSBtZW1iZXIgb2YuPC9sYWJlbD5cclxuXHJcbiAgICA8c3BhLXRhYmxlIFtjb25maWddPVwib3Jnc1RhYmxlQ29uZmlnXCI+PC9zcGEtdGFibGU+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuXHJcbiAgPGRpdiBjbGFzcz1cIm10LTNcIiAqbmdJZj1cIm93blRlbmFudFwiPlxyXG5cclxuICAgIDxsYWJlbCBjbGFzcz1cInRpdGxlXCIgPkJpbGxpbmcgYW5kIFN1YnNjcmlwdGlvbjwvbGFiZWw+XHJcbiAgICA8aHIgc3R5bGU9XCJtYXJnaW4tdG9wOiAwcHg7IG1hcmdpbi1ib3R0b206IDBweDtcIj5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJteVRlbmFudCAmJiBwbGFuXCIgY2xhc3M9XCJtYi0xIG10LTNcIiBzdHlsZT1cIm1heC13aWR0aDogMzAwcHg7IGZvbnQtc2l6ZTogMTRweDtcIj5cclxuICAgICAgICA8c3BhLWxhYmVsIGRpc3BsYXk9XCJQbGFuXCIgW3ZhbHVlXT1cInBsYW4ubmFtZVwiPjwvc3BhLWxhYmVsPlxyXG4gICAgICAgIDxzcGEtbGFiZWwgZGlzcGxheT1cIk5leHQgUGF5bWVudFwiIGZvcm1hdD1cIm1vbmV5XCIgW3ZhbHVlXT1cInBsYW4ucHJpY2VcIj48L3NwYS1sYWJlbD5cclxuICAgICAgICA8c3BhLWxhYmVsIGRpc3BsYXk9XCJEdWUgRGF0ZVwiIGZvcm1hdD1cImRhdGVcIiB2YWx1ZT1cIjIwMjQtMDEtMDFcIj48L3NwYS1sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwibXQtNVwiPjxsYWJlbD4uPC9sYWJlbD48L2Rpdj5cclxuXHJcblxyXG5cclxuPC9kaXY+XHJcblxyXG5cclxuIl19