ngx-histaff-alpha 1.8.1 → 1.8.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.
@@ -0,0 +1,127 @@
1
+ import { Component, Input, ViewChild } from '@angular/core';
2
+ import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { CoreFormControlBaseComponent } from '../core-form-control-base/core-form-control-base.component';
4
+ import { CoreTopicTreeComponent } from '../core-topic-tree/core-topic-tree.component';
5
+ import { TooltipDirective } from '../tooltip/tooltip.directive';
6
+ import { ThreedotsComponent } from '../threedots/threedots.component';
7
+ import { TranslatePipe } from '../../app-pipes/translate.pipe';
8
+ import { alertOptions } from '../../constants/alertOptions';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "../services/dom.service";
11
+ import * as i2 from "../../services/app.service";
12
+ import * as i3 from "../../services/response.service";
13
+ import * as i4 from "../alert/alert.service";
14
+ import * as i5 from "../../services/multi-language.service";
15
+ import * as i6 from "@angular/forms";
16
+ export class CoreTopicPickerComponent extends CoreFormControlBaseComponent {
17
+ constructor(domService, renderer, appService, responseService, alertService, mls) {
18
+ super();
19
+ this.domService = domService;
20
+ this.renderer = renderer;
21
+ this.appService = appService;
22
+ this.responseService = responseService;
23
+ this.alertService = alertService;
24
+ this.mls = mls;
25
+ this.subscriptions = [];
26
+ }
27
+ ngOnInit() {
28
+ this.subscriptions.push(this.mls.lang$.subscribe(x => this.lang = x));
29
+ }
30
+ toggleExpanded() {
31
+ if (!this.disabled) {
32
+ this.expandState = !!!this.expandState;
33
+ }
34
+ }
35
+ onTreeItemClick(event) {
36
+ if (this.value !== event['id'])
37
+ this.markAsTouched();
38
+ this.value = event['id'];
39
+ this.onChange(event['id']);
40
+ this.shownText = event['nameCode'];
41
+ this.toggleExpanded();
42
+ }
43
+ writeValue(obj) {
44
+ this.value = obj;
45
+ if (!!!obj) {
46
+ this.shownText = "";
47
+ }
48
+ else {
49
+ this.loading = true;
50
+ this.subscriptions.push(this.appService.get(this.getByIdApi + "?id=" + obj.toString()).subscribe(x => {
51
+ this.loading = false;
52
+ if (x.ok && x.status === 200) {
53
+ const body = x.body;
54
+ //this.responseService.resolve(body);
55
+ if (body.statusCode === 200) {
56
+ this.shownText = body.innerBody['nameCode'];
57
+ }
58
+ else {
59
+ this.alertService.error(this.mls.trans(body.messageCode, this.lang), alertOptions);
60
+ }
61
+ }
62
+ else {
63
+ //this.alertService.error(JSON.stringify(x, null, 2), noneAutoClosedAlertOptions)
64
+ }
65
+ }));
66
+ }
67
+ }
68
+ onClickClear() {
69
+ this.writeValue(null);
70
+ this.onChange(null);
71
+ this.shownText = "";
72
+ }
73
+ ngAfterViewInit() {
74
+ /**
75
+ * This events get called by all clicks on the page
76
+ */
77
+ this.listenerFn = this.renderer.listen('window', 'click', (e) => {
78
+ /*
79
+ * handle click outside
80
+ */
81
+ if (this.container && !!!this.container.nativeElement.contains(e.target)) {
82
+ this.expandState = false;
83
+ }
84
+ });
85
+ const maxZIndex = this.domService.getMaxZIndex();
86
+ this.container.nativeElement.style.setProperty('--max-z-index', maxZIndex + 1);
87
+ if (!!this.popupHeight)
88
+ this.container.nativeElement.style.setProperty('--popup-height', this.popupHeight);
89
+ }
90
+ ngOnDestroy() {
91
+ if (this.listenerFn)
92
+ this.listenerFn();
93
+ this.subscriptions.map((x) => x?.unsubscribe());
94
+ }
95
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreTopicPickerComponent, deps: [{ token: i1.DomService }, { token: i0.Renderer2 }, { token: i2.AppService }, { token: i3.ResponseService }, { token: i4.AlertService }, { token: i5.MultiLanguageService }], target: i0.ɵɵFactoryTarget.Component }); }
96
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreTopicPickerComponent, isStandalone: true, selector: "core-topic-picker", inputs: { popupHeight: "popupHeight", getByIdApi: "getByIdApi" }, providers: [
97
+ {
98
+ provide: NG_VALUE_ACCESSOR,
99
+ multi: true,
100
+ useExisting: CoreTopicPickerComponent
101
+ }
102
+ ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<app-threedots *ngIf=\"loading\"></app-threedots>\n<div #container class=\"core-topic-picker-container\" [class.d-none]=\"loading\">\n <input type=\"checkbox\" class=\"expand-state\" [(ngModel)]=\"expandState\">\n <input class=\"value\" [value]=\"value\">\n <label type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\n <span [appTooltip]=\"shownText\">{{ !!loading ? \"...\" : shownText }}</span>\n <div class=\"icon\" (click)=\"toggleExpanded()\">\n <i class=\"feather-chevrons-down\"></i>\n </div>\n\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\n <i class=\"feather-x\"></i>\n </div>\n </div>\n \n </label>\n @if (!!expandState) {\n <div class=\"dropdown\" [class.form-control-disabled]=\"disabled\">\n <core-topic-tree [translateText]=\"true\" (itemClick)=\"onTreeItemClick($event)\"></core-topic-tree>\n </div>\n }\n\n</div>", styles: [".core-topic-picker-container{position:relative;display:block;--indicator-height: 0px;--search-bg-color: white;--search-border-color: #D1D1D1;--search-item-hover-bg: #358ccb;--search-item-hover-color: white;--dropdown-bg: lightyellow;--arrow-color: #358ccb;--height: var(--size-form-control-height);--item-height: 50px;--max-z-index: 0;--search-height: 38px;--popup-height: 460px}.core-topic-picker-container input.expand-state,.core-topic-picker-container .value{display:none}.core-topic-picker-container label.text{width:100%;height:var(--height);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:flex;align-items:center;justify-content:space-between}.core-topic-picker-container label.text .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:45px;top:2px;width:44px;height:44px;border-radius:.375rem;cursor:pointer}.core-topic-picker-container label.text .clear-icon-wrapper>.flex-wrapper{width:44px;height:44px;display:flex;align-items:center;justify-content:center}.core-topic-picker-container label.text .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-topic-picker-container label.text:hover>.clear-icon-wrapper{display:block}.core-topic-picker-container label.text span{width:calc(100% - var(--height));overflow-x:hidden;text-overflow:ellipsis;color:inherit}.core-topic-picker-container label.text div.icon{display:flex;align-items:center;justify-content:center;position:absolute;right:3px;top:3px;width:calc(var(--height) - 6px);height:calc(var(--height) - 6px);background-color:#e9e9e9;border-radius:3px;cursor:pointer}.core-topic-picker-container label.text div.icon i{width:28px;height:28px;font-size:28px;color:#848484}.core-topic-picker-container .dropdown{display:block;position:absolute;width:800px;min-width:100%;max-height:0px;overflow-x:auto;overflow-y:hidden;background-color:#fff;font-size:15px;box-shadow:0 1rem 3rem #0000002e;transition:.25s linear;z-index:calc(var(--max-z-index) + 1)}.core-topic-picker-container .dropdown ul{padding-left:6px}.core-topic-picker-container .dropdown ul>li{display:flex;align-items:center;cursor:pointer;padding:0px var(--size-scrollbar-width);transition:.25s linear}.core-topic-picker-container .dropdown ul>li>label{width:100%}.core-topic-picker-container .dropdown ul>li:hover{background-color:var(--search-item-hover-bg);color:var(--search-item-hover-color);transition:.25s linear}.core-topic-picker-container input.expand-state:checked~.dropdown{border:1px solid #ced4da;margin-top:2px;max-height:var(--popup-height);border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem;transition:.25s linear}.core-topic-picker-container input.search{margin:0;width:100%;border:0;border-bottom:1px solid var(--search-border-color);background-color:var(--search-bg-color);position:sticky;top:0;height:38px;padding:6px 12px;font-size:15px}.core-topic-picker-container input.search:focus{outline:none}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ThreedotsComponent, selector: "app-threedots" }, { kind: "component", type: CoreTopicTreeComponent, selector: "core-topic-tree", inputs: ["lineColor", "translateText", "fullWidthMode", "accessorMode", "fullRendering", "height", "disabledLoopExpand", "showCheckInheritance", "inlineExtraTemplateRef"], outputs: ["itemDoubleClick", "itemClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
103
+ }
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreTopicPickerComponent, decorators: [{
105
+ type: Component,
106
+ args: [{ selector: 'core-topic-picker', standalone: true, imports: [
107
+ TooltipDirective,
108
+ FormsModule,
109
+ ThreedotsComponent,
110
+ CoreTopicTreeComponent,
111
+ TranslatePipe,
112
+ ], providers: [
113
+ {
114
+ provide: NG_VALUE_ACCESSOR,
115
+ multi: true,
116
+ useExisting: CoreTopicPickerComponent
117
+ }
118
+ ], template: "<app-threedots *ngIf=\"loading\"></app-threedots>\n<div #container class=\"core-topic-picker-container\" [class.d-none]=\"loading\">\n <input type=\"checkbox\" class=\"expand-state\" [(ngModel)]=\"expandState\">\n <input class=\"value\" [value]=\"value\">\n <label type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\n <span [appTooltip]=\"shownText\">{{ !!loading ? \"...\" : shownText }}</span>\n <div class=\"icon\" (click)=\"toggleExpanded()\">\n <i class=\"feather-chevrons-down\"></i>\n </div>\n\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\n <i class=\"feather-x\"></i>\n </div>\n </div>\n \n </label>\n @if (!!expandState) {\n <div class=\"dropdown\" [class.form-control-disabled]=\"disabled\">\n <core-topic-tree [translateText]=\"true\" (itemClick)=\"onTreeItemClick($event)\"></core-topic-tree>\n </div>\n }\n\n</div>", styles: [".core-topic-picker-container{position:relative;display:block;--indicator-height: 0px;--search-bg-color: white;--search-border-color: #D1D1D1;--search-item-hover-bg: #358ccb;--search-item-hover-color: white;--dropdown-bg: lightyellow;--arrow-color: #358ccb;--height: var(--size-form-control-height);--item-height: 50px;--max-z-index: 0;--search-height: 38px;--popup-height: 460px}.core-topic-picker-container input.expand-state,.core-topic-picker-container .value{display:none}.core-topic-picker-container label.text{width:100%;height:var(--height);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:flex;align-items:center;justify-content:space-between}.core-topic-picker-container label.text .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:45px;top:2px;width:44px;height:44px;border-radius:.375rem;cursor:pointer}.core-topic-picker-container label.text .clear-icon-wrapper>.flex-wrapper{width:44px;height:44px;display:flex;align-items:center;justify-content:center}.core-topic-picker-container label.text .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-topic-picker-container label.text:hover>.clear-icon-wrapper{display:block}.core-topic-picker-container label.text span{width:calc(100% - var(--height));overflow-x:hidden;text-overflow:ellipsis;color:inherit}.core-topic-picker-container label.text div.icon{display:flex;align-items:center;justify-content:center;position:absolute;right:3px;top:3px;width:calc(var(--height) - 6px);height:calc(var(--height) - 6px);background-color:#e9e9e9;border-radius:3px;cursor:pointer}.core-topic-picker-container label.text div.icon i{width:28px;height:28px;font-size:28px;color:#848484}.core-topic-picker-container .dropdown{display:block;position:absolute;width:800px;min-width:100%;max-height:0px;overflow-x:auto;overflow-y:hidden;background-color:#fff;font-size:15px;box-shadow:0 1rem 3rem #0000002e;transition:.25s linear;z-index:calc(var(--max-z-index) + 1)}.core-topic-picker-container .dropdown ul{padding-left:6px}.core-topic-picker-container .dropdown ul>li{display:flex;align-items:center;cursor:pointer;padding:0px var(--size-scrollbar-width);transition:.25s linear}.core-topic-picker-container .dropdown ul>li>label{width:100%}.core-topic-picker-container .dropdown ul>li:hover{background-color:var(--search-item-hover-bg);color:var(--search-item-hover-color);transition:.25s linear}.core-topic-picker-container input.expand-state:checked~.dropdown{border:1px solid #ced4da;margin-top:2px;max-height:var(--popup-height);border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem;transition:.25s linear}.core-topic-picker-container input.search{margin:0;width:100%;border:0;border-bottom:1px solid var(--search-border-color);background-color:var(--search-bg-color);position:sticky;top:0;height:38px;padding:6px 12px;font-size:15px}.core-topic-picker-container input.search:focus{outline:none}\n"] }]
119
+ }], ctorParameters: () => [{ type: i1.DomService }, { type: i0.Renderer2 }, { type: i2.AppService }, { type: i3.ResponseService }, { type: i4.AlertService }, { type: i5.MultiLanguageService }], propDecorators: { popupHeight: [{
120
+ type: Input
121
+ }], getByIdApi: [{
122
+ type: Input
123
+ }], container: [{
124
+ type: ViewChild,
125
+ args: ['container']
126
+ }] } });
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10b3BpYy1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtdG9waWMtcGlja2VyL2NvcmUtdG9waWMtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRvcGljLXBpY2tlci9jb3JlLXRvcGljLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUkxRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7Ozs7OztBQXVCNUQsTUFBTSxPQUFPLHdCQUF5QixTQUFRLDRCQUE0QjtJQWV4RSxZQUNVLFVBQXNCLEVBQ3RCLFFBQW1CLEVBQ25CLFVBQXNCLEVBQ3RCLGVBQWdDLEVBQ2hDLFlBQTBCLEVBQzFCLEdBQXlCO1FBRWpDLEtBQUssRUFBRSxDQUFBO1FBUEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0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O3dCQUNQLGdCQUFnQjt3QkFDaEIsV0FBVzt3QkFDWCxrQkFBa0I7d0JBQ2xCLHNCQUFzQjt3QkFDdEIsYUFBYTtxQkFDZCxhQUdVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsMEJBQTBCO3lCQUN0QztxQkFDRjs0TkFHUSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRWtCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRG9tU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RvbS5zZXJ2aWNlJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29yZVRvcGljVHJlZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtdG9waWMtdHJlZS9jb3JlLXRvcGljLXRyZWUuY29tcG9uZW50JztcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRocmVlZG90c0NvbXBvbmVudCB9IGZyb20gJy4uL3RocmVlZG90cy90aHJlZWRvdHMuY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlc3BvbnNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Jlc3BvbnNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IElGb3JtYXRlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRm9ybWF0ZWRSZXNwb25zZSc7XG5pbXBvcnQgeyBhbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcbmltcG9ydCB7IGFwaSB9IGZyb20gJ2FscGhhLWdsb2JhbC1jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb3JlLXRvcGljLXBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBUb29sdGlwRGlyZWN0aXZlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFRocmVlZG90c0NvbXBvbmVudCxcbiAgICBDb3JlVG9waWNUcmVlQ29tcG9uZW50LFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXRvcGljLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb3JlLXRvcGljLXBpY2tlci5jb21wb25lbnQuc2NzcycsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogQ29yZVRvcGljUGlja2VyQ29tcG9uZW50XG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvcmVUb3BpY1BpY2tlckNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBwb3B1cEhlaWdodCE6IG51bWJlcjtcbiAgQElucHV0KCkgZ2V0QnlJZEFwaSE6IGFwaTtcblxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIGV4cGFuZFN0YXRlITogYm9vbGVhbjtcbiAgc2hvd25UZXh0ITogc3RyaW5nO1xuICBsb2FkaW5nITogYm9vbGVhbjtcbiAgbGFuZyE6IHN0cmluZztcbiAgbGlzdGVuZXJGbiE6ICgpID0+IHZvaWQ7XG5cbiAgb3ZlcnJpZGUgdmFsdWUhOiBudW1iZXIgfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZG9tU2VydmljZTogRG9tU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBhcHBTZXJ2aWNlOiBBcHBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVzcG9uc2VTZXJ2aWNlOiBSZXNwb25zZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxhbmcgPSB4KVxuICAgIClcbiAgfVxuXG4gIHRvZ2dsZUV4cGFuZGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5leHBhbmRTdGF0ZSA9ICEhIXRoaXMuZXhwYW5kU3RhdGU7XG4gICAgfVxuICB9XG5cbiAgb25UcmVlSXRlbUNsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gZXZlbnRbJ2lkJ10pIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgIHRoaXMudmFsdWUgPSBldmVudFsnaWQnXTtcbiAgICB0aGlzLm9uQ2hhbmdlKGV2ZW50WydpZCddKTtcbiAgICB0aGlzLnNob3duVGV4dCA9IGV2ZW50WyduYW1lQ29kZSddO1xuICAgIHRoaXMudG9nZ2xlRXhwYW5kZWQoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUob2JqOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IG9iajtcbiAgICBpZiAoISEhb2JqKSB7XG4gICAgICB0aGlzLnNob3duVGV4dCA9IFwiXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLmdldCh0aGlzLmdldEJ5SWRBcGkgKyBcIj9pZD1cIiArIG9iai50b1N0cmluZygpKS5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XG4gICAgICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XG4gICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDApIHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93blRleHQgPSBib2R5LmlubmVyQm9keVsnbmFtZUNvZGUnXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKGJvZHkubWVzc2FnZUNvZGUsIHRoaXMubGFuZyksIGFsZXJ0T3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy90aGlzLmFsZXJ0U2VydmljZS5lcnJvcihKU09OLnN0cmluZ2lmeSh4LCBudWxsLCAyKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIG9uQ2xpY2tDbGVhcigpIHtcblxuICAgIHRoaXMud3JpdGVWYWx1ZShudWxsKTtcbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xuICAgIHRoaXMuc2hvd25UZXh0ID0gXCJcIjtcbiAgIFxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnRzIGdldCBjYWxsZWQgYnkgYWxsIGNsaWNrcyBvbiB0aGUgcGFnZVxuICAgICAqL1xuICAgIHRoaXMubGlzdGVuZXJGbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnY2xpY2snLCAoZTogRXZlbnQpID0+IHtcbiAgICAgIC8qXG4gICAgICAgKiBoYW5kbGUgY2xpY2sgb3V0c2lkZVxuICAgICAgICovXG4gICAgICBpZiAodGhpcy5jb250YWluZXIgJiYgISEhdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgICAgdGhpcy5leHBhbmRTdGF0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgbWF4WkluZGV4ID0gdGhpcy5kb21TZXJ2aWNlLmdldE1heFpJbmRleCgpO1xuICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tbWF4LXotaW5kZXgnLCBtYXhaSW5kZXggKyAxKTtcbiAgICBpZiAoISF0aGlzLnBvcHVwSGVpZ2h0KSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXBvcHVwLWhlaWdodCcsIHRoaXMucG9wdXBIZWlnaHQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGlzdGVuZXJGbikgdGhpcy5saXN0ZW5lckZuKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCgoeCkgPT4geD8udW5zdWJzY3JpYmUoKSk7XG4gIH1cblxufVxuIiwiPGFwcC10aHJlZWRvdHMgKm5nSWY9XCJsb2FkaW5nXCI+PC9hcHAtdGhyZWVkb3RzPlxuPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiY29yZS10b3BpYy1waWNrZXItY29udGFpbmVyXCIgW2NsYXNzLmQtbm9uZV09XCJsb2FkaW5nXCI+XG4gICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZXhwYW5kLXN0YXRlXCIgWyhuZ01vZGVsKV09XCJleHBhbmRTdGF0ZVwiPlxuICAgIDxpbnB1dCBjbGFzcz1cInZhbHVlXCIgW3ZhbHVlXT1cInZhbHVlXCI+XG4gICAgPGxhYmVsIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJ0ZXh0IGZvcm0tY29udHJvbFwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgPHNwYW4gW2FwcFRvb2x0aXBdPVwic2hvd25UZXh0XCI+e3sgISFsb2FkaW5nID8gXCIuLi5cIiA6IHNob3duVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImljb25cIiAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQoKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLWNoZXZyb25zLWRvd25cIj48L2k+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhci1pY29uLXdyYXBwZXJcIiBbY2xhc3MuZC1ub25lXT1cIiEhZGlzYWJsZWQgfHwgISEhdmFsdWVcIiAoY2xpY2spPVwib25DbGlja0NsZWFyKClcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBwZXJcIiBbYXBwVG9vbHRpcF09XCInVUkuQ09SRV9DT05UT0xfQ09NTU9OX0NMRUFSJyB8IHRyYW5zbGF0ZTogbGFuZ1wiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmVhdGhlci14XCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICA8L2xhYmVsPlxuICAgIEBpZiAoISFleHBhbmRTdGF0ZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAgICAgICAgICA8Y29yZS10b3BpYy10cmVlIFt0cmFuc2xhdGVUZXh0XT1cInRydWVcIiAoaXRlbUNsaWNrKT1cIm9uVHJlZUl0ZW1DbGljaygkZXZlbnQpXCI+PC9jb3JlLXRvcGljLXRyZWU+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuPC9kaXY+Il19
@@ -393,7 +393,7 @@ export class CoreTopicTreeComponent extends CoreFormControlBaseComponent {
393
393
  }
394
394
  }
395
395
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreTopicTreeComponent, deps: [{ token: i1.AuthService }, { token: i2.RecursiveService }, { token: i3.MultiLanguageService }, { token: i4.LayoutService }, { token: i5.TopicTreeService }, { token: i6.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
396
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreTopicTreeComponent, isStandalone: true, selector: "core-topic-tree", inputs: { lineColor: "lineColor", fullWidthMode: "fullWidthMode", accessorMode: "accessorMode", fullRendering: "fullRendering", height: "height", disabledLoopExpand: "disabledLoopExpand", showCheckInheritance: "showCheckInheritance", inlineExtraTemplateRef: "inlineExtraTemplateRef" }, outputs: { itemDoubleClick: "itemDoubleClick", itemClick: "itemClick" }, providers: [
396
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreTopicTreeComponent, isStandalone: true, selector: "core-topic-tree", inputs: { lineColor: "lineColor", translateText: "translateText", fullWidthMode: "fullWidthMode", accessorMode: "accessorMode", fullRendering: "fullRendering", height: "height", disabledLoopExpand: "disabledLoopExpand", showCheckInheritance: "showCheckInheritance", inlineExtraTemplateRef: "inlineExtraTemplateRef" }, outputs: { itemDoubleClick: "itemDoubleClick", itemClick: "itemClick" }, providers: [
397
397
  {
398
398
  provide: NG_VALUE_ACCESSOR,
399
399
  multi: true,
@@ -421,6 +421,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
421
421
  ], template: "<div #container class=\"core-topic-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\"\n [ngStyle]=\"{\n position : 'relative',\n width: '100%',\n height: height + 'px'\n }\">\n <div #displayContent class=\"custom-org-tree\">\n <div class=\"core-org-tree-header d-flex-between\">\n <div>\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\n </div>\n </div>\n\n <ng-container>\n\n <div class=\"scroll-container\" [ngStyle]=\"{\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px'\n }\">\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\n @for (root of data; track $index) {\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\n </ul>\n }\n </div>\n\n\n <div [ngStyle]=\"{\n display: 'block',\n position: 'absolute',\n bottom: '0px',\n left: '0px',\n right: '0px',\n height: layoutService.corePaginationHeight + 'px',\n paddingLeft: layoutService.basicSpacing + 'px',\n paddingRight: layoutService.basicSpacing + 'px',\n lineHeight: layoutService.corePaginationHeight + 'px',\n overflow: 'hidden'\n }\">\n <div [ngStyle]=\"{\n height: layoutService.corePaginationHeight + 'px',\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between'\n }\">\n <!-- <div>\n <core-checkbox [(ngModel)]=\"showDissolved\"\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\n </div> -->\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\n </div>\n </div>\n </div>\n\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\n\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\n <span (click)=\"onObjectClick(context, $event)\">\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\n <i class=\"expand-toggler feather-chevron-down\"\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\n }\n @if (accessorMode === 'CHECKED' && !!!protected) {\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\n [disabled]=\"disabled\"></core-checkbox>\n }\n <object [class.active]=\"activeIds.includes(id)\" [class.highlighted]=\"highlighted\"\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\"\n [appTooltip]=\"title\">\n {{ title | translate: lang }}\n </object>\n\n @if (!!inlineExtraTemplateRef) {\n <ng-container *ngTemplateOutlet=\"inlineExtraTemplateRef; context: { context: context }\">\n </ng-container>\n }\n\n </span>\n @if (children.length) {\n <ul [class.collapsed]=\" !!!expanded\">\n @for (child of children; track $index) {\n @if (!!expanded || !!fullRendering) {\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\n }\n }\n </ul>\n }\n </li>\n }\n\n </ng-template>\n\n </ng-container>\n </div>\n\n\n</div>", styles: [".core-topic-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;border-radius:5px;--item-height: 50px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 30px;--line-color: \"transparent\";--active-item-color: var(--color-bg-pagination-button);--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-topic-tree-container .custom-org-tree{display:var(--display)}.core-topic-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-topic-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px)}.core-topic-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-topic-tree-container .check-inheritance-wrapper{padding:15px}.core-topic-tree-container .form-control{border:none}.core-topic-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-topic-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow-y:auto;overflow-x:auto;position:relative;width:100%;border-radius:5px}.core-topic-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}@media (max-width: 575px){.core-topic-tree-container .scroll-container ::-webkit-slider-runnable-track{width:0px}}.core-topic-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-topic-tree-container .scroll-container ul>li>span:hover{background-color:#fff;width:100%}.core-topic-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1}.core-topic-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-topic-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-topic-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-topic-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-topic-tree-container .scroll-container ul>li{display:block;position:relative}.core-topic-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-topic-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;padding-left:8px;cursor:pointer}.core-topic-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-topic-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-topic-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-topic-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-topic-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-topic-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-topic-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-topic-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-topic-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-topic-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-topic-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"] }]
422
422
  }], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.RecursiveService }, { type: i3.MultiLanguageService }, { type: i4.LayoutService }, { type: i5.TopicTreeService }, { type: i6.AlertService }], propDecorators: { lineColor: [{
423
423
  type: Input
424
+ }], translateText: [{
425
+ type: Input
424
426
  }], fullWidthMode: [{
425
427
  type: Input
426
428
  }], accessorMode: [{
@@ -449,4 +451,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
449
451
  type: ViewChild,
450
452
  args: ['reducedIconWrapper']
451
453
  }] } });
452
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10b3BpYy10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRvcGljLXRyZWUvY29yZS10b3BpYy10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRvcGljLXRyZWUvY29yZS10b3BpYy10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBOEIsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwTSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZFQUE2RSxDQUFDO0FBQzFILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUUxRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckgsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixD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O3NCQUFsQixNQUFNO2dCQUVpQixTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ08sY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBQ00sa0JBQWtCO3NCQUFsRCxTQUFTO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb3JlTG9hZGluZ1N1cmZhY2VDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWxvYWRpbmctc3VyZmFjZS9jb3JlLWxvYWRpbmctc3VyZmFjZS9jb3JlLWxvYWRpbmctc3VyZmFjZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29yZVJlZHVjZXJJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1yZWR1Y2VyLWljb24vY29yZS1yZWR1Y2VyLWljb24vY29yZS1yZWR1Y2VyLWljb24uY29tcG9uZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtZm9ybS1jb250cm9sLWJhc2UvY29yZS1mb3JtLWNvbnRyb2wtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9waWNUcmVlU2VydmljZSwgSVRvcGljVHJlZUluc3RhbmNlLCBJQXJ0aWNsZUNhdGVnb3J5VHJlZUl0ZW0sIElUb3BpY1RyZWVMaW5lYXJJdGVtIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9waWMtdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVjdXJzaXZlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3JlY3Vyc2l2ZS5zZXJ2aWNlJztcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRW51bVRyYW5zbGF0ZUtleSB9IGZyb20gJ2FscGhhLWdsb2JhbC1jb25zdGFudHMnO1xuaW1wb3J0IHsgbGluZXJfdG9fbmVzdGVkX2FycmF5X3NjcmlwdCB9IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9qcy9yZXNjdXNpdmVfd2snO1xuaW1wb3J0IHsgQ29yZUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1jaGVja2JveC9jb3JlLWNoZWNrYm94L2NvcmUtY2hlY2tib3guY29tcG9uZW50JztcblxuZXhwb3J0IGVudW0gRW51bUNvcmVBcnRpY2xlQ2F0ZWdvcnlUcmVlYUFjY2Vzc29yTW9kZSB7XG4gIEFDVElWQVRFRF9TSU5HTEUgPSAnQUNUSVZBVEVEX1NJTkdMRScsXG4gIEFDVElWQVRFRF9JTkhFUklUQU5DRSA9ICdBQ1RJVkFURURfSU5IRVJJVEFOQ0UnLFxuICBDSEVDS0VEID0gJ0NIRUNLRUQnLFxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjb3JlLXRvcGljLXRyZWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCxcbiAgICBDb3JlUmVkdWNlckljb25Db21wb25lbnQsXG4gICAgQ29yZUNoZWNrYm94Q29tcG9uZW50LFxuICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgVG9vbHRpcERpcmVjdGl2ZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0XG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXRvcGljLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY29yZS10b3BpYy10cmVlLmNvbXBvbmVudC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlVG9waWNUcmVlQ29tcG9uZW50LFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENvcmVUb3BpY1RyZWVDb21wb25lbnQgZXh0ZW5kcyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBsaW5lQ29sb3I6IHN0cmluZyA9ICd0cmFuc3BhcmVudCc7XG4gIEBJbnB1dCgpIGZ1bGxXaWR0aE1vZGUhOiBib29sZWFuO1xuICBASW5wdXQoKSBhY2Nlc3Nvck1vZGUhOiBFbnVtQ29yZUFydGljbGVDYXRlZ29yeVRyZWVhQWNjZXNzb3JNb2RlO1xuICBASW5wdXQoKSBmdWxsUmVuZGVyaW5nITogYm9vbGVhbjtcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyOyAvLyBDaGnhu4F1IGNhbyBj4bunYSBDb3JlT3JnVHJlZSBj4bqnbiDEkcaw4bujYyB0cnV54buBbiB2w6BvIVxuICBASW5wdXQoKSBkaXNhYmxlZExvb3BFeHBhbmQhOiBib29sZWFuO1xuICBASW5wdXQoKSBzaG93Q2hlY2tJbmhlcml0YW5jZSE6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgaW5saW5lRXh0cmFUZW1wbGF0ZVJlZiE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQE91dHB1dCgpIGl0ZW1Eb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkaXNwbGF5Q29udGVudCcpIGRpc3BsYXlDb250ZW50ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncmVkdWNlZEljb25XcmFwcGVyJykgcmVkdWNlZEljb25XcmFwcGVyITogRWxlbWVudFJlZjtcblxuICBvdmVycmlkZSB2YWx1ZSE6IG51bWJlcltdO1xuXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUob2JqOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBvYmo7XG5cbiAgICBzd2l0Y2ggKHRoaXMuYWNjZXNzb3JNb2RlKSB7XG4gICAgICBjYXNlIEVudW1Db3JlQXJ0aWNsZUNhdGVnb3J5VHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRDpcbiAgICAgICAgaWYgKCEhb2JqKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgdGhpcy5jaGVja2VkSWRzID0gb2JqOyAvLyA8PT09IDI0LzEwLzIwMjNcbiAgICAgICAgICBvYmoubWFwKHggPT4gY2hlY2tlZEtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZS53cml0ZVZhbHVlQ2hlY2tlZChjaGVja2VkS2V5cywgdGhpcy5kYXRhLCB0aGlzLmRpc2FibGVkTG9vcEV4cGFuZCkuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGE/Lmxlbmd0aCkgdGhpcy5kYXRhWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFbnVtQ29yZUFydGljbGVDYXRlZ29yeVRyZWVhQWNjZXNzb3JNb2RlLkFDVElWQVRFRF9TSU5HTEU6XG4gICAgICBjYXNlIEVudW1Db3JlQXJ0aWNsZUNhdGVnb3J5VHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFOlxuICAgICAgICBpZiAoISFvYmopIHtcbiAgICAgICAgICBjb25zdCBhY3RpdmF0ZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIG9iai5tYXAoeCA9PiBhY3RpdmF0ZWRLZXlzLnB1c2goeC50b1N0cmluZygpKSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2Uud3JpdGVWYWx1ZUFjdGl2YXRlZChhY3RpdmF0ZWRLZXlzLCB0aGlzLmRhdGEsIHRoaXMuZGlzYWJsZWRMb29wRXhwYW5kKS5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cblxuICAgIGlmICh0aGlzLmFjY2Vzc29yTW9kZSA9PT0gRW51bUNvcmVBcnRpY2xlQ2F0ZWdvcnlUcmVlYUFjY2Vzc29yTW9kZS5DSEVDS0VEKSB7XG5cbiAgICB9IGVsc2UgLyogRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfU0lOR0xFIG9yIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFICovIHtcblxuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICBhY3RpdmVJZHM6IG51bWJlcltdID0gW107XG5cbiAgY2hlY2tlZElkczogbnVtYmVyW10gPSBbXTtcblxuICAvLyBmb3IgZGVidWdnaW5nXG4gIC8vIGFjdGl2ZUlkc1N0cmluZyE6IHN0cmluZzsgIFxuICBkYXRhITogSUFydGljbGVDYXRlZ29yeVRyZWVJdGVtW107XG4gIGxvYWRpbmchOiBib29sZWFuO1xuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBsaW5lYXJBcnRpY2xlQ2F0ZWdvcnlBcnJheSE6IElUb3BpY1RyZWVMaW5lYXJJdGVtW107XG4gIHNlYXJjaCE6IHN0cmluZztcbiAgc2VhcmNoJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcmVkdWNlZCE6IGJvb2xlYW47XG4gIHNlYXJjaFBsYWNlaG9sZGVyID0gRW51bVRyYW5zbGF0ZUtleS5VSV9DT01NT05fUExBQ0VfSE9MREVSX1NFQVJDSF9IRVJFO1xuXG4gIGluaXRpYWxpemluZyE6IGJvb2xlYW47XG4gIGNoZWNrSW5oZXJpdGFuY2U6IGJvb2xlYW4gPSB0cnVlOyAvLyBkZWZhdWx0IHZhbHVlIGlzIHRydWVcbiAgc2hvd0Rpc3NvbHZlZDogYm9vbGVhbiA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2VcbiAgc2VsZWN0ZWRLZXkhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNlbGVjdGVkSXRlbSE6IElUb3BpY1RyZWVMaW5lYXJJdGVtO1xuICBsYW5nITogc3RyaW5nO1xuICAvL3JlZHVjZWQkITogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGluc3RhbmNlTnVtYmVyITogbnVtYmVyO1xuICBzY3JvbGxDb250YWluZXJIZWlnaHQhOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy9wdWJsaWMgb3ZlcnJpZGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVjdXJzaXZlU2VydmljZTogUmVjdXJzaXZlU2VydmljZSxcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHVibGljIGxheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b3BpY1RyZWVTZXJ2aWNlOiBUb3BpY1RyZWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICkge1xuICAgIHN1cGVyKC8qaW5qZWN0b3IqLyk7XG4gICAgdGhpcy5pbml0aWFsaXppbmcgPSB0cnVlO1xuXG4gICAgLy8gdGhpcy5yZWR1Y2VkJCA9IHRoaXMuY29yZU9yZ1RyZWVTdGF0ZS5jb3JlT3JnVHJlZVJlZHVjZWQkO1xuXG4gICAgdGhpcy5pbml0aWFsaXppbmcgPSBmYWxzZTtcblxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSkge1xuICAgICAgdGhpcy5yZXNpemVIZWlnaHQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgIHRoaXMuaW5zdGFuY2VOdW1iZXIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBjb25zdCBuZXdJbnN0YW5jZTogSVRvcGljVHJlZUluc3RhbmNlID0ge1xuICAgICAgaW5zdGFuY2VOdW1iZXI6IHRoaXMuaW5zdGFuY2VOdW1iZXIsXG4gICAgICBzZWxlY3RlZEtleSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpLFxuICAgICAgYWN0aXZlS2V5cyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKSxcbiAgICAgIGNoZWNrZWRLZXlzJDogbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pLFxuICAgICAgZXhwYW5kZWRLZXlzJDogbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pLFxuICAgICAgY2hlY2tJbmhlcml0YW5jZSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSlcbiAgICB9XG4gICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLmluc3RhbmNlcy5wdXNoKG5ld0luc3RhbmNlKVxuXG4gICAgLy8gQ2hlY2sgeGVtIGNoaeG7gXUgY2FvIGhlaWdodCBjw7MgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgbyBoYXkga2jDtG5nXG4gICAgaWYgKHRoaXMuaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAvL3RoaXMuYWxlcnRTZXJ2aWNlLndhcm4oXCJDb3JlT3JnVHJlZSBraMO0bmcgbmjhuq1uIMSRxrDhu6NjIGNoaeG7gXUgY2FvIChoZWlnaHQpIHRydXnhu4FuIHbDoG8gdOG7qyBs4bubcCBuZ2/DoGkuIENoaeG7gXUgY2FvIG3hurdjIMSR4buLbmggc+G6vSDEkcaw4bujYyB0w61uaCB0b8OhbiBk4buxYSB2w6BvIGLhu5EgY+G7pWMgY2jDrW5oLlwiLCBhbGVydE9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5jb250ZW50Q29udGFpbmVySGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgLy8gYmFzaWNTcGFjaW5nIGzDoCBwYWRkaW5nQm90dG9tIGPhu6dhIGzhu5twIGNvbnRlbnQtY29udGFpbmVyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSB4IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZztcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudG9waWNUcmVlU2VydmljZS5saW5lYXJEYXRhJC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgICAgdGhpcy5saW5lYXJBcnRpY2xlQ2F0ZWdvcnlBcnJheSA9IHg7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudG9waWNUcmVlU2VydmljZS5zdGF0dXMkLnN1YnNjcmliZSgoeCkgPT4ge1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5Ub3BpY1RyZWVTZXJ2aWNlLnN0YXR1cyQgY2hhbmdlc1wiLCB4KVxuXG4gICAgICAgIGNvbnN0IG5ld0FjdGl2ZUlkczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgeC5hY3RpdmVLZXlzLm1hcCgoaykgPT4ge1xuICAgICAgICAgIG5ld0FjdGl2ZUlkcy5wdXNoKE51bWJlcihrKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFjdGl2ZUlkcyA9IG5ld0FjdGl2ZUlkcztcbiAgICAgICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlICE9PSBFbnVtQ29yZUFydGljbGVDYXRlZ29yeVRyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5hY3RpdmVJZHM7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmFjdGl2ZUlkcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZEtleSA9IHguc2VsZWN0ZWRLZXk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuc2VhcmNoJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHgpID0+IHggIT09IG51bGwpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgc3dpdGNoTWFwKCh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3dpdGNoTWFwIHdvcmtzJyk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVjdXJzaXZlU2VydmljZS5maW5kSXRlbSh0ZXh0LCB0aGlzLmRhdGEpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnRvcGljVHJlZVNlcnZpY2Uuc3RhdHVzJFxuICAgICAgICAucGlwZShmaWx0ZXIoKHZhbHVlKSA9PiAhISF0aGlzLmluaXRpYWxpemluZyAmJiAhIXZhbHVlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICAgIGlmICghIWxvY2FsU3RvcmFnZSkge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NvcmVPcmdUcmVlU3RhdHVzJywgSlNPTi5zdHJpbmdpZnkoeCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMubGFuZyA9IHgpKSk7XG5cbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0KCk6IHZvaWQge1xuXG4gICAgLy8gaGVpZ2h0IGlzIG5vdCBnaXZlbiBhbmQgdGhlIHRyZWUgcmVzaXplIGFzIHN0YW5kYXJkXG4gICAgaWYgKCEhIXRoaXMuaGVpZ2h0KSB7XG4gICAgICBjb25zdCBzaXplSGVhZGVySGVpZ2h0ID0gTnVtYmVyKFxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWhlYWRlci1oZWlnaHQnKVxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNpemVDb3JlUGFnZUhlYWRlckhlaWdodCA9IE51bWJlcihcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1jb3JlLXBhZ2UtaGVhZGVyLWhlaWdodCcpXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBzaXplSGVhZGVySGVpZ2h0IC0gc2l6ZUNvcmVQYWdlSGVhZGVySGVpZ2h0O1xuXG4gICAgICBjb25zdCBwYWdlSGVhZGVySGVpZ2h0ID0gTnVtYmVyKFxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnZS1oZWFkZXItaGVpZ2h0JylcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSBOdW1iZXIoXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXG4gICAgICApO1xuICAgICAgY29uc3Qgc2l6ZU1hcmdpbkNvcmVQYWdpbmF0aW9uRnVsbCA9IE51bWJlcihcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1tYXJnaW4tY29yZS1wYWdpbmF0aW9uJylcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcbiAgICAgICk7XG5cblxuICAgICAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0IC0gcGFnZUhlYWRlckhlaWdodCAtIHBhZ2luYXRpb25IZWlnaHQgKyBzaXplTWFyZ2luQ29yZVBhZ2luYXRpb25GdWxsO1xuICAgICAgY29uc29sZS5sb2coaGVpZ2h0KTtcblxuICAgICAgdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICctLWhlaWdodCcsIGhlaWdodCArICdweCdcbiAgICAgICk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICctLWhlaWdodCcsIHRoaXMuaGVpZ2h0ICsgJ3B4J1xuICAgICAgKTtcbiAgICB9XG5cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLnRvcGljVHJlZURhdGEkLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YSA9IHg7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJuZXcgRGF0YSBjb21pbmdcIiwgdGhpcy5kYXRhLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgICAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YS5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pXG4gIH1cblxuICBvbkl0ZW1DbGlja0xvY2FsKGU6IElBcnRpY2xlQ2F0ZWdvcnlUcmVlSXRlbSk6IHZvaWQge1xuICAgIHRoaXMubGluZWFyQXJ0aWNsZUNhdGVnb3J5QXJyYXkgLm1hcCgoeCkgPT4gKHguYWN0aXZlID0gZmFsc2UpKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYnVpbGRUcmVlRGF0YSgpKTtcbiAgfVxuXG4gIG9uVG9nZ2xlSXRlbShlOiBJQXJ0aWNsZUNhdGVnb3J5VHJlZUl0ZW0pIHtcbiAgICBjb25zdCBjbG9uZUNvcHk6IElBcnRpY2xlQ2F0ZWdvcnlUcmVlSXRlbVtdID0gSlNPTi5wYXJzZShcbiAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMubGluZWFyQXJ0aWNsZUNhdGVnb3J5QXJyYXkpXG4gICAgKTtcbiAgICBjb25zdCBmaWx0ZXIgPSBjbG9uZUNvcHkuZmlsdGVyKCh4KSA9PiB4LmlkID09PSBlLmlkKTtcblxuICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAxKSB7XG4gICAgICBmaWx0ZXJbMF0uZXhwYW5kZWQgPSAhISFlLmV4cGFuZGVkO1xuICAgIH1cbiAgICB0aGlzLmxpbmVhckFydGljbGVDYXRlZ29yeUFycmF5ID0gY2xvbmVDb3B5O1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5idWlsZFRyZWVEYXRhKCkpO1xuICB9XG5cbiAgYnVpbGRUcmVlRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgY2xvbmVDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmxpbmVhckFydGljbGVDYXRlZ29yeUFycmF5KSk7XG5cbiAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIENyZWF0ZSBhIG5ld1xuXG4gICAgICBjb25zb2xlLmxvZyhcIvCfn6Lwn5+iIFdvcmtlciB3b3Jrc1wiKTtcblxuICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0KTtcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKHsgZGF0YSB9KSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGEubGlzdDtcbiAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhPy5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgbGlzdDogY2xvbmVDb3B5LFxuICAgICAgICBrZXlGaWVsZDogJ2lkJyxcbiAgICAgICAgdGl0bGVGaWVsZDogJ25hbWUnLFxuICAgICAgICBwYXJlbnRGaWVsZDogJ3BhcmVudElkJyxcbiAgICAgICAgYWN0aXZlRmllbGQ6ICdhY3RpdmUnLFxuICAgICAgICAvL2luaGVyaXRhbnRBY3RpdmVGaWVsZDogJ2luaGVyaXRhbnRBY3RpdmUnLFxuICAgICAgICBjaGVja2VkRmllbGQ6ICdjaGVja2VkJyxcbiAgICAgICAgZXhwYW5kZWRGaWVsZDogJ2V4cGFuZCcsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2ViIHdvcmtlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC5cbiAgICAgIC8vIFlvdSBzaG91bGQgYWRkIGEgZmFsbGJhY2sgc28gdGhhdCB5b3VyIHByb2dyYW0gc3RpbGwgZXhlY3V0ZXMgY29ycmVjdGx5LlxuICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy50b3BpY1RyZWVTZXJ2aWNlLnN0YXR1cyQudmFsdWU7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXG4gICAgICAgICAgLmxpbmVyQXJyYXlUb05lc3RlZEFycmF5KFxuICAgICAgICAgICAgY2xvbmVDb3B5LFxuICAgICAgICAgICAgJ2lkJyxcbiAgICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICAgICdwYXJlbnRJZCcsXG4gICAgICAgICAgICAnYWN0aXZlJyxcbiAgICAgICAgICAgICdjaGVja2VkJyxcbiAgICAgICAgICAgICdleHBhbmQnLFxuICAgICAgICAgICAgLy9zdGF0dXNcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgob2JqKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmoubGlzdDtcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBvbkV4cGFuZFRvZ2dsZXJDbGljayhlOiBJQXJ0aWNsZUNhdGVnb3J5VHJlZUl0ZW0sIGV2ZW50OiBhbnkpOiB2b2lkIHtcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgbmV3VmFsdWUgPSAhZS50cmVlJEV4cGFuZGVkO1xuICAgIGUudHJlZSRFeHBhbmRlZCA9IG5ld1ZhbHVlO1xuXG4gICAgLy8gdXBkYXRpbmcgc3RhdHVzIHdpdGggbmV3VmFsdWVcbiAgICBjb25zdCBjdXJyZW50RXhwYW5kZWRJZHMgPVxuICAgICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLnN0YXR1cyQudmFsdWU/LmV4cGFuZGVkS2V5cztcbiAgICBsZXQgbmV3RXhwYW5kZWRJZHMgPSBjdXJyZW50RXhwYW5kZWRJZHM/LmZpbHRlcihcbiAgICAgIChfKSA9PiAhISFjdXJyZW50RXhwYW5kZWRJZHMuaW5jbHVkZXMoZS5pZC50b1N0cmluZygpKVxuICAgICk7XG5cbiAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgIG5ld0V4cGFuZGVkSWRzPy5wdXNoKGUuaWQudG9TdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgbmV3RXhwYW5kZWRJZHM/LnNvcnQoKTtcblxuICAgIGNvbnN0IG5ld0V4cGFuZGVkS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBuZXdFeHBhbmRlZElkcy5tYXAoKHgpID0+IG5ld0V4cGFuZGVkS2V5cy5wdXNoKHgudG9TdHJpbmcoKSkpO1xuXG4gICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLnN0YXR1cyQubmV4dCh7XG4gICAgICAuLi50aGlzLnRvcGljVHJlZVNlcnZpY2Uuc3RhdHVzJC52YWx1ZSEsXG4gICAgICBleHBhbmRlZEtleXM6IG5ld0V4cGFuZGVkS2V5cyxcbiAgICB9KTtcbiAgfVxuXG4gIG9uSXRlbUNoZWNrKGU6IElBcnRpY2xlQ2F0ZWdvcnlUcmVlSXRlbSwgbmV3VmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1DbGljaz8uZW1pdChlKTtcbiAgICBpZiAodGhpcy5hY2Nlc3Nvck1vZGUgIT09IEVudW1Db3JlQXJ0aWNsZUNhdGVnb3J5VHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRCkgcmV0dXJuO1xuXG4gICAgLy8gV2UgaGF2ZSB0aGlzIHZhciB0byBob2xkIG5vZGVzIHRoYXQgYXJlIGJlaW5nIGNoYW5nZWRcbiAgICBsZXQgdG9nZ2xlZElkczogbnVtYmVyW107XG4gICAgLy8gV2Ugc2hvdWxkIGNhbGN1bGF0ZSBhIG5ldyBzdGF0ZSBpbnRvIHRoaXMgdmFyOiBcbiAgICBjb25zdCBuZXdDaGVja2VkSWRzOiBudW1iZXJbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jaGVja2VkSWRzKSk7XG5cbiAgICAvLyBXZSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlciB0b2dnbGVkSWRzIGNoYW5nZWRcbiAgICBjb25zdCBjaGFuZ2VWYWx1ZSA9ICgpID0+IHtcblxuICAgICAgLy8gSWYgbmV3VmFsdWUgPT09IHRydWUsIHdlIHdpbGwgZGlzY3RpbnRseSBwdXNoIGNoYW5nZWQgaWRzIHRvIHRoZSBzdGF0ZVxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHdpbGwgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgc3RhdGVcbiAgICAgIGlmICghIW5ld1ZhbHVlKSB7XG4gICAgICAgIHRvZ2dsZWRJZHMubWFwKHggPT4ge1xuICAgICAgICAgIGlmICghISFuZXdDaGVja2VkSWRzLmluY2x1ZGVzKHgpKSB7XG4gICAgICAgICAgICBuZXdDaGVja2VkSWRzLnB1c2goeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAvLyBUaGVuIGFzaWduIHRoZSBzdGF0ZSB0byB0aGUgbmV3Q2hlY2tlZElkc1xuICAgICAgICB0aGlzLmNoZWNrZWRJZHMgPSBuZXdDaGVja2VkSWRzO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXdDaGVja2VkSWRzLmZpbHRlcih4ID0+ICEhIXRvZ2dsZWRJZHMuaW5jbHVkZXMoeCkpXG4gICAgICAgIC8vIFRoZW4gYXNpZ24gdGhlIHN0YXRlIHRvIHRoZSBmaWx0ZXJcbiAgICAgICAgdGhpcy5jaGVja2VkSWRzID0gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBBZnRlciB0aGUgY2FzZXMgb2YgaWYvZWxzZSwgbWFrZSB0aGUgY29udHJvbCBjaGFuZ2Ugd2l0aCBvbkNoYW5nZVxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY2hlY2tlZElkcztcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5jaGVja2VkSWRzKTtcbiAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIC8qIHN0YXJ0OiBUSElTIENPREUgU0NPUEUgY2FsY3VsYXRlcyB0b2dnbGVkSWRzICovXG4gICAgaWYgKHRoaXMuY2hlY2tJbmhlcml0YW5jZSkge1xuICAgICAgLy8gSWYgdHJ1ZSwgYWxsIHRoZSBuZXN0ZWQgaXRlbXMgd2lsbCBiZSBjaGVja2VkL3VuY2hlY2tlZFxuICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXG4gICAgICAgIC5uZXN0ZWRUb2dnbGVDaGVjayhlLCBuZXdWYWx1ZSlcbiAgICAgICAgLnRoZW4oKHgpID0+IHtcblxuICAgICAgICAgIC8vIFRoZSBpZHMgaGF2ZSBiZWVuIGNoYW5nZWRcbiAgICAgICAgICB0b2dnbGVkSWRzID0geDtcblxuICAgICAgICAgIC8vIE5vdyB0b2dnbGVkSWRzIHdlcmUgc2V0LiBXZSBjYWxsIHRoZSBmdW5jdGlvbiB3ZSBkZWNsYXJlZFxuICAgICAgICAgIGNoYW5nZVZhbHVlKCk7XG5cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCh4OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHgpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHNpbXBseSB0b2dnbGUgY2hlY2sgZm9yIGN1cnJlbnQgaXRlbSBvbmx5XG4gICAgICB0b2dnbGVkSWRzID0gW2UuaWRdO1xuXG4gICAgICAvLyBOb3cgdG9nZ2xlZElkcyB3ZXJlIHNldC4gV2UgY2FsbCB0aGUgZnVuY3Rpb24gd2UgZGVjbGFyZWRcbiAgICAgIGNoYW5nZVZhbHVlKCk7XG5cbiAgICB9XG4gICAgLyogZW5kOiBUSElTIENPREUgU0NPUEUgY2FsY3VsYXRlcyB0b2dnbGVkSWRzICovXG5cbiAgICAvLyBUaGF0IGlzLiBIYXBweSBkZWJ1Z2dpbmchXG5cbiAgfVxuXG4gIG9uQ2hlY2tJbmNsdWRlRGlzc29sdmVkQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc29sZS5sb2coXCJvbkNoZWNrSW5jbHVkZURpc3NvbHZlZENoYW5nZVwiLCB2YWx1ZSk7XG4gIH1cblxuICBvbkNoZWNrSW5oZXJpdGFuY2VDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRvcGljVHJlZVNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcbiAgICAgIC4uLnRoaXMudG9waWNUcmVlU2VydmljZS5zdGF0dXMkLnZhbHVlISxcbiAgICAgIGNoZWNrSW5oZXJpdGFuY2U6IHZhbHVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25PYmplY3RDbGljayhlOiBJQXJ0aWNsZUNhdGVnb3J5VHJlZUl0ZW0sIGV2ZW50OiBhbnkpOiB2b2lkIHtcblxuICAgIC8vIHJlbW92ZSBoaWdobGlnaHQgY2xhc3NcbiAgICAvLyBUTyBET1xuXG4gICAgaWYgKCEhZS5wcm90ZWN0ZWQpIHJldHVybjtcblxuICAgIHRoaXMuaXRlbUNsaWNrPy5lbWl0KGUpO1xuXG4gICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlID09PSBFbnVtQ29yZUFydGljbGVDYXRlZ29yeVRyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHJldHVybjtcbiAgICBsZXQgYWN0aXZlSWRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLm5lc3RlZFJlc2V0QWN0aXZlKHRoaXMuZGF0YSwgZmFsc2UpLnRoZW4oZmFsc2VBbGwgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJmYWxzZUFsbFwiLCBmYWxzZUFsbClcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hY2Nlc3Nvck1vZGUgPT09XG4gICAgICAgIEVudW1Db3JlQXJ0aWNsZUNhdGVnb3J5VHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFIHx8ICF0aGlzLmFjY2Vzc29yTW9kZVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIHRydWUsIGFsbCB0aGUgbmVzdGVkIGl0ZW1zIHdpbGwgYmUgYWN0aXZlLCB0aGUgb3RoZXJzIGFyZSBpbmFjdGl2ZVxuICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2VcbiAgICAgICAgICAubmVzdGVkUmVzZXRBY3RpdmUoZSwgdHJ1ZSlcbiAgICAgICAgICAudGhlbigoeCkgPT4ge1xuICAgICAgICAgICAgYWN0aXZlSWRzID0geDtcbiAgICAgICAgICAgIGFjdGl2ZUlkcy5zb3J0KCk7XG4gICAgICAgICAgICBjb25zdCBuZXdBY3RpdmVLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgYWN0aXZlSWRzLm1hcCgoeCkgPT4gbmV3QWN0aXZlS2V5cy5wdXNoKHgudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLnN0YXR1cyQubmV4dCh7XG4gICAgICAgICAgICAgIC4uLnRoaXMudG9waWNUcmVlU2VydmljZS5zdGF0dXMkLnZhbHVlISxcbiAgICAgICAgICAgICAgYWN0aXZlS2V5czogbmV3QWN0aXZlS2V5cyxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRLZXk6IGUuaWQudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUlkcyA9IGFjdGl2ZUlkcztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuYWN0aXZlSWRzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoYWN0aXZlSWRzKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHgpO1xuICAgICAgICAgIH0pO1xuICBcbiAgXG4gICAgICB9IGVsc2Uge1xuICBcbiAgICAgICAgLy8gQUNUSVZBVEVEX1NJTkdMRVxuICAgICAgICAvLyBPdGhlcndpc2Ugd2Ugc2ltcGx5IHNldCBjdXJyZW50IGl0ZW0gdG8gYmUgYWN0aXZlIG9ubHlcbiAgICAgICAgYWN0aXZlSWRzID0gW2UuaWRdO1xuICAgICAgICB0aGlzLmFjdGl2ZUlkcyA9IGFjdGl2ZUlkcztcbiAgXG4gICAgICAgIHRoaXMudG9waWNUcmVlU2VydmljZS5zdGF0dXMkLm5leHQoe1xuICAgICAgICAgIC4uLnRoaXMudG9waWNUcmVlU2VydmljZS5zdGF0dXMkLnZhbHVlISxcbiAgICAgICAgICBhY3RpdmVLZXlzOiBbZS5pZC50b1N0cmluZygpXSxcbiAgICAgICAgICBzZWxlY3RlZEtleTogZS5pZC50b1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgXG4gICAgICAgIHRoaXMub25DaGFuZ2UoYWN0aXZlSWRzKTtcbiAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50O1xuXG4gICAgaWYgKGRldGFpbCA9PT0gMikge1xuICAgICAgY29uc29sZS5sb2coJ1RoaXMgd2FzIGEgZGJsY2xpY2snKTtcbiAgICAgIHRoaXMuaXRlbURvdWJsZUNsaWNrLmVtaXQoZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBlO1xuXG4gIH1cblxuICBvblNlYXJjaENoYW5nZSh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaCQubmV4dCh0ZXh0KTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIm5nQWZ0ZXJDb250ZW50SW5pdFwiKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCgoeCkgPT4geD8udW5zdWJzY3JpYmUoKSk7XG5cbiAgICBpZiAoISF0aGlzLmluc3RhbmNlTnVtYmVyKSB7XG4gICAgICBjb25zdCB0cnlUb0ZpbmQgPSB0aGlzLnRvcGljVHJlZVNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcbiAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuaW5zdGFuY2VOdW1iZXJcbiAgICAgICk7XG5cbiAgICAgIGlmICghIXRyeVRvRmluZC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3SW5zdGFuY2VzID0gdGhpcy50b3BpY1RyZWVTZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoXG4gICAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgIT09IHRoaXMuaW5zdGFuY2VOdW1iZXJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLmluc3RhbmNlcyA9IG5ld0luc3RhbmNlcztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtdG9waWMtdHJlZS1jb250YWluZXJcIiBbY2xhc3MuZnVsbC13aWR0aF09XCIhIWZ1bGxXaWR0aE1vZGVcIiAqbmdJZj1cIiEhZGF0YVwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgICBwb3NpdGlvbiA6ICdyZWxhdGl2ZScsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0ICsgJ3B4J1xuICAgIH1cIj5cbiAgICA8ZGl2ICNkaXNwbGF5Q29udGVudCBjbGFzcz1cImN1c3RvbS1vcmctdHJlZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29yZS1vcmctdHJlZS1oZWFkZXIgZC1mbGV4LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGU6IGxhbmdcIiBbY2xhc3MuZnVsbC13aWR0aF09XCIhIWZ1bGxXaWR0aE1vZGVcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAtIGxheW91dFNlcnZpY2UuY29yZU9yZ1RyZWVUb3BIZWlnaHQgLSBsYXlvdXRTZXJ2aWNlLmNvcmVPcmdUcmVlQm90dG9tSGVpZ2h0ICsgJ3B4J1xuICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8Y29yZS1sb2FkaW5nLXN1cmZhY2UgW2xvYWRpbmddPVwibG9hZGluZ1wiIFtoZWlnaHRdPVwic2Nyb2xsQ29udGFpbmVySGVpZ2h0XCI+PC9jb3JlLWxvYWRpbmctc3VyZmFjZT5cbiAgICAgICAgICAgICAgICBAZm9yIChyb290IG9mIGRhdGE7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInJvb3RcIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhIXJvb3QudHJlZSRFeHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbTsgY29udGV4dDogeyBjb250ZXh0OiByb290IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgYm90dG9tOiAnMHB4JyxcbiAgICAgICAgICAgICAgICBsZWZ0OiAnMHB4JyxcbiAgICAgICAgICAgICAgICByaWdodDogJzBweCcsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBsYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogbGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcgKyAncHgnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogbGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcgKyAncHgnLFxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IGxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgKyAncHgnLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJ1xuICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJzaG93RGlzc29sdmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoZWNrSW5jbHVkZURpc3NvbHZlZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVUkuQ09SRV9PUkdfVFJFRS5TSE9XX09VVERBVEVEX1VOSVRTX0FCQlJFVklBVEVEJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1VJLkNPUkVfT1JHX1RSRUUuU0hPV19PVVREQVRFRF9VTklUUydcIiB0b29sdGlwUG9zaXRpb249XCJhYm92ZVwiPjwvY29yZS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2staW5oZXJpdGFuY2Utd3JhcHBlclwiICpuZ0lmPVwiYWNjZXNzb3JNb2RlID09PSAnQ0hFQ0tFRCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNoZWNrYm94ICpuZ0lmPVwic2hvd0NoZWNrSW5oZXJpdGFuY2VcIiBbKG5nTW9kZWwpXT1cImNoZWNrSW5oZXJpdGFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tJbmhlcml0YW5jZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVUkuQ09SRV9PUkdfVFJFRS5DSEVDS19JTkhFUklUQU5DRSdcIj48L2NvcmUtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbSBsZXQtY29udGV4dD1cImNvbnRleHRcIiBsZXQtaWQ9XCJjb250ZXh0LmlkXCIgbGV0LXRpdGxlPVwiY29udGV4dC50cmVlJFRpdGxlXCJcbiAgICAgICAgICAgICAgICBsZXQtaGlnaGxpZ2h0ZWQ9XCJjb250ZXh0LnRyZWUkSGlnaGxpZ2h0ZWRcIiBsZXQtaGFzQ2hpbGRyZW49XCJjb250ZXh0LnRyZWUkSGFzQ2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgIGxldC1oYXNBY3RpdmVDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNBY3RpdmVDaGlsZHJlblwiIGxldC1jaGlsZHJlbj1cImNvbnRleHQudHJlZSRDaGlsZHJlblwiXG4gICAgICAgICAgICAgICAgbGV0LWV4cGFuZGVkPVwiY29udGV4dC50cmVlJEV4cGFuZGVkXCIgbGV0LWlzQWN0aXZlPVwiY29udGV4dC5pc0FjdGl2ZVwiIGxldC1hY3RpdmU9XCJjb250ZXh0LnRyZWUkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICBsZXQtY2hlY2tlZD1cImNvbnRleHQudHJlZSRDaGVja2VkXCIgbGV0LXByb3RlY3RlZD1cImNvbnRleHQucHJvdGVjdGVkXCI+XG5cbiAgICAgICAgICAgICAgICBAaWYgKCghc2hvd0Rpc3NvbHZlZCAmJiAhIWlzQWN0aXZlKSB8fCAoISFzaG93RGlzc29sdmVkKSkge1xuICAgICAgICAgICAgICAgIDxsaSBbY2xhc3MuaGFzLWNoaWxkcmVuXT1cIiEhaGFzQ2hpbGRyZW5cIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhaGFzQ2hpbGRyZW4gJiYgISEhZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9uT2JqZWN0Q2xpY2soY29udGV4dCwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICgoISFzaG93RGlzc29sdmVkICYmICEhaGFzQ2hpbGRyZW4pIHx8ICghc2hvd0Rpc3NvbHZlZCAmJiAhIWhhc0FjdGl2ZUNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJleHBhbmQtdG9nZ2xlciBmZWF0aGVyLWNoZXZyb24tZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kVG9nZ2xlckNsaWNrKGNvbnRleHQsICRldmVudClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjY2Vzc29yTW9kZSA9PT0gJ0NIRUNLRUQnICYmICEhIXByb3RlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtY2hlY2tib3ggKG9uQ2xpY2spPVwib25JdGVtQ2hlY2soY29udGV4dCwgJGV2ZW50KVwiIFtpbnB1dFZhbHVlXT1cImNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPjwvY29yZS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvYmplY3QgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVJZHMuaW5jbHVkZXMoaWQpXCIgW2NsYXNzLmhpZ2hsaWdodGVkXT1cImhpZ2hsaWdodGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzc29sdmVkXT1cIiFpc0FjdGl2ZVwiIFtjbGFzcy5wcm90ZWN0ZWRdPVwicHJvdGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRpdGxlIHwgdHJhbnNsYXRlOiBsYW5nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L29iamVjdD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghIWlubGluZUV4dHJhVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVFeHRyYVRlbXBsYXRlUmVmOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNvbnRleHQgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICA8dWwgW2NsYXNzLmNvbGxhcHNlZF09XCIgISEhZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFleHBhbmRlZCB8fCAhIWZ1bGxSZW5kZXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNoaWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG5cbjwvZGl2PiJdfQ==
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS10b3BpYy10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRvcGljLXRyZWUvY29yZS10b3BpYy10cmVlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXRvcGljLXRyZWUvY29yZS10b3BpYy10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUMsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBOEIsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwTSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZFQUE2RSxDQUFDO0FBQzFILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUUxRyxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckgsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBS2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixD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O3NCQUF4QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDTyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDTSxrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb3JlUmVkdWNlckljb25Db21wb25lbnQgfSBmcm9tICcuLi9jb3JlLXJlZHVjZXItaWNvbi9jb3JlLXJlZHVjZXItaWNvbi9jb3JlLXJlZHVjZXItaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi4vdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb3BpY1RyZWVTZXJ2aWNlLCBJVG9waWNUcmVlSW5zdGFuY2UsIElBcnRpY2xlQ2F0ZWdvcnlUcmVlSXRlbSwgSVRvcGljVHJlZUxpbmVhckl0ZW0gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b3BpYy10cmVlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBSZWN1cnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XG5pbXBvcnQgeyBFbnVtVHJhbnNsYXRlS2V5IH0gZnJvbSAnYWxwaGEtZ2xvYmFsLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0IH0gZnJvbSAnLi4vLi4vLi4vYXNzZXRzL2pzL3Jlc2N1c2l2ZV93ayc7XG5pbXBvcnQgeyBDb3JlQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWNoZWNrYm94L2NvcmUtY2hlY2tib3gvY29yZS1jaGVja2JveC5jb21wb25lbnQnO1xuXG5leHBvcnQgZW51bSBFbnVtQ29yZUFydGljbGVDYXRlZ29yeVRyZWVhQWNjZXNzb3JNb2RlIHtcbiAgQUNUSVZBVEVEX1NJTkdMRSA9ICdBQ1RJVkFURURfU0lOR0xFJyxcbiAgQUNUSVZBVEVEX0lOSEVSSVRBTkNFID0gJ0FDVElWQVRFRF9JTkhFUklUQU5DRScsXG4gIENIRUNLRUQgPSAnQ0hFQ0tFRCcsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NvcmUtdG9waWMtdHJlZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgQ29yZUxvYWRpbmdTdXJmYWNlQ29tcG9uZW50LFxuICAgIENvcmVSZWR1Y2VySWNvbkNvbXBvbmVudCxcbiAgICBDb3JlQ2hlY2tib3hDb21wb25lbnQsXG4gICAgVHJhbnNsYXRlUGlwZSxcbiAgICBUb29sdGlwRGlyZWN0aXZlLFxuICAgIE5nVGVtcGxhdGVPdXRsZXRcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtdG9waWMtdHJlZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9jb3JlLXRvcGljLXRyZWUuY29tcG9uZW50LnNjc3MnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IENvcmVUb3BpY1RyZWVDb21wb25lbnQsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZVRvcGljVHJlZUNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGxpbmVDb2xvcjogc3RyaW5nID0gJ3RyYW5zcGFyZW50JztcbiAgQElucHV0KCkgdHJhbnNsYXRlVGV4dCE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGZ1bGxXaWR0aE1vZGUhOiBib29sZWFuO1xuICBASW5wdXQoKSBhY2Nlc3Nvck1vZGUhOiBFbnVtQ29yZUFydGljbGVDYXRlZ29yeVRyZWVhQWNjZXNzb3JNb2RlO1xuICBASW5wdXQoKSBmdWxsUmVuZGVyaW5nITogYm9vbGVhbjtcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyOyAvLyBDaGnhu4F1IGNhbyBj4bunYSBDb3JlT3JnVHJlZSBj4bqnbiDEkcaw4bujYyB0cnV54buBbiB2w6BvIVxuICBASW5wdXQoKSBkaXNhYmxlZExvb3BFeHBhbmQhOiBib29sZWFuO1xuICBASW5wdXQoKSBzaG93Q2hlY2tJbmhlcml0YW5jZSE6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgaW5saW5lRXh0cmFUZW1wbGF0ZVJlZiE6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQE91dHB1dCgpIGl0ZW1Eb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGl0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkaXNwbGF5Q29udGVudCcpIGRpc3BsYXlDb250ZW50ITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncmVkdWNlZEljb25XcmFwcGVyJykgcmVkdWNlZEljb25XcmFwcGVyITogRWxlbWVudFJlZjtcblxuICBvdmVycmlkZSB2YWx1ZSE6IG51bWJlcltdO1xuXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUob2JqOiBudW1iZXJbXSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBvYmo7XG5cbiAgICBzd2l0Y2ggKHRoaXMuYWNjZXNzb3JNb2RlKSB7XG4gICAgICBjYXNlIEVudW1Db3JlQXJ0aWNsZUNhdGVnb3J5VHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRDpcbiAgICAgICAgaWYgKCEhb2JqKSB7XG4gICAgICAgICAgY29uc3QgY2hlY2tlZEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgdGhpcy5jaGVja2VkSWRzID0gb2JqOyAvLyA8PT09IDI0LzEwLzIwMjNcbiAgICAgICAgICBvYmoubWFwKHggPT4gY2hlY2tlZEtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZS53cml0ZVZhbHVlQ2hlY2tlZChjaGVja2VkS2V5cywgdGhpcy5kYXRhLCB0aGlzLmRpc2FibGVkTG9vcEV4cGFuZCkuc3Vic2NyaWJlKF8gPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmRhdGEgJiYgISF0aGlzLmRhdGE/Lmxlbmd0aCkgdGhpcy5kYXRhWzBdLnRyZWUkRXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFbnVtQ29yZUFydGljbGVDYXRlZ29yeVRyZWVhQWNjZXNzb3JNb2RlLkFDVElWQVRFRF9TSU5HTEU6XG4gICAgICBjYXNlIEVudW1Db3JlQXJ0aWNsZUNhdGVnb3J5VHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFOlxuICAgICAgICBpZiAoISFvYmopIHtcbiAgICAgICAgICBjb25zdCBhY3RpdmF0ZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIG9iai5tYXAoeCA9PiBhY3RpdmF0ZWRLZXlzLnB1c2goeC50b1N0cmluZygpKSk7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2Uud3JpdGVWYWx1ZUFjdGl2YXRlZChhY3RpdmF0ZWRLZXlzLCB0aGlzLmRhdGEsIHRoaXMuZGlzYWJsZWRMb29wRXhwYW5kKS5zdWJzY3JpYmUoXyA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cblxuICAgIGlmICh0aGlzLmFjY2Vzc29yTW9kZSA9PT0gRW51bUNvcmVBcnRpY2xlQ2F0ZWdvcnlUcmVlYUFjY2Vzc29yTW9kZS5DSEVDS0VEKSB7XG5cbiAgICB9IGVsc2UgLyogRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfU0lOR0xFIG9yIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFICovIHtcblxuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIHNldERpc2FibGVkU3RhdGUoZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gIH1cblxuICBhY3RpdmVJZHM6IG51bWJlcltdID0gW107XG5cbiAgY2hlY2tlZElkczogbnVtYmVyW10gPSBbXTtcblxuICAvLyBmb3IgZGVidWdnaW5nXG4gIC8vIGFjdGl2ZUlkc1N0cmluZyE6IHN0cmluZzsgIFxuICBkYXRhITogSUFydGljbGVDYXRlZ29yeVRyZWVJdGVtW107XG4gIGxvYWRpbmchOiBib29sZWFuO1xuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBsaW5lYXJBcnRpY2xlQ2F0ZWdvcnlBcnJheSE6IElUb3BpY1RyZWVMaW5lYXJJdGVtW107XG4gIHNlYXJjaCE6IHN0cmluZztcbiAgc2VhcmNoJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgcmVkdWNlZCE6IGJvb2xlYW47XG4gIHNlYXJjaFBsYWNlaG9sZGVyID0gRW51bVRyYW5zbGF0ZUtleS5VSV9DT01NT05fUExBQ0VfSE9MREVSX1NFQVJDSF9IRVJFO1xuXG4gIGluaXRpYWxpemluZyE6IGJvb2xlYW47XG4gIGNoZWNrSW5oZXJpdGFuY2U6IGJvb2xlYW4gPSB0cnVlOyAvLyBkZWZhdWx0IHZhbHVlIGlzIHRydWVcbiAgc2hvd0Rpc3NvbHZlZDogYm9vbGVhbiA9IHRydWU7IC8vIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2VcbiAgc2VsZWN0ZWRLZXkhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNlbGVjdGVkSXRlbSE6IElUb3BpY1RyZWVMaW5lYXJJdGVtO1xuICBsYW5nITogc3RyaW5nO1xuICAvL3JlZHVjZWQkITogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+O1xuXG4gIGluc3RhbmNlTnVtYmVyITogbnVtYmVyO1xuICBzY3JvbGxDb250YWluZXJIZWlnaHQhOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy9wdWJsaWMgb3ZlcnJpZGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVjdXJzaXZlU2VydmljZTogUmVjdXJzaXZlU2VydmljZSxcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXG4gICAgcHVibGljIGxheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b3BpY1RyZWVTZXJ2aWNlOiBUb3BpY1RyZWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICkge1xuICAgIHN1cGVyKC8qaW5qZWN0b3IqLyk7XG4gICAgdGhpcy5pbml0aWFsaXppbmcgPSB0cnVlO1xuXG4gICAgLy8gdGhpcy5yZWR1Y2VkJCA9IHRoaXMuY29yZU9yZ1RyZWVTdGF0ZS5jb3JlT3JnVHJlZVJlZHVjZWQkO1xuXG4gICAgdGhpcy5pbml0aWFsaXppbmcgPSBmYWxzZTtcblxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSkge1xuICAgICAgdGhpcy5yZXNpemVIZWlnaHQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgIHRoaXMuaW5zdGFuY2VOdW1iZXIgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICBjb25zdCBuZXdJbnN0YW5jZTogSVRvcGljVHJlZUluc3RhbmNlID0ge1xuICAgICAgaW5zdGFuY2VOdW1iZXI6IHRoaXMuaW5zdGFuY2VOdW1iZXIsXG4gICAgICBzZWxlY3RlZEtleSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpLFxuICAgICAgYWN0aXZlS2V5cyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKSxcbiAgICAgIGNoZWNrZWRLZXlzJDogbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pLFxuICAgICAgZXhwYW5kZWRLZXlzJDogbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pLFxuICAgICAgY2hlY2tJbmhlcml0YW5jZSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSlcbiAgICB9XG4gICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLmluc3RhbmNlcy5wdXNoKG5ld0luc3RhbmNlKVxuXG4gICAgLy8gQ2hlY2sgeGVtIGNoaeG7gXUgY2FvIGhlaWdodCBjw7MgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgbyBoYXkga2jDtG5nXG4gICAgaWYgKHRoaXMuaGVpZ2h0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAvL3RoaXMuYWxlcnRTZXJ2aWNlLndhcm4oXCJDb3JlT3JnVHJlZSBraMO0bmcgbmjhuq1uIMSRxrDhu6NjIGNoaeG7gXUgY2FvIChoZWlnaHQpIHRydXnhu4FuIHbDoG8gdOG7qyBs4bubcCBuZ2/DoGkuIENoaeG7gXUgY2FvIG3hurdjIMSR4buLbmggc+G6vSDEkcaw4bujYyB0w61uaCB0b8OhbiBk4buxYSB2w6BvIGLhu5EgY+G7pWMgY2jDrW5oLlwiLCBhbGVydE9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIHRoaXMubGF5b3V0U2VydmljZS5jb250ZW50Q29udGFpbmVySGVpZ2h0JC5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgLy8gYmFzaWNTcGFjaW5nIGzDoCBwYWRkaW5nQm90dG9tIGPhu6dhIGzhu5twIGNvbnRlbnQtY29udGFpbmVyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSB4IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZztcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudG9waWNUcmVlU2VydmljZS5saW5lYXJEYXRhJC5zdWJzY3JpYmUoKHgpID0+IHtcbiAgICAgICAgdGhpcy5saW5lYXJBcnRpY2xlQ2F0ZWdvcnlBcnJheSA9IHg7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMudG9waWNUcmVlU2VydmljZS5zdGF0dXMkLnN1YnNjcmliZSgoeCkgPT4ge1xuXG4gICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5Ub3BpY1RyZWVTZXJ2aWNlLnN0YXR1cyQgY2hhbmdlc1wiLCB4KVxuXG4gICAgICAgIGNvbnN0IG5ld0FjdGl2ZUlkczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgeC5hY3RpdmVLZXlzLm1hcCgoaykgPT4ge1xuICAgICAgICAgIG5ld0FjdGl2ZUlkcy5wdXNoKE51bWJlcihrKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFjdGl2ZUlkcyA9IG5ld0FjdGl2ZUlkcztcbiAgICAgICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlICE9PSBFbnVtQ29yZUFydGljbGVDYXRlZ29yeVRyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5hY3RpdmVJZHM7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmFjdGl2ZUlkcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZEtleSA9IHguc2VsZWN0ZWRLZXk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuc2VhcmNoJFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHgpID0+IHggIT09IG51bGwpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSg1MDApLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgc3dpdGNoTWFwKCh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3dpdGNoTWFwIHdvcmtzJyk7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVjdXJzaXZlU2VydmljZS5maW5kSXRlbSh0ZXh0LCB0aGlzLmRhdGEpO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLnRvcGljVHJlZVNlcnZpY2Uuc3RhdHVzJFxuICAgICAgICAucGlwZShmaWx0ZXIoKHZhbHVlKSA9PiAhISF0aGlzLmluaXRpYWxpemluZyAmJiAhIXZhbHVlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICAgIGlmICghIWxvY2FsU3RvcmFnZSkge1xuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NvcmVPcmdUcmVlU3RhdHVzJywgSlNPTi5zdHJpbmdpZnkoeCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSgoeCkgPT4gKHRoaXMubGFuZyA9IHgpKSk7XG5cbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0KCk6IHZvaWQge1xuXG4gICAgLy8gaGVpZ2h0IGlzIG5vdCBnaXZlbiBhbmQgdGhlIHRyZWUgcmVzaXplIGFzIHN0YW5kYXJkXG4gICAgaWYgKCEhIXRoaXMuaGVpZ2h0KSB7XG4gICAgICBjb25zdCBzaXplSGVhZGVySGVpZ2h0ID0gTnVtYmVyKFxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWhlYWRlci1oZWlnaHQnKVxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHNpemVDb3JlUGFnZUhlYWRlckhlaWdodCA9IE51bWJlcihcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1jb3JlLXBhZ2UtaGVhZGVyLWhlaWdodCcpXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBzaXplSGVhZGVySGVpZ2h0IC0gc2l6ZUNvcmVQYWdlSGVhZGVySGVpZ2h0O1xuXG4gICAgICBjb25zdCBwYWdlSGVhZGVySGVpZ2h0ID0gTnVtYmVyKFxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnZS1oZWFkZXItaGVpZ2h0JylcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSBOdW1iZXIoXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXG4gICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXG4gICAgICApO1xuICAgICAgY29uc3Qgc2l6ZU1hcmdpbkNvcmVQYWdpbmF0aW9uRnVsbCA9IE51bWJlcihcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1tYXJnaW4tY29yZS1wYWdpbmF0aW9uJylcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcbiAgICAgICk7XG5cblxuICAgICAgY29uc3QgaGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0IC0gcGFnZUhlYWRlckhlaWdodCAtIHBhZ2luYXRpb25IZWlnaHQgKyBzaXplTWFyZ2luQ29yZVBhZ2luYXRpb25GdWxsO1xuICAgICAgY29uc29sZS5sb2coaGVpZ2h0KTtcblxuICAgICAgdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICctLWhlaWdodCcsIGhlaWdodCArICdweCdcbiAgICAgICk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICctLWhlaWdodCcsIHRoaXMuaGVpZ2h0ICsgJ3B4J1xuICAgICAgKTtcbiAgICB9XG5cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLnRvcGljVHJlZURhdGEkLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YSA9IHg7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJuZXcgRGF0YSBjb21pbmdcIiwgdGhpcy5kYXRhLCBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcbiAgICAgICAgICBpZiAoISF0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YS5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0pXG4gIH1cblxuICBvbkl0ZW1DbGlja0xvY2FsKGU6IElBcnRpY2xlQ2F0ZWdvcnlUcmVlSXRlbSk6IHZvaWQge1xuICAgIHRoaXMubGluZWFyQXJ0aWNsZUNhdGVnb3J5QXJyYXkgLm1hcCgoeCkgPT4gKHguYWN0aXZlID0gZmFsc2UpKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYnVpbGRUcmVlRGF0YSgpKTtcbiAgfVxuXG4gIG9uVG9nZ2xlSXRlbShlOiBJQXJ0aWNsZUNhdGVnb3J5VHJlZUl0ZW0pIHtcbiAgICBjb25zdCBjbG9uZUNvcHk6IElBcnRpY2xlQ2F0ZWdvcnlUcmVlSXRlbVtdID0gSlNPTi5wYXJzZShcbiAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMubGluZWFyQXJ0aWNsZUNhdGVnb3J5QXJyYXkpXG4gICAgKTtcbiAgICBjb25zdCBmaWx0ZXIgPSBjbG9uZUNvcHkuZmlsdGVyKCh4KSA9PiB4LmlkID09PSBlLmlkKTtcblxuICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAxKSB7XG4gICAgICBmaWx0ZXJbMF0uZXhwYW5kZWQgPSAhISFlLmV4cGFuZGVkO1xuICAgIH1cbiAgICB0aGlzLmxpbmVhckFydGljbGVDYXRlZ29yeUFycmF5ID0gY2xvbmVDb3B5O1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5idWlsZFRyZWVEYXRhKCkpO1xuICB9XG5cbiAgYnVpbGRUcmVlRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgY2xvbmVDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmxpbmVhckFydGljbGVDYXRlZ29yeUFycmF5KSk7XG5cbiAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIENyZWF0ZSBhIG5ld1xuXG4gICAgICBjb25zb2xlLmxvZyhcIvCfn6Lwn5+iIFdvcmtlciB3b3Jrc1wiKTtcblxuICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0KTtcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKHsgZGF0YSB9KSA9PiB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGEubGlzdDtcbiAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhPy5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgbGlzdDogY2xvbmVDb3B5LFxuICAgICAgICBrZXlGaWVsZDogJ2lkJyxcbiAgICAgICAgdGl0bGVGaWVsZDogJ25hbWUnLFxuICAgICAgICBwYXJlbnRGaWVsZDogJ3BhcmVudElkJyxcbiAgICAgICAgYWN0aXZlRmllbGQ6ICdhY3RpdmUnLFxuICAgICAgICAvL2luaGVyaXRhbnRBY3RpdmVGaWVsZDogJ2luaGVyaXRhbnRBY3RpdmUnLFxuICAgICAgICBjaGVja2VkRmllbGQ6ICdjaGVja2VkJyxcbiAgICAgICAgZXhwYW5kZWRGaWVsZDogJ2V4cGFuZCcsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2ViIHdvcmtlcnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC5cbiAgICAgIC8vIFlvdSBzaG91bGQgYWRkIGEgZmFsbGJhY2sgc28gdGhhdCB5b3VyIHByb2dyYW0gc3RpbGwgZXhlY3V0ZXMgY29ycmVjdGx5LlxuICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy50b3BpY1RyZWVTZXJ2aWNlLnN0YXR1cyQudmFsdWU7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXG4gICAgICAgICAgLmxpbmVyQXJyYXlUb05lc3RlZEFycmF5KFxuICAgICAgICAgICAgY2xvbmVDb3B5LFxuICAgICAgICAgICAgJ2lkJyxcbiAgICAgICAgICAgICduYW1lJyxcbiAgICAgICAgICAgICdwYXJlbnRJZCcsXG4gICAgICAgICAgICAnYWN0aXZlJyxcbiAgICAgICAgICAgICdjaGVja2VkJyxcbiAgICAgICAgICAgICdleHBhbmQnLFxuICAgICAgICAgICAgLy9zdGF0dXNcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgob2JqKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmoubGlzdDtcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBvbkV4cGFuZFRvZ2dsZXJDbGljayhlOiBJQXJ0aWNsZUNhdGVnb3J5VHJlZUl0ZW0sIGV2ZW50OiBhbnkpOiB2b2lkIHtcblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgY29uc3QgbmV3VmFsdWUgPSAhZS50cmVlJEV4cGFuZGVkO1xuICAgIGUudHJlZSRFeHBhbmRlZCA9IG5ld1ZhbHVlO1xuXG4gICAgLy8gdXBkYXRpbmcgc3RhdHVzIHdpdGggbmV3VmFsdWVcbiAgICBjb25zdCBjdXJyZW50RXhwYW5kZWRJZHMgPVxuICAgICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLnN0YXR1cyQudmFsdWU/LmV4cGFuZGVkS2V5cztcbiAgICBsZXQgbmV3RXhwYW5kZWRJZHMgPSBjdXJyZW50RXhwYW5kZWRJZHM/LmZpbHRlcihcbiAgICAgIChfKSA9PiAhISFjdXJyZW50RXhwYW5kZWRJZHMuaW5jbHVkZXMoZS5pZC50b1N0cmluZygpKVxuICAgICk7XG5cbiAgICBpZiAobmV3VmFsdWUpIHtcbiAgICAgIG5ld0V4cGFuZGVkSWRzPy5wdXNoKGUuaWQudG9TdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgbmV3RXhwYW5kZWRJZHM/LnNvcnQoKTtcblxuICAgIGNvbnN0IG5ld0V4cGFuZGVkS2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBuZXdFeHBhbmRlZElkcy5tYXAoKHgpID0+IG5ld0V4cGFuZGVkS2V5cy5wdXNoKHgudG9TdHJpbmcoKSkpO1xuXG4gICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLnN0YXR1cyQubmV4dCh7XG4gICAgICAuLi50aGlzLnRvcGljVHJlZVNlcnZpY2Uuc3RhdHVzJC52YWx1ZSEsXG4gICAgICBleHBhbmRlZEtleXM6IG5ld0V4cGFuZGVkS2V5cyxcbiAgICB9KTtcbiAgfVxuXG4gIG9uSXRlbUNoZWNrKGU6IElBcnRpY2xlQ2F0ZWdvcnlUcmVlSXRlbSwgbmV3VmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1DbGljaz8uZW1pdChlKTtcbiAgICBpZiAodGhpcy5hY2Nlc3Nvck1vZGUgIT09IEVudW1Db3JlQXJ0aWNsZUNhdGVnb3J5VHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRCkgcmV0dXJuO1xuXG4gICAgLy8gV2UgaGF2ZSB0aGlzIHZhciB0byBob2xkIG5vZGVzIHRoYXQgYXJlIGJlaW5nIGNoYW5nZWRcbiAgICBsZXQgdG9nZ2xlZElkczogbnVtYmVyW107XG4gICAgLy8gV2Ugc2hvdWxkIGNhbGN1bGF0ZSBhIG5ldyBzdGF0ZSBpbnRvIHRoaXMgdmFyOiBcbiAgICBjb25zdCBuZXdDaGVja2VkSWRzOiBudW1iZXJbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jaGVja2VkSWRzKSk7XG5cbiAgICAvLyBXZSB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbiBhZnRlciB0b2dnbGVkSWRzIGNoYW5nZWRcbiAgICBjb25zdCBjaGFuZ2VWYWx1ZSA9ICgpID0+IHtcblxuICAgICAgLy8gSWYgbmV3VmFsdWUgPT09IHRydWUsIHdlIHdpbGwgZGlzY3RpbnRseSBwdXNoIGNoYW5nZWQgaWRzIHRvIHRoZSBzdGF0ZVxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHdpbGwgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgc3RhdGVcbiAgICAgIGlmICghIW5ld1ZhbHVlKSB7XG4gICAgICAgIHRvZ2dsZWRJZHMubWFwKHggPT4ge1xuICAgICAgICAgIGlmICghISFuZXdDaGVja2VkSWRzLmluY2x1ZGVzKHgpKSB7XG4gICAgICAgICAgICBuZXdDaGVja2VkSWRzLnB1c2goeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAvLyBUaGVuIGFzaWduIHRoZSBzdGF0ZSB0byB0aGUgbmV3Q2hlY2tlZElkc1xuICAgICAgICB0aGlzLmNoZWNrZWRJZHMgPSBuZXdDaGVja2VkSWRzO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXdDaGVja2VkSWRzLmZpbHRlcih4ID0+ICEhIXRvZ2dsZWRJZHMuaW5jbHVkZXMoeCkpXG4gICAgICAgIC8vIFRoZW4gYXNpZ24gdGhlIHN0YXRlIHRvIHRoZSBmaWx0ZXJcbiAgICAgICAgdGhpcy5jaGVja2VkSWRzID0gZmlsdGVyO1xuICAgICAgfVxuXG4gICAgICAvLyBBZnRlciB0aGUgY2FzZXMgb2YgaWYvZWxzZSwgbWFrZSB0aGUgY29udHJvbCBjaGFuZ2Ugd2l0aCBvbkNoYW5nZVxuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY2hlY2tlZElkcztcbiAgICAgIHRoaXMub25DaGFuZ2UodGhpcy5jaGVja2VkSWRzKTtcbiAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIC8qIHN0YXJ0OiBUSElTIENPREUgU0NPUEUgY2FsY3VsYXRlcyB0b2dnbGVkSWRzICovXG4gICAgaWYgKHRoaXMuY2hlY2tJbmhlcml0YW5jZSkge1xuICAgICAgLy8gSWYgdHJ1ZSwgYWxsIHRoZSBuZXN0ZWQgaXRlbXMgd2lsbCBiZSBjaGVja2VkL3VuY2hlY2tlZFxuICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXG4gICAgICAgIC5uZXN0ZWRUb2dnbGVDaGVjayhlLCBuZXdWYWx1ZSlcbiAgICAgICAgLnRoZW4oKHgpID0+IHtcblxuICAgICAgICAgIC8vIFRoZSBpZHMgaGF2ZSBiZWVuIGNoYW5nZWRcbiAgICAgICAgICB0b2dnbGVkSWRzID0geDtcblxuICAgICAgICAgIC8vIE5vdyB0b2dnbGVkSWRzIHdlcmUgc2V0LiBXZSBjYWxsIHRoZSBmdW5jdGlvbiB3ZSBkZWNsYXJlZFxuICAgICAgICAgIGNoYW5nZVZhbHVlKCk7XG5cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKCh4OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHgpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlIHdlIHNpbXBseSB0b2dnbGUgY2hlY2sgZm9yIGN1cnJlbnQgaXRlbSBvbmx5XG4gICAgICB0b2dnbGVkSWRzID0gW2UuaWRdO1xuXG4gICAgICAvLyBOb3cgdG9nZ2xlZElkcyB3ZXJlIHNldC4gV2UgY2FsbCB0aGUgZnVuY3Rpb24gd2UgZGVjbGFyZWRcbiAgICAgIGNoYW5nZVZhbHVlKCk7XG5cbiAgICB9XG4gICAgLyogZW5kOiBUSElTIENPREUgU0NPUEUgY2FsY3VsYXRlcyB0b2dnbGVkSWRzICovXG5cbiAgICAvLyBUaGF0IGlzLiBIYXBweSBkZWJ1Z2dpbmchXG5cbiAgfVxuXG4gIG9uQ2hlY2tJbmNsdWRlRGlzc29sdmVkQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgY29uc29sZS5sb2coXCJvbkNoZWNrSW5jbHVkZURpc3NvbHZlZENoYW5nZVwiLCB2YWx1ZSk7XG4gIH1cblxuICBvbkNoZWNrSW5oZXJpdGFuY2VDaGFuZ2UodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRvcGljVHJlZVNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcbiAgICAgIC4uLnRoaXMudG9waWNUcmVlU2VydmljZS5zdGF0dXMkLnZhbHVlISxcbiAgICAgIGNoZWNrSW5oZXJpdGFuY2U6IHZhbHVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25PYmplY3RDbGljayhlOiBJQXJ0aWNsZUNhdGVnb3J5VHJlZUl0ZW0sIGV2ZW50OiBhbnkpOiB2b2lkIHtcblxuICAgIC8vIHJlbW92ZSBoaWdobGlnaHQgY2xhc3NcbiAgICAvLyBUTyBET1xuXG4gICAgaWYgKCEhZS5wcm90ZWN0ZWQpIHJldHVybjtcblxuICAgIHRoaXMuaXRlbUNsaWNrPy5lbWl0KGUpO1xuXG4gICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlID09PSBFbnVtQ29yZUFydGljbGVDYXRlZ29yeVRyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHJldHVybjtcbiAgICBsZXQgYWN0aXZlSWRzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLm5lc3RlZFJlc2V0QWN0aXZlKHRoaXMuZGF0YSwgZmFsc2UpLnRoZW4oZmFsc2VBbGwgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJmYWxzZUFsbFwiLCBmYWxzZUFsbClcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5hY2Nlc3Nvck1vZGUgPT09XG4gICAgICAgIEVudW1Db3JlQXJ0aWNsZUNhdGVnb3J5VHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFIHx8ICF0aGlzLmFjY2Vzc29yTW9kZVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIHRydWUsIGFsbCB0aGUgbmVzdGVkIGl0ZW1zIHdpbGwgYmUgYWN0aXZlLCB0aGUgb3RoZXJzIGFyZSBpbmFjdGl2ZVxuICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2VcbiAgICAgICAgICAubmVzdGVkUmVzZXRBY3RpdmUoZSwgdHJ1ZSlcbiAgICAgICAgICAudGhlbigoeCkgPT4ge1xuICAgICAgICAgICAgYWN0aXZlSWRzID0geDtcbiAgICAgICAgICAgIGFjdGl2ZUlkcy5zb3J0KCk7XG4gICAgICAgICAgICBjb25zdCBuZXdBY3RpdmVLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgYWN0aXZlSWRzLm1hcCgoeCkgPT4gbmV3QWN0aXZlS2V5cy5wdXNoKHgudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLnN0YXR1cyQubmV4dCh7XG4gICAgICAgICAgICAgIC4uLnRoaXMudG9waWNUcmVlU2VydmljZS5zdGF0dXMkLnZhbHVlISxcbiAgICAgICAgICAgICAgYWN0aXZlS2V5czogbmV3QWN0aXZlS2V5cyxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRLZXk6IGUuaWQudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUlkcyA9IGFjdGl2ZUlkcztcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuYWN0aXZlSWRzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2UoYWN0aXZlSWRzKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoeDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKHgpO1xuICAgICAgICAgIH0pO1xuICBcbiAgXG4gICAgICB9IGVsc2Uge1xuICBcbiAgICAgICAgLy8gQUNUSVZBVEVEX1NJTkdMRVxuICAgICAgICAvLyBPdGhlcndpc2Ugd2Ugc2ltcGx5IHNldCBjdXJyZW50IGl0ZW0gdG8gYmUgYWN0aXZlIG9ubHlcbiAgICAgICAgYWN0aXZlSWRzID0gW2UuaWRdO1xuICAgICAgICB0aGlzLmFjdGl2ZUlkcyA9IGFjdGl2ZUlkcztcbiAgXG4gICAgICAgIHRoaXMudG9waWNUcmVlU2VydmljZS5zdGF0dXMkLm5leHQoe1xuICAgICAgICAgIC4uLnRoaXMudG9waWNUcmVlU2VydmljZS5zdGF0dXMkLnZhbHVlISxcbiAgICAgICAgICBhY3RpdmVLZXlzOiBbZS5pZC50b1N0cmluZygpXSxcbiAgICAgICAgICBzZWxlY3RlZEtleTogZS5pZC50b1N0cmluZygpLFxuICAgICAgICB9KTtcbiAgXG4gICAgICAgIHRoaXMub25DaGFuZ2UoYWN0aXZlSWRzKTtcbiAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50O1xuXG4gICAgaWYgKGRldGFpbCA9PT0gMikge1xuICAgICAgY29uc29sZS5sb2coJ1RoaXMgd2FzIGEgZGJsY2xpY2snKTtcbiAgICAgIHRoaXMuaXRlbURvdWJsZUNsaWNrLmVtaXQoZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBlO1xuXG4gIH1cblxuICBvblNlYXJjaENoYW5nZSh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlYXJjaCQubmV4dCh0ZXh0KTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIm5nQWZ0ZXJDb250ZW50SW5pdFwiKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCgoeCkgPT4geD8udW5zdWJzY3JpYmUoKSk7XG5cbiAgICBpZiAoISF0aGlzLmluc3RhbmNlTnVtYmVyKSB7XG4gICAgICBjb25zdCB0cnlUb0ZpbmQgPSB0aGlzLnRvcGljVHJlZVNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcbiAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuaW5zdGFuY2VOdW1iZXJcbiAgICAgICk7XG5cbiAgICAgIGlmICghIXRyeVRvRmluZC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgbmV3SW5zdGFuY2VzID0gdGhpcy50b3BpY1RyZWVTZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoXG4gICAgICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgIT09IHRoaXMuaW5zdGFuY2VOdW1iZXJcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50b3BpY1RyZWVTZXJ2aWNlLmluc3RhbmNlcyA9IG5ld0luc3RhbmNlcztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtdG9waWMtdHJlZS1jb250YWluZXJcIiBbY2xhc3MuZnVsbC13aWR0aF09XCIhIWZ1bGxXaWR0aE1vZGVcIiAqbmdJZj1cIiEhZGF0YVwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgICBwb3NpdGlvbiA6ICdyZWxhdGl2ZScsXG4gICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIGhlaWdodDogaGVpZ2h0ICsgJ3B4J1xuICAgIH1cIj5cbiAgICA8ZGl2ICNkaXNwbGF5Q29udGVudCBjbGFzcz1cImN1c3RvbS1vcmctdHJlZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29yZS1vcmctdHJlZS1oZWFkZXIgZC1mbGV4LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uU2VhcmNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2VhcmNoUGxhY2Vob2xkZXIgfCB0cmFuc2xhdGU6IGxhbmdcIiBbY2xhc3MuZnVsbC13aWR0aF09XCIhIWZ1bGxXaWR0aE1vZGVcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAtIGxheW91dFNlcnZpY2UuY29yZU9yZ1RyZWVUb3BIZWlnaHQgLSBsYXlvdXRTZXJ2aWNlLmNvcmVPcmdUcmVlQm90dG9tSGVpZ2h0ICsgJ3B4J1xuICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8Y29yZS1sb2FkaW5nLXN1cmZhY2UgW2xvYWRpbmddPVwibG9hZGluZ1wiIFtoZWlnaHRdPVwic2Nyb2xsQ29udGFpbmVySGVpZ2h0XCI+PC9jb3JlLWxvYWRpbmctc3VyZmFjZT5cbiAgICAgICAgICAgICAgICBAZm9yIChyb290IG9mIGRhdGE7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInJvb3RcIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhIXJvb3QudHJlZSRFeHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbTsgY29udGV4dDogeyBjb250ZXh0OiByb290IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgYm90dG9tOiAnMHB4JyxcbiAgICAgICAgICAgICAgICBsZWZ0OiAnMHB4JyxcbiAgICAgICAgICAgICAgICByaWdodDogJzBweCcsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBsYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0ICsgJ3B4JyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogbGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcgKyAncHgnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmdSaWdodDogbGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcgKyAncHgnLFxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IGxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgKyAncHgnLFxuICAgICAgICAgICAgICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJ1xuICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtY2hlY2tib3ggWyhuZ01vZGVsKV09XCJzaG93RGlzc29sdmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNoZWNrSW5jbHVkZURpc3NvbHZlZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVUkuQ09SRV9PUkdfVFJFRS5TSE9XX09VVERBVEVEX1VOSVRTX0FCQlJFVklBVEVEJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBdPVwiJ1VJLkNPUkVfT1JHX1RSRUUuU0hPV19PVVREQVRFRF9VTklUUydcIiB0b29sdGlwUG9zaXRpb249XCJhYm92ZVwiPjwvY29yZS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2staW5oZXJpdGFuY2Utd3JhcHBlclwiICpuZ0lmPVwiYWNjZXNzb3JNb2RlID09PSAnQ0hFQ0tFRCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb3JlLWNoZWNrYm94ICpuZ0lmPVwic2hvd0NoZWNrSW5oZXJpdGFuY2VcIiBbKG5nTW9kZWwpXT1cImNoZWNrSW5oZXJpdGFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tJbmhlcml0YW5jZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVUkuQ09SRV9PUkdfVFJFRS5DSEVDS19JTkhFUklUQU5DRSdcIj48L2NvcmUtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbSBsZXQtY29udGV4dD1cImNvbnRleHRcIiBsZXQtaWQ9XCJjb250ZXh0LmlkXCIgbGV0LXRpdGxlPVwiY29udGV4dC50cmVlJFRpdGxlXCJcbiAgICAgICAgICAgICAgICBsZXQtaGlnaGxpZ2h0ZWQ9XCJjb250ZXh0LnRyZWUkSGlnaGxpZ2h0ZWRcIiBsZXQtaGFzQ2hpbGRyZW49XCJjb250ZXh0LnRyZWUkSGFzQ2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgIGxldC1oYXNBY3RpdmVDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNBY3RpdmVDaGlsZHJlblwiIGxldC1jaGlsZHJlbj1cImNvbnRleHQudHJlZSRDaGlsZHJlblwiXG4gICAgICAgICAgICAgICAgbGV0LWV4cGFuZGVkPVwiY29udGV4dC50cmVlJEV4cGFuZGVkXCIgbGV0LWlzQWN0aXZlPVwiY29udGV4dC5pc0FjdGl2ZVwiIGxldC1hY3RpdmU9XCJjb250ZXh0LnRyZWUkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICBsZXQtY2hlY2tlZD1cImNvbnRleHQudHJlZSRDaGVja2VkXCIgbGV0LXByb3RlY3RlZD1cImNvbnRleHQucHJvdGVjdGVkXCI+XG5cbiAgICAgICAgICAgICAgICBAaWYgKCghc2hvd0Rpc3NvbHZlZCAmJiAhIWlzQWN0aXZlKSB8fCAoISFzaG93RGlzc29sdmVkKSkge1xuICAgICAgICAgICAgICAgIDxsaSBbY2xhc3MuaGFzLWNoaWxkcmVuXT1cIiEhaGFzQ2hpbGRyZW5cIiBbY2xhc3MuY29sbGFwc2VkXT1cIiEhaGFzQ2hpbGRyZW4gJiYgISEhZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9uT2JqZWN0Q2xpY2soY29udGV4dCwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICgoISFzaG93RGlzc29sdmVkICYmICEhaGFzQ2hpbGRyZW4pIHx8ICghc2hvd0Rpc3NvbHZlZCAmJiAhIWhhc0FjdGl2ZUNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJleHBhbmQtdG9nZ2xlciBmZWF0aGVyLWNoZXZyb24tZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kVG9nZ2xlckNsaWNrKGNvbnRleHQsICRldmVudClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjY2Vzc29yTW9kZSA9PT0gJ0NIRUNLRUQnICYmICEhIXByb3RlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtY2hlY2tib3ggKG9uQ2xpY2spPVwib25JdGVtQ2hlY2soY29udGV4dCwgJGV2ZW50KVwiIFtpbnB1dFZhbHVlXT1cImNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPjwvY29yZS1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxvYmplY3QgW2NsYXNzLmFjdGl2ZV09XCJhY3RpdmVJZHMuaW5jbHVkZXMoaWQpXCIgW2NsYXNzLmhpZ2hsaWdodGVkXT1cImhpZ2hsaWdodGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzc29sdmVkXT1cIiFpc0FjdGl2ZVwiIFtjbGFzcy5wcm90ZWN0ZWRdPVwicHJvdGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwVG9vbHRpcF09XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRpdGxlIHwgdHJhbnNsYXRlOiBsYW5nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L29iamVjdD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghIWlubGluZUV4dHJhVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbmxpbmVFeHRyYVRlbXBsYXRlUmVmOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNvbnRleHQgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICA8dWwgW2NsYXNzLmNvbGxhcHNlZF09XCIgISEhZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFleHBhbmRlZCB8fCAhIWZ1bGxSZW5kZXJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNoaWxkIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG5cbjwvZGl2PiJdfQ==