fx-form-builder-wrapper 2.0.81 → 2.0.83

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 (20) hide show
  1. package/esm2022/lib/components/date-picker/date-picker.component.mjs +3 -3
  2. package/esm2022/lib/components/dropdown-with-other/dropdown-with-other.component.mjs +5 -3
  3. package/esm2022/lib/components/dropdown-with-search/dropdown-with-search.component.mjs +129 -0
  4. package/esm2022/lib/components/fx-form-component/fx-form-component.component.mjs +5 -1
  5. package/esm2022/lib/components/multiselect-dropdown/multiselect-dropdown.component.mjs +5 -3
  6. package/esm2022/lib/components/multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component.mjs +9 -3
  7. package/esm2022/lib/components/multiselect-with-form-fields/customize-dropdown.component.mjs +243 -0
  8. package/esm2022/lib/components/multiselect-with-form-fields/multiselect-dropdown.component.mjs +166 -0
  9. package/esm2022/lib/components/radio-group/radio-group.component.mjs +8 -3
  10. package/esm2022/lib/fx-builder-wrapper.component.mjs +9 -1
  11. package/fesm2022/fx-form-builder-wrapper.mjs +149 -10
  12. package/fesm2022/fx-form-builder-wrapper.mjs.map +1 -1
  13. package/lib/components/dropdown-with-other/dropdown-with-other.component.d.ts +1 -0
  14. package/lib/components/dropdown-with-search/dropdown-with-search.component.d.ts +29 -0
  15. package/lib/components/multiselect-dropdown/multiselect-dropdown.component.d.ts +1 -0
  16. package/lib/components/multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component.d.ts +3 -0
  17. package/lib/components/multiselect-with-form-fields/customize-dropdown.component.d.ts +59 -0
  18. package/lib/components/multiselect-with-form-fields/multiselect-dropdown.component.d.ts +51 -0
  19. package/lib/components/radio-group/radio-group.component.d.ts +2 -0
  20. package/package.json +1 -1
@@ -0,0 +1,166 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, HostListener } from '@angular/core';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { FxBaseComponent, FxComponent, FxSelectSetting, FxStringSetting, FxValidatorService } from '@instantsys-labs/fx';
5
+ import { Subject, takeUntil } from 'rxjs';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common/http";
8
+ import * as i2 from "../../fx-builder-wrapper.service";
9
+ import * as i3 from "@instantsys-labs/core";
10
+ import * as i4 from "@angular/forms";
11
+ import * as i5 from "@angular/common";
12
+ export class MultiselectDropdownComponentForm extends FxBaseComponent {
13
+ cdr;
14
+ http;
15
+ fxBuilderWrapperService;
16
+ fxApiService;
17
+ fb;
18
+ eRef;
19
+ form;
20
+ dropdownOpen = false;
21
+ searchTerm = '';
22
+ placeholder = 'Select items';
23
+ destroy$ = new Subject();
24
+ formObject = {};
25
+ options = [
26
+ { label: 'Option 1', value: 'opt1', selected: false },
27
+ { label: 'Option 2', value: 'opt2', selected: false },
28
+ { label: 'Option 3', value: 'opt3', selected: false },
29
+ { label: 'Option 4', value: 'opt4', selected: false },
30
+ { label: 'Option 5', value: 'opt5', selected: false },
31
+ ];
32
+ constructor(cdr, http, fxBuilderWrapperService, fxApiService, fb, eRef) {
33
+ super(cdr);
34
+ this.cdr = cdr;
35
+ this.http = http;
36
+ this.fxBuilderWrapperService = fxBuilderWrapperService;
37
+ this.fxApiService = fxApiService;
38
+ this.fb = fb;
39
+ this.eRef = eRef;
40
+ this.form = this.fb.group({
41
+ selectedOptionsMultiForm: [[], arrayRequiredValidator]
42
+ });
43
+ this.onInit.subscribe(() => this._register(this.form));
44
+ }
45
+ /** Close dropdown when clicking outside */
46
+ onClickOutside(event) {
47
+ if (this.dropdownOpen && !this.eRef.nativeElement.contains(event.target)) {
48
+ this.dropdownOpen = false;
49
+ this.cdr.detectChanges();
50
+ }
51
+ }
52
+ ngOnInit() {
53
+ this.fxBuilderWrapperService.variables$
54
+ .pipe(takeUntil(this.destroy$))
55
+ .subscribe((variables) => {
56
+ console.log("Variables");
57
+ // If your variables or settings change at runtime and you want to re-evaluate:
58
+ this.applyValidation();
59
+ });
60
+ const serviceUrl = this.fxApiService.getServiceUrl(this.setting('serviceName'));
61
+ this.getOptions(serviceUrl, this.setting('clinicalNotesURL'));
62
+ }
63
+ getOptions(serviceUrl, url) {
64
+ const finalUrl = serviceUrl + url;
65
+ this.http.get(finalUrl).subscribe({
66
+ next: (response) => {
67
+ // Future API logic here
68
+ },
69
+ error: (err) => console.error('Error fetching options', err)
70
+ });
71
+ }
72
+ toggleDropdown() {
73
+ this.dropdownOpen = !this.dropdownOpen;
74
+ if (this.dropdownOpen)
75
+ this.searchTerm = '';
76
+ }
77
+ /** Filter options based on search term */
78
+ get filteredOptions() {
79
+ const term = this.searchTerm.toLowerCase();
80
+ return this.options.filter(opt => opt.label.toLowerCase().includes(term));
81
+ }
82
+ toggleOption(option, event) {
83
+ event.stopPropagation();
84
+ option.selected = !option.selected;
85
+ this.updateSelectedValues();
86
+ }
87
+ /** Update reactive form with selected items */
88
+ updateSelectedValues() {
89
+ const selectedValues = this.options
90
+ .filter(o => o.selected)
91
+ .map(o => ({ label: o.label, value: o.value }));
92
+ this.form.patchValue({ selectedOptionsMultiForm: selectedValues }, { emitEvent: false });
93
+ }
94
+ /** Placeholder / Display logic */
95
+ get selectedLabel() {
96
+ const selected = this.options.filter(o => o.selected).map(o => o.label);
97
+ if (selected.length === 0)
98
+ return this.placeholder = this.setting('placeholderLabel') ?? this.placeholder;
99
+ const maxCount = this.setting('displayMode') === 'compact' ? 2 : 3;
100
+ if (this.setting('displayMode') === 'compact') {
101
+ return selected.length <= maxCount
102
+ ? selected.join(', ')
103
+ : `${selected.slice(0, maxCount).join(', ')} +${selected.length - maxCount} more`;
104
+ }
105
+ if (this.setting('displayMode') === 'ellipsis') {
106
+ return selected.length > maxCount
107
+ ? `${selected.slice(0, maxCount).join(', ')}, ...`
108
+ : selected.join(', ');
109
+ }
110
+ return selected.join(', ');
111
+ }
112
+ onSubmit() {
113
+ console.log('Form Value:', this.form.value);
114
+ }
115
+ get getDropdownSearch() {
116
+ return this.setting('dropDownSearch');
117
+ }
118
+ /**
119
+ * Apply or remove the array-required validator depending on the FX setting.
120
+ */
121
+ applyValidation() {
122
+ const control = this.form.get('selectedOptionsMultiForm');
123
+ console.log(this.form);
124
+ const shouldRequire = this.setting('validationRequired') === 'yes';
125
+ if (!control)
126
+ return;
127
+ if (shouldRequire) {
128
+ control.setValidators(arrayRequiredValidator);
129
+ }
130
+ else {
131
+ control.clearValidators();
132
+ }
133
+ // Recompute validity after changing validators
134
+ control.updateValueAndValidity({ emitEvent: false });
135
+ }
136
+ settings() {
137
+ return [
138
+ new FxSelectSetting({ key: 'displayMode', $title: 'Display Mode', value: 'ellipsis' }, [{ option: 'Ellipsis', value: 'ellipsis' }, { option: 'Compact', value: 'compact' }]),
139
+ new FxSelectSetting({ key: 'validationRequired', $title: 'Validation Required', value: 'yes' }, [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }]),
140
+ new FxSelectSetting({ key: 'dropDownSearch', $title: 'Dropdown Search', value: 'yes' }, [{ option: 'Yes', value: 'yes' }, { option: 'No', value: 'no' }]),
141
+ new FxStringSetting({ key: 'placeholderLabel', $title: 'Placeholder', value: 'Select Options' }),
142
+ new FxSelectSetting({ key: 'serviceName', $title: 'Service', value: '' }, [{ option: 'User Service', value: 'user_service' }, { option: 'Patient Service', value: 'patient_service' }, { option: 'Workflow Service', value: 'workflow_service' }]),
143
+ new FxStringSetting({ key: 'errorMessage', $title: 'Error Message', value: 'Please select at least one option' }),
144
+ ];
145
+ }
146
+ validations() {
147
+ return [FxValidatorService.required];
148
+ }
149
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultiselectDropdownComponentForm, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.FxBuilderWrapperService }, { token: i3.ApiServiceRegistry }, { token: i4.FormBuilder }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
150
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MultiselectDropdownComponentForm, isStandalone: true, selector: "multiselect-dropdown-form", host: { listeners: { "document:click": "onClickOutside($event)" } }, usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"container\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit();\" class=\"relative\">\r\n <!-- Dropdown header -->\r\n <div class=\"dropdown\" #dropdownWrapper class=\"relative w-80\">\r\n <button type=\"button\" class=\"dropdown-header\" (click)=\"toggleDropdown()\">\r\n <span>{{ selectedLabel }}</span>\r\n <span class=\"arrow\" [class.open]=\"dropdownOpen\">&#9662;</span>\r\n </button>\r\n\r\n <!-- Dropdown panel -->\r\n <div *ngIf=\"dropdownOpen\" class=\"dropdown-panel\">\r\n <!-- Search -->\r\n <div class=\"search-box\" *ngIf=\"getDropdownSearch === 'yes';\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search...\"\r\n [(ngModel)]=\"searchTerm\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"search-input\"\r\n />\r\n </div>\r\n\r\n <!-- Options -->\r\n <ng-container *ngIf=\"filteredOptions.length > 0; else noRecords\">\r\n <div\r\n *ngFor=\"let option of filteredOptions\"\r\n class=\"dropdown-item\"\r\n (click)=\"toggleOption(option, $event)\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [(ngModel)]=\"option.selected\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"checkbox\"\r\n />\r\n <label class=\"option-label\">{{ option.label }}</label>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- No Records Template -->\r\n <ng-template #noRecords>\r\n <div class=\"no-records\">\r\n {{ searchTerm ? 'No records found' : 'No options available' }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <small\r\n *ngIf=\"form.get('selectedOptionsMultiForm')?.touched && form.get('selectedOptionsMultiForm')?.errors?.['required']\"\r\n class=\"text-red-500 block mt-1\"\r\n >\r\n {{ setting('errorMessage') }}\r\n </small>\r\n </form>\r\n </div>\r\n</fx-component>\r\n", styles: [".container{width:300px}.dropdown{position:relative;-webkit-user-select:none;user-select:none}.dropdown-header{border:1px solid #ccc;border-radius:4px;padding:6px 8px;background-color:#fff;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.dropdown-header:hover{border-color:#007bff}.arrow{font-size:10px;color:#555;transition:transform .2s}.arrow.open{transform:rotate(180deg)}.dropdown-panel{position:absolute;width:100%;background:#fff;border:1px solid #ddd;margin-top:4px;border-radius:4px;max-height:250px;overflow-y:auto;z-index:1000;box-shadow:0 2px 8px #0000001a}.search-box{padding:6px;border-bottom:1px solid #eee}.search-input{width:100%;padding:5px;border:1px solid #ccc;border-radius:4px;outline:none}.dropdown-item{padding:6px 8px;display:flex;align-items:center;gap:8px;cursor:pointer}.dropdown-item:hover{background-color:#f8f9fa}.checkbox{cursor:pointer}.option-label{cursor:pointer;flex-grow:1}.submit-btn{margin-top:1rem;padding:6px 12px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer}.no-records{text-align:center;padding:10px;color:#888;font-size:13px;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }] });
151
+ }
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultiselectDropdownComponentForm, decorators: [{
153
+ type: Component,
154
+ args: [{ selector: 'multiselect-dropdown-form', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent], template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div class=\"container\">\r\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit();\" class=\"relative\">\r\n <!-- Dropdown header -->\r\n <div class=\"dropdown\" #dropdownWrapper class=\"relative w-80\">\r\n <button type=\"button\" class=\"dropdown-header\" (click)=\"toggleDropdown()\">\r\n <span>{{ selectedLabel }}</span>\r\n <span class=\"arrow\" [class.open]=\"dropdownOpen\">&#9662;</span>\r\n </button>\r\n\r\n <!-- Dropdown panel -->\r\n <div *ngIf=\"dropdownOpen\" class=\"dropdown-panel\">\r\n <!-- Search -->\r\n <div class=\"search-box\" *ngIf=\"getDropdownSearch === 'yes';\">\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search...\"\r\n [(ngModel)]=\"searchTerm\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"search-input\"\r\n />\r\n </div>\r\n\r\n <!-- Options -->\r\n <ng-container *ngIf=\"filteredOptions.length > 0; else noRecords\">\r\n <div\r\n *ngFor=\"let option of filteredOptions\"\r\n class=\"dropdown-item\"\r\n (click)=\"toggleOption(option, $event)\"\r\n >\r\n <input\r\n type=\"checkbox\"\r\n [(ngModel)]=\"option.selected\"\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n class=\"checkbox\"\r\n />\r\n <label class=\"option-label\">{{ option.label }}</label>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- No Records Template -->\r\n <ng-template #noRecords>\r\n <div class=\"no-records\">\r\n {{ searchTerm ? 'No records found' : 'No options available' }}\r\n </div>\r\n </ng-template>\r\n </div>\r\n </div>\r\n\r\n <small\r\n *ngIf=\"form.get('selectedOptionsMultiForm')?.touched && form.get('selectedOptionsMultiForm')?.errors?.['required']\"\r\n class=\"text-red-500 block mt-1\"\r\n >\r\n {{ setting('errorMessage') }}\r\n </small>\r\n </form>\r\n </div>\r\n</fx-component>\r\n", styles: [".container{width:300px}.dropdown{position:relative;-webkit-user-select:none;user-select:none}.dropdown-header{border:1px solid #ccc;border-radius:4px;padding:6px 8px;background-color:#fff;cursor:pointer;display:flex;justify-content:space-between;align-items:center}.dropdown-header:hover{border-color:#007bff}.arrow{font-size:10px;color:#555;transition:transform .2s}.arrow.open{transform:rotate(180deg)}.dropdown-panel{position:absolute;width:100%;background:#fff;border:1px solid #ddd;margin-top:4px;border-radius:4px;max-height:250px;overflow-y:auto;z-index:1000;box-shadow:0 2px 8px #0000001a}.search-box{padding:6px;border-bottom:1px solid #eee}.search-input{width:100%;padding:5px;border:1px solid #ccc;border-radius:4px;outline:none}.dropdown-item{padding:6px 8px;display:flex;align-items:center;gap:8px;cursor:pointer}.dropdown-item:hover{background-color:#f8f9fa}.checkbox{cursor:pointer}.option-label{cursor:pointer;flex-grow:1}.submit-btn{margin-top:1rem;padding:6px 12px;background:#007bff;color:#fff;border:none;border-radius:4px;cursor:pointer}.no-records{text-align:center;padding:10px;color:#888;font-size:13px;-webkit-user-select:none;user-select:none}\n"] }]
155
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.FxBuilderWrapperService }, { type: i3.ApiServiceRegistry }, { type: i4.FormBuilder }, { type: i0.ElementRef }], propDecorators: { onClickOutside: [{
156
+ type: HostListener,
157
+ args: ['document:click', ['$event']]
158
+ }] } });
159
+ function arrayRequiredValidator(control) {
160
+ const value = control.value;
161
+ if (Array.isArray(value) && value.length === 0) {
162
+ return { required: true };
163
+ }
164
+ return null;
165
+ }
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGlzZWxlY3QtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy9tdWx0aXNlbGVjdC13aXRoLWZvcm0tZmllbGRzL211bHRpc2VsZWN0LWRyb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Z4LWJ1aWxkZXItd3JhcHBlci9zcmMvbGliL2NvbXBvbmVudHMvbXVsdGlzZWxlY3Qtd2l0aC1mb3JtLWZpZWxkcy9tdWx0aXNlbGVjdC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFxQixTQUFTLEVBQXVCLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQTBCLFdBQVcsRUFBRSxtQkFBbUIsRUFBaUQsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6SSxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFnQixrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xKLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7O0FBZ0IxQyxNQUFNLE9BQU8sZ0NBQWlDLFNBQVEsZUFBZTtJQWlCekQ7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBckJWLElBQUksQ0FBYTtJQUNqQixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFDaEIsV0FBVyxHQUFHLGNBQWMsQ0FBQztJQUNyQixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztJQUMxQyxVQUFVLEdBQVcsRUFBRSxDQUFDO0lBRXhCLE9BQU8sR0FB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QUVTLFdBQVc7UUFDbkIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7d0dBdEpVLGdDQUFnQzs0RkFBaEMsZ0NBQWdDLGlMQ3RCN0Msd3ZGQTBEQSw0c0NEeENZLFlBQVksK1BBQUUsbUJBQW1CLDY5QkFBRSxXQUFXLHVQQUFFLFdBQVc7OzRGQUkxRCxnQ0FBZ0M7a0JBUDVDLFNBQVM7K0JBQ0UsMkJBQTJCLGNBQ3pCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO3lPQXFDdEUsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDOztBQXlINUMsU0FBUyxzQkFBc0IsQ0FBQyxPQUF3QjtJQUN0RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzVCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIERvQ2hlY2ssIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBWYWxpZGF0b3JzLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFwaVNlcnZpY2VSZWdpc3RyeSB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvY29yZSc7XHJcbmltcG9ydCB7IEZ4QmFzZUNvbXBvbmVudCwgRnhDb21wb25lbnQsIEZ4U2VsZWN0U2V0dGluZywgRnhTZXR0aW5nLCBGeFN0cmluZ1NldHRpbmcsIEZ4VmFsaWRhdGlvbiwgRnhWYWxpZGF0b3JTZXJ2aWNlIH0gZnJvbSAnQGluc3RhbnRzeXMtbGFicy9meCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSB9IGZyb20gJy4uLy4uL2Z4LWJ1aWxkZXItd3JhcHBlci5zZXJ2aWNlJztcclxuXHJcbmludGVyZmFjZSBNdWx0aVNlbGVjdE9wdGlvbiB7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkOiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ211bHRpc2VsZWN0LWRyb3Bkb3duLWZvcm0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUsIEZ4Q29tcG9uZW50XSxcclxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGlzZWxlY3QtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9tdWx0aXNlbGVjdC1kcm9wZG93bi5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlzZWxlY3REcm9wZG93bkNvbXBvbmVudEZvcm0gZXh0ZW5kcyBGeEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgZHJvcGRvd25PcGVuID0gZmFsc2U7XHJcbiAgc2VhcmNoVGVybSA9ICcnO1xyXG4gIHBsYWNlaG9sZGVyID0gJ1NlbGVjdCBpdGVtcyc7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PEJvb2xlYW4+KCk7XHJcbiAgZm9ybU9iamVjdDogb2JqZWN0ID0ge307XHJcblxyXG4gIG9wdGlvbnM6IE11bHRpU2VsZWN0T3B0aW9uW10gPSBbXHJcbiAgICB7IGxhYmVsOiAnT3B0aW9uIDEnLCB2YWx1ZTogJ29wdDEnLCBzZWxlY3RlZDogZmFsc2UgfSxcclxuICAgIHsgbGFiZWw6ICdPcHRpb24gMicsIHZhbHVlOiAnb3B0MicsIHNlbGVjdGVkOiBmYWxzZSB9LFxyXG4gICAgeyBsYWJlbDogJ09wdGlvbiAzJywgdmFsdWU6ICdvcHQzJywgc2VsZWN0ZWQ6IGZhbHNlIH0sXHJcbiAgICB7IGxhYmVsOiAnT3B0aW9uIDQnLCB2YWx1ZTogJ29wdDQnLCBzZWxlY3RlZDogZmFsc2UgfSxcclxuICAgIHsgbGFiZWw6ICdPcHRpb24gNScsIHZhbHVlOiAnb3B0NScsIHNlbGVjdGVkOiBmYWxzZSB9LFxyXG4gIF07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBmeEJ1aWxkZXJXcmFwcGVyU2VydmljZTogRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZ4QXBpU2VydmljZTogQXBpU2VydmljZVJlZ2lzdHJ5LFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGVSZWY6IEVsZW1lbnRSZWZcclxuICApIHtcclxuICAgIHN1cGVyKGNkcik7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgc2VsZWN0ZWRPcHRpb25zTXVsdGlGb3JtOiBbW10sIGFycmF5UmVxdWlyZWRWYWxpZGF0b3JdXHJcbiAgICB9KTtcclxuICAgIHRoaXMub25Jbml0LnN1YnNjcmliZSgoKSA9PiB0aGlzLl9yZWdpc3Rlcih0aGlzLmZvcm0pKTtcclxuICB9XHJcblxyXG4gIC8qKiBDbG9zZSBkcm9wZG93biB3aGVuIGNsaWNraW5nIG91dHNpZGUgKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXHJcbiAgb25DbGlja091dHNpZGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duT3BlbiAmJiAhdGhpcy5lUmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhcmlhYmxlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJWYXJpYWJsZXNcIiwpXHJcbiAgICAgICAgLy8gSWYgeW91ciB2YXJpYWJsZXMgb3Igc2V0dGluZ3MgY2hhbmdlIGF0IHJ1bnRpbWUgYW5kIHlvdSB3YW50IHRvIHJlLWV2YWx1YXRlOlxyXG4gICAgICAgIHRoaXMuYXBwbHlWYWxpZGF0aW9uKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgY29uc3Qgc2VydmljZVVybCA9IHRoaXMuZnhBcGlTZXJ2aWNlLmdldFNlcnZpY2VVcmwodGhpcy5zZXR0aW5nKCdzZXJ2aWNlTmFtZScpKTtcclxuICAgIHRoaXMuZ2V0T3B0aW9ucyhzZXJ2aWNlVXJsLCB0aGlzLnNldHRpbmcoJ2NsaW5pY2FsTm90ZXNVUkwnKSk7XHJcbiAgfVxyXG5cclxuICBnZXRPcHRpb25zKHNlcnZpY2VVcmw6IHN0cmluZywgdXJsOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGZpbmFsVXJsID0gc2VydmljZVVybCArIHVybDtcclxuICAgIHRoaXMuaHR0cC5nZXQ8YW55W10+KGZpbmFsVXJsKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vIEZ1dHVyZSBBUEkgbG9naWMgaGVyZVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgb3B0aW9ucycsIGVycilcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlRHJvcGRvd24oKSB7XHJcbiAgICB0aGlzLmRyb3Bkb3duT3BlbiA9ICF0aGlzLmRyb3Bkb3duT3BlbjtcclxuICAgIGlmICh0aGlzLmRyb3Bkb3duT3BlbikgdGhpcy5zZWFyY2hUZXJtID0gJyc7XHJcbiAgfVxyXG5cclxuICAvKiogRmlsdGVyIG9wdGlvbnMgYmFzZWQgb24gc2VhcmNoIHRlcm0gKi9cclxuICBnZXQgZmlsdGVyZWRPcHRpb25zKCk6IE11bHRpU2VsZWN0T3B0aW9uW10ge1xyXG4gICAgY29uc3QgdGVybSA9IHRoaXMuc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIob3B0ID0+IG9wdC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU9wdGlvbihvcHRpb246IE11bHRpU2VsZWN0T3B0aW9uLCBldmVudDogRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgb3B0aW9uLnNlbGVjdGVkID0gIW9wdGlvbi5zZWxlY3RlZDtcclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKiBVcGRhdGUgcmVhY3RpdmUgZm9ybSB3aXRoIHNlbGVjdGVkIGl0ZW1zICovXHJcbiAgdXBkYXRlU2VsZWN0ZWRWYWx1ZXMoKSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFZhbHVlcyA9IHRoaXMub3B0aW9uc1xyXG4gICAgICAuZmlsdGVyKG8gPT4gby5zZWxlY3RlZClcclxuICAgICAgLm1hcChvID0+ICh7IGxhYmVsOiBvLmxhYmVsLCB2YWx1ZTogby52YWx1ZSB9KSk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IHNlbGVjdGVkT3B0aW9uc011bHRpRm9ybTogc2VsZWN0ZWRWYWx1ZXMgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIFBsYWNlaG9sZGVyIC8gRGlzcGxheSBsb2dpYyAqL1xyXG4gIGdldCBzZWxlY3RlZExhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMub3B0aW9ucy5maWx0ZXIobyA9PiBvLnNlbGVjdGVkKS5tYXAobyA9PiBvLmxhYmVsKTtcclxuXHJcbiAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMuc2V0dGluZygncGxhY2Vob2xkZXJMYWJlbCcpID8/IHRoaXMucGxhY2Vob2xkZXI7XHJcblxyXG4gICAgY29uc3QgbWF4Q291bnQgPSB0aGlzLnNldHRpbmcoJ2Rpc3BsYXlNb2RlJykgPT09ICdjb21wYWN0JyA/IDIgOiAzO1xyXG4gICAgaWYgKHRoaXMuc2V0dGluZygnZGlzcGxheU1vZGUnKSA9PT0gJ2NvbXBhY3QnKSB7XHJcbiAgICAgIHJldHVybiBzZWxlY3RlZC5sZW5ndGggPD0gbWF4Q291bnRcclxuICAgICAgICA/IHNlbGVjdGVkLmpvaW4oJywgJylcclxuICAgICAgICA6IGAke3NlbGVjdGVkLnNsaWNlKDAsIG1heENvdW50KS5qb2luKCcsICcpfSArJHtzZWxlY3RlZC5sZW5ndGggLSBtYXhDb3VudH0gbW9yZWA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2V0dGluZygnZGlzcGxheU1vZGUnKSA9PT0gJ2VsbGlwc2lzJykge1xyXG4gICAgICByZXR1cm4gc2VsZWN0ZWQubGVuZ3RoID4gbWF4Q291bnRcclxuICAgICAgICA/IGAke3NlbGVjdGVkLnNsaWNlKDAsIG1heENvdW50KS5qb2luKCcsICcpfSwgLi4uYFxyXG4gICAgICAgIDogc2VsZWN0ZWQuam9pbignLCAnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VsZWN0ZWQuam9pbignLCAnKTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgY29uc29sZS5sb2coJ0Zvcm0gVmFsdWU6JywgdGhpcy5mb3JtLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldCBnZXREcm9wZG93blNlYXJjaCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZygnZHJvcERvd25TZWFyY2gnKTtcclxuICB9XHJcblxyXG4vKipcclxuICAgKiBBcHBseSBvciByZW1vdmUgdGhlIGFycmF5LXJlcXVpcmVkIHZhbGlkYXRvciBkZXBlbmRpbmcgb24gdGhlIEZYIHNldHRpbmcuXHJcbiAgICovXHJcbiAgYXBwbHlWYWxpZGF0aW9uKCkge1xyXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ3NlbGVjdGVkT3B0aW9uc011bHRpRm9ybScpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5mb3JtKVxyXG4gICAgY29uc3Qgc2hvdWxkUmVxdWlyZSA9IHRoaXMuc2V0dGluZygndmFsaWRhdGlvblJlcXVpcmVkJykgPT09ICd5ZXMnO1xyXG5cclxuICAgIGlmICghY29udHJvbCkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChzaG91bGRSZXF1aXJlKSB7XHJcbiAgICAgIGNvbnRyb2wuc2V0VmFsaWRhdG9ycyhhcnJheVJlcXVpcmVkVmFsaWRhdG9yKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVjb21wdXRlIHZhbGlkaXR5IGFmdGVyIGNoYW5naW5nIHZhbGlkYXRvcnNcclxuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc2V0dGluZ3MoKTogRnhTZXR0aW5nW10ge1xyXG4gICAgcmV0dXJuIFtcclxuICAgICAgbmV3IEZ4U2VsZWN0U2V0dGluZyh7IGtleTogJ2Rpc3BsYXlNb2RlJywgJHRpdGxlOiAnRGlzcGxheSBNb2RlJywgdmFsdWU6ICdlbGxpcHNpcycgfSwgW3sgb3B0aW9uOiAnRWxsaXBzaXMnLCB2YWx1ZTogJ2VsbGlwc2lzJyB9LCB7IG9wdGlvbjogJ0NvbXBhY3QnLCB2YWx1ZTogJ2NvbXBhY3QnIH1dKSxcclxuICAgICAgbmV3IEZ4U2VsZWN0U2V0dGluZyh7IGtleTogJ3ZhbGlkYXRpb25SZXF1aXJlZCcsICR0aXRsZTogJ1ZhbGlkYXRpb24gUmVxdWlyZWQnLCB2YWx1ZTogJ3llcycgfSwgW3sgb3B0aW9uOiAnWWVzJywgdmFsdWU6ICd5ZXMnIH0sIHsgb3B0aW9uOiAnTm8nLCB2YWx1ZTogJ25vJyB9XSksXHJcbiAgICAgIG5ldyBGeFNlbGVjdFNldHRpbmcoeyBrZXk6ICdkcm9wRG93blNlYXJjaCcsICR0aXRsZTogJ0Ryb3Bkb3duIFNlYXJjaCcsIHZhbHVlOiAneWVzJyB9LCBbeyBvcHRpb246ICdZZXMnLCB2YWx1ZTogJ3llcycgfSwgeyBvcHRpb246ICdObycsIHZhbHVlOiAnbm8nIH1dKSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3BsYWNlaG9sZGVyTGFiZWwnLCAkdGl0bGU6ICdQbGFjZWhvbGRlcicsIHZhbHVlOiAnU2VsZWN0IE9wdGlvbnMnIH0pLFxyXG4gICAgICBuZXcgRnhTZWxlY3RTZXR0aW5nKHsga2V5OiAnc2VydmljZU5hbWUnLCAkdGl0bGU6ICdTZXJ2aWNlJywgdmFsdWU6ICcnIH0sIFt7IG9wdGlvbjogJ1VzZXIgU2VydmljZScsIHZhbHVlOiAndXNlcl9zZXJ2aWNlJyB9LCB7IG9wdGlvbjogJ1BhdGllbnQgU2VydmljZScsIHZhbHVlOiAncGF0aWVudF9zZXJ2aWNlJyB9LCB7IG9wdGlvbjogJ1dvcmtmbG93IFNlcnZpY2UnLCB2YWx1ZTogJ3dvcmtmbG93X3NlcnZpY2UnIH1dKSxcclxuICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2Vycm9yTWVzc2FnZScsICR0aXRsZTogJ0Vycm9yIE1lc3NhZ2UnLCB2YWx1ZTogJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIG9wdGlvbicgfSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHZhbGlkYXRpb25zKCk6IEZ4VmFsaWRhdGlvbltdIHtcclxuICAgIHJldHVybiBbRnhWYWxpZGF0b3JTZXJ2aWNlLnJlcXVpcmVkXTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFycmF5UmVxdWlyZWRWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcclxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gIH1cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG4iLCI8ZngtY29tcG9uZW50IFtmeERhdGFdPVwiZnhEYXRhXCIgI2Z4Q29tcG9uZW50PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpO1wiIGNsYXNzPVwicmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgPCEtLSBEcm9wZG93biBoZWFkZXIgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiICNkcm9wZG93bldyYXBwZXIgY2xhc3M9XCJyZWxhdGl2ZSB3LTgwXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRyb3Bkb3duLWhlYWRlclwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWRMYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFycm93XCIgW2NsYXNzLm9wZW5dPVwiZHJvcGRvd25PcGVuXCI+JiM5NjYyOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gcGFuZWwgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25PcGVuXCIgY2xhc3M9XCJkcm9wZG93bi1wYW5lbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU2VhcmNoIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYm94XCIgKm5nSWY9XCJnZXREcm9wZG93blNlYXJjaCA9PT0gJ3llcyc7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9ucyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IDA7IGVsc2Ugbm9SZWNvcmRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlT3B0aW9uKG9wdGlvbiwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb24uc2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwib3B0aW9uLWxhYmVsXCI+e3sgb3B0aW9uLmxhYmVsIH19PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTm8gUmVjb3JkcyBUZW1wbGF0ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vUmVjb3Jkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLXJlY29yZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNlYXJjaFRlcm0gPyAnTm8gcmVjb3JkcyBmb3VuZCcgOiAnTm8gb3B0aW9ucyBhdmFpbGFibGUnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8c21hbGxcclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZm9ybS5nZXQoJ3NlbGVjdGVkT3B0aW9uc011bHRpRm9ybScpPy50b3VjaGVkICYmIGZvcm0uZ2V0KCdzZWxlY3RlZE9wdGlvbnNNdWx0aUZvcm0nKT8uZXJyb3JzPy5bJ3JlcXVpcmVkJ11cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgYmxvY2sgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBzZXR0aW5nKCdlcnJvck1lc3NhZ2UnKSB9fVxyXG4gICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG48L2Z4LWNvbXBvbmVudD5cclxuIl19
@@ -35,6 +35,8 @@ export class RadioGroupComponent extends FxBaseComponent {
35
35
  fxComponent;
36
36
  radoioMap = new Map();
37
37
  compareValue;
38
+ isRequired = false;
39
+ isChildRequired = false;
38
40
  constructor(cdr, http, fxBuilderWrapperService, fxApiService) {
39
41
  super(cdr);
40
42
  this.cdr = cdr;
@@ -63,6 +65,7 @@ export class RadioGroupComponent extends FxBaseComponent {
63
65
  setTimeout(() => {
64
66
  const mainControl = this.confirmationForm.get('confirmation');
65
67
  if (this.setting('isRadioRequired') === 'true') {
68
+ this.isRequired = true;
66
69
  mainControl?.setValidators([Validators.required]);
67
70
  mainControl?.updateValueAndValidity();
68
71
  }
@@ -134,26 +137,28 @@ export class RadioGroupComponent extends FxBaseComponent {
134
137
  const valueToShowTextArea = this.confirmationForm.get('valueToShowTextArea');
135
138
  valueToShowTextArea?.setValue(this.setting('value-show-text'));
136
139
  const otherControl = this.confirmationForm.get('remarks');
140
+ this.isChildRequired = true;
137
141
  otherControl?.setValidators([Validators.required]);
138
142
  otherControl?.updateValueAndValidity();
139
143
  }
140
144
  else {
141
145
  const otherControl = this.confirmationForm.get('remarks');
146
+ this.isChildRequired = false;
142
147
  otherControl?.reset();
143
148
  otherControl?.clearValidators();
144
149
  otherControl?.updateValueAndValidity();
145
150
  }
146
151
  }
147
152
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RadioGroupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.FxBuilderWrapperService }, { token: i3.ApiServiceRegistry }], target: i0.ɵɵFactoryTarget.Component });
148
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RadioGroupComponent, isStandalone: true, selector: "radio-group-custom", inputs: { showOnSelection: "showOnSelection" }, viewQueries: [{ propertyName: "fxComponent", first: true, predicate: ["fxComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div [ngClass]=\"setting('customClasss')\">\r\n<form [formGroup]=\"confirmationForm\" class=\"flex gap-4 w-full\">\r\n <div class=\"flex-1 w-full\">\r\n <!-- Title -->\r\n <label class=\"font-semibold text-gray-800\">\r\n {{ setting('select-label') }}\r\n </label>\r\n\r\n <!-- TWO COLUMN LAYOUT -->\r\n \r\n\r\n <!-- LEFT COLUMN (RADIO GROUP) -->\r\n <div class=\"flex-1\">\r\n\r\n <div class=\"flex gap-3 my-2\"> \r\n <!-- stack vertically so height is correct -->\r\n <label\r\n *ngFor=\"let opt of options\"\r\n class=\"flex items-center gap-2 cursor-pointer text-gray-700\"\r\n >\r\n <input\r\n type=\"radio\"\r\n formControlName=\"confirmation\"\r\n [value]=\"opt.value\"\r\n (change)=\"onSelectionChange(opt.value)\"\r\n class=\"w-4 h-4 accent-blue-600 cursor-pointer\"\r\n />\r\n <span>{{ opt.option }}</span>\r\n </label>\r\n </div>\r\n\r\n <!-- Radio error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('confirmation')?.touched &&\r\n confirmationForm.get('confirmation')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n </div>\r\n \r\n <!-- RIGHT COLUMN (TEXTAREA) -->\r\n <div *ngIf=\"showTextArea\" class=\"flex-1\">\r\n\r\n <label class=\"mb-2 font-medium text-gray-700\">\r\n {{ setting('additional-field-label') }}\r\n </label>\r\n\r\n <textarea\r\n formControlName=\"remarks\"\r\n rows=\"3\"\r\n placeholder=\"{{ setting('remark-placeholder') }}\"\r\n class=\"border border-gray-300 rounded-lg p-3 w-full resize-none shadow-sm\r\n focus:outline-none focus:ring-2 focus:ring-blue-500\"\r\n ></textarea>\r\n\r\n <!-- Textarea error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('remarks')?.touched &&\r\n confirmationForm.get('remarks')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('additional-field-error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n\r\n\r\n</form>\r\n</div>\r\n\r\n\r\n</fx-component>\r\n", styles: [".custom-gap{gap:1rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }, { kind: "ngmodule", type: CalendarModule }, { kind: "ngmodule", type: RadioButtonModule }] });
153
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RadioGroupComponent, isStandalone: true, selector: "radio-group-custom", inputs: { showOnSelection: "showOnSelection" }, viewQueries: [{ propertyName: "fxComponent", first: true, predicate: ["fxComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div [ngClass]=\"setting('customClasss')\">\r\n<form [formGroup]=\"confirmationForm\" class=\"flex gap-4 w-full\">\r\n <div class=\"flex-1 w-full\">\r\n <!-- Title -->\r\n <label class=\"font-semibold text-gray-800\">\r\n {{ setting('select-label') }} <sup class=\"field-required\" *ngIf=\"isRequired\">*</sup>\r\n </label>\r\n\r\n <!-- TWO COLUMN LAYOUT -->\r\n \r\n\r\n <!-- LEFT COLUMN (RADIO GROUP) -->\r\n <div class=\"flex-1\">\r\n\r\n <div class=\"flex gap-3 my-2\"> \r\n <!-- stack vertically so height is correct -->\r\n <label\r\n *ngFor=\"let opt of options\"\r\n class=\"flex items-center gap-2 cursor-pointer text-gray-700\"\r\n >\r\n <input\r\n type=\"radio\"\r\n formControlName=\"confirmation\"\r\n [value]=\"opt.value\"\r\n (change)=\"onSelectionChange(opt.value)\"\r\n class=\"w-4 h-4 accent-blue-600 cursor-pointer\"\r\n />\r\n <span>{{ opt.option }}</span>\r\n </label>\r\n </div>\r\n\r\n <!-- Radio error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('confirmation')?.touched &&\r\n confirmationForm.get('confirmation')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n </div>\r\n \r\n <!-- RIGHT COLUMN (TEXTAREA) -->\r\n <div *ngIf=\"showTextArea\" class=\"flex-1\">\r\n\r\n <label class=\"mb-2 font-medium text-gray-700\">\r\n {{ setting('additional-field-label') }} <sup class=\"field-required\" *ngIf=\"isChildRequired\">*</sup>\r\n </label>\r\n\r\n <textarea\r\n formControlName=\"remarks\"\r\n rows=\"3\"\r\n placeholder=\"{{ setting('remark-placeholder') }}\"\r\n class=\"border border-gray-300 rounded-lg p-3 w-full resize-none shadow-sm\r\n focus:outline-none focus:ring-2 focus:ring-blue-500\"\r\n ></textarea>\r\n\r\n <!-- Textarea error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('remarks')?.touched &&\r\n confirmationForm.get('remarks')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('additional-field-error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n\r\n\r\n</form>\r\n</div>\r\n\r\n\r\n</fx-component>\r\n", styles: [".custom-gap{gap:1rem}.field-required{color:red;font-size:1.2em;margin-left:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: FxComponent, selector: "fx-component", inputs: ["fxData"] }, { kind: "ngmodule", type: CalendarModule }, { kind: "ngmodule", type: RadioButtonModule }] });
149
154
  }
150
155
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RadioGroupComponent, decorators: [{
151
156
  type: Component,
152
- args: [{ selector: 'radio-group-custom', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule, RadioButtonModule], template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div [ngClass]=\"setting('customClasss')\">\r\n<form [formGroup]=\"confirmationForm\" class=\"flex gap-4 w-full\">\r\n <div class=\"flex-1 w-full\">\r\n <!-- Title -->\r\n <label class=\"font-semibold text-gray-800\">\r\n {{ setting('select-label') }}\r\n </label>\r\n\r\n <!-- TWO COLUMN LAYOUT -->\r\n \r\n\r\n <!-- LEFT COLUMN (RADIO GROUP) -->\r\n <div class=\"flex-1\">\r\n\r\n <div class=\"flex gap-3 my-2\"> \r\n <!-- stack vertically so height is correct -->\r\n <label\r\n *ngFor=\"let opt of options\"\r\n class=\"flex items-center gap-2 cursor-pointer text-gray-700\"\r\n >\r\n <input\r\n type=\"radio\"\r\n formControlName=\"confirmation\"\r\n [value]=\"opt.value\"\r\n (change)=\"onSelectionChange(opt.value)\"\r\n class=\"w-4 h-4 accent-blue-600 cursor-pointer\"\r\n />\r\n <span>{{ opt.option }}</span>\r\n </label>\r\n </div>\r\n\r\n <!-- Radio error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('confirmation')?.touched &&\r\n confirmationForm.get('confirmation')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n </div>\r\n \r\n <!-- RIGHT COLUMN (TEXTAREA) -->\r\n <div *ngIf=\"showTextArea\" class=\"flex-1\">\r\n\r\n <label class=\"mb-2 font-medium text-gray-700\">\r\n {{ setting('additional-field-label') }}\r\n </label>\r\n\r\n <textarea\r\n formControlName=\"remarks\"\r\n rows=\"3\"\r\n placeholder=\"{{ setting('remark-placeholder') }}\"\r\n class=\"border border-gray-300 rounded-lg p-3 w-full resize-none shadow-sm\r\n focus:outline-none focus:ring-2 focus:ring-blue-500\"\r\n ></textarea>\r\n\r\n <!-- Textarea error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('remarks')?.touched &&\r\n confirmationForm.get('remarks')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('additional-field-error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n\r\n\r\n</form>\r\n</div>\r\n\r\n\r\n</fx-component>\r\n", styles: [".custom-gap{gap:1rem}\n"] }]
157
+ args: [{ selector: 'radio-group-custom', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, FxComponent, CalendarModule, RadioButtonModule], template: "<fx-component [fxData]=\"fxData\" #fxComponent>\r\n <div [ngClass]=\"setting('customClasss')\">\r\n<form [formGroup]=\"confirmationForm\" class=\"flex gap-4 w-full\">\r\n <div class=\"flex-1 w-full\">\r\n <!-- Title -->\r\n <label class=\"font-semibold text-gray-800\">\r\n {{ setting('select-label') }} <sup class=\"field-required\" *ngIf=\"isRequired\">*</sup>\r\n </label>\r\n\r\n <!-- TWO COLUMN LAYOUT -->\r\n \r\n\r\n <!-- LEFT COLUMN (RADIO GROUP) -->\r\n <div class=\"flex-1\">\r\n\r\n <div class=\"flex gap-3 my-2\"> \r\n <!-- stack vertically so height is correct -->\r\n <label\r\n *ngFor=\"let opt of options\"\r\n class=\"flex items-center gap-2 cursor-pointer text-gray-700\"\r\n >\r\n <input\r\n type=\"radio\"\r\n formControlName=\"confirmation\"\r\n [value]=\"opt.value\"\r\n (change)=\"onSelectionChange(opt.value)\"\r\n class=\"w-4 h-4 accent-blue-600 cursor-pointer\"\r\n />\r\n <span>{{ opt.option }}</span>\r\n </label>\r\n </div>\r\n\r\n <!-- Radio error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('confirmation')?.touched &&\r\n confirmationForm.get('confirmation')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n </div>\r\n \r\n <!-- RIGHT COLUMN (TEXTAREA) -->\r\n <div *ngIf=\"showTextArea\" class=\"flex-1\">\r\n\r\n <label class=\"mb-2 font-medium text-gray-700\">\r\n {{ setting('additional-field-label') }} <sup class=\"field-required\" *ngIf=\"isChildRequired\">*</sup>\r\n </label>\r\n\r\n <textarea\r\n formControlName=\"remarks\"\r\n rows=\"3\"\r\n placeholder=\"{{ setting('remark-placeholder') }}\"\r\n class=\"border border-gray-300 rounded-lg p-3 w-full resize-none shadow-sm\r\n focus:outline-none focus:ring-2 focus:ring-blue-500\"\r\n ></textarea>\r\n\r\n <!-- Textarea error -->\r\n <small\r\n *ngIf=\"\r\n confirmationForm.get('remarks')?.touched &&\r\n confirmationForm.get('remarks')?.errors?.['required']\r\n \"\r\n class=\"text-red-500 mt-1\"\r\n >\r\n {{ setting('additional-field-error-msg') }}\r\n </small>\r\n\r\n </div>\r\n\r\n\r\n\r\n</form>\r\n</div>\r\n\r\n\r\n</fx-component>\r\n", styles: [".custom-gap{gap:1rem}.field-required{color:red;font-size:1.2em;margin-left:5px}\n"] }]
153
158
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.FxBuilderWrapperService }, { type: i3.ApiServiceRegistry }], propDecorators: { showOnSelection: [{
154
159
  type: Input
155
160
  }], fxComponent: [{
156
161
  type: ViewChild,
157
162
  args: ['fxComponent']
158
163
  }] } });
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy9yYWRpby1ncm91cC9yYWRpby1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3JhZGlvLWdyb3VwL3JhZGlvLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNGLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFvQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25LLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFTeEQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGVBQWU7SUF1QmhDO0lBQStCO0lBQXlCO0lBQXlEO0lBdEJqSSxFQUFFLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBQzFDLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFDZixlQUFlLEdB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QUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7WUFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRCxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbkQsWUFBWSxFQUFFLHNCQUFzQixFQUFFLENBQUM7UUFDbkMsQ0FBQzthQUNHLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFELFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUN0QixZQUFZLEVBQUUsZUFBZSxFQUFFLENBQUM7WUFDaEMsWUFBWSxFQUFFLHNCQUFzQixFQUFFLENBQUM7UUFDekMsQ0FBQztJQUVILENBQUM7d0dBekpVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLGlRQ2xCaEMsKzBFQWtGQSxnRkRwRVksWUFBWSw2VkFBRSxtQkFBbUIsK3BDQUFFLFdBQVcsK0JBQUUsV0FBVyw0RUFBRSxjQUFjLDhCQUFDLGlCQUFpQjs7NEZBSTVGLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDRSxvQkFBb0IsY0FDbEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDLGlCQUFpQixDQUFDO3NMQVFqRyxlQUFlO3NCQUF2QixLQUFLO2dCQWV3QixXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFwaVNlcnZpY2VSZWdpc3RyeSB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvY29yZSc7XHJcbmltcG9ydCB7IEZ4QmFzZUNvbXBvbmVudCwgRnhDb21wb25lbnQsIEZ4T3B0aW9uU2V0dGluZywgRnhTZWxlY3RTZXR0aW5nLCBGeFNldHRpbmcsIEZ4U3RyaW5nU2V0dGluZywgRnhWYWxpZGF0aW9uLCBGeFZhbGlkYXRvclNlcnZpY2UgfSBmcm9tICdAaW5zdGFudHN5cy1sYWJzL2Z4JztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZngtYnVpbGRlci13cmFwcGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDYWxlbmRhck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvY2FsZW5kYXInO1xyXG5pbXBvcnQgeyBSYWRpb0J1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcmFkaW9idXR0b24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYWRpby1ncm91cC1jdXN0b20nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybXNNb2R1bGUsIEZ4Q29tcG9uZW50LCBDYWxlbmRhck1vZHVsZSxSYWRpb0J1dHRvbk1vZHVsZV0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JhZGlvLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcmFkaW8tZ3JvdXAuY29tcG9uZW50LmNzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFJhZGlvR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBGeEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXR7XHJcbnByaXZhdGUgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xyXG5wcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Qm9vbGVhbj4oKTtcclxuZm9ybU9iamVjdDogb2JqZWN0ID0ge307XHJcbkBJbnB1dCgpIHNob3dPblNlbGVjdGlvbjogJ3llcycgfCAnbm8nID0gJ3llcyc7IC8vIGNvbmZpZ3VyYWJsZTogc2hvdyB0ZXh0YXJlYSBvbiBZZXMgb3IgTm9cclxuICBzaG93VGV4dEFyZWEgPSBmYWxzZTtcclxuIHB1YmxpYyBjb25maXJtYXRpb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGNvbmZpcm1hdGlvbjogWycnXSxcclxuICAgICAgcmVtYXJrczogWycnXSxcclxuICAgICAgdmFsdWVUb1Nob3dUZXh0QXJlYTogWycnXSxcclxuICAgICAgbGFiZWw6WycnXVxyXG4gICAgfSk7XHJcblxyXG4gICAgb3B0aW9uczogYW55W10gPSBbXHJcbiAgICAgIHsgb3B0aW9uOiAnWWVzJywgdmFsdWU6ICdZRVMnIH0sXHJcbiAgICAgIHsgb3B0aW9uOiAnTm8nLCB2YWx1ZTogJ05PJyB9LFxyXG4gICAgICB7IG9wdGlvbjogJ05BJywgdmFsdWU6ICdOQScgfVxyXG4gICAgXTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdmeENvbXBvbmVudCcpIGZ4Q29tcG9uZW50ITogRnhDb21wb25lbnQ7XHJcbiAgICByYWRvaW9NYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG4gICAgY29tcGFyZVZhbHVlOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxwcml2YXRlIGZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlOiBGeEJ1aWxkZXJXcmFwcGVyU2VydmljZSxwcml2YXRlIGZ4QXBpU2VydmljZTogQXBpU2VydmljZVJlZ2lzdHJ5KSB7XHJcbiAgICAgICBzdXBlcihjZHIpXHJcbiAgICAgICAgdGhpcy5vbkluaXQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyKHRoaXMuY29uZmlybWF0aW9uRm9ybSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICBcclxuICAgICB9XHJcblxyXG4gICAgICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyAgPSAodGhpcy5meENvbXBvbmVudD8uZnhEYXRhPy5zZXR0aW5ncz8uZmluZCgoczogYW55KSA9PiBzLmtleSA9PT0gJ2l0ZW1zJykgYXMgYW55KT8ub3B0aW9ucyB8fCBbXTtcclxuICAgICAgIGNvbnN0IGxhYmVsRGF0YSA9XHJcbiAgKHRoaXMuZnhDb21wb25lbnQ/LmZ4RGF0YT8uc2V0dGluZ3M/LmZpbmQoKHM6IGFueSkgPT4gcy5rZXkgPT09ICdzZWxlY3QtbGFiZWwnKSBhcyBhbnkpPy52YWx1ZSA/P1xyXG4gICcnO1xyXG50aGlzLmNvbXBhcmVWYWx1ZSA9ICh0aGlzLmZ4Q29tcG9uZW50Py5meERhdGE/LnNldHRpbmdzPy5maW5kKChzOiBhbnkpID0+IHMua2V5ID09PSAndmFsdWUtc2hvdy10ZXh0JykgYXMgYW55KT8udmFsdWVcclxuICAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmNvbmZpcm1hdGlvbkZvcm0uZ2V0KCdsYWJlbCcpO1xyXG4gICAgICAgICBsYWJlbD8uc2V0VmFsdWUobGFiZWxEYXRhKTtcclxuICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gIGNvbnN0IGtleSA9IHRoaXMuZnhDb21wb25lbnQ/LmZ4RGF0YT8ubmFtZTtcclxuXHJcbiAgaWYgKGtleSAmJiB0aGlzLnJhZG9pb01hcC5oYXMoa2V5KSkge1xyXG4gICAgdGhpcy5jb25maXJtYXRpb25Gb3JtLnBhdGNoVmFsdWUodGhpcy5yYWRvaW9NYXAuZ2V0KGtleSkpO1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMucmFkb2lvTWFwLmdldChrZXkpO1xyXG4gICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZShkYXRhLmNvbmZpcm1hdGlvbik7XHJcbiAgfVxyXG59LCAyMDApO1xyXG5cclxuICAgICAgIHNldFRpbWVvdXQoKCk9PntcclxuICAgICBjb25zdCBtYWluQ29udHJvbCA9IHRoaXMuY29uZmlybWF0aW9uRm9ybS5nZXQoJ2NvbmZpcm1hdGlvbicpO1xyXG4gICAgIGlmKHRoaXMuc2V0dGluZygnaXNSYWRpb1JlcXVpcmVkJykgPT09ICd0cnVlJyl7XHJcbiAgICAgIG1haW5Db250cm9sPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XHJcbiAgICAgIG1haW5Db250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgfVxyXG4gICAgfSwxMDApXHJcblxyXG4gICAgICAgIFxyXG4gICAgICAgfVxyXG4gICAgIFxyXG4gICAgICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgICAgdGhpcy5meEJ1aWxkZXJXcmFwcGVyU2VydmljZS52YXJpYWJsZXMkXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCh2YXJpYWJsZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXZhcmlhYmxlcykgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAvLyBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpIGFzIFtzdHJpbmcsIGFueV1bXSkge1xyXG4gICAgICAgICAgICAvLyAgIGlmIChrZXkuaW5jbHVkZXMoJ3JhZGlvLWdyb3VwLWN1c3RvbScpKSB7XHJcbiAgICAgICAgICAgIC8vICAgIHRoaXMuZm9ybU9iamVjdCA9IHZhbHVlO1xyXG4gICAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSBhcyBbc3RyaW5nLCBhbnldW10pIHtcclxuICBpZiAoXHJcbiAgICB2YWx1ZSAmJlxyXG4gICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxyXG4gICAgJ2NvbmZpcm1hdGlvbicgaW4gdmFsdWVcclxuICApIHtcclxuICAgIHRoaXMucmFkb2lvTWFwLnNldChrZXksIHZhbHVlKTtcclxuICB9XHJcbn1cclxuXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgfSlcclxuXHJcbiAgICAgICAgdGhpcy5vcHRpb25zICA9ICh0aGlzLmZ4Q29tcG9uZW50Py5meERhdGE/LnNldHRpbmdzPy5maW5kKChzOiBhbnkpID0+IHMua2V5ID09PSAnaXRlbXMnKSBhcyBhbnkpPy5vcHRpb25zIHx8IFtdO1xyXG5cclxuXHJcbiAgICAgIC8vICB0aGlzLnNldHRpbmcoJ2l0ZW1zJykubGVuZ3RoID4gMCA/IHRoaXMub3B0aW9ucyA9IHRoaXMuc2V0dGluZygnaXRlbXMnKSA6IG51bGw7XHJcbiAgICAgXHJcbiAgICAgIC8vICAgdGhpcy5jb25maXJtYXRpb25Gb3JtLmdldCgnY29uZmlybWF0aW9uJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICAvLyAgICBjb25zdCBvdGhlckNvbnRyb2wgPSB0aGlzLmNvbmZpcm1hdGlvbkZvcm0uZ2V0KCdyZW1hcmtzJyk7XHJcbiAgICAgIC8vICAgIGNvbnN0IHZhbHVlVG9TaG93VGV4dEFyZWEgPSB0aGlzLmNvbmZpcm1hdGlvbkZvcm0uZ2V0KCd2YWx1ZVRvU2hvd1RleHRBcmVhJyk7XHJcbiAgICAgIC8vICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAvLyAgICAgIG90aGVyQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgICAvLyAgICAgIHZhbHVlVG9TaG93VGV4dEFyZWE/LnNldFZhbHVlKHRoaXMuc2V0dGluZygndmFsdWUtc2hvdy10ZXh0JykpO1xyXG5cclxuICAgICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgICAgb3RoZXJDb250cm9sPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgLy8gICAgICBvdGhlckNvbnRyb2w/LnJlc2V0KCk7XHJcbiAgICAgIC8vICAgICAgdmFsdWVUb1Nob3dUZXh0QXJlYT8ucmVzZXQoKTtcclxuICAgICAgLy8gICAgfVxyXG4gICAgICAvLyAgfSk7XHJcbiAgICAgICBcclxuICAgICBcclxuICAgICB9XHJcblxyXG4gICAgIHByb3RlY3RlZCBzZXR0aW5ncygpOiBGeFNldHRpbmdbXSB7XHJcbiAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAvLyBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnY2xpbmljYWxOb3Rlc1VSTCcsICR0aXRsZTogJ0FQSSBVcmwnLCB2YWx1ZTogJycgfSksXHJcbiAgICAgICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdjdXN0b21DbGFzc3MnLCAkdGl0bGU6ICdDdXN0b20gQ2xhc3MgTmFtZScsIHZhbHVlOiAnJyB9KSxcclxuICAgICAgICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdzZWxlY3QtbGFiZWwnLCAkdGl0bGU6ICdIZWFkZXIgTGFiZWwnLCB2YWx1ZTogJ0hlYWRlciBMYWJlbCcgfSksIFxyXG4gICAgICAgICAgICAgIC8vIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdvcHRpb24tdmFsdWUtb25lJywgJHRpdGxlOiAnVmFsdWUgb25lJywgdmFsdWU6ICdWYWx1ZSBvbmUnIH0pLCBcclxuICAgICAgICAgICAgICAvLyAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ29wdGlvbi12YWx1ZS10d28nLCAkdGl0bGU6ICdWYWx1ZSB0d28nLCB2YWx1ZTogJ1ZhbHVlIHR3bycgfSksIFxyXG4gICAgICAgICAgICAgIC8vICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ29wdGlvbi1sYWJlbC1vbmUnLCAkdGl0bGU6ICdMYWJlbCBvbmUnLCB2YWx1ZTogJ0xhYmVsIG9uZScgfSksIFxyXG4gICAgICAgICAgICAgIC8vICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ29wdGlvbi1sYWJlbC10d28nLCAkdGl0bGU6ICdMYWJlbCB0d28nLCB2YWx1ZTogJ0xhYmVsIHR3bycgfSksIFxyXG4gICAgICAgICAgICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ3ZhbHVlLXNob3ctdGV4dCcsICR0aXRsZTogJ1ZhbHVlIHRvIHNob3cgdGV4dGFyZWEnLCB2YWx1ZTogJ1ZhbHVlIHRvIHNob3cgdGV4dGFyZWEnIH0pLFxyXG4gICAgICAgICAgICAgICAgbmV3IEZ4T3B0aW9uU2V0dGluZyh7IGtleTogJ2l0ZW1zJywgJHRpdGxlOiAnT3B0aW9ucycsIHZhbHVlOiBbe29wdGlvbjogJ1llcycsIHZhbHVlOiAneWVzJ30sIHtvcHRpb246ICdObycsIHZhbHVlOiAnbm8nfV0gIH0sIFt7b3B0aW9uOiAnWWVzJywgdmFsdWU6ICd5ZXMnfSwge29wdGlvbjogJ05vJywgdmFsdWU6ICdubyd9XSksIFxyXG4gICAgICAgICAgICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2FkZGl0aW9uYWwtZmllbGQtbGFiZWwnLCAkdGl0bGU6ICdBZGRpdGlvbmFsIGZpZWxkIGxhYmVsJywgdmFsdWU6ICcnIH0pLFxyXG4gICAgICAgICAgICAgICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2FkZGl0aW9uYWwtZmllbGQtZXJyb3ItbXNnJywgJHRpdGxlOiAnQWRkaXRpb25hbCBmaWVsZCBlcnJvciBtZXNzYWdlJywgdmFsdWU6ICdQbGVhc2UgZmlsbCBvdXQgdGhlIGZpZWxkJyB9KSxcclxuICAgICAgICAgICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdlcnJvci1tc2cnLCAkdGl0bGU6ICdFcnJvciBtZXNzYWdlJywgdmFsdWU6ICdQbGVhc2Ugc2VsZWN0JyB9KSxcclxuICAgICAgICAgICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdyZW1hcmstcGxhY2Vob2xkZXInLCAkdGl0bGU6ICdBZGRpdGlvbmFsIGZpZWxkIHBsYWNlaG9sZGVyJywgdmFsdWU6ICdlbnRlciBoZXJlJyB9KSxcclxuICAgICAgICAgICAgICAgIG5ldyBGeFNlbGVjdFNldHRpbmcoe2tleTogJ2lzUmFkaW9SZXF1aXJlZCcsICR0aXRsZTogJ1JlcXVpcmVkJywgdmFsdWU6ICd0cnVlJ30sIFt7b3B0aW9uOiAnWWVzJywgdmFsdWU6ICd0cnVlJ30sIHtvcHRpb246ICdObycsIHZhbHVlOiAnZmFsc2UnfV0pLCAgICBcclxuICAgICAgICAgICAgLy8gICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnb3RoZXItcGxhY2Vob2xkZXInLCAkdGl0bGU6ICdPdGhlciBQbGFjZWhvbGRlcicsIHZhbHVlOiAnJyB9KSwgIFxyXG4gICAgICAgICAgICAvLyAgIG5ldyBGeFNlbGVjdFNldHRpbmcoe2tleTogJ3NlcnZpY2VOYW1lJywgJHRpdGxlOiAnU2VydmljZScsIHZhbHVlOiAnJ30sIFt7b3B0aW9uOiAnVXNlciBTZXJ2aWNlJywgdmFsdWU6ICd1c2VyX3NlcnZpY2UnfSwge29wdGlvbjogJ1BhdGllbnQgU2VydmljZScsIHZhbHVlOiAncGF0aWVudF9zZXJ2aWNlJ30se29wdGlvbjogJ1dvcmtmbG93IFNlcnZpY2UnLCB2YWx1ZTogJ3dvcmtmbG93X3NlcnZpY2UnfV0pLFxyXG4gICAgICAgICAgICAvLyAgIC8vIG5ldyBGeFNlbGVjdFNldHRpbmcoe2tleTogJ3NlcnZpY2UnLCAkdGl0bGU6ICdTZXJ2aWNlJywgdmFsdWU6ICdsb2NhbCd9LCBbe29wdGlvbjogJ0xvY2FsJywgdmFsdWU6ICdsb2NhbCd9LCB7b3B0aW9uOiAnUUEnLCB2YWx1ZTogJ3FhJ30se29wdGlvbjogJ1VBVCcsIHZhbHVlOiAndWF0J30se29wdGlvbjogJ1Byb2R1Y3Rpb24nLCB2YWx1ZTogJ3Byb2QnfV0pLCAgIFxyXG4gICAgICAgICAgICAvLyAgIC8vIG5ldyBGeFNlbGVjdFNldHRpbmcoe2tleTogJ2lzUmVxdWlyZWQnLCAkdGl0bGU6ICdSZXF1aXJlZCcsIHZhbHVlOiB0cnVlfSwgW3tvcHRpb246ICdZZXMnLCB2YWx1ZTogdHJ1ZX0sIHtvcHRpb246ICdObycsIHZhbHVlOiBmYWxzZX1dKSwgICAgXHJcbiAgICAgICAgICAgIC8vICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdlcnJvck1lc3NhZ2UnLCAkdGl0bGU6ICdFcnJvciBNZXNzYWdlJywgdmFsdWU6ICdQbGVhc2UgZmlsbCBvdXQgdGhlIGZpZWxkJyB9KSwgIFxyXG4gICAgICAgICAgXTtcclxuICAgICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAgIHByb3RlY3RlZCB2YWxpZGF0aW9ucygpOiBGeFZhbGlkYXRpb25bXSB7XHJcbiAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb246IHN0cmluZykge1xyXG5cclxuICAgIHRoaXMuc2hvd1RleHRBcmVhID0gc2VsZWN0aW9uID09PSB0aGlzLmNvbXBhcmVWYWx1ZTtcclxuICAgIGlmKHRoaXMuc2hvd1RleHRBcmVhKXtcclxuY29uc3QgdmFsdWVUb1Nob3dUZXh0QXJlYSA9IHRoaXMuY29uZmlybWF0aW9uRm9ybS5nZXQoJ3ZhbHVlVG9TaG93VGV4dEFyZWEnKTtcclxuIHZhbHVlVG9TaG93VGV4dEFyZWE/LnNldFZhbHVlKHRoaXMuc2V0dGluZygndmFsdWUtc2hvdy10ZXh0JykpO1xyXG5jb25zdCBvdGhlckNvbnRyb2wgPSB0aGlzLmNvbmZpcm1hdGlvbkZvcm0uZ2V0KCdyZW1hcmtzJyk7XHJcbm90aGVyQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5vdGhlckNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIGNvbnN0IG90aGVyQ29udHJvbCA9IHRoaXMuY29uZmlybWF0aW9uRm9ybS5nZXQoJ3JlbWFya3MnKTtcclxuICAgICAgb3RoZXJDb250cm9sPy5yZXNldCgpO1xyXG4gICAgICBvdGhlckNvbnRyb2w/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICBvdGhlckNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG59XHJcbiIsIjxmeC1jb21wb25lbnQgW2Z4RGF0YV09XCJmeERhdGFcIiAjZnhDb21wb25lbnQ+XHJcbiAgPGRpdiAgW25nQ2xhc3NdPVwic2V0dGluZygnY3VzdG9tQ2xhc3NzJylcIj5cclxuPGZvcm0gW2Zvcm1Hcm91cF09XCJjb25maXJtYXRpb25Gb3JtXCIgY2xhc3M9XCJmbGV4IGdhcC00IHctZnVsbFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4LTEgdy1mdWxsXCI+XHJcbiAgICA8IS0tIFRpdGxlIC0tPlxyXG4gIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTgwMFwiPlxyXG4gICAge3sgc2V0dGluZygnc2VsZWN0LWxhYmVsJykgfX1cclxuICA8L2xhYmVsPlxyXG5cclxuICA8IS0tIFRXTyBDT0xVTU4gTEFZT1VUIC0tPlxyXG4gIFxyXG5cclxuICAgIDwhLS0gTEVGVCBDT0xVTU4gKFJBRElPIEdST1VQKSAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4LTFcIj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0zIG15LTJcIj4gXHJcbiAgICAgICAgPCEtLSBzdGFjayB2ZXJ0aWNhbGx5IHNvIGhlaWdodCBpcyBjb3JyZWN0IC0tPlxyXG4gICAgICAgIDxsYWJlbFxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IG9wdCBvZiBvcHRpb25zXCJcclxuICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgY3Vyc29yLXBvaW50ZXIgdGV4dC1ncmF5LTcwMFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbmZpcm1hdGlvblwiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHQudmFsdWVcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKG9wdC52YWx1ZSlcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInctNCBoLTQgYWNjZW50LWJsdWUtNjAwIGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8c3Bhbj57eyBvcHQub3B0aW9uIH19PC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBSYWRpbyBlcnJvciAtLT5cclxuICAgICAgPHNtYWxsXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGNvbmZpcm1hdGlvbkZvcm0uZ2V0KCdjb25maXJtYXRpb24nKT8udG91Y2hlZCAmJlxyXG4gICAgICAgICAgY29uZmlybWF0aW9uRm9ybS5nZXQoJ2NvbmZpcm1hdGlvbicpPy5lcnJvcnM/LlsncmVxdWlyZWQnXVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgY2xhc3M9XCJ0ZXh0LXJlZC01MDAgbXQtMVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBzZXR0aW5nKCdlcnJvci1tc2cnKSB9fVxyXG4gICAgICA8L3NtYWxsPlxyXG5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuICBcclxuICAgIDwhLS0gUklHSFQgQ09MVU1OIChURVhUQVJFQSkgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd1RleHRBcmVhXCIgY2xhc3M9XCJmbGV4LTFcIj5cclxuXHJcbiAgICAgIDxsYWJlbCBjbGFzcz1cIm1iLTIgZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgIHt7IHNldHRpbmcoJ2FkZGl0aW9uYWwtZmllbGQtbGFiZWwnKSB9fVxyXG4gICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVtYXJrc1wiXHJcbiAgICAgICAgcm93cz1cIjNcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgc2V0dGluZygncmVtYXJrLXBsYWNlaG9sZGVyJykgfX1cIlxyXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIHAtMyB3LWZ1bGwgcmVzaXplLW5vbmUgc2hhZG93LXNtXHJcbiAgICAgICAgICAgICAgIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1ibHVlLTUwMFwiXHJcbiAgICAgID48L3RleHRhcmVhPlxyXG5cclxuICAgICAgPCEtLSBUZXh0YXJlYSBlcnJvciAtLT5cclxuICAgICAgPHNtYWxsXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGNvbmZpcm1hdGlvbkZvcm0uZ2V0KCdyZW1hcmtzJyk/LnRvdWNoZWQgJiZcclxuICAgICAgICAgIGNvbmZpcm1hdGlvbkZvcm0uZ2V0KCdyZW1hcmtzJyk/LmVycm9ycz8uWydyZXF1aXJlZCddXHJcbiAgICAgICAgXCJcclxuICAgICAgICBjbGFzcz1cInRleHQtcmVkLTUwMCBtdC0xXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHNldHRpbmcoJ2FkZGl0aW9uYWwtZmllbGQtZXJyb3ItbXNnJykgfX1cclxuICAgICAgPC9zbWFsbD5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuPC9mb3JtPlxyXG48L2Rpdj5cclxuXHJcblxyXG48L2Z4LWNvbXBvbmVudD5cclxuIl19
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZngtYnVpbGRlci13cmFwcGVyL3NyYy9saWIvY29tcG9uZW50cy9yYWRpby1ncm91cC9yYWRpby1ncm91cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9meC1idWlsZGVyLXdyYXBwZXIvc3JjL2xpYi9jb21wb25lbnRzL3JhZGlvLWdyb3VwL3JhZGlvLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNGLE9BQU8sRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQWEsZUFBZSxFQUFvQyxNQUFNLHFCQUFxQixDQUFDO0FBQ25LLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFTeEQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGVBQWU7SUF5QmhDO0lBQStCO0lBQXlCO0lBQXlEO0lBeEJqSSxFQUFFLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3pCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBQzFDLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFDZixlQUFlLEdB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bnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXBpU2VydmljZVJlZ2lzdHJ5IH0gZnJvbSAnQGluc3RhbnRzeXMtbGFicy9jb3JlJztcclxuaW1wb3J0IHsgRnhCYXNlQ29tcG9uZW50LCBGeENvbXBvbmVudCwgRnhPcHRpb25TZXR0aW5nLCBGeFNlbGVjdFNldHRpbmcsIEZ4U2V0dGluZywgRnhTdHJpbmdTZXR0aW5nLCBGeFZhbGlkYXRpb24sIEZ4VmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BpbnN0YW50c3lzLWxhYnMvZngnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENhbGVuZGFyTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jYWxlbmRhcic7XHJcbmltcG9ydCB7IFJhZGlvQnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9yYWRpb2J1dHRvbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhZGlvLWdyb3VwLWN1c3RvbScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3Jtc01vZHVsZSwgRnhDb21wb25lbnQsIENhbGVuZGFyTW9kdWxlLFJhZGlvQnV0dG9uTW9kdWxlXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmFkaW8tZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi9yYWRpby1ncm91cC5jb21wb25lbnQuY3NzJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmFkaW9Hcm91cENvbXBvbmVudCBleHRlbmRzIEZ4QmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdHtcclxucHJpdmF0ZSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XHJcbnByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxCb29sZWFuPigpO1xyXG5mb3JtT2JqZWN0OiBvYmplY3QgPSB7fTtcclxuQElucHV0KCkgc2hvd09uU2VsZWN0aW9uOiAneWVzJyB8ICdubycgPSAneWVzJzsgLy8gY29uZmlndXJhYmxlOiBzaG93IHRleHRhcmVhIG9uIFllcyBvciBOb1xyXG4gIHNob3dUZXh0QXJlYSA9IGZhbHNlO1xyXG4gcHVibGljIGNvbmZpcm1hdGlvbkZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgY29uZmlybWF0aW9uOiBbJyddLFxyXG4gICAgICByZW1hcmtzOiBbJyddLFxyXG4gICAgICB2YWx1ZVRvU2hvd1RleHRBcmVhOiBbJyddLFxyXG4gICAgICBsYWJlbDpbJyddXHJcbiAgICB9KTtcclxuXHJcbiAgICBvcHRpb25zOiBhbnlbXSA9IFtcclxuICAgICAgeyBvcHRpb246ICdZZXMnLCB2YWx1ZTogJ1lFUycgfSxcclxuICAgICAgeyBvcHRpb246ICdObycsIHZhbHVlOiAnTk8nIH0sXHJcbiAgICAgIHsgb3B0aW9uOiAnTkEnLCB2YWx1ZTogJ05BJyB9XHJcbiAgICBdO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2Z4Q29tcG9uZW50JykgZnhDb21wb25lbnQhOiBGeENvbXBvbmVudDtcclxuICAgIHJhZG9pb01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XHJcbiAgICBjb21wYXJlVmFsdWU6IGFueTtcclxuICAgIGlzUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGlzQ2hpbGRSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQscHJpdmF0ZSBmeEJ1aWxkZXJXcmFwcGVyU2VydmljZTogRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UscHJpdmF0ZSBmeEFwaVNlcnZpY2U6IEFwaVNlcnZpY2VSZWdpc3RyeSkge1xyXG4gICAgICAgc3VwZXIoY2RyKVxyXG4gICAgICAgIHRoaXMub25Jbml0LnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9yZWdpc3Rlcih0aGlzLmNvbmZpcm1hdGlvbkZvcm0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgXHJcbiAgICAgfVxyXG5cclxuICAgICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgID0gKHRoaXMuZnhDb21wb25lbnQ/LmZ4RGF0YT8uc2V0dGluZ3M/LmZpbmQoKHM6IGFueSkgPT4gcy5rZXkgPT09ICdpdGVtcycpIGFzIGFueSk/Lm9wdGlvbnMgfHwgW107XHJcbiAgICAgICBjb25zdCBsYWJlbERhdGEgPVxyXG4gICh0aGlzLmZ4Q29tcG9uZW50Py5meERhdGE/LnNldHRpbmdzPy5maW5kKChzOiBhbnkpID0+IHMua2V5ID09PSAnc2VsZWN0LWxhYmVsJykgYXMgYW55KT8udmFsdWUgPz9cclxuICAnJztcclxudGhpcy5jb21wYXJlVmFsdWUgPSAodGhpcy5meENvbXBvbmVudD8uZnhEYXRhPy5zZXR0aW5ncz8uZmluZCgoczogYW55KSA9PiBzLmtleSA9PT0gJ3ZhbHVlLXNob3ctdGV4dCcpIGFzIGFueSk/LnZhbHVlXHJcbiAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5jb25maXJtYXRpb25Gb3JtLmdldCgnbGFiZWwnKTtcclxuICAgICAgICAgbGFiZWw/LnNldFZhbHVlKGxhYmVsRGF0YSk7XHJcbiAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICBjb25zdCBrZXkgPSB0aGlzLmZ4Q29tcG9uZW50Py5meERhdGE/Lm5hbWU7XHJcblxyXG4gIGlmIChrZXkgJiYgdGhpcy5yYWRvaW9NYXAuaGFzKGtleSkpIHtcclxuICAgIHRoaXMuY29uZmlybWF0aW9uRm9ybS5wYXRjaFZhbHVlKHRoaXMucmFkb2lvTWFwLmdldChrZXkpKTtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnJhZG9pb01hcC5nZXQoa2V5KTtcclxuICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoZGF0YS5jb25maXJtYXRpb24pO1xyXG4gIH1cclxufSwgMjAwKTtcclxuXHJcbiAgICAgICBzZXRUaW1lb3V0KCgpPT57XHJcbiAgICAgY29uc3QgbWFpbkNvbnRyb2wgPSB0aGlzLmNvbmZpcm1hdGlvbkZvcm0uZ2V0KCdjb25maXJtYXRpb24nKTtcclxuICAgICBpZih0aGlzLnNldHRpbmcoJ2lzUmFkaW9SZXF1aXJlZCcpID09PSAndHJ1ZScpe1xyXG4gICAgICB0aGlzLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICBtYWluQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG4gICAgICBtYWluQ29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgIH1cclxuICAgIH0sMTAwKVxyXG5cclxuICAgICAgICBcclxuICAgICAgIH1cclxuICAgICBcclxuICAgICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgICAgIHRoaXMuZnhCdWlsZGVyV3JhcHBlclNlcnZpY2UudmFyaWFibGVzJFxyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgodmFyaWFibGVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF2YXJpYWJsZXMpIHJldHVybjtcclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICAgICAgLy8gZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFyaWFibGVzKSBhcyBbc3RyaW5nLCBhbnldW10pIHtcclxuICAgICAgICAgICAgLy8gICBpZiAoa2V5LmluY2x1ZGVzKCdyYWRpby1ncm91cC1jdXN0b20nKSkge1xyXG4gICAgICAgICAgICAvLyAgICB0aGlzLmZvcm1PYmplY3QgPSB2YWx1ZTtcclxuICAgICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcmlhYmxlcykgYXMgW3N0cmluZywgYW55XVtdKSB7XHJcbiAgaWYgKFxyXG4gICAgdmFsdWUgJiZcclxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcclxuICAgICdjb25maXJtYXRpb24nIGluIHZhbHVlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnJhZG9pb01hcC5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgfVxyXG59XHJcblxyXG4gICAgICAgICAgICBcclxuICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMub3B0aW9ucyAgPSAodGhpcy5meENvbXBvbmVudD8uZnhEYXRhPy5zZXR0aW5ncz8uZmluZCgoczogYW55KSA9PiBzLmtleSA9PT0gJ2l0ZW1zJykgYXMgYW55KT8ub3B0aW9ucyB8fCBbXTtcclxuXHJcblxyXG4gICAgICAvLyAgdGhpcy5zZXR0aW5nKCdpdGVtcycpLmxlbmd0aCA+IDAgPyB0aGlzLm9wdGlvbnMgPSB0aGlzLnNldHRpbmcoJ2l0ZW1zJykgOiBudWxsO1xyXG4gICAgIFxyXG4gICAgICAvLyAgIHRoaXMuY29uZmlybWF0aW9uRm9ybS5nZXQoJ2NvbmZpcm1hdGlvbicpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgLy8gICAgY29uc3Qgb3RoZXJDb250cm9sID0gdGhpcy5jb25maXJtYXRpb25Gb3JtLmdldCgncmVtYXJrcycpO1xyXG4gICAgICAvLyAgICBjb25zdCB2YWx1ZVRvU2hvd1RleHRBcmVhID0gdGhpcy5jb25maXJtYXRpb25Gb3JtLmdldCgndmFsdWVUb1Nob3dUZXh0QXJlYScpO1xyXG4gICAgICAvLyAgICBpZiAodmFsdWUpIHtcclxuICAgICAgLy8gICAgICBvdGhlckNvbnRyb2w/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcclxuICAgICAgLy8gICAgICB2YWx1ZVRvU2hvd1RleHRBcmVhPy5zZXRWYWx1ZSh0aGlzLnNldHRpbmcoJ3ZhbHVlLXNob3ctdGV4dCcpKTtcclxuXHJcbiAgICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgIG90aGVyQ29udHJvbD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgIC8vICAgICAgb3RoZXJDb250cm9sPy5yZXNldCgpO1xyXG4gICAgICAvLyAgICAgIHZhbHVlVG9TaG93VGV4dEFyZWE/LnJlc2V0KCk7XHJcbiAgICAgIC8vICAgIH1cclxuICAgICAgLy8gIH0pO1xyXG4gICAgICAgXHJcbiAgICAgXHJcbiAgICAgfVxyXG5cclxuICAgICBwcm90ZWN0ZWQgc2V0dGluZ3MoKTogRnhTZXR0aW5nW10ge1xyXG4gICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgLy8gbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ2NsaW5pY2FsTm90ZXNVUkwnLCAkdGl0bGU6ICdBUEkgVXJsJywgdmFsdWU6ICcnIH0pLFxyXG4gICAgICAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnY3VzdG9tQ2xhc3NzJywgJHRpdGxlOiAnQ3VzdG9tIENsYXNzIE5hbWUnLCB2YWx1ZTogJycgfSksXHJcbiAgICAgICAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnc2VsZWN0LWxhYmVsJywgJHRpdGxlOiAnSGVhZGVyIExhYmVsJywgdmFsdWU6ICdIZWFkZXIgTGFiZWwnIH0pLCBcclxuICAgICAgICAgICAgICAvLyBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnb3B0aW9uLXZhbHVlLW9uZScsICR0aXRsZTogJ1ZhbHVlIG9uZScsIHZhbHVlOiAnVmFsdWUgb25lJyB9KSwgXHJcbiAgICAgICAgICAgICAgLy8gIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdvcHRpb24tdmFsdWUtdHdvJywgJHRpdGxlOiAnVmFsdWUgdHdvJywgdmFsdWU6ICdWYWx1ZSB0d28nIH0pLCBcclxuICAgICAgICAgICAgICAvLyAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdvcHRpb24tbGFiZWwtb25lJywgJHRpdGxlOiAnTGFiZWwgb25lJywgdmFsdWU6ICdMYWJlbCBvbmUnIH0pLCBcclxuICAgICAgICAgICAgICAvLyAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdvcHRpb24tbGFiZWwtdHdvJywgJHRpdGxlOiAnTGFiZWwgdHdvJywgdmFsdWU6ICdMYWJlbCB0d28nIH0pLCBcclxuICAgICAgICAgICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICd2YWx1ZS1zaG93LXRleHQnLCAkdGl0bGU6ICdWYWx1ZSB0byBzaG93IHRleHRhcmVhJywgdmFsdWU6ICdWYWx1ZSB0byBzaG93IHRleHRhcmVhJyB9KSxcclxuICAgICAgICAgICAgICAgIG5ldyBGeE9wdGlvblNldHRpbmcoeyBrZXk6ICdpdGVtcycsICR0aXRsZTogJ09wdGlvbnMnLCB2YWx1ZTogW3tvcHRpb246ICdZZXMnLCB2YWx1ZTogJ3llcyd9LCB7b3B0aW9uOiAnTm8nLCB2YWx1ZTogJ25vJ31dICB9LCBbe29wdGlvbjogJ1llcycsIHZhbHVlOiAneWVzJ30sIHtvcHRpb246ICdObycsIHZhbHVlOiAnbm8nfV0pLCBcclxuICAgICAgICAgICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdhZGRpdGlvbmFsLWZpZWxkLWxhYmVsJywgJHRpdGxlOiAnQWRkaXRpb25hbCBmaWVsZCBsYWJlbCcsIHZhbHVlOiAnJyB9KSxcclxuICAgICAgICAgICAgICAgIG5ldyBGeFN0cmluZ1NldHRpbmcoeyBrZXk6ICdhZGRpdGlvbmFsLWZpZWxkLWVycm9yLW1zZycsICR0aXRsZTogJ0FkZGl0aW9uYWwgZmllbGQgZXJyb3IgbWVzc2FnZScsIHZhbHVlOiAnUGxlYXNlIGZpbGwgb3V0IHRoZSBmaWVsZCcgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnZXJyb3ItbXNnJywgJHRpdGxlOiAnRXJyb3IgbWVzc2FnZScsIHZhbHVlOiAnUGxlYXNlIHNlbGVjdCcgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAncmVtYXJrLXBsYWNlaG9sZGVyJywgJHRpdGxlOiAnQWRkaXRpb25hbCBmaWVsZCBwbGFjZWhvbGRlcicsIHZhbHVlOiAnZW50ZXIgaGVyZScgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRnhTZWxlY3RTZXR0aW5nKHtrZXk6ICdpc1JhZGlvUmVxdWlyZWQnLCAkdGl0bGU6ICdSZXF1aXJlZCcsIHZhbHVlOiAndHJ1ZSd9LCBbe29wdGlvbjogJ1llcycsIHZhbHVlOiAndHJ1ZSd9LCB7b3B0aW9uOiAnTm8nLCB2YWx1ZTogJ2ZhbHNlJ31dKSwgICAgXHJcbiAgICAgICAgICAgIC8vICAgbmV3IEZ4U3RyaW5nU2V0dGluZyh7IGtleTogJ290aGVyLXBsYWNlaG9sZGVyJywgJHRpdGxlOiAnT3RoZXIgUGxhY2Vob2xkZXInLCB2YWx1ZTogJycgfSksICBcclxuICAgICAgICAgICAgLy8gICBuZXcgRnhTZWxlY3RTZXR0aW5nKHtrZXk6ICdzZXJ2aWNlTmFtZScsICR0aXRsZTogJ1NlcnZpY2UnLCB2YWx1ZTogJyd9LCBbe29wdGlvbjogJ1VzZXIgU2VydmljZScsIHZhbHVlOiAndXNlcl9zZXJ2aWNlJ30sIHtvcHRpb246ICdQYXRpZW50IFNlcnZpY2UnLCB2YWx1ZTogJ3BhdGllbnRfc2VydmljZSd9LHtvcHRpb246ICdXb3JrZmxvdyBTZXJ2aWNlJywgdmFsdWU6ICd3b3JrZmxvd19zZXJ2aWNlJ31dKSxcclxuICAgICAgICAgICAgLy8gICAvLyBuZXcgRnhTZWxlY3RTZXR0aW5nKHtrZXk6ICdzZXJ2aWNlJywgJHRpdGxlOiAnU2VydmljZScsIHZhbHVlOiAnbG9jYWwnfSwgW3tvcHRpb246ICdMb2NhbCcsIHZhbHVlOiAnbG9jYWwnfSwge29wdGlvbjogJ1FBJywgdmFsdWU6ICdxYSd9LHtvcHRpb246ICdVQVQnLCB2YWx1ZTogJ3VhdCd9LHtvcHRpb246ICdQcm9kdWN0aW9uJywgdmFsdWU6ICdwcm9kJ31dKSwgICBcclxuICAgICAgICAgICAgLy8gICAvLyBuZXcgRnhTZWxlY3RTZXR0aW5nKHtrZXk6ICdpc1JlcXVpcmVkJywgJHRpdGxlOiAnUmVxdWlyZWQnLCB2YWx1ZTogdHJ1ZX0sIFt7b3B0aW9uOiAnWWVzJywgdmFsdWU6IHRydWV9LCB7b3B0aW9uOiAnTm8nLCB2YWx1ZTogZmFsc2V9XSksICAgIFxyXG4gICAgICAgICAgICAvLyAgICBuZXcgRnhTdHJpbmdTZXR0aW5nKHsga2V5OiAnZXJyb3JNZXNzYWdlJywgJHRpdGxlOiAnRXJyb3IgTWVzc2FnZScsIHZhbHVlOiAnUGxlYXNlIGZpbGwgb3V0IHRoZSBmaWVsZCcgfSksICBcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbnMoKTogRnhWYWxpZGF0aW9uW10ge1xyXG4gICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgb25TZWxlY3Rpb25DaGFuZ2Uoc2VsZWN0aW9uOiBzdHJpbmcpIHtcclxuXHJcbiAgICB0aGlzLnNob3dUZXh0QXJlYSA9IHNlbGVjdGlvbiA9PT0gdGhpcy5jb21wYXJlVmFsdWU7XHJcbiAgICBpZih0aGlzLnNob3dUZXh0QXJlYSl7XHJcbmNvbnN0IHZhbHVlVG9TaG93VGV4dEFyZWEgPSB0aGlzLmNvbmZpcm1hdGlvbkZvcm0uZ2V0KCd2YWx1ZVRvU2hvd1RleHRBcmVhJyk7XHJcbiB2YWx1ZVRvU2hvd1RleHRBcmVhPy5zZXRWYWx1ZSh0aGlzLnNldHRpbmcoJ3ZhbHVlLXNob3ctdGV4dCcpKTtcclxuY29uc3Qgb3RoZXJDb250cm9sID0gdGhpcy5jb25maXJtYXRpb25Gb3JtLmdldCgncmVtYXJrcycpO1xyXG50aGlzLmlzQ2hpbGRSZXF1aXJlZCA9IHRydWU7XHJcbm90aGVyQ29udHJvbD8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xyXG5vdGhlckNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIGNvbnN0IG90aGVyQ29udHJvbCA9IHRoaXMuY29uZmlybWF0aW9uRm9ybS5nZXQoJ3JlbWFya3MnKTtcclxuICAgICAgdGhpcy5pc0NoaWxkUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgICAgb3RoZXJDb250cm9sPy5yZXNldCgpO1xyXG4gICAgICBvdGhlckNvbnRyb2w/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICBvdGhlckNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG59XHJcbiIsIjxmeC1jb21wb25lbnQgW2Z4RGF0YV09XCJmeERhdGFcIiAjZnhDb21wb25lbnQ+XHJcbiAgPGRpdiAgW25nQ2xhc3NdPVwic2V0dGluZygnY3VzdG9tQ2xhc3NzJylcIj5cclxuPGZvcm0gW2Zvcm1Hcm91cF09XCJjb25maXJtYXRpb25Gb3JtXCIgY2xhc3M9XCJmbGV4IGdhcC00IHctZnVsbFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJmbGV4LTEgdy1mdWxsXCI+XHJcbiAgICA8IS0tIFRpdGxlIC0tPlxyXG4gIDxsYWJlbCBjbGFzcz1cImZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTgwMFwiPlxyXG4gICAge3sgc2V0dGluZygnc2VsZWN0LWxhYmVsJykgfX0gPHN1cCBjbGFzcz1cImZpZWxkLXJlcXVpcmVkXCIgKm5nSWY9XCJpc1JlcXVpcmVkXCI+Kjwvc3VwPlxyXG4gIDwvbGFiZWw+XHJcblxyXG4gIDwhLS0gVFdPIENPTFVNTiBMQVlPVVQgLS0+XHJcbiAgXHJcblxyXG4gICAgPCEtLSBMRUZUIENPTFVNTiAoUkFESU8gR1JPVVApIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXgtMVwiPlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTMgbXktMlwiPiBcclxuICAgICAgICA8IS0tIHN0YWNrIHZlcnRpY2FsbHkgc28gaGVpZ2h0IGlzIGNvcnJlY3QgLS0+XHJcbiAgICAgICAgPGxhYmVsXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0IG9mIG9wdGlvbnNcIlxyXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBjdXJzb3ItcG9pbnRlciB0ZXh0LWdyYXktNzAwXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29uZmlybWF0aW9uXCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdC52YWx1ZVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2Uob3B0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwidy00IGgtNCBhY2NlbnQtYmx1ZS02MDAgY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxzcGFuPnt7IG9wdC5vcHRpb24gfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIFJhZGlvIGVycm9yIC0tPlxyXG4gICAgICA8c21hbGxcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgY29uZmlybWF0aW9uRm9ybS5nZXQoJ2NvbmZpcm1hdGlvbicpPy50b3VjaGVkICYmXHJcbiAgICAgICAgICBjb25maXJtYXRpb25Gb3JtLmdldCgnY29uZmlybWF0aW9uJyk/LmVycm9ycz8uWydyZXF1aXJlZCddXHJcbiAgICAgICAgXCJcclxuICAgICAgICBjbGFzcz1cInRleHQtcmVkLTUwMCBtdC0xXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHNldHRpbmcoJ2Vycm9yLW1zZycpIH19XHJcbiAgICAgIDwvc21hbGw+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG4gIFxyXG4gICAgPCEtLSBSSUdIVCBDT0xVTU4gKFRFWFRBUkVBKSAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93VGV4dEFyZWFcIiBjbGFzcz1cImZsZXgtMVwiPlxyXG5cclxuICAgICAgPGxhYmVsIGNsYXNzPVwibWItMiBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAge3sgc2V0dGluZygnYWRkaXRpb25hbC1maWVsZC1sYWJlbCcpIH19IDxzdXAgY2xhc3M9XCJmaWVsZC1yZXF1aXJlZFwiICpuZ0lmPVwiaXNDaGlsZFJlcXVpcmVkXCI+Kjwvc3VwPlxyXG4gICAgICA8L2xhYmVsPlxyXG5cclxuICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmVtYXJrc1wiXHJcbiAgICAgICAgcm93cz1cIjNcIlxyXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgc2V0dGluZygncmVtYXJrLXBsYWNlaG9sZGVyJykgfX1cIlxyXG4gICAgICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIHAtMyB3LWZ1bGwgcmVzaXplLW5vbmUgc2hhZG93LXNtXHJcbiAgICAgICAgICAgICAgIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTIgZm9jdXM6cmluZy1ibHVlLTUwMFwiXHJcbiAgICAgID48L3RleHRhcmVhPlxyXG5cclxuICAgICAgPCEtLSBUZXh0YXJlYSBlcnJvciAtLT5cclxuICAgICAgPHNtYWxsXHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgIGNvbmZpcm1hdGlvbkZvcm0uZ2V0KCdyZW1hcmtzJyk/LnRvdWNoZWQgJiZcclxuICAgICAgICAgIGNvbmZpcm1hdGlvbkZvcm0uZ2V0KCdyZW1hcmtzJyk/LmVycm9ycz8uWydyZXF1aXJlZCddXHJcbiAgICAgICAgXCJcclxuICAgICAgICBjbGFzcz1cInRleHQtcmVkLTUwMCBtdC0xXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHNldHRpbmcoJ2FkZGl0aW9uYWwtZmllbGQtZXJyb3ItbXNnJykgfX1cclxuICAgICAgPC9zbWFsbD5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuPC9mb3JtPlxyXG48L2Rpdj5cclxuXHJcblxyXG48L2Z4LWNvbXBvbmVudD5cclxuIl19
@@ -12,8 +12,10 @@ import { DropdownWithOtherComponent } from './components/dropdown-with-other/dro
12
12
  import { RadioGroupComponent } from './components/radio-group/radio-group.component';
13
13
  import { MultiselectDropdownComponent } from './components/multiselect-dropdown/multiselect-dropdown.component';
14
14
  import { MultiselectDropdownWithChildsComponent } from './components/multiselect-dropdown-with-childs/multiselect-dropdown-with-childs.component';
15
+ import { DropdownWithSearchComponent } from './components/dropdown-with-search/dropdown-with-search.component';
15
16
  import * as i0 from "@angular/core";
16
17
  import * as i1 from "./fx-builder-wrapper.service";
18
+ // import { CustomizeDropdownComponent } from './components/multiselect-with-form-fields/customize-dropdown.component';
17
19
  export class FxBuilderWrapperComponent {
18
20
  fxWrapperService;
19
21
  componentBuilder;
@@ -63,6 +65,12 @@ export class FxBuilderWrapperComponent {
63
65
  if (!Boolean(this.fxWrapperService.getComponent('lib-multiselect-dropdown-with-childs'))) {
64
66
  this.fxWrapperService.registerCustomComponent('Multiselect Dropdown with Childs', 'lib-multiselect-dropdown-with-childs', MultiselectDropdownWithChildsComponent);
65
67
  }
68
+ if (!Boolean(this.fxWrapperService.getComponent('lib-dropdown-with-search'))) {
69
+ this.fxWrapperService.registerCustomComponent('Dropdown with Search', 'lib-dropdown-with-search', DropdownWithSearchComponent);
70
+ }
71
+ // if (!Boolean(this.fxWrapperService.getComponent('lib-customize-dropdown'))) {
72
+ // this.fxWrapperService.registerCustomComponent('Multiselect with Form', 'lib-customize-dropdown', CustomizeDropdownComponent);
73
+ // }
66
74
  }
67
75
  ;
68
76
  getParsedForm() {
@@ -100,4 +108,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
100
108
  type: Input,
101
109
  args: [{ alias: 'fx-form', required: true }]
102
110
  }] } });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZngtYnVpbGRlci13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Z4LWJ1aWxkZXItd3JhcHBlci9zcmMvbGliL2Z4LWJ1aWxkZXItd3JhcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUEwQixrQkFBa0IsRUFBVSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBRTlHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN2RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUM1RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNoSCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSwwRkFBMEYsQ0FBQzs7O0FBaUJsSixNQUFNLE9BQU8seUJBQXlCO0lBYWhCO0lBWlcsZ0JB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L2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGeEJ1aWxkZXJDb25maWd1cmF0aW9uLCBGeENvbXBvbmVudEJ1aWxkZXIsIEZ4Rm9ybSwgRnhNb2RlLCBGeFNjb3BlLCBGeFV0aWxzIH0gZnJvbSAnQGluc3RhbnRzeXMtbGFicy9meCc7XHJcbmltcG9ydCB7IERpc3BhdGNoVG9DbGluaWNDb21wb25lbnQgfSBmcm9tICcuL2N1c3RvbS1jb250cm9scy9kaXNwYXRjaC10by1jbGluaWMvZGlzcGF0Y2gtdG8tY2xpbmljLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IER5bmFtaWNUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG9nZ2xlQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RvZ2dsZS1idXR0b24vdG9nZ2xlLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91cGxvYWRlci91cGxvYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb2dnbGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdG9nZ2xlL3RvZ2dsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVcGxvYWRlckNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3VwbG9hZGVyLWNoZWNrYm94L3VwbG9hZGVyLWNoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHJvcGRvd25XaXRoT3RoZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZHJvcGRvd24td2l0aC1vdGhlci9kcm9wZG93bi13aXRoLW90aGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJhZGlvR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcmFkaW8tZ3JvdXAvcmFkaW8tZ3JvdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTXVsdGlzZWxlY3REcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tdWx0aXNlbGVjdC1kcm9wZG93bi9tdWx0aXNlbGVjdC1kcm9wZG93bi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNdWx0aXNlbGVjdERyb3Bkb3duV2l0aENoaWxkc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tdWx0aXNlbGVjdC1kcm9wZG93bi13aXRoLWNoaWxkcy9tdWx0aXNlbGVjdC1kcm9wZG93bi13aXRoLWNoaWxkcy5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdmeC1idWlsZGVyLXdyYXBwZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRnhDb21wb25lbnRCdWlsZGVyXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGZ4LWNvbXBvbmVudC1idWlsZGVyIFxyXG4gICAgICAgICNjb21wb25lbnRCdWlsZGVyIFxyXG4gICAgICAgIFtmeC1mb3JtXT1cImZ4Rm9ybVwiIFxyXG4gICAgICAgIFtjb25maWd1cmF0aW9uXT1cImZ4Q29uZmlndXJhdGlvblwiIFxyXG4gICAgICAgIFtzY29wZV09XCJGeFNjb3BlLkJVSUxERVJcIlxyXG4gICAgICAgID5cclxuICAgIDwvZngtY29tcG9uZW50LWJ1aWxkZXI+XHJcbiAgYCxcclxuICBzdHlsZVVybDogJy4vZm9ybS1idWlsZGVyLmNzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGeEJ1aWxkZXJXcmFwcGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdjb21wb25lbnRCdWlsZGVyJykgY29tcG9uZW50QnVpbGRlciE6IEZ4Q29tcG9uZW50QnVpbGRlcjtcclxuICBASW5wdXQoeyBhbGlhczogJ2Z4LWZvcm0nLCByZXF1aXJlZDogdHJ1ZSB9KSBmeEZvcm06IEZ4Rm9ybSA9IEZ4VXRpbHMuY3JlYXRlTmV3Rm9ybSgpO1xyXG4gIHB1YmxpYyBmeE1vZGU6IEZ4TW9kZSA9IEZ4TW9kZS5FRElUO1xyXG4gIHB1YmxpYyBmeENvbmZpZ3VyYXRpb246IEZ4QnVpbGRlckNvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICBzZXR0aW5nczogdHJ1ZSxcclxuICAgIGxvZ2ljczogdHJ1ZSxcclxuICAgIGN1c3RvbUNvbnRyb2xzOiB0cnVlLFxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEZ4U2NvcGUgPSBGeFNjb3BlO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBGeE1vZGUgPSBGeE1vZGU7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZnhXcmFwcGVyU2VydmljZTogRnhCdWlsZGVyV3JhcHBlclNlcnZpY2UpIHsgfVxyXG5cclxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIUJvb2xlYW4odGhpcy5meFdyYXBwZXJTZXJ2aWNlLmdldENvbXBvbmVudCgnZGlzcGF0Y2gtdG8tY2xpbmljJykpKSB7XHJcbiAgICAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnRGlzcGF0Y2ggVG8gQ2xpbmljJywgJ2Rpc3BhdGNoLXRvLWNsaW5pYycsIERpc3BhdGNoVG9DbGluaWNDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ2R5bmFtaWMtdGFibGUnKSkpIHtcclxuICAgICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50KCdEeW5hbWljIFRhYmxlJywgJ2R5bmFtaWMtdGFibGUnLCBEeW5hbWljVGFibGVDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ3RvZ2dsZS1idXR0b24nKSkpIHtcclxuICAgICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50KCdUb2dnbGUgQnV0dG9uJywgJ3RvZ2dsZS1idXR0b24nLCBUb2dnbGVCdXR0b25Db21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ3VwbG9hZGVyJykpKSB7XHJcbiAgICAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnVXBsb2FkZXInLCAndXBsb2FkZXInLCBVcGxvYWRlckNvbXBvbmVudCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIUJvb2xlYW4odGhpcy5meFdyYXBwZXJTZXJ2aWNlLmdldENvbXBvbmVudCgndXBsb2FkZXItY2hlY2tib3gnKSkpIHtcclxuICAgICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50KCdVcGxvYWRlciB3aXRoIENoZWNrYm94JywgJ3VwbG9hZGVyLWNoZWNrYm94JywgVXBsb2FkZXJDaGVja2JveENvbXBvbmVudCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIUJvb2xlYW4odGhpcy5meFdyYXBwZXJTZXJ2aWNlLmdldENvbXBvbmVudCgndG9nZ2xlJykpKSB7XHJcbiAgICAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnVG9nZ2xlJywgJ3RvZ2dsZScsIFRvZ2dsZUNvbXBvbmVudCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIUJvb2xlYW4odGhpcy5meFdyYXBwZXJTZXJ2aWNlLmdldENvbXBvbmVudCgnbGliLWRhdGUtcGlja2VyJykpKSB7XHJcbiAgICAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnRGF0ZSBQaWNrZXInLCAnbGliLWRhdGUtcGlja2VyJywgRGF0ZVBpY2tlckNvbXBvbmVudCk7XHJcbiAgICB9XHJcbiAgICAgICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ2Ryb3Bkb3duLXdpdGgtb3RoZXInKSkpIHtcclxuICAgICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50KCdTbWFydGxpc3Qgd2l0aCBPdGhlcicsICdkcm9wZG93bi13aXRoLW90aGVyJywgRHJvcGRvd25XaXRoT3RoZXJDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ3JhZGlvLWdyb3VwLWN1c3RvbScpKSkge1xyXG4gICAgICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQoJ1JhZGlvIEdyb3VwIHdpdGggT3RoZXInLCAncmFkaW8tZ3JvdXAtY3VzdG9tJywgUmFkaW9Hcm91cENvbXBvbmVudCk7XHJcbiAgICB9XHJcbiAgICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ2xpYi1tdWx0aXNlbGVjdC1kcm9wZG93bicpKSkge1xyXG4gICAgICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQoJ011bHRpc2VsZWN0IERyb3Bkb3duJywgJ2xpYi1tdWx0aXNlbGVjdC1kcm9wZG93bicsIE11bHRpc2VsZWN0RHJvcGRvd25Db21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCdsaWItbXVsdGlzZWxlY3QtZHJvcGRvd24td2l0aC1jaGlsZHMnKSkpIHtcclxuICAgICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50KCdNdWx0aXNlbGVjdCBEcm9wZG93biB3aXRoIENoaWxkcycsICdsaWItbXVsdGlzZWxlY3QtZHJvcGRvd24td2l0aC1jaGlsZHMnLCBNdWx0aXNlbGVjdERyb3Bkb3duV2l0aENoaWxkc0NvbXBvbmVudCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiBcclxuICBwdWJsaWMgZ2V0UGFyc2VkRm9ybSgpOiBGeEZvcm0ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50QnVpbGRlci5nZXRQYXJzZWRGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5pdGlhbGl6ZWRGeEZvcm0oKTogRnhGb3JtIHtcclxuICAgIHJldHVybiBGeFV0aWxzLmNyZWF0ZU5ld0Zvcm0oKTsgXHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZngtYnVpbGRlci13cmFwcGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Z4LWJ1aWxkZXItd3JhcHBlci9zcmMvbGliL2Z4LWJ1aWxkZXItd3JhcHBlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUEwQixrQkFBa0IsRUFBVSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBRTlHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUN2RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUM1RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNoSCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSwwRkFBMEYsQ0FBQztBQUNsSixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrRUFBa0Us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QVkvQix5QkFBeUI7a0JBZnJDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxZQUNqQzs7Ozs7Ozs7R0FRVDs0RkFJOEIsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFDZ0IsTUFBTTtzQkFBbEQsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGeEJ1aWxkZXJDb25maWd1cmF0aW9uLCBGeENvbXBvbmVudEJ1aWxkZXIsIEZ4Rm9ybSwgRnhNb2RlLCBGeFNjb3BlLCBGeFV0aWxzIH0gZnJvbSAnQGluc3RhbnRzeXMtbGFicy9meCc7XHJcbmltcG9ydCB7IERpc3BhdGNoVG9DbGluaWNDb21wb25lbnQgfSBmcm9tICcuL2N1c3RvbS1jb250cm9scy9kaXNwYXRjaC10by1jbGluaWMvZGlzcGF0Y2gtdG8tY2xpbmljLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlIH0gZnJvbSAnLi9meC1idWlsZGVyLXdyYXBwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IER5bmFtaWNUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9keW5hbWljLXRhYmxlL2R5bmFtaWMtdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVG9nZ2xlQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RvZ2dsZS1idXR0b24vdG9nZ2xlLWJ1dHRvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91cGxvYWRlci91cGxvYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb2dnbGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdG9nZ2xlL3RvZ2dsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBVcGxvYWRlckNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3VwbG9hZGVyLWNoZWNrYm94L3VwbG9hZGVyLWNoZWNrYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRHJvcGRvd25XaXRoT3RoZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZHJvcGRvd24td2l0aC1vdGhlci9kcm9wZG93bi13aXRoLW90aGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJhZGlvR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcmFkaW8tZ3JvdXAvcmFkaW8tZ3JvdXAuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTXVsdGlzZWxlY3REcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tdWx0aXNlbGVjdC1kcm9wZG93bi9tdWx0aXNlbGVjdC1kcm9wZG93bi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNdWx0aXNlbGVjdERyb3Bkb3duV2l0aENoaWxkc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9tdWx0aXNlbGVjdC1kcm9wZG93bi13aXRoLWNoaWxkcy9tdWx0aXNlbGVjdC1kcm9wZG93bi13aXRoLWNoaWxkcy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEcm9wZG93bldpdGhTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZHJvcGRvd24td2l0aC1zZWFyY2gvZHJvcGRvd24td2l0aC1zZWFyY2guY29tcG9uZW50JztcclxuLy8gaW1wb3J0IHsgQ3VzdG9taXplRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbXVsdGlzZWxlY3Qtd2l0aC1mb3JtLWZpZWxkcy9jdXN0b21pemUtZHJvcGRvd24uY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZngtYnVpbGRlci13cmFwcGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZ4Q29tcG9uZW50QnVpbGRlcl0sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxmeC1jb21wb25lbnQtYnVpbGRlciBcclxuICAgICAgICAjY29tcG9uZW50QnVpbGRlciBcclxuICAgICAgICBbZngtZm9ybV09XCJmeEZvcm1cIiBcclxuICAgICAgICBbY29uZmlndXJhdGlvbl09XCJmeENvbmZpZ3VyYXRpb25cIiBcclxuICAgICAgICBbc2NvcGVdPVwiRnhTY29wZS5CVUlMREVSXCJcclxuICAgICAgICA+XHJcbiAgICA8L2Z4LWNvbXBvbmVudC1idWlsZGVyPlxyXG4gIGAsXHJcbiAgc3R5bGVVcmw6ICcuL2Zvcm0tYnVpbGRlci5jc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnhCdWlsZGVyV3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnY29tcG9uZW50QnVpbGRlcicpIGNvbXBvbmVudEJ1aWxkZXIhOiBGeENvbXBvbmVudEJ1aWxkZXI7XHJcbiAgQElucHV0KHsgYWxpYXM6ICdmeC1mb3JtJywgcmVxdWlyZWQ6IHRydWUgfSkgZnhGb3JtOiBGeEZvcm0gPSBGeFV0aWxzLmNyZWF0ZU5ld0Zvcm0oKTtcclxuICBwdWJsaWMgZnhNb2RlOiBGeE1vZGUgPSBGeE1vZGUuRURJVDtcclxuICBwdWJsaWMgZnhDb25maWd1cmF0aW9uOiBGeEJ1aWxkZXJDb25maWd1cmF0aW9uID0ge1xyXG4gICAgc2V0dGluZ3M6IHRydWUsXHJcbiAgICBsb2dpY3M6IHRydWUsXHJcbiAgICBjdXN0b21Db250cm9sczogdHJ1ZSxcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCByZWFkb25seSBGeFNjb3BlID0gRnhTY29wZTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRnhNb2RlID0gRnhNb2RlO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZ4V3JhcHBlclNlcnZpY2U6IEZ4QnVpbGRlcldyYXBwZXJTZXJ2aWNlKSB7IH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ2Rpc3BhdGNoLXRvLWNsaW5pYycpKSkge1xyXG4gICAgICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQoJ0Rpc3BhdGNoIFRvIENsaW5pYycsICdkaXNwYXRjaC10by1jbGluaWMnLCBEaXNwYXRjaFRvQ2xpbmljQ29tcG9uZW50KTtcclxuICAgIH1cclxuICAgIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCdkeW5hbWljLXRhYmxlJykpKSB7XHJcbiAgICAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnRHluYW1pYyBUYWJsZScsICdkeW5hbWljLXRhYmxlJywgRHluYW1pY1RhYmxlQ29tcG9uZW50KTtcclxuICAgIH1cclxuICAgIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCd0b2dnbGUtYnV0dG9uJykpKSB7XHJcbiAgICAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnVG9nZ2xlIEJ1dHRvbicsICd0b2dnbGUtYnV0dG9uJywgVG9nZ2xlQnV0dG9uQ29tcG9uZW50KTtcclxuICAgIH1cclxuICAgIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCd1cGxvYWRlcicpKSkge1xyXG4gICAgICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQoJ1VwbG9hZGVyJywgJ3VwbG9hZGVyJywgVXBsb2FkZXJDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ3VwbG9hZGVyLWNoZWNrYm94JykpKSB7XHJcbiAgICAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnVXBsb2FkZXIgd2l0aCBDaGVja2JveCcsICd1cGxvYWRlci1jaGVja2JveCcsIFVwbG9hZGVyQ2hlY2tib3hDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ3RvZ2dsZScpKSkge1xyXG4gICAgICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQoJ1RvZ2dsZScsICd0b2dnbGUnLCBUb2dnbGVDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFCb29sZWFuKHRoaXMuZnhXcmFwcGVyU2VydmljZS5nZXRDb21wb25lbnQoJ2xpYi1kYXRlLXBpY2tlcicpKSkge1xyXG4gICAgICB0aGlzLmZ4V3JhcHBlclNlcnZpY2UucmVnaXN0ZXJDdXN0b21Db21wb25lbnQoJ0RhdGUgUGlja2VyJywgJ2xpYi1kYXRlLXBpY2tlcicsIERhdGVQaWNrZXJDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgICAgIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCdkcm9wZG93bi13aXRoLW90aGVyJykpKSB7XHJcbiAgICAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnU21hcnRsaXN0IHdpdGggT3RoZXInLCAnZHJvcGRvd24td2l0aC1vdGhlcicsIERyb3Bkb3duV2l0aE90aGVyQ29tcG9uZW50KTtcclxuICAgIH1cclxuICAgICAgIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCdyYWRpby1ncm91cC1jdXN0b20nKSkpIHtcclxuICAgICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50KCdSYWRpbyBHcm91cCB3aXRoIE90aGVyJywgJ3JhZGlvLWdyb3VwLWN1c3RvbScsIFJhZGlvR3JvdXBDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCdsaWItbXVsdGlzZWxlY3QtZHJvcGRvd24nKSkpIHtcclxuICAgICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50KCdNdWx0aXNlbGVjdCBEcm9wZG93bicsICdsaWItbXVsdGlzZWxlY3QtZHJvcGRvd24nLCBNdWx0aXNlbGVjdERyb3Bkb3duQ29tcG9uZW50KTtcclxuICAgIH1cclxuICAgICBpZiAoIUJvb2xlYW4odGhpcy5meFdyYXBwZXJTZXJ2aWNlLmdldENvbXBvbmVudCgnbGliLW11bHRpc2VsZWN0LWRyb3Bkb3duLXdpdGgtY2hpbGRzJykpKSB7XHJcbiAgICAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnTXVsdGlzZWxlY3QgRHJvcGRvd24gd2l0aCBDaGlsZHMnLCAnbGliLW11bHRpc2VsZWN0LWRyb3Bkb3duLXdpdGgtY2hpbGRzJywgTXVsdGlzZWxlY3REcm9wZG93bldpdGhDaGlsZHNDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCdsaWItZHJvcGRvd24td2l0aC1zZWFyY2gnKSkpIHtcclxuICAgICAgdGhpcy5meFdyYXBwZXJTZXJ2aWNlLnJlZ2lzdGVyQ3VzdG9tQ29tcG9uZW50KCdEcm9wZG93biB3aXRoIFNlYXJjaCcsICdsaWItZHJvcGRvd24td2l0aC1zZWFyY2gnLCBEcm9wZG93bldpdGhTZWFyY2hDb21wb25lbnQpO1xyXG4gICAgfVxyXG4gICAgLy8gIGlmICghQm9vbGVhbih0aGlzLmZ4V3JhcHBlclNlcnZpY2UuZ2V0Q29tcG9uZW50KCdsaWItY3VzdG9taXplLWRyb3Bkb3duJykpKSB7XHJcbiAgICAvLyAgIHRoaXMuZnhXcmFwcGVyU2VydmljZS5yZWdpc3RlckN1c3RvbUNvbXBvbmVudCgnTXVsdGlzZWxlY3Qgd2l0aCBGb3JtJywgJ2xpYi1jdXN0b21pemUtZHJvcGRvd24nLCBDdXN0b21pemVEcm9wZG93bkNvbXBvbmVudCk7XHJcbiAgICAvLyB9XHJcbiAgfTtcclxuXHJcbiBcclxuICBwdWJsaWMgZ2V0UGFyc2VkRm9ybSgpOiBGeEZvcm0ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50QnVpbGRlci5nZXRQYXJzZWRGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5pdGlhbGl6ZWRGeEZvcm0oKTogRnhGb3JtIHtcclxuICAgIHJldHVybiBGeFV0aWxzLmNyZWF0ZU5ld0Zvcm0oKTsgXHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19