@po-ui/ng-components 14.3.1 → 14.5.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 (78) hide show
  1. package/esm2020/lib/components/po-accordion/po-accordion-item/po-accordion-item.component.mjs +30 -3
  2. package/esm2020/lib/components/po-accordion/po-accordion.component.mjs +2 -2
  3. package/esm2020/lib/components/po-accordion/services/po-accordion.service.mjs +1 -1
  4. package/esm2020/lib/components/po-button-group/po-button-group-base.component.mjs +2 -2
  5. package/esm2020/lib/components/po-button-group/po-button-group.component.mjs +3 -3
  6. package/esm2020/lib/components/po-field/po-combo/po-combo.component.mjs +6 -6
  7. package/esm2020/lib/components/po-field/po-datepicker/po-datepicker.component.mjs +5 -5
  8. package/esm2020/lib/components/po-field/po-datepicker-range/po-datepicker-range.component.mjs +7 -3
  9. package/esm2020/lib/components/po-field/po-decimal/po-decimal.component.mjs +5 -5
  10. package/esm2020/lib/components/po-field/po-email/po-email.component.mjs +9 -7
  11. package/esm2020/lib/components/po-field/po-input/po-input.component.mjs +9 -7
  12. package/esm2020/lib/components/po-field/po-login/po-login.component.mjs +12 -11
  13. package/esm2020/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.mjs +3 -3
  14. package/esm2020/lib/components/po-field/po-lookup/po-lookup.component.mjs +6 -5
  15. package/esm2020/lib/components/po-field/po-multiselect/po-multiselect-base.component.mjs +31 -20
  16. package/esm2020/lib/components/po-field/po-multiselect/po-multiselect-dropdown/po-multiselect-dropdown.component.mjs +19 -13
  17. package/esm2020/lib/components/po-field/po-multiselect/po-multiselect-filter.interface.mjs +1 -1
  18. package/esm2020/lib/components/po-field/po-multiselect/po-multiselect-filter.service.mjs +2 -2
  19. package/esm2020/lib/components/po-field/po-multiselect/po-multiselect-search/po-multiselect-search.component.mjs +7 -4
  20. package/esm2020/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +24 -17
  21. package/esm2020/lib/components/po-field/po-number/po-number.component.mjs +5 -5
  22. package/esm2020/lib/components/po-field/po-password/po-password.component.mjs +14 -13
  23. package/esm2020/lib/components/po-field/po-radio/po-radio-size.enum.mjs +10 -3
  24. package/esm2020/lib/components/po-field/po-radio/po-radio.component.mjs +98 -34
  25. package/esm2020/lib/components/po-field/po-radio-group/po-radio-group-base.component.mjs +16 -2
  26. package/esm2020/lib/components/po-field/po-radio-group/po-radio-group.component.mjs +18 -25
  27. package/esm2020/lib/components/po-field/po-select/po-select.component.mjs +38 -250
  28. package/esm2020/lib/components/po-field/po-switch/po-switch.component.mjs +38 -34
  29. package/esm2020/lib/components/po-field/po-textarea/po-textarea-base.component.mjs +11 -1
  30. package/esm2020/lib/components/po-field/po-textarea/po-textarea.component.mjs +6 -7
  31. package/esm2020/lib/components/po-field/po-url/po-url.component.mjs +9 -7
  32. package/esm2020/lib/components/po-loading/po-loading-overlay/po-loading-overlay-base.component.mjs +2 -2
  33. package/esm2020/lib/components/po-page/po-page-list/po-page-list.component.mjs +3 -3
  34. package/esm2020/lib/components/po-table/po-table-base.component.mjs +3 -3
  35. package/esm2020/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.mjs +26 -73
  36. package/esm2020/lib/components/po-table/po-table-detail/po-table-detail.component.mjs +27 -8
  37. package/esm2020/lib/components/po-table/po-table-list-manager/po-table-list-manager.component.mjs +111 -0
  38. package/esm2020/lib/components/po-table/po-table.module.mjs +4 -1
  39. package/esm2020/lib/components/po-tag/po-tag-base.component.mjs +11 -3
  40. package/esm2020/lib/components/po-tag/po-tag.component.mjs +16 -9
  41. package/esm2020/lib/components/po-tree-view/po-tree-view-base.component.mjs +6 -4
  42. package/fesm2015/po-ui-ng-components.mjs +961 -1026
  43. package/fesm2015/po-ui-ng-components.mjs.map +1 -1
  44. package/fesm2020/po-ui-ng-components.mjs +941 -1004
  45. package/fesm2020/po-ui-ng-components.mjs.map +1 -1
  46. package/lib/components/po-accordion/po-accordion-item/po-accordion-item.component.d.ts +10 -3
  47. package/lib/components/po-accordion/services/po-accordion.service.d.ts +3 -2
  48. package/lib/components/po-button-group/po-button-group-base.component.d.ts +1 -1
  49. package/lib/components/po-field/po-multiselect/po-multiselect-base.component.d.ts +26 -15
  50. package/lib/components/po-field/po-multiselect/po-multiselect-dropdown/po-multiselect-dropdown.component.d.ts +5 -3
  51. package/lib/components/po-field/po-multiselect/po-multiselect-filter.interface.d.ts +2 -2
  52. package/lib/components/po-field/po-multiselect/po-multiselect-filter.service.d.ts +2 -2
  53. package/lib/components/po-field/po-multiselect/po-multiselect-search/po-multiselect-search.component.d.ts +2 -1
  54. package/lib/components/po-field/po-multiselect/po-multiselect.component.d.ts +7 -1
  55. package/lib/components/po-field/po-radio/po-radio-size.enum.d.ts +9 -2
  56. package/lib/components/po-field/po-radio/po-radio.component.d.ts +27 -10
  57. package/lib/components/po-field/po-radio-group/po-radio-group-base.component.d.ts +21 -1
  58. package/lib/components/po-field/po-select/po-select.component.d.ts +1 -32
  59. package/lib/components/po-field/po-switch/po-switch.component.d.ts +12 -2
  60. package/lib/components/po-field/po-textarea/po-textarea-base.component.d.ts +10 -0
  61. package/lib/components/po-modal/po-modal.component.d.ts +1 -1
  62. package/lib/components/po-table/po-table-column-manager/po-table-column-manager.component.d.ts +4 -12
  63. package/lib/components/po-table/po-table-detail/po-table-detail.component.d.ts +1 -0
  64. package/lib/components/po-table/po-table-list-manager/po-table-list-manager.component.d.ts +35 -0
  65. package/lib/components/po-table/po-table.module.d.ts +25 -24
  66. package/lib/components/po-tag/po-tag-base.component.d.ts +8 -2
  67. package/package.json +4 -4
  68. package/po-ui-ng-components-14.5.0.tgz +0 -0
  69. package/schematics/ng-add/index.js +1 -1
  70. package/schematics/ng-update/v14/index.js +1 -1
  71. package/schematics/ng-update/v2/index.js +1 -1
  72. package/schematics/ng-update/v3/index.js +1 -1
  73. package/schematics/ng-update/v4/index.js +1 -1
  74. package/schematics/ng-update/v5/index.js +1 -1
  75. package/schematics/ng-update/v6/index.js +1 -1
  76. package/esm2020/lib/components/po-field/po-radio/po-radio-base.component.mjs +0 -104
  77. package/lib/components/po-field/po-radio/po-radio-base.component.d.ts +0 -58
  78. package/po-ui-ng-components-14.3.1.tgz +0 -0
@@ -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", "p-locale", "ngModelChange"]], template: function PoDatepickerRangeComponent_Template(rf, ctx) { if (rf & 1) {
462
+ } }, features: [i0.ɵɵProvidersFeature(providers), i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 18, vars: 27, 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"], ["class", "po-icon-input", 3, "p-change-event", 4, "ngIf"], [3, "click"], ["iconCalendar", ""], [3, "p-error-pattern"], [4, "ngIf"], [1, "po-icon-input", 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()();
@@ -479,16 +479,20 @@ PoDatepickerRangeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
479
479
  i0.ɵɵelementEnd();
480
480
  i0.ɵɵtemplate(17, PoDatepickerRangeComponent_ng_container_17_Template, 4, 4, "ng-container", 14);
481
481
  } if (rf & 2) {
482
+ i0.ɵɵclassProp("po-date-picker-container-disabled", ctx.disabled);
482
483
  i0.ɵɵproperty("p-help", ctx.help)("p-label", ctx.label)("p-optional", !ctx.required && ctx.optional);
483
484
  i0.ɵɵadvance(1);
484
485
  i0.ɵɵclassProp("po-datepicker-range-field-disabled", ctx.disabled);
486
+ i0.ɵɵattribute("disabled", ctx.disabled);
485
487
  i0.ɵɵadvance(3);
486
488
  i0.ɵɵproperty("autocomplete", ctx.autocomplete)("disabled", ctx.disabled)("name", ctx.startDateInputName)("readonly", ctx.readonly);
489
+ i0.ɵɵattribute("aria-label", ctx.label);
487
490
  i0.ɵɵadvance(5);
488
491
  i0.ɵɵproperty("autocomplete", ctx.autocomplete)("disabled", ctx.disabled)("name", ctx.endDateInputName)("readonly", ctx.readonly);
489
492
  i0.ɵɵadvance(3);
490
493
  i0.ɵɵproperty("ngIf", ctx.enableCleaner);
491
494
  i0.ɵɵadvance(2);
495
+ i0.ɵɵclassMapInterpolate1("po-icon po-field-icon po-icon-calendar ", ctx.disabled ? "po-icon-input-disabled" : "po-icon-input", "");
492
496
  i0.ɵɵclassProp("po-clickable", !ctx.disabled && !ctx.readonly)("po-field-icon-disabled", ctx.disabled || ctx.readonly);
493
497
  i0.ɵɵadvance(2);
494
498
  i0.ɵɵproperty("p-error-pattern", ctx.getErrorMessage);
@@ -497,7 +501,7 @@ PoDatepickerRangeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
497
501
  } }, dependencies: [i4.NgIf, i5.NgControlStatus, i5.NgModel, i6.PoCleanComponent, i7.PoCalendarComponent, i8.PoFieldContainerBottomComponent, i9.PoFieldContainerComponent], encapsulation: 2, changeDetection: 0 });
498
502
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PoDatepickerRangeComponent, [{
499
503
  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 [p-locale]=\"locale\"\n (ngModelChange)=\"onCalendarChange($event)\"\n ></po-calendar>\n </div>\n</ng-container>\n" }]
504
+ args: [{ selector: 'po-datepicker-range', providers: providers, changeDetection: ChangeDetectionStrategy.OnPush, template: "<po-field-container\n [class.po-date-picker-container-disabled]=\"disabled\"\n [p-help]=\"help\"\n [p-label]=\"label\"\n [p-optional]=\"!required && optional\"\n>\n <div\n #dateRangeField\n class=\"po-datepicker-range-field po-input\"\n [class.po-datepicker-range-field-disabled]=\"disabled\"\n [attr.disabled]=\"disabled\"\n >\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 [attr.aria-label]=\"label\"\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 class=\"po-icon-input\" *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 {{ disabled ? 'po-icon-input-disabled' : 'po-icon-input' }}\"\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
505
  }], 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
506
  type: ViewChild,
503
507
  args: ['dateRangeField', { read: ElementRef, static: true }]
@@ -514,4 +518,4 @@ PoDatepickerRangeComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type:
514
518
  type: ViewChild,
515
519
  args: ['calendarPicker', { read: ElementRef }]
516
520
  }] }); })();
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
521
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tZGF0ZXBpY2tlci1yYW5nZS9wby1kYXRlcGlja2VyLXJhbmdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1kYXRlcGlja2VyLXJhbmdlL3BvLWRhdGVwaWNrZXItcmFuZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUVWLFNBQVMsRUFNVCx1QkFBdUIsRUFDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBRy9HLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDK0J2QyxvQ0FBaUY7SUFBM0IsaU1BQWtCLGVBQUEsY0FBTyxDQUFBLElBQUM7SUFBQyxpQkFBVzs7OztJQWtCbEcsNkJBQXdDO0lBQ3RDLG1DQUFzRCxzQkFBQTtJQU9sRCw2TUFBaUIsZUFBQSwrQkFBd0IsQ0FBQSxJQUFDO0lBQzNDLGlCQUFjLEVBQUE7SUFFbkIsMEJBQWU7OztJQVBULGVBQXFCO0lBQXJCLDBDQUFxQiw4QkFBQSw4QkFBQSwyQkFBQTs7QURsRDNCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDekIs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bUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIFJlbmRlcmVyMixcbiAgT25EZXN0cm95LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkNoYW5nZXMsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvcG8tY29udHJvbC1wb3NpdGlvbi9wby1jb250cm9sLXBvc2l0aW9uLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZSB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1kYXRlcGlja2VyLXJhbmdlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnQgfSBmcm9tICcuL3BvLWRhdGVwaWNrZXItcmFuZ2UtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9EYXRlU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvcG8tZGF0ZS9wby1kYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9NYXNrIH0gZnJvbSAnLi4vcG8taW5wdXQvcG8tbWFzayc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5jb25zdCBhcnJvd0xlZnRLZXkgPSAzNztcbmNvbnN0IGFycm93UmlnaHRLZXkgPSAzOTtcbmNvbnN0IGJhY2tzcGFjZUtleSA9IDg7XG5jb25zdCBwb0RhdGVwaWNrZXJSYW5nZURhdGVMZW5ndGhEZWZhdWx0ID0gMTA7XG5cbmNvbnN0IHBvQ2FsZW5kYXJDb250ZW50T2Zmc2V0ID0gODtcbmNvbnN0IHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQgPSAnYm90dG9tLWxlZnQnO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29uc3QgcHJvdmlkZXJzID0gW1xuICB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH0sXG4gIHtcbiAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvRGF0ZXBpY2tlclJhbmdlQ29tcG9uZW50KSxcbiAgICBtdWx0aTogdHJ1ZVxuICB9LFxuICBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2Vcbl07XG4vKipcbiAqIEBkb2NzRXh0ZW5kcyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIEJhc2ljXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMvc2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIExhYnNcIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtbGFicy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtbGFicy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS1sYWJzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zXCIgdGl0bGU9XCJQTyBEYXRlcGlja2VyIFJhbmdlIC0gVmFjYXRpb25zIFN1Z2dlc3Rpb25cIj5cbiAqICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWRhdGVwaWNrZXItcmFuZ2UtdmFjYXRpb25zL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybVwiIHRpdGxlPVwiUE8gRGF0ZXBpY2tlciBSYW5nZSAtIFZhY2F0aW9ucyBSZWFjdGl2ZSBGb3JtXCI+XG4gKiAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1kYXRlcGlja2VyLXJhbmdlLXZhY2F0aW9ucy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5odG1sXCI+XG4gKiAgPC9maWxlPlxuICogIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tZGF0ZXBpY2tlci1yYW5nZS12YWNhdGlvbnMtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQudHNcIj5cbiAqICA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLWRhdGVwaWNrZXItcmFuZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tZGF0ZXBpY2tlci1yYW5nZS5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVycyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnRcbiAgZXh0ZW5kcyBQb0RhdGVwaWNrZXJSYW5nZUJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZCgnZGF0ZVJhbmdlRmllbGQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBkYXRlUmFuZ2VGaWVsZDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZW5kRGF0ZUlucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgZW5kRGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzdGFydERhdGVJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHN0YXJ0RGF0ZUlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpY29uQ2FsZW5kYXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uQ2FsZW5kYXI6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyUGlja2VyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNhbGVuZGFyUGlja2VyOiBFbGVtZW50UmVmO1xuXG4gIGlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjbGlja0xpc3RlbmVyO1xuICBwcml2YXRlIGV2ZW50UmVzaXplTGlzdGVuZXI7XG4gIHByaXZhdGUgcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50OiBFbGVtZW50UmVmPGFueT47XG4gIHByaXZhdGUgcG9NYXNrT2JqZWN0OiBQb01hc2s7XG5cbiAgZ2V0IGF1dG9jb21wbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub0F1dG9jb21wbGV0ZSA/ICdvZmYnIDogJ29uJztcbiAgfVxuXG4gIGdldCBlbmFibGVDbGVhbmVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNsZWFuICYmICh0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUgfHwgdGhpcy5lbmREYXRlSW5wdXRWYWx1ZSkgJiYgIXRoaXMuZGlzYWJsZWQgJiYgIXRoaXMucmVhZG9ubHk7XG4gIH1cblxuICBnZXQgZW5kRGF0ZUlucHV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZW5kLWRhdGUnO1xuICB9XG5cbiAgZ2V0IGVuZERhdGVJbnB1dFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZW5kRGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBnZXQgZ2V0RXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlICE9PSAnJyAmJiB0aGlzLmhhc0ludmFsaWRDbGFzcygpID8gdGhpcy5lcnJvck1lc3NhZ2UgOiAnJztcbiAgfVxuXG4gIGdldCBpc0RhdGVSYW5nZUlucHV0VW5jb21wbGV0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUubGVuZ3RoIDwgcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdCAmJlxuICAgICAgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA8IHBvRGF0ZXBpY2tlclJhbmdlRGF0ZUxlbmd0aERlZmF1bHRcbiAgICApO1xuICB9XG5cbiAgZ2V0IGlzRGlydHlEYXRlUmFuZ2VJbnB1dCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lbmREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPiAwIHx8IHRoaXMuc3RhcnREYXRlSW5wdXRWYWx1ZS5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0IHN0YXJ0RGF0ZUlucHV0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnc3RhcnQtZGF0ZSc7XG4gIH1cblxuICBnZXQgc3RhcnREYXRlSW5wdXRWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbnRyb2xQb3NpdGlvbjogUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwb0RhdGVTZXJ2aWNlOiBQb0RhdGVTZXJ2aWNlLFxuICAgIHBvRGF0ZXBpY2tlclJhbmdlRWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwb0xhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIocG9EYXRlU2VydmljZSwgcG9MYW5ndWFnZVNlcnZpY2UpO1xuICAgIHRoaXMucG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50ID0gcG9EYXRlcGlja2VyUmFuZ2VFbGVtZW50O1xuICB9XG5cbiAgc3RhdGljIGdldEtleUNvZGUoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUYXJnZXRFbGVtZW50KGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gZXZlbnQudGFyZ2V0IHx8IGV2ZW50LnNyY0VsZW1lbnQ7XG4gIH1cblxuICBzdGF0aWMgaXNWYWxpZEtleShrZXlDb2RlOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc051bWVyaWNLZXkgPSBrZXlDb2RlID49IDQ4ICYmIGtleUNvZGUgPD0gNTc7XG4gICAgY29uc3QgaXNOdW1lcmljTnVtcGFkS2V5ID0ga2V5Q29kZSA+PSA5NiAmJiBrZXlDb2RlIDw9IDEwNTtcblxuICAgIHJldHVybiBpc051bWVyaWNLZXkgfHwgaXNOdW1lcmljTnVtcGFkS2V5O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmF1dG9Gb2N1cykge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIENsYXNzZSBkZSBtw6FzY2FyYVxuICAgIHRoaXMucG9NYXNrT2JqZWN0ID0gdGhpcy5idWlsZE1hc2soKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5taW5EYXRlIHx8IGNoYW5nZXMubWF4RGF0ZSkge1xuICAgICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuZGF0ZVJhbmdlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5yZXNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbigpO1xuICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogJycsIGVuZDogJycgfTtcblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgdGhpcy51cGRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gIH1cblxuICBldmVudE9uQ2xpY2soJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBvTWFza09iamVjdC5jbGljaygkZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGRhdGVwaWNrZXJSYW5nZTogUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzRGF0ZXBpY2tlclJhbmdlKCkge1xuICAgKiAgIHRoaXMuZGF0ZXBpY2tlclJhbmdlLmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmx1cihldmVudDogYW55KSB7XG4gICAgdGhpcy5vblRvdWNoZWRNb2RlbD8uKCk7XG4gICAgY29uc3QgaXNTdGFydERhdGVUYXJnZXRFdmVudCA9IGV2ZW50LnRhcmdldC5uYW1lID09PSB0aGlzLnN0YXJ0RGF0ZUlucHV0TmFtZTtcblxuICAgIHRoaXMudXBkYXRlTW9kZWxCeVNjcmVlbihpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50KTtcblxuICAgIHRoaXMucmVtb3ZlRm9jdXNGcm9tRGF0ZVBpY2tlclJhbmdlRmllbGQoKTtcbiAgfVxuXG4gIG9uQ2FsZW5kYXJDaGFuZ2UoeyBzdGFydCwgZW5kIH0pIHtcbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50ID0gc3RhcnQgJiYgIWVuZDtcblxuICAgIHRoaXMudXBkYXRlU2NyZWVuQnlNb2RlbCh7IHN0YXJ0OiBzdGFydCB8fCAnJywgZW5kOiBlbmQgfHwgJycgfSk7XG4gICAgdGhpcy51cGRhdGVNb2RlbEJ5U2NyZWVuKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQsIHN0YXJ0IHx8ICcnLCBlbmQgfHwgJycpO1xuXG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sIDMwMCk7XG4gICAgfVxuICB9XG5cbiAgb25Gb2N1cyhldmVudDogYW55KSB7XG4gICAgdGhpcy5hcHBseUZvY3VzT25EYXRlUGlja2VyUmFuZ2VGaWVsZCgpO1xuICAgIHRoaXMucG9NYXNrT2JqZWN0LnJlc2V0UG9zaXRpb25zKGV2ZW50KTtcbiAgfVxuXG4gIG9uS2V5ZG93bihldmVudD86IGFueSkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNTZXRGb2N1c09uQmFja3NwYWNlKGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuc2V0Rm9jdXNPbkJhY2tzcGFjZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5rZXlkb3duKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBvbktleXVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgPSBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWU7XG5cbiAgICB0aGlzLnNldEZvY3VzKGV2ZW50KTtcbiAgICB0aGlzLnBvTWFza09iamVjdC5rZXl1cChldmVudCk7XG4gICAgdGhpcy51cGRhdGVNb2RlbFdoZW5Db21wbGV0ZShpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50LCB0aGlzLnN0YXJ0RGF0ZUlucHV0VmFsdWUsIHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUpO1xuICB9XG5cbiAgcmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKSB7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCA9IHRydWU7XG4gICAgdGhpcy5pc0RhdGVSYW5nZUlucHV0Rm9ybWF0VmFsaWQgPSB0cnVlO1xuICB9XG5cbiAgdG9nZ2xlQ2FsZW5kYXIoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSAhdGhpcy5pc0NhbGVuZGFyVmlzaWJsZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgIGlmICh0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlKSB7XG4gICAgICB0aGlzLnNldENhbGVuZGFyUG9zaXRpb24oKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVNjcmVlbkJ5TW9kZWwobW9kZWw6IFBvRGF0ZXBpY2tlclJhbmdlKSB7XG4gICAgY29uc3QgZGF0ZVJhbmdlID0geyBzdGFydDogbW9kZWwuc3RhcnQgYXMgc3RyaW5nLCBlbmQ6IG1vZGVsLmVuZCBhcyBzdHJpbmcgfTtcbiAgICBjb25zdCBpc1N0YXJ0RGF0ZVZhbGlkID0gdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZGF0ZVJhbmdlLmVuZCwgZGF0ZVJhbmdlLnN0YXJ0KTtcbiAgICBjb25zdCBpc0RhdGVWYWxpZCA9IGRhdGUgPT4gIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChkYXRlKSAmJiBpc1N0YXJ0RGF0ZVZhbGlkO1xuXG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdGVkID0gaXNEYXRlVmFsaWQoZGF0ZVJhbmdlLmVuZCkgPyB0aGlzLmZvcm1hdE1vZGVsVG9TY3JlZW4oZGF0ZVJhbmdlLmVuZCkgOiAnJztcbiAgICBjb25zdCBzdGFydERhdGVGb3JtYXRlZCA9IGlzRGF0ZVZhbGlkKGRhdGVSYW5nZS5zdGFydCkgPyB0aGlzLmZvcm1hdE1vZGVsVG9TY3JlZW4oZGF0ZVJhbmdlLnN0YXJ0KSA6ICcnO1xuXG4gICAgdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9IGVuZERhdGVGb3JtYXRlZDtcbiAgICB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBzdGFydERhdGVGb3JtYXRlZDtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGb2N1c09uRGF0ZVBpY2tlclJhbmdlRmllbGQoKSB7XG4gICAgdGhpcy5kYXRlUmFuZ2VGaWVsZC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3BvLWRhdGVwaWNrZXItcmFuZ2UtZmllbGQtZm9jdXNlZCcpO1xuICB9XG5cbiAgLy8gUmV0b3JuYSB1bSBvYmpldG8gZG8gdGlwbyBQb01hc2sgY29tIGEgbWFzY2FyYSBjb25maWd1cmFkYS5cbiAgcHJpdmF0ZSBidWlsZE1hc2soKTogUG9NYXNrIHtcbiAgICBsZXQgbWFzayA9IHRoaXMuZm9ybWF0LnRvVXBwZXJDYXNlKCk7XG5cbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ERC9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9NTS9nLCAnOTknKTtcbiAgICBtYXNrID0gbWFzay5yZXBsYWNlKC9ZWVlZL2csICc5OTk5Jyk7XG5cbiAgICByZXR1cm4gbmV3IFBvTWFzayhtYXNrLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0RGF0ZShmb3JtYXQ6IHN0cmluZywgZGF5OiBzdHJpbmcgPSAnJywgbW9udGg6IHN0cmluZyA9ICcnLCB5ZWFyOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgbGV0IGRhdGVGb3JtYXR0ZWQgPSBmb3JtYXQ7XG5cbiAgICBkYXkgPSBkYXkgJiYgZGF5LmluY2x1ZGVzKCdUJykgPyBkYXkuc2xpY2UoMCwgMikgOiBkYXk7XG5cbiAgICBkYXRlRm9ybWF0dGVkID0gZGF0ZUZvcm1hdHRlZC5yZXBsYWNlKCdkZCcsICgnMCcgKyBkYXkpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgnbW0nLCAoJzAnICsgbW9udGgpLnNsaWNlKC0yKSk7XG4gICAgZGF0ZUZvcm1hdHRlZCA9IGRhdGVGb3JtYXR0ZWQucmVwbGFjZSgneXl5eScsIFN0cmluZyh5ZWFyKSk7XG5cbiAgICByZXR1cm4gZGF0ZUZvcm1hdHRlZDtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0U2NyZWVuVG9Nb2RlbCh2YWx1ZTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHZhbHVlLnNwbGl0KCcvJyk7XG5cbiAgICByZXR1cm4gdmFsdWUgPyB0aGlzLmZvcm1hdERhdGUoJ3l5eXktbW0tZGQnLCBkYXksIG1vbnRoLCB5ZWFyKSA6ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRNb2RlbFRvU2NyZWVuKHZhbHVlOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXldID0gdmFsdWUuc3BsaXQoJy0nKTtcblxuICAgIHJldHVybiB2YWx1ZSA/IHRoaXMuZm9ybWF0RGF0ZSh0aGlzLmZvcm1hdCwgZGF5LCBtb250aCwgeWVhcikgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVJhbmdlRm9ybWF0VmFsaWRhdGlvbihcbiAgICBzdGFydERhdGU6IHN0cmluZyxcbiAgICBlbmREYXRlOiBzdHJpbmcsXG4gICAgaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhblxuICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IGRhdGVSYW5nZU1vZGVsOiBQb0RhdGVwaWNrZXJSYW5nZSB9IHtcbiAgICB0aGlzLnNldERhdGVSYW5nZUlucHV0VmFsaWRhdGlvbihzdGFydERhdGUsIGVuZERhdGUpO1xuICAgIHJldHVybiB7XG4gICAgICBpc1ZhbGlkOlxuICAgICAgICB0aGlzLmlzRGF0ZVJhbmdlSW5wdXRGb3JtYXRWYWxpZCAmJiB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkICYmIHRoaXMudmVyaWZ5VmFsaWREYXRlKHN0YXJ0RGF0ZSwgZW5kRGF0ZSksXG4gICAgICBkYXRlUmFuZ2VNb2RlbDogdGhpcy5nZXRWYWxpZGF0ZWRNb2RlbChzdGFydERhdGUsIGVuZERhdGUsIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsaWRhdGVkTW9kZWwoc3RhcnREYXRlOiBzdHJpbmcsIGVuZERhdGU6IHN0cmluZywgaXNTdGFydERhdGVUYXJnZXRFdmVudDogYm9vbGVhbik6IFBvRGF0ZXBpY2tlclJhbmdlIHtcbiAgICBjb25zdCBkYXRlUmFuZ2VNb2RlbCA9IHsgc3RhcnQ6ICcnLCBlbmQ6ICcnIH07XG5cbiAgICBkYXRlUmFuZ2VNb2RlbC5lbmQgPVxuICAgICAgKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQgfHwgdGhpcy5pc1N0YXJ0RGF0ZVJhbmdlSW5wdXRWYWxpZCkgJiYgIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChlbmREYXRlKSA/IGVuZERhdGUgOiAnJztcblxuICAgIGRhdGVSYW5nZU1vZGVsLnN0YXJ0ID1cbiAgICAgICghaXNTdGFydERhdGVUYXJnZXRFdmVudCB8fCB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkKSAmJiAhdGhpcy5kYXRlRm9ybWF0RmFpbGVkKHN0YXJ0RGF0ZSlcbiAgICAgICAgPyBzdGFydERhdGVcbiAgICAgICAgOiAnJztcblxuICAgIHJldHVybiBkYXRlUmFuZ2VNb2RlbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzQXR0ckNhbGVuZGFyKGVsZW1lbnQpIHtcbiAgICBjb25zdCBhdHRyQ2FsZW5kYXIgPSAnYXR0ci1jYWxlbmRhcic7XG5cbiAgICByZXR1cm4gZWxlbWVudD8uaGFzQXR0cmlidXRlKGF0dHJDYWxlbmRhcikgfHwgZWxlbWVudD8ucGFyZW50RWxlbWVudD8uaGFzQXR0cmlidXRlKGF0dHJDYWxlbmRhcik7XG4gIH1cblxuICBwcml2YXRlIGhhc0ludmFsaWRDbGFzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5wb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWludmFsaWQnKSAmJlxuICAgICAgdGhpcy5wb0RhdGVwaWNrZXJSYW5nZUVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWRpcnR5JylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGlzdGVuZXJzKCkge1xuICAgIHRoaXMuY2xpY2tMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy53YXNDbGlja2VkT25QaWNrZXIoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLmlzQ2FsZW5kYXJWaXNpYmxlID0gZmFsc2U7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkICYmIGVuZERhdGUgPT09IHRoaXMuZGF0ZVJhbmdlLmVuZCAmJiBzdGFydERhdGUgPT09IHRoaXMuZGF0ZVJhbmdlLnN0YXJ0O1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NldEZvY3VzT25CYWNrc3BhY2UoZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiAoXG4gICAgICBldmVudC50YXJnZXQubmFtZSA9PT0gdGhpcy5lbmREYXRlSW5wdXROYW1lICYmXG4gICAgICB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSAwICYmXG4gICAgICB0aGlzLmVuZERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCA9PT0gMCAmJlxuICAgICAgZXZlbnQua2V5Q29kZSA9PT0gYmFja3NwYWNlS2V5XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TY3JvbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuaXNDYWxlbmRhclZpc2libGUpIHtcbiAgICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHJlbW92ZUZvY3VzRnJvbURhdGVQaWNrZXJSYW5nZUZpZWxkKCkge1xuICAgIHRoaXMuZGF0ZVJhbmdlRmllbGQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdwby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkLWZvY3VzZWQnKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmlzU3RhcnREYXRlUmFuZ2VJbnB1dFZhbGlkID0gdGhpcy5wb0RhdGVTZXJ2aWNlLmlzRGF0ZVJhbmdlVmFsaWQoZW5kRGF0ZSwgc3RhcnREYXRlKTtcblxuICAgIHRoaXMuaXNEYXRlUmFuZ2VJbnB1dEZvcm1hdFZhbGlkID0gIXRoaXMuZGF0ZUZvcm1hdEZhaWxlZChzdGFydERhdGUpICYmICF0aGlzLmRhdGVGb3JtYXRGYWlsZWQoZW5kRGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudC5nZXRUYXJnZXRFbGVtZW50KGV2ZW50KTtcbiAgICBjb25zdCBrZXlDb2RlID0gUG9EYXRlcGlja2VyUmFuZ2VDb21wb25lbnQuZ2V0S2V5Q29kZShldmVudCk7XG4gICAgY29uc3QgaW5wdXROYW1lID0gaW5wdXRFbGVtZW50WyduYW1lJ107XG5cbiAgICB0aGlzLnNldEZvY3VzT25BcnJvd0xlZnQoa2V5Q29kZSwgaW5wdXROYW1lKTtcbiAgICB0aGlzLnNldEZvY3VzT25BcnJvd1JpZ2h0KGtleUNvZGUsIGlucHV0TmFtZSwgaW5wdXRFbGVtZW50KTtcbiAgICB0aGlzLnNldEZvY3VzT25TdGFydERhdGVDb21wbGV0ZWQoa2V5Q29kZSwgaW5wdXROYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNBbmRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyLCBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWYsIHNlbGVjdGlvblJhbmdlOiBudW1iZXIpIHtcbiAgICB0aGlzLmZvY3VzT25FbGVtZW50KGlucHV0RWxlbWVudCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblJhbmdlLCBzZWxlY3Rpb25SYW5nZSk7XG4gICAgICB0aGlzLnBvTWFza09iamVjdC5pbml0aWFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgIHRoaXMucG9NYXNrT2JqZWN0LmZpbmFsUG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNPbkVsZW1lbnQoaW5wdXRFbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLmNsaWNrTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q2FsZW5kYXJQb3NpdGlvbigpIHtcbiAgICB0aGlzLmNvbnRyb2xQb3NpdGlvbi5zZXRFbGVtZW50cyhcbiAgICAgIHRoaXMuY2FsZW5kYXJQaWNrZXIubmF0aXZlRWxlbWVudCxcbiAgICAgIHBvQ2FsZW5kYXJDb250ZW50T2Zmc2V0LFxuICAgICAgdGhpcy5kYXRlUmFuZ2VGaWVsZCxcbiAgICAgIFsnYm90dG9tLWxlZnQnLCAnYm90dG9tLXJpZ2h0JywgJ3RvcC1sZWZ0JywgJ3RvcC1yaWdodCddLFxuICAgICAgZmFsc2UsXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ2FsZW5kYXJQb3NpdGlvbkRlZmF1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQXJyb3dMZWZ0KGtleUNvZGU6IG51bWJlciwgaW5wdXROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpc0N1cnNvckF0U3RhcnRPZklucHV0ID0gdGhpcy5lbmREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMDtcblxuICAgIGlmIChpbnB1dE5hbWUgPT09IHRoaXMuZW5kRGF0ZUlucHV0TmFtZSAmJiBpc0N1cnNvckF0U3RhcnRPZklucHV0ICYmIGtleUNvZGUgPT09IGFycm93TGVmdEtleSkge1xuICAgICAgY29uc3QgaW5wdXRMZW5ndGggPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKGlucHV0TGVuZ3RoLCB0aGlzLnN0YXJ0RGF0ZUlucHV0LCBpbnB1dExlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c09uQXJyb3dSaWdodChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nLCBpbnB1dEVsZW1lbnQ6IGFueSkge1xuICAgIGNvbnN0IGlzQ3Vyc29yQXRFbmRPZklucHV0ID0gdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSBpbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoO1xuXG4gICAgaWYgKGlucHV0TmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWUgJiYgaXNDdXJzb3JBdEVuZE9mSW5wdXQgJiYga2V5Q29kZSA9PT0gYXJyb3dSaWdodEtleSkge1xuICAgICAgdGhpcy5zZXRGb2N1c0FuZFBvc2l0aW9uKDAsIHRoaXMuZW5kRGF0ZUlucHV0LCAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZvY3VzT25CYWNrc3BhY2UoKSB7XG4gICAgY29uc3QgaW5wdXRMZW5ndGggPSB0aGlzLnN0YXJ0RGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUubGVuZ3RoO1xuXG4gICAgdGhpcy5zdGFydERhdGVJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLnNsaWNlKDAsIC0xKTtcbiAgICB0aGlzLnNldEZvY3VzQW5kUG9zaXRpb24oaW5wdXRMZW5ndGgsIHRoaXMuc3RhcnREYXRlSW5wdXQsIGlucHV0TGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNPblN0YXJ0RGF0ZUNvbXBsZXRlZChrZXlDb2RlOiBudW1iZXIsIGlucHV0TmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNMYXN0S2V5UHJlc3NlZCA9IHRoaXMuc3RhcnREYXRlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdDtcbiAgICBjb25zdCBpc05ld0RhdGVDb21wbGV0ZWQgPVxuICAgICAgdGhpcy5zdGFydERhdGVJbnB1dFZhbHVlLmxlbmd0aCA9PT0gcG9EYXRlcGlja2VyUmFuZ2VEYXRlTGVuZ3RoRGVmYXVsdCAmJiBpc0xhc3RLZXlQcmVzc2VkO1xuICAgIGNvbnN0IGlzVmFsaWRLZXkgPSBQb0RhdGVwaWNrZXJSYW5nZUNvbXBvbmVudC5pc1ZhbGlkS2V5KGtleUNvZGUpO1xuXG4gICAgaWYgKGlucHV0TmFtZSA9PT0gdGhpcy5zdGFydERhdGVJbnB1dE5hbWUgJiYgaXNOZXdEYXRlQ29tcGxldGVkICYmIGlzVmFsaWRLZXkpIHtcbiAgICAgIHRoaXMuc2V0Rm9jdXNBbmRQb3NpdGlvbigwLCB0aGlzLmVuZERhdGVJbnB1dCwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbFdoZW5Db21wbGV0ZShpc1N0YXJ0RGF0ZVRhcmdldEV2ZW50OiBib29sZWFuLCBzdGFydERhdGUsIGVuZERhdGUpIHtcbiAgICBjb25zdCBlbmREYXRlRm9ybWF0dGVkID0gdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKGVuZERhdGUpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0U2NyZWVuVG9Nb2RlbChzdGFydERhdGUpO1xuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdGhpcy5nZXREYXRlUmFuZ2VGb3JtYXRWYWxpZGF0aW9uKFxuICAgICAgc3RhcnREYXRlRm9ybWF0dGVkLFxuICAgICAgZW5kRGF0ZUZvcm1hdHRlZCxcbiAgICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnRcbiAgICApO1xuXG4gICAgaWYgKHRoaXMuaXNFcXVhbEJlZm9yZVZhbHVlKHN0YXJ0RGF0ZUZvcm1hdHRlZCwgZW5kRGF0ZUZvcm1hdHRlZCkpIHtcbiAgICAgIHRoaXMucmVzZXREYXRlUmFuZ2VJbnB1dFZhbGlkYXRpb24oKTtcbiAgICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLmRhdGVSYW5nZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogc3RhcnREYXRlRm9ybWF0dGVkLCBlbmQ6IGVuZERhdGVGb3JtYXR0ZWQgfTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgLi4udGhpcy5kYXRlUmFuZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbEJ5U2NyZWVuKGlzU3RhcnREYXRlVGFyZ2V0RXZlbnQ6IGJvb2xlYW4sIHN0YXJ0RGF0ZT8sIGVuZERhdGU/KSB7XG4gICAgY29uc3QgZW5kRGF0ZUZvcm1hdHRlZCA9IGVuZERhdGUgfHwgdGhpcy5mb3JtYXRTY3JlZW5Ub01vZGVsKHRoaXMuZW5kRGF0ZUlucHV0VmFsdWUpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZUZvcm1hdHRlZCA9IHN0YXJ0RGF0ZSB8fCB0aGlzLmZvcm1hdFNjcmVlblRvTW9kZWwodGhpcy5zdGFydERhdGVJbnB1dFZhbHVlKTtcbiAgICBpZiAodGhpcy5pc0RhdGVSYW5nZUlucHV0VW5jb21wbGV0ZWQgJiYgdGhpcy5pc0RpcnR5RGF0ZVJhbmdlSW5wdXQpIHtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRXF1YWxCZWZvcmVWYWx1ZShzdGFydERhdGVGb3JtYXR0ZWQsIGVuZERhdGVGb3JtYXR0ZWQpKSB7XG4gICAgICB0aGlzLnJlc2V0RGF0ZVJhbmdlSW5wdXRWYWxpZGF0aW9uKCk7XG4gICAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdGhpcy5nZXREYXRlUmFuZ2VGb3JtYXRWYWxpZGF0aW9uKFxuICAgICAgc3RhcnREYXRlRm9ybWF0dGVkLFxuICAgICAgZW5kRGF0ZUZvcm1hdHRlZCxcbiAgICAgIGlzU3RhcnREYXRlVGFyZ2V0RXZlbnRcbiAgICApO1xuXG4gICAgaWYgKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRoaXMuZGF0ZVJhbmdlID0geyBzdGFydDogc3RhcnREYXRlRm9ybWF0dGVkLCBlbmQ6IGVuZERhdGVGb3JtYXR0ZWQgfTtcbiAgICAgIHRoaXMudXBkYXRlTW9kZWwodGhpcy5kYXRlUmFuZ2UpO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHsgLi4udGhpcy5kYXRlUmFuZ2UgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRlRm9ybWF0VmFsaWRhdGlvbi5pc1ZhbGlkICYmIHRoaXMudmVyaWZ5Rm9ybWF0dGVkRGF0ZXMoc3RhcnREYXRlRm9ybWF0dGVkLCBlbmREYXRlRm9ybWF0dGVkKSkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSB7IC4uLmRhdGVGb3JtYXRWYWxpZGF0aW9uLmRhdGVSYW5nZU1vZGVsIH07XG4gICAgICB0aGlzLnVwZGF0ZU1vZGVsKGRhdGVGb3JtYXRWYWxpZGF0aW9uLmRhdGVSYW5nZU1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUZvcm1hdHRlZERhdGVzKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhc3RhcnQgfHwgISFlbmQ7XG4gIH1cblxuICBwcml2YXRlIHdhc0NsaWNrZWRPblBpY2tlcihldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0NhbGVuZGFyVmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICF0aGlzLmNhbGVuZGFyUGlja2VyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaWNvbkNhbGVuZGFyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaGFzQXR0ckNhbGVuZGFyKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuaXNDYWxlbmRhclZpc2libGUgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPHBvLWZpZWxkLWNvbnRhaW5lclxuICBbY2xhc3MucG8tZGF0ZS1waWNrZXItY29udGFpbmVyLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3AtaGVscF09XCJoZWxwXCJcbiAgW3AtbGFiZWxdPVwibGFiZWxcIlxuICBbcC1vcHRpb25hbF09XCIhcmVxdWlyZWQgJiYgb3B0aW9uYWxcIlxuPlxuICA8ZGl2XG4gICAgI2RhdGVSYW5nZUZpZWxkXG4gICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWZpZWxkIHBvLWlucHV0XCJcbiAgICBbY2xhc3MucG8tZGF0ZXBpY2tlci1yYW5nZS1maWVsZC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2Utc3RhcnQtZGF0ZVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNzdGFydERhdGVJbnB1dFxuICAgICAgICBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaW5wdXRcIlxuICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW25hbWVdPVwic3RhcnREYXRlSW5wdXROYW1lXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIlxuICAgICAgICAoa2V5dXApPVwib25LZXl1cCgkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImV2ZW50T25DbGljaygkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1zZXBhcmF0b3JcIj4tPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwicG8tZGF0ZXBpY2tlci1yYW5nZS1lbmQtZGF0ZVwiPlxuICAgICAgPGlucHV0XG4gICAgICAgICNlbmREYXRlSW5wdXRcbiAgICAgICAgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWlucHV0XCJcbiAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW25hbWVdPVwiZW5kRGF0ZUlucHV0TmFtZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgKGtleXVwKT1cIm9uS2V5dXAoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJldmVudE9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLWRhdGVwaWNrZXItcmFuZ2UtaWNvblwiPlxuICAgICAgPHBvLWNsZWFuIGNsYXNzPVwicG8taWNvbi1pbnB1dFwiICpuZ0lmPVwiZW5hYmxlQ2xlYW5lclwiIChwLWNoYW5nZS1ldmVudCk9XCJjbGVhcigpXCI+PC9wby1jbGVhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJwby1kYXRlcGlja2VyLXJhbmdlLWljb25cIj5cbiAgICAgIDxzcGFuXG4gICAgICAgICNpY29uQ2FsZW5kYXJcbiAgICAgICAgY2xhc3M9XCJwby1pY29uIHBvLWZpZWxkLWljb24gcG8taWNvbi1jYWxlbmRhciB7eyBkaXNhYmxlZCA/ICdwby1pY29uLWlucHV0LWRpc2FibGVkJyA6ICdwby1pY29uLWlucHV0JyB9fVwiXG4gICAgICAgIFtjbGFzcy5wby1jbGlja2FibGVdPVwiIWRpc2FibGVkICYmICFyZWFkb25seVwiXG4gICAgICAgIFtjbGFzcy5wby1maWVsZC1pY29uLWRpc2FibGVkXT1cImRpc2FibGVkIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhbGVuZGFyKClcIlxuICAgICAgPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8cG8tZmllbGQtY29udGFpbmVyLWJvdHRvbSBbcC1lcnJvci1wYXR0ZXJuXT1cImdldEVycm9yTWVzc2FnZVwiPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaXNDYWxlbmRhclZpc2libGVcIj5cbiAgPGRpdiAjY2FsZW5kYXJQaWNrZXIgY2xhc3M9XCJwby1jYWxlbmRhci1yYW5nZS1waWNrZXJcIj5cbiAgICA8cG8tY2FsZW5kYXJcbiAgICAgIHAtbW9kZT1cInJhbmdlXCJcbiAgICAgIFtuZ01vZGVsXT1cImRhdGVSYW5nZVwiXG4gICAgICBbcC1tYXgtZGF0ZV09XCJtYXhEYXRlXCJcbiAgICAgIFtwLW1pbi1kYXRlXT1cIm1pbkRhdGVcIlxuICAgICAgW3AtbG9jYWxlXT1cImxvY2FsZVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkNhbGVuZGFyQ2hhbmdlKCRldmVudClcIlxuICAgID48L3BvLWNhbGVuZGFyPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuIl19