ecabs-components 0.0.54 → 0.0.56
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.
- package/esm2020/lib/ecabs-select/ecabs-select.component.mjs +132 -44
- package/fesm2015/ecabs-components.mjs +133 -43
- package/fesm2015/ecabs-components.mjs.map +1 -1
- package/fesm2020/ecabs-components.mjs +131 -43
- package/fesm2020/ecabs-components.mjs.map +1 -1
- package/lib/ecabs-select/ecabs-select.component.d.ts +17 -5
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
2
|
import { UntypedFormControl, NgControl, NG_VALUE_ACCESSOR, } from '@angular/forms';
|
|
3
3
|
import { MatSelectSearchComponent } from 'ngx-mat-select-search';
|
|
4
|
-
import { combineLatest, debounceTime, map,
|
|
4
|
+
import { BehaviorSubject, combineLatest, debounceTime, map, Subscription, } from 'rxjs';
|
|
5
5
|
import ElementBaseComponent from '../base/element-base';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@angular/common";
|
|
@@ -12,9 +12,10 @@ import * as i5 from "@angular/material/core";
|
|
|
12
12
|
import * as i6 from "@angular/forms";
|
|
13
13
|
import * as i7 from "ngx-mat-select-search";
|
|
14
14
|
export class EcabsSelectComponent extends ElementBaseComponent {
|
|
15
|
-
constructor(injector) {
|
|
15
|
+
constructor(injector, changeDetectorRef) {
|
|
16
16
|
super();
|
|
17
17
|
this.injector = injector;
|
|
18
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
18
19
|
this.multiple = false;
|
|
19
20
|
this.useNoneOption = false;
|
|
20
21
|
this.useOnlyDisabledClass = false;
|
|
@@ -30,14 +31,19 @@ export class EcabsSelectComponent extends ElementBaseComponent {
|
|
|
30
31
|
this.othersLabel = 'Others';
|
|
31
32
|
this.updateFilterItems = new EventEmitter();
|
|
32
33
|
this.selectionChange = new EventEmitter();
|
|
33
|
-
this.filteredItems$ = new
|
|
34
|
+
this.filteredItems$ = new BehaviorSubject([]);
|
|
34
35
|
this.itemFilterCtrl = new UntypedFormControl();
|
|
35
36
|
this.isClearAll = false;
|
|
37
|
+
this.showFilteredAllOption = true;
|
|
38
|
+
this.selectedItems = [];
|
|
39
|
+
this.notSelectedItems = [];
|
|
36
40
|
this.subscriptions = new Subscription();
|
|
37
41
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
38
|
-
this.onChange = () => {
|
|
42
|
+
this.onChange = () => {
|
|
43
|
+
};
|
|
39
44
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
40
|
-
this.onTouch = () => {
|
|
45
|
+
this.onTouch = () => {
|
|
46
|
+
};
|
|
41
47
|
}
|
|
42
48
|
get value() {
|
|
43
49
|
return this.val;
|
|
@@ -45,22 +51,20 @@ export class EcabsSelectComponent extends ElementBaseComponent {
|
|
|
45
51
|
set value(val) {
|
|
46
52
|
if (this.val !== val) {
|
|
47
53
|
this.val = val;
|
|
54
|
+
this.setSelectedItems();
|
|
48
55
|
this.onChange(val);
|
|
49
56
|
this.onTouch(val);
|
|
50
57
|
}
|
|
51
58
|
}
|
|
52
59
|
ngOnChanges(changes) {
|
|
53
|
-
|
|
54
|
-
|
|
60
|
+
const { items } = changes;
|
|
61
|
+
if (items && items.currentValue) {
|
|
55
62
|
this.filterItems();
|
|
56
|
-
if (this.multiple &&
|
|
57
|
-
this.useSelectAllOption &&
|
|
58
|
-
this.allSelected?.selected) {
|
|
63
|
+
if (this.multiple && this.useSelectAllOption && this.allSelected?.selected) {
|
|
59
64
|
setTimeout(() => {
|
|
60
|
-
this.control.patchValue([
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
]);
|
|
65
|
+
this.control.patchValue([...this.filteredItems$.value.map((item) => item.value), this.selectAllValue], {
|
|
66
|
+
emitEvent: false,
|
|
67
|
+
});
|
|
64
68
|
}, 100);
|
|
65
69
|
}
|
|
66
70
|
}
|
|
@@ -86,17 +90,19 @@ export class EcabsSelectComponent extends ElementBaseComponent {
|
|
|
86
90
|
this.filterItems();
|
|
87
91
|
this.updateFilterItems.emit(value);
|
|
88
92
|
if (this.isClearAll) {
|
|
89
|
-
this.control.patchValue([]);
|
|
93
|
+
this.control.patchValue([], { emitEvent: false });
|
|
90
94
|
this.isClearAll = false;
|
|
91
95
|
}
|
|
92
96
|
}));
|
|
93
97
|
}
|
|
94
98
|
toggleAllSelection() {
|
|
95
99
|
if (this.allSelected.selected) {
|
|
96
|
-
this.
|
|
97
|
-
...this.
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
if (this.useSearchOption) {
|
|
101
|
+
this.control.patchValue([...this.filteredItems$.value.map((item) => item.value), this.selectAllValue]);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.control.patchValue([...this.items.map((item) => item.value), this.selectAllValue]);
|
|
105
|
+
}
|
|
100
106
|
}
|
|
101
107
|
else {
|
|
102
108
|
this.control.patchValue([]);
|
|
@@ -104,30 +110,42 @@ export class EcabsSelectComponent extends ElementBaseComponent {
|
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
112
|
togglePerOne() {
|
|
107
|
-
|
|
108
|
-
if (this.allSelected
|
|
109
|
-
this.allSelected.
|
|
113
|
+
setTimeout(() => {
|
|
114
|
+
if (this.allSelected) {
|
|
115
|
+
if (this.allSelected.selected) {
|
|
116
|
+
this.allSelected.deselect();
|
|
117
|
+
}
|
|
118
|
+
if (this.setAllOptionAfterChosenAllItems && this.control.value.length === this.items.length) {
|
|
119
|
+
this.allSelected.select();
|
|
120
|
+
}
|
|
110
121
|
}
|
|
111
|
-
|
|
112
|
-
this.control.value.length === this.items.length) {
|
|
113
|
-
this.allSelected.select();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
122
|
+
});
|
|
116
123
|
this.isClearAll = false;
|
|
117
124
|
}
|
|
125
|
+
toggleNone() {
|
|
126
|
+
this.selectedItems = [];
|
|
127
|
+
}
|
|
118
128
|
getAllSelectedChecked() {
|
|
119
129
|
return this.allSelected !== undefined && this.allSelected.selected;
|
|
120
130
|
}
|
|
121
131
|
getLabel(val) {
|
|
122
|
-
if (this.useSelectAllOption &&
|
|
123
|
-
this.allSelected?.selected &&
|
|
124
|
-
this.items &&
|
|
125
|
-
this.items.length > 0) {
|
|
132
|
+
if (this.useSelectAllOption && this.allSelected?.selected && this.items && this.items.length > 0) {
|
|
126
133
|
return this.items[0].label;
|
|
127
134
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
135
|
+
let item;
|
|
136
|
+
if (val !== undefined) {
|
|
137
|
+
if (this.useSearchOption) {
|
|
138
|
+
if (this.selectedItems && this.selectedItems.length > 0) {
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
140
|
+
item = this.selectedItems.find((item) => item.value === val);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
if (this.items && this.items.length > 0) {
|
|
145
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
146
|
+
item = this.items.find((item) => item.value === val);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
131
149
|
return item ? item.label : '';
|
|
132
150
|
}
|
|
133
151
|
return '';
|
|
@@ -148,29 +166,99 @@ export class EcabsSelectComponent extends ElementBaseComponent {
|
|
|
148
166
|
this.selectionChange.emit($event);
|
|
149
167
|
}
|
|
150
168
|
filterItems() {
|
|
169
|
+
this.setSelectedItems();
|
|
151
170
|
if (!this.items) {
|
|
152
171
|
return;
|
|
153
172
|
}
|
|
154
173
|
// get the search keyword
|
|
155
174
|
let search = this.itemFilterCtrl.value;
|
|
156
|
-
if (!search || search === '') {
|
|
157
|
-
|
|
175
|
+
if (!search || search === '' && !this.items?.length) {
|
|
176
|
+
if (this.useSearchOption) {
|
|
177
|
+
this.filteredItems$.next([...this.selectedItems]);
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
this.filteredItems$.next(this.items?.slice());
|
|
181
|
+
}
|
|
182
|
+
this.showFilteredAllOption = true;
|
|
158
183
|
return;
|
|
159
184
|
}
|
|
160
185
|
search = search.toLowerCase();
|
|
161
|
-
this.
|
|
162
|
-
|
|
163
|
-
|
|
186
|
+
this.showFilteredAllOption =
|
|
187
|
+
this.allLabel.toLowerCase().includes(search.toLowerCase()) ||
|
|
188
|
+
(this.value instanceof Array && this.value.includes(this.selectAllValue)) ||
|
|
189
|
+
(!(this.value instanceof Array) && this.value === this.selectAllValue);
|
|
190
|
+
this.changeDetectorRef.detectChanges();
|
|
191
|
+
if (this.useSearchOption) {
|
|
192
|
+
const filteredItems = this.notSelectedItems?.length > 0
|
|
193
|
+
? this.notSelectedItems.filter((item) => item.label.toLowerCase().includes(search.toLowerCase()))
|
|
194
|
+
: [];
|
|
195
|
+
this.filteredItems$.next([...this.selectedItems, ...filteredItems]);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
this.filteredItems$.next(this.items?.length > 0
|
|
199
|
+
? this.items.filter((item) => item.label.toLowerCase().includes(search.toLowerCase()))
|
|
200
|
+
: []);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
setSelectedItems() {
|
|
204
|
+
if (this.useSearchOption) {
|
|
205
|
+
const selectedItems = [];
|
|
206
|
+
if (this.value) {
|
|
207
|
+
if (this.value instanceof Array) {
|
|
208
|
+
const skipSteps = this.value.includes(this.selectAllValue);
|
|
209
|
+
if (!skipSteps) {
|
|
210
|
+
this.value.forEach((value) => {
|
|
211
|
+
const index = this.selectedItems.findIndex((selectedItem) => selectedItem.value === value);
|
|
212
|
+
if (index !== -1) {
|
|
213
|
+
selectedItems.push(this.selectedItems[index]);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
217
|
+
const item = this.items.find((item) => item.value === value);
|
|
218
|
+
if (item) {
|
|
219
|
+
selectedItems.push(item);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
this.selectedItems.forEach((selectedItem) => {
|
|
224
|
+
const index = this.value.find((value) => selectedItem.value === value);
|
|
225
|
+
if (index === -1) {
|
|
226
|
+
selectedItems.splice(index, 1);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
const index = this.selectedItems.findIndex((selectedItem) => selectedItem.value === this.value);
|
|
233
|
+
if (index !== -1) {
|
|
234
|
+
selectedItems.push(this.selectedItems[index]);
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
238
|
+
const item = this.items.find((item) => item.value === this.value);
|
|
239
|
+
// eslint-disable-next-line max-depth
|
|
240
|
+
if (item) {
|
|
241
|
+
selectedItems.push(item);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
this.selectedItems = [...selectedItems];
|
|
246
|
+
this.notSelectedItems = this.items?.filter((item) => this.selectedItems.findIndex((selectedItem) => selectedItem.value === item.value) === -1);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
this.notSelectedItems = this.items?.slice();
|
|
250
|
+
}
|
|
251
|
+
}
|
|
164
252
|
}
|
|
165
253
|
}
|
|
166
|
-
EcabsSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EcabsSelectComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
|
254
|
+
EcabsSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EcabsSelectComponent, deps: [{ token: i0.Injector }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
167
255
|
EcabsSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: EcabsSelectComponent, selector: "ecabs-select", inputs: { items: "items", multiple: "multiple", useNoneOption: "useNoneOption", useOnlyDisabledClass: "useOnlyDisabledClass", searchFieldPlaceholder: "searchFieldPlaceholder", useSearchOption: "useSearchOption", useSelectAllOption: "useSelectAllOption", setAllOptionAfterChosenAllItems: "setAllOptionAfterChosenAllItems", selectAllValue: "selectAllValue", noEntriesFoundLabel: "noEntriesFoundLabel", noneLabel: "noneLabel", allLabel: "allLabel", otherLabel: "otherLabel", othersLabel: "othersLabel" }, outputs: { updateFilterItems: "updateFilterItems", selectionChange: "selectionChange" }, providers: [
|
|
168
256
|
{
|
|
169
257
|
provide: NG_VALUE_ACCESSOR,
|
|
170
258
|
useExisting: EcabsSelectComponent,
|
|
171
259
|
multi: true,
|
|
172
260
|
},
|
|
173
|
-
], viewQueries: [{ propertyName: "allSelected", first: true, predicate: ["allSelected"], descendants: true }, { propertyName: "matSelectSearchComponent", first: true, predicate: MatSelectSearchComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<app-element-wrapper [data]=\"getData()\">\r\n <mat-form-field [ngClass]=\"{ disabled: useOnlyDisabledClass }\">\r\n <mat-select\r\n [(ngModel)]=\"value\"\r\n (closed)=\"onTouch()\"\r\n appearance=\"outline\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n (selectionChange)=\"onSelectionChanged($event)\"\r\n >\r\n <mat-select-trigger>\r\n <span *ngIf=\"getAllSelectedChecked()\">{{ allLabel }}</span>\r\n <span *ngIf=\"!getAllSelectedChecked()\"\r\n >{{ val && multiple ? getLabel(val[0]) : getLabel(val) }}\r\n <span *ngIf=\"multiple && value?.length > 1\" class=\"additional-selection\">\r\n (+{{ useSelectAllOption && this.allSelected?.selected ? value?.length - 2 : value?.length - 1 }}\r\n {{ (value?.length === 2 ? otherLabel : othersLabel) }})\r\n </span>\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"useSearchOption\">\r\n <ngx-mat-select-search\r\n [formControl]=\"itemFilterCtrl\"\r\n [placeholderLabel]=\"searchFieldPlaceholder\"\r\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n ></ngx-mat-select-search>\r\n </mat-option>\r\n <mat-option *ngIf=\"useNoneOption\">{{ noneLabel }}</mat-option>\r\n <mat-option #allSelected *ngIf=\"useSelectAllOption\" (click)=\"toggleAllSelection()\" [value]=\"selectAllValue\">{{\r\n allLabel\r\n }}</mat-option>\r\n <mat-option *ngFor=\"let item of filteredItems$ | async\" [value]=\"item.value\" (click)=\"togglePerOne()\">\r\n {{ item.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</app-element-wrapper>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ElementWrapperComponent, selector: "app-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { 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: i7.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
|
|
261
|
+
], viewQueries: [{ propertyName: "allSelected", first: true, predicate: ["allSelected"], descendants: true }, { propertyName: "matSelectSearchComponent", first: true, predicate: MatSelectSearchComponent, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<app-element-wrapper [data]=\"getData()\">\r\n <mat-form-field [ngClass]=\"{ disabled: useOnlyDisabledClass }\">\r\n <mat-select\r\n [(ngModel)]=\"value\"\r\n (closed)=\"onTouch()\"\r\n appearance=\"outline\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n (selectionChange)=\"onSelectionChanged($event)\"\r\n >\r\n <mat-select-trigger>\r\n <span *ngIf=\"getAllSelectedChecked()\">{{ allLabel }}</span>\r\n <span *ngIf=\"!getAllSelectedChecked()\"\r\n >{{ val && multiple ? getLabel(val[0]) : getLabel(val) }}\r\n <span *ngIf=\"multiple && value?.length > 1\" class=\"additional-selection\">\r\n (+{{ useSelectAllOption && this.allSelected?.selected ? value?.length - 2 : value?.length - 1 }}\r\n {{ (value?.length === 2 ? otherLabel : othersLabel) }})\r\n </span>\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"useSearchOption\">\r\n <ngx-mat-select-search\r\n [formControl]=\"itemFilterCtrl\"\r\n [placeholderLabel]=\"searchFieldPlaceholder\"\r\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n ></ngx-mat-select-search>\r\n </mat-option>\r\n <mat-option *ngIf=\"useNoneOption\" (click)=\"toggleNone()\">{{ noneLabel }}</mat-option>\r\n <mat-option #allSelected *ngIf=\"useSelectAllOption && showFilteredAllOption\" (click)=\"toggleAllSelection()\" [value]=\"selectAllValue\">{{\r\n allLabel\r\n }}</mat-option>\r\n <mat-option *ngFor=\"let item of filteredItems$ | async\" [value]=\"item.value\" (click)=\"togglePerOne()\">\r\n {{ item.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</app-element-wrapper>\r\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ElementWrapperComponent, selector: "app-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i4.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { 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: i7.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i6.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
|
|
174
262
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: EcabsSelectComponent, decorators: [{
|
|
175
263
|
type: Component,
|
|
176
264
|
args: [{ selector: 'ecabs-select', providers: [
|
|
@@ -179,8 +267,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
179
267
|
useExisting: EcabsSelectComponent,
|
|
180
268
|
multi: true,
|
|
181
269
|
},
|
|
182
|
-
], template: "<app-element-wrapper [data]=\"getData()\">\r\n <mat-form-field [ngClass]=\"{ disabled: useOnlyDisabledClass }\">\r\n <mat-select\r\n [(ngModel)]=\"value\"\r\n (closed)=\"onTouch()\"\r\n appearance=\"outline\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n (selectionChange)=\"onSelectionChanged($event)\"\r\n >\r\n <mat-select-trigger>\r\n <span *ngIf=\"getAllSelectedChecked()\">{{ allLabel }}</span>\r\n <span *ngIf=\"!getAllSelectedChecked()\"\r\n >{{ val && multiple ? getLabel(val[0]) : getLabel(val) }}\r\n <span *ngIf=\"multiple && value?.length > 1\" class=\"additional-selection\">\r\n (+{{ useSelectAllOption && this.allSelected?.selected ? value?.length - 2 : value?.length - 1 }}\r\n {{ (value?.length === 2 ? otherLabel : othersLabel) }})\r\n </span>\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"useSearchOption\">\r\n <ngx-mat-select-search\r\n [formControl]=\"itemFilterCtrl\"\r\n [placeholderLabel]=\"searchFieldPlaceholder\"\r\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n ></ngx-mat-select-search>\r\n </mat-option>\r\n <mat-option *ngIf=\"useNoneOption\">{{ noneLabel }}</mat-option>\r\n <mat-option #allSelected *ngIf=\"useSelectAllOption\" (click)=\"toggleAllSelection()\" [value]=\"selectAllValue\">{{\r\n allLabel\r\n }}</mat-option>\r\n <mat-option *ngFor=\"let item of filteredItems$ | async\" [value]=\"item.value\" (click)=\"togglePerOne()\">\r\n {{ item.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</app-element-wrapper>\r\n" }]
|
|
183
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }]; }, propDecorators: { items: [{
|
|
270
|
+
], template: "<app-element-wrapper [data]=\"getData()\">\r\n <mat-form-field [ngClass]=\"{ disabled: useOnlyDisabledClass }\">\r\n <mat-select\r\n [(ngModel)]=\"value\"\r\n (closed)=\"onTouch()\"\r\n appearance=\"outline\"\r\n [multiple]=\"multiple\"\r\n [disabled]=\"disabled\"\r\n [placeholder]=\"placeholder\"\r\n (selectionChange)=\"onSelectionChanged($event)\"\r\n >\r\n <mat-select-trigger>\r\n <span *ngIf=\"getAllSelectedChecked()\">{{ allLabel }}</span>\r\n <span *ngIf=\"!getAllSelectedChecked()\"\r\n >{{ val && multiple ? getLabel(val[0]) : getLabel(val) }}\r\n <span *ngIf=\"multiple && value?.length > 1\" class=\"additional-selection\">\r\n (+{{ useSelectAllOption && this.allSelected?.selected ? value?.length - 2 : value?.length - 1 }}\r\n {{ (value?.length === 2 ? otherLabel : othersLabel) }})\r\n </span>\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"useSearchOption\">\r\n <ngx-mat-select-search\r\n [formControl]=\"itemFilterCtrl\"\r\n [placeholderLabel]=\"searchFieldPlaceholder\"\r\n [noEntriesFoundLabel]=\"noEntriesFoundLabel\"\r\n ></ngx-mat-select-search>\r\n </mat-option>\r\n <mat-option *ngIf=\"useNoneOption\" (click)=\"toggleNone()\">{{ noneLabel }}</mat-option>\r\n <mat-option #allSelected *ngIf=\"useSelectAllOption && showFilteredAllOption\" (click)=\"toggleAllSelection()\" [value]=\"selectAllValue\">{{\r\n allLabel\r\n }}</mat-option>\r\n <mat-option *ngFor=\"let item of filteredItems$ | async\" [value]=\"item.value\" (click)=\"togglePerOne()\">\r\n {{ item.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</app-element-wrapper>\r\n" }]
|
|
271
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { items: [{
|
|
184
272
|
type: Input
|
|
185
273
|
}], multiple: [{
|
|
186
274
|
type: Input
|
|
@@ -219,4 +307,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
219
307
|
type: ViewChild,
|
|
220
308
|
args: [MatSelectSearchComponent]
|
|
221
309
|
}] } });
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1zZWxlY3QvZWNhYnMtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1zZWxlY3QvZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUVaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxhQUFhLEVBQ2IsWUFBWSxFQUNaLEdBQUcsRUFDSCxhQUFhLEVBQ2IsWUFBWSxHQUViLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxvQkFBb0IsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7O0FBYXhELE1BQU0sT0FBTyxvQkFDWCxTQUFRLG9CQUFvQjtJQTBDNUIsWUFBcUIsUUFBa0I7UUFDckMsS0FBSyxFQUFFLENBQUM7UUFEVyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBdkM5QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QiwyQkFBc0IsR0FBVyxRQUFRLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLG9DQUErQixHQUFHLElBQUksQ0FBQztRQUN2QyxtQkFB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d0JXLHdCQUF3Qiw0RkMvRHRDLG91REFzQ0E7MkZER2Esb0JBQW9CO2tCQVhoQyxTQUFTOytCQUNFLGNBQWMsYUFFYjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLHNCQUFzQjs0QkFDakMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7K0ZBS1EsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLCtCQUErQjtzQkFBdkMsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVxQixXQUFXO3NCQUF0QyxTQUFTO3VCQUFFLGFBQWE7Z0JBRXpCLHdCQUF3QjtzQkFEdkIsU0FBUzt1QkFBRSx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIE5nQ29udHJvbCxcclxuICBOR19WQUxVRV9BQ0NFU1NPUixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RTZWFyY2hDb21wb25lbnQgfSBmcm9tICduZ3gtbWF0LXNlbGVjdC1zZWFyY2gnO1xyXG5pbXBvcnQge1xyXG4gIGNvbWJpbmVMYXRlc3QsXHJcbiAgZGVib3VuY2VUaW1lLFxyXG4gIG1hcCxcclxuICBSZXBsYXlTdWJqZWN0LFxyXG4gIFN1YnNjcmlwdGlvbixcclxuICB0YXAsXHJcbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCBFbGVtZW50QmFzZUNvbXBvbmVudCBmcm9tICcuLi9iYXNlL2VsZW1lbnQtYmFzZSc7XHJcblxyXG5AQ29tcG9uZW50KCB7XHJcbiAgc2VsZWN0b3I6ICdlY2Ficy1zZWxlY3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lY2Ficy1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IEVjYWJzU2VsZWN0Q29tcG9uZW50LFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSApXHJcbmV4cG9ydCBjbGFzcyBFY2Fic1NlbGVjdENvbXBvbmVudFxyXG4gIGV4dGVuZHMgRWxlbWVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGl0ZW1zITogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH1bXTtcclxuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVzZU5vbmVPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB1c2VPbmx5RGlzYWJsZWRDbGFzcyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaEZpZWxkUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWFyY2gnO1xyXG4gIEBJbnB1dCgpIHVzZVNlYXJjaE9wdGlvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVzZVNlbGVjdEFsbE9wdGlvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldEFsbE9wdGlvbkFmdGVyQ2hvc2VuQWxsSXRlbXMgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdEFsbFZhbHVlOiBhbnkgPSAwO1xyXG4gIEBJbnB1dCgpIG5vRW50cmllc0ZvdW5kTGFiZWwgPSAnTm8gbWF0Y2hpbmcgZm91bmQnO1xyXG4gIEBJbnB1dCgpIG5vbmVMYWJlbCA9ICdOb25lJztcclxuICBASW5wdXQoKSBhbGxMYWJlbCA9ICdBbGwnO1xyXG4gIEBJbnB1dCgpIG90aGVyTGFiZWwgPSAnT3RoZXInO1xyXG4gIEBJbnB1dCgpIG90aGVyc0xhYmVsID0gJ090aGVycyc7XHJcbiAgQE91dHB1dCgpIHVwZGF0ZUZpbHRlckl0ZW1zOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKCAnYWxsU2VsZWN0ZWQnICkgYWxsU2VsZWN0ZWQhOiBNYXRPcHRpb247XHJcbiAgQFZpZXdDaGlsZCggTWF0U2VsZWN0U2VhcmNoQ29tcG9uZW50IClcclxuICBtYXRTZWxlY3RTZWFyY2hDb21wb25lbnQhOiBNYXRTZWxlY3RTZWFyY2hDb21wb25lbnQ7XHJcblxyXG4gIHZhbCE6IGFueTtcclxuICBmaWx0ZXJlZEl0ZW1zJDogUmVwbGF5U3ViamVjdDx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdPiA9XHJcbiAgICBuZXcgUmVwbGF5U3ViamVjdDx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBhbnkgfVtdPiggMSApO1xyXG4gIGl0ZW1GaWx0ZXJDdHJsID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xyXG4gIGlzQ2xlYXJBbGwgPSBmYWxzZTtcclxuICBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZhbHVlKCB2YWwgKSB7XHJcbiAgICBpZiAoIHRoaXMudmFsICE9PSB2YWwgKSB7XHJcbiAgICAgIHRoaXMudmFsID0gdmFsO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKCB2YWwgKTtcclxuICAgICAgdGhpcy5vblRvdWNoKCB2YWwgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKCBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvciApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyggY2hhbmdlczogU2ltcGxlQ2hhbmdlcyApOiB2b2lkIHtcclxuICAgIGlmICggY2hhbmdlc1sgJ2l0ZW1zJyBdICYmIGNoYW5nZXNbICdpdGVtcycgXS5jdXJyZW50VmFsdWUgKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQubmV4dCggY2hhbmdlc1sgJ2l0ZW1zJyBdLmN1cnJlbnRWYWx1ZS5zbGljZSgpICk7XHJcbiAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLm11bHRpcGxlICYmXHJcbiAgICAgICAgdGhpcy51c2VTZWxlY3RBbGxPcHRpb24gJiZcclxuICAgICAgICB0aGlzLmFsbFNlbGVjdGVkPy5zZWxlY3RlZFxyXG4gICAgICApIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbnRyb2wucGF0Y2hWYWx1ZSggW1xyXG4gICAgICAgICAgICAuLi50aGlzLml0ZW1zLm1hcCggKCBpdGVtICkgPT4gaXRlbS52YWx1ZSApLFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbFZhbHVlLFxyXG4gICAgICAgICAgXSApO1xyXG4gICAgICAgIH0sIDEwMCApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBOZ0NvbnRyb2wsXHJcbiAgICAgIG51bGxcclxuICAgICkgYXMgTmdDb250cm9sO1xyXG5cclxuICAgIGlmICggbmdDb250cm9sICkge1xyXG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCB0aGlzLm1hdFNlbGVjdFNlYXJjaENvbXBvbmVudCApIHtcclxuICAgICAgdGhpcy5tYXRTZWxlY3RTZWFyY2hDb21wb25lbnQuX3Nob3dOb0VudHJpZXNGb3VuZCQgPSBjb21iaW5lTGF0ZXN0KCBbXHJcbiAgICAgICAgdGhpcy5pdGVtRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXMsXHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zJCxcclxuICAgICAgXSApLnBpcGUoXHJcbiAgICAgICAgbWFwKFxyXG4gICAgICAgICAgKCBbIHZhbHVlLCBpdGVtcyBdICkgPT5cclxuICAgICAgICAgICAgdGhpcy5tYXRTZWxlY3RTZWFyY2hDb21wb25lbnQubm9FbnRyaWVzRm91bmRMYWJlbCAmJlxyXG4gICAgICAgICAgICB2YWx1ZSAmJlxyXG4gICAgICAgICAgICBpdGVtcy5sZW5ndGggPT09IDBcclxuICAgICAgICApXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXHJcbiAgICAgIHRoaXMuaXRlbUZpbHRlckN0cmwudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoIGRlYm91bmNlVGltZSggMjAwICkgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoICggdmFsdWU6IGFueSApID0+IHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVySXRlbXMuZW1pdCggdmFsdWUgKTtcclxuXHJcbiAgICAgICAgICBpZiAoIHRoaXMuaXNDbGVhckFsbCApIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUoIFtdICk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDbGVhckFsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cclxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4geyB9O1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cclxuICBvblRvdWNoOiBhbnkgPSAoKSA9PiB7IH07XHJcblxyXG4gIHRvZ2dsZUFsbFNlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICggdGhpcy5hbGxTZWxlY3RlZC5zZWxlY3RlZCApIHtcclxuICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUoIFtcclxuICAgICAgICAuLi50aGlzLml0ZW1zLm1hcCggKCBpdGVtICkgPT4gaXRlbS52YWx1ZSApLFxyXG4gICAgICAgIHRoaXMuc2VsZWN0QWxsVmFsdWUsXHJcbiAgICAgIF0gKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udHJvbC5wYXRjaFZhbHVlKCBbXSApO1xyXG4gICAgICB0aGlzLmlzQ2xlYXJBbGwgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGVyT25lKCk6IHZvaWQge1xyXG4gICAgaWYgKCB0aGlzLmFsbFNlbGVjdGVkICkge1xyXG4gICAgICBpZiAoIHRoaXMuYWxsU2VsZWN0ZWQuc2VsZWN0ZWQgKSB7XHJcbiAgICAgICAgdGhpcy5hbGxTZWxlY3RlZC5kZXNlbGVjdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNldEFsbE9wdGlvbkFmdGVyQ2hvc2VuQWxsSXRlbXMgJiZcclxuICAgICAgICB0aGlzLmNvbnRyb2wudmFsdWUubGVuZ3RoID09PSB0aGlzLml0ZW1zLmxlbmd0aFxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLmFsbFNlbGVjdGVkLnNlbGVjdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzQ2xlYXJBbGwgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEFsbFNlbGVjdGVkQ2hlY2tlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFsbFNlbGVjdGVkICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hbGxTZWxlY3RlZC5zZWxlY3RlZDtcclxuICB9XHJcblxyXG4gIGdldExhYmVsKCB2YWw6IGFueSApOiBzdHJpbmcge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnVzZVNlbGVjdEFsbE9wdGlvbiAmJlxyXG4gICAgICB0aGlzLmFsbFNlbGVjdGVkPy5zZWxlY3RlZCAmJlxyXG4gICAgICB0aGlzLml0ZW1zICYmXHJcbiAgICAgIHRoaXMuaXRlbXMubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLml0ZW1zWyAwIF0ubGFiZWw7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCB2YWwgIT09IHVuZGVmaW5lZCAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCApIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbXMuZmluZCggKCBpdGVtICkgPT4gaXRlbS52YWx1ZSA9PT0gdmFsICk7XHJcblxyXG4gICAgICByZXR1cm4gaXRlbSA/IGl0ZW0ubGFiZWwgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKCB2YWx1ZTogYW55ICk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZSggZm46IGFueSApOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKCBmbjogYW55ICk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoID0gZm47XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2VkKCAkZXZlbnQ6IGFueSApOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoICRldmVudCApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJJdGVtcygpOiB2b2lkIHtcclxuICAgIGlmICggIXRoaXMuaXRlbXMgKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBnZXQgdGhlIHNlYXJjaCBrZXl3b3JkXHJcbiAgICBsZXQgc2VhcmNoOiBzdHJpbmcgPSB0aGlzLml0ZW1GaWx0ZXJDdHJsLnZhbHVlO1xyXG5cclxuICAgIGlmICggIXNlYXJjaCB8fCBzZWFyY2ggPT09ICcnICkge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLm5leHQoIHRoaXMuaXRlbXMuc2xpY2UoKSApO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaCA9IHNlYXJjaC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQubmV4dChcclxuICAgICAgdGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmxlbmd0aCA+IDBcclxuICAgICAgICA/IHRoaXMuaXRlbXMuZmlsdGVyKCAoIGl0ZW0gKSA9PlxyXG4gICAgICAgICAgaXRlbS5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCBzZWFyY2gudG9Mb3dlckNhc2UoKSApXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDogW11cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbiIsIjxhcHAtZWxlbWVudC13cmFwcGVyIFtkYXRhXT1cImdldERhdGEoKVwiPlxyXG4gIDxtYXQtZm9ybS1maWVsZCBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiB1c2VPbmx5RGlzYWJsZWRDbGFzcyB9XCI+XHJcbiAgICA8bWF0LXNlbGVjdFxyXG4gICAgICBbKG5nTW9kZWwpXT1cInZhbHVlXCJcclxuICAgICAgKGNsb3NlZCk9XCJvblRvdWNoKClcIlxyXG4gICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXHJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZ2V0QWxsU2VsZWN0ZWRDaGVja2VkKClcIj57eyBhbGxMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIiFnZXRBbGxTZWxlY3RlZENoZWNrZWQoKVwiXHJcbiAgICAgICAgICA+e3sgdmFsICYmIG11bHRpcGxlID8gZ2V0TGFiZWwodmFsWzBdKSA6IGdldExhYmVsKHZhbCkgfX1cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwibXVsdGlwbGUgJiYgdmFsdWU/Lmxlbmd0aCA+IDFcIiBjbGFzcz1cImFkZGl0aW9uYWwtc2VsZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICgre3sgdXNlU2VsZWN0QWxsT3B0aW9uICYmIHRoaXMuYWxsU2VsZWN0ZWQ/LnNlbGVjdGVkID8gdmFsdWU/Lmxlbmd0aCAtIDIgOiB2YWx1ZT8ubGVuZ3RoIC0gMSB9fVxyXG4gICAgICAgICAgICB7eyAodmFsdWU/Lmxlbmd0aCA9PT0gMiA/IG90aGVyTGFiZWwgOiBvdGhlcnNMYWJlbCkgfX0pXHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCJ1c2VTZWFyY2hPcHRpb25cIj5cclxuICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoXHJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cIml0ZW1GaWx0ZXJDdHJsXCJcclxuICAgICAgICAgIFtwbGFjZWhvbGRlckxhYmVsXT1cInNlYXJjaEZpZWxkUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgW25vRW50cmllc0ZvdW5kTGFiZWxdPVwibm9FbnRyaWVzRm91bmRMYWJlbFwiXHJcbiAgICAgICAgPjwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwidXNlTm9uZU9wdGlvblwiPnt7IG5vbmVMYWJlbCB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPG1hdC1vcHRpb24gI2FsbFNlbGVjdGVkICpuZ0lmPVwidXNlU2VsZWN0QWxsT3B0aW9uXCIgKGNsaWNrKT1cInRvZ2dsZUFsbFNlbGVjdGlvbigpXCIgW3ZhbHVlXT1cInNlbGVjdEFsbFZhbHVlXCI+e3tcclxuICAgICAgICBhbGxMYWJlbFxyXG4gICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRJdGVtcyQgfCBhc3luY1wiIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCIgKGNsaWNrKT1cInRvZ2dsZVBlck9uZSgpXCI+XHJcbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9hcHAtZWxlbWVudC13cmFwcGVyPlxyXG4iXX0=
|
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1zZWxlY3QvZWNhYnMtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy1zZWxlY3QvZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUVaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGdCQUFnQixDQUFDO0FBRXhCLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9ELE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLFlBQVksRUFDWixHQUFHLEVBQ0gsWUFBWSxHQUNiLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxvQkFBb0IsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7O0FBYXhELE1BQU0sT0FBTyxvQkFDWCxTQUFRLG9CQUFvQjtJQWdENUIsWUFDbUIsUUFBa0IsRUFDbEIsaUJBQW9DO1FBRXJELEtBQUssRUFBRSxDQUFDO1FBSFMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNsQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBL0M5QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QiwyQkFBc0IsR0FBVyxRQUFRLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsdUJBQWtCLEdBQUcsS0FB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K0JBQ0UsY0FBYyxhQUViO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsc0JBQXNCOzRCQUNqQyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjsrSEFLUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csK0JBQStCO3NCQUF2QyxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksaUJBQWlCO3NCQUExQixNQUFNO2dCQUVHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRW1CLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFFeEIsd0JBQXdCO3NCQUR2QixTQUFTO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdG9yLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBTaW1wbGVDaGFuZ2VzLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXHJcbiAgTmdDb250cm9sLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtNYXRPcHRpb259IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQge01hdFNlbGVjdFNlYXJjaENvbXBvbmVudH0gZnJvbSAnbmd4LW1hdC1zZWxlY3Qtc2VhcmNoJztcclxuaW1wb3J0IHtcclxuICBCZWhhdmlvclN1YmplY3QsXHJcbiAgY29tYmluZUxhdGVzdCxcclxuICBkZWJvdW5jZVRpbWUsXHJcbiAgbWFwLFxyXG4gIFN1YnNjcmlwdGlvbixcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IEVsZW1lbnRCYXNlQ29tcG9uZW50IGZyb20gJy4uL2Jhc2UvZWxlbWVudC1iYXNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWNhYnMtc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWNhYnMtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBFY2Fic1NlbGVjdENvbXBvbmVudCxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFY2Fic1NlbGVjdENvbXBvbmVudFxyXG4gIGV4dGVuZHMgRWxlbWVudEJhc2VDb21wb25lbnRcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIGl0ZW1zITogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH1bXTtcclxuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVzZU5vbmVPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB1c2VPbmx5RGlzYWJsZWRDbGFzcyA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaEZpZWxkUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWFyY2gnO1xyXG4gIEBJbnB1dCgpIHVzZVNlYXJjaE9wdGlvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHVzZVNlbGVjdEFsbE9wdGlvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldEFsbE9wdGlvbkFmdGVyQ2hvc2VuQWxsSXRlbXMgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNlbGVjdEFsbFZhbHVlOiBhbnkgPSAwO1xyXG4gIEBJbnB1dCgpIG5vRW50cmllc0ZvdW5kTGFiZWwgPSAnTm8gbWF0Y2hpbmcgZm91bmQnO1xyXG4gIEBJbnB1dCgpIG5vbmVMYWJlbCA9ICdOb25lJztcclxuICBASW5wdXQoKSBhbGxMYWJlbCA9ICdBbGwnO1xyXG4gIEBJbnB1dCgpIG90aGVyTGFiZWwgPSAnT3RoZXInO1xyXG4gIEBJbnB1dCgpIG90aGVyc0xhYmVsID0gJ090aGVycyc7XHJcbiAgQE91dHB1dCgpIHVwZGF0ZUZpbHRlckl0ZW1zOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdhbGxTZWxlY3RlZCcpIGFsbFNlbGVjdGVkITogTWF0T3B0aW9uO1xyXG4gIEBWaWV3Q2hpbGQoTWF0U2VsZWN0U2VhcmNoQ29tcG9uZW50KVxyXG4gIG1hdFNlbGVjdFNlYXJjaENvbXBvbmVudCE6IE1hdFNlbGVjdFNlYXJjaENvbXBvbmVudDtcclxuXHJcbiAgdmFsITogYW55O1xyXG4gIGZpbHRlcmVkSXRlbXMkOiBCZWhhdmlvclN1YmplY3Q8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH1bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFxyXG4gICAgeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH1bXVxyXG4gID4oW10pO1xyXG4gIGl0ZW1GaWx0ZXJDdHJsOiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgaXNDbGVhckFsbCA9IGZhbHNlO1xyXG4gIHNob3dGaWx0ZXJlZEFsbE9wdGlvbiA9IHRydWU7XHJcbiAgc2VsZWN0ZWRJdGVtczogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH1bXSA9IFtdO1xyXG4gIG5vdFNlbGVjdGVkSXRlbXM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IGFueSB9W10gPSBbXTtcclxuICBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICBnZXQgdmFsdWUoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLnZhbDtcclxuICB9XHJcblxyXG4gIHNldCB2YWx1ZSh2YWwpIHtcclxuICAgIGlmICh0aGlzLnZhbCAhPT0gdmFsKSB7XHJcbiAgICAgIHRoaXMudmFsID0gdmFsO1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXMoKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xyXG4gICAgICB0aGlzLm9uVG91Y2godmFsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IHtpdGVtc30gPSBjaGFuZ2VzO1xyXG5cclxuICAgIGlmIChpdGVtcyAmJiBpdGVtcy5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xyXG5cclxuICAgICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy51c2VTZWxlY3RBbGxPcHRpb24gJiYgdGhpcy5hbGxTZWxlY3RlZD8uc2VsZWN0ZWQpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29udHJvbC5wYXRjaFZhbHVlKFsuLi50aGlzLmZpbHRlcmVkSXRlbXMkLnZhbHVlLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSksIHRoaXMuc2VsZWN0QWxsVmFsdWVdLCB7XHJcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LCAxMDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBOZ0NvbnRyb2wsXHJcbiAgICAgIG51bGxcclxuICAgICkgYXMgTmdDb250cm9sO1xyXG5cclxuICAgIGlmIChuZ0NvbnRyb2wpIHtcclxuICAgICAgdGhpcy5jb250cm9sID0gbmdDb250cm9sLmNvbnRyb2wgYXMgVW50eXBlZEZvcm1Db250cm9sO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm1hdFNlbGVjdFNlYXJjaENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLm1hdFNlbGVjdFNlYXJjaENvbXBvbmVudC5fc2hvd05vRW50cmllc0ZvdW5kJCA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICAgIHRoaXMuaXRlbUZpbHRlckN0cmwudmFsdWVDaGFuZ2VzLFxyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQsXHJcbiAgICAgIF0pLnBpcGUoXHJcbiAgICAgICAgbWFwKFxyXG4gICAgICAgICAgKFt2YWx1ZSwgaXRlbXNdKSA9PlxyXG4gICAgICAgICAgICB0aGlzLm1hdFNlbGVjdFNlYXJjaENvbXBvbmVudC5ub0VudHJpZXNGb3VuZExhYmVsICYmXHJcbiAgICAgICAgICAgIHZhbHVlICYmXHJcbiAgICAgICAgICAgIGl0ZW1zLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcclxuICAgICAgdGhpcy5pdGVtRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjAwKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckl0ZW1zKCk7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlckl0ZW1zLmVtaXQodmFsdWUpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmlzQ2xlYXJBbGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sLnBhdGNoVmFsdWUoW10sIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDbGVhckFsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxyXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7XHJcbiAgfTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgb25Ub3VjaDogYW55ID0gKCkgPT4ge1xyXG4gIH07XHJcblxyXG4gIHRvZ2dsZUFsbFNlbGVjdGlvbigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmFsbFNlbGVjdGVkLnNlbGVjdGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLnVzZVNlYXJjaE9wdGlvbikge1xyXG4gICAgICAgIHRoaXMuY29udHJvbC5wYXRjaFZhbHVlKFsuLi50aGlzLmZpbHRlcmVkSXRlbXMkLnZhbHVlLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSksIHRoaXMuc2VsZWN0QWxsVmFsdWVdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2wucGF0Y2hWYWx1ZShbLi4udGhpcy5pdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0udmFsdWUpLCB0aGlzLnNlbGVjdEFsbFZhbHVlXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29udHJvbC5wYXRjaFZhbHVlKFtdKTtcclxuICAgICAgdGhpcy5pc0NsZWFyQWxsID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZVBlck9uZSgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5hbGxTZWxlY3RlZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmFsbFNlbGVjdGVkLnNlbGVjdGVkKSB7XHJcbiAgICAgICAgICB0aGlzLmFsbFNlbGVjdGVkLmRlc2VsZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNldEFsbE9wdGlvbkFmdGVyQ2hvc2VuQWxsSXRlbXMgJiYgdGhpcy5jb250cm9sLnZhbHVlLmxlbmd0aCA9PT0gdGhpcy5pdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMuYWxsU2VsZWN0ZWQuc2VsZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmlzQ2xlYXJBbGwgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU5vbmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICB9XHJcblxyXG4gIGdldEFsbFNlbGVjdGVkQ2hlY2tlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmFsbFNlbGVjdGVkICE9PSB1bmRlZmluZWQgJiYgdGhpcy5hbGxTZWxlY3RlZC5zZWxlY3RlZDtcclxuICB9XHJcblxyXG4gIGdldExhYmVsKHZhbDogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLnVzZVNlbGVjdEFsbE9wdGlvbiAmJiB0aGlzLmFsbFNlbGVjdGVkPy5zZWxlY3RlZCAmJiB0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pdGVtc1swXS5sYWJlbDtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaXRlbTogeyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogYW55IH07XHJcblxyXG4gICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0aGlzLnVzZVNlYXJjaE9wdGlvbikge1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93XHJcbiAgICAgICAgICBpdGVtID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcclxuICAgICAgICAgIGl0ZW0gPSB0aGlzLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gaXRlbSA/IGl0ZW0ubGFiZWwgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoID0gZm47XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2VkKCRldmVudDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KCRldmVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlckl0ZW1zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKCk7XHJcblxyXG4gICAgaWYgKCF0aGlzLml0ZW1zKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBnZXQgdGhlIHNlYXJjaCBrZXl3b3JkXHJcbiAgICBsZXQgc2VhcmNoOiBzdHJpbmcgPSB0aGlzLml0ZW1GaWx0ZXJDdHJsLnZhbHVlO1xyXG5cclxuICAgIGlmICghc2VhcmNoIHx8IHNlYXJjaCA9PT0gJycgJiYgIXRoaXMuaXRlbXM/Lmxlbmd0aCkge1xyXG4gICAgICBpZiAodGhpcy51c2VTZWFyY2hPcHRpb24pIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLm5leHQoWy4uLnRoaXMuc2VsZWN0ZWRJdGVtc10pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQubmV4dCh0aGlzLml0ZW1zPy5zbGljZSgpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93RmlsdGVyZWRBbGxPcHRpb24gPSB0cnVlO1xyXG5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaCA9IHNlYXJjaC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIHRoaXMuc2hvd0ZpbHRlcmVkQWxsT3B0aW9uID1cclxuICAgICAgdGhpcy5hbGxMYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSB8fFxyXG4gICAgICAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIHRoaXMudmFsdWUuaW5jbHVkZXModGhpcy5zZWxlY3RBbGxWYWx1ZSkpIHx8XHJcbiAgICAgICghKHRoaXMudmFsdWUgaW5zdGFuY2VvZiBBcnJheSkgJiYgdGhpcy52YWx1ZSA9PT0gdGhpcy5zZWxlY3RBbGxWYWx1ZSk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICBpZiAodGhpcy51c2VTZWFyY2hPcHRpb24pIHtcclxuICAgICAgY29uc3QgZmlsdGVyZWRJdGVtcyA9XHJcbiAgICAgICAgdGhpcy5ub3RTZWxlY3RlZEl0ZW1zPy5sZW5ndGggPiAwXHJcbiAgICAgICAgICA/IHRoaXMubm90U2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpXHJcbiAgICAgICAgICA6IFtdO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkSXRlbXMkLm5leHQoWy4uLnRoaXMuc2VsZWN0ZWRJdGVtcywgLi4uZmlsdGVyZWRJdGVtc10pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJlZEl0ZW1zJC5uZXh0KFxyXG4gICAgICAgIHRoaXMuaXRlbXM/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgID8gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpXHJcbiAgICAgICAgICA6IFtdXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkSXRlbXMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy51c2VTZWFyY2hPcHRpb24pIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG5cclxuICAgICAgaWYgKHRoaXMudmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICBjb25zdCBza2lwU3RlcHMgPSB0aGlzLnZhbHVlLmluY2x1ZGVzKHRoaXMuc2VsZWN0QWxsVmFsdWUpO1xyXG5cclxuICAgICAgICAgIGlmICghc2tpcFN0ZXBzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZm9yRWFjaCgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgoKHNlbGVjdGVkSXRlbSkgPT4gc2VsZWN0ZWRJdGVtLnZhbHVlID09PSB2YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLnNlbGVjdGVkSXRlbXNbaW5kZXhdKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3dcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT09IHZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChzZWxlY3RlZEl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMudmFsdWUuZmluZCgodmFsdWUpID0+IHNlbGVjdGVkSXRlbS52YWx1ZSA9PT0gdmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmluZEluZGV4KChzZWxlY3RlZEl0ZW0pID0+IHNlbGVjdGVkSXRlbS52YWx1ZSA9PT0gdGhpcy52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5zZWxlY3RlZEl0ZW1zW2luZGV4XSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvd1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLnZhbHVlID09PSB0aGlzLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtZGVwdGhcclxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFsuLi5zZWxlY3RlZEl0ZW1zXTtcclxuICAgICAgICB0aGlzLm5vdFNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zPy5maWx0ZXIoXHJcbiAgICAgICAgICAoaXRlbSkgPT4gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbmRJbmRleCgoc2VsZWN0ZWRJdGVtKSA9PiBzZWxlY3RlZEl0ZW0udmFsdWUgPT09IGl0ZW0udmFsdWUpID09PSAtMVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5ub3RTZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcz8uc2xpY2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8YXBwLWVsZW1lbnQtd3JhcHBlciBbZGF0YV09XCJnZXREYXRhKClcIj5cclxuICA8bWF0LWZvcm0tZmllbGQgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogdXNlT25seURpc2FibGVkQ2xhc3MgfVwiPlxyXG4gICAgPG1hdC1zZWxlY3RcclxuICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXHJcbiAgICAgIChjbG9zZWQpPVwib25Ub3VjaCgpXCJcclxuICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgID5cclxuICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImdldEFsbFNlbGVjdGVkQ2hlY2tlZCgpXCI+e3sgYWxsTGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhZ2V0QWxsU2VsZWN0ZWRDaGVja2VkKClcIlxyXG4gICAgICAgICAgPnt7IHZhbCAmJiBtdWx0aXBsZSA/IGdldExhYmVsKHZhbFswXSkgOiBnZXRMYWJlbCh2YWwpIH19XHJcbiAgICAgICAgICA8c3BhbiAqbmdJZj1cIm11bHRpcGxlICYmIHZhbHVlPy5sZW5ndGggPiAxXCIgY2xhc3M9XCJhZGRpdGlvbmFsLXNlbGVjdGlvblwiPlxyXG4gICAgICAgICAgICAoK3t7IHVzZVNlbGVjdEFsbE9wdGlvbiAmJiB0aGlzLmFsbFNlbGVjdGVkPy5zZWxlY3RlZCA/IHZhbHVlPy5sZW5ndGggLSAyIDogdmFsdWU/Lmxlbmd0aCAtIDEgfX1cclxuICAgICAgICAgICAge3sgKHZhbHVlPy5sZW5ndGggPT09IDIgPyBvdGhlckxhYmVsIDogb3RoZXJzTGFiZWwpIH19KVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwidXNlU2VhcmNoT3B0aW9uXCI+XHJcbiAgICAgICAgPG5neC1tYXQtc2VsZWN0LXNlYXJjaFxyXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJpdGVtRmlsdGVyQ3RybFwiXHJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJMYWJlbF09XCJzZWFyY2hGaWVsZFBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgIFtub0VudHJpZXNGb3VuZExhYmVsXT1cIm5vRW50cmllc0ZvdW5kTGFiZWxcIlxyXG4gICAgICAgID48L25neC1tYXQtc2VsZWN0LXNlYXJjaD5cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cInVzZU5vbmVPcHRpb25cIiAoY2xpY2spPVwidG9nZ2xlTm9uZSgpXCI+e3sgbm9uZUxhYmVsIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICA8bWF0LW9wdGlvbiAjYWxsU2VsZWN0ZWQgKm5nSWY9XCJ1c2VTZWxlY3RBbGxPcHRpb24gJiYgc2hvd0ZpbHRlcmVkQWxsT3B0aW9uXCIgKGNsaWNrKT1cInRvZ2dsZUFsbFNlbGVjdGlvbigpXCIgW3ZhbHVlXT1cInNlbGVjdEFsbFZhbHVlXCI+e3tcclxuICAgICAgICBhbGxMYWJlbFxyXG4gICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgZmlsdGVyZWRJdGVtcyQgfCBhc3luY1wiIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCIgKGNsaWNrKT1cInRvZ2dsZVBlck9uZSgpXCI+XHJcbiAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuPC9hcHAtZWxlbWVudC13cmFwcGVyPlxyXG4iXX0=
|