ngx-histaff-alpha 3.6.8 → 3.7.0

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.
@@ -451,7 +451,7 @@ export class CoreOrgTreeComponent extends CoreFormControlBaseComponent {
451
451
  multi: true,
452
452
  useExisting: CoreOrgTreeComponent,
453
453
  },
454
- ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "displayContent", first: true, predicate: ["displayContent"], descendants: true }, { propertyName: "reducedIconWrapper", first: true, predicate: ["reducedIconWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow:auto;position:relative;width:100%}.core-org-tree-container .scroll-container::-webkit-scrollbar-corner{background-color:transparent}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
454
+ ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "displayContent", first: true, predicate: ["displayContent"], descendants: true }, { propertyName: "reducedIconWrapper", first: true, predicate: ["reducedIconWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"accessorMode != 'CHECKED' && selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow:auto;position:relative;width:100%}.core-org-tree-container .scroll-container::-webkit-scrollbar-corner{background-color:transparent}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
455
455
  }
456
456
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreOrgTreeComponent, decorators: [{
457
457
  type: Component,
@@ -469,7 +469,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
469
469
  multi: true,
470
470
  useExisting: CoreOrgTreeComponent,
471
471
  },
472
- ], template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow:auto;position:relative;width:100%}.core-org-tree-container .scroll-container::-webkit-scrollbar-corner{background-color:transparent}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"] }]
472
+ ], template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"accessorMode != 'CHECKED' && selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow:auto;position:relative;width:100%}.core-org-tree-container .scroll-container::-webkit-scrollbar-corner{background-color:transparent}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"] }]
473
473
  }], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.RecursiveService }, { type: i3.MultiLanguageService }, { type: i4.LayoutService }, { type: i5.CoreOrgTreeService }, { type: i6.AlertService }, { type: i7.OrganizationService }], propDecorators: { lineColor: [{
474
474
  type: Input
475
475
  }], fullWidthMode: [{
@@ -507,4 +507,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
507
507
  type: ViewChild,
508
508
  args: ['reducedIconWrapper']
509
509
  }] } });
510
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1vcmctdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtb3JnLXRyZWUvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9DLEtBQUssRUFBYyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBOEMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZMLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUM7QUFRMUgsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUM3RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUsxRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSwyQkFB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QUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsb0JBQW9CO2FBQ2xDO1NBQ0YsaWVDdkRILHU0TEE0R00sNi9MRHJFRixZQUFZLDhYQUNaLFdBQVcsK21CQUNYLDJCQUEyQixnR0FDM0IscUJBQXFCLHFKQUVyQixhQUFhLGtEQUNiLGdCQUFnQjs7MkZBWVAsb0JBQW9CO2tCQXRCaEMsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCwyQkFBMkI7d0JBQzNCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4QixhQUFhO3dCQUNiLGdCQUFnQjtxQkFDakIsYUFHVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLHNCQUFzQjt5QkFDbEM7cUJBQ0Y7NFFBR1EsU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDUSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDQyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDTSxrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSW5wdXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG9mLCBzd2l0Y2hNYXAsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBSZWN1cnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlT3JnVHJlZVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLW9yZy10cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IElPcmdUcmVlSXRlbSwgSU9yZ1RyZWVMaW5lckl0ZW0gfSBmcm9tICcuL0lPcmdUcmVlSXRlbSc7XHJcblxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlT3JnVHJlZUluc3RhbmNlLCBPcmdhbml6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnYW5pemF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0IH0gZnJvbSAnLi4vLi4vLi4vLi4vYXNzZXRzL2pzL3Jlc2N1c2l2ZV93aydcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29yZUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1jaGVja2JveC9jb3JlLWNoZWNrYm94L2NvcmUtY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVSZWR1Y2VySWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcmVkdWNlci1pY29uL2NvcmUtcmVkdWNlci1pY29uL2NvcmUtcmVkdWNlci1pY29uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcclxuXHJcbmV4cG9ydCBlbnVtIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUge1xyXG4gIEFDVElWQVRFRF9TSU5HTEUgPSAnQUNUSVZBVEVEX1NJTkdMRScsXHJcbiAgQUNUSVZBVEVEX0lOSEVSSVRBTkNFID0gJ0FDVElWQVRFRF9JTkhFUklUQU5DRScsXHJcbiAgQ0hFQ0tFRCA9ICdDSEVDS0VEJyxcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRW51bUNvcmVPcmdUcmVlYVNlYXJjaE1vZGUge1xyXG4gIEhJR0hMSUdIVCA9ICdISUdITElHSFQnLFxyXG4gIFJFRFVDRSA9ICdSRURVQ0UnXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1vcmctdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCxcclxuICAgIENvcmVDaGVja2JveENvbXBvbmVudCxcclxuICAgIENvcmVSZWR1Y2VySWNvbkNvbXBvbmVudCxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBUb29sdGlwRGlyZWN0aXZlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZU9yZ1RyZWVDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlT3JnVHJlZUNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQElucHV0KCkgbGluZUNvbG9yOiBzdHJpbmcgPSAndHJhbnNwYXJlbnQnO1xyXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aE1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFjY2Vzc29yTW9kZTogRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZSA9IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRDtcclxuXHJcbiAgLy9UTyBCRSBORVdcclxuICBASW5wdXQoKSBzZWFyY2hNb2RlOiBFbnVtQ29yZU9yZ1RyZWVhU2VhcmNoTW9kZSA9IEVudW1Db3JlT3JnVHJlZWFTZWFyY2hNb2RlLlJFRFVDRTtcclxuXHJcbiAgQElucHV0KCkgZnVsbFJlbmRlcmluZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyOyAvLyBDaGnhu4F1IGNhbyBj4bunYSBDb3JlT3JnVHJlZSBj4bqnbiDEkcaw4bujYyB0cnV54buBbiB2w6BvIVxyXG4gIEBJbnB1dCgpIGRpc2FibGVkTG9vcEV4cGFuZCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd0NoZWNrSW5oZXJpdGFuY2UhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTsgLy8gMjAyNC0wNS0xMDogdG8gYmUgaW1wbGVtZW50ZWRcclxuICBASW5wdXQoKSBzdGF0ZUlzb2xhdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBAT3V0cHV0KCkgaXRlbURvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGFpbmVyJykgc2Nyb2xsQ29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdkaXNwbGF5Q29udGVudCcpIGRpc3BsYXlDb250ZW50ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdyZWR1Y2VkSWNvbldyYXBwZXInKSByZWR1Y2VkSWNvbldyYXBwZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICBvdmVycmlkZSB2YWx1ZSE6IG51bWJlcltdO1xyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKG9iajogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSBvYmo7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmFjY2Vzc29yTW9kZSkge1xyXG4gICAgICBjYXNlIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRDpcclxuICAgICAgICBpZiAoISFvYmopIHtcclxuICAgICAgICAgIGNvbnN0IGNoZWNrZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5jaGVja2VkSWRzID0gb2JqOyAvLyA8PT09IDI0LzEwLzIwMjNcclxuICAgICAgICAgIG9iai5tYXAoeCA9PiBjaGVja2VkS2V5cy5wdXNoKHgudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZS53cml0ZVZhbHVlQ2hlY2tlZChjaGVja2VkS2V5cywgdGhpcy5kYXRhLCB0aGlzLmRpc2FibGVkTG9vcEV4cGFuZCkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhPy5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkFDVElWQVRFRF9TSU5HTEU6XHJcbiAgICAgIGNhc2UgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfSU5IRVJJVEFOQ0U6XHJcbiAgICAgICAgaWYgKCEhb2JqKSB7XHJcbiAgICAgICAgICBjb25zdCBhY3RpdmF0ZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgb2JqLm1hcCh4ID0+IGFjdGl2YXRlZEtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2Uud3JpdGVWYWx1ZUFjdGl2YXRlZChhY3RpdmF0ZWRLZXlzLCB0aGlzLmRhdGEsIHRoaXMuZGlzYWJsZWRMb29wRXhwYW5kKS5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGE/Lmxlbmd0aCkgdGhpcy5kYXRhWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5hY2Nlc3Nvck1vZGUgPT09IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRCkge1xyXG5cclxuICAgIH0gZWxzZSAvKiBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkFDVElWQVRFRF9TSU5HTEUgb3IgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfSU5IRVJJVEFOQ0UgKi8ge1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGFjdGl2ZUlkczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgY2hlY2tlZElkczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgLy8gZm9yIGRlYnVnZ2luZ1xyXG4gIC8vIGFjdGl2ZUlkc1N0cmluZyE6IHN0cmluZzsgIFxyXG4gIGRhdGEhOiBJT3JnVHJlZUl0ZW1bXTtcclxuICAvL2RhdGFGaWx0ZXJlZCE6IElPcmdUcmVlSXRlbVtdO1xyXG4gIGxvYWRpbmchOiBib29sZWFuO1xyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgbGlubmVyT3JnQXJyYXkhOiBJT3JnVHJlZUxpbmVySXRlbVtdO1xyXG4gIHNlYXJjaCE6IHN0cmluZztcclxuICBzZWFyY2gkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHJlZHVjZWQhOiBib29sZWFuO1xyXG4gIHNlYXJjaFBsYWNlaG9sZGVyID0gRW51bVRyYW5zbGF0ZUtleS5VSV9DT01NT05fUExBQ0VfSE9MREVSX1NFQVJDSF9PUkc7XHJcblxyXG4gIGluaXRpYWxpemluZyE6IGJvb2xlYW47XHJcbiAgY2hlY2tJbmhlcml0YW5jZTogYm9vbGVhbiA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZVxyXG4gIHNob3dEaXNzb2x2ZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZVxyXG4gIHNlbGVjdGVkS2V5ITogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHNlbGVjdGVkSXRlbSE6IElPcmdUcmVlTGluZXJJdGVtO1xyXG4gIGxhbmchOiBzdHJpbmc7XHJcbiAgLy9yZWR1Y2VkJCE6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcclxuXHJcbiAgaW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcbiAgc2Nyb2xsQ29udGFpbmVySGVpZ2h0ITogbnVtYmVyO1xyXG5cclxuICBzdGF0dXNTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy9wdWJsaWMgb3ZlcnJpZGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY3Vyc2l2ZVNlcnZpY2U6IFJlY3Vyc2l2ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZU9yZ1RyZWVTZXJ2aWNlOiBDb3JlT3JnVHJlZVNlcnZpY2UsXHJcbiAgICAvLyBwcml2YXRlIGNvcmVPcmdUcmVlU3RhdGU6IENvcmVPcmdUcmVlU3RhdGUsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIG9yZ2FuaXphdGlvblNlcnZpY2U6IE9yZ2FuaXphdGlvblNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigvKmluamVjdG9yKi8pO1xyXG4gICAgdGhpcy5pbml0aWFsaXppbmcgPSB0cnVlO1xyXG5cclxuICAgIC8vIHRoaXMucmVkdWNlZCQgPSB0aGlzLmNvcmVPcmdUcmVlU3RhdGUuY29yZU9yZ1RyZWVSZWR1Y2VkJDtcclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemluZyA9IGZhbHNlO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG4gICAgICB0aGlzLnJlc2l6ZUhlaWdodCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgLy90aGlzLmxheW91dFNlcnZpY2UubGVmdGJhck9wZW4kLm5leHQoZmFsc2UpO1xyXG5cclxuICAgIHRoaXMuaW5zdGFuY2VOdW1iZXIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGNvbnN0IG5ld0luc3RhbmNlOiBJQ29yZU9yZ1RyZWVJbnN0YW5jZSA9IHtcclxuICAgICAgaW5zdGFuY2VOdW1iZXI6IHRoaXMuaW5zdGFuY2VOdW1iZXIsXHJcbiAgICAgIHNlbGVjdGVkS2V5JDogbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCksXHJcbiAgICAgIGFjdGl2ZUtleXMkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSksXHJcbiAgICAgIGNoZWNrZWRLZXlzJDogbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pLFxyXG4gICAgICBleHBhbmRlZEtleXMkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSksXHJcbiAgICAgIGNoZWNrSW5oZXJpdGFuY2UkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpXHJcbiAgICB9XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2UuaW5zdGFuY2VzLnB1c2gobmV3SW5zdGFuY2UpXHJcblxyXG4gICAgLy8gQ2hlY2sgeGVtIGNoaeG7gXUgY2FvIGhlaWdodCBjw7MgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgbyBoYXkga2jDtG5nXHJcbiAgICBpZiAodGhpcy5oZWlnaHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAvL3RoaXMuYWxlcnRTZXJ2aWNlLndhcm4oXCJDb3JlT3JnVHJlZSBraMO0bmcgbmjhuq1uIMSRxrDhu6NjIGNoaeG7gXUgY2FvIChoZWlnaHQpIHRydXnhu4FuIHbDoG8gdOG7qyBs4bubcCBuZ2/DoGkuIENoaeG7gXUgY2FvIG3hurdjIMSR4buLbmggc+G6vSDEkcaw4bujYyB0w61uaCB0b8OhbiBk4buxYSB2w6BvIGLhu5EgY+G7pWMgY2jDrW5oLlwiLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5jb250ZW50Q29udGFpbmVySGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAvLyBiYXNpY1NwYWNpbmcgbMOgIHBhZGRpbmdCb3R0b20gY+G7p2EgbOG7m3AgY29udGVudC1jb250YWluZXJcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ID0geCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmc7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2UubGluZXJEYXRhJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLmxpbm5lck9yZ0FycmF5ID0geDtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuc3RhdGVJc29sYXRlZCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIGlmICh4KSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLnN0YXR1c1N1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuc3RhdHVzU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzU3Vic2NyaXB0aW9uID0gdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJCBjaGFuZ2VzXCIsIHgpXHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3QWN0aXZlSWRzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgICAgICAgIHguYWN0aXZlS2V5cy5tYXAoKGspID0+IHtcclxuICAgICAgICAgICAgICAgIG5ld0FjdGl2ZUlkcy5wdXNoKE51bWJlcihrKSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJZHMgPSBuZXdBY3RpdmVJZHM7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlICE9PSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmFjdGl2ZUlkcztcclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5hY3RpdmVJZHMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5ID0geC5zZWxlY3RlZEtleTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuc2VhcmNoJFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKCh4KSA9PiB4ICE9PSBudWxsKSxcclxuICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgodGV4dCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3dpdGNoTWFwIHdvcmtzJyk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBBVUcgMjAyNCBORVcgOiBNVVNUIEJFIFRFU1RFRFxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNb2RlID09PSBFbnVtQ29yZU9yZ1RyZWVhU2VhcmNoTW9kZS5ISUdITElHSFQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLmZpbmRJdGVtKHRleHQsIHRoaXMuZGF0YSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMucmVjdXJzaXZlU2VydmljZS5yZWR1Y2luZ0ZpbHRlcih0aGlzLnNjcm9sbENvbnRhaW5lciwgdGV4dCkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuc2VhcmNoTW9kZSA9PT0gRW51bUNvcmVPcmdUcmVlYVNlYXJjaE1vZGUuUkVEVUNFKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuZGF0YUZpbHRlcmVkID0geCBhcyBJT3JnVHJlZUl0ZW1bXTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJFxyXG4gICAgICAgIC5waXBlKGZpbHRlcigodmFsdWUpID0+ICEhIXRoaXMuaW5pdGlhbGl6aW5nICYmICEhdmFsdWUpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIGlmICghIWxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY29yZU9yZ1RyZWVTdGF0dXMnLCBKU09OLnN0cmluZ2lmeSh4KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoKHgpID0+ICh0aGlzLmxhbmcgPSB4KSkpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0KCk6IHZvaWQge1xyXG5cclxuICAgIC8vIGhlaWdodCBpcyBub3QgZ2l2ZW4gYW5kIHRoZSB0cmVlIHJlc2l6ZSBhcyBzdGFuZGFyZFxyXG4gICAgaWYgKCEhIXRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgIGNvbnN0IHNpemVIZWFkZXJIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWhlYWRlci1oZWlnaHQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHNpemVDb3JlUGFnZUhlYWRlckhlaWdodCA9IE51bWJlcihcclxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdlLWhlYWRlci1oZWlnaHQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBzaXplSGVhZGVySGVpZ2h0IC0gc2l6ZUNvcmVQYWdlSGVhZGVySGVpZ2h0O1xyXG5cclxuICAgICAgY29uc3QgcGFnZUhlYWRlckhlaWdodCA9IE51bWJlcihcclxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdlLWhlYWRlci1oZWlnaHQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBwYWdpbmF0aW9uSGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1jb3JlLXBhZ2luYXRpb24taGVpZ2h0JylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBzaXplTWFyZ2luQ29yZVBhZ2luYXRpb25GdWxsID0gTnVtYmVyKFxyXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1tYXJnaW4tY29yZS1wYWdpbmF0aW9uJylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG5cclxuXHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAtIHBhZ2VIZWFkZXJIZWlnaHQgLSBwYWdpbmF0aW9uSGVpZ2h0ICsgc2l6ZU1hcmdpbkNvcmVQYWdpbmF0aW9uRnVsbDtcclxuICAgICAgY29uc29sZS5sb2coaGVpZ2h0KTtcclxuXHJcbiAgICAgIHRoaXMuY29udGFpbmVyPy5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICctLWhlaWdodCcsIGhlaWdodCArICdweCdcclxuICAgICAgKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAnLS1oZWlnaHQnLCB0aGlzLmhlaWdodCArICdweCdcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uub3JnVHJlZURhdGEkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kYXRhID0geDtcclxuICAgICAgICAgIC8vdGhpcy5kYXRhRmlsdGVyZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHgpKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwibmV3IERhdGEgY29taW5nXCIsIHRoaXMuZGF0YSwgbmV3IERhdGUoKS5nZXRUaW1lKCkpXHJcbiAgICAgICAgICBpZiAoISF0aGlzLmRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5kYXRhLmxlbmd0aCkgdGhpcy5kYXRhWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25JdGVtQ2xpY2tMb2NhbChlOiBJT3JnVHJlZUl0ZW0pOiB2b2lkIHtcclxuICAgIHRoaXMubGlubmVyT3JnQXJyYXkubWFwKCh4KSA9PiAoeC5hY3RpdmUgPSBmYWxzZSkpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmJ1aWxkVHJlZURhdGEoKSk7XHJcbiAgfVxyXG5cclxuICBvblRvZ2dsZUl0ZW0oZTogSU9yZ1RyZWVJdGVtKSB7XHJcbiAgICBjb25zdCBjbG9uZUNvcHk6IElPcmdUcmVlTGluZXJJdGVtW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmxpbm5lck9yZ0FycmF5KVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGZpbHRlciA9IGNsb25lQ29weS5maWx0ZXIoKHgpID0+IHguaWQgPT09IGUuaWQpO1xyXG5cclxuICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIGZpbHRlclswXS5leHBhbmQgPSAhISFlLmV4cGFuZDtcclxuICAgIH1cclxuICAgIHRoaXMubGlubmVyT3JnQXJyYXkgPSBjbG9uZUNvcHk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYnVpbGRUcmVlRGF0YSgpKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkVHJlZURhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IGNsb25lQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5saW5uZXJPcmdBcnJheSkpO1xyXG5cclxuICAgIGlmICh0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAvLyBDcmVhdGUgYSBuZXdcclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKFwi8J+fovCfn6IgV29ya2VyIHdvcmtzXCIpO1xyXG5cclxuICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0KTtcclxuICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoeyBkYXRhIH0pID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhLmxpc3Q7XHJcbiAgICAgICAgLy90aGlzLmRhdGFGaWx0ZXJlZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YS5saXN0KSk7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhPy5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgIGxpc3Q6IGNsb25lQ29weSxcclxuICAgICAgICBrZXlGaWVsZDogJ2lkJyxcclxuICAgICAgICB0aXRsZUZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgcGFyZW50RmllbGQ6ICdwYXJlbnRJZCcsXHJcbiAgICAgICAgYWN0aXZlRmllbGQ6ICdhY3RpdmUnLFxyXG4gICAgICAgIC8vaW5oZXJpdGFudEFjdGl2ZUZpZWxkOiAnaW5oZXJpdGFudEFjdGl2ZScsXHJcbiAgICAgICAgY2hlY2tlZEZpZWxkOiAnY2hlY2tlZCcsXHJcbiAgICAgICAgZXhwYW5kZWRGaWVsZDogJ2V4cGFuZCcsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gV2ViIHdvcmtlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC5cclxuICAgICAgLy8gWW91IHNob3VsZCBhZGQgYSBmYWxsYmFjayBzbyB0aGF0IHlvdXIgcHJvZ3JhbSBzdGlsbCBleGVjdXRlcyBjb3JyZWN0bHkuXHJcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlO1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2VcclxuICAgICAgICAgIC5saW5lckFycmF5VG9OZXN0ZWRBcnJheShcclxuICAgICAgICAgICAgY2xvbmVDb3B5LFxyXG4gICAgICAgICAgICAnaWQnLFxyXG4gICAgICAgICAgICAnbmFtZScsXHJcbiAgICAgICAgICAgICdwYXJlbnRJZCcsXHJcbiAgICAgICAgICAgICdhY3RpdmUnLFxyXG4gICAgICAgICAgICAnY2hlY2tlZCcsXHJcbiAgICAgICAgICAgICdleHBhbmQnLFxyXG4gICAgICAgICAgICAvL3N0YXR1c1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgob2JqKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG9iai5saXN0O1xyXG4gICAgICAgICAgICAvL3RoaXMuZGF0YUZpbHRlcmVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmoubGlzdCkpO1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGE/Lmxlbmd0aCkgdGhpcy5kYXRhWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkV4cGFuZFRvZ2dsZXJDbGljayhlOiBJT3JnVHJlZUl0ZW0sIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICFlLnRyZWUkRXhwYW5kZWQ7XHJcbiAgICBlLnRyZWUkRXhwYW5kZWQgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICAvLyB1cGRhdGluZyBzdGF0dXMgd2l0aCBuZXdWYWx1ZVxyXG4gICAgY29uc3QgY3VycmVudEV4cGFuZGVkSWRzID1cclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWU/LmV4cGFuZGVkS2V5cztcclxuICAgIGxldCBuZXdFeHBhbmRlZElkcyA9IGN1cnJlbnRFeHBhbmRlZElkcz8uZmlsdGVyKFxyXG4gICAgICAoXykgPT4gISEhY3VycmVudEV4cGFuZGVkSWRzLmluY2x1ZGVzKGUuaWQudG9TdHJpbmcoKSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgIG5ld0V4cGFuZGVkSWRzPy5wdXNoKGUuaWQudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RXhwYW5kZWRJZHM/LnNvcnQoKTtcclxuXHJcbiAgICBjb25zdCBuZXdFeHBhbmRlZEtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBuZXdFeHBhbmRlZElkcy5tYXAoKHgpID0+IG5ld0V4cGFuZGVkS2V5cy5wdXNoKHgudG9TdHJpbmcoKSkpO1xyXG5cclxuICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLm5leHQoe1xyXG4gICAgICAuLi50aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSEsXHJcbiAgICAgIGV4cGFuZGVkS2V5czogbmV3RXhwYW5kZWRLZXlzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1DaGVjayhlOiBJT3JnVHJlZUl0ZW0sIG5ld1ZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLml0ZW1DbGljaz8uZW1pdChlKTtcclxuICAgIGlmICh0aGlzLmFjY2Vzc29yTW9kZSAhPT0gRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5DSEVDS0VEKSByZXR1cm47XHJcblxyXG4gICAgLy8gV2UgaGF2ZSB0aGlzIHZhciB0byBob2xkIG5vZGVzIHRoYXQgYXJlIGJlaW5nIGNoYW5nZWRcclxuICAgIGxldCB0b2dnbGVkSWRzOiBudW1iZXJbXTtcclxuICAgIC8vIFdlIHNob3VsZCBjYWxjdWxhdGUgYSBuZXcgc3RhdGUgaW50byB0aGlzIHZhcjogXHJcbiAgICBjb25zdCBuZXdDaGVja2VkSWRzOiBudW1iZXJbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jaGVja2VkSWRzKSk7XHJcblxyXG4gICAgLy8gV2Ugd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgdG9nZ2xlZElkcyBjaGFuZ2VkXHJcbiAgICBjb25zdCBjaGFuZ2VWYWx1ZSA9ICgpID0+IHtcclxuXHJcbiAgICAgIC8vIElmIG5ld1ZhbHVlID09PSB0cnVlLCB3ZSB3aWxsIGRpc2N0aW50bHkgcHVzaCBjaGFuZ2VkIGlkcyB0byB0aGUgc3RhdGVcclxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHdpbGwgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgc3RhdGVcclxuICAgICAgaWYgKCEhbmV3VmFsdWUpIHtcclxuICAgICAgICB0b2dnbGVkSWRzLm1hcCh4ID0+IHtcclxuICAgICAgICAgIGlmICghISFuZXdDaGVja2VkSWRzLmluY2x1ZGVzKHgpKSB7XHJcbiAgICAgICAgICAgIG5ld0NoZWNrZWRJZHMucHVzaCh4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIFRoZW4gYXNpZ24gdGhlIHN0YXRlIHRvIHRoZSBuZXdDaGVja2VkSWRzXHJcbiAgICAgICAgdGhpcy5jaGVja2VkSWRzID0gbmV3Q2hlY2tlZElkcztcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3Q2hlY2tlZElkcy5maWx0ZXIoeCA9PiAhISF0b2dnbGVkSWRzLmluY2x1ZGVzKHgpKVxyXG4gICAgICAgIC8vIFRoZW4gYXNpZ24gdGhlIHN0YXRlIHRvIHRoZSBmaWx0ZXJcclxuICAgICAgICB0aGlzLmNoZWNrZWRJZHMgPSBmaWx0ZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFmdGVyIHRoZSBjYXNlcyBvZiBpZi9lbHNlLCBtYWtlIHRoZSBjb250cm9sIGNoYW5nZSB3aXRoIG9uQ2hhbmdlXHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNoZWNrZWRJZHM7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5jaGVja2VkSWRzKTtcclxuICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogc3RhcnQ6IFRISVMgQ09ERSBTQ09QRSBjYWxjdWxhdGVzIHRvZ2dsZWRJZHMgKi9cclxuICAgIGlmICh0aGlzLmNoZWNrSW5oZXJpdGFuY2UpIHtcclxuICAgICAgLy8gSWYgdHJ1ZSwgYWxsIHRoZSBuZXN0ZWQgaXRlbXMgd2lsbCBiZSBjaGVja2VkL3VuY2hlY2tlZFxyXG4gICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2VcclxuICAgICAgICAubmVzdGVkVG9nZ2xlQ2hlY2soZSwgbmV3VmFsdWUpXHJcbiAgICAgICAgLnRoZW4oKHgpID0+IHtcclxuXHJcbiAgICAgICAgICBsZXQgY3VycmVudENoZWNrZWRLZXlzID0gdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUuY2hlY2tlZEtleXMgfHwgW107XHJcblxyXG4gICAgICAgICAgaWYgKCEhbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgeC5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoaSA9PiBpID09PSBpdGVtLnRvU3RyaW5nKCkpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudENoZWNrZWRLZXlzLnB1c2goaXRlbS50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cyA9IGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoaSA9PiAheC5pbmNsdWRlcyhOdW1iZXIoaSkpKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSxcclxuICAgICAgICAgICAgY2hlY2tlZEtleXM6IGN1cnJlbnRDaGVja2VkS2V5cy8veC5tYXAoaXRlbSA9PiBpdGVtLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLy8gVGhlIGlkcyBoYXZlIGJlZW4gY2hhbmdlZFxyXG4gICAgICAgICAgdG9nZ2xlZElkcyA9IHg7XHJcblxyXG4gICAgICAgICAgLy8gTm93IHRvZ2dsZWRJZHMgd2VyZSBzZXQuIFdlIGNhbGwgdGhlIGZ1bmN0aW9uIHdlIGRlY2xhcmVkXHJcbiAgICAgICAgICBjaGFuZ2VWYWx1ZSgpO1xyXG5cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaCgoeDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHNpbXBseSB0b2dnbGUgY2hlY2sgZm9yIGN1cnJlbnQgaXRlbSBvbmx5XHJcbiAgICAgIHRvZ2dsZWRJZHMgPSBbZS5pZF07XHJcblxyXG4gICAgICAvLyBOb3cgdG9nZ2xlZElkcyB3ZXJlIHNldC4gV2UgY2FsbCB0aGUgZnVuY3Rpb24gd2UgZGVjbGFyZWRcclxuICAgICAgY2hhbmdlVmFsdWUoKTtcclxuXHJcbiAgICB9XHJcbiAgICAvKiBlbmQ6IFRISVMgQ09ERSBTQ09QRSBjYWxjdWxhdGVzIHRvZ2dsZWRJZHMgKi9cclxuXHJcbiAgICAvLyBUaGF0IGlzLiBIYXBweSBkZWJ1Z2dpbmchXHJcblxyXG4gIH1cclxuXHJcbiAgb25DaGVja0luY2x1ZGVEaXNzb2x2ZWRDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGNvbnNvbGUubG9nKFwib25DaGVja0luY2x1ZGVEaXNzb2x2ZWRDaGFuZ2VcIiwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25DaGVja0luaGVyaXRhbmNlQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICBjaGVja0luaGVyaXRhbmNlOiB2YWx1ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25PYmplY3RDbGljayhlOiBJT3JnVHJlZUl0ZW0sIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICAvLyByZW1vdmUgaGlnaGxpZ2h0IGNsYXNzXHJcbiAgICAvLyBUTyBET1xyXG5cclxuICAgIGlmICghIWUucHJvdGVjdGVkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pdGVtQ2xpY2s/LmVtaXQoZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlID09PSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHJldHVybjtcclxuICAgIGxldCBhY3RpdmVJZHM6IG51bWJlcltdID0gW107XHJcbiAgICB0aGlzLmRhdGEubWFwKChpdGVtKSA9PiAoaXRlbS5hY3RpdmUgPSBmYWxzZSkpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmFjY2Vzc29yTW9kZSA9PT1cclxuICAgICAgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfSU5IRVJJVEFOQ0UgfHxcclxuICAgICAgISEhdGhpcy5hY2Nlc3Nvck1vZGVcclxuICAgICkge1xyXG4gICAgICAvLyBJZiB0cnVlLCBhbGwgdGhlIG5lc3RlZCBpdGVtcyB3aWxsIGJlIGFjdGl2ZSwgdGhlIG90aGVycyBhcmUgaW5hY3RpdmVcclxuICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXHJcbiAgICAgICAgLm5lc3RlZFJlc2V0QWN0aXZlKGUsIHRydWUpXHJcbiAgICAgICAgLnRoZW4oKHgpID0+IHtcclxuICAgICAgICAgIGFjdGl2ZUlkcyA9IHg7XHJcbiAgICAgICAgICBhY3RpdmVJZHMuc29ydCgpO1xyXG4gICAgICAgICAgY29uc3QgbmV3QWN0aXZlS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgIGFjdGl2ZUlkcy5tYXAoKHgpID0+IG5ld0FjdGl2ZUtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSEsXHJcbiAgICAgICAgICAgIGFjdGl2ZUtleXM6IG5ld0FjdGl2ZUtleXMsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkS2V5OiBlLmlkLnRvU3RyaW5nKClcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVJZHMgPSBhY3RpdmVJZHM7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmFjdGl2ZUlkcyk7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGFjdGl2ZUlkcyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcih4KTtcclxuICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIEFDVElWQVRFRF9TSU5HTEVcclxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHNpbXBseSBzZXQgY3VycmVudCBpdGVtIHRvIGJlIGFjdGl2ZSBvbmx5XHJcbiAgICAgIGFjdGl2ZUlkcyA9IFtlLmlkXTtcclxuICAgICAgdGhpcy5hY3RpdmVJZHMgPSBhY3RpdmVJZHM7XHJcblxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgICAuLi50aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSEsXHJcbiAgICAgICAgYWN0aXZlS2V5czogW2UuaWQudG9TdHJpbmcoKV0sXHJcbiAgICAgICAgc2VsZWN0ZWRLZXk6IGUuaWQudG9TdHJpbmcoKSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm9uQ2hhbmdlKGFjdGl2ZUlkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50O1xyXG5cclxuICAgIGlmIChkZXRhaWwgPT09IDIpIHtcclxuICAgICAgY29uc29sZS5sb2coJ1RoaXMgd2FzIGEgZGJsY2xpY2snKTtcclxuICAgICAgdGhpcy5pdGVtRG91YmxlQ2xpY2suZW1pdChlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGU7XHJcblxyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hDaGFuZ2UodGV4dDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaCQubmV4dCh0ZXh0KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwibmdBZnRlckNvbnRlbnRJbml0XCIpXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoKHgpID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG5cclxuICAgIGlmICghIXRoaXMuaW5zdGFuY2VOdW1iZXIpIHtcclxuICAgICAgY29uc3QgdHJ5VG9GaW5kID0gdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoXHJcbiAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuaW5zdGFuY2VOdW1iZXJcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghIXRyeVRvRmluZC5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBuZXdJbnN0YW5jZXMgPSB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyICE9PSB0aGlzLmluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2UuaW5zdGFuY2VzID0gbmV3SW5zdGFuY2VzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtb3JnLXRyZWUtY29udGFpbmVyXCIgW2NsYXNzLmZ1bGwtd2lkdGhdPVwiISFmdWxsV2lkdGhNb2RlXCIgKm5nSWY9XCIhIWRhdGFcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgcG9zaXRpb24gOiAncmVsYXRpdmUnLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQgKyAncHgnXHJcbiAgICB9XCI+XHJcbiAgICA8ZGl2ICNkaXNwbGF5Q29udGVudCBjbGFzcz1cImN1c3RvbS1vcmctdHJlZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb3JlLW9yZy10cmVlLWhlYWRlciBkLWZsZXgtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibTVcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hcIiAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGU6IGxhbmdcIiBbY2xhc3MuZnVsbC13aWR0aF09XCIhIWZ1bGxXaWR0aE1vZGVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICNzY3JvbGxDb250YWluZXIgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLSBsYXlvdXRTZXJ2aWNlLmNvcmVPcmdUcmVlVG9wSGVpZ2h0IC0gbGF5b3V0U2VydmljZS5jb3JlT3JnVHJlZUJvdHRvbUhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ3Njcm9sbCdcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIDxjb3JlLWxvYWRpbmctc3VyZmFjZSBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2hlaWdodF09XCJzY3JvbGxDb250YWluZXJIZWlnaHRcIj48L2NvcmUtbG9hZGluZy1zdXJmYWNlPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBAZm9yIChyb290IG9mIGRhdGFGaWx0ZXJlZDsgdHJhY2sgcm9vdCkgeyAtLT5cclxuICAgICAgICAgICAgICAgIEBmb3IgKHJvb3Qgb2YgZGF0YTsgdHJhY2sgcm9vdCkge1xyXG4gICAgICAgICAgICAgICAgQGRlZmVyKG9uIHZpZXdwb3J0KHNjcm9sbENvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInJvb3RcIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhIXJvb3QudHJlZSRFeHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IHJvb3QgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIH0gQHBsYWNlaG9sZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgUGxhY2Vob2xkZXIuLi5cclxuICAgICAgICAgICAgICAgIH0gQGxvYWRpbmcoKSB7XHJcbiAgICAgICAgICAgICAgICBMb2FkaW5nLi4uXHJcbiAgICAgICAgICAgICAgICB9IEBlcnJvcigpIHtcclxuICAgICAgICAgICAgICAgIEVycm9yLi4uXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICAgICAgICAgICAgICBib3R0b206ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogJzBweCcsXHJcbiAgICAgICAgICAgICAgICByaWdodDogJzBweCcsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IGxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogbGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgbGluZUhlaWdodDogbGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbidcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBsYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJ1xyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNoZWNrYm94IFsobmdNb2RlbCldPVwic2hvd0Rpc3NvbHZlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoZWNrSW5jbHVkZURpc3NvbHZlZENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidVSS5DT1JFX09SR19UUkVFLlNIT1dfT1VUREFURURfVU5JVFNfQUJCUkVWSUFURUQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidVSS5DT1JFX09SR19UUkVFLlNIT1dfT1VUREFURURfVU5JVFMnXCIgdG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj48L2NvcmUtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWluaGVyaXRhbmNlLXdyYXBwZXJcIiAqbmdJZj1cImFjY2Vzc29yTW9kZSA9PT0gJ0NIRUNLRUQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNoZWNrYm94ICpuZ0lmPVwic2hvd0NoZWNrSW5oZXJpdGFuY2VcIiBbKG5nTW9kZWwpXT1cImNoZWNrSW5oZXJpdGFuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja0luaGVyaXRhbmNlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ1VJLkNPUkVfT1JHX1RSRUUuQ0hFQ0tfSU5IRVJJVEFOQ0UnXCI+PC9jb3JlLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC1pZD1cImNvbnRleHQuaWRcIiBsZXQtdGl0bGU9XCJjb250ZXh0LnRyZWUkVGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgbGV0LWhpZ2hsaWdodGVkPVwiY29udGV4dC50cmVlJEhpZ2hsaWdodGVkXCIgbGV0LWhhc0NoaWxkcmVuPVwiY29udGV4dC50cmVlJEhhc0NoaWxkcmVuXCJcclxuICAgICAgICAgICAgICAgIGxldC1oYXNBY3RpdmVDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNBY3RpdmVDaGlsZHJlblwiIGxldC1jaGlsZHJlbj1cImNvbnRleHQudHJlZSRDaGlsZHJlblwiXHJcbiAgICAgICAgICAgICAgICBsZXQtZXhwYW5kZWQ9XCJjb250ZXh0LnRyZWUkRXhwYW5kZWRcIiBsZXQtaXNBY3RpdmU9XCJjb250ZXh0LmlzQWN0aXZlXCIgbGV0LWFjdGl2ZT1cImNvbnRleHQudHJlZSRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgbGV0LWNoZWNrZWQ9XCJjb250ZXh0LnRyZWUkQ2hlY2tlZFwiIGxldC1wcm90ZWN0ZWQ9XCJjb250ZXh0LnByb3RlY3RlZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIEBpZiAoKCFzaG93RGlzc29sdmVkICYmICEhaXNBY3RpdmUpIHx8ICghIXNob3dEaXNzb2x2ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICA8bGkgW2NsYXNzLmhhcy1jaGlsZHJlbl09XCIhIWhhc0NoaWxkcmVuXCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhIWhhc0NoaWxkcmVuICYmICEhIWV4cGFuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAoY2xpY2spPVwiYWNjZXNzb3JNb2RlICE9PSAnQ0hFQ0tFRCcgPyBvbk9iamVjdENsaWNrKGNvbnRleHQsICRldmVudCkgOiAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvbk9iamVjdENsaWNrKGNvbnRleHQsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICgoISFzaG93RGlzc29sdmVkICYmICEhaGFzQ2hpbGRyZW4pIHx8ICghc2hvd0Rpc3NvbHZlZCAmJiAhIWhhc0FjdGl2ZUNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImV4cGFuZC10b2dnbGVyIGN1c3RvbS1pY29uLXBhcmVudC1kb3duXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkV4cGFuZFRvZ2dsZXJDbGljayhjb250ZXh0LCAkZXZlbnQpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWNjZXNzb3JNb2RlID09PSAnQ0hFQ0tFRCcgJiYgIXByb3RlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29yZS1jaGVja2JveCAob25DbGljayk9XCJvbkl0ZW1DaGVjayhjb250ZXh0LCAkZXZlbnQpXCIgW2lucHV0VmFsdWVdPVwiY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj48L2NvcmUtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9iamVjdCBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkS2V5PT09aWQudG9TdHJpbmcoKVwiIFtjbGFzcy5oaWdobGlnaHRlZF09XCJoaWdobGlnaHRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzc29sdmVkXT1cIiFpc0FjdGl2ZVwiIFtjbGFzcy5wcm90ZWN0ZWRdPVwicHJvdGVjdGVkXCIgW2FwcFRvb2x0aXBdPVwidGl0bGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRpdGxlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb2JqZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICBAaWYgKCEhY2hpbGRyZW4ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIFtjbGFzcy5jb2xsYXBzZWRdPVwiICEhIWV4cGFuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghIWV4cGFuZGVkIHx8ICEhZnVsbFJlbmRlcmluZykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW07IGNvbnRleHQ6IHsgY29udGV4dDogY2hpbGQgfVwiPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
510
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1vcmctdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtb3JnLXRyZWUvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9DLEtBQUssRUFBYyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBOEMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZMLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUM7QUFRMUgsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUM3RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUsxRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSwyQkFB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QUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsb0JBQW9CO2FBQ2xDO1NBQ0YsaWVDdkRILG82TEE0R00sNi9MRHJFRixZQUFZLDhYQUNaLFdBQVcsK21CQUNYLDJCQUEyQixnR0FDM0IscUJBQXFCLHFKQUVyQixhQUFhLGtEQUNiLGdCQUFnQjs7MkZBWVAsb0JBQW9CO2tCQXRCaEMsU0FBUzsrQkFDRSxlQUFlLGNBQ2IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCwyQkFBMkI7d0JBQzNCLHFCQUFxQjt3QkFDckIsd0JBQXdCO3dCQUN4QixhQUFhO3dCQUNiLGdCQUFnQjtxQkFDakIsYUFHVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixLQUFLLEVBQUUsSUFBSTs0QkFDWCxXQUFXLHNCQUFzQjt5QkFDbEM7cUJBQ0Y7NFFBR1EsU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDUSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDQyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDTSxrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSW5wdXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG9mLCBzd2l0Y2hNYXAsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBSZWN1cnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlT3JnVHJlZVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLW9yZy10cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IElPcmdUcmVlSXRlbSwgSU9yZ1RyZWVMaW5lckl0ZW0gfSBmcm9tICcuL0lPcmdUcmVlSXRlbSc7XHJcblxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlT3JnVHJlZUluc3RhbmNlLCBPcmdhbml6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnYW5pemF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0IH0gZnJvbSAnLi4vLi4vLi4vLi4vYXNzZXRzL2pzL3Jlc2N1c2l2ZV93aydcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29yZUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1jaGVja2JveC9jb3JlLWNoZWNrYm94L2NvcmUtY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVSZWR1Y2VySWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcmVkdWNlci1pY29uL2NvcmUtcmVkdWNlci1pY29uL2NvcmUtcmVkdWNlci1pY29uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcclxuXHJcbmV4cG9ydCBlbnVtIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUge1xyXG4gIEFDVElWQVRFRF9TSU5HTEUgPSAnQUNUSVZBVEVEX1NJTkdMRScsXHJcbiAgQUNUSVZBVEVEX0lOSEVSSVRBTkNFID0gJ0FDVElWQVRFRF9JTkhFUklUQU5DRScsXHJcbiAgQ0hFQ0tFRCA9ICdDSEVDS0VEJyxcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRW51bUNvcmVPcmdUcmVlYVNlYXJjaE1vZGUge1xyXG4gIEhJR0hMSUdIVCA9ICdISUdITElHSFQnLFxyXG4gIFJFRFVDRSA9ICdSRURVQ0UnXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1vcmctdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCxcclxuICAgIENvcmVDaGVja2JveENvbXBvbmVudCxcclxuICAgIENvcmVSZWR1Y2VySWNvbkNvbXBvbmVudCxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBUb29sdGlwRGlyZWN0aXZlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZU9yZ1RyZWVDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlT3JnVHJlZUNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQElucHV0KCkgbGluZUNvbG9yOiBzdHJpbmcgPSAndHJhbnNwYXJlbnQnO1xyXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aE1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFjY2Vzc29yTW9kZTogRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZSA9IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRDtcclxuXHJcbiAgLy9UTyBCRSBORVdcclxuICBASW5wdXQoKSBzZWFyY2hNb2RlOiBFbnVtQ29yZU9yZ1RyZWVhU2VhcmNoTW9kZSA9IEVudW1Db3JlT3JnVHJlZWFTZWFyY2hNb2RlLlJFRFVDRTtcclxuXHJcbiAgQElucHV0KCkgZnVsbFJlbmRlcmluZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyOyAvLyBDaGnhu4F1IGNhbyBj4bunYSBDb3JlT3JnVHJlZSBj4bqnbiDEkcaw4bujYyB0cnV54buBbiB2w6BvIVxyXG4gIEBJbnB1dCgpIGRpc2FibGVkTG9vcEV4cGFuZCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd0NoZWNrSW5oZXJpdGFuY2UhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTsgLy8gMjAyNC0wNS0xMDogdG8gYmUgaW1wbGVtZW50ZWRcclxuICBASW5wdXQoKSBzdGF0ZUlzb2xhdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBAT3V0cHV0KCkgaXRlbURvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGFpbmVyJykgc2Nyb2xsQ29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdkaXNwbGF5Q29udGVudCcpIGRpc3BsYXlDb250ZW50ITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdyZWR1Y2VkSWNvbldyYXBwZXInKSByZWR1Y2VkSWNvbldyYXBwZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICBvdmVycmlkZSB2YWx1ZSE6IG51bWJlcltdO1xyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKG9iajogbnVtYmVyW10pOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSBvYmo7XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLmFjY2Vzc29yTW9kZSkge1xyXG4gICAgICBjYXNlIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRDpcclxuICAgICAgICBpZiAoISFvYmopIHtcclxuICAgICAgICAgIGNvbnN0IGNoZWNrZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5jaGVja2VkSWRzID0gb2JqOyAvLyA8PT09IDI0LzEwLzIwMjNcclxuICAgICAgICAgIG9iai5tYXAoeCA9PiBjaGVja2VkS2V5cy5wdXNoKHgudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZS53cml0ZVZhbHVlQ2hlY2tlZChjaGVja2VkS2V5cywgdGhpcy5kYXRhLCB0aGlzLmRpc2FibGVkTG9vcEV4cGFuZCkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhPy5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkFDVElWQVRFRF9TSU5HTEU6XHJcbiAgICAgIGNhc2UgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfSU5IRVJJVEFOQ0U6XHJcbiAgICAgICAgaWYgKCEhb2JqKSB7XHJcbiAgICAgICAgICBjb25zdCBhY3RpdmF0ZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgICAgb2JqLm1hcCh4ID0+IGFjdGl2YXRlZEtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2Uud3JpdGVWYWx1ZUFjdGl2YXRlZChhY3RpdmF0ZWRLZXlzLCB0aGlzLmRhdGEsIHRoaXMuZGlzYWJsZWRMb29wRXhwYW5kKS5zdWJzY3JpYmUoXyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGE/Lmxlbmd0aCkgdGhpcy5kYXRhWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5hY2Nlc3Nvck1vZGUgPT09IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRCkge1xyXG5cclxuICAgIH0gZWxzZSAvKiBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkFDVElWQVRFRF9TSU5HTEUgb3IgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfSU5IRVJJVEFOQ0UgKi8ge1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGFjdGl2ZUlkczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgY2hlY2tlZElkczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgLy8gZm9yIGRlYnVnZ2luZ1xyXG4gIC8vIGFjdGl2ZUlkc1N0cmluZyE6IHN0cmluZzsgIFxyXG4gIGRhdGEhOiBJT3JnVHJlZUl0ZW1bXTtcclxuICAvL2RhdGFGaWx0ZXJlZCE6IElPcmdUcmVlSXRlbVtdO1xyXG4gIGxvYWRpbmchOiBib29sZWFuO1xyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgbGlubmVyT3JnQXJyYXkhOiBJT3JnVHJlZUxpbmVySXRlbVtdO1xyXG4gIHNlYXJjaCE6IHN0cmluZztcclxuICBzZWFyY2gkID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHJlZHVjZWQhOiBib29sZWFuO1xyXG4gIHNlYXJjaFBsYWNlaG9sZGVyID0gRW51bVRyYW5zbGF0ZUtleS5VSV9DT01NT05fUExBQ0VfSE9MREVSX1NFQVJDSF9PUkc7XHJcblxyXG4gIGluaXRpYWxpemluZyE6IGJvb2xlYW47XHJcbiAgY2hlY2tJbmhlcml0YW5jZTogYm9vbGVhbiA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWUgaXMgdHJ1ZVxyXG4gIHNob3dEaXNzb2x2ZWQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gZGVmYXVsdCB2YWx1ZSBpcyBmYWxzZVxyXG4gIHNlbGVjdGVkS2V5ITogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHNlbGVjdGVkSXRlbSE6IElPcmdUcmVlTGluZXJJdGVtO1xyXG4gIGxhbmchOiBzdHJpbmc7XHJcbiAgLy9yZWR1Y2VkJCE6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcclxuXHJcbiAgaW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcbiAgc2Nyb2xsQ29udGFpbmVySGVpZ2h0ITogbnVtYmVyO1xyXG5cclxuICBzdGF0dXNTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy9wdWJsaWMgb3ZlcnJpZGUgaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlY3Vyc2l2ZVNlcnZpY2U6IFJlY3Vyc2l2ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZU9yZ1RyZWVTZXJ2aWNlOiBDb3JlT3JnVHJlZVNlcnZpY2UsXHJcbiAgICAvLyBwcml2YXRlIGNvcmVPcmdUcmVlU3RhdGU6IENvcmVPcmdUcmVlU3RhdGUsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIG9yZ2FuaXphdGlvblNlcnZpY2U6IE9yZ2FuaXphdGlvblNlcnZpY2UsXHJcbiAgKSB7XHJcbiAgICBzdXBlcigvKmluamVjdG9yKi8pO1xyXG4gICAgdGhpcy5pbml0aWFsaXppbmcgPSB0cnVlO1xyXG5cclxuICAgIC8vIHRoaXMucmVkdWNlZCQgPSB0aGlzLmNvcmVPcmdUcmVlU3RhdGUuY29yZU9yZ1RyZWVSZWR1Y2VkJDtcclxuXHJcbiAgICB0aGlzLmluaXRpYWxpemluZyA9IGZhbHNlO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG4gICAgICB0aGlzLnJlc2l6ZUhlaWdodCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgLy90aGlzLmxheW91dFNlcnZpY2UubGVmdGJhck9wZW4kLm5leHQoZmFsc2UpO1xyXG5cclxuICAgIHRoaXMuaW5zdGFuY2VOdW1iZXIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIGNvbnN0IG5ld0luc3RhbmNlOiBJQ29yZU9yZ1RyZWVJbnN0YW5jZSA9IHtcclxuICAgICAgaW5zdGFuY2VOdW1iZXI6IHRoaXMuaW5zdGFuY2VOdW1iZXIsXHJcbiAgICAgIHNlbGVjdGVkS2V5JDogbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCksXHJcbiAgICAgIGFjdGl2ZUtleXMkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSksXHJcbiAgICAgIGNoZWNrZWRLZXlzJDogbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pLFxyXG4gICAgICBleHBhbmRlZEtleXMkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSksXHJcbiAgICAgIGNoZWNrSW5oZXJpdGFuY2UkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpXHJcbiAgICB9XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2UuaW5zdGFuY2VzLnB1c2gobmV3SW5zdGFuY2UpXHJcblxyXG4gICAgLy8gQ2hlY2sgeGVtIGNoaeG7gXUgY2FvIGhlaWdodCBjw7MgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgbyBoYXkga2jDtG5nXHJcbiAgICBpZiAodGhpcy5oZWlnaHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAvL3RoaXMuYWxlcnRTZXJ2aWNlLndhcm4oXCJDb3JlT3JnVHJlZSBraMO0bmcgbmjhuq1uIMSRxrDhu6NjIGNoaeG7gXUgY2FvIChoZWlnaHQpIHRydXnhu4FuIHbDoG8gdOG7qyBs4bubcCBuZ2/DoGkuIENoaeG7gXUgY2FvIG3hurdjIMSR4buLbmggc+G6vSDEkcaw4bujYyB0w61uaCB0b8OhbiBk4buxYSB2w6BvIGLhu5EgY+G7pWMgY2jDrW5oLlwiLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5jb250ZW50Q29udGFpbmVySGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAvLyBiYXNpY1NwYWNpbmcgbMOgIHBhZGRpbmdCb3R0b20gY+G7p2EgbOG7m3AgY29udGVudC1jb250YWluZXJcclxuICAgICAgICAgIHRoaXMuaGVpZ2h0ID0geCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmc7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2UubGluZXJEYXRhJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLmxpbm5lck9yZ0FycmF5ID0geDtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuc3RhdGVJc29sYXRlZCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIGlmICh4KSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLnN0YXR1c1N1YnNjcmlwdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXR1c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuc3RhdHVzU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzU3Vic2NyaXB0aW9uID0gdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJCBjaGFuZ2VzXCIsIHgpXHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3QWN0aXZlSWRzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgICAgICAgIHguYWN0aXZlS2V5cy5tYXAoKGspID0+IHtcclxuICAgICAgICAgICAgICAgIG5ld0FjdGl2ZUlkcy5wdXNoKE51bWJlcihrKSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJZHMgPSBuZXdBY3RpdmVJZHM7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlICE9PSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmFjdGl2ZUlkcztcclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5hY3RpdmVJZHMpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5ID0geC5zZWxlY3RlZEtleTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuc2VhcmNoJFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZmlsdGVyKCh4KSA9PiB4ICE9PSBudWxsKSxcclxuICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgIHN3aXRjaE1hcCgodGV4dCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3dpdGNoTWFwIHdvcmtzJyk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAvLyBBVUcgMjAyNCBORVcgOiBNVVNUIEJFIFRFU1RFRFxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNb2RlID09PSBFbnVtQ29yZU9yZ1RyZWVhU2VhcmNoTW9kZS5ISUdITElHSFQpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLmZpbmRJdGVtKHRleHQsIHRoaXMuZGF0YSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMucmVjdXJzaXZlU2VydmljZS5yZWR1Y2luZ0ZpbHRlcih0aGlzLnNjcm9sbENvbnRhaW5lciwgdGV4dCkpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuc2VhcmNoTW9kZSA9PT0gRW51bUNvcmVPcmdUcmVlYVNlYXJjaE1vZGUuUkVEVUNFKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuZGF0YUZpbHRlcmVkID0geCBhcyBJT3JnVHJlZUl0ZW1bXTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJFxyXG4gICAgICAgIC5waXBlKGZpbHRlcigodmFsdWUpID0+ICEhIXRoaXMuaW5pdGlhbGl6aW5nICYmICEhdmFsdWUpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIGlmICghIWxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY29yZU9yZ1RyZWVTdGF0dXMnLCBKU09OLnN0cmluZ2lmeSh4KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoKHgpID0+ICh0aGlzLmxhbmcgPSB4KSkpO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0KCk6IHZvaWQge1xyXG5cclxuICAgIC8vIGhlaWdodCBpcyBub3QgZ2l2ZW4gYW5kIHRoZSB0cmVlIHJlc2l6ZSBhcyBzdGFuZGFyZFxyXG4gICAgaWYgKCEhIXRoaXMuaGVpZ2h0KSB7XHJcbiAgICAgIGNvbnN0IHNpemVIZWFkZXJIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWhlYWRlci1oZWlnaHQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHNpemVDb3JlUGFnZUhlYWRlckhlaWdodCA9IE51bWJlcihcclxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdlLWhlYWRlci1oZWlnaHQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBzaXplSGVhZGVySGVpZ2h0IC0gc2l6ZUNvcmVQYWdlSGVhZGVySGVpZ2h0O1xyXG5cclxuICAgICAgY29uc3QgcGFnZUhlYWRlckhlaWdodCA9IE51bWJlcihcclxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdlLWhlYWRlci1oZWlnaHQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBwYWdpbmF0aW9uSGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1jb3JlLXBhZ2luYXRpb24taGVpZ2h0JylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBzaXplTWFyZ2luQ29yZVBhZ2luYXRpb25GdWxsID0gTnVtYmVyKFxyXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1tYXJnaW4tY29yZS1wYWdpbmF0aW9uJylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG5cclxuXHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IGNvbnRhaW5lckhlaWdodCAtIHBhZ2VIZWFkZXJIZWlnaHQgLSBwYWdpbmF0aW9uSGVpZ2h0ICsgc2l6ZU1hcmdpbkNvcmVQYWdpbmF0aW9uRnVsbDtcclxuICAgICAgY29uc29sZS5sb2coaGVpZ2h0KTtcclxuXHJcbiAgICAgIHRoaXMuY29udGFpbmVyPy5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICctLWhlaWdodCcsIGhlaWdodCArICdweCdcclxuICAgICAgKTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAnLS1oZWlnaHQnLCB0aGlzLmhlaWdodCArICdweCdcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uub3JnVHJlZURhdGEkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kYXRhID0geDtcclxuICAgICAgICAgIC8vdGhpcy5kYXRhRmlsdGVyZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHgpKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwibmV3IERhdGEgY29taW5nXCIsIHRoaXMuZGF0YSwgbmV3IERhdGUoKS5nZXRUaW1lKCkpXHJcbiAgICAgICAgICBpZiAoISF0aGlzLmRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5kYXRhLmxlbmd0aCkgdGhpcy5kYXRhWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25JdGVtQ2xpY2tMb2NhbChlOiBJT3JnVHJlZUl0ZW0pOiB2b2lkIHtcclxuICAgIHRoaXMubGlubmVyT3JnQXJyYXkubWFwKCh4KSA9PiAoeC5hY3RpdmUgPSBmYWxzZSkpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmJ1aWxkVHJlZURhdGEoKSk7XHJcbiAgfVxyXG5cclxuICBvblRvZ2dsZUl0ZW0oZTogSU9yZ1RyZWVJdGVtKSB7XHJcbiAgICBjb25zdCBjbG9uZUNvcHk6IElPcmdUcmVlTGluZXJJdGVtW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmxpbm5lck9yZ0FycmF5KVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGZpbHRlciA9IGNsb25lQ29weS5maWx0ZXIoKHgpID0+IHguaWQgPT09IGUuaWQpO1xyXG5cclxuICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIGZpbHRlclswXS5leHBhbmQgPSAhISFlLmV4cGFuZDtcclxuICAgIH1cclxuICAgIHRoaXMubGlubmVyT3JnQXJyYXkgPSBjbG9uZUNvcHk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYnVpbGRUcmVlRGF0YSgpKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkVHJlZURhdGEoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IGNsb25lQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5saW5uZXJPcmdBcnJheSkpO1xyXG5cclxuICAgIGlmICh0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAvLyBDcmVhdGUgYSBuZXdcclxuXHJcbiAgICAgIGNvbnNvbGUubG9nKFwi8J+fovCfn6IgV29ya2VyIHdvcmtzXCIpO1xyXG5cclxuICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0KTtcclxuICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCAoeyBkYXRhIH0pID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhLmxpc3Q7XHJcbiAgICAgICAgLy90aGlzLmRhdGFGaWx0ZXJlZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YS5saXN0KSk7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhPy5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgIGxpc3Q6IGNsb25lQ29weSxcclxuICAgICAgICBrZXlGaWVsZDogJ2lkJyxcclxuICAgICAgICB0aXRsZUZpZWxkOiAnbmFtZScsXHJcbiAgICAgICAgcGFyZW50RmllbGQ6ICdwYXJlbnRJZCcsXHJcbiAgICAgICAgYWN0aXZlRmllbGQ6ICdhY3RpdmUnLFxyXG4gICAgICAgIC8vaW5oZXJpdGFudEFjdGl2ZUZpZWxkOiAnaW5oZXJpdGFudEFjdGl2ZScsXHJcbiAgICAgICAgY2hlY2tlZEZpZWxkOiAnY2hlY2tlZCcsXHJcbiAgICAgICAgZXhwYW5kZWRGaWVsZDogJ2V4cGFuZCcsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gV2ViIHdvcmtlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC5cclxuICAgICAgLy8gWW91IHNob3VsZCBhZGQgYSBmYWxsYmFjayBzbyB0aGF0IHlvdXIgcHJvZ3JhbSBzdGlsbCBleGVjdXRlcyBjb3JyZWN0bHkuXHJcbiAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlO1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2VcclxuICAgICAgICAgIC5saW5lckFycmF5VG9OZXN0ZWRBcnJheShcclxuICAgICAgICAgICAgY2xvbmVDb3B5LFxyXG4gICAgICAgICAgICAnaWQnLFxyXG4gICAgICAgICAgICAnbmFtZScsXHJcbiAgICAgICAgICAgICdwYXJlbnRJZCcsXHJcbiAgICAgICAgICAgICdhY3RpdmUnLFxyXG4gICAgICAgICAgICAnY2hlY2tlZCcsXHJcbiAgICAgICAgICAgICdleHBhbmQnLFxyXG4gICAgICAgICAgICAvL3N0YXR1c1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgob2JqKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IG9iai5saXN0O1xyXG4gICAgICAgICAgICAvL3RoaXMuZGF0YUZpbHRlcmVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmoubGlzdCkpO1xyXG4gICAgICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGE/Lmxlbmd0aCkgdGhpcy5kYXRhWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkV4cGFuZFRvZ2dsZXJDbGljayhlOiBJT3JnVHJlZUl0ZW0sIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICFlLnRyZWUkRXhwYW5kZWQ7XHJcbiAgICBlLnRyZWUkRXhwYW5kZWQgPSBuZXdWYWx1ZTtcclxuXHJcbiAgICAvLyB1cGRhdGluZyBzdGF0dXMgd2l0aCBuZXdWYWx1ZVxyXG4gICAgY29uc3QgY3VycmVudEV4cGFuZGVkSWRzID1cclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWU/LmV4cGFuZGVkS2V5cztcclxuICAgIGxldCBuZXdFeHBhbmRlZElkcyA9IGN1cnJlbnRFeHBhbmRlZElkcz8uZmlsdGVyKFxyXG4gICAgICAoXykgPT4gISEhY3VycmVudEV4cGFuZGVkSWRzLmluY2x1ZGVzKGUuaWQudG9TdHJpbmcoKSlcclxuICAgICk7XHJcblxyXG4gICAgaWYgKG5ld1ZhbHVlKSB7XHJcbiAgICAgIG5ld0V4cGFuZGVkSWRzPy5wdXNoKGUuaWQudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3RXhwYW5kZWRJZHM/LnNvcnQoKTtcclxuXHJcbiAgICBjb25zdCBuZXdFeHBhbmRlZEtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBuZXdFeHBhbmRlZElkcy5tYXAoKHgpID0+IG5ld0V4cGFuZGVkS2V5cy5wdXNoKHgudG9TdHJpbmcoKSkpO1xyXG5cclxuICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLm5leHQoe1xyXG4gICAgICAuLi50aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSEsXHJcbiAgICAgIGV4cGFuZGVkS2V5czogbmV3RXhwYW5kZWRLZXlzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1DaGVjayhlOiBJT3JnVHJlZUl0ZW0sIG5ld1ZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLml0ZW1DbGljaz8uZW1pdChlKTtcclxuICAgIGlmICh0aGlzLmFjY2Vzc29yTW9kZSAhPT0gRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5DSEVDS0VEKSByZXR1cm47XHJcblxyXG4gICAgLy8gV2UgaGF2ZSB0aGlzIHZhciB0byBob2xkIG5vZGVzIHRoYXQgYXJlIGJlaW5nIGNoYW5nZWRcclxuICAgIGxldCB0b2dnbGVkSWRzOiBudW1iZXJbXTtcclxuICAgIC8vIFdlIHNob3VsZCBjYWxjdWxhdGUgYSBuZXcgc3RhdGUgaW50byB0aGlzIHZhcjogXHJcbiAgICBjb25zdCBuZXdDaGVja2VkSWRzOiBudW1iZXJbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jaGVja2VkSWRzKSk7XHJcblxyXG4gICAgLy8gV2Ugd2lsbCBjYWxsIHRoaXMgZnVuY3Rpb24gYWZ0ZXIgdG9nZ2xlZElkcyBjaGFuZ2VkXHJcbiAgICBjb25zdCBjaGFuZ2VWYWx1ZSA9ICgpID0+IHtcclxuXHJcbiAgICAgIC8vIElmIG5ld1ZhbHVlID09PSB0cnVlLCB3ZSB3aWxsIGRpc2N0aW50bHkgcHVzaCBjaGFuZ2VkIGlkcyB0byB0aGUgc3RhdGVcclxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHdpbGwgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgc3RhdGVcclxuICAgICAgaWYgKCEhbmV3VmFsdWUpIHtcclxuICAgICAgICB0b2dnbGVkSWRzLm1hcCh4ID0+IHtcclxuICAgICAgICAgIGlmICghISFuZXdDaGVja2VkSWRzLmluY2x1ZGVzKHgpKSB7XHJcbiAgICAgICAgICAgIG5ld0NoZWNrZWRJZHMucHVzaCh4KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC8vIFRoZW4gYXNpZ24gdGhlIHN0YXRlIHRvIHRoZSBuZXdDaGVja2VkSWRzXHJcbiAgICAgICAgdGhpcy5jaGVja2VkSWRzID0gbmV3Q2hlY2tlZElkcztcclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3Q2hlY2tlZElkcy5maWx0ZXIoeCA9PiAhISF0b2dnbGVkSWRzLmluY2x1ZGVzKHgpKVxyXG4gICAgICAgIC8vIFRoZW4gYXNpZ24gdGhlIHN0YXRlIHRvIHRoZSBmaWx0ZXJcclxuICAgICAgICB0aGlzLmNoZWNrZWRJZHMgPSBmaWx0ZXI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFmdGVyIHRoZSBjYXNlcyBvZiBpZi9lbHNlLCBtYWtlIHRoZSBjb250cm9sIGNoYW5nZSB3aXRoIG9uQ2hhbmdlXHJcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNoZWNrZWRJZHM7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5jaGVja2VkSWRzKTtcclxuICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogc3RhcnQ6IFRISVMgQ09ERSBTQ09QRSBjYWxjdWxhdGVzIHRvZ2dsZWRJZHMgKi9cclxuICAgIGlmICh0aGlzLmNoZWNrSW5oZXJpdGFuY2UpIHtcclxuICAgICAgLy8gSWYgdHJ1ZSwgYWxsIHRoZSBuZXN0ZWQgaXRlbXMgd2lsbCBiZSBjaGVja2VkL3VuY2hlY2tlZFxyXG4gICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2VcclxuICAgICAgICAubmVzdGVkVG9nZ2xlQ2hlY2soZSwgbmV3VmFsdWUpXHJcbiAgICAgICAgLnRoZW4oKHgpID0+IHtcclxuXHJcbiAgICAgICAgICBsZXQgY3VycmVudENoZWNrZWRLZXlzID0gdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUuY2hlY2tlZEtleXMgfHwgW107XHJcblxyXG4gICAgICAgICAgaWYgKCEhbmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgeC5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoaSA9PiBpID09PSBpdGVtLnRvU3RyaW5nKCkpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudENoZWNrZWRLZXlzLnB1c2goaXRlbS50b1N0cmluZygpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cyA9IGN1cnJlbnRDaGVja2VkS2V5cy5maWx0ZXIoaSA9PiAheC5pbmNsdWRlcyhOdW1iZXIoaSkpKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSxcclxuICAgICAgICAgICAgY2hlY2tlZEtleXM6IGN1cnJlbnRDaGVja2VkS2V5cy8veC5tYXAoaXRlbSA9PiBpdGVtLnRvU3RyaW5nKCkpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLy8gVGhlIGlkcyBoYXZlIGJlZW4gY2hhbmdlZFxyXG4gICAgICAgICAgdG9nZ2xlZElkcyA9IHg7XHJcblxyXG4gICAgICAgICAgLy8gTm93IHRvZ2dsZWRJZHMgd2VyZSBzZXQuIFdlIGNhbGwgdGhlIGZ1bmN0aW9uIHdlIGRlY2xhcmVkXHJcbiAgICAgICAgICBjaGFuZ2VWYWx1ZSgpO1xyXG5cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5jYXRjaCgoeDogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHNpbXBseSB0b2dnbGUgY2hlY2sgZm9yIGN1cnJlbnQgaXRlbSBvbmx5XHJcbiAgICAgIHRvZ2dsZWRJZHMgPSBbZS5pZF07XHJcblxyXG4gICAgICAvLyBOb3cgdG9nZ2xlZElkcyB3ZXJlIHNldC4gV2UgY2FsbCB0aGUgZnVuY3Rpb24gd2UgZGVjbGFyZWRcclxuICAgICAgY2hhbmdlVmFsdWUoKTtcclxuXHJcbiAgICB9XHJcbiAgICAvKiBlbmQ6IFRISVMgQ09ERSBTQ09QRSBjYWxjdWxhdGVzIHRvZ2dsZWRJZHMgKi9cclxuXHJcbiAgICAvLyBUaGF0IGlzLiBIYXBweSBkZWJ1Z2dpbmchXHJcblxyXG4gIH1cclxuXHJcbiAgb25DaGVja0luY2x1ZGVEaXNzb2x2ZWRDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGNvbnNvbGUubG9nKFwib25DaGVja0luY2x1ZGVEaXNzb2x2ZWRDaGFuZ2VcIiwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25DaGVja0luaGVyaXRhbmNlQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICBjaGVja0luaGVyaXRhbmNlOiB2YWx1ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25PYmplY3RDbGljayhlOiBJT3JnVHJlZUl0ZW0sIGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuXHJcbiAgICAvLyByZW1vdmUgaGlnaGxpZ2h0IGNsYXNzXHJcbiAgICAvLyBUTyBET1xyXG5cclxuICAgIGlmICghIWUucHJvdGVjdGVkKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5pdGVtQ2xpY2s/LmVtaXQoZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlID09PSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHJldHVybjtcclxuICAgIGxldCBhY3RpdmVJZHM6IG51bWJlcltdID0gW107XHJcbiAgICB0aGlzLmRhdGEubWFwKChpdGVtKSA9PiAoaXRlbS5hY3RpdmUgPSBmYWxzZSkpO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmFjY2Vzc29yTW9kZSA9PT1cclxuICAgICAgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfSU5IRVJJVEFOQ0UgfHxcclxuICAgICAgISEhdGhpcy5hY2Nlc3Nvck1vZGVcclxuICAgICkge1xyXG4gICAgICAvLyBJZiB0cnVlLCBhbGwgdGhlIG5lc3RlZCBpdGVtcyB3aWxsIGJlIGFjdGl2ZSwgdGhlIG90aGVycyBhcmUgaW5hY3RpdmVcclxuICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXHJcbiAgICAgICAgLm5lc3RlZFJlc2V0QWN0aXZlKGUsIHRydWUpXHJcbiAgICAgICAgLnRoZW4oKHgpID0+IHtcclxuICAgICAgICAgIGFjdGl2ZUlkcyA9IHg7XHJcbiAgICAgICAgICBhY3RpdmVJZHMuc29ydCgpO1xyXG4gICAgICAgICAgY29uc3QgbmV3QWN0aXZlS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgIGFjdGl2ZUlkcy5tYXAoKHgpID0+IG5ld0FjdGl2ZUtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSEsXHJcbiAgICAgICAgICAgIGFjdGl2ZUtleXM6IG5ld0FjdGl2ZUtleXMsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkS2V5OiBlLmlkLnRvU3RyaW5nKClcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVJZHMgPSBhY3RpdmVJZHM7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmFjdGl2ZUlkcyk7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKGFjdGl2ZUlkcyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcih4KTtcclxuICAgICAgICB9KTtcclxuXHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIEFDVElWQVRFRF9TSU5HTEVcclxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHNpbXBseSBzZXQgY3VycmVudCBpdGVtIHRvIGJlIGFjdGl2ZSBvbmx5XHJcbiAgICAgIGFjdGl2ZUlkcyA9IFtlLmlkXTtcclxuICAgICAgdGhpcy5hY3RpdmVJZHMgPSBhY3RpdmVJZHM7XHJcblxyXG4gICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgICAuLi50aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZSEsXHJcbiAgICAgICAgYWN0aXZlS2V5czogW2UuaWQudG9TdHJpbmcoKV0sXHJcbiAgICAgICAgc2VsZWN0ZWRLZXk6IGUuaWQudG9TdHJpbmcoKSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm9uQ2hhbmdlKGFjdGl2ZUlkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50O1xyXG5cclxuICAgIGlmIChkZXRhaWwgPT09IDIpIHtcclxuICAgICAgY29uc29sZS5sb2coJ1RoaXMgd2FzIGEgZGJsY2xpY2snKTtcclxuICAgICAgdGhpcy5pdGVtRG91YmxlQ2xpY2suZW1pdChlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGU7XHJcblxyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hDaGFuZ2UodGV4dDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlYXJjaCQubmV4dCh0ZXh0KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwibmdBZnRlckNvbnRlbnRJbml0XCIpXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoKHgpID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG5cclxuICAgIGlmICghIXRoaXMuaW5zdGFuY2VOdW1iZXIpIHtcclxuICAgICAgY29uc3QgdHJ5VG9GaW5kID0gdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoXHJcbiAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuaW5zdGFuY2VOdW1iZXJcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghIXRyeVRvRmluZC5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBuZXdJbnN0YW5jZXMgPSB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyICE9PSB0aGlzLmluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2UuaW5zdGFuY2VzID0gbmV3SW5zdGFuY2VzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtb3JnLXRyZWUtY29udGFpbmVyXCIgW2NsYXNzLmZ1bGwtd2lkdGhdPVwiISFmdWxsV2lkdGhNb2RlXCIgKm5nSWY9XCIhIWRhdGFcIiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgcG9zaXRpb24gOiAncmVsYXRpdmUnLFxyXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQgKyAncHgnXHJcbiAgICB9XCI+XHJcbiAgICA8ZGl2ICNkaXNwbGF5Q29udGVudCBjbGFzcz1cImN1c3RvbS1vcmctdHJlZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb3JlLW9yZy10cmVlLWhlYWRlciBkLWZsZXgtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibTVcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hcIiAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGU6IGxhbmdcIiBbY2xhc3MuZnVsbC13aWR0aF09XCIhIWZ1bGxXaWR0aE1vZGVcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICNzY3JvbGxDb250YWluZXIgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLSBsYXlvdXRTZXJ2aWNlLmNvcmVPcmdUcmVlVG9wSGVpZ2h0IC0gbGF5b3V0U2VydmljZS5jb3JlT3JnVHJlZUJvdHRvbUhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ3Njcm9sbCdcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIDxjb3JlLWxvYWRpbmctc3VyZmFjZSBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2hlaWdodF09XCJzY3JvbGxDb250YWluZXJIZWlnaHRcIj48L2NvcmUtbG9hZGluZy1zdXJmYWNlPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBAZm9yIChyb290IG9mIGRhdGFGaWx0ZXJlZDsgdHJhY2sgcm9vdCkgeyAtLT5cclxuICAgICAgICAgICAgICAgIEBmb3IgKHJvb3Qgb2YgZGF0YTsgdHJhY2sgcm9vdCkge1xyXG4gICAgICAgICAgICAgICAgQGRlZmVyKG9uIHZpZXdwb3J0KHNjcm9sbENvbnRhaW5lcikpIHtcclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInJvb3RcIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhIXJvb3QudHJlZSRFeHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IHJvb3QgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIH0gQHBsYWNlaG9sZGVyKCkge1xyXG4gICAgICAgICAgICAgICAgUGxhY2Vob2xkZXIuLi5cclxuICAgICAgICAgICAgICAgIH0gQGxvYWRpbmcoKSB7XHJcbiAgICAgICAgICAgICAgICBMb2FkaW5nLi4uXHJcbiAgICAgICAgICAgICAgICB9IEBlcnJvcigpIHtcclxuICAgICAgICAgICAgICAgIEVycm9yLi4uXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICAgICAgICAgICAgICBib3R0b206ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgbGVmdDogJzBweCcsXHJcbiAgICAgICAgICAgICAgICByaWdodDogJzBweCcsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IGxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogbGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgbGluZUhlaWdodDogbGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbidcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBsYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXHJcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJ1xyXG4gICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNoZWNrYm94IFsobmdNb2RlbCldPVwic2hvd0Rpc3NvbHZlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoZWNrSW5jbHVkZURpc3NvbHZlZENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidVSS5DT1JFX09SR19UUkVFLlNIT1dfT1VUREFURURfVU5JVFNfQUJCUkVWSUFURUQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIidVSS5DT1JFX09SR19UUkVFLlNIT1dfT1VUREFURURfVU5JVFMnXCIgdG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIj48L2NvcmUtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrLWluaGVyaXRhbmNlLXdyYXBwZXJcIiAqbmdJZj1cImFjY2Vzc29yTW9kZSA9PT0gJ0NIRUNLRUQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNoZWNrYm94ICpuZ0lmPVwic2hvd0NoZWNrSW5oZXJpdGFuY2VcIiBbKG5nTW9kZWwpXT1cImNoZWNrSW5oZXJpdGFuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja0luaGVyaXRhbmNlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiJ1VJLkNPUkVfT1JHX1RSRUUuQ0hFQ0tfSU5IRVJJVEFOQ0UnXCI+PC9jb3JlLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtIGxldC1jb250ZXh0PVwiY29udGV4dFwiIGxldC1pZD1cImNvbnRleHQuaWRcIiBsZXQtdGl0bGU9XCJjb250ZXh0LnRyZWUkVGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgbGV0LWhpZ2hsaWdodGVkPVwiY29udGV4dC50cmVlJEhpZ2hsaWdodGVkXCIgbGV0LWhhc0NoaWxkcmVuPVwiY29udGV4dC50cmVlJEhhc0NoaWxkcmVuXCJcclxuICAgICAgICAgICAgICAgIGxldC1oYXNBY3RpdmVDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNBY3RpdmVDaGlsZHJlblwiIGxldC1jaGlsZHJlbj1cImNvbnRleHQudHJlZSRDaGlsZHJlblwiXHJcbiAgICAgICAgICAgICAgICBsZXQtZXhwYW5kZWQ9XCJjb250ZXh0LnRyZWUkRXhwYW5kZWRcIiBsZXQtaXNBY3RpdmU9XCJjb250ZXh0LmlzQWN0aXZlXCIgbGV0LWFjdGl2ZT1cImNvbnRleHQudHJlZSRBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgbGV0LWNoZWNrZWQ9XCJjb250ZXh0LnRyZWUkQ2hlY2tlZFwiIGxldC1wcm90ZWN0ZWQ9XCJjb250ZXh0LnByb3RlY3RlZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgIEBpZiAoKCFzaG93RGlzc29sdmVkICYmICEhaXNBY3RpdmUpIHx8ICghIXNob3dEaXNzb2x2ZWQpKSB7XHJcbiAgICAgICAgICAgICAgICA8bGkgW2NsYXNzLmhhcy1jaGlsZHJlbl09XCIhIWhhc0NoaWxkcmVuXCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhIWhhc0NoaWxkcmVuICYmICEhIWV4cGFuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAoY2xpY2spPVwiYWNjZXNzb3JNb2RlICE9PSAnQ0hFQ0tFRCcgPyBvbk9iamVjdENsaWNrKGNvbnRleHQsICRldmVudCkgOiAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvbk9iamVjdENsaWNrKGNvbnRleHQsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICgoISFzaG93RGlzc29sdmVkICYmICEhaGFzQ2hpbGRyZW4pIHx8ICghc2hvd0Rpc3NvbHZlZCAmJiAhIWhhc0FjdGl2ZUNoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImV4cGFuZC10b2dnbGVyIGN1c3RvbS1pY29uLXBhcmVudC1kb3duXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkV4cGFuZFRvZ2dsZXJDbGljayhjb250ZXh0LCAkZXZlbnQpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWNjZXNzb3JNb2RlID09PSAnQ0hFQ0tFRCcgJiYgIXByb3RlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29yZS1jaGVja2JveCAob25DbGljayk9XCJvbkl0ZW1DaGVjayhjb250ZXh0LCAkZXZlbnQpXCIgW2lucHV0VmFsdWVdPVwiY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj48L2NvcmUtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG9iamVjdCBbY2xhc3MuYWN0aXZlXT1cImFjY2Vzc29yTW9kZSAhPSAnQ0hFQ0tFRCcgJiYgc2VsZWN0ZWRLZXk9PT1pZC50b1N0cmluZygpXCIgW2NsYXNzLmhpZ2hsaWdodGVkXT1cImhpZ2hsaWdodGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNzb2x2ZWRdPVwiIWlzQWN0aXZlXCIgW2NsYXNzLnByb3RlY3RlZF09XCJwcm90ZWN0ZWRcIiBbYXBwVG9vbHRpcF09XCJ0aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGl0bGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9vYmplY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoISFjaGlsZHJlbi5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICA8dWwgW2NsYXNzLmNvbGxhcHNlZF09XCIgISEhZXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgY2hpbGRyZW47IHRyYWNrICRpbmRleCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKCEhZXhwYW5kZWQgfHwgISFmdWxsUmVuZGVyaW5nKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbTsgY29udGV4dDogeyBjb250ZXh0OiBjaGlsZCB9XCI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUNvcmVUYWJsZUNvbHVtbkl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS10YWJsZS9JQ29yZVRhYmxlQ29sdW1uSXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBFbnVtU29ydERpcmVjdGlvbiB9IGZyb20gXCIuLi8uLi9lbnVtL0VudW1Tb3J0RGlyZWN0aW9uXCI7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFbnVtQ29yZVRhYmxlUGlwZVR5cGUgfSBmcm9tIFwiLi9FbnVtQ29yZVRhYmxlUGlwZVR5cGVcIjtcclxuaW1wb3J0IHsgRW51bUNvcmVTZWVrZXJDb2x1bW5Db250cmFjdCwgRW51bUNvcmVTZWVrZXJDb2x1bW5Kb2IsIEVudW1Db3JlU2Vla2VyQ29sdW1uUG9zaXRpb24sIEVudW1Db3JlU2Vla2VyQ29sdW1uUG9zaXRpb25Db25jdXJyZW50LCBFbnVtQ29yZVNlZWtlckNvbHVtblN0YWZmUHJvZmlsZSwgRW51bUNvcmVTZWVrZXJDb2x1bW5XYWdlLCBFbnVtQ29yZVNlZWtlckNvbHVtbldvcmtpbmcgfSBmcm9tIFwiLi4vY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL0VudW1Db3JlU2Vla2VyQ29sdW1uXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlVGFibGVDb2x1bW5JdGVtIHtcclxuICAgIGNhcHRpb246IEVudW1UcmFuc2xhdGVLZXkgfCBzdHJpbmc7XHJcbiAgICBmaWVsZDogc3RyaW5nO1xyXG4gICAgaGVhZGVyR3JvdXA/OiBFbnVtVHJhbnNsYXRlS2V5IHwgc3RyaW5nO1xyXG4gICAgdHlwZTogc3RyaW5nO1xyXG4gICAgc2hvd0ZvckNvbmZpcm1hdGlvbj86IGJvb2xlYW47XHJcbiAgICBzZWFyY2g/OiBzdHJpbmc7XHJcbiAgICBwaXBlPzogRW51bUNvcmVUYWJsZVBpcGVUeXBlO1xyXG4gICAgYWxpZ246IHN0cmluZztcclxuICAgIHJlYWRvbmx5PzogYm9vbGVhbjtcclxuICAgIHdpZHRoPzogbnVtYmVyO1xyXG4gICAgaGlkZGVuPzogYm9vbGVhbjtcclxuICAgIGhpZGVTZWFyY2hCb3g/OiBib29sZWFuO1xyXG4gICAgc29ydERpcmVjdGlvbj86IEVudW1Tb3J0RGlyZWN0aW9uO1xyXG4gICAgdGVtcGxhdGVSZWY/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgdGVtcGxhdGVSZWZBbGxvd0VkaXRPblJvd0FjdGl2ZWQ/OiBib29sZWFuO1xyXG4gICAgdHJhbnNsYXRlPzogYm9vbGVhbjtcclxuICAgIGpvYlNlZWtlckNvbHVtbkNvZGU/OiBFbnVtQ29yZVNlZWtlckNvbHVtbkpvYjtcclxuICAgIGVtcGxveWVlU2Vla2VyQ29sdW1uQ29kZT86IEVudW1Db3JlU2Vla2VyQ29sdW1uU3RhZmZQcm9maWxlO1xyXG4gICAgd2FnZVNlZWtlckNvbHVtbkNvZGU/OiBFbnVtQ29yZVNlZWtlckNvbHVtbldhZ2U7XHJcbiAgICB3b3JraW5nU2Vla2VyQ29sdW1uQ29kZT86IEVudW1Db3JlU2Vla2VyQ29sdW1uV29ya2luZztcclxuICAgIGNvbnRyYWN0U2Vla2VyQ29sdW1uQ29kZT86IEVudW1Db3JlU2Vla2VyQ29sdW1uQ29udHJhY3Q7XHJcbiAgICBwb3NpdGlvblNlZWtlckNvbHVtbkNvZGU/OiBFbnVtQ29yZVNlZWtlckNvbHVtblBvc2l0aW9uO1xyXG4gICAgcG9zaXRpb25Db25jdXJyZW50U2Vla2VyQ29sdW1uQ29kZT86IEVudW1Db3JlU2Vla2VyQ29sdW1uUG9zaXRpb25Db25jdXJyZW50O1xyXG59Il19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSUNvcmVUYWJsZUNvbHVtbkl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS10YWJsZS9JQ29yZVRhYmxlQ29sdW1uSXRlbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBFbnVtU29ydERpcmVjdGlvbiB9IGZyb20gXCIuLi8uLi9lbnVtL0VudW1Tb3J0RGlyZWN0aW9uXCI7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBFbnVtQ29yZVRhYmxlUGlwZVR5cGUgfSBmcm9tIFwiLi9FbnVtQ29yZVRhYmxlUGlwZVR5cGVcIjtcclxuaW1wb3J0IHsgRW51bUNvcmVTZWVrZXJDb2x1bW5Db250cmFjdCwgRW51bUNvcmVTZWVrZXJDb2x1bW5Kb2IsIEVudW1Db3JlU2Vla2VyQ29sdW1uUG9zaXRpb24sIEVudW1Db3JlU2Vla2VyQ29sdW1uUG9zaXRpb25Db25jdXJyZW50LCBFbnVtQ29yZVNlZWtlckNvbHVtblN0YWZmUHJvZmlsZSwgRW51bUNvcmVTZWVrZXJDb2x1bW5XYWdlLCBFbnVtQ29yZVNlZWtlckNvbHVtbldvcmtpbmcgfSBmcm9tIFwiLi4vY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL0VudW1Db3JlU2Vla2VyQ29sdW1uXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlVGFibGVDb2x1bW5JdGVtIHtcclxuICAgIGNhcHRpb246IEVudW1UcmFuc2xhdGVLZXkgfCBzdHJpbmc7XHJcbiAgICBmaWVsZDogc3RyaW5nO1xyXG4gICAgaGVhZGVyR3JvdXA/OiBFbnVtVHJhbnNsYXRlS2V5IHwgc3RyaW5nO1xyXG4gICAgdHlwZTogc3RyaW5nO1xyXG4gICAgc2hvd0ZvckNvbmZpcm1hdGlvbj86IGJvb2xlYW47XHJcbiAgICBzZWFyY2g/OiBzdHJpbmc7XHJcbiAgICBwaXBlPzogRW51bUNvcmVUYWJsZVBpcGVUeXBlO1xyXG4gICAgYWxpZ246IHN0cmluZztcclxuICAgIHJlYWRvbmx5PzogYm9vbGVhbjtcclxuICAgIHdpZHRoPzogbnVtYmVyO1xyXG4gICAgaGlkZGVuPzogYm9vbGVhbjtcclxuICAgIGhpZGVTZWFyY2hCb3g/OiBib29sZWFuO1xyXG4gICAgc29ydERpcmVjdGlvbj86IEVudW1Tb3J0RGlyZWN0aW9uO1xyXG4gICAgc29ydERpc2FibGVkPzogYm9vbGVhbjtcclxuICAgIHRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIHRlbXBsYXRlUmVmQWxsb3dFZGl0T25Sb3dBY3RpdmVkPzogYm9vbGVhbjtcclxuICAgIHRyYW5zbGF0ZT86IGJvb2xlYW47XHJcbiAgICBqb2JTZWVrZXJDb2x1bW5Db2RlPzogRW51bUNvcmVTZWVrZXJDb2x1bW5Kb2I7XHJcbiAgICBlbXBsb3llZVNlZWtlckNvbHVtbkNvZGU/OiBFbnVtQ29yZVNlZWtlckNvbHVtblN0YWZmUHJvZmlsZTtcclxuICAgIHdhZ2VTZWVrZXJDb2x1bW5Db2RlPzogRW51bUNvcmVTZWVrZXJDb2x1bW5XYWdlO1xyXG4gICAgd29ya2luZ1NlZWtlckNvbHVtbkNvZGU/OiBFbnVtQ29yZVNlZWtlckNvbHVtbldvcmtpbmc7XHJcbiAgICBjb250cmFjdFNlZWtlckNvbHVtbkNvZGU/OiBFbnVtQ29yZVNlZWtlckNvbHVtbkNvbnRyYWN0O1xyXG4gICAgcG9zaXRpb25TZWVrZXJDb2x1bW5Db2RlPzogRW51bUNvcmVTZWVrZXJDb2x1bW5Qb3NpdGlvbjtcclxuICAgIHBvc2l0aW9uQ29uY3VycmVudFNlZWtlckNvbHVtbkNvZGU/OiBFbnVtQ29yZVNlZWtlckNvbHVtblBvc2l0aW9uQ29uY3VycmVudDtcclxufSJdfQ==