@mediusinc/mng-commons 0.4.2 → 0.4.5
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.
- package/assets/i18n/en.json +21 -19
- package/assets/i18n/sl.json +19 -17
- package/esm2020/lib/components/action/action.component.mjs +4 -4
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +4 -8
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +1 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +1 -1
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +1 -1
- package/esm2020/lib/components/tableview/table/table.component.mjs +7 -3
- package/esm2020/lib/components/tableview/tableview.component.mjs +4 -4
- package/esm2020/lib/config/models/mng-config.model.mjs +1 -1
- package/esm2020/lib/descriptors/action.descriptor.mjs +29 -10
- package/esm2020/lib/descriptors/editor.descriptor.mjs +4 -4
- package/esm2020/lib/descriptors/field.descriptor.mjs +3 -3
- package/esm2020/lib/pipes/i18n-property.pipe.mjs +3 -3
- package/esm2020/lib/pipes/link-formatter.pipe.mjs +1 -1
- package/esm2020/lib/services/action-executor.service.mjs +13 -14
- package/esm2020/lib/services/commons.service.mjs +77 -52
- package/esm2020/lib/services/configuration.service.mjs +53 -19
- package/esm2020/lib/services/providers/commons-init.provider.mjs +1 -1
- package/esm2020/lib/services/providers/config-service.provider.mjs +13 -3
- package/esm2020/lib/services/tokens/commons-init.token.mjs +3 -0
- package/esm2020/lib/services/tokens/index.mjs +2 -1
- package/esm2020/lib/services/view-container.component.service.mjs +2 -2
- package/esm2020/lib/utils/i18n.util.mjs +212 -144
- package/esm2020/lib/utils/notification.util.mjs +16 -17
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/mediusinc-mng-commons.mjs +505 -348
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +495 -344
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/components/tableview/table/table.component.d.ts +4 -1
- package/lib/config/models/mng-config.model.d.ts +1 -1
- package/lib/descriptors/action.descriptor.d.ts +13 -6
- package/lib/pipes/link-formatter.pipe.d.ts +1 -1
- package/lib/services/action-executor.service.d.ts +4 -2
- package/lib/services/commons.service.d.ts +5 -3
- package/lib/services/configuration.service.d.ts +3 -2
- package/lib/services/providers/commons-init.provider.d.ts +2 -1
- package/lib/services/providers/config-service.provider.d.ts +2 -1
- package/lib/services/tokens/commons-init.token.d.ts +3 -0
- package/lib/services/tokens/index.d.ts +1 -0
- package/lib/services/view-container.component.service.d.ts +1 -1
- package/lib/utils/i18n.util.d.ts +52 -21
- package/lib/utils/notification.util.d.ts +4 -4
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -72,6 +72,7 @@ export class MngTableComponent {
|
|
|
72
72
|
this.subscriptions = [];
|
|
73
73
|
}
|
|
74
74
|
ngOnInit() {
|
|
75
|
+
this.viewContainer = this.viewContainerInit ?? this.viewContainerService ?? undefined;
|
|
75
76
|
this.filterDescriptors = this.descriptor.columns.filter(c => typeof c.filterDescriptor !== 'undefined').map(c => c.filterDescriptor);
|
|
76
77
|
if (this.descriptor.paginationMode === PaginationModeEnum.InfiniteScroll) {
|
|
77
78
|
this.infiniteScroll = true;
|
|
@@ -214,7 +215,7 @@ export class MngTableComponent {
|
|
|
214
215
|
this.isSortChanged = false;
|
|
215
216
|
this.dataProviderLoadingSubject.next(false);
|
|
216
217
|
}, err => {
|
|
217
|
-
NotificationUtil.tableNotificationError(this.translate, this.descriptor, err, this.
|
|
218
|
+
NotificationUtil.tableNotificationError(this.translate, this.descriptor, err, this.viewContainer);
|
|
218
219
|
const emptyQueryResult = new MediusQueryResult();
|
|
219
220
|
emptyQueryResult.pageData = [];
|
|
220
221
|
emptyQueryResult.allDataCount = 0;
|
|
@@ -280,7 +281,7 @@ export class MngTableComponent {
|
|
|
280
281
|
}
|
|
281
282
|
}
|
|
282
283
|
MngTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngTableComponent, deps: [{ token: i0.Injector }, { token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.TranslateService }, { token: i3.MngViewContainerComponentService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
283
|
-
MngTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngTableComponent, selector: "mng-table", inputs: { descriptor: "descriptor", items: "items", queryResult: "queryResult", loading: "loading", dataProvider: "dataProvider", useQueryParams: "useQueryParams", selectionMode: "selectionMode", selectionEnabled: "selectionEnabled", isColumnClickable: "isColumnClickable", captionComponent: "captionComponent", columnActionComponent: "columnActionComponent" }, outputs: { loadEventEmitter: "tableLoad", cellClickEventEmitter: "cellClick", selectionChangeEventEmitter: "selectionChange", captionCmpInstEventEmitter: "captionComponentInstance", columnActionCmpInstEventEmitter: "columnActionComponentInstance" }, queries: [{ propertyName: "templates", predicate: MngTemplateDirective }], viewQueries: [{ propertyName: "primeTable", first: true, predicate: Table, descendants: true }, { propertyName: "components", predicate: MngComponentDirective, descendants: true }], ngImport: i0, template: "<div [style.height]=\"scrollHeight === 'flex' ? 'calc(100vh - ' + descriptor.tableFullHeightOffset + 'px)' : null\">\n <!-- MUST NOT use observable for value when using virtual scroll - does not work for some reason -->\n <p-table\n *ngIf=\"!useQueryParams || useQueryParamsInitialized\"\n [value]=\"infiniteScroll ? dataProviderInfiniteScrollItems : (queryResult$ | async)?.pageData ?? []\"\n [dataKey]=\"$any(descriptor.dataKeyProperty)\"\n [lazy]=\"useDataProvider\"\n [loading]=\"(loading$ | async) ?? false\"\n [paginator]=\"useDataProvider && !infiniteScroll\"\n [rows]=\"$any(infiniteScroll ? 20 : rows)\"\n [first]=\"$any(infiniteScroll ? 0 : offset)\"\n [totalRecords]=\"$any(infiniteScroll ? null : (queryResult$ | async)?.allDataCount ?? 0)\"\n [rowsPerPageOptions]=\"$any(infiniteScroll ? null : rowsPerPageOptions)\"\n [showCurrentPageReport]=\"!infiniteScroll\"\n [currentPageReportTemplate]=\"'mngTable.paginationMsg' | translate\"\n [multiSortMeta]=\"$any(multiSortMeta)\"\n [filters]=\"filterMetadata\"\n [(selection)]=\"selection\"\n (selectionChange)=\"onSelectionChange($event)\"\n [scrollable]=\"infiniteScroll\"\n [virtualScroll]=\"infiniteScroll\"\n [virtualRowHeight]=\"$any(rowHeight)\"\n [scrollHeight]=\"$any(scrollHeight)\"\n [rowHover]=\"true\"\n (onLazyLoad)=\"onTableLazyLoad($event)\"\n (onSort)=\"onTableSort($event)\"\n (onFilter)=\"onTableFilter($event)\"\n [selectionMode]=\"selectionMode\"\n sortMode=\"multiple\"\n responsiveLayout=\"scroll\">\n <ng-template *ngIf=\"captionTemplate || captionComponent || descriptor.title\" pTemplate=\"caption\">\n <ng-container *ngIf=\"captionTemplate; else componentOrDefaultCaption\">\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n </ng-container>\n <ng-template #componentOrDefaultCaption>\n <div *ngIf=\"captionComponent; else defaultCaption\" [mngComponent]=\"captionComponent\" (instanceCreated)=\"onCaptionCmpInst($event)\"></div>\n <ng-template #defaultCaption>\n <h5 class=\"p-0 m-0\">{{ descriptor.title }}</h5>\n </ng-template>\n </ng-template>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr *ngIf=\"!descriptor.hideHeader\">\n <th *ngIf=\"selectionEnabled && selectionMode === 'multiple'\">\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n </th>\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\n <th *ngIf=\"selectionEnabled && selectionMode === 'single'\" style=\"width: 2.25em\"></th>\n <ng-container *ngFor=\"let col of descriptor.columns\">\n <th *ngIf=\"col.isSortEnabled\" [pSortableColumn]=\"col.property\">\n <div class=\"flex justify-content-between align-items-center\">\n {{ col.title ?? (col.property | i18nProperty: descriptor.model) | translate }}\n <p-sortIcon [field]=\"col.property\"></p-sortIcon>\n <mng-table-column-filter\n *ngIf=\"col.filterDescriptor && descriptor.filterDisplay === filterDisplayMenu\"\n class=\"ml-auto\"\n [display]=\"descriptor.filterDisplay\"\n [descriptor]=\"col.filterDescriptor\">\n </mng-table-column-filter>\n </div>\n </th>\n <th *ngIf=\"!col.isSortEnabled\">\n {{ col.title ?? (col.property | i18nProperty: descriptor.model) | translate }}\n <ng-container>\n <mng-table-column-filter\n *ngIf=\"col.filterDescriptor && descriptor.filterDisplay === filterDisplayMenu\"\n class=\"ml-auto\"\n [display]=\"descriptor.filterDisplay\"\n [descriptor]=\"col.filterDescriptor\">\n </mng-table-column-filter>\n </ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"columnActionTemplate || columnActionComponent\"></th>\n </tr>\n <tr *ngIf=\"descriptor.filterDisplay === filterDisplayRow\">\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\n <th *ngIf=\"selectionEnabled && selectionMode === 'single'\" style=\"width: 2.25em\"></th>\n <th *ngFor=\"let col of descriptor.columns\">\n <div class=\"flex\" *ngIf=\"col.filterDescriptor\">\n <mng-table-column-filter [display]=\"descriptor.filterDisplay\" [descriptor]=\"col.filterDescriptor\"></mng-table-column-filter>\n </div>\n </th>\n <th *ngIf=\"columnActionTemplate || columnActionComponent\"></th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-item let-idx=\"rowIndex\">\n <tr [style.height.px]=\"descriptor.rowHeight\">\n <td *ngIf=\"selectionEnabled && selectionMode === 'multiple'\">\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\n </td>\n <td *ngIf=\"selectionEnabled && selectionMode === 'single'\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n <td *ngFor=\"let col of descriptor.columns\" (click)=\"onCellClick(col, item, idx)\" [class.clickable]=\"isColumnClickable\">\n <mng-table-column-value [descriptor]=\"col\" [item]=\"item\"></mng-table-column-value>\n </td>\n <td *ngIf=\"columnActionTemplate || columnActionComponent\" class=\"text-right\">\n <ng-container *ngIf=\"columnActionTemplate; else showColumnActionComponent\">\n <ng-container *ngTemplateOutlet=\"columnActionTemplate; context: {rowItem: item, rowIndex: idx}\"></ng-container>\n </ng-container>\n <ng-template #showColumnActionComponent>\n <span [mngComponent]=\"columnActionComponent!\" (instanceCreated)=\"onColumnActionCmpInst($event)\"></span>\n </ng-template>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"loadingbody\">\n <tr [style.height.px]=\"descriptor.rowHeight\">\n <td [attr.colspan]=\"descriptor.columns.length + (columnActionTemplate || columnActionComponent ? 1 : 0) + (selectionEnabled ? 1 : 0)\">\n <div class=\"loading-text\"></div>\n <p-skeleton [ngStyle]=\"{width: '100%'}\"></p-skeleton>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <tr [style.height.px]=\"rowHeight\">\n <td [attr.colspan]=\"descriptor.columns.length + (columnActionTemplate || columnActionComponent ? 1 : 0) + (selectionEnabled ? 1 : 0)\">\n {{ 'mngTable.noItems' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n", components: [{ type: i4.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i4.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { type: i4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i5.MngTableColumnFilterComponent, selector: "mng-table-column-filter", inputs: ["descriptor", "display"] }, { type: i4.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { type: i4.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { type: i6.MngTableColumnValueComponent, selector: "mng-table-column-value", inputs: ["descriptor", "item"] }, { type: i7.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i10.MngComponentDirective, selector: "[mngComponent]", inputs: ["mngComponent", "inputs"], outputs: ["instanceCreated"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "async": i8.AsyncPipe, "translate": i2.TranslatePipe, "i18nProperty": i11.MngI18nPropertyPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
284
|
+
MngTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngTableComponent, selector: "mng-table", inputs: { descriptor: "descriptor", items: "items", queryResult: "queryResult", loading: "loading", dataProvider: "dataProvider", useQueryParams: "useQueryParams", selectionMode: "selectionMode", selectionEnabled: "selectionEnabled", isColumnClickable: "isColumnClickable", viewContainerInit: ["viewContainer", "viewContainerInit"], captionComponent: "captionComponent", columnActionComponent: "columnActionComponent" }, outputs: { loadEventEmitter: "tableLoad", cellClickEventEmitter: "cellClick", selectionChangeEventEmitter: "selectionChange", captionCmpInstEventEmitter: "captionComponentInstance", columnActionCmpInstEventEmitter: "columnActionComponentInstance" }, queries: [{ propertyName: "templates", predicate: MngTemplateDirective }], viewQueries: [{ propertyName: "primeTable", first: true, predicate: Table, descendants: true }, { propertyName: "components", predicate: MngComponentDirective, descendants: true }], ngImport: i0, template: "<div [style.height]=\"scrollHeight === 'flex' ? 'calc(100vh - ' + descriptor.tableFullHeightOffset + 'px)' : null\">\n <!-- MUST NOT use observable for value when using virtual scroll - does not work for some reason -->\n <p-table\n *ngIf=\"!useQueryParams || useQueryParamsInitialized\"\n [value]=\"infiniteScroll ? dataProviderInfiniteScrollItems : (queryResult$ | async)?.pageData ?? []\"\n [dataKey]=\"$any(descriptor.dataKeyProperty)\"\n [lazy]=\"useDataProvider\"\n [loading]=\"(loading$ | async) ?? false\"\n [paginator]=\"useDataProvider && !infiniteScroll\"\n [rows]=\"$any(infiniteScroll ? 20 : rows)\"\n [first]=\"$any(infiniteScroll ? 0 : offset)\"\n [totalRecords]=\"$any(infiniteScroll ? null : (queryResult$ | async)?.allDataCount ?? 0)\"\n [rowsPerPageOptions]=\"$any(infiniteScroll ? null : rowsPerPageOptions)\"\n [showCurrentPageReport]=\"!infiniteScroll\"\n [currentPageReportTemplate]=\"'mngTable.paginationMsg' | translate\"\n [multiSortMeta]=\"$any(multiSortMeta)\"\n [filters]=\"filterMetadata\"\n [(selection)]=\"selection\"\n (selectionChange)=\"onSelectionChange($event)\"\n [scrollable]=\"infiniteScroll\"\n [virtualScroll]=\"infiniteScroll\"\n [virtualRowHeight]=\"$any(rowHeight)\"\n [scrollHeight]=\"$any(scrollHeight)\"\n [rowHover]=\"true\"\n (onLazyLoad)=\"onTableLazyLoad($event)\"\n (onSort)=\"onTableSort($event)\"\n (onFilter)=\"onTableFilter($event)\"\n [selectionMode]=\"selectionMode\"\n sortMode=\"multiple\"\n responsiveLayout=\"scroll\">\n <ng-template *ngIf=\"captionTemplate || captionComponent || descriptor.title\" pTemplate=\"caption\">\n <ng-container *ngIf=\"captionTemplate; else componentOrDefaultCaption\">\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n </ng-container>\n <ng-template #componentOrDefaultCaption>\n <div *ngIf=\"captionComponent; else defaultCaption\" [mngComponent]=\"captionComponent\" (instanceCreated)=\"onCaptionCmpInst($event)\"></div>\n <ng-template #defaultCaption>\n <h5 class=\"p-0 m-0\">{{ descriptor.title }}</h5>\n </ng-template>\n </ng-template>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr *ngIf=\"!descriptor.hideHeader\">\n <th *ngIf=\"selectionEnabled && selectionMode === 'multiple'\">\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n </th>\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\n <th *ngIf=\"selectionEnabled && selectionMode === 'single'\" style=\"width: 2.25em\"></th>\n <ng-container *ngFor=\"let col of descriptor.columns\">\n <th *ngIf=\"col.isSortEnabled\" [pSortableColumn]=\"col.property\">\n <div class=\"flex justify-content-between align-items-center\">\n {{ col.title ?? (col.property | i18nProperty: descriptor.model) | translate }}\n <p-sortIcon [field]=\"col.property\"></p-sortIcon>\n <mng-table-column-filter\n *ngIf=\"col.filterDescriptor && descriptor.filterDisplay === filterDisplayMenu\"\n class=\"ml-auto\"\n [display]=\"descriptor.filterDisplay\"\n [descriptor]=\"col.filterDescriptor\">\n </mng-table-column-filter>\n </div>\n </th>\n <th *ngIf=\"!col.isSortEnabled\">\n {{ col.title ?? (col.property | i18nProperty: descriptor.model) | translate }}\n <ng-container>\n <mng-table-column-filter\n *ngIf=\"col.filterDescriptor && descriptor.filterDisplay === filterDisplayMenu\"\n class=\"ml-auto\"\n [display]=\"descriptor.filterDisplay\"\n [descriptor]=\"col.filterDescriptor\">\n </mng-table-column-filter>\n </ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"columnActionTemplate || columnActionComponent\"></th>\n </tr>\n <tr *ngIf=\"descriptor.filterDisplay === filterDisplayRow\">\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\n <th *ngIf=\"selectionEnabled && selectionMode === 'single'\" style=\"width: 2.25em\"></th>\n <th *ngFor=\"let col of descriptor.columns\">\n <div class=\"flex\" *ngIf=\"col.filterDescriptor\">\n <mng-table-column-filter [display]=\"descriptor.filterDisplay\" [descriptor]=\"col.filterDescriptor\"></mng-table-column-filter>\n </div>\n </th>\n <th *ngIf=\"columnActionTemplate || columnActionComponent\"></th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-item let-idx=\"rowIndex\">\n <tr [style.height.px]=\"descriptor.rowHeight\">\n <td *ngIf=\"selectionEnabled && selectionMode === 'multiple'\">\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\n </td>\n <td *ngIf=\"selectionEnabled && selectionMode === 'single'\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n <td *ngFor=\"let col of descriptor.columns\" (click)=\"onCellClick(col, item, idx)\" [class.clickable]=\"isColumnClickable\">\n <mng-table-column-value [descriptor]=\"col\" [item]=\"item\"></mng-table-column-value>\n </td>\n <td *ngIf=\"columnActionTemplate || columnActionComponent\" class=\"text-right\">\n <ng-container *ngIf=\"columnActionTemplate; else showColumnActionComponent\">\n <ng-container *ngTemplateOutlet=\"columnActionTemplate; context: {rowItem: item, rowIndex: idx}\"></ng-container>\n </ng-container>\n <ng-template #showColumnActionComponent>\n <span [mngComponent]=\"columnActionComponent!\" (instanceCreated)=\"onColumnActionCmpInst($event)\"></span>\n </ng-template>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"loadingbody\">\n <tr [style.height.px]=\"descriptor.rowHeight\">\n <td [attr.colspan]=\"descriptor.columns.length + (columnActionTemplate || columnActionComponent ? 1 : 0) + (selectionEnabled ? 1 : 0)\">\n <div class=\"loading-text\"></div>\n <p-skeleton [ngStyle]=\"{width: '100%'}\"></p-skeleton>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <tr [style.height.px]=\"rowHeight\">\n <td [attr.colspan]=\"descriptor.columns.length + (columnActionTemplate || columnActionComponent ? 1 : 0) + (selectionEnabled ? 1 : 0)\">\n {{ 'mngTable.noItems' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n", components: [{ type: i4.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollDelay", "virtualRowHeight", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "minBufferPx", "maxBufferPx", "responsiveLayout", "breakpoint", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll"], outputs: ["selectAllChange", "selectionChange", "contextMenuSelectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { type: i4.TableHeaderCheckbox, selector: "p-tableHeaderCheckbox", inputs: ["disabled", "inputId", "name", "ariaLabel"] }, { type: i4.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { type: i5.MngTableColumnFilterComponent, selector: "mng-table-column-filter", inputs: ["descriptor", "display"] }, { type: i4.TableCheckbox, selector: "p-tableCheckbox", inputs: ["disabled", "value", "index", "inputId", "name", "required", "ariaLabel"] }, { type: i4.TableRadioButton, selector: "p-tableRadioButton", inputs: ["disabled", "value", "index", "inputId", "name", "ariaLabel"] }, { type: i6.MngTableColumnValueComponent, selector: "mng-table-column-value", inputs: ["descriptor", "item"] }, { type: i7.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "style", "shape", "animation", "borderRadius", "size", "width", "height"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i10.MngComponentDirective, selector: "[mngComponent]", inputs: ["mngComponent", "inputs"], outputs: ["instanceCreated"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "async": i8.AsyncPipe, "translate": i2.TranslatePipe, "i18nProperty": i11.MngI18nPropertyPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
284
285
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngTableComponent, decorators: [{
|
|
285
286
|
type: Component,
|
|
286
287
|
args: [{ selector: 'mng-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [style.height]=\"scrollHeight === 'flex' ? 'calc(100vh - ' + descriptor.tableFullHeightOffset + 'px)' : null\">\n <!-- MUST NOT use observable for value when using virtual scroll - does not work for some reason -->\n <p-table\n *ngIf=\"!useQueryParams || useQueryParamsInitialized\"\n [value]=\"infiniteScroll ? dataProviderInfiniteScrollItems : (queryResult$ | async)?.pageData ?? []\"\n [dataKey]=\"$any(descriptor.dataKeyProperty)\"\n [lazy]=\"useDataProvider\"\n [loading]=\"(loading$ | async) ?? false\"\n [paginator]=\"useDataProvider && !infiniteScroll\"\n [rows]=\"$any(infiniteScroll ? 20 : rows)\"\n [first]=\"$any(infiniteScroll ? 0 : offset)\"\n [totalRecords]=\"$any(infiniteScroll ? null : (queryResult$ | async)?.allDataCount ?? 0)\"\n [rowsPerPageOptions]=\"$any(infiniteScroll ? null : rowsPerPageOptions)\"\n [showCurrentPageReport]=\"!infiniteScroll\"\n [currentPageReportTemplate]=\"'mngTable.paginationMsg' | translate\"\n [multiSortMeta]=\"$any(multiSortMeta)\"\n [filters]=\"filterMetadata\"\n [(selection)]=\"selection\"\n (selectionChange)=\"onSelectionChange($event)\"\n [scrollable]=\"infiniteScroll\"\n [virtualScroll]=\"infiniteScroll\"\n [virtualRowHeight]=\"$any(rowHeight)\"\n [scrollHeight]=\"$any(scrollHeight)\"\n [rowHover]=\"true\"\n (onLazyLoad)=\"onTableLazyLoad($event)\"\n (onSort)=\"onTableSort($event)\"\n (onFilter)=\"onTableFilter($event)\"\n [selectionMode]=\"selectionMode\"\n sortMode=\"multiple\"\n responsiveLayout=\"scroll\">\n <ng-template *ngIf=\"captionTemplate || captionComponent || descriptor.title\" pTemplate=\"caption\">\n <ng-container *ngIf=\"captionTemplate; else componentOrDefaultCaption\">\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\n </ng-container>\n <ng-template #componentOrDefaultCaption>\n <div *ngIf=\"captionComponent; else defaultCaption\" [mngComponent]=\"captionComponent\" (instanceCreated)=\"onCaptionCmpInst($event)\"></div>\n <ng-template #defaultCaption>\n <h5 class=\"p-0 m-0\">{{ descriptor.title }}</h5>\n </ng-template>\n </ng-template>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr *ngIf=\"!descriptor.hideHeader\">\n <th *ngIf=\"selectionEnabled && selectionMode === 'multiple'\">\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n </th>\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\n <th *ngIf=\"selectionEnabled && selectionMode === 'single'\" style=\"width: 2.25em\"></th>\n <ng-container *ngFor=\"let col of descriptor.columns\">\n <th *ngIf=\"col.isSortEnabled\" [pSortableColumn]=\"col.property\">\n <div class=\"flex justify-content-between align-items-center\">\n {{ col.title ?? (col.property | i18nProperty: descriptor.model) | translate }}\n <p-sortIcon [field]=\"col.property\"></p-sortIcon>\n <mng-table-column-filter\n *ngIf=\"col.filterDescriptor && descriptor.filterDisplay === filterDisplayMenu\"\n class=\"ml-auto\"\n [display]=\"descriptor.filterDisplay\"\n [descriptor]=\"col.filterDescriptor\">\n </mng-table-column-filter>\n </div>\n </th>\n <th *ngIf=\"!col.isSortEnabled\">\n {{ col.title ?? (col.property | i18nProperty: descriptor.model) | translate }}\n <ng-container>\n <mng-table-column-filter\n *ngIf=\"col.filterDescriptor && descriptor.filterDisplay === filterDisplayMenu\"\n class=\"ml-auto\"\n [display]=\"descriptor.filterDisplay\"\n [descriptor]=\"col.filterDescriptor\">\n </mng-table-column-filter>\n </ng-container>\n </th>\n </ng-container>\n <th *ngIf=\"columnActionTemplate || columnActionComponent\"></th>\n </tr>\n <tr *ngIf=\"descriptor.filterDisplay === filterDisplayRow\">\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\n <th *ngIf=\"selectionEnabled && selectionMode === 'single'\" style=\"width: 2.25em\"></th>\n <th *ngFor=\"let col of descriptor.columns\">\n <div class=\"flex\" *ngIf=\"col.filterDescriptor\">\n <mng-table-column-filter [display]=\"descriptor.filterDisplay\" [descriptor]=\"col.filterDescriptor\"></mng-table-column-filter>\n </div>\n </th>\n <th *ngIf=\"columnActionTemplate || columnActionComponent\"></th>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"body\" let-item let-idx=\"rowIndex\">\n <tr [style.height.px]=\"descriptor.rowHeight\">\n <td *ngIf=\"selectionEnabled && selectionMode === 'multiple'\">\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\n </td>\n <td *ngIf=\"selectionEnabled && selectionMode === 'single'\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n <td *ngFor=\"let col of descriptor.columns\" (click)=\"onCellClick(col, item, idx)\" [class.clickable]=\"isColumnClickable\">\n <mng-table-column-value [descriptor]=\"col\" [item]=\"item\"></mng-table-column-value>\n </td>\n <td *ngIf=\"columnActionTemplate || columnActionComponent\" class=\"text-right\">\n <ng-container *ngIf=\"columnActionTemplate; else showColumnActionComponent\">\n <ng-container *ngTemplateOutlet=\"columnActionTemplate; context: {rowItem: item, rowIndex: idx}\"></ng-container>\n </ng-container>\n <ng-template #showColumnActionComponent>\n <span [mngComponent]=\"columnActionComponent!\" (instanceCreated)=\"onColumnActionCmpInst($event)\"></span>\n </ng-template>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"loadingbody\">\n <tr [style.height.px]=\"descriptor.rowHeight\">\n <td [attr.colspan]=\"descriptor.columns.length + (columnActionTemplate || columnActionComponent ? 1 : 0) + (selectionEnabled ? 1 : 0)\">\n <div class=\"loading-text\"></div>\n <p-skeleton [ngStyle]=\"{width: '100%'}\"></p-skeleton>\n </td>\n </tr>\n </ng-template>\n\n <ng-template pTemplate=\"emptymessage\">\n <tr [style.height.px]=\"rowHeight\">\n <td [attr.colspan]=\"descriptor.columns.length + (columnActionTemplate || columnActionComponent ? 1 : 0) + (selectionEnabled ? 1 : 0)\">\n {{ 'mngTable.noItems' | translate }}\n </td>\n </tr>\n </ng-template>\n </p-table>\n</div>\n" }]
|
|
@@ -304,6 +305,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
|
|
|
304
305
|
type: Input
|
|
305
306
|
}], isColumnClickable: [{
|
|
306
307
|
type: Input
|
|
308
|
+
}], viewContainerInit: [{
|
|
309
|
+
type: Input,
|
|
310
|
+
args: ['viewContainer']
|
|
307
311
|
}], captionComponent: [{
|
|
308
312
|
type: Input
|
|
309
313
|
}], columnActionComponent: [{
|
|
@@ -333,4 +337,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
|
|
|
333
337
|
type: ViewChild,
|
|
334
338
|
args: [Table]
|
|
335
339
|
}] } });
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3RhYmxldmlldy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvdGFibGV2aWV3L3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBRVosS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBSU4sU0FBUyxFQUNULFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQU12QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxVQUFVLEVBQUUsYUFBYSxFQUFnQixFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3pGLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRWhGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVwRSxJQUFPLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7QUFDNUMsSUFBTyxrQkFBa0IsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFPL0QsTUFBTSxPQUFPLGlCQUFpQjtJQWdGMUIsWUFDWSxRQUFrQixFQUNsQixNQUFjLEVBQ2QsY0FBOEIsRUFDOUIsU0FBMkIsRUFDZixvQkFBbUU7UUFKL0UsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ2YseUJBQW9CLEdBQXBCLG9CQUFvQixDQUErQztRQXBGM0UscUJBQWdCLEdBQXNDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUM7UUFDNUYsc0JBQWlCLEdBQXNDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7UUFVOUYsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFFdkMsdUJBQXVCO1FBQ1Asa0JBQWEsR0FBRyxVQUFVLENBQUM7UUFDM0IscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXpDLFNBQVM7UUFDTyxzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFNekMsZ0JBQWdCO1FBQ1kscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQXFCLENBQUM7UUFDekQsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7UUFDaEUsZ0NBQTJCLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUNsRCwrQkFBMEIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2hELG9DQUErQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFXMUcsMEJBQTBCO1FBQ25CLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUdsQyxvQ0FBK0IsR0FBYSxFQUFFLENBQUM7UUFFdEQsK0JBQStCO1FBQ2YsdUJBQWtCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLFNBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNYLGtCQUFhLEdBQXNCLElBQUksQ0FBQztRQUN4QyxtQkFBYyxHQUFxRCxFQUFFLENBQUM7UUFFN0Usa0JBQWtCO1FBQ1gsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLGNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBRXZDLFlBQVk7UUFDTCxjQUFTLEdBQWEsRUFBRSxDQUFDO1FBRWhDLGdCQUFnQjtRQUNSLHdCQUFtQixHQUFRLElBQUksQ0FBQztRQUNoQyxtQ0FBOEIsR0FBRyxJQUFJLGFBQWEsQ0FBdUIsQ0FBQyxDQUFDLENBQUM7UUFDNUUsK0JBQTBCLEdBQUcsSUFBSSxhQUFhLENBQVUsQ0FBQyxDQUFDLENBQUM7UUFFM0QsMkNBQXNDLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLHdDQUFtQyxHQUFHLENBQUMsQ0FBQztRQUdoRCxlQUFlO1FBQ1Asb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDdEIsc0JBQWlCLEdBQWlDLEVBQUUsQ0FBQztRQUVyRCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFReEMsQ0FBQztJQUVHLFFBQVE7UUFDWCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLEtBQUssV0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFpQixDQUFDLENBQUM7UUFFdEksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsS0FBSyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUU7WUFDdEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUMzQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztTQUMvQjtRQUVELDhEQUE4RDtRQUM5RCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsZ0RBQWdEO1lBQ2hELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksRUFBRSxDQUFDO1lBQy9ELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxpQkFBaUIsRUFBSyxDQUFDO1lBQ3BELGdCQUFnQixDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDL0IsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUUzRCxpQkFBaUI7WUFDakIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDcEY7U0FDSjthQUFNO1lBQ0gsbUZBQW1GO1lBQ25GLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN4RztpQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssWUFBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJO2dCQUNyRiw4REFBOEQ7Z0JBQzlELGtIQUFrSDtnQkFDbEgsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNSLE1BQU0sV0FBVyxHQUFHLElBQUksaUJBQWlCLEVBQUssQ0FBQztvQkFDL0MsV0FBVyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQzdCLFdBQVcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztvQkFDeEMsT0FBTyxXQUFXLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQyxDQUNMLENBQUM7YUFDTDtZQUNELElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtnQkFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN4RjtTQUNKO1FBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3JCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDaEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDekM7YUFBTTtZQUNILHFDQUFxQztZQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM5QyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN4QixJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQzthQUNwQztTQUNKO0lBQ0wsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5QixRQUFRLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDeEIsS0FBSyxTQUFTO29CQUNWLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztvQkFDekMsTUFBTTtnQkFDVixLQUFLLGNBQWM7b0JBQ2YsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7b0JBQzlDLE1BQU07YUFDYjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLENBQUMsd0JBQXdCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsR0FBRyxLQUFLLEVBQUUsV0FBVyxHQUFHLEtBQUs7UUFDaEQsSUFBSSxDQUFDLHlCQUF5QixDQUMxQixXQUFXLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsSUFBSSxJQUFJLGdCQUFnQixFQUFFLEVBQ2pKLFNBQVMsQ0FDWixDQUFDO0lBQ04sQ0FBQztJQUVNLGVBQWUsQ0FBQyxLQUFvQjtRQUN2QyxJQUFJLENBQUMsK0JBQStCLEdBQUcsS0FBSyxDQUFDO1FBQzdDLElBQUksQ0FBQyxzQ0FBc0MsRUFBRSxDQUFDO1FBRTlDLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQzFELGtFQUFrRTtnQkFDbEUsS0FBSyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUNuRDtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRTtnQkFDckIsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUMvQixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsV0FBVyxFQUFFLGNBQWMsQ0FBQywwQ0FBMEMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVHLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLHlDQUF5QyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDM0gsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDckQ7SUFDTCxDQUFDO0lBRUQsNkRBQTZEO0lBQ3RELFdBQVcsQ0FBQyxLQUFVO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCw2REFBNkQ7SUFDdEQsYUFBYSxDQUFDLEtBQVU7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVNLFdBQVcsQ0FBQyxHQUE2QixFQUFFLElBQU8sRUFBRSxHQUFXO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLElBQUksc0JBQXNCLENBQUksR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxLQUFlO1FBQ3BDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVNLGdCQUFnQixDQUFJLFFBQVc7UUFDbEMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0scUJBQXFCLENBQUksUUFBVztRQUN2QyxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxhQUFzQyxJQUFJLEVBQUUsU0FBUyxHQUFHLElBQUk7UUFDMUYsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdkIsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbkY7UUFDRCxJQUFJLENBQUMsNEJBQTRCLEdBQUcsVUFBVSxDQUFDO1FBQy9DLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO1FBRTNDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsU0FBUyxDQUNyRyxHQUFHLENBQUMsRUFBRTtZQUNGLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDckIsSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7b0JBQzVDLElBQUksQ0FBQywrQkFBK0IsR0FBRyxFQUFFLENBQUM7aUJBQzdDO2dCQUNELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLENBQUMsVUFBVyxDQUFDLFdBQVcsSUFBSSxDQUFDLEVBQUUsVUFBVyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzFJLElBQUksQ0FBQywrQkFBK0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7YUFDcEY7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqRDtZQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxFQUNELEdBQUcsQ0FBQyxFQUFFO1lBQ0YsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsb0JBQW9CLElBQUksU0FBUyxDQUFDLENBQUM7WUFDdEgsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGlCQUFpQixFQUFLLENBQUM7WUFDcEQsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUMvQixnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FDSixDQUFDO1FBRUYsSUFBSSxTQUFTLEVBQUU7WUFDWCxNQUFNLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7WUFDekMsUUFBUSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsK0JBQStCLElBQUksU0FBUyxDQUFDO1lBQzNFLFFBQVEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDeEM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsTUFBYztRQUMzQyxNQUFNLGdCQUFnQixHQUFHLGNBQWMsQ0FBQyx5Q0FBeUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlJLElBQUksSUFBSSxDQUFDLHNDQUFzQyxHQUFHLElBQUksQ0FBQyxtQ0FBbUMsR0FBRyxDQUFDLEVBQUU7WUFDNUYsOERBQThEO1lBQzlELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQztRQUN0QyxJQUFJLENBQUMseUJBQXlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsZ0JBQWtDO1FBQy9ELE1BQU0sYUFBYSxHQUFlLEVBQUUsQ0FBQztRQUNyQyxNQUFNLGVBQWUsR0FBcUQsRUFBRSxDQUFDO1FBRTdFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0IsZUFBZSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRztnQkFDMUIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsU0FBUyxFQUFFLENBQUMsQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRO2FBQ3RFLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUVILGdCQUFnQixFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDL0MsYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDZixLQUFLLEVBQUUsQ0FBQztnQkFDUixLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzRCxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztRQUVILGdCQUFnQixFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxjQUFjLEtBQUssQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNySCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNuRyxJQUFJLFVBQVUsSUFBSSxRQUFRLEVBQUU7Z0JBQ3hCLGVBQWUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUc7b0JBQ25DLEtBQUssRUFBRSxDQUFDLENBQUMsV0FBVztvQkFDcEIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUJBQ3pCLENBQUM7YUFDTDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxlQUFlLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsV0FBVyxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUU7WUFDaEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FDMUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDUCxDQUFVO2dCQUNOLEtBQUssRUFBRSxDQUFDO2dCQUNSLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEQsQ0FBQSxDQUNSLENBQUM7U0FDTDthQUFNO1lBQ0gsT0FBTyxFQUFFLENBQUM7U0FDYjtJQUNMLENBQUM7OzhHQXJVUSxpQkFBaUI7a0dBQWpCLGlCQUFpQiwrcUJBaUNULG9CQUFvQix5RUFFMUIsS0FBSyxnRUFERixxQkFBcUIsZ0RDOUV2Qyx1alBBZ0lBOzJGRHBGYSxpQkFBaUI7a0JBTDdCLFNBQVM7K0JBQ0ksV0FBVyxtQkFFSix1QkFBdUIsQ0FBQyxNQUFNOzswQkF1RjFDLFFBQVE7NENBaEZHLFVBQVU7c0JBQXpCLEtBQUs7Z0JBR1UsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQUNVLE9BQU87c0JBQXRCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxjQUFjO3NCQUE3QixLQUFLO2dCQUdVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUdVLGlCQUFpQjtzQkFBaEMsS0FBSztnQkFHVSxnQkFBZ0I7c0JBQS9CLEtBQUs7Z0JBQ1UscUJBQXFCO3NCQUFwQyxLQUFLO2dCQUdzQixnQkFBZ0I7c0JBQTNDLE1BQU07dUJBQUMsV0FBVztnQkFDUyxxQkFBcUI7c0JBQWhELE1BQU07dUJBQUMsV0FBVztnQkFDZSwyQkFBMkI7c0JBQTVELE1BQU07dUJBQUMsaUJBQWlCO2dCQUNrQiwwQkFBMEI7c0JBQXBFLE1BQU07dUJBQUMsMEJBQTBCO2dCQUNjLCtCQUErQjtzQkFBOUUsTUFBTTt1QkFBQywrQkFBK0I7Z0JBR08sU0FBUztzQkFBdEQsZUFBZTt1QkFBQyxvQkFBb0I7Z0JBQ08sVUFBVTtzQkFBckQsWUFBWTt1QkFBQyxxQkFBcUI7Z0JBQ1YsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TGF6eUxvYWRFdmVudCwgU29ydE1ldGF9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RmlsdGVyTWV0YWRhdGF9IGZyb20gJ3ByaW1lbmcvYXBpL2ZpbHRlcm1ldGFkYXRhJztcbmltcG9ydCB7VGFibGV9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24sIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbSwgTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIsIE1lZGl1c1F1ZXJ5UmVzdWx0fSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7TWVkaXVzUmVzdFV0aWx9IGZyb20gJy4uLy4uLy4uL2FwaS91dGlscyc7XG5pbXBvcnQge0lUYWJsZURhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtDb2x1bW5EZXNjcmlwdG9yLCBGaWx0ZXJEZXNjcmlwdG9yLCBUYWJsZURlc2NyaXB0b3J9IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7TW5nQ29tcG9uZW50RGlyZWN0aXZlLCBNbmdUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge01uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge05vdGlmaWNhdGlvblV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7TW5nVGFibGVDZWxsQ2xpY2tFdmVudCwgTW5nVGFibGVMb2FkRXZlbnR9IGZyb20gJy4uL21vZGVscyc7XG5cbmltcG9ydCBUeXBlRW51bSA9IEZpbHRlckRlc2NyaXB0b3IuVHlwZUVudW07XG5pbXBvcnQgUGFnaW5hdGlvbk1vZGVFbnVtID0gVGFibGVEZXNjcmlwdG9yLlBhZ2luYXRpb25Nb2RlRW51bTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nVGFibGVDb21wb25lbnQ8VCwgUz4gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgcHVibGljIHJlYWRvbmx5IGZpbHRlckRpc3BsYXlSb3c6IFRhYmxlRGVzY3JpcHRvci5GaWx0ZXJEaXNwbGF5RW51bSA9IFRhYmxlRGVzY3JpcHRvci5GaWx0ZXJEaXNwbGF5RW51bS5Sb3c7XG4gICAgcHVibGljIHJlYWRvbmx5IGZpbHRlckRpc3BsYXlNZW51OiBUYWJsZURlc2NyaXB0b3IuRmlsdGVyRGlzcGxheUVudW0gPSBUYWJsZURlc2NyaXB0b3IuRmlsdGVyRGlzcGxheUVudW0uTWVudTtcblxuICAgIC8vIG1ldGFkYXRhIGlucHV0XG4gICAgQElucHV0KCkgcHVibGljIGRlc2NyaXB0b3IhOiBUYWJsZURlc2NyaXB0b3I8VD47XG5cbiAgICAvLyBkYXRhIHNvdXJjZSBpbnB1dHNcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbXM/OiBPYnNlcnZhYmxlPEFycmF5PFQ+PiB8IEFycmF5PFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBxdWVyeVJlc3VsdD86IE9ic2VydmFibGU8TWVkaXVzUXVlcnlSZXN1bHQ8VD4+IHwgTWVkaXVzUXVlcnlSZXN1bHQ8VD47XG4gICAgQElucHV0KCkgcHVibGljIGxvYWRpbmc/OiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YVByb3ZpZGVyPzogSVRhYmxlRGF0YVByb3ZpZGVyPFQsIGFueT47XG4gICAgQElucHV0KCkgcHVibGljIHVzZVF1ZXJ5UGFyYW1zID0gZmFsc2U7XG5cbiAgICAvLyBleHRyYSBmZWF0dXJlcyBpbnB1dFxuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3Rpb25Nb2RlID0gJ211bHRpcGxlJztcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0aW9uRW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgLy8gdmlzdWFsXG4gICAgQElucHV0KCkgcHVibGljIGlzQ29sdW1uQ2xpY2thYmxlID0gdHJ1ZTtcblxuICAgIC8vIGNvbXBvbmVudCBpbnB1dHNcbiAgICBASW5wdXQoKSBwdWJsaWMgY2FwdGlvbkNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgICBASW5wdXQoKSBwdWJsaWMgY29sdW1uQWN0aW9uQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuXG4gICAgLy8gZXZlbnQgb3V0cHV0c1xuICAgIEBPdXRwdXQoJ3RhYmxlTG9hZCcpIHB1YmxpYyBsb2FkRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxNbmdUYWJsZUxvYWRFdmVudD4oKTtcbiAgICBAT3V0cHV0KCdjZWxsQ2xpY2snKSBwdWJsaWMgY2VsbENsaWNrRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+PigpO1xuICAgIEBPdXRwdXQoJ3NlbGVjdGlvbkNoYW5nZScpIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2VFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFQ+PigpO1xuICAgIEBPdXRwdXQoJ2NhcHRpb25Db21wb25lbnRJbnN0YW5jZScpIHB1YmxpYyBjYXB0aW9uQ21wSW5zdEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoJ2NvbHVtbkFjdGlvbkNvbXBvbmVudEluc3RhbmNlJykgcHVibGljIGNvbHVtbkFjdGlvbkNtcEluc3RFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTW5nVGVtcGxhdGVEaXJlY3RpdmUpIHB1YmxpYyB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8TW5nVGVtcGxhdGVEaXJlY3RpdmU+O1xuICAgIEBWaWV3Q2hpbGRyZW4oTW5nQ29tcG9uZW50RGlyZWN0aXZlKSBwdWJsaWMgY29tcG9uZW50cyE6IFF1ZXJ5TGlzdDxNbmdDb21wb25lbnREaXJlY3RpdmU8YW55Pj47XG4gICAgQFZpZXdDaGlsZChUYWJsZSkgcHVibGljIHByaW1lVGFibGUhOiBUYWJsZTtcblxuICAgIC8vIHRlbXBsYXRlc1xuICAgIHB1YmxpYyBjYXB0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHB1YmxpYyBjb2x1bW5BY3Rpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvLyBkYXRhIHByb3ZpZGVyIGFuZCBpdGVtc1xuICAgIHB1YmxpYyB1c2VEYXRhUHJvdmlkZXIgPSBmYWxzZTtcbiAgICBwdWJsaWMgdXNlUXVlcnlQYXJhbXNJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBxdWVyeVJlc3VsdCQ/OiBPYnNlcnZhYmxlPE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+PjtcbiAgICBwdWJsaWMgbG9hZGluZyQ/OiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAgIHB1YmxpYyBkYXRhUHJvdmlkZXJJbmZpbml0ZVNjcm9sbEl0ZW1zOiBBcnJheTxUPiA9IFtdO1xuXG4gICAgLy8gcGFnaW5hdGlvbiwgc29ydCBhbmQgZmlsdGVyc1xuICAgIHB1YmxpYyByZWFkb25seSByb3dzUGVyUGFnZU9wdGlvbnMgPSBbMjUsIDUwLCAxMDBdO1xuICAgIHB1YmxpYyByb3dzID0gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF07XG4gICAgcHVibGljIG9mZnNldCA9IDA7XG4gICAgcHVibGljIG11bHRpU29ydE1ldGE6IFNvcnRNZXRhW10gfCBudWxsID0gbnVsbDtcbiAgICBwdWJsaWMgZmlsdGVyTWV0YWRhdGE6IHtbczogc3RyaW5nXTogRmlsdGVyTWV0YWRhdGEgfCBGaWx0ZXJNZXRhZGF0YVtdfSA9IHt9O1xuXG4gICAgLy8gaW5maW5pdGUgc2Nyb2xsXG4gICAgcHVibGljIGluZmluaXRlU2Nyb2xsID0gZmFsc2U7XG4gICAgcHVibGljIHNjcm9sbEhlaWdodDogJ2ZsZXgnIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIHJvd0hlaWdodDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvLyBzZWxlY3Rpb25cbiAgICBwdWJsaWMgc2VsZWN0aW9uOiBBcnJheTxUPiA9IFtdO1xuXG4gICAgLy8gZGF0YSBwcm92aWRlclxuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyU2VydmljZTogYW55ID0gbnVsbDtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlclF1ZXJ5UmVzdWx0U3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+PigxKTtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlckxvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJMYXRlc3RMYXp5TG9hZEV2ZW50PzogTGF6eUxvYWRFdmVudDtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlckxhdGVzdExhenlMb2FkRXZlbnRWZXJzaW9uID0gMDtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlckxhdGVzdFF1ZXJ5UGFyYW0/OiBNZWRpdXNRdWVyeVBhcmFtO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyTGF0ZXN0UXVlcnlQYXJhbVZlcnNpb24gPSAwO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLy8gZmlsdGVyLCBzb3J0XG4gICAgcHJpdmF0ZSBpc0ZpbHRlckNoYW5nZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzU29ydENoYW5nZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGZpbHRlckRlc2NyaXB0b3JzOiBBcnJheTxGaWx0ZXJEZXNjcmlwdG9yPGFueT4+ID0gW107XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz4gfCBudWxsXG4gICAgKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmZpbHRlckRlc2NyaXB0b3JzID0gdGhpcy5kZXNjcmlwdG9yLmNvbHVtbnMuZmlsdGVyKGMgPT4gdHlwZW9mIGMuZmlsdGVyRGVzY3JpcHRvciAhPT0gJ3VuZGVmaW5lZCcpLm1hcChjID0+IGMuZmlsdGVyRGVzY3JpcHRvciEpO1xuXG4gICAgICAgIGlmICh0aGlzLmRlc2NyaXB0b3IucGFnaW5hdGlvbk1vZGUgPT09IFBhZ2luYXRpb25Nb2RlRW51bS5JbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9ICdmbGV4JztcbiAgICAgICAgICAgIHRoaXMucm93SGVpZ2h0ID0gdGhpcy5kZXNjcmlwdG9yLnJvd0hlaWdodDtcbiAgICAgICAgICAgIHRoaXMudXNlUXVlcnlQYXJhbXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIGlmIGRhdGEgcHJvdmlkZXIgaXMgc3VwcGxpZWQsIGlmIGlzLCB1c2UgaXQgcHJpbWFyaWx5XG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgLy8gbWFwIHN1YmplY3RzIHRvIG9ic2VydmFibGVzIGFuZCBpbml0aWF0ZSBkYXRhXG4gICAgICAgICAgICB0aGlzLnVzZURhdGFQcm92aWRlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0JCA9IHRoaXMuZGF0YVByb3ZpZGVyUXVlcnlSZXN1bHRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMuZGF0YVByb3ZpZGVyTG9hZGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgICAgICBjb25zdCBlbXB0eVF1ZXJ5UmVzdWx0ID0gbmV3IE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+KCk7XG4gICAgICAgICAgICBlbXB0eVF1ZXJ5UmVzdWx0LnBhZ2VEYXRhID0gW107XG4gICAgICAgICAgICBlbXB0eVF1ZXJ5UmVzdWx0LmFsbERhdGFDb3VudCA9IDA7XG4gICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJRdWVyeVJlc3VsdFN1YmplY3QubmV4dChlbXB0eVF1ZXJ5UmVzdWx0KTtcblxuICAgICAgICAgICAgLy8gaW5qZWN0IHNlcnZpY2VcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0PGFueT4odGhpcy5kYXRhUHJvdmlkZXIuc2VydmljZVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaWYgcXVlcnkgcmVzdWx0IGlzIHByb3ZpZGVkLCB1c2UgaXQgYXMgc2Vjb25kYXJ5IHNvdXJjZSBvciBlbHNlIHRyeSB0byB1c2UgaXRlbXNcbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXJ5UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeVJlc3VsdCQgPSB0aGlzLnF1ZXJ5UmVzdWx0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSA/IHRoaXMucXVlcnlSZXN1bHQgOiBvZih0aGlzLnF1ZXJ5UmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMucXVlcnlSZXN1bHQgJiYgdGhpcy5pdGVtcykge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlSZXN1bHQkID0gKHRoaXMuaXRlbXMgaW5zdGFuY2VvZiBPYnNlcnZhYmxlID8gdGhpcy5pdGVtcyA6IG9mKHRoaXMuaXRlbXMpKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAvLyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgodjEsIHYyKSA9PiB2MS5sZW5ndGggPT09IHYyLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdjEuZXZlcnkoKHYxaSwgaWR4KSA9PiB2MWlbdGhpcy5kZXNjcmlwdG9yLmRhdGFLZXlQcm9wZXJ0eV0gPT09IHYyW2lkeF1bdGhpcy5kZXNjcmlwdG9yLmRhdGFLZXlQcm9wZXJ0eV0pKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKGl0ZW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UmVzdWx0ID0gbmV3IE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVJlc3VsdC5wYWdlRGF0YSA9IGl0ZW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlSZXN1bHQuYWxsRGF0YUNvdW50ID0gaXRlbXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5UmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMubG9hZGluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmckID0gdGhpcy5sb2FkaW5nIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSA/IHRoaXMubG9hZGluZyA6IG9mKHRoaXMubG9hZGluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy51c2VRdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUocXAgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZFRhYmxlRnJvbVJvdXRlVXBkYXRlKHFwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGluaXRpYWxpemUgZGVmYXVsdCBzb3J0IGlmIHByZXNlbnRcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTb3J0ID0gdGhpcy5nZXREZWZhdWx0U29ydE1ldGEoKTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0U29ydC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNvcnRNZXRhID0gZGVmYXVsdFNvcnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnRlbXBsYXRlcy5mb3JFYWNoKHRlbXBsYXRlID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAodGVtcGxhdGUuZ2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2FwdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FwdGlvblRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbHVtbkFjdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uQWN0aW9uVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVsb2FkKGVtaXRFdmVudCA9IGZhbHNlLCByZXNldFBhcmFtcyA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubG9hZFRhYmxlV2l0aERhdGFQcm92aWRlcihcbiAgICAgICAgICAgIHJlc2V0UGFyYW1zID8gTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIuY3JlYXRlKHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdLCAwKS5idWlsZCgpIDogdGhpcy5kYXRhUHJvdmlkZXJMYXRlc3RRdWVyeVBhcmFtID8/IG5ldyBNZWRpdXNRdWVyeVBhcmFtKCksXG4gICAgICAgICAgICBlbWl0RXZlbnRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UYWJsZUxhenlMb2FkKGV2ZW50OiBMYXp5TG9hZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0TGF6eUxvYWRFdmVudCA9IGV2ZW50O1xuICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxhdGVzdExhenlMb2FkRXZlbnRWZXJzaW9uKys7XG5cbiAgICAgICAgaWYgKHRoaXMudXNlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICAgIGlmICghZXZlbnQubXVsdGlTb3J0TWV0YSB8fCBldmVudC5tdWx0aVNvcnRNZXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIGFkZCBkZWZhdWx0IHNvcnQgbWV0YSB0byBldmVudCBpZiBub3QgbXVsdGlzb3J0IG1ldGEgaXMgcHJlc2VudFxuICAgICAgICAgICAgICAgIGV2ZW50Lm11bHRpU29ydE1ldGEgPSB0aGlzLmdldERlZmF1bHRTb3J0TWV0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VVcmw6IHRydWUsXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IE1lZGl1c1Jlc3RVdGlsLmZyb21QcmltZUxhenlMb2FkRXZlbnRUb0FuZ3VsYXJRdWVyeVBhcmFtcyhldmVudCwgdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF0pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG1lZGl1c1F1ZXJ5UGFyYW1zID0gZXZlbnQgPyBNZWRpdXNSZXN0VXRpbC5mcm9tUHJpbWVMYXp5TG9hZEV2ZW50VG9NZWRpdXNRdWVyeVBhcmFtcyhldmVudCkgOiBuZXcgTWVkaXVzUXVlcnlQYXJhbSgpO1xuICAgICAgICAgICAgdGhpcy5sb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKG1lZGl1c1F1ZXJ5UGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgb25UYWJsZVNvcnQoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmlzU29ydENoYW5nZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgb25UYWJsZUZpbHRlcihldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuaXNGaWx0ZXJDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DZWxsQ2xpY2soY29sOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4sIGl0ZW06IFQsIGlkeDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG1uZ0V2ZW50ID0gbmV3IE1uZ1RhYmxlQ2VsbENsaWNrRXZlbnQ8VD4oY29sLCBpdGVtLCBpZHgpO1xuICAgICAgICB0aGlzLmNlbGxDbGlja0V2ZW50RW1pdHRlci5uZXh0KG1uZ0V2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IEFycmF5PFQ+KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlRXZlbnRFbWl0dGVyLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNhcHRpb25DbXBJbnN0PEM+KGluc3RhbmNlOiBDKSB7XG4gICAgICAgIHRoaXMuY2FwdGlvbkNtcEluc3RFdmVudEVtaXR0ZXIubmV4dChpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ29sdW1uQWN0aW9uQ21wSW5zdDxDPihpbnN0YW5jZTogQykge1xuICAgICAgICB0aGlzLmNvbHVtbkFjdGlvbkNtcEluc3RFdmVudEVtaXR0ZXIubmV4dChpbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKHF1ZXJ5UGFyYW06IE1lZGl1c1F1ZXJ5UGFyYW0gfCBudWxsID0gbnVsbCwgZW1pdEV2ZW50ID0gdHJ1ZSkge1xuICAgICAgICBpZiAoIXRoaXMudXNlRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRhdGFQcm92aWRlclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJMb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuXG4gICAgICAgIGlmICghcXVlcnlQYXJhbSkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbSA9IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLmNyZWF0ZSh0aGlzLnJvd3NQZXJQYWdlT3B0aW9uc1swXSkuYnVpbGQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxhdGVzdFF1ZXJ5UGFyYW0gPSBxdWVyeVBhcmFtO1xuICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxhdGVzdFF1ZXJ5UGFyYW1WZXJzaW9uKys7XG5cbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24gPSB0aGlzLmRhdGFQcm92aWRlcj8uZ2V0QWxsKHF1ZXJ5UGFyYW0sIHRoaXMuZGF0YVByb3ZpZGVyU2VydmljZSkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgcmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ZpbHRlckNoYW5nZWQgfHwgdGhpcy5pc1NvcnRDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckluZmluaXRlU2Nyb2xsSXRlbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckluZmluaXRlU2Nyb2xsSXRlbXMuc3BsaWNlKHF1ZXJ5UGFyYW0hLml0ZW1zT2Zmc2V0ID8/IDAsIHF1ZXJ5UGFyYW0hLml0ZW1zUGVyUGFnZSA/PyB0aGlzLnJvd3MsIC4uLihyZXMucGFnZURhdGEgPz8gW10pKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJJbmZpbml0ZVNjcm9sbEl0ZW1zID0gWy4uLnRoaXMuZGF0YVByb3ZpZGVySW5maW5pdGVTY3JvbGxJdGVtc107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJRdWVyeVJlc3VsdFN1YmplY3QubmV4dChyZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmlzRmlsdGVyQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTb3J0Q2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25VdGlsLnRhYmxlTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIHRoaXMuZGVzY3JpcHRvciwgZXJyLCB0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlID8/IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW1wdHlRdWVyeVJlc3VsdCA9IG5ldyBNZWRpdXNRdWVyeVJlc3VsdDxUPigpO1xuICAgICAgICAgICAgICAgIGVtcHR5UXVlcnlSZXN1bHQucGFnZURhdGEgPSBbXTtcbiAgICAgICAgICAgICAgICBlbXB0eVF1ZXJ5UmVzdWx0LmFsbERhdGFDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJRdWVyeVJlc3VsdFN1YmplY3QubmV4dChlbXB0eVF1ZXJ5UmVzdWx0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChlbWl0RXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG1uZ0V2ZW50ID0gbmV3IE1uZ1RhYmxlTG9hZEV2ZW50KCk7XG4gICAgICAgICAgICBtbmdFdmVudC5vcmlnaW5hbEV2ZW50ID0gdGhpcy5kYXRhUHJvdmlkZXJMYXRlc3RMYXp5TG9hZEV2ZW50ID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIG1uZ0V2ZW50LnF1ZXJ5UGFyYW0gPSBxdWVyeVBhcmFtO1xuICAgICAgICAgICAgdGhpcy5sb2FkRXZlbnRFbWl0dGVyLm5leHQobW5nRXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFibGVGcm9tUm91dGVVcGRhdGUocGFyYW1zOiBQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgbWVkaXVzUXVlcnlQYXJhbSA9IE1lZGl1c1Jlc3RVdGlsLmZyb21Bbmd1bGFyUXVlcnlQYXJhbXNUb01lZGl1c1F1ZXJ5UGFyYW1zKHBhcmFtcywgdGhpcy5maWx0ZXJEZXNjcmlwdG9ycywgdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF0pO1xuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXJMYXRlc3RMYXp5TG9hZEV2ZW50VmVyc2lvbiA8IHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0UXVlcnlQYXJhbVZlcnNpb24gKyAxKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgb25seSBpZiBuZXcgdmVyc2lvbiBmcm9tIHF1ZXJ5IHBhcmFtcyB3aWxsIGJlIGhpZ2hlclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQcmltZVNvcnRBbmRGaWx0ZXIobWVkaXVzUXVlcnlQYXJhbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51c2VRdWVyeVBhcmFtc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkVGFibGVXaXRoRGF0YVByb3ZpZGVyKG1lZGl1c1F1ZXJ5UGFyYW0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUHJpbWVTb3J0QW5kRmlsdGVyKG1lZGl1c1F1ZXJ5UGFyYW06IE1lZGl1c1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgY29uc3QgcHJpbWVTb3J0TWV0YTogU29ydE1ldGFbXSA9IFtdO1xuICAgICAgICBjb25zdCBwcmltZUZpbHRlck1ldGE6IHtbczogc3RyaW5nXTogRmlsdGVyTWV0YWRhdGEgfCBGaWx0ZXJNZXRhZGF0YVtdfSA9IHt9O1xuXG4gICAgICAgIHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIHByaW1lRmlsdGVyTWV0YVtmLnByb3BlcnR5XSA9IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IGYuZmlsdGVyVHlwZSA9PT0gVHlwZUVudW0uU3RyaW5nID8gJ2NvbnRhaW5zJyA6ICdlcXVhbHMnXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBtZWRpdXNRdWVyeVBhcmFtPy5zb3J0UHJvcGVydHk/LmZvckVhY2goKHMsIGlkeCkgPT4ge1xuICAgICAgICAgICAgcHJpbWVTb3J0TWV0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogcyxcbiAgICAgICAgICAgICAgICBvcmRlcjogbWVkaXVzUXVlcnlQYXJhbT8uc29ydEFzYz8uW2lkeF0gPz8gdHJ1ZSA/IDEgOiAtMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lZGl1c1F1ZXJ5UGFyYW0/LmZpbHRlclBhcmFtcz8uZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLmZpbHRlckRlc2NyaXB0b3JzLmZpbmQoZmQgPT4gZmQuZmlsdGVyUHJvcGVydHkgPT09IGYucHJvcGVydHkgfHwgZmQucHJvcGVydHkgPT09IGYucHJvcGVydHkpO1xuICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSBNZWRpdXNSZXN0VXRpbC5tYXRjaE1vZGVNYXBwaW5nLmZpbmQobWFwcGluZyA9PiBtYXBwaW5nWzJdID09PSBmLmZpbHRlck1hdGNoVHlwZSk7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiBvcGVyYXRvcikge1xuICAgICAgICAgICAgICAgIHByaW1lRmlsdGVyTWV0YVtkZXNjcmlwdG9yLnByb3BlcnR5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGYuZmlsdGVyVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogb3BlcmF0b3JbMF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm11bHRpU29ydE1ldGEgPSBwcmltZVNvcnRNZXRhO1xuICAgICAgICB0aGlzLmZpbHRlck1ldGFkYXRhID0gcHJpbWVGaWx0ZXJNZXRhO1xuICAgICAgICB0aGlzLnJvd3MgPSBtZWRpdXNRdWVyeVBhcmFtPy5pdGVtc1BlclBhZ2UgPz8gdGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF07XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gbWVkaXVzUXVlcnlQYXJhbT8uaXRlbXNPZmZzZXQgPz8gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERlZmF1bHRTb3J0TWV0YSgpOiBTb3J0TWV0YVtdIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvci5oYXNEZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRvci5kZWZhdWx0U29ydFByb3BlcnR5Lm1hcChcbiAgICAgICAgICAgICAgICAocCwgaWR4KSA9PlxuICAgICAgICAgICAgICAgICAgICA8U29ydE1ldGE+e1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHAsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogdGhpcy5kZXNjcmlwdG9yLmRlZmF1bHRTb3J0QXNjW2lkeF0gPyAxIDogLTFcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgW3N0eWxlLmhlaWdodF09XCJzY3JvbGxIZWlnaHQgPT09ICdmbGV4JyA/ICdjYWxjKDEwMHZoIC0gJyArIGRlc2NyaXB0b3IudGFibGVGdWxsSGVpZ2h0T2Zmc2V0ICsgJ3B4KScgOiBudWxsXCI+XG4gICAgPCEtLSBNVVNUIE5PVCB1c2Ugb2JzZXJ2YWJsZSBmb3IgdmFsdWUgd2hlbiB1c2luZyB2aXJ0dWFsIHNjcm9sbCAtIGRvZXMgbm90IHdvcmsgZm9yIHNvbWUgcmVhc29uIC0tPlxuICAgIDxwLXRhYmxlXG4gICAgICAgICpuZ0lmPVwiIXVzZVF1ZXJ5UGFyYW1zIHx8IHVzZVF1ZXJ5UGFyYW1zSW5pdGlhbGl6ZWRcIlxuICAgICAgICBbdmFsdWVdPVwiaW5maW5pdGVTY3JvbGwgPyBkYXRhUHJvdmlkZXJJbmZpbml0ZVNjcm9sbEl0ZW1zIDogKHF1ZXJ5UmVzdWx0JCB8IGFzeW5jKT8ucGFnZURhdGEgPz8gW11cIlxuICAgICAgICBbZGF0YUtleV09XCIkYW55KGRlc2NyaXB0b3IuZGF0YUtleVByb3BlcnR5KVwiXG4gICAgICAgIFtsYXp5XT1cInVzZURhdGFQcm92aWRlclwiXG4gICAgICAgIFtsb2FkaW5nXT1cIihsb2FkaW5nJCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgIFtwYWdpbmF0b3JdPVwidXNlRGF0YVByb3ZpZGVyICYmICFpbmZpbml0ZVNjcm9sbFwiXG4gICAgICAgIFtyb3dzXT1cIiRhbnkoaW5maW5pdGVTY3JvbGwgPyAyMCA6IHJvd3MpXCJcbiAgICAgICAgW2ZpcnN0XT1cIiRhbnkoaW5maW5pdGVTY3JvbGwgPyAwIDogb2Zmc2V0KVwiXG4gICAgICAgIFt0b3RhbFJlY29yZHNdPVwiJGFueShpbmZpbml0ZVNjcm9sbCA/IG51bGwgOiAocXVlcnlSZXN1bHQkIHwgYXN5bmMpPy5hbGxEYXRhQ291bnQgPz8gMClcIlxuICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIiRhbnkoaW5maW5pdGVTY3JvbGwgPyBudWxsIDogcm93c1BlclBhZ2VPcHRpb25zKVwiXG4gICAgICAgIFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwiIWluZmluaXRlU2Nyb2xsXCJcbiAgICAgICAgW2N1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVdPVwiJ21uZ1RhYmxlLnBhZ2luYXRpb25Nc2cnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW211bHRpU29ydE1ldGFdPVwiJGFueShtdWx0aVNvcnRNZXRhKVwiXG4gICAgICAgIFtmaWx0ZXJzXT1cImZpbHRlck1ldGFkYXRhXCJcbiAgICAgICAgWyhzZWxlY3Rpb24pXT1cInNlbGVjdGlvblwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtzY3JvbGxhYmxlXT1cImluZmluaXRlU2Nyb2xsXCJcbiAgICAgICAgW3ZpcnR1YWxTY3JvbGxdPVwiaW5maW5pdGVTY3JvbGxcIlxuICAgICAgICBbdmlydHVhbFJvd0hlaWdodF09XCIkYW55KHJvd0hlaWdodClcIlxuICAgICAgICBbc2Nyb2xsSGVpZ2h0XT1cIiRhbnkoc2Nyb2xsSGVpZ2h0KVwiXG4gICAgICAgIFtyb3dIb3Zlcl09XCJ0cnVlXCJcbiAgICAgICAgKG9uTGF6eUxvYWQpPVwib25UYWJsZUxhenlMb2FkKCRldmVudClcIlxuICAgICAgICAob25Tb3J0KT1cIm9uVGFibGVTb3J0KCRldmVudClcIlxuICAgICAgICAob25GaWx0ZXIpPVwib25UYWJsZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgICAgIHNvcnRNb2RlPVwibXVsdGlwbGVcIlxuICAgICAgICByZXNwb25zaXZlTGF5b3V0PVwic2Nyb2xsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNhcHRpb25UZW1wbGF0ZSB8fCBjYXB0aW9uQ29tcG9uZW50IHx8IGRlc2NyaXB0b3IudGl0bGVcIiBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FwdGlvblRlbXBsYXRlOyBlbHNlIGNvbXBvbmVudE9yRGVmYXVsdENhcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FwdGlvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29tcG9uZW50T3JEZWZhdWx0Q2FwdGlvbj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FwdGlvbkNvbXBvbmVudDsgZWxzZSBkZWZhdWx0Q2FwdGlvblwiIFttbmdDb21wb25lbnRdPVwiY2FwdGlvbkNvbXBvbmVudFwiIChpbnN0YW5jZUNyZWF0ZWQpPVwib25DYXB0aW9uQ21wSW5zdCgkZXZlbnQpXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FwdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicC0wIG0tMFwiPnt7IGRlc2NyaXB0b3IudGl0bGUgfX08L2g1PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDx0ciAqbmdJZj1cIiFkZXNjcmlwdG9yLmhpZGVIZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3Rpb25FbmFibGVkICYmIHNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVIZWFkZXJDaGVja2JveD48L3AtdGFibGVIZWFkZXJDaGVja2JveD5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwhLS0gV2UgbmVlZCB0aGUgbGluZSBiZWxvdywgYmVjYXVzZSBvdGhlcndpc2UgcC10YWJsZVJhZGlvQnV0dG9uIHNoaWZ0cyB0aGUgcmVzdCBvZiB0aGUgY29sdW1ucyBpbiB0YWJsZSAtLT5cbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3Rpb25FbmFibGVkICYmIHNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnXCIgc3R5bGU9XCJ3aWR0aDogMi4yNWVtXCI+PC90aD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgZGVzY3JpcHRvci5jb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImNvbC5pc1NvcnRFbmFibGVkXCIgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wucHJvcGVydHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbC50aXRsZSA/PyAoY29sLnByb3BlcnR5IHwgaTE4blByb3BlcnR5OiBkZXNjcmlwdG9yLm1vZGVsKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXNvcnRJY29uIFtmaWVsZF09XCJjb2wucHJvcGVydHlcIj48L3Atc29ydEljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy10YWJsZS1jb2x1bW4tZmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmZpbHRlckRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5maWx0ZXJEaXNwbGF5ID09PSBmaWx0ZXJEaXNwbGF5TWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWwtYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5XT1cImRlc2NyaXB0b3IuZmlsdGVyRGlzcGxheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXNjcmlwdG9yXT1cImNvbC5maWx0ZXJEZXNjcmlwdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tbmctdGFibGUtY29sdW1uLWZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhY29sLmlzU29ydEVuYWJsZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbC50aXRsZSA/PyAoY29sLnByb3BlcnR5IHwgaTE4blByb3BlcnR5OiBkZXNjcmlwdG9yLm1vZGVsKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bW5nLXRhYmxlLWNvbHVtbi1maWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuZmlsdGVyRGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmZpbHRlckRpc3BsYXkgPT09IGZpbHRlckRpc3BsYXlNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC1hdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiZGVzY3JpcHRvci5maWx0ZXJEaXNwbGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiY29sLmZpbHRlckRlc2NyaXB0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21uZy10YWJsZS1jb2x1bW4tZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiY29sdW1uQWN0aW9uVGVtcGxhdGUgfHwgY29sdW1uQWN0aW9uQ29tcG9uZW50XCI+PC90aD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgKm5nSWY9XCJkZXNjcmlwdG9yLmZpbHRlckRpc3BsYXkgPT09IGZpbHRlckRpc3BsYXlSb3dcIj5cbiAgICAgICAgICAgICAgICA8IS0tIFdlIG5lZWQgdGhlIGxpbmUgYmVsb3csIGJlY2F1c2Ugb3RoZXJ3aXNlIHAtdGFibGVSYWRpb0J1dHRvbiBzaGlmdHMgdGhlIHJlc3Qgb2YgdGhlIGNvbHVtbnMgaW4gdGFibGUgLS0+XG4gICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwic2VsZWN0aW9uRW5hYmxlZCAmJiBzZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJ1wiIHN0eWxlPVwid2lkdGg6IDIuMjVlbVwiPjwvdGg+XG4gICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgZGVzY3JpcHRvci5jb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCIgKm5nSWY9XCJjb2wuZmlsdGVyRGVzY3JpcHRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy10YWJsZS1jb2x1bW4tZmlsdGVyIFtkaXNwbGF5XT1cImRlc2NyaXB0b3IuZmlsdGVyRGlzcGxheVwiIFtkZXNjcmlwdG9yXT1cImNvbC5maWx0ZXJEZXNjcmlwdG9yXCI+PC9tbmctdGFibGUtY29sdW1uLWZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJjb2x1bW5BY3Rpb25UZW1wbGF0ZSB8fCBjb2x1bW5BY3Rpb25Db21wb25lbnRcIj48L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1pdGVtIGxldC1pZHg9XCJyb3dJbmRleFwiPlxuICAgICAgICAgICAgPHRyIFtzdHlsZS5oZWlnaHQucHhdPVwiZGVzY3JpcHRvci5yb3dIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJzZWxlY3Rpb25FbmFibGVkICYmIHNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aXBsZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVDaGVja2JveCBbdmFsdWVdPVwiaXRlbVwiPjwvcC10YWJsZUNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0aW9uRW5hYmxlZCAmJiBzZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cC10YWJsZVJhZGlvQnV0dG9uIFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlUmFkaW9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbCBvZiBkZXNjcmlwdG9yLmNvbHVtbnNcIiAoY2xpY2spPVwib25DZWxsQ2xpY2soY29sLCBpdGVtLCBpZHgpXCIgW2NsYXNzLmNsaWNrYWJsZV09XCJpc0NvbHVtbkNsaWNrYWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bW5nLXRhYmxlLWNvbHVtbi12YWx1ZSBbZGVzY3JpcHRvcl09XCJjb2xcIiBbaXRlbV09XCJpdGVtXCI+PC9tbmctdGFibGUtY29sdW1uLXZhbHVlPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiY29sdW1uQWN0aW9uVGVtcGxhdGUgfHwgY29sdW1uQWN0aW9uQ29tcG9uZW50XCIgY2xhc3M9XCJ0ZXh0LXJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5BY3Rpb25UZW1wbGF0ZTsgZWxzZSBzaG93Q29sdW1uQWN0aW9uQ29tcG9uZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uQWN0aW9uVGVtcGxhdGU7IGNvbnRleHQ6IHtyb3dJdGVtOiBpdGVtLCByb3dJbmRleDogaWR4fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaG93Q29sdW1uQWN0aW9uQ29tcG9uZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW21uZ0NvbXBvbmVudF09XCJjb2x1bW5BY3Rpb25Db21wb25lbnQhXCIgKGluc3RhbmNlQ3JlYXRlZCk9XCJvbkNvbHVtbkFjdGlvbkNtcEluc3QoJGV2ZW50KVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibG9hZGluZ2JvZHlcIj5cbiAgICAgICAgICAgIDx0ciBbc3R5bGUuaGVpZ2h0LnB4XT1cImRlc2NyaXB0b3Iucm93SGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiZGVzY3JpcHRvci5jb2x1bW5zLmxlbmd0aCArIChjb2x1bW5BY3Rpb25UZW1wbGF0ZSB8fCBjb2x1bW5BY3Rpb25Db21wb25lbnQgPyAxIDogMCkgKyAoc2VsZWN0aW9uRW5hYmxlZCA/IDEgOiAwKVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy10ZXh0XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwLXNrZWxldG9uIFtuZ1N0eWxlXT1cInt3aWR0aDogJzEwMCUnfVwiPjwvcC1za2VsZXRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiZW1wdHltZXNzYWdlXCI+XG4gICAgICAgICAgICA8dHIgW3N0eWxlLmhlaWdodC5weF09XCJyb3dIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJkZXNjcmlwdG9yLmNvbHVtbnMubGVuZ3RoICsgKGNvbHVtbkFjdGlvblRlbXBsYXRlIHx8IGNvbHVtbkFjdGlvbkNvbXBvbmVudCA/IDEgOiAwKSArIChzZWxlY3Rpb25FbmFibGVkID8gMSA6IDApXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdtbmdUYWJsZS5ub0l0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC10YWJsZT5cbjwvZGl2PlxuIl19
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3RhYmxldmlldy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvdGFibGV2aWV3L3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFDZixZQUFZLEVBRVosS0FBSyxFQUdMLFFBQVEsRUFDUixNQUFNLEVBSU4sU0FBUyxFQUNULFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQU12QixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BDLE9BQU8sRUFBQyxVQUFVLEVBQUUsYUFBYSxFQUFnQixFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDakUsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pHLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVsRCxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3pGLE9BQU8sRUFBQyxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBR2hGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUVwRSxJQUFPLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7QUFDNUMsSUFBTyxrQkFBa0IsR0FB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QU07dUJBQUMsV0FBVztnQkFDUyxxQkFBcUI7c0JBQWhELE1BQU07dUJBQUMsV0FBVztnQkFDZSwyQkFBMkI7c0JBQTVELE1BQU07dUJBQUMsaUJBQWlCO2dCQUNrQiwwQkFBMEI7c0JBQXBFLE1BQU07dUJBQUMsMEJBQTBCO2dCQUNjLCtCQUErQjtzQkFBOUUsTUFBTTt1QkFBQywrQkFBK0I7Z0JBR08sU0FBUztzQkFBdEQsZUFBZTt1QkFBQyxvQkFBb0I7Z0JBQ08sVUFBVTtzQkFBckQsWUFBWTt1QkFBQyxxQkFBcUI7Z0JBQ1YsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TGF6eUxvYWRFdmVudCwgU29ydE1ldGF9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RmlsdGVyTWV0YWRhdGF9IGZyb20gJ3ByaW1lbmcvYXBpL2ZpbHRlcm1ldGFkYXRhJztcbmltcG9ydCB7VGFibGV9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24sIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbSwgTWVkaXVzUXVlcnlQYXJhbUJ1aWxkZXIsIE1lZGl1c1F1ZXJ5UmVzdWx0fSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWxzJztcbmltcG9ydCB7TWVkaXVzUmVzdFV0aWx9IGZyb20gJy4uLy4uLy4uL2FwaS91dGlscyc7XG5pbXBvcnQge0lUYWJsZURhdGFQcm92aWRlcn0gZnJvbSAnLi4vLi4vLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtDb2x1bW5EZXNjcmlwdG9yLCBGaWx0ZXJEZXNjcmlwdG9yLCBUYWJsZURlc2NyaXB0b3J9IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7TW5nQ29tcG9uZW50RGlyZWN0aXZlLCBNbmdUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtOb3RpZmljYXRpb25VdGlsfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQge01uZ1RhYmxlQ2VsbENsaWNrRXZlbnQsIE1uZ1RhYmxlTG9hZEV2ZW50fSBmcm9tICcuLi9tb2RlbHMnO1xuXG5pbXBvcnQgVHlwZUVudW0gPSBGaWx0ZXJEZXNjcmlwdG9yLlR5cGVFbnVtO1xuaW1wb3J0IFBhZ2luYXRpb25Nb2RlRW51bSA9IFRhYmxlRGVzY3JpcHRvci5QYWdpbmF0aW9uTW9kZUVudW07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbW5nLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1uZ1RhYmxlQ29tcG9uZW50PFQsIFM+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAgIHB1YmxpYyByZWFkb25seSBmaWx0ZXJEaXNwbGF5Um93OiBUYWJsZURlc2NyaXB0b3IuRmlsdGVyRGlzcGxheUVudW0gPSBUYWJsZURlc2NyaXB0b3IuRmlsdGVyRGlzcGxheUVudW0uUm93O1xuICAgIHB1YmxpYyByZWFkb25seSBmaWx0ZXJEaXNwbGF5TWVudTogVGFibGVEZXNjcmlwdG9yLkZpbHRlckRpc3BsYXlFbnVtID0gVGFibGVEZXNjcmlwdG9yLkZpbHRlckRpc3BsYXlFbnVtLk1lbnU7XG5cbiAgICAvLyBtZXRhZGF0YSBpbnB1dFxuICAgIEBJbnB1dCgpIHB1YmxpYyBkZXNjcmlwdG9yITogVGFibGVEZXNjcmlwdG9yPFQ+O1xuXG4gICAgLy8gZGF0YSBzb3VyY2UgaW5wdXRzXG4gICAgQElucHV0KCkgcHVibGljIGl0ZW1zPzogT2JzZXJ2YWJsZTxBcnJheTxUPj4gfCBBcnJheTxUPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgcXVlcnlSZXN1bHQ/OiBPYnNlcnZhYmxlPE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+PiB8IE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsb2FkaW5nPzogT2JzZXJ2YWJsZTxib29sZWFuPiB8IGJvb2xlYW47XG4gICAgQElucHV0KCkgcHVibGljIGRhdGFQcm92aWRlcj86IElUYWJsZURhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyB1c2VRdWVyeVBhcmFtcyA9IGZhbHNlO1xuXG4gICAgLy8gZXh0cmEgZmVhdHVyZXMgaW5wdXRcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0aW9uTW9kZSA9ICdtdWx0aXBsZSc7XG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGlvbkVuYWJsZWQgPSBmYWxzZTtcblxuICAgIC8vIHZpc3VhbFxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0NvbHVtbkNsaWNrYWJsZSA9IHRydWU7XG5cbiAgICAvLyBjb21wb25lbnQgaW5wdXRzXG4gICAgQElucHV0KCd2aWV3Q29udGFpbmVyJykgcHVibGljIHZpZXdDb250YWluZXJJbml0PzogSVZpZXdDb250YWluZXI8VCwgUz47XG4gICAgQElucHV0KCkgcHVibGljIGNhcHRpb25Db21wb25lbnQ/OiBUeXBlPGFueT47XG4gICAgQElucHV0KCkgcHVibGljIGNvbHVtbkFjdGlvbkNvbXBvbmVudD86IFR5cGU8YW55PjtcblxuICAgIC8vIGV2ZW50IG91dHB1dHNcbiAgICBAT3V0cHV0KCd0YWJsZUxvYWQnKSBwdWJsaWMgbG9hZEV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8TW5nVGFibGVMb2FkRXZlbnQ+KCk7XG4gICAgQE91dHB1dCgnY2VsbENsaWNrJykgcHVibGljIGNlbGxDbGlja0V2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8TW5nVGFibGVDZWxsQ2xpY2tFdmVudDxUPj4oKTtcbiAgICBAT3V0cHV0KCdzZWxlY3Rpb25DaGFuZ2UnKSBwdWJsaWMgc2VsZWN0aW9uQ2hhbmdlRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxUPj4oKTtcbiAgICBAT3V0cHV0KCdjYXB0aW9uQ29tcG9uZW50SW5zdGFuY2UnKSBwdWJsaWMgY2FwdGlvbkNtcEluc3RFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCdjb2x1bW5BY3Rpb25Db21wb25lbnRJbnN0YW5jZScpIHB1YmxpYyBjb2x1bW5BY3Rpb25DbXBJbnN0RXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvLyBjb250ZW50IGFuZCB2aWV3IHF1ZXJpZXNcbiAgICBAQ29udGVudENoaWxkcmVuKE1uZ1RlbXBsYXRlRGlyZWN0aXZlKSBwdWJsaWMgdGVtcGxhdGVzITogUXVlcnlMaXN0PE1uZ1RlbXBsYXRlRGlyZWN0aXZlPjtcbiAgICBAVmlld0NoaWxkcmVuKE1uZ0NvbXBvbmVudERpcmVjdGl2ZSkgcHVibGljIGNvbXBvbmVudHMhOiBRdWVyeUxpc3Q8TW5nQ29tcG9uZW50RGlyZWN0aXZlPGFueT4+O1xuICAgIEBWaWV3Q2hpbGQoVGFibGUpIHB1YmxpYyBwcmltZVRhYmxlITogVGFibGU7XG5cbiAgICAvLyB0ZW1wbGF0ZXNcbiAgICBwdWJsaWMgY2FwdGlvblRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBwdWJsaWMgY29sdW1uQWN0aW9uVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLy8gZGF0YSBwcm92aWRlciBhbmQgaXRlbXNcbiAgICBwdWJsaWMgdXNlRGF0YVByb3ZpZGVyID0gZmFsc2U7XG4gICAgcHVibGljIHVzZVF1ZXJ5UGFyYW1zSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgcXVlcnlSZXN1bHQkPzogT2JzZXJ2YWJsZTxNZWRpdXNRdWVyeVJlc3VsdDxUPj47XG4gICAgcHVibGljIGxvYWRpbmckPzogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwdWJsaWMgZGF0YVByb3ZpZGVySW5maW5pdGVTY3JvbGxJdGVtczogQXJyYXk8VD4gPSBbXTtcblxuICAgIC8vIHBhZ2luYXRpb24sIHNvcnQgYW5kIGZpbHRlcnNcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93c1BlclBhZ2VPcHRpb25zID0gWzI1LCA1MCwgMTAwXTtcbiAgICBwdWJsaWMgcm93cyA9IHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdO1xuICAgIHB1YmxpYyBvZmZzZXQgPSAwO1xuICAgIHB1YmxpYyBtdWx0aVNvcnRNZXRhOiBTb3J0TWV0YVtdIHwgbnVsbCA9IG51bGw7XG4gICAgcHVibGljIGZpbHRlck1ldGFkYXRhOiB7W3M6IHN0cmluZ106IEZpbHRlck1ldGFkYXRhIHwgRmlsdGVyTWV0YWRhdGFbXX0gPSB7fTtcblxuICAgIC8vIGluZmluaXRlIHNjcm9sbFxuICAgIHB1YmxpYyBpbmZpbml0ZVNjcm9sbCA9IGZhbHNlO1xuICAgIHB1YmxpYyBzY3JvbGxIZWlnaHQ6ICdmbGV4JyB8IG51bGwgPSBudWxsO1xuICAgIHB1YmxpYyByb3dIZWlnaHQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gc2VsZWN0aW9uXG4gICAgcHVibGljIHNlbGVjdGlvbjogQXJyYXk8VD4gPSBbXTtcblxuICAgIC8vIGRhdGEgcHJvdmlkZXJcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlclNlcnZpY2U6IGFueSA9IG51bGw7XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJRdWVyeVJlc3VsdFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxNZWRpdXNRdWVyeVJlc3VsdDxUPj4oMSk7XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJMb2FkaW5nU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyTGF0ZXN0TGF6eUxvYWRFdmVudD86IExhenlMb2FkRXZlbnQ7XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJMYXRlc3RMYXp5TG9hZEV2ZW50VmVyc2lvbiA9IDA7XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXJMYXRlc3RRdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbTtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlckxhdGVzdFF1ZXJ5UGFyYW1WZXJzaW9uID0gMDtcbiAgICBwcml2YXRlIGRhdGFQcm92aWRlclN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8vIGZpbHRlciwgc29ydFxuICAgIHByaXZhdGUgaXNGaWx0ZXJDaGFuZ2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc1NvcnRDaGFuZ2VkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBmaWx0ZXJEZXNjcmlwdG9yczogQXJyYXk8RmlsdGVyRGVzY3JpcHRvcjxhbnk+PiA9IFtdO1xuXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyPzogSVZpZXdDb250YWluZXI8VCwgUz47XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdmlld0NvbnRhaW5lclNlcnZpY2U6IE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlPFQsIFM+IHwgbnVsbFxuICAgICkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyID0gdGhpcy52aWV3Q29udGFpbmVySW5pdCA/PyB0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlID8/IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5maWx0ZXJEZXNjcmlwdG9ycyA9IHRoaXMuZGVzY3JpcHRvci5jb2x1bW5zLmZpbHRlcihjID0+IHR5cGVvZiBjLmZpbHRlckRlc2NyaXB0b3IgIT09ICd1bmRlZmluZWQnKS5tYXAoYyA9PiBjLmZpbHRlckRlc2NyaXB0b3IhKTtcblxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yLnBhZ2luYXRpb25Nb2RlID09PSBQYWdpbmF0aW9uTW9kZUVudW0uSW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxIZWlnaHQgPSAnZmxleCc7XG4gICAgICAgICAgICB0aGlzLnJvd0hlaWdodCA9IHRoaXMuZGVzY3JpcHRvci5yb3dIZWlnaHQ7XG4gICAgICAgICAgICB0aGlzLnVzZVF1ZXJ5UGFyYW1zID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBpZiBkYXRhIHByb3ZpZGVyIGlzIHN1cHBsaWVkLCBpZiBpcywgdXNlIGl0IHByaW1hcmlseVxuICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgIC8vIG1hcCBzdWJqZWN0cyB0byBvYnNlcnZhYmxlcyBhbmQgaW5pdGlhdGUgZGF0YVxuICAgICAgICAgICAgdGhpcy51c2VEYXRhUHJvdmlkZXIgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5xdWVyeVJlc3VsdCQgPSB0aGlzLmRhdGFQcm92aWRlclF1ZXJ5UmVzdWx0U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLmRhdGFQcm92aWRlckxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICAgICAgY29uc3QgZW1wdHlRdWVyeVJlc3VsdCA9IG5ldyBNZWRpdXNRdWVyeVJlc3VsdDxUPigpO1xuICAgICAgICAgICAgZW1wdHlRdWVyeVJlc3VsdC5wYWdlRGF0YSA9IFtdO1xuICAgICAgICAgICAgZW1wdHlRdWVyeVJlc3VsdC5hbGxEYXRhQ291bnQgPSAwO1xuICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJMb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyUXVlcnlSZXN1bHRTdWJqZWN0Lm5leHQoZW1wdHlRdWVyeVJlc3VsdCk7XG5cbiAgICAgICAgICAgIC8vIGluamVjdCBzZXJ2aWNlXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhUHJvdmlkZXIuc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlclNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldDxhbnk+KHRoaXMuZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIHF1ZXJ5IHJlc3VsdCBpcyBwcm92aWRlZCwgdXNlIGl0IGFzIHNlY29uZGFyeSBzb3VyY2Ugb3IgZWxzZSB0cnkgdG8gdXNlIGl0ZW1zXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVyeVJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlSZXN1bHQkID0gdGhpcy5xdWVyeVJlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGUgPyB0aGlzLnF1ZXJ5UmVzdWx0IDogb2YodGhpcy5xdWVyeVJlc3VsdCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnF1ZXJ5UmVzdWx0ICYmIHRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0JCA9ICh0aGlzLml0ZW1zIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSA/IHRoaXMuaXRlbXMgOiBvZih0aGlzLml0ZW1zKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgLy8gZGlzdGluY3RVbnRpbENoYW5nZWQoKHYxLCB2MikgPT4gdjEubGVuZ3RoID09PSB2Mi5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHYxLmV2ZXJ5KCh2MWksIGlkeCkgPT4gdjFpW3RoaXMuZGVzY3JpcHRvci5kYXRhS2V5UHJvcGVydHldID09PSB2MltpZHhdW3RoaXMuZGVzY3JpcHRvci5kYXRhS2V5UHJvcGVydHldKSksXG4gICAgICAgICAgICAgICAgICAgIG1hcChpdGVtcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVyeVJlc3VsdCA9IG5ldyBNZWRpdXNRdWVyeVJlc3VsdDxUPigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlSZXN1bHQucGFnZURhdGEgPSBpdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UmVzdWx0LmFsbERhdGFDb3VudCA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeVJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmxvYWRpbmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nJCA9IHRoaXMubG9hZGluZyBpbnN0YW5jZW9mIE9ic2VydmFibGUgPyB0aGlzLmxvYWRpbmcgOiBvZih0aGlzLmxvYWRpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudXNlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHFwID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRUYWJsZUZyb21Sb3V0ZVVwZGF0ZShxcCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpbml0aWFsaXplIGRlZmF1bHQgc29ydCBpZiBwcmVzZW50XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0U29ydCA9IHRoaXMuZ2V0RGVmYXVsdFNvcnRNZXRhKCk7XG4gICAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMubXVsdGlTb3J0TWV0YSA9IGRlZmF1bHRTb3J0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaCh0ZW1wbGF0ZSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRlbXBsYXRlLmdldFR5cGUoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2NhcHRpb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcHRpb25UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdjb2x1bW5BY3Rpb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkFjdGlvblRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbG9hZChlbWl0RXZlbnQgPSBmYWxzZSwgcmVzZXRQYXJhbXMgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmxvYWRUYWJsZVdpdGhEYXRhUHJvdmlkZXIoXG4gICAgICAgICAgICByZXNldFBhcmFtcyA/IE1lZGl1c1F1ZXJ5UGFyYW1CdWlsZGVyLmNyZWF0ZSh0aGlzLnJvd3NQZXJQYWdlT3B0aW9uc1swXSwgMCkuYnVpbGQoKSA6IHRoaXMuZGF0YVByb3ZpZGVyTGF0ZXN0UXVlcnlQYXJhbSA/PyBuZXcgTWVkaXVzUXVlcnlQYXJhbSgpLFxuICAgICAgICAgICAgZW1pdEV2ZW50XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGFibGVMYXp5TG9hZChldmVudDogTGF6eUxvYWRFdmVudCkge1xuICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxhdGVzdExhenlMb2FkRXZlbnQgPSBldmVudDtcbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJMYXRlc3RMYXp5TG9hZEV2ZW50VmVyc2lvbisrO1xuXG4gICAgICAgIGlmICh0aGlzLnVzZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50Lm11bHRpU29ydE1ldGEgfHwgZXZlbnQubXVsdGlTb3J0TWV0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgZGVmYXVsdCBzb3J0IG1ldGEgdG8gZXZlbnQgaWYgbm90IG11bHRpc29ydCBtZXRhIGlzIHByZXNlbnRcbiAgICAgICAgICAgICAgICBldmVudC5tdWx0aVNvcnRNZXRhID0gdGhpcy5nZXREZWZhdWx0U29ydE1ldGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBNZWRpdXNSZXN0VXRpbC5mcm9tUHJpbWVMYXp5TG9hZEV2ZW50VG9Bbmd1bGFyUXVlcnlQYXJhbXMoZXZlbnQsIHRoaXMucm93c1BlclBhZ2VPcHRpb25zWzBdKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBtZWRpdXNRdWVyeVBhcmFtcyA9IGV2ZW50ID8gTWVkaXVzUmVzdFV0aWwuZnJvbVByaW1lTGF6eUxvYWRFdmVudFRvTWVkaXVzUXVlcnlQYXJhbXMoZXZlbnQpIDogbmV3IE1lZGl1c1F1ZXJ5UGFyYW0oKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFRhYmxlV2l0aERhdGFQcm92aWRlcihtZWRpdXNRdWVyeVBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIG9uVGFibGVTb3J0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5pc1NvcnRDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgcHVibGljIG9uVGFibGVGaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgICAgICB0aGlzLmlzRmlsdGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2VsbENsaWNrKGNvbDogQ29sdW1uRGVzY3JpcHRvcjxhbnksIFQ+LCBpdGVtOiBULCBpZHg6IG51bWJlcikge1xuICAgICAgICBjb25zdCBtbmdFdmVudCA9IG5ldyBNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+KGNvbCwgaXRlbSwgaWR4KTtcbiAgICAgICAgdGhpcy5jZWxsQ2xpY2tFdmVudEVtaXR0ZXIubmV4dChtbmdFdmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKGV2ZW50OiBBcnJheTxUPikge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZUV2ZW50RW1pdHRlci5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DYXB0aW9uQ21wSW5zdDxDPihpbnN0YW5jZTogQykge1xuICAgICAgICB0aGlzLmNhcHRpb25DbXBJbnN0RXZlbnRFbWl0dGVyLm5leHQoaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNvbHVtbkFjdGlvbkNtcEluc3Q8Qz4oaW5zdGFuY2U6IEMpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5BY3Rpb25DbXBJbnN0RXZlbnRFbWl0dGVyLm5leHQoaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFRhYmxlV2l0aERhdGFQcm92aWRlcihxdWVyeVBhcmFtOiBNZWRpdXNRdWVyeVBhcmFtIHwgbnVsbCA9IG51bGwsIGVtaXRFdmVudCA9IHRydWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZURhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcblxuICAgICAgICBpZiAoIXF1ZXJ5UGFyYW0pIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW0gPSBNZWRpdXNRdWVyeVBhcmFtQnVpbGRlci5jcmVhdGUodGhpcy5yb3dzUGVyUGFnZU9wdGlvbnNbMF0pLmJ1aWxkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJMYXRlc3RRdWVyeVBhcmFtID0gcXVlcnlQYXJhbTtcbiAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJMYXRlc3RRdWVyeVBhcmFtVmVyc2lvbisrO1xuXG4gICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyU3Vic2NyaXB0aW9uID0gdGhpcy5kYXRhUHJvdmlkZXI/LmdldEFsbChxdWVyeVBhcmFtLCB0aGlzLmRhdGFQcm92aWRlclNlcnZpY2UpLnN1YnNjcmliZShcbiAgICAgICAgICAgIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGaWx0ZXJDaGFuZ2VkIHx8IHRoaXMuaXNTb3J0Q2hhbmdlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJJbmZpbml0ZVNjcm9sbEl0ZW1zID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJJbmZpbml0ZVNjcm9sbEl0ZW1zLnNwbGljZShxdWVyeVBhcmFtIS5pdGVtc09mZnNldCA/PyAwLCBxdWVyeVBhcmFtIS5pdGVtc1BlclBhZ2UgPz8gdGhpcy5yb3dzLCAuLi4ocmVzLnBhZ2VEYXRhID8/IFtdKSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVySW5maW5pdGVTY3JvbGxJdGVtcyA9IFsuLi50aGlzLmRhdGFQcm92aWRlckluZmluaXRlU2Nyb2xsSXRlbXNdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyUXVlcnlSZXN1bHRTdWJqZWN0Lm5leHQocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5pc0ZpbHRlckNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU29ydENoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uVXRpbC50YWJsZU5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCB0aGlzLmRlc2NyaXB0b3IsIGVyciwgdGhpcy52aWV3Q29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbXB0eVF1ZXJ5UmVzdWx0ID0gbmV3IE1lZGl1c1F1ZXJ5UmVzdWx0PFQ+KCk7XG4gICAgICAgICAgICAgICAgZW1wdHlRdWVyeVJlc3VsdC5wYWdlRGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgIGVtcHR5UXVlcnlSZXN1bHQuYWxsRGF0YUNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlclF1ZXJ5UmVzdWx0U3ViamVjdC5uZXh0KGVtcHR5UXVlcnlSZXN1bHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGVtaXRFdmVudCkge1xuICAgICAgICAgICAgY29uc3QgbW5nRXZlbnQgPSBuZXcgTW5nVGFibGVMb2FkRXZlbnQoKTtcbiAgICAgICAgICAgIG1uZ0V2ZW50Lm9yaWdpbmFsRXZlbnQgPSB0aGlzLmRhdGFQcm92aWRlckxhdGVzdExhenlMb2FkRXZlbnQgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbW5nRXZlbnQucXVlcnlQYXJhbSA9IHF1ZXJ5UGFyYW07XG4gICAgICAgICAgICB0aGlzLmxvYWRFdmVudEVtaXR0ZXIubmV4dChtbmdFdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRUYWJsZUZyb21Sb3V0ZVVwZGF0ZShwYXJhbXM6IFBhcmFtcykge1xuICAgICAgICBjb25zdCBtZWRpdXNRdWVyeVBhcmFtID0gTWVkaXVzUmVzdFV0aWwuZnJvbUFuZ3VsYXJRdWVyeVBhcmFtc1RvTWVkaXVzUXVlcnlQYXJhbXMocGFyYW1zLCB0aGlzLmZpbHRlckRlc2NyaXB0b3JzLCB0aGlzLnJvd3NQZXJQYWdlT3B0aW9uc1swXSk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlckxhdGVzdExhenlMb2FkRXZlbnRWZXJzaW9uIDwgdGhpcy5kYXRhUHJvdmlkZXJMYXRlc3RRdWVyeVBhcmFtVmVyc2lvbiArIDEpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBvbmx5IGlmIG5ldyB2ZXJzaW9uIGZyb20gcXVlcnkgcGFyYW1zIHdpbGwgYmUgaGlnaGVyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByaW1lU29ydEFuZEZpbHRlcihtZWRpdXNRdWVyeVBhcmFtKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVzZVF1ZXJ5UGFyYW1zSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRUYWJsZVdpdGhEYXRhUHJvdmlkZXIobWVkaXVzUXVlcnlQYXJhbSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQcmltZVNvcnRBbmRGaWx0ZXIobWVkaXVzUXVlcnlQYXJhbTogTWVkaXVzUXVlcnlQYXJhbSkge1xuICAgICAgICBjb25zdCBwcmltZVNvcnRNZXRhOiBTb3J0TWV0YVtdID0gW107XG4gICAgICAgIGNvbnN0IHByaW1lRmlsdGVyTWV0YToge1tzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YSB8IEZpbHRlck1ldGFkYXRhW119ID0ge307XG5cbiAgICAgICAgdGhpcy5maWx0ZXJEZXNjcmlwdG9ycy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgcHJpbWVGaWx0ZXJNZXRhW2YucHJvcGVydHldID0ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogZi5maWx0ZXJUeXBlID09PSBUeXBlRW51bS5TdHJpbmcgPyAnY29udGFpbnMnIDogJ2VxdWFscydcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIG1lZGl1c1F1ZXJ5UGFyYW0/LnNvcnRQcm9wZXJ0eT8uZm9yRWFjaCgocywgaWR4KSA9PiB7XG4gICAgICAgICAgICBwcmltZVNvcnRNZXRhLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkOiBzLFxuICAgICAgICAgICAgICAgIG9yZGVyOiBtZWRpdXNRdWVyeVBhcmFtPy5zb3J0QXNjPy5baWR4XSA/PyB0cnVlID8gMSA6IC0xXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbWVkaXVzUXVlcnlQYXJhbT8uZmlsdGVyUGFyYW1zPy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuZmlsdGVyRGVzY3JpcHRvcnMuZmluZChmZCA9PiBmZC5maWx0ZXJQcm9wZXJ0eSA9PT0gZi5wcm9wZXJ0eSB8fCBmZC5wcm9wZXJ0eSA9PT0gZi5wcm9wZXJ0eSk7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRvciA9IE1lZGl1c1Jlc3RVdGlsLm1hdGNoTW9kZU1hcHBpbmcuZmluZChtYXBwaW5nID0+IG1hcHBpbmdbMl0gPT09IGYuZmlsdGVyTWF0Y2hUeXBlKTtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yICYmIG9wZXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgcHJpbWVGaWx0ZXJNZXRhW2Rlc2NyaXB0b3IucHJvcGVydHldID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZi5maWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiBvcGVyYXRvclswXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubXVsdGlTb3J0TWV0YSA9IHByaW1lU29ydE1ldGE7XG4gICAgICAgIHRoaXMuZmlsdGVyTWV0YWRhdGEgPSBwcmltZUZpbHRlck1ldGE7XG4gICAgICAgIHRoaXMucm93cyA9IG1lZGl1c1F1ZXJ5UGFyYW0/Lml0ZW1zUGVyUGFnZSA/PyB0aGlzLnJvd3NQZXJQYWdlT3B0aW9uc1swXTtcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBtZWRpdXNRdWVyeVBhcmFtPy5pdGVtc09mZnNldCA/PyAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGVmYXVsdFNvcnRNZXRhKCk6IFNvcnRNZXRhW10ge1xuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yLmhhc0RlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yLmRlZmF1bHRTb3J0UHJvcGVydHkubWFwKFxuICAgICAgICAgICAgICAgIChwLCBpZHgpID0+XG4gICAgICAgICAgICAgICAgICAgIDxTb3J0TWV0YT57XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiB0aGlzLmRlc2NyaXB0b3IuZGVmYXVsdFNvcnRBc2NbaWR4XSA/IDEgOiAtMVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBbc3R5bGUuaGVpZ2h0XT1cInNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnID8gJ2NhbGMoMTAwdmggLSAnICsgZGVzY3JpcHRvci50YWJsZUZ1bGxIZWlnaHRPZmZzZXQgKyAncHgpJyA6IG51bGxcIj5cbiAgICA8IS0tIE1VU1QgTk9UIHVzZSBvYnNlcnZhYmxlIGZvciB2YWx1ZSB3aGVuIHVzaW5nIHZpcnR1YWwgc2Nyb2xsIC0gZG9lcyBub3Qgd29yayBmb3Igc29tZSByZWFzb24gLS0+XG4gICAgPHAtdGFibGVcbiAgICAgICAgKm5nSWY9XCIhdXNlUXVlcnlQYXJhbXMgfHwgdXNlUXVlcnlQYXJhbXNJbml0aWFsaXplZFwiXG4gICAgICAgIFt2YWx1ZV09XCJpbmZpbml0ZVNjcm9sbCA/IGRhdGFQcm92aWRlckluZmluaXRlU2Nyb2xsSXRlbXMgOiAocXVlcnlSZXN1bHQkIHwgYXN5bmMpPy5wYWdlRGF0YSA/PyBbXVwiXG4gICAgICAgIFtkYXRhS2V5XT1cIiRhbnkoZGVzY3JpcHRvci5kYXRhS2V5UHJvcGVydHkpXCJcbiAgICAgICAgW2xhenldPVwidXNlRGF0YVByb3ZpZGVyXCJcbiAgICAgICAgW2xvYWRpbmddPVwiKGxvYWRpbmckIHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgICAgW3BhZ2luYXRvcl09XCJ1c2VEYXRhUHJvdmlkZXIgJiYgIWluZmluaXRlU2Nyb2xsXCJcbiAgICAgICAgW3Jvd3NdPVwiJGFueShpbmZpbml0ZVNjcm9sbCA/IDIwIDogcm93cylcIlxuICAgICAgICBbZmlyc3RdPVwiJGFueShpbmZpbml0ZVNjcm9sbCA/IDAgOiBvZmZzZXQpXCJcbiAgICAgICAgW3RvdGFsUmVjb3Jkc109XCIkYW55KGluZmluaXRlU2Nyb2xsID8gbnVsbCA6IChxdWVyeVJlc3VsdCQgfCBhc3luYyk/LmFsbERhdGFDb3VudCA/PyAwKVwiXG4gICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwiJGFueShpbmZpbml0ZVNjcm9sbCA/IG51bGwgOiByb3dzUGVyUGFnZU9wdGlvbnMpXCJcbiAgICAgICAgW3Nob3dDdXJyZW50UGFnZVJlcG9ydF09XCIhaW5maW5pdGVTY3JvbGxcIlxuICAgICAgICBbY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZV09XCInbW5nVGFibGUucGFnaW5hdGlvbk1zZycgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbbXVsdGlTb3J0TWV0YV09XCIkYW55KG11bHRpU29ydE1ldGEpXCJcbiAgICAgICAgW2ZpbHRlcnNdPVwiZmlsdGVyTWV0YWRhdGFcIlxuICAgICAgICBbKHNlbGVjdGlvbildPVwic2VsZWN0aW9uXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW3Njcm9sbGFibGVdPVwiaW5maW5pdGVTY3JvbGxcIlxuICAgICAgICBbdmlydHVhbFNjcm9sbF09XCJpbmZpbml0ZVNjcm9sbFwiXG4gICAgICAgIFt2aXJ0dWFsUm93SGVpZ2h0XT1cIiRhbnkocm93SGVpZ2h0KVwiXG4gICAgICAgIFtzY3JvbGxIZWlnaHRdPVwiJGFueShzY3JvbGxIZWlnaHQpXCJcbiAgICAgICAgW3Jvd0hvdmVyXT1cInRydWVcIlxuICAgICAgICAob25MYXp5TG9hZCk9XCJvblRhYmxlTGF6eUxvYWQoJGV2ZW50KVwiXG4gICAgICAgIChvblNvcnQpPVwib25UYWJsZVNvcnQoJGV2ZW50KVwiXG4gICAgICAgIChvbkZpbHRlcik9XCJvblRhYmxlRmlsdGVyKCRldmVudClcIlxuICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgc29ydE1vZGU9XCJtdWx0aXBsZVwiXG4gICAgICAgIHJlc3BvbnNpdmVMYXlvdXQ9XCJzY3JvbGxcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiY2FwdGlvblRlbXBsYXRlIHx8IGNhcHRpb25Db21wb25lbnQgfHwgZGVzY3JpcHRvci50aXRsZVwiIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYXB0aW9uVGVtcGxhdGU7IGVsc2UgY29tcG9uZW50T3JEZWZhdWx0Q2FwdGlvblwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXB0aW9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb21wb25lbnRPckRlZmF1bHRDYXB0aW9uPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYXB0aW9uQ29tcG9uZW50OyBlbHNlIGRlZmF1bHRDYXB0aW9uXCIgW21uZ0NvbXBvbmVudF09XCJjYXB0aW9uQ29tcG9uZW50XCIgKGluc3RhbmNlQ3JlYXRlZCk9XCJvbkNhcHRpb25DbXBJbnN0KCRldmVudClcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDYXB0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJwLTAgbS0wXCI+e3sgZGVzY3JpcHRvci50aXRsZSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICAgICAgPHRyICpuZ0lmPVwiIWRlc2NyaXB0b3IuaGlkZUhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInNlbGVjdGlvbkVuYWJsZWQgJiYgc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cC10YWJsZUhlYWRlckNoZWNrYm94PjwvcC10YWJsZUhlYWRlckNoZWNrYm94PlxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPCEtLSBXZSBuZWVkIHRoZSBsaW5lIGJlbG93LCBiZWNhdXNlIG90aGVyd2lzZSBwLXRhYmxlUmFkaW9CdXR0b24gc2hpZnRzIHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zIGluIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInNlbGVjdGlvbkVuYWJsZWQgJiYgc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZSdcIiBzdHlsZT1cIndpZHRoOiAyLjI1ZW1cIj48L3RoPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBkZXNjcmlwdG9yLmNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiY29sLmlzU29ydEVuYWJsZWRcIiBbcFNvcnRhYmxlQ29sdW1uXT1cImNvbC5wcm9wZXJ0eVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sLnRpdGxlID8/IChjb2wucHJvcGVydHkgfCBpMThuUHJvcGVydHk6IGRlc2NyaXB0b3IubW9kZWwpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtc29ydEljb24gW2ZpZWxkXT1cImNvbC5wcm9wZXJ0eVwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bW5nLXRhYmxlLWNvbHVtbi1maWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuZmlsdGVyRGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmZpbHRlckRpc3BsYXkgPT09IGZpbHRlckRpc3BsYXlNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbC1hdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiZGVzY3JpcHRvci5maWx0ZXJEaXNwbGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiY29sLmZpbHRlckRlc2NyaXB0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21uZy10YWJsZS1jb2x1bW4tZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFjb2wuaXNTb3J0RW5hYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgY29sLnRpdGxlID8/IChjb2wucHJvcGVydHkgfCBpMThuUHJvcGVydHk6IGRlc2NyaXB0b3IubW9kZWwpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctdGFibGUtY29sdW1uLWZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5maWx0ZXJEZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZmlsdGVyRGlzcGxheSA9PT0gZmlsdGVyRGlzcGxheU1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1sLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheV09XCJkZXNjcmlwdG9yLmZpbHRlckRpc3BsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVzY3JpcHRvcl09XCJjb2wuZmlsdGVyRGVzY3JpcHRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbW5nLXRhYmxlLWNvbHVtbi1maWx0ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJjb2x1bW5BY3Rpb25UZW1wbGF0ZSB8fCBjb2x1bW5BY3Rpb25Db21wb25lbnRcIj48L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0ciAqbmdJZj1cImRlc2NyaXB0b3IuZmlsdGVyRGlzcGxheSA9PT0gZmlsdGVyRGlzcGxheVJvd1wiPlxuICAgICAgICAgICAgICAgIDwhLS0gV2UgbmVlZCB0aGUgbGluZSBiZWxvdywgYmVjYXVzZSBvdGhlcndpc2UgcC10YWJsZVJhZGlvQnV0dG9uIHNoaWZ0cyB0aGUgcmVzdCBvZiB0aGUgY29sdW1ucyBpbiB0YWJsZSAtLT5cbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJzZWxlY3Rpb25FbmFibGVkICYmIHNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnXCIgc3R5bGU9XCJ3aWR0aDogMi4yNWVtXCI+PC90aD5cbiAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbCBvZiBkZXNjcmlwdG9yLmNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIiAqbmdJZj1cImNvbC5maWx0ZXJEZXNjcmlwdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLXRhYmxlLWNvbHVtbi1maWx0ZXIgW2Rpc3BsYXldPVwiZGVzY3JpcHRvci5maWx0ZXJEaXNwbGF5XCIgW2Rlc2NyaXB0b3JdPVwiY29sLmZpbHRlckRlc2NyaXB0b3JcIj48L21uZy10YWJsZS1jb2x1bW4tZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImNvbHVtbkFjdGlvblRlbXBsYXRlIHx8IGNvbHVtbkFjdGlvbkNvbXBvbmVudFwiPjwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWl0ZW0gbGV0LWlkeD1cInJvd0luZGV4XCI+XG4gICAgICAgICAgICA8dHIgW3N0eWxlLmhlaWdodC5weF09XCJkZXNjcmlwdG9yLnJvd0hlaWdodFwiPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNlbGVjdGlvbkVuYWJsZWQgJiYgc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJzZWxlY3Rpb25FbmFibGVkICYmIHNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwLXRhYmxlUmFkaW9CdXR0b24gW3ZhbHVlXT1cIml0ZW1cIj48L3AtdGFibGVSYWRpb0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sIG9mIGRlc2NyaXB0b3IuY29sdW1uc1wiIChjbGljayk9XCJvbkNlbGxDbGljayhjb2wsIGl0ZW0sIGlkeClcIiBbY2xhc3MuY2xpY2thYmxlXT1cImlzQ29sdW1uQ2xpY2thYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtbmctdGFibGUtY29sdW1uLXZhbHVlIFtkZXNjcmlwdG9yXT1cImNvbFwiIFtpdGVtXT1cIml0ZW1cIj48L21uZy10YWJsZS1jb2x1bW4tdmFsdWU+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJjb2x1bW5BY3Rpb25UZW1wbGF0ZSB8fCBjb2x1bW5BY3Rpb25Db21wb25lbnRcIiBjbGFzcz1cInRleHQtcmlnaHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbkFjdGlvblRlbXBsYXRlOyBlbHNlIHNob3dDb2x1bW5BY3Rpb25Db21wb25lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5BY3Rpb25UZW1wbGF0ZTsgY29udGV4dDoge3Jvd0l0ZW06IGl0ZW0sIHJvd0luZGV4OiBpZHh9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3Nob3dDb2x1bW5BY3Rpb25Db21wb25lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbW5nQ29tcG9uZW50XT1cImNvbHVtbkFjdGlvbkNvbXBvbmVudCFcIiAoaW5zdGFuY2VDcmVhdGVkKT1cIm9uQ29sdW1uQWN0aW9uQ21wSW5zdCgkZXZlbnQpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJsb2FkaW5nYm9keVwiPlxuICAgICAgICAgICAgPHRyIFtzdHlsZS5oZWlnaHQucHhdPVwiZGVzY3JpcHRvci5yb3dIZWlnaHRcIj5cbiAgICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJkZXNjcmlwdG9yLmNvbHVtbnMubGVuZ3RoICsgKGNvbHVtbkFjdGlvblRlbXBsYXRlIHx8IGNvbHVtbkFjdGlvbkNvbXBvbmVudCA/IDEgOiAwKSArIChzZWxlY3Rpb25FbmFibGVkID8gMSA6IDApXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLXRleHRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHAtc2tlbGV0b24gW25nU3R5bGVdPVwie3dpZHRoOiAnMTAwJSd9XCI+PC9wLXNrZWxldG9uPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eW1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDx0ciBbc3R5bGUuaGVpZ2h0LnB4XT1cInJvd0hlaWdodFwiPlxuICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImRlc2NyaXB0b3IuY29sdW1ucy5sZW5ndGggKyAoY29sdW1uQWN0aW9uVGVtcGxhdGUgfHwgY29sdW1uQWN0aW9uQ29tcG9uZW50ID8gMSA6IDApICsgKHNlbGVjdGlvbkVuYWJsZWQgPyAxIDogMClcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ21uZ1RhYmxlLm5vSXRlbXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXRhYmxlPlxuPC9kaXY+XG4iXX0=
|
|
@@ -37,7 +37,7 @@ export class MngTableviewComponent {
|
|
|
37
37
|
if (this.dataProvider) {
|
|
38
38
|
this.viewContainerService.dataProvider = this.dataProvider;
|
|
39
39
|
}
|
|
40
|
-
const reloadTableSubscription = this.viewContainerService.reloadTable
|
|
40
|
+
const reloadTableSubscription = this.viewContainerService.reloadTable.subscribe(() => {
|
|
41
41
|
this.reloadTable();
|
|
42
42
|
});
|
|
43
43
|
this.subscriptions.push(reloadTableSubscription);
|
|
@@ -74,13 +74,13 @@ export class MngTableviewComponent {
|
|
|
74
74
|
onTableCellClick(event) {
|
|
75
75
|
if (this.rowClickActions.length) {
|
|
76
76
|
for (const action of this.rowClickActions) {
|
|
77
|
-
this.actionExecutor.triggerRowClickAction(action, event, this.route);
|
|
77
|
+
this.actionExecutor.triggerRowClickAction(action, event, this.route, this.descriptor.table);
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
MngTableviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngTableviewComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.MessageService }, { token: i3.TranslateService }, { token: i4.DialogService }, { token: i2.ConfirmationService }, { token: i5.MngActionExecutorService }, { token: i5.MngViewContainerComponentService }], target: i0.ɵɵFactoryTarget.Component });
|
|
83
|
-
MngTableviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngTableviewComponent, selector: "mng-tableview", inputs: { descriptor: "descriptor", dataProvider: "dataProvider", actions: "actions" }, providers: [MessageService, ConfirmationService, MngViewContainerComponentService], viewQueries: [{ propertyName: "tableComponent", first: true, predicate: MngTableComponent, descendants: true }], ngImport: i0, template: "<div class=\"mng-tableview\">\n <p-toast></p-toast>\n\n <div class=\"card\">\n <p-toolbar styleClass=\"mb-4\" *ngIf=\"toolbarLeftActions.length > 0 || toolbarRightActions.length > 0\">\n <ng-template pTemplate=\"left\">\n <mng-action *ngFor=\"let action of toolbarLeftActions\" [action]=\"action\"> </mng-action>\n </ng-template>\n\n <ng-template pTemplate=\"right\">\n <mng-action *ngFor=\"let action of toolbarRightActions\" [action]=\"action\"> </mng-action>\n </ng-template>\n </p-toolbar>\n\n <mng-table\n [descriptor]=\"descriptor.table\"\n [dataProvider]=\"dataProvider\"\n [useQueryParams]=\"true\"\n (cellClick)=\"onTableCellClick($event)\"\n [isColumnClickable]=\"rowClickActions.length > 0\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-between table-header\">\n <h5 class=\"p-0 m-0\">{{ descriptor.tableTitle | translate }}</h5>\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\">\n <mng-action\n *ngFor=\"let action of rowInlineActions\"\n [action]=\"action\"\n [item]=\"item\"\n [itemId]=\"descriptor.model.idPropertyName ? item[descriptor.model.idPropertyName] : null\">\n </mng-action>\n </ng-template>\n </mng-table>\n </div>\n\n <router-outlet></router-outlet>\n</div>\n", components: [{ type: i6.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i7.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass"] }, { type: i8.MngActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData", "dataProvider", "disabled", "loading", "viewContainer"], outputs: ["trigger"] }, { type: i9.MngTableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "isColumnClickable", "captionComponent", "columnActionComponent"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnActionComponentInstance"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.MngTemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }, { type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], pipes: { "translate": i3.TranslatePipe } });
|
|
83
|
+
MngTableviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: MngTableviewComponent, selector: "mng-tableview", inputs: { descriptor: "descriptor", dataProvider: "dataProvider", actions: "actions" }, providers: [MessageService, ConfirmationService, MngViewContainerComponentService], viewQueries: [{ propertyName: "tableComponent", first: true, predicate: MngTableComponent, descendants: true }], ngImport: i0, template: "<div class=\"mng-tableview\">\n <p-toast></p-toast>\n\n <div class=\"card\">\n <p-toolbar styleClass=\"mb-4\" *ngIf=\"toolbarLeftActions.length > 0 || toolbarRightActions.length > 0\">\n <ng-template pTemplate=\"left\">\n <mng-action *ngFor=\"let action of toolbarLeftActions\" [action]=\"action\"> </mng-action>\n </ng-template>\n\n <ng-template pTemplate=\"right\">\n <mng-action *ngFor=\"let action of toolbarRightActions\" [action]=\"action\"> </mng-action>\n </ng-template>\n </p-toolbar>\n\n <mng-table\n [descriptor]=\"descriptor.table\"\n [dataProvider]=\"dataProvider\"\n [useQueryParams]=\"true\"\n (cellClick)=\"onTableCellClick($event)\"\n [isColumnClickable]=\"rowClickActions.length > 0\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-between table-header\">\n <h5 class=\"p-0 m-0\">{{ descriptor.tableTitle | translate }}</h5>\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\">\n <mng-action\n *ngFor=\"let action of rowInlineActions\"\n [action]=\"action\"\n [item]=\"item\"\n [itemId]=\"descriptor.model.idPropertyName ? item[descriptor.model.idPropertyName] : null\">\n </mng-action>\n </ng-template>\n </mng-table>\n </div>\n\n <router-outlet></router-outlet>\n</div>\n", components: [{ type: i6.Toast, selector: "p-toast", inputs: ["key", "autoZIndex", "baseZIndex", "style", "styleClass", "position", "preventOpenDuplicates", "preventDuplicates", "showTransformOptions", "hideTransformOptions", "showTransitionOptions", "hideTransitionOptions", "breakpoints"], outputs: ["onClose"] }, { type: i7.Toolbar, selector: "p-toolbar", inputs: ["style", "styleClass"] }, { type: i8.MngActionComponent, selector: "mng-action", inputs: ["action", "item", "itemId", "actionData", "dataProvider", "disabled", "loading", "viewContainer"], outputs: ["trigger"] }, { type: i9.MngTableComponent, selector: "mng-table", inputs: ["descriptor", "items", "queryResult", "loading", "dataProvider", "useQueryParams", "selectionMode", "selectionEnabled", "isColumnClickable", "viewContainer", "captionComponent", "columnActionComponent"], outputs: ["tableLoad", "cellClick", "selectionChange", "captionComponentInstance", "columnActionComponentInstance"] }], directives: [{ type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.MngTemplateDirective, selector: "[mngTemplate]", inputs: ["type", "mngTemplate"] }, { type: i1.RouterOutlet, selector: "router-outlet", outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }], pipes: { "translate": i3.TranslatePipe } });
|
|
84
84
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: MngTableviewComponent, decorators: [{
|
|
85
85
|
type: Component,
|
|
86
86
|
args: [{ selector: 'mng-tableview', providers: [MessageService, ConfirmationService, MngViewContainerComponentService], template: "<div class=\"mng-tableview\">\n <p-toast></p-toast>\n\n <div class=\"card\">\n <p-toolbar styleClass=\"mb-4\" *ngIf=\"toolbarLeftActions.length > 0 || toolbarRightActions.length > 0\">\n <ng-template pTemplate=\"left\">\n <mng-action *ngFor=\"let action of toolbarLeftActions\" [action]=\"action\"> </mng-action>\n </ng-template>\n\n <ng-template pTemplate=\"right\">\n <mng-action *ngFor=\"let action of toolbarRightActions\" [action]=\"action\"> </mng-action>\n </ng-template>\n </p-toolbar>\n\n <mng-table\n [descriptor]=\"descriptor.table\"\n [dataProvider]=\"dataProvider\"\n [useQueryParams]=\"true\"\n (cellClick)=\"onTableCellClick($event)\"\n [isColumnClickable]=\"rowClickActions.length > 0\">\n <ng-template mngTemplate=\"caption\">\n <div class=\"flex flex-column md:flex-row md:justify-content-between table-header\">\n <h5 class=\"p-0 m-0\">{{ descriptor.tableTitle | translate }}</h5>\n </div>\n </ng-template>\n <ng-template mngTemplate=\"columnAction\" let-item=\"rowItem\">\n <mng-action\n *ngFor=\"let action of rowInlineActions\"\n [action]=\"action\"\n [item]=\"item\"\n [itemId]=\"descriptor.model.idPropertyName ? item[descriptor.model.idPropertyName] : null\">\n </mng-action>\n </ng-template>\n </mng-table>\n </div>\n\n <router-outlet></router-outlet>\n</div>\n" }]
|
|
@@ -94,4 +94,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImpor
|
|
|
94
94
|
type: ViewChild,
|
|
95
95
|
args: [MngTableComponent]
|
|
96
96
|
}] } });
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUtoRSxPQUFPLEVBQW1CLGtCQUFrQixFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBRTVGLE9BQU8sRUFBMkIsZ0NBQWdDLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8scUJBQXFCO0lBYzlCLFlBQ1ksS0FBcUIsRUFDckIsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxjQUF3QyxFQUN4QyxvQkFBNEQ7UUFONUQsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBMEI7UUFDeEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF3QztRQWxCeEQsWUFBTyxHQUErQixFQUFFLENBQUM7UUFFcEIsbUJBQWMsR0FBbUMsSUFBSSxDQUFDO1FBRXBGLG9CQUFlLEdBQTBCLEVBQUUs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ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0lEYXRhUHJvdmlkZXIsIElUYWJsZXZpZXdEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uUG9zaXRpb25FbnVtLCBUYWJsZXZpZXdEZXNjcmlwdG9yfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9ycyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsIE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge01uZ1RhYmxlQ2VsbENsaWNrRXZlbnR9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7TW5nVGFibGVDb21wb25lbnR9IGZyb20gJy4vdGFibGUvdGFibGUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGV2aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZSwgQ29uZmlybWF0aW9uU2VydmljZSwgTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE1uZ1RhYmxldmlld0NvbXBvbmVudDxULCBTPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBJVmlld0NvbnRhaW5lcjxULCBTPiB7XG4gICAgQElucHV0KCkgcHVibGljIGRlc2NyaXB0b3IhOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkYXRhUHJvdmlkZXI/OiBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuXG4gICAgQFZpZXdDaGlsZChNbmdUYWJsZUNvbXBvbmVudCkgcHVibGljIHRhYmxlQ29tcG9uZW50OiBNbmdUYWJsZUNvbXBvbmVudDxULCBTPiB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIHJvd0NsaWNrQWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIHJvd0lubGluZUFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyB0b29sYmFyTGVmdEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10gPSBbXTtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aW9uRXhlY3V0b3I6IE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz5cbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyU2VydmljZS5hY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyU2VydmljZS5kYXRhUHJvdmlkZXIgPSB0aGlzLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWxvYWRUYWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UucmVsb2FkVGFibGUkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZFRhYmxlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChyZWxvYWRUYWJsZVN1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5hY3Rpb25zKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlJvd0NsaWNrOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0NsaWNrQWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uUG9zaXRpb25FbnVtLlJvd0lubGluZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3dJbmxpbmVBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhckxlZnQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhckxlZnRBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uVG9vbGJhclJpZ2h0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2xiYXJSaWdodEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucyA9IHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucy5yZXZlcnNlKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBnZXRNZXNzYWdlU2VydmljZSgpOiBNZXNzYWdlU2VydmljZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VTZXJ2aWNlO1xuICAgIH1cblxuICAgIGdldERhdGFQcm92aWRlcigpOiBJRGF0YVByb3ZpZGVyPFQsIFM+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVByb3ZpZGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWxvYWRUYWJsZSgpIHtcbiAgICAgICAgdGhpcy50YWJsZUNvbXBvbmVudD8ucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGFibGVDZWxsQ2xpY2soZXZlbnQ6IE1uZ1RhYmxlQ2VsbENsaWNrRXZlbnQ8VD4pIHtcbiAgICAgICAgaWYgKHRoaXMucm93Q2xpY2tBY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhY3Rpb24gb2YgdGhpcy5yb3dDbGlja0FjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGlvbkV4ZWN1dG9yLnRyaWdnZXJSb3dDbGlja0FjdGlvbihhY3Rpb24sIGV2ZW50LCB0aGlzLnJvdXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJtbmctdGFibGV2aWV3XCI+XG4gICAgPHAtdG9hc3Q+PC9wLXRvYXN0PlxuXG4gICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cbiAgICAgICAgPHAtdG9vbGJhciBzdHlsZUNsYXNzPVwibWItNFwiICpuZ0lmPVwidG9vbGJhckxlZnRBY3Rpb25zLmxlbmd0aCA+IDAgfHwgdG9vbGJhclJpZ2h0QWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwibGVmdFwiPlxuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdG9vbGJhckxlZnRBY3Rpb25zXCIgW2FjdGlvbl09XCJhY3Rpb25cIj4gPC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cInJpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb24gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB0b29sYmFyUmlnaHRBY3Rpb25zXCIgW2FjdGlvbl09XCJhY3Rpb25cIj4gPC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9wLXRvb2xiYXI+XG5cbiAgICAgICAgPG1uZy10YWJsZVxuICAgICAgICAgICAgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvci50YWJsZVwiXG4gICAgICAgICAgICBbZGF0YVByb3ZpZGVyXT1cImRhdGFQcm92aWRlclwiXG4gICAgICAgICAgICBbdXNlUXVlcnlQYXJhbXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAoY2VsbENsaWNrKT1cIm9uVGFibGVDZWxsQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICBbaXNDb2x1bW5DbGlja2FibGVdPVwicm93Q2xpY2tBY3Rpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtbmdUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbHVtbiBtZDpmbGV4LXJvdyBtZDpqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB0YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwicC0wIG0tMFwiPnt7IGRlc2NyaXB0b3IudGFibGVUaXRsZSB8IHRyYW5zbGF0ZSB9fTwvaDU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1uZ1RlbXBsYXRlPVwiY29sdW1uQWN0aW9uXCIgbGV0LWl0ZW09XCJyb3dJdGVtXCI+XG4gICAgICAgICAgICAgICAgPG1uZy1hY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiByb3dJbmxpbmVBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2FjdGlvbl09XCJhY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1JZF09XCJkZXNjcmlwdG9yLm1vZGVsLmlkUHJvcGVydHlOYW1lID8gaXRlbVtkZXNjcmlwdG9yLm1vZGVsLmlkUHJvcGVydHlOYW1lXSA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICA8L21uZy1hY3Rpb24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L21uZy10YWJsZT5cbiAgICA8L2Rpdj5cblxuICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cbjwvZGl2PlxuIl19
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXZpZXcvdGFibGV2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFxQixTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFJN0UsT0FBTyxFQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUtoRSxPQUFPLEVBQW1CLGtCQUFrQixFQUFzQixNQUFNLG1CQUFtQixDQUFDO0FBRTVGLE9BQU8sRUFBMkIsZ0NBQWdDLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8scUJBQXFCO0lBYzlCLFlBQ1ksS0FBcUIsRUFDckIsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLG1CQUF3QyxFQUN4QyxjQUF3QyxFQUN4QyxvQkFBNEQ7UUFONUQsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBMEI7UUFDeEMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF3QztRQWxCeEQsWUFBTyxHQUErQixFQUFFLENBQUM7UUFFcEIsbUJBQWMsR0FBbUMsSUFBSSxDQUFDO1FBRXBGLG9CQUFlLEdBQTBCLEVBQUUsQ0FBQztRQUM1QyxxQkFBZ0IsR0FBMEIsRUFBRSxDQUFDO1FBQzdDLHVCQUFrQixHQUEwQixFQUFFLENBQUM7UUFDL0Msd0JBQW1CLEdBQTBCLEVBQUUsQ0FBQztRQUUvQyxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFVeEMsQ0FBQztJQUVKLFFBQVE7UUFDSixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFakQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUM5RDtRQUNELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFakQsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQy9CLFFBQVEsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDckIsS0FBSyxrQkFBa0IsQ0FBQyxRQUFRO29CQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDbEMsTUFBTTtnQkFDVixLQUFLLGtCQUFrQixDQUFDLFNBQVM7b0JBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ25DLE1BQU07Z0JBQ1YsS0FBSyxrQkFBa0IsQ0FBQyxXQUFXO29CQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUNyQyxNQUFNO2dCQUNWLEtBQUssa0JBQWtCLENBQUMsWUFBWTtvQkFDaEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsTUFBTTthQUNiO1NBQ0o7UUFFRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xFLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFRCxlQUFlO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBZ0M7UUFDcEQsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUM3QixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDL0Y7U0FDSjtJQUNMLENBQUM7O2tIQTdFUSxxQkFBcUI7c0dBQXJCLHFCQUFxQixnSUFGbkIsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsZ0NBQWdDLENBQUMsMEVBT3ZFLGlCQUFpQixnREN6QmhDLHluREFzQ0E7MkZEbEJhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDSSxlQUFlLGFBRWQsQ0FBQyxjQUFjLEVBQUUsbUJBQW1CLEVBQUUsZ0NBQWdDLENBQUM7cVRBR2xFLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUUrQixjQUFjO3NCQUFsRCxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0lEYXRhUHJvdmlkZXIsIElUYWJsZXZpZXdEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uUG9zaXRpb25FbnVtLCBUYWJsZXZpZXdEZXNjcmlwdG9yfSBmcm9tICcuLi8uLi9kZXNjcmlwdG9ycyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsIE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQge01uZ1RhYmxlQ2VsbENsaWNrRXZlbnR9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7TW5nVGFibGVDb21wb25lbnR9IGZyb20gJy4vdGFibGUvdGFibGUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGV2aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtNZXNzYWdlU2VydmljZSwgQ29uZmlybWF0aW9uU2VydmljZSwgTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE1uZ1RhYmxldmlld0NvbXBvbmVudDxULCBTPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBJVmlld0NvbnRhaW5lcjxULCBTPiB7XG4gICAgQElucHV0KCkgcHVibGljIGRlc2NyaXB0b3IhOiBUYWJsZXZpZXdEZXNjcmlwdG9yPFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkYXRhUHJvdmlkZXI/OiBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPFQ+PiA9IFtdO1xuXG4gICAgQFZpZXdDaGlsZChNbmdUYWJsZUNvbXBvbmVudCkgcHVibGljIHRhYmxlQ29tcG9uZW50OiBNbmdUYWJsZUNvbXBvbmVudDxULCBTPiB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIHJvd0NsaWNrQWN0aW9uczogQWN0aW9uRGVzY3JpcHRvcjxUPltdID0gW107XG4gICAgcHVibGljIHJvd0lubGluZUFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyB0b29sYmFyTGVmdEFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSA9IFtdO1xuICAgIHB1YmxpYyB0b29sYmFyUmlnaHRBY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10gPSBbXTtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWN0aW9uRXhlY3V0b3I6IE1uZ0FjdGlvbkV4ZWN1dG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz5cbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyU2VydmljZS5hY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuXG4gICAgICAgIGlmICh0aGlzLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyU2VydmljZS5kYXRhUHJvdmlkZXIgPSB0aGlzLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWxvYWRUYWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UucmVsb2FkVGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVsb2FkVGFibGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHJlbG9hZFRhYmxlU3Vic2NyaXB0aW9uKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLmFjdGlvbnMpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uUm93Q2xpY2s6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93Q2xpY2tBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0lubGluZUFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdDpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sYmFyTGVmdEFjdGlvbnMucHVzaChhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhclJpZ2h0QWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50b29sYmFyUmlnaHRBY3Rpb25zID0gdGhpcy50b29sYmFyUmlnaHRBY3Rpb25zLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIGdldE1lc3NhZ2VTZXJ2aWNlKCk6IE1lc3NhZ2VTZXJ2aWNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZVNlcnZpY2U7XG4gICAgfVxuXG4gICAgZ2V0RGF0YVByb3ZpZGVyKCk6IElEYXRhUHJvdmlkZXI8VCwgUz4gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbG9hZFRhYmxlKCkge1xuICAgICAgICB0aGlzLnRhYmxlQ29tcG9uZW50Py5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25UYWJsZUNlbGxDbGljayhldmVudDogTW5nVGFibGVDZWxsQ2xpY2tFdmVudDxUPikge1xuICAgICAgICBpZiAodGhpcy5yb3dDbGlja0FjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiB0aGlzLnJvd0NsaWNrQWN0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uRXhlY3V0b3IudHJpZ2dlclJvd0NsaWNrQWN0aW9uKGFjdGlvbiwgZXZlbnQsIHRoaXMucm91dGUsIHRoaXMuZGVzY3JpcHRvci50YWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW5nLXRhYmxldmlld1wiPlxuICAgIDxwLXRvYXN0PjwvcC10b2FzdD5cblxuICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgIDxwLXRvb2xiYXIgc3R5bGVDbGFzcz1cIm1iLTRcIiAqbmdJZj1cInRvb2xiYXJMZWZ0QWN0aW9ucy5sZW5ndGggPiAwIHx8IHRvb2xiYXJSaWdodEFjdGlvbnMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImxlZnRcIj5cbiAgICAgICAgICAgICAgICA8bW5nLWFjdGlvbiAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHRvb2xiYXJMZWZ0QWN0aW9uc1wiIFthY3Rpb25dPVwiYWN0aW9uXCI+IDwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJyaWdodFwiPlxuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgdG9vbGJhclJpZ2h0QWN0aW9uc1wiIFthY3Rpb25dPVwiYWN0aW9uXCI+IDwvbW5nLWFjdGlvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC10b29sYmFyPlxuXG4gICAgICAgIDxtbmctdGFibGVcbiAgICAgICAgICAgIFtkZXNjcmlwdG9yXT1cImRlc2NyaXB0b3IudGFibGVcIlxuICAgICAgICAgICAgW2RhdGFQcm92aWRlcl09XCJkYXRhUHJvdmlkZXJcIlxuICAgICAgICAgICAgW3VzZVF1ZXJ5UGFyYW1zXT1cInRydWVcIlxuICAgICAgICAgICAgKGNlbGxDbGljayk9XCJvblRhYmxlQ2VsbENsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgW2lzQ29sdW1uQ2xpY2thYmxlXT1cInJvd0NsaWNrQWN0aW9ucy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbW5nVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2x1bW4gbWQ6ZmxleC1yb3cgbWQ6anVzdGlmeS1jb250ZW50LWJldHdlZW4gdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInAtMCBtLTBcIj57eyBkZXNjcmlwdG9yLnRhYmxlVGl0bGUgfCB0cmFuc2xhdGUgfX08L2g1PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtbmdUZW1wbGF0ZT1cImNvbHVtbkFjdGlvblwiIGxldC1pdGVtPVwicm93SXRlbVwiPlxuICAgICAgICAgICAgICAgIDxtbmctYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygcm93SW5saW5lQWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwiYWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtSWRdPVwiZGVzY3JpcHRvci5tb2RlbC5pZFByb3BlcnR5TmFtZSA/IGl0ZW1bZGVzY3JpcHRvci5tb2RlbC5pZFByb3BlcnR5TmFtZV0gOiBudWxsXCI+XG4gICAgICAgICAgICAgICAgPC9tbmctYWN0aW9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9tbmctdGFibGU+XG4gICAgPC9kaXY+XG5cbiAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW5nLWNvbmZpZy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29uZmlnL21vZGVscy9tbmctY29uZmlnLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtNZW51SXRlbX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1uZ01vZHVsZUNvbmZpZyB7XG4gICAgYXBwPzoge1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICBvd25lcj86IHN0cmluZztcbiAgICAgICAgbG9nb1BhdGg/OiBzdHJpbmc7XG4gICAgICAgIGxvZ29QYXRoTGlnaHQ/OiBzdHJpbmc7XG4gICAgICAgIGxvZ29QYXRoRGFyaz86IHN0cmluZztcbiAgICAgICAgbG9nb05hbWVQYXRoPzogc3RyaW5nO1xuICAgICAgICBsb2dvTmFtZVBhdGhMaWdodD86IHN0cmluZztcbiAgICAgICAgbG9nb05hbWVQYXRoRGFyaz86IHN0cmluZztcbiAgICAgICAgbGFuZ3VhZ2VzPzogc3RyaW5nW107XG4gICAgICAgIGNvbG9yU2NoZW1lPzogJ2xpZ2h0JyB8ICdkYXJrJztcbiAgICB9O1xuICAgIG1lbnU/OiB7XG4gICAgICAgIG1vZGU/OiAnc3RhdGljJyB8ICdzaWRlYmFyJyB8ICdzbGltJyB8ICdvdmVybGF5JztcbiAgICAgICAgbWVudUl0ZW1zPzogTWVudUl0ZW1bXTtcbiAgICAgICAgcGluRW5hYmxlZD86IGJvb2xlYW47XG4gICAgfTtcbiAgICBjb25maWd1cmF0aW9uPzoge1xuICAgICAgICBwcm9qZWN0RW52aXJvbm1lbnQ/OiBhbnk7XG4gICAgICAgIGpzb25Tb3VyY2U/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW5nLWNvbmZpZy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29uZmlnL21vZGVscy9tbmctY29uZmlnLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtNZW51SXRlbX0gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1uZ01vZHVsZUNvbmZpZyB7XG4gICAgYXBwPzoge1xuICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICBvd25lcj86IHN0cmluZztcbiAgICAgICAgbG9nb1BhdGg/OiBzdHJpbmc7XG4gICAgICAgIGxvZ29QYXRoTGlnaHQ/OiBzdHJpbmc7XG4gICAgICAgIGxvZ29QYXRoRGFyaz86IHN0cmluZztcbiAgICAgICAgbG9nb05hbWVQYXRoPzogc3RyaW5nO1xuICAgICAgICBsb2dvTmFtZVBhdGhMaWdodD86IHN0cmluZztcbiAgICAgICAgbG9nb05hbWVQYXRoRGFyaz86IHN0cmluZztcbiAgICAgICAgbGFuZ3VhZ2VzPzogc3RyaW5nW107XG4gICAgICAgIGNvbG9yU2NoZW1lPzogJ2xpZ2h0JyB8ICdkYXJrJztcbiAgICB9O1xuICAgIG1lbnU/OiB7XG4gICAgICAgIG1vZGU/OiAnc3RhdGljJyB8ICdzaWRlYmFyJyB8ICdzbGltJyB8ICdvdmVybGF5JztcbiAgICAgICAgbWVudUl0ZW1zPzogTWVudUl0ZW1bXTtcbiAgICAgICAgcGluRW5hYmxlZD86IGJvb2xlYW47XG4gICAgfTtcbiAgICBjb25maWd1cmF0aW9uPzoge1xuICAgICAgICBwcm9qZWN0RW52aXJvbm1lbnQ/OiBhbnk7XG4gICAgICAgIGpzb25Tb3VyY2U/OiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+O1xuICAgICAgICBza2lwSnNvblNvdXJjZUluaXQ/OiBib29sZWFuO1xuICAgIH07XG4gICAgZm9ybWx5Pzoge1xuICAgICAgICBza2lwPzogYm9vbGVhbjtcbiAgICAgICAgbWVyZ2U/OiBib29sZWFuO1xuICAgICAgICB0eXBlcz86IGFueVtdO1xuICAgICAgICB3cmFwcGVycz86IGFueVtdO1xuICAgICAgICB2YWxpZGF0b3JzPzogYW55W107XG4gICAgICAgIGdldFZhbGlkYXRpb25NZXNzYWdlcz86ICh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpID0+IGFueVtdO1xuICAgIH07XG59XG4iXX0=
|