@seniorsistemas/angular-components 18.1.0-feature-sds-276-a92584d0 → 18.1.0-feature-sds-276-e3f599ca
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.
- package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +1 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +4 -4
- package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +2 -2
- package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +2 -2
- package/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.d.ts +2 -2
- package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +2 -2
- package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts +2 -1
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +5 -5
- package/esm2022/custom-fields/lib/custom-fields/models/custom-field-type.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +14 -14
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +11 -9
- package/esm2022/dynamic-form/public-api.mjs +5 -6
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +6 -6
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +27 -26
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -123,9 +123,9 @@ export declare class LookupComponent implements ControlValueAccessor, OnChanges,
|
|
|
123
123
|
getColWidth(label: string): string;
|
|
124
124
|
getScale(scale: any): number;
|
|
125
125
|
private isFunction;
|
|
126
|
-
getIntegerMaskConfig(col: BignumberFieldConfig | NumberFieldConfig): MaskConfig;
|
|
127
126
|
getDoubleMaskConfig(col: NumberFieldConfig | BignumberFieldConfig): MaskConfig;
|
|
128
127
|
getMoneyMaskConfig(col: CurrencyFieldConfig): MaskConfig;
|
|
128
|
+
getIntegerMaskConfig(col: BignumberFieldConfig | NumberFieldConfig): MaskConfig;
|
|
129
129
|
getNumberMaskConfig(col: NumberFieldConfig | BignumberFieldConfig): MaskConfig;
|
|
130
130
|
parseValueMaskValue(col: DynamicType, rowData: any): any;
|
|
131
131
|
fieldHasMask(field: DynamicType): field is NumberFieldConfig | BignumberFieldConfig | TextFieldConfig;
|
|
@@ -3,8 +3,8 @@ import { AddonConfig } from '../../addon-config';
|
|
|
3
3
|
import { FieldConfig } from './field';
|
|
4
4
|
type stringFn = () => string;
|
|
5
5
|
export interface BignumberFieldConfig extends FieldConfig {
|
|
6
|
-
type: '
|
|
7
|
-
allowNegative
|
|
6
|
+
type: 'number' | 'double';
|
|
7
|
+
allowNegative?: boolean;
|
|
8
8
|
numberLocaleOptions?: NumberLocaleOptions;
|
|
9
9
|
browserAutocomplete?: boolean;
|
|
10
10
|
precision?: Function | number;
|
|
@@ -21,8 +21,8 @@ export interface BignumberFieldConfig extends FieldConfig {
|
|
|
21
21
|
}
|
|
22
22
|
declare module './field' {
|
|
23
23
|
interface FieldTypeMap {
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
number: BignumberFieldConfig;
|
|
25
|
+
double: BignumberFieldConfig;
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
export {};
|
|
@@ -4,12 +4,12 @@ import { NumberFieldConfig } from './number-field';
|
|
|
4
4
|
* @deprecated should use BigNumberField instead
|
|
5
5
|
*/
|
|
6
6
|
export interface CurrencyFieldConfig extends Omit<NumberFieldConfig, 'type' | 'alignTo'> {
|
|
7
|
-
type: '
|
|
7
|
+
type: 'money';
|
|
8
8
|
alignTo?: 'left' | 'right';
|
|
9
9
|
currency?: () => Currency;
|
|
10
10
|
}
|
|
11
11
|
declare module './field' {
|
|
12
12
|
interface FieldTypeMap {
|
|
13
|
-
|
|
13
|
+
money: CurrencyFieldConfig;
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -7,7 +7,7 @@ type stringFn = () => string | string;
|
|
|
7
7
|
* @deprecated Should use BignumberFieldConfig instead
|
|
8
8
|
*/
|
|
9
9
|
export interface NumberFieldConfig extends FieldConfig {
|
|
10
|
-
type: '
|
|
10
|
+
type: 'integer' | 'legacyNumber';
|
|
11
11
|
/**
|
|
12
12
|
* @deprecated `numberLocaleOptions` should not be used. It is not needed anymore and should be removed if possible.
|
|
13
13
|
*/
|
|
@@ -27,7 +27,7 @@ export interface NumberFieldConfig extends FieldConfig {
|
|
|
27
27
|
}
|
|
28
28
|
declare module './field' {
|
|
29
29
|
interface FieldTypeMap {
|
|
30
|
-
|
|
30
|
+
integer: NumberFieldConfig;
|
|
31
31
|
legacyNumber: NumberFieldConfig;
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -2,7 +2,7 @@ import { BadgeComponent } from '@seniorsistemas/angular-components/badge';
|
|
|
2
2
|
import { FieldConfig } from './field';
|
|
3
3
|
type selectOptionFn = () => SelectOption[];
|
|
4
4
|
export interface SelectFieldConfig extends FieldConfig {
|
|
5
|
-
type: '
|
|
5
|
+
type: 'enum';
|
|
6
6
|
appendTo?: string;
|
|
7
7
|
optionLabel?: string;
|
|
8
8
|
optionValue?: string;
|
|
@@ -27,7 +27,7 @@ export type SelectOption = {
|
|
|
27
27
|
};
|
|
28
28
|
declare module './field' {
|
|
29
29
|
interface FieldTypeMap {
|
|
30
|
-
|
|
30
|
+
enum: SelectFieldConfig;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
export {};
|
|
@@ -3,7 +3,7 @@ import { FieldConfig } from './field';
|
|
|
3
3
|
type stringFn = () => string;
|
|
4
4
|
type booleanFn = () => boolean;
|
|
5
5
|
export interface TextFieldConfig extends FieldConfig {
|
|
6
|
-
type: '
|
|
6
|
+
type: 'string' | 'binary';
|
|
7
7
|
mask?: stringFn | string;
|
|
8
8
|
readonly?: () => boolean;
|
|
9
9
|
characterPattern?: stringFn | string;
|
|
@@ -24,7 +24,7 @@ export interface TextFieldConfig extends FieldConfig {
|
|
|
24
24
|
}
|
|
25
25
|
declare module './field' {
|
|
26
26
|
interface FieldTypeMap {
|
|
27
|
-
|
|
27
|
+
string: TextFieldConfig;
|
|
28
28
|
binary: TextFieldConfig;
|
|
29
29
|
}
|
|
30
30
|
}
|
package/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.d.ts
CHANGED
|
@@ -4,11 +4,12 @@ import { LocaleService } from '@seniorsistemas/angular-components/locale';
|
|
|
4
4
|
import { FormFieldUtilsService } from '../../../services/form-field-utils.service';
|
|
5
5
|
import { BignumberFieldConfig } from '../../configurations/fields/bignumber-field';
|
|
6
6
|
import { BaseFieldComponentConfig } from '../base-field-component';
|
|
7
|
+
import { NumberFieldConfig } from '../../configurations/fields/number-field';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
export declare class BignumberFieldComponent implements OnInit, AfterViewInit, OnDestroy, BaseFieldComponentConfig {
|
|
9
10
|
private readonly localeService;
|
|
10
11
|
private readonly changeDetectorRef;
|
|
11
|
-
field: import("@angular/core").InputSignal<BignumberFieldConfig>;
|
|
12
|
+
field: import("@angular/core").InputSignal<BignumberFieldConfig | NumberFieldConfig>;
|
|
12
13
|
formControl: import("@angular/core").InputSignal<FormControl<any>>;
|
|
13
14
|
fieldUtils: FormFieldUtilsService;
|
|
14
15
|
onInput: EventEmitter<any>;
|
|
@@ -289,7 +289,7 @@ export class CustomFieldsComponent {
|
|
|
289
289
|
let value = this.formGroup.get(name)?.value;
|
|
290
290
|
if (value) {
|
|
291
291
|
switch (type) {
|
|
292
|
-
case '
|
|
292
|
+
case 'number':
|
|
293
293
|
const { mask, scale } = field;
|
|
294
294
|
if (mask)
|
|
295
295
|
value = new BigNumber(value).toFixed(scale).toString();
|
|
@@ -310,7 +310,7 @@ export class CustomFieldsComponent {
|
|
|
310
310
|
break;
|
|
311
311
|
}
|
|
312
312
|
}
|
|
313
|
-
if ((value === null || value === undefined) && (type === '
|
|
313
|
+
if ((value === null || value === undefined) && (type === 'number' || type === 'enum')) {
|
|
314
314
|
const isMultiple = field.multiple;
|
|
315
315
|
parsedValues[name] = isMultiple ? [] : null;
|
|
316
316
|
}
|
|
@@ -365,7 +365,7 @@ export class CustomFieldsComponent {
|
|
|
365
365
|
case CustomFieldType.Any:
|
|
366
366
|
field.type = 'String';
|
|
367
367
|
parameters = {
|
|
368
|
-
type: '
|
|
368
|
+
type: 'string',
|
|
369
369
|
};
|
|
370
370
|
break;
|
|
371
371
|
}
|
|
@@ -385,7 +385,7 @@ export class CustomFieldsComponent {
|
|
|
385
385
|
}
|
|
386
386
|
getSelectParameters(field) {
|
|
387
387
|
return {
|
|
388
|
-
type: '
|
|
388
|
+
type: 'enum',
|
|
389
389
|
showClear: true,
|
|
390
390
|
multiple: field.customization.customEnumeration.multiple,
|
|
391
391
|
options: field.customization.customEnumeration.values.map((e) => ({ label: e.value, value: e.key })),
|
|
@@ -681,4 +681,4 @@ function isUploading(file) {
|
|
|
681
681
|
function errorOnUpload(file) {
|
|
682
682
|
return () => (file.error ? { uploadError: true } : null);
|
|
683
683
|
}
|
|
684
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFFSCxTQUFTLEVBRVQsS0FBSyxFQUlMLFFBQVEsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0gsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGlCQUFpQixFQUdqQixVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxFQUFtQixRQUFRLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUtILDZCQUE2QixHQUloQyxNQUFNLGlEQUFpRCxDQUFDO0FBUXpELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQ0gseUJBQXlCLEVBR3pCLGVBQWUsR0FFbEIsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7O0FBa0JsQixNQUFNLE9BQU8scUJBQXFCO0lBMkRUO0lBQ0E7SUFDQTtJQUNBO0lBQ1k7SUEzRDFCLE1BQU0sQ0FBVTtJQUdoQixPQUFP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QyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEV2ZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgRWxlbWVudFJlZixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ29udHJvbENvbnRhaW5lcixcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcbiAgICBGb3JtQXJyYXksXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgRm9ybUdyb3VwLFxuICAgIE5HX1ZBTElEQVRPUlMsXG4gICAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgVmFsaWRhdG9yLFxuICAgIFZhbGlkYXRvckZuLFxuICAgIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgICBCbG9iRmllbGRDb25maWcsXG4gICAgQm9vbGVhbkZpZWxkQ29uZmlnLFxuICAgIER5bmFtaWNTdHJ1Y3R1cmUsXG4gICAgRHluYW1pY1R5cGUsXG4gICAgZHluYW1pY1R5cGVUb0R5bmFtaWNTdHJ1Y3R1cmUsXG4gICAgRXhwYW5kZWREeW5hbWljVHlwZSxcbiAgICBTZWxlY3RGaWVsZENvbmZpZyxcbiAgICBTdHJ1Y3R1cmVUeXBlLFxufSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2R5bmFtaWMtZm9ybSc7XG5pbXBvcnQgeyBGaWxlRHRvIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9maWxlLXVwbG9hZCc7XG5pbXBvcnQge1xuICAgIENhbGVuZGFyTG9jYWxlT3B0aW9ucyxcbiAgICBMb2NhbGVPcHRpb25zLFxuICAgIExvY2FsZVNlcnZpY2UsXG4gICAgTnVtYmVyTG9jYWxlT3B0aW9ucyxcbn0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9sb2NhbGUnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQ3VzdG9tRmllbGRzU2VydmljZSB9IGZyb20gJy4vY3VzdG9tLWZpZWxkcy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgYXBpVHlwZXNUb0R5bmFtaWNGb3JtVHlwZSxcbiAgICBDdXN0b21GaWVsZHNSZXNwb25zZSxcbiAgICBDdXN0b21GaWVsZHNUeXBlQVBJLFxuICAgIEN1c3RvbUZpZWxkVHlwZSxcbiAgICBGaWVsZEZyb21BUEksXG59IGZyb20gJy4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLWN1c3RvbS1maWVsZHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ3VzdG9tRmllbGRzQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogQ3VzdG9tRmllbGRzQ29tcG9uZW50LFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ3VzdG9tRmllbGRzQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0XG57XG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBwdWJsaWMgZG9tYWluITogc3RyaW5nO1xuXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBwdWJsaWMgc2VydmljZSE6IHN0cmluZztcblxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHVibGljIGVudGl0eSE6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGludmFsaWRFcnJvckxhYmVsID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBlbnRpdHlPYmplY3Q/OiBDdXN0b21GaWVsZHNSZXNwb25zZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGN1c3RvbUZpZWxkc0VuZHBvaW50ID0gJ3BsYXRmb3JtL2ZpZWxkX2N1c3RvbWl6YXRpb24vcXVlcmllcy9nZXRFbnRpdHknO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmlsZUxvY2F0aW9uRW5kcG9pbnQgPSAncGxhdGZvcm0vZmllbGRfY3VzdG9taXphdGlvbi9hY3Rpb25zL3JlcXVlc3RVcGxvYWQnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVxdWVzdEFjY2Vzc0VuZHBvaW50ID0gJ3BsYXRmb3JtL2ZpZWxkX2N1c3RvbWl6YXRpb24vYWN0aW9ucy9yZXF1ZXN0QWNjZXNzJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlcXVpcmVkRXJyb3JNZXNzYWdlID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNwbGF5VGltZUluZm9TaWduID0gMDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dGaWxlVXBsb2FkRGF0ZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVhZHkkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRpc2FibGVGaWVsZHM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBwcm90ZWN0ZWQgcm93VHlwZTogU3RydWN0dXJlVHlwZSA9ICdyb3cnO1xuXG4gICAgcHVibGljIGZpZWxkczogRHluYW1pY1R5cGVbXSA9IFtdO1xuICAgIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gICAgcHJvdGVjdGVkIGR5bmFtaWNTdHJ1Y3R1cmU6IER5bmFtaWNTdHJ1Y3R1cmVbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSByZWFkeSA9IGZhbHNlO1xuICAgIHByaXZhdGUgb25DaGFuZ2U6IGFueTtcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogYW55O1xuICAgIHByaXZhdGUgdmFsdWU6IGFueTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nVXN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHJpdmF0ZSB1cGxvYWRDYW5jZWxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBwcml2YXRlIGhhc0Jsb2I6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBoYXNVcGxvYWRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbUZpZWxkc1NlcnZpY2U6IEN1c3RvbUZpZWxkc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaW52YWxpZEVycm9yTGFiZWwgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmludmFsaWRfdmFsdWUnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc0N1c3RvbUZpZWxkcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maWVsZHM/Lmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudEZvcm0oKTogRm9ybUdyb3VwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sIGFzIEZvcm1Hcm91cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudENvbnRyb2woKTogRm9ybUNvbnRyb2wge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRGb3JtLmdldCgnY3VzdG9tJykgYXMgRm9ybUNvbnRyb2w7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZUlucHV0cygpO1xuICAgICAgICB0aGlzLl9jcmVhdGVGb3JtKCk7XG4gICAgICAgIHRoaXMuYWRkRGlzcGxheVRpbWVJbmZvU2lnblRvRmllbGRzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbmFibGVPckRpc2FibGVGaWVsZHMoISF0aGlzLmRpc2FibGVGaWVsZHMpO1xuXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkNoYW5nZT8uKHRoaXMucGFyc2VGaWVsZHNWYWx1ZXMoKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IF9kaXNhYmxlRmllbGRzID0gY2hhbmdlc1snZGlzYWJsZUZpZWxkcyddO1xuICAgICAgICBpZiAoX2Rpc2FibGVGaWVsZHMpIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlT3JEaXNhYmxlRmllbGRzKF9kaXNhYmxlRmllbGRzLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmdVc3Vic2NyaWJlLm5leHQoKTtcbiAgICAgICAgdGhpcy5uZ1VzdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5KSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMucGFyc2VWYWx1ZXNGb3JGaWVsZHModmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZpbGVzSWZTZXRGb3JtVmFsdWVzQWZ0ZXJJbml0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHZhbHVlIHx8IHt9KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXN0b21GaWVsZHMoKTogT2JzZXJ2YWJsZTxDdXN0b21GaWVsZHNSZXNwb25zZT4ge1xuICAgICAgICBpZiAodGhpcy5lbnRpdHlPYmplY3Q/LmVudGl0eV8pIHtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmVudGl0eU9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZS5nZXRDdXN0b21GaWVsZHMoXG4gICAgICAgICAgICB0aGlzLmRvbWFpbixcbiAgICAgICAgICAgIHRoaXMuc2VydmljZSxcbiAgICAgICAgICAgIHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNFbmRwb2ludCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGVycm9yczogYW55ID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvcnM6IGNvbnRyb2xFcnJvcnMgfSA9IHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZCkgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnNbZmllbGRdID0gY29udHJvbEVycm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFuRmllbGRzKCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlT3JEaXNhYmxlRmllbGRzKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAudmFsdWUpKSB7XG4gICAgICAgICAgICBkaXNhYmxlZCA/IHRoaXMuZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSk/LmRpc2FibGUoKSA6IHRoaXMuZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSk/LmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVJbnB1dHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kb21haW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY3VzdG9tLWZpZWxkcyBkb21haW4hJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY3VzdG9tLWZpZWxkcyBzZXJ2aWNlIScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5lbnRpdHkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY3VzdG9tLWZpZWxkcyBlbnRpdHkhJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVGb3JtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyA9IFt0aGlzLmdldEN1c3RvbUZpZWxkcygpLCB0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0KCldO1xuICAgICAgICBmb3JrSm9pbihvYnNlcnZhYmxlcylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudENvbnRyb2w/Lm1hcmtBc1ByaXN0aW5lKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHkkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWR5JC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtjdXN0b21GaWVsZHNSZXNwb25zZSwgbG9jYWxlT3B0aW9uc10gPSByZXNwb25zZSBhcyBbQ3VzdG9tRmllbGRzUmVzcG9uc2UsIExvY2FsZU9wdGlvbnNdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRzOiB7IFtrZXkgaW4gc3RyaW5nXTogeyBkZWZhdWx0VmFsdWU/OiBib29sZWFuOyBkZWZhdWx0TWFzaz86IHN0cmluZyB9IH0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuU3RyaW5nXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5Cb29sZWFuXSA9IHsgZGVmYXVsdFZhbHVlOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5JbnRlZ2VyXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5Eb3VibGVdID0geyBkZWZhdWx0TWFzazogJycgfTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuTW9uZXldID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkRhdGVdID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkRhdGVUaW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5Mb2NhbERhdGVUaW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5UaW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5CbG9iXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5FbnVtXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5CaW5hcnldID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLkFueV0gPSB7fTtcblxuICAgICAgICAgICAgICAgIGlmICghY3VzdG9tRmllbGRzUmVzcG9uc2UgfHwgIWN1c3RvbUZpZWxkc1Jlc3BvbnNlLmVudGl0eV8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IGFjdGl2ZSwgZmllbGRzIH0gPSBjdXN0b21GaWVsZHNSZXNwb25zZS5lbnRpdHlfO1xuICAgICAgICAgICAgICAgIGlmICghYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmN1c3RvbWl6YWJsZSAmJiBmaWVsZC5jdXN0b21pemF0aW9uPy5hY3RpdmUpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHluYW1pY1R5cGUgPSB0aGlzLmdldER5bmFtaWNUeXBlKGZpZWxkLCBsb2NhbGVPcHRpb25zKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IEN1c3RvbUZpZWxkVHlwZS5CbG9iICYmIHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZVtkeW5hbWljVHlwZS5uYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvYlRvRmlsZVVwbG9hZChkeW5hbWljVHlwZSBhcyBCbG9iRmllbGRDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHZhbGlkYXRpb25SZWdleCB9ID0gZmllbGQuY3VzdG9taXphdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNJc1R5cGVzOiBDdXN0b21GaWVsZHNUeXBlQVBJW10gPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLkJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLk1vbmV5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5EYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5EYXRlVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuTG9jYWxEYXRlVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW9uUmVnZXggJiYgIWFzSXNUeXBlcy5pbmNsdWRlcyhmaWVsZFR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybih2YWxpZGF0aW9uUmVnZXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZFR5cGUgPT09IEN1c3RvbUZpZWxkVHlwZS5JbnRlZ2VyICYmICEoZHluYW1pY1R5cGUgYXMgYW55KS5tYXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucGF0dGVybigvXlxcLT9cXGQqJC8pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR5bmFtaWNUeXBlLnJlcXVpcmVkPy4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiBkZWZhdWx0c1tmaWVsZFR5cGVdLmRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZm9ybUdyb3VwLmRpc2FibGVkIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woZHluYW1pY1R5cGUubmFtZSwgY29udHJvbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGRzLnB1c2goZHluYW1pY1R5cGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmR5bmFtaWNTdHJ1Y3R1cmUgPSBkeW5hbWljVHlwZVRvRHluYW1pY1N0cnVjdHVyZSh0aGlzLmZpZWxkcyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZpZWxkQ3VzdG9taXphdGlvbihmaWVsZHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUodGhpcy5wYXJzZVZhbHVlc0ZvckZpZWxkcyh0aGlzLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlVmFsdWVzRm9yRmllbGRzKHZhbHVlczogYW55KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlcyA9IHsgLi4udmFsdWVzIH07XG5cbiAgICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBmaWVsZC50eXBlO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGZpZWxkLm5hbWU7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlcz8uW25hbWVdO1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRyYXRhbWVudG8gZXhjbHVzaXZvIHBhcmEgY2FtcG9zIGJvb2xlYW4gcXVlIHRlbSBvIHN0YXR1cyBFbXB0eVxuICAgICAgICAgICAgICogRXNzYSBjb25kaWNpb25hbCBuZWNlc3NpdGEgZXN0YXIgYW50ZXMgZG8gaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgICAgICAgICAgICogUG9pcyBlbGEgdGVtIHVtIHN0YXR1cyBxdWUgdXNhIG51bGwgbm8gdmFsb3IgZG8gY2FtcG8gcmFkaW8gYm9vbGVhblxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdFZhbGlkID0gIWlzU3RyaW5nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nO1xuICAgICAgICAgICAgICAgIGlmIChub3RWYWxpZCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENvbmRpY2lvbmFsIHBhcmEgY2FtcG9zIHF1ZSByZXRvcm5hbSBzdHJpbmcgZGUgYm9vbGVuIGRvIGJhY2thbmRcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSB2YWx1ZSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IG1vbWVudCh2YWx1ZSkudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2xvY2FsRGF0ZVRpbWUnOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUsICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUsICdISDptbTpzcycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGd1bWFzIGVxdWlwZXMgc8OzIHNldGFtIHZhbG9yIG5vIGZvcm11bMOhcmlvLCBhcMOzcyBvIGNhcnJlZ2FtZW50byBkYSB0ZWxhXG4gICAgICogQ29tbyDDqSBiZW0gcGFkcsOjbyBpc3NvLCBmb2kgbmVjZXNzw6FyaW8gY3JpYXIgZXNzZSBtw6l0b2RvIHBhcmEgZ2VyYXIgbyBmaWxlXG4gICAgICogYXDDs3Mgc2V0YXIgbyB2YWxvciBubyBmb3JtdWzDoXJpb1xuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRmlsZXNJZlNldEZvcm1WYWx1ZXNBZnRlckluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNVcGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChmaWVsZCkgPT4gZmllbGQudHlwZSA9PT0gJ2Jsb2InKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpPy52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVCbG9iVG9GaWxlVXBsb2FkKGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZUZpZWxkc1ZhbHVlcygpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWVzOiBhbnkgPSB7fTtcblxuICAgICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyB0eXBlIH0gPSBmaWVsZDtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBmaWVsZC5uYW1lO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KG5hbWUpPy52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JpZ051bWJlcic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG1hc2ssIHNjYWxlIH0gPSBmaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrKSB2YWx1ZSA9IG5ldyBCaWdOdW1iZXIodmFsdWUpLnRvRml4ZWQoc2NhbGUgYXMgbnVtYmVyKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGVUaW1lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdsb2NhbERhdGVUaW1lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd0aW1lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ0hIOm1tOnNzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgJiYgKHR5cGUgPT09ICdiaWdOdW1iZXInIHx8IHR5cGUgPT09ICdzZWxlY3QnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSAoZmllbGQgYXMgU2VsZWN0RmllbGRDb25maWcpLm11bHRpcGxlO1xuICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IGlzTXVsdGlwbGUgPyBbXSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5oYXNCbG9iKSB7XG4gICAgICAgICAgICBwYXJzZWRWYWx1ZXNbJ2ZpZWxkQ3VzdG9taXphdGlvbiddID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWVsZEN1c3RvbWl6YXRpb24nKT8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldER5bmFtaWNUeXBlKGZpZWxkOiBGaWVsZEZyb21BUEksIGxvY2FsZU9wdGlvbnM6IExvY2FsZU9wdGlvbnMpOiBEeW5hbWljVHlwZSB7XG4gICAgICAgIGxldCBwYXJhbWV0ZXJzOiBQYXJ0aWFsPER5bmFtaWNUeXBlPiA9IHt9O1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuQmxvYjpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gdGhpcy5nZXRCbG9iUGFyYW1ldGVycygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gdGhpcy5nZXRCb29sZWFuUGFyYW1ldGVycygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRW51bWVyYXRpb24nOlxuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuRW51bTpcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ0VudW0nO1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB0aGlzLmdldFNlbGVjdFBhcmFtZXRlcnMoZmllbGQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuTW9uZXk6XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xlZ2FjeU51bWJlcicsXG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogMTUsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiAyLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0QWRkb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBsb2NhbGVPcHRpb25zPy5udW1iZXI/LmN1cnJlbmN5U3ltYm9sID8/ICdSJCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkRvdWJsZTpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGVnYWN5TnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGU6IDIsXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsaXplZE51bWJlcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuSW50ZWdlcjpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGVnYWN5TnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGU6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkFueTpcbiAgICAgICAgICAgICAgICBmaWVsZC50eXBlID0gJ1N0cmluZyc7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkeW5hbWljVHlwZTogRHluYW1pY1R5cGUgJiB7XG4gICAgICAgICAgICBjYWxlbmRhck9wdGlvbnM6IENhbGVuZGFyTG9jYWxlT3B0aW9ucztcbiAgICAgICAgICAgIGN1cnJlbmN5T3B0aW9uczogTnVtYmVyTG9jYWxlT3B0aW9ucztcbiAgICAgICAgfSA9IHtcbiAgICAgICAgICAgIC4uLnBhcmFtZXRlcnMsXG4gICAgICAgICAgICBuYW1lOiBmaWVsZC5pZCxcbiAgICAgICAgICAgIGxhYmVsOiBmaWVsZC5jdXN0b21pemF0aW9uLmxhYmVsLFxuICAgICAgICAgICAgdG9vbHRpcDogZmllbGQuY3VzdG9taXphdGlvbi50b29sdGlwLFxuICAgICAgICAgICAgaW5mb1NpZ246IGZpZWxkLmN1c3RvbWl6YXRpb24uaW5mb1NpZ24sXG4gICAgICAgICAgICB0eXBlOiBhcGlUeXBlc1RvRHluYW1pY0Zvcm1UeXBlKGZpZWxkLnR5cGUpLFxuICAgICAgICAgICAgbWFzazogZmllbGQuY3VzdG9taXphdGlvbi5tYXNrLFxuICAgICAgICAgICAgcmVxdWlyZWQ6ICgpID0+IGZpZWxkLmN1c3RvbWl6YXRpb24ubWFuZGF0b3J5ID8/IGZhbHNlLFxuICAgICAgICAgICAgY2FsZW5kYXJPcHRpb25zOiBsb2NhbGVPcHRpb25zLmNhbGVuZGFyLFxuICAgICAgICAgICAgY3VycmVuY3lPcHRpb25zOiBsb2NhbGVPcHRpb25zLm51bWJlcixcbiAgICAgICAgfSBhcyBEeW5hbWljVHlwZSAmIHsgY2FsZW5kYXJPcHRpb25zOiBDYWxlbmRhckxvY2FsZU9wdGlvbnM7IGN1cnJlbmN5T3B0aW9uczogTnVtYmVyTG9jYWxlT3B0aW9ucyB9O1xuICAgICAgICByZXR1cm4gZHluYW1pY1R5cGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTZWxlY3RQYXJhbWV0ZXJzKGZpZWxkOiBhbnkpOiBQYXJ0aWFsPFNlbGVjdEZpZWxkQ29uZmlnPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICAgIHNob3dDbGVhcjogdHJ1ZSxcbiAgICAgICAgICAgIG11bHRpcGxlOiBmaWVsZC5jdXN0b21pemF0aW9uLmN1c3RvbUVudW1lcmF0aW9uLm11bHRpcGxlLFxuICAgICAgICAgICAgb3B0aW9uczogZmllbGQuY3VzdG9taXphdGlvbi5jdXN0b21FbnVtZXJhdGlvbi52YWx1ZXMubWFwKChlOiBhbnkpID0+ICh7IGxhYmVsOiBlLnZhbHVlLCB2YWx1ZTogZS5rZXkgfSkpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Qm9vbGVhblBhcmFtZXRlcnMoKTogUGFydGlhbDxCb29sZWFuRmllbGRDb25maWc+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgIG9wdGlvbnNMYWJlbDoge1xuICAgICAgICAgICAgICAgIHRydWU6IHRoaXMuZ2V0VHJhbnNsYXRlTGFiZWwoYHRydWVfbGFiZWxgKSxcbiAgICAgICAgICAgICAgICBmYWxzZTogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgZmFsc2VfbGFiZWxgKSxcbiAgICAgICAgICAgICAgICBlbXB0eTogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgZW1wdHlfbGFiZWxgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9iUGFyYW1ldGVycygpOiBQYXJ0aWFsPEV4cGFuZGVkRHluYW1pY1R5cGU+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICdibG9iJyxcbiAgICAgICAgICAgIHNpemU6IHtcbiAgICAgICAgICAgICAgICBzbTogMTIsXG4gICAgICAgICAgICAgICAgbWQ6IDEyLFxuICAgICAgICAgICAgICAgIGxnOiAxMixcbiAgICAgICAgICAgICAgICB4bDogMTIsXG4gICAgICAgICAgICB9LCAvLyBDb21vIHZhaSBzZXIgZmlsaG8gZGUgUm93LCBmYXogc2VudGlkbyBoYWJpbGl0YXIgbyB0aXBvIGV4cGFuZGlkby5cbiAgICAgICAgICAgIGFjY2VwdDogJ2ltYWdlLyosIGFwcGxpY2F0aW9uLyosIHRleHQvKicsXG4gICAgICAgICAgICBjaG9vc2VMYWJlbDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgY2hvb3NlX2xhYmVsYCksXG4gICAgICAgICAgICByZW1vdmVMYWJlbDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgcmVtb3ZlX2xhYmVsYCksXG4gICAgICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgY2FuY2VsX2xhYmVsYCksXG4gICAgICAgICAgICBzdWNjZXNzVG9vbHRpcDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgc3VjY2Vzc190b29sdGlwYCksXG4gICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICBvblVwbG9hZEZpbGU6IChldmVudDogeyBmaWxlczogRmlsZUR0b1tdIH0sIGJsb2JGaWVsZDogQmxvYkZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNVcGxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlKGV2ZW50LCBibG9iRmllbGQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVtb3ZlRmlsZTogKGV2ZW50OiBGaWxlRHRvLCBibG9iRmllbGQ6IEJsb2JGaWVsZENvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZSh7IGZpbGU6IGV2ZW50IH0sIGJsb2JGaWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DYW5jZWxVcGxvYWQ6IChldmVudDogbnVtYmVyLCBibG9iRmllbGQ6IEJsb2JGaWVsZENvbmZpZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsVXBsb2FkKGV2ZW50LCBibG9iRmllbGQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRG93bmxvYWRGaWxlOiAoZXZlbnQ6IHsgaW5kZXg6IG51bWJlcjsgYW5jaG9yOiBFbGVtZW50UmVmIH0sIGJsb2JGaWVsZDogQmxvYkZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUoZXZlbnQsIGJsb2JGaWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2hvd0ZpbGVVcGxvYWREYXRlOiB0aGlzLnNob3dGaWxlVXBsb2FkRGF0ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDDiSBuZWNlc3PDoXJpbyBjcmlhciBvIGZpZWxkQ3VzdG9taXphdGlvbiBxdWFuZG8gaMOhIHVtIEJsb2IgbmEgZW50aWRhZGUgcGFyYSBnZXJhciBvXG4gICAgICogY29tIG9zIGZpZWxkcyBpbnNlcmlkb3MgZSBkZWxldGFkb3MuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWVsZEN1c3RvbWl6YXRpb24oZmllbGRzOiBGaWVsZEZyb21BUElbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc0Jsb2IgPSAhIWZpZWxkcy5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC50eXBlID09PSBDdXN0b21GaWVsZFR5cGUuQmxvYikubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5oYXNCbG9iKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgICAgICAgICAgICdmaWVsZEN1c3RvbWl6YXRpb24nLFxuICAgICAgICAgICAgICAgIG5ldyBGb3JtQXJyYXkoW1xuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybUdyb3VwKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbjogbmV3IEZvcm1Db250cm9sKHRoaXMuZG9tYWluKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IG5ldyBGb3JtQ29udHJvbCh0aGlzLnNlcnZpY2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiBuZXcgRm9ybUNvbnRyb2wodGhpcy5lbnRpdHkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9EZWxldGU6IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB7fSwgZGlzYWJsZWQ6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9JbnNlcnQ6IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiB7fSwgZGlzYWJsZWQ6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUJsb2JUb0ZpbGVVcGxvYWQoZmllbGQ6IEJsb2JGaWVsZENvbmZpZykge1xuICAgICAgICBjb25zdCBfbmFtZSA9IGZpZWxkLm5hbWU7XG4gICAgICAgIGNvbnN0IG9iamVjdElkID0gdGhpcy52YWx1ZVtfbmFtZV0gPyB0aGlzLnZhbHVlW19uYW1lXSA6IHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnZhbHVlO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IG9iamVjdElkLnN1YnN0cmluZyhvYmplY3RJZC5sYXN0SW5kZXhPZignLycpICsgMSk7XG4gICAgICAgIGNvbnN0IGZpbGU6IFBhcnRpYWw8RmlsZUR0bz4gPSB7IG9iamVjdElkLCBuYW1lOiBmaWxlTmFtZSwgc2F2ZWRGaWxlOiB0cnVlIH07XG4gICAgICAgIGZpZWxkLmZpbGVzID0gW2ZpbGUgYXMgRmlsZUR0b107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkb3dubG9hZEZpbGUoZXZlbnQ6IHsgaW5kZXg6IG51bWJlcjsgYW5jaG9yOiBFbGVtZW50UmVmIH0sIGZpZWxkOiBCbG9iRmllbGRDb25maWcpIHtcbiAgICAgICAgY29uc3QgeyBpbmRleCwgYW5jaG9yIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgX2ZpbGVzID0gZmllbGQuZmlsZXMgfHwgW107XG4gICAgICAgIGlmICghX2ZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWxlID0gX2ZpbGVzW2luZGV4XTtcbiAgICAgICAgaWYgKGN1cnJlbnRGaWxlLm9iamVjdFVSTCkge1xuICAgICAgICAgICAgYW5jaG9yLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IF9vYmplY3RJZCA9IGN1cnJlbnRGaWxlLm9iamVjdElkIGFzIHN0cmluZztcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxuICAgICAgICAgICAgICAgIC5yZXF1ZXN0QWNjZXNzKF9vYmplY3RJZCwgdGhpcy5yZXF1ZXN0QWNjZXNzRW5kcG9pbnQpXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBmaWxlTmFtZSwgdXJpIH0gPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRGaWxlKHVyaSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChibG9iOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlTmFtZSkgYXMgRmlsZUR0bztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGaWxlLm9iamVjdFVSTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwodXJpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB1cmkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUub2JqZWN0SWQgPSBjdXJyZW50RmlsZS5vYmplY3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdGaWxlLnNhdmVkRmlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZpbGVzW2luZGV4XSA9IG5ld0ZpbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsZXMgPSBbLi4uX2ZpbGVzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwbG9hZEZpbGUoZXZlbnQ6IHsgZmlsZXM6IEZpbGVEdG9bXSB9LCBmb3JtRmllbGQ6IEJsb2JGaWVsZENvbmZpZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGZpbGVzIH0gPSBldmVudDtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcy5maW5kKChyZWNvcmQpID0+IHJlY29yZC5uYW1lID09PSBmb3JtRmllbGQubmFtZSkgYXMgQmxvYkZpZWxkQ29uZmlnO1xuICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZSBvY29ycmVyIHVtIHVwbG9hZCwgasOhIGV4aXN0aW5kbyB1bSBhcnF1aXZvIGNvbSB1cGxvYWQgZmVpdG8uIMOJIG5lY2Vzc8OhcmlvIGV4Y2x1aXIgbyBtZXNtby5cbiAgICAgICAgaWYgKGZpZWxkPy5maWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUoeyBmaWxlOiBmaWVsZC5maWxlc1swXSB9LCBmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgZmllbGQuZmlsZXMgPSBmaWxlcztcbiAgICAgICAgY29uc3QgX25hbWUgPSBmaWVsZC5uYW1lO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgICAgICAgIGlmICghZmlsZS5zYXZlZEZpbGUgJiYgIWZpbGUucHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICBmaWxlLmlzVXBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy5zZXRWYWxpZGF0b3JzKGlzVXBsb2FkaW5nKGZpbGUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5nZXRGaWxlTG9jYXRpb25VcmwoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZTogdGhpcy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlTG9jYXRpb25FbmRwb2ludCxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih0aGlzLmRlZmFsdENhdGNoRXJyb3IoZmllbGQsIGVyciwgaSkpKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbG9jYXRpb24sIHZlcnNpb24sIG9iamVjdElkIH0gPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUub2JqZWN0SWQgPSBvYmplY3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUudXBsb2FkU3Vic2NyaWJlID0gdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwbG9hZFRlbXBGaWxlKGxvY2F0aW9uLCBmaWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih0aGlzLmRlZmFsdENhdGNoRXJyb3IoZmllbGQsIGVyciwgaSkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkQ2FuY2VsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IE1hdGgucm91bmQocmVzcG9uc2UubG9hZGVkIC8gcmVzcG9uc2UudG90YWwpICogMTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5vYmplY3RVUkwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0VXJsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHsgb2JqZWN0SWQsIG5hbWU6IGZpbGUubmFtZSwgdmVyc2lvbjogZmlsZS52ZXJzaW9uIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9JbnNlcnQgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpPy52YWx1ZVswXS50b0luc2VydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEN1c3RvbWl6YXRpb24gPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpPy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRDdXN0b21pemF0aW9uPy52YWx1ZT8uWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkQ3VzdG9taXphdGlvbi52YWx1ZVswXS50b0luc2VydCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvSW5zZXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW19uYW1lXTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnNldFZhbHVlKGAke2ZpbGUub2JqZWN0SWR9LyR7ZmlsZS5uYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWxlcyA9IFtmaWxlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnVwbG9hZENhbmNlbGVkICYmIHR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkQ2FuY2VsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZV07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVGaWxlKGV2ZW50OiB7IGZpbGU6IEZpbGVEdG8gfSwgYmxvYkZpZWxkOiBCbG9iRmllbGRDb25maWcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBmaWxlIH0gPSBldmVudDtcblxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkLm5hbWUgPT09IGJsb2JGaWVsZC5uYW1lKSBhcyBCbG9iRmllbGRDb25maWc7XG5cbiAgICAgICAgZmllbGQhLmZpbGVzID0gW107XG5cbiAgICAgICAgaWYgKGZpbGUub2JqZWN0SWQpIHtcbiAgICAgICAgICAgIC8vIFF1YW5kbyDDqSB1bSBhcnF1aXZvIGrDoSBzYWx2byBvIG9iamVjdElkIGrDoSDDqSBubyBmb3JtYXRvIFwib2JqZWN0SWQvbmFtZVwiXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbGUuc2F2ZWRGaWxlID8gYCR7ZmlsZS5vYmplY3RJZH1gIDogYCR7ZmlsZS5vYmplY3RJZH0vJHtmaWxlLm5hbWV9YDtcbiAgICAgICAgICAgIGNvbnN0IHRvRGVsZXRlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWVsZEN1c3RvbWl6YXRpb24nKSEudmFsdWVbMF0udG9EZWxldGU7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWVsZEN1c3RvbWl6YXRpb24nKSEudmFsdWVbMF0udG9JbnNlcnRbZmllbGQhLm5hbWVdO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWVsZEN1c3RvbWl6YXRpb24nKSEudmFsdWVbMF0udG9EZWxldGUgPSB7XG4gICAgICAgICAgICAgICAgLi4udG9EZWxldGUsXG4gICAgICAgICAgICAgICAgW2ZpZWxkIS5uYW1lXTogWy4uLih0b0RlbGV0ZVtmaWVsZCEubmFtZV0gfHwgW10pLCB2YWx1ZV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkIS5uYW1lKSEuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZCEubmFtZSkhLnNldFZhbHVlKCcnKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkIS5uYW1lKSEudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuY2VsVXBsb2FkKGluZGV4OiBudW1iZXIsIGZvcm1GaWVsZDogQmxvYkZpZWxkQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBsb2FkQ2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkLm5hbWUgPT09IGZvcm1GaWVsZC5uYW1lKSBhcyBCbG9iRmllbGRDb25maWc7XG4gICAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBfbmFtZSA9IGZpZWxkLm5hbWU7XG4gICAgICAgIGNvbnN0IF9maWxlcyA9IGZpZWxkLmZpbGVzIHx8IFtdO1xuICAgICAgICBfZmlsZXNbaW5kZXhdPy51cGxvYWRTdWJzY3JpYmU/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGZpZWxkLmZpbGVzID0gW107XG4gICAgICAgIGNvbnN0IGZpZWxkQ3VzdG9taXphdGlvbiA9IHRoaXMuZm9ybUdyb3VwLmdldCgnZmllbGRDdXN0b21pemF0aW9uJyk/LnZhbHVlWzBdO1xuICAgICAgICBkZWxldGUgZmllbGRDdXN0b21pemF0aW9uLnRvSW5zZXJ0W19uYW1lXTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnNldFZhbHVlKCcnKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVmYWx0Q2F0Y2hFcnJvcihmaWVsZDogQmxvYkZpZWxkQ29uZmlnLCBlcnI6IEh0dHBFcnJvclJlc3BvbnNlLCBpbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xuICAgICAgICBjb25zdCB7IGZpbGVzIH0gPSBmaWVsZDtcbiAgICAgICAgaWYgKGZpbGVzKSB7XG4gICAgICAgICAgICBmaWxlc1tpbmRleF0uZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICBmaWxlc1tpbmRleF0uaXNVcGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGZpZWxkLmZpbGVzID0gWy4uLmZpbGVzXTtcbiAgICAgICAgICAgIGNvbnN0IF9uYW1lID0gZmllbGQubmFtZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnNldFZhbGlkYXRvcnMoW2Vycm9yT25VcGxvYWQoZmlsZXNbaW5kZXhdKV0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdlcnJvciBpbiB1cGxvYWQgZmlsZS4gRGV0YWlsczogJyArIGVyci5tZXNzYWdlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ2Vycm9yIGluIHVwbG9hZCBmaWxlLiBEZXRhaWxzOiAnICsgZXJyLm1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNsYXRlTGFiZWwobGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgJHt0aGlzLmRvbWFpbn0uJHt0aGlzLnNlcnZpY2V9LiR7bGFiZWx9YCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGREaXNwbGF5VGltZUluZm9TaWduVG9GaWVsZHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBmaWVsZC5kaXNwbGF5VGltZUluZm9TaWduID0gdGhpcy5kaXNwbGF5VGltZUluZm9TaWduO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzVXBsb2FkaW5nKGZpbGU6IEZpbGVEdG8pOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuICgpID0+IChmaWxlLmlzVXBsb2FkaW5nID8geyBpc1VwbG9hZGluZzogdHJ1ZSB9IDogbnVsbCk7XG59XG5cbmZ1bmN0aW9uIGVycm9yT25VcGxvYWQoZmlsZTogRmlsZUR0byk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKCkgPT4gKGZpbGUuZXJyb3IgPyB7IHVwbG9hZEVycm9yOiB0cnVlIH0gOiBudWxsKTtcbn1cblxuIiwiQGxldCBlcnJvck1lc3NhZ2VzID1cbiAgICB7XG4gICAgICAgIHBhdHRlcm46IGludmFsaWRFcnJvckxhYmVsLFxuICAgICAgICByZXF1aXJlZDogcmVxdWlyZWRFcnJvck1lc3NhZ2UsXG4gICAgfTtcblxuPHMtZHluYW1pYy1mb3JtXG4gICAgW2NvbmZpZ3NdPVwiZHluYW1pY1N0cnVjdHVyZVwiXG4gICAgW2Zvcm1dPVwiZm9ybUdyb3VwXCJcbiAgICBbZXJyb3JNZXNzYWdlc109XCJlcnJvck1lc3NhZ2VzXCJcbj5cbjwvcy1keW5hbWljLWZvcm0+XG5cbiJdfQ==
|
|
684
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFFSCxTQUFTLEVBRVQsS0FBSyxFQUlMLFFBQVEsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0gsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGlCQUFpQixFQUdqQixVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxFQUFtQixRQUFRLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUtILDZCQUE2QixHQUloQyxNQUFNLGlEQUFpRCxDQUFDO0FBUXpELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQ0gseUJBQXlCLEVBR3pCLGVBQWUsR0FFbEIsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7O0FBa0JsQixNQUFNLE9BQU8scUJBQXFCO0lBMkRUO0lBQ0E7SUFDQTtJQUNBO0lBQ1k7SUEzRDFCLE1BQU0sQ0FBVTtJQUdoQixPQUFP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QUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBFdmVudFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENvbnRyb2xDb250YWluZXIsXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRm9ybUFycmF5LFxuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1Hcm91cCxcbiAgICBOR19WQUxJREFUT1JTLFxuICAgIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIFZhbGlkYXRvcixcbiAgICBWYWxpZGF0b3JGbixcbiAgICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgQmxvYkZpZWxkQ29uZmlnLFxuICAgIEJvb2xlYW5GaWVsZENvbmZpZyxcbiAgICBEeW5hbWljU3RydWN0dXJlLFxuICAgIER5bmFtaWNUeXBlLFxuICAgIGR5bmFtaWNUeXBlVG9EeW5hbWljU3RydWN0dXJlLFxuICAgIEV4cGFuZGVkRHluYW1pY1R5cGUsXG4gICAgU2VsZWN0RmllbGRDb25maWcsXG4gICAgU3RydWN0dXJlVHlwZSxcbn0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9keW5hbWljLWZvcm0nO1xuaW1wb3J0IHsgRmlsZUR0byB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZmlsZS11cGxvYWQnO1xuaW1wb3J0IHtcbiAgICBDYWxlbmRhckxvY2FsZU9wdGlvbnMsXG4gICAgTG9jYWxlT3B0aW9ucyxcbiAgICBMb2NhbGVTZXJ2aWNlLFxuICAgIE51bWJlckxvY2FsZU9wdGlvbnMsXG59IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvbG9jYWxlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEN1c3RvbUZpZWxkc1NlcnZpY2UgfSBmcm9tICcuL2N1c3RvbS1maWVsZHMuc2VydmljZSc7XG5pbXBvcnQge1xuICAgIGFwaVR5cGVzVG9EeW5hbWljRm9ybVR5cGUsXG4gICAgQ3VzdG9tRmllbGRzUmVzcG9uc2UsXG4gICAgQ3VzdG9tRmllbGRzVHlwZUFQSSxcbiAgICBDdXN0b21GaWVsZFR5cGUsXG4gICAgRmllbGRGcm9tQVBJLFxufSBmcm9tICcuL21vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1jdXN0b20tZmllbGRzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEN1c3RvbUZpZWxkc0NvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IEN1c3RvbUZpZWxkc0NvbXBvbmVudCxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUZpZWxkc0NvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdFxue1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHVibGljIGRvbWFpbiE6IHN0cmluZztcblxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHVibGljIHNlcnZpY2UhOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHB1YmxpYyBlbnRpdHkhOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbnZhbGlkRXJyb3JMYWJlbCA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW50aXR5T2JqZWN0PzogQ3VzdG9tRmllbGRzUmVzcG9uc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXN0b21GaWVsZHNFbmRwb2ludCA9ICdwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL3F1ZXJpZXMvZ2V0RW50aXR5JztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpbGVMb2NhdGlvbkVuZHBvaW50ID0gJ3BsYXRmb3JtL2ZpZWxkX2N1c3RvbWl6YXRpb24vYWN0aW9ucy9yZXF1ZXN0VXBsb2FkJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlcXVlc3RBY2Nlc3NFbmRwb2ludCA9ICdwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL2FjdGlvbnMvcmVxdWVzdEFjY2Vzcyc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZXF1aXJlZEVycm9yTWVzc2FnZSA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheVRpbWVJbmZvU2lnbiA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93RmlsZVVwbG9hZERhdGUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlYWR5JDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlRmllbGRzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgcHJvdGVjdGVkIHJvd1R5cGU6IFN0cnVjdHVyZVR5cGUgPSAncm93JztcblxuICAgIHB1YmxpYyBmaWVsZHM6IER5bmFtaWNUeXBlW10gPSBbXTtcbiAgICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICAgIHByb3RlY3RlZCBkeW5hbWljU3RydWN0dXJlOiBEeW5hbWljU3RydWN0dXJlW10gPSBbXTtcblxuICAgIHByaXZhdGUgcmVhZHkgPSBmYWxzZTtcbiAgICBwcml2YXRlIG9uQ2hhbmdlOiBhbnk7XG4gICAgcHJpdmF0ZSBvblRvdWNoZWQ6IGFueTtcbiAgICBwcml2YXRlIHZhbHVlOiBhbnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1VzdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgdXBsb2FkQ2FuY2VsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBoYXNCbG9iOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgaGFzVXBsb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21GaWVsZHNTZXJ2aWNlOiBDdXN0b21GaWVsZHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICkge1xuICAgICAgICB0aGlzLmludmFsaWRFcnJvckxhYmVsID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5pbnZhbGlkX3ZhbHVlJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNDdXN0b21GaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmllbGRzPy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRGb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRDb250cm9sKCk6IEZvcm1Db250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Rm9ybS5nZXQoJ2N1c3RvbScpIGFzIEZvcm1Db250cm9sO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVJbnB1dHMoKTtcbiAgICAgICAgdGhpcy5fY3JlYXRlRm9ybSgpO1xuICAgICAgICB0aGlzLmFkZERpc3BsYXlUaW1lSW5mb1NpZ25Ub0ZpZWxkcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW5hYmxlT3JEaXNhYmxlRmllbGRzKCEhdGhpcy5kaXNhYmxlRmllbGRzKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMub25DaGFuZ2U/Lih0aGlzLnBhcnNlRmllbGRzVmFsdWVzKCkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBfZGlzYWJsZUZpZWxkcyA9IGNoYW5nZXNbJ2Rpc2FibGVGaWVsZHMnXTtcbiAgICAgICAgaWYgKF9kaXNhYmxlRmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZU9yRGlzYWJsZUZpZWxkcyhfZGlzYWJsZUZpZWxkcy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVXN1YnNjcmliZS5uZXh0KCk7XG4gICAgICAgIHRoaXMubmdVc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5yZWFkeSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVzRm9yRmllbGRzKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWxlc0lmU2V0Rm9ybVZhbHVlc0FmdGVySW5pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSB8fCB7fSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VzdG9tRmllbGRzKCk6IE9ic2VydmFibGU8Q3VzdG9tRmllbGRzUmVzcG9uc2U+IHtcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5T2JqZWN0Py5lbnRpdHlfKSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodGhpcy5lbnRpdHlPYmplY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2UuZ2V0Q3VzdG9tRmllbGRzKFxuICAgICAgICAgICAgdGhpcy5kb21haW4sXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UsXG4gICAgICAgICAgICB0aGlzLmVudGl0eSxcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzRW5kcG9pbnQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlKCkge1xuICAgICAgICBjb25zdCBlcnJvcnM6IGFueSA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JzOiBjb250cm9sRXJyb3JzIH0gPSB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgIGlmIChjb250cm9sRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzW2ZpZWxkXSA9IGNvbnRyb2xFcnJvcnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhbkZpZWxkcygpIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZU9yRGlzYWJsZUZpZWxkcyhkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xOYW1lIG9mIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLnZhbHVlKSkge1xuICAgICAgICAgICAgZGlzYWJsZWQgPyB0aGlzLmZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpPy5kaXNhYmxlKCkgOiB0aGlzLmZvcm1Hcm91cC5nZXQoY29udHJvbE5hbWUpPy5lbmFibGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3ZhbGlkYXRlSW5wdXRzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZG9tYWluKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGN1c3RvbS1maWVsZHMgZG9tYWluIScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGN1c3RvbS1maWVsZHMgc2VydmljZSEnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZW50aXR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGN1c3RvbS1maWVsZHMgZW50aXR5IScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlRm9ybSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMgPSBbdGhpcy5nZXRDdXN0b21GaWVsZHMoKSwgdGhpcy5sb2NhbGVTZXJ2aWNlLmdldCgpXTtcbiAgICAgICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRDb250cm9sPy5tYXJrQXNQcmlzdGluZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5JCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkeSQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBbY3VzdG9tRmllbGRzUmVzcG9uc2UsIGxvY2FsZU9wdGlvbnNdID0gcmVzcG9uc2UgYXMgW0N1c3RvbUZpZWxkc1Jlc3BvbnNlLCBMb2NhbGVPcHRpb25zXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0czogeyBba2V5IGluIHN0cmluZ106IHsgZGVmYXVsdFZhbHVlPzogYm9vbGVhbjsgZGVmYXVsdE1hc2s/OiBzdHJpbmcgfSB9ID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLlN0cmluZ10gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQm9vbGVhbl0gPSB7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuSW50ZWdlcl0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRG91YmxlXSA9IHsgZGVmYXVsdE1hc2s6ICcnIH07XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLk1vbmV5XSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5EYXRlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5EYXRlVGltZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuTG9jYWxEYXRlVGltZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuVGltZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQmxvYl0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRW51bV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQmluYXJ5XSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5BbnldID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbUZpZWxkc1Jlc3BvbnNlIHx8ICFjdXN0b21GaWVsZHNSZXNwb25zZS5lbnRpdHlfKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyBhY3RpdmUsIGZpZWxkcyB9ID0gY3VzdG9tRmllbGRzUmVzcG9uc2UuZW50aXR5XztcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmllbGRzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZC5jdXN0b21pemFibGUgJiYgZmllbGQuY3VzdG9taXphdGlvbj8uYWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNUeXBlID0gdGhpcy5nZXREeW5hbWljVHlwZShmaWVsZCwgbG9jYWxlT3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBDdXN0b21GaWVsZFR5cGUuQmxvYiAmJiB0aGlzLnZhbHVlICYmIHRoaXMudmFsdWVbZHluYW1pY1R5cGUubmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUJsb2JUb0ZpbGVVcGxvYWQoZHluYW1pY1R5cGUgYXMgQmxvYkZpZWxkQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB2YWxpZGF0aW9uUmVnZXggfSA9IGZpZWxkLmN1c3RvbWl6YXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFzSXNUeXBlczogQ3VzdG9tRmllbGRzVHlwZUFQSVtdID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5Cb29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5Nb25leSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuRGF0ZVRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLkxvY2FsRGF0ZVRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLlRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvblJlZ2V4ICYmICFhc0lzVHlwZXMuaW5jbHVkZXMoZmllbGRUeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4odmFsaWRhdGlvblJlZ2V4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09PSBDdXN0b21GaWVsZFR5cGUuSW50ZWdlciAmJiAhKGR5bmFtaWNUeXBlIGFzIGFueSkubWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL15cXC0/XFxkKiQvKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkeW5hbWljVHlwZS5yZXF1aXJlZD8uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogZGVmYXVsdHNbZmllbGRUeXBlXS5kZWZhdWx0VmFsdWUsIGRpc2FibGVkOiB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlZCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKGR5bmFtaWNUeXBlLm5hbWUsIGNvbnRyb2wpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkcy5wdXNoKGR5bmFtaWNUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5keW5hbWljU3RydWN0dXJlID0gZHluYW1pY1R5cGVUb0R5bmFtaWNTdHJ1Y3R1cmUodGhpcy5maWVsZHMpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEN1c3RvbWl6YXRpb24oZmllbGRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMucGFyc2VWYWx1ZXNGb3JGaWVsZHModGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZVZhbHVlc0ZvckZpZWxkcyh2YWx1ZXM6IGFueSkge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZXMgPSB7IC4uLnZhbHVlcyB9O1xuXG4gICAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gZmllbGQudHlwZTtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBmaWVsZC5uYW1lO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXM/LltuYW1lXTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUcmF0YW1lbnRvIGV4Y2x1c2l2byBwYXJhIGNhbXBvcyBib29sZWFuIHF1ZSB0ZW0gbyBzdGF0dXMgRW1wdHlcbiAgICAgICAgICAgICAqIEVzc2EgY29uZGljaW9uYWwgbmVjZXNzaXRhIGVzdGFyIGFudGVzIGRvIGlmICghdmFsdWUpIHJldHVybjtcbiAgICAgICAgICAgICAqIFBvaXMgZWxhIHRlbSB1bSBzdGF0dXMgcXVlIHVzYSBudWxsIG5vIHZhbG9yIGRvIGNhbXBvIHJhZGlvIGJvb2xlYW5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgICAgICAgICAgICBjb25zdCBub3RWYWxpZCA9ICFpc1N0cmluZyAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbiAgICAgICAgICAgICAgICBpZiAobm90VmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb25kaWNpb25hbCBwYXJhIGNhbXBvcyBxdWUgcmV0b3JuYW0gc3RyaW5nIGRlIGJvb2xlbiBkbyBiYWNrYW5kXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gdmFsdWUgPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF0ZVRpbWUnOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdsb2NhbERhdGVUaW1lJzpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlLCAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTUycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICd0aW1lJzpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlLCAnSEg6bW06c3MnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwYXJzZWRWYWx1ZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxndW1hcyBlcXVpcGVzIHPDsyBzZXRhbSB2YWxvciBubyBmb3JtdWzDoXJpbywgYXDDs3MgbyBjYXJyZWdhbWVudG8gZGEgdGVsYVxuICAgICAqIENvbW8gw6kgYmVtIHBhZHLDo28gaXNzbywgZm9pIG5lY2Vzc8OhcmlvIGNyaWFyIGVzc2UgbcOpdG9kbyBwYXJhIGdlcmFyIG8gZmlsZVxuICAgICAqIGFww7NzIHNldGFyIG8gdmFsb3Igbm8gZm9ybXVsw6FyaW9cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUZpbGVzSWZTZXRGb3JtVmFsdWVzQWZ0ZXJJbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzVXBsb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGRzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLnR5cGUgPT09ICdibG9iJylcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvYlRvRmlsZVVwbG9hZChmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VGaWVsZHNWYWx1ZXMoKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlczogYW55ID0ge307XG5cbiAgICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gZmllbGQ7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gZmllbGQubmFtZTtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChuYW1lKT8udmFsdWU7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBtYXNrLCBzY2FsZSB9ID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykgdmFsdWUgPSBuZXcgQmlnTnVtYmVyKHZhbHVlKS50b0ZpeGVkKHNjYWxlIGFzIG51bWJlcikudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tREQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkYXRlVGltZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbG9jYWxEYXRlVGltZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGltZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdISDptbTpzcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpICYmICh0eXBlID09PSAnbnVtYmVyJyB8fCB0eXBlID09PSAnZW51bScpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IChmaWVsZCBhcyBTZWxlY3RGaWVsZENvbmZpZykubXVsdGlwbGU7XG4gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gaXNNdWx0aXBsZSA/IFtdIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmhhc0Jsb2IpIHtcbiAgICAgICAgICAgIHBhcnNlZFZhbHVlc1snZmllbGRDdXN0b21pemF0aW9uJ10gPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpPy52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RHluYW1pY1R5cGUoZmllbGQ6IEZpZWxkRnJvbUFQSSwgbG9jYWxlT3B0aW9uczogTG9jYWxlT3B0aW9ucyk6IER5bmFtaWNUeXBlIHtcbiAgICAgICAgbGV0IHBhcmFtZXRlcnM6IFBhcnRpYWw8RHluYW1pY1R5cGU+ID0ge307XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5CbG9iOlxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB0aGlzLmdldEJsb2JQYXJhbWV0ZXJzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5Cb29sZWFuOlxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB0aGlzLmdldEJvb2xlYW5QYXJhbWV0ZXJzKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdFbnVtZXJhdGlvbic6XG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5FbnVtOlxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnRW51bSc7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0U2VsZWN0UGFyYW1ldGVycyhmaWVsZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5Nb25leTpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGVnYWN5TnVtYmVyJyxcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGU6IDIsXG4gICAgICAgICAgICAgICAgICAgIGxlZnRBZGRvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxvY2FsZU9wdGlvbnM/Lm51bWJlcj8uY3VycmVuY3lTeW1ib2wgPz8gJ1IkJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuRG91YmxlOlxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsZWdhY3lOdW1iZXInLFxuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb246IDE1LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZTogMixcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxpemVkTnVtYmVyOiB0cnVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEN1c3RvbUZpZWxkVHlwZS5JbnRlZ2VyOlxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsZWdhY3lOdW1iZXInLFxuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb246IDE1LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZTogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuQW55OlxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSAnU3RyaW5nJztcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHluYW1pY1R5cGU6IER5bmFtaWNUeXBlICYge1xuICAgICAgICAgICAgY2FsZW5kYXJPcHRpb25zOiBDYWxlbmRhckxvY2FsZU9wdGlvbnM7XG4gICAgICAgICAgICBjdXJyZW5jeU9wdGlvbnM6IE51bWJlckxvY2FsZU9wdGlvbnM7XG4gICAgICAgIH0gPSB7XG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxuICAgICAgICAgICAgbmFtZTogZmllbGQuaWQsXG4gICAgICAgICAgICBsYWJlbDogZmllbGQuY3VzdG9taXphdGlvbi5sYWJlbCxcbiAgICAgICAgICAgIHRvb2x0aXA6IGZpZWxkLmN1c3RvbWl6YXRpb24udG9vbHRpcCxcbiAgICAgICAgICAgIGluZm9TaWduOiBmaWVsZC5jdXN0b21pemF0aW9uLmluZm9TaWduLFxuICAgICAgICAgICAgdHlwZTogYXBpVHlwZXNUb0R5bmFtaWNGb3JtVHlwZShmaWVsZC50eXBlKSxcbiAgICAgICAgICAgIG1hc2s6IGZpZWxkLmN1c3RvbWl6YXRpb24ubWFzayxcbiAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiBmaWVsZC5jdXN0b21pemF0aW9uLm1hbmRhdG9yeSA/PyBmYWxzZSxcbiAgICAgICAgICAgIGNhbGVuZGFyT3B0aW9uczogbG9jYWxlT3B0aW9ucy5jYWxlbmRhcixcbiAgICAgICAgICAgIGN1cnJlbmN5T3B0aW9uczogbG9jYWxlT3B0aW9ucy5udW1iZXIsXG4gICAgICAgIH0gYXMgRHluYW1pY1R5cGUgJiB7IGNhbGVuZGFyT3B0aW9uczogQ2FsZW5kYXJMb2NhbGVPcHRpb25zOyBjdXJyZW5jeU9wdGlvbnM6IE51bWJlckxvY2FsZU9wdGlvbnMgfTtcbiAgICAgICAgcmV0dXJuIGR5bmFtaWNUeXBlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2VsZWN0UGFyYW1ldGVycyhmaWVsZDogYW55KTogUGFydGlhbDxTZWxlY3RGaWVsZENvbmZpZz4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2VudW0nLFxuICAgICAgICAgICAgc2hvd0NsZWFyOiB0cnVlLFxuICAgICAgICAgICAgbXVsdGlwbGU6IGZpZWxkLmN1c3RvbWl6YXRpb24uY3VzdG9tRW51bWVyYXRpb24ubXVsdGlwbGUsXG4gICAgICAgICAgICBvcHRpb25zOiBmaWVsZC5jdXN0b21pemF0aW9uLmN1c3RvbUVudW1lcmF0aW9uLnZhbHVlcy5tYXAoKGU6IGFueSkgPT4gKHsgbGFiZWw6IGUudmFsdWUsIHZhbHVlOiBlLmtleSB9KSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCb29sZWFuUGFyYW1ldGVycygpOiBQYXJ0aWFsPEJvb2xlYW5GaWVsZENvbmZpZz4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgb3B0aW9uc0xhYmVsOiB7XG4gICAgICAgICAgICAgICAgdHJ1ZTogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgdHJ1ZV9sYWJlbGApLFxuICAgICAgICAgICAgICAgIGZhbHNlOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBmYWxzZV9sYWJlbGApLFxuICAgICAgICAgICAgICAgIGVtcHR5OiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBlbXB0eV9sYWJlbGApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2JQYXJhbWV0ZXJzKCk6IFBhcnRpYWw8RXhwYW5kZWREeW5hbWljVHlwZT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogJ2Jsb2InLFxuICAgICAgICAgICAgc2l6ZToge1xuICAgICAgICAgICAgICAgIHNtOiAxMixcbiAgICAgICAgICAgICAgICBtZDogMTIsXG4gICAgICAgICAgICAgICAgbGc6IDEyLFxuICAgICAgICAgICAgICAgIHhsOiAxMixcbiAgICAgICAgICAgIH0sIC8vIENvbW8gdmFpIHNlciBmaWxobyBkZSBSb3csIGZheiBzZW50aWRvIGhhYmlsaXRhciBvIHRpcG8gZXhwYW5kaWRvLlxuICAgICAgICAgICAgYWNjZXB0OiAnaW1hZ2UvKiwgYXBwbGljYXRpb24vKiwgdGV4dC8qJyxcbiAgICAgICAgICAgIGNob29zZUxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBjaG9vc2VfbGFiZWxgKSxcbiAgICAgICAgICAgIHJlbW92ZUxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGByZW1vdmVfbGFiZWxgKSxcbiAgICAgICAgICAgIGNhbmNlbExhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBjYW5jZWxfbGFiZWxgKSxcbiAgICAgICAgICAgIHN1Y2Nlc3NUb29sdGlwOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBzdWNjZXNzX3Rvb2x0aXBgKSxcbiAgICAgICAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgICAgICAgIG9uVXBsb2FkRmlsZTogKGV2ZW50OiB7IGZpbGVzOiBGaWxlRHRvW10gfSwgYmxvYkZpZWxkOiBCbG9iRmllbGRDb25maWcpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1VwbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZEZpbGUoZXZlbnQsIGJsb2JGaWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25SZW1vdmVGaWxlOiAoZXZlbnQ6IEZpbGVEdG8sIGJsb2JGaWVsZDogQmxvYkZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKHsgZmlsZTogZXZlbnQgfSwgYmxvYkZpZWxkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNhbmNlbFVwbG9hZDogKGV2ZW50OiBudW1iZXIsIGJsb2JGaWVsZDogQmxvYkZpZWxkQ29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxVcGxvYWQoZXZlbnQsIGJsb2JGaWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Eb3dubG9hZEZpbGU6IChldmVudDogeyBpbmRleDogbnVtYmVyOyBhbmNob3I6IEVsZW1lbnRSZWYgfSwgYmxvYkZpZWxkOiBCbG9iRmllbGRDb25maWcpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkRmlsZShldmVudCwgYmxvYkZpZWxkKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaG93RmlsZVVwbG9hZERhdGU6IHRoaXMuc2hvd0ZpbGVVcGxvYWREYXRlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIMOJIG5lY2Vzc8OhcmlvIGNyaWFyIG8gZmllbGRDdXN0b21pemF0aW9uIHF1YW5kbyBow6EgdW0gQmxvYiBuYSBlbnRpZGFkZSBwYXJhIGdlcmFyIG9cbiAgICAgKiBjb20gb3MgZmllbGRzIGluc2VyaWRvcyBlIGRlbGV0YWRvcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUZpZWxkQ3VzdG9taXphdGlvbihmaWVsZHM6IEZpZWxkRnJvbUFQSVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFzQmxvYiA9ICEhZmllbGRzLmZpbHRlcigoZmllbGQpID0+IGZpZWxkLnR5cGUgPT09IEN1c3RvbUZpZWxkVHlwZS5CbG9iKS5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmhhc0Jsb2IpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAgICAgICAgICAgJ2ZpZWxkQ3VzdG9taXphdGlvbicsXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1BcnJheShbXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5kb21haW4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZTogbmV3IEZvcm1Db250cm9sKHRoaXMuc2VydmljZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVudGl0eSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b0RlbGV0ZTogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHt9LCBkaXNhYmxlZDogZmFsc2UgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b0luc2VydDogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHt9LCBkaXNhYmxlZDogZmFsc2UgfSksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQmxvYlRvRmlsZVVwbG9hZChmaWVsZDogQmxvYkZpZWxkQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IF9uYW1lID0gZmllbGQubmFtZTtcbiAgICAgICAgY29uc3Qgb2JqZWN0SWQgPSB0aGlzLnZhbHVlW19uYW1lXSA/IHRoaXMudmFsdWVbX25hbWVdIDogdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8udmFsdWU7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gb2JqZWN0SWQuc3Vic3RyaW5nKG9iamVjdElkLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcbiAgICAgICAgY29uc3QgZmlsZTogUGFydGlhbDxGaWxlRHRvPiA9IHsgb2JqZWN0SWQsIG5hbWU6IGZpbGVOYW1lLCBzYXZlZEZpbGU6IHRydWUgfTtcbiAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZSBhcyBGaWxlRHRvXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRvd25sb2FkRmlsZShldmVudDogeyBpbmRleDogbnVtYmVyOyBhbmNob3I6IEVsZW1lbnRSZWYgfSwgZmllbGQ6IEJsb2JGaWVsZENvbmZpZykge1xuICAgICAgICBjb25zdCB7IGluZGV4LCBhbmNob3IgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBfZmlsZXMgPSBmaWVsZC5maWxlcyB8fCBbXTtcbiAgICAgICAgaWYgKCFfZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudEZpbGUgPSBfZmlsZXNbaW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudEZpbGUub2JqZWN0VVJMKSB7XG4gICAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgX29iamVjdElkID0gY3VycmVudEZpbGUub2JqZWN0SWQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLnJlcXVlc3RBY2Nlc3MoX29iamVjdElkLCB0aGlzLnJlcXVlc3RBY2Nlc3NFbmRwb2ludClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbGVOYW1lLCB1cmkgfSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpbGUodXJpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGJsb2I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVOYW1lKSBhcyBGaWxlRHRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybCh1cmkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvci5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsIHVyaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZS5vYmplY3RJZCA9IGN1cnJlbnRGaWxlLm9iamVjdElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUuc2F2ZWRGaWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZmlsZXNbaW5kZXhdID0gbmV3RmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWxlcyA9IFsuLi5fZmlsZXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvci5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBsb2FkRmlsZShldmVudDogeyBmaWxlczogRmlsZUR0b1tdIH0sIGZvcm1GaWVsZDogQmxvYkZpZWxkQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkLm5hbWUgPT09IGZvcm1GaWVsZC5uYW1lKSBhcyBCbG9iRmllbGRDb25maWc7XG4gICAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNlIG9jb3JyZXIgdW0gdXBsb2FkLCBqw6EgZXhpc3RpbmRvIHVtIGFycXVpdm8gY29tIHVwbG9hZCBmZWl0by4gw4kgbmVjZXNzw6FyaW8gZXhjbHVpciBvIG1lc21vLlxuICAgICAgICBpZiAoZmllbGQ/LmZpbGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZSh7IGZpbGU6IGZpZWxkLmZpbGVzWzBdIH0sIGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICBmaWVsZC5maWxlcyA9IGZpbGVzO1xuICAgICAgICBjb25zdCBfbmFtZSA9IGZpZWxkLm5hbWU7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVzW2ldO1xuICAgICAgICAgICAgaWYgKCFmaWxlLnNhdmVkRmlsZSAmJiAhZmlsZS5wcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGZpbGUuaXNVcGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnNldFZhbGlkYXRvcnMoaXNVcGxvYWRpbmcoZmlsZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgLmdldEZpbGVMb2NhdGlvblVybChcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW46IHRoaXMuZG9tYWluLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lOiB0aGlzLmVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVMb2NhdGlvbkVuZHBvaW50LFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHRoaXMuZGVmYWx0Q2F0Y2hFcnJvcihmaWVsZCwgZXJyLCBpKSkpLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBsb2NhdGlvbiwgdmVyc2lvbiwgb2JqZWN0SWQgfSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLnZlcnNpb24gPSB2ZXJzaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5vYmplY3RJZCA9IG9iamVjdElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS51cGxvYWRTdWJzY3JpYmUgPSB0aGlzLmN1c3RvbUZpZWxkc1NlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudXBsb2FkVGVtcEZpbGUobG9jYXRpb24sIGZpbGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IG9mKHRoaXMuZGVmYWx0Q2F0Y2hFcnJvcihmaWVsZCwgZXJyLCBpKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdHlwZSB9ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRDYW5jZWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09IEh0dHBFdmVudFR5cGUuVXBsb2FkUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLnByb2dyZXNzID0gTWF0aC5yb3VuZChyZXNwb25zZS5sb2FkZWQgLyByZXNwb25zZS50b3RhbCkgKiAxMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IEh0dHBFdmVudFR5cGUuUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLm9iamVjdFVSTCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RVcmwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0geyBvYmplY3RJZCwgbmFtZTogZmlsZS5uYW1lLCB2ZXJzaW9uOiBmaWxlLnZlcnNpb24gfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0b0luc2VydCA9IHRoaXMuZm9ybUdyb3VwLmdldCgnZmllbGRDdXN0b21pemF0aW9uJyk/LnZhbHVlWzBdLnRvSW5zZXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkQ3VzdG9taXphdGlvbiA9IHRoaXMuZm9ybUdyb3VwLmdldCgnZmllbGRDdXN0b21pemF0aW9uJyk/LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZEN1c3RvbWl6YXRpb24/LnZhbHVlPy5bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRDdXN0b21pemF0aW9uLnZhbHVlWzBdLnRvSW5zZXJ0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udG9JbnNlcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX25hbWVdOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8uc2V0VmFsdWUoYCR7ZmlsZS5vYmplY3RJZH0vJHtmaWxlLm5hbWV9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbGVzID0gW2ZpbGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudXBsb2FkQ2FuY2VsZWQgJiYgdHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRDYW5jZWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWxlcyA9IFtmaWxlXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUZpbGUoZXZlbnQ6IHsgZmlsZTogRmlsZUR0byB9LCBibG9iRmllbGQ6IEJsb2JGaWVsZENvbmZpZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB7IGZpbGUgfSA9IGV2ZW50O1xuXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgocmVjb3JkKSA9PiByZWNvcmQubmFtZSA9PT0gYmxvYkZpZWxkLm5hbWUpIGFzIEJsb2JGaWVsZENvbmZpZztcblxuICAgICAgICBmaWVsZCEuZmlsZXMgPSBbXTtcblxuICAgICAgICBpZiAoZmlsZS5vYmplY3RJZCkge1xuICAgICAgICAgICAgLy8gUXVhbmRvIMOpIHVtIGFycXVpdm8gasOhIHNhbHZvIG8gb2JqZWN0SWQgasOhIMOpIG5vIGZvcm1hdG8gXCJvYmplY3RJZC9uYW1lXCJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsZS5zYXZlZEZpbGUgPyBgJHtmaWxlLm9iamVjdElkfWAgOiBgJHtmaWxlLm9iamVjdElkfS8ke2ZpbGUubmFtZX1gO1xuICAgICAgICAgICAgY29uc3QgdG9EZWxldGUgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpIS52YWx1ZVswXS50b0RlbGV0ZTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpIS52YWx1ZVswXS50b0luc2VydFtmaWVsZCEubmFtZV07XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpIS52YWx1ZVswXS50b0RlbGV0ZSA9IHtcbiAgICAgICAgICAgICAgICAuLi50b0RlbGV0ZSxcbiAgICAgICAgICAgICAgICBbZmllbGQhLm5hbWVdOiBbLi4uKHRvRGVsZXRlW2ZpZWxkIS5uYW1lXSB8fCBbXSksIHZhbHVlXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQhLm5hbWUpIS5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGZpZWxkIS5uYW1lKSEuc2V0VmFsdWUoJycpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQhLm5hbWUpIS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYW5jZWxVcGxvYWQoaW5kZXg6IG51bWJlciwgZm9ybUZpZWxkOiBCbG9iRmllbGRDb25maWcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGxvYWRDYW5jZWxlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgocmVjb3JkKSA9PiByZWNvcmQubmFtZSA9PT0gZm9ybUZpZWxkLm5hbWUpIGFzIEJsb2JGaWVsZENvbmZpZztcbiAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IF9uYW1lID0gZmllbGQubmFtZTtcbiAgICAgICAgY29uc3QgX2ZpbGVzID0gZmllbGQuZmlsZXMgfHwgW107XG4gICAgICAgIF9maWxlc1tpbmRleF0/LnVwbG9hZFN1YnNjcmliZT8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgZmllbGQuZmlsZXMgPSBbXTtcbiAgICAgICAgY29uc3QgZmllbGRDdXN0b21pemF0aW9uID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWVsZEN1c3RvbWl6YXRpb24nKT8udmFsdWVbMF07XG4gICAgICAgIGRlbGV0ZSBmaWVsZEN1c3RvbWl6YXRpb24udG9JbnNlcnRbX25hbWVdO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8uc2V0VmFsdWUoJycpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZWZhbHRDYXRjaEVycm9yKGZpZWxkOiBCbG9iRmllbGRDb25maWcsIGVycjogSHR0cEVycm9yUmVzcG9uc2UsIGluZGV4OiBudW1iZXIpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IGZpZWxkO1xuICAgICAgICBpZiAoZmlsZXMpIHtcbiAgICAgICAgICAgIGZpbGVzW2luZGV4XS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgIGZpbGVzW2luZGV4XS5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgZmllbGQuZmlsZXMgPSBbLi4uZmlsZXNdO1xuICAgICAgICAgICAgY29uc3QgX25hbWUgPSBmaWVsZC5uYW1lO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8uc2V0VmFsaWRhdG9ycyhbZXJyb3JPblVwbG9hZChmaWxlc1tpbmRleF0pXSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ2Vycm9yIGluIHVwbG9hZCBmaWxlLiBEZXRhaWxzOiAnICsgZXJyLm1lc3NhZ2UpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignZXJyb3IgaW4gdXBsb2FkIGZpbGUuIERldGFpbHM6ICcgKyBlcnIubWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2xhdGVMYWJlbChsYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGAke3RoaXMuZG9tYWlufS4ke3RoaXMuc2VydmljZX0uJHtsYWJlbH1gKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZERpc3BsYXlUaW1lSW5mb1NpZ25Ub0ZpZWxkcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGZpZWxkLmRpc3BsYXlUaW1lSW5mb1NpZ24gPSB0aGlzLmRpc3BsYXlUaW1lSW5mb1NpZ247XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNVcGxvYWRpbmcoZmlsZTogRmlsZUR0byk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKCkgPT4gKGZpbGUuaXNVcGxvYWRpbmcgPyB7IGlzVXBsb2FkaW5nOiB0cnVlIH0gOiBudWxsKTtcbn1cblxuZnVuY3Rpb24gZXJyb3JPblVwbG9hZChmaWxlOiBGaWxlRHRvKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoKSA9PiAoZmlsZS5lcnJvciA/IHsgdXBsb2FkRXJyb3I6IHRydWUgfSA6IG51bGwpO1xufVxuXG4iLCJAbGV0IGVycm9yTWVzc2FnZXMgPVxuICAgIHtcbiAgICAgICAgcGF0dGVybjogaW52YWxpZEVycm9yTGFiZWwsXG4gICAgICAgIHJlcXVpcmVkOiByZXF1aXJlZEVycm9yTWVzc2FnZSxcbiAgICB9O1xuXG48cy1keW5hbWljLWZvcm1cbiAgICBbY29uZmlnc109XCJkeW5hbWljU3RydWN0dXJlXCJcbiAgICBbZm9ybV09XCJmb3JtR3JvdXBcIlxuICAgIFtlcnJvck1lc3NhZ2VzXT1cImVycm9yTWVzc2FnZXNcIlxuPlxuPC9zLWR5bmFtaWMtZm9ybT5cblxuIl19
|
|
@@ -18,7 +18,7 @@ export const apiTypesToDynamicFormType = (type) => {
|
|
|
18
18
|
switch (type) {
|
|
19
19
|
case 'String':
|
|
20
20
|
case 'Any':
|
|
21
|
-
return '
|
|
21
|
+
return 'string';
|
|
22
22
|
case 'Binary':
|
|
23
23
|
return 'binary';
|
|
24
24
|
case 'Blob':
|
|
@@ -30,7 +30,7 @@ export const apiTypesToDynamicFormType = (type) => {
|
|
|
30
30
|
return 'date';
|
|
31
31
|
case 'Enumeration':
|
|
32
32
|
case 'Enum':
|
|
33
|
-
return '
|
|
33
|
+
return 'enum';
|
|
34
34
|
case 'Boolean':
|
|
35
35
|
return 'boolean';
|
|
36
36
|
case 'Money':
|
|
@@ -39,4 +39,4 @@ export const apiTypesToDynamicFormType = (type) => {
|
|
|
39
39
|
return 'legacyNumber';
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvbW9kZWxzL2N1c3RvbS1maWVsZC10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBTixJQUFZLGVBY1g7QUFkRCxXQUFZLGVBQWU7SUFDdkIsb0NBQWlCLENBQUE7SUFDakIsc0NBQW1CLENBQUE7SUFDbkIsc0NBQW1CLENBQUE7SUFDbkIsb0NBQWlCLENBQUE7SUFDakIsZ0NBQWEsQ0FBQTtJQUNiLHdDQUFxQixDQUFBO0lBQ3JCLGtEQUErQixDQUFBO0lBQy9CLGdDQUFhLENBQUE7SUFDYixrQ0FBZSxDQUFBO0lBQ2YsZ0NBQWEsQ0FBQTtJQUNiLG9DQUFpQixDQUFBO0lBQ2pCLDhCQUFXLENBQUE7SUFDWCxnQ0FBYSxDQUFBO0FBQ2pCLENBQUMsRUFkVyxlQUFlLEtBQWYsZUFBZSxRQWMxQjtBQUlELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsSUFBeUIsRUFBYSxFQUFFO0lBQzlFLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDWCxLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssS0FBSztZQUNOLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLEtBQUssUUFBUTtZQUNULE9BQU8sUUFBUSxDQUFDO1FBQ3BCLEtBQUssTUFBTTtZQUNQLE9BQU8sTUFBTSxDQUFDO1FBQ2xCLEtBQUssVUFBVSxDQUFDO1FBQ2hCLEtBQUssTUFBTSxDQUFDO1FBQ1osS0FBSyxNQUFNLENBQUM7UUFDWixLQUFLLGVBQWU7WUFDaEIsT0FBTyxNQUFNLENBQUM7UUFDbEIsS0FBSyxhQUFhLENBQUM7UUFDbkIsS0FBSyxNQUFNO1lBQ1AsT0FBTyxNQUFNLENBQUM7UUFDbEIsS0FBSyxTQUFTO1lBQ1YsT0FBTyxTQUFTLENBQUM7UUFDckIsS0FBSyxPQUFPLENBQUM7UUFDYixLQUFLLFFBQVEsQ0FBQztRQUNkLEtBQUssU0FBUztZQUNWLE9BQU8sY0FBYyxDQUFDO0lBQzlCLENBQUM7QUFDTCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZFR5cGUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2R5bmFtaWMtZm9ybSc7XG5cbmV4cG9ydCBlbnVtIEN1c3RvbUZpZWxkVHlwZSB7XG4gICAgU3RyaW5nID0gJ1N0cmluZycsXG4gICAgQm9vbGVhbiA9ICdCb29sZWFuJyxcbiAgICBJbnRlZ2VyID0gJ0ludGVnZXInLFxuICAgIERvdWJsZSA9ICdEb3VibGUnLFxuICAgIERhdGUgPSAnRGF0ZScsXG4gICAgRGF0ZVRpbWUgPSAnRGF0ZVRpbWUnLFxuICAgIExvY2FsRGF0ZVRpbWUgPSAnTG9jYWxEYXRlVGltZScsXG4gICAgVGltZSA9ICdUaW1lJyxcbiAgICBNb25leSA9ICdNb25leScsXG4gICAgQmxvYiA9ICdCbG9iJyxcbiAgICBCaW5hcnkgPSAnQmluYXJ5JyxcbiAgICBBbnkgPSAnQW55JyxcbiAgICBFbnVtID0gJ0VudW0nLFxufVxuXG5leHBvcnQgdHlwZSBDdXN0b21GaWVsZHNUeXBlQVBJID0gJ0VudW1lcmF0aW9uJyB8IGtleW9mIHR5cGVvZiBDdXN0b21GaWVsZFR5cGU7XG5cbmV4cG9ydCBjb25zdCBhcGlUeXBlc1RvRHluYW1pY0Zvcm1UeXBlID0gKHR5cGU6IEN1c3RvbUZpZWxkc1R5cGVBUEkpOiBGaWVsZFR5cGUgPT4ge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICBjYXNlICdBbnknOlxuICAgICAgICAgICAgcmV0dXJuICdzdHJpbmcnO1xuICAgICAgICBjYXNlICdCaW5hcnknOlxuICAgICAgICAgICAgcmV0dXJuICdiaW5hcnknO1xuICAgICAgICBjYXNlICdCbG9iJzpcbiAgICAgICAgICAgIHJldHVybiAnYmxvYic7XG4gICAgICAgIGNhc2UgJ0RhdGVUaW1lJzpcbiAgICAgICAgY2FzZSAnVGltZSc6XG4gICAgICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgICBjYXNlICdMb2NhbERhdGVUaW1lJzpcbiAgICAgICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICAgIGNhc2UgJ0VudW1lcmF0aW9uJzpcbiAgICAgICAgY2FzZSAnRW51bSc6XG4gICAgICAgICAgICByZXR1cm4gJ2VudW0nO1xuICAgICAgICBjYXNlICdCb29sZWFuJzpcbiAgICAgICAgICAgIHJldHVybiAnYm9vbGVhbic7XG4gICAgICAgIGNhc2UgJ01vbmV5JzpcbiAgICAgICAgY2FzZSAnRG91YmxlJzpcbiAgICAgICAgY2FzZSAnSW50ZWdlcic6XG4gICAgICAgICAgICByZXR1cm4gJ2xlZ2FjeU51bWJlcic7XG4gICAgfVxufTtcblxuZXhwb3J0IGludGVyZmFjZSBGaWVsZEZyb21BUEkge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdHlwZTogQ3VzdG9tRmllbGRzVHlwZUFQSTtcbiAgICBjdXN0b21pemFibGU6IGJvb2xlYW47XG4gICAgY3VzdG9taXphdGlvbjogRmllbGRDdXN0b21pemF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkQ3VzdG9taXphdGlvbiB7XG4gICAgYWN0aXZlOiBib29sZWFuO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgdG9vbHRpcDogc3RyaW5nO1xuICAgIG1hc2s/OiBzdHJpbmc7XG4gICAgdmFsaWRhdGlvblJlZ2V4Pzogc3RyaW5nO1xuICAgIGN1c3RvbUVudW1lcmF0aW9uPzogQ3VzdG9tRW51bWVyYXRpb247XG4gICAgaW5mb1NpZ24/OiBzdHJpbmc7XG4gICAgbWFuZGF0b3J5PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21FbnVtZXJhdGlvbiB7XG4gICAgbXVsdGlwbGU/OiBib29sZWFuO1xuICAgIHZhbHVlczogRW51bVZhbHVlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW51bVZhbHVlIHtcbiAgICBrZXk6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbUZpZWxkc1Jlc3BvbnNlIHtcbiAgICBlbnRpdHlfOiB7XG4gICAgICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICAgICAgZmllbGRzOiBGaWVsZEZyb21BUElbXTtcbiAgICB9O1xufVxuXG4iXX0=
|