@impartner/design-components 2.2.1 → 3.0.1

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 (104) hide show
  1. package/README.md +1 -0
  2. package/esm2022/lib/alert/alert.component.mjs +4 -4
  3. package/esm2022/lib/alert/alert.module.mjs +4 -4
  4. package/esm2022/lib/avatar/avatar.component.mjs +3 -3
  5. package/esm2022/lib/avatar/avatar.module.mjs +4 -4
  6. package/esm2022/lib/avatar-group/avatar-group.component.mjs +3 -3
  7. package/esm2022/lib/avatar-group/avatar-group.module.mjs +4 -4
  8. package/esm2022/lib/backdrop/backdrop.component.mjs +3 -3
  9. package/esm2022/lib/backdrop/backdrop.module.mjs +4 -4
  10. package/esm2022/lib/badge/badge.component.mjs +4 -4
  11. package/esm2022/lib/badge/badge.module.mjs +4 -4
  12. package/esm2022/lib/branding/branded.directive.mjs +3 -3
  13. package/esm2022/lib/branding/branding.module.mjs +4 -4
  14. package/esm2022/lib/breadcrumb/breadcrumb-item.component.mjs +3 -3
  15. package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +3 -3
  16. package/esm2022/lib/breadcrumb/breadcrumb.module.mjs +4 -4
  17. package/esm2022/lib/button/button.component.mjs +3 -3
  18. package/esm2022/lib/button/button.module.mjs +4 -4
  19. package/esm2022/lib/button-group/button-group.component.mjs +3 -3
  20. package/esm2022/lib/button-group/button-group.module.mjs +4 -4
  21. package/esm2022/lib/card-heading/card-heading.component.mjs +3 -3
  22. package/esm2022/lib/card-heading/card-heading.module.mjs +4 -4
  23. package/esm2022/lib/data-card/data-card.component.mjs +3 -3
  24. package/esm2022/lib/data-card/data-card.module.mjs +4 -4
  25. package/esm2022/lib/datetime-picker/components/datepicker-nav/datepicker-nav.component.mjs +4 -4
  26. package/esm2022/lib/datetime-picker/components/datepicker-template-host/datepicker-template-host.component.mjs +8 -5
  27. package/esm2022/lib/datetime-picker/components/datetime-picker/datetime-picker.component.mjs +7 -8
  28. package/esm2022/lib/datetime-picker/components/datetime-picker-input/datetime-picker-input.component.mjs +4 -4
  29. package/esm2022/lib/datetime-picker/components/datetime-picker-input-footer/datetime-picker-input-footer.component.mjs +3 -3
  30. package/esm2022/lib/datetime-picker/datetime-picker.module.mjs +4 -4
  31. package/esm2022/lib/datetime-picker/services/datetime-formatter/datetime-formatter.service.mjs +7 -7
  32. package/esm2022/lib/design-components.module.mjs +4 -4
  33. package/esm2022/lib/dropdown/components/dropdown-item/dropdown-item.component.mjs +3 -3
  34. package/esm2022/lib/dropdown/dropdown.component.mjs +4 -4
  35. package/esm2022/lib/dropdown/dropdown.module.mjs +4 -4
  36. package/esm2022/lib/file-upload/directives/file-drop.directive.mjs +4 -4
  37. package/esm2022/lib/file-upload/file-upload.component.mjs +4 -4
  38. package/esm2022/lib/file-upload/file-upload.module.mjs +4 -4
  39. package/esm2022/lib/file-upload/pipes/human-readable-byte-size.pipe.mjs +4 -4
  40. package/esm2022/lib/form-field/component/directives/corner-hint.directive.mjs +3 -3
  41. package/esm2022/lib/form-field/component/directives/error.directive.mjs +3 -3
  42. package/esm2022/lib/form-field/component/directives/form-root.directive.mjs +6 -6
  43. package/esm2022/lib/form-field/component/directives/hint.directive.mjs +3 -3
  44. package/esm2022/lib/form-field/component/directives/label.directive.mjs +3 -3
  45. package/esm2022/lib/form-field/component/directives/prefix.directive.mjs +3 -3
  46. package/esm2022/lib/form-field/component/directives/suffix.directive.mjs +3 -3
  47. package/esm2022/lib/form-field/component/form-field.component.mjs +4 -4
  48. package/esm2022/lib/form-field/component/form-field.module.mjs +4 -4
  49. package/esm2022/lib/form-field/controls/checkbox/checkbox.component.mjs +4 -4
  50. package/esm2022/lib/form-field/controls/checkbox/checkbox.module.mjs +4 -4
  51. package/esm2022/lib/form-field/controls/input/input.directive.mjs +4 -4
  52. package/esm2022/lib/form-field/controls/radio/radio-button/radio-button.component.mjs +4 -4
  53. package/esm2022/lib/form-field/controls/radio/radio-group/radio-group.directive.mjs +4 -4
  54. package/esm2022/lib/form-field/controls/radio/radio.module.mjs +4 -4
  55. package/esm2022/lib/form-field/controls/select/option/select-option.component.mjs +3 -3
  56. package/esm2022/lib/form-field/controls/select/option-display/select-option-display.component.mjs +4 -4
  57. package/esm2022/lib/form-field/controls/select/option-group/select-option-group.component.mjs +3 -3
  58. package/esm2022/lib/form-field/controls/select/select-model.mjs +1 -1
  59. package/esm2022/lib/form-field/controls/select/select.component.mjs +7 -7
  60. package/esm2022/lib/form-field/controls/select/select.module.mjs +4 -4
  61. package/esm2022/lib/form-field/controls/select/value-tags-display/select-value-tags-display.component.mjs +4 -4
  62. package/esm2022/lib/form-field/controls/shared/toggle/components/toggle-input/toggle-input.component.mjs +3 -3
  63. package/esm2022/lib/form-field/controls/shared/toggle/toggle.component.mjs +4 -4
  64. package/esm2022/lib/form-field/controls/shared/toggle/toggle.module.mjs +4 -4
  65. package/esm2022/lib/form-field/controls/tag-select/tag-select.component.mjs +4 -4
  66. package/esm2022/lib/form-field/impdc-forms.module.mjs +4 -4
  67. package/esm2022/lib/form-field/services/error-state-matcher.service.mjs +6 -6
  68. package/esm2022/lib/form-field/services/unique-selection-dispatcher.service.mjs +4 -4
  69. package/esm2022/lib/form-field/shared/error-state.mixin.mjs +1 -1
  70. package/esm2022/lib/form-field/shared/form-field-control.mjs +3 -3
  71. package/esm2022/lib/icon/icon.component.mjs +4 -4
  72. package/esm2022/lib/icon/icon.module.mjs +4 -4
  73. package/esm2022/lib/modal/modal.component.mjs +4 -4
  74. package/esm2022/lib/modal/modal.module.mjs +4 -4
  75. package/esm2022/lib/pagination/pagination.component.mjs +4 -4
  76. package/esm2022/lib/pagination/pagination.module.mjs +4 -4
  77. package/esm2022/lib/progress-bar/progress-bar.component.mjs +3 -3
  78. package/esm2022/lib/progress-bar/progress-bar.module.mjs +4 -4
  79. package/esm2022/lib/scrollable/scrollable.component.mjs +4 -4
  80. package/esm2022/lib/scrollable/scrollable.module.mjs +4 -4
  81. package/esm2022/lib/select-icon/select-icon.component.mjs +4 -4
  82. package/esm2022/lib/select-icon/select-icon.module.mjs +4 -4
  83. package/esm2022/lib/size-detection/directive/size-detector.directive.mjs +4 -4
  84. package/esm2022/lib/size-detection/size-detection.module.mjs +4 -4
  85. package/esm2022/lib/spinner/spinner.component.mjs +3 -3
  86. package/esm2022/lib/spinner/spinner.module.mjs +4 -4
  87. package/esm2022/lib/table/components/bulk-actions/bulk-actions.component.mjs +3 -3
  88. package/esm2022/lib/table/components/column-heading/column-heading.component.mjs +3 -3
  89. package/esm2022/lib/table/components/row-actions/row-actions.component.mjs +4 -4
  90. package/esm2022/lib/table/containers/table.component.mjs +5 -5
  91. package/esm2022/lib/table/directives/collapse-monitor.directive.mjs +4 -4
  92. package/esm2022/lib/table/directives/table-inject-component.directive.mjs +4 -4
  93. package/esm2022/lib/table/directives/table.directive.mjs +3 -3
  94. package/esm2022/lib/table/helpers/table-theme.helper.mjs +1 -1
  95. package/esm2022/lib/table/table.module.mjs +4 -4
  96. package/esm2022/lib/tag/tag.component.mjs +4 -4
  97. package/esm2022/lib/text-highlight/text-highlight.component.mjs +4 -4
  98. package/esm2022/lib/text-highlight/text-highlight.module.mjs +4 -4
  99. package/esm2022/services/interaction.service.mjs +4 -4
  100. package/fesm2022/impartner-design-components.mjs +337 -335
  101. package/fesm2022/impartner-design-components.mjs.map +1 -1
  102. package/lib/datetime-picker/components/datepicker-template-host/datepicker-template-host.component.d.ts +1 -0
  103. package/lib/datetime-picker/components/datetime-picker/datetime-picker.component.d.ts +0 -2
  104. package/package.json +7 -7
@@ -412,12 +412,12 @@ export class TableComponent {
412
412
  return '';
413
413
  }
414
414
  }
415
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: TableComponent, deps: [{ token: i1.DatePipe }, { token: i1.PercentPipe }, { token: i1.DecimalPipe }, { token: i0.ChangeDetectorRef }, { token: i2.BrandedDirective, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
416
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.0.1", type: TableComponent, selector: "impdc-table", inputs: { loading: "loading", columnDefs: "columnDefs", striped: "striped", hover: "hover", layout: "layout", canSelectRows: "canSelectRows", canSelectAllRows: "canSelectAllRows", selectPlaceholder: "selectPlaceholder", sortColumnIndex: "sortColumnIndex", sortDirection: "sortDirection", tableData: "tableData", selectedRowIds: "selectedRowIds", customCellComponents: "customCellComponents", collapsibleTemplate: "collapsibleTemplate", collapsibleTrigger: "collapsibleTrigger" }, outputs: { rowSelect: "rowSelect", sortBy: "sortBy", linkClick: "linkClick", rowActionClick: "rowActionClick", inputChange: "inputChange", rowCollapseChange: "rowCollapseChange" }, queries: [{ propertyName: "paginationComponent", first: true, predicate: PaginationComponent, descendants: true }, { propertyName: "bulkActions", first: true, predicate: TableBulkActionsComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (tableData) {\n<table\n impdcTable\n [striped]=\"striped && !collapsibleTemplate\"\n [layout]=\"layout\"\n [hover]=\"hover\">\n <thead>\n @if (!!bulkActions) {\n <tr>\n <th [attr.colspan]=\"tableSpan\" scope=\"col\" class=\"bulk-action-column\">\n <ng-content select=\"impdc-table-bulk-actions\"></ng-content>\n <ng-content select=\"[impdcTableBulkActions]\"></ng-content>\n </th>\n </tr>\n }\n <tr>\n @if (collapsibleTemplate) {\n <th\n scope=\"col\"\n [class.heading-below-bulk-actions]=\"!!bulkActions\"\n class=\"impdc-table-collapsible-content-row-button-container\"></th>\n } @if (canSelectRows) {\n <th\n scope=\"col\"\n class=\"impdc-table-selectable-row-toggle-container\"\n [ngClass]=\"{\n 'heading-below-bulk-actions': !!bulkActions\n }\">\n @if (canSelectAllRows) {\n <div>\n <impdc-checkbox\n ngModel\n [checked]=\"allSelected\"\n [indeterminate]=\"someSelected\"\n (change)=\"handleSelectAll($event)\"></impdc-checkbox>\n </div>\n }\n </th>\n } @for (columnDef of columnDefs; track columnDef; let columnIndex =\n $index) {\n <th\n scope=\"col\"\n [ngClass]=\"{\n 'sorted-column': isSortedColumn(columnIndex),\n 'sortable-column': columnDef.sorted,\n 'heading-below-bulk-actions': !!bulkActions\n }\"\n (click)=\"handleSort(columnIndex)\">\n <impdc-column-heading\n [isSortable]=\"columnDef.sorted || false\"\n [columnIndex]=\"columnIndex\"\n [sortColumnIndex]=\"sortColumnIndex\"\n [direction]=\"sortDirection\"\n [text]=\"columnDef.title\"\n (sort)=\"handleSort($event)\">\n </impdc-column-heading>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @if (loading) {\n <tr>\n <td [attr.colspan]=\"tableSpan\" class=\"data-loading\">\n <impdc-spinner></impdc-spinner>\n </td>\n </tr>\n } @else { @for (row of tableData; track row.id; let rowIndex = $index; let\n rowFirst = $first; let rowLast = $last; let rowEven = $even; let rowOdd =\n $odd) { @if (getCollapsibleTemplateForRow(row); as\n collapsibleTemplateForRow) {\n <tr\n [class.impdc-table-collapsible-row-trigger]=\"collapsibleTrigger === 'row'\"\n [class.table-active]=\"isRowSelected(row.id)\"\n (click)=\"\n tryToggleCollapse(collapsibleTemplateForRow, ngbCollapse, $event, 'row')\n \">\n @if (collapsibleTemplate) {\n <td\n class=\"impdc-table-collapsible-content-row-button-container\"\n [class.opened]=\"!collapseMonitor.ngbCollapsing()\">\n @if (collapsibleTemplateForRow.template) {\n <div>\n <button\n type=\"button\"\n (click)=\"\n tryToggleCollapse(\n collapsibleTemplateForRow,\n ngbCollapse,\n $event,\n 'button'\n )\n \"\n class=\"impdc-table-collapsible-content-row-button btn btn-link\">\n <span\n class=\"far fa-chevron-right\"\n [class.fa-rotate-90]=\"!collapseMonitor.ngbCollapsing()\"></span>\n </button>\n </div>\n }\n </td>\n } @if (canSelectRows) {\n <td class=\"impdc-table-selectable-row-toggle-container\">\n <div class=\"select-column\">\n <impdc-checkbox\n [ngModel]=\"isRowSelected(row.id)\"\n (change)=\"handleRowSelect($event, row.id)\"\n (click)=\"$event.stopPropagation()\"></impdc-checkbox>\n </div>\n </td>\n }\n <td\n *ngFor=\"let columnDef of columnDefs; index as colIndex; last as isLast\"\n [ngClass]=\"{\n 'col-no-padding': !!columnDef.noPadding,\n 'actions-column': columnDef.columnType === cellType.Actions\n }\">\n <div>\n @switch (columnDef.columnType) { @case (cellType.Badge) {\n <span>\n <impdc-badge\n [text]=\"getStringValue(colIndex, row)\"\n [theme]=\"getTheme(columnDef, row)\">\n </impdc-badge>\n </span>\n } @case (cellType.Link) {\n <span (click)=\"handleLinkClick(colIndex, row, $event)\">\n @if (!branded) {\n <a class=\"link-primary\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a impdcBranded>\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n } @case (cellType.Url) {\n <span>\n @if (!branded) {\n <a\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a\n impdcBranded\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n } @case (cellType.Email) {\n <span>\n @if (!branded) {\n <a\n target=\"_blank\"\n [attr.href]=\"'mailto:' + getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a\n impdcBranded\n [attr.href]=\"getMailToValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n } @case (cellType.Input) {\n <span>\n <input\n impdcInput\n type=\"text\"\n class=\"{{ getCellColor(columnDef, row) }}\"\n [ngModel]=\"getValue(colIndex, row)\"\n (ngModelChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event)\n \"\n (click)=\"$event.stopPropagation()\" />\n </span>\n } @case (cellType.Boolean) {\n <span>\n @if (columnDef.disabled && getValue(colIndex, row) === 'true') {\n <span\n impdc-icon\n name=\"check\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n } @else if (!columnDef.disabled) {\n <impdc-checkbox\n [checked]=\"getValue(colIndex, row) === 'true'\"\n [isSwitch]=\"true\"\n (change)=\"\n handleCellValueChange(colIndex, rowIndex, $event.checked)\n \"\n (click)=\"$event.stopPropagation()\"></impdc-checkbox>\n }\n </span>\n } @case (cellType.SingleSelect) {\n <span>\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n allowClear=\"true\"\n (selectionChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event.value)\n \"\n (click)=\"$event.stopPropagation()\">\n @for (value of (columnDef.values || []); track value) {\n <impdc-select-option\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n }\n </impdc-select>\n </span>\n } @case (cellType.MultiSelect) {\n <span>\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n multiple=\"true\"\n (selectionChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event.value)\n \"\n (click)=\"$event.stopPropagation()\">\n @for (value of (columnDef.values || []); track value) {\n <impdc-select-option\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n }\n </impdc-select>\n </span>\n } @case (cellType.CellRender) {\n <span class=\"{{ getCellColor(columnDef, row) }}\">\n <ng-template\n impdcTableInjectComponent\n [columnDef]=\"columnDef\"\n [rowItem]=\"row\"\n [customCellComponents]=\"customCellComponents || {}\"\n [value]=\"getRawValue(colIndex, row)\"></ng-template>\n </span>\n } @case (cellType.Icon) {\n <span>\n <span\n impdc-icon\n [name]=\"columnDef.iconName\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n </span>\n } @case (cellType.Actions) {\n <span>\n <!-- will always return 'true', but needed to satisfy the type engine -->\n @if (columnDefIsActions(columnDef)) {\n <impdc-row-actions\n [columnDef]=\"columnDef\"\n [rowItem]=\"row\"\n [lastColumn]=\"isLast\"\n (actionClick)=\"handleActionClick(colIndex, row, $event)\"\n (click)=\"$event.stopPropagation()\"></impdc-row-actions>\n }\n </span>\n } @default {\n <span class=\"{{ getCellColor(columnDef, row) }}\">\n {{ getValue(colIndex, row) }}\n </span>\n } }\n </div>\n </td>\n </tr>\n <tr\n class=\"impdc-table-collapsible-content-row\"\n [class.opened]=\"!collapseMonitor.ngbCollapsing()\">\n <td class=\"w-100 p-0\" [attr.colspan]=\"tableSpan\">\n <div\n class=\"impdc-table-collapsible-content-container\"\n #ngbCollapse=\"ngbCollapse\"\n #collapseMonitor=\"impdcCollapseMonitor\"\n [impdcCollapseMonitor]=\"true\"\n (collapseChange)=\"rowCollapseChange.emit({ row, collapsed: $event })\">\n @if (collapsibleTemplateForRow.template) {\n <div>\n <ng-container\n *ngTemplateOutlet=\"\n collapsibleTemplateForRow.template;\n context: {\n $implicit: row,\n collapsed: collapseMonitor.collapsed(),\n selected: isRowSelected(row.id),\n index: rowIndex,\n first: !!rowFirst,\n last: !!rowLast,\n even: !!rowEven,\n odd: !!rowOdd\n }\n \"></ng-container>\n </div>\n }\n </div>\n </td>\n </tr>\n } } @empty {\n <tr>\n <td [attr.colspan]=\"tableSpan\" class=\"no-data\">\n <ng-content select=\"[noData]\"></ng-content>\n </td>\n </tr>\n } }\n </tbody>\n <tfoot>\n @if (paginationComponent) {\n <tr>\n <td [attr.colspan]=\"tableSpan\">\n <ng-content\n select=\"impdc-pagination, div[impdc-pagination]\"></ng-content>\n </td>\n </tr>\n }\n </tfoot>\n</table>\n}\n", styles: [".bulk-action-container{display:flex;flex-direction:row;border:1px solid var(--impd-color-gray-200);border-top-left-radius:.6rem;border-top-right-radius:.6rem;border-bottom:0px}.bulk-action-container .bulk-action-checkbox{padding:1.6rem 2rem}.bulk-action-container .bulk-actions{display:flex;flex-direction:row;gap:.4rem}.col-no-padding{padding:0!important}.data-loading{height:var(--impd-size-80);vertical-align:middle;text-align:center}.no-data{vertical-align:middle;text-align:center}.select-row{display:flex;height:var(--impd-size-4);align-items:center;justify-items:end;border-radius:var(--impd-border-radius-default)}.heading-with-checkbox{padding-left:5px;padding-right:10px}.actions-column{width:.1%;white-space:nowrap}tr.impdc-table-collapsible-content-row:has(>td>div.impdc-table-collapsible-content-container.collapse:not(.show)){display:none}tr:has(td.impdc-table-collapsible-content-row-button-container),tr.impdc-table-collapsible-content-row{transition:background-color .35s ease-in-out}tr:has(td.impdc-table-collapsible-content-row-button-container.opened),tr.impdc-table-collapsible-content-row.opened{background-color:var(--impd-color-gray-50)}tr.impdc-table-collapsible-row-trigger{cursor:pointer}table ::ng-deep tbody>tr>td.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>td.impdc-table-selectable-row-toggle-container,table ::ng-deep thead>tr>th.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>th.impdc-table-selectable-row-toggle-container{padding-left:var(--impd-size-5);padding-right:var(--impd-size-1);width:var(--impd-size-10)}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container{padding-left:var(--impd-size-5);padding-right:0;width:var(--impd-size-10)}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container:empty{padding:0}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container{padding-left:var(--impd-size-3);width:var(--impd-size-8)}.impdc-table-collapsible-content-row-button{align-items:center;border-radius:var(--impd-border-radius-2xl);color:var(--impd-color-gray-700)!important;display:flex;height:var(--impd-size-5);justify-content:center;padding:0;width:var(--impd-size-5);box-shadow:none}.impdc-table-collapsible-content-row-button:hover,.impdc-table-collapsible-content-row-button:focus,.impdc-table-collapsible-content-row-button:active{background-color:var(--impd-color-gray-100)}.impdc-table-collapsible-content-row-button impdc-icon{line-height:1}.impdc-table-collapsible-content-row-button>span.fa-chevron-right{font-size:1.6rem;transition:transform .35s}table.table-striped>tbody>tr:nth-of-type(4n+3)>*{--impartner-hex-table-bg-type: var(--impd-color-gray-50)}\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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.BrandedDirective, selector: "[impdcBranded]" }, { kind: "component", type: i4.IconComponent, selector: "impdc-icon, [impdc-icon]", inputs: ["name", "theme", "size"] }, { kind: "component", type: i5.CheckboxComponent, selector: "impdc-checkbox", inputs: ["tabIndex", "id", "label", "description", "isSwitch", "switchIcons", "inline", "layout", "checked", "indeterminate", "disabled", "errorStateMatcher", "required"], outputs: ["change", "indeterminateChange"], exportAs: ["impdcCheckControl"] }, { kind: "component", type: i6.SelectOptionComponent, selector: "impdc-select-option", inputs: ["value", "label", "disabled"] }, { kind: "component", type: i7.SelectComponent, selector: "impdc-select", inputs: ["disabled", "tabIndex", "search", "placeholder", "required", "compareWith", "dropdownContainer", "errorStateMatcher", "allowClear", "multiple", "multipleDisplay"], outputs: ["selectionChange", "valueChange", "searchTextChanges"], exportAs: ["impdcSelect"] }, { kind: "directive", type: i8.InputDirective, selector: "input[impdcInput], textarea[impdcInput], select[impdcNativeSelect]", inputs: ["disabled", "id", "type", "required", "readonly", "errorStateMatcher", "value"], exportAs: ["impdcInput"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.SpinnerComponent, selector: "impdc-spinner, div[impdc-spinner]", inputs: ["accessibilityText"] }, { kind: "component", type: i11.BadgeComponent, selector: "impdc-badge, [impdc-badge]", inputs: ["text", "icon", "theme", "size", "hideBg", "rounded", "dismissable"], outputs: ["dismiss"] }, { kind: "directive", type: i12.CollapseMonitorDirective, selector: "[impdcCollapseMonitor]", outputs: ["collapseChange"], exportAs: ["impdcCollapseMonitor"] }, { kind: "directive", type: i13.TableDirective, selector: "table[impdcTable]", inputs: ["striped", "hover", "layout"] }, { kind: "component", type: i14.ColumnHeadingComponent, selector: "impdc-column-heading", inputs: ["isSortable", "columnIndex", "sortColumnIndex", "direction", "text"], outputs: ["sort"] }, { kind: "directive", type: i15.TableInjectComponentDirective, selector: "[impdcTableInjectComponent]", inputs: ["columnDef", "value", "rowItem", "customCellComponents"] }, { kind: "component", type: i16.RowActionsComponent, selector: "impdc-row-actions", inputs: ["columnDef", "rowItem", "lastColumn"], outputs: ["actionClick"] }] }); }
415
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: TableComponent, deps: [{ token: i1.DatePipe }, { token: i1.PercentPipe }, { token: i1.DecimalPipe }, { token: i0.ChangeDetectorRef }, { token: i2.BrandedDirective, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
416
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: TableComponent, selector: "impdc-table", inputs: { loading: "loading", columnDefs: "columnDefs", striped: "striped", hover: "hover", layout: "layout", canSelectRows: "canSelectRows", canSelectAllRows: "canSelectAllRows", selectPlaceholder: "selectPlaceholder", sortColumnIndex: "sortColumnIndex", sortDirection: "sortDirection", tableData: "tableData", selectedRowIds: "selectedRowIds", customCellComponents: "customCellComponents", collapsibleTemplate: "collapsibleTemplate", collapsibleTrigger: "collapsibleTrigger" }, outputs: { rowSelect: "rowSelect", sortBy: "sortBy", linkClick: "linkClick", rowActionClick: "rowActionClick", inputChange: "inputChange", rowCollapseChange: "rowCollapseChange" }, queries: [{ propertyName: "paginationComponent", first: true, predicate: PaginationComponent, descendants: true }, { propertyName: "bulkActions", first: true, predicate: TableBulkActionsComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (tableData) {\n <table\n impdcTable\n [striped]=\"striped && !collapsibleTemplate\"\n [layout]=\"layout\"\n [hover]=\"hover\">\n <thead>\n @if (!!bulkActions) {\n <tr>\n <th [attr.colspan]=\"tableSpan\" scope=\"col\" class=\"bulk-action-column\">\n <ng-content select=\"impdc-table-bulk-actions\"></ng-content>\n <ng-content select=\"[impdcTableBulkActions]\"></ng-content>\n </th>\n </tr>\n }\n <tr>\n @if (collapsibleTemplate) {\n <th\n scope=\"col\"\n [class.heading-below-bulk-actions]=\"!!bulkActions\"\n class=\"impdc-table-collapsible-content-row-button-container\"></th>\n }\n @if (canSelectRows) {\n <th\n scope=\"col\"\n class=\"impdc-table-selectable-row-toggle-container\"\n [ngClass]=\"{\n 'heading-below-bulk-actions': !!bulkActions\n }\">\n @if (canSelectAllRows) {\n <div>\n <impdc-checkbox\n ngModel\n [checked]=\"allSelected\"\n [indeterminate]=\"someSelected\"\n (change)=\"handleSelectAll($event)\"></impdc-checkbox>\n </div>\n }\n </th>\n }\n @for (\n columnDef of columnDefs;\n track columnDef;\n let columnIndex = $index\n ) {\n <th\n scope=\"col\"\n [ngClass]=\"{\n 'sorted-column': isSortedColumn(columnIndex),\n 'sortable-column': columnDef.sorted,\n 'heading-below-bulk-actions': !!bulkActions\n }\"\n (click)=\"handleSort(columnIndex)\">\n <impdc-column-heading\n [isSortable]=\"columnDef.sorted || false\"\n [columnIndex]=\"columnIndex\"\n [sortColumnIndex]=\"sortColumnIndex\"\n [direction]=\"sortDirection\"\n [text]=\"columnDef.title\"\n (sort)=\"handleSort($event)\">\n </impdc-column-heading>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @if (loading) {\n <tr>\n <td [attr.colspan]=\"tableSpan\" class=\"data-loading\">\n <impdc-spinner></impdc-spinner>\n </td>\n </tr>\n } @else {\n @for (\n row of tableData;\n track row.id;\n let rowIndex = $index;\n let rowFirst = $first;\n let rowLast = $last;\n let rowEven = $even;\n let rowOdd = $odd\n ) {\n @if (\n getCollapsibleTemplateForRow(row);\n as collapsibleTemplateForRow\n ) {\n <tr\n [class.impdc-table-collapsible-row-trigger]=\"\n collapsibleTrigger === 'row'\n \"\n [class.table-active]=\"isRowSelected(row.id)\"\n (click)=\"\n tryToggleCollapse(\n collapsibleTemplateForRow,\n ngbCollapse,\n $event,\n 'row'\n )\n \">\n @if (collapsibleTemplate) {\n <td\n class=\"impdc-table-collapsible-content-row-button-container\"\n [class.opened]=\"!collapseMonitor.ngbCollapsing()\">\n @if (collapsibleTemplateForRow.template) {\n <div>\n <button\n type=\"button\"\n (click)=\"\n tryToggleCollapse(\n collapsibleTemplateForRow,\n ngbCollapse,\n $event,\n 'button'\n )\n \"\n class=\"impdc-table-collapsible-content-row-button btn btn-link\">\n <span\n class=\"far fa-chevron-right\"\n [class.fa-rotate-90]=\"\n !collapseMonitor.ngbCollapsing()\n \"></span>\n </button>\n </div>\n }\n </td>\n }\n @if (canSelectRows) {\n <td class=\"impdc-table-selectable-row-toggle-container\">\n <div class=\"select-column\">\n <impdc-checkbox\n [ngModel]=\"isRowSelected(row.id)\"\n (change)=\"handleRowSelect($event, row.id)\"\n (click)=\"$event.stopPropagation()\"></impdc-checkbox>\n </div>\n </td>\n }\n <td\n *ngFor=\"\n let columnDef of columnDefs;\n index as colIndex;\n last as isLast\n \"\n [ngClass]=\"{\n 'col-no-padding': !!columnDef.noPadding,\n 'actions-column': columnDef.columnType === cellType.Actions\n }\">\n <div>\n @switch (columnDef.columnType) {\n @case (cellType.Badge) {\n <span>\n <impdc-badge\n [text]=\"getStringValue(colIndex, row)\"\n [theme]=\"getTheme(columnDef, row)\">\n </impdc-badge>\n </span>\n }\n @case (cellType.Link) {\n <span (click)=\"handleLinkClick(colIndex, row, $event)\">\n @if (!branded) {\n <a class=\"link-primary\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a impdcBranded>\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n }\n @case (cellType.Url) {\n <span>\n @if (!branded) {\n <a\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a\n impdcBranded\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n }\n @case (cellType.Email) {\n <span>\n @if (!branded) {\n <a\n target=\"_blank\"\n [attr.href]=\"'mailto:' + getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a\n impdcBranded\n [attr.href]=\"getMailToValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n }\n @case (cellType.Input) {\n <span>\n <input\n impdcInput\n type=\"text\"\n class=\"{{ getCellColor(columnDef, row) }}\"\n [ngModel]=\"getValue(colIndex, row)\"\n (ngModelChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event)\n \"\n (click)=\"$event.stopPropagation()\" />\n </span>\n }\n @case (cellType.Boolean) {\n <span>\n @if (\n columnDef.disabled &&\n getValue(colIndex, row) === 'true'\n ) {\n <span\n impdc-icon\n name=\"check\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n } @else if (!columnDef.disabled) {\n <impdc-checkbox\n [checked]=\"getValue(colIndex, row) === 'true'\"\n [isSwitch]=\"true\"\n (change)=\"\n handleCellValueChange(\n colIndex,\n rowIndex,\n $event.checked\n )\n \"\n (click)=\"$event.stopPropagation()\"></impdc-checkbox>\n }\n </span>\n }\n @case (cellType.SingleSelect) {\n <span>\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n allowClear=\"true\"\n (selectionChange)=\"\n handleCellValueChange(\n colIndex,\n rowIndex,\n $event.value\n )\n \"\n (click)=\"$event.stopPropagation()\">\n @for (value of columnDef.values || []; track value) {\n <impdc-select-option\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n }\n </impdc-select>\n </span>\n }\n @case (cellType.MultiSelect) {\n <span>\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n multiple=\"true\"\n (selectionChange)=\"\n handleCellValueChange(\n colIndex,\n rowIndex,\n $event.value\n )\n \"\n (click)=\"$event.stopPropagation()\">\n @for (value of columnDef.values || []; track value) {\n <impdc-select-option\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n }\n </impdc-select>\n </span>\n }\n @case (cellType.CellRender) {\n <span class=\"{{ getCellColor(columnDef, row) }}\">\n <ng-template\n impdcTableInjectComponent\n [columnDef]=\"columnDef\"\n [rowItem]=\"row\"\n [customCellComponents]=\"customCellComponents || {}\"\n [value]=\"getRawValue(colIndex, row)\"></ng-template>\n </span>\n }\n @case (cellType.Icon) {\n <span>\n <span\n impdc-icon\n [name]=\"columnDef.iconName\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n </span>\n }\n @case (cellType.Actions) {\n <span>\n <!-- will always return 'true', but needed to satisfy the type engine -->\n @if (columnDefIsActions(columnDef)) {\n <impdc-row-actions\n [columnDef]=\"columnDef\"\n [rowItem]=\"row\"\n [lastColumn]=\"isLast\"\n (actionClick)=\"\n handleActionClick(colIndex, row, $event)\n \"\n (click)=\"\n $event.stopPropagation()\n \"></impdc-row-actions>\n }\n </span>\n }\n @default {\n <span class=\"{{ getCellColor(columnDef, row) }}\">\n {{ getValue(colIndex, row) }}\n </span>\n }\n }\n </div>\n </td>\n </tr>\n <tr\n class=\"impdc-table-collapsible-content-row\"\n [class.opened]=\"!collapseMonitor.ngbCollapsing()\">\n <td class=\"w-100 p-0\" [attr.colspan]=\"tableSpan\">\n <div\n class=\"impdc-table-collapsible-content-container\"\n #ngbCollapse=\"ngbCollapse\"\n #collapseMonitor=\"impdcCollapseMonitor\"\n [impdcCollapseMonitor]=\"true\"\n (collapseChange)=\"\n rowCollapseChange.emit({ row, collapsed: $event })\n \">\n @if (collapsibleTemplateForRow.template) {\n <div>\n <ng-container\n *ngTemplateOutlet=\"\n collapsibleTemplateForRow.template;\n context: {\n $implicit: row,\n collapsed: collapseMonitor.collapsed(),\n selected: isRowSelected(row.id),\n index: rowIndex,\n first: !!rowFirst,\n last: !!rowLast,\n even: !!rowEven,\n odd: !!rowOdd\n }\n \"></ng-container>\n </div>\n }\n </div>\n </td>\n </tr>\n }\n } @empty {\n <tr>\n <td [attr.colspan]=\"tableSpan\" class=\"no-data\">\n <ng-content select=\"[noData]\"></ng-content>\n </td>\n </tr>\n }\n }\n </tbody>\n <tfoot>\n @if (paginationComponent) {\n <tr>\n <td [attr.colspan]=\"tableSpan\">\n <ng-content\n select=\"impdc-pagination, div[impdc-pagination]\"></ng-content>\n </td>\n </tr>\n }\n </tfoot>\n </table>\n}\n", styles: [".bulk-action-container{display:flex;flex-direction:row;border:1px solid var(--impd-color-gray-200);border-top-left-radius:.6rem;border-top-right-radius:.6rem;border-bottom:0px}.bulk-action-container .bulk-action-checkbox{padding:1.6rem 2rem}.bulk-action-container .bulk-actions{display:flex;flex-direction:row;gap:.4rem}.col-no-padding{padding:0!important}.data-loading{height:var(--impd-size-80);vertical-align:middle;text-align:center}.no-data{vertical-align:middle;text-align:center}.select-row{display:flex;height:var(--impd-size-4);align-items:center;justify-items:end;border-radius:var(--impd-border-radius-default)}.heading-with-checkbox{padding-left:5px;padding-right:10px}.actions-column{width:.1%;white-space:nowrap}tr.impdc-table-collapsible-content-row:has(>td>div.impdc-table-collapsible-content-container.collapse:not(.show)){display:none}tr:has(td.impdc-table-collapsible-content-row-button-container),tr.impdc-table-collapsible-content-row{transition:background-color .35s ease-in-out}tr:has(td.impdc-table-collapsible-content-row-button-container.opened),tr.impdc-table-collapsible-content-row.opened{background-color:var(--impd-color-gray-50)}tr.impdc-table-collapsible-row-trigger{cursor:pointer}table ::ng-deep tbody>tr>td.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>td.impdc-table-selectable-row-toggle-container,table ::ng-deep thead>tr>th.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>th.impdc-table-selectable-row-toggle-container{padding-left:var(--impd-size-5);padding-right:var(--impd-size-1);width:var(--impd-size-10)}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container{padding-left:var(--impd-size-5);padding-right:0;width:var(--impd-size-10)}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container:empty{padding:0}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container{padding-left:var(--impd-size-3);width:var(--impd-size-8)}.impdc-table-collapsible-content-row-button{align-items:center;border-radius:var(--impd-border-radius-2xl);color:var(--impd-color-gray-700)!important;display:flex;height:var(--impd-size-5);justify-content:center;padding:0;width:var(--impd-size-5);box-shadow:none}.impdc-table-collapsible-content-row-button:hover,.impdc-table-collapsible-content-row-button:focus,.impdc-table-collapsible-content-row-button:active{background-color:var(--impd-color-gray-100)}.impdc-table-collapsible-content-row-button impdc-icon{line-height:1}.impdc-table-collapsible-content-row-button>span.fa-chevron-right{font-size:1.6rem;transition:transform .35s}table.table-striped>tbody>tr:nth-of-type(4n+3)>*{--impartner-hex-table-bg-type: var(--impd-color-gray-50)}\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.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.BrandedDirective, selector: "[impdcBranded]" }, { kind: "component", type: i4.IconComponent, selector: "impdc-icon, [impdc-icon]", inputs: ["name", "theme", "size"] }, { kind: "component", type: i5.CheckboxComponent, selector: "impdc-checkbox", inputs: ["tabIndex", "id", "label", "description", "isSwitch", "switchIcons", "inline", "layout", "checked", "indeterminate", "disabled", "errorStateMatcher", "required"], outputs: ["change", "indeterminateChange"], exportAs: ["impdcCheckControl"] }, { kind: "component", type: i6.SelectOptionComponent, selector: "impdc-select-option", inputs: ["value", "label", "disabled"] }, { kind: "component", type: i7.SelectComponent, selector: "impdc-select", inputs: ["disabled", "tabIndex", "search", "placeholder", "required", "compareWith", "dropdownContainer", "errorStateMatcher", "allowClear", "multiple", "multipleDisplay"], outputs: ["selectionChange", "valueChange", "searchTextChanges"], exportAs: ["impdcSelect"] }, { kind: "directive", type: i8.InputDirective, selector: "input[impdcInput], textarea[impdcInput], select[impdcNativeSelect]", inputs: ["disabled", "id", "type", "required", "readonly", "errorStateMatcher", "value"], exportAs: ["impdcInput"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.SpinnerComponent, selector: "impdc-spinner, div[impdc-spinner]", inputs: ["accessibilityText"] }, { kind: "component", type: i11.BadgeComponent, selector: "impdc-badge, [impdc-badge]", inputs: ["text", "icon", "theme", "size", "hideBg", "rounded", "dismissable"], outputs: ["dismiss"] }, { kind: "directive", type: i12.CollapseMonitorDirective, selector: "[impdcCollapseMonitor]", outputs: ["collapseChange"], exportAs: ["impdcCollapseMonitor"] }, { kind: "directive", type: i13.TableDirective, selector: "table[impdcTable]", inputs: ["striped", "hover", "layout"] }, { kind: "component", type: i14.ColumnHeadingComponent, selector: "impdc-column-heading", inputs: ["isSortable", "columnIndex", "sortColumnIndex", "direction", "text"], outputs: ["sort"] }, { kind: "directive", type: i15.TableInjectComponentDirective, selector: "[impdcTableInjectComponent]", inputs: ["columnDef", "value", "rowItem", "customCellComponents"] }, { kind: "component", type: i16.RowActionsComponent, selector: "impdc-row-actions", inputs: ["columnDef", "rowItem", "lastColumn"], outputs: ["actionClick"] }] }); }
417
417
  }
418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: TableComponent, decorators: [{
418
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: TableComponent, decorators: [{
419
419
  type: Component,
420
- args: [{ selector: 'impdc-table', template: "@if (tableData) {\n<table\n impdcTable\n [striped]=\"striped && !collapsibleTemplate\"\n [layout]=\"layout\"\n [hover]=\"hover\">\n <thead>\n @if (!!bulkActions) {\n <tr>\n <th [attr.colspan]=\"tableSpan\" scope=\"col\" class=\"bulk-action-column\">\n <ng-content select=\"impdc-table-bulk-actions\"></ng-content>\n <ng-content select=\"[impdcTableBulkActions]\"></ng-content>\n </th>\n </tr>\n }\n <tr>\n @if (collapsibleTemplate) {\n <th\n scope=\"col\"\n [class.heading-below-bulk-actions]=\"!!bulkActions\"\n class=\"impdc-table-collapsible-content-row-button-container\"></th>\n } @if (canSelectRows) {\n <th\n scope=\"col\"\n class=\"impdc-table-selectable-row-toggle-container\"\n [ngClass]=\"{\n 'heading-below-bulk-actions': !!bulkActions\n }\">\n @if (canSelectAllRows) {\n <div>\n <impdc-checkbox\n ngModel\n [checked]=\"allSelected\"\n [indeterminate]=\"someSelected\"\n (change)=\"handleSelectAll($event)\"></impdc-checkbox>\n </div>\n }\n </th>\n } @for (columnDef of columnDefs; track columnDef; let columnIndex =\n $index) {\n <th\n scope=\"col\"\n [ngClass]=\"{\n 'sorted-column': isSortedColumn(columnIndex),\n 'sortable-column': columnDef.sorted,\n 'heading-below-bulk-actions': !!bulkActions\n }\"\n (click)=\"handleSort(columnIndex)\">\n <impdc-column-heading\n [isSortable]=\"columnDef.sorted || false\"\n [columnIndex]=\"columnIndex\"\n [sortColumnIndex]=\"sortColumnIndex\"\n [direction]=\"sortDirection\"\n [text]=\"columnDef.title\"\n (sort)=\"handleSort($event)\">\n </impdc-column-heading>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @if (loading) {\n <tr>\n <td [attr.colspan]=\"tableSpan\" class=\"data-loading\">\n <impdc-spinner></impdc-spinner>\n </td>\n </tr>\n } @else { @for (row of tableData; track row.id; let rowIndex = $index; let\n rowFirst = $first; let rowLast = $last; let rowEven = $even; let rowOdd =\n $odd) { @if (getCollapsibleTemplateForRow(row); as\n collapsibleTemplateForRow) {\n <tr\n [class.impdc-table-collapsible-row-trigger]=\"collapsibleTrigger === 'row'\"\n [class.table-active]=\"isRowSelected(row.id)\"\n (click)=\"\n tryToggleCollapse(collapsibleTemplateForRow, ngbCollapse, $event, 'row')\n \">\n @if (collapsibleTemplate) {\n <td\n class=\"impdc-table-collapsible-content-row-button-container\"\n [class.opened]=\"!collapseMonitor.ngbCollapsing()\">\n @if (collapsibleTemplateForRow.template) {\n <div>\n <button\n type=\"button\"\n (click)=\"\n tryToggleCollapse(\n collapsibleTemplateForRow,\n ngbCollapse,\n $event,\n 'button'\n )\n \"\n class=\"impdc-table-collapsible-content-row-button btn btn-link\">\n <span\n class=\"far fa-chevron-right\"\n [class.fa-rotate-90]=\"!collapseMonitor.ngbCollapsing()\"></span>\n </button>\n </div>\n }\n </td>\n } @if (canSelectRows) {\n <td class=\"impdc-table-selectable-row-toggle-container\">\n <div class=\"select-column\">\n <impdc-checkbox\n [ngModel]=\"isRowSelected(row.id)\"\n (change)=\"handleRowSelect($event, row.id)\"\n (click)=\"$event.stopPropagation()\"></impdc-checkbox>\n </div>\n </td>\n }\n <td\n *ngFor=\"let columnDef of columnDefs; index as colIndex; last as isLast\"\n [ngClass]=\"{\n 'col-no-padding': !!columnDef.noPadding,\n 'actions-column': columnDef.columnType === cellType.Actions\n }\">\n <div>\n @switch (columnDef.columnType) { @case (cellType.Badge) {\n <span>\n <impdc-badge\n [text]=\"getStringValue(colIndex, row)\"\n [theme]=\"getTheme(columnDef, row)\">\n </impdc-badge>\n </span>\n } @case (cellType.Link) {\n <span (click)=\"handleLinkClick(colIndex, row, $event)\">\n @if (!branded) {\n <a class=\"link-primary\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a impdcBranded>\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n } @case (cellType.Url) {\n <span>\n @if (!branded) {\n <a\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a\n impdcBranded\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n } @case (cellType.Email) {\n <span>\n @if (!branded) {\n <a\n target=\"_blank\"\n [attr.href]=\"'mailto:' + getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a\n impdcBranded\n [attr.href]=\"getMailToValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n } @case (cellType.Input) {\n <span>\n <input\n impdcInput\n type=\"text\"\n class=\"{{ getCellColor(columnDef, row) }}\"\n [ngModel]=\"getValue(colIndex, row)\"\n (ngModelChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event)\n \"\n (click)=\"$event.stopPropagation()\" />\n </span>\n } @case (cellType.Boolean) {\n <span>\n @if (columnDef.disabled && getValue(colIndex, row) === 'true') {\n <span\n impdc-icon\n name=\"check\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n } @else if (!columnDef.disabled) {\n <impdc-checkbox\n [checked]=\"getValue(colIndex, row) === 'true'\"\n [isSwitch]=\"true\"\n (change)=\"\n handleCellValueChange(colIndex, rowIndex, $event.checked)\n \"\n (click)=\"$event.stopPropagation()\"></impdc-checkbox>\n }\n </span>\n } @case (cellType.SingleSelect) {\n <span>\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n allowClear=\"true\"\n (selectionChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event.value)\n \"\n (click)=\"$event.stopPropagation()\">\n @for (value of (columnDef.values || []); track value) {\n <impdc-select-option\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n }\n </impdc-select>\n </span>\n } @case (cellType.MultiSelect) {\n <span>\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n multiple=\"true\"\n (selectionChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event.value)\n \"\n (click)=\"$event.stopPropagation()\">\n @for (value of (columnDef.values || []); track value) {\n <impdc-select-option\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n }\n </impdc-select>\n </span>\n } @case (cellType.CellRender) {\n <span class=\"{{ getCellColor(columnDef, row) }}\">\n <ng-template\n impdcTableInjectComponent\n [columnDef]=\"columnDef\"\n [rowItem]=\"row\"\n [customCellComponents]=\"customCellComponents || {}\"\n [value]=\"getRawValue(colIndex, row)\"></ng-template>\n </span>\n } @case (cellType.Icon) {\n <span>\n <span\n impdc-icon\n [name]=\"columnDef.iconName\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n </span>\n } @case (cellType.Actions) {\n <span>\n <!-- will always return 'true', but needed to satisfy the type engine -->\n @if (columnDefIsActions(columnDef)) {\n <impdc-row-actions\n [columnDef]=\"columnDef\"\n [rowItem]=\"row\"\n [lastColumn]=\"isLast\"\n (actionClick)=\"handleActionClick(colIndex, row, $event)\"\n (click)=\"$event.stopPropagation()\"></impdc-row-actions>\n }\n </span>\n } @default {\n <span class=\"{{ getCellColor(columnDef, row) }}\">\n {{ getValue(colIndex, row) }}\n </span>\n } }\n </div>\n </td>\n </tr>\n <tr\n class=\"impdc-table-collapsible-content-row\"\n [class.opened]=\"!collapseMonitor.ngbCollapsing()\">\n <td class=\"w-100 p-0\" [attr.colspan]=\"tableSpan\">\n <div\n class=\"impdc-table-collapsible-content-container\"\n #ngbCollapse=\"ngbCollapse\"\n #collapseMonitor=\"impdcCollapseMonitor\"\n [impdcCollapseMonitor]=\"true\"\n (collapseChange)=\"rowCollapseChange.emit({ row, collapsed: $event })\">\n @if (collapsibleTemplateForRow.template) {\n <div>\n <ng-container\n *ngTemplateOutlet=\"\n collapsibleTemplateForRow.template;\n context: {\n $implicit: row,\n collapsed: collapseMonitor.collapsed(),\n selected: isRowSelected(row.id),\n index: rowIndex,\n first: !!rowFirst,\n last: !!rowLast,\n even: !!rowEven,\n odd: !!rowOdd\n }\n \"></ng-container>\n </div>\n }\n </div>\n </td>\n </tr>\n } } @empty {\n <tr>\n <td [attr.colspan]=\"tableSpan\" class=\"no-data\">\n <ng-content select=\"[noData]\"></ng-content>\n </td>\n </tr>\n } }\n </tbody>\n <tfoot>\n @if (paginationComponent) {\n <tr>\n <td [attr.colspan]=\"tableSpan\">\n <ng-content\n select=\"impdc-pagination, div[impdc-pagination]\"></ng-content>\n </td>\n </tr>\n }\n </tfoot>\n</table>\n}\n", styles: [".bulk-action-container{display:flex;flex-direction:row;border:1px solid var(--impd-color-gray-200);border-top-left-radius:.6rem;border-top-right-radius:.6rem;border-bottom:0px}.bulk-action-container .bulk-action-checkbox{padding:1.6rem 2rem}.bulk-action-container .bulk-actions{display:flex;flex-direction:row;gap:.4rem}.col-no-padding{padding:0!important}.data-loading{height:var(--impd-size-80);vertical-align:middle;text-align:center}.no-data{vertical-align:middle;text-align:center}.select-row{display:flex;height:var(--impd-size-4);align-items:center;justify-items:end;border-radius:var(--impd-border-radius-default)}.heading-with-checkbox{padding-left:5px;padding-right:10px}.actions-column{width:.1%;white-space:nowrap}tr.impdc-table-collapsible-content-row:has(>td>div.impdc-table-collapsible-content-container.collapse:not(.show)){display:none}tr:has(td.impdc-table-collapsible-content-row-button-container),tr.impdc-table-collapsible-content-row{transition:background-color .35s ease-in-out}tr:has(td.impdc-table-collapsible-content-row-button-container.opened),tr.impdc-table-collapsible-content-row.opened{background-color:var(--impd-color-gray-50)}tr.impdc-table-collapsible-row-trigger{cursor:pointer}table ::ng-deep tbody>tr>td.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>td.impdc-table-selectable-row-toggle-container,table ::ng-deep thead>tr>th.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>th.impdc-table-selectable-row-toggle-container{padding-left:var(--impd-size-5);padding-right:var(--impd-size-1);width:var(--impd-size-10)}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container{padding-left:var(--impd-size-5);padding-right:0;width:var(--impd-size-10)}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container:empty{padding:0}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container{padding-left:var(--impd-size-3);width:var(--impd-size-8)}.impdc-table-collapsible-content-row-button{align-items:center;border-radius:var(--impd-border-radius-2xl);color:var(--impd-color-gray-700)!important;display:flex;height:var(--impd-size-5);justify-content:center;padding:0;width:var(--impd-size-5);box-shadow:none}.impdc-table-collapsible-content-row-button:hover,.impdc-table-collapsible-content-row-button:focus,.impdc-table-collapsible-content-row-button:active{background-color:var(--impd-color-gray-100)}.impdc-table-collapsible-content-row-button impdc-icon{line-height:1}.impdc-table-collapsible-content-row-button>span.fa-chevron-right{font-size:1.6rem;transition:transform .35s}table.table-striped>tbody>tr:nth-of-type(4n+3)>*{--impartner-hex-table-bg-type: var(--impd-color-gray-50)}\n"] }]
420
+ args: [{ selector: 'impdc-table', template: "@if (tableData) {\n <table\n impdcTable\n [striped]=\"striped && !collapsibleTemplate\"\n [layout]=\"layout\"\n [hover]=\"hover\">\n <thead>\n @if (!!bulkActions) {\n <tr>\n <th [attr.colspan]=\"tableSpan\" scope=\"col\" class=\"bulk-action-column\">\n <ng-content select=\"impdc-table-bulk-actions\"></ng-content>\n <ng-content select=\"[impdcTableBulkActions]\"></ng-content>\n </th>\n </tr>\n }\n <tr>\n @if (collapsibleTemplate) {\n <th\n scope=\"col\"\n [class.heading-below-bulk-actions]=\"!!bulkActions\"\n class=\"impdc-table-collapsible-content-row-button-container\"></th>\n }\n @if (canSelectRows) {\n <th\n scope=\"col\"\n class=\"impdc-table-selectable-row-toggle-container\"\n [ngClass]=\"{\n 'heading-below-bulk-actions': !!bulkActions\n }\">\n @if (canSelectAllRows) {\n <div>\n <impdc-checkbox\n ngModel\n [checked]=\"allSelected\"\n [indeterminate]=\"someSelected\"\n (change)=\"handleSelectAll($event)\"></impdc-checkbox>\n </div>\n }\n </th>\n }\n @for (\n columnDef of columnDefs;\n track columnDef;\n let columnIndex = $index\n ) {\n <th\n scope=\"col\"\n [ngClass]=\"{\n 'sorted-column': isSortedColumn(columnIndex),\n 'sortable-column': columnDef.sorted,\n 'heading-below-bulk-actions': !!bulkActions\n }\"\n (click)=\"handleSort(columnIndex)\">\n <impdc-column-heading\n [isSortable]=\"columnDef.sorted || false\"\n [columnIndex]=\"columnIndex\"\n [sortColumnIndex]=\"sortColumnIndex\"\n [direction]=\"sortDirection\"\n [text]=\"columnDef.title\"\n (sort)=\"handleSort($event)\">\n </impdc-column-heading>\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @if (loading) {\n <tr>\n <td [attr.colspan]=\"tableSpan\" class=\"data-loading\">\n <impdc-spinner></impdc-spinner>\n </td>\n </tr>\n } @else {\n @for (\n row of tableData;\n track row.id;\n let rowIndex = $index;\n let rowFirst = $first;\n let rowLast = $last;\n let rowEven = $even;\n let rowOdd = $odd\n ) {\n @if (\n getCollapsibleTemplateForRow(row);\n as collapsibleTemplateForRow\n ) {\n <tr\n [class.impdc-table-collapsible-row-trigger]=\"\n collapsibleTrigger === 'row'\n \"\n [class.table-active]=\"isRowSelected(row.id)\"\n (click)=\"\n tryToggleCollapse(\n collapsibleTemplateForRow,\n ngbCollapse,\n $event,\n 'row'\n )\n \">\n @if (collapsibleTemplate) {\n <td\n class=\"impdc-table-collapsible-content-row-button-container\"\n [class.opened]=\"!collapseMonitor.ngbCollapsing()\">\n @if (collapsibleTemplateForRow.template) {\n <div>\n <button\n type=\"button\"\n (click)=\"\n tryToggleCollapse(\n collapsibleTemplateForRow,\n ngbCollapse,\n $event,\n 'button'\n )\n \"\n class=\"impdc-table-collapsible-content-row-button btn btn-link\">\n <span\n class=\"far fa-chevron-right\"\n [class.fa-rotate-90]=\"\n !collapseMonitor.ngbCollapsing()\n \"></span>\n </button>\n </div>\n }\n </td>\n }\n @if (canSelectRows) {\n <td class=\"impdc-table-selectable-row-toggle-container\">\n <div class=\"select-column\">\n <impdc-checkbox\n [ngModel]=\"isRowSelected(row.id)\"\n (change)=\"handleRowSelect($event, row.id)\"\n (click)=\"$event.stopPropagation()\"></impdc-checkbox>\n </div>\n </td>\n }\n <td\n *ngFor=\"\n let columnDef of columnDefs;\n index as colIndex;\n last as isLast\n \"\n [ngClass]=\"{\n 'col-no-padding': !!columnDef.noPadding,\n 'actions-column': columnDef.columnType === cellType.Actions\n }\">\n <div>\n @switch (columnDef.columnType) {\n @case (cellType.Badge) {\n <span>\n <impdc-badge\n [text]=\"getStringValue(colIndex, row)\"\n [theme]=\"getTheme(columnDef, row)\">\n </impdc-badge>\n </span>\n }\n @case (cellType.Link) {\n <span (click)=\"handleLinkClick(colIndex, row, $event)\">\n @if (!branded) {\n <a class=\"link-primary\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a impdcBranded>\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n }\n @case (cellType.Url) {\n <span>\n @if (!branded) {\n <a\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a\n impdcBranded\n target=\"_blank\"\n [attr.href]=\"getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n }\n @case (cellType.Email) {\n <span>\n @if (!branded) {\n <a\n target=\"_blank\"\n [attr.href]=\"'mailto:' + getValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n } @else {\n <a\n impdcBranded\n [attr.href]=\"getMailToValue(colIndex, row)\"\n (click)=\"$event.stopPropagation()\">\n {{ getValue(colIndex, row) }}\n </a>\n }\n </span>\n }\n @case (cellType.Input) {\n <span>\n <input\n impdcInput\n type=\"text\"\n class=\"{{ getCellColor(columnDef, row) }}\"\n [ngModel]=\"getValue(colIndex, row)\"\n (ngModelChange)=\"\n handleCellValueChange(colIndex, rowIndex, $event)\n \"\n (click)=\"$event.stopPropagation()\" />\n </span>\n }\n @case (cellType.Boolean) {\n <span>\n @if (\n columnDef.disabled &&\n getValue(colIndex, row) === 'true'\n ) {\n <span\n impdc-icon\n name=\"check\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n } @else if (!columnDef.disabled) {\n <impdc-checkbox\n [checked]=\"getValue(colIndex, row) === 'true'\"\n [isSwitch]=\"true\"\n (change)=\"\n handleCellValueChange(\n colIndex,\n rowIndex,\n $event.checked\n )\n \"\n (click)=\"$event.stopPropagation()\"></impdc-checkbox>\n }\n </span>\n }\n @case (cellType.SingleSelect) {\n <span>\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n allowClear=\"true\"\n (selectionChange)=\"\n handleCellValueChange(\n colIndex,\n rowIndex,\n $event.value\n )\n \"\n (click)=\"$event.stopPropagation()\">\n @for (value of columnDef.values || []; track value) {\n <impdc-select-option\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n }\n </impdc-select>\n </span>\n }\n @case (cellType.MultiSelect) {\n <span>\n <impdc-select\n [ngModel]=\"getValue(colIndex, row)\"\n [disabled]=\"columnDef.disabled || false\"\n [placeholder]=\"selectPlaceholder\"\n multiple=\"true\"\n (selectionChange)=\"\n handleCellValueChange(\n colIndex,\n rowIndex,\n $event.value\n )\n \"\n (click)=\"$event.stopPropagation()\">\n @for (value of columnDef.values || []; track value) {\n <impdc-select-option\n [value]=\"value.value\"\n [label]=\"value.label\"></impdc-select-option>\n }\n </impdc-select>\n </span>\n }\n @case (cellType.CellRender) {\n <span class=\"{{ getCellColor(columnDef, row) }}\">\n <ng-template\n impdcTableInjectComponent\n [columnDef]=\"columnDef\"\n [rowItem]=\"row\"\n [customCellComponents]=\"customCellComponents || {}\"\n [value]=\"getRawValue(colIndex, row)\"></ng-template>\n </span>\n }\n @case (cellType.Icon) {\n <span>\n <span\n impdc-icon\n [name]=\"columnDef.iconName\"\n class=\"{{ getCellColor(columnDef, row) }}\"></span>\n </span>\n }\n @case (cellType.Actions) {\n <span>\n <!-- will always return 'true', but needed to satisfy the type engine -->\n @if (columnDefIsActions(columnDef)) {\n <impdc-row-actions\n [columnDef]=\"columnDef\"\n [rowItem]=\"row\"\n [lastColumn]=\"isLast\"\n (actionClick)=\"\n handleActionClick(colIndex, row, $event)\n \"\n (click)=\"\n $event.stopPropagation()\n \"></impdc-row-actions>\n }\n </span>\n }\n @default {\n <span class=\"{{ getCellColor(columnDef, row) }}\">\n {{ getValue(colIndex, row) }}\n </span>\n }\n }\n </div>\n </td>\n </tr>\n <tr\n class=\"impdc-table-collapsible-content-row\"\n [class.opened]=\"!collapseMonitor.ngbCollapsing()\">\n <td class=\"w-100 p-0\" [attr.colspan]=\"tableSpan\">\n <div\n class=\"impdc-table-collapsible-content-container\"\n #ngbCollapse=\"ngbCollapse\"\n #collapseMonitor=\"impdcCollapseMonitor\"\n [impdcCollapseMonitor]=\"true\"\n (collapseChange)=\"\n rowCollapseChange.emit({ row, collapsed: $event })\n \">\n @if (collapsibleTemplateForRow.template) {\n <div>\n <ng-container\n *ngTemplateOutlet=\"\n collapsibleTemplateForRow.template;\n context: {\n $implicit: row,\n collapsed: collapseMonitor.collapsed(),\n selected: isRowSelected(row.id),\n index: rowIndex,\n first: !!rowFirst,\n last: !!rowLast,\n even: !!rowEven,\n odd: !!rowOdd\n }\n \"></ng-container>\n </div>\n }\n </div>\n </td>\n </tr>\n }\n } @empty {\n <tr>\n <td [attr.colspan]=\"tableSpan\" class=\"no-data\">\n <ng-content select=\"[noData]\"></ng-content>\n </td>\n </tr>\n }\n }\n </tbody>\n <tfoot>\n @if (paginationComponent) {\n <tr>\n <td [attr.colspan]=\"tableSpan\">\n <ng-content\n select=\"impdc-pagination, div[impdc-pagination]\"></ng-content>\n </td>\n </tr>\n }\n </tfoot>\n </table>\n}\n", styles: [".bulk-action-container{display:flex;flex-direction:row;border:1px solid var(--impd-color-gray-200);border-top-left-radius:.6rem;border-top-right-radius:.6rem;border-bottom:0px}.bulk-action-container .bulk-action-checkbox{padding:1.6rem 2rem}.bulk-action-container .bulk-actions{display:flex;flex-direction:row;gap:.4rem}.col-no-padding{padding:0!important}.data-loading{height:var(--impd-size-80);vertical-align:middle;text-align:center}.no-data{vertical-align:middle;text-align:center}.select-row{display:flex;height:var(--impd-size-4);align-items:center;justify-items:end;border-radius:var(--impd-border-radius-default)}.heading-with-checkbox{padding-left:5px;padding-right:10px}.actions-column{width:.1%;white-space:nowrap}tr.impdc-table-collapsible-content-row:has(>td>div.impdc-table-collapsible-content-container.collapse:not(.show)){display:none}tr:has(td.impdc-table-collapsible-content-row-button-container),tr.impdc-table-collapsible-content-row{transition:background-color .35s ease-in-out}tr:has(td.impdc-table-collapsible-content-row-button-container.opened),tr.impdc-table-collapsible-content-row.opened{background-color:var(--impd-color-gray-50)}tr.impdc-table-collapsible-row-trigger{cursor:pointer}table ::ng-deep tbody>tr>td.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>td.impdc-table-selectable-row-toggle-container,table ::ng-deep thead>tr>th.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>th.impdc-table-selectable-row-toggle-container{padding-left:var(--impd-size-5);padding-right:var(--impd-size-1);width:var(--impd-size-10)}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container{padding-left:var(--impd-size-5);padding-right:0;width:var(--impd-size-10)}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container:empty,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container:empty{padding:0}table ::ng-deep tbody>tr>td.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>td.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep thead>tr>th.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container,table ::ng-deep tr>th.impdc-table-collapsible-content-row-button-container+.impdc-table-selectable-row-toggle-container{padding-left:var(--impd-size-3);width:var(--impd-size-8)}.impdc-table-collapsible-content-row-button{align-items:center;border-radius:var(--impd-border-radius-2xl);color:var(--impd-color-gray-700)!important;display:flex;height:var(--impd-size-5);justify-content:center;padding:0;width:var(--impd-size-5);box-shadow:none}.impdc-table-collapsible-content-row-button:hover,.impdc-table-collapsible-content-row-button:focus,.impdc-table-collapsible-content-row-button:active{background-color:var(--impd-color-gray-100)}.impdc-table-collapsible-content-row-button impdc-icon{line-height:1}.impdc-table-collapsible-content-row-button>span.fa-chevron-right{font-size:1.6rem;transition:transform .35s}table.table-striped>tbody>tr:nth-of-type(4n+3)>*{--impartner-hex-table-bg-type: var(--impd-color-gray-50)}\n"] }]
421
421
  }], ctorParameters: () => [{ type: i1.DatePipe }, { type: i1.PercentPipe }, { type: i1.DecimalPipe }, { type: i0.ChangeDetectorRef }, { type: i2.BrandedDirective, decorators: [{
422
422
  type: Optional
423
423
  }, {
@@ -471,4 +471,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImpor
471
471
  type: ContentChild,
472
472
  args: [TableBulkActionsComponent]
473
473
  }] } });
474
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS9jb250YWluZXJzL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvdGFibGUvY29udGFpbmVycy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osSUFBSSxFQUNKLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUdQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLElBQUksY0FBYyxFQUFFLEdBQUcsSUFBSSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFjeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUcxRDs7O0dBR0c7QUFNSCxNQUFNLE9BQU8sY0FBYztJQThCekI7O09BRUc7SUFDSCxJQUFvQixhQUFhLENBQUMsS0FBYztRQUM5QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBVyxhQUFhO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFDVyxnQkFBZ0IsQ0FBQyxLQUFjO1FBQ3hDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3RELENBQUM7SUFzQkQ7O09BRUc7SUFDSCxJQUNXLGNBQWMsQ0FBQyxLQUEwQjtRQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBZ0ZELGNBQWM7SUFDZCxJQUFXLFlBQVk7UUFDckIsT0FBTyxDQUNMLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZTtZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUztZQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUlELGNBQWM7SUFDZCxJQUFXLFNBQVM7UUFDbEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFFbEMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksRUFBRSxDQUFDO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM1QixJQUFJLEVBQUUsQ0FBQztTQUNSO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBT0QsWUFDbUIsU0FBbUIsRUFDbkIsWUFBeUIsRUFDekIsWUFBeUIsRUFDekIsa0JBQXFDLEVBQzFCLFFBQTBCO1FBSnJDLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDekIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQXRNeEQ7O1dBRUc7UUFDYSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhDOzs7Ozs7V0FNRztRQUNhLGVBQVUsR0FBMEIsRUFBRSxDQUFDO1FBRXZEOztXQUVHO1FBQ2EsWUFBTyxHQUFHLElBQUksQ0FBQztRQUUvQjs7V0FFRztRQUNhLFVBQUssR0FBRyxJQUFJLENBQUM7UUFFN0I7O1dBRUc7UUFDYSxXQUFNLEdBQXFCLE1BQU0sQ0FBQztRQXdCbEQ7O1dBRUc7UUFDYSxzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFFdkM7O1dBRUc7UUFDYSxvQkFBZSxHQUFXLENBQUMsQ0FBQztRQUU1Qzs7V0FFRztRQUNhLGtCQUFhLEdBQW1CLEtBQUssQ0FBQztRQUV0RDs7V0FFRztRQUNhLGNBQVMsR0FBb0IsRUFBRSxDQUFDO1FBbUJoRDs7OztXQUlHO1FBQ2Esd0JBQW1CLEdBSWpDLElBQUksQ0FBQztRQUVQOzs7O1dBSUc7UUFFSSx1QkFBa0IsR0FBcUIsUUFBUSxDQUFDO1FBRXZEOztXQUVHO1FBQ3VCLGNBQVMsR0FDakMsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFFMUM7O1dBRUc7UUFDdUIsV0FBTSxHQUM5QixJQUFJLFlBQVksRUFBa0IsQ0FBQztRQUVyQzs7V0FFRztRQUN1QixjQUFTLEdBQ2pDLElBQUksWUFBWSxFQUEyQixDQUFDO1FBRTlDOztXQUVHO1FBRWEsbUJBQWMsR0FDNUIsSUFBSSxZQUFZLEVBQStCLENBQUM7UUFFbEQ7OztXQUdHO1FBRWEsZ0JBQVcsR0FDekIsSUFBSSxZQUFZLEVBQTJCLENBQUM7UUFFOUM7O1dBRUc7UUFFYSxzQkFBaUIsR0FFN0IsSUFBSSxZQUFZLEVBQWdDLENBQUM7UUFFckQsY0FBYztRQUVQLHdCQUFtQixHQUF5QixTQUFTLENBQUM7UUFFN0QsY0FBYztRQUVQLGdCQUFXLEdBQStCLFNBQVMsQ0FBQztRQUUzRCxjQUFjO1FBQ0UsYUFBUSxHQUFHLGVBQWUsQ0FBQztRQUMzQyxjQUFjO1FBQ1AsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFXMUIsY0FBYztRQUNFLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFpQmpDLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMxQixvQkFBZSxHQUF3QixFQUFFLENBQUM7UUFDakMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBc0IsQ0FBQztRQVNyRSxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLFlBQVk7YUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ2pDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNyRCxJQUNFLENBQUMsSUFBSSxDQUFDLFNBQVM7Z0JBQ2YsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLENBQUMsSUFBSSxDQUFDLGNBQWM7Z0JBQ3BCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQzNCO2dCQUNBLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2FBQzFCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7YUFDeEU7U0FDRjtJQUNILENBQUM7SUFFRCxjQUFjO0lBQ1AsY0FBYyxDQUNuQixXQUFtQixFQUNuQixVQUF5QjtRQUV6QixNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FDeEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXBELElBQUksVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDeEMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEI7UUFDRCxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFMUMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELGNBQWM7SUFDUCxjQUFjLENBQ25CLFdBQW1CLEVBQ25CLFVBQXlCO1FBRXpCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXJELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEI7UUFFRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRUQsY0FBYztJQUNQLFFBQVEsQ0FDYixXQUFtQixFQUNuQixVQUF5QjtRQUV6QixNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FDeEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXBELFFBQVEsVUFBVSxFQUFFO1lBQ2xCLEtBQUssZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QixLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDOUQsTUFBTTthQUNQO1lBQ0QsS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxLQUFLLEdBQUcsU0FBUztvQkFDZixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUU7b0JBQ3BELENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xCLE1BQU07YUFDUDtZQUNELEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDekMsTUFBTSxhQUFhLEdBQ2pCLFFBQVEsWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ3pELEtBQUssR0FBRyxhQUFhO29CQUNuQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLHNCQUFzQixDQUFDLElBQUksRUFBRTtvQkFDbEUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEIsTUFBTTthQUNQO1lBQ0QsS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkQsTUFBTTthQUNQO1lBQ0QsS0FBSyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQy9CLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM5RCxNQUFNO2FBQ1A7WUFDRCxLQUFLLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDM0MsS0FBSyxHQUFHLFdBQVcsS0FBSyxFQUFFLENBQUM7aUJBQzVCO2dCQUNELE1BQU07YUFDUDtZQUNELEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ3hCLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUMxQjtnQkFFRCxJQUFJLENBQUMsU0FBUyxFQUFFO29CQUNkLE9BQU8sS0FBSyxDQUFDO2lCQUNkO2dCQUVELE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxTQUFTLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FDNUQsTUFBTSxDQUFDLE1BQU0sR0FBRyxTQUFTO29CQUN2QixDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRztvQkFDdEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFFYixDQUFDLENBQUMsU0FBUztvQkFDVCxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDcEQsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDVixNQUFNO2FBQ1A7WUFDRCxLQUFLLGVBQWUsQ0FBQyxXQUFXO2dCQUM5QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDN0IsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNwRDtnQkFDRCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxjQUFjO0lBQ1AsV0FBVyxDQUNoQixXQUFtQixFQUNuQixVQUF5QjtRQUV6QixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXpELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxjQUFjO0lBQ1AsWUFBWSxDQUNqQixnQkFBZ0MsRUFDaEMsSUFBbUI7UUFFbkIsT0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGNBQWM7SUFDUCxRQUFRLENBQ2IsZ0JBQWdDLEVBQ2hDLElBQW1CO1FBRW5CLE9BQU8sQ0FDTCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDO1lBQ2pELGNBQWMsQ0FBQyxPQUFPLENBQ3ZCLENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYztJQUNQLGNBQWMsQ0FBQyxXQUFtQjtRQUN2QyxPQUFPLFdBQVcsS0FBSyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlDLENBQUM7SUFFRCxjQUFjO0lBQ1AsYUFBYSxDQUFDLEVBQW1CO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELGNBQWM7SUFDUCxlQUFlLENBQUMsS0FBMEI7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDN0MsT0FBTztTQUNSO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2pFO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztTQUMzQjtRQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUV2RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGNBQWM7SUFDUCxVQUFVLENBQUMsV0FBbUI7UUFDbkMsSUFBSSxXQUFXLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNwRTthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXLENBQUM7WUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7U0FDNUI7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUVqRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNmLFdBQVc7WUFDWCxLQUFLO1lBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ1AsZUFBZSxDQUNwQixLQUEwQixFQUMxQixLQUFzQjtRQUV0QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixPQUFPO1NBQ1I7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNsQzthQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2pFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hELElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNyQztTQUNGO1FBRUQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzdCO1FBRUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN2RSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGNBQWM7SUFDUCxxQkFBcUIsQ0FDMUIsV0FBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsS0FBMkM7UUFFM0MsTUFBTSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDckUsSUFBSSxZQUFZLEdBQXlDLEtBQUssQ0FBQztRQUUvRCxJQUFJLFVBQVUsS0FBSyxlQUFlLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuRSxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3RDtRQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdEMsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsV0FBVztZQUNYLElBQUk7WUFDSixLQUFLLEVBQUUsWUFBWTtTQUNwQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUVELGNBQWM7SUFDUCxlQUFlLENBQ3BCLFdBQW1CLEVBQ25CLElBQW1CLEVBQ25CLEtBQVk7UUFFWixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ2xCLElBQUk7WUFDSixXQUFXO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDUCxpQkFBaUIsQ0FDdEIsV0FBbUIsRUFDbkIsSUFBbUIsRUFDbkIsYUFBcUI7UUFFckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSTtZQUNKLFdBQVc7WUFDWCxhQUFhO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGtCQUFrQixDQUMxQixTQUE4QjtRQUU5QixPQUFPLFNBQVMsQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLE9BQU8sQ0FBQztJQUMxRCxDQUFDO0lBRVMsaUJBQWlCLENBQ3pCLHVCQUVDLEVBQ0QsV0FBd0IsRUFDeEIsS0FBWSxFQUNaLE1BQXdCO1FBRXhCLElBQ0UsdUJBQXVCLENBQUMsUUFBUTtZQUNoQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLGtCQUFrQixLQUFLLE1BQU0sQ0FBQyxFQUN6RTtZQUNBLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRVMsNEJBQTRCLENBQUMsR0FBa0I7UUFHdkQsT0FBTztZQUNMLFFBQVEsRUFDTixJQUFJLENBQUMsbUJBQW1CO2dCQUN4QixPQUFPLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxVQUFVO2dCQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUI7U0FDL0IsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxXQUFtQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVPLFNBQVMsQ0FDZixXQUFtQixFQUNuQixVQUF5QjtRQUV6QixJQUFJO1lBQ0YsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFdEUsTUFBTSxLQUFLLEdBQXNCLFdBQVc7Z0JBQzFDLENBQUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO2dCQUN6QixDQUFDLENBQUUsY0FBYyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUF1QixDQUFDO1lBRXpFLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUNwQjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7OEdBM2hCVSxjQUFjO2tHQUFkLGNBQWMseXZCQXNKWCxtQkFBbUIsOEVBSW5CLHlCQUF5QixxRUMxTXpDLDhxV0FzVUE7OzJGRHRSYSxjQUFjO2tCQUwxQixTQUFTOytCQUNFLGFBQWE7OzBCQTJNcEIsUUFBUTs7MEJBQUksSUFBSTt5Q0FuTUgsT0FBTztzQkFBdEIsS0FBSztnQkFTVSxVQUFVO3NCQUF6QixLQUFLO2dCQUtVLE9BQU87c0JBQXRCLEtBQUs7Z0JBS1UsS0FBSztzQkFBcEIsS0FBSztnQkFLVSxNQUFNO3NCQUFyQixLQUFLO2dCQUtjLGFBQWE7c0JBQWhDLEtBQUs7Z0JBV0ssZ0JBQWdCO3NCQUQxQixLQUFLO2dCQVlVLGlCQUFpQjtzQkFBaEMsS0FBSztnQkFLVSxlQUFlO3NCQUE5QixLQUFLO2dCQUtVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBS1UsU0FBUztzQkFBeEIsS0FBSztnQkFNSyxjQUFjO3NCQUR4QixLQUFLO2dCQVlVLG9CQUFvQjtzQkFBbkMsS0FBSztnQkFPVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBWUMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQU1vQixTQUFTO3NCQUFsQyxNQUFNO2dCQU1tQixNQUFNO3NCQUEvQixNQUFNO2dCQU1tQixTQUFTO3NCQUFsQyxNQUFNO2dCQU9TLGNBQWM7c0JBRDdCLE1BQU07Z0JBU1MsV0FBVztzQkFEMUIsTUFBTTtnQkFRUyxpQkFBaUI7c0JBRGhDLE1BQU07Z0JBT0EsbUJBQW1CO3NCQUR6QixZQUFZO3VCQUFDLG1CQUFtQjtnQkFLMUIsV0FBVztzQkFEakIsWUFBWTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRGVjaW1hbFBpcGUsIFBlcmNlbnRQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldCBhcyBnZXROZXN0ZWRWYWx1ZSwgc2V0IGFzIHNldE5lc3RlZFZhbHVlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgREVCT1VOQ0VfVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cy9pbmRleCc7XG5pbXBvcnQgeyBUYWJsZUNvbHVtblR5cGUgfSBmcm9tICcuLi9lbnVtZXJhdGlvbnMvaW5kZXgnO1xuaW1wb3J0IHtcbiAgSUNvbGxhcHNpYmxlUm93Q29udGVudENvbnRleHQsXG4gIElDdXN0b21DZWxsUmVuZGVyZXJDb21wb25lbnRzLFxuICBJU29ydEJ5UGF5bG9hZCxcbiAgSVRhYmxlQWN0aW9uc0NvbHVtbkRlZixcbiAgSVRhYmxlRXZlbnRQYXlsb2FkLFxuICBJVGFibGVSb3dBY3Rpb25QYXlsb2FkLFxuICBJVGFibGVSb3dDb2xsYXBzZUNoYW5nZSxcbiAgSVRhYmxlUm93SXRlbSxcbiAgSVRhYmxlUm93SXRlbVZhbHVlVHlwZXMsXG4gIFRhYmxlQ29sdW1uRGVmXG59IGZyb20gJy4uL2ludGVyZmFjZXMvaW5kZXgnO1xuaW1wb3J0IHsgQ2hlY2tib3hDaGFuZ2VFdmVudCB9IGZyb20gJy4uLy4uL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgVGFibGVUaGVtZUhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgQ29tcG9uZW50VGhlbWUgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBCcmFuZGVkRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vYnJhbmRpbmcnO1xuaW1wb3J0IHsgUGFnaW5hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgVGFibGVCdWxrQWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgTmdiQ29sbGFwc2UgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbi8qKlxuICogVGhlIGBUYWJsZUNvbXBvbmVudGAgKGA8aW1wZGMtdGFibGVgKSBpcyBhIGRhdGEgdGFibGUgY29tcG9uZW50LlxuICogVG8gdXNlLCBpbXBvcnQgYFRhYmxlTW9kdWxlYCBmcm9tIGBAaW1wYXJ0bmVyL2Rlc2lnbi1jb21wb25lbnRzYC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaW1wZGMtdGFibGUnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRhYmxlIGRhdGEgaXMgY3VycmVudGx5IGJlaW5nIGxvYWRlZC4gVGhlIGA8aW1wZGMtc3Bpbm5lcj5gIHdpbGwgc2hvdyBpZiBkYXRhIGlzIGxvYWRpbmcuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBUaGUgdmlzaWJsZSBjb2x1bW5zIG9mIHRoZSB0YWJsZS4gIEVhY2ggYElUYWJsZUNvbHVtbkRlZmAgZGVmaW5lcyBwcm9wZXJ0aWVzIHJlZ2FyZGluZyB0aGUgZGlzcGxheSwgZm9ybWF0dGluZyBhbmQgaW50ZXJhY3Rpb24gb2YgdGhlIGNvbHVtbidzIGNlbGxzLlxuICAgKiBDb2x1bW4vY2VsbCBjb2xvciBwcmVjZWRlbmNlIGlzOlxuICAgKiAxKSBgZmllbGRDb2xvcmAgLSBhbGxvd3MgYW4gYElUYWJsZUNvbHVtbkRlZmAgdG8gZGVsZWdhdGUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGNlbGwgY29sb3IgdG8gYW4gYElUYWJsZVJvd0l0ZW1gIHByb3BlcnR5LlxuICAgKiAyKSBgY29sb3JHZXR0ZXJgLSBhbGxvd3MgYW4gYElUYWJsZUNvbHVtbkRlZmAgdG8gZGVsZWdhdGUgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIGNlbGwgY29sb3IgdG8gYSBmdW5jdGlvbiBvZiB0aGUgYElUYWJsZVJvd0l0ZW1gIGRldGVybWluZWQgYnkgdGhlIGRldmVsb3Blci5cbiAgICogMykgYGNvbG9yYCAtIGEgcHJvcGVydHkgb2YgYW4gYElUYWJsZUNvbHVtbkRlZmAuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY29sdW1uRGVmczogVGFibGVDb2x1bW5EZWY8YW55PltdID0gW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRhYmxlIGlzIHN0cmlwZWQuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc3RyaXBlZCA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGFibGUgcm93cyBzaG91bGQgYXBwbHkgaG92ZXIgc3R5bGVzIHdoZW4gaG92ZXJlZCBvdmVyIHZpYSBjdXJzb3IuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgaG92ZXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF5b3V0IGFsZ29yaXRobSB0byBiZSB1c2VkIHdoZW4gcmVuZGVyaW5nIHRoZSB0YWJsZS5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBsYXlvdXQ6ICdhdXRvJyB8ICdmaXhlZCcgPSAnYXV0byc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgaW5kaXZpZHVhbCByb3dzIGNhbiBiZSBzZWxlY3RlZC4gV2lsbCBiZSBgdHJ1ZWAgaWYgZXhwbGljaXRseSBzZXQgdG8gYHRydWVgIG9yIGBjYW5TZWxlY3RBbGxSb3dzYCBpcyBgdHJ1ZWAuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IGNhblNlbGVjdFJvd3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jYW5TZWxlY3RSb3dzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIGdldCBjYW5TZWxlY3RSb3dzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNhblNlbGVjdEFsbFJvd3MgfHwgdGhpcy5fY2FuU2VsZWN0Um93cyB8fCAhIXRoaXMuYnVsa0FjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBhbGwgcm93cyBjYW4gYmUgc2VsZWN0ZWQgYXQgb25jZS4gV2lsbCBiZSBgdHJ1ZWAgaWYgZXhwbGljaXRseSBzZXQgdG8gYHRydWVgIG9yIGlmIGBUYWJsZUJ1bGtBY3Rpb25zQ29tcG9uZW50YCBpcyBjb250ZW50IHByb2plY3RlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY2FuU2VsZWN0QWxsUm93cyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2NhblNlbGVjdEFsbFJvd3MgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2FuU2VsZWN0QWxsUm93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2FuU2VsZWN0QWxsUm93cyB8fCAhIXRoaXMuYnVsa0FjdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBsYWNlaG9sZGVyIHRleHQgYW5kIGVtcHR5IHZhbHVlIGRpc3BsYXkgdGV4dCBmb3IgYDxpbXBkYy1zZWxlY3Q+YCBpbnN0YW5jZXMgaW4gY2VsbHMgd2l0aCBhIGBJVGFibGVDb2x1bW5EZWZgIGBjb2x1bW5UeXBlYCA9IGBTaW5nbGVTZWxlY3RgIG9yIGBNdWx0aVNlbGVjdGAuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0UGxhY2Vob2xkZXIgPSAnJztcblxuICAvKipcbiAgICogVGhlIGBjb2x1bW5EZWZzYCBpbmRleCBvZiB0aGUgY3VycmVudGx5IHNvcnRlZCBjb2x1bW4uXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc29ydENvbHVtbkluZGV4OiBudW1iZXIgPSAwO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBjdXJyZW50bHkgc29ydGVkIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBzb3J0RGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyA9ICdhc2MnO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGUgcm93IGRhdGEgYXMgYW4gYXJyYXkgb2YgYElUYWJsZVJvd0l0ZW1gLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHRhYmxlRGF0YTogSVRhYmxlUm93SXRlbVtdID0gW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGN1cnJlbnRseSBzZWxlY3RlZCBJRHMgZnJvbSB0aGUgYHRhYmxlRGF0YWAgaW5wdXQuICBBcnJheSBtdXN0IGJlIG9mIHR5cGUgYChzdHJpbmcgfCBudW1iZXIpW11gLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBzZWxlY3RlZFJvd0lkcyh2YWx1ZTogKHN0cmluZyB8IG51bWJlcilbXSkge1xuICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzID0gWy4uLnZhbHVlXTtcbiAgfVxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkUm93SWRzKCk6IChzdHJpbmcgfCBudW1iZXIpW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fc2VsZWN0ZWRSb3dJZHNdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpc3RlcmVkIGN1c3RvbSBjZWxsIHJlbmRlcmVyIGNvbXBvbmVudHMgYXZhaWxhYmxlIHRvIGJlIHVzZWQgaW4gdGhlIHRhYmxlIGluc3RhbmNlLlxuICAgKiBGb3IgYSBnaXZlbiBgSVRhYmxlQ29sdW1uRGVmYCBpbiB0aGUgYGNvbHVtbkRlZnNgIGlucHV0LCB0aGUgYGNlbGxSZW5kZXJlckNvbXBvbmVudGAgcHJvcGVydHkgc2hvdWxkIGJlIHNldCB0byB0aGUga2V5IG9mIHRoZSByZWdpc3RlcmVkIGNvbXBvbmVudCBpbiB0aGlzIGlucHV0LlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUNlbGxDb21wb25lbnRzPzogSUN1c3RvbUNlbGxSZW5kZXJlckNvbXBvbmVudHM7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIHRlbXBsYXRlIGZvciBjb250ZW50IHRoYXQgbWF5IGJlIHJlbmRlcmVkIGJlbG93IGEgcm93IGluIGFuIGNvbGxhcHNpYmxlIHZpZXcuIFZhbHVlIGNhbiBlaXRoZXIgYmUgYW4gQW5ndWxhciB0ZW1wbGF0ZSBvciBhIGZ1bmN0aW9uIHRoYXQgY2FuIGV2YWx1YXRlZFxuICAgKiB0byByZXNvbHZlIHRvIGEgdGVtcGxhdGUuIFRoZSB0ZW1wbGF0ZSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggYSBwcm92aWRlZCBgSUNvbGxhcHNpYmxlUm93Q29udGVudENvbnRleHRgIG9iamVjdCBhcyB0ZW1wbGF0ZSBjb250ZXh0LCB3aXRoIHRoZSBjdXJyZW50IGBJVGFibGVSb3dEYXRhYFxuICAgKiBpbXBsaWNpdGx5IGF2YWlsYWJsZSBhcyBhIGRlZmF1bHQgdGVtcGxhdGUga2V5LlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNvbGxhcHNpYmxlVGVtcGxhdGU6XG4gICAgfCBUZW1wbGF0ZVJlZjxJQ29sbGFwc2libGVSb3dDb250ZW50Q29udGV4dDxhbnk+PlxuICAgIHwgbnVsbFxuICAgIHwgKChyb3c6IGFueSkgPT4gVGVtcGxhdGVSZWY8SUNvbGxhcHNpYmxlUm93Q29udGVudENvbnRleHQ8YW55Pj4gfCBudWxsKSA9XG4gICAgbnVsbDtcblxuICAvKipcbiAgICogVGhlIGNsaWNrYWJsZSBjb250cm9sIHRoYXQgd2lsbCB0cmlnZ2VyIGV4cGFuc2lvbiBhbmQgY29sbGFwc2Ugb2YgY29udGVudCB3aGVuIHVzaW5nIGBjb2xsYXBzaWJsZVRlbXBsYXRlYCBmdW5jdGlvbmFsaXR5LlxuICAgKiBXaGVuIHNldCB0byBgYnV0dG9uYCwgdGhlIGNvbGxhcHNpYmxlIGNvbnRlbnQncyBzdGF0ZSBjYW4gb25seSBiZSB0b2dnbGVkIGZyb20gYSBjbGlja2FibGUgYnV0dG9uIGF0IHRoZSBzdGFydCBvZiB0aGUgcm93LlxuICAgKiBXaGVuIHNldCB0byBgcm93YCwgdGhlIGVudGlyZSByb3cgd2lsbCBiZWNvbWUgYSBjbGlja2FibGUgdHJpZ2dlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb2xsYXBzaWJsZVRyaWdnZXI6ICdidXR0b24nIHwgJ3JvdycgPSAnYnV0dG9uJztcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIG9uZSBvciBtdWx0aXBsZSByb3dzIGFyZSBzZWxlY3RlZC4gRW1pdHMgYChzdHJpbmcgfCBudW1iZXIpW11gIHBheWxvYWQuXG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHJvd1NlbGVjdDogRXZlbnRFbWl0dGVyPChzdHJpbmcgfCBudW1iZXIpW10+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPChzdHJpbmcgfCBudW1iZXIpW10+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIGNvbHVtbiBpcyBzb3J0ZWQuIEVtaXRzIGBJU29ydEJ5UGF5bG9hZGAgcGF5bG9hZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc29ydEJ5OiBFdmVudEVtaXR0ZXI8SVNvcnRCeVBheWxvYWQ+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPElTb3J0QnlQYXlsb2FkPigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSByb3cgbGluayBpcyBjbGlja2VkLiBFbWl0cyBgSVRhYmxlRXZlbnRQYXlsb2FkYCBwYXlsb2FkLlxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBsaW5rQ2xpY2s6IEV2ZW50RW1pdHRlcjxJVGFibGVFdmVudFBheWxvYWQ8YW55Pj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8SVRhYmxlRXZlbnRQYXlsb2FkPGFueT4+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIHJvdyBhY3Rpb24gaXMgY2xpY2tlZC4gRW1pdHMgYW4gYElUYWJsZVJvd0FjdGlvblBheWxvYWRgIHBheWxvYWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IHJvd0FjdGlvbkNsaWNrOiBFdmVudEVtaXR0ZXI8SVRhYmxlUm93QWN0aW9uUGF5bG9hZDxhbnk+PiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxJVGFibGVSb3dBY3Rpb25QYXlsb2FkPGFueT4+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIHJvdyBpbnB1dCB2YWx1ZSBpcyBjaGFuZ2VkLiBFbWl0dGVkIGNlbGxzIG9mIGBjb2x1bW5UeXBlYCBgU2luZ2xlU2VsZWN0YCwgYE11bHRpU2VsZWN0YCwgYElucHV0YCwgYEJvb2xlYW5gIG9yIGBJY29uYC5cbiAgICogTm90IGVtaXR0ZWQgaWYgY29sdW1uIGRlZmluaXRpb24gcHJvcGVydHkgYGRpc2FibGVkYCA9IGB0cnVlYC4gRW1pdHMgYElUYWJsZUV2ZW50UGF5bG9hZGAgcGF5bG9hZC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgaW5wdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxJVGFibGVFdmVudFBheWxvYWQ8YW55Pj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8SVRhYmxlRXZlbnRQYXlsb2FkPGFueT4+KCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBhIHJvdyB3aXRoIGNvbGxhcHNpYmxlIGNvbnRlbnQgaGFzIGl0cyBjb2xsYXBzZSBzdGF0ZSBjaGFuZ2VkLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSByb3dDb2xsYXBzZUNoYW5nZTogRXZlbnRFbWl0dGVyPFxuICAgIElUYWJsZVJvd0NvbGxhcHNlQ2hhbmdlPGFueT5cbiAgPiA9IG5ldyBFdmVudEVtaXR0ZXI8SVRhYmxlUm93Q29sbGFwc2VDaGFuZ2U8YW55Pj4oKTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBAQ29udGVudENoaWxkKFBhZ2luYXRpb25Db21wb25lbnQpXG4gIHB1YmxpYyBwYWdpbmF0aW9uQ29tcG9uZW50PzogUGFnaW5hdGlvbkNvbXBvbmVudCA9IHVuZGVmaW5lZDtcblxuICAvKiogQGlnbm9yZSAqL1xuICBAQ29udGVudENoaWxkKFRhYmxlQnVsa0FjdGlvbnNDb21wb25lbnQpXG4gIHB1YmxpYyBidWxrQWN0aW9ucz86IFRhYmxlQnVsa0FjdGlvbnNDb21wb25lbnQgPSB1bmRlZmluZWQ7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNlbGxUeXBlID0gVGFibGVDb2x1bW5UeXBlO1xuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgYWxsU2VsZWN0ZWQgPSB0cnVlO1xuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgZ2V0IHNvbWVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgISF0aGlzLl9zZWxlY3RlZFJvd0lkcyAmJlxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMubGVuZ3RoID4gMCAmJlxuICAgICAgISF0aGlzLnRhYmxlRGF0YSAmJlxuICAgICAgdGhpcy50YWJsZURhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMubGVuZ3RoIDwgdGhpcy50YWJsZURhdGEubGVuZ3RoXG4gICAgKTtcbiAgfVxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnJhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBnZXQgdGFibGVTcGFuKCk6IG51bWJlciB7XG4gICAgbGV0IGNvbHMgPSB0aGlzLmNvbHVtbkRlZnMubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMuY2FuU2VsZWN0Um93cykge1xuICAgICAgY29scysrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlVGVtcGxhdGUpIHtcbiAgICAgIGNvbHMrKztcbiAgICB9XG5cbiAgICByZXR1cm4gY29scztcbiAgfVxuXG4gIHByaXZhdGUgX2NhblNlbGVjdFJvd3MgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2FuU2VsZWN0QWxsUm93cyA9IGZhbHNlO1xuICBwcml2YXRlIF9zZWxlY3RlZFJvd0lkczogKHN0cmluZyB8IG51bWJlcilbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVRhYmxlRXZlbnRQYXlsb2FkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wZXJjZW50UGlwZTogUGVyY2VudFBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVjbWlhbFBpcGU6IERlY2ltYWxQaXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBASG9zdCgpIHByaXZhdGUgX2JyYW5kZWQ6IEJyYW5kZWREaXJlY3RpdmVcbiAgKSB7XG4gICAgdGhpcy5icmFuZGVkID0gX2JyYW5kZWQgPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5faW5wdXRDaGFuZ2VcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZShERUJPVU5DRV9USU1FKSlcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5pbnB1dENoYW5nZSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3NlbGVjdGVkUm93SWRzJ10gfHwgY2hhbmdlc1sndGFibGVEYXRhJ10pIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMudGFibGVEYXRhIHx8XG4gICAgICAgICF0aGlzLnRhYmxlRGF0YS5sZW5ndGggfHxcbiAgICAgICAgIXRoaXMuc2VsZWN0ZWRSb3dJZHMgfHxcbiAgICAgICAgIXRoaXMuc2VsZWN0ZWRSb3dJZHMubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dJZHMubGVuZ3RoID49IHRoaXMudGFibGVEYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgZ2V0TWFpbFRvVmFsdWUoXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50Um93OiBJVGFibGVSb3dJdGVtXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBjb2x1bW5UeXBlLCB0cnVuY2F0ZWQ6IHRydW5jYXRlZCB9ID1cbiAgICAgIHRoaXMuX2dldENvbHVtbkRlZkJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKGNvbHVtbkluZGV4LCBjdXJyZW50Um93KTtcblxuICAgIGlmIChjb2x1bW5UeXBlICE9PSBUYWJsZUNvbHVtblR5cGUuRW1haWwpIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICB2YWx1ZSA9IHZhbHVlID8gYG1haWx0bzoke3ZhbHVlfWAgOiB2YWx1ZTtcblxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGdldFN0cmluZ1ZhbHVlKFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgY3VycmVudFJvdzogSVRhYmxlUm93SXRlbVxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZShjb2x1bW5JbmRleCwgY3VycmVudFJvdyk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5qb2luKCc7Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgZ2V0VmFsdWUoXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50Um93OiBJVGFibGVSb3dJdGVtXG4gICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICBjb25zdCB7IGNvbHVtblR5cGUsIHRydW5jYXRlZDogdHJ1bmNhdGVkIH0gPVxuICAgICAgdGhpcy5fZ2V0Q29sdW1uRGVmQnlJbmRleChjb2x1bW5JbmRleCk7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5fZ2V0VmFsdWUoY29sdW1uSW5kZXgsIGN1cnJlbnRSb3cpO1xuXG4gICAgc3dpdGNoIChjb2x1bW5UeXBlKSB7XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5EZWNpbWFsOiB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5fZGVjbWlhbFBpcGUudHJhbnNmb3JtKE51bWJlcih2YWx1ZSkgfHwgMCkgfHwgJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuRGF0ZToge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoU3RyaW5nKHZhbHVlKSk7XG4gICAgICAgIGNvbnN0IHZhbGlkRGF0ZSA9IGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIHZhbHVlID0gdmFsaWREYXRlXG4gICAgICAgICAgPyB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ01NL2RkL3l5eXknKSB8fCAnJ1xuICAgICAgICAgIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5EYXRlVGltZToge1xuICAgICAgICBjb25zdCBkYXRlVGltZSA9IG5ldyBEYXRlKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICBjb25zdCB2YWxpZERhdGVUaW1lID1cbiAgICAgICAgICBkYXRlVGltZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGVUaW1lLmdldFRpbWUoKSk7XG4gICAgICAgIHZhbHVlID0gdmFsaWREYXRlVGltZVxuICAgICAgICAgID8gdGhpcy5fZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVUaW1lLCAnTU0vZGQveXl5eSBoOm1tOnNzIGEnKSB8fCAnJ1xuICAgICAgICAgIDogU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5MaW5rOiB7XG4gICAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKS5yZXBsYWNlKC8oXlxcdys6fF4pXFwvXFwvLywgJycpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLlBlcmNlbnRhZ2U6IHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLl9wZXJjZW50UGlwZS50cmFuc2Zvcm0oTnVtYmVyKHZhbHVlKSB8fCAwKSB8fCAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5Vcmw6IHtcbiAgICAgICAgaWYgKCEvKGh0dHAocz8pKTpcXC9cXC8vaS50ZXN0KFN0cmluZyh2YWx1ZSkpKSB7XG4gICAgICAgICAgdmFsdWUgPSBgaHR0cHM6Ly8ke3ZhbHVlfWA7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5UZXh0OiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuam9pbignOyAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdHJ1bmNhdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHJ1bmNhdGVTdHJpbmcgPSAoc3RyaW5nID0gJycsIG1heExlbmd0aCA9IHRydW5jYXRlZCkgPT5cbiAgICAgICAgICBzdHJpbmcubGVuZ3RoID4gbWF4TGVuZ3RoXG4gICAgICAgICAgICA/IGAke3N0cmluZy5zdWJzdHJpbmcoMCwgbWF4TGVuZ3RoKX3igKZgXG4gICAgICAgICAgICA6IHN0cmluZztcblxuICAgICAgICAhIXRydW5jYXRlZFxuICAgICAgICAgID8gKHZhbHVlID0gdHJ1bmNhdGVTdHJpbmcoU3RyaW5nKHZhbHVlKSwgdHJ1bmNhdGVkKSlcbiAgICAgICAgICA6IHZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLk11bHRpU2VsZWN0OlxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJzsnKT8ubWFwKHYgPT4gdi50cmltKCkpIHx8IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBnZXRSYXdWYWx1ZShcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRSb3c6IElUYWJsZVJvd0l0ZW1cbiAgKTogSVRhYmxlUm93SXRlbVZhbHVlVHlwZXMge1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMuX2dldENvbHVtbkRlZkJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuXG4gICAgaWYgKCFmaWVsZCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBjdXJyZW50Um93W2ZpZWxkXSB8fCAnJztcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBnZXRDZWxsQ29sb3IoXG4gICAgY29sdW1uRGVmaW5pdGlvbjogVGFibGVDb2x1bW5EZWYsXG4gICAgaXRlbTogSVRhYmxlUm93SXRlbVxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBUYWJsZVRoZW1lSGVscGVyLmdldENlbGxDb2xvcihjb2x1bW5EZWZpbml0aW9uLCBpdGVtKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBnZXRUaGVtZShcbiAgICBjb2x1bW5EZWZpbml0aW9uOiBUYWJsZUNvbHVtbkRlZixcbiAgICBpdGVtOiBJVGFibGVSb3dJdGVtXG4gICk6IENvbXBvbmVudFRoZW1lIHtcbiAgICByZXR1cm4gKFxuICAgICAgVGFibGVUaGVtZUhlbHBlci5nZXRUaGVtZShjb2x1bW5EZWZpbml0aW9uLCBpdGVtKSB8fFxuICAgICAgQ29tcG9uZW50VGhlbWUuUHJpbWFyeVxuICAgICk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgaXNTb3J0ZWRDb2x1bW4oY29sdW1uSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2x1bW5JbmRleCA9PT0gdGhpcy5zb3J0Q29sdW1uSW5kZXg7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgaXNSb3dTZWxlY3RlZChpZDogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dJZHMuaW5jbHVkZXMoaWQpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGhhbmRsZVNlbGVjdEFsbChldmVudDogQ2hlY2tib3hDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5TZWxlY3RBbGxSb3dzIHx8ICF0aGlzLnRhYmxlRGF0YSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jaGVja2VkKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcyA9IHRoaXMudGFibGVEYXRhPy5tYXAocm93ID0+IHJvdy5pZCkgfHwgW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzID0gW107XG4gICAgfVxuXG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMuc29ydCgpO1xuICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkUm93SWRzLmxlbmd0aCA+PSB0aGlzLnRhYmxlRGF0YS5sZW5ndGg7XG5cbiAgICB0aGlzLnJvd1NlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dJZHMpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGhhbmRsZVNvcnQoY29sdW1uSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChjb2x1bW5JbmRleCA9PT0gdGhpcy5zb3J0Q29sdW1uSW5kZXgpIHtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IHRoaXMuc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0Q29sdW1uSW5kZXggPSBjb2x1bW5JbmRleDtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9ICdhc2MnO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5fZ2V0Q29sdW1uRGVmQnlJbmRleChjb2x1bW5JbmRleCkuZmllbGQgfHwgJyc7XG5cbiAgICB0aGlzLnNvcnRCeS5lbWl0KHtcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgZmllbGQsXG4gICAgICBkaXJlY3Rpb246IHRoaXMuc29ydERpcmVjdGlvblxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGhhbmRsZVJvd1NlbGVjdChcbiAgICBldmVudDogQ2hlY2tib3hDaGFuZ2VFdmVudCxcbiAgICByb3dJZDogbnVtYmVyIHwgc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5TZWxlY3RSb3dzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmNoZWNrZWQgJiYgIXRoaXMuX3NlbGVjdGVkUm93SWRzLmluY2x1ZGVzKHJvd0lkKSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMucHVzaChyb3dJZCk7XG4gICAgfSBlbHNlIGlmICghZXZlbnQuY2hlY2tlZCAmJiB0aGlzLl9zZWxlY3RlZFJvd0lkcy5pbmNsdWRlcyhyb3dJZCkpIHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX3NlbGVjdGVkUm93SWRzLmluZGV4T2Yocm93SWQpO1xuICAgICAgaWYgKGlkeCA+IC0xKSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zZWxlY3RlZFJvd0lkcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLnNvcnQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFJvd0lkcy5sZW5ndGggPj0gdGhpcy50YWJsZURhdGEubGVuZ3RoO1xuICAgIHRoaXMucm93U2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZFJvd0lkcyk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgaGFuZGxlQ2VsbFZhbHVlQ2hhbmdlKFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN0cmluZ1tdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHsgZmllbGQsIGNvbHVtblR5cGUgfSA9IHRoaXMuX2dldENvbHVtbkRlZkJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuICAgIGxldCBjdXJyZW50VmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBzdHJpbmdbXSA9IHZhbHVlO1xuXG4gICAgaWYgKGNvbHVtblR5cGUgIT09IFRhYmxlQ29sdW1uVHlwZS5Cb29sZWFuICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY3VycmVudFZhbHVlID0gaXNOYU4oTnVtYmVyKHZhbHVlKSkgPyB2YWx1ZSA6IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnRhYmxlRGF0YVtyb3dJbmRleF07XG5cbiAgICBzZXROZXN0ZWRWYWx1ZShpdGVtLCBTdHJpbmcoZmllbGQpLCBjdXJyZW50VmFsdWUpO1xuXG4gICAgdGhpcy5faW5wdXRDaGFuZ2UuZW1pdCh7XG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIGl0ZW0sXG4gICAgICB2YWx1ZTogY3VycmVudFZhbHVlXG4gICAgfSk7XG5cbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgaGFuZGxlTGlua0NsaWNrKFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgaXRlbTogSVRhYmxlUm93SXRlbSxcbiAgICBldmVudDogRXZlbnRcbiAgKTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIHRoaXMubGlua0NsaWNrLmVtaXQoe1xuICAgICAgaXRlbSxcbiAgICAgIGNvbHVtbkluZGV4XG4gICAgfSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgaGFuZGxlQWN0aW9uQ2xpY2soXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBpdGVtOiBJVGFibGVSb3dJdGVtLFxuICAgIGFjdGlvbkFwaU5hbWU6IHN0cmluZ1xuICApIHtcbiAgICB0aGlzLnJvd0FjdGlvbkNsaWNrLmVtaXQoe1xuICAgICAgaXRlbSxcbiAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgYWN0aW9uQXBpTmFtZVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbHVtbkRlZklzQWN0aW9ucyhcbiAgICBjb2x1bW5EZWY6IFRhYmxlQ29sdW1uRGVmPGFueT5cbiAgKTogY29sdW1uRGVmIGlzIElUYWJsZUFjdGlvbnNDb2x1bW5EZWY8YW55PiB7XG4gICAgcmV0dXJuIGNvbHVtbkRlZi5jb2x1bW5UeXBlID09PSBUYWJsZUNvbHVtblR5cGUuQWN0aW9ucztcbiAgfVxuXG4gIHByb3RlY3RlZCB0cnlUb2dnbGVDb2xsYXBzZShcbiAgICBjb2xsYXBzaWJsZUZvclJvd1Jlc3VsdDoge1xuICAgICAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPElDb2xsYXBzaWJsZVJvd0NvbnRlbnRDb250ZXh0PiB8IG51bGw7XG4gICAgfSxcbiAgICBuZ2JDb2xsYXBzZTogTmdiQ29sbGFwc2UsXG4gICAgZXZlbnQ6IEV2ZW50LFxuICAgIHNvdXJjZTogJ2J1dHRvbicgfCAncm93J1xuICApOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBjb2xsYXBzaWJsZUZvclJvd1Jlc3VsdC50ZW1wbGF0ZSAmJlxuICAgICAgKHRoaXMuY29sbGFwc2libGVUcmlnZ2VyID09PSAncm93JyB8fCB0aGlzLmNvbGxhcHNpYmxlVHJpZ2dlciA9PT0gc291cmNlKVxuICAgICkge1xuICAgICAgbmdiQ29sbGFwc2UudG9nZ2xlKCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q29sbGFwc2libGVUZW1wbGF0ZUZvclJvdyhyb3c6IElUYWJsZVJvd0l0ZW0pOiB7XG4gICAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPElDb2xsYXBzaWJsZVJvd0NvbnRlbnRDb250ZXh0PiB8IG51bGw7XG4gIH0ge1xuICAgIHJldHVybiB7XG4gICAgICB0ZW1wbGF0ZTpcbiAgICAgICAgdGhpcy5jb2xsYXBzaWJsZVRlbXBsYXRlICYmXG4gICAgICAgIHR5cGVvZiB0aGlzLmNvbGxhcHNpYmxlVGVtcGxhdGUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IHRoaXMuY29sbGFwc2libGVUZW1wbGF0ZShyb3cpXG4gICAgICAgICAgOiB0aGlzLmNvbGxhcHNpYmxlVGVtcGxhdGVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29sdW1uRGVmQnlJbmRleChjb2x1bW5JbmRleDogbnVtYmVyKTogVGFibGVDb2x1bW5EZWYge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbkRlZnNbY29sdW1uSW5kZXhdO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VmFsdWUoXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50Um93OiBJVGFibGVSb3dJdGVtXG4gICk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBmaWVsZCwgdmFsdWVHZXR0ZXIgfSA9IHRoaXMuX2dldENvbHVtbkRlZkJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuXG4gICAgICBjb25zdCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gPSB2YWx1ZUdldHRlclxuICAgICAgICA/IHZhbHVlR2V0dGVyKGN1cnJlbnRSb3cpXG4gICAgICAgIDogKGdldE5lc3RlZFZhbHVlKGN1cnJlbnRSb3csIFN0cmluZyhmaWVsZCksICcnKSBhcyBzdHJpbmcgfCBzdHJpbmdbXSk7XG5cbiAgICAgIHJldHVybiB2YWx1ZSB8fCAnJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG4iLCJAaWYgKHRhYmxlRGF0YSkge1xuPHRhYmxlXG4gIGltcGRjVGFibGVcbiAgW3N0cmlwZWRdPVwic3RyaXBlZCAmJiAhY29sbGFwc2libGVUZW1wbGF0ZVwiXG4gIFtsYXlvdXRdPVwibGF5b3V0XCJcbiAgW2hvdmVyXT1cImhvdmVyXCI+XG4gIDx0aGVhZD5cbiAgICBAaWYgKCEhYnVsa0FjdGlvbnMpIHtcbiAgICA8dHI+XG4gICAgICA8dGggW2F0dHIuY29sc3Bhbl09XCJ0YWJsZVNwYW5cIiBzY29wZT1cImNvbFwiIGNsYXNzPVwiYnVsay1hY3Rpb24tY29sdW1uXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImltcGRjLXRhYmxlLWJ1bGstYWN0aW9uc1wiPjwvbmctY29udGVudD5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ltcGRjVGFibGVCdWxrQWN0aW9uc11cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L3RoPlxuICAgIDwvdHI+XG4gICAgfVxuICAgIDx0cj5cbiAgICAgIEBpZiAoY29sbGFwc2libGVUZW1wbGF0ZSkge1xuICAgICAgPHRoXG4gICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgW2NsYXNzLmhlYWRpbmctYmVsb3ctYnVsay1hY3Rpb25zXT1cIiEhYnVsa0FjdGlvbnNcIlxuICAgICAgICBjbGFzcz1cImltcGRjLXRhYmxlLWNvbGxhcHNpYmxlLWNvbnRlbnQtcm93LWJ1dHRvbi1jb250YWluZXJcIj48L3RoPlxuICAgICAgfSBAaWYgKGNhblNlbGVjdFJvd3MpIHtcbiAgICAgIDx0aFxuICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgIGNsYXNzPVwiaW1wZGMtdGFibGUtc2VsZWN0YWJsZS1yb3ctdG9nZ2xlLWNvbnRhaW5lclwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnaGVhZGluZy1iZWxvdy1idWxrLWFjdGlvbnMnOiAhIWJ1bGtBY3Rpb25zXG4gICAgICAgIH1cIj5cbiAgICAgICAgQGlmIChjYW5TZWxlY3RBbGxSb3dzKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGltcGRjLWNoZWNrYm94XG4gICAgICAgICAgICBuZ01vZGVsXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJhbGxTZWxlY3RlZFwiXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzb21lU2VsZWN0ZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVTZWxlY3RBbGwoJGV2ZW50KVwiPjwvaW1wZGMtY2hlY2tib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L3RoPlxuICAgICAgfSBAZm9yIChjb2x1bW5EZWYgb2YgY29sdW1uRGVmczsgdHJhY2sgY29sdW1uRGVmOyBsZXQgY29sdW1uSW5kZXggPVxuICAgICAgJGluZGV4KSB7XG4gICAgICA8dGhcbiAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ3NvcnRlZC1jb2x1bW4nOiBpc1NvcnRlZENvbHVtbihjb2x1bW5JbmRleCksXG4gICAgICAgICAgJ3NvcnRhYmxlLWNvbHVtbic6IGNvbHVtbkRlZi5zb3J0ZWQsXG4gICAgICAgICAgJ2hlYWRpbmctYmVsb3ctYnVsay1hY3Rpb25zJzogISFidWxrQWN0aW9uc1xuICAgICAgICB9XCJcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZVNvcnQoY29sdW1uSW5kZXgpXCI+XG4gICAgICAgIDxpbXBkYy1jb2x1bW4taGVhZGluZ1xuICAgICAgICAgIFtpc1NvcnRhYmxlXT1cImNvbHVtbkRlZi5zb3J0ZWQgfHwgZmFsc2VcIlxuICAgICAgICAgIFtjb2x1bW5JbmRleF09XCJjb2x1bW5JbmRleFwiXG4gICAgICAgICAgW3NvcnRDb2x1bW5JbmRleF09XCJzb3J0Q29sdW1uSW5kZXhcIlxuICAgICAgICAgIFtkaXJlY3Rpb25dPVwic29ydERpcmVjdGlvblwiXG4gICAgICAgICAgW3RleHRdPVwiY29sdW1uRGVmLnRpdGxlXCJcbiAgICAgICAgICAoc29ydCk9XCJoYW5kbGVTb3J0KCRldmVudClcIj5cbiAgICAgICAgPC9pbXBkYy1jb2x1bW4taGVhZGluZz5cbiAgICAgIDwvdGg+XG4gICAgICB9XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIEBpZiAobG9hZGluZykge1xuICAgIDx0cj5cbiAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInRhYmxlU3BhblwiIGNsYXNzPVwiZGF0YS1sb2FkaW5nXCI+XG4gICAgICAgIDxpbXBkYy1zcGlubmVyPjwvaW1wZGMtc3Bpbm5lcj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgICB9IEBlbHNlIHsgQGZvciAocm93IG9mIHRhYmxlRGF0YTsgdHJhY2sgcm93LmlkOyBsZXQgcm93SW5kZXggPSAkaW5kZXg7IGxldFxuICAgIHJvd0ZpcnN0ID0gJGZpcnN0OyBsZXQgcm93TGFzdCA9ICRsYXN0OyBsZXQgcm93RXZlbiA9ICRldmVuOyBsZXQgcm93T2RkID1cbiAgICAkb2RkKSB7IEBpZiAoZ2V0Q29sbGFwc2libGVUZW1wbGF0ZUZvclJvdyhyb3cpOyBhc1xuICAgIGNvbGxhcHNpYmxlVGVtcGxhdGVGb3JSb3cpIHtcbiAgICA8dHJcbiAgICAgIFtjbGFzcy5pbXBkYy10YWJsZS1jb2xsYXBzaWJsZS1yb3ctdHJpZ2dlcl09XCJjb2xsYXBzaWJsZVRyaWdnZXIgPT09ICdyb3cnXCJcbiAgICAgIFtjbGFzcy50YWJsZS1hY3RpdmVdPVwiaXNSb3dTZWxlY3RlZChyb3cuaWQpXCJcbiAgICAgIChjbGljayk9XCJcbiAgICAgICAgdHJ5VG9nZ2xlQ29sbGFwc2UoY29sbGFwc2libGVUZW1wbGF0ZUZvclJvdywgbmdiQ29sbGFwc2UsICRldmVudCwgJ3JvdycpXG4gICAgICBcIj5cbiAgICAgIEBpZiAoY29sbGFwc2libGVUZW1wbGF0ZSkge1xuICAgICAgPHRkXG4gICAgICAgIGNsYXNzPVwiaW1wZGMtdGFibGUtY29sbGFwc2libGUtY29udGVudC1yb3ctYnV0dG9uLWNvbnRhaW5lclwiXG4gICAgICAgIFtjbGFzcy5vcGVuZWRdPVwiIWNvbGxhcHNlTW9uaXRvci5uZ2JDb2xsYXBzaW5nKClcIj5cbiAgICAgICAgQGlmIChjb2xsYXBzaWJsZVRlbXBsYXRlRm9yUm93LnRlbXBsYXRlKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIHRyeVRvZ2dsZUNvbGxhcHNlKFxuICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlVGVtcGxhdGVGb3JSb3csXG4gICAgICAgICAgICAgICAgbmdiQ29sbGFwc2UsXG4gICAgICAgICAgICAgICAgJGV2ZW50LFxuICAgICAgICAgICAgICAgICdidXR0b24nXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBjbGFzcz1cImltcGRjLXRhYmxlLWNvbGxhcHNpYmxlLWNvbnRlbnQtcm93LWJ1dHRvbiBidG4gYnRuLWxpbmtcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmFyIGZhLWNoZXZyb24tcmlnaHRcIlxuICAgICAgICAgICAgICBbY2xhc3MuZmEtcm90YXRlLTkwXT1cIiFjb2xsYXBzZU1vbml0b3IubmdiQ29sbGFwc2luZygpXCI+PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC90ZD5cbiAgICAgIH0gQGlmIChjYW5TZWxlY3RSb3dzKSB7XG4gICAgICA8dGQgY2xhc3M9XCJpbXBkYy10YWJsZS1zZWxlY3RhYmxlLXJvdy10b2dnbGUtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtY29sdW1uXCI+XG4gICAgICAgICAgPGltcGRjLWNoZWNrYm94XG4gICAgICAgICAgICBbbmdNb2RlbF09XCJpc1Jvd1NlbGVjdGVkKHJvdy5pZClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVSb3dTZWxlY3QoJGV2ZW50LCByb3cuaWQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj48L2ltcGRjLWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgICB9XG4gICAgICA8dGRcbiAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbkRlZiBvZiBjb2x1bW5EZWZzOyBpbmRleCBhcyBjb2xJbmRleDsgbGFzdCBhcyBpc0xhc3RcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2NvbC1uby1wYWRkaW5nJzogISFjb2x1bW5EZWYubm9QYWRkaW5nLFxuICAgICAgICAgICdhY3Rpb25zLWNvbHVtbic6IGNvbHVtbkRlZi5jb2x1bW5UeXBlID09PSBjZWxsVHlwZS5BY3Rpb25zXG4gICAgICAgIH1cIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICBAc3dpdGNoIChjb2x1bW5EZWYuY29sdW1uVHlwZSkgeyBAY2FzZSAoY2VsbFR5cGUuQmFkZ2UpIHtcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxpbXBkYy1iYWRnZVxuICAgICAgICAgICAgICBbdGV4dF09XCJnZXRTdHJpbmdWYWx1ZShjb2xJbmRleCwgcm93KVwiXG4gICAgICAgICAgICAgIFt0aGVtZV09XCJnZXRUaGVtZShjb2x1bW5EZWYsIHJvdylcIj5cbiAgICAgICAgICAgIDwvaW1wZGMtYmFkZ2U+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH0gQGNhc2UgKGNlbGxUeXBlLkxpbmspIHtcbiAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiaGFuZGxlTGlua0NsaWNrKGNvbEluZGV4LCByb3csICRldmVudClcIj5cbiAgICAgICAgICAgIEBpZiAoIWJyYW5kZWQpIHtcbiAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgIHt7IGdldFZhbHVlKGNvbEluZGV4LCByb3cpIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxhIGltcGRjQnJhbmRlZD5cbiAgICAgICAgICAgICAge3sgZ2V0VmFsdWUoY29sSW5kZXgsIHJvdykgfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfSBAY2FzZSAoY2VsbFR5cGUuVXJsKSB7XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICBAaWYgKCFicmFuZGVkKSB7XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cImdldFZhbHVlKGNvbEluZGV4LCByb3cpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICB7eyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBpbXBkY0JyYW5kZWRcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgW2F0dHIuaHJlZl09XCJnZXRWYWx1ZShjb2xJbmRleCwgcm93KVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAge3sgZ2V0VmFsdWUoY29sSW5kZXgsIHJvdykgfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfSBAY2FzZSAoY2VsbFR5cGUuRW1haWwpIHtcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIEBpZiAoIWJyYW5kZWQpIHtcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgIFthdHRyLmhyZWZdPVwiJ21haWx0bzonICsgZ2V0VmFsdWUoY29sSW5kZXgsIHJvdylcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgIHt7IGdldFZhbHVlKGNvbEluZGV4LCByb3cpIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGltcGRjQnJhbmRlZFxuICAgICAgICAgICAgICBbYXR0ci5ocmVmXT1cImdldE1haWxUb1ZhbHVlKGNvbEluZGV4LCByb3cpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICB7eyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9IEBjYXNlIChjZWxsVHlwZS5JbnB1dCkge1xuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGltcGRjSW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBjbGFzcz1cInt7IGdldENlbGxDb2xvcihjb2x1bW5EZWYsIHJvdykgfX1cIlxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRWYWx1ZShjb2xJbmRleCwgcm93KVwiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgIGhhbmRsZUNlbGxWYWx1ZUNoYW5nZShjb2xJbmRleCwgcm93SW5kZXgsICRldmVudClcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH0gQGNhc2UgKGNlbGxUeXBlLkJvb2xlYW4pIHtcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIEBpZiAoY29sdW1uRGVmLmRpc2FibGVkICYmIGdldFZhbHVlKGNvbEluZGV4LCByb3cpID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGltcGRjLWljb25cbiAgICAgICAgICAgICAgbmFtZT1cImNoZWNrXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBnZXRDZWxsQ29sb3IoY29sdW1uRGVmLCByb3cpIH19XCI+PC9zcGFuPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoIWNvbHVtbkRlZi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgPGltcGRjLWNoZWNrYm94XG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cImdldFZhbHVlKGNvbEluZGV4LCByb3cpID09PSAndHJ1ZSdcIlxuICAgICAgICAgICAgICBbaXNTd2l0Y2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiXG4gICAgICAgICAgICAgICAgaGFuZGxlQ2VsbFZhbHVlQ2hhbmdlKGNvbEluZGV4LCByb3dJbmRleCwgJGV2ZW50LmNoZWNrZWQpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj48L2ltcGRjLWNoZWNrYm94PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9IEBjYXNlIChjZWxsVHlwZS5TaW5nbGVTZWxlY3QpIHtcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxpbXBkYy1zZWxlY3RcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0VmFsdWUoY29sSW5kZXgsIHJvdylcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uRGVmLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgYWxsb3dDbGVhcj1cInRydWVcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgIGhhbmRsZUNlbGxWYWx1ZUNoYW5nZShjb2xJbmRleCwgcm93SW5kZXgsICRldmVudC52YWx1ZSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICBAZm9yICh2YWx1ZSBvZiAoY29sdW1uRGVmLnZhbHVlcyB8fCBbXSk7IHRyYWNrIHZhbHVlKSB7XG4gICAgICAgICAgICAgIDxpbXBkYy1zZWxlY3Qtb3B0aW9uXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwidmFsdWUubGFiZWxcIj48L2ltcGRjLXNlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvaW1wZGMtc2VsZWN0PlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9IEBjYXNlIChjZWxsVHlwZS5NdWx0aVNlbGVjdCkge1xuICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgPGltcGRjLXNlbGVjdFxuICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRWYWx1ZShjb2xJbmRleCwgcm93KVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2x1bW5EZWYuZGlzYWJsZWQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VsZWN0UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICBtdWx0aXBsZT1cInRydWVcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgIGhhbmRsZUNlbGxWYWx1ZUNoYW5nZShjb2xJbmRleCwgcm93SW5kZXgsICRldmVudC52YWx1ZSlcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICBAZm9yICh2YWx1ZSBvZiAoY29sdW1uRGVmLnZhbHVlcyB8fCBbXSk7IHRyYWNrIHZhbHVlKSB7XG4gICAgICAgICAgICAgIDxpbXBkYy1zZWxlY3Qtb3B0aW9uXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwidmFsdWUubGFiZWxcIj48L2ltcGRjLXNlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvaW1wZGMtc2VsZWN0PlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9IEBjYXNlIChjZWxsVHlwZS5DZWxsUmVuZGVyKSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7eyBnZXRDZWxsQ29sb3IoY29sdW1uRGVmLCByb3cpIH19XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgaW1wZGNUYWJsZUluamVjdENvbXBvbmVudFxuICAgICAgICAgICAgICBbY29sdW1uRGVmXT1cImNvbHVtbkRlZlwiXG4gICAgICAgICAgICAgIFtyb3dJdGVtXT1cInJvd1wiXG4gICAgICAgICAgICAgIFtjdXN0b21DZWxsQ29tcG9uZW50c109XCJjdXN0b21DZWxsQ29tcG9uZW50cyB8fCB7fVwiXG4gICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRSYXdWYWx1ZShjb2xJbmRleCwgcm93KVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH0gQGNhc2UgKGNlbGxUeXBlLkljb24pIHtcbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGltcGRjLWljb25cbiAgICAgICAgICAgICAgW25hbWVdPVwiY29sdW1uRGVmLmljb25OYW1lXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBnZXRDZWxsQ29sb3IoY29sdW1uRGVmLCByb3cpIH19XCI+PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9IEBjYXNlIChjZWxsVHlwZS5BY3Rpb25zKSB7XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICA8IS0tIHdpbGwgYWx3YXlzIHJldHVybiAndHJ1ZScsIGJ1dCBuZWVkZWQgdG8gc2F0aXNmeSB0aGUgdHlwZSBlbmdpbmUgLS0+XG4gICAgICAgICAgICBAaWYgKGNvbHVtbkRlZklzQWN0aW9ucyhjb2x1bW5EZWYpKSB7XG4gICAgICAgICAgICA8aW1wZGMtcm93LWFjdGlvbnNcbiAgICAgICAgICAgICAgW2NvbHVtbkRlZl09XCJjb2x1bW5EZWZcIlxuICAgICAgICAgICAgICBbcm93SXRlbV09XCJyb3dcIlxuICAgICAgICAgICAgICBbbGFzdENvbHVtbl09XCJpc0xhc3RcIlxuICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwiaGFuZGxlQWN0aW9uQ2xpY2soY29sSW5kZXgsIHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj48L2ltcGRjLXJvdy1hY3Rpb25zPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB9IEBkZWZhdWx0IHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7IGdldENlbGxDb2xvcihjb2x1bW5EZWYsIHJvdykgfX1cIj5cbiAgICAgICAgICAgIHt7IGdldFZhbHVlKGNvbEluZGV4LCByb3cpIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH0gfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC90cj5cbiAgICA8dHJcbiAgICAgIGNsYXNzPVwiaW1wZGMtdGFibGUtY29sbGFwc2libGUtY29udGVudC1yb3dcIlxuICAgICAgW2NsYXNzLm9wZW5lZF09XCIhY29sbGFwc2VNb25pdG9yLm5nYkNvbGxhcHNpbmcoKVwiPlxuICAgICAgPHRkIGNsYXNzPVwidy0xMDAgcC0wXCIgW2F0dHIuY29sc3Bhbl09XCJ0YWJsZVNwYW5cIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiaW1wZGMtdGFibGUtY29sbGFwc2libGUtY29udGVudC1jb250YWluZXJcIlxuICAgICAgICAgICNuZ2JDb2xsYXBzZT1cIm5nYkNvbGxhcHNlXCJcbiAgICAgICAgICAjY29sbGFwc2VNb25pdG9yPVwiaW1wZGNDb2xsYXBzZU1vbml0b3JcIlxuICAgICAgICAgIFtpbXBkY0NvbGxhcHNlTW9uaXRvcl09XCJ0cnVlXCJcbiAgICAgICAgICAoY29sbGFwc2VDaGFuZ2UpPVwicm93Q29sbGFwc2VDaGFuZ2UuZW1pdCh7IHJvdywgY29sbGFwc2VkOiAkZXZlbnQgfSlcIj5cbiAgICAgICAgICBAaWYgKGNvbGxhcHNpYmxlVGVtcGxhdGVGb3JSb3cudGVtcGxhdGUpIHtcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlVGVtcGxhdGVGb3JSb3cudGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiByb3csXG4gICAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6IGNvbGxhcHNlTW9uaXRvci5jb2xsYXBzZWQoKSxcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBpc1Jvd1NlbGVjdGVkKHJvdy5pZCksXG4gICAgICAgICAgICAgICAgICBpbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgICBmaXJzdDogISFyb3dGaXJzdCxcbiAgICAgICAgICAgICAgICAgIGxhc3Q6ICEhcm93TGFzdCxcbiAgICAgICAgICAgICAgICAgIGV2ZW46ICEhcm93RXZlbixcbiAgICAgICAgICAgICAgICAgIG9kZDogISFyb3dPZGRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gICAgfSB9IEBlbXB0eSB7XG4gICAgPHRyPlxuICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwidGFibGVTcGFuXCIgY2xhc3M9XCJuby1kYXRhXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltub0RhdGFdXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICAgIH0gfVxuICA8L3Rib2R5PlxuICA8dGZvb3Q+XG4gICAgQGlmIChwYWdpbmF0aW9uQ29tcG9uZW50KSB7XG4gICAgPHRyPlxuICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwidGFibGVTcGFuXCI+XG4gICAgICAgIDxuZy1jb250ZW50XG4gICAgICAgICAgc2VsZWN0PVwiaW1wZGMtcGFnaW5hdGlvbiwgZGl2W2ltcGRjLXBhZ2luYXRpb25dXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICAgIH1cbiAgPC90Zm9vdD5cbjwvdGFibGU+XG59XG4iXX0=
474
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduLWNvbXBvbmVudHMvc3JjL2xpYi90YWJsZS9jb250YWluZXJzL3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1jb21wb25lbnRzL3NyYy9saWIvdGFibGUvY29udGFpbmVycy90YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osSUFBSSxFQUNKLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUdQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxHQUFHLElBQUksY0FBYyxFQUFFLEdBQUcsSUFBSSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFjeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUcxRDs7O0dBR0c7QUFNSCxNQUFNLE9BQU8sY0FBYztJQThCekI7O09BRUc7SUFDSCxJQUFvQixhQUFhLENBQUMsS0FBYztRQUM5QyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFB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QUFLO2dCQVlDLGtCQUFrQjtzQkFEeEIsS0FBSztnQkFNb0IsU0FBUztzQkFBbEMsTUFBTTtnQkFNbUIsTUFBTTtzQkFBL0IsTUFBTTtnQkFNbUIsU0FBUztzQkFBbEMsTUFBTTtnQkFPUyxjQUFjO3NCQUQ3QixNQUFNO2dCQVNTLFdBQVc7c0JBRDFCLE1BQU07Z0JBUVMsaUJBQWlCO3NCQURoQyxNQUFNO2dCQU9BLG1CQUFtQjtzQkFEekIsWUFBWTt1QkFBQyxtQkFBbUI7Z0JBSzFCLFdBQVc7c0JBRGpCLFlBQVk7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUsIERlY2ltYWxQaXBlLCBQZXJjZW50UGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXQgYXMgZ2V0TmVzdGVkVmFsdWUsIHNldCBhcyBzZXROZXN0ZWRWYWx1ZSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IERFQk9VTkNFX1RJTUUgfSBmcm9tICcuLi9jb25zdGFudHMvaW5kZXgnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW5UeXBlIH0gZnJvbSAnLi4vZW51bWVyYXRpb25zL2luZGV4JztcbmltcG9ydCB7XG4gIElDb2xsYXBzaWJsZVJvd0NvbnRlbnRDb250ZXh0LFxuICBJQ3VzdG9tQ2VsbFJlbmRlcmVyQ29tcG9uZW50cyxcbiAgSVNvcnRCeVBheWxvYWQsXG4gIElUYWJsZUFjdGlvbnNDb2x1bW5EZWYsXG4gIElUYWJsZUV2ZW50UGF5bG9hZCxcbiAgSVRhYmxlUm93QWN0aW9uUGF5bG9hZCxcbiAgSVRhYmxlUm93Q29sbGFwc2VDaGFuZ2UsXG4gIElUYWJsZVJvd0l0ZW0sXG4gIElUYWJsZVJvd0l0ZW1WYWx1ZVR5cGVzLFxuICBUYWJsZUNvbHVtbkRlZlxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2luZGV4JztcbmltcG9ydCB7IENoZWNrYm94Q2hhbmdlRXZlbnQgfSBmcm9tICcuLi8uLi9mb3JtLWZpZWxkJztcbmltcG9ydCB7IFRhYmxlVGhlbWVIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IENvbXBvbmVudFRoZW1lIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQnJhbmRlZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2JyYW5kaW5nJztcbmltcG9ydCB7IFBhZ2luYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9wYWdpbmF0aW9uJztcbmltcG9ydCB7IFRhYmxlQnVsa0FjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzJztcbmltcG9ydCB7IE5nYkNvbGxhcHNlIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuXG4vKipcbiAqIFRoZSBgVGFibGVDb21wb25lbnRgIChgPGltcGRjLXRhYmxlYCkgaXMgYSBkYXRhIHRhYmxlIGNvbXBvbmVudC5cbiAqIFRvIHVzZSwgaW1wb3J0IGBUYWJsZU1vZHVsZWAgZnJvbSBgQGltcGFydG5lci9kZXNpZ24tY29tcG9uZW50c2AuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ltcGRjLXRhYmxlJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0YWJsZSBkYXRhIGlzIGN1cnJlbnRseSBiZWluZyBsb2FkZWQuIFRoZSBgPGltcGRjLXNwaW5uZXI+YCB3aWxsIHNob3cgaWYgZGF0YSBpcyBsb2FkaW5nLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHZpc2libGUgY29sdW1ucyBvZiB0aGUgdGFibGUuICBFYWNoIGBJVGFibGVDb2x1bW5EZWZgIGRlZmluZXMgcHJvcGVydGllcyByZWdhcmRpbmcgdGhlIGRpc3BsYXksIGZvcm1hdHRpbmcgYW5kIGludGVyYWN0aW9uIG9mIHRoZSBjb2x1bW4ncyBjZWxscy5cbiAgICogQ29sdW1uL2NlbGwgY29sb3IgcHJlY2VkZW5jZSBpczpcbiAgICogMSkgYGZpZWxkQ29sb3JgIC0gYWxsb3dzIGFuIGBJVGFibGVDb2x1bW5EZWZgIHRvIGRlbGVnYXRlIHRoZSByZXNwb25zaWJpbGl0eSBvZiBjZWxsIGNvbG9yIHRvIGFuIGBJVGFibGVSb3dJdGVtYCBwcm9wZXJ0eS5cbiAgICogMikgYGNvbG9yR2V0dGVyYC0gYWxsb3dzIGFuIGBJVGFibGVDb2x1bW5EZWZgIHRvIGRlbGVnYXRlIHRoZSByZXNwb25zaWJpbGl0eSBvZiBjZWxsIGNvbG9yIHRvIGEgZnVuY3Rpb24gb2YgdGhlIGBJVGFibGVSb3dJdGVtYCBkZXRlcm1pbmVkIGJ5IHRoZSBkZXZlbG9wZXIuXG4gICAqIDMpIGBjb2xvcmAgLSBhIHByb3BlcnR5IG9mIGFuIGBJVGFibGVDb2x1bW5EZWZgLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNvbHVtbkRlZnM6IFRhYmxlQ29sdW1uRGVmPGFueT5bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0YWJsZSBpcyBzdHJpcGVkLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHN0cmlwZWQgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRhYmxlIHJvd3Mgc2hvdWxkIGFwcGx5IGhvdmVyIHN0eWxlcyB3aGVuIGhvdmVyZWQgb3ZlciB2aWEgY3Vyc29yLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGhvdmVyID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIGxheW91dCBhbGdvcml0aG0gdG8gYmUgdXNlZCB3aGVuIHJlbmRlcmluZyB0aGUgdGFibGUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbGF5b3V0OiAnYXV0bycgfCAnZml4ZWQnID0gJ2F1dG8nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGluZGl2aWR1YWwgcm93cyBjYW4gYmUgc2VsZWN0ZWQuIFdpbGwgYmUgYHRydWVgIGlmIGV4cGxpY2l0bHkgc2V0IHRvIGB0cnVlYCBvciBgY2FuU2VsZWN0QWxsUm93c2AgaXMgYHRydWVgLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHNldCBjYW5TZWxlY3RSb3dzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2FuU2VsZWN0Um93cyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2FuU2VsZWN0Um93cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYW5TZWxlY3RBbGxSb3dzIHx8IHRoaXMuX2NhblNlbGVjdFJvd3MgfHwgISF0aGlzLmJ1bGtBY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYWxsIHJvd3MgY2FuIGJlIHNlbGVjdGVkIGF0IG9uY2UuIFdpbGwgYmUgYHRydWVgIGlmIGV4cGxpY2l0bHkgc2V0IHRvIGB0cnVlYCBvciBpZiBgVGFibGVCdWxrQWN0aW9uc0NvbXBvbmVudGAgaXMgY29udGVudCBwcm9qZWN0ZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGNhblNlbGVjdEFsbFJvd3ModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jYW5TZWxlY3RBbGxSb3dzID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNhblNlbGVjdEFsbFJvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhblNlbGVjdEFsbFJvd3MgfHwgISF0aGlzLmJ1bGtBY3Rpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwbGFjZWhvbGRlciB0ZXh0IGFuZCBlbXB0eSB2YWx1ZSBkaXNwbGF5IHRleHQgZm9yIGA8aW1wZGMtc2VsZWN0PmAgaW5zdGFuY2VzIGluIGNlbGxzIHdpdGggYSBgSVRhYmxlQ29sdW1uRGVmYCBgY29sdW1uVHlwZWAgPSBgU2luZ2xlU2VsZWN0YCBvciBgTXVsdGlTZWxlY3RgLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHNlbGVjdFBsYWNlaG9sZGVyID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoZSBgY29sdW1uRGVmc2AgaW5kZXggb2YgdGhlIGN1cnJlbnRseSBzb3J0ZWQgY29sdW1uLlxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIHNvcnRDb2x1bW5JbmRleDogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdGlvbiBvZiB0aGUgY3VycmVudGx5IHNvcnRlZCBjb2x1bW4uXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc29ydERpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJztcblxuICAvKipcbiAgICogVGhlIHRhYmxlIHJvdyBkYXRhIGFzIGFuIGFycmF5IG9mIGBJVGFibGVSb3dJdGVtYC5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyB0YWJsZURhdGE6IElUYWJsZVJvd0l0ZW1bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBjdXJyZW50bHkgc2VsZWN0ZWQgSURzIGZyb20gdGhlIGB0YWJsZURhdGFgIGlucHV0LiAgQXJyYXkgbXVzdCBiZSBvZiB0eXBlIGAoc3RyaW5nIHwgbnVtYmVyKVtdYC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRSb3dJZHModmFsdWU6IChzdHJpbmcgfCBudW1iZXIpW10pIHtcbiAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcyA9IFsuLi52YWx1ZV07XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZFJvd0lkcygpOiAoc3RyaW5nIHwgbnVtYmVyKVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3NlbGVjdGVkUm93SWRzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVnaXN0ZXJlZCBjdXN0b20gY2VsbCByZW5kZXJlciBjb21wb25lbnRzIGF2YWlsYWJsZSB0byBiZSB1c2VkIGluIHRoZSB0YWJsZSBpbnN0YW5jZS5cbiAgICogRm9yIGEgZ2l2ZW4gYElUYWJsZUNvbHVtbkRlZmAgaW4gdGhlIGBjb2x1bW5EZWZzYCBpbnB1dCwgdGhlIGBjZWxsUmVuZGVyZXJDb21wb25lbnRgIHByb3BlcnR5IHNob3VsZCBiZSBzZXQgdG8gdGhlIGtleSBvZiB0aGUgcmVnaXN0ZXJlZCBjb21wb25lbnQgaW4gdGhpcyBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21DZWxsQ29tcG9uZW50cz86IElDdXN0b21DZWxsUmVuZGVyZXJDb21wb25lbnRzO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCB0ZW1wbGF0ZSBmb3IgY29udGVudCB0aGF0IG1heSBiZSByZW5kZXJlZCBiZWxvdyBhIHJvdyBpbiBhbiBjb2xsYXBzaWJsZSB2aWV3LiBWYWx1ZSBjYW4gZWl0aGVyIGJlIGFuIEFuZ3VsYXIgdGVtcGxhdGUgb3IgYSBmdW5jdGlvbiB0aGF0IGNhbiBldmFsdWF0ZWRcbiAgICogdG8gcmVzb2x2ZSB0byBhIHRlbXBsYXRlLiBUaGUgdGVtcGxhdGUgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGEgcHJvdmlkZWQgYElDb2xsYXBzaWJsZVJvd0NvbnRlbnRDb250ZXh0YCBvYmplY3QgYXMgdGVtcGxhdGUgY29udGV4dCwgd2l0aCB0aGUgY3VycmVudCBgSVRhYmxlUm93RGF0YWBcbiAgICogaW1wbGljaXRseSBhdmFpbGFibGUgYXMgYSBkZWZhdWx0IHRlbXBsYXRlIGtleS5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjb2xsYXBzaWJsZVRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8SUNvbGxhcHNpYmxlUm93Q29udGVudENvbnRleHQ8YW55Pj5cbiAgICB8IG51bGxcbiAgICB8ICgocm93OiBhbnkpID0+IFRlbXBsYXRlUmVmPElDb2xsYXBzaWJsZVJvd0NvbnRlbnRDb250ZXh0PGFueT4+IHwgbnVsbCkgPVxuICAgIG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBjbGlja2FibGUgY29udHJvbCB0aGF0IHdpbGwgdHJpZ2dlciBleHBhbnNpb24gYW5kIGNvbGxhcHNlIG9mIGNvbnRlbnQgd2hlbiB1c2luZyBgY29sbGFwc2libGVUZW1wbGF0ZWAgZnVuY3Rpb25hbGl0eS5cbiAgICogV2hlbiBzZXQgdG8gYGJ1dHRvbmAsIHRoZSBjb2xsYXBzaWJsZSBjb250ZW50J3Mgc3RhdGUgY2FuIG9ubHkgYmUgdG9nZ2xlZCBmcm9tIGEgY2xpY2thYmxlIGJ1dHRvbiBhdCB0aGUgc3RhcnQgb2YgdGhlIHJvdy5cbiAgICogV2hlbiBzZXQgdG8gYHJvd2AsIHRoZSBlbnRpcmUgcm93IHdpbGwgYmVjb21lIGEgY2xpY2thYmxlIHRyaWdnZXIuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgY29sbGFwc2libGVUcmlnZ2VyOiAnYnV0dG9uJyB8ICdyb3cnID0gJ2J1dHRvbic7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBvbmUgb3IgbXVsdGlwbGUgcm93cyBhcmUgc2VsZWN0ZWQuIEVtaXRzIGAoc3RyaW5nIHwgbnVtYmVyKVtdYCBwYXlsb2FkLlxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSByb3dTZWxlY3Q6IEV2ZW50RW1pdHRlcjwoc3RyaW5nIHwgbnVtYmVyKVtdPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjwoc3RyaW5nIHwgbnVtYmVyKVtdPigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBjb2x1bW4gaXMgc29ydGVkLiBFbWl0cyBgSVNvcnRCeVBheWxvYWRgIHBheWxvYWQuXG4gICAqL1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHNvcnRCeTogRXZlbnRFbWl0dGVyPElTb3J0QnlQYXlsb2FkPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxJU29ydEJ5UGF5bG9hZD4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGEgcm93IGxpbmsgaXMgY2xpY2tlZC4gRW1pdHMgYElUYWJsZUV2ZW50UGF5bG9hZGAgcGF5bG9hZC5cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgbGlua0NsaWNrOiBFdmVudEVtaXR0ZXI8SVRhYmxlRXZlbnRQYXlsb2FkPGFueT4+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPElUYWJsZUV2ZW50UGF5bG9hZDxhbnk+PigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSByb3cgYWN0aW9uIGlzIGNsaWNrZWQuIEVtaXRzIGFuIGBJVGFibGVSb3dBY3Rpb25QYXlsb2FkYCBwYXlsb2FkLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSByb3dBY3Rpb25DbGljazogRXZlbnRFbWl0dGVyPElUYWJsZVJvd0FjdGlvblBheWxvYWQ8YW55Pj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8SVRhYmxlUm93QWN0aW9uUGF5bG9hZDxhbnk+PigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSByb3cgaW5wdXQgdmFsdWUgaXMgY2hhbmdlZC4gRW1pdHRlZCBjZWxscyBvZiBgY29sdW1uVHlwZWAgYFNpbmdsZVNlbGVjdGAsIGBNdWx0aVNlbGVjdGAsIGBJbnB1dGAsIGBCb29sZWFuYCBvciBgSWNvbmAuXG4gICAqIE5vdCBlbWl0dGVkIGlmIGNvbHVtbiBkZWZpbml0aW9uIHByb3BlcnR5IGBkaXNhYmxlZGAgPSBgdHJ1ZWAuIEVtaXRzIGBJVGFibGVFdmVudFBheWxvYWRgIHBheWxvYWQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGlucHV0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8SVRhYmxlRXZlbnRQYXlsb2FkPGFueT4+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPElUYWJsZUV2ZW50UGF5bG9hZDxhbnk+PigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYSByb3cgd2l0aCBjb2xsYXBzaWJsZSBjb250ZW50IGhhcyBpdHMgY29sbGFwc2Ugc3RhdGUgY2hhbmdlZC5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgcm93Q29sbGFwc2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxcbiAgICBJVGFibGVSb3dDb2xsYXBzZUNoYW5nZTxhbnk+XG4gID4gPSBuZXcgRXZlbnRFbWl0dGVyPElUYWJsZVJvd0NvbGxhcHNlQ2hhbmdlPGFueT4+KCk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQENvbnRlbnRDaGlsZChQYWdpbmF0aW9uQ29tcG9uZW50KVxuICBwdWJsaWMgcGFnaW5hdGlvbkNvbXBvbmVudD86IFBhZ2luYXRpb25Db21wb25lbnQgPSB1bmRlZmluZWQ7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQENvbnRlbnRDaGlsZChUYWJsZUJ1bGtBY3Rpb25zQ29tcG9uZW50KVxuICBwdWJsaWMgYnVsa0FjdGlvbnM/OiBUYWJsZUJ1bGtBY3Rpb25zQ29tcG9uZW50ID0gdW5kZWZpbmVkO1xuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyByZWFkb25seSBjZWxsVHlwZSA9IFRhYmxlQ29sdW1uVHlwZTtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGFsbFNlbGVjdGVkID0gdHJ1ZTtcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGdldCBzb21lU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICEhdGhpcy5fc2VsZWN0ZWRSb3dJZHMgJiZcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICEhdGhpcy50YWJsZURhdGEgJiZcbiAgICAgIHRoaXMudGFibGVEYXRhLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLmxlbmd0aCA8IHRoaXMudGFibGVEYXRhLmxlbmd0aFxuICAgICk7XG4gIH1cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIHJlYWRvbmx5IGJyYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgZ2V0IHRhYmxlU3BhbigpOiBudW1iZXIge1xuICAgIGxldCBjb2xzID0gdGhpcy5jb2x1bW5EZWZzLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmNhblNlbGVjdFJvd3MpIHtcbiAgICAgIGNvbHMrKztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb2xsYXBzaWJsZVRlbXBsYXRlKSB7XG4gICAgICBjb2xzKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHM7XG4gIH1cblxuICBwcml2YXRlIF9jYW5TZWxlY3RSb3dzID0gZmFsc2U7XG4gIHByaXZhdGUgX2NhblNlbGVjdEFsbFJvd3MgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRSb3dJZHM6IChzdHJpbmcgfCBudW1iZXIpW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElUYWJsZUV2ZW50UGF5bG9hZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGVyY2VudFBpcGU6IFBlcmNlbnRQaXBlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RlY21pYWxQaXBlOiBEZWNpbWFsUGlwZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgQEhvc3QoKSBwcml2YXRlIF9icmFuZGVkOiBCcmFuZGVkRGlyZWN0aXZlXG4gICkge1xuICAgIHRoaXMuYnJhbmRlZCA9IF9icmFuZGVkID8gdHJ1ZSA6IGZhbHNlO1xuICAgIHRoaXMuX2lucHV0Q2hhbmdlXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoREVCT1VOQ0VfVElNRSkpXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuaW5wdXRDaGFuZ2UpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZFJvd0lkcyddIHx8IGNoYW5nZXNbJ3RhYmxlRGF0YSddKSB7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLnRhYmxlRGF0YSB8fFxuICAgICAgICAhdGhpcy50YWJsZURhdGEubGVuZ3RoIHx8XG4gICAgICAgICF0aGlzLnNlbGVjdGVkUm93SWRzIHx8XG4gICAgICAgICF0aGlzLnNlbGVjdGVkUm93SWRzLmxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkUm93SWRzLmxlbmd0aCA+PSB0aGlzLnRhYmxlRGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGdldE1haWxUb1ZhbHVlKFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgY3VycmVudFJvdzogSVRhYmxlUm93SXRlbVxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IHsgY29sdW1uVHlwZSwgdHJ1bmNhdGVkOiB0cnVuY2F0ZWQgfSA9XG4gICAgICB0aGlzLl9nZXRDb2x1bW5EZWZCeUluZGV4KGNvbHVtbkluZGV4KTtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZShjb2x1bW5JbmRleCwgY3VycmVudFJvdyk7XG5cbiAgICBpZiAoY29sdW1uVHlwZSAhPT0gVGFibGVDb2x1bW5UeXBlLkVtYWlsKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZSA/IGBtYWlsdG86JHt2YWx1ZX1gIDogdmFsdWU7XG5cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBnZXRTdHJpbmdWYWx1ZShcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRSb3c6IElUYWJsZVJvd0l0ZW1cbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoY29sdW1uSW5kZXgsIGN1cnJlbnRSb3cpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUuam9pbignOycpO1xuICAgIH1cblxuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGdldFZhbHVlKFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgY3VycmVudFJvdzogSVRhYmxlUm93SXRlbVxuICApOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgY29uc3QgeyBjb2x1bW5UeXBlLCB0cnVuY2F0ZWQ6IHRydW5jYXRlZCB9ID1cbiAgICAgIHRoaXMuX2dldENvbHVtbkRlZkJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlKGNvbHVtbkluZGV4LCBjdXJyZW50Um93KTtcblxuICAgIHN3aXRjaCAoY29sdW1uVHlwZSkge1xuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuRGVjaW1hbDoge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuX2RlY21pYWxQaXBlLnRyYW5zZm9ybShOdW1iZXIodmFsdWUpIHx8IDApIHx8ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgVGFibGVDb2x1bW5UeXBlLkRhdGU6IHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgICBjb25zdCB2YWxpZERhdGUgPSBkYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICB2YWx1ZSA9IHZhbGlkRGF0ZVxuICAgICAgICAgID8gdGhpcy5fZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdNTS9kZC95eXl5JykgfHwgJydcbiAgICAgICAgICA6IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuRGF0ZVRpbWU6IHtcbiAgICAgICAgY29uc3QgZGF0ZVRpbWUgPSBuZXcgRGF0ZShTdHJpbmcodmFsdWUpKTtcbiAgICAgICAgY29uc3QgdmFsaWREYXRlVGltZSA9XG4gICAgICAgICAgZGF0ZVRpbWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlVGltZS5nZXRUaW1lKCkpO1xuICAgICAgICB2YWx1ZSA9IHZhbGlkRGF0ZVRpbWVcbiAgICAgICAgICA/IHRoaXMuX2RhdGVQaXBlLnRyYW5zZm9ybShkYXRlVGltZSwgJ01NL2RkL3l5eXkgaDptbTpzcyBhJykgfHwgJydcbiAgICAgICAgICA6IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuTGluazoge1xuICAgICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvKF5cXHcrOnxeKVxcL1xcLy8sICcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5QZXJjZW50YWdlOiB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5fcGVyY2VudFBpcGUudHJhbnNmb3JtKE51bWJlcih2YWx1ZSkgfHwgMCkgfHwgJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuVXJsOiB7XG4gICAgICAgIGlmICghLyhodHRwKHM/KSk6XFwvXFwvL2kudGVzdChTdHJpbmcodmFsdWUpKSkge1xuICAgICAgICAgIHZhbHVlID0gYGh0dHBzOi8vJHt2YWx1ZX1gO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBUYWJsZUNvbHVtblR5cGUuVGV4dDoge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJzsgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRydW5jYXRlZCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRydW5jYXRlU3RyaW5nID0gKHN0cmluZyA9ICcnLCBtYXhMZW5ndGggPSB0cnVuY2F0ZWQpID0+XG4gICAgICAgICAgc3RyaW5nLmxlbmd0aCA+IG1heExlbmd0aFxuICAgICAgICAgICAgPyBgJHtzdHJpbmcuc3Vic3RyaW5nKDAsIG1heExlbmd0aCl94oCmYFxuICAgICAgICAgICAgOiBzdHJpbmc7XG5cbiAgICAgICAgISF0cnVuY2F0ZWRcbiAgICAgICAgICA/ICh2YWx1ZSA9IHRydW5jYXRlU3RyaW5nKFN0cmluZyh2YWx1ZSksIHRydW5jYXRlZCkpXG4gICAgICAgICAgOiB2YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFRhYmxlQ29sdW1uVHlwZS5NdWx0aVNlbGVjdDpcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNwbGl0KCc7Jyk/Lm1hcCh2ID0+IHYudHJpbSgpKSB8fCBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgZ2V0UmF3VmFsdWUoXG4gICAgY29sdW1uSW5kZXg6IG51bWJlcixcbiAgICBjdXJyZW50Um93OiBJVGFibGVSb3dJdGVtXG4gICk6IElUYWJsZVJvd0l0ZW1WYWx1ZVR5cGVzIHtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB0aGlzLl9nZXRDb2x1bW5EZWZCeUluZGV4KGNvbHVtbkluZGV4KTtcblxuICAgIGlmICghZmllbGQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudFJvd1tmaWVsZF0gfHwgJyc7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgZ2V0Q2VsbENvbG9yKFxuICAgIGNvbHVtbkRlZmluaXRpb246IFRhYmxlQ29sdW1uRGVmLFxuICAgIGl0ZW06IElUYWJsZVJvd0l0ZW1cbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVGFibGVUaGVtZUhlbHBlci5nZXRDZWxsQ29sb3IoY29sdW1uRGVmaW5pdGlvbiwgaXRlbSk7XG4gIH1cblxuICAvKiogQGlnbm9yZSAqL1xuICBwdWJsaWMgZ2V0VGhlbWUoXG4gICAgY29sdW1uRGVmaW5pdGlvbjogVGFibGVDb2x1bW5EZWYsXG4gICAgaXRlbTogSVRhYmxlUm93SXRlbVxuICApOiBDb21wb25lbnRUaGVtZSB7XG4gICAgcmV0dXJuIChcbiAgICAgIFRhYmxlVGhlbWVIZWxwZXIuZ2V0VGhlbWUoY29sdW1uRGVmaW5pdGlvbiwgaXRlbSkgfHxcbiAgICAgIENvbXBvbmVudFRoZW1lLlByaW1hcnlcbiAgICApO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGlzU29ydGVkQ29sdW1uKGNvbHVtbkluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1uSW5kZXggPT09IHRoaXMuc29ydENvbHVtbkluZGV4O1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGlzUm93U2VsZWN0ZWQoaWQ6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93SWRzLmluY2x1ZGVzKGlkKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBoYW5kbGVTZWxlY3RBbGwoZXZlbnQ6IENoZWNrYm94Q2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuU2VsZWN0QWxsUm93cyB8fCAhdGhpcy50YWJsZURhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuY2hlY2tlZCkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMgPSB0aGlzLnRhYmxlRGF0YT8ubWFwKHJvdyA9PiByb3cuaWQpIHx8IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcyA9IFtdO1xuICAgIH1cblxuICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLnNvcnQoKTtcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZFJvd0lkcy5sZW5ndGggPj0gdGhpcy50YWJsZURhdGEubGVuZ3RoO1xuXG4gICAgdGhpcy5yb3dTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkUm93SWRzKTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBoYW5kbGVTb3J0KGNvbHVtbkluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoY29sdW1uSW5kZXggPT09IHRoaXMuc29ydENvbHVtbkluZGV4KSB7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSB0aGlzLnNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc29ydENvbHVtbkluZGV4ID0gY29sdW1uSW5kZXg7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24gPSAnYXNjJztcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuX2dldENvbHVtbkRlZkJ5SW5kZXgoY29sdW1uSW5kZXgpLmZpZWxkIHx8ICcnO1xuXG4gICAgdGhpcy5zb3J0QnkuZW1pdCh7XG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIGZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiB0aGlzLnNvcnREaXJlY3Rpb25cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIHB1YmxpYyBoYW5kbGVSb3dTZWxlY3QoXG4gICAgZXZlbnQ6IENoZWNrYm94Q2hhbmdlRXZlbnQsXG4gICAgcm93SWQ6IG51bWJlciB8IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FuU2VsZWN0Um93cykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5jaGVja2VkICYmICF0aGlzLl9zZWxlY3RlZFJvd0lkcy5pbmNsdWRlcyhyb3dJZCkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93SWRzLnB1c2gocm93SWQpO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50LmNoZWNrZWQgJiYgdGhpcy5fc2VsZWN0ZWRSb3dJZHMuaW5jbHVkZXMocm93SWQpKSB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzLl9zZWxlY3RlZFJvd0lkcy5pbmRleE9mKHJvd0lkKTtcbiAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRSb3dJZHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd0lkcy5zb3J0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dJZHMubGVuZ3RoID49IHRoaXMudGFibGVEYXRhLmxlbmd0aDtcbiAgICB0aGlzLnJvd1NlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRSb3dJZHMpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGhhbmRsZUNlbGxWYWx1ZUNoYW5nZShcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBzdHJpbmdbXVxuICApOiB2b2lkIHtcbiAgICBjb25zdCB7IGZpZWxkLCBjb2x1bW5UeXBlIH0gPSB0aGlzLl9nZXRDb2x1bW5EZWZCeUluZGV4KGNvbHVtbkluZGV4KTtcbiAgICBsZXQgY3VycmVudFZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgc3RyaW5nW10gPSB2YWx1ZTtcblxuICAgIGlmIChjb2x1bW5UeXBlICE9PSBUYWJsZUNvbHVtblR5cGUuQm9vbGVhbiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9IGlzTmFOKE51bWJlcih2YWx1ZSkpID8gdmFsdWUgOiBOdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBpdGVtID0gdGhpcy50YWJsZURhdGFbcm93SW5kZXhdO1xuXG4gICAgc2V0TmVzdGVkVmFsdWUoaXRlbSwgU3RyaW5nKGZpZWxkKSwgY3VycmVudFZhbHVlKTtcblxuICAgIHRoaXMuX2lucHV0Q2hhbmdlLmVtaXQoe1xuICAgICAgY29sdW1uSW5kZXgsXG4gICAgICBpdGVtLFxuICAgICAgdmFsdWU6IGN1cnJlbnRWYWx1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGhhbmRsZUxpbmtDbGljayhcbiAgICBjb2x1bW5JbmRleDogbnVtYmVyLFxuICAgIGl0ZW06IElUYWJsZVJvd0l0ZW0sXG4gICAgZXZlbnQ6IEV2ZW50XG4gICk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICB0aGlzLmxpbmtDbGljay5lbWl0KHtcbiAgICAgIGl0ZW0sXG4gICAgICBjb2x1bW5JbmRleFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIGhhbmRsZUFjdGlvbkNsaWNrKFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgaXRlbTogSVRhYmxlUm93SXRlbSxcbiAgICBhY3Rpb25BcGlOYW1lOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5yb3dBY3Rpb25DbGljay5lbWl0KHtcbiAgICAgIGl0ZW0sXG4gICAgICBjb2x1bW5JbmRleCxcbiAgICAgIGFjdGlvbkFwaU5hbWVcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjb2x1bW5EZWZJc0FjdGlvbnMoXG4gICAgY29sdW1uRGVmOiBUYWJsZUNvbHVtbkRlZjxhbnk+XG4gICk6IGNvbHVtbkRlZiBpcyBJVGFibGVBY3Rpb25zQ29sdW1uRGVmPGFueT4ge1xuICAgIHJldHVybiBjb2x1bW5EZWYuY29sdW1uVHlwZSA9PT0gVGFibGVDb2x1bW5UeXBlLkFjdGlvbnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHJ5VG9nZ2xlQ29sbGFwc2UoXG4gICAgY29sbGFwc2libGVGb3JSb3dSZXN1bHQ6IHtcbiAgICAgIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJQ29sbGFwc2libGVSb3dDb250ZW50Q29udGV4dD4gfCBudWxsO1xuICAgIH0sXG4gICAgbmdiQ29sbGFwc2U6IE5nYkNvbGxhcHNlLFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICBzb3VyY2U6ICdidXR0b24nIHwgJ3JvdydcbiAgKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgY29sbGFwc2libGVGb3JSb3dSZXN1bHQudGVtcGxhdGUgJiZcbiAgICAgICh0aGlzLmNvbGxhcHNpYmxlVHJpZ2dlciA9PT0gJ3JvdycgfHwgdGhpcy5jb2xsYXBzaWJsZVRyaWdnZXIgPT09IHNvdXJjZSlcbiAgICApIHtcbiAgICAgIG5nYkNvbGxhcHNlLnRvZ2dsZSgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldENvbGxhcHNpYmxlVGVtcGxhdGVGb3JSb3cocm93OiBJVGFibGVSb3dJdGVtKToge1xuICAgIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxJQ29sbGFwc2libGVSb3dDb250ZW50Q29udGV4dD4gfCBudWxsO1xuICB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGVtcGxhdGU6XG4gICAgICAgIHRoaXMuY29sbGFwc2libGVUZW1wbGF0ZSAmJlxuICAgICAgICB0eXBlb2YgdGhpcy5jb2xsYXBzaWJsZVRlbXBsYXRlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyB0aGlzLmNvbGxhcHNpYmxlVGVtcGxhdGUocm93KVxuICAgICAgICAgIDogdGhpcy5jb2xsYXBzaWJsZVRlbXBsYXRlXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldENvbHVtbkRlZkJ5SW5kZXgoY29sdW1uSW5kZXg6IG51bWJlcik6IFRhYmxlQ29sdW1uRGVmIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5EZWZzW2NvbHVtbkluZGV4XTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFZhbHVlKFxuICAgIGNvbHVtbkluZGV4OiBudW1iZXIsXG4gICAgY3VycmVudFJvdzogSVRhYmxlUm93SXRlbVxuICApOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZmllbGQsIHZhbHVlR2V0dGVyIH0gPSB0aGlzLl9nZXRDb2x1bW5EZWZCeUluZGV4KGNvbHVtbkluZGV4KTtcblxuICAgICAgY29uc3QgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdID0gdmFsdWVHZXR0ZXJcbiAgICAgICAgPyB2YWx1ZUdldHRlcihjdXJyZW50Um93KVxuICAgICAgICA6IChnZXROZXN0ZWRWYWx1ZShjdXJyZW50Um93LCBTdHJpbmcoZmllbGQpLCAnJykgYXMgc3RyaW5nIHwgc3RyaW5nW10pO1xuXG4gICAgICByZXR1cm4gdmFsdWUgfHwgJyc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufVxuIiwiQGlmICh0YWJsZURhdGEpIHtcbiAgPHRhYmxlXG4gICAgaW1wZGNUYWJsZVxuICAgIFtzdHJpcGVkXT1cInN0cmlwZWQgJiYgIWNvbGxhcHNpYmxlVGVtcGxhdGVcIlxuICAgIFtsYXlvdXRdPVwibGF5b3V0XCJcbiAgICBbaG92ZXJdPVwiaG92ZXJcIj5cbiAgICA8dGhlYWQ+XG4gICAgICBAaWYgKCEhYnVsa0FjdGlvbnMpIHtcbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aCBbYXR0ci5jb2xzcGFuXT1cInRhYmxlU3BhblwiIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJidWxrLWFjdGlvbi1jb2x1bW5cIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImltcGRjLXRhYmxlLWJ1bGstYWN0aW9uc1wiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpbXBkY1RhYmxlQnVsa0FjdGlvbnNdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgIDwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICB9XG4gICAgICA8dHI+XG4gICAgICAgIEBpZiAoY29sbGFwc2libGVUZW1wbGF0ZSkge1xuICAgICAgICAgIDx0aFxuICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgW2NsYXNzLmhlYWRpbmctYmVsb3ctYnVsay1hY3Rpb25zXT1cIiEhYnVsa0FjdGlvbnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJpbXBkYy10YWJsZS1jb2xsYXBzaWJsZS1jb250ZW50LXJvdy1idXR0b24tY29udGFpbmVyXCI+PC90aD5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGNhblNlbGVjdFJvd3MpIHtcbiAgICAgICAgICA8dGhcbiAgICAgICAgICAgIHNjb3BlPVwiY29sXCJcbiAgICAgICAgICAgIGNsYXNzPVwiaW1wZGMtdGFibGUtc2VsZWN0YWJsZS1yb3ctdG9nZ2xlLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdoZWFkaW5nLWJlbG93LWJ1bGstYWN0aW9ucyc6ICEhYnVsa0FjdGlvbnNcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIEBpZiAoY2FuU2VsZWN0QWxsUm93cykge1xuICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxpbXBkYy1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgbmdNb2RlbFxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwic29tZVNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlU2VsZWN0QWxsKCRldmVudClcIj48L2ltcGRjLWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKFxuICAgICAgICAgIGNvbHVtbkRlZiBvZiBjb2x1bW5EZWZzO1xuICAgICAgICAgIHRyYWNrIGNvbHVtbkRlZjtcbiAgICAgICAgICBsZXQgY29sdW1uSW5kZXggPSAkaW5kZXhcbiAgICAgICAgKSB7XG4gICAgICAgICAgPHRoXG4gICAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdzb3J0ZWQtY29sdW1uJzogaXNTb3J0ZWRDb2x1bW4oY29sdW1uSW5kZXgpLFxuICAgICAgICAgICAgICAnc29ydGFibGUtY29sdW1uJzogY29sdW1uRGVmLnNvcnRlZCxcbiAgICAgICAgICAgICAgJ2hlYWRpbmctYmVsb3ctYnVsay1hY3Rpb25zJzogISFidWxrQWN0aW9uc1xuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlU29ydChjb2x1bW5JbmRleClcIj5cbiAgICAgICAgICAgIDxpbXBkYy1jb2x1bW4taGVhZGluZ1xuICAgICAgICAgICAgICBbaXNTb3J0YWJsZV09XCJjb2x1bW5EZWYuc29ydGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgW2NvbHVtbkluZGV4XT1cImNvbHVtbkluZGV4XCJcbiAgICAgICAgICAgICAgW3NvcnRDb2x1bW5JbmRleF09XCJzb3J0Q29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICBbZGlyZWN0aW9uXT1cInNvcnREaXJlY3Rpb25cIlxuICAgICAgICAgICAgICBbdGV4dF09XCJjb2x1bW5EZWYudGl0bGVcIlxuICAgICAgICAgICAgICAoc29ydCk9XCJoYW5kbGVTb3J0KCRldmVudClcIj5cbiAgICAgICAgICAgIDwvaW1wZGMtY29sdW1uLWhlYWRpbmc+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgfVxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICAgIDx0Ym9keT5cbiAgICAgIEBpZiAobG9hZGluZykge1xuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwidGFibGVTcGFuXCIgY2xhc3M9XCJkYXRhLWxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxpbXBkYy1zcGlubmVyPjwvaW1wZGMtc3Bpbm5lcj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBmb3IgKFxuICAgICAgICAgIHJvdyBvZiB0YWJsZURhdGE7XG4gICAgICAgICAgdHJhY2sgcm93LmlkO1xuICAgICAgICAgIGxldCByb3dJbmRleCA9ICRpbmRleDtcbiAgICAgICAgICBsZXQgcm93Rmlyc3QgPSAkZmlyc3Q7XG4gICAgICAgICAgbGV0IHJvd0xhc3QgPSAkbGFzdDtcbiAgICAgICAgICBsZXQgcm93RXZlbiA9ICRldmVuO1xuICAgICAgICAgIGxldCByb3dPZGQgPSAkb2RkXG4gICAgICAgICkge1xuICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICBnZXRDb2xsYXBzaWJsZVRlbXBsYXRlRm9yUm93KHJvdyk7XG4gICAgICAgICAgICBhcyBjb2xsYXBzaWJsZVRlbXBsYXRlRm9yUm93XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgW2NsYXNzLmltcGRjLXRhYmxlLWNvbGxhcHNpYmxlLXJvdy10cmlnZ2VyXT1cIlxuICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlVHJpZ2dlciA9PT0gJ3JvdydcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnRhYmxlLWFjdGl2ZV09XCJpc1Jvd1NlbGVjdGVkKHJvdy5pZClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgdHJ5VG9nZ2xlQ29sbGFwc2UoXG4gICAgICAgICAgICAgICAgICBjb2xsYXBzaWJsZVRlbXBsYXRlRm9yUm93LFxuICAgICAgICAgICAgICAgICAgbmdiQ29sbGFwc2UsXG4gICAgICAgICAgICAgICAgICAkZXZlbnQsXG4gICAgICAgICAgICAgICAgICAncm93J1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIEBpZiAoY29sbGFwc2libGVUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbXBkYy10YWJsZS1jb2xsYXBzaWJsZS1jb250ZW50LXJvdy1idXR0b24tY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5vcGVuZWRdPVwiIWNvbGxhcHNlTW9uaXRvci5uZ2JDb2xsYXBzaW5nKClcIj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY29sbGFwc2libGVUZW1wbGF0ZUZvclJvdy50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlUb2dnbGVDb2xsYXBzZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzaWJsZVRlbXBsYXRlRm9yUm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYkNvbGxhcHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnV0dG9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbXBkYy10YWJsZS1jb2xsYXBzaWJsZS1jb250ZW50LXJvdy1idXR0b24gYnRuIGJ0bi1saW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhciBmYS1jaGV2cm9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZhLXJvdGF0ZS05MF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY29sbGFwc2VNb25pdG9yLm5nYkNvbGxhcHNpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChjYW5TZWxlY3RSb3dzKSB7XG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiaW1wZGMtdGFibGUtc2VsZWN0YWJsZS1yb3ctdG9nZ2xlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltcGRjLWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXNSb3dTZWxlY3RlZChyb3cuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImhhbmRsZVJvd1NlbGVjdCgkZXZlbnQsIHJvdy5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj48L2ltcGRjLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgIGxldCBjb2x1bW5EZWYgb2YgY29sdW1uRGVmcztcbiAgICAgICAgICAgICAgICAgIGluZGV4IGFzIGNvbEluZGV4O1xuICAgICAgICAgICAgICAgICAgbGFzdCBhcyBpc0xhc3RcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICdjb2wtbm8tcGFkZGluZyc6ICEhY29sdW1uRGVmLm5vUGFkZGluZyxcbiAgICAgICAgICAgICAgICAgICdhY3Rpb25zLWNvbHVtbic6IGNvbHVtbkRlZi5jb2x1bW5UeXBlID09PSBjZWxsVHlwZS5BY3Rpb25zXG4gICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICBAc3dpdGNoIChjb2x1bW5EZWYuY29sdW1uVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBAY2FzZSAoY2VsbFR5cGUuQmFkZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbXBkYy1iYWRnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJnZXRTdHJpbmdWYWx1ZShjb2xJbmRleCwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGVtZV09XCJnZXRUaGVtZShjb2x1bW5EZWYsIHJvdylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaW1wZGMtYmFkZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChjZWxsVHlwZS5MaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImhhbmRsZUxpbmtDbGljayhjb2xJbmRleCwgcm93LCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFicmFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0VmFsdWUoY29sSW5kZXgsIHJvdykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGltcGRjQnJhbmRlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChjZWxsVHlwZS5VcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoIWJyYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmhyZWZdPVwiZ2V0VmFsdWUoY29sSW5kZXgsIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBkY0JyYW5kZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmhyZWZdPVwiZ2V0VmFsdWUoY29sSW5kZXgsIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChjZWxsVHlwZS5FbWFpbCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghYnJhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaHJlZl09XCInbWFpbHRvOicgKyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldFZhbHVlKGNvbEluZGV4LCByb3cpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGRjQnJhbmRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmhyZWZdPVwiZ2V0TWFpbFRvVmFsdWUoY29sSW5kZXgsIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChjZWxsVHlwZS5JbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGltcGRjSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGdldENlbGxDb2xvcihjb2x1bW5EZWYsIHJvdykgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRWYWx1ZShjb2xJbmRleCwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNlbGxWYWx1ZUNoYW5nZShjb2xJbmRleCwgcm93SW5kZXgsICRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChjZWxsVHlwZS5Cb29sZWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuZGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VmFsdWUoY29sSW5kZXgsIHJvdykgPT09ICd0cnVlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wZGMtaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGVja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBnZXRDZWxsQ29sb3IoY29sdW1uRGVmLCByb3cpIH19XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoIWNvbHVtbkRlZi5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1wZGMtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRWYWx1ZShjb2xJbmRleCwgcm93KSA9PT0gJ3RydWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNTd2l0Y2hdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNlbGxWYWx1ZUNoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuY2hlY2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPjwvaW1wZGMtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChjZWxsVHlwZS5TaW5nbGVTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbXBkYy1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZ2V0VmFsdWUoY29sSW5kZXgsIHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sdW1uRGVmLmRpc2FibGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dDbGVhcj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNlbGxWYWx1ZUNoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAodmFsdWUgb2YgY29sdW1uRGVmLnZhbHVlcyB8fCBbXTsgdHJhY2sgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1wZGMtc2VsZWN0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ2YWx1ZS5sYWJlbFwiPjwvaW1wZGMtc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pbXBkYy1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChjZWxsVHlwZS5NdWx0aVNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltcGRjLXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJnZXRWYWx1ZShjb2xJbmRleCwgcm93KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb2x1bW5EZWYuZGlzYWJsZWQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VsZWN0UGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZUNlbGxWYWx1ZUNoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbEluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAodmFsdWUgb2YgY29sdW1uRGVmLnZhbHVlcyB8fCBbXTsgdHJhY2sgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1wZGMtc2VsZWN0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJ2YWx1ZS5sYWJlbFwiPjwvaW1wZGMtc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pbXBkYy1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChjZWxsVHlwZS5DZWxsUmVuZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7eyBnZXRDZWxsQ29sb3IoY29sdW1uRGVmLCByb3cpIH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wZGNUYWJsZUluamVjdENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uRGVmXT1cImNvbHVtbkRlZlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dJdGVtXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21DZWxsQ29tcG9uZW50c109XCJjdXN0b21DZWxsQ29tcG9uZW50cyB8fCB7fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJnZXRSYXdWYWx1ZShjb2xJbmRleCwgcm93KVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChjZWxsVHlwZS5JY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBkYy1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImNvbHVtbkRlZi5pY29uTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgZ2V0Q2VsbENvbG9yKGNvbHVtbkRlZiwgcm93KSB9fVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKGNlbGxUeXBlLkFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gd2lsbCBhbHdheXMgcmV0dXJuICd0cnVlJywgYnV0IG5lZWRlZCB0byBzYXRpc2Z5IHRoZSB0eXBlIGVuZ2luZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sdW1uRGVmSXNBY3Rpb25zKGNvbHVtbkRlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGltcGRjLXJvdy1hY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkRlZl09XCJjb2x1bW5EZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dJdGVtXT1cInJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhc3RDb2x1bW5dPVwiaXNMYXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVBY3Rpb25DbGljayhjb2xJbmRleCwgcm93LCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj48L2ltcGRjLXJvdy1hY3Rpb25zPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7eyBnZXRDZWxsQ29sb3IoY29sdW1uRGVmLCByb3cpIH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXRWYWx1ZShjb2xJbmRleCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICBjbGFzcz1cImltcGRjLXRhYmxlLWNvbGxhcHNpYmxlLWNvbnRlbnQtcm93XCJcbiAgICAgICAgICAgICAgW2NsYXNzLm9wZW5lZF09XCIhY29sbGFwc2VNb25pdG9yLm5nYkNvbGxhcHNpbmcoKVwiPlxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ3LTEwMCBwLTBcIiBbYXR0ci5jb2xzcGFuXT1cInRhYmxlU3BhblwiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1wZGMtdGFibGUtY29sbGFwc2libGUtY29udGVudC1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgI25nYkNvbGxhcHNlPVwibmdiQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgI2NvbGxhcHNlTW9uaXRvcj1cImltcGRjQ29sbGFwc2VNb25pdG9yXCJcbiAgICAgICAgICAgICAgICAgIFtpbXBkY0NvbGxhcHNlTW9uaXRvcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIChjb2xsYXBzZUNoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgcm93Q29sbGFwc2VDaGFuZ2UuZW1pdCh7IHJvdywgY29sbGFwc2VkOiAkZXZlbnQgfSlcbiAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgQGlmIChjb2xsYXBzaWJsZVRlbXBsYXRlRm9yUm93LnRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2libGVUZW1wbGF0ZUZvclJvdy50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZDogY29sbGFwc2VNb25pdG9yLmNvbGxhcHNlZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBpc1Jvd1NlbGVjdGVkKHJvdy5pZCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHJvd0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0OiAhIXJvd0ZpcnN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q6ICEhcm93TGFzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuOiAhIXJvd0V2ZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2RkOiAhIXJvd09kZFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgfSBAZW1wdHkge1xuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cInRhYmxlU3BhblwiIGNsYXNzPVwibm8tZGF0YVwiPlxuICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbm9EYXRhXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvdGJvZHk+XG4gICAgPHRmb290PlxuICAgICAgQGlmIChwYWdpbmF0aW9uQ29tcG9uZW50KSB7XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJ0YWJsZVNwYW5cIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50XG4gICAgICAgICAgICAgIHNlbGVjdD1cImltcGRjLXBhZ2luYXRpb24sIGRpdltpbXBkYy1wYWdpbmF0aW9uXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgfVxuICAgIDwvdGZvb3Q+XG4gIDwvdGFibGU+XG59XG4iXX0=
@@ -21,10 +21,10 @@ export class CollapseMonitorDirective {
21
21
  this.collapseChange.emit(true);
22
22
  });
23
23
  }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: CollapseMonitorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
25
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.1", type: CollapseMonitorDirective, selector: "[impdcCollapseMonitor]", outputs: { collapseChange: "collapseChange" }, exportAs: ["impdcCollapseMonitor"], hostDirectives: [{ directive: i1.NgbCollapse, inputs: ["ngbCollapse", "impdcCollapseMonitor"] }], ngImport: i0 }); }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CollapseMonitorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
25
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: CollapseMonitorDirective, selector: "[impdcCollapseMonitor]", outputs: { collapseChange: "collapseChange" }, exportAs: ["impdcCollapseMonitor"], hostDirectives: [{ directive: i1.NgbCollapse, inputs: ["ngbCollapse", "impdcCollapseMonitor"] }], ngImport: i0 }); }
26
26
  }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: CollapseMonitorDirective, decorators: [{
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CollapseMonitorDirective, decorators: [{
28
28
  type: Directive,
29
29
  args: [{
30
30
  exportAs: 'impdcCollapseMonitor',
@@ -39,4 +39,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImpor
39
39
  }], ctorParameters: () => [], propDecorators: { collapseChange: [{
40
40
  type: Output
41
41
  }] } });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2UtbW9uaXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL2RpcmVjdGl2ZXMvY29sbGFwc2UtbW9uaXRvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUVOLE1BQU0sRUFDTixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFhekQsTUFBTSxPQUFPLHdCQUF3QjtJQVNuQztRQVJpQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxjQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRzdCLG1CQUFjLEdBQzVCLElBQUksWUFBWSxFQUFXLENBQUM7UUFHNUIsMkhBQTJIO1FBQzNILElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTlCLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0F2QlUsd0JBQXdCO2tHQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBVnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsY0FBYyxFQUFFO3dCQUNkOzRCQUNFLFNBQVMsRUFBRSxXQUFXOzRCQUN0QixNQUFNLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQzt5QkFDOUM7cUJBQ0Y7aUJBQ0Y7d0RBT2lCLGNBQWM7c0JBRDdCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBzaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ2JDb2xsYXBzZSB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQERpcmVjdGl2ZSh7XG4gIGV4cG9ydEFzOiAnaW1wZGNDb2xsYXBzZU1vbml0b3InLFxuICBzZWxlY3RvcjogJ1tpbXBkY0NvbGxhcHNlTW9uaXRvcl0nLFxuICBob3N0RGlyZWN0aXZlczogW1xuICAgIHtcbiAgICAgIGRpcmVjdGl2ZTogTmdiQ29sbGFwc2UsXG4gICAgICBpbnB1dHM6IFsnbmdiQ29sbGFwc2U6IGltcGRjQ29sbGFwc2VNb25pdG9yJ11cbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQ29sbGFwc2VNb25pdG9yRGlyZWN0aXZlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmdiQ29sbGFwc2UgPSBpbmplY3QoTmdiQ29sbGFwc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgY29sbGFwc2VkID0gc2lnbmFsKHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgbmdiQ29sbGFwc2luZyA9IHNpZ25hbCh0cnVlKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGNvbGxhcHNlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBlYWdlcmx5IGFzc2VydCB0cnVlIGFzIHNvb24gYXMgKnNvbWV0aGluZyogaXMgZXhwZWN0ZWQgdG8gYmUgc2hvd24sIHRoZW4gYXNzZXJ0IGZhbHNlIHdoZW4gd2Uga25vdyB3ZSd2ZSBmdWxseSBjb2xsYXBzZWRcbiAgICB0aGlzLl9uZ2JDb2xsYXBzZS5uZ2JDb2xsYXBzZUNoYW5nZS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5uZ2JDb2xsYXBzaW5nLnNldCh2YWx1ZSk7XG5cbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZWQuc2V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5jb2xsYXBzZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLl9uZ2JDb2xsYXBzZS5oaWRkZW4uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY29sbGFwc2VkLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuY29sbGFwc2VDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGFwc2UtbW9uaXRvci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL2RpcmVjdGl2ZXMvY29sbGFwc2UtbW9uaXRvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUVOLE1BQU0sRUFDTixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFhekQsTUFBTSxPQUFPLHdCQUF3QjtJQVNuQztRQVJpQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxjQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRzdCLG1CQUFjLEdBQzVCLElBQUksWUFBWSxFQUFXLENBQUM7UUFHNUIsMkhBQTJIO1FBQzNILElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTlCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBdkJVLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQVZwQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLGNBQWMsRUFBRTt3QkFDZDs0QkFDRSxTQUFTLEVBQUUsV0FBVzs0QkFDdEIsTUFBTSxFQUFFLENBQUMsbUNBQW1DLENBQUM7eUJBQzlDO3FCQUNGO2lCQUNGO3dEQU9pQixjQUFjO3NCQUQ3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgc2lnbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdiQ29sbGFwc2UgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBEaXJlY3RpdmUoe1xuICBleHBvcnRBczogJ2ltcGRjQ29sbGFwc2VNb25pdG9yJyxcbiAgc2VsZWN0b3I6ICdbaW1wZGNDb2xsYXBzZU1vbml0b3JdJyxcbiAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICB7XG4gICAgICBkaXJlY3RpdmU6IE5nYkNvbGxhcHNlLFxuICAgICAgaW5wdXRzOiBbJ25nYkNvbGxhcHNlOiBpbXBkY0NvbGxhcHNlTW9uaXRvciddXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbGxhcHNlTW9uaXRvckRpcmVjdGl2ZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX25nYkNvbGxhcHNlID0gaW5qZWN0KE5nYkNvbGxhcHNlKTtcbiAgcHVibGljIHJlYWRvbmx5IGNvbGxhcHNlZCA9IHNpZ25hbCh0cnVlKTtcbiAgcHVibGljIHJlYWRvbmx5IG5nYkNvbGxhcHNpbmcgPSBzaWduYWwodHJ1ZSk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBjb2xsYXBzZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gZWFnZXJseSBhc3NlcnQgdHJ1ZSBhcyBzb29uIGFzICpzb21ldGhpbmcqIGlzIGV4cGVjdGVkIHRvIGJlIHNob3duLCB0aGVuIGFzc2VydCBmYWxzZSB3aGVuIHdlIGtub3cgd2UndmUgZnVsbHkgY29sbGFwc2VkXG4gICAgdGhpcy5fbmdiQ29sbGFwc2UubmdiQ29sbGFwc2VDaGFuZ2Uuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMubmdiQ29sbGFwc2luZy5zZXQodmFsdWUpO1xuXG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29sbGFwc2VkLnNldCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuY29sbGFwc2VDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5fbmdiQ29sbGFwc2UuaGlkZGVuLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxhcHNlZC5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLmNvbGxhcHNlQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -25,10 +25,10 @@ export class TableInjectComponentDirective {
25
25
  componentRef.instance.rowItem = item;
26
26
  componentRef.instance.params = cellRendererParams;
27
27
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: TableInjectComponentDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Directive }); }
29
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.1", type: TableInjectComponentDirective, selector: "[impdcTableInjectComponent]", inputs: { columnDef: "columnDef", value: "value", rowItem: "rowItem", customCellComponents: "customCellComponents" }, ngImport: i0 }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: TableInjectComponentDirective, deps: [{ token: i0.ViewContainerRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: TableInjectComponentDirective, selector: "[impdcTableInjectComponent]", inputs: { columnDef: "columnDef", value: "value", rowItem: "rowItem", customCellComponents: "customCellComponents" }, ngImport: i0 }); }
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: TableInjectComponentDirective, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: TableInjectComponentDirective, decorators: [{
32
32
  type: Directive,
33
33
  args: [{
34
34
  selector: '[impdcTableInjectComponent]'
@@ -43,4 +43,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImpor
43
43
  }], customCellComponents: [{
44
44
  type: Input
45
45
  }] } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5qZWN0LWNvbXBvbmVudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL2RpcmVjdGl2ZXMvdGFibGUtaW5qZWN0LWNvbXBvbmVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBR04sTUFBTSxlQUFlLENBQUM7O0FBYXZCLE1BQU0sT0FBTyw2QkFBNkI7SUFNeEMsWUFDbUIsaUJBQW1DLEVBQ25DLHlCQUFtRDtRQURuRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMEI7UUFOdEQsVUFBSyxHQUE0QixFQUFFLENBQUM7UUFDcEMsWUFBTyxHQUFrQixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNuQyx5QkFBb0IsR0FBa0MsRUFBRSxDQUFDO0lBS3RFLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUMxQixPQUFPO1NBQ1I7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzFCLE1BQU0sbUJBQW1CLEdBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUvQixNQUFNLGdCQUFnQixHQUNwQixJQUFJLENBQUMseUJBQXlCLENBQUMsdUJBQXVCLENBQ3BELG1CQUFtQixDQUNwQixDQUFDO1FBQ0osTUFBTSxZQUFZLEdBQ2hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQWdCLGdCQUFnQixDQUFDLENBQUM7UUFFMUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN6QyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDckMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUM7SUFDcEQsQ0FBQzs4R0FyQ1UsNkJBQTZCO2tHQUE3Qiw2QkFBNkI7OzJGQUE3Qiw2QkFBNkI7a0JBSHpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLDZCQUE2QjtpQkFDeEM7NEhBRW1DLFNBQVM7c0JBQTFDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNULEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxvQkFBb0I7c0JBQW5DLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gIERpcmVjdGl2ZSxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgSUNlbGxSZW5kZXJlcixcbiAgSUN1c3RvbUNlbGxSZW5kZXJlckNvbXBvbmVudHMsXG4gIElUYWJsZVJvd0l0ZW0sXG4gIElUYWJsZVJvd0l0ZW1WYWx1ZVR5cGVzLFxuICBUYWJsZUNvbHVtbkRlZlxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2luZGV4JztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2ltcGRjVGFibGVJbmplY3RDb21wb25lbnRdJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUluamVjdENvbXBvbmVudERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBjb2x1bW5EZWYhOiBUYWJsZUNvbHVtbkRlZjtcbiAgQElucHV0KCkgcHVibGljIHZhbHVlOiBJVGFibGVSb3dJdGVtVmFsdWVUeXBlcyA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgcm93SXRlbTogSVRhYmxlUm93SXRlbSA9IHsgaWQ6IDAgfTtcbiAgQElucHV0KCkgcHVibGljIGN1c3RvbUNlbGxDb21wb25lbnRzOiBJQ3VzdG9tQ2VsbFJlbmRlcmVyQ29tcG9uZW50cyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZW5kZXJDdXN0b21DZWxsKCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJDdXN0b21DZWxsKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgY2VsbFJlbmRlcmVyQ29tcG9uZW50LCBjZWxsUmVuZGVyZXJQYXJhbXMgfSA9IHRoaXMuY29sdW1uRGVmO1xuICAgIGlmICghY2VsbFJlbmRlcmVyQ29tcG9uZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbSA9IHRoaXMucm93SXRlbTtcbiAgICBjb25zdCBjdXN0b21DZWxsQ29tcG9uZW50ID1cbiAgICAgIHRoaXMuY3VzdG9tQ2VsbENvbXBvbmVudHNbY2VsbFJlbmRlcmVyQ29tcG9uZW50XTtcblxuICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPVxuICAgICAgdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5PElDZWxsUmVuZGVyZXI+KFxuICAgICAgICBjdXN0b21DZWxsQ29tcG9uZW50XG4gICAgICApO1xuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9XG4gICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxJQ2VsbFJlbmRlcmVyPihjb21wb25lbnRGYWN0b3J5KTtcblxuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS52YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnJvd0l0ZW0gPSBpdGVtO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5wYXJhbXMgPSBjZWxsUmVuZGVyZXJQYXJhbXM7XG4gIH1cbn1cbiJdfQ==
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaW5qZWN0LWNvbXBvbmVudC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tY29tcG9uZW50cy9zcmMvbGliL3RhYmxlL2RpcmVjdGl2ZXMvdGFibGUtaW5qZWN0LWNvbXBvbmVudC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxLQUFLLEVBR04sTUFBTSxlQUFlLENBQUM7O0FBYXZCLE1BQU0sT0FBTyw2QkFBNkI7SUFNeEMsWUFDbUIsaUJBQW1DLEVBQ25DLHlCQUFtRDtRQURuRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMEI7UUFOdEQsVUFBSyxHQUE0QixFQUFFLENBQUM7UUFDcEMsWUFBTyxHQUFrQixFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNuQyx5QkFBb0IsR0FBa0MsRUFBRSxDQUFDO0lBS3RFLENBQUM7SUFFRyxRQUFRO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzNCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMxQixNQUFNLG1CQUFtQixHQUN2QixJQUFJLENBQUMsb0JBQW9CLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUVuRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFL0IsTUFBTSxnQkFBZ0IsR0FDcEIsSUFBSSxDQUFDLHlCQUF5QixDQUFDLHVCQUF1QixDQUNwRCxtQkFBbUIsQ0FDcEIsQ0FBQztRQUNKLE1BQU0sWUFBWSxHQUNoQixJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFnQixnQkFBZ0IsQ0FBQyxDQUFDO1FBRTFFLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDekMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDO0lBQ3BELENBQUM7OEdBckNVLDZCQUE2QjtrR0FBN0IsNkJBQTZCOzsyRkFBN0IsNkJBQTZCO2tCQUh6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSw2QkFBNkI7aUJBQ3hDOzRIQUVtQyxTQUFTO3NCQUExQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDVCxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1Usb0JBQW9CO3NCQUFuQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBEaXJlY3RpdmUsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIElDZWxsUmVuZGVyZXIsXG4gIElDdXN0b21DZWxsUmVuZGVyZXJDb21wb25lbnRzLFxuICBJVGFibGVSb3dJdGVtLFxuICBJVGFibGVSb3dJdGVtVmFsdWVUeXBlcyxcbiAgVGFibGVDb2x1bW5EZWZcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbmRleCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tpbXBkY1RhYmxlSW5qZWN0Q29tcG9uZW50XSdcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVJbmplY3RDb21wb25lbnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgY29sdW1uRGVmITogVGFibGVDb2x1bW5EZWY7XG4gIEBJbnB1dCgpIHB1YmxpYyB2YWx1ZTogSVRhYmxlUm93SXRlbVZhbHVlVHlwZXMgPSAnJztcbiAgQElucHV0KCkgcHVibGljIHJvd0l0ZW06IElUYWJsZVJvd0l0ZW0gPSB7IGlkOiAwIH07XG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21DZWxsQ29tcG9uZW50czogSUN1c3RvbUNlbGxSZW5kZXJlckNvbXBvbmVudHMgPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVuZGVyQ3VzdG9tQ2VsbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyQ3VzdG9tQ2VsbCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNlbGxSZW5kZXJlckNvbXBvbmVudCwgY2VsbFJlbmRlcmVyUGFyYW1zIH0gPSB0aGlzLmNvbHVtbkRlZjtcbiAgICBpZiAoIWNlbGxSZW5kZXJlckNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnJvd0l0ZW07XG4gICAgY29uc3QgY3VzdG9tQ2VsbENvbXBvbmVudCA9XG4gICAgICB0aGlzLmN1c3RvbUNlbGxDb21wb25lbnRzW2NlbGxSZW5kZXJlckNvbXBvbmVudF07XG5cbiAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG5cbiAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID1cbiAgICAgIHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeTxJQ2VsbFJlbmRlcmVyPihcbiAgICAgICAgY3VzdG9tQ2VsbENvbXBvbmVudFxuICAgICAgKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPVxuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQ8SUNlbGxSZW5kZXJlcj4oY29tcG9uZW50RmFjdG9yeSk7XG5cbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UudmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5yb3dJdGVtID0gaXRlbTtcbiAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UucGFyYW1zID0gY2VsbFJlbmRlcmVyUGFyYW1zO1xuICB9XG59XG4iXX0=
@@ -25,10 +25,10 @@ export class TableDirective {
25
25
  get classTableHover() {
26
26
  return this.hover;
27
27
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: TableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.1", type: TableDirective, selector: "table[impdcTable]", inputs: { striped: "striped", hover: "hover", layout: "layout" }, host: { properties: { "style.table-layout": "this.layout", "class.table": "this.classTable", "class.table-striped": "this.classTableStriped", "class.table-hover": "this.classTableHover" } }, ngImport: i0 }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: TableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.0", type: TableDirective, selector: "table[impdcTable]", inputs: { striped: "striped", hover: "hover", layout: "layout" }, host: { properties: { "style.table-layout": "this.layout", "class.table": "this.classTable", "class.table-striped": "this.classTableStriped", "class.table-hover": "this.classTableHover" } }, ngImport: i0 }); }
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.1", ngImport: i0, type: TableDirective, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: TableDirective, decorators: [{
32
32
  type: Directive,
33
33
  args: [{
34
34
  selector: 'table[impdcTable]'