@softheon/armature 17.15.14 → 17.15.16

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.
@@ -0,0 +1,3 @@
1
+ {
2
+ "module": "../fesm2022/softheon-armature-ag-grid-components.mjs"
3
+ }
@@ -39,7 +39,7 @@ export declare class SofTableComponent implements OnInit, OnChanges {
39
39
  /** Output updated column options event to save to user or browser storage */
40
40
  updatedColumnState: EventEmitter<ApplyColumnStateParams>;
41
41
  /** Output updated column options event to save to user or browser storage */
42
- filteredRowDataForExport: EventEmitter<any>;
42
+ filteredRowDataForExport: EventEmitter<ExportTableData>;
43
43
  /** the search input */
44
44
  gridSearchTextInput: ElementRef<HTMLInputElement>;
45
45
  /** The hidden element that announces when the table content changes from filter */
@@ -160,6 +160,14 @@ export declare class SofTableComponent implements OnInit, OnChanges {
160
160
  static ɵfac: i0.ɵɵFactoryDeclaration<SofTableComponent, never>;
161
161
  static ɵcmp: i0.ɵɵComponentDeclaration<SofTableComponent, "sof-table", never, { "rowData": { "alias": "rowData"; "required": false; }; "colDefs": { "alias": "colDefs"; "required": false; }; "sizeMode": { "alias": "sizeMode"; "required": false; }; "paginationPageSizeSelector": { "alias": "paginationPageSizeSelector"; "required": false; }; "enableSearch": { "alias": "enableSearch"; "required": false; }; "enableFilter": { "alias": "enableFilter"; "required": false; }; "enableColumnOptions": { "alias": "enableColumnOptions"; "required": false; }; "enableExport": { "alias": "enableExport"; "required": false; }; "showSaveColumnOptionsText": { "alias": "showSaveColumnOptionsText"; "required": false; }; "tableName": { "alias": "tableName"; "required": false; }; "savedColumnState": { "alias": "savedColumnState"; "required": false; }; }, { "updatedColumnState": "updatedColumnState"; "filteredRowDataForExport": "filteredRowDataForExport"; }, never, ["[sof-table-right-buttons]"], false, never>;
162
162
  }
163
+ interface ExportTableData {
164
+ tableHeaders?: Array<KeyValPair>;
165
+ rowData?: Array<any>;
166
+ }
167
+ interface KeyValPair {
168
+ key?: string;
169
+ value?: string;
170
+ }
163
171
  /** Used for setting filter values */
164
172
  declare class SofTableFilter {
165
173
  /** The column header */
@@ -422,18 +422,31 @@ export class SofTableComponent {
422
422
  }
423
423
  /** Emit the current filtered/sorted row data */
424
424
  exportFilteredRowData() {
425
- const exportedRows = [];
425
+ const rowData = [];
426
426
  const columns = this.gridApi.getAllDisplayedColumns().filter((col) => col.getColDef().headerName);
427
+ const tableHeaders = [];
428
+ columns.forEach((col) => {
429
+ const field = col.getColDef().field;
430
+ const name = col.getColDef().headerName;
431
+ tableHeaders.push({
432
+ key: field,
433
+ value: name
434
+ });
435
+ });
427
436
  this.gridApi.forEachNodeAfterFilterAndSort((node) => {
428
- const rowData = {};
437
+ const nodeData = {};
429
438
  columns.forEach(col => {
430
439
  const colId = col.getColId();
431
440
  // Use gridApi's getCellValue to get the value transformed by valueGetter
432
- rowData[colId] = this.gridApi.getCellValue({ rowNode: node, colKey: colId });
441
+ nodeData[colId] = this.gridApi.getCellValue({ rowNode: node, colKey: colId });
433
442
  });
434
- exportedRows.push(rowData);
443
+ rowData.push(nodeData);
435
444
  });
436
- this.filteredRowDataForExport.emit(exportedRows);
445
+ const exportData = {
446
+ tableHeaders,
447
+ rowData
448
+ };
449
+ this.filteredRowDataForExport.emit(exportData);
437
450
  }
438
451
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.7", ngImport: i0, type: SofTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
439
452
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.7", type: SofTableComponent, selector: "sof-table", inputs: { rowData: "rowData", colDefs: "colDefs", sizeMode: "sizeMode", paginationPageSizeSelector: "paginationPageSizeSelector", enableSearch: "enableSearch", enableFilter: "enableFilter", enableColumnOptions: "enableColumnOptions", enableExport: "enableExport", showSaveColumnOptionsText: "showSaveColumnOptionsText", tableName: "tableName", savedColumnState: "savedColumnState" }, outputs: { updatedColumnState: "updatedColumnState", filteredRowDataForExport: "filteredRowDataForExport" }, viewQueries: [{ propertyName: "gridSearchTextInput", first: true, predicate: ["gridSearchTextInput"], descendants: true }, { propertyName: "ariaResultsCount", first: true, predicate: ["ariaResultsCount"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div \r\n [fxShow]=\"isGridDataRendered()\"\r\n fxLayoutGap=\"16px\" m-b-24>\r\n @if (enableFilter && colFilters.length) {\r\n <button \r\n (click)=\"toggleFilterPanel()\" \r\n mat-flat-button class=\"sof-button-v2\"\r\n [class.filter-selected]=\"filterOpenState\" \r\n id=\"btn-enable-filter\" color=\"secondary\" size=\"small\">\r\n <i class=\"ph ph-bold ph-sliders-horizontal\" aria-hidden=\"true\"></i>\r\n {{'armature.sof-table.filter' | translate}}\r\n </button>\r\n }\r\n @if (enableSearch) {\r\n <mat-form-field class=\"sof-form-field table-search-field dense-4\" fxFlex=\"auto\">\r\n <span matPrefix>\r\n <i class=\"ph-bold ph-magnifying-glass search-icon\" aria-hidden=\"true\"></i>\r\n </span>\r\n <mat-label class=\"search-label\">{{'armature.sof-table.search' | translate}}</mat-label>\r\n <input \r\n (input)=\"onSearchTextChanged()\" \r\n #gridSearchTextInput matInput type=\"text\" id=\"gridSearchTextInput\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.search-filter-description' | translate\"/>\r\n </mat-form-field>\r\n }\r\n @if (enableColumnOptions) {\r\n <button \r\n (click)=\"openColumnOptions()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" id=\"open-column-options\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.column-options-btn' | translate\"\r\n [matTooltip]=\"'armature.sof-table.screen-reader.column-options-btn' | translate\"\r\n matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-pause\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n @if(enableExport) {\r\n <button \r\n (click)=\"exportFilteredRowData()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" id=\"export-table\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.export-table' | translate\"\r\n [matTooltip]=\"'armature.sof-table.screen-reader.export-table' | translate\"\r\n matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-export\" aria-hidden=\"true\"></i>\r\n </button>\r\n }\r\n <ng-content select=\"[sof-table-right-buttons]\"></ng-content>\r\n <!-- \r\n Only inject <button>'s inside an <ng-container sof-table-right-buttons>\r\n ... \r\n <ng-container sof-table-right-buttons>\r\n <button \r\n (click)=\"anyFunction()\"\r\n mat-flat-button class=\"sof-button-icon-v2\" \r\n color=\"secondary\" size=\"small\" aria-label=\"any button\"\r\n matTooltip=\"any button\" matTooltipPosition=\"below\" matTooltipClass=\"mdc-tooltip__surface below\">\r\n <i class=\"ph-bold ph-acorn\" aria-hidden=\"true\"></i>\r\n </button>\r\n </ng-container>\r\n ... \r\n note: make sure buttons have the following attributes to match others =\r\n `mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"`\r\n * remember to add aria-label and tooltip for icon button\r\n -->\r\n</div>\r\n\r\n<div #ariaResultsCount class=\"sr-only\" aria-live=\"assertive\"></div>\r\n\r\n@if (isGridDataRendered() && filterOpenState) {\r\n <fieldset \r\n class=\"filter-panel\" role=\"region\"\r\n [attr.aria-label]=\"'armature.sof-table.screen-reader.select-filters-description' | translate\">\r\n <p>\r\n <i class=\"ph ph-bold ph-sliders-horizontal\" aria-hidden=\"true\"></i>\r\n <span class=\"m-l-8\">{{'armature.sof-table.filter' | translate}}</span>\r\n </p>\r\n <div class=\"filter-panel-select-container m-v-20\">\r\n @for (colFilter of colFilters; let i = $index; track i) {\r\n <mat-form-field appearance=\"outline\" class=\"sof-form-field table-filter-select\">\r\n <mat-label>{{colFilter.label}}</mat-label>\r\n <mat-select \r\n [(ngModel)]=\"filterSelections[i]\" \r\n multiple \r\n id=\"filterDropdown{{i}}\"\r\n placeholder=\"{{'armature.sof-table.all' | translate}}\" disableRipple=\"true\">\r\n @for (colOption of colFilter.options; track $index) {\r\n <mat-option [value]=\"colOption\">\r\n {{colOption}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n <div fxLayout=\"row\">\r\n <div fxFlex=\"50%\">\r\n <button \r\n (click)=\"clearFilters()\" [disabled]=\"hasEmptyFilters()\" \r\n mat-button class=\"sof-button-v2\" size=\"medium\"\r\n id=\"tableFilterClear\" color=\"tertiary\">\r\n {{'armature.sof-table.reset' | translate}}\r\n </button>\r\n </div>\r\n <div fxFlex=\"50%\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"2%\" fxLayoutAlign=\"flex-end\">\r\n <div fxFlex=\"0 1 auto\">\r\n <button \r\n (click)=\"cancelFilterChanges()\" mat-button class=\"sof-button-v2\" \r\n size=\"medium\" id=\"tableFilterCancel\" color=\"tertiary\">\r\n {{'armature.sof-table.cancel' | translate}}\r\n </button>\r\n </div>\r\n <div fxFlex=\"0 1 auto\">\r\n <button \r\n (click)=\"applyFilters()\" mat-flat-button class=\"sof-button-v2\"\r\n size=\"medium\" id=\"tableFilterApply\" color=\"primary\">\r\n {{'armature.sof-table.results' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </fieldset>\r\n}\r\n\r\n<ag-grid-angular \r\n [fxShow]=\"isGridDataRendered()\"\r\n (gridReady)=\"onGridReady($event)\" \r\n (firstDataRendered)=\"onFirstDataRendered()\"\r\n (filterChanged)=\"onFilterChanged()\"\r\n (paginationChanged)=\"changePageSize($event)\" \r\n [rowData]=\"rowData\" \r\n [columnDefs]=\"colDefs\" \r\n [defaultColDef]=\"defaultColDef\" \r\n [pagination]=\"true\" \r\n [suppressPaginationPanel]=\"true\"\r\n [paginationPageSizeSelector]=\"paginationPageSizeSelector\" \r\n [paginationPageSize]=\"paginationPageSize\"\r\n [headerHeight]=\"rowHeight\" \r\n [rowHeight]=\"rowHeight\" \r\n [domLayout]=\"'autoHeight'\" \r\n [tooltipShowDelay]=\"tooltipShowDelay\"\r\n [overlayNoRowsTemplate]=\"'armature.sof-table.no-rows' | translate\"\r\n [class.no-rows]=\"!totalLength\"\r\n class=\"ag-theme-material\">\r\n</ag-grid-angular>\r\n\r\n<div \r\n [fxShow]=\"isGridDataRendered()\"\r\n class=\"custom-paginator\">\r\n <div class=\"first-section\">\r\n <button class=\"button-part-1\" type=\"button\">\r\n <mat-select \r\n #pageSizeSelect\r\n id=\"pageSizeInput\" name=\"pageSizeInput\" \r\n [(value)]=\"paginationPageSize\" disableRipple=\"true\">\r\n @for (size of paginationPageSizeSelector; let i = $index; track i) {\r\n <mat-option \r\n class=\"page-option\" id=\"size{{i}}\"\r\n [value]=\"paginationPageSizeSelector[i]\">\r\n {{size}}\r\n </mat-option>\r\n }\r\n <mat-select-trigger>\r\n <div class=\"field\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{paginationPageSize}}</span>\r\n </span>\r\n <span class=\"select-icon\">\r\n <i [class]=\"'ph-bold ph-caret-' + (pageSizeSelect.panelOpen ? 'up':'down')\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n </mat-select-trigger>\r\n </mat-select>\r\n </button>\r\n <span class=\"pageChangeText\">\r\n {{pageChangeText}} {{'armature.sof-table.of' | translate}} {{totalLength}}\r\n </span>\r\n </div>\r\n <div class=\"go-to-page\">\r\n <div class=\"outer-box\">\r\n <button class=\"button-part\" type=\"button\">\r\n <mat-select \r\n #pageNumberSelect\r\n (selectionChange)=\"onPageNumberChange($event.value)\"\r\n [(value)]=\"currentPage\" \r\n id=\"pageSelelctor\" name=\"pageSelector\" disableRipple=\"true\">\r\n @for (page of pageSelector; track $index) {\r\n <mat-option [value]=\"page\" class=\"page-option\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{page}}</span>\r\n </span>\r\n </mat-option>\r\n }\r\n <mat-select-trigger>\r\n <div class=\"field\">\r\n <span class=\"current-page\">\r\n <span class=\"page\">{{currentPage}}</span>\r\n <span class=\"of-page\"> {{'armature.sof-table.of' | translate}} {{totalNumberOfPages}} </span>\r\n </span>\r\n <span class=\"select-icon\">\r\n <i [class]=\"'ph-bold ph-caret-' + (pageNumberSelect.panelOpen ? 'up':'down')\" aria-hidden=\"true\"></i>\r\n </span>\r\n </div>\r\n </mat-select-trigger>\r\n </mat-select>\r\n </button>\r\n </div>\r\n <nav class=\"second-section\">\r\n <button \r\n (click)=\"previousPage()\"\r\n id=\"prev-button\" mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"\r\n [disabled]=\"currentPage === 1\" \r\n [attr.aria-label]=\"'screen-reader.pagination.previous' | translate\">\r\n <i class=\"ph-bold ph-caret-left\" aria-hidden=\"true\"></i>\r\n </button>\r\n <button \r\n (click)=\"nextPage()\" \r\n id=\"next-button\" mat-flat-button class=\"sof-button-icon-v2\" color=\"secondary\" size=\"small\"\r\n [disabled]=\"currentPage === totalNumberOfPages\"\r\n [attr.aria-label]=\"'screen-reader.pagination.next' | translate\">\r\n <i class=\"ph-bold ph-caret-right\" aria-hidden=\"true\"></i>\r\n </button>\r\n </nav>\r\n </div>\r\n</div>\r\n\r\n@if (!isGridDataRendered()) {\r\n <div class=\"loading-container\">\r\n <mat-progress-spinner color=\"primary\" mode=\"indeterminate\"/>\r\n </div>\r\n}\r\n", styles: ["@font-face{font-family:agGridMaterial;src:url(data:font/woff2;charset=utf-8;base64,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);font-weight:400;font-style:normal}.ag-theme-material,.ag-theme-material-dark,.ag-theme-material-auto-dark{--ag-material-primary-color: #3f51b5;--ag-material-accent-color: #ff4081;--ag-foreground-color: rgba(0, 0, 0, .87);--ag-secondary-foreground-color: rgba(0, 0, 0, .54);--ag-disabled-foreground-color: rgba(0, 0, 0, .38);--ag-background-color: #fff;--ag-header-background-color: #fff;--ag-tooltip-background-color: #fff;--ag-subheader-background-color: #eee;--ag-subheader-toolbar-background-color: rgba(238, 238, 238, .5);--ag-header-cell-hover-background-color: #f2f2f2;--ag-chip-background-color: #e2e2e2;--ag-range-selection-background-color: rgba(122, 134, 203, .1);--ag-range-selection-background-color-2: rgba(122, 134, 203, .19);--ag-range-selection-background-color-3: rgba(122, 134, 203, .27);--ag-range-selection-background-color-4: rgba(122, 134, 203, .34);--ag-range-selection-highlight-color: #fce4ec;--ag-row-hover-color: #fafafa;--ag-column-hover-color: #fafafa;--ag-control-panel-background-color: #fafafa;--ag-selected-row-background-color: rgba(33, 150, 243, .3);--ag-checkbox-unchecked-color: #333;--ag-value-change-value-highlight-background-color: #00acc1;--ag-side-button-selected-background-color: transparent;--ag-advanced-filter-join-pill-color: #f08e8d;--ag-advanced-filter-column-pill-color: #a6e194;--ag-advanced-filter-option-pill-color: #f3c08b;--ag-advanced-filter-value-pill-color: #85c0e4;--ag-range-selection-border-color: var(--ag-material-primary-color);--ag-checkbox-checked-color: var(--ag-material-accent-color);--ag-borders: none;--ag-borders-critical: solid 1px;--ag-border-color: #e2e2e2;--ag-grid-size: 8px;--ag-icon-size: 18px;--ag-header-height: calc(var(--ag-grid-size) * 7);--ag-row-height: calc(var(--ag-grid-size) * 6);--ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);--ag-list-item-height: calc(var(--ag-grid-size) * 4);--ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));--ag-filter-tool-panel-sub-level-row-height: calc(var(--ag-grid-size) * 4);--ag-checkbox-border-radius: 2px;--ag-toggle-button-switch-border-width: 2px;--ag-toggle-button-height: var(--ag-icon-size);--ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 1.5);--ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 2);--ag-widget-vertical-spacing: calc(var(--ag-grid-size) * 1.75);--ag-font-family: Roboto, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;--ag-font-size: 13px;--ag-icon-font-family: agGridMaterial;--ag-selected-tab-underline-color: var(--ag-material-primary-color);--ag-selected-tab-underline-width: 2px;--ag-input-focus-border-color: var(--ag-material-primary-color);--ag-input-focus-box-shadow: 0 0 0 5px rgba(32, 33, 36, .122);--ag-card-shadow: 0 3px 1px -2px rgba(0, 0, 0, .2), 0 2px 2px 0 rgba(0, 0, 0, .14), 0 1px 5px 0 rgba(0, 0, 0, .12);--ag-card-radius: 2px;--ag-invalid-color: #e02525}.ag-theme-material-dark{--ag-material-primary-color: #3f51b5;--ag-material-accent-color: #bb86fcff;--ag-range-selection-border-color: var(--ag-material-accent-color);--ag-background-color: #121212ff;--ag-foreground-color: #ffffffff;--ag-data-color: #f5f5f5ff;--ag-header-cell-hover-background-color: #000000ff;--ag-advanced-filter-join-pill-color: #7a3a37ff;--ag-advanced-filter-column-pill-color: #355f2dff;--ag-advanced-filter-option-pill-color: #5a3168ff;--ag-advanced-filter-value-pill-color: #374c86ff;--ag-input-disabled-border-color: #3a434eff;--ag-input-disabled-background-color: #68686e12;--ag-selected-row-background-color: #bb86fc33;--ag-row-hover-color: #bb86fc33;--ag-column-hover-color: #f5f5f50d;--ag-range-selection-background-color: #bb86fc1a;--ag-range-selection-background-color-2: #bb86fc30;--ag-range-selection-background-color-3: #bb86fc45;--ag-range-selection-background-color-4: #bb86fc57;--ag-border-color: #383838ff;--ag-secondary-border-color: #383838ff;--ag-header-background-color: #121212ff;--ag-tooltip-background-color: #212b38ff;--ag-odd-row-background-color: #121212ff;--ag-control-panel-background-color: #2c2c2cff;--ag-subheader-background-color: #ffffff0d;--ag-subheader-toolbar-background-color: #2c2c2cff;--ag-invalid-color: #e02525ff;--ag-checkbox-unchecked-color: #797e87ff;--ag-checkbox-background-color: #121212ff;--ag-secondary-foreground-color: #f5f5f5ff;--ag-input-border-color: #383838ff;--ag-input-border-color-invalid: #e02525ff;--ag-disabled-foreground-color: #f5f5f580;--ag-chip-background-color: #22262812;--ag-side-button-selected-background-color: #2c2c2cff;--ag-selected-tab-underline-color: #3f51b5ff;--ag-modal-overlay-background-color: #121212a8;--ag-value-change-delta-up-color: #43a047a8;--ag-value-change-delta-down-color: #e53935ff;--ag-menu-background-color: #2c2c2cff;--ag-row-loading-skeleton-effect-color: rgba(202, 203, 204, .4);color-scheme:dark}@media (prefers-color-scheme: dark){.ag-theme-material-auto-dark{--ag-material-primary-color: #3f51b5;--ag-material-accent-color: #bb86fcff;--ag-range-selection-border-color: var(--ag-material-accent-color);--ag-background-color: #121212ff;--ag-foreground-color: #ffffffff;--ag-data-color: #f5f5f5ff;--ag-header-cell-hover-background-color: #000000ff;--ag-advanced-filter-join-pill-color: #7a3a37ff;--ag-advanced-filter-column-pill-color: #355f2dff;--ag-advanced-filter-option-pill-color: #5a3168ff;--ag-advanced-filter-value-pill-color: #374c86ff;--ag-input-disabled-border-color: #3a434eff;--ag-input-disabled-background-color: #68686e12;--ag-selected-row-background-color: #bb86fc33;--ag-row-hover-color: #bb86fc33;--ag-column-hover-color: #f5f5f50d;--ag-range-selection-background-color: #bb86fc1a;--ag-range-selection-background-color-2: #bb86fc30;--ag-range-selection-background-color-3: #bb86fc45;--ag-range-selection-background-color-4: #bb86fc57;--ag-border-color: #383838ff;--ag-secondary-border-color: #383838ff;--ag-header-background-color: #121212ff;--ag-tooltip-background-color: #212b38ff;--ag-odd-row-background-color: #121212ff;--ag-control-panel-background-color: #2c2c2cff;--ag-subheader-background-color: #ffffff0d;--ag-subheader-toolbar-background-color: #2c2c2cff;--ag-invalid-color: #e02525ff;--ag-checkbox-unchecked-color: #797e87ff;--ag-checkbox-background-color: #121212ff;--ag-secondary-foreground-color: #f5f5f5ff;--ag-input-border-color: #383838ff;--ag-input-border-color-invalid: #e02525ff;--ag-disabled-foreground-color: #f5f5f580;--ag-chip-background-color: #22262812;--ag-side-button-selected-background-color: #2c2c2cff;--ag-selected-tab-underline-color: #3f51b5ff;--ag-modal-overlay-background-color: #121212a8;--ag-value-change-delta-up-color: #43a047a8;--ag-value-change-delta-down-color: #e53935ff;--ag-menu-background-color: #2c2c2cff;--ag-row-loading-skeleton-effect-color: rgba(202, 203, 204, .4);color-scheme:dark}}.ag-theme-material .ag-filter-toolpanel-header,.ag-theme-material .ag-filter-toolpanel-search,.ag-theme-material .ag-status-bar,.ag-theme-material .ag-header-row,.ag-theme-material .ag-panel-title-bar-title,.ag-theme-material .ag-multi-filter-group-title-bar,.ag-theme-material-dark .ag-filter-toolpanel-header,.ag-theme-material-dark .ag-filter-toolpanel-search,.ag-theme-material-dark .ag-status-bar,.ag-theme-material-dark .ag-header-row,.ag-theme-material-dark .ag-panel-title-bar-title,.ag-theme-material-dark .ag-multi-filter-group-title-bar,.ag-theme-material-auto-dark .ag-filter-toolpanel-header,.ag-theme-material-auto-dark .ag-filter-toolpanel-search,.ag-theme-material-auto-dark .ag-status-bar,.ag-theme-material-auto-dark .ag-header-row,.ag-theme-material-auto-dark .ag-panel-title-bar-title,.ag-theme-material-auto-dark .ag-multi-filter-group-title-bar{font-size:calc(var(--ag-font-size) - 1px);font-weight:600;color:var(--ag-header-foreground-color)}.ag-theme-material .ag-tab,.ag-theme-material-dark .ag-tab,.ag-theme-material-auto-dark .ag-tab{height:calc(var(--ag-grid-size) * 4.5);flex:1 1 auto}.ag-theme-material .ag-tabs-header,.ag-theme-material .ag-column-drop-horizontal,.ag-theme-material-dark .ag-tabs-header,.ag-theme-material-dark .ag-column-drop-horizontal,.ag-theme-material-auto-dark .ag-tabs-header,.ag-theme-material-auto-dark .ag-column-drop-horizontal{background-color:var(--ag-subheader-background-color)}.ag-theme-material .ag-tabs-body,.ag-theme-material-dark .ag-tabs-body,.ag-theme-material-auto-dark .ag-tabs-body{padding:calc(var(--ag-grid-size) * .5) 0}.ag-theme-material .ag-tabs-body .ag-menu-list,.ag-theme-material-dark .ag-tabs-body .ag-menu-list,.ag-theme-material-auto-dark .ag-tabs-body .ag-menu-list{padding-top:0;padding-bottom:0}.ag-theme-material .ag-header-cell,.ag-theme-material .ag-header-group-cell,.ag-theme-material-dark .ag-header-cell,.ag-theme-material-dark .ag-header-group-cell,.ag-theme-material-auto-dark .ag-header-cell,.ag-theme-material-auto-dark .ag-header-group-cell{transition:background-color .5s}.ag-theme-material .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing,.ag-theme-material-dark .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing,.ag-theme-material-auto-dark .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing{bottom:0}.ag-theme-material .ag-cell-inline-editing,.ag-theme-material-dark .ag-cell-inline-editing,.ag-theme-material-auto-dark .ag-cell-inline-editing{padding:var(--ag-grid-size);height:calc(var(--ag-row-height) + var(--ag-grid-size) * 3);border-color:var(--ag-border-color)!important}.ag-theme-material .ag-has-focus .ag-cell-inline-editing,.ag-theme-material-dark .ag-has-focus .ag-cell-inline-editing,.ag-theme-material-auto-dark .ag-has-focus .ag-cell-inline-editing{border-color:var(--ag-input-focus-border-color)!important}.ag-theme-material .ag-column-drop-vertical,.ag-theme-material-dark .ag-column-drop-vertical,.ag-theme-material-auto-dark .ag-column-drop-vertical{border-bottom:solid 1px;border-bottom-color:var(--ag-border-color);padding-top:var(--ag-grid-size)}.ag-theme-material .ag-column-drop-vertical.ag-last-column-drop,.ag-theme-material-dark .ag-column-drop-vertical.ag-last-column-drop,.ag-theme-material-auto-dark .ag-column-drop-vertical.ag-last-column-drop{border-bottom:none}.ag-theme-material .ag-column-drop-vertical-cell,.ag-theme-material-dark .ag-column-drop-vertical-cell,.ag-theme-material-auto-dark .ag-column-drop-vertical-cell{margin-left:0}.ag-theme-material .ag-column-drop-vertical-empty-message,.ag-theme-material-dark .ag-column-drop-vertical-empty-message,.ag-theme-material-auto-dark .ag-column-drop-vertical-empty-message{font-size:calc(var(--ag-font-size) - 1px);font-weight:600;color:var(--ag-disabled-foreground-color)}.ag-theme-material .ag-ltr .ag-column-drop-vertical-empty-message,.ag-theme-material-dark .ag-ltr .ag-column-drop-vertical-empty-message,.ag-theme-material-auto-dark .ag-ltr .ag-column-drop-vertical-empty-message{padding-left:calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);padding-right:var(--ag-grid-size)}.ag-theme-material .ag-rtl .ag-column-drop-vertical-empty-message,.ag-theme-material-dark .ag-rtl .ag-column-drop-vertical-empty-message,.ag-theme-material-auto-dark .ag-rtl .ag-column-drop-vertical-empty-message{padding-right:calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);padding-left:var(--ag-grid-size)}.ag-theme-material .ag-status-bar,.ag-theme-material-dark .ag-status-bar,.ag-theme-material-auto-dark .ag-status-bar{border:solid 1px;border-color:var(--ag-border-color)}.ag-theme-material .ag-column-panel-column-select,.ag-theme-material-dark .ag-column-panel-column-select,.ag-theme-material-auto-dark .ag-column-panel-column-select{border-top:solid 1px;border-top-color:var(--ag-border-color)}.ag-theme-material .ag-column-select,.ag-theme-material .ag-column-select-header,.ag-theme-material-dark .ag-column-select,.ag-theme-material-dark .ag-column-select-header,.ag-theme-material-auto-dark .ag-column-select,.ag-theme-material-auto-dark .ag-column-select-header{border-bottom:solid 1px;border-bottom-color:var(--ag-border-color)}.ag-theme-material .ag-column-select-header,.ag-theme-material-dark .ag-column-select-header,.ag-theme-material-auto-dark .ag-column-select-header{height:var(--ag-header-height)}.ag-theme-material .ag-group-title-bar,.ag-theme-material-dark .ag-group-title-bar,.ag-theme-material-auto-dark .ag-group-title-bar{padding:calc(var(--ag-grid-size) * .75) var(--ag-grid-size)}.ag-theme-material .ag-charts-format-sub-level-group-title-bar,.ag-theme-material-dark .ag-charts-format-sub-level-group-title-bar,.ag-theme-material-auto-dark .ag-charts-format-sub-level-group-title-bar{padding:calc(var(--ag-grid-size) * .5) var(--ag-grid-size)}.ag-theme-material .ag-chart-data-section,.ag-theme-material .ag-chart-format-section,.ag-theme-material .ag-chart-advanced-settings-section,.ag-theme-material-dark .ag-chart-data-section,.ag-theme-material-dark .ag-chart-format-section,.ag-theme-material-dark .ag-chart-advanced-settings-section,.ag-theme-material-auto-dark .ag-chart-data-section,.ag-theme-material-auto-dark .ag-chart-format-section,.ag-theme-material-auto-dark .ag-chart-advanced-settings-section{padding-bottom:calc(var(--ag-grid-size) * .5)}.ag-theme-material .ag-chart-menu-close,.ag-theme-material-dark .ag-chart-menu-close,.ag-theme-material-auto-dark .ag-chart-menu-close{background:var(--ag-background-color)}.ag-theme-material .ag-chart-menu-close .ag-icon,.ag-theme-material-dark .ag-chart-menu-close .ag-icon,.ag-theme-material-auto-dark .ag-chart-menu-close .ag-icon{background:var(--ag-subheader-background-color)}.ag-theme-material input[class^=ag-]:not([type]),.ag-theme-material input[class^=ag-][type=text],.ag-theme-material input[class^=ag-][type=number],.ag-theme-material input[class^=ag-][type=tel],.ag-theme-material input[class^=ag-][type=date],.ag-theme-material input[class^=ag-][type=datetime-local],.ag-theme-material textarea[class^=ag-],.ag-theme-material-dark input[class^=ag-]:not([type]),.ag-theme-material-dark input[class^=ag-][type=text],.ag-theme-material-dark input[class^=ag-][type=number],.ag-theme-material-dark input[class^=ag-][type=tel],.ag-theme-material-dark input[class^=ag-][type=date],.ag-theme-material-dark input[class^=ag-][type=datetime-local],.ag-theme-material-dark textarea[class^=ag-],.ag-theme-material-auto-dark input[class^=ag-]:not([type]),.ag-theme-material-auto-dark input[class^=ag-][type=text],.ag-theme-material-auto-dark input[class^=ag-][type=number],.ag-theme-material-auto-dark input[class^=ag-][type=tel],.ag-theme-material-auto-dark input[class^=ag-][type=date],.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local],.ag-theme-material-auto-dark textarea[class^=ag-]{background:transparent;color:var(--ag-foreground-color);font-family:inherit;font-size:inherit;height:calc(var(--ag-grid-size) * 5);padding-bottom:var(--ag-grid-size);border-width:0;border-radius:0;border-bottom:2px solid;border-bottom-color:var(--ag-border-color)}.ag-theme-material input[class^=ag-]:not([type]):focus,.ag-theme-material input[class^=ag-][type=text]:focus,.ag-theme-material input[class^=ag-][type=number]:focus,.ag-theme-material input[class^=ag-][type=tel]:focus,.ag-theme-material input[class^=ag-][type=date]:focus,.ag-theme-material input[class^=ag-][type=datetime-local]:focus,.ag-theme-material textarea[class^=ag-]:focus,.ag-theme-material-dark input[class^=ag-]:not([type]):focus,.ag-theme-material-dark input[class^=ag-][type=text]:focus,.ag-theme-material-dark input[class^=ag-][type=number]:focus,.ag-theme-material-dark input[class^=ag-][type=tel]:focus,.ag-theme-material-dark input[class^=ag-][type=date]:focus,.ag-theme-material-dark input[class^=ag-][type=datetime-local]:focus,.ag-theme-material-dark textarea[class^=ag-]:focus,.ag-theme-material-auto-dark input[class^=ag-]:not([type]):focus,.ag-theme-material-auto-dark input[class^=ag-][type=text]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=number]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=tel]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=date]:focus,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]:focus,.ag-theme-material-auto-dark textarea[class^=ag-]:focus{border-bottom:2px solid;border-bottom-color:var(--ag-material-primary-color);outline:none;box-shadow:none}.ag-theme-material input[class^=ag-]:not([type])::placeholder,.ag-theme-material input[class^=ag-][type=text]::placeholder,.ag-theme-material input[class^=ag-][type=number]::placeholder,.ag-theme-material input[class^=ag-][type=tel]::placeholder,.ag-theme-material input[class^=ag-][type=date]::placeholder,.ag-theme-material input[class^=ag-][type=datetime-local]::placeholder,.ag-theme-material textarea[class^=ag-]::placeholder,.ag-theme-material-dark input[class^=ag-]:not([type])::placeholder,.ag-theme-material-dark input[class^=ag-][type=text]::placeholder,.ag-theme-material-dark input[class^=ag-][type=number]::placeholder,.ag-theme-material-dark input[class^=ag-][type=tel]::placeholder,.ag-theme-material-dark input[class^=ag-][type=date]::placeholder,.ag-theme-material-dark input[class^=ag-][type=datetime-local]::placeholder,.ag-theme-material-dark textarea[class^=ag-]::placeholder,.ag-theme-material-auto-dark input[class^=ag-]:not([type])::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=text]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=number]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=tel]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=date]::placeholder,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]::placeholder,.ag-theme-material-auto-dark textarea[class^=ag-]::placeholder{color:var(--ag-disabled-foreground-color)}.ag-theme-material input[class^=ag-]:not([type]):disabled,.ag-theme-material input[class^=ag-][type=text]:disabled,.ag-theme-material input[class^=ag-][type=number]:disabled,.ag-theme-material input[class^=ag-][type=tel]:disabled,.ag-theme-material input[class^=ag-][type=date]:disabled,.ag-theme-material input[class^=ag-][type=datetime-local]:disabled,.ag-theme-material textarea[class^=ag-]:disabled,.ag-theme-material-dark input[class^=ag-]:not([type]):disabled,.ag-theme-material-dark input[class^=ag-][type=text]:disabled,.ag-theme-material-dark input[class^=ag-][type=number]:disabled,.ag-theme-material-dark input[class^=ag-][type=tel]:disabled,.ag-theme-material-dark input[class^=ag-][type=date]:disabled,.ag-theme-material-dark input[class^=ag-][type=datetime-local]:disabled,.ag-theme-material-dark textarea[class^=ag-]:disabled,.ag-theme-material-auto-dark input[class^=ag-]:not([type]):disabled,.ag-theme-material-auto-dark input[class^=ag-][type=text]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=number]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=tel]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=date]:disabled,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]:disabled,.ag-theme-material-auto-dark textarea[class^=ag-]:disabled{border-bottom:1px solid;border-bottom-color:var(--ag-border-color)}.ag-theme-material input[class^=ag-]:not([type]):invalid,.ag-theme-material input[class^=ag-][type=text]:invalid,.ag-theme-material input[class^=ag-][type=number]:invalid,.ag-theme-material input[class^=ag-][type=tel]:invalid,.ag-theme-material input[class^=ag-][type=date]:invalid,.ag-theme-material input[class^=ag-][type=datetime-local]:invalid,.ag-theme-material textarea[class^=ag-]:invalid,.ag-theme-material-dark input[class^=ag-]:not([type]):invalid,.ag-theme-material-dark input[class^=ag-][type=text]:invalid,.ag-theme-material-dark input[class^=ag-][type=number]:invalid,.ag-theme-material-dark input[class^=ag-][type=tel]:invalid,.ag-theme-material-dark input[class^=ag-][type=date]:invalid,.ag-theme-material-dark input[class^=ag-][type=datetime-local]:invalid,.ag-theme-material-dark textarea[class^=ag-]:invalid,.ag-theme-material-auto-dark input[class^=ag-]:not([type]):invalid,.ag-theme-material-auto-dark input[class^=ag-][type=text]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=number]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=tel]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=date]:invalid,.ag-theme-material-auto-dark input[class^=ag-][type=datetime-local]:invalid,.ag-theme-material-auto-dark textarea[class^=ag-]:invalid{border-width:0;border-bottom:1px solid;border-bottom-color:var(--ag-invalid-color);color:var(--ag-invalid-color)}.ag-theme-material .ag-standard-button,.ag-theme-material-dark .ag-standard-button,.ag-theme-material-auto-dark .ag-standard-button{appearance:none;background-color:transparent;border:0;color:var(--ag-material-primary-color);font-family:inherit;font-size:inherit;margin:0;padding:0;text-transform:uppercase}.ag-theme-material .ag-standard-button:disabled,.ag-theme-material-dark .ag-standard-button:disabled,.ag-theme-material-auto-dark .ag-standard-button:disabled{color:var(--ag-disabled-foreground-color);background-color:var(--ag-input-disabled-background-color);border-color:var(--ag-input-disabled-border-color)}.ag-theme-material.ag-dnd-ghost,.ag-theme-material-dark.ag-dnd-ghost,.ag-theme-material-auto-dark.ag-dnd-ghost{font-size:calc(var(--ag-font-size) - 1px);font-weight:600}.ag-theme-material .ag-filter-toolpanel-header,.ag-theme-material-dark .ag-filter-toolpanel-header,.ag-theme-material-auto-dark .ag-filter-toolpanel-header{height:calc(var(--ag-grid-size) * 4)}.ag-theme-material .ag-filter-toolpanel-group-level-0-header,.ag-theme-material-dark .ag-filter-toolpanel-group-level-0-header,.ag-theme-material-auto-dark .ag-filter-toolpanel-group-level-0-header{height:calc(var(--ag-grid-size) * 7)}.ag-theme-material .ag-ltr .ag-filter-apply-panel-button,.ag-theme-material .ag-ltr .ag-advanced-filter-apply-button,.ag-theme-material .ag-ltr .ag-advanced-filter-builder-button,.ag-theme-material-dark .ag-ltr .ag-filter-apply-panel-button,.ag-theme-material-dark .ag-ltr .ag-advanced-filter-apply-button,.ag-theme-material-dark .ag-ltr .ag-advanced-filter-builder-button,.ag-theme-material-auto-dark .ag-ltr .ag-filter-apply-panel-button,.ag-theme-material-auto-dark .ag-ltr .ag-advanced-filter-apply-button,.ag-theme-material-auto-dark .ag-ltr .ag-advanced-filter-builder-button{margin-left:var(--ag-grid-size)}.ag-theme-material .ag-rtl .ag-filter-apply-panel-button,.ag-theme-material .ag-rtl .ag-advanced-filter-apply-button,.ag-theme-material .ag-rtl .ag-advanced-filter-builder-button,.ag-theme-material-dark .ag-rtl .ag-filter-apply-panel-button,.ag-theme-material-dark .ag-rtl .ag-advanced-filter-apply-button,.ag-theme-material-dark .ag-rtl .ag-advanced-filter-builder-button,.ag-theme-material-auto-dark .ag-rtl .ag-filter-apply-panel-button,.ag-theme-material-auto-dark .ag-rtl .ag-advanced-filter-apply-button,.ag-theme-material-auto-dark .ag-rtl .ag-advanced-filter-builder-button{margin-right:var(--ag-grid-size)}.ag-theme-material .ag-layout-auto-height .ag-center-cols-viewport,.ag-theme-material .ag-layout-auto-height .ag-center-cols-container,.ag-theme-material .ag-layout-print .ag-center-cols-viewport,.ag-theme-material .ag-layout-print .ag-center-cols-container,.ag-theme-material-dark .ag-layout-auto-height .ag-center-cols-viewport,.ag-theme-material-dark .ag-layout-auto-height .ag-center-cols-container,.ag-theme-material-dark .ag-layout-print .ag-center-cols-viewport,.ag-theme-material-dark .ag-layout-print .ag-center-cols-container,.ag-theme-material-auto-dark .ag-layout-auto-height .ag-center-cols-viewport,.ag-theme-material-auto-dark .ag-layout-auto-height .ag-center-cols-container,.ag-theme-material-auto-dark .ag-layout-print .ag-center-cols-viewport,.ag-theme-material-auto-dark .ag-layout-print .ag-center-cols-container{min-height:150px}.ag-theme-material .ag-overlay-no-rows-wrapper.ag-layout-auto-height,.ag-theme-material-dark .ag-overlay-no-rows-wrapper.ag-layout-auto-height,.ag-theme-material-auto-dark .ag-overlay-no-rows-wrapper.ag-layout-auto-height{padding-top:60px}.ag-theme-material .ag-picker-field-wrapper:focus-within,.ag-theme-material-dark .ag-picker-field-wrapper:focus-within,.ag-theme-material-auto-dark .ag-picker-field-wrapper:focus-within{box-shadow:0 0 0 1px var(--ag-material-primary-color)}.ag-theme-material .ag-rich-select-list,.ag-theme-material-dark .ag-rich-select-list,.ag-theme-material-auto-dark .ag-rich-select-list{box-shadow:#0003 0 5px 5px -3px,#00000024 0 8px 10px 1px,#0000001f 0 3px 14px 2px}.ag-theme-material .ag-advanced-filter-builder-button-label,.ag-theme-material-dark .ag-advanced-filter-builder-button-label,.ag-theme-material-auto-dark .ag-advanced-filter-builder-button-label{text-transform:uppercase}.ag-theme-material .ag-filter-active .ag-icon-filter,.ag-theme-material-dark .ag-filter-active .ag-icon-filter,.ag-theme-material-auto-dark .ag-filter-active .ag-icon-filter{color:var(--ag-material-accent-color)}.ag-theme-material textarea[class^=ag-chart-title-edit],.ag-theme-material-dark textarea[class^=ag-chart-title-edit],.ag-theme-material-auto-dark textarea[class^=ag-chart-title-edit]{background-color:var(--ag-background-color)}:root{--primary-color-50-parts: #edf4ff;--primary-color-100-parts: #b9d4fc;--primary-color-200-parts: #8ab7fb;--primary-color-300-parts: #5b9af9;--primary-color-400-parts: #3784f7;--primary-color-500-parts: #146ef6;--primary-color-600-parts: #1266f5;--primary-color-700-parts: #0e5bf3;--primary-color-800-parts: #0b51f2;--primary-color-900-parts: #063fef;--primary-color-A100-parts: rgba(20, 110, 246, .04);--primary-color-A200-parts: rgba(20, 110, 246, .08);--primary-color-A300-parts: rgba(20, 110, 246, .16);--primary-color-A400-parts: rgba(20, 110, 246, .24);--primary-color-A500-parts: rgba(20, 110, 246, .32);--primary-color-contrast-50-parts: rgba(0, 0, 0, .87);--primary-color-contrast-100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-300-parts: rgba(0, 0, 0, .87);--primary-color-contrast-400-parts: rgba(255, 255, 255, 1);--primary-color-contrast-500-parts: rgba(255, 255, 255, 1);--primary-color-contrast-600-parts: rgba(255, 255, 255, 1);--primary-color-contrast-700-parts: rgba(255, 255, 255, 1);--primary-color-contrast-800-parts: rgba(255, 255, 255, 1);--primary-color-contrast-900-parts: rgba(255, 255, 255, 1);--primary-color-contrast-A100-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A200-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A300-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A400-parts: rgba(0, 0, 0, .87);--primary-color-contrast-A500-parts: rgba(0, 0, 0, .87);--primary-color-50-parts-rgb: 237, 244, 255;--primary-color-100-parts-rgb: 185, 212, 252;--primary-color-200-parts-rgb: 138, 183, 251;--primary-color-300-parts-rgb: 91, 154, 249;--primary-color-400-parts-rgb: 55, 132, 247;--primary-color-500-parts-rgb: 20, 110, 246;--primary-color-600-parts-rgb: 18, 102, 245;--primary-color-700-parts-rgb: 14, 91, 243;--primary-color-800-parts-rgb: 11, 81, 242;--primary-color-900-parts-rgb: 6, 63, 239;--primary-color-A100-parts-rgb: 20, 110, 246, .04;--primary-color-A200-parts-rgb: 20, 110, 246, .08;--primary-color-A300-parts-rgb: 20, 110, 246, .16;--primary-color-A400-parts-rgb: 20, 110, 246, .24;--primary-color-A500-parts-rgb: 20, 110, 246, .32;--accent-color-50-parts: #e0f2f1;--accent-color-100-parts: #b2dfdb;--accent-color-200-parts: #80cbc4;--accent-color-300-parts: #4db6ac;--accent-color-400-parts: #26a69a;--accent-color-500-parts: #009688;--accent-color-600-parts: #00897b;--accent-color-700-parts: #00796b;--accent-color-800-parts: #00695c;--accent-color-900-parts: #004d40;--accent-color-A100-parts: rgba(0, 150, 136, .04);--accent-color-A200-parts: rgba(0, 150, 136, .08);--accent-color-A300-parts: rgba(0, 150, 136, .16);--accent-color-A400-parts: rgba(0, 150, 136, .24);--accent-color-A500-parts: rgba(0, 150, 136, .32);--accent-color-contrast-50-parts: rgba(0, 0, 0, .87);--accent-color-contrast-100-parts: rgba(0, 0, 0, .87);--accent-color-contrast-200-parts: rgba(0, 0, 0, .87);--accent-color-contrast-300-parts: rgba(0, 0, 0, .87);--accent-color-contrast-400-parts: rgba(0, 0, 0, .87);--accent-color-contrast-500-parts: rgba(255, 255, 255, 1);--accent-color-contrast-600-parts: rgba(255, 255, 255, 1);--accent-color-contrast-700-parts: rgba(255, 255, 255, 1);--accent-color-contrast-800-parts: rgba(255, 255, 255, 1);--accent-color-contrast-900-parts: rgba(255, 255, 255, 1);--accent-color-contrast-A100-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A200-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A300-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A400-parts: rgba(0, 0, 0, .87);--accent-color-contrast-A500-parts: rgba(0, 0, 0, .87);--accent-color-50-parts-rgb: 224, 242, 241;--accent-color-100-parts-rgb: 178, 223, 219;--accent-color-200-parts-rgb: 128, 203, 196;--accent-color-300-parts-rgb: 77, 182, 172;--accent-color-400-parts-rgb: 38, 166, 154;--accent-color-500-parts-rgb: 0, 150, 136;--accent-color-600-parts-rgb: 0, 137, 123;--accent-color-700-parts-rgb: 0, 121, 107;--accent-color-800-parts-rgb: 0, 105, 92;--accent-color-900-parts-rgb: 0, 77, 64;--accent-color-A100-parts-rgb: 0, 150, 136, .04;--accent-color-A200-parts-rgb: 0, 150, 136, .08;--accent-color-A300-parts-rgb: 0, 150, 136, .16;--accent-color-A400-parts-rgb: 0, 150, 136, .24;--accent-color-A500-parts-rgb: 0, 150, 136, .32;--warn-color-50-parts: #fceee3;--warn-color-100-parts: #f8d4b9;--warn-color-200-parts: #f4b78b;--warn-color-300-parts: #ef9a5d;--warn-color-400-parts: #eb843a;--warn-color-500-parts: #e86e17;--warn-color-600-parts: #e56614;--warn-color-700-parts: #e25b11;--warn-color-800-parts: #de510d;--warn-color-900-parts: #d83f07;--warn-color-A100-parts: rgba(232, 110, 23, .04);--warn-color-A200-parts: rgba(232, 110, 23, .08);--warn-color-A300-parts: rgba(232, 110, 23, .16);--warn-color-A400-parts: rgba(232, 110, 23, .24);--warn-color-A500-parts: rgba(232, 110, 23, .32);--warn-color-contrast-50-parts: rgba(0, 0, 0, .87);--warn-color-contrast-100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-300-parts: rgba(0, 0, 0, .87);--warn-color-contrast-400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-500-parts: rgba(0, 0, 0, .87);--warn-color-contrast-600-parts: rgba(0, 0, 0, .87);--warn-color-contrast-700-parts: rgba(0, 0, 0, .87);--warn-color-contrast-800-parts: rgba(0, 0, 0, .87);--warn-color-contrast-900-parts: rgba(255, 255, 255, 1);--warn-color-contrast-A100-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A200-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A300-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A400-parts: rgba(0, 0, 0, .87);--warn-color-contrast-A500-parts: rgba(0, 0, 0, .87);--warn-color-50-parts-rgb: 252, 238, 227;--warn-color-100-parts-rgb: 248, 212, 185;--warn-color-200-parts-rgb: 244, 183, 139;--warn-color-300-parts-rgb: 239, 154, 93;--warn-color-400-parts-rgb: 235, 132, 58;--warn-color-500-parts-rgb: 232, 110, 23;--warn-color-600-parts-rgb: 229, 102, 20;--warn-color-700-parts-rgb: 226, 91, 17;--warn-color-800-parts-rgb: 222, 81, 13;--warn-color-900-parts-rgb: 216, 63, 7;--warn-color-A100-parts-rgb: 232, 110, 23, .04;--warn-color-A200-parts-rgb: 232, 110, 23, .08;--warn-color-A300-parts-rgb: 232, 110, 23, .16;--warn-color-A400-parts-rgb: 232, 110, 23, .24;--warn-color-A500-parts-rgb: 232, 110, 23, .32;--info-color-50-parts: #edf4ff;--info-color-100-parts: #b9d4fc;--info-color-200-parts: #8ab7fb;--info-color-300-parts: #5b9af9;--info-color-400-parts: #3784f7;--info-color-500-parts: #146ef6;--info-color-600-parts: #1266f5;--info-color-700-parts: #0e5bf3;--info-color-800-parts: #0b51f2;--info-color-900-parts: #063fef;--info-color-A100-parts: rgba(20, 110, 246, .04);--info-color-A200-parts: rgba(20, 110, 246, .08);--info-color-A300-parts: rgba(20, 110, 246, .16);--info-color-A400-parts: rgba(20, 110, 246, .24);--info-color-A500-parts: rgba(20, 110, 246, .32);--info-color-contrast-50-parts: rgba(0, 0, 0, .87);--info-color-contrast-100-parts: rgba(0, 0, 0, .87);--info-color-contrast-200-parts: rgba(0, 0, 0, .87);--info-color-contrast-300-parts: rgba(0, 0, 0, .87);--info-color-contrast-400-parts: rgba(255, 255, 255, 1);--info-color-contrast-500-parts: rgba(255, 255, 255, 1);--info-color-contrast-600-parts: rgba(255, 255, 255, 1);--info-color-contrast-700-parts: rgba(255, 255, 255, 1);--info-color-contrast-800-parts: rgba(255, 255, 255, 1);--info-color-contrast-900-parts: rgba(255, 255, 255, 1);--info-color-contrast-A100-parts: rgba(0, 0, 0, .87);--info-color-contrast-A200-parts: rgba(0, 0, 0, .87);--info-color-contrast-A300-parts: rgba(0, 0, 0, .87);--info-color-contrast-A400-parts: rgba(0, 0, 0, .87);--info-color-contrast-A500-parts: rgba(0, 0, 0, .87);--info-color-50-parts-rgb: 237, 244, 255;--info-color-100-parts-rgb: 185, 212, 252;--info-color-200-parts-rgb: 138, 183, 251;--info-color-300-parts-rgb: 91, 154, 249;--info-color-400-parts-rgb: 55, 132, 247;--info-color-500-parts-rgb: 20, 110, 246;--info-color-600-parts-rgb: 18, 102, 245;--info-color-700-parts-rgb: 14, 91, 243;--info-color-800-parts-rgb: 11, 81, 242;--info-color-900-parts-rgb: 6, 63, 239;--info-color-A100-parts-rgb: 20, 110, 246, .04;--info-color-A200-parts-rgb: 20, 110, 246, .08;--info-color-A300-parts-rgb: 20, 110, 246, .16;--info-color-A400-parts-rgb: 20, 110, 246, .24;--info-color-A500-parts-rgb: 20, 110, 246, .32;--success-color-50-parts: #e7f0e6;--success-color-100-parts: #c4dac1;--success-color-200-parts: #9cc198;--success-color-300-parts: #74a86e;--success-color-400-parts: #57954f;--success-color-500-parts: #398230;--success-color-600-parts: #337a2b;--success-color-700-parts: #2c6f24;--success-color-800-parts: #24651e;--success-color-900-parts: #175213;--success-color-A100-parts: rgba(57, 130, 48, .04);--success-color-A200-parts: rgba(57, 130, 48, .08);--success-color-A300-parts: rgba(57, 130, 48, .16);--success-color-A400-parts: rgba(57, 130, 48, .24);--success-color-A500-parts: rgba(57, 130, 48, .32);--success-color-contrast-50-parts: rgba(0, 0, 0, .87);--success-color-contrast-100-parts: rgba(0, 0, 0, .87);--success-color-contrast-200-parts: rgba(0, 0, 0, .87);--success-color-contrast-300-parts: rgba(0, 0, 0, .87);--success-color-contrast-400-parts: rgba(0, 0, 0, .87);--success-color-contrast-500-parts: rgba(255, 255, 255, 1);--success-color-contrast-600-parts: rgba(255, 255, 255, 1);--success-color-contrast-700-parts: rgba(255, 255, 255, 1);--success-color-contrast-800-parts: rgba(255, 255, 255, 1);--success-color-contrast-900-parts: rgba(255, 255, 255, 1);--success-color-contrast-A100-parts: rgba(0, 0, 0, .87);--success-color-contrast-A200-parts: rgba(0, 0, 0, .87);--success-color-contrast-A300-parts: rgba(0, 0, 0, .87);--success-color-contrast-A400-parts: rgba(0, 0, 0, .87);--success-color-contrast-A500-parts: rgba(0, 0, 0, .87);--success-color-50-parts-rgb: 231, 240, 230;--success-color-100-parts-rgb: 196, 218, 193;--success-color-200-parts-rgb: 156, 193, 152;--success-color-300-parts-rgb: 116, 168, 110;--success-color-400-parts-rgb: 87, 149, 79;--success-color-500-parts-rgb: 57, 130, 48;--success-color-600-parts-rgb: 51, 122, 43;--success-color-700-parts-rgb: 44, 111, 36;--success-color-800-parts-rgb: 36, 101, 30;--success-color-900-parts-rgb: 23, 82, 19;--success-color-A100-parts-rgb: 57, 130, 48, .04;--success-color-A200-parts-rgb: 57, 130, 48, .08;--success-color-A300-parts-rgb: 57, 130, 48, .16;--success-color-A400-parts-rgb: 57, 130, 48, .24;--success-color-A500-parts-rgb: 57, 130, 48, .32;--error-color-50-parts: #fae5e4;--error-color-100-parts: #f3bdba;--error-color-200-parts: #eb928d;--error-color-300-parts: #e3665f;--error-color-400-parts: #dd453c;--error-color-500-parts: #d7241a;--error-color-600-parts: #d32017;--error-color-700-parts: #cd1b13;--error-color-800-parts: #c7160f;--error-color-900-parts: #be0d08;--error-color-A100-parts: rgba(215, 36, 26, .04);--error-color-A200-parts: rgba(215, 36, 26, .08);--error-color-A300-parts: rgba(215, 36, 26, .16);--error-color-A400-parts: rgba(215, 36, 26, .24);--error-color-A500-parts: rgba(215, 36, 26, .32);--error-color-contrast-50-parts: rgba(0, 0, 0, .87);--error-color-contrast-100-parts: rgba(0, 0, 0, .87);--error-color-contrast-200-parts: rgba(0, 0, 0, .87);--error-color-contrast-300-parts: rgba(0, 0, 0, .87);--error-color-contrast-400-parts: rgba(0, 0, 0, .87);--error-color-contrast-500-parts: rgba(255, 255, 255, 1);--error-color-contrast-600-parts: rgba(255, 255, 255, 1);--error-color-contrast-700-parts: rgba(255, 255, 255, 1);--error-color-contrast-800-parts: rgba(255, 255, 255, 1);--error-color-contrast-900-parts: rgba(255, 255, 255, 1);--error-color-contrast-A100-parts: rgba(0, 0, 0, .87);--error-color-contrast-A200-parts: rgba(0, 0, 0, .87);--error-color-contrast-A300-parts: rgba(0, 0, 0, .87);--error-color-contrast-A400-parts: rgba(0, 0, 0, .87);--error-color-contrast-A500-parts: rgba(0, 0, 0, .87);--error-color-50-parts-rgb: 250, 229, 228;--error-color-100-parts-rgb: 243, 189, 186;--error-color-200-parts-rgb: 235, 146, 141;--error-color-300-parts-rgb: 227, 102, 95;--error-color-400-parts-rgb: 221, 69, 60;--error-color-500-parts-rgb: 215, 36, 26;--error-color-600-parts-rgb: 211, 32, 23;--error-color-700-parts-rgb: 205, 27, 19;--error-color-800-parts-rgb: 199, 22, 15;--error-color-900-parts-rgb: 190, 13, 8;--error-color-A100-parts-rgb: 215, 36, 26, .04;--error-color-A200-parts-rgb: 215, 36, 26, .08;--error-color-A300-parts-rgb: 215, 36, 26, .16;--error-color-A400-parts-rgb: 215, 36, 26, .24;--error-color-A500-parts-rgb: 215, 36, 26, .32;--neutral-color-50-parts: #e9e9e9;--neutral-color-100-parts: #dddddd;--neutral-color-200-parts: #cccccc;--neutral-color-300-parts: #b0b0b0;--neutral-color-400-parts: #909090;--neutral-color-500-parts: #515151;--neutral-color-600-parts: #424242;--neutral-color-700-parts: #333333;--neutral-color-800-parts: #212121;--neutral-color-900-parts: #141414;--neutral-color-A100-parts: rgba(81, 81, 81, .04);--neutral-color-A200-parts: rgba(81, 81, 81, .08);--neutral-color-A300-parts: rgba(81, 81, 81, .16);--neutral-color-A400-parts: rgba(81, 81, 81, .24);--neutral-color-A500-parts: rgba(81, 81, 81, .32);--neutral-color-contrast-50-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-300-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-400-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-500-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-600-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-700-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-800-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-900-parts: rgba(255, 255, 255, 1);--neutral-color-contrast-A100-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A200-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A300-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A400-parts: rgba(0, 0, 0, .87);--neutral-color-contrast-A500-parts: rgba(0, 0, 0, .87);--neutral-color-50-parts-rgb: 233, 233, 233;--neutral-color-100-parts-rgb: 221, 221, 221;--neutral-color-200-parts-rgb: 204, 204, 204;--neutral-color-300-parts-rgb: 176, 176, 176;--neutral-color-400-parts-rgb: 144, 144, 144;--neutral-color-500-parts-rgb: 81, 81, 81;--neutral-color-600-parts-rgb: 66, 66, 66;--neutral-color-700-parts-rgb: 51, 51, 51;--neutral-color-800-parts-rgb: 33, 33, 33;--neutral-color-900-parts-rgb: 20, 20, 20;--neutral-color-A100-parts-rgb: 81, 81, 81, .04;--neutral-color-A200-parts-rgb: 81, 81, 81, .08;--neutral-color-A300-parts-rgb: 81, 81, 81, .16;--neutral-color-A400-parts-rgb: 81, 81, 81, .24;--neutral-color-A500-parts-rgb: 81, 81, 81, .32}#btn-enable-filter.filter-selected{background-color:#515151!important;color:#fff!important}.filter-panel{border-radius:8px!important;background-color:#fafafa;border:none;margin:0 0 24px;padding:20px}.filter-panel p{font-family:Poppins!important;font-style:normal!important;font-weight:500!important;font-size:16px!important;line-height:24px!important;margin-top:0!important}.filter-panel .filter-panel-select-container{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}.ag-theme-material{width:100%;justify-content:center!important;--ag-font-size: 16px;--ag-font-family: \"Poppins\";--ag-header-background-color: #FAFAFA;--ag-background-color: #FFFFFF;--ag-borders: solid 1px #E9E9E9;--ag-wrapper-border-radius: 8px;--ag-cell-horizontal-padding: 16px;--ag-border-color: #E9E9E9;--ag-material-primary-color: var(--primary-color-500-parts) !important;--ag-material-accent-color: var(--primary-color-300-parts) !important;--ag-icon-size: 18px;--ag-header-cell-hover-background-color: #FFFFFF;--ag-row-hover-color: #FFFFFF;--ag-column-hover-color: #FFFFFF}@media only screen and (max-width: 752px){.ag-theme-material{--ag-cell-horizontal-padding: 8px;--ag-font-size: 12px}}.ag-theme-material ::ng-deep .ag-root-wrapper{border-left:solid 1px #E9E9E9!important;border-top:solid 1px #E9E9E9!important;border-bottom:solid 1px #E9E9E9!important}.ag-theme-material ::ng-deep .ag-cell-focus{border-color:var(--primary-color-300-parts)!important;border-width:3px!important}.ag-theme-material ::ng-deep .ag-header ::ng-deep .ag-pinned-left-header,.ag-theme-material ::ng-deep .ag-body-viewport ::ng-deep .ag-pinned-left-cols-container{position:relative;z-index:1;-webkit-box-shadow:2px 0px 2px 0px rgba(42,42,42,.1);box-shadow:2px 0 2px #2a2a2a1a}.ag-theme-material ::ng-deep .ag-checkbox{padding-right:16px!important;padding-left:16px!important}.ag-theme-material ::ng-deep .ag-body-horizontal-scroll,.ag-theme-material ::ng-deep .ag-body-horizontal-scroll-viewport{height:8px!important;max-height:8px!important;min-height:8px!important}.ag-theme-material ::ng-deep .ag-body-horizontal-scroll:not(.ag-scrollbar-invisible),.ag-theme-material ::ng-deep .ag-horizontal-left-spacer:not(.ag-scroller-corner){border-right:none}.ag-theme-material ::ng-deep .ag-body-horizontal-scroll-viewport,.ag-theme-material ::ng-deep .ag-body-vertical-scroll-viewport{overflow:hidden}.ag-theme-material ::ng-deep .ag-horizontal-left-spacer{overflow-x:hidden}.ag-theme-material ::ng-deep .ag-header-cell{font-size:16px!important;font-weight:400;color:#0009!important}@media only screen and (max-width: 752px){.ag-theme-material ::ng-deep .ag-header-cell{font-size:12px!important}}.ag-theme-material ::ng-deep .ag-cell{font-weight:400!important;display:flex!important;flex-direction:column!important}.ag-theme-material ::ng-deep .ag-header-icon.ag-header-label-icon.ag-filter-icon{display:none!important}.ag-theme-material ::ng-deep .ag-center-cols-viewport,.ag-theme-material ::ng-deep .ag-center-cols-viewport .ag-center-cols-container{min-height:53px!important}.ag-theme-material ::ng-deep .ag-overlay-wrapper.ag-overlay-no-rows-wrapper{font-size:14px;font-weight:500;color:#0009}.ag-theme-material.no-rows ::ng-deep .ag-body-horizontal-scroll{display:none!important}.ag-theme-material.no-rows ::ng-deep .ag-root-wrapper{border:none!important}.ag-theme-material.no-rows ::ng-deep .ag-header{border-top:solid 1px #E9E9E9;border-left:solid 1px #E9E9E9;border-right:solid 1px #E9E9E9;border-top-left-radius:8px;border-top-right-radius:8px}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport{overflow-y:auto}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport{overflow-x:auto}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport::-webkit-scrollbar{height:8px!important}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport::-webkit-scrollbar{width:8px!important;max-width:15px!important}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport::-webkit-scrollbar-thumb{background-color:#e9e9e9!important;border-radius:4px;height:8px!important;border:1px solid #FFFFFF}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport::-webkit-scrollbar-thumb{background-color:#e9e9e9!important;border-radius:4px;width:8px!important;max-width:15px!important}.ag-theme-material:hover ::ng-deep .ag-body-horizontal-scroll-viewport::-webkit-scrollbar-track{background-color:transparent!important}.ag-theme-material:hover ::ng-deep .ag-body-vertical-scroll-viewport::-webkit-scrollbar-track{background-color:transparent!important}.dense-4{--mat-form-field-container-height: 40px;--mat-form-field-filled-label-display: none;--mat-form-field-container-vertical-padding: 8px;--mat-form-field-filled-with-label-container-padding-top: 8px;--mat-form-field-filled-with-label-container-padding-bottom: 8px}.search-icon{font-weight:700;font-size:20px;color:#000000de;opacity:.87}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mat-mdc-form-field-subscript-wrapper{display:none}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mat-mdc-text-field-wrapper{border-radius:10px}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-icon-prefix{padding-right:8px!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:#fafafa!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-text-field__input{color:#000000de;caret-color:#000000de;opacity:.87;letter-spacing:normal}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mdc-line-ripple:before,:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mdc-line-ripple:after{border:none!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mat-mdc-floating-label:not(.mdc-floating-label--float-above){display:block!important}:host::ng-deep mat-form-field.sof-form-field.table-search-field .mdc-text-field--filled .mat-mdc-floating-label:not(.mdc-floating-label--float-above) .search-label{color:#000000de;opacity:.6;font-family:Poppins;letter-spacing:normal}:host::ng-deep mat-form-field.sof-form-field.table-search-field.mat-focused .mat-mdc-text-field-wrapper{outline:3px solid var(--primary-color-300-parts);outline-offset:2px}:host::ng-deep mat-form-field.sof-form-field.table-search-field.mat-focused .mat-mdc-text-field-wrapper i.search-icon{color:var(--primary-color-500-parts)}::ng-deep .custom-paginator{width:100%;justify-content:flex-start;align-items:flex-start;display:inline-flex;height:40px!important;margin-top:24px}::ng-deep .custom-paginator .first-section{flex:1 1 0;align-self:stretch;justify-content:flex-start;align-items:center!important;gap:16px!important;display:flex}::ng-deep .custom-paginator .first-section .button-part-1{height:40px!important;align-self:center;padding-left:16px;background:#fafafa;border-radius:8px;overflow:unset!important;justify-content:center;align-items:center;display:inline-flex;border:none;gap:16px;border:2px solid transparent}::ng-deep .custom-paginator .first-section .button-part-1:hover,::ng-deep .custom-paginator .first-section .button-part-1:focus,::ng-deep .custom-paginator .first-section .button-part-1:active{border-radius:10px;justify-content:center;display:inline-flex;border-color:var(--primary-color-500-parts);height:40px!important;align-self:center;padding-left:16px;background:#fafafa;overflow:unset!important;align-items:center;gap:16px}::ng-deep .custom-paginator .first-section .field{display:flex;flex-direction:row;gap:16px;align-items:center}::ng-deep .custom-paginator .mat-mdc-form-field-type-mat-select:not(.mat-form-field-disabled) .mat-mdc-text-field-wrapper{align-items:center!important;width:100px!important}::ng-deep .custom-paginator .second-section{justify-content:flex-start;align-items:center;gap:16px;display:flex}::ng-deep .custom-paginator .page-select{height:100%;padding:8px 16px;background:#fafafa;border-radius:8px;overflow:hidden;justify-content:flex-start;align-items:center;gap:16px;display:inline-flex}::ng-deep .custom-paginator .select-icon{width:100%;position:relative;height:20px!important;font-size:20px!important}::ng-deep .custom-paginator .pageChangeText{color:#000000de;font-size:16px;font-family:Poppins;font-weight:400;word-wrap:break-word}::ng-deep .custom-paginator .mat-select{color:#000000de;font-size:16px;font-family:Poppins;font-weight:400;word-wrap:break-word}::ng-deep .custom-paginator .go-to-page{width:fit-content;align-self:stretch;justify-content:flex-start;align-items:center;gap:16px;display:flex}::ng-deep .custom-paginator .go-to-page .outer-box{height:40px;flex-direction:column;justify-content:flex-start;align-items:flex-start;display:inline-flex}::ng-deep .custom-paginator .go-to-page .field{display:flex;flex-direction:row;gap:16px;align-items:center}::ng-deep .custom-paginator .go-to-page .button-part{align-self:center;flex:1 1 0;padding:8px 16px;background:#fafafa;border-radius:8px;overflow:unset!important;justify-content:center;align-items:flex-start;gap:16px;display:inline-flex;border:2px solid transparent}::ng-deep .custom-paginator .go-to-page .button-part:hover,::ng-deep .custom-paginator .go-to-page .button-part:focus,::ng-deep .custom-paginator .go-to-page .button-part:active{align-self:center;flex:1 1 0;padding:8px 16px;background:#fafafa;border-radius:10px;overflow:unset!important;justify-content:center;align-items:flex-start;gap:16px;display:inline-flex;border-color:var(--primary-color-500-parts)}::ng-deep .custom-paginator .go-to-page .current-page{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;gap:8px;font-size:16px!important;font-family:Poppins!important}::ng-deep .custom-paginator .go-to-page .page{position:relative}::ng-deep .custom-paginator .go-to-page .of-page{position:relative;color:#0009}::ng-deep .custom-paginator .mat-mdc-select-value{font-size:16px!important;font-family:Poppins!important}::ng-deep .custom-paginator .mat-form-field-appearance-outline .mat-mdc-select-arrow-wrapper{transform:none!important}::ng-deep .custom-paginator .mat-mdc-select-arrow{display:none!important}::ng-deep .custom-paginator .mat-form-field-underline{display:none!important}::ng-deep .custom-paginator .mdc-line-ripple{display:none!important}::ng-deep .custom-paginator .mat-mdc-text-field-wrapper{background-color:#fff!important;height:40px!important}::ng-deep .custom-paginator .mat-mdc-text-field-wrapper .mat-mdc-form-field-focus-overlay{display:none!important}::ng-deep .page-option mat-pseudo-checkbox{display:none!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar{-webkit-appearance:none!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar:vertical{width:11px!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar:horizontal{height:11px!important}::ng-deep .mat-mdc-select-panel::-webkit-scrollbar-thumb{border-radius:8px!important;border:2px solid #FFFFFF!important;background-color:#cfcfcf80!important}.table-filter-select ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.loading-container{display:flex;align-items:center;justify-content:center;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i2.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.AgGridAngular, selector: "ag-grid-angular", inputs: ["gridOptions", "modules", "statusBar", "sideBar", "suppressContextMenu", "preventDefaultOnContextMenu", "allowContextMenuWithControlKey", "columnMenu", "suppressMenuHide", "enableBrowserTooltips", "tooltipTrigger", "tooltipShowDelay", "tooltipHideDelay", "tooltipMouseTrack", "tooltipShowMode", "tooltipInteraction", "popupParent", "copyHeadersToClipboard", "copyGroupHeadersToClipboard", "clipboardDelimiter", "suppressCopyRowsToClipboard", "suppressCopySingleCellRanges", "suppressLastEmptyLineOnPaste", "suppressClipboardPaste", "suppressClipboardApi", "suppressCutToClipboard", "columnDefs", "defaultColDef", "defaultColGroupDef", "columnTypes", "dataTypeDefinitions", "maintainColumnOrder", "suppressFieldDotNotation", "headerHeight", "groupHeaderHeight", "floatingFiltersHeight", "pivotHeaderHeight", "pivotGroupHeaderHeight", "allowDragFromColumnsToolPanel", "suppressMovableColumns", "suppressColumnMoveAnimation", "suppressDragLeaveHidesColumns", "suppressRowGroupHidesColumns", "colResizeDefault", "suppressAutoSize", "autoSizePadding", "skipHeaderOnAutoSize", "autoSizeStrategy", "components", "editType", "singleClickEdit", "suppressClickEdit", "readOnlyEdit", "stopEditingWhenCellsLoseFocus", "enterMovesDown", "enterMovesDownAfterEdit", "enterNavigatesVertically", "enterNavigatesVerticallyAfterEdit", "enableCellEditingOnBackspace", "undoRedoCellEditing", "undoRedoCellEditingLimit", "defaultCsvExportParams", "suppressCsvExport", "defaultExcelExportParams", "suppressExcelExport", "excelStyles", "quickFilterText", "cacheQuickFilter", "excludeHiddenColumnsFromQuickFilter", "includeHiddenColumnsInQuickFilter", "quickFilterParser", "quickFilterMatcher", "applyQuickFilterBeforePivotOrAgg", "excludeChildrenWhenTreeDataFiltering", "enableAdvancedFilter", "advancedFilterModel", "includeHiddenColumnsInAdvancedFilter", "advancedFilterParent", "advancedFilterBuilderParams", "suppressAdvancedFilterEval", "enableCharts", "chartThemes", "customChartThemes", "chartThemeOverrides", "enableChartToolPanelsButton", "suppressChartToolPanelsButton", "chartToolPanelsDef", "chartMenuItems", "loadingCellRenderer", "loadingCellRendererParams", "loadingCellRendererSelector", "localeText", "masterDetail", "keepDetailRows", "keepDetailRowsCount", "detailCellRenderer", "detailCellRendererParams", "detailRowHeight", "detailRowAutoHeight", "context", "alignedGrids", "tabIndex", "rowBuffer", "valueCache", "valueCacheNeverExpires", "enableCellExpressions", "suppressParentsInRowNodes", "suppressTouch", "suppressFocusAfterRefresh", "suppressAsyncEvents", "suppressBrowserResizeObserver", "suppressPropertyNamesCheck", "suppressChangeDetection", "debug", "overlayLoadingTemplate", "loadingOverlayComponent", "loadingOverlayComponentParams", "suppressLoadingOverlay", "overlayNoRowsTemplate", "noRowsOverlayComponent", "noRowsOverlayComponentParams", "suppressNoRowsOverlay", "pagination", "paginationPageSize", "paginationPageSizeSelector", "paginationAutoPageSize", "paginateChildRows", "suppressPaginationPanel", "pivotMode", "pivotPanelShow", "pivotMaxGeneratedColumns", "pivotDefaultExpanded", "pivotColumnGroupTotals", "pivotRowTotals", "pivotSuppressAutoColumn", "suppressExpandablePivotGroups", "functionsReadOnly", "aggFuncs", "suppressAggFuncInHeader", "alwaysAggregateAtRootLevel", "suppressAggAtRootLevel", "aggregateOnlyChangedColumns", "suppressAggFilteredOnly", "removePivotHeaderRowWhenSingleValueColumn", "animateRows", "enableCellChangeFlash", "cellFlashDuration", "cellFlashDelay", "cellFadeDuration", "cellFadeDelay", "allowShowChangeAfterFilter", "domLayout", "ensureDomOrder", "enableRtl", "suppressColumnVirtualisation", "suppressMaxRenderedRowRestriction", "suppressRowVirtualisation", "rowDragManaged", "suppressRowDrag", "suppressMoveWhenRowDragging", "rowDragEntireRow", "rowDragMultiRow", "rowDragText", "fullWidthCellRenderer", "fullWidthCellRendererParams", "embedFullWidthRows", "suppressGroupMaintainValueType", "groupDisplayType", "groupDefaultExpanded", "autoGroupColumnDef", "groupMaintainOrder", "groupSelectsChildren", "groupLockGroupColumns", "groupAggFiltering", "groupIncludeFooter", "groupIncludeTotalFooter", "groupTotalRow", "grandTotalRow", "suppressStickyTotalRow", "groupSuppressBlankHeader", "groupSelectsFiltered", "showOpenedGroup", "groupRemoveSingleChildren", "groupRemoveLowestSingleChildren", "groupHideOpenParents", "groupAllowUnbalanced", "rowGroupPanelShow", "groupRowRenderer", "groupRowRendererParams", "suppressMakeColumnVisibleAfterUnGroup", "treeData", "rowGroupPanelSuppressSort", "suppressGroupRowsSticky", "pinnedTopRowData", "pinnedBottomRowData", "rowModelType", "rowData", "asyncTransactionWaitMillis", "suppressModelUpdateAfterUpdateTransaction", "datasource", "cacheOverflowSize", "infiniteInitialRowCount", "serverSideInitialRowCount", "suppressServerSideInfiniteScroll", "suppressServerSideFullWidthLoadingRow", "cacheBlockSize", "maxBlocksInCache", "maxConcurrentDatasourceRequests", "blockLoadDebounceMillis", "purgeClosedRowNodes", "serverSideDatasource", "serverSideSortAllLevels", "serverSideEnableClientSideSort", "serverSideOnlyRefreshFilteredGroups", "serverSideFilterAllLevels", "serverSideSortOnServer", "serverSideFilterOnServer", "serverSidePivotResultFieldSeparator", "viewportDatasource", "viewportRowModelPageSize", "viewportRowModelBufferSize", "alwaysShowHorizontalScroll", "alwaysShowVerticalScroll", "debounceVerticalScrollbar", "suppressHorizontalScroll", "suppressScrollOnNewData", "suppressScrollWhenPopupsAreOpen", "suppressAnimationFrame", "suppressMiddleClickScrolls", "suppressPreventDefaultOnMouseWheel", "scrollbarWidth", "rowSelection", "rowMultiSelectWithClick", "suppressRowDeselection", "suppressRowClickSelection", "suppressCellFocus", "suppressHeaderFocus", "suppressMultiRangeSelection", "enableCellTextSelection", "enableRangeSelection", "enableRangeHandle", "enableFillHandle", "fillHandleDirection", "suppressClearOnFillReduction", "sortingOrder", "accentedSort", "unSortIcon", "suppressMultiSort", "alwaysMultiSort", "multiSortKey", "suppressMaintainUnsortedOrder", "icons", "rowHeight", "rowStyle", "rowClass", "rowClassRules", "suppressRowHoverHighlight", "suppressRowTransform", "columnHoverHighlight", "gridId", "deltaSort", "treeDataDisplayType", "functionsPassive", "enableGroupEdit", "initialState", "getContextMenuItems", "getMainMenuItems", "postProcessPopup", "processUnpinnedColumns", "processCellForClipboard", "processHeaderForClipboard", "processGroupHeaderForClipboard", "processCellFromClipboard", "sendToClipboard", "processDataFromClipboard", "isExternalFilterPresent", "doesExternalFilterPass", "getChartToolbarItems", "createChartContainer", "navigateToNextHeader", "tabToNextHeader", "navigateToNextCell", "tabToNextCell", "getLocaleText", "getDocument", "paginationNumberFormatter", "getGroupRowAgg", "isGroupOpenByDefault", "initialGroupOrderComparator", "processPivotResultColDef", "processPivotResultColGroupDef", "getDataPath", "getChildCount", "getServerSideGroupLevelParams", "isServerSideGroupOpenByDefault", "isApplyServerSideTransaction", "isServerSideGroup", "getServerSideGroupKey", "getBusinessKeyForNode", "getRowId", "resetRowDataOnUpdate", "processRowPostCreate", "isRowSelectable", "isRowMaster", "fillOperation", "postSortRows", "getRowStyle", "getRowClass", "getRowHeight", "isFullWidthRow"], outputs: ["toolPanelVisibleChanged", "toolPanelSizeChanged", "columnMenuVisibleChanged", "contextMenuVisibleChanged", "cutStart", "cutEnd", "pasteStart", "pasteEnd", "columnVisible", "columnPinned", "columnResized", "columnMoved", "columnValueChanged", "columnPivotModeChanged", "columnPivotChanged", "columnGroupOpened", "newColumnsLoaded", "gridColumnsChanged", "displayedColumnsChanged", "virtualColumnsChanged", "columnEverythingChanged", "columnHeaderMouseOver", "columnHeaderMouseLeave", "columnHeaderClicked", "columnHeaderContextMenu", "componentStateChanged", "cellValueChanged", "cellEditRequest", "rowValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "undoStarted", "undoEnded", "redoStarted", "redoEnded", "rangeDeleteStart", "rangeDeleteEnd", "fillStart", "fillEnd", "filterOpened", "filterChanged", "filterModified", "advancedFilterBuilderVisibleChanged", "chartCreated", "chartRangeSelectionChanged", "chartOptionsChanged", "chartDestroyed", "cellKeyDown", "gridReady", "gridPreDestroyed", "firstDataRendered", "gridSizeChanged", "modelUpdated", "virtualRowRemoved", "viewportChanged", "bodyScroll", "bodyScrollEnd", "dragStarted", "dragStopped", "stateUpdated", "paginationChanged", "rowDragEnter", "rowDragMove", "rowDragLeave", "rowDragEnd", "columnRowGroupChanged", "rowGroupOpened", "expandOrCollapseAll", "pivotMaxColumnsExceeded", "pinnedRowDataChanged", "rowDataUpdated", "asyncTransactionsFlushed", "storeRefreshed", "cellClicked", "cellDoubleClicked", "cellFocused", "cellMouseOver", "cellMouseOut", "cellMouseDown", "rowClicked", "rowDoubleClicked", "rowSelected", "selectionChanged", "cellContextMenu", "rangeSelectionChanged", "tooltipShow", "tooltipHide", "sortChanged", "columnRowGroupChangeRequest", "columnPivotChangeRequest", "columnValueChangeRequest", "columnAggFuncChangeRequest"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i6.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i9.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "pipe", type: i12.TranslatePipe, name: "translate" }] }); }
@@ -484,4 +497,4 @@ class SofTableFilter {
484
497
  /** A filter combining multiple conditions, taken from AgGrid*/
485
498
  class CombinedSimpleModel {
486
499
  }
487
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL2FnLWdyaWQtY29tcG9uZW50cy9zcmMvc29mLXRhYmxlL3NvZi10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcm1hdHVyZS9hZy1ncmlkLWNvbXBvbmVudHMvc3JjL3NvZi10YWJsZS9zb2YtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sTUFBTSxFQUVOLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUdMLHlCQUF5QixFQUMxQixNQUFNLGtEQUFrRCxDQUFDO0FBZ0IxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFFdkQsNENBQTRDO0FBTTVDLE1BQU0sT0FBTyxpQkFBaUI7SUFMOUI7UUFPRSxzRUFBc0U7UUFDdEQsWUFBTyxHQUFlLEVBQUUsQ0FBQztRQUV6QywyREFBMkQ7UUFDM0MsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFLNUMsa0JBQWtCO1FBQ0YsK0JBQTBCLEdBQWtCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFOUUsb0JBQW9CO1FBQ0osaUJBQVksR0FBWSxJQUFJLENBQUM7UUFFN0MsMENBQTBDO1FBQzFCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRTdDLDRDQUE0QztRQUM1Qix3QkFBbUIsR0FB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LGlCQUFpQjtrQkFMN0IsU0FBUzsrQkFDRSxXQUFXOzhCQU9MLE9BQU87c0JBQXRCLEtBQUs7Z0JBR1UsT0FBTztzQkFBdEIsS0FBSztnQkFHVyxRQUFRO3NCQUF4QixLQUFLO2dCQUdVLDBCQUEwQjtzQkFBekMsS0FBSztnQkFHVSxZQUFZO3NCQUEzQixLQUFLO2dCQUdVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBR1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUdVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBV1UseUJBQXlCO3NCQUF4QyxLQUFLO2dCQU1VLFNBQVM7c0JBQXhCLEtBQUs7Z0JBR1csZ0JBQWdCO3NCQUFoQyxLQUFLO2dCQUdJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHRyx3QkFBd0I7c0JBQWpDLE1BQU07Z0JBRzJCLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBR00sZ0JBQWdCO3NCQUFyRCxTQUFTO3VCQUFDLGtCQUFrQjs7QUE4Yi9CLHFDQUFxQztBQUNyQyxNQUFNLGNBQWM7SUFBcEI7UUFLRSxnQ0FBZ0M7UUFDaEMsWUFBTyxHQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0NBQUE7QUFFRCwrREFBK0Q7QUFDL0QsTUFBTSxtQkFBbUI7Q0FPeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBcclxuICBDb21wb25lbnQsIFxyXG4gIEVsZW1lbnRSZWYsIFxyXG4gIEV2ZW50RW1pdHRlciwgXHJcbiAgaW5qZWN0LCBcclxuICBJbnB1dCwgXHJcbiAgT25DaGFuZ2VzLCBcclxuICBPbkluaXQsIFxyXG4gIE91dHB1dCwgXHJcbiAgc2lnbmFsLCBcclxuICBTaW1wbGVDaGFuZ2VzLCBcclxuICBWaWV3Q2hpbGQsIFxyXG4gIFdyaXRhYmxlU2lnbmFsIFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgdGFrZSwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5pbXBvcnQgeyBcclxuICBDb2x1bW5EYXRhLCBcclxuICBDb2x1bW5PcHRpb25zRGF0YSwgXHJcbiAgU29mQ29sdW1uT3B0aW9uc0NvbXBvbmVudCBcclxufSBmcm9tICcuLi9jb2x1bW4tb3B0aW9ucy1tb2RhbC9jb2x1bW4tb3B0aW9ucy5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHtcclxuICBBcHBseUNvbHVtblN0YXRlUGFyYW1zLFxyXG4gIENvbERlZixcclxuICBDb2x1bW4sXHJcbiAgQ29sdW1uU3RhdGUsXHJcbiAgRmlsdGVyTW9kZWwsXHJcbiAgR3JpZEFwaSxcclxuICBHcmlkUmVhZHlFdmVudCxcclxuICBJUm93Tm9kZSxcclxuICBQYWdpbmF0aW9uQ2hhbmdlZEV2ZW50LFxyXG4gIFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtcyxcclxuICBUZXh0RmlsdGVyTW9kZWxcclxufSBmcm9tIFwiYWctZ3JpZC1jb21tdW5pdHlcIjtcclxuXHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbi8qKiBUaGUgU29mdGhlb24gQXJtYXR1cmUgVGFibGUgY29tcG9uZW50ICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc29mLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc29mLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vc29mLXRhYmxlLmNvbXBvbmVudC5zY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU29mVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIC8qKiBUaGUgbGFuZ3VhZ2UgdGV4dCBvciBhIGtleSB0aGF0IHdpbGwgYmUgc2hvd24gaW4gdGhpcyBjb21wb25lbnQgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcm93RGF0YTogQXJyYXk8YW55PiA9IFtdO1xyXG5cclxuICAvKiogQ29sdW1uIERlZmluaXRpb25zOiBEZWZpbmVzICYgY29udHJvbHMgZ3JpZCBjb2x1bW5zLiAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBjb2xEZWZzOiBBcnJheTxDb2xEZWY+ID0gW107XHJcblxyXG4gIC8qKiBTaXplIG1vZGVzIGZvciB0YWJsZSAqL1xyXG4gIEBJbnB1dCgpIHByaXZhdGUgc2l6ZU1vZGU6ICdDb21wYWN0JyB8ICdSb29teScgfCAnRGVmYXVsdCc7XHJcblxyXG4gIC8qKiBQYWdlcyBzaXplcyAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdpbmF0aW9uUGFnZVNpemVTZWxlY3RvcjogQXJyYXk8bnVtYmVyPiA9IFsxMCwgMjAsIDUwLCAxMDBdO1xyXG5cclxuICAvKiogRW5hYmxlIHNlYXJjaCAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBlbmFibGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKiogRW5hYmxlIGN1c3RvbSB0ZXh0IGZpbHRlciBkcm9wZG93bnMgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZW5hYmxlRmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqIEVuYWJsZSBjb2x1bW4gb3B0aW9ucyBtb2RhbCBzZWxlY3Rpb24gKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZW5hYmxlQ29sdW1uT3B0aW9uczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKiBFbmFibGUgZXhwb3J0IGJ1dHRvbiB0byBvdXRwdXQgZmlsdGVyZWQgcm93IGRhdGEgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZW5hYmxlRXhwb3J0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBcclxuICAgKiBUbyBkaXNwbGF5IHRoZSB0ZXh0IG9uIHRoZSBjb2x1bW4gb3B0aW9ucyBtb2RhbCwgd2hpY2ggc3RhdGVzIC1cclxuICAgKiBgXCJPcHRpb25zIHdpbGwgYmUgc2F2ZWQgZm9yIHRoZSBuZXh0IHRpbWUgeW91IGxvZyBpbi5cImBcclxuICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAqIEBkZXNjcmlwdGlvbiBzZXQgdG8gdHJ1ZSBpZiBzZXQtdXAgZm9yIHNhdmluZyBwcmVmZXJlbmNlcyB0byBVc2VyIGRhdGEuXHJcbiAgICogQG5vdGUgWW91IGNhbiBzdGlsbCBzYXZlIHByZWZlcmVuY2VzIHRvIF9sb2NhbF8gb3IgX3Nlc3Npb25fIHN0b3JhZ2VcclxuICAgKiB1c2luZyB0aGUgYHNhdmVkQ29sdW1uU3RhdGVgIGlucHV0LCBhbmQgYHVwZGF0ZWRDb2x1bW5TdGF0ZWAgb3V0cHV0IGV2ZW50LlxyXG4gICAqIEBzZWUgVGhlIERlbW8gc2l0ZSBpcyBzYXZpbmcgdG8gbG9jYWwgc3RvcmFnZS5cclxuICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzaG93U2F2ZUNvbHVtbk9wdGlvbnNUZXh0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBcclxuICAgKiBOYW1lL2xhYmVsIG9mIHRoZSB0YWJsZSBcclxuICAgKiBAbm90ZSBzaG91bGQgYmUgYSB0cmFuc2xhdGlvbiBrZXlcclxuICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyB0YWJsZU5hbWU6IHN0cmluZztcclxuXHJcbiAgLyoqIFVzZXJzIHNhdmVkIGNvbHVtbiBvcHRpb25zIHN0YXRlICovXHJcbiAgQElucHV0KCkgcHJpdmF0ZSBzYXZlZENvbHVtblN0YXRlOiBBcHBseUNvbHVtblN0YXRlUGFyYW1zO1xyXG5cclxuICAvKiogT3V0cHV0IHVwZGF0ZWQgY29sdW1uIG9wdGlvbnMgZXZlbnQgdG8gc2F2ZSB0byB1c2VyIG9yIGJyb3dzZXIgc3RvcmFnZSAqL1xyXG4gIEBPdXRwdXQoKSB1cGRhdGVkQ29sdW1uU3RhdGU6IEV2ZW50RW1pdHRlcjxBcHBseUNvbHVtblN0YXRlUGFyYW1zPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLyoqIE91dHB1dCB1cGRhdGVkIGNvbHVtbiBvcHRpb25zIGV2ZW50IHRvIHNhdmUgdG8gdXNlciBvciBicm93c2VyIHN0b3JhZ2UgKi9cclxuICBAT3V0cHV0KCkgZmlsdGVyZWRSb3dEYXRhRm9yRXhwb3J0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgLyoqIHRoZSBzZWFyY2ggaW5wdXQgKi9cclxuICBAVmlld0NoaWxkKCdncmlkU2VhcmNoVGV4dElucHV0JykgZ3JpZFNlYXJjaFRleHRJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuXHJcbiAgLyoqIFRoZSBoaWRkZW4gZWxlbWVudCB0aGF0IGFubm91bmNlcyB3aGVuIHRoZSB0YWJsZSBjb250ZW50IGNoYW5nZXMgZnJvbSBmaWx0ZXIgKi9cclxuICBAVmlld0NoaWxkKCdhcmlhUmVzdWx0c0NvdW50JykgcHVibGljIGFyaWFSZXN1bHRzQ291bnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICAvKiogXHJcbiAgICogS2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCBjb2x1bW4gc3RhdGVcclxuICAgKiBAbm90ZSBJZiBjb2x1bW5zIGFyZSByZS1kZWZpbmVkIChvbkNoYW5nZXMpLCB0aGlzIHN0YXRlIHdpbGwgYmUgYXBwbGllZFxyXG4gICovXHJcbiAgcHJpdmF0ZSBjdXJyZW50Q29sdW1uU3RhdGU6IEFwcGx5Q29sdW1uU3RhdGVQYXJhbXM7XHJcblxyXG4gIC8qKiBDb2x1bW4gbmFtZXMgdGhhdCBzaG91bGQgYmUgZmlsdGVyYWJsZSAqL1xyXG4gIHB1YmxpYyBjb2xGaWx0ZXJzOiBBcnJheTxTb2ZUYWJsZUZpbHRlcj4gPSBbXTtcclxuXHJcbiAgLyoqIFJvdyBIZWlnaHQgZm9yIHRhYmxlICovXHJcbiAgcHVibGljIHJvd0hlaWdodDogbnVtYmVyID0gNDg7XHJcblxyXG4gIC8qKiBDdXJyZW50IFBhZ2UgSW5kZXggKi9cclxuICBwdWJsaWMgY3VycmVudFBhZ2U6IG51bWJlciA9IDA7XHJcblxyXG4gIC8qKiBHcmlkIEFQSSAqL1xyXG4gIHByaXZhdGUgZ3JpZEFwaSE6IEdyaWRBcGk7XHJcblxyXG4gIC8qKiBJcyB0aGUgdGFibGUgcmVhZHkgdG8gYmUgZGlzcGxheWVkICovXHJcbiAgcHVibGljIGlzR3JpZERhdGFSZW5kZXJlZDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICAvKiogRGVmYXVsdCBQYWdlIFNpemUgKi9cclxuICBwdWJsaWMgcGFnaW5hdGlvblBhZ2VTaXplOiBudW1iZXIgPSAyMDsgXHJcblxyXG4gIC8qKiBUb29sIHRpcCBzaG93IGRlbGF5ICovXHJcbiAgcHVibGljIHRvb2x0aXBTaG93RGVsYXk6IG51bWJlciA9IDUwMDtcclxuXHJcbiAgLyoqIFxyXG4gICAqIERlZmF1bHQgQ29sdW1uIERlZmluaXRpb24gXHJcbiAgICogQG5vdGUgKHN1cHByZXNzS2V5Ym9hcmRFdmVudCkgVGFibGUgY2VsbHMgY2FuIGJlIG5hdmlnYXRlZCB3aXRoIHRoZSBhcnJvdyBrZXlzLCBcclxuICAgKiBpZiB0aGUgY2VsbCBjb250YWlucyBhIGJ1dHRvbiB5b3UgY2FuIFRhYiBpbnRvIHRoZSBidXR0b24sIGVudGVyIHwgc3BhY2UgdG8gaW50ZXJhY3QuXHJcbiAgKi9cclxuICBwdWJsaWMgZGVmYXVsdENvbERlZjogQ29sRGVmID0ge1xyXG4gICAgcmVzaXphYmxlOiBmYWxzZSwgLy8gZGlzYWJsZSByZXNpemUgXHJcbiAgICBzdXBwcmVzc0hlYWRlck1lbnVCdXR0b246IHRydWUsIC8vIGRpc2FibGUgZGVmYXVsdCBmaWx0ZXIgbWVudSBcclxuICAgIHN1cHByZXNzTW92YWJsZTogdHJ1ZSwgLy8gZGlzYWJsZSBkZWZhdWx0IGRyYWcgJiBkcm9wIGZvciBjb2x1bW5zIFxyXG4gICAgY2VsbFN0eWxlOiB7IGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiIH0sXHJcbiAgICBzdXBwcmVzc0tleWJvYXJkRXZlbnQ6IChwYXJhbXM6IFN1cHByZXNzS2V5Ym9hcmRFdmVudFBhcmFtcykgPT4ge1xyXG4gICAgICByZXR1cm4gcGFyYW1zLmV2ZW50LmtleSA9PT0gJ1RhYicgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqIExlbmd0aCBvZiBkYXRhICovXHJcbiAgcHVibGljIHRvdGFsTGVuZ3RoOiBudW1iZXIgPSAwO1xyXG5cclxuICAvKipUb3RhbCBudW1iZXIgb2YgcGFnZXMgKi9cclxuICBwdWJsaWMgdG90YWxOdW1iZXJPZlBhZ2VzOiBudW1iZXI7XHJcblxyXG4gIC8qKiBQYWdlIENoYW5nZSB0ZXh0ICovXHJcbiAgcHVibGljIHBhZ2VDaGFuZ2VUZXh0OiBzdHJpbmc7XHJcblxyXG4gIC8qKiBQYWdlIHNlbGVjdG9yIGFycmF5ICovXHJcbiAgcHVibGljIHBhZ2VTZWxlY3RvcjogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG5cclxuICAvKiogRmlsdGVyIFBhbmVsIG9wZW4gc3RhdGUgKi9cclxuICBwdWJsaWMgZmlsdGVyT3BlblN0YXRlOiBib29sZWFuO1xyXG5cclxuICAvKiogVGhlIGxpc3Qgb2YgZmlsdGVycyBhbmQgdGhlIHNlbGVjdGVkIHZhbHVlcyAqL1xyXG4gIHB1YmxpYyBmaWx0ZXJTZWxlY3Rpb25zOiBBcnJheTxBcnJheTxzdHJpbmc+PiA9IFtdO1xyXG5cclxuICAvKiogbWF0LWRpYWxvZyAqL1xyXG4gIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcclxuXHJcbiAgLyoqIFRyYW5zbGF0aW9uIHNlcnZpY2UgKi9cclxuICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcblxyXG4gIC8qKiBPbiBjb21wb25lbnQgaW5pdCAqL1xyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzaXplR3JpZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQW5ndWxhciBPbiBDaGFuZ2VzXHJcbiAgICogQHBhcmFtIGNoYW5nZXMgVGhlIGlucHV0IGNoYW5nZXNcclxuICAgKi9cclxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXMucm93RGF0YSAmJiAhY2hhbmdlcy5yb3dEYXRhLmZpcnN0Q2hhbmdlICYmICEhdGhpcy5ncmlkQXBpKSB7XHJcbiAgICAgIHRoaXMudG90YWxMZW5ndGggPSB0aGlzLnJvd0RhdGEubGVuZ3RoO1xyXG4gICAgICB0aGlzLnBvcHVsYXRlRmlsdGVycygpO1xyXG4gICAgICB0aGlzLmhhbmRsZVBhZ2VDaGFuZ2VUZXh0KCk7XHJcbiAgICAgIHRoaXMuaXNHcmlkRGF0YVJlbmRlcmVkLnNldCh0cnVlKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzLmNvbERlZnMgJiYgIWNoYW5nZXMuY29sRGVmcy5maXJzdENoYW5nZSAmJiAhIXRoaXMuZ3JpZEFwaSkge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmdyaWRBcGkuYXBwbHlDb2x1bW5TdGF0ZSh0aGlzLmN1cnJlbnRDb2x1bW5TdGF0ZSk7XHJcbiAgICAgICAgdGhpcy5wb3B1bGF0ZUZpbHRlcnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZ3JpZCBoYXMgaW5nZXN0ZWQgdGhlIGlucHV0IGRhdGFcclxuICAgKiBAcGFyYW0gcGFyYW1zIEdyaWQgUmVhZHkgRXZlbnQsXHJcbiAgICogVGhlIGdyaWQgaGFzIGluaXRpYWxpemVkIGFuZCBpcyByZWFkeSBmb3IgbW9zdCBhcGkgY2FsbHMsIGJ1dCBtYXkgbm90IGJlIGZ1bGx5IHJlbmRlcmVkIHlldC5cclxuICAgKiBAbm90ZSB5b3UgY2FuIG5vdCBhY2Nlc3MgdGhpcy5ncmlkQXBpIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIGlzIHJ1biwgXHJcbiAgICogYW55IGF0dGVtcHRzIHRvIGFjY2VzcyB0aGlzLmdyaWRBcGkgaW4gdGhpcyBjb21wb25lbnRzIG5nT25Jbml0IG9yIHRoZSBmaXJzdCBuZ09uQ2hhbmdlcyBjeWNsZVxyXG4gICAqIHdpbGwgcmVzdWx0IGluIGEgdHlwZSBlcnJvcjsgYmVpbmcgdGhpcy5ncmlkQXBpIGlzIHVuZGVmaW5lZCBhdCB0aGF0IHRpbWUuXHJcbiAgICovXHJcbiAgcHVibGljIG9uR3JpZFJlYWR5KHBhcmFtczogR3JpZFJlYWR5RXZlbnQpIHtcclxuICAgIHRoaXMuZ3JpZEFwaSA9IHBhcmFtcy5hcGk7XHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpICsgMTtcclxuICAgIHRoaXMudG90YWxMZW5ndGggPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFJvd0NvdW50KCk7XHJcbiAgICB3aW5kb3cub25yZXNpemUgPSAoKSA9PiB7XHJcbiAgICAgIGNvbnN0IG1vYmlsZVdpZHRoVGhyZXNob2xkID0gNzUyO1xyXG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gbW9iaWxlV2lkdGhUaHJlc2hvbGQpIHtcclxuICAgICAgICB0aGlzLnJvd0hlaWdodCA9IDQwO1xyXG4gICAgICAgIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplID0gMTA7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVHcmlkKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlVGV4dCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEZpcmVkIHRoZSBmaXJzdCB0aW1lIGRhdGEgaXMgcmVuZGVyZWQgaW50byB0aGUgZ3JpZC4gKi9cclxuICBwdWJsaWMgb25GaXJzdERhdGFSZW5kZXJlZCgpIHtcclxuICAgIGlmICghdGhpcy5zYXZlZENvbHVtblN0YXRlPy5zdGF0ZS5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgY29sdW1uU3RhdGU6IEFycmF5PENvbHVtblN0YXRlPiA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uU3RhdGUoKSk7XHJcbiAgICAgIHRoaXMuc2F2ZWRDb2x1bW5TdGF0ZSA9IHtcclxuICAgICAgICBzdGF0ZTogY29sdW1uU3RhdGUsXHJcbiAgICAgICAgYXBwbHlPcmRlcjogdHJ1ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5ncmlkQXBpLmFwcGx5Q29sdW1uU3RhdGUodGhpcy5zYXZlZENvbHVtblN0YXRlKTtcclxuICAgIHRoaXMudXBkYXRlZENvbHVtblN0YXRlLmVtaXQodGhpcy5zYXZlZENvbHVtblN0YXRlKTtcclxuICAgIHRoaXMuY3VycmVudENvbHVtblN0YXRlID0gdGhpcy5zYXZlZENvbHVtblN0YXRlO1xyXG4gICAgdGhpcy5wb3B1bGF0ZUZpbHRlcnMoKTtcclxuICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZVRleHQoKTtcclxuICAgIHRoaXMuaXNHcmlkRGF0YVJlbmRlcmVkLnNldCh0cnVlKTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXNpemUgZ3JpZCBmcm9tIHNpemUgbW9kZSAqL1xyXG4gIHByaXZhdGUgcmVzaXplR3JpZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNpemVNb2RlID09PSAnQ29tcGFjdCcpIHtcclxuICAgICAgdGhpcy5yb3dIZWlnaHQgPSA0MDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuc2l6ZU1vZGUgPT09ICdSb29teScpIHtcclxuICAgICAgdGhpcy5yb3dIZWlnaHQgPSA1NjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnJvd0hlaWdodCA9IDQ4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogT24gcGFnZSBzZWxlY3Rpb24gY2hhbmdlXHJcbiAgICogQHBhcmFtIHZhbHVlIFRoZSBzZWxlY3RlZCBwYWdlIG51bWJlclxyXG4gICAqL1xyXG4gIHB1YmxpYyBvblBhZ2VOdW1iZXJDaGFuZ2UodmFsdWU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gVGhlIHBhZ2UgdmFsdWVzIGFyZSAxIG9mZiB0byBtYWtlIGEgMS1iYXNlZCBhcnJheSwgYnV0IHRoZSBhY3R1YWwgcGFnZXMgYXJlIGEgMC1iYXNlZCBhcnJheS5cclxuICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR29Ub1BhZ2UodmFsdWUgLSAxKTtcclxuICB9XHJcblxyXG4gIC8qKiBPbiBuZXh0IHBhZ2UgZXZlbnQgKi9cclxuICBwdWJsaWMgbmV4dFBhZ2UoKSB7XHJcbiAgICB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdvVG9OZXh0UGFnZSgpO1xyXG4gICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlVGV4dCgpXHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpICsgMTtcclxuICB9XHJcblxyXG4gIC8qKiBPbiBQcmV2aW91cyBQYWdlIEV2ZW50ICovXHJcbiAgcHVibGljIHByZXZpb3VzUGFnZSgpIHtcclxuICAgIHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR29Ub1ByZXZpb3VzUGFnZSgpO1xyXG4gICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlVGV4dCgpXHJcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpICsgMTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIENoYW5nZSBQYWdlIFNpemUgRXZlbnRcclxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIHBhZ2luYXRpb24gZXZlbnRcclxuICAgKi9cclxuICBwdWJsaWMgY2hhbmdlUGFnZVNpemUoZXZlbnQ6IFBhZ2luYXRpb25DaGFuZ2VkRXZlbnQpIHtcclxuICAgIC8vIE9ubHkgbmVlZCB0byBkbyB0aGlzIHdvcmsgaWYgdGhlIHBhZ2Ugc2l6ZSBoYXMgY2hhbmdlZC5cclxuICAgIGlmIChldmVudC5uZXdQYWdlU2l6ZSkge1xyXG4gICAgICAvLyBVcGRhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBmaWx0ZXJlZCByb3dzLlxyXG4gICAgICB0aGlzLnRvdGFsTGVuZ3RoID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRSb3dDb3VudCgpO1xyXG4gICAgICAvLyBIYW5kbGUgdGV4dCBjaGFuZ2VzXHJcbiAgICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZVRleHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgZ3JpZCBmaWx0ZXIgaXMgY2hhbmdlZCBcclxuICAgKiBAdG9kbyB1cGRhdGUgdGhlIGZpbHRlciBkcm9wZG93biBvcHRpb25zIGJhc2VkIG9uIHRoZSBmaWx0ZXJlZCBkYXRhIHNldCwgaW5zdGVhZCBvZiB0aGUgY29tcGxldGUgZGF0YSBzZXQuXHJcbiAgICovXHJcbiAgcHVibGljIG9uRmlsdGVyQ2hhbmdlZCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHByZXZpb3VzVG90YWxMZW5ndGg6IG51bWJlciA9IE51bWJlcih0aGlzLnRvdGFsTGVuZ3RoKTtcclxuICAgIC8vIFVwZGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIGZpbHRlcmVkIHJvd3MuXHJcbiAgICB0aGlzLnRvdGFsTGVuZ3RoID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRSb3dDb3VudCgpO1xyXG4gICAgaWYgKHRoaXMudG90YWxMZW5ndGggIT09IHByZXZpb3VzVG90YWxMZW5ndGgpIHtcclxuICAgICAgdGhpcy5hcmlhUmVzdWx0c0NvdW50Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgdGhpcy5hcmlhUmVzdWx0c0NvdW50Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy50b3RhbExlbmd0aCA9PT0gMFxyXG4gICAgICAgID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2FybWF0dXJlLnNvZi10YWJsZS5zY3JlZW4tcmVhZGVyLmZpbHRlcmVkLXJlc3VsdHMubm8tcmVzdWx0cycpXHJcbiAgICAgICAgOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcclxuICAgICAgICAgICdhcm1hdHVyZS5zb2YtdGFibGUuc2NyZWVuLXJlYWRlci5maWx0ZXJlZC1yZXN1bHRzLmhhcy1yZXN1bHRzJywgeydyZXN1bHRzQ291bnQnOiB0aGlzLnRvdGFsTGVuZ3RofVxyXG4gICAgICAgICk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXJpYVJlc3VsdHNDb3VudC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgIH0sIDEwMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhhbmRsZVBhZ2VDaGFuZ2VUZXh0KCk7XHJcbiAgfVxyXG5cclxuICAvKiogR2VuZXJhdGVkIHRleHQgZm9yIHNob3dpbmcgcGFnZXMgaW4gZm9ybWF0OiAxLTExIG9mIDExICovXHJcbiAgcHJpdmF0ZSBoYW5kbGVQYWdlQ2hhbmdlVGV4dCgpOiB2b2lkIHtcclxuICAgIC8vIEhhbmRsZSBlbXB0eSB0YWJsZVxyXG4gICAgaWYgKCF0aGlzLnRvdGFsTGVuZ3RoIHx8IHRoaXMucGFnaW5hdGlvblBhZ2VTaXplID09PSAwKSB7XHJcbiAgICAgIC8vIFJlc2V0IHRoZSBwYWdpbmF0aW9uIFVJXHJcbiAgICAgIHRoaXMudG90YWxOdW1iZXJPZlBhZ2VzID0gMTtcclxuICAgICAgdGhpcy5wYWdlU2VsZWN0b3IgPSBbMV07XHJcbiAgICAgIHRoaXMucGFnZUNoYW5nZVRleHQgPSBgMGA7XHJcbiAgICAgIHRoaXMuZ3JpZEFwaS5zaG93Tm9Sb3dzT3ZlcmxheSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyaWRBcGkuaGlkZU92ZXJsYXkoKTtcclxuICAgIH1cclxuICAgIC8vIFVwZGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzXHJcbiAgICB0aGlzLnRvdGFsTnVtYmVyT2ZQYWdlcyA9IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0VG90YWxQYWdlcygpIHx8IE1hdGguY2VpbCh0aGlzLnRvdGFsTGVuZ3RoIC8gdGhpcy5wYWdpbmF0aW9uUGFnZVNpemUpIHx8IDE7XHJcbiAgICAvLyBSZXNldCB0aGUgcGFnZSBzZWxlY3RvclxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICBjb25zdCBwYWdlU2VsZWN0b3IgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHRoaXMudG90YWxOdW1iZXJPZlBhZ2VzOyBpKyspIHtcclxuICAgICAgcGFnZVNlbGVjdG9yLnB1c2goaSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhZ2VTZWxlY3RvciA9IHBhZ2VTZWxlY3RvcjtcclxuICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KHRoaXMudG90YWxMZW5ndGgsIDApO1xyXG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZTtcclxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldEN1cnJlbnRQYWdlKCkgKiBwYWdlU2l6ZTtcclxuICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCA8IGxlbmd0aCA/IE1hdGgubWluKHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSwgbGVuZ3RoKSA6IHN0YXJ0SW5kZXggKyBwYWdlU2l6ZTtcclxuICAgIHRoaXMucGFnZUNoYW5nZVRleHQgPSBgJHtzdGFydEluZGV4ICsgMX0gLSAke2VuZEluZGV4fWA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBcHBseSB0aGUgc2VhcmNoIGZpbHRlciBvbiBkYXRhIHdoZW4gc2VhcmNoIHRleHQgY2hhbmdlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBvblNlYXJjaFRleHRDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5ncmlkQXBpLnNldEdyaWRPcHRpb24oXCJxdWlja0ZpbHRlclRleHRcIiwgdGhpcy5ncmlkU2VhcmNoVGV4dElucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRvZ2dsZSB0aGUgZmlsdGVyIHBhbmVsIGRpc3BsYXkgKi9cclxuICBwdWJsaWMgdG9nZ2xlRmlsdGVyUGFuZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpbHRlck9wZW5TdGF0ZSA9ICF0aGlzLmZpbHRlck9wZW5TdGF0ZTtcclxuICB9XHJcblxyXG4gIC8qKiBBcHBseSB0aGUgc2VsZWN0ZWQgZmlsdGVycyAqL1xyXG4gIHB1YmxpYyBhcHBseUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICBsZXQgdGFibGVGaWx0ZXJNb2RlbDogRmlsdGVyTW9kZWwgPSB7fTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2xGaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGNvbEZpbHRlciA9IHRoaXMuY29sRmlsdGVyc1tpXTtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IHRoaXMuZmlsdGVyU2VsZWN0aW9uc1tpXTtcclxuICAgICAgaWYgKCFzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgIC8vIFJlc2V0IG91dCB0aGUgY29sdW1uIGZpbHRlcnNcclxuICAgICAgICB0aGlzLmdyaWRBcGkuc2V0Q29sdW1uRmlsdGVyTW9kZWwoY29sRmlsdGVyLmhlYWRlciwgbnVsbCk7XHJcbiAgICAgICAgdGFibGVGaWx0ZXJNb2RlbFtjb2xGaWx0ZXIuaGVhZGVyXSA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIC8vIFNldCB0aGUgc2luZ2xlIGZpbHRlciBmb3IgdGhlIGNvbHVtblxyXG4gICAgICAgIGxldCBmaWx0ZXJNb2RlbDogVGV4dEZpbHRlck1vZGVsID0geyBmaWx0ZXJUeXBlOiAndGV4dCcsIHR5cGU6ICdlcXVhbHMnLCBmaWx0ZXI6IHNlbGVjdGVkRWxlbWVudHNbMF0gfTtcclxuICAgICAgICAvLyBBcHBseSB0aGUgZmlsdGVyIG1vZGVsIHRvIHRoZSBjb2x1bW5cclxuICAgICAgICB0YWJsZUZpbHRlck1vZGVsW2NvbEZpbHRlci5oZWFkZXJdID0gZmlsdGVyTW9kZWw7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgLy8gU2V0IG11bHRpcGxlIE9SIGZpbHRlcnMgZm9yIHRoZSBjb2x1bW5cclxuICAgICAgICBsZXQgZmlsdGVyTW9kZWxzOiBDb21iaW5lZFNpbXBsZU1vZGVsPFRleHRGaWx0ZXJNb2RlbD4gPSB7IGZpbHRlclR5cGU6ICd0ZXh0Jywgb3BlcmF0b3I6ICdPUicsIGNvbmRpdGlvbnM6IFtdIH07XHJcbiAgICAgICAgLy8gU2V0IHRoZSBzZWxlY3RlZCBlbGVtZW50cyBpbiB0aGUgbW9kZWxcclxuICAgICAgICBmb3IgKGNvbnN0IHNlbGVjdGVkRWxlbWVudCBvZiBzZWxlY3RlZEVsZW1lbnRzKSB7XHJcbiAgICAgICAgICBmaWx0ZXJNb2RlbHMuY29uZGl0aW9ucy5wdXNoKHsgZmlsdGVyVHlwZTogJ3RleHQnLCB0eXBlOiAnZXF1YWxzJywgZmlsdGVyOiBzZWxlY3RlZEVsZW1lbnQgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFwcGx5IHRoZSBmaWx0ZXIgbW9kZWwgY29sbGVjdGlvbiB0byB0aGUgY29sdW1uXHJcbiAgICAgICAgdGFibGVGaWx0ZXJNb2RlbFtjb2xGaWx0ZXIuaGVhZGVyXSA9IGZpbHRlck1vZGVscztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gT25jZSBldmVyeXRoaW5nIGlzIHNldCwgdXBkYXRlIHRoZSBmaWx0ZXJzXHJcbiAgICB0aGlzLmdyaWRBcGkuc2V0RmlsdGVyTW9kZWwodGFibGVGaWx0ZXJNb2RlbCk7XHJcbiAgICB0aGlzLmdyaWRBcGkub25GaWx0ZXJDaGFuZ2VkKCk7XHJcbiAgfVxyXG5cclxuICAvKiogQ2xlYXIgYWxsIGZpbHRlcnMgKi9cclxuICBwdWJsaWMgY2xlYXJGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgLy8gQ2xlYXIgYWxsIHNlbGVjdGlvbnNcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJTZWxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyU2VsZWN0aW9uc1tpXSA9IFtdO1xyXG4gICAgfVxyXG4gICAgLy8gU2V0IHRoZSBmdWxsIGdyaWQgZmlsdGVyIG1vZGVsIHRvIG51bGxcclxuICAgIHRoaXMuZ3JpZEFwaS5zZXRGaWx0ZXJNb2RlbChudWxsKTtcclxuICAgIC8vIFVwZGF0ZSB0aGUgZGlzcGxheVxyXG4gICAgdGhpcy5ncmlkQXBpLm9uRmlsdGVyQ2hhbmdlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0cnVlIGlmIG5vIGZpbHRlcnMgYXJlIHNlbGVjdGVkXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIGZpbHRlciBpcyBzZWxlY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBoYXNFbXB0eUZpbHRlcnMoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuZmlsdGVyU2VsZWN0aW9ucyB8fCAhdGhpcy5maWx0ZXJTZWxlY3Rpb25zLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgZmlsdGVyU2VsZWN0IG9mIHRoaXMuZmlsdGVyU2VsZWN0aW9ucykge1xyXG4gICAgICAvLyBJZiBhdCBsZWFzdCBvbmUgZmlsdGVyIGhhcyBiZWVuIHNlbGVjdGVkLCByZXR1cm4gZmFsc2VcclxuICAgICAgaWYgKGZpbHRlclNlbGVjdC5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIENhbmNlbCB0aGUgY2hhbmdlcyB0byB0aGUgZmlsdGVyIGFuZCBjbG9zZXMgdGhlIGZpbHRlciBwYW5lbCAqL1xyXG4gIHB1YmxpYyBjYW5jZWxGaWx0ZXJDaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbEZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gR2V0IHRoZSBzdG9yZWQgZmlsdGVycyBmb3IgdGhlIGdpdmVuIG1vZGVsXHJcbiAgICAgIGNvbnN0IGNvbEZpbHRlciA9IHRoaXMuY29sRmlsdGVyc1tpXTtcclxuICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uRmlsdGVyTW9kZWwoY29sRmlsdGVyLmhlYWRlcik7XHJcbiAgICAgIGxldCBmaWx0ZXJTZWxlY3Rpb25EYXRhID0gW107XHJcbiAgICAgIGlmIChtb2RlbCAmJiBtb2RlbFtcImNvbmRpdGlvbnNcIl0pIHtcclxuICAgICAgICAvLyBUaGUgbW9kZWwgaXMgYSBjb21iaW5lZCBtb2RlbCB3aXRoIG11bHRpcGxlIHNlbGVjdGlvbnNcclxuICAgICAgICBjb25zdCBmaWx0ZXJNb2RlbCA9IG1vZGVsIGFzIENvbWJpbmVkU2ltcGxlTW9kZWw8VGV4dEZpbHRlck1vZGVsPjtcclxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZmlsdGVyTW9kZWwuY29uZGl0aW9ucykge1xyXG4gICAgICAgICAgZmlsdGVyU2VsZWN0aW9uRGF0YS5wdXNoKGVsZW1lbnQuZmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobW9kZWwpIHtcclxuICAgICAgICAvLyBBc3N1bWUgdGhlIG1vZGVsIGlzIGEgc2luZ2xlIFRleHQgRmlsdGVyIE1vZGVsXHJcbiAgICAgICAgbGV0IGZpbHRlclNlbGVjdGlvbjogVGV4dEZpbHRlck1vZGVsID0gbW9kZWw7XHJcbiAgICAgICAgZmlsdGVyU2VsZWN0aW9uRGF0YS5wdXNoKGZpbHRlclNlbGVjdGlvbi5maWx0ZXIpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIFNldCB0aGUgZmlsdGVyIHNlbGVjdGlvbnNcclxuICAgICAgdGhpcy5maWx0ZXJTZWxlY3Rpb25zW2ldID0gZmlsdGVyU2VsZWN0aW9uRGF0YTtcclxuICAgIH1cclxuICAgIC8vIENsb3NlIHRoZSBmaWx0ZXIgcGFuZWxcclxuICAgIHRoaXMudG9nZ2xlRmlsdGVyUGFuZWwoKTtcclxuICB9XHJcblxyXG4gIC8qKiBQb3B1bGF0ZXMgdGhlIGZpbHRlciBkcm9wZG93bnMgKi9cclxuICBwcml2YXRlIHBvcHVsYXRlRmlsdGVycygpOiB2b2lkIHtcclxuICAgIC8vIFJlc2V0IHRoZSBmaWx0ZXIgZHJvcGRvd25zXHJcbiAgICB0aGlzLmZpbHRlclNlbGVjdGlvbnMgPSBbXTtcclxuICAgIHRoaXMuY29sRmlsdGVycyA9IFtdO1xyXG4gICAgLy8gR2V0IHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMgdGhhdCBoYXZlIGEgZmlsdGVyXHJcbiAgICBjb25zdCBmaWx0ZXJlZENvbHM6IEFycmF5PENvbERlZj4gPSB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uRGVmcygpLmZpbHRlcigoZGVmKSA9PiBkZWZbJ2ZpbHRlciddKTtcclxuICAgIC8vIENyZWF0ZSBhIG1hcCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzIGZvciBlYWNoIGZpZWxkXHJcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZXNNYXAgPSBuZXcgTWFwPHN0cmluZywgU2V0PGFueT4+KCk7XHJcbiAgICAvLyBJbml0aWFsaXplIHNldHMgZm9yIGVhY2ggZmllbGQgKGNvbHVtbikgXHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmaWx0ZXJlZENvbHMpIHtcclxuICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IGNvbFtcImZpZWxkXCJdO1xyXG4gICAgICBmaWx0ZXJWYWx1ZXNNYXAuc2V0KGZpZWxkLCBuZXcgU2V0PGFueT4oKSk7XHJcbiAgICB9XHJcbiAgICAvLyBVc2UgZm9yRWFjaE5vZGUgdG8gaXRlcmF0ZSBvdmVyIHRoZSByb3dzXHJcbiAgICB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGUoKG5vZGU6IElSb3dOb2RlKSA9PiB7XHJcbiAgICAgIGlmIChub2RlLmRhdGEpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBmaWx0ZXJlZENvbHMpIHtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkOiBzdHJpbmcgPSBjb2xbXCJmaWVsZFwiXTtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSB0aGlzLmdyaWRBcGkuZ2V0Q2VsbFZhbHVlKHtyb3dOb2RlOiBub2RlLCBjb2xLZXk6IGZpZWxkfSk7XHJcbiAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgZmlsdGVyVmFsdWVzTWFwLmdldChmaWVsZCk/LmFkZCh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdGhlIHVuaXF1ZSB2YWx1ZXMgZm9yIGVhY2ggZmllbGQsIHBvcHVsYXRlIGZpbHRlciBvcHRpb25zXHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmaWx0ZXJlZENvbHMpIHtcclxuICAgICAgY29uc3QgZmllbGQ6IHN0cmluZyA9IGNvbFtcImZpZWxkXCJdO1xyXG4gICAgICBjb25zdCBsYWJlbDogc3RyaW5nID0gY29sW1wiaGVhZGVyTmFtZVwiXTtcclxuICAgICAgY29uc3QgdW5pcXVlVmFsdWVzOiBBcnJheTxhbnk+ID0gQXJyYXkuZnJvbShmaWx0ZXJWYWx1ZXNNYXAuZ2V0KGZpZWxkKSB8fCBbXSkuc29ydCgpO1xyXG4gICAgICBpZiAodW5pcXVlVmFsdWVzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAvLyBFbnN1cmUgdGhlcmUncyBzcGFjZSBmb3IgZmlsdGVyIHNlbGVjdGlvbnNcclxuICAgICAgICB0aGlzLmZpbHRlclNlbGVjdGlvbnMucHVzaChbXSk7IFxyXG4gICAgICAgIHRoaXMuY29sRmlsdGVycy5wdXNoKHsgaGVhZGVyOiBmaWVsZCwgbGFiZWw6IGxhYmVsLCBvcHRpb25zOiB1bmlxdWVWYWx1ZXMgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBPcGVuIHRoZSBjb2x1bW4gb3B0aW9ucyBtb2RhbCAqL1xyXG4gIHB1YmxpYyBvcGVuQ29sdW1uT3B0aW9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbHVtblN0YXRlOiBBcnJheTxDb2x1bW5TdGF0ZT4gPSB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uU3RhdGUoKTtcclxuICAgIGNvbnN0IGNvbHVtbkRhdGE6IEFycmF5PENvbHVtbkRhdGE+ID0gdGhpcy5jb2x1bW5TdGF0ZVRvRGF0YShjb2x1bW5TdGF0ZSk7XHJcbiAgICBjb25zdCBpbml0aWFsQ29sdW1uRGF0YTogQXJyYXk8Q29sdW1uRGF0YT4gPSB0aGlzLmNvbHVtblN0YXRlVG9EYXRhKHRoaXMuc2F2ZWRDb2x1bW5TdGF0ZS5zdGF0ZSk7XHJcbiAgICBjb25zdCBjb2x1bW5PcHRpb25zRGF0YTogQ29sdW1uT3B0aW9uc0RhdGEgPSB7XHJcbiAgICAgIHRhYmxlTmFtZTogdGhpcy50YWJsZU5hbWUsXHJcbiAgICAgIGNvbHVtbkRhdGEsXHJcbiAgICAgIGluaXRpYWxDb2x1bW5EYXRhLFxyXG4gICAgICBzaG93U2F2ZUNvbHVtbk9wdGlvbnNUZXh0OiB0aGlzLnNob3dTYXZlQ29sdW1uT3B0aW9uc1RleHRcclxuICAgIH07XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNvZkNvbHVtbk9wdGlvbnNDb21wb25lbnQsIHtcclxuICAgICAgd2lkdGg6ICc1MDBweCcsXHJcbiAgICAgIHBvc2l0aW9uOiB7IGJvdHRvbTogJzQwcHgnLCByaWdodDogJzQwcHgnIH0sXHJcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnY29sdW1uLW9wdGlvbnMtaGVhZGluZycsXHJcbiAgICAgIGRhdGE6IGNvbHVtbk9wdGlvbnNEYXRhXHJcbiAgICB9KTtcclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnBpcGUoXHJcbiAgICAgIHRha2UoMSksXHJcbiAgICAgIHRhcCgodXBkYXRlZENvbHVtblN0YXRlOiBBcHBseUNvbHVtblN0YXRlUGFyYW1zKSA9PiB7XHJcbiAgICAgICAgaWYgKHVwZGF0ZWRDb2x1bW5TdGF0ZSAmJiB1cGRhdGVkQ29sdW1uU3RhdGUuc3RhdGUubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRBcGkuYXBwbHlDb2x1bW5TdGF0ZSh1cGRhdGVkQ29sdW1uU3RhdGUpO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVkQ29sdW1uU3RhdGUuZW1pdCh1cGRhdGVkQ29sdW1uU3RhdGUpO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Q29sdW1uU3RhdGUgPSB1cGRhdGVkQ29sdW1uU3RhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1hcHMgYEFycmF5PENvbHVtblN0YXRlPmAgdG8gYEFycmF5PENvbHVtbkRhdGE+YCBcclxuICAgKiBAbm90ZSBmaWx0ZXJzIG91dCBhbnkgY29sdW1ucyBtYXJrZWQgYXMgJ3Bpbm5lZCcgYnkgdGhlIGNvbHVtbiBkZWZpbml0aW9ucy5cclxuICAgKiBAbm90ZSBmaWx0ZXJzIGFueSBjb2x1bW5zIHdpdGhvdXQgYSAnaGVhZGVyTmFtZScuXHJcbiAgICogQHBhcmFtIGNvbHVtblN0YXRlIHRoZSBjb2x1bW4gc3RhdGUgdG8gbW9kaWZ5XHJcbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgY29sdW1uIGRhdGEgZm9ybWF0dGVkIHRvIGJlIGluZ2VzdGVkIGJ5IHRoZSBgU29mQ29sdW1uT3B0aW9uc0NvbXBvbmVudGBcclxuICAqL1xyXG4gIHByaXZhdGUgY29sdW1uU3RhdGVUb0RhdGEoY29sdW1uU3RhdGU6IEFycmF5PENvbHVtblN0YXRlPik6IEFycmF5PENvbHVtbkRhdGE+IHtcclxuICAgIHJldHVybiBjb2x1bW5TdGF0ZVxyXG4gICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcclxuICAgICAgICBjb25zdCBoZWFkZXJOYW1lOiBzdHJpbmcgPSB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uRGVmKGNvbHVtbi5jb2xJZCk/LmhlYWRlck5hbWUgfHwgXCJcIjtcclxuICAgICAgICBpZiAoaGVhZGVyTmFtZSAmJiBoZWFkZXJOYW1lLmxlbmd0aCAmJiAhY29sdW1uLnBpbm5lZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5tYXAoKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhlYWRlck5hbWU6IHN0cmluZyA9IHRoaXMuZ3JpZEFwaS5nZXRDb2x1bW5EZWYoY29sdW1uLmNvbElkKS5oZWFkZXJOYW1lO1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBpZDogY29sdW1uLmNvbElkLFxyXG4gICAgICAgICAgaXNDaGVja2VkOiAhY29sdW1uLmhpZGUsXHJcbiAgICAgICAgICB0ZXh0OiBoZWFkZXJOYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiBFbWl0IHRoZSBjdXJyZW50IGZpbHRlcmVkL3NvcnRlZCByb3cgZGF0YSAqL1xyXG4gIHB1YmxpYyBleHBvcnRGaWx0ZXJlZFJvd0RhdGEoKTogdm9pZCB7XHJcbiAgICBjb25zdCBleHBvcnRlZFJvd3M6IEFycmF5PGFueT4gPSBbXTtcclxuICAgIGNvbnN0IGNvbHVtbnM6IEFycmF5PENvbHVtbj4gPSB0aGlzLmdyaWRBcGkuZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpLmZpbHRlcigoY29sKSA9PiBjb2wuZ2V0Q29sRGVmKCkuaGVhZGVyTmFtZSk7XHJcbiAgICB0aGlzLmdyaWRBcGkuZm9yRWFjaE5vZGVBZnRlckZpbHRlckFuZFNvcnQoKG5vZGU6IElSb3dOb2RlPGFueT4pID0+IHtcclxuICAgICAgY29uc3Qgcm93RGF0YTogYW55ID0ge307XHJcbiAgICAgIGNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbElkOiBzdHJpbmcgPSBjb2wuZ2V0Q29sSWQoKTtcclxuICAgICAgICAvLyBVc2UgZ3JpZEFwaSdzIGdldENlbGxWYWx1ZSB0byBnZXQgdGhlIHZhbHVlIHRyYW5zZm9ybWVkIGJ5IHZhbHVlR2V0dGVyXHJcbiAgICAgICAgcm93RGF0YVtjb2xJZF0gPSB0aGlzLmdyaWRBcGkuZ2V0Q2VsbFZhbHVlKHsgcm93Tm9kZTogbm9kZSwgY29sS2V5OiBjb2xJZCB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIGV4cG9ydGVkUm93cy5wdXNoKHJvd0RhdGEpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZpbHRlcmVkUm93RGF0YUZvckV4cG9ydC5lbWl0KGV4cG9ydGVkUm93cyk7XHJcbiAgfVxyXG59XHJcblxyXG4vKiogVXNlZCBmb3Igc2V0dGluZyBmaWx0ZXIgdmFsdWVzICovXHJcbmNsYXNzIFNvZlRhYmxlRmlsdGVyIHtcclxuICAvKiogVGhlIGNvbHVtbiBoZWFkZXIgKi9cclxuICBoZWFkZXI6IHN0cmluZztcclxuICAvKiogVGhlIGNvbHVtbiBsYWJlbCBvciB0cmFuc2xhdGlvbiBrZXkgKi9cclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBUaGUgY29sdW1uIGZpbHRlciBvcHRpb25zICovXHJcbiAgb3B0aW9uczogc3RyaW5nW10gPSBbXTtcclxufVxyXG5cclxuLyoqIEEgZmlsdGVyIGNvbWJpbmluZyBtdWx0aXBsZSBjb25kaXRpb25zLCB0YWtlbiBmcm9tIEFnR3JpZCovXHJcbmNsYXNzIENvbWJpbmVkU2ltcGxlTW9kZWw8VD4ge1xyXG4gIC8qKiBUaGUgZmlsdGVyIHR5cGUuIFVzdWFsbHkgJ3RleHQnICovXHJcbiAgZmlsdGVyVHlwZTogc3RyaW5nO1xyXG4gIC8qKiBUaGUgb3BlcmF0b3IuIFVzdWFsbHkgJ09SJyAqL1xyXG4gIG9wZXJhdG9yOiAnQU5EJyB8ICdPUic7XHJcbiAgLyoqIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgRmlsdGVyIE1vZGVsICovXHJcbiAgY29uZGl0aW9uczogVFtdO1xyXG59XHJcbiIsIjxkaXYgXHJcbiAgW2Z4U2hvd109XCJpc0dyaWREYXRhUmVuZGVyZWQoKVwiXHJcbiAgZnhMYXlvdXRHYXA9XCIxNnB4XCIgbS1iLTI0PlxyXG4gIEBpZiAoZW5hYmxlRmlsdGVyICYmIGNvbEZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyUGFuZWwoKVwiIFxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLXYyXCJcclxuICAgICAgW2NsYXNzLmZpbHRlci1zZWxlY3RlZF09XCJmaWx0ZXJPcGVuU3RhdGVcIiBcclxuICAgICAgaWQ9XCJidG4tZW5hYmxlLWZpbHRlclwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwicGggcGgtYm9sZCBwaC1zbGlkZXJzLWhvcml6b250YWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIHt7J2FybWF0dXJlLnNvZi10YWJsZS5maWx0ZXInIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKGVuYWJsZVNlYXJjaCkge1xyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwic29mLWZvcm0tZmllbGQgdGFibGUtc2VhcmNoLWZpZWxkIGRlbnNlLTRcIiBmeEZsZXg9XCJhdXRvXCI+XHJcbiAgICAgIDxzcGFuIG1hdFByZWZpeD5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtbWFnbmlmeWluZy1nbGFzcyBzZWFyY2gtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic2VhcmNoLWxhYmVsXCI+e3snYXJtYXR1cmUuc29mLXRhYmxlLnNlYXJjaCcgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgXHJcbiAgICAgICAgKGlucHV0KT1cIm9uU2VhcmNoVGV4dENoYW5nZWQoKVwiIFxyXG4gICAgICAgICNncmlkU2VhcmNoVGV4dElucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJncmlkU2VhcmNoVGV4dElucHV0XCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidhcm1hdHVyZS5zb2YtdGFibGUuc2NyZWVuLXJlYWRlci5zZWFyY2gtZmlsdGVyLWRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgfVxyXG4gIEBpZiAoZW5hYmxlQ29sdW1uT3B0aW9ucykge1xyXG4gICAgPGJ1dHRvbiBcclxuICAgICAgKGNsaWNrKT1cIm9wZW5Db2x1bW5PcHRpb25zKClcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLWljb24tdjJcIiBcclxuICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIiBpZD1cIm9wZW4tY29sdW1uLW9wdGlvbnNcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidhcm1hdHVyZS5zb2YtdGFibGUuc2NyZWVuLXJlYWRlci5jb2x1bW4tb3B0aW9ucy1idG4nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2FybWF0dXJlLnNvZi10YWJsZS5zY3JlZW4tcmVhZGVyLmNvbHVtbi1vcHRpb25zLWJ0bicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBDbGFzcz1cIm1kYy10b29sdGlwX19zdXJmYWNlIGJlbG93XCI+XHJcbiAgICAgIDxpIGNsYXNzPVwicGgtYm9sZCBwaC1wYXVzZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYoZW5hYmxlRXhwb3J0KSB7XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICAoY2xpY2spPVwiZXhwb3J0RmlsdGVyZWRSb3dEYXRhKClcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLWljb24tdjJcIiBcclxuICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIiBpZD1cImV4cG9ydC10YWJsZVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2FybWF0dXJlLnNvZi10YWJsZS5zY3JlZW4tcmVhZGVyLmV4cG9ydC10YWJsZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInYXJtYXR1cmUuc29mLXRhYmxlLnNjcmVlbi1yZWFkZXIuZXhwb3J0LXRhYmxlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcENsYXNzPVwibWRjLXRvb2x0aXBfX3N1cmZhY2UgYmVsb3dcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaC1ib2xkIHBoLWV4cG9ydFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbc29mLXRhYmxlLXJpZ2h0LWJ1dHRvbnNdXCI+PC9uZy1jb250ZW50PlxyXG4gIDwhLS0gXHJcbiAgT25seSBpbmplY3QgPGJ1dHRvbj4ncyBpbnNpZGUgYW4gPG5nLWNvbnRhaW5lciBzb2YtdGFibGUtcmlnaHQtYnV0dG9ucz5cclxuICAuLi4gXHJcbiAgPG5nLWNvbnRhaW5lciBzb2YtdGFibGUtcmlnaHQtYnV0dG9ucz5cclxuICAgIDxidXR0b24gXHJcbiAgICAgIChjbGljayk9XCJhbnlGdW5jdGlvbigpXCJcclxuICAgICAgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgXHJcbiAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCIgYXJpYS1sYWJlbD1cImFueSBidXR0b25cIlxyXG4gICAgICBtYXRUb29sdGlwPVwiYW55IGJ1dHRvblwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcENsYXNzPVwibWRjLXRvb2x0aXBfX3N1cmZhY2UgYmVsb3dcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaC1ib2xkIHBoLWFjb3JuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgLi4uIFxyXG4gIG5vdGU6IG1ha2Ugc3VyZSBidXR0b25zIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRvIG1hdGNoIG90aGVycyA9XHJcbiAgYG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cInNvZi1idXR0b24taWNvbi12MlwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCJgXHJcbiAgKiByZW1lbWJlciB0byBhZGQgYXJpYS1sYWJlbCBhbmQgdG9vbHRpcCBmb3IgaWNvbiBidXR0b25cclxuICAtLT5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICNhcmlhUmVzdWx0c0NvdW50IGNsYXNzPVwic3Itb25seVwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPjwvZGl2PlxyXG5cclxuQGlmIChpc0dyaWREYXRhUmVuZGVyZWQoKSAmJiBmaWx0ZXJPcGVuU3RhdGUpIHtcclxuICA8ZmllbGRzZXQgXHJcbiAgICBjbGFzcz1cImZpbHRlci1wYW5lbFwiIHJvbGU9XCJyZWdpb25cIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXRhYmxlLnNjcmVlbi1yZWFkZXIuc2VsZWN0LWZpbHRlcnMtZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCI+XHJcbiAgICA8cD5cclxuICAgICAgPGkgY2xhc3M9XCJwaCBwaC1ib2xkIHBoLXNsaWRlcnMtaG9yaXpvbnRhbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtOFwiPnt7J2FybWF0dXJlLnNvZi10YWJsZS5maWx0ZXInIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICA8L3A+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBhbmVsLXNlbGVjdC1jb250YWluZXIgbS12LTIwXCI+XHJcbiAgICAgIEBmb3IgKGNvbEZpbHRlciBvZiBjb2xGaWx0ZXJzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic29mLWZvcm0tZmllbGQgdGFibGUtZmlsdGVyLXNlbGVjdFwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57e2NvbEZpbHRlci5sYWJlbH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdCBcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJTZWxlY3Rpb25zW2ldXCIgXHJcbiAgICAgICAgICAgIG11bHRpcGxlIFxyXG4gICAgICAgICAgICBpZD1cImZpbHRlckRyb3Bkb3due3tpfX1cIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2FybWF0dXJlLnNvZi10YWJsZS5hbGwnIHwgdHJhbnNsYXRlfX1cIiBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICBAZm9yIChjb2xPcHRpb24gb2YgY29sRmlsdGVyLm9wdGlvbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJjb2xPcHRpb25cIj5cclxuICAgICAgICAgICAgICAgIHt7Y29sT3B0aW9ufX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgICAgPGRpdiBmeEZsZXg9XCI1MCVcIj5cclxuICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCIgW2Rpc2FibGVkXT1cImhhc0VtcHR5RmlsdGVycygpXCIgXHJcbiAgICAgICAgICBtYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi12MlwiIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgaWQ9XCJ0YWJsZUZpbHRlckNsZWFyXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiPlxyXG4gICAgICAgICAge3snYXJtYXR1cmUuc29mLXRhYmxlLnJlc2V0JyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIjUwJVwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIlXCIgZnhMYXlvdXRBbGlnbj1cImZsZXgtZW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjAgMSBhdXRvXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEZpbHRlckNoYW5nZXMoKVwiIG1hdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLXYyXCIgXHJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiIGlkPVwidGFibGVGaWx0ZXJDYW5jZWxcIiBjb2xvcj1cInRlcnRpYXJ5XCI+XHJcbiAgICAgICAgICAgICAge3snYXJtYXR1cmUuc29mLXRhYmxlLmNhbmNlbCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXg9XCIwIDEgYXV0b1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiIG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cInNvZi1idXR0b24tdjJcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIiBpZD1cInRhYmxlRmlsdGVyQXBwbHlcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICB7eydhcm1hdHVyZS5zb2YtdGFibGUucmVzdWx0cycgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZmllbGRzZXQ+XHJcbn1cclxuXHJcbjxhZy1ncmlkLWFuZ3VsYXIgXHJcbiAgW2Z4U2hvd109XCJpc0dyaWREYXRhUmVuZGVyZWQoKVwiXHJcbiAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQpXCIgXHJcbiAgKGZpcnN0RGF0YVJlbmRlcmVkKT1cIm9uRmlyc3REYXRhUmVuZGVyZWQoKVwiXHJcbiAgKGZpbHRlckNoYW5nZWQpPVwib25GaWx0ZXJDaGFuZ2VkKClcIlxyXG4gIChwYWdpbmF0aW9uQ2hhbmdlZCk9XCJjaGFuZ2VQYWdlU2l6ZSgkZXZlbnQpXCIgXHJcbiAgW3Jvd0RhdGFdPVwicm93RGF0YVwiIFxyXG4gIFtjb2x1bW5EZWZzXT1cImNvbERlZnNcIiBcclxuICBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCIgXHJcbiAgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFxyXG4gIFtzdXBwcmVzc1BhZ2luYXRpb25QYW5lbF09XCJ0cnVlXCJcclxuICBbcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JdPVwicGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JcIiBcclxuICBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2luYXRpb25QYWdlU2l6ZVwiXHJcbiAgW2hlYWRlckhlaWdodF09XCJyb3dIZWlnaHRcIiBcclxuICBbcm93SGVpZ2h0XT1cInJvd0hlaWdodFwiIFxyXG4gIFtkb21MYXlvdXRdPVwiJ2F1dG9IZWlnaHQnXCIgXHJcbiAgW3Rvb2x0aXBTaG93RGVsYXldPVwidG9vbHRpcFNob3dEZWxheVwiXHJcbiAgW292ZXJsYXlOb1Jvd3NUZW1wbGF0ZV09XCInYXJtYXR1cmUuc29mLXRhYmxlLm5vLXJvd3MnIHwgdHJhbnNsYXRlXCJcclxuICBbY2xhc3Mubm8tcm93c109XCIhdG90YWxMZW5ndGhcIlxyXG4gIGNsYXNzPVwiYWctdGhlbWUtbWF0ZXJpYWxcIj5cclxuPC9hZy1ncmlkLWFuZ3VsYXI+XHJcblxyXG48ZGl2IFxyXG4gIFtmeFNob3ddPVwiaXNHcmlkRGF0YVJlbmRlcmVkKClcIlxyXG4gIGNsYXNzPVwiY3VzdG9tLXBhZ2luYXRvclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmaXJzdC1zZWN0aW9uXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXBhcnQtMVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgPG1hdC1zZWxlY3QgXHJcbiAgICAgICAgI3BhZ2VTaXplU2VsZWN0XHJcbiAgICAgICAgaWQ9XCJwYWdlU2l6ZUlucHV0XCIgbmFtZT1cInBhZ2VTaXplSW5wdXRcIiBcclxuICAgICAgICBbKHZhbHVlKV09XCJwYWdpbmF0aW9uUGFnZVNpemVcIiBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiPlxyXG4gICAgICAgIEBmb3IgKHNpemUgb2YgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I7IGxldCBpID0gJGluZGV4OyB0cmFjayBpKSB7XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBcclxuICAgICAgICAgICAgY2xhc3M9XCJwYWdlLW9wdGlvblwiIGlkPVwic2l6ZXt7aX19XCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInBhZ2luYXRpb25QYWdlU2l6ZVNlbGVjdG9yW2ldXCI+XHJcbiAgICAgICAgICAgIHt7c2l6ZX19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJyZW50LXBhZ2VcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e3BhZ2luYXRpb25QYWdlU2l6ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LWljb25cIj5cclxuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ3BoLWJvbGQgcGgtY2FyZXQtJyArIChwYWdlU2l6ZVNlbGVjdC5wYW5lbE9wZW4gPyAndXAnOidkb3duJylcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxzcGFuIGNsYXNzPVwicGFnZUNoYW5nZVRleHRcIj5cclxuICAgICAge3twYWdlQ2hhbmdlVGV4dH19IHt7J2FybWF0dXJlLnNvZi10YWJsZS5vZicgfCB0cmFuc2xhdGV9fSB7e3RvdGFsTGVuZ3RofX1cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZ28tdG8tcGFnZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm91dGVyLWJveFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXBhcnRcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgXHJcbiAgICAgICAgICAjcGFnZU51bWJlclNlbGVjdFxyXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblBhZ2VOdW1iZXJDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXHJcbiAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50UGFnZVwiIFxyXG4gICAgICAgICAgaWQ9XCJwYWdlU2VsZWxjdG9yXCIgbmFtZT1cInBhZ2VTZWxlY3RvclwiIGRpc2FibGVSaXBwbGU9XCJ0cnVlXCI+XHJcbiAgICAgICAgICBAZm9yIChwYWdlIG9mIHBhZ2VTZWxlY3RvcjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJwYWdlXCIgY2xhc3M9XCJwYWdlLW9wdGlvblwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC1wYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e3BhZ2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC1wYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e2N1cnJlbnRQYWdlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9mLXBhZ2VcIj4ge3snYXJtYXR1cmUuc29mLXRhYmxlLm9mJyB8IHRyYW5zbGF0ZX19IHt7dG90YWxOdW1iZXJPZlBhZ2VzfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdC1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ3BoLWJvbGQgcGgtY2FyZXQtJyArIChwYWdlTnVtYmVyU2VsZWN0LnBhbmVsT3BlbiA/ICd1cCc6J2Rvd24nKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5hdiBjbGFzcz1cInNlY29uZC1zZWN0aW9uXCI+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCJcclxuICAgICAgICBpZD1cInByZXYtYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiIFxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3NjcmVlbi1yZWFkZXIucGFnaW5hdGlvbi5wcmV2aW91cycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtY2FyZXQtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKGNsaWNrKT1cIm5leHRQYWdlKClcIiBcclxuICAgICAgICBpZD1cIm5leHQtYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gdG90YWxOdW1iZXJPZlBhZ2VzXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidzY3JlZW4tcmVhZGVyLnBhZ2luYXRpb24ubmV4dCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtY2FyZXQtcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uYXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuQGlmICghaXNHcmlkRGF0YVJlbmRlcmVkKCkpIHtcclxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIj5cclxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiLz5cclxuICA8L2Rpdj5cclxufVxyXG4iXX0=
500
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29mLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FybWF0dXJlL2FnLWdyaWQtY29tcG9uZW50cy9zcmMvc29mLXRhYmxlL3NvZi10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcm1hdHVyZS9hZy1ncmlkLWNvbXBvbmVudHMvc3JjL3NvZi10YWJsZS9zb2YtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sTUFBTSxFQUVOLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFckQsT0FBTyxFQUdMLHlCQUF5QixFQUMxQixNQUFNLGtEQUFrRCxDQUFDO0FBZ0IxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFFdkQsNENBQTRDO0FBTTVDLE1BQU0sT0FBTyxpQkFBaUI7SUFMOUI7UUFPRSxzRUFBc0U7UUFDdEQsWUFBTyxHQUFlLEVBQUUsQ0FBQztRQUV6QywyREFBMkQ7UUFDM0MsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFLNUMsa0JBQWtCO1FBQ0YsK0JBQTBCLEdBQWtCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFOUUsb0JBQW9CO1FBQ0osaUJBQVksR0FBWSxJQUFJLENBQUM7UUFFN0MsMENBQTBDO1FBQzFCLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRTdDLDRDQUE0QztRQUM1Qix3QkFBbUIsR0FB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c0NvbnRlbnQiOlsiaW1wb3J0IHsgXHJcbiAgQ29tcG9uZW50LCBcclxuICBFbGVtZW50UmVmLCBcclxuICBFdmVudEVtaXR0ZXIsIFxyXG4gIGluamVjdCwgXHJcbiAgSW5wdXQsIFxyXG4gIE9uQ2hhbmdlcywgXHJcbiAgT25Jbml0LCBcclxuICBPdXRwdXQsIFxyXG4gIHNpZ25hbCwgXHJcbiAgU2ltcGxlQ2hhbmdlcywgXHJcbiAgVmlld0NoaWxkLCBcclxuICBXcml0YWJsZVNpZ25hbCBcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgXHJcbiAgQ29sdW1uRGF0YSwgXHJcbiAgQ29sdW1uT3B0aW9uc0RhdGEsIFxyXG4gIFNvZkNvbHVtbk9wdGlvbnNDb21wb25lbnQgXHJcbn0gZnJvbSAnLi4vY29sdW1uLW9wdGlvbnMtbW9kYWwvY29sdW1uLW9wdGlvbnMuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7XHJcbiAgQXBwbHlDb2x1bW5TdGF0ZVBhcmFtcyxcclxuICBDb2xEZWYsXHJcbiAgQ29sdW1uLFxyXG4gIENvbHVtblN0YXRlLFxyXG4gIEZpbHRlck1vZGVsLFxyXG4gIEdyaWRBcGksXHJcbiAgR3JpZFJlYWR5RXZlbnQsXHJcbiAgSVJvd05vZGUsXHJcbiAgUGFnaW5hdGlvbkNoYW5nZWRFdmVudCxcclxuICBTdXBwcmVzc0tleWJvYXJkRXZlbnRQYXJhbXMsXHJcbiAgVGV4dEZpbHRlck1vZGVsXHJcbn0gZnJvbSBcImFnLWdyaWQtY29tbXVuaXR5XCI7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG4vKiogVGhlIFNvZnRoZW9uIEFybWF0dXJlIFRhYmxlIGNvbXBvbmVudCAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NvZi10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NvZi10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3NvZi10YWJsZS5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFNvZlRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICAvKiogVGhlIGxhbmd1YWdlIHRleHQgb3IgYSBrZXkgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoaXMgY29tcG9uZW50ICovXHJcbiAgQElucHV0KCkgcHVibGljIHJvd0RhdGE6IEFycmF5PGFueT4gPSBbXTtcclxuXHJcbiAgLyoqIENvbHVtbiBEZWZpbml0aW9uczogRGVmaW5lcyAmIGNvbnRyb2xzIGdyaWQgY29sdW1ucy4gKi9cclxuICBASW5wdXQoKSBwdWJsaWMgY29sRGVmczogQXJyYXk8Q29sRGVmPiA9IFtdO1xyXG5cclxuICAvKiogU2l6ZSBtb2RlcyBmb3IgdGFibGUgKi9cclxuICBASW5wdXQoKSBwcml2YXRlIHNpemVNb2RlOiAnQ29tcGFjdCcgfCAnUm9vbXknIHwgJ0RlZmF1bHQnO1xyXG5cclxuICAvKiogUGFnZXMgc2l6ZXMgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I6IEFycmF5PG51bWJlcj4gPSBbMTAsIDIwLCA1MCwgMTAwXTtcclxuXHJcbiAgLyoqIEVuYWJsZSBzZWFyY2ggKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZW5hYmxlU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLyoqIEVuYWJsZSBjdXN0b20gdGV4dCBmaWx0ZXIgZHJvcGRvd25zICovXHJcbiAgQElucHV0KCkgcHVibGljIGVuYWJsZUZpbHRlcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIC8qKiBFbmFibGUgY29sdW1uIG9wdGlvbnMgbW9kYWwgc2VsZWN0aW9uICovXHJcbiAgQElucHV0KCkgcHVibGljIGVuYWJsZUNvbHVtbk9wdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvKiogRW5hYmxlIGV4cG9ydCBidXR0b24gdG8gb3V0cHV0IGZpbHRlcmVkIHJvdyBkYXRhICovXHJcbiAgQElucHV0KCkgcHVibGljIGVuYWJsZUV4cG9ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogXHJcbiAgICogVG8gZGlzcGxheSB0aGUgdGV4dCBvbiB0aGUgY29sdW1uIG9wdGlvbnMgbW9kYWwsIHdoaWNoIHN0YXRlcyAtXHJcbiAgICogYFwiT3B0aW9ucyB3aWxsIGJlIHNhdmVkIGZvciB0aGUgbmV4dCB0aW1lIHlvdSBsb2cgaW4uXCJgXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKiBAZGVzY3JpcHRpb24gc2V0IHRvIHRydWUgaWYgc2V0LXVwIGZvciBzYXZpbmcgcHJlZmVyZW5jZXMgdG8gVXNlciBkYXRhLlxyXG4gICAqIEBub3RlIFlvdSBjYW4gc3RpbGwgc2F2ZSBwcmVmZXJlbmNlcyB0byBfbG9jYWxfIG9yIF9zZXNzaW9uXyBzdG9yYWdlXHJcbiAgICogdXNpbmcgdGhlIGBzYXZlZENvbHVtblN0YXRlYCBpbnB1dCwgYW5kIGB1cGRhdGVkQ29sdW1uU3RhdGVgIG91dHB1dCBldmVudC5cclxuICAgKiBAc2VlIFRoZSBEZW1vIHNpdGUgaXMgc2F2aW5nIHRvIGxvY2FsIHN0b3JhZ2UuXHJcbiAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgc2hvd1NhdmVDb2x1bW5PcHRpb25zVGV4dDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKiogXHJcbiAgICogTmFtZS9sYWJlbCBvZiB0aGUgdGFibGUgXHJcbiAgICogQG5vdGUgc2hvdWxkIGJlIGEgdHJhbnNsYXRpb24ga2V5XHJcbiAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgdGFibGVOYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKiBVc2VycyBzYXZlZCBjb2x1bW4gb3B0aW9ucyBzdGF0ZSAqL1xyXG4gIEBJbnB1dCgpIHByaXZhdGUgc2F2ZWRDb2x1bW5TdGF0ZTogQXBwbHlDb2x1bW5TdGF0ZVBhcmFtcztcclxuXHJcbiAgLyoqIE91dHB1dCB1cGRhdGVkIGNvbHVtbiBvcHRpb25zIGV2ZW50IHRvIHNhdmUgdG8gdXNlciBvciBicm93c2VyIHN0b3JhZ2UgKi9cclxuICBAT3V0cHV0KCkgdXBkYXRlZENvbHVtblN0YXRlOiBFdmVudEVtaXR0ZXI8QXBwbHlDb2x1bW5TdGF0ZVBhcmFtcz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKiBPdXRwdXQgdXBkYXRlZCBjb2x1bW4gb3B0aW9ucyBldmVudCB0byBzYXZlIHRvIHVzZXIgb3IgYnJvd3NlciBzdG9yYWdlICovXHJcbiAgQE91dHB1dCgpIGZpbHRlcmVkUm93RGF0YUZvckV4cG9ydDogRXZlbnRFbWl0dGVyPEV4cG9ydFRhYmxlRGF0YT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIC8qKiB0aGUgc2VhcmNoIGlucHV0ICovXHJcbiAgQFZpZXdDaGlsZCgnZ3JpZFNlYXJjaFRleHRJbnB1dCcpIGdyaWRTZWFyY2hUZXh0SW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcblxyXG4gIC8qKiBUaGUgaGlkZGVuIGVsZW1lbnQgdGhhdCBhbm5vdW5jZXMgd2hlbiB0aGUgdGFibGUgY29udGVudCBjaGFuZ2VzIGZyb20gZmlsdGVyICovXHJcbiAgQFZpZXdDaGlsZCgnYXJpYVJlc3VsdHNDb3VudCcpIHB1YmxpYyBhcmlhUmVzdWx0c0NvdW50OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgLyoqIFxyXG4gICAqIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnQgY29sdW1uIHN0YXRlXHJcbiAgICogQG5vdGUgSWYgY29sdW1ucyBhcmUgcmUtZGVmaW5lZCAob25DaGFuZ2VzKSwgdGhpcyBzdGF0ZSB3aWxsIGJlIGFwcGxpZWRcclxuICAqL1xyXG4gIHByaXZhdGUgY3VycmVudENvbHVtblN0YXRlOiBBcHBseUNvbHVtblN0YXRlUGFyYW1zO1xyXG5cclxuICAvKiogQ29sdW1uIG5hbWVzIHRoYXQgc2hvdWxkIGJlIGZpbHRlcmFibGUgKi9cclxuICBwdWJsaWMgY29sRmlsdGVyczogQXJyYXk8U29mVGFibGVGaWx0ZXI+ID0gW107XHJcblxyXG4gIC8qKiBSb3cgSGVpZ2h0IGZvciB0YWJsZSAqL1xyXG4gIHB1YmxpYyByb3dIZWlnaHQ6IG51bWJlciA9IDQ4O1xyXG5cclxuICAvKiogQ3VycmVudCBQYWdlIEluZGV4ICovXHJcbiAgcHVibGljIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAwO1xyXG5cclxuICAvKiogR3JpZCBBUEkgKi9cclxuICBwcml2YXRlIGdyaWRBcGkhOiBHcmlkQXBpO1xyXG5cclxuICAvKiogSXMgdGhlIHRhYmxlIHJlYWR5IHRvIGJlIGRpc3BsYXllZCAqL1xyXG4gIHB1YmxpYyBpc0dyaWREYXRhUmVuZGVyZWQ6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcclxuXHJcbiAgLyoqIERlZmF1bHQgUGFnZSBTaXplICovXHJcbiAgcHVibGljIHBhZ2luYXRpb25QYWdlU2l6ZTogbnVtYmVyID0gMjA7IFxyXG5cclxuICAvKiogVG9vbCB0aXAgc2hvdyBkZWxheSAqL1xyXG4gIHB1YmxpYyB0b29sdGlwU2hvd0RlbGF5OiBudW1iZXIgPSA1MDA7XHJcblxyXG4gIC8qKiBcclxuICAgKiBEZWZhdWx0IENvbHVtbiBEZWZpbml0aW9uIFxyXG4gICAqIEBub3RlIChzdXBwcmVzc0tleWJvYXJkRXZlbnQpIFRhYmxlIGNlbGxzIGNhbiBiZSBuYXZpZ2F0ZWQgd2l0aCB0aGUgYXJyb3cga2V5cywgXHJcbiAgICogaWYgdGhlIGNlbGwgY29udGFpbnMgYSBidXR0b24geW91IGNhbiBUYWIgaW50byB0aGUgYnV0dG9uLCBlbnRlciB8IHNwYWNlIHRvIGludGVyYWN0LlxyXG4gICovXHJcbiAgcHVibGljIGRlZmF1bHRDb2xEZWY6IENvbERlZiA9IHtcclxuICAgIHJlc2l6YWJsZTogZmFsc2UsIC8vIGRpc2FibGUgcmVzaXplIFxyXG4gICAgc3VwcHJlc3NIZWFkZXJNZW51QnV0dG9uOiB0cnVlLCAvLyBkaXNhYmxlIGRlZmF1bHQgZmlsdGVyIG1lbnUgXHJcbiAgICBzdXBwcmVzc01vdmFibGU6IHRydWUsIC8vIGRpc2FibGUgZGVmYXVsdCBkcmFnICYgZHJvcCBmb3IgY29sdW1ucyBcclxuICAgIGNlbGxTdHlsZTogeyBqdXN0aWZ5Q29udGVudDogXCJjZW50ZXJcIiB9LFxyXG4gICAgc3VwcHJlc3NLZXlib2FyZEV2ZW50OiAocGFyYW1zOiBTdXBwcmVzc0tleWJvYXJkRXZlbnRQYXJhbXMpID0+IHtcclxuICAgICAgcmV0dXJuIHBhcmFtcy5ldmVudC5rZXkgPT09ICdUYWInID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKiBMZW5ndGggb2YgZGF0YSAqL1xyXG4gIHB1YmxpYyB0b3RhbExlbmd0aDogbnVtYmVyID0gMDtcclxuXHJcbiAgLyoqVG90YWwgbnVtYmVyIG9mIHBhZ2VzICovXHJcbiAgcHVibGljIHRvdGFsTnVtYmVyT2ZQYWdlczogbnVtYmVyO1xyXG5cclxuICAvKiogUGFnZSBDaGFuZ2UgdGV4dCAqL1xyXG4gIHB1YmxpYyBwYWdlQ2hhbmdlVGV4dDogc3RyaW5nO1xyXG5cclxuICAvKiogUGFnZSBzZWxlY3RvciBhcnJheSAqL1xyXG4gIHB1YmxpYyBwYWdlU2VsZWN0b3I6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuXHJcbiAgLyoqIEZpbHRlciBQYW5lbCBvcGVuIHN0YXRlICovXHJcbiAgcHVibGljIGZpbHRlck9wZW5TdGF0ZTogYm9vbGVhbjtcclxuXHJcbiAgLyoqIFRoZSBsaXN0IG9mIGZpbHRlcnMgYW5kIHRoZSBzZWxlY3RlZCB2YWx1ZXMgKi9cclxuICBwdWJsaWMgZmlsdGVyU2VsZWN0aW9uczogQXJyYXk8QXJyYXk8c3RyaW5nPj4gPSBbXTtcclxuXHJcbiAgLyoqIG1hdC1kaWFsb2cgKi9cclxuICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XHJcblxyXG4gIC8qKiBUcmFuc2xhdGlvbiBzZXJ2aWNlICovXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG5cclxuICAvKiogT24gY29tcG9uZW50IGluaXQgKi9cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlc2l6ZUdyaWQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFuZ3VsYXIgT24gQ2hhbmdlc1xyXG4gICAqIEBwYXJhbSBjaGFuZ2VzIFRoZSBpbnB1dCBjaGFuZ2VzXHJcbiAgICovXHJcbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzLnJvd0RhdGEgJiYgIWNoYW5nZXMucm93RGF0YS5maXJzdENoYW5nZSAmJiAhIXRoaXMuZ3JpZEFwaSkge1xyXG4gICAgICB0aGlzLnRvdGFsTGVuZ3RoID0gdGhpcy5yb3dEYXRhLmxlbmd0aDtcclxuICAgICAgdGhpcy5wb3B1bGF0ZUZpbHRlcnMoKTtcclxuICAgICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlVGV4dCgpO1xyXG4gICAgICB0aGlzLmlzR3JpZERhdGFSZW5kZXJlZC5zZXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlcy5jb2xEZWZzICYmICFjaGFuZ2VzLmNvbERlZnMuZmlyc3RDaGFuZ2UgJiYgISF0aGlzLmdyaWRBcGkpIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5ncmlkQXBpLmFwcGx5Q29sdW1uU3RhdGUodGhpcy5jdXJyZW50Q29sdW1uU3RhdGUpO1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVGaWx0ZXJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGdyaWQgaGFzIGluZ2VzdGVkIHRoZSBpbnB1dCBkYXRhXHJcbiAgICogQHBhcmFtIHBhcmFtcyBHcmlkIFJlYWR5IEV2ZW50LFxyXG4gICAqIFRoZSBncmlkIGhhcyBpbml0aWFsaXplZCBhbmQgaXMgcmVhZHkgZm9yIG1vc3QgYXBpIGNhbGxzLCBidXQgbWF5IG5vdCBiZSBmdWxseSByZW5kZXJlZCB5ZXQuXHJcbiAgICogQG5vdGUgeW91IGNhbiBub3QgYWNjZXNzIHRoaXMuZ3JpZEFwaSBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBydW4sIFxyXG4gICAqIGFueSBhdHRlbXB0cyB0byBhY2Nlc3MgdGhpcy5ncmlkQXBpIGluIHRoaXMgY29tcG9uZW50cyBuZ09uSW5pdCBvciB0aGUgZmlyc3QgbmdPbkNoYW5nZXMgY3ljbGVcclxuICAgKiB3aWxsIHJlc3VsdCBpbiBhIHR5cGUgZXJyb3I7IGJlaW5nIHRoaXMuZ3JpZEFwaSBpcyB1bmRlZmluZWQgYXQgdGhhdCB0aW1lLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBvbkdyaWRSZWFkeShwYXJhbXM6IEdyaWRSZWFkeUV2ZW50KSB7XHJcbiAgICB0aGlzLmdyaWRBcGkgPSBwYXJhbXMuYXBpO1xyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKSArIDE7XHJcbiAgICB0aGlzLnRvdGFsTGVuZ3RoID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRSb3dDb3VudCgpO1xyXG4gICAgd2luZG93Lm9ucmVzaXplID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBtb2JpbGVXaWR0aFRocmVzaG9sZCA9IDc1MjtcclxuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IG1vYmlsZVdpZHRoVGhyZXNob2xkKSB7XHJcbiAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSA0MDtcclxuICAgICAgICB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSA9IDEwO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVzaXplR3JpZCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZVRleHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBGaXJlZCB0aGUgZmlyc3QgdGltZSBkYXRhIGlzIHJlbmRlcmVkIGludG8gdGhlIGdyaWQuICovXHJcbiAgcHVibGljIG9uRmlyc3REYXRhUmVuZGVyZWQoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2F2ZWRDb2x1bW5TdGF0ZT8uc3RhdGUubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGNvbHVtblN0YXRlOiBBcnJheTxDb2x1bW5TdGF0ZT4gPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5ncmlkQXBpLmdldENvbHVtblN0YXRlKCkpO1xyXG4gICAgICB0aGlzLnNhdmVkQ29sdW1uU3RhdGUgPSB7XHJcbiAgICAgICAgc3RhdGU6IGNvbHVtblN0YXRlLFxyXG4gICAgICAgIGFwcGx5T3JkZXI6IHRydWVcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHRoaXMuZ3JpZEFwaS5hcHBseUNvbHVtblN0YXRlKHRoaXMuc2F2ZWRDb2x1bW5TdGF0ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZWRDb2x1bW5TdGF0ZS5lbWl0KHRoaXMuc2F2ZWRDb2x1bW5TdGF0ZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRDb2x1bW5TdGF0ZSA9IHRoaXMuc2F2ZWRDb2x1bW5TdGF0ZTtcclxuICAgIHRoaXMucG9wdWxhdGVGaWx0ZXJzKCk7XHJcbiAgICB0aGlzLmhhbmRsZVBhZ2VDaGFuZ2VUZXh0KCk7XHJcbiAgICB0aGlzLmlzR3JpZERhdGFSZW5kZXJlZC5zZXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvKiogUmVzaXplIGdyaWQgZnJvbSBzaXplIG1vZGUgKi9cclxuICBwcml2YXRlIHJlc2l6ZUdyaWQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zaXplTW9kZSA9PT0gJ0NvbXBhY3QnKSB7XHJcbiAgICAgIHRoaXMucm93SGVpZ2h0ID0gNDA7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLnNpemVNb2RlID09PSAnUm9vbXknKSB7XHJcbiAgICAgIHRoaXMucm93SGVpZ2h0ID0gNTY7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5yb3dIZWlnaHQgPSA0ODtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9uIHBhZ2Ugc2VsZWN0aW9uIGNoYW5nZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgc2VsZWN0ZWQgcGFnZSBudW1iZXJcclxuICAgKi9cclxuICBwdWJsaWMgb25QYWdlTnVtYmVyQ2hhbmdlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIC8vIFRoZSBwYWdlIHZhbHVlcyBhcmUgMSBvZmYgdG8gbWFrZSBhIDEtYmFzZWQgYXJyYXksIGJ1dCB0aGUgYWN0dWFsIHBhZ2VzIGFyZSBhIDAtYmFzZWQgYXJyYXkuXHJcbiAgICB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdvVG9QYWdlKHZhbHVlIC0gMSk7XHJcbiAgfVxyXG5cclxuICAvKiogT24gbmV4dCBwYWdlIGV2ZW50ICovXHJcbiAgcHVibGljIG5leHRQYWdlKCkge1xyXG4gICAgdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25Hb1RvTmV4dFBhZ2UoKTtcclxuICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZVRleHQoKVxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKSArIDE7XHJcbiAgfVxyXG5cclxuICAvKiogT24gUHJldmlvdXMgUGFnZSBFdmVudCAqL1xyXG4gIHB1YmxpYyBwcmV2aW91c1BhZ2UoKSB7XHJcbiAgICB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdvVG9QcmV2aW91c1BhZ2UoKTtcclxuICAgIHRoaXMuaGFuZGxlUGFnZUNoYW5nZVRleHQoKVxyXG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKSArIDE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBDaGFuZ2UgUGFnZSBTaXplIEV2ZW50XHJcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBwYWdpbmF0aW9uIGV2ZW50XHJcbiAgICovXHJcbiAgcHVibGljIGNoYW5nZVBhZ2VTaXplKGV2ZW50OiBQYWdpbmF0aW9uQ2hhbmdlZEV2ZW50KSB7XHJcbiAgICAvLyBPbmx5IG5lZWQgdG8gZG8gdGhpcyB3b3JrIGlmIHRoZSBwYWdlIHNpemUgaGFzIGNoYW5nZWQuXHJcbiAgICBpZiAoZXZlbnQubmV3UGFnZVNpemUpIHtcclxuICAgICAgLy8gVXBkYXRlIHRoZSB0b3RhbCBudW1iZXIgb2YgZmlsdGVyZWQgcm93cy5cclxuICAgICAgdGhpcy50b3RhbExlbmd0aCA9IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0Um93Q291bnQoKTtcclxuICAgICAgLy8gSGFuZGxlIHRleHQgY2hhbmdlc1xyXG4gICAgICB0aGlzLmhhbmRsZVBhZ2VDaGFuZ2VUZXh0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogXHJcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGdyaWQgZmlsdGVyIGlzIGNoYW5nZWQgXHJcbiAgICogQHRvZG8gdXBkYXRlIHRoZSBmaWx0ZXIgZHJvcGRvd24gb3B0aW9ucyBiYXNlZCBvbiB0aGUgZmlsdGVyZWQgZGF0YSBzZXQsIGluc3RlYWQgb2YgdGhlIGNvbXBsZXRlIGRhdGEgc2V0LlxyXG4gICAqL1xyXG4gIHB1YmxpYyBvbkZpbHRlckNoYW5nZWQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBwcmV2aW91c1RvdGFsTGVuZ3RoOiBudW1iZXIgPSBOdW1iZXIodGhpcy50b3RhbExlbmd0aCk7XHJcbiAgICAvLyBVcGRhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBmaWx0ZXJlZCByb3dzLlxyXG4gICAgdGhpcy50b3RhbExlbmd0aCA9IHRoaXMuZ3JpZEFwaS5wYWdpbmF0aW9uR2V0Um93Q291bnQoKTtcclxuICAgIGlmICh0aGlzLnRvdGFsTGVuZ3RoICE9PSBwcmV2aW91c1RvdGFsTGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYXJpYVJlc3VsdHNDb3VudC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuYXJpYVJlc3VsdHNDb3VudC5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMudG90YWxMZW5ndGggPT09IDBcclxuICAgICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdhcm1hdHVyZS5zb2YtdGFibGUuc2NyZWVuLXJlYWRlci5maWx0ZXJlZC1yZXN1bHRzLm5vLXJlc3VsdHMnKVxyXG4gICAgICAgIDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXHJcbiAgICAgICAgICAnYXJtYXR1cmUuc29mLXRhYmxlLnNjcmVlbi1yZWFkZXIuZmlsdGVyZWQtcmVzdWx0cy5oYXMtcmVzdWx0cycsIHsncmVzdWx0c0NvdW50JzogdGhpcy50b3RhbExlbmd0aH1cclxuICAgICAgICApO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmFyaWFSZXN1bHRzQ291bnQubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBcIlwiO1xyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlVGV4dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdlbmVyYXRlZCB0ZXh0IGZvciBzaG93aW5nIHBhZ2VzIGluIGZvcm1hdDogMS0xMSBvZiAxMSAqL1xyXG4gIHByaXZhdGUgaGFuZGxlUGFnZUNoYW5nZVRleHQoKTogdm9pZCB7XHJcbiAgICAvLyBIYW5kbGUgZW1wdHkgdGFibGVcclxuICAgIGlmICghdGhpcy50b3RhbExlbmd0aCB8fCB0aGlzLnBhZ2luYXRpb25QYWdlU2l6ZSA9PT0gMCkge1xyXG4gICAgICAvLyBSZXNldCB0aGUgcGFnaW5hdGlvbiBVSVxyXG4gICAgICB0aGlzLnRvdGFsTnVtYmVyT2ZQYWdlcyA9IDE7XHJcbiAgICAgIHRoaXMucGFnZVNlbGVjdG9yID0gWzFdO1xyXG4gICAgICB0aGlzLnBhZ2VDaGFuZ2VUZXh0ID0gYDBgO1xyXG4gICAgICB0aGlzLmdyaWRBcGkuc2hvd05vUm93c092ZXJsYXkoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ncmlkQXBpLmhpZGVPdmVybGF5KCk7XHJcbiAgICB9XHJcbiAgICAvLyBVcGRhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlc1xyXG4gICAgdGhpcy50b3RhbE51bWJlck9mUGFnZXMgPSB0aGlzLmdyaWRBcGkucGFnaW5hdGlvbkdldFRvdGFsUGFnZXMoKSB8fCBNYXRoLmNlaWwodGhpcy50b3RhbExlbmd0aCAvIHRoaXMucGFnaW5hdGlvblBhZ2VTaXplKSB8fCAxO1xyXG4gICAgLy8gUmVzZXQgdGhlIHBhZ2Ugc2VsZWN0b3JcclxuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xyXG4gICAgY29uc3QgcGFnZVNlbGVjdG9yID0gW107XHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSB0aGlzLnRvdGFsTnVtYmVyT2ZQYWdlczsgaSsrKSB7XHJcbiAgICAgIHBhZ2VTZWxlY3Rvci5wdXNoKGkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wYWdlU2VsZWN0b3IgPSBwYWdlU2VsZWN0b3I7XHJcbiAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCh0aGlzLnRvdGFsTGVuZ3RoLCAwKTtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5wYWdpbmF0aW9uUGFnZVNpemU7XHJcbiAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5ncmlkQXBpLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpICogcGFnZVNpemU7XHJcbiAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggPCBsZW5ndGggPyBNYXRoLm1pbihzdGFydEluZGV4ICsgcGFnZVNpemUsIGxlbmd0aCkgOiBzdGFydEluZGV4ICsgcGFnZVNpemU7XHJcbiAgICB0aGlzLnBhZ2VDaGFuZ2VUZXh0ID0gYCR7c3RhcnRJbmRleCArIDF9IC0gJHtlbmRJbmRleH1gO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwbHkgdGhlIHNlYXJjaCBmaWx0ZXIgb24gZGF0YSB3aGVuIHNlYXJjaCB0ZXh0IGNoYW5nZWRcclxuICAgKi9cclxuICBwdWJsaWMgb25TZWFyY2hUZXh0Q2hhbmdlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JpZEFwaS5zZXRHcmlkT3B0aW9uKFwicXVpY2tGaWx0ZXJUZXh0XCIsIHRoaXMuZ3JpZFNlYXJjaFRleHRJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKiBUb2dnbGUgdGhlIGZpbHRlciBwYW5lbCBkaXNwbGF5ICovXHJcbiAgcHVibGljIHRvZ2dsZUZpbHRlclBhbmVsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5maWx0ZXJPcGVuU3RhdGUgPSAhdGhpcy5maWx0ZXJPcGVuU3RhdGU7XHJcbiAgfVxyXG5cclxuICAvKiogQXBwbHkgdGhlIHNlbGVjdGVkIGZpbHRlcnMgKi9cclxuICBwdWJsaWMgYXBwbHlGaWx0ZXJzKCk6IHZvaWQge1xyXG4gICAgbGV0IHRhYmxlRmlsdGVyTW9kZWw6IEZpbHRlck1vZGVsID0ge307XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sRmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBjb2xGaWx0ZXIgPSB0aGlzLmNvbEZpbHRlcnNbaV07XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSB0aGlzLmZpbHRlclNlbGVjdGlvbnNbaV07XHJcbiAgICAgIGlmICghc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAvLyBSZXNldCBvdXQgdGhlIGNvbHVtbiBmaWx0ZXJzXHJcbiAgICAgICAgdGhpcy5ncmlkQXBpLnNldENvbHVtbkZpbHRlck1vZGVsKGNvbEZpbHRlci5oZWFkZXIsIG51bGwpO1xyXG4gICAgICAgIHRhYmxlRmlsdGVyTW9kZWxbY29sRmlsdGVyLmhlYWRlcl0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAvLyBTZXQgdGhlIHNpbmdsZSBmaWx0ZXIgZm9yIHRoZSBjb2x1bW5cclxuICAgICAgICBsZXQgZmlsdGVyTW9kZWw6IFRleHRGaWx0ZXJNb2RlbCA9IHsgZmlsdGVyVHlwZTogJ3RleHQnLCB0eXBlOiAnZXF1YWxzJywgZmlsdGVyOiBzZWxlY3RlZEVsZW1lbnRzWzBdIH07XHJcbiAgICAgICAgLy8gQXBwbHkgdGhlIGZpbHRlciBtb2RlbCB0byB0aGUgY29sdW1uXHJcbiAgICAgICAgdGFibGVGaWx0ZXJNb2RlbFtjb2xGaWx0ZXIuaGVhZGVyXSA9IGZpbHRlck1vZGVsO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIFNldCBtdWx0aXBsZSBPUiBmaWx0ZXJzIGZvciB0aGUgY29sdW1uXHJcbiAgICAgICAgbGV0IGZpbHRlck1vZGVsczogQ29tYmluZWRTaW1wbGVNb2RlbDxUZXh0RmlsdGVyTW9kZWw+ID0geyBmaWx0ZXJUeXBlOiAndGV4dCcsIG9wZXJhdG9yOiAnT1InLCBjb25kaXRpb25zOiBbXSB9O1xyXG4gICAgICAgIC8vIFNldCB0aGUgc2VsZWN0ZWQgZWxlbWVudHMgaW4gdGhlIG1vZGVsXHJcbiAgICAgICAgZm9yIChjb25zdCBzZWxlY3RlZEVsZW1lbnQgb2Ygc2VsZWN0ZWRFbGVtZW50cykge1xyXG4gICAgICAgICAgZmlsdGVyTW9kZWxzLmNvbmRpdGlvbnMucHVzaCh7IGZpbHRlclR5cGU6ICd0ZXh0JywgdHlwZTogJ2VxdWFscycsIGZpbHRlcjogc2VsZWN0ZWRFbGVtZW50IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBBcHBseSB0aGUgZmlsdGVyIG1vZGVsIGNvbGxlY3Rpb24gdG8gdGhlIGNvbHVtblxyXG4gICAgICAgIHRhYmxlRmlsdGVyTW9kZWxbY29sRmlsdGVyLmhlYWRlcl0gPSBmaWx0ZXJNb2RlbHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIE9uY2UgZXZlcnl0aGluZyBpcyBzZXQsIHVwZGF0ZSB0aGUgZmlsdGVyc1xyXG4gICAgdGhpcy5ncmlkQXBpLnNldEZpbHRlck1vZGVsKHRhYmxlRmlsdGVyTW9kZWwpO1xyXG4gICAgdGhpcy5ncmlkQXBpLm9uRmlsdGVyQ2hhbmdlZCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENsZWFyIGFsbCBmaWx0ZXJzICovXHJcbiAgcHVibGljIGNsZWFyRmlsdGVycygpOiB2b2lkIHtcclxuICAgIC8vIENsZWFyIGFsbCBzZWxlY3Rpb25zXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmlsdGVyU2VsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmZpbHRlclNlbGVjdGlvbnNbaV0gPSBbXTtcclxuICAgIH1cclxuICAgIC8vIFNldCB0aGUgZnVsbCBncmlkIGZpbHRlciBtb2RlbCB0byBudWxsXHJcbiAgICB0aGlzLmdyaWRBcGkuc2V0RmlsdGVyTW9kZWwobnVsbCk7XHJcbiAgICAvLyBVcGRhdGUgdGhlIGRpc3BsYXlcclxuICAgIHRoaXMuZ3JpZEFwaS5vbkZpbHRlckNoYW5nZWQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBubyBmaWx0ZXJzIGFyZSBzZWxlY3RlZFxyXG4gICAqIEByZXR1cm5zIFRydWUgaWYgYSBmaWx0ZXIgaXMgc2VsZWN0ZWQsIGZhbHNlIG90aGVyd2lzZS5cclxuICAgKi9cclxuICBwdWJsaWMgaGFzRW1wdHlGaWx0ZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmZpbHRlclNlbGVjdGlvbnMgfHwgIXRoaXMuZmlsdGVyU2VsZWN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBmb3IgKGNvbnN0IGZpbHRlclNlbGVjdCBvZiB0aGlzLmZpbHRlclNlbGVjdGlvbnMpIHtcclxuICAgICAgLy8gSWYgYXQgbGVhc3Qgb25lIGZpbHRlciBoYXMgYmVlbiBzZWxlY3RlZCwgcmV0dXJuIGZhbHNlXHJcbiAgICAgIGlmIChmaWx0ZXJTZWxlY3QubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKiBDYW5jZWwgdGhlIGNoYW5nZXMgdG8gdGhlIGZpbHRlciBhbmQgY2xvc2VzIHRoZSBmaWx0ZXIgcGFuZWwgKi9cclxuICBwdWJsaWMgY2FuY2VsRmlsdGVyQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2xGaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vIEdldCB0aGUgc3RvcmVkIGZpbHRlcnMgZm9yIHRoZSBnaXZlbiBtb2RlbFxyXG4gICAgICBjb25zdCBjb2xGaWx0ZXIgPSB0aGlzLmNvbEZpbHRlcnNbaV07XHJcbiAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5ncmlkQXBpLmdldENvbHVtbkZpbHRlck1vZGVsKGNvbEZpbHRlci5oZWFkZXIpO1xyXG4gICAgICBsZXQgZmlsdGVyU2VsZWN0aW9uRGF0YSA9IFtdO1xyXG4gICAgICBpZiAobW9kZWwgJiYgbW9kZWxbXCJjb25kaXRpb25zXCJdKSB7XHJcbiAgICAgICAgLy8gVGhlIG1vZGVsIGlzIGEgY29tYmluZWQgbW9kZWwgd2l0aCBtdWx0aXBsZSBzZWxlY3Rpb25zXHJcbiAgICAgICAgY29uc3QgZmlsdGVyTW9kZWwgPSBtb2RlbCBhcyBDb21iaW5lZFNpbXBsZU1vZGVsPFRleHRGaWx0ZXJNb2RlbD47XHJcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGZpbHRlck1vZGVsLmNvbmRpdGlvbnMpIHtcclxuICAgICAgICAgIGZpbHRlclNlbGVjdGlvbkRhdGEucHVzaChlbGVtZW50LmZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKG1vZGVsKSB7XHJcbiAgICAgICAgLy8gQXNzdW1lIHRoZSBtb2RlbCBpcyBhIHNpbmdsZSBUZXh0IEZpbHRlciBNb2RlbFxyXG4gICAgICAgIGxldCBmaWx0ZXJTZWxlY3Rpb246IFRleHRGaWx0ZXJNb2RlbCA9IG1vZGVsO1xyXG4gICAgICAgIGZpbHRlclNlbGVjdGlvbkRhdGEucHVzaChmaWx0ZXJTZWxlY3Rpb24uZmlsdGVyKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBTZXQgdGhlIGZpbHRlciBzZWxlY3Rpb25zXHJcbiAgICAgIHRoaXMuZmlsdGVyU2VsZWN0aW9uc1tpXSA9IGZpbHRlclNlbGVjdGlvbkRhdGE7XHJcbiAgICB9XHJcbiAgICAvLyBDbG9zZSB0aGUgZmlsdGVyIHBhbmVsXHJcbiAgICB0aGlzLnRvZ2dsZUZpbHRlclBhbmVsKCk7XHJcbiAgfVxyXG5cclxuICAvKiogUG9wdWxhdGVzIHRoZSBmaWx0ZXIgZHJvcGRvd25zICovXHJcbiAgcHJpdmF0ZSBwb3B1bGF0ZUZpbHRlcnMoKTogdm9pZCB7XHJcbiAgICAvLyBSZXNldCB0aGUgZmlsdGVyIGRyb3Bkb3duc1xyXG4gICAgdGhpcy5maWx0ZXJTZWxlY3Rpb25zID0gW107XHJcbiAgICB0aGlzLmNvbEZpbHRlcnMgPSBbXTtcclxuICAgIC8vIEdldCB0aGUgY29sdW1uIGRlZmluaXRpb25zIHRoYXQgaGF2ZSBhIGZpbHRlclxyXG4gICAgY29uc3QgZmlsdGVyZWRDb2xzOiBBcnJheTxDb2xEZWY+ID0gdGhpcy5ncmlkQXBpLmdldENvbHVtbkRlZnMoKS5maWx0ZXIoKGRlZikgPT4gZGVmWydmaWx0ZXInXSk7XHJcbiAgICAvLyBDcmVhdGUgYSBtYXAgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcyBmb3IgZWFjaCBmaWVsZFxyXG4gICAgY29uc3QgZmlsdGVyVmFsdWVzTWFwID0gbmV3IE1hcDxzdHJpbmcsIFNldDxhbnk+PigpO1xyXG4gICAgLy8gSW5pdGlhbGl6ZSBzZXRzIGZvciBlYWNoIGZpZWxkIChjb2x1bW4pIFxyXG4gICAgZm9yIChjb25zdCBjb2wgb2YgZmlsdGVyZWRDb2xzKSB7XHJcbiAgICAgIGNvbnN0IGZpZWxkOiBzdHJpbmcgPSBjb2xbXCJmaWVsZFwiXTtcclxuICAgICAgZmlsdGVyVmFsdWVzTWFwLnNldChmaWVsZCwgbmV3IFNldDxhbnk+KCkpO1xyXG4gICAgfVxyXG4gICAgLy8gVXNlIGZvckVhY2hOb2RlIHRvIGl0ZXJhdGUgb3ZlciB0aGUgcm93c1xyXG4gICAgdGhpcy5ncmlkQXBpLmZvckVhY2hOb2RlKChub2RlOiBJUm93Tm9kZSkgPT4ge1xyXG4gICAgICBpZiAobm9kZS5kYXRhKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgZmlsdGVyZWRDb2xzKSB7XHJcbiAgICAgICAgICBjb25zdCBmaWVsZDogc3RyaW5nID0gY29sW1wiZmllbGRcIl07XHJcbiAgICAgICAgICBjb25zdCB2YWx1ZTogYW55ID0gdGhpcy5ncmlkQXBpLmdldENlbGxWYWx1ZSh7cm93Tm9kZTogbm9kZSwgY29sS2V5OiBmaWVsZH0pO1xyXG4gICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclZhbHVlc01hcC5nZXQoZmllbGQpPy5hZGQodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRoZSB1bmlxdWUgdmFsdWVzIGZvciBlYWNoIGZpZWxkLCBwb3B1bGF0ZSBmaWx0ZXIgb3B0aW9uc1xyXG4gICAgZm9yIChjb25zdCBjb2wgb2YgZmlsdGVyZWRDb2xzKSB7XHJcbiAgICAgIGNvbnN0IGZpZWxkOiBzdHJpbmcgPSBjb2xbXCJmaWVsZFwiXTtcclxuICAgICAgY29uc3QgbGFiZWw6IHN0cmluZyA9IGNvbFtcImhlYWRlck5hbWVcIl07XHJcbiAgICAgIGNvbnN0IHVuaXF1ZVZhbHVlczogQXJyYXk8YW55PiA9IEFycmF5LmZyb20oZmlsdGVyVmFsdWVzTWFwLmdldChmaWVsZCkgfHwgW10pLnNvcnQoKTtcclxuICAgICAgaWYgKHVuaXF1ZVZhbHVlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgLy8gRW5zdXJlIHRoZXJlJ3Mgc3BhY2UgZm9yIGZpbHRlciBzZWxlY3Rpb25zXHJcbiAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3Rpb25zLnB1c2goW10pOyBcclxuICAgICAgICB0aGlzLmNvbEZpbHRlcnMucHVzaCh7IGhlYWRlcjogZmllbGQsIGxhYmVsOiBsYWJlbCwgb3B0aW9uczogdW5pcXVlVmFsdWVzIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogT3BlbiB0aGUgY29sdW1uIG9wdGlvbnMgbW9kYWwgKi9cclxuICBwdWJsaWMgb3BlbkNvbHVtbk9wdGlvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb2x1bW5TdGF0ZTogQXJyYXk8Q29sdW1uU3RhdGU+ID0gdGhpcy5ncmlkQXBpLmdldENvbHVtblN0YXRlKCk7XHJcbiAgICBjb25zdCBjb2x1bW5EYXRhOiBBcnJheTxDb2x1bW5EYXRhPiA9IHRoaXMuY29sdW1uU3RhdGVUb0RhdGEoY29sdW1uU3RhdGUpO1xyXG4gICAgY29uc3QgaW5pdGlhbENvbHVtbkRhdGE6IEFycmF5PENvbHVtbkRhdGE+ID0gdGhpcy5jb2x1bW5TdGF0ZVRvRGF0YSh0aGlzLnNhdmVkQ29sdW1uU3RhdGUuc3RhdGUpO1xyXG4gICAgY29uc3QgY29sdW1uT3B0aW9uc0RhdGE6IENvbHVtbk9wdGlvbnNEYXRhID0ge1xyXG4gICAgICB0YWJsZU5hbWU6IHRoaXMudGFibGVOYW1lLFxyXG4gICAgICBjb2x1bW5EYXRhLFxyXG4gICAgICBpbml0aWFsQ29sdW1uRGF0YSxcclxuICAgICAgc2hvd1NhdmVDb2x1bW5PcHRpb25zVGV4dDogdGhpcy5zaG93U2F2ZUNvbHVtbk9wdGlvbnNUZXh0XHJcbiAgICB9O1xyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTb2ZDb2x1bW5PcHRpb25zQ29tcG9uZW50LCB7XHJcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxyXG4gICAgICBwb3NpdGlvbjogeyBib3R0b206ICc0MHB4JywgcmlnaHQ6ICc0MHB4JyB9LFxyXG4gICAgICBhcmlhTGFiZWxsZWRCeTogJ2NvbHVtbi1vcHRpb25zLWhlYWRpbmcnLFxyXG4gICAgICBkYXRhOiBjb2x1bW5PcHRpb25zRGF0YVxyXG4gICAgfSk7XHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5waXBlKFxyXG4gICAgICB0YWtlKDEpLFxyXG4gICAgICB0YXAoKHVwZGF0ZWRDb2x1bW5TdGF0ZTogQXBwbHlDb2x1bW5TdGF0ZVBhcmFtcykgPT4ge1xyXG4gICAgICAgIGlmICh1cGRhdGVkQ29sdW1uU3RhdGUgJiYgdXBkYXRlZENvbHVtblN0YXRlLnN0YXRlLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5ncmlkQXBpLmFwcGx5Q29sdW1uU3RhdGUodXBkYXRlZENvbHVtblN0YXRlKTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlZENvbHVtblN0YXRlLmVtaXQodXBkYXRlZENvbHVtblN0YXRlKTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudENvbHVtblN0YXRlID0gdXBkYXRlZENvbHVtblN0YXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNYXBzIGBBcnJheTxDb2x1bW5TdGF0ZT5gIHRvIGBBcnJheTxDb2x1bW5EYXRhPmAgXHJcbiAgICogQG5vdGUgZmlsdGVycyBvdXQgYW55IGNvbHVtbnMgbWFya2VkIGFzICdwaW5uZWQnIGJ5IHRoZSBjb2x1bW4gZGVmaW5pdGlvbnMuXHJcbiAgICogQG5vdGUgZmlsdGVycyBhbnkgY29sdW1ucyB3aXRob3V0IGEgJ2hlYWRlck5hbWUnLlxyXG4gICAqIEBwYXJhbSBjb2x1bW5TdGF0ZSB0aGUgY29sdW1uIHN0YXRlIHRvIG1vZGlmeVxyXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIGNvbHVtbiBkYXRhIGZvcm1hdHRlZCB0byBiZSBpbmdlc3RlZCBieSB0aGUgYFNvZkNvbHVtbk9wdGlvbnNDb21wb25lbnRgXHJcbiAgKi9cclxuICBwcml2YXRlIGNvbHVtblN0YXRlVG9EYXRhKGNvbHVtblN0YXRlOiBBcnJheTxDb2x1bW5TdGF0ZT4pOiBBcnJheTxDb2x1bW5EYXRhPiB7XHJcbiAgICByZXR1cm4gY29sdW1uU3RhdGVcclxuICAgICAgLmZpbHRlcigoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaGVhZGVyTmFtZTogc3RyaW5nID0gdGhpcy5ncmlkQXBpLmdldENvbHVtbkRlZihjb2x1bW4uY29sSWQpPy5oZWFkZXJOYW1lIHx8IFwiXCI7XHJcbiAgICAgICAgaWYgKGhlYWRlck5hbWUgJiYgaGVhZGVyTmFtZS5sZW5ndGggJiYgIWNvbHVtbi5waW5uZWQpIHtcclxuICAgICAgICAgIHJldHVybiBjb2x1bW47XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAubWFwKChjb2x1bW4pID0+IHtcclxuICAgICAgICBjb25zdCBoZWFkZXJOYW1lOiBzdHJpbmcgPSB0aGlzLmdyaWRBcGkuZ2V0Q29sdW1uRGVmKGNvbHVtbi5jb2xJZCkuaGVhZGVyTmFtZTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaWQ6IGNvbHVtbi5jb2xJZCxcclxuICAgICAgICAgIGlzQ2hlY2tlZDogIWNvbHVtbi5oaWRlLFxyXG4gICAgICAgICAgdGV4dDogaGVhZGVyTmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogRW1pdCB0aGUgY3VycmVudCBmaWx0ZXJlZC9zb3J0ZWQgcm93IGRhdGEgKi9cclxuICBwdWJsaWMgZXhwb3J0RmlsdGVyZWRSb3dEYXRhKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgcm93RGF0YTogQXJyYXk8YW55PiA9IFtdO1xyXG4gICAgY29uc3QgY29sdW1uczogQXJyYXk8Q29sdW1uPiA9IHRoaXMuZ3JpZEFwaS5nZXRBbGxEaXNwbGF5ZWRDb2x1bW5zKCkuZmlsdGVyKChjb2wpID0+IGNvbC5nZXRDb2xEZWYoKS5oZWFkZXJOYW1lKTtcclxuICAgIGNvbnN0IHRhYmxlSGVhZGVyczogQXJyYXk8S2V5VmFsUGFpcj4gPSBbXTtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpZWxkOiBzdHJpbmcgPSBjb2wuZ2V0Q29sRGVmKCkuZmllbGQ7XHJcbiAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IGNvbC5nZXRDb2xEZWYoKS5oZWFkZXJOYW1lO1xyXG4gICAgICB0YWJsZUhlYWRlcnMucHVzaCh7XHJcbiAgICAgICAga2V5OiBmaWVsZCxcclxuICAgICAgICB2YWx1ZTogbmFtZVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5ncmlkQXBpLmZvckVhY2hOb2RlQWZ0ZXJGaWx0ZXJBbmRTb3J0KChub2RlOiBJUm93Tm9kZTxhbnk+KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5vZGVEYXRhOiBhbnkgPSB7fTtcclxuICAgICAgY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgY29uc3QgY29sSWQ6IHN0cmluZyA9IGNvbC5nZXRDb2xJZCgpO1xyXG4gICAgICAgIC8vIFVzZSBncmlkQXBpJ3MgZ2V0Q2VsbFZhbHVlIHRvIGdldCB0aGUgdmFsdWUgdHJhbnNmb3JtZWQgYnkgdmFsdWVHZXR0ZXJcclxuICAgICAgICBub2RlRGF0YVtjb2xJZF0gPSB0aGlzLmdyaWRBcGkuZ2V0Q2VsbFZhbHVlKHsgcm93Tm9kZTogbm9kZSwgY29sS2V5OiBjb2xJZCB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJvd0RhdGEucHVzaChub2RlRGF0YSk7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGV4cG9ydERhdGE6IEV4cG9ydFRhYmxlRGF0YSA9IHtcclxuICAgICAgdGFibGVIZWFkZXJzLFxyXG4gICAgICByb3dEYXRhXHJcbiAgICB9O1xyXG4gICAgdGhpcy5maWx0ZXJlZFJvd0RhdGFGb3JFeHBvcnQuZW1pdChleHBvcnREYXRhKTtcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBFeHBvcnRUYWJsZURhdGEge1xyXG4gIHRhYmxlSGVhZGVycz86IEFycmF5PEtleVZhbFBhaXI+O1xyXG4gIHJvd0RhdGE/OiBBcnJheTxhbnk+XHJcbn1cclxuXHJcbmludGVyZmFjZSBLZXlWYWxQYWlyIHsgXHJcbiAga2V5Pzogc3RyaW5nO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKiogVXNlZCBmb3Igc2V0dGluZyBmaWx0ZXIgdmFsdWVzICovXHJcbmNsYXNzIFNvZlRhYmxlRmlsdGVyIHtcclxuICAvKiogVGhlIGNvbHVtbiBoZWFkZXIgKi9cclxuICBoZWFkZXI6IHN0cmluZztcclxuICAvKiogVGhlIGNvbHVtbiBsYWJlbCBvciB0cmFuc2xhdGlvbiBrZXkgKi9cclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIC8qKiBUaGUgY29sdW1uIGZpbHRlciBvcHRpb25zICovXHJcbiAgb3B0aW9uczogc3RyaW5nW10gPSBbXTtcclxufVxyXG5cclxuLyoqIEEgZmlsdGVyIGNvbWJpbmluZyBtdWx0aXBsZSBjb25kaXRpb25zLCB0YWtlbiBmcm9tIEFnR3JpZCovXHJcbmNsYXNzIENvbWJpbmVkU2ltcGxlTW9kZWw8VD4ge1xyXG4gIC8qKiBUaGUgZmlsdGVyIHR5cGUuIFVzdWFsbHkgJ3RleHQnICovXHJcbiAgZmlsdGVyVHlwZTogc3RyaW5nO1xyXG4gIC8qKiBUaGUgb3BlcmF0b3IuIFVzdWFsbHkgJ09SJyAqL1xyXG4gIG9wZXJhdG9yOiAnQU5EJyB8ICdPUic7XHJcbiAgLyoqIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgRmlsdGVyIE1vZGVsICovXHJcbiAgY29uZGl0aW9uczogVFtdO1xyXG59XHJcbiIsIjxkaXYgXHJcbiAgW2Z4U2hvd109XCJpc0dyaWREYXRhUmVuZGVyZWQoKVwiXHJcbiAgZnhMYXlvdXRHYXA9XCIxNnB4XCIgbS1iLTI0PlxyXG4gIEBpZiAoZW5hYmxlRmlsdGVyICYmIGNvbEZpbHRlcnMubGVuZ3RoKSB7XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyUGFuZWwoKVwiIFxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLXYyXCJcclxuICAgICAgW2NsYXNzLmZpbHRlci1zZWxlY3RlZF09XCJmaWx0ZXJPcGVuU3RhdGVcIiBcclxuICAgICAgaWQ9XCJidG4tZW5hYmxlLWZpbHRlclwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwicGggcGgtYm9sZCBwaC1zbGlkZXJzLWhvcml6b250YWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIHt7J2FybWF0dXJlLnNvZi10YWJsZS5maWx0ZXInIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKGVuYWJsZVNlYXJjaCkge1xyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwic29mLWZvcm0tZmllbGQgdGFibGUtc2VhcmNoLWZpZWxkIGRlbnNlLTRcIiBmeEZsZXg9XCJhdXRvXCI+XHJcbiAgICAgIDxzcGFuIG1hdFByZWZpeD5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtbWFnbmlmeWluZy1nbGFzcyBzZWFyY2gtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8bWF0LWxhYmVsIGNsYXNzPVwic2VhcmNoLWxhYmVsXCI+e3snYXJtYXR1cmUuc29mLXRhYmxlLnNlYXJjaCcgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXQgXHJcbiAgICAgICAgKGlucHV0KT1cIm9uU2VhcmNoVGV4dENoYW5nZWQoKVwiIFxyXG4gICAgICAgICNncmlkU2VhcmNoVGV4dElucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgaWQ9XCJncmlkU2VhcmNoVGV4dElucHV0XCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidhcm1hdHVyZS5zb2YtdGFibGUuc2NyZWVuLXJlYWRlci5zZWFyY2gtZmlsdGVyLWRlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZVwiLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgfVxyXG4gIEBpZiAoZW5hYmxlQ29sdW1uT3B0aW9ucykge1xyXG4gICAgPGJ1dHRvbiBcclxuICAgICAgKGNsaWNrKT1cIm9wZW5Db2x1bW5PcHRpb25zKClcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLWljb24tdjJcIiBcclxuICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIiBpZD1cIm9wZW4tY29sdW1uLW9wdGlvbnNcIlxyXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidhcm1hdHVyZS5zb2YtdGFibGUuc2NyZWVuLXJlYWRlci5jb2x1bW4tb3B0aW9ucy1idG4nIHwgdHJhbnNsYXRlXCJcclxuICAgICAgW21hdFRvb2x0aXBdPVwiJ2FybWF0dXJlLnNvZi10YWJsZS5zY3JlZW4tcmVhZGVyLmNvbHVtbi1vcHRpb25zLWJ0bicgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBDbGFzcz1cIm1kYy10b29sdGlwX19zdXJmYWNlIGJlbG93XCI+XHJcbiAgICAgIDxpIGNsYXNzPVwicGgtYm9sZCBwaC1wYXVzZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYoZW5hYmxlRXhwb3J0KSB7XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICAoY2xpY2spPVwiZXhwb3J0RmlsdGVyZWRSb3dEYXRhKClcIlxyXG4gICAgICBtYXQtZmxhdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLWljb24tdjJcIiBcclxuICAgICAgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIiBpZD1cImV4cG9ydC10YWJsZVwiXHJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ2FybWF0dXJlLnNvZi10YWJsZS5zY3JlZW4tcmVhZGVyLmV4cG9ydC10YWJsZScgfCB0cmFuc2xhdGVcIlxyXG4gICAgICBbbWF0VG9vbHRpcF09XCInYXJtYXR1cmUuc29mLXRhYmxlLnNjcmVlbi1yZWFkZXIuZXhwb3J0LXRhYmxlJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcENsYXNzPVwibWRjLXRvb2x0aXBfX3N1cmZhY2UgYmVsb3dcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaC1ib2xkIHBoLWV4cG9ydFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIH1cclxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbc29mLXRhYmxlLXJpZ2h0LWJ1dHRvbnNdXCI+PC9uZy1jb250ZW50PlxyXG4gIDwhLS0gXHJcbiAgT25seSBpbmplY3QgPGJ1dHRvbj4ncyBpbnNpZGUgYW4gPG5nLWNvbnRhaW5lciBzb2YtdGFibGUtcmlnaHQtYnV0dG9ucz5cclxuICAuLi4gXHJcbiAgPG5nLWNvbnRhaW5lciBzb2YtdGFibGUtcmlnaHQtYnV0dG9ucz5cclxuICAgIDxidXR0b24gXHJcbiAgICAgIChjbGljayk9XCJhbnlGdW5jdGlvbigpXCJcclxuICAgICAgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgXHJcbiAgICAgIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCIgYXJpYS1sYWJlbD1cImFueSBidXR0b25cIlxyXG4gICAgICBtYXRUb29sdGlwPVwiYW55IGJ1dHRvblwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcENsYXNzPVwibWRjLXRvb2x0aXBfX3N1cmZhY2UgYmVsb3dcIj5cclxuICAgICAgPGkgY2xhc3M9XCJwaC1ib2xkIHBoLWFjb3JuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgLi4uIFxyXG4gIG5vdGU6IG1ha2Ugc3VyZSBidXR0b25zIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIHRvIG1hdGNoIG90aGVycyA9XHJcbiAgYG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cInNvZi1idXR0b24taWNvbi12MlwiIGNvbG9yPVwic2Vjb25kYXJ5XCIgc2l6ZT1cInNtYWxsXCJgXHJcbiAgKiByZW1lbWJlciB0byBhZGQgYXJpYS1sYWJlbCBhbmQgdG9vbHRpcCBmb3IgaWNvbiBidXR0b25cclxuICAtLT5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICNhcmlhUmVzdWx0c0NvdW50IGNsYXNzPVwic3Itb25seVwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiPjwvZGl2PlxyXG5cclxuQGlmIChpc0dyaWREYXRhUmVuZGVyZWQoKSAmJiBmaWx0ZXJPcGVuU3RhdGUpIHtcclxuICA8ZmllbGRzZXQgXHJcbiAgICBjbGFzcz1cImZpbHRlci1wYW5lbFwiIHJvbGU9XCJyZWdpb25cIlxyXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInYXJtYXR1cmUuc29mLXRhYmxlLnNjcmVlbi1yZWFkZXIuc2VsZWN0LWZpbHRlcnMtZGVzY3JpcHRpb24nIHwgdHJhbnNsYXRlXCI+XHJcbiAgICA8cD5cclxuICAgICAgPGkgY2xhc3M9XCJwaCBwaC1ib2xkIHBoLXNsaWRlcnMtaG9yaXpvbnRhbFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtOFwiPnt7J2FybWF0dXJlLnNvZi10YWJsZS5maWx0ZXInIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICA8L3A+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLXBhbmVsLXNlbGVjdC1jb250YWluZXIgbS12LTIwXCI+XHJcbiAgICAgIEBmb3IgKGNvbEZpbHRlciBvZiBjb2xGaWx0ZXJzOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xyXG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwic29mLWZvcm0tZmllbGQgdGFibGUtZmlsdGVyLXNlbGVjdFwiPlxyXG4gICAgICAgICAgPG1hdC1sYWJlbD57e2NvbEZpbHRlci5sYWJlbH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICA8bWF0LXNlbGVjdCBcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJTZWxlY3Rpb25zW2ldXCIgXHJcbiAgICAgICAgICAgIG11bHRpcGxlIFxyXG4gICAgICAgICAgICBpZD1cImZpbHRlckRyb3Bkb3due3tpfX1cIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7J2FybWF0dXJlLnNvZi10YWJsZS5hbGwnIHwgdHJhbnNsYXRlfX1cIiBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICBAZm9yIChjb2xPcHRpb24gb2YgY29sRmlsdGVyLm9wdGlvbnM7IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJjb2xPcHRpb25cIj5cclxuICAgICAgICAgICAgICAgIHt7Y29sT3B0aW9ufX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgICAgPGRpdiBmeEZsZXg9XCI1MCVcIj5cclxuICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgKGNsaWNrKT1cImNsZWFyRmlsdGVycygpXCIgW2Rpc2FibGVkXT1cImhhc0VtcHR5RmlsdGVycygpXCIgXHJcbiAgICAgICAgICBtYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi12MlwiIHNpemU9XCJtZWRpdW1cIlxyXG4gICAgICAgICAgaWQ9XCJ0YWJsZUZpbHRlckNsZWFyXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiPlxyXG4gICAgICAgICAge3snYXJtYXR1cmUuc29mLXRhYmxlLnJlc2V0JyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIjUwJVwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjIlXCIgZnhMYXlvdXRBbGlnbj1cImZsZXgtZW5kXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjAgMSBhdXRvXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEZpbHRlckNoYW5nZXMoKVwiIG1hdC1idXR0b24gY2xhc3M9XCJzb2YtYnV0dG9uLXYyXCIgXHJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1lZGl1bVwiIGlkPVwidGFibGVGaWx0ZXJDYW5jZWxcIiBjb2xvcj1cInRlcnRpYXJ5XCI+XHJcbiAgICAgICAgICAgICAge3snYXJtYXR1cmUuc29mLXRhYmxlLmNhbmNlbCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeEZsZXg9XCIwIDEgYXV0b1wiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIFxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiIG1hdC1mbGF0LWJ1dHRvbiBjbGFzcz1cInNvZi1idXR0b24tdjJcIlxyXG4gICAgICAgICAgICAgIHNpemU9XCJtZWRpdW1cIiBpZD1cInRhYmxlRmlsdGVyQXBwbHlcIiBjb2xvcj1cInByaW1hcnlcIj5cclxuICAgICAgICAgICAgICB7eydhcm1hdHVyZS5zb2YtdGFibGUucmVzdWx0cycgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZmllbGRzZXQ+XHJcbn1cclxuXHJcbjxhZy1ncmlkLWFuZ3VsYXIgXHJcbiAgW2Z4U2hvd109XCJpc0dyaWREYXRhUmVuZGVyZWQoKVwiXHJcbiAgKGdyaWRSZWFkeSk9XCJvbkdyaWRSZWFkeSgkZXZlbnQpXCIgXHJcbiAgKGZpcnN0RGF0YVJlbmRlcmVkKT1cIm9uRmlyc3REYXRhUmVuZGVyZWQoKVwiXHJcbiAgKGZpbHRlckNoYW5nZWQpPVwib25GaWx0ZXJDaGFuZ2VkKClcIlxyXG4gIChwYWdpbmF0aW9uQ2hhbmdlZCk9XCJjaGFuZ2VQYWdlU2l6ZSgkZXZlbnQpXCIgXHJcbiAgW3Jvd0RhdGFdPVwicm93RGF0YVwiIFxyXG4gIFtjb2x1bW5EZWZzXT1cImNvbERlZnNcIiBcclxuICBbZGVmYXVsdENvbERlZl09XCJkZWZhdWx0Q29sRGVmXCIgXHJcbiAgW3BhZ2luYXRpb25dPVwidHJ1ZVwiIFxyXG4gIFtzdXBwcmVzc1BhZ2luYXRpb25QYW5lbF09XCJ0cnVlXCJcclxuICBbcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JdPVwicGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3JcIiBcclxuICBbcGFnaW5hdGlvblBhZ2VTaXplXT1cInBhZ2luYXRpb25QYWdlU2l6ZVwiXHJcbiAgW2hlYWRlckhlaWdodF09XCJyb3dIZWlnaHRcIiBcclxuICBbcm93SGVpZ2h0XT1cInJvd0hlaWdodFwiIFxyXG4gIFtkb21MYXlvdXRdPVwiJ2F1dG9IZWlnaHQnXCIgXHJcbiAgW3Rvb2x0aXBTaG93RGVsYXldPVwidG9vbHRpcFNob3dEZWxheVwiXHJcbiAgW292ZXJsYXlOb1Jvd3NUZW1wbGF0ZV09XCInYXJtYXR1cmUuc29mLXRhYmxlLm5vLXJvd3MnIHwgdHJhbnNsYXRlXCJcclxuICBbY2xhc3Mubm8tcm93c109XCIhdG90YWxMZW5ndGhcIlxyXG4gIGNsYXNzPVwiYWctdGhlbWUtbWF0ZXJpYWxcIj5cclxuPC9hZy1ncmlkLWFuZ3VsYXI+XHJcblxyXG48ZGl2IFxyXG4gIFtmeFNob3ddPVwiaXNHcmlkRGF0YVJlbmRlcmVkKClcIlxyXG4gIGNsYXNzPVwiY3VzdG9tLXBhZ2luYXRvclwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmaXJzdC1zZWN0aW9uXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXBhcnQtMVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgPG1hdC1zZWxlY3QgXHJcbiAgICAgICAgI3BhZ2VTaXplU2VsZWN0XHJcbiAgICAgICAgaWQ9XCJwYWdlU2l6ZUlucHV0XCIgbmFtZT1cInBhZ2VTaXplSW5wdXRcIiBcclxuICAgICAgICBbKHZhbHVlKV09XCJwYWdpbmF0aW9uUGFnZVNpemVcIiBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiPlxyXG4gICAgICAgIEBmb3IgKHNpemUgb2YgcGFnaW5hdGlvblBhZ2VTaXplU2VsZWN0b3I7IGxldCBpID0gJGluZGV4OyB0cmFjayBpKSB7XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBcclxuICAgICAgICAgICAgY2xhc3M9XCJwYWdlLW9wdGlvblwiIGlkPVwic2l6ZXt7aX19XCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cInBhZ2luYXRpb25QYWdlU2l6ZVNlbGVjdG9yW2ldXCI+XHJcbiAgICAgICAgICAgIHt7c2l6ZX19XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJyZW50LXBhZ2VcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e3BhZ2luYXRpb25QYWdlU2l6ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0LWljb25cIj5cclxuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ3BoLWJvbGQgcGgtY2FyZXQtJyArIChwYWdlU2l6ZVNlbGVjdC5wYW5lbE9wZW4gPyAndXAnOidkb3duJylcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxzcGFuIGNsYXNzPVwicGFnZUNoYW5nZVRleHRcIj5cclxuICAgICAge3twYWdlQ2hhbmdlVGV4dH19IHt7J2FybWF0dXJlLnNvZi10YWJsZS5vZicgfCB0cmFuc2xhdGV9fSB7e3RvdGFsTGVuZ3RofX1cclxuICAgIDwvc3Bhbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZ28tdG8tcGFnZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm91dGVyLWJveFwiPlxyXG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnV0dG9uLXBhcnRcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgXHJcbiAgICAgICAgICAjcGFnZU51bWJlclNlbGVjdFxyXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblBhZ2VOdW1iZXJDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiXHJcbiAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50UGFnZVwiIFxyXG4gICAgICAgICAgaWQ9XCJwYWdlU2VsZWxjdG9yXCIgbmFtZT1cInBhZ2VTZWxlY3RvclwiIGRpc2FibGVSaXBwbGU9XCJ0cnVlXCI+XHJcbiAgICAgICAgICBAZm9yIChwYWdlIG9mIHBhZ2VTZWxlY3RvcjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJwYWdlXCIgY2xhc3M9XCJwYWdlLW9wdGlvblwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC1wYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e3BhZ2V9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZFwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVudC1wYWdlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2VcIj57e2N1cnJlbnRQYWdlfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9mLXBhZ2VcIj4ge3snYXJtYXR1cmUuc29mLXRhYmxlLm9mJyB8IHRyYW5zbGF0ZX19IHt7dG90YWxOdW1iZXJPZlBhZ2VzfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdC1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiJ3BoLWJvbGQgcGgtY2FyZXQtJyArIChwYWdlTnVtYmVyU2VsZWN0LnBhbmVsT3BlbiA/ICd1cCc6J2Rvd24nKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5hdiBjbGFzcz1cInNlY29uZC1zZWN0aW9uXCI+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCJcclxuICAgICAgICBpZD1cInByZXYtYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gMVwiIFxyXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3NjcmVlbi1yZWFkZXIucGFnaW5hdGlvbi5wcmV2aW91cycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtY2FyZXQtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gXHJcbiAgICAgICAgKGNsaWNrKT1cIm5leHRQYWdlKClcIiBcclxuICAgICAgICBpZD1cIm5leHQtYnV0dG9uXCIgbWF0LWZsYXQtYnV0dG9uIGNsYXNzPVwic29mLWJ1dHRvbi1pY29uLXYyXCIgY29sb3I9XCJzZWNvbmRhcnlcIiBzaXplPVwic21hbGxcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSA9PT0gdG90YWxOdW1iZXJPZlBhZ2VzXCJcclxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidzY3JlZW4tcmVhZGVyLnBhZ2luYXRpb24ubmV4dCcgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8aSBjbGFzcz1cInBoLWJvbGQgcGgtY2FyZXQtcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9uYXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuQGlmICghaXNHcmlkRGF0YVJlbmRlcmVkKCkpIHtcclxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb250YWluZXJcIj5cclxuICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBjb2xvcj1cInByaW1hcnlcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiLz5cclxuICA8L2Rpdj5cclxufVxyXG4iXX0=