@valtimo/components 12.6.1 → 12.8.0

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 (74) hide show
  1. package/assets/css/formio-carbon.scss +132 -14
  2. package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +28 -19
  3. package/esm2022/lib/components/form-io/formio-value-resolver-selector/formio-value-resolver-selector.component.mjs +1 -1
  4. package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +122 -74
  5. package/esm2022/lib/components/multi-input/carbon-multi-input.module.mjs +25 -3
  6. package/esm2022/lib/components/multi-input/components/arbitrary-amount-value/arbitrary-amount-value.component.mjs +63 -0
  7. package/esm2022/lib/components/multi-input/components/arbitrary-amount-value/index.mjs +17 -0
  8. package/esm2022/lib/components/multi-input/components/index.mjs +23 -0
  9. package/esm2022/lib/components/multi-input/components/key-dropdown-value/index.mjs +17 -0
  10. package/esm2022/lib/components/multi-input/components/key-dropdown-value/key-dropdown-value.component.mjs +71 -0
  11. package/esm2022/lib/components/multi-input/components/key-value/index.mjs +17 -0
  12. package/esm2022/lib/components/multi-input/components/key-value/key-value.component.mjs +62 -0
  13. package/esm2022/lib/components/multi-input/components/key-value-path-selector/index.mjs +17 -0
  14. package/esm2022/lib/components/multi-input/components/key-value-path-selector/key-value-path-selector.component.mjs +82 -0
  15. package/esm2022/lib/components/multi-input/components/single-value/index.mjs +17 -0
  16. package/esm2022/lib/components/multi-input/components/single-value/single-value.component.mjs +49 -0
  17. package/esm2022/lib/components/multi-input/components/value-path-selector-dropdown-value/index.mjs +17 -0
  18. package/esm2022/lib/components/multi-input/components/value-path-selector-dropdown-value/value-path-selector-dropdown-value.component.mjs +92 -0
  19. package/esm2022/lib/components/multi-input/components/value-path-selector-value/index.mjs +17 -0
  20. package/esm2022/lib/components/multi-input/components/value-path-selector-value/value-path-selector-value.component.mjs +82 -0
  21. package/esm2022/lib/components/value-path-selector/index.mjs +17 -0
  22. package/esm2022/lib/components/value-path-selector/value-path-selector.component.mjs +62 -22
  23. package/esm2022/lib/models/multi-input.model.mjs +1 -1
  24. package/esm2022/lib/models/value-path-selector.model.mjs +7 -2
  25. package/esm2022/lib/services/key-generator.service.mjs +2 -2
  26. package/esm2022/lib/services/value-path-selector.service.mjs +55 -40
  27. package/fesm2022/valtimo-components.mjs +1042 -315
  28. package/fesm2022/valtimo-components.mjs.map +1 -1
  29. package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -1
  30. package/lib/components/multi-input/carbon-multi-input.component.d.ts +33 -23
  31. package/lib/components/multi-input/carbon-multi-input.component.d.ts.map +1 -1
  32. package/lib/components/multi-input/carbon-multi-input.module.d.ts +8 -1
  33. package/lib/components/multi-input/carbon-multi-input.module.d.ts.map +1 -1
  34. package/lib/components/multi-input/components/arbitrary-amount-value/arbitrary-amount-value.component.d.ts +23 -0
  35. package/lib/components/multi-input/components/arbitrary-amount-value/arbitrary-amount-value.component.d.ts.map +1 -0
  36. package/lib/components/multi-input/components/arbitrary-amount-value/index.d.ts +2 -0
  37. package/lib/components/multi-input/components/arbitrary-amount-value/index.d.ts.map +1 -0
  38. package/lib/components/multi-input/components/index.d.ts +8 -0
  39. package/lib/components/multi-input/components/index.d.ts.map +1 -0
  40. package/lib/components/multi-input/components/key-dropdown-value/index.d.ts +2 -0
  41. package/lib/components/multi-input/components/key-dropdown-value/index.d.ts.map +1 -0
  42. package/lib/components/multi-input/components/key-dropdown-value/key-dropdown-value.component.d.ts +27 -0
  43. package/lib/components/multi-input/components/key-dropdown-value/key-dropdown-value.component.d.ts.map +1 -0
  44. package/lib/components/multi-input/components/key-value/index.d.ts +2 -0
  45. package/lib/components/multi-input/components/key-value/index.d.ts.map +1 -0
  46. package/lib/components/multi-input/components/key-value/key-value.component.d.ts +22 -0
  47. package/lib/components/multi-input/components/key-value/key-value.component.d.ts.map +1 -0
  48. package/lib/components/multi-input/components/key-value-path-selector/index.d.ts +2 -0
  49. package/lib/components/multi-input/components/key-value-path-selector/index.d.ts.map +1 -0
  50. package/lib/components/multi-input/components/key-value-path-selector/key-value-path-selector.component.d.ts +26 -0
  51. package/lib/components/multi-input/components/key-value-path-selector/key-value-path-selector.component.d.ts.map +1 -0
  52. package/lib/components/multi-input/components/single-value/index.d.ts +2 -0
  53. package/lib/components/multi-input/components/single-value/index.d.ts.map +1 -0
  54. package/lib/components/multi-input/components/single-value/single-value.component.d.ts +16 -0
  55. package/lib/components/multi-input/components/single-value/single-value.component.d.ts.map +1 -0
  56. package/lib/components/multi-input/components/value-path-selector-dropdown-value/index.d.ts +2 -0
  57. package/lib/components/multi-input/components/value-path-selector-dropdown-value/index.d.ts.map +1 -0
  58. package/lib/components/multi-input/components/value-path-selector-dropdown-value/value-path-selector-dropdown-value.component.d.ts +31 -0
  59. package/lib/components/multi-input/components/value-path-selector-dropdown-value/value-path-selector-dropdown-value.component.d.ts.map +1 -0
  60. package/lib/components/multi-input/components/value-path-selector-value/index.d.ts +2 -0
  61. package/lib/components/multi-input/components/value-path-selector-value/index.d.ts.map +1 -0
  62. package/lib/components/multi-input/components/value-path-selector-value/value-path-selector-value.component.d.ts +26 -0
  63. package/lib/components/multi-input/components/value-path-selector-value/value-path-selector-value.component.d.ts.map +1 -0
  64. package/lib/components/value-path-selector/index.d.ts +2 -0
  65. package/lib/components/value-path-selector/index.d.ts.map +1 -0
  66. package/lib/components/value-path-selector/value-path-selector.component.d.ts +13 -7
  67. package/lib/components/value-path-selector/value-path-selector.component.d.ts.map +1 -1
  68. package/lib/models/multi-input.model.d.ts +3 -2
  69. package/lib/models/multi-input.model.d.ts.map +1 -1
  70. package/lib/models/value-path-selector.model.d.ts +17 -2
  71. package/lib/models/value-path-selector.model.d.ts.map +1 -1
  72. package/lib/services/value-path-selector.service.d.ts +8 -4
  73. package/lib/services/value-path-selector.service.d.ts.map +1 -1
  74. package/package.json +1 -1
@@ -13,15 +13,16 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { Component, EventEmitter, forwardRef, HostBinding, HostListener, Input, Output, } from '@angular/core';
17
16
  import { CommonModule } from '@angular/common';
18
- import { BehaviorSubject, combineLatest, filter, map, of, startWith, Subscription, switchMap, tap, } from 'rxjs';
19
- import { ValuePathSelectorInputMode, } from '../../models/value-path-selector.model';
20
- import { DropdownModule, InputModule, LoadingModule, ToggleModule, } from 'carbon-components-angular';
17
+ import { Component, EventEmitter, forwardRef, HostBinding, HostListener, Input, Output, } from '@angular/core';
21
18
  import { FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule, } from '@angular/forms';
22
- import { InputLabelModule } from '../input-label/input-label.module';
23
19
  import { TranslateModule } from '@ngx-translate/core';
20
+ import { DropdownModule, InputModule, LoadingModule, ToggleModule, } from 'carbon-components-angular';
21
+ import { BehaviorSubject, combineLatest, filter, map, of, startWith, Subscription, switchMap, tap, } from 'rxjs';
24
22
  import { distinctUntilChanged } from 'rxjs/operators';
23
+ import { ValuePathType } from '../../models';
24
+ import { ValuePathSelectorInputMode, } from '../../models/value-path-selector.model';
25
+ import { InputLabelModule } from '../input-label/input-label.module';
25
26
  import * as i0 from "@angular/core";
26
27
  import * as i1 from "../../services";
27
28
  import * as i2 from "@angular/forms";
@@ -84,15 +85,18 @@ export class ValuePathSelectorComponent {
84
85
  if (this.showDocumentDefinitionSelector)
85
86
  this._inputMode$.next(ValuePathSelectorInputMode.MANUAL);
86
87
  }
88
+ set type(value) {
89
+ this._type$.next(value);
90
+ }
91
+ set parentItem(value) {
92
+ this._parentItem$.next(value);
93
+ }
87
94
  get _documentDefinitionName$() {
88
95
  return this._documentDefinitionNameSubject$.pipe(filter(value => !!value));
89
96
  }
90
97
  get _prefixes$() {
91
98
  return this._prefixesSubject$.pipe(filter(value => !!value));
92
99
  }
93
- get inputModeIsDropdown$() {
94
- return this._inputMode$.pipe(map(mode => mode === ValuePathSelectorInputMode.DROPDOWN));
95
- }
96
100
  constructor(valuePathSelectorService, formBuilder, documentService) {
97
101
  this.valuePathSelectorService = valuePathSelectorService;
98
102
  this.formBuilder = formBuilder;
@@ -110,24 +114,51 @@ export class ValuePathSelectorComponent {
110
114
  this.required = false;
111
115
  this.showDocumentDefinitionSelector = false;
112
116
  this.notation = 'dots';
117
+ this._type$ = new BehaviorSubject(ValuePathType.FIELD);
118
+ this._parentItem$ = new BehaviorSubject(null);
113
119
  this.valueChangeEvent = new EventEmitter();
120
+ this.collectionSelected = new EventEmitter();
114
121
  this._documentDefinitionNameSubject$ = new BehaviorSubject('');
115
122
  this._version$ = new BehaviorSubject(null);
116
123
  this._prefixesSubject$ = new BehaviorSubject(null);
117
124
  this._inputMode$ = new BehaviorSubject(ValuePathSelectorInputMode.DROPDOWN);
125
+ this.inputModeIsDropdown$ = this._inputMode$.pipe(map(mode => {
126
+ return mode === ValuePathSelectorInputMode.DROPDOWN;
127
+ }));
118
128
  this.loadingValuePathItems$ = new BehaviorSubject(true);
119
129
  this.disabled$ = new BehaviorSubject(false);
120
130
  this._cachedOptions = [];
121
- this.valuePathListItems$ = combineLatest([
122
- this._documentDefinitionName$,
123
- this._prefixes$,
124
- this._version$,
125
- ]).pipe(tap(() => this.loadingValuePathItems$.next(true)), switchMap(([documentDefinitionName, prefixes, version]) => typeof version === 'number'
126
- ? this.valuePathSelectorService.getResolvableKeysPerPrefix(prefixes, documentDefinitionName, version)
127
- : this.valuePathSelectorService.getResolvableKeysPerPrefix(prefixes, documentDefinitionName)), map(result => result.map(path => this.getFormattedPath(path)).sort((a, b) => a.localeCompare(b))), tap(options => (this._cachedOptions = options)), switchMap(options => combineLatest([of(options), this._selectedPath$, this.inputModeIsDropdown$])), tap(([options, selectedPath, inputModeIsDropdown]) => {
128
- if (!options.includes(selectedPath) && !!selectedPath && inputModeIsDropdown)
131
+ this.valuePathListItems$ = this._parentItem$.pipe(tap(() => this.loadingValuePathItems$.next(true)), switchMap((parentItem) => parentItem
132
+ ? of(parentItem.children?.map((child) => ({ path: child })) ?? [])
133
+ : combineLatest([
134
+ this._documentDefinitionName$,
135
+ this._prefixes$,
136
+ this._type$,
137
+ this._version$,
138
+ ]).pipe(switchMap(([documentDefinitionName, prefixes, type, version]) => typeof version === 'number'
139
+ ? this.valuePathSelectorService.getResolvableKeys(prefixes, documentDefinitionName, type, version)
140
+ : this.valuePathSelectorService.getResolvableKeys(prefixes, documentDefinitionName, type)))), map((results) => results
141
+ .map((result) => ({
142
+ ...result,
143
+ formattedPath: !this._parentItem$.getValue()
144
+ ? this.getFormattedPath(result.path)
145
+ : result.path,
146
+ }))
147
+ .sort((a, b) => a.formattedPath.localeCompare(b.formattedPath))), tap(options => (this._cachedOptions = options)), switchMap(options => combineLatest([of(options), this._selectedPath$, this.inputModeIsDropdown$])), tap(([options, selectedPath, inputModeIsDropdown]) => {
148
+ const formattedOptions = options.map(option => option.formattedPath);
149
+ if (!formattedOptions.includes(selectedPath) && !!selectedPath && inputModeIsDropdown)
129
150
  this._inputMode$.next(ValuePathSelectorInputMode.MANUAL);
130
- }), map(([options, selectedPath]) => options.map(option => ({ content: option, selected: option === selectedPath }))), tap(() => this.loadingValuePathItems$.next(false)));
151
+ }), map(([options, selectedPath]) => options.map(option => {
152
+ const mappedOption = {
153
+ content: option.formattedPath,
154
+ selected: option.formattedPath === selectedPath,
155
+ path: option.path,
156
+ ...(!!option.children && { children: option.children }),
157
+ };
158
+ if (mappedOption.selected)
159
+ this.onPathSelected({ item: mappedOption });
160
+ return mappedOption;
161
+ })), tap(() => this.loadingValuePathItems$.next(false)));
131
162
  this.loadingDocumentDefinitionItems$ = new BehaviorSubject(true);
132
163
  this.documentDefinitionListItems$ = this.valuePathSelectorService.getDocumentDefinitionCache().pipe(switchMap(cache => combineLatest([
133
164
  cache ? of(cache) : this.documentService.getAllDefinitions(),
@@ -174,6 +205,8 @@ export class ValuePathSelectorComponent {
174
205
  const selectedPath = event?.item?.content;
175
206
  if (!selectedPath)
176
207
  return;
208
+ if (this.collectionSelected.observed)
209
+ this.collectionSelected.emit(event.item);
177
210
  this.selectedPath.setValue(selectedPath);
178
211
  }
179
212
  onDocumentDefinitionSelected(event) {
@@ -185,7 +218,8 @@ export class ValuePathSelectorComponent {
185
218
  }
186
219
  onInputModeChange(toDropdownMode) {
187
220
  const currentPathValue = this.selectedPath.value;
188
- if (toDropdownMode && !this._cachedOptions.includes(currentPathValue)) {
221
+ if (toDropdownMode &&
222
+ !this._cachedOptions.map(option => option.formattedPath).includes(currentPathValue)) {
189
223
  this.selectedPath.setValue('');
190
224
  }
191
225
  this._inputMode$.next(toDropdownMode ? ValuePathSelectorInputMode.DROPDOWN : ValuePathSelectorInputMode.MANUAL);
@@ -207,13 +241,13 @@ export class ValuePathSelectorComponent {
207
241
  return `${prefix}:${requiredNotation === 'dots' ? formattedPath.substring(1) : formattedPath}`;
208
242
  }
209
243
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValuePathSelectorComponent, deps: [{ token: i1.ValuePathSelectorService }, { token: i2.FormBuilder }, { token: i3.DocumentService }], target: i0.ɵɵFactoryTarget.Component }); }
210
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ValuePathSelectorComponent, isStandalone: true, selector: "valtimo-value-path-selector", inputs: { name: "name", appendInline: "appendInline", margin: "margin", marginLg: "marginLg", marginXl: "marginXl", disabled: "disabled", documentDefinitionName: "documentDefinitionName", version: "version", prefixes: "prefixes", label: "label", tooltip: "tooltip", required: "required", showDocumentDefinitionSelector: "showDocumentDefinitionSelector", notation: "notation", defaultValue: "defaultValue" }, outputs: { valueChangeEvent: "valueChangeEvent" }, host: { listeners: { "focusout": "onBlur()" }, properties: { "class.value-path-selector--margin-bottom": "this._showMargin", "class.value-path-selector--margin-bottom-lg": "this._showMarginLg", "class.value-path-selector--margin-bottom-xl": "this._showMarginXl" } }, providers: [
244
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ValuePathSelectorComponent, isStandalone: true, selector: "valtimo-value-path-selector", inputs: { name: "name", appendInline: "appendInline", margin: "margin", marginLg: "marginLg", marginXl: "marginXl", disabled: "disabled", documentDefinitionName: "documentDefinitionName", version: "version", prefixes: "prefixes", label: "label", tooltip: "tooltip", required: "required", showDocumentDefinitionSelector: "showDocumentDefinitionSelector", notation: "notation", defaultValue: "defaultValue", type: "type", parentItem: "parentItem" }, outputs: { valueChangeEvent: "valueChangeEvent", collectionSelected: "collectionSelected" }, host: { listeners: { "focusout": "onBlur()" }, properties: { "class.value-path-selector--margin-bottom": "this._showMargin", "class.value-path-selector--margin-bottom-lg": "this._showMarginLg", "class.value-path-selector--margin-bottom-xl": "this._showMarginXl" } }, providers: [
211
245
  {
212
246
  provide: NG_VALUE_ACCESSOR,
213
247
  multi: true,
214
248
  useExisting: forwardRef(() => ValuePathSelectorComponent),
215
249
  },
216
- ], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n inputModeIsDropdown: inputModeIsDropdown$ | async,\n valuePathListItems: valuePathListItems$ | async,\n loadingValuePathItems: loadingValuePathItems$ | async,\n disabled: disabled$ | async,\n } as obs\"\n>\n <v-input-label [required]=\"required\" [title]=\"label\" [tooltip]=\"tooltip\"> </v-input-label>\n\n <form [formGroup]=\"formGroup\" class=\"value-path-selector__form\">\n @if (obs.inputModeIsDropdown) {\n <ng-container\n *ngIf=\"\n showDocumentDefinitionSelector && {\n loadingDocumentDefinitionItems: loadingDocumentDefinitionItems$ | async,\n documentDefinitionListItems: documentDefinitionListItems$ | async,\n } as docObs\n \"\n >\n <cds-dropdown\n data-testid=\"value-path-selector-documentDefinition\"\n [appendInline]=\"appendInline\"\n [disabled]=\"\n obs.disabled ||\n docObs.loadingDocumentDefinitionItems ||\n !docObs.documentDefinitionListItems\n \"\n (selected)=\"onDocumentDefinitionSelected($event)\"\n [placeholder]=\"'valuePathSelector.selectDocDefPlaceholder' | translate\"\n >\n <cds-dropdown-list [items]=\"docObs.documentDefinitionListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-container>\n\n <cds-dropdown\n data-testid=\"value-path-selector-valuePath\"\n [appendInline]=\"appendInline\"\n [disabled]=\"obs.disabled || obs.loadingValuePathItems || !obs.valuePathListItems\"\n (selected)=\"onPathSelected($event)\"\n [placeholder]=\"'valuePathSelector.placeholder' | translate\"\n >\n <cds-dropdown-list [items]=\"obs.valuePathListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n } @else {\n <input\n data-testid=\"value-path-selector-input\"\n cdsText\n type=\"text\"\n formControlName=\"selectedPath\"\n />\n }\n\n <cds-toggle\n data-testid=\"value-path-selector-toggle\"\n [disabled]=\"obs.disabled\"\n [onText]=\"'valuePathSelector.dropdown' | translate\"\n [offText]=\"'valuePathSelector.manual' | translate\"\n [checked]=\"obs.inputModeIsDropdown\"\n (checkedChange)=\"onInputModeChange($event)\"\n ></cds-toggle>\n </form>\n</ng-container>\n", styles: [":host{width:100%;display:flex;flex-direction:column}::ng-deep .value-path-selector--margin-bottom{margin-bottom:16px}::ng-deep .value-path-selector--margin-bottom-lg{margin-bottom:24px}::ng-deep .value-path-selector--margin-bottom-xl{margin-bottom:34px}.value-path-selector__form{display:flex;width:100%;align-items:center;gap:16px;justify-content:space-between}.value-path-selector__form ::ng-deep cds-dropdown{width:100%}.value-path-selector__form ::ng-deep .cds--toggle__label-text{display:none}.value-path-selector__form ::ng-deep .cds--toggle__label{display:flex}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i5.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: LoadingModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ToggleModule }, { kind: "component", type: i5.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "skeleton"] }, { kind: "ngmodule", type: InputModule }, { kind: "directive", type: i5.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: InputLabelModule }, { kind: "component", type: i6.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
250
+ ], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n inputModeIsDropdown: inputModeIsDropdown$ | async,\n valuePathListItems: valuePathListItems$ | async,\n loadingValuePathItems: loadingValuePathItems$ | async,\n disabled: disabled$ | async,\n } as obs\"\n>\n <v-input-label [required]=\"required\" [title]=\"label\" [tooltip]=\"tooltip\"> </v-input-label>\n\n <form\n [formGroup]=\"formGroup\"\n class=\"value-path-selector__form\"\n [ngClass]=\"{\n 'value-path-selector__form--doc-def-selection':\n showDocumentDefinitionSelector && obs.inputModeIsDropdown,\n }\"\n >\n <cds-toggle\n data-testid=\"value-path-selector-toggle\"\n size=\"sm\"\n [disabled]=\"obs.disabled\"\n [onText]=\"'valuePathSelector.dropdown' | translate\"\n [offText]=\"'valuePathSelector.manual' | translate\"\n [checked]=\"obs.inputModeIsDropdown\"\n (checkedChange)=\"onInputModeChange($event)\"\n ></cds-toggle>\n\n @if (obs.inputModeIsDropdown) {\n <ng-container\n *ngIf=\"\n showDocumentDefinitionSelector && {\n loadingDocumentDefinitionItems: loadingDocumentDefinitionItems$ | async,\n documentDefinitionListItems: documentDefinitionListItems$ | async,\n } as docObs\n \"\n >\n <cds-dropdown\n data-testid=\"value-path-selector-documentDefinition\"\n [appendInline]=\"appendInline\"\n [disabled]=\"\n obs.disabled ||\n docObs.loadingDocumentDefinitionItems ||\n !docObs.documentDefinitionListItems ||\n (docObs.documentDefinitionListItems || []).length === 0\n \"\n (selected)=\"onDocumentDefinitionSelected($event)\"\n [placeholder]=\"'valuePathSelector.selectDocDefPlaceholder' | translate\"\n >\n <cds-dropdown-list [items]=\"docObs.documentDefinitionListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-container>\n\n <cds-dropdown\n data-testid=\"value-path-selector-valuePath\"\n [appendInline]=\"appendInline\"\n [disabled]=\"\n obs.disabled ||\n obs.loadingValuePathItems ||\n !obs.valuePathListItems ||\n (obs.valuePathListItems || []).length === 0\n \"\n (selected)=\"onPathSelected($event)\"\n [placeholder]=\"'valuePathSelector.placeholder' | translate\"\n >\n <cds-dropdown-list [items]=\"obs.valuePathListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n } @else {\n <input\n data-testid=\"value-path-selector-input\"\n cdsText\n type=\"text\"\n formControlName=\"selectedPath\"\n />\n }\n </form>\n</ng-container>\n", styles: [":host{width:100%;display:flex;flex-direction:column}::ng-deep .value-path-selector--margin-bottom{margin-bottom:16px}::ng-deep .value-path-selector--margin-bottom-lg{margin-bottom:24px}::ng-deep .value-path-selector--margin-bottom-xl{margin-bottom:34px}.value-path-selector__form{display:grid;grid-template-columns:110px 1fr;width:100%;align-items:center;gap:16px;justify-content:space-between}.value-path-selector__form--doc-def-selection{grid-template-columns:110px 1fr 1fr}.value-path-selector__form ::ng-deep cds-dropdown{width:100%;min-width:0}.value-path-selector__form ::ng-deep .cds--toggle__label-text{display:none}.value-path-selector__form ::ng-deep .cds--toggle__label{display:flex}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i5.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i5.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: LoadingModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ToggleModule }, { kind: "component", type: i5.Toggle, selector: "cds-toggle, ibm-toggle", inputs: ["offText", "onText", "label", "size", "hideLabel", "skeleton"] }, { kind: "ngmodule", type: InputModule }, { kind: "directive", type: i5.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: InputLabelModule }, { kind: "component", type: i6.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] }); }
217
251
  }
218
252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValuePathSelectorComponent, decorators: [{
219
253
  type: Component,
@@ -233,7 +267,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
233
267
  multi: true,
234
268
  useExisting: forwardRef(() => ValuePathSelectorComponent),
235
269
  },
236
- ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n inputModeIsDropdown: inputModeIsDropdown$ | async,\n valuePathListItems: valuePathListItems$ | async,\n loadingValuePathItems: loadingValuePathItems$ | async,\n disabled: disabled$ | async,\n } as obs\"\n>\n <v-input-label [required]=\"required\" [title]=\"label\" [tooltip]=\"tooltip\"> </v-input-label>\n\n <form [formGroup]=\"formGroup\" class=\"value-path-selector__form\">\n @if (obs.inputModeIsDropdown) {\n <ng-container\n *ngIf=\"\n showDocumentDefinitionSelector && {\n loadingDocumentDefinitionItems: loadingDocumentDefinitionItems$ | async,\n documentDefinitionListItems: documentDefinitionListItems$ | async,\n } as docObs\n \"\n >\n <cds-dropdown\n data-testid=\"value-path-selector-documentDefinition\"\n [appendInline]=\"appendInline\"\n [disabled]=\"\n obs.disabled ||\n docObs.loadingDocumentDefinitionItems ||\n !docObs.documentDefinitionListItems\n \"\n (selected)=\"onDocumentDefinitionSelected($event)\"\n [placeholder]=\"'valuePathSelector.selectDocDefPlaceholder' | translate\"\n >\n <cds-dropdown-list [items]=\"docObs.documentDefinitionListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-container>\n\n <cds-dropdown\n data-testid=\"value-path-selector-valuePath\"\n [appendInline]=\"appendInline\"\n [disabled]=\"obs.disabled || obs.loadingValuePathItems || !obs.valuePathListItems\"\n (selected)=\"onPathSelected($event)\"\n [placeholder]=\"'valuePathSelector.placeholder' | translate\"\n >\n <cds-dropdown-list [items]=\"obs.valuePathListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n } @else {\n <input\n data-testid=\"value-path-selector-input\"\n cdsText\n type=\"text\"\n formControlName=\"selectedPath\"\n />\n }\n\n <cds-toggle\n data-testid=\"value-path-selector-toggle\"\n [disabled]=\"obs.disabled\"\n [onText]=\"'valuePathSelector.dropdown' | translate\"\n [offText]=\"'valuePathSelector.manual' | translate\"\n [checked]=\"obs.inputModeIsDropdown\"\n (checkedChange)=\"onInputModeChange($event)\"\n ></cds-toggle>\n </form>\n</ng-container>\n", styles: [":host{width:100%;display:flex;flex-direction:column}::ng-deep .value-path-selector--margin-bottom{margin-bottom:16px}::ng-deep .value-path-selector--margin-bottom-lg{margin-bottom:24px}::ng-deep .value-path-selector--margin-bottom-xl{margin-bottom:34px}.value-path-selector__form{display:flex;width:100%;align-items:center;gap:16px;justify-content:space-between}.value-path-selector__form ::ng-deep cds-dropdown{width:100%}.value-path-selector__form ::ng-deep .cds--toggle__label-text{display:none}.value-path-selector__form ::ng-deep .cds--toggle__label{display:flex}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
270
+ ], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container\n *ngIf=\"{\n inputModeIsDropdown: inputModeIsDropdown$ | async,\n valuePathListItems: valuePathListItems$ | async,\n loadingValuePathItems: loadingValuePathItems$ | async,\n disabled: disabled$ | async,\n } as obs\"\n>\n <v-input-label [required]=\"required\" [title]=\"label\" [tooltip]=\"tooltip\"> </v-input-label>\n\n <form\n [formGroup]=\"formGroup\"\n class=\"value-path-selector__form\"\n [ngClass]=\"{\n 'value-path-selector__form--doc-def-selection':\n showDocumentDefinitionSelector && obs.inputModeIsDropdown,\n }\"\n >\n <cds-toggle\n data-testid=\"value-path-selector-toggle\"\n size=\"sm\"\n [disabled]=\"obs.disabled\"\n [onText]=\"'valuePathSelector.dropdown' | translate\"\n [offText]=\"'valuePathSelector.manual' | translate\"\n [checked]=\"obs.inputModeIsDropdown\"\n (checkedChange)=\"onInputModeChange($event)\"\n ></cds-toggle>\n\n @if (obs.inputModeIsDropdown) {\n <ng-container\n *ngIf=\"\n showDocumentDefinitionSelector && {\n loadingDocumentDefinitionItems: loadingDocumentDefinitionItems$ | async,\n documentDefinitionListItems: documentDefinitionListItems$ | async,\n } as docObs\n \"\n >\n <cds-dropdown\n data-testid=\"value-path-selector-documentDefinition\"\n [appendInline]=\"appendInline\"\n [disabled]=\"\n obs.disabled ||\n docObs.loadingDocumentDefinitionItems ||\n !docObs.documentDefinitionListItems ||\n (docObs.documentDefinitionListItems || []).length === 0\n \"\n (selected)=\"onDocumentDefinitionSelected($event)\"\n [placeholder]=\"'valuePathSelector.selectDocDefPlaceholder' | translate\"\n >\n <cds-dropdown-list [items]=\"docObs.documentDefinitionListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n </ng-container>\n\n <cds-dropdown\n data-testid=\"value-path-selector-valuePath\"\n [appendInline]=\"appendInline\"\n [disabled]=\"\n obs.disabled ||\n obs.loadingValuePathItems ||\n !obs.valuePathListItems ||\n (obs.valuePathListItems || []).length === 0\n \"\n (selected)=\"onPathSelected($event)\"\n [placeholder]=\"'valuePathSelector.placeholder' | translate\"\n >\n <cds-dropdown-list [items]=\"obs.valuePathListItems || []\"></cds-dropdown-list>\n </cds-dropdown>\n } @else {\n <input\n data-testid=\"value-path-selector-input\"\n cdsText\n type=\"text\"\n formControlName=\"selectedPath\"\n />\n }\n </form>\n</ng-container>\n", styles: [":host{width:100%;display:flex;flex-direction:column}::ng-deep .value-path-selector--margin-bottom{margin-bottom:16px}::ng-deep .value-path-selector--margin-bottom-lg{margin-bottom:24px}::ng-deep .value-path-selector--margin-bottom-xl{margin-bottom:34px}.value-path-selector__form{display:grid;grid-template-columns:110px 1fr;width:100%;align-items:center;gap:16px;justify-content:space-between}.value-path-selector__form--doc-def-selection{grid-template-columns:110px 1fr 1fr}.value-path-selector__form ::ng-deep cds-dropdown{width:100%;min-width:0}.value-path-selector__form ::ng-deep .cds--toggle__label-text{display:none}.value-path-selector__form ::ng-deep .cds--toggle__label{display:flex}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
237
271
  }], ctorParameters: () => [{ type: i1.ValuePathSelectorService }, { type: i2.FormBuilder }, { type: i3.DocumentService }], propDecorators: { _showMargin: [{
238
272
  type: HostBinding,
239
273
  args: ['class.value-path-selector--margin-bottom']
@@ -276,7 +310,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
276
310
  type: Input
277
311
  }], defaultValue: [{
278
312
  type: Input
313
+ }], type: [{
314
+ type: Input
315
+ }], parentItem: [{
316
+ type: Input
279
317
  }], valueChangeEvent: [{
280
318
  type: Output
319
+ }], collectionSelected: [{
320
+ type: Output
281
321
  }] } });
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtcGF0aC1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3ZhbHVlLXBhdGgtc2VsZWN0b3IvdmFsdWUtcGF0aC1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3ZhbHVlLXBhdGgtc2VsZWN0b3IvdmFsdWUtcGF0aC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLE1BQU0sRUFDTixHQUFHLEVBRUgsRUFBRSxFQUNGLFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCwwQkFBMEIsR0FHM0IsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLFdBQVcsRUFFWCxhQUFhLEVBQ2IsWUFBWSxHQUNiLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUlMLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDbkUsT0FBTyxFQUFDLGVBQWUsRUFBQyxN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LFVBQVU7Z0JBNEJSLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ1UsWUFBWTtzQkFBM0IsS0FBSztnQkFDYyxNQUFNO3NCQUF6QixLQUFLO2dCQUdjLFFBQVE7c0JBQTNCLEtBQUs7Z0JBR2MsUUFBUTtzQkFBM0IsS0FBSztnQkFHYyxRQUFRO3NCQUEzQixLQUFLO2dCQVNjLHNCQUFzQjtzQkFBekMsS0FBSztnQkFJYyxPQUFPO3NCQUExQixLQUFLO2dCQUljLFFBQVE7c0JBQTNCLEtBQUs7Z0JBSVUsS0FBSztzQkFBcEIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBQ1UsOEJBQThCO3NCQUE3QyxLQUFLO2dCQUNVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBRWMsWUFBWTtzQkFBL0IsS0FBSztnQkFNSSxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1ZhbHVlUGF0aFNlbGVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHN0YXJ0V2l0aCxcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBWYWx1ZVBhdGhTZWxlY3RvcklucHV0TW9kZSxcbiAgVmFsdWVQYXRoU2VsZWN0b3JOb3RhdGlvbixcbiAgVmFsdWVQYXRoU2VsZWN0b3JQcmVmaXgsXG59IGZyb20gJy4uLy4uL21vZGVscy92YWx1ZS1wYXRoLXNlbGVjdG9yLm1vZGVsJztcbmltcG9ydCB7XG4gIERyb3Bkb3duTW9kdWxlLFxuICBJbnB1dE1vZHVsZSxcbiAgTGlzdEl0ZW0sXG4gIExvYWRpbmdNb2R1bGUsXG4gIFRvZ2dsZU1vZHVsZSxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0lucHV0TGFiZWxNb2R1bGV9IGZyb20gJy4uL2lucHV0LWxhYmVsL2lucHV0LWxhYmVsLm1vZHVsZSc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0RvY3VtZW50U2VydmljZX0gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtkaXN0aW5jdFVudGlsQ2hhbmdlZH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXZhbHVlLXBhdGgtc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vdmFsdWUtcGF0aC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3ZhbHVlLXBhdGgtc2VsZWN0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEcm9wZG93bk1vZHVsZSxcbiAgICBMb2FkaW5nTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVG9nZ2xlTW9kdWxlLFxuICAgIElucHV0TW9kdWxlLFxuICAgIElucHV0TGFiZWxNb2R1bGUsXG4gICAgSW5wdXRMYWJlbE1vZHVsZSxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBWYWx1ZVBhdGhTZWxlY3RvckNvbXBvbmVudCksXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVmFsdWVQYXRoU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnZhbHVlLXBhdGgtc2VsZWN0b3ItLW1hcmdpbi1ib3R0b20nKSBwcml2YXRlIF9zaG93TWFyZ2luOiBib29sZWFuID0gZmFsc2U7XG4gIEBIb3N0QmluZGluZygnY2xhc3MudmFsdWUtcGF0aC1zZWxlY3Rvci0tbWFyZ2luLWJvdHRvbS1sZycpIHByaXZhdGUgX3Nob3dNYXJnaW5MZzogYm9vbGVhbiA9XG4gICAgZmFsc2U7XG4gIEBIb3N0QmluZGluZygnY2xhc3MudmFsdWUtcGF0aC1zZWxlY3Rvci0tbWFyZ2luLWJvdHRvbS14bCcpIHByaXZhdGUgX3Nob3dNYXJnaW5YbDogYm9vbGVhbiA9XG4gICAgZmFsc2U7XG4gIEBIb3N0TGlzdGVuZXIoJ2ZvY3Vzb3V0JylcbiAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLm9uQmx1ckV2ZW50KCk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgc2VsZWN0ZWRQYXRoOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICB9KTtcblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkUGF0aCgpOiBBYnN0cmFjdENvbnRyb2w8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLmdldCgnc2VsZWN0ZWRQYXRoJyk7XG4gIH1cblxuICBwcml2YXRlIF9vbkNoYW5nZUZ1bmN0aW9uITogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIHByaXZhdGUgX29uVG91Y2hlZEZ1bmN0aW9uITogKCkgPT4gdm9pZDtcblxuICBwdWJsaWMgZ2V0IF9zZWxlY3RlZFBhdGgkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRQYXRoLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHRoaXMuc2VsZWN0ZWRQYXRoLnZhbHVlKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICB0YXAodmFsdWUgPT4ge1xuICAgICAgICBpZiAodGhpcy5fb25DaGFuZ2VGdW5jdGlvbikge1xuICAgICAgICAgIHRoaXMuX29uQ2hhbmdlRnVuY3Rpb24odmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBASW5wdXQoKSBwdWJsaWMgbmFtZSA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgYXBwZW5kSW5saW5lID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgbWFyZ2luKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd01hcmdpbiA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgbWFyZ2luTGcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93TWFyZ2luTGcgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IG1hcmdpblhsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd01hcmdpblhsID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQkLm5leHQoISF2YWx1ZSk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgZG9jdW1lbnREZWZpbml0aW9uTmFtZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJqZWN0JC5uZXh0KHZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHZlcnNpb24odmFsdWU6IG51bWJlcikge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLl92ZXJzaW9uJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IHByZWZpeGVzKHZhbHVlOiBWYWx1ZVBhdGhTZWxlY3RvclByZWZpeFtdKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuX3ByZWZpeGVzU3ViamVjdCQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyB0b29sdGlwID0gJyc7XG4gIEBJbnB1dCgpIHB1YmxpYyByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd0RvY3VtZW50RGVmaW5pdGlvblNlbGVjdG9yID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBub3RhdGlvbjogVmFsdWVQYXRoU2VsZWN0b3JOb3RhdGlvbiA9ICdkb3RzJztcblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGRlZmF1bHRWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgIHRoaXMuc2VsZWN0ZWRQYXRoLnNldFZhbHVlKHZhbHVlKTtcbiAgICBpZiAodGhpcy5zaG93RG9jdW1lbnREZWZpbml0aW9uU2VsZWN0b3IpXG4gICAgICB0aGlzLl9pbnB1dE1vZGUkLm5leHQoVmFsdWVQYXRoU2VsZWN0b3JJbnB1dE1vZGUuTUFOVUFMKTtcbiAgfVxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2VFdmVudDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBnZXQgX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJqZWN0JC5waXBlKGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfdmVyc2lvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcmVmaXhlc1N1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWYWx1ZVBhdGhTZWxlY3RvclByZWZpeFtdIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgZ2V0IF9wcmVmaXhlcyQoKTogT2JzZXJ2YWJsZTxWYWx1ZVBhdGhTZWxlY3RvclByZWZpeFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZWZpeGVzU3ViamVjdCQucGlwZShmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXRNb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VmFsdWVQYXRoU2VsZWN0b3JJbnB1dE1vZGU+KFxuICAgIFZhbHVlUGF0aFNlbGVjdG9ySW5wdXRNb2RlLkRST1BET1dOXG4gICk7XG4gIHB1YmxpYyBnZXQgaW5wdXRNb2RlSXNEcm9wZG93biQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2lucHV0TW9kZSQucGlwZShtYXAobW9kZSA9PiBtb2RlID09PSBWYWx1ZVBhdGhTZWxlY3RvcklucHV0TW9kZS5EUk9QRE9XTikpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmdWYWx1ZVBhdGhJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzYWJsZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSBfY2FjaGVkT3B0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICBwdWJsaWMgdmFsdWVQYXRoTGlzdEl0ZW1zJDogT2JzZXJ2YWJsZTxMaXN0SXRlbVtdPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkLFxuICAgIHRoaXMuX3ByZWZpeGVzJCxcbiAgICB0aGlzLl92ZXJzaW9uJCxcbiAgXSkucGlwZShcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nVmFsdWVQYXRoSXRlbXMkLm5leHQodHJ1ZSkpLFxuICAgIHN3aXRjaE1hcCgoW2RvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHByZWZpeGVzLCB2ZXJzaW9uXSkgPT5cbiAgICAgIHR5cGVvZiB2ZXJzaW9uID09PSAnbnVtYmVyJ1xuICAgICAgICA/IHRoaXMudmFsdWVQYXRoU2VsZWN0b3JTZXJ2aWNlLmdldFJlc29sdmFibGVLZXlzUGVyUHJlZml4KFxuICAgICAgICAgICAgcHJlZml4ZXMsXG4gICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgdmVyc2lvblxuICAgICAgICAgIClcbiAgICAgICAgOiB0aGlzLnZhbHVlUGF0aFNlbGVjdG9yU2VydmljZS5nZXRSZXNvbHZhYmxlS2V5c1BlclByZWZpeChwcmVmaXhlcywgZG9jdW1lbnREZWZpbml0aW9uTmFtZSlcbiAgICApLFxuICAgIG1hcChyZXN1bHQgPT5cbiAgICAgIHJlc3VsdC5tYXAocGF0aCA9PiB0aGlzLmdldEZvcm1hdHRlZFBhdGgocGF0aCkpLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICApLFxuICAgIHRhcChvcHRpb25zID0+ICh0aGlzLl9jYWNoZWRPcHRpb25zID0gb3B0aW9ucykpLFxuICAgIHN3aXRjaE1hcChvcHRpb25zID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtvZihvcHRpb25zKSwgdGhpcy5fc2VsZWN0ZWRQYXRoJCwgdGhpcy5pbnB1dE1vZGVJc0Ryb3Bkb3duJF0pXG4gICAgKSxcbiAgICB0YXAoKFtvcHRpb25zLCBzZWxlY3RlZFBhdGgsIGlucHV0TW9kZUlzRHJvcGRvd25dKSA9PiB7XG4gICAgICBpZiAoIW9wdGlvbnMuaW5jbHVkZXMoc2VsZWN0ZWRQYXRoKSAmJiAhIXNlbGVjdGVkUGF0aCAmJiBpbnB1dE1vZGVJc0Ryb3Bkb3duKVxuICAgICAgICB0aGlzLl9pbnB1dE1vZGUkLm5leHQoVmFsdWVQYXRoU2VsZWN0b3JJbnB1dE1vZGUuTUFOVUFMKTtcbiAgICB9KSxcbiAgICBtYXAoKFtvcHRpb25zLCBzZWxlY3RlZFBhdGhdKSA9PlxuICAgICAgb3B0aW9ucy5tYXAob3B0aW9uID0+ICh7Y29udGVudDogb3B0aW9uLCBzZWxlY3RlZDogb3B0aW9uID09PSBzZWxlY3RlZFBhdGh9KSlcbiAgICApLFxuICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmdWYWx1ZVBhdGhJdGVtcyQubmV4dChmYWxzZSkpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGxvYWRpbmdEb2N1bWVudERlZmluaXRpb25JdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIHB1YmxpYyByZWFkb25seSBkb2N1bWVudERlZmluaXRpb25MaXN0SXRlbXMkOiBPYnNlcnZhYmxlPExpc3RJdGVtW10+ID1cbiAgICB0aGlzLnZhbHVlUGF0aFNlbGVjdG9yU2VydmljZS5nZXREb2N1bWVudERlZmluaXRpb25DYWNoZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY2FjaGUgPT5cbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgY2FjaGUgPyBvZihjYWNoZSkgOiB0aGlzLmRvY3VtZW50U2VydmljZS5nZXRBbGxEZWZpbml0aW9ucygpLFxuICAgICAgICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnBpcGUoc3RhcnRXaXRoKG51bGwpKSxcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICB0YXAoKFtkZWZpbml0aW9uc10pID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0RvY3VtZW50RGVmaW5pdGlvbkl0ZW1zJC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVQYXRoU2VsZWN0b3JTZXJ2aWNlLnNldERvY3VtZW50RGVmaW5pdGlvbkNhY2hlKGRlZmluaXRpb25zKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtYXAoKFtkZWZpbml0aW9ucywgZG9jdW1lbnREZWZpbml0aW9uTmFtZV0pID0+XG4gICAgICAgICAgICBkZWZpbml0aW9ucy5jb250ZW50Lm1hcChkZWZpbml0aW9uID0+ICh7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IGRlZmluaXRpb24uaWQubmFtZSxcbiAgICAgICAgICAgICAgaWQ6IGRlZmluaXRpb24uaWQubmFtZSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGRlZmluaXRpb24uaWQubmFtZSA9PT0gZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZhbHVlUGF0aFNlbGVjdG9yU2VydmljZTogVmFsdWVQYXRoU2VsZWN0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMuX3NlbGVjdGVkUGF0aCQuc3Vic2NyaWJlKHBhdGggPT4gdGhpcy52YWx1ZUNoYW5nZUV2ZW50LmVtaXQocGF0aCkpXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWxlY3RlZFBhdGguc2V0VmFsdWUodmFsdWUpO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VGdW5jdGlvbiA9IGZuO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkRnVuY3Rpb24gPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyBvbkJsdXJFdmVudCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX29uVG91Y2hlZEZ1bmN0aW9uKSByZXR1cm47XG5cbiAgICB0aGlzLl9vblRvdWNoZWRGdW5jdGlvbigpO1xuICB9XG5cbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvblBhdGhTZWxlY3RlZChldmVudDoge2l0ZW06IHtjb250ZW50OiBzdHJpbmd9fSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkUGF0aCA9IGV2ZW50Py5pdGVtPy5jb250ZW50O1xuICAgIGlmICghc2VsZWN0ZWRQYXRoKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZFBhdGguc2V0VmFsdWUoc2VsZWN0ZWRQYXRoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRvY3VtZW50RGVmaW5pdGlvblNlbGVjdGVkKGV2ZW50OiB7aXRlbToge2lkOiBzdHJpbmd9fSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkRGVmID0gZXZlbnQ/Lml0ZW0/LmlkO1xuICAgIGlmICghc2VsZWN0ZWREZWYpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkUGF0aC5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YmplY3QkLm5leHQoc2VsZWN0ZWREZWYpO1xuICB9XG5cbiAgcHVibGljIG9uSW5wdXRNb2RlQ2hhbmdlKHRvRHJvcGRvd25Nb2RlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFBhdGhWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRQYXRoLnZhbHVlO1xuXG4gICAgaWYgKHRvRHJvcGRvd25Nb2RlICYmICF0aGlzLl9jYWNoZWRPcHRpb25zLmluY2x1ZGVzKGN1cnJlbnRQYXRoVmFsdWUpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUGF0aC5zZXRWYWx1ZSgnJyk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5wdXRNb2RlJC5uZXh0KFxuICAgICAgdG9Ecm9wZG93bk1vZGUgPyBWYWx1ZVBhdGhTZWxlY3RvcklucHV0TW9kZS5EUk9QRE9XTiA6IFZhbHVlUGF0aFNlbGVjdG9ySW5wdXRNb2RlLk1BTlVBTFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEZvcm1hdHRlZFBhdGgodW5mb3JtYXR0ZWRQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNwbGl0UGF0aFByZWZpeCA9IHVuZm9ybWF0dGVkUGF0aC5zcGxpdCgnOicpO1xuICAgIGNvbnN0IHByZWZpeCA9IHNwbGl0UGF0aFByZWZpeFswXTtcbiAgICBjb25zdCByZW1haW5pbmdQYXRoID0gc3BsaXRQYXRoUHJlZml4WzFdO1xuICAgIGNvbnN0IHJlcXVpcmVkTm90YXRpb24gPSB0aGlzLm5vdGF0aW9uO1xuICAgIGNvbnN0IHBhdGhOb3RhdGlvbjogVmFsdWVQYXRoU2VsZWN0b3JOb3RhdGlvbiA9IHJlbWFpbmluZ1BhdGguaW5jbHVkZXMoJy8nKVxuICAgICAgPyAnc2xhc2hlcydcbiAgICAgIDogJ2RvdHMnO1xuICAgIGNvbnN0IHNwbGl0UGF0aCA9IHJlbWFpbmluZ1BhdGhcbiAgICAgIC5zcGxpdChwYXRoTm90YXRpb24gPT09ICdzbGFzaGVzJyA/ICcvJyA6ICcuJylcbiAgICAgIC5maWx0ZXIocGF0aFBhcnQgPT4gcGF0aFBhcnQgIT09ICcvJyAmJiBwYXRoUGFydCAhPT0gJy4nKVxuICAgICAgLmZpbHRlcihwYXRoUGFydCA9PiAhIXBhdGhQYXJ0KVxuICAgICAgLm1hcChwYXRoUGFydCA9PiBwYXRoUGFydC5yZXBsYWNlKCcvJywgJycpLnJlcGxhY2UoJy4nLCAnJykpO1xuICAgIGNvbnN0IGZvcm1hdHRlZFBhdGggPSBzcGxpdFBhdGgucmVkdWNlKFxuICAgICAgKGFjYywgcGF0aFBhcnQpID0+IGAke2FjY30ke3JlcXVpcmVkTm90YXRpb24gPT09ICdzbGFzaGVzJyA/ICcvJyA6ICcuJ30ke3BhdGhQYXJ0fWAsXG4gICAgICAnJ1xuICAgICk7XG5cbiAgICByZXR1cm4gYCR7cHJlZml4fToke3JlcXVpcmVkTm90YXRpb24gPT09ICdkb3RzJyA/IGZvcm1hdHRlZFBhdGguc3Vic3RyaW5nKDEpIDogZm9ybWF0dGVkUGF0aH1gO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxuZy1jb250YWluZXJcbiAgKm5nSWY9XCJ7XG4gICAgaW5wdXRNb2RlSXNEcm9wZG93bjogaW5wdXRNb2RlSXNEcm9wZG93biQgfCBhc3luYyxcbiAgICB2YWx1ZVBhdGhMaXN0SXRlbXM6IHZhbHVlUGF0aExpc3RJdGVtcyQgfCBhc3luYyxcbiAgICBsb2FkaW5nVmFsdWVQYXRoSXRlbXM6IGxvYWRpbmdWYWx1ZVBhdGhJdGVtcyQgfCBhc3luYyxcbiAgICBkaXNhYmxlZDogZGlzYWJsZWQkIHwgYXN5bmMsXG4gIH0gYXMgb2JzXCJcbj5cbiAgPHYtaW5wdXQtbGFiZWwgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgW3RpdGxlXT1cImxhYmVsXCIgW3Rvb2x0aXBdPVwidG9vbHRpcFwiPiA8L3YtaW5wdXQtbGFiZWw+XG5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBjbGFzcz1cInZhbHVlLXBhdGgtc2VsZWN0b3JfX2Zvcm1cIj5cbiAgICBAaWYgKG9icy5pbnB1dE1vZGVJc0Ryb3Bkb3duKSB7XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgc2hvd0RvY3VtZW50RGVmaW5pdGlvblNlbGVjdG9yICYmIHtcbiAgICAgICAgICAgIGxvYWRpbmdEb2N1bWVudERlZmluaXRpb25JdGVtczogbG9hZGluZ0RvY3VtZW50RGVmaW5pdGlvbkl0ZW1zJCB8IGFzeW5jLFxuICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTGlzdEl0ZW1zOiBkb2N1bWVudERlZmluaXRpb25MaXN0SXRlbXMkIHwgYXN5bmMsXG4gICAgICAgICAgfSBhcyBkb2NPYnNcbiAgICAgICAgXCJcbiAgICAgID5cbiAgICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwidmFsdWUtcGF0aC1zZWxlY3Rvci1kb2N1bWVudERlZmluaXRpb25cIlxuICAgICAgICAgIFthcHBlbmRJbmxpbmVdPVwiYXBwZW5kSW5saW5lXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICBvYnMuZGlzYWJsZWQgfHxcbiAgICAgICAgICAgIGRvY09icy5sb2FkaW5nRG9jdW1lbnREZWZpbml0aW9uSXRlbXMgfHxcbiAgICAgICAgICAgICFkb2NPYnMuZG9jdW1lbnREZWZpbml0aW9uTGlzdEl0ZW1zXG4gICAgICAgICAgXCJcbiAgICAgICAgICAoc2VsZWN0ZWQpPVwib25Eb2N1bWVudERlZmluaXRpb25TZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3ZhbHVlUGF0aFNlbGVjdG9yLnNlbGVjdERvY0RlZlBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cImRvY09icy5kb2N1bWVudERlZmluaXRpb25MaXN0SXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgICA8L2Nkcy1kcm9wZG93bj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8Y2RzLWRyb3Bkb3duXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidmFsdWUtcGF0aC1zZWxlY3Rvci12YWx1ZVBhdGhcIlxuICAgICAgICBbYXBwZW5kSW5saW5lXT1cImFwcGVuZElubGluZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWQgfHwgb2JzLmxvYWRpbmdWYWx1ZVBhdGhJdGVtcyB8fCAhb2JzLnZhbHVlUGF0aExpc3RJdGVtc1wiXG4gICAgICAgIChzZWxlY3RlZCk9XCJvblBhdGhTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIid2YWx1ZVBhdGhTZWxlY3Rvci5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgPlxuICAgICAgICA8Y2RzLWRyb3Bkb3duLWxpc3QgW2l0ZW1zXT1cIm9icy52YWx1ZVBhdGhMaXN0SXRlbXMgfHwgW11cIj48L2Nkcy1kcm9wZG93bi1saXN0PlxuICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8aW5wdXRcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2YWx1ZS1wYXRoLXNlbGVjdG9yLWlucHV0XCJcbiAgICAgICAgY2RzVGV4dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdGVkUGF0aFwiXG4gICAgICAvPlxuICAgIH1cblxuICAgIDxjZHMtdG9nZ2xlXG4gICAgICBkYXRhLXRlc3RpZD1cInZhbHVlLXBhdGgtc2VsZWN0b3ItdG9nZ2xlXCJcbiAgICAgIFtkaXNhYmxlZF09XCJvYnMuZGlzYWJsZWRcIlxuICAgICAgW29uVGV4dF09XCIndmFsdWVQYXRoU2VsZWN0b3IuZHJvcGRvd24nIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtvZmZUZXh0XT1cIid2YWx1ZVBhdGhTZWxlY3Rvci5tYW51YWwnIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtjaGVja2VkXT1cIm9icy5pbnB1dE1vZGVJc0Ryb3Bkb3duXCJcbiAgICAgIChjaGVja2VkQ2hhbmdlKT1cIm9uSW5wdXRNb2RlQ2hhbmdlKCRldmVudClcIlxuICAgID48L2Nkcy10b2dnbGU+XG4gIDwvZm9ybT5cbjwvbmctY29udGFpbmVyPlxuIl19
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtcGF0aC1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3ZhbHVlLXBhdGgtc2VsZWN0b3IvdmFsdWUtcGF0aC1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3ZhbHVlLXBhdGgtc2VsZWN0b3IvdmFsdWUtcGF0aC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFJTCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLG1CQUFtQixHQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUVwRCxPQUFPLEVBQ0wsY0FBYyxFQUNkLFdBQVcsRUFFWCxhQUFhLEVBQ2IsWUFBWSxHQUNiLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUNMLGVBQWUsRUFDZixhQUFhLEVBQ2IsTUFBTSxFQUNOLEdBQUcsRUFFSCxFQUFFLEVBQ0YsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFnQixhQUFhLEVBQUMsTUFB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LCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtEb2N1bWVudFNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7XG4gIERyb3Bkb3duTW9kdWxlLFxuICBJbnB1dE1vZHVsZSxcbiAgTGlzdEl0ZW0sXG4gIExvYWRpbmdNb2R1bGUsXG4gIFRvZ2dsZU1vZHVsZSxcbn0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgc3RhcnRXaXRoLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWR9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7VmFsdWVQYXRoSXRlbSwgVmFsdWVQYXRoVHlwZX0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7XG4gIFZhbHVlUGF0aFNlbGVjdG9ySW5wdXRNb2RlLFxuICBWYWx1ZVBhdGhTZWxlY3Rvck5vdGF0aW9uLFxuICBWYWx1ZVBhdGhTZWxlY3RvclByZWZpeCxcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZhbHVlLXBhdGgtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHtWYWx1ZVBhdGhTZWxlY3RvclNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7SW5wdXRMYWJlbE1vZHVsZX0gZnJvbSAnLi4vaW5wdXQtbGFiZWwvaW5wdXQtbGFiZWwubW9kdWxlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsdGltby12YWx1ZS1wYXRoLXNlbGVjdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZhbHVlLXBhdGgtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi92YWx1ZS1wYXRoLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRHJvcGRvd25Nb2R1bGUsXG4gICAgTG9hZGluZ01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFRvZ2dsZU1vZHVsZSxcbiAgICBJbnB1dE1vZHVsZSxcbiAgICBJbnB1dExhYmVsTW9kdWxlLFxuICAgIElucHV0TGFiZWxNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVmFsdWVQYXRoU2VsZWN0b3JDb21wb25lbnQpLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlUGF0aFNlbGVjdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy52YWx1ZS1wYXRoLXNlbGVjdG9yLS1tYXJnaW4tYm90dG9tJykgcHJpdmF0ZSBfc2hvd01hcmdpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnZhbHVlLXBhdGgtc2VsZWN0b3ItLW1hcmdpbi1ib3R0b20tbGcnKSBwcml2YXRlIF9zaG93TWFyZ2luTGc6IGJvb2xlYW4gPVxuICAgIGZhbHNlO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnZhbHVlLXBhdGgtc2VsZWN0b3ItLW1hcmdpbi1ib3R0b20teGwnKSBwcml2YXRlIF9zaG93TWFyZ2luWGw6IGJvb2xlYW4gPVxuICAgIGZhbHNlO1xuICBASG9zdExpc3RlbmVyKCdmb2N1c291dCcpXG4gIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5vbkJsdXJFdmVudCgpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgIHNlbGVjdGVkUGF0aDogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgfSk7XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZFBhdGgoKTogQWJzdHJhY3RDb250cm9sPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cC5nZXQoJ3NlbGVjdGVkUGF0aCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25DaGFuZ2VGdW5jdGlvbiE6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBwcml2YXRlIF9vblRvdWNoZWRGdW5jdGlvbiE6ICgpID0+IHZvaWQ7XG5cbiAgcHVibGljIGdldCBfc2VsZWN0ZWRQYXRoJCgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUGF0aC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLnNlbGVjdGVkUGF0aC52YWx1ZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgdGFwKHZhbHVlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX29uQ2hhbmdlRnVuY3Rpb24pIHtcbiAgICAgICAgICB0aGlzLl9vbkNoYW5nZUZ1bmN0aW9uKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgQElucHV0KCkgcHVibGljIG5hbWUgPSAnJztcbiAgQElucHV0KCkgcHVibGljIGFwcGVuZElubGluZSA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IG1hcmdpbih2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dNYXJnaW4gPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IG1hcmdpbkxnKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2hvd01hcmdpbkxnID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCBtYXJnaW5YbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dNYXJnaW5YbCA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkJC5uZXh0KCEhdmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lU3ViamVjdCQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCB2ZXJzaW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgdGhpcy5fdmVyc2lvbiQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldCBwcmVmaXhlcyh2YWx1ZTogVmFsdWVQYXRoU2VsZWN0b3JQcmVmaXhbXSkge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLl9wcmVmaXhlc1N1YmplY3QkLm5leHQodmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpIHB1YmxpYyBsYWJlbCA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgdG9vbHRpcCA9ICcnO1xuICBASW5wdXQoKSBwdWJsaWMgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNob3dEb2N1bWVudERlZmluaXRpb25TZWxlY3RvciA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgbm90YXRpb246IFZhbHVlUGF0aFNlbGVjdG9yTm90YXRpb24gPSAnZG90cyc7XG5cbiAgQElucHV0KCkgcHVibGljIHNldCBkZWZhdWx0VmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdmFsdWUpIHJldHVybjtcbiAgICB0aGlzLnNlbGVjdGVkUGF0aC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgaWYgKHRoaXMuc2hvd0RvY3VtZW50RGVmaW5pdGlvblNlbGVjdG9yKVxuICAgICAgdGhpcy5faW5wdXRNb2RlJC5uZXh0KFZhbHVlUGF0aFNlbGVjdG9ySW5wdXRNb2RlLk1BTlVBTCk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfdHlwZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZhbHVlUGF0aFR5cGU+KFZhbHVlUGF0aFR5cGUuRklFTEQpO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHR5cGUodmFsdWU6IFZhbHVlUGF0aFR5cGUpIHtcbiAgICB0aGlzLl90eXBlJC5uZXh0KHZhbHVlKTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnRJdGVtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VmFsdWVQYXRoSXRlbSB8IG51bGw+KG51bGwpO1xuICBASW5wdXQoKSBwdWJsaWMgc2V0IHBhcmVudEl0ZW0odmFsdWU6IFZhbHVlUGF0aEl0ZW0gfCBudWxsKSB7XG4gICAgdGhpcy5fcGFyZW50SXRlbSQubmV4dCh2YWx1ZSk7XG4gIH1cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgY29sbGVjdGlvblNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8VmFsdWVQYXRoSXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBnZXQgX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJqZWN0JC5waXBlKGZpbHRlcih2YWx1ZSA9PiAhIXZhbHVlKSk7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfdmVyc2lvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcmVmaXhlc1N1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWYWx1ZVBhdGhTZWxlY3RvclByZWZpeFtdIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgZ2V0IF9wcmVmaXhlcyQoKTogT2JzZXJ2YWJsZTxWYWx1ZVBhdGhTZWxlY3RvclByZWZpeFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3ByZWZpeGVzU3ViamVjdCQucGlwZShmaWx0ZXIodmFsdWUgPT4gISF2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfaW5wdXRNb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VmFsdWVQYXRoU2VsZWN0b3JJbnB1dE1vZGU+KFxuICAgIFZhbHVlUGF0aFNlbGVjdG9ySW5wdXRNb2RlLkRST1BET1dOXG4gICk7XG4gIHB1YmxpYyBpbnB1dE1vZGVJc0Ryb3Bkb3duJDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IHRoaXMuX2lucHV0TW9kZSQucGlwZShcbiAgICBtYXAobW9kZSA9PiB7XG4gICAgICByZXR1cm4gbW9kZSA9PT0gVmFsdWVQYXRoU2VsZWN0b3JJbnB1dE1vZGUuRFJPUERPV047XG4gICAgfSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZ1ZhbHVlUGF0aEl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHB1YmxpYyByZWFkb25seSBkaXNhYmxlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwcml2YXRlIF9jYWNoZWRPcHRpb25zOiAoVmFsdWVQYXRoSXRlbSAmIHtmb3JtYXR0ZWRQYXRoOiBzdHJpbmd9KVtdID0gW107XG5cbiAgcHVibGljIHZhbHVlUGF0aExpc3RJdGVtcyQ6IE9ic2VydmFibGU8TGlzdEl0ZW1bXT4gPSB0aGlzLl9wYXJlbnRJdGVtJC5waXBlKFxuICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmdWYWx1ZVBhdGhJdGVtcyQubmV4dCh0cnVlKSksXG4gICAgc3dpdGNoTWFwKChwYXJlbnRJdGVtOiBWYWx1ZVBhdGhJdGVtIHwgbnVsbCkgPT5cbiAgICAgIHBhcmVudEl0ZW1cbiAgICAgICAgPyBvZihwYXJlbnRJdGVtLmNoaWxkcmVuPy5tYXAoKGNoaWxkOiBzdHJpbmcpID0+ICh7cGF0aDogY2hpbGR9KSkgPz8gW10pXG4gICAgICAgIDogY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lJCxcbiAgICAgICAgICAgIHRoaXMuX3ByZWZpeGVzJCxcbiAgICAgICAgICAgIHRoaXMuX3R5cGUkLFxuICAgICAgICAgICAgdGhpcy5fdmVyc2lvbiQsXG4gICAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoW2RvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHByZWZpeGVzLCB0eXBlLCB2ZXJzaW9uXSkgPT5cbiAgICAgICAgICAgICAgdHlwZW9mIHZlcnNpb24gPT09ICdudW1iZXInXG4gICAgICAgICAgICAgICAgPyB0aGlzLnZhbHVlUGF0aFNlbGVjdG9yU2VydmljZS5nZXRSZXNvbHZhYmxlS2V5cyhcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ZXMsXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IHRoaXMudmFsdWVQYXRoU2VsZWN0b3JTZXJ2aWNlLmdldFJlc29sdmFibGVLZXlzKFxuICAgICAgICAgICAgICAgICAgICBwcmVmaXhlcyxcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICApLFxuICAgIG1hcCgocmVzdWx0czogVmFsdWVQYXRoSXRlbVtdKSA9PlxuICAgICAgcmVzdWx0c1xuICAgICAgICAubWFwKChyZXN1bHQ6IFZhbHVlUGF0aEl0ZW0pID0+ICh7XG4gICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgIGZvcm1hdHRlZFBhdGg6ICF0aGlzLl9wYXJlbnRJdGVtJC5nZXRWYWx1ZSgpXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Rm9ybWF0dGVkUGF0aChyZXN1bHQucGF0aClcbiAgICAgICAgICAgIDogcmVzdWx0LnBhdGgsXG4gICAgICAgIH0pKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5mb3JtYXR0ZWRQYXRoLmxvY2FsZUNvbXBhcmUoYi5mb3JtYXR0ZWRQYXRoKSlcbiAgICApLFxuICAgIHRhcChvcHRpb25zID0+ICh0aGlzLl9jYWNoZWRPcHRpb25zID0gb3B0aW9ucykpLFxuICAgIHN3aXRjaE1hcChvcHRpb25zID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtvZihvcHRpb25zKSwgdGhpcy5fc2VsZWN0ZWRQYXRoJCwgdGhpcy5pbnB1dE1vZGVJc0Ryb3Bkb3duJF0pXG4gICAgKSxcbiAgICB0YXAoKFtvcHRpb25zLCBzZWxlY3RlZFBhdGgsIGlucHV0TW9kZUlzRHJvcGRvd25dKSA9PiB7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRPcHRpb25zID0gb3B0aW9ucy5tYXAob3B0aW9uID0+IG9wdGlvbi5mb3JtYXR0ZWRQYXRoKTtcbiAgICAgIGlmICghZm9ybWF0dGVkT3B0aW9ucy5pbmNsdWRlcyhzZWxlY3RlZFBhdGgpICYmICEhc2VsZWN0ZWRQYXRoICYmIGlucHV0TW9kZUlzRHJvcGRvd24pXG4gICAgICAgIHRoaXMuX2lucHV0TW9kZSQubmV4dChWYWx1ZVBhdGhTZWxlY3RvcklucHV0TW9kZS5NQU5VQUwpO1xuICAgIH0pLFxuICAgIG1hcCgoW29wdGlvbnMsIHNlbGVjdGVkUGF0aF0pID0+XG4gICAgICBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgICAgICBjb25zdCBtYXBwZWRPcHRpb24gPSB7XG4gICAgICAgICAgY29udGVudDogb3B0aW9uLmZvcm1hdHRlZFBhdGgsXG4gICAgICAgICAgc2VsZWN0ZWQ6IG9wdGlvbi5mb3JtYXR0ZWRQYXRoID09PSBzZWxlY3RlZFBhdGgsXG4gICAgICAgICAgcGF0aDogb3B0aW9uLnBhdGgsXG4gICAgICAgICAgLi4uKCEhb3B0aW9uLmNoaWxkcmVuICYmIHtjaGlsZHJlbjogb3B0aW9uLmNoaWxkcmVufSksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG1hcHBlZE9wdGlvbi5zZWxlY3RlZCkgdGhpcy5vblBhdGhTZWxlY3RlZCh7aXRlbTogbWFwcGVkT3B0aW9ufSk7XG4gICAgICAgIHJldHVybiBtYXBwZWRPcHRpb247XG4gICAgICB9KVxuICAgICksXG4gICAgdGFwKCgpID0+IHRoaXMubG9hZGluZ1ZhbHVlUGF0aEl0ZW1zJC5uZXh0KGZhbHNlKSlcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZ0RvY3VtZW50RGVmaW5pdGlvbkl0ZW1zJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRvY3VtZW50RGVmaW5pdGlvbkxpc3RJdGVtcyQ6IE9ic2VydmFibGU8TGlzdEl0ZW1bXT4gPVxuICAgIHRoaXMudmFsdWVQYXRoU2VsZWN0b3JTZXJ2aWNlLmdldERvY3VtZW50RGVmaW5pdGlvbkNhY2hlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChjYWNoZSA9PlxuICAgICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgICBjYWNoZSA/IG9mKGNhY2hlKSA6IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmdldEFsbERlZmluaXRpb25zKCksXG4gICAgICAgICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZShzdGFydFdpdGgobnVsbCkpLFxuICAgICAgICBdKS5waXBlKFxuICAgICAgICAgIHRhcCgoW2RlZmluaXRpb25zXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nRG9jdW1lbnREZWZpbml0aW9uSXRlbXMkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZVBhdGhTZWxlY3RvclNlcnZpY2Uuc2V0RG9jdW1lbnREZWZpbml0aW9uQ2FjaGUoZGVmaW5pdGlvbnMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1hcCgoW2RlZmluaXRpb25zLCBkb2N1bWVudERlZmluaXRpb25OYW1lXSkgPT5cbiAgICAgICAgICAgIGRlZmluaXRpb25zLmNvbnRlbnQubWFwKGRlZmluaXRpb24gPT4gKHtcbiAgICAgICAgICAgICAgY29udGVudDogZGVmaW5pdGlvbi5pZC5uYW1lLFxuICAgICAgICAgICAgICBpZDogZGVmaW5pdGlvbi5pZC5uYW1lLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogZGVmaW5pdGlvbi5pZC5uYW1lID09PSBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsdWVQYXRoU2VsZWN0b3JTZXJ2aWNlOiBWYWx1ZVBhdGhTZWxlY3RvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZVxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5fc2VsZWN0ZWRQYXRoJC5zdWJzY3JpYmUocGF0aCA9PiB0aGlzLnZhbHVlQ2hhbmdlRXZlbnQuZW1pdChwYXRoKSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNlbGVjdGVkUGF0aC5zZXRWYWx1ZSh2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUZ1bmN0aW9uID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRGdW5jdGlvbiA9IGZuO1xuICB9XG5cbiAgcHVibGljIG9uQmx1ckV2ZW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fb25Ub3VjaGVkRnVuY3Rpb24pIHJldHVybjtcblxuICAgIHRoaXMuX29uVG91Y2hlZEZ1bmN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUGF0aFNlbGVjdGVkKGV2ZW50OiB7aXRlbToge2NvbnRlbnQ6IHN0cmluZ30gJiBWYWx1ZVBhdGhJdGVtfSk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkUGF0aCA9IGV2ZW50Py5pdGVtPy5jb250ZW50O1xuICAgIGlmICghc2VsZWN0ZWRQYXRoKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5jb2xsZWN0aW9uU2VsZWN0ZWQub2JzZXJ2ZWQpIHRoaXMuY29sbGVjdGlvblNlbGVjdGVkLmVtaXQoZXZlbnQuaXRlbSk7XG5cbiAgICB0aGlzLnNlbGVjdGVkUGF0aC5zZXRWYWx1ZShzZWxlY3RlZFBhdGgpO1xuICB9XG5cbiAgcHVibGljIG9uRG9jdW1lbnREZWZpbml0aW9uU2VsZWN0ZWQoZXZlbnQ6IHtpdGVtOiB7aWQ6IHN0cmluZ319KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWREZWYgPSBldmVudD8uaXRlbT8uaWQ7XG4gICAgaWYgKCFzZWxlY3RlZERlZikgcmV0dXJuO1xuICAgIHRoaXMuc2VsZWN0ZWRQYXRoLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lU3ViamVjdCQubmV4dChzZWxlY3RlZERlZik7XG4gIH1cblxuICBwdWJsaWMgb25JbnB1dE1vZGVDaGFuZ2UodG9Ecm9wZG93bk1vZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50UGF0aFZhbHVlID0gdGhpcy5zZWxlY3RlZFBhdGgudmFsdWU7XG5cbiAgICBpZiAoXG4gICAgICB0b0Ryb3Bkb3duTW9kZSAmJlxuICAgICAgIXRoaXMuX2NhY2hlZE9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb24uZm9ybWF0dGVkUGF0aCkuaW5jbHVkZXMoY3VycmVudFBhdGhWYWx1ZSlcbiAgICApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQYXRoLnNldFZhbHVlKCcnKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnB1dE1vZGUkLm5leHQoXG4gICAgICB0b0Ryb3Bkb3duTW9kZSA/IFZhbHVlUGF0aFNlbGVjdG9ySW5wdXRNb2RlLkRST1BET1dOIDogVmFsdWVQYXRoU2VsZWN0b3JJbnB1dE1vZGUuTUFOVUFMXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rm9ybWF0dGVkUGF0aCh1bmZvcm1hdHRlZFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3BsaXRQYXRoUHJlZml4ID0gdW5mb3JtYXR0ZWRQYXRoLnNwbGl0KCc6Jyk7XG4gICAgY29uc3QgcHJlZml4ID0gc3BsaXRQYXRoUHJlZml4WzBdO1xuICAgIGNvbnN0IHJlbWFpbmluZ1BhdGggPSBzcGxpdFBhdGhQcmVmaXhbMV07XG4gICAgY29uc3QgcmVxdWlyZWROb3RhdGlvbiA9IHRoaXMubm90YXRpb247XG4gICAgY29uc3QgcGF0aE5vdGF0aW9uOiBWYWx1ZVBhdGhTZWxlY3Rvck5vdGF0aW9uID0gcmVtYWluaW5nUGF0aC5pbmNsdWRlcygnLycpXG4gICAgICA/ICdzbGFzaGVzJ1xuICAgICAgOiAnZG90cyc7XG4gICAgY29uc3Qgc3BsaXRQYXRoID0gcmVtYWluaW5nUGF0aFxuICAgICAgLnNwbGl0KHBhdGhOb3RhdGlvbiA9PT0gJ3NsYXNoZXMnID8gJy8nIDogJy4nKVxuICAgICAgLmZpbHRlcihwYXRoUGFydCA9PiBwYXRoUGFydCAhPT0gJy8nICYmIHBhdGhQYXJ0ICE9PSAnLicpXG4gICAgICAuZmlsdGVyKHBhdGhQYXJ0ID0+ICEhcGF0aFBhcnQpXG4gICAgICAubWFwKHBhdGhQYXJ0ID0+IHBhdGhQYXJ0LnJlcGxhY2UoJy8nLCAnJykucmVwbGFjZSgnLicsICcnKSk7XG4gICAgY29uc3QgZm9ybWF0dGVkUGF0aCA9IHNwbGl0UGF0aC5yZWR1Y2UoXG4gICAgICAoYWNjLCBwYXRoUGFydCkgPT4gYCR7YWNjfSR7cmVxdWlyZWROb3RhdGlvbiA9PT0gJ3NsYXNoZXMnID8gJy8nIDogJy4nfSR7cGF0aFBhcnR9YCxcbiAgICAgICcnXG4gICAgKTtcblxuICAgIHJldHVybiBgJHtwcmVmaXh9OiR7cmVxdWlyZWROb3RhdGlvbiA9PT0gJ2RvdHMnID8gZm9ybWF0dGVkUGF0aC5zdWJzdHJpbmcoMSkgOiBmb3JtYXR0ZWRQYXRofWA7XG4gIH1cbn1cbiIsIjwhLS1cbiAgfiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAgflxuICB+IExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICB+IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgfiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAgflxuICB+IGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAgflxuICB+IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgfiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gIH4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIH4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICAtLT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdJZj1cIntcbiAgICBpbnB1dE1vZGVJc0Ryb3Bkb3duOiBpbnB1dE1vZGVJc0Ryb3Bkb3duJCB8IGFzeW5jLFxuICAgIHZhbHVlUGF0aExpc3RJdGVtczogdmFsdWVQYXRoTGlzdEl0ZW1zJCB8IGFzeW5jLFxuICAgIGxvYWRpbmdWYWx1ZVBhdGhJdGVtczogbG9hZGluZ1ZhbHVlUGF0aEl0ZW1zJCB8IGFzeW5jLFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCQgfCBhc3luYyxcbiAgfSBhcyBvYnNcIlxuPlxuICA8di1pbnB1dC1sYWJlbCBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIiBbdGl0bGVdPVwibGFiZWxcIiBbdG9vbHRpcF09XCJ0b29sdGlwXCI+IDwvdi1pbnB1dC1sYWJlbD5cblxuICA8Zm9ybVxuICAgIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICBjbGFzcz1cInZhbHVlLXBhdGgtc2VsZWN0b3JfX2Zvcm1cIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICd2YWx1ZS1wYXRoLXNlbGVjdG9yX19mb3JtLS1kb2MtZGVmLXNlbGVjdGlvbic6XG4gICAgICAgIHNob3dEb2N1bWVudERlZmluaXRpb25TZWxlY3RvciAmJiBvYnMuaW5wdXRNb2RlSXNEcm9wZG93bixcbiAgICB9XCJcbiAgPlxuICAgIDxjZHMtdG9nZ2xlXG4gICAgICBkYXRhLXRlc3RpZD1cInZhbHVlLXBhdGgtc2VsZWN0b3ItdG9nZ2xlXCJcbiAgICAgIHNpemU9XCJzbVwiXG4gICAgICBbZGlzYWJsZWRdPVwib2JzLmRpc2FibGVkXCJcbiAgICAgIFtvblRleHRdPVwiJ3ZhbHVlUGF0aFNlbGVjdG9yLmRyb3Bkb3duJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbb2ZmVGV4dF09XCIndmFsdWVQYXRoU2VsZWN0b3IubWFudWFsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbY2hlY2tlZF09XCJvYnMuaW5wdXRNb2RlSXNEcm9wZG93blwiXG4gICAgICAoY2hlY2tlZENoYW5nZSk9XCJvbklucHV0TW9kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC9jZHMtdG9nZ2xlPlxuXG4gICAgQGlmIChvYnMuaW5wdXRNb2RlSXNEcm9wZG93bikge1xuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgIHNob3dEb2N1bWVudERlZmluaXRpb25TZWxlY3RvciAmJiB7XG4gICAgICAgICAgICBsb2FkaW5nRG9jdW1lbnREZWZpbml0aW9uSXRlbXM6IGxvYWRpbmdEb2N1bWVudERlZmluaXRpb25JdGVtcyQgfCBhc3luYyxcbiAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbkxpc3RJdGVtczogZG9jdW1lbnREZWZpbml0aW9uTGlzdEl0ZW1zJCB8IGFzeW5jLFxuICAgICAgICAgIH0gYXMgZG9jT2JzXG4gICAgICAgIFwiXG4gICAgICA+XG4gICAgICAgIDxjZHMtZHJvcGRvd25cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInZhbHVlLXBhdGgtc2VsZWN0b3ItZG9jdW1lbnREZWZpbml0aW9uXCJcbiAgICAgICAgICBbYXBwZW5kSW5saW5lXT1cImFwcGVuZElubGluZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgb2JzLmRpc2FibGVkIHx8XG4gICAgICAgICAgICBkb2NPYnMubG9hZGluZ0RvY3VtZW50RGVmaW5pdGlvbkl0ZW1zIHx8XG4gICAgICAgICAgICAhZG9jT2JzLmRvY3VtZW50RGVmaW5pdGlvbkxpc3RJdGVtcyB8fFxuICAgICAgICAgICAgKGRvY09icy5kb2N1bWVudERlZmluaXRpb25MaXN0SXRlbXMgfHwgW10pLmxlbmd0aCA9PT0gMFxuICAgICAgICAgIFwiXG4gICAgICAgICAgKHNlbGVjdGVkKT1cIm9uRG9jdW1lbnREZWZpbml0aW9uU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIid2YWx1ZVBhdGhTZWxlY3Rvci5zZWxlY3REb2NEZWZQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJkb2NPYnMuZG9jdW1lbnREZWZpbml0aW9uTGlzdEl0ZW1zIHx8IFtdXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgICAgPC9jZHMtZHJvcGRvd24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPGNkcy1kcm9wZG93blxuICAgICAgICBkYXRhLXRlc3RpZD1cInZhbHVlLXBhdGgtc2VsZWN0b3ItdmFsdWVQYXRoXCJcbiAgICAgICAgW2FwcGVuZElubGluZV09XCJhcHBlbmRJbmxpbmVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgb2JzLmRpc2FibGVkIHx8XG4gICAgICAgICAgb2JzLmxvYWRpbmdWYWx1ZVBhdGhJdGVtcyB8fFxuICAgICAgICAgICFvYnMudmFsdWVQYXRoTGlzdEl0ZW1zIHx8XG4gICAgICAgICAgKG9icy52YWx1ZVBhdGhMaXN0SXRlbXMgfHwgW10pLmxlbmd0aCA9PT0gMFxuICAgICAgICBcIlxuICAgICAgICAoc2VsZWN0ZWQpPVwib25QYXRoU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCIndmFsdWVQYXRoU2VsZWN0b3IucGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgID5cbiAgICAgICAgPGNkcy1kcm9wZG93bi1saXN0IFtpdGVtc109XCJvYnMudmFsdWVQYXRoTGlzdEl0ZW1zIHx8IFtdXCI+PC9jZHMtZHJvcGRvd24tbGlzdD5cbiAgICAgIDwvY2RzLWRyb3Bkb3duPlxuICAgIH0gQGVsc2Uge1xuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdGlkPVwidmFsdWUtcGF0aC1zZWxlY3Rvci1pbnB1dFwiXG4gICAgICAgIGNkc1RleHRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RlZFBhdGhcIlxuICAgICAgLz5cbiAgICB9XG4gIDwvZm9ybT5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -14,4 +14,4 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  export {};
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktaW5wdXQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9tb2RlbHMvbXVsdGktaW5wdXQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0Zvcm1PdXRwdXR9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0xpc3RJdGVtfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcblxudHlwZSBNdWx0aUlucHV0VHlwZSA9ICdrZXlWYWx1ZScgfCAndmFsdWUnIHwgJ2tleURyb3Bkb3duVmFsdWUnIHwgJ2FyYml0cmFyeUFtb3VudCc7XG5cbmludGVyZmFjZSBNdWx0aUlucHV0S2V5VmFsdWUge1xuICB1dWlkPzogc3RyaW5nO1xuICBrZXk/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBkcm9wZG93bj86IHN0cmluZztcbiAgW2luZGV4OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBNdWx0aUlucHV0Rm9ybVZhbHVlIHtcbiAgdXVpZD86IHN0cmluZztcbiAgdmFsdWU6IEZvcm1PdXRwdXQgfCBvYmplY3Q7XG4gIGV4cGFuZGVkPzogYm9vbGVhbjtcbn1cblxudHlwZSBNdWx0aUlucHV0VmFsdWVzID0gQXJyYXk8TXVsdGlJbnB1dEtleVZhbHVlPjtcblxudHlwZSBNdWx0aUlucHV0Rm9ybXNWYWx1ZXMgPSBBcnJheTxNdWx0aUlucHV0Rm9ybVZhbHVlPjtcblxudHlwZSBNdWx0aUlucHV0T3V0cHV0ID0gTXVsdGlJbnB1dFZhbHVlcyB8IEFycmF5PHN0cmluZz47XG5cbmludGVyZmFjZSBMaXN0SXRlbVdpdGhJZCBleHRlbmRzIExpc3RJdGVtIHtcbiAgaWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEFyYml0cmFyeUlucHV0VGl0bGVzIHtcbiAgW2luZGV4S2V5OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB7XG4gIE11bHRpSW5wdXRUeXBlLFxuICBNdWx0aUlucHV0VmFsdWVzLFxuICBNdWx0aUlucHV0S2V5VmFsdWUsXG4gIE11bHRpSW5wdXRPdXRwdXQsXG4gIE11bHRpSW5wdXRGb3JtVmFsdWUsXG4gIE11bHRpSW5wdXRGb3Jtc1ZhbHVlcyxcbiAgTGlzdEl0ZW1XaXRoSWQsXG4gIEFyYml0cmFyeUlucHV0VGl0bGVzLFxufTtcbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXVsdGktaW5wdXQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9tb2RlbHMvbXVsdGktaW5wdXQubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0ciLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0Zvcm1PdXRwdXR9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge0xpc3RJdGVtfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcblxudHlwZSBNdWx0aUlucHV0VHlwZSA9XG4gIHwgJ2tleVZhbHVlJ1xuICB8ICd2YWx1ZSdcbiAgfCAna2V5RHJvcGRvd25WYWx1ZSdcbiAgfCAnYXJiaXRyYXJ5QW1vdW50J1xuICB8ICdrZXlWYWx1ZVBhdGhTZWxlY3RvcidcbiAgfCAndmFsdWVQYXRoU2VsZWN0b3JWYWx1ZSdcbiAgfCAndmFsdWVQYXRoU2VsZWN0b3JEcm9wZG93blZhbHVlJztcblxuaW50ZXJmYWNlIE11bHRpSW5wdXRLZXlWYWx1ZSB7XG4gIHV1aWQ/OiBzdHJpbmc7XG4gIGtleT86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIGRyb3Bkb3duPzogc3RyaW5nO1xuICBbaW5kZXg6IHN0cmluZ106IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIE11bHRpSW5wdXRGb3JtVmFsdWUge1xuICB1dWlkPzogc3RyaW5nO1xuICB2YWx1ZTogRm9ybU91dHB1dCB8IG9iamVjdDtcbiAgZXhwYW5kZWQ/OiBib29sZWFuO1xufVxuXG50eXBlIE11bHRpSW5wdXRWYWx1ZXMgPSBBcnJheTxNdWx0aUlucHV0S2V5VmFsdWU+O1xuXG50eXBlIE11bHRpSW5wdXRGb3Jtc1ZhbHVlcyA9IEFycmF5PE11bHRpSW5wdXRGb3JtVmFsdWU+O1xuXG50eXBlIE11bHRpSW5wdXRPdXRwdXQgPSBNdWx0aUlucHV0VmFsdWVzIHwgQXJyYXk8c3RyaW5nPjtcblxuaW50ZXJmYWNlIExpc3RJdGVtV2l0aElkIGV4dGVuZHMgTGlzdEl0ZW0ge1xuICBpZDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQXJiaXRyYXJ5SW5wdXRUaXRsZXMge1xuICBbaW5kZXhLZXk6IHN0cmluZ106IHN0cmluZztcbn1cblxudHlwZSBNdWx0aUlucHV0Q2hhbmdlRXZlbnRUeXBlID0gJ2tleScgfCAndmFsdWUnIHwgJ2Ryb3Bkb3duJyB8ICdhcmJpdHJhcnknO1xuXG5leHBvcnQge1xuICBNdWx0aUlucHV0VHlwZSxcbiAgTXVsdGlJbnB1dFZhbHVlcyxcbiAgTXVsdGlJbnB1dEtleVZhbHVlLFxuICBNdWx0aUlucHV0T3V0cHV0LFxuICBNdWx0aUlucHV0Rm9ybVZhbHVlLFxuICBNdWx0aUlucHV0Rm9ybXNWYWx1ZXMsXG4gIExpc3RJdGVtV2l0aElkLFxuICBBcmJpdHJhcnlJbnB1dFRpdGxlcyxcbiAgTXVsdGlJbnB1dENoYW5nZUV2ZW50VHlwZSxcbn07XG4iXX0=
@@ -13,6 +13,11 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
+ var ValuePathType;
17
+ (function (ValuePathType) {
18
+ ValuePathType["FIELD"] = "FIELD";
19
+ ValuePathType["COLLECTION"] = "COLLECTION";
20
+ })(ValuePathType || (ValuePathType = {}));
16
21
  var ValuePathSelectorPrefix;
17
22
  (function (ValuePathSelectorPrefix) {
18
23
  ValuePathSelectorPrefix["DOC"] = "doc";
@@ -27,5 +32,5 @@ var ValuePathSelectorInputMode;
27
32
  ValuePathSelectorInputMode[ValuePathSelectorInputMode["DROPDOWN"] = 0] = "DROPDOWN";
28
33
  ValuePathSelectorInputMode[ValuePathSelectorInputMode["MANUAL"] = 1] = "MANUAL";
29
34
  })(ValuePathSelectorInputMode || (ValuePathSelectorInputMode = {}));
30
- export { ValuePathSelectorPrefix, ValuePathSelectorInputMode, };
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtcGF0aC1zZWxlY3Rvci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL21vZGVscy92YWx1ZS1wYXRoLXNlbGVjdG9yLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBY0gsSUFBSyx1QkFPSjtBQVBELFdBQUssdUJBQXVCO0lBQzFCLHNDQUFXLENBQUE7SUFDWCx3Q0FBYSxDQUFBO0lBQ2Isb0RBQXlCLENBQUE7SUFDekIsMERBQStCLENBQUE7SUFDL0Isb0RBQXlCLENBQUE7SUFDekIsd0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFQSSx1QkFBdUIsS0FBdkIsdUJBQXVCLFFBTzNCO0FBRUQsSUFBSywwQkFHSjtBQUhELFdBQUssMEJBQTBCO0lBQzdCLG1GQUFRLENBQUE7SUFDUiwrRUFBTSxDQUFBO0FBQ1IsQ0FBQyxFQUhJLDBCQUEwQixLQUExQiwwQkFBMEIsUUFHOUI7QUFNRCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLDBCQUEwQixHQUkzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtMaXN0SXRlbX0gZnJvbSAnY2FyYm9uLWNvbXBvbmVudHMtYW5ndWxhcic7XG5cbmludGVyZmFjZSBWYWx1ZVBhdGhTZWxlY3RvckNhY2hlIHtcbiAgW2RvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZ106IHtcbiAgICBbdmVyc2lvbjogc3RyaW5nIHwgbnVtYmVyXToge1xuICAgICAgW3ByZWZpeDogc3RyaW5nXTogc3RyaW5nW107XG4gICAgfTtcbiAgfTtcbn1cblxudHlwZSBEb2N1bWVudERlZmluaXRpb25JdGVtc0NhY2hlID0gTGlzdEl0ZW1bXTtcblxuZW51bSBWYWx1ZVBhdGhTZWxlY3RvclByZWZpeCB7XG4gIERPQyA9ICdkb2MnLFxuICBDQVNFID0gJ2Nhc2UnLFxuICBaQUFLT0JKRUNUID0gJ3phYWtvYmplY3QnLFxuICBaQUFLUkVTVUxUQUFUID0gJ3phYWtyZXN1bHRhYXQnLFxuICBaQUFLU1RBVFVTID0gJ3phYWtzdGF0dXMnLFxuICBaQUFLID0gJ3phYWsnLFxufVxuXG5lbnVtIFZhbHVlUGF0aFNlbGVjdG9ySW5wdXRNb2RlIHtcbiAgRFJPUERPV04sXG4gIE1BTlVBTCxcbn1cblxudHlwZSBWYWx1ZVBhdGhTZWxlY3Rvck5vdGF0aW9uID0gJ2RvdHMnIHwgJ3NsYXNoZXMnO1xuXG50eXBlIFZhbHVlUGF0aFZlcnNpb25Bcmd1bWVudCA9IG51bWJlciB8ICdsYXRlc3QnO1xuXG5leHBvcnQge1xuICBWYWx1ZVBhdGhTZWxlY3RvckNhY2hlLFxuICBWYWx1ZVBhdGhTZWxlY3RvclByZWZpeCxcbiAgVmFsdWVQYXRoU2VsZWN0b3JJbnB1dE1vZGUsXG4gIFZhbHVlUGF0aFZlcnNpb25Bcmd1bWVudCxcbiAgRG9jdW1lbnREZWZpbml0aW9uSXRlbXNDYWNoZSxcbiAgVmFsdWVQYXRoU2VsZWN0b3JOb3RhdGlvbixcbn07XG4iXX0=
35
+ export { ValuePathSelectorPrefix, ValuePathSelectorInputMode, ValuePathType, };
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtcGF0aC1zZWxlY3Rvci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vY29tcG9uZW50cy9zcmMvbGliL21vZGVscy92YWx1ZS1wYXRoLXNlbGVjdG9yLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBSUgsSUFBSyxhQUdKO0FBSEQsV0FBSyxhQUFhO0lBQ2hCLGdDQUFlLENBQUE7SUFDZiwwQ0FBeUIsQ0FBQTtBQUMzQixDQUFDLEVBSEksYUFBYSxLQUFiLGFBQWEsUUFHakI7QUF5QkQsSUFBSyx1QkFPSjtBQVBELFdBQUssdUJBQXVCO0lBQzFCLHNDQUFXLENBQUE7SUFDWCx3Q0FBYSxDQUFBO0lBQ2Isb0RBQXlCLENBQUE7SUFDekIsMERBQStCLENBQUE7SUFDL0Isb0RBQXlCLENBQUE7SUFDekIsd0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFQSSx1QkFBdUIsS0FBdkIsdUJBQXVCLFFBTzNCO0FBRUQsSUFBSywwQkFHSjtBQUhELFdBQUssMEJBQTBCO0lBQzdCLG1GQUFRLENBQUE7SUFDUiwrRUFBTSxDQUFBO0FBQ1IsQ0FBQyxFQUhJLDBCQUEwQixLQUExQiwwQkFBMEIsUUFHOUI7QUFNRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDBCQUEwQixFQUkxQixhQUFhLEdBSWQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7TGlzdEl0ZW19IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuXG5lbnVtIFZhbHVlUGF0aFR5cGUge1xuICBGSUVMRCA9ICdGSUVMRCcsXG4gIENPTExFQ1RJT04gPSAnQ09MTEVDVElPTicsXG59XG5cbmludGVyZmFjZSBWYWx1ZVBhdGhSZXNwb25zZSB7XG4gIHBhdGg6IHN0cmluZztcbiAgdHlwZTogVmFsdWVQYXRoVHlwZTtcbiAgY2hpbGRyZW4/OiBWYWx1ZVBhdGhSZXNwb25zZVtdO1xufVxuXG5pbnRlcmZhY2UgVmFsdWVQYXRoU2VsZWN0b3JDYWNoZSB7XG4gIFtkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmddOiB7XG4gICAgW3ZlcnNpb246IHN0cmluZyB8IG51bWJlcl06IHtcbiAgICAgIFtwcmVmaXg6IHN0cmluZ106IHtcbiAgICAgICAgW3R5cGUgaW4gVmFsdWVQYXRoVHlwZV06IFZhbHVlUGF0aEl0ZW1bXTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFZhbHVlUGF0aEl0ZW0ge1xuICBwYXRoOiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogc3RyaW5nW107XG59XG5cbnR5cGUgRG9jdW1lbnREZWZpbml0aW9uSXRlbXNDYWNoZSA9IExpc3RJdGVtW107XG5cbmVudW0gVmFsdWVQYXRoU2VsZWN0b3JQcmVmaXgge1xuICBET0MgPSAnZG9jJyxcbiAgQ0FTRSA9ICdjYXNlJyxcbiAgWkFBS09CSkVDVCA9ICd6YWFrb2JqZWN0JyxcbiAgWkFBS1JFU1VMVEFBVCA9ICd6YWFrcmVzdWx0YWF0JyxcbiAgWkFBS1NUQVRVUyA9ICd6YWFrc3RhdHVzJyxcbiAgWkFBSyA9ICd6YWFrJyxcbn1cblxuZW51bSBWYWx1ZVBhdGhTZWxlY3RvcklucHV0TW9kZSB7XG4gIERST1BET1dOLFxuICBNQU5VQUwsXG59XG5cbnR5cGUgVmFsdWVQYXRoU2VsZWN0b3JOb3RhdGlvbiA9ICdkb3RzJyB8ICdzbGFzaGVzJztcblxudHlwZSBWYWx1ZVBhdGhWZXJzaW9uQXJndW1lbnQgPSBudW1iZXIgfCAnbGF0ZXN0JztcblxuZXhwb3J0IHtcbiAgVmFsdWVQYXRoU2VsZWN0b3JQcmVmaXgsXG4gIFZhbHVlUGF0aFNlbGVjdG9ySW5wdXRNb2RlLFxuICBWYWx1ZVBhdGhWZXJzaW9uQXJndW1lbnQsXG4gIERvY3VtZW50RGVmaW5pdGlvbkl0ZW1zQ2FjaGUsXG4gIFZhbHVlUGF0aFNlbGVjdG9yTm90YXRpb24sXG4gIFZhbHVlUGF0aFR5cGUsXG4gIFZhbHVlUGF0aFJlc3BvbnNlLFxuICBWYWx1ZVBhdGhTZWxlY3RvckNhY2hlLFxuICBWYWx1ZVBhdGhJdGVtLFxufTtcbiJdfQ==
@@ -21,7 +21,7 @@ export class KeyGeneratorService {
21
21
  .toLowerCase()
22
22
  .replace(/[^a-z0-9-_]+|-[^a-z0-9]+/g, '-')
23
23
  .replace(/_[-_]+/g, '_')
24
- .replace(/^[^a-z]+/g, '');
24
+ .replace(/^[^a-z]+|[^a-z0-9]+$/g, '');
25
25
  if (!usedKeys.includes(dashCaseKey)) {
26
26
  return dashCaseKey;
27
27
  }
@@ -47,4 +47,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
47
47
  providedIn: 'root',
48
48
  }]
49
49
  }] });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LWdlbmVyYXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMva2V5LWdlbmVyYXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLG1CQUFtQjtJQUN2QixZQUFZLENBQUMsVUFBa0IsRUFBRSxRQUFrQjtRQUN4RCxNQUFNLFdBQVcsR0FBRyxHQUFHLFVBQVUsRUFBRTthQUNoQyxXQUFXLEVBQUU7YUFDYixPQUFPLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxDQUFDO2FBQ3pDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2FBQ3ZCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxXQUFtQixFQUFFLFFBQWtCO1FBQ3BFLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUNsRixDQUFDLFdBQW1CLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUN0QyxDQUFDO1FBQ0YsTUFBTSx3QkFBd0IsR0FDNUIscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUYsTUFBTSxNQUFNLEdBQUcsd0JBQXdCO1lBQ3JDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyx3QkFBd0IsRUFBRSxFQUFFLEdBQUcsd0JBQXdCLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUM1RixDQUFDLENBQUMsR0FBRyxXQUFXLElBQUksQ0FBQztRQUV2QixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7K0dBOUJVLG1CQUFtQjttSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzRGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgS2V5R2VuZXJhdG9yU2VydmljZSB7XG4gIHB1YmxpYyBnZXRVbmlxdWVLZXkoZW50aXR5TmFtZTogc3RyaW5nLCB1c2VkS2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhc2hDYXNlS2V5ID0gYCR7ZW50aXR5TmFtZX1gXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1teYS16MC05LV9dK3wtW15hLXowLTldKy9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvX1stX10rL2csICdfJylcbiAgICAgIC5yZXBsYWNlKC9eW15hLXpdKy9nLCAnJyk7XG5cbiAgICBpZiAoIXVzZWRLZXlzLmluY2x1ZGVzKGRhc2hDYXNlS2V5KSkge1xuICAgICAgcmV0dXJuIGRhc2hDYXNlS2V5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFVuaXF1ZUtleVdpdGhOdW1iZXIoZGFzaENhc2VLZXksIHVzZWRLZXlzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VW5pcXVlS2V5V2l0aE51bWJlcihkYXNoQ2FzZUtleTogc3RyaW5nLCB1c2VkS2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IG51bWJlcnNGcm9tQ3VycmVudEtleSA9IChkYXNoQ2FzZUtleS5tYXRjaCgvXlxcZCt8XFxkK1xcYnxcXGQrKD89XFx3KS9nKSB8fCBbXSkubWFwKFxuICAgICAgKG51bWJlclZhbHVlOiBzdHJpbmcpID0+ICtudW1iZXJWYWx1ZVxuICAgICk7XG4gICAgY29uc3QgbGFzdE51bWJlckZyb21DdXJyZW50S2V5ID1cbiAgICAgIG51bWJlcnNGcm9tQ3VycmVudEtleS5sZW5ndGggPiAwICYmIG51bWJlcnNGcm9tQ3VycmVudEtleVtudW1iZXJzRnJvbUN1cnJlbnRLZXkubGVuZ3RoIC0gMV07XG4gICAgY29uc3QgbmV3S2V5ID0gbGFzdE51bWJlckZyb21DdXJyZW50S2V5XG4gICAgICA/IGAke2Rhc2hDYXNlS2V5LnJlcGxhY2UoYCR7bGFzdE51bWJlckZyb21DdXJyZW50S2V5fWAsIGAke2xhc3ROdW1iZXJGcm9tQ3VycmVudEtleSArIDF9YCl9YFxuICAgICAgOiBgJHtkYXNoQ2FzZUtleX0tMWA7XG5cbiAgICBpZiAodXNlZEtleXMuaW5jbHVkZXMobmV3S2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VW5pcXVlS2V5V2l0aE51bWJlcihuZXdLZXksIHVzZWRLZXlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3S2V5O1xuICB9XG59XG4iXX0=
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LWdlbmVyYXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMva2V5LWdlbmVyYXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLG1CQUFtQjtJQUN2QixZQUFZLENBQUMsVUFBa0IsRUFBRSxRQUFrQjtRQUN4RCxNQUFNLFdBQVcsR0FBRyxHQUFHLFVBQVUsRUFBRTthQUNoQyxXQUFXLEVBQUU7YUFDYixPQUFPLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxDQUFDO2FBQ3pDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDO2FBQ3ZCLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFdBQW1CLEVBQUUsUUFBa0I7UUFDcEUsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQ2xGLENBQUMsV0FBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQ3RDLENBQUM7UUFDRixNQUFNLHdCQUF3QixHQUM1QixxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLHFCQUFxQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5RixNQUFNLE1BQU0sR0FBRyx3QkFBd0I7WUFDckMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLHdCQUF3QixFQUFFLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzVGLENBQUMsQ0FBQyxHQUFHLFdBQVcsSUFBSSxDQUFDO1FBRXZCLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQzsrR0E5QlUsbUJBQW1CO21IQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBLZXlHZW5lcmF0b3JTZXJ2aWNlIHtcbiAgcHVibGljIGdldFVuaXF1ZUtleShlbnRpdHlOYW1lOiBzdHJpbmcsIHVzZWRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgZGFzaENhc2VLZXkgPSBgJHtlbnRpdHlOYW1lfWBcbiAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAucmVwbGFjZSgvW15hLXowLTktX10rfC1bXmEtejAtOV0rL2csICctJylcbiAgICAgIC5yZXBsYWNlKC9fWy1fXSsvZywgJ18nKVxuICAgICAgLnJlcGxhY2UoL15bXmEtel0rfFteYS16MC05XSskL2csICcnKTtcblxuICAgIGlmICghdXNlZEtleXMuaW5jbHVkZXMoZGFzaENhc2VLZXkpKSB7XG4gICAgICByZXR1cm4gZGFzaENhc2VLZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0VW5pcXVlS2V5V2l0aE51bWJlcihkYXNoQ2FzZUtleSwgdXNlZEtleXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVbmlxdWVLZXlXaXRoTnVtYmVyKGRhc2hDYXNlS2V5OiBzdHJpbmcsIHVzZWRLZXlzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgbnVtYmVyc0Zyb21DdXJyZW50S2V5ID0gKGRhc2hDYXNlS2V5Lm1hdGNoKC9eXFxkK3xcXGQrXFxifFxcZCsoPz1cXHcpL2cpIHx8IFtdKS5tYXAoXG4gICAgICAobnVtYmVyVmFsdWU6IHN0cmluZykgPT4gK251bWJlclZhbHVlXG4gICAgKTtcbiAgICBjb25zdCBsYXN0TnVtYmVyRnJvbUN1cnJlbnRLZXkgPVxuICAgICAgbnVtYmVyc0Zyb21DdXJyZW50S2V5Lmxlbmd0aCA+IDAgJiYgbnVtYmVyc0Zyb21DdXJyZW50S2V5W251bWJlcnNGcm9tQ3VycmVudEtleS5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBuZXdLZXkgPSBsYXN0TnVtYmVyRnJvbUN1cnJlbnRLZXlcbiAgICAgID8gYCR7ZGFzaENhc2VLZXkucmVwbGFjZShgJHtsYXN0TnVtYmVyRnJvbUN1cnJlbnRLZXl9YCwgYCR7bGFzdE51bWJlckZyb21DdXJyZW50S2V5ICsgMX1gKX1gXG4gICAgICA6IGAke2Rhc2hDYXNlS2V5fS0xYDtcblxuICAgIGlmICh1c2VkS2V5cy5pbmNsdWRlcyhuZXdLZXkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRVbmlxdWVLZXlXaXRoTnVtYmVyKG5ld0tleSwgdXNlZEtleXMpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdLZXk7XG4gIH1cbn1cbiJdfQ==