@dotglitch/ngx-common 1.1.31 → 1.1.33
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.
|
@@ -606,7 +606,7 @@ export class FileGridComponent {
|
|
|
606
606
|
}).then(r => this.loadFolder());
|
|
607
607
|
}
|
|
608
608
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FileGridComponent, deps: [{ token: i1.Fetch }, { token: i1.KeyboardService }, { token: i1.DialogService }, { token: i2.MatDialog }, { token: i3.FilemanagerComponent }, { token: i0.ChangeDetectorRef }, { token: i4.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
609
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: FileGridComponent, isStandalone: true, selector: "app-file-grid", inputs: { path: "path", config: "config", showHiddenFiles: "showHiddenFiles", viewMode: "viewMode", gridSize: "gridSize", tab: "tab", selection: "selection", value: "value", sortOrder: "sortOrder" }, outputs: { pathChange: "pathChange", fileSelect: "fileSelect", fileDblClick: "fileDblClick", folderSelect: "folderSelect", folderDblClick: "folderDblClick", newTab: "newTab", loadFiles: "loadFiles", selectionChange: "selectionChange", valueChange: "valueChange" }, viewQueries: [{ propertyName: "filesRef", first: true, predicate: ["fileViewport"], descendants: true }, { propertyName: "tabulator", first: true, predicate: TabulatorComponent, descendants: true }, { propertyName: "renameTemplate", first: true, predicate: ["renameTemplate"], descendants: true, read: TemplateRef }], ngImport: i0, template: "@if (showLoader) {\n <mat-progress-bar [class.hide]=\"hideLoader\" mode=\"query\"/>\n}\n\n<div\n style=\"display: contents\"\n [style.--filemanager-fileicon-backdrop]=\"'url(' + iconResolver.path + '/pop/generic.svg)'\"\n (dragstart)=\"userIsDraggingFile = true\"\n (dragend)=\"userIsDraggingFile = false\"\n (dragover)=\"draggingOver = true\"\n (dragleave)=\"draggingOver = false\"\n (ondrop)=\"onDrop($event)\"\n>\n\n @if (failedLoad) {\n <div style=\"display: flex; align-items: center; justify-items: center; height: 100%\">\n <div style=\"max-width: 400px; display: flex; flex-direction: column; align-items: center; justify-content: center;\">\n <img style=\"width: 200px\" src=\"data:image/svg+xml,%3Csvg fill='var(--text-color)' id='Capa_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='800px' height='800px' viewBox='0 0 600.525 600.525' xml:space='preserve'%3E%3Cg%3E%3Cg%3E%3Cpath d='M57.375,138.656L43.031,95.146c-23.428,8.128-40.162,29.166-42.553,54.028l45.9,3.825 C46.856,146.306,51.16,140.568,57.375,138.656z'/%3E%3Crect y='288.309' width='45.9' height='45.901'/%3E%3Cpath d='M554.625,446.091c0,3.346-0.956,6.215-2.868,9.084l38.25,25.34c6.693-10.039,10.04-21.992,10.04-34.424V423.14h-45.899 v22.951H554.625z'/%3E%3Crect x='456.609' y='146.306' width='45.9' height='45.9'/%3E%3Crect x='485.297' y='462.825' width='45.9' height='45.9'/%3E%3Crect x='393.497' y='462.825' width='45.9' height='45.9'/%3E%3Crect x='364.81' y='146.306' width='45.9' height='45.9'/%3E%3Crect x='118.097' y='462.825' width='45.9' height='45.9'/%3E%3Crect y='380.108' width='45.9' height='45.9'/%3E%3Crect y='196.509' width='45.9' height='45.9'/%3E%3Cpath d='M330.385,143.437c-2.391-1.434-3.825-2.391-4.304-2.869l-28.209-29.166c-1.913-1.913-4.303-3.825-6.694-5.737 l-27.253,36.815c0.478,0.478,0.956,0.956,0.956,0.956s37.772,34.425,44.465,41.119L330.385,143.437z'/%3E%3Crect x='554.625' y='239.541' width='45.9' height='45.9'/%3E%3Crect x='301.697' y='462.825' width='45.899' height='45.9'/%3E%3Cpath d='M559.885,146.306h-10.997v47.812h5.737h45.9v-7.172C600.525,164.475,582.356,146.306,559.885,146.306z'/%3E%3Crect x='187.425' y='91.8' width='45.9' height='45.9'/%3E%3Crect x='554.625' y='331.341' width='45.9' height='45.9'/%3E%3Crect x='95.625' y='91.8' width='45.9' height='45.9'/%3E%3Crect x='209.897' y='462.825' width='45.9' height='45.9'/%3E%3Cpath d='M49.247,456.132l-36.337,27.73c11.953,15.777,30.122,24.863,49.725,24.863h9.562v-45.9h-9.562 C57.375,462.825,52.594,460.435,49.247,456.132z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\">\n\n <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->\n <svg\n fill=\"var(--text-color)\"\n width=\"200px\"\n viewBox=\"0 0 600.525 600.525\"\n >\n <path d=\"M57.375,138.656L43.031,95.146c-23.428,8.128-40.162,29.166-42.553,54.028l45.9,3.825C46.856,146.306,51.16,140.568,57.375,138.656z\" />\n <rect y=\"288.309\" width=\"45.9\" height=\"45.901\" />\n <path d=\"M554.625,446.091c0,3.346-0.956,6.215-2.868,9.084l38.25,25.34c6.693-10.039,10.04-21.992,10.04-34.424V423.14h-45.899v22.951H554.625z\" />\n <rect x=\"456.609\" y=\"146.306\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"485.297\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"393.497\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"364.81\" y=\"146.306\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"118.097\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect y=\"380.108\" width=\"45.9\" height=\"45.9\" />\n <rect y=\"196.509\" width=\"45.9\" height=\"45.9\" />\n <path d=\"M330.385,143.437c-2.391-1.434-3.825-2.391-4.304-2.869l-28.209-29.166c-1.913-1.913-4.303-3.825-6.694-5.737l-27.253,36.815c0.478,0.478,0.956,0.956,0.956,0.956s37.772,34.425,44.465,41.119L330.385,143.437z\" />\n <rect x=\"554.625\" y=\"239.541\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"301.697\" y=\"462.825\" width=\"45.899\" height=\"45.9\" />\n <path d=\"M559.885,146.306h-10.997v47.812h5.737h45.9v-7.172C600.525,164.475,582.356,146.306,559.885,146.306z\" />\n <rect x=\"187.425\" y=\"91.8\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"554.625\" y=\"331.341\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"95.625\" y=\"91.8\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"209.897\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <path d=\"M49.247,456.132l-36.337,27.73c11.953,15.777,30.122,24.863,49.725,24.863h9.562v-45.9h-9.562C57.375,462.825,52.594,460.435,49.247,456.132z\" />\n </svg>\n\n <h3>Sorry about that.</h3>\n <p>\n Our servers aren't doing their thing right now.\n You can try again later or contact an administrator about this.\n </p>\n <hr style=\"width: 100%; opacity: .5;\"/>\n <p>\n Error:\n <span style=\"color: var(--mat-tab-header-active-focus-label-text-color)\">{{error.status}}</span>\n\n @if (error.error?.message) {\n Message: {{error.error?.message}}\n }\n @if (error.error?.message) {\n Message: {{error.error?.message}}\n }\n @if (error.error?.message) {\n Message: {{error.error?.message}}\n }\n </p>\n </div>\n </div>\n }\n @else {\n <!-- <ng-container *ngIf=\"draggingOver\"></ng-container> -->\n <!-- Grid mode -->\n @if (viewMode == 'grid') {\n <ng-scrollbar\n class=\"grid content-area {{gridSize}} {{config.imageSize || 'normal'}}\"\n [class.selectionMode]=\"config.mode == 'focusFiles'\"\n [class.showDropArea]=\"draggingOver\"\n style=\"height: 100%; width: 100%\"\n track=\"vertical\"\n pointerEventsMethod=\"scrollbar\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <div class=\"resize-observer\" #fileViewport></div>\n <cdk-virtual-scroll-viewport\n itemSize=\"150\"\n scrollViewport\n (click)=\"selection = []; selectionText = ''\"\n >\n <div class=\"row\" *cdkVirtualFor=\"let row of sortedFolders\">\n @for (item of row; track item) {\n <div class=\"file\"\n [class.selected]=\"selection.includes(item)\"\n [class.generic]=\"item['_icon'].needsBackdrop\"\n [ngx-contextmenu]=\"fileContextMenu\"\n [ngx-menu-context]=\"item\"\n >\n @if (config.mode == 'focusFiles' && item.kind == 'file') {\n <mat-checkbox\n #checkbox\n [checked]=\"item['_value']\"\n (change)=\"onToggle(item, $event)\"\n />\n }\n <div\n style=\"display: contents\"\n (click)=\"onSelect(item, $event)\"\n (dblclick)=\"onItemClick(item)\"\n (dragstart)=\"onDragStart($event, item)\"\n >\n <img [src]=\"item['_icon'].path\"/>\n <p>{{item['vanityName'] || item.name}}</p>\n </div>\n </div>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-scrollbar>\n }\n\n <!-- List mode -->\n @if (viewMode == 'list') {\n <div\n class=\"content-area\"\n style=\"width: 100%; height: 100%\"\n [class.showDropArea]=\"draggingOver\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <app-tabulator\n [dataSource]=\"directoryContents\"\n [columns]=\"[\n { field: 'name', title: 'Name', formatter: nameCellFormatter },\n { field: '_size', title: 'Size' },\n { field: '_ctime', title: 'Created' },\n { field: '_mtime', title: 'Modified' },\n ]\"\n [options]=\"{\n rowHeight: 32\n }\"\n (rowClick)=\"onRowClick($event)\"\n (rowDblClick)=\"onItemClick($event.data)\"\n (rowContext)=\"onRowCtx($event)\"\n />\n </div>\n }\n }\n</div>\n\n@if (selectionText?.trim()?.length > 0) {\n <div class=\"select-hint\">\n {{selectionText}}\n </div>\n}\n\n<div class=\"controls\">\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onCreateFolder()\"\n >\n <mat-icon>create_new_folder</mat-icon>\n New Folder\n </button>\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onUploadFile()\"\n >\n <mat-icon>upload_file</mat-icon>\n Upload\n </button>\n</div>\n", styles: [":host{display:block;height:100%;width:100%;overflow:hidden}.resize-observer{position:absolute;inset:0}.grid .row{flex:1;display:grid;grid-template-columns:repeat(auto-fill,80px);justify-content:space-between;grid-gap:20px;grid-auto-rows:min-content;padding:10px;margin-right:10px}.grid .file{width:80px;z-index:1;position:relative;transition:opacity 50ms ease-in-out;display:flex;flex-direction:column;align-items:center;text-align:center}.grid .file.selected p{background-color:#8ad9d9;color:#000}.grid .file.generic:before{content:\" \";position:absolute;background:var(--filemanager-fileicon-backdrop);background-repeat:no-repeat;width:100%;height:100%;z-index:-1;left:0}.grid .file.generic img{height:44px;width:44px;margin-top:28px;margin-bottom:8px}.grid .file img{-webkit-user-select:none;user-select:none}.grid .file p{height:50px;width:100%;margin:0;padding:2px;font-size:14px;line-height:16px;border-radius:4px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;text-overflow:ellipsis;overflow-wrap:break-word;transition:background-color 50ms ease-in-out,color 50ms ease-in-out}.grid .file mat-checkbox{position:absolute;left:-32px;top:-16px}:host ::ng-deep .small .file{width:46px}:host ::ng-deep .grid.selectionMode .row{padding-left:30px}:host ::ng-deep .grid.selectionMode .cdk-virtual-scroll-content-wrapper{padding-top:10px}:host ::ng-deep .tabulator .tabulator-row .tabulator-cell:not(:first-of-type){padding-top:9px}.list .row{flex:1;display:flex;align-items:center;padding:5px 10px;height:42px}.list .row p{margin:0}.list .row:hover{background-color:var(--filemanager-row-hover-background-color, #343434)}.list .row.selected p{background-color:#8ad9d9;color:#000;border-radius:5px;padding:0 4px}.list .row.odd{background-color:var(--filemanager-row-alt-background-color, #323232)}.controls{position:absolute;bottom:12px;right:12px;display:flex;gap:12px}.select-hint{position:absolute;font-size:14px;bottom:0;right:0;background-color:#000a;padding:2px 10px;border:1px solid black;border-top-right-radius:5px;border-bottom:none;border-right:none;z-index:9999}.select-hint:hover{display:none}.content-area{border:4px dashed rgba(0,0,0,0)}.showDropArea{border:4px dashed var(--theme-primary, rgba(128, 128, 128, .8));transition:border-color .25s ease}:host ::ng-deep ng-scrollbar.ng-scrollbar{box-sizing:border-box!important;--scrollbar-thumb-color: #666;min-height:200px;min-width:200px}mat-progress-bar{--mdc-linear-progress-track-height: 2px;position:absolute;top:0;left:0;width:100%;animation:dropIn .2s ease;transition:position .2s ease;z-index:100}mat-progress-bar.hide{top:-2px}@keyframes dropIn{0%{top:-2px}to{top:0}}\n"], dependencies: [{ kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: NgScrollbarModule }, { kind: "component", type: i5.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "directive", type: i5.ScrollViewport, selector: "[scrollViewport]" }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: TabulatorComponent, selector: "app-tabulator", inputs: ["dataSource", "columns", "key", "options"], outputs: ["cellClick", "cellDblClick", "rowClick", "rowContext", "rowDblClick"] }, { kind: "directive", type: MenuDirective, selector: "[ngx-contextmenu],[ngx-menu]", inputs: ["ngx-menu-context", "ngx-contextmenu", "ngx-menu", "ngx-menu-config"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i10.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i10.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i10.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }] }); }
|
|
609
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: FileGridComponent, isStandalone: true, selector: "app-file-grid", inputs: { path: "path", config: "config", showHiddenFiles: "showHiddenFiles", viewMode: "viewMode", gridSize: "gridSize", tab: "tab", selection: "selection", value: "value", sortOrder: "sortOrder" }, outputs: { pathChange: "pathChange", fileSelect: "fileSelect", fileDblClick: "fileDblClick", folderSelect: "folderSelect", folderDblClick: "folderDblClick", newTab: "newTab", loadFiles: "loadFiles", selectionChange: "selectionChange", valueChange: "valueChange" }, viewQueries: [{ propertyName: "filesRef", first: true, predicate: ["fileViewport"], descendants: true }, { propertyName: "tabulator", first: true, predicate: TabulatorComponent, descendants: true }, { propertyName: "renameTemplate", first: true, predicate: ["renameTemplate"], descendants: true, read: TemplateRef }], ngImport: i0, template: "@if (showLoader) {\n <mat-progress-bar [class.hide]=\"hideLoader\" mode=\"query\"/>\n}\n\n<div\n style=\"display: contents\"\n [style.--filemanager-fileicon-backdrop]=\"'url(' + iconResolver.path + '/pop/generic.svg)'\"\n (dragstart)=\"userIsDraggingFile = true\"\n (dragend)=\"userIsDraggingFile = false\"\n (dragover)=\"draggingOver = true\"\n (dragleave)=\"draggingOver = false\"\n (ondrop)=\"onDrop($event)\"\n>\n\n @if (failedLoad) {\n <div style=\"display: flex; align-items: center; justify-content: center; height: 100%\">\n <div style=\"max-width: 400px; display: flex; flex-direction: column; align-items: center; justify-content: center;\">\n <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->\n <svg\n fill=\"var(--text-color)\"\n width=\"200px\"\n viewBox=\"0 0 600.525 600.525\"\n >\n <path d=\"M57.375,138.656L43.031,95.146c-23.428,8.128-40.162,29.166-42.553,54.028l45.9,3.825C46.856,146.306,51.16,140.568,57.375,138.656z\" />\n <rect y=\"288.309\" width=\"45.9\" height=\"45.901\" />\n <path d=\"M554.625,446.091c0,3.346-0.956,6.215-2.868,9.084l38.25,25.34c6.693-10.039,10.04-21.992,10.04-34.424V423.14h-45.899v22.951H554.625z\" />\n <rect x=\"456.609\" y=\"146.306\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"485.297\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"393.497\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"364.81\" y=\"146.306\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"118.097\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect y=\"380.108\" width=\"45.9\" height=\"45.9\" />\n <rect y=\"196.509\" width=\"45.9\" height=\"45.9\" />\n <path d=\"M330.385,143.437c-2.391-1.434-3.825-2.391-4.304-2.869l-28.209-29.166c-1.913-1.913-4.303-3.825-6.694-5.737l-27.253,36.815c0.478,0.478,0.956,0.956,0.956,0.956s37.772,34.425,44.465,41.119L330.385,143.437z\" />\n <rect x=\"554.625\" y=\"239.541\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"301.697\" y=\"462.825\" width=\"45.899\" height=\"45.9\" />\n <path d=\"M559.885,146.306h-10.997v47.812h5.737h45.9v-7.172C600.525,164.475,582.356,146.306,559.885,146.306z\" />\n <rect x=\"187.425\" y=\"91.8\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"554.625\" y=\"331.341\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"95.625\" y=\"91.8\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"209.897\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <path d=\"M49.247,456.132l-36.337,27.73c11.953,15.777,30.122,24.863,49.725,24.863h9.562v-45.9h-9.562C57.375,462.825,52.594,460.435,49.247,456.132z\" />\n </svg>\n\n <h3>Sorry about that.</h3>\n <p>\n Our servers aren't doing their thing right now.\n You can try again later or contact an administrator about this.\n </p>\n <hr style=\"width: 100%; opacity: .5;\"/>\n <p>\n Error:\n <span style=\"color: var(--mat-tab-header-active-focus-label-text-color)\">{{error.status}}</span>\n <br/>\n @if (error.error?.message) {\n Message: {{error.error?.message}}\n }\n </p>\n </div>\n </div>\n }\n @else {\n <!-- <ng-container *ngIf=\"draggingOver\"></ng-container> -->\n <!-- Grid mode -->\n @if (viewMode == 'grid') {\n <ng-scrollbar\n class=\"grid content-area {{gridSize}} {{config.imageSize || 'normal'}}\"\n [class.selectionMode]=\"config.mode == 'focusFiles'\"\n [class.showDropArea]=\"draggingOver\"\n style=\"height: 100%; width: 100%\"\n track=\"vertical\"\n pointerEventsMethod=\"scrollbar\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <div class=\"resize-observer\" #fileViewport></div>\n <cdk-virtual-scroll-viewport\n itemSize=\"150\"\n scrollViewport\n (click)=\"selection = []; selectionText = ''\"\n >\n <div class=\"row\" *cdkVirtualFor=\"let row of sortedFolders\">\n @for (item of row; track item) {\n <div class=\"file\"\n [class.selected]=\"selection.includes(item)\"\n [class.generic]=\"item['_icon'].needsBackdrop\"\n [ngx-contextmenu]=\"fileContextMenu\"\n [ngx-menu-context]=\"item\"\n >\n @if (config.mode == 'focusFiles' && item.kind == 'file') {\n <mat-checkbox\n #checkbox\n [checked]=\"item['_value']\"\n (change)=\"onToggle(item, $event)\"\n />\n }\n <div\n style=\"display: contents\"\n (click)=\"onSelect(item, $event)\"\n (dblclick)=\"onItemClick(item)\"\n (dragstart)=\"onDragStart($event, item)\"\n >\n <img [src]=\"item['_icon'].path\"/>\n <p>{{item['vanityName'] || item.name}}</p>\n </div>\n </div>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-scrollbar>\n }\n\n <!-- List mode -->\n @if (viewMode == 'list') {\n <div\n class=\"content-area\"\n style=\"width: 100%; height: 100%\"\n [class.showDropArea]=\"draggingOver\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <app-tabulator\n [dataSource]=\"directoryContents\"\n [columns]=\"[\n { field: 'name', title: 'Name', formatter: nameCellFormatter },\n { field: '_size', title: 'Size' },\n { field: '_ctime', title: 'Created' },\n { field: '_mtime', title: 'Modified' },\n ]\"\n [options]=\"{\n rowHeight: 32\n }\"\n (rowClick)=\"onRowClick($event)\"\n (rowDblClick)=\"onItemClick($event.data)\"\n (rowContext)=\"onRowCtx($event)\"\n />\n </div>\n }\n }\n</div>\n\n@if (selectionText?.trim()?.length > 0) {\n <div class=\"select-hint\">\n {{selectionText}}\n </div>\n}\n\n<div class=\"controls\">\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onCreateFolder()\"\n >\n <mat-icon>create_new_folder</mat-icon>\n New Folder\n </button>\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onUploadFile()\"\n >\n <mat-icon>upload_file</mat-icon>\n Upload\n </button>\n</div>\n", styles: [":host{display:block;height:100%;width:100%;overflow:hidden}.resize-observer{position:absolute;inset:0}.grid .row{flex:1;display:grid;grid-template-columns:repeat(auto-fill,80px);justify-content:space-between;grid-gap:20px;grid-auto-rows:min-content;padding:10px;margin-right:10px}.grid .file{width:80px;z-index:1;position:relative;transition:opacity 50ms ease-in-out;display:flex;flex-direction:column;align-items:center;text-align:center}.grid .file.selected p{background-color:#8ad9d9;color:#000}.grid .file.generic:before{content:\" \";position:absolute;background:var(--filemanager-fileicon-backdrop);background-repeat:no-repeat;width:100%;height:100%;z-index:-1;left:0}.grid .file.generic img{height:44px;width:44px;margin-top:28px;margin-bottom:8px}.grid .file img{-webkit-user-select:none;user-select:none}.grid .file p{height:50px;width:100%;margin:0;padding:2px;font-size:14px;line-height:16px;border-radius:4px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;text-overflow:ellipsis;overflow-wrap:break-word;transition:background-color 50ms ease-in-out,color 50ms ease-in-out}.grid .file mat-checkbox{position:absolute;left:-32px;top:-16px}:host ::ng-deep .small .file{width:46px}:host ::ng-deep .grid.selectionMode .row{padding-left:30px}:host ::ng-deep .grid.selectionMode .cdk-virtual-scroll-content-wrapper{padding-top:10px}:host ::ng-deep .tabulator .tabulator-row .tabulator-cell:not(:first-of-type){padding-top:9px}.list .row{flex:1;display:flex;align-items:center;padding:5px 10px;height:42px}.list .row p{margin:0}.list .row:hover{background-color:var(--filemanager-row-hover-background-color, #343434)}.list .row.selected p{background-color:#8ad9d9;color:#000;border-radius:5px;padding:0 4px}.list .row.odd{background-color:var(--filemanager-row-alt-background-color, #323232)}.controls{position:absolute;bottom:12px;right:12px;display:flex;gap:12px}.select-hint{position:absolute;font-size:14px;bottom:0;right:0;background-color:#000a;padding:2px 10px;border:1px solid black;border-top-right-radius:5px;border-bottom:none;border-right:none;z-index:9999}.select-hint:hover{display:none}.content-area{border:4px dashed rgba(0,0,0,0)}.showDropArea{border:4px dashed var(--theme-primary, rgba(128, 128, 128, .8));transition:border-color .25s ease}:host ::ng-deep ng-scrollbar.ng-scrollbar{box-sizing:border-box!important;--scrollbar-thumb-color: #666;min-height:200px;min-width:200px}mat-progress-bar{--mdc-linear-progress-track-height: 2px;position:absolute;top:0;left:0;width:100%;animation:dropIn .2s ease;transition:position .2s ease;z-index:100}mat-progress-bar.hide{top:-2px}@keyframes dropIn{0%{top:-2px}to{top:0}}\n"], dependencies: [{ kind: "ngmodule", type: MatTabsModule }, { kind: "ngmodule", type: NgScrollbarModule }, { kind: "component", type: i5.NgScrollbar, selector: "ng-scrollbar", inputs: ["disabled", "sensorDisabled", "pointerEventsDisabled", "viewportPropagateMouseMove", "autoHeightDisabled", "autoWidthDisabled", "viewClass", "trackClass", "thumbClass", "minThumbSize", "trackClickScrollDuration", "pointerEventsMethod", "track", "visibility", "appearance", "position", "sensorDebounce", "scrollAuditTime"], outputs: ["updated"], exportAs: ["ngScrollbar"] }, { kind: "directive", type: i5.ScrollViewport, selector: "[scrollViewport]" }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: TabulatorComponent, selector: "app-tabulator", inputs: ["dataSource", "columns", "key", "options"], outputs: ["cellClick", "cellDblClick", "rowClick", "rowContext", "rowDblClick"] }, { kind: "directive", type: MenuDirective, selector: "[ngx-contextmenu],[ngx-menu]", inputs: ["ngx-menu-context", "ngx-contextmenu", "ngx-menu", "ngx-menu-config"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i10.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i10.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i10.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }] }); }
|
|
610
610
|
}
|
|
611
611
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FileGridComponent, decorators: [{
|
|
612
612
|
type: Component,
|
|
@@ -624,7 +624,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
624
624
|
TabulatorComponent,
|
|
625
625
|
MenuDirective,
|
|
626
626
|
ScrollingModule
|
|
627
|
-
], standalone: true, template: "@if (showLoader) {\n <mat-progress-bar [class.hide]=\"hideLoader\" mode=\"query\"/>\n}\n\n<div\n style=\"display: contents\"\n [style.--filemanager-fileicon-backdrop]=\"'url(' + iconResolver.path + '/pop/generic.svg)'\"\n (dragstart)=\"userIsDraggingFile = true\"\n (dragend)=\"userIsDraggingFile = false\"\n (dragover)=\"draggingOver = true\"\n (dragleave)=\"draggingOver = false\"\n (ondrop)=\"onDrop($event)\"\n>\n\n @if (failedLoad) {\n <div style=\"display: flex; align-items: center; justify-items: center; height: 100%\">\n <div style=\"max-width: 400px; display: flex; flex-direction: column; align-items: center; justify-content: center;\">\n <img style=\"width: 200px\" src=\"data:image/svg+xml,%3Csvg fill='var(--text-color)' id='Capa_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='800px' height='800px' viewBox='0 0 600.525 600.525' xml:space='preserve'%3E%3Cg%3E%3Cg%3E%3Cpath d='M57.375,138.656L43.031,95.146c-23.428,8.128-40.162,29.166-42.553,54.028l45.9,3.825 C46.856,146.306,51.16,140.568,57.375,138.656z'/%3E%3Crect y='288.309' width='45.9' height='45.901'/%3E%3Cpath d='M554.625,446.091c0,3.346-0.956,6.215-2.868,9.084l38.25,25.34c6.693-10.039,10.04-21.992,10.04-34.424V423.14h-45.899 v22.951H554.625z'/%3E%3Crect x='456.609' y='146.306' width='45.9' height='45.9'/%3E%3Crect x='485.297' y='462.825' width='45.9' height='45.9'/%3E%3Crect x='393.497' y='462.825' width='45.9' height='45.9'/%3E%3Crect x='364.81' y='146.306' width='45.9' height='45.9'/%3E%3Crect x='118.097' y='462.825' width='45.9' height='45.9'/%3E%3Crect y='380.108' width='45.9' height='45.9'/%3E%3Crect y='196.509' width='45.9' height='45.9'/%3E%3Cpath d='M330.385,143.437c-2.391-1.434-3.825-2.391-4.304-2.869l-28.209-29.166c-1.913-1.913-4.303-3.825-6.694-5.737 l-27.253,36.815c0.478,0.478,0.956,0.956,0.956,0.956s37.772,34.425,44.465,41.119L330.385,143.437z'/%3E%3Crect x='554.625' y='239.541' width='45.9' height='45.9'/%3E%3Crect x='301.697' y='462.825' width='45.899' height='45.9'/%3E%3Cpath d='M559.885,146.306h-10.997v47.812h5.737h45.9v-7.172C600.525,164.475,582.356,146.306,559.885,146.306z'/%3E%3Crect x='187.425' y='91.8' width='45.9' height='45.9'/%3E%3Crect x='554.625' y='331.341' width='45.9' height='45.9'/%3E%3Crect x='95.625' y='91.8' width='45.9' height='45.9'/%3E%3Crect x='209.897' y='462.825' width='45.9' height='45.9'/%3E%3Cpath d='M49.247,456.132l-36.337,27.73c11.953,15.777,30.122,24.863,49.725,24.863h9.562v-45.9h-9.562 C57.375,462.825,52.594,460.435,49.247,456.132z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\">\n\n <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->\n <svg\n fill=\"var(--text-color)\"\n width=\"200px\"\n viewBox=\"0 0 600.525 600.525\"\n >\n <path d=\"M57.375,138.656L43.031,95.146c-23.428,8.128-40.162,29.166-42.553,54.028l45.9,3.825C46.856,146.306,51.16,140.568,57.375,138.656z\" />\n <rect y=\"288.309\" width=\"45.9\" height=\"45.901\" />\n <path d=\"M554.625,446.091c0,3.346-0.956,6.215-2.868,9.084l38.25,25.34c6.693-10.039,10.04-21.992,10.04-34.424V423.14h-45.899v22.951H554.625z\" />\n <rect x=\"456.609\" y=\"146.306\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"485.297\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"393.497\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"364.81\" y=\"146.306\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"118.097\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect y=\"380.108\" width=\"45.9\" height=\"45.9\" />\n <rect y=\"196.509\" width=\"45.9\" height=\"45.9\" />\n <path d=\"M330.385,143.437c-2.391-1.434-3.825-2.391-4.304-2.869l-28.209-29.166c-1.913-1.913-4.303-3.825-6.694-5.737l-27.253,36.815c0.478,0.478,0.956,0.956,0.956,0.956s37.772,34.425,44.465,41.119L330.385,143.437z\" />\n <rect x=\"554.625\" y=\"239.541\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"301.697\" y=\"462.825\" width=\"45.899\" height=\"45.9\" />\n <path d=\"M559.885,146.306h-10.997v47.812h5.737h45.9v-7.172C600.525,164.475,582.356,146.306,559.885,146.306z\" />\n <rect x=\"187.425\" y=\"91.8\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"554.625\" y=\"331.341\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"95.625\" y=\"91.8\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"209.897\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <path d=\"M49.247,456.132l-36.337,27.73c11.953,15.777,30.122,24.863,49.725,24.863h9.562v-45.9h-9.562C57.375,462.825,52.594,460.435,49.247,456.132z\" />\n </svg>\n\n <h3>Sorry about that.</h3>\n <p>\n Our servers aren't doing their thing right now.\n You can try again later or contact an administrator about this.\n </p>\n <hr style=\"width: 100%; opacity: .5;\"/>\n <p>\n Error:\n <span style=\"color: var(--mat-tab-header-active-focus-label-text-color)\">{{error.status}}</span>\n\n @if (error.error?.message) {\n Message: {{error.error?.message}}\n }\n @if (error.error?.message) {\n Message: {{error.error?.message}}\n }\n @if (error.error?.message) {\n Message: {{error.error?.message}}\n }\n </p>\n </div>\n </div>\n }\n @else {\n <!-- <ng-container *ngIf=\"draggingOver\"></ng-container> -->\n <!-- Grid mode -->\n @if (viewMode == 'grid') {\n <ng-scrollbar\n class=\"grid content-area {{gridSize}} {{config.imageSize || 'normal'}}\"\n [class.selectionMode]=\"config.mode == 'focusFiles'\"\n [class.showDropArea]=\"draggingOver\"\n style=\"height: 100%; width: 100%\"\n track=\"vertical\"\n pointerEventsMethod=\"scrollbar\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <div class=\"resize-observer\" #fileViewport></div>\n <cdk-virtual-scroll-viewport\n itemSize=\"150\"\n scrollViewport\n (click)=\"selection = []; selectionText = ''\"\n >\n <div class=\"row\" *cdkVirtualFor=\"let row of sortedFolders\">\n @for (item of row; track item) {\n <div class=\"file\"\n [class.selected]=\"selection.includes(item)\"\n [class.generic]=\"item['_icon'].needsBackdrop\"\n [ngx-contextmenu]=\"fileContextMenu\"\n [ngx-menu-context]=\"item\"\n >\n @if (config.mode == 'focusFiles' && item.kind == 'file') {\n <mat-checkbox\n #checkbox\n [checked]=\"item['_value']\"\n (change)=\"onToggle(item, $event)\"\n />\n }\n <div\n style=\"display: contents\"\n (click)=\"onSelect(item, $event)\"\n (dblclick)=\"onItemClick(item)\"\n (dragstart)=\"onDragStart($event, item)\"\n >\n <img [src]=\"item['_icon'].path\"/>\n <p>{{item['vanityName'] || item.name}}</p>\n </div>\n </div>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-scrollbar>\n }\n\n <!-- List mode -->\n @if (viewMode == 'list') {\n <div\n class=\"content-area\"\n style=\"width: 100%; height: 100%\"\n [class.showDropArea]=\"draggingOver\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <app-tabulator\n [dataSource]=\"directoryContents\"\n [columns]=\"[\n { field: 'name', title: 'Name', formatter: nameCellFormatter },\n { field: '_size', title: 'Size' },\n { field: '_ctime', title: 'Created' },\n { field: '_mtime', title: 'Modified' },\n ]\"\n [options]=\"{\n rowHeight: 32\n }\"\n (rowClick)=\"onRowClick($event)\"\n (rowDblClick)=\"onItemClick($event.data)\"\n (rowContext)=\"onRowCtx($event)\"\n />\n </div>\n }\n }\n</div>\n\n@if (selectionText?.trim()?.length > 0) {\n <div class=\"select-hint\">\n {{selectionText}}\n </div>\n}\n\n<div class=\"controls\">\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onCreateFolder()\"\n >\n <mat-icon>create_new_folder</mat-icon>\n New Folder\n </button>\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onUploadFile()\"\n >\n <mat-icon>upload_file</mat-icon>\n Upload\n </button>\n</div>\n", styles: [":host{display:block;height:100%;width:100%;overflow:hidden}.resize-observer{position:absolute;inset:0}.grid .row{flex:1;display:grid;grid-template-columns:repeat(auto-fill,80px);justify-content:space-between;grid-gap:20px;grid-auto-rows:min-content;padding:10px;margin-right:10px}.grid .file{width:80px;z-index:1;position:relative;transition:opacity 50ms ease-in-out;display:flex;flex-direction:column;align-items:center;text-align:center}.grid .file.selected p{background-color:#8ad9d9;color:#000}.grid .file.generic:before{content:\" \";position:absolute;background:var(--filemanager-fileicon-backdrop);background-repeat:no-repeat;width:100%;height:100%;z-index:-1;left:0}.grid .file.generic img{height:44px;width:44px;margin-top:28px;margin-bottom:8px}.grid .file img{-webkit-user-select:none;user-select:none}.grid .file p{height:50px;width:100%;margin:0;padding:2px;font-size:14px;line-height:16px;border-radius:4px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;text-overflow:ellipsis;overflow-wrap:break-word;transition:background-color 50ms ease-in-out,color 50ms ease-in-out}.grid .file mat-checkbox{position:absolute;left:-32px;top:-16px}:host ::ng-deep .small .file{width:46px}:host ::ng-deep .grid.selectionMode .row{padding-left:30px}:host ::ng-deep .grid.selectionMode .cdk-virtual-scroll-content-wrapper{padding-top:10px}:host ::ng-deep .tabulator .tabulator-row .tabulator-cell:not(:first-of-type){padding-top:9px}.list .row{flex:1;display:flex;align-items:center;padding:5px 10px;height:42px}.list .row p{margin:0}.list .row:hover{background-color:var(--filemanager-row-hover-background-color, #343434)}.list .row.selected p{background-color:#8ad9d9;color:#000;border-radius:5px;padding:0 4px}.list .row.odd{background-color:var(--filemanager-row-alt-background-color, #323232)}.controls{position:absolute;bottom:12px;right:12px;display:flex;gap:12px}.select-hint{position:absolute;font-size:14px;bottom:0;right:0;background-color:#000a;padding:2px 10px;border:1px solid black;border-top-right-radius:5px;border-bottom:none;border-right:none;z-index:9999}.select-hint:hover{display:none}.content-area{border:4px dashed rgba(0,0,0,0)}.showDropArea{border:4px dashed var(--theme-primary, rgba(128, 128, 128, .8));transition:border-color .25s ease}:host ::ng-deep ng-scrollbar.ng-scrollbar{box-sizing:border-box!important;--scrollbar-thumb-color: #666;min-height:200px;min-width:200px}mat-progress-bar{--mdc-linear-progress-track-height: 2px;position:absolute;top:0;left:0;width:100%;animation:dropIn .2s ease;transition:position .2s ease;z-index:100}mat-progress-bar.hide{top:-2px}@keyframes dropIn{0%{top:-2px}to{top:0}}\n"] }]
|
|
627
|
+
], standalone: true, template: "@if (showLoader) {\n <mat-progress-bar [class.hide]=\"hideLoader\" mode=\"query\"/>\n}\n\n<div\n style=\"display: contents\"\n [style.--filemanager-fileicon-backdrop]=\"'url(' + iconResolver.path + '/pop/generic.svg)'\"\n (dragstart)=\"userIsDraggingFile = true\"\n (dragend)=\"userIsDraggingFile = false\"\n (dragover)=\"draggingOver = true\"\n (dragleave)=\"draggingOver = false\"\n (ondrop)=\"onDrop($event)\"\n>\n\n @if (failedLoad) {\n <div style=\"display: flex; align-items: center; justify-content: center; height: 100%\">\n <div style=\"max-width: 400px; display: flex; flex-direction: column; align-items: center; justify-content: center;\">\n <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->\n <svg\n fill=\"var(--text-color)\"\n width=\"200px\"\n viewBox=\"0 0 600.525 600.525\"\n >\n <path d=\"M57.375,138.656L43.031,95.146c-23.428,8.128-40.162,29.166-42.553,54.028l45.9,3.825C46.856,146.306,51.16,140.568,57.375,138.656z\" />\n <rect y=\"288.309\" width=\"45.9\" height=\"45.901\" />\n <path d=\"M554.625,446.091c0,3.346-0.956,6.215-2.868,9.084l38.25,25.34c6.693-10.039,10.04-21.992,10.04-34.424V423.14h-45.899v22.951H554.625z\" />\n <rect x=\"456.609\" y=\"146.306\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"485.297\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"393.497\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"364.81\" y=\"146.306\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"118.097\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <rect y=\"380.108\" width=\"45.9\" height=\"45.9\" />\n <rect y=\"196.509\" width=\"45.9\" height=\"45.9\" />\n <path d=\"M330.385,143.437c-2.391-1.434-3.825-2.391-4.304-2.869l-28.209-29.166c-1.913-1.913-4.303-3.825-6.694-5.737l-27.253,36.815c0.478,0.478,0.956,0.956,0.956,0.956s37.772,34.425,44.465,41.119L330.385,143.437z\" />\n <rect x=\"554.625\" y=\"239.541\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"301.697\" y=\"462.825\" width=\"45.899\" height=\"45.9\" />\n <path d=\"M559.885,146.306h-10.997v47.812h5.737h45.9v-7.172C600.525,164.475,582.356,146.306,559.885,146.306z\" />\n <rect x=\"187.425\" y=\"91.8\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"554.625\" y=\"331.341\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"95.625\" y=\"91.8\" width=\"45.9\" height=\"45.9\" />\n <rect x=\"209.897\" y=\"462.825\" width=\"45.9\" height=\"45.9\" />\n <path d=\"M49.247,456.132l-36.337,27.73c11.953,15.777,30.122,24.863,49.725,24.863h9.562v-45.9h-9.562C57.375,462.825,52.594,460.435,49.247,456.132z\" />\n </svg>\n\n <h3>Sorry about that.</h3>\n <p>\n Our servers aren't doing their thing right now.\n You can try again later or contact an administrator about this.\n </p>\n <hr style=\"width: 100%; opacity: .5;\"/>\n <p>\n Error:\n <span style=\"color: var(--mat-tab-header-active-focus-label-text-color)\">{{error.status}}</span>\n <br/>\n @if (error.error?.message) {\n Message: {{error.error?.message}}\n }\n </p>\n </div>\n </div>\n }\n @else {\n <!-- <ng-container *ngIf=\"draggingOver\"></ng-container> -->\n <!-- Grid mode -->\n @if (viewMode == 'grid') {\n <ng-scrollbar\n class=\"grid content-area {{gridSize}} {{config.imageSize || 'normal'}}\"\n [class.selectionMode]=\"config.mode == 'focusFiles'\"\n [class.showDropArea]=\"draggingOver\"\n style=\"height: 100%; width: 100%\"\n track=\"vertical\"\n pointerEventsMethod=\"scrollbar\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <div class=\"resize-observer\" #fileViewport></div>\n <cdk-virtual-scroll-viewport\n itemSize=\"150\"\n scrollViewport\n (click)=\"selection = []; selectionText = ''\"\n >\n <div class=\"row\" *cdkVirtualFor=\"let row of sortedFolders\">\n @for (item of row; track item) {\n <div class=\"file\"\n [class.selected]=\"selection.includes(item)\"\n [class.generic]=\"item['_icon'].needsBackdrop\"\n [ngx-contextmenu]=\"fileContextMenu\"\n [ngx-menu-context]=\"item\"\n >\n @if (config.mode == 'focusFiles' && item.kind == 'file') {\n <mat-checkbox\n #checkbox\n [checked]=\"item['_value']\"\n (change)=\"onToggle(item, $event)\"\n />\n }\n <div\n style=\"display: contents\"\n (click)=\"onSelect(item, $event)\"\n (dblclick)=\"onItemClick(item)\"\n (dragstart)=\"onDragStart($event, item)\"\n >\n <img [src]=\"item['_icon'].path\"/>\n <p>{{item['vanityName'] || item.name}}</p>\n </div>\n </div>\n }\n </div>\n </cdk-virtual-scroll-viewport>\n </ng-scrollbar>\n }\n\n <!-- List mode -->\n @if (viewMode == 'list') {\n <div\n class=\"content-area\"\n style=\"width: 100%; height: 100%\"\n [class.showDropArea]=\"draggingOver\"\n [ngx-contextmenu]=\"folderContextMenu\"\n >\n <app-tabulator\n [dataSource]=\"directoryContents\"\n [columns]=\"[\n { field: 'name', title: 'Name', formatter: nameCellFormatter },\n { field: '_size', title: 'Size' },\n { field: '_ctime', title: 'Created' },\n { field: '_mtime', title: 'Modified' },\n ]\"\n [options]=\"{\n rowHeight: 32\n }\"\n (rowClick)=\"onRowClick($event)\"\n (rowDblClick)=\"onItemClick($event.data)\"\n (rowContext)=\"onRowCtx($event)\"\n />\n </div>\n }\n }\n</div>\n\n@if (selectionText?.trim()?.length > 0) {\n <div class=\"select-hint\">\n {{selectionText}}\n </div>\n}\n\n<div class=\"controls\">\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onCreateFolder()\"\n >\n <mat-icon>create_new_folder</mat-icon>\n New Folder\n </button>\n <button\n mat-flat-button\n class=\"upload-button\"\n (click)=\"onUploadFile()\"\n >\n <mat-icon>upload_file</mat-icon>\n Upload\n </button>\n</div>\n", styles: [":host{display:block;height:100%;width:100%;overflow:hidden}.resize-observer{position:absolute;inset:0}.grid .row{flex:1;display:grid;grid-template-columns:repeat(auto-fill,80px);justify-content:space-between;grid-gap:20px;grid-auto-rows:min-content;padding:10px;margin-right:10px}.grid .file{width:80px;z-index:1;position:relative;transition:opacity 50ms ease-in-out;display:flex;flex-direction:column;align-items:center;text-align:center}.grid .file.selected p{background-color:#8ad9d9;color:#000}.grid .file.generic:before{content:\" \";position:absolute;background:var(--filemanager-fileicon-backdrop);background-repeat:no-repeat;width:100%;height:100%;z-index:-1;left:0}.grid .file.generic img{height:44px;width:44px;margin-top:28px;margin-bottom:8px}.grid .file img{-webkit-user-select:none;user-select:none}.grid .file p{height:50px;width:100%;margin:0;padding:2px;font-size:14px;line-height:16px;border-radius:4px;overflow:hidden;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;text-overflow:ellipsis;overflow-wrap:break-word;transition:background-color 50ms ease-in-out,color 50ms ease-in-out}.grid .file mat-checkbox{position:absolute;left:-32px;top:-16px}:host ::ng-deep .small .file{width:46px}:host ::ng-deep .grid.selectionMode .row{padding-left:30px}:host ::ng-deep .grid.selectionMode .cdk-virtual-scroll-content-wrapper{padding-top:10px}:host ::ng-deep .tabulator .tabulator-row .tabulator-cell:not(:first-of-type){padding-top:9px}.list .row{flex:1;display:flex;align-items:center;padding:5px 10px;height:42px}.list .row p{margin:0}.list .row:hover{background-color:var(--filemanager-row-hover-background-color, #343434)}.list .row.selected p{background-color:#8ad9d9;color:#000;border-radius:5px;padding:0 4px}.list .row.odd{background-color:var(--filemanager-row-alt-background-color, #323232)}.controls{position:absolute;bottom:12px;right:12px;display:flex;gap:12px}.select-hint{position:absolute;font-size:14px;bottom:0;right:0;background-color:#000a;padding:2px 10px;border:1px solid black;border-top-right-radius:5px;border-bottom:none;border-right:none;z-index:9999}.select-hint:hover{display:none}.content-area{border:4px dashed rgba(0,0,0,0)}.showDropArea{border:4px dashed var(--theme-primary, rgba(128, 128, 128, .8));transition:border-color .25s ease}:host ::ng-deep ng-scrollbar.ng-scrollbar{box-sizing:border-box!important;--scrollbar-thumb-color: #666;min-height:200px;min-width:200px}mat-progress-bar{--mdc-linear-progress-track-height: 2px;position:absolute;top:0;left:0;width:100%;animation:dropIn .2s ease;transition:position .2s ease;z-index:100}mat-progress-bar.hide{top:-2px}@keyframes dropIn{0%{top:-2px}to{top:0}}\n"] }]
|
|
628
628
|
}], ctorParameters: () => [{ type: i1.Fetch }, { type: i1.KeyboardService }, { type: i1.DialogService }, { type: i2.MatDialog }, { type: i3.FilemanagerComponent }, { type: i0.ChangeDetectorRef }, { type: i4.DomSanitizer }], propDecorators: { filesRef: [{
|
|
629
629
|
type: ViewChild,
|
|
630
630
|
args: ["fileViewport"]
|
|
@@ -671,4 +671,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
|
|
|
671
671
|
}], sortOrder: [{
|
|
672
672
|
type: Input
|
|
673
673
|
}] } });
|
|
674
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci9maWxlLWdyaWQvZmlsZS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci9maWxlLWdyaWQvZmlsZS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFjLFdBQVcsRUFBcUIsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUF5QyxhQUFhLEVBQVksUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7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QUVFLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQWNFLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiwgU2VjdXJpdHlDb250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSwgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IERhdGVQaXBlLCBOZ0Zvck9mLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENlbGxDb21wb25lbnQsIEVtcHR5Q2FsbGJhY2sgfSBmcm9tICd0YWJ1bGF0b3ItdGFibGVzJztcbmltcG9ydCB7IE5nU2Nyb2xsYmFyTW9kdWxlIH0gZnJvbSAnbmd4LXNjcm9sbGJhcic7XG5pbXBvcnQgeyBEaXJlY3RvcnlEZXNjcmlwdG9yLCBGaWxlRGVzY3JpcHRvciwgRmlsZW1hbmFnZXJDb21wb25lbnQsIEZpbGVWaWV3VGFiLCBGU0Rlc2NyaXB0b3IsIE5neEZpbGVNYW5hZ2VyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2ZpbGVtYW5hZ2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlU29ydGluZyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEljb25SZXNvbHZlciB9IGZyb20gJy4uL2ljb24tcmVzb2x2ZXInO1xuaW1wb3J0IHsgVGFidWxhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdGFidWxhdG9yL3RhYnVsYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuaW1wb3J0IHsgdXBsb2FkRmlsZSB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRmV0Y2gsIEtleWJvYXJkU2VydmljZSwgTWVudURpcmVjdGl2ZSwgTWVudUl0ZW0sIG9wZW5NZW51IH0gZnJvbSAnLi4vLi4vLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5cbmNvbnN0IGl0ZW1XaWR0aCA9ICg4MCArIDIwKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtZmlsZS1ncmlkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nRm9yT2YsXG4gICAgICAgIERhdGVQaXBlLFxuICAgICAgICBNYXRUYWJzTW9kdWxlLFxuICAgICAgICBOZ1Njcm9sbGJhck1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBUYWJ1bGF0b3JDb21wb25lbnQsXG4gICAgICAgIE1lbnVEaXJlY3RpdmUsXG4gICAgICAgIFNjcm9sbGluZ01vZHVsZVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZChcImZpbGVWaWV3cG9ydFwiKSBmaWxlc1JlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKFRhYnVsYXRvckNvbXBvbmVudCkgdGFidWxhdG9yOiBUYWJ1bGF0b3JDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdyZW5hbWVUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcmVuYW1lVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cblxuICAgIHByaXZhdGUgX3BhdGg6IHN0cmluZztcbiAgICBASW5wdXQoKSBzZXQgcGF0aCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5fcGF0aCAmJiB0aGlzLmNvbmZpZy5uYXZpZ2F0ZU9ubHlUb0Rlc2NlbmRhbnRzKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoJy8nKSlcbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICcvJyArIHZhbHVlO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKHRoaXMuY29uZmlnLnBhdGgpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5fcGF0aDtcblxuICAgICAgICB0aGlzLl9wYXRoID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHByZXYgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aENoYW5nZS5uZXh0KHRoaXMucGF0aCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcuYXBpU2V0dGluZ3MpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRm9sZGVyKClcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgcGF0aCgpIHtyZXR1cm4gdGhpcy5fcGF0aH1cbiAgICBAT3V0cHV0KCkgcGF0aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgQElucHV0KCkgY29uZmlnOiBOZ3hGaWxlTWFuYWdlckNvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICBASW5wdXQoKSBzaG93SGlkZGVuRmlsZXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB2aWV3TW9kZTogXCJsaXN0XCIgfCBcImdyaWRcIiA9IFwiZ3JpZFwiO1xuICAgIEBJbnB1dCgpIGdyaWRTaXplOiBcInNtYWxsXCIgfCBcIm5vcm1hbFwiIHwgXCJsYXJnZVwiID0gXCJub3JtYWxcIjtcbiAgICBASW5wdXQoKSB0YWI6IEZpbGVWaWV3VGFiO1xuXG4gICAgQE91dHB1dCgpIGZpbGVTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVEZXNjcmlwdG9yPigpO1xuICAgIEBPdXRwdXQoKSBmaWxlRGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVEZXNjcmlwdG9yPigpO1xuICAgIEBPdXRwdXQoKSBmb2xkZXJTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERpcmVjdG9yeURlc2NyaXB0b3I+KCk7XG4gICAgQE91dHB1dCgpIGZvbGRlckRibENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxEaXJlY3RvcnlEZXNjcmlwdG9yPigpO1xuICAgIEBPdXRwdXQoKSBuZXdUYWIgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcGF0aDogc3RyaW5nOyB9PigpO1xuICAgIEBPdXRwdXQoKSBsb2FkRmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZTRGVzY3JpcHRvcltdPigpO1xuXG4gICAgZGlyZWN0b3J5Q29udGVudHM6IEZTRGVzY3JpcHRvcltdID0gW107XG4gICAgQElucHV0KCkgc2VsZWN0aW9uOiBGU0Rlc2NyaXB0b3JbXSA9IFtdO1xuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZTRGVzY3JpcHRvcltdPigpO1xuXG4gICAgQElucHV0KCkgdmFsdWU6IEZTRGVzY3JpcHRvcltdID0gW107XG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGU0Rlc2NyaXB0b3JbXT4oKTtcblxuICAgIHNlbGVjdGlvblRleHQ6IHN0cmluZztcblxuICAgIHNvcnRlZEZvbGRlcnM6IGFueVtdW10gPSBbXTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc29ydGVycyA9IHtcbiAgICAgICAgXCJhLXpcIjogKGE6IEZpbGVEZXNjcmlwdG9yLCBiOiBGaWxlRGVzY3JpcHRvcikgPT4gYS5uYW1lID4gYi5uYW1lID8gMSA6IC0xLFxuICAgICAgICBcInotYVwiOiAoYTogRmlsZURlc2NyaXB0b3IsIGI6IEZpbGVEZXNjcmlwdG9yKSA9PiBiLm5hbWUgPiBhLm5hbWUgPyAxIDogLTEsXG4gICAgICAgIFwibGFzdG1vZFwiOiAoYTogRmlsZURlc2NyaXB0b3IsIGI6IEZpbGVEZXNjcmlwdG9yKSA9PiBiLnN0YXRzLm10aW1lTXMgLSBhLnN0YXRzLm10aW1lTXMsXG4gICAgICAgIFwiZmlyc3Rtb2RcIjogKGE6IEZpbGVEZXNjcmlwdG9yLCBiOiBGaWxlRGVzY3JpcHRvcikgPT4gYS5zdGF0cy5tdGltZU1zIC0gYi5zdGF0cy5tdGltZU1zLFxuICAgICAgICBcInNpemVcIjogKGE6IEZpbGVEZXNjcmlwdG9yLCBiOiBGaWxlRGVzY3JpcHRvcikgPT4gYi5zdGF0cy5zaXplIC0gYS5zdGF0cy5zaXplLFxuICAgICAgICBcInR5cGVcIjogKGE6IEZpbGVEZXNjcmlwdG9yLCBiOiBGaWxlRGVzY3JpcHRvcikgPT4gYS5wYXRoLnNwbGl0KCcuJykuc3BsaWNlKC0xLCAxKVswXSA+IGIucGF0aC5zcGxpdCgnLicpLnNwbGljZSgtMSwgMSlbMF0gPyAxIDogLTFcbiAgICB9O1xuICAgIEBJbnB1dCgpIHNvcnRPcmRlcjogRmlsZVNvcnRpbmcgPSBcImEtelwiO1xuXG4gICAgaXRlbXNQZXJSb3cgPSA2O1xuXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGluc2lkZSBvZiBhbiBhcmNoaXZlXG4gICAgaXNBcmNoaXZlID0gdHJ1ZTtcblxuICAgIHVzZXJJc0RyYWdnaW5nRmlsZSA9IGZhbHNlO1xuICAgIGRyYWdnaW5nT3ZlciA9IGZhbHNlO1xuXG4gICAgc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgIGhpZGVMb2FkZXIgPSBmYWxzZTtcbiAgICBmYWlsZWRMb2FkID0gZmFsc2U7XG4gICAgZXJyb3I7XG5cbiAgICByZWFkb25seSBjb2x1bW5zID0gW1xuICAgICAgICB7IGlkOiBcIm5hbWVcIiwgbGFiZWw6IFwiTmFtZVwiIH0sXG4gICAgICAgIHsgaWQ6IFwic2l6ZVwiLCBsYWJlbDogXCJTaXplXCJ9LFxuICAgICAgICB7IGlkOiBcInR5cGVcIiwgbGFiZWw6IFwiVHlwZVwifSxcbiAgICAgICAgeyBpZDogXCJvd25lclwiLCBsYWJlbDogXCJPd25lclwifSxcbiAgICAgICAgeyBpZDogXCJncm91cFwiLCBsYWJlbDogXCJHcm91cFwifSxcbiAgICAgICAgeyBpZDogXCJwZXJtaXNzaW9uc1wiLCBsYWJlbDogXCJQZXJtaXNzaW9uc1wifSxcbiAgICAgICAgeyBpZDogXCJsb2NhdGlvblwiLCBsYWJlbDogXCJMb2NhdGlvblwifSxcbiAgICAgICAgeyBpZDogXCJtb2RpZmllZFwiLCBsYWJlbDogXCJNb2RpZmllZFwifSxcbiAgICAgICAgeyBpZDogXCJtb2RpZmllZC0tdGltZVwiLCBsYWJlbDogXCJNb2RpZmllZCAtIFRpbWVcIn0sXG4gICAgICAgIHsgaWQ6IFwiYWNjZXNzZWRcIiwgbGFiZWw6IFwiQWNjZXNzZWRcIn0sXG4gICAgICAgIHsgaWQ6IFwiY3JlYXRlZFwiLCBsYWJlbDogXCJDcmVhdGVkXCJ9LFxuICAgICAgICB7IGlkOiBcInJlY2VuY3lcIiwgbGFiZWw6IFwiUmVjZW5jeVwifSxcbiAgICAgICAgeyBpZDogXCJzdGFyXCIsIGxhYmVsOiBcIlN0YXJcIn0sXG4gICAgICAgIHsgaWQ6IFwiZGV0YWlsZWQtdHlwZVwiLCBsYWJlbDogXCJEZXRhaWxlZCBUeXBlXCJ9LFxuICAgIF07XG5cbiAgICBjb2xzID0gW1xuICAgICAgICB7IGlkOiBcIm5hbWVcIiwgbGFiZWw6IFwiTmFtZVwiIH0sXG4gICAgICAgIHsgaWQ6IFwic2l6ZVwiLCBsYWJlbDogXCJTaXplXCIgfSxcbiAgICAgICAgeyBpZDogXCJtb2RpZmllZFwiLCBsYWJlbDogXCJNb2RpZmllZFwiIH0sXG4gICAgICAgIHsgaWQ6IFwic3RhclwiLCBsYWJlbDogXCJTdGFyXCIgfVxuICAgIF07XG5cbiAgICBmb2xkZXJDb250ZXh0TWVudTogTWVudUl0ZW08RlNEZXNjcmlwdG9yPltdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJOZXcgRm9sZGVyXCIsXG4gICAgICAgICAgICAvLyBzaG9ydGN1dExhYmVsOiBcIlNoaWZ0K0N0cmwrTlwiLFxuICAgICAgICAgICAgaWNvbjogXCJjcmVhdGVfbmV3X2ZvbGRlclwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoZGF0YSkgPT4gdGhpcy5vbkNyZWF0ZUZvbGRlcihkYXRhKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJVcGxvYWQgZmlsZVwiLFxuICAgICAgICAgICAgLy8gc2hvcnRjdXRMYWJlbDogXCJDdHJsK0RcIixcbiAgICAgICAgICAgIGljb246IFwiZmlsZV91cGxvYWRcIixcbiAgICAgICAgICAgIGFjdGlvbjogKGV2dCkgPT4gdGhpcy5vblVwbG9hZEZpbGUoZXZ0KVxuICAgICAgICB9LFxuICAgICAgICBcInNlcGFyYXRvclwiLFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiAoZGF0YSkgPT4gdHJ1ZSxcbiAgICAgICAgLy8gICAgIGxhYmVsOiBcIl9QX2FzdGVcIixcbiAgICAgICAgLy8gICAgIGljb246IFwiY29udGVudF9wYXN0ZVwiLFxuICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlNlbGVjdCBfQV9sbFwiLFxuICAgICAgICAgICAgc2hvcnRjdXRMYWJlbDogXCJDdHJsK0FcIixcbiAgICAgICAgICAgIGljb246IFwic2VsZWN0X2FsbFwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0aGlzLl9zb3J0RmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25UZXh0ID0gdGhpcy5nZXRTZWxlY3Rpb25UZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFwic2VwYXJhdG9yXCIsXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIGxhYmVsOiBcIlBfcl9vcGVydGllc1wiLFxuICAgICAgICAvLyAgICAgaWNvbjogXCJmaW5kX2luX3BhZ2VcIixcbiAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuXG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICBdO1xuXG4gICAgZmlsZUNvbnRleHRNZW51OiBNZW51SXRlbTxGU0Rlc2NyaXB0b3I+W10gPSBbXTtcblxuICAgIHBlcmZvcm1DaGVja3N1bShwYXRoLCBkaWdlc3QpIHtcbiAgICAgICAgLy8gdGhpcy53aW5kb3dNYW5hZ2VyLm9wZW5XaW5kb3coe1xuICAgICAgICAvLyAgICAgYXBwSWQ6IFwiY2hlY2tzdW1cIixcbiAgICAgICAgLy8gICAgIGRhdGE6IHsgZGlnZXN0LCBwYXRoIH0sXG4gICAgICAgIC8vICAgICB3b3Jrc3BhY2U6IHRoaXMud2luZG93UmVmLndvcmtzcGFjZSxcbiAgICAgICAgLy8gICAgIHdpZHRoOiA2MDAsXG4gICAgICAgIC8vICAgICBoZWlnaHQ6IDI1MFxuICAgICAgICAvLyB9KTtcbiAgICB9XG5cbiAgICBpY29uUmVzb2x2ZXI6IEljb25SZXNvbHZlcjtcblxuICAgIGdldCBsaWJDb25maWcoKSB7IHJldHVybiB0aGlzLmZpbGVNYW5hZ2VyLmxpYkNvbmZpZyB9XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2g6IEZldGNoLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGtleWJvYXJkOiBLZXlib2FyZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVNYW5hZ2VyOiBGaWxlbWFuYWdlckNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgICApIHtcblxuXG4gICAgICAgIHRoaXMuaWNvblJlc29sdmVyID0gbmV3IEljb25SZXNvbHZlcih0aGlzLmxpYkNvbmZpZy5hc3NldFBhdGgpO1xuXG4gICAgICAgIC8vIGN0cmwgKyBhID0+IHNlbGVjdCBhbGxcbiAgICAgICAga2V5Ym9hcmQub25LZXlDb21tYW5kKHtcbiAgICAgICAgICAgIGtleTogXCJhXCIsXG4gICAgICAgICAgICBjdHJsOiB0cnVlLFxuICAgICAgICB9KS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdGhpcy5fc29ydEZpbHRlcigpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25UZXh0ID0gdGhpcy5nZXRTZWxlY3Rpb25UZXh0KCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5uZXh0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY3RybCArIGMgPT4gY29weSBmaWxlIG5hbWVzIHRvIGNsaXBib2FyZFxuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcImNcIixcbiAgICAgICAgICAgIGN0cmw6IHRydWUsXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGN0cmwgKyBoID0+IHRvZ2dsZSBoaWRkZW4gZmlsZXNcbiAgICAgICAga2V5Ym9hcmQub25LZXlDb21tYW5kKHtcbiAgICAgICAgICAgIGtleTogXCJoXCIsXG4gICAgICAgICAgICBjdHJsOiB0cnVlLFxuICAgICAgICAgICAgaW50ZXJydXB0OiB0cnVlXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93SGlkZGVuRmlsZXMgPSAhdGhpcy5zaG93SGlkZGVuRmlsZXM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEYyID0+IFJlbmFtZSBzZWxlY3RlZCBmaWxlc1xuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcImYyXCIsXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgLy8gUmVuYW1lIHNlbGVjdGVkIGZpbGUocylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRW50ZXIgPT4gT3BlbiBzZWxlY3RlZCBmaWxlc1xuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcIkVudGVyXCIsXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzLmZpbHRlcihkYyA9PiB0aGlzLnNlbGVjdGlvbi5maW5kKGkgPT4gaS5uYW1lID09IGRjLm5hbWUpKTtcbiAgICAgICAgICAgIC8vIHRoaXMud2luZG93TWFuYWdlci5vcGVuRmlsZXMoZmlsZXMgYXMgYW55KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRGVsZXRlID0+IGRlbGV0ZSBzZWxlY3RlZCBmaWxlc1xuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcImRlbGV0ZVwiLFxuICAgICAgICB9KS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5kaXJlY3RvcnlDb250ZW50cy5maWx0ZXIoZGMgPT4gdGhpcy5zZWxlY3Rpb24uZmluZChpID0+IGkubmFtZSA9PSBkYy5uYW1lKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICAvLyB0aGlzLmxvYWRGb2xkZXIoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuZmlsZUNvbnRleHRNZW51ID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkRvd25sb2FkXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJkb3dubG9hZFwiLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogKGZpbGUpID0+IHRoaXMuZmlsZU1hbmFnZXIuZG93bmxvYWRGaWxlKGZpbGUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIk9wZW4gaW4gbmV3IFRhYlwiLFxuICAgICAgICAgICAgICAgIGljb246IFwib3Blbl9pbl9uZXdcIixcbiAgICAgICAgICAgICAgICBpc1Zpc2libGU6IChkYXRhKSA9PiBkYXRhLmtpbmQgPT0gXCJkaXJlY3RvcnlcIixcbiAgICAgICAgICAgICAgICBhY3Rpb246IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZU1hbmFnZXIuaW5pdFRhYihkYXRhLnBhdGggKyBkYXRhLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiT3BlbiB3aXRoIEFwcGxpY2F0aW9uLi4uXCIsXG4gICAgICAgICAgICAvLyAgICAgaXNWaXNpYmxlOiAoZGF0YSkgPT4gZGF0YS5raW5kID09IFwiZmlsZVwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtEXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiQ3V0XCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJjb250ZW50X2N1dFwiLFxuICAgICAgICAgICAgLy8gICAgIGlzRGlzYWJsZWQ6IGRhdGEgPT4gdHJ1ZSxcbiAgICAgICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgICBsYWJlbDogXCJDb3B5XCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmaWxlX2NvcHlcIixcbiAgICAgICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiBkYXRhID0+IHRydWUsXG4gICAgICAgICAgICAvLyAgICAgY2hpbGRyZW5SZXNvbHZlcjogKCkgPT4gbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwMDAwMCkpXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIk1vdmUgVG8uLi5cIixcbiAgICAgICAgICAgIC8vICAgICBpY29uOiBcImRyaXZlX2ZpbGVfbW92ZVwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtBXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgICBsYWJlbDogXCJDb3B5IFRvLi4uXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmb2xkZXJfY29weVwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtBXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJEZWxldGVcIixcbiAgICAgICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgIC8vIHNob3J0Y3V0TGFiZWw6IFwiRGVsXCIsXG4gICAgICAgICAgICAgICAgaXNWaXNpYmxlOiBkYXRhID0+ICFkYXRhLnBhdGguaW5jbHVkZXMoXCIjL1wiKSwgLy8gb21pdCBmaWxlcyBpbiBjb21wcmVzc2VkIGRpcnNcbiAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGV2dC5wYXRoICsgZXZ0Lm5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5jb25maWcuYXBpU2V0dGluZ3MuZGVsZXRlRW50cnlVcmxUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmNvbmZpZy5hcGlTZXR0aW5ncy5kZWxldGVFbnRyeVVybFRlbXBsYXRlKHBhdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY29uZmlnLmFwaVNldHRpbmdzLmRlbGV0ZUVudHJ5VXJsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2gucG9zdCh1cmwsIHsgcGF0aDogZXZ0LnBhdGggKyBldnQubmFtZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2FkRm9sZGVyKCkpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiU2hyZWQgZmlsZVwiLFxuICAgICAgICAgICAgLy8gICAgIGljb246IFwiZGVsZXRlX2ZvcmV2ZXJcIixcbiAgICAgICAgICAgIC8vICAgICBpc1Zpc2libGU6IGRhdGEgPT4gIWRhdGEucGF0aC5pbmNsdWRlcyhcIiMvXCIpLCAvLyBvbWl0IGZpbGVzIGluIGNvbXByZXNzZWQgZGlyc1xuICAgICAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLmZldGNoLnBvc3QoYC9hcGkvZmlsZXN5c3RlbS9kZWxldGU/d2lwZT10cnVlYCwgeyBmaWxlczogW2V2dC5wYXRoICsgZXZ0Lm5hbWVdfSlcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMubG9hZEZvbGRlcigpKVxuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlJlbmFtZVwiLFxuICAgICAgICAgICAgICAgIGljb246IFwiZHJpdmVfZmlsZV9yZW5hbWVfb3V0bGluZVwiLFxuICAgICAgICAgICAgICAgIGlzVmlzaWJsZTogZGF0YSA9PiAhZGF0YS5wYXRoLmluY2x1ZGVzKFwiIy9cIiksIC8vIG9taXQgZmlsZXMgaW4gY29tcHJlc3NlZCBkaXJzXG4gICAgICAgICAgICAgICAgLy8gc2hvcnRjdXRMYWJlbDogXCJGMlwiLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihcImZvbGRlci1yZW5hbWVcIiwgXCJAZG90Z2xpdGNoL25neC13ZWItY29tcG9uZW50c1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHM6IHsgcGF0aDogZGF0YT8ucGF0aCB8fCB0aGlzLnBhdGgsIG5hbWU6IGRhdGE/Lm5hbWUgfHwgJycsIGNvbmZpZzogdGhpcy5jb25maWcgfVxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHIgPT4gdGhpcy5sb2FkRm9sZGVyKCkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gRXh0cmFjdCBIZXJlXG4gICAgICAgICAgICAvLyBFeHRyYWN0IFRvLi4uXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiRXh0cmFjdCBIZXJlXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmb2xkZXJfemlwXCIsXG4gICAgICAgICAgICAvLyAgICAgc2hvcnRjdXRMYWJlbDogXCJDdHJsK0FcIixcbiAgICAgICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiAoZGF0YSkgPT4gIShkYXRhLmtpbmQgPT0gXCJmaWxlXCIgJiYgZGF0YS5leHQgIT0gXCIuemlwXCIgJiYgaXNBcmNoaXZlKGRhdGEpKSxcbiAgICAgICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIkV4dHJhY3QgdG8uLi5cIixcbiAgICAgICAgICAgIC8vICAgICBpY29uOiBcImZvbGRlcl96aXBcIixcbiAgICAgICAgICAgIC8vICAgICBzaG9ydGN1dExhYmVsOiBcIkN0cmwrQVwiLFxuICAgICAgICAgICAgLy8gICAgIGlzRGlzYWJsZWQ6IChkYXRhKSA9PiAhKGRhdGEua2luZCA9PSBcImZpbGVcIiAmJiBkYXRhLmV4dCAhPSBcIi56aXBcIiAmJiBpc0FyY2hpdmUoZGF0YSkpLFxuICAgICAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiQ29tcHJlc3MuLi5cIixcbiAgICAgICAgICAgIC8vICAgICBpY29uOiBcImZvbGRlcl96aXBcIixcbiAgICAgICAgICAgIC8vICAgICBzaG9ydGN1dExhYmVsOiBcIkN0cmwrQVwiLFxuICAgICAgICAgICAgLy8gICAgIGlzRGlzYWJsZWQ6IChkYXRhKSA9PiBkYXRhLmtpbmQgPT0gXCJmaWxlXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJDaGVja3N1bVwiLFxuICAgICAgICAgICAgICAgIGljb246IFwibWFuYWdlX3NlYXJjaFwiLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IChkYXRhKSA9PiBkYXRhLmtpbmQgIT0gXCJmaWxlXCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiTUQ1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHRoaXMucGVyZm9ybUNoZWNrc3VtKGV2dC5wYXRoICsgZXZ0Lm5hbWUsIFwibWQ1XCIpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJTSEExXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHRoaXMucGVyZm9ybUNoZWNrc3VtKGV2dC5wYXRoICsgZXZ0Lm5hbWUsIFwic2hhMVwiKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiU0hBMjU2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHRoaXMucGVyZm9ybUNoZWNrc3VtKGV2dC5wYXRoICsgZXZ0Lm5hbWUsIFwic2hhMjU2XCIpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJTSEE1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogKGV2dCkgPT4gdGhpcy5wZXJmb3JtQ2hlY2tzdW0oZXZ0LnBhdGggKyBldnQubmFtZSwgXCJzaGE1MTJcIiksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpc1Zpc2libGU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzQXJjaGl2ZSB8fCBkYXRhLmtpbmQgPT0gXCJmaWxlXCI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiU3RhclwiLFxuICAgICAgICAgICAgLy8gICAgIGljb246IFwic3RhclwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtBXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiUF9yX29wZXJ0aWVzXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmaW5kX2luX3BhZ2VcIixcbiAgICAgICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcblxuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZEZvbGRlcigpIHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oaWRlTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmFpbGVkTG9hZCA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmFwaVNldHRpbmdzLmxpc3RFbnRyaWVzVXJsVGVtcGxhdGVcbiAgICAgICAgICAgID8gdGhpcy5jb25maWcuYXBpU2V0dGluZ3MubGlzdEVudHJpZXNVcmxUZW1wbGF0ZSh0aGlzLnBhdGgpXG4gICAgICAgICAgICA6IHRoaXMuY29uZmlnLmFwaVNldHRpbmdzLmxpc3RFbnRyaWVzVXJsXG5cbiAgICAgICAgdGhpcy5mZXRjaC5wb3N0KHVybCwgeyBwYXRoOiB0aGlzLnBhdGgsIHNob3dIaWRkZW46IHRoaXMuc2hvd0hpZGRlbkZpbGVzIH0sIHt9LCB0cnVlKVxuICAgICAgICAgICAgLnRoZW4oKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlRGVzY3JpcHRvcltdID0gZGF0YT8uZmlsZXMgfHwgW107XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyczogRGlyZWN0b3J5RGVzY3JpcHRvcltdID0gZGF0YT8uZGlycyB8fCBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9ycyA9IGZpbGVzLmNvbmNhdChkaXJzIGFzIGFueSkgYXMgRlNEZXNjcmlwdG9yW107XG5cbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9ycy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmWydfaWNvbiddID0gdGhpcy5pY29uUmVzb2x2ZXIucmVzb2x2ZUljb24oZik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmLmtpbmQgPT0gXCJmaWxlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZbJ19jdGltZSddID0gbmV3IERhdGUoZi5zdGF0cz8uY3RpbWVNcyk/LnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmWydfbXRpbWUnXSA9IG5ldyBEYXRlKGYuc3RhdHM/Lm10aW1lTXMpPy50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZlsnX3NpemUnXSA9IHRoaXMuYnl0ZXNUb1N0cmluZyhmLnN0YXRzPy5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kaXJlY3RvcnlDb250ZW50cyA9IGRlc2NyaXB0b3JzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydEZpbHRlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRmlsZXMubmV4dChkZXNjcmlwdG9ycyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3J0ZWRGb2xkZXJzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmxvd1Jvd3MoKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemUoKSwgMjUwKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplKCksIDUwMCk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZSgpLCAxMDAwKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplKCksIDI1MDApO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemUoKSwgNTAwMCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbGVkTG9hZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGU7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICAgIH0pXG4gICAgfVxuXG4gICAgZmxvd1Jvd3MoKSB7XG4gICAgICAgIGxldCBmaWx0ZXJlZCA9IHRoaXMuX3NvcnRGaWx0ZXIoKTtcblxuICAgICAgICB0aGlzLnNvcnRlZEZvbGRlcnMgPSBbXTtcbiAgICAgICAgY29uc3QgbnVtID0gTWF0aC5jZWlsKGZpbHRlcmVkLmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJSb3cpO1xuICAgICAgICBjb25zdCBpdGVyYXRpb25zID0gTWF0aC5taW4obnVtLCAxMDApO1xuXG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGl0ZXJhdGlvbnM7IHJvdysrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc29ydGVkRm9sZGVyc1tyb3ddKVxuICAgICAgICAgICAgICAgIHRoaXMuc29ydGVkRm9sZGVyc1tyb3ddID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSByb3cgKiB0aGlzLml0ZW1zUGVyUm93OyBpIDwgKHJvdyArIDEpICogdGhpcy5pdGVtc1BlclJvdyAmJiBpIDwgZmlsdGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRlZEZvbGRlcnNbcm93XS5wdXNoKGZpbHRlcmVkW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VsZWN0KGl0ZW06IEZTRGVzY3JpcHRvciwgZXZ0KSB7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5rZXlib2FyZC5pc1NoaWZ0UHJlc3NlZCkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5kaXJlY3RvcnlDb250ZW50cy5maW5kSW5kZXgoaSA9PiBpLm5hbWUgPT0gdGhpcy5zZWxlY3Rpb24uc2xpY2UoLTEsIDEpWzBdLm5hbWUpO1xuICAgICAgICAgICAgbGV0IGVuZCA9IHRoaXMuZGlyZWN0b3J5Q29udGVudHMuaW5kZXhPZihpdGVtKTtcblxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09IC0xKVxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kO1xuXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSBzdGFydCA+IGVuZFxuICAgICAgICAgICAgICAgID8gdGhpcy5kaXJlY3RvcnlDb250ZW50cy5zbGljZShlbmQsIHN0YXJ0ICsgMSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZGlyZWN0b3J5Q29udGVudHMuc2xpY2Uoc3RhcnQsIGVuZCArIDEpO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IGl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMua2V5Ym9hcmQuaXNDdHJsUHJlc3NlZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pbmNsdWRlcyhpdGVtKSlcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgZWxzZSAvLyBDYXNlIHRoYXQgd2Ugc2VsZWN0ZWQgdGhlIHNhbWUgaXRlbSB0d2ljZVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNwbGljZSh0aGlzLnNlbGVjdGlvbi5pbmRleE9mKGl0ZW0pLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFtpdGVtXTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblswXS5raW5kID09IFwiZGlyZWN0b3J5XCIpXG4gICAgICAgICAgICAgICAgdGhpcy5mb2xkZXJTZWxlY3QubmV4dCh0aGlzLnNlbGVjdGlvblswXSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlU2VsZWN0Lm5leHQodGhpcy5zZWxlY3Rpb25bMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uVGV4dCA9IHRoaXMuZ2V0U2VsZWN0aW9uVGV4dCgpO1xuICAgIH1cblxuICAgIG9uSXRlbUNsaWNrKGZpbGU6IEZTRGVzY3JpcHRvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhmaWxlLCB0aGlzKTtcbiAgICAgICAgaWYgKGZpbGUua2luZCA9PSBcImRpcmVjdG9yeVwiKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRlckRibENsaWNrLm5leHQoZmlsZSk7XG4gICAgICAgICAgICB0aGlzLnBhdGggPSBmaWxlLnBhdGggKyBmaWxlLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSBpZiAoZmlsZS5leHQgPT0gXCJ6aXBcIikge1xuICAgICAgICAvLyAgICAgdGhpcy5maWxlRGJsQ2xpY2submV4dChmaWxlKTtcbiAgICAgICAgLy8gICAgIHRoaXMucGF0aCA9IGZpbGUucGF0aCArIGZpbGUubmFtZTtcbiAgICAgICAgLy8gfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZURibENsaWNrLm5leHQoZmlsZSk7XG4gICAgICAgICAgICB0aGlzLmZpbGVTZWxlY3QubmV4dChmaWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVG9nZ2xlKGl0ZW0sIHN0YXRlOiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgICAgICBpdGVtWydfdmFsdWUnXSA9IHN0YXRlLmNoZWNrZWQ7XG5cbiAgICAgICAgLy8gVE9ETzogV2hhdCBjYXVzZXMgdGhpcyB0byBiZSBudWxsIHdoZW4gaW5pdGlhbGl6ZWQgd2l0aCBhbiBhcnJheT9cbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuY2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaSA9IHRoaXMudmFsdWUuZmluZEluZGV4KHYgPT4gdiA9PSBpdGVtKTtcbiAgICAgICAgICAgIGlmIChpID49IDApXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIGFzeW5jIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UubmV4dCh0aGlzLnZhbHVlKTtcblxuICAgICAgICB0aGlzLnRhYnVsYXRvcj8udGFibGU/LmdldFJvd3MoKS5mb3JFYWNoKHIgPT4gci5nZXRFbGVtZW50KCkuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc29ydEZpbHRlcigpOiBGaWxlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0b3J5Q29udGVudHMgPSB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzPy5maWx0ZXIoZCA9PiBkLmtpbmQgPT0gJ2RpcmVjdG9yeScpXG4gICAgICAgICAgICAuY29uY2F0KHRoaXMuZGlyZWN0b3J5Q29udGVudHM/LmZpbHRlcihkID0+IGQua2luZCA9PSAnZmlsZScpXG4gICAgICAgICAgICAgICAgLnNvcnQodGhpcy5zb3J0ZXJzW3RoaXMuc29ydE9yZGVyXSlcbiAgICAgICAgICAgICkgYXMgRmlsZURlc2NyaXB0b3JbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvblRleHQoKSB7XG4gICAgICAgIGNvbnN0IGRpckNvdW50ID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKHMgPT4gcy5raW5kID09IFwiZGlyZWN0b3J5XCIpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZmlsZUNvdW50ID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKHMgPT4gcy5raW5kID09IFwiZmlsZVwiKS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGRpckNvdW50ICsgZmlsZUNvdW50ID09IDApIHJldHVybiBcIlwiO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsU2l6ZSA9XG4gICAgICAgICAgICB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihkID0+IGQua2luZCA9PSBcImZpbGVcIilcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGQgPT4gdGhpcy5zZWxlY3Rpb24/LmZpbmQoaSA9PiBpLm5hbWUgPT0gZC5uYW1lKSlcbiAgICAgICAgICAgICAgICAubWFwKGQgPT4gZFsnc3RhdHMnXS5zaXplKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcblxuICAgICAgICBpZiAoZGlyQ291bnQgKyBmaWxlQ291bnQgPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBgXCIke3RoaXMuc2VsZWN0aW9uWzBdLm5hbWV9XCIgc2VsZWN0ZWQgKCR7dGhpcy5ieXRlc1RvU3RyaW5nKHRvdGFsU2l6ZSl9KWA7XG5cbiAgICAgICAgaWYgKGRpckNvdW50ID4gMCAmJiBmaWxlQ291bnQgPT0gMClcbiAgICAgICAgICAgIHJldHVybiBgXCIke2RpckNvdW50fVwiIGZvbGRlcnMgc2VsZWN0ZWRgO1xuICAgICAgICBpZiAoZmlsZUNvdW50ID4gMCAmJiBkaXJDb3VudCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGAke2ZpbGVDb3VudH0gaXRlbXMgc2VsZWN0ZWQgKCR7dGhpcy5ieXRlc1RvU3RyaW5nKHRvdGFsU2l6ZSl9KWA7XG5cbiAgICAgICAgcmV0dXJuIGAke2RpckNvdW50fSBmb2xkZXIke2RpckNvdW50ID09IDEgPyBcIlwiIDogXCJzXCJ9IHNlbGVjdGVkLCAke2ZpbGVDb3VudH0gb3RoZXIgaXRlbSR7ZmlsZUNvdW50ID09IDEgPyBcIlwiIDogXCJzXCJ9IHNlbGVjdGVkICgke3RoaXMuYnl0ZXNUb1N0cmluZyh0b3RhbFNpemUpfSlgO1xuICAgIH1cblxuICAgIGJ5dGVzVG9TdHJpbmcoYnl0ZXM6IG51bWJlciwgZGVjaW1hbHMgPSAyKSB7XG4gICAgICAgIGlmICghK2J5dGVzKSByZXR1cm4gJzAgQnl0ZXMnO1xuXG4gICAgICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgICAgICBjb25zdCBkbSA9IGRlY2ltYWxzIDwgMCA/IDAgOiBkZWNpbWFscztcbiAgICAgICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XG5cbiAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuXG4gICAgICAgIHJldHVybiBgJHtwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKGRtKSl9ICR7c2l6ZXNbaV19YDtcbiAgICB9XG5cbiAgICByZXNpemUoKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlc1JlZikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZSgpLCAyNSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYm91bmRzID0gKHRoaXMuZmlsZXNSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgbmV3Q29sQ291bnQgPSBNYXRoLmZsb29yKGJvdW5kcy53aWR0aCAvIGl0ZW1XaWR0aCk7XG4gICAgICAgIGlmIChuZXdDb2xDb3VudCAhPSB0aGlzLml0ZW1zUGVyUm93KSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zUGVyUm93ID0gTWF0aC5mbG9vcihib3VuZHMud2lkdGggLyBpdGVtV2lkdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNQZXJSb3cgPiAxMDApXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1BlclJvdyA9IDE7XG5cbiAgICAgICAgICAgIHRoaXMuZmxvd1Jvd3MoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNvcnRlZEZvbGRlcnM/Lmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgdGhpcy5mbG93Um93cygpO1xuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0KGV2dDogRHJhZ0V2ZW50LCBpdGVtOiBGU0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gYCR7d2luZG93Lm9yaWdpbn0vYXBpL2ZpbGVzeXN0ZW0vZG93bmxvYWQ/ZGlyPSR7aXRlbS5wYXRofSZmaWxlPSR7aXRlbS5uYW1lfWA7XG5cbiAgICAgICAgZXZ0LmRhdGFUcmFuc2Zlci5jbGVhckRhdGEoKTtcbiAgICAgICAgLy8gZXZ0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3VyaS1saXN0JywgdGFyZ2V0KTtcbiAgICAgICAgLy8gZXZ0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCdEb3dubG9hZFVSTCcsIGB0ZXh0L3VyaS1saXN0OiR7dGFyZ2V0fWApO1xuICAgICAgICBldnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCBpdGVtLm5hbWUpO1xuICAgIH1cblxuICAgIG9uRHJvcChldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChldi5kYXRhVHJhbnNmZXIuaXRlbXMpIHtcbiAgICAgICAgICAgIC8vIFVzZSBEYXRhVHJhbnNmZXJJdGVtTGlzdCBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBmaWxlKHMpXG4gICAgICAgICAgICBbLi4uZXYuZGF0YVRyYW5zZmVyLml0ZW1zXS5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICAvLyBJZiBkcm9wcGVkIGl0ZW1zIGFyZW4ndCBmaWxlcywgcmVqZWN0IHRoZW1cbiAgICAgICAgICAgIGlmIChpdGVtLmtpbmQgPT09IFwiZmlsZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYOKApiBmaWxlWyR7aX1dLm5hbWUgPSAke2ZpbGUubmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVXNlIERhdGFUcmFuc2ZlciBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBmaWxlKHMpXG4gICAgICAgICAgICBbLi4uZXYuZGF0YVRyYW5zZmVyLmZpbGVzXS5mb3JFYWNoKChmaWxlLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhg4oCmIGZpbGVbJHtpfV0ubmFtZSA9ICR7ZmlsZS5uYW1lfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuYW1lQ2VsbEZvcm1hdHRlciA9ICgoY2VsbDogQ2VsbENvbXBvbmVudCwgZm9ybWF0dGVyUGFyYW1zOiB7fSwgb25SZW5kZXJlZDogRW1wdHlDYWxsYmFjaykgPT4ge1xuICAgICAgICAvLyBUT0RPOiBTYW5pdGl6ZT9cbiAgICAgICAgY29uc3QgaXRlbSA9IGNlbGwuZ2V0RGF0YSgpIGFzIEZTRGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3R5bGU9XCJoZWlnaHQ6IDI0cHg7IG1hcmdpbi1yaWdodDogNnB4XCIgc3JjPVwiJHtpdGVtWydfaWNvbiddLnBhdGh9XCIvPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOiAwXCI+JHt0aGlzLnNhbml0aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuSFRNTCwgaXRlbVsndmFuaXR5TmFtZSddIHx8IGl0ZW0ubmFtZSl9PC9wPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICBgO1xuICAgIH0pLmJpbmQodGhpcylcblxuICAgIG9uUm93Q3R4KHtldmVudCwgcm93fSkge1xuICAgICAgICBvcGVuTWVudSh0aGlzLm1hdERpYWxvZywgdGhpcy5maWxlQ29udGV4dE1lbnUsIHJvdy5nZXREYXRhKCksIGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblJvd0NsaWNrKHtldmVudCwgcm93LCBkYXRhfSkge1xuICAgICAgICAvLyAkZXZlbnQuZGF0YVsnX3ZhbHVlJ10gPSAkZXZlbnQuZGF0YVsnX3ZhbHVlJ10gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhldmVudCwgcm93LCBkYXRhLCB0aGlzLnZhbHVlKTtcblxuICAgICAgICBjb25zdCByb3dFbCA9IHJvdy5nZXRFbGVtZW50KCk7XG4gICAgICAgIGxldCBzdGF0ZSA9IHJvd0VsLmNsYXNzTGlzdC5jb250YWlucygnc2VsZWN0ZWQnKTtcbiAgICAgICAgZGF0YVsnX3ZhbHVlJ10gPSAhc3RhdGU7XG5cbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICByb3dFbC5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcm93RWwuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLnZhbHVlLmZpbmRJbmRleCh2ID0+IHYgPT0gZGF0YSk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHNvcnQoKSB7XG4gICAgICAgIHRoaXMuX3NvcnRGaWx0ZXIoKTtcbiAgICB9XG5cbiAgICBvblVwbG9hZEZpbGUoZXZ0PzogRlNEZXNjcmlwdG9yKSB7XG4gICAgICAgIHVwbG9hZEZpbGUoXG4gICAgICAgICAgICB0aGlzLmZldGNoLFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICB0aGlzLl9wYXRoLFxuICAgICAgICAgICAgZXZ0ID8gKGV2dC5wYXRoICsgZXZ0Lm5hbWUpIDogbnVsbCxcbiAgICAgICAgICAgIHRoaXMuZmlsZU1hbmFnZXIuY29udGV4dFRhZ3NcbiAgICAgICAgKVxuICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgLy8gUmVmcmVzaCBmb2xkZXIgY29udGVudHNcbiAgICAgICAgICAgIHRoaXMubG9hZEZvbGRlcigpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIG9uQ3JlYXRlRm9sZGVyKGRhdGE/OiBGU0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihcImZvbGRlci1yZW5hbWVcIiwgXCJAZG90Z2xpdGNoL25neC13ZWItY29tcG9uZW50c1wiLCB7XG4gICAgICAgICAgICBpbnB1dHM6IHsgcGF0aDogZGF0YT8ucGF0aCB8fCB0aGlzLnBhdGgsIG5hbWU6IGRhdGE/Lm5hbWUgfHwgJycsIGNvbmZpZzogdGhpcy5jb25maWcgfVxuICAgICAgICB9KS50aGVuKHIgPT4gdGhpcy5sb2FkRm9sZGVyKCkpXG4gICAgfVxufVxuXG4iLCJAaWYgKHNob3dMb2FkZXIpIHtcbiAgICA8bWF0LXByb2dyZXNzLWJhciBbY2xhc3MuaGlkZV09XCJoaWRlTG9hZGVyXCIgbW9kZT1cInF1ZXJ5XCIvPlxufVxuXG48ZGl2XG4gICAgc3R5bGU9XCJkaXNwbGF5OiBjb250ZW50c1wiXG4gICAgW3N0eWxlLi0tZmlsZW1hbmFnZXItZmlsZWljb24tYmFja2Ryb3BdPVwiJ3VybCgnICsgaWNvblJlc29sdmVyLnBhdGggKyAnL3BvcC9nZW5lcmljLnN2ZyknXCJcbiAgICAoZHJhZ3N0YXJ0KT1cInVzZXJJc0RyYWdnaW5nRmlsZSA9IHRydWVcIlxuICAgIChkcmFnZW5kKT1cInVzZXJJc0RyYWdnaW5nRmlsZSA9IGZhbHNlXCJcbiAgICAoZHJhZ292ZXIpPVwiZHJhZ2dpbmdPdmVyID0gdHJ1ZVwiXG4gICAgKGRyYWdsZWF2ZSk9XCJkcmFnZ2luZ092ZXIgPSBmYWxzZVwiXG4gICAgKG9uZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4+XG5cbiAgICBAaWYgKGZhaWxlZExvYWQpIHtcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktaXRlbXM6IGNlbnRlcjsgaGVpZ2h0OiAxMDAlXCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWF4LXdpZHRoOiA0MDBweDsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgPGltZyBzdHlsZT1cIndpZHRoOiAyMDBweFwiIHNyYz1cImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgZmlsbD0ndmFyKC0tdGV4dC1jb2xvciknIGlkPSdDYXBhXzEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHdpZHRoPSc4MDBweCcgaGVpZ2h0PSc4MDBweCcgdmlld0JveD0nMCAwIDYwMC41MjUgNjAwLjUyNScgeG1sOnNwYWNlPSdwcmVzZXJ2ZSclM0UlM0NnJTNFJTNDZyUzRSUzQ3BhdGggZD0nTTU3LjM3NSwxMzguNjU2TDQzLjAzMSw5NS4xNDZjLTIzLjQyOCw4LjEyOC00MC4xNjIsMjkuMTY2LTQyLjU1Myw1NC4wMjhsNDUuOSwzLjgyNSBDNDYuODU2LDE0Ni4zMDYsNTEuMTYsMTQwLjU2OCw1Ny4zNzUsMTM4LjY1NnonLyUzRSUzQ3JlY3QgeT0nMjg4LjMwOScgd2lkdGg9JzQ1LjknIGhlaWdodD0nNDUuOTAxJy8lM0UlM0NwYXRoIGQ9J001NTQuNjI1LDQ0Ni4wOTFjMCwzLjM0Ni0wLjk1Niw2LjIxNS0yLjg2OCw5LjA4NGwzOC4yNSwyNS4zNGM2LjY5My0xMC4wMzksMTAuMDQtMjEuOTkyLDEwLjA0LTM0LjQyNFY0MjMuMTRoLTQ1Ljg5OSB2MjIuOTUxSDU1NC42MjV6Jy8lM0UlM0NyZWN0IHg9JzQ1Ni42MDknIHk9JzE0Ni4zMDYnIHdpZHRoPSc0NS45JyBoZWlnaHQ9JzQ1LjknLyUzRSUzQ3JlY3QgeD0nNDg1LjI5NycgeT0nNDYyLjgyNScgd2lkdGg9JzQ1LjknIGhlaWdodD0nNDUuOScvJTNFJTNDcmVjdCB4PSczOTMuNDk3JyB5PSc0NjIuODI1JyB3aWR0aD0nNDUuOScgaGVpZ2h0PSc0NS45Jy8lM0UlM0NyZWN0IHg9JzM2NC44MScgeT0nMTQ2LjMwNicgd2lkdGg9JzQ1LjknIGhlaWdodD0nNDUuOScvJTNFJTNDcmVjdCB4PScxMTguMDk3JyB5PSc0NjIuODI1JyB3aWR0aD0nNDUuOScgaGVpZ2h0PSc0NS45Jy8lM0UlM0NyZWN0IHk9JzM4MC4xMDgnIHdpZHRoPSc0NS45JyBoZWlnaHQ9JzQ1LjknLyUzRSUzQ3JlY3QgeT0nMTk2LjUwOScgd2lkdGg9JzQ1LjknIGhlaWdodD0nNDUuOScvJTNFJTNDcGF0aCBkPSdNMzMwLjM4NSwxNDMuNDM3Yy0yLjM5MS0xLjQzNC0zLjgyNS0yLjM5MS00LjMwNC0yLjg2OWwtMjguMjA5LTI5LjE2NmMtMS45MTMtMS45MTMtNC4zMDMtMy44MjUtNi42OTQtNS43MzcgbC0yNy4yNTMsMzYuODE1YzAuNDc4LDAuNDc4LDAuOTU2LDAuOTU2LDAuOTU2LDAuOTU2czM3Ljc3MiwzNC40MjUsNDQuNDY1LDQxLjExOUwzMzAuMzg1LDE0My40Mzd6Jy8lM0UlM0NyZWN0IHg9JzU1NC42MjUnIHk9JzIzOS41NDEnIHdpZHRoPSc0NS45JyBoZWlnaHQ9JzQ1LjknLyUzRSUzQ3JlY3QgeD0nMzAxLjY5NycgeT0nNDYyLjgyNScgd2lkdGg9JzQ1Ljg5OScgaGVpZ2h0PSc0NS45Jy8lM0UlM0NwYXRoIGQ9J001NTkuODg1LDE0Ni4zMDZoLTEwLjk5N3Y0Ny44MTJoNS43MzdoNDUuOXYtNy4xNzJDNjAwLjUyNSwxNjQuNDc1LDU4Mi4zNTYsMTQ2LjMwNiw1NTkuODg1LDE0Ni4zMDZ6Jy8lM0UlM0NyZWN0IHg9JzE4Ny40MjUnIHk9JzkxLjgnIHdpZHRoPSc0NS45JyBoZWlnaHQ9JzQ1LjknLyUzRSUzQ3JlY3QgeD0nNTU0LjYyNScgeT0nMzMxLjM0MScgd2lkdGg9JzQ1LjknIGhlaWdodD0nNDUuOScvJTNFJTNDcmVjdCB4PSc5NS42MjUnIHk9JzkxLjgnIHdpZHRoPSc0NS45JyBoZWlnaHQ9JzQ1LjknLyUzRSUzQ3JlY3QgeD0nMjA5Ljg5NycgeT0nNDYyLjgyNScgd2lkdGg9JzQ1LjknIGhlaWdodD0nNDUuOScvJTNFJTNDcGF0aCBkPSdNNDkuMjQ3LDQ1Ni4xMzJsLTM2LjMzNywyNy43M2MxMS45NTMsMTUuNzc3LDMwLjEyMiwyNC44NjMsNDkuNzI1LDI0Ljg2M2g5LjU2MnYtNDUuOWgtOS41NjIgQzU3LjM3NSw0NjIuODI1LDUyLjU5NCw0NjAuNDM1LDQ5LjI0Nyw0NTYuMTMyeicvJTNFJTNDL2clM0UlM0MvZyUzRSUzQy9zdmclM0VcIj5cblxuICAgICAgICAgICAgICAgIDwhLS0gVXBsb2FkZWQgdG86IFNWRyBSZXBvLCB3d3cuc3ZncmVwby5jb20sIEdlbmVyYXRvcjogU1ZHIFJlcG8gTWl4ZXIgVG9vbHMgLS0+XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgICBmaWxsPVwidmFyKC0tdGV4dC1jb2xvcilcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwMHB4XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCA2MDAuNTI1IDYwMC41MjVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk01Ny4zNzUsMTM4LjY1Nkw0My4wMzEsOTUuMTQ2Yy0yMy40MjgsOC4xMjgtNDAuMTYyLDI5LjE2Ni00Mi41NTMsNTQuMDI4bDQ1LjksMy44MjVDNDYuODU2LDE0Ni4zMDYsNTEuMTYsMTQwLjU2OCw1Ny4zNzUsMTM4LjY1NnpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB5PVwiMjg4LjMwOVwiIHdpZHRoPVwiNDUuOVwiIGhlaWdodD1cIjQ1LjkwMVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNTU0LjYyNSw0NDYuMDkxYzAsMy4zNDYtMC45NTYsNi4yMTUtMi44NjgsOS4wODRsMzguMjUsMjUuMzRjNi42OTMtMTAuMDM5LDEwLjA0LTIxLjk5MiwxMC4wNC0zNC40MjRWNDIzLjE0aC00NS44OTl2MjIuOTUxSDU1NC42MjV6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjQ1Ni42MDlcIiB5PVwiMTQ2LjMwNlwiIHdpZHRoPVwiNDUuOVwiIGhlaWdodD1cIjQ1LjlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNDg1LjI5N1wiIHk9XCI0NjIuODI1XCIgd2lkdGg9XCI0NS45XCIgaGVpZ2h0PVwiNDUuOVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzOTMuNDk3XCIgeT1cIjQ2Mi44MjVcIiB3aWR0aD1cIjQ1LjlcIiBoZWlnaHQ9XCI0NS45XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjM2NC44MVwiIHk9XCIxNDYuMzA2XCIgd2lkdGg9XCI0NS45XCIgaGVpZ2h0PVwiNDUuOVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxMTguMDk3XCIgeT1cIjQ2Mi44MjVcIiB3aWR0aD1cIjQ1LjlcIiBoZWlnaHQ9XCI0NS45XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeT1cIjM4MC4xMDhcIiB3aWR0aD1cIjQ1LjlcIiBoZWlnaHQ9XCI0NS45XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeT1cIjE5Ni41MDlcIiB3aWR0aD1cIjQ1LjlcIiBoZWlnaHQ9XCI0NS45XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zMzAuMzg1LDE0My40MzdjLTIuMzkxLTEuNDM0LTMuODI1LTIuMzkxLTQuMzA0LTIuODY5bC0yOC4yMDktMjkuMTY2Yy0xLjkxMy0xLjkxMy00LjMwMy0zLjgyNS02LjY5NC01LjczN2wtMjcuMjUzLDM2LjgxNWMwLjQ3OCwwLjQ3OCwwLjk1NiwwLjk1NiwwLjk1NiwwLjk1NnMzNy43NzIsMzQuNDI1LDQ0LjQ2NSw0MS4xMTlMMzMwLjM4NSwxNDMuNDM3elwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI1NTQuNjI1XCIgeT1cIjIzOS41NDFcIiB3aWR0aD1cIjQ1LjlcIiBoZWlnaHQ9XCI0NS45XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjMwMS42OTdcIiB5PVwiNDYyLjgyNVwiIHdpZHRoPVwiNDUuODk5XCIgaGVpZ2h0PVwiNDUuOVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNTU5Ljg4NSwxNDYuMzA2aC0xMC45OTd2NDcuODEyaDUuNzM3aDQ1Ljl2LTcuMTcyQzYwMC41MjUsMTY0LjQ3NSw1ODIuMzU2LDE0Ni4zMDYsNTU5Ljg4NSwxNDYuMzA2elwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIxODcuNDI1XCIgeT1cIjkxLjhcIiB3aWR0aD1cIjQ1LjlcIiBoZWlnaHQ9XCI0NS45XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjU1NC42MjVcIiB5PVwiMzMxLjM0MVwiIHdpZHRoPVwiNDUuOVwiIGhlaWdodD1cIjQ1LjlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiOTUuNjI1XCIgeT1cIjkxLjhcIiB3aWR0aD1cIjQ1LjlcIiBoZWlnaHQ9XCI0NS45XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjIwOS44OTdcIiB5PVwiNDYyLjgyNVwiIHdpZHRoPVwiNDUuOVwiIGhlaWdodD1cIjQ1LjlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQ5LjI0Nyw0NTYuMTMybC0zNi4zMzcsMjcuNzNjMTEuOTUzLDE1Ljc3NywzMC4xMjIsMjQuODYzLDQ5LjcyNSwyNC44NjNoOS41NjJ2LTQ1LjloLTkuNTYyQzU3LjM3NSw0NjIuODI1LDUyLjU5NCw0NjAuNDM1LDQ5LjI0Nyw0NTYuMTMyelwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG5cbiAgICAgICAgICAgICAgICA8aDM+U29ycnkgYWJvdXQgdGhhdC48L2gzPlxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgICBPdXIgc2VydmVycyBhcmVuJ3QgZG9pbmcgdGhlaXIgdGhpbmcgcmlnaHQgbm93LlxuICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHRyeSBhZ2FpbiBsYXRlciBvciBjb250YWN0IGFuIGFkbWluaXN0cmF0b3IgYWJvdXQgdGhpcy5cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgPGhyIHN0eWxlPVwid2lkdGg6IDEwMCU7IG9wYWNpdHk6IC41O1wiLz5cbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgRXJyb3I6XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6IHZhcigtLW1hdC10YWItaGVhZGVyLWFjdGl2ZS1mb2N1cy1sYWJlbC10ZXh0LWNvbG9yKVwiPnt7ZXJyb3Iuc3RhdHVzfX08L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChlcnJvci5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZToge3tlcnJvci5lcnJvcj8ubWVzc2FnZX19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChlcnJvci5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZToge3tlcnJvci5lcnJvcj8ubWVzc2FnZX19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChlcnJvci5lcnJvcj8ubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZToge3tlcnJvci5lcnJvcj8ubWVzc2FnZX19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZHJhZ2dpbmdPdmVyXCI+PC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICA8IS0tIEdyaWQgbW9kZSAtLT5cbiAgICAgICAgQGlmICh2aWV3TW9kZSA9PSAnZ3JpZCcpIHtcbiAgICAgICAgICAgIDxuZy1zY3JvbGxiYXJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImdyaWQgY29udGVudC1hcmVhIHt7Z3JpZFNpemV9fSB7e2NvbmZpZy5pbWFnZVNpemUgfHwgJ25vcm1hbCd9fVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGlvbk1vZGVdPVwiY29uZmlnLm1vZGUgPT0gJ2ZvY3VzRmlsZXMnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2hvd0Ryb3BBcmVhXT1cImRyYWdnaW5nT3ZlclwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlXCJcbiAgICAgICAgICAgICAgICB0cmFjaz1cInZlcnRpY2FsXCJcbiAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzTWV0aG9kPVwic2Nyb2xsYmFyXCJcbiAgICAgICAgICAgICAgICBbbmd4LWNvbnRleHRtZW51XT1cImZvbGRlckNvbnRleHRNZW51XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzaXplLW9ic2VydmVyXCIgI2ZpbGVWaWV3cG9ydD48L2Rpdj5cbiAgICAgICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1TaXplPVwiMTUwXCJcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsVmlld3BvcnRcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGlvbiA9IFtdOyBzZWxlY3Rpb25UZXh0ID0gJydcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpjZGtWaXJ0dWFsRm9yPVwibGV0IHJvdyBvZiBzb3J0ZWRGb2xkZXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIHJvdzsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cInNlbGVjdGlvbi5pbmNsdWRlcyhpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5nZW5lcmljXT1cIml0ZW1bJ19pY29uJ10ubmVlZHNCYWNrZHJvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ3gtY29udGV4dG1lbnVdPVwiZmlsZUNvbnRleHRNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25neC1tZW51LWNvbnRleHRdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZy5tb2RlID09ICdmb2N1c0ZpbGVzJyAmJiBpdGVtLmtpbmQgPT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2NoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXRlbVsnX3ZhbHVlJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Ub2dnbGUoaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogY29udGVudHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0KGl0ZW0sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRibGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkcmFnc3RhcnQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpdGVtWydfaWNvbiddLnBhdGhcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD57e2l0ZW1bJ3Zhbml0eU5hbWUnXSB8fCBpdGVtLm5hbWV9fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgICAgICAgICAgPC9uZy1zY3JvbGxiYXI+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tIExpc3QgbW9kZSAtLT5cbiAgICAgICAgQGlmICh2aWV3TW9kZSA9PSAnbGlzdCcpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRlbnQtYXJlYVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2hvd0Ryb3BBcmVhXT1cImRyYWdnaW5nT3ZlclwiXG4gICAgICAgICAgICAgICAgW25neC1jb250ZXh0bWVudV09XCJmb2xkZXJDb250ZXh0TWVudVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGFwcC10YWJ1bGF0b3JcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGlyZWN0b3J5Q29udGVudHNcIlxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJbXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnbmFtZScsIHRpdGxlOiAnTmFtZScsIGZvcm1hdHRlcjogbmFtZUNlbGxGb3JtYXR0ZXIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdfc2l6ZScsIHRpdGxlOiAnU2l6ZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdfY3RpbWUnLCB0aXRsZTogJ0NyZWF0ZWQnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGZpZWxkOiAnX210aW1lJywgdGl0bGU6ICdNb2RpZmllZCcgfSxcbiAgICAgICAgICAgICAgICAgICAgXVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0hlaWdodDogMzJcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAocm93RGJsQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50LmRhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgKHJvd0NvbnRleHQpPVwib25Sb3dDdHgoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgfVxuPC9kaXY+XG5cbkBpZiAoc2VsZWN0aW9uVGV4dD8udHJpbSgpPy5sZW5ndGggPiAwKSB7XG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdC1oaW50XCI+XG4gICAgICAgIHt7c2VsZWN0aW9uVGV4dH19XG4gICAgPC9kaXY+XG59XG5cbjxkaXYgY2xhc3M9XCJjb250cm9sc1wiPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWZsYXQtYnV0dG9uXG4gICAgICAgIGNsYXNzPVwidXBsb2FkLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJvbkNyZWF0ZUZvbGRlcigpXCJcbiAgICA+XG4gICAgICAgIDxtYXQtaWNvbj5jcmVhdGVfbmV3X2ZvbGRlcjwvbWF0LWljb24+XG4gICAgICAgIE5ldyBGb2xkZXJcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICAgIG1hdC1mbGF0LWJ1dHRvblxuICAgICAgICBjbGFzcz1cInVwbG9hZC1idXR0b25cIlxuICAgICAgICAoY2xpY2spPVwib25VcGxvYWRGaWxlKClcIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uPnVwbG9hZF9maWxlPC9tYXQtaWNvbj5cbiAgICAgICAgVXBsb2FkXG4gICAgPC9idXR0b24+XG48L2Rpdj5cbiJdfQ==
|
|
674
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci9maWxlLWdyaWQvZmlsZS1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci9maWxlLWdyaWQvZmlsZS1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFjLFdBQVcsRUFBcUIsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQXFCLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDeEMsT0FBTyxFQUF5QyxhQUFhLEVBQVksUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7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QUVFLEtBQUs7c0JBQWIsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQWNFLFNBQVM7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIElucHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFRlbXBsYXRlUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiwgU2VjdXJpdHlDb250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSwgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IERhdGVQaXBlLCBOZ0Zvck9mLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENlbGxDb21wb25lbnQsIEVtcHR5Q2FsbGJhY2sgfSBmcm9tICd0YWJ1bGF0b3ItdGFibGVzJztcbmltcG9ydCB7IE5nU2Nyb2xsYmFyTW9kdWxlIH0gZnJvbSAnbmd4LXNjcm9sbGJhcic7XG5pbXBvcnQgeyBEaXJlY3RvcnlEZXNjcmlwdG9yLCBGaWxlRGVzY3JpcHRvciwgRmlsZW1hbmFnZXJDb21wb25lbnQsIEZpbGVWaWV3VGFiLCBGU0Rlc2NyaXB0b3IsIE5neEZpbGVNYW5hZ2VyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2ZpbGVtYW5hZ2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlU29ydGluZyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEljb25SZXNvbHZlciB9IGZyb20gJy4uL2ljb24tcmVzb2x2ZXInO1xuaW1wb3J0IHsgVGFidWxhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdGFidWxhdG9yL3RhYnVsYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NCYXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1iYXInO1xuaW1wb3J0IHsgdXBsb2FkRmlsZSB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRmV0Y2gsIEtleWJvYXJkU2VydmljZSwgTWVudURpcmVjdGl2ZSwgTWVudUl0ZW0sIG9wZW5NZW51IH0gZnJvbSAnLi4vLi4vLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5cbmNvbnN0IGl0ZW1XaWR0aCA9ICg4MCArIDIwKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtZmlsZS1ncmlkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmlsZS1ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWxlLWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nRm9yT2YsXG4gICAgICAgIERhdGVQaXBlLFxuICAgICAgICBNYXRUYWJzTW9kdWxlLFxuICAgICAgICBOZ1Njcm9sbGJhck1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBUYWJ1bGF0b3JDb21wb25lbnQsXG4gICAgICAgIE1lbnVEaXJlY3RpdmUsXG4gICAgICAgIFNjcm9sbGluZ01vZHVsZVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBGaWxlR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQFZpZXdDaGlsZChcImZpbGVWaWV3cG9ydFwiKSBmaWxlc1JlZjogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKFRhYnVsYXRvckNvbXBvbmVudCkgdGFidWxhdG9yOiBUYWJ1bGF0b3JDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKCdyZW5hbWVUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgcmVuYW1lVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cblxuICAgIHByaXZhdGUgX3BhdGg6IHN0cmluZztcbiAgICBASW5wdXQoKSBzZXQgcGF0aCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgICBpZiAodGhpcy5fcGF0aCAmJiB0aGlzLmNvbmZpZy5uYXZpZ2F0ZU9ubHlUb0Rlc2NlbmRhbnRzKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoJy8nKSlcbiAgICAgICAgICAgICAgICB2YWx1ZSA9ICcvJyArIHZhbHVlO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKHRoaXMuY29uZmlnLnBhdGgpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcmV2ID0gdGhpcy5fcGF0aDtcblxuICAgICAgICB0aGlzLl9wYXRoID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHByZXYgIT0gdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucGF0aENoYW5nZS5uZXh0KHRoaXMucGF0aCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jb25maWcuYXBpU2V0dGluZ3MpXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRm9sZGVyKClcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgcGF0aCgpIHtyZXR1cm4gdGhpcy5fcGF0aH1cbiAgICBAT3V0cHV0KCkgcGF0aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgQElucHV0KCkgY29uZmlnOiBOZ3hGaWxlTWFuYWdlckNvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICBASW5wdXQoKSBzaG93SGlkZGVuRmlsZXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKSB2aWV3TW9kZTogXCJsaXN0XCIgfCBcImdyaWRcIiA9IFwiZ3JpZFwiO1xuICAgIEBJbnB1dCgpIGdyaWRTaXplOiBcInNtYWxsXCIgfCBcIm5vcm1hbFwiIHwgXCJsYXJnZVwiID0gXCJub3JtYWxcIjtcbiAgICBASW5wdXQoKSB0YWI6IEZpbGVWaWV3VGFiO1xuXG4gICAgQE91dHB1dCgpIGZpbGVTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVEZXNjcmlwdG9yPigpO1xuICAgIEBPdXRwdXQoKSBmaWxlRGJsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVEZXNjcmlwdG9yPigpO1xuICAgIEBPdXRwdXQoKSBmb2xkZXJTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERpcmVjdG9yeURlc2NyaXB0b3I+KCk7XG4gICAgQE91dHB1dCgpIGZvbGRlckRibENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxEaXJlY3RvcnlEZXNjcmlwdG9yPigpO1xuICAgIEBPdXRwdXQoKSBuZXdUYWIgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcGF0aDogc3RyaW5nOyB9PigpO1xuICAgIEBPdXRwdXQoKSBsb2FkRmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPEZTRGVzY3JpcHRvcltdPigpO1xuXG4gICAgZGlyZWN0b3J5Q29udGVudHM6IEZTRGVzY3JpcHRvcltdID0gW107XG4gICAgQElucHV0KCkgc2VsZWN0aW9uOiBGU0Rlc2NyaXB0b3JbXSA9IFtdO1xuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZTRGVzY3JpcHRvcltdPigpO1xuXG4gICAgQElucHV0KCkgdmFsdWU6IEZTRGVzY3JpcHRvcltdID0gW107XG4gICAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxGU0Rlc2NyaXB0b3JbXT4oKTtcblxuICAgIHNlbGVjdGlvblRleHQ6IHN0cmluZztcblxuICAgIHNvcnRlZEZvbGRlcnM6IGFueVtdW10gPSBbXTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc29ydGVycyA9IHtcbiAgICAgICAgXCJhLXpcIjogKGE6IEZpbGVEZXNjcmlwdG9yLCBiOiBGaWxlRGVzY3JpcHRvcikgPT4gYS5uYW1lID4gYi5uYW1lID8gMSA6IC0xLFxuICAgICAgICBcInotYVwiOiAoYTogRmlsZURlc2NyaXB0b3IsIGI6IEZpbGVEZXNjcmlwdG9yKSA9PiBiLm5hbWUgPiBhLm5hbWUgPyAxIDogLTEsXG4gICAgICAgIFwibGFzdG1vZFwiOiAoYTogRmlsZURlc2NyaXB0b3IsIGI6IEZpbGVEZXNjcmlwdG9yKSA9PiBiLnN0YXRzLm10aW1lTXMgLSBhLnN0YXRzLm10aW1lTXMsXG4gICAgICAgIFwiZmlyc3Rtb2RcIjogKGE6IEZpbGVEZXNjcmlwdG9yLCBiOiBGaWxlRGVzY3JpcHRvcikgPT4gYS5zdGF0cy5tdGltZU1zIC0gYi5zdGF0cy5tdGltZU1zLFxuICAgICAgICBcInNpemVcIjogKGE6IEZpbGVEZXNjcmlwdG9yLCBiOiBGaWxlRGVzY3JpcHRvcikgPT4gYi5zdGF0cy5zaXplIC0gYS5zdGF0cy5zaXplLFxuICAgICAgICBcInR5cGVcIjogKGE6IEZpbGVEZXNjcmlwdG9yLCBiOiBGaWxlRGVzY3JpcHRvcikgPT4gYS5wYXRoLnNwbGl0KCcuJykuc3BsaWNlKC0xLCAxKVswXSA+IGIucGF0aC5zcGxpdCgnLicpLnNwbGljZSgtMSwgMSlbMF0gPyAxIDogLTFcbiAgICB9O1xuICAgIEBJbnB1dCgpIHNvcnRPcmRlcjogRmlsZVNvcnRpbmcgPSBcImEtelwiO1xuXG4gICAgaXRlbXNQZXJSb3cgPSA2O1xuXG4gICAgLy8gSWYgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGluc2lkZSBvZiBhbiBhcmNoaXZlXG4gICAgaXNBcmNoaXZlID0gdHJ1ZTtcblxuICAgIHVzZXJJc0RyYWdnaW5nRmlsZSA9IGZhbHNlO1xuICAgIGRyYWdnaW5nT3ZlciA9IGZhbHNlO1xuXG4gICAgc2hvd0xvYWRlciA9IGZhbHNlO1xuICAgIGhpZGVMb2FkZXIgPSBmYWxzZTtcbiAgICBmYWlsZWRMb2FkID0gZmFsc2U7XG4gICAgZXJyb3I7XG5cbiAgICByZWFkb25seSBjb2x1bW5zID0gW1xuICAgICAgICB7IGlkOiBcIm5hbWVcIiwgbGFiZWw6IFwiTmFtZVwiIH0sXG4gICAgICAgIHsgaWQ6IFwic2l6ZVwiLCBsYWJlbDogXCJTaXplXCJ9LFxuICAgICAgICB7IGlkOiBcInR5cGVcIiwgbGFiZWw6IFwiVHlwZVwifSxcbiAgICAgICAgeyBpZDogXCJvd25lclwiLCBsYWJlbDogXCJPd25lclwifSxcbiAgICAgICAgeyBpZDogXCJncm91cFwiLCBsYWJlbDogXCJHcm91cFwifSxcbiAgICAgICAgeyBpZDogXCJwZXJtaXNzaW9uc1wiLCBsYWJlbDogXCJQZXJtaXNzaW9uc1wifSxcbiAgICAgICAgeyBpZDogXCJsb2NhdGlvblwiLCBsYWJlbDogXCJMb2NhdGlvblwifSxcbiAgICAgICAgeyBpZDogXCJtb2RpZmllZFwiLCBsYWJlbDogXCJNb2RpZmllZFwifSxcbiAgICAgICAgeyBpZDogXCJtb2RpZmllZC0tdGltZVwiLCBsYWJlbDogXCJNb2RpZmllZCAtIFRpbWVcIn0sXG4gICAgICAgIHsgaWQ6IFwiYWNjZXNzZWRcIiwgbGFiZWw6IFwiQWNjZXNzZWRcIn0sXG4gICAgICAgIHsgaWQ6IFwiY3JlYXRlZFwiLCBsYWJlbDogXCJDcmVhdGVkXCJ9LFxuICAgICAgICB7IGlkOiBcInJlY2VuY3lcIiwgbGFiZWw6IFwiUmVjZW5jeVwifSxcbiAgICAgICAgeyBpZDogXCJzdGFyXCIsIGxhYmVsOiBcIlN0YXJcIn0sXG4gICAgICAgIHsgaWQ6IFwiZGV0YWlsZWQtdHlwZVwiLCBsYWJlbDogXCJEZXRhaWxlZCBUeXBlXCJ9LFxuICAgIF07XG5cbiAgICBjb2xzID0gW1xuICAgICAgICB7IGlkOiBcIm5hbWVcIiwgbGFiZWw6IFwiTmFtZVwiIH0sXG4gICAgICAgIHsgaWQ6IFwic2l6ZVwiLCBsYWJlbDogXCJTaXplXCIgfSxcbiAgICAgICAgeyBpZDogXCJtb2RpZmllZFwiLCBsYWJlbDogXCJNb2RpZmllZFwiIH0sXG4gICAgICAgIHsgaWQ6IFwic3RhclwiLCBsYWJlbDogXCJTdGFyXCIgfVxuICAgIF07XG5cbiAgICBmb2xkZXJDb250ZXh0TWVudTogTWVudUl0ZW08RlNEZXNjcmlwdG9yPltdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJOZXcgRm9sZGVyXCIsXG4gICAgICAgICAgICAvLyBzaG9ydGN1dExhYmVsOiBcIlNoaWZ0K0N0cmwrTlwiLFxuICAgICAgICAgICAgaWNvbjogXCJjcmVhdGVfbmV3X2ZvbGRlclwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoZGF0YSkgPT4gdGhpcy5vbkNyZWF0ZUZvbGRlcihkYXRhKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJVcGxvYWQgZmlsZVwiLFxuICAgICAgICAgICAgLy8gc2hvcnRjdXRMYWJlbDogXCJDdHJsK0RcIixcbiAgICAgICAgICAgIGljb246IFwiZmlsZV91cGxvYWRcIixcbiAgICAgICAgICAgIGFjdGlvbjogKGV2dCkgPT4gdGhpcy5vblVwbG9hZEZpbGUoZXZ0KVxuICAgICAgICB9LFxuICAgICAgICBcInNlcGFyYXRvclwiLFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiAoZGF0YSkgPT4gdHJ1ZSxcbiAgICAgICAgLy8gICAgIGxhYmVsOiBcIl9QX2FzdGVcIixcbiAgICAgICAgLy8gICAgIGljb246IFwiY29udGVudF9wYXN0ZVwiLFxuICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlNlbGVjdCBfQV9sbFwiLFxuICAgICAgICAgICAgc2hvcnRjdXRMYWJlbDogXCJDdHJsK0FcIixcbiAgICAgICAgICAgIGljb246IFwic2VsZWN0X2FsbFwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSB0aGlzLl9zb3J0RmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25UZXh0ID0gdGhpcy5nZXRTZWxlY3Rpb25UZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFwic2VwYXJhdG9yXCIsXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIGxhYmVsOiBcIlBfcl9vcGVydGllc1wiLFxuICAgICAgICAvLyAgICAgaWNvbjogXCJmaW5kX2luX3BhZ2VcIixcbiAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuXG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICBdO1xuXG4gICAgZmlsZUNvbnRleHRNZW51OiBNZW51SXRlbTxGU0Rlc2NyaXB0b3I+W10gPSBbXTtcblxuICAgIHBlcmZvcm1DaGVja3N1bShwYXRoLCBkaWdlc3QpIHtcbiAgICAgICAgLy8gdGhpcy53aW5kb3dNYW5hZ2VyLm9wZW5XaW5kb3coe1xuICAgICAgICAvLyAgICAgYXBwSWQ6IFwiY2hlY2tzdW1cIixcbiAgICAgICAgLy8gICAgIGRhdGE6IHsgZGlnZXN0LCBwYXRoIH0sXG4gICAgICAgIC8vICAgICB3b3Jrc3BhY2U6IHRoaXMud2luZG93UmVmLndvcmtzcGFjZSxcbiAgICAgICAgLy8gICAgIHdpZHRoOiA2MDAsXG4gICAgICAgIC8vICAgICBoZWlnaHQ6IDI1MFxuICAgICAgICAvLyB9KTtcbiAgICB9XG5cbiAgICBpY29uUmVzb2x2ZXI6IEljb25SZXNvbHZlcjtcblxuICAgIGdldCBsaWJDb25maWcoKSB7IHJldHVybiB0aGlzLmZpbGVNYW5hZ2VyLmxpYkNvbmZpZyB9XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZmV0Y2g6IEZldGNoLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGtleWJvYXJkOiBLZXlib2FyZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZpbGVNYW5hZ2VyOiBGaWxlbWFuYWdlckNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgICApIHtcblxuXG4gICAgICAgIHRoaXMuaWNvblJlc29sdmVyID0gbmV3IEljb25SZXNvbHZlcih0aGlzLmxpYkNvbmZpZy5hc3NldFBhdGgpO1xuXG4gICAgICAgIC8vIGN0cmwgKyBhID0+IHNlbGVjdCBhbGxcbiAgICAgICAga2V5Ym9hcmQub25LZXlDb21tYW5kKHtcbiAgICAgICAgICAgIGtleTogXCJhXCIsXG4gICAgICAgICAgICBjdHJsOiB0cnVlLFxuICAgICAgICB9KS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gdGhpcy5fc29ydEZpbHRlcigpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25UZXh0ID0gdGhpcy5nZXRTZWxlY3Rpb25UZXh0KCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5uZXh0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gY3RybCArIGMgPT4gY29weSBmaWxlIG5hbWVzIHRvIGNsaXBib2FyZFxuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcImNcIixcbiAgICAgICAgICAgIGN0cmw6IHRydWUsXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGN0cmwgKyBoID0+IHRvZ2dsZSBoaWRkZW4gZmlsZXNcbiAgICAgICAga2V5Ym9hcmQub25LZXlDb21tYW5kKHtcbiAgICAgICAgICAgIGtleTogXCJoXCIsXG4gICAgICAgICAgICBjdHJsOiB0cnVlLFxuICAgICAgICAgICAgaW50ZXJydXB0OiB0cnVlXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93SGlkZGVuRmlsZXMgPSAhdGhpcy5zaG93SGlkZGVuRmlsZXM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEYyID0+IFJlbmFtZSBzZWxlY3RlZCBmaWxlc1xuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcImYyXCIsXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgLy8gUmVuYW1lIHNlbGVjdGVkIGZpbGUocylcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRW50ZXIgPT4gT3BlbiBzZWxlY3RlZCBmaWxlc1xuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcIkVudGVyXCIsXG4gICAgICAgIH0pLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzLmZpbHRlcihkYyA9PiB0aGlzLnNlbGVjdGlvbi5maW5kKGkgPT4gaS5uYW1lID09IGRjLm5hbWUpKTtcbiAgICAgICAgICAgIC8vIHRoaXMud2luZG93TWFuYWdlci5vcGVuRmlsZXMoZmlsZXMgYXMgYW55KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gRGVsZXRlID0+IGRlbGV0ZSBzZWxlY3RlZCBmaWxlc1xuICAgICAgICBrZXlib2FyZC5vbktleUNvbW1hbmQoe1xuICAgICAgICAgICAga2V5OiBcImRlbGV0ZVwiLFxuICAgICAgICB9KS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5kaXJlY3RvcnlDb250ZW50cy5maWx0ZXIoZGMgPT4gdGhpcy5zZWxlY3Rpb24uZmluZChpID0+IGkubmFtZSA9PSBkYy5uYW1lKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICAvLyB0aGlzLmxvYWRGb2xkZXIoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuZmlsZUNvbnRleHRNZW51ID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIkRvd25sb2FkXCIsXG4gICAgICAgICAgICAgICAgaWNvbjogXCJkb3dubG9hZFwiLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogKGZpbGUpID0+IHRoaXMuZmlsZU1hbmFnZXIuZG93bmxvYWRGaWxlKGZpbGUpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIk9wZW4gaW4gbmV3IFRhYlwiLFxuICAgICAgICAgICAgICAgIGljb246IFwib3Blbl9pbl9uZXdcIixcbiAgICAgICAgICAgICAgICBpc1Zpc2libGU6IChkYXRhKSA9PiBkYXRhLmtpbmQgPT0gXCJkaXJlY3RvcnlcIixcbiAgICAgICAgICAgICAgICBhY3Rpb246IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZU1hbmFnZXIuaW5pdFRhYihkYXRhLnBhdGggKyBkYXRhLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiT3BlbiB3aXRoIEFwcGxpY2F0aW9uLi4uXCIsXG4gICAgICAgICAgICAvLyAgICAgaXNWaXNpYmxlOiAoZGF0YSkgPT4gZGF0YS5raW5kID09IFwiZmlsZVwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtEXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiQ3V0XCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJjb250ZW50X2N1dFwiLFxuICAgICAgICAgICAgLy8gICAgIGlzRGlzYWJsZWQ6IGRhdGEgPT4gdHJ1ZSxcbiAgICAgICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgICBsYWJlbDogXCJDb3B5XCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmaWxlX2NvcHlcIixcbiAgICAgICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiBkYXRhID0+IHRydWUsXG4gICAgICAgICAgICAvLyAgICAgY2hpbGRyZW5SZXNvbHZlcjogKCkgPT4gbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwMDAwMCkpXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIk1vdmUgVG8uLi5cIixcbiAgICAgICAgICAgIC8vICAgICBpY29uOiBcImRyaXZlX2ZpbGVfbW92ZVwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtBXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgICBsYWJlbDogXCJDb3B5IFRvLi4uXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmb2xkZXJfY29weVwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtBXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJEZWxldGVcIixcbiAgICAgICAgICAgICAgICBpY29uOiBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgIC8vIHNob3J0Y3V0TGFiZWw6IFwiRGVsXCIsXG4gICAgICAgICAgICAgICAgaXNWaXNpYmxlOiBkYXRhID0+ICFkYXRhLnBhdGguaW5jbHVkZXMoXCIjL1wiKSwgLy8gb21pdCBmaWxlcyBpbiBjb21wcmVzc2VkIGRpcnNcbiAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IGV2dC5wYXRoICsgZXZ0Lm5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5jb25maWcuYXBpU2V0dGluZ3MuZGVsZXRlRW50cnlVcmxUZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmNvbmZpZy5hcGlTZXR0aW5ncy5kZWxldGVFbnRyeVVybFRlbXBsYXRlKHBhdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY29uZmlnLmFwaVNldHRpbmdzLmRlbGV0ZUVudHJ5VXJsO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2gucG9zdCh1cmwsIHsgcGF0aDogZXZ0LnBhdGggKyBldnQubmFtZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2FkRm9sZGVyKCkpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiU2hyZWQgZmlsZVwiLFxuICAgICAgICAgICAgLy8gICAgIGljb246IFwiZGVsZXRlX2ZvcmV2ZXJcIixcbiAgICAgICAgICAgIC8vICAgICBpc1Zpc2libGU6IGRhdGEgPT4gIWRhdGEucGF0aC5pbmNsdWRlcyhcIiMvXCIpLCAvLyBvbWl0IGZpbGVzIGluIGNvbXByZXNzZWQgZGlyc1xuICAgICAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLmZldGNoLnBvc3QoYC9hcGkvZmlsZXN5c3RlbS9kZWxldGU/d2lwZT10cnVlYCwgeyBmaWxlczogW2V2dC5wYXRoICsgZXZ0Lm5hbWVdfSlcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMubG9hZEZvbGRlcigpKVxuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBcIlJlbmFtZVwiLFxuICAgICAgICAgICAgICAgIGljb246IFwiZHJpdmVfZmlsZV9yZW5hbWVfb3V0bGluZVwiLFxuICAgICAgICAgICAgICAgIGlzVmlzaWJsZTogZGF0YSA9PiAhZGF0YS5wYXRoLmluY2x1ZGVzKFwiIy9cIiksIC8vIG9taXQgZmlsZXMgaW4gY29tcHJlc3NlZCBkaXJzXG4gICAgICAgICAgICAgICAgLy8gc2hvcnRjdXRMYWJlbDogXCJGMlwiLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihcImZvbGRlci1yZW5hbWVcIiwgXCJAZG90Z2xpdGNoL25neC13ZWItY29tcG9uZW50c1wiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dHM6IHsgcGF0aDogZGF0YT8ucGF0aCB8fCB0aGlzLnBhdGgsIG5hbWU6IGRhdGE/Lm5hbWUgfHwgJycsIGNvbmZpZzogdGhpcy5jb25maWcgfVxuICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHIgPT4gdGhpcy5sb2FkRm9sZGVyKCkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gRXh0cmFjdCBIZXJlXG4gICAgICAgICAgICAvLyBFeHRyYWN0IFRvLi4uXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiRXh0cmFjdCBIZXJlXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmb2xkZXJfemlwXCIsXG4gICAgICAgICAgICAvLyAgICAgc2hvcnRjdXRMYWJlbDogXCJDdHJsK0FcIixcbiAgICAgICAgICAgIC8vICAgICBpc0Rpc2FibGVkOiAoZGF0YSkgPT4gIShkYXRhLmtpbmQgPT0gXCJmaWxlXCIgJiYgZGF0YS5leHQgIT0gXCIuemlwXCIgJiYgaXNBcmNoaXZlKGRhdGEpKSxcbiAgICAgICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgLy8gICAgIGxhYmVsOiBcIkV4dHJhY3QgdG8uLi5cIixcbiAgICAgICAgICAgIC8vICAgICBpY29uOiBcImZvbGRlcl96aXBcIixcbiAgICAgICAgICAgIC8vICAgICBzaG9ydGN1dExhYmVsOiBcIkN0cmwrQVwiLFxuICAgICAgICAgICAgLy8gICAgIGlzRGlzYWJsZWQ6IChkYXRhKSA9PiAhKGRhdGEua2luZCA9PSBcImZpbGVcIiAmJiBkYXRhLmV4dCAhPSBcIi56aXBcIiAmJiBpc0FyY2hpdmUoZGF0YSkpLFxuICAgICAgICAgICAgLy8gICAgIGFjdGlvbjogKGV2dCkgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiQ29tcHJlc3MuLi5cIixcbiAgICAgICAgICAgIC8vICAgICBpY29uOiBcImZvbGRlcl96aXBcIixcbiAgICAgICAgICAgIC8vICAgICBzaG9ydGN1dExhYmVsOiBcIkN0cmwrQVwiLFxuICAgICAgICAgICAgLy8gICAgIGlzRGlzYWJsZWQ6IChkYXRhKSA9PiBkYXRhLmtpbmQgPT0gXCJmaWxlXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogXCJDaGVja3N1bVwiLFxuICAgICAgICAgICAgICAgIGljb246IFwibWFuYWdlX3NlYXJjaFwiLFxuICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IChkYXRhKSA9PiBkYXRhLmtpbmQgIT0gXCJmaWxlXCIsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiTUQ1XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHRoaXMucGVyZm9ybUNoZWNrc3VtKGV2dC5wYXRoICsgZXZ0Lm5hbWUsIFwibWQ1XCIpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJTSEExXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHRoaXMucGVyZm9ybUNoZWNrc3VtKGV2dC5wYXRoICsgZXZ0Lm5hbWUsIFwic2hhMVwiKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFwiU0hBMjU2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHRoaXMucGVyZm9ybUNoZWNrc3VtKGV2dC5wYXRoICsgZXZ0Lm5hbWUsIFwic2hhMjU2XCIpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogXCJTSEE1MTJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogKGV2dCkgPT4gdGhpcy5wZXJmb3JtQ2hlY2tzdW0oZXZ0LnBhdGggKyBldnQubmFtZSwgXCJzaGE1MTJcIiksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpc1Zpc2libGU6IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzQXJjaGl2ZSB8fCBkYXRhLmtpbmQgPT0gXCJmaWxlXCI7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiU3RhclwiLFxuICAgICAgICAgICAgLy8gICAgIGljb246IFwic3RhclwiLFxuICAgICAgICAgICAgLy8gICAgIHNob3J0Y3V0TGFiZWw6IFwiQ3RybCtBXCIsXG4gICAgICAgICAgICAvLyAgICAgYWN0aW9uOiAoZXZ0KSA9PiB7XG5cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIFwic2VwYXJhdG9yXCIsXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbGFiZWw6IFwiUF9yX29wZXJ0aWVzXCIsXG4gICAgICAgICAgICAvLyAgICAgaWNvbjogXCJmaW5kX2luX3BhZ2VcIixcbiAgICAgICAgICAgIC8vICAgICBhY3Rpb246IChldnQpID0+IHtcblxuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZEZvbGRlcigpIHtcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5oaWRlTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmFpbGVkTG9hZCA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uZmlnLmFwaVNldHRpbmdzLmxpc3RFbnRyaWVzVXJsVGVtcGxhdGVcbiAgICAgICAgICAgID8gdGhpcy5jb25maWcuYXBpU2V0dGluZ3MubGlzdEVudHJpZXNVcmxUZW1wbGF0ZSh0aGlzLnBhdGgpXG4gICAgICAgICAgICA6IHRoaXMuY29uZmlnLmFwaVNldHRpbmdzLmxpc3RFbnRyaWVzVXJsXG5cbiAgICAgICAgdGhpcy5mZXRjaC5wb3N0KHVybCwgeyBwYXRoOiB0aGlzLnBhdGgsIHNob3dIaWRkZW46IHRoaXMuc2hvd0hpZGRlbkZpbGVzIH0sIHt9LCB0cnVlKVxuICAgICAgICAgICAgLnRoZW4oKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzOiBGaWxlRGVzY3JpcHRvcltdID0gZGF0YT8uZmlsZXMgfHwgW107XG4gICAgICAgICAgICAgICAgY29uc3QgZGlyczogRGlyZWN0b3J5RGVzY3JpcHRvcltdID0gZGF0YT8uZGlycyB8fCBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9ycyA9IGZpbGVzLmNvbmNhdChkaXJzIGFzIGFueSkgYXMgRlNEZXNjcmlwdG9yW107XG5cbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9ycy5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmWydfaWNvbiddID0gdGhpcy5pY29uUmVzb2x2ZXIucmVzb2x2ZUljb24oZik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmLmtpbmQgPT0gXCJmaWxlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZbJ19jdGltZSddID0gbmV3IERhdGUoZi5zdGF0cz8uY3RpbWVNcyk/LnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmWydfbXRpbWUnXSA9IG5ldyBEYXRlKGYuc3RhdHM/Lm10aW1lTXMpPy50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZlsnX3NpemUnXSA9IHRoaXMuYnl0ZXNUb1N0cmluZyhmLnN0YXRzPy5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5kaXJlY3RvcnlDb250ZW50cyA9IGRlc2NyaXB0b3JzO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydEZpbHRlcigpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRmlsZXMubmV4dChkZXNjcmlwdG9ycyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3J0ZWRGb2xkZXJzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmxvd1Jvd3MoKTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemUoKSwgMjUwKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplKCksIDUwMCk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZSgpLCAxMDAwKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplKCksIDI1MDApO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZXNpemUoKSwgNTAwMCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFpbGVkTG9hZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9IGU7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICAgIH0pXG4gICAgfVxuXG4gICAgZmxvd1Jvd3MoKSB7XG4gICAgICAgIGxldCBmaWx0ZXJlZCA9IHRoaXMuX3NvcnRGaWx0ZXIoKTtcblxuICAgICAgICB0aGlzLnNvcnRlZEZvbGRlcnMgPSBbXTtcbiAgICAgICAgY29uc3QgbnVtID0gTWF0aC5jZWlsKGZpbHRlcmVkLmxlbmd0aCAvIHRoaXMuaXRlbXNQZXJSb3cpO1xuICAgICAgICBjb25zdCBpdGVyYXRpb25zID0gTWF0aC5taW4obnVtLCAxMDApO1xuXG4gICAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGl0ZXJhdGlvbnM7IHJvdysrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc29ydGVkRm9sZGVyc1tyb3ddKVxuICAgICAgICAgICAgICAgIHRoaXMuc29ydGVkRm9sZGVyc1tyb3ddID0gW107XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSByb3cgKiB0aGlzLml0ZW1zUGVyUm93OyBpIDwgKHJvdyArIDEpICogdGhpcy5pdGVtc1BlclJvdyAmJiBpIDwgZmlsdGVyZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRlZEZvbGRlcnNbcm93XS5wdXNoKGZpbHRlcmVkW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VsZWN0KGl0ZW06IEZTRGVzY3JpcHRvciwgZXZ0KSB7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5rZXlib2FyZC5pc1NoaWZ0UHJlc3NlZCkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5kaXJlY3RvcnlDb250ZW50cy5maW5kSW5kZXgoaSA9PiBpLm5hbWUgPT0gdGhpcy5zZWxlY3Rpb24uc2xpY2UoLTEsIDEpWzBdLm5hbWUpO1xuICAgICAgICAgICAgbGV0IGVuZCA9IHRoaXMuZGlyZWN0b3J5Q29udGVudHMuaW5kZXhPZihpdGVtKTtcblxuICAgICAgICAgICAgaWYgKHN0YXJ0ID09IC0xKVxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kO1xuXG4gICAgICAgICAgICBsZXQgaXRlbXMgPSBzdGFydCA+IGVuZFxuICAgICAgICAgICAgICAgID8gdGhpcy5kaXJlY3RvcnlDb250ZW50cy5zbGljZShlbmQsIHN0YXJ0ICsgMSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZGlyZWN0b3J5Q29udGVudHMuc2xpY2Uoc3RhcnQsIGVuZCArIDEpO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IGl0ZW1zO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMua2V5Ym9hcmQuaXNDdHJsUHJlc3NlZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pbmNsdWRlcyhpdGVtKSlcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgZWxzZSAvLyBDYXNlIHRoYXQgd2Ugc2VsZWN0ZWQgdGhlIHNhbWUgaXRlbSB0d2ljZVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNwbGljZSh0aGlzLnNlbGVjdGlvbi5pbmRleE9mKGl0ZW0pLCAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IFtpdGVtXTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvblswXS5raW5kID09IFwiZGlyZWN0b3J5XCIpXG4gICAgICAgICAgICAgICAgdGhpcy5mb2xkZXJTZWxlY3QubmV4dCh0aGlzLnNlbGVjdGlvblswXSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5maWxlU2VsZWN0Lm5leHQodGhpcy5zZWxlY3Rpb25bMF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uVGV4dCA9IHRoaXMuZ2V0U2VsZWN0aW9uVGV4dCgpO1xuICAgIH1cblxuICAgIG9uSXRlbUNsaWNrKGZpbGU6IEZTRGVzY3JpcHRvcikge1xuICAgICAgICBjb25zb2xlLmxvZyhmaWxlLCB0aGlzKTtcbiAgICAgICAgaWYgKGZpbGUua2luZCA9PSBcImRpcmVjdG9yeVwiKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRlckRibENsaWNrLm5leHQoZmlsZSk7XG4gICAgICAgICAgICB0aGlzLnBhdGggPSBmaWxlLnBhdGggKyBmaWxlLm5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZWxzZSBpZiAoZmlsZS5leHQgPT0gXCJ6aXBcIikge1xuICAgICAgICAvLyAgICAgdGhpcy5maWxlRGJsQ2xpY2submV4dChmaWxlKTtcbiAgICAgICAgLy8gICAgIHRoaXMucGF0aCA9IGZpbGUucGF0aCArIGZpbGUubmFtZTtcbiAgICAgICAgLy8gfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZURibENsaWNrLm5leHQoZmlsZSk7XG4gICAgICAgICAgICB0aGlzLmZpbGVTZWxlY3QubmV4dChmaWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVG9nZ2xlKGl0ZW0sIHN0YXRlOiBNYXRDaGVja2JveENoYW5nZSkge1xuICAgICAgICBpdGVtWydfdmFsdWUnXSA9IHN0YXRlLmNoZWNrZWQ7XG5cbiAgICAgICAgLy8gVE9ETzogV2hhdCBjYXVzZXMgdGhpcyB0byBiZSBudWxsIHdoZW4gaW5pdGlhbGl6ZWQgd2l0aCBhbiBhcnJheT9cbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuY2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaSA9IHRoaXMudmFsdWUuZmluZEluZGV4KHYgPT4gdiA9PSBpdGVtKTtcbiAgICAgICAgICAgIGlmIChpID49IDApXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIGFzeW5jIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UubmV4dCh0aGlzLnZhbHVlKTtcblxuICAgICAgICB0aGlzLnRhYnVsYXRvcj8udGFibGU/LmdldFJvd3MoKS5mb3JFYWNoKHIgPT4gci5nZXRFbGVtZW50KCkuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc29ydEZpbHRlcigpOiBGaWxlRGVzY3JpcHRvcltdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0b3J5Q29udGVudHMgPSB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzPy5maWx0ZXIoZCA9PiBkLmtpbmQgPT0gJ2RpcmVjdG9yeScpXG4gICAgICAgICAgICAuY29uY2F0KHRoaXMuZGlyZWN0b3J5Q29udGVudHM/LmZpbHRlcihkID0+IGQua2luZCA9PSAnZmlsZScpXG4gICAgICAgICAgICAgICAgLnNvcnQodGhpcy5zb3J0ZXJzW3RoaXMuc29ydE9yZGVyXSlcbiAgICAgICAgICAgICkgYXMgRmlsZURlc2NyaXB0b3JbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGlvblRleHQoKSB7XG4gICAgICAgIGNvbnN0IGRpckNvdW50ID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKHMgPT4gcy5raW5kID09IFwiZGlyZWN0b3J5XCIpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZmlsZUNvdW50ID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKHMgPT4gcy5raW5kID09IFwiZmlsZVwiKS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGRpckNvdW50ICsgZmlsZUNvdW50ID09IDApIHJldHVybiBcIlwiO1xuXG4gICAgICAgIGNvbnN0IHRvdGFsU2l6ZSA9XG4gICAgICAgICAgICB0aGlzLmRpcmVjdG9yeUNvbnRlbnRzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihkID0+IGQua2luZCA9PSBcImZpbGVcIilcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGQgPT4gdGhpcy5zZWxlY3Rpb24/LmZpbmQoaSA9PiBpLm5hbWUgPT0gZC5uYW1lKSlcbiAgICAgICAgICAgICAgICAubWFwKGQgPT4gZFsnc3RhdHMnXS5zaXplKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcblxuICAgICAgICBpZiAoZGlyQ291bnQgKyBmaWxlQ291bnQgPT0gMSlcbiAgICAgICAgICAgIHJldHVybiBgXCIke3RoaXMuc2VsZWN0aW9uWzBdLm5hbWV9XCIgc2VsZWN0ZWQgKCR7dGhpcy5ieXRlc1RvU3RyaW5nKHRvdGFsU2l6ZSl9KWA7XG5cbiAgICAgICAgaWYgKGRpckNvdW50ID4gMCAmJiBmaWxlQ291bnQgPT0gMClcbiAgICAgICAgICAgIHJldHVybiBgXCIke2RpckNvdW50fVwiIGZvbGRlcnMgc2VsZWN0ZWRgO1xuICAgICAgICBpZiAoZmlsZUNvdW50ID4gMCAmJiBkaXJDb3VudCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGAke2ZpbGVDb3VudH0gaXRlbXMgc2VsZWN0ZWQgKCR7dGhpcy5ieXRlc1RvU3RyaW5nKHRvdGFsU2l6ZSl9KWA7XG5cbiAgICAgICAgcmV0dXJuIGAke2RpckNvdW50fSBmb2xkZXIke2RpckNvdW50ID09IDEgPyBcIlwiIDogXCJzXCJ9IHNlbGVjdGVkLCAke2ZpbGVDb3VudH0gb3RoZXIgaXRlbSR7ZmlsZUNvdW50ID09IDEgPyBcIlwiIDogXCJzXCJ9IHNlbGVjdGVkICgke3RoaXMuYnl0ZXNUb1N0cmluZyh0b3RhbFNpemUpfSlgO1xuICAgIH1cblxuICAgIGJ5dGVzVG9TdHJpbmcoYnl0ZXM6IG51bWJlciwgZGVjaW1hbHMgPSAyKSB7XG4gICAgICAgIGlmICghK2J5dGVzKSByZXR1cm4gJzAgQnl0ZXMnO1xuXG4gICAgICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgICAgICBjb25zdCBkbSA9IGRlY2ltYWxzIDwgMCA/IDAgOiBkZWNpbWFscztcbiAgICAgICAgY29uc3Qgc2l6ZXMgPSBbJ0J5dGVzJywgJ0tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJywgJ1pCJywgJ1lCJ107XG5cbiAgICAgICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuXG4gICAgICAgIHJldHVybiBgJHtwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKGRtKSl9ICR7c2l6ZXNbaV19YDtcbiAgICB9XG5cbiAgICByZXNpemUoKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlc1JlZikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnJlc2l6ZSgpLCAyNSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYm91bmRzID0gKHRoaXMuZmlsZXNSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgbmV3Q29sQ291bnQgPSBNYXRoLmZsb29yKGJvdW5kcy53aWR0aCAvIGl0ZW1XaWR0aCk7XG4gICAgICAgIGlmIChuZXdDb2xDb3VudCAhPSB0aGlzLml0ZW1zUGVyUm93KSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zUGVyUm93ID0gTWF0aC5mbG9vcihib3VuZHMud2lkdGggLyBpdGVtV2lkdGgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNQZXJSb3cgPiAxMDApXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1BlclJvdyA9IDE7XG5cbiAgICAgICAgICAgIHRoaXMuZmxvd1Jvd3MoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNvcnRlZEZvbGRlcnM/Lmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgdGhpcy5mbG93Um93cygpO1xuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0KGV2dDogRHJhZ0V2ZW50LCBpdGVtOiBGU0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gYCR7d2luZG93Lm9yaWdpbn0vYXBpL2ZpbGVzeXN0ZW0vZG93bmxvYWQ/ZGlyPSR7aXRlbS5wYXRofSZmaWxlPSR7aXRlbS5uYW1lfWA7XG5cbiAgICAgICAgZXZ0LmRhdGFUcmFuc2Zlci5jbGVhckRhdGEoKTtcbiAgICAgICAgLy8gZXZ0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3VyaS1saXN0JywgdGFyZ2V0KTtcbiAgICAgICAgLy8gZXZ0LmRhdGFUcmFuc2Zlci5zZXREYXRhKCdEb3dubG9hZFVSTCcsIGB0ZXh0L3VyaS1saXN0OiR7dGFyZ2V0fWApO1xuICAgICAgICBldnQuZGF0YVRyYW5zZmVyLnNldERhdGEoJ3RleHQvcGxhaW4nLCBpdGVtLm5hbWUpO1xuICAgIH1cblxuICAgIG9uRHJvcChldikge1xuICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChldi5kYXRhVHJhbnNmZXIuaXRlbXMpIHtcbiAgICAgICAgICAgIC8vIFVzZSBEYXRhVHJhbnNmZXJJdGVtTGlzdCBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBmaWxlKHMpXG4gICAgICAgICAgICBbLi4uZXYuZGF0YVRyYW5zZmVyLml0ZW1zXS5mb3JFYWNoKChpdGVtLCBpKSA9PiB7XG4gICAgICAgICAgICAvLyBJZiBkcm9wcGVkIGl0ZW1zIGFyZW4ndCBmaWxlcywgcmVqZWN0IHRoZW1cbiAgICAgICAgICAgIGlmIChpdGVtLmtpbmQgPT09IFwiZmlsZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYOKApiBmaWxlWyR7aX1dLm5hbWUgPSAke2ZpbGUubmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVXNlIERhdGFUcmFuc2ZlciBpbnRlcmZhY2UgdG8gYWNjZXNzIHRoZSBmaWxlKHMpXG4gICAgICAgICAgICBbLi4uZXYuZGF0YVRyYW5zZmVyLmZpbGVzXS5mb3JFYWNoKChmaWxlLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhg4oCmIGZpbGVbJHtpfV0ubmFtZSA9ICR7ZmlsZS5uYW1lfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuYW1lQ2VsbEZvcm1hdHRlciA9ICgoY2VsbDogQ2VsbENvbXBvbmVudCwgZm9ybWF0dGVyUGFyYW1zOiB7fSwgb25SZW5kZXJlZDogRW1wdHlDYWxsYmFjaykgPT4ge1xuICAgICAgICAvLyBUT0RPOiBTYW5pdGl6ZT9cbiAgICAgICAgY29uc3QgaXRlbSA9IGNlbGwuZ2V0RGF0YSgpIGFzIEZTRGVzY3JpcHRvcjtcbiAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3R5bGU9XCJoZWlnaHQ6IDI0cHg7IG1hcmdpbi1yaWdodDogNnB4XCIgc3JjPVwiJHtpdGVtWydfaWNvbiddLnBhdGh9XCIvPlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOiAwXCI+JHt0aGlzLnNhbml0aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuSFRNTCwgaXRlbVsndmFuaXR5TmFtZSddIHx8IGl0ZW0ubmFtZSl9PC9wPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICBgO1xuICAgIH0pLmJpbmQodGhpcylcblxuICAgIG9uUm93Q3R4KHtldmVudCwgcm93fSkge1xuICAgICAgICBvcGVuTWVudSh0aGlzLm1hdERpYWxvZywgdGhpcy5maWxlQ29udGV4dE1lbnUsIHJvdy5nZXREYXRhKCksIGV2ZW50KTtcbiAgICB9XG5cbiAgICBvblJvd0NsaWNrKHtldmVudCwgcm93LCBkYXRhfSkge1xuICAgICAgICAvLyAkZXZlbnQuZGF0YVsnX3ZhbHVlJ10gPSAkZXZlbnQuZGF0YVsnX3ZhbHVlJ10gPT0gdHJ1ZSA/IGZhbHNlIDogdHJ1ZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhldmVudCwgcm93LCBkYXRhLCB0aGlzLnZhbHVlKTtcblxuICAgICAgICBjb25zdCByb3dFbCA9IHJvdy5nZXRFbGVtZW50KCk7XG4gICAgICAgIGxldCBzdGF0ZSA9IHJvd0VsLmNsYXNzTGlzdC5jb250YWlucygnc2VsZWN0ZWQnKTtcbiAgICAgICAgZGF0YVsnX3ZhbHVlJ10gPSAhc3RhdGU7XG5cbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICByb3dFbC5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcm93RWwuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLnZhbHVlLmZpbmRJbmRleCh2ID0+IHYgPT0gZGF0YSk7XG4gICAgICAgICAgICBpZiAoaSA+PSAwKVxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5uZXh0KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHNvcnQoKSB7XG4gICAgICAgIHRoaXMuX3NvcnRGaWx0ZXIoKTtcbiAgICB9XG5cbiAgICBvblVwbG9hZEZpbGUoZXZ0PzogRlNEZXNjcmlwdG9yKSB7XG4gICAgICAgIHVwbG9hZEZpbGUoXG4gICAgICAgICAgICB0aGlzLmZldGNoLFxuICAgICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgICB0aGlzLl9wYXRoLFxuICAgICAgICAgICAgZXZ0ID8gKGV2dC5wYXRoICsgZXZ0Lm5hbWUpIDogbnVsbCxcbiAgICAgICAgICAgIHRoaXMuZmlsZU1hbmFnZXIuY29udGV4dFRhZ3NcbiAgICAgICAgKVxuICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgLy8gUmVmcmVzaCBmb2xkZXIgY29udGVudHNcbiAgICAgICAgICAgIHRoaXMubG9hZEZvbGRlcigpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIG9uQ3JlYXRlRm9sZGVyKGRhdGE/OiBGU0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihcImZvbGRlci1yZW5hbWVcIiwgXCJAZG90Z2xpdGNoL25neC13ZWItY29tcG9uZW50c1wiLCB7XG4gICAgICAgICAgICBpbnB1dHM6IHsgcGF0aDogZGF0YT8ucGF0aCB8fCB0aGlzLnBhdGgsIG5hbWU6IGRhdGE/Lm5hbWUgfHwgJycsIGNvbmZpZzogdGhpcy5jb25maWcgfVxuICAgICAgICB9KS50aGVuKHIgPT4gdGhpcy5sb2FkRm9sZGVyKCkpXG4gICAgfVxufVxuXG4iLCJAaWYgKHNob3dMb2FkZXIpIHtcbiAgICA8bWF0LXByb2dyZXNzLWJhciBbY2xhc3MuaGlkZV09XCJoaWRlTG9hZGVyXCIgbW9kZT1cInF1ZXJ5XCIvPlxufVxuXG48ZGl2XG4gICAgc3R5bGU9XCJkaXNwbGF5OiBjb250ZW50c1wiXG4gICAgW3N0eWxlLi0tZmlsZW1hbmFnZXItZmlsZWljb24tYmFja2Ryb3BdPVwiJ3VybCgnICsgaWNvblJlc29sdmVyLnBhdGggKyAnL3BvcC9nZW5lcmljLnN2ZyknXCJcbiAgICAoZHJhZ3N0YXJ0KT1cInVzZXJJc0RyYWdnaW5nRmlsZSA9IHRydWVcIlxuICAgIChkcmFnZW5kKT1cInVzZXJJc0RyYWdnaW5nRmlsZSA9IGZhbHNlXCJcbiAgICAoZHJhZ292ZXIpPVwiZHJhZ2dpbmdPdmVyID0gdHJ1ZVwiXG4gICAgKGRyYWdsZWF2ZSk9XCJkcmFnZ2luZ092ZXIgPSBmYWxzZVwiXG4gICAgKG9uZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4+XG5cbiAgICBAaWYgKGZhaWxlZExvYWQpIHtcbiAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyBoZWlnaHQ6IDEwMCVcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXgtd2lkdGg6IDQwMHB4OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcIj5cbiAgICAgICAgICAgICAgICA8IS0tIFVwbG9hZGVkIHRvOiBTVkcgUmVwbywgd3d3LnN2Z3JlcG8uY29tLCBHZW5lcmF0b3I6IFNWRyBSZXBvIE1peGVyIFRvb2xzIC0tPlxuICAgICAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cInZhcigtLXRleHQtY29sb3IpXCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMDBweFwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNjAwLjUyNSA2MDAuNTI1XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNTcuMzc1LDEzOC42NTZMNDMuMDMxLDk1LjE0NmMtMjMuNDI4LDguMTI4LTQwLjE2MiwyOS4xNjYtNDIuNTUzLDU0LjAyOGw0NS45LDMuODI1QzQ2Ljg1NiwxNDYuMzA2LDUxLjE2LDE0MC41NjgsNTcuMzc1LDEzOC42NTZ6XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeT1cIjI4OC4zMDlcIiB3aWR0aD1cIjQ1LjlcIiBoZWlnaHQ9XCI0NS45MDFcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTU1NC42MjUsNDQ2LjA5MWMwLDMuMzQ2LTAuOTU2LDYuMjE1LTIuODY4LDkuMDg0bDM4LjI1LDI1LjM0YzYuNjkzLTEwLjAzOSwxMC4wNC0yMS45OTIsMTAuMDQtMzQuNDI0VjQyMy4xNGgtNDUuODk5djIyLjk1MUg1NTQuNjI1elwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI0NTYuNjA5XCIgeT1cIjE0Ni4zMDZcIiB3aWR0aD1cIjQ1LjlcIiBoZWlnaHQ9XCI0NS45XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjQ4NS4yOTdcIiB5PVwiNDYyLjgyNVwiIHdpZHRoPVwiNDUuOVwiIGhlaWdodD1cIjQ1LjlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMzkzLjQ5N1wiIHk9XCI0NjIuODI1XCIgd2lkdGg9XCI0NS45XCIgaGVpZ2h0PVwiNDUuOVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzNjQuODFcIiB5PVwiMTQ2LjMwNlwiIHdpZHRoPVwiNDUuOVwiIGhlaWdodD1cIjQ1LjlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMTE4LjA5N1wiIHk9XCI0NjIuODI1XCIgd2lkdGg9XCI0NS45XCIgaGVpZ2h0PVwiNDUuOVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHk9XCIzODAuMTA4XCIgd2lkdGg9XCI0NS45XCIgaGVpZ2h0PVwiNDUuOVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHk9XCIxOTYuNTA5XCIgd2lkdGg9XCI0NS45XCIgaGVpZ2h0PVwiNDUuOVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMzMwLjM4NSwxNDMuNDM3Yy0yLjM5MS0xLjQzNC0zLjgyNS0yLjM5MS00LjMwNC0yLjg2OWwtMjguMjA5LTI5LjE2NmMtMS45MTMtMS45MTMtNC4zMDMtMy44MjUtNi42OTQtNS43MzdsLTI3LjI1MywzNi44MTVjMC40NzgsMC40NzgsMC45NTYsMC45NTYsMC45NTYsMC45NTZzMzcuNzcyLDM0LjQyNSw0NC40NjUsNDEuMTE5TDMzMC4zODUsMTQzLjQzN3pcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNTU0LjYyNVwiIHk9XCIyMzkuNTQxXCIgd2lkdGg9XCI0NS45XCIgaGVpZ2h0PVwiNDUuOVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzMDEuNjk3XCIgeT1cIjQ2Mi44MjVcIiB3aWR0aD1cIjQ1Ljg5OVwiIGhlaWdodD1cIjQ1LjlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTU1OS44ODUsMTQ2LjMwNmgtMTAuOTk3djQ3LjgxMmg1LjczN2g0NS45di03LjE3MkM2MDAuNTI1LDE2NC40NzUsNTgyLjM1NiwxNDYuMzA2LDU1OS44ODUsMTQ2LjMwNnpcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMTg3LjQyNVwiIHk9XCI5MS44XCIgd2lkdGg9XCI0NS45XCIgaGVpZ2h0PVwiNDUuOVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI1NTQuNjI1XCIgeT1cIjMzMS4zNDFcIiB3aWR0aD1cIjQ1LjlcIiBoZWlnaHQ9XCI0NS45XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjk1LjYyNVwiIHk9XCI5MS44XCIgd2lkdGg9XCI0NS45XCIgaGVpZ2h0PVwiNDUuOVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyMDkuODk3XCIgeT1cIjQ2Mi44MjVcIiB3aWR0aD1cIjQ1LjlcIiBoZWlnaHQ9XCI0NS45XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk00OS4yNDcsNDU2LjEzMmwtMzYuMzM3LDI3LjczYzExLjk1MywxNS43NzcsMzAuMTIyLDI0Ljg2Myw0OS43MjUsMjQuODYzaDkuNTYydi00NS45aC05LjU2MkM1Ny4zNzUsNDYyLjgyNSw1Mi41OTQsNDYwLjQzNSw0OS4yNDcsNDU2LjEzMnpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuXG4gICAgICAgICAgICAgICAgPGgzPlNvcnJ5IGFib3V0IHRoYXQuPC9oMz5cbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAgT3VyIHNlcnZlcnMgYXJlbid0IGRvaW5nIHRoZWlyIHRoaW5nIHJpZ2h0IG5vdy5cbiAgICAgICAgICAgICAgICAgICAgWW91IGNhbiB0cnkgYWdhaW4gbGF0ZXIgb3IgY29udGFjdCBhbiBhZG1pbmlzdHJhdG9yIGFib3V0IHRoaXMuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxociBzdHlsZT1cIndpZHRoOiAxMDAlOyBvcGFjaXR5OiAuNTtcIi8+XG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICAgIEVycm9yOlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiB2YXIoLS1tYXQtdGFiLWhlYWRlci1hY3RpdmUtZm9jdXMtbGFiZWwtdGV4dC1jb2xvcilcIj57e2Vycm9yLnN0YXR1c319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8YnIvPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGVycm9yLmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlOiB7e2Vycm9yLmVycm9yPy5tZXNzYWdlfX1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcmFnZ2luZ092ZXJcIj48L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgIDwhLS0gR3JpZCBtb2RlIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlID09ICdncmlkJykge1xuICAgICAgICAgICAgPG5nLXNjcm9sbGJhclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JpZCBjb250ZW50LWFyZWEge3tncmlkU2l6ZX19IHt7Y29uZmlnLmltYWdlU2l6ZSB8fCAnbm9ybWFsJ319XCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0aW9uTW9kZV09XCJjb25maWcubW9kZSA9PSAnZm9jdXNGaWxlcydcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zaG93RHJvcEFyZWFdPVwiZHJhZ2dpbmdPdmVyXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCVcIlxuICAgICAgICAgICAgICAgIHRyYWNrPVwidmVydGljYWxcIlxuICAgICAgICAgICAgICAgIHBvaW50ZXJFdmVudHNNZXRob2Q9XCJzY3JvbGxiYXJcIlxuICAgICAgICAgICAgICAgIFtuZ3gtY29udGV4dG1lbnVdPVwiZm9sZGVyQ29udGV4dE1lbnVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNpemUtb2JzZXJ2ZXJcIiAjZmlsZVZpZXdwb3J0PjwvZGl2PlxuICAgICAgICAgICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICAgICAgICAgICAgaXRlbVNpemU9XCIxNTBcIlxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxWaWV3cG9ydFxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0aW9uID0gW107IHNlbGVjdGlvblRleHQgPSAnJ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKmNka1ZpcnR1YWxGb3I9XCJsZXQgcm93IG9mIHNvcnRlZEZvbGRlcnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygcm93OyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwic2VsZWN0aW9uLmluY2x1ZGVzKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmdlbmVyaWNdPVwiaXRlbVsnX2ljb24nXS5uZWVkc0JhY2tkcm9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25neC1jb250ZXh0bWVudV09XCJmaWxlQ29udGV4dE1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmd4LW1lbnUtY29udGV4dF09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29uZmlnLm1vZGUgPT0gJ2ZvY3VzRmlsZXMnICYmIGl0ZW0ua2luZCA9PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpdGVtWydfdmFsdWUnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblRvZ2dsZShpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBjb250ZW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3QoaXRlbSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGJsY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRyYWdzdGFydCk9XCJvbkRyYWdTdGFydCgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW1bJ19pY29uJ10ucGF0aFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPnt7aXRlbVsndmFuaXR5TmFtZSddIHx8IGl0ZW0ubmFtZX19PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgICAgICAgICA8L25nLXNjcm9sbGJhcj5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gTGlzdCBtb2RlIC0tPlxuICAgICAgICBAaWYgKHZpZXdNb2RlID09ICdsaXN0Jykge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udGVudC1hcmVhXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zaG93RHJvcEFyZWFdPVwiZHJhZ2dpbmdPdmVyXCJcbiAgICAgICAgICAgICAgICBbbmd4LWNvbnRleHRtZW51XT1cImZvbGRlckNvbnRleHRNZW51XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YXBwLXRhYnVsYXRvclxuICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJkaXJlY3RvcnlDb250ZW50c1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICduYW1lJywgdGl0bGU6ICdOYW1lJywgZm9ybWF0dGVyOiBuYW1lQ2VsbEZvcm1hdHRlciB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ19zaXplJywgdGl0bGU6ICdTaXplJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBmaWVsZDogJ19jdGltZScsIHRpdGxlOiAnQ3JlYXRlZCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZmllbGQ6ICdfbXRpbWUnLCB0aXRsZTogJ01vZGlmaWVkJyB9LFxuICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93SGVpZ2h0OiAzMlxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgKHJvd0NsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChyb3dEYmxDbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQuZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAocm93Q29udGV4dCk9XCJvblJvd0N0eCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG48L2Rpdj5cblxuQGlmIChzZWxlY3Rpb25UZXh0Py50cmltKCk/Lmxlbmd0aCA+IDApIHtcbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWhpbnRcIj5cbiAgICAgICAge3tzZWxlY3Rpb25UZXh0fX1cbiAgICA8L2Rpdj5cbn1cblxuPGRpdiBjbGFzcz1cImNvbnRyb2xzXCI+XG4gICAgPGJ1dHRvblxuICAgICAgICBtYXQtZmxhdC1idXR0b25cbiAgICAgICAgY2xhc3M9XCJ1cGxvYWQtYnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ3JlYXRlRm9sZGVyKClcIlxuICAgID5cbiAgICAgICAgPG1hdC1pY29uPmNyZWF0ZV9uZXdfZm9sZGVyPC9tYXQtaWNvbj5cbiAgICAgICAgTmV3IEZvbGRlclxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b25cbiAgICAgICAgbWF0LWZsYXQtYnV0dG9uXG4gICAgICAgIGNsYXNzPVwidXBsb2FkLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJvblVwbG9hZEZpbGUoKVwiXG4gICAgPlxuICAgICAgICA8bWF0LWljb24+dXBsb2FkX2ZpbGU8L21hdC1pY29uPlxuICAgICAgICBVcGxvYWRcbiAgICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
|