valtech-components 4.0.1000 → 4.0.1001
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/esm2022/lib/components/organisms/field-schema-editor/field-schema-editor.i18n.mjs +3 -1
- package/esm2022/lib/components/organisms/form/form.component.mjs +34 -2
- package/esm2022/lib/components/organisms/survey-builder/types.mjs +2 -1
- package/esm2022/lib/components/types.mjs +3 -1
- package/esm2022/lib/services/forms/form-schema-builder.service.mjs +14 -1
- package/esm2022/lib/services/forms/types.mjs +1 -1
- package/esm2022/lib/shared/utils/form-defaults.mjs +3 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +53 -2
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/article/article.component.d.ts +1 -3
- package/lib/components/organisms/form/form.component.d.ts +3 -0
- package/lib/components/types.d.ts +15 -1
- package/lib/services/forms/types.d.ts +12 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -22,6 +22,7 @@ export const FIELD_SCHEMA_EDITOR_I18N = {
|
|
|
22
22
|
typeEMAIL: 'Correo',
|
|
23
23
|
typePHONE: 'Teléfono',
|
|
24
24
|
typeNUMBER: 'Número',
|
|
25
|
+
typeNUMBER_PICKER: 'Número con botones',
|
|
25
26
|
typeDATE: 'Fecha',
|
|
26
27
|
typeSELECT: 'Lista desplegable',
|
|
27
28
|
typeRADIO: 'Una sola opción',
|
|
@@ -56,6 +57,7 @@ export const FIELD_SCHEMA_EDITOR_I18N = {
|
|
|
56
57
|
typeEMAIL: 'Email',
|
|
57
58
|
typePHONE: 'Phone',
|
|
58
59
|
typeNUMBER: 'Number',
|
|
60
|
+
typeNUMBER_PICKER: 'Number with buttons',
|
|
59
61
|
typeDATE: 'Date',
|
|
60
62
|
typeSELECT: 'Dropdown',
|
|
61
63
|
typeRADIO: 'Single choice',
|
|
@@ -68,4 +70,4 @@ export const FIELD_SCHEMA_EDITOR_I18N = {
|
|
|
68
70
|
typeEMOJI_RATING: 'Emoji rating',
|
|
69
71
|
},
|
|
70
72
|
};
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtc2NoZW1hLWVkaXRvci5pMThuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9maWVsZC1zY2hlbWEtZWRpdG9yL2ZpZWxkLXNjaGVtYS1lZGl0b3IuaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBcUI7SUFDeEQsRUFBRSxFQUFFO1FBQ0YsWUFBWSxFQUFFLGVBQWU7UUFDN0IsVUFBVSxFQUFFLGlCQUFpQjtRQUM3QixnQkFBZ0IsRUFBRSxvQ0FBb0M7UUFDdEQsU0FBUyxFQUFFLGVBQWU7UUFDMUIsZ0JBQWdCLEVBQUUsaUNBQWlDO1FBQ25ELFNBQVMsRUFBRSxvQkFBb0I7UUFDL0IsYUFBYSxFQUFFLGFBQWE7UUFDNUIsWUFBWSxFQUFFLFVBQVU7UUFDeEIsV0FBVyxFQUFFLDZEQUE2RDtRQUMxRSxVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLFdBQVcsRUFBRSxVQUFVO1FBQ3ZCLGtCQUFrQixFQUFFLG9CQUFvQjtRQUN4QyxZQUFZLEVBQUUsMEJBQTBCO1FBQ3hDLGFBQWEsRUFBRSxlQUFlO1FBQzlCLGNBQWMsRUFBRSxrQkFBa0I7UUFDbEMsZUFBZSxFQUFFLDBDQUEwQztRQUMzRCxvQkFBb0IsRUFBRSxrREFBa0Q7UUFDeEUsUUFBUSxFQUFFLGFBQWE7UUFDdkIsWUFBWSxFQUFFLGFBQWE7UUFDM0IsU0FBUyxFQUFFLFFBQVE7UUFDbkIsU0FBUyxFQUFFLFVBQVU7UUFDckIsVUFBVSxFQUFFLFFBQVE7UUFDcEIsaUJBQWlCLEVBQUUsb0JBQW9CO1FBQ3ZDLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFVBQVUsRUFBRSxtQkFBbUI7UUFDL0IsU0FBUyxFQUFFLGlCQUFpQjtRQUM1QixnQkFBZ0IsRUFBRSxpQkFBaUI7UUFDbkMsU0FBUyxFQUFFLFNBQVM7UUFDcEIsVUFBVSxFQUFFLFNBQVM7UUFDckIsWUFBWSxFQUFFLE9BQU87UUFDckIsY0FBYyxFQUFFLGlCQUFpQjtRQUNqQyxRQUFRLEVBQUUsU0FBUztRQUNuQixnQkFBZ0IsRUFBRSx3QkFBd0I7S0FDM0M7SUFDRCxFQUFFLEVBQUU7UUFDRixZQUFZLEVBQUUsWUFBWTtRQUMxQixVQUFVLEVBQUUsWUFBWTtRQUN4QixnQkFBZ0IsRUFBRSxnQ0FBZ0M7UUFDbEQsU0FBUyxFQUFFLFlBQVk7UUFDdkIsZ0JBQWdCLEVBQUUsOEJBQThCO1FBQ2hELFNBQVMsRUFBRSxzQkFBc0I7UUFDakMsYUFBYSxFQUFFLFVBQVU7UUFDekIsWUFBWSxFQUFFLFNBQVM7UUFDdkIsV0FBVyxFQUFFLDRDQUE0QztRQUN6RCxVQUFVLEVBQUUsWUFBWTtRQUN4QixXQUFXLEVBQUUsU0FBUztRQUN0QixrQkFBa0IsRUFBRSxpQkFBaUI7UUFDckMsWUFBWSxFQUFFLGlCQUFpQjtRQUMvQixhQUFhLEVBQUUsZUFBZTtRQUM5QixjQUFjLEVBQUUsZ0JBQWdCO1FBQ2hDLGVBQWUsRUFBRSwwQ0FBMEM7UUFDM0Qsb0JBQW9CLEVBQUUsNENBQTRDO1FBQ2xFLFFBQVEsRUFBRSxZQUFZO1FBQ3RCLFlBQVksRUFBRSxXQUFXO1FBQ3pCLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLFNBQVMsRUFBRSxPQUFPO1FBQ2xCLFVBQVUsRUFBRSxRQUFRO1FBQ3BCLGlCQUFpQixFQUFFLHFCQUFxQjtRQUN4QyxRQUFRLEVBQUUsTUFBTTtRQUNoQixVQUFVLEVBQUUsVUFBVTtRQUN0QixTQUFTLEVBQUUsZUFBZTtRQUMxQixnQkFBZ0IsRUFBRSxpQkFBaUI7UUFDbkMsU0FBUyxFQUFFLFVBQVU7UUFDckIsVUFBVSxFQUFFLFdBQVc7UUFDdkIsWUFBWSxFQUFFLFFBQVE7UUFDdEIsY0FBYyxFQUFFLFlBQVk7UUFDNUIsUUFBUSxFQUFFLE1BQU07UUFDaEIsZ0JBQWdCLEVBQUUsY0FBYztLQUNqQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYW5ndWFnZXNDb250ZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5cbmV4cG9ydCBjb25zdCBGSUVMRF9TQ0hFTUFfRURJVE9SX0kxOE46IExhbmd1YWdlc0NvbnRlbnQgPSB7XG4gIGVzOiB7XG4gICAgcHJlc2V0c1RpdGxlOiAnRW1waWV6YSBkZXNkZScsXG4gICAgbGFiZWxMYWJlbDogJ1RleHRvIGRlbCBjYW1wbycsXG4gICAgbGFiZWxQbGFjZWhvbGRlcjogJ0VzY3JpYmUgbG8gcXVlIHZlcsOhIHF1aWVuIHJlc3BvbmRlJyxcbiAgICB0eXBlTGFiZWw6ICdUaXBvIGRlIGNhbXBvJyxcbiAgICBwbGFjZWhvbGRlckxhYmVsOiAnVGV4dG8gZGUgYXl1ZGEgZGVudHJvIGRlbCBjYW1wbycsXG4gICAgaGludExhYmVsOiAnTm90YSBiYWpvIGVsIGNhbXBvJyxcbiAgICByZXF1aXJlZExhYmVsOiAnT2JsaWdhdG9yaW8nLFxuICAgIG9wdGlvbnNUaXRsZTogJ09wY2lvbmVzJyxcbiAgICBvcHRpb25zSGludDogJ0VzdGFzIHNvbiBsYXMgYWx0ZXJuYXRpdmFzIHF1ZSBwdWVkZSBlbGVnaXIgcXVpZW4gcmVzcG9uZGUuJyxcbiAgICBvcHRpb25zQWRkOiAnQWdyZWdhciBvcGNpw7NuJyxcbiAgICBvcHRpb25zTGlzdDogJ09wY2lvbmVzJyxcbiAgICBvcHRpb25zUGxhY2Vob2xkZXI6ICdFc2NyaWJlIHVuYSBvcGNpw7NuJyxcbiAgICBvcHRpb25zRW1wdHk6ICdUb2RhdsOtYSBubyBoYXkgb3BjaW9uZXMuJyxcbiAgICBvcHRpb25zUmVtb3ZlOiAnUXVpdGFyIG9wY2nDs24nLFxuICAgIG9wdGlvbnNSZW9yZGVyOiAnUmVvcmRlbmFyIG9wY2nDs24nLFxuICAgIGVycm9ySW5jb21wbGV0ZTogJ1BvbmxlIHVuIHRleHRvIGFsIGNhbXBvIHkgZWxpZ2Ugc3UgdGlwby4nLFxuICAgIGVycm9yT3B0aW9uc1JlcXVpcmVkOiAnRXN0ZSB0aXBvIGRlIGNhbXBvIG5lY2VzaXRhIGFsIG1lbm9zIHVuYSBvcGNpw7NuLicsXG4gICAgdHlwZVRFWFQ6ICdUZXh0byBjb3J0bycsXG4gICAgdHlwZVRFWFRBUkVBOiAnVGV4dG8gbGFyZ28nLFxuICAgIHR5cGVFTUFJTDogJ0NvcnJlbycsXG4gICAgdHlwZVBIT05FOiAnVGVsw6lmb25vJyxcbiAgICB0eXBlTlVNQkVSOiAnTsO6bWVybycsXG4gICAgdHlwZU5VTUJFUl9QSUNLRVI6ICdOw7ptZXJvIGNvbiBib3RvbmVzJyxcbiAgICB0eXBlREFURTogJ0ZlY2hhJyxcbiAgICB0eXBlU0VMRUNUOiAnTGlzdGEgZGVzcGxlZ2FibGUnLFxuICAgIHR5cGVSQURJTzogJ1VuYSBzb2xhIG9wY2nDs24nLFxuICAgIHR5cGVNVUxUSV9TRUxFQ1Q6ICdWYXJpYXMgb3BjaW9uZXMnLFxuICAgIHR5cGVDSEVDSzogJ0Nhc2lsbGEnLFxuICAgIHR5cGVUT0dHTEU6ICdTw60gbyBubycsXG4gICAgdHlwZUNVUlJFTkNZOiAnTW9udG8nLFxuICAgIHR5cGVBVFRBQ0hNRU5UOiAnQXJjaGl2byBhZGp1bnRvJyxcbiAgICB0eXBlRklMRTogJ0FyY2hpdm8nLFxuICAgIHR5cGVFTU9KSV9SQVRJTkc6ICdDYWxpZmljYWNpw7NuIGNvbiBlbW9qaScsXG4gIH0sXG4gIGVuOiB7XG4gICAgcHJlc2V0c1RpdGxlOiAnU3RhcnQgZnJvbScsXG4gICAgbGFiZWxMYWJlbDogJ0ZpZWxkIHRleHQnLFxuICAgIGxhYmVsUGxhY2Vob2xkZXI6ICdXcml0ZSB3aGF0IHRoZSBwZXJzb24gd2lsbCBzZWUnLFxuICAgIHR5cGVMYWJlbDogJ0ZpZWxkIHR5cGUnLFxuICAgIHBsYWNlaG9sZGVyTGFiZWw6ICdIZWxwZXIgdGV4dCBpbnNpZGUgdGhlIGZpZWxkJyxcbiAgICBoaW50TGFiZWw6ICdOb3RlIGJlbG93IHRoZSBmaWVsZCcsXG4gICAgcmVxdWlyZWRMYWJlbDogJ1JlcXVpcmVkJyxcbiAgICBvcHRpb25zVGl0bGU6ICdPcHRpb25zJyxcbiAgICBvcHRpb25zSGludDogJ1RoZXNlIGFyZSB0aGUgY2hvaWNlcyB0aGUgcGVyc29uIGNhbiBwaWNrLicsXG4gICAgb3B0aW9uc0FkZDogJ0FkZCBvcHRpb24nLFxuICAgIG9wdGlvbnNMaXN0OiAnT3B0aW9ucycsXG4gICAgb3B0aW9uc1BsYWNlaG9sZGVyOiAnV3JpdGUgYW4gb3B0aW9uJyxcbiAgICBvcHRpb25zRW1wdHk6ICdObyBvcHRpb25zIHlldC4nLFxuICAgIG9wdGlvbnNSZW1vdmU6ICdSZW1vdmUgb3B0aW9uJyxcbiAgICBvcHRpb25zUmVvcmRlcjogJ1Jlb3JkZXIgb3B0aW9uJyxcbiAgICBlcnJvckluY29tcGxldGU6ICdHaXZlIHRoZSBmaWVsZCBhIHRleHQgYW5kIHBpY2sgaXRzIHR5cGUuJyxcbiAgICBlcnJvck9wdGlvbnNSZXF1aXJlZDogJ1RoaXMgZmllbGQgdHlwZSBuZWVkcyBhdCBsZWFzdCBvbmUgb3B0aW9uLicsXG4gICAgdHlwZVRFWFQ6ICdTaG9ydCB0ZXh0JyxcbiAgICB0eXBlVEVYVEFSRUE6ICdMb25nIHRleHQnLFxuICAgIHR5cGVFTUFJTDogJ0VtYWlsJyxcbiAgICB0eXBlUEhPTkU6ICdQaG9uZScsXG4gICAgdHlwZU5VTUJFUjogJ051bWJlcicsXG4gICAgdHlwZU5VTUJFUl9QSUNLRVI6ICdOdW1iZXIgd2l0aCBidXR0b25zJyxcbiAgICB0eXBlREFURTogJ0RhdGUnLFxuICAgIHR5cGVTRUxFQ1Q6ICdEcm9wZG93bicsXG4gICAgdHlwZVJBRElPOiAnU2luZ2xlIGNob2ljZScsXG4gICAgdHlwZU1VTFRJX1NFTEVDVDogJ011bHRpcGxlIGNob2ljZScsXG4gICAgdHlwZUNIRUNLOiAnQ2hlY2tib3gnLFxuICAgIHR5cGVUT0dHTEU6ICdZZXMgb3Igbm8nLFxuICAgIHR5cGVDVVJSRU5DWTogJ0Ftb3VudCcsXG4gICAgdHlwZUFUVEFDSE1FTlQ6ICdBdHRhY2htZW50JyxcbiAgICB0eXBlRklMRTogJ0ZpbGUnLFxuICAgIHR5cGVFTU9KSV9SQVRJTkc6ICdFbW9qaSByYXRpbmcnLFxuICB9LFxufTtcbiJdfQ==
|
|
@@ -16,6 +16,7 @@ import { DatePickerComponent } from '../../molecules/date-picker/date-picker.com
|
|
|
16
16
|
import { FileInputComponent } from '../../molecules/file-input/file-input.component';
|
|
17
17
|
import { HintComponent } from '../../molecules/hint/hint.component';
|
|
18
18
|
import { NumberFromToComponent } from '../../molecules/number-from-to/number-from-to.component';
|
|
19
|
+
import { NumberPickerComponent } from '../../molecules/number-picker/number-picker.component';
|
|
19
20
|
import { PasswordInputComponent } from '../../molecules/password-input/password-input.component';
|
|
20
21
|
import { PinInputComponent } from '../../molecules/pin-input/pin-input.component';
|
|
21
22
|
import { RadioInputComponent } from '../../molecules/radio-input/radio-input.component';
|
|
@@ -70,6 +71,7 @@ export class FormComponent {
|
|
|
70
71
|
this.textInputPropMemo = new WeakMap();
|
|
71
72
|
this.datePickerPropMemo = new WeakMap();
|
|
72
73
|
this.emojiRatingPropMemo = new WeakMap();
|
|
74
|
+
this.numberPickerPropMemo = new WeakMap();
|
|
73
75
|
// Ids estables por field para el wiring de accesibilidad label↔input↔error.
|
|
74
76
|
// Estables entre CD cycles (memoizados por referencia de field) → aria-* no parpadea.
|
|
75
77
|
this.fieldIdMemo = new WeakMap();
|
|
@@ -423,6 +425,29 @@ export class FormComponent {
|
|
|
423
425
|
this.emojiRatingPropMemo.set(field, result);
|
|
424
426
|
return result;
|
|
425
427
|
}
|
|
428
|
+
getNumberPickerProp(field) {
|
|
429
|
+
const cached = this.numberPickerPropMemo.get(field);
|
|
430
|
+
if (cached)
|
|
431
|
+
return cached;
|
|
432
|
+
const control = this.getControl(field.name);
|
|
433
|
+
const result = {
|
|
434
|
+
control,
|
|
435
|
+
token: field.token,
|
|
436
|
+
label: '',
|
|
437
|
+
hint: field.hint,
|
|
438
|
+
min: field.range?.min,
|
|
439
|
+
max: field.range?.max,
|
|
440
|
+
step: field.step,
|
|
441
|
+
unitLabel: field.unitLabel,
|
|
442
|
+
variant: field.numberPickerVariant,
|
|
443
|
+
editable: field.numberPickerEditable,
|
|
444
|
+
inputMode: field.numberPickerInputMode,
|
|
445
|
+
precision: field.precision,
|
|
446
|
+
state: field.state,
|
|
447
|
+
};
|
|
448
|
+
this.numberPickerPropMemo.set(field, result);
|
|
449
|
+
return result;
|
|
450
|
+
}
|
|
426
451
|
setBooleanValue(fieldName, value) {
|
|
427
452
|
const control = this.getControl(fieldName);
|
|
428
453
|
if (control.disabled)
|
|
@@ -649,6 +674,9 @@ export class FormComponent {
|
|
|
649
674
|
@case (types.NUMBER) {
|
|
650
675
|
<val-text-input [props]="getTextInputProp(f, 'number')"></val-text-input>
|
|
651
676
|
}
|
|
677
|
+
@case (types.NUMBER_PICKER) {
|
|
678
|
+
<val-number-picker [props]="getNumberPickerProp(f)"></val-number-picker>
|
|
679
|
+
}
|
|
652
680
|
@case (types.NUMBER_FROM_TO) {
|
|
653
681
|
<val-number-from-to [props]="getFieldProp(f)"></val-number-from-to>
|
|
654
682
|
}
|
|
@@ -755,7 +783,7 @@ export class FormComponent {
|
|
|
755
783
|
}
|
|
756
784
|
</form>
|
|
757
785
|
</div>
|
|
758
|
-
`, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.container--sticky-footer{--val-form-sticky-footer-space: 7rem;padding-bottom:calc(var(--val-form-sticky-footer-space) + env(safe-area-inset-bottom))}.section{margin-top:1rem}.input{margin:var(--val-form-field-gap, .5rem) 0}@media (min-width: 768px){.input{margin:var(--val-form-field-gap, .75rem) 0}}.submit-actions{display:block;width:100%;box-sizing:border-box}.submit-actions--sticky{position:sticky;bottom:0;z-index:20;width:calc(100% + var(--val-form-sticky-footer-bleed, 0px) * 2);margin-inline:calc(var(--val-form-sticky-footer-bleed, 0px) * -1);background:var(--ion-card-background, var(--ion-background-color, #ffffff));border-top:1px solid var(--ion-color-step-150, rgba(0, 0, 0, .08));box-shadow:0 -.25rem 1rem rgba(var(--ion-text-color-rgb, 0, 0, 0),.08);padding:.75rem var(--val-form-sticky-footer-inline-padding, var(--val-form-sticky-footer-bleed, 0px)) max(.75rem,env(safe-area-inset-bottom));isolation:isolate;transform:translateZ(0)}.field-description{display:block;font-size:.75rem;color:var(--ion-color-dark);margin-bottom:.25rem;line-height:1.4}.email-suggestion{margin:6px 0 0;font-size:.875rem;color:var(--ion-text-color, #000)}.email-suggestion__apply{padding:0;margin-left:4px;background:none;border:none;font:inherit;font-weight:700;color:var(--ion-color-primary);text-decoration:underline;cursor:pointer}.boolean-answer{display:inline-flex;width:fit-content;gap:.25rem;padding:.25rem;border:1px solid var(--ion-color-light-shade, #d7d8da);border-radius:999px;background:var(--ion-color-light, #f4f5f8)}.boolean-answer__option{min-width:3.5rem;min-height:2.25rem;border:0;border-radius:999px;background:transparent;color:var(--ion-color-medium);font:inherit;font-weight:700;cursor:pointer}.boolean-answer__option--active{background:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff);box-shadow:0 .0625rem .25rem rgba(var(--ion-color-dark-rgb, 34, 36, 40),.16)}.boolean-answer__option:focus-visible:focus{outline:none}.boolean-answer__option:focus-visible:focus-visible{outline:.125rem solid var(--ion-color-primary, #7026df);outline-offset:2px;border-radius:inherit}.simple-multi{display:flex;flex-direction:column;gap:.5rem}.simple-multi__option{display:flex;align-items:center;gap:.625rem;width:fit-content;color:var(--ion-text-color);cursor:pointer}.simple-multi__option input{inline-size:1.125rem;block-size:1.125rem;accent-color:var(--ion-color-primary)}.simple-multi__option input:focus-visible:focus{outline:none}.simple-multi__option input:focus-visible:focus-visible{outline:.125rem solid var(--ion-color-primary, #7026df);outline-offset:2px;border-radius:inherit}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: EmojiRatingComponent, selector: "val-emoji-rating", inputs: ["props"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["preset", "props"] }, { kind: "component", type: TextareaInputComponent, selector: "val-textarea-input", inputs: ["preset", "props"] }, { kind: "component", type: CheckInputComponent, selector: "val-check-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: DividerComponent, selector: "val-divider", inputs: ["props"] }, { kind: "component", type: HintComponent, selector: "val-hint", inputs: ["props", "id", "isError"] }, { kind: "component", type: CommentInputComponent, selector: "val-comment-input", inputs: ["props"] }, { kind: "component", type: DateInputComponent, selector: "val-date-input", inputs: ["preset", "props"] }, { kind: "component", type: FileInputComponent, selector: "val-file-input", inputs: ["props"] }, { kind: "component", type: NumberFromToComponent, selector: "val-number-from-to", inputs: ["props"] }, { kind: "component", type: RadioInputComponent, selector: "val-radio-input", inputs: ["props"] }, { kind: "component", type: PasswordInputComponent, selector: "val-password-input", inputs: ["preset", "props"] }, { kind: "component", type: PinInputComponent, selector: "val-pin-input", inputs: ["props"] }, { kind: "component", type: SelectSearchComponent, selector: "val-select-search", inputs: ["label", "labelProperty", "valueProperty", "multiple", "placeholder", "props"] }, { kind: "component", type: MultiSelectSearchComponent, selector: "val-multi-select-search", inputs: ["label", "labelProperty", "valueProperty", "placeholder", "props"] }, { kind: "component", type: SearchSelectorComponent, selector: "val-select-input", inputs: ["preset", "props"] }, { kind: "component", type: PhoneInputComponent, selector: "val-phone-input", inputs: ["preset", "props"], outputs: ["phoneChange"] }, { kind: "component", type: CheckboxRadioInputComponent, selector: "val-checkbox-radio-input", inputs: ["props"] }, { kind: "component", type: ChipSelectComponent, selector: "val-chip-select", inputs: ["props"] }, { kind: "component", type: UsernameInputComponent, selector: "val-username-input", inputs: ["props"] }, { kind: "component", type: AttachmentUploaderComponent, selector: "val-attachment-uploader", inputs: ["props"], outputs: ["attachmentsChange"] }, { kind: "component", type: DatePickerComponent, selector: "val-date-picker", inputs: ["props"], outputs: ["valueChange"] }] }); }
|
|
786
|
+
`, isInline: true, styles: ["@charset \"UTF-8\";:root{--val-container-sm: 540px;--val-container-md: 720px;--val-container-lg: 880px;--val-container-xl: 1100px;--val-container-xl-wide: 1280px;--val-container-md-wide: 900px;--val-container-aside: 0px;--val-container-padding: 16px;--val-radius-xs: 10px;--val-radius-sm: 16px;--val-radius-md: 20px;--val-radius-lg: 28px;--val-radius-xl: 36px;--val-radius-full: 999px;--ion-color-primary: #7026df;--ion-color-primary-rgb: 112, 38, 223;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #6321c4;--ion-color-primary-tint: #7e3ce2;--ion-color-secondary: #e2ccff;--ion-color-secondary-rgb: 226, 204, 255;--ion-color-secondary-contrast: #000000;--ion-color-secondary-contrast-rgb: 0, 0, 0;--ion-color-secondary-shade: #c7b4e0;--ion-color-secondary-tint: #e5d1ff;--ion-color-texti: #354c69;--ion-color-texti-rgb: 53, 76, 105;--ion-color-texti-contrast: #ffffff;--ion-color-texti-contrast-rgb: 255, 255, 255;--ion-color-texti-shade: #2f435c;--ion-color-texti-tint: #495e78;--ion-color-darki: #090f1b;--ion-color-darki-rgb: 9, 15, 27;--ion-color-darki-contrast: #ffffff;--ion-color-darki-contrast-rgb: 255, 255, 255;--ion-color-darki-shade: #080d18;--ion-color-darki-tint: #222732;--ion-color-medium: #9e9e9e;--ion-color-medium-rgb: 158, 158, 158;--ion-color-medium-contrast: #000000;--ion-color-medium-contrast-rgb: 0, 0, 0;--ion-color-medium-shade: #8b8b8b;--ion-color-medium-tint: #a8a8a8;--ion-color-warning: #ffde38;--ion-color-warning-rgb: 255, 222, 56;--ion-color-warning-contrast: #000000;--ion-color-warning-contrast-rgb: 0, 0, 0;--ion-color-warning-shade: #e0c331;--ion-color-warning-tint: #ffe14c;--swiper-pagination-color: var(--ion-color-primary);--swiper-navigation-color: var(--ion-color-primary);--swiper-pagination-bullet-inactive-color: var(--ion-color-dark)}body.dark,html.ion-palette-dark,body[data-theme=dark]{--ion-color-texti: #8fc1ff;--ion-color-texti-rgb: 143, 193, 255;--ion-color-texti-contrast: #000000;--ion-color-texti-contrast-rgb: 0, 0, 0;--ion-color-texti-shade: #7eaae0;--ion-color-texti-tint: #9ac7ff;--ion-color-darki: #ffffff;--ion-color-darki-rgb: 255, 255, 255;--ion-color-darki-contrast: #000000;--ion-color-darki-contrast-rgb: 0, 0, 0;--ion-color-darki-shade: #e0e0e0;--ion-color-darki-tint: #ffffff;--ion-color-primary: #8f49f8;--ion-color-primary-rgb: 143, 73, 248;--ion-color-primary-contrast: #ffffff;--ion-color-primary-contrast-rgb: 255, 255, 255;--ion-color-primary-shade: #7e40da;--ion-color-primary-tint: #9a5bf9}.ion-color-texti{--ion-color-base: var(--ion-color-texti);--ion-color-base-rgb: var(--ion-color-texti-rgb);--ion-color-contrast: var(--ion-color-texti-contrast);--ion-color-contrast-rgb: var(--ion-color-texti-contrast-rgb);--ion-color-shade: var(--ion-color-texti-shade);--ion-color-tint: var(--ion-color-texti-tint)}.ion-color-darki{--ion-color-base: var(--ion-color-darki);--ion-color-base-rgb: var(--ion-color-darki-rgb);--ion-color-contrast: var(--ion-color-darki-contrast);--ion-color-contrast-rgb: var(--ion-color-darki-contrast-rgb);--ion-color-shade: var(--ion-color-darki-shade);--ion-color-tint: var(--ion-color-darki-tint)}.container--sticky-footer{--val-form-sticky-footer-space: 7rem;padding-bottom:calc(var(--val-form-sticky-footer-space) + env(safe-area-inset-bottom))}.section{margin-top:1rem}.input{margin:var(--val-form-field-gap, .5rem) 0}@media (min-width: 768px){.input{margin:var(--val-form-field-gap, .75rem) 0}}.submit-actions{display:block;width:100%;box-sizing:border-box}.submit-actions--sticky{position:sticky;bottom:0;z-index:20;width:calc(100% + var(--val-form-sticky-footer-bleed, 0px) * 2);margin-inline:calc(var(--val-form-sticky-footer-bleed, 0px) * -1);background:var(--ion-card-background, var(--ion-background-color, #ffffff));border-top:1px solid var(--ion-color-step-150, rgba(0, 0, 0, .08));box-shadow:0 -.25rem 1rem rgba(var(--ion-text-color-rgb, 0, 0, 0),.08);padding:.75rem var(--val-form-sticky-footer-inline-padding, var(--val-form-sticky-footer-bleed, 0px)) max(.75rem,env(safe-area-inset-bottom));isolation:isolate;transform:translateZ(0)}.field-description{display:block;font-size:.75rem;color:var(--ion-color-dark);margin-bottom:.25rem;line-height:1.4}.email-suggestion{margin:6px 0 0;font-size:.875rem;color:var(--ion-text-color, #000)}.email-suggestion__apply{padding:0;margin-left:4px;background:none;border:none;font:inherit;font-weight:700;color:var(--ion-color-primary);text-decoration:underline;cursor:pointer}.boolean-answer{display:inline-flex;width:fit-content;gap:.25rem;padding:.25rem;border:1px solid var(--ion-color-light-shade, #d7d8da);border-radius:999px;background:var(--ion-color-light, #f4f5f8)}.boolean-answer__option{min-width:3.5rem;min-height:2.25rem;border:0;border-radius:999px;background:transparent;color:var(--ion-color-medium);font:inherit;font-weight:700;cursor:pointer}.boolean-answer__option--active{background:var(--ion-color-primary);color:var(--ion-color-primary-contrast, #fff);box-shadow:0 .0625rem .25rem rgba(var(--ion-color-dark-rgb, 34, 36, 40),.16)}.boolean-answer__option:focus-visible:focus{outline:none}.boolean-answer__option:focus-visible:focus-visible{outline:.125rem solid var(--ion-color-primary, #7026df);outline-offset:2px;border-radius:inherit}.simple-multi{display:flex;flex-direction:column;gap:.5rem}.simple-multi__option{display:flex;align-items:center;gap:.625rem;width:fit-content;color:var(--ion-text-color);cursor:pointer}.simple-multi__option input{inline-size:1.125rem;block-size:1.125rem;accent-color:var(--ion-color-primary)}.simple-multi__option input:focus-visible:focus{outline:none}.simple-multi__option input:focus-visible:focus-visible{outline:.125rem solid var(--ion-color-primary, #7026df);outline-offset:2px;border-radius:inherit}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: EmojiRatingComponent, selector: "val-emoji-rating", inputs: ["props"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["preset", "props"] }, { kind: "component", type: TextareaInputComponent, selector: "val-textarea-input", inputs: ["preset", "props"] }, { kind: "component", type: CheckInputComponent, selector: "val-check-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonGroupComponent, selector: "val-button-group", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: DividerComponent, selector: "val-divider", inputs: ["props"] }, { kind: "component", type: HintComponent, selector: "val-hint", inputs: ["props", "id", "isError"] }, { kind: "component", type: CommentInputComponent, selector: "val-comment-input", inputs: ["props"] }, { kind: "component", type: DateInputComponent, selector: "val-date-input", inputs: ["preset", "props"] }, { kind: "component", type: FileInputComponent, selector: "val-file-input", inputs: ["props"] }, { kind: "component", type: NumberFromToComponent, selector: "val-number-from-to", inputs: ["props"] }, { kind: "component", type: NumberPickerComponent, selector: "val-number-picker", inputs: ["props"], outputs: ["valueChange"] }, { kind: "component", type: RadioInputComponent, selector: "val-radio-input", inputs: ["props"] }, { kind: "component", type: PasswordInputComponent, selector: "val-password-input", inputs: ["preset", "props"] }, { kind: "component", type: PinInputComponent, selector: "val-pin-input", inputs: ["props"] }, { kind: "component", type: SelectSearchComponent, selector: "val-select-search", inputs: ["label", "labelProperty", "valueProperty", "multiple", "placeholder", "props"] }, { kind: "component", type: MultiSelectSearchComponent, selector: "val-multi-select-search", inputs: ["label", "labelProperty", "valueProperty", "placeholder", "props"] }, { kind: "component", type: SearchSelectorComponent, selector: "val-select-input", inputs: ["preset", "props"] }, { kind: "component", type: PhoneInputComponent, selector: "val-phone-input", inputs: ["preset", "props"], outputs: ["phoneChange"] }, { kind: "component", type: CheckboxRadioInputComponent, selector: "val-checkbox-radio-input", inputs: ["props"] }, { kind: "component", type: ChipSelectComponent, selector: "val-chip-select", inputs: ["props"] }, { kind: "component", type: UsernameInputComponent, selector: "val-username-input", inputs: ["props"] }, { kind: "component", type: AttachmentUploaderComponent, selector: "val-attachment-uploader", inputs: ["props"], outputs: ["attachmentsChange"] }, { kind: "component", type: DatePickerComponent, selector: "val-date-picker", inputs: ["props"], outputs: ["valueChange"] }] }); }
|
|
759
787
|
}
|
|
760
788
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FormComponent, decorators: [{
|
|
761
789
|
type: Component,
|
|
@@ -775,6 +803,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
775
803
|
DateInputComponent,
|
|
776
804
|
FileInputComponent,
|
|
777
805
|
NumberFromToComponent,
|
|
806
|
+
NumberPickerComponent,
|
|
778
807
|
RadioInputComponent,
|
|
779
808
|
PasswordInputComponent,
|
|
780
809
|
PinInputComponent,
|
|
@@ -861,6 +890,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
861
890
|
@case (types.NUMBER) {
|
|
862
891
|
<val-text-input [props]="getTextInputProp(f, 'number')"></val-text-input>
|
|
863
892
|
}
|
|
893
|
+
@case (types.NUMBER_PICKER) {
|
|
894
|
+
<val-number-picker [props]="getNumberPickerProp(f)"></val-number-picker>
|
|
895
|
+
}
|
|
864
896
|
@case (types.NUMBER_FROM_TO) {
|
|
865
897
|
<val-number-from-to [props]="getFieldProp(f)"></val-number-from-to>
|
|
866
898
|
}
|
|
@@ -979,4 +1011,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
979
1011
|
}], onSelectChange: [{
|
|
980
1012
|
type: Output
|
|
981
1013
|
}] } });
|
|
982
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXVDLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRXhGLE9BQU8sRUFBRSxrQkFBa0Is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Q2hCLGFBQWE7d0JBQ2IscUJBQXFCO3dCQUNyQixrQkFBa0I7d0JBQ2xCLGtCQUFrQjt3QkFDbEIscUJBQXFCO3dCQUNyQixtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsaUJBQWlCO3dCQUNqQixxQkFBcUI7d0JBQ3JCLDBCQUEwQjt3QkFDMUIsdUJBQXVCO3dCQUN2QixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsMkJBQTJCO3dCQUMzQixtQkFBbUI7d0JBQ25CLHNCQUFzQjt3QkFDdEIsMkJBQTJCO3dCQUMzQixtQkFBbUI7cUJBQ3BCLFlBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUxUO3lHQUtELEtBQUs7c0JBREosS0FBSztnQkFJTixRQUFRO3NCQURQLE1BQU07Z0JBSVAsYUFBYTtzQkFEWixNQUFNO2dCQUlQLFNBQVM7c0JBRFIsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBpbmplY3QsXG4gIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuL2kxOG4uc2VydmljZSc7XG5pbXBvcnQgeyBzdWdnZXN0RW1haWxGaXggfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3Jtcy9lbWFpbC1zdWdnZXN0aW9uJztcbmltcG9ydCB7IGlzQXRFbmQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvZG9tJztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IERpdmlkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXZpZGVyL2RpdmlkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEVtb2ppUmF0aW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZW1vamktcmF0aW5nL2Vtb2ppLXJhdGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1vamlSYXRpbmdNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2F0b21zL2Vtb2ppLXJhdGluZy90eXBlcyc7XG5pbXBvcnQgeyBUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RpdGxlL3RpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Hcm91cENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9idXR0b24tZ3JvdXAvYnV0dG9uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGVja0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2NoZWNrLWlucHV0L2NoZWNrLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb21tZW50SW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY29tbWVudC1pbnB1dC9jb21tZW50LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlUGlja2VyTWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZGF0ZS1waWNrZXIvdHlwZXMnO1xuaW1wb3J0IHsgRmlsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2ZpbGUtaW5wdXQvZmlsZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGludENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9oaW50L2hpbnQuY29tcG9uZW50JztcbmltcG9ydCB7IE51bWJlckZyb21Ub0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9udW1iZXItZnJvbS10by9udW1iZXItZnJvbS10by5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFzc3dvcmRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9wYXNzd29yZC1pbnB1dC9wYXNzd29yZC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGluSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvcGluLWlucHV0L3Bpbi1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUmFkaW9JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9yYWRpby1pbnB1dC9yYWRpby1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VhcmNoU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VsZWN0LWlucHV0L3NlbGVjdC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2VsZWN0U2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3NlbGVjdC1zZWFyY2gvc2VsZWN0LXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3RTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvbXVsdGktc2VsZWN0LXNlYXJjaC9tdWx0aS1zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0SW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdGV4dC1pbnB1dC90ZXh0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0YXJlYUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RleHRhcmVhLWlucHV0L3RleHRhcmVhLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXh0YXJlYUlucHV0TWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdGV4dGFyZWEtaW5wdXQvdHlwZXMnO1xuaW1wb3J0IHsgUGhvbmVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9waG9uZS1pbnB1dC9waG9uZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9nZ2xlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdG9nZ2xlLWlucHV0L3RvZ2dsZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hlY2tib3hSYWRpb0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2NoZWNrYm94LXJhZGlvLWlucHV0L2NoZWNrYm94LXJhZGlvLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGlwU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2NoaXAtc2VsZWN0L2NoaXAtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVc2VybmFtZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3VzZXJuYW1lLWlucHV0L3VzZXJuYW1lLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVc2VybmFtZUlucHV0TWV0YWRhdGEgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdXNlcm5hbWUtaW5wdXQvdHlwZXMnO1xuaW1wb3J0IHsgQXR0YWNobWVudFVwbG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vYXR0YWNobWVudC11cGxvYWRlci9hdHRhY2htZW50LXVwbG9hZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBdHRhY2htZW50SXRlbSB9IGZyb20gJy4uL2F0dGFjaG1lbnQtdXBsb2FkZXIvdHlwZXMnO1xuaW1wb3J0IHsgQnV0dG9uTWV0YWRhdGEsIENvbXBvbmVudFN0YXRlcywgRm9ybU1ldGFkYXRhLCBGb3JtU3VibWl0LCBJbnB1dE1ldGFkYXRhLCBJbnB1dFR5cGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1mb3JtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgRW1vamlSYXRpbmdDb21wb25lbnQsXG4gICAgVGV4dElucHV0Q29tcG9uZW50LFxuICAgIFRleHRhcmVhSW5wdXRDb21wb25lbnQsXG4gICAgQ2hlY2tJbnB1dENvbXBvbmVudCxcbiAgICBCdXR0b25Hcm91cENvbXBvbmVudCxcbiAgICBEaXZpZGVyQ29tcG9uZW50LFxuICAgIEhpbnRDb21wb25lbnQsXG4gICAgQ29tbWVudElucHV0Q29tcG9uZW50LFxuICAgIERhdGVJbnB1dENvbXBvbmVudCxcbiAgICBGaWxlSW5wdXRDb21wb25lbnQsXG4gICAgTnVtYmVyRnJvbVRvQ29tcG9uZW50LFxuICAgIFJhZGlvSW5wdXRDb21wb25lbnQsXG4gICAgUGFzc3dvcmRJbnB1dENvbXBvbmVudCxcbiAgICBQaW5JbnB1dENvbXBvbmVudCxcbiAgICBTZWxlY3RTZWFyY2hDb21wb25lbnQsXG4gICAgTXVsdGlTZWxlY3RTZWFyY2hDb21wb25lbnQsXG4gICAgU2VhcmNoU2VsZWN0b3JDb21wb25lbnQsXG4gICAgUGhvbmVJbnB1dENvbXBvbmVudCxcbiAgICBUb2dnbGVJbnB1dENvbXBvbmVudCxcbiAgICBDaGVja2JveFJhZGlvSW5wdXRDb21wb25lbnQsXG4gICAgQ2hpcFNlbGVjdENvbXBvbmVudCxcbiAgICBVc2VybmFtZUlucHV0Q29tcG9uZW50LFxuICAgIEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCxcbiAgICBEYXRlUGlja2VyQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiY29udGFpbmVyXCJcbiAgICAgIFtjbGFzcy5jb250YWluZXItLXN0aWNreS1mb290ZXJdPVwicHJvcHMuc3RpY2t5Rm9vdGVyICYmICFwcm9wcy5jb250cm9sbGVkXCJcbiAgICAgIFtzdHlsZS4tLXZhbC1mb3JtLWZpZWxkLWdhcF09XCJwcm9wcy5maWVsZFNwYWNpbmcgIT0gbnVsbCA/IHByb3BzLmZpZWxkU3BhY2luZyArICdweCcgOiBudWxsXCJcbiAgICA+XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIj5cbiAgICAgICAgQGlmIChwcm9wcy5uYW1lKSB7XG4gICAgICAgICAgPHZhbC1kaXNwbGF5XG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBjb250ZW50OiBwcm9wcy5uYW1lLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvdmFsLWRpc3BsYXk+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAocyBvZiBwcm9wcy5zZWN0aW9uczsgdHJhY2sgcy5uYW1lKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cbiAgICAgICAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgY29udGVudDogcy5uYW1lLCBzaXplOiAnbGFyZ2UnLCBjb2xvcjogJycsIGJvbGQ6IGZhbHNlIH1cIj48L3ZhbC10aXRsZT5cbiAgICAgICAgICAgIEBmb3IgKGYgb2Ygcy5maWVsZHM7IHRyYWNrIGYubmFtZSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXRcIiBbYXR0ci5kYXRhLXRlc3RpZF09XCJmLnRva2VuXCI+XG4gICAgICAgICAgICAgICAgQGlmIChmLnR5cGUgIT09IHR5cGVzLlBIT05FICYmIGYudHlwZSAhPT0gdHlwZXMuSEFORExFICYmIGYudHlwZSAhPT0gdHlwZXMuQVRUQUNITUVOVCkge1xuICAgICAgICAgICAgICAgICAgPGRpdiBbYXR0ci5pZF09XCJsYWJlbElkKGYpXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtdGl0bGUgW3Byb3BzXT1cInsgY29udGVudDogZi5sYWJlbCwgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJywgYm9sZDogZmFsc2UgfVwiPjwvdmFsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoZi5kZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC1kZXNjcmlwdGlvblwiPnt7IGYuZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBzd2l0Y2ggKGYudHlwZSkge1xuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLlRFWFQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC10ZXh0LWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLlRFWFRBUkVBKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtdGV4dGFyZWEtaW5wdXQgW3Byb3BzXT1cImdldFRleHRhcmVhUHJvcChmKVwiPjwvdmFsLXRleHRhcmVhLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkNIRUNLKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtY2hlY2staW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLWNoZWNrLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkNPTU1FTlQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1jb21tZW50LWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1jb21tZW50LWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkRBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1kYXRlLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1kYXRlLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkVNQUlMKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwiZ2V0VGV4dElucHV0UHJvcChmLCAnZW1haWwnKVwiPjwvdmFsLXRleHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3VnZXJlbmNpYSBkZSBkb21pbmlvLiBTZSBPRlJFQ0UsIG5vIHNlIGFwbGljYSBzb2xhOiB1blxuICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWluaW8gY29ycG9yYXRpdm8gbGVnw610aW1vIHB1ZWRlIHBhcmVjZXJzZSBhIHVub1xuICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2l2bywgeSBjb3JyZWdpcmxvIHBvciBzdSBjdWVudGEgbGUgY2FtYmlhcsOtYSBlbFxuICAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlbyBhIGFsZ3VpZW4gcXVlIGxvIGVzY3JpYmnDsyBiaWVuLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChlbWFpbFN1Z2dlc3Rpb25Gb3IoZik7IGFzIHN1Z2VyaWRvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJlbWFpbC1zdWdnZXN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBlbWFpbFN1Z2dlc3Rpb25RdWVzdGlvbihzdWdlcmlkbykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZW1haWwtc3VnZ2VzdGlvbl9fYXBwbHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlFbWFpbFN1Z2dlc3Rpb24oZiwgc3VnZXJpZG8pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZW1haWxTdWdnZXN0aW9uQXBwbHlMYWJlbCgpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5GSUxFKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtZmlsZS1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtZmlsZS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5IT1VSKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwiZ2V0VGV4dElucHV0UHJvcChmLCAndGltZScpXCI+PC92YWwtdGV4dC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5OVU1CRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJnZXRUZXh0SW5wdXRQcm9wKGYsICdudW1iZXInKVwiPjwvdmFsLXRleHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuTlVNQkVSX0ZST01fVE8pIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1udW1iZXItZnJvbS10byBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtbnVtYmVyLWZyb20tdG8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuUEFTU1dPUkQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1wYXNzd29yZC1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtcGFzc3dvcmQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuUElOX0NPREUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1waW4taW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXBpbi1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5SQURJTykge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXJhZGlvLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1yYWRpby1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5TRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1zZWxlY3QtaW5wdXQgW3Byb3BzXT1cImdldFNlbGVjdFByb3AoZilcIj48L3ZhbC1zZWxlY3QtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuU0VBUkNIX1NFTEVDVCkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXNlbGVjdC1zZWFyY2ggW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXNlbGVjdC1zZWFyY2g+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuTVVMVElfU0VMRUNUKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtbXVsdGktc2VsZWN0LXNlYXJjaCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtbXVsdGktc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5NVUxUSV9TRUxFQ1RfU0lNUExFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW1wbGUtbXVsdGlcIiByb2xlPVwiZ3JvdXBcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxJZChmKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdCBvZiBvcmRlcmVkT3B0aW9ucyhmKTsgdHJhY2sgb3B0LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzaW1wbGUtbXVsdGlfX29wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2ltcGxlTXVsdGlTZWxlY3RlZChmLm5hbWUsIG9wdC5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0U2ltcGxlTXVsdGlTZWxlY3RlZChmLm5hbWUsIG9wdC5pZCwgJGFueSgkZXZlbnQudGFyZ2V0KS5jaGVja2VkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG9wdC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLlBIT05FKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtcGhvbmUtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXBob25lLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkhBTkRMRSkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXVzZXJuYW1lLWlucHV0IFtwcm9wc109XCJnZXRVc2VybmFtZVByb3AoZilcIj48L3ZhbC11c2VybmFtZS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5UT0dHTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2xlYW4tYW5zd2VyXCIgcm9sZT1cImdyb3VwXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWQoZilcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9vbGVhbi1hbnN3ZXJfX29wdGlvbiBzdXJ2ZXktcmVzcG9uc2VfX2Jvb2xlYW4tb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ib29sZWFuLWFuc3dlcl9fb3B0aW9uLS1hY3RpdmVdPVwiZ2V0Q29udHJvbChmLm5hbWUpLnZhbHVlID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJnZXRDb250cm9sKGYubmFtZSkudmFsdWUgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEJvb2xlYW5WYWx1ZShmLm5hbWUsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBib29sZWFuWWVzTGFiZWwoKSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib29sZWFuLWFuc3dlcl9fb3B0aW9uIHN1cnZleS1yZXNwb25zZV9fYm9vbGVhbi1vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJvb2xlYW4tYW5zd2VyX19vcHRpb24tLWFjdGl2ZV09XCJnZXRDb250cm9sKGYubmFtZSkudmFsdWUgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJnZXRDb250cm9sKGYubmFtZSkudmFsdWUgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRCb29sZWFuVmFsdWUoZi5uYW1lLCBmYWxzZSlcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGJvb2xlYW5Ob0xhYmVsKCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuQ0hFQ0tCT1hfUkFESU8pIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1jaGVja2JveC1yYWRpby1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtY2hlY2tib3gtcmFkaW8taW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuRU1PSklfUkFUSU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtZW1vamktcmF0aW5nIFtwcm9wc109XCJnZXRFbW9qaVJhdGluZ1Byb3AoZilcIj48L3ZhbC1lbW9qaS1yYXRpbmc+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuQ0hJUF9TRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1jaGlwLXNlbGVjdCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtY2hpcC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuQVRUQUNITUVOVCkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLWF0dGFjaG1lbnQtdXBsb2FkZXJcbiAgICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGYubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaW50OiBmLmhpbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRGbjogZi51cGxvYWRGbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmLnN0YXRlID09PSBzdGF0ZXMuRElTQUJMRUQgfHwgZi5zdGF0ZSA9PT0gc3RhdGVzLldPUktJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGF0dGFjaG1lbnRzQ2hhbmdlKT1cIm9uQXR0YWNobWVudENoYW5nZShmLm5hbWUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC92YWwtYXR0YWNobWVudC11cGxvYWRlcj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5EQVRFX1BJQ0tFUikge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLWRhdGUtcGlja2VyIFtwcm9wc109XCJnZXREYXRlUGlja2VyUHJvcChmKVwiPjwvdmFsLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8dmFsLWhpbnQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiIFtpZF09XCJlcnJvcklkKGYpXCI+PC92YWwtaGludD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHByb3BzLnNob3dEaXZpZGVycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgPHZhbC1kaXZpZGVyIFtwcm9wc109XCJ7IGZpbGw6ICdzb2xpZCcsIHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ21lZGl1bScgfVwiPjwvdmFsLWRpdmlkZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghcHJvcHMuY29udHJvbGxlZCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJtaXQtYWN0aW9uc1wiIFtjbGFzcy5zdWJtaXQtYWN0aW9ucy0tc3RpY2t5XT1cInByb3BzLnN0aWNreUZvb3RlclwiPlxuICAgICAgICAgICAgPHZhbC1idXR0b24tZ3JvdXBcbiAgICAgICAgICAgICAgW3Byb3BzXT1cInsgYnV0dG9uczogYWN0aW9ucywgcG9zaXRpb246ICdjZW50ZXInLCBjb2x1bW5lZDogZmFsc2UgfVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInN1Ym1pdEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC92YWwtYnV0dG9uLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBEb0NoZWNrIHtcbiAgQElucHV0KClcbiAgcHJvcHM6IEZvcm1NZXRhZGF0YTtcblxuICBAT3V0cHV0KClcbiAgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1TdWJtaXQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkludmFsaWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uU2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpZWxkOiBzdHJpbmc7IHZhbHVlOiBhbnkgfT4oKTtcblxuICBmb3JtOiBGb3JtR3JvdXA7XG4gIHR5cGVzID0gSW5wdXRUeXBlO1xuICBzdGF0ZXMgPSBDb21wb25lbnRTdGF0ZXM7XG5cbiAgLyoqXG4gICAqIFZhbG9yIGFjdHVhbCBkZWwgZm9ybSAoYGZvcm0uZ2V0UmF3VmFsdWUoKWApLCBhY3R1YWxpemFkbyBlbiBjYWRhXG4gICAqIGB2YWx1ZUNoYW5nZXNgLiBQZW5zYWRvIHBhcmEgZWwgbW9kbyBgY29udHJvbGxlZGA6IGVsIGhvc3QgbG8gbGVlIHbDrWFcbiAgICogYEBWaWV3Q2hpbGQoRm9ybUNvbXBvbmVudClgIHNpbiB0b2NhciBlbCBGb3JtR3JvdXAgZGlyZWN0by4gRW4gbW9kbyBub3JtYWxcbiAgICogdGFtYmnDqW4gZXN0w6EgZGlzcG9uaWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIGFueT4+KHt9KTtcblxuICAvKipcbiAgICogRXN0YWRvIGRlIHZhbGlkZXogZGVsIGZvcm0sIGFjdHVhbGl6YWRvIGVuIGNhZGEgYHN0YXR1c0NoYW5nZXNgLiBQYXJhIHF1ZVxuICAgKiBlbCBob3N0ICh3aXphcmQpIGhhYmlsaXRlL2Rlc2hhYmlsaXRlIHN1IGJvdMOzbiBcIlNpZ3VpZW50ZVwiLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBwcml2YXRlIGFjdGlvbnNDYWNoZTogQnV0dG9uTWV0YWRhdGFbXSA9IFtdO1xuXG4gIC8vIE1lbW8gZGUgZ2V0RmllbGRQcm9wL2dldFVzZXJuYW1lUHJvcCBwb3IgcmVmZXJlbmNpYSBkZSBmaWVsZCDigJQgZXZpdGFcbiAgLy8gY3JlYXIgdW4gbnVldm8gb2JqZXRvIHByb3BzIHBvciBrZXlzdHJva2UgKGNhZGEgQ0QgY3ljbGUgaW52b2NhcsOtYSBlbFxuICAvLyB0ZW1wbGF0ZSBiaW5kaW5nLCBtdWx0aXBsaWNhbmRvIHJlLXJlbmRlcnMgZW4gY2FzY2FkYSBwb3IgIyBmaWVsZHMpLlxuICAvLyBXZWFrTWFwOiBzaSBsYSByZWZlcmVuY2lhIGRlbCBmaWVsZCBjYW1iaWEsIGVsIGNhY2hlIHNlIGxpYmVyYS5cbiAgcHJpdmF0ZSBmaWVsZFByb3BNZW1vID0gbmV3IFdlYWtNYXA8SW5wdXRNZXRhZGF0YSwgSW5wdXRNZXRhZGF0YT4oKTtcbiAgcHJpdmF0ZSB1c2VybmFtZVByb3BNZW1vID0gbmV3IFdlYWtNYXA8SW5wdXRNZXRhZGF0YSwgVXNlcm5hbWVJbnB1dE1ldGFkYXRhPigpO1xuICBwcml2YXRlIHRleHRhcmVhUHJvcE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCBUZXh0YXJlYUlucHV0TWV0YWRhdGE+KCk7XG4gIHByaXZhdGUgc2VsZWN0UHJvcE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCBJbnB1dE1ldGFkYXRhPigpO1xuICAvLyBNZW1vIGRlIHByb3BzIGNvbiB1biBpbnB1dFR5cGUgSFRNTCBpbnllY3RhZG8gKEVNQUlML05VTUJFUi9IT1VSIGNvbGFwc2Fkb3NcbiAgLy8gZW4gdmFsLXRleHQtaW5wdXQpLiBDbGF2ZSBwb3IgZmllbGQgcGFyYSBjb25zZXJ2YXIgaWRlbnRpZGFkIGRlIHJlZmVyZW5jaWEuXG4gIHByaXZhdGUgdGV4dElucHV0UHJvcE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCBJbnB1dE1ldGFkYXRhPigpO1xuICBwcml2YXRlIGRhdGVQaWNrZXJQcm9wTWVtbyA9IG5ldyBXZWFrTWFwPElucHV0TWV0YWRhdGEsIERhdGVQaWNrZXJNZXRhZGF0YT4oKTtcbiAgcHJpdmF0ZSBlbW9qaVJhdGluZ1Byb3BNZW1vID0gbmV3IFdlYWtNYXA8SW5wdXRNZXRhZGF0YSwgRW1vamlSYXRpbmdNZXRhZGF0YT4oKTtcblxuICAvLyBJZHMgZXN0YWJsZXMgcG9yIGZpZWxkIHBhcmEgZWwgd2lyaW5nIGRlIGFjY2VzaWJpbGlkYWQgbGFiZWzihpRpbnB1dOKGlGVycm9yLlxuICAvLyBFc3RhYmxlcyBlbnRyZSBDRCBjeWNsZXMgKG1lbW9pemFkb3MgcG9yIHJlZmVyZW5jaWEgZGUgZmllbGQpIOKGkiBhcmlhLSogbm8gcGFycGFkZWEuXG4gIHByaXZhdGUgZmllbGRJZE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCB7IGxhYmVsSWQ6IHN0cmluZzsgZXJyb3JJZDogc3RyaW5nIH0+KCk7XG4gIHByaXZhdGUgZmllbGRVaWQgPSAwO1xuXG4gIC8vIEVzdGFkbyBwcmV2aW8gcGFyYSBkZXRlY3RhciBjYW1iaW9zIGVuIG5nRG9DaGVja1xuICBwcml2YXRlIHByZXZpb3VzU3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBwcmV2aW91c1VwbG9hZGluZ0NvdW50ID0gMDtcblxuICAvLyBDYW1wb3MgQVRUQUNITUVOVCBjb24gdXBsb2FkcyBlbiBjdXJzbyDigJQgYmxvcXVlYSBzdWJtaXQgKyBERVNIQUJJTElUQSBlbFxuICAvLyBib3TDs24gKG5vIGxvYWRpbmc6IGVsIHNwaW5uZXIgc2UgcmVzZXJ2YSBwYXJhIGVsIHN1Ym1pdCByZWFsIGRlbCBmb3JtKS5cbiAgcHJpdmF0ZSB1cGxvYWRpbmdGaWVsZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIC8qKiBBcm1hIGxhIGRlZmluaWNpw7NuIGRlIGNvbnRyb2xlcyAodmFsb3IgaW5pY2lhbCArIHZhbGlkYWRvcmVzKSBkZXNkZSBgcHJvcHNgLiAqL1xuICBwcml2YXRlIGJ1aWxkRm9ybUNvbnRyb2xzRGVmKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICBjb25zdCBmb3JtQ29udHJvbHMgPSB7fTtcbiAgICB0aGlzLnByb3BzLnNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgLy8gSG9ucmEgYGZpZWxkLnZhbHVlYCBhbCBjb25zdHJ1aXIgZWwgRm9ybUdyb3VwIHBhcmEgcXVlIGNvbnRyb2xlcyB0aXBvXG4gICAgICAgIC8vIEhBTkRMRSAocXVlIGNvbnN1bWVuIGVsIGNvbnRyb2wgZGlyZWN0byB2aWEgW2Zvcm1Db250cm9sXSkgcmVjaWJhbiBlbFxuICAgICAgICAvLyB2YWxvciBpbmljaWFsIHNpbiBxdWUgZWwgY2FsbGVyIHRlbmdhIHF1ZSBwYXRjaFZhbHVlIHBvc3QtbW91bnQuXG4gICAgICAgIC8vIEVsIGhlbHBlciBhcHBseURlZmF1bHRWYWx1ZVRvQ29udHJvbCAodmFsLXRleHQtaW5wdXQgZXRjLikgc2lndWVcbiAgICAgICAgLy8gZnVuY2lvbmFuZG8g4oCUIGVzY3JpYmUgc29icmUgdW4gY29udHJvbCB5YSBpbmljaWFsaXphZG8sIGlkZW1wb3RlbnRlLlxuICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPVxuICAgICAgICAgIGZpZWxkLnZhbHVlID8/XG4gICAgICAgICAgKGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuTVVMVElfU0VMRUNUX1NJTVBMRSA/IFtdIDogZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5UT0dHTEUgPyBmYWxzZSA6IG51bGwpO1xuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5OVU1CRVJfRlJPTV9UTykge1xuICAgICAgICAgIC8vIENyZWFyIGRvcyBjb250cm9sZXMgcGFyYSBjYW1wb3MgTlVNQkVSX0ZST01fVE9cbiAgICAgICAgICBmb3JtQ29udHJvbHNbYCR7ZmllbGQubmFtZX1fZnJvbWBdID0gW2luaXRpYWxWYWx1ZSwgZmllbGQudmFsaWRhdG9ycyB8fCBbXV07XG4gICAgICAgICAgZm9ybUNvbnRyb2xzW2Ake2ZpZWxkLm5hbWV9X3RvYF0gPSBbaW5pdGlhbFZhbHVlLCBmaWVsZC52YWxpZGF0b3JzIHx8IFtdXTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50eXBlID09PSB0aGlzLnR5cGVzLkFUVEFDSE1FTlQpIHtcbiAgICAgICAgICBmb3JtQ29udHJvbHNbZmllbGQubmFtZV0gPSBbW10sIGZpZWxkLnZhbGlkYXRvcnMgfHwgW11dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5uYW1lXSA9IFtpbml0aWFsVmFsdWUsIGZpZWxkLnZhbGlkYXRvcnMgfHwgW11dO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZm9ybUNvbnRyb2xzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uc3RydXllIGVsIGBGb3JtR3JvdXBgIGRlc2RlIGNlcm8sIGNvbiBsb3MgdmFsb3JlcyBpbmljaWFsZXMgZGUgYHByb3BzYFxuICAgKiBhY3R1YWxlcyAobm8gbG9zIHF1ZSBlbCB1c3VhcmlvIGhheWEgdGVjbGVhZG8gZGVzZGUgZW50b25jZXMpLlxuICAgKlxuICAgKiBFeGlzdGUgcGFyYSBlbCBjYXNvIGVuIHF1ZSBBbmd1bGFyIE5PIGRlc3RydXllIGVsIGNvbXBvbmVudGUgZW50cmUgZG9zIHVzb3NcbiAgICog4oCUIHTDrXBpY2FtZW50ZSBgSW9uaWNSb3V0ZVN0cmF0ZWd5YCwgcXVlIGNhY2hlYSBsYSBww6FnaW5hIHJ1dGVhZGEgYWwgbmF2ZWdhclxuICAgKiBhZnVlcmEgeSBsYSByZXV0aWxpemEgYWwgdm9sdmVyIHNpbiBjb3JyZXIgYG5nT25Jbml0YCBkZSBudWV2by4gU2luIGVzdG8sXG4gICAqIHVuIGZvcm0gZGUgbG9naW4gbWFudGllbmUgbG8gcXVlIGVsIHVzdWFyaW8gYW50ZXJpb3IgdGVjbGXDsyBkZXNwdcOpcyBkZVxuICAgKiBjZXJyYXIgc2VzacOzbiB5IHZvbHZlciBhIGAvbG9naW5gOiBlbCBgRm9ybUdyb3VwYCBzZSBjb25zdHJ1ecOzIFVOQSB2ZXogeVxuICAgKiBuYWRpZSBsbyB0b2PDsyBkZXNkZSBlbnRvbmNlcy5cbiAgICpcbiAgICogUmVjb25zdHJ1eWUgZWwgYEZvcm1Hcm91cGAgZW50ZXJvIChubyBgLnJlc2V0KHZhbHVlcylgKSBwb3JxdWUgbGFcbiAgICogZGVmaW5pY2nDs24gdHJhZSBgW3ZhbG9yLCB2YWxpZGF0b3JzXWAgcG9yIGNvbnRyb2wsIG5vIHZhbG9yZXMgcGxhbm9zIOKAlFxuICAgKiByZXVzYXIgYGJ1aWxkRm9ybUNvbnRyb2xzRGVmKClgIHRhbCBjdWFsIGV2aXRhIG1hbnRlbmVyIGRvcyBmb3JtYXMgZGVcbiAgICogY2FsY3VsYXIgXCJjdcOhbCBlcyBlbCB2YWxvciBpbmljaWFsXCIgcXVlIHB1ZWRhbiBkZXNpbmNyb25pemFyc2UuXG4gICAqXG4gICAqIEVsIGNhbGxlciAodMOtcGljYW1lbnRlIGB2YWwtbG9naW5gLCB2w61hIGBpb25WaWV3V2lsbEVudGVyYCkgZGVjaWRlIENVw4FORE9cbiAgICogbGxhbWFybG8g4oCUIGFjw6Egbm8gaGF5IGhldXLDrXN0aWNhIGRlIFwiY3XDoW5kbyByZXNldGVhclwiLCBwb3JxdWUgdW4gZm9ybSBkZVxuICAgKiB2YXJpb3MgcGFzb3Mgc8OtIHBvZHLDrWEgcXVlcmVyIGNvbnNlcnZhciBsbyB0ZWNsZWFkbyBhbCB2b2x2ZXIgYSB1bmFcbiAgICogcGVzdGHDsWEuXG4gICAqL1xuICByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmZvcm0pIHJldHVybjtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHRoaXMuYnVpbGRGb3JtQ29udHJvbHNEZWYoKSk7XG4gICAgdGhpcy52YWx1ZS5zZXQodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIHRoaXMudmFsaWQuc2V0KHRoaXMuZm9ybS52YWxpZCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHRoaXMuYnVpbGRGb3JtQ29udHJvbHNEZWYoKSk7XG4gICAgdGhpcy5wcm9wcy5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHNcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICB4ID0+XG4gICAgICAgICAgICB4LnR5cGUgPT09IHRoaXMudHlwZXMuU0VMRUNUIHx8XG4gICAgICAgICAgICB4LnR5cGUgPT09IHRoaXMudHlwZXMuVEVYVCB8fFxuICAgICAgICAgICAgeC50eXBlID09PSB0aGlzLnR5cGVzLlNFQVJDSF9TRUxFQ1QgfHxcbiAgICAgICAgICAgIHgudHlwZSA9PT0gdGhpcy50eXBlcy5NVUxUSV9TRUxFQ1RcbiAgICAgICAgKVxuICAgICAgICAuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgdGhpcy50cmFja1NlbGVjdENoYW5nZXMoZmllbGQubmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gRXN0YWRvIHJlYWN0aXZvIHDDumJsaWNvICh2YWx1ZS92YWxpZCkg4oCUIGFjdHVhbGl6YWRvIHBvciBzdXNjcmlwY2nDs24gUnhKUyxcbiAgICAvLyBOTyBkZW50cm8gZGUgdW4gZWZmZWN0OiBzZXRlYXIgc2lnbmFscyBhY8OhIGVzIHNlZ3VybyAobm8gZGlzcGFyYSBORzA2MDApLlxuICAgIHRoaXMudmFsdWUuc2V0KHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKTtcbiAgICB0aGlzLnZhbGlkLnNldCh0aGlzLmZvcm0udmFsaWQpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICB0aGlzLnZhbHVlLnNldChyYXdWYWx1ZSk7XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZS5lbWl0KHJhd1ZhbHVlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmZvcm0uc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy52YWxpZC5zZXQodGhpcy5mb3JtLnZhbGlkKSkpO1xuXG4gICAgdGhpcy5zeW5jRmllbGRDb250cm9sU3RhdGVzKCk7XG4gICAgdGhpcy51cGRhdGVBY3Rpb25zQ2FjaGUoKTtcbiAgICB0aGlzLnByZXZpb3VzU3RhdGUgPSB0aGlzLnByb3BzLnN0YXRlO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIEN1YW5kbyBwcm9wcyBjYW1iaWEsIHJlY29uc3RydWlyIGVsIGNhY2hlXG4gICAgaWYgKGNoYW5nZXNbJ3Byb3BzJ10gJiYgdGhpcy5mb3JtKSB7XG4gICAgICB0aGlzLnBhdGNoSW5pdGlhbFZhbHVlc0Zyb21Qcm9wcygpO1xuICAgICAgdGhpcy5zeW5jRmllbGRDb250cm9sU3RhdGVzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUFjdGlvbnNDYWNoZSgpO1xuICAgICAgdGhpcy5wcmV2aW91c1N0YXRlID0gdGhpcy5wcm9wcy5zdGF0ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhdGNoSW5pdGlhbFZhbHVlc0Zyb21Qcm9wcygpOiB2b2lkIHtcbiAgICB0aGlzLnByb3BzLnNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgaWYgKGZpZWxkLnZhbHVlID09PSB1bmRlZmluZWQgfHwgZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5BVFRBQ0hNRU5UKSByZXR1cm47XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSB0aGlzLnR5cGVzLk5VTUJFUl9GUk9NX1RPKSB7XG4gICAgICAgICAgdGhpcy5mb3JtLmdldChgJHtmaWVsZC5uYW1lfV9mcm9tYCk/LnBhdGNoVmFsdWUoZmllbGQudmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB0aGlzLmZvcm0uZ2V0KGAke2ZpZWxkLm5hbWV9X3RvYCk/LnBhdGNoVmFsdWUoZmllbGQudmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtLmdldChmaWVsZC5uYW1lKT8ucGF0Y2hWYWx1ZShmaWVsZC52YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy52YWx1ZS5zZXQodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIHRoaXMudmFsaWQuc2V0KHRoaXMuZm9ybS52YWxpZCk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgLy8gRGV0ZWN0YXIgY2FtYmlvcyBlbiBlbCBlc3RhZG8gZGVsIGZvcm11bGFyaW8gKG11dGFjacOzbiBzaW4gY2FtYmlhciByZWZlcmVuY2lhKVxuICAgIGNvbnN0IHVwbG9hZGluZ0NvdW50ID0gdGhpcy51cGxvYWRpbmdGaWVsZHMuc2l6ZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMucHJvcHMgJiZcbiAgICAgICh0aGlzLnByb3BzLnN0YXRlICE9PSB0aGlzLnByZXZpb3VzU3RhdGUgfHwgdXBsb2FkaW5nQ291bnQgIT09IHRoaXMucHJldmlvdXNVcGxvYWRpbmdDb3VudClcbiAgICApIHtcbiAgICAgIHRoaXMucHJldmlvdXNTdGF0ZSA9IHRoaXMucHJvcHMuc3RhdGU7XG4gICAgICB0aGlzLnByZXZpb3VzVXBsb2FkaW5nQ291bnQgPSB1cGxvYWRpbmdDb3VudDtcbiAgICAgIHRoaXMudXBkYXRlQWN0aW9uc0NhY2hlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXplcyBmb3JtIGNvbnRyb2wgZGlzYWJsZWQvZW5hYmxlZCBzdGF0ZSB3aXRoIGZpZWxkIG1ldGFkYXRhLlxuICAgKi9cbiAgcHJpdmF0ZSBzeW5jRmllbGRDb250cm9sU3RhdGVzKCkge1xuICAgIHRoaXMucHJvcHMuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5BVFRBQ0hNRU5UKSByZXR1cm47XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSB0aGlzLnR5cGVzLk5VTUJFUl9GUk9NX1RPKSB7XG4gICAgICAgICAgY29uc3QgZnJvbUNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woYCR7ZmllbGQubmFtZX1fZnJvbWApO1xuICAgICAgICAgIGNvbnN0IHRvQ29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChgJHtmaWVsZC5uYW1lfV90b2ApO1xuXG4gICAgICAgICAgaWYgKGZpZWxkLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQpIHtcbiAgICAgICAgICAgIGZyb21Db250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdG9Db250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcm9tQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdG9Db250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGQubmFtZSk7XG4gICAgICAgICAgaWYgKGZpZWxkLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBlbCBjYWNoZSBkZSBhY3Rpb25zIGJhc2FkbyBlbiBlbCBlc3RhZG8gYWN0dWFsIGRlbCBmb3JtLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVBY3Rpb25zQ2FjaGUoKSB7XG4gICAgLy8gRW4gbW9kbyBjb250cm9sbGVkIChvIHNpbiBzdWJtaXQpIG5vIGhheSBib3TDs24gcHJvcGlvIHF1ZSBjYWNoZWFyLlxuICAgIGlmICghdGhpcy5wcm9wcy5hY3Rpb25zKSB7XG4gICAgICB0aGlzLmFjdGlvbnNDYWNoZSA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYWN0aW9uU3RhdGUgPSB0aGlzLnByb3BzLmFjdGlvbnMuc3RhdGU7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zdGF0ZSA9PT0gQ29tcG9uZW50U3RhdGVzLldPUktJTkcpIHtcbiAgICAgIC8vIFN1Ym1pdCByZWFsIGRlbCBmb3JtIGVuIGN1cnNvIOKGkiBib3TDs24gZW4gbG9hZGluZyAoc3Bpbm5lcikuXG4gICAgICBhY3Rpb25TdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0ZSA9PT0gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIHx8IHRoaXMudXBsb2FkaW5nRmllbGRzLnNpemUgPiAwKSB7XG4gICAgICAvLyBTdWJpZGEgZGUgYWRqdW50byBlbiBjdXJzbyDihpIgREVTSEFCSUxJVEFSIGVsIHN1Ym1pdCwgTk8gbG9hZGluZzogdG9kYXbDrWFcbiAgICAgIC8vIG5vIHNlIGVzdMOhIGVudmlhbmRvIGVsIGZvcm0sIHNvbG8gc3ViaWVuZG8gdW4gYXJjaGl2by4gVW4gc3Bpbm5lciBhY8OhXG4gICAgICAvLyBjb25mdW5kZSAocGFyZWNlIHF1ZSBlbCBmb3JtIHNlIGVzdMOhIGVudmlhbmRvKS5cbiAgICAgIGFjdGlvblN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0ZSA9PT0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQgfHwgdGhpcy5mb3JtPy52YWxpZCkge1xuICAgICAgYWN0aW9uU3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvbnNDYWNoZSA9IFt7IC4uLnRoaXMucHJvcHMuYWN0aW9ucywgc3RhdGU6IGFjdGlvblN0YXRlIH1dO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gQ2xlYW51cCBzdWJzY3JpcHRpb25zIHRvIGF2b2lkIG1lbW9yeSBsZWFrc1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICB0cmFja1NlbGVjdENoYW5nZXMoZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkTmFtZSk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMub25TZWxlY3RDaGFuZ2UuZW1pdCh7IGZpZWxkOiBmaWVsZE5hbWUsIHZhbHVlIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzdWJtaXRIYW5kbGVyKHRva2VuPzogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudXBsb2FkaW5nRmllbGRzLnNpemUgPiAwKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICB0aGlzLm9uSW52YWxpZC5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub25TdWJtaXQuZW1pdCh7IGZpZWxkczogdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCksIHRva2VuIH0pO1xuICB9XG5cbiAgb25BdHRhY2htZW50Q2hhbmdlKGZpZWxkTmFtZTogc3RyaW5nLCBpdGVtczogQXR0YWNobWVudEl0ZW1bXSk6IHZvaWQge1xuICAgIGNvbnN0IHJlYWR5VXJscyA9IGl0ZW1zLmZpbHRlcihhID0+IGEuc3RhdHVzID09PSAncmVhZHknICYmIGEudXJsKS5tYXAoYSA9PiBhLnVybCEpO1xuICAgIHRoaXMuZm9ybS5nZXQoZmllbGROYW1lKT8uc2V0VmFsdWUocmVhZHlVcmxzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgaWYgKGl0ZW1zLnNvbWUoYSA9PiBhLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycpKSB7XG4gICAgICB0aGlzLnVwbG9hZGluZ0ZpZWxkcy5hZGQoZmllbGROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGxvYWRpbmdGaWVsZHMuZGVsZXRlKGZpZWxkTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29udHJvbChmaWVsZDogc3RyaW5nKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkZvcm0uZ2V0KGZpZWxkKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZHMgZXN0YWJsZXMgKGxhYmVsICsgZXJyb3IpIHBhcmEgdW4gZmllbGQuIE1lbW9pemFkb3MgcG9yIHJlZmVyZW5jaWEgcGFyYVxuICAgKiBxdWUgZWwgd2lyaW5nIGBhcmlhLWxhYmVsbGVkYnlgIC8gYGFyaWEtZGVzY3JpYmVkYnlgIG5vIGNhbWJpZSBlbnRyZSBjaWNsb3NcbiAgICogZGUgY2hhbmdlIGRldGVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgZmllbGRJZHMoZmllbGQ6IElucHV0TWV0YWRhdGEpOiB7IGxhYmVsSWQ6IHN0cmluZzsgZXJyb3JJZDogc3RyaW5nIH0ge1xuICAgIGxldCBpZHMgPSB0aGlzLmZpZWxkSWRNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKCFpZHMpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSBgdmFsLWZvcm0tZmllbGQtJHt0aGlzLmZpZWxkVWlkKyt9YDtcbiAgICAgIGlkcyA9IHsgbGFiZWxJZDogYCR7YmFzZX0tbGFiZWxgLCBlcnJvcklkOiBgJHtiYXNlfS1lcnJvcmAgfTtcbiAgICAgIHRoaXMuZmllbGRJZE1lbW8uc2V0KGZpZWxkLCBpZHMpO1xuICAgIH1cbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgLyoqIElkIGRlbCBsYWJlbCB2aXNpYmxlIGRlbCBjYW1wbyAoY29uc3VtaWRvIHBvciBlbCB0ZW1wbGF0ZSArIGVsIGlucHV0KS4gKi9cbiAgbGFiZWxJZChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRJZHMoZmllbGQpLmxhYmVsSWQ7XG4gIH1cblxuICAvKiogSWQgZGVsIGNvbnRlbmVkb3IgZGUgZXJyb3IgKGB2YWwtaGludGApIGRlbCBjYW1wby4gKi9cbiAgZXJyb3JJZChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRJZHMoZmllbGQpLmVycm9ySWQ7XG4gIH1cblxuICBnZXRGaWVsZFByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBJbnB1dE1ldGFkYXRhIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmZpZWxkUHJvcE1lbW8uZ2V0KGZpZWxkKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgaWYgKCFmaWVsZC50b2tlbikge1xuICAgICAgZmllbGQudG9rZW4gPSBgaW5wdXQtJHtmaWVsZC50eXBlfS0ke2ZpZWxkLm5hbWV9YDtcbiAgICB9XG5cbiAgICBjb25zdCBpZHMgPSB0aGlzLmZpZWxkSWRzKGZpZWxkKTtcblxuICAgIGxldCByZXN1bHQ6IElucHV0TWV0YWRhdGE7XG4gICAgaWYgKGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuTlVNQkVSX0ZST01fVE8pIHtcbiAgICAgIGNvbnN0IGZyb21Db250cm9sID0gdGhpcy5nZXRDb250cm9sKGAke2ZpZWxkLm5hbWV9X2Zyb21gKTtcbiAgICAgIGNvbnN0IHRvQ29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChgJHtmaWVsZC5uYW1lfV90b2ApO1xuICAgICAgcmVzdWx0ID0geyAuLi5maWVsZCwgZnJvbUNvbnRyb2wsIHRvQ29udHJvbCwgY29udHJvbDogdW5kZWZpbmVkLCBsYWJlbElkOiBpZHMubGFiZWxJZCwgZXJyb3JJZDogaWRzLmVycm9ySWQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChmaWVsZC5uYW1lKTtcbiAgICAgIHJlc3VsdCA9IHsgLi4uZmllbGQsIGNvbnRyb2wsIGxhYmVsSWQ6IGlkcy5sYWJlbElkLCBlcnJvcklkOiBpZHMuZXJyb3JJZCB9O1xuICAgIH1cbiAgICB0aGlzLmZpZWxkUHJvcE1lbW8uc2V0KGZpZWxkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQWRhcHRlciBwYXJhIGxvcyB0aXBvcyBjb2xhcHNhZG9zIGVuIGB2YWwtdGV4dC1pbnB1dGAgKEVNQUlML05VTUJFUi9IT1VSKS5cbiAgICogUmV1c2EgYGdldEZpZWxkUHJvcGAgKGNvbiBzdSBjb250cm9sICsgd2lyaW5nIGRlIGlkcykgZSBpbnllY3RhIGVsIGBpbnB1dFR5cGVgXG4gICAqIEhUTUwgbmF0aXZvLiBNZW1vaXphZG8gcG9yIHJlZmVyZW5jaWEgZGUgZmllbGQgcGFyYSBubyByb21wZXIgbGEgaWRlbnRpZGFkLlxuICAgKi9cbiAgZ2V0VGV4dElucHV0UHJvcChmaWVsZDogSW5wdXRNZXRhZGF0YSwgaW5wdXRUeXBlOiBOb25OdWxsYWJsZTxJbnB1dE1ldGFkYXRhWydpbnB1dFR5cGUnXT4pOiBJbnB1dE1ldGFkYXRhIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnRleHRJbnB1dFByb3BNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmdldEZpZWxkUHJvcChmaWVsZCk7XG4gICAgY29uc3QgcmVzdWx0OiBJbnB1dE1ldGFkYXRhID0geyAuLi5iYXNlLCBpbnB1dFR5cGUgfTtcbiAgICB0aGlzLnRleHRJbnB1dFByb3BNZW1vLnNldChmaWVsZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkYXB0ZXIgcGFyYSBTRUxFQ1Qg4oCUIGlndWFsIHF1ZSBgZ2V0RmllbGRQcm9wYCBwZXJvIGxpbXBpYSBgbGFiZWxgLlxuICAgKiB2YWwtZm9ybSB5YSByZW5kZXJpemEgZWwgdMOtdHVsbyBkZWwgY2FtcG8gY29uIGA8dmFsLXRpdGxlPmAgYXJyaWJhIGRlbCBpbnB1dDtcbiAgICogc2kgYWRlbcOhcyBwYXPDoXJhbW9zIGBsYWJlbGAgYWwgYDxpb24tc2VsZWN0PmAsIGVzdGUgbG8gcGludGEgREVOVFJPIGRlbCBwaWxsXG4gICAqIOKGkiByZWR1bmRhbmNpYSB2aXN1YWwgKFwiVGlwb1wiIGRvcyB2ZWNlcykuIFJldXNhIGVsIG1pc21vIG1lbW8gKGNvbiBsYSBlbnRyYWRhXG4gICAqIHlhIGxhYmVsLXN0cmlwcGVkKSBwYXJhIG5vIHJvbXBlciBsYSBpZGVudGlkYWQgZGUgcmVmZXJlbmNpYS5cbiAgICovXG4gIGdldFNlbGVjdFByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBJbnB1dE1ldGFkYXRhIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnNlbGVjdFByb3BNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmdldEZpZWxkUHJvcChmaWVsZCk7XG4gICAgY29uc3QgcmVzdWx0OiBJbnB1dE1ldGFkYXRhID0geyAuLi5iYXNlLCBsYWJlbDogJycgfTtcbiAgICB0aGlzLnNlbGVjdFByb3BNZW1vLnNldChmaWVsZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkYXB0ZXIg4oCUIGNvbnZpZXJ0ZSB1biBgSW5wdXRNZXRhZGF0YWAgKGNvbiB0eXBlPUhBTkRMRSkgYSBgVXNlcm5hbWVJbnB1dE1ldGFkYXRhYC5cbiAgICogRWwgY2hlY2sgZGUgZGlzcG9uaWJpbGlkYWQgc2UgcmVzdWVsdmUgZGVudHJvIGRlbCBjb21wb25lbnQgKEF1dGhTZXJ2aWNlIGlueWVjdGFkbyk7XG4gICAqIGVsIGNhbGxlciBwdWVkZSBzb2JyZXNjcmliaXJsbyBwYXNhbmRvIGBmaWVsZC5lcnJvcnNgIG8gdW4gYFVzZXJuYW1lSW5wdXRNZXRhZGF0YWBcbiAgICogY3VzdG9tIHVzYW5kbyB0eXBlPVRFWFQgc2kgbmVjZXNpdGEgb3RyYSBmdWVudGUgZGUgdHJ1dGguXG4gICAqL1xuICBnZXRVc2VybmFtZVByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBVc2VybmFtZUlucHV0TWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMudXNlcm5hbWVQcm9wTWVtby5nZXQoZmllbGQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkLm5hbWUpO1xuICAgIGNvbnN0IHJlc3VsdDogVXNlcm5hbWVJbnB1dE1ldGFkYXRhID0ge1xuICAgICAgY29udHJvbDogY29udHJvbCBhcyBGb3JtQ29udHJvbDxzdHJpbmc+LFxuICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgaGludDogZmllbGQuaGludCxcbiAgICAgIHBsYWNlaG9sZGVyOiBmaWVsZC5wbGFjZWhvbGRlcixcbiAgICAgIG1pbkxlbmd0aDogZmllbGQucmFuZ2U/Lm1pbixcbiAgICAgIG1heExlbmd0aDogZmllbGQucmFuZ2U/Lm1heCxcbiAgICAgIGVycm9yczogZmllbGQuZXJyb3JzLFxuICAgICAgc3RhdGU6IGZpZWxkLnN0YXRlLFxuICAgIH07XG4gICAgdGhpcy51c2VybmFtZVByb3BNZW1vLnNldChmaWVsZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkYXB0ZXIg4oCUIGNvbnZpZXJ0ZSB1biBgSW5wdXRNZXRhZGF0YWAgKGNvbiB0eXBlPURBVEVfUElDS0VSKSBhIGBEYXRlUGlja2VyTWV0YWRhdGFgLlxuICAgKiBsYWJlbC9oaW50IHNlIG9taXRlbiDigJQgdmFsLWZvcm0gbG9zIHJlbmRlcml6YSB2w61hIC5maWVsZC1uYW1lLy5maWVsZC1kZXNjcmlwdGlvbi5cbiAgICovXG4gIGdldERhdGVQaWNrZXJQcm9wKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogRGF0ZVBpY2tlck1ldGFkYXRhIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmRhdGVQaWNrZXJQcm9wTWVtby5nZXQoZmllbGQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkLm5hbWUpIGFzIEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xuICAgIGNvbnN0IHJlc3VsdDogRGF0ZVBpY2tlck1ldGFkYXRhID0ge1xuICAgICAgY29udHJvbCxcbiAgICAgIHBsYWNlaG9sZGVyOiBmaWVsZC5wbGFjZWhvbGRlciB8fCB1bmRlZmluZWQsXG4gICAgICB0b2tlbjogZmllbGQudG9rZW4sXG4gICAgfTtcbiAgICB0aGlzLmRhdGVQaWNrZXJQcm9wTWVtby5zZXQoZmllbGQsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldEVtb2ppUmF0aW5nUHJvcChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IEVtb2ppUmF0aW5nTWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuZW1vamlSYXRpbmdQcm9wTWVtby5nZXQoZmllbGQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkLm5hbWUpIGFzIEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xuICAgIGNvbnN0IHJlc3VsdDogRW1vamlSYXRpbmdNZXRhZGF0YSA9IHtcbiAgICAgIGNvbnRyb2wsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBoaW50OiBmaWVsZC5oaW50LFxuICAgIH07XG4gICAgdGhpcy5lbW9qaVJhdGluZ1Byb3BNZW1vLnNldChmaWVsZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc2V0Qm9vbGVhblZhbHVlKGZpZWxkTmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGROYW1lKTtcbiAgICBpZiAoY29udHJvbC5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xuICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIG9yZGVyZWRPcHRpb25zKGZpZWxkOiBJbnB1dE1ldGFkYXRhKSB7XG4gICAgcmV0dXJuIFsuLi4oZmllbGQub3B0aW9ucyA/PyBbXSldLnNvcnQoKGEsIGIpID0+IGEub3JkZXIgLSBiLm9yZGVyKTtcbiAgfVxuXG4gIGlzU2ltcGxlTXVsdGlTZWxlY3RlZChmaWVsZE5hbWU6IHN0cmluZywgb3B0aW9uSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDb250cm9sKGZpZWxkTmFtZSkudmFsdWU7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmluY2x1ZGVzKG9wdGlvbklkKTtcbiAgfVxuXG4gIHNldFNpbXBsZU11bHRpU2VsZWN0ZWQoZmllbGROYW1lOiBzdHJpbmcsIG9wdGlvbklkOiBzdHJpbmcsIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChmaWVsZE5hbWUpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBBcnJheS5pc0FycmF5KGNvbnRyb2wudmFsdWUpID8gY29udHJvbC52YWx1ZSA6IFtdO1xuICAgIGNvbnN0IG5leHQgPSBzZWxlY3RlZCA/IFsuLi5uZXcgU2V0KFsuLi5jdXJyZW50LCBvcHRpb25JZF0pXSA6IGN1cnJlbnQuZmlsdGVyKChpZDogc3RyaW5nKSA9PiBpZCAhPT0gb3B0aW9uSWQpO1xuICAgIGNvbnRyb2wuc2V0VmFsdWUobmV4dCk7XG4gICAgY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICB9XG5cbiAgYm9vbGVhblllc0xhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGV4dG9JMThuKCd5ZXMnLCAnU8OtJyk7XG4gIH1cblxuICBib29sZWFuTm9MYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRleHRvSTE4bignbm8nLCAnTm8nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGFwdGVyIOKAlCBjb252aWVydGUgdW4gYElucHV0TWV0YWRhdGFgIChjb24gdHlwZT1URVhUQVJFQSkgYSBgVGV4dGFyZWFJbnB1dE1ldGFkYXRhYC5cbiAgICogRGVmYXVsdHMgc2Vuc2F0b3M6IGF1dG9Hcm93ICsgY291bnRlciBoYWJpbGl0YWRvLCA0LTEyIHJvd3MuXG4gICAqL1xuICBnZXRUZXh0YXJlYVByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBUZXh0YXJlYUlucHV0TWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMudGV4dGFyZWFQcm9wTWVtby5nZXQoZmllbGQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkLm5hbWUpO1xuICAgIGNvbnN0IHJlc3VsdDogVGV4dGFyZWFJbnB1dE1ldGFkYXRhID0ge1xuICAgICAgY29udHJvbDogY29udHJvbCBhcyBGb3JtQ29udHJvbDxzdHJpbmc+LFxuICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgIC8vIGxhYmVsIHZhY8OtbyDigJQgdmFsLWZvcm0geWEgcmVuZGVyaXphIGVsIHTDrXR1bG8gY29uIDx2YWwtdGl0bGU+IGFycmliYSBkZWxcbiAgICAgIC8vIGlucHV0LiBQYXNhcmxvIGFsIDxpb24tdGV4dGFyZWE+IGR1cGxpY2Fyw61hIGVsIHRleHRvIChcIkRlc2NyaXBjacOzblwiIHgyKS5cbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIGhpbnQ6IGZpZWxkLmhpbnQsXG4gICAgICBwbGFjZWhvbGRlcjogZmllbGQucGxhY2Vob2xkZXIsXG4gICAgICBhdXRvR3JvdzogdHJ1ZSxcbiAgICAgIG1pblJvd3M6IDQsXG4gICAgICBtYXhSb3dzOiAxMixcbiAgICAgIG1heExlbmd0aDogZmllbGQucmFuZ2U/Lm1heCA/PyAyMDAwLFxuICAgICAgc2hvd0NvdW50ZXI6IHRydWUsXG4gICAgICBjb3VudGVyRm9ybWF0OiAnY3VycmVudCcsXG4gICAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgICBlcnJvcnM6IGZpZWxkLmVycm9ycyxcbiAgICAgIHN0YXRlOiBmaWVsZC5zdGF0ZSxcbiAgICB9O1xuICAgIHRoaXMudGV4dGFyZWFQcm9wTWVtby5zZXQoZmllbGQsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldCBpc0F0RW5kT2ZGb3JtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0F0RW5kKHRoaXMuZWxlbWVudFJlZik7XG4gIH1cblxuICAvKipcbiAgICogRnVlcnphIG1vc3RyYXIgbG9zIGVycm9yZXMgZGUgdmFsaWRhY2nDs24gKG1hcmNhIHRvZG9zIGxvcyBjb250cm9sZXMgY29tb1xuICAgKiB0b3VjaGVkKSB5IGRldnVlbHZlIHNpIGVsIGZvcm0gZXMgdsOhbGlkby4gUGVuc2FkbyBwYXJhIGVsIG1vZG8gYGNvbnRyb2xsZWRgOlxuICAgKiBlbCBob3N0IGxvIGludm9jYSBlbiBzdSBcIlNpZ3VpZW50ZVwiIHBhcmEgZ2F0ZWFyIGxhIG5hdmVnYWNpw7NuIGRlbCB3aXphcmQuXG4gICAqL1xuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogTWFyY2EgdG9kb3MgbG9zIGNvbnRyb2xlcyBjb21vIHRvdWNoZWQgKG11ZXN0cmEgZXJyb3Jlcykgc2luIGRldm9sdmVyIG5hZGEuXG4gICAqIEFsaWFzIHNlbcOhbnRpY28gZGUgbGEgcHJpbWVyYSBtaXRhZCBkZSBgdmFsaWRhdGUoKWAuXG4gICAqL1xuICBtYXJrQWxsVG91Y2hlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICB9XG5cbiAgZ2V0IEZvcm0oKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtO1xuICB9XG5cbiAgZ2V0IEZvcm1TdGF0ZSgpOiB7IGZvcm06IEZvcm1Hcm91cDsgZGF0YTogRm9ybU1ldGFkYXRhIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtOiB0aGlzLkZvcm0sXG4gICAgICBkYXRhOiB0aGlzLnByb3BzLFxuICAgIH07XG4gIH1cblxuICBnZXQgYWN0aW9ucygpOiBCdXR0b25NZXRhZGF0YVtdIHtcbiAgICAvLyBSZXRvcm5hciBkZWwgY2FjaGUgcGFyYSBldml0YXIgY3JlYXIgbnVldm9zIG9iamV0b3MgZW4gY2FkYSBjaWNsbyBkZSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uc0NhY2hlO1xuICB9XG4gIC8vIOKUgOKUgCBTdWdlcmVuY2lhIGRlIGRvbWluaW8gZGUgY29ycmVvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvL1xuICAvLyBWaXZlIGVuIGVsIGZvcm11bGFyaW8geSBubyBlbiBjYWRhIGFwcDogZWwgY2FtcG8gRU1BSUwgeWEgZXN0w6EgY2VudHJhbGl6YWRvXG4gIC8vIGFjw6EsIGFzw60gcXVlIHRvZGEgYXBwIGRlbCBmYWN0b3J5IGhlcmVkYSBsYSBheXVkYSBzaW4gZXNjcmliaXIgdW5hIGzDrW5lYS5cbiAgLy8gTmFjZSBkZSB1biByZWJvdGUgcmVhbCBlbiBwcm9kdWNjacOzbjogdW4gdHlwbyBlbiBlbCBkb21pbmlvIGRlasOzIGEgdW5hXG4gIC8vIGNvbXByYWRvcmEgc2luIHN1cyBlbnRyYWRhcyB5IG5hZGllIHNlIGVudGVyw7MgaGFzdGEgcXVlIHJlY2xhbcOzLlxuXG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4blN1Z2dlc3Rpb24gPSBpbmplY3QoSTE4blNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIC8qKiBTdWdlcmVuY2lhcyBkZXNjYXJ0YWRhcyBwb3IgZWwgdXN1YXJpbywgcGFyYSBubyB2b2x2ZXIgYSBpbnNpc3Rpci4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzdWdnZXN0aW9uRGlzbWlzc2VkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIERldnVlbHZlIGVsIGNvcnJlbyBjb3JyZWdpZG8gYSBzdWdlcmlyLCBvIG51bGwuXG4gICAqXG4gICAqIFNvbG8gc3VnaWVyZSBjdWFuZG8gZWwgY2FtcG8gTk8gdGllbmUgZm9jbzogbWllbnRyYXMgc2UgZXNjcmliZSwgdG9kb1xuICAgKiBjb3JyZW8gYSBtZWRpbyB0ZWNsZWFyIHBhcmVjZSB1biB0eXBvIHkgbGEgc3VnZXJlbmNpYSBwYXJwYWRlYXLDrWEuXG4gICAqL1xuICBlbWFpbFN1Z2dlc3Rpb25Gb3IoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAvLyBFbCBjb250cm9sIE5PIHZpZW5lIGVuIGVsIGZpZWxkIGNydWRvOiB2YWwtZm9ybSBsbyByZXN1ZWx2ZSBwb3Igbm9tYnJlXG4gICAgLy8gY29udHJhIHN1IHByb3BpbyBGb3JtR3JvdXAgKGBnZXRDb250cm9sYCkuIExlZXIgYGZpZWxkLmNvbnRyb2xgIGRldm9sdsOtYVxuICAgIC8vIHVuZGVmaW5lZCBzaWVtcHJlLCBhc8OtIHF1ZSBsYSBzdWdlcmVuY2lhIG5vIGFwYXJlY8OtYSBudW5jYSDigJQgeSBzb2xvIHNlXG4gICAgLy8gbm90w7MgY29uIGVsIGUyZSwgcG9ycXVlIGVsIHNwZWMgZGVsIGNvbXBvbmVudGUgbGUgcGFzYWJhIGVsIGNvbnRyb2wgYVxuICAgIC8vIG1hbm8geSBwb3IgZXNvIHBhc2FiYSBlbiB2ZXJkZS5cbiAgICBjb25zdCBjb250cm9sID0gZmllbGQuY29udHJvbCA/PyB0aGlzLmNvbnRyb2xQb3JOb21icmUoZmllbGQubmFtZSk7XG4gICAgY29uc3QgdmFsb3IgPSB0eXBlb2YgY29udHJvbD8udmFsdWUgPT09ICdzdHJpbmcnID8gY29udHJvbC52YWx1ZSA6ICcnO1xuICAgIGlmICghdmFsb3IgfHwgIWNvbnRyb2w/LnRvdWNoZWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHN1Z2VyaWRvID0gc3VnZ2VzdEVtYWlsRml4KHZhbG9yKTtcbiAgICBpZiAoIXN1Z2VyaWRvIHx8IHRoaXMuc3VnZ2VzdGlvbkRpc21pc3NlZC5oYXMoc3VnZXJpZG8pKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gc3VnZXJpZG87XG4gIH1cblxuICAvKipcbiAgICogQnVzY2EgZWwgY29udHJvbCBzaW4gZXhwbG90YXIgc2kgZWwgZm9ybXVsYXJpbyB0b2RhdsOtYSBubyBzZSBjb25zdHJ1ecOzLlxuICAgKiBgZ2V0Q29udHJvbGAgYXN1bWUgYEZvcm1gIHlhIGluaWNpYWxpemFkbzsgYWPDoSBzZSBsbGFtYSBkZXNkZSBlbCB0ZW1wbGF0ZSxcbiAgICogcXVlIHB1ZWRlIGV2YWx1YXJzZSBhbnRlcyBkZSBgbmdPbkluaXRgIGVuIGFsZ3Vub3MgY2ljbG9zLlxuICAgKi9cbiAgcHJpdmF0ZSBjb250cm9sUG9yTm9tYnJlKG5vbWJyZT86IHN0cmluZykge1xuICAgIGlmICghbm9tYnJlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLkZvcm0/LmdldChub21icmUpID8/IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGVtYWlsU3VnZ2VzdGlvblF1ZXN0aW9uKHN1Z2VyaWRvOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRleHRvID0gdGhpcy50ZXh0b0kxOG4oJ2VtYWlsU3VnZ2VzdGlvblF1ZXN0aW9uJywgJ8K/UXVpc2lzdGUgZGVjaXIge2VtYWlsfT8nKTtcbiAgICByZXR1cm4gdGV4dG8ucmVwbGFjZSgne2VtYWlsfScsIHN1Z2VyaWRvKTtcbiAgfVxuXG4gIGVtYWlsU3VnZ2VzdGlvbkFwcGx5TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0b0kxOG4oJ2VtYWlsU3VnZ2VzdGlvbkFwcGx5JywgJ1PDrSwgY29ycmVnaXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFkdWNlIGNvbiByZXNwYWxkbyByZWFsLlxuICAgKlxuICAgKiBgSTE4blNlcnZpY2UudCgpYCBOTyBkZXZ1ZWx2ZSBudWxsIGN1YW5kbyBmYWx0YSBsYSBjbGF2ZTogZGV2dWVsdmUgdmFjw61vIG9cbiAgICogdW4gcGxhY2Vob2xkZXIgYFtuYW1lc3BhY2Uua2V5XWAuIENvbiBgPz9gIGVsIHJlc3BhbGRvIG51bmNhIGVudHJhYmEgeSBlbFxuICAgKiByZW5nbMOzbiBzYWzDrWEgZW4gYmxhbmNvIGVuIGN1YWxxdWllciBhcHAgcXVlIG5vIHJlZ2lzdHJhcmEgbGEgY2xhdmUuIExvXG4gICAqIGVuY29udHLDsyBlbCBzcGVjIGRlbCBjb21wb25lbnRlLCBubyBsYSByZXZpc2nDs24gYSBvam8uXG4gICAqL1xuICBwcml2YXRlIHRleHRvSTE4bihrZXk6IHN0cmluZywgcmVzcGFsZG86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdGV4dG8gPSB0aGlzLmkxOG5TdWdnZXN0aW9uPy50KGtleSkgPz8gJyc7XG4gICAgaWYgKCF0ZXh0byB8fCB0ZXh0by5zdGFydHNXaXRoKCdbJykpIHJldHVybiByZXNwYWxkbztcbiAgICByZXR1cm4gdGV4dG87XG4gIH1cblxuICAvKiogQXBsaWNhIGxhIGNvcnJlY2Npw7NuLiBFcyBsYSDDum5pY2EgdsOtYTogbmFkYSBzZSByZWVzY3JpYmUgc2luIGVzdGUgY2xpYy4gKi9cbiAgYXBwbHlFbWFpbFN1Z2dlc3Rpb24oZmllbGQ6IElucHV0TWV0YWRhdGEsIHN1Z2VyaWRvOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gZmllbGQuY29udHJvbCA/PyB0aGlzLmNvbnRyb2xQb3JOb21icmUoZmllbGQubmFtZSk7XG4gICAgY29udHJvbD8uc2V0VmFsdWUoc3VnZXJpZG8pO1xuICAgIGNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gICAgLy8gQXBsaWNhZGEgZGVqYSBkZSBvZnJlY2Vyc2U7IHNpIGVsIHVzdWFyaW8gdnVlbHZlIGEgZXNjcmliaXIgbWFsLCBlbFxuICAgIC8vIHZhbG9yIHNlcsOhIG90cm8geSBsYSBzdWdlcmVuY2lhIHJlYXBhcmVjZS5cbiAgICB0aGlzLnN1Z2dlc3Rpb25EaXNtaXNzZWQuYWRkKHN1Z2VyaWRvKTtcbiAgfVxuXG59XG4iXX0=
|
|
1014
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXVDLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFFdkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRXhGLE9BQU8sRUFBRSxrQkFBa0Is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Q3JCLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3dCQUN0QixpQkFBaUI7d0JBQ2pCLHFCQUFxQjt3QkFDckIsMEJBQTBCO3dCQUMxQix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQiwyQkFBMkI7d0JBQzNCLG1CQUFtQjt3QkFDbkIsc0JBQXNCO3dCQUN0QiwyQkFBMkI7d0JBQzNCLG1CQUFtQjtxQkFDcEIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzTFQ7eUdBS0QsS0FBSztzQkFESixLQUFLO2dCQUlOLFFBQVE7c0JBRFAsTUFBTTtnQkFJUCxhQUFhO3NCQURaLE1BQU07Z0JBSVAsU0FBUztzQkFEUixNQUFNO2dCQUlQLGNBQWM7c0JBRGIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIERvQ2hlY2ssXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4vaTE4bi5zZXJ2aWNlJztcbmltcG9ydCB7IHN1Z2dlc3RFbWFpbEZpeCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm1zL2VtYWlsLXN1Z2dlc3Rpb24nO1xuaW1wb3J0IHsgaXNBdEVuZCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9kb20nO1xuaW1wb3J0IHsgRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2Rpc3BsYXkvZGlzcGxheS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGl2aWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2RpdmlkZXIvZGl2aWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1vamlSYXRpbmdDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9lbW9qaS1yYXRpbmcvZW1vamktcmF0aW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbW9qaVJhdGluZ01ldGFkYXRhIH0gZnJvbSAnLi4vLi4vYXRvbXMvZW1vamktcmF0aW5nL3R5cGVzJztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2J1dHRvbi1ncm91cC9idXR0b24tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY2hlY2staW5wdXQvY2hlY2staW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1lbnRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jb21tZW50LWlucHV0L2NvbW1lbnQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9kYXRlLXBpY2tlci90eXBlcyc7XG5pbXBvcnQgeyBGaWxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZmlsZS1pbnB1dC9maWxlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIaW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2hpbnQvaGludC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVyRnJvbVRvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL251bWJlci1mcm9tLXRvL251bWJlci1mcm9tLXRvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOdW1iZXJQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvbnVtYmVyLXBpY2tlci9udW1iZXItcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOdW1iZXJQaWNrZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9udW1iZXItcGlja2VyL3R5cGVzJztcbmltcG9ydCB7IFBhc3N3b3JkSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvcGFzc3dvcmQtaW5wdXQvcGFzc3dvcmQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFBpbklucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3Bpbi1pbnB1dC9waW4taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFJhZGlvSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvcmFkaW8taW5wdXQvcmFkaW8taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFNlYXJjaFNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3NlbGVjdC1pbnB1dC9zZWxlY3QtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdFNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zZWxlY3Qtc2VhcmNoL3NlbGVjdC1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IE11bHRpU2VsZWN0U2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL211bHRpLXNlbGVjdC1zZWFyY2gvbXVsdGktc2VsZWN0LXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RleHQtaW5wdXQvdGV4dC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dGFyZWFJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90ZXh0YXJlYS1pbnB1dC90ZXh0YXJlYS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dGFyZWFJbnB1dE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RleHRhcmVhLWlucHV0L3R5cGVzJztcbmltcG9ydCB7IFBob25lSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvcGhvbmUtaW5wdXQvcGhvbmUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFRvZ2dsZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RvZ2dsZS1pbnB1dC90b2dnbGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94UmFkaW9JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jaGVja2JveC1yYWRpby1pbnB1dC9jaGVja2JveC1yYWRpby1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hpcFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jaGlwLXNlbGVjdC9jaGlwLXNlbGVjdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXNlcm5hbWVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy91c2VybmFtZS1pbnB1dC91c2VybmFtZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXNlcm5hbWVJbnB1dE1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3VzZXJuYW1lLWlucHV0L3R5cGVzJztcbmltcG9ydCB7IEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2F0dGFjaG1lbnQtdXBsb2FkZXIvYXR0YWNobWVudC11cGxvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXR0YWNobWVudEl0ZW0gfSBmcm9tICcuLi9hdHRhY2htZW50LXVwbG9hZGVyL3R5cGVzJztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMsIEZvcm1NZXRhZGF0YSwgRm9ybVN1Ym1pdCwgSW5wdXRNZXRhZGF0YSwgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtZm9ybScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBEaXNwbGF5Q29tcG9uZW50LFxuICAgIFRpdGxlQ29tcG9uZW50LFxuICAgIEVtb2ppUmF0aW5nQ29tcG9uZW50LFxuICAgIFRleHRJbnB1dENvbXBvbmVudCxcbiAgICBUZXh0YXJlYUlucHV0Q29tcG9uZW50LFxuICAgIENoZWNrSW5wdXRDb21wb25lbnQsXG4gICAgQnV0dG9uR3JvdXBDb21wb25lbnQsXG4gICAgRGl2aWRlckNvbXBvbmVudCxcbiAgICBIaW50Q29tcG9uZW50LFxuICAgIENvbW1lbnRJbnB1dENvbXBvbmVudCxcbiAgICBEYXRlSW5wdXRDb21wb25lbnQsXG4gICAgRmlsZUlucHV0Q29tcG9uZW50LFxuICAgIE51bWJlckZyb21Ub0NvbXBvbmVudCxcbiAgICBOdW1iZXJQaWNrZXJDb21wb25lbnQsXG4gICAgUmFkaW9JbnB1dENvbXBvbmVudCxcbiAgICBQYXNzd29yZElucHV0Q29tcG9uZW50LFxuICAgIFBpbklucHV0Q29tcG9uZW50LFxuICAgIFNlbGVjdFNlYXJjaENvbXBvbmVudCxcbiAgICBNdWx0aVNlbGVjdFNlYXJjaENvbXBvbmVudCxcbiAgICBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCxcbiAgICBQaG9uZUlucHV0Q29tcG9uZW50LFxuICAgIFRvZ2dsZUlucHV0Q29tcG9uZW50LFxuICAgIENoZWNrYm94UmFkaW9JbnB1dENvbXBvbmVudCxcbiAgICBDaGlwU2VsZWN0Q29tcG9uZW50LFxuICAgIFVzZXJuYW1lSW5wdXRDb21wb25lbnQsXG4gICAgQXR0YWNobWVudFVwbG9hZGVyQ29tcG9uZW50LFxuICAgIERhdGVQaWNrZXJDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJjb250YWluZXJcIlxuICAgICAgW2NsYXNzLmNvbnRhaW5lci0tc3RpY2t5LWZvb3Rlcl09XCJwcm9wcy5zdGlja3lGb290ZXIgJiYgIXByb3BzLmNvbnRyb2xsZWRcIlxuICAgICAgW3N0eWxlLi0tdmFsLWZvcm0tZmllbGQtZ2FwXT1cInByb3BzLmZpZWxkU3BhY2luZyAhPSBudWxsID8gcHJvcHMuZmllbGRTcGFjaW5nICsgJ3B4JyA6IG51bGxcIlxuICAgID5cbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICAgICAgICBAaWYgKHByb3BzLm5hbWUpIHtcbiAgICAgICAgICA8dmFsLWRpc3BsYXlcbiAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHByb3BzLm5hbWUsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+PC92YWwtZGlzcGxheT5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChzIG9mIHByb3BzLnNlY3Rpb25zOyB0cmFjayBzLm5hbWUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgICAgICAgPHZhbC10aXRsZSBbcHJvcHNdPVwieyBjb250ZW50OiBzLm5hbWUsIHNpemU6ICdsYXJnZScsIGNvbG9yOiAnJywgYm9sZDogZmFsc2UgfVwiPjwvdmFsLXRpdGxlPlxuICAgICAgICAgICAgQGZvciAoZiBvZiBzLmZpZWxkczsgdHJhY2sgZi5uYW1lKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dFwiIFthdHRyLmRhdGEtdGVzdGlkXT1cImYudG9rZW5cIj5cbiAgICAgICAgICAgICAgICBAaWYgKGYudHlwZSAhPT0gdHlwZXMuUEhPTkUgJiYgZi50eXBlICE9PSB0eXBlcy5IQU5ETEUgJiYgZi50eXBlICE9PSB0eXBlcy5BVFRBQ0hNRU5UKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IFthdHRyLmlkXT1cImxhYmVsSWQoZilcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZhbC10aXRsZSBbcHJvcHNdPVwieyBjb250ZW50OiBmLmxhYmVsLCBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBib2xkOiBmYWxzZSB9XCI+PC92YWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChmLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLWRlc2NyaXB0aW9uXCI+e3sgZi5kZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQHN3aXRjaCAoZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuVEVYVCkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXRleHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuVEVYVEFSRUEpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC10ZXh0YXJlYS1pbnB1dCBbcHJvcHNdPVwiZ2V0VGV4dGFyZWFQcm9wKGYpXCI+PC92YWwtdGV4dGFyZWEtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuQ0hFQ0spIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1jaGVjay1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtY2hlY2staW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuQ09NTUVOVCkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLWNvbW1lbnQtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLWNvbW1lbnQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuREFURSkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLWRhdGUtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLWRhdGUtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuRU1BSUwpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJnZXRUZXh0SW5wdXRQcm9wKGYsICdlbWFpbCcpXCI+PC92YWwtdGV4dC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdWdlcmVuY2lhIGRlIGRvbWluaW8uIFNlIE9GUkVDRSwgbm8gc2UgYXBsaWNhIHNvbGE6IHVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgZG9taW5pbyBjb3Jwb3JhdGl2byBsZWfDrXRpbW8gcHVlZGUgcGFyZWNlcnNlIGEgdW5vXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWFzaXZvLCB5IGNvcnJlZ2lybG8gcG9yIHN1IGN1ZW50YSBsZSBjYW1iaWFyw61hIGVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVvIGEgYWxndWllbiBxdWUgbG8gZXNjcmliacOzIGJpZW4uIC0tPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGVtYWlsU3VnZ2VzdGlvbkZvcihmKTsgYXMgc3VnZXJpZG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImVtYWlsLXN1Z2dlc3Rpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVtYWlsU3VnZ2VzdGlvblF1ZXN0aW9uKHN1Z2VyaWRvKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlbWFpbC1zdWdnZXN0aW9uX19hcHBseVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhcHBseUVtYWlsU3VnZ2VzdGlvbihmLCBzdWdlcmlkbylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbWFpbFN1Z2dlc3Rpb25BcHBseUxhYmVsKCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkZJTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1maWxlLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1maWxlLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkhPVVIpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJnZXRUZXh0SW5wdXRQcm9wKGYsICd0aW1lJylcIj48L3ZhbC10ZXh0LWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLk5VTUJFUikge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cImdldFRleHRJbnB1dFByb3AoZiwgJ251bWJlcicpXCI+PC92YWwtdGV4dC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5OVU1CRVJfUElDS0VSKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtbnVtYmVyLXBpY2tlciBbcHJvcHNdPVwiZ2V0TnVtYmVyUGlja2VyUHJvcChmKVwiPjwvdmFsLW51bWJlci1waWNrZXI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuTlVNQkVSX0ZST01fVE8pIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1udW1iZXItZnJvbS10byBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtbnVtYmVyLWZyb20tdG8+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuUEFTU1dPUkQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1wYXNzd29yZC1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtcGFzc3dvcmQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuUElOX0NPREUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1waW4taW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXBpbi1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5SQURJTykge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXJhZGlvLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1yYWRpby1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5TRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1zZWxlY3QtaW5wdXQgW3Byb3BzXT1cImdldFNlbGVjdFByb3AoZilcIj48L3ZhbC1zZWxlY3QtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuU0VBUkNIX1NFTEVDVCkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXNlbGVjdC1zZWFyY2ggW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXNlbGVjdC1zZWFyY2g+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuTVVMVElfU0VMRUNUKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtbXVsdGktc2VsZWN0LXNlYXJjaCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtbXVsdGktc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5NVUxUSV9TRUxFQ1RfU0lNUExFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaW1wbGUtbXVsdGlcIiByb2xlPVwiZ3JvdXBcIiBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwibGFiZWxJZChmKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdCBvZiBvcmRlcmVkT3B0aW9ucyhmKTsgdHJhY2sgb3B0LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzaW1wbGUtbXVsdGlfX29wdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2ltcGxlTXVsdGlTZWxlY3RlZChmLm5hbWUsIG9wdC5pZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0U2ltcGxlTXVsdGlTZWxlY3RlZChmLm5hbWUsIG9wdC5pZCwgJGFueSgkZXZlbnQudGFyZ2V0KS5jaGVja2VkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IG9wdC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLlBIT05FKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtcGhvbmUtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXBob25lLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkhBTkRMRSkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXVzZXJuYW1lLWlucHV0IFtwcm9wc109XCJnZXRVc2VybmFtZVByb3AoZilcIj48L3ZhbC11c2VybmFtZS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5UT0dHTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2xlYW4tYW5zd2VyXCIgcm9sZT1cImdyb3VwXCIgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWQoZilcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9vbGVhbi1hbnN3ZXJfX29wdGlvbiBzdXJ2ZXktcmVzcG9uc2VfX2Jvb2xlYW4tb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ib29sZWFuLWFuc3dlcl9fb3B0aW9uLS1hY3RpdmVdPVwiZ2V0Q29udHJvbChmLm5hbWUpLnZhbHVlID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJnZXRDb250cm9sKGYubmFtZSkudmFsdWUgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEJvb2xlYW5WYWx1ZShmLm5hbWUsIHRydWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBib29sZWFuWWVzTGFiZWwoKSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib29sZWFuLWFuc3dlcl9fb3B0aW9uIHN1cnZleS1yZXNwb25zZV9fYm9vbGVhbi1vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmJvb2xlYW4tYW5zd2VyX19vcHRpb24tLWFjdGl2ZV09XCJnZXRDb250cm9sKGYubmFtZSkudmFsdWUgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcHJlc3NlZF09XCJnZXRDb250cm9sKGYubmFtZSkudmFsdWUgPT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZXRCb29sZWFuVmFsdWUoZi5uYW1lLCBmYWxzZSlcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGJvb2xlYW5Ob0xhYmVsKCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuQ0hFQ0tCT1hfUkFESU8pIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1jaGVja2JveC1yYWRpby1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtY2hlY2tib3gtcmFkaW8taW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuRU1PSklfUkFUSU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtZW1vamktcmF0aW5nIFtwcm9wc109XCJnZXRFbW9qaVJhdGluZ1Byb3AoZilcIj48L3ZhbC1lbW9qaS1yYXRpbmc+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuQ0hJUF9TRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1jaGlwLXNlbGVjdCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtY2hpcC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuQVRUQUNITUVOVCkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLWF0dGFjaG1lbnQtdXBsb2FkZXJcbiAgICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGYubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBoaW50OiBmLmhpbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRGbjogZi51cGxvYWRGbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmLnN0YXRlID09PSBzdGF0ZXMuRElTQUJMRUQgfHwgZi5zdGF0ZSA9PT0gc3RhdGVzLldPUktJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGF0dGFjaG1lbnRzQ2hhbmdlKT1cIm9uQXR0YWNobWVudENoYW5nZShmLm5hbWUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICA+PC92YWwtYXR0YWNobWVudC11cGxvYWRlcj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5EQVRFX1BJQ0tFUikge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLWRhdGUtcGlja2VyIFtwcm9wc109XCJnZXREYXRlUGlja2VyUHJvcChmKVwiPjwvdmFsLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8dmFsLWhpbnQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiIFtpZF09XCJlcnJvcklkKGYpXCI+PC92YWwtaGludD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHByb3BzLnNob3dEaXZpZGVycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgPHZhbC1kaXZpZGVyIFtwcm9wc109XCJ7IGZpbGw6ICdzb2xpZCcsIHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ21lZGl1bScgfVwiPjwvdmFsLWRpdmlkZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghcHJvcHMuY29udHJvbGxlZCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJtaXQtYWN0aW9uc1wiIFtjbGFzcy5zdWJtaXQtYWN0aW9ucy0tc3RpY2t5XT1cInByb3BzLnN0aWNreUZvb3RlclwiPlxuICAgICAgICAgICAgPHZhbC1idXR0b24tZ3JvdXBcbiAgICAgICAgICAgICAgW3Byb3BzXT1cInsgYnV0dG9uczogYWN0aW9ucywgcG9zaXRpb246ICdjZW50ZXInLCBjb2x1bW5lZDogZmFsc2UgfVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInN1Ym1pdEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC92YWwtYnV0dG9uLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBEb0NoZWNrIHtcbiAgQElucHV0KClcbiAgcHJvcHM6IEZvcm1NZXRhZGF0YTtcblxuICBAT3V0cHV0KClcbiAgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1TdWJtaXQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkludmFsaWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uU2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpZWxkOiBzdHJpbmc7IHZhbHVlOiBhbnkgfT4oKTtcblxuICBmb3JtOiBGb3JtR3JvdXA7XG4gIHR5cGVzID0gSW5wdXRUeXBlO1xuICBzdGF0ZXMgPSBDb21wb25lbnRTdGF0ZXM7XG5cbiAgLyoqXG4gICAqIFZhbG9yIGFjdHVhbCBkZWwgZm9ybSAoYGZvcm0uZ2V0UmF3VmFsdWUoKWApLCBhY3R1YWxpemFkbyBlbiBjYWRhXG4gICAqIGB2YWx1ZUNoYW5nZXNgLiBQZW5zYWRvIHBhcmEgZWwgbW9kbyBgY29udHJvbGxlZGA6IGVsIGhvc3QgbG8gbGVlIHbDrWFcbiAgICogYEBWaWV3Q2hpbGQoRm9ybUNvbXBvbmVudClgIHNpbiB0b2NhciBlbCBGb3JtR3JvdXAgZGlyZWN0by4gRW4gbW9kbyBub3JtYWxcbiAgICogdGFtYmnDqW4gZXN0w6EgZGlzcG9uaWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIGFueT4+KHt9KTtcblxuICAvKipcbiAgICogRXN0YWRvIGRlIHZhbGlkZXogZGVsIGZvcm0sIGFjdHVhbGl6YWRvIGVuIGNhZGEgYHN0YXR1c0NoYW5nZXNgLiBQYXJhIHF1ZVxuICAgKiBlbCBob3N0ICh3aXphcmQpIGhhYmlsaXRlL2Rlc2hhYmlsaXRlIHN1IGJvdMOzbiBcIlNpZ3VpZW50ZVwiLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBwcml2YXRlIGFjdGlvbnNDYWNoZTogQnV0dG9uTWV0YWRhdGFbXSA9IFtdO1xuXG4gIC8vIE1lbW8gZGUgZ2V0RmllbGRQcm9wL2dldFVzZXJuYW1lUHJvcCBwb3IgcmVmZXJlbmNpYSBkZSBmaWVsZCDigJQgZXZpdGFcbiAgLy8gY3JlYXIgdW4gbnVldm8gb2JqZXRvIHByb3BzIHBvciBrZXlzdHJva2UgKGNhZGEgQ0QgY3ljbGUgaW52b2NhcsOtYSBlbFxuICAvLyB0ZW1wbGF0ZSBiaW5kaW5nLCBtdWx0aXBsaWNhbmRvIHJlLXJlbmRlcnMgZW4gY2FzY2FkYSBwb3IgIyBmaWVsZHMpLlxuICAvLyBXZWFrTWFwOiBzaSBsYSByZWZlcmVuY2lhIGRlbCBmaWVsZCBjYW1iaWEsIGVsIGNhY2hlIHNlIGxpYmVyYS5cbiAgcHJpdmF0ZSBmaWVsZFByb3BNZW1vID0gbmV3IFdlYWtNYXA8SW5wdXRNZXRhZGF0YSwgSW5wdXRNZXRhZGF0YT4oKTtcbiAgcHJpdmF0ZSB1c2VybmFtZVByb3BNZW1vID0gbmV3IFdlYWtNYXA8SW5wdXRNZXRhZGF0YSwgVXNlcm5hbWVJbnB1dE1ldGFkYXRhPigpO1xuICBwcml2YXRlIHRleHRhcmVhUHJvcE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCBUZXh0YXJlYUlucHV0TWV0YWRhdGE+KCk7XG4gIHByaXZhdGUgc2VsZWN0UHJvcE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCBJbnB1dE1ldGFkYXRhPigpO1xuICAvLyBNZW1vIGRlIHByb3BzIGNvbiB1biBpbnB1dFR5cGUgSFRNTCBpbnllY3RhZG8gKEVNQUlML05VTUJFUi9IT1VSIGNvbGFwc2Fkb3NcbiAgLy8gZW4gdmFsLXRleHQtaW5wdXQpLiBDbGF2ZSBwb3IgZmllbGQgcGFyYSBjb25zZXJ2YXIgaWRlbnRpZGFkIGRlIHJlZmVyZW5jaWEuXG4gIHByaXZhdGUgdGV4dElucHV0UHJvcE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCBJbnB1dE1ldGFkYXRhPigpO1xuICBwcml2YXRlIGRhdGVQaWNrZXJQcm9wTWVtbyA9IG5ldyBXZWFrTWFwPElucHV0TWV0YWRhdGEsIERhdGVQaWNrZXJNZXRhZGF0YT4oKTtcbiAgcHJpdmF0ZSBlbW9qaVJhdGluZ1Byb3BNZW1vID0gbmV3IFdlYWtNYXA8SW5wdXRNZXRhZGF0YSwgRW1vamlSYXRpbmdNZXRhZGF0YT4oKTtcbiAgcHJpdmF0ZSBudW1iZXJQaWNrZXJQcm9wTWVtbyA9IG5ldyBXZWFrTWFwPElucHV0TWV0YWRhdGEsIE51bWJlclBpY2tlck1ldGFkYXRhPigpO1xuXG4gIC8vIElkcyBlc3RhYmxlcyBwb3IgZmllbGQgcGFyYSBlbCB3aXJpbmcgZGUgYWNjZXNpYmlsaWRhZCBsYWJlbOKGlGlucHV04oaUZXJyb3IuXG4gIC8vIEVzdGFibGVzIGVudHJlIENEIGN5Y2xlcyAobWVtb2l6YWRvcyBwb3IgcmVmZXJlbmNpYSBkZSBmaWVsZCkg4oaSIGFyaWEtKiBubyBwYXJwYWRlYS5cbiAgcHJpdmF0ZSBmaWVsZElkTWVtbyA9IG5ldyBXZWFrTWFwPElucHV0TWV0YWRhdGEsIHsgbGFiZWxJZDogc3RyaW5nOyBlcnJvcklkOiBzdHJpbmcgfT4oKTtcbiAgcHJpdmF0ZSBmaWVsZFVpZCA9IDA7XG5cbiAgLy8gRXN0YWRvIHByZXZpbyBwYXJhIGRldGVjdGFyIGNhbWJpb3MgZW4gbmdEb0NoZWNrXG4gIHByaXZhdGUgcHJldmlvdXNTdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHByZXZpb3VzVXBsb2FkaW5nQ291bnQgPSAwO1xuXG4gIC8vIENhbXBvcyBBVFRBQ0hNRU5UIGNvbiB1cGxvYWRzIGVuIGN1cnNvIOKAlCBibG9xdWVhIHN1Ym1pdCArIERFU0hBQklMSVRBIGVsXG4gIC8vIGJvdMOzbiAobm8gbG9hZGluZzogZWwgc3Bpbm5lciBzZSByZXNlcnZhIHBhcmEgZWwgc3VibWl0IHJlYWwgZGVsIGZvcm0pLlxuICBwcml2YXRlIHVwbG9hZGluZ0ZpZWxkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHt9XG5cbiAgLyoqIEFybWEgbGEgZGVmaW5pY2nDs24gZGUgY29udHJvbGVzICh2YWxvciBpbmljaWFsICsgdmFsaWRhZG9yZXMpIGRlc2RlIGBwcm9wc2AuICovXG4gIHByaXZhdGUgYnVpbGRGb3JtQ29udHJvbHNEZWYoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGZvcm1Db250cm9scyA9IHt9O1xuICAgIHRoaXMucHJvcHMuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAvLyBIb25yYSBgZmllbGQudmFsdWVgIGFsIGNvbnN0cnVpciBlbCBGb3JtR3JvdXAgcGFyYSBxdWUgY29udHJvbGVzIHRpcG9cbiAgICAgICAgLy8gSEFORExFIChxdWUgY29uc3VtZW4gZWwgY29udHJvbCBkaXJlY3RvIHZpYSBbZm9ybUNvbnRyb2xdKSByZWNpYmFuIGVsXG4gICAgICAgIC8vIHZhbG9yIGluaWNpYWwgc2luIHF1ZSBlbCBjYWxsZXIgdGVuZ2EgcXVlIHBhdGNoVmFsdWUgcG9zdC1tb3VudC5cbiAgICAgICAgLy8gRWwgaGVscGVyIGFwcGx5RGVmYXVsdFZhbHVlVG9Db250cm9sICh2YWwtdGV4dC1pbnB1dCBldGMuKSBzaWd1ZVxuICAgICAgICAvLyBmdW5jaW9uYW5kbyDigJQgZXNjcmliZSBzb2JyZSB1biBjb250cm9sIHlhIGluaWNpYWxpemFkbywgaWRlbXBvdGVudGUuXG4gICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9XG4gICAgICAgICAgZmllbGQudmFsdWUgPz9cbiAgICAgICAgICAoZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5NVUxUSV9TRUxFQ1RfU0lNUExFID8gW10gOiBmaWVsZC50eXBlID09PSB0aGlzLnR5cGVzLlRPR0dMRSA/IGZhbHNlIDogbnVsbCk7XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSB0aGlzLnR5cGVzLk5VTUJFUl9GUk9NX1RPKSB7XG4gICAgICAgICAgLy8gQ3JlYXIgZG9zIGNvbnRyb2xlcyBwYXJhIGNhbXBvcyBOVU1CRVJfRlJPTV9UT1xuICAgICAgICAgIGZvcm1Db250cm9sc1tgJHtmaWVsZC5uYW1lfV9mcm9tYF0gPSBbaW5pdGlhbFZhbHVlLCBmaWVsZC52YWxpZGF0b3JzIHx8IFtdXTtcbiAgICAgICAgICBmb3JtQ29udHJvbHNbYCR7ZmllbGQubmFtZX1fdG9gXSA9IFtpbml0aWFsVmFsdWUsIGZpZWxkLnZhbGlkYXRvcnMgfHwgW11dO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuQVRUQUNITUVOVCkge1xuICAgICAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5uYW1lXSA9IFtbXSwgZmllbGQudmFsaWRhdG9ycyB8fCBbXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLm5hbWVdID0gW2luaXRpYWxWYWx1ZSwgZmllbGQudmFsaWRhdG9ycyB8fCBbXV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBmb3JtQ29udHJvbHM7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25zdHJ1eWUgZWwgYEZvcm1Hcm91cGAgZGVzZGUgY2VybywgY29uIGxvcyB2YWxvcmVzIGluaWNpYWxlcyBkZSBgcHJvcHNgXG4gICAqIGFjdHVhbGVzIChubyBsb3MgcXVlIGVsIHVzdWFyaW8gaGF5YSB0ZWNsZWFkbyBkZXNkZSBlbnRvbmNlcykuXG4gICAqXG4gICAqIEV4aXN0ZSBwYXJhIGVsIGNhc28gZW4gcXVlIEFuZ3VsYXIgTk8gZGVzdHJ1eWUgZWwgY29tcG9uZW50ZSBlbnRyZSBkb3MgdXNvc1xuICAgKiDigJQgdMOtcGljYW1lbnRlIGBJb25pY1JvdXRlU3RyYXRlZ3lgLCBxdWUgY2FjaGVhIGxhIHDDoWdpbmEgcnV0ZWFkYSBhbCBuYXZlZ2FyXG4gICAqIGFmdWVyYSB5IGxhIHJldXRpbGl6YSBhbCB2b2x2ZXIgc2luIGNvcnJlciBgbmdPbkluaXRgIGRlIG51ZXZvLiBTaW4gZXN0byxcbiAgICogdW4gZm9ybSBkZSBsb2dpbiBtYW50aWVuZSBsbyBxdWUgZWwgdXN1YXJpbyBhbnRlcmlvciB0ZWNsZcOzIGRlc3B1w6lzIGRlXG4gICAqIGNlcnJhciBzZXNpw7NuIHkgdm9sdmVyIGEgYC9sb2dpbmA6IGVsIGBGb3JtR3JvdXBgIHNlIGNvbnN0cnV5w7MgVU5BIHZleiB5XG4gICAqIG5hZGllIGxvIHRvY8OzIGRlc2RlIGVudG9uY2VzLlxuICAgKlxuICAgKiBSZWNvbnN0cnV5ZSBlbCBgRm9ybUdyb3VwYCBlbnRlcm8gKG5vIGAucmVzZXQodmFsdWVzKWApIHBvcnF1ZSBsYVxuICAgKiBkZWZpbmljacOzbiB0cmFlIGBbdmFsb3IsIHZhbGlkYXRvcnNdYCBwb3IgY29udHJvbCwgbm8gdmFsb3JlcyBwbGFub3Mg4oCUXG4gICAqIHJldXNhciBgYnVpbGRGb3JtQ29udHJvbHNEZWYoKWAgdGFsIGN1YWwgZXZpdGEgbWFudGVuZXIgZG9zIGZvcm1hcyBkZVxuICAgKiBjYWxjdWxhciBcImN1w6FsIGVzIGVsIHZhbG9yIGluaWNpYWxcIiBxdWUgcHVlZGFuIGRlc2luY3Jvbml6YXJzZS5cbiAgICpcbiAgICogRWwgY2FsbGVyICh0w61waWNhbWVudGUgYHZhbC1sb2dpbmAsIHbDrWEgYGlvblZpZXdXaWxsRW50ZXJgKSBkZWNpZGUgQ1XDgU5ET1xuICAgKiBsbGFtYXJsbyDigJQgYWPDoSBubyBoYXkgaGV1csOtc3RpY2EgZGUgXCJjdcOhbmRvIHJlc2V0ZWFyXCIsIHBvcnF1ZSB1biBmb3JtIGRlXG4gICAqIHZhcmlvcyBwYXNvcyBzw60gcG9kcsOtYSBxdWVyZXIgY29uc2VydmFyIGxvIHRlY2xlYWRvIGFsIHZvbHZlciBhIHVuYVxuICAgKiBwZXN0YcOxYS5cbiAgICovXG4gIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9ybSkgcmV0dXJuO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAodGhpcy5idWlsZEZvcm1Db250cm9sc0RlZigpKTtcbiAgICB0aGlzLnZhbHVlLnNldCh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgdGhpcy52YWxpZC5zZXQodGhpcy5mb3JtLnZhbGlkKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAodGhpcy5idWlsZEZvcm1Db250cm9sc0RlZigpKTtcbiAgICB0aGlzLnByb3BzLnNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkc1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIHggPT5cbiAgICAgICAgICAgIHgudHlwZSA9PT0gdGhpcy50eXBlcy5TRUxFQ1QgfHxcbiAgICAgICAgICAgIHgudHlwZSA9PT0gdGhpcy50eXBlcy5URVhUIHx8XG4gICAgICAgICAgICB4LnR5cGUgPT09IHRoaXMudHlwZXMuU0VBUkNIX1NFTEVDVCB8fFxuICAgICAgICAgICAgeC50eXBlID09PSB0aGlzLnR5cGVzLk1VTFRJX1NFTEVDVFxuICAgICAgICApXG4gICAgICAgIC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICB0aGlzLnRyYWNrU2VsZWN0Q2hhbmdlcyhmaWVsZC5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBFc3RhZG8gcmVhY3Rpdm8gcMO6YmxpY28gKHZhbHVlL3ZhbGlkKSDigJQgYWN0dWFsaXphZG8gcG9yIHN1c2NyaXBjacOzbiBSeEpTLFxuICAgIC8vIE5PIGRlbnRybyBkZSB1biBlZmZlY3Q6IHNldGVhciBzaWduYWxzIGFjw6EgZXMgc2VndXJvIChubyBkaXNwYXJhIE5HMDYwMCkuXG4gICAgdGhpcy52YWx1ZS5zZXQodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIHRoaXMudmFsaWQuc2V0KHRoaXMuZm9ybS52YWxpZCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIHRoaXMudmFsdWUuc2V0KHJhd1ZhbHVlKTtcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlLmVtaXQocmF3VmFsdWUpO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZm9ybS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnZhbGlkLnNldCh0aGlzLmZvcm0udmFsaWQpKSk7XG5cbiAgICB0aGlzLnN5bmNGaWVsZENvbnRyb2xTdGF0ZXMoKTtcbiAgICB0aGlzLnVwZGF0ZUFjdGlvbnNDYWNoZSgpO1xuICAgIHRoaXMucHJldmlvdXNTdGF0ZSA9IHRoaXMucHJvcHMuc3RhdGU7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gQ3VhbmRvIHByb3BzIGNhbWJpYSwgcmVjb25zdHJ1aXIgZWwgY2FjaGVcbiAgICBpZiAoY2hhbmdlc1sncHJvcHMnXSAmJiB0aGlzLmZvcm0pIHtcbiAgICAgIHRoaXMucGF0Y2hJbml0aWFsVmFsdWVzRnJvbVByb3BzKCk7XG4gICAgICB0aGlzLnN5bmNGaWVsZENvbnRyb2xTdGF0ZXMoKTtcbiAgICAgIHRoaXMudXBkYXRlQWN0aW9uc0NhY2hlKCk7XG4gICAgICB0aGlzLnByZXZpb3VzU3RhdGUgPSB0aGlzLnByb3BzLnN0YXRlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGF0Y2hJbml0aWFsVmFsdWVzRnJvbVByb3BzKCk6IHZvaWQge1xuICAgIHRoaXMucHJvcHMuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBpZiAoZmllbGQudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBmaWVsZC50eXBlID09PSB0aGlzLnR5cGVzLkFUVEFDSE1FTlQpIHJldHVybjtcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuTlVNQkVSX0ZST01fVE8pIHtcbiAgICAgICAgICB0aGlzLmZvcm0uZ2V0KGAke2ZpZWxkLm5hbWV9X2Zyb21gKT8ucGF0Y2hWYWx1ZShmaWVsZC52YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIHRoaXMuZm9ybS5nZXQoYCR7ZmllbGQubmFtZX1fdG9gKT8ucGF0Y2hWYWx1ZShmaWVsZC52YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm0uZ2V0KGZpZWxkLm5hbWUpPy5wYXRjaFZhbHVlKGZpZWxkLnZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLnZhbHVlLnNldCh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgdGhpcy52YWxpZC5zZXQodGhpcy5mb3JtLnZhbGlkKTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICAvLyBEZXRlY3RhciBjYW1iaW9zIGVuIGVsIGVzdGFkbyBkZWwgZm9ybXVsYXJpbyAobXV0YWNpw7NuIHNpbiBjYW1iaWFyIHJlZmVyZW5jaWEpXG4gICAgY29uc3QgdXBsb2FkaW5nQ291bnQgPSB0aGlzLnVwbG9hZGluZ0ZpZWxkcy5zaXplO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybSAmJlxuICAgICAgdGhpcy5wcm9wcyAmJlxuICAgICAgKHRoaXMucHJvcHMuc3RhdGUgIT09IHRoaXMucHJldmlvdXNTdGF0ZSB8fCB1cGxvYWRpbmdDb3VudCAhPT0gdGhpcy5wcmV2aW91c1VwbG9hZGluZ0NvdW50KVxuICAgICkge1xuICAgICAgdGhpcy5wcmV2aW91c1N0YXRlID0gdGhpcy5wcm9wcy5zdGF0ZTtcbiAgICAgIHRoaXMucHJldmlvdXNVcGxvYWRpbmdDb3VudCA9IHVwbG9hZGluZ0NvdW50O1xuICAgICAgdGhpcy51cGRhdGVBY3Rpb25zQ2FjaGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25pemVzIGZvcm0gY29udHJvbCBkaXNhYmxlZC9lbmFibGVkIHN0YXRlIHdpdGggZmllbGQgbWV0YWRhdGEuXG4gICAqL1xuICBwcml2YXRlIHN5bmNGaWVsZENvbnRyb2xTdGF0ZXMoKSB7XG4gICAgdGhpcy5wcm9wcy5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSB0aGlzLnR5cGVzLkFUVEFDSE1FTlQpIHJldHVybjtcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuTlVNQkVSX0ZST01fVE8pIHtcbiAgICAgICAgICBjb25zdCBmcm9tQ29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChgJHtmaWVsZC5uYW1lfV9mcm9tYCk7XG4gICAgICAgICAgY29uc3QgdG9Db250cm9sID0gdGhpcy5nZXRDb250cm9sKGAke2ZpZWxkLm5hbWV9X3RvYCk7XG5cbiAgICAgICAgICBpZiAoZmllbGQuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCkge1xuICAgICAgICAgICAgZnJvbUNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB0b0NvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb21Db250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB0b0NvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChmaWVsZC5uYW1lKTtcbiAgICAgICAgICBpZiAoZmllbGQuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCkge1xuICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGVsIGNhY2hlIGRlIGFjdGlvbnMgYmFzYWRvIGVuIGVsIGVzdGFkbyBhY3R1YWwgZGVsIGZvcm0uXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFjdGlvbnNDYWNoZSgpIHtcbiAgICAvLyBFbiBtb2RvIGNvbnRyb2xsZWQgKG8gc2luIHN1Ym1pdCkgbm8gaGF5IGJvdMOzbiBwcm9waW8gcXVlIGNhY2hlYXIuXG4gICAgaWYgKCF0aGlzLnByb3BzLmFjdGlvbnMpIHtcbiAgICAgIHRoaXMuYWN0aW9uc0NhY2hlID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBhY3Rpb25TdGF0ZSA9IHRoaXMucHJvcHMuYWN0aW9ucy5zdGF0ZTtcblxuICAgIGlmICh0aGlzLnByb3BzLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuV09SS0lORykge1xuICAgICAgLy8gU3VibWl0IHJlYWwgZGVsIGZvcm0gZW4gY3Vyc28g4oaSIGJvdMOzbiBlbiBsb2FkaW5nIChzcGlubmVyKS5cbiAgICAgIGFjdGlvblN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQgfHwgdGhpcy51cGxvYWRpbmdGaWVsZHMuc2l6ZSA+IDApIHtcbiAgICAgIC8vIFN1YmlkYSBkZSBhZGp1bnRvIGVuIGN1cnNvIOKGkiBERVNIQUJJTElUQVIgZWwgc3VibWl0LCBOTyBsb2FkaW5nOiB0b2RhdsOtYVxuICAgICAgLy8gbm8gc2UgZXN0w6EgZW52aWFuZG8gZWwgZm9ybSwgc29sbyBzdWJpZW5kbyB1biBhcmNoaXZvLiBVbiBzcGlubmVyIGFjw6FcbiAgICAgIC8vIGNvbmZ1bmRlIChwYXJlY2UgcXVlIGVsIGZvcm0gc2UgZXN0w6EgZW52aWFuZG8pLlxuICAgICAgYWN0aW9uU3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCB8fCB0aGlzLmZvcm0/LnZhbGlkKSB7XG4gICAgICBhY3Rpb25TdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uc0NhY2hlID0gW3sgLi4udGhpcy5wcm9wcy5hY3Rpb25zLCBzdGF0ZTogYWN0aW9uU3RhdGUgfV07XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyBDbGVhbnVwIHN1YnNjcmlwdGlvbnMgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHRyYWNrU2VsZWN0Q2hhbmdlcyhmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGROYW1lKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5vblNlbGVjdENoYW5nZS5lbWl0KHsgZmllbGQ6IGZpZWxkTmFtZSwgdmFsdWUgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdEhhbmRsZXIodG9rZW4/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy51cGxvYWRpbmdGaWVsZHMuc2l6ZSA+IDApIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHRoaXMub25JbnZhbGlkLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vblN1Ym1pdC5lbWl0KHsgZmllbGRzOiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSwgdG9rZW4gfSk7XG4gIH1cblxuICBvbkF0dGFjaG1lbnRDaGFuZ2UoZmllbGROYW1lOiBzdHJpbmcsIGl0ZW1zOiBBdHRhY2htZW50SXRlbVtdKTogdm9pZCB7XG4gICAgY29uc3QgcmVhZHlVcmxzID0gaXRlbXMuZmlsdGVyKGEgPT4gYS5zdGF0dXMgPT09ICdyZWFkeScgJiYgYS51cmwpLm1hcChhID0+IGEudXJsISk7XG4gICAgdGhpcy5mb3JtLmdldChmaWVsZE5hbWUpPy5zZXRWYWx1ZShyZWFkeVVybHMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICBpZiAoaXRlbXMuc29tZShhID0+IGEuc3RhdHVzID09PSAndXBsb2FkaW5nJykpIHtcbiAgICAgIHRoaXMudXBsb2FkaW5nRmllbGRzLmFkZChmaWVsZE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwbG9hZGluZ0ZpZWxkcy5kZWxldGUoZmllbGROYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb250cm9sKGZpZWxkOiBzdHJpbmcpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRm9ybS5nZXQoZmllbGQpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIElkcyBlc3RhYmxlcyAobGFiZWwgKyBlcnJvcikgcGFyYSB1biBmaWVsZC4gTWVtb2l6YWRvcyBwb3IgcmVmZXJlbmNpYSBwYXJhXG4gICAqIHF1ZSBlbCB3aXJpbmcgYGFyaWEtbGFiZWxsZWRieWAgLyBgYXJpYS1kZXNjcmliZWRieWAgbm8gY2FtYmllIGVudHJlIGNpY2xvc1xuICAgKiBkZSBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWVsZElkcyhmaWVsZDogSW5wdXRNZXRhZGF0YSk6IHsgbGFiZWxJZDogc3RyaW5nOyBlcnJvcklkOiBzdHJpbmcgfSB7XG4gICAgbGV0IGlkcyA9IHRoaXMuZmllbGRJZE1lbW8uZ2V0KGZpZWxkKTtcbiAgICBpZiAoIWlkcykge1xuICAgICAgY29uc3QgYmFzZSA9IGB2YWwtZm9ybS1maWVsZC0ke3RoaXMuZmllbGRVaWQrK31gO1xuICAgICAgaWRzID0geyBsYWJlbElkOiBgJHtiYXNlfS1sYWJlbGAsIGVycm9ySWQ6IGAke2Jhc2V9LWVycm9yYCB9O1xuICAgICAgdGhpcy5maWVsZElkTWVtby5zZXQoZmllbGQsIGlkcyk7XG4gICAgfVxuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICAvKiogSWQgZGVsIGxhYmVsIHZpc2libGUgZGVsIGNhbXBvIChjb25zdW1pZG8gcG9yIGVsIHRlbXBsYXRlICsgZWwgaW5wdXQpLiAqL1xuICBsYWJlbElkKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZElkcyhmaWVsZCkubGFiZWxJZDtcbiAgfVxuXG4gIC8qKiBJZCBkZWwgY29udGVuZWRvciBkZSBlcnJvciAoYHZhbC1oaW50YCkgZGVsIGNhbXBvLiAqL1xuICBlcnJvcklkKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZElkcyhmaWVsZCkuZXJyb3JJZDtcbiAgfVxuXG4gIGdldEZpZWxkUHJvcChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IElucHV0TWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuZmllbGRQcm9wTWVtby5nZXQoZmllbGQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBpZiAoIWZpZWxkLnRva2VuKSB7XG4gICAgICBmaWVsZC50b2tlbiA9IGBpbnB1dC0ke2ZpZWxkLnR5cGV9LSR7ZmllbGQubmFtZX1gO1xuICAgIH1cblxuICAgIGNvbnN0IGlkcyA9IHRoaXMuZmllbGRJZHMoZmllbGQpO1xuXG4gICAgbGV0IHJlc3VsdDogSW5wdXRNZXRhZGF0YTtcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5OVU1CRVJfRlJPTV9UTykge1xuICAgICAgY29uc3QgZnJvbUNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woYCR7ZmllbGQubmFtZX1fZnJvbWApO1xuICAgICAgY29uc3QgdG9Db250cm9sID0gdGhpcy5nZXRDb250cm9sKGAke2ZpZWxkLm5hbWV9X3RvYCk7XG4gICAgICByZXN1bHQgPSB7IC4uLmZpZWxkLCBmcm9tQ29udHJvbCwgdG9Db250cm9sLCBjb250cm9sOiB1bmRlZmluZWQsIGxhYmVsSWQ6IGlkcy5sYWJlbElkLCBlcnJvcklkOiBpZHMuZXJyb3JJZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkLm5hbWUpO1xuICAgICAgcmVzdWx0ID0geyAuLi5maWVsZCwgY29udHJvbCwgbGFiZWxJZDogaWRzLmxhYmVsSWQsIGVycm9ySWQ6IGlkcy5lcnJvcklkIH07XG4gICAgfVxuICAgIHRoaXMuZmllbGRQcm9wTWVtby5zZXQoZmllbGQsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGFwdGVyIHBhcmEgbG9zIHRpcG9zIGNvbGFwc2Fkb3MgZW4gYHZhbC10ZXh0LWlucHV0YCAoRU1BSUwvTlVNQkVSL0hPVVIpLlxuICAgKiBSZXVzYSBgZ2V0RmllbGRQcm9wYCAoY29uIHN1IGNvbnRyb2wgKyB3aXJpbmcgZGUgaWRzKSBlIGlueWVjdGEgZWwgYGlucHV0VHlwZWBcbiAgICogSFRNTCBuYXRpdm8uIE1lbW9pemFkbyBwb3IgcmVmZXJlbmNpYSBkZSBmaWVsZCBwYXJhIG5vIHJvbXBlciBsYSBpZGVudGlkYWQuXG4gICAqL1xuICBnZXRUZXh0SW5wdXRQcm9wKGZpZWxkOiBJbnB1dE1ldGFkYXRhLCBpbnB1dFR5cGU6IE5vbk51bGxhYmxlPElucHV0TWV0YWRhdGFbJ2lucHV0VHlwZSddPik6IElucHV0TWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMudGV4dElucHV0UHJvcE1lbW8uZ2V0KGZpZWxkKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgYmFzZSA9IHRoaXMuZ2V0RmllbGRQcm9wKGZpZWxkKTtcbiAgICBjb25zdCByZXN1bHQ6IElucHV0TWV0YWRhdGEgPSB7IC4uLmJhc2UsIGlucHV0VHlwZSB9O1xuICAgIHRoaXMudGV4dElucHV0UHJvcE1lbW8uc2V0KGZpZWxkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQWRhcHRlciBwYXJhIFNFTEVDVCDigJQgaWd1YWwgcXVlIGBnZXRGaWVsZFByb3BgIHBlcm8gbGltcGlhIGBsYWJlbGAuXG4gICAqIHZhbC1mb3JtIHlhIHJlbmRlcml6YSBlbCB0w610dWxvIGRlbCBjYW1wbyBjb24gYDx2YWwtdGl0bGU+YCBhcnJpYmEgZGVsIGlucHV0O1xuICAgKiBzaSBhZGVtw6FzIHBhc8OhcmFtb3MgYGxhYmVsYCBhbCBgPGlvbi1zZWxlY3Q+YCwgZXN0ZSBsbyBwaW50YSBERU5UUk8gZGVsIHBpbGxcbiAgICog4oaSIHJlZHVuZGFuY2lhIHZpc3VhbCAoXCJUaXBvXCIgZG9zIHZlY2VzKS4gUmV1c2EgZWwgbWlzbW8gbWVtbyAoY29uIGxhIGVudHJhZGFcbiAgICogeWEgbGFiZWwtc3RyaXBwZWQpIHBhcmEgbm8gcm9tcGVyIGxhIGlkZW50aWRhZCBkZSByZWZlcmVuY2lhLlxuICAgKi9cbiAgZ2V0U2VsZWN0UHJvcChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IElucHV0TWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc2VsZWN0UHJvcE1lbW8uZ2V0KGZpZWxkKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgYmFzZSA9IHRoaXMuZ2V0RmllbGRQcm9wKGZpZWxkKTtcbiAgICBjb25zdCByZXN1bHQ6IElucHV0TWV0YWRhdGEgPSB7IC4uLmJhc2UsIGxhYmVsOiAnJyB9O1xuICAgIHRoaXMuc2VsZWN0UHJvcE1lbW8uc2V0KGZpZWxkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQWRhcHRlciDigJQgY29udmllcnRlIHVuIGBJbnB1dE1ldGFkYXRhYCAoY29uIHR5cGU9SEFORExFKSBhIGBVc2VybmFtZUlucHV0TWV0YWRhdGFgLlxuICAgKiBFbCBjaGVjayBkZSBkaXNwb25pYmlsaWRhZCBzZSByZXN1ZWx2ZSBkZW50cm8gZGVsIGNvbXBvbmVudCAoQXV0aFNlcnZpY2UgaW55ZWN0YWRvKTtcbiAgICogZWwgY2FsbGVyIHB1ZWRlIHNvYnJlc2NyaWJpcmxvIHBhc2FuZG8gYGZpZWxkLmVycm9yc2AgbyB1biBgVXNlcm5hbWVJbnB1dE1ldGFkYXRhYFxuICAgKiBjdXN0b20gdXNhbmRvIHR5cGU9VEVYVCBzaSBuZWNlc2l0YSBvdHJhIGZ1ZW50ZSBkZSB0cnV0aC5cbiAgICovXG4gIGdldFVzZXJuYW1lUHJvcChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IFVzZXJuYW1lSW5wdXRNZXRhZGF0YSB7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy51c2VybmFtZVByb3BNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGQubmFtZSk7XG4gICAgY29uc3QgcmVzdWx0OiBVc2VybmFtZUlucHV0TWV0YWRhdGEgPSB7XG4gICAgICBjb250cm9sOiBjb250cm9sIGFzIEZvcm1Db250cm9sPHN0cmluZz4sXG4gICAgICBsYWJlbDogZmllbGQubGFiZWwsXG4gICAgICBoaW50OiBmaWVsZC5oaW50LFxuICAgICAgcGxhY2Vob2xkZXI6IGZpZWxkLnBsYWNlaG9sZGVyLFxuICAgICAgbWluTGVuZ3RoOiBmaWVsZC5yYW5nZT8ubWluLFxuICAgICAgbWF4TGVuZ3RoOiBmaWVsZC5yYW5nZT8ubWF4LFxuICAgICAgZXJyb3JzOiBmaWVsZC5lcnJvcnMsXG4gICAgICBzdGF0ZTogZmllbGQuc3RhdGUsXG4gICAgfTtcbiAgICB0aGlzLnVzZXJuYW1lUHJvcE1lbW8uc2V0KGZpZWxkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQWRhcHRlciDigJQgY29udmllcnRlIHVuIGBJbnB1dE1ldGFkYXRhYCAoY29uIHR5cGU9REFURV9QSUNLRVIpIGEgYERhdGVQaWNrZXJNZXRhZGF0YWAuXG4gICAqIGxhYmVsL2hpbnQgc2Ugb21pdGVuIOKAlCB2YWwtZm9ybSBsb3MgcmVuZGVyaXphIHbDrWEgLmZpZWxkLW5hbWUvLmZpZWxkLWRlc2NyaXB0aW9uLlxuICAgKi9cbiAgZ2V0RGF0ZVBpY2tlclByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBEYXRlUGlja2VyTWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuZGF0ZVBpY2tlclByb3BNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGQubmFtZSkgYXMgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XG4gICAgY29uc3QgcmVzdWx0OiBEYXRlUGlja2VyTWV0YWRhdGEgPSB7XG4gICAgICBjb250cm9sLFxuICAgICAgcGxhY2Vob2xkZXI6IGZpZWxkLnBsYWNlaG9sZGVyIHx8IHVuZGVmaW5lZCxcbiAgICAgIHRva2VuOiBmaWVsZC50b2tlbixcbiAgICB9O1xuICAgIHRoaXMuZGF0ZVBpY2tlclByb3BNZW1vLnNldChmaWVsZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0RW1vamlSYXRpbmdQcm9wKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogRW1vamlSYXRpbmdNZXRhZGF0YSB7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy5lbW9qaVJhdGluZ1Byb3BNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGQubmFtZSkgYXMgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XG4gICAgY29uc3QgcmVzdWx0OiBFbW9qaVJhdGluZ01ldGFkYXRhID0ge1xuICAgICAgY29udHJvbCxcbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIGhpbnQ6IGZpZWxkLmhpbnQsXG4gICAgfTtcbiAgICB0aGlzLmVtb2ppUmF0aW5nUHJvcE1lbW8uc2V0KGZpZWxkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXROdW1iZXJQaWNrZXJQcm9wKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogTnVtYmVyUGlja2VyTWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMubnVtYmVyUGlja2VyUHJvcE1lbW8uZ2V0KGZpZWxkKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChmaWVsZC5uYW1lKSBhcyBGb3JtQ29udHJvbDxudW1iZXI+O1xuICAgIGNvbnN0IHJlc3VsdDogTnVtYmVyUGlja2VyTWV0YWRhdGEgPSB7XG4gICAgICBjb250cm9sLFxuICAgICAgdG9rZW46IGZpZWxkLnRva2VuLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgaGludDogZmllbGQuaGludCxcbiAgICAgIG1pbjogZmllbGQucmFuZ2U/Lm1pbixcbiAgICAgIG1heDogZmllbGQucmFuZ2U/Lm1heCxcbiAgICAgIHN0ZXA6IGZpZWxkLnN0ZXAsXG4gICAgICB1bml0TGFiZWw6IGZpZWxkLnVuaXRMYWJlbCxcbiAgICAgIHZhcmlhbnQ6IGZpZWxkLm51bWJlclBpY2tlclZhcmlhbnQsXG4gICAgICBlZGl0YWJsZTogZmllbGQubnVtYmVyUGlja2VyRWRpdGFibGUsXG4gICAgICBpbnB1dE1vZGU6IGZpZWxkLm51bWJlclBpY2tlcklucHV0TW9kZSxcbiAgICAgIHByZWNpc2lvbjogZmllbGQucHJlY2lzaW9uLFxuICAgICAgc3RhdGU6IGZpZWxkLnN0YXRlLFxuICAgIH07XG4gICAgdGhpcy5udW1iZXJQaWNrZXJQcm9wTWVtby5zZXQoZmllbGQsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNldEJvb2xlYW5WYWx1ZShmaWVsZE5hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkTmFtZSk7XG4gICAgaWYgKGNvbnRyb2wuZGlzYWJsZWQpIHJldHVybjtcbiAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cblxuICBvcmRlcmVkT3B0aW9ucyhmaWVsZDogSW5wdXRNZXRhZGF0YSkge1xuICAgIHJldHVybiBbLi4uKGZpZWxkLm9wdGlvbnMgPz8gW10pXS5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcik7XG4gIH1cblxuICBpc1NpbXBsZU11bHRpU2VsZWN0ZWQoZmllbGROYW1lOiBzdHJpbmcsIG9wdGlvbklkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0Q29udHJvbChmaWVsZE5hbWUpLnZhbHVlO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5pbmNsdWRlcyhvcHRpb25JZCk7XG4gIH1cblxuICBzZXRTaW1wbGVNdWx0aVNlbGVjdGVkKGZpZWxkTmFtZTogc3RyaW5nLCBvcHRpb25JZDogc3RyaW5nLCBzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGROYW1lKTtcbiAgICBjb25zdCBjdXJyZW50ID0gQXJyYXkuaXNBcnJheShjb250cm9sLnZhbHVlKSA/IGNvbnRyb2wudmFsdWUgOiBbXTtcbiAgICBjb25zdCBuZXh0ID0gc2VsZWN0ZWQgPyBbLi4ubmV3IFNldChbLi4uY3VycmVudCwgb3B0aW9uSWRdKV0gOiBjdXJyZW50LmZpbHRlcigoaWQ6IHN0cmluZykgPT4gaWQgIT09IG9wdGlvbklkKTtcbiAgICBjb250cm9sLnNldFZhbHVlKG5leHQpO1xuICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIGJvb2xlYW5ZZXNMYWJlbCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnRleHRvSTE4bigneWVzJywgJ1PDrScpO1xuICB9XG5cbiAgYm9vbGVhbk5vTGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0b0kxOG4oJ25vJywgJ05vJyk7XG4gIH1cblxuICAvKipcbiAgICogQWRhcHRlciDigJQgY29udmllcnRlIHVuIGBJbnB1dE1ldGFkYXRhYCAoY29uIHR5cGU9VEVYVEFSRUEpIGEgYFRleHRhcmVhSW5wdXRNZXRhZGF0YWAuXG4gICAqIERlZmF1bHRzIHNlbnNhdG9zOiBhdXRvR3JvdyArIGNvdW50ZXIgaGFiaWxpdGFkbywgNC0xMiByb3dzLlxuICAgKi9cbiAgZ2V0VGV4dGFyZWFQcm9wKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogVGV4dGFyZWFJbnB1dE1ldGFkYXRhIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnRleHRhcmVhUHJvcE1lbW8uZ2V0KGZpZWxkKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChmaWVsZC5uYW1lKTtcbiAgICBjb25zdCByZXN1bHQ6IFRleHRhcmVhSW5wdXRNZXRhZGF0YSA9IHtcbiAgICAgIGNvbnRyb2w6IGNvbnRyb2wgYXMgRm9ybUNvbnRyb2w8c3RyaW5nPixcbiAgICAgIG5hbWU6IGZpZWxkLm5hbWUsXG4gICAgICAvLyBsYWJlbCB2YWPDrW8g4oCUIHZhbC1mb3JtIHlhIHJlbmRlcml6YSBlbCB0w610dWxvIGNvbiA8dmFsLXRpdGxlPiBhcnJpYmEgZGVsXG4gICAgICAvLyBpbnB1dC4gUGFzYXJsbyBhbCA8aW9uLXRleHRhcmVhPiBkdXBsaWNhcsOtYSBlbCB0ZXh0byAoXCJEZXNjcmlwY2nDs25cIiB4MikuXG4gICAgICBsYWJlbDogJycsXG4gICAgICBoaW50OiBmaWVsZC5oaW50LFxuICAgICAgcGxhY2Vob2xkZXI6IGZpZWxkLnBsYWNlaG9sZGVyLFxuICAgICAgYXV0b0dyb3c6IHRydWUsXG4gICAgICBtaW5Sb3dzOiA0LFxuICAgICAgbWF4Um93czogMTIsXG4gICAgICBtYXhMZW5ndGg6IGZpZWxkLnJhbmdlPy5tYXggPz8gMjAwMCxcbiAgICAgIHNob3dDb3VudGVyOiB0cnVlLFxuICAgICAgY291bnRlckZvcm1hdDogJ2N1cnJlbnQnLFxuICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgZXJyb3JzOiBmaWVsZC5lcnJvcnMsXG4gICAgICBzdGF0ZTogZmllbGQuc3RhdGUsXG4gICAgfTtcbiAgICB0aGlzLnRleHRhcmVhUHJvcE1lbW8uc2V0KGZpZWxkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXQgaXNBdEVuZE9mRm9ybSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNBdEVuZCh0aGlzLmVsZW1lbnRSZWYpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1ZXJ6YSBtb3N0cmFyIGxvcyBlcnJvcmVzIGRlIHZhbGlkYWNpw7NuIChtYXJjYSB0b2RvcyBsb3MgY29udHJvbGVzIGNvbW9cbiAgICogdG91Y2hlZCkgeSBkZXZ1ZWx2ZSBzaSBlbCBmb3JtIGVzIHbDoWxpZG8uIFBlbnNhZG8gcGFyYSBlbCBtb2RvIGBjb250cm9sbGVkYDpcbiAgICogZWwgaG9zdCBsbyBpbnZvY2EgZW4gc3UgXCJTaWd1aWVudGVcIiBwYXJhIGdhdGVhciBsYSBuYXZlZ2FjacOzbiBkZWwgd2l6YXJkLlxuICAgKi9cbiAgdmFsaWRhdGUoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICByZXR1cm4gdGhpcy5mb3JtLnZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcmNhIHRvZG9zIGxvcyBjb250cm9sZXMgY29tbyB0b3VjaGVkIChtdWVzdHJhIGVycm9yZXMpIHNpbiBkZXZvbHZlciBuYWRhLlxuICAgKiBBbGlhcyBzZW3DoW50aWNvIGRlIGxhIHByaW1lcmEgbWl0YWQgZGUgYHZhbGlkYXRlKClgLlxuICAgKi9cbiAgbWFya0FsbFRvdWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgfVxuXG4gIGdldCBGb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybTtcbiAgfVxuXG4gIGdldCBGb3JtU3RhdGUoKTogeyBmb3JtOiBGb3JtR3JvdXA7IGRhdGE6IEZvcm1NZXRhZGF0YSB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybTogdGhpcy5Gb3JtLFxuICAgICAgZGF0YTogdGhpcy5wcm9wcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGFjdGlvbnMoKTogQnV0dG9uTWV0YWRhdGFbXSB7XG4gICAgLy8gUmV0b3JuYXIgZGVsIGNhY2hlIHBhcmEgZXZpdGFyIGNyZWFyIG51ZXZvcyBvYmpldG9zIGVuIGNhZGEgY2ljbG8gZGUgY2hhbmdlIGRldGVjdGlvblxuICAgIHJldHVybiB0aGlzLmFjdGlvbnNDYWNoZTtcbiAgfVxuICAvLyDilIDilIAgU3VnZXJlbmNpYSBkZSBkb21pbmlvIGRlIGNvcnJlbyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy9cbiAgLy8gVml2ZSBlbiBlbCBmb3JtdWxhcmlvIHkgbm8gZW4gY2FkYSBhcHA6IGVsIGNhbXBvIEVNQUlMIHlhIGVzdMOhIGNlbnRyYWxpemFkb1xuICAvLyBhY8OhLCBhc8OtIHF1ZSB0b2RhIGFwcCBkZWwgZmFjdG9yeSBoZXJlZGEgbGEgYXl1ZGEgc2luIGVzY3JpYmlyIHVuYSBsw61uZWEuXG4gIC8vIE5hY2UgZGUgdW4gcmVib3RlIHJlYWwgZW4gcHJvZHVjY2nDs246IHVuIHR5cG8gZW4gZWwgZG9taW5pbyBkZWrDsyBhIHVuYVxuICAvLyBjb21wcmFkb3JhIHNpbiBzdXMgZW50cmFkYXMgeSBuYWRpZSBzZSBlbnRlcsOzIGhhc3RhIHF1ZSByZWNsYW3Dsy5cblxuICBwcml2YXRlIHJlYWRvbmx5IGkxOG5TdWdnZXN0aW9uID0gaW5qZWN0KEkxOG5TZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvKiogU3VnZXJlbmNpYXMgZGVzY2FydGFkYXMgcG9yIGVsIHVzdWFyaW8sIHBhcmEgbm8gdm9sdmVyIGEgaW5zaXN0aXIuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgc3VnZ2VzdGlvbkRpc21pc3NlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8qKlxuICAgKiBEZXZ1ZWx2ZSBlbCBjb3JyZW8gY29ycmVnaWRvIGEgc3VnZXJpciwgbyBudWxsLlxuICAgKlxuICAgKiBTb2xvIHN1Z2llcmUgY3VhbmRvIGVsIGNhbXBvIE5PIHRpZW5lIGZvY286IG1pZW50cmFzIHNlIGVzY3JpYmUsIHRvZG9cbiAgICogY29ycmVvIGEgbWVkaW8gdGVjbGVhciBwYXJlY2UgdW4gdHlwbyB5IGxhIHN1Z2VyZW5jaWEgcGFycGFkZWFyw61hLlxuICAgKi9cbiAgZW1haWxTdWdnZXN0aW9uRm9yKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gRWwgY29udHJvbCBOTyB2aWVuZSBlbiBlbCBmaWVsZCBjcnVkbzogdmFsLWZvcm0gbG8gcmVzdWVsdmUgcG9yIG5vbWJyZVxuICAgIC8vIGNvbnRyYSBzdSBwcm9waW8gRm9ybUdyb3VwIChgZ2V0Q29udHJvbGApLiBMZWVyIGBmaWVsZC5jb250cm9sYCBkZXZvbHbDrWFcbiAgICAvLyB1bmRlZmluZWQgc2llbXByZSwgYXPDrSBxdWUgbGEgc3VnZXJlbmNpYSBubyBhcGFyZWPDrWEgbnVuY2Eg4oCUIHkgc29sbyBzZVxuICAgIC8vIG5vdMOzIGNvbiBlbCBlMmUsIHBvcnF1ZSBlbCBzcGVjIGRlbCBjb21wb25lbnRlIGxlIHBhc2FiYSBlbCBjb250cm9sIGFcbiAgICAvLyBtYW5vIHkgcG9yIGVzbyBwYXNhYmEgZW4gdmVyZGUuXG4gICAgY29uc3QgY29udHJvbCA9IGZpZWxkLmNvbnRyb2wgPz8gdGhpcy5jb250cm9sUG9yTm9tYnJlKGZpZWxkLm5hbWUpO1xuICAgIGNvbnN0IHZhbG9yID0gdHlwZW9mIGNvbnRyb2w/LnZhbHVlID09PSAnc3RyaW5nJyA/IGNvbnRyb2wudmFsdWUgOiAnJztcbiAgICBpZiAoIXZhbG9yIHx8ICFjb250cm9sPy50b3VjaGVkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzdWdlcmlkbyA9IHN1Z2dlc3RFbWFpbEZpeCh2YWxvcik7XG4gICAgaWYgKCFzdWdlcmlkbyB8fCB0aGlzLnN1Z2dlc3Rpb25EaXNtaXNzZWQuaGFzKHN1Z2VyaWRvKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHN1Z2VyaWRvO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1c2NhIGVsIGNvbnRyb2wgc2luIGV4cGxvdGFyIHNpIGVsIGZvcm11bGFyaW8gdG9kYXbDrWEgbm8gc2UgY29uc3RydXnDsy5cbiAgICogYGdldENvbnRyb2xgIGFzdW1lIGBGb3JtYCB5YSBpbmljaWFsaXphZG87IGFjw6Egc2UgbGxhbWEgZGVzZGUgZWwgdGVtcGxhdGUsXG4gICAqIHF1ZSBwdWVkZSBldmFsdWFyc2UgYW50ZXMgZGUgYG5nT25Jbml0YCBlbiBhbGd1bm9zIGNpY2xvcy5cbiAgICovXG4gIHByaXZhdGUgY29udHJvbFBvck5vbWJyZShub21icmU/OiBzdHJpbmcpIHtcbiAgICBpZiAoIW5vbWJyZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdGhpcy5Gb3JtPy5nZXQobm9tYnJlKSA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICBlbWFpbFN1Z2dlc3Rpb25RdWVzdGlvbihzdWdlcmlkbzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZXh0byA9IHRoaXMudGV4dG9JMThuKCdlbWFpbFN1Z2dlc3Rpb25RdWVzdGlvbicsICfCv1F1aXNpc3RlIGRlY2lyIHtlbWFpbH0/Jyk7XG4gICAgcmV0dXJuIHRleHRvLnJlcGxhY2UoJ3tlbWFpbH0nLCBzdWdlcmlkbyk7XG4gIH1cblxuICBlbWFpbFN1Z2dlc3Rpb25BcHBseUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGV4dG9JMThuKCdlbWFpbFN1Z2dlc3Rpb25BcHBseScsICdTw60sIGNvcnJlZ2lyJyk7XG4gIH1cblxuICAvKipcbiAgICogVHJhZHVjZSBjb24gcmVzcGFsZG8gcmVhbC5cbiAgICpcbiAgICogYEkxOG5TZXJ2aWNlLnQoKWAgTk8gZGV2dWVsdmUgbnVsbCBjdWFuZG8gZmFsdGEgbGEgY2xhdmU6IGRldnVlbHZlIHZhY8OtbyBvXG4gICAqIHVuIHBsYWNlaG9sZGVyIGBbbmFtZXNwYWNlLmtleV1gLiBDb24gYD8/YCBlbCByZXNwYWxkbyBudW5jYSBlbnRyYWJhIHkgZWxcbiAgICogcmVuZ2zDs24gc2Fsw61hIGVuIGJsYW5jbyBlbiBjdWFscXVpZXIgYXBwIHF1ZSBubyByZWdpc3RyYXJhIGxhIGNsYXZlLiBMb1xuICAgKiBlbmNvbnRyw7MgZWwgc3BlYyBkZWwgY29tcG9uZW50ZSwgbm8gbGEgcmV2aXNpw7NuIGEgb2pvLlxuICAgKi9cbiAgcHJpdmF0ZSB0ZXh0b0kxOG4oa2V5OiBzdHJpbmcsIHJlc3BhbGRvOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRleHRvID0gdGhpcy5pMThuU3VnZ2VzdGlvbj8udChrZXkpID8/ICcnO1xuICAgIGlmICghdGV4dG8gfHwgdGV4dG8uc3RhcnRzV2l0aCgnWycpKSByZXR1cm4gcmVzcGFsZG87XG4gICAgcmV0dXJuIHRleHRvO1xuICB9XG5cbiAgLyoqIEFwbGljYSBsYSBjb3JyZWNjacOzbi4gRXMgbGEgw7puaWNhIHbDrWE6IG5hZGEgc2UgcmVlc2NyaWJlIHNpbiBlc3RlIGNsaWMuICovXG4gIGFwcGx5RW1haWxTdWdnZXN0aW9uKGZpZWxkOiBJbnB1dE1ldGFkYXRhLCBzdWdlcmlkbzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29udHJvbCA9IGZpZWxkLmNvbnRyb2wgPz8gdGhpcy5jb250cm9sUG9yTm9tYnJlKGZpZWxkLm5hbWUpO1xuICAgIGNvbnRyb2w/LnNldFZhbHVlKHN1Z2VyaWRvKTtcbiAgICBjb250cm9sPy5tYXJrQXNEaXJ0eSgpO1xuICAgIC8vIEFwbGljYWRhIGRlamEgZGUgb2ZyZWNlcnNlOyBzaSBlbCB1c3VhcmlvIHZ1ZWx2ZSBhIGVzY3JpYmlyIG1hbCwgZWxcbiAgICAvLyB2YWxvciBzZXLDoSBvdHJvIHkgbGEgc3VnZXJlbmNpYSByZWFwYXJlY2UuXG4gICAgdGhpcy5zdWdnZXN0aW9uRGlzbWlzc2VkLmFkZChzdWdlcmlkbyk7XG4gIH1cblxufVxuIl19
|
|
@@ -29,8 +29,9 @@ export const SURVEY_QUESTION_TYPES = [
|
|
|
29
29
|
'TEXT',
|
|
30
30
|
'TEXTAREA',
|
|
31
31
|
'NUMBER',
|
|
32
|
+
'NUMBER_PICKER',
|
|
32
33
|
'DATE',
|
|
33
34
|
'EMAIL',
|
|
34
35
|
'PHONE',
|
|
35
36
|
];
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3N1cnZleS1idWlsZGVyL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUNuQyxjQUFjO0lBQ2QsUUFBUTtJQUNSLE9BQU87SUFDUCxjQUFjO0lBQ2QsUUFBUTtJQUNSLE1BQU07SUFDTixVQUFVO0lBQ1YsUUFBUTtJQUNSLGVBQWU7SUFDZixNQUFNO0lBQ04sT0FBTztJQUNQLE9BQU87Q0FDUixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRW50aXR5UmVmLFxuICBGaWVsZFNjaGVtYURlZixcbiAgUmVxdWVzdFR5cGVDb25maWcsXG4gIFJlcXVlc3RUeXBlUHJlc2VudGF0aW9uLFxuICBSZXF1ZXN0VmlzaWJpbGl0eSxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVxdWVzdHMvdHlwZXMnO1xuXG4vKipcbiAqIFRpcG9zIGRlIHByZWd1bnRhIHF1ZSBvZnJlY2UgdW5hIGVuY3Vlc3RhLlxuICpcbiAqIEVsIGNvcnRlIG5vIGVzIGVzdMOpdGljbzogKip0b2RvIHRpcG8gcXVlIGVzdGEgbGlzdGEgb2ZyZXpjYSwgYHZhbC1zdXJ2ZXktcmVzcG9uc2VgXG4gKiB0aWVuZSBxdWUgc2FiZXIgcmVuZGVyaXphcmxvKiosIG8gbGEgZW5jdWVzdGEgc2UgZ3VhcmRhIGJpZW4geSBzZSByZXNwb25kZSBtYWxcbiAqICh1biByYXRpbmcgZGlidWphZG8gY29tbyBjYWphIGRlIHRleHRvKS4gQW1wbGlhciBhY8OhIG9ibGlnYSBhIGFtcGxpYXIgZWxcbiAqIHJlbmRlcmVyIGVuIGxhIG1pc21hIGVudHJlZ2EuXG4gKlxuICogTG9zIHNlaXMgcHJpbWVyb3Mgc29uIGRlIHJlc3B1ZXN0YSBjZXJyYWRhIOKAlCBgY2xvc2VkQW5zd2VyVHlwZXNgIGVuXG4gKiBgYmFja2VuZC9nby9zZXJ2aWNlcy9yZXF1ZXN0L2FnZ3JlZ2F0ZS5nb2AgbG9zIGN1ZW50YSBwb3IgdmFsb3IgZW4gZWxcbiAqIGRhc2hib2FyZC4gTG9zIHNlaXMgw7psdGltb3Mgc29uIGFiaWVydG9zOiBlbCBkYXNoYm9hcmQgbGlzdGEgc3VzIHJlc3B1ZXN0YXMuXG4gKlxuICogYEZJTEVgL2BBVFRBQ0hNRU5UYCBxdWVkYW4gZGVsaWJlcmFkYW1lbnRlIGZ1ZXJhOiB1bmEgZW5jdWVzdGEgZXMgcMO6YmxpY2EgeVxuICogYW7Ds25pbWEgcG9yIGRlZmF1bHQsIHkgYWNlcHRhciBzdWJpZGFzIGFow60gZXMgc3VwZXJmaWNpZSBkZSBhYnVzbyBzaW4gdW4gY2Fzb1xuICogZGUgdXNvIHF1ZSBsbyBwaWRhLlxuICpcbiAqIGBDSEVDS2AgdGFtYmnDqW4gcXVlZMOzIGZ1ZXJhLCBwb3Igb3RybyBtb3Rpdm86IHBhcmEgcXVpZW4gcmVzcG9uZGUgZXJhIGxhIG1pc21hXG4gKiBwcmVndW50YSBxdWUgYFRPR0dMRWAuIERvcyBmb3JtYXMgZGUgZXNjcmliaXIgXCJzw60gbyBub1wiIG5vIGxlIGRhYmFuIHVuYSBvcGNpw7NuXG4gKiBhIHF1aWVuIGFybWEgbGEgZW5jdWVzdGEsIGxlIGRhYmFuIHVuYSBkdWRhLiBFbCByZW5kZXJlciB5IGxhIGFncmVnYWNpw7NuXG4gKiBzaWd1ZW4gZW50ZW5kaWVuZG8gYENIRUNLYCDigJQgdW5hIGVuY3Vlc3RhIHZpZWphIHF1ZSBsbyB0ZW5nYSBzZSByZXNwb25kZSB5IHNlXG4gKiBjdWVudGEgaWd1YWwuXG4gKi9cbmV4cG9ydCBjb25zdCBTVVJWRVlfUVVFU1RJT05fVFlQRVMgPSBbXG4gICdFTU9KSV9SQVRJTkcnLFxuICAnU0VMRUNUJyxcbiAgJ1JBRElPJyxcbiAgJ01VTFRJX1NFTEVDVCcsXG4gICdUT0dHTEUnLFxuICAnVEVYVCcsXG4gICdURVhUQVJFQScsXG4gICdOVU1CRVInLFxuICAnTlVNQkVSX1BJQ0tFUicsXG4gICdEQVRFJyxcbiAgJ0VNQUlMJyxcbiAgJ1BIT05FJyxcbl07XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgUXVlZMOzIGRlIGxhIHYxIGRlbCBidWlsZGVyIChBRFItMDkyIEZhc2UgMiksIGN1YW5kbyB1bmEgcHJlZ3VudGFcbiAqIGVyYSBzb2xvIGxhYmVsICsgdW5vIGRlIGRvcyB0aXBvcy4gSG95IHVuYSBwcmVndW50YSBlcyB1biBgRWRpdGFibGVGaWVsZERlZmBcbiAqIGNvbXBsZXRvIOKAlCB2ZXIgYHZhbC1maWVsZC1zY2hlbWEtZWRpdG9yYC4gTm8gc2UgdXNhIGVuIG5pbmfDum4gbGFkbzsgc2VcbiAqIGNvbnNlcnZhIHVuIGNpY2xvIHBhcmEgbm8gcm9tcGVyIHVuIGltcG9ydCBwZXJkaWRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1cnZleVF1ZXN0aW9uUm93IHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdHlwZTogJ1RFWFRBUkVBJyB8ICdFTU9KSV9SQVRJTkcnO1xuICByZXF1aXJlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXJ2ZXlCdWlsZGVyTWV0YWRhdGEge1xuICAvKiogU2kgc2UgcGFzYSwgZWRpdGEgZXNlIHRpcG8gZXhpc3RlbnRlOyBzaSBubywgY3JlYSB1bm8gbnVldm8uICovXG4gIHR5cGVJZD86IHN0cmluZztcbiAgLyoqIFByZWZpam8gZGVsIGBUeXBlYCBkZWwgUmVxdWVzdFR5cGVDb25maWcg4oCUIGVsIGNvbXBvbmVudGUgYXJtYSBgXCI8cHJlZml4Pjo8c2x1Zz5cImAuICovXG4gIHR5cGVQcmVmaXg/OiBzdHJpbmc7XG4gIGVudGl0eVJlZj86IEVudGl0eVJlZjtcbiAgLyoqIERlZmF1bHQgJ1BVQkxJQycg4oCUIGVsIGNhc28gbcOhcyBjb23Dum46IGxpbmsgZW52aWFkbyBhIGdlbnRlIHNpbiBjdWVudGEuICovXG4gIHZpc2liaWxpdHk/OiBSZXF1ZXN0VmlzaWJpbGl0eTtcbiAgLyoqIERlZmF1bHQgdHJ1ZS4gKi9cbiAgYWxsb3dBbm9ueW1vdXM/OiBib29sZWFuO1xuICAvKiogQWNvdGEgZWwgY2F0w6Fsb2dvIGRlIGBTVVJWRVlfUVVFU1RJT05fVFlQRVNgIHNpIHVuYSBhcHAgcXVpZXJlIG9mcmVjZXIgbWVub3MuICovXG4gIHF1ZXN0aW9uVHlwZXM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFN1YmUgaW3DoWdlbmVzIGRlIHByZXNlbnRhY2nDs24geSBkZXZ1ZWx2ZSBsYSBVUkwgcMO6YmxpY2EuIFNpIG5vIHNlIHBhc2EsIGVsXG4gICAqIGJ1aWxkZXIgY29uc2VydmEgc29sbyBlbCBjYW1wbyBVUkwgcGFyYSBjb25zdW1pZG9yZXMgc2luIFN0b3JhZ2UgcHJvcGlvLlxuICAgKi9cbiAgcHJlc2VudGF0aW9uSW1hZ2VVcGxvYWQ/OiAoXG4gICAgc2xvdDogJ2hlYWRlcicgfCAnc3VjY2VzcycsXG4gICAgZmlsZTogRmlsZVxuICApID0+IFByb21pc2U8c3RyaW5nPjtcbiAgLyoqXG4gICAqIFNpIGVsIGJ1aWxkZXIgZ3VhcmRhIHBvciBzdSBjdWVudGEgY29udHJhIGAvdjIvcmVxdWVzdC10eXBlc2AuXG4gICAqXG4gICAqIERlZmF1bHQgYHRydWVgIHBvciBjb21wYXRpYmlsaWRhZCwgcGVybyAqKnVuYSBhcHAgY29uIGVuZHBvaW50IHByb3BpbyBkZWJlXG4gICAqIHBhc2FyIGBmYWxzZWAqKiB5IGd1YXJkYXIgZWxsYTogZWwgZW5kcG9pbnQgZGUgbGEgdmVydGljYWwgZXMgZWwgcXVlIHZhbGlkYVxuICAgKiBsYSBlbnRpZGFkIGR1ZcOxYSwgZXZpdGEgcXVlIGRvcyBlbmN1ZXN0YXMgZGUgZGlzdGludG8gZXZlbnRvIGNvbGlzaW9uZW4gZW5cbiAgICogZWwgbWlzbW8gYHR5cGVJZGAsIHkgYXV0b3JpemEgY29uIFNVIHBlcm1pc28uIENvbiBgZmFsc2VgLCBgc2F2ZSgpYCB2YWxpZGFcbiAgICogeSBlbWl0ZSBgZHJhZnRgIHNpbiB0b2NhciBsYSByZWQuXG4gICAqL1xuICBwZXJzaXN0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNpZW1icmEgZWwgYnVpbGRlciBjb24gdW5hIGVuY3Vlc3RhIHF1ZSB5YSBleGlzdGUsIHNpbiBpciBhIGJ1c2NhcmxhLlxuICAgKlxuICAgKiBWYSBkZSBsYSBtYW5vIGRlIGBwZXJzaXN0OiBmYWxzZWA6IGxhIGFwcCBxdWUgdGllbmUgZW5kcG9pbnQgcHJvcGlvIHlhXG4gICAqIHJlY2liacOzIGxhIGVuY3Vlc3RhIGVuIHN1IGxpc3RhZG8sIGFzw60gcXVlIHBlZGlybGEgZGUgbnVldm8gcG9yIGVsIGVuZHBvaW50XG4gICAqIGdlbsOpcmljbyBzZXLDrWEgdW5hIGxlY3R1cmEgZGUgbcOhcyDigJQgeSBlbmNpbWEgcG9yIHVuYSB2w61hIHF1ZSBleGlnZVxuICAgKiBgYXBwczptYW5hZ2VgLiBDb24gYHR5cGVJZGAgZWwgYnVpbGRlciBjYXJnYSBZIGd1YXJkYSBzb2xvOyBjb24gYGluaXRpYWxgXG4gICAqIHNvbG8gc2UgbGxlbmEuXG4gICAqL1xuICBpbml0aWFsPzogU3VydmV5RHJhZnRFdmVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXJ2ZXlCdWlsZGVyU2F2ZUV2ZW50IHtcbiAgdHlwZUNvbmZpZzogUmVxdWVzdFR5cGVDb25maWc7XG59XG5cbi8qKlxuICogTG8gcXVlIHNlIGVzY3JpYmnDsywgc2luIHBlcnNpc3Rpci5cbiAqXG4gKiBFeGlzdGUgcG9ycXVlICoqZWwgYnVpbGRlciBubyBzaWVtcHJlIGRlYmUgZ3VhcmRhciBwb3Igc3UgY3VlbnRhKiouIEN1YW5kbyBsYVxuICogYXBwIHRpZW5lIHN1IHByb3BpbyBlbmRwb2ludCBkZSBkb21pbmlvIChlbCBkZSBiaW5nbyB2YWxpZGEgZWwgZXZlbnRvLCBhY290YVxuICogZWwgYHR5cGVJZGAgcGFyYSBxdWUgZG9zIGV2ZW50b3Mgbm8gY29saXNpb25lbiB5IGF1dG9yaXphIGNvbiBlbCBwZXJtaXNvIGRlXG4gKiBsYSB2ZXJ0aWNhbCBlbiB2ZXogZGUgYGFwcHM6bWFuYWdlYCksIGd1YXJkYXIgZGVzZGUgYWPDoSBzZSBzYWx0YSB0b2RvIGVzby5cbiAqXG4gKiBMb3MgdHJlcyBjYW1wb3Mgc29uIGV4YWN0YW1lbnRlIGxvcyBkZSBgQ3JlYXRlRXZlbnRTdXJ2ZXlSZXF1ZXN0YCBlblxuICogYHNlcnZpY2VzL2JpbmdvL3N1cnZleS5nb2Ag4oCUIG5vIGVzIGNhc3VhbGlkYWQ6IGVzIGVsIGNvbnRyYXRvIHF1ZSBsYSBhcHBcbiAqIG5lY2VzaXRhIHJlZW52aWFyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1cnZleURyYWZ0RXZlbnQge1xuICBsYWJlbDogc3RyaW5nO1xuICBzdWJ0aXRsZTogc3RyaW5nO1xuICBwcmVzZW50YXRpb24/OiBSZXF1ZXN0VHlwZVByZXNlbnRhdGlvbjtcbiAgcXVlc3Rpb25zOiBGaWVsZFNjaGVtYURlZltdO1xufVxuIl19
|