@libs-ui/components-datetime-picker 0.2.108 → 0.2.109

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.
@@ -23,6 +23,8 @@ export class LibsUiComponentsDatetimePickerCustomRangesComponent {
23
23
  extendRanges = input([]);
24
24
  widthByParent = input(false);
25
25
  autoApply = input(false);
26
+ minDate = input();
27
+ maxDate = input();
26
28
  positionQuickRanges = input('left', { transform: (value) => value ?? 'left' });
27
29
  isSingle = input(false, { transform: (value) => value ?? false });
28
30
  hasTimePicker = input(true);
@@ -290,7 +292,7 @@ export class LibsUiComponentsDatetimePickerCustomRangesComponent {
290
292
  // this.onDestroy.complete();
291
293
  }
292
294
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimePickerCustomRangesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
293
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDatetimePickerCustomRangesComponent, isStandalone: true, selector: "libs_ui-components-datetime-picker-custom_ranges", inputs: { zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, extendRanges: { classPropertyName: "extendRanges", publicName: "extendRanges", isSignal: true, isRequired: false, transformFunction: null }, widthByParent: { classPropertyName: "widthByParent", publicName: "widthByParent", isSignal: true, isRequired: false, transformFunction: null }, autoApply: { classPropertyName: "autoApply", publicName: "autoApply", isSignal: true, isRequired: false, transformFunction: null }, positionQuickRanges: { classPropertyName: "positionQuickRanges", publicName: "positionQuickRanges", isSignal: true, isRequired: false, transformFunction: null }, isSingle: { classPropertyName: "isSingle", publicName: "isSingle", isSignal: true, isRequired: false, transformFunction: null }, hasTimePicker: { classPropertyName: "hasTimePicker", publicName: "hasTimePicker", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, dateOptions: { classPropertyName: "dateOptions", publicName: "dateOptions", isSignal: true, isRequired: false, transformFunction: null }, alwaysShowCalendars: { classPropertyName: "alwaysShowCalendars", publicName: "alwaysShowCalendars", isSignal: true, isRequired: false, transformFunction: null }, startDate: { classPropertyName: "startDate", publicName: "startDate", isSignal: true, isRequired: false, transformFunction: null }, endDate: { classPropertyName: "endDate", publicName: "endDate", isSignal: true, isRequired: false, transformFunction: null }, showCustomRangeLabel: { classPropertyName: "showCustomRangeLabel", publicName: "showCustomRangeLabel", isSignal: true, isRequired: false, transformFunction: null }, keepCalendarOpeningWithRange: { classPropertyName: "keepCalendarOpeningWithRange", publicName: "keepCalendarOpeningWithRange", isSignal: true, isRequired: false, transformFunction: null }, singleDateSelected: { classPropertyName: "singleDateSelected", publicName: "singleDateSelected", isSignal: true, isRequired: false, transformFunction: null }, dateRangeSelected: { classPropertyName: "dateRangeSelected", publicName: "dateRangeSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { startDate: "startDateChange", endDate: "endDateChange", outChangStageFlagMouse: "outChangStageFlagMouse", outUpdateWidth: "outUpdateWidth", outCancel: "outCancel", outSelectSingleDate: "outSelectSingleDate", outSelectDateRange: "outSelectDateRange", outClickRange: "outClickRange" }, ngImport: i0, template: "<div #pickerContainer\n class=\"libs-ui-component-custom_ranges flex rounded-[4px] bg-[#ffffff] z-[1000] overflow-[hidden] relative inline\"\n [class.flex-row-reverse]=\"positionQuickRanges() === 'right'\">\n @if (!isSingle()) {\n <div class=\"libs-ui-component-custom_ranges-ranges {{ classInclude() || '' }}\"\n [class.border-l-[#e6e8ed]]=\"positionQuickRanges() === 'right' && showCalTableInRanges()\"\n [class.border-l]=\"positionQuickRanges() === 'right' && showCalTableInRanges()\"\n [class.border-r-[#e6e8ed]]=\"positionQuickRanges() === 'left' && showCalTableInRanges()\"\n [class.border-r]=\"positionQuickRanges() === 'left' && showCalTableInRanges()\"\n [class.!min-h-[260px]]=\"showCalTableInRanges() && !isSingle()\"\n [class.!min-h-[300px]]=\"hasTimePicker() && !isSingle()\"\n [class.!w-[160px]]=\"!widthByParent()\"\n [class.!w-full]=\"widthByParent()\">\n @for (range of quickRangesArray(); track range.id) {\n <div class=\"flex items-center hover:bg-[var(--libs-ui-color-light-3)] cursor-pointer px-[16px] py-[8px]\"\n [class.libs-ui-selected-range]=\"range.id === chosenQuickRange() && showCustomRangeLabel()\"\n [class.bg-[var(--libs-ui-color-light-3)]]=\"range.id === chosenQuickRange() || range.id === selectedQuickRange()\"\n (click)=\"handlerClickRange($event, range)\">\n <div class=\"libs-ui-font-h5r flex text-[#333333] min-w-0 w-full\">\n <div LibsUiComponentsPopoverDirective\n type=\"text\"\n [config]=\"{maxWidth:160,direction:'top',zIndex:(zIndex() ||1000) + 1}\"\n [innerHTML]=\"range.label\"\n (click)=\"handlerClickRange($event, range)\">\n </div>\n </div>\n <i class=\"text-[12px] ml-[16px]\"\n [class.libs-ui-icon-check]=\"range.id === selectedQuickRange()\"\n [class.text-[var(--libs-ui-color-default)]]=\"range.id === selectedQuickRange()\"></i>\n </div>\n }\n </div>\n }\n @if (showCalTableInRanges()) {\n <div class=\"m-[16px] w-full\">\n <libs_ui-components-datetime-picker-custom_ranges-calendar [isSingle]=\"isSingle()\"\n [autoApply]=\"autoApply()\"\n [zIndex]=\"zIndex()\"\n [flagMouse]=\"flagMouse()\"\n [dateOptions]=\"dateOptions()\"\n [hasTimePicker]=\"hasTimePicker()\"\n [quickRangesArray]=\"quickRangesArray()\"\n [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\n [classInclude]=\"'w-full'\"\n (outCancel)=\"handlerCancel()\"\n (outPickerDate)=\"handlerPickerDate($event)\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\" />\n </div>\n }\n</div>\n", styles: [".libs-ui-component-custom_ranges{position:absolute;box-shadow:0 2px 4px #00000029,0 2px 8px #0000001f}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges{width:159px;flex-shrink:0}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges .libs-ui-selected-range{position:relative}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges .libs-ui-selected-range:after{content:\"\";position:absolute;right:0;top:0;bottom:0;width:2px;background-color:var(--libs-ui-color-default)!important}@media (min-width: 564px){.libs-ui-component-custom_ranges{width:auto}}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "component", type: LibsUiComponentsDatetimePickerCustomRangesCalendarComponent, selector: "libs_ui-components-datetime-picker-custom_ranges-calendar", inputs: ["quickRangesArray", "zIndex", "classInclude", "isSingle", "showDropdownsSelect", "hasTimePicker", "flagMouse", "dateOptions", "autoApply", "hasSecondPicker", "showRangeLabelOnInput", "startDate", "endDate", "minDate", "maxDate"], outputs: ["startDateChange", "endDateChange", "outChangStageFlagMouse", "outPickerDate", "outCancel", "outUpdateWidth", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
295
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDatetimePickerCustomRangesComponent, isStandalone: true, selector: "libs_ui-components-datetime-picker-custom_ranges", inputs: { zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, extendRanges: { classPropertyName: "extendRanges", publicName: "extendRanges", isSignal: true, isRequired: false, transformFunction: null }, widthByParent: { classPropertyName: "widthByParent", publicName: "widthByParent", isSignal: true, isRequired: false, transformFunction: null }, autoApply: { classPropertyName: "autoApply", publicName: "autoApply", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, positionQuickRanges: { classPropertyName: "positionQuickRanges", publicName: "positionQuickRanges", isSignal: true, isRequired: false, transformFunction: null }, isSingle: { classPropertyName: "isSingle", publicName: "isSingle", isSignal: true, isRequired: false, transformFunction: null }, hasTimePicker: { classPropertyName: "hasTimePicker", publicName: "hasTimePicker", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, dateOptions: { classPropertyName: "dateOptions", publicName: "dateOptions", isSignal: true, isRequired: false, transformFunction: null }, alwaysShowCalendars: { classPropertyName: "alwaysShowCalendars", publicName: "alwaysShowCalendars", isSignal: true, isRequired: false, transformFunction: null }, startDate: { classPropertyName: "startDate", publicName: "startDate", isSignal: true, isRequired: false, transformFunction: null }, endDate: { classPropertyName: "endDate", publicName: "endDate", isSignal: true, isRequired: false, transformFunction: null }, showCustomRangeLabel: { classPropertyName: "showCustomRangeLabel", publicName: "showCustomRangeLabel", isSignal: true, isRequired: false, transformFunction: null }, keepCalendarOpeningWithRange: { classPropertyName: "keepCalendarOpeningWithRange", publicName: "keepCalendarOpeningWithRange", isSignal: true, isRequired: false, transformFunction: null }, singleDateSelected: { classPropertyName: "singleDateSelected", publicName: "singleDateSelected", isSignal: true, isRequired: false, transformFunction: null }, dateRangeSelected: { classPropertyName: "dateRangeSelected", publicName: "dateRangeSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { startDate: "startDateChange", endDate: "endDateChange", outChangStageFlagMouse: "outChangStageFlagMouse", outUpdateWidth: "outUpdateWidth", outCancel: "outCancel", outSelectSingleDate: "outSelectSingleDate", outSelectDateRange: "outSelectDateRange", outClickRange: "outClickRange" }, ngImport: i0, template: "<div #pickerContainer\n class=\"libs-ui-component-custom_ranges flex rounded-[4px] bg-[#ffffff] z-[1000] overflow-[hidden] relative inline\"\n [class.flex-row-reverse]=\"positionQuickRanges() === 'right'\">\n @if (!isSingle()) {\n <div class=\"libs-ui-component-custom_ranges-ranges {{ classInclude() || '' }}\"\n [class.border-l-[#e6e8ed]]=\"positionQuickRanges() === 'right' && showCalTableInRanges()\"\n [class.border-l]=\"positionQuickRanges() === 'right' && showCalTableInRanges()\"\n [class.border-r-[#e6e8ed]]=\"positionQuickRanges() === 'left' && showCalTableInRanges()\"\n [class.border-r]=\"positionQuickRanges() === 'left' && showCalTableInRanges()\"\n [class.!min-h-[260px]]=\"showCalTableInRanges() && !isSingle()\"\n [class.!min-h-[300px]]=\"hasTimePicker() && !isSingle()\"\n [class.!w-[160px]]=\"!widthByParent()\"\n [class.!w-full]=\"widthByParent()\">\n @for (range of quickRangesArray(); track range.id) {\n <div class=\"flex items-center hover:bg-[var(--libs-ui-color-light-3)] cursor-pointer px-[16px] py-[8px]\"\n [class.libs-ui-selected-range]=\"range.id === chosenQuickRange() && showCustomRangeLabel()\"\n [class.bg-[var(--libs-ui-color-light-3)]]=\"range.id === chosenQuickRange() || range.id === selectedQuickRange()\"\n (click)=\"handlerClickRange($event, range)\">\n <div class=\"libs-ui-font-h5r flex text-[#333333] min-w-0 w-full\">\n <div LibsUiComponentsPopoverDirective\n type=\"text\"\n [config]=\"{maxWidth:160,direction:'top',zIndex:(zIndex() ||1000) + 1}\"\n [innerHTML]=\"range.label\"\n (click)=\"handlerClickRange($event, range)\">\n </div>\n </div>\n <i class=\"text-[12px] ml-[16px]\"\n [class.libs-ui-icon-check]=\"range.id === selectedQuickRange()\"\n [class.text-[var(--libs-ui-color-default)]]=\"range.id === selectedQuickRange()\"></i>\n </div>\n }\n </div>\n }\n @if (showCalTableInRanges()) {\n <div class=\"m-[16px] w-full\">\n <libs_ui-components-datetime-picker-custom_ranges-calendar [isSingle]=\"isSingle()\"\n [autoApply]=\"autoApply()\"\n [zIndex]=\"zIndex()\"\n [flagMouse]=\"flagMouse()\"\n [dateOptions]=\"dateOptions()\"\n [hasTimePicker]=\"hasTimePicker()\"\n [quickRangesArray]=\"quickRangesArray()\"\n [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [classInclude]=\"'w-full'\"\n (outCancel)=\"handlerCancel()\"\n (outPickerDate)=\"handlerPickerDate($event)\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\" />\n </div>\n }\n</div>\n", styles: [".libs-ui-component-custom_ranges{position:absolute;box-shadow:0 2px 4px #00000029,0 2px 8px #0000001f}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges{width:159px;flex-shrink:0}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges .libs-ui-selected-range{position:relative}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges .libs-ui-selected-range:after{content:\"\";position:absolute;right:0;top:0;bottom:0;width:2px;background-color:var(--libs-ui-color-default)!important}@media (min-width: 564px){.libs-ui-component-custom_ranges{width:auto}}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "component", type: LibsUiComponentsDatetimePickerCustomRangesCalendarComponent, selector: "libs_ui-components-datetime-picker-custom_ranges-calendar", inputs: ["quickRangesArray", "zIndex", "classInclude", "isSingle", "showDropdownsSelect", "hasTimePicker", "flagMouse", "dateOptions", "autoApply", "hasSecondPicker", "showRangeLabelOnInput", "startDate", "endDate", "minDate", "maxDate"], outputs: ["startDateChange", "endDateChange", "outChangStageFlagMouse", "outPickerDate", "outCancel", "outUpdateWidth", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
294
296
  }
295
297
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimePickerCustomRangesComponent, decorators: [{
296
298
  type: Component,
@@ -298,6 +300,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
298
300
  TranslateModule,
299
301
  LibsUiComponentsDatetimePickerCustomRangesCalendarComponent,
300
302
  LibsUiComponentsPopoverComponent
301
- ], template: "<div #pickerContainer\n class=\"libs-ui-component-custom_ranges flex rounded-[4px] bg-[#ffffff] z-[1000] overflow-[hidden] relative inline\"\n [class.flex-row-reverse]=\"positionQuickRanges() === 'right'\">\n @if (!isSingle()) {\n <div class=\"libs-ui-component-custom_ranges-ranges {{ classInclude() || '' }}\"\n [class.border-l-[#e6e8ed]]=\"positionQuickRanges() === 'right' && showCalTableInRanges()\"\n [class.border-l]=\"positionQuickRanges() === 'right' && showCalTableInRanges()\"\n [class.border-r-[#e6e8ed]]=\"positionQuickRanges() === 'left' && showCalTableInRanges()\"\n [class.border-r]=\"positionQuickRanges() === 'left' && showCalTableInRanges()\"\n [class.!min-h-[260px]]=\"showCalTableInRanges() && !isSingle()\"\n [class.!min-h-[300px]]=\"hasTimePicker() && !isSingle()\"\n [class.!w-[160px]]=\"!widthByParent()\"\n [class.!w-full]=\"widthByParent()\">\n @for (range of quickRangesArray(); track range.id) {\n <div class=\"flex items-center hover:bg-[var(--libs-ui-color-light-3)] cursor-pointer px-[16px] py-[8px]\"\n [class.libs-ui-selected-range]=\"range.id === chosenQuickRange() && showCustomRangeLabel()\"\n [class.bg-[var(--libs-ui-color-light-3)]]=\"range.id === chosenQuickRange() || range.id === selectedQuickRange()\"\n (click)=\"handlerClickRange($event, range)\">\n <div class=\"libs-ui-font-h5r flex text-[#333333] min-w-0 w-full\">\n <div LibsUiComponentsPopoverDirective\n type=\"text\"\n [config]=\"{maxWidth:160,direction:'top',zIndex:(zIndex() ||1000) + 1}\"\n [innerHTML]=\"range.label\"\n (click)=\"handlerClickRange($event, range)\">\n </div>\n </div>\n <i class=\"text-[12px] ml-[16px]\"\n [class.libs-ui-icon-check]=\"range.id === selectedQuickRange()\"\n [class.text-[var(--libs-ui-color-default)]]=\"range.id === selectedQuickRange()\"></i>\n </div>\n }\n </div>\n }\n @if (showCalTableInRanges()) {\n <div class=\"m-[16px] w-full\">\n <libs_ui-components-datetime-picker-custom_ranges-calendar [isSingle]=\"isSingle()\"\n [autoApply]=\"autoApply()\"\n [zIndex]=\"zIndex()\"\n [flagMouse]=\"flagMouse()\"\n [dateOptions]=\"dateOptions()\"\n [hasTimePicker]=\"hasTimePicker()\"\n [quickRangesArray]=\"quickRangesArray()\"\n [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\n [classInclude]=\"'w-full'\"\n (outCancel)=\"handlerCancel()\"\n (outPickerDate)=\"handlerPickerDate($event)\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\" />\n </div>\n }\n</div>\n", styles: [".libs-ui-component-custom_ranges{position:absolute;box-shadow:0 2px 4px #00000029,0 2px 8px #0000001f}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges{width:159px;flex-shrink:0}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges .libs-ui-selected-range{position:relative}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges .libs-ui-selected-range:after{content:\"\";position:absolute;right:0;top:0;bottom:0;width:2px;background-color:var(--libs-ui-color-default)!important}@media (min-width: 564px){.libs-ui-component-custom_ranges{width:auto}}\n"] }]
303
+ ], template: "<div #pickerContainer\n class=\"libs-ui-component-custom_ranges flex rounded-[4px] bg-[#ffffff] z-[1000] overflow-[hidden] relative inline\"\n [class.flex-row-reverse]=\"positionQuickRanges() === 'right'\">\n @if (!isSingle()) {\n <div class=\"libs-ui-component-custom_ranges-ranges {{ classInclude() || '' }}\"\n [class.border-l-[#e6e8ed]]=\"positionQuickRanges() === 'right' && showCalTableInRanges()\"\n [class.border-l]=\"positionQuickRanges() === 'right' && showCalTableInRanges()\"\n [class.border-r-[#e6e8ed]]=\"positionQuickRanges() === 'left' && showCalTableInRanges()\"\n [class.border-r]=\"positionQuickRanges() === 'left' && showCalTableInRanges()\"\n [class.!min-h-[260px]]=\"showCalTableInRanges() && !isSingle()\"\n [class.!min-h-[300px]]=\"hasTimePicker() && !isSingle()\"\n [class.!w-[160px]]=\"!widthByParent()\"\n [class.!w-full]=\"widthByParent()\">\n @for (range of quickRangesArray(); track range.id) {\n <div class=\"flex items-center hover:bg-[var(--libs-ui-color-light-3)] cursor-pointer px-[16px] py-[8px]\"\n [class.libs-ui-selected-range]=\"range.id === chosenQuickRange() && showCustomRangeLabel()\"\n [class.bg-[var(--libs-ui-color-light-3)]]=\"range.id === chosenQuickRange() || range.id === selectedQuickRange()\"\n (click)=\"handlerClickRange($event, range)\">\n <div class=\"libs-ui-font-h5r flex text-[#333333] min-w-0 w-full\">\n <div LibsUiComponentsPopoverDirective\n type=\"text\"\n [config]=\"{maxWidth:160,direction:'top',zIndex:(zIndex() ||1000) + 1}\"\n [innerHTML]=\"range.label\"\n (click)=\"handlerClickRange($event, range)\">\n </div>\n </div>\n <i class=\"text-[12px] ml-[16px]\"\n [class.libs-ui-icon-check]=\"range.id === selectedQuickRange()\"\n [class.text-[var(--libs-ui-color-default)]]=\"range.id === selectedQuickRange()\"></i>\n </div>\n }\n </div>\n }\n @if (showCalTableInRanges()) {\n <div class=\"m-[16px] w-full\">\n <libs_ui-components-datetime-picker-custom_ranges-calendar [isSingle]=\"isSingle()\"\n [autoApply]=\"autoApply()\"\n [zIndex]=\"zIndex()\"\n [flagMouse]=\"flagMouse()\"\n [dateOptions]=\"dateOptions()\"\n [hasTimePicker]=\"hasTimePicker()\"\n [quickRangesArray]=\"quickRangesArray()\"\n [startDate]=\"startDate()\"\n [endDate]=\"endDate()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [classInclude]=\"'w-full'\"\n (outCancel)=\"handlerCancel()\"\n (outPickerDate)=\"handlerPickerDate($event)\"\n (outFunctionsControl)=\"handlerFunctionsControl($event)\"\n (outChangStageFlagMouse)=\"handlerChangeFlagMouse($event)\" />\n </div>\n }\n</div>\n", styles: [".libs-ui-component-custom_ranges{position:absolute;box-shadow:0 2px 4px #00000029,0 2px 8px #0000001f}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges{width:159px;flex-shrink:0}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges .libs-ui-selected-range{position:relative}.libs-ui-component-custom_ranges .libs-ui-component-custom_ranges-ranges .libs-ui-selected-range:after{content:\"\";position:absolute;right:0;top:0;bottom:0;width:2px;background-color:var(--libs-ui-color-default)!important}@media (min-width: 564px){.libs-ui-component-custom_ranges{width:auto}}\n"] }]
302
304
  }], ctorParameters: () => [] });
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJhbmdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9jdXN0b20tcmFuZ2VzL2N1c3RvbS1yYW5nZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL3BpY2tlci9zcmMvY3VzdG9tLXJhbmdlcy9jdXN0b20tcmFuZ2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUFjLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLMUcsT0FBTyxFQUFFLDJEQUEyRCxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZTVHLE1BQU0sT0FBTyxtREFBbUQ7SUFDOUQsZUFBZTtJQUNMLG9CQUFvQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUM5QyxnQkFBZ0IsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELGtCQUFrQixHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztJQUM1RSxnQkFBZ0IsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO0lBRXpGLGVBQWUsR0FBRyxN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Q1QsQ0FBQztJQUVTLGtCQUFrQixDQUFDLEtBQVk7UUFDdkMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLGdDQUFnQztRQUNoQyw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVTLHNCQUFzQixDQUFDLFNBQXFCO1FBQ3BELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVTLHVCQUF1QixDQUFDLEtBQW9DO1FBQ3BFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEQseUJBQXlCO1FBQ3pCLDZCQUE2QjtJQUMvQixDQUFDO3dHQWpWVSxtREFBbUQ7NEZBQW5ELG1EQUFtRCwwMEZDeEJoRSx5dkZBb0RBLDZwQkRqQ0ksZUFBZSwrQkFDZiwyREFBMkQscWVBQzNELGdDQUFnQzs7NEZBR3ZCLG1EQUFtRDtrQkFiL0QsU0FBUzsrQkFFRSxrREFBa0QsY0FHaEQsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWU7d0JBQ2YsMkRBQTJEO3dCQUMzRCxnQ0FBZ0M7cUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZWZmZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHsgZGVmYXVsdExvY2FsZUNvbmZpZywgZ2V0RGF0ZU9wdGlvbnMsIGdldERhdGVSYW5nZURlZmF1bHQgfSBmcm9tIFwiLi4vZGVmaW5lcy9kYXRlLW9wdGlvbnMuZGVmaW5lXCI7XG5pbXBvcnQgeyBJRW1pdERhdGVDYWxlbmRhciwgSUVtaXREYXRlUmFuZ2UsIElFbWl0U2luZ2xlRGF0ZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2NhbGVuZGFyLWVtaXQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJRGF0ZVJhbmdlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvY2FsZW5kYXItdmFyaWFibGVzLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSUNhbGVuZGFyRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uQ29uZmlnIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvcGlja2VyLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lUGlja2VyQ3VzdG9tUmFuZ2VzQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tIFwiLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnRcIjtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLXBpY2tlci1jdXN0b21fcmFuZ2VzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1yYW5nZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tcmFuZ2VzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NhbGVuZGFyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lUGlja2VyQ3VzdG9tUmFuZ2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCBzaG93Q2FsVGFibGVJblJhbmdlcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBxdWlja1Jhbmdlc0FycmF5ID0gc2lnbmFsPEFycmF5PElEYXRlUmFuZ2U+PihbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFF1aWNrUmFuZ2UgPSBzaWduYWw8c3RyaW5nPignJyk7IC8vIHF1aWNrIHJhbmdlIMSRw6MgxJHGsOG7o2MgbMawdSB0csaw4bubYyDEkcOzXG4gIHByb3RlY3RlZCBjaG9zZW5RdWlja1JhbmdlID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTsgLy8gcXVpY2sgcmFuZ2UgxJFhbmcgxJHGsOG7o2MgY2jhu41uXG5cbiAgcHJpdmF0ZSBjYWxlbmRhclNob3dpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHRpbWVvdXRzID0gc2lnbmFsPEFycmF5PG51bWJlcj4+KFtdKTtcbiAgcHJpdmF0ZSBjYWxlbmRhckZ1bmN0aW9uQ29udHJvbEV2ZW50ID0gc2lnbmFsPElDYWxlbmRhckZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGNob3NlblNpbmdsZURhdGUgPSBzaWduYWw8SUVtaXRTaW5nbGVEYXRlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGNob3NlbkRhdGVSYW5nZSA9IHNpZ25hbDxJRW1pdERhdGVSYW5nZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKiogSU5QVVQgKi9cbiAgLy8gcmVhZG9ubHkgU2VsZWN0ZWRRdWlja1JhbmdlID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyPigxMjAwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMjAwIH0pO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgZXh0ZW5kUmFuZ2VzID0gaW5wdXQ8QXJyYXk8SURhdGVSYW5nZT4+KFtdKTtcbiAgcmVhZG9ubHkgd2lkdGhCeVBhcmVudCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgYXV0b0FwcGx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHJlYWRvbmx5IHBvc2l0aW9uUXVpY2tSYW5nZXMgPSBpbnB1dDwnbGVmdCcgfCAncmlnaHQnLCAnbGVmdCcgfCAncmlnaHQnPignbGVmdCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/ICdsZWZ0JyB9KTtcbiAgcmVhZG9ubHkgaXNTaW5nbGUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGhhc1RpbWVQaWNrZXIgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgZmxhZ01vdXNlID0gaW5wdXQ8SUZsYWdNb3VzZT4oeyBpc01vdXNlRW50ZXI6IGZhbHNlLCBpc01vdXNlRW50ZXJDb250ZW50OiBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgZGF0ZU9wdGlvbnMgPSBpbnB1dDxMb2NhbGl6YXRpb25Db25maWc+KHsgLi4uZGVmYXVsdExvY2FsZUNvbmZpZygpLCAuLi5nZXREYXRlT3B0aW9ucygpIH0pO1xuICByZWFkb25seSBhbHdheXNTaG93Q2FsZW5kYXJzID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzdGFydERhdGUgPSBtb2RlbDxkYXlqcy5EYXlqcyB8IHVuZGVmaW5lZD4oZGF5anMoKS5zdGFydE9mKCdkYXknKSk7XG4gIHJlYWRvbmx5IGVuZERhdGUgPSBtb2RlbDxkYXlqcy5EYXlqcyB8IHVuZGVmaW5lZD4oZGF5anMoKS5lbmRPZignZGF5JykpO1xuICByZWFkb25seSBzaG93Q3VzdG9tUmFuZ2VMYWJlbCA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGtlZXBDYWxlbmRhck9wZW5pbmdXaXRoUmFuZ2UgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIHJlYWRvbmx5IHNpbmdsZURhdGVTZWxlY3RlZCA9IGlucHV0PElFbWl0U2luZ2xlRGF0ZSB8IHVuZGVmaW5lZCwgSUVtaXRTaW5nbGVEYXRlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgZGF0ZSA9IHZhbHVlLmRhdGU7XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZGF0ZSA9IGRheWpzKGRhdGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgZGF0ZVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuICByZWFkb25seSBkYXRlUmFuZ2VTZWxlY3RlZCA9IGlucHV0PElFbWl0RGF0ZVJhbmdlIHwgdW5kZWZpbmVkLCBJRW1pdERhdGVSYW5nZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7XG4gICAgdHJhbnNmb3JtOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHN0YXJ0RGF0ZSA9IHZhbHVlLnN0YXJ0RGF0ZTtcbiAgICAgIGxldCBlbmREYXRlID0gdmFsdWUuZW5kRGF0ZTtcblxuICAgICAgaWYgKHR5cGVvZiBzdGFydERhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0YXJ0RGF0ZSA9IGRheWpzKHN0YXJ0RGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZW5kRGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZW5kRGF0ZSA9IGRheWpzKGVuZERhdGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgc3RhcnREYXRlLFxuICAgICAgICBlbmREYXRlXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLyoqIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlID0gb3V0cHV0PElGbGFnTW91c2U+KCk7XG4gIHJlYWRvbmx5IG91dFVwZGF0ZVdpZHRoID0gb3V0cHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgb3V0Q2FuY2VsID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0U2luZ2xlRGF0ZSA9IG91dHB1dDxJRW1pdFNpbmdsZURhdGU+KCk7XG4gIHJlYWRvbmx5IG91dFNlbGVjdERhdGVSYW5nZSA9IG91dHB1dDxJRW1pdERhdGVSYW5nZT4oKTtcbiAgcmVhZG9ubHkgb3V0Q2xpY2tSYW5nZSA9IG91dHB1dDxJRGF0ZVJhbmdlPigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB1bnRyYWNrZWQodGhpcy5vbkFmdGVyVmlld0luaXQuYmluZCh0aGlzKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkFmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoZGF5anMoKS5zdGFydE9mKCdkYXknKSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5lbmREYXRlKCkpIHtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoZGF5anMoKS5lbmRPZignZGF5JykpO1xuICAgIH1cbiAgICBjb25zdCBkYXRlUmFuZ2VTZWxlY3RlZCA9IHRoaXMuZGF0ZVJhbmdlU2VsZWN0ZWQoKTtcbiAgICBjb25zdCBzaW5nbGVEYXRlU2VsZWN0ZWQgPSB0aGlzLnNpbmdsZURhdGVTZWxlY3RlZCgpO1xuICAgIGNvbnN0IGN1c3RvbVJhbmdlID0ge1xuICAgICAgaWQ6IHRoaXMuZGF0ZU9wdGlvbnMoKT8uY3VzdG9tUmFuZ2VMYWJlbCB8fCAnJyxcbiAgICAgIGxhYmVsOiB0aGlzLmRhdGVPcHRpb25zKCk/LmN1c3RvbVJhbmdlTGFiZWwgfHwgJydcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuaXNTaW5nbGUoKSkge1xuICAgICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IGRheWpzKCk7XG5cbiAgICAgICAgdGhpcy5zdGFydERhdGUudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgICAgICBjdXJyZW50LnNldCgnaG91cicsIDEwKS5zZXQoJ21pbnV0ZScsIDMwKTtcbiAgICAgICAgICAgIC8vIGN1cnJlbnQuaG91cihub3cuaG91cigpKS5taW51dGUobm93Lm1pbnV0ZSgpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmxvZygnY3VycmVudCcsIGN1cnJlbnQsIG5vdywgbm93LmhvdXIoKSwgbm93Lm1pbnV0ZSgpKTtcblxuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVuZERhdGUudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgICAgICBjdXJyZW50LmhvdXIobm93LmhvdXIoKSkubWludXRlKG5vdy5taW51dGUoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLnN0YXJ0RGF0ZSgpLCB0aGlzLmVuZERhdGUoKSk7XG4gICAgICB9XG4gICAgICBpZiAoc2luZ2xlRGF0ZVNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc3RhcnREYXRlLnNldChzaW5nbGVEYXRlU2VsZWN0ZWQuZGF0ZSBhcyBkYXlqcy5EYXlqcyk7XG4gICAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoc2luZ2xlRGF0ZVNlbGVjdGVkLmRhdGUgYXMgZGF5anMuRGF5anMpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW5kZXJSYW5nZXMoKTtcblxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGVSYW5nZVNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUXVpY2tSYW5nZS5zZXQoZGF0ZVJhbmdlU2VsZWN0ZWQucXVpY2tSYW5nZUlkID8gZGF0ZVJhbmdlU2VsZWN0ZWQucXVpY2tSYW5nZUlkIDogY3VzdG9tUmFuZ2UuaWQpO1xuICAgICAgdGhpcy5jaG9zZW5RdWlja1JhbmdlLnNldChkYXRlUmFuZ2VTZWxlY3RlZC5xdWlja1JhbmdlSWQgPz8gY3VzdG9tUmFuZ2UuaWQpO1xuXG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoZGF0ZVJhbmdlU2VsZWN0ZWQuc3RhcnREYXRlIGFzIGRheWpzLkRheWpzKTtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoZGF0ZVJhbmdlU2VsZWN0ZWQuZW5kRGF0ZSBhcyBkYXlqcy5EYXlqcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2Uuc2V0KGN1c3RvbVJhbmdlLmlkKTtcbiAgICAgIHRoaXMuY2hvc2VuUXVpY2tSYW5nZS5zZXQoY3VzdG9tUmFuZ2UuaWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2UoKSA9PT0gdGhpcy5kYXRlT3B0aW9ucygpPy5jdXN0b21SYW5nZUxhYmVsKSB7XG4gICAgICB0aGlzLnNob3dDYWxUYWJsZUluUmFuZ2VzLnNldCh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJSYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlV2lkdGgoKSB7XG4gICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm91dFVwZGF0ZVdpZHRoLmVtaXQoMSk7XG4gICAgfSkgYXMgdW5rbm93biBhcyBudW1iZXI7XG5cbiAgICB0aGlzLnRpbWVvdXRzLnVwZGF0ZShpZHMgPT4gWy4uLmlkcywgdGltZW91dElkXSk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclJhbmdlcygpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICB0aGlzLnNob3dDYWxUYWJsZUluUmFuZ2VzLnNldCh0cnVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByYW5nZXNEZWZhdWx0ID0gZ2V0RGF0ZVJhbmdlRGVmYXVsdCgpO1xuICAgIGNvbnN0IHJhbmdlcyA9IHRoaXMuZGF0ZU9wdGlvbnMoKT8ucmFuZ2VzO1xuXG4gICAgdGhpcy5xdWlja1Jhbmdlc0FycmF5LnNldChbXSk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiByYW5nZXMpIHtcbiAgICAgIGNvbnN0IHJhbmdlVmFsdWUgPSByYW5nZXNEZWZhdWx0W2tleV07XG4gICAgICBjb25zdCBzdGFydCA9IGRheWpzKHJhbmdlVmFsdWVbMF0pO1xuICAgICAgY29uc3QgZW5kID0gZGF5anMocmFuZ2VWYWx1ZVsxXSk7XG5cbiAgICAgIHRoaXMucXVpY2tSYW5nZXNBcnJheS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQucHVzaCh7XG4gICAgICAgICAgaWQ6IGtleSxcbiAgICAgICAgICBsYWJlbDogcmFuZ2VzW2tleV0sXG4gICAgICAgICAgdmFsdWVzOiBbc3RhcnQsIGVuZF1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0N1c3RvbVJhbmdlTGFiZWwoKSAmJiB0aGlzLmRhdGVPcHRpb25zKCk/LmN1c3RvbVJhbmdlTGFiZWwpIHtcbiAgICAgIHRoaXMucXVpY2tSYW5nZXNBcnJheS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQucHVzaCh7XG4gICAgICAgICAgaWQ6IHRoaXMuZGF0ZU9wdGlvbnMoKT8uY3VzdG9tUmFuZ2VMYWJlbCB8fCAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5kYXRlT3B0aW9ucygpPy5jdXN0b21SYW5nZUxhYmVsIHx8ICcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmV4dGVuZFJhbmdlcygpKSB7XG4gICAgICB0aGlzLnF1aWNrUmFuZ2VzQXJyYXkudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnVuc2hpZnQoLi4udGhpcy5leHRlbmRSYW5nZXMoKSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnF1aWNrUmFuZ2VzQXJyYXkoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2hvd0NhbFRhYmxlSW5SYW5nZXMuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2FuY2VsKCkge1xuICAgIHRoaXMub3V0Q2FuY2VsLmVtaXQoJycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQaWNrZXJEYXRlKGV2ZW50OiBJRW1pdERhdGVDYWxlbmRhcikge1xuICAgIGNvbnNvbGUubG9nKCdoYW5kbGVyUGlja2VyRGF0ZScsIGV2ZW50KTtcblxuICAgIHRoaXMuY2hvc2VuU2luZ2xlRGF0ZS5zZXQoe1xuICAgICAgZGlzcGxheUxhYmVsOiBldmVudC5kaXNwbGF5TGFiZWwsXG4gICAgICBkYXRlOiBldmVudC5zdGFydERhdGUsXG4gICAgICB2YWx1ZXM6IGV2ZW50LmRldGFpbERhdGVQaWNrZXIuc3RhcnQoKVxuICAgIH0pO1xuICAgIC8vIGlmICghdGhpcy5pc1NpbmdsZSgpICYmIGV2ZW50LnN0YXJ0RGF0ZSAmJiAhZXZlbnQuZW5kRGF0ZSkge1xuICAgIC8vICAgY29uc3QgZW5kVGltZSA9IGV2ZW50LmRldGFpbERhdGVQaWNrZXIuZW5kKCk7XG4gICAgLy8gICBldmVudC5lbmREYXRlID0gZXZlbnQuc3RhcnREYXRlLmNsb25lKCkuaG91cihlbmRUaW1lLmhvdXIgYXMgbnVtYmVyKS5taW51dGUoZW5kVGltZS5taW51dGUgYXMgbnVtYmVyKS5zZWNvbmQoNTkpO1xuICAgIC8vIH1cbiAgICB0aGlzLmNob3NlbkRhdGVSYW5nZS5zZXQoe1xuICAgICAgcXVpY2tSYW5nZUlkOiB0aGlzLmNob3NlblF1aWNrUmFuZ2UoKSxcbiAgICAgIC4uLmV2ZW50XG4gICAgfSk7XG4gICAgY29uc3QgY2hvc2VuU2luZ2xlRGF0ZSA9IHRoaXMuY2hvc2VuU2luZ2xlRGF0ZSgpO1xuICAgIGNvbnN0IGNob3NlbkRhdGVSYW5nZSA9IHRoaXMuY2hvc2VuRGF0ZVJhbmdlKCk7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGUoKSAmJiBjaG9zZW5TaW5nbGVEYXRlKSB7XG4gICAgICB0aGlzLm91dFNlbGVjdFNpbmdsZURhdGUuZW1pdChjaG9zZW5TaW5nbGVEYXRlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNob3NlbkRhdGVSYW5nZSB8fCAoIWNob3NlbkRhdGVSYW5nZS5zdGFydERhdGUgJiYgIWNob3NlbkRhdGVSYW5nZS5lbmREYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dFNlbGVjdERhdGVSYW5nZS5lbWl0KGNob3NlbkRhdGVSYW5nZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrUmFuZ2UoZTogRXZlbnQsIHJhbmdlOiBJRGF0ZVJhbmdlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnVwZGF0ZVdpZHRoKCk7XG4gICAgdGhpcy5jaG9zZW5RdWlja1JhbmdlLnNldChyYW5nZS5pZCk7XG5cbiAgICBpZiAocmFuZ2UuaWQgPT09IHRoaXMuZGF0ZU9wdGlvbnMoKT8uY3VzdG9tUmFuZ2VMYWJlbCkge1xuICAgICAgdGhpcy5jYWxlbmRhclNob3dpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5zaG93Q2FsVGFibGVJblJhbmdlcy5zZXQodHJ1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXh0ZW5kUmFuZ2VzKCkpIHtcbiAgICAgIGNvbnN0IGZpbmRFeHRlcm5hbFJhbmdlID0gdGhpcy5leHRlbmRSYW5nZXMoKS5maW5kKGl0ZW0gPT4gaXRlbS5sYWJlbCA9PT0gcmFuZ2UuaWQpO1xuXG4gICAgICBpZiAoZmluZEV4dGVybmFsUmFuZ2UgJiYgcmFuZ2UuaWQgPT09IGZpbmRFeHRlcm5hbFJhbmdlLmxhYmVsKSB7XG4gICAgICAgIGlmIChmaW5kRXh0ZXJuYWxSYW5nZS52YWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLm91dFNlbGVjdERhdGVSYW5nZS5lbWl0KHsgcXVpY2tSYW5nZUlkOiBmaW5kRXh0ZXJuYWxSYW5nZS5pZCwgZGlzcGxheUxhYmVsOiBmaW5kRXh0ZXJuYWxSYW5nZS5sYWJlbCwgc3RhcnREYXRlOiBmaW5kRXh0ZXJuYWxSYW5nZS52YWx1ZXNbMF0sIGVuZERhdGU6IGZpbmRFeHRlcm5hbFJhbmdlLnZhbHVlc1sxXSB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm91dFNlbGVjdERhdGVSYW5nZS5lbWl0KHsgcXVpY2tSYW5nZUlkOiBmaW5kRXh0ZXJuYWxSYW5nZS5pZCwgZGlzcGxheUxhYmVsOiBmaW5kRXh0ZXJuYWxSYW5nZS5sYWJlbCwgc3RhcnREYXRlOiB1bmRlZmluZWQsIGVuZERhdGU6IHVuZGVmaW5lZCB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRhdGVzID0gcmFuZ2UudmFsdWVzID8/IFtdO1xuXG4gICAgLy8gdGhpcy5zdGFydERhdGUuc2V0KGRhdGVzWzBdLmNsb25lKCkuaG91cigwKS5taW51dGUoMCkuc2Vjb25kKDApKTtcbiAgICAvLyB0aGlzLmVuZERhdGUuc2V0KGRhdGVzWzFdLmNsb25lKCkuaG91cigyMykubWludXRlKDU5KS5zZWNvbmQoNTkpKTtcbiAgICAvLyB0aGlzLnRpbWVWYWx1ZSA9IHsgaG91cjogMCwgdG9Ib3VyOiAwLCBtaW51dGU6IDIzLCB0b01pbnV0ZTogNTkgfTtcbiAgICAvLyB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMubGVmdC5zZWxlY3RlZEhvdXIgPSAwO1xuICAgIC8vIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcy5sZWZ0LnNlbGVjdGVkTWludXRlID0gMDtcbiAgICAvLyB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMucmlnaHQuc2VsZWN0ZWRIb3VyID0gMjM7XG4gICAgLy8gdGhpcy50aW1lcGlja2VyVmFyaWFibGVzLnJpZ2h0LnNlbGVjdGVkTWludXRlID0gNTk7XG5cbiAgICAvLyB0aGlzLnNob3dSYW5nZUxhYmVsT25JbnB1dCAmJiBsYWJlbCAhPT0gdGhpcy5sb2NhbGVEYXkuY3VzdG9tUmFuZ2VMYWJlbCA/IHRoaXMuY2hvc2VuTGFiZWwgPSBsYWJlbCA6IHRoaXMuY2FsY3VsYXRlQ2hvc2VuTGFiZWwoKTtcblxuICAgIC8vIC8vIHRoaXMuYXV0b0FwcGx5LnNldCh0cnVlKTtcbiAgICAvLyBpZiAoIXRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgLy8gICBpZih0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgLy8gICAgIHRoaXMuc3RhcnREYXRlLnNldCh0aGlzLnN0YXJ0RGF0ZSgpPy5zdGFydE9mKCdkYXknKSk7XG4gICAgLy8gICB9XG4gICAgLy8gICBpZih0aGlzLmVuZERhdGUoKSkge1xuICAgIC8vICAgICB0aGlzLmVuZERhdGUuc2V0KHRoaXMuZW5kRGF0ZSgpPy5lbmRPZignZGF5JykpO1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICAvLyBpZiAoIXRoaXMuYWx3YXlzU2hvd0NhbGVuZGFycygpKSB7XG4gICAgLy8gICB0aGlzLmNhbGVuZGFyU2hvd2luZy5zZXQoZmFsc2UpO1xuICAgIC8vIH1cbiAgICAvLyB0aGlzLm91dENsaWNrUmFuZ2UuZW1pdChyYW5nZSk7XG5cbiAgICBpZiAoIXRoaXMua2VlcENhbGVuZGFyT3BlbmluZ1dpdGhSYW5nZSgpIHx8ICF0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMoKSkge1xuICAgICAgdGhpcy5vdXRTZWxlY3REYXRlUmFuZ2UuZW1pdCh7IHF1aWNrUmFuZ2VJZDogcmFuZ2UuaWQsIGRpc3BsYXlMYWJlbDogcmFuZ2UubGFiZWwsIHN0YXJ0RGF0ZTogcmFuZ2UudmFsdWVzPy5bMF0sIGVuZERhdGU6IHJhbmdlLnZhbHVlcz8uWzFdIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmICh0aGlzLnRpbWVQaWNrZXIpIHtcbiAgICAvLyAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5sZWZ0KTtcbiAgICAvLyAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5yaWdodCk7XG4gICAgLy8gfVxuICAgIC8vIGlmICh0aGlzLmdldE1heERhdGUoKSAmJiB0aGlzLmdldE1heERhdGUoKS5pc1NhbWUoZGF0ZXNbMF0sICdtb250aCcpKSB7XG4gICAgLy8gICB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggPSB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoLm1vbnRoKGRhdGVzWzBdLm1vbnRoKCkpO1xuICAgIC8vICAgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoID0gdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoICYmIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC55ZWFyKGRhdGVzWzBdLnllYXIoKSk7XG4gICAgLy8gICB0aGlzLmxlZnRDYWxlbmRhci5tb250aCA9IHRoaXMubGVmdENhbGVuZGFyLm1vbnRoICYmIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLm1vbnRoKGRhdGVzWzBdLm1vbnRoKCkgLSAxKTtcbiAgICAvLyAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoID0gdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGgueWVhcihkYXRlc1sxXS55ZWFyKCkpO1xuXG4gICAgLy8gICByZXR1cm4gdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgICAvLyB9XG4gICAgLy8gdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggPSB0aGlzLmxlZnRDYWxlbmRhci5tb250aCAmJiB0aGlzLmxlZnRDYWxlbmRhci5tb250aC5tb250aChkYXRlc1swXS5tb250aCgpKTtcbiAgICAvLyB0aGlzLmxlZnRDYWxlbmRhci5tb250aCA9IHRoaXMubGVmdENhbGVuZGFyLm1vbnRoICYmIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLnllYXIoZGF0ZXNbMF0ueWVhcigpKTtcbiAgICAvLyBjb25zdCBuZXh0TW9udGggPSBkYXRlc1swXS5jbG9uZSgpLmFkZCgxLCAnbW9udGgnKTtcblxuICAgIC8vIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMucmlnaHRDYWxlbmRhci5tb250aCAmJiB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGgubW9udGgobmV4dE1vbnRoLm1vbnRoKCkpO1xuICAgIC8vIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMucmlnaHRDYWxlbmRhci5tb250aCAmJiB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGgueWVhcihuZXh0TW9udGgueWVhcigpKTtcbiAgICAvLyB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0NhbmNlbChldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvLyB0aGlzLnN0YXJ0RGF0ZS5zZXQoZGF5anMoMCkpO1xuICAgIC8vIHRoaXMuZW5kRGF0ZS5zZXQoZGF5anMoMCkpO1xuICAgIHRoaXMub3V0Q2FuY2VsLmVtaXQoJycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoZmxhZ01vdXNlOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlLmVtaXQoZmxhZ01vdXNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRnVuY3Rpb25zQ29udHJvbChldmVudDogSUNhbGVuZGFyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmNhbGVuZGFyRnVuY3Rpb25Db250cm9sRXZlbnQuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudGltZW91dHMoKS5mb3JFYWNoKGl0ZW0gPT4gY2xlYXJUaW1lb3V0KGl0ZW0pKTtcbiAgICAvLyB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgLy8gdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdiAjcGlja2VyQ29udGFpbmVyXG4gIGNsYXNzPVwibGlicy11aS1jb21wb25lbnQtY3VzdG9tX3JhbmdlcyBmbGV4IHJvdW5kZWQtWzRweF0gYmctWyNmZmZmZmZdIHotWzEwMDBdIG92ZXJmbG93LVtoaWRkZW5dIHJlbGF0aXZlIGlubGluZVwiXG4gIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBvc2l0aW9uUXVpY2tSYW5nZXMoKSA9PT0gJ3JpZ2h0J1wiPlxuICBAaWYgKCFpc1NpbmdsZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtcmFuZ2VzIHt7IGNsYXNzSW5jbHVkZSgpIHx8ICcnIH19XCJcbiAgICAgIFtjbGFzcy5ib3JkZXItbC1bI2U2ZThlZF1dPVwicG9zaXRpb25RdWlja1JhbmdlcygpID09PSAncmlnaHQnICYmIHNob3dDYWxUYWJsZUluUmFuZ2VzKClcIlxuICAgICAgW2NsYXNzLmJvcmRlci1sXT1cInBvc2l0aW9uUXVpY2tSYW5nZXMoKSA9PT0gJ3JpZ2h0JyAmJiBzaG93Q2FsVGFibGVJblJhbmdlcygpXCJcbiAgICAgIFtjbGFzcy5ib3JkZXItci1bI2U2ZThlZF1dPVwicG9zaXRpb25RdWlja1JhbmdlcygpID09PSAnbGVmdCcgJiYgc2hvd0NhbFRhYmxlSW5SYW5nZXMoKVwiXG4gICAgICBbY2xhc3MuYm9yZGVyLXJdPVwicG9zaXRpb25RdWlja1JhbmdlcygpID09PSAnbGVmdCcgJiYgc2hvd0NhbFRhYmxlSW5SYW5nZXMoKVwiXG4gICAgICBbY2xhc3MuIW1pbi1oLVsyNjBweF1dPVwic2hvd0NhbFRhYmxlSW5SYW5nZXMoKSAmJiAhaXNTaW5nbGUoKVwiXG4gICAgICBbY2xhc3MuIW1pbi1oLVszMDBweF1dPVwiaGFzVGltZVBpY2tlcigpICYmICFpc1NpbmdsZSgpXCJcbiAgICAgIFtjbGFzcy4hdy1bMTYwcHhdXT1cIiF3aWR0aEJ5UGFyZW50KClcIlxuICAgICAgW2NsYXNzLiF3LWZ1bGxdPVwid2lkdGhCeVBhcmVudCgpXCI+XG4gICAgICBAZm9yIChyYW5nZSBvZiBxdWlja1Jhbmdlc0FycmF5KCk7IHRyYWNrIHJhbmdlLmlkKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBob3ZlcjpiZy1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0zKV0gY3Vyc29yLXBvaW50ZXIgcHgtWzE2cHhdIHB5LVs4cHhdXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1zZWxlY3RlZC1yYW5nZV09XCJyYW5nZS5pZCA9PT0gY2hvc2VuUXVpY2tSYW5nZSgpICYmIHNob3dDdXN0b21SYW5nZUxhYmVsKClcIlxuICAgICAgICAgIFtjbGFzcy5iZy1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0zKV1dPVwicmFuZ2UuaWQgPT09IGNob3NlblF1aWNrUmFuZ2UoKSB8fCByYW5nZS5pZCA9PT0gc2VsZWN0ZWRRdWlja1JhbmdlKClcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2tSYW5nZSgkZXZlbnQsIHJhbmdlKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyIGZsZXggdGV4dC1bIzMzMzMzM10gbWluLXctMCB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cInttYXhXaWR0aDoxNjAsZGlyZWN0aW9uOid0b3AnLHpJbmRleDooekluZGV4KCkgfHwxMDAwKSArIDF9XCJcbiAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJyYW5nZS5sYWJlbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2tSYW5nZSgkZXZlbnQsIHJhbmdlKVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGkgY2xhc3M9XCJ0ZXh0LVsxMnB4XSBtbC1bMTZweF1cIlxuICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktaWNvbi1jaGVja109XCJyYW5nZS5pZCA9PT0gc2VsZWN0ZWRRdWlja1JhbmdlKClcIlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGVmYXVsdCldXT1cInJhbmdlLmlkID09PSBzZWxlY3RlZFF1aWNrUmFuZ2UoKVwiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChzaG93Q2FsVGFibGVJblJhbmdlcygpKSB7XG4gICAgPGRpdiBjbGFzcz1cIm0tWzE2cHhdIHctZnVsbFwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kYXRldGltZS1waWNrZXItY3VzdG9tX3Jhbmdlcy1jYWxlbmRhciBbaXNTaW5nbGVdPVwiaXNTaW5nbGUoKVwiXG4gICAgICAgIFthdXRvQXBwbHldPVwiYXV0b0FwcGx5KClcIlxuICAgICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICAgIFtkYXRlT3B0aW9uc109XCJkYXRlT3B0aW9ucygpXCJcbiAgICAgICAgW2hhc1RpbWVQaWNrZXJdPVwiaGFzVGltZVBpY2tlcigpXCJcbiAgICAgICAgW3F1aWNrUmFuZ2VzQXJyYXldPVwicXVpY2tSYW5nZXNBcnJheSgpXCJcbiAgICAgICAgW3N0YXJ0RGF0ZV09XCJzdGFydERhdGUoKVwiXG4gICAgICAgIFtlbmREYXRlXT1cImVuZERhdGUoKVwiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3ctZnVsbCdcIlxuICAgICAgICAob3V0Q2FuY2VsKT1cImhhbmRsZXJDYW5jZWwoKVwiXG4gICAgICAgIChvdXRQaWNrZXJEYXRlKT1cImhhbmRsZXJQaWNrZXJEYXRlKCRldmVudClcIlxuICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25zQ29udHJvbCgkZXZlbnQpXCJcbiAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nZUZsYWdNb3VzZSgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJhbmdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9jdXN0b20tcmFuZ2VzL2N1c3RvbS1yYW5nZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL3BpY2tlci9zcmMvY3VzdG9tLXJhbmdlcy9jdXN0b20tcmFuZ2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUFjLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLMUcsT0FBTyxFQUFFLDJEQUEyRCxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZTVHLE1BQU0sT0FBTyxtREFBbUQ7SUFDOUQsZUFBZTtJQUNMLG9CQUFvQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUM5QyxnQkFBZ0IsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELGtCQUFrQixHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztJQUM1RSxnQkFBZ0IsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO0lBRXpGLGVBQWUsR0FBRyxN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QUN0RyxzREFBc0Q7UUFFdEQsNEdBQTRHO1FBQzVHLDBHQUEwRztRQUMxRywwQkFBMEI7UUFFMUIsT0FBTztJQUNULENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxLQUFZO1FBQ3ZDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixnQ0FBZ0M7UUFDaEMsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFUyxzQkFBc0IsQ0FBQyxTQUFxQjtRQUNwRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxLQUFvQztRQUNwRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELHlCQUF5QjtRQUN6Qiw2QkFBNkI7SUFDL0IsQ0FBQzt3R0FuVlUsbURBQW1EOzRGQUFuRCxtREFBbUQsc2tHQ3hCaEUsMnpGQXNEQSw2cEJEbkNJLGVBQWUsK0JBQ2YsMkRBQTJELHFlQUMzRCxnQ0FBZ0M7OzRGQUd2QixtREFBbUQ7a0JBYi9ELFNBQVM7K0JBRUUsa0RBQWtELGNBR2hELElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxlQUFlO3dCQUNmLDJEQUEyRDt3QkFDM0QsZ0NBQWdDO3FCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB7IGRlZmF1bHRMb2NhbGVDb25maWcsIGdldERhdGVPcHRpb25zLCBnZXREYXRlUmFuZ2VEZWZhdWx0IH0gZnJvbSBcIi4uL2RlZmluZXMvZGF0ZS1vcHRpb25zLmRlZmluZVwiO1xuaW1wb3J0IHsgSUVtaXREYXRlQ2FsZW5kYXIsIElFbWl0RGF0ZVJhbmdlLCBJRW1pdFNpbmdsZURhdGUgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9jYWxlbmRhci1lbWl0LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSURhdGVSYW5nZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2NhbGVuZGFyLXZhcmlhYmxlcy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IElDYWxlbmRhckZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IExvY2FsaXphdGlvbkNvbmZpZyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3BpY2tlci5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSBcIi4vY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1kYXRldGltZS1waWNrZXItY3VzdG9tX3JhbmdlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tcmFuZ2VzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLXJhbmdlcy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzRGF0ZXRpbWVQaWNrZXJDdXN0b21SYW5nZXNDYWxlbmRhckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgc2hvd0NhbFRhYmxlSW5SYW5nZXMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgcXVpY2tSYW5nZXNBcnJheSA9IHNpZ25hbDxBcnJheTxJRGF0ZVJhbmdlPj4oW10pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRRdWlja1JhbmdlID0gc2lnbmFsPHN0cmluZz4oJycpOyAvLyBxdWljayByYW5nZSDEkcOjIMSRxrDhu6NjIGzGsHUgdHLGsOG7m2MgxJHDs1xuICBwcm90ZWN0ZWQgY2hvc2VuUXVpY2tSYW5nZSA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7IC8vIHF1aWNrIHJhbmdlIMSRYW5nIMSRxrDhu6NjIGNo4buNblxuXG4gIHByaXZhdGUgY2FsZW5kYXJTaG93aW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSB0aW1lb3V0cyA9IHNpZ25hbDxBcnJheTxudW1iZXI+PihbXSk7XG4gIHByaXZhdGUgY2FsZW5kYXJGdW5jdGlvbkNvbnRyb2xFdmVudCA9IHNpZ25hbDxJQ2FsZW5kYXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBjaG9zZW5TaW5nbGVEYXRlID0gc2lnbmFsPElFbWl0U2luZ2xlRGF0ZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBjaG9zZW5EYXRlUmFuZ2UgPSBzaWduYWw8SUVtaXREYXRlUmFuZ2UgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqIElOUFVUICovXG4gIC8vIHJlYWRvbmx5IFNlbGVjdGVkUXVpY2tSYW5nZSA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oMTIwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMTIwMCB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGV4dGVuZFJhbmdlcyA9IGlucHV0PEFycmF5PElEYXRlUmFuZ2U+PihbXSk7XG4gIHJlYWRvbmx5IHdpZHRoQnlQYXJlbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGF1dG9BcHBseSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbWluRGF0ZSA9IGlucHV0PGRheWpzLkRheWpzIHwgc3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBtYXhEYXRlID0gaW5wdXQ8ZGF5anMuRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgcmVhZG9ubHkgcG9zaXRpb25RdWlja1JhbmdlcyA9IGlucHV0PCdsZWZ0JyB8ICdyaWdodCcsICdsZWZ0JyB8ICdyaWdodCc+KCdsZWZ0JywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ2xlZnQnIH0pO1xuICByZWFkb25seSBpc1NpbmdsZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaGFzVGltZVBpY2tlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBmbGFnTW91c2UgPSBpbnB1dDxJRmxhZ01vdXNlPih7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlIH0pO1xuICByZWFkb25seSBkYXRlT3B0aW9ucyA9IGlucHV0PExvY2FsaXphdGlvbkNvbmZpZz4oeyAuLi5kZWZhdWx0TG9jYWxlQ29uZmlnKCksIC4uLmdldERhdGVPcHRpb25zKCkgfSk7XG4gIHJlYWRvbmx5IGFsd2F5c1Nob3dDYWxlbmRhcnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHN0YXJ0RGF0ZSA9IG1vZGVsPGRheWpzLkRheWpzIHwgdW5kZWZpbmVkPihkYXlqcygpLnN0YXJ0T2YoJ2RheScpKTtcbiAgcmVhZG9ubHkgZW5kRGF0ZSA9IG1vZGVsPGRheWpzLkRheWpzIHwgdW5kZWZpbmVkPihkYXlqcygpLmVuZE9mKCdkYXknKSk7XG4gIHJlYWRvbmx5IHNob3dDdXN0b21SYW5nZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkga2VlcENhbGVuZGFyT3BlbmluZ1dpdGhSYW5nZSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgc2luZ2xlRGF0ZVNlbGVjdGVkID0gaW5wdXQ8SUVtaXRTaW5nbGVEYXRlIHwgdW5kZWZpbmVkLCBJRW1pdFNpbmdsZURhdGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBkYXRlID0gdmFsdWUuZGF0ZTtcblxuICAgICAgaWYgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICBkYXRlID0gZGF5anMoZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZhbHVlLFxuICAgICAgICBkYXRlXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG4gIHJlYWRvbmx5IGRhdGVSYW5nZVNlbGVjdGVkID0gaW5wdXQ8SUVtaXREYXRlUmFuZ2UgfCB1bmRlZmluZWQsIElFbWl0RGF0ZVJhbmdlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgc3RhcnREYXRlID0gdmFsdWUuc3RhcnREYXRlO1xuICAgICAgbGV0IGVuZERhdGUgPSB2YWx1ZS5lbmREYXRlO1xuXG4gICAgICBpZiAodHlwZW9mIHN0YXJ0RGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3RhcnREYXRlID0gZGF5anMoc3RhcnREYXRlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlbmREYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICBlbmREYXRlID0gZGF5anMoZW5kRGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZhbHVlLFxuICAgICAgICBzdGFydERhdGUsXG4gICAgICAgIGVuZERhdGVcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvKiogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2UgPSBvdXRwdXQ8SUZsYWdNb3VzZT4oKTtcbiAgcmVhZG9ubHkgb3V0VXBkYXRlV2lkdGggPSBvdXRwdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBvdXRDYW5jZWwgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRTZWxlY3RTaW5nbGVEYXRlID0gb3V0cHV0PElFbWl0U2luZ2xlRGF0ZT4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0RGF0ZVJhbmdlID0gb3V0cHV0PElFbWl0RGF0ZVJhbmdlPigpO1xuICByZWFkb25seSBvdXRDbGlja1JhbmdlID0gb3V0cHV0PElEYXRlUmFuZ2U+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHVudHJhY2tlZCh0aGlzLm9uQWZ0ZXJWaWV3SW5pdC5iaW5kKHRoaXMpKSk7XG4gIH1cblxuICBwcml2YXRlIG9uQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlLnNldChkYXlqcygpLnN0YXJ0T2YoJ2RheScpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVuZERhdGUoKSkge1xuICAgICAgdGhpcy5lbmREYXRlLnNldChkYXlqcygpLmVuZE9mKCdkYXknKSk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGVSYW5nZVNlbGVjdGVkID0gdGhpcy5kYXRlUmFuZ2VTZWxlY3RlZCgpO1xuICAgIGNvbnN0IHNpbmdsZURhdGVTZWxlY3RlZCA9IHRoaXMuc2luZ2xlRGF0ZVNlbGVjdGVkKCk7XG4gICAgY29uc3QgY3VzdG9tUmFuZ2UgPSB7XG4gICAgICBpZDogdGhpcy5kYXRlT3B0aW9ucygpPy5jdXN0b21SYW5nZUxhYmVsIHx8ICcnLFxuICAgICAgbGFiZWw6IHRoaXMuZGF0ZU9wdGlvbnMoKT8uY3VzdG9tUmFuZ2VMYWJlbCB8fCAnJ1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gZGF5anMoKTtcblxuICAgICAgICB0aGlzLnN0YXJ0RGF0ZS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQuc2V0KCdob3VyJywgMTApLnNldCgnbWludXRlJywgMzApO1xuICAgICAgICAgICAgLy8gY3VycmVudC5ob3VyKG5vdy5ob3VyKCkpLm1pbnV0ZShub3cubWludXRlKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKCdjdXJyZW50JywgY3VycmVudCwgbm93LCBub3cuaG91cigpLCBub3cubWludXRlKCkpO1xuXG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZW5kRGF0ZS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQuaG91cihub3cuaG91cigpKS5taW51dGUobm93Lm1pbnV0ZSgpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc3RhcnREYXRlKCksIHRoaXMuZW5kRGF0ZSgpKTtcbiAgICAgIH1cbiAgICAgIGlmIChzaW5nbGVEYXRlU2VsZWN0ZWQpIHtcbiAgICAgICAgdGhpcy5zdGFydERhdGUuc2V0KHNpbmdsZURhdGVTZWxlY3RlZC5kYXRlIGFzIGRheWpzLkRheWpzKTtcbiAgICAgICAgdGhpcy5lbmREYXRlLnNldChzaW5nbGVEYXRlU2VsZWN0ZWQuZGF0ZSBhcyBkYXlqcy5EYXlqcyk7XG4gICAgICB9XG4gICAgICB0aGlzLnJlbmRlclJhbmdlcygpO1xuXG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZVJhbmdlU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRRdWlja1JhbmdlLnNldChkYXRlUmFuZ2VTZWxlY3RlZC5xdWlja1JhbmdlSWQgPyBkYXRlUmFuZ2VTZWxlY3RlZC5xdWlja1JhbmdlSWQgOiBjdXN0b21SYW5nZS5pZCk7XG4gICAgICB0aGlzLmNob3NlblF1aWNrUmFuZ2Uuc2V0KGRhdGVSYW5nZVNlbGVjdGVkLnF1aWNrUmFuZ2VJZCA/PyBjdXN0b21SYW5nZS5pZCk7XG5cbiAgICAgIHRoaXMuc3RhcnREYXRlLnNldChkYXRlUmFuZ2VTZWxlY3RlZC5zdGFydERhdGUgYXMgZGF5anMuRGF5anMpO1xuICAgICAgdGhpcy5lbmREYXRlLnNldChkYXRlUmFuZ2VTZWxlY3RlZC5lbmREYXRlIGFzIGRheWpzLkRheWpzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUXVpY2tSYW5nZS5zZXQoY3VzdG9tUmFuZ2UuaWQpO1xuICAgICAgdGhpcy5jaG9zZW5RdWlja1JhbmdlLnNldChjdXN0b21SYW5nZS5pZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkUXVpY2tSYW5nZSgpID09PSB0aGlzLmRhdGVPcHRpb25zKCk/LmN1c3RvbVJhbmdlTGFiZWwpIHtcbiAgICAgIHRoaXMuc2hvd0NhbFRhYmxlSW5SYW5nZXMuc2V0KHRydWUpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlclJhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVXaWR0aCgpIHtcbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMub3V0VXBkYXRlV2lkdGguZW1pdCgxKTtcbiAgICB9KSBhcyB1bmtub3duIGFzIG51bWJlcjtcblxuICAgIHRoaXMudGltZW91dHMudXBkYXRlKGlkcyA9PiBbLi4uaWRzLCB0aW1lb3V0SWRdKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUmFuZ2VzKCkge1xuICAgIGlmICh0aGlzLmlzU2luZ2xlKCkpIHtcbiAgICAgIHRoaXMuc2hvd0NhbFRhYmxlSW5SYW5nZXMuc2V0KHRydWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJhbmdlc0RlZmF1bHQgPSBnZXREYXRlUmFuZ2VEZWZhdWx0KCk7XG4gICAgY29uc3QgcmFuZ2VzID0gdGhpcy5kYXRlT3B0aW9ucygpPy5yYW5nZXM7XG5cbiAgICB0aGlzLnF1aWNrUmFuZ2VzQXJyYXkuc2V0KFtdKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIHJhbmdlcykge1xuICAgICAgY29uc3QgcmFuZ2VWYWx1ZSA9IHJhbmdlc0RlZmF1bHRba2V5XTtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gZGF5anMocmFuZ2VWYWx1ZVswXSk7XG4gICAgICBjb25zdCBlbmQgPSBkYXlqcyhyYW5nZVZhbHVlWzFdKTtcblxuICAgICAgdGhpcy5xdWlja1Jhbmdlc0FycmF5LnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5wdXNoKHtcbiAgICAgICAgICBpZDoga2V5LFxuICAgICAgICAgIGxhYmVsOiByYW5nZXNba2V5XSxcbiAgICAgICAgICB2YWx1ZXM6IFtzdGFydCwgZW5kXVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG93Q3VzdG9tUmFuZ2VMYWJlbCgpICYmIHRoaXMuZGF0ZU9wdGlvbnMoKT8uY3VzdG9tUmFuZ2VMYWJlbCkge1xuICAgICAgdGhpcy5xdWlja1Jhbmdlc0FycmF5LnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5wdXNoKHtcbiAgICAgICAgICBpZDogdGhpcy5kYXRlT3B0aW9ucygpPy5jdXN0b21SYW5nZUxhYmVsIHx8ICcnLFxuICAgICAgICAgIGxhYmVsOiB0aGlzLmRhdGVPcHRpb25zKCk/LmN1c3RvbVJhbmdlTGFiZWwgfHwgJydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXh0ZW5kUmFuZ2VzKCkpIHtcbiAgICAgIHRoaXMucXVpY2tSYW5nZXNBcnJheS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQudW5zaGlmdCguLi50aGlzLmV4dGVuZFJhbmdlcygpKTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucXVpY2tSYW5nZXNBcnJheSgpLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaG93Q2FsVGFibGVJblJhbmdlcy5zZXQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDYW5jZWwoKSB7XG4gICAgdGhpcy5vdXRDYW5jZWwuZW1pdCgnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBpY2tlckRhdGUoZXZlbnQ6IElFbWl0RGF0ZUNhbGVuZGFyKSB7XG4gICAgY29uc29sZS5sb2coJ2hhbmRsZXJQaWNrZXJEYXRlJywgZXZlbnQpO1xuXG4gICAgdGhpcy5jaG9zZW5TaW5nbGVEYXRlLnNldCh7XG4gICAgICBkaXNwbGF5TGFiZWw6IGV2ZW50LmRpc3BsYXlMYWJlbCxcbiAgICAgIGRhdGU6IGV2ZW50LnN0YXJ0RGF0ZSxcbiAgICAgIHZhbHVlczogZXZlbnQuZGV0YWlsRGF0ZVBpY2tlci5zdGFydCgpXG4gICAgfSk7XG4gICAgLy8gaWYgKCF0aGlzLmlzU2luZ2xlKCkgJiYgZXZlbnQuc3RhcnREYXRlICYmICFldmVudC5lbmREYXRlKSB7XG4gICAgLy8gICBjb25zdCBlbmRUaW1lID0gZXZlbnQuZGV0YWlsRGF0ZVBpY2tlci5lbmQoKTtcbiAgICAvLyAgIGV2ZW50LmVuZERhdGUgPSBldmVudC5zdGFydERhdGUuY2xvbmUoKS5ob3VyKGVuZFRpbWUuaG91ciBhcyBudW1iZXIpLm1pbnV0ZShlbmRUaW1lLm1pbnV0ZSBhcyBudW1iZXIpLnNlY29uZCg1OSk7XG4gICAgLy8gfVxuICAgIHRoaXMuY2hvc2VuRGF0ZVJhbmdlLnNldCh7XG4gICAgICBxdWlja1JhbmdlSWQ6IHRoaXMuY2hvc2VuUXVpY2tSYW5nZSgpLFxuICAgICAgLi4uZXZlbnRcbiAgICB9KTtcbiAgICBjb25zdCBjaG9zZW5TaW5nbGVEYXRlID0gdGhpcy5jaG9zZW5TaW5nbGVEYXRlKCk7XG4gICAgY29uc3QgY2hvc2VuRGF0ZVJhbmdlID0gdGhpcy5jaG9zZW5EYXRlUmFuZ2UoKTtcbiAgICBpZiAodGhpcy5pc1NpbmdsZSgpICYmIGNob3NlblNpbmdsZURhdGUpIHtcbiAgICAgIHRoaXMub3V0U2VsZWN0U2luZ2xlRGF0ZS5lbWl0KGNob3NlblNpbmdsZURhdGUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghY2hvc2VuRGF0ZVJhbmdlIHx8ICghY2hvc2VuRGF0ZVJhbmdlLnN0YXJ0RGF0ZSAmJiAhY2hvc2VuRGF0ZVJhbmdlLmVuZERhdGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub3V0U2VsZWN0RGF0ZVJhbmdlLmVtaXQoY2hvc2VuRGF0ZVJhbmdlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tSYW5nZShlOiBFdmVudCwgcmFuZ2U6IElEYXRlUmFuZ2UpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMudXBkYXRlV2lkdGgoKTtcbiAgICB0aGlzLmNob3NlblF1aWNrUmFuZ2Uuc2V0KHJhbmdlLmlkKTtcblxuICAgIGlmIChyYW5nZS5pZCA9PT0gdGhpcy5kYXRlT3B0aW9ucygpPy5jdXN0b21SYW5nZUxhYmVsKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyU2hvd2luZy5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLnNob3dDYWxUYWJsZUluUmFuZ2VzLnNldCh0cnVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5leHRlbmRSYW5nZXMoKSkge1xuICAgICAgY29uc3QgZmluZEV4dGVybmFsUmFuZ2UgPSB0aGlzLmV4dGVuZFJhbmdlcygpLmZpbmQoaXRlbSA9PiBpdGVtLmxhYmVsID09PSByYW5nZS5pZCk7XG5cbiAgICAgIGlmIChmaW5kRXh0ZXJuYWxSYW5nZSAmJiByYW5nZS5pZCA9PT0gZmluZEV4dGVybmFsUmFuZ2UubGFiZWwpIHtcbiAgICAgICAgaWYgKGZpbmRFeHRlcm5hbFJhbmdlLnZhbHVlcykge1xuICAgICAgICAgIHRoaXMub3V0U2VsZWN0RGF0ZVJhbmdlLmVtaXQoeyBxdWlja1JhbmdlSWQ6IGZpbmRFeHRlcm5hbFJhbmdlLmlkLCBkaXNwbGF5TGFiZWw6IGZpbmRFeHRlcm5hbFJhbmdlLmxhYmVsLCBzdGFydERhdGU6IGZpbmRFeHRlcm5hbFJhbmdlLnZhbHVlc1swXSwgZW5kRGF0ZTogZmluZEV4dGVybmFsUmFuZ2UudmFsdWVzWzFdIH0pO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0U2VsZWN0RGF0ZVJhbmdlLmVtaXQoeyBxdWlja1JhbmdlSWQ6IGZpbmRFeHRlcm5hbFJhbmdlLmlkLCBkaXNwbGF5TGFiZWw6IGZpbmRFeHRlcm5hbFJhbmdlLmxhYmVsLCBzdGFydERhdGU6IHVuZGVmaW5lZCwgZW5kRGF0ZTogdW5kZWZpbmVkIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGF0ZXMgPSByYW5nZS52YWx1ZXMgPz8gW107XG5cbiAgICAvLyB0aGlzLnN0YXJ0RGF0ZS5zZXQoZGF0ZXNbMF0uY2xvbmUoKS5ob3VyKDApLm1pbnV0ZSgwKS5zZWNvbmQoMCkpO1xuICAgIC8vIHRoaXMuZW5kRGF0ZS5zZXQoZGF0ZXNbMV0uY2xvbmUoKS5ob3VyKDIzKS5taW51dGUoNTkpLnNlY29uZCg1OSkpO1xuICAgIC8vIHRoaXMudGltZVZhbHVlID0geyBob3VyOiAwLCB0b0hvdXI6IDAsIG1pbnV0ZTogMjMsIHRvTWludXRlOiA1OSB9O1xuICAgIC8vIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcy5sZWZ0LnNlbGVjdGVkSG91ciA9IDA7XG4gICAgLy8gdGhpcy50aW1lcGlja2VyVmFyaWFibGVzLmxlZnQuc2VsZWN0ZWRNaW51dGUgPSAwO1xuICAgIC8vIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcy5yaWdodC5zZWxlY3RlZEhvdXIgPSAyMztcbiAgICAvLyB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMucmlnaHQuc2VsZWN0ZWRNaW51dGUgPSA1OTtcblxuICAgIC8vIHRoaXMuc2hvd1JhbmdlTGFiZWxPbklucHV0ICYmIGxhYmVsICE9PSB0aGlzLmxvY2FsZURheS5jdXN0b21SYW5nZUxhYmVsID8gdGhpcy5jaG9zZW5MYWJlbCA9IGxhYmVsIDogdGhpcy5jYWxjdWxhdGVDaG9zZW5MYWJlbCgpO1xuXG4gICAgLy8gLy8gdGhpcy5hdXRvQXBwbHkuc2V0KHRydWUpO1xuICAgIC8vIGlmICghdGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAvLyAgIGlmKHRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAvLyAgICAgdGhpcy5zdGFydERhdGUuc2V0KHRoaXMuc3RhcnREYXRlKCk/LnN0YXJ0T2YoJ2RheScpKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIGlmKHRoaXMuZW5kRGF0ZSgpKSB7XG4gICAgLy8gICAgIHRoaXMuZW5kRGF0ZS5zZXQodGhpcy5lbmREYXRlKCk/LmVuZE9mKCdkYXknKSk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIC8vIGlmICghdGhpcy5hbHdheXNTaG93Q2FsZW5kYXJzKCkpIHtcbiAgICAvLyAgIHRoaXMuY2FsZW5kYXJTaG93aW5nLnNldChmYWxzZSk7XG4gICAgLy8gfVxuICAgIC8vIHRoaXMub3V0Q2xpY2tSYW5nZS5lbWl0KHJhbmdlKTtcblxuICAgIGlmICghdGhpcy5rZWVwQ2FsZW5kYXJPcGVuaW5nV2l0aFJhbmdlKCkgfHwgIXRoaXMuYWx3YXlzU2hvd0NhbGVuZGFycygpKSB7XG4gICAgICB0aGlzLm91dFNlbGVjdERhdGVSYW5nZS5lbWl0KHsgcXVpY2tSYW5nZUlkOiByYW5nZS5pZCwgZGlzcGxheUxhYmVsOiByYW5nZS5sYWJlbCwgc3RhcnREYXRlOiByYW5nZS52YWx1ZXM/LlswXSwgZW5kRGF0ZTogcmFuZ2UudmFsdWVzPy5bMV0gfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgKHRoaXMudGltZVBpY2tlcikge1xuICAgIC8vICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKFNpZGVFbnVtLmxlZnQpO1xuICAgIC8vICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKFNpZGVFbnVtLnJpZ2h0KTtcbiAgICAvLyB9XG4gICAgLy8gaWYgKHRoaXMuZ2V0TWF4RGF0ZSgpICYmIHRoaXMuZ2V0TWF4RGF0ZSgpLmlzU2FtZShkYXRlc1swXSwgJ21vbnRoJykpIHtcbiAgICAvLyAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMucmlnaHRDYWxlbmRhci5tb250aCAmJiB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGgubW9udGgoZGF0ZXNbMF0ubW9udGgoKSk7XG4gICAgLy8gICB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggPSB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoLnllYXIoZGF0ZXNbMF0ueWVhcigpKTtcbiAgICAvLyAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoID0gdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGgubW9udGgoZGF0ZXNbMF0ubW9udGgoKSAtIDEpO1xuICAgIC8vICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggPSB0aGlzLmxlZnRDYWxlbmRhci5tb250aCAmJiB0aGlzLmxlZnRDYWxlbmRhci5tb250aC55ZWFyKGRhdGVzWzFdLnllYXIoKSk7XG5cbiAgICAvLyAgIHJldHVybiB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuICAgIC8vIH1cbiAgICAvLyB0aGlzLmxlZnRDYWxlbmRhci5tb250aCA9IHRoaXMubGVmdENhbGVuZGFyLm1vbnRoICYmIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLm1vbnRoKGRhdGVzWzBdLm1vbnRoKCkpO1xuICAgIC8vIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoID0gdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGgueWVhcihkYXRlc1swXS55ZWFyKCkpO1xuICAgIC8vIGNvbnN0IG5leHRNb250aCA9IGRhdGVzWzBdLmNsb25lKCkuYWRkKDEsICdtb250aCcpO1xuXG4gICAgLy8gdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoID0gdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoICYmIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5tb250aChuZXh0TW9udGgubW9udGgoKSk7XG4gICAgLy8gdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoID0gdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoICYmIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC55ZWFyKG5leHRNb250aC55ZWFyKCkpO1xuICAgIC8vIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrQ2FuY2VsKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vIHRoaXMuc3RhcnREYXRlLnNldChkYXlqcygwKSk7XG4gICAgLy8gdGhpcy5lbmREYXRlLnNldChkYXlqcygwKSk7XG4gICAgdGhpcy5vdXRDYW5jZWwuZW1pdCgnJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nZUZsYWdNb3VzZShmbGFnTW91c2U6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdChmbGFnTW91c2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGdW5jdGlvbnNDb250cm9sKGV2ZW50OiBJQ2FsZW5kYXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMuY2FsZW5kYXJGdW5jdGlvbkNvbnRyb2xFdmVudC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy50aW1lb3V0cygpLmZvckVhY2goaXRlbSA9PiBjbGVhclRpbWVvdXQoaXRlbSkpO1xuICAgIC8vIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICAvLyB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8ZGl2ICNwaWNrZXJDb250YWluZXJcbiAgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzIGZsZXggcm91bmRlZC1bNHB4XSBiZy1bI2ZmZmZmZl0gei1bMTAwMF0gb3ZlcmZsb3ctW2hpZGRlbl0gcmVsYXRpdmUgaW5saW5lXCJcbiAgW2NsYXNzLmZsZXgtcm93LXJldmVyc2VdPVwicG9zaXRpb25RdWlja1JhbmdlcygpID09PSAncmlnaHQnXCI+XG4gIEBpZiAoIWlzU2luZ2xlKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1jb21wb25lbnQtY3VzdG9tX3Jhbmdlcy1yYW5nZXMge3sgY2xhc3NJbmNsdWRlKCkgfHwgJycgfX1cIlxuICAgICAgW2NsYXNzLmJvcmRlci1sLVsjZTZlOGVkXV09XCJwb3NpdGlvblF1aWNrUmFuZ2VzKCkgPT09ICdyaWdodCcgJiYgc2hvd0NhbFRhYmxlSW5SYW5nZXMoKVwiXG4gICAgICBbY2xhc3MuYm9yZGVyLWxdPVwicG9zaXRpb25RdWlja1JhbmdlcygpID09PSAncmlnaHQnICYmIHNob3dDYWxUYWJsZUluUmFuZ2VzKClcIlxuICAgICAgW2NsYXNzLmJvcmRlci1yLVsjZTZlOGVkXV09XCJwb3NpdGlvblF1aWNrUmFuZ2VzKCkgPT09ICdsZWZ0JyAmJiBzaG93Q2FsVGFibGVJblJhbmdlcygpXCJcbiAgICAgIFtjbGFzcy5ib3JkZXItcl09XCJwb3NpdGlvblF1aWNrUmFuZ2VzKCkgPT09ICdsZWZ0JyAmJiBzaG93Q2FsVGFibGVJblJhbmdlcygpXCJcbiAgICAgIFtjbGFzcy4hbWluLWgtWzI2MHB4XV09XCJzaG93Q2FsVGFibGVJblJhbmdlcygpICYmICFpc1NpbmdsZSgpXCJcbiAgICAgIFtjbGFzcy4hbWluLWgtWzMwMHB4XV09XCJoYXNUaW1lUGlja2VyKCkgJiYgIWlzU2luZ2xlKClcIlxuICAgICAgW2NsYXNzLiF3LVsxNjBweF1dPVwiIXdpZHRoQnlQYXJlbnQoKVwiXG4gICAgICBbY2xhc3MuIXctZnVsbF09XCJ3aWR0aEJ5UGFyZW50KClcIj5cbiAgICAgIEBmb3IgKHJhbmdlIG9mIHF1aWNrUmFuZ2VzQXJyYXkoKTsgdHJhY2sgcmFuZ2UuaWQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGhvdmVyOmJnLVt2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTMpXSBjdXJzb3ItcG9pbnRlciBweC1bMTZweF0gcHktWzhweF1cIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLXNlbGVjdGVkLXJhbmdlXT1cInJhbmdlLmlkID09PSBjaG9zZW5RdWlja1JhbmdlKCkgJiYgc2hvd0N1c3RvbVJhbmdlTGFiZWwoKVwiXG4gICAgICAgICAgW2NsYXNzLmJnLVt2YXIoLS1saWJzLXVpLWNvbG9yLWxpZ2h0LTMpXV09XCJyYW5nZS5pZCA9PT0gY2hvc2VuUXVpY2tSYW5nZSgpIHx8IHJhbmdlLmlkID09PSBzZWxlY3RlZFF1aWNrUmFuZ2UoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGlja1JhbmdlKCRldmVudCwgcmFuZ2UpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNXIgZmxleCB0ZXh0LVsjMzMzMzMzXSBtaW4tdy0wIHctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckRpcmVjdGl2ZVxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwie21heFdpZHRoOjE2MCxkaXJlY3Rpb246J3RvcCcsekluZGV4Oih6SW5kZXgoKSB8fDEwMDApICsgMX1cIlxuICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInJhbmdlLmxhYmVsXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGlja1JhbmdlKCRldmVudCwgcmFuZ2UpXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWzEycHhdIG1sLVsxNnB4XVwiXG4gICAgICAgICAgICBbY2xhc3MubGlicy11aS1pY29uLWNoZWNrXT1cInJhbmdlLmlkID09PSBzZWxlY3RlZFF1aWNrUmFuZ2UoKVwiXG4gICAgICAgICAgICBbY2xhc3MudGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1kZWZhdWx0KV1dPVwicmFuZ2UuaWQgPT09IHNlbGVjdGVkUXVpY2tSYW5nZSgpXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuICBAaWYgKHNob3dDYWxUYWJsZUluUmFuZ2VzKCkpIHtcbiAgICA8ZGl2IGNsYXNzPVwibS1bMTZweF0gdy1mdWxsXCI+XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLXBpY2tlci1jdXN0b21fcmFuZ2VzLWNhbGVuZGFyIFtpc1NpbmdsZV09XCJpc1NpbmdsZSgpXCJcbiAgICAgICAgW2F1dG9BcHBseV09XCJhdXRvQXBwbHkoKVwiXG4gICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICBbZmxhZ01vdXNlXT1cImZsYWdNb3VzZSgpXCJcbiAgICAgICAgW2RhdGVPcHRpb25zXT1cImRhdGVPcHRpb25zKClcIlxuICAgICAgICBbaGFzVGltZVBpY2tlcl09XCJoYXNUaW1lUGlja2VyKClcIlxuICAgICAgICBbcXVpY2tSYW5nZXNBcnJheV09XCJxdWlja1Jhbmdlc0FycmF5KClcIlxuICAgICAgICBbc3RhcnREYXRlXT1cInN0YXJ0RGF0ZSgpXCJcbiAgICAgICAgW2VuZERhdGVdPVwiZW5kRGF0ZSgpXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZSgpXCJcbiAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZSgpXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIndy1mdWxsJ1wiXG4gICAgICAgIChvdXRDYW5jZWwpPVwiaGFuZGxlckNhbmNlbCgpXCJcbiAgICAgICAgKG91dFBpY2tlckRhdGUpPVwiaGFuZGxlclBpY2tlckRhdGUoJGV2ZW50KVwiXG4gICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbnNDb250cm9sKCRldmVudClcIlxuICAgICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKCRldmVudClcIiAvPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -42,6 +42,8 @@ export class LibsUiComponentsDatetimePickerComponent {
42
42
  isSingle = input(false);
43
43
  extendRanges = input([]);
44
44
  isBorderError = input(false);
45
+ minDate = input();
46
+ maxDate = input();
45
47
  validRequired = input(undefined);
46
48
  ignoreStopPropagationEvent = input(false);
47
49
  flagMouse = model({ isMouseEnter: false, isMouseEnterContent: false });
@@ -181,7 +183,7 @@ export class LibsUiComponentsDatetimePickerComponent {
181
183
  console.log('ngOnDestroy');
182
184
  }
183
185
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
184
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDatetimePickerComponent, isStandalone: true, selector: "libs_ui-components-datetime-picker", inputs: { showCustomRangeLabel: { classPropertyName: "showCustomRangeLabel", publicName: "showCustomRangeLabel", isSignal: true, isRequired: false, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, classPickerInclude: { classPropertyName: "classPickerInclude", publicName: "classPickerInclude", isSignal: true, isRequired: false, transformFunction: null }, classPickerContentInclude: { classPropertyName: "classPickerContentInclude", publicName: "classPickerContentInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreBorderQuickRange: { classPropertyName: "ignoreBorderQuickRange", publicName: "ignoreBorderQuickRange", isSignal: true, isRequired: false, transformFunction: null }, useColorModeExist: { classPropertyName: "useColorModeExist", publicName: "useColorModeExist", isSignal: true, isRequired: false, transformFunction: null }, hasTimePicker: { classPropertyName: "hasTimePicker", publicName: "hasTimePicker", isSignal: true, isRequired: false, transformFunction: null }, allowReset: { classPropertyName: "allowReset", publicName: "allowReset", isSignal: true, isRequired: false, transformFunction: null }, widthByLabel: { classPropertyName: "widthByLabel", publicName: "widthByLabel", isSignal: true, isRequired: false, transformFunction: null }, defaultWidth: { classPropertyName: "defaultWidth", publicName: "defaultWidth", isSignal: true, isRequired: false, transformFunction: null }, isSingle: { classPropertyName: "isSingle", publicName: "isSingle", isSignal: true, isRequired: false, transformFunction: null }, extendRanges: { classPropertyName: "extendRanges", publicName: "extendRanges", isSignal: true, isRequired: false, transformFunction: null }, isBorderError: { classPropertyName: "isBorderError", publicName: "isBorderError", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, widthByParent: { classPropertyName: "widthByParent", publicName: "widthByParent", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, rangesPopoverPosition: { classPropertyName: "rangesPopoverPosition", publicName: "rangesPopoverPosition", isSignal: true, isRequired: false, transformFunction: null }, isNgContent: { classPropertyName: "isNgContent", publicName: "isNgContent", isSignal: true, isRequired: false, transformFunction: null }, classIncludeCustomRanges: { classPropertyName: "classIncludeCustomRanges", publicName: "classIncludeCustomRanges", isSignal: true, isRequired: false, transformFunction: null }, autoApply: { classPropertyName: "autoApply", publicName: "autoApply", isSignal: true, isRequired: false, transformFunction: null }, positionQuickRanges: { classPropertyName: "positionQuickRanges", publicName: "positionQuickRanges", isSignal: true, isRequired: false, transformFunction: null }, singleDateSelected: { classPropertyName: "singleDateSelected", publicName: "singleDateSelected", isSignal: true, isRequired: false, transformFunction: null }, dateRangeSelected: { classPropertyName: "dateRangeSelected", publicName: "dateRangeSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { flagMouse: "flagMouseChange", singleDateSelected: "singleDateSelectedChange", dateRangeSelected: "dateRangeSelectedChange", outChangStageFlagMouse: "outChangStageFlagMouse", outReset: "outReset", outSelectSingleDate: "outSelectSingleDate", outSelectDateRange: "outSelectDateRange", outFunctionsControl: "outFunctionsControl" }, ngImport: i0, template: "<div class=\"{{ classInclude() }}\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n <div class=\"flex w-full\">\n <libs_ui-components-popover [classInclude]=\"classPickerInclude()\"\n [ignoreShowPopover]=\"disable() || readonly()\"\n [mode]=\"'click'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [flagMouse]=\"flagMouse()\"\n [config]=\"{\n animationConfig:{},\n maxWidth: 770,\n maxHeight: 420,\n directionDistance:2,\n template: customRangesRef,\n widthByParent: widthByParent(),\n whiteTheme: true,\n ignoreArrow: true,\n zIndex: zIndex(),\n classInclude: 'rounded-[4px] ',\n position: {mode: rangesPopoverPosition(),distance: 0}}\"\n (outChangStageFlagMouse)=\"handlerChangStagePopoverFlagMouse($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outEvent)=\"handlerPopoverEvent($event)\">\n @if (!isNgContent()) {\n <div #containerRef\n class=\"flex items-center px-[12px] h-[32px] rounded-[4px] bg-[#ffffff] cursor-pointer libs-ui-font-h5r {{ classPickerContentInclude() }}\"\n [class.libs-ui-disable]=\"disable()\"\n [class.!border-none]=\"ignoreBorderQuickRange()\"\n [class.libs-ui-border-general]=\"!singleError().message && !ignoreBorderQuickRange()\"\n [class.libs-ui-border-error-general]=\"(singleError().message || isBorderError()) && !ignoreBorderQuickRange()\"\n [class.min-w-[284px]]=\"!chosenDateFromRanges().selectedLabel && !isSingle() && hasTimePicker()\"\n [class.!border]=\"showRangesPopup() && !ignoreBorderQuickRange() && !readonly()\"\n [class.!border-[#4e8cf7]]=\"showRangesPopup() && !ignoreBorderQuickRange() && !readonly()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [style.width.px]=\"width()\"\n (click)=\"handlerSelectRanges($event)\">\n <div class=\"libs-ui-icon-calendar text-[#9ca2ad] text-[16px]\"></div>\n <div class=\"ml-[8px]\"\n [class.!text-[#071631]]=\"!disable()\"\n [class.!text-[#9ca2ad]]=\"disable()\">\n @if (!chosenDateFromRanges().selectedLabel) {\n @if (!isSingle()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>} - dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n }\n @if (isSingle()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n }\n }\n @if (chosenDateFromRanges().selectedLabel && !isSingle()) {\n {{ displayRangeTitle() }}\n }\n @if (chosenDateFromRanges().selectedLabel && isSingle()) {\n <span [class.text-[#29c7cc]]=\"useColorModeExist() || false\">\n {{ chosenDateFromRanges().selectedLabel }}\n </span>\n }\n </div>\n @if (chosenDateFromRanges().selectedLabel && allowReset() && !disable() && !readonly()) {\n <div class=\"pl-[12px] ml-auto h-full flex items-center\">\n <i class=\"libs-ui-icon-close-circle-solid text-[16px] text-[#cdd0d6]\"\n (click)=\"handlerReset($event)\"></i>\n </div>\n }\n </div>\n }\n @if (isNgContent()) {\n <div (click)=\"handlerSelectRanges($event)\">\n <ng-content></ng-content>\n </div>\n }\n </libs_ui-components-popover>\n </div>\n @if (singleError().message && !validRequired()?.ignoreMessage) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r libs-ui-text-error\"\n [innerHTML]=\"(singleError().message || ERROR_MESSAGE_EMPTY_VALID)| translate:validRequired()?.interpolateParams\"></div>\n }\n</div>\n\n<ng-template #customRangesRef>\n <libs_ui-components-datetime-picker-custom_ranges [zIndex]=\"zIndex()\"\n [classInclude]=\"classIncludeCustomRanges()\"\n [widthByParent]=\"widthByParent()\"\n [dateOptions]=\"dateOptions()\"\n [positionQuickRanges]=\"positionQuickRanges()\"\n [showCustomRangeLabel]=\"showCustomRangeLabel()\"\n [autoApply]=\"autoApply()\"\n [isSingle]=\"isSingle()\"\n [singleDateSelected]=\"singleDateSelected()\"\n [dateRangeSelected]=\"dateRangeSelected()\"\n [extendRanges]=\"extendRanges()\"\n [hasTimePicker]=\"hasTimePicker()\"\n (outUpdateWidth)=\"handlerUpdateWidth()\"\n (outCancel)=\"handlerCancel()\"\n (outSelectSingleDate)=\"handlerPickerSingleDate($event)\"\n (outSelectDateRange)=\"handlerPickerDateRange($event)\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsDatetimePickerCustomRangesComponent, selector: "libs_ui-components-datetime-picker-custom_ranges", inputs: ["zIndex", "classInclude", "extendRanges", "widthByParent", "autoApply", "positionQuickRanges", "isSingle", "hasTimePicker", "flagMouse", "dateOptions", "alwaysShowCalendars", "startDate", "endDate", "showCustomRangeLabel", "keepCalendarOpeningWithRange", "singleDateSelected", "dateRangeSelected"], outputs: ["startDateChange", "endDateChange", "outChangStageFlagMouse", "outUpdateWidth", "outCancel", "outSelectSingleDate", "outSelectDateRange", "outClickRange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
186
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsDatetimePickerComponent, isStandalone: true, selector: "libs_ui-components-datetime-picker", inputs: { showCustomRangeLabel: { classPropertyName: "showCustomRangeLabel", publicName: "showCustomRangeLabel", isSignal: true, isRequired: false, transformFunction: null }, labelConfig: { classPropertyName: "labelConfig", publicName: "labelConfig", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null }, classPickerInclude: { classPropertyName: "classPickerInclude", publicName: "classPickerInclude", isSignal: true, isRequired: false, transformFunction: null }, classPickerContentInclude: { classPropertyName: "classPickerContentInclude", publicName: "classPickerContentInclude", isSignal: true, isRequired: false, transformFunction: null }, ignoreBorderQuickRange: { classPropertyName: "ignoreBorderQuickRange", publicName: "ignoreBorderQuickRange", isSignal: true, isRequired: false, transformFunction: null }, useColorModeExist: { classPropertyName: "useColorModeExist", publicName: "useColorModeExist", isSignal: true, isRequired: false, transformFunction: null }, hasTimePicker: { classPropertyName: "hasTimePicker", publicName: "hasTimePicker", isSignal: true, isRequired: false, transformFunction: null }, allowReset: { classPropertyName: "allowReset", publicName: "allowReset", isSignal: true, isRequired: false, transformFunction: null }, widthByLabel: { classPropertyName: "widthByLabel", publicName: "widthByLabel", isSignal: true, isRequired: false, transformFunction: null }, defaultWidth: { classPropertyName: "defaultWidth", publicName: "defaultWidth", isSignal: true, isRequired: false, transformFunction: null }, isSingle: { classPropertyName: "isSingle", publicName: "isSingle", isSignal: true, isRequired: false, transformFunction: null }, extendRanges: { classPropertyName: "extendRanges", publicName: "extendRanges", isSignal: true, isRequired: false, transformFunction: null }, isBorderError: { classPropertyName: "isBorderError", publicName: "isBorderError", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, validRequired: { classPropertyName: "validRequired", publicName: "validRequired", isSignal: true, isRequired: false, transformFunction: null }, ignoreStopPropagationEvent: { classPropertyName: "ignoreStopPropagationEvent", publicName: "ignoreStopPropagationEvent", isSignal: true, isRequired: false, transformFunction: null }, flagMouse: { classPropertyName: "flagMouse", publicName: "flagMouse", isSignal: true, isRequired: false, transformFunction: null }, widthByParent: { classPropertyName: "widthByParent", publicName: "widthByParent", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, rangesPopoverPosition: { classPropertyName: "rangesPopoverPosition", publicName: "rangesPopoverPosition", isSignal: true, isRequired: false, transformFunction: null }, isNgContent: { classPropertyName: "isNgContent", publicName: "isNgContent", isSignal: true, isRequired: false, transformFunction: null }, classIncludeCustomRanges: { classPropertyName: "classIncludeCustomRanges", publicName: "classIncludeCustomRanges", isSignal: true, isRequired: false, transformFunction: null }, autoApply: { classPropertyName: "autoApply", publicName: "autoApply", isSignal: true, isRequired: false, transformFunction: null }, positionQuickRanges: { classPropertyName: "positionQuickRanges", publicName: "positionQuickRanges", isSignal: true, isRequired: false, transformFunction: null }, singleDateSelected: { classPropertyName: "singleDateSelected", publicName: "singleDateSelected", isSignal: true, isRequired: false, transformFunction: null }, dateRangeSelected: { classPropertyName: "dateRangeSelected", publicName: "dateRangeSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { flagMouse: "flagMouseChange", singleDateSelected: "singleDateSelectedChange", dateRangeSelected: "dateRangeSelectedChange", outChangStageFlagMouse: "outChangStageFlagMouse", outReset: "outReset", outSelectSingleDate: "outSelectSingleDate", outSelectDateRange: "outSelectDateRange", outFunctionsControl: "outFunctionsControl" }, ngImport: i0, template: "<div class=\"{{ classInclude() }}\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n <div class=\"flex w-full\">\n <libs_ui-components-popover [classInclude]=\"classPickerInclude()\"\n [ignoreShowPopover]=\"disable() || readonly()\"\n [mode]=\"'click'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [flagMouse]=\"flagMouse()\"\n [config]=\"{\n animationConfig:{},\n maxWidth: 770,\n maxHeight: 420,\n directionDistance:2,\n template: customRangesRef,\n widthByParent: widthByParent(),\n whiteTheme: true,\n ignoreArrow: true,\n zIndex: zIndex(),\n classInclude: 'rounded-[4px] ',\n position: {mode: rangesPopoverPosition(),distance: 0}}\"\n (outChangStageFlagMouse)=\"handlerChangStagePopoverFlagMouse($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outEvent)=\"handlerPopoverEvent($event)\">\n @if (!isNgContent()) {\n <div #containerRef\n class=\"flex items-center px-[12px] h-[32px] rounded-[4px] bg-[#ffffff] cursor-pointer libs-ui-font-h5r {{ classPickerContentInclude() }}\"\n [class.libs-ui-disable]=\"disable()\"\n [class.!border-none]=\"ignoreBorderQuickRange()\"\n [class.libs-ui-border-general]=\"!singleError().message && !ignoreBorderQuickRange()\"\n [class.libs-ui-border-error-general]=\"(singleError().message || isBorderError()) && !ignoreBorderQuickRange()\"\n [class.min-w-[284px]]=\"!chosenDateFromRanges().selectedLabel && !isSingle() && hasTimePicker()\"\n [class.!border]=\"showRangesPopup() && !ignoreBorderQuickRange() && !readonly()\"\n [class.!border-[#4e8cf7]]=\"showRangesPopup() && !ignoreBorderQuickRange() && !readonly()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [style.width.px]=\"width()\"\n (click)=\"handlerSelectRanges($event)\">\n <div class=\"libs-ui-icon-calendar text-[#9ca2ad] text-[16px]\"></div>\n <div class=\"ml-[8px]\"\n [class.!text-[#071631]]=\"!disable()\"\n [class.!text-[#9ca2ad]]=\"disable()\">\n @if (!chosenDateFromRanges().selectedLabel) {\n @if (!isSingle()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>} - dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n }\n @if (isSingle()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n }\n }\n @if (chosenDateFromRanges().selectedLabel && !isSingle()) {\n {{ displayRangeTitle() }}\n }\n @if (chosenDateFromRanges().selectedLabel && isSingle()) {\n <span [class.text-[#29c7cc]]=\"useColorModeExist() || false\">\n {{ chosenDateFromRanges().selectedLabel }}\n </span>\n }\n </div>\n @if (chosenDateFromRanges().selectedLabel && allowReset() && !disable() && !readonly()) {\n <div class=\"pl-[12px] ml-auto h-full flex items-center\">\n <i class=\"libs-ui-icon-close-circle-solid text-[16px] text-[#cdd0d6]\"\n (click)=\"handlerReset($event)\"></i>\n </div>\n }\n </div>\n }\n @if (isNgContent()) {\n <div (click)=\"handlerSelectRanges($event)\">\n <ng-content></ng-content>\n </div>\n }\n </libs_ui-components-popover>\n </div>\n @if (singleError().message && !validRequired()?.ignoreMessage) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r libs-ui-text-error\"\n [innerHTML]=\"(singleError().message || ERROR_MESSAGE_EMPTY_VALID)| translate:validRequired()?.interpolateParams\"></div>\n }\n</div>\n\n<ng-template #customRangesRef>\n <libs_ui-components-datetime-picker-custom_ranges [zIndex]=\"zIndex()\"\n [classInclude]=\"classIncludeCustomRanges()\"\n [widthByParent]=\"widthByParent()\"\n [dateOptions]=\"dateOptions()\"\n [positionQuickRanges]=\"positionQuickRanges()\"\n [showCustomRangeLabel]=\"showCustomRangeLabel()\"\n [autoApply]=\"autoApply()\"\n [isSingle]=\"isSingle()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [singleDateSelected]=\"singleDateSelected()\"\n [dateRangeSelected]=\"dateRangeSelected()\"\n [extendRanges]=\"extendRanges()\"\n [hasTimePicker]=\"hasTimePicker()\"\n (outUpdateWidth)=\"handlerUpdateWidth()\"\n (outCancel)=\"handlerCancel()\"\n (outSelectSingleDate)=\"handlerPickerSingleDate($event)\"\n (outSelectDateRange)=\"handlerPickerDateRange($event)\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "component", type: LibsUiComponentsLabelComponent, selector: "libs_ui-components-label", inputs: ["iconPopoverClass", "classInclude", "labelLeft", "labelLeftClass", "labelLeftBehindToggleButton", "popover", "required", "buttonsLeft", "disableButtonsLeft", "buttonsRight", "disableButtonsRight", "labelRight", "labelRightClass", "labelRightRequired", "hasToggle", "toggleSize", "toggleActive", "toggleDisable", "description", "descriptionClass", "buttonsDescription", "disableButtonsDescription", "buttonsDescriptionContainerClass", "onlyShowCount", "zIndexPopover", "timerDestroyPopover", "count", "limitLength"], outputs: ["outClickButton", "outSwitchEvent", "outLabelRightClick", "outLabelLeftClick"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["debugId", "flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsDatetimePickerCustomRangesComponent, selector: "libs_ui-components-datetime-picker-custom_ranges", inputs: ["zIndex", "classInclude", "extendRanges", "widthByParent", "autoApply", "minDate", "maxDate", "positionQuickRanges", "isSingle", "hasTimePicker", "flagMouse", "dateOptions", "alwaysShowCalendars", "startDate", "endDate", "showCustomRangeLabel", "keepCalendarOpeningWithRange", "singleDateSelected", "dateRangeSelected"], outputs: ["startDateChange", "endDateChange", "outChangStageFlagMouse", "outUpdateWidth", "outCancel", "outSelectSingleDate", "outSelectDateRange", "outClickRange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
185
187
  }
186
188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimePickerComponent, decorators: [{
187
189
  type: Component,
@@ -190,6 +192,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
190
192
  LibsUiComponentsLabelComponent,
191
193
  LibsUiComponentsPopoverComponent,
192
194
  LibsUiComponentsDatetimePickerCustomRangesComponent
193
- ], template: "<div class=\"{{ classInclude() }}\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n <div class=\"flex w-full\">\n <libs_ui-components-popover [classInclude]=\"classPickerInclude()\"\n [ignoreShowPopover]=\"disable() || readonly()\"\n [mode]=\"'click'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [flagMouse]=\"flagMouse()\"\n [config]=\"{\n animationConfig:{},\n maxWidth: 770,\n maxHeight: 420,\n directionDistance:2,\n template: customRangesRef,\n widthByParent: widthByParent(),\n whiteTheme: true,\n ignoreArrow: true,\n zIndex: zIndex(),\n classInclude: 'rounded-[4px] ',\n position: {mode: rangesPopoverPosition(),distance: 0}}\"\n (outChangStageFlagMouse)=\"handlerChangStagePopoverFlagMouse($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outEvent)=\"handlerPopoverEvent($event)\">\n @if (!isNgContent()) {\n <div #containerRef\n class=\"flex items-center px-[12px] h-[32px] rounded-[4px] bg-[#ffffff] cursor-pointer libs-ui-font-h5r {{ classPickerContentInclude() }}\"\n [class.libs-ui-disable]=\"disable()\"\n [class.!border-none]=\"ignoreBorderQuickRange()\"\n [class.libs-ui-border-general]=\"!singleError().message && !ignoreBorderQuickRange()\"\n [class.libs-ui-border-error-general]=\"(singleError().message || isBorderError()) && !ignoreBorderQuickRange()\"\n [class.min-w-[284px]]=\"!chosenDateFromRanges().selectedLabel && !isSingle() && hasTimePicker()\"\n [class.!border]=\"showRangesPopup() && !ignoreBorderQuickRange() && !readonly()\"\n [class.!border-[#4e8cf7]]=\"showRangesPopup() && !ignoreBorderQuickRange() && !readonly()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [style.width.px]=\"width()\"\n (click)=\"handlerSelectRanges($event)\">\n <div class=\"libs-ui-icon-calendar text-[#9ca2ad] text-[16px]\"></div>\n <div class=\"ml-[8px]\"\n [class.!text-[#071631]]=\"!disable()\"\n [class.!text-[#9ca2ad]]=\"disable()\">\n @if (!chosenDateFromRanges().selectedLabel) {\n @if (!isSingle()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>} - dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n }\n @if (isSingle()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n }\n }\n @if (chosenDateFromRanges().selectedLabel && !isSingle()) {\n {{ displayRangeTitle() }}\n }\n @if (chosenDateFromRanges().selectedLabel && isSingle()) {\n <span [class.text-[#29c7cc]]=\"useColorModeExist() || false\">\n {{ chosenDateFromRanges().selectedLabel }}\n </span>\n }\n </div>\n @if (chosenDateFromRanges().selectedLabel && allowReset() && !disable() && !readonly()) {\n <div class=\"pl-[12px] ml-auto h-full flex items-center\">\n <i class=\"libs-ui-icon-close-circle-solid text-[16px] text-[#cdd0d6]\"\n (click)=\"handlerReset($event)\"></i>\n </div>\n }\n </div>\n }\n @if (isNgContent()) {\n <div (click)=\"handlerSelectRanges($event)\">\n <ng-content></ng-content>\n </div>\n }\n </libs_ui-components-popover>\n </div>\n @if (singleError().message && !validRequired()?.ignoreMessage) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r libs-ui-text-error\"\n [innerHTML]=\"(singleError().message || ERROR_MESSAGE_EMPTY_VALID)| translate:validRequired()?.interpolateParams\"></div>\n }\n</div>\n\n<ng-template #customRangesRef>\n <libs_ui-components-datetime-picker-custom_ranges [zIndex]=\"zIndex()\"\n [classInclude]=\"classIncludeCustomRanges()\"\n [widthByParent]=\"widthByParent()\"\n [dateOptions]=\"dateOptions()\"\n [positionQuickRanges]=\"positionQuickRanges()\"\n [showCustomRangeLabel]=\"showCustomRangeLabel()\"\n [autoApply]=\"autoApply()\"\n [isSingle]=\"isSingle()\"\n [singleDateSelected]=\"singleDateSelected()\"\n [dateRangeSelected]=\"dateRangeSelected()\"\n [extendRanges]=\"extendRanges()\"\n [hasTimePicker]=\"hasTimePicker()\"\n (outUpdateWidth)=\"handlerUpdateWidth()\"\n (outCancel)=\"handlerCancel()\"\n (outSelectSingleDate)=\"handlerPickerSingleDate($event)\"\n (outSelectDateRange)=\"handlerPickerDateRange($event)\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n</ng-template>\n" }]
195
+ ], template: "<div class=\"{{ classInclude() }}\">\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required \"\n [description]=\"labelConfig.description\"\n [descriptionClass]=\"labelConfig.descriptionClass\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n <div class=\"flex w-full\">\n <libs_ui-components-popover [classInclude]=\"classPickerInclude()\"\n [ignoreShowPopover]=\"disable() || readonly()\"\n [mode]=\"'click'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [ignoreStopPropagationEvent]=\"ignoreStopPropagationEvent()\"\n [flagMouse]=\"flagMouse()\"\n [config]=\"{\n animationConfig:{},\n maxWidth: 770,\n maxHeight: 420,\n directionDistance:2,\n template: customRangesRef,\n widthByParent: widthByParent(),\n whiteTheme: true,\n ignoreArrow: true,\n zIndex: zIndex(),\n classInclude: 'rounded-[4px] ',\n position: {mode: rangesPopoverPosition(),distance: 0}}\"\n (outChangStageFlagMouse)=\"handlerChangStagePopoverFlagMouse($event)\"\n (outFunctionsControl)=\"handlerFunctionControl($event)\"\n (outEvent)=\"handlerPopoverEvent($event)\">\n @if (!isNgContent()) {\n <div #containerRef\n class=\"flex items-center px-[12px] h-[32px] rounded-[4px] bg-[#ffffff] cursor-pointer libs-ui-font-h5r {{ classPickerContentInclude() }}\"\n [class.libs-ui-disable]=\"disable()\"\n [class.!border-none]=\"ignoreBorderQuickRange()\"\n [class.libs-ui-border-general]=\"!singleError().message && !ignoreBorderQuickRange()\"\n [class.libs-ui-border-error-general]=\"(singleError().message || isBorderError()) && !ignoreBorderQuickRange()\"\n [class.min-w-[284px]]=\"!chosenDateFromRanges().selectedLabel && !isSingle() && hasTimePicker()\"\n [class.!border]=\"showRangesPopup() && !ignoreBorderQuickRange() && !readonly()\"\n [class.!border-[#4e8cf7]]=\"showRangesPopup() && !ignoreBorderQuickRange() && !readonly()\"\n [class.libs-ui-readonly]=\"readonly() || false\"\n [style.width.px]=\"width()\"\n (click)=\"handlerSelectRanges($event)\">\n <div class=\"libs-ui-icon-calendar text-[#9ca2ad] text-[16px]\"></div>\n <div class=\"ml-[8px]\"\n [class.!text-[#071631]]=\"!disable()\"\n [class.!text-[#9ca2ad]]=\"disable()\">\n @if (!chosenDateFromRanges().selectedLabel) {\n @if (!isSingle()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>} - dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n }\n @if (isSingle()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n }\n }\n @if (chosenDateFromRanges().selectedLabel && !isSingle()) {\n {{ displayRangeTitle() }}\n }\n @if (chosenDateFromRanges().selectedLabel && isSingle()) {\n <span [class.text-[#29c7cc]]=\"useColorModeExist() || false\">\n {{ chosenDateFromRanges().selectedLabel }}\n </span>\n }\n </div>\n @if (chosenDateFromRanges().selectedLabel && allowReset() && !disable() && !readonly()) {\n <div class=\"pl-[12px] ml-auto h-full flex items-center\">\n <i class=\"libs-ui-icon-close-circle-solid text-[16px] text-[#cdd0d6]\"\n (click)=\"handlerReset($event)\"></i>\n </div>\n }\n </div>\n }\n @if (isNgContent()) {\n <div (click)=\"handlerSelectRanges($event)\">\n <ng-content></ng-content>\n </div>\n }\n </libs_ui-components-popover>\n </div>\n @if (singleError().message && !validRequired()?.ignoreMessage) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r libs-ui-text-error\"\n [innerHTML]=\"(singleError().message || ERROR_MESSAGE_EMPTY_VALID)| translate:validRequired()?.interpolateParams\"></div>\n }\n</div>\n\n<ng-template #customRangesRef>\n <libs_ui-components-datetime-picker-custom_ranges [zIndex]=\"zIndex()\"\n [classInclude]=\"classIncludeCustomRanges()\"\n [widthByParent]=\"widthByParent()\"\n [dateOptions]=\"dateOptions()\"\n [positionQuickRanges]=\"positionQuickRanges()\"\n [showCustomRangeLabel]=\"showCustomRangeLabel()\"\n [autoApply]=\"autoApply()\"\n [isSingle]=\"isSingle()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [singleDateSelected]=\"singleDateSelected()\"\n [dateRangeSelected]=\"dateRangeSelected()\"\n [extendRanges]=\"extendRanges()\"\n [hasTimePicker]=\"hasTimePicker()\"\n (outUpdateWidth)=\"handlerUpdateWidth()\"\n (outCancel)=\"handlerCancel()\"\n (outSelectSingleDate)=\"handlerPickerSingleDate($event)\"\n (outSelectDateRange)=\"handlerPickerDateRange($event)\"\n (outChangStageFlagMouse)=\"handlerChangStageFlagMouse($event)\" />\n</ng-template>\n" }]
194
196
  }], ctorParameters: () => [] });
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kYXRldGltZS9waWNrZXIvc3JjL3BpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pKLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBNEMsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFDN0ksT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXRELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsbURBQW1ELEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUU5RyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7OztBQWlCMUIsTUFBTSxPQUFPLHVDQUF1QztJQUNsRCxlQUFlO0lBQ0kseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7SUFDL0QsZUFBZSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN6QyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEQsV0FBVyxHQUFHLE1BQU0sQ0FBaUIsRUFB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TyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM3QixDQUFDO3dHQS9NVSx1Q0FBdUM7NEZBQXZDLHVDQUF1QywyL0lDNUJwRCxxb01BMkhBLHlERHJHSSxlQUFlLDRGQUNmLDhCQUE4Qiw0cUJBQzlCLGdDQUFnQyxxZUFDaEMsbURBQW1EOzs0RkFHMUMsdUNBQXVDO2tCQWRuRCxTQUFTOytCQUVFLG9DQUFvQyxjQUdsQyxJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1AsZUFBZTt3QkFDZiw4QkFBOEI7d0JBQzlCLGdDQUFnQzt3QkFDaEMsbURBQW1EO3FCQUNwRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgZWZmZWN0LCB1bnRyYWNrZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUxhYmVsLCBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbFwiO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSwgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsIFRZUEVfUE9QT1ZFUl9FVkVOVCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQgfSBmcm9tIFwiQGxpYnMtdWkvdXRpbHNcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBJRGF0ZVRpbWVWYWxpZCB9IGZyb20gXCIuL2ludGVyZmFjZXMvdmFsaWQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJQ2hvc2VuRGF0ZSwgTG9jYWxpemF0aW9uQ29uZmlnLCBUWVBFX1JBTkdFX0tFWSB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGlja2VyLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSURhdGVUaW1lUGlja2VyRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBkZWZhdWx0TG9jYWxlQ29uZmlnLCBnZXREYXRlT3B0aW9ucyB9IGZyb20gXCIuL2RlZmluZXMvZGF0ZS1vcHRpb25zLmRlZmluZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lUGlja2VyQ3VzdG9tUmFuZ2VzQ29tcG9uZW50IH0gZnJvbSBcIi4vY3VzdG9tLXJhbmdlcy9jdXN0b20tcmFuZ2VzLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgSUVtaXREYXRlUmFuZ2UsIElFbWl0U2luZ2xlRGF0ZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvY2FsZW5kYXItZW1pdC5pbnRlcmZhY2VcIjtcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7IElEYXRlUmFuZ2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2NhbGVuZGFyLXZhcmlhYmxlcy5pbnRlcmZhY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCByZWFkb25seSBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEID0gRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRDtcbiAgcHJvdGVjdGVkIHNob3dSYW5nZXNQb3B1cCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCB3aWR0aCA9IGNvbXB1dGVkKHRoaXMuY29tcHV0ZWRXaWR0aC5iaW5kKHRoaXMpKTtcbiAgcHJvdGVjdGVkIHNpbmdsZUVycm9yID0gc2lnbmFsPElEYXRlVGltZVZhbGlkPih7IG1lc3NhZ2U6IHVuZGVmaW5lZCB9KTtcbiAgcHJvdGVjdGVkIGNob3NlbkRhdGVGcm9tUmFuZ2VzID0gc2lnbmFsPElDaG9zZW5EYXRlPih7fSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZERhdGVGcm9tQ2FsZW5kYXIhOiB7IHN0YXJ0PzogZGF5anMuRGF5anMsIGVuZD86IGRheWpzLkRheWpzIH07XG4gIHByb3RlY3RlZCBkaXNwbGF5UmFuZ2VUaXRsZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZExhYmVsID0gdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwgYXMgVFlQRV9SQU5HRV9LRVk7XG5cbiAgICBpZiAodGhpcy5pc1NpbmdsZSgpIHx8ICFzZWxlY3RlZExhYmVsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdGVkTGFiZWw7XG4gIH0pO1xuICBwcm90ZWN0ZWQgZGF0ZU9wdGlvbnMgPSBzaWduYWw8TG9jYWxpemF0aW9uQ29uZmlnPih7IC4uLmRlZmF1bHRMb2NhbGVDb25maWcoKSwgLi4uZ2V0RGF0ZU9wdGlvbnMoKSB9KTtcblxuICBwcml2YXRlIHBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCA9IHNpZ25hbDxJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gIC8qKiBJTlBVVCAqL1xuICByZWFkb25seSBzaG93Q3VzdG9tUmFuZ2VMYWJlbCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRydWUgfSk7XG4gIHJlYWRvbmx5IGxhYmVsQ29uZmlnID0gaW5wdXQ8SUxhYmVsPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGNsYXNzUGlja2VySW5jbHVkZSA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBjbGFzc1BpY2tlckNvbnRlbnRJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGlnbm9yZUJvcmRlclF1aWNrUmFuZ2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHVzZUNvbG9yTW9kZUV4aXN0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBoYXNUaW1lUGlja2VyID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGFsbG93UmVzZXQgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgd2lkdGhCeUxhYmVsID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4odHJ1ZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgZGVmYXVsdFdpZHRoID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBpc1NpbmdsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZXh0ZW5kUmFuZ2VzID0gaW5wdXQ8QXJyYXk8SURhdGVSYW5nZT4+KFtdKTtcbiAgcmVhZG9ubHkgaXNCb3JkZXJFcnJvciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SURhdGVUaW1lVmFsaWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBmbGFnTW91c2UgPSBtb2RlbDxJRmxhZ01vdXNlPih7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlIH0pO1xuICByZWFkb25seSB3aWR0aEJ5UGFyZW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oMTIwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMTIwMCB9KTtcbiAgcmVhZG9ubHkgcmFuZ2VzUG9wb3ZlclBvc2l0aW9uID0gaW5wdXQ8J3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcsICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnPignc3RhcnQnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnc3RhcnQnIH0pO1xuICByZWFkb25seSBpc05nQ29udGVudCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlQ3VzdG9tUmFuZ2VzID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGF1dG9BcHBseSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcG9zaXRpb25RdWlja1JhbmdlcyA9IGlucHV0PCdsZWZ0JyB8ICdyaWdodCc+KCdsZWZ0Jyk7IC8vIHbhu4sgdHLDrSBsaXN0IGNo4buNbiBuaGFuaCBraG/huqNuZyB0aOG7nWkgZ2lhblxuXG4gIHJlYWRvbmx5IHNpbmdsZURhdGVTZWxlY3RlZCA9IG1vZGVsPElFbWl0U2luZ2xlRGF0ZT4oKTtcbiAgcmVhZG9ubHkgZGF0ZVJhbmdlU2VsZWN0ZWQgPSBtb2RlbDxJRW1pdERhdGVSYW5nZT4oKTtcblxuICAvKiogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2UgPSBvdXRwdXQ8SUZsYWdNb3VzZT4oKTtcbiAgcmVhZG9ubHkgb3V0UmVzZXQgPSBvdXRwdXQ8dW5kZWZpbmVkPigpO1xuICByZWFkb25seSBvdXRTZWxlY3RTaW5nbGVEYXRlID0gb3V0cHV0PElFbWl0U2luZ2xlRGF0ZT4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0RGF0ZVJhbmdlID0gb3V0cHV0PElFbWl0RGF0ZVJhbmdlPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElEYXRlVGltZVBpY2tlckZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2luZ2xlRGF0ZVNlbGVjdGVkKCkpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZGF5anModGhpcy5zaW5nbGVEYXRlU2VsZWN0ZWQoKT8uZGF0ZSkuZm9ybWF0KHRoaXMuaGFzVGltZVBpY2tlcigpID8gJ0REL01NL1lZWVkgSEg6bW0nIDogJ0REL01NL1lZWVknKTtcblxuICAgICAgICB0aGlzLmNob3NlbkRhdGVGcm9tUmFuZ2VzLnNldCh7IHNlbGVjdGVkTGFiZWw6IHN0YXJ0VGltZSB9KTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh7IGNoZWNrSXNWYWxpZDogdGhpcy5jaGVja0lzVmFsaWQuYmluZCh0aGlzKSB9KVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RSYW5nZXMoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoZmxhZ01vdXNlOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5mbGFnTW91c2Uuc2V0KGZsYWdNb3VzZSlcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZVBvcG92ZXJGbGFnTW91c2UoZmxhZ01vdXNlOiBJRmxhZ01vdXNlKSB7XG4gICAgaWYgKHRoaXMuZmxhZ01vdXNlKCk/LmlzTW91c2VFbnRlckNvbnRlbnQpIHtcbiAgICAgIGZsYWdNb3VzZS5pc01vdXNlRW50ZXJDb250ZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlLmVtaXQoZmxhZ01vdXNlKTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGdW5jdGlvbkNvbnRyb2woZXZlbnQ6IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQb3BvdmVyRXZlbnQoZXZlbnQ6IFRZUEVfUE9QT1ZFUl9FVkVOVCkge1xuICAgIGlmIChldmVudCA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIHRoaXMuc2hvd1Jhbmdlc1BvcHVwLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQaWNrZXJTaW5nbGVEYXRlKGRhdGE6IElFbWl0U2luZ2xlRGF0ZSkge1xuICAgIHRoaXMub3V0U2VsZWN0U2luZ2xlRGF0ZS5lbWl0KGRhdGEpO1xuICAgIHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMuc2V0KHsgc2VsZWN0ZWRMYWJlbDogZGF0YS5kaXNwbGF5TGFiZWwgfSk7XG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBkYXlqcyhkYXRhLmRhdGUpLmZvcm1hdCgnREQvTU0vWVlZWSBISDptbScpO1xuXG4gICAgICB0aGlzLmNob3NlbkRhdGVGcm9tUmFuZ2VzLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5zZWxlY3RlZExhYmVsID0gYCR7c3RhcnRUaW1lfWA7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2luZ2xlRGF0ZVNlbGVjdGVkLnNldChkYXRhKTtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQaWNrZXJEYXRlUmFuZ2UoZGF0YTogSUVtaXREYXRlUmFuZ2UpIHtcbiAgICBpZiAoKGRhdGEuZGlzcGxheUxhYmVsPy5pbmRleE9mKCdJbnZhbGlkIERhdGUnKSA/PyAtMSkgPiAtMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyB0aGlzLnNlbGVjdGVkS2V5ID0gZGF0YS5zZWxlY3RlZExhYmVsO1xuICAgIHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMuc2V0KHsgc2VsZWN0ZWRMYWJlbDogZGF0YS5kaXNwbGF5TGFiZWwgfSk7XG5cbiAgICAvLyB0aGlzLnNlbGVjdGVkLnN0YXJ0ID0gZGF5anMoZGF0YS5zdGFydERhdGUpO1xuICAgIC8vIHRoaXMuc2VsZWN0ZWQuZW5kID0gZGF5anMoZGF0YS5lbmREYXRlKTtcbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGRheWpzKGRhdGEuc3RhcnREYXRlKS5mb3JtYXQoJ0REL01NL1lZWVkgSEg6bW0nKTtcbiAgICAgIGNvbnN0IGVuZFRpbWUgPSBkYXlqcyhkYXRhLmVuZERhdGUpLmZvcm1hdCgnREQvTU0vWVlZWSBISDptbScpO1xuXG4gICAgICB0aGlzLmNob3NlbkRhdGVGcm9tUmFuZ2VzLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5zZWxlY3RlZExhYmVsID0gYCR7c3RhcnRUaW1lfSAtICR7ZW5kVGltZX1gO1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyB0aGlzLm1vRGF0ZVBpY2tlci5lbWl0KHRoaXMuc2luZ2xlRGF0ZVBpY2tlciA/IHsgY2hvc2VuTGFiZWw6IHRoaXMuZGF0ZVZhbHVlLmNob3NlbkxhYmVsLCBzaW5nbGVEYXRlOiB0aGlzLmRhdGVWYWx1ZS5zdGFydERhdGU/LnV0YygpLCBzdGFydERhdGU6IHRoaXMuZGF0ZVZhbHVlLnN0YXJ0RGF0ZT8udXRjKCksIGVuZERhdGU6IHRoaXMuZGF0ZVZhbHVlLmVuZERhdGU/LnV0YygpIH0gOiB7IGNob3NlbkxhYmVsOiB0aGlzLmRhdGVWYWx1ZS5jaG9zZW5MYWJlbCwgc3RhcnREYXRlOiB0aGlzLmRhdGVWYWx1ZS5zdGFydERhdGU/LnV0YygpLCBlbmREYXRlOiB0aGlzLmRhdGVWYWx1ZS5lbmREYXRlPy51dGMoKSB9KTtcbiAgICBjb25zdCBzaG93Vmlld0V4dGVybmFsUmFuZ2VMYWJlbCA9IHRoaXMuZXh0ZW5kUmFuZ2VzKCk/LmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSB0aGlzLmNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCk7XG5cbiAgICBpZiAodGhpcy5leHRlbmRSYW5nZXMoKSAmJiBzaG93Vmlld0V4dGVybmFsUmFuZ2VMYWJlbCkge1xuICAgICAgdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRMYWJlbCA9IHNob3dWaWV3RXh0ZXJuYWxSYW5nZUxhYmVsICYmIHNob3dWaWV3RXh0ZXJuYWxSYW5nZUxhYmVsLmxhYmVsO1xuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZGF0ZVJhbmdlU2VsZWN0ZWQuc2V0KHsgcXVpY2tSYW5nZUlkOiBkYXRhLnF1aWNrUmFuZ2VJZCwgc3RhcnREYXRlOiBkYXRhLnN0YXJ0RGF0ZSwgZW5kRGF0ZTogZGF0YS5lbmREYXRlIH0pO1xuICAgIHRoaXMub3V0U2VsZWN0RGF0ZVJhbmdlLmVtaXQoeyBxdWlja1JhbmdlSWQ6IGRhdGEucXVpY2tSYW5nZUlkLCBzdGFydERhdGU6IGRhdGEuc3RhcnREYXRlLCBlbmREYXRlOiBkYXRhLmVuZERhdGUgfSk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgICB0aGlzLmNoZWNrSXNWYWxpZCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJSZXNldChldmVudD86IEV2ZW50KSB7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMuc2V0KHt9KTtcbiAgICAvLyB0aGlzLnNlbGVjdGVkID0geyBzdGFydDogZGF5anMoKS5ob3VyKDApLm1pbnV0ZSgwKS5zZWNvbmQoMCksIGVuZDogZGF5anMoKS5ob3VyKDIzKS5taW51dGUoNTkpLnNlY29uZCg1OSkgfTtcbiAgICB0aGlzLm91dFJlc2V0LmVtaXQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyVXBkYXRlV2lkdGgoKSB7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8udXBkYXRlUG9wb3Zlck92ZXJsYXlQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDYW5jZWwoKSB7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJc1ZhbGlkKCkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KCkgfHwgdGhpcy5kaXNhYmxlKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zaW5nbGVFcnJvcigpLm1lc3NhZ2UgPyBmYWxzZSA6IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogdW5kZWZpbmVkIH0pO1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkUmVxdWlyZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbGlkUmVxdWlyZWQoKSAmJiAhdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwpIHtcbiAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy52YWxpZFJlcXVpcmVkKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCxcbiAgICAgICAgaW50ZXJwb2xhdGVQYXJhbXM6IHRoaXMudmFsaWRSZXF1aXJlZCgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7fVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkV2lkdGgoKSB7XG4gICAgaWYgKHRoaXMud2lkdGhCeUxhYmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZWZhdWx0V2lkdGgoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFdpZHRoKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNTaW5nbGUoKSA/IDMyMiA6IDE5MDtcbiAgICB9XG4gICAgcmV0dXJuICF0aGlzLmlzU2luZ2xlKCkgPyAyMzIgOiAxNTI7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjb25zb2xlLmxvZygnbmdPbkRlc3Ryb3knKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwie3sgY2xhc3NJbmNsdWRlKCkgfX1cIj5cbiAgQGlmIChsYWJlbENvbmZpZygpOyBhcyBsYWJlbENvbmZpZykge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWwgW2NsYXNzSW5jbHVkZV09XCJsYWJlbENvbmZpZy5jbGFzc0luY2x1ZGVcIlxuICAgICAgW2xhYmVsTGVmdF09XCJsYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgW2xhYmVsTGVmdENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdENsYXNzXCJcbiAgICAgIFtyZXF1aXJlZF09XCJsYWJlbENvbmZpZy5yZXF1aXJlZCBcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbkNsYXNzXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uQ2xhc3NcIlxuICAgICAgW2xhYmVsUmlnaHRdPVwibGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICBbbGFiZWxSaWdodENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtidXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICBbYnV0dG9uc1JpZ2h0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zTGVmdCB8fCBkaXNhYmxlKClcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodCB8fCBkaXNhYmxlKClcIlxuICAgICAgW2hhc1RvZ2dsZV09XCJsYWJlbENvbmZpZy5oYXNUb2dnbGVcIlxuICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJsYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgW3RvZ2dsZURpc2FibGVdPVwibGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJsYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICBbY291bnRdPVwibGFiZWxDb25maWcuY291bnRcIiAvPlxuICB9XG4gIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbFwiPlxuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY2xhc3NJbmNsdWRlXT1cImNsYXNzUGlja2VySW5jbHVkZSgpXCJcbiAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICBbbW9kZV09XCInY2xpY2snXCJcbiAgICAgIFtpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlXT1cInRydWVcIlxuICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cImlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KClcIlxuICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgYW5pbWF0aW9uQ29uZmlnOnt9LFxuICAgICAgICBtYXhXaWR0aDogNzcwLFxuICAgICAgICBtYXhIZWlnaHQ6IDQyMCxcbiAgICAgICAgZGlyZWN0aW9uRGlzdGFuY2U6MixcbiAgICAgICAgdGVtcGxhdGU6IGN1c3RvbVJhbmdlc1JlZixcbiAgICAgICAgd2lkdGhCeVBhcmVudDogd2lkdGhCeVBhcmVudCgpLFxuICAgICAgICB3aGl0ZVRoZW1lOiB0cnVlLFxuICAgICAgICBpZ25vcmVBcnJvdzogdHJ1ZSxcbiAgICAgICAgekluZGV4OiB6SW5kZXgoKSxcbiAgICAgICAgY2xhc3NJbmNsdWRlOiAncm91bmRlZC1bNHB4XSAnLFxuICAgICAgICBwb3NpdGlvbjoge21vZGU6IHJhbmdlc1BvcG92ZXJQb3NpdGlvbigpLGRpc3RhbmNlOiAwfX1cIlxuICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nU3RhZ2VQb3BvdmVyRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQpXCJcbiAgICAgIChvdXRFdmVudCk9XCJoYW5kbGVyUG9wb3ZlckV2ZW50KCRldmVudClcIj5cbiAgICAgIEBpZiAoIWlzTmdDb250ZW50KCkpIHtcbiAgICAgICAgPGRpdiAjY29udGFpbmVyUmVmXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBweC1bMTJweF0gaC1bMzJweF0gcm91bmRlZC1bNHB4XSBiZy1bI2ZmZmZmZl0gY3Vyc29yLXBvaW50ZXIgbGlicy11aS1mb250LWg1ciB7eyBjbGFzc1BpY2tlckNvbnRlbnRJbmNsdWRlKCkgfX1cIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICBbY2xhc3MuIWJvcmRlci1ub25lXT1cImlnbm9yZUJvcmRlclF1aWNrUmFuZ2UoKVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWdlbmVyYWxdPVwiIXNpbmdsZUVycm9yKCkubWVzc2FnZSAmJiAhaWdub3JlQm9yZGVyUXVpY2tSYW5nZSgpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCIoc2luZ2xlRXJyb3IoKS5tZXNzYWdlIHx8IGlzQm9yZGVyRXJyb3IoKSkgJiYgIWlnbm9yZUJvcmRlclF1aWNrUmFuZ2UoKVwiXG4gICAgICAgICAgW2NsYXNzLm1pbi13LVsyODRweF1dPVwiIWNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCAmJiAhaXNTaW5nbGUoKSAmJiBoYXNUaW1lUGlja2VyKClcIlxuICAgICAgICAgIFtjbGFzcy4hYm9yZGVyXT1cInNob3dSYW5nZXNQb3B1cCgpICYmICFpZ25vcmVCb3JkZXJRdWlja1JhbmdlKCkgJiYgIXJlYWRvbmx5KClcIlxuICAgICAgICAgIFtjbGFzcy4hYm9yZGVyLVsjNGU4Y2Y3XV09XCJzaG93UmFuZ2VzUG9wdXAoKSAmJiAhaWdub3JlQm9yZGVyUXVpY2tSYW5nZSgpICYmICFyZWFkb25seSgpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpIHx8IGZhbHNlXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwid2lkdGgoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJTZWxlY3RSYW5nZXMoJGV2ZW50KVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWljb24tY2FsZW5kYXIgdGV4dC1bIzljYTJhZF0gdGV4dC1bMTZweF1cIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzhweF1cIlxuICAgICAgICAgICAgW2NsYXNzLiF0ZXh0LVsjMDcxNjMxXV09XCIhZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIFtjbGFzcy4hdGV4dC1bIzljYTJhZF1dPVwiZGlzYWJsZSgpXCI+XG4gICAgICAgICAgICBAaWYgKCFjaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwpIHtcbiAgICAgICAgICAgICAgQGlmICghaXNTaW5nbGUoKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1bIzljYTJhZF1cIj5kZC9tbS95eXl5QGlmIChoYXNUaW1lUGlja2VyKCkpIHs8c3Bhbj4mbmJzcDtoaDptbTwvc3Bhbj59IC0gZGQvbW0veXl5eUBpZiAoaGFzVGltZVBpY2tlcigpKSB7PHNwYW4+Jm5ic3A7aGg6bW08L3NwYW4+fTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKGlzU2luZ2xlKCkpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtWyM5Y2EyYWRdXCI+ZGQvbW0veXl5eUBpZiAoaGFzVGltZVBpY2tlcigpKSB7PHNwYW4+Jm5ic3A7aGg6bW08L3NwYW4+fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoY2hvc2VuRGF0ZUZyb21SYW5nZXMoKS5zZWxlY3RlZExhYmVsICYmICFpc1NpbmdsZSgpKSB7XG4gICAgICAgICAgICAgICAgICB7eyBkaXNwbGF5UmFuZ2VUaXRsZSgpIH19XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoY2hvc2VuRGF0ZUZyb21SYW5nZXMoKS5zZWxlY3RlZExhYmVsICYmIGlzU2luZ2xlKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtjbGFzcy50ZXh0LVsjMjljN2NjXV09XCJ1c2VDb2xvck1vZGVFeGlzdCgpIHx8IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKGNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCAmJiBhbGxvd1Jlc2V0KCkgJiYgIWRpc2FibGUoKSAmJiAhcmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBsLVsxMnB4XSBtbC1hdXRvIGgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktaWNvbi1jbG9zZS1jaXJjbGUtc29saWQgdGV4dC1bMTZweF0gdGV4dC1bI2NkZDBkNl1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyUmVzZXQoJGV2ZW50KVwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChpc05nQ29udGVudCgpKSB7XG4gICAgICAgICAgPGRpdiAoY2xpY2spPVwiaGFuZGxlclNlbGVjdFJhbmdlcygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2xpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyPlxuICA8L2Rpdj5cbiAgQGlmIChzaW5nbGVFcnJvcigpLm1lc3NhZ2UgJiYgIXZhbGlkUmVxdWlyZWQoKT8uaWdub3JlTWVzc2FnZSkge1xuICAgIDxkaXYgY2xhc3M9XCJtdC1bOHB4XSB0ZXh0LVsjZWUyZDQxXSBsaWJzLXVpLWZvbnQtaDdyIGxpYnMtdWktdGV4dC1lcnJvclwiXG4gICAgICBbaW5uZXJIVE1MXT1cIihzaW5nbGVFcnJvcigpLm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCl8IHRyYW5zbGF0ZTp2YWxpZFJlcXVpcmVkKCk/LmludGVycG9sYXRlUGFyYW1zXCI+PC9kaXY+XG4gIH1cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2N1c3RvbVJhbmdlc1JlZj5cbiAgPGxpYnNfdWktY29tcG9uZW50cy1kYXRldGltZS1waWNrZXItY3VzdG9tX3JhbmdlcyBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICBbY2xhc3NJbmNsdWRlXT1cImNsYXNzSW5jbHVkZUN1c3RvbVJhbmdlcygpXCJcbiAgICBbd2lkdGhCeVBhcmVudF09XCJ3aWR0aEJ5UGFyZW50KClcIlxuICAgIFtkYXRlT3B0aW9uc109XCJkYXRlT3B0aW9ucygpXCJcbiAgICBbcG9zaXRpb25RdWlja1Jhbmdlc109XCJwb3NpdGlvblF1aWNrUmFuZ2VzKClcIlxuICAgIFtzaG93Q3VzdG9tUmFuZ2VMYWJlbF09XCJzaG93Q3VzdG9tUmFuZ2VMYWJlbCgpXCJcbiAgICBbYXV0b0FwcGx5XT1cImF1dG9BcHBseSgpXCJcbiAgICBbaXNTaW5nbGVdPVwiaXNTaW5nbGUoKVwiXG4gICAgW3NpbmdsZURhdGVTZWxlY3RlZF09XCJzaW5nbGVEYXRlU2VsZWN0ZWQoKVwiXG4gICAgW2RhdGVSYW5nZVNlbGVjdGVkXT1cImRhdGVSYW5nZVNlbGVjdGVkKClcIlxuICAgIFtleHRlbmRSYW5nZXNdPVwiZXh0ZW5kUmFuZ2VzKClcIlxuICAgIFtoYXNUaW1lUGlja2VyXT1cImhhc1RpbWVQaWNrZXIoKVwiXG4gICAgKG91dFVwZGF0ZVdpZHRoKT1cImhhbmRsZXJVcGRhdGVXaWR0aCgpXCJcbiAgICAob3V0Q2FuY2VsKT1cImhhbmRsZXJDYW5jZWwoKVwiXG4gICAgKG91dFNlbGVjdFNpbmdsZURhdGUpPVwiaGFuZGxlclBpY2tlclNpbmdsZURhdGUoJGV2ZW50KVwiXG4gICAgKG91dFNlbGVjdERhdGVSYW5nZSk9XCJoYW5kbGVyUGlja2VyRGF0ZVJhbmdlKCRldmVudClcIlxuICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudClcIiAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kYXRldGltZS9waWNrZXIvc3JjL3BpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pKLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBNEMsZ0NBQWdDLEVBQXNCLE1BQU0sNkJBQTZCLENBQUM7QUFDN0ksT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXRELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRixPQUFPLEVBQUUsbURBQW1ELEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUU5RyxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7OztBQWlCMUIsTUFBTSxPQUFPLHVDQUF1QztJQUNsRCxlQUFlO0lBQ0kseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7SUFDL0QsZUFBZSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN6QyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEQsV0FBVyxHQUFHLE1BQU0sQ0FBaUIsRUFB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QUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUN0QyxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0IsQ0FBQzt3R0FqTlUsdUNBQXVDOzRGQUF2Qyx1Q0FBdUMsdXZKQzVCcEQsK3JNQTZIQSx5RER2R0ksZUFBZSw0RkFDZiw4QkFBOEIsNHFCQUM5QixnQ0FBZ0MscWVBQ2hDLG1EQUFtRDs7NEZBRzFDLHVDQUF1QztrQkFkbkQsU0FBUzsrQkFFRSxvQ0FBb0MsY0FHbEMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWU7d0JBQ2YsOEJBQThCO3dCQUM5QixnQ0FBZ0M7d0JBQ2hDLG1EQUFtRDtxQkFDcEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIGVmZmVjdCwgdW50cmFja2VkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWxcIjtcbmltcG9ydCB7IElGbGFnTW91c2UsIElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBUWVBFX1BPUE9WRVJfRVZFTlQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyXCI7XG5pbXBvcnQgeyBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IHsgSURhdGVUaW1lVmFsaWQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3ZhbGlkLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSUNob3NlbkRhdGUsIExvY2FsaXphdGlvbkNvbmZpZywgVFlQRV9SQU5HRV9LRVkgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3BpY2tlci5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IElEYXRlVGltZVBpY2tlckZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgZGVmYXVsdExvY2FsZUNvbmZpZywgZ2V0RGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi9kZWZpbmVzL2RhdGUtb3B0aW9ucy5kZWZpbmVcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NvbXBvbmVudCB9IGZyb20gXCIuL2N1c3RvbS1yYW5nZXMvY3VzdG9tLXJhbmdlcy5jb21wb25lbnRcIjtcbmltcG9ydCB7IElFbWl0RGF0ZVJhbmdlLCBJRW1pdFNpbmdsZURhdGUgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2NhbGVuZGFyLWVtaXQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgZGF5anMgZnJvbSBcImRheWpzXCI7XG5pbXBvcnQgeyBJRGF0ZVJhbmdlIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9jYWxlbmRhci12YXJpYWJsZXMuaW50ZXJmYWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1kYXRldGltZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzRGF0ZXRpbWVQaWNrZXJDdXN0b21SYW5nZXNDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCA9IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQ7XG4gIHByb3RlY3RlZCBzaG93UmFuZ2VzUG9wdXAgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgd2lkdGggPSBjb21wdXRlZCh0aGlzLmNvbXB1dGVkV2lkdGguYmluZCh0aGlzKSk7XG4gIHByb3RlY3RlZCBzaW5nbGVFcnJvciA9IHNpZ25hbDxJRGF0ZVRpbWVWYWxpZD4oeyBtZXNzYWdlOiB1bmRlZmluZWQgfSk7XG4gIHByb3RlY3RlZCBjaG9zZW5EYXRlRnJvbVJhbmdlcyA9IHNpZ25hbDxJQ2hvc2VuRGF0ZT4oe30pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWREYXRlRnJvbUNhbGVuZGFyITogeyBzdGFydD86IGRheWpzLkRheWpzLCBlbmQ/OiBkYXlqcy5EYXlqcyB9O1xuICBwcm90ZWN0ZWQgZGlzcGxheVJhbmdlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRMYWJlbCA9IHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMoKS5zZWxlY3RlZExhYmVsIGFzIFRZUEVfUkFOR0VfS0VZO1xuXG4gICAgaWYgKHRoaXMuaXNTaW5nbGUoKSB8fCAhc2VsZWN0ZWRMYWJlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RlZExhYmVsO1xuICB9KTtcbiAgcHJvdGVjdGVkIGRhdGVPcHRpb25zID0gc2lnbmFsPExvY2FsaXphdGlvbkNvbmZpZz4oeyAuLi5kZWZhdWx0TG9jYWxlQ29uZmlnKCksIC4uLmdldERhdGVPcHRpb25zKCkgfSk7XG5cbiAgcHJpdmF0ZSBwb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKiogSU5QVVQgKi9cbiAgcmVhZG9ubHkgc2hvd0N1c3RvbVJhbmdlTGFiZWwgPSBpbnB1dDxib29sZWFuLCBib29sZWFuPih0cnVlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyB0cnVlIH0pO1xuICByZWFkb25seSBsYWJlbENvbmZpZyA9IGlucHV0PElMYWJlbD4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBjbGFzc1BpY2tlckluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgY2xhc3NQaWNrZXJDb250ZW50SW5jbHVkZSA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBpZ25vcmVCb3JkZXJRdWlja1JhbmdlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB1c2VDb2xvck1vZGVFeGlzdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzVGltZVBpY2tlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBhbGxvd1Jlc2V0ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IHdpZHRoQnlMYWJlbCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRydWUgfSk7XG4gIHJlYWRvbmx5IGRlZmF1bHRXaWR0aCA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgaXNTaW5nbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGV4dGVuZFJhbmdlcyA9IGlucHV0PEFycmF5PElEYXRlUmFuZ2U+PihbXSk7XG4gIHJlYWRvbmx5IGlzQm9yZGVyRXJyb3IgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IG1pbkRhdGUgPSBpbnB1dDxkYXlqcy5EYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgbWF4RGF0ZSA9IGlucHV0PGRheWpzLkRheWpzIHwgc3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuXG4gIHJlYWRvbmx5IHZhbGlkUmVxdWlyZWQgPSBpbnB1dDxJRGF0ZVRpbWVWYWxpZCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkgaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGZsYWdNb3VzZSA9IG1vZGVsPElGbGFnTW91c2U+KHsgaXNNb3VzZUVudGVyOiBmYWxzZSwgaXNNb3VzZUVudGVyQ29udGVudDogZmFsc2UgfSk7XG4gIHJlYWRvbmx5IHdpZHRoQnlQYXJlbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyPigxMjAwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMjAwIH0pO1xuICByZWFkb25seSByYW5nZXNQb3BvdmVyUG9zaXRpb24gPSBpbnB1dDwnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJywgJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCc+KCdzdGFydCcsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/ICdzdGFydCcgfSk7XG4gIHJlYWRvbmx5IGlzTmdDb250ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGVDdXN0b21SYW5nZXMgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgYXV0b0FwcGx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBwb3NpdGlvblF1aWNrUmFuZ2VzID0gaW5wdXQ8J2xlZnQnIHwgJ3JpZ2h0Jz4oJ2xlZnQnKTsgLy8gduG7iyB0csOtIGxpc3QgY2jhu41uIG5oYW5oIGtob+G6o25nIHRo4budaSBnaWFuXG5cbiAgcmVhZG9ubHkgc2luZ2xlRGF0ZVNlbGVjdGVkID0gbW9kZWw8SUVtaXRTaW5nbGVEYXRlPigpO1xuICByZWFkb25seSBkYXRlUmFuZ2VTZWxlY3RlZCA9IG1vZGVsPElFbWl0RGF0ZVJhbmdlPigpO1xuXG4gIC8qKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuICByZWFkb25seSBvdXRSZXNldCA9IG91dHB1dDx1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IG91dFNlbGVjdFNpbmdsZURhdGUgPSBvdXRwdXQ8SUVtaXRTaW5nbGVEYXRlPigpO1xuICByZWFkb25seSBvdXRTZWxlY3REYXRlUmFuZ2UgPSBvdXRwdXQ8SUVtaXREYXRlUmFuZ2U+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SURhdGVUaW1lUGlja2VyRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaW5nbGVEYXRlU2VsZWN0ZWQoKSkge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBkYXlqcyh0aGlzLnNpbmdsZURhdGVTZWxlY3RlZCgpPy5kYXRlKS5mb3JtYXQodGhpcy5oYXNUaW1lUGlja2VyKCkgPyAnREQvTU0vWVlZWSBISDptbScgOiAnREQvTU0vWVlZWScpO1xuXG4gICAgICAgIHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMuc2V0KHsgc2VsZWN0ZWRMYWJlbDogc3RhcnRUaW1lIH0pO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHsgY2hlY2tJc1ZhbGlkOiB0aGlzLmNoZWNrSXNWYWxpZC5iaW5kKHRoaXMpIH0pXG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdFJhbmdlcyhldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZShmbGFnTW91c2U6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLmZsYWdNb3VzZS5zZXQoZmxhZ01vdXNlKVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ1N0YWdlUG9wb3ZlckZsYWdNb3VzZShmbGFnTW91c2U6IElGbGFnTW91c2UpIHtcbiAgICBpZiAodGhpcy5mbGFnTW91c2UoKT8uaXNNb3VzZUVudGVyQ29udGVudCkge1xuICAgICAgZmxhZ01vdXNlLmlzTW91c2VFbnRlckNvbnRlbnQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdChmbGFnTW91c2UpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LnNldChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJFdmVudChldmVudDogVFlQRV9QT1BPVkVSX0VWRU5UKSB7XG4gICAgaWYgKGV2ZW50ID09PSAncmVtb3ZlJykge1xuICAgICAgdGhpcy5zaG93UmFuZ2VzUG9wdXAuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBpY2tlclNpbmdsZURhdGUoZGF0YTogSUVtaXRTaW5nbGVEYXRlKSB7XG4gICAgdGhpcy5vdXRTZWxlY3RTaW5nbGVEYXRlLmVtaXQoZGF0YSk7XG4gICAgdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcy5zZXQoeyBzZWxlY3RlZExhYmVsOiBkYXRhLmRpc3BsYXlMYWJlbCB9KTtcbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGRheWpzKGRhdGEuZGF0ZSkuZm9ybWF0KCdERC9NTS9ZWVlZIEhIOm1tJyk7XG5cbiAgICAgIHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnNlbGVjdGVkTGFiZWwgPSBgJHtzdGFydFRpbWV9YDtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zaW5nbGVEYXRlU2VsZWN0ZWQuc2V0KGRhdGEpO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBpY2tlckRhdGVSYW5nZShkYXRhOiBJRW1pdERhdGVSYW5nZSkge1xuICAgIGlmICgoZGF0YS5kaXNwbGF5TGFiZWw/LmluZGV4T2YoJ0ludmFsaWQgRGF0ZScpID8/IC0xKSA+IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHRoaXMuc2VsZWN0ZWRLZXkgPSBkYXRhLnNlbGVjdGVkTGFiZWw7XG4gICAgdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcy5zZXQoeyBzZWxlY3RlZExhYmVsOiBkYXRhLmRpc3BsYXlMYWJlbCB9KTtcblxuICAgIC8vIHRoaXMuc2VsZWN0ZWQuc3RhcnQgPSBkYXlqcyhkYXRhLnN0YXJ0RGF0ZSk7XG4gICAgLy8gdGhpcy5zZWxlY3RlZC5lbmQgPSBkYXlqcyhkYXRhLmVuZERhdGUpO1xuICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZGF5anMoZGF0YS5zdGFydERhdGUpLmZvcm1hdCgnREQvTU0vWVlZWSBISDptbScpO1xuICAgICAgY29uc3QgZW5kVGltZSA9IGRheWpzKGRhdGEuZW5kRGF0ZSkuZm9ybWF0KCdERC9NTS9ZWVlZIEhIOm1tJyk7XG5cbiAgICAgIHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnNlbGVjdGVkTGFiZWwgPSBgJHtzdGFydFRpbWV9IC0gJHtlbmRUaW1lfWA7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHRoaXMubW9EYXRlUGlja2VyLmVtaXQodGhpcy5zaW5nbGVEYXRlUGlja2VyID8geyBjaG9zZW5MYWJlbDogdGhpcy5kYXRlVmFsdWUuY2hvc2VuTGFiZWwsIHNpbmdsZURhdGU6IHRoaXMuZGF0ZVZhbHVlLnN0YXJ0RGF0ZT8udXRjKCksIHN0YXJ0RGF0ZTogdGhpcy5kYXRlVmFsdWUuc3RhcnREYXRlPy51dGMoKSwgZW5kRGF0ZTogdGhpcy5kYXRlVmFsdWUuZW5kRGF0ZT8udXRjKCkgfSA6IHsgY2hvc2VuTGFiZWw6IHRoaXMuZGF0ZVZhbHVlLmNob3NlbkxhYmVsLCBzdGFydERhdGU6IHRoaXMuZGF0ZVZhbHVlLnN0YXJ0RGF0ZT8udXRjKCksIGVuZERhdGU6IHRoaXMuZGF0ZVZhbHVlLmVuZERhdGU/LnV0YygpIH0pO1xuICAgIGNvbnN0IHNob3dWaWV3RXh0ZXJuYWxSYW5nZUxhYmVsID0gdGhpcy5leHRlbmRSYW5nZXMoKT8uZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMoKS5zZWxlY3RlZExhYmVsKTtcblxuICAgIGlmICh0aGlzLmV4dGVuZFJhbmdlcygpICYmIHNob3dWaWV3RXh0ZXJuYWxSYW5nZUxhYmVsKSB7XG4gICAgICB0aGlzLmNob3NlbkRhdGVGcm9tUmFuZ2VzLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5zZWxlY3RlZExhYmVsID0gc2hvd1ZpZXdFeHRlcm5hbFJhbmdlTGFiZWwgJiYgc2hvd1ZpZXdFeHRlcm5hbFJhbmdlTGFiZWwubGFiZWw7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRlUmFuZ2VTZWxlY3RlZC5zZXQoeyBxdWlja1JhbmdlSWQ6IGRhdGEucXVpY2tSYW5nZUlkLCBzdGFydERhdGU6IGRhdGEuc3RhcnREYXRlLCBlbmREYXRlOiBkYXRhLmVuZERhdGUgfSk7XG4gICAgdGhpcy5vdXRTZWxlY3REYXRlUmFuZ2UuZW1pdCh7IHF1aWNrUmFuZ2VJZDogZGF0YS5xdWlja1JhbmdlSWQsIHN0YXJ0RGF0ZTogZGF0YS5zdGFydERhdGUsIGVuZERhdGU6IGRhdGEuZW5kRGF0ZSB9KTtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgIHRoaXMuY2hlY2tJc1ZhbGlkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclJlc2V0KGV2ZW50PzogRXZlbnQpIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcy5zZXQoe30pO1xuICAgIC8vIHRoaXMuc2VsZWN0ZWQgPSB7IHN0YXJ0OiBkYXlqcygpLmhvdXIoMCkubWludXRlKDApLnNlY29uZCgwKSwgZW5kOiBkYXlqcygpLmhvdXIoMjMpLm1pbnV0ZSg1OSkuc2Vjb25kKDU5KSB9O1xuICAgIHRoaXMub3V0UmVzZXQuZW1pdCh1bmRlZmluZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJVcGRhdGVXaWR0aCgpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgpPy51cGRhdGVQb3BvdmVyT3ZlcmxheVBvc2l0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNhbmNlbCgpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja0lzVmFsaWQoKSB7XG4gICAgaWYgKHRoaXMucmVhZG9ubHkoKSB8fCB0aGlzLmRpc2FibGUoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudmFsaWRhdGUoKTtcblxuICAgIHJldHVybiB0aGlzLnNpbmdsZUVycm9yKCkubWVzc2FnZSA/IGZhbHNlIDogdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGUoKSB7XG4gICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoeyBtZXNzYWdlOiB1bmRlZmluZWQgfSk7XG5cbiAgICBpZiAoIXRoaXMudmFsaWRSZXF1aXJlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmFsaWRSZXF1aXJlZCgpICYmICF0aGlzLmNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCkge1xuICAgICAgdGhpcy5zaW5nbGVFcnJvci5zZXQoe1xuICAgICAgICBtZXNzYWdlOiB0aGlzLnZhbGlkUmVxdWlyZWQoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElELFxuICAgICAgICBpbnRlcnBvbGF0ZVBhcmFtczogdGhpcy52YWxpZFJlcXVpcmVkKCk/LmludGVycG9sYXRlUGFyYW1zIHx8IHt9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZWRXaWR0aCgpIHtcbiAgICBpZiAodGhpcy53aWR0aEJ5TGFiZWwoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRlZmF1bHRXaWR0aCgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZhdWx0V2lkdGgoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc1NpbmdsZSgpID8gMzIyIDogMTkwO1xuICAgIH1cbiAgICByZXR1cm4gIXRoaXMuaXNTaW5nbGUoKSA/IDIzMiA6IDE1MjtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNvbnNvbGUubG9nKCduZ09uRGVzdHJveScpO1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJ7eyBjbGFzc0luY2x1ZGUoKSB9fVwiPlxuICBAaWYgKGxhYmVsQ29uZmlnKCk7IGFzIGxhYmVsQ29uZmlnKSB7XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1sYWJlbCBbY2xhc3NJbmNsdWRlXT1cImxhYmVsQ29uZmlnLmNsYXNzSW5jbHVkZVwiXG4gICAgICBbbGFiZWxMZWZ0XT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICBbbGFiZWxMZWZ0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0Q2xhc3NcIlxuICAgICAgW3JlcXVpcmVkXT1cImxhYmVsQ29uZmlnLnJlcXVpcmVkIFwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgW2Rlc2NyaXB0aW9uQ2xhc3NdPVwibGFiZWxDb25maWcuZGVzY3JpcHRpb25DbGFzc1wiXG4gICAgICBbbGFiZWxSaWdodF09XCJsYWJlbENvbmZpZy5sYWJlbFJpZ2h0XCJcbiAgICAgIFtsYWJlbFJpZ2h0Q2xhc3NdPVwibGFiZWxDb25maWcubGFiZWxSaWdodENsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2J1dHRvbnNMZWZ0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNMZWZ0XCJcbiAgICAgIFtidXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuYnV0dG9uc1JpZ2h0XCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0IHx8IGRpc2FibGUoKVwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNSaWdodF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc1JpZ2h0IHx8IGRpc2FibGUoKVwiXG4gICAgICBbaGFzVG9nZ2xlXT1cImxhYmVsQ29uZmlnLmhhc1RvZ2dsZVwiXG4gICAgICBbdG9nZ2xlQWN0aXZlXT1cImxhYmVsQ29uZmlnLnRvZ2dsZUFjdGl2ZVwiXG4gICAgICBbdG9nZ2xlRGlzYWJsZV09XCJsYWJlbENvbmZpZy50b2dnbGVEaXNhYmxlIHx8IGRpc2FibGUoKVwiXG4gICAgICBbcG9wb3Zlcl09XCJsYWJlbENvbmZpZy5wb3BvdmVyXCJcbiAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICBbbGltaXRMZW5ndGhdPVwibGFiZWxDb25maWcubGltaXRMZW5ndGhcIlxuICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgW2Rpc2FibGVCdXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbiB8fCBkaXNhYmxlKClcIlxuICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgIFtjb3VudF09XCJsYWJlbENvbmZpZy5jb3VudFwiIC8+XG4gIH1cbiAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsXCI+XG4gICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIFtjbGFzc0luY2x1ZGVdPVwiY2xhc3NQaWNrZXJJbmNsdWRlKClcIlxuICAgICAgW2lnbm9yZVNob3dQb3BvdmVyXT1cImRpc2FibGUoKSB8fCByZWFkb25seSgpXCJcbiAgICAgIFttb2RlXT1cIidjbGljaydcIlxuICAgICAgW2lnbm9yZUhpZGRlblBvcG92ZXJDb250ZW50V2hlbk1vdXNlTGVhdmVdPVwidHJ1ZVwiXG4gICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwiaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnQoKVwiXG4gICAgICBbZmxhZ01vdXNlXT1cImZsYWdNb3VzZSgpXCJcbiAgICAgIFtjb25maWddPVwie1xuICAgICAgICBhbmltYXRpb25Db25maWc6e30sXG4gICAgICAgIG1heFdpZHRoOiA3NzAsXG4gICAgICAgIG1heEhlaWdodDogNDIwLFxuICAgICAgICBkaXJlY3Rpb25EaXN0YW5jZToyLFxuICAgICAgICB0ZW1wbGF0ZTogY3VzdG9tUmFuZ2VzUmVmLFxuICAgICAgICB3aWR0aEJ5UGFyZW50OiB3aWR0aEJ5UGFyZW50KCksXG4gICAgICAgIHdoaXRlVGhlbWU6IHRydWUsXG4gICAgICAgIGlnbm9yZUFycm93OiB0cnVlLFxuICAgICAgICB6SW5kZXg6IHpJbmRleCgpLFxuICAgICAgICBjbGFzc0luY2x1ZGU6ICdyb3VuZGVkLVs0cHhdICcsXG4gICAgICAgIHBvc2l0aW9uOiB7bW9kZTogcmFuZ2VzUG9wb3ZlclBvc2l0aW9uKCksZGlzdGFuY2U6IDB9fVwiXG4gICAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdTdGFnZVBvcG92ZXJGbGFnTW91c2UoJGV2ZW50KVwiXG4gICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25Db250cm9sKCRldmVudClcIlxuICAgICAgKG91dEV2ZW50KT1cImhhbmRsZXJQb3BvdmVyRXZlbnQoJGV2ZW50KVwiPlxuICAgICAgQGlmICghaXNOZ0NvbnRlbnQoKSkge1xuICAgICAgICA8ZGl2ICNjb250YWluZXJSZWZcbiAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHB4LVsxMnB4XSBoLVszMnB4XSByb3VuZGVkLVs0cHhdIGJnLVsjZmZmZmZmXSBjdXJzb3ItcG9pbnRlciBsaWJzLXVpLWZvbnQtaDVyIHt7IGNsYXNzUGlja2VyQ29udGVudEluY2x1ZGUoKSB9fVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgIFtjbGFzcy4hYm9yZGVyLW5vbmVdPVwiaWdub3JlQm9yZGVyUXVpY2tSYW5nZSgpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZ2VuZXJhbF09XCIhc2luZ2xlRXJyb3IoKS5tZXNzYWdlICYmICFpZ25vcmVCb3JkZXJRdWlja1JhbmdlKClcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1lcnJvci1nZW5lcmFsXT1cIihzaW5nbGVFcnJvcigpLm1lc3NhZ2UgfHwgaXNCb3JkZXJFcnJvcigpKSAmJiAhaWdub3JlQm9yZGVyUXVpY2tSYW5nZSgpXCJcbiAgICAgICAgICBbY2xhc3MubWluLXctWzI4NHB4XV09XCIhY2hvc2VuRGF0ZUZyb21SYW5nZXMoKS5zZWxlY3RlZExhYmVsICYmICFpc1NpbmdsZSgpICYmIGhhc1RpbWVQaWNrZXIoKVwiXG4gICAgICAgICAgW2NsYXNzLiFib3JkZXJdPVwic2hvd1Jhbmdlc1BvcHVwKCkgJiYgIWlnbm9yZUJvcmRlclF1aWNrUmFuZ2UoKSAmJiAhcmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2NsYXNzLiFib3JkZXItWyM0ZThjZjddXT1cInNob3dSYW5nZXNQb3B1cCgpICYmICFpZ25vcmVCb3JkZXJRdWlja1JhbmdlKCkgJiYgIXJlYWRvbmx5KClcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLXJlYWRvbmx5XT1cInJlYWRvbmx5KCkgfHwgZmFsc2VcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aCgpXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclNlbGVjdFJhbmdlcygkZXZlbnQpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktaWNvbi1jYWxlbmRhciB0ZXh0LVsjOWNhMmFkXSB0ZXh0LVsxNnB4XVwiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1bOHB4XVwiXG4gICAgICAgICAgICBbY2xhc3MuIXRleHQtWyMwNzE2MzFdXT1cIiFkaXNhYmxlKClcIlxuICAgICAgICAgICAgW2NsYXNzLiF0ZXh0LVsjOWNhMmFkXV09XCJkaXNhYmxlKClcIj5cbiAgICAgICAgICAgIEBpZiAoIWNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCkge1xuICAgICAgICAgICAgICBAaWYgKCFpc1NpbmdsZSgpKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjOWNhMmFkXVwiPmRkL21tL3l5eXlAaWYgKGhhc1RpbWVQaWNrZXIoKSkgezxzcGFuPiZuYnNwO2hoOm1tPC9zcGFuPn0gLSBkZC9tbS95eXl5QGlmIChoYXNUaW1lUGlja2VyKCkpIHs8c3Bhbj4mbmJzcDtoaDptbTwvc3Bhbj59PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoaXNTaW5nbGUoKSkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1bIzljYTJhZF1cIj5kZC9tbS95eXl5QGlmIChoYXNUaW1lUGlja2VyKCkpIHs8c3Bhbj4mbmJzcDtoaDptbTwvc3Bhbj59PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChjaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwgJiYgIWlzU2luZ2xlKCkpIHtcbiAgICAgICAgICAgICAgICAgIHt7IGRpc3BsYXlSYW5nZVRpdGxlKCkgfX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGlmIChjaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwgJiYgaXNTaW5nbGUoKSkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzLnRleHQtWyMyOWM3Y2NdXT1cInVzZUNvbG9yTW9kZUV4aXN0KCkgfHwgZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY2hvc2VuRGF0ZUZyb21SYW5nZXMoKS5zZWxlY3RlZExhYmVsIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoY2hvc2VuRGF0ZUZyb21SYW5nZXMoKS5zZWxlY3RlZExhYmVsICYmIGFsbG93UmVzZXQoKSAmJiAhZGlzYWJsZSgpICYmICFyZWFkb25seSgpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGwtWzEycHhdIG1sLWF1dG8gaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNsb3NlLWNpcmNsZS1zb2xpZCB0ZXh0LVsxNnB4XSB0ZXh0LVsjY2RkMGQ2XVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJSZXNldCgkZXZlbnQpXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGlzTmdDb250ZW50KCkpIHtcbiAgICAgICAgICA8ZGl2IChjbGljayk9XCJoYW5kbGVyU2VsZWN0UmFuZ2VzKCRldmVudClcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gIDwvZGl2PlxuICBAaWYgKHNpbmdsZUVycm9yKCkubWVzc2FnZSAmJiAhdmFsaWRSZXF1aXJlZCgpPy5pZ25vcmVNZXNzYWdlKSB7XG4gICAgPGRpdiBjbGFzcz1cIm10LVs4cHhdIHRleHQtWyNlZTJkNDFdIGxpYnMtdWktZm9udC1oN3IgbGlicy11aS10ZXh0LWVycm9yXCJcbiAgICAgIFtpbm5lckhUTUxdPVwiKHNpbmdsZUVycm9yKCkubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEKXwgdHJhbnNsYXRlOnZhbGlkUmVxdWlyZWQoKT8uaW50ZXJwb2xhdGVQYXJhbXNcIj48L2Rpdj5cbiAgfVxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY3VzdG9tUmFuZ2VzUmVmPlxuICA8bGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLXBpY2tlci1jdXN0b21fcmFuZ2VzIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgIFtjbGFzc0luY2x1ZGVdPVwiY2xhc3NJbmNsdWRlQ3VzdG9tUmFuZ2VzKClcIlxuICAgIFt3aWR0aEJ5UGFyZW50XT1cIndpZHRoQnlQYXJlbnQoKVwiXG4gICAgW2RhdGVPcHRpb25zXT1cImRhdGVPcHRpb25zKClcIlxuICAgIFtwb3NpdGlvblF1aWNrUmFuZ2VzXT1cInBvc2l0aW9uUXVpY2tSYW5nZXMoKVwiXG4gICAgW3Nob3dDdXN0b21SYW5nZUxhYmVsXT1cInNob3dDdXN0b21SYW5nZUxhYmVsKClcIlxuICAgIFthdXRvQXBwbHldPVwiYXV0b0FwcGx5KClcIlxuICAgIFtpc1NpbmdsZV09XCJpc1NpbmdsZSgpXCJcbiAgICBbbWluRGF0ZV09XCJtaW5EYXRlKClcIlxuICAgIFttYXhEYXRlXT1cIm1heERhdGUoKVwiXG4gICAgW3NpbmdsZURhdGVTZWxlY3RlZF09XCJzaW5nbGVEYXRlU2VsZWN0ZWQoKVwiXG4gICAgW2RhdGVSYW5nZVNlbGVjdGVkXT1cImRhdGVSYW5nZVNlbGVjdGVkKClcIlxuICAgIFtleHRlbmRSYW5nZXNdPVwiZXh0ZW5kUmFuZ2VzKClcIlxuICAgIFtoYXNUaW1lUGlja2VyXT1cImhhc1RpbWVQaWNrZXIoKVwiXG4gICAgKG91dFVwZGF0ZVdpZHRoKT1cImhhbmRsZXJVcGRhdGVXaWR0aCgpXCJcbiAgICAob3V0Q2FuY2VsKT1cImhhbmRsZXJDYW5jZWwoKVwiXG4gICAgKG91dFNlbGVjdFNpbmdsZURhdGUpPVwiaGFuZGxlclBpY2tlclNpbmdsZURhdGUoJGV2ZW50KVwiXG4gICAgKG91dFNlbGVjdERhdGVSYW5nZSk9XCJoYW5kbGVyUGlja2VyRGF0ZVJhbmdlKCRldmVudClcIlxuICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ1N0YWdlRmxhZ01vdXNlKCRldmVudClcIiAvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==