@c8y/ngx-components 1010.0.15 → 1010.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/bundles/c8y-ngx-components-search.umd.js +34 -3
  2. package/bundles/c8y-ngx-components-search.umd.js.map +1 -1
  3. package/bundles/c8y-ngx-components-search.umd.min.js +1 -1
  4. package/bundles/c8y-ngx-components-search.umd.min.js.map +1 -1
  5. package/bundles/c8y-ngx-components.umd.js +2 -2
  6. package/bundles/c8y-ngx-components.umd.js.map +1 -1
  7. package/bundles/c8y-ngx-components.umd.min.js +1 -1
  8. package/bundles/c8y-ngx-components.umd.min.js.map +1 -1
  9. package/c8y-ngx-components.metadata.json +1 -1
  10. package/core/data-grid/data-grid.model.d.ts +4 -0
  11. package/esm2015/core/data-grid/data-grid.component.js +2 -2
  12. package/esm2015/core/data-grid/data-grid.model.js +1 -1
  13. package/esm2015/core/data-grid/grid-data-source.js +2 -2
  14. package/esm2015/search/search-grid.component.js +25 -4
  15. package/esm2015/search/search-results.component.js +12 -2
  16. package/esm2015/search/search.service.js +1 -1
  17. package/esm5/core/data-grid/data-grid.component.js +2 -2
  18. package/esm5/core/data-grid/data-grid.model.js +1 -1
  19. package/esm5/core/data-grid/grid-data-source.js +2 -2
  20. package/esm5/search/search-grid.component.js +25 -4
  21. package/esm5/search/search-results.component.js +13 -2
  22. package/esm5/search/search.service.js +1 -1
  23. package/fesm2015/c8y-ngx-components-search.js +35 -5
  24. package/fesm2015/c8y-ngx-components-search.js.map +1 -1
  25. package/fesm2015/c8y-ngx-components.js +2 -2
  26. package/fesm2015/c8y-ngx-components.js.map +1 -1
  27. package/fesm5/c8y-ngx-components-search.js +36 -5
  28. package/fesm5/c8y-ngx-components-search.js.map +1 -1
  29. package/fesm5/c8y-ngx-components.js +2 -2
  30. package/fesm5/c8y-ngx-components.js.map +1 -1
  31. package/package.json +2 -2
  32. package/search/c8y-ngx-components-search.metadata.json +1 -1
  33. package/search/search-grid.component.d.ts +2 -1
  34. package/search/search-results.component.d.ts +2 -0
@@ -665,10 +665,10 @@ var DataGridComponent = /** @class */ (function () {
665
665
  DataGridComponent = tslib_1.__decorate([
666
666
  Component({
667
667
  selector: 'c8y-data-grid',
668
- template: "<div class=\"table-data-grid-scroll\" #scroll>\n <div *ngIf=\"displayOptions.gridHeader\" class=\"table-data-grid-header separator large-padding\">\n <h4 class=\"m-r-16\">{{ title | translate }}</h4>\n\n <ng-container *ngIf=\"displayOptions.filter\">\n <span *ngIf=\"!filteringApplied\">\n <span class=\"label label-warning m-r-4\" translate>No filters</span>\n <small\n *ngIf=\"!!filteringLabelsParams.allItemsCount\"\n class=\"m-r-4\"\n ngNonBindable\n translate\n [translateParams]=\"filteringLabelsParams\"\n >{{ filteredItemsCount }} of {{ allItemsCount }} items</small\n >\n </span>\n <span *ngIf=\"filteringApplied\">\n <ng-container *ngIf=\"!!filteringLabelsParams.allItemsCount\">\n <span class=\"badge badge-info m-r-4\">\n {{ (dataSource.stats$ | async).filteredSize }}\n </span>\n <small ngNonBindable translate [translateParams]=\"filteringLabelsParams\"\n >of {{ allItemsCount }} items</small\n >\n </ng-container>\n <button\n title=\" {{ 'Clear filters' | translate }}\"\n class=\"m-l-8 btn btn-xs btn-default m-r-4\"\n (click)=\"clearFilters()\"\n >\n {{ 'Clear filters' | translate }}\n </button>\n </span>\n <span class=\"hidden-xs hidden-sm\">\n <button\n class=\"btn-clean text-primary\"\n popover=\"{{ 'Click the column headers to apply filters.' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button> </span\n ></ng-container>\n\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <label class=\"c8y-switch\" *ngIf=\"showChildDevices.show\">\n <input type=\"checkbox\" [(ngModel)]=\"showChildDevices.value\" (click)=\"loadChildDevices()\"/>\n <span></span>\n {{ 'Show child devices' | translate }}\n </label>\n\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n container=\"body\"\n placement=\"bottom left\"\n >\n <button\n title=\"{{ 'Configure columns' | translate }}\"\n class=\"btnbar-btn c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"columns\" class=\"m-r-4\"></i>\n <span>{{ 'Configure columns' | translate }}</span>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"bg-white\">\n <div cdkDropList (cdkDropListDropped)=\"onColumnDrop($event)\" class=\"list-group m-0\">\n <div *ngFor=\"let column of columns\" cdkDrag cdkDragLockAxis=\"y\">\n <ng-container *ngIf=\"!column.positionFixed\">\n <div class=\"list-group-item draggable-after p-0 \">\n <label\n title=\"{{ (column.header | translate) || column.name }}\"\n class=\"c8y-checkbox p-l-16 p-r-32 p-t-8 p-b-8 flex-item-v-stretch\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"column.visible\"\n (change)=\"updateGridColumnsSize()\"\n />\n <span></span>\n <span>{{ (column.header | translate) || column.name }}</span>\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <button\n title=\"{{ 'Reload' | translate }}\"\n class=\"btnbar-btn btn-link\"\n [disabled]=\"dataSource.loading$ | async\"\n (click)=\"searchText = ''; reload()\"\n >\n <i c8yIcon=\"refresh\" class=\"m-r-4\"></i>\n <span>{{ 'Reload' | translate }}</span>\n </button>\n\n <div *ngIf=\"!serverSideDataCallback || showSearch\" class=\"input-group input-group-search\">\n <input\n type=\"search\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [ngModel]=\"searchText\"\n (input)=\"searchText$.emit($event.target.value)\"\n />\n <div class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"searchText.length === 0\"></i>\n <i\n c8yIcon=\"times\"\n class=\"pointer\"\n *ngIf=\"searchText.length > 0\"\n (click)=\"searchText = ''; searchText$.emit('')\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"table-data-grid-header-bulk-actions animated slideInDown fast\"\n *ngIf=\"selectedItemIds.length !== 0\"\n >\n <h4>\n <span\n *ngIf=\"!itemsSelectLimit; else limit\"\n ngNonBindable\n translate\n [translateParams]=\"{ count: selectedItemIds.length }\"\n >\n {{ count }} selected items.\n </span>\n <ng-template #limit>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: selectedItemIds.length, limit: itemsSelectLimit }\"\n >\n {{ count }} selected items out of {{ limit }} allowed\n </span>\n </ng-template>\n\n <br class=\"visible-xs\" />\n <small *ngIf=\"selectedItemIds.length >= pagination.pageSize && !itemsSelectLimit\">\n <a (click)=\"setAllItemsSelected(true)\" class=\"interact\" >\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: (dataSource.stats$ | async).filteredSize }\"\n >\n Select all {{ count }} items\n </span>\n </a>\n </small>\n </h4>\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <ng-container\n *ngFor=\"let bulkActionControl of bulkActionControls\"\n [ngSwitch]=\"bulkActionControl.type\"\n >\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"sign-out\"></i>\n <span>{{ 'Export' | translate }}</span>\n </button>\n\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n <span>{{ 'Delete' | translate }}</span>\n </button>\n\n <button\n title=\"{{ bulkActionControl.text | translate }}\"\n *ngSwitchDefault\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ bulkActionControl.icon }}\"></i>\n <span>{{ bulkActionControl.text | translate }}</span>\n </button>\n </ng-container>\n\n <button title=\"{{ 'Cancel' | translate }}\" class=\"btnbar-btn\" (click)=\"cancel()\">\n <i c8yIcon=\"times\"></i>\n <span>{{ 'Cancel' | translate }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <table\n class=\"table table-hover table-filtered-sorted table-data-grid large-padding\"\n cdk-table\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByName\"\n [class.table-striped]=\"displayOptions.striped\"\n [class.table-bordered]=\"displayOptions.bordered\"\n [class.table-data-grid-with-checkboxes]=\"selectable\"\n [class.table-data-grid-with-actions]=\"actionControls.length > 0\"\n [style.grid-template-columns]=\"styles.gridTemplateColumns\"\n (mousemove)=\"resizeHandleContainerMouseMove$.emit($event)\"\n (mouseup)=\"resizeHandleContainerMouseUp$.emit($event)\"\n >\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\" [cdkColumnDef]=\"column.name\">\n <ng-container [ngSwitch]=\"column.name\">\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\">\n <div *ngIf=\"!itemsSelectLimit\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"currentPageSelectionState.allSelected\"\n [indeterminate]=\"\n !(\n currentPageSelectionState.allSelected ||\n currentPageSelectionState.allDeselected\n )\n \"\n (change)=\"setAllItemsInCurrentPageSelected($event.target.checked)\"\n />\n <span></span>\n </label>\n </div>\n </th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(row)\"\n (change)=\"setItemsSelected([row], $event.target.checked)\"\n [disabled]=\"selectedItemIds.length >= itemsSelectLimit && !isItemSelected(row)\"\n />\n <span></span>\n </label>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'actions'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\"></th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"actionControls.length <= 2\">\n <ng-container\n *ngFor=\"let actionControl of actionControls\"\n [ngSwitch]=\"actionControl.type\"\n >\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n *ngSwitchCase=\"builtInActionType.Edit\"\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ 'Edit' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btn btn-dot showOnHover\"\n title=\"{{ 'Delete' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i class=\"text-danger\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n *ngSwitchDefault\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ actionControl.text | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n </button>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"actionControls.length > 2\" class=\"dropdown\" dropdown>\n <button\n title=\"{{ 'Actions' | translate }}\"\n class=\"dropdown-toggle c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li *ngFor=\"let actionControl of actionControls\" [ngSwitch]=\"actionControl.type\">\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n title=\"{{ 'Edit' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Edit\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n {{ 'Delete' | translate }}\n </button>\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Export' | translate }}\n </button>\n <button\n title=\"{{ actionControl.text | translate }}\"\n *ngSwitchDefault\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n {{ actionControl.text | translate }}\n </button>\n </ng-container>\n </li>\n </ul>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <th\n cdk-header-cell\n *cdkHeaderCellDef\n [ngClass]=\"column.headerCSSClassName\"\n [attr.data-type]=\"column.dataType\"\n [class.sorted]=\"column.sortOrder\"\n [class.filtered]=\"column | map: isColumnFilteringApplied\"\n [class.hidden]=\"!column.visible\"\n >\n <div *ngIf=\"!column.filterable\" [title]=\"(column.header | translate) || column.name\">\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"column.filterable\"\n class=\"dropdown\"\n dropdown\n #dropdown=\"bs-dropdown\"\n container=\"body\"\n placement=\"bottom left\"\n [insideClick]=\"true\"\n >\n <button\n class=\"btn-header c8y-dropdown\"\n dropdownToggle\n [title]=\"(column.header | translate) || column.name\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n <i c8yIcon=\"filter\" title=\"{{ 'Filter' | translate }}\"></i>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"data-grid__dropdown\">\n <ng-container\n *ngIf=\"\n (\n [{\n column: column,\n dropdown: dropdown\n }]\n | map:getFilteringFormRendererSpec:this\n ) as filteringFormRendererSpec\n \"\n >\n <c8y-filtering-form-renderer [spec]=\"filteringFormRendererSpec\">\n </c8y-filtering-form-renderer>\n </ng-container>\n </li>\n </ul>\n </div>\n\n <button\n *ngIf=\"column.sortable\"\n class=\"btn-sort\"\n title=\"{{ 'Sort' | translate }}\"\n (click)=\"changeSortOrder(column.name)\"\n >\n <ng-container [ngSwitch]=\"column.sortOrder\">\n <i *ngSwitchCase=\"'asc'\" c8yIcon=\"long-arrow-up\"></i>\n <i *ngSwitchCase=\"'desc'\" c8yIcon=\"long-arrow-down\"></i>\n <i *ngSwitchDefault c8yIcon=\"exchange\"></i>\n </ng-container>\n </button>\n\n <span\n class=\"resize-handle\"\n (mousedown)=\"\n resizeHandleMouseDown$.emit({ event: $event, targetColumnName: column.name })\n \"\n >\n </span>\n </th>\n\n <td\n cdk-cell\n *cdkCellDef=\"let row\"\n [ngClass]=\"column.cellCSSClassName\"\n [attr.data-cell-title]=\"column.header | translate\"\n [class.hidden]=\"!column.visible\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n value: resolveCellValue(row, column.path),\n row: row,\n columnName: column.name\n }]\n | map:getCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container cdkColumnDef=\"infiniteScrollFooter\">\n <td cdk-footer-cell *cdkFooterCellDef [style.grid-column]=\"styles.gridInfiniteScrollColumn\">\n <template #infiniteScrollContainer></template>\n </td>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"columnNames\"></tr>\n\n <tr\n cdk-row\n *cdkRowDef=\"let row; columns: columnNames\"\n (mouseover)=\"rowMouseOver.emit(row)\"\n (mouseleave)=\"rowMouseLeave.emit(row)\"\n (click)=\"rowClick.emit(row)\"\n ></tr>\n\n <ng-container *ngIf=\"infiniteScroll\">\n <tr cdk-footer-row *cdkFooterRowDef=\"['infiniteScrollFooter']\"></tr>\n </ng-container>\n </table>\n\n <div *ngIf=\"(dataSource.loading$ | async) && !loadMoreComponent\" class=\"text-center\">\n <c8y-progress-bar [message]=\"loadingItemsLabel\"></c8y-progress-bar>\n </div>\n\n <div\n class=\"row m-0 p-t-40 p-b-40\"\n *ngIf=\"!(dataSource.loading$ | async) && (dataSource.stats$ | async).filteredSize === 0\"\n >\n <div class=\"col-md-4 col-md-offset-4\">\n <ng-content select=\".c8y-empty-state\"></ng-content>\n </div>\n </div>\n\n <div *ngIf=\"pagination && !infiniteScroll\" class=\"table-data-grid-footer separator large-padding\">\n <div class=\"col-sm-4 no-gutter\">\n <div *ngIf=\"(dataSource.stats$ | async).currentPageSize > 0\" class=\"counter\">\n <span class=\"text-muted\" ngNonBindable translate [translateParams]=\"paginationLabelParams\"\n >{{ pageFirstItemIdx }} - {{ pageLastItemIdx }} of {{ itemsTotal }}</span\n >\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-center\">\n <div\n *ngIf=\"(dataSource.stats$ | async).filteredSize > minPossiblePageSize\"\n class=\"form-group form-inline\"\n >\n <label class=\"m-r-4\">{{ 'Items per page' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [ngModel]=\"pagination.pageSize\"\n (ngModelChange)=\"\n updatePagination({ itemsPerPage: $event, page: pagination.currentPage })\n \"\n >\n <option *ngFor=\"let pageSize of possiblePageSizes\" [ngValue]=\"pageSize\">\n {{ pageSize }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-right\">\n <pagination\n [class.hidden]=\"totalPagesCount <= 1\"\n [ngModel]=\"pagination.currentPage\"\n (pageChanged)=\"updatePagination($event)\"\n [totalItems]=\"(dataSource.stats$ | async).filteredSize\"\n [itemsPerPage]=\"pagination.pageSize\"\n (numPages)=\"totalPagesCount = $event\"\n [maxSize]=\"5\"\n [boundaryLinks]=\"false\"\n previousText=\" \"\n nextText=\" \"\n ></pagination>\n </div>\n </div>\n</div>\n"
668
+ template: "<div class=\"table-data-grid-scroll\" #scroll>\n <div *ngIf=\"displayOptions.gridHeader\" class=\"table-data-grid-header separator large-padding\">\n <h4 class=\"m-r-16\">{{ title | translate }}</h4>\n\n <ng-container *ngIf=\"displayOptions.filter\">\n <span *ngIf=\"!filteringApplied\">\n <span class=\"label label-warning m-r-4\" translate>No filters</span>\n <small\n *ngIf=\"!!filteringLabelsParams.allItemsCount\"\n class=\"m-r-4\"\n ngNonBindable\n translate\n [translateParams]=\"filteringLabelsParams\"\n >{{ filteredItemsCount }} of {{ allItemsCount }} items</small\n >\n </span>\n <span *ngIf=\"filteringApplied\">\n <ng-container *ngIf=\"!!filteringLabelsParams.allItemsCount\">\n <span class=\"badge badge-info m-r-4\">\n {{ (dataSource.stats$ | async).filteredSize }}\n </span>\n <small ngNonBindable translate [translateParams]=\"filteringLabelsParams\"\n >of {{ allItemsCount }} items</small\n >\n </ng-container>\n <button\n title=\" {{ 'Clear filters' | translate }}\"\n class=\"m-l-8 btn btn-xs btn-default m-r-4\"\n (click)=\"clearFilters()\"\n >\n {{ 'Clear filters' | translate }}\n </button>\n </span>\n <span class=\"hidden-xs hidden-sm\">\n <button\n class=\"btn-clean text-primary\"\n popover=\"{{ 'Click the column headers to apply filters.' | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n >\n <i c8yIcon=\"question-circle-o\"></i>\n </button> </span\n ></ng-container>\n\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <label class=\"c8y-switch\" *ngIf=\"showChildDevices.show\">\n <input type=\"checkbox\" [(ngModel)]=\"showChildDevices.value\" (click)=\"loadChildDevices()\"/>\n <span></span>\n {{ 'Show child devices' | translate }}\n </label>\n\n <div\n class=\"dropdown\"\n dropdown\n [insideClick]=\"true\"\n container=\"body\"\n placement=\"bottom left\"\n >\n <button\n title=\"{{ 'Configure columns' | translate }}\"\n class=\"btnbar-btn c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"columns\" class=\"m-r-4\"></i>\n <span>{{ 'Configure columns' | translate }}</span>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"bg-white\">\n <div cdkDropList (cdkDropListDropped)=\"onColumnDrop($event)\" class=\"list-group m-0\">\n <div *ngFor=\"let column of columns\" cdkDrag cdkDragLockAxis=\"y\">\n <ng-container *ngIf=\"!column.positionFixed\">\n <div class=\"list-group-item draggable-after p-0 \">\n <label\n title=\"{{ (column.header | translate) || column.name }}\"\n class=\"c8y-checkbox p-l-16 p-r-32 p-t-8 p-b-8 flex-item-v-stretch\"\n >\n <input\n type=\"checkbox\"\n [(ngModel)]=\"column.visible\"\n (change)=\"updateGridColumnsSize()\"\n />\n <span></span>\n <span>{{ (column.header | translate) || column.name }}</span>\n </label>\n </div>\n </ng-container>\n </div>\n </div>\n </li>\n </ul>\n </div>\n\n <button\n title=\"{{ 'Reload' | translate }}\"\n class=\"btnbar-btn btn-link\"\n [disabled]=\"dataSource.loading$ | async\"\n (click)=\"searchText = ''; reload()\"\n >\n <i c8yIcon=\"refresh\" class=\"m-r-4\"></i>\n <span>{{ 'Reload' | translate }}</span>\n </button>\n\n <div *ngIf=\"!serverSideDataCallback || showSearch\" class=\"input-group input-group-search m-l-sm-32\">\n <input\n type=\"search\"\n class=\"form-control\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n [ngModel]=\"searchText\"\n (input)=\"searchText$.emit($event.target.value)\"\n />\n <div class=\"input-group-addon\">\n <i c8yIcon=\"search\" *ngIf=\"searchText.length === 0\"></i>\n <i\n c8yIcon=\"times\"\n class=\"pointer\"\n *ngIf=\"searchText.length > 0\"\n (click)=\"searchText = ''; searchText$.emit('')\"\n ></i>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"table-data-grid-header-bulk-actions animated slideInDown fast\"\n *ngIf=\"selectedItemIds.length !== 0\"\n >\n <h4>\n <span\n *ngIf=\"!itemsSelectLimit; else limit\"\n ngNonBindable\n translate\n [translateParams]=\"{ count: selectedItemIds.length }\"\n >\n {{ count }} selected items.\n </span>\n <ng-template #limit>\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: selectedItemIds.length, limit: itemsSelectLimit }\"\n >\n {{ count }} selected items out of {{ limit }} allowed\n </span>\n </ng-template>\n\n <br class=\"visible-xs\" />\n <small *ngIf=\"selectedItemIds.length >= pagination.pageSize && !itemsSelectLimit\">\n <a (click)=\"setAllItemsSelected(true)\" class=\"interact\" >\n <span\n ngNonBindable\n translate\n [translateParams]=\"{ count: (dataSource.stats$ | async).filteredSize }\"\n >\n Select all {{ count }} items\n </span>\n </a>\n </small>\n </h4>\n <div class=\"flex-item-right\">\n <div class=\"btnbar flex-row\">\n <ng-container\n *ngFor=\"let bulkActionControl of bulkActionControls\"\n [ngSwitch]=\"bulkActionControl.type\"\n >\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"sign-out\"></i>\n <span>{{ 'Export' | translate }}</span>\n </button>\n\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n <span>{{ 'Delete' | translate }}</span>\n </button>\n\n <button\n title=\"{{ bulkActionControl.text | translate }}\"\n *ngSwitchDefault\n class=\"btnbar-btn\"\n (click)=\"bulkActionControl.callback(selectedItemIds, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ bulkActionControl.icon }}\"></i>\n <span>{{ bulkActionControl.text | translate }}</span>\n </button>\n </ng-container>\n\n <button title=\"{{ 'Cancel' | translate }}\" class=\"btnbar-btn\" (click)=\"cancel()\">\n <i c8yIcon=\"times\"></i>\n <span>{{ 'Cancel' | translate }}</span>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <table\n class=\"table table-hover table-filtered-sorted table-data-grid large-padding\"\n cdk-table\n [dataSource]=\"dataSource\"\n [trackBy]=\"trackByName\"\n [class.table-striped]=\"displayOptions.striped\"\n [class.table-bordered]=\"displayOptions.bordered\"\n [class.table-data-grid-with-checkboxes]=\"selectable\"\n [class.table-data-grid-with-actions]=\"actionControls.length > 0\"\n [style.grid-template-columns]=\"styles.gridTemplateColumns\"\n (mousemove)=\"resizeHandleContainerMouseMove$.emit($event)\"\n (mouseup)=\"resizeHandleContainerMouseUp$.emit($event)\"\n >\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\" [cdkColumnDef]=\"column.name\">\n <ng-container [ngSwitch]=\"column.name\">\n <ng-container *ngSwitchCase=\"'checkbox'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\">\n <div *ngIf=\"!itemsSelectLimit\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"currentPageSelectionState.allSelected\"\n [indeterminate]=\"\n !(\n currentPageSelectionState.allSelected ||\n currentPageSelectionState.allDeselected\n )\n \"\n (change)=\"setAllItemsInCurrentPageSelected($event.target.checked)\"\n />\n <span></span>\n </label>\n </div>\n </th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <label class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"isItemSelected(row)\"\n (change)=\"setItemsSelected([row], $event.target.checked)\"\n [disabled]=\"selectedItemIds.length >= itemsSelectLimit && !isItemSelected(row)\"\n />\n <span></span>\n </label>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'actions'\">\n <th cdk-header-cell *cdkHeaderCellDef data-type=\"icon\"></th>\n\n <td cdk-cell *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"actionControls.length <= 2\">\n <ng-container\n *ngFor=\"let actionControl of actionControls\"\n [ngSwitch]=\"actionControl.type\"\n >\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n *ngSwitchCase=\"builtInActionType.Edit\"\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ 'Edit' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n <button\n *ngSwitchCase=\"builtInActionType.Delete\"\n class=\"btn btn-dot showOnHover\"\n title=\"{{ 'Delete' | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i class=\"text-danger\" c8yIcon=\"minus-circle\"></i>\n </button>\n <button\n *ngSwitchDefault\n class=\"btn btn-icon btn-xs btn-default\"\n title=\"{{ actionControl.text | translate }}\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n </button>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <div *ngIf=\"actionControls.length > 2\" class=\"dropdown\" dropdown>\n <button\n title=\"{{ 'Actions' | translate }}\"\n class=\"dropdown-toggle c8y-dropdown\"\n dropdownToggle\n >\n <i c8yIcon=\"ellipsis-v\"></i>\n </button>\n <ul class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n <li *ngFor=\"let actionControl of actionControls\" [ngSwitch]=\"actionControl.type\">\n <ng-container *ngIf=\"actionControl.showIf ? actionControl.showIf(row) : true\">\n <button\n title=\"{{ 'Edit' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Edit\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"pencil\"></i>\n {{ 'Edit' | translate }}\n </button>\n <button\n title=\"{{ 'Delete' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Delete\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"trash\"></i>\n {{ 'Delete' | translate }}\n </button>\n <button\n title=\"{{ 'Export' | translate }}\"\n *ngSwitchCase=\"builtInActionType.Export\"\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"download\"></i>\n {{ 'Export' | translate }}\n </button>\n <button\n title=\"{{ actionControl.text | translate }}\"\n *ngSwitchDefault\n (click)=\"actionControl.callback(row, reload.bind(this))\"\n >\n <i c8yIcon=\"{{ actionControl.icon }}\"></i>\n {{ actionControl.text | translate }}\n </button>\n </ng-container>\n </li>\n </ul>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <th\n cdk-header-cell\n *cdkHeaderCellDef\n [ngClass]=\"column.headerCSSClassName\"\n [attr.data-type]=\"column.dataType\"\n [class.sorted]=\"column.sortOrder\"\n [class.filtered]=\"column | map: isColumnFilteringApplied\"\n [class.hidden]=\"!column.visible\"\n >\n <div *ngIf=\"!column.filterable\" [title]=\"(column.header | translate) || column.name\">\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </div>\n\n <div\n *ngIf=\"column.filterable\"\n class=\"dropdown\"\n dropdown\n #dropdown=\"bs-dropdown\"\n container=\"body\"\n placement=\"bottom left\"\n [insideClick]=\"true\"\n >\n <button\n class=\"btn-header c8y-dropdown\"\n dropdownToggle\n [title]=\"(column.header | translate) || column.name\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n columnName: column.name,\n value: ((column.header | translate) || column.name)\n }]\n | map:getHeaderCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n <i c8yIcon=\"filter\" title=\"{{ 'Filter' | translate }}\"></i>\n </button>\n\n <ul *dropdownMenu class=\"dropdown-menu\" (click)=\"$event.stopPropagation()\">\n <li class=\"data-grid__dropdown\">\n <ng-container\n *ngIf=\"\n (\n [{\n column: column,\n dropdown: dropdown\n }]\n | map:getFilteringFormRendererSpec:this\n ) as filteringFormRendererSpec\n \"\n >\n <c8y-filtering-form-renderer [spec]=\"filteringFormRendererSpec\">\n </c8y-filtering-form-renderer>\n </ng-container>\n </li>\n </ul>\n </div>\n\n <button\n *ngIf=\"column.sortable\"\n class=\"btn-sort\"\n title=\"{{ 'Sort' | translate }}\"\n (click)=\"changeSortOrder(column.name)\"\n >\n <ng-container [ngSwitch]=\"column.sortOrder\">\n <i *ngSwitchCase=\"'asc'\" c8yIcon=\"long-arrow-up\"></i>\n <i *ngSwitchCase=\"'desc'\" c8yIcon=\"long-arrow-down\"></i>\n <i *ngSwitchDefault c8yIcon=\"exchange\"></i>\n </ng-container>\n </button>\n\n <span\n class=\"resize-handle\"\n (mousedown)=\"\n resizeHandleMouseDown$.emit({ event: $event, targetColumnName: column.name })\n \"\n >\n </span>\n </th>\n\n <td\n cdk-cell\n *cdkCellDef=\"let row\"\n [ngClass]=\"column.cellCSSClassName\"\n [attr.data-cell-title]=\"column.header | translate\"\n [class.hidden]=\"!column.visible\"\n >\n <ng-container\n *ngIf=\"\n (\n [{\n value: resolveCellValue(row, column.path),\n row: row,\n columnName: column.name\n }]\n | map:getCellRendererSpec:this\n ) as cellRendererSpec\n \"\n >\n <c8y-cell-renderer [spec]=\"cellRendererSpec\"></c8y-cell-renderer>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container cdkColumnDef=\"infiniteScrollFooter\">\n <td cdk-footer-cell *cdkFooterCellDef [style.grid-column]=\"styles.gridInfiniteScrollColumn\">\n <template #infiniteScrollContainer></template>\n </td>\n </ng-container>\n\n <tr cdk-header-row *cdkHeaderRowDef=\"columnNames\"></tr>\n\n <tr\n cdk-row\n *cdkRowDef=\"let row; columns: columnNames\"\n (mouseover)=\"rowMouseOver.emit(row)\"\n (mouseleave)=\"rowMouseLeave.emit(row)\"\n (click)=\"rowClick.emit(row)\"\n ></tr>\n\n <ng-container *ngIf=\"infiniteScroll\">\n <tr cdk-footer-row *cdkFooterRowDef=\"['infiniteScrollFooter']\"></tr>\n </ng-container>\n </table>\n\n <div *ngIf=\"(dataSource.loading$ | async) && !loadMoreComponent\" class=\"text-center\">\n <c8y-progress-bar [message]=\"loadingItemsLabel\"></c8y-progress-bar>\n </div>\n\n <div\n class=\"row m-0 p-t-40 p-b-40\"\n *ngIf=\"!(dataSource.loading$ | async) && (dataSource.stats$ | async).filteredSize === 0\"\n >\n <div class=\"col-md-4 col-md-offset-4\">\n <ng-content select=\".c8y-empty-state\"></ng-content>\n </div>\n </div>\n\n <div *ngIf=\"pagination && !infiniteScroll\" class=\"table-data-grid-footer separator large-padding\">\n <div class=\"col-sm-4 no-gutter\">\n <div *ngIf=\"(dataSource.stats$ | async).currentPageSize > 0\" class=\"counter\">\n <span class=\"text-muted\" ngNonBindable translate [translateParams]=\"paginationLabelParams\"\n >{{ pageFirstItemIdx }} - {{ pageLastItemIdx }} of {{ itemsTotal }}</span\n >\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-center\">\n <div\n *ngIf=\"(dataSource.stats$ | async).filteredSize > minPossiblePageSize\"\n class=\"form-group form-inline\"\n >\n <label class=\"m-r-4\">{{ 'Items per page' | translate }}</label>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control\"\n [ngModel]=\"pagination.pageSize\"\n (ngModelChange)=\"\n updatePagination({ itemsPerPage: $event, page: pagination.currentPage })\n \"\n >\n <option *ngFor=\"let pageSize of possiblePageSizes\" [ngValue]=\"pageSize\">\n {{ pageSize }}\n </option>\n </select>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-4 no-gutter text-right\">\n <pagination\n [class.hidden]=\"totalPagesCount <= 1\"\n [ngModel]=\"pagination.currentPage\"\n (pageChanged)=\"updatePagination($event)\"\n [totalItems]=\"(dataSource.stats$ | async).filteredSize\"\n [itemsPerPage]=\"pagination.pageSize\"\n (numPages)=\"totalPagesCount = $event\"\n [maxSize]=\"5\"\n [boundaryLinks]=\"false\"\n previousText=\" \"\n nextText=\" \"\n ></pagination>\n </div>\n </div>\n</div>\n"
669
669
  })
670
670
  ], DataGridComponent);
671
671
  return DataGridComponent;
672
672
  }());
673
673
  export { DataGridComponent };
674
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLElBQUksU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLEtBQUssRUFDTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ0osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFTTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBRXRCLG1CQUFtQixFQU1wQixNQUFNLG1CQUFtQixDQUFD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QUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7OERBQTZCO0lBR25FO1FBREMsU0FBUyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztzRUFDdEM7SUFtQ1M7UUFBbEQsWUFBWSxDQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztxREFBdUM7SUFqSjlFLGlCQUFpQjtRQUo3QixTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsZUFBZTtZQUN6QixtaHFCQUF5QztTQUMxQyxDQUFDO09BQ1csaUJBQWlCLENBMnJCN0I7SUFBRCx3QkFBQztDQUFBLEFBM3JCRCxJQTJyQkM7U0EzckJZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0hlYWRlckNlbGwgfSBmcm9tICdAYW5ndWxhci9jZGsvdGFibGUnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50RmFjdG9yeSxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBJUmVzdWx0TGlzdCwgUGFnaW5nIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgZmxvdywgZ2V0LCBwYXJzZUludCBhcyBfcGFyc2VJbnQsIHVuaW9uLCB3aXRob3V0LCB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlyc3QsXG4gIG1lcmdlTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRhcFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9sb2FkLW1vcmUuY29tcG9uZW50JztcbmltcG9ydCB7IExvYWRNb3JlTW9kZSB9IGZyb20gJy4uL2NvbW1vbi9sb2FkLW1vcmUubW9kZWwnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5pbXBvcnQgeyBDZWxsUmVuZGVyZXJTcGVjIH0gZnJvbSAnLi9jb2x1bW4vY2VsbC1yZW5kZXJlcic7XG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWMsIEZpbHRlcmluZ01vZGlmaWVyIH0gZnJvbSAnLi9jb2x1bW4vZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXInO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBDb2x1bW4sXG4gIENvbHVtbkRhdGFUeXBlLFxuICBEYXRhR3JpZCxcbiAgRGF0YVNvdXJjZVN0YXRzLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgRmlsdGVyaW5nQWN0aW9uVHlwZSxcbiAgbWluQ29sdW1uR3JpZFRyYWNrU2l6ZSxcbiAgUGFnaW5hdGlvbixcbiAgcmF0aW9zQnlDb2x1bW5UeXBlcyxcbiAgUm93LFxuICBTZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrLFxuICBTb3J0T3JkZXIsXG4gIFNwZWNpYWxDb2x1bW5OYW1lLFxuICBHcmlkQ29uZmlnXG59IGZyb20gJy4vZGF0YS1ncmlkLm1vZGVsJztcbmltcG9ydCB7IEdyaWREYXRhU291cmNlIH0gZnJvbSAnLi9ncmlkLWRhdGEtc291cmNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhdGEtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgRGF0YUdyaWQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdJdGVtcycpO1xuICBASW5wdXQoKSBsb2FkTW9yZUl0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWQgbW9yZSBpdGVtcycpO1xuICBASW5wdXQoKSBsb2FkaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZGluZyBpdGVtc+KApicpO1xuICBASW5wdXQoKSBzaG93U2VhcmNoID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlZnJlc2g6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBASW5wdXQoKSBzaG93Q2hpbGREZXZpY2VzOiBhbnkgPSB7fTtcblxuICBjb2x1bW5zOiBDb2x1bW5bXTtcbiAgQElucHV0KCdjb2x1bW5zJylcbiAgc2V0IF9jb2x1bW5zKGNvbHVtbnMpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zIHx8IFtdO1xuICB9XG5cbiAgZGF0YVNvdXJjZSA9IG5ldyBHcmlkRGF0YVNvdXJjZSgpO1xuICByb3dzOiBSb3dbXTtcbiAgQElucHV0KCdyb3dzJylcbiAgc2V0IF9yb3dzKHJvd3MpIHtcbiAgICB0aGlzLnJvd3MgPSByb3dzIHx8IFtdO1xuICB9XG5cbiAgZmlsdGVyaW5nTGFiZWxzUGFyYW1zID0ge1xuICAgIGZpbHRlcmVkSXRlbXNDb3VudDogMCxcbiAgICBhbGxJdGVtc0NvdW50OiAwXG4gIH07XG5cbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbjtcbiAgcGFnaW5hdGlvbkxhYmVsUGFyYW1zID0ge1xuICAgIHBhZ2VGaXJzdEl0ZW1JZHg6IDAsXG4gICAgcGFnZUxhc3RJdGVtSWR4OiAwLFxuICAgIGl0ZW1zVG90YWw6IDBcbiAgfTtcbiAgcmVhZG9ubHkgcG9zc2libGVQYWdlU2l6ZXM6IG51bWJlcltdID0gWzEwLCAxNSwgMjAsIDMwLCA1MF07XG4gIHJlYWRvbmx5IG1pblBvc3NpYmxlUGFnZVNpemUgPSBNYXRoLm1pbiguLi50aGlzLnBvc3NpYmxlUGFnZVNpemVzKTtcbiAgQElucHV0KCdwYWdpbmF0aW9uJylcbiAgc2V0IF9wYWdpbmF0aW9uKHBhZ2luYXRpb24pIHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSBwYWdpbmF0aW9uO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gZ2V0KHRoaXMucGFnaW5hdGlvbiwgJ3BhZ2VTaXplJyk7XG5cbiAgICBpZiAoXG4gICAgICBwYWdlU2l6ZSAmJlxuICAgICAgIXRoaXMucG9zc2libGVQYWdlU2l6ZXMuZmluZChwb3NzaWJsZVBhZ2VTaXplID0+IHBvc3NpYmxlUGFnZVNpemUgPT09IHBhZ2VTaXplKVxuICAgICkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0geyAuLi50aGlzLnBhZ2luYXRpb24sIHBhZ2VTaXplOiAxMCB9O1xuICAgIH1cbiAgfVxuXG4gIGluZmluaXRlU2Nyb2xsOiBMb2FkTW9yZU1vZGU7XG4gIEBJbnB1dCgnaW5maW5pdGVTY3JvbGwnKVxuICBzZXQgX2luZmluaXRlU2Nyb2xsKGluZmluaXRlU2Nyb2xsOiBMb2FkTW9yZU1vZGUpIHtcbiAgICB0aGlzLmluZmluaXRlU2Nyb2xsID0gaW5maW5pdGVTY3JvbGw7XG4gIH1cblxuICBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrOiBTZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrO1xuICBASW5wdXQoJ3NlcnZlclNpZGVEYXRhQ2FsbGJhY2snKVxuICBzZXQgX3NlcnZlclNpZGVEYXRhQ2FsbGJhY2soc2VydmVyU2lkZURhdGFDYWxsYmFjaykge1xuICAgIHRoaXMuc2VydmVyU2lkZURhdGFDYWxsYmFjayA9IHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s7XG4gIH1cblxuICBzZWxlY3RhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgnc2VsZWN0YWJsZScpXG4gIHNldCBfc2VsZWN0YWJsZShzZWxlY3RhYmxlKSB7XG4gICAgdGhpcy5zZWxlY3RhYmxlID0gc2VsZWN0YWJsZTtcbiAgfVxuXG4gIHNlbGVjdGlvblByaW1hcnlLZXkgPSAnaWQnO1xuICBASW5wdXQoJ3NlbGVjdGlvblByaW1hcnlLZXknKVxuICBzZXQgX3NlbGVjdGlvblByaW1hcnlLZXkoc2VsZWN0aW9uUHJpbWFyeUtleSkge1xuICAgIHRoaXMuc2VsZWN0aW9uUHJpbWFyeUtleSA9IHNlbGVjdGlvblByaW1hcnlLZXk7XG4gIH1cblxuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnMgPSB7XG4gICAgc3RyaXBlZDogdHJ1ZSxcbiAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgZ3JpZEhlYWRlcjogdHJ1ZSxcbiAgICBmaWx0ZXI6IHRydWVcbiAgfTtcbiAgQElucHV0KCdkaXNwbGF5T3B0aW9ucycpXG4gIHNldCBfZGlzcGxheU9wdGlvbnMoZGlzcGxheU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BsYXlPcHRpb25zID0geyAuLi50aGlzLmRpc3BsYXlPcHRpb25zLCAuLi5kaXNwbGF5T3B0aW9ucyB9O1xuICB9XG5cbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXTtcbiAgQElucHV0KCdhY3Rpb25Db250cm9scycpXG4gIHNldCBfYWN0aW9uQ29udHJvbHMoYWN0aW9uQ29udHJvbHMpIHtcbiAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gYWN0aW9uQ29udHJvbHMgfHwgW107XG4gIH1cblxuICBidWxrQWN0aW9uQ29udHJvbHM6IEJ1bGtBY3Rpb25Db250cm9sW107XG4gIEBJbnB1dCgnYnVsa0FjdGlvbkNvbnRyb2xzJylcbiAgc2V0IF9idWxrQWN0aW9uQ29udHJvbHMoYnVsa0FjdGlvbkNvbnRyb2xzKSB7XG4gICAgdGhpcy5idWxrQWN0aW9uQ29udHJvbHMgPSBidWxrQWN0aW9uQ29udHJvbHMgfHwgW107XG4gIH1cbiAgQElucHV0KClcbiAgc2VhcmNoVGV4dCA9ICcnO1xuICBASW5wdXQoKSBpdGVtc1NlbGVjdExpbWl0OiBudW1iZXI7XG5cbiAgQE91dHB1dCgpIHJvd01vdXNlT3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgcm93TW91c2VMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgQE91dHB1dCgpIG9uQ29uZmlnQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuICBAT3V0cHV0KCkgb25GaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIG9uQ2hpbGREZXZpY2VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ29sdW1uRGlyZWN0aXZlKSBjb2x1bW5SZW5kZXJlcnM6IFF1ZXJ5TGlzdDxDb2x1bW5EaXJlY3RpdmU+O1xuXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbCcsIHsgc3RhdGljOiB0cnVlIH0pIHNjcm9sbENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdpbmZpbml0ZVNjcm9sbENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBpbmZpbml0ZVNjcm9sbENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBsb2FkTW9yZUNvbXBvbmVudDogTG9hZE1vcmVDb21wb25lbnQ7XG5cbiAgY29sdW1uTmFtZXMgPSBbXTtcblxuICBzdHlsZXMgPSB7XG4gICAgdGFibGVDdXJzb3I6ICdhdXRvJyxcbiAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgZ3JpZEluZmluaXRlU2Nyb2xsQ29sdW1uOiB1bmRlZmluZWRcbiAgfTtcblxuICBzZWFyY2hUZXh0JCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBmaWx0ZXJpbmdBcHBsaWVkID0gZmFsc2U7XG4gIHRvdGFsUGFnZXNDb3VudCA9IEluZmluaXR5O1xuXG4gIHNlbGVjdGVkSXRlbUlkczogc3RyaW5nW10gPSBbXTtcbiAgY3VycmVudFBhZ2VTZWxlY3Rpb25TdGF0ZSA9IHtcbiAgICBhbGxTZWxlY3RlZDogZmFsc2UsXG4gICAgYWxsRGVzZWxlY3RlZDogdHJ1ZVxuICB9O1xuXG4gIGJ1aWx0SW5BY3Rpb25UeXBlID0ge1xuICAgIEVkaXQ6IEJ1aWx0SW5BY3Rpb25UeXBlLkVkaXQsXG4gICAgRGVsZXRlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgRXhwb3J0OiBCdWlsdEluQWN0aW9uVHlwZS5FeHBvcnRcbiAgfTtcblxuICByZXNpemVIYW5kbGVNb3VzZURvd24kID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlTW92ZSQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHJpdmF0ZSBoZWFkZXJCZWluZ1Jlc2l6ZWQ6IHtcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmc7XG4gICAgZWw6IEhUTUxFbGVtZW50O1xuICB9O1xuICBAVmlld0NoaWxkcmVuKENka0hlYWRlckNlbGwsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIHRoUmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBwcml2YXRlIHRoRWxzO1xuXG4gIHByaXZhdGUgcmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudDogYm9vbGVhbjtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgaG9zdFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcChzZWFyY2hUZXh0ID0+IHtcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9KTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5kYXRhU291cmNlLmRhdGEkLCB0aGlzLml0ZW1zU2VsZWN0LmFzT2JzZXJ2YWJsZSgpKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZGF0YV0pID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZUVtcHR5ID0gZGF0YS5sZW5ndGggPT09IDA7XG5cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlU2VsZWN0aW9uU3RhdGUgPSB7XG4gICAgICAgICAgICBhbGxTZWxlY3RlZDogY3VycmVudFBhZ2VFbXB0eSA/IGZhbHNlIDogZGF0YS5ldmVyeShpdGVtID0+IHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpLFxuICAgICAgICAgICAgYWxsRGVzZWxlY3RlZDogY3VycmVudFBhZ2VFbXB0eSA/IHRydWUgOiBkYXRhLmV2ZXJ5KGl0ZW0gPT4gIXRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZGF0YVNvdXJjZS5zdGF0cyQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoc3RhdHMgPT4ge1xuICAgICAgdGhpcy5jcmVhdGVMb2FkTW9yZUNvbXBvbmVudChzdGF0cyk7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZ0xhYmVsc1BhcmFtcyhzdGF0cyk7XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0cyk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5yZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2gucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50Ll9hY3Rpb25Db250cm9scyB8fCBldmVudC5fYWN0aW9uQ29udHJvbHMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgICB0aGlzLnRoRWxzID0gdGhpcy50aFJlZnMudG9BcnJheSgpLm1hcCgoeyBuYXRpdmVFbGVtZW50IH0pID0+IG5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc2V0dXBSZXNpemVIYW5kbGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgdHJhY2tCeU5hbWUoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5uYW1lO1xuICB9XG5cbiAgcmVzb2x2ZUNlbGxWYWx1ZShyb3csIHBhdGgpIHtcbiAgICByZXR1cm4gZmxvdyhbXG4gICAgICB4ID0+IHRoaXMuZGF0YVNvdXJjZS5yZXNvbHZlVmFsdWUoeCwgcGF0aCksXG4gICAgICB0aGlzLmRhdGFTb3VyY2UucmVzb2x2ZUZ1bmN0aW9uLFxuICAgICAgdGhpcy5kYXRhU291cmNlLm5vcm1hbGl6ZU5pbFxuICAgIF0pKHJvdyk7XG4gIH1cblxuICBjaGFuZ2VTb3J0T3JkZXIoY29sdW1uTmFtZSkge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gY29sdW1uTmFtZSk7XG5cbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciB9ID0gY29sdW1uO1xuXG4gICAgICBpZiAoIXNvcnRPcmRlcikge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmcoW2NvbHVtbk5hbWVdLCAnYXNjJyk7XG4gICAgICB9IGVsc2UgaWYgKHNvcnRPcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKFtjb2x1bW5OYW1lXSwgJ2Rlc2MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydGluZyhbY29sdW1uTmFtZV0sICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVTb3J0aW5nKGNvbHVtbk5hbWVzOiBzdHJpbmdbXSwgc29ydE9yZGVyOiBTb3J0T3JkZXIpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKFxuICAgICAgKGNvbHVtbik6IENvbHVtbiA9PiB7XG4gICAgICAgIGlmIChjb2x1bW5OYW1lcy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5jb2x1bW4sIHNvcnRPcmRlciB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZSgpO1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcihjb2x1bW5OYW1lLCBkcm9wZG93biwgZmlsdGVyaW5nTW9kaWZpZXIpIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuQXBwbHlGaWx0ZXIsXG4gICAgICBwYXlsb2FkOiB7IGZpbHRlcmluZ01vZGlmaWVyIH1cbiAgICB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KHsgY29sdW1uTmFtZSwgZHJvcGRvd24sIGZpbHRlcmluZ01vZGlmaWVyIH0pO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXIoY29sdW1uTmFtZSwgZHJvcGRvd24pIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHsgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZS5SZXNldEZpbHRlciB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmcodGhpcy5jb2x1bW5zLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLCB7XG4gICAgICB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlLlJlc2V0RmlsdGVyXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJpbmcoXG4gICAgY29sdW1uTmFtZXM6IHN0cmluZ1tdLFxuICAgIGFjdGlvbjoge1xuICAgICAgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZTtcbiAgICAgIHBheWxvYWQ/OiB7IGZpbHRlcmluZ01vZGlmaWVyOiBGaWx0ZXJpbmdNb2RpZmllciB9O1xuICAgIH1cbiAgKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAuLi4oYWN0aW9uLnR5cGUgPT09IEZpbHRlcmluZ0FjdGlvblR5cGUuQXBwbHlGaWx0ZXJcbiAgICAgICAgICAgID8gYWN0aW9uLnBheWxvYWQuZmlsdGVyaW5nTW9kaWZpZXJcbiAgICAgICAgICAgIDogeyBmaWx0ZXJQcmVkaWNhdGU6IHVuZGVmaW5lZCwgZXh0ZXJuYWxGaWx0ZXJRdWVyeTogdW5kZWZpbmVkIH0pXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZ0FwcGxpZWQoKTtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgdXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpIHtcbiAgICB0aGlzLmZpbHRlcmluZ0FwcGxpZWQgPSB0aGlzLmNvbHVtbnMuc29tZSh0aGlzLmlzQ29sdW1uRmlsdGVyaW5nQXBwbGllZCk7XG4gIH1cblxuICBpc0NvbHVtbkZpbHRlcmluZ0FwcGxpZWQoY29sdW1uOiBDb2x1bW4pOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGZpbHRlcmFibGUsIGZpbHRlclByZWRpY2F0ZSwgZXh0ZXJuYWxGaWx0ZXJRdWVyeSB9ID0gY29sdW1uO1xuXG4gICAgcmV0dXJuICEhKGZpbHRlcmFibGUgJiYgKGZpbHRlclByZWRpY2F0ZSB8fCBleHRlcm5hbEZpbHRlclF1ZXJ5KSk7XG4gIH1cblxuICB1cGRhdGVQYWdpbmF0aW9uKHsgaXRlbXNQZXJQYWdlLCBwYWdlIH0pIHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgcGFnZVNpemU6IGl0ZW1zUGVyUGFnZSwgY3VycmVudFBhZ2U6IHBhZ2UgfTtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlKCk7XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uID0geyAuLi50aGlzLnBhZ2luYXRpb24sIGN1cnJlbnRQYWdlOiAxIH07XG4gICAgdGhpcy5yZWNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWREYXRhKHRydWUpO1xuICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIGxvYWROZXh0UGFnZSgpOiBQcm9taXNlPElSZXN1bHRMaXN0PG9iamVjdD4+IHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5uZXh0UGFnZSB9O1xuXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5yZXN1bHRMaXN0JFxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gaW4gb3JkZXIgZm9yIGB0b1Byb21pc2VgIHRvIHdvcmssIHRoZSBvYnNlcnZhYmxlIG5lZWRzIHRvIGNvbXBsZXRlXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgIHBhZ2luZzoge1xuICAgICAgICAgICAgLi4ucmVzdWx0LnBhZ2luZyxcbiAgICAgICAgICAgIG5leHQ6IHRoaXMubG9hZE5leHRQYWdlLmJpbmQodGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgSVJlc3VsdExpc3Q8b2JqZWN0PjtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZTogJ0NFTEwnLCB2YWx1ZSwgcm93LCBjb2x1bW5OYW1lIH0pO1xuICB9XG5cbiAgZ2V0SGVhZGVyQ2VsbFJlbmRlcmVyU3BlYyh7IHZhbHVlLCBjb2x1bW5OYW1lIH0pOiBDZWxsUmVuZGVyZXJTcGVjIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHR5cGU6ICdIRUFERVInLCB2YWx1ZSwgcm93OiB1bmRlZmluZWQsIGNvbHVtbk5hbWUgfSk7XG4gIH1cblxuICBnZXRGaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjKHsgY29sdW1uLCBkcm9wZG93biB9KTogRmlsdGVyaW5nRm9ybVJlbmRlcmVyU3BlYyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcmVyOlxuICAgICAgICBnZXQodGhpcy5nZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pLCAnZmlsdGVyaW5nRm9ybVJlbmRlcmVyRGVmLnRlbXBsYXRlJykgfHxcbiAgICAgICAgY29sdW1uLmZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgcHJvcGVydHk6IGNvbHVtbixcbiAgICAgICAgYXBwbHlGaWx0ZXI6IHRoaXMuYXBwbHlGaWx0ZXIuYmluZCh0aGlzLCBjb2x1bW4ubmFtZSwgZHJvcGRvd24pLFxuICAgICAgICByZXNldEZpbHRlcjogdGhpcy5yZXNldEZpbHRlci5iaW5kKHRoaXMsIGNvbHVtbi5uYW1lLCBkcm9wZG93bilcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc2V0QWxsSXRlbXNTZWxlY3RlZChzZWxlY3RlZCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zZWxlY3Rpb24kXG4gICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgLnN1YnNjcmliZSgoeyBmaWx0ZXJlZERhdGFJZHMgfSkgPT4gdGhpcy5zZXRJdGVtc1NlbGVjdGVkKGZpbHRlcmVkRGF0YUlkcywgc2VsZWN0ZWQpKTtcbiAgfVxuXG4gIHNldEFsbEl0ZW1zSW5DdXJyZW50UGFnZVNlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKGRhdGEgPT4gdGhpcy5zZXRJdGVtc1NlbGVjdGVkKGRhdGEsIHNlbGVjdGVkKSk7XG4gIH1cblxuICBzZXRJdGVtc1NlbGVjdGVkKGl0ZW1zOiBhbnlbXSwgc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBpdGVtSWRzID0gaXRlbXMubWFwKChpdGVtOiBvYmplY3QgfCBzdHJpbmcpID0+XG4gICAgICB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgPyBpdGVtW3RoaXMuc2VsZWN0aW9uUHJpbWFyeUtleV0gOiBpdGVtXG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWRzID0gc2VsZWN0ZWRcbiAgICAgID8gdW5pb24odGhpcy5zZWxlY3RlZEl0ZW1JZHMsIGl0ZW1JZHMpXG4gICAgICA6IHdpdGhvdXQodGhpcy5zZWxlY3RlZEl0ZW1JZHMsIC4uLml0ZW1JZHMpO1xuXG4gICAgdGhpcy5pdGVtc1NlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtSWRzKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbUlkcyA9IFtdO1xuICAgIHRoaXMuaXRlbXNTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbUlkcyk7XG4gIH1cblxuICBpc0l0ZW1TZWxlY3RlZChpdGVtKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtSWRzLmluY2x1ZGVzKGl0ZW1bdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5XSk7XG4gIH1cblxuICBvbkNvbHVtbkRyb3AoeyBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXggfSkge1xuICAgIGNvbnN0IGRpZmZlcmVudEluZGV4ID0gcHJldmlvdXNJbmRleCAhPT0gY3VycmVudEluZGV4O1xuXG4gICAgaWYgKGRpZmZlcmVudEluZGV4KSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuc3BsaWNlKHByZXZpb3VzSW5kZXgsIDEpO1xuICAgICAgdGhpcy5jb2x1bW5zLnNwbGljZShjdXJyZW50SW5kZXgsIDAsIGNvbHVtblswXSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVDb2x1bW5OYW1lcygpO1xuICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gIH1cblxuICB1cGRhdGVHcmlkQ29sdW1uc1NpemUoKSB7XG4gICAgdGhpcy5zdHlsZXMgPSB7XG4gICAgICAuLi50aGlzLnN0eWxlcyxcbiAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgICAgdGhpcy5jb2x1bW5zXG4gICAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnZpc2libGUpXG4gICAgICAgICAgLm1hcCgoeyBncmlkVHJhY2tTaXplIH0pID0+IGdyaWRUcmFja1NpemUpXG4gICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgKSxcbiAgICAgIGdyaWRJbmZpbml0ZVNjcm9sbENvbHVtbjogdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKFxuICAgICAgICBgMSAvIHNwYW4gJHt0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSkubGVuZ3RofWBcbiAgICAgIClcbiAgICB9O1xuXG4gICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlKCk7XG4gIH1cblxuICBsb2FkQ2hpbGREZXZpY2VzKCkge1xuICAgIHRoaXMuc2hvd0NoaWxkRGV2aWNlcy52YWx1ZSA9ICF0aGlzLnNob3dDaGlsZERldmljZXMudmFsdWU7XG4gICAgdGhpcy5vbkNoaWxkRGV2aWNlcy5lbWl0KHRoaXMuc2hvd0NoaWxkRGV2aWNlcy52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb25maWdDaGFuZ2UoKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKHsgdmlzaWJsZSwgc29ydE9yZGVyLCBuYW1lIH0pID0+ICh7XG4gICAgICB2aXNpYmxlLFxuICAgICAgc29ydE9yZGVyLFxuICAgICAgbmFtZVxuICAgIH0pKTtcbiAgICB0aGlzLm9uQ29uZmlnQ2hhbmdlLmVtaXQoeyBjb2x1bW5zLCBwYWdpbmF0aW9uOiB0aGlzLnBhZ2luYXRpb24gfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbnMoKSB7XG4gICAgY29uc3Qgc3BlY2lhbENvbHVtbiA9IHtcbiAgICAgIGdyaWRUcmFja1NpemU6ICdtaW5tYXgoNDJweCwgODJweCknLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcG9zaXRpb25GaXhlZDogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdCBjb2x1bW5zID0gW1xuICAgICAgdGhpcy5zZWxlY3RhYmxlID8geyAuLi5zcGVjaWFsQ29sdW1uLCBuYW1lOiBTcGVjaWFsQ29sdW1uTmFtZS5DaGVja2JveCB9IDogdW5kZWZpbmVkLFxuICAgICAgLi4udGhpcy5jb2x1bW5zLFxuICAgICAgdGhpcy5hY3Rpb25Db250cm9scy5sZW5ndGggPiAwXG4gICAgICAgID8geyAuLi5zcGVjaWFsQ29sdW1uLCBuYW1lOiBTcGVjaWFsQ29sdW1uTmFtZS5BY3Rpb25zIH1cbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICBdXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKHRoaXMud2l0aENvbHVtbkRlZmF1bHRzKTtcblxuICAgIHRoaXMuY29sdW1ucyA9IHVuaXFCeShjb2x1bW5zLCAnbmFtZScpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uTmFtZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRoQ29sdW1uRGVmYXVsdHMoY29sdW1uKTogQ29sdW1uIHtcbiAgICBjb25zdCBkYXRhVHlwZSA9IGNvbHVtbi5kYXRhVHlwZSB8fCBDb2x1bW5EYXRhVHlwZS5UZXh0U2hvcnQ7XG4gICAgY29uc3QgeyBoZWFkZXJDU1NDbGFzc05hbWUsIGNlbGxDU1NDbGFzc05hbWUgfSA9IGNvbHVtbjtcblxuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgcG9zaXRpb25GaXhlZDogZmFsc2UsXG4gICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgIHNvcnRPcmRlcjogJycsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgIC4uLmNvbHVtbixcbiAgICAgIGRhdGFUeXBlLFxuICAgICAgZ3JpZFRyYWNrU2l6ZTpcbiAgICAgICAgY29sdW1uLmdyaWRUcmFja1NpemUgfHxcbiAgICAgICAgYG1pbm1heCgke21pbkNvbHVtbkdyaWRUcmFja1NpemV9cHgsICR7cmF0aW9zQnlDb2x1bW5UeXBlc1tkYXRhVHlwZV19ZnIpYCxcbiAgICAgIGhlYWRlckNTU0NsYXNzTmFtZTpcbiAgICAgICAgKHR5cGVvZiBoZWFkZXJDU1NDbGFzc05hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBoZWFkZXJDU1NDbGFzc05hbWUuc3BsaXQoJyAnKVxuICAgICAgICAgIDogaGVhZGVyQ1NTQ2xhc3NOYW1lKSB8fCBbXSxcbiAgICAgIGNlbGxDU1NDbGFzc05hbWU6XG4gICAgICAgICh0eXBlb2YgY2VsbENTU0NsYXNzTmFtZSA9PT0gJ3N0cmluZycgPyBjZWxsQ1NTQ2xhc3NOYW1lLnNwbGl0KCcgJykgOiBjZWxsQ1NTQ2xhc3NOYW1lKSB8fFxuICAgICAgICBbXVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbk5hbWVzKCkge1xuICAgIHRoaXMuY29sdW1uTmFtZXMgPSB0aGlzLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwUmVzaXplSGFuZGxlKCkge1xuICAgIGNvbnN0IHJlc2l6ZUhhbmRsZURyYWckID0gdGhpcy5yZXNpemVIYW5kbGVNb3VzZURvd24kLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgdGFwKCgpID0+IHRoaXMuY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSksXG4gICAgICBtZXJnZU1hcCgoeyBldmVudCwgdGFyZ2V0Q29sdW1uTmFtZSB9KSA9PiB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHRhcmdldENvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgaGVhZGVyQ1NTQ2xhc3NOYW1lOiB1bmlvbihjb2x1bW4uaGVhZGVyQ1NTQ2xhc3NOYW1lLCBbJ2hlYWRlci0tYmVpbmctcmVzaXplZCddKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmhlYWRlckJlaW5nUmVzaXplZCA9IHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiB0YXJnZXRDb2x1bW5OYW1lLFxuICAgICAgICAgIGVsOiBldmVudC50YXJnZXQucGFyZW50Tm9kZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgICAgIHRhYmxlQ3Vyc29yOiAnY29sLXJlc2l6ZSdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZU1vdmUkLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMucmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXNpemVIYW5kbGVEcmFnJC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5uYW1lID09PSB0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5jb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIC8vIFJlYWQgd3JhcHBlcidzIG9mZnNldCBsZWZ0IHJlbGF0aXZlIHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxPZmZzZXQgPSB3cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cbiAgICAgICAgICAgIC8vIEFkanVzdCB3aXRoIHRoZSB3cmFwcGVyIGhvcml6b250YWwgc2Nyb2xsIHBvc2l0aW9uLlxuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbE9mZnNldCA9IHdyYXBwZXIuc2Nyb2xsTGVmdCAtIGhvcml6b250YWxPZmZzZXQ7XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGVzaXJlZCB3aWR0aC5cbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID1cbiAgICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbE9mZnNldCArIGV2ZW50LmNsaWVudFggLSAodGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQuZWwub2Zmc2V0TGVmdCB8fCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbHVtbiBvYmplY3Qgd2l0aCB0aGUgbmV3IHNpemUgdmFsdWUsIGVuZm9yY2Ugb3VyIG1pbmltdW0gc2l6ZS5cbiAgICAgICAgICAgICAgZ3JpZFRyYWNrU2l6ZTogYCR7TWF0aC5tYXgobWluQ29sdW1uR3JpZFRyYWNrU2l6ZSwgd2lkdGgpfXB4YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGb3IgdGhlIG90aGVyIGhlYWRlcnMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNldCB3aWR0aCwgZml4IGl0IHRvIHRoZWlyIGNvbXB1dGVkIHdpZHRoLlxuICAgICAgICAgIGlmIChjb2x1bW4uZ3JpZFRyYWNrU2l6ZS5zdGFydHNXaXRoKCdtaW5tYXgnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICAvLyBpc24ndCBmaXhlZCB5ZXQgKGl0IHdvdWxkIGJlIGEgcHggdmFsdWUpXG4gICAgICAgICAgICAgIGdyaWRUcmFja1NpemU6IGAke19wYXJzZUludCh0aGlzLnRoRWxzW2ldLmNsaWVudFdpZHRoKX1weGBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVXBkYXRlIHRoZSBjb2x1bW4gc2l6ZXMuXG4gICAgICAgICAqIE5vdGU6IGdyaWQtdGVtcGxhdGUtY29sdW1ucyBzZXRzIHRoZSB3aWR0aCBmb3IgYWxsIGNvbHVtbnMgaW4gb25lIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZVVwJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gdGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQuY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICBoZWFkZXJDU1NDbGFzc05hbWU6IHdpdGhvdXQoY29sdW1uLmhlYWRlckNTU0NsYXNzTmFtZSwgJ2hlYWRlci0tYmVpbmctcmVzaXplZCcpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhlYWRlckJlaW5nUmVzaXplZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnN0eWxlcyA9IHtcbiAgICAgICAgICAuLi50aGlzLnN0eWxlcyxcbiAgICAgICAgICB0YWJsZUN1cnNvcjogJ2F1dG8nXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTW91c2VIaWdobGlnaHRzKCkge1xuICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHR5cGUsIHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gY29sdW1uTmFtZSk7XG4gICAgY29uc3QgY29sdW1uUmVuZGVyZXIgPSB0aGlzLmdldENvbHVtblJlbmRlcmVyKGNvbHVtbik7XG4gICAgY29uc3QgcmVuZGVyZXJUZW1wbGF0ZSA9IGdldChcbiAgICAgIGNvbHVtblJlbmRlcmVyLFxuICAgICAgYCR7dHlwZSA9PT0gJ0hFQURFUicgPyAnaGVhZGVyQ2VsbFJlbmRlcmVyRGVmJyA6ICdjZWxsUmVuZGVyZXJEZWYnfS50ZW1wbGF0ZWBcbiAgICApO1xuXG4gICAgY29uc3QgeyBjZWxsUmVuZGVyZXJDb21wb25lbnQsIGhlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudCB9ID0gY29sdW1uO1xuICAgIGNvbnN0IHJlbmRlcmVyQ29tcG9uZW50ID1cbiAgICAgIHR5cGUgPT09ICdIRUFERVInID8gaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50IDogY2VsbFJlbmRlcmVyQ29tcG9uZW50O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcmVyOiByZW5kZXJlclRlbXBsYXRlIHx8IHJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgY29udGV4dDoge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaXRlbTogcm93LFxuICAgICAgICBwcm9wZXJ0eTogY29sdW1uXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKTogQ29sdW1uRGlyZWN0aXZlIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5SZW5kZXJlcnMudG9BcnJheSgpLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBjb2x1bW4ubmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhKHJlbG9hZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm93cyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwYWdpbmF0aW9uLFxuICAgICAgc2VhcmNoVGV4dCxcbiAgICAgIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gICAgICBzZWxlY3RhYmxlLFxuICAgICAgc2VsZWN0aW9uUHJpbWFyeUtleSxcbiAgICAgIGluZmluaXRlU2Nyb2xsXG4gICAgfSA9IHRoaXM7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UubG9hZERhdGEoe1xuICAgICAgcm93cyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwYWdpbmF0aW9uLFxuICAgICAgc2VhcmNoVGV4dCxcbiAgICAgIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gICAgICBzZWxlY3RhYmxlLFxuICAgICAgc2VsZWN0aW9uUHJpbWFyeUtleSxcbiAgICAgIGluZmluaXRlU2Nyb2xsLFxuICAgICAgcmVsb2FkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbHRlcmluZ0xhYmVsc1BhcmFtcyhzdGF0czogRGF0YVNvdXJjZVN0YXRzKSB7XG4gICAgdGhpcy5maWx0ZXJpbmdMYWJlbHNQYXJhbXMgPSB7XG4gICAgICBmaWx0ZXJlZEl0ZW1zQ291bnQ6IHN0YXRzLmZpbHRlcmVkU2l6ZSxcbiAgICAgIGFsbEl0ZW1zQ291bnQ6IHN0YXRzLnNpemVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYWdpbmF0aW9uTGFiZWxQYXJhbXMoc3RhdHM6IERhdGFTb3VyY2VTdGF0cykge1xuICAgIHRoaXMucGFnaW5hdGlvbi5uZXh0UGFnZSA9IHN0YXRzLm5leHRQYWdlO1xuICAgIGNvbnN0IHBhZ2VGaXJzdEl0ZW1JZHggPSAoc3RhdHMuY3VycmVudFBhZ2UgLSAxKSAqIHN0YXRzLmZpcnN0UGFnZVNpemUgKyAxO1xuICAgIHRoaXMucGFnaW5hdGlvbkxhYmVsUGFyYW1zID0ge1xuICAgICAgcGFnZUZpcnN0SXRlbUlkeCxcbiAgICAgIHBhZ2VMYXN0SXRlbUlkeDogcGFnZUZpcnN0SXRlbUlkeCArIChzdGF0cy5jdXJyZW50UGFnZVNpemUgLSAxKSxcbiAgICAgIGl0ZW1zVG90YWw6IHN0YXRzLmZpbHRlcmVkU2l6ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50KHN0YXRzOiBEYXRhU291cmNlU3RhdHMpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmluZmluaXRlU2Nyb2xsICYmXG4gICAgICBzdGF0cyAmJlxuICAgICAgc3RhdHMubmV4dFBhZ2UgJiZcbiAgICAgICghdGhpcy5sb2FkTW9yZUNvbXBvbmVudCB8fCB0aGlzLnJlY3JlYXRlTG9hZE1vcmVDb21wb25lbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlY3JlYXRlTG9hZE1vcmVDb21wb25lbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGxDb250YWluZXIuY2xlYXIoKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8YW55PiA9IHRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFxuICAgICAgICBMb2FkTW9yZUNvbXBvbmVudFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuaW5maW5pdGVTY3JvbGxDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgTG9hZE1vcmVDb21wb25lbnQ7XG4gICAgICBpbnN0YW5jZS51c2VJbnRlcnNlY3Rpb24gPSB0aGlzLmluZmluaXRlU2Nyb2xsID09PSAnYXV0bycgfHwgdGhpcy5pbmZpbml0ZVNjcm9sbCA9PT0gJ2hpZGRlbic7XG4gICAgICBpbnN0YW5jZS5oaWRkZW4gPSB0aGlzLmluZmluaXRlU2Nyb2xsID09PSAnaGlkZGVuJztcbiAgICAgIGluc3RhbmNlLnBhZ2luZyA9IHtcbiAgICAgICAgbmV4dFBhZ2U6IHN0YXRzLm5leHRQYWdlLFxuICAgICAgICBuZXh0OiB0aGlzLmxvYWROZXh0UGFnZS5iaW5kKHRoaXMpXG4gICAgICB9IGFzIFBhZ2luZzxhbnk+O1xuICAgICAgaW5zdGFuY2UubG9hZE5leHRMYWJlbCA9IHRoaXMubG9hZE1vcmVJdGVtc0xhYmVsO1xuICAgICAgaW5zdGFuY2UubG9hZGluZ0xhYmVsID0gdGhpcy5sb2FkaW5nSXRlbXNMYWJlbDtcbiAgICAgIHRoaXMubG9hZE1vcmVDb21wb25lbnQgPSBpbnN0YW5jZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9hZE1vcmVDb21wb25lbnQgJiYgIXN0YXRzLm5leHRQYWdlKSB7XG4gICAgICB0aGlzLmxvYWRNb3JlQ29tcG9uZW50LnBhZ2luZyA9IHtcbiAgICAgICAgbmV4dFBhZ2U6IG51bGxcbiAgICAgIH0gYXMgUGFnaW5nPGFueT47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb1RvcCgpIHtcbiAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgfVxufVxuIl19
674
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2RhdGEtZ3JpZC9kYXRhLWdyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUNMLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGdCQUFnQixFQUNoQix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxRQUFRLElBQUksU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFDTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLEtBQUssRUFDTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ0osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFTTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEVBRXRCLG1CQUFtQixFQU1wQixNQUFNLG1CQUFtQixDQUFD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QUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7OERBQTZCO0lBR25FO1FBREMsU0FBUyxDQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztzRUFDdEM7SUFtQ1M7UUFBbEQsWUFBWSxDQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztxREFBdUM7SUFqSjlFLGlCQUFpQjtRQUo3QixTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsZUFBZTtZQUN6Qiw2aHFCQUF5QztTQUMxQyxDQUFDO09BQ1csaUJBQWlCLENBMnJCN0I7SUFBRCx3QkFBQztDQUFBLEFBM3JCRCxJQTJyQkM7U0EzckJZLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0hlYWRlckNlbGwgfSBmcm9tICdAYW5ndWxhci9jZGsvdGFibGUnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50RmFjdG9yeSxcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBJUmVzdWx0TGlzdCwgUGFnaW5nIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgZmxvdywgZ2V0LCBwYXJzZUludCBhcyBfcGFyc2VJbnQsIHVuaW9uLCB3aXRob3V0LCB1bmlxQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlyc3QsXG4gIG1lcmdlTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRhcFxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbW1vbi9sb2FkLW1vcmUuY29tcG9uZW50JztcbmltcG9ydCB7IExvYWRNb3JlTW9kZSB9IGZyb20gJy4uL2NvbW1vbi9sb2FkLW1vcmUubW9kZWwnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5pbXBvcnQgeyBDZWxsUmVuZGVyZXJTcGVjIH0gZnJvbSAnLi9jb2x1bW4vY2VsbC1yZW5kZXJlcic7XG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IEZpbHRlcmluZ0Zvcm1SZW5kZXJlclNwZWMsIEZpbHRlcmluZ01vZGlmaWVyIH0gZnJvbSAnLi9jb2x1bW4vZmlsdGVyaW5nLWZvcm0tcmVuZGVyZXInO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBDb2x1bW4sXG4gIENvbHVtbkRhdGFUeXBlLFxuICBEYXRhR3JpZCxcbiAgRGF0YVNvdXJjZVN0YXRzLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgRmlsdGVyaW5nQWN0aW9uVHlwZSxcbiAgbWluQ29sdW1uR3JpZFRyYWNrU2l6ZSxcbiAgUGFnaW5hdGlvbixcbiAgcmF0aW9zQnlDb2x1bW5UeXBlcyxcbiAgUm93LFxuICBTZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrLFxuICBTb3J0T3JkZXIsXG4gIFNwZWNpYWxDb2x1bW5OYW1lLFxuICBHcmlkQ29uZmlnXG59IGZyb20gJy4vZGF0YS1ncmlkLm1vZGVsJztcbmltcG9ydCB7IEdyaWREYXRhU291cmNlIH0gZnJvbSAnLi9ncmlkLWRhdGEtc291cmNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhdGEtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWdyaWQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERhdGFHcmlkQ29tcG9uZW50IGltcGxlbWVudHMgRGF0YUdyaWQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBnZXR0ZXh0KCdJdGVtcycpO1xuICBASW5wdXQoKSBsb2FkTW9yZUl0ZW1zTGFiZWw6IHN0cmluZyA9IGdldHRleHQoJ0xvYWQgbW9yZSBpdGVtcycpO1xuICBASW5wdXQoKSBsb2FkaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZGluZyBpdGVtc+KApicpO1xuICBASW5wdXQoKSBzaG93U2VhcmNoID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlZnJlc2g6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBASW5wdXQoKSBzaG93Q2hpbGREZXZpY2VzOiBhbnkgPSB7fTtcblxuICBjb2x1bW5zOiBDb2x1bW5bXTtcbiAgQElucHV0KCdjb2x1bW5zJylcbiAgc2V0IF9jb2x1bW5zKGNvbHVtbnMpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zIHx8IFtdO1xuICB9XG5cbiAgZGF0YVNvdXJjZSA9IG5ldyBHcmlkRGF0YVNvdXJjZSgpO1xuICByb3dzOiBSb3dbXTtcbiAgQElucHV0KCdyb3dzJylcbiAgc2V0IF9yb3dzKHJvd3MpIHtcbiAgICB0aGlzLnJvd3MgPSByb3dzIHx8IFtdO1xuICB9XG5cbiAgZmlsdGVyaW5nTGFiZWxzUGFyYW1zID0ge1xuICAgIGZpbHRlcmVkSXRlbXNDb3VudDogMCxcbiAgICBhbGxJdGVtc0NvdW50OiAwXG4gIH07XG5cbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbjtcbiAgcGFnaW5hdGlvbkxhYmVsUGFyYW1zID0ge1xuICAgIHBhZ2VGaXJzdEl0ZW1JZHg6IDAsXG4gICAgcGFnZUxhc3RJdGVtSWR4OiAwLFxuICAgIGl0ZW1zVG90YWw6IDBcbiAgfTtcbiAgcmVhZG9ubHkgcG9zc2libGVQYWdlU2l6ZXM6IG51bWJlcltdID0gWzEwLCAxNSwgMjAsIDMwLCA1MF07XG4gIHJlYWRvbmx5IG1pblBvc3NpYmxlUGFnZVNpemUgPSBNYXRoLm1pbiguLi50aGlzLnBvc3NpYmxlUGFnZVNpemVzKTtcbiAgQElucHV0KCdwYWdpbmF0aW9uJylcbiAgc2V0IF9wYWdpbmF0aW9uKHBhZ2luYXRpb24pIHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSBwYWdpbmF0aW9uO1xuICAgIGNvbnN0IHBhZ2VTaXplID0gZ2V0KHRoaXMucGFnaW5hdGlvbiwgJ3BhZ2VTaXplJyk7XG5cbiAgICBpZiAoXG4gICAgICBwYWdlU2l6ZSAmJlxuICAgICAgIXRoaXMucG9zc2libGVQYWdlU2l6ZXMuZmluZChwb3NzaWJsZVBhZ2VTaXplID0+IHBvc3NpYmxlUGFnZVNpemUgPT09IHBhZ2VTaXplKVxuICAgICkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0geyAuLi50aGlzLnBhZ2luYXRpb24sIHBhZ2VTaXplOiAxMCB9O1xuICAgIH1cbiAgfVxuXG4gIGluZmluaXRlU2Nyb2xsOiBMb2FkTW9yZU1vZGU7XG4gIEBJbnB1dCgnaW5maW5pdGVTY3JvbGwnKVxuICBzZXQgX2luZmluaXRlU2Nyb2xsKGluZmluaXRlU2Nyb2xsOiBMb2FkTW9yZU1vZGUpIHtcbiAgICB0aGlzLmluZmluaXRlU2Nyb2xsID0gaW5maW5pdGVTY3JvbGw7XG4gIH1cblxuICBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrOiBTZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrO1xuICBASW5wdXQoJ3NlcnZlclNpZGVEYXRhQ2FsbGJhY2snKVxuICBzZXQgX3NlcnZlclNpZGVEYXRhQ2FsbGJhY2soc2VydmVyU2lkZURhdGFDYWxsYmFjaykge1xuICAgIHRoaXMuc2VydmVyU2lkZURhdGFDYWxsYmFjayA9IHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s7XG4gIH1cblxuICBzZWxlY3RhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgnc2VsZWN0YWJsZScpXG4gIHNldCBfc2VsZWN0YWJsZShzZWxlY3RhYmxlKSB7XG4gICAgdGhpcy5zZWxlY3RhYmxlID0gc2VsZWN0YWJsZTtcbiAgfVxuXG4gIHNlbGVjdGlvblByaW1hcnlLZXkgPSAnaWQnO1xuICBASW5wdXQoJ3NlbGVjdGlvblByaW1hcnlLZXknKVxuICBzZXQgX3NlbGVjdGlvblByaW1hcnlLZXkoc2VsZWN0aW9uUHJpbWFyeUtleSkge1xuICAgIHRoaXMuc2VsZWN0aW9uUHJpbWFyeUtleSA9IHNlbGVjdGlvblByaW1hcnlLZXk7XG4gIH1cblxuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnMgPSB7XG4gICAgc3RyaXBlZDogdHJ1ZSxcbiAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgZ3JpZEhlYWRlcjogdHJ1ZSxcbiAgICBmaWx0ZXI6IHRydWVcbiAgfTtcbiAgQElucHV0KCdkaXNwbGF5T3B0aW9ucycpXG4gIHNldCBfZGlzcGxheU9wdGlvbnMoZGlzcGxheU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BsYXlPcHRpb25zID0geyAuLi50aGlzLmRpc3BsYXlPcHRpb25zLCAuLi5kaXNwbGF5T3B0aW9ucyB9O1xuICB9XG5cbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXTtcbiAgQElucHV0KCdhY3Rpb25Db250cm9scycpXG4gIHNldCBfYWN0aW9uQ29udHJvbHMoYWN0aW9uQ29udHJvbHMpIHtcbiAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gYWN0aW9uQ29udHJvbHMgfHwgW107XG4gIH1cblxuICBidWxrQWN0aW9uQ29udHJvbHM6IEJ1bGtBY3Rpb25Db250cm9sW107XG4gIEBJbnB1dCgnYnVsa0FjdGlvbkNvbnRyb2xzJylcbiAgc2V0IF9idWxrQWN0aW9uQ29udHJvbHMoYnVsa0FjdGlvbkNvbnRyb2xzKSB7XG4gICAgdGhpcy5idWxrQWN0aW9uQ29udHJvbHMgPSBidWxrQWN0aW9uQ29udHJvbHMgfHwgW107XG4gIH1cbiAgQElucHV0KClcbiAgc2VhcmNoVGV4dCA9ICcnO1xuICBASW5wdXQoKSBpdGVtc1NlbGVjdExpbWl0OiBudW1iZXI7XG5cbiAgQE91dHB1dCgpIHJvd01vdXNlT3ZlciA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgcm93TW91c2VMZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgQE91dHB1dCgpIG9uQ29uZmlnQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkQ29uZmlnPigpO1xuICBAT3V0cHV0KCkgb25GaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIG9uQ2hpbGREZXZpY2VzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oQ29sdW1uRGlyZWN0aXZlKSBjb2x1bW5SZW5kZXJlcnM6IFF1ZXJ5TGlzdDxDb2x1bW5EaXJlY3RpdmU+O1xuXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbCcsIHsgc3RhdGljOiB0cnVlIH0pIHNjcm9sbENvbnRhaW5lcjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdpbmZpbml0ZVNjcm9sbENvbnRhaW5lcicsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICBpbmZpbml0ZVNjcm9sbENvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBsb2FkTW9yZUNvbXBvbmVudDogTG9hZE1vcmVDb21wb25lbnQ7XG5cbiAgY29sdW1uTmFtZXMgPSBbXTtcblxuICBzdHlsZXMgPSB7XG4gICAgdGFibGVDdXJzb3I6ICdhdXRvJyxcbiAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgZ3JpZEluZmluaXRlU2Nyb2xsQ29sdW1uOiB1bmRlZmluZWRcbiAgfTtcblxuICBzZWFyY2hUZXh0JCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBmaWx0ZXJpbmdBcHBsaWVkID0gZmFsc2U7XG4gIHRvdGFsUGFnZXNDb3VudCA9IEluZmluaXR5O1xuXG4gIHNlbGVjdGVkSXRlbUlkczogc3RyaW5nW10gPSBbXTtcbiAgY3VycmVudFBhZ2VTZWxlY3Rpb25TdGF0ZSA9IHtcbiAgICBhbGxTZWxlY3RlZDogZmFsc2UsXG4gICAgYWxsRGVzZWxlY3RlZDogdHJ1ZVxuICB9O1xuXG4gIGJ1aWx0SW5BY3Rpb25UeXBlID0ge1xuICAgIEVkaXQ6IEJ1aWx0SW5BY3Rpb25UeXBlLkVkaXQsXG4gICAgRGVsZXRlOiBCdWlsdEluQWN0aW9uVHlwZS5EZWxldGUsXG4gICAgRXhwb3J0OiBCdWlsdEluQWN0aW9uVHlwZS5FeHBvcnRcbiAgfTtcblxuICByZXNpemVIYW5kbGVNb3VzZURvd24kID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHJlc2l6ZUhhbmRsZUNvbnRhaW5lck1vdXNlTW92ZSQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgcHJpdmF0ZSBoZWFkZXJCZWluZ1Jlc2l6ZWQ6IHtcbiAgICBjb2x1bW5OYW1lOiBzdHJpbmc7XG4gICAgZWw6IEhUTUxFbGVtZW50O1xuICB9O1xuICBAVmlld0NoaWxkcmVuKENka0hlYWRlckNlbGwsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcml2YXRlIHRoUmVmczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBwcml2YXRlIHRoRWxzO1xuXG4gIHByaXZhdGUgcmVjcmVhdGVMb2FkTW9yZUNvbXBvbmVudDogYm9vbGVhbjtcblxuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgaG9zdFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNlYXJjaFRleHQkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcChzZWFyY2hUZXh0ID0+IHtcbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSBzZWFyY2hUZXh0O1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMucmVsb2FkKCk7XG4gICAgICB9KTtcblxuICAgIGlmICh0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5kYXRhU291cmNlLmRhdGEkLCB0aGlzLml0ZW1zU2VsZWN0LmFzT2JzZXJ2YWJsZSgpKVxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKVxuICAgICAgICAuc3Vic2NyaWJlKChbZGF0YV0pID0+IHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZUVtcHR5ID0gZGF0YS5sZW5ndGggPT09IDA7XG5cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlU2VsZWN0aW9uU3RhdGUgPSB7XG4gICAgICAgICAgICBhbGxTZWxlY3RlZDogY3VycmVudFBhZ2VFbXB0eSA/IGZhbHNlIDogZGF0YS5ldmVyeShpdGVtID0+IHRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpLFxuICAgICAgICAgICAgYWxsRGVzZWxlY3RlZDogY3VycmVudFBhZ2VFbXB0eSA/IHRydWUgOiBkYXRhLmV2ZXJ5KGl0ZW0gPT4gIXRoaXMuaXNJdGVtU2VsZWN0ZWQoaXRlbSkpXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZGF0YVNvdXJjZS5zdGF0cyQucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoc3RhdHMgPT4ge1xuICAgICAgdGhpcy5jcmVhdGVMb2FkTW9yZUNvbXBvbmVudChzdGF0cyk7XG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZ0xhYmVsc1BhcmFtcyhzdGF0cyk7XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25MYWJlbFBhcmFtcyhzdGF0cyk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5yZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2gucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50Ll9hY3Rpb25Db250cm9scyB8fCBldmVudC5fYWN0aW9uQ29udHJvbHMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgICB0aGlzLnRoRWxzID0gdGhpcy50aFJlZnMudG9BcnJheSgpLm1hcCgoeyBuYXRpdmVFbGVtZW50IH0pID0+IG5hdGl2ZUVsZW1lbnQpO1xuICAgIHRoaXMuc2V0dXBSZXNpemVIYW5kbGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgdHJhY2tCeU5hbWUoaW5kZXgsIGl0ZW0pIHtcbiAgICByZXR1cm4gaXRlbS5uYW1lO1xuICB9XG5cbiAgcmVzb2x2ZUNlbGxWYWx1ZShyb3csIHBhdGgpIHtcbiAgICByZXR1cm4gZmxvdyhbXG4gICAgICB4ID0+IHRoaXMuZGF0YVNvdXJjZS5yZXNvbHZlVmFsdWUoeCwgcGF0aCksXG4gICAgICB0aGlzLmRhdGFTb3VyY2UucmVzb2x2ZUZ1bmN0aW9uLFxuICAgICAgdGhpcy5kYXRhU291cmNlLm5vcm1hbGl6ZU5pbFxuICAgIF0pKHJvdyk7XG4gIH1cblxuICBjaGFuZ2VTb3J0T3JkZXIoY29sdW1uTmFtZSkge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gY29sdW1uTmFtZSk7XG5cbiAgICBpZiAoY29sdW1uKSB7XG4gICAgICBjb25zdCB7IHNvcnRPcmRlciB9ID0gY29sdW1uO1xuXG4gICAgICBpZiAoIXNvcnRPcmRlcikge1xuICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmcoW2NvbHVtbk5hbWVdLCAnYXNjJyk7XG4gICAgICB9IGVsc2UgaWYgKHNvcnRPcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTb3J0aW5nKFtjb2x1bW5OYW1lXSwgJ2Rlc2MnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudXBkYXRlU29ydGluZyhbY29sdW1uTmFtZV0sICcnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVTb3J0aW5nKGNvbHVtbk5hbWVzOiBzdHJpbmdbXSwgc29ydE9yZGVyOiBTb3J0T3JkZXIpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKFxuICAgICAgKGNvbHVtbik6IENvbHVtbiA9PiB7XG4gICAgICAgIGlmIChjb2x1bW5OYW1lcy5pbmNsdWRlcyhjb2x1bW4ubmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5jb2x1bW4sIHNvcnRPcmRlciB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgIH1cbiAgICApO1xuICAgIHRoaXMuZW1pdENvbmZpZ0NoYW5nZSgpO1xuICAgIHRoaXMucmVsb2FkKCk7XG4gIH1cblxuICBhcHBseUZpbHRlcihjb2x1bW5OYW1lLCBkcm9wZG93biwgZmlsdGVyaW5nTW9kaWZpZXIpIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHtcbiAgICAgIHR5cGU6IEZpbHRlcmluZ0FjdGlvblR5cGUuQXBwbHlGaWx0ZXIsXG4gICAgICBwYXlsb2FkOiB7IGZpbHRlcmluZ01vZGlmaWVyIH1cbiAgICB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KHsgY29sdW1uTmFtZSwgZHJvcGRvd24sIGZpbHRlcmluZ01vZGlmaWVyIH0pO1xuICB9XG5cbiAgcmVzZXRGaWx0ZXIoY29sdW1uTmFtZSwgZHJvcGRvd24pIHtcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZyhbY29sdW1uTmFtZV0sIHsgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZS5SZXNldEZpbHRlciB9KTtcbiAgICBkcm9wZG93bi5oaWRlKCk7XG4gIH1cblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy51cGRhdGVGaWx0ZXJpbmcodGhpcy5jb2x1bW5zLm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpLCB7XG4gICAgICB0eXBlOiBGaWx0ZXJpbmdBY3Rpb25UeXBlLlJlc2V0RmlsdGVyXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVGaWx0ZXJpbmcoXG4gICAgY29sdW1uTmFtZXM6IHN0cmluZ1tdLFxuICAgIGFjdGlvbjoge1xuICAgICAgdHlwZTogRmlsdGVyaW5nQWN0aW9uVHlwZTtcbiAgICAgIHBheWxvYWQ/OiB7IGZpbHRlcmluZ01vZGlmaWVyOiBGaWx0ZXJpbmdNb2RpZmllciB9O1xuICAgIH1cbiAgKSB7XG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgaWYgKGNvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAuLi4oYWN0aW9uLnR5cGUgPT09IEZpbHRlcmluZ0FjdGlvblR5cGUuQXBwbHlGaWx0ZXJcbiAgICAgICAgICAgID8gYWN0aW9uLnBheWxvYWQuZmlsdGVyaW5nTW9kaWZpZXJcbiAgICAgICAgICAgIDogeyBmaWx0ZXJQcmVkaWNhdGU6IHVuZGVmaW5lZCwgZXh0ZXJuYWxGaWx0ZXJRdWVyeTogdW5kZWZpbmVkIH0pXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmluZ0FwcGxpZWQoKTtcbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgdXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpIHtcbiAgICB0aGlzLmZpbHRlcmluZ0FwcGxpZWQgPSB0aGlzLmNvbHVtbnMuc29tZSh0aGlzLmlzQ29sdW1uRmlsdGVyaW5nQXBwbGllZCk7XG4gIH1cblxuICBpc0NvbHVtbkZpbHRlcmluZ0FwcGxpZWQoY29sdW1uOiBDb2x1bW4pOiBib29sZWFuIHtcbiAgICBjb25zdCB7IGZpbHRlcmFibGUsIGZpbHRlclByZWRpY2F0ZSwgZXh0ZXJuYWxGaWx0ZXJRdWVyeSB9ID0gY29sdW1uO1xuXG4gICAgcmV0dXJuICEhKGZpbHRlcmFibGUgJiYgKGZpbHRlclByZWRpY2F0ZSB8fCBleHRlcm5hbEZpbHRlclF1ZXJ5KSk7XG4gIH1cblxuICB1cGRhdGVQYWdpbmF0aW9uKHsgaXRlbXNQZXJQYWdlLCBwYWdlIH0pIHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgcGFnZVNpemU6IGl0ZW1zUGVyUGFnZSwgY3VycmVudFBhZ2U6IHBhZ2UgfTtcbiAgICB0aGlzLmxvYWREYXRhKCk7XG4gICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlKCk7XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uID0geyAuLi50aGlzLnBhZ2luYXRpb24sIGN1cnJlbnRQYWdlOiAxIH07XG4gICAgdGhpcy5yZWNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50ID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWREYXRhKHRydWUpO1xuICAgIHRoaXMuc2Nyb2xsVG9Ub3AoKTtcbiAgfVxuXG4gIGxvYWROZXh0UGFnZSgpOiBQcm9taXNlPElSZXN1bHRMaXN0PG9iamVjdD4+IHtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSB7IC4uLnRoaXMucGFnaW5hdGlvbiwgY3VycmVudFBhZ2U6IHRoaXMucGFnaW5hdGlvbi5uZXh0UGFnZSB9O1xuXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5yZXN1bHRMaXN0JFxuICAgICAgLnBpcGUodGFrZSgxKSkgLy8gaW4gb3JkZXIgZm9yIGB0b1Byb21pc2VgIHRvIHdvcmssIHRoZSBvYnNlcnZhYmxlIG5lZWRzIHRvIGNvbXBsZXRlXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgIHBhZ2luZzoge1xuICAgICAgICAgICAgLi4ucmVzdWx0LnBhZ2luZyxcbiAgICAgICAgICAgIG5leHQ6IHRoaXMubG9hZE5leHRQYWdlLmJpbmQodGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIH0gYXMgSVJlc3VsdExpc3Q8b2JqZWN0PjtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIHJldHVybiB0aGlzLl9nZXRDZWxsUmVuZGVyZXJTcGVjKHsgdHlwZTogJ0NFTEwnLCB2YWx1ZSwgcm93LCBjb2x1bW5OYW1lIH0pO1xuICB9XG5cbiAgZ2V0SGVhZGVyQ2VsbFJlbmRlcmVyU3BlYyh7IHZhbHVlLCBjb2x1bW5OYW1lIH0pOiBDZWxsUmVuZGVyZXJTcGVjIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHR5cGU6ICdIRUFERVInLCB2YWx1ZSwgcm93OiB1bmRlZmluZWQsIGNvbHVtbk5hbWUgfSk7XG4gIH1cblxuICBnZXRGaWx0ZXJpbmdGb3JtUmVuZGVyZXJTcGVjKHsgY29sdW1uLCBkcm9wZG93biB9KTogRmlsdGVyaW5nRm9ybVJlbmRlcmVyU3BlYyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcmVyOlxuICAgICAgICBnZXQodGhpcy5nZXRDb2x1bW5SZW5kZXJlcihjb2x1bW4pLCAnZmlsdGVyaW5nRm9ybVJlbmRlcmVyRGVmLnRlbXBsYXRlJykgfHxcbiAgICAgICAgY29sdW1uLmZpbHRlcmluZ0Zvcm1SZW5kZXJlckNvbXBvbmVudCxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgcHJvcGVydHk6IGNvbHVtbixcbiAgICAgICAgYXBwbHlGaWx0ZXI6IHRoaXMuYXBwbHlGaWx0ZXIuYmluZCh0aGlzLCBjb2x1bW4ubmFtZSwgZHJvcGRvd24pLFxuICAgICAgICByZXNldEZpbHRlcjogdGhpcy5yZXNldEZpbHRlci5iaW5kKHRoaXMsIGNvbHVtbi5uYW1lLCBkcm9wZG93bilcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgc2V0QWxsSXRlbXNTZWxlY3RlZChzZWxlY3RlZCkge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zZWxlY3Rpb24kXG4gICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgLnN1YnNjcmliZSgoeyBmaWx0ZXJlZERhdGFJZHMgfSkgPT4gdGhpcy5zZXRJdGVtc1NlbGVjdGVkKGZpbHRlcmVkRGF0YUlkcywgc2VsZWN0ZWQpKTtcbiAgfVxuXG4gIHNldEFsbEl0ZW1zSW5DdXJyZW50UGFnZVNlbGVjdGVkKHNlbGVjdGVkKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLmRhdGEkLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKGRhdGEgPT4gdGhpcy5zZXRJdGVtc1NlbGVjdGVkKGRhdGEsIHNlbGVjdGVkKSk7XG4gIH1cblxuICBzZXRJdGVtc1NlbGVjdGVkKGl0ZW1zOiBhbnlbXSwgc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBpdGVtSWRzID0gaXRlbXMubWFwKChpdGVtOiBvYmplY3QgfCBzdHJpbmcpID0+XG4gICAgICB0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcgPyBpdGVtW3RoaXMuc2VsZWN0aW9uUHJpbWFyeUtleV0gOiBpdGVtXG4gICAgKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWRzID0gc2VsZWN0ZWRcbiAgICAgID8gdW5pb24odGhpcy5zZWxlY3RlZEl0ZW1JZHMsIGl0ZW1JZHMpXG4gICAgICA6IHdpdGhvdXQodGhpcy5zZWxlY3RlZEl0ZW1JZHMsIC4uLml0ZW1JZHMpO1xuXG4gICAgdGhpcy5pdGVtc1NlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtSWRzKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbUlkcyA9IFtdO1xuICAgIHRoaXMuaXRlbXNTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkSXRlbUlkcyk7XG4gIH1cblxuICBpc0l0ZW1TZWxlY3RlZChpdGVtKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtSWRzLmluY2x1ZGVzKGl0ZW1bdGhpcy5zZWxlY3Rpb25QcmltYXJ5S2V5XSk7XG4gIH1cblxuICBvbkNvbHVtbkRyb3AoeyBwcmV2aW91c0luZGV4LCBjdXJyZW50SW5kZXggfSkge1xuICAgIGNvbnN0IGRpZmZlcmVudEluZGV4ID0gcHJldmlvdXNJbmRleCAhPT0gY3VycmVudEluZGV4O1xuXG4gICAgaWYgKGRpZmZlcmVudEluZGV4KSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuc3BsaWNlKHByZXZpb3VzSW5kZXgsIDEpO1xuICAgICAgdGhpcy5jb2x1bW5zLnNwbGljZShjdXJyZW50SW5kZXgsIDAsIGNvbHVtblswXSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVDb2x1bW5OYW1lcygpO1xuICAgIHRoaXMudXBkYXRlR3JpZENvbHVtbnNTaXplKCk7XG4gIH1cblxuICB1cGRhdGVHcmlkQ29sdW1uc1NpemUoKSB7XG4gICAgdGhpcy5zdHlsZXMgPSB7XG4gICAgICAuLi50aGlzLnN0eWxlcyxcbiAgICAgIGdyaWRUZW1wbGF0ZUNvbHVtbnM6IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShcbiAgICAgICAgdGhpcy5jb2x1bW5zXG4gICAgICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnZpc2libGUpXG4gICAgICAgICAgLm1hcCgoeyBncmlkVHJhY2tTaXplIH0pID0+IGdyaWRUcmFja1NpemUpXG4gICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgKSxcbiAgICAgIGdyaWRJbmZpbml0ZVNjcm9sbENvbHVtbjogdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFN0eWxlKFxuICAgICAgICBgMSAvIHNwYW4gJHt0aGlzLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4udmlzaWJsZSkubGVuZ3RofWBcbiAgICAgIClcbiAgICB9O1xuXG4gICAgdGhpcy5lbWl0Q29uZmlnQ2hhbmdlKCk7XG4gIH1cblxuICBsb2FkQ2hpbGREZXZpY2VzKCkge1xuICAgIHRoaXMuc2hvd0NoaWxkRGV2aWNlcy52YWx1ZSA9ICF0aGlzLnNob3dDaGlsZERldmljZXMudmFsdWU7XG4gICAgdGhpcy5vbkNoaWxkRGV2aWNlcy5lbWl0KHRoaXMuc2hvd0NoaWxkRGV2aWNlcy52YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDb25maWdDaGFuZ2UoKSB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoKHsgdmlzaWJsZSwgc29ydE9yZGVyLCBuYW1lIH0pID0+ICh7XG4gICAgICB2aXNpYmxlLFxuICAgICAgc29ydE9yZGVyLFxuICAgICAgbmFtZVxuICAgIH0pKTtcbiAgICB0aGlzLm9uQ29uZmlnQ2hhbmdlLmVtaXQoeyBjb2x1bW5zLCBwYWdpbmF0aW9uOiB0aGlzLnBhZ2luYXRpb24gfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbnMoKSB7XG4gICAgY29uc3Qgc3BlY2lhbENvbHVtbiA9IHtcbiAgICAgIGdyaWRUcmFja1NpemU6ICdtaW5tYXgoNDJweCwgODJweCknLFxuICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgcG9zaXRpb25GaXhlZDogdHJ1ZVxuICAgIH07XG5cbiAgICBjb25zdCBjb2x1bW5zID0gW1xuICAgICAgdGhpcy5zZWxlY3RhYmxlID8geyAuLi5zcGVjaWFsQ29sdW1uLCBuYW1lOiBTcGVjaWFsQ29sdW1uTmFtZS5DaGVja2JveCB9IDogdW5kZWZpbmVkLFxuICAgICAgLi4udGhpcy5jb2x1bW5zLFxuICAgICAgdGhpcy5hY3Rpb25Db250cm9scy5sZW5ndGggPiAwXG4gICAgICAgID8geyAuLi5zcGVjaWFsQ29sdW1uLCBuYW1lOiBTcGVjaWFsQ29sdW1uTmFtZS5BY3Rpb25zIH1cbiAgICAgICAgOiB1bmRlZmluZWRcbiAgICBdXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAubWFwKHRoaXMud2l0aENvbHVtbkRlZmF1bHRzKTtcblxuICAgIHRoaXMuY29sdW1ucyA9IHVuaXFCeShjb2x1bW5zLCAnbmFtZScpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uTmFtZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zU2l6ZSgpO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyaW5nQXBwbGllZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRoQ29sdW1uRGVmYXVsdHMoY29sdW1uKTogQ29sdW1uIHtcbiAgICBjb25zdCBkYXRhVHlwZSA9IGNvbHVtbi5kYXRhVHlwZSB8fCBDb2x1bW5EYXRhVHlwZS5UZXh0U2hvcnQ7XG4gICAgY29uc3QgeyBoZWFkZXJDU1NDbGFzc05hbWUsIGNlbGxDU1NDbGFzc05hbWUgfSA9IGNvbHVtbjtcblxuICAgIHJldHVybiB7XG4gICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgcG9zaXRpb25GaXhlZDogZmFsc2UsXG4gICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgIHNvcnRPcmRlcjogJycsXG4gICAgICBmaWx0ZXJhYmxlOiBmYWxzZSxcbiAgICAgIC4uLmNvbHVtbixcbiAgICAgIGRhdGFUeXBlLFxuICAgICAgZ3JpZFRyYWNrU2l6ZTpcbiAgICAgICAgY29sdW1uLmdyaWRUcmFja1NpemUgfHxcbiAgICAgICAgYG1pbm1heCgke21pbkNvbHVtbkdyaWRUcmFja1NpemV9cHgsICR7cmF0aW9zQnlDb2x1bW5UeXBlc1tkYXRhVHlwZV19ZnIpYCxcbiAgICAgIGhlYWRlckNTU0NsYXNzTmFtZTpcbiAgICAgICAgKHR5cGVvZiBoZWFkZXJDU1NDbGFzc05hbWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBoZWFkZXJDU1NDbGFzc05hbWUuc3BsaXQoJyAnKVxuICAgICAgICAgIDogaGVhZGVyQ1NTQ2xhc3NOYW1lKSB8fCBbXSxcbiAgICAgIGNlbGxDU1NDbGFzc05hbWU6XG4gICAgICAgICh0eXBlb2YgY2VsbENTU0NsYXNzTmFtZSA9PT0gJ3N0cmluZycgPyBjZWxsQ1NTQ2xhc3NOYW1lLnNwbGl0KCcgJykgOiBjZWxsQ1NTQ2xhc3NOYW1lKSB8fFxuICAgICAgICBbXVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbHVtbk5hbWVzKCkge1xuICAgIHRoaXMuY29sdW1uTmFtZXMgPSB0aGlzLmNvbHVtbnMubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwUmVzaXplSGFuZGxlKCkge1xuICAgIGNvbnN0IHJlc2l6ZUhhbmRsZURyYWckID0gdGhpcy5yZXNpemVIYW5kbGVNb3VzZURvd24kLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgdGFwKCgpID0+IHRoaXMuY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSksXG4gICAgICBtZXJnZU1hcCgoeyBldmVudCwgdGFyZ2V0Q29sdW1uTmFtZSB9KSA9PiB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5tYXAoY29sdW1uID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHRhcmdldENvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgaGVhZGVyQ1NTQ2xhc3NOYW1lOiB1bmlvbihjb2x1bW4uaGVhZGVyQ1NTQ2xhc3NOYW1lLCBbJ2hlYWRlci0tYmVpbmctcmVzaXplZCddKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmhlYWRlckJlaW5nUmVzaXplZCA9IHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiB0YXJnZXRDb2x1bW5OYW1lLFxuICAgICAgICAgIGVsOiBldmVudC50YXJnZXQucGFyZW50Tm9kZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc3R5bGVzID0ge1xuICAgICAgICAgIC4uLnRoaXMuc3R5bGVzLFxuICAgICAgICAgIHRhYmxlQ3Vyc29yOiAnY29sLXJlc2l6ZSdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZU1vdmUkLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuY2xlYXJNb3VzZUhpZ2hsaWdodHMoKSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMucmVzaXplSGFuZGxlQ29udGFpbmVyTW91c2VVcCQpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXNpemVIYW5kbGVEcmFnJC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5uYW1lID09PSB0aGlzLmhlYWRlckJlaW5nUmVzaXplZC5jb2x1bW5OYW1lKSB7XG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIC8vIFJlYWQgd3JhcHBlcidzIG9mZnNldCBsZWZ0IHJlbGF0aXZlIHRvIHRoZSBkb2N1bWVudC5cbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxPZmZzZXQgPSB3cmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cbiAgICAgICAgICAgIC8vIEFkanVzdCB3aXRoIHRoZSB3cmFwcGVyIGhvcml6b250YWwgc2Nyb2xsIHBvc2l0aW9uLlxuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbE9mZnNldCA9IHdyYXBwZXIuc2Nyb2xsTGVmdCAtIGhvcml6b250YWxPZmZzZXQ7XG5cbiAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgZGVzaXJlZCB3aWR0aC5cbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID1cbiAgICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbE9mZnNldCArIGV2ZW50LmNsaWVudFggLSAodGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQuZWwub2Zmc2V0TGVmdCB8fCAwKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGNvbHVtbiBvYmplY3Qgd2l0aCB0aGUgbmV3IHNpemUgdmFsdWUsIGVuZm9yY2Ugb3VyIG1pbmltdW0gc2l6ZS5cbiAgICAgICAgICAgICAgZ3JpZFRyYWNrU2l6ZTogYCR7TWF0aC5tYXgobWluQ29sdW1uR3JpZFRyYWNrU2l6ZSwgd2lkdGgpfXB4YFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBGb3IgdGhlIG90aGVyIGhlYWRlcnMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNldCB3aWR0aCwgZml4IGl0IHRvIHRoZWlyIGNvbXB1dGVkIHdpZHRoLlxuICAgICAgICAgIGlmIChjb2x1bW4uZ3JpZFRyYWNrU2l6ZS5zdGFydHNXaXRoKCdtaW5tYXgnKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICAvLyBpc24ndCBmaXhlZCB5ZXQgKGl0IHdvdWxkIGJlIGEgcHggdmFsdWUpXG4gICAgICAgICAgICAgIGdyaWRUcmFja1NpemU6IGAke19wYXJzZUludCh0aGlzLnRoRWxzW2ldLmNsaWVudFdpZHRoKX1weGBcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVXBkYXRlIHRoZSBjb2x1bW4gc2l6ZXMuXG4gICAgICAgICAqIE5vdGU6IGdyaWQtdGVtcGxhdGUtY29sdW1ucyBzZXRzIHRoZSB3aWR0aCBmb3IgYWxsIGNvbHVtbnMgaW4gb25lIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy51cGRhdGVHcmlkQ29sdW1uc1NpemUoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNpemVIYW5kbGVDb250YWluZXJNb3VzZVVwJC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gdGhpcy5oZWFkZXJCZWluZ1Jlc2l6ZWQuY29sdW1uTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgICBoZWFkZXJDU1NDbGFzc05hbWU6IHdpdGhvdXQoY29sdW1uLmhlYWRlckNTU0NsYXNzTmFtZSwgJ2hlYWRlci0tYmVpbmctcmVzaXplZCcpXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhlYWRlckJlaW5nUmVzaXplZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICB0aGlzLnN0eWxlcyA9IHtcbiAgICAgICAgICAuLi50aGlzLnN0eWxlcyxcbiAgICAgICAgICB0YWJsZUN1cnNvcjogJ2F1dG8nXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTW91c2VIaWdobGlnaHRzKCkge1xuICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q2VsbFJlbmRlcmVyU3BlYyh7IHR5cGUsIHZhbHVlLCByb3csIGNvbHVtbk5hbWUgfSk6IENlbGxSZW5kZXJlclNwZWMge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gY29sdW1uTmFtZSk7XG4gICAgY29uc3QgY29sdW1uUmVuZGVyZXIgPSB0aGlzLmdldENvbHVtblJlbmRlcmVyKGNvbHVtbik7XG4gICAgY29uc3QgcmVuZGVyZXJUZW1wbGF0ZSA9IGdldChcbiAgICAgIGNvbHVtblJlbmRlcmVyLFxuICAgICAgYCR7dHlwZSA9PT0gJ0hFQURFUicgPyAnaGVhZGVyQ2VsbFJlbmRlcmVyRGVmJyA6ICdjZWxsUmVuZGVyZXJEZWYnfS50ZW1wbGF0ZWBcbiAgICApO1xuXG4gICAgY29uc3QgeyBjZWxsUmVuZGVyZXJDb21wb25lbnQsIGhlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudCB9ID0gY29sdW1uO1xuICAgIGNvbnN0IHJlbmRlcmVyQ29tcG9uZW50ID1cbiAgICAgIHR5cGUgPT09ICdIRUFERVInID8gaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50IDogY2VsbFJlbmRlcmVyQ29tcG9uZW50O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbmRlcmVyOiByZW5kZXJlclRlbXBsYXRlIHx8IHJlbmRlcmVyQ29tcG9uZW50LFxuICAgICAgY29udGV4dDoge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaXRlbTogcm93LFxuICAgICAgICBwcm9wZXJ0eTogY29sdW1uXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uKTogQ29sdW1uRGlyZWN0aXZlIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5SZW5kZXJlcnMudG9BcnJheSgpLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBjb2x1bW4ubmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWREYXRhKHJlbG9hZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3Qge1xuICAgICAgcm93cyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwYWdpbmF0aW9uLFxuICAgICAgc2VhcmNoVGV4dCxcbiAgICAgIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gICAgICBzZWxlY3RhYmxlLFxuICAgICAgc2VsZWN0aW9uUHJpbWFyeUtleSxcbiAgICAgIGluZmluaXRlU2Nyb2xsXG4gICAgfSA9IHRoaXM7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UubG9hZERhdGEoe1xuICAgICAgcm93cyxcbiAgICAgIGNvbHVtbnMsXG4gICAgICBwYWdpbmF0aW9uLFxuICAgICAgc2VhcmNoVGV4dCxcbiAgICAgIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gICAgICBzZWxlY3RhYmxlLFxuICAgICAgc2VsZWN0aW9uUHJpbWFyeUtleSxcbiAgICAgIGluZmluaXRlU2Nyb2xsLFxuICAgICAgcmVsb2FkXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUZpbHRlcmluZ0xhYmVsc1BhcmFtcyhzdGF0czogRGF0YVNvdXJjZVN0YXRzKSB7XG4gICAgdGhpcy5maWx0ZXJpbmdMYWJlbHNQYXJhbXMgPSB7XG4gICAgICBmaWx0ZXJlZEl0ZW1zQ291bnQ6IHN0YXRzLmZpbHRlcmVkU2l6ZSxcbiAgICAgIGFsbEl0ZW1zQ291bnQ6IHN0YXRzLnNpemVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYWdpbmF0aW9uTGFiZWxQYXJhbXMoc3RhdHM6IERhdGFTb3VyY2VTdGF0cykge1xuICAgIHRoaXMucGFnaW5hdGlvbi5uZXh0UGFnZSA9IHN0YXRzLm5leHRQYWdlO1xuICAgIGNvbnN0IHBhZ2VGaXJzdEl0ZW1JZHggPSAoc3RhdHMuY3VycmVudFBhZ2UgLSAxKSAqIHN0YXRzLmZpcnN0UGFnZVNpemUgKyAxO1xuICAgIHRoaXMucGFnaW5hdGlvbkxhYmVsUGFyYW1zID0ge1xuICAgICAgcGFnZUZpcnN0SXRlbUlkeCxcbiAgICAgIHBhZ2VMYXN0SXRlbUlkeDogcGFnZUZpcnN0SXRlbUlkeCArIChzdGF0cy5jdXJyZW50UGFnZVNpemUgLSAxKSxcbiAgICAgIGl0ZW1zVG90YWw6IHN0YXRzLmZpbHRlcmVkU2l6ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxvYWRNb3JlQ29tcG9uZW50KHN0YXRzOiBEYXRhU291cmNlU3RhdHMpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmluZmluaXRlU2Nyb2xsICYmXG4gICAgICBzdGF0cyAmJlxuICAgICAgc3RhdHMubmV4dFBhZ2UgJiZcbiAgICAgICghdGhpcy5sb2FkTW9yZUNvbXBvbmVudCB8fCB0aGlzLnJlY3JlYXRlTG9hZE1vcmVDb21wb25lbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLnJlY3JlYXRlTG9hZE1vcmVDb21wb25lbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGxDb250YWluZXIuY2xlYXIoKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8YW55PiA9IHRoaXMuY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFxuICAgICAgICBMb2FkTW9yZUNvbXBvbmVudFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuaW5maW5pdGVTY3JvbGxDb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgTG9hZE1vcmVDb21wb25lbnQ7XG4gICAgICBpbnN0YW5jZS51c2VJbnRlcnNlY3Rpb24gPSB0aGlzLmluZmluaXRlU2Nyb2xsID09PSAnYXV0bycgfHwgdGhpcy5pbmZpbml0ZVNjcm9sbCA9PT0gJ2hpZGRlbic7XG4gICAgICBpbnN0YW5jZS5oaWRkZW4gPSB0aGlzLmluZmluaXRlU2Nyb2xsID09PSAnaGlkZGVuJztcbiAgICAgIGluc3RhbmNlLnBhZ2luZyA9IHtcbiAgICAgICAgbmV4dFBhZ2U6IHN0YXRzLm5leHRQYWdlLFxuICAgICAgICBuZXh0OiB0aGlzLmxvYWROZXh0UGFnZS5iaW5kKHRoaXMpXG4gICAgICB9IGFzIFBhZ2luZzxhbnk+O1xuICAgICAgaW5zdGFuY2UubG9hZE5leHRMYWJlbCA9IHRoaXMubG9hZE1vcmVJdGVtc0xhYmVsO1xuICAgICAgaW5zdGFuY2UubG9hZGluZ0xhYmVsID0gdGhpcy5sb2FkaW5nSXRlbXNMYWJlbDtcbiAgICAgIHRoaXMubG9hZE1vcmVDb21wb25lbnQgPSBpbnN0YW5jZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubG9hZE1vcmVDb21wb25lbnQgJiYgIXN0YXRzLm5leHRQYWdlKSB7XG4gICAgICB0aGlzLmxvYWRNb3JlQ29tcG9uZW50LnBhZ2luZyA9IHtcbiAgICAgICAgbmV4dFBhZ2U6IG51bGxcbiAgICAgIH0gYXMgUGFnaW5nPGFueT47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxUb1RvcCgpIHtcbiAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -10,4 +10,4 @@ export var FilteringActionType;
10
10
  FilteringActionType["ApplyFilter"] = "APPLY_FILTER";
11
11
  FilteringActionType["ResetFilter"] = "RESET_FILTER";
12
12
  })(FilteringActionType || (FilteringActionType = {}));
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGM4eS9uZ3gtY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvcmUvZGF0YS1ncmlkL2RhdGEtZ3JpZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUF3SkEsTUFBTSxDQUFDLElBQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxJQUFNLG1CQUFtQixHQUFHO0lBQ2pDLElBQUksRUFBRSxDQUFDO0lBQ1AsT0FBTyxFQUFFLENBQUM7SUFDVixZQUFZLEVBQUUsSUFBSTtJQUNsQixXQUFXLEVBQUUsSUFBSTtDQUNsQixDQUFDO0FBTUYsTUFBTSxDQUFOLElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3QixtREFBNEIsQ0FBQTtJQUM1QixtREFBNEIsQ0FBQTtBQUM5QixDQUFDLEVBSFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUc5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG4vKlxuICogRm9yIHJlZmVyZW5jZTogdGhlIHN0cnVjdHVyZSBvZiBjdXJyZW50IGRldmljZSBjb2x1bW4tcmVsYXRlZCBvYmplY3RzLlxuICogVE9ETzogQ2FuIGJlIHJlbW92ZWQgd2hlbiBcIkFsbCBkZXZpY2VzXCIgaXMgZnVsbHkgbWlncmF0ZWQuXG4gKlxuICogU2VydmljZXMgaW52b2x2ZWQ6XG4gKiAtIGM4eUZpbHRlcmluZ1NvcnRpbmdDb2x1bW5zXG4gKiAtIGM4eUZpbHRlcmluZ1NvcnRpbmdJbnZlbnRvcnlRdWVyaWVzXG4gKiAtIGM4eURldmljZUxpc3RDb2x1bW5zXG4gKiAtIGM4eUZpbHRlcmluZ1NvcnRpbmdDb2xsZWN0aW9ucz8/IC0+IGZvciBvdGhlciB0YWJsZXMgaW4gdGVuYW50L2NlbGwgSUQgdXNhZ2Ugc3RhdGlzdGljcyBmZWF0dXJlXG4gKlxuICogQ29tcG9uZW50cyBpbnZvbHZlZDpcbiAqIC0gYzh5RmlsdGVyZWRTb3J0ZWRMaXN0IC0+IHRoaXMgbmVlZHMgdG8gYmUgZ3JhdmVseSBhZGFwdGVkXG4gKlxuICogU3RhdGVzIHNhdmVkIGluIHVzZXIgcHJlZmVyZW5jZXM6XG4gKiAtIENvbHVtbnMgY29uZmlnIChBTExfREVWSUNFU19DT0xVTU5TX0NPTkZJR19VU0VSX1BSRUZFUkVOQ0VTX0tFWSlcbiAqIC0gQ29sdW1ucyBtZXRhIChBTExfREVWSUNFU19DT0xVTU5TX01FVEFfVVNFUl9QUkVGRVJFTkNFU19LRVlfUFJFRklYKVxuICpcbiAqIFN0YXRlcyBzYXZlZCBpbiBkeW5hbWljIGdyb3VwIG9iamVjdDpcbiAqIC0gQ29sdW1ucyBjb25maWcgKENPTFVNTlNfQ09ORklHX0ZSQUdNRU5UKVxuICogLSBDb2x1bW5zIG1ldGEgKENPTFVNTlNfTUVUQV9GUkFHTUVOVClcbiAqIC0gUXVlcnkgc3RyaW5nIChRVUVSWV9TVFJJTkdfRlJBR01FTlQpXG4gKlxuICogVE8tRlVUVVJFLVNFTEYgbm90ZTpcbiAqIC0gYGNvbC5jb25maWcuZmlsdGVyaW5nYCBhbmQgYGNvbC5jb25maWcuc29ydGluZ2AgKHRoZSBtb2RlbHMpIHBvcHVsYXRlXG4gKiBgY29sLmZpbHRlcmluZ2AgYW5kIGBjb2wuc29ydGluZ2AgKHRoZSB2aWV3cykuXG4gKiAtIGBnZXRGaWx0ZXJgIGNhbiByZXR1cm4gYSBxdWVyeSBvYmplY3QgKGZvciBzZXJ2ZXItc2lkZSBmaWx0ZXJpbmcpIG9yXG4gKiBhIGZpbHRlciBmdW5jdGlvbiAoZm9yIHNlcnZlci1zaWRlIGZpbHRlcmluZykuXG4gKi9cbmludGVyZmFjZSBEZXZpY2VDb2x1bW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGhlYWRlcjogc3RyaW5nO1xuICBjb25maWc6IHtcbiAgICBmaWx0ZXJpbmc6IG9iamVjdDtcbiAgICBzb3J0aW5nOiB7XG4gICAgICBvcmRlcjogbnVtYmVyO1xuICAgIH07XG4gICAgb3ZlcnJpZGU6IERldmljZUNvbHVtbjtcbiAgfTtcbiAgY2VsbDoge1xuICAgIGNsYXNzOiBzdHJpbmc7XG4gICAgaW5uZXJDbGFzczogc3RyaW5nO1xuICAgIHNjb3BlRXh0ZW5zaW9uczogb2JqZWN0O1xuICAgIHRlbXBsYXRlOiBzdHJpbmc7XG4gICAgc3R5bGU6IG9iamVjdDtcbiAgfTtcbiAgZmlsdGVyaW5nOiB7XG4gICAgZm9ybTogb2JqZWN0W107XG4gICAgc2NoZW1hOiB7XG4gICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgfTtcbiAgICB9O1xuICAgIGdldEZpbHRlcihmaWx0ZXJpbmdNb2RlbDogb2JqZWN0KTogb2JqZWN0IHwgRmlsdGVyRnVuY3Rpb247XG4gIH07XG4gIHNvcnRpbmc6IHtcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIHBhdGhzPzogc3RyaW5nO1xuICB9O1xuICBtZXRhOiB7XG4gICAgY3VzdG9tOiBib29sZWFuO1xuICAgIGtleTogc3RyaW5nO1xuICAgIGhlYWRlck5hbWU6IHN0cmluZztcbiAgICBmcmFnbWVudFBhdGg6IHN0cmluZztcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgZmlsdGVyaW5nTW9kZTogJ0VRVUFMSVRZJyB8ICdFWElTVEVOQ0UnO1xuICB9O1xufVxuXG50eXBlIEZpbHRlckZ1bmN0aW9uID0gKGl0ZW06IG9iamVjdCkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhR3JpZCB7XG4gIGNvbHVtbnM6IENvbHVtbltdO1xuICByb3dzOiBSb3dbXTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbjtcbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgc2VsZWN0aW9uUHJpbWFyeUtleTogc3RyaW5nO1xuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnM7XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW107XG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXTtcbn1cblxuLypcbiAqIENvbHVtblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gIG5hbWU6IHN0cmluZyB8IFNwZWNpYWxDb2x1bW5OYW1lO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHZpc2libGU/OiBib29sZWFuO1xuICBwb3NpdGlvbkZpeGVkPzogYm9vbGVhbjtcblxuICAvKlxuICAgKiBDb3NtZXRpY3NcbiAgICovXG4gIGRhdGFUeXBlPzogQ29sdW1uRGF0YVR5cGU7XG4gIGdyaWRUcmFja1NpemU/OiBzdHJpbmc7XG4gIGhlYWRlckNTU0NsYXNzTmFtZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBjZWxsQ1NTQ2xhc3NOYW1lPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLypcbiAgICogU29ydGluZy1GaWx0ZXJpbmdcbiAgICovXG4gIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgc29ydE9yZGVyPzogU29ydE9yZGVyO1xuXG4gIGZpbHRlcmFibGU/OiBib29sZWFuO1xuICBmaWx0ZXJQcmVkaWNhdGU/OiBzdHJpbmcgfCBGaWx0ZXJQcmVkaWNhdGVGdW5jdGlvbjtcbiAgZXh0ZXJuYWxGaWx0ZXJRdWVyeT86IGFueTtcblxuICAvKlxuICAgKiBDdXN0b20gcmVuZGVyZXJcbiAgICovXG4gIGNlbGxSZW5kZXJlckNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBmaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQ/OiBUeXBlPGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uQ29uZmlnIHtcbiAgbmFtZT86IHN0cmluZztcbiAgdmlzaWJsZT86IGJvb2xlYW47XG4gIHNvcnRPcmRlcj86IFNvcnRPcmRlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcmlkQ29uZmlnIHtcbiAgY29sdW1uczogQ29sdW1uQ29uZmlnW107XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb247XG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIFNwZWNpYWxDb2x1bW5OYW1lIHtcbiAgQ2hlY2tib3ggPSAnY2hlY2tib3gnLFxuICBBY3Rpb25zID0gJ2FjdGlvbnMnXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIENvbHVtbkRhdGFUeXBlIHtcbiAgSWNvbiA9ICdpY29uJyxcbiAgTnVtZXJpYyA9ICdudW1lcmljJyxcbiAgVGV4dFNob3J0ID0gJ3RleHQtc2hvcnQnLFxuICBUZXh0TG9uZyA9ICd0ZXh0LWxvbmcnXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIENvbHVtbkRhdGFSZWNvcmRDbGFzc05hbWUge1xuICBJY29uID0gJ2RhdGEtcmVjb3JkLWljb24nLFxuICBIZWFkZXIgPSAnZGF0YS1yZWNvcmQtaGVhZGVyJyxcbiAgRGVmYXVsdCA9ICcnXG59XG5cbmV4cG9ydCBjb25zdCBtaW5Db2x1bW5HcmlkVHJhY2tTaXplID0gODA7XG5cbmV4cG9ydCBjb25zdCByYXRpb3NCeUNvbHVtblR5cGVzID0ge1xuICBpY29uOiAxLFxuICBudW1lcmljOiAxLFxuICAndGV4dC1zaG9ydCc6IDEuNjcsXG4gICd0ZXh0LWxvbmcnOiAzLjMzXG59O1xuXG5leHBvcnQgdHlwZSBTb3J0T3JkZXIgPSAnYXNjJyB8ICdkZXNjJyB8ICcnO1xuXG5leHBvcnQgdHlwZSBGaWx0ZXJQcmVkaWNhdGVGdW5jdGlvbiA9IChpdGVtOiBvYmplY3QsIHBhdGg6IHN0cmluZykgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGVudW0gRmlsdGVyaW5nQWN0aW9uVHlwZSB7XG4gIEFwcGx5RmlsdGVyID0gJ0FQUExZX0ZJTFRFUicsXG4gIFJlc2V0RmlsdGVyID0gJ1JFU0VUX0ZJTFRFUidcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3cge1xuICBpZDogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnaW5hdGlvbiB7XG4gIGN1cnJlbnRQYWdlOiBudW1iZXI7XG4gIG5leHRQYWdlPzogbnVtYmVyO1xuICBwYWdlU2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgdHlwZSBTZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrID0gKFxuICBkYXRhU291cmNlTW9kaWZpZXI6IERhdGFTb3VyY2VNb2RpZmllclxuKSA9PiBTZXJ2ZXJTaWRlRGF0YVJlc3VsdDtcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNvdXJjZU1vZGlmaWVyIHtcbiAgY29sdW1uczogQ29sdW1uW107XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbjtcbiAgc2VsZWN0aW9uOiB7XG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBwcmltYXJ5S2V5OiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKlxuICogRGVzY3JpYmVzIHJlc3VsdCBmcm9tIHNlcnZlciB3aXRoIGRhdGEgYW5kIGFkZGl0aW9uYWwgc3RhdGlzdGljcy5cbiAqL1xuZXhwb3J0IHR5cGUgU2VydmVyU2lkZURhdGFSZXN1bHQgPSBJUmVzdWx0TGlzdDxvYmplY3Q+ICYge1xuICAvKiogVGhlIHJlYWwgZ3JhbmQgdG90YWwgbnVtYmVyIG9mIGl0ZW1zICh0aGUgd2hvbGUgZGF0YXNldCkuICovXG4gIHNpemU6IG51bWJlcjtcblxuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcyBhZnRlciBmaWx0ZXJpbmcgYXBwbGllZCB0byB0aGUgd2hvbGUgZGF0YXNldCAoc3Vic2V0KS4gKi9cbiAgZmlsdGVyZWRTaXplOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBsaXN0IG9mIGlkcyBvZiBhbGwgZmlsdGVyZWQgaXRlbXMgKHN1YnNldCkuICovXG4gIGZpbHRlcmVkRGF0YUlkcz86IHN0cmluZ1tdO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhU291cmNlU3RhdHMge1xuICAvKiogVGhlIHJlYWwgZ3JhbmQgdG90YWwgbnVtYmVyIG9mIGl0ZW1zICh0aGUgd2hvbGUgZGF0YXNldCkuICovXG4gIHNpemU6IG51bWJlcjtcblxuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcyBhZnRlciBmaWx0ZXJpbmcgYXBwbGllZCB0byB0aGUgd2hvbGUgZGF0YXNldCAoc3Vic2V0KS4gKi9cbiAgZmlsdGVyZWRTaXplOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgdGhlIGN1cnJlbnQgcGFnZS4gKi9cbiAgY3VycmVudFBhZ2U6IG51bWJlcjtcblxuICAvKiogVGhlIG51bWJlciBvZiB0aGUgbmV4dCBwYWdlLiAqL1xuICBuZXh0UGFnZT86IG51bWJlcjtcblxuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcyBjdXJyZW50bHkgc2hvd24gaW4gdGhlIGxpc3QgdmlldywgYS5rLmEuIGN1cnJlbnQgcGFnZSAod2hhdCB0aGUgdXNlciBzZWVzIG9uIHNjcmVlbikuICovXG4gIGN1cnJlbnRQYWdlU2l6ZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgbnVtYmVyIG9mIGl0ZW1zIG9uIHRoZSBmaXJzdCBwYWdlLiAgKi9cbiAgZmlyc3RQYWdlU2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERpc3BsYXlPcHRpb25zIHtcbiAgLyoqIFNob3cgb3IgaGlkZSB6ZWJyYS1zdHJpcGluZyBpbiB0aGUgdGFibGUgKi9cbiAgc3RyaXBlZDogYm9vbGVhbjtcbiAgLyoqIFNob3cgb3IgaGlkZSBlYWNoIGNlbGwgYm9yZGVyICovXG4gIGJvcmRlcmVkOiBib29sZWFuO1xuICAvKiogU2hvdyBvciBoaWRlIHRoZSBncmlkIGhlYWRlciAqL1xuICBncmlkSGVhZGVyOiBib29sZWFuO1xuICAvKiogU2hvdyBvciBoaWRlIGZpbHRlciBsYWJlbCBpbiB0aGUgZ3JpZCBoZWFkZXIgKi9cbiAgZmlsdGVyOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvbkNvbnRyb2wge1xuICB0eXBlOiBCdWlsdEluQWN0aW9uVHlwZSB8IHN0cmluZztcbiAgdGV4dD86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmJhbi10eXBlc1xuICBjYWxsYmFjazogKChpdGVtOiBSb3csIHJlbG9hZDogKCkgPT4gdm9pZCkgPT4gdm9pZCkgfCBGdW5jdGlvbjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1bGtBY3Rpb25Db250cm9sIGV4dGVuZHMgQWN0aW9uQ29udHJvbCB7XG4gIGNhbGxiYWNrKHNlbGVjdGVkSXRlbUlkczogc3RyaW5nW10sIHJlbG9hZDogKCkgPT4gdm9pZCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIEJ1aWx0SW5BY3Rpb25UeXBlIHtcbiAgRWRpdCA9ICdFRElUJyxcbiAgRGVsZXRlID0gJ0RFTEVURScsXG4gIEV4cG9ydCA9ICdFWFBPUlQnXG59XG4iXX0=
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1ncmlkLm1vZGVsLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGM4eS9uZ3gtY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvcmUvZGF0YS1ncmlkL2RhdGEtZ3JpZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2SkEsTUFBTSxDQUFDLElBQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxJQUFNLG1CQUFtQixHQUFHO0lBQ2pDLElBQUksRUFBRSxDQUFDO0lBQ1AsT0FBTyxFQUFFLENBQUM7SUFDVixZQUFZLEVBQUUsSUFBSTtJQUNsQixXQUFXLEVBQUUsSUFBSTtDQUNsQixDQUFDO0FBTUYsTUFBTSxDQUFOLElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3QixtREFBNEIsQ0FBQTtJQUM1QixtREFBNEIsQ0FBQTtBQUM5QixDQUFDLEVBSFcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUc5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG4vKlxuICogRm9yIHJlZmVyZW5jZTogdGhlIHN0cnVjdHVyZSBvZiBjdXJyZW50IGRldmljZSBjb2x1bW4tcmVsYXRlZCBvYmplY3RzLlxuICogVE9ETzogQ2FuIGJlIHJlbW92ZWQgd2hlbiBcIkFsbCBkZXZpY2VzXCIgaXMgZnVsbHkgbWlncmF0ZWQuXG4gKlxuICogU2VydmljZXMgaW52b2x2ZWQ6XG4gKiAtIGM4eUZpbHRlcmluZ1NvcnRpbmdDb2x1bW5zXG4gKiAtIGM4eUZpbHRlcmluZ1NvcnRpbmdJbnZlbnRvcnlRdWVyaWVzXG4gKiAtIGM4eURldmljZUxpc3RDb2x1bW5zXG4gKiAtIGM4eUZpbHRlcmluZ1NvcnRpbmdDb2xsZWN0aW9ucz8/IC0+IGZvciBvdGhlciB0YWJsZXMgaW4gdGVuYW50L2NlbGwgSUQgdXNhZ2Ugc3RhdGlzdGljcyBmZWF0dXJlXG4gKlxuICogQ29tcG9uZW50cyBpbnZvbHZlZDpcbiAqIC0gYzh5RmlsdGVyZWRTb3J0ZWRMaXN0IC0+IHRoaXMgbmVlZHMgdG8gYmUgZ3JhdmVseSBhZGFwdGVkXG4gKlxuICogU3RhdGVzIHNhdmVkIGluIHVzZXIgcHJlZmVyZW5jZXM6XG4gKiAtIENvbHVtbnMgY29uZmlnIChBTExfREVWSUNFU19DT0xVTU5TX0NPTkZJR19VU0VSX1BSRUZFUkVOQ0VTX0tFWSlcbiAqIC0gQ29sdW1ucyBtZXRhIChBTExfREVWSUNFU19DT0xVTU5TX01FVEFfVVNFUl9QUkVGRVJFTkNFU19LRVlfUFJFRklYKVxuICpcbiAqIFN0YXRlcyBzYXZlZCBpbiBkeW5hbWljIGdyb3VwIG9iamVjdDpcbiAqIC0gQ29sdW1ucyBjb25maWcgKENPTFVNTlNfQ09ORklHX0ZSQUdNRU5UKVxuICogLSBDb2x1bW5zIG1ldGEgKENPTFVNTlNfTUVUQV9GUkFHTUVOVClcbiAqIC0gUXVlcnkgc3RyaW5nIChRVUVSWV9TVFJJTkdfRlJBR01FTlQpXG4gKlxuICogVE8tRlVUVVJFLVNFTEYgbm90ZTpcbiAqIC0gYGNvbC5jb25maWcuZmlsdGVyaW5nYCBhbmQgYGNvbC5jb25maWcuc29ydGluZ2AgKHRoZSBtb2RlbHMpIHBvcHVsYXRlXG4gKiBgY29sLmZpbHRlcmluZ2AgYW5kIGBjb2wuc29ydGluZ2AgKHRoZSB2aWV3cykuXG4gKiAtIGBnZXRGaWx0ZXJgIGNhbiByZXR1cm4gYSBxdWVyeSBvYmplY3QgKGZvciBzZXJ2ZXItc2lkZSBmaWx0ZXJpbmcpIG9yXG4gKiBhIGZpbHRlciBmdW5jdGlvbiAoZm9yIHNlcnZlci1zaWRlIGZpbHRlcmluZykuXG4gKi9cbmludGVyZmFjZSBEZXZpY2VDb2x1bW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGhlYWRlcjogc3RyaW5nO1xuICBjb25maWc6IHtcbiAgICBmaWx0ZXJpbmc6IG9iamVjdDtcbiAgICBzb3J0aW5nOiB7XG4gICAgICBvcmRlcjogbnVtYmVyO1xuICAgIH07XG4gICAgb3ZlcnJpZGU6IERldmljZUNvbHVtbjtcbiAgfTtcbiAgY2VsbDoge1xuICAgIGNsYXNzOiBzdHJpbmc7XG4gICAgaW5uZXJDbGFzczogc3RyaW5nO1xuICAgIHNjb3BlRXh0ZW5zaW9uczogb2JqZWN0O1xuICAgIHRlbXBsYXRlOiBzdHJpbmc7XG4gICAgc3R5bGU6IG9iamVjdDtcbiAgfTtcbiAgZmlsdGVyaW5nOiB7XG4gICAgZm9ybTogb2JqZWN0W107XG4gICAgc2NoZW1hOiB7XG4gICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgfTtcbiAgICB9O1xuICAgIGdldEZpbHRlcihmaWx0ZXJpbmdNb2RlbDogb2JqZWN0KTogb2JqZWN0IHwgRmlsdGVyRnVuY3Rpb247XG4gIH07XG4gIHNvcnRpbmc6IHtcbiAgICBwYXRoPzogc3RyaW5nO1xuICAgIHBhdGhzPzogc3RyaW5nO1xuICB9O1xuICBtZXRhOiB7XG4gICAgY3VzdG9tOiBib29sZWFuO1xuICAgIGtleTogc3RyaW5nO1xuICAgIGhlYWRlck5hbWU6IHN0cmluZztcbiAgICBmcmFnbWVudFBhdGg6IHN0cmluZztcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgZmlsdGVyaW5nTW9kZTogJ0VRVUFMSVRZJyB8ICdFWElTVEVOQ0UnO1xuICB9O1xufVxuXG50eXBlIEZpbHRlckZ1bmN0aW9uID0gKGl0ZW06IG9iamVjdCkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhR3JpZCB7XG4gIGNvbHVtbnM6IENvbHVtbltdO1xuICByb3dzOiBSb3dbXTtcbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbjtcbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogU2VydmVyU2lkZURhdGFDYWxsYmFjaztcbiAgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgc2VsZWN0aW9uUHJpbWFyeUtleTogc3RyaW5nO1xuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnM7XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW107XG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXTtcbn1cblxuLypcbiAqIENvbHVtblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gIG5hbWU6IHN0cmluZyB8IFNwZWNpYWxDb2x1bW5OYW1lO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHZpc2libGU/OiBib29sZWFuO1xuICBwb3NpdGlvbkZpeGVkPzogYm9vbGVhbjtcblxuICAvKlxuICAgKiBDb3NtZXRpY3NcbiAgICovXG4gIGRhdGFUeXBlPzogQ29sdW1uRGF0YVR5cGU7XG4gIGdyaWRUcmFja1NpemU/OiBzdHJpbmc7XG4gIGhlYWRlckNTU0NsYXNzTmFtZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBjZWxsQ1NTQ2xhc3NOYW1lPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLypcbiAgICogU29ydGluZy1GaWx0ZXJpbmdcbiAgICovXG4gIHNvcnRhYmxlPzogYm9vbGVhbjtcbiAgc29ydE9yZGVyPzogU29ydE9yZGVyO1xuXG4gIGZpbHRlcmFibGU/OiBib29sZWFuO1xuICBmaWx0ZXJQcmVkaWNhdGU/OiBzdHJpbmcgfCBGaWx0ZXJQcmVkaWNhdGVGdW5jdGlvbjtcbiAgZXh0ZXJuYWxGaWx0ZXJRdWVyeT86IGFueTtcblxuICAvKlxuICAgKiBDdXN0b20gcmVuZGVyZXJcbiAgICovXG4gIGNlbGxSZW5kZXJlckNvbXBvbmVudD86IFR5cGU8YW55PjtcbiAgaGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBmaWx0ZXJpbmdGb3JtUmVuZGVyZXJDb21wb25lbnQ/OiBUeXBlPGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uQ29uZmlnIHtcbiAgbmFtZT86IHN0cmluZztcbiAgdmlzaWJsZT86IGJvb2xlYW47XG4gIHNvcnRPcmRlcj86IFNvcnRPcmRlcjtcbiAgZmlsdGVyPzogRmlsdGVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpbHRlciB7XG4gIGV4dGVybmFsRmlsdGVyUXVlcnk/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZENvbmZpZyB7XG4gIGNvbHVtbnM6IENvbHVtbkNvbmZpZ1tdO1xuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBTcGVjaWFsQ29sdW1uTmFtZSB7XG4gIENoZWNrYm94ID0gJ2NoZWNrYm94JyxcbiAgQWN0aW9ucyA9ICdhY3Rpb25zJ1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBDb2x1bW5EYXRhVHlwZSB7XG4gIEljb24gPSAnaWNvbicsXG4gIE51bWVyaWMgPSAnbnVtZXJpYycsXG4gIFRleHRTaG9ydCA9ICd0ZXh0LXNob3J0JyxcbiAgVGV4dExvbmcgPSAndGV4dC1sb25nJ1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBDb2x1bW5EYXRhUmVjb3JkQ2xhc3NOYW1lIHtcbiAgSWNvbiA9ICdkYXRhLXJlY29yZC1pY29uJyxcbiAgSGVhZGVyID0gJ2RhdGEtcmVjb3JkLWhlYWRlcicsXG4gIERlZmF1bHQgPSAnJ1xufVxuXG5leHBvcnQgY29uc3QgbWluQ29sdW1uR3JpZFRyYWNrU2l6ZSA9IDgwO1xuXG5leHBvcnQgY29uc3QgcmF0aW9zQnlDb2x1bW5UeXBlcyA9IHtcbiAgaWNvbjogMSxcbiAgbnVtZXJpYzogMSxcbiAgJ3RleHQtc2hvcnQnOiAxLjY3LFxuICAndGV4dC1sb25nJzogMy4zM1xufTtcblxuZXhwb3J0IHR5cGUgU29ydE9yZGVyID0gJ2FzYycgfCAnZGVzYycgfCAnJztcblxuZXhwb3J0IHR5cGUgRmlsdGVyUHJlZGljYXRlRnVuY3Rpb24gPSAoaXRlbTogb2JqZWN0LCBwYXRoOiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbmV4cG9ydCBlbnVtIEZpbHRlcmluZ0FjdGlvblR5cGUge1xuICBBcHBseUZpbHRlciA9ICdBUFBMWV9GSUxURVInLFxuICBSZXNldEZpbHRlciA9ICdSRVNFVF9GSUxURVInXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUm93IHtcbiAgaWQ6IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb24ge1xuICBjdXJyZW50UGFnZTogbnVtYmVyO1xuICBuZXh0UGFnZT86IG51bWJlcjtcbiAgcGFnZVNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgU2VydmVyU2lkZURhdGFDYWxsYmFjayA9IChcbiAgZGF0YVNvdXJjZU1vZGlmaWVyOiBEYXRhU291cmNlTW9kaWZpZXJcbikgPT4gU2VydmVyU2lkZURhdGFSZXN1bHQ7XG5leHBvcnQgaW50ZXJmYWNlIERhdGFTb3VyY2VNb2RpZmllciB7XG4gIGNvbHVtbnM6IENvbHVtbltdO1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIHBhZ2luYXRpb246IFBhZ2luYXRpb247XG4gIHNlbGVjdGlvbjoge1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJpbWFyeUtleTogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIERlc2NyaWJlcyByZXN1bHQgZnJvbSBzZXJ2ZXIgd2l0aCBkYXRhIGFuZCBhZGRpdGlvbmFsIHN0YXRpc3RpY3MuXG4gKi9cbmV4cG9ydCB0eXBlIFNlcnZlclNpZGVEYXRhUmVzdWx0ID0gSVJlc3VsdExpc3Q8b2JqZWN0PiAmIHtcbiAgLyoqIFRoZSByZWFsIGdyYW5kIHRvdGFsIG51bWJlciBvZiBpdGVtcyAodGhlIHdob2xlIGRhdGFzZXQpLiAqL1xuICBzaXplOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMgYWZ0ZXIgZmlsdGVyaW5nIGFwcGxpZWQgdG8gdGhlIHdob2xlIGRhdGFzZXQgKHN1YnNldCkuICovXG4gIGZpbHRlcmVkU2l6ZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgbGlzdCBvZiBpZHMgb2YgYWxsIGZpbHRlcmVkIGl0ZW1zIChzdWJzZXQpLiAqL1xuICBmaWx0ZXJlZERhdGFJZHM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNvdXJjZVN0YXRzIHtcbiAgLyoqIFRoZSByZWFsIGdyYW5kIHRvdGFsIG51bWJlciBvZiBpdGVtcyAodGhlIHdob2xlIGRhdGFzZXQpLiAqL1xuICBzaXplOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMgYWZ0ZXIgZmlsdGVyaW5nIGFwcGxpZWQgdG8gdGhlIHdob2xlIGRhdGFzZXQgKHN1YnNldCkuICovXG4gIGZpbHRlcmVkU2l6ZTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgbnVtYmVyIG9mIHRoZSBjdXJyZW50IHBhZ2UuICovXG4gIGN1cnJlbnRQYWdlOiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgdGhlIG5leHQgcGFnZS4gKi9cbiAgbmV4dFBhZ2U/OiBudW1iZXI7XG5cbiAgLyoqIFRoZSBudW1iZXIgb2YgaXRlbXMgY3VycmVudGx5IHNob3duIGluIHRoZSBsaXN0IHZpZXcsIGEuay5hLiBjdXJyZW50IHBhZ2UgKHdoYXQgdGhlIHVzZXIgc2VlcyBvbiBzY3JlZW4pLiAqL1xuICBjdXJyZW50UGFnZVNpemU6IG51bWJlcjtcblxuICAvKiogVGhlIG51bWJlciBvZiBpdGVtcyBvbiB0aGUgZmlyc3QgcGFnZS4gICovXG4gIGZpcnN0UGFnZVNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXNwbGF5T3B0aW9ucyB7XG4gIC8qKiBTaG93IG9yIGhpZGUgemVicmEtc3RyaXBpbmcgaW4gdGhlIHRhYmxlICovXG4gIHN0cmlwZWQ6IGJvb2xlYW47XG4gIC8qKiBTaG93IG9yIGhpZGUgZWFjaCBjZWxsIGJvcmRlciAqL1xuICBib3JkZXJlZDogYm9vbGVhbjtcbiAgLyoqIFNob3cgb3IgaGlkZSB0aGUgZ3JpZCBoZWFkZXIgKi9cbiAgZ3JpZEhlYWRlcjogYm9vbGVhbjtcbiAgLyoqIFNob3cgb3IgaGlkZSBmaWx0ZXIgbGFiZWwgaW4gdGhlIGdyaWQgaGVhZGVyICovXG4gIGZpbHRlcjogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY3Rpb25Db250cm9sIHtcbiAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUgfCBzdHJpbmc7XG4gIHRleHQ/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpiYW4tdHlwZXNcbiAgY2FsbGJhY2s6ICgoaXRlbTogUm93LCByZWxvYWQ6ICgpID0+IHZvaWQpID0+IHZvaWQpIHwgRnVuY3Rpb247XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWxrQWN0aW9uQ29udHJvbCBleHRlbmRzIEFjdGlvbkNvbnRyb2wge1xuICBjYWxsYmFjayhzZWxlY3RlZEl0ZW1JZHM6IHN0cmluZ1tdLCByZWxvYWQ6ICgpID0+IHZvaWQpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgZW51bSBCdWlsdEluQWN0aW9uVHlwZSB7XG4gIEVkaXQgPSAnRURJVCcsXG4gIERlbGV0ZSA9ICdERUxFVEUnLFxuICBFeHBvcnQgPSAnRVhQT1JUJ1xufVxuIl19
@@ -4,7 +4,7 @@ import { BehaviorSubject, defer, from, isObservable, of, Subject } from 'rxjs';
4
4
  import { catchError, finalize, map, switchMap, tap } from 'rxjs/operators';
5
5
  var GridDataSource = /** @class */ (function () {
6
6
  function GridDataSource() {
7
- this.loadingSubject = new BehaviorSubject(false);
7
+ this.loadingSubject = new BehaviorSubject(true);
8
8
  this.dataSourceSubject = new BehaviorSubject([]);
9
9
  this.dataStatsSubject = new BehaviorSubject({
10
10
  size: 0,
@@ -178,4 +178,4 @@ function escapeRegExpPattern(pattern) {
178
178
  if (pattern === void 0) { pattern = ''; }
179
179
  return pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
180
180
  }
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1kYXRhLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2RhdGEtZ3JpZC9ncmlkLWRhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczRTtJQXFCRTtRQWRRLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDckQsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDdEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWtCO1lBQzlELElBQUksRUFBRSxDQUFDO1lBQ1AsWUFBWSxFQUFFLENBQUM7WUFDZixXQUFXLEVBQUUsQ0FBQztZQUNkLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsRUFBRSxDQUFDO1NBQ2pCLENBQUMsQ0FBQztRQUNLLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFNO1lBQ3RELGVBQWUsRUFBRSxFQUFFO1NBQ3BCLENBQUMsQ0FBQztRQUNLLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBRzdELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FB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QU8sT0FBQSxTQUFTO1lBQVQsQ0FBUyxDQUFDO1NBQ2xELENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVPLCtDQUFzQixHQUE5QixVQUErQixFQUFvQjtZQUFsQixjQUFJLEVBQUUsMEJBQVU7UUFDL0MsT0FBTyxVQUFVO1lBQ2YsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkUsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUM7SUFFTywwQ0FBaUIsR0FBekIsVUFBMEIsV0FBVztRQUNuQyxPQUFPLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8scUNBQVksR0FBcEIsVUFBcUIsQ0FBQztRQUNwQixPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQUFDLEFBcE5ELElBb05DOztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxPQUFZO0lBQVosd0JBQUEsRUFBQSxZQUFZO0lBQ3ZDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGNodW5rLCBmbG93LCBnZXQsIGlzTmlsLCBtYXBWYWx1ZXMsIG9taXRCeSwgb3JkZXJCeSwgcGljayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlZmVyLCBmcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbHVtbiwgRGF0YVNvdXJjZVN0YXRzLCBTZXJ2ZXJTaWRlRGF0YVJlc3VsdCB9IGZyb20gJy4vZGF0YS1ncmlkLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIEdyaWREYXRhU291cmNlIGltcGxlbWVudHMgRGF0YVNvdXJjZTxvYmplY3Q+IHtcbiAgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGRhdGEkOiBPYnNlcnZhYmxlPG9iamVjdFtdPjtcbiAgc3RhdHMkOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VTdGF0cz47XG4gIHNlbGVjdGlvbiQ6IE9ic2VydmFibGU8YW55PjtcbiAgcmVzdWx0TGlzdCQ6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8b2JqZWN0Pj47XG5cbiAgcHJpdmF0ZSBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGRhdGFTb3VyY2VTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxvYmplY3RbXT4oW10pO1xuICBwcml2YXRlIGRhdGFTdGF0c1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFTb3VyY2VTdGF0cz4oe1xuICAgIHNpemU6IDAsXG4gICAgZmlsdGVyZWRTaXplOiAwLFxuICAgIGN1cnJlbnRQYWdlOiAwLFxuICAgIGN1cnJlbnRQYWdlU2l6ZTogMCxcbiAgICBmaXJzdFBhZ2VTaXplOiAwXG4gIH0pO1xuICBwcml2YXRlIGRhdGFTZWxlY3Rpb25TdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHtcbiAgICBmaWx0ZXJlZERhdGFJZHM6IFtdXG4gIH0pO1xuICBwcml2YXRlIHJlc3VsdExpc3RTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SVJlc3VsdExpc3Q8b2JqZWN0Pj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmxvYWRpbmckID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmRhdGEkID0gdGhpcy5kYXRhU291cmNlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnN0YXRzJCA9IHRoaXMuZGF0YVN0YXRzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnNlbGVjdGlvbiQgPSB0aGlzLmRhdGFTZWxlY3Rpb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMucmVzdWx0TGlzdCQgPSB0aGlzLnJlc3VsdExpc3RTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxvYmplY3RbXT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEkO1xuICB9XG5cbiAgZGlzY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkaW5nU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGF0YVNvdXJjZVN1YmplY3QuY29tcGxldGUoKTtcbiAgICB0aGlzLmRhdGFTdGF0c1N1YmplY3QuY29tcGxldGUoKTtcbiAgICB0aGlzLmRhdGFTZWxlY3Rpb25TdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBsb2FkRGF0YSh7XG4gICAgcm93cyxcbiAgICBjb2x1bW5zLFxuICAgIHBhZ2luYXRpb24sXG4gICAgc2VhcmNoVGV4dCxcbiAgICBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrLFxuICAgIHNlbGVjdGFibGUsXG4gICAgc2VsZWN0aW9uUHJpbWFyeUtleSxcbiAgICBpbmZpbml0ZVNjcm9sbCxcbiAgICByZWxvYWQgPSBmYWxzZVxuICB9KSB7XG4gICAgY29uc3QgY2xpZW50U2lkZURhdGEkID0gdGhpcy50b09ic2VydmFibGUocm93cykucGlwZShcbiAgICAgIG1hcChpbml0aWFsRGF0YSA9PiB7XG4gICAgICAgIGxldCBmaWx0ZXJlZFNpemUgPSAwO1xuICAgICAgICBsZXQgZmlsdGVyZWREYXRhSWRzID0gW107XG5cbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWREYXRhID0gZmxvdyhcbiAgICAgICAgICBkYXRhID0+IHRoaXMuZG9DbGllbnRTaWRlU2VhcmNoKHsgZGF0YSwgY29sdW1ucywgc2VhcmNoVGV4dCB9KSxcbiAgICAgICAgICBkYXRhID0+IHRoaXMuZG9DbGllbnRTaWRlRmlsdGVyaW5nKHsgZGF0YSwgY29sdW1ucyB9KSxcbiAgICAgICAgICBkYXRhID0+IHRoaXMuZG9DbGllbnRTaWRlU29ydGluZyh7IGRhdGEsIGNvbHVtbnMgfSksXG4gICAgICAgICAgZGF0YSA9PiB7XG4gICAgICAgICAgICBmaWx0ZXJlZFNpemUgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YUlkcyA9IHNlbGVjdGFibGVcbiAgICAgICAgICAgICAgPyBkYXRhLm1hcChpdGVtID0+IGl0ZW1bc2VsZWN0aW9uUHJpbWFyeUtleV0pXG4gICAgICAgICAgICAgIDogZmlsdGVyZWREYXRhSWRzO1xuXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRhdGEgPT4gdGhpcy5kb0NsaWVudFNpZGVQYWdpbmF0aW9uKHsgZGF0YSwgcGFnaW5hdGlvbiB9KVxuICAgICAgICApKGluaXRpYWxEYXRhKTtcblxuICAgICAgICB0aGlzLmRhdGFTdGF0c1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgc2l6ZTogaW5pdGlhbERhdGEubGVuZ3RoLFxuICAgICAgICAgIGZpbHRlcmVkU2l6ZSxcbiAgICAgICAgICBjdXJyZW50UGFnZTogcGFnaW5hdGlvbi5jdXJyZW50UGFnZSxcbiAgICAgICAgICBjdXJyZW50UGFnZVNpemU6IHRyYW5zZm9ybWVkRGF0YS5sZW5ndGgsXG4gICAgICAgICAgZmlyc3RQYWdlU2l6ZTogcGFnaW5hdGlvbi5wYWdlU2l6ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhU2VsZWN0aW9uU3ViamVjdC5uZXh0KHsgZmlsdGVyZWREYXRhSWRzIH0pO1xuXG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1lZERhdGE7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBzZXJ2ZXJTaWRlRGF0YSQgPSBkZWZlcigoKSA9PlxuICAgICAgdGhpcy50b09ic2VydmFibGUoXG4gICAgICAgIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2soe1xuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgc2VhcmNoVGV4dCxcbiAgICAgICAgICBwYWdpbmF0aW9uLFxuICAgICAgICAgIHNlbGVjdGlvbjogeyBlbmFibGVkOiBzZWxlY3RhYmxlLCBwcmltYXJ5S2V5OiBzZWxlY3Rpb25QcmltYXJ5S2V5IH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHJlc3VsdDogU2VydmVyU2lkZURhdGFSZXN1bHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBwYWdpbmcsIHNpemUsIGZpbHRlcmVkU2l6ZSwgZmlsdGVyZWREYXRhSWRzIH0gPSByZXN1bHQ7XG5cbiAgICAgICAgdGhpcy5kYXRhU3RhdHNTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgIHNpemUsXG4gICAgICAgICAgZmlsdGVyZWRTaXplLFxuICAgICAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmcuY3VycmVudFBhZ2UsXG4gICAgICAgICAgY3VycmVudFBhZ2VTaXplOiBkYXRhLmxlbmd0aCxcbiAgICAgICAgICBuZXh0UGFnZTogcGFnaW5nLm5leHRQYWdlLFxuICAgICAgICAgIGZpcnN0UGFnZVNpemU6IHBhZ2luZy5wYWdlU2l6ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kYXRhU2VsZWN0aW9uU3ViamVjdC5uZXh0KHsgZmlsdGVyZWREYXRhSWRzOiBmaWx0ZXJlZERhdGFJZHMgfHwgW10gfSk7XG4gICAgICAgIHRoaXMucmVzdWx0TGlzdFN1YmplY3QubmV4dChyZXN1bHQpO1xuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgZGF0YSQgPSB0eXBlb2Ygc2VydmVyU2lkZURhdGFDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyA/IHNlcnZlclNpZGVEYXRhJCA6IGNsaWVudFNpZGVEYXRhJDtcblxuICAgIG9mKFtdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSkpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gZGF0YSQpLFxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5kYXRhU3RhdHNTdWJqZWN0Lm5leHQoe1xuICAgICAgICAgICAgc2l6ZTogMCxcbiAgICAgICAgICAgIGZpbHRlcmVkU2l6ZTogMCxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiAwLFxuICAgICAgICAgICAgY3VycmVudFBhZ2VTaXplOiAwLFxuICAgICAgICAgICAgZmlyc3RQYWdlU2l6ZTogMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZGF0YVNlbGVjdGlvblN1YmplY3QubmV4dCh7IGZpbHRlcmVkRGF0YUlkczogW10gfSk7XG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPVxuICAgICAgICAgIGluZmluaXRlU2Nyb2xsICYmICFyZWxvYWQgPyBbLi4udGhpcy5kYXRhU291cmNlU3ViamVjdC52YWx1ZSwgLi4ucmVzdWx0XSA6IHJlc3VsdDtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlU3ViamVjdC5uZXh0KGRhdGEpO1xuICAgICAgfSk7XG4gIH1cblxuICByZXNvbHZlVmFsdWUoeCwgcGF0aCkge1xuICAgIHJldHVybiBnZXQoeCwgcGF0aCk7XG4gIH1cblxuICByZXNvbHZlRnVuY3Rpb24oeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJyA/IHgoKSA6IHg7XG4gIH1cblxuICBub3JtYWxpemVOaWwoeCkge1xuICAgIHJldHVybiBpc05pbCh4KSA/ICcnIDogeDtcbiAgfVxuXG4gIHByaXZhdGUgZG9DbGllbnRTaWRlRmlsdGVyaW5nKHsgZGF0YSwgY29sdW1ucyB9KSB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChyZXN1bHQsIGNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgeyBmaWx0ZXJQcmVkaWNhdGUgfSA9IGNvbHVtbjtcblxuICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJQcmVkaWNhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRvQ2xpZW50U2lkZVNlYXJjaCh7XG4gICAgICAgICAgZGF0YTogcmVzdWx0LFxuICAgICAgICAgIGNvbHVtbnM6IFtjb2x1bW5dLFxuICAgICAgICAgIHNlYXJjaFRleHQ6IGZpbHRlclByZWRpY2F0ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJQcmVkaWNhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5maWx0ZXIoaXRlbSA9PiBmaWx0ZXJQcmVkaWNhdGUoaXRlbSwgY29sdW1uLnBhdGgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LCBkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgZG9DbGllbnRTaWRlU2VhcmNoKHsgZGF0YSwgY29sdW1ucywgc2VhcmNoVGV4dCB9KSB7XG4gICAgY29uc3QgcHJvcFBhdGhzID0gY29sdW1ucy5tYXAoKHsgcGF0aCB9KSA9PiBwYXRoKS5maWx0ZXIoY29sdW1uID0+ICFpc05pbChjb2x1bW4pKTtcblxuICAgIGNvbnN0IHJlZ2V4U2VhcmNoID0gdGhpcy5jcmVhdGVSZWdleFNlYXJjaChzZWFyY2hUZXh0KTtcblxuICAgIHJldHVybiBkYXRhLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGNvbnN0IGl0ZW1XaXRoUmVzb2x2ZWRWYWx1ZXMgPSBmbG93KFxuICAgICAgICB4ID0+IHBpY2soeCwgcHJvcFBhdGhzKSxcbiAgICAgICAgeCA9PiBtYXBWYWx1ZXMoeCwgdGhpcy5yZXNvbHZlRnVuY3Rpb24pLFxuICAgICAgICB4ID0+IG9taXRCeSh4LCBpc05pbClcbiAgICAgICkoaXRlbSk7XG5cbiAgICAgIGNvbnN0IGNlbGxWYWx1ZXMgPSBPYmplY3QudmFsdWVzKGl0ZW1XaXRoUmVzb2x2ZWRWYWx1ZXMpO1xuXG4gICAgICByZXR1cm4gY2VsbFZhbHVlcy5zb21lKGNlbGxWYWx1ZSA9PiByZWdleFNlYXJjaC50ZXN0KGNlbGxWYWx1ZS50b1N0cmluZygpKSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRvQ2xpZW50U2lkZVNvcnRpbmcoeyBkYXRhLCBjb2x1bW5zIH0pIHtcbiAgICBjb25zdCBhY3RpdmVzOiBDb2x1bW5bXSA9IGNvbHVtbnMuZmlsdGVyKCh7IHNvcnRPcmRlciB9OiBDb2x1bW4pID0+ICEhc29ydE9yZGVyKTtcblxuICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IHtcbiAgICAgIHBhdGhzOiBhY3RpdmVzLm1hcCgoeyBwYXRoIH0pID0+IHBhdGgpLFxuICAgICAgb3JkZXJzOiBhY3RpdmVzLm1hcCgoeyBzb3J0T3JkZXIgfSkgPT4gc29ydE9yZGVyKVxuICAgIH07XG5cbiAgICByZXR1cm4gb3JkZXJCeShkYXRhLCBzb3J0aW5nU3RhdGUucGF0aHMsIHNvcnRpbmdTdGF0ZS5vcmRlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb0NsaWVudFNpZGVQYWdpbmF0aW9uKHsgZGF0YSwgcGFnaW5hdGlvbiB9KSB7XG4gICAgcmV0dXJuIHBhZ2luYXRpb25cbiAgICAgID8gZ2V0KGNodW5rKGRhdGEsIHBhZ2luYXRpb24ucGFnZVNpemUpLCBwYWdpbmF0aW9uLmN1cnJlbnRQYWdlIC0gMSwgW10pXG4gICAgICA6IGRhdGE7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlZ2V4U2VhcmNoKGZpbHRlclZhbHVlKSB7XG4gICAgcmV0dXJuIFJlZ0V4cChlc2NhcGVSZWdFeHBQYXR0ZXJuKGZpbHRlclZhbHVlKSwgJ2knKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9PYnNlcnZhYmxlKHgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBpc09ic2VydmFibGUoeCkgPyB4IDogeCBpbnN0YW5jZW9mIFByb21pc2UgPyBmcm9tKHgpIDogb2YoeCk7XG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHN0cmluZyBwYXR0ZXJuIFJlZ2V4IHBhdHRlcm4uXG4gKiBAcmV0dXJuIHN0cmluZyBUaGUgZXNjYXBlZCByZWdleC5cbiAqIEBzZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzM1NjE3MTEvMjAxMzg5MVxuICovXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHBQYXR0ZXJuKHBhdHRlcm4gPSAnJykge1xuICByZXR1cm4gcGF0dGVybi5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufVxuIl19
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1kYXRhLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BjOHkvbmd4LWNvbXBvbmVudHMvIiwic291cmNlcyI6WyJjb3JlL2RhdGEtZ3JpZC9ncmlkLWRhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczRTtJQXFCRTtRQWRRLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDcEQsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFDdEQscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQWtCO1lBQzlELElBQUksRUFBRSxDQUFDO1lBQ1AsWUFBWSxFQUFFLENBQUM7WUFDZixXQUFXLEVBQUUsQ0FBQztZQUNkLGVBQWUsRUFBRSxDQUFDO1lBQ2xCLGFBQWEsRUFBRSxDQUFDO1NBQ2pCLENBQUMsQ0FBQztRQUNLLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFNO1lBQ3RELGVBQWUsRUFBRSxFQUFFO1NBQ3BCLENBQUMsQ0FBQztRQUNLLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBRzdELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FB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QU8sT0FBQSxTQUFTO1lBQVQsQ0FBUyxDQUFDO1NBQ2xELENBQUM7UUFFRixPQUFPLE9BQU8sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVPLCtDQUFzQixHQUE5QixVQUErQixFQUFvQjtZQUFsQixjQUFJLEVBQUUsMEJBQVU7UUFDL0MsT0FBTyxVQUFVO1lBQ2YsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdkUsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUM7SUFFTywwQ0FBaUIsR0FBekIsVUFBMEIsV0FBVztRQUNuQyxPQUFPLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRU8scUNBQVksR0FBcEIsVUFBcUIsQ0FBQztRQUNwQixPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQ0gscUJBQUM7QUFBRCxDQUFDLEFBcE5ELElBb05DOztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FBQyxPQUFZO0lBQVosd0JBQUEsRUFBQSxZQUFZO0lBQ3ZDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sbGVjdGlvblZpZXdlciwgRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgeyBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IGNodW5rLCBmbG93LCBnZXQsIGlzTmlsLCBtYXBWYWx1ZXMsIG9taXRCeSwgb3JkZXJCeSwgcGljayB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlZmVyLCBmcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbHVtbiwgRGF0YVNvdXJjZVN0YXRzLCBTZXJ2ZXJTaWRlRGF0YVJlc3VsdCB9IGZyb20gJy4vZGF0YS1ncmlkLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIEdyaWREYXRhU291cmNlIGltcGxlbWVudHMgRGF0YVNvdXJjZTxvYmplY3Q+IHtcbiAgbG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGRhdGEkOiBPYnNlcnZhYmxlPG9iamVjdFtdPjtcbiAgc3RhdHMkOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VTdGF0cz47XG4gIHNlbGVjdGlvbiQ6IE9ic2VydmFibGU8YW55PjtcbiAgcmVzdWx0TGlzdCQ6IE9ic2VydmFibGU8SVJlc3VsdExpc3Q8b2JqZWN0Pj47XG5cbiAgcHJpdmF0ZSBsb2FkaW5nU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgZGF0YVNvdXJjZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG9iamVjdFtdPihbXSk7XG4gIHByaXZhdGUgZGF0YVN0YXRzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVNvdXJjZVN0YXRzPih7XG4gICAgc2l6ZTogMCxcbiAgICBmaWx0ZXJlZFNpemU6IDAsXG4gICAgY3VycmVudFBhZ2U6IDAsXG4gICAgY3VycmVudFBhZ2VTaXplOiAwLFxuICAgIGZpcnN0UGFnZVNpemU6IDBcbiAgfSk7XG4gIHByaXZhdGUgZGF0YVNlbGVjdGlvblN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe1xuICAgIGZpbHRlcmVkRGF0YUlkczogW11cbiAgfSk7XG4gIHByaXZhdGUgcmVzdWx0TGlzdFN1YmplY3QgPSBuZXcgU3ViamVjdDxJUmVzdWx0TGlzdDxvYmplY3Q+PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubG9hZGluZyQgPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZGF0YSQgPSB0aGlzLmRhdGFTb3VyY2VTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc3RhdHMkID0gdGhpcy5kYXRhU3RhdHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuc2VsZWN0aW9uJCA9IHRoaXMuZGF0YVNlbGVjdGlvblN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5yZXN1bHRMaXN0JCA9IHRoaXMucmVzdWx0TGlzdFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiBPYnNlcnZhYmxlPG9iamVjdFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YSQ7XG4gIH1cblxuICBkaXNjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmdTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5kYXRhU291cmNlU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGF0YVN0YXRzU3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZGF0YVNlbGVjdGlvblN1YmplY3QuY29tcGxldGUoKTtcbiAgfVxuXG4gIGxvYWREYXRhKHtcbiAgICByb3dzLFxuICAgIGNvbHVtbnMsXG4gICAgcGFnaW5hdGlvbixcbiAgICBzZWFyY2hUZXh0LFxuICAgIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2ssXG4gICAgc2VsZWN0YWJsZSxcbiAgICBzZWxlY3Rpb25QcmltYXJ5S2V5LFxuICAgIGluZmluaXRlU2Nyb2xsLFxuICAgIHJlbG9hZCA9IGZhbHNlXG4gIH0pIHtcbiAgICBjb25zdCBjbGllbnRTaWRlRGF0YSQgPSB0aGlzLnRvT2JzZXJ2YWJsZShyb3dzKS5waXBlKFxuICAgICAgbWFwKGluaXRpYWxEYXRhID0+IHtcbiAgICAgICAgbGV0IGZpbHRlcmVkU2l6ZSA9IDA7XG4gICAgICAgIGxldCBmaWx0ZXJlZERhdGFJZHMgPSBbXTtcblxuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZERhdGEgPSBmbG93KFxuICAgICAgICAgIGRhdGEgPT4gdGhpcy5kb0NsaWVudFNpZGVTZWFyY2goeyBkYXRhLCBjb2x1bW5zLCBzZWFyY2hUZXh0IH0pLFxuICAgICAgICAgIGRhdGEgPT4gdGhpcy5kb0NsaWVudFNpZGVGaWx0ZXJpbmcoeyBkYXRhLCBjb2x1bW5zIH0pLFxuICAgICAgICAgIGRhdGEgPT4gdGhpcy5kb0NsaWVudFNpZGVTb3J0aW5nKHsgZGF0YSwgY29sdW1ucyB9KSxcbiAgICAgICAgICBkYXRhID0+IHtcbiAgICAgICAgICAgIGZpbHRlcmVkU2l6ZSA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgZmlsdGVyZWREYXRhSWRzID0gc2VsZWN0YWJsZVxuICAgICAgICAgICAgICA/IGRhdGEubWFwKGl0ZW0gPT4gaXRlbVtzZWxlY3Rpb25QcmltYXJ5S2V5XSlcbiAgICAgICAgICAgICAgOiBmaWx0ZXJlZERhdGFJZHM7XG5cbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZGF0YSA9PiB0aGlzLmRvQ2xpZW50U2lkZVBhZ2luYXRpb24oeyBkYXRhLCBwYWdpbmF0aW9uIH0pXG4gICAgICAgICkoaW5pdGlhbERhdGEpO1xuXG4gICAgICAgIHRoaXMuZGF0YVN0YXRzU3ViamVjdC5uZXh0KHtcbiAgICAgICAgICBzaXplOiBpbml0aWFsRGF0YS5sZW5ndGgsXG4gICAgICAgICAgZmlsdGVyZWRTaXplLFxuICAgICAgICAgIGN1cnJlbnRQYWdlOiBwYWdpbmF0aW9uLmN1cnJlbnRQYWdlLFxuICAgICAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdHJhbnNmb3JtZWREYXRhLmxlbmd0aCxcbiAgICAgICAgICBmaXJzdFBhZ2VTaXplOiBwYWdpbmF0aW9uLnBhZ2VTaXplXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGFTZWxlY3Rpb25TdWJqZWN0Lm5leHQoeyBmaWx0ZXJlZERhdGFJZHMgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkRGF0YTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHNlcnZlclNpZGVEYXRhJCA9IGRlZmVyKCgpID0+XG4gICAgICB0aGlzLnRvT2JzZXJ2YWJsZShcbiAgICAgICAgc2VydmVyU2lkZURhdGFDYWxsYmFjayh7XG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBzZWFyY2hUZXh0LFxuICAgICAgICAgIHBhZ2luYXRpb24sXG4gICAgICAgICAgc2VsZWN0aW9uOiB7IGVuYWJsZWQ6IHNlbGVjdGFibGUsIHByaW1hcnlLZXk6IHNlbGVjdGlvblByaW1hcnlLZXkgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICkucGlwZShcbiAgICAgIG1hcCgocmVzdWx0OiBTZXJ2ZXJTaWRlRGF0YVJlc3VsdCkgPT4ge1xuICAgICAgICBjb25zdCB7IGRhdGEsIHBhZ2luZywgc2l6ZSwgZmlsdGVyZWRTaXplLCBmaWx0ZXJlZERhdGFJZHMgfSA9IHJlc3VsdDtcblxuICAgICAgICB0aGlzLmRhdGFTdGF0c1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgc2l6ZSxcbiAgICAgICAgICBmaWx0ZXJlZFNpemUsXG4gICAgICAgICAgY3VycmVudFBhZ2U6IHBhZ2luZy5jdXJyZW50UGFnZSxcbiAgICAgICAgICBjdXJyZW50UGFnZVNpemU6IGRhdGEubGVuZ3RoLFxuICAgICAgICAgIG5leHRQYWdlOiBwYWdpbmcubmV4dFBhZ2UsXG4gICAgICAgICAgZmlyc3RQYWdlU2l6ZTogcGFnaW5nLnBhZ2VTaXplXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRhdGFTZWxlY3Rpb25TdWJqZWN0Lm5leHQoeyBmaWx0ZXJlZERhdGFJZHM6IGZpbHRlcmVkRGF0YUlkcyB8fCBbXSB9KTtcbiAgICAgICAgdGhpcy5yZXN1bHRMaXN0U3ViamVjdC5uZXh0KHJlc3VsdCk7XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBkYXRhJCA9IHR5cGVvZiBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gc2VydmVyU2lkZURhdGEkIDogY2xpZW50U2lkZURhdGEkO1xuXG4gICAgb2YoW10pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHRoaXMubG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBkYXRhJCksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFTdGF0c1N1YmplY3QubmV4dCh7XG4gICAgICAgICAgICBzaXplOiAwLFxuICAgICAgICAgICAgZmlsdGVyZWRTaXplOiAwLFxuICAgICAgICAgICAgY3VycmVudFBhZ2U6IDAsXG4gICAgICAgICAgICBjdXJyZW50UGFnZVNpemU6IDAsXG4gICAgICAgICAgICBmaXJzdFBhZ2VTaXplOiAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5kYXRhU2VsZWN0aW9uU3ViamVjdC5uZXh0KHsgZmlsdGVyZWREYXRhSWRzOiBbXSB9KTtcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5sb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgZGF0YSA9XG4gICAgICAgICAgaW5maW5pdGVTY3JvbGwgJiYgIXJlbG9hZCA/IFsuLi50aGlzLmRhdGFTb3VyY2VTdWJqZWN0LnZhbHVlLCAuLi5yZXN1bHRdIDogcmVzdWx0O1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VTdWJqZWN0Lm5leHQoZGF0YSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHJlc29sdmVWYWx1ZSh4LCBwYXRoKSB7XG4gICAgcmV0dXJuIGdldCh4LCBwYXRoKTtcbiAgfVxuXG4gIHJlc29sdmVGdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nID8geCgpIDogeDtcbiAgfVxuXG4gIG5vcm1hbGl6ZU5pbCh4KSB7XG4gICAgcmV0dXJuIGlzTmlsKHgpID8gJycgOiB4O1xuICB9XG5cbiAgcHJpdmF0ZSBkb0NsaWVudFNpZGVGaWx0ZXJpbmcoeyBkYXRhLCBjb2x1bW5zIH0pIHtcbiAgICByZXR1cm4gY29sdW1ucy5yZWR1Y2UoKHJlc3VsdCwgY29sdW1uKSA9PiB7XG4gICAgICBjb25zdCB7IGZpbHRlclByZWRpY2F0ZSB9ID0gY29sdW1uO1xuXG4gICAgICBpZiAodHlwZW9mIGZpbHRlclByZWRpY2F0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9DbGllbnRTaWRlU2VhcmNoKHtcbiAgICAgICAgICBkYXRhOiByZXN1bHQsXG4gICAgICAgICAgY29sdW1uczogW2NvbHVtbl0sXG4gICAgICAgICAgc2VhcmNoVGV4dDogZmlsdGVyUHJlZGljYXRlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZpbHRlclByZWRpY2F0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gcmVzdWx0LmZpbHRlcihpdGVtID0+IGZpbHRlclByZWRpY2F0ZShpdGVtLCBjb2x1bW4ucGF0aCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIGRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBkb0NsaWVudFNpZGVTZWFyY2goeyBkYXRhLCBjb2x1bW5zLCBzZWFyY2hUZXh0IH0pIHtcbiAgICBjb25zdCBwcm9wUGF0aHMgPSBjb2x1bW5zLm1hcCgoeyBwYXRoIH0pID0+IHBhdGgpLmZpbHRlcihjb2x1bW4gPT4gIWlzTmlsKGNvbHVtbikpO1xuXG4gICAgY29uc3QgcmVnZXhTZWFyY2ggPSB0aGlzLmNyZWF0ZVJlZ2V4U2VhcmNoKHNlYXJjaFRleHQpO1xuXG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgY29uc3QgaXRlbVdpdGhSZXNvbHZlZFZhbHVlcyA9IGZsb3coXG4gICAgICAgIHggPT4gcGljayh4LCBwcm9wUGF0aHMpLFxuICAgICAgICB4ID0+IG1hcFZhbHVlcyh4LCB0aGlzLnJlc29sdmVGdW5jdGlvbiksXG4gICAgICAgIHggPT4gb21pdEJ5KHgsIGlzTmlsKVxuICAgICAgKShpdGVtKTtcblxuICAgICAgY29uc3QgY2VsbFZhbHVlcyA9IE9iamVjdC52YWx1ZXMoaXRlbVdpdGhSZXNvbHZlZFZhbHVlcyk7XG5cbiAgICAgIHJldHVybiBjZWxsVmFsdWVzLnNvbWUoY2VsbFZhbHVlID0+IHJlZ2V4U2VhcmNoLnRlc3QoY2VsbFZhbHVlLnRvU3RyaW5nKCkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZG9DbGllbnRTaWRlU29ydGluZyh7IGRhdGEsIGNvbHVtbnMgfSkge1xuICAgIGNvbnN0IGFjdGl2ZXM6IENvbHVtbltdID0gY29sdW1ucy5maWx0ZXIoKHsgc29ydE9yZGVyIH06IENvbHVtbikgPT4gISFzb3J0T3JkZXIpO1xuXG4gICAgY29uc3Qgc29ydGluZ1N0YXRlID0ge1xuICAgICAgcGF0aHM6IGFjdGl2ZXMubWFwKCh7IHBhdGggfSkgPT4gcGF0aCksXG4gICAgICBvcmRlcnM6IGFjdGl2ZXMubWFwKCh7IHNvcnRPcmRlciB9KSA9PiBzb3J0T3JkZXIpXG4gICAgfTtcblxuICAgIHJldHVybiBvcmRlckJ5KGRhdGEsIHNvcnRpbmdTdGF0ZS5wYXRocywgc29ydGluZ1N0YXRlLm9yZGVycyk7XG4gIH1cblxuICBwcml2YXRlIGRvQ2xpZW50U2lkZVBhZ2luYXRpb24oeyBkYXRhLCBwYWdpbmF0aW9uIH0pIHtcbiAgICByZXR1cm4gcGFnaW5hdGlvblxuICAgICAgPyBnZXQoY2h1bmsoZGF0YSwgcGFnaW5hdGlvbi5wYWdlU2l6ZSksIHBhZ2luYXRpb24uY3VycmVudFBhZ2UgLSAxLCBbXSlcbiAgICAgIDogZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVnZXhTZWFyY2goZmlsdGVyVmFsdWUpIHtcbiAgICByZXR1cm4gUmVnRXhwKGVzY2FwZVJlZ0V4cFBhdHRlcm4oZmlsdGVyVmFsdWUpLCAnaScpO1xuICB9XG5cbiAgcHJpdmF0ZSB0b09ic2VydmFibGUoeCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIGlzT2JzZXJ2YWJsZSh4KSA/IHggOiB4IGluc3RhbmNlb2YgUHJvbWlzZSA/IGZyb20oeCkgOiBvZih4KTtcbiAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gc3RyaW5nIHBhdHRlcm4gUmVnZXggcGF0dGVybi5cbiAqIEByZXR1cm4gc3RyaW5nIFRoZSBlc2NhcGVkIHJlZ2V4LlxuICogQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzU2MTcxMS8yMDEzODkxXG4gKi9cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cFBhdHRlcm4ocGF0dGVybiA9ICcnKSB7XG4gIHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XG59XG4iXX0=