@messaia/cdk 18.1.2 → 18.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,68 @@
1
+ import { Directive, ElementRef, HostListener, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * This directive can be added to input elements to parse decimal values.
5
+ */
6
+ export class ParseDecimalDirective {
7
+ el;
8
+ /**
9
+ * Whether the directive is enabled
10
+ */
11
+ parseDecimalEnabled = true;
12
+ /**
13
+ * Constructor to inject ElementRef for accessing the DOM element.
14
+ * @param el - The ElementRef instance representing the DOM element.
15
+ */
16
+ constructor(el) {
17
+ this.el = el;
18
+ }
19
+ /**
20
+ * Handles the paste event to parse and normalize pasted currency strings into decimals.
21
+ * @param event - The ClipboardEvent triggered on pasting.
22
+ */
23
+ onPaste(event) {
24
+ /* Skip the directive's functionality if disabled */
25
+ if (!this.parseDecimalEnabled) {
26
+ return;
27
+ }
28
+ /* Retrieve the pasted text from the clipboard. */
29
+ const pastedValue = event.clipboardData?.getData('text');
30
+ /* Parse the pasted text into a valid decimal. */
31
+ const parsedValue = this.parseCurrency(pastedValue ?? '');
32
+ /* If the parsed value is a valid number, update the input value. */
33
+ if (!isNaN(parsedValue)) {
34
+ this.el.nativeElement.value = parsedValue;
35
+ }
36
+ /* Prevent the default paste behavior to avoid invalid input. */
37
+ event.preventDefault();
38
+ }
39
+ /**
40
+ * Parses a currency string into a decimal.
41
+ * @param value - The formatted currency string.
42
+ * @returns The parsed decimal or NaN if invalid.
43
+ */
44
+ parseCurrency(value) {
45
+ /* Return NaN if the input value is empty. */
46
+ if (!value) {
47
+ return NaN;
48
+ }
49
+ /* Remove all non-numeric characters except for `,` and `.` to normalize the value. */
50
+ let normalizedValue = value.replace(/[^\d.,-]/g, '');
51
+ /* Replace thousands separators (.) with nothing and decimal separators (,) with a dot. */
52
+ normalizedValue = normalizedValue.replace(/\./g, '').replace(',', '.');
53
+ /* Convert the cleaned string into a floating-point number. */
54
+ return parseFloat(normalizedValue);
55
+ }
56
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ParseDecimalDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
57
+ /** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: ParseDecimalDirective, selector: "[parseDecimal]", inputs: { parseDecimalEnabled: "parseDecimalEnabled" }, host: { listeners: { "paste": "onPaste($event)" } }, ngImport: i0 });
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ParseDecimalDirective, decorators: [{
60
+ type: Directive,
61
+ args: [{ selector: '[parseDecimal]' }]
62
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { parseDecimalEnabled: [{
63
+ type: Input
64
+ }], onPaste: [{
65
+ type: HostListener,
66
+ args: ['paste', ['$event']]
67
+ }] } });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UtZGVjaW1hbC1kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9mb3Jtcy9kaXJlY3RpdmVzL3BhcnNlLWRlY2ltYWwtZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTNFOztHQUVHO0FBRUgsTUFBTSxPQUFPLHFCQUFxQjtJQVdWO0lBVnBCOztPQUVHO0lBRUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0lBRWxDOzs7T0FHRztJQUNILFlBQW9CLEVBQWM7UUFBZCxPQUFFLEdBQUYsRUFBRSxDQUFZO0lBQUksQ0FBQztJQUV2Qzs7O09BR0c7SUFFSSxPQUFPLENBQUMsS0FBcUI7UUFDaEMsb0RBQW9EO1FBQ3BELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1gsQ0FBQztRQUVELGtEQUFrRDtRQUNsRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV6RCxpREFBaUQ7UUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7UUFFMUQsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO1FBQzlDLENBQUM7UUFFRCxnRUFBZ0U7UUFDaEUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssYUFBYSxDQUFDLEtBQWE7UUFDL0IsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNULE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQztRQUVELHNGQUFzRjtRQUN0RixJQUFJLGVBQWUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVyRCwwRkFBMEY7UUFDMUYsZUFBZSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFdkUsOERBQThEO1FBQzlELE9BQU8sVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7MEhBMURRLHFCQUFxQjs4R0FBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQURqQyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFOytFQU05QixtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBY0MsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgZGlyZWN0aXZlIGNhbiBiZSBhZGRlZCB0byBpbnB1dCBlbGVtZW50cyB0byBwYXJzZSBkZWNpbWFsIHZhbHVlcy5cclxuICovXHJcbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1twYXJzZURlY2ltYWxdJyB9KVxyXG5leHBvcnQgY2xhc3MgUGFyc2VEZWNpbWFsRGlyZWN0aXZlIHtcclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0aGUgZGlyZWN0aXZlIGlzIGVuYWJsZWRcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBwYXJzZURlY2ltYWxFbmFibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0cnVjdG9yIHRvIGluamVjdCBFbGVtZW50UmVmIGZvciBhY2Nlc3NpbmcgdGhlIERPTSBlbGVtZW50LlxyXG4gICAgICogQHBhcmFtIGVsIC0gVGhlIEVsZW1lbnRSZWYgaW5zdGFuY2UgcmVwcmVzZW50aW5nIHRoZSBET00gZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZikgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVzIHRoZSBwYXN0ZSBldmVudCB0byBwYXJzZSBhbmQgbm9ybWFsaXplIHBhc3RlZCBjdXJyZW5jeSBzdHJpbmdzIGludG8gZGVjaW1hbHMuXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgQ2xpcGJvYXJkRXZlbnQgdHJpZ2dlcmVkIG9uIHBhc3RpbmcuXHJcbiAgICAgKi9cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3Bhc3RlJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIC8qIFNraXAgdGhlIGRpcmVjdGl2ZSdzIGZ1bmN0aW9uYWxpdHkgaWYgZGlzYWJsZWQgKi9cclxuICAgICAgICBpZiAoIXRoaXMucGFyc2VEZWNpbWFsRW5hYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiBSZXRyaWV2ZSB0aGUgcGFzdGVkIHRleHQgZnJvbSB0aGUgY2xpcGJvYXJkLiAqL1xyXG4gICAgICAgIGNvbnN0IHBhc3RlZFZhbHVlID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpO1xyXG5cclxuICAgICAgICAvKiBQYXJzZSB0aGUgcGFzdGVkIHRleHQgaW50byBhIHZhbGlkIGRlY2ltYWwuICovXHJcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnBhcnNlQ3VycmVuY3kocGFzdGVkVmFsdWUgPz8gJycpO1xyXG5cclxuICAgICAgICAvKiBJZiB0aGUgcGFyc2VkIHZhbHVlIGlzIGEgdmFsaWQgbnVtYmVyLCB1cGRhdGUgdGhlIGlucHV0IHZhbHVlLiAqL1xyXG4gICAgICAgIGlmICghaXNOYU4ocGFyc2VkVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHBhcnNlZFZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogUHJldmVudCB0aGUgZGVmYXVsdCBwYXN0ZSBiZWhhdmlvciB0byBhdm9pZCBpbnZhbGlkIGlucHV0LiAqL1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgYSBjdXJyZW5jeSBzdHJpbmcgaW50byBhIGRlY2ltYWwuXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZm9ybWF0dGVkIGN1cnJlbmN5IHN0cmluZy5cclxuICAgICAqIEByZXR1cm5zIFRoZSBwYXJzZWQgZGVjaW1hbCBvciBOYU4gaWYgaW52YWxpZC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBwYXJzZUN1cnJlbmN5KHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIC8qIFJldHVybiBOYU4gaWYgdGhlIGlucHV0IHZhbHVlIGlzIGVtcHR5LiAqL1xyXG4gICAgICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIE5hTjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIFJlbW92ZSBhbGwgbm9uLW51bWVyaWMgY2hhcmFjdGVycyBleGNlcHQgZm9yIGAsYCBhbmQgYC5gIHRvIG5vcm1hbGl6ZSB0aGUgdmFsdWUuICovXHJcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRWYWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxkLiwtXS9nLCAnJyk7XHJcblxyXG4gICAgICAgIC8qIFJlcGxhY2UgdGhvdXNhbmRzIHNlcGFyYXRvcnMgKC4pIHdpdGggbm90aGluZyBhbmQgZGVjaW1hbCBzZXBhcmF0b3JzICgsKSB3aXRoIGEgZG90LiAqL1xyXG4gICAgICAgIG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZS5yZXBsYWNlKC9cXC4vZywgJycpLnJlcGxhY2UoJywnLCAnLicpO1xyXG5cclxuICAgICAgICAvKiBDb252ZXJ0IHRoZSBjbGVhbmVkIHN0cmluZyBpbnRvIGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyLiAqL1xyXG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KG5vcm1hbGl6ZWRWYWx1ZSk7XHJcbiAgICB9XHJcbn0iXX0=
@@ -22,6 +22,7 @@ import { DatePickerHeaderComponent } from './components/datepicker/datepicker-he
22
22
  import { VdCodeDirective, VdCustomDirective, VdEditorDirective, VdFileDirective, VdGenericFormComponent } from './components/generic-form/generic-form.component';
23
23
  import { MatFormFieldEditorDirective } from './directives/mat-form-field-editor.directive';
24
24
  import { MatFormFieldReadonlyDirective } from './directives/mat-form-field-readonly.directive';
25
+ import { ParseDecimalDirective } from './directives/parse-decimal-directive';
25
26
  import { VdGenericFormCustomFieldDirective } from './directives/vd-generic-form-custom-field.directive';
26
27
  import { FieldFuncPipe } from './pipes/field-func.pipe';
27
28
  import { GroupFilterPipe } from './pipes/group-filter.pipe';
@@ -40,41 +41,43 @@ export { FormDefinition } from './models/form-definition';
40
41
  export { FormFieldDefinition } from './models/form-field-definition';
41
42
  export { FormFieldGroupDefinition } from './models/form-field-group-definition';
42
43
  export { EqualValidator } from './validators/equal-validator.directive';
43
- export { DatePickerHeaderComponent, EmptyStringResetDirective, FieldFuncPipe, GroupFilterPipe, MatFormFieldEditorDirective, NativeElementInjectorDirective, UniqueValidatorDirective };
44
+ export { DatePickerHeaderComponent, EmptyStringResetDirective, FieldFuncPipe, GroupFilterPipe, MatFormFieldEditorDirective, NativeElementInjectorDirective, ParseDecimalDirective, UniqueValidatorDirective };
44
45
  const DECLARATIONS = [
46
+ DatePickerHeaderComponent,
47
+ EmptyStringResetDirective,
45
48
  EqualValidator,
46
- UniqueValidatorDirective,
47
- NativeElementInjectorDirective,
48
- MatFormFieldReadonlyDirective,
49
+ FieldFuncPipe,
50
+ GroupFilterPipe,
49
51
  MatFormFieldEditorDirective,
50
- VdEditorDirective,
52
+ MatFormFieldReadonlyDirective,
53
+ NativeElementInjectorDirective,
54
+ ParseDecimalDirective,
55
+ UniqueValidatorDirective,
51
56
  VdCodeDirective,
52
- VdFileDirective,
53
57
  VdCustomDirective,
54
- EmptyStringResetDirective,
58
+ VdEditorDirective,
59
+ VdFileDirective,
55
60
  VdGenericFormComponent,
56
- DatePickerHeaderComponent,
57
61
  VdGenericFormCustomFieldDirective,
58
- GroupFilterPipe,
59
- FieldFuncPipe
60
62
  ];
61
63
  export class VdFormsModule {
62
64
  /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VdFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
63
- /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: VdFormsModule, declarations: [EqualValidator,
64
- UniqueValidatorDirective,
65
- NativeElementInjectorDirective,
66
- MatFormFieldReadonlyDirective,
65
+ /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: VdFormsModule, declarations: [DatePickerHeaderComponent,
66
+ EmptyStringResetDirective,
67
+ EqualValidator,
68
+ FieldFuncPipe,
69
+ GroupFilterPipe,
67
70
  MatFormFieldEditorDirective,
68
- VdEditorDirective,
71
+ MatFormFieldReadonlyDirective,
72
+ NativeElementInjectorDirective,
73
+ ParseDecimalDirective,
74
+ UniqueValidatorDirective,
69
75
  VdCodeDirective,
70
- VdFileDirective,
71
76
  VdCustomDirective,
72
- EmptyStringResetDirective,
77
+ VdEditorDirective,
78
+ VdFileDirective,
73
79
  VdGenericFormComponent,
74
- DatePickerHeaderComponent,
75
- VdGenericFormCustomFieldDirective,
76
- GroupFilterPipe,
77
- FieldFuncPipe], imports: [CommonModule,
80
+ VdGenericFormCustomFieldDirective], imports: [CommonModule,
78
81
  VdCommonModule,
79
82
  VdSelectModule,
80
83
  VdChipsModule,
@@ -94,21 +97,22 @@ export class VdFormsModule {
94
97
  MatNativeDateModule,
95
98
  MatAutocompleteModule,
96
99
  MatChipsModule,
97
- NgxColorsModule], exports: [EqualValidator,
98
- UniqueValidatorDirective,
99
- NativeElementInjectorDirective,
100
- MatFormFieldReadonlyDirective,
100
+ NgxColorsModule], exports: [DatePickerHeaderComponent,
101
+ EmptyStringResetDirective,
102
+ EqualValidator,
103
+ FieldFuncPipe,
104
+ GroupFilterPipe,
101
105
  MatFormFieldEditorDirective,
102
- VdEditorDirective,
106
+ MatFormFieldReadonlyDirective,
107
+ NativeElementInjectorDirective,
108
+ ParseDecimalDirective,
109
+ UniqueValidatorDirective,
103
110
  VdCodeDirective,
104
- VdFileDirective,
105
111
  VdCustomDirective,
106
- EmptyStringResetDirective,
112
+ VdEditorDirective,
113
+ VdFileDirective,
107
114
  VdGenericFormComponent,
108
- DatePickerHeaderComponent,
109
- VdGenericFormCustomFieldDirective,
110
- GroupFilterPipe,
111
- FieldFuncPipe] });
115
+ VdGenericFormCustomFieldDirective] });
112
116
  /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VdFormsModule, imports: [CommonModule,
113
117
  VdCommonModule,
114
118
  VdSelectModule,
@@ -161,4 +165,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
161
165
  exports: [DECLARATIONS]
162
166
  }]
163
167
  }] });
164
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybXMvZm9ybXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztB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b3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcclxuaW1wb3J0IHsgTWF0TmF0aXZlRGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XHJcbmltcG9ydCB7IE5neENvbG9yc01vZHVsZSB9IGZyb20gJ25neC1jb2xvcnMnO1xyXG5pbXBvcnQgeyBWZENoaXBzTW9kdWxlIH0gZnJvbSAnLi4vY2hpcHMvY2hpcHMubW9kdWxlJztcclxuaW1wb3J0IHsgVmRDb21tb25Nb2R1bGUgfSBmcm9tICcuLi9jb21tb24vcHVibGljX2FwaSc7XHJcbmltcG9ydCB7IFZkRmlsZU1vZHVsZSB9IGZyb20gJy4uL2ZpbGUvZmlsZS5tb2R1bGUnO1xyXG5pbXBvcnQgeyBWZExpc3RNb2R1bGUgfSBmcm9tICcuLi9saXN0L2xpc3QubW9kdWxlJztcclxuaW1wb3J0IHsgVmRTZWxlY3RNb2R1bGUgfSBmcm9tICcuLi9zZWxlY3Qvc2VsZWN0Lm1vZHVsZSc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLWhlYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBWZENvZGVEaXJlY3RpdmUsIFZkQ3VzdG9tRGlyZWN0aXZlLCBWZEVkaXRvckRpcmVjdGl2ZSwgVmRGaWxlRGlyZWN0aXZlLCBWZEdlbmVyaWNGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2dlbmVyaWMtZm9ybS9nZW5lcmljLWZvcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL21hdC1mb3JtLWZpZWxkLWVkaXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRSZWFkb25seURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9tYXQtZm9ybS1maWVsZC1yZWFkb25seS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBWZEdlbmVyaWNGb3JtQ3VzdG9tRmllbGREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvdmQtZ2VuZXJpYy1mb3JtLWN1c3RvbS1maWVsZC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGaWVsZEZ1bmNQaXBlIH0gZnJvbSAnLi9waXBlcy9maWVsZC1mdW5jLnBpcGUnO1xyXG5pbXBvcnQgeyBHcm91cEZpbHRlclBpcGUgfSBmcm9tICcuL3BpcGVzL2dyb3VwLWZpbHRlci5waXBlJztcclxuaW1wb3J0IHsgRW1wdHlTdHJpbmdSZXNldERpcmVjdGl2ZSB9IGZyb20gJy4vdmFsaWRhdG9ycy9lbXB0eS1zdHJpbmctcmVzZXQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXF1YWxWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMvZXF1YWwtdmFsaWRhdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE5hdGl2ZUVsZW1lbnRJbmplY3RvckRpcmVjdGl2ZSB9IGZyb20gJy4vdmFsaWRhdG9ycy9uYXRpdmUtZWxlbWVudC1pbmplY3Rvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBVbmlxdWVWYWxpZGF0b3JEaXJlY3RpdmUgfSBmcm9tICcuL3ZhbGlkYXRvcnMvdW5pcXVlLXZhbGlkYXRvci1kaXJlY3RpdmUnO1xyXG5cclxuZXhwb3J0IHsgZm9ybUZpZWxkR3JvdXBzTWV0YWRhdGFLZXksIGZvcm1GaWVsZHNNZXRhZGF0YUtleSB9IGZyb20gJy4vY29uc3RhbnRzL2NvbnN0YW50cyc7XHJcbmV4cG9ydCB7IEZvcm1GaWVsZFR5cGUgfSBmcm9tICcuL2VudW1zL2Zvcm0tZmllbGQtdHlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb25zL2RlY29yYXRvcnMnO1xyXG5leHBvcnQgeyBnZXRGb3JtR3JvdXBzIH0gZnJvbSAnLi9mdW5jdGlvbnMvZnVuY3Rpb25zJztcclxuZXhwb3J0IHsgQWJzdHJhY3RNYXRGb3JtRmllbGQgfSBmcm9tICcuL2hlbHBlcnMvYWJzdHJhY3QtbWF0LWZvcm0tZmllbGQnO1xyXG5leHBvcnQgeyBWYWx1ZUFjY2Vzc29yQmFzZSB9IGZyb20gJy4vaGVscGVycy92YWx1ZS1hY2Nlc3Nvci1iYXNlJztcclxuZXhwb3J0IHsgRm9ybURlZmluaXRpb24gfSBmcm9tICcuL21vZGVscy9mb3JtLWRlZmluaXRpb24nO1xyXG5leHBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uIH0gZnJvbSAnLi9tb2RlbHMvZm9ybS1maWVsZC1kZWZpbml0aW9uJztcclxuZXhwb3J0IHsgRm9ybUZpZWxkR3JvdXBEZWZpbml0aW9uIH0gZnJvbSAnLi9tb2RlbHMvZm9ybS1maWVsZC1ncm91cC1kZWZpbml0aW9uJztcclxuZXhwb3J0IHsgRXF1YWxWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMvZXF1YWwtdmFsaWRhdG9yLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCB7XHJcblx0RGF0ZVBpY2tlckhlYWRlckNvbXBvbmVudCxcclxuXHRFbXB0eVN0cmluZ1Jlc2V0RGlyZWN0aXZlLCBGaWVsZEZ1bmNQaXBlLCBHcm91cEZpbHRlclBpcGUsIE1hdEZvcm1GaWVsZEVkaXRvckRpcmVjdGl2ZSwgTmF0aXZlRWxlbWVudEluamVjdG9yRGlyZWN0aXZlLFxyXG5cdFVuaXF1ZVZhbGlkYXRvckRpcmVjdGl2ZVxyXG59O1xyXG5cclxuY29uc3QgREVDTEFSQVRJT05TID0gW1xyXG5cdEVxdWFsVmFsaWRhdG9yLFxyXG5cdFVuaXF1ZVZhbGlkYXRvckRpcmVjdGl2ZSxcclxuXHROYXRpdmVFbGVtZW50SW5qZWN0b3JEaXJlY3RpdmUsXHJcblx0TWF0Rm9ybUZpZWxkUmVhZG9ubHlEaXJlY3RpdmUsXHJcblx0TWF0Rm9ybUZpZWxkRWRpdG9yRGlyZWN0aXZlLFxyXG5cdFZkRWRpdG9yRGlyZWN0aXZlLFxyXG5cdFZkQ29kZURpcmVjdGl2ZSxcclxuXHRWZEZpbGVEaXJlY3RpdmUsXHJcblx0VmRDdXN0b21EaXJlY3RpdmUsXHJcblx0RW1wdHlTdHJpbmdSZXNldERpcmVjdGl2ZSxcclxuXHRWZEdlbmVyaWNGb3JtQ29tcG9uZW50LFxyXG5cdERhdGVQaWNrZXJIZWFkZXJDb21wb25lbnQsXHJcblx0VmRHZW5lcmljRm9ybUN1c3RvbUZpZWxkRGlyZWN0aXZlLFxyXG5cdEdyb3VwRmlsdGVyUGlwZSxcclxuXHRGaWVsZEZ1bmNQaXBlXHJcbl07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG5cdGltcG9ydHM6IFtcclxuXHRcdENvbW1vbk1vZHVsZSxcclxuXHRcdFZkQ29tbW9uTW9kdWxlLFxyXG5cdFx0VmRTZWxlY3RNb2R1bGUsXHJcblx0XHRWZENoaXBzTW9kdWxlLFxyXG5cdFx0VmRGaWxlTW9kdWxlLFxyXG5cdFx0VmRMaXN0TW9kdWxlLFxyXG5cdFx0Rm9ybXNNb2R1bGUsXHJcblx0XHRSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG5cdFx0TWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG5cdFx0TWF0U2VsZWN0TW9kdWxlLFxyXG5cdFx0TWF0SWNvbk1vZHVsZSxcclxuXHRcdE1hdElucHV0TW9kdWxlLFxyXG5cdFx0TWF0QnV0dG9uTW9kdWxlLFxyXG5cdFx0TWF0RGF0ZXBpY2tlck1vZHVsZSxcclxuXHRcdE1hdENoZWNrYm94TW9kdWxlLFxyXG5cdFx0TWF0U2xpZGVUb2dnbGVNb2R1bGUsXHJcblx0XHRNYXREYXRlcGlja2VyTW9kdWxlLFxyXG5cdFx0TWF0TmF0aXZlRGF0ZU1vZHVsZSxcclxuXHRcdE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcclxuXHRcdE1hdENoaXBzTW9kdWxlLFxyXG5cdFx0Tmd4Q29sb3JzTW9kdWxlXHJcblx0XSxcclxuXHRkZWNsYXJhdGlvbnM6IFtERUNMQVJBVElPTlNdLFxyXG5cdGV4cG9ydHM6IFtERUNMQVJBVElPTlNdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWZEZvcm1zTW9kdWxlIHsgfSJdfQ==
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybXMvZm9ybXMubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztB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cUJBQ2Y7b0JBQ0QsWUFBWSxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUM1QixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBNYXRDaGlwc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcclxuaW1wb3J0IHsgTWF0TmF0aXZlRGF0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XHJcbmltcG9ydCB7IE5neENvbG9yc01vZHVsZSB9IGZyb20gJ25neC1jb2xvcnMnO1xyXG5pbXBvcnQgeyBWZENoaXBzTW9kdWxlIH0gZnJvbSAnLi4vY2hpcHMvY2hpcHMubW9kdWxlJztcclxuaW1wb3J0IHsgVmRDb21tb25Nb2R1bGUgfSBmcm9tICcuLi9jb21tb24vcHVibGljX2FwaSc7XHJcbmltcG9ydCB7IFZkRmlsZU1vZHVsZSB9IGZyb20gJy4uL2ZpbGUvZmlsZS5tb2R1bGUnO1xyXG5pbXBvcnQgeyBWZExpc3RNb2R1bGUgfSBmcm9tICcuLi9saXN0L2xpc3QubW9kdWxlJztcclxuaW1wb3J0IHsgVmRTZWxlY3RNb2R1bGUgfSBmcm9tICcuLi9zZWxlY3Qvc2VsZWN0Lm1vZHVsZSc7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLWhlYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBWZENvZGVEaXJlY3RpdmUsIFZkQ3VzdG9tRGlyZWN0aXZlLCBWZEVkaXRvckRpcmVjdGl2ZSwgVmRGaWxlRGlyZWN0aXZlLCBWZEdlbmVyaWNGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2dlbmVyaWMtZm9ybS9nZW5lcmljLWZvcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkRWRpdG9yRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL21hdC1mb3JtLWZpZWxkLWVkaXRvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRSZWFkb25seURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9tYXQtZm9ybS1maWVsZC1yZWFkb25seS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBQYXJzZURlY2ltYWxEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvcGFyc2UtZGVjaW1hbC1kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBWZEdlbmVyaWNGb3JtQ3VzdG9tRmllbGREaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvdmQtZ2VuZXJpYy1mb3JtLWN1c3RvbS1maWVsZC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBGaWVsZEZ1bmNQaXBlIH0gZnJvbSAnLi9waXBlcy9maWVsZC1mdW5jLnBpcGUnO1xyXG5pbXBvcnQgeyBHcm91cEZpbHRlclBpcGUgfSBmcm9tICcuL3BpcGVzL2dyb3VwLWZpbHRlci5waXBlJztcclxuaW1wb3J0IHsgRW1wdHlTdHJpbmdSZXNldERpcmVjdGl2ZSB9IGZyb20gJy4vdmFsaWRhdG9ycy9lbXB0eS1zdHJpbmctcmVzZXQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXF1YWxWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMvZXF1YWwtdmFsaWRhdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE5hdGl2ZUVsZW1lbnRJbmplY3RvckRpcmVjdGl2ZSB9IGZyb20gJy4vdmFsaWRhdG9ycy9uYXRpdmUtZWxlbWVudC1pbmplY3Rvci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBVbmlxdWVWYWxpZGF0b3JEaXJlY3RpdmUgfSBmcm9tICcuL3ZhbGlkYXRvcnMvdW5pcXVlLXZhbGlkYXRvci1kaXJlY3RpdmUnO1xyXG5cclxuZXhwb3J0IHsgZm9ybUZpZWxkR3JvdXBzTWV0YWRhdGFLZXksIGZvcm1GaWVsZHNNZXRhZGF0YUtleSB9IGZyb20gJy4vY29uc3RhbnRzL2NvbnN0YW50cyc7XHJcbmV4cG9ydCB7IEZvcm1GaWVsZFR5cGUgfSBmcm9tICcuL2VudW1zL2Zvcm0tZmllbGQtdHlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb25zL2RlY29yYXRvcnMnO1xyXG5leHBvcnQgeyBnZXRGb3JtR3JvdXBzIH0gZnJvbSAnLi9mdW5jdGlvbnMvZnVuY3Rpb25zJztcclxuZXhwb3J0IHsgQWJzdHJhY3RNYXRGb3JtRmllbGQgfSBmcm9tICcuL2hlbHBlcnMvYWJzdHJhY3QtbWF0LWZvcm0tZmllbGQnO1xyXG5leHBvcnQgeyBWYWx1ZUFjY2Vzc29yQmFzZSB9IGZyb20gJy4vaGVscGVycy92YWx1ZS1hY2Nlc3Nvci1iYXNlJztcclxuZXhwb3J0IHsgRm9ybURlZmluaXRpb24gfSBmcm9tICcuL21vZGVscy9mb3JtLWRlZmluaXRpb24nO1xyXG5leHBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uIH0gZnJvbSAnLi9tb2RlbHMvZm9ybS1maWVsZC1kZWZpbml0aW9uJztcclxuZXhwb3J0IHsgRm9ybUZpZWxkR3JvdXBEZWZpbml0aW9uIH0gZnJvbSAnLi9tb2RlbHMvZm9ybS1maWVsZC1ncm91cC1kZWZpbml0aW9uJztcclxuZXhwb3J0IHsgRXF1YWxWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMvZXF1YWwtdmFsaWRhdG9yLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCB7XHJcblx0RGF0ZVBpY2tlckhlYWRlckNvbXBvbmVudCxcclxuXHRFbXB0eVN0cmluZ1Jlc2V0RGlyZWN0aXZlLFxyXG5cdEZpZWxkRnVuY1BpcGUsXHJcblx0R3JvdXBGaWx0ZXJQaXBlLFxyXG5cdE1hdEZvcm1GaWVsZEVkaXRvckRpcmVjdGl2ZSxcclxuXHROYXRpdmVFbGVtZW50SW5qZWN0b3JEaXJlY3RpdmUsXHJcblx0UGFyc2VEZWNpbWFsRGlyZWN0aXZlLFxyXG5cdFVuaXF1ZVZhbGlkYXRvckRpcmVjdGl2ZVxyXG59O1xyXG5cclxuY29uc3QgREVDTEFSQVRJT05TID0gW1xyXG5cdERhdGVQaWNrZXJIZWFkZXJDb21wb25lbnQsXHJcblx0RW1wdHlTdHJpbmdSZXNldERpcmVjdGl2ZSxcclxuXHRFcXVhbFZhbGlkYXRvcixcclxuXHRGaWVsZEZ1bmNQaXBlLFxyXG5cdEdyb3VwRmlsdGVyUGlwZSxcclxuXHRNYXRGb3JtRmllbGRFZGl0b3JEaXJlY3RpdmUsXHJcblx0TWF0Rm9ybUZpZWxkUmVhZG9ubHlEaXJlY3RpdmUsXHJcblx0TmF0aXZlRWxlbWVudEluamVjdG9yRGlyZWN0aXZlLFxyXG5cdFBhcnNlRGVjaW1hbERpcmVjdGl2ZSxcclxuXHRVbmlxdWVWYWxpZGF0b3JEaXJlY3RpdmUsXHJcblx0VmRDb2RlRGlyZWN0aXZlLFxyXG5cdFZkQ3VzdG9tRGlyZWN0aXZlLFxyXG5cdFZkRWRpdG9yRGlyZWN0aXZlLFxyXG5cdFZkRmlsZURpcmVjdGl2ZSxcclxuXHRWZEdlbmVyaWNGb3JtQ29tcG9uZW50LFxyXG5cdFZkR2VuZXJpY0Zvcm1DdXN0b21GaWVsZERpcmVjdGl2ZSxcclxuXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcblx0aW1wb3J0czogW1xyXG5cdFx0Q29tbW9uTW9kdWxlLFxyXG5cdFx0VmRDb21tb25Nb2R1bGUsXHJcblx0XHRWZFNlbGVjdE1vZHVsZSxcclxuXHRcdFZkQ2hpcHNNb2R1bGUsXHJcblx0XHRWZEZpbGVNb2R1bGUsXHJcblx0XHRWZExpc3RNb2R1bGUsXHJcblx0XHRGb3Jtc01vZHVsZSxcclxuXHRcdFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcblx0XHRNYXRGb3JtRmllbGRNb2R1bGUsXHJcblx0XHRNYXRTZWxlY3RNb2R1bGUsXHJcblx0XHRNYXRJY29uTW9kdWxlLFxyXG5cdFx0TWF0SW5wdXRNb2R1bGUsXHJcblx0XHRNYXRCdXR0b25Nb2R1bGUsXHJcblx0XHRNYXREYXRlcGlja2VyTW9kdWxlLFxyXG5cdFx0TWF0Q2hlY2tib3hNb2R1bGUsXHJcblx0XHRNYXRTbGlkZVRvZ2dsZU1vZHVsZSxcclxuXHRcdE1hdERhdGVwaWNrZXJNb2R1bGUsXHJcblx0XHRNYXROYXRpdmVEYXRlTW9kdWxlLFxyXG5cdFx0TWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxyXG5cdFx0TWF0Q2hpcHNNb2R1bGUsXHJcblx0XHROZ3hDb2xvcnNNb2R1bGVcclxuXHRdLFxyXG5cdGRlY2xhcmF0aW9uczogW0RFQ0xBUkFUSU9OU10sXHJcblx0ZXhwb3J0czogW0RFQ0xBUkFUSU9OU11cclxufSlcclxuZXhwb3J0IGNsYXNzIFZkRm9ybXNNb2R1bGUgeyB9Il19
@@ -283,6 +283,11 @@ export class FormFieldDefinition {
283
283
  * Flag indicating if only numeric input is permitted.
284
284
  */
285
285
  numbersOnly;
286
+ /**
287
+ * Flag to enable or disable decimal parsing on input.
288
+ * If set to true, pasted values will be normalized to a valid decimal format.
289
+ */
290
+ parseDecimal;
286
291
  /**
287
292
  * Indicates whether the first option in a selection should be automatically selected.
288
293
  * Defaults to false.
@@ -460,4 +465,4 @@ export class FormFieldDefinition {
460
465
  Object.assign(this, init);
461
466
  }
462
467
  }
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1kZWZpbml0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybXMvbW9kZWxzL2Zvcm0tZmllbGQtZGVmaW5pdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxNQUFNLE9BQU8sbUJBQW1CO0lBQzVCOztPQUVHO0lBQ0ksb0JBQW9CLEdBQVcsRUFBRSxDQUFDO0lBRXpDOzs7Ozs7O09BT0c7SUFDSSxvQkFBb0IsQ0FBK0Y7SUFFMUg7O09BRUc7SUFDSSxnQkFBZ0IsR0FBVyxNQUFNLENBQUM7SUFFekM7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUErRjtJQUU1Rzs7Ozs7OztPQU9HO0lBQ0ksT0FBTyxDQUFvRztJQUVsSDs7Ozs7OztPQU9HO0lBQ0ksWUFBWSxDQUErRjtJQUVsSDs7T0FFRztJQUNJLFFBQVEsR0FBVyxNQUFNLENBQUM7SUFFakM7O09BRUc7SUFDSSxTQUFTLEdBQWtDLFFBQVEsQ0FBQztJQUUzRDs7T0FFRztJQUNJLFNBQVMsQ0FBYTtJQUU3Qjs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBZ0Y7SUFFNUY7Ozs7O09BS0c7SUFDSSxXQUFXLENBQTZDO0lBRS9EOztPQUVHO0lBQ0ksUUFBUSxDQUFVO0lBRXpCOztPQUVHO0lBQ0ksV0FBVyxHQUFZLEtBQUssQ0FBQztJQUVwQzs7OztPQUlHO0lBQ0ksVUFBVSxHQUFzQixDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBRTNEOzs7Ozs7O09BT0c7SUFDSSxlQUFlLENBQTBIO0lBRWhKOzs7Ozs7T0FNRztJQUNJLGdCQUFnQixDQUFpSDtJQUV4STs7T0FFRztJQUNJLFFBQVEsQ0FBMkY7SUFFMUc7Ozs7O09BS0c7SUFDSSxVQUFVLENBQWlGO0lBRWxHOztPQUVHO0lBQ0ksUUFBUSxDQUFPO0lBRXRCOztPQUVHO0lBQ0ksWUFBWSxDQUFrQztJQUVyRDs7Ozs7O09BTUc7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O0lBQ0ksSUFBSSxDQUE0RztJQUV2SDs7O09BR0c7SUFDSSxPQUFPLEdBQVksSUFBSSxDQUFDO0lBRS9COzs7Ozs7T0FNRztJQUNILFlBQW1CLElBQTRDO1FBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7Q0FFSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgRGF0ZUZpbHRlckZuLCBNYXREYXRlcGlja2VyIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXJcIjtcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vYmFzZS9pbnRlcmZhY2VzL2lnZW5lcmljLWZvcm0tYmFzZVwiO1xyXG5pbXBvcnQgeyBFbnVtTWV0YWRhdGEgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9lbnVtLW1ldGFkYXRhXCI7XHJcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL2ZpbHRlclwiO1xyXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvaWNvblwiO1xyXG5pbXBvcnQgeyBTdWZmaXhCdXR0b24gfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9zdWZmaXgtYnV0dG9uXCI7XHJcbmltcG9ydCB7IEZvcm1GaWVsZFR5cGUgfSBmcm9tIFwiLi4vZW51bXMvZm9ybS1maWVsZC10eXBlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRm9ybUZpZWxkRGVmaW5pdGlvbjxURW50aXR5ID0gYW55LCBUUHJvcGVydHkgPSBhbnk+IHtcclxuICAgIC8qKlxyXG4gICAgICogQ1NTIGNsYXNzIGFwcGxpZWQgdG8gYXV0b2NvbXBsZXRlIGZ1bmN0aW9uYWxpdHkgZm9yIHN0eWxpbmcgcHVycG9zZXMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhdXRvY29tcGxldGVDc3NDbGFzczogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZW1wbGF0ZSBmdW5jdGlvbiBmb3IgcmVuZGVyaW5nIHRoZSBhdXRvY29tcGxldGUgc3VnZ2VzdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgcHJvcGVydHkgdmFsdWUgZm9yIGF1dG9jb21wbGV0ZS5cclxuICAgICAqIEBwYXJhbSB5IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqIEByZXR1cm5zIFRoZSByZW5kZXJlZCBhdXRvY29tcGxldGUgdGVtcGxhdGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhdXRvY29tcGxldGVUZW1wbGF0ZT86ICh4OiBUUHJvcGVydHksIHk/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZhdWx0IHRleHQgdG8gZGlzcGxheSBmb3IgYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlVGV4dDogc3RyaW5nID0gJ25hbWUnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gZXhlY3V0ZWQgd2hlbiB0aGUgZmllbGQgdmFsdWUgY2hhbmdlcy5cclxuICAgICAqIEBwYXJhbSB4IFRoZSB1cGRhdGVkIHByb3BlcnR5IHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHkgVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hhbmdlPzogKHg6IFRQcm9wZXJ0eSwgeT86IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEtleWRvd24gZXZlbnQgaGFuZGxlciwgYWxsb3dpbmcgZm9yIGN1c3RvbSBiZWhhdmlvciB3aGVuIGEga2V5IGlzIHByZXNzZWQgd2l0aGluIHRoZSBmaWVsZC5cclxuICAgICAqIENhbiBiZSB1c2VkIGZvciBmb3JtIHZhbGlkYXRpb24sIGZvcm1hdHRpbmcsIG9yIG90aGVyIGN1c3RvbSBpbnRlcmFjdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0gZSBUaGUga2V5ZG93biBldmVudCB0cmlnZ2VyZWQgb24gdGhlIGZvcm0gZmllbGQuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgZW50aXR5IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZvcm0gZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhlIGZvcm0gZmllbGQgZGVmaW5pdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50IGNvbnRleHQsIHByb3ZpZGluZyBhZGRpdGlvbmFsIGRhdGEgYW5kIG1ldGhvZHMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBrZXlkb3duPzogKGU6IEtleWJvYXJkRXZlbnQsIHg/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiB2b2lkO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVtcGxhdGUgZnVuY3Rpb24gZm9yIGRpc3BsYXlpbmcgY2hpcCBlbGVtZW50cyByZWxhdGVkIHRvIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSBjaGlwLlxyXG4gICAgICogQHBhcmFtIHkgVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICogQHJldHVybnMgVGhlIHJlbmRlcmVkIGNoaXAgdGVtcGxhdGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGlwVGVtcGxhdGU/OiAoeDogVFByb3BlcnR5LCB5PzogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVmYXVsdCB0ZXh0IGRpc3BsYXllZCBpbiBjaGlwIGVsZW1lbnRzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hpcFRleHQ6IHN0cmluZyA9ICduYW1lJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbG9yIHRoZW1lIGZvciB0aGUgY2hpcCwgZGV0ZXJtaW5lZCBmcm9tIHRoZSBwcmVkZWZpbmVkIHBhbGV0dGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjaGlwQ29sb3I6ICdwcmltYXJ5JyB8ICdhY2NlbnQnIHwgJ3dhcm4nID0gJ2FjY2VudCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY2xhc3MgdHlwZSB0byBpbnN0YW50aWF0ZSBmb3IgdGhpcyBmaWVsZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsYXNzVHlwZT86IFR5cGU8YW55PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIHdoZW4gdGhlIGZpZWxkIGlzIGNsZWFyZWQuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjbGVhcj86ICh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiBmb3IgY29tcGFyaW5nIHR3byBwcm9wZXJ0eSB2YWx1ZXMuXHJcbiAgICAgKiBAcGFyYW0gbzEgVGhlIGZpcnN0IHByb3BlcnR5IHZhbHVlLlxyXG4gICAgICogQHBhcmFtIG8yIFRoZSBzZWNvbmQgcHJvcGVydHkgdmFsdWUuXHJcbiAgICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbXBhcmVXaXRoPzogKG8xOiBUUHJvcGVydHksIG8yOiBUUHJvcGVydHkpID0+IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDU1MgY2xhc3MgYXBwbGllZCBmb3IgZ2VuZXJhbCBzdHlsaW5nIG9mIHRoZSBmaWVsZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNzc0NsYXNzPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpZWxkIHZhbHVlIGNhbiBiZSBjdXN0b21pemVkIGJ5IHRoZSB1c2VyLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY3VzdG9tVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHRvIGZpbHRlciBzZWxlY3RhYmxlIGRhdGVzLlxyXG4gICAgICogQHBhcmFtIGRhdGUgVGhlIGRhdGUgdG8gZXZhbHVhdGUuXHJcbiAgICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgZGF0ZSBpcyBzZWxlY3RhYmxlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGF0ZUZpbHRlcjogRGF0ZUZpbHRlckZuPGFueT4gPSAoZGF0ZTogYW55KSA9PiB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGZpbHRlciBkYXRlcyBiYXNlZCBvbiBhZGRpdGlvbmFsIGNvbmRpdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0gZCBUaGUgZGF0ZSB0byBldmFsdWF0ZS5cclxuICAgICAqIEBwYXJhbSB5IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZGF0ZSBmaWx0ZXIgZnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkYXRlRmlsdGVyQXN5bmM/OiAoZDogRGF0ZSB8IGFueSwgeT86IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IE9ic2VydmFibGU8RGF0ZUZpbHRlckZuPGFueT4+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIHRoZSBkYXRlIHBpY2tlciBpcyBvcGVuZWQuXHJcbiAgICAgKiBAcGFyYW0gZGF0ZVBpY2tlciBUaGUgTWF0RGF0ZXBpY2tlciBjb21wb25lbnQgaW5zdGFuY2UuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkYXRlUGlja2VyT3BlbmVkPzogKGRhdGVQaWNrZXI6IE1hdERhdGVwaWNrZXI8YW55PiwgeT86IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuZHBvaW50IGZvciByZXRyaWV2aW5nIGRhdGEsIHdoaWNoIGNhbiBiZSBhIFVSTCBvciBhIGZ1bmN0aW9uIHJldHVybmluZyBkYXRhLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZW5kcG9pbnQ/OiAoKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGFueSkgfCBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiB0byBmaWx0ZXIgb3B0aW9ucyBiYXNlZCBvbiBlbnVtZXJhdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBlbnVtRmlsdGVyPzogKHk/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdHlwZSBvZiBlbnVtZXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaWVsZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGVudW1UeXBlPzogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIGVudW1lcmF0aW9uIHR5cGVzIGZvciBhZGRpdGlvbmFsIGNvbnRleHQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBlbnVtTWV0YWRhdGE/OiB7IFtrZXkgaW4gYW55XTogRW51bU1ldGFkYXRhIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciBkYXRhIHNob3VsZCBiZSBmZXRjaGVkIGJhc2VkIG9uIHNwZWNpZmljIGNvbmRpdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGRhdGEgZmV0Y2hpbmcgaXMgcmVxdWlyZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmZXRjaENvbmRpdGlvbjogKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJyYXkgb2YgZmllbGQgc2V0cyB0aGF0IG9yZ2FuaXplIHJlbGF0ZWQgZmllbGRzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmllbGRTZXRzPzogc3RyaW5nW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBbGxvd2VkIGZpbGUgZXh0ZW5zaW9ucyBmb3IgZmlsZSB1cGxvYWRzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmlsZUV4dGVuc2lvbnM/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZmlsZSBwYXRoIGZvciBzdG9yaW5nIHVwbG9hZGVkIGZpbGVzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmlsZVBhdGg/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGbGV4IGxheW91dCBwcm9wZXJ0eSBkZWZpbmluZyB0aGUgc3BhY2UgdGhlIGZpZWxkIG9jY3VwaWVzIGluIGEgZmxleCBjb250YWluZXIuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmbGV4PzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIGlmIHNlbGVjdGlvbiBvZiBhbiBvcHRpb24gaXMgbWFuZGF0b3J5IGZvciB0aGlzIGZpZWxkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZm9yY2VTZWxlY3Q/OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpZWxkIHNob3VsZCBiZSBmb2N1c2VkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgZm9ybSBpbml0aWFsaXplcy5cclxuICAgICAqIFRoaXMgY2FuIGJlIGVpdGhlciBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBib29sZWFuIGJhc2VkIG9uIHRoZSBlbnRpdHkgYW5kIGZvcm0gY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLCBhbGxvd2luZyBmb3IgYWRkaXRpb25hbCBjb250ZXh0LlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudCwgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgZm9ybSdzIG92ZXJhbGwgc3RhdGUuXHJcbiAgICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgZmllbGQgc2hvdWxkIGJlIGZvY3VzZWQgYXV0b21hdGljYWxseSAodHJ1ZSksIG9yIG5vdCAoZmFsc2UpLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZm9jdXM/OiAoKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGJvb2xlYW4pIHwgYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmaWVsZCBzaG91bGQgYXV0b21hdGljYWxseSBzZWxlY3QgaXRzIHRleHQgd2hlbiB0aGUgZm9ybSBpbml0aWFsaXplcy5cclxuICAgICAqIFRoaXMgY2FuIGJlIGVpdGhlciBhIGJvb2xlYW4gb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBib29sZWFuIGJhc2VkIG9uIHRoZSBlbnRpdHkgYW5kIGZvcm0gY29udGV4dC5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLCBhbGxvd2luZyBmb3IgYWRkaXRpb25hbCBjb250ZXh0LlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudCwgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgZm9ybSdzIG92ZXJhbGwgc3RhdGUuXHJcbiAgICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgZmllbGQncyB0ZXh0IHNob3VsZCBiZSBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5ICh0cnVlKSwgb3Igbm90IChmYWxzZSkuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZWxlY3RUZXh0PzogKCh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBib29sZWFuKSB8IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWFkZXIgdGV4dCBmb3IgZ3JvdXBpbmcgcmVsYXRlZCBmaWVsZHMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBncm91cEhlYWRlcjogc3RyaW5nID0gJGxvY2FsaXplYDpAQGRldGFpbHM6RGV0YWlsc2A7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbmFtZSBhc3NpZ25lZCB0byB0aGUgZ3JvdXAgb2YgZmllbGRzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JvdXBOYW1lPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIGhpZGRlbiBmcm9tIHZpZXcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoaWRkZW4/OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGZpZWxkIHNob3VsZCBiZSBoaWRkZW4gYmFzZWQgb24gc3BlY2lmaWMgY3JpdGVyaWEuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoaWRlPzogKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEhpbnQgdGV4dCBkaXNwbGF5ZWQgdG8gYXNzaXN0IHRoZSB1c2VyIGluIGZpbGxpbmcgb3V0IHRoZSBmaWVsZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhpbnQ/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRleCByZXByZXNlbnRpbmcgdGhlIHBvc2l0aW9uIG9mIHRoaXMgZmllbGQgd2l0aGluIGl0cyBwYXJlbnQgc3RydWN0dXJlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5kZXg/OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcGVjaWZpZXMgdGhlIHR5cGUgb2YgaW5wdXQgKGUuZy4sIHRleHQsIG51bWJlcikgZm9yIHRoaXMgZmllbGQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnB1dFR5cGU/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdXBsb2FkZWQgZmlsZSBpcyBhY2Nlc3NpYmxlIHRvIHRoZSBwdWJsaWMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc1B1YmxpY0ZpbGU/OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gZXhlY3V0ZWQgd2hlbiBhbiBpdGVtIGluIHRoZSBmaWVsZCBjaGFuZ2VzLlxyXG4gICAgICogQHBhcmFtIHggVGhlIHVwZGF0ZWQgcHJvcGVydHkgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpdGVtQ2hhbmdlPzogKHg6IFRQcm9wZXJ0eSwgeT86IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIHdoZW4gYW4gaXRlbSBpbiB0aGUgZmllbGQgaXMgc2VsZWN0ZWQuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgc2VsZWN0ZWQgcHJvcGVydHkgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpdGVtU2VsZWN0PzogKHg6IFRQcm9wZXJ0eSwgeT86IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExhYmVsIHRleHQgZm9yIHRoZSBmaWVsZCwgY2FuIGJlIGEgc3RhdGljIHN0cmluZyBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIGxhYmVsIGJhc2VkIG9uIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgbGFiZWwgdGV4dCBmb3IgdGhlIGZpZWxkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbGFiZWw/OiAoKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IHN0cmluZykgfCBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiBmb3IgbWFwcGluZyBpbnB1dCB2YWx1ZXMgZnJvbSBvbmUgZm9ybWF0IHRvIGFub3RoZXIuXHJcbiAgICAgKiBAcGFyYW0geCBBbiBhcnJheSBvZiB2YWx1ZXMgdG8gbWFwLlxyXG4gICAgICogQHJldHVybnMgVGhlIG1hcHBlZCB2YWx1ZXMuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtYXBwZXI/OiAoeDogYW55W10pID0+IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gcGVybWlzc2libGUgdmFsdWUgZm9yIHRoZSBmaWVsZCwgY2FuIGJlIGEgbnVtYmVyIG9yIGEgZGF0ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1heD86IG51bWJlciB8IERhdGU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIGhlaWdodCBmb3IgdGhlIGZpZWxkJ3MgZGlzcGxheSwgY2FuIGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICogQHJldHVybnMgVGhlIG1heGltdW0gaGVpZ2h0IGZvciB0aGUgZmllbGQncyBkaXNwbGF5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWF4SGVpZ2h0PzogKCh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBzdHJpbmcpIHwgc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBsZW5ndGggb2YgdGhlIGlucHV0LlxyXG4gICAgICogQ2FuIGJlIGEgbnVtYmVyIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgbnVtYmVyLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWF4TGVuZ3RoPzogKCh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBudW1iZXIpIHwgbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSB3aWR0aCBvZiB0aGUgaW5wdXQuXHJcbiAgICAgKiBDYW4gYmUgYSBzdHJpbmcgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBzdHJpbmcuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtYXhXaWR0aD86ICgoeDogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gc3RyaW5nKSB8IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gcGVybWlzc2libGUgdmFsdWUgZm9yIHRoZSBpbnB1dC5cclxuICAgICAqIENhbiBiZSBhIG51bWJlciBvciBhIGRhdGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtaW4/OiBudW1iZXIgfCBEYXRlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWluaW11bSBsZW5ndGggb2YgaW5wdXQgY2hhcmFjdGVycyBhbGxvd2VkLlxyXG4gICAgICogQ2FuIGJlIGEgbnVtYmVyIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgbnVtYmVyLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWluTGVuZ3RoPzogKCh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBudW1iZXIpIHwgbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpZWxkIHN1cHBvcnRzIG11bHRpbGluZSBpbnB1dC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG11bHRpbGluZT86IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBtdWx0aXBsZSBzZWxlY3Rpb25zIGFyZSBhbGxvd2VkLlxyXG4gICAgICogRGVmYXVsdHMgdG8gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtdWx0aXBsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhZyBpbmRpY2F0aW5nIGlmIG9ubHkgbnVtZXJpYyBpbnB1dCBpcyBwZXJtaXR0ZWQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBudW1iZXJzT25seT86IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZmlyc3Qgb3B0aW9uIGluIGEgc2VsZWN0aW9uIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdHMgdG8gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZWxlY3RGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmFtZSBvZiB0aGUgZmllbGQgZm9yIGlkZW50aWZpY2F0aW9uIGFuZCBkaXNwbGF5IHB1cnBvc2VzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmFtZT86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wdGlvbnMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uXHJcbiAgICAgKiBDYW4gYmUgYW4gYXJyYXkgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2Ygb3B0aW9ucy5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wdGlvbnM/OiAoKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IHsgaWQ6IGFueSwgbmFtZTogc3RyaW5nIH1bXSkgfCB7IGlkOiBhbnksIG5hbWU6IHN0cmluZyB9W107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhIGRlZmF1bHQgb3B0aW9uIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlZmF1bHRPcHRpb24/OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIGZ1bmN0aW9uIGZvciByZW5kZXJpbmcgb3B0aW9ucyBpbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGN1cnJlbnQgcHJvcGVydHkgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcHRpb25UZW1wbGF0ZT86ICh4OiBUUHJvcGVydHksIHk/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSBuYW1lIGluIHRoZSBvcHRpb24gb2JqZWN0IGZvciBkaXNwbGF5aW5nIHRleHQuXHJcbiAgICAgKiBVc2VkIHRvIHNwZWNpZnkgd2hpY2ggcHJvcGVydHkgc2hvd3MgYXMgdGhlIG9wdGlvbidzIHRleHQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcHRpb25UZXh0UHJvcGVydHk6IHN0cmluZyA9ICduYW1lJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IG5hbWUgaW4gdGhlIG9wdGlvbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB1bmlxdWUgdmFsdWUgZm9yIGVhY2ggb3B0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3B0aW9uVmFsdWVQcm9wZXJ0eTogc3RyaW5nID0gJ2lkJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IG5hbWUgaW4gdGhlIG9wdGlvbiBvYmplY3QgZm9yIHRoZSBNYXRlcmlhbCBpY29uLlxyXG4gICAgICogVXNlZCBmb3IgZGlzcGxheWluZyBpY29ucyBhbG9uZ3NpZGUgb3B0aW9ucy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wdGlvbk1hdEljb25Qcm9wZXJ0eT86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgaWNvbiBiYXNlZCBvbiBwcm92aWRlZCBwYXJhbWV0ZXJzLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGN1cnJlbnQgcHJvcGVydHkgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcHRpb25JY29uPzogKHg6IFRQcm9wZXJ0eSwgeT86IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IEljb248VEVudGl0eSwgYW55PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IG5hbWUgaW4gdGhlIG9wdGlvbiBvYmplY3QgZm9yIGRpc3BsYXlpbmcgYW4gU1ZHIGljb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcHRpb25TdmdJY29uUHJvcGVydHk/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDdXN0b20gZm9udCBzZXQgdXNlZCBmb3IgaWNvbnMgaW4gdGhlIG9wdGlvbnMuXHJcbiAgICAgKiBEZWZhdWx0cyB0byAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcHRpb25JY29uRm9udFNldD86IHN0cmluZyA9ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcmFtZXRlcnMgZm9yIGRhdGEgcmV0cmlldmFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkLlxyXG4gICAgICogQ2FuIGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uIHJldHVybmluZyBhbiBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwYXJhbXM/OiAoKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGFueSkgfCB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIGZvciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gICAgICogQ2FuIGJlIGEgc3RyaW5nLCBSZWdFeHAsIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RyaW5nIG9yIFJlZ0V4cC5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBhdHRlcm4/OiAoKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IFJlZ0V4cCB8IHN0cmluZykgfCBSZWdFeHAgfCBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9qZWN0aW9uIHNwZWNpZmljYXRpb24gZm9yIGRhdGEgcmV0cmlldmFsLlxyXG4gICAgICogQ2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwcm9qZWN0aW9uOiBzdHJpbmcgfCBzdHJpbmdbXSA9ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWVsZCBpcyByZWFkb25seS5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5PzogKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlIGZpZWxkIGlzIHJlcXVpcmVkLlxyXG4gICAgICogQ2FuIHJldHVybiBhIGJvb2xlYW4gdmFsdWUgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBib29sZWFuLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVxdWlyZWQ/OiAoKHg/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBib29sZWFuIHwgYm9vbGVhbik7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm93IG51bWJlciBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5IHBvc2l0aW9uIG9mIHRoZSBmaWVsZC5cclxuICAgICAqIERlZmF1bHRzIHRvIDEuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByb3c6IG51bWJlciA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHJvd3MgZm9yIG11bHRpLWxpbmUgaW5wdXQgZmllbGRzIChlLmcuLCB0ZXh0IGFyZWEpLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcm93cz86IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmF1bHQgZmllbGQgdXNlZCBmb3Igc2VhcmNoaW5nLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VhcmNoRmllbGQ6IHN0cmluZyA9ICdzZWFyY2gnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGlzdCBvZiBmaWVsZHMgdXRpbGl6ZWQgZm9yIHNlYXJjaCBmdW5jdGlvbmFsaXR5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VhcmNoRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJyYXkgb2YgZmlsdGVyIG9iamVjdHMsIGVhY2ggZGVmaW5lZCBieSBhIGdsdWUgb3BlcmF0b3IgYW5kIGFzc29jaWF0ZWQgZmllbGRzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmlsdGVycz86IEZpbHRlcltdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZC5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNlbGVjdD86ICh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcnJheSBvZiBzdWZmaXggYnV0dG9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3VmZml4QnV0dG9uczogU3VmZml4QnV0dG9uPFRQcm9wZXJ0eSwgSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5Pj5bXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ1NTIGNsYXNzIGFwcGxpZWQgdG8gdHJpZ2dlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRyaWdnZXJDc3NDbGFzcz86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBtYXBwaW5nIHRyaWdnZXIgdmFsdWVzLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGN1cnJlbnQgcHJvcGVydHkgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0cmlnZ2VyTWFwcGVyPzogKHg6IFRQcm9wZXJ0eSwgeT86IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vZGUgb2YgdGhlIHRyaWdnZXIgKGUuZy4sIGNoaXApLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdHJpZ2dlck1vZGU/OiAnY2hpcCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZW1wbGF0ZSBmdW5jdGlvbiBmb3IgcmVuZGVyaW5nIHRoZSB0cmlnZ2VyLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGN1cnJlbnQgcHJvcGVydHkgdmFsdWUocykuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0cmlnZ2VyVGVtcGxhdGU/OiAoeDogVFByb3BlcnR5W10gfCBUUHJvcGVydHksIHk/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgdGhlIGZpZWxkLlxyXG4gICAgICogQ2FuIGJlIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgRm9ybUZpZWxkVHlwZSBvciBhIGRpcmVjdCBGb3JtRmllbGRUeXBlIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdHlwZT86ICgoeDogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gRm9ybUZpZWxkVHlwZSkgfCBGb3JtRmllbGRUeXBlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIHdyYXBwZWQuXHJcbiAgICAgKiBEZWZhdWx0cyB0byB0cnVlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd3JhcHBlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIEZvcm1GaWVsZERlZmluaXRpb24gY2xhc3MuXHJcbiAgICAgKiBAcGFyYW0gaW5pdCBPcHRpb25hbCBpbml0aWFsIHZhbHVlcyBmb3IgcHJvcGVydGllcyBpbiBGb3JtRmllbGREZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIGluaXQueCBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gaW5pdC5mIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGluaXQuY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaW5pdD86IFBhcnRpYWw8Rm9ybUZpZWxkRGVmaW5pdGlvbjxURW50aXR5Pj4pIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xyXG4gICAgfVxyXG5cclxufSJdfQ==
468
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1kZWZpbml0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybXMvbW9kZWxzL2Zvcm0tZmllbGQtZGVmaW5pdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxNQUFNLE9BQU8sbUJBQW1CO0lBQzVCOztPQUVHO0lBQ0ksb0JBQW9CLEdBQVcsRUFBRSxDQUFDO0lBRXpDOzs7Ozs7O09BT0c7SUFDSSxvQkFBb0IsQ0FBK0Y7SUFFMUg7O09BRUc7SUFDSSxnQkFBZ0IsR0FBVyxNQUFNLENBQUM7SUFFekM7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUErRjtJQUU1Rzs7Ozs7OztPQU9HO0lBQ0ksT0FBTyxDQUFvRztJQUVsSDs7Ozs7OztPQU9HO0lBQ0ksWUFBWSxDQUErRjtJQUVsSDs7T0FFRztJQUNJLFFBQVEsR0FBVyxNQUFNLENBQUM7SUFFakM7O09BRUc7SUFDSSxTQUFTLEdBQWtDLFFBQVEsQ0FBQztJQUUzRDs7T0FFRztJQUNJLFNBQVMsQ0FBYTtJQUU3Qjs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBZ0Y7SUFFNUY7Ozs7O09BS0c7SUFDSSxXQUFXLENBQTZDO0lBRS9EOztPQUVHO0lBQ0ksUUFBUSxDQUFVO0lBRXpCOztPQUVHO0lBQ0ksV0FBVyxHQUFZLEtBQUssQ0FBQztJQUVwQzs7OztPQUlHO0lBQ0ksVUFBVSxHQUFzQixDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBRTNEOzs7Ozs7O09BT0c7SUFDSSxlQUFlLENBQTBIO0lBRWhKOzs7Ozs7T0FNRztJQUNJLGdCQUFnQixDQUFpSDtJQUV4STs7T0FFRztJQUNJLFFBQVEsQ0FBMkY7SUFFMUc7Ozs7O09BS0c7SUFDSSxVQUFVLENBQWlGO0lBRWxHOztPQUVHO0lBQ0ksUUFBUSxDQUFPO0lBRXRCOztPQUVHO0lBQ0ksWUFBWSxDQUFrQztJQUVyRDs7Ozs7O09BTUc7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SSxlQUFlLENBQTZHO0lBRW5JOzs7Ozs7T0FNRztJQUNJLElBQUksQ0FBNEc7SUFFdkg7OztPQUdHO0lBQ0ksT0FBTyxHQUFZLElBQUksQ0FBQztJQUUvQjs7Ozs7O09BTUc7SUFDSCxZQUFtQixJQUE0QztRQUMzRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBRUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IERhdGVGaWx0ZXJGbiwgTWF0RGF0ZXBpY2tlciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2Jhc2UvaW50ZXJmYWNlcy9pZ2VuZXJpYy1mb3JtLWJhc2VcIjtcclxuaW1wb3J0IHsgRW51bU1ldGFkYXRhIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvZW51bS1tZXRhZGF0YVwiO1xyXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9maWx0ZXJcIjtcclxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL2ljb25cIjtcclxuaW1wb3J0IHsgU3VmZml4QnV0dG9uIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvc3VmZml4LWJ1dHRvblwiO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRUeXBlIH0gZnJvbSBcIi4uL2VudW1zL2Zvcm0tZmllbGQtdHlwZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEZvcm1GaWVsZERlZmluaXRpb248VEVudGl0eSA9IGFueSwgVFByb3BlcnR5ID0gYW55PiB7XHJcbiAgICAvKipcclxuICAgICAqIENTUyBjbGFzcyBhcHBsaWVkIHRvIGF1dG9jb21wbGV0ZSBmdW5jdGlvbmFsaXR5IGZvciBzdHlsaW5nIHB1cnBvc2VzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlQ3NzQ2xhc3M6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVtcGxhdGUgZnVuY3Rpb24gZm9yIHJlbmRlcmluZyB0aGUgYXV0b2NvbXBsZXRlIHN1Z2dlc3Rpb25zLlxyXG4gICAgICogQHBhcmFtIHggVGhlIHByb3BlcnR5IHZhbHVlIGZvciBhdXRvY29tcGxldGUuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKiBAcmV0dXJucyBUaGUgcmVuZGVyZWQgYXV0b2NvbXBsZXRlIHRlbXBsYXRlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXV0b2NvbXBsZXRlVGVtcGxhdGU/OiAoeDogVFByb3BlcnR5LCB5PzogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVmYXVsdCB0ZXh0IHRvIGRpc3BsYXkgZm9yIGF1dG9jb21wbGV0ZSBzdWdnZXN0aW9ucy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGF1dG9jb21wbGV0ZVRleHQ6IHN0cmluZyA9ICduYW1lJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIHdoZW4gdGhlIGZpZWxkIHZhbHVlIGNoYW5nZXMuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgdXBkYXRlZCBwcm9wZXJ0eSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSB5IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoYW5nZT86ICh4OiBUUHJvcGVydHksIHk/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBLZXlkb3duIGV2ZW50IGhhbmRsZXIsIGFsbG93aW5nIGZvciBjdXN0b20gYmVoYXZpb3Igd2hlbiBhIGtleSBpcyBwcmVzc2VkIHdpdGhpbiB0aGUgZmllbGQuXHJcbiAgICAgKiBDYW4gYmUgdXNlZCBmb3IgZm9ybSB2YWxpZGF0aW9uLCBmb3JtYXR0aW5nLCBvciBvdGhlciBjdXN0b20gaW50ZXJhY3Rpb25zLlxyXG4gICAgICogQHBhcmFtIGUgVGhlIGtleWRvd24gZXZlbnQgdHJpZ2dlcmVkIG9uIHRoZSBmb3JtIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBmb3JtIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoZSBmb3JtIGZpZWxkIGRlZmluaXRpb25zLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudCBjb250ZXh0LCBwcm92aWRpbmcgYWRkaXRpb25hbCBkYXRhIGFuZCBtZXRob2RzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMga2V5ZG93bj86IChlOiBLZXlib2FyZEV2ZW50LCB4PzogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gdm9pZDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIGZ1bmN0aW9uIGZvciBkaXNwbGF5aW5nIGNoaXAgZWxlbWVudHMgcmVsYXRlZCB0byB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIHggVGhlIHByb3BlcnR5IHZhbHVlIGZvciB0aGUgY2hpcC5cclxuICAgICAqIEBwYXJhbSB5IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqIEByZXR1cm5zIFRoZSByZW5kZXJlZCBjaGlwIHRlbXBsYXRlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hpcFRlbXBsYXRlPzogKHg6IFRQcm9wZXJ0eSwgeT86IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmF1bHQgdGV4dCBkaXNwbGF5ZWQgaW4gY2hpcCBlbGVtZW50cy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNoaXBUZXh0OiBzdHJpbmcgPSAnbmFtZSc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb2xvciB0aGVtZSBmb3IgdGhlIGNoaXAsIGRldGVybWluZWQgZnJvbSB0aGUgcHJlZGVmaW5lZCBwYWxldHRlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2hpcENvbG9yOiAncHJpbWFyeScgfCAnYWNjZW50JyB8ICd3YXJuJyA9ICdhY2NlbnQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNsYXNzIHR5cGUgdG8gaW5zdGFudGlhdGUgZm9yIHRoaXMgZmllbGQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjbGFzc1R5cGU/OiBUeXBlPGFueT47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCB3aGVuIHRoZSBmaWVsZCBpcyBjbGVhcmVkLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXI/OiAoeDogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb24gZm9yIGNvbXBhcmluZyB0d28gcHJvcGVydHkgdmFsdWVzLlxyXG4gICAgICogQHBhcmFtIG8xIFRoZSBmaXJzdCBwcm9wZXJ0eSB2YWx1ZS5cclxuICAgICAqIEBwYXJhbSBvMiBUaGUgc2Vjb25kIHByb3BlcnR5IHZhbHVlLlxyXG4gICAgICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHZhbHVlcyBhcmUgZXF1YWwuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb21wYXJlV2l0aD86IChvMTogVFByb3BlcnR5LCBvMjogVFByb3BlcnR5KSA9PiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ1NTIGNsYXNzIGFwcGxpZWQgZm9yIGdlbmVyYWwgc3R5bGluZyBvZiB0aGUgZmllbGQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjc3NDbGFzcz86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmaWVsZCB2YWx1ZSBjYW4gYmUgY3VzdG9taXplZCBieSB0aGUgdXNlci5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGN1c3RvbVZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiB0byBmaWx0ZXIgc2VsZWN0YWJsZSBkYXRlcy5cclxuICAgICAqIEBwYXJhbSBkYXRlIFRoZSBkYXRlIHRvIGV2YWx1YXRlLlxyXG4gICAgICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGRhdGUgaXMgc2VsZWN0YWJsZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRhdGVGaWx0ZXI6IERhdGVGaWx0ZXJGbjxhbnk+ID0gKGRhdGU6IGFueSkgPT4gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBmaWx0ZXIgZGF0ZXMgYmFzZWQgb24gYWRkaXRpb25hbCBjb25kaXRpb25zLlxyXG4gICAgICogQHBhcmFtIGQgVGhlIGRhdGUgdG8gZXZhbHVhdGUuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGRhdGUgZmlsdGVyIGZ1bmN0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGF0ZUZpbHRlckFzeW5jPzogKGQ6IERhdGUgfCBhbnksIHk/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBPYnNlcnZhYmxlPERhdGVGaWx0ZXJGbjxhbnk+PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgd2hlbiB0aGUgZGF0ZSBwaWNrZXIgaXMgb3BlbmVkLlxyXG4gICAgICogQHBhcmFtIGRhdGVQaWNrZXIgVGhlIE1hdERhdGVwaWNrZXIgY29tcG9uZW50IGluc3RhbmNlLlxyXG4gICAgICogQHBhcmFtIHkgVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGF0ZVBpY2tlck9wZW5lZD86IChkYXRlUGlja2VyOiBNYXREYXRlcGlja2VyPGFueT4sIHk/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmRwb2ludCBmb3IgcmV0cmlldmluZyBkYXRhLCB3aGljaCBjYW4gYmUgYSBVUkwgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgZGF0YS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGVuZHBvaW50PzogKCh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnkpIHwgc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb24gdG8gZmlsdGVyIG9wdGlvbnMgYmFzZWQgb24gZW51bWVyYXRpb25zLlxyXG4gICAgICogQHBhcmFtIHkgVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZW51bUZpbHRlcj86ICh5PzogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHR5cGUgb2YgZW51bWVyYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgZmllbGQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBlbnVtVHlwZT86IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGFkYXRhIGFzc29jaWF0ZWQgd2l0aCBlbnVtZXJhdGlvbiB0eXBlcyBmb3IgYWRkaXRpb25hbCBjb250ZXh0LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZW51bU1ldGFkYXRhPzogeyBba2V5IGluIGFueV06IEVudW1NZXRhZGF0YSB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgZGF0YSBzaG91bGQgYmUgZmV0Y2hlZCBiYXNlZCBvbiBzcGVjaWZpYyBjb25kaXRpb25zLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBkYXRhIGZldGNoaW5nIGlzIHJlcXVpcmVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmV0Y2hDb25kaXRpb246ICh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBib29sZWFuID0gKCkgPT4gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFycmF5IG9mIGZpZWxkIHNldHMgdGhhdCBvcmdhbml6ZSByZWxhdGVkIGZpZWxkcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpZWxkU2V0cz86IHN0cmluZ1tdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWxsb3dlZCBmaWxlIGV4dGVuc2lvbnMgZm9yIGZpbGUgdXBsb2Fkcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbGVFeHRlbnNpb25zPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGZpbGUgcGF0aCBmb3Igc3RvcmluZyB1cGxvYWRlZCBmaWxlcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbGVQYXRoPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxleCBsYXlvdXQgcHJvcGVydHkgZGVmaW5pbmcgdGhlIHNwYWNlIHRoZSBmaWVsZCBvY2N1cGllcyBpbiBhIGZsZXggY29udGFpbmVyLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmxleD86IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyBpZiBzZWxlY3Rpb24gb2YgYW4gb3B0aW9uIGlzIG1hbmRhdG9yeSBmb3IgdGhpcyBmaWVsZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZvcmNlU2VsZWN0PzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmaWVsZCBzaG91bGQgYmUgZm9jdXNlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGZvcm0gaW5pdGlhbGl6ZXMuXHJcbiAgICAgKiBUaGlzIGNhbiBiZSBlaXRoZXIgYSBib29sZWFuIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgYm9vbGVhbiBiYXNlZCBvbiB0aGUgZW50aXR5IGFuZCBmb3JtIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZCwgYWxsb3dpbmcgZm9yIGFkZGl0aW9uYWwgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQsIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGZvcm0ncyBvdmVyYWxsIHN0YXRlLlxyXG4gICAgICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGZpZWxkIHNob3VsZCBiZSBmb2N1c2VkIGF1dG9tYXRpY2FsbHkgKHRydWUpLCBvciBub3QgKGZhbHNlKS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZvY3VzPzogKCh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBib29sZWFuKSB8IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZmllbGQgc2hvdWxkIGF1dG9tYXRpY2FsbHkgc2VsZWN0IGl0cyB0ZXh0IHdoZW4gdGhlIGZvcm0gaW5pdGlhbGl6ZXMuXHJcbiAgICAgKiBUaGlzIGNhbiBiZSBlaXRoZXIgYSBib29sZWFuIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgYm9vbGVhbiBiYXNlZCBvbiB0aGUgZW50aXR5IGFuZCBmb3JtIGNvbnRleHQuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZCwgYWxsb3dpbmcgZm9yIGFkZGl0aW9uYWwgY29udGV4dC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQsIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGZvcm0ncyBvdmVyYWxsIHN0YXRlLlxyXG4gICAgICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIGZpZWxkJ3MgdGV4dCBzaG91bGQgYmUgc2VsZWN0ZWQgYXV0b21hdGljYWxseSAodHJ1ZSksIG9yIG5vdCAoZmFsc2UpLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VsZWN0VGV4dD86ICgoeDogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gYm9vbGVhbikgfCBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVhZGVyIHRleHQgZm9yIGdyb3VwaW5nIHJlbGF0ZWQgZmllbGRzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JvdXBIZWFkZXI6IHN0cmluZyA9ICRsb2NhbGl6ZWA6QEBkZXRhaWxzOkRldGFpbHNgO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG5hbWUgYXNzaWduZWQgdG8gdGhlIGdyb3VwIG9mIGZpZWxkcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdyb3VwTmFtZT86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSBmaWVsZCBpcyBoaWRkZW4gZnJvbSB2aWV3LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGlkZGVuPzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWVsZCBzaG91bGQgYmUgaGlkZGVuIGJhc2VkIG9uIHNwZWNpZmljIGNyaXRlcmlhLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGlkZT86ICh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIaW50IHRleHQgZGlzcGxheWVkIHRvIGFzc2lzdCB0aGUgdXNlciBpbiBmaWxsaW5nIG91dCB0aGUgZmllbGQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoaW50Pzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kZXggcmVwcmVzZW50aW5nIHRoZSBwb3NpdGlvbiBvZiB0aGlzIGZpZWxkIHdpdGhpbiBpdHMgcGFyZW50IHN0cnVjdHVyZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGluZGV4PzogbnVtYmVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIGlucHV0IChlLmcuLCB0ZXh0LCBudW1iZXIpIGZvciB0aGlzIGZpZWxkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5wdXRUeXBlPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHVwbG9hZGVkIGZpbGUgaXMgYWNjZXNzaWJsZSB0byB0aGUgcHVibGljLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNQdWJsaWNGaWxlPzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIHdoZW4gYW4gaXRlbSBpbiB0aGUgZmllbGQgY2hhbmdlcy5cclxuICAgICAqIEBwYXJhbSB4IFRoZSB1cGRhdGVkIHByb3BlcnR5IHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHkgVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXRlbUNoYW5nZT86ICh4OiBUUHJvcGVydHksIHk/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCB3aGVuIGFuIGl0ZW0gaW4gdGhlIGZpZWxkIGlzIHNlbGVjdGVkLlxyXG4gICAgICogQHBhcmFtIHggVGhlIHNlbGVjdGVkIHByb3BlcnR5IHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHkgVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXRlbVNlbGVjdD86ICh4OiBUUHJvcGVydHksIHk/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMYWJlbCB0ZXh0IGZvciB0aGUgZmllbGQsIGNhbiBiZSBhIHN0YXRpYyBzdHJpbmcgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBsYWJlbCBiYXNlZCBvbiBjb250ZXh0LlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICogQHJldHVybnMgVGhlIGxhYmVsIHRleHQgZm9yIHRoZSBmaWVsZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGxhYmVsPzogKCh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBzdHJpbmcpIHwgc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb24gZm9yIG1hcHBpbmcgaW5wdXQgdmFsdWVzIGZyb20gb25lIGZvcm1hdCB0byBhbm90aGVyLlxyXG4gICAgICogQHBhcmFtIHggQW4gYXJyYXkgb2YgdmFsdWVzIHRvIG1hcC5cclxuICAgICAqIEByZXR1cm5zIFRoZSBtYXBwZWQgdmFsdWVzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWFwcGVyPzogKHg6IGFueVtdKSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNYXhpbXVtIHBlcm1pc3NpYmxlIHZhbHVlIGZvciB0aGUgZmllbGQsIGNhbiBiZSBhIG51bWJlciBvciBhIGRhdGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtYXg/OiBudW1iZXIgfCBEYXRlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWF4aW11bSBoZWlnaHQgZm9yIHRoZSBmaWVsZCdzIGRpc3BsYXksIGNhbiBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHN0cmluZy5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqIEByZXR1cm5zIFRoZSBtYXhpbXVtIGhlaWdodCBmb3IgdGhlIGZpZWxkJ3MgZGlzcGxheS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1heEhlaWdodD86ICgoeDogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gc3RyaW5nKSB8IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gbGVuZ3RoIG9mIHRoZSBpbnB1dC5cclxuICAgICAqIENhbiBiZSBhIG51bWJlciBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIG51bWJlci5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1heExlbmd0aD86ICgoeDogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gbnVtYmVyKSB8IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1heGltdW0gd2lkdGggb2YgdGhlIGlucHV0LlxyXG4gICAgICogQ2FuIGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc3RyaW5nLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWF4V2lkdGg/OiAoKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IHN0cmluZykgfCBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNaW5pbXVtIHBlcm1pc3NpYmxlIHZhbHVlIGZvciB0aGUgaW5wdXQuXHJcbiAgICAgKiBDYW4gYmUgYSBudW1iZXIgb3IgYSBkYXRlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbWluPzogbnVtYmVyIHwgRGF0ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pbmltdW0gbGVuZ3RoIG9mIGlucHV0IGNoYXJhY3RlcnMgYWxsb3dlZC5cclxuICAgICAqIENhbiBiZSBhIG51bWJlciBvciBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIG51bWJlci5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG1pbkxlbmd0aD86ICgoeDogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gbnVtYmVyKSB8IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmaWVsZCBzdXBwb3J0cyBtdWx0aWxpbmUgaW5wdXQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBtdWx0aWxpbmU/OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgbXVsdGlwbGUgc2VsZWN0aW9ucyBhcmUgYWxsb3dlZC5cclxuICAgICAqIERlZmF1bHRzIHRvIGZhbHNlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZsYWcgaW5kaWNhdGluZyBpZiBvbmx5IG51bWVyaWMgaW5wdXQgaXMgcGVybWl0dGVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbnVtYmVyc09ubHk/OiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmxhZyB0byBlbmFibGUgb3IgZGlzYWJsZSBkZWNpbWFsIHBhcnNpbmcgb24gaW5wdXQuXHJcbiAgICAgKiBJZiBzZXQgdG8gdHJ1ZSwgcGFzdGVkIHZhbHVlcyB3aWxsIGJlIG5vcm1hbGl6ZWQgdG8gYSB2YWxpZCBkZWNpbWFsIGZvcm1hdC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBhcnNlRGVjaW1hbD86IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZmlyc3Qgb3B0aW9uIGluIGEgc2VsZWN0aW9uIHNob3VsZCBiZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkLlxyXG4gICAgICogRGVmYXVsdHMgdG8gZmFsc2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZWxlY3RGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmFtZSBvZiB0aGUgZmllbGQgZm9yIGlkZW50aWZpY2F0aW9uIGFuZCBkaXNwbGF5IHB1cnBvc2VzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgbmFtZT86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9wdGlvbnMgYXZhaWxhYmxlIGZvciBzZWxlY3Rpb24uXHJcbiAgICAgKiBDYW4gYmUgYW4gYXJyYXkgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2Ygb3B0aW9ucy5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wdGlvbnM/OiAoKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IHsgaWQ6IGFueSwgbmFtZTogc3RyaW5nIH1bXSkgfCB7IGlkOiBhbnksIG5hbWU6IHN0cmluZyB9W107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBhIGRlZmF1bHQgb3B0aW9uIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGRlZmF1bHRPcHRpb24/OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbXBsYXRlIGZ1bmN0aW9uIGZvciByZW5kZXJpbmcgb3B0aW9ucyBpbiB0aGUgc2VsZWN0aW9uLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGN1cnJlbnQgcHJvcGVydHkgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcHRpb25UZW1wbGF0ZT86ICh4OiBUUHJvcGVydHksIHk/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9wZXJ0eSBuYW1lIGluIHRoZSBvcHRpb24gb2JqZWN0IGZvciBkaXNwbGF5aW5nIHRleHQuXHJcbiAgICAgKiBVc2VkIHRvIHNwZWNpZnkgd2hpY2ggcHJvcGVydHkgc2hvd3MgYXMgdGhlIG9wdGlvbidzIHRleHQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcHRpb25UZXh0UHJvcGVydHk6IHN0cmluZyA9ICduYW1lJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IG5hbWUgaW4gdGhlIG9wdGlvbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSB1bmlxdWUgdmFsdWUgZm9yIGVhY2ggb3B0aW9uLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3B0aW9uVmFsdWVQcm9wZXJ0eTogc3RyaW5nID0gJ2lkJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IG5hbWUgaW4gdGhlIG9wdGlvbiBvYmplY3QgZm9yIHRoZSBNYXRlcmlhbCBpY29uLlxyXG4gICAgICogVXNlZCBmb3IgZGlzcGxheWluZyBpY29ucyBhbG9uZ3NpZGUgb3B0aW9ucy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wdGlvbk1hdEljb25Qcm9wZXJ0eT86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgaWNvbiBiYXNlZCBvbiBwcm92aWRlZCBwYXJhbWV0ZXJzLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGN1cnJlbnQgcHJvcGVydHkgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcHRpb25JY29uPzogKHg6IFRQcm9wZXJ0eSwgeT86IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IEljb248VEVudGl0eSwgYW55PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3BlcnR5IG5hbWUgaW4gdGhlIG9wdGlvbiBvYmplY3QgZm9yIGRpc3BsYXlpbmcgYW4gU1ZHIGljb24uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcHRpb25TdmdJY29uUHJvcGVydHk/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDdXN0b20gZm9udCBzZXQgdXNlZCBmb3IgaWNvbnMgaW4gdGhlIG9wdGlvbnMuXHJcbiAgICAgKiBEZWZhdWx0cyB0byAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCcuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvcHRpb25JY29uRm9udFNldD86IHN0cmluZyA9ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcmFtZXRlcnMgZm9yIGRhdGEgcmV0cmlldmFsIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZpZWxkLlxyXG4gICAgICogQ2FuIGJlIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uIHJldHVybmluZyBhbiBvYmplY3QuXHJcbiAgICAgKiBAcGFyYW0geCBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwYXJhbXM/OiAoKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGFueSkgfCB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIGZvciBpbnB1dCB2YWxpZGF0aW9uLlxyXG4gICAgICogQ2FuIGJlIGEgc3RyaW5nLCBSZWdFeHAsIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RyaW5nIG9yIFJlZ0V4cC5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHBhdHRlcm4/OiAoKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IFJlZ0V4cCB8IHN0cmluZykgfCBSZWdFeHAgfCBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQcm9qZWN0aW9uIHNwZWNpZmljYXRpb24gZm9yIGRhdGEgcmV0cmlldmFsLlxyXG4gICAgICogQ2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBwcm9qZWN0aW9uOiBzdHJpbmcgfCBzdHJpbmdbXSA9ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZSBmaWVsZCBpcyByZWFkb25seS5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlYWRvbmx5PzogKHg6IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGJvb2xlYW47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgdGhlIGZpZWxkIGlzIHJlcXVpcmVkLlxyXG4gICAgICogQ2FuIHJldHVybiBhIGJvb2xlYW4gdmFsdWUgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBib29sZWFuLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVxdWlyZWQ/OiAoKHg/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBib29sZWFuIHwgYm9vbGVhbik7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm93IG51bWJlciBpbmRpY2F0aW5nIHRoZSBkaXNwbGF5IHBvc2l0aW9uIG9mIHRoZSBmaWVsZC5cclxuICAgICAqIERlZmF1bHRzIHRvIDEuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByb3c6IG51bWJlciA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbnVtYmVyIG9mIHJvd3MgZm9yIG11bHRpLWxpbmUgaW5wdXQgZmllbGRzIChlLmcuLCB0ZXh0IGFyZWEpLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcm93cz86IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmF1bHQgZmllbGQgdXNlZCBmb3Igc2VhcmNoaW5nLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VhcmNoRmllbGQ6IHN0cmluZyA9ICdzZWFyY2gnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGlzdCBvZiBmaWVsZHMgdXRpbGl6ZWQgZm9yIHNlYXJjaCBmdW5jdGlvbmFsaXR5LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VhcmNoRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXJyYXkgb2YgZmlsdGVyIG9iamVjdHMsIGVhY2ggZGVmaW5lZCBieSBhIGdsdWUgb3BlcmF0b3IgYW5kIGFzc29jaWF0ZWQgZmllbGRzLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmlsdGVycz86IEZpbHRlcltdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCB3aGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZC5cclxuICAgICAqIEBwYXJhbSB4IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBmIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBvZiB0aGUgZ2VuZXJpYyBmb3JtIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHNlbGVjdD86ICh4OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcnJheSBvZiBzdWZmaXggYnV0dG9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3VmZml4QnV0dG9uczogU3VmZml4QnV0dG9uPFRQcm9wZXJ0eSwgSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5Pj5bXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ1NTIGNsYXNzIGFwcGxpZWQgdG8gdHJpZ2dlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaWVsZC5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRyaWdnZXJDc3NDbGFzcz86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBtYXBwaW5nIHRyaWdnZXIgdmFsdWVzLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGN1cnJlbnQgcHJvcGVydHkgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0cmlnZ2VyTWFwcGVyPzogKHg6IFRQcm9wZXJ0eSwgeT86IFRFbnRpdHksIGY/OiBGb3JtR3JvdXAsIGN0eD86IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4pID0+IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vZGUgb2YgdGhlIHRyaWdnZXIgKGUuZy4sIGNoaXApLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdHJpZ2dlck1vZGU/OiAnY2hpcCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZW1wbGF0ZSBmdW5jdGlvbiBmb3IgcmVuZGVyaW5nIHRoZSB0cmlnZ2VyLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGN1cnJlbnQgcHJvcGVydHkgdmFsdWUocykuXHJcbiAgICAgKiBAcGFyYW0geSBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gZiBUaGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhpcyBmaWVsZC5cclxuICAgICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgb2YgdGhlIGdlbmVyaWMgZm9ybSBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0cmlnZ2VyVGVtcGxhdGU/OiAoeDogVFByb3BlcnR5W10gfCBUUHJvcGVydHksIHk/OiBURW50aXR5LCBmPzogRm9ybUdyb3VwLCBjdHg/OiBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+KSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgdGhlIGZpZWxkLlxyXG4gICAgICogQ2FuIGJlIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgRm9ybUZpZWxkVHlwZSBvciBhIGRpcmVjdCBGb3JtRmllbGRUeXBlIHZhbHVlLlxyXG4gICAgICogQHBhcmFtIHggVGhlIGVudGl0eSBhc3NvY2lhdGVkIHdpdGggdGhlIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGYgVGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoaXMgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdHlwZT86ICgoeDogVEVudGl0eSwgZj86IEZvcm1Hcm91cCwgY3R4PzogSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PikgPT4gRm9ybUZpZWxkVHlwZSkgfCBGb3JtRmllbGRUeXBlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIHdyYXBwZWQuXHJcbiAgICAgKiBEZWZhdWx0cyB0byB0cnVlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd3JhcHBlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIEZvcm1GaWVsZERlZmluaXRpb24gY2xhc3MuXHJcbiAgICAgKiBAcGFyYW0gaW5pdCBPcHRpb25hbCBpbml0aWFsIHZhbHVlcyBmb3IgcHJvcGVydGllcyBpbiBGb3JtRmllbGREZWZpbml0aW9uLlxyXG4gICAgICogQHBhcmFtIGluaXQueCBUaGUgZW50aXR5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZmllbGQuXHJcbiAgICAgKiBAcGFyYW0gaW5pdC5mIFRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGlzIGZpZWxkLlxyXG4gICAgICogQHBhcmFtIGluaXQuY3R4IFRoZSBjb250ZXh0IG9mIHRoZSBnZW5lcmljIGZvcm0gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY29uc3RydWN0b3IoaW5pdD86IFBhcnRpYWw8Rm9ybUZpZWxkRGVmaW5pdGlvbjxURW50aXR5Pj4pIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xyXG4gICAgfVxyXG5cclxufSJdfQ==
@@ -29,9 +29,9 @@ export class GenericService {
29
29
  * @param params Adds query params to the request
30
30
  * @param headers Adds headers to the request
31
31
  */
32
- get(id, params, headers, handleError = true) {
32
+ get(id, params, headers, handleError = true, observeResponse = false) {
33
33
  let request = this.http
34
- .get(`${this.endpoint}/${id}`, { params: Utils.toHttpParams(params), headers: this.toHttpHeaders(headers) });
34
+ .get(`${this.endpoint}/${id}`, { observe: (observeResponse ? 'response' : 'body'), params: Utils.toHttpParams(params), headers: this.toHttpHeaders(headers) });
35
35
  /* Handle error */
36
36
  if (handleError) {
37
37
  request = request.pipe(catchError(this.handleError('get')));
@@ -328,4 +328,4 @@ export class GenericService {
328
328
  console.debug(message);
329
329
  }
330
330
  }
331
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvaHR0cC9zZXJ2aWNlcy9nZW5lcmljLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsZUFBZSxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFdkUsTUFBTSxPQUFPLGNBQWM7SUFpQlA7SUFmbkI7O09BRUc7SUFDSSxJQUFJLENBQWE7SUFFeEI7O09BRUc7SUFDSSxJQUFJLEdBQTJCLElBQUksZUFBZSxDQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRW5FOzs7O09BSUc7SUFDSCxZQUFtQixRQUFpQjtRQUFqQixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksR0FBRyxDQUFJLEVBQW1CLEVBQUUsTUFBc0IsRUFBRSxPQUFnQixFQUFFLGNBQXVCLElBQUk7UUFDdkcsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUk7YUFDckIsR0FBRyxDQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVqSCxrQkFBa0I7UUFDbEIsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqQixPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksS0FBSyxDQUFDLE1BQWUsRUFBRSxJQUFvQixFQUFFLE9BQWdCLEVBQUUsY0FBdUIsSUFBSTtRQUNoRyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSTthQUNyQixHQUFHLENBQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV0SSxrQkFBa0I7UUFDbEIsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqQixPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFlLENBQUMsQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksT0FBTyxDQUFDLE1BQW1DLEVBQUUsSUFBb0IsRUFBRSxPQUF1QjtRQUNoRyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2QsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7YUFDaEssSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxRQUFRLENBQUMsTUFBc0IsRUFBRSxJQUFvQixFQUFFLE9BQWdCO1FBQzdFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUM7YUFDakMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxtQkFBbUI7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksTUFBTSxDQUFJLE1BQVcsRUFBRSxJQUFvQixFQUFFLFdBQW9CLEVBQUUsY0FBdUIsSUFBSTtRQUNwRyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSTthQUNyQixJQUFJLENBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFdEUsa0JBQWtCO1FBQ2xCLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxFQUFtQixFQUFFLE1BQVcsRUFBRSxJQUFvQixFQUFFLFdBQW9CLEVBQUUsY0FBdUIsSUFBSTtRQUN0SCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSTthQUNyQixHQUFHLENBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTNFLGtCQUFrQjtRQUNsQixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksS0FBSyxDQUFDLEVBQW1CLEVBQUUsSUFBUyxFQUFFLElBQW9CLEVBQUUsV0FBb0IsRUFBRSxjQUF1QixJQUFJO1FBQ25ILElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJO2FBQ3JCLEtBQUssQ0FBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFM0Usa0JBQWtCO1FBQ2xCLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxTQUFTLENBQUMsR0FBd0IsRUFBRSxJQUFTLEVBQUUsSUFBb0IsRUFBRSxXQUFvQixFQUFFLGNBQXVCLElBQUk7UUFDNUgsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUk7YUFDckIsS0FBSyxDQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFeEksa0JBQWtCO1FBQ2xCLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxFQUFtQixFQUFFLElBQW9CLEVBQUUsV0FBb0IsRUFBRSxjQUF1QixJQUFJO1FBQ3pHLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJO2FBQ3JCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVuRSxrQkFBa0I7UUFDbEIsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNqQixPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksVUFBVSxDQUFDLEdBQXdCLEVBQUUsSUFBb0IsRUFBRSxXQUFvQixFQUFFLGNBQXVCLElBQUk7UUFDbEgsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXRKLGtCQUFrQjtRQUNsQixJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksUUFBUSxDQUFDLElBQVksRUFBRSxNQUFlLEVBQUUsY0FBdUIsSUFBSTtRQUN6RSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSTthQUNyQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO2FBQzdJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEcsa0JBQWtCO1FBQ2xCLElBQUksV0FBVyxFQUFFLENBQUM7WUFDakIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksU0FBUyxDQUFDLEVBQVU7UUFDMUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLElBQVUsRUFBRSxPQUFlLFFBQVEsRUFBRSxTQUFlO1FBQ2pFLDhCQUE4QjtRQUM5QixNQUFNLFFBQVEsR0FBYSxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBRTFDLG1DQUFtQztRQUNuQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXpDLHFDQUFxQztRQUNyQyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2YsS0FBSyxJQUFJLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDM0IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDckMsQ0FBQztRQUNGLENBQUM7UUFFRCxzRUFBc0U7UUFDdEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFO1lBQzNGLGNBQWMsRUFBRSxJQUFJO1NBQ3BCLENBQUMsQ0FBQztRQUVIOzs7VUFHRTtRQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUFBLENBQUM7SUFFRixrQkFBa0I7SUFFbEI7Ozs7T0FJRztJQUNPLFVBQVUsQ0FBQyxJQUFTO1FBQzdCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNYLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2FBQ3JDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNuRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBLENBQUMsQ0FBQyxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLGFBQWEsQ0FBQyxJQUFvQjtRQUMzQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWCxPQUFPLElBQUksV0FBVyxFQUFFLENBQUM7UUFDMUIsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQzthQUNyQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBRSxJQUFZLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFLLElBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDckUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUcsSUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRDs7O09BR0c7SUFDTyxzQkFBc0IsQ0FBQyxPQUFvQjtRQUNwRCxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDckQsSUFBSSxXQUFXLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzdELElBQUksT0FBTyxHQUFHLHdDQUF3QyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6RSxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEMsQ0FBQztRQUNGLENBQUM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNYLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLFdBQVcsQ0FBQyxTQUFTLEdBQUcsV0FBVztRQUM1QyxPQUFPLENBQUMsS0FBVSxFQUFtQixFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN2RCxJQUFJLEtBQUssQ0FBQyxLQUFLLFlBQVksV0FBVyxFQUFFLENBQUM7Z0JBQ3hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsS0FBSyxDQUFDLE1BQU0sZUFBZSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUM7WUFDOUksT0FBTyxHQUFHLFNBQVMsWUFBWSxPQUFPLEVBQUUsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLGVBQWUsQ0FBQyxLQUFxQixFQUFFLElBQVU7UUFDMUQsUUFBUSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDcEIsb0JBQW9CO1lBQ3BCLEtBQUssYUFBYSxDQUFDLElBQUk7Z0JBQ3RCLE9BQU8sbUJBQW1CLElBQUksQ0FBQyxJQUFJLGFBQWEsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO1lBRTlELGtDQUFrQztZQUNsQyxLQUFLLGFBQWEsQ0FBQyxjQUFjO2dCQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN6RSxPQUFPLFNBQVMsSUFBSSxDQUFDLElBQUksUUFBUSxXQUFXLGFBQWEsQ0FBQztZQUUzRCxzQkFBc0I7WUFDdEIsS0FBSyxhQUFhLENBQUMsUUFBUTtnQkFDMUIsT0FBTyxTQUFTLElBQUksQ0FBQyxJQUFJLDRCQUE0QixDQUFDO1lBRXZEO2dCQUNDLE9BQU8sU0FBUyxJQUFJLENBQUMsSUFBSSw4QkFBOEIsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ3ZFLENBQUM7SUFDRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLFlBQVksQ0FBQyxPQUFlO1FBQ3JDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEIsQ0FBQztDQUdEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEV2ZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcywgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy91dGlscyc7XHJcbmltcG9ydCB7IFNlcnZpY2VMb2NhdG9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2VzL3NlcnZpY2UtbG9jYXRvcic7XHJcblxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY1NlcnZpY2U8VCBleHRlbmRzIGFueT4ge1xyXG5cclxuXHQvKipcclxuXHQgKiBIdHRwIGNsaWVudFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBodHRwOiBIdHRwQ2xpZW50O1xyXG5cclxuXHQvKipcclxuXHQgKiBMaXN0IG9mIGVudGl0aWVzXHJcblx0ICovXHJcblx0cHVibGljIGxpc3Q6IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDxhbnk+W10pO1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvclxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBodHRwIFxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBlbmRwb2ludD86IHN0cmluZykge1xyXG5cdFx0dGhpcy5odHRwID0gU2VydmljZUxvY2F0b3IuZ2V0U2VydmljZShIdHRwQ2xpZW50KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgYSBzaW5nbGUgZW50aXR5XHJcblx0ICogXHJcblx0ICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgZW50aXR5IG9yIHJlbGF0aXZlIHBhdGhcclxuXHQgKiBAcGFyYW0gcGFyYW1zIEFkZHMgcXVlcnkgcGFyYW1zIHRvIHRoZSByZXF1ZXN0XHJcblx0ICogQHBhcmFtIGhlYWRlcnMgQWRkcyBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XHJcblx0ICovXHJcblx0cHVibGljIGdldDxUPihpZDogc3RyaW5nIHwgbnVtYmVyLCBwYXJhbXM/OiBPYmplY3QgfCBudWxsLCBoZWFkZXJzPzogT2JqZWN0LCBoYW5kbGVFcnJvcjogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0bGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBcclxuXHRcdFx0LmdldDxUPihgJHt0aGlzLmVuZHBvaW50fS8ke2lkfWAsIHsgcGFyYW1zOiBVdGlscy50b0h0dHBQYXJhbXMocGFyYW1zKSwgaGVhZGVyczogdGhpcy50b0h0dHBIZWFkZXJzKGhlYWRlcnMpIH0pO1xyXG5cclxuXHRcdC8qIEhhbmRsZSBlcnJvciAqL1xyXG5cdFx0aWYgKGhhbmRsZUVycm9yKSB7XHJcblx0XHRcdHJlcXVlc3QgPSByZXF1ZXN0LnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKCdnZXQnKSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ291bnRzIGVudGl0aWVzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHBhcmFtcyBBZGRzIHF1ZXJ5IHBhcmFtcyB0byB0aGUgcmVxdWVzdFxyXG5cdCAqIEBwYXJhbSBwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byB0aGUgYWN0aW9uXHJcblx0ICogQHBhcmFtIGhlYWRlcnMgQWRkcyBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XHQgXHJcblx0ICogQHBhcmFtIGhhbmRsZUVycm9yIEhhbmRsZSBlcnJvcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgY291bnQocGFyYW1zPzogT2JqZWN0LCBwYXRoPzogc3RyaW5nIHwgbnVsbCwgaGVhZGVycz86IE9iamVjdCwgaGFuZGxlRXJyb3I6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuXHRcdGxldCByZXF1ZXN0ID0gdGhpcy5odHRwXHJcblx0XHRcdC5nZXQ8YW55PihgJHt0aGlzLmVuZHBvaW50fSR7cGF0aCA/IHBhdGggOiAnL2NvdW50J31gLCB7IHBhcmFtczogVXRpbHMudG9IdHRwUGFyYW1zKHBhcmFtcyksIGhlYWRlcnM6IHRoaXMudG9IdHRwSGVhZGVycyhoZWFkZXJzKSB9KTtcclxuXHJcblx0XHQvKiBIYW5kbGUgZXJyb3IgKi9cclxuXHRcdGlmIChoYW5kbGVFcnJvcikge1xyXG5cdFx0XHRyZXF1ZXN0ID0gcmVxdWVzdC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcignY291bnQnKSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0LnBpcGUobWFwKHggPT4geyByZXR1cm4gPG51bWJlcj54LnZhbHVlIH0pKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgYSBsaXN0IG9mIGVudGl0aWVzLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBwYXJhbXMgT3B0aW9uYWwuIEFkZHMgcXVlcnkgcGFyYW1zIHRvIHRoZSByZXF1ZXN0LlxyXG5cdCAqIEBwYXJhbSBwYXRoIE9wdGlvbmFsLiBBIHJlbGF0aXZlIHBhdGggdG8gdGhlIGFjdGlvbi5cclxuXHQgKiBAcGFyYW0gaGVhZGVycyBPcHRpb25hbC4gQWRkcyBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0LlxyXG5cdCAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgd2l0aCB0aGUgcmVzcG9uc2UgZGF0YS5cclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0TGlzdChwYXJhbXM/OiBIdHRwUGFyYW1zIHwgT2JqZWN0IHwgbnVsbCwgcGF0aD86IHN0cmluZyB8IG51bGwsIGhlYWRlcnM/OiBPYmplY3QgfCBudWxsKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmh0dHBcclxuXHRcdFx0LmdldChgJHt0aGlzLmVuZHBvaW50fSR7cGF0aCA/IHBhdGggOiAnJ31gLCB7IHBhcmFtczogcGFyYW1zIGluc3RhbmNlb2YgSHR0cFBhcmFtcyA/IHBhcmFtcyA6IFV0aWxzLnRvSHR0cFBhcmFtcyhwYXJhbXMpLCBoZWFkZXJzOiB0aGlzLnRvSHR0cEhlYWRlcnMoaGVhZGVycykgfSlcclxuXHRcdFx0LnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKCdnZXRMaXN0JykpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvYWRzIGRhdGFcclxuXHQgKiBAcGFyYW0gcGFyYW1zIEFkZHMgcXVlcnkgcGFyYW1zIHRvIHRoZSByZXF1ZXN0XHJcblx0ICogQHBhcmFtIHBhdGggQSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBhY3Rpb25cclxuXHQgKiBAcGFyYW0gaGVhZGVycyBBZGRzIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZExpc3QocGFyYW1zPzogT2JqZWN0IHwgbnVsbCwgcGF0aD86IHN0cmluZyB8IG51bGwsIGhlYWRlcnM/OiBPYmplY3QpOiB2b2lkIHtcclxuXHRcdHRoaXMuZ2V0TGlzdChwYXJhbXMsIHBhdGgsIGhlYWRlcnMpXHJcblx0XHRcdC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxpc3QubmV4dCh4KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXRzIHJlc3VsdCBsaXN0IGFzIE9ic2VydmFibGVcclxuXHQgKi9cclxuXHRwdWJsaWMgZ2V0TGlzdEFzT2JzZXJ2YWJsZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMubGlzdC5hc09ic2VydmFibGUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgYW4gZW50aXR5XHJcblx0ICogXHJcblx0ICogQHBhcmFtIGVudGl0eSBUaGUgZW50aXR5IHRvIGNyZWF0ZVxyXG5cdCAqIEBwYXJhbSBwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byB0aGUgYWN0aW9uXHJcblx0ICogQHBhcmFtIGh0dHBPcHRpb25zIEFkZGl0aW9uYWwgaHR0cCBvcHRpb25zLCBsaWtlIGhlYWRlcnMgYW5kIHNvIG9uIFxyXG5cdCAqIEBwYXJhbSBoYW5kbGVFcnJvciBIYW5kbGUgZXJyb3JzXHJcblx0ICovXHJcblx0cHVibGljIGNyZWF0ZTxUPihlbnRpdHk6IGFueSwgcGF0aD86IHN0cmluZyB8IG51bGwsIGh0dHBPcHRpb25zPzogT2JqZWN0LCBoYW5kbGVFcnJvcjogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPFQ+IHtcclxuXHRcdGxldCByZXF1ZXN0ID0gdGhpcy5odHRwXHJcblx0XHRcdC5wb3N0PFQ+KGAke3RoaXMuZW5kcG9pbnR9JHtwYXRoID8gcGF0aCA6ICcnfWAsIGVudGl0eSwgaHR0cE9wdGlvbnMpO1xyXG5cclxuXHRcdC8qIEhhbmRsZSBlcnJvciAqL1xyXG5cdFx0aWYgKGhhbmRsZUVycm9yKSB7XHJcblx0XHRcdHJlcXVlc3QgPSByZXF1ZXN0LnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKCdjcmVhdGUnKSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlcyBhbiBlbnRpdHlcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgdG8gdXBkYXRlXHJcblx0ICogQHBhcmFtIHBhdGggQSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBhY3Rpb25cclxuXHQgKiBAcGFyYW0gaHR0cE9wdGlvbnMgQWRkaXRpb25hbCBodHRwIG9wdGlvbnMsIGxpa2UgaGVhZGVycyBhbmQgc28gb24gXHJcblx0ICogQHBhcmFtIGhhbmRsZUVycm9yIEhhbmRsZSBlcnJvcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgdXBkYXRlKGlkOiBzdHJpbmcgfCBudW1iZXIsIGVudGl0eTogYW55LCBwYXRoPzogc3RyaW5nIHwgbnVsbCwgaHR0cE9wdGlvbnM/OiBPYmplY3QsIGhhbmRsZUVycm9yOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRsZXQgcmVxdWVzdCA9IHRoaXMuaHR0cFxyXG5cdFx0XHQucHV0PFQ+KGAke3RoaXMuZW5kcG9pbnR9JHtwYXRoID8gcGF0aCA6ICcnfS8ke2lkfWAsIGVudGl0eSwgaHR0cE9wdGlvbnMpO1xyXG5cclxuXHRcdC8qIEhhbmRsZSBlcnJvciAqL1xyXG5cdFx0aWYgKGhhbmRsZUVycm9yKSB7XHJcblx0XHRcdHJlcXVlc3QgPSByZXF1ZXN0LnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKCd1cGRhdGUnKSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGF0Y2hlcyBhbiBlbnRpdHlcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gaWQgaWQgVGhlIGlkIG9mIHRoZSBpdGVtIHRvIHBhdGNoXHJcblx0ICogQHBhcmFtIGJvZHkgVGhlIGJvZHlcclxuXHQgKiBAcGFyYW0gcGF0aCBBIHJlbGF0aXZlIHBhdGggdG8gdGhlIGFjdGlvblxyXG5cdCAqIEBwYXJhbSBodHRwT3B0aW9ucyBBZGRpdGlvbmFsIGh0dHAgb3B0aW9ucywgbGlrZSBoZWFkZXJzIGFuZCBzbyBvbiBcclxuXHQgKiBAcGFyYW0gaGFuZGxlRXJyb3IgSGFuZGxlIGVycm9yc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYXRjaChpZDogc3RyaW5nIHwgbnVtYmVyLCBib2R5OiBhbnksIHBhdGg/OiBzdHJpbmcgfCBudWxsLCBodHRwT3B0aW9ucz86IE9iamVjdCwgaGFuZGxlRXJyb3I6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdGxldCByZXF1ZXN0ID0gdGhpcy5odHRwXHJcblx0XHRcdC5wYXRjaDxUPihgJHt0aGlzLmVuZHBvaW50fSR7cGF0aCA/IHBhdGggOiAnJ30vJHtpZH1gLCBib2R5LCBodHRwT3B0aW9ucyk7XHJcblxyXG5cdFx0LyogSGFuZGxlIGVycm9yICovXHJcblx0XHRpZiAoaGFuZGxlRXJyb3IpIHtcclxuXHRcdFx0cmVxdWVzdCA9IHJlcXVlc3QucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IoJ3BhdGNoJykpKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBhdGNoZXMgbXVsdGlwbGUgZW50aXRpZXNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gaWRzIFRoZSBpZHMgb2YgdGhlIGl0ZW1zIHRvIHBhdGNoXHJcblx0ICogQHBhcmFtIGJvZHkgVGhlIGJvZHlcclxuXHQgKiBAcGFyYW0gcGF0aCBBIHJlbGF0aXZlIHBhdGggdG8gdGhlIGFjdGlvblxyXG5cdCAqIEBwYXJhbSBodHRwT3B0aW9ucyBBZGRpdGlvbmFsIGh0dHAgb3B0aW9ucywgbGlrZSBoZWFkZXJzIGFuZCBzbyBvbiBcclxuXHQgKiBAcGFyYW0gaGFuZGxlRXJyb3IgSGFuZGxlIGVycm9yc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYXRjaExpc3QoaWRzOiBzdHJpbmdbXSB8IG51bWJlcltdLCBib2R5OiBhbnksIHBhdGg/OiBzdHJpbmcgfCBudWxsLCBodHRwT3B0aW9ucz86IE9iamVjdCwgaGFuZGxlRXJyb3I6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdGxldCByZXF1ZXN0ID0gdGhpcy5odHRwXHJcblx0XHRcdC5wYXRjaDxUPihgJHt0aGlzLmVuZHBvaW50fSR7cGF0aCA/IHBhdGggOiAnJ31gLCBib2R5LCBPYmplY3QuYXNzaWduKGh0dHBPcHRpb25zIHx8IHt9LCB7IHBhcmFtczogVXRpbHMudG9IdHRwUGFyYW1zKHsgaWRzOiBpZHMgfSkgfSkpO1xyXG5cclxuXHRcdC8qIEhhbmRsZSBlcnJvciAqL1xyXG5cdFx0aWYgKGhhbmRsZUVycm9yKSB7XHJcblx0XHRcdHJlcXVlc3QgPSByZXF1ZXN0LnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKCdwYXRjaCcpKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWxldGVzIGFuIGVudGl0eS5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBpdGVtIHRvIGRlbGV0ZVxyXG5cdCAqIEBwYXJhbSBwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byB0aGUgYWN0aW9uXHJcblx0ICogQHBhcmFtIGh0dHBPcHRpb25zIEFkZGl0aW9uYWwgaHR0cCBvcHRpb25zLCBsaWtlIGhlYWRlcnMgYW5kIHNvIG9uICBcclxuXHQgKiBAcGFyYW0gaGFuZGxlRXJyb3IgSGFuZGxlIGVycm9yc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGUoaWQ6IHN0cmluZyB8IG51bWJlciwgcGF0aD86IHN0cmluZyB8IG51bGwsIGh0dHBPcHRpb25zPzogT2JqZWN0LCBoYW5kbGVFcnJvcjogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0bGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBcclxuXHRcdFx0LmRlbGV0ZShgJHt0aGlzLmVuZHBvaW50fSR7cGF0aCA/IHBhdGggOiAnJ30vJHtpZH1gLCBodHRwT3B0aW9ucyk7XHJcblxyXG5cdFx0LyogSGFuZGxlIGVycm9yICovXHJcblx0XHRpZiAoaGFuZGxlRXJyb3IpIHtcclxuXHRcdFx0cmVxdWVzdCA9IHJlcXVlc3QucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IoJ2RlbGV0ZScpKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEZWxldGVzIG11bHRpcGxlIGVudGl0aWVzLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBpZHMgVGhlIGlkcyBvZiB0aGUgaXRlbXMgdG8gZGVsZXRlXHJcblx0ICogQHBhcmFtIHBhdGggQSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBhY3Rpb25cclxuXHQgKiBAcGFyYW0gaHR0cE9wdGlvbnMgQWRkaXRpb25hbCBodHRwIG9wdGlvbnMsIGxpa2UgaGVhZGVycyBhbmQgc28gb24gIFxyXG5cdCAqIEBwYXJhbSBoYW5kbGVFcnJvciBIYW5kbGUgZXJyb3JzXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZUxpc3QoaWRzOiBzdHJpbmdbXSB8IG51bWJlcltdLCBwYXRoPzogc3RyaW5nIHwgbnVsbCwgaHR0cE9wdGlvbnM/OiBPYmplY3QsIGhhbmRsZUVycm9yOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRsZXQgcmVxdWVzdCA9IHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5lbmRwb2ludH0ke3BhdGggPyBwYXRoIDogJyd9YCwgT2JqZWN0LmFzc2lnbihodHRwT3B0aW9ucyB8fCB7fSwgeyBwYXJhbXM6IFV0aWxzLnRvSHR0cFBhcmFtcyh7IGlkczogaWRzIH0pIH0pKTtcclxuXHJcblx0XHQvKiBIYW5kbGUgZXJyb3IgKi9cclxuXHRcdGlmIChoYW5kbGVFcnJvcikge1xyXG5cdFx0XHRyZXF1ZXN0ID0gcmVxdWVzdC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcignZGVsZXRlTGlzdCcpKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEb3dubG9hZHMgYSBmaWxlXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHBhdGggQSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBhY3Rpb25cclxuXHQgKiBAcGFyYW0gcGFyYW1zIFNvbWUgcXVlcnkgcGFyYW1zXHJcblx0ICovXHJcblx0cHVibGljIGRvd25sb2FkKHBhdGg6IHN0cmluZywgcGFyYW1zPzogT2JqZWN0LCBoYW5kbGVFcnJvcjogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0bGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBcclxuXHRcdFx0LmdldChgJHt0aGlzLmVuZHBvaW50fS8ke3BhdGggPyBwYXRoIDogJ2Rvd25sb2FkJ31gLCB7IHBhcmFtczogVXRpbHMudG9IdHRwUGFyYW1zKHBhcmFtcyksIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxyXG5cdFx0XHQucGlwZShtYXAoeCA9PiB7IHJldHVybiB7IGRhdGE6IHguYm9keSwgZmlsZW5hbWU6IHRoaXMuZ2V0RmlsZU5hbWVGcm9tSGVhZGVycyh4LmhlYWRlcnMpIH0gfSkpO1xyXG5cclxuXHRcdC8qIEhhbmRsZSBlcnJvciAqL1xyXG5cdFx0aWYgKGhhbmRsZUVycm9yKSB7XHJcblx0XHRcdHJlcXVlc3QgPSByZXF1ZXN0LnBpcGU8YW55PihjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IoJ2Rvd25sb2FkJykpKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIER1cGxpY2F0ZXMgYSByZWNvcmRcclxuXHQgKiBAcGFyYW0gaWQgXHJcblx0ICovXHJcblx0cHVibGljIGR1cGxpY2F0ZShpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmNyZWF0ZShudWxsLCBgL2R1cGxpY2F0ZS8ke2lkfWApO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBsb2FkcyBhIGZpbGVcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byB1cGxvYWRcclxuXHQgKiBAcGFyYW0gcGF0aCBBIHJlbGF0aXZlIHBhdGggdG8gdGhlIGFjdGlvblxyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cGxvYWQoZmlsZTogRmlsZSwgcGF0aDogc3RyaW5nID0gJ3VwbG9hZCcsIGV4dHJhRGF0YT86IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHQvKiBDcmVhdGVzIGZvcm0gZGF0YSBvYmplY3QgKi9cclxuXHRcdGNvbnN0IGZvcm1EYXRhOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG5cclxuXHRcdC8qIEFkZCB0aGUgZmlsZSB0byB0aGUgZm9ybSBkYXRhICovXHJcblx0XHRmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLCBmaWxlLm5hbWUpO1xyXG5cclxuXHRcdC8qIEl0ZXJhdGUgYW5kIHNldCBvdGhlciBmb3JtIGRhdGEgKi9cclxuXHRcdGlmIChleHRyYURhdGEpIHtcclxuXHRcdFx0Zm9yIChsZXQga2V5IGluIGV4dHJhRGF0YSkge1xyXG5cdFx0XHRcdGZvcm1EYXRhLmFwcGVuZChrZXksIGV4dHJhRGF0YVtrZXldKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2V0IHRydWUgdG8gcmVwb3J0UHJvZ3Jlc3MgdG8gZW5hYmxlIHRyYWNraW5nIG9mIHByb2dyZXNzIGV2ZW50cyAqL1xyXG5cdFx0Y29uc3QgcmVxID0gbmV3IEh0dHBSZXF1ZXN0KCdQT1NUJywgYCR7dGhpcy5lbmRwb2ludH0vJHtwYXRoID8gcGF0aCA6ICd1cGxvYWQnfWAsIGZvcm1EYXRhLCB7XHJcblx0XHRcdHJlcG9ydFByb2dyZXNzOiB0cnVlXHJcblx0XHR9KTtcclxuXHJcblx0XHQvKlxyXG5cdFx0VGhlIGBIdHRwQ2xpZW50LnJlcXVlc3RgIEFQSSBwcm9kdWNlcyBhIHJhdyBldmVudCBzdHJlYW1cclxuXHRcdHdoaWNoIGluY2x1ZGVzIHN0YXJ0IChzZW50KSwgcHJvZ3Jlc3MsIGFuZCByZXNwb25zZSBldmVudHMuXHJcblx0XHQqL1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cC5yZXF1ZXN0KHJlcSk7XHJcblx0fTtcclxuXHJcblx0Ly8vI3JlZ2lvbiBIZWxwZXJzXHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnZlcnQgT2JqZWN0IHRvIEZyb21EYXRhXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGJvZHlcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgdG9Gb3JtRGF0YShib2R5OiBhbnkpOiBGb3JtRGF0YSB7XHJcblx0XHRpZiAoIWJvZHkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBGb3JtRGF0YSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhib2R5KVxyXG5cdFx0XHQuZmlsdGVyKGtleSA9PiBib2R5W2tleV0gIT0gbnVsbCAmJiBib2R5W2tleV0gIT0gJycpXHJcblx0XHRcdC5yZWR1Y2UoKHAsIGtleSkgPT4geyBwLmFwcGVuZChrZXksIGJvZHlba2V5XSk7IHJldHVybiBwIH0sIG5ldyBGb3JtRGF0YSgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnZlcnQgT2JqZWN0IHRvIEh0dHBIZWFkZXJzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGJvZHlcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgdG9IdHRwSGVhZGVycyhib2R5PzogT2JqZWN0IHwgbnVsbCk6IEh0dHBIZWFkZXJzIHtcclxuXHRcdGlmICghYm9keSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IEh0dHBIZWFkZXJzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGJvZHkpXHJcblx0XHRcdC5maWx0ZXIoa2V5ID0+IChib2R5IGFzIGFueSlba2V5XSAhPSBudWxsICYmIChib2R5IGFzIGFueSlba2V5XSAhPSAnJylcclxuXHRcdFx0LnJlZHVjZSgocCwga2V5KSA9PiBwLnNldChrZXksIChib2R5IGFzIGFueSlba2V5XSksIG5ldyBIdHRwSGVhZGVycygpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgZmlsZSBuYW1lIGZyb20gSHR0cGhlYWRlcnM6IENvbnRlbnQtRGlzcG9zaXRpb25cclxuXHQgKiBAcGFyYW0gZGlzcG9zaXRpb24gXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldEZpbGVOYW1lRnJvbUhlYWRlcnMoaGVhZGVyczogSHR0cEhlYWRlcnMpOiBzdHJpbmcge1xyXG5cdFx0dmFyIGRpc3Bvc2l0aW9uID0gaGVhZGVycy5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKTtcclxuXHRcdGlmIChkaXNwb3NpdGlvbiAmJiBkaXNwb3NpdGlvbi5pbmRleE9mKCdhdHRhY2htZW50JykgIT09IC0xKSB7XHJcblx0XHRcdHZhciBtYXRjaGVzID0gL2ZpbGVuYW1lW147PVxcbl0qPSgoWydcIl0pLio/XFwyfFteO1xcbl0qKS8uZXhlYyhkaXNwb3NpdGlvbik7XHJcblx0XHRcdGlmIChtYXRjaGVzICE9IG51bGwgJiYgbWF0Y2hlc1sxXSkge1xyXG5cdFx0XHRcdHJldHVybiBtYXRjaGVzWzFdLnJlcGxhY2UoL1snXCJdL2csICcnKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBcIlwiO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlcyBhbiBIVFRQIG9wZXJhdGlvbiB0aGF0IGZhaWxlZC5cclxuXHQgKiBBbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvIGNvbnRpbnVlIGJ5IHRocm93aW5nIGEgcGFyc2VkIGVycm9yLlxyXG5cdCAqIFxyXG5cdCAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHRoZSBvYnNlcnZhYmxlIHJlc3VsdC5cclxuXHQgKiBAcGFyYW0gb3BlcmF0aW9uIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBmYWlsZWQuIERlZmF1bHRzIHRvICdvcGVyYXRpb24nLlxyXG5cdCAqIEBwYXJhbSByZXN1bHQgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGFzIHRoZSBvYnNlcnZhYmxlIHJlc3VsdC5cclxuXHQgKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgcHJvY2Vzc2VzIHRoZSBlcnJvciBhbmQgcmV0dXJucyBhbiBvYnNlcnZhYmxlLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBoYW5kbGVFcnJvcihvcGVyYXRpb24gPSAnb3BlcmF0aW9uJykge1xyXG5cdFx0cmV0dXJuIChlcnJvcjogYW55KTogT2JzZXJ2YWJsZTxhbnk+ID0+IHRocm93RXJyb3IoKCkgPT4ge1xyXG5cdFx0XHRpZiAoZXJyb3IuZXJyb3IgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xyXG5cdFx0XHRcdHJldHVybiBKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShuZXcgVWludDhBcnJheShlcnJvci5lcnJvcikpKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgbWVzc2FnZSA9IChlcnJvci5lcnJvciBpbnN0YW5jZW9mIEVycm9yRXZlbnQpID8gZXJyb3IuZXJyb3IubWVzc2FnZSA6IGBzZXJ2ZXIgcmV0dXJuZWQgY29kZSAke2Vycm9yLnN0YXR1c30gd2l0aCBib2R5IFwiJHtlcnJvci5lcnJvcn1cImA7XHJcblx0XHRcdHJldHVybiBgJHtvcGVyYXRpb259IGZhaWxlZDogJHttZXNzYWdlfWA7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJldHVybiBkaXN0aW5jdCBtZXNzYWdlIGZvciBzZW50LCB1cGxvYWQgcHJvZ3Jlc3MsICYgcmVzcG9uc2UgZXZlbnRzXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGV2ZW50IFRoZSByZXNwb25zZSBldmVudFxyXG5cdCAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIGJlZWluZyB1cGxvYWRlZFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBnZXRFdmVudE1lc3NhZ2UoZXZlbnQ6IEh0dHBFdmVudDxhbnk+LCBmaWxlOiBGaWxlKSB7XHJcblx0XHRzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcclxuXHRcdFx0LyogVXBsb2FkIHN0YXJ0ZWQgKi9cclxuXHRcdFx0Y2FzZSBIdHRwRXZlbnRUeXBlLlNlbnQ6XHJcblx0XHRcdFx0cmV0dXJuIGBVcGxvYWRpbmcgZmlsZSBcIiR7ZmlsZS5uYW1lfVwiIG9mIHNpemUgJHtmaWxlLnNpemV9LmA7XHJcblxyXG5cdFx0XHQvKiBDb21wdXRlIGFuZCBzaG93IHRoZSAlIGRvbmU6ICovXHJcblx0XHRcdGNhc2UgSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzczpcclxuXHRcdFx0XHRjb25zdCBwZXJjZW50RG9uZSA9IE1hdGgucm91bmQoMTAwICogZXZlbnQubG9hZGVkIC8gKGV2ZW50Py50b3RhbCA/PyAxKSk7XHJcblx0XHRcdFx0cmV0dXJuIGBGaWxlIFwiJHtmaWxlLm5hbWV9XCIgaXMgJHtwZXJjZW50RG9uZX0lIHVwbG9hZGVkLmA7XHJcblxyXG5cdFx0XHQvKiBVcGxvYWQgY29tcGxldGVkICovXHJcblx0XHRcdGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcclxuXHRcdFx0XHRyZXR1cm4gYEZpbGUgXCIke2ZpbGUubmFtZX1cIiB3YXMgY29tcGxldGVseSB1cGxvYWRlZCFgO1xyXG5cclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm4gYEZpbGUgXCIke2ZpbGUubmFtZX1cIiBzdXJwcmlzaW5nIHVwbG9hZCBldmVudDogJHtldmVudC50eXBlfS5gO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgdXBsb2FkIHByb2dyZXNzLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93UHJvZ3Jlc3MobWVzc2FnZTogc3RyaW5nKSB7XHJcblx0XHRjb25zb2xlLmRlYnVnKG1lc3NhZ2UpO1xyXG5cdH1cclxuXHJcblx0Ly8jZW5kcmVnaW9uXHJcbn0iXX0=
331
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvaHR0cC9zZXJ2aWNlcy9nZW5lcmljLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsZUFBZSxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFdkUsTUFBTSxPQUFPLGNBQWM7SUFpQlA7SUFmbkI7O09BRUc7SUFDSSxJQUFJLENBQWE7SUFFeEI7O09BRUc7SUFDSSxJQUFJLEdBQTJCLElBQUksZUFBZSxDQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRW5FOzs7O09BSUc7SUFDSCxZQUFtQixRQUFpQjtRQUFqQixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksR0FBRyxDQUFJLEVBQW1CLEVBQUUsTUFBc0IsRUFBRSxPQUFnQixFQUFFLGNBQXVCLElBQUksRUFBRSxrQkFBMkIsS0FBSztRQUN6SSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSTthQUNyQixHQUFHLENBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FB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cENsaWVudCwgSHR0cEV2ZW50LCBIdHRwRXZlbnRUeXBlLCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcywgSHR0cFJlcXVlc3QgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy91dGlscyc7XHJcbmltcG9ydCB7IFNlcnZpY2VMb2NhdG9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2VzL3NlcnZpY2UtbG9jYXRvcic7XHJcblxyXG5leHBvcnQgY2xhc3MgR2VuZXJpY1NlcnZpY2U8VCBleHRlbmRzIGFueT4ge1xyXG5cclxuXHQvKipcclxuXHQgKiBIdHRwIGNsaWVudFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBodHRwOiBIdHRwQ2xpZW50O1xyXG5cclxuXHQvKipcclxuXHQgKiBMaXN0IG9mIGVudGl0aWVzXHJcblx0ICovXHJcblx0cHVibGljIGxpc3Q6IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KDxhbnk+W10pO1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RvclxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBodHRwIFxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBlbmRwb2ludD86IHN0cmluZykge1xyXG5cdFx0dGhpcy5odHRwID0gU2VydmljZUxvY2F0b3IuZ2V0U2VydmljZShIdHRwQ2xpZW50KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgYSBzaW5nbGUgZW50aXR5XHJcblx0ICogXHJcblx0ICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgZW50aXR5IG9yIHJlbGF0aXZlIHBhdGhcclxuXHQgKiBAcGFyYW0gcGFyYW1zIEFkZHMgcXVlcnkgcGFyYW1zIHRvIHRoZSByZXF1ZXN0XHJcblx0ICogQHBhcmFtIGhlYWRlcnMgQWRkcyBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XHJcblx0ICovXHJcblx0cHVibGljIGdldDxUPihpZDogc3RyaW5nIHwgbnVtYmVyLCBwYXJhbXM/OiBPYmplY3QgfCBudWxsLCBoZWFkZXJzPzogT2JqZWN0LCBoYW5kbGVFcnJvcjogYm9vbGVhbiA9IHRydWUsIG9ic2VydmVSZXNwb25zZTogYm9vbGVhbiA9IGZhbHNlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdGxldCByZXF1ZXN0ID0gdGhpcy5odHRwXHJcblx0XHRcdC5nZXQ8VD4oYCR7dGhpcy5lbmRwb2ludH0vJHtpZH1gLCB7IG9ic2VydmU6IDxhbnk+KG9ic2VydmVSZXNwb25zZSA/ICdyZXNwb25zZScgOiAnYm9keScpLCBwYXJhbXM6IFV0aWxzLnRvSHR0cFBhcmFtcyhwYXJhbXMpLCBoZWFkZXJzOiB0aGlzLnRvSHR0cEhlYWRlcnMoaGVhZGVycykgfSk7XHJcblxyXG5cdFx0LyogSGFuZGxlIGVycm9yICovXHJcblx0XHRpZiAoaGFuZGxlRXJyb3IpIHtcclxuXHRcdFx0cmVxdWVzdCA9IHJlcXVlc3QucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IoJ2dldCcpKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb3VudHMgZW50aXRpZXNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcGFyYW1zIEFkZHMgcXVlcnkgcGFyYW1zIHRvIHRoZSByZXF1ZXN0XHJcblx0ICogQHBhcmFtIHBhdGggQSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBhY3Rpb25cclxuXHQgKiBAcGFyYW0gaGVhZGVycyBBZGRzIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcdCBcclxuXHQgKiBAcGFyYW0gaGFuZGxlRXJyb3IgSGFuZGxlIGVycm9yc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBjb3VudChwYXJhbXM/OiBPYmplY3QsIHBhdGg/OiBzdHJpbmcgfCBudWxsLCBoZWFkZXJzPzogT2JqZWN0LCBoYW5kbGVFcnJvcjogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cdFx0bGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBcclxuXHRcdFx0LmdldDxhbnk+KGAke3RoaXMuZW5kcG9pbnR9JHtwYXRoID8gcGF0aCA6ICcvY291bnQnfWAsIHsgcGFyYW1zOiBVdGlscy50b0h0dHBQYXJhbXMocGFyYW1zKSwgaGVhZGVyczogdGhpcy50b0h0dHBIZWFkZXJzKGhlYWRlcnMpIH0pO1xyXG5cclxuXHRcdC8qIEhhbmRsZSBlcnJvciAqL1xyXG5cdFx0aWYgKGhhbmRsZUVycm9yKSB7XHJcblx0XHRcdHJlcXVlc3QgPSByZXF1ZXN0LnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKCdjb3VudCcpKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3QucGlwZShtYXAoeCA9PiB7IHJldHVybiA8bnVtYmVyPngudmFsdWUgfSkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBhIGxpc3Qgb2YgZW50aXRpZXMuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIHBhcmFtcyBPcHRpb25hbC4gQWRkcyBxdWVyeSBwYXJhbXMgdG8gdGhlIHJlcXVlc3QuXHJcblx0ICogQHBhcmFtIHBhdGggT3B0aW9uYWwuIEEgcmVsYXRpdmUgcGF0aCB0byB0aGUgYWN0aW9uLlxyXG5cdCAqIEBwYXJhbSBoZWFkZXJzIE9wdGlvbmFsLiBBZGRzIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3QuXHJcblx0ICogQHJldHVybnMgQW4gT2JzZXJ2YWJsZSB3aXRoIHRoZSByZXNwb25zZSBkYXRhLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRMaXN0KHBhcmFtcz86IEh0dHBQYXJhbXMgfCBPYmplY3QgfCBudWxsLCBwYXRoPzogc3RyaW5nIHwgbnVsbCwgaGVhZGVycz86IE9iamVjdCB8IG51bGwpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuaHR0cFxyXG5cdFx0XHQuZ2V0KGAke3RoaXMuZW5kcG9pbnR9JHtwYXRoID8gcGF0aCA6ICcnfWAsIHsgcGFyYW1zOiBwYXJhbXMgaW5zdGFuY2VvZiBIdHRwUGFyYW1zID8gcGFyYW1zIDogVXRpbHMudG9IdHRwUGFyYW1zKHBhcmFtcyksIGhlYWRlcnM6IHRoaXMudG9IdHRwSGVhZGVycyhoZWFkZXJzKSB9KVxyXG5cdFx0XHQucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IoJ2dldExpc3QnKSkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9hZHMgZGF0YVxyXG5cdCAqIEBwYXJhbSBwYXJhbXMgQWRkcyBxdWVyeSBwYXJhbXMgdG8gdGhlIHJlcXVlc3RcclxuXHQgKiBAcGFyYW0gcGF0aCBBIHJlbGF0aXZlIHBhdGggdG8gdGhlIGFjdGlvblxyXG5cdCAqIEBwYXJhbSBoZWFkZXJzIEFkZHMgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2FkTGlzdChwYXJhbXM/OiBPYmplY3QgfCBudWxsLCBwYXRoPzogc3RyaW5nIHwgbnVsbCwgaGVhZGVycz86IE9iamVjdCk6IHZvaWQge1xyXG5cdFx0dGhpcy5nZXRMaXN0KHBhcmFtcywgcGF0aCwgaGVhZGVycylcclxuXHRcdFx0LnN1YnNjcmliZSh4ID0+IHRoaXMubGlzdC5uZXh0KHgpKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgcmVzdWx0IGxpc3QgYXMgT2JzZXJ2YWJsZVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBnZXRMaXN0QXNPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5saXN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlcyBhbiBlbnRpdHlcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgdG8gY3JlYXRlXHJcblx0ICogQHBhcmFtIHBhdGggQSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBhY3Rpb25cclxuXHQgKiBAcGFyYW0gaHR0cE9wdGlvbnMgQWRkaXRpb25hbCBodHRwIG9wdGlvbnMsIGxpa2UgaGVhZGVycyBhbmQgc28gb24gXHJcblx0ICogQHBhcmFtIGhhbmRsZUVycm9yIEhhbmRsZSBlcnJvcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgY3JlYXRlPFQ+KGVudGl0eTogYW55LCBwYXRoPzogc3RyaW5nIHwgbnVsbCwgaHR0cE9wdGlvbnM/OiBPYmplY3QsIGhhbmRsZUVycm9yOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8VD4ge1xyXG5cdFx0bGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBcclxuXHRcdFx0LnBvc3Q8VD4oYCR7dGhpcy5lbmRwb2ludH0ke3BhdGggPyBwYXRoIDogJyd9YCwgZW50aXR5LCBodHRwT3B0aW9ucyk7XHJcblxyXG5cdFx0LyogSGFuZGxlIGVycm9yICovXHJcblx0XHRpZiAoaGFuZGxlRXJyb3IpIHtcclxuXHRcdFx0cmVxdWVzdCA9IHJlcXVlc3QucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IoJ2NyZWF0ZScpKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGRhdGVzIGFuIGVudGl0eVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBlbnRpdHkgVGhlIGVudGl0eSB0byB1cGRhdGVcclxuXHQgKiBAcGFyYW0gcGF0aCBBIHJlbGF0aXZlIHBhdGggdG8gdGhlIGFjdGlvblxyXG5cdCAqIEBwYXJhbSBodHRwT3B0aW9ucyBBZGRpdGlvbmFsIGh0dHAgb3B0aW9ucywgbGlrZSBoZWFkZXJzIGFuZCBzbyBvbiBcclxuXHQgKiBAcGFyYW0gaGFuZGxlRXJyb3IgSGFuZGxlIGVycm9yc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cGRhdGUoaWQ6IHN0cmluZyB8IG51bWJlciwgZW50aXR5OiBhbnksIHBhdGg/OiBzdHJpbmcgfCBudWxsLCBodHRwT3B0aW9ucz86IE9iamVjdCwgaGFuZGxlRXJyb3I6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdGxldCByZXF1ZXN0ID0gdGhpcy5odHRwXHJcblx0XHRcdC5wdXQ8VD4oYCR7dGhpcy5lbmRwb2ludH0ke3BhdGggPyBwYXRoIDogJyd9LyR7aWR9YCwgZW50aXR5LCBodHRwT3B0aW9ucyk7XHJcblxyXG5cdFx0LyogSGFuZGxlIGVycm9yICovXHJcblx0XHRpZiAoaGFuZGxlRXJyb3IpIHtcclxuXHRcdFx0cmVxdWVzdCA9IHJlcXVlc3QucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IoJ3VwZGF0ZScpKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlcXVlc3Q7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXRjaGVzIGFuIGVudGl0eVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBpZCBpZCBUaGUgaWQgb2YgdGhlIGl0ZW0gdG8gcGF0Y2hcclxuXHQgKiBAcGFyYW0gYm9keSBUaGUgYm9keVxyXG5cdCAqIEBwYXJhbSBwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byB0aGUgYWN0aW9uXHJcblx0ICogQHBhcmFtIGh0dHBPcHRpb25zIEFkZGl0aW9uYWwgaHR0cCBvcHRpb25zLCBsaWtlIGhlYWRlcnMgYW5kIHNvIG9uIFxyXG5cdCAqIEBwYXJhbSBoYW5kbGVFcnJvciBIYW5kbGUgZXJyb3JzXHJcblx0ICovXHJcblx0cHVibGljIHBhdGNoKGlkOiBzdHJpbmcgfCBudW1iZXIsIGJvZHk6IGFueSwgcGF0aD86IHN0cmluZyB8IG51bGwsIGh0dHBPcHRpb25zPzogT2JqZWN0LCBoYW5kbGVFcnJvcjogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0bGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBcclxuXHRcdFx0LnBhdGNoPFQ+KGAke3RoaXMuZW5kcG9pbnR9JHtwYXRoID8gcGF0aCA6ICcnfS8ke2lkfWAsIGJvZHksIGh0dHBPcHRpb25zKTtcclxuXHJcblx0XHQvKiBIYW5kbGUgZXJyb3IgKi9cclxuXHRcdGlmIChoYW5kbGVFcnJvcikge1xyXG5cdFx0XHRyZXF1ZXN0ID0gcmVxdWVzdC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcigncGF0Y2gnKSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGF0Y2hlcyBtdWx0aXBsZSBlbnRpdGllc1xyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBpZHMgVGhlIGlkcyBvZiB0aGUgaXRlbXMgdG8gcGF0Y2hcclxuXHQgKiBAcGFyYW0gYm9keSBUaGUgYm9keVxyXG5cdCAqIEBwYXJhbSBwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byB0aGUgYWN0aW9uXHJcblx0ICogQHBhcmFtIGh0dHBPcHRpb25zIEFkZGl0aW9uYWwgaHR0cCBvcHRpb25zLCBsaWtlIGhlYWRlcnMgYW5kIHNvIG9uIFxyXG5cdCAqIEBwYXJhbSBoYW5kbGVFcnJvciBIYW5kbGUgZXJyb3JzXHJcblx0ICovXHJcblx0cHVibGljIHBhdGNoTGlzdChpZHM6IHN0cmluZ1tdIHwgbnVtYmVyW10sIGJvZHk6IGFueSwgcGF0aD86IHN0cmluZyB8IG51bGwsIGh0dHBPcHRpb25zPzogT2JqZWN0LCBoYW5kbGVFcnJvcjogYm9vbGVhbiA9IHRydWUpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0bGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBcclxuXHRcdFx0LnBhdGNoPFQ+KGAke3RoaXMuZW5kcG9pbnR9JHtwYXRoID8gcGF0aCA6ICcnfWAsIGJvZHksIE9iamVjdC5hc3NpZ24oaHR0cE9wdGlvbnMgfHwge30sIHsgcGFyYW1zOiBVdGlscy50b0h0dHBQYXJhbXMoeyBpZHM6IGlkcyB9KSB9KSk7XHJcblxyXG5cdFx0LyogSGFuZGxlIGVycm9yICovXHJcblx0XHRpZiAoaGFuZGxlRXJyb3IpIHtcclxuXHRcdFx0cmVxdWVzdCA9IHJlcXVlc3QucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IoJ3BhdGNoJykpKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlbGV0ZXMgYW4gZW50aXR5LlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIGl0ZW0gdG8gZGVsZXRlXHJcblx0ICogQHBhcmFtIHBhdGggQSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBhY3Rpb25cclxuXHQgKiBAcGFyYW0gaHR0cE9wdGlvbnMgQWRkaXRpb25hbCBodHRwIG9wdGlvbnMsIGxpa2UgaGVhZGVycyBhbmQgc28gb24gIFxyXG5cdCAqIEBwYXJhbSBoYW5kbGVFcnJvciBIYW5kbGUgZXJyb3JzXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZShpZDogc3RyaW5nIHwgbnVtYmVyLCBwYXRoPzogc3RyaW5nIHwgbnVsbCwgaHR0cE9wdGlvbnM/OiBPYmplY3QsIGhhbmRsZUVycm9yOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRsZXQgcmVxdWVzdCA9IHRoaXMuaHR0cFxyXG5cdFx0XHQuZGVsZXRlKGAke3RoaXMuZW5kcG9pbnR9JHtwYXRoID8gcGF0aCA6ICcnfS8ke2lkfWAsIGh0dHBPcHRpb25zKTtcclxuXHJcblx0XHQvKiBIYW5kbGUgZXJyb3IgKi9cclxuXHRcdGlmIChoYW5kbGVFcnJvcikge1xyXG5cdFx0XHRyZXF1ZXN0ID0gcmVxdWVzdC5waXBlKGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcignZGVsZXRlJykpKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlbGV0ZXMgbXVsdGlwbGUgZW50aXRpZXMuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGlkcyBUaGUgaWRzIG9mIHRoZSBpdGVtcyB0byBkZWxldGVcclxuXHQgKiBAcGFyYW0gcGF0aCBBIHJlbGF0aXZlIHBhdGggdG8gdGhlIGFjdGlvblxyXG5cdCAqIEBwYXJhbSBodHRwT3B0aW9ucyBBZGRpdGlvbmFsIGh0dHAgb3B0aW9ucywgbGlrZSBoZWFkZXJzIGFuZCBzbyBvbiAgXHJcblx0ICogQHBhcmFtIGhhbmRsZUVycm9yIEhhbmRsZSBlcnJvcnNcclxuXHQgKi9cclxuXHRwdWJsaWMgZGVsZXRlTGlzdChpZHM6IHN0cmluZ1tdIHwgbnVtYmVyW10sIHBhdGg/OiBzdHJpbmcgfCBudWxsLCBodHRwT3B0aW9ucz86IE9iamVjdCwgaGFuZGxlRXJyb3I6IGJvb2xlYW4gPSB0cnVlKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdGxldCByZXF1ZXN0ID0gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLmVuZHBvaW50fSR7cGF0aCA/IHBhdGggOiAnJ31gLCBPYmplY3QuYXNzaWduKGh0dHBPcHRpb25zIHx8IHt9LCB7IHBhcmFtczogVXRpbHMudG9IdHRwUGFyYW1zKHsgaWRzOiBpZHMgfSkgfSkpO1xyXG5cclxuXHRcdC8qIEhhbmRsZSBlcnJvciAqL1xyXG5cdFx0aWYgKGhhbmRsZUVycm9yKSB7XHJcblx0XHRcdHJlcXVlc3QgPSByZXF1ZXN0LnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKCdkZWxldGVMaXN0JykpKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVxdWVzdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERvd25sb2FkcyBhIGZpbGVcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gcGF0aCBBIHJlbGF0aXZlIHBhdGggdG8gdGhlIGFjdGlvblxyXG5cdCAqIEBwYXJhbSBwYXJhbXMgU29tZSBxdWVyeSBwYXJhbXNcclxuXHQgKi9cclxuXHRwdWJsaWMgZG93bmxvYWQocGF0aDogc3RyaW5nLCBwYXJhbXM/OiBPYmplY3QsIGhhbmRsZUVycm9yOiBib29sZWFuID0gdHJ1ZSk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRsZXQgcmVxdWVzdCA9IHRoaXMuaHR0cFxyXG5cdFx0XHQuZ2V0KGAke3RoaXMuZW5kcG9pbnR9LyR7cGF0aCA/IHBhdGggOiAnZG93bmxvYWQnfWAsIHsgcGFyYW1zOiBVdGlscy50b0h0dHBQYXJhbXMocGFyYW1zKSwgcmVzcG9uc2VUeXBlOiAnYXJyYXlidWZmZXInLCBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXHJcblx0XHRcdC5waXBlKG1hcCh4ID0+IHsgcmV0dXJuIHsgZGF0YTogeC5ib2R5LCBmaWxlbmFtZTogdGhpcy5nZXRGaWxlTmFtZUZyb21IZWFkZXJzKHguaGVhZGVycykgfSB9KSk7XHJcblxyXG5cdFx0LyogSGFuZGxlIGVycm9yICovXHJcblx0XHRpZiAoaGFuZGxlRXJyb3IpIHtcclxuXHRcdFx0cmVxdWVzdCA9IHJlcXVlc3QucGlwZTxhbnk+KGNhdGNoRXJyb3IodGhpcy5oYW5kbGVFcnJvcignZG93bmxvYWQnKSkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXF1ZXN0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRHVwbGljYXRlcyBhIHJlY29yZFxyXG5cdCAqIEBwYXJhbSBpZCBcclxuXHQgKi9cclxuXHRwdWJsaWMgZHVwbGljYXRlKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlKG51bGwsIGAvZHVwbGljYXRlLyR7aWR9YCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBVcGxvYWRzIGEgZmlsZVxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBmaWxlIFRoZSBmaWxlIHRvIHVwbG9hZFxyXG5cdCAqIEBwYXJhbSBwYXRoIEEgcmVsYXRpdmUgcGF0aCB0byB0aGUgYWN0aW9uXHJcblx0ICovXHJcblx0cHVibGljIHVwbG9hZChmaWxlOiBGaWxlLCBwYXRoOiBzdHJpbmcgPSAndXBsb2FkJywgZXh0cmFEYXRhPzogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdC8qIENyZWF0ZXMgZm9ybSBkYXRhIG9iamVjdCAqL1xyXG5cdFx0Y29uc3QgZm9ybURhdGE6IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcblxyXG5cdFx0LyogQWRkIHRoZSBmaWxlIHRvIHRoZSBmb3JtIGRhdGEgKi9cclxuXHRcdGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUsIGZpbGUubmFtZSk7XHJcblxyXG5cdFx0LyogSXRlcmF0ZSBhbmQgc2V0IG90aGVyIGZvcm0gZGF0YSAqL1xyXG5cdFx0aWYgKGV4dHJhRGF0YSkge1xyXG5cdFx0XHRmb3IgKGxldCBrZXkgaW4gZXh0cmFEYXRhKSB7XHJcblx0XHRcdFx0Zm9ybURhdGEuYXBwZW5kKGtleSwgZXh0cmFEYXRhW2tleV0pXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgdHJ1ZSB0byByZXBvcnRQcm9ncmVzcyB0byBlbmFibGUgdHJhY2tpbmcgb2YgcHJvZ3Jlc3MgZXZlbnRzICovXHJcblx0XHRjb25zdCByZXEgPSBuZXcgSHR0cFJlcXVlc3QoJ1BPU1QnLCBgJHt0aGlzLmVuZHBvaW50fS8ke3BhdGggPyBwYXRoIDogJ3VwbG9hZCd9YCwgZm9ybURhdGEsIHtcclxuXHRcdFx0cmVwb3J0UHJvZ3Jlc3M6IHRydWVcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qXHJcblx0XHRUaGUgYEh0dHBDbGllbnQucmVxdWVzdGAgQVBJIHByb2R1Y2VzIGEgcmF3IGV2ZW50IHN0cmVhbVxyXG5cdFx0d2hpY2ggaW5jbHVkZXMgc3RhcnQgKHNlbnQpLCBwcm9ncmVzcywgYW5kIHJlc3BvbnNlIGV2ZW50cy5cclxuXHRcdCovXHJcblx0XHRyZXR1cm4gdGhpcy5odHRwLnJlcXVlc3QocmVxKTtcclxuXHR9O1xyXG5cclxuXHQvLy8jcmVnaW9uIEhlbHBlcnNcclxuXHJcblx0LyoqXHJcblx0ICogQ29udmVydCBPYmplY3QgdG8gRnJvbURhdGFcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gYm9keVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB0b0Zvcm1EYXRhKGJvZHk6IGFueSk6IEZvcm1EYXRhIHtcclxuXHRcdGlmICghYm9keSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IEZvcm1EYXRhKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGJvZHkpXHJcblx0XHRcdC5maWx0ZXIoa2V5ID0+IGJvZHlba2V5XSAhPSBudWxsICYmIGJvZHlba2V5XSAhPSAnJylcclxuXHRcdFx0LnJlZHVjZSgocCwga2V5KSA9PiB7IHAuYXBwZW5kKGtleSwgYm9keVtrZXldKTsgcmV0dXJuIHAgfSwgbmV3IEZvcm1EYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29udmVydCBPYmplY3QgdG8gSHR0cEhlYWRlcnNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gYm9keVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB0b0h0dHBIZWFkZXJzKGJvZHk/OiBPYmplY3QgfCBudWxsKTogSHR0cEhlYWRlcnMge1xyXG5cdFx0aWYgKCFib2R5KSB7XHJcblx0XHRcdHJldHVybiBuZXcgSHR0cEhlYWRlcnMoKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYm9keSlcclxuXHRcdFx0LmZpbHRlcihrZXkgPT4gKGJvZHkgYXMgYW55KVtrZXldICE9IG51bGwgJiYgKGJvZHkgYXMgYW55KVtrZXldICE9ICcnKVxyXG5cdFx0XHQucmVkdWNlKChwLCBrZXkpID0+IHAuc2V0KGtleSwgKGJvZHkgYXMgYW55KVtrZXldKSwgbmV3IEh0dHBIZWFkZXJzKCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyBmaWxlIG5hbWUgZnJvbSBIdHRwaGVhZGVyczogQ29udGVudC1EaXNwb3NpdGlvblxyXG5cdCAqIEBwYXJhbSBkaXNwb3NpdGlvbiBcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZ2V0RmlsZU5hbWVGcm9tSGVhZGVycyhoZWFkZXJzOiBIdHRwSGVhZGVycyk6IHN0cmluZyB7XHJcblx0XHR2YXIgZGlzcG9zaXRpb24gPSBoZWFkZXJzLmdldCgnY29udGVudC1kaXNwb3NpdGlvbicpO1xyXG5cdFx0aWYgKGRpc3Bvc2l0aW9uICYmIGRpc3Bvc2l0aW9uLmluZGV4T2YoJ2F0dGFjaG1lbnQnKSAhPT0gLTEpIHtcclxuXHRcdFx0dmFyIG1hdGNoZXMgPSAvZmlsZW5hbWVbXjs9XFxuXSo9KChbJ1wiXSkuKj9cXDJ8W147XFxuXSopLy5leGVjKGRpc3Bvc2l0aW9uKTtcclxuXHRcdFx0aWYgKG1hdGNoZXMgIT0gbnVsbCAmJiBtYXRjaGVzWzFdKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1hdGNoZXNbMV0ucmVwbGFjZSgvWydcIl0vZywgJycpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIFwiXCI7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGVzIGFuIEhUVFAgb3BlcmF0aW9uIHRoYXQgZmFpbGVkLlxyXG5cdCAqIEFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8gY29udGludWUgYnkgdGhyb3dpbmcgYSBwYXJzZWQgZXJyb3IuXHJcblx0ICogXHJcblx0ICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdGhlIG9ic2VydmFibGUgcmVzdWx0LlxyXG5cdCAqIEBwYXJhbSBvcGVyYXRpb24gVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IGZhaWxlZC4gRGVmYXVsdHMgdG8gJ29wZXJhdGlvbicuXHJcblx0ICogQHBhcmFtIHJlc3VsdCBBbiBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gYXMgdGhlIG9ic2VydmFibGUgcmVzdWx0LlxyXG5cdCAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCBwcm9jZXNzZXMgdGhlIGVycm9yIGFuZCByZXR1cm5zIGFuIG9ic2VydmFibGUuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGhhbmRsZUVycm9yKG9wZXJhdGlvbiA9ICdvcGVyYXRpb24nKSB7XHJcblx0XHRyZXR1cm4gKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4gPT4gdGhyb3dFcnJvcigoKSA9PiB7XHJcblx0XHRcdGlmIChlcnJvci5lcnJvciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XHJcblx0XHRcdFx0cmV0dXJuIEpTT04ucGFyc2UobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG5ldyBVaW50OEFycmF5KGVycm9yLmVycm9yKSkpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRjb25zdCBtZXNzYWdlID0gKGVycm9yLmVycm9yIGluc3RhbmNlb2YgRXJyb3JFdmVudCkgPyBlcnJvci5lcnJvci5tZXNzYWdlIDogYHNlcnZlciByZXR1cm5lZCBjb2RlICR7ZXJyb3Iuc3RhdHVzfSB3aXRoIGJvZHkgXCIke2Vycm9yLmVycm9yfVwiYDtcclxuXHRcdFx0cmV0dXJuIGAke29wZXJhdGlvbn0gZmFpbGVkOiAke21lc3NhZ2V9YDtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0dXJuIGRpc3RpbmN0IG1lc3NhZ2UgZm9yIHNlbnQsIHVwbG9hZCBwcm9ncmVzcywgJiByZXNwb25zZSBldmVudHNcclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIHJlc3BvbnNlIGV2ZW50XHJcblx0ICogQHBhcmFtIGZpbGUgVGhlIGZpbGUgYmVlaW5nIHVwbG9hZGVkXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldEV2ZW50TWVzc2FnZShldmVudDogSHR0cEV2ZW50PGFueT4sIGZpbGU6IEZpbGUpIHtcclxuXHRcdHN3aXRjaCAoZXZlbnQudHlwZSkge1xyXG5cdFx0XHQvKiBVcGxvYWQgc3RhcnRlZCAqL1xyXG5cdFx0XHRjYXNlIEh0dHBFdmVudFR5cGUuU2VudDpcclxuXHRcdFx0XHRyZXR1cm4gYFVwbG9hZGluZyBmaWxlIFwiJHtmaWxlLm5hbWV9XCIgb2Ygc2l6ZSAke2ZpbGUuc2l6ZX0uYDtcclxuXHJcblx0XHRcdC8qIENvbXB1dGUgYW5kIHNob3cgdGhlICUgZG9uZTogKi9cclxuXHRcdFx0Y2FzZSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzOlxyXG5cdFx0XHRcdGNvbnN0IHBlcmNlbnREb25lID0gTWF0aC5yb3VuZCgxMDAgKiBldmVudC5sb2FkZWQgLyAoZXZlbnQ/LnRvdGFsID8/IDEpKTtcclxuXHRcdFx0XHRyZXR1cm4gYEZpbGUgXCIke2ZpbGUubmFtZX1cIiBpcyAke3BlcmNlbnREb25lfSUgdXBsb2FkZWQuYDtcclxuXHJcblx0XHRcdC8qIFVwbG9hZCBjb21wbGV0ZWQgKi9cclxuXHRcdFx0Y2FzZSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlOlxyXG5cdFx0XHRcdHJldHVybiBgRmlsZSBcIiR7ZmlsZS5uYW1lfVwiIHdhcyBjb21wbGV0ZWx5IHVwbG9hZGVkIWA7XHJcblxyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHJldHVybiBgRmlsZSBcIiR7ZmlsZS5uYW1lfVwiIHN1cnByaXNpbmcgdXBsb2FkIGV2ZW50OiAke2V2ZW50LnR5cGV9LmA7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyB1cGxvYWQgcHJvZ3Jlc3MuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIG1lc3NhZ2UgXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNob3dQcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpIHtcclxuXHRcdGNvbnNvbGUuZGVidWcobWVzc2FnZSk7XHJcblx0fVxyXG5cclxuXHQvLyNlbmRyZWdpb25cclxufSJdfQ==