@eqproject/eqp-dynamic-module 2.11.6 → 2.11.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/USERGUIDE.md +437 -437
  2. package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +2 -2
  3. package/esm2020/lib/components/private/field-graphics-editor/field-graphics-editor.component.mjs +115 -27
  4. package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +28 -6
  5. package/esm2020/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.mjs +25 -5
  6. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +12 -3
  7. package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +26 -4
  8. package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +26 -4
  9. package/esm2020/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +26 -4
  10. package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +1 -1
  11. package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +3 -3
  12. package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +1 -1
  13. package/esm2020/lib/components/private/graphs/graph/graph.component.mjs +3 -3
  14. package/esm2020/lib/utils/css-property-catalog.mjs +45 -2
  15. package/esm2020/lib/utils/field-style-catalog.mjs +45 -19
  16. package/esm2020/lib/utils/floating-label-styles.mjs +155 -0
  17. package/esm2020/lib/utils/refresh-outline-notch.mjs +38 -0
  18. package/fesm2015/eqproject-eqp-dynamic-module.mjs +782 -327
  19. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  20. package/fesm2020/eqproject-eqp-dynamic-module.mjs +762 -313
  21. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  22. package/lib/components/private/field-graphics-editor/field-graphics-editor.component.d.ts +19 -1
  23. package/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.d.ts +6 -2
  24. package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +6 -2
  25. package/lib/components/private/field-templates/text-field-template/text-field-template.component.d.ts +6 -2
  26. package/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.d.ts +6 -2
  27. package/lib/utils/css-property-catalog.d.ts +25 -0
  28. package/lib/utils/field-style-catalog.d.ts +5 -0
  29. package/lib/utils/floating-label-styles.d.ts +73 -0
  30. package/lib/utils/refresh-outline-notch.d.ts +15 -0
  31. package/package.json +1 -1
@@ -3,12 +3,21 @@ import { DateTimeTypeEnum } from '../../../../models/fields/dateField.model';
3
3
  import { UtilityHelperService } from '../../../../services/utilityHelper.services';
4
4
  import { DataGetterTypeEnum } from '../../../../models/baseField.model';
5
5
  import { ModeEnum, TimeTypeEnum } from "tmw-picker";
6
+ import { cssSetsTop, forceImportantCss, hasFloatingLabelStyles, readStyleCss } from '../../../../utils/floating-label-styles';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@angular/forms";
8
9
  import * as i2 from "tmw-picker";
10
+ // La label ha regole globali con !important (tmw-datetimepicker .tmw-picker-main .tmw-picker-label):
11
+ // le nostre devono averlo a loro volta per vincere
12
+ const FORCE_IMPORTANT_ELEMENTS = new Set(['Descrizione', 'DescrizioneSollevata']);
13
+ const PICKER_LABEL_FLOATING_SUFFIX = ':not(.tmw-picker-label--inline)';
14
+ // La label di tmw-picker sta nel contenitore con la classe --inline (campo vuoto e non
15
+ // selezionato) e sale sul bordo senza. Descrizione: grafica base, sempre valida.
16
+ // DescrizioneSollevata (virtuale, salvata dentro Descrizione): override sul bordo.
9
17
  const ELEMENT_SELECTORS = {
10
18
  Container: ' mat-form-field.tmw-picker-main',
11
19
  Descrizione: ' .tmw-picker-label',
20
+ DescrizioneSollevata: ' .tmw-picker-label' + PICKER_LABEL_FLOATING_SUFFIX,
12
21
  };
13
22
  const ELEMENTS = Object.keys(ELEMENT_SELECTORS);
14
23
  const STATES = ['Normale', 'Mouseover', 'Focused', 'NotValid', 'Readonly'];
@@ -84,12 +93,21 @@ export class DateFieldTemplateComponent {
84
93
  }
85
94
  buildCssRules(uid, css) {
86
95
  const lines = [];
96
+ // Regole globali dell'app host (tmw-picker.scss) fissano "bottom" con !important anche sulla
97
+ // label a riposo nel contenitore, che tmw-picker posiziona con "top": senza questo la label
98
+ // risulterebbe stirata fra le due ancore
99
+ lines.push(`#${uid} .tmw-picker-label.tmw-picker-label--inline { bottom: auto !important; }`);
100
+ // tmw-picker ancora la label sollevata al bordo con "bottom": la si riporta a "top" così
101
+ // che "Posizione verticale (top)" funzioni come negli altri campi (0 = centrata sul bordo)
102
+ if (hasFloatingLabelStyles(css, 'Descrizione')) {
103
+ lines.push(`#${uid} .tmw-picker-label${PICKER_LABEL_FLOATING_SUFFIX} { bottom: auto !important; top: 0 !important; transform: translateY(-50%) !important; }`);
104
+ }
87
105
  for (const el of ELEMENTS) {
88
106
  const s = ELEMENT_SELECTORS[el];
89
107
  for (const state of STATES) {
90
108
  const key = el + state;
91
109
  const defaultVal = DEFAULT_FIELD_STYLES[key];
92
- const userVal = css[key];
110
+ const userVal = readStyleCss(css, key);
93
111
  if (!defaultVal?.trim() && !userVal?.trim())
94
112
  continue;
95
113
  const selector = this.getSelector(uid, state, s);
@@ -97,8 +115,12 @@ export class DateFieldTemplateComponent {
97
115
  continue;
98
116
  if (defaultVal?.trim())
99
117
  lines.push(`${selector} { ${defaultVal} }`);
100
- if (userVal?.trim())
101
- lines.push(`${selector} { ${userVal} }`);
118
+ if (userVal?.trim()) {
119
+ lines.push(`${selector} { ${FORCE_IMPORTANT_ELEMENTS.has(el) ? forceImportantCss(userVal) : userVal} }`);
120
+ }
121
+ if (userVal?.trim() && el === 'Descrizione' && cssSetsTop(userVal)) {
122
+ lines.push(`${this.getSelector(uid, state, ELEMENT_SELECTORS['DescrizioneSollevata'])} { top: 0 !important; }`);
123
+ }
102
124
  }
103
125
  }
104
126
  return lines.join('\n');
@@ -237,10 +259,10 @@ export class DateFieldTemplateComponent {
237
259
  }
238
260
  }
239
261
  DateFieldTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateFieldTemplateComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
240
- DateFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DateFieldTemplateComponent, selector: "date-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", styleVersion: "styleVersion", forceState: "forceState" }, outputs: { recordChange: "recordChange" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"{{fieldUid}}\"\r\n (mouseenter)=\"hovering=true\" (mouseleave)=\"hovering=false\"\r\n (focusin)=\"focused=true\" (focusout)=\"focused=false\">\r\n <tmw-datetimepicker\r\n [placeholder]=\"field.Description\"\r\n [label]=\"field.Description\"\r\n [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\"\r\n [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.Readonly\"\r\n [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onRecordValueChange($event)\"\r\n [outputFormat]=\"outputFormat\"\r\n [showSeconds]=\"showSeconds\"\r\n [containerStyle]=\"getDateStyleByState('ContenitoreInterno')\"\r\n [inputStyle]=\"getDateStyleByState('CampoData')\"\r\n [calendarButtonStyle]=\"getDateStyleByState('IconaCalendario')\"\r\n [clockButtonStyle]=\"getDateStyleByState('IconaOrologio')\"\r\n [closeButtonStyle]=\"getDateStyleByState('IconaCancellazione')\"\r\n [tooltipStyle]=\"getDateStyleByState('Tooltip')\"\r\n [iconsPosition]=\"field.IconsPosition || 'right'\"\r\n [closeIconPosition]=\"field.CloseIconPosition || 'right'\"\r\n [useTooltip]=\"field.UseTooltip || false\">\r\n </tmw-datetimepicker>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.TmwDateTimePickerComponent, selector: "tmw-datetimepicker", inputs: ["debugMode", "pickerMode", "timeType", "label", "placeholder", "hint", "haveFloatingLabel", "minDate", "maxDate", "locale", "inputFormat", "outputFormat", "forSaveLocalOnDB", "timeZone", "disabled", "readonly", "currentDateAsDefault", "showSpinners", "touchUi", "enableMeridian", "hideTime", "stepHour", "showHours", "hourLabel", "stepMinute", "showMinutes", "minuteLabel", "stepSecond", "showSeconds", "secondLabel", "disableMinute", "dayLabel", "monthLabel", "yearLabel", "highLightedDates", "iconsPosition", "closeIconPosition", "containerStyle", "inputStyle", "calendarButtonStyle", "clockButtonStyle", "closeButtonStyle", "useTooltip", "tooltipStyle"], outputs: ["dateChange"] }] });
262
+ DateFieldTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DateFieldTemplateComponent, selector: "date-field-template", inputs: { field: "field", record: "record", formulaObject: "formulaObject", inConfig: "inConfig", styleVersion: "styleVersion", forceState: "forceState" }, outputs: { recordChange: "recordChange" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"{{fieldUid}}\"\r\n (mouseenter)=\"hovering=true\" (mouseleave)=\"hovering=false\"\r\n (focusin)=\"focused=true\" (focusout)=\"focused=false\">\r\n <tmw-datetimepicker\r\n [placeholder]=\"field.Description\"\r\n [label]=\"field.Description\"\r\n [haveFloatingLabel]=\"true\"\r\n [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\"\r\n [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.Readonly\"\r\n [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onRecordValueChange($event)\"\r\n [outputFormat]=\"outputFormat\"\r\n [showSeconds]=\"showSeconds\"\r\n [containerStyle]=\"getDateStyleByState('ContenitoreInterno')\"\r\n [inputStyle]=\"getDateStyleByState('CampoData')\"\r\n [calendarButtonStyle]=\"getDateStyleByState('IconaCalendario')\"\r\n [clockButtonStyle]=\"getDateStyleByState('IconaOrologio')\"\r\n [closeButtonStyle]=\"getDateStyleByState('IconaCancellazione')\"\r\n [tooltipStyle]=\"getDateStyleByState('Tooltip')\"\r\n [iconsPosition]=\"field.IconsPosition || 'right'\"\r\n [closeIconPosition]=\"field.CloseIconPosition || 'right'\"\r\n [useTooltip]=\"field.UseTooltip || false\">\r\n </tmw-datetimepicker>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.TmwDateTimePickerComponent, selector: "tmw-datetimepicker", inputs: ["debugMode", "pickerMode", "timeType", "label", "placeholder", "hint", "haveFloatingLabel", "minDate", "maxDate", "locale", "inputFormat", "outputFormat", "forSaveLocalOnDB", "timeZone", "disabled", "readonly", "currentDateAsDefault", "showSpinners", "touchUi", "enableMeridian", "hideTime", "stepHour", "showHours", "hourLabel", "stepMinute", "showMinutes", "minuteLabel", "stepSecond", "showSeconds", "secondLabel", "disableMinute", "dayLabel", "monthLabel", "yearLabel", "highLightedDates", "iconsPosition", "closeIconPosition", "containerStyle", "inputStyle", "calendarButtonStyle", "clockButtonStyle", "closeButtonStyle", "useTooltip", "tooltipStyle"], outputs: ["dateChange"] }] });
241
263
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DateFieldTemplateComponent, decorators: [{
242
264
  type: Component,
243
- args: [{ selector: 'date-field-template', template: "<div id=\"{{fieldUid}}\"\r\n (mouseenter)=\"hovering=true\" (mouseleave)=\"hovering=false\"\r\n (focusin)=\"focused=true\" (focusout)=\"focused=false\">\r\n <tmw-datetimepicker\r\n [placeholder]=\"field.Description\"\r\n [label]=\"field.Description\"\r\n [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\"\r\n [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.Readonly\"\r\n [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onRecordValueChange($event)\"\r\n [outputFormat]=\"outputFormat\"\r\n [showSeconds]=\"showSeconds\"\r\n [containerStyle]=\"getDateStyleByState('ContenitoreInterno')\"\r\n [inputStyle]=\"getDateStyleByState('CampoData')\"\r\n [calendarButtonStyle]=\"getDateStyleByState('IconaCalendario')\"\r\n [clockButtonStyle]=\"getDateStyleByState('IconaOrologio')\"\r\n [closeButtonStyle]=\"getDateStyleByState('IconaCancellazione')\"\r\n [tooltipStyle]=\"getDateStyleByState('Tooltip')\"\r\n [iconsPosition]=\"field.IconsPosition || 'right'\"\r\n [closeIconPosition]=\"field.CloseIconPosition || 'right'\"\r\n [useTooltip]=\"field.UseTooltip || false\">\r\n </tmw-datetimepicker>\r\n</div>\r\n" }]
265
+ args: [{ selector: 'date-field-template', template: "<div id=\"{{fieldUid}}\"\r\n (mouseenter)=\"hovering=true\" (mouseleave)=\"hovering=false\"\r\n (focusin)=\"focused=true\" (focusout)=\"focused=false\">\r\n <tmw-datetimepicker\r\n [placeholder]=\"field.Description\"\r\n [label]=\"field.Description\"\r\n [haveFloatingLabel]=\"true\"\r\n [pickerMode]=\"mode\"\r\n [minDate]=\"field.MinDate ? field.MinDate : null\"\r\n [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n [disabled]=\"field.Readonly\"\r\n [(ngModel)]=\"record[field.Name]\"\r\n (dateChange)=\"onRecordValueChange($event)\"\r\n [outputFormat]=\"outputFormat\"\r\n [showSeconds]=\"showSeconds\"\r\n [containerStyle]=\"getDateStyleByState('ContenitoreInterno')\"\r\n [inputStyle]=\"getDateStyleByState('CampoData')\"\r\n [calendarButtonStyle]=\"getDateStyleByState('IconaCalendario')\"\r\n [clockButtonStyle]=\"getDateStyleByState('IconaOrologio')\"\r\n [closeButtonStyle]=\"getDateStyleByState('IconaCancellazione')\"\r\n [tooltipStyle]=\"getDateStyleByState('Tooltip')\"\r\n [iconsPosition]=\"field.IconsPosition || 'right'\"\r\n [closeIconPosition]=\"field.CloseIconPosition || 'right'\"\r\n [useTooltip]=\"field.UseTooltip || false\">\r\n </tmw-datetimepicker>\r\n</div>\r\n" }]
244
266
  }], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { field: [{
245
267
  type: Input
246
268
  }], record: [{
@@ -256,4 +278,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
256
278
  }], recordChange: [{
257
279
  type: Output
258
280
  }] } });
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2RhdGUtZmllbGQtdGVtcGxhdGUvZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2RhdGUtZmllbGQtdGVtcGxhdGUvZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFL0gsT0FBTyxFQUFnQyxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRTNHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7O0FBR3BELE1BQU0saUJBQWlCLEdBQThCO0lBQ25ELFNBQVMsRUFBSSxpQ0FBaUM7SUFDOUMsV0FBVyxFQUFFLG9CQUFvQjtDQUNsQyxDQUFDO0FBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2hELE1BQU0sTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBRTNFLE1BQU0s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USxDQUFDLFVBQVUsQ0FBQztnQkFDaEMsTUFBTTtZQUNSLEtBQUssZ0JBQWdCLENBQUMsYUFBYSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7Z0JBQ2hDLE1BQU07WUFDUixLQUFLLGdCQUFnQixDQUFDLFlBQVksQ0FBQztnQkFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDO2dCQUNwQyxNQUFNO1NBQ1Q7SUFDSCxDQUFDOzt3SEFoUFUsMEJBQTBCOzRHQUExQiwwQkFBMEIsdVJDdkJ2QyxneUNBeUJBOzRGREZhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSxxQkFBcUI7Z0dBTXRCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgRGF0ZUZpZWxkLCBEYXRlRmllbGRTdHlsZUNTUywgRGF0ZVRpbWVUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvZGF0ZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgSUJhc2VGaWVsZENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBVdGlsaXR5SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5pbXBvcnQgeyBEYXRhR2V0dGVyVHlwZUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgTW9kZUVudW0sIFRpbWVUeXBlRW51bSB9IGZyb20gXCJ0bXctcGlja2VyXCI7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgRUxFTUVOVF9TRUxFQ1RPUlM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgQ29udGFpbmVyOiAgICcgbWF0LWZvcm0tZmllbGQudG13LXBpY2tlci1tYWluJyxcclxuICBEZXNjcml6aW9uZTogJyAudG13LXBpY2tlci1sYWJlbCcsXHJcbn07XHJcbmNvbnN0IEVMRU1FTlRTID0gT2JqZWN0LmtleXMoRUxFTUVOVF9TRUxFQ1RPUlMpO1xyXG5jb25zdCBTVEFURVMgPSBbJ05vcm1hbGUnLCAnTW91c2VvdmVyJywgJ0ZvY3VzZWQnLCAnTm90VmFsaWQnLCAnUmVhZG9ubHknXTtcclxuXHJcbmNvbnN0IERFRkFVTFRfRklFTERfU1RZTEVTOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RhdGUtZmllbGQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVGaWVsZFRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgSUJhc2VGaWVsZENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkOiBEYXRlRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzdHlsZVZlcnNpb246IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgZm9yY2VTdGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgbW9kZXMgPSBNb2RlRW51bTtcclxuICB0aW1lVHlwZSA9IFRpbWVUeXBlRW51bTtcclxuICBtb2RlOiBNb2RlRW51bTtcclxuXHJcbiAgc2hvd1NlY29uZHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvdXRwdXRGb3JtYXQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIGZpZWxkVWlkOiBzdHJpbmc7XHJcbiAgaG92ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdHlsZUVsOiBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzdGF0dXNTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmllbGRVaWQgPSAnZHQtJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKTtcclxuICAgIHRoaXMuc2V0VGltZVR5cGUoKTtcclxuICAgIHRoaXMuc2V0T3V0cHV0Rm9ybWF0KCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLmluamVjdERhdGVGaWVsZFN0eWxlcygpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0Zvcm1TdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdHlsZVZlcnNpb24nXSAmJiAhY2hhbmdlc1snc3R5bGVWZXJzaW9uJ10uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5zZXRUaW1lVHlwZSgpO1xyXG4gICAgICB0aGlzLnNldE91dHB1dEZvcm1hdCgpO1xyXG4gICAgICB0aGlzLmluamVjdERhdGVGaWVsZFN0eWxlcygpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2ZvcmNlU3RhdGUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZCddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydyZWNvcmQnXS5maXJzdENoYW5nZSA9PSBmYWxzZSAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVDbGFzc2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN0eWxlRWw/LnBhcmVudE5vZGUpIHtcclxuICAgICAgdGhpcy5zdHlsZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zdHlsZUVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdHVzU3ViPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmplY3REYXRlRmllbGRTdHlsZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNzcyA9ICh0aGlzLmZpZWxkIGFzIERhdGVGaWVsZCk/LkRhdGVGaWVsZFN0eWxlQ1NTID8/ICh7fSBhcyBEYXRlRmllbGRTdHlsZUNTUyk7XHJcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuYnVpbGRDc3NSdWxlcyh0aGlzLmZpZWxkVWlkLCBjc3MpO1xyXG5cclxuICAgIGlmICghdGhpcy5zdHlsZUVsKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSBhcyBIVE1MU3R5bGVFbGVtZW50O1xyXG4gICAgICB0aGlzLnN0eWxlRWwuaWQgPSAnc3R5bGUtJyArIHRoaXMuZmllbGRVaWQ7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuaGVhZCwgdGhpcy5zdHlsZUVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3R5bGVFbC50ZXh0Q29udGVudCA9IHJ1bGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZywgczogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ05vcm1hbGUnOiAgIHJldHVybiBgIyR7dWlkfSR7c31gO1xyXG4gICAgICBjYXNlICdNb3VzZW92ZXInOiByZXR1cm4gYCMke3VpZH06aG92ZXIke3N9LCAjJHt1aWR9LmVxcC1zdGF0ZS1ob3ZlciR7c31gO1xyXG4gICAgICBjYXNlICdGb2N1c2VkJzogICByZXR1cm4gYCMke3VpZH06Zm9jdXMtd2l0aGluJHtzfSwgIyR7dWlkfS5lcXAtc3RhdGUtZm9jdXNlZCR7c31gO1xyXG4gICAgICBjYXNlICdOb3RWYWxpZCc6ICByZXR1cm4gYCMke3VpZH0uZXFwLWludmFsaWQke3N9YDtcclxuICAgICAgY2FzZSAnUmVhZG9ubHknOiAgcmV0dXJuIGAjJHt1aWR9LmVxcC1yZWFkb25seSR7c31gO1xyXG4gICAgICBkZWZhdWx0OiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRDc3NSdWxlcyh1aWQ6IHN0cmluZywgY3NzOiBEYXRlRmllbGRTdHlsZUNTUyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVsIG9mIEVMRU1FTlRTKSB7XHJcbiAgICAgIGNvbnN0IHMgPSBFTEVNRU5UX1NFTEVDVE9SU1tlbF07XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIFNUQVRFUykge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGVsICsgc3RhdGU7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gREVGQVVMVF9GSUVMRF9TVFlMRVNba2V5XTtcclxuICAgICAgICBjb25zdCB1c2VyVmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoY3NzIGFzIGFueSlba2V5XTtcclxuXHJcbiAgICAgICAgaWYgKCFkZWZhdWx0VmFsPy50cmltKCkgJiYgIXVzZXJWYWw/LnRyaW0oKSkgY29udGludWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBzKTtcclxuICAgICAgICBpZiAoIXNlbGVjdG9yKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgaWYgKGRlZmF1bHRWYWw/LnRyaW0oKSkgbGluZXMucHVzaChgJHtzZWxlY3Rvcn0geyAke2RlZmF1bHRWYWx9IH1gKTtcclxuICAgICAgICBpZiAodXNlclZhbD8udHJpbSgpKSAgICBsaW5lcy5wdXNoKGAke3NlbGVjdG9yfSB7ICR7dXNlclZhbH0gfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZUNsYXNzZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpZWxkVWlkKTtcclxuICAgIGlmICghd3JhcHBlcikgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1ob3ZlcicsICAgdGhpcy5mb3JjZVN0YXRlID09PSAnTW91c2VvdmVyJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtc3RhdGUtZm9jdXNlZCcsICB0aGlzLmZvcmNlU3RhdGUgPT09ICdGb2N1c2VkJyk7XHJcblxyXG4gICAgaWYgKHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ05vdFZhbGlkJykge1xyXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsIHRydWUpO1xyXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtcmVhZG9ubHknLCBmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZvcmNlU3RhdGUgPT09ICdSZWFkb25seScpIHtcclxuICAgICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXJlYWRvbmx5JywgdHJ1ZSk7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1pbnZhbGlkJywgZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5mb3JjZVN0YXRlID09PSAnTm9ybWFsZScgfHwgdGhpcy5mb3JjZVN0YXRlID09PSAnTW91c2VvdmVyJyB8fCB0aGlzLmZvcmNlU3RhdGUgPT09ICdGb2N1c2VkJykge1xyXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsIGZhbHNlKTtcclxuICAgICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXJlYWRvbmx5JywgZmFsc2UpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaXNSZWFkb25seSA9IHRoaXMuZmllbGQuUmVhZG9ubHkgfHwgKHRoaXMuZmllbGQuRm9ybXVsYSAhPSBudWxsICYmIHRoaXMuZmllbGQuRm9ybXVsYSAhPT0gJycpO1xyXG4gICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXJlYWRvbmx5JywgaXNSZWFkb25seSk7XHJcblxyXG4gICAgY29uc3QgY3RybCA9IHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cD8uY29udHJvbHM/Llt0aGlzLmZpZWxkLk5hbWVdO1xyXG4gICAgaWYgKGN0cmw/LnRvdWNoZWQpIHtcclxuICAgICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLWludmFsaWQnLCB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuaW52YWxpZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsIGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlQ2xhc3MoZWw6IEVsZW1lbnQsIGNsczogc3RyaW5nLCBjb25kaXRpb246IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChjb25kaXRpb24pIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWwsIGNscyk7XHJcbiAgICBlbHNlIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwsIGNscyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1YnNjcmliZVRvRm9ybVN0YXR1cygpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RhdHVzU3ViPy51bnN1YnNjcmliZSgpO1xyXG4gICAgaWYgKHRoaXMuZmllbGQ/LkZvcm1Gb3JtR3JvdXApIHtcclxuICAgICAgdGhpcy5zdGF0dXNTdWIgPSB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldCBhY3RpdmVTdHlsZVN1ZmZpeCgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuZm9yY2VTdGF0ZSkgcmV0dXJuIHRoaXMuZm9yY2VTdGF0ZTtcclxuICAgIGNvbnN0IGlzUmVhZG9ubHkgPSB0aGlzLmZpZWxkLlJlYWRvbmx5IHx8ICh0aGlzLmZpZWxkLkZvcm11bGEgIT0gbnVsbCAmJiB0aGlzLmZpZWxkLkZvcm11bGEgIT09ICcnKTtcclxuICAgIGlmIChpc1JlYWRvbmx5KSByZXR1cm4gJ1JlYWRvbmx5JztcclxuICAgIGNvbnN0IGN0cmwgPSB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXA/LmNvbnRyb2xzPy5bdGhpcy5maWVsZC5OYW1lXTtcclxuICAgIGlmIChjdHJsPy50b3VjaGVkICYmIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cD8uaW52YWxpZCkgcmV0dXJuICdOb3RWYWxpZCc7XHJcbiAgICBpZiAodGhpcy5mb2N1c2VkKSByZXR1cm4gJ0ZvY3VzZWQnO1xyXG4gICAgaWYgKHRoaXMuaG92ZXJpbmcpIHJldHVybiAnTW91c2VvdmVyJztcclxuICAgIHJldHVybiAnTm9ybWFsZSc7XHJcbiAgfVxyXG5cclxuICBnZXREYXRlU3R5bGVCeVN0YXRlKGJhc2VLZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjc3MgPSAodGhpcy5maWVsZCBhcyBEYXRlRmllbGQpPy5EYXRlRmllbGRTdHlsZUNTUztcclxuICAgIGlmICghY3NzKSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gKGNzcyBhcyBhbnkpW2Jhc2VLZXkgKyB0aGlzLmFjdGl2ZVN0eWxlU3VmZml4XSA/PyAnJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGVsIGNhbXBvIHF1YW5kbyBxdWVzdG8gw6ggcmFwcHJlc2VudGF0byBkYSB1bmEgZm9ybXVsYS5cclxuICAgKi9cclxuICB1cGRhdGVGaWVsZCgpIHtcclxuICAgIGlmICh0aGlzLmZpZWxkLlJlYWRvbmx5SWYpIHtcclxuICAgICAgdGhpcy5maWVsZC5SZWFkb25seSA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuUmVhZG9ubHlJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICB9XHJcbiAgICBpZiAoKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW0uTWFudWFsZSB8fCB0aGlzLmZpZWxkLkRhdGFHZXR0ZXIuRGF0YUdldHRlclR5cGUgPT0gRGF0YUdldHRlclR5cGVFbnVtLkZvcm11bGEpICYmIHRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5Gb3JtdWxhLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZpZWxkLlZpc2libGVJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLkluTGlzdFZpZXcgPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLlZpc2libGVJZiwgdGhpcy5yZWNvcmQsIHRoaXMuZm9ybXVsYU9iamVjdCk7XHJcbiAgICAgIGlmKCF0aGlzLmZpZWxkLkluTGlzdFZpZXcgJiYgIXRoaXMuZmllbGQuTWFpbnRhaW5fVmFsdWUpe1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV09bnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW0uTWFudWFsZSAmJiB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID09IG51bGwpIHtcclxuICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVtZXR0ZXJlIGwnZXZlbnRvIGNoZSBpbCB2YWxvcmUgZGVsIHJlY29yZCDDqCBjYW1iaWF0by5cclxuICAgKi9cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKGV2KSB7XHJcbiAgICB0aGlzLmZpZWxkLkZpZWxkVmFsdWU9ZXY7XHJcbiAgICB0aGlzLmZpZWxkLkZvcm1Gb3JtR3JvdXAuZ2V0KFt0aGlzLmZpZWxkLk5hbWVdKS5zZXRWYWx1ZShldik7XHJcbiAgICBpZiAoIXRoaXMuZmllbGQuRm9ybXVsYSkge1xyXG4gICAgICB0aGlzLnJlY29yZENoYW5nZS5lbWl0KHRoaXMucmVjb3JkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldE91dHB1dEZvcm1hdCgpe1xyXG5cclxuICAgIGlmICh0aGlzLmZpZWxkLkRhdGVGb3JtYXQgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMub3V0cHV0Rm9ybWF0ID0gdGhpcy5maWVsZC5EYXRlRm9ybWF0XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5maWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gZGF0YSddKXtcclxuICAgICAgICB0aGlzLm91dHB1dEZvcm1hdCA9ICdkZC9NTS95eXl5JztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ0RhdGEgZSBvcmEnXSl7XHJcbiAgICAgICAgdGhpcy5vdXRwdXRGb3JtYXQgPSAnZGQvTU0veXl5eSBISDptbSc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZmllbGQuSXNPbmx5RGF0ZSA9PSBEYXRlVGltZVR5cGVFbnVtWydTb2xvIG9yYXJpbyddKXtcclxuICAgICAgICB0aGlzLm91dHB1dEZvcm1hdCA9ICdISDptbSc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vdXRwdXRGb3JtYXQuaW5kZXhPZihcInNzXCIpICE9IC0xKXtcclxuICAgICAgdGhpcy5zaG93U2Vjb25kcyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW4gYmFzZSBhbCBmb3JtYXRvIGRlbGxhIGRhdGEgcmljaGllc3RhIG5lbCBEYXRlRmllbGQgKHNvbG8gZGF0YSwgc29sbyBvcmFyaW8gbyBkYXRhIGUgb3JhKVxyXG4gICAqIGltcG9zdGEgbGEgdmlzdWFsaXp6YXppb25lIGNvcnJldHRhIGRlbCBjb21wb25lbnRlIHRtdy1kYXRldGltZXBpY2tlci5cclxuICAgKi9cclxuICBwcml2YXRlIHNldFRpbWVUeXBlKCkge1xyXG4gICAgc3dpdGNoICh0aGlzLmZpZWxkLklzT25seURhdGUpIHtcclxuICAgICAgY2FzZSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBkYXRhXCJdOlxyXG4gICAgICAgIHRoaXMubW9kZSA9IE1vZGVFbnVtLkRBVEVQSUNLRVI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRGF0ZVRpbWVUeXBlRW51bVtcIlNvbG8gb3JhcmlvXCJdOlxyXG4gICAgICAgIHRoaXMubW9kZSA9IE1vZGVFbnVtLlRJTUVQSUNLRVI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRGF0ZVRpbWVUeXBlRW51bVtcIkRhdGEgZSBvcmFcIl06XHJcbiAgICAgICAgdGhpcy5tb2RlID0gTW9kZUVudW0uREFURVRJTUVQSUNLRVI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJ7e2ZpZWxkVWlkfX1cIlxyXG4gICAgIChtb3VzZWVudGVyKT1cImhvdmVyaW5nPXRydWVcIiAobW91c2VsZWF2ZSk9XCJob3ZlcmluZz1mYWxzZVwiXHJcbiAgICAgKGZvY3VzaW4pPVwiZm9jdXNlZD10cnVlXCIgICAoZm9jdXNvdXQpPVwiZm9jdXNlZD1mYWxzZVwiPlxyXG4gICAgPHRtdy1kYXRldGltZXBpY2tlclxyXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJmaWVsZC5EZXNjcmlwdGlvblwiXHJcbiAgICAgICAgW2xhYmVsXT1cImZpZWxkLkRlc2NyaXB0aW9uXCJcclxuICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlXCJcclxuICAgICAgICBbbWluRGF0ZV09XCJmaWVsZC5NaW5EYXRlID8gZmllbGQuTWluRGF0ZSA6IG51bGxcIlxyXG4gICAgICAgIFttYXhEYXRlXT1cImZpZWxkLk1heERhdGUgPyBmaWVsZC5NYXhEYXRlIDogbnVsbFwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkLlJlYWRvbmx5XCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiXHJcbiAgICAgICAgKGRhdGVDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICBbb3V0cHV0Rm9ybWF0XT1cIm91dHB1dEZvcm1hdFwiXHJcbiAgICAgICAgW3Nob3dTZWNvbmRzXT1cInNob3dTZWNvbmRzXCJcclxuICAgICAgICBbY29udGFpbmVyU3R5bGVdPVwiZ2V0RGF0ZVN0eWxlQnlTdGF0ZSgnQ29udGVuaXRvcmVJbnRlcm5vJylcIlxyXG4gICAgICAgIFtpbnB1dFN0eWxlXT1cImdldERhdGVTdHlsZUJ5U3RhdGUoJ0NhbXBvRGF0YScpXCJcclxuICAgICAgICBbY2FsZW5kYXJCdXR0b25TdHlsZV09XCJnZXREYXRlU3R5bGVCeVN0YXRlKCdJY29uYUNhbGVuZGFyaW8nKVwiXHJcbiAgICAgICAgW2Nsb2NrQnV0dG9uU3R5bGVdPVwiZ2V0RGF0ZVN0eWxlQnlTdGF0ZSgnSWNvbmFPcm9sb2dpbycpXCJcclxuICAgICAgICBbY2xvc2VCdXR0b25TdHlsZV09XCJnZXREYXRlU3R5bGVCeVN0YXRlKCdJY29uYUNhbmNlbGxhemlvbmUnKVwiXHJcbiAgICAgICAgW3Rvb2x0aXBTdHlsZV09XCJnZXREYXRlU3R5bGVCeVN0YXRlKCdUb29sdGlwJylcIlxyXG4gICAgICAgIFtpY29uc1Bvc2l0aW9uXT1cImZpZWxkLkljb25zUG9zaXRpb24gfHwgJ3JpZ2h0J1wiXHJcbiAgICAgICAgW2Nsb3NlSWNvblBvc2l0aW9uXT1cImZpZWxkLkNsb3NlSWNvblBvc2l0aW9uIHx8ICdyaWdodCdcIlxyXG4gICAgICAgIFt1c2VUb29sdGlwXT1cImZpZWxkLlVzZVRvb2x0aXAgfHwgZmFsc2VcIj5cclxuICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG48L2Rpdj5cclxuIl19
281
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2RhdGUtZmllbGQtdGVtcGxhdGUvZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2RhdGUtZmllbGQtdGVtcGxhdGUvZGF0ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBNEIsTUFBTSxlQUFlLENBQUM7QUFFL0gsT0FBTyxFQUFnQyxnQkFBZ0IsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBRTNHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXBELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLE1BQU0seUNBQXlDLENBQUM7Ozs7QUFFOUgscUdBQXFHO0FBQ3JHLG1EQUFtRDtBQUNuRCxNQUFNLHdCQUF3QixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQztBQUVsRixNQUFNLDRCQUE0QixHQUFHLGlDQUFpQyxDQUFDO0FBRXZFLHVGQUF1RjtBQUN2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Z0JBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFDaEMsTUFBTTtZQUNSLEtBQUssZ0JBQWdCLENBQUMsWUFBWSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUM7Z0JBQ3BDLE1BQU07U0FDVDtJQUNILENBQUM7O3dIQWhRVSwwQkFBMEI7NEdBQTFCLDBCQUEwQix1UkNsQ3ZDLHcwQ0EwQkE7NEZEUWEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHFCQUFxQjtnR0FNdEIsS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBEYXRlRmllbGQsIERhdGVGaWVsZFN0eWxlQ1NTLCBEYXRlVGltZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBJQmFzZUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IERhdGFHZXR0ZXJUeXBlRW51bSB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5pbXBvcnQgeyBNb2RlRW51bSwgVGltZVR5cGVFbnVtIH0gZnJvbSBcInRtdy1waWNrZXJcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNzc1NldHNUb3AsIGZvcmNlSW1wb3J0YW50Q3NzLCBoYXNGbG9hdGluZ0xhYmVsU3R5bGVzLCByZWFkU3R5bGVDc3MgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9mbG9hdGluZy1sYWJlbC1zdHlsZXMnO1xyXG5cclxuLy8gTGEgbGFiZWwgaGEgcmVnb2xlIGdsb2JhbGkgY29uICFpbXBvcnRhbnQgKHRtdy1kYXRldGltZXBpY2tlciAudG13LXBpY2tlci1tYWluIC50bXctcGlja2VyLWxhYmVsKTpcclxuLy8gbGUgbm9zdHJlIGRldm9ubyBhdmVybG8gYSBsb3JvIHZvbHRhIHBlciB2aW5jZXJlXHJcbmNvbnN0IEZPUkNFX0lNUE9SVEFOVF9FTEVNRU5UUyA9IG5ldyBTZXQoWydEZXNjcml6aW9uZScsICdEZXNjcml6aW9uZVNvbGxldmF0YSddKTtcclxuXHJcbmNvbnN0IFBJQ0tFUl9MQUJFTF9GTE9BVElOR19TVUZGSVggPSAnOm5vdCgudG13LXBpY2tlci1sYWJlbC0taW5saW5lKSc7XHJcblxyXG4vLyBMYSBsYWJlbCBkaSB0bXctcGlja2VyIHN0YSBuZWwgY29udGVuaXRvcmUgY29uIGxhIGNsYXNzZSAtLWlubGluZSAoY2FtcG8gdnVvdG8gZSBub25cclxuLy8gc2VsZXppb25hdG8pIGUgc2FsZSBzdWwgYm9yZG8gc2VuemEuIERlc2NyaXppb25lOiBncmFmaWNhIGJhc2UsIHNlbXByZSB2YWxpZGEuXHJcbi8vIERlc2NyaXppb25lU29sbGV2YXRhICh2aXJ0dWFsZSwgc2FsdmF0YSBkZW50cm8gRGVzY3JpemlvbmUpOiBvdmVycmlkZSBzdWwgYm9yZG8uXHJcbmNvbnN0IEVMRU1FTlRfU0VMRUNUT1JTOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gIENvbnRhaW5lcjogICAgICAgICAgICAnIG1hdC1mb3JtLWZpZWxkLnRtdy1waWNrZXItbWFpbicsXHJcbiAgRGVzY3JpemlvbmU6ICAgICAgICAgICcgLnRtdy1waWNrZXItbGFiZWwnLFxyXG4gIERlc2NyaXppb25lU29sbGV2YXRhOiAnIC50bXctcGlja2VyLWxhYmVsJyArIFBJQ0tFUl9MQUJFTF9GTE9BVElOR19TVUZGSVgsXHJcbn07XHJcbmNvbnN0IEVMRU1FTlRTID0gT2JqZWN0LmtleXMoRUxFTUVOVF9TRUxFQ1RPUlMpO1xyXG5jb25zdCBTVEFURVMgPSBbJ05vcm1hbGUnLCAnTW91c2VvdmVyJywgJ0ZvY3VzZWQnLCAnTm90VmFsaWQnLCAnUmVhZG9ubHknXTtcclxuXHJcbmNvbnN0IERFRkFVTFRfRklFTERfU1RZTEVTOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2RhdGUtZmllbGQtdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kYXRlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIERhdGVGaWVsZFRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgSUJhc2VGaWVsZENvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIGZpZWxkOiBEYXRlRmllbGQ7XHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5Db25maWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzdHlsZVZlcnNpb246IG51bWJlciA9IDA7XHJcbiAgQElucHV0KCkgZm9yY2VTdGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgbW9kZXMgPSBNb2RlRW51bTtcclxuICB0aW1lVHlwZSA9IFRpbWVUeXBlRW51bTtcclxuICBtb2RlOiBNb2RlRW51bTtcclxuXHJcbiAgc2hvd1NlY29uZHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvdXRwdXRGb3JtYXQ6IHN0cmluZyA9IG51bGw7XHJcblxyXG4gIGZpZWxkVWlkOiBzdHJpbmc7XHJcbiAgaG92ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBmb2N1c2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdHlsZUVsOiBIVE1MU3R5bGVFbGVtZW50IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBzdGF0dXNTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZmllbGRVaWQgPSAnZHQtJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKTtcclxuICAgIHRoaXMuc2V0VGltZVR5cGUoKTtcclxuICAgIHRoaXMuc2V0T3V0cHV0Rm9ybWF0KCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB0aGlzLmluamVjdERhdGVGaWVsZFN0eWxlcygpO1xyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0Zvcm1TdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdHlsZVZlcnNpb24nXSAmJiAhY2hhbmdlc1snc3R5bGVWZXJzaW9uJ10uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5zZXRUaW1lVHlwZSgpO1xyXG4gICAgICB0aGlzLnNldE91dHB1dEZvcm1hdCgpO1xyXG4gICAgICB0aGlzLmluamVjdERhdGVGaWVsZFN0eWxlcygpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ2ZvcmNlU3RhdGUnXSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZCddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydyZWNvcmQnXS5maXJzdENoYW5nZSA9PSBmYWxzZSAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICAgIHRoaXMudXBkYXRlU3RhdGVDbGFzc2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN0eWxlRWw/LnBhcmVudE5vZGUpIHtcclxuICAgICAgdGhpcy5zdHlsZUVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zdHlsZUVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdHVzU3ViPy51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmplY3REYXRlRmllbGRTdHlsZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNzcyA9ICh0aGlzLmZpZWxkIGFzIERhdGVGaWVsZCk/LkRhdGVGaWVsZFN0eWxlQ1NTID8/ICh7fSBhcyBEYXRlRmllbGRTdHlsZUNTUyk7XHJcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuYnVpbGRDc3NSdWxlcyh0aGlzLmZpZWxkVWlkLCBjc3MpO1xyXG5cclxuICAgIGlmICghdGhpcy5zdHlsZUVsKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSBhcyBIVE1MU3R5bGVFbGVtZW50O1xyXG4gICAgICB0aGlzLnN0eWxlRWwuaWQgPSAnc3R5bGUtJyArIHRoaXMuZmllbGRVaWQ7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuaGVhZCwgdGhpcy5zdHlsZUVsKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3R5bGVFbC50ZXh0Q29udGVudCA9IHJ1bGVzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZywgczogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ05vcm1hbGUnOiAgIHJldHVybiBgIyR7dWlkfSR7c31gO1xyXG4gICAgICBjYXNlICdNb3VzZW92ZXInOiByZXR1cm4gYCMke3VpZH06aG92ZXIke3N9LCAjJHt1aWR9LmVxcC1zdGF0ZS1ob3ZlciR7c31gO1xyXG4gICAgICBjYXNlICdGb2N1c2VkJzogICByZXR1cm4gYCMke3VpZH06Zm9jdXMtd2l0aGluJHtzfSwgIyR7dWlkfS5lcXAtc3RhdGUtZm9jdXNlZCR7c31gO1xyXG4gICAgICBjYXNlICdOb3RWYWxpZCc6ICByZXR1cm4gYCMke3VpZH0uZXFwLWludmFsaWQke3N9YDtcclxuICAgICAgY2FzZSAnUmVhZG9ubHknOiAgcmV0dXJuIGAjJHt1aWR9LmVxcC1yZWFkb25seSR7c31gO1xyXG4gICAgICBkZWZhdWx0OiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRDc3NSdWxlcyh1aWQ6IHN0cmluZywgY3NzOiBEYXRlRmllbGRTdHlsZUNTUyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAvLyBSZWdvbGUgZ2xvYmFsaSBkZWxsJ2FwcCBob3N0ICh0bXctcGlja2VyLnNjc3MpIGZpc3Nhbm8gXCJib3R0b21cIiBjb24gIWltcG9ydGFudCBhbmNoZSBzdWxsYVxyXG4gICAgLy8gbGFiZWwgYSByaXBvc28gbmVsIGNvbnRlbml0b3JlLCBjaGUgdG13LXBpY2tlciBwb3NpemlvbmEgY29uIFwidG9wXCI6IHNlbnphIHF1ZXN0byBsYSBsYWJlbFxyXG4gICAgLy8gcmlzdWx0ZXJlYmJlIHN0aXJhdGEgZnJhIGxlIGR1ZSBhbmNvcmVcclxuICAgIGxpbmVzLnB1c2goYCMke3VpZH0gLnRtdy1waWNrZXItbGFiZWwudG13LXBpY2tlci1sYWJlbC0taW5saW5lIHsgYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7IH1gKTtcclxuXHJcbiAgICAvLyB0bXctcGlja2VyIGFuY29yYSBsYSBsYWJlbCBzb2xsZXZhdGEgYWwgYm9yZG8gY29uIFwiYm90dG9tXCI6IGxhIHNpIHJpcG9ydGEgYSBcInRvcFwiIGNvc8OsXHJcbiAgICAvLyBjaGUgXCJQb3NpemlvbmUgdmVydGljYWxlICh0b3ApXCIgZnVuemlvbmkgY29tZSBuZWdsaSBhbHRyaSBjYW1waSAoMCA9IGNlbnRyYXRhIHN1bCBib3JkbylcclxuICAgIGlmIChoYXNGbG9hdGluZ0xhYmVsU3R5bGVzKGNzcyBhcyBhbnksICdEZXNjcml6aW9uZScpKSB7XHJcbiAgICAgIGxpbmVzLnB1c2goYCMke3VpZH0gLnRtdy1waWNrZXItbGFiZWwke1BJQ0tFUl9MQUJFTF9GTE9BVElOR19TVUZGSVh9IHsgYm90dG9tOiBhdXRvICFpbXBvcnRhbnQ7IHRvcDogMCAhaW1wb3J0YW50OyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSkgIWltcG9ydGFudDsgfWApO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgZWwgb2YgRUxFTUVOVFMpIHtcclxuICAgICAgY29uc3QgcyA9IEVMRU1FTlRfU0VMRUNUT1JTW2VsXTtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgc3RhdGUgb2YgU1RBVEVTKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gZWwgKyBzdGF0ZTtcclxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBERUZBVUxUX0ZJRUxEX1NUWUxFU1trZXldO1xyXG4gICAgICAgIGNvbnN0IHVzZXJWYWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHJlYWRTdHlsZUNzcyhjc3MgYXMgYW55LCBrZXkpO1xyXG5cclxuICAgICAgICBpZiAoIWRlZmF1bHRWYWw/LnRyaW0oKSAmJiAhdXNlclZhbD8udHJpbSgpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIHMpO1xyXG4gICAgICAgIGlmICghc2VsZWN0b3IpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBpZiAoZGVmYXVsdFZhbD8udHJpbSgpKSBsaW5lcy5wdXNoKGAke3NlbGVjdG9yfSB7ICR7ZGVmYXVsdFZhbH0gfWApO1xyXG4gICAgICAgIGlmICh1c2VyVmFsPy50cmltKCkpIHtcclxuICAgICAgICAgIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHtGT1JDRV9JTVBPUlRBTlRfRUxFTUVOVFMuaGFzKGVsKSA/IGZvcmNlSW1wb3J0YW50Q3NzKHVzZXJWYWwpIDogdXNlclZhbH0gfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodXNlclZhbD8udHJpbSgpICYmIGVsID09PSAnRGVzY3JpemlvbmUnICYmIGNzc1NldHNUb3AodXNlclZhbCkpIHtcclxuICAgICAgICAgIGxpbmVzLnB1c2goYCR7dGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBFTEVNRU5UX1NFTEVDVE9SU1snRGVzY3JpemlvbmVTb2xsZXZhdGEnXSl9IHsgdG9wOiAwICFpbXBvcnRhbnQ7IH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGluZXMuam9pbignXFxuJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVN0YXRlQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZFVpZCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmllbGRVaWQpO1xyXG4gICAgaWYgKCF3cmFwcGVyKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXN0YXRlLWhvdmVyJywgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1mb2N1c2VkJywgIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ0ZvY3VzZWQnKTtcclxuXHJcbiAgICBpZiAodGhpcy5mb3JjZVN0YXRlID09PSAnTm90VmFsaWQnKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1pbnZhbGlkJywgdHJ1ZSk7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsIGZhbHNlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ1JlYWRvbmx5Jykge1xyXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtcmVhZG9ubHknLCB0cnVlKTtcclxuICAgICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLWludmFsaWQnLCBmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmZvcmNlU3RhdGUgPT09ICdOb3JtYWxlJyB8fCB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInIHx8IHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ0ZvY3VzZWQnKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1pbnZhbGlkJywgZmFsc2UpO1xyXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtcmVhZG9ubHknLCBmYWxzZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpc1JlYWRvbmx5ID0gdGhpcy5maWVsZC5SZWFkb25seSB8fCAodGhpcy5maWVsZC5Gb3JtdWxhICE9IG51bGwgJiYgdGhpcy5maWVsZC5Gb3JtdWxhICE9PSAnJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtcmVhZG9ubHknLCBpc1JlYWRvbmx5KTtcclxuXHJcbiAgICBjb25zdCBjdHJsID0gdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwPy5jb250cm9scz8uW3RoaXMuZmllbGQuTmFtZV07XHJcbiAgICBpZiAoY3RybD8udG91Y2hlZCkge1xyXG4gICAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5pbnZhbGlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1pbnZhbGlkJywgZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDbGFzcyhlbDogRWxlbWVudCwgY2xzOiBzdHJpbmcsIGNvbmRpdGlvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgY2xzKTtcclxuICAgIGVsc2UgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgY2xzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9Gb3JtU3RhdHVzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdGF0dXNTdWI/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICBpZiAodGhpcy5maWVsZD8uRm9ybUZvcm1Hcm91cCkge1xyXG4gICAgICB0aGlzLnN0YXR1c1N1YiA9IHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRlQ2xhc3NlcygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGFjdGl2ZVN0eWxlU3VmZml4KCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5mb3JjZVN0YXRlKSByZXR1cm4gdGhpcy5mb3JjZVN0YXRlO1xyXG4gICAgY29uc3QgaXNSZWFkb25seSA9IHRoaXMuZmllbGQuUmVhZG9ubHkgfHwgKHRoaXMuZmllbGQuRm9ybXVsYSAhPSBudWxsICYmIHRoaXMuZmllbGQuRm9ybXVsYSAhPT0gJycpO1xyXG4gICAgaWYgKGlzUmVhZG9ubHkpIHJldHVybiAnUmVhZG9ubHknO1xyXG4gICAgY29uc3QgY3RybCA9IHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cD8uY29udHJvbHM/Llt0aGlzLmZpZWxkLk5hbWVdO1xyXG4gICAgaWYgKGN0cmw/LnRvdWNoZWQgJiYgdGhpcy5maWVsZC5Gb3JtRm9ybUdyb3VwPy5pbnZhbGlkKSByZXR1cm4gJ05vdFZhbGlkJztcclxuICAgIGlmICh0aGlzLmZvY3VzZWQpIHJldHVybiAnRm9jdXNlZCc7XHJcbiAgICBpZiAodGhpcy5ob3ZlcmluZykgcmV0dXJuICdNb3VzZW92ZXInO1xyXG4gICAgcmV0dXJuICdOb3JtYWxlJztcclxuICB9XHJcblxyXG4gIGdldERhdGVTdHlsZUJ5U3RhdGUoYmFzZUtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNzcyA9ICh0aGlzLmZpZWxkIGFzIERhdGVGaWVsZCk/LkRhdGVGaWVsZFN0eWxlQ1NTO1xyXG4gICAgaWYgKCFjc3MpIHJldHVybiAnJztcclxuICAgIHJldHVybiAoY3NzIGFzIGFueSlbYmFzZUtleSArIHRoaXMuYWN0aXZlU3R5bGVTdWZmaXhdID8/ICcnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0b2RvIHBlciBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgY2FtcG8gcXVhbmRvIHF1ZXN0byDDqCByYXBwcmVzZW50YXRvIGRhIHVuYSBmb3JtdWxhLlxyXG4gICAqL1xyXG4gIHVwZGF0ZUZpZWxkKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuUmVhZG9ubHlJZikge1xyXG4gICAgICB0aGlzLmZpZWxkLlJlYWRvbmx5ID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuRXZhbHVhdGVGaWVsZEZvcm11bGEodGhpcy5maWVsZC5SZWFkb25seUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgIH1cclxuICAgIGlmICgodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlIHx8IHRoaXMuZmllbGQuRGF0YUdldHRlci5EYXRhR2V0dGVyVHlwZSA9PSBEYXRhR2V0dGVyVHlwZUVudW0uRm9ybXVsYSkgJiYgdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBVdGlsaXR5SGVscGVyU2VydmljZS5FdmFsdWF0ZUZpZWxkRm9ybXVsYSh0aGlzLmZpZWxkLkZvcm11bGEsIHRoaXMucmVjb3JkLCB0aGlzLmZvcm11bGFPYmplY3QpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZmllbGQuVmlzaWJsZUlmKSB7XHJcbiAgICAgIHRoaXMuZmllbGQuSW5MaXN0VmlldyA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLkV2YWx1YXRlRmllbGRGb3JtdWxhKHRoaXMuZmllbGQuVmlzaWJsZUlmLCB0aGlzLnJlY29yZCwgdGhpcy5mb3JtdWxhT2JqZWN0KTtcclxuICAgICAgaWYoIXRoaXMuZmllbGQuSW5MaXN0VmlldyAmJiAhdGhpcy5maWVsZC5NYWludGFpbl9WYWx1ZSl7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXT1udWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJUeXBlID09IERhdGFHZXR0ZXJUeXBlRW51bS5NYW51YWxlICYmIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gdGhpcy5maWVsZC5EYXRhR2V0dGVyLkRhdGFHZXR0ZXJWYWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldG9kbyBwZXIgZW1ldHRlcmUgbCdldmVudG8gY2hlIGlsIHZhbG9yZSBkZWwgcmVjb3JkIMOoIGNhbWJpYXRvLlxyXG4gICAqL1xyXG4gIG9uUmVjb3JkVmFsdWVDaGFuZ2UoZXYpIHtcclxuICAgIHRoaXMuZmllbGQuRmllbGRWYWx1ZT1ldjtcclxuICAgIHRoaXMuZmllbGQuRm9ybUZvcm1Hcm91cC5nZXQoW3RoaXMuZmllbGQuTmFtZV0pLnNldFZhbHVlKGV2KTtcclxuICAgIGlmICghdGhpcy5maWVsZC5Gb3JtdWxhKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0T3V0cHV0Rm9ybWF0KCl7XHJcblxyXG4gICAgaWYgKHRoaXMuZmllbGQuRGF0ZUZvcm1hdCAhPSBudWxsKXtcclxuICAgICAgdGhpcy5vdXRwdXRGb3JtYXQgPSB0aGlzLmZpZWxkLkRhdGVGb3JtYXRcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnU29sbyBkYXRhJ10pe1xyXG4gICAgICAgIHRoaXMub3V0cHV0Rm9ybWF0ID0gJ2RkL01NL3l5eXknO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpZWxkLklzT25seURhdGUgPT0gRGF0ZVRpbWVUeXBlRW51bVsnRGF0YSBlIG9yYSddKXtcclxuICAgICAgICB0aGlzLm91dHB1dEZvcm1hdCA9ICdkZC9NTS95eXl5IEhIOm1tJztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5maWVsZC5Jc09ubHlEYXRlID09IERhdGVUaW1lVHlwZUVudW1bJ1NvbG8gb3JhcmlvJ10pe1xyXG4gICAgICAgIHRoaXMub3V0cHV0Rm9ybWF0ID0gJ0hIOm1tJztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm91dHB1dEZvcm1hdC5pbmRleE9mKFwic3NcIikgIT0gLTEpe1xyXG4gICAgICB0aGlzLnNob3dTZWNvbmRzID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbiBiYXNlIGFsIGZvcm1hdG8gZGVsbGEgZGF0YSByaWNoaWVzdGEgbmVsIERhdGVGaWVsZCAoc29sbyBkYXRhLCBzb2xvIG9yYXJpbyBvIGRhdGEgZSBvcmEpXHJcbiAgICogaW1wb3N0YSBsYSB2aXN1YWxpenphemlvbmUgY29ycmV0dGEgZGVsIGNvbXBvbmVudGUgdG13LWRhdGV0aW1lcGlja2VyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0VGltZVR5cGUoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuZmllbGQuSXNPbmx5RGF0ZSkge1xyXG4gICAgICBjYXNlIERhdGVUaW1lVHlwZUVudW1bXCJTb2xvIGRhdGFcIl06XHJcbiAgICAgICAgdGhpcy5tb2RlID0gTW9kZUVudW0uREFURVBJQ0tFUjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBEYXRlVGltZVR5cGVFbnVtW1wiU29sbyBvcmFyaW9cIl06XHJcbiAgICAgICAgdGhpcy5tb2RlID0gTW9kZUVudW0uVElNRVBJQ0tFUjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBEYXRlVGltZVR5cGVFbnVtW1wiRGF0YSBlIG9yYVwiXTpcclxuICAgICAgICB0aGlzLm1vZGUgPSBNb2RlRW51bS5EQVRFVElNRVBJQ0tFUjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBpZD1cInt7ZmllbGRVaWR9fVwiXHJcbiAgICAgKG1vdXNlZW50ZXIpPVwiaG92ZXJpbmc9dHJ1ZVwiIChtb3VzZWxlYXZlKT1cImhvdmVyaW5nPWZhbHNlXCJcclxuICAgICAoZm9jdXNpbik9XCJmb2N1c2VkPXRydWVcIiAgIChmb2N1c291dCk9XCJmb2N1c2VkPWZhbHNlXCI+XHJcbiAgICA8dG13LWRhdGV0aW1lcGlja2VyXHJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImZpZWxkLkRlc2NyaXB0aW9uXCJcclxuICAgICAgICBbbGFiZWxdPVwiZmllbGQuRGVzY3JpcHRpb25cIlxyXG4gICAgICAgIFtoYXZlRmxvYXRpbmdMYWJlbF09XCJ0cnVlXCJcclxuICAgICAgICBbcGlja2VyTW9kZV09XCJtb2RlXCJcclxuICAgICAgICBbbWluRGF0ZV09XCJmaWVsZC5NaW5EYXRlID8gZmllbGQuTWluRGF0ZSA6IG51bGxcIlxyXG4gICAgICAgIFttYXhEYXRlXT1cImZpZWxkLk1heERhdGUgPyBmaWVsZC5NYXhEYXRlIDogbnVsbFwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZpZWxkLlJlYWRvbmx5XCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInJlY29yZFtmaWVsZC5OYW1lXVwiXHJcbiAgICAgICAgKGRhdGVDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICBbb3V0cHV0Rm9ybWF0XT1cIm91dHB1dEZvcm1hdFwiXHJcbiAgICAgICAgW3Nob3dTZWNvbmRzXT1cInNob3dTZWNvbmRzXCJcclxuICAgICAgICBbY29udGFpbmVyU3R5bGVdPVwiZ2V0RGF0ZVN0eWxlQnlTdGF0ZSgnQ29udGVuaXRvcmVJbnRlcm5vJylcIlxyXG4gICAgICAgIFtpbnB1dFN0eWxlXT1cImdldERhdGVTdHlsZUJ5U3RhdGUoJ0NhbXBvRGF0YScpXCJcclxuICAgICAgICBbY2FsZW5kYXJCdXR0b25TdHlsZV09XCJnZXREYXRlU3R5bGVCeVN0YXRlKCdJY29uYUNhbGVuZGFyaW8nKVwiXHJcbiAgICAgICAgW2Nsb2NrQnV0dG9uU3R5bGVdPVwiZ2V0RGF0ZVN0eWxlQnlTdGF0ZSgnSWNvbmFPcm9sb2dpbycpXCJcclxuICAgICAgICBbY2xvc2VCdXR0b25TdHlsZV09XCJnZXREYXRlU3R5bGVCeVN0YXRlKCdJY29uYUNhbmNlbGxhemlvbmUnKVwiXHJcbiAgICAgICAgW3Rvb2x0aXBTdHlsZV09XCJnZXREYXRlU3R5bGVCeVN0YXRlKCdUb29sdGlwJylcIlxyXG4gICAgICAgIFtpY29uc1Bvc2l0aW9uXT1cImZpZWxkLkljb25zUG9zaXRpb24gfHwgJ3JpZ2h0J1wiXHJcbiAgICAgICAgW2Nsb3NlSWNvblBvc2l0aW9uXT1cImZpZWxkLkNsb3NlSWNvblBvc2l0aW9uIHx8ICdyaWdodCdcIlxyXG4gICAgICAgIFt1c2VUb29sdGlwXT1cImZpZWxkLlVzZVRvb2x0aXAgfHwgZmFsc2VcIj5cclxuICAgIDwvdG13LWRhdGV0aW1lcGlja2VyPlxyXG48L2Rpdj5cclxuIl19
@@ -1,4 +1,7 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
+ import { MatFormField } from '@angular/material/form-field';
3
+ import { refreshOutlineNotch, watchOutlineNotch } from '../../../../utils/refresh-outline-notch';
4
+ import { buildFloatingLabelBaseRules, cssSetsTop, LABEL_FLOATING_SUFFIX, readStyleCss } from '../../../../utils/floating-label-styles';
2
5
  import { UtilityHelperService } from '../../../../services/utilityHelper.services';
3
6
  import { DynAttachmentSelectObject } from '../../../../models/dynAttachment';
4
7
  import { GlobalService } from '../../../../services/global.service';
@@ -13,6 +16,7 @@ const ELEMENT_SELECTORS = {
13
16
  Container: ' mat-form-field',
14
17
  CasellaSelezione: ' .mat-mdc-text-field-wrapper',
15
18
  Descrizione: ' .mdc-floating-label',
19
+ DescrizioneSollevata: ' .mdc-floating-label' + LABEL_FLOATING_SUFFIX,
16
20
  };
17
21
  const STATES = ['Normale', 'Mouseover', 'Selezionato', 'NotValid', 'Readonly'];
18
22
  const DEFAULT_FIELD_STYLES = {};
@@ -25,6 +29,7 @@ export class ImageFieldSelectorTemplateComponent {
25
29
  this.forceState = null;
26
30
  this.recordChange = new EventEmitter();
27
31
  this.styleEl = null;
32
+ this.notchObserver = null;
28
33
  }
29
34
  ngOnInit() {
30
35
  this.fieldUid = 'isf-' + Math.random().toString(36).slice(2, 10);
@@ -42,13 +47,20 @@ export class ImageFieldSelectorTemplateComponent {
42
47
  if (changes['forceState']) {
43
48
  this.updateStateClasses();
44
49
  }
50
+ if (changes['styleVersion'] || changes['forceState']) {
51
+ refreshOutlineNotch(this.formField);
52
+ }
45
53
  if (changes['record'] && !changes['record'].firstChange &&
46
54
  JSON.stringify(changes['record'].currentValue) !== JSON.stringify(changes['record'].previousValue)) {
47
55
  this.record = changes['record'].currentValue;
48
56
  this.updateField();
49
57
  }
50
58
  }
59
+ ngAfterViewInit() {
60
+ this.notchObserver = watchOutlineNotch(this.formField);
61
+ }
51
62
  ngOnDestroy() {
63
+ this.notchObserver?.disconnect();
52
64
  if (this.styleEl?.parentNode) {
53
65
  this.styleEl.parentNode.removeChild(this.styleEl);
54
66
  }
@@ -116,14 +128,14 @@ export class ImageFieldSelectorTemplateComponent {
116
128
  this.styleEl.textContent = rules;
117
129
  }
118
130
  buildCssRules(uid, css) {
119
- const lines = [];
131
+ const lines = buildFloatingLabelBaseRules(uid, ELEMENT_SELECTORS.Descrizione, css);
120
132
  // Elementi scoped da #uid (interni al mat-form-field)
121
133
  for (const el of Object.keys(ELEMENT_SELECTORS)) {
122
134
  const s = ELEMENT_SELECTORS[el];
123
135
  for (const state of STATES) {
124
136
  const key = el + state;
125
137
  const defaultVal = DEFAULT_FIELD_STYLES[key];
126
- const userVal = css[key];
138
+ const userVal = readStyleCss(css, key);
127
139
  if (!defaultVal?.trim() && !userVal?.trim())
128
140
  continue;
129
141
  const selector = this.getSelector(uid, state, el, s);
@@ -133,6 +145,11 @@ export class ImageFieldSelectorTemplateComponent {
133
145
  lines.push(`${selector} { ${defaultVal} }`);
134
146
  if (userVal?.trim()) {
135
147
  lines.push(`${selector} { ${userVal} }`);
148
+ if (el === 'Descrizione' && cssSetsTop(userVal)) {
149
+ const floatSel = this.getSelector(uid, state, el, s + LABEL_FLOATING_SUFFIX);
150
+ if (floatSel)
151
+ lines.push(`${floatSel} { top: 0; }`);
152
+ }
136
153
  // CasellaSelezione: inietta anche sul testo selezionato per color/font
137
154
  if (el === 'CasellaSelezione') {
138
155
  const textSel = this.getSelector(uid, state, el, ' .mat-mdc-select-value');
@@ -230,7 +247,7 @@ export class ImageFieldSelectorTemplateComponent {
230
247
  }
231
248
  }
232
249
  ImageFieldSelectorTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImageFieldSelectorTemplateComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
233
- ImageFieldSelectorTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: { record: "record", formulaObject: "formulaObject", field: "field", inConfig: "inConfig", styleVersion: "styleVersion", forceState: "forceState" }, outputs: { recordChange: "recordChange" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"{{fieldUid}}\">\r\n\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">{{field.Description}}</mat-label>\r\n\r\n <!-- Mat-Select SINGOLA -->\r\n <mat-select *ngIf=\"!field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\"\r\n [panelClass]=\"fieldUid\">\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n <!-- Mat-Select MULTIPLA -->\r\n <mat-select *ngIf=\"field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\" multiple\r\n [panelClass]=\"fieldUid\">\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n </mat-form-field>\r\n\r\n</div>\r\n", styles: [".mdc-list-item__primary-text{margin-right:50px}\n"], dependencies: [{ kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.MatLabel, selector: "mat-label" }, { kind: "component", type: i2.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
250
+ ImageFieldSelectorTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: { record: "record", formulaObject: "formulaObject", field: "field", inConfig: "inConfig", styleVersion: "styleVersion", forceState: "forceState" }, outputs: { recordChange: "recordChange" }, viewQueries: [{ propertyName: "formField", first: true, predicate: MatFormField, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div id=\"{{fieldUid}}\">\r\n\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">{{field.Description}}</mat-label>\r\n\r\n <!-- Mat-Select SINGOLA -->\r\n <mat-select *ngIf=\"!field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\"\r\n [panelClass]=\"fieldUid\">\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n <!-- Mat-Select MULTIPLA -->\r\n <mat-select *ngIf=\"field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\" multiple\r\n [panelClass]=\"fieldUid\">\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n </mat-form-field>\r\n\r\n</div>\r\n", styles: [".mdc-list-item__primary-text{margin-right:50px}\n"], dependencies: [{ kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.MatLabel, selector: "mat-label" }, { kind: "component", type: i2.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
234
251
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImageFieldSelectorTemplateComponent, decorators: [{
235
252
  type: Component,
236
253
  args: [{ selector: 'image-field-selector-template', template: "<div id=\"{{fieldUid}}\">\r\n\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">{{field.Description}}</mat-label>\r\n\r\n <!-- Mat-Select SINGOLA -->\r\n <mat-select *ngIf=\"!field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\"\r\n [panelClass]=\"fieldUid\">\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n <!-- Mat-Select MULTIPLA -->\r\n <mat-select *ngIf=\"field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\" multiple\r\n [panelClass]=\"fieldUid\">\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n </mat-form-field>\r\n\r\n</div>\r\n", styles: [".mdc-list-item__primary-text{margin-right:50px}\n"] }]
@@ -244,9 +261,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
244
261
  type: Input
245
262
  }], styleVersion: [{
246
263
  type: Input
264
+ }], formField: [{
265
+ type: ViewChild,
266
+ args: [MatFormField]
247
267
  }], forceState: [{
248
268
  type: Input
249
269
  }], recordChange: [{
250
270
  type: Output
251
271
  }] } });
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9pbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZS9pbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlL2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUcvSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNuRixPQUFPLEVBQWlCLHlCQUF5QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7O0FBRXBFLHVFQUF1RTtBQUN2RSxNQUFNLGlCQUFpQixHQUE4QjtJQUNuRCxTQUFTLEVBQVMsaUJBQWlCO0lBQ25DLGdCQUFnQixFQUFFLDhCQUE4QjtJQUNoRCxXQUFXLEVBQU8sc0JBQXNCO0NBQ3pDLENBQUM7QUFFRixNQUFNLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMvRSxNQUFNLG9CQUFvQixHQUE4QixFQUFFLENB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Q0FBQztJQUVPLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxJQUFZO1FBQ25ELE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsSUFBSSxrREFBa0QsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN4QyxDQUFDOztpSUF0T1UsbUNBQW1DO3FIQUFuQyxtQ0FBbUMsaVNDdEJoRCxpcERBNEJBOzRGRE5hLG1DQUFtQztrQkFML0MsU0FBUzsrQkFDRSwrQkFBK0I7Z0dBTWhDLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkLCBJbWFnZVNlbGVjdG9yRmllbGRTdHlsZUNTUyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VTZWxlY3RvckZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgRHluQXR0YWNobWVudCwgRHluQXR0YWNobWVudFNlbGVjdE9iamVjdCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9keW5BdHRhY2htZW50JztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcbi8vIEVsZW1lbnRpIHNjb3BlZCBkYSAjZmllbGRVaWQgKG1hdC1mb3JtLWZpZWxkIERPTSBpbnRlcm5vIGFsIHdyYXBwZXIpXHJcbmNvbnN0IEVMRU1FTlRfU0VMRUNUT1JTOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gIENvbnRhaW5lcjogICAgICAgICcgbWF0LWZvcm0tZmllbGQnLFxyXG4gIENhc2VsbGFTZWxlemlvbmU6ICcgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyJyxcclxuICBEZXNjcml6aW9uZTogICAgICAnIC5tZGMtZmxvYXRpbmctbGFiZWwnLFxyXG59O1xyXG5cclxuY29uc3QgU1RBVEVTID0gWydOb3JtYWxlJywgJ01vdXNlb3ZlcicsICdTZWxlemlvbmF0bycsICdOb3RWYWxpZCcsICdSZWFkb25seSddO1xyXG5jb25zdCBERUZBVUxUX0ZJRUxEX1NUWUxFUzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbWFnZUZpZWxkU2VsZWN0b3JUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBmaWVsZDogSW1hZ2VTZWxlY3RvckZpZWxkO1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3R5bGVWZXJzaW9uOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGZvcmNlU3RhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIEZpZWxkc3R5bGVPYmo6IGFueTtcclxuICBMYWJlbHN0eWxlT2JqOiBhbnk7XHJcbiAgdHJhbnNmb3JtZWRSZWNvcmQ6IGFueTtcclxuXHJcbiAgZmllbGRVaWQ6IHN0cmluZztcclxuICBwcml2YXRlIHN0eWxlRWw6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpZWxkVWlkID0gJ2lzZi0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApO1xyXG4gICAgdGhpcy5pbmplY3RTdHlsZXMoKTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdJbWFnZUZpZWxkU2VsZWN0b3JUZW1wbGF0ZUNvbXBvbmVudCBuZ09uSW5pdCAtIHJlY29yZCcsIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnSW1hZ2VGaWVsZFNlbGVjdG9yVGVtcGxhdGVDb21wb25lbnQgbmdPbkluaXQgLSBmaWVsZCcsIHRoaXMuZmllbGQpO1xyXG5cclxuICAgIHRoaXMuaW5pdFN0eWxlcygpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplQXR0YWNobWVudHMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdHlsZVZlcnNpb24nXSAmJiAhY2hhbmdlc1snc3R5bGVWZXJzaW9uJ10uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5pbmplY3RTdHlsZXMoKTtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydmb3JjZVN0YXRlJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAmJiAhY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgJiZcclxuICAgICAgICBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdHlsZUVsPy5wYXJlbnROb2RlKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVFbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuRmllbGRzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkxhYmVsc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuTGFiZWxzdHlsZUNTUyk7XHJcbiAgfVxyXG5cclxuICBUb0xvd2VyQ2FzZShlbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gZWwudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpZWxkKCkgeyB9XHJcblxyXG4gIGluaXRpYWxpemVBdHRhY2htZW50cygpIHtcclxuICAgIGlmICghdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdCB8fCB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuZm9yRWFjaCgoYXR0YWNobWVudCkgPT4ge1xyXG4gICAgICBhdHRhY2htZW50Lm9iamVjdFRvU2VsZWN0ID0gbmV3IER5bkF0dGFjaG1lbnRTZWxlY3RPYmplY3QoKTtcclxuICAgICAgYXR0YWNobWVudC5vYmplY3RUb1NlbGVjdC5JRCA9IGF0dGFjaG1lbnQuSUQ7XHJcbiAgICAgIGF0dGFjaG1lbnQub2JqZWN0VG9TZWxlY3QuQnV0dG9uS2V5ID0gYXR0YWNobWVudC5CdXR0b25LZXk7XHJcbiAgICAgIGF0dGFjaG1lbnQub2JqZWN0VG9TZWxlY3QuQnV0dG9uVmFsdWUgPSBhdHRhY2htZW50LkJ1dHRvblZhbHVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gIT0gbnVsbCkge1xyXG4gICAgICBpZiAoIXRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVkUmVjb3JkID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5JRDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVkUmVjb3JkID0gW107XHJcbiAgICAgICAgKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gYXMgQXJyYXk8RHluQXR0YWNobWVudD4pLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhbnNmb3JtZWRSZWNvcmQucHVzaChOdW1iZXIoZWxlbWVudC5JRCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBuZXcgQXJyYXk8RHluQXR0YWNobWVudD4oKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIGR5bkF0dGFjaG1lbnQ6IER5bkF0dGFjaG1lbnQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuZmluZCh4ID0+IHguSUQgPT0gZXZlbnQpKSk7XHJcbiAgICAgICAgZHluQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGR5bkF0dGFjaG1lbnQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJhbnNmb3JtZWRSZWNvcmQ/LmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICB2YXIgZHluQXR0YWNobWVudDogRHluQXR0YWNobWVudCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSBlbGVtZW50KSkpO1xyXG4gICAgICAgIGR5bkF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ucHVzaChkeW5BdHRhY2htZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgQ1NTIGluamVjdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBpbmplY3RTdHlsZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNzcyA9ICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCk/LkltYWdlU2VsZWN0b3JGaWVsZFN0eWxlQ1NTID8/ICh7fSBhcyBJbWFnZVNlbGVjdG9yRmllbGRTdHlsZUNTUyk7XHJcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuYnVpbGRDc3NSdWxlcyh0aGlzLmZpZWxkVWlkLCBjc3MpO1xyXG4gICAgaWYgKCF0aGlzLnN0eWxlRWwpIHtcclxuICAgICAgdGhpcy5zdHlsZUVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpIGFzIEhUTUxTdHlsZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5pZCA9ICdzdHlsZS0nICsgdGhpcy5maWVsZFVpZDtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCB0aGlzLnN0eWxlRWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdHlsZUVsLnRleHRDb250ZW50ID0gcnVsZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQ3NzUnVsZXModWlkOiBzdHJpbmcsIGNzczogSW1hZ2VTZWxlY3RvckZpZWxkU3R5bGVDU1MpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgLy8gRWxlbWVudGkgc2NvcGVkIGRhICN1aWQgKGludGVybmkgYWwgbWF0LWZvcm0tZmllbGQpXHJcbiAgICBmb3IgKGNvbnN0IGVsIG9mIE9iamVjdC5rZXlzKEVMRU1FTlRfU0VMRUNUT1JTKSkge1xyXG4gICAgICBjb25zdCBzID0gRUxFTUVOVF9TRUxFQ1RPUlNbZWxdO1xyXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIFNUQVRFUykge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGVsICsgc3RhdGU7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gREVGQVVMVF9GSUVMRF9TVFlMRVNba2V5XTtcclxuICAgICAgICBjb25zdCB1c2VyVmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoY3NzIGFzIGFueSlba2V5XTtcclxuICAgICAgICBpZiAoIWRlZmF1bHRWYWw/LnRyaW0oKSAmJiAhdXNlclZhbD8udHJpbSgpKSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsIHMpO1xyXG4gICAgICAgIGlmICghc2VsZWN0b3IpIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmIChkZWZhdWx0VmFsPy50cmltKCkpIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHtkZWZhdWx0VmFsfSB9YCk7XHJcbiAgICAgICAgaWYgKHVzZXJWYWw/LnRyaW0oKSkge1xyXG4gICAgICAgICAgbGluZXMucHVzaChgJHtzZWxlY3Rvcn0geyAke3VzZXJWYWx9IH1gKTtcclxuICAgICAgICAgIC8vIENhc2VsbGFTZWxlemlvbmU6IGluaWV0dGEgYW5jaGUgc3VsIHRlc3RvIHNlbGV6aW9uYXRvIHBlciBjb2xvci9mb250XHJcbiAgICAgICAgICBpZiAoZWwgPT09ICdDYXNlbGxhU2VsZXppb25lJykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0U2VsID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgJyAubWF0LW1kYy1zZWxlY3QtdmFsdWUnKTtcclxuICAgICAgICAgICAgaWYgKHRleHRTZWwpIGxpbmVzLnB1c2goYCR7dGV4dFNlbH0geyAke3VzZXJWYWx9IH1gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBTZWxlemlvbmk6IHNjb3BlZCBkYWwgcGFuZWxDbGFzcyAob3ZlcmxheSBmdW9yaSBkYSAjdWlkKVxyXG4gICAgLy8gTm9ybWFsZS9Nb3VzZW92ZXIvU2VsZXppb25hdG86IHBlci1pdGVtIChhcHBsaWNhdGkgc3VsbGEgc2luZ29sYSBvcHppb25lKVxyXG4gICAgLy8gTm90VmFsaWQvUmVhZG9ubHk6IG5vbiBhcHBsaWNhYmlsaSBhbGwnb3ZlcmxheSwgaWdub3JhdGlcclxuICAgIGNvbnN0IHNlbGV6aW9uaU92ZXJsYXlTdGF0ZXMgPSBbJ05vcm1hbGUnLCAnTW91c2VvdmVyJywgJ1NlbGV6aW9uYXRvJ107XHJcbiAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIHNlbGV6aW9uaU92ZXJsYXlTdGF0ZXMpIHtcclxuICAgICAgY29uc3Qga2V5ID0gJ1NlbGV6aW9uaScgKyBzdGF0ZTtcclxuICAgICAgY29uc3QgdXNlclZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gKGNzcyBhcyBhbnkpW2tleV07XHJcbiAgICAgIGlmICghdXNlclZhbD8udHJpbSgpKSBjb250aW51ZTtcclxuICAgICAgY29uc3QgcGFuZWxTZWwgPSB0aGlzLmdldFNlbGV6aW9uaVNlbGVjdG9yKHVpZCwgc3RhdGUpO1xyXG4gICAgICBpZiAoIXBhbmVsU2VsKSBjb250aW51ZTtcclxuICAgICAgY29uc3QgYmFzZU9wdGlvblNlbCA9IHRoaXMuZ2V0U2VsZXppb25pQmFzZVNlbGVjdG9yKHVpZCwgc3RhdGUpO1xyXG4gICAgICBjb25zdCB2YWxXaXRoSW1wb3J0YW50ID0gdGhpcy5mb3JjZUltcG9ydGFudCh1c2VyVmFsKTtcclxuICAgICAgbGluZXMucHVzaChgJHtwYW5lbFNlbH0geyAke3ZhbFdpdGhJbXBvcnRhbnR9IH1gKTtcclxuICAgICAgLy8gY29sb3Igc3UgU2VsZXppb25pIOKGkiBjYW1iaWEgdGVzdG8gb3B6aW9uZSBFIGNoZWNrYm94IHBzZXVkby1jaGVja2JveFxyXG4gICAgICBjb25zdCBjb2xvclZhbCA9IHRoaXMuZXh0cmFjdENzc1Byb3BWYWx1ZSh1c2VyVmFsLCAnY29sb3InKTtcclxuICAgICAgaWYgKGNvbG9yVmFsKSB7XHJcbiAgICAgICAgbGluZXMucHVzaChgJHtiYXNlT3B0aW9uU2VsfSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0IHsgY29sb3I6ICR7Y29sb3JWYWx9ICFpbXBvcnRhbnQ7IH1gKTtcclxuICAgICAgICBsaW5lcy5wdXNoKGAke2Jhc2VPcHRpb25TZWx9IC5tYXQtcHNldWRvLWNoZWNrYm94IHsgYm9yZGVyLWNvbG9yOiAke2NvbG9yVmFsfSAhaW1wb3J0YW50OyB9YCk7XHJcbiAgICAgICAgbGluZXMucHVzaChgJHtiYXNlT3B0aW9uU2VsfSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkIHsgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvclZhbH0gIWltcG9ydGFudDsgfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgLy8gU2VsZXR0b3JlIHBlciBlbGVtZW50aSBpbnRlcm5pIGFsIG1hdC1mb3JtLWZpZWxkICgjdWlkIHNjb3BpbmcpXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZywgZWw6IHN0cmluZywgczogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ05vcm1hbGUnOiAgICByZXR1cm4gYCMke3VpZH0ke3N9YDtcclxuICAgICAgY2FzZSAnTW91c2VvdmVyJzogIHJldHVybiBgIyR7dWlkfTpob3ZlciR7c30sICMke3VpZH0uZXFwLXN0YXRlLWhvdmVyJHtzfWA7XHJcbiAgICAgIGNhc2UgJ1NlbGV6aW9uYXRvJzogcmV0dXJuIGAjJHt1aWR9LmVxcC1zdGF0ZS1zZWxlY3RlZCR7c31gO1xyXG4gICAgICBjYXNlICdOb3RWYWxpZCc6ICAgcmV0dXJuIGAjJHt1aWR9LmVxcC1pbnZhbGlkJHtzfWA7XHJcbiAgICAgIGNhc2UgJ1JlYWRvbmx5JzogICByZXR1cm4gYCMke3VpZH0uZXFwLXJlYWRvbmx5JHtzfWA7XHJcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFNlbGV0dG9yZSBwZXIgbGUgb3B6aW9uaSBuZWwgcGFuZWwgb3ZlcmxheSAoc2NvcGVkIGRhbCBwYW5lbENsYXNzID0gdWlkKVxyXG4gIC8vIHBhbmVsQ2xhc3MgdmEgc3UgLm1hdC1tZGMtc2VsZWN0LXBhbmVsICh2aWEgW25nQ2xhc3NdKTsgbWF0LW9wdGlvbiBzb25vIGZpZ2xpIGRpcmV0dGlcclxuICBwcml2YXRlIGdldFNlbGV6aW9uaVNlbGVjdG9yKHVpZDogc3RyaW5nLCBzdGF0ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ05vcm1hbGUnOiAgICAgcmV0dXJuIGAuJHt1aWR9IG1hdC1vcHRpb24sIC4ke3VpZH0gLm1hdC1tZGMtb3B0aW9uYDtcclxuICAgICAgY2FzZSAnTW91c2VvdmVyJzogICByZXR1cm4gYC4ke3VpZH0gbWF0LW9wdGlvbjpob3ZlciwgLiR7dWlkfSAubWF0LW1kYy1vcHRpb246aG92ZXJgO1xyXG4gICAgICBjYXNlICdTZWxlemlvbmF0byc6IHJldHVybiBgLiR7dWlkfSBtYXQtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLCAuJHt1aWR9IC5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZGA7XHJcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBTZWxldHRvcmUgYmFzZSBzaW5nb2xvIHBlciBpIHN1Yi1lbGVtZW50IHJ1bGVzIChlcy4gLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dClcclxuICBwcml2YXRlIGdldFNlbGV6aW9uaUJhc2VTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ01vdXNlb3Zlcic6ICAgcmV0dXJuIGAuJHt1aWR9IG1hdC1vcHRpb246aG92ZXJgO1xyXG4gICAgICBjYXNlICdTZWxlemlvbmF0byc6IHJldHVybiBgLiR7dWlkfSBtYXQtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkYDtcclxuICAgICAgZGVmYXVsdDogICAgICAgICAgICByZXR1cm4gYC4ke3VpZH0gbWF0LW9wdGlvbmA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVN0YXRlQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZFVpZCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmllbGRVaWQpO1xyXG4gICAgaWYgKCF3cmFwcGVyKSByZXR1cm47XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtc3RhdGUtaG92ZXInLCAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1zZWxlY3RlZCcsIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ1NlbGV6aW9uYXRvJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsICAgICAgICAgdGhpcy5mb3JjZVN0YXRlID09PSAnTm90VmFsaWQnKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsICAgICAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdSZWFkb25seScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDbGFzcyhlbDogRWxlbWVudCwgY2xzOiBzdHJpbmcsIGNvbmRpdGlvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgY2xzKTtcclxuICAgIGVsc2UgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgY2xzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9yY2VJbXBvcnRhbnQoY3NzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNzcy5zcGxpdCgnOycpLm1hcChwYXJ0ID0+IHtcclxuICAgICAgY29uc3QgdHJpbW1lZCA9IHBhcnQudHJpbSgpO1xyXG4gICAgICBpZiAoIXRyaW1tZWQpIHJldHVybiBwYXJ0O1xyXG4gICAgICBpZiAodHJpbW1lZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCchaW1wb3J0YW50JykpIHJldHVybiBwYXJ0O1xyXG4gICAgICByZXR1cm4gcGFydC5yZXBsYWNlKC9cXHMrJC8sICcnKSArICcgIWltcG9ydGFudCc7XHJcbiAgICB9KS5qb2luKCc7Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RDc3NQcm9wVmFsdWUoY3NzOiBzdHJpbmcsIHByb3A6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGAoPzpefDspXFxcXHMqJHtwcm9wfVxcXFxzKjpcXFxccyooW147IV0rPykoPzpcXFxccyohaW1wb3J0YW50KT9cXFxccyooPzo7fCQpYCwgJ2knKTtcclxuICAgIGNvbnN0IG1hdGNoID0gY3NzLm1hdGNoKHJlKTtcclxuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnRyaW0oKSA6IG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJ7e2ZpZWxkVWlkfX1cIj5cclxuXHJcbiAgPG1hdC1mb3JtLWZpZWxkIFtmb3JtR3JvdXBdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICA8bWF0LWxhYmVsIGNsYXNzPVwicHQtMVwiIFtuZ1N0eWxlXT1cIkxhYmVsc3R5bGVPYmpcIj57e2ZpZWxkLkRlc2NyaXB0aW9ufX08L21hdC1sYWJlbD5cclxuXHJcbiAgICA8IS0tIE1hdC1TZWxlY3QgU0lOR09MQSAtLT5cclxuICAgIDxtYXQtc2VsZWN0ICpuZ0lmPVwiIWZpZWxkLklzTXVsdGlDaG9pY2hlXCIgY2xhc3M9XCJpbWFnZUZpZWxkU2VsZWN0b3JJbWFnZXNcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIlxyXG4gICAgW3JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJ0cmFuc2Zvcm1lZFJlY29yZFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbcGFuZWxDbGFzc109XCJmaWVsZFVpZFwiPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBmaWVsZC5BdHRhY2htZW50TGlzdFwiIFt2YWx1ZV09XCJhdHRhY2htZW50LklEXCI+XHJcbiAgICAgICAgPGltZyBzcmM9J2RhdGE6aW1hZ2Uve3tUb0xvd2VyQ2FzZShhdHRhY2htZW50LkZpbGVFeHRlbnNpb24pfX07YmFzZTY0LHt7YXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH19JyBbaGVpZ2h0XT1cImF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggIT0gbnVsbCA/IGF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggOiAxMjhcIj5cclxuICAgICAgICA8c3Bhbj57eyBhdHRhY2htZW50LkJ1dHRvbktleSB9fTwvc3Bhbj5cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG5cclxuICAgIDwhLS0gTWF0LVNlbGVjdCBNVUxUSVBMQSAtLT5cclxuICAgIDxtYXQtc2VsZWN0ICpuZ0lmPVwiZmllbGQuSXNNdWx0aUNob2ljaGVcIiBjbGFzcz1cImltYWdlRmllbGRTZWxlY3RvckltYWdlc1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiXHJcbiAgICBbcmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInRyYW5zZm9ybWVkUmVjb3JkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgkZXZlbnQpXCIgbXVsdGlwbGVcclxuICAgIFtwYW5lbENsYXNzXT1cImZpZWxkVWlkXCI+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGZpZWxkLkF0dGFjaG1lbnRMaXN0XCIgW3ZhbHVlXT1cImF0dGFjaG1lbnQuSURcIj5cclxuICAgICAgICA8aW1nIHNyYz0nZGF0YTppbWFnZS97e1RvTG93ZXJDYXNlKGF0dGFjaG1lbnQuRmlsZUV4dGVuc2lvbil9fTtiYXNlNjQse3thdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0fX0nIFtoZWlnaHRdPVwiYXR0YWNobWVudC5SZXNpemVkSW1hZ2VIZWlnaHRQeCAhPSBudWxsID8gYXR0YWNobWVudC5SZXNpemVkSW1hZ2VIZWlnaHRQeCA6IDEyOFwiPlxyXG4gICAgICAgIDxzcGFuPnt7IGF0dGFjaG1lbnQuQnV0dG9uS2V5IH19PC9zcGFuPlxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcblxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG48L2Rpdj5cclxuIl19
272
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9pbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZS9pbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlL2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBNEIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pKLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBR3ZJLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBaUIseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7QUFFcEUsdUVBQXVFO0FBQ3ZFLE1BQU0saUJBQWlCLEdBQThCO0lBQ25E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SyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hDLENBQUM7O2lJQXJQVSxtQ0FBbUM7cUhBQW5DLG1DQUFtQyx1VEFPbkMsWUFBWSxxRUNqQ3pCLGlwREE0QkE7NEZERmEsbUNBQW1DO2tCQUwvQyxTQUFTOytCQUNFLCtCQUErQjtnR0FNaEMsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDbUIsU0FBUztzQkFBakMsU0FBUzt1QkFBQyxZQUFZO2dCQUNkLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgcmVmcmVzaE91dGxpbmVOb3RjaCwgd2F0Y2hPdXRsaW5lTm90Y2ggfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9yZWZyZXNoLW91dGxpbmUtbm90Y2gnO1xyXG5pbXBvcnQgeyBidWlsZEZsb2F0aW5nTGFiZWxCYXNlUnVsZXMsIGNzc1NldHNUb3AsIExBQkVMX0ZMT0FUSU5HX1NVRkZJWCwgcmVhZFN0eWxlQ3NzIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbHMvZmxvYXRpbmctbGFiZWwtc3R5bGVzJztcclxuaW1wb3J0IHsgUmVjb3JkIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmltcG9ydCB7IEltYWdlU2VsZWN0b3JGaWVsZCwgSW1hZ2VTZWxlY3RvckZpZWxkU3R5bGVDU1MgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlU2VsZWN0b3JGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IER5bkF0dGFjaG1lbnQsIER5bkF0dGFjaG1lbnRTZWxlY3RPYmplY3QgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZHluQXR0YWNobWVudCc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcblxyXG4vLyBFbGVtZW50aSBzY29wZWQgZGEgI2ZpZWxkVWlkIChtYXQtZm9ybS1maWVsZCBET00gaW50ZXJubyBhbCB3cmFwcGVyKVxyXG5jb25zdCBFTEVNRU5UX1NFTEVDVE9SUzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICBDb250YWluZXI6ICAgICAgICAnIG1hdC1mb3JtLWZpZWxkJyxcclxuICBDYXNlbGxhU2VsZXppb25lOiAnIC5tYXQtbWRjLXRleHQtZmllbGQtd3JhcHBlcicsXHJcbiAgRGVzY3JpemlvbmU6ICAgICAgJyAubWRjLWZsb2F0aW5nLWxhYmVsJyxcclxuICBEZXNjcml6aW9uZVNvbGxldmF0YTogJyAubWRjLWZsb2F0aW5nLWxhYmVsJyArIExBQkVMX0ZMT0FUSU5HX1NVRkZJWCxcclxufTtcclxuXHJcbmNvbnN0IFNUQVRFUyA9IFsnTm9ybWFsZScsICdNb3VzZW92ZXInLCAnU2VsZXppb25hdG8nLCAnTm90VmFsaWQnLCAnUmVhZG9ubHknXTtcclxuY29uc3QgREVGQVVMVF9GSUVMRF9TVFlMRVM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW1hZ2VGaWVsZFNlbGVjdG9yVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuXHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQElucHV0KCkgZmllbGQ6IEltYWdlU2VsZWN0b3JGaWVsZDtcclxuICBASW5wdXQoKSBpbkNvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHN0eWxlVmVyc2lvbjogbnVtYmVyID0gMDtcclxuICBAVmlld0NoaWxkKE1hdEZvcm1GaWVsZCkgZm9ybUZpZWxkOiBNYXRGb3JtRmllbGQ7XHJcbiAgQElucHV0KCkgZm9yY2VTdGF0ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgQE91dHB1dCgpIHJlY29yZENoYW5nZTogRXZlbnRFbWl0dGVyPFJlY29yZD4gPSBuZXcgRXZlbnRFbWl0dGVyPFJlY29yZD4oKTtcclxuXHJcbiAgRmllbGRzdHlsZU9iajogYW55O1xyXG4gIExhYmVsc3R5bGVPYmo6IGFueTtcclxuICB0cmFuc2Zvcm1lZFJlY29yZDogYW55O1xyXG5cclxuICBmaWVsZFVpZDogc3RyaW5nO1xyXG4gIHByaXZhdGUgc3R5bGVFbDogSFRNTFN0eWxlRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIG5vdGNoT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpZWxkVWlkID0gJ2lzZi0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApO1xyXG4gICAgdGhpcy5pbmplY3RTdHlsZXMoKTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdJbWFnZUZpZWxkU2VsZWN0b3JUZW1wbGF0ZUNvbXBvbmVudCBuZ09uSW5pdCAtIHJlY29yZCcsIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnSW1hZ2VGaWVsZFNlbGVjdG9yVGVtcGxhdGVDb21wb25lbnQgbmdPbkluaXQgLSBmaWVsZCcsIHRoaXMuZmllbGQpO1xyXG5cclxuICAgIHRoaXMuaW5pdFN0eWxlcygpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplQXR0YWNobWVudHMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdHlsZVZlcnNpb24nXSAmJiAhY2hhbmdlc1snc3R5bGVWZXJzaW9uJ10uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5pbmplY3RTdHlsZXMoKTtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydmb3JjZVN0YXRlJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydzdHlsZVZlcnNpb24nXSB8fCBjaGFuZ2VzWydmb3JjZVN0YXRlJ10pIHtcclxuICAgICAgcmVmcmVzaE91dGxpbmVOb3RjaCh0aGlzLmZvcm1GaWVsZCk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1sncmVjb3JkJ10gJiYgIWNoYW5nZXNbJ3JlY29yZCddLmZpcnN0Q2hhbmdlICYmXHJcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlKSAhPT0gSlNPTi5zdHJpbmdpZnkoY2hhbmdlc1sncmVjb3JkJ10ucHJldmlvdXNWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5yZWNvcmQgPSBjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWU7XHJcbiAgICAgIHRoaXMudXBkYXRlRmllbGQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMubm90Y2hPYnNlcnZlciA9IHdhdGNoT3V0bGluZU5vdGNoKHRoaXMuZm9ybUZpZWxkKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5ub3RjaE9ic2VydmVyPy5kaXNjb25uZWN0KCk7XHJcbiAgICBpZiAodGhpcy5zdHlsZUVsPy5wYXJlbnROb2RlKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVFbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuRmllbGRzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkxhYmVsc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuTGFiZWxzdHlsZUNTUyk7XHJcbiAgfVxyXG5cclxuICBUb0xvd2VyQ2FzZShlbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gZWwudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpZWxkKCkgeyB9XHJcblxyXG4gIGluaXRpYWxpemVBdHRhY2htZW50cygpIHtcclxuICAgIGlmICghdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdCB8fCB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuZm9yRWFjaCgoYXR0YWNobWVudCkgPT4ge1xyXG4gICAgICBhdHRhY2htZW50Lm9iamVjdFRvU2VsZWN0ID0gbmV3IER5bkF0dGFjaG1lbnRTZWxlY3RPYmplY3QoKTtcclxuICAgICAgYXR0YWNobWVudC5vYmplY3RUb1NlbGVjdC5JRCA9IGF0dGFjaG1lbnQuSUQ7XHJcbiAgICAgIGF0dGFjaG1lbnQub2JqZWN0VG9TZWxlY3QuQnV0dG9uS2V5ID0gYXR0YWNobWVudC5CdXR0b25LZXk7XHJcbiAgICAgIGF0dGFjaG1lbnQub2JqZWN0VG9TZWxlY3QuQnV0dG9uVmFsdWUgPSBhdHRhY2htZW50LkJ1dHRvblZhbHVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gIT0gbnVsbCkge1xyXG4gICAgICBpZiAoIXRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVkUmVjb3JkID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5JRDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVkUmVjb3JkID0gW107XHJcbiAgICAgICAgKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gYXMgQXJyYXk8RHluQXR0YWNobWVudD4pLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhbnNmb3JtZWRSZWNvcmQucHVzaChOdW1iZXIoZWxlbWVudC5JRCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBuZXcgQXJyYXk8RHluQXR0YWNobWVudD4oKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIGR5bkF0dGFjaG1lbnQ6IER5bkF0dGFjaG1lbnQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuZmluZCh4ID0+IHguSUQgPT0gZXZlbnQpKSk7XHJcbiAgICAgICAgZHluQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGR5bkF0dGFjaG1lbnQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJhbnNmb3JtZWRSZWNvcmQ/LmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICB2YXIgZHluQXR0YWNobWVudDogRHluQXR0YWNobWVudCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSBlbGVtZW50KSkpO1xyXG4gICAgICAgIGR5bkF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ucHVzaChkeW5BdHRhY2htZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgQ1NTIGluamVjdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBpbmplY3RTdHlsZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNzcyA9ICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCk/LkltYWdlU2VsZWN0b3JGaWVsZFN0eWxlQ1NTID8/ICh7fSBhcyBJbWFnZVNlbGVjdG9yRmllbGRTdHlsZUNTUyk7XHJcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuYnVpbGRDc3NSdWxlcyh0aGlzLmZpZWxkVWlkLCBjc3MpO1xyXG4gICAgaWYgKCF0aGlzLnN0eWxlRWwpIHtcclxuICAgICAgdGhpcy5zdHlsZUVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpIGFzIEhUTUxTdHlsZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5pZCA9ICdzdHlsZS0nICsgdGhpcy5maWVsZFVpZDtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCB0aGlzLnN0eWxlRWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdHlsZUVsLnRleHRDb250ZW50ID0gcnVsZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQ3NzUnVsZXModWlkOiBzdHJpbmcsIGNzczogSW1hZ2VTZWxlY3RvckZpZWxkU3R5bGVDU1MpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gYnVpbGRGbG9hdGluZ0xhYmVsQmFzZVJ1bGVzKHVpZCwgRUxFTUVOVF9TRUxFQ1RPUlMuRGVzY3JpemlvbmUsIGNzcyBhcyBhbnkpO1xyXG5cclxuICAgIC8vIEVsZW1lbnRpIHNjb3BlZCBkYSAjdWlkIChpbnRlcm5pIGFsIG1hdC1mb3JtLWZpZWxkKVxyXG4gICAgZm9yIChjb25zdCBlbCBvZiBPYmplY3Qua2V5cyhFTEVNRU5UX1NFTEVDVE9SUykpIHtcclxuICAgICAgY29uc3QgcyA9IEVMRU1FTlRfU0VMRUNUT1JTW2VsXTtcclxuICAgICAgZm9yIChjb25zdCBzdGF0ZSBvZiBTVEFURVMpIHtcclxuICAgICAgICBjb25zdCBrZXkgPSBlbCArIHN0YXRlO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IERFRkFVTFRfRklFTERfU1RZTEVTW2tleV07XHJcbiAgICAgICAgY29uc3QgdXNlclZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gcmVhZFN0eWxlQ3NzKGNzcyBhcyBhbnksIGtleSk7XHJcbiAgICAgICAgaWYgKCFkZWZhdWx0VmFsPy50cmltKCkgJiYgIXVzZXJWYWw/LnRyaW0oKSkgY29udGludWU7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKHVpZCwgc3RhdGUsIGVsLCBzKTtcclxuICAgICAgICBpZiAoIXNlbGVjdG9yKSBjb250aW51ZTtcclxuICAgICAgICBpZiAoZGVmYXVsdFZhbD8udHJpbSgpKSBsaW5lcy5wdXNoKGAke3NlbGVjdG9yfSB7ICR7ZGVmYXVsdFZhbH0gfWApO1xyXG4gICAgICAgIGlmICh1c2VyVmFsPy50cmltKCkpIHtcclxuICAgICAgICAgIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHt1c2VyVmFsfSB9YCk7XHJcbiAgICAgICAgICBpZiAoZWwgPT09ICdEZXNjcml6aW9uZScgJiYgY3NzU2V0c1RvcCh1c2VyVmFsKSkge1xyXG4gICAgICAgICAgICBjb25zdCBmbG9hdFNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsIHMgKyBMQUJFTF9GTE9BVElOR19TVUZGSVgpO1xyXG4gICAgICAgICAgICBpZiAoZmxvYXRTZWwpIGxpbmVzLnB1c2goYCR7ZmxvYXRTZWx9IHsgdG9wOiAwOyB9YCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBDYXNlbGxhU2VsZXppb25lOiBpbmlldHRhIGFuY2hlIHN1bCB0ZXN0byBzZWxlemlvbmF0byBwZXIgY29sb3IvZm9udFxyXG4gICAgICAgICAgaWYgKGVsID09PSAnQ2FzZWxsYVNlbGV6aW9uZScpIHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dFNlbCA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsICcgLm1hdC1tZGMtc2VsZWN0LXZhbHVlJyk7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0U2VsKSBsaW5lcy5wdXNoKGAke3RleHRTZWx9IHsgJHt1c2VyVmFsfSB9YCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2VsZXppb25pOiBzY29wZWQgZGFsIHBhbmVsQ2xhc3MgKG92ZXJsYXkgZnVvcmkgZGEgI3VpZClcclxuICAgIC8vIE5vcm1hbGUvTW91c2VvdmVyL1NlbGV6aW9uYXRvOiBwZXItaXRlbSAoYXBwbGljYXRpIHN1bGxhIHNpbmdvbGEgb3B6aW9uZSlcclxuICAgIC8vIE5vdFZhbGlkL1JlYWRvbmx5OiBub24gYXBwbGljYWJpbGkgYWxsJ292ZXJsYXksIGlnbm9yYXRpXHJcbiAgICBjb25zdCBzZWxlemlvbmlPdmVybGF5U3RhdGVzID0gWydOb3JtYWxlJywgJ01vdXNlb3ZlcicsICdTZWxlemlvbmF0byddO1xyXG4gICAgZm9yIChjb25zdCBzdGF0ZSBvZiBzZWxlemlvbmlPdmVybGF5U3RhdGVzKSB7XHJcbiAgICAgIGNvbnN0IGtleSA9ICdTZWxlemlvbmknICsgc3RhdGU7XHJcbiAgICAgIGNvbnN0IHVzZXJWYWw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IChjc3MgYXMgYW55KVtrZXldO1xyXG4gICAgICBpZiAoIXVzZXJWYWw/LnRyaW0oKSkgY29udGludWU7XHJcbiAgICAgIGNvbnN0IHBhbmVsU2VsID0gdGhpcy5nZXRTZWxlemlvbmlTZWxlY3Rvcih1aWQsIHN0YXRlKTtcclxuICAgICAgaWYgKCFwYW5lbFNlbCkgY29udGludWU7XHJcbiAgICAgIGNvbnN0IGJhc2VPcHRpb25TZWwgPSB0aGlzLmdldFNlbGV6aW9uaUJhc2VTZWxlY3Rvcih1aWQsIHN0YXRlKTtcclxuICAgICAgY29uc3QgdmFsV2l0aEltcG9ydGFudCA9IHRoaXMuZm9yY2VJbXBvcnRhbnQodXNlclZhbCk7XHJcbiAgICAgIGxpbmVzLnB1c2goYCR7cGFuZWxTZWx9IHsgJHt2YWxXaXRoSW1wb3J0YW50fSB9YCk7XHJcbiAgICAgIC8vIGNvbG9yIHN1IFNlbGV6aW9uaSDihpIgY2FtYmlhIHRlc3RvIG9wemlvbmUgRSBjaGVja2JveCBwc2V1ZG8tY2hlY2tib3hcclxuICAgICAgY29uc3QgY29sb3JWYWwgPSB0aGlzLmV4dHJhY3RDc3NQcm9wVmFsdWUodXNlclZhbCwgJ2NvbG9yJyk7XHJcbiAgICAgIGlmIChjb2xvclZhbCkge1xyXG4gICAgICAgIGxpbmVzLnB1c2goYCR7YmFzZU9wdGlvblNlbH0gLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dCB7IGNvbG9yOiAke2NvbG9yVmFsfSAhaW1wb3J0YW50OyB9YCk7XHJcbiAgICAgICAgbGluZXMucHVzaChgJHtiYXNlT3B0aW9uU2VsfSAubWF0LXBzZXVkby1jaGVja2JveCB7IGJvcmRlci1jb2xvcjogJHtjb2xvclZhbH0gIWltcG9ydGFudDsgfWApO1xyXG4gICAgICAgIGxpbmVzLnB1c2goYCR7YmFzZU9wdGlvblNlbH0gLm1hdC1wc2V1ZG8tY2hlY2tib3gtY2hlY2tlZCB7IGJhY2tncm91bmQtY29sb3I6ICR7Y29sb3JWYWx9ICFpbXBvcnRhbnQ7IH1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcclxuICB9XHJcblxyXG4gIC8vIFNlbGV0dG9yZSBwZXIgZWxlbWVudGkgaW50ZXJuaSBhbCBtYXQtZm9ybS1maWVsZCAoI3VpZCBzY29waW5nKVxyXG4gIHByaXZhdGUgZ2V0U2VsZWN0b3IodWlkOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcsIGVsOiBzdHJpbmcsIHM6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICBjYXNlICdOb3JtYWxlJzogICAgcmV0dXJuIGAjJHt1aWR9JHtzfWA7XHJcbiAgICAgIGNhc2UgJ01vdXNlb3Zlcic6ICByZXR1cm4gYCMke3VpZH06aG92ZXIke3N9LCAjJHt1aWR9LmVxcC1zdGF0ZS1ob3ZlciR7c31gO1xyXG4gICAgICBjYXNlICdTZWxlemlvbmF0byc6IHJldHVybiBgIyR7dWlkfS5lcXAtc3RhdGUtc2VsZWN0ZWQke3N9YDtcclxuICAgICAgY2FzZSAnTm90VmFsaWQnOiAgIHJldHVybiBgIyR7dWlkfS5lcXAtaW52YWxpZCR7c31gO1xyXG4gICAgICBjYXNlICdSZWFkb25seSc6ICAgcmV0dXJuIGAjJHt1aWR9LmVxcC1yZWFkb25seSR7c31gO1xyXG4gICAgICBkZWZhdWx0OiAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBTZWxldHRvcmUgcGVyIGxlIG9wemlvbmkgbmVsIHBhbmVsIG92ZXJsYXkgKHNjb3BlZCBkYWwgcGFuZWxDbGFzcyA9IHVpZClcclxuICAvLyBwYW5lbENsYXNzIHZhIHN1IC5tYXQtbWRjLXNlbGVjdC1wYW5lbCAodmlhIFtuZ0NsYXNzXSk7IG1hdC1vcHRpb24gc29ubyBmaWdsaSBkaXJldHRpXHJcbiAgcHJpdmF0ZSBnZXRTZWxlemlvbmlTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICBjYXNlICdOb3JtYWxlJzogICAgIHJldHVybiBgLiR7dWlkfSBtYXQtb3B0aW9uLCAuJHt1aWR9IC5tYXQtbWRjLW9wdGlvbmA7XHJcbiAgICAgIGNhc2UgJ01vdXNlb3Zlcic6ICAgcmV0dXJuIGAuJHt1aWR9IG1hdC1vcHRpb246aG92ZXIsIC4ke3VpZH0gLm1hdC1tZGMtb3B0aW9uOmhvdmVyYDtcclxuICAgICAgY2FzZSAnU2VsZXppb25hdG8nOiByZXR1cm4gYC4ke3VpZH0gbWF0LW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZCwgLiR7dWlkfSAubWF0LW1kYy1vcHRpb24ubWRjLWxpc3QtaXRlbS0tc2VsZWN0ZWRgO1xyXG4gICAgICBkZWZhdWx0OiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU2VsZXR0b3JlIGJhc2Ugc2luZ29sbyBwZXIgaSBzdWItZWxlbWVudCBydWxlcyAoZXMuIC5tZGMtbGlzdC1pdGVtX19wcmltYXJ5LXRleHQpXHJcbiAgcHJpdmF0ZSBnZXRTZWxlemlvbmlCYXNlU2VsZWN0b3IodWlkOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICBjYXNlICdNb3VzZW92ZXInOiAgIHJldHVybiBgLiR7dWlkfSBtYXQtb3B0aW9uOmhvdmVyYDtcclxuICAgICAgY2FzZSAnU2VsZXppb25hdG8nOiByZXR1cm4gYC4ke3VpZH0gbWF0LW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZGA7XHJcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgcmV0dXJuIGAuJHt1aWR9IG1hdC1vcHRpb25gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVTdGF0ZUNsYXNzZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpZWxkVWlkKTtcclxuICAgIGlmICghd3JhcHBlcikgcmV0dXJuO1xyXG4gICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLXN0YXRlLWhvdmVyJywgICAgdGhpcy5mb3JjZVN0YXRlID09PSAnTW91c2VvdmVyJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtc3RhdGUtc2VsZWN0ZWQnLCB0aGlzLmZvcmNlU3RhdGUgPT09ICdTZWxlemlvbmF0bycpO1xyXG4gICAgdGhpcy50b2dnbGVDbGFzcyh3cmFwcGVyLCAnZXFwLWludmFsaWQnLCAgICAgICAgIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ05vdFZhbGlkJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtcmVhZG9ubHknLCAgICAgICAgdGhpcy5mb3JjZVN0YXRlID09PSAnUmVhZG9ubHknKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlQ2xhc3MoZWw6IEVsZW1lbnQsIGNsczogc3RyaW5nLCBjb25kaXRpb246IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChjb25kaXRpb24pIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWwsIGNscyk7XHJcbiAgICBlbHNlIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwsIGNscyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcmNlSW1wb3J0YW50KGNzczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBjc3Muc3BsaXQoJzsnKS5tYXAocGFydCA9PiB7XHJcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBwYXJ0LnRyaW0oKTtcclxuICAgICAgaWYgKCF0cmltbWVkKSByZXR1cm4gcGFydDtcclxuICAgICAgaWYgKHRyaW1tZWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnIWltcG9ydGFudCcpKSByZXR1cm4gcGFydDtcclxuICAgICAgcmV0dXJuIHBhcnQucmVwbGFjZSgvXFxzKyQvLCAnJykgKyAnICFpbXBvcnRhbnQnO1xyXG4gICAgfSkuam9pbignOycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleHRyYWN0Q3NzUHJvcFZhbHVlKGNzczogc3RyaW5nLCBwcm9wOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgKD86Xnw7KVxcXFxzKiR7cHJvcH1cXFxccyo6XFxcXHMqKFteOyFdKz8pKD86XFxcXHMqIWltcG9ydGFudCk/XFxcXHMqKD86O3wkKWAsICdpJyk7XHJcbiAgICBjb25zdCBtYXRjaCA9IGNzcy5tYXRjaChyZSk7XHJcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXS50cmltKCkgOiBudWxsO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwie3tmaWVsZFVpZH19XCI+XHJcblxyXG4gIDxtYXQtZm9ybS1maWVsZCBbZm9ybUdyb3VwXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXBcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gICAgPG1hdC1sYWJlbCBjbGFzcz1cInB0LTFcIiBbbmdTdHlsZV09XCJMYWJlbHN0eWxlT2JqXCI+e3tmaWVsZC5EZXNjcmlwdGlvbn19PC9tYXQtbGFiZWw+XHJcblxyXG4gICAgPCEtLSBNYXQtU2VsZWN0IFNJTkdPTEEgLS0+XHJcbiAgICA8bWF0LXNlbGVjdCAqbmdJZj1cIiFmaWVsZC5Jc011bHRpQ2hvaWNoZVwiIGNsYXNzPVwiaW1hZ2VGaWVsZFNlbGVjdG9ySW1hZ2VzXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5OYW1lXCJcclxuICAgIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFsobmdNb2RlbCldPVwidHJhbnNmb3JtZWRSZWNvcmRcIiAobmdNb2RlbENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgW3BhbmVsQ2xhc3NdPVwiZmllbGRVaWRcIj5cclxuICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgZmllbGQuQXR0YWNobWVudExpc3RcIiBbdmFsdWVdPVwiYXR0YWNobWVudC5JRFwiPlxyXG4gICAgICAgIDxpbWcgc3JjPSdkYXRhOmltYWdlL3t7VG9Mb3dlckNhc2UoYXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uKX19O2Jhc2U2NCx7e2F0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjR9fScgW2hlaWdodF09XCJhdHRhY2htZW50LlJlc2l6ZWRJbWFnZUhlaWdodFB4ICE9IG51bGwgPyBhdHRhY2htZW50LlJlc2l6ZWRJbWFnZUhlaWdodFB4IDogMTI4XCI+XHJcbiAgICAgICAgPHNwYW4+e3sgYXR0YWNobWVudC5CdXR0b25LZXkgfX08L3NwYW4+XHJcbiAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgIDwvbWF0LXNlbGVjdD5cclxuXHJcbiAgICA8IS0tIE1hdC1TZWxlY3QgTVVMVElQTEEgLS0+XHJcbiAgICA8bWF0LXNlbGVjdCAqbmdJZj1cImZpZWxkLklzTXVsdGlDaG9pY2hlXCIgY2xhc3M9XCJpbWFnZUZpZWxkU2VsZWN0b3JJbWFnZXNcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIlxyXG4gICAgW3JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJ0cmFuc2Zvcm1lZFJlY29yZFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoJGV2ZW50KVwiIG11bHRpcGxlXHJcbiAgICBbcGFuZWxDbGFzc109XCJmaWVsZFVpZFwiPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBmaWVsZC5BdHRhY2htZW50TGlzdFwiIFt2YWx1ZV09XCJhdHRhY2htZW50LklEXCI+XHJcbiAgICAgICAgPGltZyBzcmM9J2RhdGE6aW1hZ2Uve3tUb0xvd2VyQ2FzZShhdHRhY2htZW50LkZpbGVFeHRlbnNpb24pfX07YmFzZTY0LHt7YXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH19JyBbaGVpZ2h0XT1cImF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggIT0gbnVsbCA/IGF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggOiAxMjhcIj5cclxuICAgICAgICA8c3Bhbj57eyBhdHRhY2htZW50LkJ1dHRvbktleSB9fTwvc3Bhbj5cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuPC9kaXY+XHJcbiJdfQ==