@eui/components 18.0.0-rc.1 → 18.0.0-rc.3

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.
@@ -667,7 +667,7 @@ export class EuiAutocompleteComponent {
667
667
  this.cd.markForCheck();
668
668
  }
669
669
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiAutocompleteComponent, deps: [{ token: i1.Overlay }, { token: i0.ChangeDetectorRef }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: i2.LiveAnnouncer }, { token: i3.ScrollDispatcher }, { token: i4.EuiAppShellService }, { token: i5.BaseStatesDirective }, { token: i6.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
670
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: EuiAutocompleteComponent, selector: "eui-autocomplete, input[euiAutocomplete]", inputs: { inputId: "inputId", autocompleteData: "autocompleteData", visibleOptions: "visibleOptions", matching: "matching", placeholder: "placeholder", autocompleteDataSelected: "autocompleteDataSelected", chipsSortOrder: "chipsSortOrder", itemsSortOrder: "itemsSortOrder", chipsPosition: "chipsPosition", groupBy: "groupBy", toggleLinkMoreLabel: "toggleLinkMoreLabel", toggleLinkLessLabel: "toggleLinkLessLabel", classList: "classList", panelWidth: "panelWidth", dragAndDropSourceName: "dragAndDropSourceName", dragAndDropConnectedTo: "dragAndDropConnectedTo", isFreeValueAllowed: ["isFreeValueAllowed", "isFreeValueAllowed", booleanAttribute], isReadonly: ["isReadonly", "isReadonly", booleanAttribute], isLoading: ["isLoading", "isLoading", booleanAttribute], hasChips: ["hasChips", "hasChips", booleanAttribute], isAsync: ["isAsync", "isAsync", booleanAttribute], isChipsSorted: ["isChipsSorted", "isChipsSorted", booleanAttribute], isItemsSorted: ["isItemsSorted", "isItemsSorted", booleanAttribute], isChipsRemovable: ["isChipsRemovable", "isChipsRemovable", booleanAttribute], isDuplicateValueAllowed: ["isDuplicateValueAllowed", "isDuplicateValueAllowed", booleanAttribute], isAddOnBlur: ["isAddOnBlur", "isAddOnBlur", booleanAttribute], isForceSelection: ["isForceSelection", "isForceSelection", booleanAttribute], maxVisibleChipsCount: ["maxVisibleChipsCount", "maxVisibleChipsCount", numberAttribute], chipsLabelTruncateCount: ["chipsLabelTruncateCount", "chipsLabelTruncateCount", numberAttribute], isMaxVisibleChipsOpened: ["isMaxVisibleChipsOpened", "isMaxVisibleChipsOpened", booleanAttribute], isChipsDragAndDrop: ["isChipsDragAndDrop", "isChipsDragAndDrop", booleanAttribute] }, outputs: { panelClose: "panelClose", panelOpen: "panelOpen", inputFocus: "inputFocus", inputBlur: "inputBlur", clear: "clear", selectionChange: "selectionChange", itemAdd: "itemAdd", itemRemove: "itemRemove", inputChange: "inputChange", chipDragStart: "chipDragStart", chipDragRelease: "chipDragRelease", chipDrop: "chipDrop" }, host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "templates", predicate: EuiTemplateDirective }], viewQueries: [{ propertyName: "templatePortalContent", first: true, predicate: ["templatePortalContent"], descendants: true }, { propertyName: "inputContainerRef", first: true, predicate: ["inputContainerRef"], descendants: true }, { propertyName: "virtualScrolling", first: true, predicate: ["virtualScrolling"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ElementRef }], usesOnChanges: true, hostDirectives: [{ directive: i5.BaseStatesDirective, inputs: ["euiSecondary", "euiSecondary", "euiSuccess", "euiSuccess", "euiInfo", "euiInfo", "euiWarning", "euiWarning", "euiDanger", "euiDanger", "euiAccent", "euiAccent"] }], ngImport: i0, template: "<div class=\"eui-autocomplete__wrapper\">\n @if (chipsPosition === 'bottom') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n @if (hasChips) {\n <eui-chip-list\n [chips]=\"chips\"\n [isChipsRemovable]=\"isChipsRemovable && !isReadonly\"\n [maxVisibleChipsCount]=\"maxVisibleChipsCount\"\n [isMaxVisibleChipsOpened]=\"isMaxVisibleChipsOpened\"\n [chipsLabelTruncateCount]=\"chipsLabelTruncateCount\"\n [toggleLinkMoreLabel]=\"toggleLinkMoreLabel\"\n [toggleLinkLessLabel]=\"toggleLinkLessLabel\"\n [isChipsDragAndDrop]=\"isChipsDragAndDrop\"\n [dragAndDropSourceName]=\"dragAndDropSourceName\"\n [dragAndDropConnectedTo]=\"dragAndDropConnectedTo\"\n (chipDrop)=\"onChipDropped($event)\"\n (chipDragStart)=\"onChipDragStarted($event)\"\n (chipDragRelease)=\"onChipDragReleased($event)\"\n (chipRemove)=\"onChipRemove($event)\">\n <euiChipListAppendContent>\n <ng-template [ngIf]=\"chipsPosition === 'inside'\">\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </ng-template>\n </euiChipListAppendContent>\n </eui-chip-list>\n }\n @if (chipsPosition === 'top') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n</div>\n\n<ng-template #control>\n <div *ngIf=\"!hasChips || (hasChips && !isReadonly)\" class=\"eui-autocomplete__input-container\" #inputContainerRef>\n <input\n [id]=\"inputId\"\n #input\n euiInputText\n [euiClearable]=\"!isReadonly && !isDisabled\"\n [euiLoading]=\"isLoading\"\n [formControl]=\"autocompleteControl\"\n class=\"eui-autocomplete__input {{ classList }}\"\n placeholder=\"{{ placeholder }}\"\n [readonly]=\"isReadonly\"\n (clear)=\"onClear()\"\n (click)=\"openPanel()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.aria-controls]=\"isOpen ? 'eui-autocomplete__panel' : null\"\n [attr.aria-label]=\"autocompleteControl.value?.length > 0 ? autocompleteControl.value : 'Input field without value'\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n aria-autocomplete=\"both\"\n aria-haspopup=\"true\" />\n </div>\n</ng-template>\n\n<ng-template #templatePortalContent>\n <div\n id=\"eui-autocomplete__panel\"\n class=\"eui-autocomplete__panel\"\n [@panelAnimation]=\"isOpen ? 'visible' : 'hidden'\"\n role=\"listbox\"\n aria-live=\"polite\"\n aria-label=\"Autocomplete panel\">\n <cdk-virtual-scroll-viewport\n #virtualScrolling\n [itemSize]=\"itemSize\"\n tabindex=\"0\"\n minBufferPx=\"500\"\n maxBufferPx=\"750\"\n [style.min-height]=\"cdkVirtualScrollViewport + 'px'\">\n @if (groupBy) {\n @for (distinctOptionGroup of distinctOptionGroups; let i = $index; track distinctOptionGroup) {\n @if ((groupedOptions | async)[distinctOptionGroup].options.length > 0) {\n <eui-autocomplete-option-group [label]=\"distinctOptionGroup\">\n <div class=\"eui-autocomplete-option-group__label\">\n @if (autocompleteOptGroupTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptGroupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: distinctOptionGroup } }\">\n </ng-template>\n } @else {\n {{ distinctOptionGroup }}\n }\n </div>\n <div class=\"eui-autocomplete-option-group__options\">\n @for (autocompleteOption of (groupedOptions | async)[distinctOptionGroup].options; let j = $index; track autocompleteOption.id) {\n <eui-autocomplete-option\n isGroupItem\n [isActive]=\"selectedOptionIndex === (groupedOptions | async)[distinctOptionGroup].ancestorLength + j\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n } @else if (autocompleteOption.iconSvgName) {\n <eui-icon-svg icon=\"{{ autocompleteOption.iconSvgName }}\"></eui-icon-svg>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </div>\n </eui-autocomplete-option-group>\n }\n }\n } @else {\n <eui-autocomplete-option\n *cdkVirtualFor=\"let autocompleteOption of autocompleteOptions | async; let i = index; trackBy: optionsTrackByFn\"\n [isActive]=\"selectedOptionIndex === i\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n } @else if (autocompleteOption.iconSvgName) {\n <eui-icon-svg icon=\"{{ autocompleteOption.iconSvgName }}\"></eui-icon-svg>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </cdk-virtual-scroll-viewport>\n </div> \n</ng-template>", styles: [".eui-autocomplete,.eui-autocomplete__wrapper{width:100%}.eui-autocomplete__wrapper .eui-autocomplete__input-container{display:flex;width:100%}.eui-autocomplete__panel-container .eui-autocomplete__panel{box-shadow:var(--eui-sh-8);width:100%}.eui-autocomplete__panel-container.eui-autocomplete__panel-container--no-option .eui-autocomplete__panel{box-shadow:none}.eui-autocomplete.eui-autocomplete--chips-position-bottom .eui-autocomplete__input-container{margin-bottom:var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper{background-color:var(--eui-c-white);border:var(--eui-bw-xs) solid var(--eui-c-neutral-lighter);border-radius:var(--eui-br-m);padding:0 var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list,.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container{display:block}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container .eui-chip{margin-bottom:0;margin-top:var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-input-text{border:var(--eui-bw-none);min-height:calc(var(--eui-s-2xl) + var(--eui-s-2xs) - 2px)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list euichiplistappendcontent{flex-grow:1}button~.eui-autocomplete .eui-autocomplete__input,.eui-input-group-addon-item~.eui-autocomplete .eui-autocomplete__input{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.eui-autocomplete:has(+button) .eui-autocomplete__input{border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete:has(+.eui-input-group-addon-item) .eui-autocomplete__input{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete-option-group .eui-autocomplete-option-group__label{align-items:center;background-color:var(--eui-c-neutral-bg-light);border-bottom:1px solid var(--eui-c-neutral-bg-light);border-left:var(--eui-bw-m) solid transparent;cursor:pointer;display:flex;font-weight:700;min-height:var(--eui-s-3xl);padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon-svg,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-flag-icon{margin-right:var(--eui-s-2xs)}.eui-autocomplete-option{align-items:center;border-bottom:1px solid var(--eui-c-neutral-bg-light);border-left:var(--eui-bw-m) solid transparent;cursor:pointer;display:flex;min-height:var(--eui-s-3xl);padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-autocomplete-option:hover{background-color:var(--eui-c-neutral-bg-light)}.eui-autocomplete-option--group-item{padding-left:var(--eui-s-l)}.eui-autocomplete-option .eui-icon,.eui-autocomplete-option .eui-icon-svg,.eui-autocomplete-option .eui-flag-icon{margin-right:var(--eui-s-xs)}.eui-autocomplete-option--primary{border-left-color:var(--eui-c-primary)}.eui-autocomplete-option--secondary{border-left-color:var(--eui-c-neutral-lighter)}.eui-autocomplete-option--info{border-left-color:var(--eui-c-info)}.eui-autocomplete-option--success{border-left-color:var(--eui-c-success)}.eui-autocomplete-option--warning{border-left-color:var(--eui-c-warning)}.eui-autocomplete-option--danger{border-left-color:var(--eui-c-danger)}.eui-autocomplete-option--accent{border-left-color:var(--eui-c-accent)}.eui-autocomplete-option--active{background-color:var(--eui-c-active);outline:2px solid var(--eui-c-focus-visible);outline-offset:-2px}.eui-autocomplete-option--disabled{cursor:default;opacity:.4}.eui-autocomplete-option--disabled:hover{background:none}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i8.EuiInputTextComponent, selector: "input[euiInputText]", inputs: ["isInvalid"] }, { kind: "component", type: i9.EuiChipListComponent, selector: "eui-chip-list, div[euiChipList], ul[euiChipList]", inputs: ["chips", "toggleLinkMoreLabel", "toggleLinkLessLabel", "chipsSortOrder", "dragAndDropSourceName", "dragAndDropConnectedTo", "ariaLabel", "dropListOrientation", "isSquared", "isChipsRemovable", "isMaxVisibleChipsOpened", "isChipsSorted", "isChipsDragAndDrop", "isGrid", "maxVisibleChipsCount", "chipsLabelTruncateCount"], outputs: ["chipsInit", "chipRemove", "chipDragStart", "chipDragRelease", "chipDrop", "chiplistFocus"] }, { kind: "directive", type: i9.EuiChipListAppendContentDirective, selector: "euiChipListAppendContent" }, { kind: "component", type: i10.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "component", type: i11.EuiAutocompleteOptionComponent, selector: "eui-autocomplete-option", inputs: ["isActive", "isDisabled", "isGroupItem"] }, { kind: "component", type: i12.EuiAutocompleteOptionGroupComponent, selector: "eui-autocomplete-option-group", inputs: ["label"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], animations: [panelAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
670
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.0", type: EuiAutocompleteComponent, selector: "eui-autocomplete, input[euiAutocomplete]", inputs: { inputId: "inputId", autocompleteData: "autocompleteData", visibleOptions: "visibleOptions", matching: "matching", placeholder: "placeholder", autocompleteDataSelected: "autocompleteDataSelected", chipsSortOrder: "chipsSortOrder", itemsSortOrder: "itemsSortOrder", chipsPosition: "chipsPosition", groupBy: "groupBy", toggleLinkMoreLabel: "toggleLinkMoreLabel", toggleLinkLessLabel: "toggleLinkLessLabel", classList: "classList", panelWidth: "panelWidth", dragAndDropSourceName: "dragAndDropSourceName", dragAndDropConnectedTo: "dragAndDropConnectedTo", isFreeValueAllowed: ["isFreeValueAllowed", "isFreeValueAllowed", booleanAttribute], isReadonly: ["isReadonly", "isReadonly", booleanAttribute], isLoading: ["isLoading", "isLoading", booleanAttribute], hasChips: ["hasChips", "hasChips", booleanAttribute], isAsync: ["isAsync", "isAsync", booleanAttribute], isChipsSorted: ["isChipsSorted", "isChipsSorted", booleanAttribute], isItemsSorted: ["isItemsSorted", "isItemsSorted", booleanAttribute], isChipsRemovable: ["isChipsRemovable", "isChipsRemovable", booleanAttribute], isDuplicateValueAllowed: ["isDuplicateValueAllowed", "isDuplicateValueAllowed", booleanAttribute], isAddOnBlur: ["isAddOnBlur", "isAddOnBlur", booleanAttribute], isForceSelection: ["isForceSelection", "isForceSelection", booleanAttribute], maxVisibleChipsCount: ["maxVisibleChipsCount", "maxVisibleChipsCount", numberAttribute], chipsLabelTruncateCount: ["chipsLabelTruncateCount", "chipsLabelTruncateCount", numberAttribute], isMaxVisibleChipsOpened: ["isMaxVisibleChipsOpened", "isMaxVisibleChipsOpened", booleanAttribute], isChipsDragAndDrop: ["isChipsDragAndDrop", "isChipsDragAndDrop", booleanAttribute] }, outputs: { panelClose: "panelClose", panelOpen: "panelOpen", inputFocus: "inputFocus", inputBlur: "inputBlur", clear: "clear", selectionChange: "selectionChange", itemAdd: "itemAdd", itemRemove: "itemRemove", inputChange: "inputChange", chipDragStart: "chipDragStart", chipDragRelease: "chipDragRelease", chipDrop: "chipDrop" }, host: { properties: { "class": "this.cssClasses" } }, queries: [{ propertyName: "templates", predicate: EuiTemplateDirective }], viewQueries: [{ propertyName: "templatePortalContent", first: true, predicate: ["templatePortalContent"], descendants: true }, { propertyName: "inputContainerRef", first: true, predicate: ["inputContainerRef"], descendants: true }, { propertyName: "virtualScrolling", first: true, predicate: ["virtualScrolling"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ElementRef }], usesOnChanges: true, hostDirectives: [{ directive: i5.BaseStatesDirective, inputs: ["euiSecondary", "euiSecondary", "euiSuccess", "euiSuccess", "euiInfo", "euiInfo", "euiWarning", "euiWarning", "euiDanger", "euiDanger", "euiAccent", "euiAccent"] }], ngImport: i0, template: "<div class=\"eui-autocomplete__wrapper\">\n @if (chipsPosition === 'bottom') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n @if (hasChips) {\n <eui-chip-list\n [chips]=\"chips\"\n [isChipsRemovable]=\"isChipsRemovable && !isReadonly\"\n [maxVisibleChipsCount]=\"maxVisibleChipsCount\"\n [isMaxVisibleChipsOpened]=\"isMaxVisibleChipsOpened\"\n [chipsLabelTruncateCount]=\"chipsLabelTruncateCount\"\n [toggleLinkMoreLabel]=\"toggleLinkMoreLabel\"\n [toggleLinkLessLabel]=\"toggleLinkLessLabel\"\n [isChipsDragAndDrop]=\"isChipsDragAndDrop\"\n [dragAndDropSourceName]=\"dragAndDropSourceName\"\n [dragAndDropConnectedTo]=\"dragAndDropConnectedTo\"\n (chipDrop)=\"onChipDropped($event)\"\n (chipDragStart)=\"onChipDragStarted($event)\"\n (chipDragRelease)=\"onChipDragReleased($event)\"\n (chipRemove)=\"onChipRemove($event)\">\n <euiChipListAppendContent>\n <ng-template [ngIf]=\"chipsPosition === 'inside'\">\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </ng-template>\n </euiChipListAppendContent>\n </eui-chip-list>\n }\n @if (chipsPosition === 'top') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n</div>\n\n<ng-template #control>\n <div *ngIf=\"!hasChips || (hasChips && !isReadonly)\" class=\"eui-autocomplete__input-container\" #inputContainerRef>\n <input\n [attr.id]=\"inputId\"\n #input\n euiInputText\n [euiClearable]=\"!isReadonly && !isDisabled\"\n [euiLoading]=\"isLoading\"\n [formControl]=\"autocompleteControl\"\n class=\"eui-autocomplete__input {{ classList }}\"\n placeholder=\"{{ placeholder }}\"\n [readonly]=\"isReadonly\"\n (clear)=\"onClear()\"\n (click)=\"openPanel()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.aria-controls]=\"isOpen ? 'eui-autocomplete__panel' : null\"\n [attr.aria-label]=\"autocompleteControl.value?.length > 0 ? autocompleteControl.value : 'Input field without value'\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n aria-autocomplete=\"both\"\n aria-haspopup=\"true\" />\n </div>\n</ng-template>\n\n<ng-template #templatePortalContent>\n <div\n id=\"eui-autocomplete__panel\"\n class=\"eui-autocomplete__panel\"\n [@panelAnimation]=\"isOpen ? 'visible' : 'hidden'\"\n role=\"listbox\"\n aria-live=\"polite\"\n aria-label=\"Autocomplete panel\">\n <cdk-virtual-scroll-viewport\n #virtualScrolling\n [itemSize]=\"itemSize\"\n tabindex=\"0\"\n minBufferPx=\"500\"\n maxBufferPx=\"750\"\n [style.min-height]=\"cdkVirtualScrollViewport + 'px'\">\n @if (groupBy) {\n @for (distinctOptionGroup of distinctOptionGroups; let i = $index; track distinctOptionGroup) {\n @if ((groupedOptions | async)[distinctOptionGroup].options.length > 0) {\n <eui-autocomplete-option-group [label]=\"distinctOptionGroup\">\n <div class=\"eui-autocomplete-option-group__label\">\n @if (autocompleteOptGroupTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptGroupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: distinctOptionGroup } }\">\n </ng-template>\n } @else {\n {{ distinctOptionGroup }}\n }\n </div>\n <div class=\"eui-autocomplete-option-group__options\">\n @for (autocompleteOption of (groupedOptions | async)[distinctOptionGroup].options; let j = $index; track autocompleteOption.id) {\n <eui-autocomplete-option\n isGroupItem\n [isActive]=\"selectedOptionIndex === (groupedOptions | async)[distinctOptionGroup].ancestorLength + j\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n } @else if (autocompleteOption.iconSvgName) {\n <eui-icon-svg icon=\"{{ autocompleteOption.iconSvgName }}\"></eui-icon-svg>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </div>\n </eui-autocomplete-option-group>\n }\n }\n } @else {\n <eui-autocomplete-option\n *cdkVirtualFor=\"let autocompleteOption of autocompleteOptions | async; let i = index; trackBy: optionsTrackByFn\"\n [isActive]=\"selectedOptionIndex === i\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n } @else if (autocompleteOption.iconSvgName) {\n <eui-icon-svg icon=\"{{ autocompleteOption.iconSvgName }}\"></eui-icon-svg>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </cdk-virtual-scroll-viewport>\n </div> \n</ng-template>", styles: [".eui-autocomplete,.eui-autocomplete__wrapper{width:100%}.eui-autocomplete__wrapper .eui-autocomplete__input-container{display:flex;width:100%}.eui-autocomplete__panel-container .eui-autocomplete__panel{box-shadow:var(--eui-sh-8);width:100%}.eui-autocomplete__panel-container.eui-autocomplete__panel-container--no-option .eui-autocomplete__panel{box-shadow:none}.eui-autocomplete.eui-autocomplete--chips-position-bottom .eui-autocomplete__input-container{margin-bottom:var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper{background-color:var(--eui-c-white);border:var(--eui-bw-xs) solid var(--eui-c-neutral-lighter);border-radius:var(--eui-br-m);padding:0 var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list,.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container{display:block}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container .eui-chip{margin-bottom:0;margin-top:var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-input-text{border:var(--eui-bw-none);min-height:calc(var(--eui-s-2xl) + var(--eui-s-2xs) - 2px)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list euichiplistappendcontent{flex-grow:1}button~.eui-autocomplete .eui-autocomplete__input,.eui-input-group-addon-item~.eui-autocomplete .eui-autocomplete__input{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.eui-autocomplete:has(+button) .eui-autocomplete__input{border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete:has(+.eui-input-group-addon-item) .eui-autocomplete__input{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete-option-group .eui-autocomplete-option-group__label{align-items:center;background-color:var(--eui-c-neutral-bg-light);border-bottom:1px solid var(--eui-c-neutral-bg-light);border-left:var(--eui-bw-m) solid transparent;cursor:pointer;display:flex;font-weight:700;min-height:var(--eui-s-3xl);padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon-svg,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-flag-icon{margin-right:var(--eui-s-2xs)}.eui-autocomplete-option{align-items:center;border-bottom:1px solid var(--eui-c-neutral-bg-light);border-left:var(--eui-bw-m) solid transparent;cursor:pointer;display:flex;min-height:var(--eui-s-3xl);padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-autocomplete-option:hover{background-color:var(--eui-c-neutral-bg-light)}.eui-autocomplete-option--group-item{padding-left:var(--eui-s-l)}.eui-autocomplete-option .eui-icon,.eui-autocomplete-option .eui-icon-svg,.eui-autocomplete-option .eui-flag-icon{margin-right:var(--eui-s-xs)}.eui-autocomplete-option--primary{border-left-color:var(--eui-c-primary)}.eui-autocomplete-option--secondary{border-left-color:var(--eui-c-neutral-lighter)}.eui-autocomplete-option--info{border-left-color:var(--eui-c-info)}.eui-autocomplete-option--success{border-left-color:var(--eui-c-success)}.eui-autocomplete-option--warning{border-left-color:var(--eui-c-warning)}.eui-autocomplete-option--danger{border-left-color:var(--eui-c-danger)}.eui-autocomplete-option--accent{border-left-color:var(--eui-c-accent)}.eui-autocomplete-option--active{background-color:var(--eui-c-active);outline:2px solid var(--eui-c-focus-visible);outline-offset:-2px}.eui-autocomplete-option--disabled{cursor:default;opacity:.4}.eui-autocomplete-option--disabled:hover{background:none}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i8.EuiInputTextComponent, selector: "input[euiInputText]", inputs: ["isInvalid"] }, { kind: "component", type: i9.EuiChipListComponent, selector: "eui-chip-list, div[euiChipList], ul[euiChipList]", inputs: ["chips", "toggleLinkMoreLabel", "toggleLinkLessLabel", "chipsSortOrder", "dragAndDropSourceName", "dragAndDropConnectedTo", "ariaLabel", "dropListOrientation", "isSquared", "isChipsRemovable", "isMaxVisibleChipsOpened", "isChipsSorted", "isChipsDragAndDrop", "isGrid", "maxVisibleChipsCount", "chipsLabelTruncateCount"], outputs: ["chipsInit", "chipRemove", "chipDragStart", "chipDragRelease", "chipDrop", "chiplistFocus"] }, { kind: "directive", type: i9.EuiChipListAppendContentDirective, selector: "euiChipListAppendContent" }, { kind: "component", type: i10.EuiIconSvgComponent, selector: "eui-icon-svg, span[euiIconSvg], i[euiIconSvg]", inputs: ["icon", "fillColor", "set", "size", "style", "iconUrl", "transform", "euiVariant", "aria-label", "ariaHidden", "focusable", "isLoading", "isInputIcon", "euiStart", "euiEnd"] }, { kind: "component", type: i11.EuiAutocompleteOptionComponent, selector: "eui-autocomplete-option", inputs: ["isActive", "isDisabled", "isGroupItem"] }, { kind: "component", type: i12.EuiAutocompleteOptionGroupComponent, selector: "eui-autocomplete-option-group", inputs: ["label"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], animations: [panelAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
671
671
  }
672
672
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: EuiAutocompleteComponent, decorators: [{
673
673
  type: Component,
@@ -683,7 +683,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
683
683
  'euiAccent',
684
684
  ],
685
685
  },
686
- ], template: "<div class=\"eui-autocomplete__wrapper\">\n @if (chipsPosition === 'bottom') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n @if (hasChips) {\n <eui-chip-list\n [chips]=\"chips\"\n [isChipsRemovable]=\"isChipsRemovable && !isReadonly\"\n [maxVisibleChipsCount]=\"maxVisibleChipsCount\"\n [isMaxVisibleChipsOpened]=\"isMaxVisibleChipsOpened\"\n [chipsLabelTruncateCount]=\"chipsLabelTruncateCount\"\n [toggleLinkMoreLabel]=\"toggleLinkMoreLabel\"\n [toggleLinkLessLabel]=\"toggleLinkLessLabel\"\n [isChipsDragAndDrop]=\"isChipsDragAndDrop\"\n [dragAndDropSourceName]=\"dragAndDropSourceName\"\n [dragAndDropConnectedTo]=\"dragAndDropConnectedTo\"\n (chipDrop)=\"onChipDropped($event)\"\n (chipDragStart)=\"onChipDragStarted($event)\"\n (chipDragRelease)=\"onChipDragReleased($event)\"\n (chipRemove)=\"onChipRemove($event)\">\n <euiChipListAppendContent>\n <ng-template [ngIf]=\"chipsPosition === 'inside'\">\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </ng-template>\n </euiChipListAppendContent>\n </eui-chip-list>\n }\n @if (chipsPosition === 'top') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n</div>\n\n<ng-template #control>\n <div *ngIf=\"!hasChips || (hasChips && !isReadonly)\" class=\"eui-autocomplete__input-container\" #inputContainerRef>\n <input\n [id]=\"inputId\"\n #input\n euiInputText\n [euiClearable]=\"!isReadonly && !isDisabled\"\n [euiLoading]=\"isLoading\"\n [formControl]=\"autocompleteControl\"\n class=\"eui-autocomplete__input {{ classList }}\"\n placeholder=\"{{ placeholder }}\"\n [readonly]=\"isReadonly\"\n (clear)=\"onClear()\"\n (click)=\"openPanel()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.aria-controls]=\"isOpen ? 'eui-autocomplete__panel' : null\"\n [attr.aria-label]=\"autocompleteControl.value?.length > 0 ? autocompleteControl.value : 'Input field without value'\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n aria-autocomplete=\"both\"\n aria-haspopup=\"true\" />\n </div>\n</ng-template>\n\n<ng-template #templatePortalContent>\n <div\n id=\"eui-autocomplete__panel\"\n class=\"eui-autocomplete__panel\"\n [@panelAnimation]=\"isOpen ? 'visible' : 'hidden'\"\n role=\"listbox\"\n aria-live=\"polite\"\n aria-label=\"Autocomplete panel\">\n <cdk-virtual-scroll-viewport\n #virtualScrolling\n [itemSize]=\"itemSize\"\n tabindex=\"0\"\n minBufferPx=\"500\"\n maxBufferPx=\"750\"\n [style.min-height]=\"cdkVirtualScrollViewport + 'px'\">\n @if (groupBy) {\n @for (distinctOptionGroup of distinctOptionGroups; let i = $index; track distinctOptionGroup) {\n @if ((groupedOptions | async)[distinctOptionGroup].options.length > 0) {\n <eui-autocomplete-option-group [label]=\"distinctOptionGroup\">\n <div class=\"eui-autocomplete-option-group__label\">\n @if (autocompleteOptGroupTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptGroupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: distinctOptionGroup } }\">\n </ng-template>\n } @else {\n {{ distinctOptionGroup }}\n }\n </div>\n <div class=\"eui-autocomplete-option-group__options\">\n @for (autocompleteOption of (groupedOptions | async)[distinctOptionGroup].options; let j = $index; track autocompleteOption.id) {\n <eui-autocomplete-option\n isGroupItem\n [isActive]=\"selectedOptionIndex === (groupedOptions | async)[distinctOptionGroup].ancestorLength + j\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n } @else if (autocompleteOption.iconSvgName) {\n <eui-icon-svg icon=\"{{ autocompleteOption.iconSvgName }}\"></eui-icon-svg>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </div>\n </eui-autocomplete-option-group>\n }\n }\n } @else {\n <eui-autocomplete-option\n *cdkVirtualFor=\"let autocompleteOption of autocompleteOptions | async; let i = index; trackBy: optionsTrackByFn\"\n [isActive]=\"selectedOptionIndex === i\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n } @else if (autocompleteOption.iconSvgName) {\n <eui-icon-svg icon=\"{{ autocompleteOption.iconSvgName }}\"></eui-icon-svg>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </cdk-virtual-scroll-viewport>\n </div> \n</ng-template>", styles: [".eui-autocomplete,.eui-autocomplete__wrapper{width:100%}.eui-autocomplete__wrapper .eui-autocomplete__input-container{display:flex;width:100%}.eui-autocomplete__panel-container .eui-autocomplete__panel{box-shadow:var(--eui-sh-8);width:100%}.eui-autocomplete__panel-container.eui-autocomplete__panel-container--no-option .eui-autocomplete__panel{box-shadow:none}.eui-autocomplete.eui-autocomplete--chips-position-bottom .eui-autocomplete__input-container{margin-bottom:var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper{background-color:var(--eui-c-white);border:var(--eui-bw-xs) solid var(--eui-c-neutral-lighter);border-radius:var(--eui-br-m);padding:0 var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list,.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container{display:block}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container .eui-chip{margin-bottom:0;margin-top:var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-input-text{border:var(--eui-bw-none);min-height:calc(var(--eui-s-2xl) + var(--eui-s-2xs) - 2px)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list euichiplistappendcontent{flex-grow:1}button~.eui-autocomplete .eui-autocomplete__input,.eui-input-group-addon-item~.eui-autocomplete .eui-autocomplete__input{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.eui-autocomplete:has(+button) .eui-autocomplete__input{border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete:has(+.eui-input-group-addon-item) .eui-autocomplete__input{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete-option-group .eui-autocomplete-option-group__label{align-items:center;background-color:var(--eui-c-neutral-bg-light);border-bottom:1px solid var(--eui-c-neutral-bg-light);border-left:var(--eui-bw-m) solid transparent;cursor:pointer;display:flex;font-weight:700;min-height:var(--eui-s-3xl);padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon-svg,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-flag-icon{margin-right:var(--eui-s-2xs)}.eui-autocomplete-option{align-items:center;border-bottom:1px solid var(--eui-c-neutral-bg-light);border-left:var(--eui-bw-m) solid transparent;cursor:pointer;display:flex;min-height:var(--eui-s-3xl);padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-autocomplete-option:hover{background-color:var(--eui-c-neutral-bg-light)}.eui-autocomplete-option--group-item{padding-left:var(--eui-s-l)}.eui-autocomplete-option .eui-icon,.eui-autocomplete-option .eui-icon-svg,.eui-autocomplete-option .eui-flag-icon{margin-right:var(--eui-s-xs)}.eui-autocomplete-option--primary{border-left-color:var(--eui-c-primary)}.eui-autocomplete-option--secondary{border-left-color:var(--eui-c-neutral-lighter)}.eui-autocomplete-option--info{border-left-color:var(--eui-c-info)}.eui-autocomplete-option--success{border-left-color:var(--eui-c-success)}.eui-autocomplete-option--warning{border-left-color:var(--eui-c-warning)}.eui-autocomplete-option--danger{border-left-color:var(--eui-c-danger)}.eui-autocomplete-option--accent{border-left-color:var(--eui-c-accent)}.eui-autocomplete-option--active{background-color:var(--eui-c-active);outline:2px solid var(--eui-c-focus-visible);outline-offset:-2px}.eui-autocomplete-option--disabled{cursor:default;opacity:.4}.eui-autocomplete-option--disabled:hover{background:none}\n"] }]
686
+ ], template: "<div class=\"eui-autocomplete__wrapper\">\n @if (chipsPosition === 'bottom') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n @if (hasChips) {\n <eui-chip-list\n [chips]=\"chips\"\n [isChipsRemovable]=\"isChipsRemovable && !isReadonly\"\n [maxVisibleChipsCount]=\"maxVisibleChipsCount\"\n [isMaxVisibleChipsOpened]=\"isMaxVisibleChipsOpened\"\n [chipsLabelTruncateCount]=\"chipsLabelTruncateCount\"\n [toggleLinkMoreLabel]=\"toggleLinkMoreLabel\"\n [toggleLinkLessLabel]=\"toggleLinkLessLabel\"\n [isChipsDragAndDrop]=\"isChipsDragAndDrop\"\n [dragAndDropSourceName]=\"dragAndDropSourceName\"\n [dragAndDropConnectedTo]=\"dragAndDropConnectedTo\"\n (chipDrop)=\"onChipDropped($event)\"\n (chipDragStart)=\"onChipDragStarted($event)\"\n (chipDragRelease)=\"onChipDragReleased($event)\"\n (chipRemove)=\"onChipRemove($event)\">\n <euiChipListAppendContent>\n <ng-template [ngIf]=\"chipsPosition === 'inside'\">\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n </ng-template>\n </euiChipListAppendContent>\n </eui-chip-list>\n }\n @if (chipsPosition === 'top') {\n <ng-container *ngTemplateOutlet=\"control\"></ng-container>\n }\n</div>\n\n<ng-template #control>\n <div *ngIf=\"!hasChips || (hasChips && !isReadonly)\" class=\"eui-autocomplete__input-container\" #inputContainerRef>\n <input\n [attr.id]=\"inputId\"\n #input\n euiInputText\n [euiClearable]=\"!isReadonly && !isDisabled\"\n [euiLoading]=\"isLoading\"\n [formControl]=\"autocompleteControl\"\n class=\"eui-autocomplete__input {{ classList }}\"\n placeholder=\"{{ placeholder }}\"\n [readonly]=\"isReadonly\"\n (clear)=\"onClear()\"\n (click)=\"openPanel()\"\n (focus)=\"onFocus()\"\n (blur)=\"onBlur()\"\n [attr.aria-controls]=\"isOpen ? 'eui-autocomplete__panel' : null\"\n [attr.aria-label]=\"autocompleteControl.value?.length > 0 ? autocompleteControl.value : 'Input field without value'\"\n [attr.aria-required]=\"hasAriaRequiredAttribute ? 'true' : null\"\n aria-autocomplete=\"both\"\n aria-haspopup=\"true\" />\n </div>\n</ng-template>\n\n<ng-template #templatePortalContent>\n <div\n id=\"eui-autocomplete__panel\"\n class=\"eui-autocomplete__panel\"\n [@panelAnimation]=\"isOpen ? 'visible' : 'hidden'\"\n role=\"listbox\"\n aria-live=\"polite\"\n aria-label=\"Autocomplete panel\">\n <cdk-virtual-scroll-viewport\n #virtualScrolling\n [itemSize]=\"itemSize\"\n tabindex=\"0\"\n minBufferPx=\"500\"\n maxBufferPx=\"750\"\n [style.min-height]=\"cdkVirtualScrollViewport + 'px'\">\n @if (groupBy) {\n @for (distinctOptionGroup of distinctOptionGroups; let i = $index; track distinctOptionGroup) {\n @if ((groupedOptions | async)[distinctOptionGroup].options.length > 0) {\n <eui-autocomplete-option-group [label]=\"distinctOptionGroup\">\n <div class=\"eui-autocomplete-option-group__label\">\n @if (autocompleteOptGroupTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptGroupTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: { label: distinctOptionGroup } }\">\n </ng-template>\n } @else {\n {{ distinctOptionGroup }}\n }\n </div>\n <div class=\"eui-autocomplete-option-group__options\">\n @for (autocompleteOption of (groupedOptions | async)[distinctOptionGroup].options; let j = $index; track autocompleteOption.id) {\n <eui-autocomplete-option\n isGroupItem\n [isActive]=\"selectedOptionIndex === (groupedOptions | async)[distinctOptionGroup].ancestorLength + j\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n } @else if (autocompleteOption.iconSvgName) {\n <eui-icon-svg icon=\"{{ autocompleteOption.iconSvgName }}\"></eui-icon-svg>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </div>\n </eui-autocomplete-option-group>\n }\n }\n } @else {\n <eui-autocomplete-option\n *cdkVirtualFor=\"let autocompleteOption of autocompleteOptions | async; let i = index; trackBy: optionsTrackByFn\"\n [isActive]=\"selectedOptionIndex === i\"\n [isDisabled]=\"autocompleteOption.isDisabled\"\n [attr.aria-disabled]=\"autocompleteOption.isDisabled\"\n [euiVariant]=\"autocompleteOption.typeClass\"\n (click)=\"onOptionSelected(autocompleteOption)\">\n @if (autocompleteOptionTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"autocompleteOptionTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: autocompleteOption }\">\n </ng-template>\n } @else {\n @if (autocompleteOption.iconClass) {\n <span class=\"{{ autocompleteOption.iconClass }}\"></span>\n } @else if (autocompleteOption.iconSvgName) {\n <eui-icon-svg icon=\"{{ autocompleteOption.iconSvgName }}\"></eui-icon-svg>\n }\n {{ autocompleteOption.label }}\n }\n </eui-autocomplete-option>\n }\n </cdk-virtual-scroll-viewport>\n </div> \n</ng-template>", styles: [".eui-autocomplete,.eui-autocomplete__wrapper{width:100%}.eui-autocomplete__wrapper .eui-autocomplete__input-container{display:flex;width:100%}.eui-autocomplete__panel-container .eui-autocomplete__panel{box-shadow:var(--eui-sh-8);width:100%}.eui-autocomplete__panel-container.eui-autocomplete__panel-container--no-option .eui-autocomplete__panel{box-shadow:none}.eui-autocomplete.eui-autocomplete--chips-position-bottom .eui-autocomplete__input-container{margin-bottom:var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper{background-color:var(--eui-c-white);border:var(--eui-bw-xs) solid var(--eui-c-neutral-lighter);border-radius:var(--eui-br-m);padding:0 var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list,.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container{display:block}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-chip-list-container .eui-chip-list-wrapper .eui-chip-list__chip-container .eui-chip{margin-bottom:0;margin-top:var(--eui-s-2xs)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list .eui-input-text{border:var(--eui-bw-none);min-height:calc(var(--eui-s-2xl) + var(--eui-s-2xs) - 2px)}.eui-autocomplete.eui-autocomplete--chips-position-inside .eui-autocomplete__wrapper .eui-chip-list euichiplistappendcontent{flex-grow:1}button~.eui-autocomplete .eui-autocomplete__input,.eui-input-group-addon-item~.eui-autocomplete .eui-autocomplete__input{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.eui-autocomplete:has(+button) .eui-autocomplete__input{border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete:has(+.eui-input-group-addon-item) .eui-autocomplete__input{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.eui-autocomplete-option-group .eui-autocomplete-option-group__label{align-items:center;background-color:var(--eui-c-neutral-bg-light);border-bottom:1px solid var(--eui-c-neutral-bg-light);border-left:var(--eui-bw-m) solid transparent;cursor:pointer;display:flex;font-weight:700;min-height:var(--eui-s-3xl);padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-icon-svg,.eui-autocomplete-option-group .eui-autocomplete-option-group__label .eui-flag-icon{margin-right:var(--eui-s-2xs)}.eui-autocomplete-option{align-items:center;border-bottom:1px solid var(--eui-c-neutral-bg-light);border-left:var(--eui-bw-m) solid transparent;cursor:pointer;display:flex;min-height:var(--eui-s-3xl);padding-left:var(--eui-s-s);padding-right:var(--eui-s-s)}.eui-autocomplete-option:hover{background-color:var(--eui-c-neutral-bg-light)}.eui-autocomplete-option--group-item{padding-left:var(--eui-s-l)}.eui-autocomplete-option .eui-icon,.eui-autocomplete-option .eui-icon-svg,.eui-autocomplete-option .eui-flag-icon{margin-right:var(--eui-s-xs)}.eui-autocomplete-option--primary{border-left-color:var(--eui-c-primary)}.eui-autocomplete-option--secondary{border-left-color:var(--eui-c-neutral-lighter)}.eui-autocomplete-option--info{border-left-color:var(--eui-c-info)}.eui-autocomplete-option--success{border-left-color:var(--eui-c-success)}.eui-autocomplete-option--warning{border-left-color:var(--eui-c-warning)}.eui-autocomplete-option--danger{border-left-color:var(--eui-c-danger)}.eui-autocomplete-option--accent{border-left-color:var(--eui-c-accent)}.eui-autocomplete-option--active{background-color:var(--eui-c-active);outline:2px solid var(--eui-c-focus-visible);outline-offset:-2px}.eui-autocomplete-option--disabled{cursor:default;opacity:.4}.eui-autocomplete-option--disabled:hover{background:none}\n"] }]
687
687
  }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.ChangeDetectorRef }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: i2.LiveAnnouncer }, { type: i3.ScrollDispatcher }, { type: i4.EuiAppShellService }, { type: i5.BaseStatesDirective }, { type: i6.NgControl, decorators: [{
688
688
  type: Self
689
689
  }, {
@@ -808,4 +808,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImpor
808
808
  }], chipDrop: [{
809
809
  type: Output
810
810
  }] } });
811
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktYXV0b2NvbXBsZXRlL2V1aS1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLWF1dG9jb21wbGV0ZS9ldWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUtqQixXQUFXLEVBR1gsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixJQUFJLEVBQ0osUUFBUSxFQUVSLGVBQWUsRUFFZixnQkFBZ0IsRUFDaEIsZUFBZSxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBZ0MsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsc0JBQXNCLEdBQzlCLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFJN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBdUI3RCxNQUFNLE9BQU8sd0JBQXdCO0lBQ2pD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QyxvQkFBb0I7Z0JBRUQscUJBQXFCO3NCQUF4RCxTQUFTO3VCQUFDLHVCQUF1QjtnQkFDRixpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUNDLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ2EsS0FBSztzQkFBOUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUU5QixVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBIb3N0QmluZGluZyxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE91dHB1dCxcbiAgICBTZWxmLFxuICAgIE9wdGlvbmFsLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtQ29udHJvbFN0YXR1cywgTmdDb250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZpbHRlciwgZnJvbUV2ZW50LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBDb25uZWN0aW9uUG9zaXRpb25QYWlyLCBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4sIE92ZXJsYXksIE92ZXJsYXlSZWYsIFBvc2l0aW9uU3RyYXRlZ3ksIFJlcG9zaXRpb25TY3JvbGxTdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSwgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBTY3JvbGxEaXNwYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBMaXZlQW5ub3VuY2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgRXVpQXBwU2hlbGxTZXJ2aWNlIH0gZnJvbSAnQGV1aS9jb3JlJztcbmltcG9ydCB7IEV1aUNoaXBEcmFnRHJvcCB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktY2hpcC1saXN0JztcbmltcG9ydCB7IEV1aUNoaXAsIEV1aUNoaXBUb29sdGlwIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1jaGlwJztcbmltcG9ydCB7IEV1aVRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2RpcmVjdGl2ZXMnO1xuXG5pbXBvcnQgeyBFdWlBdXRvQ29tcGxldGVJdGVtIH0gZnJvbSAnLi9tb2RlbHMvZXVpLWF1dG9jb21wbGV0ZS1pdGVtLm1vZGVsJztcbmltcG9ydCB7IHBhbmVsQW5pbWF0aW9uIH0gZnJvbSAnLi9hbmltYXRpb25zL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQmFzZVN0YXRlc0RpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc2VsZWN0b3I6ICdldWktYXV0b2NvbXBsZXRlLCBpbnB1dFtldWlBdXRvY29tcGxldGVdJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGFuaW1hdGlvbnM6IFtwYW5lbEFuaW1hdGlvbl0sXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBCYXNlU3RhdGVzRGlyZWN0aXZlLFxuICAgICAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICAgICAgJ2V1aVNlY29uZGFyeScsXG4gICAgICAgICAgICAgICAgJ2V1aVN1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICdldWlJbmZvJyxcbiAgICAgICAgICAgICAgICAnZXVpV2FybmluZycsXG4gICAgICAgICAgICAgICAgJ2V1aURhbmdlcicsXG4gICAgICAgICAgICAgICAgJ2V1aUFjY2VudCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aUF1dG9jb21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0YXRlc0RpcmVjdGl2ZS5nZXRDc3NDbGFzc2VzKCdldWktYXV0b2NvbXBsZXRlJyksXG4gICAgICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS0tY2hpcHMtcG9zaXRpb24tJyArIHRoaXMuY2hpcHNQb3NpdGlvbixcbiAgICAgICAgXVxuICAgICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBpbnB1dElkOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b2NvbXBsZXRlRGF0YTogRXVpQXV0b0NvbXBsZXRlSXRlbVtdID0gW107XG4gICAgQElucHV0KCkgdmlzaWJsZU9wdGlvbnMgPSA1O1xuICAgIEBJbnB1dCgpIG1hdGNoaW5nOiAnc3RhcnRXaXRoJyB8ICdjb250YWlucycgPSAnY29udGFpbnMnO1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG4gICAgQElucHV0KCkgYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkOiBFdWlBdXRvQ29tcGxldGVJdGVtW10gPSBbXTtcbiAgICBASW5wdXQoKSBjaGlwc1NvcnRPcmRlcjogJ0FTQycgfCAnREVTQycgPSAnQVNDJztcbiAgICBASW5wdXQoKSBpdGVtc1NvcnRPcmRlcjogJ0FTQycgfCAnREVTQycgPSAnQVNDJztcbiAgICBASW5wdXQoKSBjaGlwc1Bvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nIHwgJ2luc2lkZScgPSAndG9wJztcbiAgICBASW5wdXQoKSBncm91cEJ5OiBzdHJpbmc7XG4gICAgQElucHV0KCkgdG9nZ2xlTGlua01vcmVMYWJlbDogc3RyaW5nID0gbnVsbDtcbiAgICBASW5wdXQoKSB0b2dnbGVMaW5rTGVzc0xhYmVsOiBzdHJpbmcgPSBudWxsO1xuICAgIEBJbnB1dCgpIGNsYXNzTGlzdDogc3RyaW5nID0gbnVsbDtcbiAgICBASW5wdXQoKSBwYW5lbFdpZHRoOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgQElucHV0KCkgZHJhZ0FuZERyb3BTb3VyY2VOYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZHJhZ0FuZERyb3BDb25uZWN0ZWRUbzogc3RyaW5nW10gPSBbXTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0ZyZWVWYWx1ZUFsbG93ZWQgPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1JlYWRvbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzTG9hZGluZyA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNDaGlwcyA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0FzeW5jID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ2hpcHNTb3J0ZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNJdGVtc1NvcnRlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0NoaXBzUmVtb3ZhYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNEdXBsaWNhdGVWYWx1ZUFsbG93ZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNBZGRPbkJsdXIgID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzRm9yY2VTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBtYXhWaXNpYmxlQ2hpcHNDb3VudCA9IG51bGw7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgY2hpcHNMYWJlbFRydW5jYXRlQ291bnQgPSBudWxsO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc01heFZpc2libGVDaGlwc09wZW5lZCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0NoaXBzRHJhZ0FuZERyb3AgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBhdXRvY29tcGxldGVPcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFdWlBdXRvQ29tcGxldGVJdGVtW10+KHRoaXMuYXV0b2NvbXBsZXRlRGF0YSk7XG4gICAgcHVibGljIHNlbGVjdGVkT3B0aW9uSW5kZXggPSAwO1xuICAgIHB1YmxpYyBhdXRvY29tcGxldGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpO1xuICAgIHB1YmxpYyBpc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgcHVibGljIGNoaXBzOiBFdWlDaGlwW10gPSBbXTtcbiAgICBwdWJsaWMgZGlzdGluY3RPcHRpb25Hcm91cHM6IHN0cmluZ1tdO1xuICAgIHB1YmxpYyBncm91cGVkT3B0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbaWQ6IHN0cmluZ106IHsgb3B0aW9uczogRXVpQXV0b0NvbXBsZXRlSXRlbVtdLCBhbmNlc3Rvckxlbmd0aDogbnVtYmVyIH0gfT4oe30pO1xuICAgIHB1YmxpYyBnbG9iYWxPcHRpb25JbmRleCA9IDA7XG4gICAgcHVibGljIGl0ZW1TaXplID0gNDA7XG4gICAgcHVibGljIGF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogRXVpQXV0b0NvbXBsZXRlSXRlbSB9PjtcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlT3B0R3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IHsgbGFiZWw6IHN0cmluZyB9IH0+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihFdWlUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8RXVpVGVtcGxhdGVEaXJlY3RpdmU+O1xuXG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGVQb3J0YWxDb250ZW50JykgdGVtcGxhdGVQb3J0YWxDb250ZW50OiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcbiAgICBAVmlld0NoaWxkKCdpbnB1dENvbnRhaW5lclJlZicpIGlucHV0Q29udGFpbmVyUmVmOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3ZpcnR1YWxTY3JvbGxpbmcnKSB2aXJ0dWFsU2Nyb2xsaW5nOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgaW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgICBAT3V0cHV0KCkgcGFuZWxDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcGFuZWxPcGVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBpbnB1dEZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBpbnB1dEJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGNsZWFyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aUF1dG9Db21wbGV0ZUl0ZW1bXT4oKTtcbiAgICBAT3V0cHV0KCkgaXRlbUFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQXV0b0NvbXBsZXRlSXRlbT4oKTtcbiAgICBAT3V0cHV0KCkgaXRlbVJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQXV0b0NvbXBsZXRlSXRlbT4oKTtcbiAgICBAT3V0cHV0KCkgaW5wdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgY2hpcERyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQ2hpcERyYWdEcm9wPigpO1xuICAgIEBPdXRwdXQoKSBjaGlwRHJhZ1JlbGVhc2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aUNoaXBEcmFnRHJvcD4oKTtcbiAgICBAT3V0cHV0KCkgY2hpcERyb3AgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aUNoaXBEcmFnRHJvcD4oKTtcblxuICAgIHByb3RlY3RlZCBoYXNBcmlhUmVxdWlyZWRBdHRyaWJ1dGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmO1xuICAgIHByaXZhdGUgaXNPcGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgdGVtcGxhdGVQb3J0YWw6IFRlbXBsYXRlUG9ydGFsPHVua25vd24+O1xuICAgIHByaXZhdGUga2V5Ym9hcmRPcHRpb25TZWxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBhZGRPbkJsdXJDbGlja0hhbmRsZXJTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBpc0ZvcmNlU2VsZWN0aW9uU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUga2V5Ym9hcmRTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBhdXRvY29tcGxldGVPcHRpb25zU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIHdpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIHZhbHVlOiBFdWlBdXRvQ29tcGxldGVJdGVtIHwgRXVpQXV0b0NvbXBsZXRlSXRlbVtdID0gbnVsbDtcbiAgICBwcml2YXRlIFRPUCA9IG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ3RvcCcgfSwgeyBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdib3R0b20nIH0sIDAsIDAsIFtcbiAgICAgICAgJ2V1aS1hdXRvY29tcGxldGUtcG9zaXRpb24nLFxuICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS1wb3NpdGlvbi0tdG9wJyxcbiAgICBdKTtcbiAgICBwcml2YXRlIEJPVFRPTSA9IG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2JvdHRvbScgfSwgeyBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICd0b3AnIH0sIDAsIDAsIFtcbiAgICAgICAgJ2V1aS1hdXRvY29tcGxldGUtcG9zaXRpb24nLFxuICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS1wb3NpdGlvbi0tYm90dG9tJyxcbiAgICBdKTtcbiAgICBwcml2YXRlIHByZWZlcnJlZFBvc2l0b25zOiBDb25uZWN0aW9uUG9zaXRpb25QYWlyW10gPSBbdGhpcy5CT1RUT00sIHRoaXMuVE9QXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBsaXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyLFxuICAgICAgICBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIsXG4gICAgICAgIHByaXZhdGUgZXVpQXBwU2hlbGxTZXJ2aWNlOiBFdWlBcHBTaGVsbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYmFzZVN0YXRlc0RpcmVjdGl2ZTogQmFzZVN0YXRlc0RpcmVjdGl2ZSxcbiAgICAgICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2w6IE5nQ29udHJvbCxcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoYzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoYyAmJiBjLmF1dG9jb21wbGV0ZURhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjICYmIGMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkICYmIHRoaXMuaGFzQ2hpcHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkID0gYy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQuY3VycmVudFZhbHVlLm1hcCgoczogRXVpQXV0b0NvbXBsZXRlSXRlbSkgPT4gKHsgLi4ucywgZXVpSW50ZXJuYWxJZDogdXVpZC52NCgpIH0pKTtcbiAgICAgICAgICAgIHRoaXMuY2hpcHMgPSB0aGlzLm1hcFRvQ2hpcCh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCk7XG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvbnMoJycsIHRoaXMuaXNJdGVtc1NvcnRlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZm9jdXMnKVxuXG4gICAgICAgIHRoaXMuZXVpQXBwU2hlbGxTZXJ2aWNlLnN0YXRlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pdGVtU2l6ZSA9IHN0YXRlLmFwcEJhc2VGb250U2l6ZSA9PT0gJzE2cHgnID8gNDAgOiAzNTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dEFyaWFSZXF1aXJlZEF0dHJpYnV0ZSh0aGlzLmNvbnRyb2wpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoc3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5zZXRFcnJvcnModGhpcy5jb250cm9sLmVycm9ycyk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5jb250cm9sLnVudG91Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dEFyaWFSZXF1aXJlZEF0dHJpYnV0ZSh0aGlzLmNvbnRyb2wpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKHZhbHVlLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDaGlwcykge1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZC5sZW5ndGggPiAwID8gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQgOiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kSXRlbSA9IHRoaXMuYXV0b2NvbXBsZXRlRGF0YS5maW5kKChkKSA9PiBkLmxhYmVsLnRvTG93ZXJDYXNlKCkudHJpbSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShmb3VuZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPyB0aGlzLm9uQ2hhbmdlKHsgbGFiZWw6IHZhbHVlIH0pIDogdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0FzeW5jKSB7XG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvbnMoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/ICcnIDogdGhpcy52YWx1ZT8ubGFiZWwsIHRoaXMuaXNJdGVtc1NvcnRlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVQb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50ZW1wbGF0ZVBvcnRhbENvbnRlbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG5cbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0VHlwZSgpID09PSAnZHJvcGRvd25PcHRpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5nZXRUeXBlKCkgPT09ICdkcm9wZG93bk9wdEdyb3VwJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0R3JvdXBUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5rZXlib2FyZE9wdGlvblNlbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmFkZE9uQmx1ckNsaWNrSGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy53aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBnZXQgY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9uR3JvdXBzOiBzdHJpbmdbXSA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZVxuICAgICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiB0aGlzLmdyb3VwQnkuc3BsaXQoJy4nKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChwcmV2ID8gcHJldltjdXJyXSA6IG51bGwpLCBpdGVtIHx8IHNlbGYpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbkdyb3VwOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24pID0+IHRoaXMuZ3JvdXBCeS5zcGxpdCgnLicpLnJlZHVjZSgocHJldiwgY3VycikgPT4gKHByZXYgPyBwcmV2W2N1cnJdIDogbnVsbCksIG9wdGlvbiB8fCBzZWxmKSA9PT0gb3B0aW9uR3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChvcHRpb25Hcm91cDogc3RyaW5nLCBpbmRleCwgYXJyYXk6IHN0cmluZ1tdKSA9PiBhcnJheS5pbmRleE9mKG9wdGlvbkdyb3VwKSA9PT0gaW5kZXgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlLmxlbmd0aCA+PSB0aGlzLnZpc2libGVPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZU9wdGlvbnMgKiB0aGlzLml0ZW1TaXplO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxJdGVtcyA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5sZW5ndGggKyBmaWx0ZXJlZE9wdGlvbkdyb3Vwcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChzY3JvbGxJdGVtcyA+IHRoaXMudmlzaWJsZU9wdGlvbnMgPyB0aGlzLnZpc2libGVPcHRpb25zIDogc2Nyb2xsSXRlbXMpICogdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUubGVuZ3RoID49IHRoaXMudmlzaWJsZU9wdGlvbnMgP1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZU9wdGlvbnMgKiB0aGlzLml0ZW1TaXplIDpcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUubGVuZ3RoICogdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT3BlbiQudmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGhhc09wdGlvbnNSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3BlblBhbmVsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuICYmICF0aGlzLmlzUmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnNjcmlwdGlvbiA9IHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclxuICAgICAgICAgICAgICAgIC5hbmNlc3RvclNjcm9sbGVkKHRoaXMuaW5wdXQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDZGtTY3JvbGxhYmxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVQYXJlbnQgPSBldmVudCA/IGV2ZW50LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50IDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgc2Nyb2xsYWJsZVBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMud2luZG93UmVzaXplU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5UmVmICYmIHRoaXMub3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpICYmICF0aGlzLnBhbmVsV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5pbnB1dENvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuZ2V0UG9zaXRpb25TdHJhdGVneSgpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLmdldFNjcm9sbFN0cmF0ZWd5KCk7XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMucGFuZWxXaWR0aCA/IHRoaXMucGFuZWxXaWR0aCA6IHRoaXMuaW5wdXRDb250YWluZXJSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ2V1aS1hdXRvY29tcGxldGVfX3BhbmVsLWNvbnRhaW5lcicsIHRoaXMuY2xhc3NMaXN0XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaCh0aGlzLnRlbXBsYXRlUG9ydGFsKTtcblxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgICAgICAgICAgLm91dHNpZGVQb2ludGVyRXZlbnRzKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFyRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ldWktc3ByaXRlLWV1aS1jbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0VsZW1lbnRPckNoaWxkT2ZFbGVtZW50ID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwYXJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gcGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0NsZWFyYWJsZUJ1dHRvbiA9IHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdldWktc3ByaXRlLWV1aS1jbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0lucHV0ID0gdGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aS1hdXRvY29tcGxldGVfX2lucHV0Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NsZWFyYWJsZUJ1dHRvbiAmJiAhaXNJbnB1dCAmJiAhaXNFbGVtZW50T3JDaGlsZE9mRWxlbWVudCh0YXJnZXRFbGVtZW50LCBjbGVhckVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NsZWFyYWJsZUJ1dHRvbiAmJiAhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5wdXQgJiYgIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygnZXVpLWF1dG9jb21wbGV0ZV9faW5wdXQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgICAgICAgICAgLmtleWRvd25FdmVudHMoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChrZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9uc1N1YnNjcmlwdGlvbiA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5zdWJzY3JpYmUoKGF1dG9jb21wbGV0ZU9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYucmVtb3ZlUGFuZWxDbGFzcygnZXVpLWF1dG9jb21wbGV0ZV9fcGFuZWwtY29udGFpbmVyLS1uby1vcHRpb24nKTtcbiAgICAgICAgICAgICAgICBpZiAoYXV0b2NvbXBsZXRlT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoJ2V1aS1hdXRvY29tcGxldGVfX3BhbmVsLWNvbnRhaW5lci0tbm8tb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxpdmVBbm5vdW5jZXJTb3VyY2UgPSB0aGlzLmdyb3VwQnkgPyBPYmplY3QudmFsdWVzKHRoaXMuZ3JvdXBlZE9wdGlvbnMudmFsdWUpLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucykgOiB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMubGl2ZUFubm91bmNlci5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmFubm91bmNlKGxpdmVBbm5vdW5jZXJTb3VyY2VbMF0/LmxhYmVsKTtcblxuICAgICAgICAgICAgbGV0IHZpc2libGVSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGxldCB2aXNpYmxlUmFuZ2VFbmQgPSB0aGlzLnZpc2libGVPcHRpb25zIC0gMTtcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmRPcHRpb25TZWxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoZTogS2V5Ym9hcmRFdmVudCkgPT4gZS5jb2RlID09PSAnQXJyb3dEb3duJyB8fCBlLmNvZGUgPT09ICdBcnJvd1VwJyB8fCBlLmNvZGUgPT09ICdFbnRlcicgfHwgZS5jb2RlID09PSAnVGFiJyksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93RG93bicgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4IDwgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXZlQW5ub3VuY2VyU291cmNlID0gdGhpcy5ncm91cEJ5ID8gT2JqZWN0LnZhbHVlcyh0aGlzLmdyb3VwZWRPcHRpb25zLnZhbHVlKS5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLm9wdGlvbnMpIDogdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmFubm91bmNlKGxpdmVBbm5vdW5jZXJTb3VyY2VbdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4XS5sYWJlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnQXJyb3dVcCcgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGl2ZUFubm91bmNlclNvdXJjZSA9IHRoaXMuZ3JvdXBCeSA/IE9iamVjdC52YWx1ZXModGhpcy5ncm91cGVkT3B0aW9ucy52YWx1ZSkuZmxhdE1hcChncm91cCA9PiBncm91cC5vcHRpb25zKSA6IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUFubm91bmNlci5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUFubm91bmNlci5hbm5vdW5jZShsaXZlQW5ub3VuY2VyU291cmNlW3RoaXMuc2VsZWN0ZWRPcHRpb25JbmRleF0ubGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjSW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggLSB0aGlzLnZpcnR1YWxTY3JvbGxpbmc/LmdldFJlbmRlcmVkUmFuZ2UoKS5zdGFydDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93RG93bicgJiYgY0luZGV4ID4gdmlzaWJsZVJhbmdlRW5kIC0gdmlzaWJsZVJhbmdlU3RhcnQgLSB2aXNpYmxlUmFuZ2VFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmJPcHRpb25zR3JvdXAgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5iT3B0aW9ucyA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmdyb3VwZWRPcHRpb25zLnZhbHVlKS5mb3JFYWNoKGdyb3VwZWRPcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBlZE9wdGlvbnMudmFsdWVbZ3JvdXBlZE9wdGlvbl0ub3B0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ID4gdGhpcy5ncm91cGVkT3B0aW9ucy52YWx1ZVtncm91cGVkT3B0aW9uXS5hbmNlc3Rvckxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYk9wdGlvbnNHcm91cCArKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggKyBuYk9wdGlvbnNHcm91cCkgPiB2aXNpYmxlUmFuZ2VFbmQgJiYgdmlzaWJsZVJhbmdlRW5kIDw9IChuYk9wdGlvbnMgKyBuYk9wdGlvbnNHcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsaW5nLnNjcm9sbFRvSW5kZXgoKHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCArIG5iT3B0aW9uc0dyb3VwKSAtIHZpc2libGVSYW5nZUVuZCArIHZpc2libGVSYW5nZVN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJhbmdlU3RhcnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJhbmdlRW5kKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93VXAnICYmIGNJbmRleCA8IHZpc2libGVSYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCA8IHZpc2libGVSYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbGluZy5zY3JvbGxUb0luZGV4KHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSYW5nZVN0YXJ0LS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSYW5nZUVuZC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNPcHRpb25zUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBbXS5jb25jYXQoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmdyb3VwZWRPcHRpb25zLnZhbHVlKS5tYXAoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdGVkKG9wdGlvbnNbdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uU2VsZWN0ZWQodGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlW3RoaXMuc2VsZWN0ZWRPcHRpb25JbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0NoaXBzICYmIHRoaXMuaXNGcmVlVmFsdWVBbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBZGRPbkJsdXIgICYmIHRoaXMuaGFzQ2hpcHMgJiYgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnZhbHVlPy50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQodGhpcy5hdXRvY29tcGxldGVDb250cm9sLnZhbHVlLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGb3JjZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmFkZE9uQmx1ckNsaWNrSGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBZGRPbkJsdXIgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRPbkJsdXJDbGlja0hhbmRsZXJTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aS1hdXRvY29tcGxldGUtb3B0aW9uJykgJiYgdGhpcy5oYXNDaGlwcyAmJiB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWU/LnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZCh0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWUudHJpbSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRm9yY2VTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aS1hdXRvY29tcGxldGUtb3B0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlzT3BlbiQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucGFuZWxPcGVuLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgICB0aGlzLmlzT3BlbiQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmtleWJvYXJkT3B0aW9uU2VsZWN0b3JIYW5kbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy53aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5wYW5lbENsb3NlLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PcHRpb25TZWxlY3RlZChlOiBFdWlBdXRvQ29tcGxldGVJdGVtKTogdm9pZCB7XG4gICAgICAgIGlmICghZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDaGlwcykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkLnB1c2goeyAuLi5lLCBldWlJbnRlcm5hbElkOiB1dWlkLnY0KCkgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCA9IFtlXTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBlLmxhYmVsO1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5zZXRWYWx1ZShlLmxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHRoaXMuYWRkT25CbHVyQ2xpY2tIYW5kbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pdGVtQWRkLmVtaXQoZSk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhZGQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXZhbHVlIHx8ICghdGhpcy5pc0ZyZWVWYWx1ZUFsbG93ZWQgJiYgIXRoaXMuYXV0b2NvbXBsZXRlRGF0YS5maW5kKGEgPT4gYS5sYWJlbCA9PT0gdmFsdWUudHJpbSgpKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBpZiAoIXRoaXMuaXNEdXBsaWNhdGVWYWx1ZUFsbG93ZWQgJiYgdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQuc29tZShzID0+IHMubGFiZWwudHJpbSgpID09PSB2YWx1ZS50cmltKCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuYXV0b2NvbXBsZXRlRGF0YS5maW5kKGEgPT4gYS5sYWJlbCA9PT0gdmFsdWUudHJpbSgpKSB8fCB7IGxhYmVsOiB2YWx1ZS50cmltKCksIGV1aUludGVybmFsSWQ6IHV1aWQudjQoKSB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG5cbiAgICAgICAgdGhpcy5hZGRPbkJsdXJDbGlja0hhbmRsZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pc0ZvcmNlU2VsZWN0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLml0ZW1BZGQuZW1pdChpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3B0aW9uc1RyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBFdWlBdXRvQ29tcGxldGVJdGVtKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IEV1aUF1dG9Db21wbGV0ZUl0ZW0gfCBFdWlBdXRvQ29tcGxldGVJdGVtW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0NoaXBzKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCA9IHZhbHVlID8gKFsuLi52YWx1ZSBhcyBFdWlBdXRvQ29tcGxldGVJdGVtW11dKSA6IFtdO1xuICAgICAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlID8gKHZhbHVlIGFzIEV1aUF1dG9Db21wbGV0ZUl0ZW0pLmxhYmVsIDogbnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IHZhbHVlID8gKHZhbHVlIGFzIEV1aUF1dG9Db21wbGV0ZUl0ZW0pLmxhYmVsIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucyhpbnB1dFZhbHVlLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICBpc0Rpc2FibGVkID8gdGhpcy5hdXRvY29tcGxldGVDb250cm9sLmRpc2FibGUoKSA6IHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaCA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IFxuICAgICAgICAgICAgICAgICAgICAvXlthLXpBLVowLTldJC8udGVzdChldmVudC5rZXkpIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleSA9PT0gJ1NwYWNlJyB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlblBhbmVsKCk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaXBzUG9zaXRpb24gPT09ICdpbnNpZGUnICYmIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgJiYgKCF0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWUgfHwgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuY2hpcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGlwUmVtb3ZlKHsgY2hpcHM6IFsuLi50aGlzLmNoaXBzXSwgcmVtb3ZlZCB9KTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7IHdpZHRoOiB0aGlzLmlucHV0Q29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBhbmVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlucHV0Rm9jdXMuZW1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pbnB1dEJsdXIuZW1pdCgpO1xuICAgICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGlwUmVtb3ZlKGU6IHsgY2hpcHM6IEV1aUNoaXBbXTsgcmVtb3ZlZDogRXVpQ2hpcCB8IHsgY2hpcDogRXVpQ2hpcDsgZXZlbnQ6IEV2ZW50IH0gfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudCA9IGUgYXMgeyBjaGlwczogRXVpQ2hpcFtdOyByZW1vdmVkOiBFdWlDaGlwIH07XG4gICAgICAgIGNvbnN0IGl0ZW1SZW1vdmVkID0gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQuZmluZChpID0+IGkuaWQgPT09IGV2ZW50LnJlbW92ZWQuaWQpO1xuXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkID0gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWRcbiAgICAgICAgICAgIC5maWx0ZXIoaSA9PiBldmVudC5jaGlwcy5maW5kKGMgPT4gYy5pZCA9PT0gaS5pZCkpXG4gICAgICAgICAgICAuZmlsdGVyKGkgPT4gZXZlbnQuY2hpcHMuZmluZChjID0+IGMuZXVpSW50ZXJuYWxJZCA9PT0gaS5ldWlJbnRlcm5hbElkKSk7XG4gICAgICAgIHRoaXMuY2hpcHMgPSB0aGlzLm1hcFRvQ2hpcCh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCk7XG5cbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQubGVuZ3RoID4gMCA/IHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkIDogbnVsbCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLml0ZW1SZW1vdmUuZW1pdChpdGVtUmVtb3ZlZCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hpcERyb3BwZWQoZTogRXVpQ2hpcERyYWdEcm9wKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmF1dG9jb21wbGV0ZURhdGE7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkID0gZS5jaGlwcy5tYXAoYyA9PiBkYXRhLmZpbmQoKGEpID0+IGEuaWQgPT09IGMuaWQpKTtcblxuICAgICAgICB0aGlzLmNoaXBzID0gdGhpcy5tYXBUb0NoaXAodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMubmV4dCh0aGlzLmZpbHRlck9wdGlvbnMoJycpKTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkLmxlbmd0aCA+IDAgPyB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCA6IG51bGwpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcblxuICAgICAgICB0aGlzLmNoaXBEcm9wLmVtaXQoZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hpcERyYWdTdGFydGVkKGU6IEV1aUNoaXBEcmFnRHJvcCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoaXBEcmFnU3RhcnQuZW1pdChlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGlwRHJhZ1JlbGVhc2VkKGU6IEV1aUNoaXBEcmFnRHJvcCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoaXBEcmFnUmVsZWFzZS5lbWl0KGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXRlbVNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uSGVpZ2h0ID0gdGhpcy5vdmVybGF5UmVmPy5ob3N0RWxlbWVudD8ucXVlcnlTZWxlY3RvcignLmV1aS1hdXRvY29tcGxldGVfX3BhbmVsJyk/LnF1ZXJ5U2VsZWN0b3JBbGwoJy5ldWktYXV0b2NvbXBsZXRlLW9wdGlvbicpWzBdPy5jbGllbnRIZWlnaHQgKyAxO1xuICAgICAgICByZXR1cm4gb3B0aW9uSGVpZ2h0IHx8IDQ4O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3B0aW9ucyh2YWx1ZTogc3RyaW5nLCBpc0l0ZW1zU29ydGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5uZXh0KGlzSXRlbXNTb3J0ZWQgPyAodGhpcy5vcmRlckFycmF5KHRoaXMuZmlsdGVyT3B0aW9ucyh2YWx1ZSksIHRoaXMuaXRlbXNTb3J0T3JkZXIpKSA6IHRoaXMuZmlsdGVyT3B0aW9ucyh2YWx1ZSkpO1xuXG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ3JvdXBlZE9wdGlvbnMsIGRpc3RpbmN0T3B0aW9uR3JvdXBzIH0gPSB0aGlzLmdyb3VwaW5nSGFuZGxlcih0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUsIHRoaXMuZ3JvdXBCeSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ3JvdXBlZE9wdGlvbnMubmV4dChncm91cGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmRpc3RpbmN0T3B0aW9uR3JvdXBzID0gZGlzdGluY3RPcHRpb25Hcm91cHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBvc2l0aW9uU3RyYXRlZ3koKTogUG9zaXRpb25TdHJhdGVneSB7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlcbiAgICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmlucHV0Q29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnModGhpcy5wcmVmZXJyZWRQb3NpdG9ucylcbiAgICAgICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhMb2NrZWRQb3NpdGlvbih0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNjcm9sbFN0cmF0ZWd5KCk6IFJlcG9zaXRpb25TY3JvbGxTdHJhdGVneSB7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHsgc2Nyb2xsVGhyb3R0bGU6IDEwIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyT3B0aW9ucyhpbnB1dFZhbHVlOiBzdHJpbmcpOiBFdWlBdXRvQ29tcGxldGVJdGVtW10ge1xuICAgICAgICBsZXQgZGF0YTogRXVpQXV0b0NvbXBsZXRlSXRlbVtdID0gW107XG4gICAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5hdXRvY29tcGxldGVEYXRhLmZpbHRlcigoYXV0b2NvbXBsZXRlSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGluZyA9PT0gJ2NvbnRhaW5zJyAmJlxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVJdGVtLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpbnB1dFZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkgIT09IC0xXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhdXRvY29tcGxldGVJdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hpbmcgPT09ICdzdGFydFdpdGgnICYmXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZUl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5zdWJzdHIoMCwgaW5wdXRWYWx1ZS50b1N0cmluZygpLmxlbmd0aCkgPT09IGlucHV0VmFsdWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0b2NvbXBsZXRlSXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmF1dG9jb21wbGV0ZURhdGE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNDaGlwcykge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGQgPT4gIXRoaXMuaXNEdXBsaWNhdGVWYWx1ZUFsbG93ZWQgPyAhdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQuc29tZShzZWxlY3RlZEl0ZW0gPT4gZC5pZCA9PT0gc2VsZWN0ZWRJdGVtLmlkKSA6IHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNJdGVtc1NvcnRlZCkge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMub3JkZXJBcnJheShkYXRhLCB0aGlzLml0ZW1zU29ydE9yZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwVG9DaGlwKGl0ZW1zOiBFdWlBdXRvQ29tcGxldGVJdGVtW10pOiBFdWlDaGlwW10ge1xuICAgICAgICBjb25zdCBjaGlwcyA9IGl0ZW1zLm1hcCgoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXVpQ2hpcCh7XG4gICAgICAgICAgICAgICAgaWQ6IHNlbGVjdGVkLmlkLFxuICAgICAgICAgICAgICAgIGV1aUludGVybmFsSWQ6IHNlbGVjdGVkLmV1aUludGVybmFsSWQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHNlbGVjdGVkLmxhYmVsLFxuICAgICAgICAgICAgICAgIHR5cGVDbGFzczogc2VsZWN0ZWQudHlwZUNsYXNzLFxuICAgICAgICAgICAgICAgIGlzT3V0bGluZTogc2VsZWN0ZWQuaXNPdXRsaW5lLFxuICAgICAgICAgICAgICAgIGlzUm91bmRlZDogc2VsZWN0ZWQuaXNSb3VuZGVkLFxuICAgICAgICAgICAgICAgIHNpemVDbGFzczogc2VsZWN0ZWQuc2l6ZUNsYXNzLFxuICAgICAgICAgICAgICAgIGlzUmVtb3ZhYmxlOiBzZWxlY3RlZC5pc1JlbW92YWJsZSxcbiAgICAgICAgICAgICAgICB0b29sdGlwTWVzc2FnZTogc2VsZWN0ZWQudG9vbHRpcD8udG9vbHRpcE1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgdG9vbHRpcDogbmV3IEV1aUNoaXBUb29sdGlwKHNlbGVjdGVkLnRvb2x0aXApLFxuICAgICAgICAgICAgICAgIGljb25DbGFzczogc2VsZWN0ZWQuaWNvbkNsYXNzLFxuICAgICAgICAgICAgICAgIGljb25TdmdOYW1lOiBzZWxlY3RlZC5pY29uU3ZnTmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5pc0NoaXBzU29ydGVkICYmIGNoaXBzLmxlbmd0aCA+IDAgPyAodGhpcy5vcmRlckFycmF5KGNoaXBzLCB0aGlzLmNoaXBzU29ydE9yZGVyKSBhcyBFdWlDaGlwW10pIDogY2hpcHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcmRlckFycmF5PFQgZXh0ZW5kcyB7IGxhYmVsOiBzdHJpbmc7IH0+KHRhYjogVFtdLCBzb3J0T3JkZXI6ICdBU0MnIHwgJ0RFU0MnKTogVFtdIHtcbiAgICAgICAgdGFiLnNvcnQoKGE6IFQsIGI6IFQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFPYmogPSBhLmxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBiT2JqID0gYi5sYWJlbC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc29ydE9yZGVyID09PSAnQVNDJykge1xuICAgICAgICAgICAgICAgIGlmIChhT2JqIDwgYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhT2JqID4gYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChhT2JqID4gYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhT2JqIDwgYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0YWI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBncm91cGluZ0hhbmRsZXIob3B0aW9uczogRXVpQXV0b0NvbXBsZXRlSXRlbVtdLCBncm91cEJ5OiBzdHJpbmcpOiBcbiAgICB7IGdyb3VwZWRPcHRpb25zOiB7IFtpZDogc3RyaW5nXTogeyBvcHRpb25zOiBFdWlBdXRvQ29tcGxldGVJdGVtW10sIGFuY2VzdG9yTGVuZ3RoOiBudW1iZXIgfSB9LCBkaXN0aW5jdE9wdGlvbkdyb3Vwczogc3RyaW5nW10gfSB7XG4gICAgICAgIGNvbnN0IGRpc3RpbmN0R3JvdXBzOiBzdHJpbmdbXSA9IHRoaXMuYXV0b2NvbXBsZXRlRGF0YS5tYXAoaXRlbSA9PiBncm91cEJ5LnNwbGl0KCcuJykucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAocHJldiA/IHByZXZbY3Vycl0gOiBudWxsKSwgaXRlbSB8fCBzZWxmKSk7XG4gICAgICAgIGNvbnN0IGRpc3RpbmN0T3B0aW9uR3JvdXBzOiBzdHJpbmdbXSA9IFsuLi5uZXcgU2V0KGRpc3RpbmN0R3JvdXBzKV0uc29ydCgoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IChhID4gYiA/IDEgOiAtMSkpO1xuICAgICAgICBjb25zdCBncm91cGVkT3B0aW9uczogeyBbaWQ6IHN0cmluZ106IHsgb3B0aW9uczogRXVpQXV0b0NvbXBsZXRlSXRlbVtdLCBhbmNlc3Rvckxlbmd0aDogbnVtYmVyIH0gfSA9IHt9O1xuICAgIFxuICAgICAgICBsZXQgYW5jZXN0b3JMZW5ndGggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGRpc3RpbmN0T3B0aW9uR3JvdXBzKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBncm91cEJ5LnNwbGl0KCcuJykucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAocHJldiA/IHByZXZbY3Vycl0gOiBudWxsKSwgb3B0aW9uIHx8IHNlbGYpID09PSBncm91cCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0l0ZW1zU29ydGVkKSB7XG4gICAgICAgICAgICAgICAgbyA9IHRoaXMub3JkZXJBcnJheShvLCB0aGlzLml0ZW1zU29ydE9yZGVyKSBhcyBFdWlBdXRvQ29tcGxldGVJdGVtW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdyb3VwZWRPcHRpb25zW2dyb3VwXSA9IHsgb3B0aW9uczogbywgYW5jZXN0b3JMZW5ndGggfTtcbiAgICAgICAgICAgIGFuY2VzdG9yTGVuZ3RoICs9IG8ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIHJldHVybiB7IGdyb3VwZWRPcHRpb25zLCBkaXN0aW5jdE9wdGlvbkdyb3VwcyB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWaXNpYmxlKG9yaWdpbjogSFRNTEVsZW1lbnQsIHNjcm9sbGFibGVQYXJlbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG9yaWdpblkgPSBvcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudFkgPSBNYXRoLmFicyhzY3JvbGxhYmxlUGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnkpO1xuICAgICAgICBjb25zdCBzY3JvbGxhYmxlUGFyZW50SGVpZ2h0ID0gc2Nyb2xsYWJsZVBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLSA1NTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG9yaWdpblkgPiAwICYmIG9yaWdpblkgPCBzY3JvbGxhYmxlUGFyZW50SGVpZ2h0KSB8fFxuICAgICAgICAgICAgKG9yaWdpblkgLSBzY3JvbGxhYmxlUGFyZW50WSA+IDAgJiYgb3JpZ2luWSA8IHNjcm9sbGFibGVQYXJlbnRZICsgc2Nyb2xsYWJsZVBhcmVudEhlaWdodClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlID0gPFQ+KGNoYW5nZT86IFQpOiB2b2lkID0+IHtcbiAgICAgICAgLyoqIGVtcHR5ICovXG4gICAgfTtcblxuICAgIHByaXZhdGUgb25Ub3VjaCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgLyoqIGVtcHR5ICovXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGBhcmlhLXJlcXVpcmVkYCBhdHRyaWJ1dGUgb24gdGhlIGlucHV0IGVsZW1lbnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUlucHV0QXJpYVJlcXVpcmVkQXR0cmlidXRlKGNvbnRyb2w6IE5nQ29udHJvbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc0FyaWFSZXF1aXJlZEF0dHJpYnV0ZSA9IGNvbnRyb2w/LmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59IiwiPGRpdiBjbGFzcz1cImV1aS1hdXRvY29tcGxldGVfX3dyYXBwZXJcIj5cbiAgICBAaWYgKGNoaXBzUG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBpZiAoaGFzQ2hpcHMpIHtcbiAgICAgICAgPGV1aS1jaGlwLWxpc3RcbiAgICAgICAgICAgIFtjaGlwc109XCJjaGlwc1wiXG4gICAgICAgICAgICBbaXNDaGlwc1JlbW92YWJsZV09XCJpc0NoaXBzUmVtb3ZhYmxlICYmICFpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgIFttYXhWaXNpYmxlQ2hpcHNDb3VudF09XCJtYXhWaXNpYmxlQ2hpcHNDb3VudFwiXG4gICAgICAgICAgICBbaXNNYXhWaXNpYmxlQ2hpcHNPcGVuZWRdPVwiaXNNYXhWaXNpYmxlQ2hpcHNPcGVuZWRcIlxuICAgICAgICAgICAgW2NoaXBzTGFiZWxUcnVuY2F0ZUNvdW50XT1cImNoaXBzTGFiZWxUcnVuY2F0ZUNvdW50XCJcbiAgICAgICAgICAgIFt0b2dnbGVMaW5rTW9yZUxhYmVsXT1cInRvZ2dsZUxpbmtNb3JlTGFiZWxcIlxuICAgICAgICAgICAgW3RvZ2dsZUxpbmtMZXNzTGFiZWxdPVwidG9nZ2xlTGlua0xlc3NMYWJlbFwiXG4gICAgICAgICAgICBbaXNDaGlwc0RyYWdBbmREcm9wXT1cImlzQ2hpcHNEcmFnQW5kRHJvcFwiXG4gICAgICAgICAgICBbZHJhZ0FuZERyb3BTb3VyY2VOYW1lXT1cImRyYWdBbmREcm9wU291cmNlTmFtZVwiXG4gICAgICAgICAgICBbZHJhZ0FuZERyb3BDb25uZWN0ZWRUb109XCJkcmFnQW5kRHJvcENvbm5lY3RlZFRvXCJcbiAgICAgICAgICAgIChjaGlwRHJvcCk9XCJvbkNoaXBEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAgICAgKGNoaXBEcmFnU3RhcnQpPVwib25DaGlwRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2hpcERyYWdSZWxlYXNlKT1cIm9uQ2hpcERyYWdSZWxlYXNlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjaGlwUmVtb3ZlKT1cIm9uQ2hpcFJlbW92ZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8ZXVpQ2hpcExpc3RBcHBlbmRDb250ZW50PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjaGlwc1Bvc2l0aW9uID09PSAnaW5zaWRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2V1aUNoaXBMaXN0QXBwZW5kQ29udGVudD5cbiAgICAgICAgPC9ldWktY2hpcC1saXN0PlxuICAgIH1cbiAgICBAaWYgKGNoaXBzUG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY29udHJvbD5cbiAgICA8ZGl2ICpuZ0lmPVwiIWhhc0NoaXBzIHx8IChoYXNDaGlwcyAmJiAhaXNSZWFkb25seSlcIiBjbGFzcz1cImV1aS1hdXRvY29tcGxldGVfX2lucHV0LWNvbnRhaW5lclwiICNpbnB1dENvbnRhaW5lclJlZj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIGV1aUlucHV0VGV4dFxuICAgICAgICAgICAgW2V1aUNsZWFyYWJsZV09XCIhaXNSZWFkb25seSAmJiAhaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICBbZXVpTG9hZGluZ109XCJpc0xvYWRpbmdcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImF1dG9jb21wbGV0ZUNvbnRyb2xcIlxuICAgICAgICAgICAgY2xhc3M9XCJldWktYXV0b2NvbXBsZXRlX19pbnB1dCB7eyBjbGFzc0xpc3QgfX1cIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciB9fVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNSZWFkb25seVwiXG4gICAgICAgICAgICAoY2xlYXIpPVwib25DbGVhcigpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvcGVuUGFuZWwoKVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygpXCJcbiAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXNPcGVuID8gJ2V1aS1hdXRvY29tcGxldGVfX3BhbmVsJyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhdXRvY29tcGxldGVDb250cm9sLnZhbHVlPy5sZW5ndGggPiAwID8gYXV0b2NvbXBsZXRlQ29udHJvbC52YWx1ZSA6ICdJbnB1dCBmaWVsZCB3aXRob3V0IHZhbHVlJ1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlcXVpcmVkXT1cImhhc0FyaWFSZXF1aXJlZEF0dHJpYnV0ZSA/ICd0cnVlJyA6IG51bGxcIlxuICAgICAgICAgICAgYXJpYS1hdXRvY29tcGxldGU9XCJib3RoXCJcbiAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgLz5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVQb3J0YWxDb250ZW50PlxuICAgIDxkaXZcbiAgICAgICAgaWQ9XCJldWktYXV0b2NvbXBsZXRlX19wYW5lbFwiXG4gICAgICAgIGNsYXNzPVwiZXVpLWF1dG9jb21wbGV0ZV9fcGFuZWxcIlxuICAgICAgICBbQHBhbmVsQW5pbWF0aW9uXT1cImlzT3BlbiA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiQXV0b2NvbXBsZXRlIHBhbmVsXCI+XG4gICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICAgICN2aXJ0dWFsU2Nyb2xsaW5nXG4gICAgICAgICAgICBbaXRlbVNpemVdPVwiaXRlbVNpemVcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIG1pbkJ1ZmZlclB4PVwiNTAwXCJcbiAgICAgICAgICAgIG1heEJ1ZmZlclB4PVwiNzUwXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cImNka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCArICdweCdcIj5cbiAgICAgICAgICAgIEBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgICAgIEBmb3IgKGRpc3RpbmN0T3B0aW9uR3JvdXAgb2YgZGlzdGluY3RPcHRpb25Hcm91cHM7IGxldCBpID0gJGluZGV4OyB0cmFjayBkaXN0aW5jdE9wdGlvbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKChncm91cGVkT3B0aW9ucyB8IGFzeW5jKVtkaXN0aW5jdE9wdGlvbkdyb3VwXS5vcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24tZ3JvdXAgW2xhYmVsXT1cImRpc3RpbmN0T3B0aW9uR3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1hdXRvY29tcGxldGUtb3B0aW9uLWdyb3VwX19sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvY29tcGxldGVPcHRHcm91cFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImF1dG9jb21wbGV0ZU9wdEdyb3VwVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IHsgbGFiZWw6IGRpc3RpbmN0T3B0aW9uR3JvdXAgfSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRpc3RpbmN0T3B0aW9uR3JvdXAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktYXV0b2NvbXBsZXRlLW9wdGlvbi1ncm91cF9fb3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYXV0b2NvbXBsZXRlT3B0aW9uIG9mIChncm91cGVkT3B0aW9ucyB8IGFzeW5jKVtkaXN0aW5jdE9wdGlvbkdyb3VwXS5vcHRpb25zOyBsZXQgaiA9ICRpbmRleDsgdHJhY2sgYXV0b2NvbXBsZXRlT3B0aW9uLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1hdXRvY29tcGxldGUtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzR3JvdXBJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0FjdGl2ZV09XCJzZWxlY3RlZE9wdGlvbkluZGV4ID09PSAoZ3JvdXBlZE9wdGlvbnMgfCBhc3luYylbZGlzdGluY3RPcHRpb25Hcm91cF0uYW5jZXN0b3JMZW5ndGggKyBqXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImF1dG9jb21wbGV0ZU9wdGlvbi5pc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2V1aVZhcmlhbnRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uLnR5cGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk9wdGlvblNlbGVjdGVkKGF1dG9jb21wbGV0ZU9wdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogYXV0b2NvbXBsZXRlT3B0aW9uIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvY29tcGxldGVPcHRpb24uaWNvbkNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7eyBhdXRvY29tcGxldGVPcHRpb24uaWNvbkNsYXNzIH19XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoYXV0b2NvbXBsZXRlT3B0aW9uLmljb25TdmdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBpY29uPVwie3sgYXV0b2NvbXBsZXRlT3B0aW9uLmljb25TdmdOYW1lIH19XCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdXRvY29tcGxldGVPcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGV1aS1hdXRvY29tcGxldGUtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICpjZGtWaXJ0dWFsRm9yPVwibGV0IGF1dG9jb21wbGV0ZU9wdGlvbiBvZiBhdXRvY29tcGxldGVPcHRpb25zIHwgYXN5bmM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IG9wdGlvbnNUcmFja0J5Rm5cIlxuICAgICAgICAgICAgICAgICAgICBbaXNBY3RpdmVdPVwic2VsZWN0ZWRPcHRpb25JbmRleCA9PT0gaVwiXG4gICAgICAgICAgICAgICAgICAgIFtpc0Rpc2FibGVkXT1cImF1dG9jb21wbGV0ZU9wdGlvbi5pc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJhdXRvY29tcGxldGVPcHRpb24uaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtldWlWYXJpYW50XT1cImF1dG9jb21wbGV0ZU9wdGlvbi50eXBlQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25PcHRpb25TZWxlY3RlZChhdXRvY29tcGxldGVPcHRpb24pXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGF1dG9jb21wbGV0ZU9wdGlvbiB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYXV0b2NvbXBsZXRlT3B0aW9uLmljb25DbGFzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwie3sgYXV0b2NvbXBsZXRlT3B0aW9uLmljb25DbGFzcyB9fVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGF1dG9jb21wbGV0ZU9wdGlvbi5pY29uU3ZnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmcgaWNvbj1cInt7IGF1dG9jb21wbGV0ZU9wdGlvbi5pY29uU3ZnTmFtZSB9fVwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAge3sgYXV0b2NvbXBsZXRlT3B0aW9uLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2V1aS1hdXRvY29tcGxldGUtb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICA8L2Rpdj4gIFxuPC9uZy10ZW1wbGF0ZT4iXX0=
811
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktYXV0b2NvbXBsZXRlL2V1aS1hdXRvY29tcGxldGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLWF1dG9jb21wbGV0ZS9ldWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUtqQixXQUFXLEVBR1gsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixJQUFJLEVBQ0osUUFBUSxFQUVSLGVBQWUsRUFFZixnQkFBZ0IsRUFDaEIsZUFBZSxHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBZ0MsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0csT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsc0JBQXNCLEdBQzlCLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFJN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBdUI3RCxNQUFNLE9BQU8sd0JBQXdCO0lBQ2pD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QyxvQkFBb0I7Z0JBRUQscUJBQXFCO3NCQUF4RCxTQUFTO3VCQUFDLHVCQUF1QjtnQkFDRixpQkFBaUI7c0JBQWhELFNBQVM7dUJBQUMsbUJBQW1CO2dCQUNDLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0I7Z0JBQ2EsS0FBSztzQkFBOUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUU5QixVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgT25Jbml0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBIb3N0QmluZGluZyxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIFZpZXdDb250YWluZXJSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE91dHB1dCxcbiAgICBTZWxmLFxuICAgIE9wdGlvbmFsLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBudW1iZXJBdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtQ29udHJvbFN0YXR1cywgTmdDb250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZpbHRlciwgZnJvbUV2ZW50LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBDb25uZWN0aW9uUG9zaXRpb25QYWlyLCBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3lPcmlnaW4sIE92ZXJsYXksIE92ZXJsYXlSZWYsIFBvc2l0aW9uU3RyYXRlZ3ksIFJlcG9zaXRpb25TY3JvbGxTdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSwgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBTY3JvbGxEaXNwYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBMaXZlQW5ub3VuY2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcblxuaW1wb3J0IHsgRXVpQXBwU2hlbGxTZXJ2aWNlIH0gZnJvbSAnQGV1aS9jb3JlJztcbmltcG9ydCB7IEV1aUNoaXBEcmFnRHJvcCB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9ldWktY2hpcC1saXN0JztcbmltcG9ydCB7IEV1aUNoaXAsIEV1aUNoaXBUb29sdGlwIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2V1aS1jaGlwJztcbmltcG9ydCB7IEV1aVRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnQGV1aS9jb21wb25lbnRzL2RpcmVjdGl2ZXMnO1xuXG5pbXBvcnQgeyBFdWlBdXRvQ29tcGxldGVJdGVtIH0gZnJvbSAnLi9tb2RlbHMvZXVpLWF1dG9jb21wbGV0ZS1pdGVtLm1vZGVsJztcbmltcG9ydCB7IHBhbmVsQW5pbWF0aW9uIH0gZnJvbSAnLi9hbmltYXRpb25zL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQmFzZVN0YXRlc0RpcmVjdGl2ZSB9IGZyb20gJ0BldWkvY29tcG9uZW50cy9zaGFyZWQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc2VsZWN0b3I6ICdldWktYXV0b2NvbXBsZXRlLCBpbnB1dFtldWlBdXRvY29tcGxldGVdJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGFuaW1hdGlvbnM6IFtwYW5lbEFuaW1hdGlvbl0sXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBCYXNlU3RhdGVzRGlyZWN0aXZlLFxuICAgICAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICAgICAgJ2V1aVNlY29uZGFyeScsXG4gICAgICAgICAgICAgICAgJ2V1aVN1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICdldWlJbmZvJyxcbiAgICAgICAgICAgICAgICAnZXVpV2FybmluZycsXG4gICAgICAgICAgICAgICAgJ2V1aURhbmdlcicsXG4gICAgICAgICAgICAgICAgJ2V1aUFjY2VudCcsXG4gICAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEV1aUF1dG9jb21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0YXRlc0RpcmVjdGl2ZS5nZXRDc3NDbGFzc2VzKCdldWktYXV0b2NvbXBsZXRlJyksXG4gICAgICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS0tY2hpcHMtcG9zaXRpb24tJyArIHRoaXMuY2hpcHNQb3NpdGlvbixcbiAgICAgICAgXVxuICAgICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAgICAgLnRyaW0oKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBpbnB1dElkOiBzdHJpbmc7XG4gICAgQElucHV0KCkgYXV0b2NvbXBsZXRlRGF0YTogRXVpQXV0b0NvbXBsZXRlSXRlbVtdID0gW107XG4gICAgQElucHV0KCkgdmlzaWJsZU9wdGlvbnMgPSA1O1xuICAgIEBJbnB1dCgpIG1hdGNoaW5nOiAnc3RhcnRXaXRoJyB8ICdjb250YWlucycgPSAnY29udGFpbnMnO1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XG4gICAgQElucHV0KCkgYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkOiBFdWlBdXRvQ29tcGxldGVJdGVtW10gPSBbXTtcbiAgICBASW5wdXQoKSBjaGlwc1NvcnRPcmRlcjogJ0FTQycgfCAnREVTQycgPSAnQVNDJztcbiAgICBASW5wdXQoKSBpdGVtc1NvcnRPcmRlcjogJ0FTQycgfCAnREVTQycgPSAnQVNDJztcbiAgICBASW5wdXQoKSBjaGlwc1Bvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nIHwgJ2luc2lkZScgPSAndG9wJztcbiAgICBASW5wdXQoKSBncm91cEJ5OiBzdHJpbmc7XG4gICAgQElucHV0KCkgdG9nZ2xlTGlua01vcmVMYWJlbDogc3RyaW5nID0gbnVsbDtcbiAgICBASW5wdXQoKSB0b2dnbGVMaW5rTGVzc0xhYmVsOiBzdHJpbmcgPSBudWxsO1xuICAgIEBJbnB1dCgpIGNsYXNzTGlzdDogc3RyaW5nID0gbnVsbDtcbiAgICBASW5wdXQoKSBwYW5lbFdpZHRoOiBzdHJpbmcgfCBudW1iZXI7XG4gICAgQElucHV0KCkgZHJhZ0FuZERyb3BTb3VyY2VOYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZHJhZ0FuZERyb3BDb25uZWN0ZWRUbzogc3RyaW5nW10gPSBbXTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0ZyZWVWYWx1ZUFsbG93ZWQgPSB0cnVlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc1JlYWRvbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzTG9hZGluZyA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNDaGlwcyA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0FzeW5jID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ2hpcHNTb3J0ZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNJdGVtc1NvcnRlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0NoaXBzUmVtb3ZhYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNEdXBsaWNhdGVWYWx1ZUFsbG93ZWQgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNBZGRPbkJsdXIgID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzRm9yY2VTZWxlY3Rpb24gPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBtYXhWaXNpYmxlQ2hpcHNDb3VudCA9IG51bGw7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgY2hpcHNMYWJlbFRydW5jYXRlQ291bnQgPSBudWxsO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc01heFZpc2libGVDaGlwc09wZW5lZCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0NoaXBzRHJhZ0FuZERyb3AgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBhdXRvY29tcGxldGVPcHRpb25zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFdWlBdXRvQ29tcGxldGVJdGVtW10+KHRoaXMuYXV0b2NvbXBsZXRlRGF0YSk7XG4gICAgcHVibGljIHNlbGVjdGVkT3B0aW9uSW5kZXggPSAwO1xuICAgIHB1YmxpYyBhdXRvY29tcGxldGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycpO1xuICAgIHB1YmxpYyBpc0Rpc2FibGVkID0gZmFsc2U7XG4gICAgcHVibGljIGNoaXBzOiBFdWlDaGlwW10gPSBbXTtcbiAgICBwdWJsaWMgZGlzdGluY3RPcHRpb25Hcm91cHM6IHN0cmluZ1tdO1xuICAgIHB1YmxpYyBncm91cGVkT3B0aW9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBbaWQ6IHN0cmluZ106IHsgb3B0aW9uczogRXVpQXV0b0NvbXBsZXRlSXRlbVtdLCBhbmNlc3Rvckxlbmd0aDogbnVtYmVyIH0gfT4oe30pO1xuICAgIHB1YmxpYyBnbG9iYWxPcHRpb25JbmRleCA9IDA7XG4gICAgcHVibGljIGl0ZW1TaXplID0gNDA7XG4gICAgcHVibGljIGF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx7ICRpbXBsaWNpdDogRXVpQXV0b0NvbXBsZXRlSXRlbSB9PjtcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlT3B0R3JvdXBUZW1wbGF0ZTogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IHsgbGFiZWw6IHN0cmluZyB9IH0+O1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihFdWlUZW1wbGF0ZURpcmVjdGl2ZSkgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8RXVpVGVtcGxhdGVEaXJlY3RpdmU+O1xuXG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGVQb3J0YWxDb250ZW50JykgdGVtcGxhdGVQb3J0YWxDb250ZW50OiBUZW1wbGF0ZVJlZjxFbGVtZW50UmVmPjtcbiAgICBAVmlld0NoaWxkKCdpbnB1dENvbnRhaW5lclJlZicpIGlucHV0Q29udGFpbmVyUmVmOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ3ZpcnR1YWxTY3JvbGxpbmcnKSB2aXJ0dWFsU2Nyb2xsaW5nOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgaW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgICBAT3V0cHV0KCkgcGFuZWxDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcGFuZWxPcGVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBpbnB1dEZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBpbnB1dEJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGNsZWFyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aUF1dG9Db21wbGV0ZUl0ZW1bXT4oKTtcbiAgICBAT3V0cHV0KCkgaXRlbUFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQXV0b0NvbXBsZXRlSXRlbT4oKTtcbiAgICBAT3V0cHV0KCkgaXRlbVJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQXV0b0NvbXBsZXRlSXRlbT4oKTtcbiAgICBAT3V0cHV0KCkgaW5wdXRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgY2hpcERyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8RXVpQ2hpcERyYWdEcm9wPigpO1xuICAgIEBPdXRwdXQoKSBjaGlwRHJhZ1JlbGVhc2UgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aUNoaXBEcmFnRHJvcD4oKTtcbiAgICBAT3V0cHV0KCkgY2hpcERyb3AgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aUNoaXBEcmFnRHJvcD4oKTtcblxuICAgIHByb3RlY3RlZCBoYXNBcmlhUmVxdWlyZWRBdHRyaWJ1dGU6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBvdmVybGF5UmVmOiBPdmVybGF5UmVmO1xuICAgIHByaXZhdGUgaXNPcGVuJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHByaXZhdGUgdGVtcGxhdGVQb3J0YWw6IFRlbXBsYXRlUG9ydGFsPHVua25vd24+O1xuICAgIHByaXZhdGUga2V5Ym9hcmRPcHRpb25TZWxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBhZGRPbkJsdXJDbGlja0hhbmRsZXJTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBpc0ZvcmNlU2VsZWN0aW9uU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUga2V5Ym9hcmRTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgcHJpdmF0ZSBhdXRvY29tcGxldGVPcHRpb25zU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIHByaXZhdGUgc2Nyb2xsRGlzcGF0Y2hlclN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIHdpbmRvd1Jlc2l6ZVN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICBwcml2YXRlIHZhbHVlOiBFdWlBdXRvQ29tcGxldGVJdGVtIHwgRXVpQXV0b0NvbXBsZXRlSXRlbVtdID0gbnVsbDtcbiAgICBwcml2YXRlIFRPUCA9IG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ3RvcCcgfSwgeyBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICdib3R0b20nIH0sIDAsIDAsIFtcbiAgICAgICAgJ2V1aS1hdXRvY29tcGxldGUtcG9zaXRpb24nLFxuICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS1wb3NpdGlvbi0tdG9wJyxcbiAgICBdKTtcbiAgICBwcml2YXRlIEJPVFRPTSA9IG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2JvdHRvbScgfSwgeyBvdmVybGF5WDogJ3N0YXJ0Jywgb3ZlcmxheVk6ICd0b3AnIH0sIDAsIDAsIFtcbiAgICAgICAgJ2V1aS1hdXRvY29tcGxldGUtcG9zaXRpb24nLFxuICAgICAgICAnZXVpLWF1dG9jb21wbGV0ZS1wb3NpdGlvbi0tYm90dG9tJyxcbiAgICBdKTtcbiAgICBwcml2YXRlIHByZWZlcnJlZFBvc2l0b25zOiBDb25uZWN0aW9uUG9zaXRpb25QYWlyW10gPSBbdGhpcy5CT1RUT00sIHRoaXMuVE9QXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBsaXZlQW5ub3VuY2VyOiBMaXZlQW5ub3VuY2VyLFxuICAgICAgICBwcml2YXRlIHNjcm9sbERpc3BhdGNoZXI6IFNjcm9sbERpc3BhdGNoZXIsXG4gICAgICAgIHByaXZhdGUgZXVpQXBwU2hlbGxTZXJ2aWNlOiBFdWlBcHBTaGVsbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYmFzZVN0YXRlc0RpcmVjdGl2ZTogQmFzZVN0YXRlc0RpcmVjdGl2ZSxcbiAgICAgICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRyb2w6IE5nQ29udHJvbCxcbiAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoYzogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoYyAmJiBjLmF1dG9jb21wbGV0ZURhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjICYmIGMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkICYmIHRoaXMuaGFzQ2hpcHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkID0gYy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQuY3VycmVudFZhbHVlLm1hcCgoczogRXVpQXV0b0NvbXBsZXRlSXRlbSkgPT4gKHsgLi4ucywgZXVpSW50ZXJuYWxJZDogdXVpZC52NCgpIH0pKTtcbiAgICAgICAgICAgIHRoaXMuY2hpcHMgPSB0aGlzLm1hcFRvQ2hpcCh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCk7XG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvbnMoJycsIHRoaXMuaXNJdGVtc1NvcnRlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZm9jdXMnKVxuXG4gICAgICAgIHRoaXMuZXVpQXBwU2hlbGxTZXJ2aWNlLnN0YXRlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pdGVtU2l6ZSA9IHN0YXRlLmFwcEJhc2VGb250U2l6ZSA9PT0gJzE2cHgnID8gNDAgOiAzNTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dEFyaWFSZXF1aXJlZEF0dHJpYnV0ZSh0aGlzLmNvbnRyb2wpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoc3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5zZXRFcnJvcnModGhpcy5jb250cm9sLmVycm9ycyk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5jb250cm9sLnVudG91Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dEFyaWFSZXF1aXJlZEF0dHJpYnV0ZSh0aGlzLmNvbnRyb2wpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCA9IDA7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUGFuZWwoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKHZhbHVlLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDaGlwcykge1xuICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZC5sZW5ndGggPiAwID8gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQgOiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kSXRlbSA9IHRoaXMuYXV0b2NvbXBsZXRlRGF0YS5maW5kKChkKSA9PiBkLmxhYmVsLnRvTG93ZXJDYXNlKCkudHJpbSgpID09PSB2YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZShmb3VuZEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPyB0aGlzLm9uQ2hhbmdlKHsgbGFiZWw6IHZhbHVlIH0pIDogdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbnB1dENoYW5nZS5lbWl0KHZhbHVlIGFzIHN0cmluZyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5pc0FzeW5jKSB7XG4gICAgICAgICAgICB0aGlzLnNldE9wdGlvbnMoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/ICcnIDogdGhpcy52YWx1ZT8ubGFiZWwsIHRoaXMuaXNJdGVtc1NvcnRlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVQb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy50ZW1wbGF0ZVBvcnRhbENvbnRlbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZik7XG5cbiAgICAgICAgdGhpcy50ZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uZ2V0VHlwZSgpID09PSAnZHJvcGRvd25PcHRpb24nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbS5nZXRUeXBlKCkgPT09ICdkcm9wZG93bk9wdEdyb3VwJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0R3JvdXBUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5rZXlib2FyZE9wdGlvblNlbGVjdG9ySGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmFkZE9uQmx1ckNsaWNrSGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy53aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBnZXQgY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9uR3JvdXBzOiBzdHJpbmdbXSA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZVxuICAgICAgICAgICAgICAgIC5tYXAoaXRlbSA9PiB0aGlzLmdyb3VwQnkuc3BsaXQoJy4nKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IChwcmV2ID8gcHJldltjdXJyXSA6IG51bGwpLCBpdGVtIHx8IHNlbGYpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbkdyb3VwOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb24pID0+IHRoaXMuZ3JvdXBCeS5zcGxpdCgnLicpLnJlZHVjZSgocHJldiwgY3VycikgPT4gKHByZXYgPyBwcmV2W2N1cnJdIDogbnVsbCksIG9wdGlvbiB8fCBzZWxmKSA9PT0gb3B0aW9uR3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChvcHRpb25Hcm91cDogc3RyaW5nLCBpbmRleCwgYXJyYXk6IHN0cmluZ1tdKSA9PiBhcnJheS5pbmRleE9mKG9wdGlvbkdyb3VwKSA9PT0gaW5kZXgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlLmxlbmd0aCA+PSB0aGlzLnZpc2libGVPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZU9wdGlvbnMgKiB0aGlzLml0ZW1TaXplO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxJdGVtcyA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5sZW5ndGggKyBmaWx0ZXJlZE9wdGlvbkdyb3Vwcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChzY3JvbGxJdGVtcyA+IHRoaXMudmlzaWJsZU9wdGlvbnMgPyB0aGlzLnZpc2libGVPcHRpb25zIDogc2Nyb2xsSXRlbXMpICogdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUubGVuZ3RoID49IHRoaXMudmlzaWJsZU9wdGlvbnMgP1xuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJsZU9wdGlvbnMgKiB0aGlzLml0ZW1TaXplIDpcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUubGVuZ3RoICogdGhpcy5pdGVtU2l6ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzT3BlbiQudmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IGhhc09wdGlvbnNSZXN1bHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3BlblBhbmVsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuICYmICF0aGlzLmlzUmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclN1YnNjcmlwdGlvbiA9IHRoaXMuc2Nyb2xsRGlzcGF0Y2hlclxuICAgICAgICAgICAgICAgIC5hbmNlc3RvclNjcm9sbGVkKHRoaXMuaW5wdXQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDZGtTY3JvbGxhYmxlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVQYXJlbnQgPSBldmVudCA/IGV2ZW50LmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50IDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgc2Nyb2xsYWJsZVBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMud2luZG93UmVzaXplU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5UmVmICYmIHRoaXMub3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpICYmICF0aGlzLnBhbmVsV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVTaXplKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5pbnB1dENvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuZ2V0UG9zaXRpb25TdHJhdGVneSgpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLmdldFNjcm9sbFN0cmF0ZWd5KCk7XG5cbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIGhhc0JhY2tkcm9wOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMucGFuZWxXaWR0aCA/IHRoaXMucGFuZWxXaWR0aCA6IHRoaXMuaW5wdXRDb250YWluZXJSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBbJ2V1aS1hdXRvY29tcGxldGVfX3BhbmVsLWNvbnRhaW5lcicsIHRoaXMuY2xhc3NMaXN0XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaCh0aGlzLnRlbXBsYXRlUG9ydGFsKTtcblxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgICAgICAgICAgLm91dHNpZGVQb2ludGVyRXZlbnRzKClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFyRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ldWktc3ByaXRlLWV1aS1jbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0VsZW1lbnRPckNoaWxkT2ZFbGVtZW50ID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwYXJlbnRFbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gcGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0NsZWFyYWJsZUJ1dHRvbiA9IHRhcmdldEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdldWktc3ByaXRlLWV1aS1jbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0lucHV0ID0gdGFyZ2V0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aS1hdXRvY29tcGxldGVfX2lucHV0Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NsZWFyYWJsZUJ1dHRvbiAmJiAhaXNJbnB1dCAmJiAhaXNFbGVtZW50T3JDaGlsZE9mRWxlbWVudCh0YXJnZXRFbGVtZW50LCBjbGVhckVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NsZWFyYWJsZUJ1dHRvbiAmJiAhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW5wdXQgJiYgIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsYXNzTGlzdC5jb250YWlucygnZXVpLWF1dG9jb21wbGV0ZV9faW5wdXQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmXG4gICAgICAgICAgICAgICAgLmtleWRvd25FdmVudHMoKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChrZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmtleT8udG9Mb3dlckNhc2UoKSA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9uc1N1YnNjcmlwdGlvbiA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5zdWJzY3JpYmUoKGF1dG9jb21wbGV0ZU9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYucmVtb3ZlUGFuZWxDbGFzcygnZXVpLWF1dG9jb21wbGV0ZV9fcGFuZWwtY29udGFpbmVyLS1uby1vcHRpb24nKTtcbiAgICAgICAgICAgICAgICBpZiAoYXV0b2NvbXBsZXRlT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmFkZFBhbmVsQ2xhc3MoJ2V1aS1hdXRvY29tcGxldGVfX3BhbmVsLWNvbnRhaW5lci0tbm8tb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxpdmVBbm5vdW5jZXJTb3VyY2UgPSB0aGlzLmdyb3VwQnkgPyBPYmplY3QudmFsdWVzKHRoaXMuZ3JvdXBlZE9wdGlvbnMudmFsdWUpLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucykgOiB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWU7XG5cbiAgICAgICAgICAgIHRoaXMubGl2ZUFubm91bmNlci5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmFubm91bmNlKGxpdmVBbm5vdW5jZXJTb3VyY2VbMF0/LmxhYmVsKTtcblxuICAgICAgICAgICAgbGV0IHZpc2libGVSYW5nZVN0YXJ0ID0gMDtcbiAgICAgICAgICAgIGxldCB2aXNpYmxlUmFuZ2VFbmQgPSB0aGlzLnZpc2libGVPcHRpb25zIC0gMTtcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmRPcHRpb25TZWxlY3RvckhhbmRsZXJTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoZTogS2V5Ym9hcmRFdmVudCkgPT4gZS5jb2RlID09PSAnQXJyb3dEb3duJyB8fCBlLmNvZGUgPT09ICdBcnJvd1VwJyB8fCBlLmNvZGUgPT09ICdFbnRlcicgfHwgZS5jb2RlID09PSAnVGFiJyksXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93RG93bicgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4IDwgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXZlQW5ub3VuY2VyU291cmNlID0gdGhpcy5ncm91cEJ5ID8gT2JqZWN0LnZhbHVlcyh0aGlzLmdyb3VwZWRPcHRpb25zLnZhbHVlKS5mbGF0TWFwKGdyb3VwID0+IGdyb3VwLm9wdGlvbnMpIDogdGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saXZlQW5ub3VuY2VyLmFubm91bmNlKGxpdmVBbm5vdW5jZXJTb3VyY2VbdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4XS5sYWJlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS5jb2RlID09PSAnQXJyb3dVcCcgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGl2ZUFubm91bmNlclNvdXJjZSA9IHRoaXMuZ3JvdXBCeSA/IE9iamVjdC52YWx1ZXModGhpcy5ncm91cGVkT3B0aW9ucy52YWx1ZSkuZmxhdE1hcChncm91cCA9PiBncm91cC5vcHRpb25zKSA6IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUFubm91bmNlci5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUFubm91bmNlci5hbm5vdW5jZShsaXZlQW5ub3VuY2VyU291cmNlW3RoaXMuc2VsZWN0ZWRPcHRpb25JbmRleF0ubGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjSW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggLSB0aGlzLnZpcnR1YWxTY3JvbGxpbmc/LmdldFJlbmRlcmVkUmFuZ2UoKS5zdGFydDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93RG93bicgJiYgY0luZGV4ID4gdmlzaWJsZVJhbmdlRW5kIC0gdmlzaWJsZVJhbmdlU3RhcnQgLSB2aXNpYmxlUmFuZ2VFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmJPcHRpb25zR3JvdXAgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5iT3B0aW9ucyA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy52YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmdyb3VwZWRPcHRpb25zLnZhbHVlKS5mb3JFYWNoKGdyb3VwZWRPcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXBlZE9wdGlvbnMudmFsdWVbZ3JvdXBlZE9wdGlvbl0ub3B0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4ID4gdGhpcy5ncm91cGVkT3B0aW9ucy52YWx1ZVtncm91cGVkT3B0aW9uXS5hbmNlc3Rvckxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYk9wdGlvbnNHcm91cCArKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggKyBuYk9wdGlvbnNHcm91cCkgPiB2aXNpYmxlUmFuZ2VFbmQgJiYgdmlzaWJsZVJhbmdlRW5kIDw9IChuYk9wdGlvbnMgKyBuYk9wdGlvbnNHcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsaW5nLnNjcm9sbFRvSW5kZXgoKHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCArIG5iT3B0aW9uc0dyb3VwKSAtIHZpc2libGVSYW5nZUVuZCArIHZpc2libGVSYW5nZVN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJhbmdlU3RhcnQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZVJhbmdlRW5kKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ0Fycm93VXAnICYmIGNJbmRleCA8IHZpc2libGVSYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCA8IHZpc2libGVSYW5nZVN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlydHVhbFNjcm9sbGluZy5zY3JvbGxUb0luZGV4KHRoaXMuc2VsZWN0ZWRPcHRpb25JbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSYW5nZVN0YXJ0LS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGVSYW5nZUVuZC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNPcHRpb25zUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBbXS5jb25jYXQoLi4uT2JqZWN0LnZhbHVlcyh0aGlzLmdyb3VwZWRPcHRpb25zLnZhbHVlKS5tYXAoZ3JvdXAgPT4gZ3JvdXAub3B0aW9ucykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk9wdGlvblNlbGVjdGVkKG9wdGlvbnNbdGhpcy5zZWxlY3RlZE9wdGlvbkluZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uT3B0aW9uU2VsZWN0ZWQodGhpcy5hdXRvY29tcGxldGVPcHRpb25zLnZhbHVlW3RoaXMuc2VsZWN0ZWRPcHRpb25JbmRleF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0NoaXBzICYmIHRoaXMuaXNGcmVlVmFsdWVBbGxvd2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY29kZSA9PT0gJ1RhYicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNBZGRPbkJsdXIgICYmIHRoaXMuaGFzQ2hpcHMgJiYgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnZhbHVlPy50cmltKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGQodGhpcy5hdXRvY29tcGxldGVDb250cm9sLnZhbHVlLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNGb3JjZVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wuc2V0VmFsdWUobnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0aGlzLmFkZE9uQmx1ckNsaWNrSGFuZGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNBZGRPbkJsdXIgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRPbkJsdXJDbGlja0hhbmRsZXJTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aS1hdXRvY29tcGxldGUtb3B0aW9uJykgJiYgdGhpcy5oYXNDaGlwcyAmJiB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWU/LnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZCh0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWUudHJpbSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRm9yY2VTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuY29udGFpbnMoJ2V1aS1hdXRvY29tcGxldGUtb3B0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnNldFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmlzT3BlbiQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucGFuZWxPcGVuLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbG9zZVBhbmVsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uSW5kZXggPSAwO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSBudWxsO1xuICAgICAgICB0aGlzLmlzT3BlbiQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmtleWJvYXJkT3B0aW9uU2VsZWN0b3JIYW5kbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9uc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy53aW5kb3dSZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5wYW5lbENsb3NlLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PcHRpb25TZWxlY3RlZChlOiBFdWlBdXRvQ29tcGxldGVJdGVtKTogdm9pZCB7XG4gICAgICAgIGlmICghZS5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDaGlwcykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkLnB1c2goeyAuLi5lLCBldWlJbnRlcm5hbElkOiB1dWlkLnY0KCkgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCA9IFtlXTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBlLmxhYmVsO1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5zZXRWYWx1ZShlLmxhYmVsKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHRoaXMuYWRkT25CbHVyQ2xpY2tIYW5kbGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmlzRm9yY2VTZWxlY3Rpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICBcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICAgICAgdGhpcy5pdGVtQWRkLmVtaXQoZSk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhZGQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIXZhbHVlIHx8ICghdGhpcy5pc0ZyZWVWYWx1ZUFsbG93ZWQgJiYgIXRoaXMuYXV0b2NvbXBsZXRlRGF0YS5maW5kKGEgPT4gYS5sYWJlbCA9PT0gdmFsdWUudHJpbSgpKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBpZiAoIXRoaXMuaXNEdXBsaWNhdGVWYWx1ZUFsbG93ZWQgJiYgdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQuc29tZShzID0+IHMubGFiZWwudHJpbSgpID09PSB2YWx1ZS50cmltKCkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuYXV0b2NvbXBsZXRlRGF0YS5maW5kKGEgPT4gYS5sYWJlbCA9PT0gdmFsdWUudHJpbSgpKSB8fCB7IGxhYmVsOiB2YWx1ZS50cmltKCksIGV1aUludGVybmFsSWQ6IHV1aWQudjQoKSB9O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQucHVzaChpdGVtKTtcbiAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG5cbiAgICAgICAgdGhpcy5hZGRPbkJsdXJDbGlja0hhbmRsZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pc0ZvcmNlU2VsZWN0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLml0ZW1BZGQuZW1pdChpdGVtKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3B0aW9uc1RyYWNrQnlGbihpbmRleDogbnVtYmVyLCBpdGVtOiBFdWlBdXRvQ29tcGxldGVJdGVtKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IEV1aUF1dG9Db21wbGV0ZUl0ZW0gfCBFdWlBdXRvQ29tcGxldGVJdGVtW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0NoaXBzKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCA9IHZhbHVlID8gKFsuLi52YWx1ZSBhcyBFdWlBdXRvQ29tcGxldGVJdGVtW11dKSA6IFtdO1xuICAgICAgICAgICAgdGhpcy5jaGlwcyA9IHRoaXMubWFwVG9DaGlwKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucygnJywgdGhpcy5pc0l0ZW1zU29ydGVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlID8gKHZhbHVlIGFzIEV1aUF1dG9Db21wbGV0ZUl0ZW0pLmxhYmVsIDogbnVsbCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IHZhbHVlID8gKHZhbHVlIGFzIEV1aUF1dG9Db21wbGV0ZUl0ZW0pLmxhYmVsIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9ucyhpbnB1dFZhbHVlLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICBpc0Rpc2FibGVkID8gdGhpcy5hdXRvY29tcGxldGVDb250cm9sLmRpc2FibGUoKSA6IHRoaXMuYXV0b2NvbXBsZXRlQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaCA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyLmVtaXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IFxuICAgICAgICAgICAgICAgICAgICAvXlthLXpBLVowLTldJC8udGVzdChldmVudC5rZXkpIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleSA9PT0gJ1NwYWNlJyB8fFxuICAgICAgICAgICAgICAgICAgICBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScsXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3BlblBhbmVsKCk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaXBzUG9zaXRpb24gPT09ICdpbnNpZGUnICYmIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgJiYgKCF0aGlzLmF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWUgfHwgdGhpcy5hdXRvY29tcGxldGVDb250cm9sLnZhbHVlLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuY2hpcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGlwUmVtb3ZlKHsgY2hpcHM6IFsuLi50aGlzLmNoaXBzXSwgcmVtb3ZlZCB9KTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYudXBkYXRlU2l6ZSh7IHdpZHRoOiB0aGlzLmlucHV0Q29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBhbmVsKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlucHV0Rm9jdXMuZW1pdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pbnB1dEJsdXIuZW1pdCgpO1xuICAgICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGlwUmVtb3ZlKGU6IHsgY2hpcHM6IEV1aUNoaXBbXTsgcmVtb3ZlZDogRXVpQ2hpcCB8IHsgY2hpcDogRXVpQ2hpcDsgZXZlbnQ6IEV2ZW50IH0gfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBldmVudCA9IGUgYXMgeyBjaGlwczogRXVpQ2hpcFtdOyByZW1vdmVkOiBFdWlDaGlwIH07XG4gICAgICAgIGNvbnN0IGl0ZW1SZW1vdmVkID0gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQuZmluZChpID0+IGkuaWQgPT09IGV2ZW50LnJlbW92ZWQuaWQpO1xuXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkID0gdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWRcbiAgICAgICAgICAgIC5maWx0ZXIoaSA9PiBldmVudC5jaGlwcy5maW5kKGMgPT4gYy5pZCA9PT0gaS5pZCkpXG4gICAgICAgICAgICAuZmlsdGVyKGkgPT4gZXZlbnQuY2hpcHMuZmluZChjID0+IGMuZXVpSW50ZXJuYWxJZCA9PT0gaS5ldWlJbnRlcm5hbElkKSk7XG4gICAgICAgIHRoaXMuY2hpcHMgPSB0aGlzLm1hcFRvQ2hpcCh0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCk7XG5cbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKCcnLCB0aGlzLmlzSXRlbXNTb3J0ZWQpO1xuXG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQubGVuZ3RoID4gMCA/IHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkIDogbnVsbCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLml0ZW1SZW1vdmUuZW1pdChpdGVtUmVtb3ZlZCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hpcERyb3BwZWQoZTogRXVpQ2hpcERyYWdEcm9wKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmF1dG9jb21wbGV0ZURhdGE7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkID0gZS5jaGlwcy5tYXAoYyA9PiBkYXRhLmZpbmQoKGEpID0+IGEuaWQgPT09IGMuaWQpKTtcblxuICAgICAgICB0aGlzLmNoaXBzID0gdGhpcy5tYXBUb0NoaXAodGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMubmV4dCh0aGlzLmZpbHRlck9wdGlvbnMoJycpKTtcblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkLmxlbmd0aCA+IDAgPyB0aGlzLmF1dG9jb21wbGV0ZURhdGFTZWxlY3RlZCA6IG51bGwpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuYXV0b2NvbXBsZXRlRGF0YVNlbGVjdGVkKTtcblxuICAgICAgICB0aGlzLmNoaXBEcm9wLmVtaXQoZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2hpcERyYWdTdGFydGVkKGU6IEV1aUNoaXBEcmFnRHJvcCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoaXBEcmFnU3RhcnQuZW1pdChlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGlwRHJhZ1JlbGVhc2VkKGU6IEV1aUNoaXBEcmFnRHJvcCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNoaXBEcmFnUmVsZWFzZS5lbWl0KGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SXRlbVNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uSGVpZ2h0ID0gdGhpcy5vdmVybGF5UmVmPy5ob3N0RWxlbWVudD8ucXVlcnlTZWxlY3RvcignLmV1aS1hdXRvY29tcGxldGVfX3BhbmVsJyk/LnF1ZXJ5U2VsZWN0b3JBbGwoJy5ldWktYXV0b2NvbXBsZXRlLW9wdGlvbicpWzBdPy5jbGllbnRIZWlnaHQgKyAxO1xuICAgICAgICByZXR1cm4gb3B0aW9uSGVpZ2h0IHx8IDQ4O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3B0aW9ucyh2YWx1ZTogc3RyaW5nLCBpc0l0ZW1zU29ydGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5uZXh0KGlzSXRlbXNTb3J0ZWQgPyAodGhpcy5vcmRlckFycmF5KHRoaXMuZmlsdGVyT3B0aW9ucyh2YWx1ZSksIHRoaXMuaXRlbXNTb3J0T3JkZXIpKSA6IHRoaXMuZmlsdGVyT3B0aW9ucyh2YWx1ZSkpO1xuXG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZ3JvdXBlZE9wdGlvbnMsIGRpc3RpbmN0T3B0aW9uR3JvdXBzIH0gPSB0aGlzLmdyb3VwaW5nSGFuZGxlcih0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMudmFsdWUsIHRoaXMuZ3JvdXBCeSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ3JvdXBlZE9wdGlvbnMubmV4dChncm91cGVkT3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmRpc3RpbmN0T3B0aW9uR3JvdXBzID0gZGlzdGluY3RPcHRpb25Hcm91cHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBvc2l0aW9uU3RyYXRlZ3koKTogUG9zaXRpb25TdHJhdGVneSB7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlcbiAgICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmlucHV0Q29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5T3JpZ2luKVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnModGhpcy5wcmVmZXJyZWRQb3NpdG9ucylcbiAgICAgICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhMb2NrZWRQb3NpdGlvbih0cnVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNjcm9sbFN0cmF0ZWd5KCk6IFJlcG9zaXRpb25TY3JvbGxTdHJhdGVneSB7XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKHsgc2Nyb2xsVGhyb3R0bGU6IDEwIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlsdGVyT3B0aW9ucyhpbnB1dFZhbHVlOiBzdHJpbmcpOiBFdWlBdXRvQ29tcGxldGVJdGVtW10ge1xuICAgICAgICBsZXQgZGF0YTogRXVpQXV0b0NvbXBsZXRlSXRlbVtdID0gW107XG4gICAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy5hdXRvY29tcGxldGVEYXRhLmZpbHRlcigoYXV0b2NvbXBsZXRlSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaGluZyA9PT0gJ2NvbnRhaW5zJyAmJlxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGVJdGVtLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpbnB1dFZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSkgIT09IC0xXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhdXRvY29tcGxldGVJdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2hpbmcgPT09ICdzdGFydFdpdGgnICYmXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZUl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5zdWJzdHIoMCwgaW5wdXRWYWx1ZS50b1N0cmluZygpLmxlbmd0aCkgPT09IGlucHV0VmFsdWUudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXV0b2NvbXBsZXRlSXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmF1dG9jb21wbGV0ZURhdGE7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5oYXNDaGlwcykge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGQgPT4gIXRoaXMuaXNEdXBsaWNhdGVWYWx1ZUFsbG93ZWQgPyAhdGhpcy5hdXRvY29tcGxldGVEYXRhU2VsZWN0ZWQuc29tZShzZWxlY3RlZEl0ZW0gPT4gZC5pZCA9PT0gc2VsZWN0ZWRJdGVtLmlkKSA6IHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNJdGVtc1NvcnRlZCkge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMub3JkZXJBcnJheShkYXRhLCB0aGlzLml0ZW1zU29ydE9yZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwVG9DaGlwKGl0ZW1zOiBFdWlBdXRvQ29tcGxldGVJdGVtW10pOiBFdWlDaGlwW10ge1xuICAgICAgICBjb25zdCBjaGlwcyA9IGl0ZW1zLm1hcCgoc2VsZWN0ZWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXVpQ2hpcCh7XG4gICAgICAgICAgICAgICAgaWQ6IHNlbGVjdGVkLmlkLFxuICAgICAgICAgICAgICAgIGV1aUludGVybmFsSWQ6IHNlbGVjdGVkLmV1aUludGVybmFsSWQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHNlbGVjdGVkLmxhYmVsLFxuICAgICAgICAgICAgICAgIHR5cGVDbGFzczogc2VsZWN0ZWQudHlwZUNsYXNzLFxuICAgICAgICAgICAgICAgIGlzT3V0bGluZTogc2VsZWN0ZWQuaXNPdXRsaW5lLFxuICAgICAgICAgICAgICAgIGlzUm91bmRlZDogc2VsZWN0ZWQuaXNSb3VuZGVkLFxuICAgICAgICAgICAgICAgIHNpemVDbGFzczogc2VsZWN0ZWQuc2l6ZUNsYXNzLFxuICAgICAgICAgICAgICAgIGlzUmVtb3ZhYmxlOiBzZWxlY3RlZC5pc1JlbW92YWJsZSxcbiAgICAgICAgICAgICAgICB0b29sdGlwTWVzc2FnZTogc2VsZWN0ZWQudG9vbHRpcD8udG9vbHRpcE1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgdG9vbHRpcDogbmV3IEV1aUNoaXBUb29sdGlwKHNlbGVjdGVkLnRvb2x0aXApLFxuICAgICAgICAgICAgICAgIGljb25DbGFzczogc2VsZWN0ZWQuaWNvbkNsYXNzLFxuICAgICAgICAgICAgICAgIGljb25TdmdOYW1lOiBzZWxlY3RlZC5pY29uU3ZnTmFtZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5pc0NoaXBzU29ydGVkICYmIGNoaXBzLmxlbmd0aCA+IDAgPyAodGhpcy5vcmRlckFycmF5KGNoaXBzLCB0aGlzLmNoaXBzU29ydE9yZGVyKSBhcyBFdWlDaGlwW10pIDogY2hpcHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcmRlckFycmF5PFQgZXh0ZW5kcyB7IGxhYmVsOiBzdHJpbmc7IH0+KHRhYjogVFtdLCBzb3J0T3JkZXI6ICdBU0MnIHwgJ0RFU0MnKTogVFtdIHtcbiAgICAgICAgdGFiLnNvcnQoKGE6IFQsIGI6IFQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFPYmogPSBhLmxhYmVsLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBiT2JqID0gYi5sYWJlbC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc29ydE9yZGVyID09PSAnQVNDJykge1xuICAgICAgICAgICAgICAgIGlmIChhT2JqIDwgYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhT2JqID4gYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChhT2JqID4gYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhT2JqIDwgYk9iaikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0YWI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBncm91cGluZ0hhbmRsZXIob3B0aW9uczogRXVpQXV0b0NvbXBsZXRlSXRlbVtdLCBncm91cEJ5OiBzdHJpbmcpOiBcbiAgICB7IGdyb3VwZWRPcHRpb25zOiB7IFtpZDogc3RyaW5nXTogeyBvcHRpb25zOiBFdWlBdXRvQ29tcGxldGVJdGVtW10sIGFuY2VzdG9yTGVuZ3RoOiBudW1iZXIgfSB9LCBkaXN0aW5jdE9wdGlvbkdyb3Vwczogc3RyaW5nW10gfSB7XG4gICAgICAgIGNvbnN0IGRpc3RpbmN0R3JvdXBzOiBzdHJpbmdbXSA9IHRoaXMuYXV0b2NvbXBsZXRlRGF0YS5tYXAoaXRlbSA9PiBncm91cEJ5LnNwbGl0KCcuJykucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAocHJldiA/IHByZXZbY3Vycl0gOiBudWxsKSwgaXRlbSB8fCBzZWxmKSk7XG4gICAgICAgIGNvbnN0IGRpc3RpbmN0T3B0aW9uR3JvdXBzOiBzdHJpbmdbXSA9IFsuLi5uZXcgU2V0KGRpc3RpbmN0R3JvdXBzKV0uc29ydCgoYTogc3RyaW5nLCBiOiBzdHJpbmcpID0+IChhID4gYiA/IDEgOiAtMSkpO1xuICAgICAgICBjb25zdCBncm91cGVkT3B0aW9uczogeyBbaWQ6IHN0cmluZ106IHsgb3B0aW9uczogRXVpQXV0b0NvbXBsZXRlSXRlbVtdLCBhbmNlc3Rvckxlbmd0aDogbnVtYmVyIH0gfSA9IHt9O1xuICAgIFxuICAgICAgICBsZXQgYW5jZXN0b3JMZW5ndGggPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGRpc3RpbmN0T3B0aW9uR3JvdXBzKSB7XG4gICAgICAgICAgICBsZXQgbyA9IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBncm91cEJ5LnNwbGl0KCcuJykucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAocHJldiA/IHByZXZbY3Vycl0gOiBudWxsKSwgb3B0aW9uIHx8IHNlbGYpID09PSBncm91cCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0l0ZW1zU29ydGVkKSB7XG4gICAgICAgICAgICAgICAgbyA9IHRoaXMub3JkZXJBcnJheShvLCB0aGlzLml0ZW1zU29ydE9yZGVyKSBhcyBFdWlBdXRvQ29tcGxldGVJdGVtW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdyb3VwZWRPcHRpb25zW2dyb3VwXSA9IHsgb3B0aW9uczogbywgYW5jZXN0b3JMZW5ndGggfTtcbiAgICAgICAgICAgIGFuY2VzdG9yTGVuZ3RoICs9IG8ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIHJldHVybiB7IGdyb3VwZWRPcHRpb25zLCBkaXN0aW5jdE9wdGlvbkdyb3VwcyB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWaXNpYmxlKG9yaWdpbjogSFRNTEVsZW1lbnQsIHNjcm9sbGFibGVQYXJlbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG9yaWdpblkgPSBvcmlnaW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkueTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsYWJsZVBhcmVudFkgPSBNYXRoLmFicyhzY3JvbGxhYmxlUGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnkpO1xuICAgICAgICBjb25zdCBzY3JvbGxhYmxlUGFyZW50SGVpZ2h0ID0gc2Nyb2xsYWJsZVBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgLSA1NTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKG9yaWdpblkgPiAwICYmIG9yaWdpblkgPCBzY3JvbGxhYmxlUGFyZW50SGVpZ2h0KSB8fFxuICAgICAgICAgICAgKG9yaWdpblkgLSBzY3JvbGxhYmxlUGFyZW50WSA+IDAgJiYgb3JpZ2luWSA8IHNjcm9sbGFibGVQYXJlbnRZICsgc2Nyb2xsYWJsZVBhcmVudEhlaWdodClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlID0gPFQ+KGNoYW5nZT86IFQpOiB2b2lkID0+IHtcbiAgICAgICAgLyoqIGVtcHR5ICovXG4gICAgfTtcblxuICAgIHByaXZhdGUgb25Ub3VjaCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgLyoqIGVtcHR5ICovXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGBhcmlhLXJlcXVpcmVkYCBhdHRyaWJ1dGUgb24gdGhlIGlucHV0IGVsZW1lbnQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUlucHV0QXJpYVJlcXVpcmVkQXR0cmlidXRlKGNvbnRyb2w6IE5nQ29udHJvbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc0FyaWFSZXF1aXJlZEF0dHJpYnV0ZSA9IGNvbnRyb2w/LmNvbnRyb2w/Lmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59IiwiPGRpdiBjbGFzcz1cImV1aS1hdXRvY29tcGxldGVfX3dyYXBwZXJcIj5cbiAgICBAaWYgKGNoaXBzUG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuICAgIEBpZiAoaGFzQ2hpcHMpIHtcbiAgICAgICAgPGV1aS1jaGlwLWxpc3RcbiAgICAgICAgICAgIFtjaGlwc109XCJjaGlwc1wiXG4gICAgICAgICAgICBbaXNDaGlwc1JlbW92YWJsZV09XCJpc0NoaXBzUmVtb3ZhYmxlICYmICFpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgIFttYXhWaXNpYmxlQ2hpcHNDb3VudF09XCJtYXhWaXNpYmxlQ2hpcHNDb3VudFwiXG4gICAgICAgICAgICBbaXNNYXhWaXNpYmxlQ2hpcHNPcGVuZWRdPVwiaXNNYXhWaXNpYmxlQ2hpcHNPcGVuZWRcIlxuICAgICAgICAgICAgW2NoaXBzTGFiZWxUcnVuY2F0ZUNvdW50XT1cImNoaXBzTGFiZWxUcnVuY2F0ZUNvdW50XCJcbiAgICAgICAgICAgIFt0b2dnbGVMaW5rTW9yZUxhYmVsXT1cInRvZ2dsZUxpbmtNb3JlTGFiZWxcIlxuICAgICAgICAgICAgW3RvZ2dsZUxpbmtMZXNzTGFiZWxdPVwidG9nZ2xlTGlua0xlc3NMYWJlbFwiXG4gICAgICAgICAgICBbaXNDaGlwc0RyYWdBbmREcm9wXT1cImlzQ2hpcHNEcmFnQW5kRHJvcFwiXG4gICAgICAgICAgICBbZHJhZ0FuZERyb3BTb3VyY2VOYW1lXT1cImRyYWdBbmREcm9wU291cmNlTmFtZVwiXG4gICAgICAgICAgICBbZHJhZ0FuZERyb3BDb25uZWN0ZWRUb109XCJkcmFnQW5kRHJvcENvbm5lY3RlZFRvXCJcbiAgICAgICAgICAgIChjaGlwRHJvcCk9XCJvbkNoaXBEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAgICAgKGNoaXBEcmFnU3RhcnQpPVwib25DaGlwRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2hpcERyYWdSZWxlYXNlKT1cIm9uQ2hpcERyYWdSZWxlYXNlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjaGlwUmVtb3ZlKT1cIm9uQ2hpcFJlbW92ZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8ZXVpQ2hpcExpc3RBcHBlbmRDb250ZW50PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjaGlwc1Bvc2l0aW9uID09PSAnaW5zaWRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJvbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2V1aUNoaXBMaXN0QXBwZW5kQ29udGVudD5cbiAgICAgICAgPC9ldWktY2hpcC1saXN0PlxuICAgIH1cbiAgICBAaWYgKGNoaXBzUG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250cm9sXCI+PC9uZy1jb250YWluZXI+XG4gICAgfVxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY29udHJvbD5cbiAgICA8ZGl2ICpuZ0lmPVwiIWhhc0NoaXBzIHx8IChoYXNDaGlwcyAmJiAhaXNSZWFkb25seSlcIiBjbGFzcz1cImV1aS1hdXRvY29tcGxldGVfX2lucHV0LWNvbnRhaW5lclwiICNpbnB1dENvbnRhaW5lclJlZj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBbYXR0ci5pZF09XCJpbnB1dElkXCJcbiAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgZXVpSW5wdXRUZXh0XG4gICAgICAgICAgICBbZXVpQ2xlYXJhYmxlXT1cIiFpc1JlYWRvbmx5ICYmICFpc0Rpc2FibGVkXCJcbiAgICAgICAgICAgIFtldWlMb2FkaW5nXT1cImlzTG9hZGluZ1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiYXV0b2NvbXBsZXRlQ29udHJvbFwiXG4gICAgICAgICAgICBjbGFzcz1cImV1aS1hdXRvY29tcGxldGVfX2lucHV0IHt7IGNsYXNzTGlzdCB9fVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIH19XCJcbiAgICAgICAgICAgIFtyZWFkb25seV09XCJpc1JlYWRvbmx5XCJcbiAgICAgICAgICAgIChjbGVhcik9XCJvbkNsZWFyKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5QYW5lbCgpXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJpc09wZW4gPyAnZXVpLWF1dG9jb21wbGV0ZV9fcGFuZWwnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImF1dG9jb21wbGV0ZUNvbnRyb2wudmFsdWU/Lmxlbmd0aCA+IDAgPyBhdXRvY29tcGxldGVDb250cm9sLnZhbHVlIDogJ0lucHV0IGZpZWxkIHdpdGhvdXQgdmFsdWUnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwiaGFzQXJpYVJlcXVpcmVkQXR0cmlidXRlID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cImJvdGhcIlxuICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIiAvPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVBvcnRhbENvbnRlbnQ+XG4gICAgPGRpdlxuICAgICAgICBpZD1cImV1aS1hdXRvY29tcGxldGVfX3BhbmVsXCJcbiAgICAgICAgY2xhc3M9XCJldWktYXV0b2NvbXBsZXRlX19wYW5lbFwiXG4gICAgICAgIFtAcGFuZWxBbmltYXRpb25dPVwiaXNPcGVuID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICByb2xlPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJBdXRvY29tcGxldGUgcGFuZWxcIj5cbiAgICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxuICAgICAgICAgICAgI3ZpcnR1YWxTY3JvbGxpbmdcbiAgICAgICAgICAgIFtpdGVtU2l6ZV09XCJpdGVtU2l6ZVwiXG4gICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgbWluQnVmZmVyUHg9XCI1MDBcIlxuICAgICAgICAgICAgbWF4QnVmZmVyUHg9XCI3NTBcIlxuICAgICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwiY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0ICsgJ3B4J1wiPlxuICAgICAgICAgICAgQGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICAgICAgQGZvciAoZGlzdGluY3RPcHRpb25Hcm91cCBvZiBkaXN0aW5jdE9wdGlvbkdyb3VwczsgbGV0IGkgPSAkaW5kZXg7IHRyYWNrIGRpc3RpbmN0T3B0aW9uR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoKGdyb3VwZWRPcHRpb25zIHwgYXN5bmMpW2Rpc3RpbmN0T3B0aW9uR3JvdXBdLm9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxldWktYXV0b2NvbXBsZXRlLW9wdGlvbi1ncm91cCBbbGFiZWxdPVwiZGlzdGluY3RPcHRpb25Hcm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24tZ3JvdXBfX2xhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGF1dG9jb21wbGV0ZU9wdEdyb3VwVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXV0b2NvbXBsZXRlT3B0R3JvdXBUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogeyBsYWJlbDogZGlzdGluY3RPcHRpb25Hcm91cCB9IH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGlzdGluY3RPcHRpb25Hcm91cCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1hdXRvY29tcGxldGUtb3B0aW9uLWdyb3VwX19vcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChhdXRvY29tcGxldGVPcHRpb24gb2YgKGdyb3VwZWRPcHRpb25zIHwgYXN5bmMpW2Rpc3RpbmN0T3B0aW9uR3JvdXBdLm9wdGlvbnM7IGxldCBqID0gJGluZGV4OyB0cmFjayBhdXRvY29tcGxldGVPcHRpb24uaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWF1dG9jb21wbGV0ZS1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNHcm91cEl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzQWN0aXZlXT1cInNlbGVjdGVkT3B0aW9uSW5kZXggPT09IChncm91cGVkT3B0aW9ucyB8IGFzeW5jKVtkaXN0aW5jdE9wdGlvbkdyb3VwXS5hbmNlc3Rvckxlbmd0aCArIGpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXNEaXNhYmxlZF09XCJhdXRvY29tcGxldGVPcHRpb24uaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXVpVmFyaWFudF09XCJhdXRvY29tcGxldGVPcHRpb24udHlwZUNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uT3B0aW9uU2VsZWN0ZWQoYXV0b2NvbXBsZXRlT3B0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGF1dG9jb21wbGV0ZU9wdGlvblRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBhdXRvY29tcGxldGVPcHRpb24gfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGF1dG9jb21wbGV0ZU9wdGlvbi5pY29uQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInt7IGF1dG9jb21wbGV0ZU9wdGlvbi5pY29uQ2xhc3MgfX1cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChhdXRvY29tcGxldGVPcHRpb24uaWNvblN2Z05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJ7eyBhdXRvY29tcGxldGVPcHRpb24uaWNvblN2Z05hbWUgfX1cIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGF1dG9jb21wbGV0ZU9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ldWktYXV0b2NvbXBsZXRlLW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ldWktYXV0b2NvbXBsZXRlLW9wdGlvbi1ncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZXVpLWF1dG9jb21wbGV0ZS1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgKmNka1ZpcnR1YWxGb3I9XCJsZXQgYXV0b2NvbXBsZXRlT3B0aW9uIG9mIGF1dG9jb21wbGV0ZU9wdGlvbnMgfCBhc3luYzsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogb3B0aW9uc1RyYWNrQnlGblwiXG4gICAgICAgICAgICAgICAgICAgIFtpc0FjdGl2ZV09XCJzZWxlY3RlZE9wdGlvbkluZGV4ID09PSBpXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzRGlzYWJsZWRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImF1dG9jb21wbGV0ZU9wdGlvbi5pc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2V1aVZhcmlhbnRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uLnR5cGVDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbk9wdGlvblNlbGVjdGVkKGF1dG9jb21wbGV0ZU9wdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvY29tcGxldGVPcHRpb25UZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYXV0b2NvbXBsZXRlT3B0aW9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogYXV0b2NvbXBsZXRlT3B0aW9uIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvY29tcGxldGVPcHRpb24uaWNvbkNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ7eyBhdXRvY29tcGxldGVPcHRpb24uaWNvbkNsYXNzIH19XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoYXV0b2NvbXBsZXRlT3B0aW9uLmljb25TdmdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBpY29uPVwie3sgYXV0b2NvbXBsZXRlT3B0aW9uLmljb25TdmdOYW1lIH19XCI+PC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBhdXRvY29tcGxldGVPcHRpb24ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZXVpLWF1dG9jb21wbGV0ZS1vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvZGl2PiAgXG48L25nLXRlbXBsYXRlPiJdfQ==