@pega/angular-sdk-components 0.23.5 → 0.24.1

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 (46) hide show
  1. package/esm2022/lib/_bridge/angular-pconnect.mjs +14 -2
  2. package/esm2022/lib/_bridge/helpers/sdk-pega-component-map.mjs +3 -1
  3. package/esm2022/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.mjs +6 -3
  4. package/esm2022/lib/_components/designSystemExtension/operator/operator.component.mjs +9 -5
  5. package/esm2022/lib/_components/field/auto-complete/auto-complete.component.mjs +2 -2
  6. package/esm2022/lib/_components/field/check-box/check-box.component.mjs +107 -42
  7. package/esm2022/lib/_components/field/group/group.component.mjs +6 -3
  8. package/esm2022/lib/_components/field/multiselect/multiselect.component.mjs +311 -0
  9. package/esm2022/lib/_components/field/multiselect/utils.mjs +187 -0
  10. package/esm2022/lib/_components/field/rich-text/rich-text.component.mjs +3 -3
  11. package/esm2022/lib/_components/field/time/time.component.mjs +5 -3
  12. package/esm2022/lib/_components/field/url/url.component.mjs +5 -3
  13. package/esm2022/lib/_components/infra/Containers/view-container/view-container.component.mjs +6 -6
  14. package/esm2022/lib/_components/infra/multi-step/multi-step.component.mjs +3 -3
  15. package/esm2022/lib/_components/infra/navbar/navbar.component.mjs +6 -3
  16. package/esm2022/lib/_components/template/case-summary/case-summary.component.mjs +33 -4
  17. package/esm2022/lib/_components/template/field-value-list/field-value-list.component.mjs +8 -3
  18. package/esm2022/lib/_components/template/list-view/list-view.component.mjs +23 -25
  19. package/esm2022/lib/_components/template/list-view/utils.mjs +5 -3
  20. package/esm2022/lib/_components/template/simple-table-manual/helpers.mjs +2 -2
  21. package/esm2022/lib/_components/template/simple-table-manual/simple-table-manual.component.mjs +41 -12
  22. package/esm2022/lib/_components/template/wss-nav-bar/wss-nav-bar.component.mjs +5 -3
  23. package/esm2022/lib/_components/widget/attachment/attachment.component.mjs +7 -3
  24. package/esm2022/lib/_helpers/instructions-utils.mjs +36 -0
  25. package/esm2022/lib/_helpers/utils.mjs +2 -2
  26. package/fesm2022/pega-angular-sdk-components.mjs +782 -114
  27. package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
  28. package/lib/_bridge/angular-pconnect.d.ts +2 -0
  29. package/lib/_bridge/helpers/sdk-pega-component-map.d.ts +2 -0
  30. package/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.d.ts +2 -0
  31. package/lib/_components/designSystemExtension/operator/operator.component.d.ts +2 -1
  32. package/lib/_components/field/check-box/check-box.component.d.ts +18 -0
  33. package/lib/_components/field/multiselect/multiselect.component.d.ts +64 -0
  34. package/lib/_components/field/multiselect/utils.d.ts +8 -0
  35. package/lib/_components/field/time/time.component.d.ts +1 -0
  36. package/lib/_components/field/url/url.component.d.ts +1 -0
  37. package/lib/_components/infra/navbar/navbar.component.d.ts +2 -0
  38. package/lib/_components/template/case-summary/case-summary.component.d.ts +2 -0
  39. package/lib/_components/template/field-value-list/field-value-list.component.d.ts +2 -1
  40. package/lib/_components/template/list-view/list-view.component.d.ts +0 -2
  41. package/lib/_components/template/simple-table-manual/simple-table-manual.component.d.ts +2 -0
  42. package/lib/_components/template/wss-nav-bar/wss-nav-bar.component.d.ts +2 -0
  43. package/lib/_components/widget/attachment/attachment.component.d.ts +4 -0
  44. package/lib/_helpers/instructions-utils.d.ts +4 -0
  45. package/lib/doc/KeyReleaseUpdates.md +63 -0
  46. package/package.json +1 -1
@@ -0,0 +1,311 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, forwardRef, Input } from '@angular/core';
3
+ import { FormControl, ReactiveFormsModule } from '@angular/forms';
4
+ import { MatAutocompleteModule } from '@angular/material/autocomplete';
5
+ import { MatChipsModule } from '@angular/material/chips';
6
+ import { MatCheckboxModule } from '@angular/material/checkbox';
7
+ import { MatOptionModule } from '@angular/material/core';
8
+ import { MatFormFieldModule } from '@angular/material/form-field';
9
+ import { MatInputModule } from '@angular/material/input';
10
+ import { MatIconModule } from '@angular/material/icon';
11
+ import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component';
12
+ import { doSearch, getDisplayFieldsMetaData, getGroupDataForItemsTree, preProcessColumns } from './utils';
13
+ import { deleteInstruction, insertInstruction } from '../../../_helpers/instructions-utils';
14
+ import * as i0 from "@angular/core";
15
+ import * as i1 from "../../../_bridge/angular-pconnect";
16
+ import * as i2 from "../../../_helpers/utils";
17
+ import * as i3 from "@angular/common";
18
+ import * as i4 from "@angular/forms";
19
+ import * as i5 from "@angular/material/form-field";
20
+ import * as i6 from "@angular/material/input";
21
+ import * as i7 from "@angular/material/autocomplete";
22
+ import * as i8 from "@angular/material/core";
23
+ import * as i9 from "@angular/material/checkbox";
24
+ import * as i10 from "@angular/material/icon";
25
+ import * as i11 from "@angular/material/chips";
26
+ export class MultiselectComponent {
27
+ constructor(angularPConnect, utils) {
28
+ this.angularPConnect = angularPConnect;
29
+ this.utils = utils;
30
+ // Used with AngularPConnect
31
+ this.angularPConnectData = {};
32
+ this.label$ = '';
33
+ this.value$ = '';
34
+ this.bRequired$ = false;
35
+ this.bDisabled$ = false;
36
+ this.bVisible$ = true;
37
+ this.bHasForm$ = true;
38
+ this.fieldControl = new FormControl('', null);
39
+ this.showSecondaryInSearchOnly = false;
40
+ this.isGroupData = false;
41
+ this.groupDataSource = [];
42
+ this.matchPosition = 'contains';
43
+ this.groupColumnsConfig = [{}];
44
+ this.selectedItems = [];
45
+ this.itemsTreeBaseData = [];
46
+ this.itemsTree = [];
47
+ this.optionClicked = (event, data, trigger) => {
48
+ event.stopPropagation();
49
+ this.toggleSelection(data, trigger);
50
+ };
51
+ this.toggleSelection = (data, trigger) => {
52
+ data.selected = !data.selected;
53
+ this.trigger = trigger;
54
+ this.itemsTree.map((ele) => {
55
+ if (ele.id === data.id) {
56
+ ele.selected = data.selected;
57
+ }
58
+ return ele;
59
+ });
60
+ if (data.selected === true) {
61
+ this.selectedItems.push(data);
62
+ }
63
+ else {
64
+ const index = this.selectedItems.findIndex(value => value.id === data.id);
65
+ this.selectedItems.splice(index, 1);
66
+ }
67
+ this.value$ = '';
68
+ // if this is a referenceList case
69
+ if (this.referenceList)
70
+ this.setSelectedItemsForReferenceList(data);
71
+ this.getCaseListBasedOnParams(this.value$, '', [...this.selectedItems], [...this.itemsTree], true);
72
+ };
73
+ this.removeChip = (data) => {
74
+ if (data) {
75
+ data = this.itemsTree.filter((ele) => {
76
+ return ele.id === data.id;
77
+ });
78
+ this.toggleSelection(data[0]);
79
+ }
80
+ };
81
+ }
82
+ ngOnInit() {
83
+ // First thing in initialization is registering and subscribing to the AngularPConnect service
84
+ this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
85
+ this.controlName$ = this.angularPConnect.getComponentID(this);
86
+ // Then, continue on with other initialization
87
+ this.checkAndUpdate();
88
+ if (this.formGroup$) {
89
+ // add control to formGroup
90
+ this.formGroup$.addControl(this.controlName$, this.fieldControl);
91
+ this.fieldControl.setValue(this.value$);
92
+ this.bHasForm$ = true;
93
+ }
94
+ else {
95
+ this.bHasForm$ = false;
96
+ }
97
+ }
98
+ ngOnDestroy() {
99
+ if (this.formGroup$) {
100
+ this.formGroup$.removeControl(this.controlName$);
101
+ }
102
+ if (this.angularPConnectData.unsubscribeFn) {
103
+ this.angularPConnectData.unsubscribeFn();
104
+ }
105
+ }
106
+ // Callback passed when subscribing to store change
107
+ onStateChange() {
108
+ this.checkAndUpdate();
109
+ }
110
+ checkAndUpdate() {
111
+ // Should always check the bridge to see if the component should
112
+ // update itself (re-render)
113
+ const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
114
+ // ONLY call updateSelf when the component should update
115
+ if (bUpdateSelf) {
116
+ this.updateSelf();
117
+ }
118
+ }
119
+ // updateSelf
120
+ updateSelf() {
121
+ this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps());
122
+ let { datasource = [], columns = [{}] } = this.configProps$;
123
+ this.setPropertyValuesFromProps();
124
+ if (this.referenceList.length > 0) {
125
+ datasource = this.referenceList;
126
+ columns = [
127
+ {
128
+ value: this.primaryField,
129
+ display: 'true',
130
+ useForSearch: true,
131
+ primary: 'true'
132
+ },
133
+ {
134
+ value: this.selectionKey,
135
+ setProperty: this.selectionKey,
136
+ key: 'true'
137
+ }
138
+ ];
139
+ let secondaryColumns = [];
140
+ if (this.secondaryFields) {
141
+ secondaryColumns = this.secondaryFields.map(secondaryField => ({
142
+ value: secondaryField,
143
+ display: 'true',
144
+ secondary: 'true',
145
+ useForSearch: 'true'
146
+ }));
147
+ }
148
+ else {
149
+ secondaryColumns = [
150
+ {
151
+ value: this.selectionKey,
152
+ display: 'true',
153
+ secondary: 'true',
154
+ useForSearch: 'true'
155
+ }
156
+ ];
157
+ }
158
+ if (this.referenceType === 'Case') {
159
+ columns = [...columns, ...secondaryColumns];
160
+ }
161
+ }
162
+ this.value$ = this.value$ ? this.value$ : '';
163
+ const contextName = this.pConn$.getContextName();
164
+ const dataConfig = {
165
+ dataSource: datasource,
166
+ groupDataSource: this.groupDataSource,
167
+ isGroupData: this.isGroupData,
168
+ showSecondaryInSearchOnly: this.showSecondaryInSearchOnly,
169
+ parameters: this.parameters,
170
+ matchPosition: this.matchPosition,
171
+ listType: this.listType,
172
+ maxResultsDisplay: this.maxResultsDisplay || '100',
173
+ columns: preProcessColumns(columns),
174
+ groupColumnsConfig: preProcessColumns(this.groupColumnsConfig)
175
+ };
176
+ const groupsDisplayFieldMeta = this.listType !== 'associated' ? getDisplayFieldsMetaData(dataConfig.groupColumnsConfig) : null;
177
+ this.itemsTreeBaseData = getGroupDataForItemsTree(this.groupDataSource, groupsDisplayFieldMeta, this.showSecondaryInSearchOnly) || [];
178
+ this.itemsTree = this.isGroupData ? getGroupDataForItemsTree(this.groupDataSource, groupsDisplayFieldMeta, this.showSecondaryInSearchOnly) : [];
179
+ this.displayFieldMeta = this.listType !== 'associated' ? getDisplayFieldsMetaData(dataConfig.columns) : null;
180
+ this.listActions = this.pConn$.getListActions();
181
+ this.pConn$.setReferenceList(this.selectionList);
182
+ if (this.configProps$.visibility != null) {
183
+ this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
184
+ }
185
+ // disabled
186
+ if (this.configProps$.disabled != undefined) {
187
+ this.bDisabled$ = this.utils.getBooleanValue(this.configProps$.disabled);
188
+ }
189
+ if (this.bDisabled$) {
190
+ this.fieldControl.disable();
191
+ }
192
+ else {
193
+ this.fieldControl.enable();
194
+ }
195
+ if (this.listType !== 'associated') {
196
+ PCore.getDataApi()
197
+ ?.init(dataConfig, contextName)
198
+ .then(async (dataObj) => {
199
+ this.dataApiObj = dataObj;
200
+ if (!this.isGroupData) {
201
+ this.getCaseListBasedOnParams(this.value$ ?? '', '', [...this.selectedItems], [...this.itemsTree]);
202
+ }
203
+ });
204
+ }
205
+ }
206
+ setPropertyValuesFromProps() {
207
+ this.label$ = this.configProps$.label;
208
+ this.placeholder = this.configProps$.placeholder || '';
209
+ this.listType = this.configProps$.listType ? this.configProps$.listType : '';
210
+ this.hideLabel = this.configProps$.hideLabel;
211
+ this.parameters = this.configProps$?.parameters ? this.configProps$?.parameters : {};
212
+ this.referenceList = this.configProps$?.referenceList;
213
+ this.selectionKey = this.configProps$?.selectionKey;
214
+ this.primaryField = this.configProps$?.primaryField;
215
+ this.initialCaseClass = this.configProps$?.initialCaseClass;
216
+ this.showSecondaryInSearchOnly = this.configProps$?.showSecondaryInSearchOnly ? this.configProps$?.showSecondaryInSearchOnly : false;
217
+ this.isGroupData = this.configProps$?.isGroupData ? this.configProps$.isGroupData : false;
218
+ this.referenceType = this.configProps$?.referenceType;
219
+ this.secondaryFields = this.configProps$?.secondaryFields;
220
+ this.groupDataSource = this.configProps$?.groupDataSource ? this.configProps$?.groupDataSource : [];
221
+ this.matchPosition = this.configProps$?.matchPosition ? this.configProps$?.matchPosition : 'contains';
222
+ this.maxResultsDisplay = this.configProps$?.maxResultsDisplay;
223
+ this.groupColumnsConfig = this.configProps$?.groupColumnsConfig ? this.configProps$?.groupColumnsConfig : [{}];
224
+ this.selectionList = this.configProps$?.selectionList;
225
+ this.value$ = this.configProps$?.value;
226
+ }
227
+ // main search function trigger
228
+ getCaseListBasedOnParams(searchText, group, selectedRows, currentItemsTree, isTriggeredFromSearch = false) {
229
+ if (this.referenceList && this.referenceList.length > 0) {
230
+ this.listActions.getSelectedRows(true).then(result => {
231
+ selectedRows =
232
+ result.length > 0
233
+ ? result.map(item => {
234
+ return {
235
+ id: item[this.selectionKey.startsWith('.') ? this.selectionKey.substring(1) : this.selectionKey],
236
+ primary: item[this.primaryField.startsWith('.') ? this.primaryField.substring(1) : this.primaryField]
237
+ };
238
+ })
239
+ : [];
240
+ this.selectedItems = selectedRows;
241
+ const initalItemsTree = isTriggeredFromSearch || !currentItemsTree ? [...this.itemsTreeBaseData] : [...currentItemsTree];
242
+ doSearch(searchText, group, this.initialCaseClass, this.displayFieldMeta, this.dataApiObj, initalItemsTree, this.isGroupData, this.showSecondaryInSearchOnly, selectedRows || []).then(res => {
243
+ this.itemsTree = res || [];
244
+ if (this.trigger) {
245
+ this.trigger.openPanel();
246
+ }
247
+ });
248
+ });
249
+ }
250
+ }
251
+ fieldOnChange(event) {
252
+ this.value$ = event.target.value;
253
+ this.getCaseListBasedOnParams(this.value$, '', [...this.selectedItems], [...this.itemsTree], true);
254
+ }
255
+ optionChanged(event) {
256
+ this.angularPConnectData.actions?.onChange(this, event);
257
+ }
258
+ setSelectedItemsForReferenceList(data) {
259
+ // Clear error messages if any
260
+ const propName = this.pConn$.getStateProps().selectionList;
261
+ this.pConn$.clearErrorMessages({
262
+ property: propName,
263
+ category: '',
264
+ context: ''
265
+ });
266
+ const { selected } = data;
267
+ if (selected) {
268
+ insertInstruction(this.pConn$, this.selectionList, this.selectionKey, this.primaryField, data);
269
+ }
270
+ else {
271
+ deleteInstruction(this.pConn$, this.selectionList, this.selectionKey, data);
272
+ }
273
+ }
274
+ getErrorMessage() {
275
+ let errMessage = '';
276
+ // look for validation messages for json, pre-defined or just an error pushed from workitem (400)
277
+ if (this.fieldControl.hasError('message')) {
278
+ errMessage = this.angularPConnectData.validateMessage ?? '';
279
+ return errMessage;
280
+ }
281
+ if (this.fieldControl.hasError('required')) {
282
+ errMessage = 'You must enter a value';
283
+ }
284
+ else if (this.fieldControl.errors) {
285
+ errMessage = this.fieldControl.errors.toString();
286
+ }
287
+ return errMessage;
288
+ }
289
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiselectComponent, deps: [{ token: i1.AngularPConnectService }, { token: i2.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
290
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MultiselectComponent, isStandalone: true, selector: "app-multiselect", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div [formGroup]=\"formGroup$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\">\n <mat-label>{{ label$ }}</mat-label>\n <mat-chip-grid #chipGrid>\n <ng-container *ngFor=\"let select of selectedItems\">\n <mat-chip-row (removed)=\"removeChip(select)\">\n {{ select.primary }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n </ng-container>\n </mat-chip-grid>\n <input\n matInput\n [placeholder]=\"placeholder\"\n [formControl]=\"fieldControl\"\n [value]=\"value$\"\n [required]=\"bRequired$\"\n [matAutocomplete]=\"auto\"\n (input)=\"fieldOnChange($event)\"\n [matChipInputFor]=\"chipGrid\"\n #trigger=\"matAutocompleteTrigger\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let item of itemsTree\" [value]=\"item.primary\" (click)=\"optionClicked($event, item, trigger)\">\n <mat-checkbox [checked]=\"item.selected\" (click)=\"optionClicked($event, item, trigger)\">\n <span>{{ item.primary }}</span>\n </mat-checkbox>\n </mat-option>\n </mat-autocomplete>\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n</div>\n", styles: [".psdk-full-width{width:100%}::ng-deep .mat-mdc-form-field-infix{padding-left:10px}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(function () { return CommonModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i3.NgForOf; }), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(function () { return i3.NgIf; }), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return ReactiveFormsModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i4.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: i0.forwardRef(function () { return i4.NgControlStatus; }), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.NgControlStatusGroup; }), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(function () { return i4.RequiredValidator; }), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.FormControlDirective; }), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(function () { return i4.FormGroupDirective; }), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatFormFieldModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i5.MatFormField; }), selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i0.forwardRef(function () { return i5.MatLabel; }), selector: "mat-label" }, { kind: "directive", type: i0.forwardRef(function () { return i5.MatError; }), selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatInputModule; }) }, { kind: "directive", type: i0.forwardRef(function () { return i6.MatInput; }), selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatAutocompleteModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i7.MatAutocomplete; }), selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i0.forwardRef(function () { return i8.MatOption; }), selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i0.forwardRef(function () { return i7.MatAutocompleteTrigger; }), selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatOptionModule; }) }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatCheckboxModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i9.MatCheckbox; }), selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatIconModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i10.MatIcon; }), selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: i0.forwardRef(function () { return MatChipsModule; }) }, { kind: "component", type: i0.forwardRef(function () { return i11.MatChipGrid; }), selector: "mat-chip-grid", inputs: ["tabIndex", "disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i0.forwardRef(function () { return i11.MatChipInput; }), selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i0.forwardRef(function () { return i11.MatChipRemove; }), selector: "[matChipRemove]" }, { kind: "component", type: i0.forwardRef(function () { return i11.MatChipRow; }), selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "editable"], outputs: ["edited"] }] }); }
291
+ }
292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MultiselectComponent, decorators: [{
293
+ type: Component,
294
+ args: [{ selector: 'app-multiselect', standalone: true, imports: [
295
+ CommonModule,
296
+ ReactiveFormsModule,
297
+ MatFormFieldModule,
298
+ MatInputModule,
299
+ MatAutocompleteModule,
300
+ MatOptionModule,
301
+ MatCheckboxModule,
302
+ MatIconModule,
303
+ MatChipsModule,
304
+ forwardRef(() => ComponentMapperComponent)
305
+ ], template: "<div [formGroup]=\"formGroup$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\">\n <mat-label>{{ label$ }}</mat-label>\n <mat-chip-grid #chipGrid>\n <ng-container *ngFor=\"let select of selectedItems\">\n <mat-chip-row (removed)=\"removeChip(select)\">\n {{ select.primary }}\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip-row>\n </ng-container>\n </mat-chip-grid>\n <input\n matInput\n [placeholder]=\"placeholder\"\n [formControl]=\"fieldControl\"\n [value]=\"value$\"\n [required]=\"bRequired$\"\n [matAutocomplete]=\"auto\"\n (input)=\"fieldOnChange($event)\"\n [matChipInputFor]=\"chipGrid\"\n #trigger=\"matAutocompleteTrigger\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\">\n <mat-option *ngFor=\"let item of itemsTree\" [value]=\"item.primary\" (click)=\"optionClicked($event, item, trigger)\">\n <mat-checkbox [checked]=\"item.selected\" (click)=\"optionClicked($event, item, trigger)\">\n <span>{{ item.primary }}</span>\n </mat-checkbox>\n </mat-option>\n </mat-autocomplete>\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n</div>\n", styles: [".psdk-full-width{width:100%}::ng-deep .mat-mdc-form-field-infix{padding-left:10px}\n"] }]
306
+ }], ctorParameters: function () { return [{ type: i1.AngularPConnectService }, { type: i2.Utils }]; }, propDecorators: { pConn$: [{
307
+ type: Input
308
+ }], formGroup$: [{
309
+ type: Input
310
+ }] } });
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2ZpZWxkL211bHRpc2VsZWN0L211bHRpc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fY29tcG9uZW50cy9maWVsZC9tdWx0aXNlbGVjdC9tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsV0FBVyxFQUFhLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUF3RCxNQUFNLGdDQUFnQyxDQUFDO0FBQzdILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQUV4RyxPQUFPLEVBQUUsUUFBUSxFQUFFLHdCQUF3QixFQUFFLHdCQUF3QixFQUFFLGlC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QUFDLEVBQUUsQ0FBQztRQUM3RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBQzdDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckYsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztRQUN0RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUM7UUFDNUQsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNySSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzFGLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7UUFDdEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQztRQUMxRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BHLElBQUksQ0FBQyxhQUFh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T0FBTyxVQUFVLENBQUM7U0FDbkI7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzFDLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQztTQUN2QzthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDbkMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ2xEO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQzsrR0F2VVUsb0JBQW9CO21HQUFwQixvQkFBb0IsbUlDbENqQyxnekNBa0NBLGdMRFpJLFlBQVksb1hBQ1osbUJBQW1CLG8yQ0FDbkIsa0JBQWtCLG1pQkFDbEIsY0FBYyx3YkFDZCxxQkFBcUIsNGxCQUNyQixlQUFlLHFFQUNmLGlCQUFpQiw4UEFDakIsYUFBYSxrUUFDYixjQUFjOzs0RkFJTCxvQkFBb0I7a0JBbEJoQyxTQUFTOytCQUNFLGlCQUFpQixjQUdmLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLHFCQUFxQjt3QkFDckIsZUFBZTt3QkFDZixpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUM7cUJBQzNDO2lJQUdRLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLCBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50LCBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdENoaXBzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBBbmd1bGFyUENvbm5lY3REYXRhLCBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX2JyaWRnZS9hbmd1bGFyLXBjb25uZWN0JztcbmltcG9ydCB7IENvbXBvbmVudE1hcHBlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL19icmlkZ2UvY29tcG9uZW50LW1hcHBlci9jb21wb25lbnQtbWFwcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gJy4uLy4uLy4uL19oZWxwZXJzL3V0aWxzJztcbmltcG9ydCB7IGRvU2VhcmNoLCBnZXREaXNwbGF5RmllbGRzTWV0YURhdGEsIGdldEdyb3VwRGF0YUZvckl0ZW1zVHJlZSwgcHJlUHJvY2Vzc0NvbHVtbnMgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGRlbGV0ZUluc3RydWN0aW9uLCBpbnNlcnRJbnN0cnVjdGlvbiB9IGZyb20gJy4uLy4uLy4uL19oZWxwZXJzL2luc3RydWN0aW9ucy11dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1tdWx0aXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL211bHRpc2VsZWN0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxuICAgIE1hdE9wdGlvbk1vZHVsZSxcbiAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdENoaXBzTW9kdWxlLFxuICAgIGZvcndhcmRSZWYoKCkgPT4gQ29tcG9uZW50TWFwcGVyQ29tcG9uZW50KVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIE11bHRpc2VsZWN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwQ29ubiQ6IHR5cGVvZiBQQ29ubmVjdDtcbiAgQElucHV0KCkgZm9ybUdyb3VwJDogRm9ybUdyb3VwO1xuXG4gIC8vIFVzZWQgd2l0aCBBbmd1bGFyUENvbm5lY3RcbiAgYW5ndWxhclBDb25uZWN0RGF0YTogQW5ndWxhclBDb25uZWN0RGF0YSA9IHt9O1xuXG4gIGxhYmVsJCA9ICcnO1xuICB2YWx1ZSQgPSAnJztcbiAgYlJlcXVpcmVkJCA9IGZhbHNlO1xuICBiRGlzYWJsZWQkID0gZmFsc2U7XG4gIGJWaXNpYmxlJCA9IHRydWU7XG4gIGNvbnRyb2xOYW1lJDogc3RyaW5nO1xuICBiSGFzRm9ybSQgPSB0cnVlO1xuICBsaXN0VHlwZTogc3RyaW5nO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBmaWVsZENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIG51bGwpO1xuICBwYXJhbWV0ZXJzOiB7fTtcbiAgaGlkZUxhYmVsOiBib29sZWFuO1xuICBjb25maWdQcm9wcyQ6IGFueTtcblxuICByZWZlcmVuY2VMaXN0OiBhbnk7XG4gIHNlbGVjdGlvbktleTogc3RyaW5nO1xuICBwcmltYXJ5RmllbGQ6IHN0cmluZztcbiAgaW5pdGlhbENhc2VDbGFzczogYW55O1xuICBzaG93U2Vjb25kYXJ5SW5TZWFyY2hPbmx5ID0gZmFsc2U7XG4gIGlzR3JvdXBEYXRhID0gZmFsc2U7XG4gIHJlZmVyZW5jZVR5cGU7XG4gIHNlY29uZGFyeUZpZWxkcztcbiAgZ3JvdXBEYXRhU291cmNlID0gW107XG4gIG1hdGNoUG9zaXRpb24gPSAnY29udGFpbnMnO1xuICBtYXhSZXN1bHRzRGlzcGxheTtcbiAgZ3JvdXBDb2x1bW5zQ29uZmlnID0gW3t9XTtcbiAgc2VsZWN0aW9uTGlzdDtcbiAgbGlzdEFjdGlvbnM6IGFueTtcbiAgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcbiAgaXRlbXNUcmVlQmFzZURhdGEgPSBbXTtcbiAgZGlzcGxheUZpZWxkTWV0YTogYW55O1xuICBkYXRhQXBpT2JqOiBhbnk7XG4gIGl0ZW1zVHJlZTogYW55W10gPSBbXTtcbiAgdHJpZ2dlcjogYW55O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYW5ndWxhclBDb25uZWN0OiBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXRpbHM6IFV0aWxzXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBGaXJzdCB0aGluZyBpbiBpbml0aWFsaXphdGlvbiBpcyByZWdpc3RlcmluZyBhbmQgc3Vic2NyaWJpbmcgdG8gdGhlIEFuZ3VsYXJQQ29ubmVjdCBzZXJ2aWNlXG4gICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhID0gdGhpcy5hbmd1bGFyUENvbm5lY3QucmVnaXN0ZXJBbmRTdWJzY3JpYmVDb21wb25lbnQodGhpcywgdGhpcy5vblN0YXRlQ2hhbmdlKTtcbiAgICB0aGlzLmNvbnRyb2xOYW1lJCA9IHRoaXMuYW5ndWxhclBDb25uZWN0LmdldENvbXBvbmVudElEKHRoaXMpO1xuXG4gICAgLy8gVGhlbiwgY29udGludWUgb24gd2l0aCBvdGhlciBpbml0aWFsaXphdGlvblxuICAgIHRoaXMuY2hlY2tBbmRVcGRhdGUoKTtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCQpIHtcbiAgICAgIC8vIGFkZCBjb250cm9sIHRvIGZvcm1Hcm91cFxuICAgICAgdGhpcy5mb3JtR3JvdXAkLmFkZENvbnRyb2wodGhpcy5jb250cm9sTmFtZSQsIHRoaXMuZmllbGRDb250cm9sKTtcbiAgICAgIHRoaXMuZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUkKTtcbiAgICAgIHRoaXMuYkhhc0Zvcm0kID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iSGFzRm9ybSQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAkKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cCQucmVtb3ZlQ29udHJvbCh0aGlzLmNvbnRyb2xOYW1lJCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS51bnN1YnNjcmliZUZuKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENhbGxiYWNrIHBhc3NlZCB3aGVuIHN1YnNjcmliaW5nIHRvIHN0b3JlIGNoYW5nZVxuICBvblN0YXRlQ2hhbmdlKCkge1xuICAgIHRoaXMuY2hlY2tBbmRVcGRhdGUoKTtcbiAgfVxuXG4gIGNoZWNrQW5kVXBkYXRlKCkge1xuICAgIC8vIFNob3VsZCBhbHdheXMgY2hlY2sgdGhlIGJyaWRnZSB0byBzZWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGRcbiAgICAvLyB1cGRhdGUgaXRzZWxmIChyZS1yZW5kZXIpXG4gICAgY29uc3QgYlVwZGF0ZVNlbGYgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5zaG91bGRDb21wb25lbnRVcGRhdGUodGhpcyk7XG5cbiAgICAvLyBPTkxZIGNhbGwgdXBkYXRlU2VsZiB3aGVuIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZVxuICAgIGlmIChiVXBkYXRlU2VsZikge1xuICAgICAgdGhpcy51cGRhdGVTZWxmKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gdXBkYXRlU2VsZlxuICB1cGRhdGVTZWxmKCkge1xuICAgIHRoaXMuY29uZmlnUHJvcHMkID0gdGhpcy5wQ29ubiQucmVzb2x2ZUNvbmZpZ1Byb3BzKHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCkpO1xuXG4gICAgbGV0IHsgZGF0YXNvdXJjZSA9IFtdLCBjb2x1bW5zID0gW3t9XSB9ID0gdGhpcy5jb25maWdQcm9wcyQ7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eVZhbHVlc0Zyb21Qcm9wcygpO1xuXG4gICAgaWYgKHRoaXMucmVmZXJlbmNlTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRhc291cmNlID0gdGhpcy5yZWZlcmVuY2VMaXN0O1xuICAgICAgY29sdW1ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIHZhbHVlOiB0aGlzLnByaW1hcnlGaWVsZCxcbiAgICAgICAgICBkaXNwbGF5OiAndHJ1ZScsXG4gICAgICAgICAgdXNlRm9yU2VhcmNoOiB0cnVlLFxuICAgICAgICAgIHByaW1hcnk6ICd0cnVlJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0aW9uS2V5LFxuICAgICAgICAgIHNldFByb3BlcnR5OiB0aGlzLnNlbGVjdGlvbktleSxcbiAgICAgICAgICBrZXk6ICd0cnVlJ1xuICAgICAgICB9XG4gICAgICBdO1xuICAgICAgbGV0IHNlY29uZGFyeUNvbHVtbnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHRoaXMuc2Vjb25kYXJ5RmllbGRzKSB7XG4gICAgICAgIHNlY29uZGFyeUNvbHVtbnMgPSB0aGlzLnNlY29uZGFyeUZpZWxkcy5tYXAoc2Vjb25kYXJ5RmllbGQgPT4gKHtcbiAgICAgICAgICB2YWx1ZTogc2Vjb25kYXJ5RmllbGQsXG4gICAgICAgICAgZGlzcGxheTogJ3RydWUnLFxuICAgICAgICAgIHNlY29uZGFyeTogJ3RydWUnLFxuICAgICAgICAgIHVzZUZvclNlYXJjaDogJ3RydWUnXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlY29uZGFyeUNvbHVtbnMgPSBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0aW9uS2V5LFxuICAgICAgICAgICAgZGlzcGxheTogJ3RydWUnLFxuICAgICAgICAgICAgc2Vjb25kYXJ5OiAndHJ1ZScsXG4gICAgICAgICAgICB1c2VGb3JTZWFyY2g6ICd0cnVlJ1xuICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnJlZmVyZW5jZVR5cGUgPT09ICdDYXNlJykge1xuICAgICAgICBjb2x1bW5zID0gWy4uLmNvbHVtbnMsIC4uLnNlY29uZGFyeUNvbHVtbnNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmFsdWUkID0gdGhpcy52YWx1ZSQgPyB0aGlzLnZhbHVlJCA6ICcnO1xuICAgIGNvbnN0IGNvbnRleHROYW1lID0gdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKTtcblxuICAgIGNvbnN0IGRhdGFDb25maWcgPSB7XG4gICAgICBkYXRhU291cmNlOiBkYXRhc291cmNlLFxuICAgICAgZ3JvdXBEYXRhU291cmNlOiB0aGlzLmdyb3VwRGF0YVNvdXJjZSxcbiAgICAgIGlzR3JvdXBEYXRhOiB0aGlzLmlzR3JvdXBEYXRhLFxuICAgICAgc2hvd1NlY29uZGFyeUluU2VhcmNoT25seTogdGhpcy5zaG93U2Vjb25kYXJ5SW5TZWFyY2hPbmx5LFxuICAgICAgcGFyYW1ldGVyczogdGhpcy5wYXJhbWV0ZXJzLFxuICAgICAgbWF0Y2hQb3NpdGlvbjogdGhpcy5tYXRjaFBvc2l0aW9uLFxuICAgICAgbGlzdFR5cGU6IHRoaXMubGlzdFR5cGUsXG4gICAgICBtYXhSZXN1bHRzRGlzcGxheTogdGhpcy5tYXhSZXN1bHRzRGlzcGxheSB8fCAnMTAwJyxcbiAgICAgIGNvbHVtbnM6IHByZVByb2Nlc3NDb2x1bW5zKGNvbHVtbnMpLFxuICAgICAgZ3JvdXBDb2x1bW5zQ29uZmlnOiBwcmVQcm9jZXNzQ29sdW1ucyh0aGlzLmdyb3VwQ29sdW1uc0NvbmZpZylcbiAgICB9O1xuXG4gICAgY29uc3QgZ3JvdXBzRGlzcGxheUZpZWxkTWV0YSA9IHRoaXMubGlzdFR5cGUgIT09ICdhc3NvY2lhdGVkJyA/IGdldERpc3BsYXlGaWVsZHNNZXRhRGF0YShkYXRhQ29uZmlnLmdyb3VwQ29sdW1uc0NvbmZpZykgOiBudWxsO1xuXG4gICAgdGhpcy5pdGVtc1RyZWVCYXNlRGF0YSA9IGdldEdyb3VwRGF0YUZvckl0ZW1zVHJlZSh0aGlzLmdyb3VwRGF0YVNvdXJjZSwgZ3JvdXBzRGlzcGxheUZpZWxkTWV0YSwgdGhpcy5zaG93U2Vjb25kYXJ5SW5TZWFyY2hPbmx5KSB8fCBbXTtcblxuICAgIHRoaXMuaXRlbXNUcmVlID0gdGhpcy5pc0dyb3VwRGF0YSA/IGdldEdyb3VwRGF0YUZvckl0ZW1zVHJlZSh0aGlzLmdyb3VwRGF0YVNvdXJjZSwgZ3JvdXBzRGlzcGxheUZpZWxkTWV0YSwgdGhpcy5zaG93U2Vjb25kYXJ5SW5TZWFyY2hPbmx5KSA6IFtdO1xuXG4gICAgdGhpcy5kaXNwbGF5RmllbGRNZXRhID0gdGhpcy5saXN0VHlwZSAhPT0gJ2Fzc29jaWF0ZWQnID8gZ2V0RGlzcGxheUZpZWxkc01ldGFEYXRhKGRhdGFDb25maWcuY29sdW1ucykgOiBudWxsO1xuXG4gICAgdGhpcy5saXN0QWN0aW9ucyA9IHRoaXMucENvbm4kLmdldExpc3RBY3Rpb25zKCk7XG4gICAgdGhpcy5wQ29ubiQuc2V0UmVmZXJlbmNlTGlzdCh0aGlzLnNlbGVjdGlvbkxpc3QpO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnUHJvcHMkLnZpc2liaWxpdHkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5iVmlzaWJsZSQgPSB0aGlzLnV0aWxzLmdldEJvb2xlYW5WYWx1ZSh0aGlzLmNvbmZpZ1Byb3BzJC52aXNpYmlsaXR5KTtcbiAgICB9XG5cbiAgICAvLyBkaXNhYmxlZFxuICAgIGlmICh0aGlzLmNvbmZpZ1Byb3BzJC5kaXNhYmxlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYkRpc2FibGVkJCA9IHRoaXMudXRpbHMuZ2V0Qm9vbGVhblZhbHVlKHRoaXMuY29uZmlnUHJvcHMkLmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5iRGlzYWJsZWQkKSB7XG4gICAgICB0aGlzLmZpZWxkQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmllbGRDb250cm9sLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxpc3RUeXBlICE9PSAnYXNzb2NpYXRlZCcpIHtcbiAgICAgIFBDb3JlLmdldERhdGFBcGkoKVxuICAgICAgICA/LmluaXQoZGF0YUNvbmZpZywgY29udGV4dE5hbWUpXG4gICAgICAgIC50aGVuKGFzeW5jIGRhdGFPYmogPT4ge1xuICAgICAgICAgIHRoaXMuZGF0YUFwaU9iaiA9IGRhdGFPYmo7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzR3JvdXBEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmdldENhc2VMaXN0QmFzZWRPblBhcmFtcyh0aGlzLnZhbHVlJCA/PyAnJywgJycsIFsuLi50aGlzLnNlbGVjdGVkSXRlbXNdLCBbLi4udGhpcy5pdGVtc1RyZWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFByb3BlcnR5VmFsdWVzRnJvbVByb3BzKCkge1xuICAgIHRoaXMubGFiZWwkID0gdGhpcy5jb25maWdQcm9wcyQubGFiZWw7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMuY29uZmlnUHJvcHMkLnBsYWNlaG9sZGVyIHx8ICcnO1xuICAgIHRoaXMubGlzdFR5cGUgPSB0aGlzLmNvbmZpZ1Byb3BzJC5saXN0VHlwZSA/IHRoaXMuY29uZmlnUHJvcHMkLmxpc3RUeXBlIDogJyc7XG4gICAgdGhpcy5oaWRlTGFiZWwgPSB0aGlzLmNvbmZpZ1Byb3BzJC5oaWRlTGFiZWw7XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gdGhpcy5jb25maWdQcm9wcyQ/LnBhcmFtZXRlcnMgPyB0aGlzLmNvbmZpZ1Byb3BzJD8ucGFyYW1ldGVycyA6IHt9O1xuICAgIHRoaXMucmVmZXJlbmNlTGlzdCA9IHRoaXMuY29uZmlnUHJvcHMkPy5yZWZlcmVuY2VMaXN0O1xuICAgIHRoaXMuc2VsZWN0aW9uS2V5ID0gdGhpcy5jb25maWdQcm9wcyQ/LnNlbGVjdGlvbktleTtcbiAgICB0aGlzLnByaW1hcnlGaWVsZCA9IHRoaXMuY29uZmlnUHJvcHMkPy5wcmltYXJ5RmllbGQ7XG4gICAgdGhpcy5pbml0aWFsQ2FzZUNsYXNzID0gdGhpcy5jb25maWdQcm9wcyQ/LmluaXRpYWxDYXNlQ2xhc3M7XG4gICAgdGhpcy5zaG93U2Vjb25kYXJ5SW5TZWFyY2hPbmx5ID0gdGhpcy5jb25maWdQcm9wcyQ/LnNob3dTZWNvbmRhcnlJblNlYXJjaE9ubHkgPyB0aGlzLmNvbmZpZ1Byb3BzJD8uc2hvd1NlY29uZGFyeUluU2VhcmNoT25seSA6IGZhbHNlO1xuICAgIHRoaXMuaXNHcm91cERhdGEgPSB0aGlzLmNvbmZpZ1Byb3BzJD8uaXNHcm91cERhdGEgPyB0aGlzLmNvbmZpZ1Byb3BzJC5pc0dyb3VwRGF0YSA6IGZhbHNlO1xuICAgIHRoaXMucmVmZXJlbmNlVHlwZSA9IHRoaXMuY29uZmlnUHJvcHMkPy5yZWZlcmVuY2VUeXBlO1xuICAgIHRoaXMuc2Vjb25kYXJ5RmllbGRzID0gdGhpcy5jb25maWdQcm9wcyQ/LnNlY29uZGFyeUZpZWxkcztcbiAgICB0aGlzLmdyb3VwRGF0YVNvdXJjZSA9IHRoaXMuY29uZmlnUHJvcHMkPy5ncm91cERhdGFTb3VyY2UgPyB0aGlzLmNvbmZpZ1Byb3BzJD8uZ3JvdXBEYXRhU291cmNlIDogW107XG4gICAgdGhpcy5tYXRjaFBvc2l0aW9uID0gdGhpcy5jb25maWdQcm9wcyQ/Lm1hdGNoUG9zaXRpb24gPyB0aGlzLmNvbmZpZ1Byb3BzJD8ubWF0Y2hQb3NpdGlvbiA6ICdjb250YWlucyc7XG4gICAgdGhpcy5tYXhSZXN1bHRzRGlzcGxheSA9IHRoaXMuY29uZmlnUHJvcHMkPy5tYXhSZXN1bHRzRGlzcGxheTtcbiAgICB0aGlzLmdyb3VwQ29sdW1uc0NvbmZpZyA9IHRoaXMuY29uZmlnUHJvcHMkPy5ncm91cENvbHVtbnNDb25maWcgPyB0aGlzLmNvbmZpZ1Byb3BzJD8uZ3JvdXBDb2x1bW5zQ29uZmlnIDogW3t9XTtcbiAgICB0aGlzLnNlbGVjdGlvbkxpc3QgPSB0aGlzLmNvbmZpZ1Byb3BzJD8uc2VsZWN0aW9uTGlzdDtcbiAgICB0aGlzLnZhbHVlJCA9IHRoaXMuY29uZmlnUHJvcHMkPy52YWx1ZTtcbiAgfVxuXG4gIC8vIG1haW4gc2VhcmNoIGZ1bmN0aW9uIHRyaWdnZXJcbiAgZ2V0Q2FzZUxpc3RCYXNlZE9uUGFyYW1zKHNlYXJjaFRleHQsIGdyb3VwLCBzZWxlY3RlZFJvd3MsIGN1cnJlbnRJdGVtc1RyZWUsIGlzVHJpZ2dlcmVkRnJvbVNlYXJjaCA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMucmVmZXJlbmNlTGlzdCAmJiB0aGlzLnJlZmVyZW5jZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5saXN0QWN0aW9ucy5nZXRTZWxlY3RlZFJvd3ModHJ1ZSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICBzZWxlY3RlZFJvd3MgPVxuICAgICAgICAgIHJlc3VsdC5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHJlc3VsdC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlkOiBpdGVtW3RoaXMuc2VsZWN0aW9uS2V5LnN0YXJ0c1dpdGgoJy4nKSA/IHRoaXMuc2VsZWN0aW9uS2V5LnN1YnN0cmluZygxKSA6IHRoaXMuc2VsZWN0aW9uS2V5XSxcbiAgICAgICAgICAgICAgICAgIHByaW1hcnk6IGl0ZW1bdGhpcy5wcmltYXJ5RmllbGQuc3RhcnRzV2l0aCgnLicpID8gdGhpcy5wcmltYXJ5RmllbGQuc3Vic3RyaW5nKDEpIDogdGhpcy5wcmltYXJ5RmllbGRdXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogW107XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHNlbGVjdGVkUm93cztcblxuICAgICAgICBjb25zdCBpbml0YWxJdGVtc1RyZWUgPSBpc1RyaWdnZXJlZEZyb21TZWFyY2ggfHwgIWN1cnJlbnRJdGVtc1RyZWUgPyBbLi4udGhpcy5pdGVtc1RyZWVCYXNlRGF0YV0gOiBbLi4uY3VycmVudEl0ZW1zVHJlZV07XG5cbiAgICAgICAgZG9TZWFyY2goXG4gICAgICAgICAgc2VhcmNoVGV4dCxcbiAgICAgICAgICBncm91cCxcbiAgICAgICAgICB0aGlzLmluaXRpYWxDYXNlQ2xhc3MsXG4gICAgICAgICAgdGhpcy5kaXNwbGF5RmllbGRNZXRhLFxuICAgICAgICAgIHRoaXMuZGF0YUFwaU9iaixcbiAgICAgICAgICBpbml0YWxJdGVtc1RyZWUsXG4gICAgICAgICAgdGhpcy5pc0dyb3VwRGF0YSxcbiAgICAgICAgICB0aGlzLnNob3dTZWNvbmRhcnlJblNlYXJjaE9ubHksXG4gICAgICAgICAgc2VsZWN0ZWRSb3dzIHx8IFtdXG4gICAgICAgICkudGhlbihyZXMgPT4ge1xuICAgICAgICAgIHRoaXMuaXRlbXNUcmVlID0gcmVzIHx8IFtdO1xuICAgICAgICAgIGlmICh0aGlzLnRyaWdnZXIpIHtcbiAgICAgICAgICAgIHRoaXMudHJpZ2dlci5vcGVuUGFuZWwoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZmllbGRPbkNoYW5nZShldmVudDogRXZlbnQpIHtcbiAgICB0aGlzLnZhbHVlJCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgdGhpcy5nZXRDYXNlTGlzdEJhc2VkT25QYXJhbXModGhpcy52YWx1ZSQsICcnLCBbLi4udGhpcy5zZWxlY3RlZEl0ZW1zXSwgWy4uLnRoaXMuaXRlbXNUcmVlXSwgdHJ1ZSk7XG4gIH1cblxuICBvcHRpb25DaGFuZ2VkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KSB7XG4gICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLmFjdGlvbnM/Lm9uQ2hhbmdlKHRoaXMsIGV2ZW50KTtcbiAgfVxuXG4gIG9wdGlvbkNsaWNrZWQgPSAoZXZlbnQ6IEV2ZW50LCBkYXRhOiBhbnksIHRyaWdnZXI/OiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyKTogdm9pZCA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy50b2dnbGVTZWxlY3Rpb24oZGF0YSwgdHJpZ2dlcik7XG4gIH07XG5cbiAgdG9nZ2xlU2VsZWN0aW9uID0gKGRhdGE6IGFueSwgdHJpZ2dlcj86IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIpOiB2b2lkID0+IHtcbiAgICBkYXRhLnNlbGVjdGVkID0gIWRhdGEuc2VsZWN0ZWQ7XG4gICAgdGhpcy50cmlnZ2VyID0gdHJpZ2dlcjtcbiAgICB0aGlzLml0ZW1zVHJlZS5tYXAoKGVsZTogYW55KSA9PiB7XG4gICAgICBpZiAoZWxlLmlkID09PSBkYXRhLmlkKSB7XG4gICAgICAgIGVsZS5zZWxlY3RlZCA9IGRhdGEuc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlO1xuICAgIH0pO1xuXG4gICAgaWYgKGRhdGEuc2VsZWN0ZWQgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgodmFsdWUgPT4gdmFsdWUuaWQgPT09IGRhdGEuaWQpO1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZSQgPSAnJztcbiAgICAvLyBpZiB0aGlzIGlzIGEgcmVmZXJlbmNlTGlzdCBjYXNlXG4gICAgaWYgKHRoaXMucmVmZXJlbmNlTGlzdCkgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zRm9yUmVmZXJlbmNlTGlzdChkYXRhKTtcblxuICAgIHRoaXMuZ2V0Q2FzZUxpc3RCYXNlZE9uUGFyYW1zKHRoaXMudmFsdWUkLCAnJywgWy4uLnRoaXMuc2VsZWN0ZWRJdGVtc10sIFsuLi50aGlzLml0ZW1zVHJlZV0sIHRydWUpO1xuICB9O1xuXG4gIHJlbW92ZUNoaXAgPSAoZGF0YTogYW55KTogdm9pZCA9PiB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGRhdGEgPSB0aGlzLml0ZW1zVHJlZS5maWx0ZXIoKGVsZTogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBlbGUuaWQgPT09IGRhdGEuaWQ7XG4gICAgICB9KTtcbiAgICAgIHRoaXMudG9nZ2xlU2VsZWN0aW9uKGRhdGFbMF0pO1xuICAgIH1cbiAgfTtcblxuICBzZXRTZWxlY3RlZEl0ZW1zRm9yUmVmZXJlbmNlTGlzdChkYXRhOiBhbnkpIHtcbiAgICAvLyBDbGVhciBlcnJvciBtZXNzYWdlcyBpZiBhbnlcbiAgICBjb25zdCBwcm9wTmFtZSA9ICh0aGlzLnBDb25uJC5nZXRTdGF0ZVByb3BzKCkgYXMgYW55KS5zZWxlY3Rpb25MaXN0O1xuICAgIHRoaXMucENvbm4kLmNsZWFyRXJyb3JNZXNzYWdlcyh7XG4gICAgICBwcm9wZXJ0eTogcHJvcE5hbWUsXG4gICAgICBjYXRlZ29yeTogJycsXG4gICAgICBjb250ZXh0OiAnJ1xuICAgIH0pO1xuICAgIGNvbnN0IHsgc2VsZWN0ZWQgfSA9IGRhdGE7XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICBpbnNlcnRJbnN0cnVjdGlvbih0aGlzLnBDb25uJCwgdGhpcy5zZWxlY3Rpb25MaXN0LCB0aGlzLnNlbGVjdGlvbktleSwgdGhpcy5wcmltYXJ5RmllbGQsIGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVJbnN0cnVjdGlvbih0aGlzLnBDb25uJCwgdGhpcy5zZWxlY3Rpb25MaXN0LCB0aGlzLnNlbGVjdGlvbktleSwgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXJyb3JNZXNzYWdlKCkge1xuICAgIGxldCBlcnJNZXNzYWdlID0gJyc7XG5cbiAgICAvLyBsb29rIGZvciB2YWxpZGF0aW9uIG1lc3NhZ2VzIGZvciBqc29uLCBwcmUtZGVmaW5lZCBvciBqdXN0IGFuIGVycm9yIHB1c2hlZCBmcm9tIHdvcmtpdGVtICg0MDApXG4gICAgaWYgKHRoaXMuZmllbGRDb250cm9sLmhhc0Vycm9yKCdtZXNzYWdlJykpIHtcbiAgICAgIGVyck1lc3NhZ2UgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudmFsaWRhdGVNZXNzYWdlID8/ICcnO1xuICAgICAgcmV0dXJuIGVyck1lc3NhZ2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpZWxkQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgZXJyTWVzc2FnZSA9ICdZb3UgbXVzdCBlbnRlciBhIHZhbHVlJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGRDb250cm9sLmVycm9ycykge1xuICAgICAgZXJyTWVzc2FnZSA9IHRoaXMuZmllbGRDb250cm9sLmVycm9ycy50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJNZXNzYWdlO1xuICB9XG59XG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwJFwiPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJwc2RrLWZ1bGwtd2lkdGhcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCI+XG4gICAgPG1hdC1sYWJlbD57eyBsYWJlbCQgfX08L21hdC1sYWJlbD5cbiAgICA8bWF0LWNoaXAtZ3JpZCAjY2hpcEdyaWQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWxlY3Qgb2Ygc2VsZWN0ZWRJdGVtc1wiPlxuICAgICAgICA8bWF0LWNoaXAtcm93IChyZW1vdmVkKT1cInJlbW92ZUNoaXAoc2VsZWN0KVwiPlxuICAgICAgICAgIHt7IHNlbGVjdC5wcmltYXJ5IH19XG4gICAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbWF0LWNoaXAtcm93PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9tYXQtY2hpcC1ncmlkPlxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwiZmllbGRDb250cm9sXCJcbiAgICAgIFt2YWx1ZV09XCJ2YWx1ZSRcIlxuICAgICAgW3JlcXVpcmVkXT1cImJSZXF1aXJlZCRcIlxuICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgIChpbnB1dCk9XCJmaWVsZE9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwR3JpZFwiXG4gICAgICAjdHJpZ2dlcj1cIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXJcIlxuICAgIC8+XG4gICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIj5cbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zVHJlZVwiIFt2YWx1ZV09XCJpdGVtLnByaW1hcnlcIiAoY2xpY2spPVwib3B0aW9uQ2xpY2tlZCgkZXZlbnQsIGl0ZW0sIHRyaWdnZXIpXCI+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggW2NoZWNrZWRdPVwiaXRlbS5zZWxlY3RlZFwiIChjbGljayk9XCJvcHRpb25DbGlja2VkKCRldmVudCwgaXRlbSwgdHJpZ2dlcilcIj5cbiAgICAgICAgICA8c3Bhbj57eyBpdGVtLnByaW1hcnkgfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgPC9tYXQtb3B0aW9uPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICA8bWF0LWVycm9yICpuZ0lmPVwiZmllbGRDb250cm9sLmludmFsaWRcIj57eyBnZXRFcnJvck1lc3NhZ2UoKSB9fTwvbWF0LWVycm9yPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,187 @@
1
+ import cloneDeep from 'lodash/cloneDeep';
2
+ export function setVisibilityForList(c11nEnv, visibility) {
3
+ const { selectionMode, selectionList, renderMode, referenceList } = c11nEnv.getComponentConfig();
4
+ // usecase:multiselect, fieldgroup, editable table
5
+ if ((selectionMode === PCore.getConstants().LIST_SELECTION_MODE.MULTI && selectionList) || (renderMode === 'Editable' && referenceList)) {
6
+ c11nEnv.getListActions().setVisibility(visibility);
7
+ }
8
+ }
9
+ function preProcessColumns(columns) {
10
+ return columns?.map(col => {
11
+ const tempColObj = { ...col };
12
+ tempColObj.value = col.value && col.value.startsWith('.') ? col.value.substring(1) : col.value;
13
+ if (tempColObj.setProperty) {
14
+ tempColObj.setProperty = col.setProperty && col.setProperty.startsWith('.') ? col.setProperty.substring(1) : col.setProperty;
15
+ }
16
+ return tempColObj;
17
+ });
18
+ }
19
+ function getDisplayFieldsMetaData(columns) {
20
+ const displayColumns = columns?.filter(col => col.display === 'true');
21
+ const metaDataObj = {
22
+ key: '',
23
+ primary: '',
24
+ secondary: []
25
+ };
26
+ const keyCol = columns?.filter(col => col.key === 'true');
27
+ metaDataObj.key = keyCol?.length > 0 ? keyCol[0].value : 'auto';
28
+ const itemsRecordsColumn = columns?.filter(col => col.itemsRecordsColumn === 'true');
29
+ if (itemsRecordsColumn?.length > 0) {
30
+ metaDataObj.itemsRecordsColumn = itemsRecordsColumn[0].value;
31
+ }
32
+ const itemsGroupKeyColumn = columns?.filter(col => col.itemsGroupKeyColumn === 'true');
33
+ if (itemsGroupKeyColumn?.length > 0) {
34
+ metaDataObj.itemsGroupKeyColumn = itemsGroupKeyColumn[0].value;
35
+ }
36
+ for (let index = 0; index < displayColumns?.length; index += 1) {
37
+ if (displayColumns[index].secondary === 'true') {
38
+ metaDataObj.secondary.push(displayColumns[index].value);
39
+ }
40
+ else if (displayColumns[index].primary === 'true') {
41
+ metaDataObj.primary = displayColumns[index].value;
42
+ }
43
+ }
44
+ return metaDataObj;
45
+ }
46
+ function createSingleTreeObejct(entry, displayFieldMeta, showSecondaryData, selected) {
47
+ const secondaryArr = [];
48
+ displayFieldMeta.secondary.forEach(col => {
49
+ secondaryArr.push(entry[col]);
50
+ });
51
+ const isSelected = selected.some(item => item.id === entry[displayFieldMeta.key]);
52
+ return {
53
+ id: entry[displayFieldMeta.key],
54
+ primary: entry[displayFieldMeta.primary],
55
+ secondary: showSecondaryData ? secondaryArr : [],
56
+ selected: isSelected
57
+ };
58
+ }
59
+ function putItemsDataInItemsTree(listObjData, displayFieldMeta, itemsTree, showSecondaryInSearchOnly, selected) {
60
+ let newTreeItems = itemsTree.slice();
61
+ const showSecondaryData = !showSecondaryInSearchOnly;
62
+ for (const obj of listObjData) {
63
+ const items = obj[displayFieldMeta.itemsRecordsColumn].map(entry => createSingleTreeObejct(entry, displayFieldMeta, showSecondaryData, selected));
64
+ newTreeItems = newTreeItems.map(caseObject => {
65
+ if (caseObject.id === obj[displayFieldMeta.itemsGroupKeyColumn]) {
66
+ caseObject.items = [...items];
67
+ }
68
+ return caseObject;
69
+ });
70
+ }
71
+ return newTreeItems;
72
+ }
73
+ function prepareSearchResults(listObjData, displayFieldMeta) {
74
+ const searchResults = [];
75
+ for (const obj of listObjData) {
76
+ searchResults.push(...obj[displayFieldMeta.itemsRecordsColumn]);
77
+ }
78
+ return searchResults;
79
+ }
80
+ async function doSearch(searchText, clickedGroup, initialCaseClass, displayFieldMeta, dataApiObj, // deep clone of the dataApiObj
81
+ itemsTree, isGroupData, showSecondaryInSearchOnly, selected) {
82
+ let searchTextForUngroupedData = '';
83
+ if (dataApiObj) {
84
+ // creating dataApiObject in grouped data cases
85
+ if (isGroupData) {
86
+ dataApiObj = cloneDeep(dataApiObj);
87
+ dataApiObj.fetchedNQData = false;
88
+ dataApiObj.cache = {};
89
+ // if we have no search text and no group selected, return the original tree
90
+ if (searchText === '' && clickedGroup === '') {
91
+ return itemsTree;
92
+ }
93
+ // setting the inital search text & search classes in ApiObject
94
+ dataApiObj.parameters[Object.keys(dataApiObj.parameters)[1]] = searchText;
95
+ dataApiObj.parameters[Object.keys(dataApiObj.parameters)[0]] = initialCaseClass;
96
+ // if we have a selected group
97
+ if (clickedGroup) {
98
+ // check if the data for this group is already present and no search text
99
+ if (searchText === '') {
100
+ const containsData = itemsTree.find(item => item.id === clickedGroup);
101
+ // do not make API call when items of respective group are already fetched
102
+ if (containsData?.items?.length)
103
+ return itemsTree;
104
+ }
105
+ dataApiObj.parameters[Object.keys(dataApiObj.parameters)[0]] = JSON.stringify([clickedGroup]);
106
+ }
107
+ }
108
+ else {
109
+ searchTextForUngroupedData = searchText;
110
+ }
111
+ // search API call
112
+ const response = await dataApiObj.fetchData(searchTextForUngroupedData).catch(() => {
113
+ return itemsTree;
114
+ });
115
+ let listObjData = response.data;
116
+ let newItemsTree = [];
117
+ if (isGroupData) {
118
+ if (searchText) {
119
+ listObjData = prepareSearchResults(listObjData, displayFieldMeta);
120
+ }
121
+ else {
122
+ newItemsTree = putItemsDataInItemsTree(listObjData, displayFieldMeta, itemsTree, showSecondaryInSearchOnly, selected);
123
+ return newItemsTree;
124
+ }
125
+ }
126
+ const showSecondaryData = showSecondaryInSearchOnly ? !!searchText : true;
127
+ if (listObjData !== undefined && listObjData.length > 0) {
128
+ newItemsTree = listObjData.map(entry => createSingleTreeObejct(entry, displayFieldMeta, showSecondaryData, selected));
129
+ }
130
+ return newItemsTree;
131
+ }
132
+ return itemsTree;
133
+ }
134
+ function setValuesToPropertyList(searchText, assocProp, items, columns, actions, updatePropertyInRedux = true) {
135
+ const setPropertyList = columns
136
+ ?.filter(col => col.setProperty)
137
+ .map(col => {
138
+ return {
139
+ source: col.value,
140
+ target: col.setProperty,
141
+ key: col.key,
142
+ primary: col.primary
143
+ };
144
+ });
145
+ const valueToSet = [];
146
+ if (setPropertyList.length > 0) {
147
+ setPropertyList.forEach(prop => {
148
+ items.forEach(item => {
149
+ if (prop.key === 'true' && item) {
150
+ valueToSet.push(item.id);
151
+ }
152
+ else if (prop.primary === 'true' || !item) {
153
+ valueToSet.push(searchText);
154
+ }
155
+ });
156
+ if (updatePropertyInRedux) {
157
+ // BUG-666851 setting options so that the store values are replaced and not merged
158
+ const options = {
159
+ isArrayDeepMerge: false
160
+ };
161
+ if (prop.target === 'Associated property') {
162
+ actions.updateFieldValue(assocProp, valueToSet, options);
163
+ }
164
+ else {
165
+ actions.updateFieldValue(`.${prop.target}`, valueToSet, options);
166
+ }
167
+ }
168
+ });
169
+ }
170
+ return valueToSet;
171
+ }
172
+ function getGroupDataForItemsTree(groupDataSource, groupsDisplayFieldMeta, showSecondaryInSearchOnly) {
173
+ return groupDataSource?.map(group => {
174
+ const secondaryArr = [];
175
+ groupsDisplayFieldMeta.secondary.forEach(col => {
176
+ secondaryArr.push(group[col]);
177
+ });
178
+ return {
179
+ id: group[groupsDisplayFieldMeta.key],
180
+ primary: group[groupsDisplayFieldMeta.primary],
181
+ secondary: showSecondaryInSearchOnly ? [] : secondaryArr,
182
+ items: []
183
+ };
184
+ });
185
+ }
186
+ export { preProcessColumns, getDisplayFieldsMetaData, doSearch, setValuesToPropertyList, getGroupDataForItemsTree };
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvZmllbGQvbXVsdGlzZWxlY3QvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTLE1BQU0sa0JBQWtCLENBQUM7QUFFekMsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxVQUFVO0lBQ3RELE1BQU0sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNqRyxrREFBa0Q7SUFDbEQsSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsSUFBSSxhQUFhLENBQUMsRUFBRTtRQUN2SSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3BEO0FBQ0gsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsT0FBTztJQUNoQyxPQUFPLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDeEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQzlCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDL0YsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQzFCLFVBQVUsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7U0FDOUg7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLE9BQU87SUFDdkMsTUFBTSxjQUFjLEdBQUcsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDdEUsTUFBTSxXQUFXLEdBQVE7UUFDdkIsR0FBRyxFQUFFLEVBQUU7UUFDUCxPQUFPLEVBQUUsRUFBRTtRQUNYLFNBQVMsRUFBRSxFQUFFO0tBQ2QsQ0FBQztJQUNGLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQzFELFdBQVcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNoRSxNQUFNLGtCQUFrQixHQUFHLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDckYsSUFBSSxrQkFBa0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ2xDLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FDOUQ7SUFDRCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDdkYsSUFBSSxtQkFBbUIsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ25DLFdBQVcsQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FDaEU7SUFDRCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsY0FBYyxFQUFFLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFO1FBQzlELElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsS0FBSyxNQUFNLEVBQUU7WUFDOUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3pEO2FBQU0sSUFBSSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtZQUNuRCxXQUFXLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDbkQ7S0FDRjtJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxRQUFRO0lBQ2xGLE1BQU0sWUFBWSxHQUFRLEVBQUUsQ0FBQztJQUM3QixnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3ZDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVsRixPQUFPO1FBQ0wsRUFBRSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7UUFDL0IsT0FBTyxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUM7UUFDeEMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDaEQsUUFBUSxFQUFFLFVBQVU7S0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUseUJBQXlCLEVBQUUsUUFBUTtJQUM1RyxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDckMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLHlCQUF5QixDQUFDO0lBQ3JELEtBQUssTUFBTSxHQUFHLElBQUksV0FBVyxFQUFFO1FBQzdCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLHNCQUFzQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBRWxKLFlBQVksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzNDLElBQUksVUFBVSxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsRUFBRTtnQkFDL0QsVUFBVSxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7YUFDL0I7WUFDRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztLQUNKO0lBQ0QsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsV0FBVyxFQUFFLGdCQUFnQjtJQUN6RCxNQUFNLGFBQWEsR0FBUSxFQUFFLENBQUM7SUFDOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxXQUFXLEVBQUU7UUFDN0IsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7S0FDakU7SUFDRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDO0FBRUQsS0FBSyxVQUFVLFFBQVEsQ0FDckIsVUFBVSxFQUNWLFlBQVksRUFDWixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFBRSwrQkFBK0I7QUFDM0MsU0FBUyxFQUNULFdBQVcsRUFDWCx5QkFBeUIsRUFDekIsUUFBUTtJQUVSLElBQUksMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0lBQ3BDLElBQUksVUFBVSxFQUFFO1FBQ2QsK0NBQStDO1FBQy9DLElBQUksV0FBVyxFQUFFO1lBQ2YsVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuQyxVQUFVLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUNqQyxVQUFVLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUV0Qiw0RUFBNEU7WUFDNUUsSUFBSSxVQUFVLEtBQUssRUFBRSxJQUFJLFlBQVksS0FBSyxFQUFFLEVBQUU7Z0JBQzVDLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO1lBRUQsK0RBQStEO1lBQy9ELFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7WUFDMUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO1lBRWhGLDhCQUE4QjtZQUM5QixJQUFJLFlBQVksRUFBRTtnQkFDaEIseUVBQXlFO2dCQUN6RSxJQUFJLFVBQVUsS0FBSyxFQUFFLEVBQUU7b0JBQ3JCLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FBQyxDQUFDO29CQUN0RSwwRUFBMEU7b0JBQzFFLElBQUksWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNO3dCQUFFLE9BQU8sU0FBUyxDQUFDO2lCQUNuRDtnQkFFRCxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7YUFDL0Y7U0FDRjthQUFNO1lBQ0wsMEJBQTBCLEdBQUcsVUFBVSxDQUFDO1NBQ3pDO1FBRUQsa0JBQWtCO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDakYsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2hDLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLFdBQVcsRUFBRTtZQUNmLElBQUksVUFBVSxFQUFFO2dCQUNkLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzthQUNuRTtpQkFBTTtnQkFDTCxZQUFZLEdBQUcsdUJBQXVCLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSx5QkFBeUIsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDdEgsT0FBTyxZQUFZLENBQUM7YUFDckI7U0FDRjtRQUNELE1BQU0saUJBQWlCLEdBQUcseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMxRSxJQUFJLFdBQVcsS0FBSyxTQUFTLElBQUksV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsWUFBWSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUN2SDtRQUNELE9BQU8sWUFBWSxDQUFDO0tBQ3JCO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsR0FBRyxJQUFJO0lBQzNHLE1BQU0sZUFBZSxHQUFHLE9BQU87UUFDN0IsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1NBQy9CLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNULE9BQU87WUFDTCxNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDakIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXO1lBQ3ZCLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztZQUNaLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztTQUNyQixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxNQUFNLFVBQVUsR0FBUSxFQUFFLENBQUM7SUFDM0IsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUM5QixlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzdCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25CLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxNQUFNLElBQUksSUFBSSxFQUFFO29CQUMvQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDMUI7cUJBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDM0MsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDN0I7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUkscUJBQXFCLEVBQUU7Z0JBQ3pCLGtGQUFrRjtnQkFDbEYsTUFBTSxPQUFPLEdBQUc7b0JBQ2QsZ0JBQWdCLEVBQUUsS0FBSztpQkFDeEIsQ0FBQztnQkFDRixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUsscUJBQXFCLEVBQUU7b0JBQ3pDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUMxRDtxQkFBTTtvQkFDTCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUNsRTthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxTQUFTLHdCQUF3QixDQUFDLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSx5QkFBeUI7SUFDbEcsT0FBTyxlQUFlLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ2xDLE1BQU0sWUFBWSxHQUFRLEVBQUUsQ0FBQztRQUM3QixzQkFBc0IsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzdDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPO1lBQ0wsRUFBRSxFQUFFLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUM7WUFDckMsT0FBTyxFQUFFLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUM7WUFDOUMsU0FBUyxFQUFFLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVk7WUFDeEQsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBRSx1QkFBdUIsRUFBRSx3QkFBd0IsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldFZpc2liaWxpdHlGb3JMaXN0KGMxMW5FbnYsIHZpc2liaWxpdHkpIHtcbiAgY29uc3QgeyBzZWxlY3Rpb25Nb2RlLCBzZWxlY3Rpb25MaXN0LCByZW5kZXJNb2RlLCByZWZlcmVuY2VMaXN0IH0gPSBjMTFuRW52LmdldENvbXBvbmVudENvbmZpZygpO1xuICAvLyB1c2VjYXNlOm11bHRpc2VsZWN0LCBmaWVsZGdyb3VwLCBlZGl0YWJsZSB0YWJsZVxuICBpZiAoKHNlbGVjdGlvbk1vZGUgPT09IFBDb3JlLmdldENvbnN0YW50cygpLkxJU1RfU0VMRUNUSU9OX01PREUuTVVMVEkgJiYgc2VsZWN0aW9uTGlzdCkgfHwgKHJlbmRlck1vZGUgPT09ICdFZGl0YWJsZScgJiYgcmVmZXJlbmNlTGlzdCkpIHtcbiAgICBjMTFuRW52LmdldExpc3RBY3Rpb25zKCkuc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVQcm9jZXNzQ29sdW1ucyhjb2x1bW5zKSB7XG4gIHJldHVybiBjb2x1bW5zPy5tYXAoY29sID0+IHtcbiAgICBjb25zdCB0ZW1wQ29sT2JqID0geyAuLi5jb2wgfTtcbiAgICB0ZW1wQ29sT2JqLnZhbHVlID0gY29sLnZhbHVlICYmIGNvbC52YWx1ZS5zdGFydHNXaXRoKCcuJykgPyBjb2wudmFsdWUuc3Vic3RyaW5nKDEpIDogY29sLnZhbHVlO1xuICAgIGlmICh0ZW1wQ29sT2JqLnNldFByb3BlcnR5KSB7XG4gICAgICB0ZW1wQ29sT2JqLnNldFByb3BlcnR5ID0gY29sLnNldFByb3BlcnR5ICYmIGNvbC5zZXRQcm9wZXJ0eS5zdGFydHNXaXRoKCcuJykgPyBjb2wuc2V0UHJvcGVydHkuc3Vic3RyaW5nKDEpIDogY29sLnNldFByb3BlcnR5O1xuICAgIH1cbiAgICByZXR1cm4gdGVtcENvbE9iajtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldERpc3BsYXlGaWVsZHNNZXRhRGF0YShjb2x1bW5zKSB7XG4gIGNvbnN0IGRpc3BsYXlDb2x1bW5zID0gY29sdW1ucz8uZmlsdGVyKGNvbCA9PiBjb2wuZGlzcGxheSA9PT0gJ3RydWUnKTtcbiAgY29uc3QgbWV0YURhdGFPYmo6IGFueSA9IHtcbiAgICBrZXk6ICcnLFxuICAgIHByaW1hcnk6ICcnLFxuICAgIHNlY29uZGFyeTogW11cbiAgfTtcbiAgY29uc3Qga2V5Q29sID0gY29sdW1ucz8uZmlsdGVyKGNvbCA9PiBjb2wua2V5ID09PSAndHJ1ZScpO1xuICBtZXRhRGF0YU9iai5rZXkgPSBrZXlDb2w/Lmxlbmd0aCA+IDAgPyBrZXlDb2xbMF0udmFsdWUgOiAnYXV0byc7XG4gIGNvbnN0IGl0ZW1zUmVjb3Jkc0NvbHVtbiA9IGNvbHVtbnM/LmZpbHRlcihjb2wgPT4gY29sLml0ZW1zUmVjb3Jkc0NvbHVtbiA9PT0gJ3RydWUnKTtcbiAgaWYgKGl0ZW1zUmVjb3Jkc0NvbHVtbj8ubGVuZ3RoID4gMCkge1xuICAgIG1ldGFEYXRhT2JqLml0ZW1zUmVjb3Jkc0NvbHVtbiA9IGl0ZW1zUmVjb3Jkc0NvbHVtblswXS52YWx1ZTtcbiAgfVxuICBjb25zdCBpdGVtc0dyb3VwS2V5Q29sdW1uID0gY29sdW1ucz8uZmlsdGVyKGNvbCA9PiBjb2wuaXRlbXNHcm91cEtleUNvbHVtbiA9PT0gJ3RydWUnKTtcbiAgaWYgKGl0ZW1zR3JvdXBLZXlDb2x1bW4/Lmxlbmd0aCA+IDApIHtcbiAgICBtZXRhRGF0YU9iai5pdGVtc0dyb3VwS2V5Q29sdW1uID0gaXRlbXNHcm91cEtleUNvbHVtblswXS52YWx1ZTtcbiAgfVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGlzcGxheUNvbHVtbnM/Lmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGlmIChkaXNwbGF5Q29sdW1uc1tpbmRleF0uc2Vjb25kYXJ5ID09PSAndHJ1ZScpIHtcbiAgICAgIG1ldGFEYXRhT2JqLnNlY29uZGFyeS5wdXNoKGRpc3BsYXlDb2x1bW5zW2luZGV4XS52YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChkaXNwbGF5Q29sdW1uc1tpbmRleF0ucHJpbWFyeSA9PT0gJ3RydWUnKSB7XG4gICAgICBtZXRhRGF0YU9iai5wcmltYXJ5ID0gZGlzcGxheUNvbHVtbnNbaW5kZXhdLnZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWV0YURhdGFPYmo7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNpbmdsZVRyZWVPYmVqY3QoZW50cnksIGRpc3BsYXlGaWVsZE1ldGEsIHNob3dTZWNvbmRhcnlEYXRhLCBzZWxlY3RlZCkge1xuICBjb25zdCBzZWNvbmRhcnlBcnI6IGFueSA9IFtdO1xuICBkaXNwbGF5RmllbGRNZXRhLnNlY29uZGFyeS5mb3JFYWNoKGNvbCA9PiB7XG4gICAgc2Vjb25kYXJ5QXJyLnB1c2goZW50cnlbY29sXSk7XG4gIH0pO1xuICBjb25zdCBpc1NlbGVjdGVkID0gc2VsZWN0ZWQuc29tZShpdGVtID0+IGl0ZW0uaWQgPT09IGVudHJ5W2Rpc3BsYXlGaWVsZE1ldGEua2V5XSk7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogZW50cnlbZGlzcGxheUZpZWxkTWV0YS5rZXldLFxuICAgIHByaW1hcnk6IGVudHJ5W2Rpc3BsYXlGaWVsZE1ldGEucHJpbWFyeV0sXG4gICAgc2Vjb25kYXJ5OiBzaG93U2Vjb25kYXJ5RGF0YSA/IHNlY29uZGFyeUFyciA6IFtdLFxuICAgIHNlbGVjdGVkOiBpc1NlbGVjdGVkXG4gIH07XG59XG5cbmZ1bmN0aW9uIHB1dEl0ZW1zRGF0YUluSXRlbXNUcmVlKGxpc3RPYmpEYXRhLCBkaXNwbGF5RmllbGRNZXRhLCBpdGVtc1RyZWUsIHNob3dTZWNvbmRhcnlJblNlYXJjaE9ubHksIHNlbGVjdGVkKSB7XG4gIGxldCBuZXdUcmVlSXRlbXMgPSBpdGVtc1RyZWUuc2xpY2UoKTtcbiAgY29uc3Qgc2hvd1NlY29uZGFyeURhdGEgPSAhc2hvd1NlY29uZGFyeUluU2VhcmNoT25seTtcbiAgZm9yIChjb25zdCBvYmogb2YgbGlzdE9iakRhdGEpIHtcbiAgICBjb25zdCBpdGVtcyA9IG9ialtkaXNwbGF5RmllbGRNZXRhLml0ZW1zUmVjb3Jkc0NvbHVtbl0ubWFwKGVudHJ5ID0+IGNyZWF0ZVNpbmdsZVRyZWVPYmVqY3QoZW50cnksIGRpc3BsYXlGaWVsZE1ldGEsIHNob3dTZWNvbmRhcnlEYXRhLCBzZWxlY3RlZCkpO1xuXG4gICAgbmV3VHJlZUl0ZW1zID0gbmV3VHJlZUl0ZW1zLm1hcChjYXNlT2JqZWN0ID0+IHtcbiAgICAgIGlmIChjYXNlT2JqZWN0LmlkID09PSBvYmpbZGlzcGxheUZpZWxkTWV0YS5pdGVtc0dyb3VwS2V5Q29sdW1uXSkge1xuICAgICAgICBjYXNlT2JqZWN0Lml0ZW1zID0gWy4uLml0ZW1zXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXNlT2JqZWN0O1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXdUcmVlSXRlbXM7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVTZWFyY2hSZXN1bHRzKGxpc3RPYmpEYXRhLCBkaXNwbGF5RmllbGRNZXRhKSB7XG4gIGNvbnN0IHNlYXJjaFJlc3VsdHM6IGFueSA9IFtdO1xuICBmb3IgKGNvbnN0IG9iaiBvZiBsaXN0T2JqRGF0YSkge1xuICAgIHNlYXJjaFJlc3VsdHMucHVzaCguLi5vYmpbZGlzcGxheUZpZWxkTWV0YS5pdGVtc1JlY29yZHNDb2x1bW5dKTtcbiAgfVxuICByZXR1cm4gc2VhcmNoUmVzdWx0cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZG9TZWFyY2goXG4gIHNlYXJjaFRleHQsXG4gIGNsaWNrZWRHcm91cCxcbiAgaW5pdGlhbENhc2VDbGFzcyxcbiAgZGlzcGxheUZpZWxkTWV0YSxcbiAgZGF0YUFwaU9iaiwgLy8gZGVlcCBjbG9uZSBvZiB0aGUgZGF0YUFwaU9ialxuICBpdGVtc1RyZWUsXG4gIGlzR3JvdXBEYXRhLFxuICBzaG93U2Vjb25kYXJ5SW5TZWFyY2hPbmx5LFxuICBzZWxlY3RlZFxuKSB7XG4gIGxldCBzZWFyY2hUZXh0Rm9yVW5ncm91cGVkRGF0YSA9ICcnO1xuICBpZiAoZGF0YUFwaU9iaikge1xuICAgIC8vIGNyZWF0aW5nIGRhdGFBcGlPYmplY3QgaW4gZ3JvdXBlZCBkYXRhIGNhc2VzXG4gICAgaWYgKGlzR3JvdXBEYXRhKSB7XG4gICAgICBkYXRhQXBpT2JqID0gY2xvbmVEZWVwKGRhdGFBcGlPYmopO1xuICAgICAgZGF0YUFwaU9iai5mZXRjaGVkTlFEYXRhID0gZmFsc2U7XG4gICAgICBkYXRhQXBpT2JqLmNhY2hlID0ge307XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgbm8gc2VhcmNoIHRleHQgYW5kIG5vIGdyb3VwIHNlbGVjdGVkLCByZXR1cm4gdGhlIG9yaWdpbmFsIHRyZWVcbiAgICAgIGlmIChzZWFyY2hUZXh0ID09PSAnJyAmJiBjbGlja2VkR3JvdXAgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiBpdGVtc1RyZWU7XG4gICAgICB9XG5cbiAgICAgIC8vIHNldHRpbmcgdGhlIGluaXRhbCBzZWFyY2ggdGV4dCAmIHNlYXJjaCBjbGFzc2VzIGluIEFwaU9iamVjdFxuICAgICAgZGF0YUFwaU9iai5wYXJhbWV0ZXJzW09iamVjdC5rZXlzKGRhdGFBcGlPYmoucGFyYW1ldGVycylbMV1dID0gc2VhcmNoVGV4dDtcbiAgICAgIGRhdGFBcGlPYmoucGFyYW1ldGVyc1tPYmplY3Qua2V5cyhkYXRhQXBpT2JqLnBhcmFtZXRlcnMpWzBdXSA9IGluaXRpYWxDYXNlQ2xhc3M7XG5cbiAgICAgIC8vIGlmIHdlIGhhdmUgYSBzZWxlY3RlZCBncm91cFxuICAgICAgaWYgKGNsaWNrZWRHcm91cCkge1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgZGF0YSBmb3IgdGhpcyBncm91cCBpcyBhbHJlYWR5IHByZXNlbnQgYW5kIG5vIHNlYXJjaCB0ZXh0XG4gICAgICAgIGlmIChzZWFyY2hUZXh0ID09PSAnJykge1xuICAgICAgICAgIGNvbnN0IGNvbnRhaW5zRGF0YSA9IGl0ZW1zVHJlZS5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gY2xpY2tlZEdyb3VwKTtcbiAgICAgICAgICAvLyBkbyBub3QgbWFrZSBBUEkgY2FsbCB3aGVuIGl0ZW1zIG9mIHJlc3BlY3RpdmUgZ3JvdXAgYXJlIGFscmVhZHkgZmV0Y2hlZFxuICAgICAgICAgIGlmIChjb250YWluc0RhdGE/Lml0ZW1zPy5sZW5ndGgpIHJldHVybiBpdGVtc1RyZWU7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhQXBpT2JqLnBhcmFtZXRlcnNbT2JqZWN0LmtleXMoZGF0YUFwaU9iai5wYXJhbWV0ZXJzKVswXV0gPSBKU09OLnN0cmluZ2lmeShbY2xpY2tlZEdyb3VwXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlYXJjaFRleHRGb3JVbmdyb3VwZWREYXRhID0gc2VhcmNoVGV4dDtcbiAgICB9XG5cbiAgICAvLyBzZWFyY2ggQVBJIGNhbGxcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGRhdGFBcGlPYmouZmV0Y2hEYXRhKHNlYXJjaFRleHRGb3JVbmdyb3VwZWREYXRhKS5jYXRjaCgoKSA9PiB7XG4gICAgICByZXR1cm4gaXRlbXNUcmVlO1xuICAgIH0pO1xuXG4gICAgbGV0IGxpc3RPYmpEYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICBsZXQgbmV3SXRlbXNUcmVlID0gW107XG4gICAgaWYgKGlzR3JvdXBEYXRhKSB7XG4gICAgICBpZiAoc2VhcmNoVGV4dCkge1xuICAgICAgICBsaXN0T2JqRGF0YSA9IHByZXBhcmVTZWFyY2hSZXN1bHRzKGxpc3RPYmpEYXRhLCBkaXNwbGF5RmllbGRNZXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld0l0ZW1zVHJlZSA9IHB1dEl0ZW1zRGF0YUluSXRlbXNUcmVlKGxpc3RPYmpEYXRhLCBkaXNwbGF5RmllbGRNZXRhLCBpdGVtc1RyZWUsIHNob3dTZWNvbmRhcnlJblNlYXJjaE9ubHksIHNlbGVjdGVkKTtcbiAgICAgICAgcmV0dXJuIG5ld0l0ZW1zVHJlZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2hvd1NlY29uZGFyeURhdGEgPSBzaG93U2Vjb25kYXJ5SW5TZWFyY2hPbmx5ID8gISFzZWFyY2hUZXh0IDogdHJ1ZTtcbiAgICBpZiAobGlzdE9iakRhdGEgIT09IHVuZGVmaW5lZCAmJiBsaXN0T2JqRGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICBuZXdJdGVtc1RyZWUgPSBsaXN0T2JqRGF0YS5tYXAoZW50cnkgPT4gY3JlYXRlU2luZ2xlVHJlZU9iZWpjdChlbnRyeSwgZGlzcGxheUZpZWxkTWV0YSwgc2hvd1NlY29uZGFyeURhdGEsIHNlbGVjdGVkKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdJdGVtc1RyZWU7XG4gIH1cblxuICByZXR1cm4gaXRlbXNUcmVlO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZXNUb1Byb3BlcnR5TGlzdChzZWFyY2hUZXh0LCBhc3NvY1Byb3AsIGl0ZW1zLCBjb2x1bW5zLCBhY3Rpb25zLCB1cGRhdGVQcm9wZXJ0eUluUmVkdXggPSB0cnVlKSB7XG4gIGNvbnN0IHNldFByb3BlcnR5TGlzdCA9IGNvbHVtbnNcbiAgICA/LmZpbHRlcihjb2wgPT4gY29sLnNldFByb3BlcnR5KVxuICAgIC5tYXAoY29sID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogY29sLnZhbHVlLFxuICAgICAgICB0YXJnZXQ6IGNvbC5zZXRQcm9wZXJ0eSxcbiAgICAgICAga2V5OiBjb2wua2V5LFxuICAgICAgICBwcmltYXJ5OiBjb2wucHJpbWFyeVxuICAgICAgfTtcbiAgICB9KTtcbiAgY29uc3QgdmFsdWVUb1NldDogYW55ID0gW107XG4gIGlmIChzZXRQcm9wZXJ0eUxpc3QubGVuZ3RoID4gMCkge1xuICAgIHNldFByb3BlcnR5TGlzdC5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKHByb3Aua2V5ID09PSAndHJ1ZScgJiYgaXRlbSkge1xuICAgICAgICAgIHZhbHVlVG9TZXQucHVzaChpdGVtLmlkKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByaW1hcnkgPT09ICd0cnVlJyB8fCAhaXRlbSkge1xuICAgICAgICAgIHZhbHVlVG9TZXQucHVzaChzZWFyY2hUZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh1cGRhdGVQcm9wZXJ0eUluUmVkdXgpIHtcbiAgICAgICAgLy8gQlVHLTY2Njg1MSBzZXR0aW5nIG9wdGlvbnMgc28gdGhhdCB0aGUgc3RvcmUgdmFsdWVzIGFyZSByZXBsYWNlZCBhbmQgbm90IG1lcmdlZFxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgIGlzQXJyYXlEZWVwTWVyZ2U6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmIChwcm9wLnRhcmdldCA9PT0gJ0Fzc29jaWF0ZWQgcHJvcGVydHknKSB7XG4gICAgICAgICAgYWN0aW9ucy51cGRhdGVGaWVsZFZhbHVlKGFzc29jUHJvcCwgdmFsdWVUb1NldCwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWN0aW9ucy51cGRhdGVGaWVsZFZhbHVlKGAuJHtwcm9wLnRhcmdldH1gLCB2YWx1ZVRvU2V0LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB2YWx1ZVRvU2V0O1xufVxuXG5mdW5jdGlvbiBnZXRHcm91cERhdGFGb3JJdGVtc1RyZWUoZ3JvdXBEYXRhU291cmNlLCBncm91cHNEaXNwbGF5RmllbGRNZXRhLCBzaG93U2Vjb25kYXJ5SW5TZWFyY2hPbmx5KSB7XG4gIHJldHVybiBncm91cERhdGFTb3VyY2U/Lm1hcChncm91cCA9PiB7XG4gICAgY29uc3Qgc2Vjb25kYXJ5QXJyOiBhbnkgPSBbXTtcbiAgICBncm91cHNEaXNwbGF5RmllbGRNZXRhLnNlY29uZGFyeS5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICBzZWNvbmRhcnlBcnIucHVzaChncm91cFtjb2xdKTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGdyb3VwW2dyb3Vwc0Rpc3BsYXlGaWVsZE1ldGEua2V5XSxcbiAgICAgIHByaW1hcnk6IGdyb3VwW2dyb3Vwc0Rpc3BsYXlGaWVsZE1ldGEucHJpbWFyeV0sXG4gICAgICBzZWNvbmRhcnk6IHNob3dTZWNvbmRhcnlJblNlYXJjaE9ubHkgPyBbXSA6IHNlY29uZGFyeUFycixcbiAgICAgIGl0ZW1zOiBbXVxuICAgIH07XG4gIH0pO1xufVxuXG5leHBvcnQgeyBwcmVQcm9jZXNzQ29sdW1ucywgZ2V0RGlzcGxheUZpZWxkc01ldGFEYXRhLCBkb1NlYXJjaCwgc2V0VmFsdWVzVG9Qcm9wZXJ0eUxpc3QsIGdldEdyb3VwRGF0YUZvckl0ZW1zVHJlZSB9O1xuIl19