valtech-components 2.0.396 → 2.0.398

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.
@@ -1,7 +1,6 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { Component, EventEmitter, Input, Output } from '@angular/core';
3
3
  import { ReactiveFormsModule } from '@angular/forms';
4
- import { distinctUntilChanged } from 'rxjs/operators';
5
4
  import { isAtEnd } from '../../../shared/utils/dom';
6
5
  import { DisplayComponent } from '../../atoms/display/display.component';
7
6
  import { DividerComponent } from '../../atoms/divider/divider.component';
@@ -22,7 +21,6 @@ import { RadioInputComponent } from '../../molecules/radio-input/radio-input.com
22
21
  import { SearchSelectorComponent } from '../../molecules/select-input/select-input.component';
23
22
  import { SelectSearchComponent } from '../../molecules/select-search/select-search.component';
24
23
  import { MultiSelectSearchComponent } from '../../molecules/multi-select-search/multi-select-search.component';
25
- import { MultiSelectSimpleComponent } from '../../molecules/multi-select-simple/multi-select-simple.component';
26
24
  import { TextInputComponent } from '../../molecules/text-input/text-input.component';
27
25
  import { ComponentStates, InputType } from '../../types';
28
26
  import * as i0 from "@angular/core";
@@ -37,16 +35,8 @@ export class FormComponent {
37
35
  this.onSelectChange = new EventEmitter();
38
36
  this.types = InputType;
39
37
  this.subscriptions = [];
40
- // Cache processed field properties
41
- this.processedSections = [];
42
- this.previousValues = new Map();
43
38
  }
44
39
  ngOnInit() {
45
- this.createForm();
46
- this.processAllSections();
47
- this.setupChangeTracking();
48
- }
49
- createForm() {
50
40
  const formControls = {};
51
41
  this.props.sections.forEach(section => {
52
42
  section.fields.forEach(field => {
@@ -61,27 +51,36 @@ export class FormComponent {
61
51
  });
62
52
  });
63
53
  this.form = this.fb.group(formControls);
54
+ this.props.sections.forEach(section => {
55
+ section.fields
56
+ .filter(x => x.type === this.types.SELECT || x.type === this.types.TEXT || x.type === this.types.SEARCH_SELECT || x.type === this.types.MULTI_SELECT)
57
+ .forEach(field => {
58
+ this.trackSelectChanges(field.name);
59
+ });
60
+ });
64
61
  }
65
- processAllSections() {
66
- console.log('[FormComponent] Processing all sections - ONE TIME ONLY');
67
- this.processedSections = this.props.sections.map(section => ({
68
- name: section.name,
69
- fields: section.fields.map(field => this.processField(field))
70
- }));
62
+ ngOnDestroy() {
63
+ // Cleanup subscriptions to avoid memory leaks
64
+ this.subscriptions.forEach(sub => sub.unsubscribe());
65
+ }
66
+ trackSelectChanges(fieldName) {
67
+ const control = this.getControl(fieldName);
68
+ const subscription = control.valueChanges.subscribe(value => {
69
+ this.onSelectChange.emit({ field: fieldName, value });
70
+ });
71
+ this.subscriptions.push(subscription);
71
72
  }
72
- processField(field) {
73
- // Generate token if not provided
73
+ async submitHandler(token) {
74
+ this.onSubmit.emit({ fields: this.form.getRawValue(), token });
75
+ }
76
+ getControl(field) {
77
+ return this.Form.get(field);
78
+ }
79
+ getFieldProp(field) {
80
+ field.token;
74
81
  if (!field.token) {
75
82
  field.token = `input-${field.type}-${field.name}`;
76
83
  }
77
- // Debug: verificar opciones para select fields - SOLO UNA VEZ
78
- if (field.type === this.types.SEARCH_SELECT || field.type === this.types.MULTI_SELECT || field.type === this.types.MULTI_SELECT_SIMPLE) {
79
- console.log(`[FormComponent] Processing field ${field.name} options:`, {
80
- type: field.type,
81
- optionsCount: field.options?.length || 0,
82
- options: field.options?.slice(0, 2) || []
83
- });
84
- }
85
84
  if (field.type === this.types.NUMBER_FROM_TO) {
86
85
  const fromControl = this.getControl(`${field.name}_from`);
87
86
  const toControl = this.getControl(`${field.name}_to`);
@@ -93,11 +92,12 @@ export class FormComponent {
93
92
  fromControl.enable();
94
93
  toControl.enable();
95
94
  }
96
- // Modify original field object to maintain reactivity
97
- field.fromControl = fromControl;
98
- field.toControl = toControl;
99
- field.control = undefined; // Remove control for NUMBER_FROM_TO fields
100
- return field;
95
+ return {
96
+ ...field,
97
+ fromControl,
98
+ toControl,
99
+ control: undefined, // Remove control for NUMBER_FROM_TO fields
100
+ };
101
101
  }
102
102
  else {
103
103
  const control = this.getControl(field.name);
@@ -107,65 +107,12 @@ export class FormComponent {
107
107
  else {
108
108
  control.enable();
109
109
  }
110
- // Modify original field object to maintain reactivity
111
- field.control = control;
112
- return field;
110
+ return {
111
+ ...field,
112
+ control,
113
+ };
113
114
  }
114
115
  }
115
- setupChangeTracking() {
116
- this.props.sections.forEach(section => {
117
- section.fields
118
- .filter(x => x.type === this.types.SELECT || x.type === this.types.TEXT || x.type === this.types.SEARCH_SELECT || x.type === this.types.MULTI_SELECT || x.type === this.types.MULTI_SELECT_SIMPLE)
119
- .forEach(field => {
120
- console.log(`[FormComponent] Tracking changes for field: ${field.name}, type: ${field.type}`);
121
- this.trackSelectChanges(field.name);
122
- });
123
- });
124
- }
125
- ngOnDestroy() {
126
- // Cleanup subscriptions to avoid memory leaks
127
- this.subscriptions.forEach(sub => sub.unsubscribe());
128
- }
129
- trackSelectChanges(fieldName) {
130
- const control = this.getControl(fieldName);
131
- // Initialize previous value
132
- this.previousValues.set(fieldName, control.value);
133
- const subscription = control.valueChanges
134
- .pipe(distinctUntilChanged()) // Evitar valores duplicados
135
- .subscribe(value => {
136
- console.log(`[FormComponent] valueChanges for ${fieldName}:`, {
137
- field: fieldName,
138
- newValue: value,
139
- previousValue: this.previousValues.get(fieldName),
140
- willEmit: this.previousValues.get(fieldName) !== value
141
- });
142
- // Evitar loops - solo emitir si el valor realmente cambió
143
- const previousValue = this.previousValues.get(fieldName);
144
- if (previousValue !== value) {
145
- this.previousValues.set(fieldName, value);
146
- console.log(`[FormComponent] EMITTING onSelectChange:`, { field: fieldName, value });
147
- this.onSelectChange.emit({ field: fieldName, value });
148
- }
149
- else {
150
- console.log(`[FormComponent] SKIPPING emit - same value for ${fieldName}`);
151
- }
152
- });
153
- this.subscriptions.push(subscription);
154
- }
155
- async submitHandler(token) {
156
- this.onSubmit.emit({ fields: this.form.getRawValue(), token });
157
- }
158
- getControl(field) {
159
- return this.Form.get(field);
160
- }
161
- /**
162
- * @deprecated This method is now only used internally.
163
- * Use processedSections property instead to avoid multiple calls.
164
- */
165
- getFieldProp(field) {
166
- console.warn('[FormComponent] getFieldProp is deprecated and should not be called directly');
167
- return this.processField(field);
168
- }
169
116
  get isAtEndOfForm() {
170
117
  return isAtEnd(this.elementRef);
171
118
  }
@@ -178,19 +125,6 @@ export class FormComponent {
178
125
  data: this.props,
179
126
  };
180
127
  }
181
- // Helper method to reset field value without triggering change event
182
- resetField(fieldName, emitEvent = false) {
183
- const control = this.getControl(fieldName);
184
- const currentValue = control.value;
185
- console.log(`[FormComponent] Resetting field ${fieldName}:`, { currentValue, emitEvent });
186
- // Update our cache to avoid triggering change event
187
- if (!emitEvent) {
188
- this.previousValues.set(fieldName, '');
189
- }
190
- control.setValue('', { emitEvent });
191
- control.markAsPristine();
192
- control.markAsUntouched();
193
- }
194
128
  get actions() {
195
129
  if (!this.form) {
196
130
  return [];
@@ -221,59 +155,56 @@ export class FormComponent {
221
155
  size: 'large',
222
156
  }"
223
157
  ></val-display>
224
- <div class="section" *ngFor="let s of processedSections">
158
+ <div class="section" *ngFor="let s of props.sections">
225
159
  <val-title [props]="{ content: s.name, size: 'large', color: '', bold: false }"></val-title>
226
160
  <div class="input" *ngFor="let f of s.fields">
227
161
  <val-title [props]="{ content: f.label, size: 'small', color: 'dark', bold: false }"></val-title>
228
162
  <ng-container *ngIf="f.type === types.TEXT">
229
- <val-text-input [props]="f"></val-text-input>
163
+ <val-text-input [props]="getFieldProp(f)"></val-text-input>
230
164
  </ng-container>
231
165
  <ng-container *ngIf="f.type === types.CHECK">
232
166
  <val-check-input></val-check-input>
233
167
  </ng-container>
234
168
  <ng-container *ngIf="f.type === types.COMMENT">
235
- <val-comment-input [props]="f"></val-comment-input>
169
+ <val-comment-input [props]="getFieldProp(f)"></val-comment-input>
236
170
  </ng-container>
237
171
  <ng-container *ngIf="f.type === types.DATE">
238
- <val-date-input [props]="f"></val-date-input>
172
+ <val-date-input [props]="getFieldProp(f)"></val-date-input>
239
173
  </ng-container>
240
174
  <ng-container *ngIf="f.type === types.EMAIL">
241
- <val-email-input [props]="f"></val-email-input>
175
+ <val-email-input [props]="getFieldProp(f)"></val-email-input>
242
176
  </ng-container>
243
177
  <ng-container *ngIf="f.type === types.FILE">
244
- <val-file-input [props]="f"></val-file-input>
178
+ <val-file-input [props]="getFieldProp(f)"></val-file-input>
245
179
  </ng-container>
246
180
  <ng-container *ngIf="f.type === types.HOUR">
247
- <val-hour-input [props]="f"></val-hour-input>
181
+ <val-hour-input [props]="getFieldProp(f)"></val-hour-input>
248
182
  </ng-container>
249
183
  <ng-container *ngIf="f.type === types.NUMBER">
250
- <val-number-input [props]="f"></val-number-input>
184
+ <val-number-input [props]="getFieldProp(f)"></val-number-input>
251
185
  </ng-container>
252
186
  <ng-container *ngIf="f.type === types.NUMBER_FROM_TO">
253
- <val-number-from-to [props]="f"></val-number-from-to>
187
+ <val-number-from-to [props]="getFieldProp(f)"></val-number-from-to>
254
188
  </ng-container>
255
189
  <ng-container *ngIf="f.type === types.PASSWORD">
256
- <val-password-input [props]="f"></val-password-input>
190
+ <val-password-input [props]="getFieldProp(f)"></val-password-input>
257
191
  </ng-container>
258
192
  <ng-container *ngIf="f.type === types.PIN_CODE">
259
- <val-pin-input [props]="f"></val-pin-input>
193
+ <val-pin-input [props]="getFieldProp(f)"></val-pin-input>
260
194
  </ng-container>
261
195
  <ng-container *ngIf="f.type === types.RADIO">
262
- <val-radio-input [props]="f"></val-radio-input>
196
+ <val-radio-input [props]="getFieldProp(f)"></val-radio-input>
263
197
  </ng-container>
264
198
  <ng-container *ngIf="f.type === types.SELECT">
265
- <val-select-input [props]="f"></val-select-input>
199
+ <val-select-input [props]="getFieldProp(f)"></val-select-input>
266
200
  </ng-container>
267
201
  <ng-container *ngIf="f.type === types.SEARCH_SELECT">
268
- <val-select-search [props]="f"></val-select-search>
202
+ <val-select-search [props]="getFieldProp(f)"></val-select-search>
269
203
  </ng-container>
270
204
  <ng-container *ngIf="f.type === types.MULTI_SELECT">
271
- <val-multi-select-search [props]="f"></val-multi-select-search>
272
- </ng-container>
273
- <ng-container *ngIf="f.type === types.MULTI_SELECT_SIMPLE">
274
- <val-multi-select-simple [props]="f"></val-multi-select-simple>
205
+ <val-multi-select-search [props]="getFieldProp(f)"></val-multi-select-search>
275
206
  </ng-container>
276
- <val-hint [props]="f"></val-hint>
207
+ <val-hint [props]="getFieldProp(f)"></val-hint>
277
208
  </div>
278
209
  <val-divider [props]="{ fill: 'solid', size: 'medium', color: 'medium' }"></val-divider>
279
210
  <ng-content></ng-content>
@@ -284,7 +215,7 @@ export class FormComponent {
284
215
  ></val-button-group>
285
216
  </form>
286
217
  </div>
287
- `, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["props"] }, { kind: "component", type: CheckInputComponent, selector: "val-check-input" }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: DividerComponent, selector: "val-divider", inputs: ["props"] }, { kind: "component", type: HintComponent, selector: "val-hint", inputs: ["props"] }, { kind: "component", type: CommentInputComponent, selector: "val-comment-input", inputs: ["props"] }, { kind: "component", type: DateInputComponent, selector: "val-date-input", inputs: ["props"] }, { kind: "component", type: FileInputComponent, selector: "val-file-input", inputs: ["props"] }, { kind: "component", type: HourInputComponent, selector: "val-hour-input", inputs: ["props"] }, { kind: "component", type: EmailInputComponent, selector: "val-email-input", inputs: ["props"] }, { kind: "component", type: NumberInputComponent, selector: "val-number-input", inputs: ["props"] }, { kind: "component", type: NumberFromToComponent, selector: "val-number-from-to", inputs: ["props"] }, { kind: "component", type: RadioInputComponent, selector: "val-radio-input", inputs: ["props"] }, { kind: "component", type: PasswordInputComponent, selector: "val-password-input", inputs: ["props"] }, { kind: "component", type: PinInputComponent, selector: "val-pin-input", inputs: ["props"] }, { kind: "component", type: SelectSearchComponent, selector: "val-select-search", inputs: ["props", "labelProperty", "valueProperty", "placeholder"] }, { kind: "component", type: MultiSelectSearchComponent, selector: "val-multi-select-search", inputs: ["label", "labelProperty", "valueProperty", "placeholder", "props"] }, { kind: "component", type: MultiSelectSimpleComponent, selector: "val-multi-select-simple", inputs: ["props", "labelProperty", "valueProperty", "placeholder"] }, { kind: "component", type: SearchSelectorComponent, selector: "val-select-input", inputs: ["props"] }] }); }
218
+ `, isInline: true, styles: [":root{--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-medium)}@media (prefers-color-scheme: dark){:root{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.section{margin-top:1rem}.input{margin:.5rem 0}@media (min-width: 768px){.input{margin:.75rem 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["props"] }, { kind: "component", type: CheckInputComponent, selector: "val-check-input" }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: DividerComponent, selector: "val-divider", inputs: ["props"] }, { kind: "component", type: HintComponent, selector: "val-hint", inputs: ["props"] }, { kind: "component", type: CommentInputComponent, selector: "val-comment-input", inputs: ["props"] }, { kind: "component", type: DateInputComponent, selector: "val-date-input", inputs: ["props"] }, { kind: "component", type: FileInputComponent, selector: "val-file-input", inputs: ["props"] }, { kind: "component", type: HourInputComponent, selector: "val-hour-input", inputs: ["props"] }, { kind: "component", type: EmailInputComponent, selector: "val-email-input", inputs: ["props"] }, { kind: "component", type: NumberInputComponent, selector: "val-number-input", inputs: ["props"] }, { kind: "component", type: NumberFromToComponent, selector: "val-number-from-to", inputs: ["props"] }, { kind: "component", type: RadioInputComponent, selector: "val-radio-input", inputs: ["props"] }, { kind: "component", type: PasswordInputComponent, selector: "val-password-input", inputs: ["props"] }, { kind: "component", type: PinInputComponent, selector: "val-pin-input", inputs: ["props"] }, { kind: "component", type: SelectSearchComponent, selector: "val-select-search", inputs: ["label", "labelProperty", "valueProperty", "multiple", "placeholder", "props"] }, { kind: "component", type: MultiSelectSearchComponent, selector: "val-multi-select-search", inputs: ["label", "labelProperty", "valueProperty", "placeholder", "props"] }, { kind: "component", type: SearchSelectorComponent, selector: "val-select-input", inputs: ["props"] }] }); }
288
219
  }
289
220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FormComponent, decorators: [{
290
221
  type: Component,
@@ -310,7 +241,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
310
241
  PinInputComponent,
311
242
  SelectSearchComponent,
312
243
  MultiSelectSearchComponent,
313
- MultiSelectSimpleComponent,
314
244
  SearchSelectorComponent,
315
245
  ], template: `
316
246
  <div class="container">
@@ -323,59 +253,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
323
253
  size: 'large',
324
254
  }"
325
255
  ></val-display>
326
- <div class="section" *ngFor="let s of processedSections">
256
+ <div class="section" *ngFor="let s of props.sections">
327
257
  <val-title [props]="{ content: s.name, size: 'large', color: '', bold: false }"></val-title>
328
258
  <div class="input" *ngFor="let f of s.fields">
329
259
  <val-title [props]="{ content: f.label, size: 'small', color: 'dark', bold: false }"></val-title>
330
260
  <ng-container *ngIf="f.type === types.TEXT">
331
- <val-text-input [props]="f"></val-text-input>
261
+ <val-text-input [props]="getFieldProp(f)"></val-text-input>
332
262
  </ng-container>
333
263
  <ng-container *ngIf="f.type === types.CHECK">
334
264
  <val-check-input></val-check-input>
335
265
  </ng-container>
336
266
  <ng-container *ngIf="f.type === types.COMMENT">
337
- <val-comment-input [props]="f"></val-comment-input>
267
+ <val-comment-input [props]="getFieldProp(f)"></val-comment-input>
338
268
  </ng-container>
339
269
  <ng-container *ngIf="f.type === types.DATE">
340
- <val-date-input [props]="f"></val-date-input>
270
+ <val-date-input [props]="getFieldProp(f)"></val-date-input>
341
271
  </ng-container>
342
272
  <ng-container *ngIf="f.type === types.EMAIL">
343
- <val-email-input [props]="f"></val-email-input>
273
+ <val-email-input [props]="getFieldProp(f)"></val-email-input>
344
274
  </ng-container>
345
275
  <ng-container *ngIf="f.type === types.FILE">
346
- <val-file-input [props]="f"></val-file-input>
276
+ <val-file-input [props]="getFieldProp(f)"></val-file-input>
347
277
  </ng-container>
348
278
  <ng-container *ngIf="f.type === types.HOUR">
349
- <val-hour-input [props]="f"></val-hour-input>
279
+ <val-hour-input [props]="getFieldProp(f)"></val-hour-input>
350
280
  </ng-container>
351
281
  <ng-container *ngIf="f.type === types.NUMBER">
352
- <val-number-input [props]="f"></val-number-input>
282
+ <val-number-input [props]="getFieldProp(f)"></val-number-input>
353
283
  </ng-container>
354
284
  <ng-container *ngIf="f.type === types.NUMBER_FROM_TO">
355
- <val-number-from-to [props]="f"></val-number-from-to>
285
+ <val-number-from-to [props]="getFieldProp(f)"></val-number-from-to>
356
286
  </ng-container>
357
287
  <ng-container *ngIf="f.type === types.PASSWORD">
358
- <val-password-input [props]="f"></val-password-input>
288
+ <val-password-input [props]="getFieldProp(f)"></val-password-input>
359
289
  </ng-container>
360
290
  <ng-container *ngIf="f.type === types.PIN_CODE">
361
- <val-pin-input [props]="f"></val-pin-input>
291
+ <val-pin-input [props]="getFieldProp(f)"></val-pin-input>
362
292
  </ng-container>
363
293
  <ng-container *ngIf="f.type === types.RADIO">
364
- <val-radio-input [props]="f"></val-radio-input>
294
+ <val-radio-input [props]="getFieldProp(f)"></val-radio-input>
365
295
  </ng-container>
366
296
  <ng-container *ngIf="f.type === types.SELECT">
367
- <val-select-input [props]="f"></val-select-input>
297
+ <val-select-input [props]="getFieldProp(f)"></val-select-input>
368
298
  </ng-container>
369
299
  <ng-container *ngIf="f.type === types.SEARCH_SELECT">
370
- <val-select-search [props]="f"></val-select-search>
300
+ <val-select-search [props]="getFieldProp(f)"></val-select-search>
371
301
  </ng-container>
372
302
  <ng-container *ngIf="f.type === types.MULTI_SELECT">
373
- <val-multi-select-search [props]="f"></val-multi-select-search>
374
- </ng-container>
375
- <ng-container *ngIf="f.type === types.MULTI_SELECT_SIMPLE">
376
- <val-multi-select-simple [props]="f"></val-multi-select-simple>
303
+ <val-multi-select-search [props]="getFieldProp(f)"></val-multi-select-search>
377
304
  </ng-container>
378
- <val-hint [props]="f"></val-hint>
305
+ <val-hint [props]="getFieldProp(f)"></val-hint>
379
306
  </div>
380
307
  <val-divider [props]="{ fill: 'solid', size: 'medium', color: 'medium' }"></val-divider>
381
308
  <ng-content></ng-content>
@@ -396,4 +323,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
396
323
  }], onSelectChange: [{
397
324
  type: Output
398
325
  }] } });
399
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBdUMsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVB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Qiw0REFDbkIsb0JBQW9CLHNHQUNwQixnQkFBZ0IsMkVBQ2hCLGFBQWEsd0VBQ2IscUJBQXFCLGlGQUNyQixrQkFBa0IsOEVBQ2xCLGtCQUFrQiw4RUFDbEIsa0JBQWtCLDhFQUNsQixtQkFBbUIsK0VBQ25CLG9CQUFvQixnRkFDcEIscUJBQXFCLGtGQUNyQixtQkFBbUIsK0VBQ25CLHNCQUFzQixrRkFDdEIsaUJBQWlCLDZFQUNqQixxQkFBcUIsa0lBQ3JCLDBCQUEwQixpSkFDMUIsMEJBQTBCLHdJQUMxQix1QkFBdUI7OzRGQStFZCxhQUFhO2tCQXpHekIsU0FBUzsrQkFDRSxVQUFVLGNBQ1IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQiwwQkFBMEI7d0JBQzFCLDBCQUEwQjt3QkFDMUIsdUJBQXVCO3FCQUMxQixZQUNXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBFVDt5R0FLRCxLQUFLO3NCQURKLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxNQUFNO2dCQUlQLFNBQVM7c0JBRFIsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgaXNBdEVuZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9kb20nO1xuaW1wb3J0IHsgRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2Rpc3BsYXkvZGlzcGxheS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGl2aWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2RpdmlkZXIvZGl2aWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90aXRsZS90aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvYnV0dG9uLWdyb3VwL2J1dHRvbi1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jaGVjay1pbnB1dC9jaGVjay1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbWVudElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2NvbW1lbnQtaW5wdXQvY29tbWVudC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2RhdGUtaW5wdXQvZGF0ZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1haWxJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbWFpbC1pbnB1dC9lbWFpbC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmlsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2ZpbGUtaW5wdXQvZmlsZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGludENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9oaW50L2hpbnQuY29tcG9uZW50JztcbmltcG9ydCB7IEhvdXJJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9ob3VyLWlucHV0L2hvdXItaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IE51bWJlcklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL251bWJlci1pbnB1dC9udW1iZXItaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IE51bWJlckZyb21Ub0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9udW1iZXItZnJvbS10by9udW1iZXItZnJvbS10by5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFzc3dvcmRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9wYXNzd29yZC1pbnB1dC9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGluSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvcGluLWlucHV0L3Bpbi1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmFkaW9JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9yYWRpby1pbnB1dC9yYWRpby1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VsZWN0LWlucHV0L3NlbGVjdC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0U2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3NlbGVjdC1zZWFyY2gvc2VsZWN0LXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvbXVsdGktc2VsZWN0LXNlYXJjaC9tdWx0aS1zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdFNpbXBsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9tdWx0aS1zZWxlY3Qtc2ltcGxlL211bHRpLXNlbGVjdC1zaW1wbGUuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90ZXh0LWlucHV0L3RleHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMsIEZvcm1NZXRhZGF0YSwgRm9ybVN1Ym1pdCwgSW5wdXRNZXRhZGF0YSwgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBEaXNwbGF5Q29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIFRleHRJbnB1dENvbXBvbmVudCxcbiAgICBDaGVja0lucHV0Q29tcG9uZW50LFxuICAgIEJ1dHRvbkdyb3VwQ29tcG9uZW50LFxuICAgIERpdmlkZXJDb21wb25lbnQsXG4gICAgSGludENvbXBvbmVudCxcbiAgICBDb21tZW50SW5wdXRDb21wb25lbnQsXG4gICAgRGF0ZUlucHV0Q29tcG9uZW50LFxuICAgIEZpbGVJbnB1dENvbXBvbmVudCxcbiAgICBIb3VySW5wdXRDb21wb25lbnQsXG4gICAgRW1haWxJbnB1dENvbXBvbmVudCxcbiAgICBOdW1iZXJJbnB1dENvbXBvbmVudCxcbiAgICBOdW1iZXJGcm9tVG9Db21wb25lbnQsXG4gICAgUmFkaW9JbnB1dENvbXBvbmVudCxcbiAgICBQYXNzd29yZElucHV0Q29tcG9uZW50LFxuICAgIFBpbklucHV0Q29tcG9uZW50LFxuICAgIFNlbGVjdFNlYXJjaENvbXBvbmVudCxcbiAgICBNdWx0aVNlbGVjdFNlYXJjaENvbXBvbmVudCxcbiAgICBNdWx0aVNlbGVjdFNpbXBsZUNvbXBvbmVudCxcbiAgICBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCxcbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgICAgIDx2YWwtZGlzcGxheVxuICAgICAgICAgICpuZ0lmPVwicHJvcHMubmFtZVwiXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIGNvbnRlbnQ6IHByb3BzLm5hbWUsXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICB9XCJcbiAgICAgICAgPjwvdmFsLWRpc3BsYXk+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCIgKm5nRm9yPVwibGV0IHMgb2YgcHJvY2Vzc2VkU2VjdGlvbnNcIj5cbiAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IGNvbnRlbnQ6IHMubmFtZSwgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICcnLCBib2xkOiBmYWxzZSB9XCI+PC92YWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0XCIgKm5nRm9yPVwibGV0IGYgb2Ygcy5maWVsZHNcIj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgY29udGVudDogZi5sYWJlbCwgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJywgYm9sZDogZmFsc2UgfVwiPjwvdmFsLXRpdGxlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuVEVYVFwiPlxuICAgICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cImZcIj48L3ZhbC10ZXh0LWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5DSEVDS1wiPlxuICAgICAgICAgICAgICA8dmFsLWNoZWNrLWlucHV0PjwvdmFsLWNoZWNrLWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5DT01NRU5UXCI+XG4gICAgICAgICAgICAgIDx2YWwtY29tbWVudC1pbnB1dCBbcHJvcHNdPVwiZlwiPjwvdmFsLWNvbW1lbnQtaW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLkRBVEVcIj5cbiAgICAgICAgICAgICAgPHZhbC1kYXRlLWlucHV0IFtwcm9wc109XCJmXCI+PC92YWwtZGF0ZS1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuRU1BSUxcIj5cbiAgICAgICAgICAgICAgPHZhbC1lbWFpbC1pbnB1dCBbcHJvcHNdPVwiZlwiPjwvdmFsLWVtYWlsLWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5GSUxFXCI+XG4gICAgICAgICAgICAgIDx2YWwtZmlsZS1pbnB1dCBbcHJvcHNdPVwiZlwiPjwvdmFsLWZpbGUtaW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLkhPVVJcIj5cbiAgICAgICAgICAgICAgPHZhbC1ob3VyLWlucHV0IFtwcm9wc109XCJmXCI+PC92YWwtaG91ci1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuTlVNQkVSXCI+XG4gICAgICAgICAgICAgIDx2YWwtbnVtYmVyLWlucHV0IFtwcm9wc109XCJmXCI+PC92YWwtbnVtYmVyLWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5OVU1CRVJfRlJPTV9UT1wiPlxuICAgICAgICAgICAgICA8dmFsLW51bWJlci1mcm9tLXRvIFtwcm9wc109XCJmXCI+PC92YWwtbnVtYmVyLWZyb20tdG8+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLlBBU1NXT1JEXCI+XG4gICAgICAgICAgICAgIDx2YWwtcGFzc3dvcmQtaW5wdXQgW3Byb3BzXT1cImZcIj48L3ZhbC1wYXNzd29yZC1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuUElOX0NPREVcIj5cbiAgICAgICAgICAgICAgPHZhbC1waW4taW5wdXQgW3Byb3BzXT1cImZcIj48L3ZhbC1waW4taW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLlJBRElPXCI+XG4gICAgICAgICAgICAgIDx2YWwtcmFkaW8taW5wdXQgW3Byb3BzXT1cImZcIj48L3ZhbC1yYWRpby1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuU0VMRUNUXCI+XG4gICAgICAgICAgICAgIDx2YWwtc2VsZWN0LWlucHV0IFtwcm9wc109XCJmXCI+PC92YWwtc2VsZWN0LWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5TRUFSQ0hfU0VMRUNUXCI+XG4gICAgICAgICAgICAgIDx2YWwtc2VsZWN0LXNlYXJjaCBbcHJvcHNdPVwiZlwiPjwvdmFsLXNlbGVjdC1zZWFyY2g+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLk1VTFRJX1NFTEVDVFwiPlxuICAgICAgICAgICAgICA8dmFsLW11bHRpLXNlbGVjdC1zZWFyY2ggW3Byb3BzXT1cImZcIj48L3ZhbC1tdWx0aS1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5NVUxUSV9TRUxFQ1RfU0lNUExFXCI+XG4gICAgICAgICAgICAgIDx2YWwtbXVsdGktc2VsZWN0LXNpbXBsZSBbcHJvcHNdPVwiZlwiPjwvdmFsLW11bHRpLXNlbGVjdC1zaW1wbGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDx2YWwtaGludCBbcHJvcHNdPVwiZlwiPjwvdmFsLWhpbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHZhbC1kaXZpZGVyIFtwcm9wc109XCJ7IGZpbGw6ICdzb2xpZCcsIHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ21lZGl1bScgfVwiPjwvdmFsLWRpdmlkZXI+XG4gICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHZhbC1idXR0b24tZ3JvdXBcbiAgICAgICAgICBbcHJvcHNdPVwieyBidXR0b25zOiBhY3Rpb25zLCBwb3NpdGlvbjogJ2NlbnRlcicsIGNvbHVtbmVkOiBmYWxzZSB9XCJcbiAgICAgICAgICAob25DbGljayk9XCJzdWJtaXRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICA+PC92YWwtYnV0dG9uLWdyb3VwPlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICBwcm9wczogRm9ybU1ldGFkYXRhO1xuXG4gIEBPdXRwdXQoKVxuICBvblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9ybVN1Ym1pdD4oKTtcblxuICBAT3V0cHV0KClcbiAgb25JbnZhbGlkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBvblNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmaWVsZDogc3RyaW5nOyB2YWx1ZTogYW55IH0+KCk7XG5cbiAgZm9ybTogRm9ybUdyb3VwO1xuICB0eXBlcyA9IElucHV0VHlwZTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBcbiAgLy8gQ2FjaGUgcHJvY2Vzc2VkIGZpZWxkIHByb3BlcnRpZXNcbiAgcHJvY2Vzc2VkU2VjdGlvbnM6IHsgbmFtZTogc3RyaW5nOyBmaWVsZHM6IElucHV0TWV0YWRhdGFbXSB9W10gPSBbXTtcbiAgcHJpdmF0ZSBwcmV2aW91c1ZhbHVlcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgICB0aGlzLnByb2Nlc3NBbGxTZWN0aW9ucygpO1xuICAgIHRoaXMuc2V0dXBDaGFuZ2VUcmFja2luZygpO1xuICB9XG4gIFxuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgY29uc3QgZm9ybUNvbnRyb2xzID0ge307XG4gICAgdGhpcy5wcm9wcy5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSB0aGlzLnR5cGVzLk5VTUJFUl9GUk9NX1RPKSB7XG4gICAgICAgICAgLy8gQ3JlYXIgZG9zIGNvbnRyb2xlcyBwYXJhIGNhbXBvcyBOVU1CRVJfRlJPTV9UT1xuICAgICAgICAgIGZvcm1Db250cm9sc1tgJHtmaWVsZC5uYW1lfV9mcm9tYF0gPSBbdW5kZWZpbmVkLCBmaWVsZC52YWxpZGF0b3JzIHx8IFtdXTtcbiAgICAgICAgICBmb3JtQ29udHJvbHNbYCR7ZmllbGQubmFtZX1fdG9gXSA9IFt1bmRlZmluZWQsIGZpZWxkLnZhbGlkYXRvcnMgfHwgW11dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5uYW1lXSA9IFt1bmRlZmluZWQsIGZpZWxkLnZhbGlkYXRvcnMgfHwgW11dO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKGZvcm1Db250cm9scyk7XG4gIH1cbiAgXG4gIHByaXZhdGUgcHJvY2Vzc0FsbFNlY3Rpb25zKCkge1xuICAgIGNvbnNvbGUubG9nKCdbRm9ybUNvbXBvbmVudF0gUHJvY2Vzc2luZyBhbGwgc2VjdGlvbnMgLSBPTkUgVElNRSBPTkxZJyk7XG4gICAgXG4gICAgdGhpcy5wcm9jZXNzZWRTZWN0aW9ucyA9IHRoaXMucHJvcHMuc2VjdGlvbnMubWFwKHNlY3Rpb24gPT4gKHtcbiAgICAgIG5hbWU6IHNlY3Rpb24ubmFtZSxcbiAgICAgIGZpZWxkczogc2VjdGlvbi5maWVsZHMubWFwKGZpZWxkID0+IHRoaXMucHJvY2Vzc0ZpZWxkKGZpZWxkKSlcbiAgICB9KSk7XG4gIH1cbiAgXG4gIHByaXZhdGUgcHJvY2Vzc0ZpZWxkKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogSW5wdXRNZXRhZGF0YSB7XG4gICAgLy8gR2VuZXJhdGUgdG9rZW4gaWYgbm90IHByb3ZpZGVkXG4gICAgaWYgKCFmaWVsZC50b2tlbikge1xuICAgICAgZmllbGQudG9rZW4gPSBgaW5wdXQtJHtmaWVsZC50eXBlfS0ke2ZpZWxkLm5hbWV9YDtcbiAgICB9XG4gICAgXG4gICAgLy8gRGVidWc6IHZlcmlmaWNhciBvcGNpb25lcyBwYXJhIHNlbGVjdCBmaWVsZHMgLSBTT0xPIFVOQSBWRVpcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5TRUFSQ0hfU0VMRUNUIHx8IGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuTVVMVElfU0VMRUNUIHx8IGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuTVVMVElfU0VMRUNUX1NJTVBMRSkge1xuICAgICAgY29uc29sZS5sb2coYFtGb3JtQ29tcG9uZW50XSBQcm9jZXNzaW5nIGZpZWxkICR7ZmllbGQubmFtZX0gb3B0aW9uczpgLCB7XG4gICAgICAgIHR5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgIG9wdGlvbnNDb3VudDogZmllbGQub3B0aW9ucz8ubGVuZ3RoIHx8IDAsXG4gICAgICAgIG9wdGlvbnM6IGZpZWxkLm9wdGlvbnM/LnNsaWNlKDAsIDIpIHx8IFtdXG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgaWYgKGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuTlVNQkVSX0ZST01fVE8pIHtcbiAgICAgIGNvbnN0IGZyb21Db250cm9sID0gdGhpcy5nZXRDb250cm9sKGAke2ZpZWxkLm5hbWV9X2Zyb21gKTtcbiAgICAgIGNvbnN0IHRvQ29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChgJHtmaWVsZC5uYW1lfV90b2ApO1xuICAgICAgXG4gICAgICBpZiAoZmllbGQuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCkge1xuICAgICAgICBmcm9tQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIHRvQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcm9tQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgdG9Db250cm9sLmVuYWJsZSgpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBNb2RpZnkgb3JpZ2luYWwgZmllbGQgb2JqZWN0IHRvIG1haW50YWluIHJlYWN0aXZpdHlcbiAgICAgIGZpZWxkLmZyb21Db250cm9sID0gZnJvbUNvbnRyb2w7XG4gICAgICBmaWVsZC50b0NvbnRyb2wgPSB0b0NvbnRyb2w7XG4gICAgICBmaWVsZC5jb250cm9sID0gdW5kZWZpbmVkOyAvLyBSZW1vdmUgY29udHJvbCBmb3IgTlVNQkVSX0ZST01fVE8gZmllbGRzXG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGQubmFtZSk7XG4gICAgICBpZiAoZmllbGQuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCkge1xuICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIE1vZGlmeSBvcmlnaW5hbCBmaWVsZCBvYmplY3QgdG8gbWFpbnRhaW4gcmVhY3Rpdml0eVxuICAgICAgZmllbGQuY29udHJvbCA9IGNvbnRyb2w7XG4gICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuICB9XG4gIFxuICBwcml2YXRlIHNldHVwQ2hhbmdlVHJhY2tpbmcoKSB7XG4gICAgdGhpcy5wcm9wcy5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHNcbiAgICAgICAgLmZpbHRlcih4ID0+IHgudHlwZSA9PT0gdGhpcy50eXBlcy5TRUxFQ1QgfHwgeC50eXBlID09PSB0aGlzLnR5cGVzLlRFWFQgfHwgeC50eXBlID09PSB0aGlzLnR5cGVzLlNFQVJDSF9TRUxFQ1QgfHwgeC50eXBlID09PSB0aGlzLnR5cGVzLk1VTFRJX1NFTEVDVCB8fCB4LnR5cGUgPT09IHRoaXMudHlwZXMuTVVMVElfU0VMRUNUX1NJTVBMRSlcbiAgICAgICAgLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbRm9ybUNvbXBvbmVudF0gVHJhY2tpbmcgY2hhbmdlcyBmb3IgZmllbGQ6ICR7ZmllbGQubmFtZX0sIHR5cGU6ICR7ZmllbGQudHlwZX1gKTtcbiAgICAgICAgICB0aGlzLnRyYWNrU2VsZWN0Q2hhbmdlcyhmaWVsZC5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyBDbGVhbnVwIHN1YnNjcmlwdGlvbnMgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHRyYWNrU2VsZWN0Q2hhbmdlcyhmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGROYW1lKTtcbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHByZXZpb3VzIHZhbHVlXG4gICAgdGhpcy5wcmV2aW91c1ZhbHVlcy5zZXQoZmllbGROYW1lLCBjb250cm9sLnZhbHVlKTtcbiAgICBcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSkgLy8gRXZpdGFyIHZhbG9yZXMgZHVwbGljYWRvc1xuICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbRm9ybUNvbXBvbmVudF0gdmFsdWVDaGFuZ2VzIGZvciAke2ZpZWxkTmFtZX06YCwge1xuICAgICAgICAgIGZpZWxkOiBmaWVsZE5hbWUsXG4gICAgICAgICAgbmV3VmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMucHJldmlvdXNWYWx1ZXMuZ2V0KGZpZWxkTmFtZSksXG4gICAgICAgICAgd2lsbEVtaXQ6IHRoaXMucHJldmlvdXNWYWx1ZXMuZ2V0KGZpZWxkTmFtZSkgIT09IHZhbHVlXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gRXZpdGFyIGxvb3BzIC0gc29sbyBlbWl0aXIgc2kgZWwgdmFsb3IgcmVhbG1lbnRlIGNhbWJpw7NcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IHRoaXMucHJldmlvdXNWYWx1ZXMuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICAgIGlmIChwcmV2aW91c1ZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNWYWx1ZXMuc2V0KGZpZWxkTmFtZSwgdmFsdWUpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBbRm9ybUNvbXBvbmVudF0gRU1JVFRJTkcgb25TZWxlY3RDaGFuZ2U6YCwgeyBmaWVsZDogZmllbGROYW1lLCB2YWx1ZSB9KTtcbiAgICAgICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlLmVtaXQoeyBmaWVsZDogZmllbGROYW1lLCB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgW0Zvcm1Db21wb25lbnRdIFNLSVBQSU5HIGVtaXQgLSBzYW1lIHZhbHVlIGZvciAke2ZpZWxkTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdEhhbmRsZXIodG9rZW4/OiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uU3VibWl0LmVtaXQoeyBmaWVsZHM6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLCB0b2tlbiB9KTtcbiAgfVxuXG4gIGdldENvbnRyb2woZmllbGQ6IHN0cmluZyk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5Gb3JtLmdldChmaWVsZCkgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaXMgbm93IG9ubHkgdXNlZCBpbnRlcm5hbGx5LiBcbiAgICogVXNlIHByb2Nlc3NlZFNlY3Rpb25zIHByb3BlcnR5IGluc3RlYWQgdG8gYXZvaWQgbXVsdGlwbGUgY2FsbHMuXG4gICAqL1xuICBnZXRGaWVsZFByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBJbnB1dE1ldGFkYXRhIHtcbiAgICBjb25zb2xlLndhcm4oJ1tGb3JtQ29tcG9uZW50XSBnZXRGaWVsZFByb3AgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHknKTtcbiAgICByZXR1cm4gdGhpcy5wcm9jZXNzRmllbGQoZmllbGQpO1xuICB9XG5cbiAgZ2V0IGlzQXRFbmRPZkZvcm0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQXRFbmQodGhpcy5lbGVtZW50UmVmKTtcbiAgfVxuXG4gIGdldCBGb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybTtcbiAgfVxuXG4gIGdldCBGb3JtU3RhdGUoKTogeyBmb3JtOiBGb3JtR3JvdXA7IGRhdGE6IEZvcm1NZXRhZGF0YSB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybTogdGhpcy5Gb3JtLFxuICAgICAgZGF0YTogdGhpcy5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byByZXNldCBmaWVsZCB2YWx1ZSB3aXRob3V0IHRyaWdnZXJpbmcgY2hhbmdlIGV2ZW50XG4gIHJlc2V0RmllbGQoZmllbGROYW1lOiBzdHJpbmcsIGVtaXRFdmVudDogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChmaWVsZE5hbWUpO1xuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgXG4gICAgY29uc29sZS5sb2coYFtGb3JtQ29tcG9uZW50XSBSZXNldHRpbmcgZmllbGQgJHtmaWVsZE5hbWV9OmAsIHsgY3VycmVudFZhbHVlLCBlbWl0RXZlbnQgfSk7XG4gICAgXG4gICAgLy8gVXBkYXRlIG91ciBjYWNoZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGNoYW5nZSBldmVudFxuICAgIGlmICghZW1pdEV2ZW50KSB7XG4gICAgICB0aGlzLnByZXZpb3VzVmFsdWVzLnNldChmaWVsZE5hbWUsICcnKTtcbiAgICB9XG4gICAgXG4gICAgY29udHJvbC5zZXRWYWx1ZSgnJywgeyBlbWl0RXZlbnQgfSk7XG4gICAgY29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xuICAgIGNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gIH1cblxuICBnZXQgYWN0aW9ucygpOiBCdXR0b25NZXRhZGF0YVtdIHtcbiAgICBpZiAoIXRoaXMuZm9ybSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuV09SS0lORykge1xuICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEKSB7XG4gICAgICB0aGlzLnByb3BzLmFjdGlvbnMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zdGF0ZSA9PT0gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEKSB7XG4gICAgICB0aGlzLnByb3BzLmFjdGlvbnMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt0aGlzLnByb3BzLmFjdGlvbnNdO1xuICB9XG59XG4iXX0=
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0ZWNoLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9mb3JtL2Zvcm0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBdUMsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUMzRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNoRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNqRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQUM5RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQWtCLGVBQWUsRUFBMkMsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7O0FBdUdsSCxNQUFNLE9BQU8sYUFBYTtJQWlCeEIsWUFDVSxFQUFlLEVBQ2YsVUFBc0I7UUFEdEIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGVBQVUsR0FBVixVQUFVLENBQVk7UUFkaEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFjLENBQUM7UUFHMUMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFHL0IsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBaUMsQ0FBQztRQUduRSxVQUFLLEdBQUcsU0FBUyxDQUFDO1FBQ1Ysa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0lBS3hDLENBQUM7SUFFSixRQUFRO1FBQ04sTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNwQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDN0IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzdDLGlEQUFpRDtvQkFDakQsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDekUsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDekUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDakUsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNwQyxPQUFPLENBQUMsTUFBTTtpQkFDWCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO2lCQUNwSixPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBaUI7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQWM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBZ0IsQ0FBQztJQUM3QyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQW9CO1FBQy9CLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDWixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2pCLEtBQUssQ0FBQyxLQUFLLEdBQUcsU0FBUyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDN0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDO1lBQzFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztZQUV0RCxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3RCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN0QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNyQixTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDckIsQ0FBQztZQUVELE9BQU87Z0JBQ0wsR0FBRyxLQUFLO2dCQUNSLFdBQVc7Z0JBQ1gsU0FBUztnQkFDVCxPQUFPLEVBQUUsU0FBUyxFQUFFLDJDQUEyQzthQUNoRSxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixDQUFDO1lBQ0QsT0FBTztnQkFDTCxHQUFHLEtBQUs7Z0JBQ1IsT0FBTzthQUNSLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUNyRCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFDckQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO1FBQ3JELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUN0RCxDQUFDO1FBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0E3SVUsYUFBYTttR0FBYixhQUFhLDZMQTFFZDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RVQsZ3JGQTlGQyxZQUFZLCtQQUNaLG1CQUFtQixxYkFDbkIsZ0JBQWdCLDJFQUNoQixjQUFjLHlFQUNkLGtCQUFrQiw4RUFDbEIsbUJBQW1CLDREQUNuQixvQkFBb0Isc0dBQ3BCLGdCQUFnQiwyRUFDaEIsYUFBYSx3RUFDYixxQkFBcUIsaUZBQ3JCLGtCQUFrQiw4RUFDbEIsa0JBQWtCLDhFQUNsQixrQkFBa0IsOEVBQ2xCLG1CQUFtQiwrRUFDbkIsb0JBQW9CLGdGQUNwQixxQkFBcUIsa0ZBQ3JCLG1CQUFtQiwrRUFDbkIsc0JBQXNCLGtGQUN0QixpQkFBaUIsNkVBQ2pCLHFCQUFxQix1SkFDckIsMEJBQTBCLGlKQUMxQix1QkFBdUI7OzRGQTRFZCxhQUFhO2tCQXJHekIsU0FBUzsrQkFDRSxVQUFVLGNBQ1IsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2Qsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQiwwQkFBMEI7d0JBQzFCLHVCQUF1QjtxQkFDMUIsWUFDVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1RVQ7eUdBS0QsS0FBSztzQkFESixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsTUFBTTtnQkFJUCxTQUFTO3NCQURSLE1BQU07Z0JBSVAsY0FBYztzQkFEYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpc0F0RW5kIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXZpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGl2aWRlci9kaXZpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9idXR0b24tZ3JvdXAvYnV0dG9uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGVja0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2NoZWNrLWlucHV0L2NoZWNrLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tZW50SW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY29tbWVudC1pbnB1dC9jb21tZW50LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbWFpbElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtYWlsLWlucHV0L2VtYWlsLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZmlsZS1pbnB1dC9maWxlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIaW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2hpbnQvaGludC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSG91cklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2hvdXItaW5wdXQvaG91ci1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVySW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvbnVtYmVyLWlucHV0L251bWJlci1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVyRnJvbVRvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL251bWJlci1mcm9tLXRvL251bWJlci1mcm9tLXRvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3Bhc3N3b3JkLWlucHV0L3Bhc3N3b3JkLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaW5JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9waW4taW5wdXQvcGluLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSYWRpb0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3JhZGlvLWlucHV0L3JhZGlvLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zZWxlY3QtaW5wdXQvc2VsZWN0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VsZWN0LXNlYXJjaC9zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdFNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9tdWx0aS1zZWxlY3Qtc2VhcmNoL211bHRpLXNlbGVjdC1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90ZXh0LWlucHV0L3RleHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMsIEZvcm1NZXRhZGF0YSwgRm9ybVN1Ym1pdCwgSW5wdXRNZXRhZGF0YSwgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBEaXNwbGF5Q29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIFRleHRJbnB1dENvbXBvbmVudCxcbiAgICBDaGVja0lucHV0Q29tcG9uZW50LFxuICAgIEJ1dHRvbkdyb3VwQ29tcG9uZW50LFxuICAgIERpdmlkZXJDb21wb25lbnQsXG4gICAgSGludENvbXBvbmVudCxcbiAgICBDb21tZW50SW5wdXRDb21wb25lbnQsXG4gICAgRGF0ZUlucHV0Q29tcG9uZW50LFxuICAgIEZpbGVJbnB1dENvbXBvbmVudCxcbiAgICBIb3VySW5wdXRDb21wb25lbnQsXG4gICAgRW1haWxJbnB1dENvbXBvbmVudCxcbiAgICBOdW1iZXJJbnB1dENvbXBvbmVudCxcbiAgICBOdW1iZXJGcm9tVG9Db21wb25lbnQsXG4gICAgUmFkaW9JbnB1dENvbXBvbmVudCxcbiAgICBQYXNzd29yZElucHV0Q29tcG9uZW50LFxuICAgIFBpbklucHV0Q29tcG9uZW50LFxuICAgIFNlbGVjdFNlYXJjaENvbXBvbmVudCxcbiAgICBNdWx0aVNlbGVjdFNlYXJjaENvbXBvbmVudCxcbiAgICBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCxcbl0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgICAgIDx2YWwtZGlzcGxheVxuICAgICAgICAgICpuZ0lmPVwicHJvcHMubmFtZVwiXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIGNvbnRlbnQ6IHByb3BzLm5hbWUsXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICB9XCJcbiAgICAgICAgPjwvdmFsLWRpc3BsYXk+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCIgKm5nRm9yPVwibGV0IHMgb2YgcHJvcHMuc2VjdGlvbnNcIj5cbiAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IGNvbnRlbnQ6IHMubmFtZSwgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICcnLCBib2xkOiBmYWxzZSB9XCI+PC92YWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0XCIgKm5nRm9yPVwibGV0IGYgb2Ygcy5maWVsZHNcIj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgY29udGVudDogZi5sYWJlbCwgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJywgYm9sZDogZmFsc2UgfVwiPjwvdmFsLXRpdGxlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuVEVYVFwiPlxuICAgICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXRleHQtaW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLkNIRUNLXCI+XG4gICAgICAgICAgICAgIDx2YWwtY2hlY2staW5wdXQ+PC92YWwtY2hlY2staW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLkNPTU1FTlRcIj5cbiAgICAgICAgICAgICAgPHZhbC1jb21tZW50LWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1jb21tZW50LWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5EQVRFXCI+XG4gICAgICAgICAgICAgIDx2YWwtZGF0ZS1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtZGF0ZS1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuRU1BSUxcIj5cbiAgICAgICAgICAgICAgPHZhbC1lbWFpbC1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtZW1haWwtaW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLkZJTEVcIj5cbiAgICAgICAgICAgICAgPHZhbC1maWxlLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1maWxlLWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5IT1VSXCI+XG4gICAgICAgICAgICAgIDx2YWwtaG91ci1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtaG91ci1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuTlVNQkVSXCI+XG4gICAgICAgICAgICAgIDx2YWwtbnVtYmVyLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1udW1iZXItaW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLk5VTUJFUl9GUk9NX1RPXCI+XG4gICAgICAgICAgICAgIDx2YWwtbnVtYmVyLWZyb20tdG8gW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLW51bWJlci1mcm9tLXRvPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5QQVNTV09SRFwiPlxuICAgICAgICAgICAgICA8dmFsLXBhc3N3b3JkLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1wYXNzd29yZC1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuUElOX0NPREVcIj5cbiAgICAgICAgICAgICAgPHZhbC1waW4taW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXBpbi1pbnB1dD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuUkFESU9cIj5cbiAgICAgICAgICAgICAgPHZhbC1yYWRpby1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtcmFkaW8taW5wdXQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmLnR5cGUgPT09IHR5cGVzLlNFTEVDVFwiPlxuICAgICAgICAgICAgICA8dmFsLXNlbGVjdC1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtc2VsZWN0LWlucHV0PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZi50eXBlID09PSB0eXBlcy5TRUFSQ0hfU0VMRUNUXCI+XG4gICAgICAgICAgICAgIDx2YWwtc2VsZWN0LXNlYXJjaCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImYudHlwZSA9PT0gdHlwZXMuTVVMVElfU0VMRUNUXCI+XG4gICAgICAgICAgICAgIDx2YWwtbXVsdGktc2VsZWN0LXNlYXJjaCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtbXVsdGktc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPHZhbC1oaW50IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1oaW50PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx2YWwtZGl2aWRlciBbcHJvcHNdPVwieyBmaWxsOiAnc29saWQnLCBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdtZWRpdW0nIH1cIj48L3ZhbC1kaXZpZGVyPlxuICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx2YWwtYnV0dG9uLWdyb3VwXG4gICAgICAgICAgW3Byb3BzXT1cInsgYnV0dG9uczogYWN0aW9ucywgcG9zaXRpb246ICdjZW50ZXInLCBjb2x1bW5lZDogZmFsc2UgfVwiXG4gICAgICAgICAgKG9uQ2xpY2spPVwic3VibWl0SGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgPjwvdmFsLWJ1dHRvbi1ncm91cD5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KClcbiAgcHJvcHM6IEZvcm1NZXRhZGF0YTtcblxuICBAT3V0cHV0KClcbiAgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1TdWJtaXQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uSW52YWxpZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25TZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmllbGQ6IHN0cmluZzsgdmFsdWU6IGFueSB9PigpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgdHlwZXMgPSBJbnB1dFR5cGU7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGZvcm1Db250cm9scyA9IHt9O1xuICAgIHRoaXMucHJvcHMuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5OVU1CRVJfRlJPTV9UTykge1xuICAgICAgICAgIC8vIENyZWFyIGRvcyBjb250cm9sZXMgcGFyYSBjYW1wb3MgTlVNQkVSX0ZST01fVE9cbiAgICAgICAgICBmb3JtQ29udHJvbHNbYCR7ZmllbGQubmFtZX1fZnJvbWBdID0gW3VuZGVmaW5lZCwgZmllbGQudmFsaWRhdG9ycyB8fCBbXV07XG4gICAgICAgICAgZm9ybUNvbnRyb2xzW2Ake2ZpZWxkLm5hbWV9X3RvYF0gPSBbdW5kZWZpbmVkLCBmaWVsZC52YWxpZGF0b3JzIHx8IFtdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtQ29udHJvbHNbZmllbGQubmFtZV0gPSBbdW5kZWZpbmVkLCBmaWVsZC52YWxpZGF0b3JzIHx8IFtdXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICAgIHRoaXMucHJvcHMuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzXG4gICAgICAgIC5maWx0ZXIoeCA9PiB4LnR5cGUgPT09IHRoaXMudHlwZXMuU0VMRUNUIHx8IHgudHlwZSA9PT0gdGhpcy50eXBlcy5URVhUIHx8IHgudHlwZSA9PT0gdGhpcy50eXBlcy5TRUFSQ0hfU0VMRUNUIHx8IHgudHlwZSA9PT0gdGhpcy50eXBlcy5NVUxUSV9TRUxFQ1QpXG4gICAgICAgIC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICB0aGlzLnRyYWNrU2VsZWN0Q2hhbmdlcyhmaWVsZC5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyBDbGVhbnVwIHN1YnNjcmlwdGlvbnMgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHRyYWNrU2VsZWN0Q2hhbmdlcyhmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGROYW1lKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5vblNlbGVjdENoYW5nZS5lbWl0KHsgZmllbGQ6IGZpZWxkTmFtZSwgdmFsdWUgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdEhhbmRsZXIodG9rZW4/OiBzdHJpbmcpIHtcbiAgICB0aGlzLm9uU3VibWl0LmVtaXQoeyBmaWVsZHM6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLCB0b2tlbiB9KTtcbiAgfVxuXG4gIGdldENvbnRyb2woZmllbGQ6IHN0cmluZyk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5Gb3JtLmdldChmaWVsZCkgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXRGaWVsZFByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBJbnB1dE1ldGFkYXRhIHtcbiAgICBmaWVsZC50b2tlbjtcbiAgICBpZiAoIWZpZWxkLnRva2VuKSB7XG4gICAgICBmaWVsZC50b2tlbiA9IGBpbnB1dC0ke2ZpZWxkLnR5cGV9LSR7ZmllbGQubmFtZX1gO1xuICAgIH1cbiAgICBcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5OVU1CRVJfRlJPTV9UTykge1xuICAgICAgY29uc3QgZnJvbUNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woYCR7ZmllbGQubmFtZX1fZnJvbWApO1xuICAgICAgY29uc3QgdG9Db250cm9sID0gdGhpcy5nZXRDb250cm9sKGAke2ZpZWxkLm5hbWV9X3RvYCk7XG4gICAgICBcbiAgICAgIGlmIChmaWVsZC5zdGF0ZSA9PT0gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEKSB7XG4gICAgICAgIGZyb21Db250cm9sLmRpc2FibGUoKTtcbiAgICAgICAgdG9Db250cm9sLmRpc2FibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb21Db250cm9sLmVuYWJsZSgpO1xuICAgICAgICB0b0NvbnRyb2wuZW5hYmxlKCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpZWxkLFxuICAgICAgICBmcm9tQ29udHJvbCxcbiAgICAgICAgdG9Db250cm9sLFxuICAgICAgICBjb250cm9sOiB1bmRlZmluZWQsIC8vIFJlbW92ZSBjb250cm9sIGZvciBOVU1CRVJfRlJPTV9UTyBmaWVsZHNcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGQubmFtZSk7XG4gICAgICBpZiAoZmllbGQuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCkge1xuICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgY29udHJvbCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzQXRFbmRPZkZvcm0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQXRFbmQodGhpcy5lbGVtZW50UmVmKTtcbiAgfVxuXG4gIGdldCBGb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybTtcbiAgfVxuXG4gIGdldCBGb3JtU3RhdGUoKTogeyBmb3JtOiBGb3JtR3JvdXA7IGRhdGE6IEZvcm1NZXRhZGF0YSB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybTogdGhpcy5Gb3JtLFxuICAgICAgZGF0YTogdGhpcy5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGFjdGlvbnMoKTogQnV0dG9uTWV0YWRhdGFbXSB7XG4gICAgaWYgKCF0aGlzLmZvcm0pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLnByb3BzLmFjdGlvbnMuc3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zdGF0ZSA9PT0gQ29tcG9uZW50U3RhdGVzLldPUktJTkcpIHtcbiAgICAgIHRoaXMucHJvcHMuYWN0aW9ucy5zdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCkge1xuICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCkge1xuICAgICAgdGhpcy5wcm9wcy5hY3Rpb25zLnN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEO1xuICAgIH1cblxuICAgIHJldHVybiBbdGhpcy5wcm9wcy5hY3Rpb25zXTtcbiAgfVxufVxuIl19