@alfresco/adf-core 6.9.0-8618936978 → 6.9.0-8619683521

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.
@@ -34,41 +34,32 @@ import { DomSanitizer } from '@angular/platform-browser';
34
34
  import * as i0 from "@angular/core";
35
35
  import * as i1 from "@angular/material/icon";
36
36
  import * as i2 from "@angular/platform-browser";
37
- import * as i3 from "@angular/material/core";
38
- import * as i4 from "@angular/material/button";
39
- import * as i5 from "@angular/material/checkbox";
40
- import * as i6 from "@angular/material/form-field";
41
- import * as i7 from "@angular/material/select";
42
- import * as i8 from "@angular/material/menu";
43
- import * as i9 from "@angular/material/tooltip";
44
- import * as i10 from "@angular/common";
45
- import * as i11 from "../../../context-menu/context-menu.directive";
46
- import * as i12 from "../../../directives/upload.directive";
47
- import * as i13 from "@angular/cdk/drag-drop";
48
- import * as i14 from "../../../icon/icon.component";
49
- import * as i15 from "../../directives/resizable/resizable.directive";
50
- import * as i16 from "../../directives/resizable/resize-handle.directive";
51
- import * as i17 from "../boolean-cell/boolean-cell.component";
52
- import * as i18 from "../amount-cell/amount-cell.component";
53
- import * as i19 from "../number-cell/number-cell.component";
54
- import * as i20 from "../location-cell/location-cell.component";
55
- import * as i21 from "../date-cell/date-cell.component";
56
- import * as i22 from "../icon-cell/icon-cell.component";
57
- import * as i23 from "../datatable-cell/datatable-cell.component";
58
- import * as i24 from "../datatable-row/datatable-row.component";
59
- import * as i25 from "../filesize-cell/filesize-cell.component";
60
- import * as i26 from "../json-cell/json-cell.component";
61
- import * as i27 from "../../directives/drop-zone.directive";
62
- import * as i28 from "@ngx-translate/core";
63
- import * as i29 from "../../../pipes/file-type.pipe";
64
- import * as i30 from "../../../pipes/filter-out-every-object-by-prop.pipe";
65
- import * as i31 from "../../../pipes/localized-date.pipe";
66
- // eslint-disable-next-line no-shadow
67
- export var DisplayMode;
68
- (function (DisplayMode) {
69
- DisplayMode["List"] = "list";
70
- DisplayMode["Gallery"] = "gallery";
71
- })(DisplayMode || (DisplayMode = {}));
37
+ import * as i3 from "@angular/material/button";
38
+ import * as i4 from "@angular/material/checkbox";
39
+ import * as i5 from "@angular/material/menu";
40
+ import * as i6 from "@angular/material/tooltip";
41
+ import * as i7 from "@angular/common";
42
+ import * as i8 from "../../../context-menu/context-menu.directive";
43
+ import * as i9 from "../../../directives/upload.directive";
44
+ import * as i10 from "@angular/cdk/drag-drop";
45
+ import * as i11 from "../../../icon/icon.component";
46
+ import * as i12 from "../../directives/resizable/resizable.directive";
47
+ import * as i13 from "../../directives/resizable/resize-handle.directive";
48
+ import * as i14 from "../boolean-cell/boolean-cell.component";
49
+ import * as i15 from "../amount-cell/amount-cell.component";
50
+ import * as i16 from "../number-cell/number-cell.component";
51
+ import * as i17 from "../location-cell/location-cell.component";
52
+ import * as i18 from "../date-cell/date-cell.component";
53
+ import * as i19 from "../icon-cell/icon-cell.component";
54
+ import * as i20 from "../datatable-cell/datatable-cell.component";
55
+ import * as i21 from "../datatable-row/datatable-row.component";
56
+ import * as i22 from "../filesize-cell/filesize-cell.component";
57
+ import * as i23 from "../json-cell/json-cell.component";
58
+ import * as i24 from "../../directives/drop-zone.directive";
59
+ import * as i25 from "@ngx-translate/core";
60
+ import * as i26 from "../../../pipes/file-type.pipe";
61
+ import * as i27 from "../../../pipes/filter-out-every-object-by-prop.pipe";
62
+ import * as i28 from "../../../pipes/localized-date.pipe";
72
63
  // eslint-disable-next-line no-shadow
73
64
  export var ShowHeaderMode;
74
65
  (function (ShowHeaderMode) {
@@ -81,8 +72,6 @@ export class DataTableComponent {
81
72
  this.elementRef = elementRef;
82
73
  this.matIconRegistry = matIconRegistry;
83
74
  this.sanitizer = sanitizer;
84
- /** Selects the display mode of the table. Can be "list" or "gallery". */
85
- this.display = DisplayMode.List;
86
75
  /** The rows that the datatable will show. */
87
76
  this.rows = [];
88
77
  /**
@@ -167,8 +156,6 @@ export class DataTableComponent {
167
156
  this.isDraggingHeaderColumn = false;
168
157
  this.hoveredHeaderColumnIndex = -1;
169
158
  this.resizingColumnIndex = -1;
170
- /** This array of fake rows fix the flex layout for the gallery view */
171
- this.fakeRows = [];
172
159
  this.rowMenuCache = {};
173
160
  this.subscriptions = [];
174
161
  if (differs) {
@@ -188,7 +175,6 @@ export class DataTableComponent {
188
175
  this.setTableSchema();
189
176
  }));
190
177
  }
191
- this.datatableLayoutFix();
192
178
  this.setTableSchema();
193
179
  }
194
180
  ngAfterViewInit() {
@@ -228,9 +214,6 @@ export class DataTableComponent {
228
214
  if (this.isPropertyChanged(changes['sorting'])) {
229
215
  this.setTableSorting(changes['sorting'].currentValue);
230
216
  }
231
- if (this.isPropertyChanged(changes['display'])) {
232
- this.datatableLayoutFix();
233
- }
234
217
  }
235
218
  isColumnSortActive(column) {
236
219
  if (!column || !this.data.getSorting()) {
@@ -355,7 +338,7 @@ export class DataTableComponent {
355
338
  mouseEvent.preventDefault();
356
339
  }
357
340
  if (row) {
358
- const rowIndex = this.data.getRows().indexOf(row) + (this.isHeaderListVisible() ? 1 : 0);
341
+ const rowIndex = this.data.getRows().indexOf(row) + (this.isHeaderVisible() ? 1 : 0);
359
342
  this.keyManager.setActiveItem(rowIndex);
360
343
  const dataRowEvent = new DataRowEvent(row, mouseEvent, this);
361
344
  this.clickObserver.next(dataRowEvent);
@@ -366,9 +349,6 @@ export class DataTableComponent {
366
349
  this.handleRowSelection(row, e);
367
350
  }
368
351
  }
369
- isHeaderListVisible() {
370
- return this.isHeaderVisible() && this.display === DisplayMode.List;
371
- }
372
352
  handleRowSelection(row, e) {
373
353
  if (this.data) {
374
354
  if (this.isSingleSelectionMode()) {
@@ -539,9 +519,6 @@ export class DataTableComponent {
539
519
  }
540
520
  return null;
541
521
  }
542
- iconAltTextKey(value) {
543
- return value ? 'ICONS.' + value.substring(value.lastIndexOf('/') + 1).replace(/\.[a-z]+/, '') : '';
544
- }
545
522
  isColumnSorted(col, direction) {
546
523
  if (col && direction) {
547
524
  const sorting = this.data.getSorting();
@@ -583,9 +560,6 @@ export class DataTableComponent {
583
560
  rowAllowsDrop(row) {
584
561
  return row.isDropTarget === true;
585
562
  }
586
- hasSelectionMode() {
587
- return this.isSingleSelectionMode() || this.isMultiSelectionMode();
588
- }
589
563
  isSingleSelectionMode() {
590
564
  return this.selectionMode && this.selectionMode.toLowerCase() === 'single';
591
565
  }
@@ -609,12 +583,6 @@ export class DataTableComponent {
609
583
  selectedRow.isContextMenuSource = true;
610
584
  }
611
585
  }
612
- getSortingKey() {
613
- if (this.data.getSorting()) {
614
- return this.data.getSorting().key;
615
- }
616
- return null;
617
- }
618
586
  selectRow(row, value) {
619
587
  if (row) {
620
588
  row.isSelected = value;
@@ -695,17 +663,6 @@ export class DataTableComponent {
695
663
  this.dataRowsChanged = null;
696
664
  }
697
665
  }
698
- datatableLayoutFix() {
699
- const maxGalleryRows = 25;
700
- if (this.display === 'gallery') {
701
- for (let i = 0; i < maxGalleryRows; i++) {
702
- this.fakeRows.push('');
703
- }
704
- }
705
- else {
706
- this.fakeRows = [];
707
- }
708
- }
709
666
  getNameColumnValue() {
710
667
  return this.data.getColumns().find((el) => el.key.includes('name'));
711
668
  }
@@ -774,21 +731,18 @@ export class DataTableComponent {
774
731
  this.columnsWidthChanged.emit(allColumns);
775
732
  }
776
733
  isSortingEqual(col, direction, sorting) {
777
- return sorting &&
778
- (sorting.key === col.key || sorting.key === col.sortingKey) &&
779
- sorting.direction?.toLocaleLowerCase() === direction;
734
+ return sorting && (sorting.key === col.key || sorting.key === col.sortingKey) && sorting.direction?.toLocaleLowerCase() === direction;
780
735
  }
781
- ;
782
736
  get isResizing() {
783
737
  return this.resizingColumnIndex >= 0;
784
738
  }
785
739
  }
786
740
  DataTableComponent.MINIMUM_COLUMN_SIZE = 100;
787
741
  DataTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.IterableDiffers }, { token: i1.MatIconRegistry }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
788
- DataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: DataTableComponent, selector: "adf-datatable", inputs: { data: "data", display: "display", rows: "rows", sorting: "sorting", columns: "columns", selectionMode: "selectionMode", multiselect: "multiselect", mainTableAction: "mainTableAction", actions: "actions", showMainDatatableActions: "showMainDatatableActions", actionsPosition: "actionsPosition", actionsVisibleOnHover: "actionsVisibleOnHover", fallbackThumbnail: "fallbackThumbnail", contextMenu: "contextMenu", rowStyle: "rowStyle", rowStyleClass: "rowStyleClass", showHeader: "showHeader", stickyHeader: "stickyHeader", loading: "loading", noPermission: "noPermission", rowMenuCacheEnabled: "rowMenuCacheEnabled", resolverFn: "resolverFn", allowFiltering: "allowFiltering", isResizingEnabled: "isResizingEnabled", blurOnResize: "blurOnResize" }, outputs: { rowClick: "rowClick", rowDblClick: "rowDblClick", showRowContextMenu: "showRowContextMenu", showRowActionsMenu: "showRowActionsMenu", executeRowAction: "executeRowAction", columnOrderChanged: "columnOrderChanged", columnsWidthChanged: "columnsWidthChanged" }, host: { listeners: { "keyup": "onKeydown($event)" }, classAttribute: "adf-datatable" }, queries: [{ propertyName: "columnList", first: true, predicate: DataColumnListComponent, descendants: true }], viewQueries: [{ propertyName: "rowsList", predicate: DataTableRowComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n role=\"grid\"\n *ngIf=\"data\" class=\"adf-full-width\"\n [class.adf-datatable-card]=\"display === 'gallery'\"\n [class.adf-datatable-list]=\"display === 'list'\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\">\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n *ngIf=\"display === 'list'\"\n role=\"row\">\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\" [checked]=\"isSelectAllChecked\" (change)=\"onSelectAllClick($event)\" class=\"adf-checkbox-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}</mat-checkbox>\n </div>\n\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngFor=\"\n let col of (data.getColumns() | filterOutEvery:'isHidden':true);\n let columnIndex = index\n let lastColumn = last\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"col.title | translate\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\" [dropColumn]=\"col\">\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span *ngIf=\"col.title\" matTooltip=\"{{col.title | translate}}\" class=\"adf-datatable-cell-value\">{{col.title | translate}}</span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\"></ng-template>\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\"></ng-template>\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\">\n </adf-icon>\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n (click)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n matTooltip=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (keydown.enter)=\"mainMenuTrigger.openMenu()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu>\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\">\n </ng-container>\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n <mat-form-field *ngIf=\"display === 'gallery' && isHeaderVisible()\">\n <mat-select [value]=\"getSortingKey()\" [attr.data-automation-id]=\"'grid-view-sorting'\">\n <mat-option *ngFor=\"let col of getSortableColumns()\"\n [value]=\"col.key\"\n [attr.data-automation-id]=\"'grid-view-sorting-'+col.title\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\">\n {{ col.title | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing) }\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!loading && !noPermission\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\" class=\"adf-datatable-cell adf-datatable-checkbox\">\n <mat-checkbox\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n role=\"checkbox\"\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n <div *ngFor=\"\n let col of (data.getColumns() | filterOutEvery:'isHidden':true),\n let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\">\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\">\n </mat-icon>\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-icon-cell>\n </div>\n <div *ngSwitchCase=\"'date'\" class=\"adf-cell-value adf-cell-date\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \">\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\">\n </adf-date-cell>\n </div>\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-location-cell>\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-filesize-cell>\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-datatable-cell>\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-boolean-cell>\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\">\n </adf-json-cell>\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\">\n </adf-amount-cell>\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\">\n </adf-number-cell>\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\">\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n (actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\"\n role=\"row\"\n [class.adf-datatable-row]=\"display === 'list'\"\n [class.adf-datatable-card-empty]=\"display === 'gallery'\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\">\n </ng-template>\n <ng-content select=\"adf-empty-list\"></ng-content>\n </div>\n </div>\n <div *ngFor=\"let row of fakeRows\"\n class=\"adf-datatable-row adf-datatable-row-empty-card\">\n </div>\n </ng-container>\n <div *ngIf=\"!loading && noPermission\"\n role=\"row\"\n [class.adf-datatable-row]=\"display === 'list'\"\n class=\"adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\">\n </ng-template>\n </div>\n </div>\n <div *ngIf=\"loading\"\n [class.adf-datatable-row]=\"display === 'list'\"\n [class.adf-datatable-card-loading]=\"display === 'gallery'\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\">\n </ng-template>\n </div>\n </div>\n </div>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-card{border:1px solid var(--adf-theme-foreground-divider-color)}.adf-datatable-card .adf-datatable-body{flex-flow:row wrap;display:flex;width:100%;justify-content:space-evenly;align-content:flex-start;align-items:flex-start}.adf-datatable-card .adf-datatable-body .adf-datatable-row{transition:all .3s ease;position:relative;display:flex;flex-direction:column;flex:0 1 24%;width:288px;max-width:288px;min-width:288px;height:200px;overflow:hidden;margin:6px;padding:15px;transition:box-shadow .28s cubic-bezier(.4,0,.2,1)}.adf-datatable-card .adf-datatable-body .adf-datatable-row:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.adf-datatable-card .adf-datatable-body .adf-datatable-row.adf-datatable-row-empty-card{height:0;padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0}.adf-datatable-card .adf-datatable-body .adf-is-selected{background:var(--adf-theme-primary-100);padding-bottom:31px}.adf-datatable-card .adf-datatable-body .adf-datatable-card-loading{width:100%;min-height:250px}.adf-datatable-card .adf-datatable-body .adf-datatable-card-loading .adf-datatable-cell{height:240px}.adf-datatable-card .adf-datatable-body .adf-datatable-card-empty{width:100%;min-height:380px}.adf-datatable-card .adf-datatable-body .adf-datatable-card-empty .adf-datatable-cell{height:370px}.adf-datatable-card .adf-datatable-body .adf-datatable-cell--image{margin-left:8px}.adf-datatable-card .adf-datatable-body .adf-datatable-cell{text-align:left;flex:0 1 24%;height:136px;white-space:normal;text-overflow:ellipsis;overflow:hidden;outline:none}.adf-datatable-card .adf-datatable-body .adf-datatable-cell:before{margin-left:10px;text-align:left;content:attr(title);color:var(--adf-theme-foreground-text-color-054);float:left;width:140px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.adf-datatable-card .adf-datatable-body .adf-datatable-cell .adf-datatable-cell-value{display:block;overflow:hidden;text-overflow:ellipsis}.adf-datatable-card .adf-datatable-body .adf-datatable__actions-cell.adf-datatable-actions-menu{position:absolute;height:42px;width:42px;right:0;top:4px}.adf-datatable-card .adf-datatable-body .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{display:none}.adf-datatable-card .adf-datatable-body .adf-image-table-cell{margin:8px;padding:4px;overflow:visible;border-bottom:1px solid var(--adf-theme-foreground-divider-color)}.adf-datatable-card .adf-datatable-body .adf-image-table-cell .adf-datatable-cell-container{float:left;width:42px}.adf-datatable-card .adf-datatable-body .adf-image-table-cell:after{margin:2px;content:attr(filename);float:left;width:140px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.adf-datatable-card .adf-datatable-body .adf-datatable-checkbox{margin:8px}.adf-datatable-card .adf-datatable-header{margin-right:18px;float:right}.adf-datatable-list{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header{display:flex;flex-direction:column;width:-moz-fit-content;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-row:focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{display:none}.adf-datatable-list .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset;position:absolute}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden{display:none}@media all and (max-width: 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (max-device-width: 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header.adf-datatable-checkbox{display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;flex-grow:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mat-checkbox-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (max-width: 380px){.adf-datatable-header{max-height:50%}}\n"], dependencies: [{ kind: "component", type: i3.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i4.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: i5.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i10.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i10.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i10.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i10.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i11.ContextMenuDirective, selector: "[adf-context-menu]", inputs: ["adf-context-menu", "adf-context-menu-enabled"] }, { kind: "directive", type: i12.UploadDirective, selector: "[adf-upload]", inputs: ["adf-upload", "adf-upload-data", "mode", "multiple", "accept", "directory"] }, { kind: "directive", type: i13.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i13.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i13.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i13.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: i14.IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "directive", type: i15.ResizableDirective, selector: "[adf-resizable]", inputs: ["coverPadding"], outputs: ["resizeStart", "resizing", "resizeEnd"], exportAs: ["adf-resizable"] }, { kind: "directive", type: i16.ResizeHandleDirective, selector: "[adf-resize-handle]", inputs: ["resizableContainer"] }, { kind: "component", type: i17.BooleanCellComponent, selector: "adf-boolean-cell" }, { kind: "component", type: i18.AmountCellComponent, selector: "adf-amount-cell", inputs: ["currencyConfig"] }, { kind: "component", type: i19.NumberCellComponent, selector: "adf-number-cell", inputs: ["decimalConfig"] }, { kind: "component", type: i20.LocationCellComponent, selector: "adf-location-cell", inputs: ["link"] }, { kind: "component", type: i21.DateCellComponent, selector: "adf-date-cell", inputs: ["dateConfig"] }, { kind: "component", type: i22.IconCellComponent, selector: "adf-icon-cell" }, { kind: "component", type: i23.DataTableCellComponent, selector: "adf-datatable-cell", inputs: ["data", "column", "row", "copyContent", "tooltip", "resolverFn"] }, { kind: "component", type: i24.DataTableRowComponent, selector: "adf-datatable-row", inputs: ["row", "disabled"], outputs: ["select"] }, { kind: "component", type: i25.FileSizeCellComponent, selector: "adf-filesize-cell" }, { kind: "component", type: i26.JsonCellComponent, selector: "adf-json-cell", inputs: ["editable"] }, { kind: "directive", type: i27.DropZoneDirective, selector: "[adf-drop-zone]", inputs: ["dropTarget", "dropRow", "dropColumn"] }, { kind: "pipe", type: i10.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i28.TranslatePipe, name: "translate" }, { kind: "pipe", type: i29.FileTypePipe, name: "fileType" }, { kind: "pipe", type: i30.FilterOutArrayObjectsByPropPipe, name: "filterOutEvery" }, { kind: "pipe", type: i31.LocalizedDatePipe, name: "adfLocalizedDate" }], encapsulation: i0.ViewEncapsulation.None });
742
+ DataTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: DataTableComponent, selector: "adf-datatable", inputs: { data: "data", rows: "rows", sorting: "sorting", columns: "columns", selectionMode: "selectionMode", multiselect: "multiselect", mainTableAction: "mainTableAction", actions: "actions", showMainDatatableActions: "showMainDatatableActions", actionsPosition: "actionsPosition", actionsVisibleOnHover: "actionsVisibleOnHover", fallbackThumbnail: "fallbackThumbnail", contextMenu: "contextMenu", rowStyle: "rowStyle", rowStyleClass: "rowStyleClass", showHeader: "showHeader", stickyHeader: "stickyHeader", loading: "loading", noPermission: "noPermission", rowMenuCacheEnabled: "rowMenuCacheEnabled", resolverFn: "resolverFn", allowFiltering: "allowFiltering", isResizingEnabled: "isResizingEnabled", blurOnResize: "blurOnResize" }, outputs: { rowClick: "rowClick", rowDblClick: "rowDblClick", showRowContextMenu: "showRowContextMenu", showRowActionsMenu: "showRowActionsMenu", executeRowAction: "executeRowAction", columnOrderChanged: "columnOrderChanged", columnsWidthChanged: "columnsWidthChanged" }, host: { listeners: { "keyup": "onKeydown($event)" }, classAttribute: "adf-datatable" }, queries: [{ propertyName: "columnList", first: true, predicate: DataColumnListComponent, descendants: true }], viewQueries: [{ propertyName: "rowsList", predicate: DataTableRowComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n role=\"grid\"\n *ngIf=\"data\"\n class=\"adf-full-width adf-datatable-list\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\">\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n role=\"row\">\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\" [checked]=\"isSelectAllChecked\" (change)=\"onSelectAllClick($event)\" class=\"adf-checkbox-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}</mat-checkbox>\n </div>\n\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngFor=\"\n let col of (data.getColumns() | filterOutEvery:'isHidden':true);\n let columnIndex = index\n let lastColumn = last\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"col.title | translate\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\" [dropColumn]=\"col\">\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span *ngIf=\"col.title\" matTooltip=\"{{col.title | translate}}\" class=\"adf-datatable-cell-value\">{{col.title | translate}}</span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\"></ng-template>\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\"></ng-template>\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\">\n </adf-icon>\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n (click)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n matTooltip=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (keydown.enter)=\"mainMenuTrigger.openMenu()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu>\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\">\n </ng-container>\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n </div>\n\n <div\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing) }\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!loading && !noPermission\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\" class=\"adf-datatable-cell adf-datatable-checkbox\">\n <mat-checkbox\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n role=\"checkbox\"\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n <div *ngFor=\"\n let col of (data.getColumns() | filterOutEvery:'isHidden':true),\n let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\">\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\">\n </mat-icon>\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-icon-cell>\n </div>\n <div *ngSwitchCase=\"'date'\" class=\"adf-cell-value adf-cell-date\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \">\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\">\n </adf-date-cell>\n </div>\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-location-cell>\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-filesize-cell>\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-datatable-cell>\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-boolean-cell>\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\">\n </adf-json-cell>\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\">\n </adf-amount-cell>\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\">\n </adf-number-cell>\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\">\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n (actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\" role=\"row\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\">\n </ng-template>\n <ng-content select=\"adf-empty-list\"></ng-content>\n </div>\n </div>\n </ng-container>\n <div *ngIf=\"!loading && noPermission\"\n role=\"row\"\n class=\"adf-datatable-row adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\">\n </ng-template>\n </div>\n </div>\n <div *ngIf=\"loading\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\">\n </ng-template>\n </div>\n </div>\n </div>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-list{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header{display:flex;flex-direction:column;width:-moz-fit-content;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-row:focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{display:none}.adf-datatable-list .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset;position:absolute}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden{display:none}@media all and (max-width: 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (max-device-width: 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header.adf-datatable-checkbox{display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mat-checkbox-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (max-width: 380px){.adf-datatable-header{max-height:50%}}\n"], dependencies: [{ kind: "component", type: i3.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: i4.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i7.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i8.ContextMenuDirective, selector: "[adf-context-menu]", inputs: ["adf-context-menu", "adf-context-menu-enabled"] }, { kind: "directive", type: i9.UploadDirective, selector: "[adf-upload]", inputs: ["adf-upload", "adf-upload-data", "mode", "multiple", "accept", "directory"] }, { kind: "directive", type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i10.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i10.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: i11.IconComponent, selector: "adf-icon", inputs: ["color", "fontSet", "value"] }, { kind: "directive", type: i12.ResizableDirective, selector: "[adf-resizable]", inputs: ["coverPadding"], outputs: ["resizeStart", "resizing", "resizeEnd"], exportAs: ["adf-resizable"] }, { kind: "directive", type: i13.ResizeHandleDirective, selector: "[adf-resize-handle]", inputs: ["resizableContainer"] }, { kind: "component", type: i14.BooleanCellComponent, selector: "adf-boolean-cell" }, { kind: "component", type: i15.AmountCellComponent, selector: "adf-amount-cell", inputs: ["currencyConfig"] }, { kind: "component", type: i16.NumberCellComponent, selector: "adf-number-cell", inputs: ["decimalConfig"] }, { kind: "component", type: i17.LocationCellComponent, selector: "adf-location-cell", inputs: ["link"] }, { kind: "component", type: i18.DateCellComponent, selector: "adf-date-cell", inputs: ["dateConfig"] }, { kind: "component", type: i19.IconCellComponent, selector: "adf-icon-cell" }, { kind: "component", type: i20.DataTableCellComponent, selector: "adf-datatable-cell", inputs: ["data", "column", "row", "copyContent", "tooltip", "resolverFn"] }, { kind: "component", type: i21.DataTableRowComponent, selector: "adf-datatable-row", inputs: ["row", "disabled"], outputs: ["select"] }, { kind: "component", type: i22.FileSizeCellComponent, selector: "adf-filesize-cell" }, { kind: "component", type: i23.JsonCellComponent, selector: "adf-json-cell", inputs: ["editable"] }, { kind: "directive", type: i24.DropZoneDirective, selector: "[adf-drop-zone]", inputs: ["dropTarget", "dropRow", "dropColumn"] }, { kind: "pipe", type: i7.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i25.TranslatePipe, name: "translate" }, { kind: "pipe", type: i26.FileTypePipe, name: "fileType" }, { kind: "pipe", type: i27.FilterOutArrayObjectsByPropPipe, name: "filterOutEvery" }, { kind: "pipe", type: i28.LocalizedDatePipe, name: "adfLocalizedDate" }], encapsulation: i0.ViewEncapsulation.None });
789
743
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: DataTableComponent, decorators: [{
790
744
  type: Component,
791
- args: [{ selector: 'adf-datatable', encapsulation: ViewEncapsulation.None, host: { class: 'adf-datatable' }, template: "<div\n role=\"grid\"\n *ngIf=\"data\" class=\"adf-full-width\"\n [class.adf-datatable-card]=\"display === 'gallery'\"\n [class.adf-datatable-list]=\"display === 'list'\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\">\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n *ngIf=\"display === 'list'\"\n role=\"row\">\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\" [checked]=\"isSelectAllChecked\" (change)=\"onSelectAllClick($event)\" class=\"adf-checkbox-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}</mat-checkbox>\n </div>\n\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngFor=\"\n let col of (data.getColumns() | filterOutEvery:'isHidden':true);\n let columnIndex = index\n let lastColumn = last\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"col.title | translate\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\" [dropColumn]=\"col\">\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span *ngIf=\"col.title\" matTooltip=\"{{col.title | translate}}\" class=\"adf-datatable-cell-value\">{{col.title | translate}}</span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\"></ng-template>\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\"></ng-template>\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\">\n </adf-icon>\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n (click)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n matTooltip=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (keydown.enter)=\"mainMenuTrigger.openMenu()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu>\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\">\n </ng-container>\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n <mat-form-field *ngIf=\"display === 'gallery' && isHeaderVisible()\">\n <mat-select [value]=\"getSortingKey()\" [attr.data-automation-id]=\"'grid-view-sorting'\">\n <mat-option *ngFor=\"let col of getSortableColumns()\"\n [value]=\"col.key\"\n [attr.data-automation-id]=\"'grid-view-sorting-'+col.title\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\">\n {{ col.title | translate}}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <div\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing) }\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!loading && !noPermission\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\" class=\"adf-datatable-cell adf-datatable-checkbox\">\n <mat-checkbox\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n role=\"checkbox\"\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n <div *ngFor=\"\n let col of (data.getColumns() | filterOutEvery:'isHidden':true),\n let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\">\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\">\n </mat-icon>\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-icon-cell>\n </div>\n <div *ngSwitchCase=\"'date'\" class=\"adf-cell-value adf-cell-date\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \">\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\">\n </adf-date-cell>\n </div>\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-location-cell>\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-filesize-cell>\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-datatable-cell>\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-boolean-cell>\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\">\n </adf-json-cell>\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\">\n </adf-amount-cell>\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\">\n </adf-number-cell>\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\">\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n (actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\"\n role=\"row\"\n [class.adf-datatable-row]=\"display === 'list'\"\n [class.adf-datatable-card-empty]=\"display === 'gallery'\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\">\n </ng-template>\n <ng-content select=\"adf-empty-list\"></ng-content>\n </div>\n </div>\n <div *ngFor=\"let row of fakeRows\"\n class=\"adf-datatable-row adf-datatable-row-empty-card\">\n </div>\n </ng-container>\n <div *ngIf=\"!loading && noPermission\"\n role=\"row\"\n [class.adf-datatable-row]=\"display === 'list'\"\n class=\"adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\">\n </ng-template>\n </div>\n </div>\n <div *ngIf=\"loading\"\n [class.adf-datatable-row]=\"display === 'list'\"\n [class.adf-datatable-card-loading]=\"display === 'gallery'\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\">\n </ng-template>\n </div>\n </div>\n </div>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-card{border:1px solid var(--adf-theme-foreground-divider-color)}.adf-datatable-card .adf-datatable-body{flex-flow:row wrap;display:flex;width:100%;justify-content:space-evenly;align-content:flex-start;align-items:flex-start}.adf-datatable-card .adf-datatable-body .adf-datatable-row{transition:all .3s ease;position:relative;display:flex;flex-direction:column;flex:0 1 24%;width:288px;max-width:288px;min-width:288px;height:200px;overflow:hidden;margin:6px;padding:15px;transition:box-shadow .28s cubic-bezier(.4,0,.2,1)}.adf-datatable-card .adf-datatable-body .adf-datatable-row:not([class*=mat-elevation-z]){box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.adf-datatable-card .adf-datatable-body .adf-datatable-row.adf-datatable-row-empty-card{height:0;padding-top:0;padding-bottom:0;margin-top:0;margin-bottom:0}.adf-datatable-card .adf-datatable-body .adf-is-selected{background:var(--adf-theme-primary-100);padding-bottom:31px}.adf-datatable-card .adf-datatable-body .adf-datatable-card-loading{width:100%;min-height:250px}.adf-datatable-card .adf-datatable-body .adf-datatable-card-loading .adf-datatable-cell{height:240px}.adf-datatable-card .adf-datatable-body .adf-datatable-card-empty{width:100%;min-height:380px}.adf-datatable-card .adf-datatable-body .adf-datatable-card-empty .adf-datatable-cell{height:370px}.adf-datatable-card .adf-datatable-body .adf-datatable-cell--image{margin-left:8px}.adf-datatable-card .adf-datatable-body .adf-datatable-cell{text-align:left;flex:0 1 24%;height:136px;white-space:normal;text-overflow:ellipsis;overflow:hidden;outline:none}.adf-datatable-card .adf-datatable-body .adf-datatable-cell:before{margin-left:10px;text-align:left;content:attr(title);color:var(--adf-theme-foreground-text-color-054);float:left;width:140px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.adf-datatable-card .adf-datatable-body .adf-datatable-cell .adf-datatable-cell-value{display:block;overflow:hidden;text-overflow:ellipsis}.adf-datatable-card .adf-datatable-body .adf-datatable__actions-cell.adf-datatable-actions-menu{position:absolute;height:42px;width:42px;right:0;top:4px}.adf-datatable-card .adf-datatable-body .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{display:none}.adf-datatable-card .adf-datatable-body .adf-image-table-cell{margin:8px;padding:4px;overflow:visible;border-bottom:1px solid var(--adf-theme-foreground-divider-color)}.adf-datatable-card .adf-datatable-body .adf-image-table-cell .adf-datatable-cell-container{float:left;width:42px}.adf-datatable-card .adf-datatable-body .adf-image-table-cell:after{margin:2px;content:attr(filename);float:left;width:140px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.adf-datatable-card .adf-datatable-body .adf-datatable-checkbox{margin:8px}.adf-datatable-card .adf-datatable-header{margin-right:18px;float:right}.adf-datatable-list{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header{display:flex;flex-direction:column;width:-moz-fit-content;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-row:focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{display:none}.adf-datatable-list .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset;position:absolute}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden{display:none}@media all and (max-width: 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (max-device-width: 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header.adf-datatable-checkbox{display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;flex-grow:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mat-checkbox-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (max-width: 380px){.adf-datatable-header{max-height:50%}}\n"] }]
745
+ args: [{ selector: 'adf-datatable', encapsulation: ViewEncapsulation.None, host: { class: 'adf-datatable' }, template: "<div\n role=\"grid\"\n *ngIf=\"data\"\n class=\"adf-full-width adf-datatable-list\"\n [class.adf-sticky-header]=\"isStickyHeaderEnabled()\"\n [class.adf-datatable--empty]=\"(isEmpty() && !isHeaderVisible()) || loading\"\n [class.adf-datatable--empty--header-visible]=\"isEmpty() && isHeaderVisible()\">\n <div *ngIf=\"isHeaderVisible()\" class=\"adf-datatable-header\" role=\"rowgroup\" [ngClass]=\"{ 'adf-sr-only': !isHeaderVisible() }\">\n <adf-datatable-row\n cdkDropList\n cdkDropListOrientation=\"horizontal\"\n [cdkDropListSortPredicate]=\"filterDisabledColumns\"\n data-automation-id=\"datatable-row-header\"\n [disabled]=\"!isHeaderVisible()\"\n class=\"adf-datatable-row\"\n role=\"row\">\n\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" class=\"adf-actions-column adf-datatable-cell-header\">\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </div>\n\n <!-- Columns -->\n <div *ngIf=\"multiselect\" class=\"adf-datatable-cell-header adf-datatable-checkbox\">\n <mat-checkbox [indeterminate]=\"isSelectAllIndeterminate\" [checked]=\"isSelectAllChecked\" (change)=\"onSelectAllClick($event)\" class=\"adf-checkbox-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_ALL' | translate }}</mat-checkbox>\n </div>\n\n <div\n class=\"adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-header adf-datatable-cell-data\"\n *ngFor=\"\n let col of (data.getColumns() | filterOutEvery:'isHidden':true);\n let columnIndex = index\n let lastColumn = last\"\n [attr.data-automation-id]=\"'auto_id_' + col.key\"\n [ngClass]=\"{\n 'adf-sortable': col.sortable,\n 'adf-datatable__cursor--pointer': !isResizing,\n 'adf-datatable__header--sorted-asc': isColumnSorted(col, 'asc'),\n 'adf-datatable__header--sorted-desc': isColumnSorted(col, 'desc')}\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\"\n [attr.aria-label]=\"col.title | translate\"\n (click)=\"onColumnHeaderClick(col, $event)\"\n (keyup.enter)=\"onColumnHeaderClick(col, $event)\"\n role=\"columnheader\"\n [attr.tabindex]=\"isHeaderVisible() ? 0 : null\"\n [attr.aria-sort]=\"col.sortable ? (getAriaSort(col) | translate) : null\"\n cdkDrag\n cdkDragLockAxis=\"x\"\n (cdkDragStarted)=\"isDraggingHeaderColumn = true\"\n (cdkDragDropped)=\"onDropHeaderColumn($event)\"\n [cdkDragDisabled]=\"!col.draggable\"\n (mouseenter)=\"hoveredHeaderColumnIndex = columnIndex\"\n (mouseleave)=\"hoveredHeaderColumnIndex = -1\"\n adf-drop-zone dropTarget=\"header\" [dropColumn]=\"col\">\n\n <div\n adf-resizable\n #resizableElement=\"adf-resizable\"\n [coverPadding]=\"10\"\n (resizing)=\"onResizing($event, columnIndex)\"\n (resizeStart)=\"resizingColumnIndex = columnIndex\"\n (resizeEnd)=\"onResizingEnd()\"\n [attr.data-automation-id]=\"'auto_header_content_id_' + col.key\"\n class=\"adf-datatable-cell-header-content\"\n [ngClass]=\"{ 'adf-datatable-cell-header-content--hovered':\n hoveredHeaderColumnIndex === columnIndex &&\n !isDraggingHeaderColumn &&\n !isResizing && col.sortable}\"\n >\n <ng-container *ngIf=\"!col.header\">\n <span *ngIf=\"col.title\" matTooltip=\"{{col.title | translate}}\" class=\"adf-datatable-cell-value\">{{col.title | translate}}</span>\n\n <span *ngIf=\"col.title && col.sortable && isDraggingHeaderColumn\" class=\"adf-sr-only\" aria-live=\"polite\">\n {{ getSortLiveAnnouncement(col) | translate: { string: col.title | translate } }}\n </span>\n\n <span *ngIf=\"!col.title && !col.sortable && !headerFilterTemplate\" [attr.title]=\"'ADF-DATATABLE.ACCESSIBILITY.EMPTY_HEADER' | translate\"></span>\n </ng-container>\n\n <div *ngIf=\"col.header\" class=\"adf-datatable-cell-value\">\n <ng-template [ngTemplateOutlet]=\"col.header\" [ngTemplateOutletContext]=\"{$implicit: col}\"></ng-template>\n </div>\n\n <span\n [class.adf-datatable__header--sorted-asc]=\"isColumnSorted(col, 'asc')\"\n [class.adf-datatable__header--sorted-desc]=\"isColumnSorted(col, 'desc')\">\n </span>\n\n <ng-template *ngIf=\"allowFiltering\" [ngTemplateOutlet]=\"headerFilterTemplate\" [ngTemplateOutletContext]=\"{$implicit: col}\"></ng-template>\n\n <span\n *ngIf=\"col.draggable\"\n cdkDragHandle\n [ngClass]=\"{ 'adf-datatable-cell-header-drag-icon': !isResizing }\"\n >\n <adf-icon\n *ngIf=\"hoveredHeaderColumnIndex === columnIndex && !isResizing\"\n value=\"adf:drag_indicator\"\n [attr.data-automation-id]=\"'adf-datatable-cell-header-drag-icon-'+col.key\">\n </adf-icon>\n </span>\n </div>\n <div\n *ngIf=\"isResizingEnabled && col.resizable && !lastColumn\"\n [ngClass]=\"hoveredHeaderColumnIndex === columnIndex && !isResizing || resizingColumnIndex === columnIndex ? 'adf-datatable__resize-handle-visible' : 'adf-datatable__resize-handle-hidden'\"\n adf-resize-handle\n (click)=\"$event.stopPropagation()\"\n class=\"adf-datatable__resize-handle\"\n [resizableContainer]=\"resizableElement\">\n <div class=\"adf-datatable__resize-handle--divider\"></div>\n </div>\n <div class=\"adf-drop-header-cell-placeholder\" *cdkDragPlaceholder></div>\n </div>\n\n <!-- Header actions (right) -->\n <div\n *ngIf=\"(actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n class=\"adf-actions-column adf-datatable-actions-menu adf-datatable-cell-header adf-datatable__actions-cell\"\n >\n <ng-container *ngIf=\"mainActionTemplate\">\n <button\n data-automation-id=\"adf-datatable-main-menu-button\"\n matTooltip=\"{{ 'ADF-DATATABLE.CONTENT-ACTIONS.SELECT_COLUMNS' | translate }}\"\n mat-icon-button\n #mainMenuTrigger=\"matMenuTrigger\"\n (keydown.enter)=\"mainMenuTrigger.openMenu()\"\n [matMenuTriggerFor]=\"mainMenu\">\n <mat-icon>view_week_outline</mat-icon>\n </button>\n <mat-menu #mainMenu>\n <ng-container\n [ngTemplateOutlet]=\"mainActionTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: mainMenuTrigger\n }\">\n </ng-container>\n </mat-menu>\n <span class=\"adf-sr-only\">{{ 'ADF-DATATABLE.ACCESSIBILITY.ACTIONS' | translate }}</span>\n </ng-container>\n </div>\n\n </adf-datatable-row>\n </div>\n\n <div\n class=\"adf-datatable-body\"\n [ngClass]=\"{ 'adf-blur-datatable-body': blurOnResize && (isDraggingHeaderColumn || isResizing) }\"\n role=\"rowgroup\">\n <ng-container *ngIf=\"!loading && !noPermission\">\n <adf-datatable-row *ngFor=\"let row of data.getRows(); let idx = index\"\n [row]=\"row\"\n (select)=\"onEnterKeyPressed(row, $event)\"\n (keyup)=\"onRowKeyUp(row, $event)\"\n (keydown)=\"onRowEnterKeyDown(row, $event)\"\n [adf-upload]=\"rowAllowsDrop(row)\"\n [adf-upload-data]=\"row\"\n [ngStyle]=\"rowStyle\"\n [ngClass]=\"getRowStyle(row)\"\n [attr.data-automation-id]=\"'datatable-row-' + idx\"\n (contextmenu)=\"markRowAsContextMenuSource(row)\">\n <!-- Actions (left) -->\n <div *ngIf=\"actions && actionsPosition === 'left'\" role=\"gridcell\" class=\"adf-datatable-cell\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_left_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </div>\n\n <label *ngIf=\"multiselect\" class=\"adf-datatable-cell adf-datatable-checkbox\">\n <mat-checkbox\n [checked]=\"row.isSelected\"\n [attr.aria-checked]=\"row.isSelected\"\n role=\"checkbox\"\n (change)=\"onCheckboxChange(row, $event)\"\n class=\"adf-checkbox-sr-only\">\n {{ 'ADF-DATATABLE.ACCESSIBILITY.SELECT_FILE' | translate }}\n </mat-checkbox>\n </label>\n <div *ngFor=\"\n let col of (data.getColumns() | filterOutEvery:'isHidden':true),\n let lastColumn = last;\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable-cell--{{col.type || 'text'}} {{col.cssClass}} adf-datatable-cell-data\"\n [attr.title]=\"col.title | translate\"\n [attr.data-automation-id]=\"getAutomationValue(row)\"\n [attr.aria-selected]=\"row.isSelected\"\n [attr.aria-label]=\"col.title ? (col.title | translate) : null\"\n (click)=\"onRowClick(row, $event)\"\n (keydown.enter)=\"onEnterKeyPressed(row, $any($event))\"\n [adf-context-menu]=\"getContextMenuActions(row, col)\"\n [adf-context-menu-enabled]=\"contextMenu\"\n adf-drop-zone dropTarget=\"cell\" [dropColumn]=\"col\" [dropRow]=\"row\"\n [ngStyle]=\"(col.width) && !lastColumn && {'flex': getFlexValue(col)}\">\n <div *ngIf=\"!col.template\" class=\"adf-datatable-cell-container\">\n <ng-container [ngSwitch]=\"data.getColumnType(row, col)\">\n <div *ngSwitchCase=\"'image'\" class=\"adf-cell-value\">\n <mat-icon *ngIf=\"isIconValue(row, col); else no_iconvalue\">{{ asIconValue(row, col) }}\n </mat-icon>\n <ng-template #no_iconvalue>\n <mat-icon class=\"adf-datatable-selected\"\n *ngIf=\"row.isSelected && !multiselect; else no_selected_row\" svgIcon=\"selected\">\n </mat-icon>\n <ng-template #no_selected_row>\n <img class=\"adf-datatable-center-img-ie\"\n [attr.aria-label]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n [attr.alt]=\"(data.getValue(row, col) | fileType) === 'disable' ?\n ('ADF-DATATABLE.ACCESSIBILITY.ICON_DISABLED' | translate) :\n 'ADF-DATATABLE.ACCESSIBILITY.ICON_TEXT' | translate:{\n type: 'ADF-DATATABLE.FILE_TYPE.' + (data.getValue(row, col) | fileType | uppercase) | translate\n }\"\n src=\"{{ data.getValue(row, col) }}\"\n (error)=\"onImageLoadingError($event, row)\">\n </ng-template>\n </ng-template>\n </div>\n <div *ngSwitchCase=\"'icon'\" class=\"adf-cell-value\">\n <adf-icon-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-icon-cell>\n </div>\n <div *ngSwitchCase=\"'date'\" class=\"adf-cell-value adf-cell-date\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'date_' + (data.getValue(row, col, resolverFn) | adfLocalizedDate: 'medium') \">\n <adf-date-cell class=\"adf-datatable-center-date-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\"\n [dateConfig]=\"col.dateConfig\">\n </adf-date-cell>\n </div>\n <div *ngSwitchCase=\"'location'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'location' + data.getValue(row, col, resolverFn)\">\n <adf-location-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-location-cell>\n </div>\n <div *ngSwitchCase=\"'fileSize'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'fileSize_' + data.getValue(row, col, resolverFn)\">\n <adf-filesize-cell class=\"adf-datatable-center-size-column-ie\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-filesize-cell>\n </div>\n <div *ngSwitchCase=\"'text'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'text_' + data.getValue(row, col, resolverFn)\">\n <adf-datatable-cell\n [copyContent]=\"col.copyContent\"\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-datatable-cell>\n </div>\n <div *ngSwitchCase=\"'boolean'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\"\n [attr.data-automation-id]=\"'boolean_' + data.getValue(row, col, resolverFn)\">\n <adf-boolean-cell\n [data]=\"data\"\n [column]=\"col\"\n [row]=\"row\"\n [resolverFn]=\"resolverFn\"\n [tooltip]=\"getCellTooltip(row, col)\">\n </adf-boolean-cell>\n </div>\n <div *ngSwitchCase=\"'json'\" [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\" class=\"adf-cell-value\">\n <adf-json-cell\n [editable]=\"col.editable\"\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\">\n </adf-json-cell>\n </div>\n <div *ngSwitchCase=\"'amount'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'amount_' + data.getValue(row, col, resolverFn)\">\n <adf-amount-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [currencyConfig]=\"col.currencyConfig\">\n </adf-amount-cell>\n </div>\n <div *ngSwitchCase=\"'number'\"\n class=\"adf-cell-value\"\n [attr.tabindex]=\"data.getValue(row, col, resolverFn)? 0 : -1\"\n [attr.data-automation-id]=\"'number_' + data.getValue(row, col, resolverFn)\">\n <adf-number-cell\n [data]=\"data\"\n [column]=\"col\"\n [resolverFn]=\"resolverFn\"\n [row]=\"row\"\n [decimalConfig]=\"col.decimalConfig\">\n </adf-number-cell>\n </div>\n <span *ngSwitchDefault class=\"adf-cell-value\">\n <!-- empty cell for unknown column type -->\n </span>\n </ng-container>\n </div>\n <div *ngIf=\"col.template\" class=\"adf-datatable-cell-container\">\n <div class=\"adf-cell-value\" [attr.tabindex]=\"col.focus ? 0 : null\">\n <ng-container\n [ngTemplateOutlet]=\"col.template\"\n [ngTemplateOutletContext]=\"{ $implicit: { data: data, row: row, col: col }, value: data.getValue(row, col, resolverFn) }\">\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Row actions (right) -->\n <div *ngIf=\"\n (actions && actionsPosition === 'right') ||\n (mainActionTemplate && showMainDatatableActions)\"\n role=\"gridcell\"\n class=\"adf-datatable-cell adf-datatable__actions-cell adf-datatable-center-actions-column-ie adf-datatable-actions-menu\">\n\n <ng-container *ngIf=\"(actions && actionsPosition === 'right')\">\n <button mat-icon-button [matMenuTriggerFor]=\"menu\" #actionsMenuTrigger=\"matMenuTrigger\"\n [ngClass]=\"getHideActionsWithoutHoverClass(actionsMenuTrigger)\"\n [attr.aria-label]=\"'ADF-DATATABLE.ACCESSIBILITY.ROW_OPTION_BUTTON' | translate\"\n [title]=\"'ADF-DATATABLE.CONTENT-ACTIONS.TOOLTIP' | translate\"\n [attr.id]=\"'action_menu_right_' + idx\"\n [attr.data-automation-id]=\"'action_menu_' + idx\"\n (keydown.enter)=\"actionsMenuTrigger.openMenu()\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n <button mat-menu-item *ngFor=\"let action of getRowActions(row)\"\n [attr.data-automation-id]=\"action.title\"\n [attr.aria-label]=\"action.title | translate\"\n [disabled]=\"action.disabled\"\n (click)=\"onExecuteRowAction(row, action)\">\n <mat-icon *ngIf=\"action.icon\">{{ action.icon }}</mat-icon>\n <span>{{ action.title | translate }}</span>\n </button>\n </mat-menu>\n </ng-container>\n </div>\n </adf-datatable-row>\n <div *ngIf=\"isEmpty()\" role=\"row\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\" role=\"gridcell\">\n <ng-template *ngIf=\"noContentTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noContentTemplate\">\n </ng-template>\n <ng-content select=\"adf-empty-list\"></ng-content>\n </div>\n </div>\n </ng-container>\n <div *ngIf=\"!loading && noPermission\"\n role=\"row\"\n class=\"adf-datatable-row adf-no-permission__row\">\n <div class=\"adf-no-permission__cell adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"noPermissionTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"noPermissionTemplate\">\n </ng-template>\n </div>\n </div>\n <div *ngIf=\"loading\" class=\"adf-datatable-row\">\n <div class=\"adf-no-content-container adf-datatable-cell\">\n <ng-template *ngIf=\"loadingTemplate\"\n ngFor [ngForOf]=\"[data]\"\n [ngForTemplate]=\"loadingTemplate\">\n </ng-template>\n </div>\n </div>\n </div>\n</div>\n", styles: [".adf-datatable{overflow-y:scroll;height:100%}.adf-datatable .adf-full-width{width:100%}.adf-datatable__resize-handle{padding:0 2px}.adf-datatable__resize-handle-visible{visibility:visible}.adf-datatable__resize-handle-hidden{visibility:hidden}.adf-datatable__resize-handle--divider{padding:24px 0;border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable__resize-handle:hover{cursor:col-resize}.adf-datatable__cursor--pointer:hover{cursor:pointer}.adf-datatable-list{display:flex;flex-direction:column;background-color:var(--adf-theme-background-card-color);border:1px solid var(--adf-theme-foreground-text-color-007);box-sizing:border-box;overflow-x:auto}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-center-size-column-ie{padding-top:17px}.adf-datatable-list .adf-datatable__actions-cell.adf-datatable-center-actions-column-ie{padding-top:7px}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie{position:relative}.adf-datatable-list .adf-cell-date.adf-datatable-center-date-column-ie .adf-datatable-cell-value{width:100%}.adf-datatable-list .adf-datatable-center-img-ie{padding:0;min-width:0;width:24px;height:56px}}.adf-datatable-list .adf-datatable-header{display:flex;flex-direction:column;width:-moz-fit-content;width:fit-content;min-width:100%;box-sizing:border-box}.adf-datatable-list .adf-datatable-header .adf-datatable-row{padding-right:15px}.adf-datatable-list .adf-datatable-header .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-header .adf-datatable-row:focus{background-color:inherit}.adf-datatable-list .adf-datatable-row:hover,.adf-datatable-list .adf-datatable-row:focus{background-color:var(--adf-theme-background-hover-color)}.adf-datatable-list .adf-datatable-row:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-datatable-row .adf-cell-value:focus,.adf-datatable-list .adf-datatable-row .adf-datatable-cell-header:focus{outline-offset:-1px;outline:1px solid var(--theme-accent-color-a200)}.adf-datatable-list .adf-blur-datatable-body{filter:blur(3px)}.adf-datatable-list .adf-datatable-body{display:flex;flex-direction:column;background-color:inherit;width:100%;min-width:100%}.adf-datatable-list .adf-datatable-body .adf-datatable-row{transition-duration:.28s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-property:background-color;border-top:1px solid var(--adf-theme-foreground-text-color-007);min-height:var(--theme-display-3-font-size);cursor:pointer;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected,.adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-is-selected:hover{background-color:var(--adf-theme-background-selected-button-color)}.adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child{border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable-list .adf-datatable-row{display:flex;align-items:center}.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox{max-width:65px;width:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-row .adf-datatable-checkbox{padding-top:15px}}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header{text-align:left;box-sizing:border-box;min-width:65px}.adf-datatable-list .adf-datatable-cell--text,.adf-datatable-list .adf-datatable-cell-header--text{text-align:left;position:relative}.adf-datatable-list .adf-datatable-cell--date,.adf-datatable-list .adf-datatable-cell-header--date{text-align:left}.adf-datatable-list .adf-datatable-cell--number,.adf-datatable-list .adf-datatable-cell-header--number{text-align:right}.adf-datatable-list .adf-datatable-cell--image,.adf-datatable-list .adf-datatable-cell--icon,.adf-datatable-list .adf-datatable-cell-header--image,.adf-datatable-list .adf-datatable-cell-header--icon{padding-left:24px;padding-right:24px;width:65px;min-width:65px;text-align:left}.adf-datatable-list .adf-datatable-cell--fileSize,.adf-datatable-list .adf-datatable-cell-header--fileSize{min-width:65px}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-1,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-1{flex-grow:1}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-2,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-2{flex-grow:2}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-3,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-3{flex-grow:3}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-4,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-4{flex-grow:4}.adf-datatable-list .adf-datatable-cell-header.adf-expand-cell-5,.adf-datatable-list .adf-datatable-cell.adf-expand-cell-5{flex-grow:5}.adf-datatable-list .adf-datatable-cell-header.adf-no-grow-cell,.adf-datatable-list .adf-datatable-cell.adf-no-grow-cell{flex-grow:0;min-width:100px}.adf-datatable-list .adf-datatable-cell-header.adf-min-width-cell,.adf-datatable-list .adf-datatable-cell.adf-min-width-cell{min-width:110px}.adf-datatable-list .adf-datatable-cell{color:var(--adf-theme-foreground-text-color);min-height:inherit}.adf-datatable-list .adf-datatable-cell,.adf-datatable-list .adf-datatable-cell-header{flex:1;padding:0;align-items:center;display:flex}.adf-datatable-list .adf-datatable-cell:first-child,.adf-datatable-list .adf-datatable-cell-header:first-child{margin-left:15px;box-sizing:content-box}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-container,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-container{overflow:hidden;min-height:inherit;align-items:center;display:flex;width:100%;padding:0 10px}.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value{word-break:break-word;display:block}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-datatable-cell .adf-datatable-cell-value,.adf-datatable-list .adf-datatable-cell-header .adf-datatable-cell-value{padding:17px 10px 10px}}.adf-datatable-list .adf-datatable-actions-menu{margin-left:auto;justify-content:end;padding-right:15px}.adf-datatable-list .adf-cell-value{display:flex;min-height:inherit;align-items:center;word-break:break-all;width:100%}.adf-datatable-list .adf-datatable__actions-cell,.adf-datatable-list .adf-datatable-cell--image{max-width:65px;display:flex}.adf-datatable-list .adf-datatable__actions-cell .adf-cell-value,.adf-datatable-list .adf-datatable-cell--image .adf-cell-value{width:unset}.adf-datatable-list .adf-datatable-row:not(:hover) .adf-datatable-hide-actions-without-hover{display:none}.adf-datatable-list .adf-datatable-cell--image{max-width:65px}.adf-datatable-list .adf-location-cell a{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-location-cell a:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-datatable-list .adf-is-selected{background:var(--adf-theme-primary-100)}.adf-datatable-list .adf-datatable-link{text-decoration:none;color:var(--adf-theme-foreground-text-color)}.adf-datatable-list .adf-datatable-link:hover{color:var(--theme-accent-500);text-decoration:underline}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover{text-decoration:none}.adf-datatable-list .adf-dynamic-column .adf-datatable-link:hover .adf-datatable-cell-value{text-decoration:underline}.adf-datatable-list .adf-ellipsis-cell{position:sticky;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell{max-width:calc(100% - .1px);overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell.adf-datatable-cell-header .adf-datatable-cell-value,.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell .adf-datatable-cell-value{overflow:hidden;text-overflow:ellipsis}.adf-datatable-list .adf-ellipsis-cell .adf-datatable-content-cell{overflow:unset;position:absolute}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-datatable-list .adf-ellipsis-cell .adf-cell-value{top:100%}}.adf-datatable-list .adf-ellipsis-cell>div:after{content:attr(title);overflow:hidden;height:0;display:block}.adf-datatable-list .adf-no-content-container.adf-datatable-cell{padding:0;border:none;width:100%;justify-content:center}.adf-datatable-list .adf-no-content-container.adf-datatable-cell>img{width:100%}.adf-datatable-list .adf-loading-content-container{padding:0;width:100%}.adf-datatable-list .adf-loading-content-container>img{width:100%}.adf-datatable-list .adf-no-permission__row:hover{cursor:default;background-color:inherit}.adf-datatable-list .adf-no-permission__cell.adf-datatable-cell{padding:0}.adf-datatable-list .adf-hidden{display:none}@media all and (max-width: 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell{display:none}}@media (max-device-width: 768px){.adf-datatable-list .adf-desktop-only.adf-ellipsis-cell{display:none}}.adf-datatable-cell-header{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;position:relative;display:flex;align-items:center;text-overflow:ellipsis;font-weight:700;line-height:24px;letter-spacing:0;min-height:var(--theme-display-3-font-size);font-size:var(--theme-caption-font-size);color:var(--adf-theme-foreground-text-color);box-sizing:border-box}.adf-datatable-cell-header.adf-sortable{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable__header--sorted-asc,.adf-datatable-cell-header .adf-datatable__header--sorted-desc{color:var(--adf-theme-foreground-text-color);padding-right:.25rem}.adf-datatable-cell-header .adf-datatable__header--sorted-asc:after,.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{font-family:Material Icons;font-weight:400;font-style:normal;font-size:var(--theme-headline-font-size);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;word-wrap:normal;font-feature-settings:\"liga\";font-size:var(--theme-subheading-2-font-size);content:\"\\e5d8\";left:5px;right:5px;position:relative;vertical-align:middle}.adf-datatable-cell-header .adf-datatable__header--sorted-desc:after{content:\"\\e5db\"}.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-asc:before,.adf-datatable-cell-header .adf-datatable-cell--fileSize.adf-datatable__header--sorted-desc:before{left:-3px;right:-3px}.adf-datatable-cell-header.adf-datatable-checkbox{display:flex;align-items:center}.adf-datatable-cell-header .adf-datatable-cell-header-content{display:flex;flex-grow:1;align-items:center;margin:0 2px;padding:0 8px}.adf-datatable-cell-header .adf-datatable-cell-header-content .adf-datatable-cell-header-drag-icon-placeholder{padding:0;margin:0}.adf-datatable-cell-header .adf-datatable-cell-header-content--hovered{background-color:var(--adf-theme-background-hover-color);border-radius:6px}.adf-datatable-cell-header .adf-datatable-cell-header-drag-icon{margin-left:auto;cursor:move;margin-right:-.5rem;padding-left:-.5rem}.adf-datatable-cell-header .adf-datatable-cell-value{padding-top:10px;padding-bottom:10px;line-height:24px;word-break:break-word}.adf-drop-header-cell-placeholder{display:flex;flex:1;background:var(--adf-theme-background-hover-color);border:dotted 1px rgba(0,0,0,.25);min-height:55px;transition:transform .25s cubic-bezier(0,0,.2,1)}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content{white-space:nowrap;overflow:hidden}.adf-datatable-cell-header.adf-ellipsis-cell .adf-datatable-cell-header-content--hovered .adf-datatable-cell-value{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview.adf-datatable-cell-header{border-radius:6px;background-color:var(--theme-background-color);transition:box-shadow .28s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px -1px #0003,0 4px 5px #00000024,0 1px 10px #0000001f}.adf-checkbox-sr-only .mat-checkbox-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.adf-sticky-header{border-top:0;height:100%}.adf-sticky-header .adf-datatable-header{display:block;margin-right:0;border-top:1px solid var(--adf-theme-foreground-text-color-007);border-bottom:1px solid var(--adf-theme-foreground-text-color-007)}.adf-sticky-header .adf-datatable-body{display:block;flex:1;overflow-y:scroll;margin-top:-1px}.adf-upload__dragging>div{border-top:1px dashed var(--theme-accent-color-a200);border-bottom:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:first-child{border-left:1px dashed var(--theme-accent-color-a200)}.adf-upload__dragging>div:last-child{border-right:1px dashed var(--theme-accent-color-a200)}.adf-datatable--empty{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center;height:inherit}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:hover,.adf-datatable--empty .adf-datatable-body[role=rowgroup] .adf-datatable-row:focus{background-color:unset;cursor:default}.adf-datatable--empty--header-visible .adf-datatable-header{border:1px solid var(--adf-theme-foreground-text-color-007)}.adf-datatable--empty--header-visible .adf-datatable-body{display:flex;flex-direction:column;flex:1;height:100%;overflow:hidden;min-height:0;justify-content:center;align-items:center}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row{height:100%;background-color:var(--adf-theme-background-card-color);border:none}.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:hover,.adf-datatable--empty--header-visible .adf-datatable-body .adf-datatable-row:focus{background-color:unset;cursor:default}@media screen and (max-width: 380px){.adf-datatable-header{max-height:50%}}\n"] }]
792
746
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.IterableDiffers }, { type: i1.MatIconRegistry }, { type: i2.DomSanitizer }]; }, propDecorators: { rowsList: [{
793
747
  type: ViewChildren,
794
748
  args: [DataTableRowComponent]
@@ -797,8 +751,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
797
751
  args: [DataColumnListComponent]
798
752
  }], data: [{
799
753
  type: Input
800
- }], display: [{
801
- type: Input
802
754
  }], rows: [{
803
755
  type: Input
804
756
  }], sorting: [{
@@ -863,4 +815,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
863
815
  type: HostListener,
864
816
  args: ['keyup', ['$event']]
865
817
  }] } });
866
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZGF0YXRhYmxlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2RhdGF0YWJsZS9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsNkRBQTZEO0FBRTdELE9BQU8sRUFHSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxlQUFlLEVBSWYsTUFBTSxFQUNOLFNBQVMsRUFJVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdwRCxPQUFPLEVBQUUsVUFBVSxFQUEwQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUV2RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JB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S0FBSztnQkFRTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixPQUFPO3NCQUROLEtBQUs7Z0JBS04sd0JBQXdCO3NCQUR2QixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixxQkFBcUI7c0JBRHBCLEtBQUs7Z0JBS04saUJBQWlCO3NCQURoQixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFTTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sYUFBYTtzQkFEWixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLTixZQUFZO3NCQURYLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxNQUFNO2dCQUtQLFdBQVc7c0JBRFYsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1Asa0JBQWtCO3NCQURqQixNQUFNO2dCQUtQLGdCQUFnQjtzQkFEZixNQUFNO2dCQUtQLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFLUCxtQkFBbUI7c0JBRGxCLE1BQU07Z0JBUVAsT0FBTztzQkFETixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFRTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBUU4sVUFBVTtzQkFEVCxLQUFLO2dCQU9OLGNBQWM7c0JBRGIsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBT0wsWUFBWTtzQkFEWCxLQUFLO2dCQWtDUCxTQUFTO3NCQURSLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyMyBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlICovXG5cbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0YUNvbHVtbkxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kYXRhLWNvbHVtbi9kYXRhLWNvbHVtbi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhQ29sdW1uIH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLWNvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhUm93RXZlbnQgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGEtcm93LWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IERhdGFSb3cgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGEtcm93Lm1vZGVsJztcbmltcG9ydCB7IERhdGFTb3J0aW5nIH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLXNvcnRpbmcubW9kZWwnO1xuaW1wb3J0IHsgRGF0YVRhYmxlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YXRhYmxlLWFkYXB0ZXInO1xuaW1wb3J0IHsgRGF0YVRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLXJvdy9kYXRhdGFibGUtcm93LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IE9iamVjdERhdGFSb3cgfSBmcm9tICcuLi8uLi9kYXRhL29iamVjdC1kYXRhcm93Lm1vZGVsJztcbmltcG9ydCB7IE9iamVjdERhdGFDb2x1bW4gfSBmcm9tICcuLi8uLi9kYXRhL29iamVjdC1kYXRhY29sdW1uLm1vZGVsJztcbmltcG9ydCB7IE9iamVjdERhdGFUYWJsZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhL29iamVjdC1kYXRhdGFibGUtYWRhcHRlcic7XG5pbXBvcnQgeyBEYXRhQ2VsbEV2ZW50IH0gZnJvbSAnLi4vZGF0YS1jZWxsLmV2ZW50JztcbmltcG9ydCB7IERhdGFSb3dBY3Rpb25FdmVudCB9IGZyb20gJy4uL2RhdGEtcm93LWFjdGlvbi5ldmVudCc7XG5pbXBvcnQgeyBidWZmZXIsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHNoYXJlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0Ryb3BMaXN0LCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBSZXNpemVFdmVudCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVzaXphYmxlL3R5cGVzJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuZXhwb3J0IGVudW0gRGlzcGxheU1vZGUge1xuICAgIExpc3QgPSAnbGlzdCcsXG4gICAgR2FsbGVyeSA9ICdnYWxsZXJ5J1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93XG5leHBvcnQgZW51bSBTaG93SGVhZGVyTW9kZSB7XG4gICAgTmV2ZXIgPSAnbmV2ZXInLFxuICAgIEFsd2F5cyA9ICdhbHdheXMnLFxuICAgIERhdGEgPSAnZGF0YSdcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtZGF0YXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdhZGYtZGF0YXRhYmxlJyB9XG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzLCBEb0NoZWNrLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xuICAgIHByaXZhdGUgc3RhdGljIE1JTklNVU1fQ09MVU1OX1NJWkUgPSAxMDA7XG5cbiAgICBAVmlld0NoaWxkcmVuKERhdGFUYWJsZVJvd0NvbXBvbmVudClcbiAgICByb3dzTGlzdDogUXVlcnlMaXN0PERhdGFUYWJsZVJvd0NvbXBvbmVudD47XG5cbiAgICBAQ29udGVudENoaWxkKERhdGFDb2x1bW5MaXN0Q29tcG9uZW50KVxuICAgIGNvbHVtbkxpc3Q6IERhdGFDb2x1bW5MaXN0Q29tcG9uZW50O1xuXG4gICAgLyoqIERhdGEgc291cmNlIGZvciB0aGUgdGFibGUgKi9cbiAgICBASW5wdXQoKVxuICAgIGRhdGE6IERhdGFUYWJsZUFkYXB0ZXI7XG5cbiAgICAvKiogU2VsZWN0cyB0aGUgZGlzcGxheSBtb2RlIG9mIHRoZSB0YWJsZS4gQ2FuIGJlIFwibGlzdFwiIG9yIFwiZ2FsbGVyeVwiLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheTogc3RyaW5nID0gRGlzcGxheU1vZGUuTGlzdDtcblxuICAgIC8qKiBUaGUgcm93cyB0aGF0IHRoZSBkYXRhdGFibGUgd2lsbCBzaG93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93czogYW55W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIERlZmluZSB0aGUgc29ydCBvcmRlciBvZiB0aGUgZGF0YXRhYmxlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIDpcbiAgICAgKiBbYGNyZWF0ZWRgLCBgZGVzY2BdLCBbYGNyZWF0ZWRgLCBgYXNjYF0sIFtgZHVlYCwgYGRlc2NgXSwgW2BkdWVgLCBgYXNjYF1cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNvcnRpbmc6IGFueVtdID0gW107XG5cbiAgICAvKiogVGhlIGNvbHVtbnMgdGhhdCB0aGUgZGF0YXRhYmxlIHdpbGwgc2hvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbHVtbnM6IGFueVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBSb3cgc2VsZWN0aW9uIG1vZGUuIENhbiBiZSBub25lLCBgc2luZ2xlYCBvciBgbXVsdGlwbGVgLiBGb3IgYG11bHRpcGxlYCBtb2RlLFxuICAgICAqIHlvdSBjYW4gdXNlIENtZCAobWFjT1MpIG9yIEN0cmwgKFdpbikgbW9kaWZpZXIga2V5IHRvIHRvZ2dsZSBzZWxlY3Rpb24gZm9yIG11bHRpcGxlIHJvd3MuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiBzdHJpbmcgPSAnc2luZ2xlJzsgLy8gbm9uZXxzaW5nbGV8bXVsdGlwbGVcblxuICAgIC8qKiBUb2dnbGVzIG11bHRpcGxlIHJvdyBzZWxlY3Rpb24sIHdoaWNoIHJlbmRlcnMgY2hlY2tib3hlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbXVsdGlzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBUb2dnbGVzIG1haW4gZGF0YSB0YWJsZSBhY3Rpb24gY29sdW1uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWFpblRhYmxlQWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKiBUb2dnbGVzIHRoZSBkYXRhIGFjdGlvbnMgY29sdW1uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIG1haW4gZGF0YXRhYmxlIGFjdGlvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dNYWluRGF0YXRhYmxlQWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFBvc2l0aW9uIG9mIHRoZSBhY3Rpb25zIGRyb3Bkb3duIG1lbnUuIENhbiBiZSBcImxlZnRcIiBvciBcInJpZ2h0XCIuICovXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25zUG9zaXRpb246IHN0cmluZyA9ICdyaWdodCc7IC8vIGxlZnR8cmlnaHRcblxuICAgIC8qKiBUb2dnbGVzIHdoZXRoZXIgdGhlIGFjdGlvbnMgZHJvcGRvd24gc2hvdWxkIG9ubHkgYmUgdmlzaWJsZSBpZiB0aGUgcm93IGlzIGhvdmVyZWQgb3ZlciBvciB0aGUgZHJvcGRvd24gbWVudSBpcyBvcGVuLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWN0aW9uc1Zpc2libGVPbkhvdmVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRmFsbGJhY2sgaW1hZ2UgZm9yIHJvd3Mgd2hlcmUgdGhlIHRodW1ibmFpbCBpcyBtaXNzaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZmFsbGJhY2tUaHVtYm5haWw6IHN0cmluZztcblxuICAgIC8qKiBUb2dnbGVzIGN1c3RvbSBjb250ZXh0IG1lbnUgZm9yIHRoZSBjb21wb25lbnQuICovXG4gICAgQElucHV0KClcbiAgICBjb250ZXh0TWVudTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIGlubGluZSBzdHlsZSB0byBhcHBseSB0byBldmVyeSByb3cuIFNlZVxuICAgICAqIFtOZ1N0eWxlXShodHRwczovL2FuZ3VsYXIuaW8vZG9jcy90cy9sYXRlc3QvYXBpL2NvbW1vbi9pbmRleC9OZ1N0eWxlLWRpcmVjdGl2ZS5odG1sKVxuICAgICAqIGRvY3MgZm9yIG1vcmUgZGV0YWlscyBhbmQgdXNhZ2UgZXhhbXBsZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dTdHlsZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAgIC8qKiBUaGUgQ1NTIGNsYXNzIHRvIGFwcGx5IHRvIGV2ZXJ5IHJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd1N0eWxlQ2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGhlYWRlci4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dIZWFkZXIgPSBTaG93SGVhZGVyTW9kZS5EYXRhO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHN0aWNreSBoZWFkZXIgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHN0aWNreUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgYSByb3cuICovXG4gICAgQE91dHB1dCgpXG4gICAgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFSb3dFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgZG91YmxlLWNsaWNrcyBhIHJvdy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByb3dEYmxDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVJvd0V2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgYmVmb3JlIHRoZSBjb250ZXh0IG1lbnUgaXMgZGlzcGxheWVkIGZvciBhIHJvdy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzaG93Um93Q29udGV4dE1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFDZWxsRXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCBiZWZvcmUgdGhlIGFjdGlvbnMgbWVudSBpcyBkaXNwbGF5ZWQgZm9yIGEgcm93LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNob3dSb3dBY3Rpb25zTWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNlbGxFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgZXhlY3V0ZXMgYSByb3cgYWN0aW9uLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGV4ZWN1dGVSb3dBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFSb3dBY3Rpb25FdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIGNvbHVtbiBvcmRlciBpcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNvbHVtbk9yZGVyQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNvbHVtbltdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgY29sdW1uIHdpZHRoIGlzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgY29sdW1uc1dpZHRoQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNvbHVtbltdPigpO1xuXG4gICAgLyoqXG4gICAgICogRmxhZyB0aGF0IGluZGljYXRlcyBpZiB0aGUgZGF0YXRhYmxlIGlzIGluIGxvYWRpbmcgc3RhdGUgYW5kIG5lZWRzIHRvIHNob3cgdGhlXG4gICAgICogbG9hZGluZyB0ZW1wbGF0ZSAoc2VlIHRoZSBkb2NzIHRvIGxlYXJuIGhvdyB0byBjb25maWd1cmUgYSBsb2FkaW5nIHRlbXBsYXRlKS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBGbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBkYXRhdGFibGUgc2hvdWxkIHNob3cgdGhlIFwibm8gcGVybWlzc2lvblwiIHRlbXBsYXRlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9QZXJtaXNzaW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTaG91bGQgdGhlIGl0ZW1zIGZvciB0aGUgcm93IGFjdGlvbnMgbWVudSBiZSBjYWNoZWQgZm9yIHJldXNlIGFmdGVyIHRoZXkgYXJlIGxvYWRlZFxuICAgICAqIHRoZSBmaXJzdCB0aW1lP1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93TWVudUNhY2hlRW5hYmxlZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gcmVzb2x2ZXIgZnVuY3Rpb24gd2hpY2ggaXMgdXNlZCB0byBwYXJzZSBkeW5hbWljIGNvbHVtbiBvYmplY3RzXG4gICAgICogc2VlIHRoZSBkb2NzIHRvIGxlYXJuIGhvdyB0byBjb25maWd1cmUgYSByZXNvbHZlckZuLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVzb2x2ZXJGbjogKHJvdzogRGF0YVJvdywgY29sOiBEYXRhQ29sdW1uKSA9PiBhbnkgPSBudWxsO1xuXG4gICAgLyoqXG4gICAgICogRmxhZyB0aGF0IGluZGljYXRlIGlmIHRoZSBkYXRhdGFibGUgYWxsb3cgdGhlIHVzZSBmYWNldCB3aWRnZXQgc2VhcmNoIGZvciBmaWx0ZXJpbmcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhbGxvd0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRmxhZyB0aGF0IGluZGljYXRlcyBpZiB0aGUgZGF0YXRhYmxlIGFsbG93cyBjb2x1bW4gcmVzaXppbmcuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc1Jlc2l6aW5nRW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogRmxhZyB0aGF0IGluZGljYXRlcyBpZiB0aGUgZGF0YXRhYmxlIHNob3VsZCBiZSBibHVycmVkIHdoZW4gcmVzaXppbmcuXG4gICAgICovXG4gICAgIEBJbnB1dCgpXG4gICAgIGJsdXJPblJlc2l6ZSA9IHRydWU7XG5cbiAgICBoZWFkZXJGaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBub0NvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBub1Blcm1pc3Npb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBsb2FkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbWFpbkFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgaXNTZWxlY3RBbGxJbmRldGVybWluYXRlOiBib29sZWFuID0gZmFsc2U7XG4gICAgaXNTZWxlY3RBbGxDaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gICAgc2VsZWN0aW9uID0gbmV3IEFycmF5PERhdGFSb3c+KCk7XG4gICAgc2VsZWN0ZWRSb3dJZDogc3RyaW5nID0gJyc7XG5cbiAgICBpc0RyYWdnaW5nSGVhZGVyQ29sdW1uID0gZmFsc2U7XG4gICAgaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID0gLTE7XG4gICAgcmVzaXppbmdDb2x1bW5JbmRleCA9IC0xO1xuXG4gICAgLyoqIFRoaXMgYXJyYXkgb2YgZmFrZSByb3dzIGZpeCB0aGUgZmxleCBsYXlvdXQgZm9yIHRoZSBnYWxsZXJ5IHZpZXcgKi9cbiAgICBmYWtlUm93cyA9IFtdO1xuXG4gICAgcHJpdmF0ZSBrZXlNYW5hZ2VyOiBGb2N1c0tleU1hbmFnZXI8RGF0YVRhYmxlUm93Q29tcG9uZW50PjtcbiAgICBwcml2YXRlIGNsaWNrT2JzZXJ2ZXI6IE9ic2VydmVyPERhdGFSb3dFdmVudD47XG4gICAgcHJpdmF0ZSBjbGljayQ6IE9ic2VydmFibGU8RGF0YVJvd0V2ZW50PjtcblxuICAgIHByaXZhdGUgZGlmZmVyOiBhbnk7XG4gICAgcHJpdmF0ZSByb3dNZW51Q2FjaGU6IGFueSA9IHt9O1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICAgIHByaXZhdGUgc2luZ2xlQ2xpY2tTdHJlYW1TdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIG11bHRpQ2xpY2tTdHJlYW1TdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGRhdGFSb3dzQ2hhbmdlZDogU3Vic2NyaXB0aW9uO1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmtleU1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycywgcHJpdmF0ZSBtYXRJY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSwgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xuICAgICAgICBpZiAoZGlmZmVycykge1xuICAgICAgICAgICAgdGhpcy5kaWZmZXIgPSBkaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xpY2skID0gbmV3IE9ic2VydmFibGU8RGF0YVJvd0V2ZW50Pigob2JzZXJ2ZXIpID0+ICh0aGlzLmNsaWNrT2JzZXJ2ZXIgPSBvYnNlcnZlcikpLnBpcGUoc2hhcmUoKSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEcmFnSGFuZGxlSWNvbigpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5MaXN0LmNvbHVtbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlU2NoZW1hKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhdGFibGVMYXlvdXRGaXgoKTtcbiAgICAgICAgdGhpcy5zZXRUYWJsZVNjaGVtYSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLnJvd3NMaXN0KS53aXRoV3JhcCgpLnNraXBQcmVkaWNhdGUoKGl0ZW0pID0+IGl0ZW0uZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5pbml0QW5kU3Vic2NyaWJlQ2xpY2tTdHJlYW0oKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dJZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRSb3dBc0NvbnRleHRTb3VyY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFDaGFuZ2VzID0gY2hhbmdlc1snZGF0YSddO1xuICAgICAgICBjb25zdCByb3dDaGFuZ2VzID0gY2hhbmdlc1sncm93cyddO1xuICAgICAgICBjb25zdCBjb2x1bW5DaGFuZ2VzID0gY2hhbmdlc1snY29sdW1ucyddO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKGRhdGFDaGFuZ2VzKSB8fCB0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKHJvd0NoYW5nZXMpIHx8IHRoaXMuaXNQcm9wZXJ0eUNoYW5nZWQoY29sdW1uQ2hhbmdlcykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGFibGVFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocm93Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlUm93cyhjaGFuZ2VzWydyb3dzJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVNvcnRpbmcodGhpcy5zb3J0aW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlQ29sdW1ucyhjaGFuZ2VzWydjb2x1bW5zJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGlvbk1vZGUgJiYgIWNoYW5nZXMuc2VsZWN0aW9uTW9kZS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KCdyb3ctdW5zZWxlY3QnLCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKGNoYW5nZXNbJ3NvcnRpbmcnXSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTb3J0aW5nKGNoYW5nZXNbJ3NvcnRpbmcnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNQcm9wZXJ0eUNoYW5nZWQoY2hhbmdlc1snZGlzcGxheSddKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhdGFibGVMYXlvdXRGaXgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzQ29sdW1uU29ydEFjdGl2ZShjb2x1bW46IERhdGFDb2x1bW4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFjb2x1bW4gfHwgIXRoaXMuZGF0YS5nZXRTb3J0aW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sdW1uLmtleSA9PT0gdGhpcy5kYXRhLmdldFNvcnRpbmcoKS5rZXk7XG4gICAgfVxuXG4gICAgb25Ecm9wSGVhZGVyQ29sdW1uKGV2ZW50OiBDZGtEcmFnRHJvcDx1bmtub3duPik6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGxDb2x1bW5zID0gdGhpcy5kYXRhLmdldENvbHVtbnMoKTtcbiAgICAgICAgY29uc3Qgc2hvd25Db2x1bW5zID0gYWxsQ29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4gIWNvbHVtbi5pc0hpZGRlbik7XG4gICAgICAgIGNvbnN0IGhpZGRlbkNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uaXNIaWRkZW4pO1xuXG4gICAgICAgIG1vdmVJdGVtSW5BcnJheShzaG93bkNvbHVtbnMsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCk7XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnNXaXRoTmV3T3JkZXIgPSBbLi4uc2hvd25Db2x1bW5zLCAuLi5oaWRkZW5Db2x1bW5zXTtcblxuICAgICAgICB0aGlzLnNldFRhYmxlQ29sdW1ucyhhbGxDb2x1bW5zV2l0aE5ld09yZGVyKTtcbiAgICAgICAgdGhpcy5jb2x1bW5PcmRlckNoYW5nZWQuZW1pdChhbGxDb2x1bW5zV2l0aE5ld09yZGVyKTtcblxuICAgICAgICB0aGlzLmlzRHJhZ2dpbmdIZWFkZXJDb2x1bW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmRpZmZlci5kaWZmKHRoaXMucm93cyk7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlUm93cyh0aGlzLnJvd3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNQcm9wZXJ0eUNoYW5nZWQocHJvcGVydHk6IFNpbXBsZUNoYW5nZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISFwcm9wZXJ0eT8uY3VycmVudFZhbHVlO1xuICAgIH1cblxuICAgIGNvbnZlcnRUb1Jvd3NEYXRhKHJvd3M6IGFueVtdKTogT2JqZWN0RGF0YVJvd1tdIHtcbiAgICAgICAgcmV0dXJuIHJvd3MubWFwKChyb3cpID0+IG5ldyBPYmplY3REYXRhUm93KHJvdywgcm93LmlzU2VsZWN0ZWQpKTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9Db2x1bW5zRGF0YShjb2x1bW5zOiBhbnlbXSk6IE9iamVjdERhdGFDb2x1bW5bXSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiBuZXcgT2JqZWN0RGF0YUNvbHVtbihjb2x1bW4pKTtcbiAgICB9XG5cbiAgICBjb252ZXJ0VG9EYXRhU29ydGluZyhzb3J0aW5nOiBhbnlbXSk6IERhdGFTb3J0aW5nIHwgbnVsbCB7XG4gICAgICAgIGlmIChzb3J0aW5nICYmIHNvcnRpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRhU29ydGluZyhzb3J0aW5nWzBdLCBzb3J0aW5nWzFdLCBzb3J0aW5nWzJdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRBbmRTdWJzY3JpYmVDbGlja1N0cmVhbSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUNsaWNrU3RyZWFtKCk7XG4gICAgICAgIGNvbnN0IHNpbmdsZUNsaWNrU3RyZWFtID0gdGhpcy5jbGljayQucGlwZShcbiAgICAgICAgICAgIGJ1ZmZlcih0aGlzLmNsaWNrJC5waXBlKGRlYm91bmNlVGltZSgyNTApKSksXG4gICAgICAgICAgICBtYXAoKGxpc3QpID0+IGxpc3QpLFxuICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiB4Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLnNpbmdsZUNsaWNrU3RyZWFtU3ViID0gc2luZ2xlQ2xpY2tTdHJlYW0uc3Vic2NyaWJlKChkYXRhUm93RXZlbnRzOiBEYXRhUm93RXZlbnRbXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQ6IERhdGFSb3dFdmVudCA9IGRhdGFSb3dFdmVudHNbMF07XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJvd1NlbGVjdGlvbihldmVudC52YWx1ZSwgZXZlbnQuZXZlbnQgYXMgYW55KTtcbiAgICAgICAgICAgIHRoaXMucm93Q2xpY2suZW1pdChldmVudCk7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3Jvdy1jbGljaycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbXVsdGlDbGlja1N0cmVhbSA9IHRoaXMuY2xpY2skLnBpcGUoXG4gICAgICAgICAgICBidWZmZXIodGhpcy5jbGljayQucGlwZShkZWJvdW5jZVRpbWUoMjUwKSkpLFxuICAgICAgICAgICAgbWFwKChsaXN0KSA9PiBsaXN0KSxcbiAgICAgICAgICAgIGZpbHRlcigoeCkgPT4geC5sZW5ndGggPj0gMilcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm11bHRpQ2xpY2tTdHJlYW1TdWIgPSBtdWx0aUNsaWNrU3RyZWFtLnN1YnNjcmliZSgoZGF0YVJvd0V2ZW50czogRGF0YVJvd0V2ZW50W10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50OiBEYXRhUm93RXZlbnQgPSBkYXRhUm93RXZlbnRzWzBdO1xuICAgICAgICAgICAgdGhpcy5yb3dEYmxDbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgncm93LWRibGNsaWNrJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlQ2xpY2tTdHJlYW0oKSB7XG4gICAgICAgIGlmICh0aGlzLnNpbmdsZUNsaWNrU3RyZWFtU3ViKSB7XG4gICAgICAgICAgICB0aGlzLnNpbmdsZUNsaWNrU3RyZWFtU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnNpbmdsZUNsaWNrU3RyZWFtU3ViID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tdWx0aUNsaWNrU3RyZWFtU3ViKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpQ2xpY2tTdHJlYW1TdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMubXVsdGlDbGlja1N0cmVhbVN1YiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRUYWJsZSgpIHtcbiAgICAgICAgY29uc3QgcnVudGltZUNvbHVtbnMgPSB0aGlzLmdldFJ1bnRpbWVDb2x1bW5zKCk7XG4gICAgICAgIHRoaXMuZGF0YSA9IG5ldyBPYmplY3REYXRhVGFibGVBZGFwdGVyKHRoaXMucm93cywgcnVudGltZUNvbHVtbnMpO1xuXG4gICAgICAgIHRoaXMuc2V0VGFibGVTb3J0aW5nKHRoaXMuc29ydGluZyk7XG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5yb3dNZW51Q2FjaGUgPSB7fTtcbiAgICB9XG5cbiAgICBpc1RhYmxlRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmRhdGEgPT09IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUYWJsZVJvd3Mocm93czogYW55W10pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgY29uc3Qgcm93c0RhdGEgPSB0aGlzLmNvbnZlcnRUb1Jvd3NEYXRhKHJvd3MpO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFJvd3Mocm93c0RhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUYWJsZUNvbHVtbnMoY29sdW1uczogYW55W10pIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgY29uc3QgY29sdW1uc0RhdGEgPSB0aGlzLmNvbnZlcnRUb0NvbHVtbnNEYXRhKGNvbHVtbnMpO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnMoY29sdW1uc0RhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSdW50aW1lQ29sdW1ucygpOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiBbLi4uKHRoaXMuY29sdW1ucyB8fCBbXSksIC4uLnRoaXMuZ2V0U2NoZW1hRnJvbUh0bWwoKV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUYWJsZVNjaGVtYSgpIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ2V0UnVudGltZUNvbHVtbnMoKTtcblxuICAgICAgICBpZiAodGhpcy5kYXRhICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldENvbHVtbnMoY29sdW1ucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRhYmxlU29ydGluZyhzb3J0aW5nOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0U29ydGluZyh0aGlzLmNvbnZlcnRUb0RhdGFTb3J0aW5nKHNvcnRpbmcpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTY2hlbWFGcm9tSHRtbCgpOiBhbnkge1xuICAgICAgICBsZXQgc2NoZW1hID0gW107XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbkxpc3Q/LmNvbHVtbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNjaGVtYSA9IHRoaXMuY29sdW1uTGlzdC5jb2x1bW5zLm1hcCgoYykgPT4gYyBhcyBEYXRhQ29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NoZW1hO1xuICAgIH1cblxuICAgIG9uUm93Q2xpY2socm93OiBEYXRhUm93LCBtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmIChtb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMuZGF0YS5nZXRSb3dzKCkuaW5kZXhPZihyb3cpICsgKHRoaXMuaXNIZWFkZXJMaXN0VmlzaWJsZSgpID8gMSA6IDApO1xuICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ocm93SW5kZXgpO1xuXG4gICAgICAgICAgICBjb25zdCBkYXRhUm93RXZlbnQgPSBuZXcgRGF0YVJvd0V2ZW50KHJvdywgbW91c2VFdmVudCwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNsaWNrT2JzZXJ2ZXIubmV4dChkYXRhUm93RXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25FbnRlcktleVByZXNzZWQocm93OiBEYXRhUm93LCBlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93U2VsZWN0aW9uKHJvdywgZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzSGVhZGVyTGlzdFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSGVhZGVyVmlzaWJsZSgpICYmIHRoaXMuZGlzcGxheSA9PT0gRGlzcGxheU1vZGUuTGlzdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVJvd1NlbGVjdGlvbihyb3c6IERhdGFSb3csIGU6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdy5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQoJ3Jvdy11bnNlbGVjdCcsIG51bGwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQoJ3Jvdy1zZWxlY3QnLCByb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aVNlbGVjdGlvbk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVyID0gZSAmJiAoZS5tZXRhS2V5IHx8IGUuY3RybEtleSk7XG4gICAgICAgICAgICAgICAgbGV0IG5ld1ZhbHVlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSAhcm93LmlzU2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBtb2RpZmllciA/ICFyb3cuaXNTZWxlY3RlZCA6IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRvbUV2ZW50TmFtZSA9IG5ld1ZhbHVlID8gJ3Jvdy1zZWxlY3QnIDogJ3Jvdy11bnNlbGVjdCc7XG5cbiAgICAgICAgICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQoZG9tRXZlbnROYW1lLCByb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLmRhdGEuZ2V0Um93cygpO1xuICAgICAgICAgICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcm93cy5mb3JFYWNoKChyKSA9PiAoci5pc1NlbGVjdGVkID0gZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBvblJvd0RibENsaWNrKHJvdzogRGF0YVJvdywgZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YVJvd0V2ZW50ID0gbmV3IERhdGFSb3dFdmVudChyb3csIGV2ZW50LCB0aGlzKTtcbiAgICAgICAgdGhpcy5jbGlja09ic2VydmVyLm5leHQoZGF0YVJvd0V2ZW50KTtcbiAgICB9XG5cbiAgICBvblJvd0VudGVyS2V5RG93bihyb3c6IERhdGFSb3csIGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5Ym9hcmROYXZpZ2F0ZShyb3csIGtleWJvYXJkRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Sb3dLZXlVcChyb3c6IERhdGFSb3csIGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3Jvdy1rZXl1cCcsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICBrZXlib2FyZEV2ZW50LFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpc1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChldmVudCk7XG5cbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIGtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25LZXlib2FyZE5hdmlnYXRlKHJvdzogRGF0YVJvdywga2V5Ym9hcmRFdmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoa2V5Ym9hcmRFdmVudCkge1xuICAgICAgICAgICAga2V5Ym9hcmRFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRGF0YVJvd0V2ZW50KHJvdywga2V5Ym9hcmRFdmVudCwgdGhpcyk7XG5cbiAgICAgICAgdGhpcy5yb3dEYmxDbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgncm93LWRibGNsaWNrJywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogZXZlbnQsXG4gICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVmFsaWRDbGlja0V2ZW50KGV2ZW50OiBFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuZXZlbnRQaGFzZSA9PT0gZXZlbnQuQlVCQkxJTkdfUEhBU0U7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gZXZlbnQuZXZlbnRQaGFzZSA9PT0gZXZlbnQuQVRfVEFSR0VUO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIG9uQ29sdW1uSGVhZGVyQ2xpY2soY29sdW1uOiBEYXRhQ29sdW1uLCBldmVudDogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWYWxpZENsaWNrRXZlbnQoZXZlbnQpICYmIGNvbHVtbiAmJiBjb2x1bW4uc29ydGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmRhdGEuZ2V0U29ydGluZygpO1xuICAgICAgICAgICAgbGV0IG5ld0RpcmVjdGlvbiA9ICdhc2MnO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgJiYgY29sdW1uLmtleSA9PT0gY3VycmVudC5rZXkpIHtcbiAgICAgICAgICAgICAgICBuZXdEaXJlY3Rpb24gPSBjdXJyZW50LmRpcmVjdGlvbj8udG9Mb3dlckNhc2UoKSA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc29ydGluZyA9IFtjb2x1bW4ua2V5LCBuZXdEaXJlY3Rpb24sIHsgbnVtZXJpYzogdHJ1ZSB9XTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRTb3J0aW5nKG5ldyBEYXRhU29ydGluZyhjb2x1bW4ua2V5LCBuZXdEaXJlY3Rpb24sIHsgbnVtZXJpYzogdHJ1ZSB9KSk7XG4gICAgICAgICAgICB0aGlzLmVtaXRTb3J0aW5nQ2hhbmdlZEV2ZW50KGNvbHVtbi5rZXksIGNvbHVtbi5zb3J0aW5nS2V5LCBuZXdEaXJlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oMCk7XG4gICAgfVxuXG4gICAgb25TZWxlY3RBbGxDbGljayhtYXRDaGVja2JveENoYW5nZTogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSBtYXRDaGVja2JveENoYW5nZS5jaGVja2VkO1xuICAgICAgICB0aGlzLmlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhLmdldFJvd3MoKTtcbiAgICAgICAgICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3dzW2ldLCBtYXRDaGVja2JveENoYW5nZS5jaGVja2VkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRvbUV2ZW50TmFtZSA9IG1hdENoZWNrYm94Q2hhbmdlLmNoZWNrZWQgPyAncm93LXNlbGVjdCcgOiAncm93LXVuc2VsZWN0JztcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuc2VsZWN0aW9uLmxlbmd0aCA+IDAgPyB0aGlzLnNlbGVjdGlvblswXSA6IG51bGw7XG5cbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KGRvbUV2ZW50TmFtZSwgcm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2hlY2tib3hDaGFuZ2Uocm93OiBEYXRhUm93LCBldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBldmVudC5jaGVja2VkO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgbmV3VmFsdWUpO1xuXG4gICAgICAgIGNvbnN0IGRvbUV2ZW50TmFtZSA9IG5ld1ZhbHVlID8gJ3Jvdy1zZWxlY3QnIDogJ3Jvdy11bnNlbGVjdCc7XG4gICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KGRvbUV2ZW50TmFtZSwgcm93KTtcbiAgICAgICAgdGhpcy5jaGVja1NlbGVjdEFsbENoZWNrYm94U3RhdGUoKTtcbiAgICB9XG5cbiAgICBjaGVja1NlbGVjdEFsbENoZWNrYm94U3RhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICBsZXQgbnVtYmVyT2ZTZWxlY3RlZFJvd3M6IG51bWJlciA9IDA7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhLmdldFJvd3MoKTtcbiAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJvdy5pc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlck9mU2VsZWN0ZWRSb3dzKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobnVtYmVyT2ZTZWxlY3RlZFJvd3MgPT09IHJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlck9mU2VsZWN0ZWRSb3dzID4gMCAmJiBudW1iZXJPZlNlbGVjdGVkUm93cyA8IHJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW1hZ2VMb2FkaW5nRXJyb3IoZXZlbnQ6IEV2ZW50LCByb3c6IERhdGFSb3cpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIGFueTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZmFsbGJhY2tUaHVtYm5haWwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNyYyA9IHRoaXMuZmFsbGJhY2tUaHVtYm5haWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc3JjID0gcm93LmltYWdlRXJyb3JSZXNvbHZlcihldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0ljb25WYWx1ZShyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAocm93ICYmIGNvbCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByb3cuZ2V0VmFsdWUoY29sLmtleSk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU/LnN0YXJ0c1dpdGgoJ21hdGVyaWFsLWljb25zOi8vJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGFzSWNvblZhbHVlKHJvdzogRGF0YVJvdywgY29sOiBEYXRhQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJY29uVmFsdWUocm93LCBjb2wpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJvdy5nZXRWYWx1ZShjb2wua2V5KSB8fCAnJztcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKCdtYXRlcmlhbC1pY29uczovLycsICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpY29uQWx0VGV4dEtleSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID8gJ0lDT05TLicgKyB2YWx1ZS5zdWJzdHJpbmcodmFsdWUubGFzdEluZGV4T2YoJy8nKSArIDEpLnJlcGxhY2UoL1xcLlthLXpdKy8sICcnKSA6ICcnO1xuICAgIH1cblxuICAgIGlzQ29sdW1uU29ydGVkKGNvbDogRGF0YUNvbHVtbiwgZGlyZWN0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGNvbCAmJiBkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRpbmcgPSB0aGlzLmRhdGEuZ2V0U29ydGluZygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNTb3J0aW5nRXF1YWwoY29sLCBkaXJlY3Rpb24sIHNvcnRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXRDb250ZXh0TWVudUFjdGlvbnMocm93OiBEYXRhUm93LCBjb2w6IERhdGFDb2x1bW4pOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IERhdGFDZWxsRXZlbnQocm93LCBjb2wsIFtdKTtcbiAgICAgICAgdGhpcy5zaG93Um93Q29udGV4dE1lbnUuZW1pdChldmVudCk7XG4gICAgICAgIHJldHVybiBldmVudC52YWx1ZS5hY3Rpb25zO1xuICAgIH1cblxuICAgIGdldFJvd0FjdGlvbnMocm93OiBEYXRhUm93LCBjb2w/OiBEYXRhQ29sdW1uKTogYW55W10ge1xuICAgICAgICBjb25zdCBpZCA9IHJvdy5nZXRWYWx1ZSgnaWQnKTtcblxuICAgICAgICBpZiAoIXRoaXMucm93TWVudUNhY2hlW2lkXSkge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRGF0YUNlbGxFdmVudChyb3csIGNvbCwgW10pO1xuICAgICAgICAgICAgdGhpcy5zaG93Um93QWN0aW9uc01lbnUuZW1pdChldmVudCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucm93TWVudUNhY2hlRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZpc2libGVBY3Rpb25zKGV2ZW50LnZhbHVlLmFjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb3dNZW51Q2FjaGVbaWRdID0gZXZlbnQudmFsdWUuYWN0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFZpc2libGVBY3Rpb25zKHRoaXMucm93TWVudUNhY2hlW2lkXSk7XG4gICAgfVxuXG4gICAgZ2V0VmlzaWJsZUFjdGlvbnMoYWN0aW9uczogYW55W10pOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiBhY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24udmlzaWJsZSB8fCBhY3Rpb24udmlzaWJsZSA9PT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBvbkV4ZWN1dGVSb3dBY3Rpb24ocm93OiBEYXRhUm93LCBhY3Rpb246IGFueSkge1xuICAgICAgICBpZiAoYWN0aW9uLmRpc2FibGVkIHx8IGFjdGlvbi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGVSb3dBY3Rpb24uZW1pdChuZXcgRGF0YVJvd0FjdGlvbkV2ZW50KHJvdywgYWN0aW9uKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRIaWRlQWN0aW9uc1dpdGhvdXRIb3ZlckNsYXNzKGFjdGlvbnNNZW51VHJpZ2dlcjogTWF0TWVudVRyaWdnZXIpIHtcbiAgICAgICAgcmV0dXJuIHsgJ2FkZi1kYXRhdGFibGUtaGlkZS1hY3Rpb25zLXdpdGhvdXQtaG92ZXInOiB0aGlzLmFjdGlvbnNWaXNpYmxlT25Ib3ZlciAmJiAhYWN0aW9uc01lbnVUcmlnZ2VyLm1lbnVPcGVuIH07XG4gICAgfVxuXG4gICAgcm93QWxsb3dzRHJvcChyb3c6IERhdGFSb3cpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHJvdy5pc0Ryb3BUYXJnZXQgPT09IHRydWU7XG4gICAgfVxuXG4gICAgaGFzU2VsZWN0aW9uTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkgfHwgdGhpcy5pc011bHRpU2VsZWN0aW9uTW9kZSgpO1xuICAgIH1cblxuICAgIGlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSAmJiB0aGlzLnNlbGVjdGlvbk1vZGUudG9Mb3dlckNhc2UoKSA9PT0gJ3NpbmdsZSc7XG4gICAgfVxuXG4gICAgaXNNdWx0aVNlbGVjdGlvbk1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlLnRvTG93ZXJDYXNlKCkgPT09ICdtdWx0aXBsZSc7XG4gICAgfVxuXG4gICAgZ2V0Um93U3R5bGUocm93OiBEYXRhUm93KTogc3RyaW5nIHtcbiAgICAgICAgcm93LmNzc0NsYXNzID0gcm93LmNzc0NsYXNzID8gcm93LmNzc0NsYXNzIDogJyc7XG4gICAgICAgIHRoaXMucm93U3R5bGVDbGFzcyA9IHRoaXMucm93U3R5bGVDbGFzcyA/IHRoaXMucm93U3R5bGVDbGFzcyA6ICcnO1xuICAgICAgICBjb25zdCBjb250ZXh0TWVudVNvdXJjZUNsYXNzID0gcm93LmlzQ29udGV4dE1lbnVTb3VyY2UgPyAnYWRmLWNvbnRleHQtbWVudS1zb3VyY2UnIDogJyc7XG4gICAgICAgIHJldHVybiBgJHtyb3cuY3NzQ2xhc3N9ICR7dGhpcy5yb3dTdHlsZUNsYXNzfSAke2NvbnRleHRNZW51U291cmNlQ2xhc3N9YDtcbiAgICB9XG5cbiAgICBtYXJrUm93QXNDb250ZXh0TWVudVNvdXJjZShzZWxlY3RlZFJvdzogRGF0YVJvdyk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93SWQgPSBzZWxlY3RlZFJvdy5pZCA/IHNlbGVjdGVkUm93LmlkIDogJyc7XG4gICAgICAgIHRoaXMuZGF0YS5nZXRSb3dzKCkuZm9yRWFjaCgocm93KSA9PiAocm93LmlzQ29udGV4dE1lbnVTb3VyY2UgPSBmYWxzZSkpO1xuICAgICAgICBzZWxlY3RlZFJvdy5pc0NvbnRleHRNZW51U291cmNlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFJvd0FzQ29udGV4dFNvdXJjZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3cgPSB0aGlzLmRhdGEuZ2V0Um93cygpLmZpbmQoKHJvdykgPT4gdGhpcy5zZWxlY3RlZFJvd0lkID09PSByb3cuaWQpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRSb3cpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93LmlzQ29udGV4dE1lbnVTb3VyY2UgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0U29ydGluZ0tleSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5nZXRTb3J0aW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0U29ydGluZygpLmtleTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHNlbGVjdFJvdyhyb3c6IERhdGFSb3csIHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIHJvdy5pc1NlbGVjdGVkID0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBpZHggPSByb3c/LmlkID8gdGhpcy5maW5kU2VsZWN0aW9uQnlJZChyb3cuaWQpIDogdGhpcy5zZWxlY3Rpb24uaW5kZXhPZihyb3cpO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbmRTZWxlY3Rpb25CeUlkKGlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uZmluZEluZGV4KChzZWxlY3Rpb24pID0+IHNlbGVjdGlvbj8uaWQgPT09IGlkKTtcbiAgICB9XG5cbiAgICBnZXRDZWxsVG9vbHRpcChyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIGlmIChyb3cgJiYgY29sICYmIGNvbC5mb3JtYXRUb29sdGlwKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZyA9IGNvbC5mb3JtYXRUb29sdGlwKHJvdywgY29sKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFNvcnRhYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRDb2x1bW5zKCkuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5zb3J0YWJsZSA9PT0gdHJ1ZSk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRSb3dzKCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGlzSGVhZGVyVmlzaWJsZSgpIHtcbiAgICAgICAgbGV0IGhlYWRlclZpc2liaWxpdHk6IGJvb2xlYW47XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0hlYWRlciA9PT0gU2hvd0hlYWRlck1vZGUuRGF0YSkge1xuICAgICAgICAgICAgaGVhZGVyVmlzaWJpbGl0eSA9ICF0aGlzLmxvYWRpbmcgJiYgIXRoaXMubm9QZXJtaXNzaW9uICYmICF0aGlzLmlzRW1wdHkoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dIZWFkZXIgPT09IFNob3dIZWFkZXJNb2RlLkFsd2F5cykge1xuICAgICAgICAgICAgaGVhZGVyVmlzaWJpbGl0eSA9ICF0aGlzLmxvYWRpbmcgJiYgIXRoaXMubm9QZXJtaXNzaW9uO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd0hlYWRlciA9PT0gU2hvd0hlYWRlck1vZGUuTmV2ZXIpIHtcbiAgICAgICAgICAgIGhlYWRlclZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGVhZGVyVmlzaWJpbGl0eTtcbiAgICB9XG5cbiAgICBpc1N0aWNreUhlYWRlckVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0aWNreUhlYWRlciAmJiB0aGlzLmlzSGVhZGVyVmlzaWJsZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5hbWU6IHN0cmluZywgcm93OiBEYXRhUm93KSB7XG4gICAgICAgIGNvbnN0IGRvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KG5hbWUsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuc2VsZWN0aW9uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0U29ydGluZ0NoYW5nZWRFdmVudChrZXk6IHN0cmluZywgc29ydGluZ0tleTogc3RyaW5nLCBkaXJlY3Rpb246IHN0cmluZykge1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnc29ydGluZy1jaGFuZ2VkJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHNvcnRpbmdLZXksXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVDbGlja1N0cmVhbSgpO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5kYXRhUm93c0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVJvd3NDaGFuZ2VkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmRhdGFSb3dzQ2hhbmdlZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRhdGF0YWJsZUxheW91dEZpeCgpIHtcbiAgICAgICAgY29uc3QgbWF4R2FsbGVyeVJvd3MgPSAyNTtcblxuICAgICAgICBpZiAodGhpcy5kaXNwbGF5ID09PSAnZ2FsbGVyeScpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4R2FsbGVyeVJvd3M7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFrZVJvd3MucHVzaCgnJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZha2VSb3dzID0gW107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXROYW1lQ29sdW1uVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Q29sdW1ucygpLmZpbmQoKGVsOiBhbnkpID0+IGVsLmtleS5pbmNsdWRlcygnbmFtZScpKTtcbiAgICB9XG5cbiAgICBnZXRBdXRvbWF0aW9uVmFsdWUocm93OiBEYXRhUm93KTogYW55IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZUNvbHVtblZhbHVlKCk7XG4gICAgICAgIHJldHVybiBuYW1lID8gcm93LmdldFZhbHVlKG5hbWUua2V5KSA6ICcnO1xuICAgIH1cblxuICAgIGdldEFyaWFTb3J0KGNvbHVtbjogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uKSkge1xuICAgICAgICAgICAgcmV0dXJuICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9OT05FJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29sdW1uU29ydGVkKGNvbHVtbiwgJ2FzYycpID8gJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TT1JUX0FTQ0VORElORycgOiAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlNPUlRfREVTQ0VORElORyc7XG4gICAgfVxuXG4gICAgZ2V0U29ydExpdmVBbm5vdW5jZW1lbnQoY29sdW1uOiBEYXRhQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29sdW1uU29ydEFjdGl2ZShjb2x1bW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TT1JUX0RFRkFVTFQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29sdW1uU29ydGVkKGNvbHVtbiwgJ2FzYycpXG4gICAgICAgICAgICA/ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9BU0NFTkRJTkdfQlknXG4gICAgICAgICAgICA6ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9ERVNDRU5ESU5HX0JZJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyRHJhZ0hhbmRsZUljb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGljb25VcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJy4vYXNzZXRzL2ltYWdlcy9kcmFnX2luZGljYXRvcl8yNHB4LnN2ZycpO1xuXG4gICAgICAgIHRoaXMubWF0SWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgnYWRmJywgJ2RyYWdfaW5kaWNhdG9yJywgaWNvblVybCk7XG4gICAgfVxuXG4gICAgb25SZXNpemluZyh7IHJlY3RhbmdsZTogeyB3aWR0aCB9IH06IFJlc2l6ZUV2ZW50LCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZGF0YS5nZXRDb2x1bW5zKCkuZmlsdGVyKChjb2x1bW4pID0+ICFjb2x1bW4uaXNIaWRkZW4pO1xuICAgICAgICAgICAgYWxsQ29sdW1uc1tjb2xJbmRleF0ud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKGFsbENvbHVtbnMpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSZXNpemluZykge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblJlc2l6aW5nRW5kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6aW5nQ29sdW1uSW5kZXggPSAtMTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNXaWR0aHMoKTtcbiAgICB9XG5cbiAgICBnZXRGbGV4VmFsdWUoeyB3aWR0aCA9IDAgfTogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgMCAxICR7d2lkdGggPCBEYXRhVGFibGVDb21wb25lbnQuTUlOSU1VTV9DT0xVTU5fU0laRSA/IERhdGFUYWJsZUNvbXBvbmVudC5NSU5JTVVNX0NPTFVNTl9TSVpFIDogd2lkdGh9cHhgO1xuICAgIH1cblxuICAgIGZpbHRlckRpc2FibGVkQ29sdW1ucyhpbmRleDogbnVtYmVyLCBfZHJhZzogQ2RrRHJhZywgZHJvcDogQ2RrRHJvcExpc3QpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFkcm9wLmdldFNvcnRlZEl0ZW1zKClbaW5kZXhdLmRpc2FibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ29sdW1uc1dpZHRocygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZGF0YS5nZXRDb2x1bW5zKCk7XG5cbiAgICAgICAgY29uc3QgaGVhZGVyQ29udGFpbmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZGYtZGF0YXRhYmxlLWhlYWRlcicpO1xuXG4gICAgICAgIGlmIChoZWFkZXJDb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckNvbnRhaW5lckNvbHVtbnMgPSBoZWFkZXJDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXInKTtcblxuICAgICAgICAgICAgaGVhZGVyQ29udGFpbmVyQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFsbENvbHVtbnNbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sdW1uc1tpbmRleF0ud2lkdGggPSBjb2x1bW4uY2xpZW50V2lkdGggLSBwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb2x1bW4pLnBhZGRpbmdMZWZ0LCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IGhlYWRlckNvbnRhaW5lckNvbHVtbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sdW1uc1tpbmRleF0ud2lkdGggPSBjb2x1bW4uY2xpZW50V2lkdGggLSBwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb2x1bW4pLnBhZGRpbmdSaWdodCwgMTApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sdW1uc1tpbmRleF0ud2lkdGggPSBjb2x1bW4uY2xpZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyhhbGxDb2x1bW5zKTtcblxuICAgICAgICB0aGlzLmNvbHVtbnNXaWR0aENoYW5nZWQuZW1pdChhbGxDb2x1bW5zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU29ydGluZ0VxdWFsKGNvbDogRGF0YUNvbHVtbiwgZGlyZWN0aW9uOiBzdHJpbmcsIHNvcnRpbmc6IERhdGFTb3J0aW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3J0aW5nICYmXG4gICAgICAgIChzb3J0aW5nLmtleSA9PT0gY29sLmtleSB8fCBzb3J0aW5nLmtleSA9PT0gY29sLnNvcnRpbmdLZXkpICYmXG4gICAgICAgIHNvcnRpbmcuZGlyZWN0aW9uPy50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBkaXJlY3Rpb247XG4gICAgfTtcblxuICAgIGdldCBpc1Jlc2l6aW5nKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNpemluZ0NvbHVtbkluZGV4ID49IDA7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFUYWJsZURyb3BFdmVudCB7XG4gICAgZGV0YWlsOiB7XG4gICAgICAgIHRhcmdldDogJ2NlbGwnIHwgJ2hlYWRlcic7XG4gICAgICAgIGV2ZW50OiBFdmVudDtcbiAgICAgICAgY29sdW1uOiBEYXRhQ29sdW1uO1xuICAgICAgICByb3c/OiBEYXRhUm93O1xuICAgIH07XG5cbiAgICBwcmV2ZW50RGVmYXVsdCgpOiB2b2lkO1xufVxuIiwiPGRpdlxuICAgIHJvbGU9XCJncmlkXCJcbiAgICAqbmdJZj1cImRhdGFcIiBjbGFzcz1cImFkZi1mdWxsLXdpZHRoXCJcbiAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1jYXJkXT1cImRpc3BsYXkgPT09ICdnYWxsZXJ5J1wiXG4gICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtbGlzdF09XCJkaXNwbGF5ID09PSAnbGlzdCdcIlxuICAgIFtjbGFzcy5hZGYtc3RpY2t5LWhlYWRlcl09XCJpc1N0aWNreUhlYWRlckVuYWJsZWQoKVwiXG4gICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtLWVtcHR5XT1cIihpc0VtcHR5KCkgJiYgIWlzSGVhZGVyVmlzaWJsZSgpKSB8fCBsb2FkaW5nXCJcbiAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS0tZW1wdHktLWhlYWRlci12aXNpYmxlXT1cImlzRW1wdHkoKSAmJiBpc0hlYWRlclZpc2libGUoKVwiPlxuICAgIDxkaXYgKm5nSWY9XCJpc0hlYWRlclZpc2libGUoKVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1oZWFkZXJcIiByb2xlPVwicm93Z3JvdXBcIiBbbmdDbGFzc109XCJ7ICdhZGYtc3Itb25seSc6ICFpc0hlYWRlclZpc2libGUoKSB9XCI+XG4gICAgICAgIDxhZGYtZGF0YXRhYmxlLXJvd1xuICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiZmlsdGVyRGlzYWJsZWRDb2x1bW5zXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImRhdGF0YWJsZS1yb3ctaGVhZGVyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNIZWFkZXJWaXNpYmxlKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLXJvd1wiXG4gICAgICAgICAgICAqbmdJZj1cImRpc3BsYXkgPT09ICdsaXN0J1wiXG4gICAgICAgICAgICByb2xlPVwicm93XCI+XG5cbiAgICAgICAgICAgIDwhLS0gQWN0aW9ucyAobGVmdCkgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdsZWZ0J1wiIGNsYXNzPVwiYWRmLWFjdGlvbnMtY29sdW1uIGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5BQ1RJT05TJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIENvbHVtbnMgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlzZWxlY3RcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2luZGV0ZXJtaW5hdGVdPVwiaXNTZWxlY3RBbGxJbmRldGVybWluYXRlXCIgW2NoZWNrZWRdPVwiaXNTZWxlY3RBbGxDaGVja2VkXCIgKGNoYW5nZSk9XCJvblNlbGVjdEFsbENsaWNrKCRldmVudClcIiBjbGFzcz1cImFkZi1jaGVja2JveC1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfQUxMJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC0te3tjb2wudHlwZSB8fCAndGV4dCd9fSB7e2NvbC5jc3NDbGFzc319IGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZS1jZWxsLWRhdGFcIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbCBvZiAoZGF0YS5nZXRDb2x1bW5zKCkgfCBmaWx0ZXJPdXRFdmVyeTonaXNIaWRkZW4nOnRydWUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdENvbHVtbiA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2F1dG9faWRfJyArIGNvbC5rZXlcIlxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdhZGYtc29ydGFibGUnOiBjb2wuc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICdhZGYtZGF0YXRhYmxlX19jdXJzb3ItLXBvaW50ZXInOiAhaXNSZXNpemluZyxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1kYXRhdGFibGVfX2hlYWRlci0tc29ydGVkLWFzYyc6IGlzQ29sdW1uU29ydGVkKGNvbCwgJ2FzYycpLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLWRhdGF0YWJsZV9faGVhZGVyLS1zb3J0ZWQtZGVzYyc6IGlzQ29sdW1uU29ydGVkKGNvbCwgJ2Rlc2MnKX1cIlxuICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoY29sLndpZHRoKSAmJiAhbGFzdENvbHVtbiAmJiB7J2ZsZXgnOiBnZXRGbGV4VmFsdWUoY29sKX1cIlxuICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbC50aXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNvbHVtbkhlYWRlckNsaWNrKGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkNvbHVtbkhlYWRlckNsaWNrKGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgIHJvbGU9XCJjb2x1bW5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpc0hlYWRlclZpc2libGUoKSA/IDAgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cImNvbC5zb3J0YWJsZSA/IChnZXRBcmlhU29ydChjb2wpIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgIGNka0RyYWdMb2NrQXhpcz1cInhcIlxuICAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwiaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAoY2RrRHJhZ0Ryb3BwZWQpPVwib25Ecm9wSGVhZGVyQ29sdW1uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiFjb2wuZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID0gY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkSGVhZGVyQ29sdW1uSW5kZXggPSAtMVwiXG4gICAgICAgICAgICAgICAgIGFkZi1kcm9wLXpvbmUgZHJvcFRhcmdldD1cImhlYWRlclwiIFtkcm9wQ29sdW1uXT1cImNvbFwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBhZGYtcmVzaXphYmxlXG4gICAgICAgICAgICAgICAgICAgICNyZXNpemFibGVFbGVtZW50PVwiYWRmLXJlc2l6YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb3ZlclBhZGRpbmddPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAocmVzaXppbmcpPVwib25SZXNpemluZygkZXZlbnQsIGNvbHVtbkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIChyZXNpemVTdGFydCk9XCJyZXNpemluZ0NvbHVtbkluZGV4ID0gY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAocmVzaXplRW5kKT1cIm9uUmVzaXppbmdFbmQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYXV0b19oZWFkZXJfY29udGVudF9pZF8nICsgY29sLmtleVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlci1jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlci1jb250ZW50LS1ob3ZlcmVkJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9PT0gY29sdW1uSW5kZXggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFpc0RyYWdnaW5nSGVhZGVyQ29sdW1uICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNSZXNpemluZyAmJiBjb2wuc29ydGFibGV9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLmhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2wudGl0bGVcIiBtYXRUb29sdGlwPVwie3tjb2wudGl0bGUgfCB0cmFuc2xhdGV9fVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlXCI+e3tjb2wudGl0bGUgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2wudGl0bGUgJiYgY29sLnNvcnRhYmxlICYmIGlzRHJhZ2dpbmdIZWFkZXJDb2x1bW5cIiBjbGFzcz1cImFkZi1zci1vbmx5XCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U29ydExpdmVBbm5vdW5jZW1lbnQoY29sKSB8IHRyYW5zbGF0ZTogeyBzdHJpbmc6IGNvbC50aXRsZSB8IHRyYW5zbGF0ZSB9IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbC50aXRsZSAmJiAhY29sLnNvcnRhYmxlICYmICFoZWFkZXJGaWx0ZXJUZW1wbGF0ZVwiIFthdHRyLnRpdGxlXT1cIidBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuRU1QVFlfSEVBREVSJyB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5oZWFkZXJcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbC5oZWFkZXJcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogY29sfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZV9faGVhZGVyLS1zb3J0ZWQtYXNjXT1cImlzQ29sdW1uU29ydGVkKGNvbCwgJ2FzYycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlX19oZWFkZXItLXNvcnRlZC1kZXNjXT1cImlzQ29sdW1uU29ydGVkKGNvbCwgJ2Rlc2MnKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiYWxsb3dGaWx0ZXJpbmdcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkZXJGaWx0ZXJUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBjb2x9XCI+PC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNka0RyYWdIYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItZHJhZy1pY29uJzogIWlzUmVzaXppbmcgfVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID09PSBjb2x1bW5JbmRleCAmJiAhaXNSZXNpemluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJhZGY6ZHJhZ19pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlci1kcmFnLWljb24tJytjb2wua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FkZi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzUmVzaXppbmdFbmFibGVkICYmIGNvbC5yZXNpemFibGUgJiYgIWxhc3RDb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJob3ZlcmVkSGVhZGVyQ29sdW1uSW5kZXggPT09IGNvbHVtbkluZGV4ICYmICFpc1Jlc2l6aW5nIHx8IHJlc2l6aW5nQ29sdW1uSW5kZXggPT09IGNvbHVtbkluZGV4ID8gJ2FkZi1kYXRhdGFibGVfX3Jlc2l6ZS1oYW5kbGUtdmlzaWJsZScgOiAnYWRmLWRhdGF0YWJsZV9fcmVzaXplLWhhbmRsZS1oaWRkZW4nXCJcbiAgICAgICAgICAgICAgICAgICAgYWRmLXJlc2l6ZS1oYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZV9fcmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXNpemFibGVDb250YWluZXJdPVwicmVzaXphYmxlRWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWRhdGF0YWJsZV9fcmVzaXplLWhhbmRsZS0tZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZHJvcC1oZWFkZXItY2VsbC1wbGFjZWhvbGRlclwiICpjZGtEcmFnUGxhY2Vob2xkZXI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBIZWFkZXIgYWN0aW9ucyAocmlnaHQpIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAncmlnaHQnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAobWFpbkFjdGlvblRlbXBsYXRlICYmIHNob3dNYWluRGF0YXRhYmxlQWN0aW9ucylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWFjdGlvbnMtY29sdW1uIGFkZi1kYXRhdGFibGUtYWN0aW9ucy1tZW51IGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZV9fYWN0aW9ucy1jZWxsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWFpbkFjdGlvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1kYXRhdGFibGUtbWFpbi1tZW51LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3sgJ0FERi1EQVRBVEFCTEUuQ09OVEVOVC1BQ1RJT05TLlNFTEVDVF9DT0xVTU5TJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICNtYWluTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJtYWluTWVudVRyaWdnZXIub3Blbk1lbnUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWFpbk1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj52aWV3X3dlZWtfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21haW5NZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1haW5BY3Rpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBtYWluTWVudVRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtc3Itb25seVwiPnt7ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuQUNUSU9OUycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2FkZi1kYXRhdGFibGUtcm93PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJkaXNwbGF5ID09PSAnZ2FsbGVyeScgJiYgaXNIZWFkZXJWaXNpYmxlKClcIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCJnZXRTb3J0aW5nS2V5KClcIiBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2dyaWQtdmlldy1zb3J0aW5nJ1wiPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBjb2wgb2YgZ2V0U29ydGFibGVDb2x1bW5zKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjb2wua2V5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2dyaWQtdmlldy1zb3J0aW5nLScrY29sLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Db2x1bW5IZWFkZXJDbGljayhjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkNvbHVtbkhlYWRlckNsaWNrKGNvbCwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb2wudGl0bGUgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWJvZHlcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdhZGYtYmx1ci1kYXRhdGFibGUtYm9keSc6IGJsdXJPblJlc2l6ZSAmJiAoaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiB8fCBpc1Jlc2l6aW5nKSB9XCJcbiAgICAgICAgcm9sZT1cInJvd2dyb3VwXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZyAmJiAhbm9QZXJtaXNzaW9uXCI+XG4gICAgICAgICAgICA8YWRmLWRhdGF0YWJsZS1yb3cgKm5nRm9yPVwibGV0IHJvdyBvZiBkYXRhLmdldFJvd3MoKTsgbGV0IGlkeCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgKHNlbGVjdCk9XCJvbkVudGVyS2V5UHJlc3NlZChyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXl1cCk9XCJvblJvd0tleVVwKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Sb3dFbnRlcktleURvd24ocm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbYWRmLXVwbG9hZF09XCJyb3dBbGxvd3NEcm9wKHJvdylcIlxuICAgICAgICAgICAgICAgIFthZGYtdXBsb2FkLWRhdGFdPVwicm93XCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJyb3dTdHlsZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Um93U3R5bGUocm93KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidkYXRhdGFibGUtcm93LScgKyBpZHhcIlxuICAgICAgICAgICAgICAgIChjb250ZXh0bWVudSk9XCJtYXJrUm93QXNDb250ZXh0TWVudVNvdXJjZShyb3cpXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBBY3Rpb25zIChsZWZ0KSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdsZWZ0J1wiIHJvbGU9XCJncmlkY2VsbFwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgI2FjdGlvbnNNZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRIaWRlQWN0aW9uc1dpdGhvdXRIb3ZlckNsYXNzKGFjdGlvbnNNZW51VHJpZ2dlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQURGLURBVEFUQUJMRS5DT05URU5ULUFDVElPTlMuVE9PTFRJUCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cIidhY3Rpb25fbWVudV9sZWZ0XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWN0aW9uX21lbnVfJyArIGlkeFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBnZXRSb3dBY3Rpb25zKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiYWN0aW9uLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkV4ZWN1dGVSb3dBY3Rpb24ocm93LCBhY3Rpb24pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiYWN0aW9uLmljb25cIj57eyBhY3Rpb24uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYWN0aW9uLnRpdGxlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8bGFiZWwgKm5nSWY9XCJtdWx0aXNlbGVjdFwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsIGFkZi1kYXRhdGFibGUtY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwicm93LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cInJvdy5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2Uocm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNoZWNrYm94LXNyLW9ubHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU0VMRUNUX0ZJTEUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICBsZXQgY29sIG9mIChkYXRhLmdldENvbHVtbnMoKSB8IGZpbHRlck91dEV2ZXJ5Oidpc0hpZGRlbic6dHJ1ZSksXG4gICAgICAgICAgICAgICAgbGV0IGxhc3RDb2x1bW4gPSBsYXN0O1wiXG4gICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwgYWRmLWRhdGF0YWJsZS1jZWxsLS17e2NvbC50eXBlIHx8ICd0ZXh0J319IHt7Y29sLmNzc0NsYXNzfX0gYWRmLWRhdGF0YWJsZS1jZWxsLWRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiY29sLnRpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJnZXRBdXRvbWF0aW9uVmFsdWUocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInJvdy5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY29sLnRpdGxlID8gKGNvbC50aXRsZSB8IHRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyS2V5UHJlc3NlZChyb3csICRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICAgICAgICAgW2FkZi1jb250ZXh0LW1lbnVdPVwiZ2V0Q29udGV4dE1lbnVBY3Rpb25zKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICBbYWRmLWNvbnRleHQtbWVudS1lbmFibGVkXT1cImNvbnRleHRNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgIGFkZi1kcm9wLXpvbmUgZHJvcFRhcmdldD1cImNlbGxcIiBbZHJvcENvbHVtbl09XCJjb2xcIiBbZHJvcFJvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiKGNvbC53aWR0aCkgJiYgIWxhc3RDb2x1bW4gJiYgeydmbGV4JzogZ2V0RmxleFZhbHVlKGNvbCl9XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY29sLnRlbXBsYXRlXCIgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJkYXRhLmdldENvbHVtblR5cGUocm93LCBjb2wpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2ltYWdlJ1wiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiaXNJY29uVmFsdWUocm93LCBjb2wpOyBlbHNlIG5vX2ljb252YWx1ZVwiPnt7IGFzSWNvblZhbHVlKHJvdywgY29sKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vX2ljb252YWx1ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImFkZi1kYXRhdGFibGUtc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93LmlzU2VsZWN0ZWQgJiYgIW11bHRpc2VsZWN0OyBlbHNlIG5vX3NlbGVjdGVkX3Jvd1wiIHN2Z0ljb249XCJzZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9fc2VsZWN0ZWRfcm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbnRlci1pbWctaWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIihkYXRhLmdldFZhbHVlKHJvdywgY29sKSB8IGZpbGVUeXBlKSA9PT0gJ2Rpc2FibGUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLklDT05fRElTQUJMRUQnIHwgdHJhbnNsYXRlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLklDT05fVEVYVCcgfCB0cmFuc2xhdGU6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBREYtREFUQVRBQkxFLkZJTEVfVFlQRS4nICsgKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUgfCB1cHBlcmNhc2UpIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYWx0XT1cIihkYXRhLmdldFZhbHVlKHJvdywgY29sKSB8IGZpbGVUeXBlKSA9PT0gJ2Rpc2FibGUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLklDT05fRElTQUJMRUQnIHwgdHJhbnNsYXRlKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLklDT05fVEVYVCcgfCB0cmFuc2xhdGU6e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnQURGLURBVEFUQUJMRS5GSUxFX1RZUEUuJyArIChkYXRhLmdldFZhbHVlKHJvdywgY29sKSB8IGZpbGVUeXBlIHwgdXBwZXJjYXNlKSB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz1cInt7IGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uSW1hZ2VMb2FkaW5nRXJyb3IoJGV2ZW50LCByb3cpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidpY29uJ1wiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1pY29uLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRDZWxsVG9vbHRpcChyb3csIGNvbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGYtaWNvbi1jZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWUgYWRmLWNlbGwtZGF0ZVwiIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidkYXRlXycgKyAoZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbikgfCBhZGZMb2NhbGl6ZWREYXRlOiAnbWVkaXVtJykgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZGF0ZS1jZWxsIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZW50ZXItZGF0ZS1jb2x1bW4taWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUNvbmZpZ109XCJjb2wuZGF0ZUNvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZi1kYXRlLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2xvY2F0aW9uJ1wiIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIiAgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2xvY2F0aW9uJyArIGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtbG9jYXRpb24tY2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZi1sb2NhdGlvbi1jZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidmaWxlU2l6ZSdcIiBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2ZpbGVTaXplXycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWZpbGVzaXplLWNlbGwgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbnRlci1zaXplLWNvbHVtbi1pZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRmLWZpbGVzaXplLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ3RleHQnXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIid0ZXh0XycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWRhdGF0YWJsZS1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29weUNvbnRlbnRdPVwiY29sLmNvcHlDb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRDZWxsVG9vbHRpcChyb3csIGNvbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGYtZGF0YXRhYmxlLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidib29sZWFuXycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWJvb2xlYW4tY2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZi1ib29sZWFuLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2pzb24nXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1qc29uLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCJjb2wuZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRmLWpzb24tY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInYW1vdW50J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhbW91bnRfJyArIGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtYW1vdW50LWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3lDb25maWddPVwiY29sLmN1cnJlbmN5Q29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRmLWFtb3VudC1jZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ251bWJlcl8nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1udW1iZXItY2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsQ29uZmlnXT1cImNvbC5kZWNpbWFsQ29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRmLW51bWJlci1jZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIGVtcHR5IGNlbGwgZm9yIHVua25vd24gY29sdW1uIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC50ZW1wbGF0ZVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCIgW2F0dHIudGFiaW5kZXhdPVwiY29sLmZvY3VzID8gMCA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBkYXRhOiBkYXRhLCByb3c6IHJvdywgY29sOiBjb2wgfSwgdmFsdWU6IGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gUm93IGFjdGlvbnMgKHJpZ2h0KSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdyaWdodCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobWFpbkFjdGlvblRlbXBsYXRlICYmIHNob3dNYWluRGF0YXRhYmxlQWN0aW9ucylcIlxuICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsIGFkZi1kYXRhdGFibGVfX2FjdGlvbnMtY2VsbCBhZGYtZGF0YXRhYmxlLWNlbnRlci1hY3Rpb25zLWNvbHVtbi1pZSBhZGYtZGF0YXRhYmxlLWFjdGlvbnMtbWVudVwiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdyaWdodCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiICNhY3Rpb25zTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEhpZGVBY3Rpb25zV2l0aG91dEhvdmVyQ2xhc3MoYWN0aW9uc01lbnVUcmlnZ2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5ST1dfT1BUSU9OX0JVVFRPTicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0FERi1EQVRBVEFCTEUuQ09OVEVOVC1BQ1RJT05TLlRPT0xUSVAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ2FjdGlvbl9tZW51X3JpZ2h0XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2FjdGlvbl9tZW51XycgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhY3Rpb25zTWVudVRyaWdnZXIub3Blbk1lbnUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgZ2V0Um93QWN0aW9ucyhyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJhY3Rpb24udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhY3Rpb24udGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeGVjdXRlUm93QWN0aW9uKHJvdywgYWN0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJhY3Rpb24uaWNvblwiPnt7IGFjdGlvbi5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgYWN0aW9uLnRpdGxlIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2FkZi1kYXRhdGFibGUtcm93PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzRW1wdHkoKVwiXG4gICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dcIlxuICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1yb3ddPVwiZGlzcGxheSA9PT0gJ2xpc3QnXCJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtY2FyZC1lbXB0eV09XCJkaXNwbGF5ID09PSAnZ2FsbGVyeSdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLW5vLWNvbnRlbnQtY29udGFpbmVyIGFkZi1kYXRhdGFibGUtY2VsbFwiIHJvbGU9XCJncmlkY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJub0NvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ0ZvciBbbmdGb3JPZl09XCJbZGF0YV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nRm9yVGVtcGxhdGVdPVwibm9Db250ZW50VGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWVtcHR5LWxpc3RcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHJvdyBvZiBmYWtlUm93c1wiXG4gICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1yb3cgYWRmLWRhdGF0YWJsZS1yb3ctZW1wdHktY2FyZFwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgbm9QZXJtaXNzaW9uXCJcbiAgICAgICAgICAgICByb2xlPVwicm93XCJcbiAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1yb3ddPVwiZGlzcGxheSA9PT0gJ2xpc3QnXCJcbiAgICAgICAgICAgICBjbGFzcz1cImFkZi1uby1wZXJtaXNzaW9uX19yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtbm8tcGVybWlzc2lvbl9fY2VsbCBhZGYtbm8tY29udGVudC1jb250YWluZXIgYWRmLWRhdGF0YWJsZS1jZWxsXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwibm9QZXJtaXNzaW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ0ZvciBbbmdGb3JPZl09XCJbZGF0YV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdGb3JUZW1wbGF0ZV09XCJub1Blcm1pc3Npb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCJcbiAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1yb3ddPVwiZGlzcGxheSA9PT0gJ2xpc3QnXCJcbiAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS1jYXJkLWxvYWRpbmddPVwiZGlzcGxheSA9PT0gJ2dhbGxlcnknXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLW5vLWNvbnRlbnQtY29udGFpbmVyIGFkZi1kYXRhdGFibGUtY2VsbFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImxvYWRpbmdUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nRm9yIFtuZ0Zvck9mXT1cIltkYXRhXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0ZvclRlbXBsYXRlXT1cImxvYWRpbmdUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
818
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb3JlL3NyYy9saWIvZGF0YXRhYmxlL2NvbXBvbmVudHMvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvY29yZS9zcmMvbGliL2RhdGF0YWJsZS9jb21wb25lbnRzL2RhdGF0YWJsZS9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsNkRBQTZEO0FBRTdELE9BQU8sRUFHSCxTQUFTLEVBQ1QsWUFBWSxFQUVaLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUNaLEtBQUssRUFDTCxlQUFlLEVBSWYsTUFBTSxFQUNOLFNBQVMsRUFJVCxZQUFZLEVBQ1osaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdwRCxPQUFPLEVBQUUsVUFBVSxFQUEwQixNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUV2RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JB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O3NCQURYLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxNQUFNO2dCQUtQLFdBQVc7c0JBRFYsTUFBTTtnQkFLUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1Asa0JBQWtCO3NCQURqQixNQUFNO2dCQUtQLGdCQUFnQjtzQkFEZixNQUFNO2dCQUtQLGtCQUFrQjtzQkFEakIsTUFBTTtnQkFLUCxtQkFBbUI7c0JBRGxCLE1BQU07Z0JBUVAsT0FBTztzQkFETixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFRTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBUU4sVUFBVTtzQkFEVCxLQUFLO2dCQU9OLGNBQWM7c0JBRGIsS0FBSztnQkFPTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxLQUFLO2dCQStCTixTQUFTO3NCQURSLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyMyBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlICovXG5cbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgSXRlcmFibGVEaWZmZXJzLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0YUNvbHVtbkxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kYXRhLWNvbHVtbi9kYXRhLWNvbHVtbi1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRhQ29sdW1uIH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLWNvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhUm93RXZlbnQgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGEtcm93LWV2ZW50Lm1vZGVsJztcbmltcG9ydCB7IERhdGFSb3cgfSBmcm9tICcuLi8uLi9kYXRhL2RhdGEtcm93Lm1vZGVsJztcbmltcG9ydCB7IERhdGFTb3J0aW5nIH0gZnJvbSAnLi4vLi4vZGF0YS9kYXRhLXNvcnRpbmcubW9kZWwnO1xuaW1wb3J0IHsgRGF0YVRhYmxlQWRhcHRlciB9IGZyb20gJy4uLy4uL2RhdGEvZGF0YXRhYmxlLWFkYXB0ZXInO1xuaW1wb3J0IHsgRGF0YVRhYmxlUm93Q29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLXJvdy9kYXRhdGFibGUtcm93LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IE9iamVjdERhdGFSb3cgfSBmcm9tICcuLi8uLi9kYXRhL29iamVjdC1kYXRhcm93Lm1vZGVsJztcbmltcG9ydCB7IE9iamVjdERhdGFDb2x1bW4gfSBmcm9tICcuLi8uLi9kYXRhL29iamVjdC1kYXRhY29sdW1uLm1vZGVsJztcbmltcG9ydCB7IE9iamVjdERhdGFUYWJsZUFkYXB0ZXIgfSBmcm9tICcuLi8uLi9kYXRhL29iamVjdC1kYXRhdGFibGUtYWRhcHRlcic7XG5pbXBvcnQgeyBEYXRhQ2VsbEV2ZW50IH0gZnJvbSAnLi4vZGF0YS1jZWxsLmV2ZW50JztcbmltcG9ydCB7IERhdGFSb3dBY3Rpb25FdmVudCB9IGZyb20gJy4uL2RhdGEtcm93LWFjdGlvbi5ldmVudCc7XG5pbXBvcnQgeyBidWZmZXIsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHNoYXJlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0Ryb3BMaXN0LCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBSZXNpemVFdmVudCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmVzaXphYmxlL3R5cGVzJztcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvd1xuZXhwb3J0IGVudW0gU2hvd0hlYWRlck1vZGUge1xuICAgIE5ldmVyID0gJ25ldmVyJyxcbiAgICBBbHdheXMgPSAnYWx3YXlzJyxcbiAgICBEYXRhID0gJ2RhdGEnXG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWRhdGF0YWJsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZGF0YXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7IGNsYXNzOiAnYWRmLWRhdGF0YWJsZScgfVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcywgRG9DaGVjaywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgICBwcml2YXRlIHN0YXRpYyBNSU5JTVVNX0NPTFVNTl9TSVpFID0gMTAwO1xuXG4gICAgQFZpZXdDaGlsZHJlbihEYXRhVGFibGVSb3dDb21wb25lbnQpXG4gICAgcm93c0xpc3Q6IFF1ZXJ5TGlzdDxEYXRhVGFibGVSb3dDb21wb25lbnQ+O1xuXG4gICAgQENvbnRlbnRDaGlsZChEYXRhQ29sdW1uTGlzdENvbXBvbmVudClcbiAgICBjb2x1bW5MaXN0OiBEYXRhQ29sdW1uTGlzdENvbXBvbmVudDtcblxuICAgIC8qKiBEYXRhIHNvdXJjZSBmb3IgdGhlIHRhYmxlICovXG4gICAgQElucHV0KClcbiAgICBkYXRhOiBEYXRhVGFibGVBZGFwdGVyO1xuXG4gICAgLyoqIFRoZSByb3dzIHRoYXQgdGhlIGRhdGF0YWJsZSB3aWxsIHNob3cuICovXG4gICAgQElucHV0KClcbiAgICByb3dzOiBhbnlbXSA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lIHRoZSBzb3J0IG9yZGVyIG9mIHRoZSBkYXRhdGFibGUuIFBvc3NpYmxlIHZhbHVlcyBhcmUgOlxuICAgICAqIFtgY3JlYXRlZGAsIGBkZXNjYF0sIFtgY3JlYXRlZGAsIGBhc2NgXSwgW2BkdWVgLCBgZGVzY2BdLCBbYGR1ZWAsIGBhc2NgXVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc29ydGluZzogYW55W10gPSBbXTtcblxuICAgIC8qKiBUaGUgY29sdW1ucyB0aGF0IHRoZSBkYXRhdGFibGUgd2lsbCBzaG93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uczogYW55W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFJvdyBzZWxlY3Rpb24gbW9kZS4gQ2FuIGJlIG5vbmUsIGBzaW5nbGVgIG9yIGBtdWx0aXBsZWAuIEZvciBgbXVsdGlwbGVgIG1vZGUsXG4gICAgICogeW91IGNhbiB1c2UgQ21kIChtYWNPUykgb3IgQ3RybCAoV2luKSBtb2RpZmllciBrZXkgdG8gdG9nZ2xlIHNlbGVjdGlvbiBmb3IgbXVsdGlwbGUgcm93cy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbk1vZGU6IHN0cmluZyA9ICdzaW5nbGUnOyAvLyBub25lfHNpbmdsZXxtdWx0aXBsZVxuXG4gICAgLyoqIFRvZ2dsZXMgbXVsdGlwbGUgcm93IHNlbGVjdGlvbiwgd2hpY2ggcmVuZGVycyBjaGVja2JveGVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCByb3cuICovXG4gICAgQElucHV0KClcbiAgICBtdWx0aXNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZXMgbWFpbiBkYXRhIHRhYmxlIGFjdGlvbiBjb2x1bW4uICovXG4gICAgQElucHV0KClcbiAgICBtYWluVGFibGVBY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIGRhdGEgYWN0aW9ucyBjb2x1bW4uICovXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgbWFpbiBkYXRhdGFibGUgYWN0aW9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd01haW5EYXRhdGFibGVBY3Rpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogUG9zaXRpb24gb2YgdGhlIGFjdGlvbnMgZHJvcGRvd24gbWVudS4gQ2FuIGJlIFwibGVmdFwiIG9yIFwicmlnaHRcIi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFjdGlvbnNQb3NpdGlvbjogc3RyaW5nID0gJ3JpZ2h0JzsgLy8gbGVmdHxyaWdodFxuXG4gICAgLyoqIFRvZ2dsZXMgd2hldGhlciB0aGUgYWN0aW9ucyBkcm9wZG93biBzaG91bGQgb25seSBiZSB2aXNpYmxlIGlmIHRoZSByb3cgaXMgaG92ZXJlZCBvdmVyIG9yIHRoZSBkcm9wZG93biBtZW51IGlzIG9wZW4uICovXG4gICAgQElucHV0KClcbiAgICBhY3Rpb25zVmlzaWJsZU9uSG92ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBGYWxsYmFjayBpbWFnZSBmb3Igcm93cyB3aGVyZSB0aGUgdGh1bWJuYWlsIGlzIG1pc3NpbmcuICovXG4gICAgQElucHV0KClcbiAgICBmYWxsYmFja1RodW1ibmFpbDogc3RyaW5nO1xuXG4gICAgLyoqIFRvZ2dsZXMgY3VzdG9tIGNvbnRleHQgbWVudSBmb3IgdGhlIGNvbXBvbmVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGNvbnRleHRNZW51OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgaW5saW5lIHN0eWxlIHRvIGFwcGx5IHRvIGV2ZXJ5IHJvdy4gU2VlXG4gICAgICogW05nU3R5bGVdKGh0dHBzOi8vYW5ndWxhci5pby9kb2NzL3RzL2xhdGVzdC9hcGkvY29tbW9uL2luZGV4L05nU3R5bGUtZGlyZWN0aXZlLmh0bWwpXG4gICAgICogZG9jcyBmb3IgbW9yZSBkZXRhaWxzIGFuZCB1c2FnZSBleGFtcGxlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd1N0eWxlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gICAgLyoqIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkgdG8gZXZlcnkgcm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93U3R5bGVDbGFzczogc3RyaW5nID0gJyc7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgaGVhZGVyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvd0hlYWRlciA9IFNob3dIZWFkZXJNb2RlLkRhdGE7XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgc3RpY2t5IGhlYWRlciBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBhIHJvdy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICByb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVJvd0V2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBkb3VibGUtY2xpY2tzIGEgcm93LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHJvd0RibENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhUm93RXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCBiZWZvcmUgdGhlIGNvbnRleHQgbWVudSBpcyBkaXNwbGF5ZWQgZm9yIGEgcm93LiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNob3dSb3dDb250ZXh0TWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YUNlbGxFdmVudD4oKTtcblxuICAgIC8qKiBFbWl0dGVkIGJlZm9yZSB0aGUgYWN0aW9ucyBtZW51IGlzIGRpc3BsYXllZCBmb3IgYSByb3cuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2hvd1Jvd0FjdGlvbnNNZW51ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhQ2VsbEV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBleGVjdXRlcyBhIHJvdyBhY3Rpb24uICovXG4gICAgQE91dHB1dCgpXG4gICAgZXhlY3V0ZVJvd0FjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0YVJvd0FjdGlvbkV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgY29sdW1uIG9yZGVyIGlzIGNoYW5nZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgY29sdW1uT3JkZXJDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhQ29sdW1uW10+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBjb2x1bW4gd2lkdGggaXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBjb2x1bW5zV2lkdGhDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhQ29sdW1uW10+KCk7XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBkYXRhdGFibGUgaXMgaW4gbG9hZGluZyBzdGF0ZSBhbmQgbmVlZHMgdG8gc2hvdyB0aGVcbiAgICAgKiBsb2FkaW5nIHRlbXBsYXRlIChzZWUgdGhlIGRvY3MgdG8gbGVhcm4gaG93IHRvIGNvbmZpZ3VyZSBhIGxvYWRpbmcgdGVtcGxhdGUpLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEZsYWcgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIGRhdGF0YWJsZSBzaG91bGQgc2hvdyB0aGUgXCJubyBwZXJtaXNzaW9uXCIgdGVtcGxhdGUuICovXG4gICAgQElucHV0KClcbiAgICBub1Blcm1pc3Npb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNob3VsZCB0aGUgaXRlbXMgZm9yIHRoZSByb3cgYWN0aW9ucyBtZW51IGJlIGNhY2hlZCBmb3IgcmV1c2UgYWZ0ZXIgdGhleSBhcmUgbG9hZGVkXG4gICAgICogdGhlIGZpcnN0IHRpbWU/XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByb3dNZW51Q2FjaGVFbmFibGVkID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSByZXNvbHZlciBmdW5jdGlvbiB3aGljaCBpcyB1c2VkIHRvIHBhcnNlIGR5bmFtaWMgY29sdW1uIG9iamVjdHNcbiAgICAgKiBzZWUgdGhlIGRvY3MgdG8gbGVhcm4gaG93IHRvIGNvbmZpZ3VyZSBhIHJlc29sdmVyRm4uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICByZXNvbHZlckZuOiAocm93OiBEYXRhUm93LCBjb2w6IERhdGFDb2x1bW4pID0+IGFueSA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgaW5kaWNhdGUgaWYgdGhlIGRhdGF0YWJsZSBhbGxvdyB0aGUgdXNlIGZhY2V0IHdpZGdldCBzZWFyY2ggZm9yIGZpbHRlcmluZy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGFsbG93RmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBkYXRhdGFibGUgYWxsb3dzIGNvbHVtbiByZXNpemluZy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzUmVzaXppbmdFbmFibGVkID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIGlmIHRoZSBkYXRhdGFibGUgc2hvdWxkIGJlIGJsdXJyZWQgd2hlbiByZXNpemluZy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGJsdXJPblJlc2l6ZSA9IHRydWU7XG5cbiAgICBoZWFkZXJGaWx0ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBub0NvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBub1Blcm1pc3Npb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBsb2FkaW5nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbWFpbkFjdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgaXNTZWxlY3RBbGxJbmRldGVybWluYXRlOiBib29sZWFuID0gZmFsc2U7XG4gICAgaXNTZWxlY3RBbGxDaGVja2VkOiBib29sZWFuID0gZmFsc2U7XG4gICAgc2VsZWN0aW9uID0gbmV3IEFycmF5PERhdGFSb3c+KCk7XG4gICAgc2VsZWN0ZWRSb3dJZDogc3RyaW5nID0gJyc7XG5cbiAgICBpc0RyYWdnaW5nSGVhZGVyQ29sdW1uID0gZmFsc2U7XG4gICAgaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID0gLTE7XG4gICAgcmVzaXppbmdDb2x1bW5JbmRleCA9IC0xO1xuXG4gICAgcHJpdmF0ZSBrZXlNYW5hZ2VyOiBGb2N1c0tleU1hbmFnZXI8RGF0YVRhYmxlUm93Q29tcG9uZW50PjtcbiAgICBwcml2YXRlIGNsaWNrT2JzZXJ2ZXI6IE9ic2VydmVyPERhdGFSb3dFdmVudD47XG4gICAgcHJpdmF0ZSBjbGljayQ6IE9ic2VydmFibGU8RGF0YVJvd0V2ZW50PjtcblxuICAgIHByaXZhdGUgZGlmZmVyOiBhbnk7XG4gICAgcHJpdmF0ZSByb3dNZW51Q2FjaGU6IGFueSA9IHt9O1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICAgIHByaXZhdGUgc2luZ2xlQ2xpY2tTdHJlYW1TdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIG11bHRpQ2xpY2tTdHJlYW1TdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGRhdGFSb3dzQ2hhbmdlZDogU3Vic2NyaXB0aW9uO1xuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmtleU1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIGRpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycywgcHJpdmF0ZSBtYXRJY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSwgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xuICAgICAgICBpZiAoZGlmZmVycykge1xuICAgICAgICAgICAgdGhpcy5kaWZmZXIgPSBkaWZmZXJzLmZpbmQoW10pLmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2xpY2skID0gbmV3IE9ic2VydmFibGU8RGF0YVJvd0V2ZW50Pigob2JzZXJ2ZXIpID0+ICh0aGlzLmNsaWNrT2JzZXJ2ZXIgPSBvYnNlcnZlcikpLnBpcGUoc2hhcmUoKSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJEcmFnSGFuZGxlSWNvbigpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5MaXN0LmNvbHVtbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlU2NoZW1hKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRUYWJsZVNjaGVtYSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLnJvd3NMaXN0KS53aXRoV3JhcCgpLnNraXBQcmVkaWNhdGUoKGl0ZW0pID0+IGl0ZW0uZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5pbml0QW5kU3Vic2NyaWJlQ2xpY2tTdHJlYW0oKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSb3dJZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRSb3dBc0NvbnRleHRTb3VyY2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFDaGFuZ2VzID0gY2hhbmdlc1snZGF0YSddO1xuICAgICAgICBjb25zdCByb3dDaGFuZ2VzID0gY2hhbmdlc1sncm93cyddO1xuICAgICAgICBjb25zdCBjb2x1bW5DaGFuZ2VzID0gY2hhbmdlc1snY29sdW1ucyddO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKGRhdGFDaGFuZ2VzKSB8fCB0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKHJvd0NoYW5nZXMpIHx8IHRoaXMuaXNQcm9wZXJ0eUNoYW5nZWQoY29sdW1uQ2hhbmdlcykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzVGFibGVFbXB0eSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0VGFibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGNoYW5nZXNbJ2RhdGEnXS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocm93Q2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlUm93cyhjaGFuZ2VzWydyb3dzJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUYWJsZVNvcnRpbmcodGhpcy5zb3J0aW5nKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uQ2hhbmdlcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRhYmxlQ29sdW1ucyhjaGFuZ2VzWydjb2x1bW5zJ10uY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGlvbk1vZGUgJiYgIWNoYW5nZXMuc2VsZWN0aW9uTW9kZS5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KCdyb3ctdW5zZWxlY3QnLCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzUHJvcGVydHlDaGFuZ2VkKGNoYW5nZXNbJ3NvcnRpbmcnXSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVTb3J0aW5nKGNoYW5nZXNbJ3NvcnRpbmcnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNDb2x1bW5Tb3J0QWN0aXZlKGNvbHVtbjogRGF0YUNvbHVtbik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWNvbHVtbiB8fCAhdGhpcy5kYXRhLmdldFNvcnRpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW4ua2V5ID09PSB0aGlzLmRhdGEuZ2V0U29ydGluZygpLmtleTtcbiAgICB9XG5cbiAgICBvbkRyb3BIZWFkZXJDb2x1bW4oZXZlbnQ6IENka0RyYWdEcm9wPHVua25vd24+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSB0aGlzLmRhdGEuZ2V0Q29sdW1ucygpO1xuICAgICAgICBjb25zdCBzaG93bkNvbHVtbnMgPSBhbGxDb2x1bW5zLmZpbHRlcigoY29sdW1uKSA9PiAhY29sdW1uLmlzSGlkZGVuKTtcbiAgICAgICAgY29uc3QgaGlkZGVuQ29sdW1ucyA9IGFsbENvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5pc0hpZGRlbik7XG5cbiAgICAgICAgbW92ZUl0ZW1JbkFycmF5KHNob3duQ29sdW1ucywgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgICAgY29uc3QgYWxsQ29sdW1uc1dpdGhOZXdPcmRlciA9IFsuLi5zaG93bkNvbHVtbnMsIC4uLmhpZGRlbkNvbHVtbnNdO1xuXG4gICAgICAgIHRoaXMuc2V0VGFibGVDb2x1bW5zKGFsbENvbHVtbnNXaXRoTmV3T3JkZXIpO1xuICAgICAgICB0aGlzLmNvbHVtbk9yZGVyQ2hhbmdlZC5lbWl0KGFsbENvbHVtbnNXaXRoTmV3T3JkZXIpO1xuXG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiA9IGZhbHNlO1xuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuZGlmZmVyLmRpZmYodGhpcy5yb3dzKTtcbiAgICAgICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVSb3dzKHRoaXMucm93cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1Byb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eTogU2ltcGxlQ2hhbmdlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXByb3BlcnR5Py5jdXJyZW50VmFsdWU7XG4gICAgfVxuXG4gICAgY29udmVydFRvUm93c0RhdGEocm93czogYW55W10pOiBPYmplY3REYXRhUm93W10ge1xuICAgICAgICByZXR1cm4gcm93cy5tYXAoKHJvdykgPT4gbmV3IE9iamVjdERhdGFSb3cocm93LCByb3cuaXNTZWxlY3RlZCkpO1xuICAgIH1cblxuICAgIGNvbnZlcnRUb0NvbHVtbnNEYXRhKGNvbHVtbnM6IGFueVtdKTogT2JqZWN0RGF0YUNvbHVtbltdIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnMubWFwKChjb2x1bW4pID0+IG5ldyBPYmplY3REYXRhQ29sdW1uKGNvbHVtbikpO1xuICAgIH1cblxuICAgIGNvbnZlcnRUb0RhdGFTb3J0aW5nKHNvcnRpbmc6IGFueVtdKTogRGF0YVNvcnRpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKHNvcnRpbmcgJiYgc29ydGluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGFTb3J0aW5nKHNvcnRpbmdbMF0sIHNvcnRpbmdbMV0sIHNvcnRpbmdbMl0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEFuZFN1YnNjcmliZUNsaWNrU3RyZWFtKCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlQ2xpY2tTdHJlYW0oKTtcbiAgICAgICAgY29uc3Qgc2luZ2xlQ2xpY2tTdHJlYW0gPSB0aGlzLmNsaWNrJC5waXBlKFxuICAgICAgICAgICAgYnVmZmVyKHRoaXMuY2xpY2skLnBpcGUoZGVib3VuY2VUaW1lKDI1MCkpKSxcbiAgICAgICAgICAgIG1hcCgobGlzdCkgPT4gbGlzdCksXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHgubGVuZ3RoID09PSAxKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuc2luZ2xlQ2xpY2tTdHJlYW1TdWIgPSBzaW5nbGVDbGlja1N0cmVhbS5zdWJzY3JpYmUoKGRhdGFSb3dFdmVudHM6IERhdGFSb3dFdmVudFtdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBldmVudDogRGF0YVJvd0V2ZW50ID0gZGF0YVJvd0V2ZW50c1swXTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93U2VsZWN0aW9uKGV2ZW50LnZhbHVlLCBldmVudC5ldmVudCBhcyBhbnkpO1xuICAgICAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgncm93LWNsaWNrJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBtdWx0aUNsaWNrU3RyZWFtID0gdGhpcy5jbGljayQucGlwZShcbiAgICAgICAgICAgIGJ1ZmZlcih0aGlzLmNsaWNrJC5waXBlKGRlYm91bmNlVGltZSgyNTApKSksXG4gICAgICAgICAgICBtYXAoKGxpc3QpID0+IGxpc3QpLFxuICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiB4Lmxlbmd0aCA+PSAyKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubXVsdGlDbGlja1N0cmVhbVN1YiA9IG11bHRpQ2xpY2tTdHJlYW0uc3Vic2NyaWJlKChkYXRhUm93RXZlbnRzOiBEYXRhUm93RXZlbnRbXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXZlbnQ6IERhdGFSb3dFdmVudCA9IGRhdGFSb3dFdmVudHNbMF07XG4gICAgICAgICAgICB0aGlzLnJvd0RibENsaWNrLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdyb3ctZGJsY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zdWJzY3JpYmVDbGlja1N0cmVhbSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2luZ2xlQ2xpY2tTdHJlYW1TdWIpIHtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlQ2xpY2tTdHJlYW1TdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc2luZ2xlQ2xpY2tTdHJlYW1TdWIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpQ2xpY2tTdHJlYW1TdWIpIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlDbGlja1N0cmVhbVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5tdWx0aUNsaWNrU3RyZWFtU3ViID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFRhYmxlKCkge1xuICAgICAgICBjb25zdCBydW50aW1lQ29sdW1ucyA9IHRoaXMuZ2V0UnVudGltZUNvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IE9iamVjdERhdGFUYWJsZUFkYXB0ZXIodGhpcy5yb3dzLCBydW50aW1lQ29sdW1ucyk7XG5cbiAgICAgICAgdGhpcy5zZXRUYWJsZVNvcnRpbmcodGhpcy5zb3J0aW5nKTtcbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnJvd01lbnVDYWNoZSA9IHt9O1xuICAgIH1cblxuICAgIGlzVGFibGVFbXB0eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZGF0YSA9PT0gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRhYmxlUm93cyhyb3dzOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBjb25zdCByb3dzRGF0YSA9IHRoaXMuY29udmVydFRvUm93c0RhdGEocm93cyk7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0Um93cyhyb3dzRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRhYmxlQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zRGF0YSA9IHRoaXMuY29udmVydFRvQ29sdW1uc0RhdGEoY29sdW1ucyk7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyhjb2x1bW5zRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFJ1bnRpbWVDb2x1bW5zKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIFsuLi4odGhpcy5jb2x1bW5zIHx8IFtdKSwgLi4udGhpcy5nZXRTY2hlbWFGcm9tSHRtbCgpXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRhYmxlU2NoZW1hKCkge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5nZXRSdW50aW1lQ29sdW1ucygpO1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGEgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyhjb2x1bW5zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGFibGVTb3J0aW5nKHNvcnRpbmc6IGFueVtdKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRTb3J0aW5nKHRoaXMuY29udmVydFRvRGF0YVNvcnRpbmcoc29ydGluZykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNjaGVtYUZyb21IdG1sKCk6IGFueSB7XG4gICAgICAgIGxldCBzY2hlbWEgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uTGlzdD8uY29sdW1ucz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2NoZW1hID0gdGhpcy5jb2x1bW5MaXN0LmNvbHVtbnMubWFwKChjKSA9PiBjIGFzIERhdGFDb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxuXG4gICAgb25Sb3dDbGljayhyb3c6IERhdGFSb3csIG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKG1vdXNlRXZlbnQpIHtcbiAgICAgICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5kYXRhLmdldFJvd3MoKS5pbmRleE9mKHJvdykgKyAodGhpcy5pc0hlYWRlclZpc2libGUoKSA/IDEgOiAwKTtcbiAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHJvd0luZGV4KTtcblxuICAgICAgICAgICAgY29uc3QgZGF0YVJvd0V2ZW50ID0gbmV3IERhdGFSb3dFdmVudChyb3csIG1vdXNlRXZlbnQsIHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jbGlja09ic2VydmVyLm5leHQoZGF0YVJvd0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uRW50ZXJLZXlQcmVzc2VkKHJvdzogRGF0YVJvdywgZTogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJvd1NlbGVjdGlvbihyb3csIGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSb3dTZWxlY3Rpb24ocm93OiBEYXRhUm93LCBlOiBLZXlib2FyZEV2ZW50IHwgTW91c2VFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIGlmIChyb3cuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KCdyb3ctdW5zZWxlY3QnLCBudWxsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KCdyb3ctc2VsZWN0Jywgcm93KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzTXVsdGlTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RpZmllciA9IGUgJiYgKGUubWV0YUtleSB8fCBlLmN0cmxLZXkpO1xuICAgICAgICAgICAgICAgIGxldCBuZXdWYWx1ZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gIXJvdy5pc1NlbGVjdGVkO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gbW9kaWZpZXIgPyAhcm93LmlzU2VsZWN0ZWQgOiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkb21FdmVudE5hbWUgPSBuZXdWYWx1ZSA/ICdyb3ctc2VsZWN0JyA6ICdyb3ctdW5zZWxlY3QnO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Um93KHJvdywgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdFJvd1NlbGVjdGlvbkV2ZW50KGRvbUV2ZW50TmFtZSwgcm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhLmdldFJvd3MoKTtcbiAgICAgICAgICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJvd3MuZm9yRWFjaCgocikgPT4gKHIuaXNTZWxlY3RlZCA9IGZhbHNlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgb25Sb3dEYmxDbGljayhyb3c6IERhdGFSb3csIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGFSb3dFdmVudCA9IG5ldyBEYXRhUm93RXZlbnQocm93LCBldmVudCwgdGhpcyk7XG4gICAgICAgIHRoaXMuY2xpY2tPYnNlcnZlci5uZXh0KGRhdGFSb3dFdmVudCk7XG4gICAgfVxuXG4gICAgb25Sb3dFbnRlcktleURvd24ocm93OiBEYXRhUm93LCBrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgICAgdGhpcy5vbktleWJvYXJkTmF2aWdhdGUocm93LCBrZXlib2FyZEV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUm93S2V5VXAocm93OiBEYXRhUm93LCBrZXlib2FyZEV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyb3cta2V5dXAnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAga2V5Ym9hcmRFdmVudCxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBidWJibGVzOiB0cnVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuXG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgICBrZXlib2FyZEV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uS2V5Ym9hcmROYXZpZ2F0ZShyb3c6IERhdGFSb3csIGtleWJvYXJkRXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgICAgIGtleWJvYXJkRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IERhdGFSb3dFdmVudChyb3csIGtleWJvYXJkRXZlbnQsIHRoaXMpO1xuXG4gICAgICAgIHRoaXMucm93RGJsQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3Jvdy1kYmxjbGljaycsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IGV2ZW50LFxuICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkQ2xpY2tFdmVudChldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmV2ZW50UGhhc2UgPT09IGV2ZW50LkJVQkJMSU5HX1BIQVNFO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmV2ZW50UGhhc2UgPT09IGV2ZW50LkFUX1RBUkdFVDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBvbkNvbHVtbkhlYWRlckNsaWNrKGNvbHVtbjogRGF0YUNvbHVtbiwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzVmFsaWRDbGlja0V2ZW50KGV2ZW50KSAmJiBjb2x1bW4gJiYgY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5kYXRhLmdldFNvcnRpbmcoKTtcbiAgICAgICAgICAgIGxldCBuZXdEaXJlY3Rpb24gPSAnYXNjJztcbiAgICAgICAgICAgIGlmIChjdXJyZW50ICYmIGNvbHVtbi5rZXkgPT09IGN1cnJlbnQua2V5KSB7XG4gICAgICAgICAgICAgICAgbmV3RGlyZWN0aW9uID0gY3VycmVudC5kaXJlY3Rpb24/LnRvTG93ZXJDYXNlKCkgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNvcnRpbmcgPSBbY29sdW1uLmtleSwgbmV3RGlyZWN0aW9uLCB7IG51bWVyaWM6IHRydWUgfV07XG4gICAgICAgICAgICB0aGlzLmRhdGEuc2V0U29ydGluZyhuZXcgRGF0YVNvcnRpbmcoY29sdW1uLmtleSwgbmV3RGlyZWN0aW9uLCB7IG51bWVyaWM6IHRydWUgfSkpO1xuICAgICAgICAgICAgdGhpcy5lbWl0U29ydGluZ0NoYW5nZWRFdmVudChjb2x1bW4ua2V5LCBjb2x1bW4uc29ydGluZ0tleSwgbmV3RGlyZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMua2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKDApO1xuICAgIH1cblxuICAgIG9uU2VsZWN0QWxsQ2xpY2sobWF0Q2hlY2tib3hDaGFuZ2U6IE1hdENoZWNrYm94Q2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkID0gbWF0Q2hlY2tib3hDaGFuZ2UuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5pc1NlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMuZGF0YS5nZXRSb3dzKCk7XG4gICAgICAgICAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93c1tpXSwgbWF0Q2hlY2tib3hDaGFuZ2UuY2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkb21FdmVudE5hbWUgPSBtYXRDaGVja2JveENoYW5nZS5jaGVja2VkID8gJ3Jvdy1zZWxlY3QnIDogJ3Jvdy11bnNlbGVjdCc7XG4gICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLnNlbGVjdGlvbi5sZW5ndGggPiAwID8gdGhpcy5zZWxlY3Rpb25bMF0gOiBudWxsO1xuXG4gICAgICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChkb21FdmVudE5hbWUsIHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNoZWNrYm94Q2hhbmdlKHJvdzogRGF0YVJvdywgZXZlbnQ6IE1hdENoZWNrYm94Q2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZXZlbnQuY2hlY2tlZDtcblxuICAgICAgICB0aGlzLnNlbGVjdFJvdyhyb3csIG5ld1ZhbHVlKTtcblxuICAgICAgICBjb25zdCBkb21FdmVudE5hbWUgPSBuZXdWYWx1ZSA/ICdyb3ctc2VsZWN0JyA6ICdyb3ctdW5zZWxlY3QnO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChkb21FdmVudE5hbWUsIHJvdyk7XG4gICAgICAgIHRoaXMuY2hlY2tTZWxlY3RBbGxDaGVja2JveFN0YXRlKCk7XG4gICAgfVxuXG4gICAgY2hlY2tTZWxlY3RBbGxDaGVja2JveFN0YXRlKCkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgbGV0IG51bWJlck9mU2VsZWN0ZWRSb3dzOiBudW1iZXIgPSAwO1xuICAgICAgICAgICAgY29uc3Qgcm93cyA9IHRoaXMuZGF0YS5nZXRSb3dzKCk7XG4gICAgICAgICAgICByb3dzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyb3cuaXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlNlbGVjdGVkUm93cysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG51bWJlck9mU2VsZWN0ZWRSb3dzID09PSByb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsSW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXJPZlNlbGVjdGVkUm93cyA+IDAgJiYgbnVtYmVyT2ZTZWxlY3RlZFJvd3MgPCByb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbEluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxJbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkltYWdlTG9hZGluZ0Vycm9yKGV2ZW50OiBFdmVudCwgcm93OiBEYXRhUm93KSB7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBhbnk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmZhbGxiYWNrVGh1bWJuYWlsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5zcmMgPSB0aGlzLmZhbGxiYWNrVGh1bWJuYWlsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LnNyYyA9IHJvdy5pbWFnZUVycm9yUmVzb2x2ZXIoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNJY29uVmFsdWUocm93OiBEYXRhUm93LCBjb2w6IERhdGFDb2x1bW4pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJvdyAmJiBjb2wpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcm93LmdldFZhbHVlKGNvbC5rZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlPy5zdGFydHNXaXRoKCdtYXRlcmlhbC1pY29uczovLycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBhc0ljb25WYWx1ZShyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmlzSWNvblZhbHVlKHJvdywgY29sKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByb3cuZ2V0VmFsdWUoY29sLmtleSkgfHwgJyc7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgnbWF0ZXJpYWwtaWNvbnM6Ly8nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaXNDb2x1bW5Tb3J0ZWQoY29sOiBEYXRhQ29sdW1uLCBkaXJlY3Rpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoY29sICYmIGRpcmVjdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgc29ydGluZyA9IHRoaXMuZGF0YS5nZXRTb3J0aW5nKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1NvcnRpbmdFcXVhbChjb2wsIGRpcmVjdGlvbiwgc29ydGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGdldENvbnRleHRNZW51QWN0aW9ucyhyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbik6IGFueVtdIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRGF0YUNlbGxFdmVudChyb3csIGNvbCwgW10pO1xuICAgICAgICB0aGlzLnNob3dSb3dDb250ZXh0TWVudS5lbWl0KGV2ZW50KTtcbiAgICAgICAgcmV0dXJuIGV2ZW50LnZhbHVlLmFjdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0Um93QWN0aW9ucyhyb3c6IERhdGFSb3csIGNvbD86IERhdGFDb2x1bW4pOiBhbnlbXSB7XG4gICAgICAgIGNvbnN0IGlkID0gcm93LmdldFZhbHVlKCdpZCcpO1xuXG4gICAgICAgIGlmICghdGhpcy5yb3dNZW51Q2FjaGVbaWRdKSB7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBEYXRhQ2VsbEV2ZW50KHJvdywgY29sLCBbXSk7XG4gICAgICAgICAgICB0aGlzLnNob3dSb3dBY3Rpb25zTWVudS5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIGlmICghdGhpcy5yb3dNZW51Q2FjaGVFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUFjdGlvbnMoZXZlbnQudmFsdWUuYWN0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJvd01lbnVDYWNoZVtpZF0gPSBldmVudC52YWx1ZS5hY3Rpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZUFjdGlvbnModGhpcy5yb3dNZW51Q2FjaGVbaWRdKTtcbiAgICB9XG5cbiAgICBnZXRWaXNpYmxlQWN0aW9ucyhhY3Rpb25zOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIGFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi52aXNpYmxlIHx8IGFjdGlvbi52aXNpYmxlID09PSB1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIG9uRXhlY3V0ZVJvd0FjdGlvbihyb3c6IERhdGFSb3csIGFjdGlvbjogYW55KSB7XG4gICAgICAgIGlmIChhY3Rpb24uZGlzYWJsZWQgfHwgYWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVJvd0FjdGlvbi5lbWl0KG5ldyBEYXRhUm93QWN0aW9uRXZlbnQocm93LCBhY3Rpb24pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEhpZGVBY3Rpb25zV2l0aG91dEhvdmVyQ2xhc3MoYWN0aW9uc01lbnVUcmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikge1xuICAgICAgICByZXR1cm4geyAnYWRmLWRhdGF0YWJsZS1oaWRlLWFjdGlvbnMtd2l0aG91dC1ob3Zlcic6IHRoaXMuYWN0aW9uc1Zpc2libGVPbkhvdmVyICYmICFhY3Rpb25zTWVudVRyaWdnZXIubWVudU9wZW4gfTtcbiAgICB9XG5cbiAgICByb3dBbGxvd3NEcm9wKHJvdzogRGF0YVJvdyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gcm93LmlzRHJvcFRhcmdldCA9PT0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc1NpbmdsZVNlbGVjdGlvbk1vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgJiYgdGhpcy5zZWxlY3Rpb25Nb2RlLnRvTG93ZXJDYXNlKCkgPT09ICdzaW5nbGUnO1xuICAgIH1cblxuICAgIGlzTXVsdGlTZWxlY3Rpb25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlICYmIHRoaXMuc2VsZWN0aW9uTW9kZS50b0xvd2VyQ2FzZSgpID09PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIGdldFJvd1N0eWxlKHJvdzogRGF0YVJvdyk6IHN0cmluZyB7XG4gICAgICAgIHJvdy5jc3NDbGFzcyA9IHJvdy5jc3NDbGFzcyA/IHJvdy5jc3NDbGFzcyA6ICcnO1xuICAgICAgICB0aGlzLnJvd1N0eWxlQ2xhc3MgPSB0aGlzLnJvd1N0eWxlQ2xhc3MgPyB0aGlzLnJvd1N0eWxlQ2xhc3MgOiAnJztcbiAgICAgICAgY29uc3QgY29udGV4dE1lbnVTb3VyY2VDbGFzcyA9IHJvdy5pc0NvbnRleHRNZW51U291cmNlID8gJ2FkZi1jb250ZXh0LW1lbnUtc291cmNlJyA6ICcnO1xuICAgICAgICByZXR1cm4gYCR7cm93LmNzc0NsYXNzfSAke3RoaXMucm93U3R5bGVDbGFzc30gJHtjb250ZXh0TWVudVNvdXJjZUNsYXNzfWA7XG4gICAgfVxuXG4gICAgbWFya1Jvd0FzQ29udGV4dE1lbnVTb3VyY2Uoc2VsZWN0ZWRSb3c6IERhdGFSb3cpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0lkID0gc2VsZWN0ZWRSb3cuaWQgPyBzZWxlY3RlZFJvdy5pZCA6ICcnO1xuICAgICAgICB0aGlzLmRhdGEuZ2V0Um93cygpLmZvckVhY2goKHJvdykgPT4gKHJvdy5pc0NvbnRleHRNZW51U291cmNlID0gZmFsc2UpKTtcbiAgICAgICAgc2VsZWN0ZWRSb3cuaXNDb250ZXh0TWVudVNvdXJjZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSb3dBc0NvbnRleHRTb3VyY2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93ID0gdGhpcy5kYXRhLmdldFJvd3MoKS5maW5kKChyb3cpID0+IHRoaXMuc2VsZWN0ZWRSb3dJZCA9PT0gcm93LmlkKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkUm93KSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvdy5pc0NvbnRleHRNZW51U291cmNlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFJvdyhyb3c6IERhdGFSb3csIHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIHJvdy5pc1NlbGVjdGVkID0gdmFsdWU7XG4gICAgICAgICAgICBjb25zdCBpZHggPSByb3c/LmlkID8gdGhpcy5maW5kU2VsZWN0aW9uQnlJZChyb3cuaWQpIDogdGhpcy5zZWxlY3Rpb24uaW5kZXhPZihyb3cpO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlkeCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpbmRTZWxlY3Rpb25CeUlkKGlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24uZmluZEluZGV4KChzZWxlY3Rpb24pID0+IHNlbGVjdGlvbj8uaWQgPT09IGlkKTtcbiAgICB9XG5cbiAgICBnZXRDZWxsVG9vbHRpcChyb3c6IERhdGFSb3csIGNvbDogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIGlmIChyb3cgJiYgY29sICYmIGNvbC5mb3JtYXRUb29sdGlwKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQ6IHN0cmluZyA9IGNvbC5mb3JtYXRUb29sdGlwKHJvdywgY29sKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdldFNvcnRhYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRDb2x1bW5zKCkuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5zb3J0YWJsZSA9PT0gdHJ1ZSk7XG4gICAgfVxuXG4gICAgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5nZXRSb3dzKCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGlzSGVhZGVyVmlzaWJsZSgpIHtcbiAgICAgICAgbGV0IGhlYWRlclZpc2liaWxpdHk6IGJvb2xlYW47XG5cbiAgICAgICAgaWYgKHRoaXMuc2hvd0hlYWRlciA9PT0gU2hvd0hlYWRlck1vZGUuRGF0YSkge1xuICAgICAgICAgICAgaGVhZGVyVmlzaWJpbGl0eSA9ICF0aGlzLmxvYWRpbmcgJiYgIXRoaXMubm9QZXJtaXNzaW9uICYmICF0aGlzLmlzRW1wdHkoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNob3dIZWFkZXIgPT09IFNob3dIZWFkZXJNb2RlLkFsd2F5cykge1xuICAgICAgICAgICAgaGVhZGVyVmlzaWJpbGl0eSA9ICF0aGlzLmxvYWRpbmcgJiYgIXRoaXMubm9QZXJtaXNzaW9uO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd0hlYWRlciA9PT0gU2hvd0hlYWRlck1vZGUuTmV2ZXIpIHtcbiAgICAgICAgICAgIGhlYWRlclZpc2liaWxpdHkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGVhZGVyVmlzaWJpbGl0eTtcbiAgICB9XG5cbiAgICBpc1N0aWNreUhlYWRlckVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0aWNreUhlYWRlciAmJiB0aGlzLmlzSGVhZGVyVmlzaWJsZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5hbWU6IHN0cmluZywgcm93OiBEYXRhUm93KSB7XG4gICAgICAgIGNvbnN0IGRvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KG5hbWUsIHtcbiAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuc2VsZWN0aW9uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0U29ydGluZ0NoYW5nZWRFdmVudChrZXk6IHN0cmluZywgc29ydGluZ0tleTogc3RyaW5nLCBkaXJlY3Rpb246IHN0cmluZykge1xuICAgICAgICBjb25zdCBkb21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnc29ydGluZy1jaGFuZ2VkJywge1xuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgIHNvcnRpbmdLZXksXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYnViYmxlczogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChkb21FdmVudCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVDbGlja1N0cmVhbSgpO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzKSA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgICAgICBpZiAodGhpcy5kYXRhUm93c0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVJvd3NDaGFuZ2VkLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmRhdGFSb3dzQ2hhbmdlZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXROYW1lQ29sdW1uVmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0Q29sdW1ucygpLmZpbmQoKGVsOiBhbnkpID0+IGVsLmtleS5pbmNsdWRlcygnbmFtZScpKTtcbiAgICB9XG5cbiAgICBnZXRBdXRvbWF0aW9uVmFsdWUocm93OiBEYXRhUm93KTogYW55IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZ2V0TmFtZUNvbHVtblZhbHVlKCk7XG4gICAgICAgIHJldHVybiBuYW1lID8gcm93LmdldFZhbHVlKG5hbWUua2V5KSA6ICcnO1xuICAgIH1cblxuICAgIGdldEFyaWFTb3J0KGNvbHVtbjogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uKSkge1xuICAgICAgICAgICAgcmV0dXJuICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9OT05FJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29sdW1uU29ydGVkKGNvbHVtbiwgJ2FzYycpID8gJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TT1JUX0FTQ0VORElORycgOiAnQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlNPUlRfREVTQ0VORElORyc7XG4gICAgfVxuXG4gICAgZ2V0U29ydExpdmVBbm5vdW5jZW1lbnQoY29sdW1uOiBEYXRhQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29sdW1uU29ydEFjdGl2ZShjb2x1bW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TT1JUX0RFRkFVTFQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29sdW1uU29ydGVkKGNvbHVtbiwgJ2FzYycpXG4gICAgICAgICAgICA/ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9BU0NFTkRJTkdfQlknXG4gICAgICAgICAgICA6ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuU09SVF9ERVNDRU5ESU5HX0JZJztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyRHJhZ0hhbmRsZUljb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGljb25VcmwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0UmVzb3VyY2VVcmwoJy4vYXNzZXRzL2ltYWdlcy9kcmFnX2luZGljYXRvcl8yNHB4LnN2ZycpO1xuXG4gICAgICAgIHRoaXMubWF0SWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25Jbk5hbWVzcGFjZSgnYWRmJywgJ2RyYWdfaW5kaWNhdG9yJywgaWNvblVybCk7XG4gICAgfVxuXG4gICAgb25SZXNpemluZyh7IHJlY3RhbmdsZTogeyB3aWR0aCB9IH06IFJlc2l6ZUV2ZW50LCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZGF0YS5nZXRDb2x1bW5zKCkuZmlsdGVyKChjb2x1bW4pID0+ICFjb2x1bW4uaXNIaWRkZW4pO1xuICAgICAgICAgICAgYWxsQ29sdW1uc1tjb2xJbmRleF0ud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRDb2x1bW5zKGFsbENvbHVtbnMpO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSZXNpemluZykge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblJlc2l6aW5nRW5kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6aW5nQ29sdW1uSW5kZXggPSAtMTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbnNXaWR0aHMoKTtcbiAgICB9XG5cbiAgICBnZXRGbGV4VmFsdWUoeyB3aWR0aCA9IDAgfTogRGF0YUNvbHVtbik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgMCAxICR7d2lkdGggPCBEYXRhVGFibGVDb21wb25lbnQuTUlOSU1VTV9DT0xVTU5fU0laRSA/IERhdGFUYWJsZUNvbXBvbmVudC5NSU5JTVVNX0NPTFVNTl9TSVpFIDogd2lkdGh9cHhgO1xuICAgIH1cblxuICAgIGZpbHRlckRpc2FibGVkQ29sdW1ucyhpbmRleDogbnVtYmVyLCBfZHJhZzogQ2RrRHJhZywgZHJvcDogQ2RrRHJvcExpc3QpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFkcm9wLmdldFNvcnRlZEl0ZW1zKClbaW5kZXhdLmRpc2FibGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ29sdW1uc1dpZHRocygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuZGF0YS5nZXRDb2x1bW5zKCk7XG5cbiAgICAgICAgY29uc3QgaGVhZGVyQ29udGFpbmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hZGYtZGF0YXRhYmxlLWhlYWRlcicpO1xuXG4gICAgICAgIGlmIChoZWFkZXJDb250YWluZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckNvbnRhaW5lckNvbHVtbnMgPSBoZWFkZXJDb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnLmFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXInKTtcblxuICAgICAgICAgICAgaGVhZGVyQ29udGFpbmVyQ29sdW1ucy5mb3JFYWNoKChjb2x1bW46IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFsbENvbHVtbnNbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sdW1uc1tpbmRleF0ud2lkdGggPSBjb2x1bW4uY2xpZW50V2lkdGggLSBwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb2x1bW4pLnBhZGRpbmdMZWZ0LCAxMCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IGhlYWRlckNvbnRhaW5lckNvbHVtbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sdW1uc1tpbmRleF0ud2lkdGggPSBjb2x1bW4uY2xpZW50V2lkdGggLSBwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb2x1bW4pLnBhZGRpbmdSaWdodCwgMTApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsQ29sdW1uc1tpbmRleF0ud2lkdGggPSBjb2x1bW4uY2xpZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGEuc2V0Q29sdW1ucyhhbGxDb2x1bW5zKTtcblxuICAgICAgICB0aGlzLmNvbHVtbnNXaWR0aENoYW5nZWQuZW1pdChhbGxDb2x1bW5zKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzU29ydGluZ0VxdWFsKGNvbDogRGF0YUNvbHVtbiwgZGlyZWN0aW9uOiBzdHJpbmcsIHNvcnRpbmc6IERhdGFTb3J0aW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBzb3J0aW5nICYmIChzb3J0aW5nLmtleSA9PT0gY29sLmtleSB8fCBzb3J0aW5nLmtleSA9PT0gY29sLnNvcnRpbmdLZXkpICYmIHNvcnRpbmcuZGlyZWN0aW9uPy50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBkaXJlY3Rpb247XG4gICAgfVxuXG4gICAgZ2V0IGlzUmVzaXppbmcoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc2l6aW5nQ29sdW1uSW5kZXggPj0gMDtcbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVRhYmxlRHJvcEV2ZW50IHtcbiAgICBkZXRhaWw6IHtcbiAgICAgICAgdGFyZ2V0OiAnY2VsbCcgfCAnaGVhZGVyJztcbiAgICAgICAgZXZlbnQ6IEV2ZW50O1xuICAgICAgICBjb2x1bW46IERhdGFDb2x1bW47XG4gICAgICAgIHJvdz86IERhdGFSb3c7XG4gICAgfTtcblxuICAgIHByZXZlbnREZWZhdWx0KCk6IHZvaWQ7XG59XG4iLCI8ZGl2XG4gICAgcm9sZT1cImdyaWRcIlxuICAgICpuZ0lmPVwiZGF0YVwiXG4gICAgY2xhc3M9XCJhZGYtZnVsbC13aWR0aCBhZGYtZGF0YXRhYmxlLWxpc3RcIlxuICAgIFtjbGFzcy5hZGYtc3RpY2t5LWhlYWRlcl09XCJpc1N0aWNreUhlYWRlckVuYWJsZWQoKVwiXG4gICAgW2NsYXNzLmFkZi1kYXRhdGFibGUtLWVtcHR5XT1cIihpc0VtcHR5KCkgJiYgIWlzSGVhZGVyVmlzaWJsZSgpKSB8fCBsb2FkaW5nXCJcbiAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZS0tZW1wdHktLWhlYWRlci12aXNpYmxlXT1cImlzRW1wdHkoKSAmJiBpc0hlYWRlclZpc2libGUoKVwiPlxuICAgIDxkaXYgKm5nSWY9XCJpc0hlYWRlclZpc2libGUoKVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1oZWFkZXJcIiByb2xlPVwicm93Z3JvdXBcIiBbbmdDbGFzc109XCJ7ICdhZGYtc3Itb25seSc6ICFpc0hlYWRlclZpc2libGUoKSB9XCI+XG4gICAgICAgIDxhZGYtZGF0YXRhYmxlLXJvd1xuICAgICAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgICAgIGNka0Ryb3BMaXN0T3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiZmlsdGVyRGlzYWJsZWRDb2x1bW5zXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImRhdGF0YWJsZS1yb3ctaGVhZGVyXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNIZWFkZXJWaXNpYmxlKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLXJvd1wiXG4gICAgICAgICAgICByb2xlPVwicm93XCI+XG5cbiAgICAgICAgICAgIDwhLS0gQWN0aW9ucyAobGVmdCkgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aW9ucyAmJiBhY3Rpb25zUG9zaXRpb24gPT09ICdsZWZ0J1wiIGNsYXNzPVwiYWRmLWFjdGlvbnMtY29sdW1uIGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5BQ1RJT05TJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIENvbHVtbnMgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibXVsdGlzZWxlY3RcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggW2luZGV0ZXJtaW5hdGVdPVwiaXNTZWxlY3RBbGxJbmRldGVybWluYXRlXCIgW2NoZWNrZWRdPVwiaXNTZWxlY3RBbGxDaGVja2VkXCIgKGNoYW5nZSk9XCJvblNlbGVjdEFsbENsaWNrKCRldmVudClcIiBjbGFzcz1cImFkZi1jaGVja2JveC1zci1vbmx5XCI+e3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfQUxMJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC0te3tjb2wudHlwZSB8fCAndGV4dCd9fSB7e2NvbC5jc3NDbGFzc319IGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZS1jZWxsLWRhdGFcIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbCBvZiAoZGF0YS5nZXRDb2x1bW5zKCkgfCBmaWx0ZXJPdXRFdmVyeTonaXNIaWRkZW4nOnRydWUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1uSW5kZXggPSBpbmRleFxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdENvbHVtbiA9IGxhc3RcIlxuICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2F1dG9faWRfJyArIGNvbC5rZXlcIlxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdhZGYtc29ydGFibGUnOiBjb2wuc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgICdhZGYtZGF0YXRhYmxlX19jdXJzb3ItLXBvaW50ZXInOiAhaXNSZXNpemluZyxcbiAgICAgICAgICAgICAgICAgICAgJ2FkZi1kYXRhdGFibGVfX2hlYWRlci0tc29ydGVkLWFzYyc6IGlzQ29sdW1uU29ydGVkKGNvbCwgJ2FzYycpLFxuICAgICAgICAgICAgICAgICAgICAnYWRmLWRhdGF0YWJsZV9faGVhZGVyLS1zb3J0ZWQtZGVzYyc6IGlzQ29sdW1uU29ydGVkKGNvbCwgJ2Rlc2MnKX1cIlxuICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoY29sLndpZHRoKSAmJiAhbGFzdENvbHVtbiAmJiB7J2ZsZXgnOiBnZXRGbGV4VmFsdWUoY29sKX1cIlxuICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNvbC50aXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNvbHVtbkhlYWRlckNsaWNrKGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJvbkNvbHVtbkhlYWRlckNsaWNrKGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgIHJvbGU9XCJjb2x1bW5oZWFkZXJcIlxuICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpc0hlYWRlclZpc2libGUoKSA/IDAgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zb3J0XT1cImNvbC5zb3J0YWJsZSA/IChnZXRBcmlhU29ydChjb2wpIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICAgICAgIGNka0RyYWdMb2NrQXhpcz1cInhcIlxuICAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwiaXNEcmFnZ2luZ0hlYWRlckNvbHVtbiA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAoY2RrRHJhZ0Ryb3BwZWQpPVwib25Ecm9wSGVhZGVyQ29sdW1uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIiFjb2wuZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID0gY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJob3ZlcmVkSGVhZGVyQ29sdW1uSW5kZXggPSAtMVwiXG4gICAgICAgICAgICAgICAgIGFkZi1kcm9wLXpvbmUgZHJvcFRhcmdldD1cImhlYWRlclwiIFtkcm9wQ29sdW1uXT1cImNvbFwiPlxuXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBhZGYtcmVzaXphYmxlXG4gICAgICAgICAgICAgICAgICAgICNyZXNpemFibGVFbGVtZW50PVwiYWRmLXJlc2l6YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb3ZlclBhZGRpbmddPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAocmVzaXppbmcpPVwib25SZXNpemluZygkZXZlbnQsIGNvbHVtbkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIChyZXNpemVTdGFydCk9XCJyZXNpemluZ0NvbHVtbkluZGV4ID0gY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAocmVzaXplRW5kKT1cIm9uUmVzaXppbmdFbmQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYXV0b19oZWFkZXJfY29udGVudF9pZF8nICsgY29sLmtleVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlci1jb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlci1jb250ZW50LS1ob3ZlcmVkJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvdmVyZWRIZWFkZXJDb2x1bW5JbmRleCA9PT0gY29sdW1uSW5kZXggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFpc0RyYWdnaW5nSGVhZGVyQ29sdW1uICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhaXNSZXNpemluZyAmJiBjb2wuc29ydGFibGV9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sLmhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2wudGl0bGVcIiBtYXRUb29sdGlwPVwie3tjb2wudGl0bGUgfCB0cmFuc2xhdGV9fVwiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1jZWxsLXZhbHVlXCI+e3tjb2wudGl0bGUgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2wudGl0bGUgJiYgY29sLnNvcnRhYmxlICYmIGlzRHJhZ2dpbmdIZWFkZXJDb2x1bW5cIiBjbGFzcz1cImFkZi1zci1vbmx5XCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0U29ydExpdmVBbm5vdW5jZW1lbnQoY29sKSB8IHRyYW5zbGF0ZTogeyBzdHJpbmc6IGNvbC50aXRsZSB8IHRyYW5zbGF0ZSB9IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWNvbC50aXRsZSAmJiAhY29sLnNvcnRhYmxlICYmICFoZWFkZXJGaWx0ZXJUZW1wbGF0ZVwiIFthdHRyLnRpdGxlXT1cIidBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuRU1QVFlfSEVBREVSJyB8IHRyYW5zbGF0ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5oZWFkZXJcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbC5oZWFkZXJcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyRpbXBsaWNpdDogY29sfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWRmLWRhdGF0YWJsZV9faGVhZGVyLS1zb3J0ZWQtYXNjXT1cImlzQ29sdW1uU29ydGVkKGNvbCwgJ2FzYycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hZGYtZGF0YXRhYmxlX19oZWFkZXItLXNvcnRlZC1kZXNjXT1cImlzQ29sdW1uU29ydGVkKGNvbCwgJ2Rlc2MnKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiYWxsb3dGaWx0ZXJpbmdcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkZXJGaWx0ZXJUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7JGltcGxpY2l0OiBjb2x9XCI+PC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNka0RyYWdIYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXItZHJhZy1pY29uJzogIWlzUmVzaXppbmcgfVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaG92ZXJlZEhlYWRlckNvbHVtbkluZGV4ID09PSBjb2x1bW5JbmRleCAmJiAhaXNSZXNpemluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJhZGY6ZHJhZ19pbmRpY2F0b3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWRmLWRhdGF0YWJsZS1jZWxsLWhlYWRlci1kcmFnLWljb24tJytjb2wua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2FkZi1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzUmVzaXppbmdFbmFibGVkICYmIGNvbC5yZXNpemFibGUgJiYgIWxhc3RDb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJob3ZlcmVkSGVhZGVyQ29sdW1uSW5kZXggPT09IGNvbHVtbkluZGV4ICYmICFpc1Jlc2l6aW5nIHx8IHJlc2l6aW5nQ29sdW1uSW5kZXggPT09IGNvbHVtbkluZGV4ID8gJ2FkZi1kYXRhdGFibGVfX3Jlc2l6ZS1oYW5kbGUtdmlzaWJsZScgOiAnYWRmLWRhdGF0YWJsZV9fcmVzaXplLWhhbmRsZS1oaWRkZW4nXCJcbiAgICAgICAgICAgICAgICAgICAgYWRmLXJlc2l6ZS1oYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZV9fcmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXNpemFibGVDb250YWluZXJdPVwicmVzaXphYmxlRWxlbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWRhdGF0YWJsZV9fcmVzaXplLWhhbmRsZS0tZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtZHJvcC1oZWFkZXItY2VsbC1wbGFjZWhvbGRlclwiICpjZGtEcmFnUGxhY2Vob2xkZXI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBIZWFkZXIgYWN0aW9ucyAocmlnaHQpIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGFjdGlvbnMgJiYgYWN0aW9uc1Bvc2l0aW9uID09PSAncmlnaHQnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAobWFpbkFjdGlvblRlbXBsYXRlICYmIHNob3dNYWluRGF0YXRhYmxlQWN0aW9ucylcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWFjdGlvbnMtY29sdW1uIGFkZi1kYXRhdGFibGUtYWN0aW9ucy1tZW51IGFkZi1kYXRhdGFibGUtY2VsbC1oZWFkZXIgYWRmLWRhdGF0YWJsZV9fYWN0aW9ucy1jZWxsXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibWFpbkFjdGlvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImFkZi1kYXRhdGFibGUtbWFpbi1tZW51LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwie3sgJ0FERi1EQVRBVEFCTEUuQ09OVEVOVC1BQ1RJT05TLlNFTEVDVF9DT0xVTU5TJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICNtYWluTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJtYWluTWVudVRyaWdnZXIub3Blbk1lbnUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWFpbk1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj52aWV3X3dlZWtfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21haW5NZW51PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1haW5BY3Rpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBtYWluTWVudVRyaWdnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhZGYtc3Itb25seVwiPnt7ICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuQUNUSU9OUycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L2FkZi1kYXRhdGFibGUtcm93PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtYm9keVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FkZi1ibHVyLWRhdGF0YWJsZS1ib2R5JzogYmx1ck9uUmVzaXplICYmIChpc0RyYWdnaW5nSGVhZGVyQ29sdW1uIHx8IGlzUmVzaXppbmcpIH1cIlxuICAgICAgICByb2xlPVwicm93Z3JvdXBcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nICYmICFub1Blcm1pc3Npb25cIj5cbiAgICAgICAgICAgIDxhZGYtZGF0YXRhYmxlLXJvdyAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGEuZ2V0Um93cygpOyBsZXQgaWR4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0KT1cIm9uRW50ZXJLZXlQcmVzc2VkKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uUm93S2V5VXAocm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvblJvd0VudGVyS2V5RG93bihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgIFthZGYtdXBsb2FkXT1cInJvd0FsbG93c0Ryb3Aocm93KVwiXG4gICAgICAgICAgICAgICAgW2FkZi11cGxvYWQtZGF0YV09XCJyb3dcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInJvd1N0eWxlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRSb3dTdHlsZShyb3cpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2RhdGF0YWJsZS1yb3ctJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cIm1hcmtSb3dBc0NvbnRleHRNZW51U291cmNlKHJvdylcIj5cbiAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbnMgKGxlZnQpIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3Rpb25zICYmIGFjdGlvbnNQb3NpdGlvbiA9PT0gJ2xlZnQnXCIgcm9sZT1cImdyaWRjZWxsXCIgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm1lbnVcIiAjYWN0aW9uc01lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEhpZGVBY3Rpb25zV2l0aG91dEhvdmVyQ2xhc3MoYWN0aW9uc01lbnVUcmlnZ2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidBREYtREFUQVRBQkxFLkNPTlRFTlQtQUNUSU9OUy5UT09MVElQJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ2FjdGlvbl9tZW51X2xlZnRfJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cIidhY3Rpb25fbWVudV8nICsgaWR4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIGdldFJvd0FjdGlvbnMocm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCJhY3Rpb24udGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhlY3V0ZVJvd0FjdGlvbihyb3csIGFjdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJhY3Rpb24uaWNvblwiPnt7IGFjdGlvbi5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBhY3Rpb24udGl0bGUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxsYWJlbCAqbmdJZj1cIm11bHRpc2VsZWN0XCIgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwgYWRmLWRhdGF0YWJsZS1jaGVja2JveFwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3cuaXNTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNoZWNrZWRdPVwicm93LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DaGVja2JveENoYW5nZShyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2hlY2tib3gtc3Itb25seVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0FERi1EQVRBVEFCTEUuQUNDRVNTSUJJTElUWS5TRUxFQ1RfRklMRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgIGxldCBjb2wgb2YgKGRhdGEuZ2V0Q29sdW1ucygpIHwgZmlsdGVyT3V0RXZlcnk6J2lzSGlkZGVuJzp0cnVlKSxcbiAgICAgICAgICAgICAgICBsZXQgbGFzdENvbHVtbiA9IGxhc3Q7XCJcbiAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbCBhZGYtZGF0YXRhYmxlLWNlbGwtLXt7Y29sLnR5cGUgfHwgJ3RleHQnfX0ge3tjb2wuY3NzQ2xhc3N9fSBhZGYtZGF0YXRhYmxlLWNlbGwtZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJjb2wudGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cImdldEF1dG9tYXRpb25WYWx1ZShyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwicm93LmlzU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjb2wudGl0bGUgPyAoY29sLnRpdGxlIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2xpY2socm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9uRW50ZXJLZXlQcmVzc2VkKHJvdywgJGFueSgkZXZlbnQpKVwiXG4gICAgICAgICAgICAgICAgICAgICBbYWRmLWNvbnRleHQtbWVudV09XCJnZXRDb250ZXh0TWVudUFjdGlvbnMocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgIFthZGYtY29udGV4dC1tZW51LWVuYWJsZWRdPVwiY29udGV4dE1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgYWRmLWRyb3Atem9uZSBkcm9wVGFyZ2V0PVwiY2VsbFwiIFtkcm9wQ29sdW1uXT1cImNvbFwiIFtkcm9wUm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCIoY29sLndpZHRoKSAmJiAhbGFzdENvbHVtbiAmJiB7J2ZsZXgnOiBnZXRGbGV4VmFsdWUoY29sKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2wudGVtcGxhdGVcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VsbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImRhdGEuZ2V0Q29sdW1uVHlwZShyb3csIGNvbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInaW1hZ2UnXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJpc0ljb25WYWx1ZShyb3csIGNvbCk7IGVsc2Ugbm9faWNvbnZhbHVlXCI+e3sgYXNJY29uVmFsdWUocm93LCBjb2wpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9faWNvbnZhbHVlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3cuaXNTZWxlY3RlZCAmJiAhbXVsdGlzZWxlY3Q7IGVsc2Ugbm9fc2VsZWN0ZWRfcm93XCIgc3ZnSWNvbj1cInNlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub19zZWxlY3RlZF9yb3c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VudGVyLWltZy1pZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUpID09PSAnZGlzYWJsZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9ESVNBQkxFRCcgfCB0cmFuc2xhdGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9URVhUJyB8IHRyYW5zbGF0ZTp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FERi1EQVRBVEFCTEUuRklMRV9UWVBFLicgKyAoZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfCBmaWxlVHlwZSB8IHVwcGVyY2FzZSkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hbHRdPVwiKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUpID09PSAnZGlzYWJsZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9ESVNBQkxFRCcgfCB0cmFuc2xhdGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBREYtREFUQVRBQkxFLkFDQ0VTU0lCSUxJVFkuSUNPTl9URVhUJyB8IHRyYW5zbGF0ZTp7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdBREYtREFUQVRBQkxFLkZJTEVfVFlQRS4nICsgKGRhdGEuZ2V0VmFsdWUocm93LCBjb2wpIHwgZmlsZVR5cGUgfCB1cHBlcmNhc2UpIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwie3sgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCkgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUxvYWRpbmdFcnJvcigkZXZlbnQsIHJvdylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2ljb24nXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWljb24tY2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZi1pY29uLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZSBhZGYtY2VsbC1kYXRlXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2RhdGVfJyArIChkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKSB8IGFkZkxvY2FsaXplZERhdGU6ICdtZWRpdW0nKSBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1kYXRlLWNlbGwgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbnRlci1kYXRlLWNvbHVtbi1pZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRlQ29uZmlnXT1cImNvbC5kYXRlQ29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRmLWRhdGUtY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbG9jYXRpb24nXCIgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbG9jYXRpb24nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1sb2NhdGlvbi1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRmLWxvY2F0aW9uLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbGVTaXplJ1wiIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIiBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInZmlsZVNpemVfJyArIGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZmlsZXNpemUtY2VsbCBjbGFzcz1cImFkZi1kYXRhdGFibGUtY2VudGVyLXNpemUtY29sdW1uLWllXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImRhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc29sdmVyRm5dPVwicmVzb2x2ZXJGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCJnZXRDZWxsVG9vbHRpcChyb3csIGNvbClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGYtZmlsZXNpemUtY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCIndGV4dCdcIiBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ3RleHRfJyArIGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtZGF0YXRhYmxlLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb3B5Q29udGVudF09XCJjb2wuY29weUNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cImdldENlbGxUb29sdGlwKHJvdywgY29sKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FkZi1kYXRhdGFibGUtY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIiBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2Jvb2xlYW5fJyArIGRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhZGYtYm9vbGVhbi1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiZ2V0Q2VsbFRvb2x0aXAocm93LCBjb2wpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYWRmLWJvb2xlYW4tY2VsbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInanNvbidcIiBbYXR0ci50YWJpbmRleF09XCJkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKT8gMCA6IC0xXCIgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLWpzb24tY2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VkaXRhYmxlXT1cImNvbC5lZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGYtanNvbi1jZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidhbW91bnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY2VsbC12YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImRhdGEuZ2V0VmFsdWUocm93LCBjb2wsIHJlc29sdmVyRm4pPyAwIDogLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiJ2Ftb3VudF8nICsgZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1hbW91bnQtY2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzb2x2ZXJGbl09XCJyZXNvbHZlckZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeUNvbmZpZ109XCJjb2wuY3VycmVuY3lDb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGYtYW1vdW50LWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbik/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInbnVtYmVyXycgKyBkYXRhLmdldFZhbHVlKHJvdywgY29sLCByZXNvbHZlckZuKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YWRmLW51bWJlci1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNvbHZlckZuXT1cInJlc29sdmVyRm5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RlY2ltYWxDb25maWddPVwiY29sLmRlY2ltYWxDb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hZGYtbnVtYmVyLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoRGVmYXVsdCBjbGFzcz1cImFkZi1jZWxsLXZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gZW1wdHkgY2VsbCBmb3IgdW5rbm93biBjb2x1bW4gdHlwZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLnRlbXBsYXRlXCIgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLWNlbGwtdmFsdWVcIiBbYXR0ci50YWJpbmRleF09XCJjb2wuZm9jdXMgPyAwIDogbnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sLnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB7IGRhdGE6IGRhdGEsIHJvdzogcm93LCBjb2w6IGNvbCB9LCB2YWx1ZTogZGF0YS5nZXRWYWx1ZShyb3csIGNvbCwgcmVzb2x2ZXJGbikgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBSb3cgYWN0aW9ucyAocmlnaHQpIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChhY3Rpb25zICYmIGFjdGlvbnNQb3NpdGlvbiA9PT0gJ3JpZ2h0JykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChtYWluQWN0aW9uVGVtcGxhdGUgJiYgc2hvd01haW5EYXRhdGFibGVBY3Rpb25zKVwiXG4gICAgICAgICAgICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZGF0YXRhYmxlLWNlbGwgYWRmLWRhdGF0YWJsZV9fYWN0aW9ucy1jZWxsIGFkZi1kYXRhdGFibGUtY2VudGVyLWFjdGlvbnMtY29sdW1uLWllIGFkZi1kYXRhdGFibGUtYWN0aW9ucy1tZW51XCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihhY3Rpb25zICYmIGFjdGlvbnNQb3NpdGlvbiA9PT0gJ3JpZ2h0JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51XCIgI2FjdGlvbnNNZW51VHJpZ2dlcj1cIm1hdE1lbnVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SGlkZUFjdGlvbnNXaXRob3V0SG92ZXJDbGFzcyhhY3Rpb25zTWVudVRyaWdnZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQURGLURBVEFUQUJMRS5BQ0NFU1NJQklMSVRZLlJPV19PUFRJT05fQlVUVE9OJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInQURGLURBVEFUQUJMRS5DT05URU5ULUFDVElPTlMuVE9PTFRJUCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCInYWN0aW9uX21lbnVfcmlnaHRfJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtYXV0b21hdGlvbi1pZF09XCInYWN0aW9uX21lbnVfJyArIGlkeFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFjdGlvbnNNZW51VHJpZ2dlci5vcGVuTWVudSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSAjbWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBnZXRSb3dBY3Rpb25zKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cImFjdGlvbi50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFjdGlvbi50aXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aW9uLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkV4ZWN1dGVSb3dBY3Rpb24ocm93LCBhY3Rpb24pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImFjdGlvbi5pY29uXCI+e3sgYWN0aW9uLmljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBhY3Rpb24udGl0bGUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYWRmLWRhdGF0YWJsZS1yb3c+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFbXB0eSgpXCIgcm9sZT1cInJvd1wiIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLW5vLWNvbnRlbnQtY29udGFpbmVyIGFkZi1kYXRhdGFibGUtY2VsbFwiIHJvbGU9XCJncmlkY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJub0NvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ0ZvciBbbmdGb3JPZl09XCJbZGF0YV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nRm9yVGVtcGxhdGVdPVwibm9Db250ZW50VGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYWRmLWVtcHR5LWxpc3RcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiBub1Blcm1pc3Npb25cIlxuICAgICAgICAgICAgIHJvbGU9XCJyb3dcIlxuICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRhdGF0YWJsZS1yb3cgYWRmLW5vLXBlcm1pc3Npb25fX3Jvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1uby1wZXJtaXNzaW9uX19jZWxsIGFkZi1uby1jb250ZW50LWNvbnRhaW5lciBhZGYtZGF0YXRhYmxlLWNlbGxcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJub1Blcm1pc3Npb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nRm9yIFtuZ0Zvck9mXT1cIltkYXRhXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0ZvclRlbXBsYXRlXT1cIm5vUGVybWlzc2lvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBjbGFzcz1cImFkZi1kYXRhdGFibGUtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWRmLW5vLWNvbnRlbnQtY29udGFpbmVyIGFkZi1kYXRhdGFibGUtY2VsbFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImxvYWRpbmdUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nRm9yIFtuZ0Zvck9mXT1cIltkYXRhXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0ZvclRlbXBsYXRlXT1cImxvYWRpbmdUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==