@eui/components 15.0.0-rc.12 → 15.0.0-rc.13

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 (71) hide show
  1. package/docs/components/EuiHeaderUserProfileComponent.html +34 -1
  2. package/docs/components/EuiSidebarMenuComponent.html +1 -1
  3. package/docs/components/EuiToolbarItemUserProfileComponent.html +34 -1
  4. package/docs/components/EuiUserProfileComponent.html +26 -2
  5. package/docs/components/UxTreeNodeComponent.html +1 -1
  6. package/docs/dependencies.html +1 -1
  7. package/docs/js/menu-wc.js +15 -15
  8. package/docs/js/menu-wc_es5.js +1 -1
  9. package/docs/js/search/search_index.js +2 -2
  10. package/docs/miscellaneous/variables.html +19 -19
  11. package/docs/modules/EuiAllModule.html +6 -0
  12. package/docs/modules/EuiAppModule.html +6 -0
  13. package/docs/modules/EuiLayoutModule.html +6 -0
  14. package/docs/modules/EuiSidebarMenuModule.html +1 -1
  15. package/esm2020/eui-all/eui-all.module.mjs +9 -4
  16. package/esm2020/eui-sidebar-menu/eui-components-eui-sidebar-menu.mjs +5 -0
  17. package/esm2020/{layout/eui-sidebar-menu → eui-sidebar-menu}/eui-sidebar-menu.component.mjs +1 -1
  18. package/esm2020/{layout/eui-sidebar-menu → eui-sidebar-menu}/eui-sidebar-menu.module.mjs +1 -1
  19. package/esm2020/eui-sidebar-menu/index.mjs +3 -0
  20. package/esm2020/layout/eui-header/header-user-profile/header-user-profile.component.mjs +13 -8
  21. package/esm2020/layout/eui-layout.module.mjs +4 -9
  22. package/esm2020/layout/eui-toolbar/toolbar-item-user-profile/toolbar-item-user-profile.component.mjs +11 -7
  23. package/esm2020/layout/eui-user-profile/user-profile.component.mjs +12 -10
  24. package/esm2020/layout/index.mjs +1 -2
  25. package/esm2020/legacy/ux-dropdown-tree/ux-dropdown-tree.component.mjs +2 -2
  26. package/esm2020/legacy/ux-tree/ux-tree.component.mjs +11 -11
  27. package/eui-all/eui-all.module.d.ts +2 -1
  28. package/eui-all/eui-all.module.d.ts.map +1 -1
  29. package/eui-sidebar-menu/eui-components-eui-sidebar-menu.d.ts.map +1 -0
  30. package/{layout/eui-sidebar-menu → eui-sidebar-menu}/eui-sidebar-menu.component.d.ts +0 -0
  31. package/eui-sidebar-menu/eui-sidebar-menu.component.d.ts.map +1 -0
  32. package/{layout/eui-sidebar-menu → eui-sidebar-menu}/eui-sidebar-menu.module.d.ts +0 -0
  33. package/eui-sidebar-menu/eui-sidebar-menu.module.d.ts.map +1 -0
  34. package/{layout/eui-sidebar-menu → eui-sidebar-menu}/index.d.ts +0 -0
  35. package/eui-sidebar-menu/index.d.ts.map +1 -0
  36. package/fesm2015/eui-components-eui-all.mjs +8 -3
  37. package/fesm2015/eui-components-eui-all.mjs.map +1 -1
  38. package/fesm2015/eui-components-eui-sidebar-menu.mjs +117 -0
  39. package/fesm2015/eui-components-eui-sidebar-menu.mjs.map +1 -0
  40. package/fesm2015/eui-components-layout.mjs +45 -142
  41. package/fesm2015/eui-components-layout.mjs.map +1 -1
  42. package/fesm2015/eui-components-legacy-ux-dropdown-tree.mjs +2 -2
  43. package/fesm2015/eui-components-legacy-ux-dropdown-tree.mjs.map +1 -1
  44. package/fesm2015/eui-components-legacy-ux-tree.mjs +10 -10
  45. package/fesm2015/eui-components-legacy-ux-tree.mjs.map +1 -1
  46. package/fesm2020/eui-components-eui-all.mjs +8 -3
  47. package/fesm2020/eui-components-eui-all.mjs.map +1 -1
  48. package/fesm2020/eui-components-eui-sidebar-menu.mjs +117 -0
  49. package/fesm2020/eui-components-eui-sidebar-menu.mjs.map +1 -0
  50. package/fesm2020/eui-components-layout.mjs +45 -142
  51. package/fesm2020/eui-components-layout.mjs.map +1 -1
  52. package/fesm2020/eui-components-legacy-ux-dropdown-tree.mjs +2 -2
  53. package/fesm2020/eui-components-legacy-ux-dropdown-tree.mjs.map +1 -1
  54. package/fesm2020/eui-components-legacy-ux-tree.mjs +10 -10
  55. package/fesm2020/eui-components-legacy-ux-tree.mjs.map +1 -1
  56. package/layout/eui-header/header-user-profile/header-user-profile.component.d.ts +7 -4
  57. package/layout/eui-header/header-user-profile/header-user-profile.component.d.ts.map +1 -1
  58. package/layout/eui-layout.module.d.ts +1 -2
  59. package/layout/eui-layout.module.d.ts.map +1 -1
  60. package/layout/eui-toolbar/toolbar-item-user-profile/toolbar-item-user-profile.component.d.ts +7 -4
  61. package/layout/eui-toolbar/toolbar-item-user-profile/toolbar-item-user-profile.component.d.ts.map +1 -1
  62. package/layout/eui-user-profile/user-profile.component.d.ts +7 -6
  63. package/layout/eui-user-profile/user-profile.component.d.ts.map +1 -1
  64. package/layout/index.d.ts +0 -1
  65. package/layout/index.d.ts.map +1 -1
  66. package/legacy/ux-tree/ux-tree.component.d.ts.map +1 -1
  67. package/package.json +9 -1
  68. package/esm2020/layout/eui-sidebar-menu/index.mjs +0 -3
  69. package/layout/eui-sidebar-menu/eui-sidebar-menu.component.d.ts.map +0 -1
  70. package/layout/eui-sidebar-menu/eui-sidebar-menu.module.d.ts.map +0 -1
  71. package/layout/eui-sidebar-menu/index.d.ts.map +0 -1
@@ -13,12 +13,11 @@ import { EuiIconModule } from '@eui/components/eui-icon';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "@angular/router";
15
15
  import * as i2 from "@angular/common";
16
- import * as i3 from "@angular/forms";
17
- import * as i4 from "@eui/components/legacy/ux-button";
18
- import * as i5 from "@eui/components/eui-icon";
19
- import * as i6 from "@ngx-translate/core";
20
- import * as i7 from "@eui/deprecated/ux-a-toolbar-filter";
21
- import * as i8 from "@angular/cdk/scrolling";
16
+ import * as i3 from "@eui/components/legacy/ux-button";
17
+ import * as i4 from "@eui/components/eui-icon";
18
+ import * as i5 from "@ngx-translate/core";
19
+ import * as i6 from "@eui/deprecated/ux-a-toolbar-filter";
20
+ import * as i7 from "@angular/cdk/scrolling";
22
21
  export class UxTreeNodeComponent {
23
22
  constructor(router) {
24
23
  this.router = router;
@@ -129,6 +128,7 @@ export class UxTreeNodeComponent {
129
128
  }
130
129
  }
131
130
  onCheckboxChange(uxLink, evt) {
131
+ uxLink.selected = !evt.target.checked;
132
132
  if (this.isRecursiveSelection) {
133
133
  if (!uxLink.selected) {
134
134
  uxLink.indeterminate = false;
@@ -252,10 +252,10 @@ export class UxTreeNodeComponent {
252
252
  }
253
253
  }
254
254
  /** @nocollapse */ UxTreeNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: UxTreeNodeComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
255
- /** @nocollapse */ UxTreeNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", 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 *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\tattr.data-e2e=\"{{ e2eAttr }}\">\n\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 *ngIf=\"isMultiselect\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <input type=\"checkbox\"\n class=\"ux-input__checkbox\"\n [class.checkbox-label-indeterminate]=\"node.indeterminate\"\n [class.ux-input__checkbox--selected]=\"node.selected\"\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 *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\n [ngTemplateOutlet]=\"nodeContentTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-template>\n </div>\n\n <ng-container *ngIf=\"!nodeContentTemplate\">\n <ng-container *ngIf=\"node.typeLabel || node.iconClass\">\n <span *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 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 <span *ngFor=\"let badge of node.badges\"\n class=\"ux-badge ux-badge--small ux-badge--outline ux-badge--pill ux-badge--{{ badge.typeClass }} ux-tree__node-badge\">\n {{badge.label}}\n </span>\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=\"old-eui-angle-down\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"!node.expanded\" icon=\"old-eui-angle-right\"></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 *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\" [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: "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.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" }] });
255
+ /** @nocollapse */ UxTreeNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.0", 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 *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\tattr.data-e2e=\"{{ e2eAttr }}\">\n\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 *ngIf=\"isMultiselect\" [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\" [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <eui-icon-svg\n *ngIf=\"node.selected && !node.indeterminate\"\n euiPrimary\n icon=\"old-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=\"old-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=\"old-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 *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\n [ngTemplateOutlet]=\"nodeContentTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-template>\n </div>\n\n <ng-container *ngIf=\"!nodeContentTemplate\">\n <ng-container *ngIf=\"node.typeLabel || node.iconClass\">\n <span *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 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 <span *ngFor=\"let badge of node.badges\"\n class=\"ux-badge ux-badge--small ux-badge--outline ux-badge--pill ux-badge--{{ badge.typeClass }} ux-tree__node-badge\">\n {{badge.label}}\n </span>\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=\"old-eui-angle-down\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"!node.expanded\" icon=\"old-eui-angle-right\"></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 *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\" [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.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: i5.TranslatePipe, name: "translate" }] });
256
256
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: UxTreeNodeComponent, decorators: [{
257
257
  type: Component,
258
- args: [{ selector: 'ux-tree-node', template: "<li *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\tattr.data-e2e=\"{{ e2eAttr }}\">\n\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 *ngIf=\"isMultiselect\"\n [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\"\n [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <input type=\"checkbox\"\n class=\"ux-input__checkbox\"\n [class.checkbox-label-indeterminate]=\"node.indeterminate\"\n [class.ux-input__checkbox--selected]=\"node.selected\"\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 *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\n [ngTemplateOutlet]=\"nodeContentTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-template>\n </div>\n\n <ng-container *ngIf=\"!nodeContentTemplate\">\n <ng-container *ngIf=\"node.typeLabel || node.iconClass\">\n <span *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 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 <span *ngFor=\"let badge of node.badges\"\n class=\"ux-badge ux-badge--small ux-badge--outline ux-badge--pill ux-badge--{{ badge.typeClass }} ux-tree__node-badge\">\n {{badge.label}}\n </span>\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=\"old-eui-angle-down\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"!node.expanded\" icon=\"old-eui-angle-right\"></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 *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\" [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" }]
258
+ args: [{ selector: 'ux-tree-node', template: "<li *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\tattr.data-e2e=\"{{ e2eAttr }}\">\n\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 *ngIf=\"isMultiselect\" [class.ux-tree__parent]=\"hasNodeChildren(node) && !isHideToggles\" [class.ux-tree__leaf]=\"!hasNodeChildren(node) && !isHideToggles\">\n <eui-icon-svg\n *ngIf=\"node.selected && !node.indeterminate\"\n euiPrimary\n icon=\"old-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=\"old-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=\"old-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 *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\n [ngTemplateOutlet]=\"nodeContentTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-template>\n </div>\n\n <ng-container *ngIf=\"!nodeContentTemplate\">\n <ng-container *ngIf=\"node.typeLabel || node.iconClass\">\n <span *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 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 <span *ngFor=\"let badge of node.badges\"\n class=\"ux-badge ux-badge--small ux-badge--outline ux-badge--pill ux-badge--{{ badge.typeClass }} ux-tree__node-badge\">\n {{badge.label}}\n </span>\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=\"old-eui-angle-down\"></eui-icon-svg>\n <eui-icon-svg *ngIf=\"!node.expanded\" icon=\"old-eui-angle-right\"></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 *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\" [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" }]
259
259
  }], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { expandedIconClass: [{
260
260
  type: Input
261
261
  }], collapsedIconClass: [{
@@ -684,7 +684,7 @@ export class UxTreeComponent {
684
684
  </ux-tree-node>
685
685
  </ul>
686
686
  </ng-template>
687
- `, 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-label.ux-tree__node-label--highlighted{font-weight:700}.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-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{margin-left:0}.ux-tree--multiselect .ux-tree__node .ux-tree__leaf{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 });
687
+ `, 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-label.ux-tree__node-label--highlighted{font-weight:700}.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-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: i6.UxToolbarFilterComponent, selector: "ux-a-toolbar-filter", inputs: ["isVisible", "filterLabel", "expandAllLabel", "collapseAllLabel", "isFilterVisible", "isToggleVisible", "isToggleExpanded", "filterValue", "hasLabels", "e2eAttr"], outputs: ["filter", "expandAll", "collapseAll"] }, { kind: "directive", type: i7.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i7.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i7.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: i5.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
688
688
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: UxTreeComponent, decorators: [{
689
689
  type: Component,
690
690
  args: [{ selector: 'ux-tree', template: `
@@ -782,7 +782,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
782
782
  </ux-tree-node>
783
783
  </ul>
784
784
  </ng-template>
785
- `, 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-label.ux-tree__node-label--highlighted{font-weight:700}.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-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{margin-left:0}.ux-tree--multiselect .ux-tree__node .ux-tree__leaf{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"] }]
785
+ `, 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-label.ux-tree__node-label--highlighted{font-weight:700}.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-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"] }]
786
786
  }], propDecorators: { nodes: [{
787
787
  type: Input
788
788
  }], collapseAllLabel: [{
@@ -894,4 +894,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImpor
894
894
  ],
895
895
  }]
896
896
  }] });
897
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXgtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9sZWdhY3kvdXgtdHJlZS91eC10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xlZ2FjeS91eC10cmVlL3V4LXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUdSLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBNEIsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBTXpELE1BQU0sT0FBTyxtQkFBbUI7SUFxRTVCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFB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SztnQkFLRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBS0YsYUFBYTtzQkFEaEIsS0FBSztnQkFLRixhQUFhO3NCQURoQixLQUFLO2dCQUtGLFNBQVM7c0JBRFosS0FBSztnQkFLRixZQUFZO3NCQURmLEtBQUs7Z0JBS0YsMEJBQTBCO3NCQUQ3QixLQUFLOztBQWdTVixNQUFNLE9BQU8scUJBQXFCOztxSUFBckIscUJBQXFCO3NJQUFyQixxQkFBcUIsaUJBdFhyQixlQUFlLEVBdFhmLG1CQUFtQixhQXl0QnhCLFlBQVk7UUFDWixXQUFXO1FBQ1gsOEJBQThCO1FBQzlCLHVCQUF1QjtRQUN2QixzQkFBc0I7UUFDdEIsZUFBZTtRQUNmLGVBQWU7UUFDZixhQUFhLGFBMVdSLGVBQWUsRUF0WGYsbUJBQW1CO3NJQTR1Qm5CLHFCQUFxQixZQW5CMUIsWUFBWTtRQUNaLFdBQVc7UUFDWCw4QkFBOEI7UUFDOUIsdUJBQXVCO1FBQ3ZCLHNCQUFzQjtRQUN0QixlQUFlO1FBQ2YsZUFBZTtRQUNmLGFBQWE7MkZBWVIscUJBQXFCO2tCQXJCakMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLDhCQUE4Qjt3QkFDOUIsdUJBQXVCO3dCQUN2QixzQkFBc0I7d0JBQ3RCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixhQUFhO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsZUFBZTt3QkFDZixtQkFBbUI7cUJBQ3RCO29CQUNELFlBQVksRUFBRTt3QkFDVixlQUFlO3dCQUNmLG1CQUFtQjtxQkFDdEI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFV4TGluayB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNvbnN1bWVFdmVudCwgdW5pcXVlSWQgfSBmcm9tICdAZXVpL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcblxuaW1wb3J0IHsgVXhUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9sZWdhY3kvY29tbW9uL3V4LWRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgVXhUb29sYmFyRmlsdGVyQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnQGV1aS9kZXByZWNhdGVkL3V4LWEtdG9vbGJhci1maWx0ZXInO1xuaW1wb3J0IHsgVXhCdXR0b25Db21wb25lbnRNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvbGVnYWN5L3V4LWJ1dHRvbic7XG5pbXBvcnQgeyBVeEJhZGdlQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2xlZ2FjeS91eC1iYWRnZSc7XG5pbXBvcnQgeyBFdWlJY29uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pY29uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1eC10cmVlLW5vZGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91eC10cmVlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBVeFRyZWVOb2RlQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBleHBhbmRlZEljb25DbGFzczogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZEljb25DbGFzczogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlVmFyaWFibGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgbm9kZTogVXhMaW5rO1xuICAgIEBJbnB1dCgpIG5vZGVDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgZTJlQXR0cjogc3RyaW5nID0gJ3V4LXRyZWUtbm9kZSc7XG5cbiAgICBAT3V0cHV0KCkgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVeExpbms+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPFV4TGluaz4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVeExpbms+KCk7XG5cbiAgICBwdWJsaWMgbm9kZUlkOiBzdHJpbmc7XG4gICAgcHVibGljIGNoaWxkcmVuU2VsZWN0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHB1YmxpYyBhbW91bnRTZWxlY3RlZENoaWxkcmVuOiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNGaXJzdCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzRmlyc3Q7IH1cbiAgICBzZXQgaXNGaXJzdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzRmlyc3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTGFzdCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzTGFzdDsgfVxuICAgIHNldCBpc0xhc3QodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc0xhc3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNMYXN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSb290Tm9kZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzUm9vdE5vZGU7IH1cbiAgICBzZXQgaXNSb290Tm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzUm9vdE5vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNSb290Tm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlOyB9XG4gICAgc2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzQ2xpY2tUb2dnbGluZ05vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc011bHRpc2VsZWN0KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNNdWx0aXNlbGVjdDsgfVxuICAgIHNldCBpc011bHRpc2VsZWN0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faXNNdWx0aXNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc011bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbjsgfVxuICAgIHNldCBpc1JlY3Vyc2l2ZVNlbGVjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzUmVjdXJzaXZlU2VsZWN0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjsgfVxuICAgIHNldCBpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1Nob3dBY3RpdmVOb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNTaG93QWN0aXZlTm9kZTsgfVxuICAgIHNldCBpc1Nob3dBY3RpdmVOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faXNTaG93QWN0aXZlTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc1Nob3dBY3RpdmVOb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNIaWRlVG9nZ2xlcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzSGlkZVRvZ2dsZXM7IH1cbiAgICBzZXQgaXNIaWRlVG9nZ2xlcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzSGlkZVRvZ2dsZXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNIaWRlVG9nZ2xlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xpY2tTZWxlY3RpbmdOb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNDbGlja1NlbGVjdGluZ05vZGU7IH1cbiAgICBzZXQgaXNDbGlja1NlbGVjdGluZ05vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc0NsaWNrU2VsZWN0aW5nTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc0NsaWNrU2VsZWN0aW5nTm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhpZ2hsaWdodFBhdGgoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9oaWdobGlnaHRQYXRoOyB9XG4gICAgc2V0IGhpZ2hsaWdodFBhdGgodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9oaWdobGlnaHRQYXRoID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2hpZ2hsaWdodFBhdGg6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBhdXRvVHJhbnNsYXRlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fYXV0b1RyYW5zbGF0ZTsgfVxuICAgIHNldCBhdXRvVHJhbnNsYXRlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5fYXV0b1RyYW5zbGF0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9hdXRvVHJhbnNsYXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBoYXNTZWxlY3RBbGwoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9oYXNTZWxlY3RBbGw7IH1cbiAgICBzZXQgaGFzU2VsZWN0QWxsKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faGFzU2VsZWN0QWxsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2hhc1NlbGVjdEFsbCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuICAgICAgICB0aGlzLm5vZGVJZCA9IGB1eC10cmVlLW5vZGUtJHt1bmlxdWVJZCgpfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc05vZGVDaGlsZHJlbihub2RlOiBVeExpbmspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZUtleWRvd24oZXZlbnQ6IGFueSwgdXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZUNsaWNrKGV2ZW50LCB1eExpbmspO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZVRvZ2dsZShldmVudDogRXZlbnQsIHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZS5leHBhbmRlZCA9ICF0aGlzLm5vZGUuZXhwYW5kZWQ7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHV4TGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZUNsaWNrKGV2ZW50OiBFdmVudCwgdXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1eExpbmsuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ub2RlLm1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCAmJiB0aGlzLmlzQ2xpY2tTZWxlY3RpbmdOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHV4TGluay5zZWxlY3RlZCA9ICF1eExpbmsuc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldFsnY2hlY2tlZCddID0gdXhMaW5rLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hlY2tib3hDaGFuZ2UodXhMaW5rLCBldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ub2RlLmNoaWxkcmVuIHx8IHRoaXMubm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlLmV4cGFuZGVkID0gIXRoaXMubm9kZS5leHBhbmRlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMubm9kZS51cmxdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLm5vZGUudXJsRXh0ZXJuYWwsIHRoaXMubm9kZS51cmxFeHRlcm5hbFRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGlja2VkRWwgPSBldmVudC50YXJnZXRbJ25vZGVOYW1lJ107XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQ2xpY2tUb2dnbGluZ05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlVG9nZ2xlKGV2ZW50LCB1eExpbmspO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGlja2VkRWwgPT09ICdTUEFOJyAmJiAodGhpcy5ub2RlLnVybCB8fCB0aGlzLm5vZGUudXJsRXh0ZXJuYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLm5vZGUudXJsXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5ub2RlLnVybEV4dGVybmFsLCB0aGlzLm5vZGUudXJsRXh0ZXJuYWxUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ub2RlLnVybF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMubm9kZS51cmxFeHRlcm5hbCwgdGhpcy5ub2RlLnVybEV4dGVybmFsVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXhMaW5rLmNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICB1eExpbmsuY29tbWFuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KHV4TGluayk7XG4gICAgICAgICAgICBjb25zdW1lRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2UodXhMaW5rOiBVeExpbmssIGV2dDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXV4TGluay5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHV4TGluay5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVNlbGVjdGlvblJlY3Vyc2l2ZWx5KHV4TGluaywgdXhMaW5rLnNlbGVjdGVkKTtcbiAgICAgICAgICAgIGlmICh1eExpbmsucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VQYXJlbnRTZWxlY3Rpb24odXhMaW5rLnBhcmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRQYXRoKSB7XG4gICAgICAgICAgICB0aGlzLmdldFBhcmVudHModXhMaW5rLCBldnQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh1eExpbmspO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk1ldGFkYXRhTm9kZVRvZ2dsZShldmVudDogRXZlbnQsIHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZS5leHBhbmRlZCA9ICF0aGlzLm5vZGUuZXhwYW5kZWQ7XG4gICAgICAgIGNvbnN1bWVFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU3ViTm9kZUNsaWNrKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZUNsaWNrLmVtaXQodXhMaW5rKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdWJOb2RlVG9nZ2xlKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHV4TGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLm5leHQodXhMaW5rKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IFV4TGluayk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIGNoZWNrSW5wdXRMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbiAmJiB0aGlzLm5vZGUuaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0Rlc2VsZWN0IEFsbCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnU2VsZWN0IEFsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKHRoaXMuaXNSZWN1cnNpdmVTZWxlY3Rpb24gJiYgIXRoaXMubm9kZS5oYXNDaGlsZHJlbikgfHwgIXRoaXMuaXNSZWN1cnNpdmVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5vZGUuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0Rlc2VsZWN0IG5vZGUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1NlbGVjdCBub2RlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50cyh1eExpbms6IFV4TGluaywgaXNDaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh1eExpbmsgPT09IHRoaXMubm9kZSkge1xuICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZVsnaGlnaGxpZ2h0ZWQnXSA9IGlzQ2hlY2tlZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDaGlsZHJlbiA9IHRoaXMuaGFzQ2hpbGRTZWxlY3RlZCh0aGlzLm5vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVbJ2hpZ2hsaWdodGVkJ10gPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV4TGluay5wYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChpc0NoZWNrZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB1eExpbmsucGFyZW50WydoaWdobGlnaHRlZCddID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50cyh1eExpbmsucGFyZW50LCBpc0NoZWNrZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZENoaWxkcmVuID0gdGhpcy5oYXNDaGlsZFNlbGVjdGVkKHV4TGluay5wYXJlbnQpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZENoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB1eExpbmsucGFyZW50WydoaWdobGlnaHRlZCddID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFBhcmVudHModXhMaW5rLnBhcmVudCwgaXNDaGVja2VkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0NoaWxkU2VsZWN0ZWQodXhMaW5rOiBVeExpbmssIHNlbGVjdGVkID0gW10pOiBzdHJpbmdbXSB7XG4gICAgICAgIGlmICh1eExpbmsuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkLnB1c2godXhMaW5rLmxhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1eExpbmsuY2hpbGRyZW4gJiYgdXhMaW5rLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHV4TGluay5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hpbGRTZWxlY3RlZChjaGlsZCwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGFuZ2VTZWxlY3Rpb25SZWN1cnNpdmVseSh1eExpbms6IFV4TGluaywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHV4TGluay5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgdXhMaW5rLmNoaWxkcmVuLmZvckVhY2goKGxpbms6IFV4TGluaykgPT4ge1xuICAgICAgICAgICAgICAgIGxpbmsuc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGluay5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uUmVjdXJzaXZlbHkobGluaywgdmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZVBhcmVudFNlbGVjdGlvbih1eExpbms6IFV4TGluayk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbikge1xuICAgICAgICAgICAgdXhMaW5rLmluZGV0ZXJtaW5hdGUgPSAhdGhpcy5hbGxDaGlsZHJlblNlbGVjdGVkKHV4TGluayk7XG4gICAgICAgICAgICB1eExpbmsuc2VsZWN0ZWQgPSB0aGlzLmhhc1NlbGVjdGVkQ2hpbGRyZW4odXhMaW5rKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdXhMaW5rLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdXhMaW5rLmluZGV0ZXJtaW5hdGUgPSB0aGlzLmhhc1NlbGVjdGVkQ2hpbGRyZW4odXhMaW5rKTtcbiAgICAgICAgICAgICAgICB1eExpbmsuc2VsZWN0ZWQgPSB0aGlzLmhhc1NlbGVjdGVkQ2hpbGRyZW4odXhMaW5rKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHV4TGluay5pbmRldGVybWluYXRlICYmICF0aGlzLmhhc1NlbGVjdGVkQ2hpbGRyZW4odXhMaW5rKSkge1xuICAgICAgICAgICAgICAgIHV4TGluay5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdXhMaW5rLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXhMaW5rLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VQYXJlbnRTZWxlY3Rpb24odXhMaW5rLnBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFsbENoaWxkcmVuU2VsZWN0ZWQodXhsaW5rOiBVeExpbmspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHV4bGluay5jaGlsZHJlbi5maWx0ZXIoYyA9PiAoIWMuc2VsZWN0ZWQgfHwgKGMuc2VsZWN0ZWQgJiYgYy5pbmRldGVybWluYXRlKSkgJiYgdGhpcy5jaGlsZHJlblNlbGVjdGVkKS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYXNTZWxlY3RlZENoaWxkcmVuKHV4bGluazogVXhMaW5rKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB1eGxpbmsuY2hpbGRyZW4uZmlsdGVyKGMgPT4gYy5zZWxlY3RlZCA9PT0gdHJ1ZSkubGVuZ3RoID4gMDtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndXgtdHJlZScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHV4LWEtdG9vbGJhci1maWx0ZXIgKm5nSWY9XCJpc1Nob3dUb29sYmFyXCIgW2lzVmlzaWJsZV09XCJpc1Nob3dUb29sYmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzVG9nZ2xlVmlzaWJsZV09XCIhaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXIpPVwib25GaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJWYWx1ZV09XCJzZXRGaWx0ZXJWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChleHBhbmRBbGwpPVwib25FeHBhbmRBbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2xsYXBzZUFsbCk9XCJvbkNvbGxhcHNlQWxsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJMYWJlbD1cInt7ZmlsdGVyTGFiZWx9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtleHBhbmRBbGxMYWJlbF09XCJleHBhbmRBbGxMYWJlbCA/IGV4cGFuZEFsbExhYmVsIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlQWxsTGFiZWw9XCJ7e2NvbGxhcHNlQWxsTGFiZWx9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1RvZ2dsZUV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzTGFiZWxzXT1cImhhc0xhYmVsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1lMmU9XCJ7eyBlMmVBdHRyIH19LWEtdG9vbGJhci1maWx0ZXJcIj5cbiAgICAgICAgPC91eC1hLXRvb2xiYXItZmlsdGVyPlxuXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaGFzU2VsZWN0QWxsXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtaW5wdXRfX2NoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBpZD1cInNlbGVjdEFsbFwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNNaW5pbXVtT25lU2VsZWN0ZWQgPyAnY2hlY2tlZCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0QWxsQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtdHJlZV9fbm9kZS1jaGVja2JveC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmNoZWNrYm94LWxhYmVsLWluZGV0ZXJtaW5hdGVdPVwiaXNNaW5pbXVtT25lU2VsZWN0ZWQgJiYgIWlzQWxsU2VsZWN0ZWRcIiBmb3I9XCJzZWxlY3RBbGxcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlX19ub2RlLWNoZWNrYm94LWxhYmVsLS1vbmVsZXZlbF09XCJjaGVja0ZvckNoaWxkcmVuKClcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFsbFNlbGVjdGVkICYmICFpc01pbmltdW1PbmVTZWxlY3RlZCAmJiAhaXNBbGxTZWxlY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDt7eyAnZXVpLnV4dHJlZS5TRUxFQ1QtQUxMJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhbGxTZWxlY3RlZCB8fCBpc01pbmltdW1PbmVTZWxlY3RlZCB8fCBpc0FsbFNlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3t7ICdldWkudXh0cmVlLlVOU0VMRUNULUFMTCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVzLmxlbmd0aCA+IDUwMCAmJiAhaGFzU2VsZWN0QWxsLCBlbHNlIG5vVmlydHVhbFNjcm9sbFwiPlxuICAgICAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCAjdmlydHVhbFNjcm9sbGluZyBpdGVtU2l6ZT1cIjMwXCIgY2xhc3M9XCJ1eC10cmVlX192aXJ0dWFsLXNjcm9sbGluZ19fY29udGFpbmVyXCIgbWluQnVmZmVyUHg9XCIyMDAwXCIgbWF4QnVmZmVyUHg9XCIyNDAwXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqY2RrVmlydHVhbEZvcj1cImxldCBub2RlIG9mIHZpc2libGVOb2RlczsgdHJhY2tCeTogdHJhY2tCeUZuO1wiIGNsYXNzPVwidXgtdHJlZV9fdmlydHVhbC1zY3JvbGxpbmdfX2l0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwidXgtdHJlZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZS0taGlkZWxpbmVzXT1cImlzSGlkZUxpbmVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlLS1tdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlLS1vbmVsZXZlbF09XCJjaGVja0ZvckNoaWxkcmVuKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLWUyZT1cInt7IGUyZUF0dHIgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx1eC10cmVlLW5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGVDbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub2RlVG9nZ2xlKT1cIm9uTm9kZVRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNSb290Tm9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc011bHRpc2VsZWN0XT1cImlzTXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzUmVjdXJzaXZlU2VsZWN0aW9uXT1cImlzUmVjdXJzaXZlU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0NsaWNrVG9nZ2xpbmdOb2RlXT1cImlzQ2xpY2tUb2dnbGluZ05vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRJY29uQ2xhc3M9XCJ7e2V4cGFuZGVkSWNvbkNsYXNzfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkSWNvbkNsYXNzPVwie3tjb2xsYXBzZWRJY29uQ2xhc3N9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVWYXJpYWJsZV09XCJ0ZW1wbGF0ZVZhcmlhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlQ29udGVudFRlbXBsYXRlXT1cIm5vZGVDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzU2hvd0FjdGl2ZU5vZGVdPVwiaXNTaG93QWN0aXZlTm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1RyYW5zbGF0ZV09XCJhdXRvVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0hpZGVUb2dnbGVzXT1cImlzSGlkZVRvZ2dsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzQ2xpY2tTZWxlY3RpbmdOb2RlXT1cImlzQ2xpY2tTZWxlY3RpbmdOb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWdobGlnaHRQYXRoXT1cImhpZ2hsaWdodFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uXT1cImlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3V4LXRyZWUtbm9kZT5cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI25vVmlydHVhbFNjcm9sbD5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cInV4LXRyZWVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlLS1oaWRlbGluZXNdPVwiaXNIaWRlTGluZXNcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlLS1tdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZS0tb25lbGV2ZWxdPVwiY2hlY2tGb3JDaGlsZHJlbigpXCJcbiAgICAgICAgICAgICAgICBhdHRyLmRhdGEtZTJlPVwie3sgZTJlQXR0ciB9fVwiPlxuICAgICAgICAgICAgICAgIDx1eC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IG5vZGUgb2Ygbm9kZXM7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGVDbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9kZVRvZ2dsZSk9XCJvbk5vZGVUb2dnbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNSb290Tm9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNNdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNSZWN1cnNpdmVTZWxlY3Rpb25dPVwiaXNSZWN1cnNpdmVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0NsaWNrVG9nZ2xpbmdOb2RlXT1cImlzQ2xpY2tUb2dnbGluZ05vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkSWNvbkNsYXNzPVwie3tleHBhbmRlZEljb25DbGFzc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWRJY29uQ2xhc3M9XCJ7e2NvbGxhcHNlZEljb25DbGFzc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVWYXJpYWJsZV09XCJ0ZW1wbGF0ZVZhcmlhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9kZUNvbnRlbnRUZW1wbGF0ZV09XCJub2RlQ29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNTaG93QWN0aXZlTm9kZV09XCJpc1Nob3dBY3RpdmVOb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1RyYW5zbGF0ZV09XCJhdXRvVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNIaWRlVG9nZ2xlc109XCJpc0hpZGVUb2dnbGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNDbGlja1NlbGVjdGluZ05vZGVdPVwiaXNDbGlja1NlbGVjdGluZ05vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoaWdobGlnaHRQYXRoXT1cImhpZ2hsaWdodFBhdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbl09XCJpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgIDwvdXgtdHJlZS1ub2RlPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFV4VHJlZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKSBub2RlczogVXhMaW5rW107XG4gICAgQElucHV0KCkgY29sbGFwc2VBbGxMYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGV4cGFuZEFsbExhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZmlsdGVyTGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2xsYXBzZWRJY29uQ2xhc3M6IHN0cmluZyA9ICdldWktaWNvbiBldWktaWNvbi1wbHVzLWNpcmNsZSc7XG4gICAgQElucHV0KCkgZXhwYW5kZWRJY29uQ2xhc3M6IHN0cmluZyA9ICdldWktaWNvbiBldWktaWNvbi1taW51cy1jaXJjbGUnO1xuICAgIEBJbnB1dCgpIHNldEZpbHRlclZhbHVlOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZTJlQXR0cjogc3RyaW5nID0gJ3V4LXRyZWUnO1xuXG4gICAgQE91dHB1dCgpIG5vZGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VXhMaW5rPigpO1xuICAgIEBPdXRwdXQoKSBub2RlVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxVeExpbms+KCk7XG4gICAgLy8gVE9ETzogZm9yIGVVSSAxNCByZW1vdmUgdGhlIFtdIHR5cGVcbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVeExpbmsgfCBbXT4oKTtcbiAgICBAT3V0cHV0KCkgb25GaWx0ZXJWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gICAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZikgdGVtcGxhdGVWYXJpYWJsZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkcmVuKFV4VGVtcGxhdGVEaXJlY3RpdmUpIHRlbXBsYXRlczogUXVlcnlMaXN0PGFueT47XG4gICAgQFZpZXdDaGlsZHJlbihVeFRyZWVOb2RlQ29tcG9uZW50KSB0cmVlTm9kZXM6IFF1ZXJ5TGlzdDxVeFRyZWVOb2RlQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkKCd2aXJ0dWFsU2Nyb2xsaW5nJykgcHVibGljIHZpcnR1YWxTY3JvbGxpbmc6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICAgIHB1YmxpYyBhbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBuYk5vZGVzID0gMDtcbiAgICBwdWJsaWMgdmlzaWJsZU5vZGVzID0gW107XG4gICAgcHVibGljIG5vZGVDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1Nob3dUb29sYmFyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNTaG93VG9vbGJhcjsgfVxuICAgIHNldCBpc1Nob3dUb29sYmFyKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faXNTaG93VG9vbGJhciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc1Nob3dUb29sYmFyOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNFeHBhbmRlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzRXhwYW5kZWQ7IH1cbiAgICBzZXQgaXNFeHBhbmRlZCh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzRXhwYW5kZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTXVsdGlzZWxlY3QoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc011bHRpc2VsZWN0OyB9XG4gICAgc2V0IGlzTXVsdGlzZWxlY3QodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc011bHRpc2VsZWN0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzTXVsdGlzZWxlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1JlY3Vyc2l2ZVNlbGVjdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzUmVjdXJzaXZlU2VsZWN0aW9uOyB9XG4gICAgc2V0IGlzUmVjdXJzaXZlU2VsZWN0aW9uKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNSZWN1cnNpdmVTZWxlY3Rpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0NsaWNrVG9nZ2xpbmdOb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNDbGlja1RvZ2dsaW5nTm9kZTsgfVxuICAgIHNldCBpc0NsaWNrVG9nZ2xpbmdOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faXNDbGlja1RvZ2dsaW5nTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc0NsaWNrVG9nZ2xpbmdOb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNTaG93QWN0aXZlTm9kZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzU2hvd0FjdGl2ZU5vZGU7IH1cbiAgICBzZXQgaXNTaG93QWN0aXZlTm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzU2hvd0FjdGl2ZU5vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNTaG93QWN0aXZlTm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzSGlkZVRvZ2dsZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc0hpZGVUb2dnbGVzOyB9XG4gICAgc2V0IGlzSGlkZVRvZ2dsZXModmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc0hpZGVUb2dnbGVzID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzSGlkZVRvZ2dsZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0hpZGVMaW5lcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzSGlkZUxpbmVzOyB9XG4gICAgc2V0IGlzSGlkZUxpbmVzKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faXNIaWRlTGluZXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNIaWRlTGluZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0NsaWNrU2VsZWN0aW5nTm9kZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzQ2xpY2tTZWxlY3RpbmdOb2RlOyB9XG4gICAgc2V0IGlzQ2xpY2tTZWxlY3RpbmdOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faXNDbGlja1NlbGVjdGluZ05vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNDbGlja1NlbGVjdGluZ05vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBzaG93RmlsdGVyZWRDaGlsZHJlbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX3Nob3dGaWx0ZXJlZENoaWxkcmVuOyB9XG4gICAgc2V0IHNob3dGaWx0ZXJlZENoaWxkcmVuKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5fc2hvd0ZpbHRlcmVkQ2hpbGRyZW4gPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfc2hvd0ZpbHRlcmVkQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBleHBhbmRGaWx0ZXJlZENoaWxkcmVuKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZXhwYW5kRmlsdGVyZWRDaGlsZHJlbjsgfVxuICAgIHNldCBleHBhbmRGaWx0ZXJlZENoaWxkcmVuKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5fZXhwYW5kRmlsdGVyZWRDaGlsZHJlbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9leHBhbmRGaWx0ZXJlZENoaWxkcmVuOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaGlnaGxpZ2h0UGF0aCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2hpZ2hsaWdodFBhdGg7IH1cbiAgICBzZXQgaGlnaGxpZ2h0UGF0aCh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2hpZ2hsaWdodFBhdGggPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaGlnaGxpZ2h0UGF0aDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGF1dG9UcmFuc2xhdGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9hdXRvVHJhbnNsYXRlOyB9XG4gICAgc2V0IGF1dG9UcmFuc2xhdGUodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9hdXRvVHJhbnNsYXRlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2F1dG9UcmFuc2xhdGU6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc0xhYmVscygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2hhc0xhYmVsczsgfVxuICAgIHNldCBoYXNMYWJlbHModmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9oYXNMYWJlbHMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaGFzTGFiZWxzOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBoYXNTZWxlY3RBbGwoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9oYXNTZWxlY3RBbGw7IH1cbiAgICBzZXQgaGFzU2VsZWN0QWxsKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faGFzU2VsZWN0QWxsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2hhc1NlbGVjdEFsbCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb247IH1cbiAgICBzZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBnZXQgaXNNaW5pbXVtT25lU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKS5sZW5ndGggPiAwICYmICF0aGlzLmFsbFNlbGVjdGVkO1xuICAgIH1cblxuICAgIGdldCBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3RlZE5vZGVzKCkubGVuZ3RoID09PSB0aGlzLm5iTm9kZXM7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoIGNoYW5nZXMgJiYgY2hhbmdlc1snbm9kZXMnXSkge1xuICAgICAgICAgICAgdGhpcy52aXNpYmxlTm9kZXMgPSB0aGlzLnZpc2libGUodGhpcy5ub2Rlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzU2VsZWN0QWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXROYk5vZGVzKHRoaXMubm9kZXMpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXROb2Rlc0V4cGFuZGVkU3RhdGUodGhpcy5ub2RlcywgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFBhcmVudE5vZGUodGhpcy5ub2RlcywgbnVsbCk7XG5cbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0VHlwZSgpID09PSAnbm9kZUNvbnRlbnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlQ29udGVudFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmlzaWJsZShub2RlczogVXhMaW5rW10pOiBVeExpbmtbXSB7XG4gICAgICAgIHJldHVybiBub2Rlcy5maWx0ZXIobiA9PiBuLnZpc2libGUpO1xuICAgIH1cblxuICAgIGdldE5iTm9kZXMobm9kZXM6IFV4TGlua1tdKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmJOb2RlcyArKztcbiAgICAgICAgICAgIGlmIChub2RlLmhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChsaW5rOiBVeExpbmspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROYk5vZGVzKFtsaW5rXSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlbGVjdEFsbENoYW5nZShlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IGUudGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIGlmICghZS50YXJnZXQuY2hlY2spIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0Tm9kZXNTZWxlY3RlZFN0YXRlKHRoaXMubm9kZXMsIGUudGFyZ2V0LmNoZWNrZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RlZE5vZGVzKCk6IFV4TGlua1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWROb2Rlc1JlY3Vyc2l2ZSh0aGlzLm5vZGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ob2RlVG9nZ2xlKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHV4TGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZUNsaWNrKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIGlmICghdXhMaW5rLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KHV4TGluayk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0NsaWNrVG9nZ2xpbmdOb2RlICYmIHV4TGluay5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlVG9nZ2xlKHV4TGluayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNNdWx0aXNlbGVjdCAmJiB0aGlzLmlzU2hvd0FjdGl2ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVzU2VsZWN0ZWRTdGF0ZSh0aGlzLm5vZGVzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdXhMaW5rLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkV4cGFuZEFsbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXROb2Rlc0V4cGFuZGVkU3RhdGUodGhpcy5ub2RlcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ29sbGFwc2VBbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0Tm9kZXNFeHBhbmRlZFN0YXRlKHRoaXMubm9kZXMsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2UodXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1eExpbmsuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5uZXh0KHV4TGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRmlsdGVyKGZpbHRlclZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKGZpbHRlclZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1Zpc2libGVTdGF0ZSh0aGlzLm5vZGVzLCBmYWxzZSk7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5leHBhbmRGaWx0ZXJlZENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNGaWx0ZXJNYXRjaGVkKG5vZGUsIGZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuZXhwYW5kRmlsdGVyZWRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzRmlsdGVyTWF0Y2hlZEV4cGFuZChub2RlLCBmaWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1Zpc2libGVTdGF0ZSh0aGlzLm5vZGVzLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0ZpbHRlcmVkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Zpc2libGVDaGlsZHJlbihub2RlLCBmaWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5leHBhbmRGaWx0ZXJlZENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc0V4cGFuZGVkU3RhdGUodGhpcy5ub2RlcywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZpc2libGVOb2RlcyA9IHRoaXMudmlzaWJsZSh0aGlzLm5vZGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Tm9kZXNWaXNpYmxlU3RhdGUodGhpcy5ub2RlcywgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVOb2RlcyA9IHRoaXMudmlzaWJsZSh0aGlzLm5vZGVzKTtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbGluZz8uc2Nyb2xsVG9JbmRleCgwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRmlsdGVyVmFsdWUuZW1pdChmaWx0ZXJWYWx1ZSk7XG4gICAgfVxuXG4gICAgaXNGaWx0ZXJNYXRjaGVkRXhwYW5kKG5vZGU6IFV4TGluaywgZmlsdGVyVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBub2RlWydoaWdobGlnaHRlZCddID0gZmFsc2U7XG4gICAgICAgIGlmIChub2RlLmxhYmVsLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZS50b1VwcGVyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgbm9kZVsnaGlnaGxpZ2h0ZWQnXSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICBub2RlWydoaWdobGlnaHRlZCddID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZHJlbk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmlsdGVyTWF0Y2hlZEV4cGFuZChjaGlsZHJlbk5vZGUsIGZpbHRlclZhbHVlKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbk5vZGUuZXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVbJ2hpZ2hsaWdodGVkJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBVeExpbmspOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hlY2tGb3JDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLm5vZGVzLnNvbWUobm9kZSA9PiBub2RlLmhhc0NoaWxkcmVuKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzZXROb2RlKHRoaXMubm9kZXMpO1xuICAgICAgICAvLyBUT0RPOiBpbnZlc3RpZ2F0ZSBpZiB3ZSBjYW4gZW1pdCBudWxsIGluc3RlYWQgb2YgW11cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChbXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldE5vZGUobm9kZXM6IFV4TGlua1tdKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldE5vZGUobm9kZS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWaXNpYmxlQ2hpbGRyZW4obm9kZTogVXhMaW5rLCBmaWx0ZXJWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChub2RlLnBhcmVudCAmJiBub2RlLnBhcmVudC52aXNpYmxlID09PSB0cnVlICYmIG5vZGUucGFyZW50LmxhYmVsLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZS50b1VwcGVyQ2FzZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIG5vZGUudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZHJlbk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzVmlzaWJsZUNoaWxkcmVuKGNoaWxkcmVuTm9kZSwgZmlsdGVyVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNlbGVjdGVkTm9kZXNSZWN1cnNpdmUobm9kZXM6IFV4TGlua1tdKTogVXhMaW5rW10ge1xuICAgICAgICByZXR1cm4gKG5vZGVzIHx8IFtdKS5yZWR1Y2UoKGFjYywgbm9kZSkgPT4ge1xuICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKG5vZGUuc2VsZWN0ZWQgJiYgIW5vZGUuaW5kZXRlcm1pbmF0ZSkgP1xuICAgICAgICAgICAgICAgICAgICBbLi4uYWNjLCBub2RlLCAuLi50aGlzLmdldFNlbGVjdGVkTm9kZXNSZWN1cnNpdmUobm9kZS5jaGlsZHJlbildIDpcbiAgICAgICAgICAgICAgICAgICAgWy4uLmFjYywgLi4udGhpcy5nZXRTZWxlY3RlZE5vZGVzUmVjdXJzaXZlKG5vZGUuY2hpbGRyZW4pXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc2VsZWN0ZWQgPyBbLi4uYWNjLCBub2RlXSA6IFsuLi5hY2NdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBbXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0ZpbHRlck1hdGNoZWQobm9kZTogVXhMaW5rLCBmaWx0ZXJWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChub2RlLmxhYmVsPy50b1VwcGVyQ2FzZSgpLmluZGV4T2YoZmlsdGVyVmFsdWU/LnRvVXBwZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsaW5nPy5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICAgICAgbm9kZS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgbm9kZS52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZHJlbk5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmlsdGVyTWF0Y2hlZChjaGlsZHJlbk5vZGUsIGZpbHRlclZhbHVlKTtcblxuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbk5vZGUudmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXROb2Rlc0V4cGFuZGVkU3RhdGUobm9kZXM6IFV4TGlua1tdLCBleHBhbmRlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZXNFeHBhbmRlZFN0YXRlKG5vZGUuY2hpbGRyZW4sIGV4cGFuZGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXROb2Rlc1Zpc2libGVTdGF0ZShub2RlczogVXhMaW5rW10sIHZpc2libGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgbm9kZS52aXNpYmxlID0gdmlzaWJsZTtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1Zpc2libGVTdGF0ZShub2RlLmNoaWxkcmVuLCB2aXNpYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXROb2Rlc1NlbGVjdGVkU3RhdGUobm9kZXM6IFV4TGlua1tdLCBzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBub2RlLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZXNTZWxlY3RlZFN0YXRlKG5vZGUuY2hpbGRyZW4sIHNlbGVjdGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1NlbGVjdEFsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UGFyZW50Tm9kZShub2RlczogVXhMaW5rW10sIHBhcmVudE5vZGU6IFV4TGluayk6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYXJlbnROb2RlKG5vZGUuY2hpbGRyZW4sIG5vZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFV4VG9vbGJhckZpbHRlckNvbXBvbmVudE1vZHVsZSxcbiAgICAgICAgVXhCdXR0b25Db21wb25lbnRNb2R1bGUsXG4gICAgICAgIFV4QmFkZ2VDb21wb25lbnRNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgU2Nyb2xsaW5nTW9kdWxlLFxuICAgICAgICBFdWlJY29uTW9kdWxlLFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBVeFRyZWVDb21wb25lbnQsXG4gICAgICAgIFV4VHJlZU5vZGVDb21wb25lbnQsXG4gICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgVXhUcmVlQ29tcG9uZW50LFxuICAgICAgICBVeFRyZWVOb2RlQ29tcG9uZW50LFxuICAgIF0sXG59KVxuXG5leHBvcnQgY2xhc3MgVXhUcmVlQ29tcG9uZW50TW9kdWxlIHtcbn1cbiIsIjxsaSAqbmdJZj1cIm5vZGUudmlzaWJsZVwiXG4gICAgY2xhc3M9XCJ1eC10cmVlX19ub2RlXCJcbiAgICBbY2xhc3MuZmlyc3QtY2hpbGRdPVwiaXNGaXJzdFwiXG4gICAgW2NsYXNzLmxhc3QtY2hpbGRdPVwiaXNMYXN0XCJcbiAgICBbY2xhc3MudXgtdHJlZV9fbm9kZS0tZXhwYW5kYWJsZV09XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXNcIlxuICAgIFtjbGFzcy51eC10cmVlX19ub2RlLS1kaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICB0aXRsZT1cInt7IG5vZGUudG9vbHRpcExhYmVsID8gbm9kZS50b29sdGlwTGFiZWwgOiBub2RlLmxhYmVsIH19XCJcblx0YXR0ci5kYXRhLWUyZT1cInt7IGUyZUF0dHIgfX1cIj5cblxuICAgIDxkaXYgY2xhc3M9XCJ1eC10cmVlX19ub2RlLXdyYXBwZXJcIiBbY2xhc3MudXgtdHJlZV9fbm9kZS0tc2VsZWN0ZWRdPVwibm9kZS5zZWxlY3RlZFwiPlxuICAgICAgICA8dXgtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlVG9nZ2xlKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25Ob2RlS2V5ZG93bigkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJ1eC10cmVlX19ub2RlLXRvZ2dsZS1pY29uXCJcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzXCJcbiAgICAgICAgICAgIFtpc1NtYWxsXT1cInRydWVcIlxuICAgICAgICAgICAgW2lzRmxhdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFthcmlhTGFiZWxdID0gXCJub2RlLmV4cGFuZGVkID8gJ0NvbGxhcHNlJyA6ICdFeHBhbmQnXCJcbiAgICAgICAgICAgIFtpY29uQ2xhc3NdPVwibm9kZS5leHBhbmRlZCA/IGV4cGFuZGVkSWNvbkNsYXNzIDogY29sbGFwc2VkSWNvbkNsYXNzXCI+PC91eC1idXR0b24+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgIFtjbGFzcy51eC10cmVlX19wYXJlbnRdPVwiaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzXCJcbiAgICAgICAgICAgIFtjbGFzcy51eC10cmVlX19sZWFmXT1cIiFoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXNcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtaW5wdXRfX2NoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICBbY2xhc3MuY2hlY2tib3gtbGFiZWwtaW5kZXRlcm1pbmF0ZV09XCJub2RlLmluZGV0ZXJtaW5hdGVcIlxuICAgICAgICAgICAgICAgICAgIFtjbGFzcy51eC1pbnB1dF9fY2hlY2tib3gtLXNlbGVjdGVkXT1cIm5vZGUuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgIFtpZF09XCJub2RlSWRcIlxuICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJub2RlLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJub2RlLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNoZWNrSW5wdXRMYWJlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hlY2tib3hDaGFuZ2Uobm9kZSwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidXgtdHJlZV9fbm9kZS1jaGVja2JveC1sYWJlbFwiIFtjbGFzcy5jaGVja2JveC1sYWJlbC1pbmRldGVybWluYXRlXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZVwiIFtmb3JdPVwibm9kZUlkXCI+PC9sYWJlbD5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJub2RlQ29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICAgIGNsYXNzPVwidXgtdHJlZV9fY3VzdG9tLWNvbnRlbnRcIlxuICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX3BhcmVudF09XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXNcIlxuICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX2xlYWZdPVwiIWhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlc1wiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwibm9kZUNvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBub2RlIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbm9kZUNvbnRlbnRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGUudHlwZUxhYmVsIHx8IG5vZGUuaWNvbkNsYXNzXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJub2RlLnR5cGVMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidXgtdHJlZV9fbm9kZS10eXBlIHV4LXRyZWVfX25vZGUtdHlwZS0te3sgbm9kZS50eXBlQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbm9kZS10eXBlLXBhcmVudF09XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXMgJiYgIWlzTXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlQ2xpY2soJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uTm9kZUtleWRvd24oJGV2ZW50LCBub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBub2RlLnR5cGVMYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwibm9kZS5pY29uQ2xhc3NcIiBjbGFzcz1cInV4LXRyZWVfX25vZGUtaWNvbiB1eC10cmVlX19ub2RlLXR5cGUtLXt7IG5vZGUuaWNvblR5cGVDbGFzcyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7IG5vZGUuaWNvbkNsYXNzIH19XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1eC10cmVlX19ub2RlLWxhYmVsLXdyYXBwZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LW11dGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtbGFiZWwtLWhpZ2hsaWdodGVkXT1cIm5vZGVbJ2hpZ2hsaWdodGVkJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Ob2RlS2V5ZG93bigkZXZlbnQsIG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImF1dG9UcmFuc2xhdGU7IGVsc2UgbWFudWFsVHJhbnNsYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5vZGUubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbWFudWFsVHJhbnNsYXRpb24+e3sgbm9kZS5sYWJlbCB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3MuZXVpLXUtdGV4dC1saW5rLWV4dGVybmFsXT1cIm5vZGUgJiYgbm9kZS51cmxFeHRlcm5hbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhKG5vZGUudHlwZUxhYmVsIHx8IG5vZGUuaWNvbkNsYXNzKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidXgtdHJlZV9fbm9kZS1sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlX19ub2RlLWxhYmVsLXBhcmVudF09XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXMgJiYgIWlzTXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbm9kZS1sYWJlbC0taGlnaGxpZ2h0ZWRdPVwibm9kZVsnaGlnaGxpZ2h0ZWQnXVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50ZXh0LW11dGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlQ2xpY2soJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uTm9kZUtleWRvd24oJGV2ZW50LCBub2RlKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImF1dG9UcmFuc2xhdGU7IGVsc2UgbWFudWFsVHJhbnNsYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5vZGUubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI21hbnVhbFRyYW5zbGF0aW9uPnt7IG5vZGUubGFiZWwgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3MuZXVpLXUtdGV4dC1saW5rLWV4dGVybmFsXT1cIm5vZGUgJiYgbm9kZS51cmxFeHRlcm5hbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGUuYmFkZ2VzXCIgY2xhc3M9XCJldWktdS1tbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IGJhZGdlIG9mIG5vZGUuYmFkZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC1iYWRnZSB1eC1iYWRnZS0tc21hbGwgdXgtYmFkZ2UtLW91dGxpbmUgdXgtYmFkZ2UtLXBpbGwgdXgtYmFkZ2UtLXt7IGJhZGdlLnR5cGVDbGFzcyB9fSB1eC10cmVlX19ub2RlLWJhZGdlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7YmFkZ2UubGFiZWx9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5tZXRhZGF0YSAmJiBub2RlLm1ldGFkYXRhLnRpdGxlICYmIG5vZGUubWV0YWRhdGEudGl0bGUubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC10cmVlX19ub2RlLW1ldGFjb250ZW50LXRvZ2dsZSB1eC10cmVlX19ub2RlLWNsaWNrYWJsZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWV0YWRhdGFOb2RlVG9nZ2xlKCRldmVudCwgbm9kZSlcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnICpuZ0lmPVwibm9kZS5leHBhbmRlZFwiIGljb249XCJvbGQtZXVpLWFuZ2xlLWRvd25cIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnICpuZ0lmPVwiIW5vZGUuZXhwYW5kZWRcIiBpY29uPVwib2xkLWV1aS1hbmdsZS1yaWdodFwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS5leHBhbmRlZFwiPlxuICAgICAgICA8dWwgKm5nSWY9XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSlcIiBjbGFzcz1cInV4LXRyZWVfX25vZGVzXCI+XG4gICAgICAgICAgICA8dXgtdHJlZS1ub2RlICpuZ0Zvcj1cImxldCBzdWJOb2RlIG9mIG5vZGUuY2hpbGRyZW47IGxldCBpc0ZpcnN0ID0gZmlyc3Q7IGxldCBpc0xhc3QgPSBsYXN0OyB0cmFja0J5OiB0cmFja0J5Rm5cIlxuICAgICAgICAgICAgICAgIFtub2RlXT1cInN1Yk5vZGVcIlxuICAgICAgICAgICAgICAgIFtpc011bHRpc2VsZWN0XT1cImlzTXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgIFtpc1JlY3Vyc2l2ZVNlbGVjdGlvbl09XCJpc1JlY3Vyc2l2ZVNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgKG5vZGVDbGljayk9XCJvblN1Yk5vZGVDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobm9kZVRvZ2dsZSk9XCJvblN1Yk5vZGVUb2dnbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbaXNGaXJzdF09XCJpc0ZpcnN0XCIgW2lzTGFzdF09XCJpc0xhc3RcIlxuICAgICAgICAgICAgICAgIFtpc0NsaWNrVG9nZ2xpbmdOb2RlXT1cImlzQ2xpY2tUb2dnbGluZ05vZGVcIlxuICAgICAgICAgICAgICAgIGV4cGFuZGVkSWNvbkNsYXNzPVwie3sgZXhwYW5kZWRJY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgIGNvbGxhcHNlZEljb25DbGFzcz1cInt7IGNvbGxhcHNlZEljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgW3RlbXBsYXRlVmFyaWFibGVdPVwidGVtcGxhdGVWYXJpYWJsZVwiXG4gICAgICAgICAgICAgICAgW25vZGVDb250ZW50VGVtcGxhdGVdPVwibm9kZUNvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2lzU2hvd0FjdGl2ZU5vZGVdPVwiaXNTaG93QWN0aXZlTm9kZVwiXG4gICAgICAgICAgICAgICAgW2lzSGlkZVRvZ2dsZXNdPVwiaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICAgICAgW2lzQ2xpY2tTZWxlY3RpbmdOb2RlXT1cImlzQ2xpY2tTZWxlY3RpbmdOb2RlXCJcbiAgICAgICAgICAgICAgICBbaGlnaGxpZ2h0UGF0aF09XCJoaWdobGlnaHRQYXRoXCJcbiAgICAgICAgICAgICAgICBbaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25dPVwiaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgIFthdXRvVHJhbnNsYXRlXT1cImF1dG9UcmFuc2xhdGVcIj5cbiAgICAgICAgICAgIDwvdXgtdHJlZS1ub2RlPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibm9kZS5tZXRhZGF0YSAmJiBub2RlLm1ldGFkYXRhLnRpdGxlICYmIG5vZGUubWV0YWRhdGEudGl0bGUubGVuZ3RoID4gMFwiIGNsYXNzPVwidXgtdHJlZV9fbm9kZS1tZXRhY29udGVudFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlVmFyaWFibGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie21ldGFkYXRhOiBub2RlLm1ldGFkYXRhfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9saT5cbiJdfQ==
897
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXgtdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9sZWdhY3kvdXgtdHJlZS91eC10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2xlZ2FjeS91eC10cmVlL3V4LXRyZWUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBQ0wsUUFBUSxFQUdSLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBNEIsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDckYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7QUFNekQsTUFBTSxPQUFPLG1CQUFtQjtJQXFFNUIsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFN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O3NCQURkLEtBQUs7Z0JBS0Ysb0JBQW9CO3NCQUR2QixLQUFLO2dCQUtGLG9CQUFvQjtzQkFEdkIsS0FBSztnQkFLRixzQkFBc0I7c0JBRHpCLEtBQUs7Z0JBS0YsYUFBYTtzQkFEaEIsS0FBSztnQkFLRixhQUFhO3NCQURoQixLQUFLO2dCQUtGLFNBQVM7c0JBRFosS0FBSztnQkFLRixZQUFZO3NCQURmLEtBQUs7Z0JBS0YsMEJBQTBCO3NCQUQ3QixLQUFLOztBQWdTVixNQUFNLE9BQU8scUJBQXFCOztxSUFBckIscUJBQXFCO3NJQUFyQixxQkFBcUIsaUJBdFhyQixlQUFlLEVBeFhmLG1CQUFtQixhQTJ0QnhCLFlBQVk7UUFDWixXQUFXO1FBQ1gsOEJBQThCO1FBQzlCLHVCQUF1QjtRQUN2QixzQkFBc0I7UUFDdEIsZUFBZTtRQUNmLGVBQWU7UUFDZixhQUFhLGFBMVdSLGVBQWUsRUF4WGYsbUJBQW1CO3NJQTh1Qm5CLHFCQUFxQixZQW5CMUIsWUFBWTtRQUNaLFdBQVc7UUFDWCw4QkFBOEI7UUFDOUIsdUJBQXVCO1FBQ3ZCLHNCQUFzQjtRQUN0QixlQUFlO1FBQ2YsZUFBZTtRQUNmLGFBQWE7MkZBWVIscUJBQXFCO2tCQXJCakMsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLDhCQUE4Qjt3QkFDOUIsdUJBQXVCO3dCQUN2QixzQkFBc0I7d0JBQ3RCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixhQUFhO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsZUFBZTt3QkFDZixtQkFBbUI7cUJBQ3RCO29CQUNELFlBQVksRUFBRTt3QkFDVixlQUFlO3dCQUNmLG1CQUFtQjtxQkFDdEI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE5nTW9kdWxlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFV4TGluayB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGNvbnN1bWVFdmVudCwgdW5pcXVlSWQgfSBmcm9tICdAZXVpL2NvcmUnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBCb29sZWFuSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcblxuaW1wb3J0IHsgVXhUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9sZWdhY3kvY29tbW9uL3V4LWRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgVXhUb29sYmFyRmlsdGVyQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnQGV1aS9kZXByZWNhdGVkL3V4LWEtdG9vbGJhci1maWx0ZXInO1xuaW1wb3J0IHsgVXhCdXR0b25Db21wb25lbnRNb2R1bGUgfSBmcm9tICdAZXVpL2NvbXBvbmVudHMvbGVnYWN5L3V4LWJ1dHRvbic7XG5pbXBvcnQgeyBVeEJhZGdlQ29tcG9uZW50TW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2xlZ2FjeS91eC1iYWRnZSc7XG5pbXBvcnQgeyBFdWlJY29uTW9kdWxlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1pY29uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1eC10cmVlLW5vZGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91eC10cmVlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBVeFRyZWVOb2RlQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBleHBhbmRlZEljb25DbGFzczogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZEljb25DbGFzczogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlVmFyaWFibGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgbm9kZTogVXhMaW5rO1xuICAgIEBJbnB1dCgpIG5vZGVDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQElucHV0KCkgZTJlQXR0cjogc3RyaW5nID0gJ3V4LXRyZWUtbm9kZSc7XG5cbiAgICBAT3V0cHV0KCkgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVeExpbms+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPFV4TGluaz4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVeExpbms+KCk7XG5cbiAgICBwdWJsaWMgbm9kZUlkOiBzdHJpbmc7XG4gICAgcHVibGljIGNoaWxkcmVuU2VsZWN0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHB1YmxpYyBhbW91bnRTZWxlY3RlZENoaWxkcmVuOiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXNGaXJzdCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzRmlyc3Q7IH1cbiAgICBzZXQgaXNGaXJzdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzRmlyc3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzTGFzdCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzTGFzdDsgfVxuICAgIHNldCBpc0xhc3QodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc0xhc3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNMYXN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSb290Tm9kZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzUm9vdE5vZGU7IH1cbiAgICBzZXQgaXNSb290Tm9kZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzUm9vdE5vZGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNSb290Tm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlOyB9XG4gICAgc2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzQ2xpY2tUb2dnbGluZ05vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc011bHRpc2VsZWN0KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNNdWx0aXNlbGVjdDsgfVxuICAgIHNldCBpc011bHRpc2VsZWN0KHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faXNNdWx0aXNlbGVjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc011bHRpc2VsZWN0OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbjsgfVxuICAgIHNldCBpc1JlY3Vyc2l2ZVNlbGVjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzUmVjdXJzaXZlU2VsZWN0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjsgfVxuICAgIHNldCBpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1Nob3dBY3RpdmVOb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNTaG93QWN0aXZlTm9kZTsgfVxuICAgIHNldCBpc1Nob3dBY3RpdmVOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faXNTaG93QWN0aXZlTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc1Nob3dBY3RpdmVOb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNIaWRlVG9nZ2xlcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzSGlkZVRvZ2dsZXM7IH1cbiAgICBzZXQgaXNIaWRlVG9nZ2xlcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzSGlkZVRvZ2dsZXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNIaWRlVG9nZ2xlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xpY2tTZWxlY3RpbmdOb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNDbGlja1NlbGVjdGluZ05vZGU7IH1cbiAgICBzZXQgaXNDbGlja1NlbGVjdGluZ05vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc0NsaWNrU2VsZWN0aW5nTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc0NsaWNrU2VsZWN0aW5nTm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhpZ2hsaWdodFBhdGgoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9oaWdobGlnaHRQYXRoOyB9XG4gICAgc2V0IGhpZ2hsaWdodFBhdGgodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9oaWdobGlnaHRQYXRoID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2hpZ2hsaWdodFBhdGg6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBhdXRvVHJhbnNsYXRlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fYXV0b1RyYW5zbGF0ZTsgfVxuICAgIHNldCBhdXRvVHJhbnNsYXRlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5fYXV0b1RyYW5zbGF0ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9hdXRvVHJhbnNsYXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBoYXNTZWxlY3RBbGwoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9oYXNTZWxlY3RBbGw7IH1cbiAgICBzZXQgaGFzU2VsZWN0QWxsKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faGFzU2VsZWN0QWxsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2hhc1NlbGVjdEFsbCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xuICAgICAgICB0aGlzLm5vZGVJZCA9IGB1eC10cmVlLW5vZGUtJHt1bmlxdWVJZCgpfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc05vZGVDaGlsZHJlbihub2RlOiBVeExpbmspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZUtleWRvd24oZXZlbnQ6IGFueSwgdXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICB0aGlzLm9uTm9kZUNsaWNrKGV2ZW50LCB1eExpbmspO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZVRvZ2dsZShldmVudDogRXZlbnQsIHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIHRoaXMubm9kZS5leHBhbmRlZCA9ICF0aGlzLm5vZGUuZXhwYW5kZWQ7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHV4TGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTm9kZUNsaWNrKGV2ZW50OiBFdmVudCwgdXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1eExpbmsuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ub2RlLm1ldGFkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCAmJiB0aGlzLmlzQ2xpY2tTZWxlY3RpbmdOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIHV4TGluay5zZWxlY3RlZCA9ICF1eExpbmsuc2VsZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnRhcmdldFsnY2hlY2tlZCddID0gdXhMaW5rLnNlbGVjdGVkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hlY2tib3hDaGFuZ2UodXhMaW5rLCBldmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5ub2RlLmNoaWxkcmVuIHx8IHRoaXMubm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlLmV4cGFuZGVkID0gIXRoaXMubm9kZS5leHBhbmRlZDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMubm9kZS51cmxdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLm5vZGUudXJsRXh0ZXJuYWwsIHRoaXMubm9kZS51cmxFeHRlcm5hbFRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGlja2VkRWwgPSBldmVudC50YXJnZXRbJ25vZGVOYW1lJ107XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQ2xpY2tUb2dnbGluZ05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Ob2RlVG9nZ2xlKGV2ZW50LCB1eExpbmspO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGlja2VkRWwgPT09ICdTUEFOJyAmJiAodGhpcy5ub2RlLnVybCB8fCB0aGlzLm5vZGUudXJsRXh0ZXJuYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLm5vZGUudXJsXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5ub2RlLnVybEV4dGVybmFsLCB0aGlzLm5vZGUudXJsRXh0ZXJuYWxUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ub2RlLnVybF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ub2RlLnVybEV4dGVybmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMubm9kZS51cmxFeHRlcm5hbCwgdGhpcy5ub2RlLnVybEV4dGVybmFsVGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXhMaW5rLmNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICB1eExpbmsuY29tbWFuZCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm5vZGVDbGljay5lbWl0KHV4TGluayk7XG4gICAgICAgICAgICBjb25zdW1lRXZlbnQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hlY2tib3hDaGFuZ2UodXhMaW5rOiBVeExpbmssIGV2dDogYW55KTogdm9pZCB7XG4gICAgICAgIHV4TGluay5zZWxlY3RlZCA9ICFldnQudGFyZ2V0LmNoZWNrZWQ7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSZWN1cnNpdmVTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICghdXhMaW5rLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgdXhMaW5rLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU2VsZWN0aW9uUmVjdXJzaXZlbHkodXhMaW5rLCB1eExpbmsuc2VsZWN0ZWQpO1xuICAgICAgICAgICAgaWYgKHV4TGluay5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBhcmVudFNlbGVjdGlvbih1eExpbmsucGFyZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodFBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50cyh1eExpbmssIGV2dC50YXJnZXQuY2hlY2tlZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5uZXh0KHV4TGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTWV0YWRhdGFOb2RlVG9nZ2xlKGV2ZW50OiBFdmVudCwgdXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlLmV4cGFuZGVkID0gIXRoaXMubm9kZS5leHBhbmRlZDtcbiAgICAgICAgY29uc3VtZUV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TdWJOb2RlQ2xpY2sodXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlQ2xpY2suZW1pdCh1eExpbmspO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblN1Yk5vZGVUb2dnbGUodXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlVG9nZ2xlLmVtaXQodXhMaW5rKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWxlY3Rpb25DaGFuZ2UodXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UubmV4dCh1eExpbmspO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmFja0J5Rm4oaW5kZXg6IG51bWJlciwgaXRlbTogVXhMaW5rKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgY2hlY2tJbnB1dExhYmVsKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVjdXJzaXZlU2VsZWN0aW9uICYmIHRoaXMubm9kZS5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnRGVzZWxlY3QgQWxsJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdTZWxlY3QgQWxsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgodGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbiAmJiAhdGhpcy5ub2RlLmhhc0NoaWxkcmVuKSB8fCAhdGhpcy5pc1JlY3Vyc2l2ZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgaWYgKHRoaXMubm9kZS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnRGVzZWxlY3Qgbm9kZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAnU2VsZWN0IG5vZGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQYXJlbnRzKHV4TGluazogVXhMaW5rLCBpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHV4TGluayA9PT0gdGhpcy5ub2RlKSB7XG4gICAgICAgICAgICBpZiAoaXNDaGVja2VkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlWydoaWdobGlnaHRlZCddID0gaXNDaGVja2VkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZENoaWxkcmVuID0gdGhpcy5oYXNDaGlsZFNlbGVjdGVkKHRoaXMubm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZVsnaGlnaGxpZ2h0ZWQnXSA9IGlzQ2hlY2tlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXhMaW5rLnBhcmVudCkge1xuICAgICAgICAgICAgaWYgKGlzQ2hlY2tlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHV4TGluay5wYXJlbnRbJ2hpZ2hsaWdodGVkJ10gPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQYXJlbnRzKHV4TGluay5wYXJlbnQsIGlzQ2hlY2tlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ2hpbGRyZW4gPSB0aGlzLmhhc0NoaWxkU2VsZWN0ZWQodXhMaW5rLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHV4TGluay5wYXJlbnRbJ2hpZ2hsaWdodGVkJ10gPSBpc0NoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50cyh1eExpbmsucGFyZW50LCBpc0NoZWNrZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFzQ2hpbGRTZWxlY3RlZCh1eExpbms6IFV4TGluaywgc2VsZWN0ZWQgPSBbXSk6IHN0cmluZ1tdIHtcbiAgICAgICAgaWYgKHV4TGluay5zZWxlY3RlZCkge1xuICAgICAgICAgICAgc2VsZWN0ZWQucHVzaCh1eExpbmsubGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV4TGluay5jaGlsZHJlbiAmJiB1eExpbmsuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdXhMaW5rLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNDaGlsZFNlbGVjdGVkKGNoaWxkLCBzZWxlY3RlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZVNlbGVjdGlvblJlY3Vyc2l2ZWx5KHV4TGluazogVXhMaW5rLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodXhMaW5rLmhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICB1eExpbmsuY2hpbGRyZW4uZm9yRWFjaCgobGluazogVXhMaW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgbGluay5zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBsaW5rLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VTZWxlY3Rpb25SZWN1cnNpdmVseShsaW5rLCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlUGFyZW50U2VsZWN0aW9uKHV4TGluazogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB1eExpbmsuaW5kZXRlcm1pbmF0ZSA9ICF0aGlzLmFsbENoaWxkcmVuU2VsZWN0ZWQodXhMaW5rKTtcbiAgICAgICAgICAgIHV4TGluay5zZWxlY3RlZCA9IHRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbih1eExpbmspO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF1eExpbmsuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB1eExpbmsuaW5kZXRlcm1pbmF0ZSA9IHRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbih1eExpbmspO1xuICAgICAgICAgICAgICAgIHV4TGluay5zZWxlY3RlZCA9IHRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbih1eExpbmspO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodXhMaW5rLmluZGV0ZXJtaW5hdGUgJiYgIXRoaXMuaGFzU2VsZWN0ZWRDaGlsZHJlbih1eExpbmspKSB7XG4gICAgICAgICAgICAgICAgdXhMaW5rLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB1eExpbmsuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1eExpbmsucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBhcmVudFNlbGVjdGlvbih1eExpbmsucGFyZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWxsQ2hpbGRyZW5TZWxlY3RlZCh1eGxpbms6IFV4TGluayk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdXhsaW5rLmNoaWxkcmVuLmZpbHRlcihjID0+ICghYy5zZWxlY3RlZCB8fCAoYy5zZWxlY3RlZCAmJiBjLmluZGV0ZXJtaW5hdGUpKSAmJiB0aGlzLmNoaWxkcmVuU2VsZWN0ZWQpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1NlbGVjdGVkQ2hpbGRyZW4odXhsaW5rOiBVeExpbmspOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHV4bGluay5jaGlsZHJlbi5maWx0ZXIoYyA9PiBjLnNlbGVjdGVkID09PSB0cnVlKS5sZW5ndGggPiAwO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1eC10cmVlJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8dXgtYS10b29sYmFyLWZpbHRlciAqbmdJZj1cImlzU2hvd1Rvb2xiYXJcIiBbaXNWaXNpYmxlXT1cImlzU2hvd1Rvb2xiYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNUb2dnbGVWaXNpYmxlXT1cIiFpc0hpZGVUb2dnbGVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZpbHRlcik9XCJvbkZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlclZhbHVlXT1cInNldEZpbHRlclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGFuZEFsbCk9XCJvbkV4cGFuZEFsbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbGxhcHNlQWxsKT1cIm9uQ29sbGFwc2VBbGwoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlckxhYmVsPVwie3tmaWx0ZXJMYWJlbH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V4cGFuZEFsbExhYmVsXT1cImV4cGFuZEFsbExhYmVsID8gZXhwYW5kQWxsTGFiZWwgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VBbGxMYWJlbD1cInt7Y29sbGFwc2VBbGxMYWJlbH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzVG9nZ2xlRXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXNMYWJlbHNdPVwiaGFzTGFiZWxzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0ci5kYXRhLWUyZT1cInt7IGUyZUF0dHIgfX0tYS10b29sYmFyLWZpbHRlclwiPlxuICAgICAgICA8L3V4LWEtdG9vbGJhci1maWx0ZXI+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJoYXNTZWxlY3RBbGxcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC1pbnB1dF9fY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIGlkPVwic2VsZWN0QWxsXCJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc01pbmltdW1PbmVTZWxlY3RlZCA/ICdjaGVja2VkJyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3RBbGxDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC10cmVlX19ub2RlLWNoZWNrYm94LWxhYmVsXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuY2hlY2tib3gtbGFiZWwtaW5kZXRlcm1pbmF0ZV09XCJpc01pbmltdW1PbmVTZWxlY3RlZCAmJiAhaXNBbGxTZWxlY3RlZFwiIGZvcj1cInNlbGVjdEFsbFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtY2hlY2tib3gtbGFiZWwtLW9uZWxldmVsXT1cImNoZWNrRm9yQ2hpbGRyZW4oKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYWxsU2VsZWN0ZWQgJiYgIWlzTWluaW11bU9uZVNlbGVjdGVkICYmICFpc0FsbFNlbGVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO3t7ICdldWkudXh0cmVlLlNFTEVDVC1BTEwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFsbFNlbGVjdGVkIHx8IGlzTWluaW11bU9uZVNlbGVjdGVkIHx8IGlzQWxsU2VsZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7e3sgJ2V1aS51eHRyZWUuVU5TRUxFQ1QtQUxMJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZXMubGVuZ3RoID4gNTAwICYmICFoYXNTZWxlY3RBbGwsIGVsc2Ugbm9WaXJ0dWFsU2Nyb2xsXCI+XG4gICAgICAgICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICN2aXJ0dWFsU2Nyb2xsaW5nIGl0ZW1TaXplPVwiMzBcIiBjbGFzcz1cInV4LXRyZWVfX3ZpcnR1YWwtc2Nyb2xsaW5nX19jb250YWluZXJcIiBtaW5CdWZmZXJQeD1cIjIwMDBcIiBtYXhCdWZmZXJQeD1cIjI0MDBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpjZGtWaXJ0dWFsRm9yPVwibGV0IG5vZGUgb2YgdmlzaWJsZU5vZGVzOyB0cmFja0J5OiB0cmFja0J5Rm47XCIgY2xhc3M9XCJ1eC10cmVlX192aXJ0dWFsLXNjcm9sbGluZ19faXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJ1eC10cmVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlLS1oaWRlbGluZXNdPVwiaXNIaWRlTGluZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWUtLW11bHRpc2VsZWN0XT1cImlzTXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWUtLW9uZWxldmVsXT1cImNoZWNrRm9yQ2hpbGRyZW4oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyLmRhdGEtZTJlPVwie3sgZTJlQXR0ciB9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHV4LXRyZWUtbm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVdPVwibm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9kZUNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGVUb2dnbGUpPVwib25Ob2RlVG9nZ2xlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1Jvb3ROb2RlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzTXVsdGlzZWxlY3RdPVwiaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNSZWN1cnNpdmVTZWxlY3Rpb25dPVwiaXNSZWN1cnNpdmVTZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzQ2xpY2tUb2dnbGluZ05vZGVdPVwiaXNDbGlja1RvZ2dsaW5nTm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZEljb25DbGFzcz1cInt7ZXhwYW5kZWRJY29uQ2xhc3N9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWRJY29uQ2xhc3M9XCJ7e2NvbGxhcHNlZEljb25DbGFzc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZVZhcmlhYmxlXT1cInRlbXBsYXRlVmFyaWFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vZGVDb250ZW50VGVtcGxhdGVdPVwibm9kZUNvbnRlbnRUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNTaG93QWN0aXZlTm9kZV09XCJpc1Nob3dBY3RpdmVOb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvVHJhbnNsYXRlXT1cImF1dG9UcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzSGlkZVRvZ2dsZXNdPVwiaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNDbGlja1NlbGVjdGluZ05vZGVdPVwiaXNDbGlja1NlbGVjdGluZ05vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZ2hsaWdodFBhdGhdPVwiaGlnaGxpZ2h0UGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25dPVwiaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdXgtdHJlZS1ub2RlPlxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9WaXJ0dWFsU2Nyb2xsPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwidXgtdHJlZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWUtLWhpZGVsaW5lc109XCJpc0hpZGVMaW5lc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWUtLW11bHRpc2VsZWN0XT1cImlzTXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlLS1vbmVsZXZlbF09XCJjaGVja0ZvckNoaWxkcmVuKClcIlxuICAgICAgICAgICAgICAgIGF0dHIuZGF0YS1lMmU9XCJ7eyBlMmVBdHRyIH19XCI+XG4gICAgICAgICAgICAgICAgPHV4LXRyZWUtbm9kZSAqbmdGb3I9XCJsZXQgbm9kZSBvZiBub2RlczsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9kZUNsaWNrKT1cIm9uTm9kZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChub2RlVG9nZ2xlKT1cIm9uTm9kZVRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1Jvb3ROb2RlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc011bHRpc2VsZWN0XT1cImlzTXVsdGlzZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1JlY3Vyc2l2ZVNlbGVjdGlvbl09XCJpc1JlY3Vyc2l2ZVNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzQ2xpY2tUb2dnbGluZ05vZGVdPVwiaXNDbGlja1RvZ2dsaW5nTm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRJY29uQ2xhc3M9XCJ7e2V4cGFuZGVkSWNvbkNsYXNzfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZEljb25DbGFzcz1cInt7Y29sbGFwc2VkSWNvbkNsYXNzfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZVZhcmlhYmxlXT1cInRlbXBsYXRlVmFyaWFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub2RlQ29udGVudFRlbXBsYXRlXT1cIm5vZGVDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc1Nob3dBY3RpdmVOb2RlXT1cImlzU2hvd0FjdGl2ZU5vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvVHJhbnNsYXRlXT1cImF1dG9UcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0hpZGVUb2dnbGVzXT1cImlzSGlkZVRvZ2dsZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0NsaWNrU2VsZWN0aW5nTm9kZV09XCJpc0NsaWNrU2VsZWN0aW5nTm9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZ2hsaWdodFBhdGhdPVwiaGlnaGxpZ2h0UGF0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uXT1cImlzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgPC91eC10cmVlLW5vZGU+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgVXhUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpIG5vZGVzOiBVeExpbmtbXTtcbiAgICBASW5wdXQoKSBjb2xsYXBzZUFsbExhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXhwYW5kQWxsTGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBmaWx0ZXJMYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNvbGxhcHNlZEljb25DbGFzczogc3RyaW5nID0gJ2V1aS1pY29uIGV1aS1pY29uLXBsdXMtY2lyY2xlJztcbiAgICBASW5wdXQoKSBleHBhbmRlZEljb25DbGFzczogc3RyaW5nID0gJ2V1aS1pY29uIGV1aS1pY29uLW1pbnVzLWNpcmNsZSc7XG4gICAgQElucHV0KCkgc2V0RmlsdGVyVmFsdWU6IHN0cmluZztcbiAgICBASW5wdXQoKSBlMmVBdHRyOiBzdHJpbmcgPSAndXgtdHJlZSc7XG5cbiAgICBAT3V0cHV0KCkgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVeExpbms+KCk7XG4gICAgQE91dHB1dCgpIG5vZGVUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPFV4TGluaz4oKTtcbiAgICAvLyBUT0RPOiBmb3IgZVVJIDE0IHJlbW92ZSB0aGUgW10gdHlwZVxuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFV4TGluayB8IFtdPigpO1xuICAgIEBPdXRwdXQoKSBvbkZpbHRlclZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBAQ29udGVudENoaWxkKFRlbXBsYXRlUmVmKSB0ZW1wbGF0ZVZhcmlhYmxlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVXhUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBAVmlld0NoaWxkcmVuKFV4VHJlZU5vZGVDb21wb25lbnQpIHRyZWVOb2RlczogUXVlcnlMaXN0PFV4VHJlZU5vZGVDb21wb25lbnQ+O1xuICAgIEBWaWV3Q2hpbGQoJ3ZpcnR1YWxTY3JvbGxpbmcnKSBwdWJsaWMgdmlydHVhbFNjcm9sbGluZzogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuXG4gICAgcHVibGljIGFsbFNlbGVjdGVkID0gZmFsc2U7XG4gICAgcHVibGljIG5iTm9kZXMgPSAwO1xuICAgIHB1YmxpYyB2aXNpYmxlTm9kZXMgPSBbXTtcbiAgICBwdWJsaWMgbm9kZUNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzU2hvd1Rvb2xiYXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1Nob3dUb29sYmFyOyB9XG4gICAgc2V0IGlzU2hvd1Rvb2xiYXIodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc1Nob3dUb29sYmFyID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzU2hvd1Rvb2xiYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc0V4cGFuZGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNFeHBhbmRlZDsgfVxuICAgIHNldCBpc0V4cGFuZGVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faXNFeHBhbmRlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc0V4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNNdWx0aXNlbGVjdCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzTXVsdGlzZWxlY3Q7IH1cbiAgICBzZXQgaXNNdWx0aXNlbGVjdCh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzTXVsdGlzZWxlY3QgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNNdWx0aXNlbGVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzUmVjdXJzaXZlU2VsZWN0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNSZWN1cnNpdmVTZWxlY3Rpb247IH1cbiAgICBzZXQgaXNSZWN1cnNpdmVTZWxlY3Rpb24odmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc1JlY3Vyc2l2ZVNlbGVjdGlvbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc1JlY3Vyc2l2ZVNlbGVjdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlOyB9XG4gICAgc2V0IGlzQ2xpY2tUb2dnbGluZ05vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc0NsaWNrVG9nZ2xpbmdOb2RlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzQ2xpY2tUb2dnbGluZ05vZGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBpc1Nob3dBY3RpdmVOb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNTaG93QWN0aXZlTm9kZTsgfVxuICAgIHNldCBpc1Nob3dBY3RpdmVOb2RlKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faXNTaG93QWN0aXZlTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc1Nob3dBY3RpdmVOb2RlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNIaWRlVG9nZ2xlcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzSGlkZVRvZ2dsZXM7IH1cbiAgICBzZXQgaXNIaWRlVG9nZ2xlcyh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzSGlkZVRvZ2dsZXMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaXNIaWRlVG9nZ2xlczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzSGlkZUxpbmVzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNIaWRlTGluZXM7IH1cbiAgICBzZXQgaXNIaWRlTGluZXModmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc0hpZGVMaW5lcyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc0hpZGVMaW5lczogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGlzQ2xpY2tTZWxlY3RpbmdOb2RlKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faXNDbGlja1NlbGVjdGluZ05vZGU7IH1cbiAgICBzZXQgaXNDbGlja1NlbGVjdGluZ05vZGUodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9pc0NsaWNrU2VsZWN0aW5nTm9kZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9pc0NsaWNrU2VsZWN0aW5nTm9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNob3dGaWx0ZXJlZENoaWxkcmVuKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fc2hvd0ZpbHRlcmVkQ2hpbGRyZW47IH1cbiAgICBzZXQgc2hvd0ZpbHRlcmVkQ2hpbGRyZW4odmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9zaG93RmlsdGVyZWRDaGlsZHJlbiA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9zaG93RmlsdGVyZWRDaGlsZHJlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGV4cGFuZEZpbHRlcmVkQ2hpbGRyZW4oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9leHBhbmRGaWx0ZXJlZENoaWxkcmVuOyB9XG4gICAgc2V0IGV4cGFuZEZpbHRlcmVkQ2hpbGRyZW4odmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9leHBhbmRGaWx0ZXJlZENoaWxkcmVuID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2V4cGFuZEZpbHRlcmVkQ2hpbGRyZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKVxuICAgIGdldCBoaWdobGlnaHRQYXRoKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faGlnaGxpZ2h0UGF0aDsgfVxuICAgIHNldCBoaWdobGlnaHRQYXRoKHZhbHVlOiBCb29sZWFuSW5wdXQpIHsgdGhpcy5faGlnaGxpZ2h0UGF0aCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9oaWdobGlnaHRQYXRoOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgYXV0b1RyYW5zbGF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2F1dG9UcmFuc2xhdGU7IH1cbiAgICBzZXQgYXV0b1RyYW5zbGF0ZSh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2F1dG9UcmFuc2xhdGUgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfYXV0b1RyYW5zbGF0ZTogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KClcbiAgICBnZXQgaGFzTGFiZWxzKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5faGFzTGFiZWxzOyB9XG4gICAgc2V0IGhhc0xhYmVscyh2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2hhc0xhYmVscyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgICBwcml2YXRlIF9oYXNMYWJlbHM6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGhhc1NlbGVjdEFsbCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2hhc1NlbGVjdEFsbDsgfVxuICAgIHNldCBoYXNTZWxlY3RBbGwodmFsdWU6IEJvb2xlYW5JbnB1dCkgeyB0aGlzLl9oYXNTZWxlY3RBbGwgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gICAgcHJpdmF0ZSBfaGFzU2VsZWN0QWxsID0gZmFsc2U7XG4gICAgQElucHV0KClcbiAgICBnZXQgaXNSZWN1cnNpdmVQYXJlbnRTZWxlY3Rpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbjsgfVxuICAgIHNldCBpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbih2YWx1ZTogQm9vbGVhbklucHV0KSB7IHRoaXMuX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTsgfVxuICAgIHByaXZhdGUgX2lzUmVjdXJzaXZlUGFyZW50U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGdldCBpc01pbmltdW1PbmVTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2VsZWN0ZWROb2RlcygpLmxlbmd0aCA+IDAgJiYgIXRoaXMuYWxsU2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGVkTm9kZXMoKS5sZW5ndGggPT09IHRoaXMubmJOb2RlcztcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICggY2hhbmdlcyAmJiBjaGFuZ2VzWydub2RlcyddKSB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGVOb2RlcyA9IHRoaXMudmlzaWJsZSh0aGlzLm5vZGVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5oYXNTZWxlY3RBbGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNSZWN1cnNpdmVTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldE5iTm9kZXModGhpcy5ub2Rlcyk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLnNldE5vZGVzRXhwYW5kZWRTdGF0ZSh0aGlzLm5vZGVzLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0UGFyZW50Tm9kZSh0aGlzLm5vZGVzLCBudWxsKTtcblxuICAgICAgICB0aGlzLnRlbXBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5nZXRUeXBlKCkgPT09ICdub2RlQ29udGVudCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVDb250ZW50VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2aXNpYmxlKG5vZGVzOiBVeExpbmtbXSk6IFV4TGlua1tdIHtcbiAgICAgICAgcmV0dXJuIG5vZGVzLmZpbHRlcihuID0+IG4udmlzaWJsZSk7XG4gICAgfVxuXG4gICAgZ2V0TmJOb2Rlcyhub2RlczogVXhMaW5rW10pOiB2b2lkIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uYk5vZGVzICsrO1xuICAgICAgICAgICAgaWYgKG5vZGUuaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGxpbms6IFV4TGluaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE5iTm9kZXMoW2xpbmtdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2VsZWN0QWxsQ2hhbmdlKGU6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmFsbFNlbGVjdGVkID0gZS50YXJnZXQuY2hlY2tlZDtcbiAgICAgICAgaWYgKCFlLnRhcmdldC5jaGVjaykge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXROb2Rlc1NlbGVjdGVkU3RhdGUodGhpcy5ub2RlcywgZS50YXJnZXQuY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlbGVjdGVkTm9kZXMoKTogVXhMaW5rW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZWxlY3RlZE5vZGVzUmVjdXJzaXZlKHRoaXMubm9kZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbk5vZGVUb2dnbGUodXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ub2RlVG9nZ2xlLmVtaXQodXhMaW5rKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ob2RlQ2xpY2sodXhMaW5rOiBVeExpbmspOiB2b2lkIHtcbiAgICAgICAgaWYgKCF1eExpbmsuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMubm9kZUNsaWNrLmVtaXQodXhMaW5rKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQ2xpY2tUb2dnbGluZ05vZGUgJiYgdXhMaW5rLmhhc0NoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbk5vZGVUb2dnbGUodXhMaW5rKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5pc011bHRpc2VsZWN0ICYmIHRoaXMuaXNTaG93QWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9kZXNTZWxlY3RlZFN0YXRlKHRoaXMubm9kZXMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB1eExpbmsuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXhwYW5kQWxsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldE5vZGVzRXhwYW5kZWRTdGF0ZSh0aGlzLm5vZGVzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Db2xsYXBzZUFsbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXROb2Rlc0V4cGFuZGVkU3RhdGUodGhpcy5ub2RlcywgZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZSh1eExpbms6IFV4TGluayk6IHZvaWQge1xuICAgICAgICBpZiAoIXV4TGluay5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLm5leHQodXhMaW5rKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25GaWx0ZXIoZmlsdGVyVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoZmlsdGVyVmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICB0aGlzLnNldE5vZGVzVmlzaWJsZVN0YXRlKHRoaXMubm9kZXMsIGZhbHNlKTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmV4cGFuZEZpbHRlcmVkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0ZpbHRlck1hdGNoZWQobm9kZSwgZmlsdGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5leHBhbmRGaWx0ZXJlZENoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNGaWx0ZXJNYXRjaGVkRXhwYW5kKG5vZGUsIGZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVzVmlzaWJsZVN0YXRlKHRoaXMubm9kZXMsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93RmlsdGVyZWRDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzVmlzaWJsZUNoaWxkcmVuKG5vZGUsIGZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmV4cGFuZEZpbHRlcmVkQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVzRXhwYW5kZWRTdGF0ZSh0aGlzLm5vZGVzLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlzaWJsZU5vZGVzID0gdGhpcy52aXNpYmxlKHRoaXMubm9kZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1Zpc2libGVTdGF0ZSh0aGlzLm5vZGVzLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZU5vZGVzID0gdGhpcy52aXNpYmxlKHRoaXMubm9kZXMpO1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsaW5nPy5zY3JvbGxUb0luZGV4KDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25GaWx0ZXJWYWx1ZS5lbWl0KGZpbHRlclZhbHVlKTtcbiAgICB9XG5cbiAgICBpc0ZpbHRlck1hdGNoZWRFeHBhbmQobm9kZTogVXhMaW5rLCBmaWx0ZXJWYWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIG5vZGVbJ2hpZ2hsaWdodGVkJ10gPSBmYWxzZTtcbiAgICAgICAgaWYgKG5vZGUubGFiZWwudG9VcHBlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlLnRvVXBwZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICBub2RlWydoaWdobGlnaHRlZCddID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIG5vZGVbJ2hpZ2hsaWdodGVkJ10gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkcmVuTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGaWx0ZXJNYXRjaGVkRXhwYW5kKGNoaWxkcmVuTm9kZSwgZmlsdGVyVmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuTm9kZS5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZVsnaGlnaGxpZ2h0ZWQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhY2tCeUZuKGluZGV4OiBudW1iZXIsIGl0ZW06IFV4TGluayk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja0ZvckNoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMubm9kZXMuc29tZShub2RlID0+IG5vZGUuaGFzQ2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldFNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNldE5vZGUodGhpcy5ub2Rlcyk7XG4gICAgICAgIC8vIFRPRE86IGludmVzdGlnYXRlIGlmIHdlIGNhbiBlbWl0IG51bGwgaW5zdGVhZCBvZiBbXVxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KFtdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0Tm9kZShub2RlczogVXhMaW5rW10pOiB2b2lkIHtcbiAgICAgICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgICAgICAgbm9kZS5zZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Tm9kZShub2RlLmNoaWxkcmVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Zpc2libGVDaGlsZHJlbihub2RlOiBVeExpbmssIGZpbHRlclZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUucGFyZW50ICYmIG5vZGUucGFyZW50LnZpc2libGUgPT09IHRydWUgJiYgbm9kZS5wYXJlbnQubGFiZWwudG9VcHBlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlLnRvVXBwZXJDYXNlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgbm9kZS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkcmVuTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlQ2hpbGRyZW4oY2hpbGRyZW5Ob2RlLCBmaWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0ZWROb2Rlc1JlY3Vyc2l2ZShub2RlczogVXhMaW5rW10pOiBVeExpbmtbXSB7XG4gICAgICAgIHJldHVybiAobm9kZXMgfHwgW10pLnJlZHVjZSgoYWNjLCBub2RlKSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZS5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHJldHVybiAobm9kZS5zZWxlY3RlZCAmJiAhbm9kZS5pbmRldGVybWluYXRlKSA/XG4gICAgICAgICAgICAgICAgICAgIFsuLi5hY2MsIG5vZGUsIC4uLnRoaXMuZ2V0U2VsZWN0ZWROb2Rlc1JlY3Vyc2l2ZShub2RlLmNoaWxkcmVuKV0gOlxuICAgICAgICAgICAgICAgICAgICBbLi4uYWNjLCAuLi50aGlzLmdldFNlbGVjdGVkTm9kZXNSZWN1cnNpdmUobm9kZS5jaGlsZHJlbildO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5zZWxlY3RlZCA/IFsuLi5hY2MsIG5vZGVdIDogWy4uLmFjY107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRmlsdGVyTWF0Y2hlZChub2RlOiBVeExpbmssIGZpbHRlclZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5vZGUubGFiZWw/LnRvVXBwZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZT8udG9VcHBlckNhc2UoKSkgIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGxpbmc/LnNjcm9sbFRvSW5kZXgoMCk7XG4gICAgICAgICAgICBub2RlLnZpc2libGUgPSB0cnVlO1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICBub2RlLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkcmVuTm9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNGaWx0ZXJNYXRjaGVkKGNoaWxkcmVuTm9kZSwgZmlsdGVyVmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuTm9kZS52aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE5vZGVzRXhwYW5kZWRTdGF0ZShub2RlczogVXhMaW5rW10sIGV4cGFuZGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIG5vZGUuZXhwYW5kZWQgPSBleHBhbmRlZDtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc0V4cGFuZGVkU3RhdGUobm9kZS5jaGlsZHJlbiwgZXhwYW5kZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE5vZGVzVmlzaWJsZVN0YXRlKG5vZGVzOiBVeExpbmtbXSwgdmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICAgICAgICBub2RlLnZpc2libGUgPSB2aXNpYmxlO1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldE5vZGVzVmlzaWJsZVN0YXRlKG5vZGUuY2hpbGRyZW4sIHZpc2libGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE5vZGVzU2VsZWN0ZWRTdGF0ZShub2RlczogVXhMaW5rW10sIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb2Rlc1NlbGVjdGVkU3RhdGUobm9kZS5jaGlsZHJlbiwgc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2VsZWN0QWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQYXJlbnROb2RlKG5vZGVzOiBVeExpbmtbXSwgcGFyZW50Tm9kZTogVXhMaW5rKTogdm9pZCB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhcmVudE5vZGUobm9kZS5jaGlsZHJlbiwgbm9kZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgVXhUb29sYmFyRmlsdGVyQ29tcG9uZW50TW9kdWxlLFxuICAgICAgICBVeEJ1dHRvbkNvbXBvbmVudE1vZHVsZSxcbiAgICAgICAgVXhCYWRnZUNvbXBvbmVudE1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBTY3JvbGxpbmdNb2R1bGUsXG4gICAgICAgIEV1aUljb25Nb2R1bGUsXG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIFV4VHJlZUNvbXBvbmVudCxcbiAgICAgICAgVXhUcmVlTm9kZUNvbXBvbmVudCxcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBVeFRyZWVDb21wb25lbnQsXG4gICAgICAgIFV4VHJlZU5vZGVDb21wb25lbnQsXG4gICAgXSxcbn0pXG5cbmV4cG9ydCBjbGFzcyBVeFRyZWVDb21wb25lbnRNb2R1bGUge1xufVxuIiwiPGxpICpuZ0lmPVwibm9kZS52aXNpYmxlXCJcbiAgICBjbGFzcz1cInV4LXRyZWVfX25vZGVcIlxuICAgIFtjbGFzcy5maXJzdC1jaGlsZF09XCJpc0ZpcnN0XCJcbiAgICBbY2xhc3MubGFzdC1jaGlsZF09XCJpc0xhc3RcIlxuICAgIFtjbGFzcy51eC10cmVlX19ub2RlLS1leHBhbmRhYmxlXT1cImhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlc1wiXG4gICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtLWRpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgIHRpdGxlPVwie3sgbm9kZS50b29sdGlwTGFiZWwgPyBub2RlLnRvb2x0aXBMYWJlbCA6IG5vZGUubGFiZWwgfX1cIlxuXHRhdHRyLmRhdGEtZTJlPVwie3sgZTJlQXR0ciB9fVwiPlxuXG4gICAgPGRpdiBjbGFzcz1cInV4LXRyZWVfX25vZGUtd3JhcHBlclwiIFtjbGFzcy51eC10cmVlX19ub2RlLS1zZWxlY3RlZF09XCJub2RlLnNlbGVjdGVkXCI+XG4gICAgICAgIDx1eC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVUb2dnbGUoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvbk5vZGVLZXlkb3duKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInV4LXRyZWVfX25vZGUtdG9nZ2xlLWljb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXNcIlxuICAgICAgICAgICAgW2lzU21hbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbaXNGbGF0XT1cInRydWVcIlxuICAgICAgICAgICAgW2FyaWFMYWJlbF0gPSBcIm5vZGUuZXhwYW5kZWQgPyAnQ29sbGFwc2UnIDogJ0V4cGFuZCdcIlxuICAgICAgICAgICAgW2ljb25DbGFzc109XCJub2RlLmV4cGFuZGVkID8gZXhwYW5kZWRJY29uQ2xhc3MgOiBjb2xsYXBzZWRJY29uQ2xhc3NcIj48L3V4LWJ1dHRvbj5cblxuICAgICAgICA8c3BhbiAqbmdJZj1cImlzTXVsdGlzZWxlY3RcIiBbY2xhc3MudXgtdHJlZV9fcGFyZW50XT1cImhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlc1wiIFtjbGFzcy51eC10cmVlX19sZWFmXT1cIiFoYXNOb2RlQ2hpbGRyZW4obm9kZSkgJiYgIWlzSGlkZVRvZ2dsZXNcIj5cbiAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm5vZGUuc2VsZWN0ZWQgJiYgIW5vZGUuaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgZXVpUHJpbWFyeVxuICAgICAgICAgICAgICAgIGljb249XCJvbGQtZXVpLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DaGVja2JveENoYW5nZShub2RlLCB7IHRhcmdldDogeyBjaGVja2VkOiB0cnVlIH0gfSlcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDaGVja1wiPlxuICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhbm9kZS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgaWNvbj1cIm9sZC1ldWktY2hlY2tib3gtb3V0bGluZVwiXG4gICAgICAgICAgICAgICAgZmlsbENvbG9yPVwiZ3JleS0yNVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2hlY2tib3hDaGFuZ2Uobm9kZSwgeyB0YXJnZXQ6IHsgY2hlY2tlZDogZmFsc2UgfSB9KVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlVuY2hlY2tcIj5cbiAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICpuZ0lmPVwibm9kZS5pbmRldGVybWluYXRlICYmIG5vZGUuc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgIGV1aVByaW1hcnlcbiAgICAgICAgICAgICAgICBpY29uPVwib2xkLWV1aS1jaGVja2JveC1pbnRlcm1lZGlhdGVcIlxuICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNoZWNrYm94Q2hhbmdlKG5vZGUsIHsgdGFyZ2V0OiB7IGNoZWNrZWQ6IHRydWUgfSB9KVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlVuY2hlY2tcIj5cbiAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm5vZGVDb250ZW50VGVtcGxhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJ1eC10cmVlX19jdXN0b20tY29udGVudFwiXG4gICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fcGFyZW50XT1cImhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlc1wiXG4gICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbGVhZl09XCIhaGFzTm9kZUNoaWxkcmVuKG5vZGUpICYmICFpc0hpZGVUb2dnbGVzXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlQ29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IG5vZGUgfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFub2RlQ29udGVudFRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibm9kZS50eXBlTGFiZWwgfHwgbm9kZS5pY29uQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm5vZGUudHlwZUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1eC10cmVlX19ub2RlLXR5cGUgdXgtdHJlZV9fbm9kZS10eXBlLS17eyBub2RlLnR5cGVDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlX19ub2RlLXR5cGUtcGFyZW50XT1cImhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlcyAmJiAhaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Ob2RlS2V5ZG93bigkZXZlbnQsIG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG5vZGUudHlwZUxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJub2RlLmljb25DbGFzc1wiIGNsYXNzPVwidXgtdHJlZV9fbm9kZS1pY29uIHV4LXRyZWVfX25vZGUtdHlwZS0te3sgbm9kZS5pY29uVHlwZUNsYXNzIH19XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwie3sgbm9kZS5pY29uQ2xhc3MgfX1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInV4LXRyZWVfX25vZGUtbGFiZWwtd3JhcHBlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtbXV0ZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXgtdHJlZV9fbm9kZS1sYWJlbC0taGlnaGxpZ2h0ZWRdPVwibm9kZVsnaGlnaGxpZ2h0ZWQnXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ob2RlQ2xpY2soJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbk5vZGVLZXlkb3duKCRldmVudCwgbm9kZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYXV0b1RyYW5zbGF0ZTsgZWxzZSBtYW51YWxUcmFuc2xhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtYW51YWxUcmFuc2xhdGlvbj57eyBub2RlLmxhYmVsIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzcy5ldWktdS10ZXh0LWxpbmstZXh0ZXJuYWxdPVwibm9kZSAmJiBub2RlLnVybEV4dGVybmFsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiEobm9kZS50eXBlTGFiZWwgfHwgbm9kZS5pY29uQ2xhc3MpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1eC10cmVlX19ub2RlLWxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnV4LXRyZWVfX25vZGUtbGFiZWwtcGFyZW50XT1cImhhc05vZGVDaGlsZHJlbihub2RlKSAmJiAhaXNIaWRlVG9nZ2xlcyAmJiAhaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy51eC10cmVlX19ub2RlLWxhYmVsLS1oaWdobGlnaHRlZF09XCJub2RlWydoaWdobGlnaHRlZCddXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRleHQtbXV0ZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk5vZGVDbGljaygkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25Ob2RlS2V5ZG93bigkZXZlbnQsIG5vZGUpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYXV0b1RyYW5zbGF0ZTsgZWxzZSBtYW51YWxUcmFuc2xhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbm9kZS5sYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbWFudWFsVHJhbnNsYXRpb24+e3sgbm9kZS5sYWJlbCB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzcy5ldWktdS10ZXh0LWxpbmstZXh0ZXJuYWxdPVwibm9kZSAmJiBub2RlLnVybEV4dGVybmFsXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibm9kZS5iYWRnZXNcIiBjbGFzcz1cImV1aS11LW1sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgYmFkZ2Ugb2Ygbm9kZS5iYWRnZXNcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInV4LWJhZGdlIHV4LWJhZGdlLS1zbWFsbCB1eC1iYWRnZS0tb3V0bGluZSB1eC1iYWRnZS0tcGlsbCB1eC1iYWRnZS0te3sgYmFkZ2UudHlwZUNsYXNzIH19IHV4LXRyZWVfX25vZGUtYmFkZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAge3tiYWRnZS5sYWJlbH19XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJub2RlLm1ldGFkYXRhICYmIG5vZGUubWV0YWRhdGEudGl0bGUgJiYgbm9kZS5tZXRhZGF0YS50aXRsZS5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInV4LXRyZWVfX25vZGUtbWV0YWNvbnRlbnQtdG9nZ2xlIHV4LXRyZWVfX25vZGUtY2xpY2thYmxlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25NZXRhZGF0YU5vZGVUb2dnbGUoJGV2ZW50LCBub2RlKVwiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgKm5nSWY9XCJub2RlLmV4cGFuZGVkXCIgaWNvbj1cIm9sZC1ldWktYW5nbGUtZG93blwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgKm5nSWY9XCIhbm9kZS5leHBhbmRlZFwiIGljb249XCJvbGQtZXVpLWFuZ2xlLXJpZ2h0XCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLmV4cGFuZGVkXCI+XG4gICAgICAgIDx1bCAqbmdJZj1cImhhc05vZGVDaGlsZHJlbihub2RlKVwiIGNsYXNzPVwidXgtdHJlZV9fbm9kZXNcIj5cbiAgICAgICAgICAgIDx1eC10cmVlLW5vZGUgKm5nRm9yPVwibGV0IHN1Yk5vZGUgb2Ygbm9kZS5jaGlsZHJlbjsgbGV0IGlzRmlyc3QgPSBmaXJzdDsgbGV0IGlzTGFzdCA9IGxhc3Q7IHRyYWNrQnk6IHRyYWNrQnlGblwiXG4gICAgICAgICAgICAgICAgW25vZGVdPVwic3ViTm9kZVwiXG4gICAgICAgICAgICAgICAgW2lzTXVsdGlzZWxlY3RdPVwiaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgW2lzUmVjdXJzaXZlU2VsZWN0aW9uXT1cImlzUmVjdXJzaXZlU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAobm9kZUNsaWNrKT1cIm9uU3ViTm9kZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChub2RlVG9nZ2xlKT1cIm9uU3ViTm9kZVRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtpc0ZpcnN0XT1cImlzRmlyc3RcIiBbaXNMYXN0XT1cImlzTGFzdFwiXG4gICAgICAgICAgICAgICAgW2lzQ2xpY2tUb2dnbGluZ05vZGVdPVwiaXNDbGlja1RvZ2dsaW5nTm9kZVwiXG4gICAgICAgICAgICAgICAgZXhwYW5kZWRJY29uQ2xhc3M9XCJ7eyBleHBhbmRlZEljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgY29sbGFwc2VkSWNvbkNsYXNzPVwie3sgY29sbGFwc2VkSWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICBbdGVtcGxhdGVWYXJpYWJsZV09XCJ0ZW1wbGF0ZVZhcmlhYmxlXCJcbiAgICAgICAgICAgICAgICBbbm9kZUNvbnRlbnRUZW1wbGF0ZV09XCJub2RlQ29udGVudFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbaXNTaG93QWN0aXZlTm9kZV09XCJpc1Nob3dBY3RpdmVOb2RlXCJcbiAgICAgICAgICAgICAgICBbaXNIaWRlVG9nZ2xlc109XCJpc0hpZGVUb2dnbGVzXCJcbiAgICAgICAgICAgICAgICBbaXNDbGlja1NlbGVjdGluZ05vZGVdPVwiaXNDbGlja1NlbGVjdGluZ05vZGVcIlxuICAgICAgICAgICAgICAgIFtoaWdobGlnaHRQYXRoXT1cImhpZ2hsaWdodFBhdGhcIlxuICAgICAgICAgICAgICAgIFtpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvbl09XCJpc1JlY3Vyc2l2ZVBhcmVudFNlbGVjdGlvblwiXG4gICAgICAgICAgICAgICAgW2F1dG9UcmFuc2xhdGVdPVwiYXV0b1RyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgPC91eC10cmVlLW5vZGU+XG4gICAgICAgIDwvdWw+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJub2RlLm1ldGFkYXRhICYmIG5vZGUubWV0YWRhdGEudGl0bGUgJiYgbm9kZS5tZXRhZGF0YS50aXRsZS5sZW5ndGggPiAwXCIgY2xhc3M9XCJ1eC10cmVlX19ub2RlLW1ldGFjb250ZW50XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVWYXJpYWJsZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7bWV0YWRhdGE6IG5vZGUubWV0YWRhdGF9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2xpPlxuIl19