@huntsman-cancer-institute/input 16.0.0 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/date/date-base.d.ts +65 -65
  2. package/date/date-date-range.component.d.ts +32 -32
  3. package/date/date-date.component.d.ts +53 -53
  4. package/date/date-validator.d.ts +17 -17
  5. package/date/date.module.d.ts +16 -16
  6. package/dropdown/dropdown-index.d.ts +6 -6
  7. package/dropdown/dropdown-select-result.component.d.ts +23 -23
  8. package/dropdown/dropdown-select.component.d.ts +76 -76
  9. package/dropdown/dropdown.component.d.ts +40 -40
  10. package/dropdown/dropdown.module.d.ts +13 -13
  11. package/dropdown/dropdown.service.d.ts +51 -51
  12. package/dropdown/messages.d.ts +11 -11
  13. package/dropdown/select-item.d.ts +16 -16
  14. package/dropdown/template-dropdown.directive.d.ts +12 -12
  15. package/esm2022/date/date-base.mjs +114 -114
  16. package/esm2022/date/date-date-range.component.mjs +92 -92
  17. package/esm2022/date/date-date.component.mjs +189 -189
  18. package/esm2022/date/date-validator.mjs +40 -40
  19. package/esm2022/date/date.module.mjs +60 -60
  20. package/esm2022/dropdown/dropdown-index.mjs +5 -5
  21. package/esm2022/dropdown/dropdown-select-result.component.mjs +85 -85
  22. package/esm2022/dropdown/dropdown-select.component.mjs +360 -360
  23. package/esm2022/dropdown/dropdown.component.mjs +170 -170
  24. package/esm2022/dropdown/dropdown.module.mjs +50 -50
  25. package/esm2022/dropdown/dropdown.service.mjs +133 -133
  26. package/esm2022/dropdown/messages.mjs +9 -9
  27. package/esm2022/dropdown/select-item.mjs +11 -11
  28. package/esm2022/dropdown/template-dropdown.directive.mjs +26 -26
  29. package/esm2022/huntsman-cancer-institute-input.mjs +4 -4
  30. package/esm2022/index.mjs +19 -19
  31. package/esm2022/inline/inline.component.mjs +179 -179
  32. package/esm2022/inline/inline.module.mjs +28 -28
  33. package/esm2022/search/search.component.mjs +157 -157
  34. package/esm2022/search/search.module.mjs +32 -32
  35. package/esm2022/select/custom-combobox.component.mjs +531 -531
  36. package/esm2022/select/custom-multi-combobox.component.mjs +232 -232
  37. package/esm2022/select/md-multi-select.component.mjs +127 -127
  38. package/esm2022/select/md-select.component.mjs +107 -107
  39. package/esm2022/select/native-select.component.mjs +188 -188
  40. package/esm2022/select/select.module.mjs +83 -83
  41. package/fesm2022/huntsman-cancer-institute-input.mjs +2797 -2797
  42. package/fesm2022/huntsman-cancer-institute-input.mjs.map +1 -1
  43. package/index.d.ts +20 -20
  44. package/inline/inline.component.d.ts +66 -66
  45. package/inline/inline.module.d.ts +9 -9
  46. package/package.json +16 -8
  47. package/search/search.component.d.ts +42 -42
  48. package/search/search.module.d.ts +10 -10
  49. package/select/custom-combobox.component.d.ts +98 -98
  50. package/select/custom-multi-combobox.component.d.ts +50 -50
  51. package/select/md-multi-select.component.d.ts +32 -32
  52. package/select/md-select.component.d.ts +30 -30
  53. package/select/native-select.component.d.ts +37 -37
  54. package/select/select.module.d.ts +21 -21
@@ -1,315 +1,315 @@
1
- import { Component, Input, EventEmitter, ViewChild, forwardRef, Output } from "@angular/core";
2
- import { UntypedFormControl, NG_VALUE_ACCESSOR } from "@angular/forms";
3
- import { of } from "rxjs";
4
- import { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap, tap } from "rxjs/operators";
5
- import { DropdownSelectResultComponent } from "./dropdown-select-result.component";
6
- import { KEY_CODE } from "./select-item";
7
- import { Messages } from "./messages";
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/common";
10
- import * as i2 from "@angular/forms";
11
- import * as i3 from "./dropdown-select-result.component";
12
- const VALUE_ACCESSOR = {
13
- provide: NG_VALUE_ACCESSOR,
14
- useExisting: forwardRef(() => DropdownSelectComponent),
15
- multi: true
16
- };
17
- const noop = () => { };
18
- export class DropdownSelectComponent {
19
- constructor() {
20
- this.MORE_RESULTS_MSG = "Showing " + Messages.PARTIAL_COUNT_VAR + " of " + Messages.TOTAL_COUNT_VAR + " results.";
21
- this.NO_RESULTS_MSG = "No results found";
22
- this.messages = {
23
- moreResultsMsg: this.MORE_RESULTS_MSG,
24
- noResultsMsg: this.NO_RESULTS_MSG
25
- };
26
- this.referenceMode = "id";
27
- this.placeholder = "";
28
- this.disabled = false;
29
- this.multiple = false;
30
- this.clientMode = false;
31
- this.deleteIcon = "fas fa-times-circle";
32
- this.inputState = 2; // selectIcon controller: 0->with selectIcon 2->without selectIcon
33
- this.searchDelay = 100;
34
- this.select = new EventEmitter();
35
- this.remove = new EventEmitter();
36
- this.onTouchedCallback = noop;
37
- this.onChangeCallback = noop;
38
- this.term = new UntypedFormControl();
39
- this.searchFocused = false;
40
- this.resultsVisible = false;
41
- this.selectedItems = [];
42
- this.placeholderSelected = "";
43
- }
44
- ngAfterViewInit() {
45
- this.subscribeToChangesAndLoadDataFromObservable();
46
- }
47
- onItemSelected(item) {
48
- if (this.multiple) {
49
- this.selectedItems.push(item);
50
- const index = this.listedData.indexOf(item, 0);
51
- if (index > -1) {
52
- this.listedData.splice(index, 1);
53
- }
54
- }
55
- else {
56
- this.selectedItems.length = 0;
57
- this.selectedItems.push(item);
58
- }
59
- this.onChangeCallback(this.buildValue());
60
- this.term.patchValue("", { emitEvent: false });
61
- setTimeout(() => this.focusInput(), 1);
62
- this.resultsVisible = false;
63
- this.select.emit(item);
64
- if (!this.multiple) {
65
- this.placeholderSelected = item.text;
66
- }
67
- }
68
- focusInput() {
69
- if (!this.disabled) {
70
- this.termInput.nativeElement.focus();
71
- this.resultsVisible = false;
72
- }
73
- this.searchFocused = !this.disabled;
74
- }
75
- writeValue(selectedValues) {
76
- if (selectedValues) {
77
- if (this.referenceMode === "id") {
78
- this.populateItemsFromIds(selectedValues);
79
- }
80
- else {
81
- this.populateItemsFromEntities(selectedValues);
82
- }
83
- }
84
- else {
85
- this.placeholderSelected = "";
86
- this.selectedItems = [];
87
- }
88
- }
89
- getCountMessage() {
90
- let msg = this.messages && this.messages.moreResultsMsg ? this.messages.moreResultsMsg : this.MORE_RESULTS_MSG;
91
- msg = msg.replace(Messages.PARTIAL_COUNT_VAR, String(this.listedData.length));
92
- msg = msg.replace(Messages.TOTAL_COUNT_VAR, String(this.resultsCount - this.selectedItems.length));
93
- return msg;
94
- }
95
- setDisabledState(isDisabled) {
96
- this.disabled = isDisabled;
97
- }
98
- registerOnChange(fn) {
99
- this.onChangeCallback = fn;
100
- }
101
- registerOnTouched(fn) {
102
- this.onTouchedCallback = fn;
103
- }
104
- removeItem(item) {
105
- const index = this.selectedItems.indexOf(item, 0);
106
- if (index > -1) {
107
- this.selectedItems.splice(index, 1);
108
- }
109
- this.onChangeCallback(this.buildValue());
110
- this.remove.emit(item);
111
- if (!this.multiple) {
112
- this.placeholderSelected = "";
113
- }
114
- }
115
- getPlaceholder() {
116
- return this.selectedItems.length > 0 ? this.placeholderSelected : this.placeholder;
117
- }
118
- getInputWidth() {
119
- const searchEmpty = this.selectedItems.length === 0 && (this.term.value === null || this.term.value.length === 0);
120
- const length = this.term.value === null ? 0 : this.term.value.length;
121
- if (!this.multiple) {
122
- return "100%";
123
- }
124
- else {
125
- return searchEmpty ? "100%" : (1 + length * .6) + "em";
126
- }
127
- }
128
- isHideable() {
129
- return !this.multiple && this.placeholderSelected !== "";
130
- }
131
- onFocus() {
132
- this.searchFocused = true;
133
- }
134
- onBlur() {
135
- this.term.patchValue("", { emitEvent: false });
136
- this.searchFocused = false;
137
- this.resultsVisible = false;
138
- this.onTouchedCallback();
139
- }
140
- onKeyUp(ev) {
141
- if (this.results) {
142
- if (ev.keyCode === KEY_CODE.DOWN_ARROW) {
143
- this.results.activeNext();
144
- }
145
- else if (ev.keyCode === KEY_CODE.UP_ARROW) {
146
- this.results.activePrevious();
147
- }
148
- else if (ev.keyCode === KEY_CODE.ENTER) {
149
- this.results.selectCurrentItem();
150
- }
151
- }
152
- else {
153
- if (this.inputState === 0) {
154
- if (ev.keyCode === KEY_CODE.ENTER || ev.keyCode === KEY_CODE.DOWN_ARROW) {
155
- this.showResults();
156
- }
157
- }
158
- }
159
- }
160
- onKeyDown(ev) {
161
- if (this.results) {
162
- if (ev.keyCode === KEY_CODE.TAB) {
163
- this.results.selectCurrentItem();
164
- }
165
- }
166
- if (ev.keyCode === KEY_CODE.DELETE) {
167
- if ((!this.term.value || this.term.value.length === 0) && this.selectedItems.length > 0) {
168
- this.removeItem(this.selectedItems[this.selectedItems.length - 1]);
169
- }
170
- }
171
- }
172
- onKeyPress(ev) {
173
- if (ev.keyCode === KEY_CODE.ENTER) {
174
- ev.preventDefault();
175
- }
176
- }
177
- showResults() {
178
- if (!this.disabled) {
179
- this.termInput.nativeElement.focus();
180
- this.subscribeToResults(of(""));
181
- }
182
- this.searchFocused = !this.disabled;
183
- }
184
- focus() {
185
- this.termInput.nativeElement.focus();
186
- }
187
- subscribeToChangesAndLoadDataFromObservable() {
188
- const observable = this.term.valueChanges.pipe(debounceTime(this.searchDelay), distinctUntilChanged());
189
- this.subscribeToResults(observable);
190
- }
191
- subscribeToResults(observable) {
192
- observable.pipe(tap(() => this.resultsVisible = false), filter((term) => term.length >= this.inputState), switchMap(term => this.loadDataFromObservable(term)), map(items => items.filter(item => !(this.multiple && this.alreadySelected(item)))), tap(() => this.resultsVisible = this.searchFocused)).subscribe((items) => this.listedData = items);
193
- }
194
- loadDataFromObservable(term) {
195
- return this.clientMode ? this.fetchAndfilterLocalData(term) : this.fetchData(term);
196
- }
197
- alreadySelected(item) {
198
- let result = false;
199
- this.selectedItems.forEach(selectedItem => {
200
- if (selectedItem.id === item.id) {
201
- result = true;
202
- }
203
- });
204
- return result;
205
- }
206
- fetchAndfilterLocalData(term) {
207
- if (!this.modifiedData) {
208
- return this.fetchData("").pipe(mergeMap((items) => {
209
- this.modifiedData = items;
210
- return this.filterLocalData(term);
211
- }));
212
- }
213
- else {
214
- return this.filterLocalData(term);
215
- }
216
- }
217
- fetchData(term) {
218
- return this
219
- .dataProvider(term, this.buildValue())
220
- .pipe(map((items) => this.adaptItems(items)));
221
- }
222
- filterLocalData(term) {
223
- return of(this.modifiedData.filter((item) => this.containsText(item, term)));
224
- }
225
- containsText(item, term) {
226
- return item.text.toUpperCase().indexOf(term.toUpperCase()) !== -1;
227
- }
228
- adaptItems(items) {
229
- const convertedItems = [];
230
- items.map((item) => this.selectItemAdapter(item))
231
- .forEach((selectItem) => convertedItems.push(selectItem));
232
- return convertedItems;
233
- }
234
- buildValue() {
235
- return "id" === this.referenceMode ? this.getSelectedIds() : this.getEntities();
236
- }
237
- getSelectedIds() {
238
- if (this.multiple) {
239
- const ids = [];
240
- this.selectedItems.forEach(item => ids.push(item.id));
241
- return ids;
242
- }
243
- else {
244
- return this.selectedItems.length === 0 ? null : this.selectedItems[0].id;
245
- }
246
- }
247
- getEntities() {
248
- if (this.multiple) {
249
- const entities = [];
250
- this.selectedItems.forEach(item => {
251
- entities.push(item.entity);
252
- });
253
- return entities;
254
- }
255
- else {
256
- return this.selectedItems.length === 0 ? null : this.selectedItems[0].entity;
257
- }
258
- }
259
- populateItemsFromEntities(selectedValues) {
260
- if (this.multiple) {
261
- this.handleMultipleWithEntities(selectedValues);
262
- }
263
- else {
264
- const selectItem = this.selectItemAdapter(selectedValues);
265
- this.selectedItems = [selectItem];
266
- this.placeholderSelected = selectItem.text;
267
- }
268
- }
269
- handleMultipleWithEntities(selectedValues) {
270
- this.selectedItems = [];
271
- selectedValues.forEach((entity) => {
272
- const item = this.selectItemAdapter(entity);
273
- const ids = this.getSelectedIds();
274
- if (ids.indexOf(item.id) === -1) {
275
- this.selectedItems.push(item);
276
- }
277
- });
278
- }
279
- populateItemsFromIds(selectedValues) {
280
- if (this.multiple) {
281
- this.handleMultipleWithIds(selectedValues);
282
- }
283
- else {
284
- this.handleSingleWithId(selectedValues);
285
- }
286
- }
287
- handleMultipleWithIds(selectedValues) {
288
- if (selectedValues !== undefined && this.selectedProvider !== undefined) {
289
- const uniqueIds = [];
290
- selectedValues.forEach((id) => {
291
- if (uniqueIds.indexOf(id) === -1) {
292
- uniqueIds.push(id);
293
- }
294
- });
295
- this.selectedProvider(uniqueIds).subscribe((items) => {
296
- this.selectedItems = items.map(this.selectItemAdapter);
297
- });
298
- }
299
- }
300
- handleSingleWithId(id) {
301
- if (id !== undefined && this.selectedProvider !== undefined) {
302
- this.selectedProvider([id]).subscribe((items) => {
303
- items.forEach((item) => {
304
- const selectItem = this.selectItemAdapter(item);
305
- this.selectedItems = [selectItem];
306
- this.placeholderSelected = selectItem.text;
307
- });
308
- });
309
- }
310
- }
311
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
312
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DropdownSelectComponent, selector: "hci-dropdown-select", inputs: { messages: "messages", dataProvider: "dataProvider", selectedProvider: "selectedProvider", selectItemAdapter: "selectItemAdapter", referenceMode: "referenceMode", placeholder: "placeholder", disabled: "disabled", multiple: "multiple", clientMode: "clientMode", deleteIcon: "deleteIcon", inputState: "inputState", resultsCount: "resultsCount", searchDelay: "searchDelay" }, outputs: { select: "select", remove: "remove" }, host: { classAttribute: "flex-grow-1" }, providers: [VALUE_ACCESSOR], viewQueries: [{ propertyName: "results", first: true, predicate: ["results"], descendants: true }, { propertyName: "termInput", first: true, predicate: ["termInput"], descendants: true }], ngImport: i0, template: `
1
+ import { Component, Input, EventEmitter, ViewChild, forwardRef, Output } from "@angular/core";
2
+ import { UntypedFormControl, NG_VALUE_ACCESSOR } from "@angular/forms";
3
+ import { of } from "rxjs";
4
+ import { debounceTime, distinctUntilChanged, filter, map, mergeMap, switchMap, tap } from "rxjs/operators";
5
+ import { DropdownSelectResultComponent } from "./dropdown-select-result.component";
6
+ import { KEY_CODE } from "./select-item";
7
+ import { Messages } from "./messages";
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ import * as i2 from "@angular/forms";
11
+ import * as i3 from "./dropdown-select-result.component";
12
+ const VALUE_ACCESSOR = {
13
+ provide: NG_VALUE_ACCESSOR,
14
+ useExisting: forwardRef(() => DropdownSelectComponent),
15
+ multi: true
16
+ };
17
+ const noop = () => { };
18
+ export class DropdownSelectComponent {
19
+ constructor() {
20
+ this.MORE_RESULTS_MSG = "Showing " + Messages.PARTIAL_COUNT_VAR + " of " + Messages.TOTAL_COUNT_VAR + " results.";
21
+ this.NO_RESULTS_MSG = "No results found";
22
+ this.messages = {
23
+ moreResultsMsg: this.MORE_RESULTS_MSG,
24
+ noResultsMsg: this.NO_RESULTS_MSG
25
+ };
26
+ this.referenceMode = "id";
27
+ this.placeholder = "";
28
+ this.disabled = false;
29
+ this.multiple = false;
30
+ this.clientMode = false;
31
+ this.deleteIcon = "fas fa-times-circle";
32
+ this.inputState = 2; // selectIcon controller: 0->with selectIcon 2->without selectIcon
33
+ this.searchDelay = 100;
34
+ this.select = new EventEmitter();
35
+ this.remove = new EventEmitter();
36
+ this.onTouchedCallback = noop;
37
+ this.onChangeCallback = noop;
38
+ this.term = new UntypedFormControl();
39
+ this.searchFocused = false;
40
+ this.resultsVisible = false;
41
+ this.selectedItems = [];
42
+ this.placeholderSelected = "";
43
+ }
44
+ ngAfterViewInit() {
45
+ this.subscribeToChangesAndLoadDataFromObservable();
46
+ }
47
+ onItemSelected(item) {
48
+ if (this.multiple) {
49
+ this.selectedItems.push(item);
50
+ const index = this.listedData.indexOf(item, 0);
51
+ if (index > -1) {
52
+ this.listedData.splice(index, 1);
53
+ }
54
+ }
55
+ else {
56
+ this.selectedItems.length = 0;
57
+ this.selectedItems.push(item);
58
+ }
59
+ this.onChangeCallback(this.buildValue());
60
+ this.term.patchValue("", { emitEvent: false });
61
+ setTimeout(() => this.focusInput(), 1);
62
+ this.resultsVisible = false;
63
+ this.select.emit(item);
64
+ if (!this.multiple) {
65
+ this.placeholderSelected = item.text;
66
+ }
67
+ }
68
+ focusInput() {
69
+ if (!this.disabled) {
70
+ this.termInput.nativeElement.focus();
71
+ this.resultsVisible = false;
72
+ }
73
+ this.searchFocused = !this.disabled;
74
+ }
75
+ writeValue(selectedValues) {
76
+ if (selectedValues) {
77
+ if (this.referenceMode === "id") {
78
+ this.populateItemsFromIds(selectedValues);
79
+ }
80
+ else {
81
+ this.populateItemsFromEntities(selectedValues);
82
+ }
83
+ }
84
+ else {
85
+ this.placeholderSelected = "";
86
+ this.selectedItems = [];
87
+ }
88
+ }
89
+ getCountMessage() {
90
+ let msg = this.messages && this.messages.moreResultsMsg ? this.messages.moreResultsMsg : this.MORE_RESULTS_MSG;
91
+ msg = msg.replace(Messages.PARTIAL_COUNT_VAR, String(this.listedData.length));
92
+ msg = msg.replace(Messages.TOTAL_COUNT_VAR, String(this.resultsCount - this.selectedItems.length));
93
+ return msg;
94
+ }
95
+ setDisabledState(isDisabled) {
96
+ this.disabled = isDisabled;
97
+ }
98
+ registerOnChange(fn) {
99
+ this.onChangeCallback = fn;
100
+ }
101
+ registerOnTouched(fn) {
102
+ this.onTouchedCallback = fn;
103
+ }
104
+ removeItem(item) {
105
+ const index = this.selectedItems.indexOf(item, 0);
106
+ if (index > -1) {
107
+ this.selectedItems.splice(index, 1);
108
+ }
109
+ this.onChangeCallback(this.buildValue());
110
+ this.remove.emit(item);
111
+ if (!this.multiple) {
112
+ this.placeholderSelected = "";
113
+ }
114
+ }
115
+ getPlaceholder() {
116
+ return this.selectedItems.length > 0 ? this.placeholderSelected : this.placeholder;
117
+ }
118
+ getInputWidth() {
119
+ const searchEmpty = this.selectedItems.length === 0 && (this.term.value === null || this.term.value.length === 0);
120
+ const length = this.term.value === null ? 0 : this.term.value.length;
121
+ if (!this.multiple) {
122
+ return "100%";
123
+ }
124
+ else {
125
+ return searchEmpty ? "100%" : (1 + length * .6) + "em";
126
+ }
127
+ }
128
+ isHideable() {
129
+ return !this.multiple && this.placeholderSelected !== "";
130
+ }
131
+ onFocus() {
132
+ this.searchFocused = true;
133
+ }
134
+ onBlur() {
135
+ this.term.patchValue("", { emitEvent: false });
136
+ this.searchFocused = false;
137
+ this.resultsVisible = false;
138
+ this.onTouchedCallback();
139
+ }
140
+ onKeyUp(ev) {
141
+ if (this.results) {
142
+ if (ev.keyCode === KEY_CODE.DOWN_ARROW) {
143
+ this.results.activeNext();
144
+ }
145
+ else if (ev.keyCode === KEY_CODE.UP_ARROW) {
146
+ this.results.activePrevious();
147
+ }
148
+ else if (ev.keyCode === KEY_CODE.ENTER) {
149
+ this.results.selectCurrentItem();
150
+ }
151
+ }
152
+ else {
153
+ if (this.inputState === 0) {
154
+ if (ev.keyCode === KEY_CODE.ENTER || ev.keyCode === KEY_CODE.DOWN_ARROW) {
155
+ this.showResults();
156
+ }
157
+ }
158
+ }
159
+ }
160
+ onKeyDown(ev) {
161
+ if (this.results) {
162
+ if (ev.keyCode === KEY_CODE.TAB) {
163
+ this.results.selectCurrentItem();
164
+ }
165
+ }
166
+ if (ev.keyCode === KEY_CODE.DELETE) {
167
+ if ((!this.term.value || this.term.value.length === 0) && this.selectedItems.length > 0) {
168
+ this.removeItem(this.selectedItems[this.selectedItems.length - 1]);
169
+ }
170
+ }
171
+ }
172
+ onKeyPress(ev) {
173
+ if (ev.keyCode === KEY_CODE.ENTER) {
174
+ ev.preventDefault();
175
+ }
176
+ }
177
+ showResults() {
178
+ if (!this.disabled) {
179
+ this.termInput.nativeElement.focus();
180
+ this.subscribeToResults(of(""));
181
+ }
182
+ this.searchFocused = !this.disabled;
183
+ }
184
+ focus() {
185
+ this.termInput.nativeElement.focus();
186
+ }
187
+ subscribeToChangesAndLoadDataFromObservable() {
188
+ const observable = this.term.valueChanges.pipe(debounceTime(this.searchDelay), distinctUntilChanged());
189
+ this.subscribeToResults(observable);
190
+ }
191
+ subscribeToResults(observable) {
192
+ observable.pipe(tap(() => this.resultsVisible = false), filter((term) => term.length >= this.inputState), switchMap(term => this.loadDataFromObservable(term)), map(items => items.filter(item => !(this.multiple && this.alreadySelected(item)))), tap(() => this.resultsVisible = this.searchFocused)).subscribe((items) => this.listedData = items);
193
+ }
194
+ loadDataFromObservable(term) {
195
+ return this.clientMode ? this.fetchAndfilterLocalData(term) : this.fetchData(term);
196
+ }
197
+ alreadySelected(item) {
198
+ let result = false;
199
+ this.selectedItems.forEach(selectedItem => {
200
+ if (selectedItem.id === item.id) {
201
+ result = true;
202
+ }
203
+ });
204
+ return result;
205
+ }
206
+ fetchAndfilterLocalData(term) {
207
+ if (!this.modifiedData) {
208
+ return this.fetchData("").pipe(mergeMap((items) => {
209
+ this.modifiedData = items;
210
+ return this.filterLocalData(term);
211
+ }));
212
+ }
213
+ else {
214
+ return this.filterLocalData(term);
215
+ }
216
+ }
217
+ fetchData(term) {
218
+ return this
219
+ .dataProvider(term, this.buildValue())
220
+ .pipe(map((items) => this.adaptItems(items)));
221
+ }
222
+ filterLocalData(term) {
223
+ return of(this.modifiedData.filter((item) => this.containsText(item, term)));
224
+ }
225
+ containsText(item, term) {
226
+ return item.text.toUpperCase().indexOf(term.toUpperCase()) !== -1;
227
+ }
228
+ adaptItems(items) {
229
+ const convertedItems = [];
230
+ items.map((item) => this.selectItemAdapter(item))
231
+ .forEach((selectItem) => convertedItems.push(selectItem));
232
+ return convertedItems;
233
+ }
234
+ buildValue() {
235
+ return "id" === this.referenceMode ? this.getSelectedIds() : this.getEntities();
236
+ }
237
+ getSelectedIds() {
238
+ if (this.multiple) {
239
+ const ids = [];
240
+ this.selectedItems.forEach(item => ids.push(item.id));
241
+ return ids;
242
+ }
243
+ else {
244
+ return this.selectedItems.length === 0 ? null : this.selectedItems[0].id;
245
+ }
246
+ }
247
+ getEntities() {
248
+ if (this.multiple) {
249
+ const entities = [];
250
+ this.selectedItems.forEach(item => {
251
+ entities.push(item.entity);
252
+ });
253
+ return entities;
254
+ }
255
+ else {
256
+ return this.selectedItems.length === 0 ? null : this.selectedItems[0].entity;
257
+ }
258
+ }
259
+ populateItemsFromEntities(selectedValues) {
260
+ if (this.multiple) {
261
+ this.handleMultipleWithEntities(selectedValues);
262
+ }
263
+ else {
264
+ const selectItem = this.selectItemAdapter(selectedValues);
265
+ this.selectedItems = [selectItem];
266
+ this.placeholderSelected = selectItem.text;
267
+ }
268
+ }
269
+ handleMultipleWithEntities(selectedValues) {
270
+ this.selectedItems = [];
271
+ selectedValues.forEach((entity) => {
272
+ const item = this.selectItemAdapter(entity);
273
+ const ids = this.getSelectedIds();
274
+ if (ids.indexOf(item.id) === -1) {
275
+ this.selectedItems.push(item);
276
+ }
277
+ });
278
+ }
279
+ populateItemsFromIds(selectedValues) {
280
+ if (this.multiple) {
281
+ this.handleMultipleWithIds(selectedValues);
282
+ }
283
+ else {
284
+ this.handleSingleWithId(selectedValues);
285
+ }
286
+ }
287
+ handleMultipleWithIds(selectedValues) {
288
+ if (selectedValues !== undefined && this.selectedProvider !== undefined) {
289
+ const uniqueIds = [];
290
+ selectedValues.forEach((id) => {
291
+ if (uniqueIds.indexOf(id) === -1) {
292
+ uniqueIds.push(id);
293
+ }
294
+ });
295
+ this.selectedProvider(uniqueIds).subscribe((items) => {
296
+ this.selectedItems = items.map(this.selectItemAdapter);
297
+ });
298
+ }
299
+ }
300
+ handleSingleWithId(id) {
301
+ if (id !== undefined && this.selectedProvider !== undefined) {
302
+ this.selectedProvider([id]).subscribe((items) => {
303
+ items.forEach((item) => {
304
+ const selectItem = this.selectItemAdapter(item);
305
+ this.selectedItems = [selectItem];
306
+ this.placeholderSelected = selectItem.text;
307
+ });
308
+ });
309
+ }
310
+ }
311
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DropdownSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
312
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: DropdownSelectComponent, selector: "hci-dropdown-select", inputs: { messages: "messages", dataProvider: "dataProvider", selectedProvider: "selectedProvider", selectItemAdapter: "selectItemAdapter", referenceMode: "referenceMode", placeholder: "placeholder", disabled: "disabled", multiple: "multiple", clientMode: "clientMode", deleteIcon: "deleteIcon", inputState: "inputState", resultsCount: "resultsCount", searchDelay: "searchDelay" }, outputs: { select: "select", remove: "remove" }, host: { classAttribute: "flex-grow-1" }, providers: [VALUE_ACCESSOR], viewQueries: [{ propertyName: "results", first: true, predicate: ["results"], descendants: true }, { propertyName: "termInput", first: true, predicate: ["termInput"], descendants: true }], ngImport: i0, template: `
313
313
  <div class="select-container">
314
314
  <ul class="form-control"
315
315
  [class.simple-selection]="!multiple"
@@ -359,12 +359,12 @@ export class DropdownSelectComponent {
359
359
  [searchFocused]="searchFocused"></hci-dropdown-select-result>
360
360
  </div>
361
361
  </div>
362
- `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.DropdownSelectResultComponent, selector: "hci-dropdown-select-result", inputs: ["items", "searchFocused", "selectedItems", "templateRef"], outputs: ["itemSelectedEvent"] }] }); }
363
- }
364
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownSelectComponent, decorators: [{
365
- type: Component,
366
- args: [{
367
- selector: "hci-dropdown-select",
362
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i3.DropdownSelectResultComponent, selector: "hci-dropdown-select-result", inputs: ["items", "searchFocused", "selectedItems", "templateRef"], outputs: ["itemSelectedEvent"] }] }); }
363
+ }
364
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: DropdownSelectComponent, decorators: [{
365
+ type: Component,
366
+ args: [{
367
+ selector: "hci-dropdown-select",
368
368
  template: `
369
369
  <div class="select-container">
370
370
  <ul class="form-control"
@@ -415,45 +415,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
415
415
  [searchFocused]="searchFocused"></hci-dropdown-select-result>
416
416
  </div>
417
417
  </div>
418
- `,
419
- providers: [VALUE_ACCESSOR],
420
- host: { class: "flex-grow-1" }
421
- }]
422
- }], propDecorators: { messages: [{
423
- type: Input
424
- }], dataProvider: [{
425
- type: Input
426
- }], selectedProvider: [{
427
- type: Input
428
- }], selectItemAdapter: [{
429
- type: Input
430
- }], referenceMode: [{
431
- type: Input
432
- }], placeholder: [{
433
- type: Input
434
- }], disabled: [{
435
- type: Input
436
- }], multiple: [{
437
- type: Input
438
- }], clientMode: [{
439
- type: Input
440
- }], deleteIcon: [{
441
- type: Input
442
- }], inputState: [{
443
- type: Input
444
- }], resultsCount: [{
445
- type: Input
446
- }], searchDelay: [{
447
- type: Input
448
- }], select: [{
449
- type: Output
450
- }], remove: [{
451
- type: Output
452
- }], results: [{
453
- type: ViewChild,
454
- args: ["results", { static: false }]
455
- }], termInput: [{
456
- type: ViewChild,
457
- args: ["termInput", { static: false }]
458
- }] } });
459
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2lucHV0L3NyYy9kcm9wZG93bi9kcm9wZG93bi1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLEtBQUssRUFBZSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEgsT0FBTyxFQUF1QixrQkFBa0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTNGLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekcsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDakYsT0FBTyxFQUFhLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDOzs7OztBQUVwQyxNQUFNLGNBQWMsR0FBRztJQUNyQixPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUM7SUFDdEQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0FBMER0QixNQUFNLE9BQU8sdUJBQXVCO0lBeERwQztRQTBERSxxQkFBZ0IsR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztRQUM3Ryxt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LE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBRWdDLE9BQU87c0JBQTdDLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFZWSxTQUFTO3NCQUF6RCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQsIFRlbXBsYXRlUmVmLCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgZm9yd2FyZFJlZiwgT3V0cHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0NvbnRyb2xWYWx1ZUFjY2Vzc29yLCBVbnR5cGVkRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG5pbXBvcnQge0Ryb3Bkb3duU2VsZWN0UmVzdWx0Q29tcG9uZW50fSBmcm9tIFwiLi9kcm9wZG93bi1zZWxlY3QtcmVzdWx0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge1NlbGVjdEl0ZW0sIEtFWV9DT0RFfSBmcm9tIFwiLi9zZWxlY3QtaXRlbVwiO1xyXG5pbXBvcnQge01lc3NhZ2VzfSBmcm9tIFwiLi9tZXNzYWdlc1wiO1xyXG5cclxuY29uc3QgVkFMVUVfQUNDRVNTT1IgPSB7XHJcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRHJvcGRvd25TZWxlY3RDb21wb25lbnQpLFxyXG4gIG11bHRpOiB0cnVlXHJcbn07XHJcblxyXG5jb25zdCBub29wID0gKCkgPT4ge307XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJoY2ktZHJvcGRvd24tc2VsZWN0XCIsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtY29udGFpbmVyXCI+XHJcbiAgICAgIDx1bCBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICBbY2xhc3Muc2ltcGxlLXNlbGVjdGlvbl09XCIhbXVsdGlwbGVcIlxyXG4gICAgICAgICAgW2NsYXNzLm11bHRpcGxlLXNlbGVjdGlvbl09XCJtdWx0aXBsZVwiXHJcbiAgICAgICAgICBbY2xhc3Muc2VhcmNoLWZvY3VzZWRdPVwic2VhcmNoRm9jdXNlZFwiXHJcbiAgICAgICAgICBbY2xhc3MucmVhZG9ubHldPVwiZGlzYWJsZWRcIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzZWFyY2hGb2N1c2VkIHx8IG11bHRpcGxlXCI+XHJcbiAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc2VsZWN0ZWRJdGVtc1wiIGNsYXNzPVwic2VsZWN0LXNlbGVjdGVkIGxhYmVsIGxhYmVsLWluZm9cIiBbY2xhc3MubGFiZWxdPVwibXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgIFtjbGFzcy5sYWJlbC1pbmZvXT1cIm11bHRpcGxlXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VsZWN0ZWQtaXRlbS10ZXh0XCI+e3tpdGVtLnRleHR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPGEgY2xhc3M9XCJzZWxlY3Qtc2VsZWN0aW9uLXJlbW92ZVwiIChjbGljayk9XCJyZW1vdmVJdGVtKGl0ZW0pXCIgKm5nSWY9XCIhZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiZGVsZXRlSWNvblwiIFtjbGFzcy50ZXh0LWluZm9dPVwiIW11bHRpcGxlXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bGkgY2xhc3M9XCJzZWxlY3QtaW5wdXRcIj5cclxuICAgICAgICAgIDxpbnB1dCAjdGVybUlucHV0IHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0UGxhY2Vob2xkZXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInRlcm1cIlxyXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRlYWJsZV09XCJpc0hpZGVhYmxlKClcIlxyXG4gICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJnZXRJbnB1dFdpZHRoKClcIlxyXG4gICAgICAgICAgICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIlxyXG4gICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25LZXlVcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9uS2V5UHJlc3MoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dSZXN1bHRzKClcIiAqbmdJZj1cIiFkaXNhYmxlZFwiIC8+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJpY29uLWRyb3AtbWVudVwiICpuZ0lmPVwiaW5wdXRTdGF0ZT09PTBcIiAoY2xpY2spPVwic2hvd1Jlc3VsdHMoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYWZ0ZXJcIj48L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdHMtY29udGFpbmVyXCIgKm5nSWY9XCJyZXN1bHRzVmlzaWJsZVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicmVzdWx0cy1tc2dcIiAqbmdJZj1cImxpc3RlZERhdGEgJiYgKGxpc3RlZERhdGEubGVuZ3RoICsgc2VsZWN0ZWRJdGVtcy5sZW5ndGgpIDwgcmVzdWx0c0NvdW50XCI+XHJcbiAgICAgICAgICB7e2dldENvdW50TWVzc2FnZSgpfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXN1bHRzLW1zZyBuby1yZXN1bHRzLW1zZ1wiICpuZ0lmPVwic2VhcmNoRm9jdXNlZCAmJiBsaXN0ZWREYXRhICYmIGxpc3RlZERhdGEubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICB7e21lc3NhZ2VzICYmIG1lc3NhZ2VzLm5vUmVzdWx0c01zZyA/IG1lc3NhZ2VzLm5vUmVzdWx0c01zZyA6IE5PX1JFU1VMVFNfTVNHfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPGhjaS1kcm9wZG93bi1zZWxlY3QtcmVzdWx0ICNyZXN1bHRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwibGlzdGVkRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtU2VsZWN0ZWRFdmVudCk9XCJvbkl0ZW1TZWxlY3RlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlUmVmXT1cInRlbXBsYXRlUmVmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaEZvY3VzZWRdPVwic2VhcmNoRm9jdXNlZFwiPjwvaGNpLWRyb3Bkb3duLXNlbGVjdC1yZXN1bHQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgYCxcclxuICBwcm92aWRlcnM6IFtWQUxVRV9BQ0NFU1NPUl0sXHJcbiAgaG9zdDoge2NsYXNzOiBcImZsZXgtZ3Jvdy0xXCJ9XHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93blNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yICB7XHJcblxyXG4gIE1PUkVfUkVTVUxUU19NU0cgPSBcIlNob3dpbmcgXCIgKyBNZXNzYWdlcy5QQVJUSUFMX0NPVU5UX1ZBUiArIFwiIG9mIFwiICsgTWVzc2FnZXMuVE9UQUxfQ09VTlRfVkFSICsgXCIgcmVzdWx0cy5cIjtcclxuICBOT19SRVNVTFRTX01TRyA9IFwiTm8gcmVzdWx0cyBmb3VuZFwiO1xyXG5cclxuICBASW5wdXQoKSBtZXNzYWdlczogTWVzc2FnZXMgPSB7XHJcbiAgICBtb3JlUmVzdWx0c01zZzogdGhpcy5NT1JFX1JFU1VMVFNfTVNHLFxyXG4gICAgbm9SZXN1bHRzTXNnOiB0aGlzLk5PX1JFU1VMVFNfTVNHXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCkgZGF0YVByb3ZpZGVyOiAoaXRlbTogc3RyaW5nLCBzZWxlY3RlZD86IGFueVtdKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICBASW5wdXQoKSBzZWxlY3RlZFByb3ZpZGVyOiAoaWRzOiBhbnlbXSkgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgQElucHV0KCkgc2VsZWN0SXRlbUFkYXB0ZXI6IChlbnRpdHk6IGFueSkgPT4gU2VsZWN0SXRlbTtcclxuICBASW5wdXQoKSByZWZlcmVuY2VNb2RlOiBcImlkXCIgfCBcImVudGl0eVwiID0gXCJpZFwiO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gXCJcIjtcclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY2xpZW50TW9kZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGRlbGV0ZUljb24gPSBcImZhcyBmYS10aW1lcy1jaXJjbGVcIjtcclxuICBASW5wdXQoKSBpbnB1dFN0YXRlID0gMjsgLy8gc2VsZWN0SWNvbiBjb250cm9sbGVyOiAwLT53aXRoIHNlbGVjdEljb24gMi0+d2l0aG91dCBzZWxlY3RJY29uXHJcbiAgQElucHV0KCkgcmVzdWx0c0NvdW50O1xyXG4gIEBJbnB1dCgpIHNlYXJjaERlbGF5ID0gMTAwO1xyXG5cclxuICBAT3V0cHV0KCkgc2VsZWN0OiBFdmVudEVtaXR0ZXI8U2VsZWN0SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdEl0ZW0+KCk7XHJcbiAgQE91dHB1dCgpIHJlbW92ZTogRXZlbnRFbWl0dGVyPFNlbGVjdEl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3RJdGVtPigpO1xyXG5cclxuICBAVmlld0NoaWxkKFwicmVzdWx0c1wiLCB7c3RhdGljOiBmYWxzZX0pIHJlc3VsdHM6IERyb3Bkb3duU2VsZWN0UmVzdWx0Q29tcG9uZW50O1xyXG5cclxuICBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XHJcbiAgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XHJcbiAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgdGVybSA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcclxuICBzZWFyY2hGb2N1c2VkID0gZmFsc2U7XHJcbiAgcmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICBsaXN0ZWREYXRhOiBTZWxlY3RJdGVtW107XHJcbiAgbW9kaWZpZWREYXRhOiBTZWxlY3RJdGVtW107XHJcbiAgc2VsZWN0ZWRJdGVtczogU2VsZWN0SXRlbVtdID0gW107XHJcblxyXG4gIEBWaWV3Q2hpbGQoXCJ0ZXJtSW5wdXRcIiwge3N0YXRpYzogZmFsc2V9KSBwcml2YXRlIHRlcm1JbnB1dDtcclxuXHJcbiAgcHJpdmF0ZSBwbGFjZWhvbGRlclNlbGVjdGVkID0gXCJcIjtcclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0NoYW5nZXNBbmRMb2FkRGF0YUZyb21PYnNlcnZhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBvbkl0ZW1TZWxlY3RlZChpdGVtOiBTZWxlY3RJdGVtKSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmxpc3RlZERhdGEuaW5kZXhPZihpdGVtLCAwKTtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLmxpc3RlZERhdGEuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9IDA7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmJ1aWxkVmFsdWUoKSk7XHJcbiAgICB0aGlzLnRlcm0ucGF0Y2hWYWx1ZShcIlwiLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzSW5wdXQoKSwgMSk7XHJcbiAgICB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdC5lbWl0KGl0ZW0pO1xyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IGl0ZW0udGV4dDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvY3VzSW5wdXQoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy50ZXJtSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSAhdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUoc2VsZWN0ZWRWYWx1ZXM6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHNlbGVjdGVkVmFsdWVzKSB7XHJcbiAgICAgIGlmICh0aGlzLnJlZmVyZW5jZU1vZGUgPT09IFwiaWRcIikge1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVJdGVtc0Zyb21JZHMoc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucG9wdWxhdGVJdGVtc0Zyb21FbnRpdGllcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IFwiXCI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q291bnRNZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICBsZXQgbXNnID0gdGhpcy5tZXNzYWdlcyAmJiB0aGlzLm1lc3NhZ2VzLm1vcmVSZXN1bHRzTXNnID8gdGhpcy5tZXNzYWdlcy5tb3JlUmVzdWx0c01zZyA6IHRoaXMuTU9SRV9SRVNVTFRTX01TRztcclxuICAgIG1zZyA9IG1zZy5yZXBsYWNlKE1lc3NhZ2VzLlBBUlRJQUxfQ09VTlRfVkFSLCBTdHJpbmcodGhpcy5saXN0ZWREYXRhLmxlbmd0aCkpO1xyXG4gICAgbXNnID0gbXNnLnJlcGxhY2UoTWVzc2FnZXMuVE9UQUxfQ09VTlRfVkFSLCBTdHJpbmcodGhpcy5yZXN1bHRzQ291bnQgLSB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoKSk7XHJcbiAgICByZXR1cm4gbXNnO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICByZW1vdmVJdGVtKGl0ZW06IFNlbGVjdEl0ZW0pIHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmluZGV4T2YoaXRlbSwgMCk7XHJcblxyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMuYnVpbGRWYWx1ZSgpKTtcclxuICAgIHRoaXMucmVtb3ZlLmVtaXQoaXRlbSk7XHJcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gXCJcIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgPyB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgOiB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5wdXRXaWR0aCgpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc2VhcmNoRW1wdHkgPSB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwICYmICh0aGlzLnRlcm0udmFsdWUgPT09IG51bGwgfHwgdGhpcy50ZXJtLnZhbHVlLmxlbmd0aCA9PT0gMCk7XHJcbiAgICBjb25zdCBsZW5ndGggPSB0aGlzLnRlcm0udmFsdWUgPT09IG51bGwgPyAwIDogdGhpcy50ZXJtLnZhbHVlLmxlbmd0aDtcclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICByZXR1cm4gXCIxMDAlXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gc2VhcmNoRW1wdHkgPyBcIjEwMCVcIiA6ICgxICsgbGVuZ3RoICogLjYpICsgXCJlbVwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNIaWRlYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgIT09IFwiXCI7XHJcbiAgfVxyXG5cclxuICBvbkZvY3VzKCkge1xyXG4gICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uQmx1cigpIHtcclxuICAgIHRoaXMudGVybS5wYXRjaFZhbHVlKFwiXCIsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSBmYWxzZTtcclxuICAgIHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZTtcclxuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2soKTtcclxuICB9XHJcblxyXG4gIG9uS2V5VXAoZXY6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnJlc3VsdHMpIHtcclxuICAgICAgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFLkRPV05fQVJST1cpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdHMuYWN0aXZlTmV4dCgpO1xyXG4gICAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFLlVQX0FSUk9XKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZVByZXZpb3VzKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREUuRU5URVIpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdHMuc2VsZWN0Q3VycmVudEl0ZW0oKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaW5wdXRTdGF0ZSA9PT0gMCkge1xyXG4gICAgICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERS5FTlRFUiB8fCBldi5rZXlDb2RlID09PSBLRVlfQ09ERS5ET1dOX0FSUk9XKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dSZXN1bHRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktleURvd24oZXY6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnJlc3VsdHMpIHtcclxuICAgICAgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFLlRBQikge1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5zZWxlY3RDdXJyZW50SXRlbSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFLkRFTEVURSkge1xyXG4gICAgICBpZiAoKCF0aGlzLnRlcm0udmFsdWUgfHwgdGhpcy50ZXJtLnZhbHVlLmxlbmd0aCA9PT0gMCkgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUl0ZW0odGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uS2V5UHJlc3MoZXY6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERS5FTlRFUikge1xyXG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1Jlc3VsdHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy50ZXJtSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvUmVzdWx0cyhvZihcIlwiKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlYXJjaEZvY3VzZWQgPSAhdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGZvY3VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy50ZXJtSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0NoYW5nZXNBbmRMb2FkRGF0YUZyb21PYnNlcnZhYmxlKCkge1xyXG4gICAgY29uc3Qgb2JzZXJ2YWJsZSA9IHRoaXMudGVybS52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgZGVib3VuY2VUaW1lKHRoaXMuc2VhcmNoRGVsYXkpLFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb1Jlc3VsdHMob2JzZXJ2YWJsZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZVRvUmVzdWx0cyhvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPHN0cmluZz4pOiB2b2lkIHtcclxuICAgIG9ic2VydmFibGUucGlwZShcclxuICAgICAgdGFwKCgpID0+IHRoaXMucmVzdWx0c1Zpc2libGUgPSBmYWxzZSksXHJcbiAgICAgIGZpbHRlcigodGVybSkgPT4gdGVybS5sZW5ndGggPj0gdGhpcy5pbnB1dFN0YXRlKSxcclxuICAgICAgc3dpdGNoTWFwKHRlcm0gPT4gdGhpcy5sb2FkRGF0YUZyb21PYnNlcnZhYmxlKHRlcm0pKSxcclxuICAgICAgbWFwKGl0ZW1zID0+IGl0ZW1zLmZpbHRlcihpdGVtID0+ICEodGhpcy5tdWx0aXBsZSAmJiB0aGlzLmFscmVhZHlTZWxlY3RlZChpdGVtKSkpKSxcclxuICAgICAgdGFwKCgpID0+IHRoaXMucmVzdWx0c1Zpc2libGUgPSB0aGlzLnNlYXJjaEZvY3VzZWQpXHJcbiAgICApLnN1YnNjcmliZSgoaXRlbXMpID0+IHRoaXMubGlzdGVkRGF0YSA9IGl0ZW1zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZERhdGFGcm9tT2JzZXJ2YWJsZSh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlbGVjdEl0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY2xpZW50TW9kZSA/IHRoaXMuZmV0Y2hBbmRmaWx0ZXJMb2NhbERhdGEodGVybSkgOiB0aGlzLmZldGNoRGF0YSh0ZXJtKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWxyZWFkeVNlbGVjdGVkKGl0ZW06IFNlbGVjdEl0ZW0pOiBib29sZWFuIHtcclxuICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKHNlbGVjdGVkSXRlbSA9PiB7XHJcbiAgICAgIGlmIChzZWxlY3RlZEl0ZW0uaWQgPT09IGl0ZW0uaWQpIHtcclxuICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoQW5kZmlsdGVyTG9jYWxEYXRhKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8U2VsZWN0SXRlbVtdPiB7XHJcbiAgICBpZiAoIXRoaXMubW9kaWZpZWREYXRhKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZldGNoRGF0YShcIlwiKS5waXBlKFxyXG4gICAgICAgIG1lcmdlTWFwKChpdGVtcykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5tb2RpZmllZERhdGEgPSBpdGVtcztcclxuICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlckxvY2FsRGF0YSh0ZXJtKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyTG9jYWxEYXRhKHRlcm0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaERhdGEodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWxlY3RJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzXHJcbiAgICAgIC5kYXRhUHJvdmlkZXIodGVybSwgdGhpcy5idWlsZFZhbHVlKCkpXHJcbiAgICAgIC5waXBlKG1hcCgoaXRlbXM6IGFueVtdKSA9PiB0aGlzLmFkYXB0SXRlbXMoaXRlbXMpKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbHRlckxvY2FsRGF0YSh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlbGVjdEl0ZW1bXT4ge1xyXG4gICAgcmV0dXJuIG9mKHRoaXMubW9kaWZpZWREYXRhLmZpbHRlcigoaXRlbSkgPT4gdGhpcy5jb250YWluc1RleHQoaXRlbSwgdGVybSkpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29udGFpbnNUZXh0KGl0ZW0sIHRlcm06IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGl0ZW0udGV4dC50b1VwcGVyQ2FzZSgpLmluZGV4T2YodGVybS50b1VwcGVyQ2FzZSgpKSAhPT0gLTE7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFkYXB0SXRlbXMoaXRlbXM6IGFueVtdKTogU2VsZWN0SXRlbVtdIHtcclxuICAgIGNvbnN0IGNvbnZlcnRlZEl0ZW1zID0gW107XHJcbiAgICBpdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMuc2VsZWN0SXRlbUFkYXB0ZXIoaXRlbSkpXHJcbiAgICAgIC5mb3JFYWNoKChzZWxlY3RJdGVtKSA9PiBjb252ZXJ0ZWRJdGVtcy5wdXNoKHNlbGVjdEl0ZW0pKTtcclxuICAgIHJldHVybiBjb252ZXJ0ZWRJdGVtcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRWYWx1ZSgpIHtcclxuICAgIHJldHVybiBcImlkXCIgPT09IHRoaXMucmVmZXJlbmNlTW9kZSA/IHRoaXMuZ2V0U2VsZWN0ZWRJZHMoKSA6IHRoaXMuZ2V0RW50aXRpZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRJZHMoKTogYW55IHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIGNvbnN0IGlkczogYW55W10gPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goaXRlbSA9PiBpZHMucHVzaChpdGVtLmlkKSk7XHJcbiAgICAgIHJldHVybiBpZHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCA/IG51bGwgOiB0aGlzLnNlbGVjdGVkSXRlbXNbMF0uaWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEVudGl0aWVzKCk6IGFueVtdIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIGNvbnN0IGVudGl0aWVzID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGVudGl0aWVzLnB1c2goaXRlbS5lbnRpdHkpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGVudGl0aWVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDAgPyBudWxsIDogdGhpcy5zZWxlY3RlZEl0ZW1zWzBdLmVudGl0eTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcG9wdWxhdGVJdGVtc0Zyb21FbnRpdGllcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdEl0ZW0gPSB0aGlzLnNlbGVjdEl0ZW1BZGFwdGVyKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW3NlbGVjdEl0ZW1dO1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSBzZWxlY3RJdGVtLnRleHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aEVudGl0aWVzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgc2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnNlbGVjdEl0ZW1BZGFwdGVyKGVudGl0eSk7XHJcbiAgICAgIGNvbnN0IGlkcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJZHMoKTtcclxuXHJcbiAgICAgIGlmIChpZHMuaW5kZXhPZihpdGVtLmlkKSA9PT0gLTEpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvcHVsYXRlSXRlbXNGcm9tSWRzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVXaXRoSWRzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlU2luZ2xlV2l0aElkKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlTXVsdGlwbGVXaXRoSWRzKHNlbGVjdGVkVmFsdWVzOiBhbnkpIHtcclxuICAgIGlmIChzZWxlY3RlZFZhbHVlcyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWRQcm92aWRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IHVuaXF1ZUlkcyA9IFtdO1xyXG4gICAgICBzZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChpZCkgPT4ge1xyXG4gICAgICAgIGlmICh1bmlxdWVJZHMuaW5kZXhPZihpZCkgPT09IC0xKSB7XHJcbiAgICAgICAgICB1bmlxdWVJZHMucHVzaChpZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aWRlcih1bmlxdWVJZHMpLnN1YnNjcmliZSgoaXRlbXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gaXRlbXMubWFwKHRoaXMuc2VsZWN0SXRlbUFkYXB0ZXIpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU2luZ2xlV2l0aElkKGlkOiBhbnkpIHtcclxuICAgIGlmIChpZCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWRQcm92aWRlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aWRlcihbaWRdKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGNvbnN0IHNlbGVjdEl0ZW0gPSB0aGlzLnNlbGVjdEl0ZW1BZGFwdGVyKGl0ZW0pO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW3NlbGVjdEl0ZW1dO1xyXG4gICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gc2VsZWN0SXRlbS50ZXh0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
418
+ `,
419
+ providers: [VALUE_ACCESSOR],
420
+ host: { class: "flex-grow-1" }
421
+ }]
422
+ }], propDecorators: { messages: [{
423
+ type: Input
424
+ }], dataProvider: [{
425
+ type: Input
426
+ }], selectedProvider: [{
427
+ type: Input
428
+ }], selectItemAdapter: [{
429
+ type: Input
430
+ }], referenceMode: [{
431
+ type: Input
432
+ }], placeholder: [{
433
+ type: Input
434
+ }], disabled: [{
435
+ type: Input
436
+ }], multiple: [{
437
+ type: Input
438
+ }], clientMode: [{
439
+ type: Input
440
+ }], deleteIcon: [{
441
+ type: Input
442
+ }], inputState: [{
443
+ type: Input
444
+ }], resultsCount: [{
445
+ type: Input
446
+ }], searchDelay: [{
447
+ type: Input
448
+ }], select: [{
449
+ type: Output
450
+ }], remove: [{
451
+ type: Output
452
+ }], results: [{
453
+ type: ViewChild,
454
+ args: ["results", { static: false }]
455
+ }], termInput: [{
456
+ type: ViewChild,
457
+ args: ["termInput", { static: false }]
458
+ }] } });
459
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2lucHV0L3NyYy9kcm9wZG93bi9kcm9wZG93bi1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLEtBQUssRUFBZSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDeEgsT0FBTyxFQUF1QixrQkFBa0IsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTNGLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFekcsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDakYsT0FBTyxFQUFhLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sWUFBWSxDQUFDOzs7OztBQUVwQyxNQUFNLGNBQWMsR0FBRztJQUNyQixPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUM7SUFDdEQsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBRUYsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0FBMER0QixNQUFNLE9BQU8sdUJBQXVCO0lBeERwQztRQTBERSxxQkFBZ0IsR0FBRyxVQUFVLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQztRQUM3Ryxt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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrRFQ7b0JBQ0QsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDO29CQUMzQixJQUFJLEVBQUUsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFDO2lCQUM3Qjs4QkFNVSxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUVnQyxPQUFPO3NCQUE3QyxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBWVksU0FBUztzQkFBekQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIElucHV0LCBUZW1wbGF0ZVJlZiwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIGZvcndhcmRSZWYsIE91dHB1dH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgVW50eXBlZEZvcm1Db250cm9sLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcblxyXG5pbXBvcnQge09ic2VydmFibGUsIG9mfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwLCB0YXB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuaW1wb3J0IHtEcm9wZG93blNlbGVjdFJlc3VsdENvbXBvbmVudH0gZnJvbSBcIi4vZHJvcGRvd24tc2VsZWN0LXJlc3VsdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtTZWxlY3RJdGVtLCBLRVlfQ09ERX0gZnJvbSBcIi4vc2VsZWN0LWl0ZW1cIjtcclxuaW1wb3J0IHtNZXNzYWdlc30gZnJvbSBcIi4vbWVzc2FnZXNcIjtcclxuXHJcbmNvbnN0IFZBTFVFX0FDQ0VTU09SID0ge1xyXG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERyb3Bkb3duU2VsZWN0Q29tcG9uZW50KSxcclxuICBtdWx0aTogdHJ1ZVxyXG59O1xyXG5cclxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiaGNpLWRyb3Bkb3duLXNlbGVjdFwiLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWNvbnRhaW5lclwiPlxyXG4gICAgICA8dWwgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgW2NsYXNzLnNpbXBsZS1zZWxlY3Rpb25dPVwiIW11bHRpcGxlXCJcclxuICAgICAgICAgIFtjbGFzcy5tdWx0aXBsZS1zZWxlY3Rpb25dPVwibXVsdGlwbGVcIlxyXG4gICAgICAgICAgW2NsYXNzLnNlYXJjaC1mb2N1c2VkXT1cInNlYXJjaEZvY3VzZWRcIlxyXG4gICAgICAgICAgW2NsYXNzLnJlYWRvbmx5XT1cImRpc2FibGVkXCI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VhcmNoRm9jdXNlZCB8fCBtdWx0aXBsZVwiPlxyXG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNlbGVjdGVkSXRlbXNcIiBjbGFzcz1cInNlbGVjdC1zZWxlY3RlZCBsYWJlbCBsYWJlbC1pbmZvXCIgW2NsYXNzLmxhYmVsXT1cIm11bHRpcGxlXCJcclxuICAgICAgICAgICAgICBbY2xhc3MubGFiZWwtaW5mb109XCJtdWx0aXBsZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlbGVjdGVkLWl0ZW0tdGV4dFwiPnt7aXRlbS50ZXh0fX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxhIGNsYXNzPVwic2VsZWN0LXNlbGVjdGlvbi1yZW1vdmVcIiAoY2xpY2spPVwicmVtb3ZlSXRlbShpdGVtKVwiICpuZ0lmPVwiIWRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImRlbGV0ZUljb25cIiBbY2xhc3MudGV4dC1pbmZvXT1cIiFtdWx0aXBsZVwiPjwvaT5cclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPC9saT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPGxpIGNsYXNzPVwic2VsZWN0LWlucHV0XCI+XHJcbiAgICAgICAgICA8aW5wdXQgI3Rlcm1JbnB1dCB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImdldFBsYWNlaG9sZGVyKClcIlxyXG4gICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJ0ZXJtXCJcclxuICAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZWFibGVdPVwiaXNIaWRlYWJsZSgpXCJcclxuICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiZ2V0SW5wdXRXaWR0aCgpXCJcclxuICAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygpXCJcclxuICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgIChrZXlwcmVzcyk9XCJvbktleVByZXNzKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93UmVzdWx0cygpXCIgKm5nSWY9XCIhZGlzYWJsZWRcIiAvPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgIDwvdWw+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiaWNvbi1kcm9wLW1lbnVcIiAqbmdJZj1cImlucHV0U3RhdGU9PT0wXCIgKGNsaWNrKT1cInNob3dSZXN1bHRzKClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImFmdGVyXCI+PC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHRzLWNvbnRhaW5lclwiICpuZ0lmPVwicmVzdWx0c1Zpc2libGVcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInJlc3VsdHMtbXNnXCIgKm5nSWY9XCJsaXN0ZWREYXRhICYmIChsaXN0ZWREYXRhLmxlbmd0aCArIHNlbGVjdGVkSXRlbXMubGVuZ3RoKSA8IHJlc3VsdHNDb3VudFwiPlxyXG4gICAgICAgICAge3tnZXRDb3VudE1lc3NhZ2UoKX19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicmVzdWx0cy1tc2cgbm8tcmVzdWx0cy1tc2dcIiAqbmdJZj1cInNlYXJjaEZvY3VzZWQgJiYgbGlzdGVkRGF0YSAmJiBsaXN0ZWREYXRhLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAge3ttZXNzYWdlcyAmJiBtZXNzYWdlcy5ub1Jlc3VsdHNNc2cgPyBtZXNzYWdlcy5ub1Jlc3VsdHNNc2cgOiBOT19SRVNVTFRTX01TR319XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxoY2ktZHJvcGRvd24tc2VsZWN0LXJlc3VsdCAjcmVzdWx0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRJdGVtc109XCJzZWxlY3RlZEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImxpc3RlZERhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbVNlbGVjdGVkRXZlbnQpPVwib25JdGVtU2VsZWN0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZVJlZl09XCJ0ZW1wbGF0ZVJlZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hGb2N1c2VkXT1cInNlYXJjaEZvY3VzZWRcIj48L2hjaS1kcm9wZG93bi1zZWxlY3QtcmVzdWx0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgcHJvdmlkZXJzOiBbVkFMVUVfQUNDRVNTT1JdLFxyXG4gIGhvc3Q6IHtjbGFzczogXCJmbGV4LWdyb3ctMVwifVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRHJvcGRvd25TZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciAge1xyXG5cclxuICBNT1JFX1JFU1VMVFNfTVNHID0gXCJTaG93aW5nIFwiICsgTWVzc2FnZXMuUEFSVElBTF9DT1VOVF9WQVIgKyBcIiBvZiBcIiArIE1lc3NhZ2VzLlRPVEFMX0NPVU5UX1ZBUiArIFwiIHJlc3VsdHMuXCI7XHJcbiAgTk9fUkVTVUxUU19NU0cgPSBcIk5vIHJlc3VsdHMgZm91bmRcIjtcclxuXHJcbiAgQElucHV0KCkgbWVzc2FnZXM6IE1lc3NhZ2VzID0ge1xyXG4gICAgbW9yZVJlc3VsdHNNc2c6IHRoaXMuTU9SRV9SRVNVTFRTX01TRyxcclxuICAgIG5vUmVzdWx0c01zZzogdGhpcy5OT19SRVNVTFRTX01TR1xyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFQcm92aWRlcjogKGl0ZW06IHN0cmluZywgc2VsZWN0ZWQ/OiBhbnlbXSkgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRQcm92aWRlcjogKGlkczogYW55W10pID0+IE9ic2VydmFibGU8YW55W10+O1xyXG4gIEBJbnB1dCgpIHNlbGVjdEl0ZW1BZGFwdGVyOiAoZW50aXR5OiBhbnkpID0+IFNlbGVjdEl0ZW07XHJcbiAgQElucHV0KCkgcmVmZXJlbmNlTW9kZTogXCJpZFwiIHwgXCJlbnRpdHlcIiA9IFwiaWRcIjtcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9IFwiXCI7XHJcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNsaWVudE1vZGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBkZWxldGVJY29uID0gXCJmYXMgZmEtdGltZXMtY2lyY2xlXCI7XHJcbiAgQElucHV0KCkgaW5wdXRTdGF0ZSA9IDI7IC8vIHNlbGVjdEljb24gY29udHJvbGxlcjogMC0+d2l0aCBzZWxlY3RJY29uIDItPndpdGhvdXQgc2VsZWN0SWNvblxyXG4gIEBJbnB1dCgpIHJlc3VsdHNDb3VudDtcclxuICBASW5wdXQoKSBzZWFyY2hEZWxheSA9IDEwMDtcclxuXHJcbiAgQE91dHB1dCgpIHNlbGVjdDogRXZlbnRFbWl0dGVyPFNlbGVjdEl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3RJdGVtPigpO1xyXG4gIEBPdXRwdXQoKSByZW1vdmU6IEV2ZW50RW1pdHRlcjxTZWxlY3RJdGVtPiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0SXRlbT4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZChcInJlc3VsdHNcIiwge3N0YXRpYzogZmFsc2V9KSByZXN1bHRzOiBEcm9wZG93blNlbGVjdFJlc3VsdENvbXBvbmVudDtcclxuXHJcbiAgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xyXG4gIG9uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xyXG4gIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHRlcm0gPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XHJcbiAgc2VhcmNoRm9jdXNlZCA9IGZhbHNlO1xyXG4gIHJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgbGlzdGVkRGF0YTogU2VsZWN0SXRlbVtdO1xyXG4gIG1vZGlmaWVkRGF0YTogU2VsZWN0SXRlbVtdO1xyXG4gIHNlbGVjdGVkSXRlbXM6IFNlbGVjdEl0ZW1bXSA9IFtdO1xyXG5cclxuICBAVmlld0NoaWxkKFwidGVybUlucHV0XCIsIHtzdGF0aWM6IGZhbHNlfSkgcHJpdmF0ZSB0ZXJtSW5wdXQ7XHJcblxyXG4gIHByaXZhdGUgcGxhY2Vob2xkZXJTZWxlY3RlZCA9IFwiXCI7XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9DaGFuZ2VzQW5kTG9hZERhdGFGcm9tT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgb25JdGVtU2VsZWN0ZWQoaXRlbTogU2VsZWN0SXRlbSkge1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5saXN0ZWREYXRhLmluZGV4T2YoaXRlbSwgMCk7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZWREYXRhLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodGhpcy5idWlsZFZhbHVlKCkpO1xyXG4gICAgdGhpcy50ZXJtLnBhdGNoVmFsdWUoXCJcIiwge2VtaXRFdmVudDogZmFsc2V9KTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c0lucHV0KCksIDEpO1xyXG4gICAgdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3QuZW1pdChpdGVtKTtcclxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSBpdGVtLnRleHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb2N1c0lucHV0KCkge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMudGVybUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgdGhpcy5yZXN1bHRzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gIXRoaXMuZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHNlbGVjdGVkVmFsdWVzOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChzZWxlY3RlZFZhbHVlcykge1xyXG4gICAgICBpZiAodGhpcy5yZWZlcmVuY2VNb2RlID09PSBcImlkXCIpIHtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlSXRlbXNGcm9tSWRzKHNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlSXRlbXNGcm9tRW50aXRpZXMoc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyU2VsZWN0ZWQgPSBcIlwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvdW50TWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgbGV0IG1zZyA9IHRoaXMubWVzc2FnZXMgJiYgdGhpcy5tZXNzYWdlcy5tb3JlUmVzdWx0c01zZyA/IHRoaXMubWVzc2FnZXMubW9yZVJlc3VsdHNNc2cgOiB0aGlzLk1PUkVfUkVTVUxUU19NU0c7XHJcbiAgICBtc2cgPSBtc2cucmVwbGFjZShNZXNzYWdlcy5QQVJUSUFMX0NPVU5UX1ZBUiwgU3RyaW5nKHRoaXMubGlzdGVkRGF0YS5sZW5ndGgpKTtcclxuICAgIG1zZyA9IG1zZy5yZXBsYWNlKE1lc3NhZ2VzLlRPVEFMX0NPVU5UX1ZBUiwgU3RyaW5nKHRoaXMucmVzdWx0c0NvdW50IC0gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCkpO1xyXG4gICAgcmV0dXJuIG1zZztcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSXRlbShpdGVtOiBTZWxlY3RJdGVtKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5pbmRleE9mKGl0ZW0sIDApO1xyXG5cclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmJ1aWxkVmFsdWUoKSk7XHJcbiAgICB0aGlzLnJlbW92ZS5lbWl0KGl0ZW0pO1xyXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IFwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQbGFjZWhvbGRlcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwID8gdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkIDogdGhpcy5wbGFjZWhvbGRlcjtcclxuICB9XHJcblxyXG4gIGdldElucHV0V2lkdGgoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNlYXJjaEVtcHR5ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCAmJiAodGhpcy50ZXJtLnZhbHVlID09PSBudWxsIHx8IHRoaXMudGVybS52YWx1ZS5sZW5ndGggPT09IDApO1xyXG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy50ZXJtLnZhbHVlID09PSBudWxsID8gMCA6IHRoaXMudGVybS52YWx1ZS5sZW5ndGg7XHJcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgcmV0dXJuIFwiMTAwJVwiO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHNlYXJjaEVtcHR5ID8gXCIxMDAlXCIgOiAoMSArIGxlbmd0aCAqIC42KSArIFwiZW1cIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSGlkZWFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMubXVsdGlwbGUgJiYgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkICE9PSBcIlwiO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cygpIHtcclxuICAgIHRoaXMuc2VhcmNoRm9jdXNlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIoKSB7XHJcbiAgICB0aGlzLnRlcm0ucGF0Y2hWYWx1ZShcIlwiLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xyXG4gICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICBvbktleVVwKGV2OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5yZXN1bHRzKSB7XHJcbiAgICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERS5ET1dOX0FSUk9XKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLmFjdGl2ZU5leHQoKTtcclxuICAgICAgfSBlbHNlIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERS5VUF9BUlJPVykge1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5hY3RpdmVQcmV2aW91cygpO1xyXG4gICAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IEtFWV9DT0RFLkVOVEVSKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzLnNlbGVjdEN1cnJlbnRJdGVtKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmlucHV0U3RhdGUgPT09IDApIHtcclxuICAgICAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREUuRU5URVIgfHwgZXYua2V5Q29kZSA9PT0gS0VZX0NPREUuRE9XTl9BUlJPVykge1xyXG4gICAgICAgICAgdGhpcy5zaG93UmVzdWx0cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25LZXlEb3duKGV2OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAodGhpcy5yZXN1bHRzKSB7XHJcbiAgICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERS5UQUIpIHtcclxuICAgICAgICB0aGlzLnJlc3VsdHMuc2VsZWN0Q3VycmVudEl0ZW0oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChldi5rZXlDb2RlID09PSBLRVlfQ09ERS5ERUxFVEUpIHtcclxuICAgICAgaWYgKCghdGhpcy50ZXJtLnZhbHVlIHx8IHRoaXMudGVybS52YWx1ZS5sZW5ndGggPT09IDApICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVJdGVtKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbktleVByZXNzKGV2OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXYua2V5Q29kZSA9PT0gS0VZX0NPREUuRU5URVIpIHtcclxuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNob3dSZXN1bHRzKCkge1xyXG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMudGVybUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb1Jlc3VsdHMob2YoXCJcIikpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hGb2N1c2VkID0gIXRoaXMuZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIHRoaXMudGVybUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9DaGFuZ2VzQW5kTG9hZERhdGFGcm9tT2JzZXJ2YWJsZSgpIHtcclxuICAgIGNvbnN0IG9ic2VydmFibGUgPSB0aGlzLnRlcm0udmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIGRlYm91bmNlVGltZSh0aGlzLnNlYXJjaERlbGF5KSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxyXG4gICAgKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9SZXN1bHRzKG9ic2VydmFibGUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb1Jlc3VsdHMob2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxzdHJpbmc+KTogdm9pZCB7XHJcbiAgICBvYnNlcnZhYmxlLnBpcGUoXHJcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnJlc3VsdHNWaXNpYmxlID0gZmFsc2UpLFxyXG4gICAgICBmaWx0ZXIoKHRlcm0pID0+IHRlcm0ubGVuZ3RoID49IHRoaXMuaW5wdXRTdGF0ZSksXHJcbiAgICAgIHN3aXRjaE1hcCh0ZXJtID0+IHRoaXMubG9hZERhdGFGcm9tT2JzZXJ2YWJsZSh0ZXJtKSksXHJcbiAgICAgIG1hcChpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaXRlbSA9PiAhKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5hbHJlYWR5U2VsZWN0ZWQoaXRlbSkpKSksXHJcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnJlc3VsdHNWaXNpYmxlID0gdGhpcy5zZWFyY2hGb2N1c2VkKVxyXG4gICAgKS5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB0aGlzLmxpc3RlZERhdGEgPSBpdGVtcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWREYXRhRnJvbU9ic2VydmFibGUodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWxlY3RJdGVtW10+IHtcclxuICAgIHJldHVybiB0aGlzLmNsaWVudE1vZGUgPyB0aGlzLmZldGNoQW5kZmlsdGVyTG9jYWxEYXRhKHRlcm0pIDogdGhpcy5mZXRjaERhdGEodGVybSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFscmVhZHlTZWxlY3RlZChpdGVtOiBTZWxlY3RJdGVtKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaChzZWxlY3RlZEl0ZW0gPT4ge1xyXG4gICAgICBpZiAoc2VsZWN0ZWRJdGVtLmlkID09PSBpdGVtLmlkKSB7XHJcbiAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaEFuZGZpbHRlckxvY2FsRGF0YSh0ZXJtOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlbGVjdEl0ZW1bXT4ge1xyXG4gICAgaWYgKCF0aGlzLm1vZGlmaWVkRGF0YSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5mZXRjaERhdGEoXCJcIikucGlwZShcclxuICAgICAgICBtZXJnZU1hcCgoaXRlbXMpID0+IHtcclxuICAgICAgICAgIHRoaXMubW9kaWZpZWREYXRhID0gaXRlbXM7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJMb2NhbERhdGEodGVybSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpbHRlckxvY2FsRGF0YSh0ZXJtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmV0Y2hEYXRhKHRlcm06IHN0cmluZyk6IE9ic2VydmFibGU8U2VsZWN0SXRlbVtdPiB7XHJcbiAgICByZXR1cm4gdGhpc1xyXG4gICAgICAuZGF0YVByb3ZpZGVyKHRlcm0sIHRoaXMuYnVpbGRWYWx1ZSgpKVxyXG4gICAgICAucGlwZShtYXAoKGl0ZW1zOiBhbnlbXSkgPT4gdGhpcy5hZGFwdEl0ZW1zKGl0ZW1zKSkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJMb2NhbERhdGEodGVybTogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZWxlY3RJdGVtW10+IHtcclxuICAgIHJldHVybiBvZih0aGlzLm1vZGlmaWVkRGF0YS5maWx0ZXIoKGl0ZW0pID0+IHRoaXMuY29udGFpbnNUZXh0KGl0ZW0sIHRlcm0pKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnRhaW5zVGV4dChpdGVtLCB0ZXJtOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBpdGVtLnRleHQudG9VcHBlckNhc2UoKS5pbmRleE9mKHRlcm0udG9VcHBlckNhc2UoKSkgIT09IC0xO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGFwdEl0ZW1zKGl0ZW1zOiBhbnlbXSk6IFNlbGVjdEl0ZW1bXSB7XHJcbiAgICBjb25zdCBjb252ZXJ0ZWRJdGVtcyA9IFtdO1xyXG4gICAgaXRlbXMubWFwKChpdGVtKSA9PiB0aGlzLnNlbGVjdEl0ZW1BZGFwdGVyKGl0ZW0pKVxyXG4gICAgICAuZm9yRWFjaCgoc2VsZWN0SXRlbSkgPT4gY29udmVydGVkSXRlbXMucHVzaChzZWxlY3RJdGVtKSk7XHJcbiAgICByZXR1cm4gY29udmVydGVkSXRlbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gXCJpZFwiID09PSB0aGlzLnJlZmVyZW5jZU1vZGUgPyB0aGlzLmdldFNlbGVjdGVkSWRzKCkgOiB0aGlzLmdldEVudGl0aWVzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNlbGVjdGVkSWRzKCk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICBjb25zdCBpZHM6IGFueVtdID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4gaWRzLnB1c2goaXRlbS5pZCkpO1xyXG4gICAgICByZXR1cm4gaWRzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDAgPyBudWxsIDogdGhpcy5zZWxlY3RlZEl0ZW1zWzBdLmlkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbnRpdGllcygpOiBhbnlbXSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICBjb25zdCBlbnRpdGllcyA9IFtdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBlbnRpdGllcy5wdXNoKGl0ZW0uZW50aXR5KTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBlbnRpdGllcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwID8gbnVsbCA6IHRoaXMuc2VsZWN0ZWRJdGVtc1swXS5lbnRpdHk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHBvcHVsYXRlSXRlbXNGcm9tRW50aXRpZXMoc2VsZWN0ZWRWYWx1ZXM6IGFueSkge1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5oYW5kbGVNdWx0aXBsZVdpdGhFbnRpdGllcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzZWxlY3RJdGVtID0gdGhpcy5zZWxlY3RJdGVtQWRhcHRlcihzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtzZWxlY3RJdGVtXTtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlclNlbGVjdGVkID0gc2VsZWN0SXRlbS50ZXh0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVNdWx0aXBsZVdpdGhFbnRpdGllcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgIHNlbGVjdGVkVmFsdWVzLmZvckVhY2goKGVudGl0eSkgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5zZWxlY3RJdGVtQWRhcHRlcihlbnRpdHkpO1xyXG4gICAgICBjb25zdCBpZHMgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XHJcblxyXG4gICAgICBpZiAoaWRzLmluZGV4T2YoaXRlbS5pZCkgPT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3B1bGF0ZUl0ZW1zRnJvbUlkcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhhbmRsZVNpbmdsZVdpdGhJZChzZWxlY3RlZFZhbHVlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZU11bHRpcGxlV2l0aElkcyhzZWxlY3RlZFZhbHVlczogYW55KSB7XHJcbiAgICBpZiAoc2VsZWN0ZWRWYWx1ZXMgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkUHJvdmlkZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBjb25zdCB1bmlxdWVJZHMgPSBbXTtcclxuICAgICAgc2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoaWQpID0+IHtcclxuICAgICAgICBpZiAodW5pcXVlSWRzLmluZGV4T2YoaWQpID09PSAtMSkge1xyXG4gICAgICAgICAgdW5pcXVlSWRzLnB1c2goaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvdmlkZXIodW5pcXVlSWRzKS5zdWJzY3JpYmUoKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IGl0ZW1zLm1hcCh0aGlzLnNlbGVjdEl0ZW1BZGFwdGVyKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVNpbmdsZVdpdGhJZChpZDogYW55KSB7XHJcbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkUHJvdmlkZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkUHJvdmlkZXIoW2lkXSkuc3Vic2NyaWJlKChpdGVtczogYW55W10pID0+IHtcclxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RJdGVtID0gdGhpcy5zZWxlY3RJdGVtQWRhcHRlcihpdGVtKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtzZWxlY3RJdGVtXTtcclxuICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJTZWxlY3RlZCA9IHNlbGVjdEl0ZW0udGV4dDtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==