@eui/components 15.3.4-snapshot-1684959284015 → 15.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/docs/components/UxTreeComponent.html +5 -5
  2. package/docs/components/UxTreeNodeComponent.html +1 -1
  3. package/docs/dependencies.html +2 -2
  4. package/docs/js/menu-wc.js +3 -3
  5. package/docs/js/menu-wc_es5.js +1 -1
  6. package/docs/js/search/search_index.js +2 -2
  7. package/docs/miscellaneous/variables.html +14 -14
  8. package/docs/modules/UxTreeComponentModule.html +0 -9
  9. package/esm2020/eui-timepicker/eui-timepicker.component.mjs +4 -1
  10. package/esm2020/legacy/ux-dropdown-tree/ux-dropdown-tree.component.mjs +2 -2
  11. package/esm2020/legacy/ux-tree/ux-tree.component.mjs +18 -23
  12. package/eui-timepicker/eui-timepicker.component.d.ts.map +1 -1
  13. package/fesm2015/eui-components-eui-timepicker.mjs +3 -0
  14. package/fesm2015/eui-components-eui-timepicker.mjs.map +1 -1
  15. package/fesm2015/eui-components-legacy-ux-dropdown-tree.mjs +2 -2
  16. package/fesm2015/eui-components-legacy-ux-dropdown-tree.mjs.map +1 -1
  17. package/fesm2015/eui-components-legacy-ux-tree.mjs +17 -22
  18. package/fesm2015/eui-components-legacy-ux-tree.mjs.map +1 -1
  19. package/fesm2020/eui-components-eui-timepicker.mjs +3 -0
  20. package/fesm2020/eui-components-eui-timepicker.mjs.map +1 -1
  21. package/fesm2020/eui-components-legacy-ux-dropdown-tree.mjs +2 -2
  22. package/fesm2020/eui-components-legacy-ux-dropdown-tree.mjs.map +1 -1
  23. package/fesm2020/eui-components-legacy-ux-tree.mjs +17 -22
  24. package/fesm2020/eui-components-legacy-ux-tree.mjs.map +1 -1
  25. package/legacy/ux-tree/ux-tree.component.d.ts +1 -2
  26. package/legacy/ux-tree/ux-tree.component.d.ts.map +1 -1
  27. package/package.json +2 -2
@@ -9,13 +9,12 @@ import { UxTemplateDirective } from '@eui/components/legacy/common/ux-directives
9
9
  import { UxToolbarFilterComponentModule } from '@eui/deprecated/ux-a-toolbar-filter';
10
10
  import { UxButtonComponentModule } from '@eui/components/legacy/ux-button';
11
11
  import { UxBadgeComponentModule } from '@eui/components/legacy/ux-badge';
12
- import { EuiIconModule } from '@eui/components/eui-icon';
13
12
  import * as i0 from "@angular/core";
14
13
  import * as i1 from "@angular/router";
15
14
  import * as i2 from "@angular/common";
16
- import * as i3 from "@eui/components/legacy/ux-button";
17
- import * as i4 from "@eui/components/legacy/ux-badge";
18
- import * as i5 from "@eui/components/eui-icon";
15
+ import * as i3 from "@angular/forms";
16
+ import * as i4 from "@eui/components/legacy/ux-button";
17
+ import * as i5 from "@eui/components/legacy/ux-badge";
19
18
  import * as i6 from "@ngx-translate/core";
20
19
  import * as i7 from "@eui/deprecated/ux-a-toolbar-filter";
21
20
  import * as i8 from "@angular/cdk/scrolling";
@@ -181,7 +180,6 @@ export class UxTreeNodeComponent {
181
180
  }
182
181
  }
183
182
  onCheckboxChange(uxLink, evt) {
184
- uxLink.selected = !evt.target.checked;
185
183
  if (this.isRecursiveSelection) {
186
184
  if (!uxLink.selected) {
187
185
  uxLink.indeterminate = false;
@@ -305,10 +303,10 @@ export class UxTreeNodeComponent {
305
303
  }
306
304
  }
307
305
  /** @nocollapse */ UxTreeNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: UxTreeNodeComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
308
- /** @nocollapse */ UxTreeNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: UxTreeNodeComponent, selector: "ux-tree-node", inputs: { expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", templateVariable: "templateVariable", node: "node", nodeContentTemplate: "nodeContentTemplate", e2eAttr: "e2eAttr", isFirst: "isFirst", isLast: "isLast", isRootNode: "isRootNode", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", isShowActiveNode: "isShowActiveNode", isHideToggles: "isHideToggles", isClickSelectingNode: "isClickSelectingNode", highlightPath: "highlightPath", autoTranslate: "autoTranslate", hasSelectAll: "hasSelectAll" }, outputs: { nodeClick: "nodeClick", nodeToggle: "nodeToggle", selectionChange: "selectionChange" }, ngImport: i0, template: "<li\n *ngIf=\"node.visible\"\n class=\"ux-tree__node\"\n [class.first-child]=\"isFirst\"\n [class.last-child]=\"isLast\"\n [class.ux-tree__node--expandable]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__node--disabled]=\"node.disabled\"\n title=\"{{ node.tooltipLabel ? node.tooltipLabel : node.label }}\"\n attr.data-e2e=\"{{ e2eAttr }}\">\n <div class=\"ux-tree__node-wrapper\" [class.ux-tree__node--selected]=\"node.selected\">\n <ux-button\n (click)=\"onNodeToggle($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\"\n styleClass=\"ux-tree__node-toggle-icon\"\n *ngIf=\"hasNodeChildren(node) && !isHideToggles\"\n [isSmall]=\"true\"\n [isFlat]=\"true\"\n [ariaLabel]=\"node.expanded ? 'Collapse' : 'Expand'\"\n [iconClass]=\"node.expanded ? expandedIconClass : collapsedIconClass\"></ux-button>\n\n <span\n *ngIf=\"isMultiselect\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <eui-icon-svg\n *ngIf=\"node.selected && !node.indeterminate\"\n euiPrimary\n icon=\"eui-checkbox\"\n fillColor=\"primary\"\n (click)=\"onCheckboxChange(node, { target: { checked: true } })\"\n aria-label=\"Check\">\n </eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"!node.selected\"\n icon=\"eui-checkbox-outline\"\n fillColor=\"grey-25\"\n (click)=\"onCheckboxChange(node, { target: { checked: false } })\"\n aria-label=\"Uncheck\">\n </eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"node.indeterminate && node.selected\"\n euiPrimary\n icon=\"eui-checkbox-intermediate\"\n fillColor=\"primary\"\n (click)=\"onCheckboxChange(node, { target: { checked: true } })\"\n aria-label=\"Uncheck\">\n </eui-icon-svg>\n </span>\n\n <div\n *ngIf=\"nodeContentTemplate\"\n class=\"ux-tree__custom-content\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <ng-template [ngTemplateOutlet]=\"nodeContentTemplate\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-template>\n </div>\n\n <ng-container *ngIf=\"!nodeContentTemplate\">\n <ng-container *ngIf=\"node.typeLabel || node.iconClass\">\n <span\n *ngIf=\"node.typeLabel\"\n class=\"ux-tree__node-type ux-tree__node-type--{{ node.typeClass }}\"\n [class.ux-tree__node-type-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n {{ node.typeLabel }}\n </span>\n\n <span *ngIf=\"node.iconClass\" class=\"ux-tree__node-icon ux-tree__node-type--{{ node.iconTypeClass }}\">\n <span class=\"{{ node.iconClass }}\"></span>\n </span>\n\n <div class=\"ux-tree__node-label-wrapped\">\n <span\n [class.text-muted]=\"node.disabled\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(node.typeLabel || node.iconClass)\">\n <span\n class=\"ux-tree__node-label\"\n [class.ux-tree__node-label-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n [class.text-muted]=\"node.disabled\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </ng-container>\n\n <div *ngIf=\"node.badges\" class=\"eui-u-ml-auto\">\n <ux-badge\n *ngFor=\"let badge of node.badges\"\n styleClass=\"ux-tree__node-badge\"\n isTiny=\"true\"\n isOutline=\"true\"\n isPill=\"true\"\n typeClass=\"{{ badge.typeClass }}\">\n {{ badge.label }}\n </ux-badge>\n </div>\n\n <span\n *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\"\n class=\"ux-tree__node-metacontent-toggle ux-tree__node-clickable\"\n (click)=\"onMetadataNodeToggle($event, node)\">\n <eui-icon-svg *ngIf=\"node.expanded\" icon=\"eui-chevron-down\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"!node.expanded\" icon=\"eui-chevron-forward\"></eui-icon-svg>\n </span>\n </ng-container>\n </div>\n <ng-container *ngIf=\"node.expanded\">\n <ul *ngIf=\"hasNodeChildren(node)\" class=\"ux-tree__nodes\">\n <ux-tree-node\n *ngFor=\"let subNode of node.children; let isFirst = first; let isLast = last; trackBy: trackByFn\"\n [node]=\"subNode\"\n [isMultiselect]=\"isMultiselect\"\n [isRecursiveSelection]=\"isRecursiveSelection\"\n (nodeClick)=\"onSubNodeClick($event)\"\n (nodeToggle)=\"onSubNodeToggle($event)\"\n (selectionChange)=\"onSelectionChange($event)\"\n [isFirst]=\"isFirst\"\n [isLast]=\"isLast\"\n [isClickTogglingNode]=\"isClickTogglingNode\"\n expandedIconClass=\"{{ expandedIconClass }}\"\n collapsedIconClass=\"{{ collapsedIconClass }}\"\n [templateVariable]=\"templateVariable\"\n [nodeContentTemplate]=\"nodeContentTemplate\"\n [isShowActiveNode]=\"isShowActiveNode\"\n [isHideToggles]=\"isHideToggles\"\n [isClickSelectingNode]=\"isClickSelectingNode\"\n [highlightPath]=\"highlightPath\"\n [isRecursiveParentSelection]=\"isRecursiveParentSelection\"\n [autoTranslate]=\"autoTranslate\">\n </ux-tree-node>\n </ul>\n <div *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\" class=\"ux-tree__node-metacontent\">\n <ng-template [ngTemplateOutlet]=\"templateVariable\" [ngTemplateOutletContext]=\"{ metadata: node.metadata }\"></ng-template>\n </div>\n </ng-container>\n</li>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i3.UxButtonComponent, selector: "ux-button", inputs: ["type", "styleClass", "typeClass", "iconClass", "isOutline", "isSecondary", "isSmall", "isLarge", "isBlock", "isFlat", "isLineWrap", "tabindex", "ariaLabel", "isDisabled", "e2eAttr"] }, { kind: "component", type: i4.UxBadgeComponent, selector: "ux-badge", inputs: ["styleClass", "typeClass", "isSmall", "isLarge", "isTiny", "isTinier", "isPill", "isOutline", "e2eAttr"] }, { kind: "component", type: i5.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "size", "fillColor", "set", "ariaLabelledby", "role", "style", "iconUrl", "aria-label", "ariaHidden", "focusable", "isLoading"] }, { kind: "component", type: UxTreeNodeComponent, selector: "ux-tree-node", inputs: ["expandedIconClass", "collapsedIconClass", "templateVariable", "node", "nodeContentTemplate", "e2eAttr", "isFirst", "isLast", "isRootNode", "isClickTogglingNode", "isMultiselect", "isRecursiveSelection", "isRecursiveParentSelection", "isShowActiveNode", "isHideToggles", "isClickSelectingNode", "highlightPath", "autoTranslate", "hasSelectAll"], outputs: ["nodeClick", "nodeToggle", "selectionChange"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
306
+ /** @nocollapse */ UxTreeNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: UxTreeNodeComponent, selector: "ux-tree-node", inputs: { expandedIconClass: "expandedIconClass", collapsedIconClass: "collapsedIconClass", templateVariable: "templateVariable", node: "node", nodeContentTemplate: "nodeContentTemplate", e2eAttr: "e2eAttr", isFirst: "isFirst", isLast: "isLast", isRootNode: "isRootNode", isClickTogglingNode: "isClickTogglingNode", isMultiselect: "isMultiselect", isRecursiveSelection: "isRecursiveSelection", isRecursiveParentSelection: "isRecursiveParentSelection", isShowActiveNode: "isShowActiveNode", isHideToggles: "isHideToggles", isClickSelectingNode: "isClickSelectingNode", highlightPath: "highlightPath", autoTranslate: "autoTranslate", hasSelectAll: "hasSelectAll" }, outputs: { nodeClick: "nodeClick", nodeToggle: "nodeToggle", selectionChange: "selectionChange" }, ngImport: i0, template: "<li\n *ngIf=\"node.visible\"\n class=\"ux-tree__node\"\n [class.first-child]=\"isFirst\"\n [class.last-child]=\"isLast\"\n [class.ux-tree__node--expandable]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__node--disabled]=\"node.disabled\"\n title=\"{{ node.tooltipLabel ? node.tooltipLabel : node.label }}\"\n attr.data-e2e=\"{{ e2eAttr }}\">\n <div class=\"ux-tree__node-wrapper\" [class.ux-tree__node--selected]=\"node.selected\">\n <ux-button\n (click)=\"onNodeToggle($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\"\n styleClass=\"ux-tree__node-toggle-icon\"\n *ngIf=\"hasNodeChildren(node) && !isHideToggles\"\n [isSmall]=\"true\"\n [isFlat]=\"true\"\n [ariaLabel]=\"node.expanded ? 'Collapse' : 'Expand'\"\n [iconClass]=\"node.expanded ? expandedIconClass : collapsedIconClass\"></ux-button>\n\n <span\n *ngIf=\"isMultiselect\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <input\n type=\"checkbox\"\n class=\"ux-input__checkbox\"\n [class.checkbox-label-indeterminate]=\"node.indeterminate\"\n [class.ux-input__checkbox--selected]=\"node.selected && !node.indeterminate\"\n [id]=\"nodeId\"\n [value]=\"node.label\"\n [disabled]=\"node.disabled\"\n [(ngModel)]=\"node.selected\"\n [attr.aria-label]=\"checkInputLabel()\"\n (change)=\"onCheckboxChange(node, $event)\" />\n <label class=\"ux-tree__node-checkbox-label\" [class.checkbox-label-indeterminate]=\"node.indeterminate\" [for]=\"nodeId\"> </label>\n </span>\n\n <div\n *ngIf=\"nodeContentTemplate\"\n class=\"ux-tree__custom-content\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <ng-template [ngTemplateOutlet]=\"nodeContentTemplate\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-template>\n </div>\n\n <ng-container *ngIf=\"!nodeContentTemplate\">\n <ng-container *ngIf=\"node.typeLabel || node.iconClass\">\n <span\n *ngIf=\"node.typeLabel\"\n class=\"ux-tree__node-type ux-tree__node-type--{{ node.typeClass }}\"\n [class.ux-tree__node-type-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n {{ node.typeLabel }}\n </span>\n\n <span *ngIf=\"node.iconClass\" class=\"ux-tree__node-icon ux-tree__node-type--{{ node.iconTypeClass }}\">\n <span class=\"{{ node.iconClass }}\"></span>\n </span>\n\n <div class=\"ux-tree__node-label-wrapped\">\n <span\n [class.text-muted]=\"node.disabled\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(node.typeLabel || node.iconClass)\">\n <span\n class=\"ux-tree__node-label\"\n [class.ux-tree__node-label-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n [class.text-muted]=\"node.disabled\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </ng-container>\n\n <div *ngIf=\"node.badges\" class=\"eui-u-ml-auto\">\n <ux-badge\n *ngFor=\"let badge of node.badges\"\n styleClass=\"ux-tree__node-badge\"\n isTiny=\"true\"\n isOutline=\"true\"\n isPill=\"true\"\n typeClass=\"{{ badge.typeClass }}\">\n {{ badge.label }}\n </ux-badge>\n </div>\n\n <span\n *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\"\n class=\"ux-tree__node-metacontent-toggle ux-tree__node-clickable\"\n (click)=\"onMetadataNodeToggle($event, node)\">\n <span class=\"eui-icon\" [ngClass]=\"node.expanded ? 'eui-icon eui-icon-angle-down' : 'eui-icon eui-icon-angle-right'\"></span>\n </span>\n </ng-container>\n </div>\n <ng-container *ngIf=\"node.expanded\">\n <ul *ngIf=\"hasNodeChildren(node)\" class=\"ux-tree__nodes\">\n <ux-tree-node\n *ngFor=\"let subNode of node.children; let isFirst = first; let isLast = last; trackBy: trackByFn\"\n [node]=\"subNode\"\n [isMultiselect]=\"isMultiselect\"\n [isRecursiveSelection]=\"isRecursiveSelection\"\n (nodeClick)=\"onSubNodeClick($event)\"\n (nodeToggle)=\"onSubNodeToggle($event)\"\n (selectionChange)=\"onSelectionChange($event)\"\n [isFirst]=\"isFirst\"\n [isLast]=\"isLast\"\n [isClickTogglingNode]=\"isClickTogglingNode\"\n expandedIconClass=\"{{ expandedIconClass }}\"\n collapsedIconClass=\"{{ collapsedIconClass }}\"\n [templateVariable]=\"templateVariable\"\n [nodeContentTemplate]=\"nodeContentTemplate\"\n [isShowActiveNode]=\"isShowActiveNode\"\n [isHideToggles]=\"isHideToggles\"\n [isClickSelectingNode]=\"isClickSelectingNode\"\n [highlightPath]=\"highlightPath\"\n [isRecursiveParentSelection]=\"isRecursiveParentSelection\"\n [autoTranslate]=\"autoTranslate\">\n </ux-tree-node>\n </ul>\n <div *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\" class=\"ux-tree__node-metacontent\">\n <ng-template [ngTemplateOutlet]=\"templateVariable\" [ngTemplateOutletContext]=\"{ metadata: node.metadata }\"></ng-template>\n </div>\n </ng-container>\n</li>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.UxButtonComponent, selector: "ux-button", inputs: ["type", "styleClass", "typeClass", "iconClass", "isOutline", "isSecondary", "isSmall", "isLarge", "isBlock", "isFlat", "isLineWrap", "tabindex", "ariaLabel", "isDisabled", "e2eAttr"] }, { kind: "component", type: i5.UxBadgeComponent, selector: "ux-badge", inputs: ["styleClass", "typeClass", "isSmall", "isLarge", "isTiny", "isTinier", "isPill", "isOutline", "e2eAttr"] }, { kind: "component", type: UxTreeNodeComponent, selector: "ux-tree-node", inputs: ["expandedIconClass", "collapsedIconClass", "templateVariable", "node", "nodeContentTemplate", "e2eAttr", "isFirst", "isLast", "isRootNode", "isClickTogglingNode", "isMultiselect", "isRecursiveSelection", "isRecursiveParentSelection", "isShowActiveNode", "isHideToggles", "isClickSelectingNode", "highlightPath", "autoTranslate", "hasSelectAll"], outputs: ["nodeClick", "nodeToggle", "selectionChange"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
309
307
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: UxTreeNodeComponent, decorators: [{
310
308
  type: Component,
311
- args: [{ selector: 'ux-tree-node', template: "<li\n *ngIf=\"node.visible\"\n class=\"ux-tree__node\"\n [class.first-child]=\"isFirst\"\n [class.last-child]=\"isLast\"\n [class.ux-tree__node--expandable]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__node--disabled]=\"node.disabled\"\n title=\"{{ node.tooltipLabel ? node.tooltipLabel : node.label }}\"\n attr.data-e2e=\"{{ e2eAttr }}\">\n <div class=\"ux-tree__node-wrapper\" [class.ux-tree__node--selected]=\"node.selected\">\n <ux-button\n (click)=\"onNodeToggle($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\"\n styleClass=\"ux-tree__node-toggle-icon\"\n *ngIf=\"hasNodeChildren(node) && !isHideToggles\"\n [isSmall]=\"true\"\n [isFlat]=\"true\"\n [ariaLabel]=\"node.expanded ? 'Collapse' : 'Expand'\"\n [iconClass]=\"node.expanded ? expandedIconClass : collapsedIconClass\"></ux-button>\n\n <span\n *ngIf=\"isMultiselect\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <eui-icon-svg\n *ngIf=\"node.selected && !node.indeterminate\"\n euiPrimary\n icon=\"eui-checkbox\"\n fillColor=\"primary\"\n (click)=\"onCheckboxChange(node, { target: { checked: true } })\"\n aria-label=\"Check\">\n </eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"!node.selected\"\n icon=\"eui-checkbox-outline\"\n fillColor=\"grey-25\"\n (click)=\"onCheckboxChange(node, { target: { checked: false } })\"\n aria-label=\"Uncheck\">\n </eui-icon-svg>\n <eui-icon-svg\n *ngIf=\"node.indeterminate && node.selected\"\n euiPrimary\n icon=\"eui-checkbox-intermediate\"\n fillColor=\"primary\"\n (click)=\"onCheckboxChange(node, { target: { checked: true } })\"\n aria-label=\"Uncheck\">\n </eui-icon-svg>\n </span>\n\n <div\n *ngIf=\"nodeContentTemplate\"\n class=\"ux-tree__custom-content\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <ng-template [ngTemplateOutlet]=\"nodeContentTemplate\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-template>\n </div>\n\n <ng-container *ngIf=\"!nodeContentTemplate\">\n <ng-container *ngIf=\"node.typeLabel || node.iconClass\">\n <span\n *ngIf=\"node.typeLabel\"\n class=\"ux-tree__node-type ux-tree__node-type--{{ node.typeClass }}\"\n [class.ux-tree__node-type-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n {{ node.typeLabel }}\n </span>\n\n <span *ngIf=\"node.iconClass\" class=\"ux-tree__node-icon ux-tree__node-type--{{ node.iconTypeClass }}\">\n <span class=\"{{ node.iconClass }}\"></span>\n </span>\n\n <div class=\"ux-tree__node-label-wrapped\">\n <span\n [class.text-muted]=\"node.disabled\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(node.typeLabel || node.iconClass)\">\n <span\n class=\"ux-tree__node-label\"\n [class.ux-tree__node-label-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n [class.text-muted]=\"node.disabled\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </ng-container>\n\n <div *ngIf=\"node.badges\" class=\"eui-u-ml-auto\">\n <ux-badge\n *ngFor=\"let badge of node.badges\"\n styleClass=\"ux-tree__node-badge\"\n isTiny=\"true\"\n isOutline=\"true\"\n isPill=\"true\"\n typeClass=\"{{ badge.typeClass }}\">\n {{ badge.label }}\n </ux-badge>\n </div>\n\n <span\n *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\"\n class=\"ux-tree__node-metacontent-toggle ux-tree__node-clickable\"\n (click)=\"onMetadataNodeToggle($event, node)\">\n <eui-icon-svg *ngIf=\"node.expanded\" icon=\"eui-chevron-down\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"!node.expanded\" icon=\"eui-chevron-forward\"></eui-icon-svg>\n </span>\n </ng-container>\n </div>\n <ng-container *ngIf=\"node.expanded\">\n <ul *ngIf=\"hasNodeChildren(node)\" class=\"ux-tree__nodes\">\n <ux-tree-node\n *ngFor=\"let subNode of node.children; let isFirst = first; let isLast = last; trackBy: trackByFn\"\n [node]=\"subNode\"\n [isMultiselect]=\"isMultiselect\"\n [isRecursiveSelection]=\"isRecursiveSelection\"\n (nodeClick)=\"onSubNodeClick($event)\"\n (nodeToggle)=\"onSubNodeToggle($event)\"\n (selectionChange)=\"onSelectionChange($event)\"\n [isFirst]=\"isFirst\"\n [isLast]=\"isLast\"\n [isClickTogglingNode]=\"isClickTogglingNode\"\n expandedIconClass=\"{{ expandedIconClass }}\"\n collapsedIconClass=\"{{ collapsedIconClass }}\"\n [templateVariable]=\"templateVariable\"\n [nodeContentTemplate]=\"nodeContentTemplate\"\n [isShowActiveNode]=\"isShowActiveNode\"\n [isHideToggles]=\"isHideToggles\"\n [isClickSelectingNode]=\"isClickSelectingNode\"\n [highlightPath]=\"highlightPath\"\n [isRecursiveParentSelection]=\"isRecursiveParentSelection\"\n [autoTranslate]=\"autoTranslate\">\n </ux-tree-node>\n </ul>\n <div *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\" class=\"ux-tree__node-metacontent\">\n <ng-template [ngTemplateOutlet]=\"templateVariable\" [ngTemplateOutletContext]=\"{ metadata: node.metadata }\"></ng-template>\n </div>\n </ng-container>\n</li>\n" }]
309
+ args: [{ selector: 'ux-tree-node', template: "<li\n *ngIf=\"node.visible\"\n class=\"ux-tree__node\"\n [class.first-child]=\"isFirst\"\n [class.last-child]=\"isLast\"\n [class.ux-tree__node--expandable]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__node--disabled]=\"node.disabled\"\n title=\"{{ node.tooltipLabel ? node.tooltipLabel : node.label }}\"\n attr.data-e2e=\"{{ e2eAttr }}\">\n <div class=\"ux-tree__node-wrapper\" [class.ux-tree__node--selected]=\"node.selected\">\n <ux-button\n (click)=\"onNodeToggle($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\"\n styleClass=\"ux-tree__node-toggle-icon\"\n *ngIf=\"hasNodeChildren(node) && !isHideToggles\"\n [isSmall]=\"true\"\n [isFlat]=\"true\"\n [ariaLabel]=\"node.expanded ? 'Collapse' : 'Expand'\"\n [iconClass]=\"node.expanded ? expandedIconClass : collapsedIconClass\"></ux-button>\n\n <span\n *ngIf=\"isMultiselect\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <input\n type=\"checkbox\"\n class=\"ux-input__checkbox\"\n [class.checkbox-label-indeterminate]=\"node.indeterminate\"\n [class.ux-input__checkbox--selected]=\"node.selected && !node.indeterminate\"\n [id]=\"nodeId\"\n [value]=\"node.label\"\n [disabled]=\"node.disabled\"\n [(ngModel)]=\"node.selected\"\n [attr.aria-label]=\"checkInputLabel()\"\n (change)=\"onCheckboxChange(node, $event)\" />\n <label class=\"ux-tree__node-checkbox-label\" [class.checkbox-label-indeterminate]=\"node.indeterminate\" [for]=\"nodeId\"> </label>\n </span>\n\n <div\n *ngIf=\"nodeContentTemplate\"\n class=\"ux-tree__custom-content\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <ng-template [ngTemplateOutlet]=\"nodeContentTemplate\" [ngTemplateOutletContext]=\"{ $implicit: node }\"> </ng-template>\n </div>\n\n <ng-container *ngIf=\"!nodeContentTemplate\">\n <ng-container *ngIf=\"node.typeLabel || node.iconClass\">\n <span\n *ngIf=\"node.typeLabel\"\n class=\"ux-tree__node-type ux-tree__node-type--{{ node.typeClass }}\"\n [class.ux-tree__node-type-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n {{ node.typeLabel }}\n </span>\n\n <span *ngIf=\"node.iconClass\" class=\"ux-tree__node-icon ux-tree__node-type--{{ node.iconTypeClass }}\">\n <span class=\"{{ node.iconClass }}\"></span>\n </span>\n\n <div class=\"ux-tree__node-label-wrapped\">\n <span\n [class.text-muted]=\"node.disabled\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!(node.typeLabel || node.iconClass)\">\n <span\n class=\"ux-tree__node-label\"\n [class.ux-tree__node-label-parent]=\"hasNodeChildren(node) && !isHideToggles && !isMultiselect\"\n [class.ux-tree__node-label--highlighted]=\"node['highlighted']\"\n [class.text-muted]=\"node.disabled\"\n (click)=\"onNodeClick($event, node)\"\n (keydown)=\"onNodeKeydown($event, node)\">\n <span *ngIf=\"autoTranslate; else manualTranslation\">\n {{ node.label | translate }}\n </span>\n <ng-template #manualTranslation>{{ node.label }}</ng-template>\n <span [class.eui-u-text-link-external]=\"node && node.urlExternal\"></span>\n </span>\n </ng-container>\n\n <div *ngIf=\"node.badges\" class=\"eui-u-ml-auto\">\n <ux-badge\n *ngFor=\"let badge of node.badges\"\n styleClass=\"ux-tree__node-badge\"\n isTiny=\"true\"\n isOutline=\"true\"\n isPill=\"true\"\n typeClass=\"{{ badge.typeClass }}\">\n {{ badge.label }}\n </ux-badge>\n </div>\n\n <span\n *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\"\n class=\"ux-tree__node-metacontent-toggle ux-tree__node-clickable\"\n (click)=\"onMetadataNodeToggle($event, node)\">\n <span class=\"eui-icon\" [ngClass]=\"node.expanded ? 'eui-icon eui-icon-angle-down' : 'eui-icon eui-icon-angle-right'\"></span>\n </span>\n </ng-container>\n </div>\n <ng-container *ngIf=\"node.expanded\">\n <ul *ngIf=\"hasNodeChildren(node)\" class=\"ux-tree__nodes\">\n <ux-tree-node\n *ngFor=\"let subNode of node.children; let isFirst = first; let isLast = last; trackBy: trackByFn\"\n [node]=\"subNode\"\n [isMultiselect]=\"isMultiselect\"\n [isRecursiveSelection]=\"isRecursiveSelection\"\n (nodeClick)=\"onSubNodeClick($event)\"\n (nodeToggle)=\"onSubNodeToggle($event)\"\n (selectionChange)=\"onSelectionChange($event)\"\n [isFirst]=\"isFirst\"\n [isLast]=\"isLast\"\n [isClickTogglingNode]=\"isClickTogglingNode\"\n expandedIconClass=\"{{ expandedIconClass }}\"\n collapsedIconClass=\"{{ collapsedIconClass }}\"\n [templateVariable]=\"templateVariable\"\n [nodeContentTemplate]=\"nodeContentTemplate\"\n [isShowActiveNode]=\"isShowActiveNode\"\n [isHideToggles]=\"isHideToggles\"\n [isClickSelectingNode]=\"isClickSelectingNode\"\n [highlightPath]=\"highlightPath\"\n [isRecursiveParentSelection]=\"isRecursiveParentSelection\"\n [autoTranslate]=\"autoTranslate\">\n </ux-tree-node>\n </ul>\n <div *ngIf=\"node.metadata && node.metadata.title && node.metadata.title.length > 0\" class=\"ux-tree__node-metacontent\">\n <ng-template [ngTemplateOutlet]=\"templateVariable\" [ngTemplateOutletContext]=\"{ metadata: node.metadata }\"></ng-template>\n </div>\n </ng-container>\n</li>\n" }]
312
310
  }], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { expandedIconClass: [{
313
311
  type: Input
314
312
  }], collapsedIconClass: [{
@@ -777,7 +775,7 @@ export class UxTreeComponent {
777
775
  attr.data-e2e="{{ e2eAttr }}-a-toolbar-filter">
778
776
  </ux-a-toolbar-filter>
779
777
 
780
- <span *ngIf="hasSelectAll || hasSelectAllFiltered">
778
+ <div class="flex-container" *ngIf="hasSelectAll || hasSelectAllFiltered">
781
779
  <input
782
780
  type="checkbox"
783
781
  class="ux-input__checkbox"
@@ -790,13 +788,13 @@ export class UxTreeComponent {
790
788
  for="selectAll"
791
789
  [class.ux-tree__node-checkbox-label--onelevel]="checkForChildren()">
792
790
  <ng-container *ngIf="!allSelected && !isMinimumOneSelected && !isAllSelected">
793
- &nbsp;&nbsp;&nbsp;&nbsp;{{ 'eui.uxtree.SELECT-ALL' | translate }}
791
+ {{ 'eui.uxtree.SELECT-ALL' | translate }}
794
792
  </ng-container>
795
793
  <ng-container *ngIf="allSelected || isMinimumOneSelected || isAllSelected">
796
- &nbsp;&nbsp;&nbsp;&nbsp;{{ 'eui.uxtree.UNSELECT-ALL' | translate }}
794
+ {{ 'eui.uxtree.UNSELECT-ALL' | translate }}
797
795
  </ng-container>
798
796
  </label>
799
- </span>
797
+ </div>
800
798
  <ng-container *ngIf="nodes.length > 500 && !hasSelectAll && !hasSelectAllFiltered; else noVirtualScroll">
801
799
  <cdk-virtual-scroll-viewport
802
800
  #virtualScrolling
@@ -866,7 +864,7 @@ export class UxTreeComponent {
866
864
  </ux-tree-node>
867
865
  </ul>
868
866
  </ng-template>
869
- `, isInline: true, styles: ["@charset \"UTF-8\";.ux-tree,.ux-tree ul{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.ux-tree ul{margin-left:var(--eui-base-spacing-m)}ul.ux-tree:before{content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute}.ux-tree:before,.ux-tree ul:before{border-left:1px solid var(--eui-base-color-grey-20);bottom:0;content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute;top:0;width:0}.ux-tree li{cursor:pointer;line-height:calc(1.75 * var(--eui-base-spacing-m));margin:0;padding:0 0 0 var(--eui-base-spacing-s);position:relative}.ux-tree li:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-xl)}.ux-tree li.ux-tree__node--expandable:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-s)}.ux-tree li.ux-tree__node--disabled{pointer-events:none;cursor:none}.ux-tree li.last-child:before{bottom:0;height:auto;top:var(--eui-base-spacing-m)}.ux-tree{font-size:95%}.ux-tree--onelevel .ux-tree__node{padding:0}.ux-tree__node-wrapper{align-items:center;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-wrapper .ux-tree__parent{margin-left:var(--eui-base-spacing-2xs)}.ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree--onelevel .ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-xs)!important;margin-right:var(--eui-base-spacing-xs)}.ux-tree__node-wrapper .ux-tree__custom-content{align-items:center;display:inline-flex}.ux-tree__node-wrapper .ux-tree__custom-content.ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox--selected:after{background:transparent;color:var(--eui-color-white);height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\");position:absolute!important}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox+label:after{content:none!important}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox.checkbox-label-indeterminate:after{background:transparent;color:var(--eui-base-color-white);content:\"\\2013\"!important;left:6px;top:-6px}.ux-tree__node-label{margin-left:var(--eui-base-spacing-xl);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label.ux-tree__node-label-parent{margin-left:0}.ux-tree__node-label:focus,.ux-tree__node-label:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node--selected .ux-tree__node-label{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-label-wrapped{margin-left:var(--eui-base-spacing-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label-wrapped:focus,.ux-tree__node-label-wrapped:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label-wrapped .ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label-wrapped{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-toggle-icon{color:var(--eui-base-color-primary-100)}.ux-tree__node-toggle-icon .ux-button__icon{font-size:var(--eui-base-font-size-xl)!important}.ux-tree__node-type{align-items:center;background-color:var(--eui-base-color-grey-80);color:var(--eui-base-color-white);display:inline-flex;font-size:var(--eui-base-font-size-s);height:var(--eui-base-spacing-m);margin:var(--eui-base-spacing-2xs) 0 0 var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-s) var(--eui-base-spacing-2xs);text-decoration:none}.ux-tree__node-type.ux-tree__node-type-parent{margin-left:var(--eui-base-spacing-xs)}.ux-tree__node-icon{color:var(--eui-base-color-grey-90);display:inline-flex}.ux-tree__node-type--primary{background-color:var(--eui-base-color-primary-100)}.ux-tree__node-type--info{background-color:var(--eui-base-color-info-100)}.ux-tree__node-type--success{background-color:var(--eui-base-color-success-100)}.ux-tree__node-type--warning{background-color:var(--eui-base-color-warning-100)}.ux-tree__node-type--danger{background-color:var(--eui-base-color-danger-100)}.ux-tree__node-badge{margin-left:var(--eui-base-spacing-xs);min-width:var(--eui-base-spacing-xl)}.ux-tree__node-metacontent-toggle{display:flex;font-size:var(--eui-base-font-size);margin-left:var(--eui-base-spacing-s);padding:0 var(--eui-base-spacing-3xs);box-shadow:var(--eui-base-shadow-1)}.ux-tree__node-metacontent{background-color:var(--eui-base-color-grey-5);margin-left:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-m)}.ux-tree__node-checkbox-label{margin:0 var(--eui-base-spacing-2xs)!important;padding:10px!important}.ux-tree__node-checkbox-label:after{left:12px!important}.ux-tree__node-checkbox-label--onelevel{margin:0 auto!important}.ux-tree--multiselect .ux-tree__node-wrapper{margin:3px 0}.ux-tree--multiselect .ux-tree__node-wrapper.ux-tree__node--selected .ux-tree__node-label{font-weight:700}.ux-tree--multiselect .ux-tree__node-label{margin-left:0;padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.ux-tree--multiselect .ux-tree__node .ux-tree__parent{line-height:normal;margin-left:0}.ux-tree--multiselect .ux-tree__node .ux-tree__leaf{line-height:normal;margin-left:var(--eui-base-spacing-xl)}.ux-tree--onelevel{margin:0}.ux-tree--onelevel:before{border-left:none}.ux-tree--onelevel .ux-tree__node:before{border-top:none}.ux-tree--hidelines{margin:0}.ux-tree--hidelines .ux-tree__nodes:before{border-left:none}.ux-tree--hidelines .ux-tree__node:before{display:none}.ux-tree--hidelines:before{border-left:none}.ux-tree__virtual-scrolling__container{height:200px}.ux-tree__virtual-scrolling__item{height:30px}.ux-tree__toolbar{margin-bottom:var(--eui-base-spacing-m)}.ux-tree__toolbar-trigger{float:left;margin-right:var(--eui-base-spacing-xs)}.ux-tree__toolbar-filter{float:left;position:relative}.ux-tree__toolbar-filter-input{min-width:100px}.ux-tree__toolbar-filter-input-search-icon{position:absolute;right:var(--eui-base-spacing-s);top:var(--eui-base-spacing-s)}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox{clip:auto}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox:after{top:0!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.UxToolbarFilterComponent, selector: "ux-a-toolbar-filter", inputs: ["isVisible", "filterLabel", "expandAllLabel", "collapseAllLabel", "isFilterVisible", "isToggleVisible", "isToggleExpanded", "filterValue", "hasLabels", "e2eAttr"], outputs: ["filter", "expandAll", "collapseAll"] }, { kind: "directive", type: i8.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i8.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i8.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: UxTreeNodeComponent, selector: "ux-tree-node", inputs: ["expandedIconClass", "collapsedIconClass", "templateVariable", "node", "nodeContentTemplate", "e2eAttr", "isFirst", "isLast", "isRootNode", "isClickTogglingNode", "isMultiselect", "isRecursiveSelection", "isRecursiveParentSelection", "isShowActiveNode", "isHideToggles", "isClickSelectingNode", "highlightPath", "autoTranslate", "hasSelectAll"], outputs: ["nodeClick", "nodeToggle", "selectionChange"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
867
+ `, isInline: true, styles: ["@charset \"UTF-8\";input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden){-webkit-appearance:inherit;appearance:inherit;align-items:center;cursor:pointer;display:inline-flex;flex-direction:row;flex-shrink:0;height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-s);position:relative;transition:all .25s ease;vertical-align:top;width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));accent-color:var(--eui-base-color-white);background:var(--eui-base-color-white);border:2px solid var(--eui-base-color-grey-20)}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden)+label{display:inline-flex;cursor:pointer;margin-bottom:inherit;margin-right:var(--eui-base-spacing-m);vertical-align:middle;white-space:inherit}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):checked{background:var(--eui-base-color-primary-100);opacity:1}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):checked[id=selectAll]:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):checked:before:not(.checkbox-label-indeterminate){height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):disabled:not([readonly]){background:var(--eui-base-color-grey-15);opacity:.25;pointer-events:none;-webkit-user-select:none;user-select:none}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):disabled:not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):disabled:not([readonly])+label{pointer-events:none}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden)[readonly]{background:var(--eui-base-color-grey-35);opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden)[readonly]:checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden)[readonly]+label{pointer-events:none}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):active,input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):focus{box-shadow:var(--eui-base-shadow-3);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:-2px;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}.ux-tree,.ux-tree ul{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.ux-tree ul{margin-left:var(--eui-base-spacing-m)}ul.ux-tree:before{content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute}.ux-tree:before,.ux-tree ul:before{border-left:1px solid var(--eui-base-color-grey-20);bottom:0;content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute;top:0;width:0}.ux-tree li{cursor:pointer;line-height:calc(1.75 * var(--eui-base-spacing-m));margin:0;padding:0 0 0 var(--eui-base-spacing-s);position:relative}.ux-tree li:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-xl)}.ux-tree li.ux-tree__node--expandable:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-s)}.ux-tree li.ux-tree__node--disabled{pointer-events:none;cursor:none}.ux-tree li.last-child:before{bottom:0;height:auto;top:var(--eui-base-spacing-m)}.ux-tree{font-size:95%}.ux-tree--onelevel .ux-tree__node{padding:0}.ux-tree__node-wrapper{align-items:center;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-wrapper .ux-tree__parent{margin-left:var(--eui-base-spacing-2xs)}.ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree--onelevel .ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-xs)!important;margin-right:var(--eui-base-spacing-xs)}.ux-tree__node-wrapper .ux-tree__custom-content{align-items:center;display:inline-flex}.ux-tree__node-wrapper .ux-tree__custom-content.ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox{clip:auto}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox--selected:after{background:transparent;color:var(--eui-color-white);height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\");position:absolute!important}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox.checkbox-label-indeterminate:after{background:transparent;color:var(--eui-base-color-white);content:\"\\2013\"!important;position:relative;left:4px;bottom:2px}.ux-tree__node-label{margin-left:var(--eui-base-spacing-xl);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label.ux-tree__node-label-parent{margin-left:0}.ux-tree__node-label:focus,.ux-tree__node-label:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node--selected .ux-tree__node-label{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-label-wrapped{margin-left:var(--eui-base-spacing-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label-wrapped:focus,.ux-tree__node-label-wrapped:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label-wrapped .ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label-wrapped{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-toggle-icon{color:var(--eui-base-color-primary-100)}.ux-tree__node-toggle-icon .ux-button__icon{font-size:var(--eui-base-font-size-xl)!important}.ux-tree__node-type{align-items:center;background-color:var(--eui-base-color-grey-80);color:var(--eui-base-color-white);display:inline-flex;font-size:var(--eui-base-font-size-s);height:var(--eui-base-spacing-m);margin:var(--eui-base-spacing-2xs) 0 0 var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-s) var(--eui-base-spacing-2xs);text-decoration:none}.ux-tree__node-type.ux-tree__node-type-parent{margin-left:var(--eui-base-spacing-xs)}.ux-tree__node-icon{color:var(--eui-base-color-grey-90);display:inline-flex}.ux-tree__node-type--primary{background-color:var(--eui-base-color-primary-100)}.ux-tree__node-type--info{background-color:var(--eui-base-color-info-100)}.ux-tree__node-type--success{background-color:var(--eui-base-color-success-100)}.ux-tree__node-type--warning{background-color:var(--eui-base-color-warning-100)}.ux-tree__node-type--danger{background-color:var(--eui-base-color-danger-100)}.ux-tree__node-badge{margin-left:var(--eui-base-spacing-xs);min-width:var(--eui-base-spacing-xl)}.ux-tree__node-metacontent-toggle{display:flex;font-size:var(--eui-base-font-size);margin-left:var(--eui-base-spacing-s);padding:0 var(--eui-base-spacing-3xs);box-shadow:var(--eui-base-shadow-1)}.ux-tree__node-metacontent{background-color:var(--eui-base-color-grey-5);margin-left:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-m)}.ux-tree__node-checkbox-label{margin:0!important;padding:0!important}.ux-tree__node-checkbox-label:after{left:12px!important}.ux-tree__node-checkbox-label--onelevel{margin:0 auto!important}.ux-tree--multiselect .ux-tree__node-wrapper{margin:3px 0}.ux-tree--multiselect .ux-tree__node-wrapper.ux-tree__node--selected .ux-tree__node-label{font-weight:700}.ux-tree--multiselect .ux-tree__node-label{margin-left:0;padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.ux-tree--multiselect .ux-tree__node .ux-tree__parent{line-height:normal;margin-left:0}.ux-tree--multiselect .ux-tree__node .ux-tree__leaf{line-height:normal;margin-left:var(--eui-base-spacing-xl)}.ux-tree--onelevel{margin:0}.ux-tree--onelevel:before{border-left:none}.ux-tree--onelevel .ux-tree__node:before{border-top:none}.ux-tree--hidelines{margin:0}.ux-tree--hidelines .ux-tree__nodes:before{border-left:none}.ux-tree--hidelines .ux-tree__node:before{display:none}.ux-tree--hidelines:before{border-left:none}.ux-tree__virtual-scrolling__container{height:200px}.ux-tree__virtual-scrolling__item{height:30px}.ux-tree__toolbar{margin-bottom:var(--eui-base-spacing-m)}.ux-tree__toolbar-trigger{float:left;margin-right:var(--eui-base-spacing-xs)}.ux-tree__toolbar-filter{float:left;position:relative}.ux-tree__toolbar-filter-input{min-width:100px}.ux-tree__toolbar-filter-input-search-icon{position:absolute;right:var(--eui-base-spacing-s);top:var(--eui-base-spacing-s)}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox{clip:auto;margin-right:var(--eui-base-spacing-2xs)}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox+label:after{content:none!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.UxToolbarFilterComponent, selector: "ux-a-toolbar-filter", inputs: ["isVisible", "filterLabel", "expandAllLabel", "collapseAllLabel", "isFilterVisible", "isToggleVisible", "isToggleExpanded", "filterValue", "hasLabels", "e2eAttr"], outputs: ["filter", "expandAll", "collapseAll"] }, { kind: "directive", type: i8.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i8.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i8.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: UxTreeNodeComponent, selector: "ux-tree-node", inputs: ["expandedIconClass", "collapsedIconClass", "templateVariable", "node", "nodeContentTemplate", "e2eAttr", "isFirst", "isLast", "isRootNode", "isClickTogglingNode", "isMultiselect", "isRecursiveSelection", "isRecursiveParentSelection", "isShowActiveNode", "isHideToggles", "isClickSelectingNode", "highlightPath", "autoTranslate", "hasSelectAll"], outputs: ["nodeClick", "nodeToggle", "selectionChange"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
870
868
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: UxTreeComponent, decorators: [{
871
869
  type: Component,
872
870
  args: [{ selector: 'ux-tree', template: `
@@ -886,7 +884,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
886
884
  attr.data-e2e="{{ e2eAttr }}-a-toolbar-filter">
887
885
  </ux-a-toolbar-filter>
888
886
 
889
- <span *ngIf="hasSelectAll || hasSelectAllFiltered">
887
+ <div class="flex-container" *ngIf="hasSelectAll || hasSelectAllFiltered">
890
888
  <input
891
889
  type="checkbox"
892
890
  class="ux-input__checkbox"
@@ -899,13 +897,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
899
897
  for="selectAll"
900
898
  [class.ux-tree__node-checkbox-label--onelevel]="checkForChildren()">
901
899
  <ng-container *ngIf="!allSelected && !isMinimumOneSelected && !isAllSelected">
902
- &nbsp;&nbsp;&nbsp;&nbsp;{{ 'eui.uxtree.SELECT-ALL' | translate }}
900
+ {{ 'eui.uxtree.SELECT-ALL' | translate }}
903
901
  </ng-container>
904
902
  <ng-container *ngIf="allSelected || isMinimumOneSelected || isAllSelected">
905
- &nbsp;&nbsp;&nbsp;&nbsp;{{ 'eui.uxtree.UNSELECT-ALL' | translate }}
903
+ {{ 'eui.uxtree.UNSELECT-ALL' | translate }}
906
904
  </ng-container>
907
905
  </label>
908
- </span>
906
+ </div>
909
907
  <ng-container *ngIf="nodes.length > 500 && !hasSelectAll && !hasSelectAllFiltered; else noVirtualScroll">
910
908
  <cdk-virtual-scroll-viewport
911
909
  #virtualScrolling
@@ -975,7 +973,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
975
973
  </ux-tree-node>
976
974
  </ul>
977
975
  </ng-template>
978
- `, encapsulation: ViewEncapsulation.None, styles: ["@charset \"UTF-8\";.ux-tree,.ux-tree ul{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.ux-tree ul{margin-left:var(--eui-base-spacing-m)}ul.ux-tree:before{content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute}.ux-tree:before,.ux-tree ul:before{border-left:1px solid var(--eui-base-color-grey-20);bottom:0;content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute;top:0;width:0}.ux-tree li{cursor:pointer;line-height:calc(1.75 * var(--eui-base-spacing-m));margin:0;padding:0 0 0 var(--eui-base-spacing-s);position:relative}.ux-tree li:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-xl)}.ux-tree li.ux-tree__node--expandable:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-s)}.ux-tree li.ux-tree__node--disabled{pointer-events:none;cursor:none}.ux-tree li.last-child:before{bottom:0;height:auto;top:var(--eui-base-spacing-m)}.ux-tree{font-size:95%}.ux-tree--onelevel .ux-tree__node{padding:0}.ux-tree__node-wrapper{align-items:center;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-wrapper .ux-tree__parent{margin-left:var(--eui-base-spacing-2xs)}.ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree--onelevel .ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-xs)!important;margin-right:var(--eui-base-spacing-xs)}.ux-tree__node-wrapper .ux-tree__custom-content{align-items:center;display:inline-flex}.ux-tree__node-wrapper .ux-tree__custom-content.ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox--selected:after{background:transparent;color:var(--eui-color-white);height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\");position:absolute!important}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox+label:after{content:none!important}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox.checkbox-label-indeterminate:after{background:transparent;color:var(--eui-base-color-white);content:\"\\2013\"!important;left:6px;top:-6px}.ux-tree__node-label{margin-left:var(--eui-base-spacing-xl);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label.ux-tree__node-label-parent{margin-left:0}.ux-tree__node-label:focus,.ux-tree__node-label:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node--selected .ux-tree__node-label{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-label-wrapped{margin-left:var(--eui-base-spacing-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label-wrapped:focus,.ux-tree__node-label-wrapped:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label-wrapped .ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label-wrapped{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-toggle-icon{color:var(--eui-base-color-primary-100)}.ux-tree__node-toggle-icon .ux-button__icon{font-size:var(--eui-base-font-size-xl)!important}.ux-tree__node-type{align-items:center;background-color:var(--eui-base-color-grey-80);color:var(--eui-base-color-white);display:inline-flex;font-size:var(--eui-base-font-size-s);height:var(--eui-base-spacing-m);margin:var(--eui-base-spacing-2xs) 0 0 var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-s) var(--eui-base-spacing-2xs);text-decoration:none}.ux-tree__node-type.ux-tree__node-type-parent{margin-left:var(--eui-base-spacing-xs)}.ux-tree__node-icon{color:var(--eui-base-color-grey-90);display:inline-flex}.ux-tree__node-type--primary{background-color:var(--eui-base-color-primary-100)}.ux-tree__node-type--info{background-color:var(--eui-base-color-info-100)}.ux-tree__node-type--success{background-color:var(--eui-base-color-success-100)}.ux-tree__node-type--warning{background-color:var(--eui-base-color-warning-100)}.ux-tree__node-type--danger{background-color:var(--eui-base-color-danger-100)}.ux-tree__node-badge{margin-left:var(--eui-base-spacing-xs);min-width:var(--eui-base-spacing-xl)}.ux-tree__node-metacontent-toggle{display:flex;font-size:var(--eui-base-font-size);margin-left:var(--eui-base-spacing-s);padding:0 var(--eui-base-spacing-3xs);box-shadow:var(--eui-base-shadow-1)}.ux-tree__node-metacontent{background-color:var(--eui-base-color-grey-5);margin-left:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-m)}.ux-tree__node-checkbox-label{margin:0 var(--eui-base-spacing-2xs)!important;padding:10px!important}.ux-tree__node-checkbox-label:after{left:12px!important}.ux-tree__node-checkbox-label--onelevel{margin:0 auto!important}.ux-tree--multiselect .ux-tree__node-wrapper{margin:3px 0}.ux-tree--multiselect .ux-tree__node-wrapper.ux-tree__node--selected .ux-tree__node-label{font-weight:700}.ux-tree--multiselect .ux-tree__node-label{margin-left:0;padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.ux-tree--multiselect .ux-tree__node .ux-tree__parent{line-height:normal;margin-left:0}.ux-tree--multiselect .ux-tree__node .ux-tree__leaf{line-height:normal;margin-left:var(--eui-base-spacing-xl)}.ux-tree--onelevel{margin:0}.ux-tree--onelevel:before{border-left:none}.ux-tree--onelevel .ux-tree__node:before{border-top:none}.ux-tree--hidelines{margin:0}.ux-tree--hidelines .ux-tree__nodes:before{border-left:none}.ux-tree--hidelines .ux-tree__node:before{display:none}.ux-tree--hidelines:before{border-left:none}.ux-tree__virtual-scrolling__container{height:200px}.ux-tree__virtual-scrolling__item{height:30px}.ux-tree__toolbar{margin-bottom:var(--eui-base-spacing-m)}.ux-tree__toolbar-trigger{float:left;margin-right:var(--eui-base-spacing-xs)}.ux-tree__toolbar-filter{float:left;position:relative}.ux-tree__toolbar-filter-input{min-width:100px}.ux-tree__toolbar-filter-input-search-icon{position:absolute;right:var(--eui-base-spacing-s);top:var(--eui-base-spacing-s)}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox{clip:auto}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox:after{top:0!important}\n"] }]
976
+ `, encapsulation: ViewEncapsulation.None, styles: ["@charset \"UTF-8\";input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden){-webkit-appearance:inherit;appearance:inherit;align-items:center;cursor:pointer;display:inline-flex;flex-direction:row;flex-shrink:0;height:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));margin-right:var(--eui-base-spacing-s);position:relative;transition:all .25s ease;vertical-align:top;width:calc(var(--eui-base-spacing-m) + var(--eui-base-spacing-2xs));accent-color:var(--eui-base-color-white);background:var(--eui-base-color-white);border:2px solid var(--eui-base-color-grey-20)}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden)+label{display:inline-flex;cursor:pointer;margin-bottom:inherit;margin-right:var(--eui-base-spacing-m);vertical-align:middle;white-space:inherit}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):checked{background:var(--eui-base-color-primary-100);opacity:1}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):checked[id=selectAll]:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):checked:before:not(.checkbox-label-indeterminate){height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):disabled:not([readonly]){background:var(--eui-base-color-grey-15);opacity:.25;pointer-events:none;-webkit-user-select:none;user-select:none}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):disabled:not([readonly]):checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):disabled:not([readonly])+label{pointer-events:none}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden)[readonly]{background:var(--eui-base-color-grey-35);opacity:.5;pointer-events:none;-webkit-user-select:none;user-select:none}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden)[readonly]:checked:before{height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23004494' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\")}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden)[readonly]+label{pointer-events:none}input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):active,input[type=checkbox]:not(.eui-input-checkbox):not(.cdk-visually-hidden):focus{box-shadow:var(--eui-base-shadow-3);outline:2px solid var(--eui-base-color-accessible-focus);outline-offset:-2px;-moz-outline-radius:var(--eui-base-border-radius);transition:outline .15s ease-in-out,border .15s ease-in-out}.ux-tree,.ux-tree ul{list-style:none;margin:0 0 0 var(--eui-base-spacing-xs);padding:0;position:relative}.ux-tree ul{margin-left:var(--eui-base-spacing-m)}ul.ux-tree:before{content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute}.ux-tree:before,.ux-tree ul:before{border-left:1px solid var(--eui-base-color-grey-20);bottom:0;content:\"\";display:block;height:calc(100% - 12px);left:0;position:absolute;top:0;width:0}.ux-tree li{cursor:pointer;line-height:calc(1.75 * var(--eui-base-spacing-m));margin:0;padding:0 0 0 var(--eui-base-spacing-s);position:relative}.ux-tree li:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-xl)}.ux-tree li.ux-tree__node--expandable:before{border-top:1px solid var(--eui-base-color-grey-20);content:\"\";display:block;height:0;left:0;position:absolute;top:var(--eui-base-spacing-m);width:var(--eui-base-spacing-s)}.ux-tree li.ux-tree__node--disabled{pointer-events:none;cursor:none}.ux-tree li.last-child:before{bottom:0;height:auto;top:var(--eui-base-spacing-m)}.ux-tree{font-size:95%}.ux-tree--onelevel .ux-tree__node{padding:0}.ux-tree__node-wrapper{align-items:center;display:flex;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-wrapper .ux-tree__parent{margin-left:var(--eui-base-spacing-2xs)}.ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree--onelevel .ux-tree__node-wrapper .ux-tree__leaf{margin-left:var(--eui-base-spacing-xs)!important;margin-right:var(--eui-base-spacing-xs)}.ux-tree__node-wrapper .ux-tree__custom-content{align-items:center;display:inline-flex}.ux-tree__node-wrapper .ux-tree__custom-content.ux-tree__leaf{margin-left:var(--eui-base-spacing-l)}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox{clip:auto}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox--selected:after{background:transparent;color:var(--eui-color-white);height:1rem;width:1rem;content:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Ctitle%3ECheckmark%3C/title%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='64' d='M416 128L192 384l-96-96'/%3E%3C/svg%3E\");position:absolute!important}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox.checkbox-label-indeterminate:after{background:transparent;color:var(--eui-base-color-white);content:\"\\2013\"!important;position:relative;left:4px;bottom:2px}.ux-tree__node-label{margin-left:var(--eui-base-spacing-xl);vertical-align:middle;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label.ux-tree__node-label-parent{margin-left:0}.ux-tree__node-label:focus,.ux-tree__node-label:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node--selected .ux-tree__node-label{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-label-wrapped{margin-left:var(--eui-base-spacing-xs);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ux-tree__node-label-wrapped:focus,.ux-tree__node-label-wrapped:hover{color:var(--eui-base-color-primary-100);text-decoration:underline}.ux-tree__node-label-wrapped .ux-tree__node-label--highlighted{font-weight:700}.ux-tree__node--selected .ux-tree__node-label-wrapped{background-color:var(--eui-base-color-primary-5)}.ux-tree__node-toggle-icon{color:var(--eui-base-color-primary-100)}.ux-tree__node-toggle-icon .ux-button__icon{font-size:var(--eui-base-font-size-xl)!important}.ux-tree__node-type{align-items:center;background-color:var(--eui-base-color-grey-80);color:var(--eui-base-color-white);display:inline-flex;font-size:var(--eui-base-font-size-s);height:var(--eui-base-spacing-m);margin:var(--eui-base-spacing-2xs) 0 0 var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-s) var(--eui-base-spacing-2xs);text-decoration:none}.ux-tree__node-type.ux-tree__node-type-parent{margin-left:var(--eui-base-spacing-xs)}.ux-tree__node-icon{color:var(--eui-base-color-grey-90);display:inline-flex}.ux-tree__node-type--primary{background-color:var(--eui-base-color-primary-100)}.ux-tree__node-type--info{background-color:var(--eui-base-color-info-100)}.ux-tree__node-type--success{background-color:var(--eui-base-color-success-100)}.ux-tree__node-type--warning{background-color:var(--eui-base-color-warning-100)}.ux-tree__node-type--danger{background-color:var(--eui-base-color-danger-100)}.ux-tree__node-badge{margin-left:var(--eui-base-spacing-xs);min-width:var(--eui-base-spacing-xl)}.ux-tree__node-metacontent-toggle{display:flex;font-size:var(--eui-base-font-size);margin-left:var(--eui-base-spacing-s);padding:0 var(--eui-base-spacing-3xs);box-shadow:var(--eui-base-shadow-1)}.ux-tree__node-metacontent{background-color:var(--eui-base-color-grey-5);margin-left:var(--eui-base-spacing-xl);padding:var(--eui-base-spacing-m)}.ux-tree__node-checkbox-label{margin:0!important;padding:0!important}.ux-tree__node-checkbox-label:after{left:12px!important}.ux-tree__node-checkbox-label--onelevel{margin:0 auto!important}.ux-tree--multiselect .ux-tree__node-wrapper{margin:3px 0}.ux-tree--multiselect .ux-tree__node-wrapper.ux-tree__node--selected .ux-tree__node-label{font-weight:700}.ux-tree--multiselect .ux-tree__node-label{margin-left:0;padding-left:var(--eui-base-spacing-s);padding-right:var(--eui-base-spacing-s)}.ux-tree--multiselect .ux-tree__node .ux-tree__parent{line-height:normal;margin-left:0}.ux-tree--multiselect .ux-tree__node .ux-tree__leaf{line-height:normal;margin-left:var(--eui-base-spacing-xl)}.ux-tree--onelevel{margin:0}.ux-tree--onelevel:before{border-left:none}.ux-tree--onelevel .ux-tree__node:before{border-top:none}.ux-tree--hidelines{margin:0}.ux-tree--hidelines .ux-tree__nodes:before{border-left:none}.ux-tree--hidelines .ux-tree__node:before{display:none}.ux-tree--hidelines:before{border-left:none}.ux-tree__virtual-scrolling__container{height:200px}.ux-tree__virtual-scrolling__item{height:30px}.ux-tree__toolbar{margin-bottom:var(--eui-base-spacing-m)}.ux-tree__toolbar-trigger{float:left;margin-right:var(--eui-base-spacing-xs)}.ux-tree__toolbar-filter{float:left;position:relative}.ux-tree__toolbar-filter-input{min-width:100px}.ux-tree__toolbar-filter-input-search-icon{position:absolute;right:var(--eui-base-spacing-s);top:var(--eui-base-spacing-s)}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox{clip:auto;margin-right:var(--eui-base-spacing-2xs)}.ux-tree__node-wrapper input[type=checkbox].ux-input__checkbox+label:after{content:none!important}\n"] }]
979
977
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { nodes: [{
980
978
  type: Input
981
979
  }], collapseAllLabel: [{
@@ -1056,16 +1054,14 @@ export class UxTreeComponentModule {
1056
1054
  UxButtonComponentModule,
1057
1055
  UxBadgeComponentModule,
1058
1056
  TranslateModule,
1059
- ScrollingModule,
1060
- EuiIconModule], exports: [UxTreeComponent, UxTreeNodeComponent] });
1057
+ ScrollingModule], exports: [UxTreeComponent, UxTreeNodeComponent] });
1061
1058
  /** @nocollapse */ UxTreeComponentModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: UxTreeComponentModule, imports: [CommonModule,
1062
1059
  FormsModule,
1063
1060
  UxToolbarFilterComponentModule,
1064
1061
  UxButtonComponentModule,
1065
1062
  UxBadgeComponentModule,
1066
1063
  TranslateModule,
1067
- ScrollingModule,
1068
- EuiIconModule] });
1064
+ ScrollingModule] });
1069
1065
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: UxTreeComponentModule, decorators: [{
1070
1066
  type: NgModule,
1071
1067
  args: [{
@@ -1077,10 +1073,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
1077
1073
  UxBadgeComponentModule,
1078
1074
  TranslateModule,
1079
1075
  ScrollingModule,
1080
- EuiIconModule,
1081
1076
  ],
1082
1077
  exports: [UxTreeComponent, UxTreeNodeComponent],
1083
1078
  declarations: [UxTreeComponent, UxTreeNodeComponent],
1084
1079
  }]
1085
1080
  }] });
1086
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXgtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9sZWdhY3kvdXgtdHJlZS91eC10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xlZ2FjeS91eC10cmVlL3V4LXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUdSLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsR0FFcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBNEIsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBTXpELE1BQU0sT0FBTyxtQkFBbUI7SUF5SDVCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFB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S0FBSztnQkFTRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBU0Ysc0JBQXNCO3NCQUR6QixLQUFLO2dCQVNGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBU0YsYUFBYTtzQkFEaEIsS0FBSztnQkFTRixTQUFTO3NCQURaLEtBQUs7Z0JBU0YsWUFBWTtzQkFEZixLQUFLO2dCQVNGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFTRiwwQkFBMEI7c0JBRDdCLEtBQUs7O0FBK1VWLE1BQU0sT0FBTyxxQkFBcUI7O3FJQUFyQixxQkFBcUI7c0lBQXJCLHFCQUFxQixpQkE1ZXJCLGVBQWUsRUF2YmYsbUJBQW1CLGFBdTVCeEIsWUFBWTtRQUNaLFdBQVc7UUFDWCw4QkFBOEI7UUFDOUIsdUJBQXVCO1FBQ3ZCLHNCQUFzQjtRQUN0QixlQUFlO1FBQ2YsZUFBZTtRQUNmLGFBQWEsYUF2ZVIsZUFBZSxFQXZiZixtQkFBbUI7c0lBbTZCbkIscUJBQXFCLFlBWjFCLFlBQVk7UUFDWixXQUFXO1FBQ1gsOEJBQThCO1FBQzlCLHVCQUF1QjtRQUN2QixzQkFBc0I7UUFDdEIsZUFBZTtRQUNmLGVBQWU7UUFDZixhQUFhOzJGQUtSLHFCQUFxQjtrQkFkakMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLDhCQUE4Qjt3QkFDOUIsdUJBQXVCO3dCQUN2QixzQkFBc0I7d0JBQ3RCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixhQUFhO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLENBQUM7b0JBQy9DLFlBQVksRUFBRSxDQUFDLGVBQWUsRUFBRSxtQkFBbUIsQ0FBQztpQkFDdkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFV4TGluayB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNvbnN1bWVFdmVudCwgdW5pcXVlSWQgfSBmcm9tICdAZXVpL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcblxuaW1wb3J0IHsgVXhUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9sZWdhY3kvY29tbW9uL3V4LWRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgVXhUb29sYmFyRmlsdGVyQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnQGV1aS9kZXByZWNhdGVkL3V4LWEtdG9vbGJhci1maWx0ZXInO1xuaW1wb3J0IHsgVXhCdXR0b25Db21wb25lbnRNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvbGVnYWN5L3V4LWJ1dHRvbic7XG5pbXBvcnQgeyBVeEJhZGdlQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2xlZ2FjeS91eC1iYWRnZSc7XG5pbXBvcnQgeyBFdWlJY29uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pY29uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1eC10cmVlLW5vZGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91eC10cmVlLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgVXhUcmVlTm9kZUNvbXBvbmVudCB7XG4gICAgQElucHV0KCkgZXhwYW5kZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2xsYXBzZWRJY29uQ2xhc3M6IHN0cmluZztcbiAgICBASW5wdXQoKSB0ZW1wbGF0ZVZhcmlhYmxlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIG5vZGU6IFV4TGluaztcbiAgICBASW5wdXQoKSBub2RlQ29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dCgpIGUyZUF0dHIgPSAndXgtdHJlZS1ub2RlJztcblxuICAgIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFV4TGluaz4oKTtcbiAgICBAT3V0cHV0KCkgbm9kZVRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXhMaW5rPigpO1xuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV4TGluaz4oKTtcblxuICAgIHB1YmxpYyBub2RlSWQ6IHN0cmluZztcbiAgICBwdWJsaWMgY2hpbGRyZW5TZWxlY3RlZCA9IHRydWU7XG4gICAgcHVibGljIGFtb3VudFNlbGVjdGVkQ2hpbGRyZW4gPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNGaXJzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRmlyc3Q7XG4gICAgfVxuICAgIHNldCBpc0ZpcnN0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNGaXJzdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzRmlyc3QgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0xhc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0xhc3Q7XG4gICAgfVxuICAgIHNldCBpc0xhc3QodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0xhc3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0xhc3QgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1Jvb3ROb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSb290Tm9kZTtcbiAgICB9XG4gICAgc2V0IGlzUm9vdE5vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1Jvb3ROb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNSb290Tm9kZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlO1xuICAgIH1cbiAgICBzZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0NsaWNrVG9nZ2xpbmdOb2RlID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNNdWx0aXNlbGVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlzZWxlY3Q7XG4gICAgfVxuICAgIHNldCBpc011bHRpc2VsZWN0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aXNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzTXVsdGlzZWxlY3QgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1JlY3Vyc2l2ZVNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmVjdXJzaXZlU2VsZWN0aW9uO1xuICAgIH1cbiAgICBzZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjtcbiAgICB9XG4gICAgc2V0IGlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IHRydWU7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNTaG93QWN0aXZlTm9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2hvd0FjdGl2ZU5vZGU7XG4gICAgfVxuICAgIHNldCBpc1Nob3dBY3RpdmVOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNTaG93QWN0aXZlTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzU2hvd0FjdGl2ZU5vZGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0hpZGVUb2dnbGVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNIaWRlVG9nZ2xlcztcbiAgICB9XG4gICAgc2V0IGlzSGlkZVRvZ2dsZXModmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0hpZGVUb2dnbGVzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNIaWRlVG9nZ2xlcyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xpY2tTZWxlY3RpbmdOb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDbGlja1NlbGVjdGluZ05vZGU7XG4gICAgfVxuICAgIHNldCBpc0NsaWNrU2VsZWN0aW5nTm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzQ2xpY2tTZWxlY3RpbmdOb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNDbGlja1NlbGVjdGluZ05vZGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBoaWdobGlnaHRQYXRoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0UGF0aDtcbiAgICB9XG4gICAgc2V0IGhpZ2hsaWdodFBhdGgodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9oaWdobGlnaHRQYXRoID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaGlnaGxpZ2h0UGF0aCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGF1dG9UcmFuc2xhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvVHJhbnNsYXRlO1xuICAgIH1cbiAgICBzZXQgYXV0b1RyYW5zbGF0ZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2F1dG9UcmFuc2xhdGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9hdXRvVHJhbnNsYXRlID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBoYXNTZWxlY3RBbGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNTZWxlY3RBbGw7XG4gICAgfVxuICAgIHNldCBoYXNTZWxlY3RBbGwodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9oYXNTZWxlY3RBbGwgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9oYXNTZWxlY3RBbGwgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcbiAgICAgICAgdGhpcy5ub2RlSWQgPSBgdXgtdHJlZS1ub2RlLSR7dW5pcXVlSWQoKX1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNOb2RlQ2hpbGRyZW4obm9kZTogVXhMaW5rKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBub2RlICYmIG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5vZGVLZXlkb3duKGV2ZW50OiBhbnksIHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgICAgICAgdGhpcy5vbk5vZGVDbGljayhldmVudCwgdXhMaW5rKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbk5vZGVUb2dnbGUoZXZlbnQ6IEV2ZW50LCB1eExpbms6IFV4TGluayk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vZGUuZXhwYW5kZWQgPSAhdGhpcy5ub2RlLmV4cGFuZGVkO1xuICAgICAgICB0aGlzLm5vZGVUb2dnbGUuZW1pdCh1eExpbmspO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5vZGVDbGljayhldmVudDogRXZlbnQsIHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIGlmICghdXhMaW5rLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubm9kZS5tZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QgJiYgdGhpcy5pc0NsaWNrU2VsZWN0aW5nTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB1eExpbmsuc2VsZWN0ZWQgPSAhdXhMaW5rLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICBldmVudC50YXJnZXRbJ2NoZWNrZWQnXSA9IHV4TGluay5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoZWNrYm94Q2hhbmdlKHV4TGluaywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubm9kZS5jaGlsZHJlbiB8fCB0aGlzLm5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZS5leHBhbmRlZCA9ICF0aGlzLm5vZGUuZXhwYW5kZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZS51cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLm5vZGUudXJsXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZS51cmxFeHRlcm5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5ub2RlLnVybEV4dGVybmFsLCB0aGlzLm5vZGUudXJsRXh0ZXJuYWxUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpY2tlZEVsID0gZXZlbnQudGFyZ2V0Wydub2RlTmFtZSddO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NsaWNrVG9nZ2xpbmdOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uTm9kZVRvZ2dsZShldmVudCwgdXhMaW5rKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xpY2tlZEVsID09PSAnU1BBTicgJiYgKHRoaXMubm9kZS51cmwgfHwgdGhpcy5ub2RlLnVybEV4dGVybmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZS51cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ub2RlLnVybF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZS51cmxFeHRlcm5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMubm9kZS51cmxFeHRlcm5hbCwgdGhpcy5ub2RlLnVybEV4dGVybmFsVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZS51cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMubm9kZS51cmxdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubm9kZS51cmxFeHRlcm5hbCkge1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLm5vZGUudXJsRXh0ZXJuYWwsIHRoaXMubm9kZS51cmxFeHRlcm5hbFRhcmdldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHV4TGluay5jb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgdXhMaW5rLmNvbW1hbmQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdCh1eExpbmspO1xuICAgICAgICAgICAgY29uc3VtZUV2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoZWNrYm94Q2hhbmdlKHV4TGluazogVXhMaW5rLCBldnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB1eExpbmsuc2VsZWN0ZWQgPSAhZXZ0LnRhcmdldC5jaGVja2VkO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXV4TGluay5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHV4TGluay5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvblJlY3Vyc2l2ZWx5KHV4TGluaywgdXhMaW5rLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIGlmICh1eExpbmsucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VQYXJlbnRTZWxlY3Rpb24odXhMaW5rLnBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRQYXRoKSB7XG4gICAgICAgICAgICB0aGlzLmdldFBhcmVudHModXhMaW5rLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh1eExpbmspO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1ldGFkYXRhTm9kZVRvZ2dsZShldmVudDogRXZlbnQsIHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZS5leHBhbmRlZCA9ICF0aGlzLm5vZGUuZXhwYW5kZWQ7XG4gICAgICAgIGNvbnN1bWVFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3ViTm9kZUNsaWNrKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZUNsaWNrLmVtaXQodXhMaW5rKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdWJOb2RlVG9nZ2xlKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHV4TGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLm5leHQodXhMaW5rKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IFV4TGluayk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIGNoZWNrSW5wdXRMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbiAmJiB0aGlzLm5vZGUuaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0Rlc2VsZWN0IEFsbCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnU2VsZWN0IEFsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuaXNSZWN1cnNpdmVTZWxlY3Rpb24gJiYgIXRoaXMubm9kZS5oYXNDaGlsZHJlbikgfHwgIXRoaXMuaXNSZWN1cnNpdmVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0Rlc2VsZWN0IG5vZGUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1NlbGVjdCBub2RlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50cyh1eExpbms6IFV4TGluaywgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh1eExpbmsgPT09IHRoaXMubm9kZSkge1xuICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZVsnaGlnaGxpZ2h0ZWQnXSA9IGlzQ2hlY2tlZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDaGlsZHJlbiA9IHRoaXMuaGFzQ2hpbGRTZWxlY3RlZCh0aGlzLm5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVbJ2hpZ2hsaWdodGVkJ10gPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV4TGluay5wYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChpc0NoZWNrZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB1eExpbmsucGFyZW50WydoaWdobGlnaHRlZCddID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50cyh1eExpbmsucGFyZW50LCBpc0NoZWNrZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZENoaWxkcmVuID0gdGhpcy5oYXNDaGlsZFNlbGVjdGVkKHV4TGluay5wYXJlbnQpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB1eExpbmsucGFyZW50WydoaWdobGlnaHRlZCddID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFBhcmVudHModXhMaW5rLnBhcmVudCwgaXNDaGVja2VkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0NoaWxkU2VsZWN0ZWQodXhMaW5rOiBVeExpbmssIHNlbGVjdGVkID0gW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICh1eExpbmsuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkLnB1c2godXhMaW5rLmxhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1eExpbmsuY2hpbGRyZW4gJiYgdXhMaW5rLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHV4TGluay5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGRTZWxlY3RlZChjaGlsZCwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VTZWxlY3Rpb25SZWN1cnNpdmVseSh1eExpbms6IFV4TGluaywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHV4TGluay5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgdXhMaW5rLmNoaWxkcmVuLmZvckVhY2goKGxpbms6IFV4TGluaykgPT4ge1xuICAgICAgICAgICAgICAgIGxpbmsuc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluay5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uUmVjdXJzaXZlbHkobGluaywgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZVBhcmVudFNlbGVjdGlvbih1eExpbms6IFV4TGluayk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbikge1xuICAgICAgICAgICAgdXhMaW5rLmluZGV0ZXJtaW5hdGUgPSAhdGhpcy5hbGxDaGlsZHJlblNlbGVjdGVkKHV4TGluayk7XG4gICAgICAgICAgICB1eExpbmsuc2VsZWN0ZWQgPSB0aGlzLmhhc1NlbGVjdGVkQ2hpbGRyZW4odXhMaW5rKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdXhMaW5rLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdXhMaW5rLmluZGV0ZXJtaW5hdGUgPSB0aGlzLmhhc1NlbGVjdGVkQ2hpbGRyZW4odXhMaW5rKTtcbiAgICAgICAgICAgICAgICB1eExpbmsuc2VsZWN0ZWQgPSB0aGlzLmhhc1NlbGVjdGVkQ2hpbGRyZW4odXhMaW5rKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHV4TGluay5pbmRldGVybWluYXRlICYmICF0aGlzLmhhc1NlbGVjdGVkQ2hpbGRyZW4odXhMaW5rKSkge1xuICAgICAgICAgICAgICAgIHV4TGluay5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdXhMaW5rLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXhMaW5rLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VQYXJlbnRTZWxlY3Rpb24odXhMaW5rLnBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFsbENoaWxkcmVuU2VsZWN0ZWQodXhsaW5rOiBVeExpbmspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHV4bGluay5jaGlsZHJlbi5maWx0ZXIoKGMpID0+ICghYy5zZWxlY3RlZCB8fCAoYy5zZWxlY3RlZCAmJiBjLmluZGV0ZXJtaW5hdGUpKSAmJiB0aGlzLmNoaWxkcmVuU2VsZWN0ZWQpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1NlbGVjdGVkQ2hpbGRyZW4odXhsaW5rOiBVeExpbmspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHV4bGluay5jaGlsZHJlbi5maWx0ZXIoKGMpID0+IGMuc2VsZWN0ZWQgPT09IHRydWUpLmxlbmd0aCA+IDA7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3V4LXRyZWUnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDx1eC1hLXRvb2xiYXItZmlsdGVyXG4gICAgICAgICAgICAqbmdJZj1cImlzU2hvd1Rvb2xiYXJcIlxuICAgICAgICAgICAgW2lzVmlzaWJsZV09XCJpc1Nob3dUb29sYmFyXCJcbiAgICAgICAgICAgIFtpc1RvZ2dsZVZpc2libGVdPVwiIWlzSGlkZVRvZ2dsZXNcIlxuICAgICAgICAgICAgKGZpbHRlcik9XCJvbkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgIFtmaWx0ZXJWYWx1ZV09XCJzZXRGaWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAoZXhwYW5kQWxsKT1cIm9uRXhwYW5kQWxsKCRldmVudClcIlxuICAgICAgICAgICAgKGNvbGxhcHNlQWxsKT1cIm9uQ29sbGFwc2VBbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICBmaWx0ZXJMYWJlbD1cInt7IGZpbHRlckxhYmVsIH19XCJcbiAgICAgICAgICAgIFtleHBhbmRBbGxMYWJlbF09XCJleHBhbmRBbGxMYWJlbCA/IGV4cGFuZEFsbExhYmVsIDogbnVsbFwiXG4gICAgICAgICAgICBjb2xsYXBzZUFsbExhYmVsPVwie3sgY29sbGFwc2VBbGxMYWJlbCB9fVwiXG4gICAgICAgICAgICBbaXNUb2dnbGVFeHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcbiAgICAgICAgICAgIFtoYXNMYWJlbHNdPVwiaGFzTGFiZWxzXCJcbiAgICAgICAgICAgIGF0dHIuZGF0YS1lMmU9XCJ7eyBlMmVBdHRyIH19LWEtdG9vbGJhci1maWx0ZXJcIj5cbiAgICAgICAgPC91eC1hLXRvb2xiYXItZmlsdGVyPlxuXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzU2VsZWN0QWxsIHx8IGhhc1NlbGVjdEFsbEZpbHRlcmVkXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtaW5wdXRfX2NoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBpZD1cInNlbGVjdEFsbFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNNaW5pbXVtT25lU2VsZWN0ZWQgPyAnY2hlY2tlZCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC10cmVlX19ub2RlLWNoZWNrYm94LWxhYmVsXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuY2hlY2tib3gtbGFiZWwtaW5kZXRlcm1pbmF0ZV09XCJpc01pbmltdW1PbmVTZWxlY3RlZCAmJiAhaXNBbGxTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgZm9yPVwic2VsZWN0QWxsXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbm9kZS1jaGVja2JveC1sYWJlbC0tb25lbGV2ZWxdPVwiY2hlY2tGb3JDaGlsZHJlbigpXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhbGxTZWxlY3RlZCAmJiAhaXNNaW5pbXVtT25lU2VsZWN0ZWQgJiYgIWlzQWxsU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7e3sgJ2V1aS51eHRyZWUuU0VMRUNULUFMTCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWxsU2VsZWN0ZWQgfHwgaXNNaW5pbXVtT25lU2VsZWN0ZWQgfHwgaXNBbGxTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt7eyAnZXVpLnV4dHJlZS5VTlNFTEVDVC1BTEwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2Rlcy5sZW5ndGggPiA1MDAgJiYgIWhhc1NlbGVjdEFsbCAmJiAhaGFzU2VsZWN0QWxsRmlsdGVyZWQ7IGVsc2Ugbm9WaXJ0dWFsU2Nyb2xsXCI+XG4gICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XG4gICAgICAgICAgICAgICAgI3ZpcnR1YWxTY3JvbGxpbmdcbiAgICAgICAgICAgICAgICBpdGVtU2l6ZT1cIjMwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInV4LXRyZWVfX3ZpcnR1YWwtc2Nyb2xsaW5nX19jb250YWluZXJcIlxuICAgICAgICAgICAgICAgIG1pbkJ1ZmZlclB4PVwiMjAwMFwiXG4gICAgICAgICAgICAgICAgbWF4QnVmZmVyUHg9XCIyNDAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqY2RrVmlydHVhbEZvcj1cImxldCBub2RlIG9mIHZpc2libGVOb2RlczsgdHJhY2tCeTogdHJhY2tCeUZuXCIgY2xhc3M9XCJ1eC10cmVlX192aXJ0dWFsLXNjcm9sbGluZ19faXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtdHJlZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZS0taGlkZWxpbmVzXT1cImlzSGlkZUxpbmVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlLS1tdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlLS1vbmVsZXZlbF09XCJjaGVja0ZvckNoaWxkcmVuKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLWUyZT1cInt7IGUyZUF0dHIgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1eC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9kZUNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub2RlVG9nZ2xlKT1cIm9uTm9kZVRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1Jvb3ROb2RlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc011bHRpc2VsZWN0XT1cImlzTXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1JlY3Vyc2l2ZVNlbGVjdGlvbl09XCJpc1JlY3Vyc2l2ZVNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzQ2xpY2tUb2dnbGluZ05vZGVdPVwiaXNDbGlja1RvZ2dsaW5nTm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRJY29uQ2xhc3M9XCJ7eyBleHBhbmRlZEljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkSWNvbkNsYXNzPVwie3sgY29sbGFwc2VkSWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVWYXJpYWJsZV09XCJ0ZW1wbGF0ZVZhcmlhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9kZUNvbnRlbnRUZW1wbGF0ZV09XCJub2RlQ29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNTaG93QWN0aXZlTm9kZV09XCJpc1Nob3dBY3RpdmVOb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1RyYW5zbGF0ZV09XCJhdXRvVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNIaWRlVG9nZ2xlc109XCJpc0hpZGVUb2dnbGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNDbGlja1NlbGVjdGluZ05vZGVdPVwiaXNDbGlja1NlbGVjdGluZ05vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWdobGlnaHRQYXRoXT1cImhpZ2hsaWdodFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbl09XCJpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC91eC10cmVlLW5vZGU+XG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub1ZpcnR1YWxTY3JvbGw+XG4gICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICBjbGFzcz1cInV4LXRyZWVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlLS1oaWRlbGluZXNdPVwiaXNIaWRlTGluZXNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlLS1tdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZS0tb25lbGV2ZWxdPVwiY2hlY2tGb3JDaGlsZHJlbigpXCJcbiAgICAgICAgICAgICAgICBhdHRyLmRhdGEtZTJlPVwie3sgZTJlQXR0ciB9fVwiPlxuICAgICAgICAgICAgICAgIDx1eC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG5vZGUgb2Ygbm9kZXM7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgICAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICAobm9kZUNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAobm9kZVRvZ2dsZSk9XCJvbk5vZGVUb2dnbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtpc1Jvb3ROb2RlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbaXNNdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lzUmVjdXJzaXZlU2VsZWN0aW9uXT1cImlzUmVjdXJzaXZlU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzQ2xpY2tUb2dnbGluZ05vZGVdPVwiaXNDbGlja1RvZ2dsaW5nTm9kZVwiXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkSWNvbkNsYXNzPVwie3sgZXhwYW5kZWRJY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWRJY29uQ2xhc3M9XCJ7eyBjb2xsYXBzZWRJY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVWYXJpYWJsZV09XCJ0ZW1wbGF0ZVZhcmlhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgW25vZGVDb250ZW50VGVtcGxhdGVdPVwibm9kZUNvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpc1Nob3dBY3RpdmVOb2RlXT1cImlzU2hvd0FjdGl2ZU5vZGVcIlxuICAgICAgICAgICAgICAgICAgICBbYXV0b1RyYW5zbGF0ZV09XCJhdXRvVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzSGlkZVRvZ2dsZXNdPVwiaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtpc0NsaWNrU2VsZWN0aW5nTm9kZV09XCJpc0NsaWNrU2VsZWN0aW5nTm9kZVwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWdobGlnaHRQYXRoXT1cImhpZ2hsaWdodFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICBbaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25dPVwiaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICA8L3V4LXRyZWUtbm9kZT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYCxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBVeFRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KCkgbm9kZXM6IFV4TGlua1tdO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlQWxsTGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBleHBhbmRBbGxMYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGZpbHRlckxhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgY29sbGFwc2VkSWNvbkNsYXNzID0gJ2V1aS1pY29uIGV1aS1pY29uLXBsdXMtY2lyY2xlJztcbiAgICBASW5wdXQoKSBleHBhbmRlZEljb25DbGFzcyA9ICdldWktaWNvbiBldWktaWNvbi1taW51cy1jaXJjbGUnO1xuICAgIEBJbnB1dCgpIHNldEZpbHRlclZhbHVlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZTJlQXR0ciA9ICd1eC10cmVlJztcblxuICAgIEBPdXRwdXQoKSBub2RlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFV4TGluaz4oKTtcbiAgICBAT3V0cHV0KCkgbm9kZVRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXhMaW5rPigpO1xuICAgIC8vIFRPRE86IGZvciBlVUkgMTQgcmVtb3ZlIHRoZSBbXSB0eXBlXG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXhMaW5rIHwgW10+KCk7XG4gICAgQE91dHB1dCgpIG9uRmlsdGVyVmFsdWUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYpIHRlbXBsYXRlVmFyaWFibGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZHJlbihVeFRlbXBsYXRlRGlyZWN0aXZlKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxhbnk+O1xuICAgIEBWaWV3Q2hpbGRyZW4oVXhUcmVlTm9kZUNvbXBvbmVudCkgdHJlZU5vZGVzOiBRdWVyeUxpc3Q8VXhUcmVlTm9kZUNvbXBvbmVudD47XG4gICAgQFZpZXdDaGlsZCgndmlydHVhbFNjcm9sbGluZycpIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsaW5nOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAgIHB1YmxpYyBhbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBuYk5vZGVzID0gMDtcbiAgICBwdWJsaWMgdmlzaWJsZU5vZGVzID0gW107XG4gICAgcHVibGljIG5vZGVDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgcHVibGljIGZpbHRlclZhbHVlID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1Nob3dUb29sYmFyKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTaG93VG9vbGJhcjtcbiAgICB9XG4gICAgc2V0IGlzU2hvd1Rvb2xiYXIodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1Nob3dUb29sYmFyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNTaG93VG9vbGJhciA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzRXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0V4cGFuZGVkO1xuICAgIH1cbiAgICBzZXQgaXNFeHBhbmRlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzRXhwYW5kZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNNdWx0aXNlbGVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTXVsdGlzZWxlY3Q7XG4gICAgfVxuICAgIHNldCBpc011bHRpc2VsZWN0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNNdWx0aXNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzTXVsdGlzZWxlY3QgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1JlY3Vyc2l2ZVNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmVjdXJzaXZlU2VsZWN0aW9uO1xuICAgIH1cbiAgICBzZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGU7XG4gICAgfVxuICAgIHNldCBpc0NsaWNrVG9nZ2xpbmdOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNDbGlja1RvZ2dsaW5nTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1Nob3dBY3RpdmVOb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTaG93QWN0aXZlTm9kZTtcbiAgICB9XG4gICAgc2V0IGlzU2hvd0FjdGl2ZU5vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1Nob3dBY3RpdmVOb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNTaG93QWN0aXZlTm9kZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzSGlkZVRvZ2dsZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0hpZGVUb2dnbGVzO1xuICAgIH1cbiAgICBzZXQgaXNIaWRlVG9nZ2xlcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzSGlkZVRvZ2dsZXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0hpZGVUb2dnbGVzID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNIaWRlTGluZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0hpZGVMaW5lcztcbiAgICB9XG4gICAgc2V0IGlzSGlkZUxpbmVzKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNIaWRlTGluZXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0hpZGVMaW5lcyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xpY2tTZWxlY3RpbmdOb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDbGlja1NlbGVjdGluZ05vZGU7XG4gICAgfVxuICAgIHNldCBpc0NsaWNrU2VsZWN0aW5nTm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzQ2xpY2tTZWxlY3RpbmdOb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNDbGlja1NlbGVjdGluZ05vZGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBzaG93RmlsdGVyZWRDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dGaWx0ZXJlZENoaWxkcmVuO1xuICAgIH1cbiAgICBzZXQgc2hvd0ZpbHRlcmVkQ2hpbGRyZW4odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9zaG93RmlsdGVyZWRDaGlsZHJlbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX3Nob3dGaWx0ZXJlZENoaWxkcmVuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgZXhwYW5kRmlsdGVyZWRDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZEZpbHRlcmVkQ2hpbGRyZW47XG4gICAgfVxuICAgIHNldCBleHBhbmRGaWx0ZXJlZENoaWxkcmVuKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kRmlsdGVyZWRDaGlsZHJlbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2V4cGFuZEZpbHRlcmVkQ2hpbGRyZW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBoaWdobGlnaHRQYXRoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0UGF0aDtcbiAgICB9XG4gICAgc2V0IGhpZ2hsaWdodFBhdGgodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9oaWdobGlnaHRQYXRoID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaGlnaGxpZ2h0UGF0aCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGF1dG9UcmFuc2xhdGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvVHJhbnNsYXRlO1xuICAgIH1cbiAgICBzZXQgYXV0b1RyYW5zbGF0ZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2F1dG9UcmFuc2xhdGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9hdXRvVHJhbnNsYXRlID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBoYXNMYWJlbHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNMYWJlbHM7XG4gICAgfVxuICAgIHNldCBoYXNMYWJlbHModmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9oYXNMYWJlbHMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9oYXNMYWJlbHMgPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc1NlbGVjdEFsbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1NlbGVjdEFsbDtcbiAgICB9XG4gICAgc2V0IGhhc1NlbGVjdEFsbCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hhc1NlbGVjdEFsbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2hhc1NlbGVjdEFsbCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc1NlbGVjdEFsbEZpbHRlcmVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzU2VsZWN0QWxsRmlsdGVyZWQ7XG4gICAgfVxuICAgIHNldCBoYXNTZWxlY3RBbGxGaWx0ZXJlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hhc1NlbGVjdEFsbEZpbHRlcmVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaGFzU2VsZWN0QWxsRmlsdGVyZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uO1xuICAgIH1cbiAgICBzZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gdHJ1ZTtcblxuICAgIGdldCBpc01pbmltdW1PbmVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpLmxlbmd0aCA+IDAgJiYgIXRoaXMuYWxsU2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKS5sZW5ndGggPT09IHRoaXMubmJOb2RlcztcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXNbJ25vZGVzJ10pIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZU5vZGVzID0gdGhpcy52aXNpYmxlKHRoaXMubm9kZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhhc1NlbGVjdEFsbCkge1xuICAgICAgICAgICAgdGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5nZXROYk5vZGVzKHRoaXMubm9kZXMpO1xuXG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldE5vZGVzRXhwYW5kZWRTdGF0ZSh0aGlzLm5vZGVzLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFyZW50Tm9kZSh0aGlzLm5vZGVzLCBudWxsKTtcblxuICAgICAgICB0aGlzLnRlbXBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5nZXRUeXBlKCkgPT09ICdub2RlQ29udGVudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVDb250ZW50VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2aXNpYmxlKG5vZGVzOiBVeExpbmtbXSk6IFV4TGlua1tdIHtcblxuICAgICAgICBpZih0aGlzLmhhc1NlbGVjdEFsbEZpbHRlcmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRWaXNpYmxlTm9kZXNSZWN1cnNpdmUobm9kZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGVzLmZpbHRlcigobikgPT4gbi52aXNpYmxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldE5iTm9kZXMobm9kZXM6IFV4TGlua1tdKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmJOb2RlcysrO1xuICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGxpbms6IFV4TGluaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE5iTm9kZXMoW2xpbmtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VsZWN0QWxsQ2hhbmdlKGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmFsbFNlbGVjdGVkID0gZS50YXJnZXQuY2hlY2tlZDtcbiAgICAgICAgaWYgKCFlLnRhcmdldC5jaGVjaykge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5oYXNTZWxlY3RBbGxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1NlbGVjdGVkRmlsdGVyZWRTdGF0ZSh0aGlzLnZpc2libGVOb2RlcywgZS50YXJnZXQuY2hlY2tlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldE5vZGVzU2VsZWN0ZWRTdGF0ZSh0aGlzLm5vZGVzLCBlLnRhcmdldC5jaGVja2VkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RlZE5vZGVzKCk6IFV4TGlua1tdIHtcblxuICAgICAgICAgIGlmKHRoaXMuZmlsdGVyVmFsdWUgIT09ICcnICYmIHRoaXMuYWxsU2VsZWN0ZWQgJiYgdGhpcy5oYXNTZWxlY3RBbGxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZU5vZGVzO1xuICAgICAgICAgIH0gIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWROb2Rlc1JlY3Vyc2l2ZSh0aGlzLm5vZGVzKTtcbiAgICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ob2RlVG9nZ2xlKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHV4TGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZUNsaWNrKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIGlmICghdXhMaW5rLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KHV4TGluayk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0NsaWNrVG9nZ2xpbmdOb2RlICYmIHV4TGluay5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlVG9nZ2xlKHV4TGluayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aXNlbGVjdCAmJiB0aGlzLmlzU2hvd0FjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVzU2VsZWN0ZWRTdGF0ZSh0aGlzLm5vZGVzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdXhMaW5rLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkV4cGFuZEFsbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXROb2Rlc0V4cGFuZGVkU3RhdGUodGhpcy5ub2RlcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ29sbGFwc2VBbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0Tm9kZXNFeHBhbmRlZFN0YXRlKHRoaXMubm9kZXMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2UodXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1eExpbmsuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5uZXh0KHV4TGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRmlsdGVyKGZpbHRlclZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcblxuICAgICAgICBpZiAoZmlsdGVyVmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLnNldE5vZGVzVmlzaWJsZVN0YXRlKHRoaXMubm9kZXMsIGZhbHNlKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmV4cGFuZEZpbHRlcmVkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0ZpbHRlck1hdGNoZWQobm9kZSwgZmlsdGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5leHBhbmRGaWx0ZXJlZENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNGaWx0ZXJNYXRjaGVkRXhwYW5kKG5vZGUsIGZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVzVmlzaWJsZVN0YXRlKHRoaXMubm9kZXMsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93RmlsdGVyZWRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVmlzaWJsZUNoaWxkcmVuKG5vZGUsIGZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmV4cGFuZEZpbHRlcmVkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVzRXhwYW5kZWRTdGF0ZSh0aGlzLm5vZGVzLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlzaWJsZU5vZGVzID0gdGhpcy52aXNpYmxlKHRoaXMubm9kZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1Zpc2libGVTdGF0ZSh0aGlzLm5vZGVzLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZU5vZGVzID0gdGhpcy52aXNpYmxlKHRoaXMubm9kZXMpO1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsaW5nPy5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5oYXNTZWxlY3RBbGxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1NlbGVjdGVkRmlsdGVyZWRTdGF0ZSh0aGlzLnZpc2libGVOb2RlcywgdGhpcy5hbGxTZWxlY3RlZCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlICA9IGZpbHRlclZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uRmlsdGVyVmFsdWUuZW1pdChmaWx0ZXJWYWx1ZSk7XG4gICAgfVxuXG4gICAgaXNGaWx0ZXJNYXRjaGVkRXhwYW5kKG5vZGU6IFV4TGluaywgZmlsdGVyVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBub2RlWydoaWdobGlnaHRlZCddID0gZmFsc2U7XG4gICAgICAgIGlmIChub2RlLmxhYmVsLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZS50b1VwcGVyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgbm9kZVsnaGlnaGxpZ2h0ZWQnXSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICBub2RlWydoaWdobGlnaHRlZCddID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZHJlbk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmlsdGVyTWF0Y2hlZEV4cGFuZChjaGlsZHJlbk5vZGUsIGZpbHRlclZhbHVlKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbk5vZGUuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVbJ2hpZ2hsaWdodGVkJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBVeExpbmspOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hlY2tGb3JDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm5vZGVzLnNvbWUoKG5vZGUpID0+IG5vZGUuaGFzQ2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldFNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNldE5vZGUodGhpcy5ub2Rlcyk7XG4gICAgICAgIC8vIFRPRE86IGludmVzdGlnYXRlIGlmIHdlIGNhbiBlbWl0IG51bGwgaW5zdGVhZCBvZiBbXVxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KFtdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0Tm9kZShub2RlczogVXhMaW5rW10pOiB2b2lkIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgbm9kZS5zZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Tm9kZShub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Zpc2libGVDaGlsZHJlbihub2RlOiBVeExpbmssIGZpbHRlclZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50ICYmIG5vZGUucGFyZW50LnZpc2libGUgPT09IHRydWUgJiYgbm9kZS5wYXJlbnQubGFiZWwudG9VcHBlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlLnRvVXBwZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgbm9kZS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkcmVuTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlQ2hpbGRyZW4oY2hpbGRyZW5Ob2RlLCBmaWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWROb2Rlc1JlY3Vyc2l2ZShub2RlczogVXhMaW5rW10pOiBVeExpbmtbXSB7XG4gICAgICAgIHJldHVybiAobm9kZXMgfHwgW10pLnJlZHVjZSgoYWNjLCBub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZS5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLnNlbGVjdGVkICYmICFub2RlLmluZGV0ZXJtaW5hdGVcbiAgICAgICAgICAgICAgICAgICAgPyBbLi4uYWNjLCBub2RlLCAuLi50aGlzLmdldFNlbGVjdGVkTm9kZXNSZWN1cnNpdmUobm9kZS5jaGlsZHJlbildXG4gICAgICAgICAgICAgICAgICAgIDogWy4uLmFjYywgLi4udGhpcy5nZXRTZWxlY3RlZE5vZGVzUmVjdXJzaXZlKG5vZGUuY2hpbGRyZW4pXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc2VsZWN0ZWQgPyBbLi4uYWNjLCBub2RlXSA6IFsuLi5hY2NdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWaXNpYmxlTm9kZXNSZWN1cnNpdmUobm9kZXM6IFV4TGlua1tdKTogVXhMaW5rW10ge1xuICAgICAgICByZXR1cm4gKG5vZGVzIHx8IFtdKS5yZWR1Y2UoKGFjYywgbm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS52aXNpYmxlXG4gICAgICAgICAgICAgICAgICAgID8gWy4uLmFjYywgbm9kZSwgLi4udGhpcy5nZXRWaXNpYmxlTm9kZXNSZWN1cnNpdmUobm9kZS5jaGlsZHJlbildXG4gICAgICAgICAgICAgICAgICAgIDogWy4uLmFjYywgLi4udGhpcy5nZXRWaXNpYmxlTm9kZXNSZWN1cnNpdmUobm9kZS5jaGlsZHJlbildO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS52aXNpYmxlID8gWy4uLmFjYywgbm9kZV0gOiBbLi4uYWNjXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNGaWx0ZXJNYXRjaGVkKG5vZGU6IFV4TGluaywgZmlsdGVyVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAobm9kZS5sYWJlbD8udG9VcHBlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlPy50b1VwcGVyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbGluZz8uc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgICAgICAgIG5vZGUudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkcmVuTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGaWx0ZXJNYXRjaGVkKGNoaWxkcmVuTm9kZSwgZmlsdGVyVmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuTm9kZS52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE5vZGVzRXhwYW5kZWRTdGF0ZShub2RlczogVXhMaW5rW10sIGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSBleHBhbmRlZDtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc0V4cGFuZGVkU3RhdGUobm9kZS5jaGlsZHJlbiwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE5vZGVzVmlzaWJsZVN0YXRlKG5vZGVzOiBVeExpbmtbXSwgdmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBub2RlLnZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVzVmlzaWJsZVN0YXRlKG5vZGUuY2hpbGRyZW4sIHZpc2libGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE5vZGVzU2VsZWN0ZWRTdGF0ZShub2RlczogVXhMaW5rW10sIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1NlbGVjdGVkU3RhdGUobm9kZS5jaGlsZHJlbiwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2VsZWN0QWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG4gICAgcHJpdmF0ZSBzZXROb2Rlc1NlbGVjdGVkRmlsdGVyZWRTdGF0ZShub2RlczogVXhMaW5rW10sIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmKG5vZGUudmlzaWJsZSl7XG4gICAgICAgICAgICAgICAgbm9kZS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVzU2VsZWN0ZWRGaWx0ZXJlZFN0YXRlKG5vZGUuY2hpbGRyZW4sIHNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1NlbGVjdEFsbEZpbHRlcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQYXJlbnROb2RlKG5vZGVzOiBVeExpbmtbXSwgcGFyZW50Tm9kZTogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhcmVudE5vZGUobm9kZS5jaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFV4VG9vbGJhckZpbHRlckNvbXBvbmVudE1vZHVsZSxcbiAgICAgICAgVXhCdXR0b25Db21wb25lbnRNb2R1bGUsXG4gICAgICAgIFV4QmFkZ2VDb21wb25lbnRNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgU2Nyb2xsaW5nTW9kdWxlLFxuICAgICAgICBFdWlJY29uTW9kdWxlLFxuICAgIF0sXG4gICAgZXhwb3J0czogW1V4VHJlZUNvbXBvbmVudCwgVXhUcmVlTm9kZUNvbXBvbmVudF0sXG4gICAgZGVjbGFyYXRpb25zOiBbVXhUcmVlQ29tcG9uZW50LCBVeFRyZWVOb2RlQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgVXhUcmVlQ29tcG9uZW50TW9kdWxlIHt9XG4iLCI8bGlcbiAgICAqbmdJZj1cIm5vZGUudmlzaWJsZVwiXG4gICAgY2xhc3M9XCJ1eC10cmVlX19ub2RlXCJcbiAgICBbY2xhc3MuZmlyc3QtY2hpbGRdPVwiaXNGaXJzdFwiXG4gICAgW2NsYXNzLmxhc3QtY2hpbGRdPVwiaXNMYXN0XCJcbiAgICBbY2xhc3MudXgtdHJlZV9fbm9kZS0tZXhwYW5kYWJsZV09XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXNcIlxuICAgIFtjbGFzcy51eC10cmVlX19ub2RlLS1kaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICB0aXRsZT1cInt7IG5vZGUudG9vbHRpcExhYmVsID8gbm9kZS50b29sdGlwTGFiZWwgOiBub2RlLmxhYmVsIH19XCJcbiAgICBhdHRyLmRhdGEtZTJlPVwie3sgZTJlQXR0ciB9fVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1eC10cmVlX19ub2RlLXdyYXBwZXJcIiBbY2xhc3MudXgtdHJlZV9fbm9kZS0tc2VsZWN0ZWRdPVwibm9kZS5zZWxlY3RlZFwiPlxuICAgICAgICA8dXgtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlVG9nZ2xlKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25Ob2RlS2V5ZG93bigkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ1eC10cmVlX19ub2RlLXRvZ2dsZS1pY29uXCJcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzXCJcbiAgICAgICAgICAgIFtpc1NtYWxsXT1cInRydWVcIlxuICAgICAgICAgICAgW2lzRmxhdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdPVwibm9kZS5leHBhbmRlZCA/ICdDb2xsYXBzZScgOiAnRXhwYW5kJ1wiXG4gICAgICAgICAgICBbaWNvbkNsYXNzXT1cIm5vZGUuZXhwYW5kZWQgPyBleHBhbmRlZEljb25DbGFzcyA6IGNvbGxhcHNlZEljb25DbGFzc1wiPjwvdXgtYnV0dG9uPlxuXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX3BhcmVudF09XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXNcIlxuICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX2xlYWZdPVwiIWhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlc1wiPlxuICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5zZWxlY3RlZCAmJiAhbm9kZS5pbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICBldWlQcmltYXJ5XG4gICAgICAgICAgICAgICAgaWNvbj1cImV1aS1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hlY2tib3hDaGFuZ2Uobm9kZSwgeyB0YXJnZXQ6IHsgY2hlY2tlZDogdHJ1ZSB9IH0pXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiQ2hlY2tcIj5cbiAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiIW5vZGUuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIGljb249XCJldWktY2hlY2tib3gtb3V0bGluZVwiXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yPVwiZ3JleS0yNVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hlY2tib3hDaGFuZ2Uobm9kZSwgeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9KVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlVuY2hlY2tcIj5cbiAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5pbmRldGVybWluYXRlICYmIG5vZGUuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIGV1aVByaW1hcnlcbiAgICAgICAgICAgICAgICBpY29uPVwiZXVpLWNoZWNrYm94LWludGVybWVkaWF0ZVwiXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hlY2tib3hDaGFuZ2Uobm9kZSwgeyB0YXJnZXQ6IHsgY2hlY2tlZDogdHJ1ZSB9IH0pXCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiVW5jaGVja1wiPlxuICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIm5vZGVDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJ1eC10cmVlX19jdXN0b20tY29udGVudFwiXG4gICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fcGFyZW50XT1cImhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbGVhZl09XCIhaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+IDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9kZUNvbnRlbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGUudHlwZUxhYmVsIHx8IG5vZGUuaWNvbkNsYXNzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLnR5cGVMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtdHJlZV9fbm9kZS10eXBlIHV4LXRyZWVfX25vZGUtdHlwZS0te3sgbm9kZS50eXBlQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbm9kZS10eXBlLXBhcmVudF09XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXMgJiYgIWlzTXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlQ2xpY2soJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uTm9kZUtleWRvd24oJGV2ZW50LCBub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBub2RlLnR5cGVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibm9kZS5pY29uQ2xhc3NcIiBjbGFzcz1cInV4LXRyZWVfX25vZGUtaWNvbiB1eC10cmVlX19ub2RlLXR5cGUtLXt7IG5vZGUuaWNvblR5cGVDbGFzcyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7IG5vZGUuaWNvbkNsYXNzIH19XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1eC10cmVlX19ub2RlLWxhYmVsLXdyYXBwZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LW11dGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtbGFiZWwtLWhpZ2hsaWdodGVkXT1cIm5vZGVbJ2hpZ2hsaWdodGVkJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Ob2RlS2V5ZG93bigkZXZlbnQsIG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImF1dG9UcmFuc2xhdGU7IGVsc2UgbWFudWFsVHJhbnNsYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBub2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21hbnVhbFRyYW5zbGF0aW9uPnt7IG5vZGUubGFiZWwgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzLmV1aS11LXRleHQtbGluay1leHRlcm5hbF09XCJub2RlICYmIG5vZGUudXJsRXh0ZXJuYWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShub2RlLnR5cGVMYWJlbCB8fCBub2RlLmljb25DbGFzcylcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInV4LXRyZWVfX25vZGUtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbm9kZS1sYWJlbC1wYXJlbnRdPVwiaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzICYmICFpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtbGFiZWwtLWhpZ2hsaWdodGVkXT1cIm5vZGVbJ2hpZ2hsaWdodGVkJ11cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1tdXRlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbk5vZGVLZXlkb3duKCRldmVudCwgbm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhdXRvVHJhbnNsYXRlOyBlbHNlIG1hbnVhbFRyYW5zbGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBub2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtYW51YWxUcmFuc2xhdGlvbj57eyBub2RlLmxhYmVsIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzLmV1aS11LXRleHQtbGluay1leHRlcm5hbF09XCJub2RlICYmIG5vZGUudXJsRXh0ZXJuYWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJub2RlLmJhZGdlc1wiIGNsYXNzPVwiZXVpLXUtbWwtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDx1eC1iYWRnZVxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYmFkZ2Ugb2Ygbm9kZS5iYWRnZXNcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwidXgtdHJlZV9fbm9kZS1iYWRnZVwiXG4gICAgICAgICAgICAgICAgICAgIGlzVGlueT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBpc091dGxpbmU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgaXNQaWxsPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGVDbGFzcz1cInt7IGJhZGdlLnR5cGVDbGFzcyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBiYWRnZS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvdXgtYmFkZ2U+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUubWV0YWRhdGEgJiYgbm9kZS5tZXRhZGF0YS50aXRsZSAmJiBub2RlLm1ldGFkYXRhLnRpdGxlLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtdHJlZV9fbm9kZS1tZXRhY29udGVudC10b2dnbGUgdXgtdHJlZV9fbm9kZS1jbGlja2FibGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1ldGFkYXRhTm9kZVRvZ2dsZSgkZXZlbnQsIG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyAqbmdJZj1cIm5vZGUuZXhwYW5kZWRcIiBpY29uPVwiZXVpLWNoZXZyb24tZG93blwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgKm5nSWY9XCIhbm9kZS5leHBhbmRlZFwiIGljb249XCJldWktY2hldnJvbi1mb3J3YXJkXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLmV4cGFuZGVkXCI+XG4gICAgICAgIDx1bCAqbmdJZj1cImhhc05vZGVDaGlsZHJlbihub2RlKVwiIGNsYXNzPVwidXgtdHJlZV9fbm9kZXNcIj5cbiAgICAgICAgICAgIDx1eC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgc3ViTm9kZSBvZiBub2RlLmNoaWxkcmVuOyBsZXQgaXNGaXJzdCA9IGZpcnN0OyBsZXQgaXNMYXN0ID0gbGFzdDsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgICAgICAgICBbbm9kZV09XCJzdWJOb2RlXCJcbiAgICAgICAgICAgICAgICBbaXNNdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICBbaXNSZWN1cnNpdmVTZWxlY3Rpb25dPVwiaXNSZWN1cnNpdmVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgIChub2RlQ2xpY2spPVwib25TdWJOb2RlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG5vZGVUb2dnbGUpPVwib25TdWJOb2RlVG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2lzRmlyc3RdPVwiaXNGaXJzdFwiXG4gICAgICAgICAgICAgICAgW2lzTGFzdF09XCJpc0xhc3RcIlxuICAgICAgICAgICAgICAgIFtpc0NsaWNrVG9nZ2xpbmdOb2RlXT1cImlzQ2xpY2tUb2dnbGluZ05vZGVcIlxuICAgICAgICAgICAgICAgIGV4cGFuZGVkSWNvbkNsYXNzPVwie3sgZXhwYW5kZWRJY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgIGNvbGxhcHNlZEljb25DbGFzcz1cInt7IGNvbGxhcHNlZEljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgW3RlbXBsYXRlVmFyaWFibGVdPVwidGVtcGxhdGVWYXJpYWJsZVwiXG4gICAgICAgICAgICAgICAgW25vZGVDb250ZW50VGVtcGxhdGVdPVwibm9kZUNvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2lzU2hvd0FjdGl2ZU5vZGVdPVwiaXNTaG93QWN0aXZlTm9kZVwiXG4gICAgICAgICAgICAgICAgW2lzSGlkZVRvZ2dsZXNdPVwiaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICAgICAgW2lzQ2xpY2tTZWxlY3RpbmdOb2RlXT1cImlzQ2xpY2tTZWxlY3RpbmdOb2RlXCJcbiAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0UGF0aF09XCJoaWdobGlnaHRQYXRoXCJcbiAgICAgICAgICAgICAgICBbaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25dPVwiaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgIFthdXRvVHJhbnNsYXRlXT1cImF1dG9UcmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDwvdXgtdHJlZS1ub2RlPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibm9kZS5tZXRhZGF0YSAmJiBub2RlLm1ldGFkYXRhLnRpdGxlICYmIG5vZGUubWV0YWRhdGEudGl0bGUubGVuZ3RoID4gMFwiIGNsYXNzPVwidXgtdHJlZV9fbm9kZS1tZXRhY29udGVudFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlVmFyaWFibGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBtZXRhZGF0YTogbm9kZS5tZXRhZGF0YSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2xpPlxuIl19
1081
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXgtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9sZWdhY3kvdXgtdHJlZS91eC10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xlZ2FjeS91eC10cmVlL3V4LXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUdSLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsR0FFcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBNEIsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7Ozs7QUFLekUsTUFBTSxPQUFPLG1CQUFtQjtJQXlINUIsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFuSHpCLFlBQU8sR0FBRyxjQUFjLENBQUM7UUFFeEIsY0FB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U0YsU0FBUztzQkFEWixLQUFLO2dCQVNGLFlBQVk7c0JBRGYsS0FBSztnQkFTRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBU0YsMEJBQTBCO3NCQUQ3QixLQUFLOztBQThVVixNQUFNLE9BQU8scUJBQXFCOztxSUFBckIscUJBQXFCO3NJQUFyQixxQkFBcUIsaUJBM2VyQixlQUFlLEVBdGJmLG1CQUFtQixhQXM1QnhCLFlBQVk7UUFDWixXQUFXO1FBQ1gsOEJBQThCO1FBQzlCLHVCQUF1QjtRQUN2QixzQkFBc0I7UUFDdEIsZUFBZTtRQUNmLGVBQWUsYUF0ZVYsZUFBZSxFQXRiZixtQkFBbUI7c0lBaTZCbkIscUJBQXFCLFlBWDFCLFlBQVk7UUFDWixXQUFXO1FBQ1gsOEJBQThCO1FBQzlCLHVCQUF1QjtRQUN2QixzQkFBc0I7UUFDdEIsZUFBZTtRQUNmLGVBQWU7MkZBS1YscUJBQXFCO2tCQWJqQyxRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsOEJBQThCO3dCQUM5Qix1QkFBdUI7d0JBQ3ZCLHNCQUFzQjt3QkFDdEIsZUFBZTt3QkFDZixlQUFlO3FCQUNsQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxlQUFlLEVBQUUsbUJBQW1CLENBQUM7b0JBQy9DLFlBQVksRUFBRSxDQUFDLGVBQWUsRUFBRSxtQkFBbUIsQ0FBQztpQkFDdkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFV4TGluayB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNvbnN1bWVFdmVudCwgdW5pcXVlSWQgfSBmcm9tICdAZXVpL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcblxuaW1wb3J0IHsgVXhUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9sZWdhY3kvY29tbW9uL3V4LWRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgVXhUb29sYmFyRmlsdGVyQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnQGV1aS9kZXByZWNhdGVkL3V4LWEtdG9vbGJhci1maWx0ZXInO1xuaW1wb3J0IHsgVXhCdXR0b25Db21wb25lbnRNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvbGVnYWN5L3V4LWJ1dHRvbic7XG5pbXBvcnQgeyBVeEJhZGdlQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2xlZ2FjeS91eC1iYWRnZSc7XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3V4LXRyZWUtbm9kZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3V4LXRyZWUuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBVeFRyZWVOb2RlQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBleHBhbmRlZEljb25DbGFzczogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZEljb25DbGFzczogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlVmFyaWFibGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgbm9kZTogVXhMaW5rO1xuICAgIEBJbnB1dCgpIG5vZGVDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgZTJlQXR0ciA9ICd1eC10cmVlLW5vZGUnO1xuXG4gICAgQE91dHB1dCgpIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VXhMaW5rPigpO1xuICAgIEBPdXRwdXQoKSBub2RlVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxVeExpbms+KCk7XG4gICAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VXhMaW5rPigpO1xuXG4gICAgcHVibGljIG5vZGVJZDogc3RyaW5nO1xuICAgIHB1YmxpYyBjaGlsZHJlblNlbGVjdGVkID0gdHJ1ZTtcbiAgICBwdWJsaWMgYW1vdW50U2VsZWN0ZWRDaGlsZHJlbiA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0ZpcnN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNGaXJzdDtcbiAgICB9XG4gICAgc2V0IGlzRmlyc3QodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0ZpcnN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNGaXJzdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTGFzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzTGFzdDtcbiAgICB9XG4gICAgc2V0IGlzTGFzdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzTGFzdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzTGFzdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUm9vdE5vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Jvb3ROb2RlO1xuICAgIH1cbiAgICBzZXQgaXNSb290Tm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzUm9vdE5vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc1Jvb3ROb2RlID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGU7XG4gICAgfVxuICAgIHNldCBpc0NsaWNrVG9nZ2xpbmdOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNDbGlja1RvZ2dsaW5nTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc011bHRpc2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNNdWx0aXNlbGVjdDtcbiAgICB9XG4gICAgc2V0IGlzTXVsdGlzZWxlY3QodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc011bHRpc2VsZWN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNNdWx0aXNlbGVjdCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUmVjdXJzaXZlU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNSZWN1cnNpdmVTZWxlY3Rpb247XG4gICAgfVxuICAgIHNldCBpc1JlY3Vyc2l2ZVNlbGVjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzUmVjdXJzaXZlU2VsZWN0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uO1xuICAgIH1cbiAgICBzZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1Nob3dBY3RpdmVOb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTaG93QWN0aXZlTm9kZTtcbiAgICB9XG4gICAgc2V0IGlzU2hvd0FjdGl2ZU5vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc1Nob3dBY3RpdmVOb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNTaG93QWN0aXZlTm9kZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzSGlkZVRvZ2dsZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0hpZGVUb2dnbGVzO1xuICAgIH1cbiAgICBzZXQgaXNIaWRlVG9nZ2xlcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzSGlkZVRvZ2dsZXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0hpZGVUb2dnbGVzID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNDbGlja1NlbGVjdGluZ05vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NsaWNrU2VsZWN0aW5nTm9kZTtcbiAgICB9XG4gICAgc2V0IGlzQ2xpY2tTZWxlY3RpbmdOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNDbGlja1NlbGVjdGluZ05vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0NsaWNrU2VsZWN0aW5nTm9kZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhpZ2hsaWdodFBhdGgoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHRQYXRoO1xuICAgIH1cbiAgICBzZXQgaGlnaGxpZ2h0UGF0aCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodFBhdGggPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9oaWdobGlnaHRQYXRoID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgYXV0b1RyYW5zbGF0ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9UcmFuc2xhdGU7XG4gICAgfVxuICAgIHNldCBhdXRvVHJhbnNsYXRlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fYXV0b1RyYW5zbGF0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2F1dG9UcmFuc2xhdGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc1NlbGVjdEFsbCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1NlbGVjdEFsbDtcbiAgICB9XG4gICAgc2V0IGhhc1NlbGVjdEFsbCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2hhc1NlbGVjdEFsbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2hhc1NlbGVjdEFsbCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuICAgICAgICB0aGlzLm5vZGVJZCA9IGB1eC10cmVlLW5vZGUtJHt1bmlxdWVJZCgpfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc05vZGVDaGlsZHJlbihub2RlOiBVeExpbmspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZUtleWRvd24oZXZlbnQ6IGFueSwgdXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZUNsaWNrKGV2ZW50LCB1eExpbmspO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZVRvZ2dsZShldmVudDogRXZlbnQsIHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZS5leHBhbmRlZCA9ICF0aGlzLm5vZGUuZXhwYW5kZWQ7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHV4TGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZUNsaWNrKGV2ZW50OiBFdmVudCwgdXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1eExpbmsuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ub2RlLm1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCAmJiB0aGlzLmlzQ2xpY2tTZWxlY3RpbmdOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHV4TGluay5zZWxlY3RlZCA9ICF1eExpbmsuc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldFsnY2hlY2tlZCddID0gdXhMaW5rLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hlY2tib3hDaGFuZ2UodXhMaW5rLCBldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ub2RlLmNoaWxkcmVuIHx8IHRoaXMubm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlLmV4cGFuZGVkID0gIXRoaXMubm9kZS5leHBhbmRlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMubm9kZS51cmxdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLm5vZGUudXJsRXh0ZXJuYWwsIHRoaXMubm9kZS51cmxFeHRlcm5hbFRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGlja2VkRWwgPSBldmVudC50YXJnZXRbJ25vZGVOYW1lJ107XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQ2xpY2tUb2dnbGluZ05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlVG9nZ2xlKGV2ZW50LCB1eExpbmspO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGlja2VkRWwgPT09ICdTUEFOJyAmJiAodGhpcy5ub2RlLnVybCB8fCB0aGlzLm5vZGUudXJsRXh0ZXJuYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLm5vZGUudXJsXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5ub2RlLnVybEV4dGVybmFsLCB0aGlzLm5vZGUudXJsRXh0ZXJuYWxUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ub2RlLnVybF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMubm9kZS51cmxFeHRlcm5hbCwgdGhpcy5ub2RlLnVybEV4dGVybmFsVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXhMaW5rLmNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICB1eExpbmsuY29tbWFuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KHV4TGluayk7XG4gICAgICAgICAgICBjb25zdW1lRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2UodXhMaW5rOiBVeExpbmssIGV2dDogYW55KTogdm9pZCB7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSZWN1cnNpdmVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICghdXhMaW5rLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdXhMaW5rLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uUmVjdXJzaXZlbHkodXhMaW5rLCB1eExpbmsuc2VsZWN0ZWQpO1xuICAgICAgICAgICAgaWYgKHV4TGluay5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBhcmVudFNlbGVjdGlvbih1eExpbmsucGFyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodFBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50cyh1eExpbmssIGV2dC50YXJnZXQuY2hlY2tlZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5uZXh0KHV4TGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTWV0YWRhdGFOb2RlVG9nZ2xlKGV2ZW50OiBFdmVudCwgdXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlLmV4cGFuZGVkID0gIXRoaXMubm9kZS5leHBhbmRlZDtcbiAgICAgICAgY29uc3VtZUV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdWJOb2RlQ2xpY2sodXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdCh1eExpbmspO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN1Yk5vZGVUb2dnbGUodXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlVG9nZ2xlLmVtaXQodXhMaW5rKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2UodXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh1eExpbmspO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogVXhMaW5rKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgY2hlY2tJbnB1dExhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uICYmIHRoaXMubm9kZS5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnRGVzZWxlY3QgQWxsJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdTZWxlY3QgQWxsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbiAmJiAhdGhpcy5ub2RlLmhhc0NoaWxkcmVuKSB8fCAhdGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnRGVzZWxlY3Qgbm9kZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnU2VsZWN0IG5vZGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXJlbnRzKHV4TGluazogVXhMaW5rLCBpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHV4TGluayA9PT0gdGhpcy5ub2RlKSB7XG4gICAgICAgICAgICBpZiAoaXNDaGVja2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlWydoaWdobGlnaHRlZCddID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZENoaWxkcmVuID0gdGhpcy5oYXNDaGlsZFNlbGVjdGVkKHRoaXMubm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZVsnaGlnaGxpZ2h0ZWQnXSA9IGlzQ2hlY2tlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXhMaW5rLnBhcmVudCkge1xuICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHV4TGluay5wYXJlbnRbJ2hpZ2hsaWdodGVkJ10gPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQYXJlbnRzKHV4TGluay5wYXJlbnQsIGlzQ2hlY2tlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2hpbGRyZW4gPSB0aGlzLmhhc0NoaWxkU2VsZWN0ZWQodXhMaW5rLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHV4TGluay5wYXJlbnRbJ2hpZ2hsaWdodGVkJ10gPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50cyh1eExpbmsucGFyZW50LCBpc0NoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQ2hpbGRTZWxlY3RlZCh1eExpbms6IFV4TGluaywgc2VsZWN0ZWQgPSBbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKHV4TGluay5zZWxlY3RlZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWQucHVzaCh1eExpbmsubGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV4TGluay5jaGlsZHJlbiAmJiB1eExpbmsuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXhMaW5rLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGlsZFNlbGVjdGVkKGNoaWxkLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZVNlbGVjdGlvblJlY3Vyc2l2ZWx5KHV4TGluazogVXhMaW5rLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodXhMaW5rLmhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICB1eExpbmsuY2hpbGRyZW4uZm9yRWFjaCgobGluazogVXhMaW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgbGluay5zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb25SZWN1cnNpdmVseShsaW5rLCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlUGFyZW50U2VsZWN0aW9uKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB1eExpbmsuaW5kZXRlcm1pbmF0ZSA9ICF0aGlzLmFsbENoaWxkcmVuU2VsZWN0ZWQodXhMaW5rKTtcbiAgICAgICAgICAgIHV4TGluay5zZWxlY3RlZCA9IHRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbih1eExpbmspO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF1eExpbmsuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB1eExpbmsuaW5kZXRlcm1pbmF0ZSA9IHRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbih1eExpbmspO1xuICAgICAgICAgICAgICAgIHV4TGluay5zZWxlY3RlZCA9IHRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbih1eExpbmspO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodXhMaW5rLmluZGV0ZXJtaW5hdGUgJiYgIXRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbih1eExpbmspKSB7XG4gICAgICAgICAgICAgICAgdXhMaW5rLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB1eExpbmsuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1eExpbmsucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBhcmVudFNlbGVjdGlvbih1eExpbmsucGFyZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWxsQ2hpbGRyZW5TZWxlY3RlZCh1eGxpbms6IFV4TGluayk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdXhsaW5rLmNoaWxkcmVuLmZpbHRlcigoYykgPT4gKCFjLnNlbGVjdGVkIHx8IChjLnNlbGVjdGVkICYmIGMuaW5kZXRlcm1pbmF0ZSkpICYmIHRoaXMuY2hpbGRyZW5TZWxlY3RlZCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzU2VsZWN0ZWRDaGlsZHJlbih1eGxpbms6IFV4TGluayk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdXhsaW5rLmNoaWxkcmVuLmZpbHRlcigoYykgPT4gYy5zZWxlY3RlZCA9PT0gdHJ1ZSkubGVuZ3RoID4gMDtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndXgtdHJlZScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHV4LWEtdG9vbGJhci1maWx0ZXJcbiAgICAgICAgICAgICpuZ0lmPVwiaXNTaG93VG9vbGJhclwiXG4gICAgICAgICAgICBbaXNWaXNpYmxlXT1cImlzU2hvd1Rvb2xiYXJcIlxuICAgICAgICAgICAgW2lzVG9nZ2xlVmlzaWJsZV09XCIhaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICAoZmlsdGVyKT1cIm9uRmlsdGVyKCRldmVudClcIlxuICAgICAgICAgICAgW2ZpbHRlclZhbHVlXT1cInNldEZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgIChleHBhbmRBbGwpPVwib25FeHBhbmRBbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY29sbGFwc2VBbGwpPVwib25Db2xsYXBzZUFsbCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGZpbHRlckxhYmVsPVwie3sgZmlsdGVyTGFiZWwgfX1cIlxuICAgICAgICAgICAgW2V4cGFuZEFsbExhYmVsXT1cImV4cGFuZEFsbExhYmVsID8gZXhwYW5kQWxsTGFiZWwgOiBudWxsXCJcbiAgICAgICAgICAgIGNvbGxhcHNlQWxsTGFiZWw9XCJ7eyBjb2xsYXBzZUFsbExhYmVsIH19XCJcbiAgICAgICAgICAgIFtpc1RvZ2dsZUV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIlxuICAgICAgICAgICAgW2hhc0xhYmVsc109XCJoYXNMYWJlbHNcIlxuICAgICAgICAgICAgYXR0ci5kYXRhLWUyZT1cInt7IGUyZUF0dHIgfX0tYS10b29sYmFyLWZpbHRlclwiPlxuICAgICAgICA8L3V4LWEtdG9vbGJhci1maWx0ZXI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtY29udGFpbmVyXCIgKm5nSWY9XCJoYXNTZWxlY3RBbGwgfHwgaGFzU2VsZWN0QWxsRmlsdGVyZWRcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC1pbnB1dF9fY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc01pbmltdW1PbmVTZWxlY3RlZCA/ICdjaGVja2VkJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBjbGFzcz1cInV4LXRyZWVfX25vZGUtY2hlY2tib3gtbGFiZWxcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5jaGVja2JveC1sYWJlbC1pbmRldGVybWluYXRlXT1cImlzTWluaW11bU9uZVNlbGVjdGVkICYmICFpc0FsbFNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBmb3I9XCJzZWxlY3RBbGxcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlX19ub2RlLWNoZWNrYm94LWxhYmVsLS1vbmVsZXZlbF09XCJjaGVja0ZvckNoaWxkcmVuKClcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFsbFNlbGVjdGVkICYmICFpc01pbmltdW1PbmVTZWxlY3RlZCAmJiAhaXNBbGxTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAnZXVpLnV4dHJlZS5TRUxFQ1QtQUxMJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhbGxTZWxlY3RlZCB8fCBpc01pbmltdW1PbmVTZWxlY3RlZCB8fCBpc0FsbFNlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdldWkudXh0cmVlLlVOU0VMRUNULUFMTCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZXMubGVuZ3RoID4gNTAwICYmICFoYXNTZWxlY3RBbGwgJiYgIWhhc1NlbGVjdEFsbEZpbHRlcmVkOyBlbHNlIG5vVmlydHVhbFNjcm9sbFwiPlxuICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICAgICAgICAgICN2aXJ0dWFsU2Nyb2xsaW5nXG4gICAgICAgICAgICAgICAgaXRlbVNpemU9XCIzMFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC10cmVlX192aXJ0dWFsLXNjcm9sbGluZ19fY29udGFpbmVyXCJcbiAgICAgICAgICAgICAgICBtaW5CdWZmZXJQeD1cIjIwMDBcIlxuICAgICAgICAgICAgICAgIG1heEJ1ZmZlclB4PVwiMjQwMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKmNka1ZpcnR1YWxGb3I9XCJsZXQgbm9kZSBvZiB2aXNpYmxlTm9kZXM7IHRyYWNrQnk6IHRyYWNrQnlGblwiIGNsYXNzPVwidXgtdHJlZV9fdmlydHVhbC1zY3JvbGxpbmdfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHVsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInV4LXRyZWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWUtLWhpZGVsaW5lc109XCJpc0hpZGVMaW5lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZS0tbXVsdGlzZWxlY3RdPVwiaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZS0tb25lbGV2ZWxdPVwiY2hlY2tGb3JDaGlsZHJlbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1lMmU9XCJ7eyBlMmVBdHRyIH19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dXgtdHJlZS1ub2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGVDbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9kZVRvZ2dsZSk9XCJvbk5vZGVUb2dnbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNSb290Tm9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNNdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNSZWN1cnNpdmVTZWxlY3Rpb25dPVwiaXNSZWN1cnNpdmVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0NsaWNrVG9nZ2xpbmdOb2RlXT1cImlzQ2xpY2tUb2dnbGluZ05vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkSWNvbkNsYXNzPVwie3sgZXhwYW5kZWRJY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZEljb25DbGFzcz1cInt7IGNvbGxhcHNlZEljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlVmFyaWFibGVdPVwidGVtcGxhdGVWYXJpYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVDb250ZW50VGVtcGxhdGVdPVwibm9kZUNvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzU2hvd0FjdGl2ZU5vZGVdPVwiaXNTaG93QWN0aXZlTm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9UcmFuc2xhdGVdPVwiYXV0b1RyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzSGlkZVRvZ2dsZXNdPVwiaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzQ2xpY2tTZWxlY3RpbmdOb2RlXT1cImlzQ2xpY2tTZWxlY3RpbmdOb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0UGF0aF09XCJoaWdobGlnaHRQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25dPVwiaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdXgtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9WaXJ0dWFsU2Nyb2xsPlxuICAgICAgICAgICAgPHVsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC10cmVlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZS0taGlkZWxpbmVzXT1cImlzSGlkZUxpbmVzXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZS0tbXVsdGlzZWxlY3RdPVwiaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWUtLW9uZWxldmVsXT1cImNoZWNrRm9yQ2hpbGRyZW4oKVwiXG4gICAgICAgICAgICAgICAgYXR0ci5kYXRhLWUyZT1cInt7IGUyZUF0dHIgfX1cIj5cbiAgICAgICAgICAgICAgICA8dXgtdHJlZS1ub2RlXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBub2RlIG9mIG5vZGVzOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxuICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgKG5vZGVDbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKG5vZGVUb2dnbGUpPVwib25Ob2RlVG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbaXNSb290Tm9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzTXVsdGlzZWxlY3RdPVwiaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIFtpc1JlY3Vyc2l2ZVNlbGVjdGlvbl09XCJpc1JlY3Vyc2l2ZVNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtpc0NsaWNrVG9nZ2xpbmdOb2RlXT1cImlzQ2xpY2tUb2dnbGluZ05vZGVcIlxuICAgICAgICAgICAgICAgICAgICBleHBhbmRlZEljb25DbGFzcz1cInt7IGV4cGFuZGVkSWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkSWNvbkNsYXNzPVwie3sgY29sbGFwc2VkSWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlVmFyaWFibGVdPVwidGVtcGxhdGVWYXJpYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtub2RlQ29udGVudFRlbXBsYXRlXT1cIm5vZGVDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbaXNTaG93QWN0aXZlTm9kZV09XCJpc1Nob3dBY3RpdmVOb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F1dG9UcmFuc2xhdGVdPVwiYXV0b1RyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtpc0hpZGVUb2dnbGVzXT1cImlzSGlkZVRvZ2dsZXNcIlxuICAgICAgICAgICAgICAgICAgICBbaXNDbGlja1NlbGVjdGluZ05vZGVdPVwiaXNDbGlja1NlbGVjdGluZ05vZGVcIlxuICAgICAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0UGF0aF09XCJoaWdobGlnaHRQYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uXT1cImlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPC91eC10cmVlLW5vZGU+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgVXhUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIG5vZGVzOiBVeExpbmtbXTtcbiAgICBASW5wdXQoKSBjb2xsYXBzZUFsbExhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXhwYW5kQWxsTGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBmaWx0ZXJMYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZEljb25DbGFzcyA9ICdldWktaWNvbiBldWktaWNvbi1wbHVzLWNpcmNsZSc7XG4gICAgQElucHV0KCkgZXhwYW5kZWRJY29uQ2xhc3MgPSAnZXVpLWljb24gZXVpLWljb24tbWludXMtY2lyY2xlJztcbiAgICBASW5wdXQoKSBzZXRGaWx0ZXJWYWx1ZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGUyZUF0dHIgPSAndXgtdHJlZSc7XG5cbiAgICBAT3V0cHV0KCkgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVeExpbms+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPFV4TGluaz4oKTtcbiAgICAvLyBUT0RPOiBmb3IgZVVJIDE0IHJlbW92ZSB0aGUgW10gdHlwZVxuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV4TGluayB8IFtdPigpO1xuICAgIEBPdXRwdXQoKSBvbkZpbHRlclZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmKSB0ZW1wbGF0ZVZhcmlhYmxlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVXhUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkcmVuKFV4VHJlZU5vZGVDb21wb25lbnQpIHRyZWVOb2RlczogUXVlcnlMaXN0PFV4VHJlZU5vZGVDb21wb25lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoJ3ZpcnR1YWxTY3JvbGxpbmcnKSBwdWJsaWMgdmlydHVhbFNjcm9sbGluZzogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBwdWJsaWMgYWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgbmJOb2RlcyA9IDA7XG4gICAgcHVibGljIHZpc2libGVOb2RlcyA9IFtdO1xuICAgIHB1YmxpYyBub2RlQ29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIHB1YmxpYyBmaWx0ZXJWYWx1ZSA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNTaG93VG9vbGJhcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2hvd1Rvb2xiYXI7XG4gICAgfVxuICAgIHNldCBpc1Nob3dUb29sYmFyKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNTaG93VG9vbGJhciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzU2hvd1Rvb2xiYXIgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNFeHBhbmRlZDtcbiAgICB9XG4gICAgc2V0IGlzRXhwYW5kZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0V4cGFuZGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNFeHBhbmRlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTXVsdGlzZWxlY3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpc2VsZWN0O1xuICAgIH1cbiAgICBzZXQgaXNNdWx0aXNlbGVjdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzTXVsdGlzZWxlY3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc011bHRpc2VsZWN0ID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbjtcbiAgICB9XG4gICAgc2V0IGlzUmVjdXJzaXZlU2VsZWN0aW9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlO1xuICAgIH1cbiAgICBzZXQgaXNDbGlja1RvZ2dsaW5nTm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzQ2xpY2tUb2dnbGluZ05vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc0NsaWNrVG9nZ2xpbmdOb2RlID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNTaG93QWN0aXZlTm9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2hvd0FjdGl2ZU5vZGU7XG4gICAgfVxuICAgIHNldCBpc1Nob3dBY3RpdmVOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNTaG93QWN0aXZlTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzU2hvd0FjdGl2ZU5vZGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0hpZGVUb2dnbGVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNIaWRlVG9nZ2xlcztcbiAgICB9XG4gICAgc2V0IGlzSGlkZVRvZ2dsZXModmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0hpZGVUb2dnbGVzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNIaWRlVG9nZ2xlcyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzSGlkZUxpbmVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNIaWRlTGluZXM7XG4gICAgfVxuICAgIHNldCBpc0hpZGVMaW5lcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2lzSGlkZUxpbmVzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaXNIaWRlTGluZXMgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0NsaWNrU2VsZWN0aW5nTm9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ2xpY2tTZWxlY3RpbmdOb2RlO1xuICAgIH1cbiAgICBzZXQgaXNDbGlja1NlbGVjdGluZ05vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9pc0NsaWNrU2VsZWN0aW5nTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzQ2xpY2tTZWxlY3RpbmdOb2RlID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgc2hvd0ZpbHRlcmVkQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93RmlsdGVyZWRDaGlsZHJlbjtcbiAgICB9XG4gICAgc2V0IHNob3dGaWx0ZXJlZENoaWxkcmVuKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5fc2hvd0ZpbHRlcmVkQ2hpbGRyZW4gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zaG93RmlsdGVyZWRDaGlsZHJlbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGV4cGFuZEZpbHRlcmVkQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRGaWx0ZXJlZENoaWxkcmVuO1xuICAgIH1cbiAgICBzZXQgZXhwYW5kRmlsdGVyZWRDaGlsZHJlbih2YWx1ZTogQm9vbGVhbklucHV0KSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZEZpbHRlcmVkQ2hpbGRyZW4gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9leHBhbmRGaWx0ZXJlZENoaWxkcmVuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaGlnaGxpZ2h0UGF0aCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZ2hsaWdodFBhdGg7XG4gICAgfVxuICAgIHNldCBoaWdobGlnaHRQYXRoKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0UGF0aCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2hpZ2hsaWdodFBhdGggPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBhdXRvVHJhbnNsYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1RyYW5zbGF0ZTtcbiAgICB9XG4gICAgc2V0IGF1dG9UcmFuc2xhdGUodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9hdXRvVHJhbnNsYXRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfYXV0b1RyYW5zbGF0ZSA9IHRydWU7XG4gICAgQElucHV0KClcbiAgICBnZXQgaGFzTGFiZWxzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzTGFiZWxzO1xuICAgIH1cbiAgICBzZXQgaGFzTGFiZWxzKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faGFzTGFiZWxzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaGFzTGFiZWxzID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBoYXNTZWxlY3RBbGwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNTZWxlY3RBbGw7XG4gICAgfVxuICAgIHNldCBoYXNTZWxlY3RBbGwodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9oYXNTZWxlY3RBbGwgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9oYXNTZWxlY3RBbGwgPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBoYXNTZWxlY3RBbGxGaWx0ZXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1NlbGVjdEFsbEZpbHRlcmVkO1xuICAgIH1cbiAgICBzZXQgaGFzU2VsZWN0QWxsRmlsdGVyZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgICAgICB0aGlzLl9oYXNTZWxlY3RBbGxGaWx0ZXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgX2hhc1NlbGVjdEFsbEZpbHRlcmVkID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjtcbiAgICB9XG4gICAgc2V0IGlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICAgICAgdGhpcy5faXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IHRydWU7XG5cbiAgICBnZXQgaXNNaW5pbXVtT25lU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKS5sZW5ndGggPiAwICYmICF0aGlzLmFsbFNlbGVjdGVkO1xuICAgIH1cblxuICAgIGdldCBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCkubGVuZ3RoID09PSB0aGlzLm5iTm9kZXM7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcyAmJiBjaGFuZ2VzWydub2RlcyddKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVOb2RlcyA9IHRoaXMudmlzaWJsZSh0aGlzLm5vZGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RBbGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2V0TmJOb2Rlcyh0aGlzLm5vZGVzKTtcblxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXROb2Rlc0V4cGFuZGVkU3RhdGUodGhpcy5ub2RlcywgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBhcmVudE5vZGUodGhpcy5ub2RlcywgbnVsbCk7XG5cbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0VHlwZSgpID09PSAnbm9kZUNvbnRlbnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlQ29udGVudFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmlzaWJsZShub2RlczogVXhMaW5rW10pOiBVeExpbmtbXSB7XG5cbiAgICAgICAgaWYodGhpcy5oYXNTZWxlY3RBbGxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZU5vZGVzUmVjdXJzaXZlKG5vZGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBub2Rlcy5maWx0ZXIoKG4pID0+IG4udmlzaWJsZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXROYk5vZGVzKG5vZGVzOiBVeExpbmtbXSk6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5iTm9kZXMrKztcbiAgICAgICAgICAgIGlmIChub2RlLmhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChsaW5rOiBVeExpbmspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROYk5vZGVzKFtsaW5rXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlbGVjdEFsbENoYW5nZShlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IGUudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIGlmICghZS50YXJnZXQuY2hlY2spIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuaGFzU2VsZWN0QWxsRmlsdGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Tm9kZXNTZWxlY3RlZEZpbHRlcmVkU3RhdGUodGhpcy52aXNpYmxlTm9kZXMsIGUudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1NlbGVjdGVkU3RhdGUodGhpcy5ub2RlcywgZS50YXJnZXQuY2hlY2tlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2VsZWN0ZWROb2RlcygpOiBVeExpbmtbXSB7XG5cbiAgICAgICAgICBpZih0aGlzLmZpbHRlclZhbHVlICE9PSAnJyAmJiB0aGlzLmFsbFNlbGVjdGVkICYmIHRoaXMuaGFzU2VsZWN0QWxsRmlsdGVyZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpc2libGVOb2RlcztcbiAgICAgICAgICB9ICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGVkTm9kZXNSZWN1cnNpdmUodGhpcy5ub2Rlcyk7XG4gICAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZVRvZ2dsZSh1eExpbms6IFV4TGluayk6IHZvaWQge1xuICAgICAgICB0aGlzLm5vZGVUb2dnbGUuZW1pdCh1eExpbmspO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5vZGVDbGljayh1eExpbms6IFV4TGluayk6IHZvaWQge1xuICAgICAgICBpZiAoIXV4TGluay5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdCh1eExpbmspO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNDbGlja1RvZ2dsaW5nTm9kZSAmJiB1eExpbmsuaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTm9kZVRvZ2dsZSh1eExpbmspO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlzZWxlY3QgJiYgdGhpcy5pc1Nob3dBY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1NlbGVjdGVkU3RhdGUodGhpcy5ub2RlcywgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHV4TGluay5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25FeHBhbmRBbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0Tm9kZXNFeHBhbmRlZFN0YXRlKHRoaXMubm9kZXMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNvbGxhcHNlQWxsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldE5vZGVzRXhwYW5kZWRTdGF0ZSh0aGlzLm5vZGVzLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIGlmICghdXhMaW5rLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh1eExpbmspO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkZpbHRlcihmaWx0ZXJWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cbiAgICAgICAgaWYgKGZpbHRlclZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1Zpc2libGVTdGF0ZSh0aGlzLm5vZGVzLCBmYWxzZSk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5leHBhbmRGaWx0ZXJlZENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNGaWx0ZXJNYXRjaGVkKG5vZGUsIGZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kRmlsdGVyZWRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRmlsdGVyTWF0Y2hlZEV4cGFuZChub2RlLCBmaWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1Zpc2libGVTdGF0ZSh0aGlzLm5vZGVzLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0ZpbHRlcmVkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Zpc2libGVDaGlsZHJlbihub2RlLCBmaWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5leHBhbmRGaWx0ZXJlZENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc0V4cGFuZGVkU3RhdGUodGhpcy5ub2RlcywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZpc2libGVOb2RlcyA9IHRoaXMudmlzaWJsZSh0aGlzLm5vZGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Tm9kZXNWaXNpYmxlU3RhdGUodGhpcy5ub2RlcywgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVOb2RlcyA9IHRoaXMudmlzaWJsZSh0aGlzLm5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbGluZz8uc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMuaGFzU2VsZWN0QWxsRmlsdGVyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Tm9kZXNTZWxlY3RlZEZpbHRlcmVkU3RhdGUodGhpcy52aXNpYmxlTm9kZXMsIHRoaXMuYWxsU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZSAgPSBmaWx0ZXJWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkZpbHRlclZhbHVlLmVtaXQoZmlsdGVyVmFsdWUpO1xuICAgIH1cblxuICAgIGlzRmlsdGVyTWF0Y2hlZEV4cGFuZChub2RlOiBVeExpbmssIGZpbHRlclZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgbm9kZVsnaGlnaGxpZ2h0ZWQnXSA9IGZhbHNlO1xuICAgICAgICBpZiAobm9kZS5sYWJlbC50b1VwcGVyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsdWUudG9VcHBlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIG5vZGVbJ2hpZ2hsaWdodGVkJ10gPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZVsnaGlnaGxpZ2h0ZWQnXSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGRyZW5Ob2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0ZpbHRlck1hdGNoZWRFeHBhbmQoY2hpbGRyZW5Ob2RlLCBmaWx0ZXJWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5Ob2RlLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBub2RlWydoaWdobGlnaHRlZCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogVXhMaW5rKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGNoZWNrRm9yQ2hpbGRyZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5ub2Rlcy5zb21lKChub2RlKSA9PiBub2RlLmhhc0NoaWxkcmVuKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzZXROb2RlKHRoaXMubm9kZXMpO1xuICAgICAgICAvLyBUT0RPOiBpbnZlc3RpZ2F0ZSBpZiB3ZSBjYW4gZW1pdCBudWxsIGluc3RlYWQgb2YgW11cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChbXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldE5vZGUobm9kZXM6IFV4TGlua1tdKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldE5vZGUobm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWaXNpYmxlQ2hpbGRyZW4obm9kZTogVXhMaW5rLCBmaWx0ZXJWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChub2RlLnBhcmVudCAmJiBub2RlLnBhcmVudC52aXNpYmxlID09PSB0cnVlICYmIG5vZGUucGFyZW50LmxhYmVsLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZS50b1VwcGVyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIG5vZGUudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZHJlbk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmlzaWJsZUNoaWxkcmVuKGNoaWxkcmVuTm9kZSwgZmlsdGVyVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkTm9kZXNSZWN1cnNpdmUobm9kZXM6IFV4TGlua1tdKTogVXhMaW5rW10ge1xuICAgICAgICByZXR1cm4gKG5vZGVzIHx8IFtdKS5yZWR1Y2UoKGFjYywgbm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5zZWxlY3RlZCAmJiAhbm9kZS5pbmRldGVybWluYXRlXG4gICAgICAgICAgICAgICAgICAgID8gWy4uLmFjYywgbm9kZSwgLi4udGhpcy5nZXRTZWxlY3RlZE5vZGVzUmVjdXJzaXZlKG5vZGUuY2hpbGRyZW4pXVxuICAgICAgICAgICAgICAgICAgICA6IFsuLi5hY2MsIC4uLnRoaXMuZ2V0U2VsZWN0ZWROb2Rlc1JlY3Vyc2l2ZShub2RlLmNoaWxkcmVuKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBub2RlLnNlbGVjdGVkID8gWy4uLmFjYywgbm9kZV0gOiBbLi4uYWNjXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmlzaWJsZU5vZGVzUmVjdXJzaXZlKG5vZGVzOiBVeExpbmtbXSk6IFV4TGlua1tdIHtcbiAgICAgICAgcmV0dXJuIChub2RlcyB8fCBbXSkucmVkdWNlKChhY2MsIG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlLmhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUudmlzaWJsZVxuICAgICAgICAgICAgICAgICAgICA/IFsuLi5hY2MsIG5vZGUsIC4uLnRoaXMuZ2V0VmlzaWJsZU5vZGVzUmVjdXJzaXZlKG5vZGUuY2hpbGRyZW4pXVxuICAgICAgICAgICAgICAgICAgICA6IFsuLi5hY2MsIC4uLnRoaXMuZ2V0VmlzaWJsZU5vZGVzUmVjdXJzaXZlKG5vZGUuY2hpbGRyZW4pXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUudmlzaWJsZSA/IFsuLi5hY2MsIG5vZGVdIDogWy4uLmFjY107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRmlsdGVyTWF0Y2hlZChub2RlOiBVeExpbmssIGZpbHRlclZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUubGFiZWw/LnRvVXBwZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZT8udG9VcHBlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxpbmc/LnNjcm9sbFRvSW5kZXgoMCk7XG4gICAgICAgICAgICBub2RlLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZS52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZHJlbk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmlsdGVyTWF0Y2hlZChjaGlsZHJlbk5vZGUsIGZpbHRlclZhbHVlKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbk5vZGUudmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXROb2Rlc0V4cGFuZGVkU3RhdGUobm9kZXM6IFV4TGlua1tdLCBleHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZXNFeHBhbmRlZFN0YXRlKG5vZGUuY2hpbGRyZW4sIGV4cGFuZGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXROb2Rlc1Zpc2libGVTdGF0ZShub2RlczogVXhMaW5rW10sIHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgbm9kZS52aXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1Zpc2libGVTdGF0ZShub2RlLmNoaWxkcmVuLCB2aXNpYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXROb2Rlc1NlbGVjdGVkU3RhdGUobm9kZXM6IFV4TGlua1tdLCBzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBub2RlLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZXNTZWxlY3RlZFN0YXRlKG5vZGUuY2hpbGRyZW4sIHNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1NlbGVjdEFsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuICAgIHByaXZhdGUgc2V0Tm9kZXNTZWxlY3RlZEZpbHRlcmVkU3RhdGUobm9kZXM6IFV4TGlua1tdLCBzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZihub2RlLnZpc2libGUpe1xuICAgICAgICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1NlbGVjdGVkRmlsdGVyZWRTdGF0ZShub2RlLmNoaWxkcmVuLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RBbGxGaWx0ZXJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UGFyZW50Tm9kZShub2RlczogVXhMaW5rW10sIHBhcmVudE5vZGU6IFV4TGluayk6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYXJlbnROb2RlKG5vZGUuY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBVeFRvb2xiYXJGaWx0ZXJDb21wb25lbnRNb2R1bGUsXG4gICAgICAgIFV4QnV0dG9uQ29tcG9uZW50TW9kdWxlLFxuICAgICAgICBVeEJhZGdlQ29tcG9uZW50TW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtVeFRyZWVDb21wb25lbnQsIFV4VHJlZU5vZGVDb21wb25lbnRdLFxuICAgIGRlY2xhcmF0aW9uczogW1V4VHJlZUNvbXBvbmVudCwgVXhUcmVlTm9kZUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFV4VHJlZUNvbXBvbmVudE1vZHVsZSB7fVxuIiwiPGxpXG4gICAgKm5nSWY9XCJub2RlLnZpc2libGVcIlxuICAgIGNsYXNzPVwidXgtdHJlZV9fbm9kZVwiXG4gICAgW2NsYXNzLmZpcnN0LWNoaWxkXT1cImlzRmlyc3RcIlxuICAgIFtjbGFzcy5sYXN0LWNoaWxkXT1cImlzTGFzdFwiXG4gICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtLWV4cGFuZGFibGVdPVwiaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzXCJcbiAgICBbY2xhc3MudXgtdHJlZV9fbm9kZS0tZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgdGl0bGU9XCJ7eyBub2RlLnRvb2x0aXBMYWJlbCA/IG5vZGUudG9vbHRpcExhYmVsIDogbm9kZS5sYWJlbCB9fVwiXG4gICAgYXR0ci5kYXRhLWUyZT1cInt7IGUyZUF0dHIgfX1cIj5cbiAgICA8ZGl2IGNsYXNzPVwidXgtdHJlZV9fbm9kZS13cmFwcGVyXCIgW2NsYXNzLnV4LXRyZWVfX25vZGUtLXNlbGVjdGVkXT1cIm5vZGUuc2VsZWN0ZWRcIj5cbiAgICAgICAgPHV4LWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZVRvZ2dsZSgkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uTm9kZUtleWRvd24oJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwidXgtdHJlZV9fbm9kZS10b2dnbGUtaWNvblwiXG4gICAgICAgICAgICAqbmdJZj1cImhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICBbaXNTbWFsbF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtpc0ZsYXRdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbYXJpYUxhYmVsXT1cIm5vZGUuZXhwYW5kZWQgPyAnQ29sbGFwc2UnIDogJ0V4cGFuZCdcIlxuICAgICAgICAgICAgW2ljb25DbGFzc109XCJub2RlLmV4cGFuZGVkID8gZXhwYW5kZWRJY29uQ2xhc3MgOiBjb2xsYXBzZWRJY29uQ2xhc3NcIj48L3V4LWJ1dHRvbj5cblxuICAgICAgICA8c3BhblxuICAgICAgICAgICAgKm5nSWY9XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgIFtjbGFzcy51eC10cmVlX19wYXJlbnRdPVwiaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzXCJcbiAgICAgICAgICAgIFtjbGFzcy51eC10cmVlX19sZWFmXT1cIiFoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXNcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC1pbnB1dF9fY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5jaGVja2JveC1sYWJlbC1pbmRldGVybWluYXRlXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnV4LWlucHV0X19jaGVja2JveC0tc2VsZWN0ZWRdPVwibm9kZS5zZWxlY3RlZCAmJiAhbm9kZS5pbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwibm9kZUlkXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwibm9kZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwibm9kZS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJjaGVja0lucHV0TGFiZWwoKVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKG5vZGUsICRldmVudClcIiAvPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidXgtdHJlZV9fbm9kZS1jaGVja2JveC1sYWJlbFwiIFtjbGFzcy5jaGVja2JveC1sYWJlbC1pbmRldGVybWluYXRlXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZVwiIFtmb3JdPVwibm9kZUlkXCI+IDwvbGFiZWw+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIm5vZGVDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJ1eC10cmVlX19jdXN0b20tY29udGVudFwiXG4gICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fcGFyZW50XT1cImhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbGVhZl09XCIhaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRUZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+IDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9kZUNvbnRlbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGUudHlwZUxhYmVsIHx8IG5vZGUuaWNvbkNsYXNzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLnR5cGVMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtdHJlZV9fbm9kZS10eXBlIHV4LXRyZWVfX25vZGUtdHlwZS0te3sgbm9kZS50eXBlQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbm9kZS10eXBlLXBhcmVudF09XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXMgJiYgIWlzTXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlQ2xpY2soJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uTm9kZUtleWRvd24oJGV2ZW50LCBub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBub2RlLnR5cGVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibm9kZS5pY29uQ2xhc3NcIiBjbGFzcz1cInV4LXRyZWVfX25vZGUtaWNvbiB1eC10cmVlX19ub2RlLXR5cGUtLXt7IG5vZGUuaWNvblR5cGVDbGFzcyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7IG5vZGUuaWNvbkNsYXNzIH19XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1eC10cmVlX19ub2RlLWxhYmVsLXdyYXBwZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LW11dGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtbGFiZWwtLWhpZ2hsaWdodGVkXT1cIm5vZGVbJ2hpZ2hsaWdodGVkJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Ob2RlS2V5ZG93bigkZXZlbnQsIG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImF1dG9UcmFuc2xhdGU7IGVsc2UgbWFudWFsVHJhbnNsYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBub2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21hbnVhbFRyYW5zbGF0aW9uPnt7IG5vZGUubGFiZWwgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzLmV1aS11LXRleHQtbGluay1leHRlcm5hbF09XCJub2RlICYmIG5vZGUudXJsRXh0ZXJuYWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShub2RlLnR5cGVMYWJlbCB8fCBub2RlLmljb25DbGFzcylcIj5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInV4LXRyZWVfX25vZGUtbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbm9kZS1sYWJlbC1wYXJlbnRdPVwiaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzICYmICFpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtbGFiZWwtLWhpZ2hsaWdodGVkXT1cIm5vZGVbJ2hpZ2hsaWdodGVkJ11cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGV4dC1tdXRlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbk5vZGVLZXlkb3duKCRldmVudCwgbm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhdXRvVHJhbnNsYXRlOyBlbHNlIG1hbnVhbFRyYW5zbGF0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBub2RlLmxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtYW51YWxUcmFuc2xhdGlvbj57eyBub2RlLmxhYmVsIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzLmV1aS11LXRleHQtbGluay1leHRlcm5hbF09XCJub2RlICYmIG5vZGUudXJsRXh0ZXJuYWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJub2RlLmJhZGdlc1wiIGNsYXNzPVwiZXVpLXUtbWwtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDx1eC1iYWRnZVxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgYmFkZ2Ugb2Ygbm9kZS5iYWRnZXNcIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwidXgtdHJlZV9fbm9kZS1iYWRnZVwiXG4gICAgICAgICAgICAgICAgICAgIGlzVGlueT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBpc091dGxpbmU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgaXNQaWxsPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGVDbGFzcz1cInt7IGJhZGdlLnR5cGVDbGFzcyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBiYWRnZS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvdXgtYmFkZ2U+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUubWV0YWRhdGEgJiYgbm9kZS5tZXRhZGF0YS50aXRsZSAmJiBub2RlLm1ldGFkYXRhLnRpdGxlLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtdHJlZV9fbm9kZS1tZXRhY29udGVudC10b2dnbGUgdXgtdHJlZV9fbm9kZS1jbGlja2FibGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk1ldGFkYXRhTm9kZVRvZ2dsZSgkZXZlbnQsIG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldWktaWNvblwiIFtuZ0NsYXNzXT1cIm5vZGUuZXhwYW5kZWQgPyAnZXVpLWljb24gZXVpLWljb24tYW5nbGUtZG93bicgOiAnZXVpLWljb24gZXVpLWljb24tYW5nbGUtcmlnaHQnXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS5leHBhbmRlZFwiPlxuICAgICAgICA8dWwgKm5nSWY9XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSlcIiBjbGFzcz1cInV4LXRyZWVfX25vZGVzXCI+XG4gICAgICAgICAgICA8dXgtdHJlZS1ub2RlXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN1Yk5vZGUgb2Ygbm9kZS5jaGlsZHJlbjsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgbGV0IGlzTGFzdCA9IGxhc3Q7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgICAgICAgICAgW25vZGVdPVwic3ViTm9kZVwiXG4gICAgICAgICAgICAgICAgW2lzTXVsdGlzZWxlY3RdPVwiaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgW2lzUmVjdXJzaXZlU2VsZWN0aW9uXT1cImlzUmVjdXJzaXZlU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAobm9kZUNsaWNrKT1cIm9uU3ViTm9kZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChub2RlVG9nZ2xlKT1cIm9uU3ViTm9kZVRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtpc0ZpcnN0XT1cImlzRmlyc3RcIlxuICAgICAgICAgICAgICAgIFtpc0xhc3RdPVwiaXNMYXN0XCJcbiAgICAgICAgICAgICAgICBbaXNDbGlja1RvZ2dsaW5nTm9kZV09XCJpc0NsaWNrVG9nZ2xpbmdOb2RlXCJcbiAgICAgICAgICAgICAgICBleHBhbmRlZEljb25DbGFzcz1cInt7IGV4cGFuZGVkSWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICBjb2xsYXBzZWRJY29uQ2xhc3M9XCJ7eyBjb2xsYXBzZWRJY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZVZhcmlhYmxlXT1cInRlbXBsYXRlVmFyaWFibGVcIlxuICAgICAgICAgICAgICAgIFtub2RlQ29udGVudFRlbXBsYXRlXT1cIm5vZGVDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtpc1Nob3dBY3RpdmVOb2RlXT1cImlzU2hvd0FjdGl2ZU5vZGVcIlxuICAgICAgICAgICAgICAgIFtpc0hpZGVUb2dnbGVzXT1cImlzSGlkZVRvZ2dsZXNcIlxuICAgICAgICAgICAgICAgIFtpc0NsaWNrU2VsZWN0aW5nTm9kZV09XCJpc0NsaWNrU2VsZWN0aW5nTm9kZVwiXG4gICAgICAgICAgICAgICAgW2hpZ2hsaWdodFBhdGhdPVwiaGlnaGxpZ2h0UGF0aFwiXG4gICAgICAgICAgICAgICAgW2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uXT1cImlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICBbYXV0b1RyYW5zbGF0ZV09XCJhdXRvVHJhbnNsYXRlXCI+XG4gICAgICAgICAgICA8L3V4LXRyZWUtbm9kZT5cbiAgICAgICAgPC91bD5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGUubWV0YWRhdGEgJiYgbm9kZS5tZXRhZGF0YS50aXRsZSAmJiBub2RlLm1ldGFkYXRhLnRpdGxlLmxlbmd0aCA+IDBcIiBjbGFzcz1cInV4LXRyZWVfX25vZGUtbWV0YWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVZhcmlhYmxlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbWV0YWRhdGE6IG5vZGUubWV0YWRhdGEgfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9saT5cbiJdfQ==