@sd-angular/core 1.3.177 → 1.3.179

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.
@@ -946,7 +946,7 @@ _gridId = new WeakMap(), _optionChanges = new WeakMap(), _localItems = new WeakM
946
946
  SdTable.decorators = [
947
947
  { type: Component, args: [{
948
948
  selector: 'sd-table',
949
- template: "<ng-container *ngIf=\"configuration\">\r\n <sd-table-filter\r\n *ngIf=\"!tableOption.filter?.disabled && filterRegister\"\r\n [filterRegister]=\"filterRegister\"\r\n [filter]=\"tableOption?.filter\"\r\n [columns]=\"configuration.firstColumns\"\r\n [externalFilters]=\"tableOption?.filter?.externalFilters\"\r\n [filterDefs]=\"filterDefs\">\r\n </sd-table-filter>\r\n <ng-container *ngIf=\"items | sdGroup : tableOption; $implicit as groupedItems\">\r\n <div class=\"c-container\">\r\n <div class=\"c-loading\" *ngIf=\"isLoading\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n <ng-container>\r\n <div\r\n class=\"c-table\"\r\n sdScroll\r\n [ngStyle]=\"{\r\n 'max-height': tableOption?.style?.maxHeight,\r\n 'min-height': tableOption?.style?.minHeight\r\n }\">\r\n <table mat-table [dataSource]=\"groupedItems\" [trackBy]=\"trackBy\" matSort [matSortDisabled]=\"!tableOption.sort?.enable\" multiTemplateDataRows>\r\n <ng-container matColumnDef=\"sdSubInformation\" sticky>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"configuration.displayedColumns.length\">\r\n <ng-container *ngIf=\"sdSubInformation?.templateRef\">\r\n <ng-container *ngIf=\"tableOption?.expand?.always; else useExpandCollapse\">\r\n <ng-container *ngTemplateOutlet=\"sdSubInformation.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-template #useExpandCollapse>\r\n <div [@detailExpand]=\"item.isExpanded ? 'expanded' : 'collapsed'\">\r\n <ng-container *ngIf=\"item.isExpanded\">\r\n <ng-container *ngTemplateOutlet=\"sdSubInformation.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSubInformationAction\" stickyEnd>\r\n <th\r\n class=\"p-0\"\r\n mat-header-cell\r\n *matHeaderCellDef\r\n style=\"width: 1px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button\r\n *ngIf=\"!element.isExpanding && !tableOption?.expand?.always\"\r\n mat-icon-button\r\n aria-label=\"Expand & Collapse\"\r\n (click)=\"onExpand(element)\">\r\n <mat-icon *ngIf=\"!element.isExpanded\">expand_more</mat-icon>\r\n <mat-icon *ngIf=\"element.isExpanded\">expand_less</mat-icon>\r\n </button>\r\n <div *ngIf=\"element.isExpanding\" class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSelection\" sticky>\r\n <th\r\n class=\"text-center px-15\"\r\n mat-header-cell\r\n *matHeaderCellDef\r\n style=\"min-width: 50px; max-width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n <ng-container *ngIf=\"items | selectionVisibleSelectAll : tableOption?.selector | async\">\r\n <mat-checkbox\r\n *ngIf=\"!tableOption.selector?.single\"\r\n class=\"c-selection\"\r\n color=\"primary\"\r\n [(ngModel)]=\"isSelectAll\"\r\n (change)=\"onSelectAll()\">\r\n </mat-checkbox>\r\n </ng-container>\r\n </th>\r\n <td class=\"text-center px-15\" mat-cell *matCellDef=\"let item\" style=\"min-width: 50px; max-width: 50px\">\r\n <ng-container *ngIf=\"item | selectionVisible : tableOption?.selector\">\r\n <mat-checkbox\r\n class=\"c-selection\"\r\n color=\"primary\"\r\n [(ngModel)]=\"item.meta.selector.isSelected\"\r\n (change)=\"onSelect(item)\"\r\n [disabled]=\"selectedTableItems | selectionDisable : item : tableOption?.selector\">\r\n </mat-checkbox>\r\n </ng-container>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdCommand\">\r\n <th\r\n class=\"px-8 py-8\"\r\n mat-header-cell\r\n *matHeaderCellDef\r\n style=\"width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td class=\"px-8\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-command [commands]=\"tableOption.commands\" [item]=\"item\"></sd-desktop-command>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdGroup\">\r\n <th mat-header-cell *matHeaderCellDef class=\"px-8 py-8\" [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"!item?.sdGroup ? 1 : configuration.displayedColumns.length\">\r\n <div [innerHtml]=\"item?.sdGroup?.htmlTemplate | safeHtml\"></div>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container\r\n *ngFor=\"let column of configuration.firstColumns;\"\r\n [matColumnDef]=\"column.field\"\r\n [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"px-8 py-8 c-th\"\r\n [ngStyle]=\"{ 'min-width': column.width }\"\r\n [attr.rowspan]=\"configuration.multipleHeader && column.type !== 'children-col' ? 2 : 1\"\r\n [attr.colspan]=\"column.type === 'children-col' ? column.children?.length : 1\">\r\n <div>\r\n <div\r\n aria-hidden=\"true\"\r\n mat-sort-header\r\n [disabled]=\"!column.sortable || column.type === 'children-col'\"\r\n [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\"\r\n [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <sd-column-inline-filter\r\n *ngIf=\"!tableOption.filter?.disabled && columnOperator\"\r\n [value]=\"columnFilter[column.field]\"\r\n [(inlineOperator)]=\"columnOperator[column.field]\"\r\n [columnFilter]=\"columnFilter\"\r\n [cacheValues]=\"cacheValues\"\r\n [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\">\r\n </sd-column-inline-filter>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-0\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-cell\r\n class=\"d-block px-8\"\r\n *ngIf=\"!item?.sdGroup\"\r\n [value]=\"item[column.field]\"\r\n [column]=\"column\"\r\n [item]=\"item\"\r\n [cellDef]=\"cellDef\">\r\n </sd-desktop-cell>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"footerDef[column.field].templateRef; context: { items: items, column: column }\">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.secondColumns\" [matColumnDef]=\"column.field\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header class=\"c-th px-8\" [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div>\r\n <div\r\n [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\"\r\n [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <sd-column-inline-filter\r\n *ngIf=\"!tableOption.filter?.disabled && columnOperator\"\r\n [value]=\"columnFilter[column.field]\"\r\n [(inlineOperator)]=\"columnOperator[column.field]\"\r\n [columnFilter]=\"columnFilter\"\r\n [cacheValues]=\"cacheValues\"\r\n [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\">\r\n </sd-column-inline-filter>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-0\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-cell\r\n class=\"d-block px-8\"\r\n [value]=\"item[column.field]\"\r\n [column]=\"column\"\r\n [item]=\"item\"\r\n [cellDef]=\"cellDef\">\r\n </sd-desktop-cell>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"footerDef[column.field].templateRef; context: { items: items, column: column }\">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"configuration.firstHeaders; sticky: true\"></tr>\r\n <ng-container *ngIf=\"configuration.secondHeaders?.length\">\r\n <tr class=\"c-second-header\" mat-header-row *matHeaderRowDef=\"configuration.secondHeaders; sticky: true\"></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: configuration.displayedColumns\"\r\n matRipple\r\n class=\"c-row\"\r\n [class.selected]=\"row.meta.selector.isSelected\"></tr>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: ['sdSubInformation']\" class=\"c-detail-row\"></tr>\r\n <ng-container *ngIf=\"hasFooter && configuration.displayedFooters?.length\">\r\n <tr mat-footer-row *matFooterRowDef=\"configuration.displayedFooters; sticky: true\"></tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n </ng-container>\r\n <div class=\"c-paginator\">\r\n <div class=\"c-action\">\r\n <sd-button\r\n *ngIf=\"tableOption.reload?.visible\"\r\n class=\"mr-8\"\r\n title=\"T\u1EA3i l\u1EA1i\"\r\n icon=\"refresh\"\r\n size=\"sm\"\r\n (action)=\"reload()\"\r\n [disabled]=\"!items?.length\"\r\n type=\"link\">\r\n </sd-button>\r\n <ng-container *ngIf=\"tableOption.export?.visible && items?.length\">\r\n <ng-container *ngIf=\"isExporting; else unExporting\">\r\n <sd-button class=\"mr-10\" [loading]=\"isExporting\" [title]=\"exportTitle | sdTranslate\" icon=\"get_app\" size=\"sm\" type=\"link\">\r\n </sd-button>\r\n </ng-container>\r\n <ng-template #unExporting>\r\n <sd-button class=\"mr-10\" [title]=\"exportTitle | sdTranslate\" icon=\"get_app\" size=\"sm\" [matMenuTriggerFor]=\"menu\" type=\"link\">\r\n </sd-button>\r\n </ng-template>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"exportExcel()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> Xu\u1EA5t excel</span>\r\n </button>\r\n <button mat-menu-item (click)=\"exportCSV()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> Xu\u1EA5t CSV</span>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <sd-button\r\n *ngIf=\"popupConfiguration\"\r\n class=\"mr-8\"\r\n [title]=\"'Configure' | sdTranslate\"\r\n icon=\"settings\"\r\n size=\"sm\"\r\n (action)=\"popupConfiguration.open()\"\r\n type=\"link\">\r\n </sd-button>\r\n </div>\r\n <mat-paginator\r\n [class.d-none]=\"tableOption.paginate?.hidden\"\r\n [length]=\"total\"\r\n [pageSize]=\"tableOption.paginate?.pageSize\"\r\n [pageSizeOptions]=\"tableOption.paginate?.pages\"\r\n [showFirstLastButtons]=\"tableOption.paginate?.showFirstLastButtons\"></mat-paginator>\r\n </div>\r\n </div>\r\n <sd-table-quick-action [tableOption]=\"tableOption\" [selectedItems]=\"selectedTableItems\" (clear)=\"onClearSelection(groupedItems)\">\r\n </sd-table-quick-action>\r\n <sd-popup-configuration *ngIf=\"tableOption?.key && tableOption.config?.visible\" [tableOption]=\"tableOption\"> </sd-popup-configuration>\r\n </ng-container>\r\n</ng-container>\r\n",
949
+ template: "<ng-container *ngIf=\"configuration\">\r\n <sd-table-filter\r\n *ngIf=\"!tableOption.filter?.disabled && filterRegister\"\r\n [filterRegister]=\"filterRegister\"\r\n [filter]=\"tableOption?.filter\"\r\n [columns]=\"configuration.firstColumns\"\r\n [externalFilters]=\"tableOption?.filter?.externalFilters\"\r\n [filterDefs]=\"filterDefs\">\r\n </sd-table-filter>\r\n <ng-container *ngIf=\"items | sdGroup : tableOption; $implicit as groupedItems\">\r\n <div class=\"c-container\">\r\n <div class=\"c-loading\" *ngIf=\"isLoading\">\r\n <mat-spinner></mat-spinner>\r\n </div>\r\n <ng-container>\r\n <div\r\n class=\"c-table\"\r\n sdScroll\r\n [ngStyle]=\"{\r\n 'max-height': tableOption?.style?.maxHeight,\r\n 'min-height': tableOption?.style?.minHeight\r\n }\">\r\n <table mat-table [dataSource]=\"groupedItems\" [trackBy]=\"trackBy\" matSort [matSortDisabled]=\"!tableOption.sort?.enable\" multiTemplateDataRows>\r\n <ng-container matColumnDef=\"sdSubInformation\" sticky>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"configuration.displayedColumns.length\">\r\n <ng-container *ngIf=\"sdSubInformation?.templateRef\">\r\n <ng-container *ngIf=\"tableOption?.expand?.always; else useExpandCollapse\">\r\n <ng-container *ngTemplateOutlet=\"sdSubInformation.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-template #useExpandCollapse>\r\n <div [@detailExpand]=\"item.isExpanded ? 'expanded' : 'collapsed'\">\r\n <ng-container *ngIf=\"item.isExpanded\">\r\n <ng-container *ngTemplateOutlet=\"sdSubInformation.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSubInformationAction\" stickyEnd>\r\n <th\r\n class=\"p-0\"\r\n mat-header-cell\r\n *matHeaderCellDef\r\n style=\"width: 1px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button\r\n *ngIf=\"!element.isExpanding && !tableOption?.expand?.always\"\r\n mat-icon-button\r\n aria-label=\"Expand & Collapse\"\r\n (click)=\"onExpand(element)\">\r\n <mat-icon *ngIf=\"!element.isExpanded\">expand_more</mat-icon>\r\n <mat-icon *ngIf=\"element.isExpanded\">expand_less</mat-icon>\r\n </button>\r\n <div *ngIf=\"element.isExpanding\" class=\"lds-ring\">\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n <div></div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdSelection\" sticky>\r\n <th\r\n class=\"text-center px-15\"\r\n mat-header-cell\r\n *matHeaderCellDef\r\n style=\"min-width: 50px; max-width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\">\r\n <ng-container *ngIf=\"items | selectionVisibleSelectAll : tableOption?.selector | async\">\r\n <mat-checkbox\r\n *ngIf=\"!tableOption.selector?.single\"\r\n class=\"c-selection\"\r\n color=\"primary\"\r\n [(ngModel)]=\"isSelectAll\"\r\n (change)=\"onSelectAll()\">\r\n </mat-checkbox>\r\n </ng-container>\r\n </th>\r\n <td class=\"text-center px-15\" mat-cell *matCellDef=\"let item\" style=\"min-width: 50px; max-width: 50px\">\r\n <ng-container *ngIf=\"item | selectionVisible : tableOption?.selector\">\r\n <mat-checkbox\r\n class=\"c-selection\"\r\n color=\"primary\"\r\n [(ngModel)]=\"item.meta.selector.isSelected\"\r\n (change)=\"onSelect(item)\"\r\n [disabled]=\"selectedTableItems | selectionDisable : item : tableOption?.selector\">\r\n </mat-checkbox>\r\n </ng-container>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdCommand\">\r\n <th\r\n class=\"px-8 py-8\"\r\n mat-header-cell\r\n *matHeaderCellDef\r\n style=\"width: 50px\"\r\n [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td class=\"px-8\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-command [commands]=\"tableOption.commands\" [item]=\"item\"></sd-desktop-command>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"sdGroup\">\r\n <th mat-header-cell *matHeaderCellDef class=\"px-8 py-8\" [attr.rowspan]=\"configuration.multipleHeader ? 2 : 1\"></th>\r\n <td class=\"p-0\" mat-cell *matCellDef=\"let item\" [attr.colspan]=\"!item?.sdGroup ? 1 : configuration.displayedColumns.length\">\r\n <div [innerHtml]=\"item?.sdGroup?.htmlTemplate | safeHtml\"></div>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef></td>\r\n </ng-container>\r\n <ng-container\r\n *ngFor=\"let column of configuration.firstColumns;\"\r\n [matColumnDef]=\"column.field\"\r\n [sticky]=\"configuration.fixedColumn[column.field]\">\r\n <th\r\n mat-header-cell\r\n *matHeaderCellDef\r\n class=\"px-8 py-8 c-th\"\r\n [ngStyle]=\"{ 'min-width': column.width }\"\r\n [attr.rowspan]=\"configuration.multipleHeader && column.type !== 'children-col' ? 2 : 1\"\r\n [attr.colspan]=\"column.type === 'children-col' ? column.children?.length : 1\">\r\n <div>\r\n <div\r\n aria-hidden=\"true\"\r\n mat-sort-header\r\n [disabled]=\"!column.sortable || column.type === 'children-col'\"\r\n [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\"\r\n [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <sd-column-inline-filter\r\n *ngIf=\"!tableOption.filter?.disabled && columnOperator\"\r\n [value]=\"columnFilter[column.field]\"\r\n [(inlineOperator)]=\"columnOperator[column.field]\"\r\n [columnFilter]=\"columnFilter\"\r\n [cacheValues]=\"cacheValues\"\r\n [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\">\r\n </sd-column-inline-filter>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-0\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-cell\r\n class=\"d-block px-8\"\r\n *ngIf=\"!item?.sdGroup\"\r\n [value]=\"item[column.field]\"\r\n [column]=\"column\"\r\n [item]=\"item\"\r\n [cellDef]=\"cellDef\">\r\n </sd-desktop-cell>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"footerDef[column.field].templateRef; context: { items: items, column: column }\">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let column of configuration.secondColumns\" [matColumnDef]=\"column.field\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header class=\"c-th px-8\" [ngStyle]=\"{ 'min-width': column.width }\">\r\n <div>\r\n <div\r\n [class.text-right]=\"column.align === 'right' || (!column.align && column.type === 'number')\"\r\n [class.text-center]=\"column.align === 'center'\"\r\n [innerHTML]=\"column.titleHtml || column.title\"></div>\r\n <sd-column-inline-filter\r\n *ngIf=\"!tableOption.filter?.disabled && columnOperator\"\r\n [value]=\"columnFilter[column.field]\"\r\n [(inlineOperator)]=\"columnOperator[column.field]\"\r\n [columnFilter]=\"columnFilter\"\r\n [cacheValues]=\"cacheValues\"\r\n [column]=\"column\"\r\n (filterChange)=\"onFilterChange()\">\r\n </sd-column-inline-filter>\r\n </div>\r\n </th>\r\n <td class=\"c-td px-0\" mat-cell *matCellDef=\"let item\">\r\n <sd-desktop-cell\r\n class=\"d-block px-8\"\r\n [value]=\"item[column.field]\"\r\n [column]=\"column\"\r\n [item]=\"item\"\r\n [cellDef]=\"cellDef\">\r\n </sd-desktop-cell>\r\n </td>\r\n <td mat-footer-cell *matFooterCellDef>\r\n <ng-container *ngIf=\"footerDef[column.field]\">\r\n <ng-container *ngTemplateOutlet=\"footerDef[column.field].templateRef; context: { items: items, column: column }\">\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n <tr class=\"c-first-header\" mat-header-row *matHeaderRowDef=\"configuration.firstHeaders; sticky: true\"></tr>\r\n <ng-container *ngIf=\"configuration.secondHeaders?.length\">\r\n <tr class=\"c-second-header\" mat-header-row *matHeaderRowDef=\"configuration.secondHeaders; sticky: true\"></tr>\r\n </ng-container>\r\n <tr\r\n mat-row\r\n *matRowDef=\"let row; columns: configuration.displayedColumns\"\r\n matRipple\r\n class=\"c-row\"\r\n [class.selected]=\"row.meta.selector.isSelected\"></tr>\r\n\r\n <tr mat-row *matRowDef=\"let row; columns: ['sdSubInformation']\" class=\"c-detail-row\"></tr>\r\n <ng-container *ngIf=\"hasFooter && configuration.displayedFooters?.length\">\r\n <tr mat-footer-row *matFooterRowDef=\"configuration.displayedFooters; sticky: true\"></tr>\r\n </ng-container>\r\n </table>\r\n </div>\r\n </ng-container>\r\n <div class=\"c-paginator\">\r\n <div class=\"c-action\">\r\n <sd-button\r\n *ngIf=\"tableOption.reload?.visible\"\r\n class=\"mr-8\"\r\n title=\"T\u1EA3i l\u1EA1i\"\r\n icon=\"refresh\"\r\n size=\"sm\"\r\n (action)=\"reload()\"\r\n [disabled]=\"!items?.length\"\r\n type=\"link\">\r\n </sd-button>\r\n <ng-container *ngIf=\"tableOption.export?.visible && items?.length\">\r\n <ng-container *ngIf=\"isExporting; else unExporting\">\r\n <sd-button class=\"mr-10\" [loading]=\"isExporting\" [title]=\"exportTitle | sdTranslate\" icon=\"get_app\" size=\"sm\" type=\"link\">\r\n </sd-button>\r\n </ng-container>\r\n <ng-template #unExporting>\r\n <sd-button class=\"mr-10\" [title]=\"exportTitle | sdTranslate\" icon=\"get_app\" size=\"sm\" [matMenuTriggerFor]=\"menu\" type=\"link\">\r\n </sd-button>\r\n </ng-template>\r\n <mat-menu #menu=\"matMenu\">\r\n <button mat-menu-item (click)=\"exportExcel()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> Xu\u1EA5t excel</span>\r\n </button>\r\n <button mat-menu-item (click)=\"exportCSV()\" type=\"button\">\r\n <mat-icon fontSet=\"material-icons-outlined\">file_download</mat-icon>\r\n <span> Xu\u1EA5t CSV</span>\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <sd-button\r\n *ngIf=\"popupConfiguration\"\r\n class=\"mr-8\"\r\n [title]=\"'Configure' | sdTranslate\"\r\n icon=\"settings\"\r\n size=\"sm\"\r\n (action)=\"popupConfiguration.open()\"\r\n type=\"link\">\r\n </sd-button>\r\n </div>\r\n <mat-paginator\r\n [class.d-none]=\"tableOption.paginate?.hidden\"\r\n [length]=\"total\"\r\n [pageSize]=\"tableOption.paginate?.pageSize\"\r\n [pageSizeOptions]=\"tableOption.paginate?.pages\"\r\n [showFirstLastButtons]=\"tableOption.paginate?.showFirstLastButtons\"></mat-paginator>\r\n </div>\r\n </div>\r\n <sd-table-quick-action [tableOption]=\"tableOption\" [selectedTableItems]=\"selectedTableItems\" (clear)=\"onClearSelection(groupedItems)\">\r\n </sd-table-quick-action>\r\n <sd-popup-configuration *ngIf=\"tableOption?.key && tableOption.config?.visible\" [tableOption]=\"tableOption\"> </sd-popup-configuration>\r\n </ng-container>\r\n</ng-container>\r\n",
950
950
  changeDetection: ChangeDetectionStrategy.OnPush,
951
951
  animations: [
952
952
  trigger('detailExpand', [
@@ -979,4 +979,4 @@ SdTable.propDecorators = {
979
979
  sdFooterDefs: [{ type: ContentChildren, args: [SdMaterialFooterDefDirective,] }],
980
980
  sdFilterDefs: [{ type: ContentChildren, args: [SdMaterialFilterDefDirective,] }]
981
981
  };
982
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS90YWJsZS8iLCJzb3VyY2VzIjpbInNyYy9saWIvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUVULFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBR1QsWUFBWSxFQUNaLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBeUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2pGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFN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QUF1QjsyQkFNdkMsZUFBZSxTQUFDLDRCQUE0QjsyQkFPNUMsZUFBZSxTQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIEluamVjdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBTZFRhYmxlRmlsdGVyUmVnaXN0ZXIsIFNkVGFibGVGaWx0ZXJSZXF1ZXN0IH0gZnJvbSAnLi9zZXJ2aWNlcy90YWJsZS1maWx0ZXIvdGFibGUtZmlsdGVyLm1vZGVsJztcclxuaW1wb3J0IHsgU2RUYWJsZU9wdGlvbiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFRBQkxFX0NPTkZJRywgREVGQVVMVF9UQUJMRV9DT05GSUcsIElTZFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGlzT2JzZXJ2YWJsZSwgU3ViamVjdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTZE5vdGlmeVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcbmltcG9ydCB7IFNkRmlsdGVyT3BlcmF0b3IsIFNkVGFibGVDb2x1bW4gfSBmcm9tICcuL21vZGVscy90YWJsZS1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZFRhYmVsQ2VsbERlZkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zZC10YWJsZS1jZWxsLWRlZi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFNkVGFibGVGaWx0ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtZmlsdGVyL3RhYmxlLWZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NkLXRhYmxlLWZpbHRlci1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2RNYXRlcmlhbFN1YkluZm9ybWF0aW9uRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NkLXRhYmxlLWV4cGFuZC1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2RNYXRlcmlhbEZvb3RlckRlZkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zZC10YWJsZS1mb290ZXItZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkRXhwb3J0Q29sdW1uLCBTZEV4cG9ydFNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2V4cG9ydCc7XHJcbmltcG9ydCB7IFNkVGFibGVDb25maWd1cmF0aW9uUmVzdWx0IH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtb3B0aW9uLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNkVGFibGVDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGFibGUtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2RUYWJsZU9wdGlvbkV4cG9ydENvbHVtbiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLW9wdGlvbi1leHBvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBTZFF1aWNrQWN0aW9uIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9xdWljay1hY3Rpb24nO1xyXG5pbXBvcnQgeyBNYXBUb1NkVGFibGVJdGVtLCBTZFRhYmxlSXRlbSB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZFNjcm9sbERpcmVjdGl2ZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuaW1wb3J0IHsgU2RUYWJsZUZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RhYmxlLWZpbHRlci90YWJsZS1maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNkUG9wdXBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb21wb25lbnRzL3BvcHVwLWNvbmZpZ3VyYXRpb24vcG9wdXAtY29uZmlndXJhdGlvbi5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcclxuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMCcsIG1pbkhlaWdodDogJzAnLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXHJcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicsIHZpc2liaWxpdHk6ICd2aXNpYmxlJyB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkIDw9PiBjb2xsYXBzZWQnLCBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKSksXHJcbiAgICBdKSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RUYWJsZTxUID0gYW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFNkUG9wdXBDb25maWd1cmF0aW9uKSBwb3B1cENvbmZpZ3VyYXRpb246IFNkUG9wdXBDb25maWd1cmF0aW9uO1xyXG4gICNncmlkSWQgPSB1dWlkLnY0KCk7XHJcbiAgQFZpZXdDaGlsZChTZFNjcm9sbERpcmVjdGl2ZSkgc2RTY3JvbGw6IFNkU2Nyb2xsRGlyZWN0aXZlO1xyXG4gIGZpbHRlclJlZ2lzdGVyOiBTZFRhYmxlRmlsdGVyUmVnaXN0ZXI7XHJcbiAga2V5ID0gdXVpZC52NCgpO1xyXG4gIEBWaWV3Q2hpbGQoU2RRdWlja0FjdGlvbikgcXVpY2tBY3Rpb246IFNkUXVpY2tBY3Rpb247XHJcbiAgQFZpZXdDaGlsZChTZFRhYmxlRmlsdGVyKSB0YWJsZUZpbHRlcjogU2RUYWJsZUZpbHRlcjtcclxuICB0YWJsZU9wdGlvbjogU2RUYWJsZU9wdGlvbjxUPjtcclxuICBjb25maWd1cmF0aW9uOiBTZFRhYmxlQ29uZmlndXJhdGlvblJlc3VsdDtcclxuICBASW5wdXQoKSBzZXQgb3B0aW9uKG9wdGlvbjogU2RUYWJsZU9wdGlvbikge1xyXG4gICAgaWYgKG9wdGlvbikge1xyXG4gICAgICBvcHRpb24gPSB0aGlzLiNpbml0Q29uZmlndXJhdGlvbihvcHRpb24pO1xyXG4gICAgICB0aGlzLnRhYmxlT3B0aW9uID0gb3B0aW9uO1xyXG4gICAgICB0aGlzLiNsb2FkQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2UuaW5pdCh0aGlzLnRhYmxlT3B0aW9uKTtcclxuICAgICAgaWYgKHNldHRpbmcpIHtcclxuICAgICAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICAgICAgc2V0dGluZy5vYnNlcnZlci5waXBlKHN0YXJ0V2l0aChzZXR0aW5nLnN1YmplY3QuZ2V0VmFsdWUoKSkpLnN1YnNjcmliZShjb25maWd1cmF0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvblJlc3VsdCA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uU2VydmljZS5sb2FkQ29uZmlndXJhdGlvblJlc3VsdCh0aGlzLnRhYmxlT3B0aW9uLCBjb25maWd1cmF0aW9uKTtcclxuICAgICAgICAgICAgY29uc3QgZGlzcGxheUNvbHVtbnMgPSBjb25maWd1cmF0aW9uUmVzdWx0LmRpc3BsYXllZENvbHVtbnMgfHwgW107XHJcbiAgICAgICAgICAgIHRoaXMuI2xvYWRWYWx1ZXModGhpcy50YWJsZU9wdGlvbi5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gZGlzcGxheUNvbHVtbnMuaW5jbHVkZXMoY29sdW1uLmZpZWxkKSkpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25SZXN1bHQ7XHJcbiAgICAgICAgICAgICAgdGhpcy4jb3B0aW9uQ2hhbmdlcy5uZXh0KHRoaXMudGFibGVPcHRpb24pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmxvYWRDb25maWd1cmF0aW9uKHRoaXMudGFibGVPcHRpb24pO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25SZXN1bHQgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2UubG9hZENvbmZpZ3VyYXRpb25SZXN1bHQodGhpcy50YWJsZU9wdGlvbiwgY29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheUNvbHVtbnMgPSBjb25maWd1cmF0aW9uUmVzdWx0LmRpc3BsYXllZENvbHVtbnMgfHwgW107XHJcbiAgICAgICAgdGhpcy4jbG9hZFZhbHVlcyh0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBkaXNwbGF5Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4uZmllbGQpKSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uUmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy4jb3B0aW9uQ2hhbmdlcy5uZXh0KHRoaXMudGFibGVPcHRpb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gICNvcHRpb25DaGFuZ2VzID0gbmV3IFN1YmplY3Q8U2RUYWJsZU9wdGlvbj4oKTtcclxuXHJcbiAgI2xvY2FsSXRlbXM6IFNkVGFibGVJdGVtPFQ+W10gPSBbXTtcclxuICBpdGVtczogU2RUYWJsZUl0ZW08VD5bXSA9IFtdO1xyXG4gIHNlbGVjdGVkVGFibGVJdGVtczogU2RUYWJsZUl0ZW08VD5bXSA9IFtdO1xyXG4gIHRvdGFsOiBudW1iZXI7XHJcblxyXG4gIC8vIExvYWRpbmdcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgLy8gUGFnaW5hdGVcclxuICBpc0hpZGRlblBhZ2luYXRvciA9IGZhbHNlO1xyXG4gICNwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgc2V0IHBhZ2luYXRvcihwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgaWYgKHBhZ2luYXRvciAmJiB0aGlzLiNwYWdpbmF0b3IgIT09IHBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLiNwYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgcGFnaW5hdG9yLnBhZ2VcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KHtcclxuICAgICAgICAgICAgICAgIGZvcmNlOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU29ydGluZ1xyXG4gICNzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc2V0IHNvcnQoc29ydDogTWF0U29ydCkge1xyXG4gICAgaWYgKHNvcnQgJiYgdGhpcy4jc29ydCAhPT0gc29ydCkge1xyXG4gICAgICB0aGlzLiNzb3J0ID0gc29ydDtcclxuICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICBzb3J0LnNvcnRDaGFuZ2VcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KHtcclxuICAgICAgICAgICAgICAgIGZvcmNlOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU3ViIEluZm9ybWF0aW9uXHJcbiAgQENvbnRlbnRDaGlsZChTZE1hdGVyaWFsU3ViSW5mb3JtYXRpb25EZWZEaXJlY3RpdmUpXHJcbiAgc2RTdWJJbmZvcm1hdGlvbjogU2RNYXRlcmlhbFN1YkluZm9ybWF0aW9uRGVmRGlyZWN0aXZlO1xyXG5cclxuICAvLyBDZWxsIERlZlxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RUYWJlbENlbGxEZWZEaXJlY3RpdmUpIHNkQ2VsbERlZnMgPSBuZXcgUXVlcnlMaXN0PFNkVGFiZWxDZWxsRGVmRGlyZWN0aXZlPigpO1xyXG4gIGNlbGxEZWY6IHtcclxuICAgIFtjb2x1bW46IHN0cmluZ106IFNkVGFiZWxDZWxsRGVmRGlyZWN0aXZlO1xyXG4gIH0gPSB7fTtcclxuXHJcbiAgLy8gRm9vdGVyIERlZlxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RNYXRlcmlhbEZvb3RlckRlZkRpcmVjdGl2ZSkgc2RGb290ZXJEZWZzID0gbmV3IFF1ZXJ5TGlzdDxTZE1hdGVyaWFsRm9vdGVyRGVmRGlyZWN0aXZlPigpO1xyXG4gIGZvb3RlckRlZjoge1xyXG4gICAgW2NvbHVtbjogc3RyaW5nXTogU2RNYXRlcmlhbEZvb3RlckRlZkRpcmVjdGl2ZTtcclxuICB9ID0ge307XHJcbiAgaGFzRm9vdGVyID0gZmFsc2U7XHJcblxyXG4gIC8vIEZpbHRlciBEZWZcclxuICBAQ29udGVudENoaWxkcmVuKFNkTWF0ZXJpYWxGaWx0ZXJEZWZEaXJlY3RpdmUpIHNkRmlsdGVyRGVmcyA9IG5ldyBRdWVyeUxpc3Q8U2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZT4oKTtcclxuICBmaWx0ZXJEZWZzOiBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlW10gPSBbXTtcclxuXHJcbiAgLy8gRmlsdGVyXHJcbiAgY29sdW1uT3BlcmF0b3I6IFJlY29yZDxzdHJpbmcsIFNkRmlsdGVyT3BlcmF0b3I+ID0ge307XHJcbiAgY29sdW1uRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgLy8gU3ViY3JpcHRpb25cclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICNyZWxvYWQgPSBuZXcgU3ViamVjdDx7XHJcbiAgICBmb3JjZTogYm9vbGVhbjtcclxuICB9PigpO1xyXG4gIGlzRXhwb3J0aW5nID0gZmFsc2U7XHJcbiAgaXNTZWxlY3RBbGwgPSBmYWxzZTtcclxuICBleHBvcnRUaXRsZSA9ICdFeHBvcnQnO1xyXG4gICNsb2FkQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgY2FjaGVWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IHt9O1xyXG4gICNjYWNoZU9ialZhbHVlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoVEFCTEVfQ09ORklHKVxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIHB1YmxpYyB0YWJsZUNvbmZpZ3VyYXRpb246IElTZFRhYmxlQ29uZmlndXJhdGlvbixcclxuICAgIHByaXZhdGUgdGFibGVDb25maWd1cmF0aW9uU2VydmljZTogU2RUYWJsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBTZEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2U6IFNkTm90aWZ5U2VydmljZSxcclxuICAgIHByaXZhdGUgZ3JpZEZpbHRlclNlcnZpY2U6IFNkVGFibGVGaWx0ZXJTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuI2luaXRDZWxsRGVmKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLiNyZWxvYWRcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKGFzeW5jIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJJbmZvID0gdGhpcy4jZ2V0RmlsdGVyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuI2xvYWQoZmlsdGVySW5mbywgIXRoaXMuI2xvYWRDb21wbGV0ZWQgfHwgZGF0YS5mb3JjZSk7XHJcbiAgICAgICAgICAgIHRoaXMuI2xvYWRDb21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSh0aGlzLiNyZW5kZXIpXHJcbiAgICApO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNkQ2VsbERlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSh0aGlzLiNpbml0Q2VsbERlZikpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNkRm9vdGVyRGVmcy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKFtdKSkuc3Vic2NyaWJlKHRoaXMuI2luaXRGb290ZXJEZWYpKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZEZpbHRlckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSh0aGlzLiNpbml0RmlsdGVyRGVmKSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgICB0aGlzLiNvcHRpb25DaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMudGFibGVPcHRpb24pKSxcclxuICAgICAgICB0aGlzLnNkRmlsdGVyRGVmcy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuZmlsdGVyRGVmcykpLFxyXG4gICAgICBdKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuI2xvYWRGaWx0ZXJSZWdpc3RlcigpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuI29wdGlvbkNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJSZWdpc3Rlcikge1xyXG4gICAgICAgICAgdGhpcy4jcmVsb2FkLm5leHQoe1xyXG4gICAgICAgICAgICBmb3JjZTogdHJ1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgI2luaXRDZWxsRGVmID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jZWxsRGVmID0ge307XHJcbiAgICBmb3IgKGNvbnN0IGNlbGxEZWYgb2YgdGhpcy5zZENlbGxEZWZzKSB7XHJcbiAgICAgIGlmIChjZWxsRGVmLnNkVGFibGVDZWxsRGVmKSB7XHJcbiAgICAgICAgdGhpcy5jZWxsRGVmW2NlbGxEZWYuc2RUYWJsZUNlbGxEZWZdID0gY2VsbERlZjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNpbml0RmlsdGVyRGVmID0gKCkgPT4ge1xyXG4gICAgdGhpcy5maWx0ZXJEZWZzID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGZpbHRlckRlZiBvZiB0aGlzLnNkRmlsdGVyRGVmcykge1xyXG4gICAgICB0aGlzLmZpbHRlckRlZnMucHVzaChmaWx0ZXJEZWYpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNpbml0Rm9vdGVyRGVmID0gKCkgPT4ge1xyXG4gICAgdGhpcy5mb290ZXJEZWYgPSB7fTtcclxuICAgIHRoaXMuaGFzRm9vdGVyID0gZmFsc2U7XHJcbiAgICBmb3IgKGNvbnN0IGZvb3RlckRlZiBvZiB0aGlzLnNkRm9vdGVyRGVmcykge1xyXG4gICAgICBpZiAoZm9vdGVyRGVmLnNkVGFibGVGb290ZXJEZWYpIHtcclxuICAgICAgICB0aGlzLmhhc0Zvb3RlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb290ZXJEZWZbZm9vdGVyRGVmLnNkVGFibGVGb290ZXJEZWZdID0gZm9vdGVyRGVmO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgI2ZpbHRlckV4cG9ydEluZm8gPSAocGFnZU51bWJlcjogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogU2RUYWJsZUZpbHRlclJlcXVlc3QgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5PcGVyYXRvciwgY29sdW1uRmlsdGVyLCBleHRlcm5hbEZpbHRlciwgZmlsdGVyRGVmIH0gPSB0aGlzLmZpbHRlclJlZ2lzdGVyLnZhbHVlLmdldCgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29sdW1uT3BlcmF0b3I6IGNvbHVtbk9wZXJhdG9yIHx8IHt9LFxyXG4gICAgICByYXdDb2x1bW5GaWx0ZXI6IGNvbHVtbkZpbHRlciB8fCB7fSxcclxuICAgICAgcmF3RXh0ZXJuYWxGaWx0ZXI6IGV4dGVybmFsRmlsdGVyIHx8IHt9LFxyXG4gICAgICByYXdGaWx0ZXJEZWY6IGZpbHRlckRlZiB8fCB7fSxcclxuICAgICAgb3JkZXJCeTogdGhpcy4jc29ydD8uYWN0aXZlIHx8ICcnLFxyXG4gICAgICBvcmRlckRpcmVjdGlvbjogdGhpcy4jc29ydD8uZGlyZWN0aW9uIHx8ICcnLFxyXG4gICAgICBwYWdlTnVtYmVyLFxyXG4gICAgICBwYWdlU2l6ZSxcclxuICAgICAgaXNFeHBvcnRlZDogdHJ1ZSxcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgI2luaXRDb25maWd1cmF0aW9uID0gKG9wdGlvbjogU2RUYWJsZU9wdGlvbikgPT4ge1xyXG4gICAgLy8gSW5pdCBwYWdpbmF0aW9uXHJcbiAgICBvcHRpb24ucGFnaW5hdGUgPSB7XHJcbiAgICAgIGhpZGRlbjogb3B0aW9uPy5wYWdpbmF0ZT8uaGlkZGVuLFxyXG4gICAgICBwYWdlU2l6ZTogb3B0aW9uPy5wYWdpbmF0ZT8ucGFnZVNpemUgPz8gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24/LnBhZ2luYXRlPy5wYWdlU2l6ZSA/PyBERUZBVUxUX1RBQkxFX0NPTkZJRy5wYWdpbmF0ZT8ucGFnZVNpemUsXHJcbiAgICAgIHBhZ2VzOiBvcHRpb24/LnBhZ2luYXRlPy5wYWdlcyA/PyB0aGlzLnRhYmxlQ29uZmlndXJhdGlvbj8ucGFnaW5hdGU/LnBhZ2VzID8/IERFRkFVTFRfVEFCTEVfQ09ORklHLnBhZ2luYXRlPy5wYWdlcyxcclxuICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6IG9wdGlvbj8ucGFnaW5hdGU/LnNob3dGaXJzdExhc3RCdXR0b25zID8/IGZhbHNlLFxyXG4gICAgfTtcclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIG9wdGlvbi5jb2x1bW5zIHx8IFtdKSB7XHJcbiAgICAgIGlmIChjb2x1bW4uZmlsdGVyPy5vcGVyYXRvcj8uZW5hYmxlICYmICFjb2x1bW4uZmlsdGVyPy5vcGVyYXRvcj8ubGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlci5vcGVyYXRvci5saXN0ID0gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24/LmZpbHRlcj8ub3BlcmF0b3I/LmRlZmF1bHRMaXN0U3RyaW5nIHx8IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyLm9wZXJhdG9yLmxpc3QgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvbj8uZmlsdGVyPy5vcGVyYXRvcj8uZGVmYXVsdExpc3ROdW1iZXIgfHwgW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycgfHwgY29sdW1uLnR5cGUgPT09ICdsYXp5LXZhbHVlcycpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXIub3BlcmF0b3IubGlzdCA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uPy5maWx0ZXI/Lm9wZXJhdG9yPy5kZWZhdWx0TGlzdFZhbHVlcyB8fCBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScgfHwgY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXIub3BlcmF0b3IubGlzdCA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uPy5maWx0ZXI/Lm9wZXJhdG9yPy5kZWZhdWx0TGlzdERhdGUgfHwgW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3B0aW9uO1xyXG4gIH07XHJcblxyXG4gICNsb2FkRmlsdGVyUmVnaXN0ZXIgPSAoKSA9PiB7XHJcbiAgICAvLyBJbml0IGZpbHRlclxyXG4gICAgaWYgKHRoaXMudGFibGVPcHRpb24pIHtcclxuICAgICAgaWYgKCF0aGlzLmZpbHRlclJlZ2lzdGVyKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJSZWdpc3RlciA9IHRoaXMuZ3JpZEZpbHRlclNlcnZpY2UucmVnaXN0ZXIodGhpcy50YWJsZU9wdGlvbj8uZmlsdGVyLCB7XHJcbiAgICAgICAgICBpZDogdGhpcy4jZ3JpZElkLFxyXG4gICAgICAgICAgY29sdW1uczogdGhpcy50YWJsZU9wdGlvbj8uY29sdW1ucyxcclxuICAgICAgICAgIGV4dGVybmFsRmlsdGVyczogdGhpcy50YWJsZU9wdGlvbj8uZmlsdGVyPy5leHRlcm5hbEZpbHRlcnMsXHJcbiAgICAgICAgICBmaWx0ZXJEZWZzOiB0aGlzLmZpbHRlckRlZnMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUmVnaXN0ZXIudmFsdWUub2JzZXJ2ZXJcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXHJcbiAgICAgICAgICAgICAgbWFwKGZpbHRlclZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29sdW1uT3BlcmF0b3IsIGNvbHVtbkZpbHRlciwgbm90UmVsb2FkIH0gPSBmaWx0ZXJWYWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uT3BlcmF0b3IgPSBjb2x1bW5PcGVyYXRvciB8fCB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRmlsdGVyID0gY29sdW1uRmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub3RSZWxvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI3BhZ2luYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JjZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNmaWx0ZXJMb2NhbCA9IChsb2NhbEl0ZW1zOiBTZFRhYmxlSXRlbTxUPltdLCBmaWx0ZXJJbmZvOiBTZFRhYmxlRmlsdGVyUmVxdWVzdCkgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zIH0gPSB0aGlzLnRhYmxlT3B0aW9uO1xyXG4gICAgY29uc3QgeyByYXdDb2x1bW5GaWx0ZXIsIG9yZGVyQnksIG9yZGVyRGlyZWN0aW9uLCBwYWdlU2l6ZSwgcGFnZU51bWJlciB9ID0gZmlsdGVySW5mbztcclxuICAgIGNvbnN0IGl0ZW1zID0gbG9jYWxJdGVtcy5maWx0ZXIodGFibGVJdGVtID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRhYmxlSXRlbS5kYXRhO1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcbiAgICAgICAgY29uc3QgeyBmaWVsZCwgdHlwZSB9ID0gY29sdW1uO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlOiBzdHJpbmcgPSAocmF3Q29sdW1uRmlsdGVyW2ZpZWxkIGFzIHN0cmluZ10gfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWU6IHN0cmluZyA9IChpdGVtW2ZpZWxkXSB8fCAnJykudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoZmlsdGVyVmFsdWUpIHtcclxuICAgICAgICAgIGlmICghY29sdW1uVmFsdWUgJiYgdHlwZSAhPT0gJ2RhdGV0aW1lJyAmJiB0eXBlICE9PSAnZGF0ZScgJiYgdHlwZSAhPT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uVmFsdWUuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd2YWx1ZXMnIHx8IHR5cGUgPT09ICdsYXp5LXZhbHVlcycpIHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtblZhbHVlICE9PSBmaWx0ZXJWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBjb25zdCBmVmFsdWUgPSArZmlsdGVyVmFsdWUucmVwbGFjZSgnPj0nLCAnJykucmVwbGFjZSgnPD0nLCAnJykucmVwbGFjZSgnPicsICcnKS5yZXBsYWNlKCc8JywgJycpO1xyXG4gICAgICAgICAgICBjb25zdCBjVmFsdWUgPSArY29sdW1uVmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChmVmFsdWUgfHwgZlZhbHVlID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFjVmFsdWUgJiYgY1ZhbHVlICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc+PScpID4gLTEgJiYgY1ZhbHVlIDwgZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc8PScpID4gLTEgJiYgY1ZhbHVlID4gZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc8JykgPiAtMSAmJiBjVmFsdWUgPj0gZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc+JykgPiAtMSAmJiBjVmFsdWUgPD0gZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjVmFsdWUgIT09IGZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlID09PSAnMScgJiYgY29sdW1uVmFsdWUgIT09ICcxJyAmJiBjb2x1bW5WYWx1ZSAhPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclZhbHVlID09PSAnMCcgJiYgY29sdW1uVmFsdWUgIT09ICcwJyAmJiBjb2x1bW5WYWx1ZSAhPT0gJ2ZhbHNlJykge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGF0ZXRpbWUnIHx8IHR5cGUgPT09ICdkYXRlJyB8fCB0eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgICAgY29uc3QgZnJvbSA9IHJhd0NvbHVtbkZpbHRlcltmaWVsZF0/LmZyb20gPz8gcmF3Q29sdW1uRmlsdGVyW2ZpZWxkXTtcclxuICAgICAgICAgICAgY29uc3QgdG8gPSByYXdDb2x1bW5GaWx0ZXJbZmllbGRdPy50byA/PyByYXdDb2x1bW5GaWx0ZXJbZmllbGRdO1xyXG4gICAgICAgICAgICBjb25zdCBmcm9tRGF0ZSA9IERhdGUuYmVnaW4oZnJvbSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvRGF0ZSA9IERhdGUuZW5kKHRvKTtcclxuICAgICAgICAgICAgaWYgKGZyb21EYXRlIHx8IHRvRGF0ZSkge1xyXG4gICAgICAgICAgICAgIGlmICghY29sdW1uVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGNvbHVtblRpbWUgPSBuZXcgRGF0ZShjb2x1bW5WYWx1ZSkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZyb21EYXRlVGltZSA9IGZyb21EYXRlPy5nZXRUaW1lKCkgfHwgbnVsbDtcclxuICAgICAgICAgICAgICBjb25zdCB0b0RhdGVUaW1lID0gdG9EYXRlPy5nZXRUaW1lKCkgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZyb21EYXRlVGltZSAmJiBmcm9tRGF0ZVRpbWUgPiBjb2x1bW5UaW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0b0RhdGVUaW1lICYmIGNvbHVtblRpbWUgPiB0b0RhdGVUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICAvLyBTb3J0XHJcbiAgICBpZiAob3JkZXJCeSAmJiBvcmRlckRpcmVjdGlvbikge1xyXG4gICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoZSA9PiBlLmZpZWxkID09PSBvcmRlckJ5KTtcclxuICAgICAgaWYgKGNvbHVtbikge1xyXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgZmllbGQgfSA9IGNvbHVtbjtcclxuICAgICAgICBpdGVtcy5zb3J0KCh0YWJsZUl0ZW1DdXJyZW50LCB0YWJsZUl0ZW1OZXh0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhID0gdGFibGVJdGVtQ3VycmVudC5kYXRhO1xyXG4gICAgICAgICAgY29uc3QgbmV4dCA9IHRhYmxlSXRlbU5leHQuZGF0YTtcclxuICAgICAgICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICByZXR1cm4gKGRhdGFbZmllbGQgYXMgc3RyaW5nXSB8fCAwKSAtIChuZXh0W2ZpZWxkIGFzIHN0cmluZ10gfHwgMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RhdGUnIHx8IHR5cGUgPT09ICdkYXRldGltZScgfHwgdHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGQxID0gbmV3IERhdGUoZGF0YVtmaWVsZCBhcyBzdHJpbmddIHx8ICcnKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGQyID0gbmV3IERhdGUoZGF0YVtmaWVsZCBhcyBzdHJpbmddIHx8ICcnKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkMSAtIGQyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgczEgPSAoZGF0YVtmaWVsZF0gfHwgJycpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBjb25zdCBzMiA9IChuZXh0W2ZpZWxkXSB8fCAnJykudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGlmIChzMSA+IHMyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHMxIDwgczIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKG9yZGVyRGlyZWN0aW9uID09PSAnZGVzYycpIHtcclxuICAgICAgICAgIGl0ZW1zLnJldmVyc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGl0ZW1zOiBpdGVtcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IHBhZ2VOdW1iZXIgKiBwYWdlU2l6ZSAmJiBpbmRleCA8IChwYWdlTnVtYmVyICsgMSkgKiBwYWdlU2l6ZTtcclxuICAgICAgfSksXHJcbiAgICAgIHRvdGFsOiBpdGVtcy5sZW5ndGgsXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNnZXRGaWx0ZXIgPSAoKTogU2RUYWJsZUZpbHRlclJlcXVlc3QgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5PcGVyYXRvciwgY29sdW1uRmlsdGVyLCBleHRlcm5hbEZpbHRlciwgZmlsdGVyRGVmIH0gPSB0aGlzLmZpbHRlclJlZ2lzdGVyLnZhbHVlLmdldCgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29sdW1uT3BlcmF0b3I6IGNvbHVtbk9wZXJhdG9yIHx8IHt9LFxyXG4gICAgICByYXdDb2x1bW5GaWx0ZXI6IGNvbHVtbkZpbHRlciB8fCB7fSxcclxuICAgICAgcmF3RXh0ZXJuYWxGaWx0ZXI6IGV4dGVybmFsRmlsdGVyIHx8IHt9LFxyXG4gICAgICByYXdGaWx0ZXJEZWY6IGZpbHRlckRlZiB8fCB7fSxcclxuICAgICAgb3JkZXJCeTogdGhpcy4jc29ydD8uYWN0aXZlIHx8ICcnLFxyXG4gICAgICBvcmRlckRpcmVjdGlvbjogdGhpcy4jc29ydD8uZGlyZWN0aW9uIHx8ICcnLFxyXG4gICAgICBwYWdlTnVtYmVyOiB0aGlzLiNwYWdpbmF0b3I/LnBhZ2VJbmRleCB8fCAwLFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy4jcGFnaW5hdG9yPy5wYWdlU2l6ZSB8fCB0aGlzLnRhYmxlT3B0aW9uPy5wYWdpbmF0ZT8ucGFnZVNpemUgfHwgNTAsXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNsb2FkID0gYXN5bmMgKGZpbHRlclJlcTogU2RUYWJsZUZpbHRlclJlcXVlc3QsIGZvcmNlOiBib29sZWFuID0gdHJ1ZSkgPT4ge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMudGFibGVPcHRpb24udHlwZSA9PT0gJ3NlcnZlcicpIHtcclxuICAgICAgY29uc3QgeyBpdGVtcyB9ID0gdGhpcy50YWJsZU9wdGlvbjtcclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGl0ZW1zKGZpbHRlclJlcSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYScpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaXRlbXM6IFtdIGFzIFRbXSxcclxuICAgICAgICAgIHRvdGFsOiAwLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGl0ZW1zOiBhd2FpdCB0aGlzLiNmb3JtYXQoZGF0YT8uaXRlbXMsIHRoaXMudGFibGVPcHRpb24uY29sdW1ucyksXHJcbiAgICAgICAgdG90YWw6IGRhdGE/LnRvdGFsIHx8IDAsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoZm9yY2UpIHtcclxuICAgICAgY29uc3QgeyBpdGVtcyB9ID0gdGhpcy50YWJsZU9wdGlvbjtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IGl0ZW1zKCk7XHJcbiAgICAgIGxldCBkYXRhOiBUW10gPSBbXTtcclxuICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgZGF0YSA9IGF3YWl0IHJlc3VsdHMuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGF0YSA9IHJlc3VsdHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKCdE4buvIGxp4buHdSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBt4bqjbmcnKTtcclxuICAgICAgICBkYXRhID0gW107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy4jbG9jYWxJdGVtcyA9IGF3YWl0IHRoaXMuI2Zvcm1hdChkYXRhLCB0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLiNmaWx0ZXJMb2NhbCh0aGlzLiNsb2NhbEl0ZW1zLCBmaWx0ZXJSZXEpO1xyXG4gIH07XHJcblxyXG4gICNyZW5kZXIgPSBhc3luYyAoYXJnczogeyBpdGVtczogU2RUYWJsZUl0ZW08VD5bXTsgdG90YWw6IG51bWJlciB9KSA9PiB7XHJcbiAgICB0aGlzLnNkU2Nyb2xsPy5zY3JvbGxUb3AoKTtcclxuICAgIHRoaXMuaXRlbXMgPSBhcmdzPy5pdGVtcyB8fCBbXTtcclxuICAgIHRoaXMudG90YWwgPSBhcmdzPy50b3RhbCB8fCAwO1xyXG4gICAgYXdhaXQgdGhpcy50YWJsZU9wdGlvbj8ucmVsb2FkPy5vblJlbG9hZD8uKHRoaXMuaXRlbXMpO1xyXG4gICAgdGhpcy5pc1NlbGVjdEFsbCA9IHRoaXMuaXRlbXMuZXZlcnkoZSA9PiBlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCk7XHJcbiAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgfTtcclxuXHJcbiAgcmVsb2FkID0gYXN5bmMgKGZvcmNlOiBib29sZWFuID0gdHJ1ZSkgPT4ge1xyXG4gICAgdGhpcy50YWJsZUZpbHRlcj8udXBkYXRlRmlsdGVyPy4oKTtcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLiNsb2FkKHRoaXMuI2dldEZpbHRlcigpLCBmb3JjZSk7XHJcbiAgICB0aGlzLiNyZW5kZXIoZGF0YSk7XHJcbiAgfTtcclxuXHJcbiAgI2V4cG9ydGVkSXRlbXMgPSBhc3luYyAocGFnZU51bWJlcjogbnVtYmVyID0gMCwgcGFnZVNpemU6IG51bWJlciA9IDEwMDAwKSA9PiB7XHJcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbi5leHBvcnQ/Lml0ZW1zKSB7XHJcbiAgICAgIC8vIGNvbnN0IGV4cG9ydGVkSXRlbXMgPSB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5pdGVtcyh0aGlzLiNmaWx0ZXJFeHBvcnRJbmZvKHBhZ2VOdW1iZXIsIHBhZ2VTaXplKSk7XHJcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydD8uaXRlbXModGhpcy4jZmlsdGVyRXhwb3J0SW5mbyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSkpO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNPYnNlcnZhYmxlPGFueVtdPihyZXN1bHQpKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvUHJvbWlzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc09ic2VydmFibGU8eyBpdGVtczogYW55W107IHRvdGFsOiBudW1iZXIgfT4ocmVzdWx0KSkge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC50b1Byb21pc2UoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlsdGVySW5mbyA9IHRoaXMuI2ZpbHRlckV4cG9ydEluZm8ocGFnZU51bWJlciwgcGFnZVNpemUpO1xyXG4gICAgICBpZiAodGhpcy50YWJsZU9wdGlvbi50eXBlID09PSAnc2VydmVyJykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnRhYmxlT3B0aW9uLml0ZW1zKGZpbHRlckluZm8pO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCByZXN1bHQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGV4cG9ydGVkSXRlbXM6IGFueVtdID0gW107XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhYmxlT3B0aW9uLml0ZW1zID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy50YWJsZU9wdGlvbi5pdGVtcygpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIGV4cG9ydGVkSXRlbXMgPSBhd2FpdCByZXN1bHRzO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXhwb3J0ZWRJdGVtcyA9IHJlc3VsdHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV4cG9ydGVkSXRlbXMgPSB0aGlzLnRhYmxlT3B0aW9uLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4jZmlsdGVyTG9jYWwoZXhwb3J0ZWRJdGVtcywgZmlsdGVySW5mbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAjYWxsQ29sdW1ucyA9ICgpOiBTZFRhYmxlQ29sdW1uW10gPT4ge1xyXG4gICAgY29uc3QgY29sdW1uczogU2RUYWJsZUNvbHVtbltdID0gW107XHJcbiAgICB0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpXHJcbiAgICAgIC5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4uY2hpbGRyZW5cclxuICAgICAgICAgICAgPy5maWx0ZXIoZSA9PiAhZS5leHBvcnQ/LmRpc2FibGVkKVxyXG4gICAgICAgICAgICAuZm9yRWFjaChjaGlsZENvbHVtbiA9PiB7XHJcbiAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKGNoaWxkQ29sdW1uKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBjb2x1bW5zO1xyXG4gIH07XHJcblxyXG4gICNhbGxFeHBvcnRlZENvbHVtbnMgPSAoKTogU2RUYWJsZU9wdGlvbkV4cG9ydENvbHVtbltdID0+IHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydD8uY29sdW1ucz8uZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZCkgfHwgW107XHJcbiAgfTtcclxuXHJcbiAgI29uRXhwb3J0ID0gYXN5bmMgKGlzQ1NWPzogYm9vbGVhbikgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGNvbHVtbnMgPSB0aGlzLiNnZXRFeHBvcnRDb2x1bW5zKCk7XHJcbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5tYXhJdGVtc1BlclJlcXVlc3QgfHwgMTAwMDtcclxuICAgICAgY29uc3QgYmF0Y2ggPSB0aGlzLnRhYmxlT3B0aW9uPy5leHBvcnQ/LmJhdGNoIHx8IDE7XHJcbiAgICAgIGxldCB0b3RhbCA9IHRoaXMudG90YWw7XHJcbiAgICAgIGxldCBwYWdlTnVtYmVyID0gMDtcclxuICAgICAgbGV0IGV4cG9ydEl0ZW1zID0gW107XHJcbiAgICAgIHRoaXMuaXNFeHBvcnRpbmcgPSB0cnVlO1xyXG4gICAgICBjb25zdCBpdGVtczogYW55W10gPSBbXTtcclxuICAgICAgbGV0IHByb21pc2VzOiBQcm9taXNlPFxyXG4gICAgICAgIHwgYW55W11cclxuICAgICAgICB8IHtcclxuICAgICAgICAgICAgaXRlbXM6IGFueVtdO1xyXG4gICAgICAgICAgICB0b3RhbDogbnVtYmVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICA+W10gPSBbXTtcclxuICAgICAgY29uc3QgaGFuZGxlRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIHByb21pc2VzID0gW107XHJcbiAgICAgICAgZXhwb3J0SXRlbXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgICBpZiAoJ2l0ZW1zJyBpbiByZXN1bHQpIHtcclxuICAgICAgICAgICAgZXhwb3J0SXRlbXMgPSBbLi4uZXhwb3J0SXRlbXMsIC4uLnJlc3VsdC5pdGVtc107XHJcbiAgICAgICAgICAgIHRvdGFsID0gcmVzdWx0LnRvdGFsO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXhwb3J0SXRlbXMgPSBbLi4uZXhwb3J0SXRlbXMsIC4uLnJlc3VsdF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydD8ubWFwcGluZykge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMudGFibGVPcHRpb24uZXhwb3J0Lm1hcHBpbmcoZXhwb3J0SXRlbXMpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIGV4cG9ydEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4cG9ydEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdG90YWxQYWdlID0gdG90YWwgLyBwYWdlU2l6ZTtcclxuICAgICAgICBjb25zdCBwZXJjZW50ID0gTWF0aC5yb3VuZCgoKHBhZ2VOdW1iZXIgLSAxKSAqIDEwMC4wKSAvIHRvdGFsUGFnZSk7XHJcbiAgICAgICAgdGhpcy5leHBvcnRUaXRsZSA9IGBFeHBvcnRpbmcuLi4ke3BlcmNlbnR9JWA7XHJcbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuI2FsbENvbHVtbnMoKTtcclxuICAgICAgICBjb25zdCBhbGxFeHBvcnRlZENvbHVtbnMgPSB0aGlzLiNhbGxFeHBvcnRlZENvbHVtbnMoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXhwb3J0SXRlbXMpIHtcclxuICAgICAgICAgIGNvbnN0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhc3luYyAoZXhwb3J0Q29sdW1uOiBTZEV4cG9ydENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgICBvYmpbZXhwb3J0Q29sdW1uLmZpZWxkXSA9IGl0ZW1bZXhwb3J0Q29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gYWxsQ29sdW1ucy5maW5kKGUgPT4gZS5maWVsZCA9PT0gZXhwb3J0Q29sdW1uLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgZXhwb3J0ZWRDb2x1bW4gPSBhbGxFeHBvcnRlZENvbHVtbnMuZmluZChlID0+IGUuZmllbGQgPT09IGV4cG9ydENvbHVtbi5maWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChleHBvcnRlZENvbHVtbj8udHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgb2JqW2V4cG9ydGVkQ29sdW1uLmZpZWxkXSA9IGV4cG9ydGVkQ29sdW1uLnRyYW5zZm9ybShpdGVtW2V4cG9ydGVkQ29sdW1uLmZpZWxkXSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgICAgICAgIGNvbHVtbj8uY2hpbGRyZW4uZm9yRWFjaChjaGlsZENvbHVtbiA9PiBoYW5kbGUoY2hpbGRDb2x1bW4pKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFjb2x1bW5zLnNvbWUoZSA9PiBlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gY29sdW1uLnRyYW5zZm9ybShpdGVtW2NvbHVtbi5maWVsZF0sIGl0ZW0sIHtcclxuICAgICAgICAgICAgICAgIGlzRXhwb3J0OiB0cnVlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGF3YWl0IHRyYW5zZm9ybTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0cmFuc2Zvcm07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gb2JqW2NvbHVtbi5maWVsZF0gPz8gJyc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbVtjb2x1bW4uZmllbGRdID09PSB1bmRlZmluZWQgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSBudWxsIHx8IGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9ICcnO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBjZWxsIGzDoCBzdHJpbmcgaG/hurdjIG51bWJlciB0aMOsIGfDoW4gYuG6sW5nIGNow61uaCBuw7NcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIGJvb2wgdGjDrCBnw6FuIGLhurFuZyBnacOhIHRy4buLIHRydWVWYWx1ZSB2w6AgZmFsc2VWYWx1ZSAobuG6v3UgY8OzKSwgbeG6t2MgxJHhu4tuaCBsw6AgVFJVRS9GQUxTRVxyXG4gICAgICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLm9wdGlvbj8uZGlzcGxheU9uVHJ1ZSB8fCAnVHJ1ZSc7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmpbY29sdW1uLmZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIG9ialtjb2x1bW4uZmllbGRdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5vcHRpb24/LmRpc3BsYXlPbkZhbHNlIHx8ICdGYWxzZSc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgICBsZXQgZGF0ZSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBEYXRlLnRvRm9ybWF0KGRhdGUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgICBsZXQgZGF0ZSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZXRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gRGF0ZS50b0Zvcm1hdChkYXRlLCAnZGQvTU0veXl5eSBISDptbScpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgICAgICBsZXQgZGF0ZSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgdGltZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBEYXRlLnRvRm9ybWF0KGRhdGUsICdISDptbScpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAndmFsdWVzJykge1xyXG4gICAgICAgICAgICAgIC8vIE7hur91IGzDoCB2YWx1ZXMgdGjDrCBs4bqleSBnacOhIHRy4buLIGPhu6dhIHZhbHVlIMSRxrDhu6NjIGNo4buNblxyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy4jY2FjaGVPYmpWYWx1ZXNbY29sdW1uLmZpZWxkXT8uW2l0ZW1bY29sdW1uLmZpZWxkXV0gfHwgaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgLy8gdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMuZm9yRWFjaChoYW5kbGUpO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBleHBvcnRDb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICAgICAgICBhd2FpdCBoYW5kbGUoZXhwb3J0Q29sdW1uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGl0ZW1zLnB1c2gob2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHdoaWxlIChwYWdlTnVtYmVyICogcGFnZVNpemUgPCB0b3RhbCkge1xyXG4gICAgICAgIHByb21pc2VzLnB1c2godGhpcy4jZXhwb3J0ZWRJdGVtcyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSkpO1xyXG4gICAgICAgIHBhZ2VOdW1iZXIrKztcclxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoIDwgYmF0Y2gpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBoYW5kbGVEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBhd2FpdCBoYW5kbGVEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzQ1NWKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydENTVih7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgaXRlbXMsXHJcbiAgICAgICAgICBmaWxlTmFtZTogdGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5maWxlTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2hlZXRzOiB7XHJcbiAgICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICAgIGl0ZW1zOiBhbnlbXTtcclxuICAgICAgICBmaWVsZHM6IHN0cmluZ1tdO1xyXG4gICAgICB9W10gPSBbXTtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5zaGVldHMpKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBzaGVldCBvZiB0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydC5zaGVldHMpIHtcclxuICAgICAgICAgIGlmIChzaGVldC5uYW1lICYmIHNoZWV0Lml0ZW1zICYmIHNoZWV0LmZpZWxkcykge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykpIHtcclxuICAgICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBzaGVldC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IHNoZWV0Lml0ZW1zLFxyXG4gICAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHMsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBhd2FpdCBzaGVldC5pdGVtcygpLFxyXG4gICAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHMsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydCh7XHJcbiAgICAgICAgY29sdW1ucyxcclxuICAgICAgICBpdGVtcyxcclxuICAgICAgICBmaWxlTmFtZTogdGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5maWxlTmFtZSxcclxuICAgICAgICBzaGVldHMsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmlzRXhwb3J0aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZXhwb3J0VGl0bGUgPSBgRXhwb3J0YDtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNnZXRFeHBvcnRDb2x1bW5zID0gKCkgPT4ge1xyXG4gICAgY29uc3QgY29sdW1ucyA9IFtcclxuICAgICAgLi4udGhpcy50YWJsZU9wdGlvbi5jb2x1bW5zLmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpLFxyXG4gICAgICAuLi4odGhpcy50YWJsZU9wdGlvbi5leHBvcnQ/LmNvbHVtbnM/LmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpIHx8IFtdKSxcclxuICAgIF07XHJcbiAgICByZXR1cm4gY29sdW1ucztcclxuICB9O1xyXG5cclxuICBleHBvcnRFeGNlbCA9ICgpID0+IHtcclxuICAgIHRoaXMuI29uRXhwb3J0KCk7XHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0Q1NWID0gKCkgPT4ge1xyXG4gICAgdGhpcy4jb25FeHBvcnQodHJ1ZSk7XHJcbiAgfTtcclxuXHJcbiAgb25GaWx0ZXJDaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnRhYmxlRmlsdGVyPy51cGRhdGVGaWx0ZXI/LigpO1xyXG4gICAgdGhpcy5maWx0ZXJSZWdpc3Rlci52YWx1ZS5zZXQoe1xyXG4gICAgICBjb2x1bW5PcGVyYXRvcjogdGhpcy5jb2x1bW5PcGVyYXRvciB8fCB7fSxcclxuICAgICAgY29sdW1uRmlsdGVyOiB0aGlzLmNvbHVtbkZpbHRlcixcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIG9uRXhwYW5kID0gYXN5bmMgKHJvd0RhdGE6IFNkVGFibGVJdGVtPFQ+KSA9PiB7XHJcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbi5leHBhbmQ/LmFsd2F5cykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGVkKSB7XHJcbiAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy50YWJsZU9wdGlvbj8uZXhwYW5kPy5vbkV4cGFuZD8uKHJvd0RhdGEuZGF0YSk7XHJcbiAgICBpZiAoIXRoaXMudGFibGVPcHRpb24uZXhwYW5kPy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiAoaXRlbS5tZXRhLmV4cGFuZC5pc0V4cGFuZGluZyA9IGl0ZW0ubWV0YS5leHBhbmQuaXNFeHBhbmRlZCA9IGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgcm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGluZyA9IHRydWU7XHJcbiAgICAgIGRhdGFcclxuICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgcm93RGF0YS5tZXRhLmV4cGFuZC5kYXRhID0gcmVzO1xyXG4gICAgICAgICAgcm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5maW5hbGx5KCgpID0+IChyb3dEYXRhLm1ldGEuZXhwYW5kLmlzRXhwYW5kaW5nID0gZmFsc2UpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuZGF0YSA9IGRhdGE7XHJcbiAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuaXNFeHBhbmRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgb25TZWxlY3QgPSAocm93RGF0YTogU2RUYWJsZUl0ZW08VD4pID0+IHtcclxuICAgIGlmIChyb3dEYXRhLm1ldGEuZ3JvdXA/Lml0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgcm93RGF0YS5tZXRhLmdyb3VwLml0ZW1zLmZvckVhY2goZSA9PiAoZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQgPSByb3dEYXRhLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCkpO1xyXG4gICAgICB0aGlzLnRhYmxlT3B0aW9uLnNlbGVjdG9yPy5vblNlbGVjdD8uKFxyXG4gICAgICAgIHJvd0RhdGEuZGF0YSxcclxuICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKS5tYXAoZSA9PiBlLmRhdGEpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaXNTZWxlY3RBbGwgPSB0aGlzLml0ZW1zLmV2ZXJ5KGUgPT4gZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQpO1xyXG4gICAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy50YWJsZU9wdGlvbi5zZWxlY3Rvcj8uc2luZ2xlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoZSA9PiBlICE9PSByb3dEYXRhKS5mb3JFYWNoKGUgPT4gKGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkID0gZmFsc2UpKTtcclxuICAgICAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGFibGVPcHRpb24uc2VsZWN0b3I/Lm9uU2VsZWN0Py4oXHJcbiAgICAgICAgcm93RGF0YS5kYXRhLFxyXG4gICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKGUgPT4gZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQpLm1hcChlID0+IGUuZGF0YSlcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pc1NlbGVjdEFsbCA9IHRoaXMuaXRlbXMuZXZlcnkoZSA9PiBlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCk7XHJcbiAgICAgIHRoaXMuI3VwZGF0ZVNlbGVjdGVkSXRlbXMoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBvblNlbGVjdEFsbCA9ICgpID0+IHtcclxuICAgIHRoaXMuaXRlbXM/LmZvckVhY2goZSA9PiB7XHJcbiAgICAgIGlmIChlLm1ldGEuc2VsZWN0b3Iuc2VsZWN0YWJsZSAmJiAoIXRoaXMudGFibGVPcHRpb24/LnNlbGVjdG9yPy5hY3Rpb25zPy5sZW5ndGggfHwgZS5tZXRhLnNlbGVjdG9yLmFjdGlvbnM/Lmxlbmd0aCkpIHtcclxuICAgICAgICBlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RBbGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy50YWJsZU9wdGlvbi5zZWxlY3Rvcj8ub25TZWxlY3RBbGw/Lih0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKS5tYXAoZSA9PiBlLmRhdGEpKTtcclxuICAgIHRoaXMuI3VwZGF0ZVNlbGVjdGVkSXRlbXMoKTtcclxuICB9O1xyXG5cclxuICBvbkNsZWFyU2VsZWN0aW9uID0gKGl0ZW1zPzogU2RUYWJsZUl0ZW08VD5bXSkgPT4ge1xyXG4gICAgaXRlbXMgPSBpdGVtcyB8fCB0aGlzLml0ZW1zO1xyXG4gICAgdGhpcy5pc1NlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgaXRlbXM/LmZvckVhY2goZSA9PiAoZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy4jdXBkYXRlU2VsZWN0ZWRJdGVtcygpO1xyXG4gIH07XHJcblxyXG4gICN1cGRhdGVTZWxlY3RlZEl0ZW1zID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYmxlSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0ubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9O1xyXG5cclxuICBjbGVhckZpbHRlciA9ICgpID0+IHtcclxuICAgIHRoaXMuZmlsdGVyUmVnaXN0ZXIudmFsdWUucmVtb3ZlKCk7XHJcbiAgfTtcclxuXHJcbiAgc2V0RmlsdGVyID0gKGFyZ3M6IHsgY29sdW1uRmlsdGVyPzogUmVjb3JkPHN0cmluZywgYW55PjsgZXh0ZXJuYWxGaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+OyBmaWx0ZXJEZWY/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0pID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1uRmlsdGVyLCBleHRlcm5hbEZpbHRlciwgZmlsdGVyRGVmIH0gPSBhcmdzIHx8IHt9O1xyXG4gICAgaWYgKGNvbHVtbkZpbHRlcikge1xyXG4gICAgICB0aGlzLmNvbHVtbkZpbHRlciA9IGNvbHVtbkZpbHRlcjtcclxuICAgIH1cclxuICAgIHRoaXMuZmlsdGVyUmVnaXN0ZXIudmFsdWUuc2V0KHtcclxuICAgICAgY29sdW1uRmlsdGVyLFxyXG4gICAgICBleHRlcm5hbEZpbHRlcixcclxuICAgICAgZmlsdGVyRGVmLFxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0IGRhdGFJdGVtcygpOiBUW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5kYXRhKTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZEl0ZW1zKCk6IFRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYmxlSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5kYXRhKTtcclxuICB9XHJcblxyXG4gIGRldGVjdENoYW5nZXMgPSAoKSA9PiB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICNsb2FkVmFsdWVzID0gYXN5bmMgKGNvbHVtbnM6IFNkVGFibGVDb2x1bW5bXSkgPT4ge1xyXG4gICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8e1xyXG4gICAgICBrZXk6IHN0cmluZztcclxuICAgICAgdmFsdWVGaWVsZDogc3RyaW5nO1xyXG4gICAgICBkaXNwbGF5RmllbGQ6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55W107XHJcbiAgICB9PltdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycgJiYgIXRoaXMuY2FjaGVWYWx1ZXNbY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgY29sdW1uLm9wdGlvbi5pdGVtcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcclxuICAgICAgICAgICAgY29sdW1uLm9wdGlvblxyXG4gICAgICAgICAgICAgIC5pdGVtcygpXHJcbiAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiAoe1xyXG4gICAgICAgICAgICAgICAga2V5OiBjb2x1bW4uZmllbGQsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiBjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6IGNvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbXSxcclxuICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiBjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jYWNoZVZhbHVlc1tjb2x1bW4uZmllbGRdID0gY29sdW1uLm9wdGlvbi5pdGVtcy5tYXAoZSA9PiAoe1xyXG4gICAgICAgICAgICBbY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkXTogZT8uW2NvbHVtbi5vcHRpb24udmFsdWVGaWVsZF0sXHJcbiAgICAgICAgICAgIFtjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF06IGU/Lltjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF0sXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB0aGlzLiNjYWNoZU9ialZhbHVlc1tjb2x1bW4uZmllbGRdID0gQXJyYXkudG9PYmplY3QodGhpcy5jYWNoZVZhbHVlc1tjb2x1bW4uZmllbGRdLCBjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHByb21pc2VzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgdGhpcy5jYWNoZVZhbHVlc1tyZXN1bHQua2V5XSA9IHJlc3VsdC5kYXRhLm1hcChlID0+ICh7XHJcbiAgICAgICAgICBbcmVzdWx0LnZhbHVlRmllbGRdOiBlPy5bcmVzdWx0LnZhbHVlRmllbGRdLFxyXG4gICAgICAgICAgW3Jlc3VsdC5kaXNwbGF5RmllbGRdOiBlPy5bcmVzdWx0LmRpc3BsYXlGaWVsZF0sXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuI2NhY2hlT2JqVmFsdWVzW3Jlc3VsdC5rZXldID0gQXJyYXkudG9PYmplY3QodGhpcy5jYWNoZVZhbHVlc1tyZXN1bHQua2V5XSwgcmVzdWx0LnZhbHVlRmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgI2Zvcm1hdCA9IGFzeW5jIDxUID0gYW55PihyYXdJdGVtczogVFtdLCBjb2x1bW5zOiBTZFRhYmxlQ29sdW1uW10pID0+IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gcmF3SXRlbXMubWFwKE1hcFRvU2RUYWJsZUl0ZW0pO1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICAvLyBDbGlja2FibGVcclxuICAgICAgY29uc3QgeyBmaWVsZCwgY2VsbFN0eWxlLCBjbGljaywgdG9vbHRpcCwgaHRtbFRlbXBsYXRlLCB0cmFuc2Zvcm0gfSA9IGNvbHVtbjtcclxuICAgICAgaWYgKCF0cmFuc2Zvcm0gJiYgIWh0bWxUZW1wbGF0ZSAmJiBjb2x1bW4udHlwZSA9PT0gJ2xhenktdmFsdWVzJyAmJiB0eXBlb2YgY29sdW1uLm9wdGlvbi52aWV3cyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgIG9wdGlvbjogeyB2aWV3cywgbWFwVmFsdWUgfSxcclxuICAgICAgICB9ID0gY29sdW1uO1xyXG4gICAgICAgIHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXSA9IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXSB8fCB7fTtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBpdGVtc1xyXG4gICAgICAgICAgLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXBWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShpdGVtLmRhdGE/LltmaWVsZF0sIGl0ZW0uZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YT8uW2ZpZWxkXTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZmlsdGVyKHZhbCA9PiAoISF2YWwgfHwgdmFsID09PSAwKSAmJiAhT2JqZWN0LmtleXModGhpcy4jY2FjaGVPYmpWYWx1ZXNbZmllbGRdKS5pbmNsdWRlcyh2YWwpKVxyXG4gICAgICAgICAgLnVuaW9uKCk7XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCBsYXp5SXRlbXM6IGFueVtdID0gKFxyXG4gICAgICAgICAgICBhd2FpdCB2aWV3cyh2YWx1ZXMpLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IHZhbHVlcy5pbmNsdWRlcyhpdGVtPy5bY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkXSkpXHJcbiAgICAgICAgICAgIC5tYXAoZSA9PiAoe1xyXG4gICAgICAgICAgICAgIFtjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGRdOiBlPy5bY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkXSxcclxuICAgICAgICAgICAgICBbY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGRdOiBlPy5bY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGRdLFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXSwgQXJyYXkudG9PYmplY3QobGF6eUl0ZW1zLCBjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGQpIHx8IHt9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IGl0ZW0uZGF0YTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd0RhdGE/LltmaWVsZF07XHJcbiAgICAgICAgaXRlbS5tZXRhLmRpc3BsYXlbZmllbGRdID0ge1xyXG4gICAgICAgICAgYmFkZ2U6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGNlbGxTdHlsZTogY29sdW1uLnR5cGUgPT09ICdudW1iZXInID8geyAndGV4dC1hbGlnbic6ICdyaWdodCFpbXBvcnRhbnQnIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBkYXRhOiB2YWx1ZSxcclxuICAgICAgICAgIGlzSHRtbDogZmFsc2UsXHJcbiAgICAgICAgICB0b29sdGlwOiB0eXBlb2YgdG9vbHRpcCA9PT0gJ2Z1bmN0aW9uJyA/IHRvb2x0aXAodmFsdWUsIHJvd0RhdGEpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgY2xpY2s6IHR5cGVvZiBjbGljayA9PT0gJ2Z1bmN0aW9uJyA/ICgpID0+IGNsaWNrKHZhbHVlLCByb3dEYXRhKSA6IHVuZGVmaW5lZCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGRpc3BsYXkgPSBpdGVtLm1ldGEuZGlzcGxheVtmaWVsZF07XHJcbiAgICAgICAgLy8gRGlzcGxheVxyXG4gICAgICAgIGlmICh0eXBlb2YgaHRtbFRlbXBsYXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBkaXNwbGF5LmlzSHRtbCA9IHRydWU7XHJcbiAgICAgICAgICBkaXNwbGF5LmRhdGEgPSBodG1sVGVtcGxhdGUodmFsdWUsIHJvd0RhdGEpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0cmFuc2Zvcm0odmFsdWUsIHJvd0RhdGEpO1xyXG4gICAgICAgICAgaWYgKG5ld1ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSBhd2FpdCBuZXdWYWx1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCBjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBEYXRlLnRvRm9ybWF0KHZhbHVlLCAnZGQvTU0veXl5eScpO1xyXG4gICAgICAgICAgICBsZXQgdGltZSA9IERhdGUudG9Gb3JtYXQodmFsdWUsICdISDptbTpzcycpO1xyXG4gICAgICAgICAgICBpZiAodGltZT8uZW5kc1dpdGgoJzAwJykpIHtcclxuICAgICAgICAgICAgICB0aW1lID0gRGF0ZS50b0Zvcm1hdCh2YWx1ZSwgJ0hIOm1tJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScgfHwgY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXkuaXNIdG1sID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IGA8c3BhbiBjbGFzcz1cImQtYmxvY2sgVDE0UiB0ZXh0LWJsYWNrNDAwXCI+JHt0aW1lfTwvc3Bhbj48c3BhbiBjbGFzcz1cImQtYmxvY2sgVDE0UlwiPiR7ZGF0ZX08L3NwYW4+YDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheS5kYXRhID0gZGF0ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSB0aW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnIHx8IGNvbHVtbi50eXBlID09PSAnbGF6eS12YWx1ZXMnKSB7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2xhenktdmFsdWVzJyAmJiB0eXBlb2YgY29sdW1uLm9wdGlvbi5tYXBWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXT8uW2NvbHVtbi5vcHRpb24ubWFwVmFsdWUodmFsdWUsIHJvd0RhdGEpXT8uW2NvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkXSB8fCB2YWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSB0aGlzLiNjYWNoZU9ialZhbHVlc1tmaWVsZF0/Llt2YWx1ZV0/Lltjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF0gfHwgdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSBOdW1iZXIudG9WTkN1cnJlbmN5KHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgb3B0aW9uIH0gPSBjb2x1bW47XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IHZhbHVlID09PSB0cnVlID8gb3B0aW9uPy5kaXNwbGF5T25UcnVlIHx8ICdUcnVlJyA6IG9wdGlvbj8uZGlzcGxheU9uRmFsc2UgfHwgJ0ZhbHNlJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBCYWRnZVxyXG4gICAgICAgICAgaWYgKChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInIHx8IGNvbHVtbi50eXBlID09PSAndmFsdWVzJykgJiYgY29sdW1uLmJhZGdlKSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXkuYmFkZ2UgPSB7XHJcbiAgICAgICAgICAgICAgdHlwZTogIWNvbHVtbj8uYmFkZ2VUeXBlID8gJ2ljb24nIDogY29sdW1uLmJhZGdlVHlwZSxcclxuICAgICAgICAgICAgICBjb2xvcjogY29sdW1uLmJhZGdlKHZhbHVlLCByb3dEYXRhKSxcclxuICAgICAgICAgICAgICBpY29uOiBjb2x1bW4uYmFkZ2VJY29uPy4odmFsdWUsIHJvd0RhdGEpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXkuYmFkZ2UgPSB7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ2NpcmNsZScsXHJcbiAgICAgICAgICAgICAgY29sb3I6ICEhdmFsdWUgPyAnc3VjY2VzcycgOiAnZGFuZ2VyJyxcclxuICAgICAgICAgICAgICBpY29uOiBudWxsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG4gIH07XHJcblxyXG4gIHRyYWNrQnkgPSAoaW5kZXg6IG51bWJlciwgaXRlbTogU2RUYWJsZUl0ZW0pID0+IHtcclxuICAgIHJldHVybiBpdGVtLm1ldGEuaWQ7XHJcbiAgfTtcclxufVxyXG4iXX0=
982
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS90YWJsZS8iLCJzb3VyY2VzIjpbInNyYy9saWIvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUVULFFBQVEsRUFDUixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBR1QsWUFBWSxFQUNaLHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBeUIsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ2pGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFN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QUF1QjsyQkFNdkMsZUFBZSxTQUFDLDRCQUE0QjsyQkFPNUMsZUFBZSxTQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIEluamVjdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgUXVlcnlMaXN0LFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRTb3J0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XHJcbmltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBTZFRhYmxlRmlsdGVyUmVnaXN0ZXIsIFNkVGFibGVGaWx0ZXJSZXF1ZXN0IH0gZnJvbSAnLi9zZXJ2aWNlcy90YWJsZS1maWx0ZXIvdGFibGUtZmlsdGVyLm1vZGVsJztcclxuaW1wb3J0IHsgU2RUYWJsZU9wdGlvbiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFRBQkxFX0NPTkZJRywgREVGQVVMVF9UQUJMRV9DT05GSUcsIElTZFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGlzT2JzZXJ2YWJsZSwgU3ViamVjdCwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTZE5vdGlmeVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL25vdGlmeSc7XHJcbmltcG9ydCB7IFNkRmlsdGVyT3BlcmF0b3IsIFNkVGFibGVDb2x1bW4gfSBmcm9tICcuL21vZGVscy90YWJsZS1jb2x1bW4ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZFRhYmVsQ2VsbERlZkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zZC10YWJsZS1jZWxsLWRlZi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFNkVGFibGVGaWx0ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtZmlsdGVyL3RhYmxlLWZpbHRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NkLXRhYmxlLWZpbHRlci1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2RNYXRlcmlhbFN1YkluZm9ybWF0aW9uRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL3NkLXRhYmxlLWV4cGFuZC1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgU2RNYXRlcmlhbEZvb3RlckRlZkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9zZC10YWJsZS1mb290ZXItZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkRXhwb3J0Q29sdW1uLCBTZEV4cG9ydFNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2V4cG9ydCc7XHJcbmltcG9ydCB7IFNkVGFibGVDb25maWd1cmF0aW9uUmVzdWx0IH0gZnJvbSAnLi9tb2RlbHMvdGFibGUtb3B0aW9uLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNkVGFibGVDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGFibGUtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2RUYWJsZU9wdGlvbkV4cG9ydENvbHVtbiB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLW9wdGlvbi1leHBvcnQubW9kZWwnO1xyXG5pbXBvcnQgeyBTZFF1aWNrQWN0aW9uIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9xdWljay1hY3Rpb24nO1xyXG5pbXBvcnQgeyBNYXBUb1NkVGFibGVJdGVtLCBTZFRhYmxlSXRlbSB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZFNjcm9sbERpcmVjdGl2ZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuaW1wb3J0IHsgU2RUYWJsZUZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RhYmxlLWZpbHRlci90YWJsZS1maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNkUG9wdXBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb21wb25lbnRzL3BvcHVwLWNvbmZpZ3VyYXRpb24vcG9wdXAtY29uZmlndXJhdGlvbi5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcclxuICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMCcsIG1pbkhlaWdodDogJzAnLCB2aXNpYmlsaXR5OiAnaGlkZGVuJyB9KSksXHJcbiAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnKicsIHZpc2liaWxpdHk6ICd2aXNpYmxlJyB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkIDw9PiBjb2xsYXBzZWQnLCBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKSksXHJcbiAgICBdKSxcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RUYWJsZTxUID0gYW55PiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFNkUG9wdXBDb25maWd1cmF0aW9uKSBwb3B1cENvbmZpZ3VyYXRpb246IFNkUG9wdXBDb25maWd1cmF0aW9uO1xyXG4gICNncmlkSWQgPSB1dWlkLnY0KCk7XHJcbiAgQFZpZXdDaGlsZChTZFNjcm9sbERpcmVjdGl2ZSkgc2RTY3JvbGw6IFNkU2Nyb2xsRGlyZWN0aXZlO1xyXG4gIGZpbHRlclJlZ2lzdGVyOiBTZFRhYmxlRmlsdGVyUmVnaXN0ZXI7XHJcbiAga2V5ID0gdXVpZC52NCgpO1xyXG4gIEBWaWV3Q2hpbGQoU2RRdWlja0FjdGlvbikgcXVpY2tBY3Rpb246IFNkUXVpY2tBY3Rpb247XHJcbiAgQFZpZXdDaGlsZChTZFRhYmxlRmlsdGVyKSB0YWJsZUZpbHRlcjogU2RUYWJsZUZpbHRlcjtcclxuICB0YWJsZU9wdGlvbjogU2RUYWJsZU9wdGlvbjxUPjtcclxuICBjb25maWd1cmF0aW9uOiBTZFRhYmxlQ29uZmlndXJhdGlvblJlc3VsdDtcclxuICBASW5wdXQoKSBzZXQgb3B0aW9uKG9wdGlvbjogU2RUYWJsZU9wdGlvbikge1xyXG4gICAgaWYgKG9wdGlvbikge1xyXG4gICAgICBvcHRpb24gPSB0aGlzLiNpbml0Q29uZmlndXJhdGlvbihvcHRpb24pO1xyXG4gICAgICB0aGlzLnRhYmxlT3B0aW9uID0gb3B0aW9uO1xyXG4gICAgICB0aGlzLiNsb2FkQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2UuaW5pdCh0aGlzLnRhYmxlT3B0aW9uKTtcclxuICAgICAgaWYgKHNldHRpbmcpIHtcclxuICAgICAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICAgICAgc2V0dGluZy5vYnNlcnZlci5waXBlKHN0YXJ0V2l0aChzZXR0aW5nLnN1YmplY3QuZ2V0VmFsdWUoKSkpLnN1YnNjcmliZShjb25maWd1cmF0aW9uID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29uZmlndXJhdGlvblJlc3VsdCA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uU2VydmljZS5sb2FkQ29uZmlndXJhdGlvblJlc3VsdCh0aGlzLnRhYmxlT3B0aW9uLCBjb25maWd1cmF0aW9uKTtcclxuICAgICAgICAgICAgY29uc3QgZGlzcGxheUNvbHVtbnMgPSBjb25maWd1cmF0aW9uUmVzdWx0LmRpc3BsYXllZENvbHVtbnMgfHwgW107XHJcbiAgICAgICAgICAgIHRoaXMuI2xvYWRWYWx1ZXModGhpcy50YWJsZU9wdGlvbi5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gZGlzcGxheUNvbHVtbnMuaW5jbHVkZXMoY29sdW1uLmZpZWxkKSkpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25SZXN1bHQ7XHJcbiAgICAgICAgICAgICAgdGhpcy4jb3B0aW9uQ2hhbmdlcy5uZXh0KHRoaXMudGFibGVPcHRpb24pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBjb25maWd1cmF0aW9uID0gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLmxvYWRDb25maWd1cmF0aW9uKHRoaXMudGFibGVPcHRpb24pO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb25SZXN1bHQgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvblNlcnZpY2UubG9hZENvbmZpZ3VyYXRpb25SZXN1bHQodGhpcy50YWJsZU9wdGlvbiwgY29uZmlndXJhdGlvbik7XHJcbiAgICAgICAgY29uc3QgZGlzcGxheUNvbHVtbnMgPSBjb25maWd1cmF0aW9uUmVzdWx0LmRpc3BsYXllZENvbHVtbnMgfHwgW107XHJcbiAgICAgICAgdGhpcy4jbG9hZFZhbHVlcyh0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBkaXNwbGF5Q29sdW1ucy5pbmNsdWRlcyhjb2x1bW4uZmllbGQpKSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uUmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy4jb3B0aW9uQ2hhbmdlcy5uZXh0KHRoaXMudGFibGVPcHRpb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gICNvcHRpb25DaGFuZ2VzID0gbmV3IFN1YmplY3Q8U2RUYWJsZU9wdGlvbj4oKTtcclxuXHJcbiAgI2xvY2FsSXRlbXM6IFNkVGFibGVJdGVtPFQ+W10gPSBbXTtcclxuICBpdGVtczogU2RUYWJsZUl0ZW08VD5bXSA9IFtdO1xyXG4gIHNlbGVjdGVkVGFibGVJdGVtczogU2RUYWJsZUl0ZW08VD5bXSA9IFtdO1xyXG4gIHRvdGFsOiBudW1iZXI7XHJcblxyXG4gIC8vIExvYWRpbmdcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgLy8gUGFnaW5hdGVcclxuICBpc0hpZGRlblBhZ2luYXRvciA9IGZhbHNlO1xyXG4gICNwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgc2V0IHBhZ2luYXRvcihwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgaWYgKHBhZ2luYXRvciAmJiB0aGlzLiNwYWdpbmF0b3IgIT09IHBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLiNwYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgcGFnaW5hdG9yLnBhZ2VcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KHtcclxuICAgICAgICAgICAgICAgIGZvcmNlOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU29ydGluZ1xyXG4gICNzb3J0OiBNYXRTb3J0O1xyXG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc2V0IHNvcnQoc29ydDogTWF0U29ydCkge1xyXG4gICAgaWYgKHNvcnQgJiYgdGhpcy4jc29ydCAhPT0gc29ydCkge1xyXG4gICAgICB0aGlzLiNzb3J0ID0gc29ydDtcclxuICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICBzb3J0LnNvcnRDaGFuZ2VcclxuICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KHtcclxuICAgICAgICAgICAgICAgIGZvcmNlOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU3ViIEluZm9ybWF0aW9uXHJcbiAgQENvbnRlbnRDaGlsZChTZE1hdGVyaWFsU3ViSW5mb3JtYXRpb25EZWZEaXJlY3RpdmUpXHJcbiAgc2RTdWJJbmZvcm1hdGlvbjogU2RNYXRlcmlhbFN1YkluZm9ybWF0aW9uRGVmRGlyZWN0aXZlO1xyXG5cclxuICAvLyBDZWxsIERlZlxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RUYWJlbENlbGxEZWZEaXJlY3RpdmUpIHNkQ2VsbERlZnMgPSBuZXcgUXVlcnlMaXN0PFNkVGFiZWxDZWxsRGVmRGlyZWN0aXZlPigpO1xyXG4gIGNlbGxEZWY6IHtcclxuICAgIFtjb2x1bW46IHN0cmluZ106IFNkVGFiZWxDZWxsRGVmRGlyZWN0aXZlO1xyXG4gIH0gPSB7fTtcclxuXHJcbiAgLy8gRm9vdGVyIERlZlxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RNYXRlcmlhbEZvb3RlckRlZkRpcmVjdGl2ZSkgc2RGb290ZXJEZWZzID0gbmV3IFF1ZXJ5TGlzdDxTZE1hdGVyaWFsRm9vdGVyRGVmRGlyZWN0aXZlPigpO1xyXG4gIGZvb3RlckRlZjoge1xyXG4gICAgW2NvbHVtbjogc3RyaW5nXTogU2RNYXRlcmlhbEZvb3RlckRlZkRpcmVjdGl2ZTtcclxuICB9ID0ge307XHJcbiAgaGFzRm9vdGVyID0gZmFsc2U7XHJcblxyXG4gIC8vIEZpbHRlciBEZWZcclxuICBAQ29udGVudENoaWxkcmVuKFNkTWF0ZXJpYWxGaWx0ZXJEZWZEaXJlY3RpdmUpIHNkRmlsdGVyRGVmcyA9IG5ldyBRdWVyeUxpc3Q8U2RNYXRlcmlhbEZpbHRlckRlZkRpcmVjdGl2ZT4oKTtcclxuICBmaWx0ZXJEZWZzOiBTZE1hdGVyaWFsRmlsdGVyRGVmRGlyZWN0aXZlW10gPSBbXTtcclxuXHJcbiAgLy8gRmlsdGVyXHJcbiAgY29sdW1uT3BlcmF0b3I6IFJlY29yZDxzdHJpbmcsIFNkRmlsdGVyT3BlcmF0b3I+ID0ge307XHJcbiAgY29sdW1uRmlsdGVyOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgLy8gU3ViY3JpcHRpb25cclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICNyZWxvYWQgPSBuZXcgU3ViamVjdDx7XHJcbiAgICBmb3JjZTogYm9vbGVhbjtcclxuICB9PigpO1xyXG4gIGlzRXhwb3J0aW5nID0gZmFsc2U7XHJcbiAgaXNTZWxlY3RBbGwgPSBmYWxzZTtcclxuICBleHBvcnRUaXRsZSA9ICdFeHBvcnQnO1xyXG4gICNsb2FkQ29tcGxldGVkID0gZmFsc2U7XHJcbiAgY2FjaGVWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IHt9O1xyXG4gICNjYWNoZU9ialZhbHVlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4gPSB7fTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEBJbmplY3QoVEFCTEVfQ09ORklHKVxyXG4gICAgQE9wdGlvbmFsKClcclxuICAgIHB1YmxpYyB0YWJsZUNvbmZpZ3VyYXRpb246IElTZFRhYmxlQ29uZmlndXJhdGlvbixcclxuICAgIHByaXZhdGUgdGFibGVDb25maWd1cmF0aW9uU2VydmljZTogU2RUYWJsZUNvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBTZEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2U6IFNkTm90aWZ5U2VydmljZSxcclxuICAgIHByaXZhdGUgZ3JpZEZpbHRlclNlcnZpY2U6IFNkVGFibGVGaWx0ZXJTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuI2luaXRDZWxsRGVmKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLiNyZWxvYWRcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgyMDApLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKGFzeW5jIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJJbmZvID0gdGhpcy4jZ2V0RmlsdGVyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuI2xvYWQoZmlsdGVySW5mbywgIXRoaXMuI2xvYWRDb21wbGV0ZWQgfHwgZGF0YS5mb3JjZSk7XHJcbiAgICAgICAgICAgIHRoaXMuI2xvYWRDb21wbGV0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSh0aGlzLiNyZW5kZXIpXHJcbiAgICApO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNkQ2VsbERlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSh0aGlzLiNpbml0Q2VsbERlZikpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNkRm9vdGVyRGVmcy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKFtdKSkuc3Vic2NyaWJlKHRoaXMuI2luaXRGb290ZXJEZWYpKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZEZpbHRlckRlZnMuY2hhbmdlcy5waXBlKHN0YXJ0V2l0aChbXSkpLnN1YnNjcmliZSh0aGlzLiNpbml0RmlsdGVyRGVmKSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgICB0aGlzLiNvcHRpb25DaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMudGFibGVPcHRpb24pKSxcclxuICAgICAgICB0aGlzLnNkRmlsdGVyRGVmcy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuZmlsdGVyRGVmcykpLFxyXG4gICAgICBdKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuI2xvYWRGaWx0ZXJSZWdpc3RlcigpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuI29wdGlvbkNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJSZWdpc3Rlcikge1xyXG4gICAgICAgICAgdGhpcy4jcmVsb2FkLm5leHQoe1xyXG4gICAgICAgICAgICBmb3JjZTogdHJ1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgI2luaXRDZWxsRGVmID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jZWxsRGVmID0ge307XHJcbiAgICBmb3IgKGNvbnN0IGNlbGxEZWYgb2YgdGhpcy5zZENlbGxEZWZzKSB7XHJcbiAgICAgIGlmIChjZWxsRGVmLnNkVGFibGVDZWxsRGVmKSB7XHJcbiAgICAgICAgdGhpcy5jZWxsRGVmW2NlbGxEZWYuc2RUYWJsZUNlbGxEZWZdID0gY2VsbERlZjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNpbml0RmlsdGVyRGVmID0gKCkgPT4ge1xyXG4gICAgdGhpcy5maWx0ZXJEZWZzID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGZpbHRlckRlZiBvZiB0aGlzLnNkRmlsdGVyRGVmcykge1xyXG4gICAgICB0aGlzLmZpbHRlckRlZnMucHVzaChmaWx0ZXJEZWYpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNpbml0Rm9vdGVyRGVmID0gKCkgPT4ge1xyXG4gICAgdGhpcy5mb290ZXJEZWYgPSB7fTtcclxuICAgIHRoaXMuaGFzRm9vdGVyID0gZmFsc2U7XHJcbiAgICBmb3IgKGNvbnN0IGZvb3RlckRlZiBvZiB0aGlzLnNkRm9vdGVyRGVmcykge1xyXG4gICAgICBpZiAoZm9vdGVyRGVmLnNkVGFibGVGb290ZXJEZWYpIHtcclxuICAgICAgICB0aGlzLmhhc0Zvb3RlciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb290ZXJEZWZbZm9vdGVyRGVmLnNkVGFibGVGb290ZXJEZWZdID0gZm9vdGVyRGVmO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgI2ZpbHRlckV4cG9ydEluZm8gPSAocGFnZU51bWJlcjogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyKTogU2RUYWJsZUZpbHRlclJlcXVlc3QgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5PcGVyYXRvciwgY29sdW1uRmlsdGVyLCBleHRlcm5hbEZpbHRlciwgZmlsdGVyRGVmIH0gPSB0aGlzLmZpbHRlclJlZ2lzdGVyLnZhbHVlLmdldCgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29sdW1uT3BlcmF0b3I6IGNvbHVtbk9wZXJhdG9yIHx8IHt9LFxyXG4gICAgICByYXdDb2x1bW5GaWx0ZXI6IGNvbHVtbkZpbHRlciB8fCB7fSxcclxuICAgICAgcmF3RXh0ZXJuYWxGaWx0ZXI6IGV4dGVybmFsRmlsdGVyIHx8IHt9LFxyXG4gICAgICByYXdGaWx0ZXJEZWY6IGZpbHRlckRlZiB8fCB7fSxcclxuICAgICAgb3JkZXJCeTogdGhpcy4jc29ydD8uYWN0aXZlIHx8ICcnLFxyXG4gICAgICBvcmRlckRpcmVjdGlvbjogdGhpcy4jc29ydD8uZGlyZWN0aW9uIHx8ICcnLFxyXG4gICAgICBwYWdlTnVtYmVyLFxyXG4gICAgICBwYWdlU2l6ZSxcclxuICAgICAgaXNFeHBvcnRlZDogdHJ1ZSxcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgI2luaXRDb25maWd1cmF0aW9uID0gKG9wdGlvbjogU2RUYWJsZU9wdGlvbikgPT4ge1xyXG4gICAgLy8gSW5pdCBwYWdpbmF0aW9uXHJcbiAgICBvcHRpb24ucGFnaW5hdGUgPSB7XHJcbiAgICAgIGhpZGRlbjogb3B0aW9uPy5wYWdpbmF0ZT8uaGlkZGVuLFxyXG4gICAgICBwYWdlU2l6ZTogb3B0aW9uPy5wYWdpbmF0ZT8ucGFnZVNpemUgPz8gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24/LnBhZ2luYXRlPy5wYWdlU2l6ZSA/PyBERUZBVUxUX1RBQkxFX0NPTkZJRy5wYWdpbmF0ZT8ucGFnZVNpemUsXHJcbiAgICAgIHBhZ2VzOiBvcHRpb24/LnBhZ2luYXRlPy5wYWdlcyA/PyB0aGlzLnRhYmxlQ29uZmlndXJhdGlvbj8ucGFnaW5hdGU/LnBhZ2VzID8/IERFRkFVTFRfVEFCTEVfQ09ORklHLnBhZ2luYXRlPy5wYWdlcyxcclxuICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnM6IG9wdGlvbj8ucGFnaW5hdGU/LnNob3dGaXJzdExhc3RCdXR0b25zID8/IGZhbHNlLFxyXG4gICAgfTtcclxuICAgIGZvciAoY29uc3QgY29sdW1uIG9mIG9wdGlvbi5jb2x1bW5zIHx8IFtdKSB7XHJcbiAgICAgIGlmIChjb2x1bW4uZmlsdGVyPy5vcGVyYXRvcj8uZW5hYmxlICYmICFjb2x1bW4uZmlsdGVyPy5vcGVyYXRvcj8ubGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgY29sdW1uLmZpbHRlci5vcGVyYXRvci5saXN0ID0gdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24/LmZpbHRlcj8ub3BlcmF0b3I/LmRlZmF1bHRMaXN0U3RyaW5nIHx8IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBjb2x1bW4uZmlsdGVyLm9wZXJhdG9yLmxpc3QgPSB0aGlzLnRhYmxlQ29uZmlndXJhdGlvbj8uZmlsdGVyPy5vcGVyYXRvcj8uZGVmYXVsdExpc3ROdW1iZXIgfHwgW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycgfHwgY29sdW1uLnR5cGUgPT09ICdsYXp5LXZhbHVlcycpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXIub3BlcmF0b3IubGlzdCA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uPy5maWx0ZXI/Lm9wZXJhdG9yPy5kZWZhdWx0TGlzdFZhbHVlcyB8fCBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScgfHwgY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgIGNvbHVtbi5maWx0ZXIub3BlcmF0b3IubGlzdCA9IHRoaXMudGFibGVDb25maWd1cmF0aW9uPy5maWx0ZXI/Lm9wZXJhdG9yPy5kZWZhdWx0TGlzdERhdGUgfHwgW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3B0aW9uO1xyXG4gIH07XHJcblxyXG4gICNsb2FkRmlsdGVyUmVnaXN0ZXIgPSAoKSA9PiB7XHJcbiAgICAvLyBJbml0IGZpbHRlclxyXG4gICAgaWYgKHRoaXMudGFibGVPcHRpb24pIHtcclxuICAgICAgaWYgKCF0aGlzLmZpbHRlclJlZ2lzdGVyKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJSZWdpc3RlciA9IHRoaXMuZ3JpZEZpbHRlclNlcnZpY2UucmVnaXN0ZXIodGhpcy50YWJsZU9wdGlvbj8uZmlsdGVyLCB7XHJcbiAgICAgICAgICBpZDogdGhpcy4jZ3JpZElkLFxyXG4gICAgICAgICAgY29sdW1uczogdGhpcy50YWJsZU9wdGlvbj8uY29sdW1ucyxcclxuICAgICAgICAgIGV4dGVybmFsRmlsdGVyczogdGhpcy50YWJsZU9wdGlvbj8uZmlsdGVyPy5leHRlcm5hbEZpbHRlcnMsXHJcbiAgICAgICAgICBmaWx0ZXJEZWZzOiB0aGlzLmZpbHRlckRlZnMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUmVnaXN0ZXIudmFsdWUub2JzZXJ2ZXJcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXHJcbiAgICAgICAgICAgICAgbWFwKGZpbHRlclZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29sdW1uT3BlcmF0b3IsIGNvbHVtbkZpbHRlciwgbm90UmVsb2FkIH0gPSBmaWx0ZXJWYWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uT3BlcmF0b3IgPSBjb2x1bW5PcGVyYXRvciB8fCB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRmlsdGVyID0gY29sdW1uRmlsdGVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub3RSZWxvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuI3BhZ2luYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuI3JlbG9hZC5uZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JjZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNmaWx0ZXJMb2NhbCA9IChsb2NhbEl0ZW1zOiBTZFRhYmxlSXRlbTxUPltdLCBmaWx0ZXJJbmZvOiBTZFRhYmxlRmlsdGVyUmVxdWVzdCkgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5zIH0gPSB0aGlzLnRhYmxlT3B0aW9uO1xyXG4gICAgY29uc3QgeyByYXdDb2x1bW5GaWx0ZXIsIG9yZGVyQnksIG9yZGVyRGlyZWN0aW9uLCBwYWdlU2l6ZSwgcGFnZU51bWJlciB9ID0gZmlsdGVySW5mbztcclxuICAgIGNvbnN0IGl0ZW1zID0gbG9jYWxJdGVtcy5maWx0ZXIodGFibGVJdGVtID0+IHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRhYmxlSXRlbS5kYXRhO1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcbiAgICAgICAgY29uc3QgeyBmaWVsZCwgdHlwZSB9ID0gY29sdW1uO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlclZhbHVlOiBzdHJpbmcgPSAocmF3Q29sdW1uRmlsdGVyW2ZpZWxkIGFzIHN0cmluZ10gfHwgJycpLnRvU3RyaW5nKCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgY29sdW1uVmFsdWU6IHN0cmluZyA9IChpdGVtW2ZpZWxkXSB8fCAnJykudG9TdHJpbmcoKS50cmltKCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBpZiAoZmlsdGVyVmFsdWUpIHtcclxuICAgICAgICAgIGlmICghY29sdW1uVmFsdWUgJiYgdHlwZSAhPT0gJ2RhdGV0aW1lJyAmJiB0eXBlICE9PSAnZGF0ZScgJiYgdHlwZSAhPT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uVmFsdWUuaW5kZXhPZihmaWx0ZXJWYWx1ZSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICd2YWx1ZXMnIHx8IHR5cGUgPT09ICdsYXp5LXZhbHVlcycpIHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtblZhbHVlICE9PSBmaWx0ZXJWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICBjb25zdCBmVmFsdWUgPSArZmlsdGVyVmFsdWUucmVwbGFjZSgnPj0nLCAnJykucmVwbGFjZSgnPD0nLCAnJykucmVwbGFjZSgnPicsICcnKS5yZXBsYWNlKCc8JywgJycpO1xyXG4gICAgICAgICAgICBjb25zdCBjVmFsdWUgPSArY29sdW1uVmFsdWU7XHJcbiAgICAgICAgICAgIGlmIChmVmFsdWUgfHwgZlZhbHVlID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCFjVmFsdWUgJiYgY1ZhbHVlICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc+PScpID4gLTEgJiYgY1ZhbHVlIDwgZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc8PScpID4gLTEgJiYgY1ZhbHVlID4gZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc8JykgPiAtMSAmJiBjVmFsdWUgPj0gZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJWYWx1ZS5pbmRleE9mKCc+JykgPiAtMSAmJiBjVmFsdWUgPD0gZlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjVmFsdWUgIT09IGZWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnYm9vbCcpIHtcclxuICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlID09PSAnMScgJiYgY29sdW1uVmFsdWUgIT09ICcxJyAmJiBjb2x1bW5WYWx1ZSAhPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclZhbHVlID09PSAnMCcgJiYgY29sdW1uVmFsdWUgIT09ICcwJyAmJiBjb2x1bW5WYWx1ZSAhPT0gJ2ZhbHNlJykge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGF0ZXRpbWUnIHx8IHR5cGUgPT09ICdkYXRlJyB8fCB0eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgICAgY29uc3QgZnJvbSA9IHJhd0NvbHVtbkZpbHRlcltmaWVsZF0/LmZyb20gPz8gcmF3Q29sdW1uRmlsdGVyW2ZpZWxkXTtcclxuICAgICAgICAgICAgY29uc3QgdG8gPSByYXdDb2x1bW5GaWx0ZXJbZmllbGRdPy50byA/PyByYXdDb2x1bW5GaWx0ZXJbZmllbGRdO1xyXG4gICAgICAgICAgICBjb25zdCBmcm9tRGF0ZSA9IERhdGUuYmVnaW4oZnJvbSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvRGF0ZSA9IERhdGUuZW5kKHRvKTtcclxuICAgICAgICAgICAgaWYgKGZyb21EYXRlIHx8IHRvRGF0ZSkge1xyXG4gICAgICAgICAgICAgIGlmICghY29sdW1uVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGNvbHVtblRpbWUgPSBuZXcgRGF0ZShjb2x1bW5WYWx1ZSkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZyb21EYXRlVGltZSA9IGZyb21EYXRlPy5nZXRUaW1lKCkgfHwgbnVsbDtcclxuICAgICAgICAgICAgICBjb25zdCB0b0RhdGVUaW1lID0gdG9EYXRlPy5nZXRUaW1lKCkgfHwgbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZyb21EYXRlVGltZSAmJiBmcm9tRGF0ZVRpbWUgPiBjb2x1bW5UaW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICh0b0RhdGVUaW1lICYmIGNvbHVtblRpbWUgPiB0b0RhdGVUaW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSk7XHJcbiAgICAvLyBTb3J0XHJcbiAgICBpZiAob3JkZXJCeSAmJiBvcmRlckRpcmVjdGlvbikge1xyXG4gICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoZSA9PiBlLmZpZWxkID09PSBvcmRlckJ5KTtcclxuICAgICAgaWYgKGNvbHVtbikge1xyXG4gICAgICAgIGNvbnN0IHsgdHlwZSwgZmllbGQgfSA9IGNvbHVtbjtcclxuICAgICAgICBpdGVtcy5zb3J0KCh0YWJsZUl0ZW1DdXJyZW50LCB0YWJsZUl0ZW1OZXh0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhID0gdGFibGVJdGVtQ3VycmVudC5kYXRhO1xyXG4gICAgICAgICAgY29uc3QgbmV4dCA9IHRhYmxlSXRlbU5leHQuZGF0YTtcclxuICAgICAgICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICByZXR1cm4gKGRhdGFbZmllbGQgYXMgc3RyaW5nXSB8fCAwKSAtIChuZXh0W2ZpZWxkIGFzIHN0cmluZ10gfHwgMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2RhdGUnIHx8IHR5cGUgPT09ICdkYXRldGltZScgfHwgdHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGQxID0gbmV3IERhdGUoZGF0YVtmaWVsZCBhcyBzdHJpbmddIHx8ICcnKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGQyID0gbmV3IERhdGUoZGF0YVtmaWVsZCBhcyBzdHJpbmddIHx8ICcnKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBkMSAtIGQyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgczEgPSAoZGF0YVtmaWVsZF0gfHwgJycpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICBjb25zdCBzMiA9IChuZXh0W2ZpZWxkXSB8fCAnJykudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGlmIChzMSA+IHMyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHMxIDwgczIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKG9yZGVyRGlyZWN0aW9uID09PSAnZGVzYycpIHtcclxuICAgICAgICAgIGl0ZW1zLnJldmVyc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGl0ZW1zOiBpdGVtcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGluZGV4ID49IHBhZ2VOdW1iZXIgKiBwYWdlU2l6ZSAmJiBpbmRleCA8IChwYWdlTnVtYmVyICsgMSkgKiBwYWdlU2l6ZTtcclxuICAgICAgfSksXHJcbiAgICAgIHRvdGFsOiBpdGVtcy5sZW5ndGgsXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNnZXRGaWx0ZXIgPSAoKTogU2RUYWJsZUZpbHRlclJlcXVlc3QgPT4ge1xyXG4gICAgY29uc3QgeyBjb2x1bW5PcGVyYXRvciwgY29sdW1uRmlsdGVyLCBleHRlcm5hbEZpbHRlciwgZmlsdGVyRGVmIH0gPSB0aGlzLmZpbHRlclJlZ2lzdGVyLnZhbHVlLmdldCgpO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29sdW1uT3BlcmF0b3I6IGNvbHVtbk9wZXJhdG9yIHx8IHt9LFxyXG4gICAgICByYXdDb2x1bW5GaWx0ZXI6IGNvbHVtbkZpbHRlciB8fCB7fSxcclxuICAgICAgcmF3RXh0ZXJuYWxGaWx0ZXI6IGV4dGVybmFsRmlsdGVyIHx8IHt9LFxyXG4gICAgICByYXdGaWx0ZXJEZWY6IGZpbHRlckRlZiB8fCB7fSxcclxuICAgICAgb3JkZXJCeTogdGhpcy4jc29ydD8uYWN0aXZlIHx8ICcnLFxyXG4gICAgICBvcmRlckRpcmVjdGlvbjogdGhpcy4jc29ydD8uZGlyZWN0aW9uIHx8ICcnLFxyXG4gICAgICBwYWdlTnVtYmVyOiB0aGlzLiNwYWdpbmF0b3I/LnBhZ2VJbmRleCB8fCAwLFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy4jcGFnaW5hdG9yPy5wYWdlU2l6ZSB8fCB0aGlzLnRhYmxlT3B0aW9uPy5wYWdpbmF0ZT8ucGFnZVNpemUgfHwgNTAsXHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gICNsb2FkID0gYXN5bmMgKGZpbHRlclJlcTogU2RUYWJsZUZpbHRlclJlcXVlc3QsIGZvcmNlOiBib29sZWFuID0gdHJ1ZSkgPT4ge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMudGFibGVPcHRpb24udHlwZSA9PT0gJ3NlcnZlcicpIHtcclxuICAgICAgY29uc3QgeyBpdGVtcyB9ID0gdGhpcy50YWJsZU9wdGlvbjtcclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGl0ZW1zKGZpbHRlclJlcSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uubm90aWZ5Lndhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYScpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgaXRlbXM6IFtdIGFzIFRbXSxcclxuICAgICAgICAgIHRvdGFsOiAwLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGl0ZW1zOiBhd2FpdCB0aGlzLiNmb3JtYXQoZGF0YT8uaXRlbXMsIHRoaXMudGFibGVPcHRpb24uY29sdW1ucyksXHJcbiAgICAgICAgdG90YWw6IGRhdGE/LnRvdGFsIHx8IDAsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoZm9yY2UpIHtcclxuICAgICAgY29uc3QgeyBpdGVtcyB9ID0gdGhpcy50YWJsZU9wdGlvbjtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IGl0ZW1zKCk7XHJcbiAgICAgIGxldCBkYXRhOiBUW10gPSBbXTtcclxuICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgZGF0YSA9IGF3YWl0IHJlc3VsdHMuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhJyk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGF0YSA9IHJlc3VsdHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGEpKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKCdE4buvIGxp4buHdSBraMO0bmcgcGjhuqNpIGzDoCBt4buZdCBt4bqjbmcnKTtcclxuICAgICAgICBkYXRhID0gW107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy4jbG9jYWxJdGVtcyA9IGF3YWl0IHRoaXMuI2Zvcm1hdChkYXRhLCB0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIHJldHVybiB0aGlzLiNmaWx0ZXJMb2NhbCh0aGlzLiNsb2NhbEl0ZW1zLCBmaWx0ZXJSZXEpO1xyXG4gIH07XHJcblxyXG4gICNyZW5kZXIgPSBhc3luYyAoYXJnczogeyBpdGVtczogU2RUYWJsZUl0ZW08VD5bXTsgdG90YWw6IG51bWJlciB9KSA9PiB7XHJcbiAgICB0aGlzLnNkU2Nyb2xsPy5zY3JvbGxUb3AoKTtcclxuICAgIHRoaXMuaXRlbXMgPSBhcmdzPy5pdGVtcyB8fCBbXTtcclxuICAgIHRoaXMudG90YWwgPSBhcmdzPy50b3RhbCB8fCAwO1xyXG4gICAgYXdhaXQgdGhpcy50YWJsZU9wdGlvbj8ucmVsb2FkPy5vblJlbG9hZD8uKHRoaXMuaXRlbXMpO1xyXG4gICAgdGhpcy5pc1NlbGVjdEFsbCA9IHRoaXMuaXRlbXMuZXZlcnkoZSA9PiBlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCk7XHJcbiAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgfTtcclxuXHJcbiAgcmVsb2FkID0gYXN5bmMgKGZvcmNlOiBib29sZWFuID0gdHJ1ZSkgPT4ge1xyXG4gICAgdGhpcy50YWJsZUZpbHRlcj8udXBkYXRlRmlsdGVyPy4oKTtcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLiNsb2FkKHRoaXMuI2dldEZpbHRlcigpLCBmb3JjZSk7XHJcbiAgICB0aGlzLiNyZW5kZXIoZGF0YSk7XHJcbiAgfTtcclxuXHJcbiAgI2V4cG9ydGVkSXRlbXMgPSBhc3luYyAocGFnZU51bWJlcjogbnVtYmVyID0gMCwgcGFnZVNpemU6IG51bWJlciA9IDEwMDAwKSA9PiB7XHJcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbi5leHBvcnQ/Lml0ZW1zKSB7XHJcbiAgICAgIC8vIGNvbnN0IGV4cG9ydGVkSXRlbXMgPSB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5pdGVtcyh0aGlzLiNmaWx0ZXJFeHBvcnRJbmZvKHBhZ2VOdW1iZXIsIHBhZ2VTaXplKSk7XHJcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydD8uaXRlbXModGhpcy4jZmlsdGVyRXhwb3J0SW5mbyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSkpO1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNPYnNlcnZhYmxlPGFueVtdPihyZXN1bHQpKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRvUHJvbWlzZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpc09ic2VydmFibGU8eyBpdGVtczogYW55W107IHRvdGFsOiBudW1iZXIgfT4ocmVzdWx0KSkge1xyXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC50b1Byb21pc2UoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdWx0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlsdGVySW5mbyA9IHRoaXMuI2ZpbHRlckV4cG9ydEluZm8ocGFnZU51bWJlciwgcGFnZVNpemUpO1xyXG4gICAgICBpZiAodGhpcy50YWJsZU9wdGlvbi50eXBlID09PSAnc2VydmVyJykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLnRhYmxlT3B0aW9uLml0ZW1zKGZpbHRlckluZm8pO1xyXG4gICAgICAgIHJldHVybiBhd2FpdCByZXN1bHQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGV4cG9ydGVkSXRlbXM6IGFueVtdID0gW107XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRhYmxlT3B0aW9uLml0ZW1zID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy50YWJsZU9wdGlvbi5pdGVtcygpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIGV4cG9ydGVkSXRlbXMgPSBhd2FpdCByZXN1bHRzO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXhwb3J0ZWRJdGVtcyA9IHJlc3VsdHM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGV4cG9ydGVkSXRlbXMgPSB0aGlzLnRhYmxlT3B0aW9uLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy4jZmlsdGVyTG9jYWwoZXhwb3J0ZWRJdGVtcywgZmlsdGVySW5mbyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG5cclxuICAjYWxsQ29sdW1ucyA9ICgpOiBTZFRhYmxlQ29sdW1uW10gPT4ge1xyXG4gICAgY29uc3QgY29sdW1uczogU2RUYWJsZUNvbHVtbltdID0gW107XHJcbiAgICB0aGlzLnRhYmxlT3B0aW9uLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpXHJcbiAgICAgIC5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4uY2hpbGRyZW5cclxuICAgICAgICAgICAgPy5maWx0ZXIoZSA9PiAhZS5leHBvcnQ/LmRpc2FibGVkKVxyXG4gICAgICAgICAgICAuZm9yRWFjaChjaGlsZENvbHVtbiA9PiB7XHJcbiAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKGNoaWxkQ29sdW1uKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbHVtbnMucHVzaChjb2x1bW4pO1xyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBjb2x1bW5zO1xyXG4gIH07XHJcblxyXG4gICNhbGxFeHBvcnRlZENvbHVtbnMgPSAoKTogU2RUYWJsZU9wdGlvbkV4cG9ydENvbHVtbltdID0+IHtcclxuICAgIHJldHVybiB0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydD8uY29sdW1ucz8uZmlsdGVyKGUgPT4gIWUuZXhwb3J0Py5kaXNhYmxlZCkgfHwgW107XHJcbiAgfTtcclxuXHJcbiAgI29uRXhwb3J0ID0gYXN5bmMgKGlzQ1NWPzogYm9vbGVhbikgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGNvbHVtbnMgPSB0aGlzLiNnZXRFeHBvcnRDb2x1bW5zKCk7XHJcbiAgICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5tYXhJdGVtc1BlclJlcXVlc3QgfHwgMTAwMDtcclxuICAgICAgY29uc3QgYmF0Y2ggPSB0aGlzLnRhYmxlT3B0aW9uPy5leHBvcnQ/LmJhdGNoIHx8IDE7XHJcbiAgICAgIGxldCB0b3RhbCA9IHRoaXMudG90YWw7XHJcbiAgICAgIGxldCBwYWdlTnVtYmVyID0gMDtcclxuICAgICAgbGV0IGV4cG9ydEl0ZW1zID0gW107XHJcbiAgICAgIHRoaXMuaXNFeHBvcnRpbmcgPSB0cnVlO1xyXG4gICAgICBjb25zdCBpdGVtczogYW55W10gPSBbXTtcclxuICAgICAgbGV0IHByb21pc2VzOiBQcm9taXNlPFxyXG4gICAgICAgIHwgYW55W11cclxuICAgICAgICB8IHtcclxuICAgICAgICAgICAgaXRlbXM6IGFueVtdO1xyXG4gICAgICAgICAgICB0b3RhbDogbnVtYmVyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICA+W10gPSBbXTtcclxuICAgICAgY29uc3QgaGFuZGxlRGF0YSA9IGFzeW5jICgpID0+IHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIHByb21pc2VzID0gW107XHJcbiAgICAgICAgZXhwb3J0SXRlbXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgICBpZiAoJ2l0ZW1zJyBpbiByZXN1bHQpIHtcclxuICAgICAgICAgICAgZXhwb3J0SXRlbXMgPSBbLi4uZXhwb3J0SXRlbXMsIC4uLnJlc3VsdC5pdGVtc107XHJcbiAgICAgICAgICAgIHRvdGFsID0gcmVzdWx0LnRvdGFsO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXhwb3J0SXRlbXMgPSBbLi4uZXhwb3J0SXRlbXMsIC4uLnJlc3VsdF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydD8ubWFwcGluZykge1xyXG4gICAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMudGFibGVPcHRpb24uZXhwb3J0Lm1hcHBpbmcoZXhwb3J0SXRlbXMpO1xyXG4gICAgICAgICAgaWYgKHJlc3VsdHMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgIGV4cG9ydEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4cG9ydEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdG90YWxQYWdlID0gdG90YWwgLyBwYWdlU2l6ZTtcclxuICAgICAgICBjb25zdCBwZXJjZW50ID0gTWF0aC5yb3VuZCgoKHBhZ2VOdW1iZXIgLSAxKSAqIDEwMC4wKSAvIHRvdGFsUGFnZSk7XHJcbiAgICAgICAgdGhpcy5leHBvcnRUaXRsZSA9IGBFeHBvcnRpbmcuLi4ke3BlcmNlbnR9JWA7XHJcbiAgICAgICAgY29uc3QgYWxsQ29sdW1ucyA9IHRoaXMuI2FsbENvbHVtbnMoKTtcclxuICAgICAgICBjb25zdCBhbGxFeHBvcnRlZENvbHVtbnMgPSB0aGlzLiNhbGxFeHBvcnRlZENvbHVtbnMoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZXhwb3J0SXRlbXMpIHtcclxuICAgICAgICAgIGNvbnN0IG9iajogYW55ID0ge307XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBhc3luYyAoZXhwb3J0Q29sdW1uOiBTZEV4cG9ydENvbHVtbikgPT4ge1xyXG4gICAgICAgICAgICBvYmpbZXhwb3J0Q29sdW1uLmZpZWxkXSA9IGl0ZW1bZXhwb3J0Q29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gYWxsQ29sdW1ucy5maW5kKGUgPT4gZS5maWVsZCA9PT0gZXhwb3J0Q29sdW1uLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgZXhwb3J0ZWRDb2x1bW4gPSBhbGxFeHBvcnRlZENvbHVtbnMuZmluZChlID0+IGUuZmllbGQgPT09IGV4cG9ydENvbHVtbi5maWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChleHBvcnRlZENvbHVtbj8udHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgb2JqW2V4cG9ydGVkQ29sdW1uLmZpZWxkXSA9IGV4cG9ydGVkQ29sdW1uLnRyYW5zZm9ybShpdGVtW2V4cG9ydGVkQ29sdW1uLmZpZWxkXSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghY29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgICAgICAgIGNvbHVtbj8uY2hpbGRyZW4uZm9yRWFjaChjaGlsZENvbHVtbiA9PiBoYW5kbGUoY2hpbGRDb2x1bW4pKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFjb2x1bW5zLnNvbWUoZSA9PiBlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHJhbnNmb3JtKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdHJhbnNmb3JtID0gY29sdW1uLnRyYW5zZm9ybShpdGVtW2NvbHVtbi5maWVsZF0sIGl0ZW0sIHtcclxuICAgICAgICAgICAgICAgIGlzRXhwb3J0OiB0cnVlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0gaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGF3YWl0IHRyYW5zZm9ybTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSB0cmFuc2Zvcm07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gb2JqW2NvbHVtbi5maWVsZF0gPz8gJyc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbVtjb2x1bW4uZmllbGRdID09PSB1bmRlZmluZWQgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSBudWxsIHx8IGl0ZW1bY29sdW1uLmZpZWxkXSA9PT0gJycpIHtcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9ICcnO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBjZWxsIGzDoCBzdHJpbmcgaG/hurdjIG51bWJlciB0aMOsIGfDoW4gYuG6sW5nIGNow61uaCBuw7NcclxuICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgICAgLy8gTuG6v3UgbMOgIGJvb2wgdGjDrCBnw6FuIGLhurFuZyBnacOhIHRy4buLIHRydWVWYWx1ZSB2w6AgZmFsc2VWYWx1ZSAobuG6v3UgY8OzKSwgbeG6t2MgxJHhu4tuaCBsw6AgVFJVRS9GQUxTRVxyXG4gICAgICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLm9wdGlvbj8uZGlzcGxheU9uVHJ1ZSB8fCAnVHJ1ZSc7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmpbY29sdW1uLmZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIG9ialtjb2x1bW4uZmllbGRdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5vcHRpb24/LmRpc3BsYXlPbkZhbHNlIHx8ICdGYWxzZSc7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgICBsZXQgZGF0ZSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBEYXRlLnRvRm9ybWF0KGRhdGUsICdkZC9NTS95eXl5Jyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgICBsZXQgZGF0ZSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZXRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gRGF0ZS50b0Zvcm1hdChkYXRlLCAnZGQvTU0veXl5eSBISDptbScpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgICAgICBsZXQgZGF0ZSA9IGl0ZW1bY29sdW1uLmZpZWxkXTtcclxuICAgICAgICAgICAgICAvLyBO4bq/dSBsw6AgdGltZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBEYXRlLnRvRm9ybWF0KGRhdGUsICdISDptbScpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAndmFsdWVzJykge1xyXG4gICAgICAgICAgICAgIC8vIE7hur91IGzDoCB2YWx1ZXMgdGjDrCBs4bqleSBnacOhIHRy4buLIGPhu6dhIHZhbHVlIMSRxrDhu6NjIGNo4buNblxyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy4jY2FjaGVPYmpWYWx1ZXNbY29sdW1uLmZpZWxkXT8uW2l0ZW1bY29sdW1uLmZpZWxkXV0gfHwgaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgLy8gdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMuZm9yRWFjaChoYW5kbGUpO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBleHBvcnRDb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICAgICAgICBhd2FpdCBoYW5kbGUoZXhwb3J0Q29sdW1uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGl0ZW1zLnB1c2gob2JqKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHdoaWxlIChwYWdlTnVtYmVyICogcGFnZVNpemUgPCB0b3RhbCkge1xyXG4gICAgICAgIHByb21pc2VzLnB1c2godGhpcy4jZXhwb3J0ZWRJdGVtcyhwYWdlTnVtYmVyLCBwYWdlU2l6ZSkpO1xyXG4gICAgICAgIHBhZ2VOdW1iZXIrKztcclxuICAgICAgICBpZiAocHJvbWlzZXMubGVuZ3RoIDwgYmF0Y2gpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBoYW5kbGVEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb21pc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBhd2FpdCBoYW5kbGVEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGlzQ1NWKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydENTVih7XHJcbiAgICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgICAgaXRlbXMsXHJcbiAgICAgICAgICBmaWxlTmFtZTogdGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5maWxlTmFtZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2hlZXRzOiB7XHJcbiAgICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICAgIGl0ZW1zOiBhbnlbXTtcclxuICAgICAgICBmaWVsZHM6IHN0cmluZ1tdO1xyXG4gICAgICB9W10gPSBbXTtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5zaGVldHMpKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBzaGVldCBvZiB0aGlzLnRhYmxlT3B0aW9uLmV4cG9ydC5zaGVldHMpIHtcclxuICAgICAgICAgIGlmIChzaGVldC5uYW1lICYmIHNoZWV0Lml0ZW1zICYmIHNoZWV0LmZpZWxkcykge1xyXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzaGVldC5pdGVtcykpIHtcclxuICAgICAgICAgICAgICBzaGVldHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBzaGVldC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlbXM6IHNoZWV0Lml0ZW1zLFxyXG4gICAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHMsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2hlZXRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogc2hlZXQubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBhd2FpdCBzaGVldC5pdGVtcygpLFxyXG4gICAgICAgICAgICAgICAgZmllbGRzOiBzaGVldC5maWVsZHMsXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgYXdhaXQgdGhpcy5leHBvcnRTZXJ2aWNlLmV4cG9ydCh7XHJcbiAgICAgICAgY29sdW1ucyxcclxuICAgICAgICBpdGVtcyxcclxuICAgICAgICBmaWxlTmFtZTogdGhpcy50YWJsZU9wdGlvbj8uZXhwb3J0Py5maWxlTmFtZSxcclxuICAgICAgICBzaGVldHMsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGZpbmFsbHkge1xyXG4gICAgICB0aGlzLmlzRXhwb3J0aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZXhwb3J0VGl0bGUgPSBgRXhwb3J0YDtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gICNnZXRFeHBvcnRDb2x1bW5zID0gKCkgPT4ge1xyXG4gICAgY29uc3QgY29sdW1ucyA9IFtcclxuICAgICAgLi4udGhpcy50YWJsZU9wdGlvbi5jb2x1bW5zLmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpLFxyXG4gICAgICAuLi4odGhpcy50YWJsZU9wdGlvbi5leHBvcnQ/LmNvbHVtbnM/LmZpbHRlcihlID0+ICFlLmV4cG9ydD8uZGlzYWJsZWQpIHx8IFtdKSxcclxuICAgIF07XHJcbiAgICByZXR1cm4gY29sdW1ucztcclxuICB9O1xyXG5cclxuICBleHBvcnRFeGNlbCA9ICgpID0+IHtcclxuICAgIHRoaXMuI29uRXhwb3J0KCk7XHJcbiAgfTtcclxuXHJcbiAgZXhwb3J0Q1NWID0gKCkgPT4ge1xyXG4gICAgdGhpcy4jb25FeHBvcnQodHJ1ZSk7XHJcbiAgfTtcclxuXHJcbiAgb25GaWx0ZXJDaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnRhYmxlRmlsdGVyPy51cGRhdGVGaWx0ZXI/LigpO1xyXG4gICAgdGhpcy5maWx0ZXJSZWdpc3Rlci52YWx1ZS5zZXQoe1xyXG4gICAgICBjb2x1bW5PcGVyYXRvcjogdGhpcy5jb2x1bW5PcGVyYXRvciB8fCB7fSxcclxuICAgICAgY29sdW1uRmlsdGVyOiB0aGlzLmNvbHVtbkZpbHRlcixcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIG9uRXhwYW5kID0gYXN5bmMgKHJvd0RhdGE6IFNkVGFibGVJdGVtPFQ+KSA9PiB7XHJcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbi5leHBhbmQ/LmFsd2F5cykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAocm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGVkKSB7XHJcbiAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuaXNFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy50YWJsZU9wdGlvbj8uZXhwYW5kPy5vbkV4cGFuZD8uKHJvd0RhdGEuZGF0YSk7XHJcbiAgICBpZiAoIXRoaXMudGFibGVPcHRpb24uZXhwYW5kPy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiAoaXRlbS5tZXRhLmV4cGFuZC5pc0V4cGFuZGluZyA9IGl0ZW0ubWV0YS5leHBhbmQuaXNFeHBhbmRlZCA9IGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgcm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGluZyA9IHRydWU7XHJcbiAgICAgIGRhdGFcclxuICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgcm93RGF0YS5tZXRhLmV4cGFuZC5kYXRhID0gcmVzO1xyXG4gICAgICAgICAgcm93RGF0YS5tZXRhLmV4cGFuZC5pc0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5maW5hbGx5KCgpID0+IChyb3dEYXRhLm1ldGEuZXhwYW5kLmlzRXhwYW5kaW5nID0gZmFsc2UpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuZGF0YSA9IGRhdGE7XHJcbiAgICAgIHJvd0RhdGEubWV0YS5leHBhbmQuaXNFeHBhbmRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgb25TZWxlY3QgPSAocm93RGF0YTogU2RUYWJsZUl0ZW08VD4pID0+IHtcclxuICAgIGlmIChyb3dEYXRhLm1ldGEuZ3JvdXA/Lml0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgcm93RGF0YS5tZXRhLmdyb3VwLml0ZW1zLmZvckVhY2goZSA9PiAoZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQgPSByb3dEYXRhLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCkpO1xyXG4gICAgICB0aGlzLnRhYmxlT3B0aW9uLnNlbGVjdG9yPy5vblNlbGVjdD8uKFxyXG4gICAgICAgIHJvd0RhdGEuZGF0YSxcclxuICAgICAgICB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKS5tYXAoZSA9PiBlLmRhdGEpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuaXNTZWxlY3RBbGwgPSB0aGlzLml0ZW1zLmV2ZXJ5KGUgPT4gZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQpO1xyXG4gICAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy50YWJsZU9wdGlvbi5zZWxlY3Rvcj8uc2luZ2xlKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoZSA9PiBlICE9PSByb3dEYXRhKS5mb3JFYWNoKGUgPT4gKGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkID0gZmFsc2UpKTtcclxuICAgICAgICB0aGlzLiN1cGRhdGVTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudGFibGVPcHRpb24uc2VsZWN0b3I/Lm9uU2VsZWN0Py4oXHJcbiAgICAgICAgcm93RGF0YS5kYXRhLFxyXG4gICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKGUgPT4gZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQpLm1hcChlID0+IGUuZGF0YSlcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pc1NlbGVjdEFsbCA9IHRoaXMuaXRlbXMuZXZlcnkoZSA9PiBlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCk7XHJcbiAgICAgIHRoaXMuI3VwZGF0ZVNlbGVjdGVkSXRlbXMoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBvblNlbGVjdEFsbCA9ICgpID0+IHtcclxuICAgIHRoaXMuaXRlbXM/LmZvckVhY2goZSA9PiB7XHJcbiAgICAgIGlmIChlLm1ldGEuc2VsZWN0b3Iuc2VsZWN0YWJsZSAmJiAoIXRoaXMudGFibGVPcHRpb24/LnNlbGVjdG9yPy5hY3Rpb25zPy5sZW5ndGggfHwgZS5tZXRhLnNlbGVjdG9yLmFjdGlvbnM/Lmxlbmd0aCkpIHtcclxuICAgICAgICBlLm1ldGEuc2VsZWN0b3IuaXNTZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RBbGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy50YWJsZU9wdGlvbi5zZWxlY3Rvcj8ub25TZWxlY3RBbGw/Lih0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKS5tYXAoZSA9PiBlLmRhdGEpKTtcclxuICAgIHRoaXMuI3VwZGF0ZVNlbGVjdGVkSXRlbXMoKTtcclxuICB9O1xyXG5cclxuICBvbkNsZWFyU2VsZWN0aW9uID0gKGl0ZW1zPzogU2RUYWJsZUl0ZW08VD5bXSkgPT4ge1xyXG4gICAgaXRlbXMgPSBpdGVtcyB8fCB0aGlzLml0ZW1zO1xyXG4gICAgdGhpcy5pc1NlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgaXRlbXM/LmZvckVhY2goZSA9PiAoZS5tZXRhLnNlbGVjdG9yLmlzU2VsZWN0ZWQgPSBmYWxzZSkpO1xyXG4gICAgdGhpcy4jdXBkYXRlU2VsZWN0ZWRJdGVtcygpO1xyXG4gIH07XHJcblxyXG4gICN1cGRhdGVTZWxlY3RlZEl0ZW1zID0gKCkgPT4ge1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYmxlSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0ubWV0YS5zZWxlY3Rvci5pc1NlbGVjdGVkKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9O1xyXG5cclxuICBjbGVhckZpbHRlciA9ICgpID0+IHtcclxuICAgIHRoaXMuZmlsdGVyUmVnaXN0ZXIudmFsdWUucmVtb3ZlKCk7XHJcbiAgfTtcclxuXHJcbiAgc2V0RmlsdGVyID0gKGFyZ3M6IHsgY29sdW1uRmlsdGVyPzogUmVjb3JkPHN0cmluZywgYW55PjsgZXh0ZXJuYWxGaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+OyBmaWx0ZXJEZWY/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0pID0+IHtcclxuICAgIGNvbnN0IHsgY29sdW1uRmlsdGVyLCBleHRlcm5hbEZpbHRlciwgZmlsdGVyRGVmIH0gPSBhcmdzIHx8IHt9O1xyXG4gICAgaWYgKGNvbHVtbkZpbHRlcikge1xyXG4gICAgICB0aGlzLmNvbHVtbkZpbHRlciA9IGNvbHVtbkZpbHRlcjtcclxuICAgIH1cclxuICAgIHRoaXMuZmlsdGVyUmVnaXN0ZXIudmFsdWUuc2V0KHtcclxuICAgICAgY29sdW1uRmlsdGVyLFxyXG4gICAgICBleHRlcm5hbEZpbHRlcixcclxuICAgICAgZmlsdGVyRGVmLFxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgZ2V0IGRhdGFJdGVtcygpOiBUW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5kYXRhKTtcclxuICB9XHJcblxyXG4gIGdldCBzZWxlY3RlZEl0ZW1zKCk6IFRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhYmxlSXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5kYXRhKTtcclxuICB9XHJcblxyXG4gIGRldGVjdENoYW5nZXMgPSAoKSA9PiB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICNsb2FkVmFsdWVzID0gYXN5bmMgKGNvbHVtbnM6IFNkVGFibGVDb2x1bW5bXSkgPT4ge1xyXG4gICAgY29uc3QgcHJvbWlzZXM6IFByb21pc2U8e1xyXG4gICAgICBrZXk6IHN0cmluZztcclxuICAgICAgdmFsdWVGaWVsZDogc3RyaW5nO1xyXG4gICAgICBkaXNwbGF5RmllbGQ6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55W107XHJcbiAgICB9PltdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycgJiYgIXRoaXMuY2FjaGVWYWx1ZXNbY29sdW1uLmZpZWxkXSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgY29sdW1uLm9wdGlvbi5pdGVtcyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcHJvbWlzZXMucHVzaChcclxuICAgICAgICAgICAgY29sdW1uLm9wdGlvblxyXG4gICAgICAgICAgICAgIC5pdGVtcygpXHJcbiAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiAoe1xyXG4gICAgICAgICAgICAgICAga2V5OiBjb2x1bW4uZmllbGQsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiBjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6IGNvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbXSxcclxuICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIGtleTogY29sdW1uLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiBjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jYWNoZVZhbHVlc1tjb2x1bW4uZmllbGRdID0gY29sdW1uLm9wdGlvbi5pdGVtcy5tYXAoZSA9PiAoe1xyXG4gICAgICAgICAgICBbY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkXTogZT8uW2NvbHVtbi5vcHRpb24udmFsdWVGaWVsZF0sXHJcbiAgICAgICAgICAgIFtjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF06IGU/Lltjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF0sXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICB0aGlzLiNjYWNoZU9ialZhbHVlc1tjb2x1bW4uZmllbGRdID0gQXJyYXkudG9PYmplY3QodGhpcy5jYWNoZVZhbHVlc1tjb2x1bW4uZmllbGRdLCBjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHByb21pc2VzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XHJcbiAgICAgICAgdGhpcy5jYWNoZVZhbHVlc1tyZXN1bHQua2V5XSA9IHJlc3VsdC5kYXRhLm1hcChlID0+ICh7XHJcbiAgICAgICAgICBbcmVzdWx0LnZhbHVlRmllbGRdOiBlPy5bcmVzdWx0LnZhbHVlRmllbGRdLFxyXG4gICAgICAgICAgW3Jlc3VsdC5kaXNwbGF5RmllbGRdOiBlPy5bcmVzdWx0LmRpc3BsYXlGaWVsZF0sXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuI2NhY2hlT2JqVmFsdWVzW3Jlc3VsdC5rZXldID0gQXJyYXkudG9PYmplY3QodGhpcy5jYWNoZVZhbHVlc1tyZXN1bHQua2V5XSwgcmVzdWx0LnZhbHVlRmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgI2Zvcm1hdCA9IGFzeW5jIDxUID0gYW55PihyYXdJdGVtczogVFtdLCBjb2x1bW5zOiBTZFRhYmxlQ29sdW1uW10pID0+IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gcmF3SXRlbXMubWFwKE1hcFRvU2RUYWJsZUl0ZW0pO1xyXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xyXG4gICAgICAvLyBDbGlja2FibGVcclxuICAgICAgY29uc3QgeyBmaWVsZCwgY2VsbFN0eWxlLCBjbGljaywgdG9vbHRpcCwgaHRtbFRlbXBsYXRlLCB0cmFuc2Zvcm0gfSA9IGNvbHVtbjtcclxuICAgICAgaWYgKCF0cmFuc2Zvcm0gJiYgIWh0bWxUZW1wbGF0ZSAmJiBjb2x1bW4udHlwZSA9PT0gJ2xhenktdmFsdWVzJyAmJiB0eXBlb2YgY29sdW1uLm9wdGlvbi52aWV3cyA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IHtcclxuICAgICAgICAgIG9wdGlvbjogeyB2aWV3cywgbWFwVmFsdWUgfSxcclxuICAgICAgICB9ID0gY29sdW1uO1xyXG4gICAgICAgIHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXSA9IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXSB8fCB7fTtcclxuICAgICAgICBjb25zdCB2YWx1ZXMgPSBpdGVtc1xyXG4gICAgICAgICAgLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXBWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShpdGVtLmRhdGE/LltmaWVsZF0sIGl0ZW0uZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YT8uW2ZpZWxkXTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuZmlsdGVyKHZhbCA9PiAoISF2YWwgfHwgdmFsID09PSAwKSAmJiAhT2JqZWN0LmtleXModGhpcy4jY2FjaGVPYmpWYWx1ZXNbZmllbGRdKS5pbmNsdWRlcyh2YWwpKVxyXG4gICAgICAgICAgLnVuaW9uKCk7XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCBsYXp5SXRlbXM6IGFueVtdID0gKFxyXG4gICAgICAgICAgICBhd2FpdCB2aWV3cyh2YWx1ZXMpLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IHZhbHVlcy5pbmNsdWRlcyhpdGVtPy5bY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkXSkpXHJcbiAgICAgICAgICAgIC5tYXAoZSA9PiAoe1xyXG4gICAgICAgICAgICAgIFtjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGRdOiBlPy5bY29sdW1uLm9wdGlvbi52YWx1ZUZpZWxkXSxcclxuICAgICAgICAgICAgICBbY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGRdOiBlPy5bY29sdW1uLm9wdGlvbi5kaXNwbGF5RmllbGRdLFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXSwgQXJyYXkudG9PYmplY3QobGF6eUl0ZW1zLCBjb2x1bW4ub3B0aW9uLnZhbHVlRmllbGQpIHx8IHt9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XHJcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IGl0ZW0uZGF0YTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd0RhdGE/LltmaWVsZF07XHJcbiAgICAgICAgaXRlbS5tZXRhLmRpc3BsYXlbZmllbGRdID0ge1xyXG4gICAgICAgICAgYmFkZ2U6IHVuZGVmaW5lZCxcclxuICAgICAgICAgIGNlbGxTdHlsZTogY29sdW1uLnR5cGUgPT09ICdudW1iZXInID8geyAndGV4dC1hbGlnbic6ICdyaWdodCFpbXBvcnRhbnQnIH0gOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICBkYXRhOiB2YWx1ZSxcclxuICAgICAgICAgIGlzSHRtbDogZmFsc2UsXHJcbiAgICAgICAgICB0b29sdGlwOiB0eXBlb2YgdG9vbHRpcCA9PT0gJ2Z1bmN0aW9uJyA/IHRvb2x0aXAodmFsdWUsIHJvd0RhdGEpIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgY2xpY2s6IHR5cGVvZiBjbGljayA9PT0gJ2Z1bmN0aW9uJyA/ICgpID0+IGNsaWNrKHZhbHVlLCByb3dEYXRhKSA6IHVuZGVmaW5lZCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGRpc3BsYXkgPSBpdGVtLm1ldGEuZGlzcGxheVtmaWVsZF07XHJcbiAgICAgICAgLy8gRGlzcGxheVxyXG4gICAgICAgIGlmICh0eXBlb2YgaHRtbFRlbXBsYXRlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBkaXNwbGF5LmlzSHRtbCA9IHRydWU7XHJcbiAgICAgICAgICBkaXNwbGF5LmRhdGEgPSBodG1sVGVtcGxhdGUodmFsdWUsIHJvd0RhdGEpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0cmFuc2Zvcm0odmFsdWUsIHJvd0RhdGEpO1xyXG4gICAgICAgICAgaWYgKG5ld1ZhbHVlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSBhd2FpdCBuZXdWYWx1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IG5ld1ZhbHVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RhdGV0aW1lJyB8fCBjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBEYXRlLnRvRm9ybWF0KHZhbHVlLCAnZGQvTU0veXl5eScpO1xyXG4gICAgICAgICAgICBsZXQgdGltZSA9IERhdGUudG9Gb3JtYXQodmFsdWUsICdISDptbTpzcycpO1xyXG4gICAgICAgICAgICBpZiAodGltZT8uZW5kc1dpdGgoJzAwJykpIHtcclxuICAgICAgICAgICAgICB0aW1lID0gRGF0ZS50b0Zvcm1hdCh2YWx1ZSwgJ0hIOm1tJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScgfHwgY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRldGltZScpIHtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXkuaXNIdG1sID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IGA8c3BhbiBjbGFzcz1cImQtYmxvY2sgVDE0UiB0ZXh0LWJsYWNrNDAwXCI+JHt0aW1lfTwvc3Bhbj48c3BhbiBjbGFzcz1cImQtYmxvY2sgVDE0UlwiPiR7ZGF0ZX08L3NwYW4+YDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheS5kYXRhID0gZGF0ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAndGltZScpIHtcclxuICAgICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSB0aW1lO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnIHx8IGNvbHVtbi50eXBlID09PSAnbGF6eS12YWx1ZXMnKSB7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2xhenktdmFsdWVzJyAmJiB0eXBlb2YgY29sdW1uLm9wdGlvbi5tYXBWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IHRoaXMuI2NhY2hlT2JqVmFsdWVzW2ZpZWxkXT8uW2NvbHVtbi5vcHRpb24ubWFwVmFsdWUodmFsdWUsIHJvd0RhdGEpXT8uW2NvbHVtbi5vcHRpb24uZGlzcGxheUZpZWxkXSB8fCB2YWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSB0aGlzLiNjYWNoZU9ialZhbHVlc1tmaWVsZF0/Llt2YWx1ZV0/Lltjb2x1bW4ub3B0aW9uLmRpc3BsYXlGaWVsZF0gfHwgdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzTnVtYmVyKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSBOdW1iZXIudG9WTkN1cnJlbmN5KHZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgb3B0aW9uIH0gPSBjb2x1bW47XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXkuZGF0YSA9IHZhbHVlID09PSB0cnVlID8gb3B0aW9uPy5kaXNwbGF5T25UcnVlIHx8ICdUcnVlJyA6IG9wdGlvbj8uZGlzcGxheU9uRmFsc2UgfHwgJ0ZhbHNlJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBkaXNwbGF5LmRhdGEgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBCYWRnZVxyXG4gICAgICAgICAgaWYgKChjb2x1bW4udHlwZSA9PT0gJ3N0cmluZycgfHwgY29sdW1uLnR5cGUgPT09ICdudW1iZXInIHx8IGNvbHVtbi50eXBlID09PSAndmFsdWVzJykgJiYgY29sdW1uLmJhZGdlKSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXkuYmFkZ2UgPSB7XHJcbiAgICAgICAgICAgICAgdHlwZTogIWNvbHVtbj8uYmFkZ2VUeXBlID8gJ2ljb24nIDogY29sdW1uLmJhZGdlVHlwZSxcclxuICAgICAgICAgICAgICBjb2xvcjogY29sdW1uLmJhZGdlKHZhbHVlLCByb3dEYXRhKSxcclxuICAgICAgICAgICAgICBpY29uOiBjb2x1bW4uYmFkZ2VJY29uPy4odmFsdWUsIHJvd0RhdGEpLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXkuYmFkZ2UgPSB7XHJcbiAgICAgICAgICAgICAgdHlwZTogJ2NpcmNsZScsXHJcbiAgICAgICAgICAgICAgY29sb3I6ICEhdmFsdWUgPyAnc3VjY2VzcycgOiAnZGFuZ2VyJyxcclxuICAgICAgICAgICAgICBpY29uOiBudWxsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zO1xyXG4gIH07XHJcblxyXG4gIHRyYWNrQnkgPSAoaW5kZXg6IG51bWJlciwgaXRlbTogU2RUYWJsZUl0ZW0pID0+IHtcclxuICAgIHJldHVybiBpdGVtLm1ldGEuaWQ7XHJcbiAgfTtcclxufVxyXG4iXX0=
@@ -492,13 +492,12 @@ class SdPopupExport {
492
492
  };
493
493
  this.createTemplate = () => __awaiter(this, void 0, void 0, function* () {
494
494
  var _s, _t, _u, _v, _w;
495
- const { translate } = this.translateService;
496
495
  if (this.form.invalid) {
497
496
  this.form.markAllAsTouched();
498
497
  return;
499
498
  }
500
499
  if (!this.columns.some(e => this.selected[e.field])) {
501
- this.notifyService.notify.warning(translate('Please select columns'));
500
+ this.notifyService.notify.warning(`Vui lòng chọn cột dữ liệu để xuất`);
502
501
  return;
503
502
  }
504
503
  this.loadingService.start();