@bizdoc/core 2.3.23 → 2.3.26

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.
@@ -566,13 +566,13 @@ export class WorkflowComponent {
566
566
  this._nodedestroy.complete();
567
567
  }
568
568
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: WorkflowComponent, deps: [{ token: i1.PromptService }, { token: i2.SystemService }, { token: i3.PaneRef }, { token: i4.PanesRouter }, { token: i5.SessionService }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
569
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: WorkflowComponent, selector: "bizdoc-workflow", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" }, classAttribute: "pane" }, viewQueries: [{ propertyName: "symbolPaletteEl", first: true, predicate: ["symbolPaletteEl"], descendants: true, static: true }, { propertyName: "diagramEl", first: true, predicate: ["diagramEl"], descendants: true, static: true }], ngImport: i0, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"tools = !tools\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty || saving\">{{'SaveChanges' | translate}}</button>\n <button mat-icon-button (click)=\"diagram.fitToPage()\" [bizdocTooltip]=\"'FitToPage' | translate\"><mat-icon>fullscreen_exit</mat-icon></button>\n <button mat-icon-button (click)=\"pan()\" [bizdocTooltip]=\"'Pan' | translate\"><span class=\"e-icons sf-icon-pan\"></span></button>\n <button mat-icon-button (click)=\"cursor()\" [bizdocTooltip]=\"'Cursor' | translate\"><span class=\"e-icons sf-icon-cursor\"></span></button>\n <span class=\"tools-divider\"></span>\n <button mat-icon-button (click)=\"diagram.undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"!diagram.historyManager?.canUndo\"><mat-icon>undo</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"!diagram.historyManager?.canRedo\"><mat-icon>redo</mat-icon></button>\n <span class=\"tools-divider\"></span>\n <button mat-icon-button (click)=\"diagram.copy()\" [bizdocTooltip]=\"'Copy' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>copy</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.paste()\" [bizdocTooltip]=\"'Paste' | translate\"><mat-icon>paste</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.remove()\" [bizdocTooltip]=\"'Remove' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>delete</mat-icon></button>\n <span class=\"tools-divider\"></span>\n <button mat-button [matMenuTriggerFor]=\"lineMenu\" [disabled]=\"diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'ConnectorMode'|translate\">\n <span class=\"e-menu-icon\" [ngClass]=\"{'sf-icon-straight-line': connectorType === 'Straight',\r\n 'sf-icon-orthogonal-line': connectorType === 'Orthogonal',\r\n 'sf-icon-beizer-line': connectorType === 'Bezier'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #lineMenu overlayPanelClass=\"icon-menu-panel\">\n <button mat-menu-item (click)=\"connectorTypeChange('Straight')\">\n <span class=\"e-menu-icon sf-icon-straight-line\"></span>\n </button>\n <button mat-menu-item (click)=\"connectorTypeChange('Orthogonal')\">\n <span class=\"e-menu-icon sf-icon-orthogonal-line\"></span>\n </button>\n <button mat-menu-item (click)=\"connectorTypeChange('Bezier')\">\n <span class=\"e-menu-icon sf-icon-beizer-line\"></span>\n </button>\n <!--<ng-container *ngIf=\"connectors.length\">\n < bizdoc-color-picker (valueChanges)='strokeChange($event)' [label]=\"'Stroke'|translate\"></ bizdoc-color-picker>\n <ng-container *ngIf=\"nodes[0].annotations.length\">\n < bizdoc-color-picker (valueChanges)='colorChange($event)' [label]=\"'Color'|translate\"></ bizdoc-color-picker>\n </ng-container>\n < bizdoc-color-picker (valueChanges)='bgChange($event)' [label]=\"'Background'|translate\"></ bizdoc-color-picker>\n < bizdoc-color-picker (valueChanges)='strokeChange($event)' [label]=\"'Stroke'|translate\"></ bizdoc-color-picker>\n </ng-container>-->\n</mat-menu>\n&nbsp;\n<button mat-button [matMenuTriggerFor]=\"alignMenu\" [disabled]=\"diagram.selectedItems?.nodes.length === 0 && diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'Align'|translate\">\n <span class=\"e-icons\" [ngClass]=\"{'sf-icon-top': alignment === 'Top',\r\n 'sf-icon-left': alignment === 'Left',\r\n 'sf-icon-center': alignment === 'Center',\r\n 'sf-icon-bottom': alignment === 'Bottom',\r\n 'sf-icon-right': alignment === 'Right'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\n</button>\n<mat-menu #alignMenu overlayPanelClass=\"icon-menu-panel\">\n <button mat-menu-item (click)=\"align('Top')\">\n <span class=\"e-icons sf-icon-top\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Left')\">\n <span class=\"e-icons sf-icon-left\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Center')\">\n <span class=\"e-icons sf-icon-center\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Right')\">\n <span class=\"e-icons sf-icon-right\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Bottom')\">\n <span class=\"e-icons sf-icon-bottom\"></span>\n </button>\n</mat-menu>\n<button mat-icon-button (click)=\"boldChange()\" [bizdocTooltip]=\"'Bold' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>format_bold</mat-icon></button>\n<button mat-icon-button (click)=\"italicChange()\" [bizdocTooltip]=\"'Italic' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>format_italic</mat-icon></button>\n<button mat-icon-button [matMenuTriggerFor]=\"sizeMenu\"\n [disabled]=\"diagram.selectedItems?.nodes.length === 0 && diagram.selectedItems?.connectors.length === 0\"\n [bizdocTooltip]=\"'FontSize'|translate\">\n <mat-icon>format_size</mat-icon>\n</button>\n<mat-menu #sizeMenu overlayPanelClass=\"icon-menu-panel\">\n @for (size of fontSizes; track size) {\n <button mat-menu-item (click)=\"fontSizeChange(size)\">\n {{size}}\n </button>\n }\n</mat-menu>\n<span class=\"divider\"></span>\n</mat-toolbar>\n<div class=\"row container\">\n <div id=\"symbolpalette\" [style.display]=\"tools?'':'none'\">\n <div dir=\"ltr\" #symbolPaletteEl>\n </div>\n </div>\n <div #diagramEl id=\"diagram\" class=\"flex\" dir=\"ltr\">\n </div>\n</div>\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;flex-grow:1;height:100%}.container{-webkit-flex-grow:1;flex-grow:1;overflow-y:auto}#diagram{-webkit-flex-grow:1;flex-grow:1}#symbolpalette{width:210px}::ng-deep .e-rtl{direction:ltr}::ng-deep .mat-toolbar .mat-button-toggle{background:transparent!important}.e-menu-icon{font-family:diagram-icons!important;speak:none;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::ng-deep .mat-mdc-menu-panel{min-width:0!important}.tools-divider:after{content:\"|\";opacity:.6;margin:0 2px}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i9.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i13.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); }
569
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: WorkflowComponent, selector: "bizdoc-workflow", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" }, classAttribute: "pane" }, viewQueries: [{ propertyName: "symbolPaletteEl", first: true, predicate: ["symbolPaletteEl"], descendants: true, static: true }, { propertyName: "diagramEl", first: true, predicate: ["diagramEl"], descendants: true, static: true }], ngImport: i0, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"tools = !tools\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty || saving\">{{'SaveChanges' | translate}}</button>\n <button mat-icon-button (click)=\"pan()\" [bizdocTooltip]=\"'Pan' | translate\"><span class=\"e-icons sf-icon-pan\"></span></button>\n <button mat-icon-button (click)=\"cursor()\" [bizdocTooltip]=\"'Cursor' | translate\"><span class=\"e-icons sf-icon-cursor\"></span></button>\n <span class=\"tools-divider\"></span>\n <button mat-icon-button (click)=\"diagram.undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"!diagram.historyManager?.canUndo\"><mat-icon>undo</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"!diagram.historyManager?.canRedo\"><mat-icon>redo</mat-icon></button>\n <span class=\"tools-divider\"></span>\n <button mat-icon-button (click)=\"diagram.copy()\" [bizdocTooltip]=\"'Copy' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>copy</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.paste()\" [bizdocTooltip]=\"'Paste' | translate\"><mat-icon>paste</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.remove()\" [bizdocTooltip]=\"'Remove' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>delete</mat-icon></button>\n <span class=\"tools-divider\"></span>\n <button mat-button [matMenuTriggerFor]=\"lineMenu\" [disabled]=\"diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'ConnectorMode'|translate\">\n <span class=\"e-menu-icon\" [ngClass]=\"{'sf-icon-straight-line': connectorType === 'Straight',\n 'sf-icon-orthogonal-line': connectorType === 'Orthogonal',\n 'sf-icon-beizer-line': connectorType === 'Bezier'}\"></span>\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #lineMenu overlayPanelClass=\"icon-menu-panel\">\n <button mat-menu-item (click)=\"connectorTypeChange('Straight')\">\n <span class=\"e-menu-icon sf-icon-straight-line\"></span>\n </button>\n <button mat-menu-item (click)=\"connectorTypeChange('Orthogonal')\">\n <span class=\"e-menu-icon sf-icon-orthogonal-line\"></span>\n </button>\n <button mat-menu-item (click)=\"connectorTypeChange('Bezier')\">\n <span class=\"e-menu-icon sf-icon-beizer-line\"></span>\n </button>\n <!--<ng-container *ngIf=\"connectors.length\">\n < bizdoc-color-picker (valueChanges)='strokeChange($event)' [label]=\"'Stroke'|translate\"></ bizdoc-color-picker>\n <ng-container *ngIf=\"nodes[0].annotations.length\">\n < bizdoc-color-picker (valueChanges)='colorChange($event)' [label]=\"'Color'|translate\"></ bizdoc-color-picker>\n </ng-container>\n < bizdoc-color-picker (valueChanges)='bgChange($event)' [label]=\"'Background'|translate\"></ bizdoc-color-picker>\n < bizdoc-color-picker (valueChanges)='strokeChange($event)' [label]=\"'Stroke'|translate\"></ bizdoc-color-picker>\n </ng-container>-->\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"diagram.fitToPage()\" [bizdocTooltip]=\"'FitToPage' | translate\"><mat-icon>fullscreen_exit</mat-icon></button>\n </mat-menu>\n &nbsp;\n <button mat-button [matMenuTriggerFor]=\"alignMenu\" [disabled]=\"diagram.selectedItems?.nodes.length === 0 && diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'Align'|translate\">\n <span class=\"e-icons\" [ngClass]=\"{'sf-icon-top': alignment === 'Top',\n 'sf-icon-left': alignment === 'Left',\n 'sf-icon-center': alignment === 'Center',\n 'sf-icon-bottom': alignment === 'Bottom',\n 'sf-icon-right': alignment === 'Right'}\"></span>\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #alignMenu overlayPanelClass=\"icon-menu-panel\">\n <button mat-menu-item (click)=\"align('Top')\">\n <span class=\"e-icons sf-icon-top\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Left')\">\n <span class=\"e-icons sf-icon-left\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Center')\">\n <span class=\"e-icons sf-icon-center\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Right')\">\n <span class=\"e-icons sf-icon-right\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Bottom')\">\n <span class=\"e-icons sf-icon-bottom\"></span>\n </button>\n </mat-menu>\n <button mat-icon-button (click)=\"boldChange()\" [bizdocTooltip]=\"'Bold' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>format_bold</mat-icon></button>\n <button mat-icon-button (click)=\"italicChange()\" [bizdocTooltip]=\"'Italic' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>format_italic</mat-icon></button>\n <button mat-icon-button [matMenuTriggerFor]=\"sizeMenu\"\n [disabled]=\"diagram.selectedItems?.nodes.length === 0 && diagram.selectedItems?.connectors.length === 0\"\n [bizdocTooltip]=\"'FontSize'|translate\">\n <mat-icon>format_size</mat-icon>\n </button>\n <mat-menu #sizeMenu overlayPanelClass=\"icon-menu-panel\">\n @for (size of fontSizes; track size) {\n <button mat-menu-item (click)=\"fontSizeChange(size)\">\n {{size}}\n </button>\n }\n </mat-menu>\n <span class=\"divider\"></span>\n</mat-toolbar>\n<div class=\"row container\">\n <div id=\"symbolpalette\" [style.display]=\"tools?'':'none'\">\n <div dir=\"ltr\" #symbolPaletteEl>\n </div>\n </div>\n <div #diagramEl id=\"diagram\" class=\"flex\" dir=\"ltr\">\n </div>\n</div>\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;flex-grow:1;height:100%}.container{-webkit-flex-grow:1;flex-grow:1;overflow-y:auto}#diagram{-webkit-flex-grow:1;flex-grow:1}#symbolpalette{width:210px}::ng-deep .e-rtl{direction:ltr}::ng-deep .mat-toolbar .mat-button-toggle{background:transparent!important}.e-menu-icon{font-family:diagram-icons!important;speak:none;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::ng-deep .mat-mdc-menu-panel{min-width:0!important}.tools-divider:after{content:\"|\";opacity:.6;margin:0 2px}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { kind: "component", type: i9.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i10.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i13.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }] }); }
570
570
  }
571
571
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: WorkflowComponent, decorators: [{
572
572
  type: Component,
573
573
  args: [{ selector: 'bizdoc-workflow', host: {
574
574
  class: 'pane'
575
- }, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"tools = !tools\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty || saving\">{{'SaveChanges' | translate}}</button>\n <button mat-icon-button (click)=\"diagram.fitToPage()\" [bizdocTooltip]=\"'FitToPage' | translate\"><mat-icon>fullscreen_exit</mat-icon></button>\n <button mat-icon-button (click)=\"pan()\" [bizdocTooltip]=\"'Pan' | translate\"><span class=\"e-icons sf-icon-pan\"></span></button>\n <button mat-icon-button (click)=\"cursor()\" [bizdocTooltip]=\"'Cursor' | translate\"><span class=\"e-icons sf-icon-cursor\"></span></button>\n <span class=\"tools-divider\"></span>\n <button mat-icon-button (click)=\"diagram.undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"!diagram.historyManager?.canUndo\"><mat-icon>undo</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"!diagram.historyManager?.canRedo\"><mat-icon>redo</mat-icon></button>\n <span class=\"tools-divider\"></span>\n <button mat-icon-button (click)=\"diagram.copy()\" [bizdocTooltip]=\"'Copy' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>copy</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.paste()\" [bizdocTooltip]=\"'Paste' | translate\"><mat-icon>paste</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.remove()\" [bizdocTooltip]=\"'Remove' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>delete</mat-icon></button>\n <span class=\"tools-divider\"></span>\n <button mat-button [matMenuTriggerFor]=\"lineMenu\" [disabled]=\"diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'ConnectorMode'|translate\">\n <span class=\"e-menu-icon\" [ngClass]=\"{'sf-icon-straight-line': connectorType === 'Straight',\r\n 'sf-icon-orthogonal-line': connectorType === 'Orthogonal',\r\n 'sf-icon-beizer-line': connectorType === 'Bezier'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #lineMenu overlayPanelClass=\"icon-menu-panel\">\n <button mat-menu-item (click)=\"connectorTypeChange('Straight')\">\n <span class=\"e-menu-icon sf-icon-straight-line\"></span>\n </button>\n <button mat-menu-item (click)=\"connectorTypeChange('Orthogonal')\">\n <span class=\"e-menu-icon sf-icon-orthogonal-line\"></span>\n </button>\n <button mat-menu-item (click)=\"connectorTypeChange('Bezier')\">\n <span class=\"e-menu-icon sf-icon-beizer-line\"></span>\n </button>\n <!--<ng-container *ngIf=\"connectors.length\">\n < bizdoc-color-picker (valueChanges)='strokeChange($event)' [label]=\"'Stroke'|translate\"></ bizdoc-color-picker>\n <ng-container *ngIf=\"nodes[0].annotations.length\">\n < bizdoc-color-picker (valueChanges)='colorChange($event)' [label]=\"'Color'|translate\"></ bizdoc-color-picker>\n </ng-container>\n < bizdoc-color-picker (valueChanges)='bgChange($event)' [label]=\"'Background'|translate\"></ bizdoc-color-picker>\n < bizdoc-color-picker (valueChanges)='strokeChange($event)' [label]=\"'Stroke'|translate\"></ bizdoc-color-picker>\n </ng-container>-->\n</mat-menu>\n&nbsp;\n<button mat-button [matMenuTriggerFor]=\"alignMenu\" [disabled]=\"diagram.selectedItems?.nodes.length === 0 && diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'Align'|translate\">\n <span class=\"e-icons\" [ngClass]=\"{'sf-icon-top': alignment === 'Top',\r\n 'sf-icon-left': alignment === 'Left',\r\n 'sf-icon-center': alignment === 'Center',\r\n 'sf-icon-bottom': alignment === 'Bottom',\r\n 'sf-icon-right': alignment === 'Right'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\n</button>\n<mat-menu #alignMenu overlayPanelClass=\"icon-menu-panel\">\n <button mat-menu-item (click)=\"align('Top')\">\n <span class=\"e-icons sf-icon-top\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Left')\">\n <span class=\"e-icons sf-icon-left\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Center')\">\n <span class=\"e-icons sf-icon-center\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Right')\">\n <span class=\"e-icons sf-icon-right\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Bottom')\">\n <span class=\"e-icons sf-icon-bottom\"></span>\n </button>\n</mat-menu>\n<button mat-icon-button (click)=\"boldChange()\" [bizdocTooltip]=\"'Bold' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>format_bold</mat-icon></button>\n<button mat-icon-button (click)=\"italicChange()\" [bizdocTooltip]=\"'Italic' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>format_italic</mat-icon></button>\n<button mat-icon-button [matMenuTriggerFor]=\"sizeMenu\"\n [disabled]=\"diagram.selectedItems?.nodes.length === 0 && diagram.selectedItems?.connectors.length === 0\"\n [bizdocTooltip]=\"'FontSize'|translate\">\n <mat-icon>format_size</mat-icon>\n</button>\n<mat-menu #sizeMenu overlayPanelClass=\"icon-menu-panel\">\n @for (size of fontSizes; track size) {\n <button mat-menu-item (click)=\"fontSizeChange(size)\">\n {{size}}\n </button>\n }\n</mat-menu>\n<span class=\"divider\"></span>\n</mat-toolbar>\n<div class=\"row container\">\n <div id=\"symbolpalette\" [style.display]=\"tools?'':'none'\">\n <div dir=\"ltr\" #symbolPaletteEl>\n </div>\n </div>\n <div #diagramEl id=\"diagram\" class=\"flex\" dir=\"ltr\">\n </div>\n</div>\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;flex-grow:1;height:100%}.container{-webkit-flex-grow:1;flex-grow:1;overflow-y:auto}#diagram{-webkit-flex-grow:1;flex-grow:1}#symbolpalette{width:210px}::ng-deep .e-rtl{direction:ltr}::ng-deep .mat-toolbar .mat-button-toggle{background:transparent!important}.e-menu-icon{font-family:diagram-icons!important;speak:none;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::ng-deep .mat-mdc-menu-panel{min-width:0!important}.tools-divider:after{content:\"|\";opacity:.6;margin:0 2px}\n"] }]
575
+ }, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"tools = !tools\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty || saving\">{{'SaveChanges' | translate}}</button>\n <button mat-icon-button (click)=\"pan()\" [bizdocTooltip]=\"'Pan' | translate\"><span class=\"e-icons sf-icon-pan\"></span></button>\n <button mat-icon-button (click)=\"cursor()\" [bizdocTooltip]=\"'Cursor' | translate\"><span class=\"e-icons sf-icon-cursor\"></span></button>\n <span class=\"tools-divider\"></span>\n <button mat-icon-button (click)=\"diagram.undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"!diagram.historyManager?.canUndo\"><mat-icon>undo</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"!diagram.historyManager?.canRedo\"><mat-icon>redo</mat-icon></button>\n <span class=\"tools-divider\"></span>\n <button mat-icon-button (click)=\"diagram.copy()\" [bizdocTooltip]=\"'Copy' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>copy</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.paste()\" [bizdocTooltip]=\"'Paste' | translate\"><mat-icon>paste</mat-icon></button>\n <button mat-icon-button (click)=\"diagram.remove()\" [bizdocTooltip]=\"'Remove' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>delete</mat-icon></button>\n <span class=\"tools-divider\"></span>\n <button mat-button [matMenuTriggerFor]=\"lineMenu\" [disabled]=\"diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'ConnectorMode'|translate\">\n <span class=\"e-menu-icon\" [ngClass]=\"{'sf-icon-straight-line': connectorType === 'Straight',\n 'sf-icon-orthogonal-line': connectorType === 'Orthogonal',\n 'sf-icon-beizer-line': connectorType === 'Bezier'}\"></span>\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #lineMenu overlayPanelClass=\"icon-menu-panel\">\n <button mat-menu-item (click)=\"connectorTypeChange('Straight')\">\n <span class=\"e-menu-icon sf-icon-straight-line\"></span>\n </button>\n <button mat-menu-item (click)=\"connectorTypeChange('Orthogonal')\">\n <span class=\"e-menu-icon sf-icon-orthogonal-line\"></span>\n </button>\n <button mat-menu-item (click)=\"connectorTypeChange('Bezier')\">\n <span class=\"e-menu-icon sf-icon-beizer-line\"></span>\n </button>\n <!--<ng-container *ngIf=\"connectors.length\">\n < bizdoc-color-picker (valueChanges)='strokeChange($event)' [label]=\"'Stroke'|translate\"></ bizdoc-color-picker>\n <ng-container *ngIf=\"nodes[0].annotations.length\">\n < bizdoc-color-picker (valueChanges)='colorChange($event)' [label]=\"'Color'|translate\"></ bizdoc-color-picker>\n </ng-container>\n < bizdoc-color-picker (valueChanges)='bgChange($event)' [label]=\"'Background'|translate\"></ bizdoc-color-picker>\n < bizdoc-color-picker (valueChanges)='strokeChange($event)' [label]=\"'Stroke'|translate\"></ bizdoc-color-picker>\n </ng-container>-->\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"diagram.fitToPage()\" [bizdocTooltip]=\"'FitToPage' | translate\"><mat-icon>fullscreen_exit</mat-icon></button>\n </mat-menu>\n &nbsp;\n <button mat-button [matMenuTriggerFor]=\"alignMenu\" [disabled]=\"diagram.selectedItems?.nodes.length === 0 && diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'Align'|translate\">\n <span class=\"e-icons\" [ngClass]=\"{'sf-icon-top': alignment === 'Top',\n 'sf-icon-left': alignment === 'Left',\n 'sf-icon-center': alignment === 'Center',\n 'sf-icon-bottom': alignment === 'Bottom',\n 'sf-icon-right': alignment === 'Right'}\"></span>\n <mat-icon>arrow_drop_down</mat-icon>\n </button>\n <mat-menu #alignMenu overlayPanelClass=\"icon-menu-panel\">\n <button mat-menu-item (click)=\"align('Top')\">\n <span class=\"e-icons sf-icon-top\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Left')\">\n <span class=\"e-icons sf-icon-left\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Center')\">\n <span class=\"e-icons sf-icon-center\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Right')\">\n <span class=\"e-icons sf-icon-right\"></span>\n </button>\n <button mat-menu-item (click)=\"align('Bottom')\">\n <span class=\"e-icons sf-icon-bottom\"></span>\n </button>\n </mat-menu>\n <button mat-icon-button (click)=\"boldChange()\" [bizdocTooltip]=\"'Bold' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>format_bold</mat-icon></button>\n <button mat-icon-button (click)=\"italicChange()\" [bizdocTooltip]=\"'Italic' | translate\" [disabled]=\"diagram.selectedItems?.connectors.length === 0 && diagram.selectedItems?.nodes.length === 0\"><mat-icon>format_italic</mat-icon></button>\n <button mat-icon-button [matMenuTriggerFor]=\"sizeMenu\"\n [disabled]=\"diagram.selectedItems?.nodes.length === 0 && diagram.selectedItems?.connectors.length === 0\"\n [bizdocTooltip]=\"'FontSize'|translate\">\n <mat-icon>format_size</mat-icon>\n </button>\n <mat-menu #sizeMenu overlayPanelClass=\"icon-menu-panel\">\n @for (size of fontSizes; track size) {\n <button mat-menu-item (click)=\"fontSizeChange(size)\">\n {{size}}\n </button>\n }\n </mat-menu>\n <span class=\"divider\"></span>\n</mat-toolbar>\n<div class=\"row container\">\n <div id=\"symbolpalette\" [style.display]=\"tools?'':'none'\">\n <div dir=\"ltr\" #symbolPaletteEl>\n </div>\n </div>\n <div #diagramEl id=\"diagram\" class=\"flex\" dir=\"ltr\">\n </div>\n</div>\n", styles: [":host{display:flex;-ms-flex-direction:column;-webkit-flex-direction:column;flex-direction:column;flex-grow:1;height:100%}.container{-webkit-flex-grow:1;flex-grow:1;overflow-y:auto}#diagram{-webkit-flex-grow:1;flex-grow:1}#symbolpalette{width:210px}::ng-deep .e-rtl{direction:ltr}::ng-deep .mat-toolbar .mat-button-toggle{background:transparent!important}.e-menu-icon{font-family:diagram-icons!important;speak:none;font-size:18px;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::ng-deep .mat-mdc-menu-panel{min-width:0!important}.tools-divider:after{content:\"|\";opacity:.6;margin:0 2px}\n"] }]
576
576
  }], ctorParameters: () => [{ type: i1.PromptService }, { type: i2.SystemService }, { type: i3.PaneRef }, { type: i4.PanesRouter }, { type: i5.SessionService }, { type: i6.TranslateService }], propDecorators: { symbolPaletteEl: [{
577
577
  type: ViewChild,
578
578
  args: ['symbolPaletteEl', { static: true }]
@@ -583,4 +583,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
583
583
  type: HostListener,
584
584
  args: ['document:keydown', ['$event']]
585
585
  }] } });
586
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9mb3JtL3dvcmtmbG93L3dvcmtmbG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS93b3JrZmxvdy93b3JrZmxvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBYSxZQUFZLEVBQXFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUNMLGtCQUFrQixFQUFFLG1CQUFtQixFQUNaLGVBQWUsRUFDMUMsT0FBTyxFQUFhLFFBQVEsRUFDNUIsSUFBSSxFQUEwQixZQUFZLEVBQUUsb0JBQW9CLEVBQ2hFLGFBQWEsRUFBRSxZQUFZLEVBQzNCLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQWlCLGVBQWUsRUFBZSxjQUFjLEVBQ3RILE1BQU0sMEJBQTBCLENBQUM7QUFRbEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRXpELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hFLGFBQWEsQ0FBQyxNQUFNLENBQUMsWUFB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RSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBMlp4QyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaXJzdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1xyXG4gIERpYWdyYW1Db25zdHJhaW50cywgU2VsZWN0b3JDb25zdHJhaW50cywgQ29ubmVjdG9yTW9kZWwsXHJcbiAgVGV4dE1vZGVsLCBQb2ludFBvcnRNb2RlbCwgTm9kZUNvbnN0cmFpbnRzLCBTY3JvbGxTZXR0aW5nc01vZGVsLFxyXG4gIERpYWdyYW0sIE5vZGVNb2RlbCwgVW5kb1JlZG8sIFN5bWJvbEluZm8sIElEcmFnRW50ZXJFdmVudEFyZ3MsIFNuYXBTZXR0aW5nc01vZGVsLCBNYXJnaW5Nb2RlbCxcclxuICBOb2RlLCBQYWxldHRlTW9kZWwsIFNlZ21lbnRzLCBEaWFncmFtVG9vbHMsIENvbm5lY3RvckNvbnN0cmFpbnRzLCBTZWxlY3Rvck1vZGVsLCBSdWxlclNldHRpbmdzTW9kZWwsIEFsaWdubWVudE9wdGlvbnMsIFRleHRTdHlsZU1vZGVsLFxyXG4gIFN5bWJvbFBhbGV0dGUsIEJwbW5EaWFncmFtcywgRGF0YUJpbmRpbmcsIElTZWxlY3Rpb25DaGFuZ2VFdmVudEFyZ3MsXHJcbiAgQ29ubmVjdG9yRWRpdGluZywgQ29ubmVjdG9yQnJpZGdpbmcsIFNuYXBwaW5nLCBDb25uZWN0b3IsIFN3aW1MYW5lTW9kZWwsIFBvcnRDb25zdHJhaW50cywgSGVhZGVyTW9kZWwsIFBvcnRWaXNpYmlsaXR5LCBTbmFwQ29uc3RyYWludHMsIFNoYXBlQW5ub3RhdGlvbk1vZGVsLCBQYXRoQW5ub3RhdGlvbk1vZGVsLCBEaWFncmFtTW9kZWxcclxufSBmcm9tICdAc3luY2Z1c2lvbi9lajItZGlhZ3JhbXMnO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZSB9IGZyb20gJy4uLy4uL3N5c3RlbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhbmVSZWYgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmJztcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Nsb3RzL3JvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkbWluQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWRtaW4tZGlzbWlzcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3BlblBvbGljeSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IE1BVEVSSUFMX1BBTEVUVEVTIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb2xvcnMnO1xyXG5cclxuRGlhZ3JhbS5JbmplY3QoVW5kb1JlZG8sIENvbm5lY3RvckJyaWRnaW5nLCBDb25uZWN0b3JFZGl0aW5nLCBTbmFwcGluZyk7XHJcblN5bWJvbFBhbGV0dGUuSW5qZWN0KEJwbW5EaWFncmFtcyk7XHJcblxyXG5jb25zdCBwb3J0czogUG9pbnRQb3J0TW9kZWxbXSA9IFtcclxuICB7IGlkOiAncG9ydDEnLCBzaGFwZTogJ0NpcmNsZScsIG9mZnNldDogeyB4OiAwLCB5OiAwLjUgfSwgdmlzaWJpbGl0eTogUG9ydFZpc2liaWxpdHkuQ29ubmVjdCB8IFBvcnRWaXNpYmlsaXR5LkhvdmVyLCBjb25zdHJhaW50czogUG9ydENvbnN0cmFpbnRzLkRlZmF1bHQgfCBQb3J0Q29uc3RyYWludHMuRHJhdyB9LFxyXG4gIHsgaWQ6ICdwb3J0MicsIHNoYXBlOiAnQ2lyY2xlJywgb2Zmc2V0OiB7IHg6IDAuNSwgeTogMSB9LCB2aXNpYmlsaXR5OiBQb3J0VmlzaWJpbGl0eS5Db25uZWN0IHwgUG9ydFZpc2liaWxpdHkuSG92ZXIsIGNvbnN0cmFpbnRzOiBQb3J0Q29uc3RyYWludHMuRGVmYXVsdCB8IFBvcnRDb25zdHJhaW50cy5EcmF3IH0sXHJcbiAgeyBpZDogJ3BvcnQzJywgc2hhcGU6ICdDaXJjbGUnLCBvZmZzZXQ6IHsgeDogMSwgeTogMC41IH0sIHZpc2liaWxpdHk6IFBvcnRWaXNpYmlsaXR5LkNvbm5lY3QgfCBQb3J0VmlzaWJpbGl0eS5Ib3ZlciwgY29uc3RyYWludHM6IFBvcnRDb25zdHJhaW50cy5EZWZhdWx0IHwgUG9ydENvbnN0cmFpbnRzLkRyYXcgfSxcclxuICB7IGlkOiAncG9ydDQnLCBzaGFwZTogJ0NpcmNsZScsIG9mZnNldDogeyB4OiAwLjUsIHk6IDAgfSwgdmlzaWJpbGl0eTogUG9ydFZpc2liaWxpdHkuQ29ubmVjdCB8IFBvcnRWaXNpYmlsaXR5LkhvdmVyLCBjb25zdHJhaW50czogUG9ydENvbnN0cmFpbnRzLkRlZmF1bHQgfCBQb3J0Q29uc3RyYWludHMuRHJhdyB9XHJcbl07XHJcblxyXG5mdW5jdGlvbiBzaG93UGFsZXR0ZUljb24oKTogdm9pZCB7XHJcbiAgY29uc3QgcGFsZXR0ZVNwYWNlOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWxldHRlLXNwYWNlJyk7XHJcbiAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKG1heC13aWR0aDo1NTBweCknKS5tYXRjaGVzO1xyXG4gIGlmIChpc01vYmlsZSkge1xyXG4gICAgaWYgKCFwYWxldHRlU3BhY2UuY2xhc3NMaXN0LmNvbnRhaW5zKCdzYi1tb2JpbGUtcGFsZXR0ZS1vcGVuJykpIHtcclxuICAgICAgcGFsZXR0ZVNwYWNlLmNsYXNzTGlzdC5hZGQoJ3NiLW1vYmlsZS1wYWxldHRlLW9wZW4nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbGV0dGVTcGFjZS5jbGFzc0xpc3QucmVtb3ZlKCdzYi1tb2JpbGUtcGFsZXR0ZS1vcGVuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYWxldHRlSWNvbkNsaWNrKCkge1xyXG4gIGNvbnN0IGlzTW9iaWxlID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6NTUwcHgpJykubWF0Y2hlcztcclxuICBpZiAoaXNNb2JpbGUpIHtcclxuICAgIGNvbnN0IHBhbGV0dGVJY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhbGV0dGUtaWNvbicpO1xyXG4gICAgaWYgKHBhbGV0dGVJY29uKSB7XHJcbiAgICAgIHBhbGV0dGVJY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd1BhbGV0dGVJY29uLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy13b3JrZmxvdycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtmbG93LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgIGNsYXNzOiAncGFuZSdcclxuICB9XHJcbn0pXHJcbi8qKiB3b3JrZmxvdyBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWRtaW5Db21wb25lbnQge1xyXG4gIHN5bWJvbFBhbGV0dGU6IFN5bWJvbFBhbGV0dGU7XHJcbiAgcmVhZG9ubHkgZm9udFNpemVzID0gWzksIDExLCAxMiwgMTMsIDE1LCAyMSwgMzEsIDQxXTtcclxuICBkaWFncmFtOiBEaWFncmFtO1xyXG4gIEBWaWV3Q2hpbGQoJ3N5bWJvbFBhbGV0dGVFbCcsIHsgc3RhdGljOiB0cnVlIH0pIHN5bWJvbFBhbGV0dGVFbDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdkaWFncmFtRWwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFncmFtRWw6IEVsZW1lbnRSZWY7XHJcbiAgcHJpdmF0ZSBfdG9vbHM6IGJvb2xlYW47XHJcbiAgZ2V0IHRvb2xzKCkgeyByZXR1cm4gdGhpcy5fdG9vbHM7IH1cclxuICBzZXQgdG9vbHModmFsOiBib29sZWFuKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGlhZ3JhbV90b29scycsIHZhbCA/ICcxJyA6ICcwJyk7XHJcbiAgICB0aGlzLl90b29scyA9IHZhbDtcclxuICB9XHJcbiAgY29ubmVjdG9yVHlwZTogU2VnbWVudHMgPSAnQmV6aWVyJztcclxuICBhbGlnbm1lbnQ6IEFsaWdubWVudE9wdGlvbnMgPSAnQ2VudGVyJztcclxuICBmb250U2l6ZSA9IDEyO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGVsZW1lbnQ/OiBhbnk7XHJcbiAgZGlydHkgPSBmYWxzZTtcclxuICBwYXJhbXM6IHt9O1xyXG4gIHJlYWRvbmx5IHBhbGV0dGVzOiBQYWxldHRlTW9kZWxbXSA9IFtdO1xyXG4gIGRpYWdyYW1Db25zdHJhaW50czogRGlhZ3JhbUNvbnN0cmFpbnRzID0gRGlhZ3JhbUNvbnN0cmFpbnRzLkRlZmF1bHQgfCBEaWFncmFtQ29uc3RyYWludHMuQnJpZGdpbmcgfCBEaWFncmFtQ29uc3RyYWludHMuVXNlckludGVyYWN0aW9uIHwgRGlhZ3JhbUNvbnN0cmFpbnRzLlpvb207XHJcbiAgLy9TeW1ib2xQYWxldHRlIFByb3BlcnRpZXNcclxuICByZWFkb25seSBzeW1ib2xNYXJnaW46IE1hcmdpbk1vZGVsID0geyBsZWZ0OiAxMCwgcmlnaHQ6IDEwLCB0b3A6IDEwLCBib3R0b206IDEwIH07XHJcbiAgcmVhZG9ubHkgc25hcFNldHRpbmdzOiBTbmFwU2V0dGluZ3NNb2RlbCA9IHtcclxuICAgIHNuYXBMaW5lQ29sb3I6IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KDEwMClcclxuICB9O1xyXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXM6IFNlbGVjdG9yTW9kZWwgPSB7XHJcbiAgICBjb25zdHJhaW50czogU2VsZWN0b3JDb25zdHJhaW50cy5BbGwgJiB+U2VsZWN0b3JDb25zdHJhaW50cy5Sb3RhdGUsXHJcbiAgfTtcclxuICByZWFkb25seSBzY3JvbGxTZXR0aW5nczogU2Nyb2xsU2V0dGluZ3NNb2RlbCA9IHtcclxuICAgIG1pblpvb206IC41LFxyXG4gICAgbWF4Wm9vbTogMi41LFxyXG4gIH07XHJcbiAgcmVhZG9ubHkgcnVsZXJTZXR0aW5nczogUnVsZXJTZXR0aW5nc01vZGVsID0ge1xyXG4gIH07XHJcbiAgcHJpdmF0ZSBfZm9ybTogRm9ybTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9ub2RlZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgLyoqIHdvcmtmbG93IGN0b3IgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3BzOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3BhbmU6IFBhbmVSZWY8V29ya2Zsb3dDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBQYW5lc1JvdXRlcixcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLl90b29scyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkaWFncmFtX3Rvb2xzJykgPT09ICcxJztcclxuXHJcbiAgICB0aGlzLl9wYWxldHRlcygpO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zeW1ib2xQYWxldHRlID0gbmV3IFN5bWJvbFBhbGV0dGUoe1xyXG4gICAgICBleHBhbmRNb2RlOiAnTXVsdGlwbGUnLFxyXG4gICAgICBwYWxldHRlczogdGhpcy5wYWxldHRlcyxcclxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxyXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxyXG4gICAgICBlbmFibGVSdGw6IGZhbHNlLFxyXG4gICAgICBlbmFibGVBbmltYXRpb246IGZhbHNlLFxyXG4gICAgICBzeW1ib2xIZWlnaHQ6IDgwLFxyXG4gICAgICBzeW1ib2xXaWR0aDogODAsXHJcbiAgICAgIHN5bWJvbE1hcmdpbjogdGhpcy5zeW1ib2xNYXJnaW4sXHJcbiAgICAgIGdldFN5bWJvbEluZm86IHRoaXMuZ2V0U3ltYm9sSW5mby5iaW5kKHRoaXMpLFxyXG4gICAgICBnZXROb2RlRGVmYXVsdHM6IHRoaXMuZ2V0U3ltYm9sRGVmYXVsdHMuYmluZCh0aGlzKSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zeW1ib2xQYWxldHRlLmFwcGVuZFRvKHRoaXMuc3ltYm9sUGFsZXR0ZUVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5kaWFncmFtID0gbmV3IERpYWdyYW0oe1xyXG4gICAgICB3aWR0aDogXCIxMDAlXCIsIGhlaWdodDogXCIxMDAlXCIsXHJcbiAgICAgIHNuYXBTZXR0aW5nczogdGhpcy5zbmFwU2V0dGluZ3MsXHJcbiAgICAgIGdldENvbm5lY3RvckRlZmF1bHRzOiB0aGlzLmNvbm5EZWZhdWx0cy5iaW5kKHRoaXMpLFxyXG4gICAgICBjb25zdHJhaW50czogdGhpcy5kaWFncmFtQ29uc3RyYWludHMsXHJcbiAgICAgIGdldE5vZGVEZWZhdWx0czogdGhpcy5ub2RlRGVmYXVsdHMuYmluZCh0aGlzKSxcclxuICAgICAgc2Nyb2xsU2V0dGluZ3M6IHRoaXMuc2Nyb2xsU2V0dGluZ3MsXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcclxuICAgICAgcnVsZXJTZXR0aW5nczogdGhpcy5ydWxlclNldHRpbmdzLFxyXG4gICAgICBkcmFnRW50ZXI6IHRoaXMuZHJhZ0VudGVyLmJpbmQodGhpcyksXHJcbiAgICAgIGNvbm5lY3Rpb25DaGFuZ2U6IHRoaXMuY2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIGNvbGxlY3Rpb25DaGFuZ2U6IHRoaXMuY29sbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpLFxyXG4gICAgICBwcm9wZXJ0eUNoYW5nZTogdGhpcy5wcm9wZXJ0eUNoYW5nZS5iaW5kKHRoaXMpLFxyXG4gICAgICBzZWxlY3Rpb25DaGFuZ2U6IHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICB9LCB0aGlzLmRpYWdyYW1FbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIHBhbGV0dGVJY29uQ2xpY2soKTtcclxuICAgIHRoaXMuX3BhbmUucGFyYW1zQ2hhbmdlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShwID0+IHtcclxuICAgICAgY29uc3QgaWQgPSBwWydpZCddO1xyXG4gICAgICB0aGlzLl9mb3JtID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmZvcm1zLmZpbmQoZiA9PiBmLm5hbWUgPT09IGlkKTtcclxuICAgICAgdGhpcy5fcGFuZS50aXRsZSA9IHRoaXMuX2Zvcm0udGl0bGU7XHJcbiAgICAgIHRoaXMucGFyYW1zID0geyBpZDogdGhpcy5fZm9ybS5uYW1lIH07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3BhbmUuZGF0YUNoYW5nZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoZCA9PiB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fZm9ybSwgZC5mb3JtKTtcclxuICAgICAgY29uc3QgZmxvdyA9IHRoaXMuX2Zvcm0ud29ya2Zsb3c7XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5ub2RlcyA9IGZsb3cubm9kZXM7XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5jb25uZWN0b3JzID0gZmxvdy5jb25uZWN0b3JzO1xyXG4gICAgICB0aGlzLmRpYWdyYW0uZGF0YUJpbmQoKTtcclxuICAgICAgdGhpcy5kaWFncmFtLmFkZCh0aGlzLl92ZXJzaW9uTm9kZShmbG93LnZlcnNpb24pKTtcclxuICAgICAgdGhpcy5kaWFncmFtLmZpdFRvUGFnZSgpO1xyXG4gICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcGFsZXR0ZXMoKSB7XHJcbiAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubm9kZXMuZm9yRWFjaChuID0+IHtcclxuICAgICAgY29uc3Qgbm9kZTogTm9kZU1vZGVsID0ge1xyXG4gICAgICAgIGlkOiBuLm5hbWUsXHJcbiAgICAgICAgc2hhcGU6IG4uc2hhcGUsXHJcbiAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgbm9kZVR5cGU6IG4ubmFtZSxcclxuICAgICAgICAgIHRpdGxlOiBuLnRpdGxlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3aWR0aDogMTQ1LFxyXG4gICAgICAgIGhlaWdodDogMTQ1LFxyXG4gICAgICB9O1xyXG4gICAgICAobm9kZSBhcyBhbnkpLm5vZGUgPSBuLm5hbWU7XHJcbiAgICAgIGxldCBwYWxldHRlID0gdGhpcy5wYWxldHRlcy5maW5kKHAgPT4gcC50aXRsZSA9PT0gKG4ucGFsZXR0ZSB8fCAnJykpO1xyXG4gICAgICBpZiAoIXBhbGV0dGUpIHtcclxuICAgICAgICBwYWxldHRlID0geyBpZDogYF8ke24ucGFsZXR0ZX1gLCBleHBhbmRlZDogdHJ1ZSwgdGl0bGU6IG4ucGFsZXR0ZSB8fCAnJywgc3ltYm9sczogW10gfTtcclxuICAgICAgICB0aGlzLnBhbGV0dGVzLnB1c2gocGFsZXR0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgcGFsZXR0ZS5zeW1ib2xzLnB1c2gobm9kZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFsZXR0ZXMucHVzaCh7XHJcbiAgICAgIGlkOiAnZGVzaWduJyxcclxuICAgICAgdGl0bGU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0Rlc2lnbicpLFxyXG4gICAgICBzeW1ib2xzOiBbe1xyXG4gICAgICAgIGlkOiAnTGluazIyJyxcclxuICAgICAgICB0eXBlOiAnU3RyYWlnaHQnLFxyXG4gICAgICAgIHNvdXJjZVBvaW50OiB7IHg6IDAsIHk6IDAgfSxcclxuICAgICAgICB0YXJnZXRQb2ludDogeyB4OiA2MCwgeTogNjAgfSxcclxuICAgICAgICB0YXJnZXREZWNvcmF0b3I6IHtcclxuICAgICAgICAgIHNoYXBlOiAnQXJyb3cnLFxyXG4gICAgICAgICAgc3R5bGU6IHsgc3Ryb2tlQ29sb3I6ICcjNzU3NTc1JywgZmlsbDogJyM3NTc1NzUnIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6ICc0IDQnLFxyXG4gICAgICAgICAgc3Ryb2tlQ29sb3I6ICcjNzU3NTc1JyxcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogJ3RleHQnLCBzaGFwZTogeyB0eXBlOiAnVGV4dCcsIGNvbnRlbnQ6ICdUJyB9LFxyXG4gICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb25zdHJhaW50czogTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQgJiB+Tm9kZUNvbnN0cmFpbnRzLkluQ29ubmVjdCAmIH5Ob2RlQ29uc3RyYWludHMuT3V0Q29ubmVjdCxcclxuICAgICAgICBhZGRJbmZvOiB7IHRpdGxlOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdUZXh0JykgfVxyXG4gICAgICB9XVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjb2xvciA9IE1BVEVSSUFMX1BBTEVUVEVTWydncmV5J11bMjAwXTtcclxuICAgIHRoaXMucGFsZXR0ZXMucHVzaCh7XHJcbiAgICAgIGlkOiAnc3dpbWxhbmVTaGFwZXMnLFxyXG4gICAgICBleHBhbmRlZDogdHJ1ZSxcclxuICAgICAgdGl0bGU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N3aW1sYW5lIFNoYXBlcycpLFxyXG4gICAgICBzeW1ib2xzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6ICdzd2ltbGFuZScsXHJcbiAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdIb3Jpem9udGFsJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uOiB7IGNvbnRlbnQ6ICdQbGFuJyB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHR5cGU6ICdTd2ltTGFuZScsXHJcbiAgICAgICAgICAgIGxhbmVzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWQ6ICdsYW5lMScsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbjogeyBjb250ZW50OiAnTGFuZScgfSxcclxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgZmlsbDogY29sb3IgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgb3JpZW50YXRpb246ICdIb3Jpem9udGFsJyxcclxuICAgICAgICAgICAgaXNMYW5lOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaGVpZ2h0OiA2MCxcclxuICAgICAgICAgIHdpZHRoOiAxNDAsXHJcbiAgICAgICAgICBvZmZzZXRYOiA3MCxcclxuICAgICAgICAgIG9mZnNldFk6IDMwLFxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgIGlkOiAndnN3aW1sYW5lJyxcclxuICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1ZlcnRpY2FsJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnU3dpbUxhbmUnLFxyXG4gICAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uOiB7IGNvbnRlbnQ6ICdQbGFuJyB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxhbmVzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWQ6ICdsYW5lMScsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbjogeyBjb250ZW50OiAnTGFuZScgfSxcclxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgZmlsbDogY29sb3IgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgb3JpZW50YXRpb246ICdWZXJ0aWNhbCcsIGlzTGFuZTogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGhlaWdodDogMTQwLFxyXG4gICAgICAgICAgd2lkdGg6IDYwLFxyXG4gICAgICAgICAgb2Zmc2V0WDogNzAsXHJcbiAgICAgICAgICBvZmZzZXRZOiAzMCxcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICBpZDogJ3ZwaGFzZScsXHJcbiAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdQaGFzZScpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgdHlwZTogJ1N3aW1MYW5lJyxcclxuICAgICAgICAgICAgcGhhc2VzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHsgc3Ryb2tlV2lkdGg6IDEsIHN0cm9rZURhc2hBcnJheTogJzMsMycsIHN0cm9rZUNvbG9yOiBjb2xvciB9LFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgIGFubm90YXRpb246IHsgdGV4dDogJ1BoYXNlJyB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfV0sXHJcbiAgICAgICAgICAgIG9yaWVudGF0aW9uOiAnVmVydGljYWwnLCBpc1BoYXNlOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaGVpZ2h0OiA2MCxcclxuICAgICAgICAgIHdpZHRoOiAxNDAsXHJcbiAgICAgICAgICBzdHlsZTogeyBzdHJva2VDb2xvcjogY29sb3IgfVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgIGlkOiAnaHBoYXNlJyxcclxuICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1BoYXNlJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnU3dpbUxhbmUnLFxyXG4gICAgICAgICAgICBwaGFzZXM6IFt7XHJcbiAgICAgICAgICAgICAgc3R5bGU6IHsgc3Ryb2tlV2lkdGg6IDEsIHN0cm9rZURhc2hBcnJheTogJzMsMycsIHN0cm9rZUNvbG9yOiBjb2xvciB9LFxyXG4gICAgICAgICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbjogeyB0ZXh0OiAnUGhhc2UnIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICBvcmllbnRhdGlvbjogJ0hvcml6b250YWwnLCBpc1BoYXNlOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaGVpZ2h0OiA2MCxcclxuICAgICAgICAgIHdpZHRoOiAxNDAsXHJcbiAgICAgICAgICBzdHlsZTogeyBzdHJva2VDb2xvcjogY29sb3IgfVxyXG4gICAgICAgIH1dXHJcbiAgICB9IGFzIFBhbGV0dGVNb2RlbCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3ZlcnNpb25Ob2RlKHZlcnNpb246IG51bWJlcik6IE5vZGVNb2RlbCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogJ3ZlcnNpb24nLFxyXG4gICAgICBzaGFwZToge1xyXG4gICAgICAgIHR5cGU6ICdUZXh0JyxcclxuICAgICAgICBjb250ZW50OiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEaWFncmFtVmVyc2lvbicsIHZlcnNpb24gfHwgMClcclxuICAgICAgfSxcclxuICAgICAgb2Zmc2V0WTogNSxcclxuICAgICAgb2Zmc2V0WDogNSxcclxuICAgICAgc3R5bGU6IHtcclxuICAgICAgICBmb250U2l6ZTogNTAsXHJcbiAgICAgICAgY29sb3I6IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snLFxyXG4gICAgICAgIG9wYWNpdHk6IC4xXHJcbiAgICAgIH0gYXMgVGV4dFN0eWxlTW9kZWwsXHJcbiAgICAgIGNvbnN0cmFpbnRzOiBOb2RlQ29uc3RyYWludHMuUmVhZE9ubHksXHJcbiAgICAgIHpJbmRleDogLTFcclxuICAgIH07XHJcbiAgfVxyXG4gIG5vZGVEZWZhdWx0cyA9IChvYmo6IE5vZGVNb2RlbCk6IE5vZGVNb2RlbCA9PiB7XHJcbiAgICBzd2l0Y2ggKG9iai5zaGFwZS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ1N3aW1MYW5lJzpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnVGV4dCc6XHJcbiAgICAgICAgaWYgKG9iai5pZCAhPT0gJ3ZlcnNpb24nKVxyXG4gICAgICAgICAgb2JqLmNvbnN0cmFpbnRzID0gTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQgJiB+Tm9kZUNvbnN0cmFpbnRzLkluQ29ubmVjdCAmIH5Ob2RlQ29uc3RyYWludHMuT3V0Q29ubmVjdDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBpZiAob2JqLmFkZEluZm8gJiYgb2JqLmFkZEluZm9bJ25vZGVUeXBlJ10pIHtcclxuICAgICAgICAgIG9iai5jb25zdHJhaW50cyA9IE5vZGVDb25zdHJhaW50cy5EZWZhdWx0IHwgTm9kZUNvbnN0cmFpbnRzLkFzcGVjdFJhdGlvO1xyXG4gICAgICAgICAgb2JqLnN0eWxlLnN0cm9rZUNvbG9yID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgICAgICBvYmoucG9ydHMgPSBwb3J0cztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICBwdWJsaWMgY29ubkRlZmF1bHRzID0gKG9iajogQ29ubmVjdG9yTW9kZWwpID0+IHtcclxuICAgIG9iai5jb25zdHJhaW50cyA9IENvbm5lY3RvckNvbnN0cmFpbnRzLkRlZmF1bHQgfCBDb25uZWN0b3JDb25zdHJhaW50cy5CcmlkZ2luZztcclxuICAgIG9iai5zdHlsZS5zdHJva2VDb2xvciA9IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snO1xyXG4gICAgaWYgKCFvYmoudHlwZSkgb2JqLnR5cGUgPSB0aGlzLmNvbm5lY3RvclR5cGU7XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0U3ltYm9sSW5mbyhzeW1ib2w6IE5vZGVNb2RlbCk6IFN5bWJvbEluZm8ge1xyXG4gICAgcmV0dXJuIHN5bWJvbC5hZGRJbmZvID8ge1xyXG4gICAgICBmaXQ6IHRydWUsXHJcbiAgICAgIHRvb2x0aXA6IChzeW1ib2wuYWRkSW5mbyBhcyBhbnkpLnRpdGxlLFxyXG4gICAgICBkZXNjcmlwdGlvbjogeyB0ZXh0OiAoc3ltYm9sLmFkZEluZm8gYXMgYW55KS50aXRsZSwgb3ZlcmZsb3c6ICdXcmFwJywgd3JhcDogJ1dyYXBXaXRoT3ZlcmZsb3cnIH1cclxuICAgIH0gOiBudWxsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0U3ltYm9sRGVmYXVsdHMoc3ltYm9sOiBOb2RlTW9kZWwpOiB2b2lkIHtcclxuICAgIHN5bWJvbC53aWR0aCA9IHN5bWJvbC5oZWlnaHQgPSA0MDtcclxuICB9XHJcbiAgcGFuKCkge1xyXG4gICAgdGhpcy5kaWFncmFtLmNvbnN0cmFpbnRzID0gdGhpcy5kaWFncmFtLmNvbnN0cmFpbnRzIHwgRGlhZ3JhbUNvbnN0cmFpbnRzLlBhbjtcclxuICAgIHRoaXMuZGlhZ3JhbS50b29sID0gRGlhZ3JhbVRvb2xzLlpvb21QYW47XHJcbiAgfVxyXG4gIGN1cnNvcigpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5jb25zdHJhaW50cyA9IHRoaXMuZGlhZ3JhbS5jb25zdHJhaW50cyAmIH5EaWFncmFtQ29uc3RyYWludHMuUGFuO1xyXG4gICAgdGhpcy5kaWFncmFtLnRvb2wgPSBEaWFncmFtVG9vbHMuRGVmYXVsdDtcclxuICB9XHJcbiAgc2VsZWN0aW9uQ2hhbmdlKGV2dDogSVNlbGVjdGlvbkNoYW5nZUV2ZW50QXJncykge1xyXG4gICAgY29uc3QgeyBuZXdWYWx1ZSwgc3RhdGUgfSA9IGV2dDtcclxuICAgIGlmIChzdGF0ZSAhPT0gJ0NoYW5naW5nJyB8fCAhbmV3VmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX25vZGVkZXN0cm95Lm5leHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29ubmVjdG9ycyA9IG5ld1ZhbHVlLmZpbHRlcihuID0+IG4gaW5zdGFuY2VvZiBDb25uZWN0b3IpLm1hcChuID0+IG4gYXMgQ29ubmVjdG9yTW9kZWwpO1xyXG4gICAgaWYgKGNvbm5lY3RvcnMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGNvbm5lY3RvciA9IGNvbm5lY3RvcnNbMF0sXHJcbiAgICAgICAgdHlwZSA9IGNvbm5lY3Rvci50eXBlO1xyXG4gICAgICB0aGlzLmNvbm5lY3RvclR5cGUgPSBjb25uZWN0b3JzLmxlbmd0aCA9PT0gMSB8fFxyXG4gICAgICAgIGNvbm5lY3RvcnMuZXZlcnkoYyA9PiBjLnR5cGUgPT09IHR5cGUpID8gdHlwZSA6IG51bGw7XHJcbiAgICAgIGlmIChjb25uZWN0b3IuYW5ub3RhdGlvbnMubGVuZ3RoICYmIGNvbm5lY3Rvci5hbm5vdGF0aW9uc1swXS5zdHlsZSlcclxuICAgICAgICB0aGlzLmZvbnRTaXplID0gY29ubmVjdG9yLmFubm90YXRpb25zWzBdLnN0eWxlLmZvbnRTaXplO1xyXG4gICAgICB0aGlzLmNvbm5lY3RvclR5cGUgPSBjb25uZWN0b3JzLmxlbmd0aCA9PT0gMSB8fFxyXG4gICAgICAgIGNvbm5lY3RvcnMuZXZlcnkoYyA9PiBjLnR5cGUgPT09IHR5cGUpID8gdHlwZSA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBub2RlcyA9IG5ld1ZhbHVlLmZpbHRlcihuID0+IG4gaW5zdGFuY2VvZiBOb2RlKTtcclxuICAgIGlmIChub2Rlcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzWzBdLCBhZGRJbmZvID0gbm9kZS5hZGRJbmZvIGFzIGFueTtcclxuICAgICAgaWYgKCFhZGRJbmZvIHx8ICFhZGRJbmZvWydub2RlVHlwZSddKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgaWYgKG5vZGUuYW5ub3RhdGlvbnMubGVuZ3RoICYmIG5vZGUuYW5ub3RhdGlvbnNbMF0uc3R5bGUpXHJcbiAgICAgICAgdGhpcy5mb250U2l6ZSA9IG5vZGUuYW5ub3RhdGlvbnNbMF0uc3R5bGUuZm9udFNpemU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoV29ya2Zsb3dOb2RlQ29tcG9uZW50LCB7XHJcbiAgICAgIHN0YXRlOiB7XHJcbiAgICAgICAgZGlhZ3JhbTogdGhpcy5kaWFncmFtLFxyXG4gICAgICAgIG5vZGVzLFxyXG4gICAgICAgIGNvbm5lY3RvcnNcclxuICAgICAgfSxcclxuICAgICAgcG9saWN5OiBPcGVuUG9saWN5LlRhYiAvKiYgfk9wZW5Qb2xpY3kuRXhwYW5kYWJsZSovLFxyXG4gICAgICBncm91cDogJydcclxuICAgIH0pLnRoZW4ocCA9PiB7XHJcbiAgICAgIHAuaW5zdGFuY2UuY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX25vZGVkZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hhbmdlKCkpO1xyXG4gICAgICB0aGlzLl9ub2RlZGVzdHJveS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiBwLmNsb3NlKCkpXHJcbiAgICB9KTtcclxuICB9XHJcbiAgYWxpZ24odmFsdWU6IEFsaWdubWVudE9wdGlvbnMpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2gobiA9PiB7XHJcbiAgICAgIG4uYW5ub3RhdGlvbnMubGVuZ3RoICYmIE9iamVjdC5hc3NpZ24obi5hbm5vdGF0aW9uc1swXSwge1xyXG4gICAgICAgIG9mZnNldDoge1xyXG4gICAgICAgICAgeDogdmFsdWUgPT09ICdSaWdodCcgPyAxIDogdmFsdWUgPT09ICdMZWZ0JyA/IDAgOiAuNSxcclxuICAgICAgICAgIHk6IHZhbHVlID09PSAnVG9wJyA/IDAgOiB2YWx1ZSA9PT0gJ0JvdHRvbScgPyAxIDogLjVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiB2YWx1ZSA9PT0gJ1RvcCcgPyAnQm90dG9tJyA6IHZhbHVlID09PSAnQm90dG9tJyA/ICdUb3AnIDogJ0NlbnRlcicsXHJcbiAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogdmFsdWUgPT09ICdSaWdodCcgPyAnTGVmdCcgOiB2YWx1ZSA9PT0gJ0xlZnQnID8gJ1JpZ2h0JyA6ICdDZW50ZXInXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5jb25uZWN0b3JzLmZvckVhY2goYyA9PlxyXG4gICAgICBjLmFubm90YXRpb25zLmZvckVhY2goYSA9PiBPYmplY3QuYXNzaWduKGEsIHtcclxuICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogdmFsdWUgPT09ICdUb3AnID8gJ0JvdHRvbScgOiB2YWx1ZSA9PT0gJ0JvdHRvbScgPyAnVG9wJyA6ICdDZW50ZXInLFxyXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6IHZhbHVlID09PSAnTGVmdCcgPyAnTGVmdCcgOiB2YWx1ZSA9PT0gJ1JpZ2h0JyA/ICdSaWdodCcgOiAnQ2VudGVyJyxcclxuICAgICAgICAvLyAgZGlzcGxhY2VtZW50OiB7XHJcbiAgICAgICAgLy8gICAgeDogdmFsdWUgPT09ICdSaWdodCcgPyAxMCA6IHZhbHVlID09PSAnTGVmdCcgPyAtMTAgOiAwLFxyXG4gICAgICAgIC8vICAgIHk6IHZhbHVlID09PSAnVG9wJyA/IC0xMCA6IHZhbHVlID09PSAnQm90dG9tJyA/IDEwIDogMFxyXG4gICAgICAgIC8vICB9XHJcbiAgICAgIH0pKVxyXG4gICAgKTtcclxuICAgIHRoaXMuYWxpZ25tZW50ID0gdmFsdWU7XHJcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICB9XHJcbiAgcHVibGljIGRyYWdFbnRlcihhcmdzOiBJRHJhZ0VudGVyRXZlbnRBcmdzKTogdm9pZCB7XHJcbiAgICBpZiAoYXJncy5lbGVtZW50IGluc3RhbmNlb2YgTm9kZSkge1xyXG4gICAgICBzd2l0Y2ggKGFyZ3MuZWxlbWVudC5zaGFwZS50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnU3dpbUxhbmUnOlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IGFyZ3MuZWxlbWVudC5zaGFwZSBhcyBTd2ltTGFuZU1vZGVsO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHNoYXBlLm9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnSG9yaXpvbnRhbCc6XHJcbiAgICAgICAgICAgICAgICBzaGFwZS5sYW5lc1swXS53aWR0aCA9IDQwMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJ1ZlcnRpY2FsJzpcclxuICAgICAgICAgICAgICAgIHNoYXBlLmxhbmVzWzBdLmhlaWdodCA9IDQwMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ1RleHQnOlxyXG4gICAgICAgICAgLy8oYXJncy5lbGVtZW50LnN0eWxlIGFzIFRleHRTdHlsZU1vZGVsKS5mb250U2l6ZSA9IDIwO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBhcmdzLmVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGFyZ3MuZWxlbWVudC53aWR0aCA9IDEwMDtcclxuICAgICAgICAgICAgYXJncy5lbGVtZW50LmhlaWdodCAqPSAxMDAgLyB3aWR0aDtcclxuICAgICAgICAgICAgYXJncy5lbGVtZW50Lm9mZnNldFggKz0gKGFyZ3MuZWxlbWVudC53aWR0aCAtIHdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgIGFyZ3MuZWxlbWVudC5vZmZzZXRZICs9IChhcmdzLmVsZW1lbnQuaGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XHJcbiAgICAgICAgICAgIGFyZ3MuZWxlbWVudC5zdHlsZSA9IHtcclxuICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxyXG4gICAgICAgICAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJyxcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByb3BlcnR5Q2hhbmdlKGUpIHtcclxuICAgIGlmIChlLmNhdXNlICE9PSAyKSB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICB9XHJcbiAgY2hhbmdlKCkge1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNvbGxlY3Rpb25DaGFuZ2UoKSB7XHJcbiAgICB0aGlzLl9yb3V0ZXIuY29sbGFwc2UoKTtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDdHJsLXMgc2F2ZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRpcnR5ICYmIGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LmtleSA9PT0gJ3MnIHx8IGV2ZW50LmtleSA9PT0gJ1MnKSkge1xyXG4gICAgICB0aGlzLnNhdmUoKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgYmdDaGFuZ2UodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2gobiA9PiBuLnN0eWxlLmZpbGwgPSB2YWwpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNvbG9yQ2hhbmdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlcy5mb3JFYWNoKG4gPT4gbi5hbm5vdGF0aW9ucy5mb3JFYWNoKGEgPT4gYS5zdHlsZS5jb2xvciA9IHZhbCkpO1xyXG4gICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMuY29ubmVjdG9ycy5mb3JFYWNoKGMgPT4gYy5hbm5vdGF0aW9ucy5mb3JFYWNoKGEgPT4gYS5zdHlsZS5jb2xvciA9IHZhbCkpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNvbm5lY3RvclR5cGVDaGFuZ2UodHlwZTogU2VnbWVudHMpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbm5lY3RvcnMuZm9yRWFjaChjID0+IGMudHlwZSA9IHR5cGUpO1xyXG4gICAgdGhpcy5jb25uZWN0b3JUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICBib2xkQ2hhbmdlKCkge1xyXG4gICAgY29uc3QgdmFsID0gIXRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzWzBdLmFubm90YXRpb25zWzBdPy5zdHlsZT8uYm9sZDtcclxuICAgIGZ1bmN0aW9uIGNoYW5nZShub2RlOiAoTm9kZU1vZGVsIHwgQ29ubmVjdG9yTW9kZWwpKSB7XHJcbiAgICAgIGlmIChub2RlLnNoYXBlLnR5cGUgPT09ICdUZXh0JylcclxuICAgICAgICAobm9kZS5zdHlsZSBhcyBUZXh0U3R5bGVNb2RlbCkuYm9sZCA9IHZhbDtcclxuICAgICAgZWxzZSBub2RlLmFubm90YXRpb25zLmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgaWYgKCFhLnN0eWxlKVxyXG4gICAgICAgICAgYS5zdHlsZSA9IHsgYm9sZDogdmFsIH07XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgYS5zdHlsZS5ib2xkID0gdmFsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2goY2hhbmdlKTtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbm5lY3RvcnMuZm9yRWFjaChjaGFuZ2UpO1xyXG4gICAgdGhpcy5kaWFncmFtLmRhdGFCaW5kKCk7XHJcbiAgfVxyXG4gIGl0YWxpY0NoYW5nZSgpIHtcclxuICAgIGNvbnN0IHZhbCA9ICF0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlc1swXS5hbm5vdGF0aW9uc1swXT8uc3R5bGU/Lml0YWxpYztcclxuICAgIGZ1bmN0aW9uIGNoYW5nZShub2RlOiAoTm9kZU1vZGVsIHwgQ29ubmVjdG9yTW9kZWwpKSB7XHJcbiAgICAgIGlmIChub2RlLnNoYXBlLnR5cGUgPT09ICdUZXh0JylcclxuICAgICAgICAobm9kZS5zdHlsZSBhcyBUZXh0U3R5bGVNb2RlbCkuaXRhbGljID0gdmFsO1xyXG4gICAgICBlbHNlIG5vZGUuYW5ub3RhdGlvbnMuZm9yRWFjaChhID0+IHtcclxuICAgICAgICBpZiAoIWEuc3R5bGUpXHJcbiAgICAgICAgICBhLnN0eWxlID0geyBpdGFsaWM6IHZhbCB9O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGEuc3R5bGUuaXRhbGljID0gdmFsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2goY2hhbmdlKTtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbm5lY3RvcnMuZm9yRWFjaChjaGFuZ2UpO1xyXG4gICAgdGhpcy5kaWFncmFtLmRhdGFCaW5kKCk7XHJcbiAgfVxyXG4gIGZvbnRTaXplQ2hhbmdlKHZhbDogbnVtYmVyKSB7XHJcbiAgICBmdW5jdGlvbiBjaGFuZ2Uobm9kZTogKE5vZGVNb2RlbCB8IENvbm5lY3Rvck1vZGVsKSkge1xyXG4gICAgICBpZiAobm9kZS5zaGFwZS50eXBlID09PSAnVGV4dCcpXHJcbiAgICAgICAgKG5vZGUuc3R5bGUgYXMgVGV4dFN0eWxlTW9kZWwpLmZvbnRTaXplID0gdmFsO1xyXG4gICAgICBlbHNlIChub2RlIGFzIE5vZGVNb2RlbCkuYW5ub3RhdGlvbnM/LmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgaWYgKCFhLnN0eWxlKVxyXG4gICAgICAgICAgYS5zdHlsZSA9IHsgZm9udFNpemU6IHZhbCB9O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGEuc3R5bGUuZm9udFNpemUgPSB2YWw7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMubm9kZXMuZm9yRWFjaChjaGFuZ2UpO1xyXG4gICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMuY29ubmVjdG9ycy5mb3JFYWNoKGNoYW5nZSk7XHJcbiAgICB0aGlzLmRpYWdyYW0uZGF0YUJpbmQoKTtcclxuICB9XHJcbiAgc3Ryb2tlQ2hhbmdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5jb25uZWN0b3JzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgIGMuc3R5bGUuc3Ryb2tlQ29sb3IgPSB2YWw7XHJcbiAgICAgIGlmIChjLmFubm90YXRpb25zKSBjLmFubm90YXRpb25zWzBdLnN0eWxlLmNvbG9yID0gdmFsO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlcy5mb3JFYWNoKG4gPT4gbi5zdHlsZS5zdHJva2VDb2xvciA9IHZhbCk7XHJcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICB9XHJcbiAgc2F2ZSgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdGhpcy5kaWFncmFtLnNlcmlhbGl6YXRpb25TZXR0aW5ncyA9IHsgcHJldmVudERlZmF1bHRzOiB0cnVlIH07XHJcbiAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKHRoaXMuZGlhZ3JhbS5zYXZlRGlhZ3JhbSgpKSBhcyBEaWFncmFtTW9kZWw7XHJcbiAgICB0aGlzLl9mb3JtLndvcmtmbG93LmNvbm5lY3RvcnMgPSBvYmouY29ubmVjdG9ycztcclxuICAgIHRoaXMuX2Zvcm0ud29ya2Zsb3cubm9kZXMgPSBvYmoubm9kZXMuZmlsdGVyKG4gPT4gbi5pZCAhPT0gJ3ZlcnNpb24nKTtcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLl9zZXJ2aWNlLnNhdmUodGhpcy5fZm9ybSkpLnRoZW4odiA9PiB7XHJcbiAgICAgIHRoaXMuX3BzLnRvYXN0KCdDaGFuZ2VzU2F2ZWQnKTtcclxuICAgICAgaWYgKHRoaXMuX2Zvcm0ud29ya2Zsb3cudmVyc2lvbiA8IHYpIHtcclxuICAgICAgICB0aGlzLl9wcy50b2FzdCgnRGlhZ3JhbVZlcnNpb24nLCB2KTtcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5kaWFncmFtLmdldE5vZGVPYmplY3QoJ3ZlcnNpb24nKTtcclxuICAgICAgICAobm9kZS5zaGFwZSBhcyBUZXh0TW9kZWwpLmNvbnRlbnQgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEaWFncmFtVmVyc2lvbicsIHYpO1xyXG4gICAgICAgIHRoaXMuZGlhZ3JhbS5kYXRhQmluZCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2Zvcm0ud29ya2Zsb3cudmVyc2lvbiA9IHY7XHJcbiAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgdGhpcy5fcHMuZXJyb3IoKTtcclxuICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3ltYm9sUGFsZXR0ZT8uZGVzdHJveSgpO1xyXG4gICAgdGhpcy5kaWFncmFtPy5kZXN0cm95KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcclxuICAgIHRoaXMuX25vZGVkZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX25vZGVkZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtdG9vbGJhcj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvb2xzID0gIXRvb2xzXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0NvbGxhcHNlJyB8IHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj52aWV3X3NpZGViYXI8L21hdC1pY29uPjwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIGNvbG9yPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCIhZGlydHkgfHwgc2F2aW5nXCI+e3snU2F2ZUNoYW5nZXMnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRpYWdyYW0uZml0VG9QYWdlKClcIiBbYml6ZG9jVG9vbHRpcF09XCInRml0VG9QYWdlJyB8IHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5mdWxsc2NyZWVuX2V4aXQ8L21hdC1pY29uPjwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicGFuKClcIiBbYml6ZG9jVG9vbHRpcF09XCInUGFuJyB8IHRyYW5zbGF0ZVwiPjxzcGFuIGNsYXNzPVwiZS1pY29ucyBzZi1pY29uLXBhblwiPjwvc3Bhbj48L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImN1cnNvcigpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0N1cnNvcicgfCB0cmFuc2xhdGVcIj48c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1jdXJzb3JcIj48L3NwYW4+PC9idXR0b24+XG4gIDxzcGFuIGNsYXNzPVwidG9vbHMtZGl2aWRlclwiPjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRpYWdyYW0udW5kbygpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1VuZG8nIHwgdHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cIiFkaWFncmFtLmhpc3RvcnlNYW5hZ2VyPy5jYW5VbmRvXCI+PG1hdC1pY29uPnVuZG88L21hdC1pY29uPjwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZGlhZ3JhbS5yZWRvKClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVkbycgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiIWRpYWdyYW0uaGlzdG9yeU1hbmFnZXI/LmNhblJlZG9cIj48bWF0LWljb24+cmVkbzwvbWF0LWljb24+PC9idXR0b24+XG4gIDxzcGFuIGNsYXNzPVwidG9vbHMtZGl2aWRlclwiPjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRpYWdyYW0uY29weSgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0NvcHknIHwgdHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cImRpYWdyYW0uc2VsZWN0ZWRJdGVtcz8uY29ubmVjdG9ycy5sZW5ndGggPT09IDAgJiYgZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5ub2Rlcy5sZW5ndGggPT09IDBcIj48bWF0LWljb24+Y29weTwvbWF0LWljb24+PC9idXR0b24+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkaWFncmFtLnBhc3RlKClcIiBbYml6ZG9jVG9vbHRpcF09XCInUGFzdGUnIHwgdHJhbnNsYXRlXCI+PG1hdC1pY29uPnBhc3RlPC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRpYWdyYW0ucmVtb3ZlKClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVtb3ZlJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCJkaWFncmFtLnNlbGVjdGVkSXRlbXM/LmNvbm5lY3RvcnMubGVuZ3RoID09PSAwICYmIGRpYWdyYW0uc2VsZWN0ZWRJdGVtcz8ubm9kZXMubGVuZ3RoID09PSAwXCI+PG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+PC9idXR0b24+XG4gIDxzcGFuIGNsYXNzPVwidG9vbHMtZGl2aWRlclwiPjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJsaW5lTWVudVwiIFtkaXNhYmxlZF09XCJkaWFncmFtLnNlbGVjdGVkSXRlbXM/LmNvbm5lY3RvcnMubGVuZ3RoID09PSAwXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0Nvbm5lY3Rvck1vZGUnfHRyYW5zbGF0ZVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZS1tZW51LWljb25cIiBbbmdDbGFzc109XCJ7J3NmLWljb24tc3RyYWlnaHQtbGluZSc6IGNvbm5lY3RvclR5cGUgPT09ICdTdHJhaWdodCcsXHJcbiAgICAgICAgICAnc2YtaWNvbi1vcnRob2dvbmFsLWxpbmUnOiBjb25uZWN0b3JUeXBlID09PSAnT3J0aG9nb25hbCcsXHJcbiAgICAgICAgICAnc2YtaWNvbi1iZWl6ZXItbGluZSc6IGNvbm5lY3RvclR5cGUgPT09ICdCZXppZXInfVwiPjwvc3Bhbj5cclxuICAgIDxtYXQtaWNvbj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbiAgPG1hdC1tZW51ICNsaW5lTWVudSBvdmVybGF5UGFuZWxDbGFzcz1cImljb24tbWVudS1wYW5lbFwiPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY29ubmVjdG9yVHlwZUNoYW5nZSgnU3RyYWlnaHQnKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJlLW1lbnUtaWNvbiBzZi1pY29uLXN0cmFpZ2h0LWxpbmVcIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjb25uZWN0b3JUeXBlQ2hhbmdlKCdPcnRob2dvbmFsJylcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZS1tZW51LWljb24gc2YtaWNvbi1vcnRob2dvbmFsLWxpbmVcIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjb25uZWN0b3JUeXBlQ2hhbmdlKCdCZXppZXInKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJlLW1lbnUtaWNvbiBzZi1pY29uLWJlaXplci1saW5lXCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDwhLS08bmctY29udGFpbmVyICpuZ0lmPVwiY29ubmVjdG9ycy5sZW5ndGhcIj5cbiAgICA8IGJpemRvYy1jb2xvci1waWNrZXIgKHZhbHVlQ2hhbmdlcyk9J3N0cm9rZUNoYW5nZSgkZXZlbnQpJyBbbGFiZWxdPVwiJ1N0cm9rZSd8dHJhbnNsYXRlXCI+PC8gYml6ZG9jLWNvbG9yLXBpY2tlcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZXNbMF0uYW5ub3RhdGlvbnMubGVuZ3RoXCI+XG4gICAgICA8IGJpemRvYy1jb2xvci1waWNrZXIgKHZhbHVlQ2hhbmdlcyk9J2NvbG9yQ2hhbmdlKCRldmVudCknIFtsYWJlbF09XCInQ29sb3InfHRyYW5zbGF0ZVwiPjwvIGJpemRvYy1jb2xvci1waWNrZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPCBiaXpkb2MtY29sb3ItcGlja2VyICh2YWx1ZUNoYW5nZXMpPSdiZ0NoYW5nZSgkZXZlbnQpJyBbbGFiZWxdPVwiJ0JhY2tncm91bmQnfHRyYW5zbGF0ZVwiPjwvIGJpemRvYy1jb2xvci1waWNrZXI+XG4gICAgPCBiaXpkb2MtY29sb3ItcGlja2VyICh2YWx1ZUNoYW5nZXMpPSdzdHJva2VDaGFuZ2UoJGV2ZW50KScgW2xhYmVsXT1cIidTdHJva2UnfHRyYW5zbGF0ZVwiPjwvIGJpemRvYy1jb2xvci1waWNrZXI+XG4gIDwvbmctY29udGFpbmVyPi0tPlxuPC9tYXQtbWVudT5cbiZuYnNwO1xuPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJhbGlnbk1lbnVcIiBbZGlzYWJsZWRdPVwiZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5ub2Rlcy5sZW5ndGggPT09IDAgJiYgZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMFwiIFtiaXpkb2NUb29sdGlwXT1cIidBbGlnbid8dHJhbnNsYXRlXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJlLWljb25zXCIgW25nQ2xhc3NdPVwieydzZi1pY29uLXRvcCc6IGFsaWdubWVudCA9PT0gJ1RvcCcsXHJcbiAgICAgICAgICAnc2YtaWNvbi1sZWZ0JzogYWxpZ25tZW50ID09PSAnTGVmdCcsXHJcbiAgICAgICAgICAnc2YtaWNvbi1jZW50ZXInOiBhbGlnbm1lbnQgPT09ICdDZW50ZXInLFxyXG4gICAgICAgICAgJ3NmLWljb24tYm90dG9tJzogYWxpZ25tZW50ID09PSAnQm90dG9tJyxcclxuICAgICAgICAgICdzZi1pY29uLXJpZ2h0JzogYWxpZ25tZW50ID09PSAnUmlnaHQnfVwiPjwvc3Bhbj5cclxuICA8bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbjwvYnV0dG9uPlxuPG1hdC1tZW51ICNhbGlnbk1lbnUgb3ZlcmxheVBhbmVsQ2xhc3M9XCJpY29uLW1lbnUtcGFuZWxcIj5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhbGlnbignVG9wJylcIj5cbiAgICA8c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi10b3BcIj48L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFsaWduKCdMZWZ0JylcIj5cbiAgICA8c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1sZWZ0XCI+PC9zcGFuPlxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhbGlnbignQ2VudGVyJylcIj5cbiAgICA8c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1jZW50ZXJcIj48L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFsaWduKCdSaWdodCcpXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJlLWljb25zIHNmLWljb24tcmlnaHRcIj48L3NwYW4+XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFsaWduKCdCb3R0b20nKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZS1pY29ucyBzZi1pY29uLWJvdHRvbVwiPjwvc3Bhbj5cbiAgPC9idXR0b24+XG48L21hdC1tZW51PlxuPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImJvbGRDaGFuZ2UoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidCb2xkJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCJkaWFncmFtLnNlbGVjdGVkSXRlbXM/LmNvbm5lY3RvcnMubGVuZ3RoID09PSAwICYmIGRpYWdyYW0uc2VsZWN0ZWRJdGVtcz8ubm9kZXMubGVuZ3RoID09PSAwXCI+PG1hdC1pY29uPmZvcm1hdF9ib2xkPC9tYXQtaWNvbj48L2J1dHRvbj5cbjxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJpdGFsaWNDaGFuZ2UoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidJdGFsaWMnIHwgdHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cImRpYWdyYW0uc2VsZWN0ZWRJdGVtcz8uY29ubmVjdG9ycy5sZW5ndGggPT09IDAgJiYgZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5ub2Rlcy5sZW5ndGggPT09IDBcIj48bWF0LWljb24+Zm9ybWF0X2l0YWxpYzwvbWF0LWljb24+PC9idXR0b24+XG48YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwic2l6ZU1lbnVcIlxuICBbZGlzYWJsZWRdPVwiZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5ub2Rlcy5sZW5ndGggPT09IDAgJiYgZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMFwiXG4gIFtiaXpkb2NUb29sdGlwXT1cIidGb250U2l6ZSd8dHJhbnNsYXRlXCI+XG4gIDxtYXQtaWNvbj5mb3JtYXRfc2l6ZTwvbWF0LWljb24+XG48L2J1dHRvbj5cbjxtYXQtbWVudSAjc2l6ZU1lbnUgb3ZlcmxheVBhbmVsQ2xhc3M9XCJpY29uLW1lbnUtcGFuZWxcIj5cbiAgQGZvciAoc2l6ZSBvZiBmb250U2l6ZXM7IHRyYWNrIHNpemUpIHtcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImZvbnRTaXplQ2hhbmdlKHNpemUpXCI+XG4gICAgICB7e3NpemV9fVxuICAgIDwvYnV0dG9uPlxuICB9XG48L21hdC1tZW51PlxuPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyXCI+XG4gIDxkaXYgaWQ9XCJzeW1ib2xwYWxldHRlXCIgW3N0eWxlLmRpc3BsYXldPVwidG9vbHM/Jyc6J25vbmUnXCI+XG4gICAgPGRpdiBkaXI9XCJsdHJcIiAjc3ltYm9sUGFsZXR0ZUVsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAjZGlhZ3JhbUVsIGlkPVwiZGlhZ3JhbVwiIGNsYXNzPVwiZmxleFwiIGRpcj1cImx0clwiPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
586
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9mb3JtL3dvcmtmbG93L3dvcmtmbG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS93b3JrZmxvdy93b3JrZmxvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBYSxZQUFZLEVBQXFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUNMLGtCQUFrQixFQUFFLG1CQUFtQixFQUNaLGVBQWUsRUFDMUMsT0FBTyxFQUFhLFFBQVEsRUFDNUIsSUFBSSxFQUEwQixZQUFZLEVBQUUsb0JBQW9CLEVBQ2hFLGFBQWEsRUFBRSxZQUFZLEVBQzNCLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQWlCLGVBQWUsRUFBZSxjQUFjLEVBQ3RILE1BQU0sMEJBQTBCLENBQUM7QUFRbEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBRXpELE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3hFLGFBQWEsQ0FBQyxNQUFNLENBQUMsWUFB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RSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBMlp4QyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBmaXJzdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1xyXG4gIERpYWdyYW1Db25zdHJhaW50cywgU2VsZWN0b3JDb25zdHJhaW50cywgQ29ubmVjdG9yTW9kZWwsXHJcbiAgVGV4dE1vZGVsLCBQb2ludFBvcnRNb2RlbCwgTm9kZUNvbnN0cmFpbnRzLCBTY3JvbGxTZXR0aW5nc01vZGVsLFxyXG4gIERpYWdyYW0sIE5vZGVNb2RlbCwgVW5kb1JlZG8sIFN5bWJvbEluZm8sIElEcmFnRW50ZXJFdmVudEFyZ3MsIFNuYXBTZXR0aW5nc01vZGVsLCBNYXJnaW5Nb2RlbCxcclxuICBOb2RlLCBQYWxldHRlTW9kZWwsIFNlZ21lbnRzLCBEaWFncmFtVG9vbHMsIENvbm5lY3RvckNvbnN0cmFpbnRzLCBTZWxlY3Rvck1vZGVsLCBSdWxlclNldHRpbmdzTW9kZWwsIEFsaWdubWVudE9wdGlvbnMsIFRleHRTdHlsZU1vZGVsLFxyXG4gIFN5bWJvbFBhbGV0dGUsIEJwbW5EaWFncmFtcywgRGF0YUJpbmRpbmcsIElTZWxlY3Rpb25DaGFuZ2VFdmVudEFyZ3MsXHJcbiAgQ29ubmVjdG9yRWRpdGluZywgQ29ubmVjdG9yQnJpZGdpbmcsIFNuYXBwaW5nLCBDb25uZWN0b3IsIFN3aW1MYW5lTW9kZWwsIFBvcnRDb25zdHJhaW50cywgSGVhZGVyTW9kZWwsIFBvcnRWaXNpYmlsaXR5LCBTbmFwQ29uc3RyYWludHMsIFNoYXBlQW5ub3RhdGlvbk1vZGVsLCBQYXRoQW5ub3RhdGlvbk1vZGVsLCBEaWFncmFtTW9kZWxcclxufSBmcm9tICdAc3luY2Z1c2lvbi9lajItZGlhZ3JhbXMnO1xyXG5pbXBvcnQgeyBGb3JtIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZSB9IGZyb20gJy4uLy4uL3N5c3RlbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhbmVSZWYgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmJztcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Nsb3RzL3JvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkbWluQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWRtaW4tZGlzbWlzcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3BlblBvbGljeSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IE1BVEVSSUFMX1BBTEVUVEVTIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb2xvcnMnO1xyXG5cclxuRGlhZ3JhbS5JbmplY3QoVW5kb1JlZG8sIENvbm5lY3RvckJyaWRnaW5nLCBDb25uZWN0b3JFZGl0aW5nLCBTbmFwcGluZyk7XHJcblN5bWJvbFBhbGV0dGUuSW5qZWN0KEJwbW5EaWFncmFtcyk7XHJcblxyXG5jb25zdCBwb3J0czogUG9pbnRQb3J0TW9kZWxbXSA9IFtcclxuICB7IGlkOiAncG9ydDEnLCBzaGFwZTogJ0NpcmNsZScsIG9mZnNldDogeyB4OiAwLCB5OiAwLjUgfSwgdmlzaWJpbGl0eTogUG9ydFZpc2liaWxpdHkuQ29ubmVjdCB8IFBvcnRWaXNpYmlsaXR5LkhvdmVyLCBjb25zdHJhaW50czogUG9ydENvbnN0cmFpbnRzLkRlZmF1bHQgfCBQb3J0Q29uc3RyYWludHMuRHJhdyB9LFxyXG4gIHsgaWQ6ICdwb3J0MicsIHNoYXBlOiAnQ2lyY2xlJywgb2Zmc2V0OiB7IHg6IDAuNSwgeTogMSB9LCB2aXNpYmlsaXR5OiBQb3J0VmlzaWJpbGl0eS5Db25uZWN0IHwgUG9ydFZpc2liaWxpdHkuSG92ZXIsIGNvbnN0cmFpbnRzOiBQb3J0Q29uc3RyYWludHMuRGVmYXVsdCB8IFBvcnRDb25zdHJhaW50cy5EcmF3IH0sXHJcbiAgeyBpZDogJ3BvcnQzJywgc2hhcGU6ICdDaXJjbGUnLCBvZmZzZXQ6IHsgeDogMSwgeTogMC41IH0sIHZpc2liaWxpdHk6IFBvcnRWaXNpYmlsaXR5LkNvbm5lY3QgfCBQb3J0VmlzaWJpbGl0eS5Ib3ZlciwgY29uc3RyYWludHM6IFBvcnRDb25zdHJhaW50cy5EZWZhdWx0IHwgUG9ydENvbnN0cmFpbnRzLkRyYXcgfSxcclxuICB7IGlkOiAncG9ydDQnLCBzaGFwZTogJ0NpcmNsZScsIG9mZnNldDogeyB4OiAwLjUsIHk6IDAgfSwgdmlzaWJpbGl0eTogUG9ydFZpc2liaWxpdHkuQ29ubmVjdCB8IFBvcnRWaXNpYmlsaXR5LkhvdmVyLCBjb25zdHJhaW50czogUG9ydENvbnN0cmFpbnRzLkRlZmF1bHQgfCBQb3J0Q29uc3RyYWludHMuRHJhdyB9XHJcbl07XHJcblxyXG5mdW5jdGlvbiBzaG93UGFsZXR0ZUljb24oKTogdm9pZCB7XHJcbiAgY29uc3QgcGFsZXR0ZVNwYWNlOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWxldHRlLXNwYWNlJyk7XHJcbiAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKG1heC13aWR0aDo1NTBweCknKS5tYXRjaGVzO1xyXG4gIGlmIChpc01vYmlsZSkge1xyXG4gICAgaWYgKCFwYWxldHRlU3BhY2UuY2xhc3NMaXN0LmNvbnRhaW5zKCdzYi1tb2JpbGUtcGFsZXR0ZS1vcGVuJykpIHtcclxuICAgICAgcGFsZXR0ZVNwYWNlLmNsYXNzTGlzdC5hZGQoJ3NiLW1vYmlsZS1wYWxldHRlLW9wZW4nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbGV0dGVTcGFjZS5jbGFzc0xpc3QucmVtb3ZlKCdzYi1tb2JpbGUtcGFsZXR0ZS1vcGVuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYWxldHRlSWNvbkNsaWNrKCkge1xyXG4gIGNvbnN0IGlzTW9iaWxlID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6NTUwcHgpJykubWF0Y2hlcztcclxuICBpZiAoaXNNb2JpbGUpIHtcclxuICAgIGNvbnN0IHBhbGV0dGVJY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhbGV0dGUtaWNvbicpO1xyXG4gICAgaWYgKHBhbGV0dGVJY29uKSB7XHJcbiAgICAgIHBhbGV0dGVJY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd1BhbGV0dGVJY29uLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy13b3JrZmxvdycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtmbG93LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgIGNsYXNzOiAncGFuZSdcclxuICB9XHJcbn0pXHJcbi8qKiB3b3JrZmxvdyBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWRtaW5Db21wb25lbnQge1xyXG4gIHN5bWJvbFBhbGV0dGU6IFN5bWJvbFBhbGV0dGU7XHJcbiAgcmVhZG9ubHkgZm9udFNpemVzID0gWzksIDExLCAxMiwgMTMsIDE1LCAyMSwgMzEsIDQxXTtcclxuICBkaWFncmFtOiBEaWFncmFtO1xyXG4gIEBWaWV3Q2hpbGQoJ3N5bWJvbFBhbGV0dGVFbCcsIHsgc3RhdGljOiB0cnVlIH0pIHN5bWJvbFBhbGV0dGVFbDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdkaWFncmFtRWwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFncmFtRWw6IEVsZW1lbnRSZWY7XHJcbiAgcHJpdmF0ZSBfdG9vbHM6IGJvb2xlYW47XHJcbiAgZ2V0IHRvb2xzKCkgeyByZXR1cm4gdGhpcy5fdG9vbHM7IH1cclxuICBzZXQgdG9vbHModmFsOiBib29sZWFuKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnZGlhZ3JhbV90b29scycsIHZhbCA/ICcxJyA6ICcwJyk7XHJcbiAgICB0aGlzLl90b29scyA9IHZhbDtcclxuICB9XHJcbiAgY29ubmVjdG9yVHlwZTogU2VnbWVudHMgPSAnQmV6aWVyJztcclxuICBhbGlnbm1lbnQ6IEFsaWdubWVudE9wdGlvbnMgPSAnQ2VudGVyJztcclxuICBmb250U2l6ZSA9IDEyO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGVsZW1lbnQ/OiBhbnk7XHJcbiAgZGlydHkgPSBmYWxzZTtcclxuICBwYXJhbXM6IHt9O1xyXG4gIHJlYWRvbmx5IHBhbGV0dGVzOiBQYWxldHRlTW9kZWxbXSA9IFtdO1xyXG4gIGRpYWdyYW1Db25zdHJhaW50czogRGlhZ3JhbUNvbnN0cmFpbnRzID0gRGlhZ3JhbUNvbnN0cmFpbnRzLkRlZmF1bHQgfCBEaWFncmFtQ29uc3RyYWludHMuQnJpZGdpbmcgfCBEaWFncmFtQ29uc3RyYWludHMuVXNlckludGVyYWN0aW9uIHwgRGlhZ3JhbUNvbnN0cmFpbnRzLlpvb207XHJcbiAgLy9TeW1ib2xQYWxldHRlIFByb3BlcnRpZXNcclxuICByZWFkb25seSBzeW1ib2xNYXJnaW46IE1hcmdpbk1vZGVsID0geyBsZWZ0OiAxMCwgcmlnaHQ6IDEwLCB0b3A6IDEwLCBib3R0b206IDEwIH07XHJcbiAgcmVhZG9ubHkgc25hcFNldHRpbmdzOiBTbmFwU2V0dGluZ3NNb2RlbCA9IHtcclxuICAgIHNuYXBMaW5lQ29sb3I6IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KDEwMClcclxuICB9O1xyXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXM6IFNlbGVjdG9yTW9kZWwgPSB7XHJcbiAgICBjb25zdHJhaW50czogU2VsZWN0b3JDb25zdHJhaW50cy5BbGwgJiB+U2VsZWN0b3JDb25zdHJhaW50cy5Sb3RhdGUsXHJcbiAgfTtcclxuICByZWFkb25seSBzY3JvbGxTZXR0aW5nczogU2Nyb2xsU2V0dGluZ3NNb2RlbCA9IHtcclxuICAgIG1pblpvb206IC41LFxyXG4gICAgbWF4Wm9vbTogMi41LFxyXG4gIH07XHJcbiAgcmVhZG9ubHkgcnVsZXJTZXR0aW5nczogUnVsZXJTZXR0aW5nc01vZGVsID0ge1xyXG4gIH07XHJcbiAgcHJpdmF0ZSBfZm9ybTogRm9ybTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9ub2RlZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgLyoqIHdvcmtmbG93IGN0b3IgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3BzOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3BhbmU6IFBhbmVSZWY8V29ya2Zsb3dDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBQYW5lc1JvdXRlcixcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLl90b29scyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkaWFncmFtX3Rvb2xzJykgPT09ICcxJztcclxuXHJcbiAgICB0aGlzLl9wYWxldHRlcygpO1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zeW1ib2xQYWxldHRlID0gbmV3IFN5bWJvbFBhbGV0dGUoe1xyXG4gICAgICBleHBhbmRNb2RlOiAnTXVsdGlwbGUnLFxyXG4gICAgICBwYWxldHRlczogdGhpcy5wYWxldHRlcyxcclxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxyXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxyXG4gICAgICBlbmFibGVSdGw6IGZhbHNlLFxyXG4gICAgICBlbmFibGVBbmltYXRpb246IGZhbHNlLFxyXG4gICAgICBzeW1ib2xIZWlnaHQ6IDgwLFxyXG4gICAgICBzeW1ib2xXaWR0aDogODAsXHJcbiAgICAgIHN5bWJvbE1hcmdpbjogdGhpcy5zeW1ib2xNYXJnaW4sXHJcbiAgICAgIGdldFN5bWJvbEluZm86IHRoaXMuZ2V0U3ltYm9sSW5mby5iaW5kKHRoaXMpLFxyXG4gICAgICBnZXROb2RlRGVmYXVsdHM6IHRoaXMuZ2V0U3ltYm9sRGVmYXVsdHMuYmluZCh0aGlzKSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zeW1ib2xQYWxldHRlLmFwcGVuZFRvKHRoaXMuc3ltYm9sUGFsZXR0ZUVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5kaWFncmFtID0gbmV3IERpYWdyYW0oe1xyXG4gICAgICB3aWR0aDogXCIxMDAlXCIsIGhlaWdodDogXCIxMDAlXCIsXHJcbiAgICAgIHNuYXBTZXR0aW5nczogdGhpcy5zbmFwU2V0dGluZ3MsXHJcbiAgICAgIGdldENvbm5lY3RvckRlZmF1bHRzOiB0aGlzLmNvbm5EZWZhdWx0cy5iaW5kKHRoaXMpLFxyXG4gICAgICBjb25zdHJhaW50czogdGhpcy5kaWFncmFtQ29uc3RyYWludHMsXHJcbiAgICAgIGdldE5vZGVEZWZhdWx0czogdGhpcy5ub2RlRGVmYXVsdHMuYmluZCh0aGlzKSxcclxuICAgICAgc2Nyb2xsU2V0dGluZ3M6IHRoaXMuc2Nyb2xsU2V0dGluZ3MsXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcclxuICAgICAgcnVsZXJTZXR0aW5nczogdGhpcy5ydWxlclNldHRpbmdzLFxyXG4gICAgICBkcmFnRW50ZXI6IHRoaXMuZHJhZ0VudGVyLmJpbmQodGhpcyksXHJcbiAgICAgIGNvbm5lY3Rpb25DaGFuZ2U6IHRoaXMuY2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIGNvbGxlY3Rpb25DaGFuZ2U6IHRoaXMuY29sbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpLFxyXG4gICAgICBwcm9wZXJ0eUNoYW5nZTogdGhpcy5wcm9wZXJ0eUNoYW5nZS5iaW5kKHRoaXMpLFxyXG4gICAgICBzZWxlY3Rpb25DaGFuZ2U6IHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICB9LCB0aGlzLmRpYWdyYW1FbC5uYXRpdmVFbGVtZW50KTtcclxuICAgIHBhbGV0dGVJY29uQ2xpY2soKTtcclxuICAgIHRoaXMuX3BhbmUucGFyYW1zQ2hhbmdlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShwID0+IHtcclxuICAgICAgY29uc3QgaWQgPSBwWydpZCddO1xyXG4gICAgICB0aGlzLl9mb3JtID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmZvcm1zLmZpbmQoZiA9PiBmLm5hbWUgPT09IGlkKTtcclxuICAgICAgdGhpcy5fcGFuZS50aXRsZSA9IHRoaXMuX2Zvcm0udGl0bGU7XHJcbiAgICAgIHRoaXMucGFyYW1zID0geyBpZDogdGhpcy5fZm9ybS5uYW1lIH07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3BhbmUuZGF0YUNoYW5nZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5zdWJzY3JpYmUoZCA9PiB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fZm9ybSwgZC5mb3JtKTtcclxuICAgICAgY29uc3QgZmxvdyA9IHRoaXMuX2Zvcm0ud29ya2Zsb3c7XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5ub2RlcyA9IGZsb3cubm9kZXM7XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5jb25uZWN0b3JzID0gZmxvdy5jb25uZWN0b3JzO1xyXG4gICAgICB0aGlzLmRpYWdyYW0uZGF0YUJpbmQoKTtcclxuICAgICAgdGhpcy5kaWFncmFtLmFkZCh0aGlzLl92ZXJzaW9uTm9kZShmbG93LnZlcnNpb24pKTtcclxuICAgICAgdGhpcy5kaWFncmFtLmZpdFRvUGFnZSgpO1xyXG4gICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfcGFsZXR0ZXMoKSB7XHJcbiAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUubm9kZXMuZm9yRWFjaChuID0+IHtcclxuICAgICAgY29uc3Qgbm9kZTogTm9kZU1vZGVsID0ge1xyXG4gICAgICAgIGlkOiBuLm5hbWUsXHJcbiAgICAgICAgc2hhcGU6IG4uc2hhcGUsXHJcbiAgICAgICAgYWRkSW5mbzoge1xyXG4gICAgICAgICAgbm9kZVR5cGU6IG4ubmFtZSxcclxuICAgICAgICAgIHRpdGxlOiBuLnRpdGxlXHJcbiAgICAgICAgfSxcclxuICAgICAgICB3aWR0aDogMTQ1LFxyXG4gICAgICAgIGhlaWdodDogMTQ1LFxyXG4gICAgICB9O1xyXG4gICAgICAobm9kZSBhcyBhbnkpLm5vZGUgPSBuLm5hbWU7XHJcbiAgICAgIGxldCBwYWxldHRlID0gdGhpcy5wYWxldHRlcy5maW5kKHAgPT4gcC50aXRsZSA9PT0gKG4ucGFsZXR0ZSB8fCAnJykpO1xyXG4gICAgICBpZiAoIXBhbGV0dGUpIHtcclxuICAgICAgICBwYWxldHRlID0geyBpZDogYF8ke24ucGFsZXR0ZX1gLCBleHBhbmRlZDogdHJ1ZSwgdGl0bGU6IG4ucGFsZXR0ZSB8fCAnJywgc3ltYm9sczogW10gfTtcclxuICAgICAgICB0aGlzLnBhbGV0dGVzLnB1c2gocGFsZXR0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgcGFsZXR0ZS5zeW1ib2xzLnB1c2gobm9kZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMucGFsZXR0ZXMucHVzaCh7XHJcbiAgICAgIGlkOiAnZGVzaWduJyxcclxuICAgICAgdGl0bGU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0Rlc2lnbicpLFxyXG4gICAgICBzeW1ib2xzOiBbe1xyXG4gICAgICAgIGlkOiAnTGluazIyJyxcclxuICAgICAgICB0eXBlOiAnU3RyYWlnaHQnLFxyXG4gICAgICAgIHNvdXJjZVBvaW50OiB7IHg6IDAsIHk6IDAgfSxcclxuICAgICAgICB0YXJnZXRQb2ludDogeyB4OiA2MCwgeTogNjAgfSxcclxuICAgICAgICB0YXJnZXREZWNvcmF0b3I6IHtcclxuICAgICAgICAgIHNoYXBlOiAnQXJyb3cnLFxyXG4gICAgICAgICAgc3R5bGU6IHsgc3Ryb2tlQ29sb3I6ICcjNzU3NTc1JywgZmlsbDogJyM3NTc1NzUnIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6ICc0IDQnLFxyXG4gICAgICAgICAgc3Ryb2tlQ29sb3I6ICcjNzU3NTc1JyxcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBpZDogJ3RleHQnLCBzaGFwZTogeyB0eXBlOiAnVGV4dCcsIGNvbnRlbnQ6ICdUJyB9LFxyXG4gICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb25zdHJhaW50czogTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQgJiB+Tm9kZUNvbnN0cmFpbnRzLkluQ29ubmVjdCAmIH5Ob2RlQ29uc3RyYWludHMuT3V0Q29ubmVjdCxcclxuICAgICAgICBhZGRJbmZvOiB7IHRpdGxlOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdUZXh0JykgfVxyXG4gICAgICB9XVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBjb2xvciA9IE1BVEVSSUFMX1BBTEVUVEVTWydncmV5J11bMjAwXTtcclxuICAgIHRoaXMucGFsZXR0ZXMucHVzaCh7XHJcbiAgICAgIGlkOiAnc3dpbWxhbmVTaGFwZXMnLFxyXG4gICAgICBleHBhbmRlZDogdHJ1ZSxcclxuICAgICAgdGl0bGU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1N3aW1sYW5lIFNoYXBlcycpLFxyXG4gICAgICBzeW1ib2xzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWQ6ICdzd2ltbGFuZScsXHJcbiAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdIb3Jpem9udGFsJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uOiB7IGNvbnRlbnQ6ICdQbGFuJyB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHR5cGU6ICdTd2ltTGFuZScsXHJcbiAgICAgICAgICAgIGxhbmVzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWQ6ICdsYW5lMScsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbjogeyBjb250ZW50OiAnTGFuZScgfSxcclxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgZmlsbDogY29sb3IgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgb3JpZW50YXRpb246ICdIb3Jpem9udGFsJyxcclxuICAgICAgICAgICAgaXNMYW5lOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaGVpZ2h0OiA2MCxcclxuICAgICAgICAgIHdpZHRoOiAxNDAsXHJcbiAgICAgICAgICBvZmZzZXRYOiA3MCxcclxuICAgICAgICAgIG9mZnNldFk6IDMwLFxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgIGlkOiAndnN3aW1sYW5lJyxcclxuICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1ZlcnRpY2FsJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnU3dpbUxhbmUnLFxyXG4gICAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgICBhbm5vdGF0aW9uOiB7IGNvbnRlbnQ6ICdQbGFuJyB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGxhbmVzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgaWQ6ICdsYW5lMScsXHJcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbjogeyBjb250ZW50OiAnTGFuZScgfSxcclxuICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgZmlsbDogY29sb3IgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgb3JpZW50YXRpb246ICdWZXJ0aWNhbCcsIGlzTGFuZTogdHJ1ZVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGhlaWdodDogMTQwLFxyXG4gICAgICAgICAgd2lkdGg6IDYwLFxyXG4gICAgICAgICAgb2Zmc2V0WDogNzAsXHJcbiAgICAgICAgICBvZmZzZXRZOiAzMCxcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICBpZDogJ3ZwaGFzZScsXHJcbiAgICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdQaGFzZScpXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc2hhcGU6IHtcclxuICAgICAgICAgICAgdHlwZTogJ1N3aW1MYW5lJyxcclxuICAgICAgICAgICAgcGhhc2VzOiBbXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHsgc3Ryb2tlV2lkdGg6IDEsIHN0cm9rZURhc2hBcnJheTogJzMsMycsIHN0cm9rZUNvbG9yOiBjb2xvciB9LFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyOiB7XHJcbiAgICAgICAgICAgICAgICAgIGFubm90YXRpb246IHsgdGV4dDogJ1BoYXNlJyB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfV0sXHJcbiAgICAgICAgICAgIG9yaWVudGF0aW9uOiAnVmVydGljYWwnLCBpc1BoYXNlOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaGVpZ2h0OiA2MCxcclxuICAgICAgICAgIHdpZHRoOiAxNDAsXHJcbiAgICAgICAgICBzdHlsZTogeyBzdHJva2VDb2xvcjogY29sb3IgfVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgIGlkOiAnaHBoYXNlJyxcclxuICAgICAgICAgIGFkZEluZm86IHtcclxuICAgICAgICAgICAgdGl0bGU6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ1BoYXNlJylcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzaGFwZToge1xyXG4gICAgICAgICAgICB0eXBlOiAnU3dpbUxhbmUnLFxyXG4gICAgICAgICAgICBwaGFzZXM6IFt7XHJcbiAgICAgICAgICAgICAgc3R5bGU6IHsgc3Ryb2tlV2lkdGg6IDEsIHN0cm9rZURhc2hBcnJheTogJzMsMycsIHN0cm9rZUNvbG9yOiBjb2xvciB9LFxyXG4gICAgICAgICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgICAgICAgYW5ub3RhdGlvbjogeyB0ZXh0OiAnUGhhc2UnIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICBvcmllbnRhdGlvbjogJ0hvcml6b250YWwnLCBpc1BoYXNlOiB0cnVlXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgaGVpZ2h0OiA2MCxcclxuICAgICAgICAgIHdpZHRoOiAxNDAsXHJcbiAgICAgICAgICBzdHlsZTogeyBzdHJva2VDb2xvcjogY29sb3IgfVxyXG4gICAgICAgIH1dXHJcbiAgICB9IGFzIFBhbGV0dGVNb2RlbCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3ZlcnNpb25Ob2RlKHZlcnNpb246IG51bWJlcik6IE5vZGVNb2RlbCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogJ3ZlcnNpb24nLFxyXG4gICAgICBzaGFwZToge1xyXG4gICAgICAgIHR5cGU6ICdUZXh0JyxcclxuICAgICAgICBjb250ZW50OiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEaWFncmFtVmVyc2lvbicsIHZlcnNpb24gfHwgMClcclxuICAgICAgfSxcclxuICAgICAgb2Zmc2V0WTogNSxcclxuICAgICAgb2Zmc2V0WDogNSxcclxuICAgICAgc3R5bGU6IHtcclxuICAgICAgICBmb250U2l6ZTogNTAsXHJcbiAgICAgICAgY29sb3I6IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snLFxyXG4gICAgICAgIG9wYWNpdHk6IC4xXHJcbiAgICAgIH0gYXMgVGV4dFN0eWxlTW9kZWwsXHJcbiAgICAgIGNvbnN0cmFpbnRzOiBOb2RlQ29uc3RyYWludHMuUmVhZE9ubHksXHJcbiAgICAgIHpJbmRleDogLTFcclxuICAgIH07XHJcbiAgfVxyXG4gIG5vZGVEZWZhdWx0cyA9IChvYmo6IE5vZGVNb2RlbCk6IE5vZGVNb2RlbCA9PiB7XHJcbiAgICBzd2l0Y2ggKG9iai5zaGFwZS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ1N3aW1MYW5lJzpcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnVGV4dCc6XHJcbiAgICAgICAgaWYgKG9iai5pZCAhPT0gJ3ZlcnNpb24nKVxyXG4gICAgICAgICAgb2JqLmNvbnN0cmFpbnRzID0gTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQgJiB+Tm9kZUNvbnN0cmFpbnRzLkluQ29ubmVjdCAmIH5Ob2RlQ29uc3RyYWludHMuT3V0Q29ubmVjdDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBpZiAob2JqLmFkZEluZm8gJiYgb2JqLmFkZEluZm9bJ25vZGVUeXBlJ10pIHtcclxuICAgICAgICAgIG9iai5jb25zdHJhaW50cyA9IE5vZGVDb25zdHJhaW50cy5EZWZhdWx0IHwgTm9kZUNvbnN0cmFpbnRzLkFzcGVjdFJhdGlvO1xyXG4gICAgICAgICAgb2JqLnN0eWxlLnN0cm9rZUNvbG9yID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjayc7XHJcbiAgICAgICAgICBvYmoucG9ydHMgPSBwb3J0cztcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICBwdWJsaWMgY29ubkRlZmF1bHRzID0gKG9iajogQ29ubmVjdG9yTW9kZWwpID0+IHtcclxuICAgIG9iai5jb25zdHJhaW50cyA9IENvbm5lY3RvckNvbnN0cmFpbnRzLkRlZmF1bHQgfCBDb25uZWN0b3JDb25zdHJhaW50cy5CcmlkZ2luZztcclxuICAgIG9iai5zdHlsZS5zdHJva2VDb2xvciA9IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snO1xyXG4gICAgaWYgKCFvYmoudHlwZSkgb2JqLnR5cGUgPSB0aGlzLmNvbm5lY3RvclR5cGU7XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0U3ltYm9sSW5mbyhzeW1ib2w6IE5vZGVNb2RlbCk6IFN5bWJvbEluZm8ge1xyXG4gICAgcmV0dXJuIHN5bWJvbC5hZGRJbmZvID8ge1xyXG4gICAgICBmaXQ6IHRydWUsXHJcbiAgICAgIHRvb2x0aXA6IChzeW1ib2wuYWRkSW5mbyBhcyBhbnkpLnRpdGxlLFxyXG4gICAgICBkZXNjcmlwdGlvbjogeyB0ZXh0OiAoc3ltYm9sLmFkZEluZm8gYXMgYW55KS50aXRsZSwgb3ZlcmZsb3c6ICdXcmFwJywgd3JhcDogJ1dyYXBXaXRoT3ZlcmZsb3cnIH1cclxuICAgIH0gOiBudWxsO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0U3ltYm9sRGVmYXVsdHMoc3ltYm9sOiBOb2RlTW9kZWwpOiB2b2lkIHtcclxuICAgIHN5bWJvbC53aWR0aCA9IHN5bWJvbC5oZWlnaHQgPSA0MDtcclxuICB9XHJcbiAgcGFuKCkge1xyXG4gICAgdGhpcy5kaWFncmFtLmNvbnN0cmFpbnRzID0gdGhpcy5kaWFncmFtLmNvbnN0cmFpbnRzIHwgRGlhZ3JhbUNvbnN0cmFpbnRzLlBhbjtcclxuICAgIHRoaXMuZGlhZ3JhbS50b29sID0gRGlhZ3JhbVRvb2xzLlpvb21QYW47XHJcbiAgfVxyXG4gIGN1cnNvcigpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5jb25zdHJhaW50cyA9IHRoaXMuZGlhZ3JhbS5jb25zdHJhaW50cyAmIH5EaWFncmFtQ29uc3RyYWludHMuUGFuO1xyXG4gICAgdGhpcy5kaWFncmFtLnRvb2wgPSBEaWFncmFtVG9vbHMuRGVmYXVsdDtcclxuICB9XHJcbiAgc2VsZWN0aW9uQ2hhbmdlKGV2dDogSVNlbGVjdGlvbkNoYW5nZUV2ZW50QXJncykge1xyXG4gICAgY29uc3QgeyBuZXdWYWx1ZSwgc3RhdGUgfSA9IGV2dDtcclxuICAgIGlmIChzdGF0ZSAhPT0gJ0NoYW5naW5nJyB8fCAhbmV3VmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX25vZGVkZXN0cm95Lm5leHQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY29ubmVjdG9ycyA9IG5ld1ZhbHVlLmZpbHRlcihuID0+IG4gaW5zdGFuY2VvZiBDb25uZWN0b3IpLm1hcChuID0+IG4gYXMgQ29ubmVjdG9yTW9kZWwpO1xyXG4gICAgaWYgKGNvbm5lY3RvcnMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGNvbm5lY3RvciA9IGNvbm5lY3RvcnNbMF0sXHJcbiAgICAgICAgdHlwZSA9IGNvbm5lY3Rvci50eXBlO1xyXG4gICAgICB0aGlzLmNvbm5lY3RvclR5cGUgPSBjb25uZWN0b3JzLmxlbmd0aCA9PT0gMSB8fFxyXG4gICAgICAgIGNvbm5lY3RvcnMuZXZlcnkoYyA9PiBjLnR5cGUgPT09IHR5cGUpID8gdHlwZSA6IG51bGw7XHJcbiAgICAgIGlmIChjb25uZWN0b3IuYW5ub3RhdGlvbnMubGVuZ3RoICYmIGNvbm5lY3Rvci5hbm5vdGF0aW9uc1swXS5zdHlsZSlcclxuICAgICAgICB0aGlzLmZvbnRTaXplID0gY29ubmVjdG9yLmFubm90YXRpb25zWzBdLnN0eWxlLmZvbnRTaXplO1xyXG4gICAgICB0aGlzLmNvbm5lY3RvclR5cGUgPSBjb25uZWN0b3JzLmxlbmd0aCA9PT0gMSB8fFxyXG4gICAgICAgIGNvbm5lY3RvcnMuZXZlcnkoYyA9PiBjLnR5cGUgPT09IHR5cGUpID8gdHlwZSA6IG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBub2RlcyA9IG5ld1ZhbHVlLmZpbHRlcihuID0+IG4gaW5zdGFuY2VvZiBOb2RlKTtcclxuICAgIGlmIChub2Rlcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzWzBdLCBhZGRJbmZvID0gbm9kZS5hZGRJbmZvIGFzIGFueTtcclxuICAgICAgaWYgKCFhZGRJbmZvIHx8ICFhZGRJbmZvWydub2RlVHlwZSddKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgaWYgKG5vZGUuYW5ub3RhdGlvbnMubGVuZ3RoICYmIG5vZGUuYW5ub3RhdGlvbnNbMF0uc3R5bGUpXHJcbiAgICAgICAgdGhpcy5mb250U2l6ZSA9IG5vZGUuYW5ub3RhdGlvbnNbMF0uc3R5bGUuZm9udFNpemU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoV29ya2Zsb3dOb2RlQ29tcG9uZW50LCB7XHJcbiAgICAgIHN0YXRlOiB7XHJcbiAgICAgICAgZGlhZ3JhbTogdGhpcy5kaWFncmFtLFxyXG4gICAgICAgIG5vZGVzLFxyXG4gICAgICAgIGNvbm5lY3RvcnNcclxuICAgICAgfSxcclxuICAgICAgcG9saWN5OiBPcGVuUG9saWN5LlRhYiAvKiYgfk9wZW5Qb2xpY3kuRXhwYW5kYWJsZSovLFxyXG4gICAgICBncm91cDogJydcclxuICAgIH0pLnRoZW4ocCA9PiB7XHJcbiAgICAgIHAuaW5zdGFuY2UuY2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX25vZGVkZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hhbmdlKCkpO1xyXG4gICAgICB0aGlzLl9ub2RlZGVzdHJveS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiBwLmNsb3NlKCkpXHJcbiAgICB9KTtcclxuICB9XHJcbiAgYWxpZ24odmFsdWU6IEFsaWdubWVudE9wdGlvbnMpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2gobiA9PiB7XHJcbiAgICAgIG4uYW5ub3RhdGlvbnMubGVuZ3RoICYmIE9iamVjdC5hc3NpZ24obi5hbm5vdGF0aW9uc1swXSwge1xyXG4gICAgICAgIG9mZnNldDoge1xyXG4gICAgICAgICAgeDogdmFsdWUgPT09ICdSaWdodCcgPyAxIDogdmFsdWUgPT09ICdMZWZ0JyA/IDAgOiAuNSxcclxuICAgICAgICAgIHk6IHZhbHVlID09PSAnVG9wJyA/IDAgOiB2YWx1ZSA9PT0gJ0JvdHRvbScgPyAxIDogLjVcclxuICAgICAgICB9LFxyXG4gICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiB2YWx1ZSA9PT0gJ1RvcCcgPyAnQm90dG9tJyA6IHZhbHVlID09PSAnQm90dG9tJyA/ICdUb3AnIDogJ0NlbnRlcicsXHJcbiAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogdmFsdWUgPT09ICdSaWdodCcgPyAnTGVmdCcgOiB2YWx1ZSA9PT0gJ0xlZnQnID8gJ1JpZ2h0JyA6ICdDZW50ZXInXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5jb25uZWN0b3JzLmZvckVhY2goYyA9PlxyXG4gICAgICBjLmFubm90YXRpb25zLmZvckVhY2goYSA9PiBPYmplY3QuYXNzaWduKGEsIHtcclxuICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogdmFsdWUgPT09ICdUb3AnID8gJ0JvdHRvbScgOiB2YWx1ZSA9PT0gJ0JvdHRvbScgPyAnVG9wJyA6ICdDZW50ZXInLFxyXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6IHZhbHVlID09PSAnTGVmdCcgPyAnTGVmdCcgOiB2YWx1ZSA9PT0gJ1JpZ2h0JyA/ICdSaWdodCcgOiAnQ2VudGVyJyxcclxuICAgICAgICAvLyAgZGlzcGxhY2VtZW50OiB7XHJcbiAgICAgICAgLy8gICAgeDogdmFsdWUgPT09ICdSaWdodCcgPyAxMCA6IHZhbHVlID09PSAnTGVmdCcgPyAtMTAgOiAwLFxyXG4gICAgICAgIC8vICAgIHk6IHZhbHVlID09PSAnVG9wJyA/IC0xMCA6IHZhbHVlID09PSAnQm90dG9tJyA/IDEwIDogMFxyXG4gICAgICAgIC8vICB9XHJcbiAgICAgIH0pKVxyXG4gICAgKTtcclxuICAgIHRoaXMuYWxpZ25tZW50ID0gdmFsdWU7XHJcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICB9XHJcbiAgcHVibGljIGRyYWdFbnRlcihhcmdzOiBJRHJhZ0VudGVyRXZlbnRBcmdzKTogdm9pZCB7XHJcbiAgICBpZiAoYXJncy5lbGVtZW50IGluc3RhbmNlb2YgTm9kZSkge1xyXG4gICAgICBzd2l0Y2ggKGFyZ3MuZWxlbWVudC5zaGFwZS50eXBlKSB7XHJcbiAgICAgICAgY2FzZSAnU3dpbUxhbmUnOlxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IGFyZ3MuZWxlbWVudC5zaGFwZSBhcyBTd2ltTGFuZU1vZGVsO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHNoYXBlLm9yaWVudGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnSG9yaXpvbnRhbCc6XHJcbiAgICAgICAgICAgICAgICBzaGFwZS5sYW5lc1swXS53aWR0aCA9IDQwMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGNhc2UgJ1ZlcnRpY2FsJzpcclxuICAgICAgICAgICAgICAgIHNoYXBlLmxhbmVzWzBdLmhlaWdodCA9IDQwMDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIGNhc2UgJ1RleHQnOlxyXG4gICAgICAgICAgLy8oYXJncy5lbGVtZW50LnN0eWxlIGFzIFRleHRTdHlsZU1vZGVsKS5mb250U2l6ZSA9IDIwO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBhcmdzLmVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGFyZ3MuZWxlbWVudC53aWR0aCA9IDEwMDtcclxuICAgICAgICAgICAgYXJncy5lbGVtZW50LmhlaWdodCAqPSAxMDAgLyB3aWR0aDtcclxuICAgICAgICAgICAgYXJncy5lbGVtZW50Lm9mZnNldFggKz0gKGFyZ3MuZWxlbWVudC53aWR0aCAtIHdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgIGFyZ3MuZWxlbWVudC5vZmZzZXRZICs9IChhcmdzLmVsZW1lbnQuaGVpZ2h0IC0gaGVpZ2h0KSAvIDI7XHJcbiAgICAgICAgICAgIGFyZ3MuZWxlbWVudC5zdHlsZSA9IHtcclxuICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxyXG4gICAgICAgICAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJyxcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByb3BlcnR5Q2hhbmdlKGUpIHtcclxuICAgIGlmIChlLmNhdXNlICE9PSAyKSB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICB9XHJcbiAgY2hhbmdlKCkge1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNvbGxlY3Rpb25DaGFuZ2UoKSB7XHJcbiAgICB0aGlzLl9yb3V0ZXIuY29sbGFwc2UoKTtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDdHJsLXMgc2F2ZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRpcnR5ICYmIGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LmtleSA9PT0gJ3MnIHx8IGV2ZW50LmtleSA9PT0gJ1MnKSkge1xyXG4gICAgICB0aGlzLnNhdmUoKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgYmdDaGFuZ2UodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2gobiA9PiBuLnN0eWxlLmZpbGwgPSB2YWwpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNvbG9yQ2hhbmdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlcy5mb3JFYWNoKG4gPT4gbi5hbm5vdGF0aW9ucy5mb3JFYWNoKGEgPT4gYS5zdHlsZS5jb2xvciA9IHZhbCkpO1xyXG4gICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMuY29ubmVjdG9ycy5mb3JFYWNoKGMgPT4gYy5hbm5vdGF0aW9ucy5mb3JFYWNoKGEgPT4gYS5zdHlsZS5jb2xvciA9IHZhbCkpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNvbm5lY3RvclR5cGVDaGFuZ2UodHlwZTogU2VnbWVudHMpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbm5lY3RvcnMuZm9yRWFjaChjID0+IGMudHlwZSA9IHR5cGUpO1xyXG4gICAgdGhpcy5jb25uZWN0b3JUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICBib2xkQ2hhbmdlKCkge1xyXG4gICAgY29uc3QgdmFsID0gIXRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzWzBdLmFubm90YXRpb25zWzBdPy5zdHlsZT8uYm9sZDtcclxuICAgIGZ1bmN0aW9uIGNoYW5nZShub2RlOiAoTm9kZU1vZGVsIHwgQ29ubmVjdG9yTW9kZWwpKSB7XHJcbiAgICAgIGlmIChub2RlLnNoYXBlLnR5cGUgPT09ICdUZXh0JylcclxuICAgICAgICAobm9kZS5zdHlsZSBhcyBUZXh0U3R5bGVNb2RlbCkuYm9sZCA9IHZhbDtcclxuICAgICAgZWxzZSBub2RlLmFubm90YXRpb25zLmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgaWYgKCFhLnN0eWxlKVxyXG4gICAgICAgICAgYS5zdHlsZSA9IHsgYm9sZDogdmFsIH07XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgYS5zdHlsZS5ib2xkID0gdmFsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2goY2hhbmdlKTtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbm5lY3RvcnMuZm9yRWFjaChjaGFuZ2UpO1xyXG4gICAgdGhpcy5kaWFncmFtLmRhdGFCaW5kKCk7XHJcbiAgfVxyXG4gIGl0YWxpY0NoYW5nZSgpIHtcclxuICAgIGNvbnN0IHZhbCA9ICF0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlc1swXS5hbm5vdGF0aW9uc1swXT8uc3R5bGU/Lml0YWxpYztcclxuICAgIGZ1bmN0aW9uIGNoYW5nZShub2RlOiAoTm9kZU1vZGVsIHwgQ29ubmVjdG9yTW9kZWwpKSB7XHJcbiAgICAgIGlmIChub2RlLnNoYXBlLnR5cGUgPT09ICdUZXh0JylcclxuICAgICAgICAobm9kZS5zdHlsZSBhcyBUZXh0U3R5bGVNb2RlbCkuaXRhbGljID0gdmFsO1xyXG4gICAgICBlbHNlIG5vZGUuYW5ub3RhdGlvbnMuZm9yRWFjaChhID0+IHtcclxuICAgICAgICBpZiAoIWEuc3R5bGUpXHJcbiAgICAgICAgICBhLnN0eWxlID0geyBpdGFsaWM6IHZhbCB9O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGEuc3R5bGUuaXRhbGljID0gdmFsO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2goY2hhbmdlKTtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbm5lY3RvcnMuZm9yRWFjaChjaGFuZ2UpO1xyXG4gICAgdGhpcy5kaWFncmFtLmRhdGFCaW5kKCk7XHJcbiAgfVxyXG4gIGZvbnRTaXplQ2hhbmdlKHZhbDogbnVtYmVyKSB7XHJcbiAgICBmdW5jdGlvbiBjaGFuZ2Uobm9kZTogKE5vZGVNb2RlbCB8IENvbm5lY3Rvck1vZGVsKSkge1xyXG4gICAgICBpZiAobm9kZS5zaGFwZS50eXBlID09PSAnVGV4dCcpXHJcbiAgICAgICAgKG5vZGUuc3R5bGUgYXMgVGV4dFN0eWxlTW9kZWwpLmZvbnRTaXplID0gdmFsO1xyXG4gICAgICBlbHNlIChub2RlIGFzIE5vZGVNb2RlbCkuYW5ub3RhdGlvbnM/LmZvckVhY2goYSA9PiB7XHJcbiAgICAgICAgaWYgKCFhLnN0eWxlKVxyXG4gICAgICAgICAgYS5zdHlsZSA9IHsgZm9udFNpemU6IHZhbCB9O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGEuc3R5bGUuZm9udFNpemUgPSB2YWw7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMubm9kZXMuZm9yRWFjaChjaGFuZ2UpO1xyXG4gICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMuY29ubmVjdG9ycy5mb3JFYWNoKGNoYW5nZSk7XHJcbiAgICB0aGlzLmRpYWdyYW0uZGF0YUJpbmQoKTtcclxuICB9XHJcbiAgc3Ryb2tlQ2hhbmdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5jb25uZWN0b3JzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgIGMuc3R5bGUuc3Ryb2tlQ29sb3IgPSB2YWw7XHJcbiAgICAgIGlmIChjLmFubm90YXRpb25zKSBjLmFubm90YXRpb25zWzBdLnN0eWxlLmNvbG9yID0gdmFsO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlcy5mb3JFYWNoKG4gPT4gbi5zdHlsZS5zdHJva2VDb2xvciA9IHZhbCk7XHJcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICB9XHJcbiAgc2F2ZSgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgdGhpcy5kaWFncmFtLnNlcmlhbGl6YXRpb25TZXR0aW5ncyA9IHsgcHJldmVudERlZmF1bHRzOiB0cnVlIH07XHJcbiAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKHRoaXMuZGlhZ3JhbS5zYXZlRGlhZ3JhbSgpKSBhcyBEaWFncmFtTW9kZWw7XHJcbiAgICB0aGlzLl9mb3JtLndvcmtmbG93LmNvbm5lY3RvcnMgPSBvYmouY29ubmVjdG9ycztcclxuICAgIHRoaXMuX2Zvcm0ud29ya2Zsb3cubm9kZXMgPSBvYmoubm9kZXMuZmlsdGVyKG4gPT4gbi5pZCAhPT0gJ3ZlcnNpb24nKTtcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLl9zZXJ2aWNlLnNhdmUodGhpcy5fZm9ybSkpLnRoZW4odiA9PiB7XHJcbiAgICAgIHRoaXMuX3BzLnRvYXN0KCdDaGFuZ2VzU2F2ZWQnKTtcclxuICAgICAgaWYgKHRoaXMuX2Zvcm0ud29ya2Zsb3cudmVyc2lvbiA8IHYpIHtcclxuICAgICAgICB0aGlzLl9wcy50b2FzdCgnRGlhZ3JhbVZlcnNpb24nLCB2KTtcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5kaWFncmFtLmdldE5vZGVPYmplY3QoJ3ZlcnNpb24nKTtcclxuICAgICAgICAobm9kZS5zaGFwZSBhcyBUZXh0TW9kZWwpLmNvbnRlbnQgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KCdEaWFncmFtVmVyc2lvbicsIHYpO1xyXG4gICAgICAgIHRoaXMuZGlhZ3JhbS5kYXRhQmluZCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2Zvcm0ud29ya2Zsb3cudmVyc2lvbiA9IHY7XHJcbiAgICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgIH0sICgpID0+IHtcclxuICAgICAgdGhpcy5fcHMuZXJyb3IoKTtcclxuICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3ltYm9sUGFsZXR0ZT8uZGVzdHJveSgpO1xyXG4gICAgdGhpcy5kaWFncmFtPy5kZXN0cm95KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcclxuICAgIHRoaXMuX25vZGVkZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX25vZGVkZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtdG9vbGJhcj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRvb2xzID0gIXRvb2xzXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0NvbGxhcHNlJyB8IHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj52aWV3X3NpZGViYXI8L21hdC1pY29uPjwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIGNvbG9yPVwicHJpbWFyeVwiIFtkaXNhYmxlZF09XCIhZGlydHkgfHwgc2F2aW5nXCI+e3snU2F2ZUNoYW5nZXMnIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInBhbigpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1BhbicgfCB0cmFuc2xhdGVcIj48c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1wYW5cIj48L3NwYW4+PC9idXR0b24+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjdXJzb3IoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidDdXJzb3InIHwgdHJhbnNsYXRlXCI+PHNwYW4gY2xhc3M9XCJlLWljb25zIHNmLWljb24tY3Vyc29yXCI+PC9zcGFuPjwvYnV0dG9uPlxuICA8c3BhbiBjbGFzcz1cInRvb2xzLWRpdmlkZXJcIj48L3NwYW4+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkaWFncmFtLnVuZG8oKVwiIFtiaXpkb2NUb29sdGlwXT1cIidVbmRvJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCIhZGlhZ3JhbS5oaXN0b3J5TWFuYWdlcj8uY2FuVW5kb1wiPjxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRpYWdyYW0ucmVkbygpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1JlZG8nIHwgdHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cIiFkaWFncmFtLmhpc3RvcnlNYW5hZ2VyPy5jYW5SZWRvXCI+PG1hdC1pY29uPnJlZG88L21hdC1pY29uPjwvYnV0dG9uPlxuICA8c3BhbiBjbGFzcz1cInRvb2xzLWRpdmlkZXJcIj48L3NwYW4+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkaWFncmFtLmNvcHkoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidDb3B5JyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCJkaWFncmFtLnNlbGVjdGVkSXRlbXM/LmNvbm5lY3RvcnMubGVuZ3RoID09PSAwICYmIGRpYWdyYW0uc2VsZWN0ZWRJdGVtcz8ubm9kZXMubGVuZ3RoID09PSAwXCI+PG1hdC1pY29uPmNvcHk8L21hdC1pY29uPjwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZGlhZ3JhbS5wYXN0ZSgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1Bhc3RlJyB8IHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5wYXN0ZTwvbWF0LWljb24+PC9idXR0b24+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkaWFncmFtLnJlbW92ZSgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1JlbW92ZScgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMCAmJiBkaWFncmFtLnNlbGVjdGVkSXRlbXM/Lm5vZGVzLmxlbmd0aCA9PT0gMFwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxuICA8c3BhbiBjbGFzcz1cInRvb2xzLWRpdmlkZXJcIj48L3NwYW4+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibGluZU1lbnVcIiBbZGlzYWJsZWRdPVwiZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMFwiIFtiaXpkb2NUb29sdGlwXT1cIidDb25uZWN0b3JNb2RlJ3x0cmFuc2xhdGVcIj5cbiAgICA8c3BhbiBjbGFzcz1cImUtbWVudS1pY29uXCIgW25nQ2xhc3NdPVwieydzZi1pY29uLXN0cmFpZ2h0LWxpbmUnOiBjb25uZWN0b3JUeXBlID09PSAnU3RyYWlnaHQnLFxuICAgICAgICAgICdzZi1pY29uLW9ydGhvZ29uYWwtbGluZSc6IGNvbm5lY3RvclR5cGUgPT09ICdPcnRob2dvbmFsJyxcbiAgICAgICAgICAnc2YtaWNvbi1iZWl6ZXItbGluZSc6IGNvbm5lY3RvclR5cGUgPT09ICdCZXppZXInfVwiPjwvc3Bhbj5cbiAgICA8bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxtYXQtbWVudSAjbGluZU1lbnUgb3ZlcmxheVBhbmVsQ2xhc3M9XCJpY29uLW1lbnUtcGFuZWxcIj5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNvbm5lY3RvclR5cGVDaGFuZ2UoJ1N0cmFpZ2h0JylcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZS1tZW51LWljb24gc2YtaWNvbi1zdHJhaWdodC1saW5lXCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY29ubmVjdG9yVHlwZUNoYW5nZSgnT3J0aG9nb25hbCcpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImUtbWVudS1pY29uIHNmLWljb24tb3J0aG9nb25hbC1saW5lXCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY29ubmVjdG9yVHlwZUNoYW5nZSgnQmV6aWVyJylcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZS1tZW51LWljb24gc2YtaWNvbi1iZWl6ZXItbGluZVwiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8IS0tPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbm5lY3RvcnMubGVuZ3RoXCI+XG4gICAgICA8IGJpemRvYy1jb2xvci1waWNrZXIgKHZhbHVlQ2hhbmdlcyk9J3N0cm9rZUNoYW5nZSgkZXZlbnQpJyBbbGFiZWxdPVwiJ1N0cm9rZSd8dHJhbnNsYXRlXCI+PC8gYml6ZG9jLWNvbG9yLXBpY2tlcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2Rlc1swXS5hbm5vdGF0aW9ucy5sZW5ndGhcIj5cbiAgICAgICAgPCBiaXpkb2MtY29sb3ItcGlja2VyICh2YWx1ZUNoYW5nZXMpPSdjb2xvckNoYW5nZSgkZXZlbnQpJyBbbGFiZWxdPVwiJ0NvbG9yJ3x0cmFuc2xhdGVcIj48LyBiaXpkb2MtY29sb3ItcGlja2VyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8IGJpemRvYy1jb2xvci1waWNrZXIgKHZhbHVlQ2hhbmdlcyk9J2JnQ2hhbmdlKCRldmVudCknIFtsYWJlbF09XCInQmFja2dyb3VuZCd8dHJhbnNsYXRlXCI+PC8gYml6ZG9jLWNvbG9yLXBpY2tlcj5cbiAgICAgIDwgYml6ZG9jLWNvbG9yLXBpY2tlciAodmFsdWVDaGFuZ2VzKT0nc3Ryb2tlQ2hhbmdlKCRldmVudCknIFtsYWJlbF09XCInU3Ryb2tlJ3x0cmFuc2xhdGVcIj48LyBiaXpkb2MtY29sb3ItcGlja2VyPlxuICAgIDwvbmctY29udGFpbmVyPi0tPlxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZGlhZ3JhbS5maXRUb1BhZ2UoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidGaXRUb1BhZ2UnIHwgdHJhbnNsYXRlXCI+PG1hdC1pY29uPmZ1bGxzY3JlZW5fZXhpdDwvbWF0LWljb24+PC9idXR0b24+XG4gIDwvbWF0LW1lbnU+XG4gICZuYnNwO1xuICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImFsaWduTWVudVwiIFtkaXNhYmxlZF09XCJkaWFncmFtLnNlbGVjdGVkSXRlbXM/Lm5vZGVzLmxlbmd0aCA9PT0gMCAmJiBkaWFncmFtLnNlbGVjdGVkSXRlbXM/LmNvbm5lY3RvcnMubGVuZ3RoID09PSAwXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0FsaWduJ3x0cmFuc2xhdGVcIj5cbiAgICA8c3BhbiBjbGFzcz1cImUtaWNvbnNcIiBbbmdDbGFzc109XCJ7J3NmLWljb24tdG9wJzogYWxpZ25tZW50ID09PSAnVG9wJyxcbiAgICAgICAgICAnc2YtaWNvbi1sZWZ0JzogYWxpZ25tZW50ID09PSAnTGVmdCcsXG4gICAgICAgICAgJ3NmLWljb24tY2VudGVyJzogYWxpZ25tZW50ID09PSAnQ2VudGVyJyxcbiAgICAgICAgICAnc2YtaWNvbi1ib3R0b20nOiBhbGlnbm1lbnQgPT09ICdCb3R0b20nLFxuICAgICAgICAgICdzZi1pY29uLXJpZ2h0JzogYWxpZ25tZW50ID09PSAnUmlnaHQnfVwiPjwvc3Bhbj5cbiAgICA8bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgPC9idXR0b24+XG4gIDxtYXQtbWVudSAjYWxpZ25NZW51IG92ZXJsYXlQYW5lbENsYXNzPVwiaWNvbi1tZW51LXBhbmVsXCI+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhbGlnbignVG9wJylcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZS1pY29ucyBzZi1pY29uLXRvcFwiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFsaWduKCdMZWZ0JylcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZS1pY29ucyBzZi1pY29uLWxlZnRcIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhbGlnbignQ2VudGVyJylcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiZS1pY29ucyBzZi1pY29uLWNlbnRlclwiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFsaWduKCdSaWdodCcpXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1yaWdodFwiPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFsaWduKCdCb3R0b20nKVwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJlLWljb25zIHNmLWljb24tYm90dG9tXCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC1tZW51PlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYm9sZENoYW5nZSgpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0JvbGQnIHwgdHJhbnNsYXRlXCIgW2Rpc2FibGVkXT1cImRpYWdyYW0uc2VsZWN0ZWRJdGVtcz8uY29ubmVjdG9ycy5sZW5ndGggPT09IDAgJiYgZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5ub2Rlcy5sZW5ndGggPT09IDBcIj48bWF0LWljb24+Zm9ybWF0X2JvbGQ8L21hdC1pY29uPjwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiaXRhbGljQ2hhbmdlKClcIiBbYml6ZG9jVG9vbHRpcF09XCInSXRhbGljJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCJkaWFncmFtLnNlbGVjdGVkSXRlbXM/LmNvbm5lY3RvcnMubGVuZ3RoID09PSAwICYmIGRpYWdyYW0uc2VsZWN0ZWRJdGVtcz8ubm9kZXMubGVuZ3RoID09PSAwXCI+PG1hdC1pY29uPmZvcm1hdF9pdGFsaWM8L21hdC1pY29uPjwvYnV0dG9uPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwic2l6ZU1lbnVcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJkaWFncmFtLnNlbGVjdGVkSXRlbXM/Lm5vZGVzLmxlbmd0aCA9PT0gMCAmJiBkaWFncmFtLnNlbGVjdGVkSXRlbXM/LmNvbm5lY3RvcnMubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICBbYml6ZG9jVG9vbHRpcF09XCInRm9udFNpemUnfHRyYW5zbGF0ZVwiPlxuICAgIDxtYXQtaWNvbj5mb3JtYXRfc2l6ZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuICA8bWF0LW1lbnUgI3NpemVNZW51IG92ZXJsYXlQYW5lbENsYXNzPVwiaWNvbi1tZW51LXBhbmVsXCI+XG4gICAgQGZvciAoc2l6ZSBvZiBmb250U2l6ZXM7IHRyYWNrIHNpemUpIHtcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImZvbnRTaXplQ2hhbmdlKHNpemUpXCI+XG4gICAgICB7e3NpemV9fVxuICAgIDwvYnV0dG9uPlxuICAgIH1cbiAgPC9tYXQtbWVudT5cbiAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyXCI+XG4gIDxkaXYgaWQ9XCJzeW1ib2xwYWxldHRlXCIgW3N0eWxlLmRpc3BsYXldPVwidG9vbHM/Jyc6J25vbmUnXCI+XG4gICAgPGRpdiBkaXI9XCJsdHJcIiAjc3ltYm9sUGFsZXR0ZUVsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAjZGlhZ3JhbUVsIGlkPVwiZGlhZ3JhbVwiIGNsYXNzPVwiZmxleFwiIGRpcj1cImx0clwiPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19