kwikid-forms 0.3.1 → 0.3.3

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 (43) hide show
  1. package/bundles/kwikid-forms.umd.js +1398 -394
  2. package/bundles/kwikid-forms.umd.js.map +1 -1
  3. package/esm2015/lib/builder/builder.component.js +86 -67
  4. package/esm2015/lib/builder/builder.module.js +52 -7
  5. package/esm2015/lib/builder/element-config-editor/editors/basic/checkbox-config.editor.component.js +72 -0
  6. package/esm2015/lib/builder/element-config-editor/editors/basic/date-config.editor.component.js +72 -0
  7. package/esm2015/lib/builder/element-config-editor/editors/basic/number-config.editor.component.js +72 -0
  8. package/esm2015/lib/builder/element-config-editor/editors/basic/otp-config.editor.component.js +130 -0
  9. package/esm2015/lib/builder/element-config-editor/editors/basic/phone-config.editor.component.js +130 -0
  10. package/esm2015/lib/builder/element-config-editor/editors/basic/radio-config.editor.component.js +241 -147
  11. package/esm2015/lib/builder/element-config-editor/editors/basic/text-config.editor.component.js +48 -51
  12. package/esm2015/lib/builder/element-config-editor/editors/basic-element-config.editor.component.js +475 -333
  13. package/esm2015/lib/builder/element-config-editor/editors/document/aadhaar-number-config.editor.component.js +130 -0
  14. package/esm2015/lib/builder/element-config-editor/editors/document/pan-number-config.editor.component.js +135 -0
  15. package/esm2015/lib/builder/element-config-editor/editors/document-element-config.editor.component.js +610 -0
  16. package/esm2015/lib/builder/element-config-editor/editors/other/html-config.editor.component.js +120 -0
  17. package/esm2015/lib/builder/element-config-editor/editors/other/title-config.editor.component.js +121 -0
  18. package/esm2015/lib/builder/element-config-editor/editors/other-element-config.editor.component.js +214 -0
  19. package/esm2015/lib/builder/element-config-editor/element-config-editor.component.js +6 -3
  20. package/esm2015/lib/builder/shared/elements.js +33 -8
  21. package/esm2015/lib/renderer/config-converter.helper.js +1 -2
  22. package/esm2015/lib/renderer/form-view/definitions/form-view.fields.definition.js +1 -1
  23. package/esm2015/lib/renderer/form-view/form-view.component.js +28 -13
  24. package/esm2015/lib/renderer/form-view/helpers/form-view.apis.helper.js +18 -16
  25. package/esm2015/lib/renderer/renderer.component.js +1 -2
  26. package/fesm2015/kwikid-forms.js +2787 -739
  27. package/fesm2015/kwikid-forms.js.map +1 -1
  28. package/lib/builder/builder.component.d.ts +4 -0
  29. package/lib/builder/builder.module.d.ts +16 -5
  30. package/lib/builder/element-config-editor/editors/basic/checkbox-config.editor.component.d.ts +16 -0
  31. package/lib/builder/element-config-editor/editors/basic/date-config.editor.component.d.ts +16 -0
  32. package/lib/builder/element-config-editor/editors/basic/number-config.editor.component.d.ts +16 -0
  33. package/lib/builder/element-config-editor/editors/basic/otp-config.editor.component.d.ts +16 -0
  34. package/lib/builder/element-config-editor/editors/basic/phone-config.editor.component.d.ts +16 -0
  35. package/lib/builder/element-config-editor/editors/document/aadhaar-number-config.editor.component.d.ts +16 -0
  36. package/lib/builder/element-config-editor/editors/document/pan-number-config.editor.component.d.ts +16 -0
  37. package/lib/builder/element-config-editor/editors/document-element-config.editor.component.d.ts +20 -0
  38. package/lib/builder/element-config-editor/editors/other/html-config.editor.component.d.ts +16 -0
  39. package/lib/builder/element-config-editor/editors/other/title-config.editor.component.d.ts +16 -0
  40. package/lib/builder/element-config-editor/editors/other-element-config.editor.component.d.ts +20 -0
  41. package/lib/builder/shared/elements.d.ts +3 -1
  42. package/lib/renderer/form-view/definitions/form-view.fields.definition.d.ts +3 -1
  43. package/package.json +1 -1
@@ -0,0 +1,610 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, EventEmitter, Input, Output } from "@angular/core";
3
+ import { FormControl, FormGroup } from "@angular/forms";
4
+ import { logMethod } from "kwikid-toolkit";
5
+ import _ from "lodash";
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "kwikui";
8
+ import * as i2 from "./document/aadhaar-number-config.editor.component";
9
+ import * as i3 from "./document/pan-number-config.editor.component";
10
+ import * as i4 from "@angular/common";
11
+ import * as i5 from "@angular/forms";
12
+ export class DocumentElementConfigEditor {
13
+ constructor() {
14
+ this.saveClickCounter = 0;
15
+ this.elementConfig = {
16
+ label: "",
17
+ key: "",
18
+ disabled: false,
19
+ default: {
20
+ value: true
21
+ },
22
+ validators: {
23
+ min: null,
24
+ max: null,
25
+ minLength: null,
26
+ maxLength: null,
27
+ required: true
28
+ },
29
+ properties: {
30
+ placeholder: "",
31
+ readOnly: false
32
+ }
33
+ };
34
+ this.updateElement = new EventEmitter();
35
+ this.elementType = "";
36
+ this.saveDocumentClickCounter = 0;
37
+ this.documentFormGroup = undefined;
38
+ }
39
+ ngOnInit() {
40
+ this.assignVariables();
41
+ this.createDocumentFormGroup();
42
+ }
43
+ ngOnChanges(changes) {
44
+ var _a;
45
+ const verifyChange = (key) => {
46
+ return changes.hasOwnProperty(key) && !changes[key].firstChange;
47
+ };
48
+ if (verifyChange("elementConfig")) {
49
+ this.elementConfig = changes.elementConfig.currentValue;
50
+ this.assignVariables();
51
+ (_a = this.documentFormGroup) === null || _a === void 0 ? void 0 : _a.reset(this.elementConfig);
52
+ }
53
+ if (verifyChange("saveClickCounter")) {
54
+ if (changes.saveClickCounter.previousValue !==
55
+ changes.saveClickCounter.currentValue) {
56
+ this.saveClickCounter = changes.saveClickCounter.currentValue;
57
+ this.handleOnSave();
58
+ }
59
+ }
60
+ }
61
+ assignVariables() {
62
+ this.elementType = this.elementConfig.elementType;
63
+ }
64
+ createDocumentFormGroup() {
65
+ this.documentFormGroup = new FormGroup({
66
+ label: new FormControl(this.elementConfig.label),
67
+ key: new FormControl(this.elementConfig.key),
68
+ disabled: new FormControl(this.elementConfig.disabled),
69
+ default: new FormGroup({
70
+ value: new FormControl(this.elementConfig.default.value, {
71
+ updateOn: "change"
72
+ })
73
+ }),
74
+ validators: new FormGroup({
75
+ min: new FormControl(this.elementConfig.validators.min, {
76
+ updateOn: "change"
77
+ }),
78
+ minLength: new FormControl(this.elementConfig.validators.minLength, {
79
+ updateOn: "change"
80
+ }),
81
+ max: new FormControl(this.elementConfig.validators.max, {
82
+ updateOn: "change"
83
+ }),
84
+ maxLength: new FormControl(this.elementConfig.validators.maxLength, {
85
+ updateOn: "change"
86
+ }),
87
+ required: new FormControl(this.elementConfig.validators.required, {
88
+ updateOn: "change"
89
+ })
90
+ }),
91
+ properties: new FormGroup({
92
+ placeholder: new FormControl(this.elementConfig.properties.placeholder, {
93
+ updateOn: "change"
94
+ }),
95
+ readOnly: new FormControl(this.elementConfig.properties.readOnly, {
96
+ updateOn: "change"
97
+ })
98
+ })
99
+ });
100
+ this.documentFormGroup.updateValueAndValidity();
101
+ }
102
+ handleOnSaveUpdateElement(event) {
103
+ // Get Common Config
104
+ let documentElementCommonConfig = this.documentFormGroup.getRawValue();
105
+ documentElementCommonConfig.key = documentElementCommonConfig.key.replace(/\s/g, "_");
106
+ // Get Document Element Config
107
+ const documentElementConfig = event.documentElementConfig;
108
+ this.elementConfig = _.merge(this.elementConfig, documentElementCommonConfig, documentElementConfig);
109
+ this.updateElement.emit({ elementConfig: this.elementConfig });
110
+ }
111
+ handleOnSave() {
112
+ this.saveDocumentClickCounter++;
113
+ }
114
+ }
115
+ /** @nocollapse */ DocumentElementConfigEditor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DocumentElementConfigEditor, deps: [], target: i0.ɵɵFactoryTarget.Component });
116
+ /** @nocollapse */ DocumentElementConfigEditor.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: DocumentElementConfigEditor, selector: "document-element-config-editor", inputs: { saveClickCounter: "saveClickCounter", elementConfig: "elementConfig" }, outputs: { updateElement: "updateElement" }, usesOnChanges: true, ngImport: i0, template: `
117
+ <ng-container *ngIf="elementConfig !== undefined">
118
+ <kwikui-table
119
+ style="width: 100%; height: 100%; overflow: auto; box-shadow: 0px 0px 10px -6px #000; border: 0px solid gray; border-radius: 1rem;"
120
+ [columns]="['id', 'type', 'category']"
121
+ [headers]="{ id: 'ID', type: 'Type', category: 'Category' }"
122
+ [data]="[
123
+ {
124
+ id: elementConfig.elementId,
125
+ type: elementConfig.elementType,
126
+ category: elementConfig.elementCategory
127
+ }
128
+ ]"
129
+ (onClick)="(undefined)"
130
+ ></kwikui-table>
131
+ </ng-container>
132
+ <form [formGroup]="documentFormGroup">
133
+ <fieldset>
134
+ <legend class="form-group-title">Standard</legend>
135
+ <div class="form-group">
136
+ <kwikui-input
137
+ [label]="'Label'"
138
+ [id]="'document-field-label'"
139
+ [type]="'text'"
140
+ [formControlName]="'label'"
141
+ [formControl]="documentFormGroup.controls['label']"
142
+ [disabled]="false"
143
+ [placeholder]="'Please enter your Label'"
144
+ [focus]="false"
145
+ [invalid]="false"
146
+ [case]="'default'"
147
+ size="m"
148
+ ></kwikui-input>
149
+ </div>
150
+ <div class="form-group">
151
+ <kwikui-input
152
+ [label]="'Key'"
153
+ [id]="'document-field-key'"
154
+ [type]="'text'"
155
+ [formControlName]="'key'"
156
+ [formControl]="documentFormGroup.controls['key']"
157
+ [disabled]="false"
158
+ [placeholder]="'Please enter your Key'"
159
+ [focus]="false"
160
+ [invalid]="false"
161
+ [case]="'default'"
162
+ size="m"
163
+ ></kwikui-input>
164
+ </div>
165
+ <div class="form-group">
166
+ <kwikui-select-combobox
167
+ [options]="[true, false]"
168
+ [label]="'Disabled'"
169
+ [id]="'document-input-property-disabled'"
170
+ size="m"
171
+ [formControlName]="'disabled'"
172
+ [formControl]="documentFormGroup.controls['disabled']"
173
+ [focus]="false"
174
+ [disabled]="false"
175
+ [invalid]="false"
176
+ [placeholder]="'Please select either true or false'"
177
+ ></kwikui-select-combobox>
178
+ </div>
179
+ </fieldset>
180
+
181
+ <div formGroupName="default">
182
+ <fieldset>
183
+ <legend class="form-group-title">Default</legend>
184
+ <div class="form-group">
185
+ <kwikui-select-combobox
186
+ size="m"
187
+ [options]="[true, false]"
188
+ [label]="'value'"
189
+ [id]="'document-input-property-value'"
190
+ [formControlName]="'value'"
191
+ [formControl]="
192
+ documentFormGroup['controls'].default['controls'].value
193
+ "
194
+ [focus]="false"
195
+ [disabled]="false"
196
+ [invalid]="false"
197
+ [placeholder]="'Please select either true or false'"
198
+ ></kwikui-select-combobox>
199
+ </div>
200
+ </fieldset>
201
+ </div>
202
+
203
+ <div formGroupName="validators">
204
+ <fieldset>
205
+ <legend class="form-group-title">Validators</legend>
206
+ <div class="form-group">
207
+ <kwikui-input-number
208
+ [label]="'min'"
209
+ [id]="'document-input-validators-min'"
210
+ [formControlName]="'min'"
211
+ [formControl]="
212
+ documentFormGroup['controls'].validators['controls'].min
213
+ "
214
+ [disabled]="false"
215
+ [placeholder]="'Please enter your minimum value'"
216
+ [focus]="false"
217
+ [invalid]="false"
218
+ size="m"
219
+ ></kwikui-input-number>
220
+ </div>
221
+ <div class="form-group">
222
+ <kwikui-input-number
223
+ [label]="'max'"
224
+ [id]="'document-input-validators-max'"
225
+ [formControlName]="'max'"
226
+ [formControl]="
227
+ documentFormGroup['controls'].validators['controls'].max
228
+ "
229
+ [disabled]="false"
230
+ [placeholder]="'Please enter your maximum value'"
231
+ [focus]="false"
232
+ [invalid]="false"
233
+ size="m"
234
+ ></kwikui-input-number>
235
+ </div>
236
+ <div class="form-group">
237
+ <kwikui-input-number
238
+ [label]="'minLength'"
239
+ [id]="'document-input-validators-minLength'"
240
+ [formControlName]="'minLength'"
241
+ [formControl]="
242
+ documentFormGroup['controls'].validators['controls'].minLength
243
+ "
244
+ [disabled]="false"
245
+ [placeholder]="'Please enter your minimum length value'"
246
+ [focus]="false"
247
+ [invalid]="false"
248
+ size="m"
249
+ ></kwikui-input-number>
250
+ </div>
251
+ <div class="form-group">
252
+ <kwikui-input-number
253
+ [label]="'maxLength'"
254
+ [id]="'document-input-validators-maxLength'"
255
+ [formControlName]="'maxLength'"
256
+ [formControl]="
257
+ documentFormGroup['controls'].validators['controls'].maxLength
258
+ "
259
+ [disabled]="false"
260
+ [placeholder]="'Please enter your maximum length value'"
261
+ [focus]="false"
262
+ [invalid]="false"
263
+ size="m"
264
+ ></kwikui-input-number>
265
+ </div>
266
+ <div class="form-group">
267
+ <kwikui-select-combobox
268
+ size="m"
269
+ [options]="[true, false]"
270
+ [label]="'required'"
271
+ [id]="'document-input-property-required'"
272
+ [formControlName]="'required'"
273
+ [formControl]="
274
+ documentFormGroup['controls'].validators['controls'].required
275
+ "
276
+ [focus]="false"
277
+ [disabled]="false"
278
+ [invalid]="false"
279
+ [placeholder]="'Please select either true or false'"
280
+ ></kwikui-select-combobox>
281
+ </div>
282
+ </fieldset>
283
+ </div>
284
+
285
+ <div formGroupName="properties">
286
+ <fieldset>
287
+ <legend class="form-group-title">Properties</legend>
288
+ <div class="form-group">
289
+ <kwikui-input
290
+ [label]="'Placeholder'"
291
+ [id]="'document-field-placeholder'"
292
+ [type]="'text'"
293
+ [formControlName]="'placeholder'"
294
+ [formControl]="
295
+ documentFormGroup.controls.properties['controls'].placeholder
296
+ "
297
+ [disabled]="false"
298
+ [placeholder]="'Please enter your placeholder'"
299
+ [focus]="false"
300
+ [invalid]="false"
301
+ [case]="'default'"
302
+ size="m"
303
+ ></kwikui-input>
304
+ </div>
305
+ <div class="form-group">
306
+ <kwikui-select-combobox
307
+ [options]="[true, false]"
308
+ [label]="'readOnly'"
309
+ [id]="'document-input-property-readOnly'"
310
+ [formControlName]="'readOnly'"
311
+ [formControl]="
312
+ documentFormGroup['controls'].properties['controls'].readOnly
313
+ "
314
+ size="m"
315
+ [focus]="false"
316
+ [disabled]="false"
317
+ [invalid]="false"
318
+ [placeholder]="'Please select either true or false'"
319
+ ></kwikui-select-combobox>
320
+ </div>
321
+ </fieldset>
322
+ </div>
323
+
324
+ <ng-container [ngSwitch]="elementType">
325
+ <ng-container *ngSwitchCase="'aadhaar-number'">
326
+ <document-aadhaar-number-config-editor
327
+ [saveDocumentClickCounter]="saveDocumentClickCounter"
328
+ [elementConfig]="elementConfig"
329
+ (updateElement)="handleOnSaveUpdateElement($event)"
330
+ ></document-aadhaar-number-config-editor>
331
+ </ng-container>
332
+ <ng-container *ngSwitchCase="'pan-number'">
333
+ <document-pan-number-config-editor
334
+ [saveDocumentClickCounter]="saveDocumentClickCounter"
335
+ [elementConfig]="elementConfig"
336
+ (updateElement)="handleOnSaveUpdateElement($event)"
337
+ ></document-pan-number-config-editor>
338
+ </ng-container>
339
+ </ng-container>
340
+ </form>
341
+ `, isInline: true, styles: ["\n :host {\n display: flex;\n flex-direction: column;\n align-content: center;\n justify-content: flex-start;\n align-items: stretch;\n gap: 1rem;\n }\n "], components: [{ type: i1.KwikUITableComponent, selector: "kwikui-table", inputs: ["id", "columns", "headers", "data"], outputs: ["onClick"] }, { type: i1.KwikUIInputComponent, selector: "kwikui-input", inputs: ["label", "id", "type", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "validators", "case", "size", "icon", "properties"], outputs: ["getKeyValue"] }, { type: i1.KwikUISelectComboboxComponent, selector: "kwikui-select-combobox", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "options", "size", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i1.KwikUIInputNumberComponent, selector: "kwikui-input-number", inputs: ["label", "id", "formControlName", "formControl", "placeholder", "focus", "invalid", "disabled", "min", "max", "prefix", "postfix", "precision", "decimal", "size", "validators", "properties"], outputs: ["getKeyValue"] }, { type: i2.DocumentAadhaarNumberConfigEditor, selector: "document-aadhaar-number-config-editor", inputs: ["saveDocumentClickCounter", "elementConfig"], outputs: ["updateElement"] }, { type: i3.DocumentPanNumberConfigEditor, selector: "document-pan-number-config-editor", inputs: ["saveDocumentClickCounter", "elementConfig"], outputs: ["updateElement"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i5.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i5.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i4.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i4.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }] });
342
+ __decorate([
343
+ logMethod
344
+ ], DocumentElementConfigEditor.prototype, "ngOnInit", null);
345
+ __decorate([
346
+ logMethod
347
+ ], DocumentElementConfigEditor.prototype, "ngOnChanges", null);
348
+ __decorate([
349
+ logMethod
350
+ ], DocumentElementConfigEditor.prototype, "assignVariables", null);
351
+ __decorate([
352
+ logMethod
353
+ ], DocumentElementConfigEditor.prototype, "createDocumentFormGroup", null);
354
+ __decorate([
355
+ logMethod
356
+ ], DocumentElementConfigEditor.prototype, "handleOnSaveUpdateElement", null);
357
+ __decorate([
358
+ logMethod
359
+ ], DocumentElementConfigEditor.prototype, "handleOnSave", null);
360
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: DocumentElementConfigEditor, decorators: [{
361
+ type: Component,
362
+ args: [{
363
+ selector: "document-element-config-editor",
364
+ template: `
365
+ <ng-container *ngIf="elementConfig !== undefined">
366
+ <kwikui-table
367
+ style="width: 100%; height: 100%; overflow: auto; box-shadow: 0px 0px 10px -6px #000; border: 0px solid gray; border-radius: 1rem;"
368
+ [columns]="['id', 'type', 'category']"
369
+ [headers]="{ id: 'ID', type: 'Type', category: 'Category' }"
370
+ [data]="[
371
+ {
372
+ id: elementConfig.elementId,
373
+ type: elementConfig.elementType,
374
+ category: elementConfig.elementCategory
375
+ }
376
+ ]"
377
+ (onClick)="(undefined)"
378
+ ></kwikui-table>
379
+ </ng-container>
380
+ <form [formGroup]="documentFormGroup">
381
+ <fieldset>
382
+ <legend class="form-group-title">Standard</legend>
383
+ <div class="form-group">
384
+ <kwikui-input
385
+ [label]="'Label'"
386
+ [id]="'document-field-label'"
387
+ [type]="'text'"
388
+ [formControlName]="'label'"
389
+ [formControl]="documentFormGroup.controls['label']"
390
+ [disabled]="false"
391
+ [placeholder]="'Please enter your Label'"
392
+ [focus]="false"
393
+ [invalid]="false"
394
+ [case]="'default'"
395
+ size="m"
396
+ ></kwikui-input>
397
+ </div>
398
+ <div class="form-group">
399
+ <kwikui-input
400
+ [label]="'Key'"
401
+ [id]="'document-field-key'"
402
+ [type]="'text'"
403
+ [formControlName]="'key'"
404
+ [formControl]="documentFormGroup.controls['key']"
405
+ [disabled]="false"
406
+ [placeholder]="'Please enter your Key'"
407
+ [focus]="false"
408
+ [invalid]="false"
409
+ [case]="'default'"
410
+ size="m"
411
+ ></kwikui-input>
412
+ </div>
413
+ <div class="form-group">
414
+ <kwikui-select-combobox
415
+ [options]="[true, false]"
416
+ [label]="'Disabled'"
417
+ [id]="'document-input-property-disabled'"
418
+ size="m"
419
+ [formControlName]="'disabled'"
420
+ [formControl]="documentFormGroup.controls['disabled']"
421
+ [focus]="false"
422
+ [disabled]="false"
423
+ [invalid]="false"
424
+ [placeholder]="'Please select either true or false'"
425
+ ></kwikui-select-combobox>
426
+ </div>
427
+ </fieldset>
428
+
429
+ <div formGroupName="default">
430
+ <fieldset>
431
+ <legend class="form-group-title">Default</legend>
432
+ <div class="form-group">
433
+ <kwikui-select-combobox
434
+ size="m"
435
+ [options]="[true, false]"
436
+ [label]="'value'"
437
+ [id]="'document-input-property-value'"
438
+ [formControlName]="'value'"
439
+ [formControl]="
440
+ documentFormGroup['controls'].default['controls'].value
441
+ "
442
+ [focus]="false"
443
+ [disabled]="false"
444
+ [invalid]="false"
445
+ [placeholder]="'Please select either true or false'"
446
+ ></kwikui-select-combobox>
447
+ </div>
448
+ </fieldset>
449
+ </div>
450
+
451
+ <div formGroupName="validators">
452
+ <fieldset>
453
+ <legend class="form-group-title">Validators</legend>
454
+ <div class="form-group">
455
+ <kwikui-input-number
456
+ [label]="'min'"
457
+ [id]="'document-input-validators-min'"
458
+ [formControlName]="'min'"
459
+ [formControl]="
460
+ documentFormGroup['controls'].validators['controls'].min
461
+ "
462
+ [disabled]="false"
463
+ [placeholder]="'Please enter your minimum value'"
464
+ [focus]="false"
465
+ [invalid]="false"
466
+ size="m"
467
+ ></kwikui-input-number>
468
+ </div>
469
+ <div class="form-group">
470
+ <kwikui-input-number
471
+ [label]="'max'"
472
+ [id]="'document-input-validators-max'"
473
+ [formControlName]="'max'"
474
+ [formControl]="
475
+ documentFormGroup['controls'].validators['controls'].max
476
+ "
477
+ [disabled]="false"
478
+ [placeholder]="'Please enter your maximum value'"
479
+ [focus]="false"
480
+ [invalid]="false"
481
+ size="m"
482
+ ></kwikui-input-number>
483
+ </div>
484
+ <div class="form-group">
485
+ <kwikui-input-number
486
+ [label]="'minLength'"
487
+ [id]="'document-input-validators-minLength'"
488
+ [formControlName]="'minLength'"
489
+ [formControl]="
490
+ documentFormGroup['controls'].validators['controls'].minLength
491
+ "
492
+ [disabled]="false"
493
+ [placeholder]="'Please enter your minimum length value'"
494
+ [focus]="false"
495
+ [invalid]="false"
496
+ size="m"
497
+ ></kwikui-input-number>
498
+ </div>
499
+ <div class="form-group">
500
+ <kwikui-input-number
501
+ [label]="'maxLength'"
502
+ [id]="'document-input-validators-maxLength'"
503
+ [formControlName]="'maxLength'"
504
+ [formControl]="
505
+ documentFormGroup['controls'].validators['controls'].maxLength
506
+ "
507
+ [disabled]="false"
508
+ [placeholder]="'Please enter your maximum length value'"
509
+ [focus]="false"
510
+ [invalid]="false"
511
+ size="m"
512
+ ></kwikui-input-number>
513
+ </div>
514
+ <div class="form-group">
515
+ <kwikui-select-combobox
516
+ size="m"
517
+ [options]="[true, false]"
518
+ [label]="'required'"
519
+ [id]="'document-input-property-required'"
520
+ [formControlName]="'required'"
521
+ [formControl]="
522
+ documentFormGroup['controls'].validators['controls'].required
523
+ "
524
+ [focus]="false"
525
+ [disabled]="false"
526
+ [invalid]="false"
527
+ [placeholder]="'Please select either true or false'"
528
+ ></kwikui-select-combobox>
529
+ </div>
530
+ </fieldset>
531
+ </div>
532
+
533
+ <div formGroupName="properties">
534
+ <fieldset>
535
+ <legend class="form-group-title">Properties</legend>
536
+ <div class="form-group">
537
+ <kwikui-input
538
+ [label]="'Placeholder'"
539
+ [id]="'document-field-placeholder'"
540
+ [type]="'text'"
541
+ [formControlName]="'placeholder'"
542
+ [formControl]="
543
+ documentFormGroup.controls.properties['controls'].placeholder
544
+ "
545
+ [disabled]="false"
546
+ [placeholder]="'Please enter your placeholder'"
547
+ [focus]="false"
548
+ [invalid]="false"
549
+ [case]="'default'"
550
+ size="m"
551
+ ></kwikui-input>
552
+ </div>
553
+ <div class="form-group">
554
+ <kwikui-select-combobox
555
+ [options]="[true, false]"
556
+ [label]="'readOnly'"
557
+ [id]="'document-input-property-readOnly'"
558
+ [formControlName]="'readOnly'"
559
+ [formControl]="
560
+ documentFormGroup['controls'].properties['controls'].readOnly
561
+ "
562
+ size="m"
563
+ [focus]="false"
564
+ [disabled]="false"
565
+ [invalid]="false"
566
+ [placeholder]="'Please select either true or false'"
567
+ ></kwikui-select-combobox>
568
+ </div>
569
+ </fieldset>
570
+ </div>
571
+
572
+ <ng-container [ngSwitch]="elementType">
573
+ <ng-container *ngSwitchCase="'aadhaar-number'">
574
+ <document-aadhaar-number-config-editor
575
+ [saveDocumentClickCounter]="saveDocumentClickCounter"
576
+ [elementConfig]="elementConfig"
577
+ (updateElement)="handleOnSaveUpdateElement($event)"
578
+ ></document-aadhaar-number-config-editor>
579
+ </ng-container>
580
+ <ng-container *ngSwitchCase="'pan-number'">
581
+ <document-pan-number-config-editor
582
+ [saveDocumentClickCounter]="saveDocumentClickCounter"
583
+ [elementConfig]="elementConfig"
584
+ (updateElement)="handleOnSaveUpdateElement($event)"
585
+ ></document-pan-number-config-editor>
586
+ </ng-container>
587
+ </ng-container>
588
+ </form>
589
+ `,
590
+ styles: [
591
+ `
592
+ :host {
593
+ display: flex;
594
+ flex-direction: column;
595
+ align-content: center;
596
+ justify-content: flex-start;
597
+ align-items: stretch;
598
+ gap: 1rem;
599
+ }
600
+ `
601
+ ]
602
+ }]
603
+ }], ctorParameters: function () { return []; }, propDecorators: { saveClickCounter: [{
604
+ type: Input
605
+ }], elementConfig: [{
606
+ type: Input
607
+ }], updateElement: [{
608
+ type: Output
609
+ }], ngOnInit: [], ngOnChanges: [], assignVariables: [], createDocumentFormGroup: [], handleOnSaveUpdateElement: [], handleOnSave: [] } });
610
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZWxlbWVudC1jb25maWcuZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2t3aWtpZC1mb3Jtcy9zcmMvbGliL2J1aWxkZXIvZWxlbWVudC1jb25maWctZWRpdG9yL2VkaXRvcnMvZG9jdW1lbnQtZWxlbWVudC1jb25maWcuZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7QUFtUHZCLE1BQU0sT0FBTywyQkFBMkI7SUFpQ3RDO1FBL0JBLHFCQUFnQixHQUFXLENBQUMsQ0FBQztRQUc3QixrQkFBYSxHQUFRO1lBQ25CLEtBQUssRUFBRSxFQUFFO1lBQ1QsR0FBRyxFQUFFLEVBQUU7WUFDUCxRQUFRLEVBQUUsS0FBSztZQUNmLE9BQU8sRUFBRTtnQkFDUCxLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0QsVUFBVSxFQUFFO2dCQUNWLEdBQUcsRUFBRSxJQUFJO2dCQUNULEdBQUcsRUFBRSxJQUFJO2dCQUNULFNBQVMsRUFBRSxJQUFJO2dCQUNmLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFFBQVEsRUFBRSxJQUFJO2FBQ2Y7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsUUFBUSxFQUFFLEtBQUs7YUFDaEI7U0FDRixDQUFDO1FBR0Ysa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXhDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pC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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlPVDtBQWtERDtJQURDLFNBQVM7MkRBSVQ7QUFHRDtJQURDLFNBQVM7OERBc0JUO0FBR0Q7SUFEQyxTQUFTO2tFQUdUO0FBR0Q7SUFEQyxTQUFTOzBFQXlDVDtBQUdEO0lBREMsU0FBUzs0RUFtQlQ7QUFHRDtJQURDLFNBQVM7K0RBR1Q7NEZBeklVLDJCQUEyQjtrQkFqUHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdDQUFnQztvQkFDMUMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpT1Q7b0JBQ0QsTUFBTSxFQUFFO3dCQUNOOzs7Ozs7Ozs7S0FTQztxQkFDRjtpQkFDRjswRUFHQyxnQkFBZ0I7c0JBRGYsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBc0JOLGFBQWE7c0JBRFosTUFBTTtnQkFXUCxRQUFRLE1BTVIsV0FBVyxNQXdCWCxlQUFlLE1BS2YsdUJBQXVCLE1BMkN2Qix5QkFBeUIsTUFxQnpCLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBsb2dNZXRob2QgfSBmcm9tIFwia3dpa2lkLXRvb2xraXRcIjtcbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImRvY3VtZW50LWVsZW1lbnQtY29uZmlnLWVkaXRvclwiLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbGVtZW50Q29uZmlnICE9PSB1bmRlZmluZWRcIj5cbiAgICAgIDxrd2lrdWktdGFibGVcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBvdmVyZmxvdzogYXV0bzsgYm94LXNoYWRvdzogMHB4IDBweCAxMHB4IC02cHggIzAwMDsgYm9yZGVyOiAwcHggc29saWQgZ3JheTsgYm9yZGVyLXJhZGl1czogMXJlbTtcIlxuICAgICAgICBbY29sdW1uc109XCJbJ2lkJywgJ3R5cGUnLCAnY2F0ZWdvcnknXVwiXG4gICAgICAgIFtoZWFkZXJzXT1cInsgaWQ6ICdJRCcsIHR5cGU6ICdUeXBlJywgY2F0ZWdvcnk6ICdDYXRlZ29yeScgfVwiXG4gICAgICAgIFtkYXRhXT1cIltcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogZWxlbWVudENvbmZpZy5lbGVtZW50SWQsXG4gICAgICAgICAgICB0eXBlOiBlbGVtZW50Q29uZmlnLmVsZW1lbnRUeXBlLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGVsZW1lbnRDb25maWcuZWxlbWVudENhdGVnb3J5XG4gICAgICAgICAgfVxuICAgICAgICBdXCJcbiAgICAgICAgKG9uQ2xpY2spPVwiKHVuZGVmaW5lZClcIlxuICAgICAgPjwva3dpa3VpLXRhYmxlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZG9jdW1lbnRGb3JtR3JvdXBcIj5cbiAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImZvcm0tZ3JvdXAtdGl0bGVcIj5TdGFuZGFyZDwvbGVnZW5kPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxrd2lrdWktaW5wdXRcbiAgICAgICAgICAgIFtsYWJlbF09XCInTGFiZWwnXCJcbiAgICAgICAgICAgIFtpZF09XCInZG9jdW1lbnQtZmllbGQtbGFiZWwnXCJcbiAgICAgICAgICAgIFt0eXBlXT1cIid0ZXh0J1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidsYWJlbCdcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImRvY3VtZW50Rm9ybUdyb3VwLmNvbnRyb2xzWydsYWJlbCddXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIExhYmVsJ1wiXG4gICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2ludmFsaWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Nhc2VdPVwiJ2RlZmF1bHQnXCJcbiAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICA+PC9rd2lrdWktaW5wdXQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxrd2lrdWktaW5wdXRcbiAgICAgICAgICAgIFtsYWJlbF09XCInS2V5J1wiXG4gICAgICAgICAgICBbaWRdPVwiJ2RvY3VtZW50LWZpZWxkLWtleSdcIlxuICAgICAgICAgICAgW3R5cGVdPVwiJ3RleHQnXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ2tleSdcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImRvY3VtZW50Rm9ybUdyb3VwLmNvbnRyb2xzWydrZXknXVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQbGVhc2UgZW50ZXIgeW91ciBLZXknXCJcbiAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbY2FzZV09XCInZGVmYXVsdCdcIlxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgID48L2t3aWt1aS1pbnB1dD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgPGt3aWt1aS1zZWxlY3QtY29tYm9ib3hcbiAgICAgICAgICAgIFtvcHRpb25zXT1cIlt0cnVlLCBmYWxzZV1cIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidEaXNhYmxlZCdcIlxuICAgICAgICAgICAgW2lkXT1cIidkb2N1bWVudC1pbnB1dC1wcm9wZXJ0eS1kaXNhYmxlZCdcIlxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInZGlzYWJsZWQnXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJkb2N1bWVudEZvcm1Hcm91cC5jb250cm9sc1snZGlzYWJsZWQnXVwiXG4gICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGxlYXNlIHNlbGVjdCBlaXRoZXIgdHJ1ZSBvciBmYWxzZSdcIlxuICAgICAgICAgID48L2t3aWt1aS1zZWxlY3QtY29tYm9ib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWVsZHNldD5cblxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwiZGVmYXVsdFwiPlxuICAgICAgICA8ZmllbGRzZXQ+XG4gICAgICAgICAgPGxlZ2VuZCBjbGFzcz1cImZvcm0tZ3JvdXAtdGl0bGVcIj5EZWZhdWx0PC9sZWdlbmQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxrd2lrdWktc2VsZWN0LWNvbWJvYm94XG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiW3RydWUsIGZhbHNlXVwiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCIndmFsdWUnXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidkb2N1bWVudC1pbnB1dC1wcm9wZXJ0eS12YWx1ZSdcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIid2YWx1ZSdcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRGb3JtR3JvdXBbJ2NvbnRyb2xzJ10uZGVmYXVsdFsnY29udHJvbHMnXS52YWx1ZVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGxlYXNlIHNlbGVjdCBlaXRoZXIgdHJ1ZSBvciBmYWxzZSdcIlxuICAgICAgICAgICAgPjwva3dpa3VpLXNlbGVjdC1jb21ib2JveD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9maWVsZHNldD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJ2YWxpZGF0b3JzXCI+XG4gICAgICAgIDxmaWVsZHNldD5cbiAgICAgICAgICA8bGVnZW5kIGNsYXNzPVwiZm9ybS1ncm91cC10aXRsZVwiPlZhbGlkYXRvcnM8L2xlZ2VuZD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGt3aWt1aS1pbnB1dC1udW1iZXJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidtaW4nXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidkb2N1bWVudC1pbnB1dC12YWxpZGF0b3JzLW1pbidcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidtaW4nXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIlxuICAgICAgICAgICAgICAgIGRvY3VtZW50Rm9ybUdyb3VwWydjb250cm9scyddLnZhbGlkYXRvcnNbJ2NvbnRyb2xzJ10ubWluXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInUGxlYXNlIGVudGVyIHlvdXIgbWluaW11bSB2YWx1ZSdcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCInbWF4J1wiXG4gICAgICAgICAgICAgIFtpZF09XCInZG9jdW1lbnQtaW5wdXQtdmFsaWRhdG9ycy1tYXgnXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInbWF4J1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcbiAgICAgICAgICAgICAgICBkb2N1bWVudEZvcm1Hcm91cFsnY29udHJvbHMnXS52YWxpZGF0b3JzWydjb250cm9scyddLm1heFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIG1heGltdW0gdmFsdWUnXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICA+PC9rd2lrdWktaW5wdXQtbnVtYmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0LW51bWJlclxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ21pbkxlbmd0aCdcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ2RvY3VtZW50LWlucHV0LXZhbGlkYXRvcnMtbWluTGVuZ3RoJ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ21pbkxlbmd0aCdcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRGb3JtR3JvdXBbJ2NvbnRyb2xzJ10udmFsaWRhdG9yc1snY29udHJvbHMnXS5taW5MZW5ndGhcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQbGVhc2UgZW50ZXIgeW91ciBtaW5pbXVtIGxlbmd0aCB2YWx1ZSdcIlxuICAgICAgICAgICAgICBbZm9jdXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbaW52YWxpZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1pbnB1dC1udW1iZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxrd2lrdWktaW5wdXQtbnVtYmVyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCInbWF4TGVuZ3RoJ1wiXG4gICAgICAgICAgICAgIFtpZF09XCInZG9jdW1lbnQtaW5wdXQtdmFsaWRhdG9ycy1tYXhMZW5ndGgnXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCInbWF4TGVuZ3RoJ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcbiAgICAgICAgICAgICAgICBkb2N1bWVudEZvcm1Hcm91cFsnY29udHJvbHMnXS52YWxpZGF0b3JzWydjb250cm9scyddLm1heExlbmd0aFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIG1heGltdW0gbGVuZ3RoIHZhbHVlJ1wiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0LW51bWJlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGt3aWt1aS1zZWxlY3QtY29tYm9ib3hcbiAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJbdHJ1ZSwgZmFsc2VdXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidyZXF1aXJlZCdcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ2RvY3VtZW50LWlucHV0LXByb3BlcnR5LXJlcXVpcmVkJ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3JlcXVpcmVkJ1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcbiAgICAgICAgICAgICAgICBkb2N1bWVudEZvcm1Hcm91cFsnY29udHJvbHMnXS52YWxpZGF0b3JzWydjb250cm9scyddLnJlcXVpcmVkXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidQbGVhc2Ugc2VsZWN0IGVpdGhlciB0cnVlIG9yIGZhbHNlJ1wiXG4gICAgICAgICAgICA+PC9rd2lrdWktc2VsZWN0LWNvbWJvYm94PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cInByb3BlcnRpZXNcIj5cbiAgICAgICAgPGZpZWxkc2V0PlxuICAgICAgICAgIDxsZWdlbmQgY2xhc3M9XCJmb3JtLWdyb3VwLXRpdGxlXCI+UHJvcGVydGllczwvbGVnZW5kPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8a3dpa3VpLWlucHV0XG4gICAgICAgICAgICAgIFtsYWJlbF09XCInUGxhY2Vob2xkZXInXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidkb2N1bWVudC1maWVsZC1wbGFjZWhvbGRlcidcIlxuICAgICAgICAgICAgICBbdHlwZV09XCIndGV4dCdcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIidwbGFjZWhvbGRlcidcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRGb3JtR3JvdXAuY29udHJvbHMucHJvcGVydGllc1snY29udHJvbHMnXS5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBlbnRlciB5b3VyIHBsYWNlaG9sZGVyJ1wiXG4gICAgICAgICAgICAgIFtmb2N1c109XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtpbnZhbGlkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Nhc2VdPVwiJ2RlZmF1bHQnXCJcbiAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgPjwva3dpa3VpLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8a3dpa3VpLXNlbGVjdC1jb21ib2JveFxuICAgICAgICAgICAgICBbb3B0aW9uc109XCJbdHJ1ZSwgZmFsc2VdXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidyZWFkT25seSdcIlxuICAgICAgICAgICAgICBbaWRdPVwiJ2RvY3VtZW50LWlucHV0LXByb3BlcnR5LXJlYWRPbmx5J1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiJ3JlYWRPbmx5J1wiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJcbiAgICAgICAgICAgICAgICBkb2N1bWVudEZvcm1Hcm91cFsnY29udHJvbHMnXS5wcm9wZXJ0aWVzWydjb250cm9scyddLnJlYWRPbmx5XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgW2ZvY3VzXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW2ludmFsaWRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1BsZWFzZSBzZWxlY3QgZWl0aGVyIHRydWUgb3IgZmFsc2UnXCJcbiAgICAgICAgICAgID48L2t3aWt1aS1zZWxlY3QtY29tYm9ib3g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiZWxlbWVudFR5cGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2FhZGhhYXItbnVtYmVyJ1wiPlxuICAgICAgICAgIDxkb2N1bWVudC1hYWRoYWFyLW51bWJlci1jb25maWctZWRpdG9yXG4gICAgICAgICAgICBbc2F2ZURvY3VtZW50Q2xpY2tDb3VudGVyXT1cInNhdmVEb2N1bWVudENsaWNrQ291bnRlclwiXG4gICAgICAgICAgICBbZWxlbWVudENvbmZpZ109XCJlbGVtZW50Q29uZmlnXCJcbiAgICAgICAgICAgICh1cGRhdGVFbGVtZW50KT1cImhhbmRsZU9uU2F2ZVVwZGF0ZUVsZW1lbnQoJGV2ZW50KVwiXG4gICAgICAgICAgPjwvZG9jdW1lbnQtYWFkaGFhci1udW1iZXItY29uZmlnLWVkaXRvcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidwYW4tbnVtYmVyJ1wiPlxuICAgICAgICAgIDxkb2N1bWVudC1wYW4tbnVtYmVyLWNvbmZpZy1lZGl0b3JcbiAgICAgICAgICAgIFtzYXZlRG9jdW1lbnRDbGlja0NvdW50ZXJdPVwic2F2ZURvY3VtZW50Q2xpY2tDb3VudGVyXCJcbiAgICAgICAgICAgIFtlbGVtZW50Q29uZmlnXT1cImVsZW1lbnRDb25maWdcIlxuICAgICAgICAgICAgKHVwZGF0ZUVsZW1lbnQpPVwiaGFuZGxlT25TYXZlVXBkYXRlRWxlbWVudCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9kb2N1bWVudC1wYW4tbnVtYmVyLWNvbmZpZy1lZGl0b3I+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9mb3JtPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgZ2FwOiAxcmVtO1xuICAgICAgfVxuICAgIGBcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudEVsZW1lbnRDb25maWdFZGl0b3IgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKVxuICBzYXZlQ2xpY2tDb3VudGVyOiBudW1iZXIgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIGVsZW1lbnRDb25maWc6IGFueSA9IHtcbiAgICBsYWJlbDogXCJcIixcbiAgICBrZXk6IFwiXCIsXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHZhbHVlOiB0cnVlXG4gICAgfSxcbiAgICB2YWxpZGF0b3JzOiB7XG4gICAgICBtaW46IG51bGwsXG4gICAgICBtYXg6IG51bGwsXG4gICAgICBtaW5MZW5ndGg6IG51bGwsXG4gICAgICBtYXhMZW5ndGg6IG51bGwsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgcHJvcGVydGllczoge1xuICAgICAgcGxhY2Vob2xkZXI6IFwiXCIsXG4gICAgICByZWFkT25seTogZmFsc2VcbiAgICB9XG4gIH07XG5cbiAgQE91dHB1dCgpXG4gIHVwZGF0ZUVsZW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBlbGVtZW50VHlwZTogc3RyaW5nID0gXCJcIjtcbiAgc2F2ZURvY3VtZW50Q2xpY2tDb3VudGVyOiBudW1iZXIgPSAwO1xuXG4gIGRvY3VtZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXAgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIEBsb2dNZXRob2RcbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5hc3NpZ25WYXJpYWJsZXMoKTtcbiAgICB0aGlzLmNyZWF0ZURvY3VtZW50Rm9ybUdyb3VwKCk7XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCB2ZXJpZnlDaGFuZ2UgPSAoa2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBjaGFuZ2VzLmhhc093blByb3BlcnR5KGtleSkgJiYgIWNoYW5nZXNba2V5XS5maXJzdENoYW5nZTtcbiAgICB9O1xuXG4gICAgaWYgKHZlcmlmeUNoYW5nZShcImVsZW1lbnRDb25maWdcIikpIHtcbiAgICAgIHRoaXMuZWxlbWVudENvbmZpZyA9IGNoYW5nZXMuZWxlbWVudENvbmZpZy5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLmFzc2lnblZhcmlhYmxlcygpO1xuICAgICAgdGhpcy5kb2N1bWVudEZvcm1Hcm91cD8ucmVzZXQodGhpcy5lbGVtZW50Q29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAodmVyaWZ5Q2hhbmdlKFwic2F2ZUNsaWNrQ291bnRlclwiKSkge1xuICAgICAgaWYgKFxuICAgICAgICBjaGFuZ2VzLnNhdmVDbGlja0NvdW50ZXIucHJldmlvdXNWYWx1ZSAhPT1cbiAgICAgICAgY2hhbmdlcy5zYXZlQ2xpY2tDb3VudGVyLmN1cnJlbnRWYWx1ZVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2F2ZUNsaWNrQ291bnRlciA9IGNoYW5nZXMuc2F2ZUNsaWNrQ291bnRlci5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgdGhpcy5oYW5kbGVPblNhdmUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAbG9nTWV0aG9kXG4gIGFzc2lnblZhcmlhYmxlcygpIHtcbiAgICB0aGlzLmVsZW1lbnRUeXBlID0gdGhpcy5lbGVtZW50Q29uZmlnLmVsZW1lbnRUeXBlO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBjcmVhdGVEb2N1bWVudEZvcm1Hcm91cCgpIHtcbiAgICB0aGlzLmRvY3VtZW50Rm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBsYWJlbDogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy5sYWJlbCksXG4gICAgICBrZXk6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcua2V5KSxcbiAgICAgIGRpc2FibGVkOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLmRpc2FibGVkKSxcbiAgICAgIGRlZmF1bHQ6IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICB2YWx1ZTogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy5kZWZhdWx0LnZhbHVlLCB7XG4gICAgICAgICAgdXBkYXRlT246IFwiY2hhbmdlXCJcbiAgICAgICAgfSlcbiAgICAgIH0pLFxuICAgICAgdmFsaWRhdG9yczogbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIG1pbjogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy52YWxpZGF0b3JzLm1pbiwge1xuICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgIH0pLFxuICAgICAgICBtaW5MZW5ndGg6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVsZW1lbnRDb25maWcudmFsaWRhdG9ycy5taW5MZW5ndGgsIHtcbiAgICAgICAgICB1cGRhdGVPbjogXCJjaGFuZ2VcIlxuICAgICAgICB9KSxcbiAgICAgICAgbWF4OiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLnZhbGlkYXRvcnMubWF4LCB7XG4gICAgICAgICAgdXBkYXRlT246IFwiY2hhbmdlXCJcbiAgICAgICAgfSksXG4gICAgICAgIG1heExlbmd0aDogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy52YWxpZGF0b3JzLm1heExlbmd0aCwge1xuICAgICAgICAgIHVwZGF0ZU9uOiBcImNoYW5nZVwiXG4gICAgICAgIH0pLFxuICAgICAgICByZXF1aXJlZDogbmV3IEZvcm1Db250cm9sKHRoaXMuZWxlbWVudENvbmZpZy52YWxpZGF0b3JzLnJlcXVpcmVkLCB7XG4gICAgICAgICAgdXBkYXRlT246IFwiY2hhbmdlXCJcbiAgICAgICAgfSlcbiAgICAgIH0pLFxuICAgICAgcHJvcGVydGllczogbmV3IEZvcm1Hcm91cCh7XG4gICAgICAgIHBsYWNlaG9sZGVyOiBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgdGhpcy5lbGVtZW50Q29uZmlnLnByb3BlcnRpZXMucGxhY2Vob2xkZXIsXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXBkYXRlT246IFwiY2hhbmdlXCJcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHJlYWRPbmx5OiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbGVtZW50Q29uZmlnLnByb3BlcnRpZXMucmVhZE9ubHksIHtcbiAgICAgICAgICB1cGRhdGVPbjogXCJjaGFuZ2VcIlxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9KTtcbiAgICB0aGlzLmRvY3VtZW50Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIEBsb2dNZXRob2RcbiAgaGFuZGxlT25TYXZlVXBkYXRlRWxlbWVudChldmVudDogYW55KSB7XG4gICAgLy8gR2V0IENvbW1vbiBDb25maWdcbiAgICBsZXQgZG9jdW1lbnRFbGVtZW50Q29tbW9uQ29uZmlnID0gdGhpcy5kb2N1bWVudEZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgIGRvY3VtZW50RWxlbWVudENvbW1vbkNvbmZpZy5rZXkgPSBkb2N1bWVudEVsZW1lbnRDb21tb25Db25maWcua2V5LnJlcGxhY2UoXG4gICAgICAvXFxzL2csXG4gICAgICBcIl9cIlxuICAgICk7XG5cbiAgICAvLyBHZXQgRG9jdW1lbnQgRWxlbWVudCBDb25maWdcbiAgICBjb25zdCBkb2N1bWVudEVsZW1lbnRDb25maWcgPSBldmVudC5kb2N1bWVudEVsZW1lbnRDb25maWc7XG5cbiAgICB0aGlzLmVsZW1lbnRDb25maWcgPSBfLm1lcmdlKFxuICAgICAgdGhpcy5lbGVtZW50Q29uZmlnLFxuICAgICAgZG9jdW1lbnRFbGVtZW50Q29tbW9uQ29uZmlnLFxuICAgICAgZG9jdW1lbnRFbGVtZW50Q29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMudXBkYXRlRWxlbWVudC5lbWl0KHsgZWxlbWVudENvbmZpZzogdGhpcy5lbGVtZW50Q29uZmlnIH0pO1xuICB9XG5cbiAgQGxvZ01ldGhvZFxuICBoYW5kbGVPblNhdmUoKSB7XG4gICAgdGhpcy5zYXZlRG9jdW1lbnRDbGlja0NvdW50ZXIrKztcbiAgfVxufVxuIl19