@fundamental-ngx/platform 0.43.33 → 0.43.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/esm2020/list/free-content-list-item/free-content-list-item.component.mjs +5 -5
  2. package/esm2020/list/list.component.mjs +1 -5
  3. package/esm2020/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +1 -1
  4. package/esm2020/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +13 -3
  5. package/esm2020/table/components/table-header-row/table-header-row.component.mjs +3 -3
  6. package/esm2020/table/components/table-p13-dialog/table-p13-dialog.component.mjs +5 -3
  7. package/esm2020/table/components/table-row/table-row.component.mjs +18 -8
  8. package/esm2020/table/components/table-toolbar/table-toolbar.component.mjs +3 -3
  9. package/esm2020/table/table.component.mjs +40 -9
  10. package/esm2020/table-helpers/directives/index.mjs +2 -1
  11. package/esm2020/table-helpers/directives/table-visible-cell.directive.mjs +110 -0
  12. package/esm2020/table-helpers/index.mjs +2 -1
  13. package/esm2020/table-helpers/models/index.mjs +2 -1
  14. package/esm2020/table-helpers/models/table-cell-activate-event.model.mjs +12 -0
  15. package/esm2020/table-helpers/services/table-advanced-viewport-root.service.mjs +26 -0
  16. package/esm2020/table-helpers/services/table-row.service.mjs +9 -1
  17. package/esm2020/table-helpers/table-helpers.module.mjs +8 -5
  18. package/esm2020/upload-collection/dialogs/move-to/move-to.component.mjs +1 -1
  19. package/esm2020/upload-collection/upload-collection/upload-collection.component.mjs +1 -1
  20. package/esm2020/value-help-dialog/components/select-tab/select-tab.component.mjs +3 -3
  21. package/esm2020/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +3 -3
  22. package/esm2020/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +1 -1
  23. package/fesm2015/fundamental-ngx-platform-list.mjs +4 -8
  24. package/fesm2015/fundamental-ngx-platform-list.mjs.map +1 -1
  25. package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
  26. package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  27. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs +156 -5
  28. package/fesm2015/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  29. package/fesm2015/fundamental-ngx-platform-table.mjs +73 -21
  30. package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
  31. package/fesm2015/fundamental-ngx-platform-upload-collection.mjs +2 -2
  32. package/fesm2015/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  33. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +4 -4
  34. package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  35. package/fesm2015/fundamental-ngx-platform-variant-management.mjs +1 -1
  36. package/fesm2015/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  37. package/fesm2020/fundamental-ngx-platform-list.mjs +4 -8
  38. package/fesm2020/fundamental-ngx-platform-list.mjs.map +1 -1
  39. package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
  40. package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  41. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs +156 -5
  42. package/fesm2020/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
  43. package/fesm2020/fundamental-ngx-platform-table.mjs +72 -21
  44. package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
  45. package/fesm2020/fundamental-ngx-platform-upload-collection.mjs +2 -2
  46. package/fesm2020/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  47. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +4 -4
  48. package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  49. package/fesm2020/fundamental-ngx-platform-variant-management.mjs +1 -1
  50. package/fesm2020/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  51. package/fundamental-ngx-platform-v0.43.35.tgz +0 -0
  52. package/list/free-content-list-item/free-content-list-item.component.d.ts +1 -1
  53. package/package.json +4 -4
  54. package/schematics/ng-add/index.js +1 -1
  55. package/table/components/table-cell-header-popover/table-cell-header-popover.component.d.ts +5 -0
  56. package/table/components/table-row/table-row.component.d.ts +8 -1
  57. package/table/table.component.d.ts +22 -5
  58. package/table-helpers/directives/index.d.ts +1 -0
  59. package/table-helpers/directives/table-visible-cell.directive.d.ts +32 -0
  60. package/table-helpers/index.d.ts +1 -0
  61. package/table-helpers/models/index.d.ts +1 -0
  62. package/table-helpers/models/table-cell-activate-event.model.d.ts +10 -0
  63. package/table-helpers/services/table-advanced-viewport-root.service.d.ts +14 -0
  64. package/table-helpers/services/table-row.service.d.ts +7 -0
  65. package/table-helpers/table-helpers.module.d.ts +2 -1
  66. package/fundamental-ngx-platform-v0.43.33.tgz +0 -0
@@ -12,10 +12,11 @@ import * as i1 from "@angular/common";
12
12
  import * as i2 from "@angular/forms";
13
13
  import * as i3 from "@fundamental-ngx/core/table";
14
14
  import * as i4 from "@fundamental-ngx/core/checkbox";
15
- import * as i5 from "@fundamental-ngx/cdk/utils";
16
- import * as i6 from "@fundamental-ngx/platform/table-helpers";
17
- import * as i7 from "../table-editable-cell/table-editable-cell.component";
18
- import * as i8 from "@fundamental-ngx/i18n";
15
+ import * as i5 from "@fundamental-ngx/core/busy-indicator";
16
+ import * as i6 from "@fundamental-ngx/cdk/utils";
17
+ import * as i7 from "@fundamental-ngx/platform/table-helpers";
18
+ import * as i8 from "../table-editable-cell/table-editable-cell.component";
19
+ import * as i9 from "@fundamental-ngx/i18n";
19
20
  export class TableRowComponent extends TableRowDirective {
20
21
  /** @hidden */
21
22
  set _focusableViewCellItems(items) {
@@ -28,6 +29,11 @@ export class TableRowComponent extends TableRowDirective {
28
29
  /** @hidden */
29
30
  constructor() {
30
31
  super();
32
+ /**
33
+ * Whether to use placeholder [fd-busy-indicator] for cells that are not in the viewport
34
+ * This option works only when `onlyRenderVisibleCells` is true
35
+ */
36
+ this.useCellPlaceholder = false;
31
37
  /**
32
38
  * Event emitted when keyboard drag performed.
33
39
  */
@@ -189,13 +195,13 @@ export class TableRowComponent extends TableRowDirective {
189
195
  }
190
196
  }
191
197
  TableRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TableRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
192
- TableRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TableRowComponent, selector: "[fdp-table-row]", inputs: { rowId: "rowId", row: "row", index: "index", selectionMode: "selectionMode", selectableKey: "selectableKey", enableTristateMode: "enableTristateMode", fixed: "fixed", selectionColumnWidth: "selectionColumnWidth", freezeColumnsTo: "freezeColumnsTo", freezeEndColumnsTo: "freezeEndColumnsTo", isTreeRow: "isTreeRow" }, outputs: { keyboardDrag: "keyboardDrag" }, host: { attributes: { "role": "row" }, properties: { "attr.aria-expanded": "_isTreeRow(row) ? row.expanded : null", "attr.aria-rowindex": "this.index", "attr.aria-selected": "this._ariaSelected" } }, providers: [
198
+ TableRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TableRowComponent, selector: "[fdp-table-row]", inputs: { rowId: "rowId", row: "row", index: "index", selectionMode: "selectionMode", selectableKey: "selectableKey", enableTristateMode: "enableTristateMode", fixed: "fixed", selectionColumnWidth: "selectionColumnWidth", freezeColumnsTo: "freezeColumnsTo", freezeEndColumnsTo: "freezeEndColumnsTo", isTreeRow: "isTreeRow", onlyRenderVisibleCells: "onlyRenderVisibleCells", useCellPlaceholder: "useCellPlaceholder" }, outputs: { keyboardDrag: "keyboardDrag" }, host: { attributes: { "role": "row" }, properties: { "attr.aria-expanded": "_isTreeRow(row) ? row.expanded : null", "attr.aria-rowindex": "this.index", "attr.aria-selected": "this._ariaSelected" } }, providers: [
193
199
  {
194
200
  provide: FDK_FOCUSABLE_LIST_DIRECTIVE,
195
201
  useExisting: TableRowComponent
196
202
  },
197
203
  DestroyedService
198
- ], viewQueries: [{ propertyName: "_focusableViewCellItems", predicate: FDK_FOCUSABLE_ITEM_DIRECTIVE, descendants: true }, { propertyName: "_editableCells", predicate: EditableTableCell, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<td\n *ngIf=\"_fdpTableService._semanticHighlighting$ | async as semanticHighlighting\"\n fd-table-cell\n fd-table-status-indicator\n fdkDisabled\n [addDisabledClass]=\"false\"\n [status]=\"row.value[semanticHighlighting]\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n></td>\n\n<!-- hidden text for screenreader -->\n<ng-template #selectionScreenReaderText>\n <span\n aria-hidden=\"true\"\n [attr.id]=\"_rowSelectionHelperTextId\"\n [ngStyle]=\"{\n position: 'absolute !important',\n height: '1px',\n width: '1px',\n overflow: 'hidden',\n clip: 'rect(1px, 1px, 1px, 1px)',\n color: 'transparent',\n display: 'block'\n }\"\n >\n {{ (row.checked ? 'platformTable.deselectSingleRow' : 'platformTable.selectSingleRow') | fdTranslate }}\n </span>\n</ng-template>\n\n<!-- Row Selection Cell -->\n<ng-container [ngSwitch]=\"selectionMode\">\n <ng-container *ngSwitchCase=\"SELECTION_MODE.SINGLE\">\n <td\n *ngIf=\"row.value[selectableKey] !== false; else selectionMock\"\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [attr.role]=\"_hasRowHeaderColumn ? 'rowheader' : 'gridcell'\"\n fd-table-cell\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n [style]=\"\n _contentDensityObserver\n | async\n | selectionCellStyles : _rtl : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n \"\n [attr.aria-selected]=\"row.checked\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n (click)=\"_toggleSingleSelectableRow()\"\n (keydown.enter)=\"_toggleSingleSelectableRow($event)\"\n (keydown.space)=\"_toggleSingleSelectableRow($event)\"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"SELECTION_MODE.MULTIPLE\">\n <td\n *ngIf=\"row.value[selectableKey] !== false; else selectionMock\"\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n role=\"cell\"\n fd-table-cell\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n (keydown.enter)=\"_toggleMultiSelectRow(row, $event)\"\n (keydown.space)=\"_toggleMultiSelectRow(row, $event)\"\n [attr.aria-selected]=\"row.checked\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n [style]=\"\n _contentDensityObserver\n | async\n | selectionCellStyles : _rtl : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n \"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n <fd-checkbox\n tabIndexValue=\"-1\"\n labelClass=\"fd-table__checkbox-label\"\n [tristate]=\"enableTristateMode\"\n [tristateSelectable]=\"false\"\n [ngModel]=\"row.checked$ | async\"\n (ngModelChange)=\"_toggleMultiSelectRow(row)\"\n ></fd-checkbox>\n </td>\n </ng-container>\n</ng-container>\n\n<ng-template #selectionMock>\n <td\n class=\"fd-table__cell--checkbox\"\n role=\"gridcell\"\n fd-table-cell\n fdkDisabled\n [addDisabledClass]=\"false\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n ></td>\n</ng-template>\n\n<td\n *ngFor=\"\n let column of _fdpTableService.visibleColumns$ | async;\n let colIdx = index;\n last as isLast;\n trackBy: _columnTrackBy\n \"\n #tableCellElement\n [fdpTableCellResizable]=\"\n colIdx\n | columnResizableSide\n : _fdpTableService.visibleColumnsLength\n : (_fdpTableService._isShownNavigationColumn$ | async) === true\n \"\n [columnName]=\"column.name\"\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n [attr.role]=\"column.role\"\n [headers]=\"rowId + '__' + column.name\"\n [ngClass]=\"[\n 'fdp-table__col--' + column.name,\n column._freezed ? 'fd-table__cell--fixed' : '',\n column.name === freezeColumnsTo ? 'fd-table__cell--fixed-last' : '',\n column._endFreezed ? 'fd-table__cell--fixed-end' : '',\n column.name === freezeEndColumnsTo ? 'fd-table__cell--fixed-end-last' : '',\n row.isTree && colIdx === 0 ? 'fd-table__cell--expand' : '',\n isLast && (_fdpTableService._isShownNavigationColumn$ | async) === false ? 'is-last-child' : ''\n ]\"\n [ngStyle]=\"\n column\n | tableCellStyles\n : _rtl\n : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n : selectionColumnWidth\n : column._freezed\n : column._endFreezed\n : _tableColumnResizeService.getPrevColumnsWidth(column.name)\n : _tableColumnResizeService.getColumnWidthStyle(column.name)\n : _tableColumnResizeService.getNextColumnsWidth(column.name)\n \"\n [attr.aria-expanded]=\"_isTreeRowFirstCell(colIdx, row) ? row.expanded : null\"\n [attr.data-nesting-level]=\"colIdx === 0 ? row.level + 1 : null\"\n (cellFocused)=\"_tableRowService.cellFocused($event)\"\n (click)=\"_tableRowService.cellClicked({ index: colIdx, row })\"\n (keydown.enter)=\"_isTreeRowFirstCell(colIdx, row, $event) && _toggleGroupRow()\"\n (keydown.arrowLeft)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.arrowRight)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.space)=\"_handleCellSpaceKey(colIdx, tableCellElement, $event)\"\n>\n <div [class.fd-table__text]=\"column.applyText\" [class.fd-table__text--no-wrap]=\"column.noWrap\" #tableTextContainer>\n <span\n *ngIf=\"_isTreeRowFirstCell(colIdx, row)\"\n class=\"fd-table__expand\"\n [class.fd-table__expand--open]=\"row.expanded$ | async\"\n aria-hidden=\"true\"\n ></span>\n\n <ng-container *ngIf=\"row.state === 'readonly'; else editModeCell\">\n <span\n *ngIf=\"tableTextContainer?.innerText?.trim() === ''\"\n style=\"\n position: absolute !important;\n height: 1px;\n width: 1px;\n overflow: hidden;\n opacity: 0;\n clip: rect(1px 1px 1px 1px);\n clip: rect(1px, 1px, 1px, 1px);\n \"\n >{{ 'platformTable.emptyCell' | fdTranslate }}</span\n >\n <ng-container *ngIf=\"column?.columnCellTemplate; else defaultTableCellTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n column.columnCellTemplate!;\n context: { $implicit: row.value, popping: false, rowIndex: row.index }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n <ng-template #defaultTableCellTemplate>{{ row.value | valueByPath : column.key }}</ng-template>\n\n <ng-template #editModeCell>\n <ng-container *ngIf=\"column?.editableColumnCellTemplate; else defaultEditableTableCellTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n column.editableColumnCellTemplate!;\n context: { $implicit: row.value, popping: false, rowIndex: row.index }\n \"\n ></ng-container>\n </ng-container>\n\n <ng-template #defaultEditableTableCellTemplate>\n <fdp-table-editable-cell\n [row]=\"row\"\n [column]=\"column\"\n [columnValue]=\"row.value | valueByPath : column.key\"\n ></fdp-table-editable-cell>\n </ng-template>\n </ng-template>\n </div>\n</td>\n\n<ng-content></ng-content>\n\n<td\n *ngIf=\"_fdpTableService._isShownNavigationColumn$ | async\"\n fd-table-cell\n class=\"fdp-table__cell--navigation is-last-child\"\n fdkDisabled\n [addDisabledClass]=\"false\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n>\n <i\n *ngIf=\"row.navigatable\"\n fd-table-icon\n [navigation]=\"true\"\n [class]=\"_rtl ? 'sap-icon--slim-arrow-left' : 'sap-icon--slim-arrow-right'\"\n class=\"fdp-table__navigation-indicator\"\n ></i>\n</td>\n\n<td\n aria-hidden=\"true\"\n class=\"fd-table__cell fd-table__cell--mock\"\n [class.fd-table__cell--mock-borderless]=\"(_tableColumnResizeService.cellMockVisible$ | async) !== true\"\n fdkDisabled\n [addDisabledClass]=\"false\"\n></td>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "directive", type: i3.TableStatusIndicatorDirective, selector: "[fdTableStatusIndicator], [fd-table-status-indicator]", inputs: ["status"] }, { kind: "directive", type: i3.TableIconDirective, selector: "[fdTableIcon], [fd-table-icon]", inputs: ["class", "glyph", "navigation"] }, { kind: "component", type: i4.CheckboxComponent, selector: "fd-checkbox", inputs: ["ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "values", "standalone"], outputs: ["focusChange"] }, { kind: "directive", type: i5.DisabledBehaviorDirective, selector: "[fdkDisabled]", inputs: ["fdkDisabled", "addDisabledClass", "disabledClass"] }, { kind: "directive", type: i6.PlatformTableCellResizableDirective, selector: "[fdpTableCellResizable]", inputs: ["fdpTableCellResizable", "columnName"] }, { kind: "component", type: i7.TableEditableCellComponent, selector: "fdp-table-editable-cell", inputs: ["row", "column", "columnValue"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.ValueByPathPipe, name: "valueByPath" }, { kind: "pipe", type: i8.FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: i6.SelectionCellStylesPipe, name: "selectionCellStyles" }, { kind: "pipe", type: i6.TableCellStylesPipe, name: "tableCellStyles" }, { kind: "pipe", type: i6.ColumnResizableSidePipe, name: "columnResizableSide" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
204
+ ], viewQueries: [{ propertyName: "_focusableViewCellItems", predicate: FDK_FOCUSABLE_ITEM_DIRECTIVE, descendants: true }, { propertyName: "_editableCells", predicate: EditableTableCell, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ng-template #fallbackContent>\n <fd-busy-indicator *ngIf=\"useCellPlaceholder\" [loading]=\"true\" size=\"s\" [block]=\"true\"> </fd-busy-indicator>\n</ng-template>\n\n<ng-template\n *ngIf=\"onlyRenderVisibleCells; else tdPrimaryContent\"\n fdpOnlyRenderVisibleCell\n [tableViewport]=\"tdPrimaryContent\"\n [viewportFallback]=\"fallbackContent\"\n>\n <ng-template [ngTemplateOutlet]=\"tdPrimaryContent\"></ng-template>\n</ng-template>\n\n<ng-template #tdPrimaryContent>\n <td\n *ngIf=\"_fdpTableService._semanticHighlighting$ | async as semanticHighlighting\"\n fd-table-cell\n fd-table-status-indicator\n fdkDisabled\n [addDisabledClass]=\"false\"\n [status]=\"row.value[semanticHighlighting]\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n ></td>\n\n <!-- hidden text for screenreader -->\n <ng-template #selectionScreenReaderText>\n <span\n aria-hidden=\"true\"\n [attr.id]=\"_rowSelectionHelperTextId\"\n [ngStyle]=\"{\n position: 'absolute !important',\n height: '1px',\n width: '1px',\n overflow: 'hidden',\n clip: 'rect(1px, 1px, 1px, 1px)',\n color: 'transparent',\n display: 'block'\n }\"\n >\n {{ (row.checked ? 'platformTable.deselectSingleRow' : 'platformTable.selectSingleRow') | fdTranslate }}\n </span>\n </ng-template>\n\n <!-- Row Selection Cell -->\n <ng-container [ngSwitch]=\"selectionMode\">\n <ng-container *ngSwitchCase=\"SELECTION_MODE.SINGLE\">\n <td\n *ngIf=\"row.value[selectableKey] !== false; else selectionMock\"\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [attr.role]=\"_hasRowHeaderColumn ? 'rowheader' : 'gridcell'\"\n fd-table-cell\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n [style]=\"\n _contentDensityObserver\n | async\n | selectionCellStyles : _rtl : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n \"\n [attr.aria-selected]=\"row.checked\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n (click)=\"_toggleSingleSelectableRow()\"\n (keydown.enter)=\"_toggleSingleSelectableRow($event)\"\n (keydown.space)=\"_toggleSingleSelectableRow($event)\"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"SELECTION_MODE.MULTIPLE\">\n <td\n *ngIf=\"row.value[selectableKey] !== false; else selectionMock\"\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n role=\"cell\"\n fd-table-cell\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n (keydown.enter)=\"_toggleMultiSelectRow(row, $event)\"\n (keydown.space)=\"_toggleMultiSelectRow(row, $event)\"\n [attr.aria-selected]=\"row.checked\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n [style]=\"\n _contentDensityObserver\n | async\n | selectionCellStyles : _rtl : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n \"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n <fd-checkbox\n tabIndexValue=\"-1\"\n labelClass=\"fd-table__checkbox-label\"\n [tristate]=\"enableTristateMode\"\n [tristateSelectable]=\"false\"\n [ngModel]=\"row.checked$ | async\"\n (ngModelChange)=\"_toggleMultiSelectRow(row)\"\n ></fd-checkbox>\n </td>\n </ng-container>\n </ng-container>\n\n <ng-template #selectionMock>\n <td\n class=\"fd-table__cell--checkbox\"\n role=\"gridcell\"\n fd-table-cell\n fdkDisabled\n [addDisabledClass]=\"false\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n ></td>\n </ng-template>\n\n <td\n *ngFor=\"\n let column of _fdpTableService.visibleColumns$ | async;\n let colIdx = index;\n last as isLast;\n trackBy: _columnTrackBy\n \"\n #tableCellElement\n [fdpTableCellResizable]=\"\n colIdx\n | columnResizableSide\n : _fdpTableService.visibleColumnsLength\n : (_fdpTableService._isShownNavigationColumn$ | async) === true\n \"\n [columnName]=\"column.name\"\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n [attr.role]=\"column.role\"\n [headers]=\"rowId + '__' + column.name\"\n [ngClass]=\"[\n 'fdp-table__col--' + column.name,\n column._freezed ? 'fd-table__cell--fixed' : '',\n column.name === freezeColumnsTo ? 'fd-table__cell--fixed-last' : '',\n column._endFreezed ? 'fd-table__cell--fixed-end' : '',\n column.name === freezeEndColumnsTo ? 'fd-table__cell--fixed-end-last' : '',\n row.isTree && colIdx === 0 ? 'fd-table__cell--expand' : '',\n isLast && (_fdpTableService._isShownNavigationColumn$ | async) === false ? 'is-last-child' : ''\n ]\"\n [ngStyle]=\"\n column\n | tableCellStyles\n : _rtl\n : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n : selectionColumnWidth\n : column._freezed\n : column._endFreezed\n : _tableColumnResizeService.getPrevColumnsWidth(column.name)\n : _tableColumnResizeService.getColumnWidthStyle(column.name)\n : _tableColumnResizeService.getNextColumnsWidth(column.name)\n \"\n [attr.aria-expanded]=\"_isTreeRowFirstCell(colIdx, row) ? row.expanded : null\"\n [attr.data-nesting-level]=\"colIdx === 0 ? row.level + 1 : null\"\n (cellFocused)=\"_tableRowService.cellFocused($event); _tableRowService.cellActivate(colIdx, row)\"\n (click)=\"_tableRowService.cellClicked({ index: colIdx, row })\"\n (keydown.enter)=\"_isTreeRowFirstCell(colIdx, row, $event) && _toggleGroupRow()\"\n (keydown.arrowLeft)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.arrowRight)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.space)=\"_handleCellSpaceKey(colIdx, tableCellElement, $event)\"\n >\n <ng-template #primaryTextContainer>\n <div\n [class.fd-table__text]=\"column.applyText\"\n [class.fd-table__text--no-wrap]=\"column.noWrap\"\n #tableTextContainer\n >\n <span\n *ngIf=\"_isTreeRowFirstCell(colIdx, row)\"\n class=\"fd-table__expand\"\n [class.fd-table__expand--open]=\"row.expanded$ | async\"\n aria-hidden=\"true\"\n ></span>\n\n <ng-container *ngIf=\"row.state === 'readonly'; else editModeCell\">\n <span\n *ngIf=\"tableTextContainer?.textContent?.trim() === ''\"\n style=\"\n position: absolute !important;\n height: 1px;\n width: 1px;\n overflow: hidden;\n opacity: 0;\n clip: rect(1px 1px 1px 1px);\n clip: rect(1px, 1px, 1px, 1px);\n \"\n >{{ 'platformTable.emptyCell' | fdTranslate }}</span\n >\n <ng-container *ngIf=\"column?.columnCellTemplate; else defaultTableCellTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n column.columnCellTemplate!;\n context: { $implicit: row.value, popping: false, rowIndex: row.index }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n <ng-template #defaultTableCellTemplate>{{ row.value | valueByPath : column.key }}</ng-template>\n\n <ng-template #editModeCell>\n <ng-container *ngIf=\"column?.editableColumnCellTemplate; else defaultEditableTableCellTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n column.editableColumnCellTemplate!;\n context: { $implicit: row.value, popping: false, rowIndex: row.index }\n \"\n ></ng-container>\n </ng-container>\n\n <ng-template #defaultEditableTableCellTemplate>\n <fdp-table-editable-cell\n [row]=\"row\"\n [column]=\"column\"\n [columnValue]=\"row.value | valueByPath : column.key\"\n ></fdp-table-editable-cell>\n </ng-template>\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template\n *ngIf=\"onlyRenderVisibleCells; else primaryTextContainer\"\n fdpOnlyRenderVisibleCell\n [tableViewport]=\"primaryTextContainer\"\n [viewportFallback]=\"fallbackContent\"\n >\n <ng-template [ngTemplateOutlet]=\"primaryTextContainer\"></ng-template>\n </ng-template>\n </td>\n\n <ng-content></ng-content>\n\n <td\n *ngIf=\"_fdpTableService._isShownNavigationColumn$ | async\"\n fd-table-cell\n class=\"fdp-table__cell--navigation is-last-child\"\n fdkDisabled\n [addDisabledClass]=\"false\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n >\n <i\n *ngIf=\"row.navigatable\"\n fd-table-icon\n [navigation]=\"true\"\n [class]=\"_rtl ? 'sap-icon--slim-arrow-left' : 'sap-icon--slim-arrow-right'\"\n class=\"fdp-table__navigation-indicator\"\n ></i>\n </td>\n\n <td\n aria-hidden=\"true\"\n class=\"fd-table__cell fd-table__cell--mock\"\n [class.fd-table__cell--mock-borderless]=\"(_tableColumnResizeService.cellMockVisible$ | async) !== true\"\n fdkDisabled\n [addDisabledClass]=\"false\"\n ></td>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "directive", type: i3.TableStatusIndicatorDirective, selector: "[fdTableStatusIndicator], [fd-table-status-indicator]", inputs: ["status"] }, { kind: "directive", type: i3.TableIconDirective, selector: "[fdTableIcon], [fd-table-icon]", inputs: ["class", "glyph", "navigation"] }, { kind: "component", type: i4.CheckboxComponent, selector: "fd-checkbox", inputs: ["ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i5.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "directive", type: i6.DisabledBehaviorDirective, selector: "[fdkDisabled]", inputs: ["fdkDisabled", "addDisabledClass", "disabledClass"] }, { kind: "directive", type: i7.PlatformTableCellResizableDirective, selector: "[fdpTableCellResizable]", inputs: ["fdpTableCellResizable", "columnName"] }, { kind: "directive", type: i7.FdpRenderVisibleCellDirective, selector: "[fdpOnlyRenderVisibleCell]", inputs: ["tableViewport", "viewportFallback"] }, { kind: "component", type: i8.TableEditableCellComponent, selector: "fdp-table-editable-cell", inputs: ["row", "column", "columnValue"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.ValueByPathPipe, name: "valueByPath" }, { kind: "pipe", type: i9.FdTranslatePipe, name: "fdTranslate" }, { kind: "pipe", type: i7.SelectionCellStylesPipe, name: "selectionCellStyles" }, { kind: "pipe", type: i7.TableCellStylesPipe, name: "tableCellStyles" }, { kind: "pipe", type: i7.ColumnResizableSidePipe, name: "columnResizableSide" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
199
205
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TableRowComponent, decorators: [{
200
206
  type: Component,
201
207
  args: [{ selector: '[fdp-table-row]', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -207,7 +213,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
207
213
  ], host: {
208
214
  role: 'row',
209
215
  '[attr.aria-expanded]': '_isTreeRow(row) ? row.expanded : null'
210
- }, template: "<td\n *ngIf=\"_fdpTableService._semanticHighlighting$ | async as semanticHighlighting\"\n fd-table-cell\n fd-table-status-indicator\n fdkDisabled\n [addDisabledClass]=\"false\"\n [status]=\"row.value[semanticHighlighting]\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n></td>\n\n<!-- hidden text for screenreader -->\n<ng-template #selectionScreenReaderText>\n <span\n aria-hidden=\"true\"\n [attr.id]=\"_rowSelectionHelperTextId\"\n [ngStyle]=\"{\n position: 'absolute !important',\n height: '1px',\n width: '1px',\n overflow: 'hidden',\n clip: 'rect(1px, 1px, 1px, 1px)',\n color: 'transparent',\n display: 'block'\n }\"\n >\n {{ (row.checked ? 'platformTable.deselectSingleRow' : 'platformTable.selectSingleRow') | fdTranslate }}\n </span>\n</ng-template>\n\n<!-- Row Selection Cell -->\n<ng-container [ngSwitch]=\"selectionMode\">\n <ng-container *ngSwitchCase=\"SELECTION_MODE.SINGLE\">\n <td\n *ngIf=\"row.value[selectableKey] !== false; else selectionMock\"\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [attr.role]=\"_hasRowHeaderColumn ? 'rowheader' : 'gridcell'\"\n fd-table-cell\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n [style]=\"\n _contentDensityObserver\n | async\n | selectionCellStyles : _rtl : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n \"\n [attr.aria-selected]=\"row.checked\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n (click)=\"_toggleSingleSelectableRow()\"\n (keydown.enter)=\"_toggleSingleSelectableRow($event)\"\n (keydown.space)=\"_toggleSingleSelectableRow($event)\"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"SELECTION_MODE.MULTIPLE\">\n <td\n *ngIf=\"row.value[selectableKey] !== false; else selectionMock\"\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n role=\"cell\"\n fd-table-cell\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n (keydown.enter)=\"_toggleMultiSelectRow(row, $event)\"\n (keydown.space)=\"_toggleMultiSelectRow(row, $event)\"\n [attr.aria-selected]=\"row.checked\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n [style]=\"\n _contentDensityObserver\n | async\n | selectionCellStyles : _rtl : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n \"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n <fd-checkbox\n tabIndexValue=\"-1\"\n labelClass=\"fd-table__checkbox-label\"\n [tristate]=\"enableTristateMode\"\n [tristateSelectable]=\"false\"\n [ngModel]=\"row.checked$ | async\"\n (ngModelChange)=\"_toggleMultiSelectRow(row)\"\n ></fd-checkbox>\n </td>\n </ng-container>\n</ng-container>\n\n<ng-template #selectionMock>\n <td\n class=\"fd-table__cell--checkbox\"\n role=\"gridcell\"\n fd-table-cell\n fdkDisabled\n [addDisabledClass]=\"false\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n ></td>\n</ng-template>\n\n<td\n *ngFor=\"\n let column of _fdpTableService.visibleColumns$ | async;\n let colIdx = index;\n last as isLast;\n trackBy: _columnTrackBy\n \"\n #tableCellElement\n [fdpTableCellResizable]=\"\n colIdx\n | columnResizableSide\n : _fdpTableService.visibleColumnsLength\n : (_fdpTableService._isShownNavigationColumn$ | async) === true\n \"\n [columnName]=\"column.name\"\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n [attr.role]=\"column.role\"\n [headers]=\"rowId + '__' + column.name\"\n [ngClass]=\"[\n 'fdp-table__col--' + column.name,\n column._freezed ? 'fd-table__cell--fixed' : '',\n column.name === freezeColumnsTo ? 'fd-table__cell--fixed-last' : '',\n column._endFreezed ? 'fd-table__cell--fixed-end' : '',\n column.name === freezeEndColumnsTo ? 'fd-table__cell--fixed-end-last' : '',\n row.isTree && colIdx === 0 ? 'fd-table__cell--expand' : '',\n isLast && (_fdpTableService._isShownNavigationColumn$ | async) === false ? 'is-last-child' : ''\n ]\"\n [ngStyle]=\"\n column\n | tableCellStyles\n : _rtl\n : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n : selectionColumnWidth\n : column._freezed\n : column._endFreezed\n : _tableColumnResizeService.getPrevColumnsWidth(column.name)\n : _tableColumnResizeService.getColumnWidthStyle(column.name)\n : _tableColumnResizeService.getNextColumnsWidth(column.name)\n \"\n [attr.aria-expanded]=\"_isTreeRowFirstCell(colIdx, row) ? row.expanded : null\"\n [attr.data-nesting-level]=\"colIdx === 0 ? row.level + 1 : null\"\n (cellFocused)=\"_tableRowService.cellFocused($event)\"\n (click)=\"_tableRowService.cellClicked({ index: colIdx, row })\"\n (keydown.enter)=\"_isTreeRowFirstCell(colIdx, row, $event) && _toggleGroupRow()\"\n (keydown.arrowLeft)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.arrowRight)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.space)=\"_handleCellSpaceKey(colIdx, tableCellElement, $event)\"\n>\n <div [class.fd-table__text]=\"column.applyText\" [class.fd-table__text--no-wrap]=\"column.noWrap\" #tableTextContainer>\n <span\n *ngIf=\"_isTreeRowFirstCell(colIdx, row)\"\n class=\"fd-table__expand\"\n [class.fd-table__expand--open]=\"row.expanded$ | async\"\n aria-hidden=\"true\"\n ></span>\n\n <ng-container *ngIf=\"row.state === 'readonly'; else editModeCell\">\n <span\n *ngIf=\"tableTextContainer?.innerText?.trim() === ''\"\n style=\"\n position: absolute !important;\n height: 1px;\n width: 1px;\n overflow: hidden;\n opacity: 0;\n clip: rect(1px 1px 1px 1px);\n clip: rect(1px, 1px, 1px, 1px);\n \"\n >{{ 'platformTable.emptyCell' | fdTranslate }}</span\n >\n <ng-container *ngIf=\"column?.columnCellTemplate; else defaultTableCellTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n column.columnCellTemplate!;\n context: { $implicit: row.value, popping: false, rowIndex: row.index }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n <ng-template #defaultTableCellTemplate>{{ row.value | valueByPath : column.key }}</ng-template>\n\n <ng-template #editModeCell>\n <ng-container *ngIf=\"column?.editableColumnCellTemplate; else defaultEditableTableCellTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n column.editableColumnCellTemplate!;\n context: { $implicit: row.value, popping: false, rowIndex: row.index }\n \"\n ></ng-container>\n </ng-container>\n\n <ng-template #defaultEditableTableCellTemplate>\n <fdp-table-editable-cell\n [row]=\"row\"\n [column]=\"column\"\n [columnValue]=\"row.value | valueByPath : column.key\"\n ></fdp-table-editable-cell>\n </ng-template>\n </ng-template>\n </div>\n</td>\n\n<ng-content></ng-content>\n\n<td\n *ngIf=\"_fdpTableService._isShownNavigationColumn$ | async\"\n fd-table-cell\n class=\"fdp-table__cell--navigation is-last-child\"\n fdkDisabled\n [addDisabledClass]=\"false\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n>\n <i\n *ngIf=\"row.navigatable\"\n fd-table-icon\n [navigation]=\"true\"\n [class]=\"_rtl ? 'sap-icon--slim-arrow-left' : 'sap-icon--slim-arrow-right'\"\n class=\"fdp-table__navigation-indicator\"\n ></i>\n</td>\n\n<td\n aria-hidden=\"true\"\n class=\"fd-table__cell fd-table__cell--mock\"\n [class.fd-table__cell--mock-borderless]=\"(_tableColumnResizeService.cellMockVisible$ | async) !== true\"\n fdkDisabled\n [addDisabledClass]=\"false\"\n></td>\n" }]
216
+ }, template: "<ng-template #fallbackContent>\n <fd-busy-indicator *ngIf=\"useCellPlaceholder\" [loading]=\"true\" size=\"s\" [block]=\"true\"> </fd-busy-indicator>\n</ng-template>\n\n<ng-template\n *ngIf=\"onlyRenderVisibleCells; else tdPrimaryContent\"\n fdpOnlyRenderVisibleCell\n [tableViewport]=\"tdPrimaryContent\"\n [viewportFallback]=\"fallbackContent\"\n>\n <ng-template [ngTemplateOutlet]=\"tdPrimaryContent\"></ng-template>\n</ng-template>\n\n<ng-template #tdPrimaryContent>\n <td\n *ngIf=\"_fdpTableService._semanticHighlighting$ | async as semanticHighlighting\"\n fd-table-cell\n fd-table-status-indicator\n fdkDisabled\n [addDisabledClass]=\"false\"\n [status]=\"row.value[semanticHighlighting]\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n ></td>\n\n <!-- hidden text for screenreader -->\n <ng-template #selectionScreenReaderText>\n <span\n aria-hidden=\"true\"\n [attr.id]=\"_rowSelectionHelperTextId\"\n [ngStyle]=\"{\n position: 'absolute !important',\n height: '1px',\n width: '1px',\n overflow: 'hidden',\n clip: 'rect(1px, 1px, 1px, 1px)',\n color: 'transparent',\n display: 'block'\n }\"\n >\n {{ (row.checked ? 'platformTable.deselectSingleRow' : 'platformTable.selectSingleRow') | fdTranslate }}\n </span>\n </ng-template>\n\n <!-- Row Selection Cell -->\n <ng-container [ngSwitch]=\"selectionMode\">\n <ng-container *ngSwitchCase=\"SELECTION_MODE.SINGLE\">\n <td\n *ngIf=\"row.value[selectableKey] !== false; else selectionMock\"\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [attr.role]=\"_hasRowHeaderColumn ? 'rowheader' : 'gridcell'\"\n fd-table-cell\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n [style]=\"\n _contentDensityObserver\n | async\n | selectionCellStyles : _rtl : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n \"\n [attr.aria-selected]=\"row.checked\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n (click)=\"_toggleSingleSelectableRow()\"\n (keydown.enter)=\"_toggleSingleSelectableRow($event)\"\n (keydown.space)=\"_toggleSingleSelectableRow($event)\"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"SELECTION_MODE.MULTIPLE\">\n <td\n *ngIf=\"row.value[selectableKey] !== false; else selectionMock\"\n class=\"fd-table__cell--checkbox\"\n [class.fd-table__cell--fixed]=\"fixed\"\n role=\"cell\"\n fd-table-cell\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n (keydown.enter)=\"_toggleMultiSelectRow(row, $event)\"\n (keydown.space)=\"_toggleMultiSelectRow(row, $event)\"\n [attr.aria-selected]=\"row.checked\"\n [attr.aria-labelledby]=\"_rowSelectionHelperTextId\"\n [style]=\"\n _contentDensityObserver\n | async\n | selectionCellStyles : _rtl : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n \"\n >\n <ng-template [ngTemplateOutlet]=\"selectionScreenReaderText\"></ng-template>\n <fd-checkbox\n tabIndexValue=\"-1\"\n labelClass=\"fd-table__checkbox-label\"\n [tristate]=\"enableTristateMode\"\n [tristateSelectable]=\"false\"\n [ngModel]=\"row.checked$ | async\"\n (ngModelChange)=\"_toggleMultiSelectRow(row)\"\n ></fd-checkbox>\n </td>\n </ng-container>\n </ng-container>\n\n <ng-template #selectionMock>\n <td\n class=\"fd-table__cell--checkbox\"\n role=\"gridcell\"\n fd-table-cell\n fdkDisabled\n [addDisabledClass]=\"false\"\n [class.fd-table__cell--fixed]=\"fixed\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n ></td>\n </ng-template>\n\n <td\n *ngFor=\"\n let column of _fdpTableService.visibleColumns$ | async;\n let colIdx = index;\n last as isLast;\n trackBy: _columnTrackBy\n \"\n #tableCellElement\n [fdpTableCellResizable]=\"\n colIdx\n | columnResizableSide\n : _fdpTableService.visibleColumnsLength\n : (_fdpTableService._isShownNavigationColumn$ | async) === true\n \"\n [columnName]=\"column.name\"\n [focusable]=\"true\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n [attr.role]=\"column.role\"\n [headers]=\"rowId + '__' + column.name\"\n [ngClass]=\"[\n 'fdp-table__col--' + column.name,\n column._freezed ? 'fd-table__cell--fixed' : '',\n column.name === freezeColumnsTo ? 'fd-table__cell--fixed-last' : '',\n column._endFreezed ? 'fd-table__cell--fixed-end' : '',\n column.name === freezeEndColumnsTo ? 'fd-table__cell--fixed-end-last' : '',\n row.isTree && colIdx === 0 ? 'fd-table__cell--expand' : '',\n isLast && (_fdpTableService._isShownNavigationColumn$ | async) === false ? 'is-last-child' : ''\n ]\"\n [ngStyle]=\"\n column\n | tableCellStyles\n : _rtl\n : (_fdpTableService._semanticHighlightingColumnWidth$ | async)\n : selectionColumnWidth\n : column._freezed\n : column._endFreezed\n : _tableColumnResizeService.getPrevColumnsWidth(column.name)\n : _tableColumnResizeService.getColumnWidthStyle(column.name)\n : _tableColumnResizeService.getNextColumnsWidth(column.name)\n \"\n [attr.aria-expanded]=\"_isTreeRowFirstCell(colIdx, row) ? row.expanded : null\"\n [attr.data-nesting-level]=\"colIdx === 0 ? row.level + 1 : null\"\n (cellFocused)=\"_tableRowService.cellFocused($event); _tableRowService.cellActivate(colIdx, row)\"\n (click)=\"_tableRowService.cellClicked({ index: colIdx, row })\"\n (keydown.enter)=\"_isTreeRowFirstCell(colIdx, row, $event) && _toggleGroupRow()\"\n (keydown.arrowLeft)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.arrowRight)=\"_tableRowService.scrollToOverlappedCell()\"\n (keydown.space)=\"_handleCellSpaceKey(colIdx, tableCellElement, $event)\"\n >\n <ng-template #primaryTextContainer>\n <div\n [class.fd-table__text]=\"column.applyText\"\n [class.fd-table__text--no-wrap]=\"column.noWrap\"\n #tableTextContainer\n >\n <span\n *ngIf=\"_isTreeRowFirstCell(colIdx, row)\"\n class=\"fd-table__expand\"\n [class.fd-table__expand--open]=\"row.expanded$ | async\"\n aria-hidden=\"true\"\n ></span>\n\n <ng-container *ngIf=\"row.state === 'readonly'; else editModeCell\">\n <span\n *ngIf=\"tableTextContainer?.textContent?.trim() === ''\"\n style=\"\n position: absolute !important;\n height: 1px;\n width: 1px;\n overflow: hidden;\n opacity: 0;\n clip: rect(1px 1px 1px 1px);\n clip: rect(1px, 1px, 1px, 1px);\n \"\n >{{ 'platformTable.emptyCell' | fdTranslate }}</span\n >\n <ng-container *ngIf=\"column?.columnCellTemplate; else defaultTableCellTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n column.columnCellTemplate!;\n context: { $implicit: row.value, popping: false, rowIndex: row.index }\n \"\n ></ng-container>\n </ng-container>\n </ng-container>\n <ng-template #defaultTableCellTemplate>{{ row.value | valueByPath : column.key }}</ng-template>\n\n <ng-template #editModeCell>\n <ng-container *ngIf=\"column?.editableColumnCellTemplate; else defaultEditableTableCellTemplate\">\n <ng-container\n *ngTemplateOutlet=\"\n column.editableColumnCellTemplate!;\n context: { $implicit: row.value, popping: false, rowIndex: row.index }\n \"\n ></ng-container>\n </ng-container>\n\n <ng-template #defaultEditableTableCellTemplate>\n <fdp-table-editable-cell\n [row]=\"row\"\n [column]=\"column\"\n [columnValue]=\"row.value | valueByPath : column.key\"\n ></fdp-table-editable-cell>\n </ng-template>\n </ng-template>\n </div>\n </ng-template>\n\n <ng-template\n *ngIf=\"onlyRenderVisibleCells; else primaryTextContainer\"\n fdpOnlyRenderVisibleCell\n [tableViewport]=\"primaryTextContainer\"\n [viewportFallback]=\"fallbackContent\"\n >\n <ng-template [ngTemplateOutlet]=\"primaryTextContainer\"></ng-template>\n </ng-template>\n </td>\n\n <ng-content></ng-content>\n\n <td\n *ngIf=\"_fdpTableService._isShownNavigationColumn$ | async\"\n fd-table-cell\n class=\"fdp-table__cell--navigation is-last-child\"\n fdkDisabled\n [addDisabledClass]=\"false\"\n [cellFocusedEventAnnouncer]=\"_itemFocusedEventAnnouncer\"\n >\n <i\n *ngIf=\"row.navigatable\"\n fd-table-icon\n [navigation]=\"true\"\n [class]=\"_rtl ? 'sap-icon--slim-arrow-left' : 'sap-icon--slim-arrow-right'\"\n class=\"fdp-table__navigation-indicator\"\n ></i>\n </td>\n\n <td\n aria-hidden=\"true\"\n class=\"fd-table__cell fd-table__cell--mock\"\n [class.fd-table__cell--mock-borderless]=\"(_tableColumnResizeService.cellMockVisible$ | async) !== true\"\n fdkDisabled\n [addDisabledClass]=\"false\"\n ></td>\n</ng-template>\n" }]
211
217
  }], ctorParameters: function () { return []; }, propDecorators: { rowId: [{
212
218
  type: Input
213
219
  }], row: [{
@@ -233,6 +239,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
233
239
  type: Input
234
240
  }], isTreeRow: [{
235
241
  type: Input
242
+ }], onlyRenderVisibleCells: [{
243
+ type: Input
244
+ }], useCellPlaceholder: [{
245
+ type: Input
236
246
  }], keyboardDrag: [{
237
247
  type: Output
238
248
  }], _focusableViewCellItems: [{
@@ -245,4 +255,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
245
255
  type: HostBinding,
246
256
  args: ['attr.aria-selected']
247
257
  }] } });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi90YWJsZS9jb21wb25lbnRzL3RhYmxlLXJvdy90YWJsZS1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtcm93L3RhYmxlLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFJTixNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUc1QixPQUFPLEVBQ1AsVUFBVSxFQUNWLE1BQU0sRUFDVCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsYUFBYSxFQUdiLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFHdkIsZUFBZSxFQUNmLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsU0FBUyxFQUNaLE1BQU0seUNBQXlDLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFD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QkFEbkIsS0FBSztnQkFLTixlQUFlO3NCQURkLEtBQUs7Z0JBS04sa0JBQWtCO3NCQURqQixLQUFLO2dCQUtOLFNBQVM7c0JBRFIsS0FBSztnQkFPTixZQUFZO3NCQURYLE1BQU07Z0JBUUssdUJBQXVCO3NCQURsQyxZQUFZO3VCQUFDLDRCQUE0QjtnQkFPekIsY0FBYztzQkFEOUIsWUFBWTt1QkFBQyxpQkFBaUI7Z0JBS25CLGFBQWE7c0JBRHhCLFdBQVc7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZyAqL1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIERlc3Ryb3llZFNlcnZpY2UsXG4gICAgRkRLX0ZPQ1VTQUJMRV9JVEVNX0RJUkVDVElWRSxcbiAgICBGREtfRk9DVVNBQkxFX0xJU1RfRElSRUNUSVZFLFxuICAgIEZvY3VzYWJsZUl0ZW1EaXJlY3RpdmUsXG4gICAgRm9jdXNhYmxlSXRlbVBvc2l0aW9uLFxuICAgIEtleVV0aWwsXG4gICAgUnRsU2VydmljZSxcbiAgICB1dWlkdjRcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlPYnNlcnZlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgVGFibGVSb3dEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGFibGUnO1xuaW1wb3J0IHtcbiAgICBFZGl0YWJsZVRhYmxlQ2VsbCxcbiAgICBTZWxlY3Rpb25Nb2RlLFxuICAgIFNlbGVjdGlvbk1vZGVWYWx1ZSxcbiAgICBUYWJsZUNvbHVtbixcbiAgICBUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UsXG4gICAgVGFibGVEcmFnZ2FibGVEaXJlY3RpdmUsXG4gICAgVGFibGVSb3csXG4gICAgVGFibGVSb3dLZXlib2FyZERyYWcsXG4gICAgVGFibGVSb3dTZXJ2aWNlLFxuICAgIFRhYmxlU2VydmljZSxcbiAgICBpc1RyZWVSb3dGaXJzdENlbGwsXG4gICAgaXNUcmVlUm93XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vdGFibGUtaGVscGVycyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdbZmRwLXRhYmxlLXJvd10nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZES19GT0NVU0FCTEVfTElTVF9ESVJFQ1RJVkUsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogVGFibGVSb3dDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAgRGVzdHJveWVkU2VydmljZVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICByb2xlOiAncm93JyxcbiAgICAgICAgJ1thdHRyLmFyaWEtZXhwYW5kZWRdJzogJ19pc1RyZWVSb3cocm93KSA/IHJvdy5leHBhbmRlZCA6IG51bGwnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZVJvd0NvbXBvbmVudDxUPiBleHRlbmRzIFRhYmxlUm93RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gICAgLyoqIFJvdyBJRC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvd0lkOiBzdHJpbmc7XG5cbiAgICAvKiogVGFibGUgUm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcm93OiBUYWJsZVJvdzxUPjtcblxuICAgIC8qKiBSb3cgaW5kZXguICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcm93aW5kZXgnKVxuICAgIEBJbnB1dCgpXG4gICAgaW5kZXg6IG51bWJlcjtcblxuICAgIC8qKiBTZWxlY3Rpb24gbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbk1vZGU6IFNlbGVjdGlvbk1vZGVWYWx1ZTtcblxuICAgIC8qKiBTZWxlY3RhYmxlIGZsYWcga2V5LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2VsZWN0YWJsZUtleTogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZW5hYmxlIGNoZWNrYm94IHRyaXN0YXRlIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBlbmFibGVUcmlzdGF0ZU1vZGU6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGZpeCB0aGUgdGFibGUgaGVhZGVyIGFuZCBmb290ZXIuIERlZmF1bHQgaXMgdHJ1ZS5cbiAgICAgKiBOb3RlIHRoYXQgaWYgdGhlIHRhYmxlIGNvbnRhaW5zIGZyZWV6YWJsZSBjb2x1bW5zLCB0aGUgaGVhZGVyIGFuZFxuICAgICAqIGZvb3RlciB3aWxsIGJlIGZpeGVkIGF1dG9tYXRpY2FsbHksIHJlZ2FyZGxlc3Mgb2YgdGhpcyBpbnB1dCB2YWx1ZS5cbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZml4ZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogU2VsZWN0aW9uIGNvbHVtbiB3aWR0aC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbkNvbHVtbldpZHRoOiBudW1iZXI7XG5cbiAgICAvKiogVGhlIGNvbHVtbiBgbmFtZWAgdG8gZnJlZXplIGNvbHVtbnMgdXAgdG8gYW5kIGluY2x1ZGluZy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGZyZWV6ZUNvbHVtbnNUbzogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBjb2x1bW4gYG5hbWVgIHRvIGZyZWV6ZSBjb2x1bW5zIGFmdGVyIGFuZCBpbmNsdWRpbmcuICovXG4gICAgQElucHV0KClcbiAgICBmcmVlemVFbmRDb2x1bW5zVG86IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSByb3cgaXMgdHJlZSByb3cuICovXG4gICAgQElucHV0KClcbiAgICBpc1RyZWVSb3c6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4ga2V5Ym9hcmQgZHJhZyBwZXJmb3JtZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAga2V5Ym9hcmREcmFnID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd0tleWJvYXJkRHJhZz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhc1Jvd0hlYWRlckNvbHVtbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKEZES19GT0NVU0FCTEVfSVRFTV9ESVJFQ1RJVkUpXG4gICAgcHJpdmF0ZSBzZXQgX2ZvY3VzYWJsZVZpZXdDZWxsSXRlbXMoaXRlbXM6IFF1ZXJ5TGlzdDxGb2N1c2FibGVJdGVtRGlyZWN0aXZlPikge1xuICAgICAgICB0aGlzLnNldEl0ZW1zKGl0ZW1zKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oRWRpdGFibGVUYWJsZUNlbGwpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZWRpdGFibGVDZWxsczogUXVlcnlMaXN0PEVkaXRhYmxlVGFibGVDZWxsPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2VsZWN0ZWQnKVxuICAgIHByaXZhdGUgZ2V0IF9hcmlhU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMucm93LmNoZWNrZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcnRsID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9yb3dTZWxlY3Rpb25IZWxwZXJUZXh0SWQgPSBgcm93U2VsZWN0aW9uSGVscGVyLSR7dXVpZHY0KCl9YDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2lzVHJlZVJvd0ZpcnN0Q2VsbCA9IGlzVHJlZVJvd0ZpcnN0Q2VsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgU0VMRUNUSU9OX01PREUgPSBTZWxlY3Rpb25Nb2RlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlciA9IGluamVjdChDb250ZW50RGVuc2l0eU9ic2VydmVyKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZSA9IGluamVjdChUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZWZyZXNoQ2hpbGRSb3dzJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2UgPSBpbmplY3QoUnRsU2VydmljZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZmRwVGFibGVTZXJ2aWNlID0gaW5qZWN0KFRhYmxlU2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90YWJsZVJvd1NlcnZpY2UgPSBpbmplY3QoVGFibGVSb3dTZXJ2aWNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2lzVHJlZVJvdyA9IGlzVHJlZVJvdztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbG1SZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RuZFRhYmxlRGlyZWN0aXZlID0gaW5qZWN0KFRhYmxlRHJhZ2dhYmxlRGlyZWN0aXZlLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJ0bCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcnRsID0gcnRsO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UucmVzaXplSW5Qcm9ncmVzcyRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UubWFya0ZvckNoZWNrKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pih0aGlzLl9lbG1SZWYubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZSksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25LZXlEb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5fZmRwVGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoY29sdW1ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5faGFzUm93SGVhZGVyQ29sdW1uID0gY29sdW1ucy5zb21lKChjKSA9PiBjLnJvbGUgPT09ICdyb3doZWFkZXInKTtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICB0aGlzLl9lZGl0YWJsZUNlbGxzLmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuX2VkaXRhYmxlQ2VsbHMudG9BcnJheSgpO1xuICAgICAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudXBkYXRlRWRpdGFibGVDZWxscyh0aGlzLnJvdywgY2VsbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UucmVtb3ZlRWRpdGFibGVDZWxscyh0aGlzLnJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgaWYgKCdyb3cnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlblRvUm93RXhwYW5zaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLl9yZWZyZXNoQ2hpbGRSb3dzJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hDaGlsZFJvd3MkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5yZW1vdmVFZGl0YWJsZUNlbGxzKHRoaXMucm93KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfaGFuZGxlQ2VsbFNwYWNlS2V5KGNvbElkeDogbnVtYmVyLCB0YWJsZUNlbGxFbGVtZW50OiBIVE1MVGFibGVDZWxsRWxlbWVudCwgJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoJGV2ZW50LnRhcmdldCA9PT0gdGFibGVDZWxsRWxlbWVudCAmJiBpc1RyZWVSb3dGaXJzdENlbGwoY29sSWR4LCB0aGlzLnJvdywgJGV2ZW50KSkge1xuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVHcm91cFJvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1Jvd0V4cGFuc2lvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVmcmVzaENoaWxkUm93cyQubmV4dCgpO1xuICAgICAgICBjb25zdCByZWZyZXNoID0gbWVyZ2UodGhpcy5fcmVmcmVzaENoaWxkUm93cyQsIHRoaXMuX2Rlc3Ryb3kkKTtcbiAgICAgICAgLy8gTG9hZCBpdGVtcyBvbmx5IG9uY2UuIEZ1cnRoZXIgbG9hZGluZyB3aWxsIGJlIGNvdmVyZWQgYnkgdGhlIGxhenkgbG9hZGluZyBmdW5jdGlvbmFsaXR5LlxuICAgICAgICB0aGlzLnJvdz8uZXhwYW5kZWQkXG4gICAgICAgICAgICA/LnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChleHBhbmRlZCkgPT4gZXhwYW5kZWQgJiYgdGhpcy5yb3cuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwocmVmcmVzaClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKHRoaXMucm93KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzQXJyb3dEb3duID0gS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpO1xuICAgICAgICBjb25zdCBpc0Fycm93VXAgPSBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpO1xuXG4gICAgICAgIGlmICghZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyb3dEb3duICYmICFpc0Fycm93VXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnUm93RnJvbUtleWJvYXJkKFxuICAgICAgICAgICAgaXNBcnJvd0Rvd24gPyAnZG93bicgOiAndXAnLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICB0aGlzLmluZGV4LFxuICAgICAgICAgICAgZXZlbnQuc2hpZnRLZXkgPyAnZ3JvdXAnIDogJ3NoaWZ0J1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RvZ2dsZUdyb3VwUm93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlUm93KHsgdHlwZTogJ3RvZ2dsZVJvdycsIHJvdzogdGhpcy5yb3cgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyhldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlUm93KHsgdHlwZTogJ3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3cnLCByb3c6IHRoaXMucm93IH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RvZ2dsZU11bHRpU2VsZWN0Um93KHJvdzogVGFibGVSb3c8VD4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS50b2dnbGVSb3coeyAuLi57IHJvdywgZXZlbnQgfSwgLi4ueyB0eXBlOiAndG9nZ2xlTXVsdGlTZWxlY3RSb3cnIH0gfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29sdW1uVHJhY2tCeShpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1Gb2N1c2VkRXZlbnRBbm5vdW5jZXIgPSAocG9zaXRpb246IEZvY3VzYWJsZUl0ZW1Qb3NpdGlvbik6IHN0cmluZyA9PiB7XG4gICAgICAgIGxldCByZXRWYWwgPSBgQ29sdW1uICR7cG9zaXRpb24uY29sSW5kZXggKyAxfSBvZiAke3Bvc2l0aW9uLnRvdGFsQ29sc30sIGA7XG4gICAgICAgIGxldCBjb2x1bW47XG4gICAgICAgIGlmICh0aGlzLl9mZHBUYWJsZVNlcnZpY2U/LnZpc2libGVDb2x1bW5zJCkge1xuICAgICAgICAgICAgbGV0IGNvbEluZGV4ID0gcG9zaXRpb24uY29sSW5kZXg7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJyB8fCB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgICAgICBjb2xJbmRleC0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uID0gdGhpcy5fZmRwVGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zJC5nZXRWYWx1ZSgpW2NvbEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uICYmIChjb2x1bW4uX2ZyZWV6ZWQgfHwgY29sdW1uLl9lbmRGcmVlemVkKSkge1xuICAgICAgICAgICAgcmV0VmFsID0gcmV0VmFsICsgJ2ZpeGVkLCAnO1xuICAgICAgICB9XG4gICAgICAgIHJldFZhbCA9IHJldFZhbCArIGByb3c6ICR7cG9zaXRpb24ucm93SW5kZXggKyAxfSBvZiAke3Bvc2l0aW9uLnRvdGFsUm93c31gO1xuICAgICAgICBpZiAodGhpcy5pc1RyZWVSb3cgfHwgdGhpcy5yb3cubGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICByZXRWYWwgPSByZXRWYWwgKyAnLCBsZXZlbCAnICsgKHRoaXMucm93LmxldmVsICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFZhbDtcbiAgICB9O1xufVxuIiwiPHRkXG4gICAgKm5nSWY9XCJfZmRwVGFibGVTZXJ2aWNlLl9zZW1hbnRpY0hpZ2hsaWdodGluZyQgfCBhc3luYyBhcyBzZW1hbnRpY0hpZ2hsaWdodGluZ1wiXG4gICAgZmQtdGFibGUtY2VsbFxuICAgIGZkLXRhYmxlLXN0YXR1cy1pbmRpY2F0b3JcbiAgICBmZGtEaXNhYmxlZFxuICAgIFthZGREaXNhYmxlZENsYXNzXT1cImZhbHNlXCJcbiAgICBbc3RhdHVzXT1cInJvdy52YWx1ZVtzZW1hbnRpY0hpZ2hsaWdodGluZ11cIlxuICAgIFtjZWxsRm9jdXNlZEV2ZW50QW5ub3VuY2VyXT1cIl9pdGVtRm9jdXNlZEV2ZW50QW5ub3VuY2VyXCJcbj48L3RkPlxuXG48IS0tIGhpZGRlbiB0ZXh0IGZvciBzY3JlZW5yZWFkZXIgLS0+XG48bmctdGVtcGxhdGUgI3NlbGVjdGlvblNjcmVlblJlYWRlclRleHQ+XG4gICAgPHNwYW5cbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiX3Jvd1NlbGVjdGlvbkhlbHBlclRleHRJZFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUgIWltcG9ydGFudCcsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxcHgnLFxuICAgICAgICAgICAgd2lkdGg6ICcxcHgnLFxuICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgY2xpcDogJ3JlY3QoMXB4LCAxcHgsIDFweCwgMXB4KScsXG4gICAgICAgICAgICBjb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgICAgfVwiXG4gICAgPlxuICAgICAgICB7eyAocm93LmNoZWNrZWQgPyAncGxhdGZvcm1UYWJsZS5kZXNlbGVjdFNpbmdsZVJvdycgOiAncGxhdGZvcm1UYWJsZS5zZWxlY3RTaW5nbGVSb3cnKSB8IGZkVHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBSb3cgU2VsZWN0aW9uIENlbGwgLS0+XG48bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzZWxlY3Rpb25Nb2RlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiU0VMRUNUSU9OX01PREUuU0lOR0xFXCI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICAgKm5nSWY9XCJyb3cudmFsdWVbc2VsZWN0YWJsZUtleV0gIT09IGZhbHNlOyBlbHNlIHNlbGVjdGlvbk1vY2tcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9fY2VsbC0tY2hlY2tib3hcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLXRhYmxlX19jZWxsLS1maXhlZF09XCJmaXhlZFwiXG4gICAgICAgICAgICBbYXR0ci5yb2xlXT1cIl9oYXNSb3dIZWFkZXJDb2x1bW4gPyAncm93aGVhZGVyJyA6ICdncmlkY2VsbCdcIlxuICAgICAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICAgICAgW2ZvY3VzYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtjZWxsRm9jdXNlZEV2ZW50QW5ub3VuY2VyXT1cIl9pdGVtRm9jdXNlZEV2ZW50QW5ub3VuY2VyXCJcbiAgICAgICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICAgICAgICBfY29udGVudERlbnNpdHlPYnNlcnZlclxuICAgICAgICAgICAgICAgICAgICB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgIHwgc2VsZWN0aW9uQ2VsbFN0eWxlcyA6IF9ydGwgOiAoX2ZkcFRhYmxlU2VydmljZS5fc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCQgfCBhc3luYylcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInJvdy5jaGVja2VkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJfcm93U2VsZWN0aW9uSGVscGVyVGV4dElkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJfdG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdygpXCJcbiAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiX3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3coJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3Rpb25TY3JlZW5SZWFkZXJUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNFTEVDVElPTl9NT0RFLk1VTFRJUExFXCI+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICAgKm5nSWY9XCJyb3cudmFsdWVbc2VsZWN0YWJsZUtleV0gIT09IGZhbHNlOyBlbHNlIHNlbGVjdGlvbk1vY2tcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9fY2VsbC0tY2hlY2tib3hcIlxuICAgICAgICAgICAgW2NsYXNzLmZkLXRhYmxlX19jZWxsLS1maXhlZF09XCJmaXhlZFwiXG4gICAgICAgICAgICByb2xlPVwiY2VsbFwiXG4gICAgICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgICAgICBbZm9jdXNhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgW2NlbGxGb2N1c2VkRXZlbnRBbm5vdW5jZXJdPVwiX2l0ZW1Gb2N1c2VkRXZlbnRBbm5vdW5jZXJcIlxuICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiX3RvZ2dsZU11bHRpU2VsZWN0Um93KHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJfdG9nZ2xlTXVsdGlTZWxlY3RSb3cocm93LCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwicm93LmNoZWNrZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9yb3dTZWxlY3Rpb25IZWxwZXJUZXh0SWRcIlxuICAgICAgICAgICAgW3N0eWxlXT1cIlxuICAgICAgICAgICAgICAgIF9jb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgICAgICAgICAgICAgICAgIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgfCBzZWxlY3Rpb25DZWxsU3R5bGVzIDogX3J0bCA6IChfZmRwVGFibGVTZXJ2aWNlLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoJCB8IGFzeW5jKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNlbGVjdGlvblNjcmVlblJlYWRlclRleHRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGZkLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgdGFiSW5kZXhWYWx1ZT1cIi0xXCJcbiAgICAgICAgICAgICAgICBsYWJlbENsYXNzPVwiZmQtdGFibGVfX2NoZWNrYm94LWxhYmVsXCJcbiAgICAgICAgICAgICAgICBbdHJpc3RhdGVdPVwiZW5hYmxlVHJpc3RhdGVNb2RlXCJcbiAgICAgICAgICAgICAgICBbdHJpc3RhdGVTZWxlY3RhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJyb3cuY2hlY2tlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiX3RvZ2dsZU11bHRpU2VsZWN0Um93KHJvdylcIlxuICAgICAgICAgICAgPjwvZmQtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNzZWxlY3Rpb25Nb2NrPlxuICAgIDx0ZFxuICAgICAgICBjbGFzcz1cImZkLXRhYmxlX19jZWxsLS1jaGVja2JveFwiXG4gICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgIGZkLXRhYmxlLWNlbGxcbiAgICAgICAgZmRrRGlzYWJsZWRcbiAgICAgICAgW2FkZERpc2FibGVkQ2xhc3NdPVwiZmFsc2VcIlxuICAgICAgICBbY2xhc3MuZmQtdGFibGVfX2NlbGwtLWZpeGVkXT1cImZpeGVkXCJcbiAgICAgICAgW2NlbGxGb2N1c2VkRXZlbnRBbm5vdW5jZXJdPVwiX2l0ZW1Gb2N1c2VkRXZlbnRBbm5vdW5jZXJcIlxuICAgID48L3RkPlxuPC9uZy10ZW1wbGF0ZT5cblxuPHRkXG4gICAgKm5nRm9yPVwiXG4gICAgICAgIGxldCBjb2x1bW4gb2YgX2ZkcFRhYmxlU2VydmljZS52aXNpYmxlQ29sdW1ucyQgfCBhc3luYztcbiAgICAgICAgbGV0IGNvbElkeCA9IGluZGV4O1xuICAgICAgICBsYXN0IGFzIGlzTGFzdDtcbiAgICAgICAgdHJhY2tCeTogX2NvbHVtblRyYWNrQnlcbiAgICBcIlxuICAgICN0YWJsZUNlbGxFbGVtZW50XG4gICAgW2ZkcFRhYmxlQ2VsbFJlc2l6YWJsZV09XCJcbiAgICAgICAgY29sSWR4XG4gICAgICAgICAgICB8IGNvbHVtblJlc2l6YWJsZVNpZGVcbiAgICAgICAgICAgICAgICA6IF9mZHBUYWJsZVNlcnZpY2UudmlzaWJsZUNvbHVtbnNMZW5ndGhcbiAgICAgICAgICAgICAgICA6IChfZmRwVGFibGVTZXJ2aWNlLl9pc1Nob3duTmF2aWdhdGlvbkNvbHVtbiQgfCBhc3luYykgPT09IHRydWVcbiAgICBcIlxuICAgIFtjb2x1bW5OYW1lXT1cImNvbHVtbi5uYW1lXCJcbiAgICBbZm9jdXNhYmxlXT1cInRydWVcIlxuICAgIFtjZWxsRm9jdXNlZEV2ZW50QW5ub3VuY2VyXT1cIl9pdGVtRm9jdXNlZEV2ZW50QW5ub3VuY2VyXCJcbiAgICBbYXR0ci5yb2xlXT1cImNvbHVtbi5yb2xlXCJcbiAgICBbaGVhZGVyc109XCJyb3dJZCArICdfXycgKyBjb2x1bW4ubmFtZVwiXG4gICAgW25nQ2xhc3NdPVwiW1xuICAgICAgICAnZmRwLXRhYmxlX19jb2wtLScgKyBjb2x1bW4ubmFtZSxcbiAgICAgICAgY29sdW1uLl9mcmVlemVkID8gJ2ZkLXRhYmxlX19jZWxsLS1maXhlZCcgOiAnJyxcbiAgICAgICAgY29sdW1uLm5hbWUgPT09IGZyZWV6ZUNvbHVtbnNUbyA/ICdmZC10YWJsZV9fY2VsbC0tZml4ZWQtbGFzdCcgOiAnJyxcbiAgICAgICAgY29sdW1uLl9lbmRGcmVlemVkID8gJ2ZkLXRhYmxlX19jZWxsLS1maXhlZC1lbmQnIDogJycsXG4gICAgICAgIGNvbHVtbi5uYW1lID09PSBmcmVlemVFbmRDb2x1bW5zVG8gPyAnZmQtdGFibGVfX2NlbGwtLWZpeGVkLWVuZC1sYXN0JyA6ICcnLFxuICAgICAgICByb3cuaXNUcmVlICYmIGNvbElkeCA9PT0gMCA/ICdmZC10YWJsZV9fY2VsbC0tZXhwYW5kJyA6ICcnLFxuICAgICAgICBpc0xhc3QgJiYgKF9mZHBUYWJsZVNlcnZpY2UuX2lzU2hvd25OYXZpZ2F0aW9uQ29sdW1uJCB8IGFzeW5jKSA9PT0gZmFsc2UgPyAnaXMtbGFzdC1jaGlsZCcgOiAnJ1xuICAgIF1cIlxuICAgIFtuZ1N0eWxlXT1cIlxuICAgICAgICBjb2x1bW5cbiAgICAgICAgICAgIHwgdGFibGVDZWxsU3R5bGVzXG4gICAgICAgICAgICAgICAgOiBfcnRsXG4gICAgICAgICAgICAgICAgOiAoX2ZkcFRhYmxlU2VydmljZS5fc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCQgfCBhc3luYylcbiAgICAgICAgICAgICAgICA6IHNlbGVjdGlvbkNvbHVtbldpZHRoXG4gICAgICAgICAgICAgICAgOiBjb2x1bW4uX2ZyZWV6ZWRcbiAgICAgICAgICAgICAgICA6IGNvbHVtbi5fZW5kRnJlZXplZFxuICAgICAgICAgICAgICAgIDogX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5nZXRQcmV2Q29sdW1uc1dpZHRoKGNvbHVtbi5uYW1lKVxuICAgICAgICAgICAgICAgIDogX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5nZXRDb2x1bW5XaWR0aFN0eWxlKGNvbHVtbi5uYW1lKVxuICAgICAgICAgICAgICAgIDogX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5nZXROZXh0Q29sdW1uc1dpZHRoKGNvbHVtbi5uYW1lKVxuICAgIFwiXG4gICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJfaXNUcmVlUm93Rmlyc3RDZWxsKGNvbElkeCwgcm93KSA/IHJvdy5leHBhbmRlZCA6IG51bGxcIlxuICAgIFthdHRyLmRhdGEtbmVzdGluZy1sZXZlbF09XCJjb2xJZHggPT09IDAgPyByb3cubGV2ZWwgKyAxIDogbnVsbFwiXG4gICAgKGNlbGxGb2N1c2VkKT1cIl90YWJsZVJvd1NlcnZpY2UuY2VsbEZvY3VzZWQoJGV2ZW50KVwiXG4gICAgKGNsaWNrKT1cIl90YWJsZVJvd1NlcnZpY2UuY2VsbENsaWNrZWQoeyBpbmRleDogY29sSWR4LCByb3cgfSlcIlxuICAgIChrZXlkb3duLmVudGVyKT1cIl9pc1RyZWVSb3dGaXJzdENlbGwoY29sSWR4LCByb3csICRldmVudCkgJiYgX3RvZ2dsZUdyb3VwUm93KClcIlxuICAgIChrZXlkb3duLmFycm93TGVmdCk9XCJfdGFibGVSb3dTZXJ2aWNlLnNjcm9sbFRvT3ZlcmxhcHBlZENlbGwoKVwiXG4gICAgKGtleWRvd24uYXJyb3dSaWdodCk9XCJfdGFibGVSb3dTZXJ2aWNlLnNjcm9sbFRvT3ZlcmxhcHBlZENlbGwoKVwiXG4gICAgKGtleWRvd24uc3BhY2UpPVwiX2hhbmRsZUNlbGxTcGFjZUtleShjb2xJZHgsIHRhYmxlQ2VsbEVsZW1lbnQsICRldmVudClcIlxuPlxuICAgIDxkaXYgW2NsYXNzLmZkLXRhYmxlX190ZXh0XT1cImNvbHVtbi5hcHBseVRleHRcIiBbY2xhc3MuZmQtdGFibGVfX3RleHQtLW5vLXdyYXBdPVwiY29sdW1uLm5vV3JhcFwiICN0YWJsZVRleHRDb250YWluZXI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIl9pc1RyZWVSb3dGaXJzdENlbGwoY29sSWR4LCByb3cpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtdGFibGVfX2V4cGFuZFwiXG4gICAgICAgICAgICBbY2xhc3MuZmQtdGFibGVfX2V4cGFuZC0tb3Blbl09XCJyb3cuZXhwYW5kZWQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93LnN0YXRlID09PSAncmVhZG9ubHknOyBlbHNlIGVkaXRNb2RlQ2VsbFwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlVGV4dENvbnRhaW5lcj8uaW5uZXJUZXh0Py50cmltKCkgPT09ICcnXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxcHg7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxcHg7XG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgICAgICAgICAgICAgIGNsaXA6IHJlY3QoMXB4IDFweCAxcHggMXB4KTtcbiAgICAgICAgICAgICAgICAgICAgY2xpcDogcmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpO1xuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPnt7ICdwbGF0Zm9ybVRhYmxlLmVtcHR5Q2VsbCcgfCBmZFRyYW5zbGF0ZSB9fTwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbj8uY29sdW1uQ2VsbFRlbXBsYXRlOyBlbHNlIGRlZmF1bHRUYWJsZUNlbGxUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5jb2x1bW5DZWxsVGVtcGxhdGUhO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdy52YWx1ZSwgcG9wcGluZzogZmFsc2UsIHJvd0luZGV4OiByb3cuaW5kZXggfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGFibGVDZWxsVGVtcGxhdGU+e3sgcm93LnZhbHVlIHwgdmFsdWVCeVBhdGggOiBjb2x1bW4ua2V5IH19PC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2VkaXRNb2RlQ2VsbD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4/LmVkaXRhYmxlQ29sdW1uQ2VsbFRlbXBsYXRlOyBlbHNlIGRlZmF1bHRFZGl0YWJsZVRhYmxlQ2VsbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmVkaXRhYmxlQ29sdW1uQ2VsbFRlbXBsYXRlITtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cudmFsdWUsIHBvcHBpbmc6IGZhbHNlLCByb3dJbmRleDogcm93LmluZGV4IH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0RWRpdGFibGVUYWJsZUNlbGxUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZmRwLXRhYmxlLWVkaXRhYmxlLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5WYWx1ZV09XCJyb3cudmFsdWUgfCB2YWx1ZUJ5UGF0aCA6IGNvbHVtbi5rZXlcIlxuICAgICAgICAgICAgICAgID48L2ZkcC10YWJsZS1lZGl0YWJsZS1jZWxsPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvdGQ+XG5cbjxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuPHRkXG4gICAgKm5nSWY9XCJfZmRwVGFibGVTZXJ2aWNlLl9pc1Nob3duTmF2aWdhdGlvbkNvbHVtbiQgfCBhc3luY1wiXG4gICAgZmQtdGFibGUtY2VsbFxuICAgIGNsYXNzPVwiZmRwLXRhYmxlX19jZWxsLS1uYXZpZ2F0aW9uIGlzLWxhc3QtY2hpbGRcIlxuICAgIGZka0Rpc2FibGVkXG4gICAgW2FkZERpc2FibGVkQ2xhc3NdPVwiZmFsc2VcIlxuICAgIFtjZWxsRm9jdXNlZEV2ZW50QW5ub3VuY2VyXT1cIl9pdGVtRm9jdXNlZEV2ZW50QW5ub3VuY2VyXCJcbj5cbiAgICA8aVxuICAgICAgICAqbmdJZj1cInJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgIGZkLXRhYmxlLWljb25cbiAgICAgICAgW25hdmlnYXRpb25dPVwidHJ1ZVwiXG4gICAgICAgIFtjbGFzc109XCJfcnRsID8gJ3NhcC1pY29uLS1zbGltLWFycm93LWxlZnQnIDogJ3NhcC1pY29uLS1zbGltLWFycm93LXJpZ2h0J1wiXG4gICAgICAgIGNsYXNzPVwiZmRwLXRhYmxlX19uYXZpZ2F0aW9uLWluZGljYXRvclwiXG4gICAgPjwvaT5cbjwvdGQ+XG5cbjx0ZFxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgY2xhc3M9XCJmZC10YWJsZV9fY2VsbCBmZC10YWJsZV9fY2VsbC0tbW9ja1wiXG4gICAgW2NsYXNzLmZkLXRhYmxlX19jZWxsLS1tb2NrLWJvcmRlcmxlc3NdPVwiKF90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UuY2VsbE1vY2tWaXNpYmxlJCB8IGFzeW5jKSAhPT0gdHJ1ZVwiXG4gICAgZmRrRGlzYWJsZWRcbiAgICBbYWRkRGlzYWJsZWRDbGFzc109XCJmYWxzZVwiXG4+PC90ZD5cbiJdfQ==
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi90YWJsZS9jb21wb25lbnRzL3RhYmxlLXJvdy90YWJsZS1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtcm93L3RhYmxlLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RCxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUNMLE1BQU0sRUFJTixNQUFNLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixpQkFBaUIsRUFDakIsTUFBTSxFQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUc1QixPQUFPLEVBQ1AsVUFBVSxFQUNWLE1BQU0sRUFDVCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsYUFBYSxFQUdiLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFHdkIsZUFBZSxFQUNmLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsU0FBUyxFQUNaLE1BQU0seUNBQXlDLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFvQnpFLE1BQU0sT0FBTyxpQkFBcUIsU0FBUSxpQkFBaUI7SUFzRXZELGNBQWM7SUFDZCxJQUNZLHVCQUF1QixDQUFDLEtBQXdDO1FBQ3hFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQU1ELGNBQWM7SUFDZCxJQUNZLGFBQWE7UUFDckIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7SUFDOUIsQ0FBQztJQW1ERCxjQUFjO0lBQ2Q7UUFDSSxLQUFLLEVBQUUsQ0FBQztRQW5GWjs7O1dBR0c7UUFFSCx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFM0I7O1dBRUc7UUFFSCxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBRXhELGNBQWM7UUFDZCx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFrQjVCLGNBQWM7UUFDZCxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsY0FBYztRQUNkLDhCQUF5QixHQUFHLHNCQUFzQixNQUFNLEVBQUUsRUFBRSxDQUFDO1FBRTdELGNBQWM7UUFDTCx3QkFBbUIsR0FBRyxrQkFBa0IsQ0FBQztRQUVsRCxjQUFjO1FBQ0wsbUJBQWMsR0FBRyxhQUFhLENBQUM7UUFFeEMsY0FBYztRQUNMLDRCQUF1QixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRWxFLGNBQWM7UUFDTCw4QkFBeUIsR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUV0RSxjQUFjO1FBQ0csdUJBQWtCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUUxRCxjQUFjO1FBQ0csZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQzlDLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILGNBQWM7UUFDTCxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFakQsY0FBYztRQUNMLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVwRCxjQUFjO1FBQ0wsZUFBVSxHQUFHLFNBQVMsQ0FBQztRQUVoQyxjQUFjO1FBQ0csU0FBSSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWxELGNBQWM7UUFDRyxVQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhDLGNBQWM7UUFDRyxZQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTlDLGNBQWM7UUFDRyx1QkFBa0IsR0FBRyxNQUFNLENBQUMsdUJBQXVCLEVBQUU7WUFDbEUsUUFBUSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO1FBc0lILGNBQWM7UUFDZCwrQkFBMEIsR0FBRyxDQUFDLFFBQStCLEVBQVUsRUFBRTtZQUNyRSxJQUFJLE1BQU0sR0FBRyxVQUFVLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxTQUFTLElBQUksQ0FBQztZQUMxRSxJQUFJLE1BQU0sQ0FBQztZQUNYLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLGVBQWUsRUFBRTtnQkFDeEMsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDakMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFVBQVUsRUFBRTtvQkFDdEUsUUFBUSxFQUFFLENBQUM7aUJBQ2Q7Z0JBQ0QsTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDdkU7WUFDRCxJQUFJLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNuRCxNQUFNLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQzthQUMvQjtZQUNELE1BQU0sR0FBRyxNQUFNLEdBQUcsUUFBUSxRQUFRLENBQUMsUUFBUSxHQUFHLENBQUMsT0FBTyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0UsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtnQkFDdEMsTUFBTSxHQUFHLE1BQU0sR0FBRyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN2RDtZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUMsQ0FBQztRQXBKRSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGlCQUFpQjthQUMzQyxJQUFJLENBQ0QsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLENBQUMsRUFDNUQsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDNUI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQzlCLFNBQVMsQ0FBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDO2lCQUMxRCxJQUFJLENBQ0QsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFDdkMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FDNUI7aUJBQ0EsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDeEYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ2QsZUFBZTtRQUNYLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3hGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDOUQ7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2RDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixJQUFJLEtBQUssSUFBSSxPQUFPLEVBQUU7WUFDbEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7U0FDaEM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDUCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxjQUFjO0lBQ0osbUJBQW1CLENBQUMsTUFBYyxFQUFFLGdCQUFzQyxFQUFFLE1BQWE7UUFDL0YsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLGdCQUFnQixJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ3BGLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDMUI7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLHFCQUFxQjtRQUN6QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDL0IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0QsMkZBQTJGO1FBQzNGLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUztZQUNmLEVBQUUsSUFBSSxDQUNGLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFDaEUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUNyQjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxjQUFjO0lBQ04sVUFBVSxDQUFDLEtBQW9CO1FBQ25DLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQ3hDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQzNCLEtBQUssRUFDTCxJQUFJLENBQUMsS0FBSyxFQUNWLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUNyQyxDQUFDO0lBQ04sQ0FBQztJQUVELGNBQWM7SUFDZCxlQUFlO1FBQ1gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxjQUFjO0lBQ2QsMEJBQTBCLENBQUMsS0FBYTtRQUNwQyxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSwyQkFBMkIsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVELGNBQWM7SUFDZCxxQkFBcUIsQ0FBQyxHQUFnQixFQUFFLEtBQWE7UUFDakQsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELGNBQWM7SUFDZCxjQUFjLENBQUMsS0FBYSxFQUFFLE1BQW1CO1FBQzdDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztJQUN2QixDQUFDOzs4R0F6UVEsaUJBQWlCO2tHQUFqQixpQkFBaUIsK3JCQVpmO1FBQ1A7WUFDSSxPQUFPLEVBQUUsNEJBQTRCO1lBQ3JDLFdBQVcsRUFBRSxpQkFBaUI7U0FDakM7UUFDRCxnQkFBZ0I7S0FDbkIsc0VBNkVhLDRCQUE0QixvRUFNNUIsaUJBQWlCLDRGQ2xKbkMsNm9XQWtRQTsyRkQ3TGEsaUJBQWlCO2tCQWxCN0IsU0FBUzsrQkFFSSxpQkFBaUIsaUJBRVosaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsNEJBQTRCOzRCQUNyQyxXQUFXLG1CQUFtQjt5QkFDakM7d0JBQ0QsZ0JBQWdCO3FCQUNuQixRQUNLO3dCQUNGLElBQUksRUFBRSxLQUFLO3dCQUNYLHNCQUFzQixFQUFFLHVDQUF1QztxQkFDbEU7MEVBS0QsS0FBSztzQkFESixLQUFLO2dCQUtOLEdBQUc7c0JBREYsS0FBSztnQkFNTixLQUFLO3NCQUZKLFdBQVc7dUJBQUMsb0JBQW9COztzQkFDaEMsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sYUFBYTtzQkFEWixLQUFLO2dCQUtOLGtCQUFrQjtzQkFEakIsS0FBSztnQkFTTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sb0JBQW9CO3NCQURuQixLQUFLO2dCQUtOLGVBQWU7c0JBRGQsS0FBSztnQkFLTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUtOLHNCQUFzQjtzQkFEckIsS0FBSztnQkFRTixrQkFBa0I7c0JBRGpCLEtBQUs7Z0JBT04sWUFBWTtzQkFEWCxNQUFNO2dCQVFLLHVCQUF1QjtzQkFEbEMsWUFBWTt1QkFBQyw0QkFBNEI7Z0JBT3pCLGNBQWM7c0JBRDlCLFlBQVk7dUJBQUMsaUJBQWlCO2dCQUtuQixhQUFhO3NCQUR4QixXQUFXO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmcgKi9cbmltcG9ydCB7IERPV05fQVJST1csIFVQX0FSUk9XIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBEZXN0cm95ZWRTZXJ2aWNlLFxuICAgIEZES19GT0NVU0FCTEVfSVRFTV9ESVJFQ1RJVkUsXG4gICAgRkRLX0ZPQ1VTQUJMRV9MSVNUX0RJUkVDVElWRSxcbiAgICBGb2N1c2FibGVJdGVtRGlyZWN0aXZlLFxuICAgIEZvY3VzYWJsZUl0ZW1Qb3NpdGlvbixcbiAgICBLZXlVdGlsLFxuICAgIFJ0bFNlcnZpY2UsXG4gICAgdXVpZHY0XG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IFRhYmxlUm93RGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3RhYmxlJztcbmltcG9ydCB7XG4gICAgRWRpdGFibGVUYWJsZUNlbGwsXG4gICAgU2VsZWN0aW9uTW9kZSxcbiAgICBTZWxlY3Rpb25Nb2RlVmFsdWUsXG4gICAgVGFibGVDb2x1bW4sXG4gICAgVGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLFxuICAgIFRhYmxlRHJhZ2dhYmxlRGlyZWN0aXZlLFxuICAgIFRhYmxlUm93LFxuICAgIFRhYmxlUm93S2V5Ym9hcmREcmFnLFxuICAgIFRhYmxlUm93U2VydmljZSxcbiAgICBUYWJsZVNlcnZpY2UsXG4gICAgaXNUcmVlUm93Rmlyc3RDZWxsLFxuICAgIGlzVHJlZVJvd1xufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IHsgU3ViamVjdCwgZnJvbUV2ZW50LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW2ZkcC10YWJsZS1yb3ddJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtcm93LmNvbXBvbmVudC5odG1sJyxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGREtfRk9DVVNBQkxFX0xJU1RfRElSRUNUSVZFLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFRhYmxlUm93Q29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIERlc3Ryb3llZFNlcnZpY2VcbiAgICBdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgcm9sZTogJ3JvdycsXG4gICAgICAgICdbYXR0ci5hcmlhLWV4cGFuZGVkXSc6ICdfaXNUcmVlUm93KHJvdykgPyByb3cuZXhwYW5kZWQgOiBudWxsJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVSb3dDb21wb25lbnQ8VD4gZXh0ZW5kcyBUYWJsZVJvd0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIC8qKiBSb3cgSUQuICovXG4gICAgQElucHV0KClcbiAgICByb3dJZDogc3RyaW5nO1xuXG4gICAgLyoqIFRhYmxlIFJvdy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHJvdzogVGFibGVSb3c8VD47XG5cbiAgICAvKiogUm93IGluZGV4LiAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd2luZGV4JylcbiAgICBASW5wdXQoKVxuICAgIGluZGV4OiBudW1iZXI7XG5cbiAgICAvKiogU2VsZWN0aW9uIG1vZGUuICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25Nb2RlVmFsdWU7XG5cbiAgICAvKiogU2VsZWN0YWJsZSBmbGFnIGtleS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGFibGVLZXk6IHN0cmluZztcblxuICAgIC8qKiBXaGV0aGVyIHRvIGVuYWJsZSBjaGVja2JveCB0cmlzdGF0ZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZW5hYmxlVHJpc3RhdGVNb2RlOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBmaXggdGhlIHRhYmxlIGhlYWRlciBhbmQgZm9vdGVyLiBEZWZhdWx0IGlzIHRydWUuXG4gICAgICogTm90ZSB0aGF0IGlmIHRoZSB0YWJsZSBjb250YWlucyBmcmVlemFibGUgY29sdW1ucywgdGhlIGhlYWRlciBhbmRcbiAgICAgKiBmb290ZXIgd2lsbCBiZSBmaXhlZCBhdXRvbWF0aWNhbGx5LCByZWdhcmRsZXNzIG9mIHRoaXMgaW5wdXQgdmFsdWUuXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIGZpeGVkOiBib29sZWFuO1xuXG4gICAgLyoqIFNlbGVjdGlvbiBjb2x1bW4gd2lkdGguICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Db2x1bW5XaWR0aDogbnVtYmVyO1xuXG4gICAgLyoqIFRoZSBjb2x1bW4gYG5hbWVgIHRvIGZyZWV6ZSBjb2x1bW5zIHVwIHRvIGFuZCBpbmNsdWRpbmcuICovXG4gICAgQElucHV0KClcbiAgICBmcmVlemVDb2x1bW5zVG86IHN0cmluZztcblxuICAgIC8qKiBUaGUgY29sdW1uIGBuYW1lYCB0byBmcmVlemUgY29sdW1ucyBhZnRlciBhbmQgaW5jbHVkaW5nLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZnJlZXplRW5kQ29sdW1uc1RvOiBzdHJpbmc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgcm93IGlzIHRyZWUgcm93LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXNUcmVlUm93OiBib29sZWFuO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNlbGwgaXMgb25seSByZW5kZXJpbmcgd2l0aGluIHZpZXdwb3J0ICovXG4gICAgQElucHV0KClcbiAgICBvbmx5UmVuZGVyVmlzaWJsZUNlbGxzOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB1c2UgcGxhY2Vob2xkZXIgW2ZkLWJ1c3ktaW5kaWNhdG9yXSBmb3IgY2VsbHMgdGhhdCBhcmUgbm90IGluIHRoZSB2aWV3cG9ydFxuICAgICAqIFRoaXMgb3B0aW9uIHdvcmtzIG9ubHkgd2hlbiBgb25seVJlbmRlclZpc2libGVDZWxsc2AgaXMgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdXNlQ2VsbFBsYWNlaG9sZGVyID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBlbWl0dGVkIHdoZW4ga2V5Ym9hcmQgZHJhZyBwZXJmb3JtZWQuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAga2V5Ym9hcmREcmFnID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd0tleWJvYXJkRHJhZz4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2hhc1Jvd0hlYWRlckNvbHVtbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKEZES19GT0NVU0FCTEVfSVRFTV9ESVJFQ1RJVkUpXG4gICAgcHJpdmF0ZSBzZXQgX2ZvY3VzYWJsZVZpZXdDZWxsSXRlbXMoaXRlbXM6IFF1ZXJ5TGlzdDxGb2N1c2FibGVJdGVtRGlyZWN0aXZlPikge1xuICAgICAgICB0aGlzLnNldEl0ZW1zKGl0ZW1zKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oRWRpdGFibGVUYWJsZUNlbGwpXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZWRpdGFibGVDZWxsczogUXVlcnlMaXN0PEVkaXRhYmxlVGFibGVDZWxsPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2VsZWN0ZWQnKVxuICAgIHByaXZhdGUgZ2V0IF9hcmlhU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMucm93LmNoZWNrZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcnRsID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9yb3dTZWxlY3Rpb25IZWxwZXJUZXh0SWQgPSBgcm93U2VsZWN0aW9uSGVscGVyLSR7dXVpZHY0KCl9YDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2lzVHJlZVJvd0ZpcnN0Q2VsbCA9IGlzVHJlZVJvd0ZpcnN0Q2VsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgU0VMRUNUSU9OX01PREUgPSBTZWxlY3Rpb25Nb2RlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlciA9IGluamVjdChDb250ZW50RGVuc2l0eU9ic2VydmVyKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZSA9IGluamVjdChUYWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yZWZyZXNoQ2hpbGRSb3dzJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2UgPSBpbmplY3QoUnRsU2VydmljZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBfZmRwVGFibGVTZXJ2aWNlID0gaW5qZWN0KFRhYmxlU2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IF90YWJsZVJvd1NlcnZpY2UgPSBpbmplY3QoVGFibGVSb3dTZXJ2aWNlKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgX2lzVHJlZVJvdyA9IGlzVHJlZVJvdztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbG1SZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RuZFRhYmxlRGlyZWN0aXZlID0gaW5qZWN0KFRhYmxlRHJhZ2dhYmxlRGlyZWN0aXZlLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKS5zdWJzY3JpYmUoKHJ0bCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcnRsID0gcnRsO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UucmVzaXplSW5Qcm9ncmVzcyRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UubWFya0ZvckNoZWNrKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pih0aGlzLl9lbG1SZWYubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gISF0aGlzLl9kbmRUYWJsZURpcmVjdGl2ZSksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25LZXlEb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5fZmRwVGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zJC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoY29sdW1ucykgPT4ge1xuICAgICAgICAgICAgdGhpcy5faGFzUm93SGVhZGVyQ29sdW1uID0gY29sdW1ucy5zb21lKChjKSA9PiBjLnJvbGUgPT09ICdyb3doZWFkZXInKTtcbiAgICAgICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICB0aGlzLl9lZGl0YWJsZUNlbGxzLmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjZWxscyA9IHRoaXMuX2VkaXRhYmxlQ2VsbHMudG9BcnJheSgpO1xuICAgICAgICAgICAgaWYgKGNlbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudXBkYXRlRWRpdGFibGVDZWxscyh0aGlzLnJvdywgY2VsbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UucmVtb3ZlRWRpdGFibGVDZWxscyh0aGlzLnJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICAgICAgaWYgKCdyb3cnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX2xpc3RlblRvUm93RXhwYW5zaW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLl9yZWZyZXNoQ2hpbGRSb3dzJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX3JlZnJlc2hDaGlsZFJvd3MkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5yZW1vdmVFZGl0YWJsZUNlbGxzKHRoaXMucm93KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfaGFuZGxlQ2VsbFNwYWNlS2V5KGNvbElkeDogbnVtYmVyLCB0YWJsZUNlbGxFbGVtZW50OiBIVE1MVGFibGVDZWxsRWxlbWVudCwgJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoJGV2ZW50LnRhcmdldCA9PT0gdGFibGVDZWxsRWxlbWVudCAmJiBpc1RyZWVSb3dGaXJzdENlbGwoY29sSWR4LCB0aGlzLnJvdywgJGV2ZW50KSkge1xuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGVHcm91cFJvdygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1Jvd0V4cGFuc2lvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVmcmVzaENoaWxkUm93cyQubmV4dCgpO1xuICAgICAgICBjb25zdCByZWZyZXNoID0gbWVyZ2UodGhpcy5fcmVmcmVzaENoaWxkUm93cyQsIHRoaXMuX2Rlc3Ryb3kkKTtcbiAgICAgICAgLy8gTG9hZCBpdGVtcyBvbmx5IG9uY2UuIEZ1cnRoZXIgbG9hZGluZyB3aWxsIGJlIGNvdmVyZWQgYnkgdGhlIGxhenkgbG9hZGluZyBmdW5jdGlvbmFsaXR5LlxuICAgICAgICB0aGlzLnJvdz8uZXhwYW5kZWQkXG4gICAgICAgICAgICA/LnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChleHBhbmRlZCkgPT4gZXhwYW5kZWQgJiYgdGhpcy5yb3cuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwocmVmcmVzaClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS5sb2FkQ2hpbGRSb3dzKHRoaXMucm93KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzQXJyb3dEb3duID0gS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpO1xuICAgICAgICBjb25zdCBpc0Fycm93VXAgPSBLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpO1xuXG4gICAgICAgIGlmICghZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyb3dEb3duICYmICFpc0Fycm93VXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RuZFRhYmxlRGlyZWN0aXZlPy5kcmFnUm93RnJvbUtleWJvYXJkKFxuICAgICAgICAgICAgaXNBcnJvd0Rvd24gPyAnZG93bicgOiAndXAnLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICB0aGlzLmluZGV4LFxuICAgICAgICAgICAgZXZlbnQuc2hpZnRLZXkgPyAnZ3JvdXAnIDogJ3NoaWZ0J1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RvZ2dsZUdyb3VwUm93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlUm93KHsgdHlwZTogJ3RvZ2dsZVJvdycsIHJvdzogdGhpcy5yb3cgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfdG9nZ2xlU2luZ2xlU2VsZWN0YWJsZVJvdyhldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl90YWJsZVJvd1NlcnZpY2UudG9nZ2xlUm93KHsgdHlwZTogJ3RvZ2dsZVNpbmdsZVNlbGVjdGFibGVSb3cnLCByb3c6IHRoaXMucm93IH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3RvZ2dsZU11bHRpU2VsZWN0Um93KHJvdzogVGFibGVSb3c8VD4sIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3RhYmxlUm93U2VydmljZS50b2dnbGVSb3coeyAuLi57IHJvdywgZXZlbnQgfSwgLi4ueyB0eXBlOiAndG9nZ2xlTXVsdGlTZWxlY3RSb3cnIH0gfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29sdW1uVHJhY2tCeShpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2l0ZW1Gb2N1c2VkRXZlbnRBbm5vdW5jZXIgPSAocG9zaXRpb246IEZvY3VzYWJsZUl0ZW1Qb3NpdGlvbik6IHN0cmluZyA9PiB7XG4gICAgICAgIGxldCByZXRWYWwgPSBgQ29sdW1uICR7cG9zaXRpb24uY29sSW5kZXggKyAxfSBvZiAke3Bvc2l0aW9uLnRvdGFsQ29sc30sIGA7XG4gICAgICAgIGxldCBjb2x1bW47XG4gICAgICAgIGlmICh0aGlzLl9mZHBUYWJsZVNlcnZpY2U/LnZpc2libGVDb2x1bW5zJCkge1xuICAgICAgICAgICAgbGV0IGNvbEluZGV4ID0gcG9zaXRpb24uY29sSW5kZXg7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJyB8fCB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgICAgICBjb2xJbmRleC0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sdW1uID0gdGhpcy5fZmRwVGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zJC5nZXRWYWx1ZSgpW2NvbEluZGV4XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uICYmIChjb2x1bW4uX2ZyZWV6ZWQgfHwgY29sdW1uLl9lbmRGcmVlemVkKSkge1xuICAgICAgICAgICAgcmV0VmFsID0gcmV0VmFsICsgJ2ZpeGVkLCAnO1xuICAgICAgICB9XG4gICAgICAgIHJldFZhbCA9IHJldFZhbCArIGByb3c6ICR7cG9zaXRpb24ucm93SW5kZXggKyAxfSBvZiAke3Bvc2l0aW9uLnRvdGFsUm93c31gO1xuICAgICAgICBpZiAodGhpcy5pc1RyZWVSb3cgfHwgdGhpcy5yb3cubGV2ZWwgPiAwKSB7XG4gICAgICAgICAgICByZXRWYWwgPSByZXRWYWwgKyAnLCBsZXZlbCAnICsgKHRoaXMucm93LmxldmVsICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFZhbDtcbiAgICB9O1xufVxuIiwiPG5nLXRlbXBsYXRlICNmYWxsYmFja0NvbnRlbnQ+XG4gICAgPGZkLWJ1c3ktaW5kaWNhdG9yICpuZ0lmPVwidXNlQ2VsbFBsYWNlaG9sZGVyXCIgW2xvYWRpbmddPVwidHJ1ZVwiIHNpemU9XCJzXCIgW2Jsb2NrXT1cInRydWVcIj4gPC9mZC1idXN5LWluZGljYXRvcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAgICpuZ0lmPVwib25seVJlbmRlclZpc2libGVDZWxsczsgZWxzZSB0ZFByaW1hcnlDb250ZW50XCJcbiAgICBmZHBPbmx5UmVuZGVyVmlzaWJsZUNlbGxcbiAgICBbdGFibGVWaWV3cG9ydF09XCJ0ZFByaW1hcnlDb250ZW50XCJcbiAgICBbdmlld3BvcnRGYWxsYmFja109XCJmYWxsYmFja0NvbnRlbnRcIlxuPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZFByaW1hcnlDb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGRQcmltYXJ5Q29udGVudD5cbiAgICA8dGRcbiAgICAgICAgKm5nSWY9XCJfZmRwVGFibGVTZXJ2aWNlLl9zZW1hbnRpY0hpZ2hsaWdodGluZyQgfCBhc3luYyBhcyBzZW1hbnRpY0hpZ2hsaWdodGluZ1wiXG4gICAgICAgIGZkLXRhYmxlLWNlbGxcbiAgICAgICAgZmQtdGFibGUtc3RhdHVzLWluZGljYXRvclxuICAgICAgICBmZGtEaXNhYmxlZFxuICAgICAgICBbYWRkRGlzYWJsZWRDbGFzc109XCJmYWxzZVwiXG4gICAgICAgIFtzdGF0dXNdPVwicm93LnZhbHVlW3NlbWFudGljSGlnaGxpZ2h0aW5nXVwiXG4gICAgICAgIFtjZWxsRm9jdXNlZEV2ZW50QW5ub3VuY2VyXT1cIl9pdGVtRm9jdXNlZEV2ZW50QW5ub3VuY2VyXCJcbiAgICA+PC90ZD5cblxuICAgIDwhLS0gaGlkZGVuIHRleHQgZm9yIHNjcmVlbnJlYWRlciAtLT5cbiAgICA8bmctdGVtcGxhdGUgI3NlbGVjdGlvblNjcmVlblJlYWRlclRleHQ+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiX3Jvd1NlbGVjdGlvbkhlbHBlclRleHRJZFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSAhaW1wb3J0YW50JyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICcxcHgnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMXB4JyxcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgICAgICAgICAgY2xpcDogJ3JlY3QoMXB4LCAxcHgsIDFweCwgMXB4KScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJ1xuICAgICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IChyb3cuY2hlY2tlZCA/ICdwbGF0Zm9ybVRhYmxlLmRlc2VsZWN0U2luZ2xlUm93JyA6ICdwbGF0Zm9ybVRhYmxlLnNlbGVjdFNpbmdsZVJvdycpIHwgZmRUcmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8IS0tIFJvdyBTZWxlY3Rpb24gQ2VsbCAtLT5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzZWxlY3Rpb25Nb2RlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNFTEVDVElPTl9NT0RFLlNJTkdMRVwiPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJyb3cudmFsdWVbc2VsZWN0YWJsZUtleV0gIT09IGZhbHNlOyBlbHNlIHNlbGVjdGlvbk1vY2tcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtdGFibGVfX2NlbGwtLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZmQtdGFibGVfX2NlbGwtLWZpeGVkXT1cImZpeGVkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cIl9oYXNSb3dIZWFkZXJDb2x1bW4gPyAncm93aGVhZGVyJyA6ICdncmlkY2VsbCdcIlxuICAgICAgICAgICAgICAgIGZkLXRhYmxlLWNlbGxcbiAgICAgICAgICAgICAgICBbZm9jdXNhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtjZWxsRm9jdXNlZEV2ZW50QW5ub3VuY2VyXT1cIl9pdGVtRm9jdXNlZEV2ZW50QW5ub3VuY2VyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgIF9jb250ZW50RGVuc2l0eU9ic2VydmVyXG4gICAgICAgICAgICAgICAgICAgICAgICB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgICAgICB8IHNlbGVjdGlvbkNlbGxTdHlsZXMgOiBfcnRsIDogKF9mZHBUYWJsZVNlcnZpY2UuX3NlbWFudGljSGlnaGxpZ2h0aW5nQ29sdW1uV2lkdGgkIHwgYXN5bmMpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInJvdy5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiX3Jvd1NlbGVjdGlvbkhlbHBlclRleHRJZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cIl90b2dnbGVTaW5nbGVTZWxlY3RhYmxlUm93KCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3Rpb25TY3JlZW5SZWFkZXJUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIlNFTEVDVElPTl9NT0RFLk1VTFRJUExFXCI+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy52YWx1ZVtzZWxlY3RhYmxlS2V5XSAhPT0gZmFsc2U7IGVsc2Ugc2VsZWN0aW9uTW9ja1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9fY2VsbC0tY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5mZC10YWJsZV9fY2VsbC0tZml4ZWRdPVwiZml4ZWRcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJjZWxsXCJcbiAgICAgICAgICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgICAgICAgICAgW2ZvY3VzYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2VsbEZvY3VzZWRFdmVudEFubm91bmNlcl09XCJfaXRlbUZvY3VzZWRFdmVudEFubm91bmNlclwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiX3RvZ2dsZU11bHRpU2VsZWN0Um93KHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiX3RvZ2dsZU11bHRpU2VsZWN0Um93KHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJyb3cuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cIl9yb3dTZWxlY3Rpb25IZWxwZXJUZXh0SWRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJcbiAgICAgICAgICAgICAgICAgICAgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VsZWN0aW9uQ2VsbFN0eWxlcyA6IF9ydGwgOiAoX2ZkcFRhYmxlU2VydmljZS5fc2VtYW50aWNIaWdobGlnaHRpbmdDb2x1bW5XaWR0aCQgfCBhc3luYylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJzZWxlY3Rpb25TY3JlZW5SZWFkZXJUZXh0XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZmQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgdGFiSW5kZXhWYWx1ZT1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxDbGFzcz1cImZkLXRhYmxlX19jaGVja2JveC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFt0cmlzdGF0ZV09XCJlbmFibGVUcmlzdGF0ZU1vZGVcIlxuICAgICAgICAgICAgICAgICAgICBbdHJpc3RhdGVTZWxlY3RhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwicm93LmNoZWNrZWQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJfdG9nZ2xlTXVsdGlTZWxlY3RSb3cocm93KVwiXG4gICAgICAgICAgICAgICAgPjwvZmQtY2hlY2tib3g+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjc2VsZWN0aW9uTW9jaz5cbiAgICAgICAgPHRkXG4gICAgICAgICAgICBjbGFzcz1cImZkLXRhYmxlX19jZWxsLS1jaGVja2JveFwiXG4gICAgICAgICAgICByb2xlPVwiZ3JpZGNlbGxcIlxuICAgICAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICAgICAgZmRrRGlzYWJsZWRcbiAgICAgICAgICAgIFthZGREaXNhYmxlZENsYXNzXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtjbGFzcy5mZC10YWJsZV9fY2VsbC0tZml4ZWRdPVwiZml4ZWRcIlxuICAgICAgICAgICAgW2NlbGxGb2N1c2VkRXZlbnRBbm5vdW5jZXJdPVwiX2l0ZW1Gb2N1c2VkRXZlbnRBbm5vdW5jZXJcIlxuICAgICAgICA+PC90ZD5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPHRkXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGNvbHVtbiBvZiBfZmRwVGFibGVTZXJ2aWNlLnZpc2libGVDb2x1bW5zJCB8IGFzeW5jO1xuICAgICAgICAgICAgbGV0IGNvbElkeCA9IGluZGV4O1xuICAgICAgICAgICAgbGFzdCBhcyBpc0xhc3Q7XG4gICAgICAgICAgICB0cmFja0J5OiBfY29sdW1uVHJhY2tCeVxuICAgICAgICBcIlxuICAgICAgICAjdGFibGVDZWxsRWxlbWVudFxuICAgICAgICBbZmRwVGFibGVDZWxsUmVzaXphYmxlXT1cIlxuICAgICAgICAgICAgY29sSWR4XG4gICAgICAgICAgICAgICAgfCBjb2x1bW5SZXNpemFibGVTaWRlXG4gICAgICAgICAgICAgICAgICAgIDogX2ZkcFRhYmxlU2VydmljZS52aXNpYmxlQ29sdW1uc0xlbmd0aFxuICAgICAgICAgICAgICAgICAgICA6IChfZmRwVGFibGVTZXJ2aWNlLl9pc1Nob3duTmF2aWdhdGlvbkNvbHVtbiQgfCBhc3luYykgPT09IHRydWVcbiAgICAgICAgXCJcbiAgICAgICAgW2NvbHVtbk5hbWVdPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICBbZm9jdXNhYmxlXT1cInRydWVcIlxuICAgICAgICBbY2VsbEZvY3VzZWRFdmVudEFubm91bmNlcl09XCJfaXRlbUZvY3VzZWRFdmVudEFubm91bmNlclwiXG4gICAgICAgIFthdHRyLnJvbGVdPVwiY29sdW1uLnJvbGVcIlxuICAgICAgICBbaGVhZGVyc109XCJyb3dJZCArICdfXycgKyBjb2x1bW4ubmFtZVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIltcbiAgICAgICAgICAgICdmZHAtdGFibGVfX2NvbC0tJyArIGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgY29sdW1uLl9mcmVlemVkID8gJ2ZkLXRhYmxlX19jZWxsLS1maXhlZCcgOiAnJyxcbiAgICAgICAgICAgIGNvbHVtbi5uYW1lID09PSBmcmVlemVDb2x1bW5zVG8gPyAnZmQtdGFibGVfX2NlbGwtLWZpeGVkLWxhc3QnIDogJycsXG4gICAgICAgICAgICBjb2x1bW4uX2VuZEZyZWV6ZWQgPyAnZmQtdGFibGVfX2NlbGwtLWZpeGVkLWVuZCcgOiAnJyxcbiAgICAgICAgICAgIGNvbHVtbi5uYW1lID09PSBmcmVlemVFbmRDb2x1bW5zVG8gPyAnZmQtdGFibGVfX2NlbGwtLWZpeGVkLWVuZC1sYXN0JyA6ICcnLFxuICAgICAgICAgICAgcm93LmlzVHJlZSAmJiBjb2xJZHggPT09IDAgPyAnZmQtdGFibGVfX2NlbGwtLWV4cGFuZCcgOiAnJyxcbiAgICAgICAgICAgIGlzTGFzdCAmJiAoX2ZkcFRhYmxlU2VydmljZS5faXNTaG93bk5hdmlnYXRpb25Db2x1bW4kIHwgYXN5bmMpID09PSBmYWxzZSA/ICdpcy1sYXN0LWNoaWxkJyA6ICcnXG4gICAgICAgIF1cIlxuICAgICAgICBbbmdTdHlsZV09XCJcbiAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgICAgICAgIHwgdGFibGVDZWxsU3R5bGVzXG4gICAgICAgICAgICAgICAgICAgIDogX3J0bFxuICAgICAgICAgICAgICAgICAgICA6IChfZmRwVGFibGVTZXJ2aWNlLl9zZW1hbnRpY0hpZ2hsaWdodGluZ0NvbHVtbldpZHRoJCB8IGFzeW5jKVxuICAgICAgICAgICAgICAgICAgICA6IHNlbGVjdGlvbkNvbHVtbldpZHRoXG4gICAgICAgICAgICAgICAgICAgIDogY29sdW1uLl9mcmVlemVkXG4gICAgICAgICAgICAgICAgICAgIDogY29sdW1uLl9lbmRGcmVlemVkXG4gICAgICAgICAgICAgICAgICAgIDogX3RhYmxlQ29sdW1uUmVzaXplU2VydmljZS5nZXRQcmV2Q29sdW1uc1dpZHRoKGNvbHVtbi5uYW1lKVxuICAgICAgICAgICAgICAgICAgICA6IF90YWJsZUNvbHVtblJlc2l6ZVNlcnZpY2UuZ2V0Q29sdW1uV2lkdGhTdHlsZShjb2x1bW4ubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgOiBfdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmdldE5leHRDb2x1bW5zV2lkdGgoY29sdW1uLm5hbWUpXG4gICAgICAgIFwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiX2lzVHJlZVJvd0ZpcnN0Q2VsbChjb2xJZHgsIHJvdykgPyByb3cuZXhwYW5kZWQgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuZGF0YS1uZXN0aW5nLWxldmVsXT1cImNvbElkeCA9PT0gMCA/IHJvdy5sZXZlbCArIDEgOiBudWxsXCJcbiAgICAgICAgKGNlbGxGb2N1c2VkKT1cIl90YWJsZVJvd1NlcnZpY2UuY2VsbEZvY3VzZWQoJGV2ZW50KTsgX3RhYmxlUm93U2VydmljZS5jZWxsQWN0aXZhdGUoY29sSWR4LCByb3cpXCJcbiAgICAgICAgKGNsaWNrKT1cIl90YWJsZVJvd1NlcnZpY2UuY2VsbENsaWNrZWQoeyBpbmRleDogY29sSWR4LCByb3cgfSlcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJfaXNUcmVlUm93Rmlyc3RDZWxsKGNvbElkeCwgcm93LCAkZXZlbnQpICYmIF90b2dnbGVHcm91cFJvdygpXCJcbiAgICAgICAgKGtleWRvd24uYXJyb3dMZWZ0KT1cIl90YWJsZVJvd1NlcnZpY2Uuc2Nyb2xsVG9PdmVybGFwcGVkQ2VsbCgpXCJcbiAgICAgICAgKGtleWRvd24uYXJyb3dSaWdodCk9XCJfdGFibGVSb3dTZXJ2aWNlLnNjcm9sbFRvT3ZlcmxhcHBlZENlbGwoKVwiXG4gICAgICAgIChrZXlkb3duLnNwYWNlKT1cIl9oYW5kbGVDZWxsU3BhY2VLZXkoY29sSWR4LCB0YWJsZUNlbGxFbGVtZW50LCAkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcHJpbWFyeVRleHRDb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW2NsYXNzLmZkLXRhYmxlX190ZXh0XT1cImNvbHVtbi5hcHBseVRleHRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5mZC10YWJsZV9fdGV4dC0tbm8td3JhcF09XCJjb2x1bW4ubm9XcmFwXCJcbiAgICAgICAgICAgICAgICAjdGFibGVUZXh0Q29udGFpbmVyXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJfaXNUcmVlUm93Rmlyc3RDZWxsKGNvbElkeCwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtdGFibGVfX2V4cGFuZFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mZC10YWJsZV9fZXhwYW5kLS1vcGVuXT1cInJvdy5leHBhbmRlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPjwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuc3RhdGUgPT09ICdyZWFkb25seSc7IGVsc2UgZWRpdE1vZGVDZWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlVGV4dENvbnRhaW5lcj8udGV4dENvbnRlbnQ/LnRyaW0oKSA9PT0gJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGUgIWltcG9ydGFudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMXB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwOiByZWN0KDFweCAxcHggMXB4IDFweCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcDogcmVjdCgxcHgsIDFweCwgMXB4LCAxcHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID57eyAncGxhdGZvcm1UYWJsZS5lbXB0eUNlbGwnIHwgZmRUcmFuc2xhdGUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uPy5jb2x1bW5DZWxsVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFRhYmxlQ2VsbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmNvbHVtbkNlbGxUZW1wbGF0ZSE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3cudmFsdWUsIHBvcHBpbmc6IGZhbHNlLCByb3dJbmRleDogcm93LmluZGV4IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUYWJsZUNlbGxUZW1wbGF0ZT57eyByb3cudmFsdWUgfCB2YWx1ZUJ5UGF0aCA6IGNvbHVtbi5rZXkgfX08L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlZGl0TW9kZUNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4/LmVkaXRhYmxlQ29sdW1uQ2VsbFRlbXBsYXRlOyBlbHNlIGRlZmF1bHRFZGl0YWJsZVRhYmxlQ2VsbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLmVkaXRhYmxlQ29sdW1uQ2VsbFRlbXBsYXRlITtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvdy52YWx1ZSwgcG9wcGluZzogZmFsc2UsIHJvd0luZGV4OiByb3cuaW5kZXggfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVkaXRhYmxlVGFibGVDZWxsVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZmRwLXRhYmxlLWVkaXRhYmxlLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm93XT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5WYWx1ZV09XCJyb3cudmFsdWUgfCB2YWx1ZUJ5UGF0aCA6IGNvbHVtbi5rZXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmRwLXRhYmxlLWVkaXRhYmxlLWNlbGw+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJvbmx5UmVuZGVyVmlzaWJsZUNlbGxzOyBlbHNlIHByaW1hcnlUZXh0Q29udGFpbmVyXCJcbiAgICAgICAgICAgIGZkcE9ubHlSZW5kZXJWaXNpYmxlQ2VsbFxuICAgICAgICAgICAgW3RhYmxlVmlld3BvcnRdPVwicHJpbWFyeVRleHRDb250YWluZXJcIlxuICAgICAgICAgICAgW3ZpZXdwb3J0RmFsbGJhY2tdPVwiZmFsbGJhY2tDb250ZW50XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInByaW1hcnlUZXh0Q29udGFpbmVyXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3RkPlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgPHRkXG4gICAgICAgICpuZ0lmPVwiX2ZkcFRhYmxlU2VydmljZS5faXNTaG93bk5hdmlnYXRpb25Db2x1bW4kIHwgYXN5bmNcIlxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIGNsYXNzPVwiZmRwLXRhYmxlX19jZWxsLS1uYXZpZ2F0aW9uIGlzLWxhc3QtY2hpbGRcIlxuICAgICAgICBmZGtEaXNhYmxlZFxuICAgICAgICBbYWRkRGlzYWJsZWRDbGFzc109XCJmYWxzZVwiXG4gICAgICAgIFtjZWxsRm9jdXNlZEV2ZW50QW5ub3VuY2VyXT1cIl9pdGVtRm9jdXNlZEV2ZW50QW5ub3VuY2VyXCJcbiAgICA+XG4gICAgICAgIDxpXG4gICAgICAgICAgICAqbmdJZj1cInJvdy5uYXZpZ2F0YWJsZVwiXG4gICAgICAgICAgICBmZC10YWJsZS1pY29uXG4gICAgICAgICAgICBbbmF2aWdhdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJfcnRsID8gJ3NhcC1pY29uLS1zbGltLWFycm93LWxlZnQnIDogJ3NhcC1pY29uLS1zbGltLWFycm93LXJpZ2h0J1wiXG4gICAgICAgICAgICBjbGFzcz1cImZkcC10YWJsZV9fbmF2aWdhdGlvbi1pbmRpY2F0b3JcIlxuICAgICAgICA+PC9pPlxuICAgIDwvdGQ+XG5cbiAgICA8dGRcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgY2xhc3M9XCJmZC10YWJsZV9fY2VsbCBmZC10YWJsZV9fY2VsbC0tbW9ja1wiXG4gICAgICAgIFtjbGFzcy5mZC10YWJsZV9fY2VsbC0tbW9jay1ib3JkZXJsZXNzXT1cIihfdGFibGVDb2x1bW5SZXNpemVTZXJ2aWNlLmNlbGxNb2NrVmlzaWJsZSQgfCBhc3luYykgIT09IHRydWVcIlxuICAgICAgICBmZGtEaXNhYmxlZFxuICAgICAgICBbYWRkRGlzYWJsZWRDbGFzc109XCJmYWxzZVwiXG4gICAgPjwvdGQ+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -117,10 +117,10 @@ export class TableToolbarComponent {
117
117
  }
118
118
  }
119
119
  TableToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TableToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Table }, { token: i1.TableService }], target: i0.ɵɵFactoryTarget.Component });
120
- TableToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TableToolbarComponent, selector: "fdp-table-toolbar", inputs: { shouldOverflow: "shouldOverflow", title: "title", searchFieldAriaLabel: "searchFieldAriaLabel", hideItemCount: "hideItemCount", hideSearchInput: "hideSearchInput", showExpandCollapseButtons: "showExpandCollapseButtons", searchSuggestions: "searchSuggestions", editMode: "editMode" }, providers: [{ provide: TABLE_TOOLBAR, useExisting: TableToolbarComponent }], queries: [{ propertyName: "tableToolbarActionsComponent", first: true, predicate: TableToolbarActionsComponent, descendants: true }, { propertyName: "_tableToolbarLeftActionsComponent", first: true, predicate: TableToolbarLeftActionsComponent, descendants: true }], viewQueries: [{ propertyName: "contentTemplateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<ng-template\n let-counter=\"counter\"\n let-sortable=\"sortable\"\n let-filterable=\"filterable\"\n let-groupable=\"groupable\"\n let-columns=\"columns\"\n>\n <fd-toolbar\n fdType=\"transparent\"\n [clearBorder]=\"true\"\n [titleId]=\"tableToolbarTitleId\"\n [title]=\"title && !hideItemCount ? title + ' (' + (counter | async) + ')' : title\"\n [shouldOverflow]=\"shouldOverflow\"\n >\n <ng-container *ngIf=\"_tableToolbarLeftActionsComponent\">\n <span fd-toolbar-item fdOverflowPriority=\"never\">\n <fd-toolbar-separator *ngIf=\"!!title || !hideItemCount\"></fd-toolbar-separator>\n <ng-container *ngTemplateOutlet=\"_tableToolbarLeftActionsComponent._contentTemplateRef\"></ng-container>\n </span>\n </ng-container>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n\n <fdp-search-field\n fd-toolbar-item\n *ngIf=\"!hideSearchInput\"\n style=\"min-width: 15.5rem\"\n [placeholder]=\"'platformTable.toolbarSearchPlaceholder' | fdTranslate\"\n [inputText]=\"_searchInputText\"\n [disabled]=\"!!(tableLoading$ | async)\"\n [suggestions]=\"searchSuggestions\"\n [ariaLabel]=\"searchFieldAriaLabel || null\"\n [ariaLabelledBy]=\"searchFieldAriaLabel ? null : tableToolbarTitleId\"\n (searchSubmit)=\"submitSearch($event)\"\n (cancelSearch)=\"submitSearch($event)\"\n [disableSuggestionsFoundAnnouncer]=\"true\"\n ></fdp-search-field>\n\n <ng-container *ngIf=\"editMode !== 'none'\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCreateButtonLabel' | fdTranslate\"\n (click)=\"_addRow()\"\n ></fdp-button>\n <ng-container *ngIf=\"_showSaveButton\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionSaveButtonLabel' | fdTranslate\"\n *ngIf=\"_showSaveButton\"\n (click)=\"_saveRows()\"\n ></fdp-button>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCancelButtonLabel' | fdTranslate\"\n (click)=\"_cancelEditing()\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"\n tableToolbarActionsComponent ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n ></fd-toolbar-separator>\n </ng-container>\n\n <span fd-toolbar-item *ngIf=\"tableToolbarActionsComponent\" class=\"fdp-table-toolbar-actions\">\n <ng-container *ngTemplateOutlet=\"tableToolbarActionsComponent.contentTemplateRef\"></ng-container>\n </span>\n\n <ng-container\n *ngIf=\"\n showExpandCollapseButtons ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n >\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"tableToolbarActionsComponent\"\n ></fd-toolbar-separator>\n\n <ng-container *ngIf=\"showExpandCollapseButtons\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"expand-all\"\n (click)=\"_expandAll()\"\n [title]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"collapse-all\"\n (click)=\"_collapseAll()\"\n [title]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"sortable | async\"\n glyph=\"sort\"\n [title]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openSorting()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"filterable | async\"\n glyph=\"filter\"\n [title]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openFiltering()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"groupable | async\"\n glyph=\"group-2\"\n [title]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openGrouping()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"columns | async\"\n glyph=\"action-settings\"\n [title]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openColumns()\"\n ></fdp-button>\n </ng-container>\n </fd-toolbar>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i3.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i3.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i3.ToolbarSeparatorComponent, selector: "fd-toolbar-separator" }, { kind: "component", type: i4.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "toggled", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: i5.SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "ariaLabel", "ariaLabelledby", "searchSuggestionMessage", "searchSuggestionNavigateMessage", "forceSearchButton", "disableSuggestionsFoundAnnouncer"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
120
+ TableToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TableToolbarComponent, selector: "fdp-table-toolbar", inputs: { shouldOverflow: "shouldOverflow", title: "title", searchFieldAriaLabel: "searchFieldAriaLabel", hideItemCount: "hideItemCount", hideSearchInput: "hideSearchInput", showExpandCollapseButtons: "showExpandCollapseButtons", searchSuggestions: "searchSuggestions", editMode: "editMode" }, providers: [{ provide: TABLE_TOOLBAR, useExisting: TableToolbarComponent }], queries: [{ propertyName: "tableToolbarActionsComponent", first: true, predicate: TableToolbarActionsComponent, descendants: true }, { propertyName: "_tableToolbarLeftActionsComponent", first: true, predicate: TableToolbarLeftActionsComponent, descendants: true }], viewQueries: [{ propertyName: "contentTemplateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<ng-template\n let-counter=\"counter\"\n let-sortable=\"sortable\"\n let-filterable=\"filterable\"\n let-groupable=\"groupable\"\n let-columns=\"columns\"\n>\n <fd-toolbar\n fdType=\"transparent\"\n [clearBorder]=\"true\"\n [titleId]=\"tableToolbarTitleId\"\n [title]=\"title && !hideItemCount ? title + ' (' + (counter | async) + ')' : title\"\n [shouldOverflow]=\"shouldOverflow\"\n >\n <ng-container *ngIf=\"_tableToolbarLeftActionsComponent\">\n <span fd-toolbar-item fdOverflowPriority=\"never\">\n <fd-toolbar-separator *ngIf=\"!!title || !hideItemCount\"></fd-toolbar-separator>\n <ng-container *ngTemplateOutlet=\"_tableToolbarLeftActionsComponent._contentTemplateRef\"></ng-container>\n </span>\n </ng-container>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n\n <fdp-search-field\n fd-toolbar-item\n *ngIf=\"!hideSearchInput\"\n style=\"min-width: 15.5rem\"\n [placeholder]=\"'platformTable.toolbarSearchPlaceholder' | fdTranslate\"\n [inputText]=\"_searchInputText\"\n [disabled]=\"!!(tableLoading$ | async)\"\n [suggestions]=\"searchSuggestions\"\n [ariaLabel]=\"searchFieldAriaLabel\"\n [ariaLabelledBy]=\"searchFieldAriaLabel ? null : tableToolbarTitleId\"\n (searchSubmit)=\"submitSearch($event)\"\n (cancelSearch)=\"submitSearch($event)\"\n [disableSuggestionsFoundAnnouncer]=\"true\"\n ></fdp-search-field>\n\n <ng-container *ngIf=\"editMode !== 'none'\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCreateButtonLabel' | fdTranslate\"\n (click)=\"_addRow()\"\n ></fdp-button>\n <ng-container *ngIf=\"_showSaveButton\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionSaveButtonLabel' | fdTranslate\"\n *ngIf=\"_showSaveButton\"\n (click)=\"_saveRows()\"\n ></fdp-button>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCancelButtonLabel' | fdTranslate\"\n (click)=\"_cancelEditing()\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"\n tableToolbarActionsComponent ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n ></fd-toolbar-separator>\n </ng-container>\n\n <span fd-toolbar-item *ngIf=\"tableToolbarActionsComponent\" class=\"fdp-table-toolbar-actions\">\n <ng-container *ngTemplateOutlet=\"tableToolbarActionsComponent.contentTemplateRef\"></ng-container>\n </span>\n\n <ng-container\n *ngIf=\"\n showExpandCollapseButtons ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n >\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"tableToolbarActionsComponent\"\n ></fd-toolbar-separator>\n\n <ng-container *ngIf=\"showExpandCollapseButtons\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"expand-all\"\n (click)=\"_expandAll()\"\n [title]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"collapse-all\"\n (click)=\"_collapseAll()\"\n [title]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"sortable | async\"\n glyph=\"sort\"\n [title]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openSorting()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"filterable | async\"\n glyph=\"filter\"\n [title]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openFiltering()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"groupable | async\"\n glyph=\"group-2\"\n [title]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openGrouping()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"columns | async\"\n glyph=\"action-settings\"\n [title]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openColumns()\"\n ></fdp-button>\n </ng-container>\n </fd-toolbar>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.ToolbarComponent, selector: "fd-toolbar", inputs: ["titleId", "class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i3.ToolbarItemDirective, selector: "[fd-toolbar-item], [fdOverflowGroup], [fdOverflowPriority]", inputs: ["fdOverflowPriority", "fdOverflowGroup"] }, { kind: "directive", type: i3.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i3.ToolbarSeparatorComponent, selector: "fd-toolbar-separator" }, { kind: "component", type: i4.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "toggled", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: i5.SearchFieldComponent, selector: "fdp-search-field", inputs: ["categoryMode", "appearance", "placeholder", "mobile", "mobileConfig", "disableRefresh", "disableSearch", "suggestions", "dataSource", "inputText", "categories", "currentCategory", "categoryLabel", "hideCategoryLabel", "isLoading", "ariaLabel", "ariaLabelledby", "searchSuggestionMessage", "searchSuggestionNavigateMessage", "forceSearchButton", "disableSuggestionsFoundAnnouncer"], outputs: ["inputChange", "searchSubmit", "cancelSearch", "isOpenChange"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.FdTranslatePipe, name: "fdTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
121
121
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TableToolbarComponent, decorators: [{
122
122
  type: Component,
123
- args: [{ selector: 'fdp-table-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [{ provide: TABLE_TOOLBAR, useExisting: TableToolbarComponent }], template: "<ng-template\n let-counter=\"counter\"\n let-sortable=\"sortable\"\n let-filterable=\"filterable\"\n let-groupable=\"groupable\"\n let-columns=\"columns\"\n>\n <fd-toolbar\n fdType=\"transparent\"\n [clearBorder]=\"true\"\n [titleId]=\"tableToolbarTitleId\"\n [title]=\"title && !hideItemCount ? title + ' (' + (counter | async) + ')' : title\"\n [shouldOverflow]=\"shouldOverflow\"\n >\n <ng-container *ngIf=\"_tableToolbarLeftActionsComponent\">\n <span fd-toolbar-item fdOverflowPriority=\"never\">\n <fd-toolbar-separator *ngIf=\"!!title || !hideItemCount\"></fd-toolbar-separator>\n <ng-container *ngTemplateOutlet=\"_tableToolbarLeftActionsComponent._contentTemplateRef\"></ng-container>\n </span>\n </ng-container>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n\n <fdp-search-field\n fd-toolbar-item\n *ngIf=\"!hideSearchInput\"\n style=\"min-width: 15.5rem\"\n [placeholder]=\"'platformTable.toolbarSearchPlaceholder' | fdTranslate\"\n [inputText]=\"_searchInputText\"\n [disabled]=\"!!(tableLoading$ | async)\"\n [suggestions]=\"searchSuggestions\"\n [ariaLabel]=\"searchFieldAriaLabel || null\"\n [ariaLabelledBy]=\"searchFieldAriaLabel ? null : tableToolbarTitleId\"\n (searchSubmit)=\"submitSearch($event)\"\n (cancelSearch)=\"submitSearch($event)\"\n [disableSuggestionsFoundAnnouncer]=\"true\"\n ></fdp-search-field>\n\n <ng-container *ngIf=\"editMode !== 'none'\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCreateButtonLabel' | fdTranslate\"\n (click)=\"_addRow()\"\n ></fdp-button>\n <ng-container *ngIf=\"_showSaveButton\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionSaveButtonLabel' | fdTranslate\"\n *ngIf=\"_showSaveButton\"\n (click)=\"_saveRows()\"\n ></fdp-button>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCancelButtonLabel' | fdTranslate\"\n (click)=\"_cancelEditing()\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"\n tableToolbarActionsComponent ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n ></fd-toolbar-separator>\n </ng-container>\n\n <span fd-toolbar-item *ngIf=\"tableToolbarActionsComponent\" class=\"fdp-table-toolbar-actions\">\n <ng-container *ngTemplateOutlet=\"tableToolbarActionsComponent.contentTemplateRef\"></ng-container>\n </span>\n\n <ng-container\n *ngIf=\"\n showExpandCollapseButtons ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n >\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"tableToolbarActionsComponent\"\n ></fd-toolbar-separator>\n\n <ng-container *ngIf=\"showExpandCollapseButtons\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"expand-all\"\n (click)=\"_expandAll()\"\n [title]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"collapse-all\"\n (click)=\"_collapseAll()\"\n [title]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"sortable | async\"\n glyph=\"sort\"\n [title]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openSorting()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"filterable | async\"\n glyph=\"filter\"\n [title]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openFiltering()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"groupable | async\"\n glyph=\"group-2\"\n [title]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openGrouping()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"columns | async\"\n glyph=\"action-settings\"\n [title]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openColumns()\"\n ></fdp-button>\n </ng-container>\n </fd-toolbar>\n</ng-template>\n" }]
123
+ args: [{ selector: 'fdp-table-toolbar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [{ provide: TABLE_TOOLBAR, useExisting: TableToolbarComponent }], template: "<ng-template\n let-counter=\"counter\"\n let-sortable=\"sortable\"\n let-filterable=\"filterable\"\n let-groupable=\"groupable\"\n let-columns=\"columns\"\n>\n <fd-toolbar\n fdType=\"transparent\"\n [clearBorder]=\"true\"\n [titleId]=\"tableToolbarTitleId\"\n [title]=\"title && !hideItemCount ? title + ' (' + (counter | async) + ')' : title\"\n [shouldOverflow]=\"shouldOverflow\"\n >\n <ng-container *ngIf=\"_tableToolbarLeftActionsComponent\">\n <span fd-toolbar-item fdOverflowPriority=\"never\">\n <fd-toolbar-separator *ngIf=\"!!title || !hideItemCount\"></fd-toolbar-separator>\n <ng-container *ngTemplateOutlet=\"_tableToolbarLeftActionsComponent._contentTemplateRef\"></ng-container>\n </span>\n </ng-container>\n <fd-toolbar-spacer></fd-toolbar-spacer>\n\n <fdp-search-field\n fd-toolbar-item\n *ngIf=\"!hideSearchInput\"\n style=\"min-width: 15.5rem\"\n [placeholder]=\"'platformTable.toolbarSearchPlaceholder' | fdTranslate\"\n [inputText]=\"_searchInputText\"\n [disabled]=\"!!(tableLoading$ | async)\"\n [suggestions]=\"searchSuggestions\"\n [ariaLabel]=\"searchFieldAriaLabel\"\n [ariaLabelledBy]=\"searchFieldAriaLabel ? null : tableToolbarTitleId\"\n (searchSubmit)=\"submitSearch($event)\"\n (cancelSearch)=\"submitSearch($event)\"\n [disableSuggestionsFoundAnnouncer]=\"true\"\n ></fdp-search-field>\n\n <ng-container *ngIf=\"editMode !== 'none'\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCreateButtonLabel' | fdTranslate\"\n (click)=\"_addRow()\"\n ></fdp-button>\n <ng-container *ngIf=\"_showSaveButton\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionSaveButtonLabel' | fdTranslate\"\n *ngIf=\"_showSaveButton\"\n (click)=\"_saveRows()\"\n ></fdp-button>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n [label]=\"'platformTable.toolbarActionCancelButtonLabel' | fdTranslate\"\n (click)=\"_cancelEditing()\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"\n tableToolbarActionsComponent ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n ></fd-toolbar-separator>\n </ng-container>\n\n <span fd-toolbar-item *ngIf=\"tableToolbarActionsComponent\" class=\"fdp-table-toolbar-actions\">\n <ng-container *ngTemplateOutlet=\"tableToolbarActionsComponent.contentTemplateRef\"></ng-container>\n </span>\n\n <ng-container\n *ngIf=\"\n showExpandCollapseButtons ||\n (sortable | async) ||\n (filterable | async) ||\n (groupable | async) ||\n (columns | async)\n \"\n >\n <fd-toolbar-separator\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"tableToolbarActionsComponent\"\n ></fd-toolbar-separator>\n\n <ng-container *ngIf=\"showExpandCollapseButtons\">\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"expand-all\"\n (click)=\"_expandAll()\"\n [title]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionExpandAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n glyph=\"collapse-all\"\n (click)=\"_collapseAll()\"\n [title]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionCollapseAllButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n ></fdp-button>\n </ng-container>\n\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"sortable | async\"\n glyph=\"sort\"\n [title]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionSortButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openSorting()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"filterable | async\"\n glyph=\"filter\"\n [title]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionFilterButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openFiltering()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"groupable | async\"\n glyph=\"group-2\"\n [title]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionGroupButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openGrouping()\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n fdOverflowPriority=\"never\"\n *ngIf=\"columns | async\"\n glyph=\"action-settings\"\n [title]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n [ariaLabel]=\"'platformTable.toolbarActionColumnsButtonTitle' | fdTranslate\"\n buttonType=\"transparent\"\n aria-haspopup=\"modal\"\n (click)=\"openColumns()\"\n ></fdp-button>\n </ng-container>\n </fd-toolbar>\n</ng-template>\n" }]
124
124
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.Table }, { type: i1.TableService }]; }, propDecorators: { shouldOverflow: [{
125
125
  type: Input
126
126
  }], title: [{
@@ -147,4 +147,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
147
147
  type: ViewChild,
148
148
  args: [TemplateRef]
149
149
  }] } });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvdGFibGUvY29tcG9uZW50cy90YWJsZS10b29sYmFyL3RhYmxlLXRvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtdG9vbGJhci90YWJsZS10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7QUFJMUYsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFFbEM7Ozs7Ozs7OztLQVNLO0FBU0wsTUFBTSxPQUFPLHFCQUFxQjtJQTZEOUIsY0FBYztJQUNkLFlBQ3FCLEdBQXNCLEVBQ3RCLE1BQWEsRUFDYixhQUEyQjtRQUYzQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2Isa0JBQWEsR0FBYixh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QWdDO2dCQUs5QyxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFNlYXJjaElucHV0LCBTdWdnZXN0aW9uSXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IFRhYmxlLCBUYWJsZVNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVEFCTEVfVE9PTEJBUiwgVGFibGVUb29sYmFySW50ZXJmYWNlIH0gZnJvbSAnLi90YWJsZS10b29sYmFyJztcbmltcG9ydCB7IFRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXRvb2xiYXItYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVUb29sYmFyTGVmdEFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXRvb2xiYXItbGVmdC1hY3Rpb25zLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIEVkaXRNb2RlID0gJ25vbmUnIHwgJ2lubGluZSc7XG5cbmxldCB0YWJsZVRvb2xiYXJUaXRsZVVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKiBUaGUgY29tcG9uZW50IHRoYXQgcmVwcmVzZW50cyBhIHRhYmxlIHRvb2xiYXIuXG4gKlxuICogYGBgaHRtbFxuICogPGZkcC10YWJsZS10b29sYmFyXG4gKiAgIHRpdGxlPVwiT3JkZXIgTGluZSBJdGVtc1wiXG4gKiAgIFtoaWRlSXRlbUNvdW50XT1cImZhbHNlXCI+XG4gKiA8L2ZkcC10YWJsZS10b29sYmFyPlxuICogYGBgXG4gKiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZS10b29sYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRBQkxFX1RPT0xCQVIsIHVzZUV4aXN0aW5nOiBUYWJsZVRvb2xiYXJDb21wb25lbnQgfV1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgVGFibGVUb29sYmFySW50ZXJmYWNlLCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRvb2xiYXIgc2hvdWxkIGhpZGUgZWxlbWVudHMgaW4gcG9wb3ZlciB3aGVuIHRoZXkgb3ZlcmZsb3cuXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3VsZE92ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAvKiogVGFibGUgdGl0bGUuICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBzZWFyY2ggZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hGaWVsZEFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBUb2dnbGUgdG8gc2hvdyB0YWJsZSBpdGVtIGNvdW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZUl0ZW1Db3VudCA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZSB0byBzaG93IHNlYXJjaCBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVTZWFyY2hJbnB1dCA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZSB0byBleHBhbmQgYW5kIGNvbGxhcHNlIGFsbCBmZWF0dXJlICovXG4gICAgQElucHV0KClcbiAgICBzaG93RXhwYW5kQ29sbGFwc2VCdXR0b25zID0gZmFsc2U7XG4gICAgLyoqIFN1Z2dlc3Rpb25zIGZvciBzZWFyY2ggZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hTdWdnZXN0aW9uczogU3VnZ2VzdGlvbkl0ZW1bXSA9IFtdO1xuXG4gICAgLyoqIFRhYmxlIHJvd3MgZWRpdC9hZGQgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVkaXRNb2RlOiBFZGl0TW9kZSA9ICdub25lJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChUYWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50KVxuICAgIHRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQ6IFRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoVGFibGVUb29sYmFyTGVmdEFjdGlvbnNDb21wb25lbnQpXG4gICAgX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50OiBUYWJsZVRvb2xiYXJMZWZ0QWN0aW9uc0NvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZilcbiAgICBjb250ZW50VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRhYmxlVG9vbGJhclRpdGxlSWQ6IHN0cmluZyA9ICdmZC10YWJsZS10b29sYmFyLXRpdGxlLScgKyB0YWJsZVRvb2xiYXJUaXRsZVVuaXF1ZUlkKys7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93U2F2ZUJ1dHRvbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VhcmNoSW5wdXRUZXh0ID0gJyc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlOiBUYWJsZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVTZXJ2aWNlOiBUYWJsZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZUV2ZW50cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzdWJtaXRTZWFyY2goc2VhcmNoOiBTZWFyY2hJbnB1dCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5zZWFyY2goc2VhcmNoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9wZW5Tb3J0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVTb3J0U2V0dGluZ3MuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3BlbkZpbHRlcmluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUub3BlblRhYmxlRmlsdGVyU2V0dGluZ3MuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3Blbkdyb3VwaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVHcm91cFNldHRpbmdzLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9wZW5Db2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVDb2x1bW5TZXR0aW5ncy5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYWRkUm93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5hZGRSb3coKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zYXZlUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUuc2F2ZVJvd3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYW5jZWxFZGl0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5jYW5jZWxFZGl0aW5nKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5lbXB0eVJvd0FkZGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl90YWJsZS5zYXZlLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUuY2FuY2VsLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUucHJlc2V0Q2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VhcmNoSW5wdXRUZXh0ID0gc3RhdGUuc2VhcmNoSW5wdXQ/LnRleHQgPz8gJyc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2V4cGFuZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUuZXhwYW5kQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29sbGFwc2VBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlLmNvbGxhcHNlQWxsKCk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlXG4gICAgbGV0LWNvdW50ZXI9XCJjb3VudGVyXCJcbiAgICBsZXQtc29ydGFibGU9XCJzb3J0YWJsZVwiXG4gICAgbGV0LWZpbHRlcmFibGU9XCJmaWx0ZXJhYmxlXCJcbiAgICBsZXQtZ3JvdXBhYmxlPVwiZ3JvdXBhYmxlXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuPlxuICAgIDxmZC10b29sYmFyXG4gICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgW2NsZWFyQm9yZGVyXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVJZF09XCJ0YWJsZVRvb2xiYXJUaXRsZUlkXCJcbiAgICAgICAgW3RpdGxlXT1cInRpdGxlICYmICFoaWRlSXRlbUNvdW50ID8gdGl0bGUgKyAnICgnICsgKGNvdW50ZXIgfCBhc3luYykgKyAnKScgOiB0aXRsZVwiXG4gICAgICAgIFtzaG91bGRPdmVyZmxvd109XCJzaG91bGRPdmVyZmxvd1wiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50XCI+XG4gICAgICAgICAgICA8c3BhbiBmZC10b29sYmFyLWl0ZW0gZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3IgKm5nSWY9XCIhIXRpdGxlIHx8ICFoaWRlSXRlbUNvdW50XCI+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50Ll9jb250ZW50VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxmZC10b29sYmFyLXNwYWNlcj48L2ZkLXRvb2xiYXItc3BhY2VyPlxuXG4gICAgICAgIDxmZHAtc2VhcmNoLWZpZWxkXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVTZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMTUuNXJlbVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhclNlYXJjaFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiX3NlYXJjaElucHV0VGV4dFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiISEodGFibGVMb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwic2VhcmNoU3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJzZWFyY2hGaWVsZEFyaWFMYWJlbCB8fCBudWxsXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxsZWRCeV09XCJzZWFyY2hGaWVsZEFyaWFMYWJlbCA/IG51bGwgOiB0YWJsZVRvb2xiYXJUaXRsZUlkXCJcbiAgICAgICAgICAgIChzZWFyY2hTdWJtaXQpPVwic3VibWl0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGNhbmNlbFNlYXJjaCk9XCJzdWJtaXRTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGlzYWJsZVN1Z2dlc3Rpb25zRm91bmRBbm5vdW5jZXJdPVwidHJ1ZVwiXG4gICAgICAgID48L2ZkcC1zZWFyY2gtZmllbGQ+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRNb2RlICE9PSAnbm9uZSdcIj5cbiAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uQ3JlYXRlQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfYWRkUm93KClcIlxuICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJfc2hvd1NhdmVCdXR0b25cIj5cbiAgICAgICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvblNhdmVCdXR0b25MYWJlbCcgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiX3Nob3dTYXZlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9zYXZlUm93cygpXCJcbiAgICAgICAgICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxmZC10b29sYmFyLXNlcGFyYXRvcj48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxuICAgICAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uQ2FuY2VsQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2NhbmNlbEVkaXRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGZkLXRvb2xiYXItc2VwYXJhdG9yXG4gICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQgfHxcbiAgICAgICAgICAgICAgICAgICAgKHNvcnRhYmxlIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgICAgIChmaWx0ZXJhYmxlIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgICAgIChncm91cGFibGUgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNvbHVtbnMgfCBhc3luYylcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvZmQtdG9vbGJhci1zZXBhcmF0b3I+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxzcGFuIGZkLXRvb2xiYXItaXRlbSAqbmdJZj1cInRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnRcIiBjbGFzcz1cImZkcC10YWJsZS10b29sYmFyLWFjdGlvbnNcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50LmNvbnRlbnRUZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBzaG93RXhwYW5kQ29sbGFwc2VCdXR0b25zIHx8XG4gICAgICAgICAgICAgICAgKHNvcnRhYmxlIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgKGZpbHRlcmFibGUgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgICAoZ3JvdXBhYmxlIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgKGNvbHVtbnMgfCBhc3luYylcbiAgICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxmZC10b29sYmFyLXNlcGFyYXRvclxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnRcIlxuICAgICAgICAgICAgPjwvZmQtdG9vbGJhci1zZXBhcmF0b3I+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93RXhwYW5kQ29sbGFwc2VCdXR0b25zXCI+XG4gICAgICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJleHBhbmQtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9leHBhbmRBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uRXhwYW5kQWxsQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25FeHBhbmRBbGxCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIGdseXBoPVwiY29sbGFwc2UtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9jb2xsYXBzZUFsbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Db2xsYXBzZUFsbEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uQ29sbGFwc2VBbGxCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNvcnRhYmxlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwic29ydFwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Tb3J0QnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvblNvcnRCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgYnV0dG9uVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuU29ydGluZygpXCJcbiAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlcmFibGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uRmlsdGVyQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkZpbHRlckJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJtb2RhbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWx0ZXJpbmcoKVwiXG4gICAgICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJncm91cGFibGUgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJncm91cC0yXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkdyb3VwQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkdyb3VwQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cIm1vZGFsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbkdyb3VwaW5nKClcIlxuICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sdW1ucyB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBnbHlwaD1cImFjdGlvbi1zZXR0aW5nc1wiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Db2x1bW5zQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkNvbHVtbnNCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgYnV0dG9uVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQ29sdW1ucygpXCJcbiAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZmQtdG9vbGJhcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtdG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL3NyYy9saWIvdGFibGUvY29tcG9uZW50cy90YWJsZS10b29sYmFyL3RhYmxlLXRvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtdG9vbGJhci90YWJsZS10b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJM0MsT0FBTyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBeUIsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7QUFJMUYsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7QUFFbEM7Ozs7Ozs7OztLQVNLO0FBU0wsTUFBTSxPQUFPLHFCQUFxQjtJQTZEOUIsY0FBYztJQUNkLFlBQ3FCLEdBQXNCLEVBQ3RCLE1BQWEsRUFDYixhQUEyQjtRQUYzQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2Isa0JBQWEsR0FBYixh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QWdDO2dCQUs5QyxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IFNlYXJjaElucHV0LCBTdWdnZXN0aW9uSXRlbSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2VhcmNoLWZpZWxkJztcbmltcG9ydCB7IFRhYmxlLCBUYWJsZVNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L3BsYXRmb3JtL3RhYmxlLWhlbHBlcnMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVEFCTEVfVE9PTEJBUiwgVGFibGVUb29sYmFySW50ZXJmYWNlIH0gZnJvbSAnLi90YWJsZS10b29sYmFyJztcbmltcG9ydCB7IFRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXRvb2xiYXItYWN0aW9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVUb29sYmFyTGVmdEFjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL3RhYmxlLXRvb2xiYXItbGVmdC1hY3Rpb25zLmNvbXBvbmVudCc7XG5cbmV4cG9ydCB0eXBlIEVkaXRNb2RlID0gJ25vbmUnIHwgJ2lubGluZSc7XG5cbmxldCB0YWJsZVRvb2xiYXJUaXRsZVVuaXF1ZUlkID0gMDtcblxuLyoqXG4gKiBUaGUgY29tcG9uZW50IHRoYXQgcmVwcmVzZW50cyBhIHRhYmxlIHRvb2xiYXIuXG4gKlxuICogYGBgaHRtbFxuICogPGZkcC10YWJsZS10b29sYmFyXG4gKiAgIHRpdGxlPVwiT3JkZXIgTGluZSBJdGVtc1wiXG4gKiAgIFtoaWRlSXRlbUNvdW50XT1cImZhbHNlXCI+XG4gKiA8L2ZkcC10YWJsZS10b29sYmFyPlxuICogYGBgXG4gKiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkcC10YWJsZS10b29sYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRBQkxFX1RPT0xCQVIsIHVzZUV4aXN0aW5nOiBUYWJsZVRvb2xiYXJDb21wb25lbnQgfV1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgVGFibGVUb29sYmFySW50ZXJmYWNlLCBPbkRlc3Ryb3kge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIHRvb2xiYXIgc2hvdWxkIGhpZGUgZWxlbWVudHMgaW4gcG9wb3ZlciB3aGVuIHRoZXkgb3ZlcmZsb3cuXG4gICAgICogKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3VsZE92ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAvKiogVGFibGUgdGl0bGUuICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBzZWFyY2ggZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hGaWVsZEFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBUb2dnbGUgdG8gc2hvdyB0YWJsZSBpdGVtIGNvdW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGlkZUl0ZW1Db3VudCA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZSB0byBzaG93IHNlYXJjaCBpbnB1dC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGhpZGVTZWFyY2hJbnB1dCA9IGZhbHNlO1xuXG4gICAgLyoqIFRvZ2dsZSB0byBleHBhbmQgYW5kIGNvbGxhcHNlIGFsbCBmZWF0dXJlICovXG4gICAgQElucHV0KClcbiAgICBzaG93RXhwYW5kQ29sbGFwc2VCdXR0b25zID0gZmFsc2U7XG4gICAgLyoqIFN1Z2dlc3Rpb25zIGZvciBzZWFyY2ggZmllbGQuICovXG4gICAgQElucHV0KClcbiAgICBzZWFyY2hTdWdnZXN0aW9uczogU3VnZ2VzdGlvbkl0ZW1bXSA9IFtdO1xuXG4gICAgLyoqIFRhYmxlIHJvd3MgZWRpdC9hZGQgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGVkaXRNb2RlOiBFZGl0TW9kZSA9ICdub25lJztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChUYWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50KVxuICAgIHRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQ6IFRhYmxlVG9vbGJhckFjdGlvbnNDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoVGFibGVUb29sYmFyTGVmdEFjdGlvbnNDb21wb25lbnQpXG4gICAgX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50OiBUYWJsZVRvb2xiYXJMZWZ0QWN0aW9uc0NvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZilcbiAgICBjb250ZW50VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRhYmxlVG9vbGJhclRpdGxlSWQ6IHN0cmluZyA9ICdmZC10YWJsZS10b29sYmFyLXRpdGxlLScgKyB0YWJsZVRvb2xiYXJUaXRsZVVuaXF1ZUlkKys7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zaG93U2F2ZUJ1dHRvbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VhcmNoSW5wdXRUZXh0ID0gJyc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IHRhYmxlTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLl90YWJsZVNlcnZpY2UudGFibGVMb2FkaW5nJDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3RhYmxlOiBUYWJsZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdGFibGVTZXJ2aWNlOiBUYWJsZVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuVG9UYWJsZUV2ZW50cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzdWJtaXRTZWFyY2goc2VhcmNoOiBTZWFyY2hJbnB1dCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5zZWFyY2goc2VhcmNoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9wZW5Tb3J0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVTb3J0U2V0dGluZ3MuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3BlbkZpbHRlcmluZygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUub3BlblRhYmxlRmlsdGVyU2V0dGluZ3MuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3Blbkdyb3VwaW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVHcm91cFNldHRpbmdzLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG9wZW5Db2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5vcGVuVGFibGVDb2x1bW5TZXR0aW5ncy5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfYWRkUm93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5hZGRSb3coKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zYXZlUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUuc2F2ZVJvd3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYW5jZWxFZGl0aW5nKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5jYW5jZWxFZGl0aW5nKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1RhYmxlRXZlbnRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90YWJsZS5lbXB0eVJvd0FkZGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl90YWJsZS5zYXZlLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUuY2FuY2VsLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2hvd1NhdmVCdXR0b24gPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fdGFibGUucHJlc2V0Q2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc2VhcmNoSW5wdXRUZXh0ID0gc3RhdGUuc2VhcmNoSW5wdXQ/LnRleHQgPz8gJyc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2V4cGFuZEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFibGUuZXhwYW5kQWxsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29sbGFwc2VBbGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RhYmxlLmNvbGxhcHNlQWxsKCk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlXG4gICAgbGV0LWNvdW50ZXI9XCJjb3VudGVyXCJcbiAgICBsZXQtc29ydGFibGU9XCJzb3J0YWJsZVwiXG4gICAgbGV0LWZpbHRlcmFibGU9XCJmaWx0ZXJhYmxlXCJcbiAgICBsZXQtZ3JvdXBhYmxlPVwiZ3JvdXBhYmxlXCJcbiAgICBsZXQtY29sdW1ucz1cImNvbHVtbnNcIlxuPlxuICAgIDxmZC10b29sYmFyXG4gICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgW2NsZWFyQm9yZGVyXT1cInRydWVcIlxuICAgICAgICBbdGl0bGVJZF09XCJ0YWJsZVRvb2xiYXJUaXRsZUlkXCJcbiAgICAgICAgW3RpdGxlXT1cInRpdGxlICYmICFoaWRlSXRlbUNvdW50ID8gdGl0bGUgKyAnICgnICsgKGNvdW50ZXIgfCBhc3luYykgKyAnKScgOiB0aXRsZVwiXG4gICAgICAgIFtzaG91bGRPdmVyZmxvd109XCJzaG91bGRPdmVyZmxvd1wiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50XCI+XG4gICAgICAgICAgICA8c3BhbiBmZC10b29sYmFyLWl0ZW0gZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3IgKm5nSWY9XCIhIXRpdGxlIHx8ICFoaWRlSXRlbUNvdW50XCI+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiX3RhYmxlVG9vbGJhckxlZnRBY3Rpb25zQ29tcG9uZW50Ll9jb250ZW50VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxmZC10b29sYmFyLXNwYWNlcj48L2ZkLXRvb2xiYXItc3BhY2VyPlxuXG4gICAgICAgIDxmZHAtc2VhcmNoLWZpZWxkXG4gICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVTZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMTUuNXJlbVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhclNlYXJjaFBsYWNlaG9sZGVyJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtpbnB1dFRleHRdPVwiX3NlYXJjaElucHV0VGV4dFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiISEodGFibGVMb2FkaW5nJCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBbc3VnZ2VzdGlvbnNdPVwic2VhcmNoU3VnZ2VzdGlvbnNcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF09XCJzZWFyY2hGaWVsZEFyaWFMYWJlbFwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsbGVkQnldPVwic2VhcmNoRmllbGRBcmlhTGFiZWwgPyBudWxsIDogdGFibGVUb29sYmFyVGl0bGVJZFwiXG4gICAgICAgICAgICAoc2VhcmNoU3VibWl0KT1cInN1Ym1pdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjYW5jZWxTZWFyY2gpPVwic3VibWl0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgW2Rpc2FibGVTdWdnZXN0aW9uc0ZvdW5kQW5ub3VuY2VyXT1cInRydWVcIlxuICAgICAgICA+PC9mZHAtc2VhcmNoLWZpZWxkPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0TW9kZSAhPT0gJ25vbmUnXCI+XG4gICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkNyZWF0ZUJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2FkZFJvdygpXCJcbiAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiX3Nob3dTYXZlQnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25TYXZlQnV0dG9uTGFiZWwnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIl9zaG93U2F2ZUJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfc2F2ZVJvd3MoKVwiXG4gICAgICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3I+PC9mZC10b29sYmFyLXNlcGFyYXRvcj5cbiAgICAgICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkNhbmNlbEJ1dHRvbkxhYmVsJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9jYW5jZWxFZGl0aW5nKClcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxmZC10b29sYmFyLXNlcGFyYXRvclxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICB0YWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50IHx8XG4gICAgICAgICAgICAgICAgICAgIChzb3J0YWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZmlsdGVyYWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZ3JvdXBhYmxlIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgICAgIChjb2x1bW5zIHwgYXN5bmMpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8c3BhbiBmZC10b29sYmFyLWl0ZW0gKm5nSWY9XCJ0YWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50XCIgY2xhc3M9XCJmZHAtdGFibGUtdG9vbGJhci1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVUb29sYmFyQWN0aW9uc0NvbXBvbmVudC5jb250ZW50VGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgc2hvd0V4cGFuZENvbGxhcHNlQnV0dG9ucyB8fFxuICAgICAgICAgICAgICAgIChzb3J0YWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgIChmaWx0ZXJhYmxlIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICAgKGdyb3VwYWJsZSB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgIChjb2x1bW5zIHwgYXN5bmMpXG4gICAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZmQtdG9vbGJhci1zZXBhcmF0b3JcbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWJsZVRvb2xiYXJBY3Rpb25zQ29tcG9uZW50XCJcbiAgICAgICAgICAgID48L2ZkLXRvb2xiYXItc2VwYXJhdG9yPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0V4cGFuZENvbGxhcHNlQnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIGdseXBoPVwiZXhwYW5kLWFsbFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfZXhwYW5kQWxsKClcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkV4cGFuZEFsbEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbF09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uRXhwYW5kQWxsQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG5cbiAgICAgICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICAgICBnbHlwaD1cImNvbGxhcHNlLWFsbFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfY29sbGFwc2VBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uQ29sbGFwc2VBbGxCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthcmlhTGFiZWxdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkNvbGxhcHNlQWxsQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0YWJsZSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICBnbHlwaD1cInNvcnRcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uU29ydEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Tb3J0QnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cIm1vZGFsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNvcnRpbmcoKVwiXG4gICAgICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICAgICAgPGZkcC1idXR0b25cbiAgICAgICAgICAgICAgICBmZC10b29sYmFyLWl0ZW1cbiAgICAgICAgICAgICAgICBmZE92ZXJmbG93UHJpb3JpdHk9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJhYmxlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ3BsYXRmb3JtVGFibGUudG9vbGJhckFjdGlvbkZpbHRlckJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25GaWx0ZXJCdXR0b25UaXRsZScgfCBmZFRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgYnV0dG9uVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwibW9kYWxcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyaW5nKClcIlxuICAgICAgICAgICAgPjwvZmRwLWJ1dHRvbj5cbiAgICAgICAgICAgIDxmZHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgZmQtdG9vbGJhci1pdGVtXG4gICAgICAgICAgICAgICAgZmRPdmVyZmxvd1ByaW9yaXR5PVwibmV2ZXJcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ3JvdXBhYmxlIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIGdseXBoPVwiZ3JvdXAtMlwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Hcm91cEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Hcm91cEJ1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBidXR0b25UeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJtb2RhbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Hcm91cGluZygpXCJcbiAgICAgICAgICAgID48L2ZkcC1idXR0b24+XG4gICAgICAgICAgICA8ZmRwLWJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLXRvb2xiYXItaXRlbVxuICAgICAgICAgICAgICAgIGZkT3ZlcmZsb3dQcmlvcml0eT1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbnMgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJhY3Rpb24tc2V0dGluZ3NcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCIncGxhdGZvcm1UYWJsZS50b29sYmFyQWN0aW9uQ29sdW1uc0J1dHRvblRpdGxlJyB8IGZkVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cIidwbGF0Zm9ybVRhYmxlLnRvb2xiYXJBY3Rpb25Db2x1bW5zQnV0dG9uVGl0bGUnIHwgZmRUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGJ1dHRvblR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cIm1vZGFsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkNvbHVtbnMoKVwiXG4gICAgICAgICAgICA+PC9mZHAtYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2ZkLXRvb2xiYXI+XG48L25nLXRlbXBsYXRlPlxuIl19