imm-element-ui 2.6.3 → 2.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,381 @@
1
+ import { Component, ViewChild, ViewContainerRef, inject } from '@angular/core';
2
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
3
+ import { SelectModule } from 'primeng/select';
4
+ import { MultiSelect } from 'primeng/multiselect';
5
+ import { resolveAsyncSelectOptions } from '../cell-utils/async-select-options';
6
+ import { AsyncSelectOptionsCacheService } from '../cell-utils/async-select-options-cache.service';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@angular/forms";
9
+ import * as i2 from "primeng/select";
10
+ export class CellEditAsyncSelectFieldComponent {
11
+ constructor() {
12
+ this.cacheService = inject(AsyncSelectOptionsCacheService);
13
+ }
14
+ async agInit(params) {
15
+ this.params = params;
16
+ this.params.optionLabel = this.params.optionLabel || 'label';
17
+ this.params.optionValue = this.params.optionValue || 'value';
18
+ const rowValue = this.params.data?.[this.params.colDef.field];
19
+ this.value = this.params.multiple ? this.toValueArray(params.value ?? rowValue) : (params.value ?? rowValue);
20
+ this.setEditorSize(params);
21
+ await this.loadOptions();
22
+ }
23
+ getValue() {
24
+ if (this.params.multiple) {
25
+ return this.toValueString(this.value);
26
+ }
27
+ const value = this.value;
28
+ return value === '' || value == null ? null : value;
29
+ }
30
+ onChange(event) {
31
+ const nameFields = this.params.nameFields || [];
32
+ nameFields.forEach((nameField) => {
33
+ this.updateNameField(nameField, event);
34
+ });
35
+ }
36
+ async loadOptions() {
37
+ const context = this.createContext();
38
+ try {
39
+ this.params.loading = true;
40
+ this.params.options = await resolveAsyncSelectOptions(this.params, context);
41
+ }
42
+ finally {
43
+ this.params.loading = false;
44
+ }
45
+ }
46
+ createContext() {
47
+ return {
48
+ data: this.params.data,
49
+ value: this.params.multiple ? this.toValueString(this.value) : this.value,
50
+ params: this.params,
51
+ field: this.params.colDef.field,
52
+ colDef: this.params.colDef,
53
+ rowIndex: this.params.node?.rowIndex,
54
+ };
55
+ }
56
+ setEditorSize(params) {
57
+ const cellWidth = params.column.getActualWidth();
58
+ this.params.style = {
59
+ border: 'none',
60
+ boxShadow: 'none',
61
+ width: `${cellWidth}px`,
62
+ background: 'var(--ag-background-color)',
63
+ height: '40px',
64
+ alignItems: 'center',
65
+ ...(this.params.style || {}),
66
+ };
67
+ this.params.panelStyle = {
68
+ width: `${cellWidth}px`,
69
+ ...(this.params.panelStyle || {}),
70
+ };
71
+ }
72
+ updateNameField(nameField, event) {
73
+ const oldValue = this.params.data[nameField.field];
74
+ const newValue = this.resolveNameFieldValue(nameField, event.value);
75
+ const grid = this.params.grid();
76
+ const e = {
77
+ colDef: nameField,
78
+ oldValue,
79
+ newValue,
80
+ rowIndex: this.params.node.rowIndex,
81
+ data: { id: this.params.data.id },
82
+ };
83
+ grid.cellValueChanged(e);
84
+ this.params.data[nameField.field] = newValue;
85
+ }
86
+ resolveNameFieldValue(nameField, value) {
87
+ const valueField = this.params.optionValue || 'value';
88
+ if (this.params.multiple) {
89
+ const values = this.toValueArray(value);
90
+ return (this.params.options || [])
91
+ .filter((op) => values.some((selectedValue) => selectedValue == op?.[valueField]))
92
+ .map((op) => op?.[nameField.key])
93
+ .filter((item) => item !== undefined && item !== null && item !== '')
94
+ .join(',');
95
+ }
96
+ const item = (this.params.options || []).find((op) => op?.[valueField] === value);
97
+ return item ? item[nameField.key] : null;
98
+ }
99
+ toValueArray(value) {
100
+ if (Array.isArray(value)) {
101
+ return value;
102
+ }
103
+ if (value === '' || value == null) {
104
+ return [];
105
+ }
106
+ return String(value).split(',').filter((item) => item !== '');
107
+ }
108
+ toValueString(value) {
109
+ if (Array.isArray(value)) {
110
+ return value.filter((item) => item !== '' && item != null).join(',');
111
+ }
112
+ if (value === '' || value == null) {
113
+ return '';
114
+ }
115
+ return String(value);
116
+ }
117
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellEditAsyncSelectFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
118
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CellEditAsyncSelectFieldComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: `
119
+ @if (params.multiple) {
120
+ <p-multiselect
121
+ [(ngModel)]="value"
122
+ [scrollHeight]="params.scrollHeight || '200px'"
123
+ [filter]="params.filter"
124
+ [name]="params.name"
125
+ [options]="params.options"
126
+ [placeholder]="params.placeholder"
127
+ [class]="params.class"
128
+ [style]="params.style"
129
+ [panelStyle]="params.panelStyle"
130
+ [panelStyleClass]="params.panelStyleClass"
131
+ [readonly]="params.readonly"
132
+ [appendTo]="params.appendTo || 'body'"
133
+ [tabindex]="params.tabindex"
134
+ [loadingIcon]="params.loadingIcon"
135
+ [filterPlaceHolder]="params.filterPlaceHolder || params.filterPlaceholder"
136
+ [filterLocale]="params.filterLocale"
137
+ [variant]="params.variant"
138
+ [inputId]="params.inputId"
139
+ [dataKey]="params.dataKey"
140
+ [filterBy]="params.filterBy"
141
+ [filterFields]="params.filterFields"
142
+ [autofocus]="params.autofocus ?? true"
143
+ [resetFilterOnHide]="params.resetFilterOnHide"
144
+ [dropdownIcon]="params.dropdownIcon"
145
+ [loading]="params.loading"
146
+ [optionLabel]="params.optionLabel"
147
+ [optionValue]="params.optionValue"
148
+ [optionDisabled]="params.optionDisabled"
149
+ [optionGroupLabel]="params.optionGroupLabel"
150
+ [optionGroupChildren]="params.optionGroupChildren || 'items'"
151
+ [group]="params.group"
152
+ [showClear]="params.showClear"
153
+ [emptyFilterMessage]="params.emptyFilterMessage"
154
+ [emptyMessage]="params.emptyMessage"
155
+ [lazy]="params.lazy"
156
+ [virtualScroll]="params.virtualScroll"
157
+ [virtualScrollItemSize]="params.virtualScrollItemSize"
158
+ [virtualScrollOptions]="params.virtualScrollOptions"
159
+ [overlayOptions]="params.overlayOptions"
160
+ [size]="params.size"
161
+ [ariaFilterLabel]="params.ariaFilterLabel"
162
+ [ariaLabel]="params.ariaLabel"
163
+ [ariaLabelledBy]="params.ariaLabelledBy"
164
+ [filterMatchMode]="params.filterMatchMode"
165
+ [maxlength]="params.maxlength"
166
+ [tooltip]="params.tooltip"
167
+ [tooltipPosition]="params.tooltipPosition || 'right'"
168
+ [tooltipPositionStyle]="params.tooltipPositionStyle || 'absolute'"
169
+ [tooltipStyleClass]="params.tooltipStyleClass"
170
+ [focusOnHover]="params.focusOnHover == undefined ? true : params.focusOnHover"
171
+ [fluid]="params.fluid == undefined ? true : params.fluid"
172
+ [filterValue]="params.filterValue"
173
+ [display]="params.display ?? 'comma'"
174
+ [displaySelectedLabel]="params.displaySelectedLabel ?? true"
175
+ [maxSelectedLabels]="params.maxSelectedLabels"
176
+ [selectionLimit]="params.selectionLimit"
177
+ [selectedItemsLabel]="params.selectedItemsLabel"
178
+ [showToggleAll]="params.showToggleAll ?? true"
179
+ [showHeader]="params.showHeader ?? true"
180
+ [autofocusFilter]="params.autofocusFilter"
181
+ [selectAll]="params.selectAll ?? null"
182
+ [selectOnFocus]="params.selectOnFocus"
183
+ [autoOptionFocus]="params.autoOptionFocus"
184
+ (onChange)="onChange($event)" />
185
+ } @else {
186
+ <p-select
187
+ [(ngModel)]="value"
188
+ [scrollHeight]="params.scrollHeight || '200px'"
189
+ [filter]="params.filter"
190
+ [name]="params.name"
191
+ [options]="params.options"
192
+ [placeholder]="params.placeholder"
193
+ [class]="params.class"
194
+ [style]="params.style"
195
+ [panelStyle]="params.panelStyle"
196
+ [panelStyleClass]="params.panelStyleClass"
197
+ [readonly]="params.readonly"
198
+ [editable]="params.editable"
199
+ [appendTo]="params.appendTo || 'body'"
200
+ [tabindex]="params.tabindex"
201
+ [loadingIcon]="params.loadingIcon"
202
+ [filterPlaceholder]="params.filterPlaceholder"
203
+ [filterLocale]="params.filterLocale"
204
+ [variant]="params.variant"
205
+ [inputId]="params.inputId"
206
+ [dataKey]="params.dataKey"
207
+ [filterBy]="params.filterBy"
208
+ [filterFields]="params.filterFields"
209
+ [autofocus]="params.autofocus ?? true"
210
+ [resetFilterOnHide]="params.resetFilterOnHide"
211
+ [checkmark]="params.checkmark"
212
+ [dropdownIcon]="params.dropdownIcon"
213
+ [loading]="params.loading"
214
+ [optionLabel]="params.optionLabel"
215
+ [optionValue]="params.optionValue"
216
+ [optionDisabled]="params.optionDisabled"
217
+ [optionGroupLabel]="params.optionGroupLabel"
218
+ [optionGroupChildren]="params.optionGroupChildren || 'items'"
219
+ [group]="params.group"
220
+ [showClear]="params.showClear"
221
+ [emptyFilterMessage]="params.emptyFilterMessage"
222
+ [emptyMessage]="params.emptyMessage"
223
+ [lazy]="params.lazy"
224
+ [virtualScroll]="params.virtualScroll"
225
+ [virtualScrollItemSize]="params.virtualScrollItemSize"
226
+ [virtualScrollOptions]="params.virtualScrollOptions"
227
+ [overlayOptions]="params.overlayOptions"
228
+ [size]="params.size"
229
+ [ariaFilterLabel]="params.ariaFilterLabel"
230
+ [ariaLabel]="params.ariaLabel"
231
+ [ariaLabelledBy]="params.ariaLabelledBy"
232
+ [filterMatchMode]="params.filterMatchMode"
233
+ [maxlength]="params.maxlength"
234
+ [tooltip]="params.tooltip"
235
+ [tooltipPosition]="params.tooltipPosition || 'right'"
236
+ [tooltipPositionStyle]="params.tooltipPositionStyle || 'absolute'"
237
+ [tooltipStyleClass]="params.tooltipStyleClass"
238
+ [focusOnHover]="params.focusOnHover == undefined ? true : params.focusOnHover"
239
+ [fluid]="params.fluid == undefined ? true : params.fluid"
240
+ [filterValue]="params.filterValue"
241
+ (onChange)="onChange($event)" />
242
+ }
243
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i2.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "size", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "fluid", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: MultiSelect, selector: "p-multiSelect, p-multiselect, p-multi-select", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "fluid", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "chipIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "size", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }] }); }
244
+ }
245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CellEditAsyncSelectFieldComponent, decorators: [{
246
+ type: Component,
247
+ args: [{
248
+ standalone: true,
249
+ template: `
250
+ @if (params.multiple) {
251
+ <p-multiselect
252
+ [(ngModel)]="value"
253
+ [scrollHeight]="params.scrollHeight || '200px'"
254
+ [filter]="params.filter"
255
+ [name]="params.name"
256
+ [options]="params.options"
257
+ [placeholder]="params.placeholder"
258
+ [class]="params.class"
259
+ [style]="params.style"
260
+ [panelStyle]="params.panelStyle"
261
+ [panelStyleClass]="params.panelStyleClass"
262
+ [readonly]="params.readonly"
263
+ [appendTo]="params.appendTo || 'body'"
264
+ [tabindex]="params.tabindex"
265
+ [loadingIcon]="params.loadingIcon"
266
+ [filterPlaceHolder]="params.filterPlaceHolder || params.filterPlaceholder"
267
+ [filterLocale]="params.filterLocale"
268
+ [variant]="params.variant"
269
+ [inputId]="params.inputId"
270
+ [dataKey]="params.dataKey"
271
+ [filterBy]="params.filterBy"
272
+ [filterFields]="params.filterFields"
273
+ [autofocus]="params.autofocus ?? true"
274
+ [resetFilterOnHide]="params.resetFilterOnHide"
275
+ [dropdownIcon]="params.dropdownIcon"
276
+ [loading]="params.loading"
277
+ [optionLabel]="params.optionLabel"
278
+ [optionValue]="params.optionValue"
279
+ [optionDisabled]="params.optionDisabled"
280
+ [optionGroupLabel]="params.optionGroupLabel"
281
+ [optionGroupChildren]="params.optionGroupChildren || 'items'"
282
+ [group]="params.group"
283
+ [showClear]="params.showClear"
284
+ [emptyFilterMessage]="params.emptyFilterMessage"
285
+ [emptyMessage]="params.emptyMessage"
286
+ [lazy]="params.lazy"
287
+ [virtualScroll]="params.virtualScroll"
288
+ [virtualScrollItemSize]="params.virtualScrollItemSize"
289
+ [virtualScrollOptions]="params.virtualScrollOptions"
290
+ [overlayOptions]="params.overlayOptions"
291
+ [size]="params.size"
292
+ [ariaFilterLabel]="params.ariaFilterLabel"
293
+ [ariaLabel]="params.ariaLabel"
294
+ [ariaLabelledBy]="params.ariaLabelledBy"
295
+ [filterMatchMode]="params.filterMatchMode"
296
+ [maxlength]="params.maxlength"
297
+ [tooltip]="params.tooltip"
298
+ [tooltipPosition]="params.tooltipPosition || 'right'"
299
+ [tooltipPositionStyle]="params.tooltipPositionStyle || 'absolute'"
300
+ [tooltipStyleClass]="params.tooltipStyleClass"
301
+ [focusOnHover]="params.focusOnHover == undefined ? true : params.focusOnHover"
302
+ [fluid]="params.fluid == undefined ? true : params.fluid"
303
+ [filterValue]="params.filterValue"
304
+ [display]="params.display ?? 'comma'"
305
+ [displaySelectedLabel]="params.displaySelectedLabel ?? true"
306
+ [maxSelectedLabels]="params.maxSelectedLabels"
307
+ [selectionLimit]="params.selectionLimit"
308
+ [selectedItemsLabel]="params.selectedItemsLabel"
309
+ [showToggleAll]="params.showToggleAll ?? true"
310
+ [showHeader]="params.showHeader ?? true"
311
+ [autofocusFilter]="params.autofocusFilter"
312
+ [selectAll]="params.selectAll ?? null"
313
+ [selectOnFocus]="params.selectOnFocus"
314
+ [autoOptionFocus]="params.autoOptionFocus"
315
+ (onChange)="onChange($event)" />
316
+ } @else {
317
+ <p-select
318
+ [(ngModel)]="value"
319
+ [scrollHeight]="params.scrollHeight || '200px'"
320
+ [filter]="params.filter"
321
+ [name]="params.name"
322
+ [options]="params.options"
323
+ [placeholder]="params.placeholder"
324
+ [class]="params.class"
325
+ [style]="params.style"
326
+ [panelStyle]="params.panelStyle"
327
+ [panelStyleClass]="params.panelStyleClass"
328
+ [readonly]="params.readonly"
329
+ [editable]="params.editable"
330
+ [appendTo]="params.appendTo || 'body'"
331
+ [tabindex]="params.tabindex"
332
+ [loadingIcon]="params.loadingIcon"
333
+ [filterPlaceholder]="params.filterPlaceholder"
334
+ [filterLocale]="params.filterLocale"
335
+ [variant]="params.variant"
336
+ [inputId]="params.inputId"
337
+ [dataKey]="params.dataKey"
338
+ [filterBy]="params.filterBy"
339
+ [filterFields]="params.filterFields"
340
+ [autofocus]="params.autofocus ?? true"
341
+ [resetFilterOnHide]="params.resetFilterOnHide"
342
+ [checkmark]="params.checkmark"
343
+ [dropdownIcon]="params.dropdownIcon"
344
+ [loading]="params.loading"
345
+ [optionLabel]="params.optionLabel"
346
+ [optionValue]="params.optionValue"
347
+ [optionDisabled]="params.optionDisabled"
348
+ [optionGroupLabel]="params.optionGroupLabel"
349
+ [optionGroupChildren]="params.optionGroupChildren || 'items'"
350
+ [group]="params.group"
351
+ [showClear]="params.showClear"
352
+ [emptyFilterMessage]="params.emptyFilterMessage"
353
+ [emptyMessage]="params.emptyMessage"
354
+ [lazy]="params.lazy"
355
+ [virtualScroll]="params.virtualScroll"
356
+ [virtualScrollItemSize]="params.virtualScrollItemSize"
357
+ [virtualScrollOptions]="params.virtualScrollOptions"
358
+ [overlayOptions]="params.overlayOptions"
359
+ [size]="params.size"
360
+ [ariaFilterLabel]="params.ariaFilterLabel"
361
+ [ariaLabel]="params.ariaLabel"
362
+ [ariaLabelledBy]="params.ariaLabelledBy"
363
+ [filterMatchMode]="params.filterMatchMode"
364
+ [maxlength]="params.maxlength"
365
+ [tooltip]="params.tooltip"
366
+ [tooltipPosition]="params.tooltipPosition || 'right'"
367
+ [tooltipPositionStyle]="params.tooltipPositionStyle || 'absolute'"
368
+ [tooltipStyleClass]="params.tooltipStyleClass"
369
+ [focusOnHover]="params.focusOnHover == undefined ? true : params.focusOnHover"
370
+ [fluid]="params.fluid == undefined ? true : params.fluid"
371
+ [filterValue]="params.filterValue"
372
+ (onChange)="onChange($event)" />
373
+ }
374
+ `,
375
+ imports: [FormsModule, ReactiveFormsModule, SelectModule, MultiSelect],
376
+ }]
377
+ }], propDecorators: { input: [{
378
+ type: ViewChild,
379
+ args: ['input', { read: ViewContainerRef }]
380
+ }] } });
381
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1lZGl0LWFzeW5jLXNlbGVjdEZpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZ3JpZC9jZWxsLWVkaXQvY2VsbC1lZGl0LWFzeW5jLXNlbGVjdEZpZWxkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFzQix5QkFBeUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25HLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7O0FBb0lsRyxNQUFNLE9BQU8saUNBQWlDO0lBbEk5QztRQXFJa0IsaUJBQVksR0FBRyxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQztLQXFIdkU7SUFqSEEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUF5QjtRQUNyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUM7UUFDN0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDO1FBQzdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBTSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksUUFBUSxDQUFDLENBQUM7UUFFN0csSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsUUFBUTtRQUNQLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3pCLE9BQU8sS0FBSyxLQUFLLEVBQUUsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFDbEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQ2hELFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFjLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVztRQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFckMsSUFBSSxDQUFDO1lBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0seUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3RSxDQUFDO2dCQUFTLENBQUM7WUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQztJQUNGLENBQUM7SUFFTyxhQUFhO1FBQ3BCLE9BQU87WUFDTixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1lBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLO1lBQ3pFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSztZQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRO1NBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQXlCO1FBQzlDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUc7WUFDbkIsTUFBTSxFQUFFLE1BQU07WUFDZCxTQUFTLEVBQUUsTUFBTTtZQUNqQixLQUFLLEVBQUUsR0FBRyxTQUFTLElBQUk7WUFDdkIsVUFBVSxFQUFFLDRCQUE0QjtZQUN4QyxNQUFNLEVBQUUsTUFBTTtZQUNkLFVBQVUsRUFBRSxRQUFRO1lBQ3BCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7U0FDNUIsQ0FBQztRQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHO1lBQ3hCLEtBQUssRUFBRSxHQUFHLFNBQVMsSUFBSTtZQUN2QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1NBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZSxDQUFDLFNBQWMsRUFBRSxLQUFVO1FBQ2pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxNQUFNLElBQUksR0FBa0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQyxNQUFNLENBQUMsR0FBUTtZQUNkLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDbkMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtTQUNqQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDOUMsQ0FBQztJQUVPLHFCQUFxQixDQUFDLFNBQWMsRUFBRSxLQUFVO1FBQ3ZELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQztRQUN0RCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2lCQUNoQyxNQUFNLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUUsQ0FBQyxhQUFhLElBQUksRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztpQkFDM0YsR0FBRyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3JDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7aUJBQ3pFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNiLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDdkYsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUMxQyxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQVU7UUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNuQyxPQUFPLEVBQUUsQ0FBQztRQUNYLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFVO1FBQy9CLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxJQUFJLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ25DLE9BQU8sRUFBRSxDQUFDO1FBQ1gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RCLENBQUM7K0dBdkhXLGlDQUFpQzttR0FBakMsaUNBQWlDLG1KQUtqQixnQkFBZ0IsNkJBcklsQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2SFQsMkRBQ1MsV0FBVyxpZ0JBQUUsbUJBQW1CLDhCQUFFLFlBQVkseXJDQUFFLFdBQVc7OzRGQUV6RCxpQ0FBaUM7a0JBbEk3QyxTQUFTO21CQUFDO29CQUNWLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNkhUO29CQUNELE9BQU8sRUFBRSxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsV0FBVyxDQUFDO2lCQUN0RTs4QkFNdUQsS0FBSztzQkFBM0QsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB0eXBlIHsgSUNlbGxFZGl0b3JBbmd1bGFyQ29tcCB9IGZyb20gJ2FnLWdyaWQtYW5ndWxhcic7XG5pbXBvcnQgdHlwZSB7IElDZWxsRWRpdG9yUGFyYW1zIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgU2VsZWN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zZWxlY3QnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcbmltcG9ydCB7IEdyaWRDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IEFzeW5jU2VsZWN0Q29udGV4dCwgcmVzb2x2ZUFzeW5jU2VsZWN0T3B0aW9ucyB9IGZyb20gJy4uL2NlbGwtdXRpbHMvYXN5bmMtc2VsZWN0LW9wdGlvbnMnO1xuaW1wb3J0IHsgQXN5bmNTZWxlY3RPcHRpb25zQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnLi4vY2VsbC11dGlscy9hc3luYy1zZWxlY3Qtb3B0aW9ucy1jYWNoZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0QGlmIChwYXJhbXMubXVsdGlwbGUpIHtcblx0XHRcdDxwLW11bHRpc2VsZWN0XG5cdFx0XHRcdFsobmdNb2RlbCldPVwidmFsdWVcIlxuXHRcdFx0XHRbc2Nyb2xsSGVpZ2h0XT1cInBhcmFtcy5zY3JvbGxIZWlnaHQgfHwgJzIwMHB4J1wiXG5cdFx0XHRcdFtmaWx0ZXJdPVwicGFyYW1zLmZpbHRlclwiXG5cdFx0XHRcdFtuYW1lXT1cInBhcmFtcy5uYW1lXCJcblx0XHRcdFx0W29wdGlvbnNdPVwicGFyYW1zLm9wdGlvbnNcIlxuXHRcdFx0XHRbcGxhY2Vob2xkZXJdPVwicGFyYW1zLnBsYWNlaG9sZGVyXCJcblx0XHRcdFx0W2NsYXNzXT1cInBhcmFtcy5jbGFzc1wiXG5cdFx0XHRcdFtzdHlsZV09XCJwYXJhbXMuc3R5bGVcIlxuXHRcdFx0XHRbcGFuZWxTdHlsZV09XCJwYXJhbXMucGFuZWxTdHlsZVwiXG5cdFx0XHRcdFtwYW5lbFN0eWxlQ2xhc3NdPVwicGFyYW1zLnBhbmVsU3R5bGVDbGFzc1wiXG5cdFx0XHRcdFtyZWFkb25seV09XCJwYXJhbXMucmVhZG9ubHlcIlxuXHRcdFx0XHRbYXBwZW5kVG9dPVwicGFyYW1zLmFwcGVuZFRvIHx8ICdib2R5J1wiXG5cdFx0XHRcdFt0YWJpbmRleF09XCJwYXJhbXMudGFiaW5kZXhcIlxuXHRcdFx0XHRbbG9hZGluZ0ljb25dPVwicGFyYW1zLmxvYWRpbmdJY29uXCJcblx0XHRcdFx0W2ZpbHRlclBsYWNlSG9sZGVyXT1cInBhcmFtcy5maWx0ZXJQbGFjZUhvbGRlciB8fCBwYXJhbXMuZmlsdGVyUGxhY2Vob2xkZXJcIlxuXHRcdFx0XHRbZmlsdGVyTG9jYWxlXT1cInBhcmFtcy5maWx0ZXJMb2NhbGVcIlxuXHRcdFx0XHRbdmFyaWFudF09XCJwYXJhbXMudmFyaWFudFwiXG5cdFx0XHRcdFtpbnB1dElkXT1cInBhcmFtcy5pbnB1dElkXCJcblx0XHRcdFx0W2RhdGFLZXldPVwicGFyYW1zLmRhdGFLZXlcIlxuXHRcdFx0XHRbZmlsdGVyQnldPVwicGFyYW1zLmZpbHRlckJ5XCJcblx0XHRcdFx0W2ZpbHRlckZpZWxkc109XCJwYXJhbXMuZmlsdGVyRmllbGRzXCJcblx0XHRcdFx0W2F1dG9mb2N1c109XCJwYXJhbXMuYXV0b2ZvY3VzID8/IHRydWVcIlxuXHRcdFx0XHRbcmVzZXRGaWx0ZXJPbkhpZGVdPVwicGFyYW1zLnJlc2V0RmlsdGVyT25IaWRlXCJcblx0XHRcdFx0W2Ryb3Bkb3duSWNvbl09XCJwYXJhbXMuZHJvcGRvd25JY29uXCJcblx0XHRcdFx0W2xvYWRpbmddPVwicGFyYW1zLmxvYWRpbmdcIlxuXHRcdFx0XHRbb3B0aW9uTGFiZWxdPVwicGFyYW1zLm9wdGlvbkxhYmVsXCJcblx0XHRcdFx0W29wdGlvblZhbHVlXT1cInBhcmFtcy5vcHRpb25WYWx1ZVwiXG5cdFx0XHRcdFtvcHRpb25EaXNhYmxlZF09XCJwYXJhbXMub3B0aW9uRGlzYWJsZWRcIlxuXHRcdFx0XHRbb3B0aW9uR3JvdXBMYWJlbF09XCJwYXJhbXMub3B0aW9uR3JvdXBMYWJlbFwiXG5cdFx0XHRcdFtvcHRpb25Hcm91cENoaWxkcmVuXT1cInBhcmFtcy5vcHRpb25Hcm91cENoaWxkcmVuIHx8ICdpdGVtcydcIlxuXHRcdFx0XHRbZ3JvdXBdPVwicGFyYW1zLmdyb3VwXCJcblx0XHRcdFx0W3Nob3dDbGVhcl09XCJwYXJhbXMuc2hvd0NsZWFyXCJcblx0XHRcdFx0W2VtcHR5RmlsdGVyTWVzc2FnZV09XCJwYXJhbXMuZW1wdHlGaWx0ZXJNZXNzYWdlXCJcblx0XHRcdFx0W2VtcHR5TWVzc2FnZV09XCJwYXJhbXMuZW1wdHlNZXNzYWdlXCJcblx0XHRcdFx0W2xhenldPVwicGFyYW1zLmxhenlcIlxuXHRcdFx0XHRbdmlydHVhbFNjcm9sbF09XCJwYXJhbXMudmlydHVhbFNjcm9sbFwiXG5cdFx0XHRcdFt2aXJ0dWFsU2Nyb2xsSXRlbVNpemVdPVwicGFyYW1zLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZVwiXG5cdFx0XHRcdFt2aXJ0dWFsU2Nyb2xsT3B0aW9uc109XCJwYXJhbXMudmlydHVhbFNjcm9sbE9wdGlvbnNcIlxuXHRcdFx0XHRbb3ZlcmxheU9wdGlvbnNdPVwicGFyYW1zLm92ZXJsYXlPcHRpb25zXCJcblx0XHRcdFx0W3NpemVdPVwicGFyYW1zLnNpemVcIlxuXHRcdFx0XHRbYXJpYUZpbHRlckxhYmVsXT1cInBhcmFtcy5hcmlhRmlsdGVyTGFiZWxcIlxuXHRcdFx0XHRbYXJpYUxhYmVsXT1cInBhcmFtcy5hcmlhTGFiZWxcIlxuXHRcdFx0XHRbYXJpYUxhYmVsbGVkQnldPVwicGFyYW1zLmFyaWFMYWJlbGxlZEJ5XCJcblx0XHRcdFx0W2ZpbHRlck1hdGNoTW9kZV09XCJwYXJhbXMuZmlsdGVyTWF0Y2hNb2RlXCJcblx0XHRcdFx0W21heGxlbmd0aF09XCJwYXJhbXMubWF4bGVuZ3RoXCJcblx0XHRcdFx0W3Rvb2x0aXBdPVwicGFyYW1zLnRvb2x0aXBcIlxuXHRcdFx0XHRbdG9vbHRpcFBvc2l0aW9uXT1cInBhcmFtcy50b29sdGlwUG9zaXRpb24gfHwgJ3JpZ2h0J1wiXG5cdFx0XHRcdFt0b29sdGlwUG9zaXRpb25TdHlsZV09XCJwYXJhbXMudG9vbHRpcFBvc2l0aW9uU3R5bGUgfHwgJ2Fic29sdXRlJ1wiXG5cdFx0XHRcdFt0b29sdGlwU3R5bGVDbGFzc109XCJwYXJhbXMudG9vbHRpcFN0eWxlQ2xhc3NcIlxuXHRcdFx0XHRbZm9jdXNPbkhvdmVyXT1cInBhcmFtcy5mb2N1c09uSG92ZXIgPT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHBhcmFtcy5mb2N1c09uSG92ZXJcIlxuXHRcdFx0XHRbZmx1aWRdPVwicGFyYW1zLmZsdWlkID09IHVuZGVmaW5lZCA/IHRydWUgOiBwYXJhbXMuZmx1aWRcIlxuXHRcdFx0XHRbZmlsdGVyVmFsdWVdPVwicGFyYW1zLmZpbHRlclZhbHVlXCJcblx0XHRcdFx0W2Rpc3BsYXldPVwicGFyYW1zLmRpc3BsYXkgPz8gJ2NvbW1hJ1wiXG5cdFx0XHRcdFtkaXNwbGF5U2VsZWN0ZWRMYWJlbF09XCJwYXJhbXMuZGlzcGxheVNlbGVjdGVkTGFiZWwgPz8gdHJ1ZVwiXG5cdFx0XHRcdFttYXhTZWxlY3RlZExhYmVsc109XCJwYXJhbXMubWF4U2VsZWN0ZWRMYWJlbHNcIlxuXHRcdFx0XHRbc2VsZWN0aW9uTGltaXRdPVwicGFyYW1zLnNlbGVjdGlvbkxpbWl0XCJcblx0XHRcdFx0W3NlbGVjdGVkSXRlbXNMYWJlbF09XCJwYXJhbXMuc2VsZWN0ZWRJdGVtc0xhYmVsXCJcblx0XHRcdFx0W3Nob3dUb2dnbGVBbGxdPVwicGFyYW1zLnNob3dUb2dnbGVBbGwgPz8gdHJ1ZVwiXG5cdFx0XHRcdFtzaG93SGVhZGVyXT1cInBhcmFtcy5zaG93SGVhZGVyID8/IHRydWVcIlxuXHRcdFx0XHRbYXV0b2ZvY3VzRmlsdGVyXT1cInBhcmFtcy5hdXRvZm9jdXNGaWx0ZXJcIlxuXHRcdFx0XHRbc2VsZWN0QWxsXT1cInBhcmFtcy5zZWxlY3RBbGwgPz8gbnVsbFwiXG5cdFx0XHRcdFtzZWxlY3RPbkZvY3VzXT1cInBhcmFtcy5zZWxlY3RPbkZvY3VzXCJcblx0XHRcdFx0W2F1dG9PcHRpb25Gb2N1c109XCJwYXJhbXMuYXV0b09wdGlvbkZvY3VzXCJcblx0XHRcdFx0KG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIiAvPlxuXHRcdH0gQGVsc2Uge1xuXHRcdFx0PHAtc2VsZWN0XG5cdFx0XHRcdFsobmdNb2RlbCldPVwidmFsdWVcIlxuXHRcdFx0XHRbc2Nyb2xsSGVpZ2h0XT1cInBhcmFtcy5zY3JvbGxIZWlnaHQgfHwgJzIwMHB4J1wiXG5cdFx0XHRcdFtmaWx0ZXJdPVwicGFyYW1zLmZpbHRlclwiXG5cdFx0XHRcdFtuYW1lXT1cInBhcmFtcy5uYW1lXCJcblx0XHRcdFx0W29wdGlvbnNdPVwicGFyYW1zLm9wdGlvbnNcIlxuXHRcdFx0XHRbcGxhY2Vob2xkZXJdPVwicGFyYW1zLnBsYWNlaG9sZGVyXCJcblx0XHRcdFx0W2NsYXNzXT1cInBhcmFtcy5jbGFzc1wiXG5cdFx0XHRcdFtzdHlsZV09XCJwYXJhbXMuc3R5bGVcIlxuXHRcdFx0XHRbcGFuZWxTdHlsZV09XCJwYXJhbXMucGFuZWxTdHlsZVwiXG5cdFx0XHRcdFtwYW5lbFN0eWxlQ2xhc3NdPVwicGFyYW1zLnBhbmVsU3R5bGVDbGFzc1wiXG5cdFx0XHRcdFtyZWFkb25seV09XCJwYXJhbXMucmVhZG9ubHlcIlxuXHRcdFx0XHRbZWRpdGFibGVdPVwicGFyYW1zLmVkaXRhYmxlXCJcblx0XHRcdFx0W2FwcGVuZFRvXT1cInBhcmFtcy5hcHBlbmRUbyB8fCAnYm9keSdcIlxuXHRcdFx0XHRbdGFiaW5kZXhdPVwicGFyYW1zLnRhYmluZGV4XCJcblx0XHRcdFx0W2xvYWRpbmdJY29uXT1cInBhcmFtcy5sb2FkaW5nSWNvblwiXG5cdFx0XHRcdFtmaWx0ZXJQbGFjZWhvbGRlcl09XCJwYXJhbXMuZmlsdGVyUGxhY2Vob2xkZXJcIlxuXHRcdFx0XHRbZmlsdGVyTG9jYWxlXT1cInBhcmFtcy5maWx0ZXJMb2NhbGVcIlxuXHRcdFx0XHRbdmFyaWFudF09XCJwYXJhbXMudmFyaWFudFwiXG5cdFx0XHRcdFtpbnB1dElkXT1cInBhcmFtcy5pbnB1dElkXCJcblx0XHRcdFx0W2RhdGFLZXldPVwicGFyYW1zLmRhdGFLZXlcIlxuXHRcdFx0XHRbZmlsdGVyQnldPVwicGFyYW1zLmZpbHRlckJ5XCJcblx0XHRcdFx0W2ZpbHRlckZpZWxkc109XCJwYXJhbXMuZmlsdGVyRmllbGRzXCJcblx0XHRcdFx0W2F1dG9mb2N1c109XCJwYXJhbXMuYXV0b2ZvY3VzID8/IHRydWVcIlxuXHRcdFx0XHRbcmVzZXRGaWx0ZXJPbkhpZGVdPVwicGFyYW1zLnJlc2V0RmlsdGVyT25IaWRlXCJcblx0XHRcdFx0W2NoZWNrbWFya109XCJwYXJhbXMuY2hlY2ttYXJrXCJcblx0XHRcdFx0W2Ryb3Bkb3duSWNvbl09XCJwYXJhbXMuZHJvcGRvd25JY29uXCJcblx0XHRcdFx0W2xvYWRpbmddPVwicGFyYW1zLmxvYWRpbmdcIlxuXHRcdFx0XHRbb3B0aW9uTGFiZWxdPVwicGFyYW1zLm9wdGlvbkxhYmVsXCJcblx0XHRcdFx0W29wdGlvblZhbHVlXT1cInBhcmFtcy5vcHRpb25WYWx1ZVwiXG5cdFx0XHRcdFtvcHRpb25EaXNhYmxlZF09XCJwYXJhbXMub3B0aW9uRGlzYWJsZWRcIlxuXHRcdFx0XHRbb3B0aW9uR3JvdXBMYWJlbF09XCJwYXJhbXMub3B0aW9uR3JvdXBMYWJlbFwiXG5cdFx0XHRcdFtvcHRpb25Hcm91cENoaWxkcmVuXT1cInBhcmFtcy5vcHRpb25Hcm91cENoaWxkcmVuIHx8ICdpdGVtcydcIlxuXHRcdFx0XHRbZ3JvdXBdPVwicGFyYW1zLmdyb3VwXCJcblx0XHRcdFx0W3Nob3dDbGVhcl09XCJwYXJhbXMuc2hvd0NsZWFyXCJcblx0XHRcdFx0W2VtcHR5RmlsdGVyTWVzc2FnZV09XCJwYXJhbXMuZW1wdHlGaWx0ZXJNZXNzYWdlXCJcblx0XHRcdFx0W2VtcHR5TWVzc2FnZV09XCJwYXJhbXMuZW1wdHlNZXNzYWdlXCJcblx0XHRcdFx0W2xhenldPVwicGFyYW1zLmxhenlcIlxuXHRcdFx0XHRbdmlydHVhbFNjcm9sbF09XCJwYXJhbXMudmlydHVhbFNjcm9sbFwiXG5cdFx0XHRcdFt2aXJ0dWFsU2Nyb2xsSXRlbVNpemVdPVwicGFyYW1zLnZpcnR1YWxTY3JvbGxJdGVtU2l6ZVwiXG5cdFx0XHRcdFt2aXJ0dWFsU2Nyb2xsT3B0aW9uc109XCJwYXJhbXMudmlydHVhbFNjcm9sbE9wdGlvbnNcIlxuXHRcdFx0XHRbb3ZlcmxheU9wdGlvbnNdPVwicGFyYW1zLm92ZXJsYXlPcHRpb25zXCJcblx0XHRcdFx0W3NpemVdPVwicGFyYW1zLnNpemVcIlxuXHRcdFx0XHRbYXJpYUZpbHRlckxhYmVsXT1cInBhcmFtcy5hcmlhRmlsdGVyTGFiZWxcIlxuXHRcdFx0XHRbYXJpYUxhYmVsXT1cInBhcmFtcy5hcmlhTGFiZWxcIlxuXHRcdFx0XHRbYXJpYUxhYmVsbGVkQnldPVwicGFyYW1zLmFyaWFMYWJlbGxlZEJ5XCJcblx0XHRcdFx0W2ZpbHRlck1hdGNoTW9kZV09XCJwYXJhbXMuZmlsdGVyTWF0Y2hNb2RlXCJcblx0XHRcdFx0W21heGxlbmd0aF09XCJwYXJhbXMubWF4bGVuZ3RoXCJcblx0XHRcdFx0W3Rvb2x0aXBdPVwicGFyYW1zLnRvb2x0aXBcIlxuXHRcdFx0XHRbdG9vbHRpcFBvc2l0aW9uXT1cInBhcmFtcy50b29sdGlwUG9zaXRpb24gfHwgJ3JpZ2h0J1wiXG5cdFx0XHRcdFt0b29sdGlwUG9zaXRpb25TdHlsZV09XCJwYXJhbXMudG9vbHRpcFBvc2l0aW9uU3R5bGUgfHwgJ2Fic29sdXRlJ1wiXG5cdFx0XHRcdFt0b29sdGlwU3R5bGVDbGFzc109XCJwYXJhbXMudG9vbHRpcFN0eWxlQ2xhc3NcIlxuXHRcdFx0XHRbZm9jdXNPbkhvdmVyXT1cInBhcmFtcy5mb2N1c09uSG92ZXIgPT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHBhcmFtcy5mb2N1c09uSG92ZXJcIlxuXHRcdFx0XHRbZmx1aWRdPVwicGFyYW1zLmZsdWlkID09IHVuZGVmaW5lZCA/IHRydWUgOiBwYXJhbXMuZmx1aWRcIlxuXHRcdFx0XHRbZmlsdGVyVmFsdWVdPVwicGFyYW1zLmZpbHRlclZhbHVlXCJcblx0XHRcdFx0KG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIiAvPlxuXHRcdH1cblx0YCxcblx0aW1wb3J0czogW0Zvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBTZWxlY3RNb2R1bGUsIE11bHRpU2VsZWN0XSxcbn0pXG5leHBvcnQgY2xhc3MgQ2VsbEVkaXRBc3luY1NlbGVjdEZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgSUNlbGxFZGl0b3JBbmd1bGFyQ29tcCB7XG5cdHBhcmFtcyE6IGFueTtcblx0dmFsdWU6IGFueTtcblx0cHJpdmF0ZSByZWFkb25seSBjYWNoZVNlcnZpY2UgPSBpbmplY3QoQXN5bmNTZWxlY3RPcHRpb25zQ2FjaGVTZXJ2aWNlKTtcblxuXHRAVmlld0NoaWxkKCdpbnB1dCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwdWJsaWMgaW5wdXQhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG5cdGFzeW5jIGFnSW5pdChwYXJhbXM6IElDZWxsRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0dGhpcy5wYXJhbXMub3B0aW9uTGFiZWwgPSB0aGlzLnBhcmFtcy5vcHRpb25MYWJlbCB8fCAnbGFiZWwnO1xuXHRcdHRoaXMucGFyYW1zLm9wdGlvblZhbHVlID0gdGhpcy5wYXJhbXMub3B0aW9uVmFsdWUgfHwgJ3ZhbHVlJztcblx0XHRjb25zdCByb3dWYWx1ZSA9IHRoaXMucGFyYW1zLmRhdGE/Llt0aGlzLnBhcmFtcy5jb2xEZWYuZmllbGQhXTtcblx0XHR0aGlzLnZhbHVlID0gdGhpcy5wYXJhbXMubXVsdGlwbGUgPyB0aGlzLnRvVmFsdWVBcnJheShwYXJhbXMudmFsdWUgPz8gcm93VmFsdWUpIDogKHBhcmFtcy52YWx1ZSA/PyByb3dWYWx1ZSk7XG5cblx0XHR0aGlzLnNldEVkaXRvclNpemUocGFyYW1zKTtcblx0XHRhd2FpdCB0aGlzLmxvYWRPcHRpb25zKCk7XG5cdH1cblxuXHRnZXRWYWx1ZSgpOiBhbnkge1xuXHRcdGlmICh0aGlzLnBhcmFtcy5tdWx0aXBsZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMudG9WYWx1ZVN0cmluZyh0aGlzLnZhbHVlKTtcblx0XHR9XG5cdFx0Y29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlO1xuXHRcdHJldHVybiB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbCA/IG51bGwgOiB2YWx1ZTtcblx0fVxuXG5cdG9uQ2hhbmdlKGV2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBuYW1lRmllbGRzID0gdGhpcy5wYXJhbXMubmFtZUZpZWxkcyB8fCBbXTtcblx0XHRuYW1lRmllbGRzLmZvckVhY2goKG5hbWVGaWVsZDogYW55KSA9PiB7XG5cdFx0XHR0aGlzLnVwZGF0ZU5hbWVGaWVsZChuYW1lRmllbGQsIGV2ZW50KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgbG9hZE9wdGlvbnMoKSB7XG5cdFx0Y29uc3QgY29udGV4dCA9IHRoaXMuY3JlYXRlQ29udGV4dCgpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMucGFyYW1zLmxvYWRpbmcgPSB0cnVlO1xuXHRcdFx0dGhpcy5wYXJhbXMub3B0aW9ucyA9IGF3YWl0IHJlc29sdmVBc3luY1NlbGVjdE9wdGlvbnModGhpcy5wYXJhbXMsIGNvbnRleHQpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLnBhcmFtcy5sb2FkaW5nID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVDb250ZXh0KCk6IEFzeW5jU2VsZWN0Q29udGV4dCB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGRhdGE6IHRoaXMucGFyYW1zLmRhdGEsXG5cdFx0XHR2YWx1ZTogdGhpcy5wYXJhbXMubXVsdGlwbGUgPyB0aGlzLnRvVmFsdWVTdHJpbmcodGhpcy52YWx1ZSkgOiB0aGlzLnZhbHVlLFxuXHRcdFx0cGFyYW1zOiB0aGlzLnBhcmFtcyxcblx0XHRcdGZpZWxkOiB0aGlzLnBhcmFtcy5jb2xEZWYuZmllbGQsXG5cdFx0XHRjb2xEZWY6IHRoaXMucGFyYW1zLmNvbERlZixcblx0XHRcdHJvd0luZGV4OiB0aGlzLnBhcmFtcy5ub2RlPy5yb3dJbmRleCxcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRFZGl0b3JTaXplKHBhcmFtczogSUNlbGxFZGl0b3JQYXJhbXMpIHtcblx0XHRjb25zdCBjZWxsV2lkdGggPSBwYXJhbXMuY29sdW1uLmdldEFjdHVhbFdpZHRoKCk7XG5cdFx0dGhpcy5wYXJhbXMuc3R5bGUgPSB7XG5cdFx0XHRib3JkZXI6ICdub25lJyxcblx0XHRcdGJveFNoYWRvdzogJ25vbmUnLFxuXHRcdFx0d2lkdGg6IGAke2NlbGxXaWR0aH1weGAsXG5cdFx0XHRiYWNrZ3JvdW5kOiAndmFyKC0tYWctYmFja2dyb3VuZC1jb2xvciknLFxuXHRcdFx0aGVpZ2h0OiAnNDBweCcsXG5cdFx0XHRhbGlnbkl0ZW1zOiAnY2VudGVyJyxcblx0XHRcdC4uLih0aGlzLnBhcmFtcy5zdHlsZSB8fCB7fSksXG5cdFx0fTtcblx0XHR0aGlzLnBhcmFtcy5wYW5lbFN0eWxlID0ge1xuXHRcdFx0d2lkdGg6IGAke2NlbGxXaWR0aH1weGAsXG5cdFx0XHQuLi4odGhpcy5wYXJhbXMucGFuZWxTdHlsZSB8fCB7fSksXG5cdFx0fTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlTmFtZUZpZWxkKG5hbWVGaWVsZDogYW55LCBldmVudDogYW55KSB7XG5cdFx0Y29uc3Qgb2xkVmFsdWUgPSB0aGlzLnBhcmFtcy5kYXRhW25hbWVGaWVsZC5maWVsZF07XG5cdFx0Y29uc3QgbmV3VmFsdWUgPSB0aGlzLnJlc29sdmVOYW1lRmllbGRWYWx1ZShuYW1lRmllbGQsIGV2ZW50LnZhbHVlKTtcblx0XHRjb25zdCBncmlkOiBHcmlkQ29tcG9uZW50ID0gdGhpcy5wYXJhbXMuZ3JpZCgpO1xuXHRcdGNvbnN0IGU6IGFueSA9IHtcblx0XHRcdGNvbERlZjogbmFtZUZpZWxkLFxuXHRcdFx0b2xkVmFsdWUsXG5cdFx0XHRuZXdWYWx1ZSxcblx0XHRcdHJvd0luZGV4OiB0aGlzLnBhcmFtcy5ub2RlLnJvd0luZGV4LFxuXHRcdFx0ZGF0YTogeyBpZDogdGhpcy5wYXJhbXMuZGF0YS5pZCB9LFxuXHRcdH07XG5cdFx0Z3JpZC5jZWxsVmFsdWVDaGFuZ2VkKGUpO1xuXHRcdHRoaXMucGFyYW1zLmRhdGFbbmFtZUZpZWxkLmZpZWxkXSA9IG5ld1ZhbHVlO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlTmFtZUZpZWxkVmFsdWUobmFtZUZpZWxkOiBhbnksIHZhbHVlOiBhbnkpIHtcblx0XHRjb25zdCB2YWx1ZUZpZWxkID0gdGhpcy5wYXJhbXMub3B0aW9uVmFsdWUgfHwgJ3ZhbHVlJztcblx0XHRpZiAodGhpcy5wYXJhbXMubXVsdGlwbGUpIHtcblx0XHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMudG9WYWx1ZUFycmF5KHZhbHVlKTtcblx0XHRcdHJldHVybiAodGhpcy5wYXJhbXMub3B0aW9ucyB8fCBbXSlcblx0XHRcdFx0LmZpbHRlcigob3A6IGFueSkgPT4gdmFsdWVzLnNvbWUoKHNlbGVjdGVkVmFsdWU6IGFueSkgPT4gc2VsZWN0ZWRWYWx1ZSA9PSBvcD8uW3ZhbHVlRmllbGRdKSlcblx0XHRcdFx0Lm1hcCgob3A6IGFueSkgPT4gb3A/LltuYW1lRmllbGQua2V5XSlcblx0XHRcdFx0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtICE9PSB1bmRlZmluZWQgJiYgaXRlbSAhPT0gbnVsbCAmJiBpdGVtICE9PSAnJylcblx0XHRcdFx0LmpvaW4oJywnKTtcblx0XHR9XG5cdFx0Y29uc3QgaXRlbSA9ICh0aGlzLnBhcmFtcy5vcHRpb25zIHx8IFtdKS5maW5kKChvcDogYW55KSA9PiBvcD8uW3ZhbHVlRmllbGRdID09PSB2YWx1ZSk7XG5cdFx0cmV0dXJuIGl0ZW0gPyBpdGVtW25hbWVGaWVsZC5rZXldIDogbnVsbDtcblx0fVxuXG5cdHByaXZhdGUgdG9WYWx1ZUFycmF5KHZhbHVlOiBhbnkpOiBhbnlbXSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblx0XHRyZXR1cm4gU3RyaW5nKHZhbHVlKS5zcGxpdCgnLCcpLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gJycpO1xuXHR9XG5cblx0cHJpdmF0ZSB0b1ZhbHVlU3RyaW5nKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlLmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gJycgJiYgaXRlbSAhPSBudWxsKS5qb2luKCcsJyk7XG5cdFx0fVxuXHRcdGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRyZXR1cm4gU3RyaW5nKHZhbHVlKTtcblx0fVxufVxuXG4vKipcbiAqIEFzeW5jIHNlbGVjdCBlZGl0b3IgZm9yIGFnLWdyaWQgY2VsbHMuXG4gKlxuICogQ29sdW1uIHVzYWdlOlxuICoge1xuICogICBmaWVsZDogJ3Byb2NDb2RlJyxcbiAqICAgZWRpdGFibGU6IHRydWUsXG4gKiAgIGNlbGxFZGl0b3I6ICdjZWxsRWRpdEFzeW5jU2VsZWN0RmllbGRDb21wb25lbnQnLFxuICogICBjZWxsUmVuZGVyZXI6ICdhc3luY1NlbGVjdExhYmVsUmVuZGVyZXInLFxuICogICBjZWxsRWRpdG9yUGFyYW1zOiBhc3luY1NlbGVjdFBhcmFtcyxcbiAqICAgY2VsbFJlbmRlcmVyUGFyYW1zOiBhc3luY1NlbGVjdFBhcmFtc1xuICogfVxuICpcbiAqIGNvbnN0IGFzeW5jU2VsZWN0UGFyYW1zID0ge1xuICogICAvLyBWYWx1ZSBtYXBwaW5nXG4gKiAgIG9wdGlvbkxhYmVsOiAnbGFiZWwnLCAgICAgICAvLyBkZWZhdWx0OiAnbGFiZWwnXG4gKiAgIG9wdGlvblZhbHVlOiAndmFsdWUnLCAgICAgICAvLyBkZWZhdWx0OiAndmFsdWUnXG4gKiAgIG9wdGlvbnM6IFtdLCAgICAgICAgICAgICAgICAvLyBzdGF0aWMgb3B0aW9uc1xuICogICByYXdPcHRpb25zOiBbXSwgICAgICAgICAgICAgLy8gc3RhdGljIG9wdGlvbnMgYWxpYXNcbiAqXG4gKiAgIC8vIEFzeW5jIG9wdGlvbnMuIENvbnRleHQgc2hhcGU6IHsgZGF0YSwgdmFsdWUsIHBhcmFtcywgZmllbGQsIGNvbERlZiwgcm93SW5kZXggfS5cbiAqICAgZ2V0T3B0aW9uczogKHsgZGF0YSwgdmFsdWUsIHBhcmFtcywgZmllbGQsIGNvbERlZiwgcm93SW5kZXggfSkgPT4gW10sXG4gKiAgIG9wdGlvbnNIb29rOiAoeyBkYXRhLCB2YWx1ZSwgcGFyYW1zLCBmaWVsZCwgY29sRGVmLCByb3dJbmRleCB9KSA9PiBbXSxcbiAqICAgZmlsdGVyT3B0aW9uczogKG9wdGlvbnMsIGNvbnRleHQpID0+IG9wdGlvbnMsXG4gKlxuICogICAvLyBDYWNoZS4gQ2FjaGUgaXMgc2hhcmVkIGJ5IHRoaXMgZWRpdG9yIGFuZCBhc3luY1NlbGVjdExhYmVsUmVuZGVyZXIuXG4gKiAgIGNhY2hlOiB0cnVlLCAgICAgICAgICAgICAgICAvLyBkZWZhdWx0OiB0cnVlXG4gKiAgIGNhY2hlS2V5OiAoeyBkYXRhIH0pID0+IFsncHJvY0NvZGUnLCBkYXRhPy5kZXB0SWRdLmpvaW4oJ3wnKSxcbiAqICAgY2xlYXJDYWNoZTogZmFsc2UsXG4gKlxuICogICAvLyBNdWx0aXBsZSBtb2RlLiBSb3cgdmFsdWVzIGFyZSBzdG9yZWQgYXMgY29tbWEgc3RyaW5ncyBsaWtlIFwiMSwyXCIuXG4gKiAgIG11bHRpcGxlOiB0cnVlLFxuICogICBkaXNwbGF5OiAnY29tbWEnLFxuICogICBtYXhTZWxlY3RlZExhYmVsczogMyxcbiAqICAgc2VsZWN0aW9uTGltaXQ6IDEwLFxuICogICBzaG93VG9nZ2xlQWxsOiB0cnVlLFxuICogICBzaG93SGVhZGVyOiB0cnVlLFxuICpcbiAqICAgLy8gUHJpbWVORyBTZWxlY3QvTXVsdGlTZWxlY3QgY29tbW9uIHByb3BzXG4gKiAgIGZpbHRlcjogdHJ1ZSxcbiAqICAgcGxhY2Vob2xkZXI6ICfor7fpgInmi6knLFxuICogICBzaG93Q2xlYXI6IHRydWUsXG4gKiAgIGFwcGVuZFRvOiAnYm9keScsXG4gKiAgIHNjcm9sbEhlaWdodDogJzIwMHB4JyxcbiAqICAgb3B0aW9uRGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gKiAgIGdyb3VwOiBmYWxzZSxcbiAqICAgb3B0aW9uR3JvdXBMYWJlbDogJ2xhYmVsJyxcbiAqICAgb3B0aW9uR3JvdXBDaGlsZHJlbjogJ2l0ZW1zJyxcbiAqICAgdmlydHVhbFNjcm9sbDogZmFsc2UsXG4gKiAgIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZTogMzIsXG4gKiAgIHBhbmVsU3R5bGU6IHt9LFxuICogICBwYW5lbFN0eWxlQ2xhc3M6ICcnLFxuICpcbiAqICAgLy8gQUcgR3JpZCByZWxhdGVkIHdyaXRlLWJhY2suIENvcGllcyBzZWxlY3RlZCBvcHRpb24gZmllbGRzIHRvIHJvdyBmaWVsZHMuXG4gKiAgIG5hbWVGaWVsZHM6IFtcbiAqICAgICB7IGZpZWxkOiAncHJvY05hbWUnLCBrZXk6ICdsYWJlbCcgfVxuICogICBdXG4gKiB9O1xuICpcbiAqIGdldE9wdGlvbnMvb3B0aW9uc0hvb2sgbWF5IHJldHVybiBPcHRpb25bXSwgeyBkYXRhOiBPcHRpb25bXSB9LCBQcm9taXNlLCBvciBPYnNlcnZhYmxlLlxuICogRm9yIG11bHRpcGxlPXRydWUsIHRoZSBlZGl0b3IgY29udmVydHMgY29tbWEgc3RyaW5ncyB0byBhcnJheXMgZm9yIHAtbXVsdGlzZWxlY3RcbiAqIGFuZCBjb252ZXJ0cyBzZWxlY3RlZCBhcnJheXMgYmFjayB0byBjb21tYSBzdHJpbmdzIG9uIHNhdmUuXG4gKiBVc2UgYXJyb3cgZnVuY3Rpb25zIHdoZW4gcmVhZGluZyBGb3JtQ29tcG9uZW50IG1vZGVsIGZyb20gdGhlIG91dGVyIGNvbXBvbmVudC5cbiAqL1xuIl19
@@ -2,8 +2,9 @@ import { CellEditInputTextCompoent } from './cell-edit-inputText.compoent';
2
2
  import { CellEditInputNumberCompoent } from './cell-edit-inputNumber.component';
3
3
  import { CellEditDatePickerComponent } from './cell-edit-datePicker.compoent';
4
4
  import { CellEditSelectFieldComponent } from './cell-edit-selectField.component';
5
+ import { CellEditAsyncSelectFieldComponent } from './cell-edit-async-selectField.component';
5
6
  import { CellEditAutoCompleteComponent } from './cell-edit-autoComplete.component';
6
7
  import { CellEditInputDateComponent } from './cell-edit-inputDate.component';
7
8
  import { CellEditSelectComponent } from './cell-edit-select.component';
8
- export { CellEditInputTextCompoent, CellEditInputNumberCompoent, CellEditDatePickerComponent, CellEditSelectComponent, CellEditAutoCompleteComponent, CellEditInputDateComponent, CellEditSelectFieldComponent };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2dyaWQvY2VsbC1lZGl0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQy9FLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzdFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ2hGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFBO0FBQ2xGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQ3RFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQix1QkFBdUIsRUFDdkIsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQiw0QkFBNEIsRUFDN0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENlbGxFZGl0SW5wdXRUZXh0Q29tcG9lbnQgfSBmcm9tICcuL2NlbGwtZWRpdC1pbnB1dFRleHQuY29tcG9lbnQnXG5pbXBvcnQgeyBDZWxsRWRpdElucHV0TnVtYmVyQ29tcG9lbnQgfSBmcm9tICcuL2NlbGwtZWRpdC1pbnB1dE51bWJlci5jb21wb25lbnQnXG5pbXBvcnQgeyBDZWxsRWRpdERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2NlbGwtZWRpdC1kYXRlUGlja2VyLmNvbXBvZW50J1xuaW1wb3J0IHsgQ2VsbEVkaXRTZWxlY3RGaWVsZENvbXBvbmVudCB9IGZyb20gJy4vY2VsbC1lZGl0LXNlbGVjdEZpZWxkLmNvbXBvbmVudCdcbmltcG9ydCB7IENlbGxFZGl0QXV0b0NvbXBsZXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jZWxsLWVkaXQtYXV0b0NvbXBsZXRlLmNvbXBvbmVudCdcbmltcG9ydCB7IENlbGxFZGl0SW5wdXREYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jZWxsLWVkaXQtaW5wdXREYXRlLmNvbXBvbmVudCdcbmltcG9ydCB7IENlbGxFZGl0U2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jZWxsLWVkaXQtc2VsZWN0LmNvbXBvbmVudCdcbmV4cG9ydCB7IFxuICBDZWxsRWRpdElucHV0VGV4dENvbXBvZW50LFxuICBDZWxsRWRpdElucHV0TnVtYmVyQ29tcG9lbnQsXG4gIENlbGxFZGl0RGF0ZVBpY2tlckNvbXBvbmVudCxcbiAgQ2VsbEVkaXRTZWxlY3RDb21wb25lbnQsXG4gIENlbGxFZGl0QXV0b0NvbXBsZXRlQ29tcG9uZW50LFxuICBDZWxsRWRpdElucHV0RGF0ZUNvbXBvbmVudCxcbiAgQ2VsbEVkaXRTZWxlY3RGaWVsZENvbXBvbmVudFxufVxuIl19
9
+ export { CellEditInputTextCompoent, CellEditInputNumberCompoent, CellEditDatePickerComponent, CellEditSelectComponent, CellEditAutoCompleteComponent, CellEditInputDateComponent, CellEditSelectFieldComponent, CellEditAsyncSelectFieldComponent };
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbW0tZWxlbWVudC11aS9zcmMvbGliL2dyaWQvY2VsbC1lZGl0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFBO0FBQzFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQy9FLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzdFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ2hGLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQzNGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG9DQUFvQyxDQUFBO0FBQ2xGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQ3RFLE9BQU8sRUFDTCx5QkFBeUIsRUFDekIsMkJBQTJCLEVBQzNCLDJCQUEyQixFQUMzQix1QkFBdUIsRUFDdkIsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQiw0QkFBNEIsRUFDNUIsaUNBQWlDLEVBQ2xDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZWxsRWRpdElucHV0VGV4dENvbXBvZW50IH0gZnJvbSAnLi9jZWxsLWVkaXQtaW5wdXRUZXh0LmNvbXBvZW50J1xuaW1wb3J0IHsgQ2VsbEVkaXRJbnB1dE51bWJlckNvbXBvZW50IH0gZnJvbSAnLi9jZWxsLWVkaXQtaW5wdXROdW1iZXIuY29tcG9uZW50J1xuaW1wb3J0IHsgQ2VsbEVkaXREYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jZWxsLWVkaXQtZGF0ZVBpY2tlci5jb21wb2VudCdcbmltcG9ydCB7IENlbGxFZGl0U2VsZWN0RmllbGRDb21wb25lbnQgfSBmcm9tICcuL2NlbGwtZWRpdC1zZWxlY3RGaWVsZC5jb21wb25lbnQnXG5pbXBvcnQgeyBDZWxsRWRpdEFzeW5jU2VsZWN0RmllbGRDb21wb25lbnQgfSBmcm9tICcuL2NlbGwtZWRpdC1hc3luYy1zZWxlY3RGaWVsZC5jb21wb25lbnQnXG5pbXBvcnQgeyBDZWxsRWRpdEF1dG9Db21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4vY2VsbC1lZGl0LWF1dG9Db21wbGV0ZS5jb21wb25lbnQnXG5pbXBvcnQgeyBDZWxsRWRpdElucHV0RGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY2VsbC1lZGl0LWlucHV0RGF0ZS5jb21wb25lbnQnXG5pbXBvcnQgeyBDZWxsRWRpdFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vY2VsbC1lZGl0LXNlbGVjdC5jb21wb25lbnQnXG5leHBvcnQgeyBcbiAgQ2VsbEVkaXRJbnB1dFRleHRDb21wb2VudCxcbiAgQ2VsbEVkaXRJbnB1dE51bWJlckNvbXBvZW50LFxuICBDZWxsRWRpdERhdGVQaWNrZXJDb21wb25lbnQsXG4gIENlbGxFZGl0U2VsZWN0Q29tcG9uZW50LFxuICBDZWxsRWRpdEF1dG9Db21wbGV0ZUNvbXBvbmVudCxcbiAgQ2VsbEVkaXRJbnB1dERhdGVDb21wb25lbnQsXG4gIENlbGxFZGl0U2VsZWN0RmllbGRDb21wb25lbnQsXG4gIENlbGxFZGl0QXN5bmNTZWxlY3RGaWVsZENvbXBvbmVudFxufVxuIl19
@@ -0,0 +1,102 @@
1
+ import { Component, inject } from '@angular/core';
2
+ import { resolveAsyncSelectOptions } from '../cell-utils/async-select-options';
3
+ import { AsyncSelectOptionsCacheService } from '../cell-utils/async-select-options-cache.service';
4
+ import * as i0 from "@angular/core";
5
+ export class AsyncSelectLabelRenderer {
6
+ constructor() {
7
+ this.label = '';
8
+ this.loadId = 0;
9
+ this.cacheService = inject(AsyncSelectOptionsCacheService);
10
+ }
11
+ agInit(params) {
12
+ this.refresh(params);
13
+ }
14
+ refresh(params) {
15
+ this.params = this.mergeParams(params);
16
+ void this.loadLabel();
17
+ return true;
18
+ }
19
+ async loadLabel() {
20
+ const loadId = ++this.loadId;
21
+ const value = this.params.value ?? this.params.data?.[this.params.colDef.field];
22
+ if (value === '' || value == null) {
23
+ this.label = '';
24
+ return;
25
+ }
26
+ const context = this.createContext(value);
27
+ try {
28
+ const options = await resolveAsyncSelectOptions(this.params, context);
29
+ if (loadId !== this.loadId) {
30
+ return;
31
+ }
32
+ this.label = this.formatLabel(value, options);
33
+ }
34
+ catch {
35
+ if (loadId === this.loadId) {
36
+ this.label = String(value);
37
+ }
38
+ }
39
+ }
40
+ mergeParams(params) {
41
+ const cellEditorParams = params.colDef?.cellEditorParams || {};
42
+ return {
43
+ ...cellEditorParams,
44
+ ...params,
45
+ optionLabel: params.optionLabel || cellEditorParams.optionLabel || 'label',
46
+ optionValue: params.optionValue || cellEditorParams.optionValue || 'value',
47
+ multiple: params.multiple ?? cellEditorParams.multiple,
48
+ };
49
+ }
50
+ createContext(value) {
51
+ return {
52
+ data: this.params.data,
53
+ value: this.params.multiple ? this.toValueString(value) : value,
54
+ params: this.params,
55
+ field: this.params.colDef.field,
56
+ colDef: this.params.colDef,
57
+ rowIndex: this.params.node?.rowIndex,
58
+ };
59
+ }
60
+ formatLabel(value, options) {
61
+ const valueField = this.params.optionValue || 'value';
62
+ const labelField = this.params.optionLabel || 'label';
63
+ if (this.params.multiple) {
64
+ const values = this.toValueArray(value);
65
+ const labels = values.map((item) => {
66
+ const option = options.find((opt) => opt?.[valueField] == item);
67
+ return option ? option?.[labelField] : item;
68
+ });
69
+ return labels.filter((item) => item !== undefined && item !== null && item !== '').join(',');
70
+ }
71
+ const option = options.find((opt) => opt?.[valueField] == value);
72
+ return option ? option?.[labelField] : String(value);
73
+ }
74
+ toValueArray(value) {
75
+ if (Array.isArray(value)) {
76
+ return value;
77
+ }
78
+ if (value === '' || value == null) {
79
+ return [];
80
+ }
81
+ return String(value).split(',').filter((item) => item !== '');
82
+ }
83
+ toValueString(value) {
84
+ if (Array.isArray(value)) {
85
+ return value.filter((item) => item !== '' && item != null).join(',');
86
+ }
87
+ if (value === '' || value == null) {
88
+ return '';
89
+ }
90
+ return String(value);
91
+ }
92
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AsyncSelectLabelRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
93
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AsyncSelectLabelRenderer, isStandalone: true, selector: "ng-component", ngImport: i0, template: `{{ label }}`, isInline: true }); }
94
+ }
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AsyncSelectLabelRenderer, decorators: [{
96
+ type: Component,
97
+ args: [{
98
+ standalone: true,
99
+ template: `{{ label }}`,
100
+ }]
101
+ }] });
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtc2VsZWN0LWxhYmVsLXJlbmRlcmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW1tLWVsZW1lbnQtdWkvc3JjL2xpYi9ncmlkL2NlbGwtcmVuZGVyL2FzeW5jLXNlbGVjdC1sYWJlbC1yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUdsRCxPQUFPLEVBQXNCLHlCQUF5QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sa0RBQWtELENBQUM7O0FBTWxHLE1BQU0sT0FBTyx3QkFBd0I7SUFKckM7UUFLQyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBRUgsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUNGLGlCQUFZLEdBQUcsTUFBTSxDQUFDLDhCQUE4QixDQUFDLENBQUM7S0EwRnZFO0lBeEZBLE1BQU0sQ0FBQyxNQUEyQjtRQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxPQUFPLENBQUMsTUFBMkI7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVPLEtBQUssQ0FBQyxTQUFTO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hG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QUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNuQyxPQUFPLEVBQUUsQ0FBQztRQUNYLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDOytHQTdGVyx3QkFBd0I7bUdBQXhCLHdCQUF3Qix3RUFGMUIsYUFBYTs7NEZBRVgsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNWLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsYUFBYTtpQkFDdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBJQ2VsbFJlbmRlcmVyQW5ndWxhckNvbXAgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHR5cGUgeyBJQ2VsbFJlbmRlcmVyUGFyYW1zIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgQXN5bmNTZWxlY3RDb250ZXh0LCByZXNvbHZlQXN5bmNTZWxlY3RPcHRpb25zIH0gZnJvbSAnLi4vY2VsbC11dGlscy9hc3luYy1zZWxlY3Qtb3B0aW9ucyc7XG5pbXBvcnQgeyBBc3luY1NlbGVjdE9wdGlvbnNDYWNoZVNlcnZpY2UgfSBmcm9tICcuLi9jZWxsLXV0aWxzL2FzeW5jLXNlbGVjdC1vcHRpb25zLWNhY2hlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGB7eyBsYWJlbCB9fWAsXG59KVxuZXhwb3J0IGNsYXNzIEFzeW5jU2VsZWN0TGFiZWxSZW5kZXJlciBpbXBsZW1lbnRzIElDZWxsUmVuZGVyZXJBbmd1bGFyQ29tcCB7XG5cdGxhYmVsID0gJyc7XG5cdHBhcmFtcyE6IGFueTtcblx0cHJpdmF0ZSBsb2FkSWQgPSAwO1xuXHRwcml2YXRlIHJlYWRvbmx5IGNhY2hlU2VydmljZSA9IGluamVjdChBc3luY1NlbGVjdE9wdGlvbnNDYWNoZVNlcnZpY2UpO1xuXG5cdGFnSW5pdChwYXJhbXM6IElDZWxsUmVuZGVyZXJQYXJhbXMpOiB2b2lkIHtcblx0XHR0aGlzLnJlZnJlc2gocGFyYW1zKTtcblx0fVxuXG5cdHJlZnJlc2gocGFyYW1zOiBJQ2VsbFJlbmRlcmVyUGFyYW1zKTogYm9vbGVhbiB7XG5cdFx0dGhpcy5wYXJhbXMgPSB0aGlzLm1lcmdlUGFyYW1zKHBhcmFtcyk7XG5cdFx0dm9pZCB0aGlzLmxvYWRMYWJlbCgpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBsb2FkTGFiZWwoKSB7XG5cdFx0Y29uc3QgbG9hZElkID0gKyt0aGlzLmxvYWRJZDtcblx0XHRjb25zdCB2YWx1ZSA9IHRoaXMucGFyYW1zLnZhbHVlID8/IHRoaXMucGFyYW1zLmRhdGE/Llt0aGlzLnBhcmFtcy5jb2xEZWYuZmllbGRdO1xuXHRcdGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5sYWJlbCA9ICcnO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLmNyZWF0ZUNvbnRleHQodmFsdWUpO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBvcHRpb25zID0gYXdhaXQgcmVzb2x2ZUFzeW5jU2VsZWN0T3B0aW9ucyh0aGlzLnBhcmFtcywgY29udGV4dCk7XG5cdFx0XHRpZiAobG9hZElkICE9PSB0aGlzLmxvYWRJZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmxhYmVsID0gdGhpcy5mb3JtYXRMYWJlbCh2YWx1ZSwgb3B0aW9ucyk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRpZiAobG9hZElkID09PSB0aGlzLmxvYWRJZCkge1xuXHRcdFx0XHR0aGlzLmxhYmVsID0gU3RyaW5nKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIG1lcmdlUGFyYW1zKHBhcmFtczogSUNlbGxSZW5kZXJlclBhcmFtcykge1xuXHRcdGNvbnN0IGNlbGxFZGl0b3JQYXJhbXMgPSAocGFyYW1zLmNvbERlZiBhcyBhbnkpPy5jZWxsRWRpdG9yUGFyYW1zIHx8IHt9O1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5jZWxsRWRpdG9yUGFyYW1zLFxuXHRcdFx0Li4ucGFyYW1zLFxuXHRcdFx0b3B0aW9uTGFiZWw6IChwYXJhbXMgYXMgYW55KS5vcHRpb25MYWJlbCB8fCBjZWxsRWRpdG9yUGFyYW1zLm9wdGlvbkxhYmVsIHx8ICdsYWJlbCcsXG5cdFx0XHRvcHRpb25WYWx1ZTogKHBhcmFtcyBhcyBhbnkpLm9wdGlvblZhbHVlIHx8IGNlbGxFZGl0b3JQYXJhbXMub3B0aW9uVmFsdWUgfHwgJ3ZhbHVlJyxcblx0XHRcdG11bHRpcGxlOiAocGFyYW1zIGFzIGFueSkubXVsdGlwbGUgPz8gY2VsbEVkaXRvclBhcmFtcy5tdWx0aXBsZSxcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBjcmVhdGVDb250ZXh0KHZhbHVlOiBhbnkpOiBBc3luY1NlbGVjdENvbnRleHQge1xuXHRcdHJldHVybiB7XG5cdFx0XHRkYXRhOiB0aGlzLnBhcmFtcy5kYXRhLFxuXHRcdFx0dmFsdWU6IHRoaXMucGFyYW1zLm11bHRpcGxlID8gdGhpcy50b1ZhbHVlU3RyaW5nKHZhbHVlKSA6IHZhbHVlLFxuXHRcdFx0cGFyYW1zOiB0aGlzLnBhcmFtcyxcblx0XHRcdGZpZWxkOiB0aGlzLnBhcmFtcy5jb2xEZWYuZmllbGQsXG5cdFx0XHRjb2xEZWY6IHRoaXMucGFyYW1zLmNvbERlZixcblx0XHRcdHJvd0luZGV4OiB0aGlzLnBhcmFtcy5ub2RlPy5yb3dJbmRleCxcblx0XHR9O1xuXHR9XG5cblx0cHJpdmF0ZSBmb3JtYXRMYWJlbCh2YWx1ZTogYW55LCBvcHRpb25zOiBhbnlbXSkge1xuXHRcdGNvbnN0IHZhbHVlRmllbGQgPSB0aGlzLnBhcmFtcy5vcHRpb25WYWx1ZSB8fCAndmFsdWUnO1xuXHRcdGNvbnN0IGxhYmVsRmllbGQgPSB0aGlzLnBhcmFtcy5vcHRpb25MYWJlbCB8fCAnbGFiZWwnO1xuXHRcdGlmICh0aGlzLnBhcmFtcy5tdWx0aXBsZSkge1xuXHRcdFx0Y29uc3QgdmFsdWVzID0gdGhpcy50b1ZhbHVlQXJyYXkodmFsdWUpO1xuXHRcdFx0Y29uc3QgbGFiZWxzID0gdmFsdWVzLm1hcCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdDogYW55KSA9PiBvcHQ/Llt2YWx1ZUZpZWxkXSA9PSBpdGVtKTtcblx0XHRcdFx0cmV0dXJuIG9wdGlvbiA/IG9wdGlvbj8uW2xhYmVsRmllbGRdIDogaXRlbTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGxhYmVscy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCAmJiBpdGVtICE9PSBudWxsICYmIGl0ZW0gIT09ICcnKS5qb2luKCcsJyk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmluZCgob3B0OiBhbnkpID0+IG9wdD8uW3ZhbHVlRmllbGRdID09IHZhbHVlKTtcblx0XHRyZXR1cm4gb3B0aW9uID8gb3B0aW9uPy5bbGFiZWxGaWVsZF0gOiBTdHJpbmcodmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSB0b1ZhbHVlQXJyYXkodmFsdWU6IGFueSk6IGFueVtdIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdFx0aWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXHRcdHJldHVybiBTdHJpbmcodmFsdWUpLnNwbGl0KCcsJykuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSAnJyk7XG5cdH1cblxuXHRwcml2YXRlIHRvVmFsdWVTdHJpbmcodmFsdWU6IGFueSk6IHN0cmluZyB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSAnJyAmJiBpdGVtICE9IG51bGwpLmpvaW4oJywnKTtcblx0XHR9XG5cdFx0aWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXHRcdHJldHVybiBTdHJpbmcodmFsdWUpO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,20 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { NavigationStart } from '@angular/router';
3
+ import { filter } from 'rxjs';
4
+ import { clearAsyncSelectOptionsCache } from './async-select-options';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/router";
7
+ export class AsyncSelectOptionsCacheService {
8
+ constructor(router) {
9
+ router.events
10
+ .pipe(filter((event) => event instanceof NavigationStart))
11
+ .subscribe(() => clearAsyncSelectOptionsCache());
12
+ }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AsyncSelectOptionsCacheService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
14
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AsyncSelectOptionsCacheService, providedIn: 'root' }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AsyncSelectOptionsCacheService, decorators: [{
17
+ type: Injectable,
18
+ args: [{ providedIn: 'root' }]
19
+ }], ctorParameters: () => [{ type: i1.Router }] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtc2VsZWN0LW9wdGlvbnMtY2FjaGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ltbS1lbGVtZW50LXVpL3NyYy9saWIvZ3JpZC9jZWxsLXV0aWxzL2FzeW5jLXNlbGVjdC1vcHRpb25zLWNhY2hlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBR3RFLE1BQU0sT0FBTyw4QkFBOEI7SUFDMUMsWUFBWSxNQUFjO1FBQ3pCLE1BQU0sQ0FBQyxNQUFNO2FBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBNEIsRUFBRSxDQUFDLEtBQUssWUFBWSxlQUFlLENBQUMsQ0FBQzthQUNuRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7K0dBTFcsOEJBQThCO21IQUE5Qiw4QkFBOEIsY0FEakIsTUFBTTs7NEZBQ25CLDhCQUE4QjtrQkFEMUMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNsZWFyQXN5bmNTZWxlY3RPcHRpb25zQ2FjaGUgfSBmcm9tICcuL2FzeW5jLXNlbGVjdC1vcHRpb25zJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBc3luY1NlbGVjdE9wdGlvbnNDYWNoZVNlcnZpY2Uge1xuXHRjb25zdHJ1Y3Rvcihyb3V0ZXI6IFJvdXRlcikge1xuXHRcdHJvdXRlci5ldmVudHNcblx0XHRcdC5waXBlKGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uU3RhcnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpKVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiBjbGVhckFzeW5jU2VsZWN0T3B0aW9uc0NhY2hlKCkpO1xuXHR9XG59XG4iXX0=