@po-ui/ng-components 14.1.0 → 14.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/esm2020/lib/components/po-breadcrumb/po-breadcrumb-dropdown/po-breadcrumb-dropdown.component.mjs +5 -3
  2. package/esm2020/lib/components/po-button/po-button-base.component.mjs +58 -8
  3. package/esm2020/lib/components/po-button/po-button-size.enum.mjs +6 -0
  4. package/esm2020/lib/components/po-button/po-button.component.mjs +4 -4
  5. package/esm2020/lib/components/po-button-group/po-button-group-base.component.mjs +8 -1
  6. package/esm2020/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.mjs +1 -1
  7. package/esm2020/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-fields/po-dynamic-form-fields.component.mjs +12 -12
  8. package/esm2020/lib/components/po-field/po-checkbox/po-checkbox-base.component.mjs +11 -2
  9. package/esm2020/lib/components/po-field/po-checkbox/po-checkbox.component.mjs +24 -12
  10. package/esm2020/lib/components/po-field/po-checkbox-group/po-checkbox-group.component.mjs +14 -20
  11. package/esm2020/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.mjs +5 -4
  12. package/esm2020/lib/components/po-field/po-combo/po-combo-base.component.mjs +74 -43
  13. package/esm2020/lib/components/po-field/po-combo/po-combo.component.mjs +17 -15
  14. package/esm2020/lib/components/po-field/po-datepicker/po-datepicker-base.component.mjs +3 -8
  15. package/esm2020/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +2 -1
  16. package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.mjs +25 -2
  17. package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +5 -5
  18. package/esm2020/lib/components/po-field/po-lookup/po-lookup-base.component.mjs +28 -2
  19. package/esm2020/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.mjs +28 -2
  20. package/esm2020/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.mjs +4 -4
  21. package/esm2020/lib/components/po-field/po-lookup/po-lookup.component.mjs +5 -3
  22. package/esm2020/lib/components/po-field/po-lookup/services/po-lookup-modal.service.mjs +6 -2
  23. package/esm2020/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +2 -2
  24. package/esm2020/lib/components/po-field/po-rich-text/po-rich-text-toolbar/po-rich-text-toolbar.component.mjs +9 -9
  25. package/esm2020/lib/components/po-field/po-select/po-select.component.mjs +90 -25
  26. package/esm2020/lib/components/po-field/po-upload/po-upload-base.service.mjs +4 -2
  27. package/esm2020/lib/components/po-list-view/po-list-view.component.mjs +3 -3
  28. package/esm2020/lib/components/po-table/po-table-base.component.mjs +21 -2
  29. package/esm2020/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.mjs +3 -3
  30. package/esm2020/lib/components/po-table/po-table.component.mjs +511 -476
  31. package/esm2020/lib/components/po-widget/po-widget-base.component.mjs +3 -2
  32. package/esm2020/lib/components/po-widget/po-widget.component.mjs +24 -12
  33. package/esm2020/lib/utils/util.mjs +21 -12
  34. package/fesm2015/po-ui-ng-components.mjs +1288 -952
  35. package/fesm2015/po-ui-ng-components.mjs.map +1 -1
  36. package/fesm2020/po-ui-ng-components.mjs +1266 -937
  37. package/fesm2020/po-ui-ng-components.mjs.map +1 -1
  38. package/lib/components/po-button/po-button-base.component.d.ts +29 -4
  39. package/lib/components/po-button/po-button-size.enum.d.ts +4 -0
  40. package/lib/components/po-button-group/po-button-group-base.component.d.ts +7 -0
  41. package/lib/components/po-dynamic/po-dynamic-form/po-dynamic-form-field.interface.d.ts +18 -0
  42. package/lib/components/po-field/po-checkbox/po-checkbox-base.component.d.ts +2 -1
  43. package/lib/components/po-field/po-checkbox-group/po-checkbox-group.module.d.ts +2 -1
  44. package/lib/components/po-field/po-combo/po-combo-base.component.d.ts +27 -22
  45. package/lib/components/po-field/po-datepicker-range/po-datepicker-range-base.component.d.ts +13 -1
  46. package/lib/components/po-field/po-lookup/po-lookup-base.component.d.ts +21 -1
  47. package/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal-base.component.d.ts +21 -1
  48. package/lib/components/po-field/po-lookup/services/po-lookup-modal.service.d.ts +4 -0
  49. package/lib/components/po-field/po-select/po-select.component.d.ts +36 -7
  50. package/lib/components/po-table/po-table-base.component.d.ts +12 -1
  51. package/lib/components/po-table/po-table.component.d.ts +6 -0
  52. package/lib/components/po-widget/po-widget-base.component.d.ts +1 -0
  53. package/lib/utils/util.d.ts +2 -1
  54. package/package.json +4 -4
  55. package/po-ui-ng-components-14.3.0.tgz +0 -0
  56. package/schematics/ng-add/index.js +1 -1
  57. package/schematics/ng-update/v14/index.js +1 -1
  58. package/schematics/ng-update/v2/index.js +1 -1
  59. package/schematics/ng-update/v3/index.js +1 -1
  60. package/schematics/ng-update/v4/index.js +1 -1
  61. package/schematics/ng-update/v5/index.js +1 -1
  62. package/schematics/ng-update/v6/index.js +1 -1
  63. package/po-ui-ng-components-14.1.0.tgz +0 -0
@@ -34,7 +34,7 @@ function PoDatepickerRangeComponent_ng_container_17_Template(rf, ctx) { if (rf &
34
34
  } if (rf & 2) {
35
35
  const ctx_r5 = i0.ɵɵnextContext();
36
36
  i0.ɵɵadvance(3);
37
- i0.ɵɵproperty("ngModel", ctx_r5.dateRange)("p-max-date", ctx_r5.maxDate)("p-min-date", ctx_r5.minDate);
37
+ i0.ɵɵproperty("ngModel", ctx_r5.dateRange)("p-max-date", ctx_r5.maxDate)("p-min-date", ctx_r5.minDate)("p-locale", ctx_r5.locale);
38
38
  } }
39
39
  const arrowLeftKey = 37;
40
40
  const arrowRightKey = 39;
@@ -459,7 +459,7 @@ PoDatepickerRangeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
459
459
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.startDateInput = _t.first);
460
460
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.iconCalendar = _t.first);
461
461
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.calendarPicker = _t.first);
462
- } }, features: [i0.ɵɵProvidersFeature(providers), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 18, vars: 20, consts: [[3, "p-help", "p-label", "p-optional"], [1, "po-datepicker-range-field", "po-input"], ["dateRangeField", ""], [1, "po-datepicker-range-start-date"], ["maxlength", "10", "type", "text", 1, "po-datepicker-range-input", 3, "autocomplete", "disabled", "name", "readonly", "blur", "focus", "keydown", "keyup", "click"], ["startDateInput", ""], [1, "po-datepicker-range-separator"], [1, "po-datepicker-range-end-date"], ["endDateInput", ""], [1, "po-datepicker-range-icon"], [3, "p-change-event", 4, "ngIf"], [1, "po-icon", "po-field-icon", "po-icon-calendar", 3, "click"], ["iconCalendar", ""], [3, "p-error-pattern"], [4, "ngIf"], [3, "p-change-event"], [1, "po-calendar-range-picker"], ["calendarPicker", ""], ["p-mode", "range", 3, "ngModel", "p-max-date", "p-min-date", "ngModelChange"]], template: function PoDatepickerRangeComponent_Template(rf, ctx) { if (rf & 1) {
462
+ } }, features: [i0.ɵɵProvidersFeature(providers), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 18, vars: 20, consts: [[3, "p-help", "p-label", "p-optional"], [1, "po-datepicker-range-field", "po-input"], ["dateRangeField", ""], [1, "po-datepicker-range-start-date"], ["maxlength", "10", "type", "text", 1, "po-datepicker-range-input", 3, "autocomplete", "disabled", "name", "readonly", "blur", "focus", "keydown", "keyup", "click"], ["startDateInput", ""], [1, "po-datepicker-range-separator"], [1, "po-datepicker-range-end-date"], ["endDateInput", ""], [1, "po-datepicker-range-icon"], [3, "p-change-event", 4, "ngIf"], [1, "po-icon", "po-field-icon", "po-icon-calendar", 3, "click"], ["iconCalendar", ""], [3, "p-error-pattern"], [4, "ngIf"], [3, "p-change-event"], [1, "po-calendar-range-picker"], ["calendarPicker", ""], ["p-mode", "range", 3, "ngModel", "p-max-date", "p-min-date", "p-locale", "ngModelChange"]], template: function PoDatepickerRangeComponent_Template(rf, ctx) { if (rf & 1) {
463
463
  i0.ɵɵelementStart(0, "po-field-container", 0)(1, "div", 1, 2)(3, "div", 3)(4, "input", 4, 5);
464
464
  i0.ɵɵlistener("blur", function PoDatepickerRangeComponent_Template_input_blur_4_listener($event) { return ctx.onBlur($event); })("focus", function PoDatepickerRangeComponent_Template_input_focus_4_listener($event) { return ctx.onFocus($event); })("keydown", function PoDatepickerRangeComponent_Template_input_keydown_4_listener($event) { return ctx.onKeydown($event); })("keyup", function PoDatepickerRangeComponent_Template_input_keyup_4_listener($event) { return ctx.onKeyup($event); })("click", function PoDatepickerRangeComponent_Template_input_click_4_listener($event) { return ctx.eventOnClick($event); });
465
465
  i0.ɵɵelementEnd()();
@@ -477,7 +477,7 @@ PoDatepickerRangeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
477
477
  i0.ɵɵelementEnd()()();
478
478
  i0.ɵɵelement(16, "po-field-container-bottom", 13);
479
479
  i0.ɵɵelementEnd();
480
- i0.ɵɵtemplate(17, PoDatepickerRangeComponent_ng_container_17_Template, 4, 3, "ng-container", 14);
480
+ i0.ɵɵtemplate(17, PoDatepickerRangeComponent_ng_container_17_Template, 4, 4, "ng-container", 14);
481
481
  } if (rf & 2) {
482
482
  i0.ɵɵproperty("p-help", ctx.help)("p-label", ctx.label)("p-optional", !ctx.required && ctx.optional);
483
483
  i0.ɵɵadvance(1);
@@ -497,7 +497,7 @@ PoDatepickerRangeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
497
497
  } }, dependencies: [i4.NgIf, i5.NgControlStatus, i5.NgModel, i6.PoCleanComponent, i7.PoCalendarComponent, i8.PoFieldContainerBottomComponent, i9.PoFieldContainerComponent], encapsulation: 2, changeDetection: 0 });
498
498
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoDatepickerRangeComponent, [{
499
499
  type: Component,
500
- args: [{ selector: 'po-datepicker-range', providers: providers, changeDetection: ChangeDetectionStrategy.OnPush, template: "<po-field-container [p-help]=\"help\" [p-label]=\"label\" [p-optional]=\"!required && optional\">\n <div #dateRangeField class=\"po-datepicker-range-field po-input\" [class.po-datepicker-range-field-disabled]=\"disabled\">\n <div class=\"po-datepicker-range-start-date\">\n <input\n #startDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"startDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-separator\">-</div>\n\n <div class=\"po-datepicker-range-end-date\">\n <input\n #endDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"endDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <po-clean *ngIf=\"enableCleaner\" (p-change-event)=\"clear()\"></po-clean>\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <span\n #iconCalendar\n class=\"po-icon po-field-icon po-icon-calendar\"\n [class.po-clickable]=\"!disabled && !readonly\"\n [class.po-field-icon-disabled]=\"disabled || readonly\"\n (click)=\"toggleCalendar()\"\n >\n </span>\n </div>\n </div>\n\n <po-field-container-bottom [p-error-pattern]=\"getErrorMessage\"></po-field-container-bottom>\n</po-field-container>\n\n<ng-container *ngIf=\"isCalendarVisible\">\n <div #calendarPicker class=\"po-calendar-range-picker\">\n <po-calendar\n p-mode=\"range\"\n [ngModel]=\"dateRange\"\n [p-max-date]=\"maxDate\"\n [p-min-date]=\"minDate\"\n (ngModelChange)=\"onCalendarChange($event)\"\n ></po-calendar>\n </div>\n</ng-container>\n" }]
500
+ args: [{ selector: 'po-datepicker-range', providers: providers, changeDetection: ChangeDetectionStrategy.OnPush, template: "<po-field-container [p-help]=\"help\" [p-label]=\"label\" [p-optional]=\"!required && optional\">\n <div #dateRangeField class=\"po-datepicker-range-field po-input\" [class.po-datepicker-range-field-disabled]=\"disabled\">\n <div class=\"po-datepicker-range-start-date\">\n <input\n #startDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"startDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-separator\">-</div>\n\n <div class=\"po-datepicker-range-end-date\">\n <input\n #endDateInput\n class=\"po-datepicker-range-input\"\n maxlength=\"10\"\n type=\"text\"\n [autocomplete]=\"autocomplete\"\n [disabled]=\"disabled\"\n [name]=\"endDateInputName\"\n [readonly]=\"readonly\"\n (blur)=\"onBlur($event)\"\n (focus)=\"onFocus($event)\"\n (keydown)=\"onKeydown($event)\"\n (keyup)=\"onKeyup($event)\"\n (click)=\"eventOnClick($event)\"\n />\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <po-clean *ngIf=\"enableCleaner\" (p-change-event)=\"clear()\"></po-clean>\n </div>\n\n <div class=\"po-datepicker-range-icon\">\n <span\n #iconCalendar\n class=\"po-icon po-field-icon po-icon-calendar\"\n [class.po-clickable]=\"!disabled && !readonly\"\n [class.po-field-icon-disabled]=\"disabled || readonly\"\n (click)=\"toggleCalendar()\"\n >\n </span>\n </div>\n </div>\n\n <po-field-container-bottom [p-error-pattern]=\"getErrorMessage\"></po-field-container-bottom>\n</po-field-container>\n\n<ng-container *ngIf=\"isCalendarVisible\">\n <div #calendarPicker class=\"po-calendar-range-picker\">\n <po-calendar\n p-mode=\"range\"\n [ngModel]=\"dateRange\"\n [p-max-date]=\"maxDate\"\n [p-min-date]=\"minDate\"\n [p-locale]=\"locale\"\n (ngModelChange)=\"onCalendarChange($event)\"\n ></po-calendar>\n </div>\n</ng-container>\n" }]
501
501
  }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.PoControlPositionService }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }, { type: i2.PoDateService }, { type: i0.ElementRef }, { type: i3.PoLanguageService }]; }, { dateRangeField: [{
502
502
  type: ViewChild,
503
503
  args: ['dateRangeField', { read: ElementRef, static: true }]
@@ -514,4 +514,4 @@ PoDatepickerRangeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
514
514
  type: ViewChild,
515
515
  args: ['calendarPicker', { read: ElementRef }]
516
516
  }] }); })();
517
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGF0ZXBpY2tlci1yYW5nZS9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUVWLFNBQVMsRUFNVCx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRy9HLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDb0J2QyxvQ0FBMkQ7SUFBM0IsaU1BQWtCLGVBQUEsY0FBTyxDQUFBLElBQUM7SUFBQyxpQkFBVzs7OztJQWtCNUUsNkJBQXdDO0lBQ3RDLG1DQUFzRCxzQkFBQTtJQU1sRCw2TUFBaUIsZUFBQSwrQkFBd0IsQ0FBQSxJQUFDO0lBQzNDLGlCQUFjLEVBQUE7SUFFbkIsMEJBQWU7OztJQU5ULGVBQXFCO0lBQXJCLDBDQUFxQiw4QkFBQSw4QkFBQTs7QUR2QzNCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxZ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bnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIFJlbmRlcmVyMixcbiAgT25EZXN0cm95LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXMsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvcG8tY29udHJvbC1wb3NpdGlvbi9wby1jb250cm9sLXBvc2l0aW9uLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1kYXRlcGlja2VyLXJhbmdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnQgfSBmcm9tICcuL3BvLWRhdGVwaWNrZXItcmFuZ2UtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9EYXRlU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvcG8tZGF0ZS9wby1kYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9NYXNrIH0gZnJvbSAnLi4vcG8taW5wdXQvcG8tbWFzayc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5jb25zdCBhcnJvd0xlZnRLZXkgPSAzNztcbmNvbnN0IGFycm93UmlnaHRLZXkgPSAzOTtcbmNvbnN0IGJhY2tzcGFjZUtleSA9IDg7XG5jb25zdCBwb0RhdGVwaWNrZXJSYW5nZURhdGVMZW5ndGhEZWZhdWx0ID0gMTA7XG5cbmNvbnN0IHBvQ2FsZW5kYXJDb250ZW50T2Zmc2V0ID0gODtcbmNvbnN0IHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQgPSAnYm90dG9tLWxlZnQnO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29uc3QgcHJvdmlkZXJzID0gW1xuICB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH0sXG4gIHtcbiAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9LFxuICBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2Vcbl07XG4vKipcbiAqIEBkb2NzRXh0ZW5kcyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIExhYnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtbGFicy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtbGFicy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIC0gVmFjYXRpb25zIFN1Z2dlc3Rpb25cIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybVwiIHRpdGxlPVwiUE8gRGF0ZXBpY2tlciBSYW5nZSAtIFZhY2F0aW9ucyBSZWFjdGl2ZSBGb3JtXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5odG1sXCI+XG4gKiAgPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQudHNcIj5cbiAqICA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLWRhdGVwaWNrZXItcmFuZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVycyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnRcbiAgZXh0ZW5kcyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZCgnZGF0ZVJhbmdlRmllbGQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBkYXRlUmFuZ2VGaWVsZDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgZW5kRGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdGFydERhdGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHN0YXJ0RGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpY29uQ2FsZW5kYXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uQ2FsZW5kYXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyUGlja2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNhbGVuZGFyUGlja2VyOiBFbGVtZW50UmVmO1xuXG4gIGlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjbGlja0xpc3RlbmVyO1xuICBwcml2YXRlIGV2ZW50UmVzaXplTGlzdGVuZXI7XG4gIHByaXZhdGUgcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50OiBFbGVtZW50UmVmPGFueT47XG4gIHByaXZhdGUgcG9NYXNrT2JqZWN0OiBQb01hc2s7XG5cbiAgZ2V0IGF1dG9jb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub0F1dG9jb21wbGV0ZSA/ICdvZmYnIDogJ29uJztcbiAgfVxuXG4gIGdldCBlbmFibGVDbGVhbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsZWFuICYmICh0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUgfHwgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZSkgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHk7XG4gIH1cblxuICBnZXQgZW5kRGF0ZUlucHV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZW5kLWRhdGUnO1xuICB9XG5cbiAgZ2V0IGVuZERhdGVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBnZXQgZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlICE9PSAnJyAmJiB0aGlzLmhhc0ludmFsaWRDbGFzcygpID8gdGhpcy5lcnJvck1lc3NhZ2UgOiAnJztcbiAgfVxuXG4gIGdldCBpc0RhdGVSYW5nZUlucHV0VW5jb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUubGVuZ3RoIDwgcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdCAmJlxuICAgICAgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA8IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHRcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzRGlydHlEYXRlUmFuZ2VJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPiAwIHx8IHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZUlucHV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnc3RhcnQtZGF0ZSc7XG4gIH1cblxuICBnZXQgc3RhcnREYXRlSW5wdXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbnRyb2xQb3NpdGlvbjogUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwb0RhdGVTZXJ2aWNlOiBQb0RhdGVTZXJ2aWNlLFxuICAgIHBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwb0xhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIocG9EYXRlU2VydmljZSwgcG9MYW5ndWFnZVNlcnZpY2UpO1xuICAgIHRoaXMucG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50ID0gcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50O1xuICB9XG5cbiAgc3RhdGljIGdldEtleUNvZGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUYXJnZXRFbGVtZW50KGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZEtleShrZXlDb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBrZXlDb2RlID49IDQ4ICYmIGtleUNvZGUgPD0gNTc7XG4gICAgY29uc3QgaXNOdW1lcmljTnVtcGFkS2V5ID0ga2V5Q29kZSA+PSA5NiAmJiBrZXlDb2RlIDw9IDEwNTtcblxuICAgIHJldHVybiBpc051bWVyaWNLZXkgfHwgaXNOdW1lcmljTnVtcGFkS2V5O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmF1dG9Gb2N1cykge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIENsYXNzZSBkZSBtw6FzY2FyYVxuICAgIHRoaXMucG9NYXNrT2JqZWN0ID0gdGhpcy5idWlsZE1hc2soKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5taW5EYXRlIHx8IGNoYW5nZXMubWF4RGF0ZSkge1xuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5yZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpO1xuICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogJycsIGVuZDogJycgfTtcblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICBldmVudE9uQ2xpY2soJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvTWFza09iamVjdC5jbGljaygkZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGRhdGVwaWNrZXJSYW5nZTogUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzRGF0ZXBpY2tlclJhbmdlKCkge1xuICAgKiAgIHRoaXMuZGF0ZXBpY2tlclJhbmdlLmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmx1cihldmVudDogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWRNb2RlbD8uKCk7XG4gICAgY29uc3QgaXNTdGFydERhdGVUYXJnZXRFdmVudCA9IGV2ZW50LnRhcmdldC5uYW1lID09PSB0aGlzLnN0YXJ0RGF0ZUlucHV0TmFtZTtcblxuICAgIHRoaXMudXBkYXRlTW9kZWxCeVNjcmVlbihpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50KTtcblxuICAgIHRoaXMucmVtb3ZlRm9jdXNGcm9tRGF0ZVBpY2tlclJhbmdlRmllbGQoKTtcbiAgfVxuXG4gIG9uQ2FsZW5kYXJDaGFuZ2UoeyBzdGFydCwgZW5kIH0pIHtcbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50ID0gc3RhcnQgJiYgIWVuZDtcblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh7IHN0YXJ0OiBzdGFydCB8fCAnJywgZW5kOiBlbmQgfHwgJycgfSk7XG4gICAgdGhpcy51cGRhdGVNb2RlbEJ5U2NyZWVuKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQsIHN0YXJ0IHx8ICcnLCBlbmQgfHwgJycpO1xuXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1cyhldmVudDogYW55KSB7XG4gICAgdGhpcy5hcHBseUZvY3VzT25EYXRlUGlja2VyUmFuZ2VGaWVsZCgpO1xuICAgIHRoaXMucG9NYXNrT2JqZWN0LnJlc2V0UG9zaXRpb25zKGV2ZW50KTtcbiAgfVxuXG4gIG9uS2V5ZG93bihldmVudD86IGFueSkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZXRGb2N1c09uQmFja3NwYWNlKGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2V0Rm9jdXNPbkJhY2tzcGFjZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5rZXlkb3duKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBvbktleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgPSBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWU7XG5cbiAgICB0aGlzLnNldEZvY3VzKGV2ZW50KTtcbiAgICB0aGlzLnBvTWFza09iamVjdC5rZXl1cChldmVudCk7XG4gICAgdGhpcy51cGRhdGVNb2RlbFdoZW5Db21wbGV0ZShpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50LCB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUsIHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUpO1xuICB9XG5cbiAgcmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKSB7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCA9IHRydWU7XG4gICAgdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgPSB0cnVlO1xuICB9XG5cbiAgdG9nZ2xlQ2FsZW5kYXIoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSAhdGhpcy5pc0NhbGVuZGFyVmlzaWJsZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGlmICh0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlKSB7XG4gICAgICB0aGlzLnNldENhbGVuZGFyUG9zaXRpb24oKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNjcmVlbkJ5TW9kZWwobW9kZWw6IFBvRGF0ZXBpY2tlclJhbmdlKSB7XG4gICAgY29uc3QgZGF0ZVJhbmdlID0geyBzdGFydDogbW9kZWwuc3RhcnQgYXMgc3RyaW5nLCBlbmQ6IG1vZGVsLmVuZCBhcyBzdHJpbmcgfTtcbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVZhbGlkID0gdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZGF0ZVJhbmdlLmVuZCwgZGF0ZVJhbmdlLnN0YXJ0KTtcbiAgICBjb25zdCBpc0RhdGVWYWxpZCA9IGRhdGUgPT4gIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChkYXRlKSAmJiBpc1N0YXJ0RGF0ZVZhbGlkO1xuXG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdGVkID0gaXNEYXRlVmFsaWQoZGF0ZVJhbmdlLmVuZCkgPyB0aGlzLmZvcm1hdE1vZGVsVG9TY3JlZW4oZGF0ZVJhbmdlLmVuZCkgOiAnJztcbiAgICBjb25zdCBzdGFydERhdGVGb3JtYXRlZCA9IGlzRGF0ZVZhbGlkKGRhdGVSYW5nZS5zdGFydCkgPyB0aGlzLmZvcm1hdE1vZGVsVG9TY3JlZW4oZGF0ZVJhbmdlLnN0YXJ0KSA6ICcnO1xuXG4gICAgdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGVuZERhdGVGb3JtYXRlZDtcbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBzdGFydERhdGVGb3JtYXRlZDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGb2N1c09uRGF0ZVBpY2tlclJhbmdlRmllbGQoKSB7XG4gICAgdGhpcy5kYXRlUmFuZ2VGaWVsZC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3BvLWRhdGVwaWNrZXItcmFuZ2UtZmllbGQtZm9jdXNlZCcpO1xuICB9XG5cbiAgLy8gUmV0b3JuYSB1bSBvYmpldG8gZG8gdGlwbyBQb01hc2sgY29tIGEgbWFzY2FyYSBjb25maWd1cmFkYS5cbiAgcHJpdmF0ZSBidWlsZE1hc2soKTogUG9NYXNrIHtcbiAgICBsZXQgbWFzayA9IHRoaXMuZm9ybWF0LnRvVXBwZXJDYXNlKCk7XG5cbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ERC9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9NTS9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ZWVlZL2csICc5OTk5Jyk7XG5cbiAgICByZXR1cm4gbmV3IFBvTWFzayhtYXNrLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShmb3JtYXQ6IHN0cmluZywgZGF5OiBzdHJpbmcgPSAnJywgbW9udGg6IHN0cmluZyA9ICcnLCB5ZWFyOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgbGV0IGRhdGVGb3JtYXR0ZWQgPSBmb3JtYXQ7XG5cbiAgICBkYXkgPSBkYXkgJiYgZGF5LmluY2x1ZGVzKCdUJykgPyBkYXkuc2xpY2UoMCwgMikgOiBkYXk7XG5cbiAgICBkYXRlRm9ybWF0dGVkID0gZGF0ZUZvcm1hdHRlZC5yZXBsYWNlKCdkZCcsICgnMCcgKyBkYXkpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgnbW0nLCAoJzAnICsgbW9udGgpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgneXl5eScsIFN0cmluZyh5ZWFyKSk7XG5cbiAgICByZXR1cm4gZGF0ZUZvcm1hdHRlZDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0U2NyZWVuVG9Nb2RlbCh2YWx1ZTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHZhbHVlLnNwbGl0KCcvJyk7XG5cbiAgICByZXR1cm4gdmFsdWUgPyB0aGlzLmZvcm1hdERhdGUoJ3l5eXktbW0tZGQnLCBkYXksIG1vbnRoLCB5ZWFyKSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNb2RlbFRvU2NyZWVuKHZhbHVlOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gdmFsdWUuc3BsaXQoJy0nKTtcblxuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmZvcm1hdCwgZGF5LCBtb250aCwgeWVhcikgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVJhbmdlRm9ybWF0VmFsaWRhdGlvbihcbiAgICBzdGFydERhdGU6IHN0cmluZyxcbiAgICBlbmREYXRlOiBzdHJpbmcsXG4gICAgaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhblxuICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGRhdGVSYW5nZU1vZGVsOiBQb0RhdGVwaWNrZXJSYW5nZSB9IHtcbiAgICB0aGlzLnNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbihzdGFydERhdGUsIGVuZERhdGUpO1xuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOlxuICAgICAgICB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCAmJiB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkICYmIHRoaXMudmVyaWZ5VmFsaWREYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSksXG4gICAgICBkYXRlUmFuZ2VNb2RlbDogdGhpcy5nZXRWYWxpZGF0ZWRNb2RlbChzdGFydERhdGUsIGVuZERhdGUsIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsaWRhdGVkTW9kZWwoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZywgaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhbik6IFBvRGF0ZXBpY2tlclJhbmdlIHtcbiAgICBjb25zdCBkYXRlUmFuZ2VNb2RlbCA9IHsgc3RhcnQ6ICcnLCBlbmQ6ICcnIH07XG5cbiAgICBkYXRlUmFuZ2VNb2RlbC5lbmQgPVxuICAgICAgKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgfHwgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCkgJiYgIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChlbmREYXRlKSA/IGVuZERhdGUgOiAnJztcblxuICAgIGRhdGVSYW5nZU1vZGVsLnN0YXJ0ID1cbiAgICAgICghaXNTdGFydERhdGVUYXJnZXRFdmVudCB8fCB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkKSAmJiAhdGhpcy5kYXRlRm9ybWF0RmFpbGVkKHN0YXJ0RGF0ZSlcbiAgICAgICAgPyBzdGFydERhdGVcbiAgICAgICAgOiAnJztcblxuICAgIHJldHVybiBkYXRlUmFuZ2VNb2RlbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzQXR0ckNhbGVuZGFyKGVsZW1lbnQpIHtcbiAgICBjb25zdCBhdHRyQ2FsZW5kYXIgPSAnYXR0ci1jYWxlbmRhcic7XG5cbiAgICByZXR1cm4gZWxlbWVudD8uaGFzQXR0cmlidXRlKGF0dHJDYWxlbmRhcikgfHwgZWxlbWVudD8ucGFyZW50RWxlbWVudD8uaGFzQXR0cmlidXRlKGF0dHJDYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIGhhc0ludmFsaWRDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWludmFsaWQnKSAmJlxuICAgICAgdGhpcy5wb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWRpcnR5JylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGlzdGVuZXJzKCkge1xuICAgIHRoaXMuY2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy53YXNDbGlja2VkT25QaWNrZXIoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkICYmIGVuZERhdGUgPT09IHRoaXMuZGF0ZVJhbmdlLmVuZCAmJiBzdGFydERhdGUgPT09IHRoaXMuZGF0ZVJhbmdlLnN0YXJ0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NldEZvY3VzT25CYWNrc3BhY2UoZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5lbmREYXRlSW5wdXROYW1lICYmXG4gICAgICB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCA9PT0gMCAmJlxuICAgICAgZXZlbnQua2V5Q29kZSA9PT0gYmFja3NwYWNlS2V5XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TY3JvbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuaXNDYWxlbmRhclZpc2libGUpIHtcbiAgICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHJlbW92ZUZvY3VzRnJvbURhdGVQaWNrZXJSYW5nZUZpZWxkKCkge1xuICAgIHRoaXMuZGF0ZVJhbmdlRmllbGQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdwby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkLWZvY3VzZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkID0gdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZW5kRGF0ZSwgc3RhcnREYXRlKTtcblxuICAgIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkID0gIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChzdGFydERhdGUpICYmICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZW5kRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudC5nZXRUYXJnZXRFbGVtZW50KGV2ZW50KTtcbiAgICBjb25zdCBrZXlDb2RlID0gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQuZ2V0S2V5Q29kZShldmVudCk7XG4gICAgY29uc3QgaW5wdXROYW1lID0gaW5wdXRFbGVtZW50WyduYW1lJ107XG5cbiAgICB0aGlzLnNldEZvY3VzT25BcnJvd0xlZnQoa2V5Q29kZSwgaW5wdXROYW1lKTtcbiAgICB0aGlzLnNldEZvY3VzT25BcnJvd1JpZ2h0KGtleUNvZGUsIGlucHV0TmFtZSwgaW5wdXRFbGVtZW50KTtcbiAgICB0aGlzLnNldEZvY3VzT25TdGFydERhdGVDb21wbGV0ZWQoa2V5Q29kZSwgaW5wdXROYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNBbmRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyLCBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWYsIHNlbGVjdGlvblJhbmdlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZvY3VzT25FbGVtZW50KGlucHV0RWxlbWVudCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblJhbmdlLCBzZWxlY3Rpb25SYW5nZSk7XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5pbml0aWFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgIHRoaXMucG9NYXNrT2JqZWN0LmZpbmFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNPbkVsZW1lbnQoaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FsZW5kYXJQb3NpdGlvbigpIHtcbiAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5zZXRFbGVtZW50cyhcbiAgICAgIHRoaXMuY2FsZW5kYXJQaWNrZXIubmF0aXZlRWxlbWVudCxcbiAgICAgIHBvQ2FsZW5kYXJDb250ZW50T2Zmc2V0LFxuICAgICAgdGhpcy5kYXRlUmFuZ2VGaWVsZCxcbiAgICAgIFsnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0JywgJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCddLFxuICAgICAgZmFsc2UsXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQXJyb3dMZWZ0KGtleUNvZGU6IG51bWJlciwgaW5wdXROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc0N1cnNvckF0U3RhcnRPZklucHV0ID0gdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMDtcblxuICAgIGlmIChpbnB1dE5hbWUgPT09IHRoaXMuZW5kRGF0ZUlucHV0TmFtZSAmJiBpc0N1cnNvckF0U3RhcnRPZklucHV0ICYmIGtleUNvZGUgPT09IGFycm93TGVmdEtleSkge1xuICAgICAgY29uc3QgaW5wdXRMZW5ndGggPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKGlucHV0TGVuZ3RoLCB0aGlzLnN0YXJ0RGF0ZUlucHV0LCBpbnB1dExlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQXJyb3dSaWdodChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nLCBpbnB1dEVsZW1lbnQ6IGFueSkge1xuICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmRPZklucHV0ID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSBpbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoO1xuXG4gICAgaWYgKGlucHV0TmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWUgJiYgaXNDdXJzb3JBdEVuZE9mSW5wdXQgJiYga2V5Q29kZSA9PT0gYXJyb3dSaWdodEtleSkge1xuICAgICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKDAsIHRoaXMuZW5kRGF0ZUlucHV0LCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25CYWNrc3BhY2UoKSB7XG4gICAgY29uc3QgaW5wdXRMZW5ndGggPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xuXG4gICAgdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLnNsaWNlKDAsIC0xKTtcbiAgICB0aGlzLnNldEZvY3VzQW5kUG9zaXRpb24oaW5wdXRMZW5ndGgsIHRoaXMuc3RhcnREYXRlSW5wdXQsIGlucHV0TGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPblN0YXJ0RGF0ZUNvbXBsZXRlZChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNMYXN0S2V5UHJlc3NlZCA9IHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdDtcbiAgICBjb25zdCBpc05ld0RhdGVDb21wbGV0ZWQgPVxuICAgICAgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA9PT0gcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdCAmJiBpc0xhc3RLZXlQcmVzc2VkO1xuICAgIGNvbnN0IGlzVmFsaWRLZXkgPSBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudC5pc1ZhbGlkS2V5KGtleUNvZGUpO1xuXG4gICAgaWYgKGlucHV0TmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWUgJiYgaXNOZXdEYXRlQ29tcGxldGVkICYmIGlzVmFsaWRLZXkpIHtcbiAgICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbigwLCB0aGlzLmVuZERhdGVJbnB1dCwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbFdoZW5Db21wbGV0ZShpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50OiBib29sZWFuLCBzdGFydERhdGUsIGVuZERhdGUpIHtcbiAgICBjb25zdCBlbmREYXRlRm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKGVuZERhdGUpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbChzdGFydERhdGUpO1xuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdGhpcy5nZXREYXRlUmFuZ2VGb3JtYXRWYWxpZGF0aW9uKFxuICAgICAgc3RhcnREYXRlRm9ybWF0dGVkLFxuICAgICAgZW5kRGF0ZUZvcm1hdHRlZCxcbiAgICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnRcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuaXNFcXVhbEJlZm9yZVZhbHVlKHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kRGF0ZUZvcm1hdHRlZCkpIHtcbiAgICAgIHRoaXMucmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKTtcbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogc3RhcnREYXRlRm9ybWF0dGVkLCBlbmQ6IGVuZERhdGVGb3JtYXR0ZWQgfTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgLi4udGhpcy5kYXRlUmFuZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbEJ5U2NyZWVuKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW4sIHN0YXJ0RGF0ZT8sIGVuZERhdGU/KSB7XG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdHRlZCA9IGVuZERhdGUgfHwgdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUZvcm1hdHRlZCA9IHN0YXJ0RGF0ZSB8fCB0aGlzLmZvcm1hdFNjcmVlblRvTW9kZWwodGhpcy5zdGFydERhdGVJbnB1dFZhbHVlKTtcbiAgICBpZiAodGhpcy5pc0RhdGVSYW5nZUlucHV0VW5jb21wbGV0ZWQgJiYgdGhpcy5pc0RpcnR5RGF0ZVJhbmdlSW5wdXQpIHtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGVGb3JtYXR0ZWQsIGVuZERhdGVGb3JtYXR0ZWQpKSB7XG4gICAgICB0aGlzLnJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCk7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdGhpcy5nZXREYXRlUmFuZ2VGb3JtYXRWYWxpZGF0aW9uKFxuICAgICAgc3RhcnREYXRlRm9ybWF0dGVkLFxuICAgICAgZW5kRGF0ZUZvcm1hdHRlZCxcbiAgICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnRcbiAgICApO1xuXG4gICAgaWYgKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogc3RhcnREYXRlRm9ybWF0dGVkLCBlbmQ6IGVuZERhdGVGb3JtYXR0ZWQgfTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgLi4udGhpcy5kYXRlUmFuZ2UgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRlRm9ybWF0VmFsaWRhdGlvbi5pc1ZhbGlkICYmIHRoaXMudmVyaWZ5Rm9ybWF0dGVkRGF0ZXMoc3RhcnREYXRlRm9ybWF0dGVkLCBlbmREYXRlRm9ybWF0dGVkKSkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7IC4uLmRhdGVGb3JtYXRWYWxpZGF0aW9uLmRhdGVSYW5nZU1vZGVsIH07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmRhdGVSYW5nZU1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUZvcm1hdHRlZERhdGVzKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3RhcnQgfHwgISFlbmQ7XG4gIH1cblxuICBwcml2YXRlIHdhc0NsaWNrZWRPblBpY2tlcihldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0NhbGVuZGFyVmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICF0aGlzLmNhbGVuZGFyUGlja2VyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaWNvbkNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaGFzQXR0ckNhbGVuZGFyKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPHBvLWZpZWxkLWNvbnRhaW5lciBbcC1oZWxwXT1cImhlbHBcIiBbcC1sYWJlbF09XCJsYWJlbFwiIFtwLW9wdGlvbmFsXT1cIiFyZXF1aXJlZCAmJiBvcHRpb25hbFwiPlxuICA8ZGl2ICNkYXRlUmFuZ2VGaWVsZCBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtZmllbGQgcG8taW5wdXRcIiBbY2xhc3MucG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLXN0YXJ0LWRhdGVcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjc3RhcnREYXRlSW5wdXRcbiAgICAgICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWlucHV0XCJcbiAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW25hbWVdPVwic3RhcnREYXRlSW5wdXROYW1lXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAoa2V5dXApPVwib25LZXl1cCgkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImV2ZW50T25DbGljaygkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1zZXBhcmF0b3JcIj4tPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1lbmQtZGF0ZVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNlbmREYXRlSW5wdXRcbiAgICAgICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWlucHV0XCJcbiAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW25hbWVdPVwiZW5kRGF0ZUlucHV0TmFtZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgKGtleXVwKT1cIm9uS2V5dXAoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJldmVudE9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaWNvblwiPlxuICAgICAgPHBvLWNsZWFuICpuZ0lmPVwiZW5hYmxlQ2xlYW5lclwiIChwLWNoYW5nZS1ldmVudCk9XCJjbGVhcigpXCI+PC9wby1jbGVhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWljb25cIj5cbiAgICAgIDxzcGFuXG4gICAgICAgICNpY29uQ2FsZW5kYXJcbiAgICAgICAgY2xhc3M9XCJwby1pY29uIHBvLWZpZWxkLWljb24gcG8taWNvbi1jYWxlbmRhclwiXG4gICAgICAgIFtjbGFzcy5wby1jbGlja2FibGVdPVwiIWRpc2FibGVkICYmICFyZWFkb25seVwiXG4gICAgICAgIFtjbGFzcy5wby1maWVsZC1pY29uLWRpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxuICAgICAgPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8cG8tZmllbGQtY29udGFpbmVyLWJvdHRvbSBbcC1lcnJvci1wYXR0ZXJuXT1cImdldEVycm9yTWVzc2FnZVwiPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNDYWxlbmRhclZpc2libGVcIj5cbiAgPGRpdiAjY2FsZW5kYXJQaWNrZXIgY2xhc3M9XCJwby1jYWxlbmRhci1yYW5nZS1waWNrZXJcIj5cbiAgICA8cG8tY2FsZW5kYXJcbiAgICAgIHAtbW9kZT1cInJhbmdlXCJcbiAgICAgIFtuZ01vZGVsXT1cImRhdGVSYW5nZVwiXG4gICAgICBbcC1tYXgtZGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgIFtwLW1pbi1kYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DYWxlbmRhckNoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC9wby1jYWxlbmRhcj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
517
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGF0ZXBpY2tlci1yYW5nZS9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUVWLFNBQVMsRUFNVCx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRy9HLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDb0J2QyxvQ0FBMkQ7SUFBM0IsaU1BQWtCLGVBQUEsY0FBTyxDQUFBLElBQUM7SUFBQyxpQkFBVzs7OztJQWtCNUUsNkJBQXdDO0lBQ3RDLG1DQUFzRCxzQkFBQTtJQU9sRCw2TUFBaUIsZUFBQSwrQkFBd0IsQ0FBQSxJQUFDO0lBQzNDLGlCQUFjLEVBQUE7SUFFbkIsMEJBQWU7OztJQVBULGVBQXFCO0lBQXJCLDBDQUFxQiw4QkFBQSw4QkFBQSwyQkFBQTs7QUR2QzNCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIs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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIFJlbmRlcmVyMixcbiAgT25EZXN0cm95LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXMsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvcG8tY29udHJvbC1wb3NpdGlvbi9wby1jb250cm9sLXBvc2l0aW9uLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1kYXRlcGlja2VyLXJhbmdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnQgfSBmcm9tICcuL3BvLWRhdGVwaWNrZXItcmFuZ2UtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9EYXRlU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvcG8tZGF0ZS9wby1kYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9NYXNrIH0gZnJvbSAnLi4vcG8taW5wdXQvcG8tbWFzayc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5jb25zdCBhcnJvd0xlZnRLZXkgPSAzNztcbmNvbnN0IGFycm93UmlnaHRLZXkgPSAzOTtcbmNvbnN0IGJhY2tzcGFjZUtleSA9IDg7XG5jb25zdCBwb0RhdGVwaWNrZXJSYW5nZURhdGVMZW5ndGhEZWZhdWx0ID0gMTA7XG5cbmNvbnN0IHBvQ2FsZW5kYXJDb250ZW50T2Zmc2V0ID0gODtcbmNvbnN0IHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQgPSAnYm90dG9tLWxlZnQnO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29uc3QgcHJvdmlkZXJzID0gW1xuICB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH0sXG4gIHtcbiAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9LFxuICBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2Vcbl07XG4vKipcbiAqIEBkb2NzRXh0ZW5kcyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIExhYnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtbGFicy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtbGFicy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIC0gVmFjYXRpb25zIFN1Z2dlc3Rpb25cIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybVwiIHRpdGxlPVwiUE8gRGF0ZXBpY2tlciBSYW5nZSAtIFZhY2F0aW9ucyBSZWFjdGl2ZSBGb3JtXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5odG1sXCI+XG4gKiAgPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQudHNcIj5cbiAqICA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLWRhdGVwaWNrZXItcmFuZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVycyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnRcbiAgZXh0ZW5kcyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZCgnZGF0ZVJhbmdlRmllbGQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBkYXRlUmFuZ2VGaWVsZDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgZW5kRGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdGFydERhdGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHN0YXJ0RGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpY29uQ2FsZW5kYXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uQ2FsZW5kYXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyUGlja2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNhbGVuZGFyUGlja2VyOiBFbGVtZW50UmVmO1xuXG4gIGlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjbGlja0xpc3RlbmVyO1xuICBwcml2YXRlIGV2ZW50UmVzaXplTGlzdGVuZXI7XG4gIHByaXZhdGUgcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50OiBFbGVtZW50UmVmPGFueT47XG4gIHByaXZhdGUgcG9NYXNrT2JqZWN0OiBQb01hc2s7XG5cbiAgZ2V0IGF1dG9jb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub0F1dG9jb21wbGV0ZSA/ICdvZmYnIDogJ29uJztcbiAgfVxuXG4gIGdldCBlbmFibGVDbGVhbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsZWFuICYmICh0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUgfHwgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZSkgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHk7XG4gIH1cblxuICBnZXQgZW5kRGF0ZUlucHV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZW5kLWRhdGUnO1xuICB9XG5cbiAgZ2V0IGVuZERhdGVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBnZXQgZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlICE9PSAnJyAmJiB0aGlzLmhhc0ludmFsaWRDbGFzcygpID8gdGhpcy5lcnJvck1lc3NhZ2UgOiAnJztcbiAgfVxuXG4gIGdldCBpc0RhdGVSYW5nZUlucHV0VW5jb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUubGVuZ3RoIDwgcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdCAmJlxuICAgICAgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA8IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHRcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzRGlydHlEYXRlUmFuZ2VJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPiAwIHx8IHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZUlucHV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnc3RhcnQtZGF0ZSc7XG4gIH1cblxuICBnZXQgc3RhcnREYXRlSW5wdXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbnRyb2xQb3NpdGlvbjogUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwb0RhdGVTZXJ2aWNlOiBQb0RhdGVTZXJ2aWNlLFxuICAgIHBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwb0xhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIocG9EYXRlU2VydmljZSwgcG9MYW5ndWFnZVNlcnZpY2UpO1xuICAgIHRoaXMucG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50ID0gcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50O1xuICB9XG5cbiAgc3RhdGljIGdldEtleUNvZGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUYXJnZXRFbGVtZW50KGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZEtleShrZXlDb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBrZXlDb2RlID49IDQ4ICYmIGtleUNvZGUgPD0gNTc7XG4gICAgY29uc3QgaXNOdW1lcmljTnVtcGFkS2V5ID0ga2V5Q29kZSA+PSA5NiAmJiBrZXlDb2RlIDw9IDEwNTtcblxuICAgIHJldHVybiBpc051bWVyaWNLZXkgfHwgaXNOdW1lcmljTnVtcGFkS2V5O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmF1dG9Gb2N1cykge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIENsYXNzZSBkZSBtw6FzY2FyYVxuICAgIHRoaXMucG9NYXNrT2JqZWN0ID0gdGhpcy5idWlsZE1hc2soKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5taW5EYXRlIHx8IGNoYW5nZXMubWF4RGF0ZSkge1xuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5yZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpO1xuICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogJycsIGVuZDogJycgfTtcblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICBldmVudE9uQ2xpY2soJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvTWFza09iamVjdC5jbGljaygkZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGRhdGVwaWNrZXJSYW5nZTogUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzRGF0ZXBpY2tlclJhbmdlKCkge1xuICAgKiAgIHRoaXMuZGF0ZXBpY2tlclJhbmdlLmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmx1cihldmVudDogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWRNb2RlbD8uKCk7XG4gICAgY29uc3QgaXNTdGFydERhdGVUYXJnZXRFdmVudCA9IGV2ZW50LnRhcmdldC5uYW1lID09PSB0aGlzLnN0YXJ0RGF0ZUlucHV0TmFtZTtcblxuICAgIHRoaXMudXBkYXRlTW9kZWxCeVNjcmVlbihpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50KTtcblxuICAgIHRoaXMucmVtb3ZlRm9jdXNGcm9tRGF0ZVBpY2tlclJhbmdlRmllbGQoKTtcbiAgfVxuXG4gIG9uQ2FsZW5kYXJDaGFuZ2UoeyBzdGFydCwgZW5kIH0pIHtcbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50ID0gc3RhcnQgJiYgIWVuZDtcblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh7IHN0YXJ0OiBzdGFydCB8fCAnJywgZW5kOiBlbmQgfHwgJycgfSk7XG4gICAgdGhpcy51cGRhdGVNb2RlbEJ5U2NyZWVuKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQsIHN0YXJ0IHx8ICcnLCBlbmQgfHwgJycpO1xuXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1cyhldmVudDogYW55KSB7XG4gICAgdGhpcy5hcHBseUZvY3VzT25EYXRlUGlja2VyUmFuZ2VGaWVsZCgpO1xuICAgIHRoaXMucG9NYXNrT2JqZWN0LnJlc2V0UG9zaXRpb25zKGV2ZW50KTtcbiAgfVxuXG4gIG9uS2V5ZG93bihldmVudD86IGFueSkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZXRGb2N1c09uQmFja3NwYWNlKGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2V0Rm9jdXNPbkJhY2tzcGFjZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5rZXlkb3duKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBvbktleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgPSBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWU7XG5cbiAgICB0aGlzLnNldEZvY3VzKGV2ZW50KTtcbiAgICB0aGlzLnBvTWFza09iamVjdC5rZXl1cChldmVudCk7XG4gICAgdGhpcy51cGRhdGVNb2RlbFdoZW5Db21wbGV0ZShpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50LCB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUsIHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUpO1xuICB9XG5cbiAgcmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKSB7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCA9IHRydWU7XG4gICAgdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgPSB0cnVlO1xuICB9XG5cbiAgdG9nZ2xlQ2FsZW5kYXIoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSAhdGhpcy5pc0NhbGVuZGFyVmlzaWJsZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGlmICh0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlKSB7XG4gICAgICB0aGlzLnNldENhbGVuZGFyUG9zaXRpb24oKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNjcmVlbkJ5TW9kZWwobW9kZWw6IFBvRGF0ZXBpY2tlclJhbmdlKSB7XG4gICAgY29uc3QgZGF0ZVJhbmdlID0geyBzdGFydDogbW9kZWwuc3RhcnQgYXMgc3RyaW5nLCBlbmQ6IG1vZGVsLmVuZCBhcyBzdHJpbmcgfTtcbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVZhbGlkID0gdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZGF0ZVJhbmdlLmVuZCwgZGF0ZVJhbmdlLnN0YXJ0KTtcbiAgICBjb25zdCBpc0RhdGVWYWxpZCA9IGRhdGUgPT4gIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChkYXRlKSAmJiBpc1N0YXJ0RGF0ZVZhbGlkO1xuXG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdGVkID0gaXNEYXRlVmFsaWQoZGF0ZVJhbmdlLmVuZCkgPyB0aGlzLmZvcm1hdE1vZGVsVG9TY3JlZW4oZGF0ZVJhbmdlLmVuZCkgOiAnJztcbiAgICBjb25zdCBzdGFydERhdGVGb3JtYXRlZCA9IGlzRGF0ZVZhbGlkKGRhdGVSYW5nZS5zdGFydCkgPyB0aGlzLmZvcm1hdE1vZGVsVG9TY3JlZW4oZGF0ZVJhbmdlLnN0YXJ0KSA6ICcnO1xuXG4gICAgdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGVuZERhdGVGb3JtYXRlZDtcbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBzdGFydERhdGVGb3JtYXRlZDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGb2N1c09uRGF0ZVBpY2tlclJhbmdlRmllbGQoKSB7XG4gICAgdGhpcy5kYXRlUmFuZ2VGaWVsZC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3BvLWRhdGVwaWNrZXItcmFuZ2UtZmllbGQtZm9jdXNlZCcpO1xuICB9XG5cbiAgLy8gUmV0b3JuYSB1bSBvYmpldG8gZG8gdGlwbyBQb01hc2sgY29tIGEgbWFzY2FyYSBjb25maWd1cmFkYS5cbiAgcHJpdmF0ZSBidWlsZE1hc2soKTogUG9NYXNrIHtcbiAgICBsZXQgbWFzayA9IHRoaXMuZm9ybWF0LnRvVXBwZXJDYXNlKCk7XG5cbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ERC9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9NTS9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ZWVlZL2csICc5OTk5Jyk7XG5cbiAgICByZXR1cm4gbmV3IFBvTWFzayhtYXNrLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShmb3JtYXQ6IHN0cmluZywgZGF5OiBzdHJpbmcgPSAnJywgbW9udGg6IHN0cmluZyA9ICcnLCB5ZWFyOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgbGV0IGRhdGVGb3JtYXR0ZWQgPSBmb3JtYXQ7XG5cbiAgICBkYXkgPSBkYXkgJiYgZGF5LmluY2x1ZGVzKCdUJykgPyBkYXkuc2xpY2UoMCwgMikgOiBkYXk7XG5cbiAgICBkYXRlRm9ybWF0dGVkID0gZGF0ZUZvcm1hdHRlZC5yZXBsYWNlKCdkZCcsICgnMCcgKyBkYXkpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgnbW0nLCAoJzAnICsgbW9udGgpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgneXl5eScsIFN0cmluZyh5ZWFyKSk7XG5cbiAgICByZXR1cm4gZGF0ZUZvcm1hdHRlZDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0U2NyZWVuVG9Nb2RlbCh2YWx1ZTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHZhbHVlLnNwbGl0KCcvJyk7XG5cbiAgICByZXR1cm4gdmFsdWUgPyB0aGlzLmZvcm1hdERhdGUoJ3l5eXktbW0tZGQnLCBkYXksIG1vbnRoLCB5ZWFyKSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNb2RlbFRvU2NyZWVuKHZhbHVlOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gdmFsdWUuc3BsaXQoJy0nKTtcblxuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmZvcm1hdCwgZGF5LCBtb250aCwgeWVhcikgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVJhbmdlRm9ybWF0VmFsaWRhdGlvbihcbiAgICBzdGFydERhdGU6IHN0cmluZyxcbiAgICBlbmREYXRlOiBzdHJpbmcsXG4gICAgaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhblxuICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGRhdGVSYW5nZU1vZGVsOiBQb0RhdGVwaWNrZXJSYW5nZSB9IHtcbiAgICB0aGlzLnNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbihzdGFydERhdGUsIGVuZERhdGUpO1xuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOlxuICAgICAgICB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCAmJiB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkICYmIHRoaXMudmVyaWZ5VmFsaWREYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSksXG4gICAgICBkYXRlUmFuZ2VNb2RlbDogdGhpcy5nZXRWYWxpZGF0ZWRNb2RlbChzdGFydERhdGUsIGVuZERhdGUsIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsaWRhdGVkTW9kZWwoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZywgaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhbik6IFBvRGF0ZXBpY2tlclJhbmdlIHtcbiAgICBjb25zdCBkYXRlUmFuZ2VNb2RlbCA9IHsgc3RhcnQ6ICcnLCBlbmQ6ICcnIH07XG5cbiAgICBkYXRlUmFuZ2VNb2RlbC5lbmQgPVxuICAgICAgKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgfHwgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCkgJiYgIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChlbmREYXRlKSA/IGVuZERhdGUgOiAnJztcblxuICAgIGRhdGVSYW5nZU1vZGVsLnN0YXJ0ID1cbiAgICAgICghaXNTdGFydERhdGVUYXJnZXRFdmVudCB8fCB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkKSAmJiAhdGhpcy5kYXRlRm9ybWF0RmFpbGVkKHN0YXJ0RGF0ZSlcbiAgICAgICAgPyBzdGFydERhdGVcbiAgICAgICAgOiAnJztcblxuICAgIHJldHVybiBkYXRlUmFuZ2VNb2RlbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzQXR0ckNhbGVuZGFyKGVsZW1lbnQpIHtcbiAgICBjb25zdCBhdHRyQ2FsZW5kYXIgPSAnYXR0ci1jYWxlbmRhcic7XG5cbiAgICByZXR1cm4gZWxlbWVudD8uaGFzQXR0cmlidXRlKGF0dHJDYWxlbmRhcikgfHwgZWxlbWVudD8ucGFyZW50RWxlbWVudD8uaGFzQXR0cmlidXRlKGF0dHJDYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIGhhc0ludmFsaWRDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWludmFsaWQnKSAmJlxuICAgICAgdGhpcy5wb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWRpcnR5JylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGlzdGVuZXJzKCkge1xuICAgIHRoaXMuY2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy53YXNDbGlja2VkT25QaWNrZXIoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkICYmIGVuZERhdGUgPT09IHRoaXMuZGF0ZVJhbmdlLmVuZCAmJiBzdGFydERhdGUgPT09IHRoaXMuZGF0ZVJhbmdlLnN0YXJ0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NldEZvY3VzT25CYWNrc3BhY2UoZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5lbmREYXRlSW5wdXROYW1lICYmXG4gICAgICB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCA9PT0gMCAmJlxuICAgICAgZXZlbnQua2V5Q29kZSA9PT0gYmFja3NwYWNlS2V5XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TY3JvbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuaXNDYWxlbmRhclZpc2libGUpIHtcbiAgICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHJlbW92ZUZvY3VzRnJvbURhdGVQaWNrZXJSYW5nZUZpZWxkKCkge1xuICAgIHRoaXMuZGF0ZVJhbmdlRmllbGQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdwby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkLWZvY3VzZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkID0gdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZW5kRGF0ZSwgc3RhcnREYXRlKTtcblxuICAgIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkID0gIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChzdGFydERhdGUpICYmICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZW5kRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudC5nZXRUYXJnZXRFbGVtZW50KGV2ZW50KTtcbiAgICBjb25zdCBrZXlDb2RlID0gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQuZ2V0S2V5Q29kZShldmVudCk7XG4gICAgY29uc3QgaW5wdXROYW1lID0gaW5wdXRFbGVtZW50WyduYW1lJ107XG5cbiAgICB0aGlzLnNldEZvY3VzT25BcnJvd0xlZnQoa2V5Q29kZSwgaW5wdXROYW1lKTtcbiAgICB0aGlzLnNldEZvY3VzT25BcnJvd1JpZ2h0KGtleUNvZGUsIGlucHV0TmFtZSwgaW5wdXRFbGVtZW50KTtcbiAgICB0aGlzLnNldEZvY3VzT25TdGFydERhdGVDb21wbGV0ZWQoa2V5Q29kZSwgaW5wdXROYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNBbmRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyLCBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWYsIHNlbGVjdGlvblJhbmdlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZvY3VzT25FbGVtZW50KGlucHV0RWxlbWVudCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblJhbmdlLCBzZWxlY3Rpb25SYW5nZSk7XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5pbml0aWFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgIHRoaXMucG9NYXNrT2JqZWN0LmZpbmFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNPbkVsZW1lbnQoaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FsZW5kYXJQb3NpdGlvbigpIHtcbiAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5zZXRFbGVtZW50cyhcbiAgICAgIHRoaXMuY2FsZW5kYXJQaWNrZXIubmF0aXZlRWxlbWVudCxcbiAgICAgIHBvQ2FsZW5kYXJDb250ZW50T2Zmc2V0LFxuICAgICAgdGhpcy5kYXRlUmFuZ2VGaWVsZCxcbiAgICAgIFsnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0JywgJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCddLFxuICAgICAgZmFsc2UsXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQXJyb3dMZWZ0KGtleUNvZGU6IG51bWJlciwgaW5wdXROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc0N1cnNvckF0U3RhcnRPZklucHV0ID0gdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMDtcblxuICAgIGlmIChpbnB1dE5hbWUgPT09IHRoaXMuZW5kRGF0ZUlucHV0TmFtZSAmJiBpc0N1cnNvckF0U3RhcnRPZklucHV0ICYmIGtleUNvZGUgPT09IGFycm93TGVmdEtleSkge1xuICAgICAgY29uc3QgaW5wdXRMZW5ndGggPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKGlucHV0TGVuZ3RoLCB0aGlzLnN0YXJ0RGF0ZUlucHV0LCBpbnB1dExlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQXJyb3dSaWdodChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nLCBpbnB1dEVsZW1lbnQ6IGFueSkge1xuICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmRPZklucHV0ID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSBpbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoO1xuXG4gICAgaWYgKGlucHV0TmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWUgJiYgaXNDdXJzb3JBdEVuZE9mSW5wdXQgJiYga2V5Q29kZSA9PT0gYXJyb3dSaWdodEtleSkge1xuICAgICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKDAsIHRoaXMuZW5kRGF0ZUlucHV0LCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25CYWNrc3BhY2UoKSB7XG4gICAgY29uc3QgaW5wdXRMZW5ndGggPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xuXG4gICAgdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLnNsaWNlKDAsIC0xKTtcbiAgICB0aGlzLnNldEZvY3VzQW5kUG9zaXRpb24oaW5wdXRMZW5ndGgsIHRoaXMuc3RhcnREYXRlSW5wdXQsIGlucHV0TGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPblN0YXJ0RGF0ZUNvbXBsZXRlZChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNMYXN0S2V5UHJlc3NlZCA9IHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdDtcbiAgICBjb25zdCBpc05ld0RhdGVDb21wbGV0ZWQgPVxuICAgICAgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA9PT0gcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdCAmJiBpc0xhc3RLZXlQcmVzc2VkO1xuICAgIGNvbnN0IGlzVmFsaWRLZXkgPSBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudC5pc1ZhbGlkS2V5KGtleUNvZGUpO1xuXG4gICAgaWYgKGlucHV0TmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWUgJiYgaXNOZXdEYXRlQ29tcGxldGVkICYmIGlzVmFsaWRLZXkpIHtcbiAgICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbigwLCB0aGlzLmVuZERhdGVJbnB1dCwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbFdoZW5Db21wbGV0ZShpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50OiBib29sZWFuLCBzdGFydERhdGUsIGVuZERhdGUpIHtcbiAgICBjb25zdCBlbmREYXRlRm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKGVuZERhdGUpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbChzdGFydERhdGUpO1xuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdGhpcy5nZXREYXRlUmFuZ2VGb3JtYXRWYWxpZGF0aW9uKFxuICAgICAgc3RhcnREYXRlRm9ybWF0dGVkLFxuICAgICAgZW5kRGF0ZUZvcm1hdHRlZCxcbiAgICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnRcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuaXNFcXVhbEJlZm9yZVZhbHVlKHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kRGF0ZUZvcm1hdHRlZCkpIHtcbiAgICAgIHRoaXMucmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKTtcbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogc3RhcnREYXRlRm9ybWF0dGVkLCBlbmQ6IGVuZERhdGVGb3JtYXR0ZWQgfTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgLi4udGhpcy5kYXRlUmFuZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbEJ5U2NyZWVuKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW4sIHN0YXJ0RGF0ZT8sIGVuZERhdGU/KSB7XG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdHRlZCA9IGVuZERhdGUgfHwgdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUZvcm1hdHRlZCA9IHN0YXJ0RGF0ZSB8fCB0aGlzLmZvcm1hdFNjcmVlblRvTW9kZWwodGhpcy5zdGFydERhdGVJbnB1dFZhbHVlKTtcbiAgICBpZiAodGhpcy5pc0RhdGVSYW5nZUlucHV0VW5jb21wbGV0ZWQgJiYgdGhpcy5pc0RpcnR5RGF0ZVJhbmdlSW5wdXQpIHtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGVGb3JtYXR0ZWQsIGVuZERhdGVGb3JtYXR0ZWQpKSB7XG4gICAgICB0aGlzLnJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCk7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdGhpcy5nZXREYXRlUmFuZ2VGb3JtYXRWYWxpZGF0aW9uKFxuICAgICAgc3RhcnREYXRlRm9ybWF0dGVkLFxuICAgICAgZW5kRGF0ZUZvcm1hdHRlZCxcbiAgICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnRcbiAgICApO1xuXG4gICAgaWYgKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogc3RhcnREYXRlRm9ybWF0dGVkLCBlbmQ6IGVuZERhdGVGb3JtYXR0ZWQgfTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgLi4udGhpcy5kYXRlUmFuZ2UgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRlRm9ybWF0VmFsaWRhdGlvbi5pc1ZhbGlkICYmIHRoaXMudmVyaWZ5Rm9ybWF0dGVkRGF0ZXMoc3RhcnREYXRlRm9ybWF0dGVkLCBlbmREYXRlRm9ybWF0dGVkKSkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7IC4uLmRhdGVGb3JtYXRWYWxpZGF0aW9uLmRhdGVSYW5nZU1vZGVsIH07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmRhdGVSYW5nZU1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUZvcm1hdHRlZERhdGVzKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3RhcnQgfHwgISFlbmQ7XG4gIH1cblxuICBwcml2YXRlIHdhc0NsaWNrZWRPblBpY2tlcihldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0NhbGVuZGFyVmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICF0aGlzLmNhbGVuZGFyUGlja2VyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaWNvbkNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaGFzQXR0ckNhbGVuZGFyKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPHBvLWZpZWxkLWNvbnRhaW5lciBbcC1oZWxwXT1cImhlbHBcIiBbcC1sYWJlbF09XCJsYWJlbFwiIFtwLW9wdGlvbmFsXT1cIiFyZXF1aXJlZCAmJiBvcHRpb25hbFwiPlxuICA8ZGl2ICNkYXRlUmFuZ2VGaWVsZCBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtZmllbGQgcG8taW5wdXRcIiBbY2xhc3MucG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLXN0YXJ0LWRhdGVcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjc3RhcnREYXRlSW5wdXRcbiAgICAgICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWlucHV0XCJcbiAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW25hbWVdPVwic3RhcnREYXRlSW5wdXROYW1lXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAoa2V5dXApPVwib25LZXl1cCgkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImV2ZW50T25DbGljaygkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1zZXBhcmF0b3JcIj4tPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1lbmQtZGF0ZVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNlbmREYXRlSW5wdXRcbiAgICAgICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWlucHV0XCJcbiAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW25hbWVdPVwiZW5kRGF0ZUlucHV0TmFtZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgKGtleXVwKT1cIm9uS2V5dXAoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJldmVudE9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaWNvblwiPlxuICAgICAgPHBvLWNsZWFuICpuZ0lmPVwiZW5hYmxlQ2xlYW5lclwiIChwLWNoYW5nZS1ldmVudCk9XCJjbGVhcigpXCI+PC9wby1jbGVhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWljb25cIj5cbiAgICAgIDxzcGFuXG4gICAgICAgICNpY29uQ2FsZW5kYXJcbiAgICAgICAgY2xhc3M9XCJwby1pY29uIHBvLWZpZWxkLWljb24gcG8taWNvbi1jYWxlbmRhclwiXG4gICAgICAgIFtjbGFzcy5wby1jbGlja2FibGVdPVwiIWRpc2FibGVkICYmICFyZWFkb25seVwiXG4gICAgICAgIFtjbGFzcy5wby1maWVsZC1pY29uLWRpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxuICAgICAgPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8cG8tZmllbGQtY29udGFpbmVyLWJvdHRvbSBbcC1lcnJvci1wYXR0ZXJuXT1cImdldEVycm9yTWVzc2FnZVwiPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNDYWxlbmRhclZpc2libGVcIj5cbiAgPGRpdiAjY2FsZW5kYXJQaWNrZXIgY2xhc3M9XCJwby1jYWxlbmRhci1yYW5nZS1waWNrZXJcIj5cbiAgICA8cG8tY2FsZW5kYXJcbiAgICAgIHAtbW9kZT1cInJhbmdlXCJcbiAgICAgIFtuZ01vZGVsXT1cImRhdGVSYW5nZVwiXG4gICAgICBbcC1tYXgtZGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgIFtwLW1pbi1kYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgW3AtbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNhbGVuZGFyQ2hhbmdlKCRldmVudClcIlxuICAgID48L3BvLWNhbGVuZGFyPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -97,6 +97,26 @@ export class PoLookupBaseComponent {
97
97
  * Por parâmetro será passado o novo valor.
98
98
  */
99
99
  this.change = new EventEmitter();
100
+ /**
101
+ * @optional
102
+ *
103
+ * @description
104
+ * Evento disparado ao fechar o popover do gerenciador de colunas após alterar as colunas visíveis.
105
+ *
106
+ * O componente envia como parâmetro um array de string com as colunas visíveis atualizadas.
107
+ * Por exemplo: ["idCard", "name", "hireStatus", "age"].
108
+ */
109
+ this.changeVisibleColumns = new EventEmitter();
110
+ /**
111
+ * @optional
112
+ *
113
+ * @description
114
+ * Evento disparado ao clicar no botão de restaurar padrão no gerenciador de colunas.
115
+ *
116
+ * O componente envia como parâmetro um array de string com as colunas configuradas inicialmente.
117
+ * Por exemplo: ["idCard", "name", "hireStatus", "age"].
118
+ */
119
+ this.columnRestoreManager = new EventEmitter();
100
120
  this.selectedOptions = [];
101
121
  this.oldValue = '';
102
122
  this.oldValueToModel = null;
@@ -406,7 +426,7 @@ export class PoLookupBaseComponent {
406
426
  }
407
427
  }
408
428
  PoLookupBaseComponent.ɵfac = function PoLookupBaseComponent_Factory(t) { return new (t || PoLookupBaseComponent)(i0.ɵɵdirectiveInject(i1.PoLookupFilterService), i0.ɵɵdirectiveInject(Injector)); };
409
- PoLookupBaseComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoLookupBaseComponent, inputs: { autoFocus: ["p-auto-focus", "autoFocus"], label: ["p-label", "label"], literals: ["p-literals", "literals"], help: ["p-help", "help"], placeholder: ["p-placeholder", "placeholder"], name: "name", fieldValue: ["p-field-value", "fieldValue"], fieldLabel: ["p-field-label", "fieldLabel"], filterParams: ["p-filter-params", "filterParams"], fieldFormat: ["p-field-format", "fieldFormat"], columns: ["p-columns", "columns"], optional: ["p-optional", "optional"], advancedFilters: ["p-advanced-filters", "advancedFilters"], infiniteScroll: ["p-infinite-scroll", "infiniteScroll"], clean: ["p-clean", "clean"], multiple: ["p-multiple", "multiple"], autoHeight: ["p-auto-height", "autoHeight"], filterService: ["p-filter-service", "filterService"], noAutocomplete: ["p-no-autocomplete", "noAutocomplete"], required: ["p-required", "required"], disabled: ["p-disabled", "disabled"] }, outputs: { onError: "p-error", selected: "p-selected", change: "p-change" }, features: [i0.ɵɵNgOnChangesFeature] });
429
+ PoLookupBaseComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PoLookupBaseComponent, inputs: { autoFocus: ["p-auto-focus", "autoFocus"], label: ["p-label", "label"], literals: ["p-literals", "literals"], help: ["p-help", "help"], placeholder: ["p-placeholder", "placeholder"], name: "name", fieldValue: ["p-field-value", "fieldValue"], fieldLabel: ["p-field-label", "fieldLabel"], filterParams: ["p-filter-params", "filterParams"], fieldFormat: ["p-field-format", "fieldFormat"], columns: ["p-columns", "columns"], optional: ["p-optional", "optional"], advancedFilters: ["p-advanced-filters", "advancedFilters"], infiniteScroll: ["p-infinite-scroll", "infiniteScroll"], clean: ["p-clean", "clean"], multiple: ["p-multiple", "multiple"], autoHeight: ["p-auto-height", "autoHeight"], filterService: ["p-filter-service", "filterService"], noAutocomplete: ["p-no-autocomplete", "noAutocomplete"], required: ["p-required", "required"], disabled: ["p-disabled", "disabled"] }, outputs: { onError: "p-error", selected: "p-selected", change: "p-change", changeVisibleColumns: "p-change-visible-columns", columnRestoreManager: "p-restore-column-manager" }, features: [i0.ɵɵNgOnChangesFeature] });
410
430
  __decorate([
411
431
  InputBoolean()
412
432
  ], PoLookupBaseComponent.prototype, "autoFocus", void 0);
@@ -487,6 +507,12 @@ __decorate([
487
507
  }], change: [{
488
508
  type: Output,
489
509
  args: ['p-change']
510
+ }], changeVisibleColumns: [{
511
+ type: Output,
512
+ args: ['p-change-visible-columns']
513
+ }], columnRestoreManager: [{
514
+ type: Output,
515
+ args: ['p-restore-column-manager']
490
516
  }], filterService: [{
491
517
  type: Input,
492
518
  args: ['p-filter-service']
@@ -500,4 +526,4 @@ __decorate([
500
526
  type: Input,
501
527
  args: ['p-disabled']
502
528
  }] }); })();
503
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbG9va3VwLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWxvb2t1cC9wby1sb29rdXAtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE2RCxTQUFTLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPL0M7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsTUFBTSxPQUFnQixxQkFBcUI7SUE2WXpDLFlBQW9CLGNBQXFDLEVBQTRCLFFBQWtCO1FBQW5GLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUE0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBM1l2Rzs7Ozs7Ozs7OztXQVVHO1FBQ29DLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFpTGxFOzs7Ozs7OztXQVFHO1FBQ3lDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBRTVFLGlEQUFpRDtRQUNmLFVBQUssR0FBWSxLQUFLLENBQUM7UUFFekQ7Ozs7Ozs7Ozs7V0FVRztRQUNrQyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRS9EOzs7Ozs7Ozs7V0FTRztRQUNxQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRXBFOzs7V0FHRztR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STtrQkFBbEIsS0FBSzttQkFBQyxNQUFNO1lBU1csVUFBVTtrQkFBakMsS0FBSzttQkFBQyxlQUFlO1lBR00sVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBVUksWUFBWTtrQkFBckMsS0FBSzttQkFBQyxpQkFBaUI7WUFxQ0MsV0FBVztrQkFBbkMsS0FBSzttQkFBQyxnQkFBZ0I7WUFNSCxPQUFPO2tCQUExQixLQUFLO21CQUFDLFdBQVc7WUFlRyxRQUFRO2tCQUE1QixLQUFLO21CQUFDLFlBQVk7WUEwQlUsZUFBZTtrQkFBM0MsS0FBSzttQkFBQyxvQkFBb0I7WUFXaUIsY0FBYztrQkFBekQsS0FBSzttQkFBQyxtQkFBbUI7WUFHUSxLQUFLO2tCQUF0QyxLQUFLO21CQUFDLFNBQVM7WUFhcUIsUUFBUTtrQkFBNUMsS0FBSzttQkFBQyxZQUFZO1lBWXFCLFVBQVU7a0JBQWpELEtBQUs7bUJBQUMsZUFBZTtZQU1ILE9BQU87a0JBQXpCLE1BQU07bUJBQUMsU0FBUztZQVVLLFFBQVE7a0JBQTdCLE1BQU07bUJBQUMsWUFBWTtZQVVBLE1BQU07a0JBQXpCLE1BQU07bUJBQUMsVUFBVTtZQW9GYSxhQUFhO2tCQUEzQyxLQUFLO21CQUFDLGtCQUFrQjtZQWtCTyxjQUFjO2tCQUE3QyxLQUFLO21CQUFDLG1CQUFtQjtZQWdCRCxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFrQk0sUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0RmxhZ3MsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVW50eXBlZEZvcm1Db250cm9sLCBOZ0NvbnRyb2wsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiwgaXNUeXBlb2YgfSBmcm9tICcuLi8uLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IHJlcXVpcmVkRmFpbGVkIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBQb0xvb2t1cEFkdmFuY2VkRmlsdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWxvb2t1cC1hZHZhbmNlZC1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTG9va3VwQ29sdW1uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWxvb2t1cC1jb2x1bW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTG9va3VwRmlsdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWxvb2t1cC1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTG9va3VwTGl0ZXJhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tbG9va3VwLWxpdGVyYWxzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0xvb2t1cEZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLWxvb2t1cC1maWx0ZXIuc2VydmljZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogQ29tcG9uZW50ZSB1dGlsaXphZG8gcGFyYSBhYnJpciB1bWEgamFuZWxhIGRlIGJ1c2NhIGNvbSB1bWEgdGFiZWxhIHF1ZSBsaXN0YSBkYWRvcyBkZSB1bSBzZXJ2acOnby4gTmVzdGEgamFuZWxhIMOpIHBvc3PDrXZlbCBidXNjYXIgZVxuICogc2VsZWNpb25hciB1bSBvdSBtYWlzIHJlZ2lzdHJvcyBxdWUgc2Vyw6NvIGVudmlhZG9zIHBhcmEgbyBjYW1wby4gTyBgcG8tbG9va3VwYCBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIGRpZ2l0ZSB1bSB2YWxvciBlIHByZXNzaW9uZSBhIHRlY2xhICpUQUIqIHBhcmFcbiAqIGJ1c2NhciB1bSByZWdpc3Ryby5cbiAqXG4gKiA+IENhc28gbyBjYW1wbyBzZWphIGluaWNpYWRvIG91IHByZWVuY2hpZG8gY29tIHVtIHZhbG9yIGluZXhpc3RlbnRlIG5hIGJ1c2NhLCBvIG1lc21vIHNlcsOhIGxpbXBhZG8uXG4gKiBObyBzZWd1bmRvIGNhc28gb2NvcnJlcsOhIGFww7NzIGVzdGUgcGVyZGVyIG8gZm9jbzsgYW1ib3Mgb3MgY2Fzb3MgbyBjYW1wbyBmaWNhcsOhIGludsOhbGlkbyBxdWFuZG8gcmVxdWVyaWRvLlxuICpcbiAqID4gRW5xdWFudG8gbyBjb21wb25lbnRlIHJlYWxpemEgYSByZXF1aXNpw6fDo28gYW8gc2Vydmlkb3IsIG8gY29tcG9uZW50ZSBmaWNhcsOhIGRlc2FiaWxpdGFkbyBlIGNvbSBvIHN0YXR1cyBpbnRlcm5vIGRvXG4gKiBbbW9kZWxvXShodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvZm9ybS12YWxpZGF0aW9uI2NyZWF0aW5nLWFzeW5jaHJvbm91cy12YWxpZGF0b3JzKSBjb21vIGBwZW5kaW5nYC5cbiAqXG4gKiBFc3RlIGNvbXBvbmVudGUgbsOjbyDDqSByZWNvbWVuZGFkbyBxdWFuZG8gYSBidXNjYSBkb3MgZGFkb3MgcG9zc3VpciBwb3VjYXMgaW5mb3JtYcOnw7VlcywgcGFyYSBpc3NvIHV0aWxpemUgb3V0cm9zIGNvbXBvbmVudGVzIGNvbW8gb1xuICogYHBvLXNlbGVjdGAgb3UgbyBgcG8tY29tYm9gLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb0xvb2t1cEJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95LCBPbkluaXQsIFZhbGlkYXRvciwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQXBsaWNhIGZvY28gbm8gZWxlbWVudG8gYW8gc2VyIGluaWNpYWRvLlxuICAgKlxuICAgKiA+IENhc28gbWFpcyBkZSB1bSBlbGVtZW50byBzZWphIGNvbmZpZ3VyYWRvIGNvbSBlc3NhIHByb3ByaWVkYWRlLCBhcGVuYXMgbyDDumx0aW1vIGVsZW1lbnRvIGRlY2xhcmFkbyBjb20gZWxhIHRlcsOhIG8gZm9jby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWF1dG8tZm9jdXMnKSBASW5wdXRCb29sZWFuKCkgYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIExhYmVsIGRvIGNhbXBvLlxuICAgKlxuICAgKiA+IFF1YW5kbyB1dGlsaXphciBlc3RhIHByb3ByaWVkYWRlIG8gc2V1IHZhbG9yIHNlcsOhIHV0aWxpemFkbyBjb21vIHTDrXR1bG8gZGEgbW9kYWwgZG8gY29tcG9uZW50ZSBjYXNvIG7Do28gdGVuaGFcbiAgICogc2lkbyBkZWZpbmlkbyB1bSBgbW9kYWxUaXRsZWAgbmEgcHJvcHJpZWRhZGUgYHAtbGl0ZXJhbHNgLlxuICAgKi9cbiAgQElucHV0KCdwLWxhYmVsJykgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPYmpldG8gY29tIGFzIGxpdGVyYWlzIHVzYWRhcyBubyBgcG8tbG9va3VwYC5cbiAgICpcbiAgICogRXhpc3RlbSBkdWFzIG1hbmVpcmFzIGRlIGN1c3RvbWl6YXIgbyBjb21wb25lbnRlLCBwYXNzYW5kbyB1bSBvYmpldG8gY29tIHRvZGFzIGFzIGxpdGVyYWlzIGRpc3BvbsOtdmVpczpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9Mb29rdXBMaXRlcmFscyA9IHtcbiAgICogICAgbW9kYWxQcmltYXJ5QWN0aW9uTGFiZWw6ICdTZWxlY3QnLFxuICAgKiAgICBtb2RhbFNlY29uZGFyeUFjdGlvbkxhYmVsOiAnQ2FuY2VsJyxcbiAgICogICAgbW9kYWxQbGFjZWhvbGRlcjogJ1NlYXJjaCBWYWx1ZScsXG4gICAqICAgIG1vZGFsVGFibGVOb0NvbHVtbnM6ICdObyBjb2x1bW5zJyxcbiAgICogICAgbW9kYWxUYWJsZU5vRGF0YTogJ05vIGRhdGEnLFxuICAgKiAgICBtb2RhbFRhYmxlTG9hZGluZ0RhdGE6ICdMb2FkaW5nIGRhdGEnLFxuICAgKiAgICBtb2RhbFRhYmxlTG9hZE1vcmVEYXRhOiAnTG9hZCBtb3JlJyxcbiAgICogICAgbW9kYWxUaXRsZTogJ1NlbGVjdCBhIHVzZXInLFxuICAgKiAgICBtb2RhbEFkdmFuY2VkU2VhcmNoOiAnQWR2YW5jZWQgc2VhcmNoJyxcbiAgICogICAgbW9kYWxBZHZhbmNlZFNlYXJjaFRpdGxlOiAnQWR2YW5jZWQgc2VhcmNoJyxcbiAgICogICAgbW9kYWxBZHZhbmNlZFNlYXJjaFByaW1hcnlBY3Rpb25MYWJlbDogJ0ZpbHRlcicsXG4gICAqICAgIG1vZGFsQWR2YW5jZWRTZWFyY2hTZWNvbmRhcnlBY3Rpb25MYWJlbDogJ1JldHVybicsXG4gICAqICAgIG1vZGFsRGlzY2xhaW1lckdyb3VwVGl0bGU6ICdQcmVzZW50aW5nIHJlc3VsdHMgZmlsdGVyZWQgYnk6J1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIE91IHBhc3NhbmRvIGFwZW5hcyBhcyBsaXRlcmFpcyBxdWUgZGVzZWphIGN1c3RvbWl6YXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvTG9va3VwTGl0ZXJhbHMgPSB7XG4gICAqICAgIG1vZGFsUHJpbWFyeUFjdGlvbkxhYmVsOiAnU2VsZWN0J1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIEUgcGFyYSBjYXJyZWdhciBhcyBsaXRlcmFpcyBjdXN0b21pemFkYXMsIGJhc3RhIGFwZW5hcyBwYXNzYXIgbyBvYmpldG8gcGFyYSBvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tbG9va3VwXG4gICAqICAgW3AtbGl0ZXJhbHNdPVwiY3VzdG9tTGl0ZXJhbHNcIj5cbiAgICogPC9wby1sb29rdXA+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIGxpdGVyYWxzPzogUG9Mb29rdXBMaXRlcmFscztcblxuICAvKiogVGV4dG8gZGUgYXBvaW8gZG8gY2FtcG8uICovXG4gIEBJbnB1dCgncC1oZWxwJykgaGVscD86IHN0cmluZztcblxuICAvKiogTWVuc2FnZW0gcXVlIGFwYXJlY2Vyw6EgZW5xdWFudG8gbyBjYW1wbyBuw6NvIGVzdGl2ZXIgcHJlZW5jaGlkby4gKi9cbiAgQElucHV0KCdwLXBsYWNlaG9sZGVyJykgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlIHx8ICcnO1xuICB9XG5cbiAgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC8qKiBOb21lIGUgSWQgZG8gY29tcG9uZW50ZS4gKi9cbiAgQElucHV0KCduYW1lJykgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSW5kaWNhIGEgY29sdW5hIHF1ZSBzZXLDoSB1dGlsaXphZGEgY29tbyB2YWxvciBkbyBjYW1wby5cbiAgICpcbiAgICogPiBBdGVuw6fDo286IENhc28gbsOjbyBzZWphIHBhc3NhZGEgb3UgdGVuaGEgbyBjb250ZcO6ZG8gaW5jb3JyZXRvLCBuw6NvIGlyw6EgYXR1YWxpemFyIG8gbW9kZWwgZG8gZm9ybXVsw6FyaW8uXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtdmFsdWUnKSBmaWVsZFZhbHVlOiBzdHJpbmc7XG5cbiAgLyoqIEluZGljYSBhIGNvbHVuYSBxdWUgc2Vyw6EgdXRpbGl6YWRhIGNvbW8gZGVzY3Jpw6fDo28gZG8gY2FtcG8gZSBjb21vIGZpbHRybyBkZW50cm8gZGEgamFuZWxhLiAqL1xuICBASW5wdXQoJ3AtZmllbGQtbGFiZWwnKSBzZXQgZmllbGRMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGRMYWJlbCA9IHZhbHVlO1xuICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gW3RoaXMuZmllbGRMYWJlbF07XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKiBWYWxvciBxdWUgc2Vyw6EgcmVwYXNzYWRvIGNvbW8gcGFyw6JtZXRybyBwYXJhIGEgVVJMIG91IGFvcyBtw6l0b2RvcyBkbyBzZXJ2acOnbyBxdWUgaW1wbGVtZW50YW0gYSBpbnRlcmZhY2UgYFBvTG9va3VwRmlsdGVyYC4gKi9cbiAgQElucHV0KCdwLWZpbHRlci1wYXJhbXMnKSBmaWx0ZXJQYXJhbXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRm9ybWF0byBkZSBleGliacOnw6NvIGRvIGNhbXBvLlxuICAgKlxuICAgKiBSZWNlYmUgdW1hIGZ1bsOnw6NvIHF1ZSBkZXZlIHJldG9ybmFyIHVtYSAqc3RyaW5nKiBjb20gby9vcyB2YWxvcmVzIGRvIG9iamV0byBmb3JtYXRhZG9zIHBhcmEgZXhpYmnDp8OjbywgcG9yIGV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBmaWVsZEZvcm1hdChvYmopIHtcbiAgICogICByZXR1cm4gYCR7b2JqLmlkfSAtICR7b2JqLm5hbWV9YDtcbiAgICogfVxuICAgKiBgYGBcbiAgICogPiBFc3RhIHByb3ByaWVkYWRlIHNvYnJlcMO1ZSBvIHZhbG9yIGRhIHByb3ByaWVkYWRlIGBwLWZpZWxkLWxhYmVsYCBuYSBkZXNjcmnDp8OjbyBkbyBjYW1wby5cbiAgICpcbiAgICogUG9kZS1zZSBpbmZvcm1hciB1bWEgbGlzdGEgZGUgcHJvcHJpZWRhZGVzIHF1ZSBkZXNlamEgZXhpYmlyIGNvbW8gZGVzY3Jpw6fDo28gZG8gY2FtcG8sIFBvciBleGVtcGxvOlxuICAgKiBgYGBcbiAgICogPHBvLWxvb2t1cFxuICAgKiAgLi4uXG4gICAqICBbcC1maWVsZC1mb3JtYXRdPVwiWydpZCcsJ25pY2tuYW1lJ11cIlxuICAgKiAgLi4uXG4gICAqID5cbiAgICpcbiAgICogT2JqZXRvIHJldG9ybmFkbzpcbiAgICogICB7XG4gICAqICAgICAgaWQ6MTIzLFxuICAgKiAgICAgIG5hbWU6ICdLYWthcm90bycsXG4gICAqICAgICAgbmlja25hbWU6ICdHb2t1JyxcbiAgICogICB9XG4gICAqIEFwcmVzZW50YcOnw6NvIG5vIGNhbXBvOiAxMjMgLSBHb2t1XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IFNlcsOhIHV0aWxpemFkbyBgIC0gYCBjb21vIHNlcGFyYWRvci5cbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC1mb3JtYXQnKSBmaWVsZEZvcm1hdD86ICgodmFsdWUpID0+IHN0cmluZykgfCBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBMaXN0YSBkYXMgY29sdW5hcyBkYSB0YWJlbGEuXG4gICAqIEVzc2EgcHJvcHJpZWRhZGUgZGV2ZSByZWNlYmVyIHVtIGFycmF5IGRlIG9iamV0b3MgcXVlIGltcGxlbWVudGFtIGEgaW50ZXJmYWNlIFBvTG9va3VwQ29sdW1uLlxuICAgKi9cbiAgQElucHV0KCdwLWNvbHVtbnMnKSBjb2x1bW5zPzogQXJyYXk8UG9Mb29rdXBDb2x1bW4+O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9wY2lvbmFsIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTyBjYW1wbyBjb250ZXIgYHAtcmVxdWlyZWRgO1xuICAgKiAtIE7Do28gcG9zc3VpciBgcC1oZWxwYCBlL291IGBwLWxhYmVsYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbmFsJykgb3B0aW9uYWw6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGlzdGEgZGUgb2JqZXRvcyBkb3MgY2FtcG9zIHF1ZSBzZXLDo28gY3JpYWRvcyBuYSBidXNjYSBhdmFuw6dhZGEuXG4gICAqXG4gICAqID4gQ2FzbyBuw6NvIHNlamEgcGFzc2FkbyB1bSBvYmpldG8gb3UgZW50w6NvIGVsZSBlc3RlamEgZW0gYnJhbmNvIG8gbGluayBkZSBidXNjYSBhdmFuw6dhZGEgZmljYXLDoSBlc2NvbmRpZG8uXG4gICAqXG4gICAqIEV4ZW1wbG8gZGUgVVJMIGNvbSBidXNjYSBhdmFuw6dhZGE6XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJm5hbWU9VG9ueSUyMFN0YXJrJm5pY2tuYW1lPUhvbWVtJTIwZGUlMjBGZXJyb1xuICAgKiBgYGBcbiAgICpcbiAgICogQ2FzbyBhbGd1bSBwYXLDom1ldHJvIHNlamEgdW1hIGxpc3RhLCBhIGNvbmNhdGVuYcOnw6NvIMOpIGZlaXRhIHV0aWxpemFuZG8gdsOtcmd1bGEuXG4gICAqIEV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJm5hbWU9VG9ueSUyMFN0YXJrLFBldGVyJTIwUGFya2VyLEdvaGFuXG4gICAqIGBgYFxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWFkdmFuY2VkLWZpbHRlcnMnKSBhZHZhbmNlZEZpbHRlcnM6IEFycmF5PFBvTG9va3VwQWR2YW5jZWRGaWx0ZXI+O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEF0aXZhIGEgZnVuY2lvbmFsaWRhZGUgZGUgc2Nyb2xsIGluZmluaXRvIHBhcmEgYSB0YWJlbGEgZXhpYmlkYSBubyByZXRvcm5vIGRhIGNvbnN1bHRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaW5maW5pdGUtc2Nyb2xsJykgQElucHV0Qm9vbGVhbigpIGluZmluaXRlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEV4aWJlIHVtIMOtY29uZSBxdWUgcGVybWl0ZSBsaW1wYXIgbyBjYW1wby4gKi9cbiAgQElucHV0KCdwLWNsZWFuJykgQElucHV0Qm9vbGVhbigpIGNsZWFuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBhIHNlbGXDp8OjbyBkZSBtw7psdGlwbG9zIGl0ZW5zLlxuICAgKlxuICAgKiA+IFF1YW5kbyBoYWJpbGl0YWRvIG8gdmFsb3IgZG8gY2FtcG8gcGFzc2Fyw6EgYSBzZXIgdW1hIGxpc3RhIGRlIHZhbG9yZXMsIHBvciBleGVtcGxvOiBgWyAxMjM0NSwgNjc4OTAgXWBcbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW11bHRpcGxlJykgQElucHV0Qm9vbGVhbigpIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBhIGFsdHVyYSBkbyBjb21wb25lbnRlIHNlcsOhIGF1dG8gYWp1c3TDoXZlbCwgcG9zc3VpbmRvIHVtYSBhbHR1cmEgbWluaW1hIHBvcsOpbSBhIGFsdHVyYSBtw6F4aW1hIHNlcsOhIGRlIGFjb3Jkb1xuICAgKiBjb20gbyBuw7ptZXJvIGRlIGl0ZW5zIHNlbGVjaW9uYWRvcyBlIGEgZXh0ZW5zw6NvIGRvcyBtZXNtb3MsIG1hbnRlbmRvLW9zIHNlbXByZSB2aXPDrXZlaXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1hdXRvLWhlaWdodCcpIEBJbnB1dEJvb2xlYW4oKSBhdXRvSGVpZ2h0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEV2ZW50byBzZXLDoSBkaXNwYXJhZG8gcXVhbmRvIG9jb3JyZXIgYWxndW0gZXJybyBuYSByZXF1aXNpw6fDo28gZGUgYnVzY2EgZG8gaXRlbS5cbiAgICogU2Vyw6EgcGFzc2FkbyBwb3IgcGFyw6JtZXRybyBvIG9iamV0byBkZSBlcnJvIHJldG9ybmFkby5cbiAgICovXG4gIEBPdXRwdXQoJ3AtZXJyb3InKSBvbkVycm9yOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBzZXLDoSBkaXNwYXJhZG8gcXVhbmRvIG9jb3JyZXIgYWxndW1hIHNlbGXDp8Ojby5cbiAgICogU2Vyw6EgcGFzc2FkbyBwb3IgcGFyw6JtZXRybyBvIG9iamV0byBjb20gbyB2YWxvciBzZWxlY2lvbmFkby5cbiAgICovXG4gIEBPdXRwdXQoJ3Atc2VsZWN0ZWQnKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiAgRXZlbnRvIHF1ZSBzZXLDoSBkaXNwYXJhZG8gYW8gYWx0ZXJhciBvIG1vZGVsLlxuICAgKiAgUG9yIHBhcsOibWV0cm8gc2Vyw6EgcGFzc2FkbyBvIG5vdm8gdmFsb3IuXG4gICAqL1xuICBAT3V0cHV0KCdwLWNoYW5nZScpIGNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBzZXJ2aWNlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICBwcm90ZWN0ZWQgZ2V0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBrZXlzRGVzY3JpcHRpb246IEFycmF5PGFueT47XG4gIHByb3RlY3RlZCBvbGRWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHByb3RlY3RlZCB2YWx1ZVRvTW9kZWw7XG4gIHByb3RlY3RlZCBvbGRWYWx1ZVRvTW9kZWwgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgcHJvdGVjdGVkIG9uVG91Y2hlZDogYW55ID0gbnVsbDtcbiAgcHJvdGVjdGVkIHJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX2Rpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9maWVsZExhYmVsOiBzdHJpbmc7XG4gIHByaXZhdGUgX2ZpbHRlclNlcnZpY2U6IFBvTG9va3VwRmlsdGVyIHwgc3RyaW5nO1xuICBwcml2YXRlIF9ub0F1dG9jb21wbGV0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9yZXF1aXJlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYXV0b0hlaWdodDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgYXV0b0hlaWdodEluaXRpYWxWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBvbkNoYW5nZVByb3BhZ2F0ZTogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSB2YWxpZGF0b3JDaGFuZ2U6IGFueTtcblxuICBwcml2YXRlIGNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XG5cbiAgLyoqXG4gICAqIFNlcnZpw6dvIHJlc3BvbnPDoXZlbCBwb3IgYnVzY2FyIG9zIGRhZG9zIGRhIHRhYmVsYSBuYSBqYW5lbGEuIFBvZGUgc2VyIGluZm9ybWFkbyB1bSBzZXJ2acOnbyBxdWUgaW1wbGVtZW50ZSBhIGludGVyZmFjZVxuICAgKiBgUG9Mb29rdXBGaWx0ZXJgIG91IHVtYSBVUkwuXG4gICAqXG4gICAqIFF1YW5kbyB1dGlsaXphZGEgdW1hIFVSTCBkZSB1bSBzZXJ2acOnbywgc2Vyw6EgY29uY2F0ZW5hZGEgbmVzdGEgVVJMIG8gdmFsb3IgcXVlIGRlc2VqYS1zZSBmaWx0cmFyLCBwb3IgZXhlbXBsbzpcbiAgICpcbiAgICogYGBgXG4gICAqIHVybCArID9wYWdlPTEmcGFnZVNpemU9MjAmZmlsdGVyPVBldGVyXG4gICAqIGBgYFxuICAgKlxuICAgKiBDYXNvIHV0aWxpemFyIG9yZGVuYcOnw6NvLCBhIGNvbHVuYSBvcmRlbmFkYSBzZXLDoSBlbnZpYWRhIGF0cmF2w6lzIGRvIHBhcsOibWV0cm8gYG9yZGVyYCwgcG9yIGV4ZW1wbG86XG4gICAqIC0gQ29sdW5hIGRlY3Jlc2NlbnRlOlxuICAgKiBgYGBcbiAgICogIHVybCArID9wYWdlPTEmcGFnZVNpemU9MjAmZmlsdGVyPVBldGVyJm9yZGVyPS1uYW1lXG4gICAqIGBgYFxuICAgKlxuICAgKiAtIENvbHVuYSBhc2NlbmRlbnRlOlxuICAgKiBgYGBcbiAgICogIHVybCArID9wYWdlPTEmcGFnZVNpemU9MjAmZmlsdGVyPVBldGVyJm9yZGVyPW5hbWVcbiAgICogYGBgXG4gICAqXG4gICAqIFNlIGZvciBkZWZpbmlkbyBhIHByb3ByaWVkYWRlIGBwLWZpbHRlci1wYXJhbXNgLCBvIG1lc21vIHRhbWLDqW0gc2Vyw6EgY29uY2F0ZW5hZG8uIFBvciBleGVtcGxvLCBwYXJhIG9cbiAgICogcGFyw6JtZXRybyBgeyBhZ2U6IDIzIH1gIGEgVVJMIGZpY2FyaWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJmFnZT0yMyZmaWx0ZXI9UGV0ZXJcbiAgICogYGBgXG4gICAqXG4gICAqIEFvIGluaWNpYXIgbyBjYW1wbyBjb20gdmFsb3IsIG9zIHJlZ2lzdHJvcyBzZXLDo28gYnVzY2Fkb3MgZGEgc2VndWludGUgZm9ybWE6XG4gICAqIGBgYFxuICAgKiBtb2RlbCA9IDEyMzQ7XG4gICAqXG4gICAqIEdFVCB1cmwvMTIzNFxuICAgKiBgYGBcbiAgICpcbiAgICogQ2FzbyBlc3RpdmVyIGNvbSBtw7psdGlwbGEgc2VsZcOnw6NvIGhhYmlsaXRhZGE6XG4gICAqIGBgYFxuICAgKiBtb2RlbCA9IFsxMjM0LCA1Njc4XVxuICAgKlxuICAgKiBHRVQgdXJsPyR7ZmllbGRWYWx1ZX09MTIzNCw1Njc4XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IEVzdGEgVVJMIGRldmUgcmV0b3JuYXIgZSByZWNlYmVyIG9zIGRhZG9zIG5vIHBhZHLDo28gZGUgW0FQSSBkbyBQTyBVSV0oaHR0cHM6Ly9wby11aS5pby9ndWlkZXMvYXBpKSBlIHV0aWxpemEgb3MgdmFsb3Jlc1xuICAgKiBkZWZpbmlkb3MgbmFzIHByb3ByaWVkYWRlcyBgcC1maWVsZC1sYWJlbGAgZSBgcC1maWVsZC12YWx1ZWAgcGFyYSBhIGNvbnN0cnXDp8OjbyBkbyBgcG8tbG9va3VwYC5cbiAgICpcbiAgICogQ2FzbyBvIHVzdcOhcmlvIGRpZ2l0ZSB1bSB2YWxvciBlIHByZXNzaW9uZSBhIHRlY2xhICpUQUIqIHBhcmEgcmVhbGl6YXIgYSBidXNjYSBkZSB1bSByZWdpc3RybyBlc3BlY8OtZmljbywgbyB2YWxvciBxdWUgc2VcbiAgICogZGVzZWphIGZpbHRyYXIgc2Vyw6EgY29kaWZpY2FkbyB1dGlsaXphbmRvIGEgZnVuw6fDo28gW2VuY29kZVVSSUNvbXBvbmVudF0oaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lbmNvZGV1cmljb21wb25lbnQtdXJpY29tcG9uZW50KVxuICAgKiBlIGNvbmNhdGVuYWRvIG5hIFVSTCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIHVybC92YWxvciUyMHF1ZSUyMHNlJTIwZGVzZWphJTIwZmlsdHJhclxuICAgKiBgYGBcbiAgICpcbiAgICogPiBRdWFuZG8gaW5mb3JtYWRvIHVtIHNlcnZpw6dvIHF1ZSBpbXBsZW1lbnRlIGEgaW50ZXJmYWNlIGBQb0xvb2t1cEZpbHRlcmAgbyB0cmF0YW1lbnRvIGRlIGVuY29kaW5nIGRvIHZhbG9yIGEgc2VyIGZpbHRyYWRvIGZpY2Fyw6EgYSBjYXJnbyBkbyBkZXNlbnZvbHZlZG9yLlxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1zZXJ2aWNlJykgc2V0IGZpbHRlclNlcnZpY2UoZmlsdGVyU2VydmljZTogUG9Mb29rdXBGaWx0ZXIgfCBzdHJpbmcpIHtcbiAgICB0aGlzLl9maWx0ZXJTZXJ2aWNlID0gZmlsdGVyU2VydmljZTtcbiAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5maWx0ZXJTZXJ2aWNlKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJTZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGEgcHJvcHJpZWRhZGUgbmF0aXZhIGBhdXRvY29tcGxldGVgIGRvIGNhbXBvIGNvbW8gYG9mZmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1uby1hdXRvY29tcGxldGUnKSBzZXQgbm9BdXRvY29tcGxldGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9ub0F1dG9jb21wbGV0ZSA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IG5vQXV0b2NvbXBsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9ub0F1dG9jb21wbGV0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEluZGljYSBxdWUgbyBjYW1wbyBzZXLDoSBvYnJpZ2F0w7NyaW8uIEVzdGEgcHJvcHJpZWRhZGUgw6kgZGVzY29uc2lkZXJhZGEgcXVhbmRvIG8gY2FtcG8gZXN0w6EgZGVzYWJpbGl0YWRvIChwLWRpc2FibGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlcXVpcmVkJykgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHJlcXVpcmVkKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLnZhbHVlVG9Nb2RlbCk7XG4gIH1cblxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2EgcXVlIG8gY2FtcG8gc2Vyw6EgZGVzYWJpbGl0YWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIEBJbnB1dCgncC1kaXNhYmxlZCcpIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gPGFueT5kaXNhYmxlZCA9PT0gJycgPyB0cnVlIDogY29udmVydFRvQm9vbGVhbihkaXNhYmxlZCk7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkZWZhdWx0U2VydmljZTogUG9Mb29rdXBGaWx0ZXJTZXJ2aWNlLCBASW5qZWN0KEluamVjdG9yKSBwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5nZXRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1uKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb250cm9sKCk7XG4gIH1cblxuICBjbGVhbk1vZGVsKCkge1xuICAgIHRoaXMuY2xlYW5WaWV3VmFsdWUoKTtcbiAgICB0aGlzLmNhbGxPbkNoYW5nZSh1bmRlZmluZWQpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLm11bHRpcGxlICYmIGlzVHlwZW9mKHRoaXMuZmlsdGVyU2VydmljZSwgJ3N0cmluZycpKSB7XG4gICAgICB0aGlzLnNlcnZpY2Uuc2V0Q29uZmlnKHRoaXMuZmlsdGVyU2VydmljZSwgdGhpcy5maWVsZFZhbHVlLCB0aGlzLm11bHRpcGxlKTtcbiAgICB9XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBvcyBlc3RhZG9zIGRlIGhhYmlsaXRhZG8gdmlhIGZvcm1zIGFwaVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIGFzIG11ZGFuw6dhcyBlIG7Do28gYXR1YWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIE1vZGVsLlxuICByZWdpc3Rlck9uQ2hhbmdlKGZ1bmM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VQcm9wYWdhdGUgPSBmdW5jO1xuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIGFzIG11ZGFuw6dhcyBlIG7Do28gYXR1YWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIE1vZGVsLlxuICByZWdpc3Rlck9uVG91Y2hlZChmdW5jOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZ1bmM7XG4gIH1cblxuICAvLyBTZWxlY2lvbmEgbyB2YWxvciBkbyBtb2RlbC5cbiAgc2VsZWN0VmFsdWUodmFsdWVTZWxlY3RlZDogYW55KSB7XG4gICAgdGhpcy52YWx1ZVRvTW9kZWwgPSB2YWx1ZVNlbGVjdGVkO1xuICAgIHRoaXMubXVsdGlwbGVcbiAgICAgID8gdGhpcy5jYWxsT25DaGFuZ2UodGhpcy52YWx1ZVRvTW9kZWwpXG4gICAgICA6IHRoaXMudmFsdWVUb01vZGVsXG4gICAgICA/IHRoaXMuY2FsbE9uQ2hhbmdlKHRoaXMudmFsdWVUb01vZGVsW3RoaXMuZmllbGRWYWx1ZV0pXG4gICAgICA6IHRoaXMuY2FsbE9uQ2hhbmdlKHVuZGVmaW5lZCk7XG4gICAgdGhpcy5zZWxlY3RlZC5lbWl0KHZhbHVlU2VsZWN0ZWQpO1xuICB9XG5cbiAgY2FsbE9uQ2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAvLyBRdWFuZG8gbyBpbnB1dCBuw6NvIHBvc3N1aSB1bSBmb3JtdWzDoXJpbywgZW50w6NvIGVzdGEgZnVuw6fDo28gbsOjbyDDqSByZWdpc3RyYWRhLlxuICAgIGlmICh0aGlzLm9uQ2hhbmdlUHJvcGFnYXRlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlUHJvcGFnYXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vbGRWYWx1ZVRvTW9kZWwgIT09IHRoaXMudmFsdWVUb01vZGVsKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBBcm1hemVuYXIgbyB2YWxvciBhbnRpZ28gZG8gbW9kZWxcbiAgICB0aGlzLm9sZFZhbHVlVG9Nb2RlbCA9IHRoaXMudmFsdWVUb01vZGVsO1xuICB9XG5cbiAgc2VhcmNoQnlJZCh2YWx1ZSkge1xuICAgIGxldCBjaGVja2VkVmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmICh0eXBlb2YgY2hlY2tlZFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY2hlY2tlZFZhbHVlID0gY2hlY2tlZFZhbHVlLnRyaW0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tlZFZhbHVlICE9PSAnJykge1xuICAgICAgY29uc3Qgb2xkRGlzYWJsZSA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAvLyA6VE9ETzogUmV0aXJhciBubyBmdXR1cm8gcG9pcyBlc3NlIHNldFRpbWVvdXQgZm9pIGZlaXRvXG4gICAgICAgIC8vIHBvaXMgcXVhbmRvIG8gY2FtcG8gw6kgYWNpb25hZG8gcGVsb3MgbcOpdG9kb3Mgc2V0VmFsdWUgb3UgcGF0Y2hWYWx1ZVxuICAgICAgICAvLyBhIG11ZGFuw6dhIG7Do28gw6kgZGV0ZWN0YWRhXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb250cm9sLm1hcmtBc1BlbmRpbmcoKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlXG4gICAgICAgIC5nZXRPYmplY3RCeVZhbHVlKHZhbHVlLCB0aGlzLmZpbHRlclBhcmFtcylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IG9sZERpc2FibGU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudD8ubGVuZ3RoIHx8ICghQXJyYXkuaXNBcnJheShlbGVtZW50KSAmJiBlbGVtZW50KSkge1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSAmJiBlbGVtZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERpc2NsYWltZXJzKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUl0ZW1zKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsKHRoaXMubXVsdGlwbGUgPyBlbGVtZW50IDogW2VsZW1lbnRdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYW5Nb2RlbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbGVhbk1vZGVsKCk7XG4gICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFuTW9kZWwoKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShhYnN0cmFjdENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmIChyZXF1aXJlZEZhaWxlZCh0aGlzLnJlcXVpcmVkLCB0aGlzLmRpc2FibGVkLCBhYnN0cmFjdENvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXF1aXJlZDoge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZT8ubGVuZ3RoIHx8ICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUpKSB7XG4gICAgICAvLyBFc3RhIGNvbmRpw6fDo28gw6kgZXhlY3V0YWRhIHNvbWVudGUgcXVhbmRvIMOpIHBhc3NhZG8gbyBJRCBwYXJhIHJlYWxpemFyIGEgYnVzY2EgcGVsbyBJRC5cbiAgICAgIHRoaXMuc2VhcmNoQnlJZCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYW5WaWV3VmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW5WaWV3VmFsdWUoKSB7XG4gICAgdGhpcy5zZXREaXNjbGFpbWVycyhbXSk7XG4gICAgdGhpcy5zZXRWaWV3VmFsdWUoJycsIHt9KTtcbiAgICB0aGlzLm9sZFZhbHVlID0gJyc7XG4gICAgdGhpcy52YWx1ZVRvTW9kZWwgPSBudWxsO1xuICB9XG5cbiAgLy8gRm9ybWF0YSBhIGxhYmVsIGRvIGNhbXBvLlxuICBwcm90ZWN0ZWQgZ2V0Rm9ybWF0dGVkTGFiZWwodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlID8gdGhpcy5rZXlzRGVzY3JpcHRpb24ubWFwKGNvbHVtbiA9PiB2YWx1ZVtjb2x1bW5dKS5qb2luKCcgLSAnKSA6ICcnO1xuICB9XG5cbiAgLy8gQ2hhbWEgbyBtw6l0b2RvIHdyaXRlVmFsdWUgZSBwcmVlbmNoZSBvIG1vZGVsLlxuICBwcm90ZWN0ZWQgc2VsZWN0TW9kZWwob3B0aW9uczogQXJyYXk8YW55Pikge1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBbLi4ub3B0aW9uc107XG5cbiAgICAgIGNvbnN0IG5ld01vZGVsID0gdGhpcy5tdWx0aXBsZSA/IG9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb25bdGhpcy5maWVsZFZhbHVlXSkgOiBvcHRpb25zWzBdO1xuICAgICAgdGhpcy5zZWxlY3RWYWx1ZShuZXdNb2RlbCk7XG5cbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0aGlzLm9sZFZhbHVlID0gb3B0aW9uc1swXVt0aGlzLmZpZWxkTGFiZWxdO1xuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmdldEZvcm1hdHRlZExhYmVsKG9wdGlvbnNbMF0pLCBvcHRpb25zWzBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5jbGVhblZpZXdWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU1vZGVsKG1vZGVsOiBhbnkpIHtcbiAgICBpZiAodGhpcy52YWxpZGF0b3JDaGFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlKG1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFNlcnZpY2Uoc2VydmljZTogUG9Mb29rdXBGaWx0ZXIgfCBzdHJpbmcpIHtcbiAgICBpZiAoaXNUeXBlb2Yoc2VydmljZSwgJ29iamVjdCcpKSB7XG4gICAgICB0aGlzLnNlcnZpY2UgPSA8UG9Mb29rdXBGaWx0ZXJTZXJ2aWNlPnNlcnZpY2U7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2UgJiYgaXNUeXBlb2Yoc2VydmljZSwgJ3N0cmluZycpKSB7XG4gICAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLmRlZmF1bHRTZXJ2aWNlO1xuICAgICAgdGhpcy5zZXJ2aWNlLnNldENvbmZpZyhzZXJ2aWNlLCB0aGlzLmZpZWxkVmFsdWUsIHRoaXMubXVsdGlwbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29udHJvbCgpIHtcbiAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCwgSW5qZWN0RmxhZ3MuU2VsZik7XG5cbiAgICBpZiAobmdDb250cm9sKSB7XG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29sdW1uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpZWxkTGFiZWwpIHtcbiAgICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gW3RoaXMuZmllbGRMYWJlbF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gW107XG5cbiAgICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gdGhpcy5jb2x1bW5zLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQuZmllbGRMYWJlbCkubWFwKGVsZW1lbnQgPT4gZWxlbWVudC5wcm9wZXJ0eSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXRyaWJ1aSB1bSBvdSBtYWlzIHZhbG9yZXMgYW8gY2FtcG8uXG4gIGFic3RyYWN0IHNldFZpZXdWYWx1ZSh2YWx1ZTogYW55LCBvYmplY3Q6IGFueSk6IHZvaWQ7XG5cbiAgLy8gTcOpdG9kbyBjb20gYSBpbXBsZW1lbnRhw6fDo28gcGFyYSBhYnJpciBvIGxvb2t1cC5cbiAgYWJzdHJhY3Qgb3Blbkxvb2t1cCgpOiB2b2lkO1xuXG4gIGFic3RyYWN0IHNldERpc2NsYWltZXJzKGEpO1xuICBhYnN0cmFjdCB1cGRhdGVWaXNpYmxlSXRlbXMoKTtcbn1cbiJdfQ==
529
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbG9va3VwLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWxvb2t1cC9wby1sb29rdXAtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixXQUFXLEVBQ1gsUUFBUSxFQUNSLEtBQUssRUFJTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUE2RCxTQUFTLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPL0M7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsTUFBTSxPQUFnQixxQkFBcUI7SUFtYXpDLFlBQW9CLGNBQXFDLEVBQTRCLFFBQWtCO1FBQW5GLG1CQUFjLEdBQWQsY0FBYyxDQUF1QjtRQUE0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBamF2Rzs7Ozs7Ozs7OztXQVVHO1FBQ29DLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFpTGxFOzs7Ozs7OztXQVFHO1FBQ3lDLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBRTVFLGlEQUFpRDtRQUNmLFVBQUssR0FBWSxLQUFLLENBQUM7UUFFekQ7Ozs7Ozs7Ozs7V0FVRztRQUNrQyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRS9EOzs7Ozs7Ozs7V0FTRztRQUNxQyxlQUFVLEdBQVksS0FBSyxDQUFDO1FBRXBFOzs7V0FHRztR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aXR0ZXIsXG4gIEluamVjdCxcbiAgSW5qZWN0RmxhZ3MsXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVW50eXBlZEZvcm1Db250cm9sLCBOZ0NvbnRyb2wsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJy4uLy4uLy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiwgaXNUeXBlb2YgfSBmcm9tICcuLi8uLi8uLi91dGlscy91dGlsJztcbmltcG9ydCB7IHJlcXVpcmVkRmFpbGVkIH0gZnJvbSAnLi4vdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBQb0xvb2t1cEFkdmFuY2VkRmlsdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWxvb2t1cC1hZHZhbmNlZC1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTG9va3VwQ29sdW1uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWxvb2t1cC1jb2x1bW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTG9va3VwRmlsdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWxvb2t1cC1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvTG9va3VwTGl0ZXJhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tbG9va3VwLWxpdGVyYWxzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0xvb2t1cEZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BvLWxvb2t1cC1maWx0ZXIuc2VydmljZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogQ29tcG9uZW50ZSB1dGlsaXphZG8gcGFyYSBhYnJpciB1bWEgamFuZWxhIGRlIGJ1c2NhIGNvbSB1bWEgdGFiZWxhIHF1ZSBsaXN0YSBkYWRvcyBkZSB1bSBzZXJ2acOnby4gTmVzdGEgamFuZWxhIMOpIHBvc3PDrXZlbCBidXNjYXIgZVxuICogc2VsZWNpb25hciB1bSBvdSBtYWlzIHJlZ2lzdHJvcyBxdWUgc2Vyw6NvIGVudmlhZG9zIHBhcmEgbyBjYW1wby4gTyBgcG8tbG9va3VwYCBwZXJtaXRlIHF1ZSBvIHVzdcOhcmlvIGRpZ2l0ZSB1bSB2YWxvciBlIHByZXNzaW9uZSBhIHRlY2xhICpUQUIqIHBhcmFcbiAqIGJ1c2NhciB1bSByZWdpc3Ryby5cbiAqXG4gKiA+IENhc28gbyBjYW1wbyBzZWphIGluaWNpYWRvIG91IHByZWVuY2hpZG8gY29tIHVtIHZhbG9yIGluZXhpc3RlbnRlIG5hIGJ1c2NhLCBvIG1lc21vIHNlcsOhIGxpbXBhZG8uXG4gKiBObyBzZWd1bmRvIGNhc28gb2NvcnJlcsOhIGFww7NzIGVzdGUgcGVyZGVyIG8gZm9jbzsgYW1ib3Mgb3MgY2Fzb3MgbyBjYW1wbyBmaWNhcsOhIGludsOhbGlkbyBxdWFuZG8gcmVxdWVyaWRvLlxuICpcbiAqID4gRW5xdWFudG8gbyBjb21wb25lbnRlIHJlYWxpemEgYSByZXF1aXNpw6fDo28gYW8gc2Vydmlkb3IsIG8gY29tcG9uZW50ZSBmaWNhcsOhIGRlc2FiaWxpdGFkbyBlIGNvbSBvIHN0YXR1cyBpbnRlcm5vIGRvXG4gKiBbbW9kZWxvXShodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvZm9ybS12YWxpZGF0aW9uI2NyZWF0aW5nLWFzeW5jaHJvbm91cy12YWxpZGF0b3JzKSBjb21vIGBwZW5kaW5nYC5cbiAqXG4gKiBFc3RlIGNvbXBvbmVudGUgbsOjbyDDqSByZWNvbWVuZGFkbyBxdWFuZG8gYSBidXNjYSBkb3MgZGFkb3MgcG9zc3VpciBwb3VjYXMgaW5mb3JtYcOnw7VlcywgcGFyYSBpc3NvIHV0aWxpemUgb3V0cm9zIGNvbXBvbmVudGVzIGNvbW8gb1xuICogYHBvLXNlbGVjdGAgb3UgbyBgcG8tY29tYm9gLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQb0xvb2t1cEJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25EZXN0cm95LCBPbkluaXQsIFZhbGlkYXRvciwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQXBsaWNhIGZvY28gbm8gZWxlbWVudG8gYW8gc2VyIGluaWNpYWRvLlxuICAgKlxuICAgKiA+IENhc28gbWFpcyBkZSB1bSBlbGVtZW50byBzZWphIGNvbmZpZ3VyYWRvIGNvbSBlc3NhIHByb3ByaWVkYWRlLCBhcGVuYXMgbyDDumx0aW1vIGVsZW1lbnRvIGRlY2xhcmFkbyBjb20gZWxhIHRlcsOhIG8gZm9jby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWF1dG8tZm9jdXMnKSBASW5wdXRCb29sZWFuKCkgYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIExhYmVsIGRvIGNhbXBvLlxuICAgKlxuICAgKiA+IFF1YW5kbyB1dGlsaXphciBlc3RhIHByb3ByaWVkYWRlIG8gc2V1IHZhbG9yIHNlcsOhIHV0aWxpemFkbyBjb21vIHTDrXR1bG8gZGEgbW9kYWwgZG8gY29tcG9uZW50ZSBjYXNvIG7Do28gdGVuaGFcbiAgICogc2lkbyBkZWZpbmlkbyB1bSBgbW9kYWxUaXRsZWAgbmEgcHJvcHJpZWRhZGUgYHAtbGl0ZXJhbHNgLlxuICAgKi9cbiAgQElucHV0KCdwLWxhYmVsJykgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBPYmpldG8gY29tIGFzIGxpdGVyYWlzIHVzYWRhcyBubyBgcG8tbG9va3VwYC5cbiAgICpcbiAgICogRXhpc3RlbSBkdWFzIG1hbmVpcmFzIGRlIGN1c3RvbWl6YXIgbyBjb21wb25lbnRlLCBwYXNzYW5kbyB1bSBvYmpldG8gY29tIHRvZGFzIGFzIGxpdGVyYWlzIGRpc3BvbsOtdmVpczpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9Mb29rdXBMaXRlcmFscyA9IHtcbiAgICogICAgbW9kYWxQcmltYXJ5QWN0aW9uTGFiZWw6ICdTZWxlY3QnLFxuICAgKiAgICBtb2RhbFNlY29uZGFyeUFjdGlvbkxhYmVsOiAnQ2FuY2VsJyxcbiAgICogICAgbW9kYWxQbGFjZWhvbGRlcjogJ1NlYXJjaCBWYWx1ZScsXG4gICAqICAgIG1vZGFsVGFibGVOb0NvbHVtbnM6ICdObyBjb2x1bW5zJyxcbiAgICogICAgbW9kYWxUYWJsZU5vRGF0YTogJ05vIGRhdGEnLFxuICAgKiAgICBtb2RhbFRhYmxlTG9hZGluZ0RhdGE6ICdMb2FkaW5nIGRhdGEnLFxuICAgKiAgICBtb2RhbFRhYmxlTG9hZE1vcmVEYXRhOiAnTG9hZCBtb3JlJyxcbiAgICogICAgbW9kYWxUaXRsZTogJ1NlbGVjdCBhIHVzZXInLFxuICAgKiAgICBtb2RhbEFkdmFuY2VkU2VhcmNoOiAnQWR2YW5jZWQgc2VhcmNoJyxcbiAgICogICAgbW9kYWxBZHZhbmNlZFNlYXJjaFRpdGxlOiAnQWR2YW5jZWQgc2VhcmNoJyxcbiAgICogICAgbW9kYWxBZHZhbmNlZFNlYXJjaFByaW1hcnlBY3Rpb25MYWJlbDogJ0ZpbHRlcicsXG4gICAqICAgIG1vZGFsQWR2YW5jZWRTZWFyY2hTZWNvbmRhcnlBY3Rpb25MYWJlbDogJ1JldHVybicsXG4gICAqICAgIG1vZGFsRGlzY2xhaW1lckdyb3VwVGl0bGU6ICdQcmVzZW50aW5nIHJlc3VsdHMgZmlsdGVyZWQgYnk6J1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIE91IHBhc3NhbmRvIGFwZW5hcyBhcyBsaXRlcmFpcyBxdWUgZGVzZWphIGN1c3RvbWl6YXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvTG9va3VwTGl0ZXJhbHMgPSB7XG4gICAqICAgIG1vZGFsUHJpbWFyeUFjdGlvbkxhYmVsOiAnU2VsZWN0J1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIEUgcGFyYSBjYXJyZWdhciBhcyBsaXRlcmFpcyBjdXN0b21pemFkYXMsIGJhc3RhIGFwZW5hcyBwYXNzYXIgbyBvYmpldG8gcGFyYSBvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tbG9va3VwXG4gICAqICAgW3AtbGl0ZXJhbHNdPVwiY3VzdG9tTGl0ZXJhbHNcIj5cbiAgICogPC9wby1sb29rdXA+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIGxpdGVyYWxzPzogUG9Mb29rdXBMaXRlcmFscztcblxuICAvKiogVGV4dG8gZGUgYXBvaW8gZG8gY2FtcG8uICovXG4gIEBJbnB1dCgncC1oZWxwJykgaGVscD86IHN0cmluZztcblxuICAvKiogTWVuc2FnZW0gcXVlIGFwYXJlY2Vyw6EgZW5xdWFudG8gbyBjYW1wbyBuw6NvIGVzdGl2ZXIgcHJlZW5jaGlkby4gKi9cbiAgQElucHV0KCdwLXBsYWNlaG9sZGVyJykgc2V0IHBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHZhbHVlIHx8ICcnO1xuICB9XG5cbiAgZ2V0IHBsYWNlaG9sZGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIC8qKiBOb21lIGUgSWQgZG8gY29tcG9uZW50ZS4gKi9cbiAgQElucHV0KCduYW1lJykgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogSW5kaWNhIGEgY29sdW5hIHF1ZSBzZXLDoSB1dGlsaXphZGEgY29tbyB2YWxvciBkbyBjYW1wby5cbiAgICpcbiAgICogPiBBdGVuw6fDo286IENhc28gbsOjbyBzZWphIHBhc3NhZGEgb3UgdGVuaGEgbyBjb250ZcO6ZG8gaW5jb3JyZXRvLCBuw6NvIGlyw6EgYXR1YWxpemFyIG8gbW9kZWwgZG8gZm9ybXVsw6FyaW8uXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtdmFsdWUnKSBmaWVsZFZhbHVlOiBzdHJpbmc7XG5cbiAgLyoqIEluZGljYSBhIGNvbHVuYSBxdWUgc2Vyw6EgdXRpbGl6YWRhIGNvbW8gZGVzY3Jpw6fDo28gZG8gY2FtcG8gZSBjb21vIGZpbHRybyBkZW50cm8gZGEgamFuZWxhLiAqL1xuICBASW5wdXQoJ3AtZmllbGQtbGFiZWwnKSBzZXQgZmllbGRMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZmllbGRMYWJlbCA9IHZhbHVlO1xuICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gW3RoaXMuZmllbGRMYWJlbF07XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKiBWYWxvciBxdWUgc2Vyw6EgcmVwYXNzYWRvIGNvbW8gcGFyw6JtZXRybyBwYXJhIGEgVVJMIG91IGFvcyBtw6l0b2RvcyBkbyBzZXJ2acOnbyBxdWUgaW1wbGVtZW50YW0gYSBpbnRlcmZhY2UgYFBvTG9va3VwRmlsdGVyYC4gKi9cbiAgQElucHV0KCdwLWZpbHRlci1wYXJhbXMnKSBmaWx0ZXJQYXJhbXM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRm9ybWF0byBkZSBleGliacOnw6NvIGRvIGNhbXBvLlxuICAgKlxuICAgKiBSZWNlYmUgdW1hIGZ1bsOnw6NvIHF1ZSBkZXZlIHJldG9ybmFyIHVtYSAqc3RyaW5nKiBjb20gby9vcyB2YWxvcmVzIGRvIG9iamV0byBmb3JtYXRhZG9zIHBhcmEgZXhpYmnDp8OjbywgcG9yIGV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiBmaWVsZEZvcm1hdChvYmopIHtcbiAgICogICByZXR1cm4gYCR7b2JqLmlkfSAtICR7b2JqLm5hbWV9YDtcbiAgICogfVxuICAgKiBgYGBcbiAgICogPiBFc3RhIHByb3ByaWVkYWRlIHNvYnJlcMO1ZSBvIHZhbG9yIGRhIHByb3ByaWVkYWRlIGBwLWZpZWxkLWxhYmVsYCBuYSBkZXNjcmnDp8OjbyBkbyBjYW1wby5cbiAgICpcbiAgICogUG9kZS1zZSBpbmZvcm1hciB1bWEgbGlzdGEgZGUgcHJvcHJpZWRhZGVzIHF1ZSBkZXNlamEgZXhpYmlyIGNvbW8gZGVzY3Jpw6fDo28gZG8gY2FtcG8sIFBvciBleGVtcGxvOlxuICAgKiBgYGBcbiAgICogPHBvLWxvb2t1cFxuICAgKiAgLi4uXG4gICAqICBbcC1maWVsZC1mb3JtYXRdPVwiWydpZCcsJ25pY2tuYW1lJ11cIlxuICAgKiAgLi4uXG4gICAqID5cbiAgICpcbiAgICogT2JqZXRvIHJldG9ybmFkbzpcbiAgICogICB7XG4gICAqICAgICAgaWQ6MTIzLFxuICAgKiAgICAgIG5hbWU6ICdLYWthcm90bycsXG4gICAqICAgICAgbmlja25hbWU6ICdHb2t1JyxcbiAgICogICB9XG4gICAqIEFwcmVzZW50YcOnw6NvIG5vIGNhbXBvOiAxMjMgLSBHb2t1XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IFNlcsOhIHV0aWxpemFkbyBgIC0gYCBjb21vIHNlcGFyYWRvci5cbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC1mb3JtYXQnKSBmaWVsZEZvcm1hdD86ICgodmFsdWUpID0+IHN0cmluZykgfCBBcnJheTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBMaXN0YSBkYXMgY29sdW5hcyBkYSB0YWJlbGEuXG4gICAqIEVzc2EgcHJvcHJpZWRhZGUgZGV2ZSByZWNlYmVyIHVtIGFycmF5IGRlIG9iamV0b3MgcXVlIGltcGxlbWVudGFtIGEgaW50ZXJmYWNlIFBvTG9va3VwQ29sdW1uLlxuICAgKi9cbiAgQElucHV0KCdwLWNvbHVtbnMnKSBjb2x1bW5zPzogQXJyYXk8UG9Mb29rdXBDb2x1bW4+O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9wY2lvbmFsIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTyBjYW1wbyBjb250ZXIgYHAtcmVxdWlyZWRgO1xuICAgKiAtIE7Do28gcG9zc3VpciBgcC1oZWxwYCBlL291IGBwLWxhYmVsYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbmFsJykgb3B0aW9uYWw6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogTGlzdGEgZGUgb2JqZXRvcyBkb3MgY2FtcG9zIHF1ZSBzZXLDo28gY3JpYWRvcyBuYSBidXNjYSBhdmFuw6dhZGEuXG4gICAqXG4gICAqID4gQ2FzbyBuw6NvIHNlamEgcGFzc2FkbyB1bSBvYmpldG8gb3UgZW50w6NvIGVsZSBlc3RlamEgZW0gYnJhbmNvIG8gbGluayBkZSBidXNjYSBhdmFuw6dhZGEgZmljYXLDoSBlc2NvbmRpZG8uXG4gICAqXG4gICAqIEV4ZW1wbG8gZGUgVVJMIGNvbSBidXNjYSBhdmFuw6dhZGE6XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJm5hbWU9VG9ueSUyMFN0YXJrJm5pY2tuYW1lPUhvbWVtJTIwZGUlMjBGZXJyb1xuICAgKiBgYGBcbiAgICpcbiAgICogQ2FzbyBhbGd1bSBwYXLDom1ldHJvIHNlamEgdW1hIGxpc3RhLCBhIGNvbmNhdGVuYcOnw6NvIMOpIGZlaXRhIHV0aWxpemFuZG8gdsOtcmd1bGEuXG4gICAqIEV4ZW1wbG86XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJm5hbWU9VG9ueSUyMFN0YXJrLFBldGVyJTIwUGFya2VyLEdvaGFuXG4gICAqIGBgYFxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWFkdmFuY2VkLWZpbHRlcnMnKSBhZHZhbmNlZEZpbHRlcnM6IEFycmF5PFBvTG9va3VwQWR2YW5jZWRGaWx0ZXI+O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEF0aXZhIGEgZnVuY2lvbmFsaWRhZGUgZGUgc2Nyb2xsIGluZmluaXRvIHBhcmEgYSB0YWJlbGEgZXhpYmlkYSBubyByZXRvcm5vIGRhIGNvbnN1bHRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaW5maW5pdGUtc2Nyb2xsJykgQElucHV0Qm9vbGVhbigpIGluZmluaXRlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEV4aWJlIHVtIMOtY29uZSBxdWUgcGVybWl0ZSBsaW1wYXIgbyBjYW1wby4gKi9cbiAgQElucHV0KCdwLWNsZWFuJykgQElucHV0Qm9vbGVhbigpIGNsZWFuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogUGVybWl0ZSBhIHNlbGXDp8OjbyBkZSBtw7psdGlwbG9zIGl0ZW5zLlxuICAgKlxuICAgKiA+IFF1YW5kbyBoYWJpbGl0YWRvIG8gdmFsb3IgZG8gY2FtcG8gcGFzc2Fyw6EgYSBzZXIgdW1hIGxpc3RhIGRlIHZhbG9yZXMsIHBvciBleGVtcGxvOiBgWyAxMjM0NSwgNjc4OTAgXWBcbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW11bHRpcGxlJykgQElucHV0Qm9vbGVhbigpIG11bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBhIGFsdHVyYSBkbyBjb21wb25lbnRlIHNlcsOhIGF1dG8gYWp1c3TDoXZlbCwgcG9zc3VpbmRvIHVtYSBhbHR1cmEgbWluaW1hIHBvcsOpbSBhIGFsdHVyYSBtw6F4aW1hIHNlcsOhIGRlIGFjb3Jkb1xuICAgKiBjb20gbyBuw7ptZXJvIGRlIGl0ZW5zIHNlbGVjaW9uYWRvcyBlIGEgZXh0ZW5zw6NvIGRvcyBtZXNtb3MsIG1hbnRlbmRvLW9zIHNlbXByZSB2aXPDrXZlaXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1hdXRvLWhlaWdodCcpIEBJbnB1dEJvb2xlYW4oKSBhdXRvSGVpZ2h0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEV2ZW50byBzZXLDoSBkaXNwYXJhZG8gcXVhbmRvIG9jb3JyZXIgYWxndW0gZXJybyBuYSByZXF1aXNpw6fDo28gZGUgYnVzY2EgZG8gaXRlbS5cbiAgICogU2Vyw6EgcGFzc2FkbyBwb3IgcGFyw6JtZXRybyBvIG9iamV0byBkZSBlcnJvIHJldG9ybmFkby5cbiAgICovXG4gIEBPdXRwdXQoJ3AtZXJyb3InKSBvbkVycm9yOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEV2ZW50byBzZXLDoSBkaXNwYXJhZG8gcXVhbmRvIG9jb3JyZXIgYWxndW1hIHNlbGXDp8Ojby5cbiAgICogU2Vyw6EgcGFzc2FkbyBwb3IgcGFyw6JtZXRybyBvIG9iamV0byBjb20gbyB2YWxvciBzZWxlY2lvbmFkby5cbiAgICovXG4gIEBPdXRwdXQoJ3Atc2VsZWN0ZWQnKSBzZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiAgRXZlbnRvIHF1ZSBzZXLDoSBkaXNwYXJhZG8gYW8gYWx0ZXJhciBvIG1vZGVsLlxuICAgKiAgUG9yIHBhcsOibWV0cm8gc2Vyw6EgcGFzc2FkbyBvIG5vdm8gdmFsb3IuXG4gICAqL1xuICBAT3V0cHV0KCdwLWNoYW5nZScpIGNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFdmVudG8gZGlzcGFyYWRvIGFvIGZlY2hhciBvIHBvcG92ZXIgZG8gZ2VyZW5jaWFkb3IgZGUgY29sdW5hcyBhcMOzcyBhbHRlcmFyIGFzIGNvbHVuYXMgdmlzw612ZWlzLlxuICAgKlxuICAgKiBPIGNvbXBvbmVudGUgZW52aWEgY29tbyBwYXLDom1ldHJvIHVtIGFycmF5IGRlIHN0cmluZyBjb20gYXMgY29sdW5hcyB2aXPDrXZlaXMgYXR1YWxpemFkYXMuXG4gICAqIFBvciBleGVtcGxvOiBbXCJpZENhcmRcIiwgXCJuYW1lXCIsIFwiaGlyZVN0YXR1c1wiLCBcImFnZVwiXS5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY2hhbmdlLXZpc2libGUtY29sdW1ucycpIGNoYW5nZVZpc2libGVDb2x1bW5zID0gbmV3IEV2ZW50RW1pdHRlcjxBcnJheTxzdHJpbmc+PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEV2ZW50byBkaXNwYXJhZG8gYW8gY2xpY2FyIG5vIGJvdMOjbyBkZSByZXN0YXVyYXIgcGFkcsOjbyBubyBnZXJlbmNpYWRvciBkZSBjb2x1bmFzLlxuICAgKlxuICAgKiBPIGNvbXBvbmVudGUgZW52aWEgY29tbyBwYXLDom1ldHJvIHVtIGFycmF5IGRlIHN0cmluZyBjb20gYXMgY29sdW5hcyBjb25maWd1cmFkYXMgaW5pY2lhbG1lbnRlLlxuICAgKiBQb3IgZXhlbXBsbzogW1wiaWRDYXJkXCIsIFwibmFtZVwiLCBcImhpcmVTdGF0dXNcIiwgXCJhZ2VcIl0uXG4gICAqL1xuICBAT3V0cHV0KCdwLXJlc3RvcmUtY29sdW1uLW1hbmFnZXInKSBjb2x1bW5SZXN0b3JlTWFuYWdlciA9IG5ldyBFdmVudEVtaXR0ZXI8QXJyYXk8U3RyaW5nPj4oKTtcblxuICBzZXJ2aWNlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkT3B0aW9ucyA9IFtdO1xuICBwcm90ZWN0ZWQgZ2V0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBrZXlzRGVzY3JpcHRpb246IEFycmF5PGFueT47XG4gIHByb3RlY3RlZCBvbGRWYWx1ZTogc3RyaW5nID0gJyc7XG4gIHByb3RlY3RlZCB2YWx1ZVRvTW9kZWw7XG4gIHByb3RlY3RlZCBvbGRWYWx1ZVRvTW9kZWwgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgcHJvdGVjdGVkIG9uVG91Y2hlZDogYW55ID0gbnVsbDtcbiAgcHJvdGVjdGVkIHJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgX2Rpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9maWVsZExhYmVsOiBzdHJpbmc7XG4gIHByaXZhdGUgX2ZpbHRlclNlcnZpY2U6IFBvTG9va3VwRmlsdGVyIHwgc3RyaW5nO1xuICBwcml2YXRlIF9ub0F1dG9jb21wbGV0ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9yZXF1aXJlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYXV0b0hlaWdodDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgYXV0b0hlaWdodEluaXRpYWxWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBvbkNoYW5nZVByb3BhZ2F0ZTogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSB2YWxpZGF0b3JDaGFuZ2U6IGFueTtcblxuICBwcml2YXRlIGNvbnRyb2whOiBBYnN0cmFjdENvbnRyb2w7XG5cbiAgLyoqXG4gICAqIFNlcnZpw6dvIHJlc3BvbnPDoXZlbCBwb3IgYnVzY2FyIG9zIGRhZG9zIGRhIHRhYmVsYSBuYSBqYW5lbGEuIFBvZGUgc2VyIGluZm9ybWFkbyB1bSBzZXJ2acOnbyBxdWUgaW1wbGVtZW50ZSBhIGludGVyZmFjZVxuICAgKiBgUG9Mb29rdXBGaWx0ZXJgIG91IHVtYSBVUkwuXG4gICAqXG4gICAqIFF1YW5kbyB1dGlsaXphZGEgdW1hIFVSTCBkZSB1bSBzZXJ2acOnbywgc2Vyw6EgY29uY2F0ZW5hZGEgbmVzdGEgVVJMIG8gdmFsb3IgcXVlIGRlc2VqYS1zZSBmaWx0cmFyLCBwb3IgZXhlbXBsbzpcbiAgICpcbiAgICogYGBgXG4gICAqIHVybCArID9wYWdlPTEmcGFnZVNpemU9MjAmZmlsdGVyPVBldGVyXG4gICAqIGBgYFxuICAgKlxuICAgKiBDYXNvIHV0aWxpemFyIG9yZGVuYcOnw6NvLCBhIGNvbHVuYSBvcmRlbmFkYSBzZXLDoSBlbnZpYWRhIGF0cmF2w6lzIGRvIHBhcsOibWV0cm8gYG9yZGVyYCwgcG9yIGV4ZW1wbG86XG4gICAqIC0gQ29sdW5hIGRlY3Jlc2NlbnRlOlxuICAgKiBgYGBcbiAgICogIHVybCArID9wYWdlPTEmcGFnZVNpemU9MjAmZmlsdGVyPVBldGVyJm9yZGVyPS1uYW1lXG4gICAqIGBgYFxuICAgKlxuICAgKiAtIENvbHVuYSBhc2NlbmRlbnRlOlxuICAgKiBgYGBcbiAgICogIHVybCArID9wYWdlPTEmcGFnZVNpemU9MjAmZmlsdGVyPVBldGVyJm9yZGVyPW5hbWVcbiAgICogYGBgXG4gICAqXG4gICAqIFNlIGZvciBkZWZpbmlkbyBhIHByb3ByaWVkYWRlIGBwLWZpbHRlci1wYXJhbXNgLCBvIG1lc21vIHRhbWLDqW0gc2Vyw6EgY29uY2F0ZW5hZG8uIFBvciBleGVtcGxvLCBwYXJhIG9cbiAgICogcGFyw6JtZXRybyBgeyBhZ2U6IDIzIH1gIGEgVVJMIGZpY2FyaWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJmFnZT0yMyZmaWx0ZXI9UGV0ZXJcbiAgICogYGBgXG4gICAqXG4gICAqIEFvIGluaWNpYXIgbyBjYW1wbyBjb20gdmFsb3IsIG9zIHJlZ2lzdHJvcyBzZXLDo28gYnVzY2Fkb3MgZGEgc2VndWludGUgZm9ybWE6XG4gICAqIGBgYFxuICAgKiBtb2RlbCA9IDEyMzQ7XG4gICAqXG4gICAqIEdFVCB1cmwvMTIzNFxuICAgKiBgYGBcbiAgICpcbiAgICogQ2FzbyBlc3RpdmVyIGNvbSBtw7psdGlwbGEgc2VsZcOnw6NvIGhhYmlsaXRhZGE6XG4gICAqIGBgYFxuICAgKiBtb2RlbCA9IFsxMjM0LCA1Njc4XVxuICAgKlxuICAgKiBHRVQgdXJsPyR7ZmllbGRWYWx1ZX09MTIzNCw1Njc4XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IEVzdGEgVVJMIGRldmUgcmV0b3JuYXIgZSByZWNlYmVyIG9zIGRhZG9zIG5vIHBhZHLDo28gZGUgW0FQSSBkbyBQTyBVSV0oaHR0cHM6Ly9wby11aS5pby9ndWlkZXMvYXBpKSBlIHV0aWxpemEgb3MgdmFsb3Jlc1xuICAgKiBkZWZpbmlkb3MgbmFzIHByb3ByaWVkYWRlcyBgcC1maWVsZC1sYWJlbGAgZSBgcC1maWVsZC12YWx1ZWAgcGFyYSBhIGNvbnN0cnXDp8OjbyBkbyBgcG8tbG9va3VwYC5cbiAgICpcbiAgICogQ2FzbyBvIHVzdcOhcmlvIGRpZ2l0ZSB1bSB2YWxvciBlIHByZXNzaW9uZSBhIHRlY2xhICpUQUIqIHBhcmEgcmVhbGl6YXIgYSBidXNjYSBkZSB1bSByZWdpc3RybyBlc3BlY8OtZmljbywgbyB2YWxvciBxdWUgc2VcbiAgICogZGVzZWphIGZpbHRyYXIgc2Vyw6EgY29kaWZpY2FkbyB1dGlsaXphbmRvIGEgZnVuw6fDo28gW2VuY29kZVVSSUNvbXBvbmVudF0oaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lbmNvZGV1cmljb21wb25lbnQtdXJpY29tcG9uZW50KVxuICAgKiBlIGNvbmNhdGVuYWRvIG5hIFVSTCBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICpcbiAgICogYGBgXG4gICAqIHVybC92YWxvciUyMHF1ZSUyMHNlJTIwZGVzZWphJTIwZmlsdHJhclxuICAgKiBgYGBcbiAgICpcbiAgICogPiBRdWFuZG8gaW5mb3JtYWRvIHVtIHNlcnZpw6dvIHF1ZSBpbXBsZW1lbnRlIGEgaW50ZXJmYWNlIGBQb0xvb2t1cEZpbHRlcmAgbyB0cmF0YW1lbnRvIGRlIGVuY29kaW5nIGRvIHZhbG9yIGEgc2VyIGZpbHRyYWRvIGZpY2Fyw6EgYSBjYXJnbyBkbyBkZXNlbnZvbHZlZG9yLlxuICAgKlxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1zZXJ2aWNlJykgc2V0IGZpbHRlclNlcnZpY2UoZmlsdGVyU2VydmljZTogUG9Mb29rdXBGaWx0ZXIgfCBzdHJpbmcpIHtcbiAgICB0aGlzLl9maWx0ZXJTZXJ2aWNlID0gZmlsdGVyU2VydmljZTtcbiAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5maWx0ZXJTZXJ2aWNlKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJTZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIGEgcHJvcHJpZWRhZGUgbmF0aXZhIGBhdXRvY29tcGxldGVgIGRvIGNhbXBvIGNvbW8gYG9mZmAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1uby1hdXRvY29tcGxldGUnKSBzZXQgbm9BdXRvY29tcGxldGUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9ub0F1dG9jb21wbGV0ZSA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xuICB9XG5cbiAgZ2V0IG5vQXV0b2NvbXBsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9ub0F1dG9jb21wbGV0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEluZGljYSBxdWUgbyBjYW1wbyBzZXLDoSBvYnJpZ2F0w7NyaW8uIEVzdGEgcHJvcHJpZWRhZGUgw6kgZGVzY29uc2lkZXJhZGEgcXVhbmRvIG8gY2FtcG8gZXN0w6EgZGVzYWJpbGl0YWRvIChwLWRpc2FibGVkKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlcXVpcmVkJykgc2V0IHJlcXVpcmVkKHJlcXVpcmVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHJlcXVpcmVkKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLnZhbHVlVG9Nb2RlbCk7XG4gIH1cblxuICBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbmRpY2EgcXVlIG8gY2FtcG8gc2Vyw6EgZGVzYWJpbGl0YWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKiBAb3B0aW9uYWxcbiAgICovXG4gIEBJbnB1dCgncC1kaXNhYmxlZCcpIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gPGFueT5kaXNhYmxlZCA9PT0gJycgPyB0cnVlIDogY29udmVydFRvQm9vbGVhbihkaXNhYmxlZCk7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkZWZhdWx0U2VydmljZTogUG9Mb29rdXBGaWx0ZXJTZXJ2aWNlLCBASW5qZWN0KEluamVjdG9yKSBwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5nZXRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1uKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRDb250cm9sKCk7XG4gIH1cblxuICBjbGVhbk1vZGVsKCkge1xuICAgIHRoaXMuY2xlYW5WaWV3VmFsdWUoKTtcbiAgICB0aGlzLmNhbGxPbkNoYW5nZSh1bmRlZmluZWQpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzLm11bHRpcGxlICYmIGlzVHlwZW9mKHRoaXMuZmlsdGVyU2VydmljZSwgJ3N0cmluZycpKSB7XG4gICAgICB0aGlzLnNlcnZpY2Uuc2V0Q29uZmlnKHRoaXMuZmlsdGVyU2VydmljZSwgdGhpcy5maWVsZFZhbHVlLCB0aGlzLm11bHRpcGxlKTtcbiAgICB9XG4gIH1cblxuICAvLyBGdW7Dp8OjbyBpbXBsZW1lbnRhZGEgZG8gQ29udHJvbFZhbHVlQWNjZXNzb3JcbiAgLy8gVXNhZGEgcGFyYSBpbnRlcmNlcHRhciBvcyBlc3RhZG9zIGRlIGhhYmlsaXRhZG8gdmlhIGZvcm1zIGFwaVxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIGFzIG11ZGFuw6dhcyBlIG7Do28gYXR1YWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIE1vZGVsLlxuICByZWdpc3Rlck9uQ2hhbmdlKGZ1bmM6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VQcm9wYWdhdGUgPSBmdW5jO1xuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIGFzIG11ZGFuw6dhcyBlIG7Do28gYXR1YWxpemFyIGF1dG9tYXRpY2FtZW50ZSBvIE1vZGVsLlxuICByZWdpc3Rlck9uVG91Y2hlZChmdW5jOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZ1bmM7XG4gIH1cblxuICAvLyBTZWxlY2lvbmEgbyB2YWxvciBkbyBtb2RlbC5cbiAgc2VsZWN0VmFsdWUodmFsdWVTZWxlY3RlZDogYW55KSB7XG4gICAgdGhpcy52YWx1ZVRvTW9kZWwgPSB2YWx1ZVNlbGVjdGVkO1xuICAgIHRoaXMubXVsdGlwbGVcbiAgICAgID8gdGhpcy5jYWxsT25DaGFuZ2UodGhpcy52YWx1ZVRvTW9kZWwpXG4gICAgICA6IHRoaXMudmFsdWVUb01vZGVsXG4gICAgICA/IHRoaXMuY2FsbE9uQ2hhbmdlKHRoaXMudmFsdWVUb01vZGVsW3RoaXMuZmllbGRWYWx1ZV0pXG4gICAgICA6IHRoaXMuY2FsbE9uQ2hhbmdlKHVuZGVmaW5lZCk7XG4gICAgdGhpcy5zZWxlY3RlZC5lbWl0KHZhbHVlU2VsZWN0ZWQpO1xuICB9XG5cbiAgY2FsbE9uQ2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAvLyBRdWFuZG8gbyBpbnB1dCBuw6NvIHBvc3N1aSB1bSBmb3JtdWzDoXJpbywgZW50w6NvIGVzdGEgZnVuw6fDo28gbsOjbyDDqSByZWdpc3RyYWRhLlxuICAgIGlmICh0aGlzLm9uQ2hhbmdlUHJvcGFnYXRlKSB7XG4gICAgICB0aGlzLm9uQ2hhbmdlUHJvcGFnYXRlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vbGRWYWx1ZVRvTW9kZWwgIT09IHRoaXMudmFsdWVUb01vZGVsKSB7XG4gICAgICB0aGlzLmNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBBcm1hemVuYXIgbyB2YWxvciBhbnRpZ28gZG8gbW9kZWxcbiAgICB0aGlzLm9sZFZhbHVlVG9Nb2RlbCA9IHRoaXMudmFsdWVUb01vZGVsO1xuICB9XG5cbiAgc2VhcmNoQnlJZCh2YWx1ZSkge1xuICAgIGxldCBjaGVja2VkVmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmICh0eXBlb2YgY2hlY2tlZFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY2hlY2tlZFZhbHVlID0gY2hlY2tlZFZhbHVlLnRyaW0oKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tlZFZhbHVlICE9PSAnJykge1xuICAgICAgY29uc3Qgb2xkRGlzYWJsZSA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICAvLyA6VE9ETzogUmV0aXJhciBubyBmdXR1cm8gcG9pcyBlc3NlIHNldFRpbWVvdXQgZm9pIGZlaXRvXG4gICAgICAgIC8vIHBvaXMgcXVhbmRvIG8gY2FtcG8gw6kgYWNpb25hZG8gcGVsb3MgbcOpdG9kb3Mgc2V0VmFsdWUgb3UgcGF0Y2hWYWx1ZVxuICAgICAgICAvLyBhIG11ZGFuw6dhIG7Do28gw6kgZGV0ZWN0YWRhXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb250cm9sLm1hcmtBc1BlbmRpbmcoKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlXG4gICAgICAgIC5nZXRPYmplY3RCeVZhbHVlKHZhbHVlLCB0aGlzLmZpbHRlclBhcmFtcylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IG9sZERpc2FibGU7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudD8ubGVuZ3RoIHx8ICghQXJyYXkuaXNBcnJheShlbGVtZW50KSAmJiBlbGVtZW50KSkge1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSAmJiBlbGVtZW50Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERpc2NsYWltZXJzKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUl0ZW1zKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsKHRoaXMubXVsdGlwbGUgPyBlbGVtZW50IDogW2VsZW1lbnRdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYW5Nb2RlbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbGVhbk1vZGVsKCk7XG4gICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFuTW9kZWwoKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZShhYnN0cmFjdENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmIChyZXF1aXJlZEZhaWxlZCh0aGlzLnJlcXVpcmVkLCB0aGlzLmRpc2FibGVkLCBhYnN0cmFjdENvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXF1aXJlZDoge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIGlmICh2YWx1ZT8ubGVuZ3RoIHx8ICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUpKSB7XG4gICAgICAvLyBFc3RhIGNvbmRpw6fDo28gw6kgZXhlY3V0YWRhIHNvbWVudGUgcXVhbmRvIMOpIHBhc3NhZG8gbyBJRCBwYXJhIHJlYWxpemFyIGEgYnVzY2EgcGVsbyBJRC5cbiAgICAgIHRoaXMuc2VhcmNoQnlJZCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYW5WaWV3VmFsdWUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYW5WaWV3VmFsdWUoKSB7XG4gICAgdGhpcy5zZXREaXNjbGFpbWVycyhbXSk7XG4gICAgdGhpcy5zZXRWaWV3VmFsdWUoJycsIHt9KTtcbiAgICB0aGlzLm9sZFZhbHVlID0gJyc7XG4gICAgdGhpcy52YWx1ZVRvTW9kZWwgPSBudWxsO1xuICB9XG5cbiAgLy8gRm9ybWF0YSBhIGxhYmVsIGRvIGNhbXBvLlxuICBwcm90ZWN0ZWQgZ2V0Rm9ybWF0dGVkTGFiZWwodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlID8gdGhpcy5rZXlzRGVzY3JpcHRpb24ubWFwKGNvbHVtbiA9PiB2YWx1ZVtjb2x1bW5dKS5qb2luKCcgLSAnKSA6ICcnO1xuICB9XG5cbiAgLy8gQ2hhbWEgbyBtw6l0b2RvIHdyaXRlVmFsdWUgZSBwcmVlbmNoZSBvIG1vZGVsLlxuICBwcm90ZWN0ZWQgc2VsZWN0TW9kZWwob3B0aW9uczogQXJyYXk8YW55Pikge1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSBbLi4ub3B0aW9uc107XG5cbiAgICAgIGNvbnN0IG5ld01vZGVsID0gdGhpcy5tdWx0aXBsZSA/IG9wdGlvbnMubWFwKG9wdGlvbiA9PiBvcHRpb25bdGhpcy5maWVsZFZhbHVlXSkgOiBvcHRpb25zWzBdO1xuICAgICAgdGhpcy5zZWxlY3RWYWx1ZShuZXdNb2RlbCk7XG5cbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB0aGlzLm9sZFZhbHVlID0gb3B0aW9uc1swXVt0aGlzLmZpZWxkTGFiZWxdO1xuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmdldEZvcm1hdHRlZExhYmVsKG9wdGlvbnNbMF0pLCBvcHRpb25zWzBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RWYWx1ZSh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5jbGVhblZpZXdWYWx1ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB2YWxpZGF0ZU1vZGVsKG1vZGVsOiBhbnkpIHtcbiAgICBpZiAodGhpcy52YWxpZGF0b3JDaGFuZ2UpIHtcbiAgICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlKG1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFNlcnZpY2Uoc2VydmljZTogUG9Mb29rdXBGaWx0ZXIgfCBzdHJpbmcpIHtcbiAgICBpZiAoaXNUeXBlb2Yoc2VydmljZSwgJ29iamVjdCcpKSB7XG4gICAgICB0aGlzLnNlcnZpY2UgPSA8UG9Mb29rdXBGaWx0ZXJTZXJ2aWNlPnNlcnZpY2U7XG4gICAgfVxuXG4gICAgaWYgKHNlcnZpY2UgJiYgaXNUeXBlb2Yoc2VydmljZSwgJ3N0cmluZycpKSB7XG4gICAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLmRlZmF1bHRTZXJ2aWNlO1xuICAgICAgdGhpcy5zZXJ2aWNlLnNldENvbmZpZyhzZXJ2aWNlLCB0aGlzLmZpZWxkVmFsdWUsIHRoaXMubXVsdGlwbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29udHJvbCgpIHtcbiAgICBjb25zdCBuZ0NvbnRyb2w6IE5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCwgSW5qZWN0RmxhZ3MuU2VsZik7XG5cbiAgICBpZiAobmdDb250cm9sKSB7XG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29sdW1uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpZWxkTGFiZWwpIHtcbiAgICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gW3RoaXMuZmllbGRMYWJlbF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gW107XG5cbiAgICAgIHRoaXMua2V5c0Rlc2NyaXB0aW9uID0gdGhpcy5jb2x1bW5zLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQuZmllbGRMYWJlbCkubWFwKGVsZW1lbnQgPT4gZWxlbWVudC5wcm9wZXJ0eSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQXRyaWJ1aSB1bSBvdSBtYWlzIHZhbG9yZXMgYW8gY2FtcG8uXG4gIGFic3RyYWN0IHNldFZpZXdWYWx1ZSh2YWx1ZTogYW55LCBvYmplY3Q6IGFueSk6IHZvaWQ7XG5cbiAgLy8gTcOpdG9kbyBjb20gYSBpbXBsZW1lbnRhw6fDo28gcGFyYSBhYnJpciBvIGxvb2t1cC5cbiAgYWJzdHJhY3Qgb3Blbkxvb2t1cCgpOiB2b2lkO1xuXG4gIGFic3RyYWN0IHNldERpc2NsYWltZXJzKGEpO1xuICBhYnN0cmFjdCB1cGRhdGVWaXNpYmxlSXRlbXMoKTtcbn1cbiJdfQ==