@libs-ui/components-datetime-picker 0.2.134 → 0.2.136

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.
@@ -25,6 +25,7 @@ export class LibsUiComponentsDatetimePickerCustomRangesComponent {
25
25
  autoApply = input(false);
26
26
  minDate = input();
27
27
  maxDate = input();
28
+ listYearHiddenInputSearch = input(true, { transform: (value) => value ?? true });
28
29
  positionQuickRanges = input('left', { transform: (value) => value ?? 'left' });
29
30
  isSingle = input(false, { transform: (value) => value ?? false });
30
31
  hasTimePicker = input(true);
@@ -289,7 +290,7 @@ export class LibsUiComponentsDatetimePickerCustomRangesComponent {
289
290
  // this.onDestroy.complete();
290
291
  }
291
292
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimePickerCustomRangesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
292
- 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 });
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 }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, listYearHiddenInputSearch: { classPropertyName: "listYearHiddenInputSearch", publicName: "listYearHiddenInputSearch", 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\"\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 [listYearHiddenInputSearch]=\"listYearHiddenInputSearch()\"\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:relative;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", "listYearHiddenInputSearch"], 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 });
293
294
  }
294
295
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimePickerCustomRangesComponent, decorators: [{
295
296
  type: Component,
@@ -297,6 +298,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
297
298
  TranslateModule,
298
299
  LibsUiComponentsDatetimePickerCustomRangesCalendarComponent,
299
300
  LibsUiComponentsPopoverComponent
300
- ], 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"] }]
301
+ ], template: "<div #pickerContainer\n class=\"libs-ui-component-custom_ranges flex rounded-[4px] bg-[#ffffff] z-[1000] overflow-hidden\"\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 [listYearHiddenInputSearch]=\"listYearHiddenInputSearch()\"\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:relative;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"] }]
301
302
  }], ctorParameters: () => [] });
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJhbmdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9jdXN0b20tcmFuZ2VzL2N1c3RvbS1yYW5nZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL3BpY2tlci9zcmMvY3VzdG9tLXJhbmdlcy9jdXN0b20tcmFuZ2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUFjLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLMUcsT0FBTyxFQUFFLDJEQUEyRCxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZTVHLE1BQU0sT0FBTyxtREFBbUQ7SUFDOUQsZUFBZTtJQUNMLG9CQUFvQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUM5QyxnQkFBZ0IsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELGtCQUFrQixHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztJQUM1RSxnQkFBZ0IsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO0lBRXpGLGVBQWUsR0FBRyxN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QUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFUyx1QkFBdUIsQ0FBQyxLQUFvQztRQUNwRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELHlCQUF5QjtRQUN6Qiw2QkFBNkI7SUFDL0IsQ0FBQzt3R0E5VVUsbURBQW1EOzRGQUFuRCxtREFBbUQsc2tHQ3hCaEUsMnpGQXNEQSw2cEJEbkNJLGVBQWUsK0JBQ2YsMkRBQTJELHFlQUMzRCxnQ0FBZ0M7OzRGQUd2QixtREFBbUQ7a0JBYi9ELFNBQVM7K0JBRUUsa0RBQWtELGNBR2hELElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxlQUFlO3dCQUNmLDJEQUEyRDt3QkFDM0QsZ0NBQWdDO3FCQUNqQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgSUZsYWdNb3VzZSwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB7IGRlZmF1bHRMb2NhbGVDb25maWcsIGdldERhdGVPcHRpb25zLCBnZXREYXRlUmFuZ2VEZWZhdWx0IH0gZnJvbSBcIi4uL2RlZmluZXMvZGF0ZS1vcHRpb25zLmRlZmluZVwiO1xuaW1wb3J0IHsgSUVtaXREYXRlQ2FsZW5kYXIsIElFbWl0RGF0ZVJhbmdlLCBJRW1pdFNpbmdsZURhdGUgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9jYWxlbmRhci1lbWl0LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSURhdGVSYW5nZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2NhbGVuZGFyLXZhcmlhYmxlcy5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IElDYWxlbmRhckZ1bmN0aW9uQ29udHJvbEV2ZW50IH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IExvY2FsaXphdGlvbkNvbmZpZyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3BpY2tlci5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NhbGVuZGFyQ29tcG9uZW50IH0gZnJvbSBcIi4vY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1kYXRldGltZS1waWNrZXItY3VzdG9tX3JhbmdlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tcmFuZ2VzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLXJhbmdlcy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzRGF0ZXRpbWVQaWNrZXJDdXN0b21SYW5nZXNDYWxlbmRhckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgc2hvd0NhbFRhYmxlSW5SYW5nZXMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgcXVpY2tSYW5nZXNBcnJheSA9IHNpZ25hbDxBcnJheTxJRGF0ZVJhbmdlPj4oW10pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRRdWlja1JhbmdlID0gc2lnbmFsPHN0cmluZz4oJycpOyAvLyBxdWljayByYW5nZSDEkcOjIMSRxrDhu6NjIGzGsHUgdHLGsOG7m2MgxJHDs1xuICBwcm90ZWN0ZWQgY2hvc2VuUXVpY2tSYW5nZSA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7IC8vIHF1aWNrIHJhbmdlIMSRYW5nIMSRxrDhu6NjIGNo4buNblxuXG4gIHByaXZhdGUgY2FsZW5kYXJTaG93aW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSB0aW1lb3V0cyA9IHNpZ25hbDxBcnJheTxudW1iZXI+PihbXSk7XG4gIHByaXZhdGUgY2FsZW5kYXJGdW5jdGlvbkNvbnRyb2xFdmVudCA9IHNpZ25hbDxJQ2FsZW5kYXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBjaG9zZW5TaW5nbGVEYXRlID0gc2lnbmFsPElFbWl0U2luZ2xlRGF0ZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBjaG9zZW5EYXRlUmFuZ2UgPSBzaWduYWw8SUVtaXREYXRlUmFuZ2UgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqIElOUFVUICovXG4gIC8vIHJlYWRvbmx5IFNlbGVjdGVkUXVpY2tSYW5nZSA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oMTIwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMTIwMCB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGV4dGVuZFJhbmdlcyA9IGlucHV0PEFycmF5PElEYXRlUmFuZ2U+PihbXSk7XG4gIHJlYWRvbmx5IHdpZHRoQnlQYXJlbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGF1dG9BcHBseSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbWluRGF0ZSA9IGlucHV0PGRheWpzLkRheWpzIHwgc3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBtYXhEYXRlID0gaW5wdXQ8ZGF5anMuRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG5cbiAgcmVhZG9ubHkgcG9zaXRpb25RdWlja1JhbmdlcyA9IGlucHV0PCdsZWZ0JyB8ICdyaWdodCcsICdsZWZ0JyB8ICdyaWdodCc+KCdsZWZ0JywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ2xlZnQnIH0pO1xuICByZWFkb25seSBpc1NpbmdsZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaGFzVGltZVBpY2tlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBmbGFnTW91c2UgPSBpbnB1dDxJRmxhZ01vdXNlPih7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlIH0pO1xuICByZWFkb25seSBkYXRlT3B0aW9ucyA9IGlucHV0PExvY2FsaXphdGlvbkNvbmZpZz4oeyAuLi5kZWZhdWx0TG9jYWxlQ29uZmlnKCksIC4uLmdldERhdGVPcHRpb25zKCkgfSk7XG4gIHJlYWRvbmx5IGFsd2F5c1Nob3dDYWxlbmRhcnMgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHN0YXJ0RGF0ZSA9IG1vZGVsPGRheWpzLkRheWpzIHwgdW5kZWZpbmVkPihkYXlqcygpLnN0YXJ0T2YoJ2RheScpKTtcbiAgcmVhZG9ubHkgZW5kRGF0ZSA9IG1vZGVsPGRheWpzLkRheWpzIHwgdW5kZWZpbmVkPihkYXlqcygpLmVuZE9mKCdkYXknKSk7XG4gIHJlYWRvbmx5IHNob3dDdXN0b21SYW5nZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcmVhZG9ubHkga2VlcENhbGVuZGFyT3BlbmluZ1dpdGhSYW5nZSA9IGlucHV0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgcmVhZG9ubHkgc2luZ2xlRGF0ZVNlbGVjdGVkID0gaW5wdXQ8SUVtaXRTaW5nbGVEYXRlIHwgdW5kZWZpbmVkLCBJRW1pdFNpbmdsZURhdGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5kYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBkYXRlID0gdmFsdWUuZGF0ZTtcblxuICAgICAgaWYgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICBkYXRlID0gZGF5anMoZGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZhbHVlLFxuICAgICAgICBkYXRlXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG4gIHJlYWRvbmx5IGRhdGVSYW5nZVNlbGVjdGVkID0gaW5wdXQ8SUVtaXREYXRlUmFuZ2UgfCB1bmRlZmluZWQsIElFbWl0RGF0ZVJhbmdlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHtcbiAgICB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgc3RhcnREYXRlID0gdmFsdWUuc3RhcnREYXRlO1xuICAgICAgbGV0IGVuZERhdGUgPSB2YWx1ZS5lbmREYXRlO1xuXG4gICAgICBpZiAodHlwZW9mIHN0YXJ0RGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3RhcnREYXRlID0gZGF5anMoc3RhcnREYXRlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBlbmREYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICBlbmREYXRlID0gZGF5anMoZW5kRGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZhbHVlLFxuICAgICAgICBzdGFydERhdGUsXG4gICAgICAgIGVuZERhdGVcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvKiogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2UgPSBvdXRwdXQ8SUZsYWdNb3VzZT4oKTtcbiAgcmVhZG9ubHkgb3V0VXBkYXRlV2lkdGggPSBvdXRwdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBvdXRDYW5jZWwgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRTZWxlY3RTaW5nbGVEYXRlID0gb3V0cHV0PElFbWl0U2luZ2xlRGF0ZT4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0RGF0ZVJhbmdlID0gb3V0cHV0PElFbWl0RGF0ZVJhbmdlPigpO1xuICByZWFkb25seSBvdXRDbGlja1JhbmdlID0gb3V0cHV0PElEYXRlUmFuZ2U+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHVudHJhY2tlZCh0aGlzLm9uQWZ0ZXJWaWV3SW5pdC5iaW5kKHRoaXMpKSk7XG4gIH1cblxuICBwcml2YXRlIG9uQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMuc3RhcnREYXRlKCkpIHtcbiAgICAgIHRoaXMuc3RhcnREYXRlLnNldChkYXlqcygpLnN0YXJ0T2YoJ2RheScpKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmVuZERhdGUoKSkge1xuICAgICAgdGhpcy5lbmREYXRlLnNldChkYXlqcygpLmVuZE9mKCdkYXknKSk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGVSYW5nZVNlbGVjdGVkID0gdGhpcy5kYXRlUmFuZ2VTZWxlY3RlZCgpO1xuICAgIGNvbnN0IHNpbmdsZURhdGVTZWxlY3RlZCA9IHRoaXMuc2luZ2xlRGF0ZVNlbGVjdGVkKCk7XG4gICAgY29uc3QgY3VzdG9tUmFuZ2UgPSB7XG4gICAgICBpZDogdGhpcy5kYXRlT3B0aW9ucygpPy5jdXN0b21SYW5nZUxhYmVsIHx8ICcnLFxuICAgICAgbGFiZWw6IHRoaXMuZGF0ZU9wdGlvbnMoKT8uY3VzdG9tUmFuZ2VMYWJlbCB8fCAnJ1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gZGF5anMoKTtcblxuICAgICAgICB0aGlzLnN0YXJ0RGF0ZS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQuc2V0KCdob3VyJywgMTApLnNldCgnbWludXRlJywgMzApO1xuICAgICAgICAgICAgLy8gY3VycmVudC5ob3VyKG5vdy5ob3VyKCkpLm1pbnV0ZShub3cubWludXRlKCkpO1xuICAgICAgICAgIH1cblxuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmVuZERhdGUudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgICAgICBjdXJyZW50LmhvdXIobm93LmhvdXIoKSkubWludXRlKG5vdy5taW51dGUoKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHNpbmdsZURhdGVTZWxlY3RlZD8uZGF0ZSkge1xuICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoc2luZ2xlRGF0ZVNlbGVjdGVkLmRhdGUgYXMgZGF5anMuRGF5anMpO1xuICAgICAgICB0aGlzLmVuZERhdGUuc2V0KHNpbmdsZURhdGVTZWxlY3RlZC5kYXRlIGFzIGRheWpzLkRheWpzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVuZGVyUmFuZ2VzKCk7XG5cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRlUmFuZ2VTZWxlY3RlZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2Uuc2V0KGRhdGVSYW5nZVNlbGVjdGVkLnF1aWNrUmFuZ2VJZCA/IGRhdGVSYW5nZVNlbGVjdGVkLnF1aWNrUmFuZ2VJZCA6IGN1c3RvbVJhbmdlLmlkKTtcbiAgICAgIHRoaXMuY2hvc2VuUXVpY2tSYW5nZS5zZXQoZGF0ZVJhbmdlU2VsZWN0ZWQucXVpY2tSYW5nZUlkID8/IGN1c3RvbVJhbmdlLmlkKTtcblxuICAgICAgdGhpcy5zdGFydERhdGUuc2V0KGRhdGVSYW5nZVNlbGVjdGVkLnN0YXJ0RGF0ZSBhcyBkYXlqcy5EYXlqcyk7XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KGRhdGVSYW5nZVNlbGVjdGVkLmVuZERhdGUgYXMgZGF5anMuRGF5anMpO1xuICAgIH1cbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRRdWlja1JhbmdlLnNldChjdXN0b21SYW5nZS5pZCk7XG4gICAgICB0aGlzLmNob3NlblF1aWNrUmFuZ2Uuc2V0KGN1c3RvbVJhbmdlLmlkKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRRdWlja1JhbmdlKCkgPT09IHRoaXMuZGF0ZU9wdGlvbnMoKT8uY3VzdG9tUmFuZ2VMYWJlbCkge1xuICAgICAgdGhpcy5zaG93Q2FsVGFibGVJblJhbmdlcy5zZXQodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyUmFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVdpZHRoKCkge1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5vdXRVcGRhdGVXaWR0aC5lbWl0KDEpO1xuICAgIH0pIGFzIHVua25vd24gYXMgbnVtYmVyO1xuXG4gICAgdGhpcy50aW1lb3V0cy51cGRhdGUoaWRzID0+IFsuLi5pZHMsIHRpbWVvdXRJZF0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJSYW5nZXMoKSB7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGUoKSkge1xuICAgICAgdGhpcy5zaG93Q2FsVGFibGVJblJhbmdlcy5zZXQodHJ1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmFuZ2VzRGVmYXVsdCA9IGdldERhdGVSYW5nZURlZmF1bHQoKTtcbiAgICBjb25zdCByYW5nZXMgPSB0aGlzLmRhdGVPcHRpb25zKCk/LnJhbmdlcztcblxuICAgIHRoaXMucXVpY2tSYW5nZXNBcnJheS5zZXQoW10pO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gcmFuZ2VzKSB7XG4gICAgICBjb25zdCByYW5nZVZhbHVlID0gcmFuZ2VzRGVmYXVsdFtrZXldO1xuICAgICAgY29uc3Qgc3RhcnQgPSBkYXlqcyhyYW5nZVZhbHVlWzBdKTtcbiAgICAgIGNvbnN0IGVuZCA9IGRheWpzKHJhbmdlVmFsdWVbMV0pO1xuXG4gICAgICB0aGlzLnF1aWNrUmFuZ2VzQXJyYXkudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnB1c2goe1xuICAgICAgICAgIGlkOiBrZXksXG4gICAgICAgICAgbGFiZWw6IHJhbmdlc1trZXldLFxuICAgICAgICAgIHZhbHVlczogW3N0YXJ0LCBlbmRdXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dDdXN0b21SYW5nZUxhYmVsKCkgJiYgdGhpcy5kYXRlT3B0aW9ucygpPy5jdXN0b21SYW5nZUxhYmVsKSB7XG4gICAgICB0aGlzLnF1aWNrUmFuZ2VzQXJyYXkudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnB1c2goe1xuICAgICAgICAgIGlkOiB0aGlzLmRhdGVPcHRpb25zKCk/LmN1c3RvbVJhbmdlTGFiZWwgfHwgJycsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuZGF0ZU9wdGlvbnMoKT8uY3VzdG9tUmFuZ2VMYWJlbCB8fCAnJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5leHRlbmRSYW5nZXMoKSkge1xuICAgICAgdGhpcy5xdWlja1Jhbmdlc0FycmF5LnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC51bnNoaWZ0KC4uLnRoaXMuZXh0ZW5kUmFuZ2VzKCkpO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5xdWlja1Jhbmdlc0FycmF5KCkubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNob3dDYWxUYWJsZUluUmFuZ2VzLnNldCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNhbmNlbCgpIHtcbiAgICB0aGlzLm91dENhbmNlbC5lbWl0KCcnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUGlja2VyRGF0ZShldmVudDogSUVtaXREYXRlQ2FsZW5kYXIpIHtcbiAgICB0aGlzLmNob3NlblNpbmdsZURhdGUuc2V0KHtcbiAgICAgIGRpc3BsYXlMYWJlbDogZXZlbnQuZGlzcGxheUxhYmVsLFxuICAgICAgZGF0ZTogZXZlbnQuc3RhcnREYXRlLFxuICAgICAgdmFsdWVzOiBldmVudC5kZXRhaWxEYXRlUGlja2VyLnN0YXJ0KClcbiAgICB9KTtcbiAgICAvLyBpZiAoIXRoaXMuaXNTaW5nbGUoKSAmJiBldmVudC5zdGFydERhdGUgJiYgIWV2ZW50LmVuZERhdGUpIHtcbiAgICAvLyAgIGNvbnN0IGVuZFRpbWUgPSBldmVudC5kZXRhaWxEYXRlUGlja2VyLmVuZCgpO1xuICAgIC8vICAgZXZlbnQuZW5kRGF0ZSA9IGV2ZW50LnN0YXJ0RGF0ZS5jbG9uZSgpLmhvdXIoZW5kVGltZS5ob3VyIGFzIG51bWJlcikubWludXRlKGVuZFRpbWUubWludXRlIGFzIG51bWJlcikuc2Vjb25kKDU5KTtcbiAgICAvLyB9XG4gICAgdGhpcy5jaG9zZW5EYXRlUmFuZ2Uuc2V0KHtcbiAgICAgIHF1aWNrUmFuZ2VJZDogdGhpcy5jaG9zZW5RdWlja1JhbmdlKCksXG4gICAgICAuLi5ldmVudFxuICAgIH0pO1xuICAgIGNvbnN0IGNob3NlblNpbmdsZURhdGUgPSB0aGlzLmNob3NlblNpbmdsZURhdGUoKTtcbiAgICBjb25zdCBjaG9zZW5EYXRlUmFuZ2UgPSB0aGlzLmNob3NlbkRhdGVSYW5nZSgpO1xuICAgIGlmICh0aGlzLmlzU2luZ2xlKCkgJiYgY2hvc2VuU2luZ2xlRGF0ZSkge1xuICAgICAgdGhpcy5vdXRTZWxlY3RTaW5nbGVEYXRlLmVtaXQoY2hvc2VuU2luZ2xlRGF0ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFjaG9zZW5EYXRlUmFuZ2UgfHwgKCFjaG9zZW5EYXRlUmFuZ2Uuc3RhcnREYXRlICYmICFjaG9zZW5EYXRlUmFuZ2UuZW5kRGF0ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vdXRTZWxlY3REYXRlUmFuZ2UuZW1pdChjaG9zZW5EYXRlUmFuZ2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja1JhbmdlKGU6IEV2ZW50LCByYW5nZTogSURhdGVSYW5nZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy51cGRhdGVXaWR0aCgpO1xuICAgIHRoaXMuY2hvc2VuUXVpY2tSYW5nZS5zZXQocmFuZ2UuaWQpO1xuXG4gICAgaWYgKHJhbmdlLmlkID09PSB0aGlzLmRhdGVPcHRpb25zKCk/LmN1c3RvbVJhbmdlTGFiZWwpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXJTaG93aW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuc2hvd0NhbFRhYmxlSW5SYW5nZXMuc2V0KHRydWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmV4dGVuZFJhbmdlcygpKSB7XG4gICAgICBjb25zdCBmaW5kRXh0ZXJuYWxSYW5nZSA9IHRoaXMuZXh0ZW5kUmFuZ2VzKCkuZmluZChpdGVtID0+IGl0ZW0ubGFiZWwgPT09IHJhbmdlLmlkKTtcblxuICAgICAgaWYgKGZpbmRFeHRlcm5hbFJhbmdlICYmIHJhbmdlLmlkID09PSBmaW5kRXh0ZXJuYWxSYW5nZS5sYWJlbCkge1xuICAgICAgICBpZiAoZmluZEV4dGVybmFsUmFuZ2UudmFsdWVzKSB7XG4gICAgICAgICAgdGhpcy5vdXRTZWxlY3REYXRlUmFuZ2UuZW1pdCh7IHF1aWNrUmFuZ2VJZDogZmluZEV4dGVybmFsUmFuZ2UuaWQsIGRpc3BsYXlMYWJlbDogZmluZEV4dGVybmFsUmFuZ2UubGFiZWwsIHN0YXJ0RGF0ZTogZmluZEV4dGVybmFsUmFuZ2UudmFsdWVzWzBdLCBlbmREYXRlOiBmaW5kRXh0ZXJuYWxSYW5nZS52YWx1ZXNbMV0gfSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdXRTZWxlY3REYXRlUmFuZ2UuZW1pdCh7IHF1aWNrUmFuZ2VJZDogZmluZEV4dGVybmFsUmFuZ2UuaWQsIGRpc3BsYXlMYWJlbDogZmluZEV4dGVybmFsUmFuZ2UubGFiZWwsIHN0YXJ0RGF0ZTogdW5kZWZpbmVkLCBlbmREYXRlOiB1bmRlZmluZWQgfSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zdCBkYXRlcyA9IHJhbmdlLnZhbHVlcyA/PyBbXTtcblxuICAgIC8vIHRoaXMuc3RhcnREYXRlLnNldChkYXRlc1swXS5jbG9uZSgpLmhvdXIoMCkubWludXRlKDApLnNlY29uZCgwKSk7XG4gICAgLy8gdGhpcy5lbmREYXRlLnNldChkYXRlc1sxXS5jbG9uZSgpLmhvdXIoMjMpLm1pbnV0ZSg1OSkuc2Vjb25kKDU5KSk7XG4gICAgLy8gdGhpcy50aW1lVmFsdWUgPSB7IGhvdXI6IDAsIHRvSG91cjogMCwgbWludXRlOiAyMywgdG9NaW51dGU6IDU5IH07XG4gICAgLy8gdGhpcy50aW1lcGlja2VyVmFyaWFibGVzLmxlZnQuc2VsZWN0ZWRIb3VyID0gMDtcbiAgICAvLyB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMubGVmdC5zZWxlY3RlZE1pbnV0ZSA9IDA7XG4gICAgLy8gdGhpcy50aW1lcGlja2VyVmFyaWFibGVzLnJpZ2h0LnNlbGVjdGVkSG91ciA9IDIzO1xuICAgIC8vIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcy5yaWdodC5zZWxlY3RlZE1pbnV0ZSA9IDU5O1xuXG4gICAgLy8gdGhpcy5zaG93UmFuZ2VMYWJlbE9uSW5wdXQgJiYgbGFiZWwgIT09IHRoaXMubG9jYWxlRGF5LmN1c3RvbVJhbmdlTGFiZWwgPyB0aGlzLmNob3NlbkxhYmVsID0gbGFiZWwgOiB0aGlzLmNhbGN1bGF0ZUNob3NlbkxhYmVsKCk7XG5cbiAgICAvLyAvLyB0aGlzLmF1dG9BcHBseS5zZXQodHJ1ZSk7XG4gICAgLy8gaWYgKCF0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgIC8vICAgaWYodGhpcy5zdGFydERhdGUoKSkge1xuICAgIC8vICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQodGhpcy5zdGFydERhdGUoKT8uc3RhcnRPZignZGF5JykpO1xuICAgIC8vICAgfVxuICAgIC8vICAgaWYodGhpcy5lbmREYXRlKCkpIHtcbiAgICAvLyAgICAgdGhpcy5lbmREYXRlLnNldCh0aGlzLmVuZERhdGUoKT8uZW5kT2YoJ2RheScpKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgLy8gaWYgKCF0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMoKSkge1xuICAgIC8vICAgdGhpcy5jYWxlbmRhclNob3dpbmcuc2V0KGZhbHNlKTtcbiAgICAvLyB9XG4gICAgLy8gdGhpcy5vdXRDbGlja1JhbmdlLmVtaXQocmFuZ2UpO1xuXG4gICAgaWYgKCF0aGlzLmtlZXBDYWxlbmRhck9wZW5pbmdXaXRoUmFuZ2UoKSB8fCAhdGhpcy5hbHdheXNTaG93Q2FsZW5kYXJzKCkpIHtcbiAgICAgIHRoaXMub3V0U2VsZWN0RGF0ZVJhbmdlLmVtaXQoeyBxdWlja1JhbmdlSWQ6IHJhbmdlLmlkLCBkaXNwbGF5TGFiZWw6IHJhbmdlLmxhYmVsLCBzdGFydERhdGU6IHJhbmdlLnZhbHVlcz8uWzBdLCBlbmREYXRlOiByYW5nZS52YWx1ZXM/LlsxXSB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBpZiAodGhpcy50aW1lUGlja2VyKSB7XG4gICAgLy8gICB0aGlzLnJlbmRlclRpbWVQaWNrZXIoU2lkZUVudW0ubGVmdCk7XG4gICAgLy8gICB0aGlzLnJlbmRlclRpbWVQaWNrZXIoU2lkZUVudW0ucmlnaHQpO1xuICAgIC8vIH1cbiAgICAvLyBpZiAodGhpcy5nZXRNYXhEYXRlKCkgJiYgdGhpcy5nZXRNYXhEYXRlKCkuaXNTYW1lKGRhdGVzWzBdLCAnbW9udGgnKSkge1xuICAgIC8vICAgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoID0gdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoICYmIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5tb250aChkYXRlc1swXS5tb250aCgpKTtcbiAgICAvLyAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMucmlnaHRDYWxlbmRhci5tb250aCAmJiB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGgueWVhcihkYXRlc1swXS55ZWFyKCkpO1xuICAgIC8vICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggPSB0aGlzLmxlZnRDYWxlbmRhci5tb250aCAmJiB0aGlzLmxlZnRDYWxlbmRhci5tb250aC5tb250aChkYXRlc1swXS5tb250aCgpIC0gMSk7XG4gICAgLy8gICB0aGlzLmxlZnRDYWxlbmRhci5tb250aCA9IHRoaXMubGVmdENhbGVuZGFyLm1vbnRoICYmIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLnllYXIoZGF0ZXNbMV0ueWVhcigpKTtcblxuICAgIC8vICAgcmV0dXJuIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XG4gICAgLy8gfVxuICAgIC8vIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoID0gdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGgubW9udGgoZGF0ZXNbMF0ubW9udGgoKSk7XG4gICAgLy8gdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggPSB0aGlzLmxlZnRDYWxlbmRhci5tb250aCAmJiB0aGlzLmxlZnRDYWxlbmRhci5tb250aC55ZWFyKGRhdGVzWzBdLnllYXIoKSk7XG4gICAgLy8gY29uc3QgbmV4dE1vbnRoID0gZGF0ZXNbMF0uY2xvbmUoKS5hZGQoMSwgJ21vbnRoJyk7XG5cbiAgICAvLyB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggPSB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoLm1vbnRoKG5leHRNb250aC5tb250aCgpKTtcbiAgICAvLyB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggPSB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoLnllYXIobmV4dE1vbnRoLnllYXIoKSk7XG4gICAgLy8gdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2xpY2tDYW5jZWwoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy8gdGhpcy5zdGFydERhdGUuc2V0KGRheWpzKDApKTtcbiAgICAvLyB0aGlzLmVuZERhdGUuc2V0KGRheWpzKDApKTtcbiAgICB0aGlzLm91dENhbmNlbC5lbWl0KCcnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdlRmxhZ01vdXNlKGZsYWdNb3VzZTogSUZsYWdNb3VzZSkge1xuICAgIHRoaXMub3V0Q2hhbmdTdGFnZUZsYWdNb3VzZS5lbWl0KGZsYWdNb3VzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uc0NvbnRyb2woZXZlbnQ6IElDYWxlbmRhckZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5jYWxlbmRhckZ1bmN0aW9uQ29udHJvbEV2ZW50LnNldChldmVudCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnRpbWVvdXRzKCkuZm9yRWFjaChpdGVtID0+IGNsZWFyVGltZW91dChpdGVtKSk7XG4gICAgLy8gdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIC8vIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxkaXYgI3BpY2tlckNvbnRhaW5lclxuICBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMgZmxleCByb3VuZGVkLVs0cHhdIGJnLVsjZmZmZmZmXSB6LVsxMDAwXSBvdmVyZmxvdy1baGlkZGVuXSByZWxhdGl2ZSBpbmxpbmVcIlxuICBbY2xhc3MuZmxleC1yb3ctcmV2ZXJzZV09XCJwb3NpdGlvblF1aWNrUmFuZ2VzKCkgPT09ICdyaWdodCdcIj5cbiAgQGlmICghaXNTaW5nbGUoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudC1jdXN0b21fcmFuZ2VzLXJhbmdlcyB7eyBjbGFzc0luY2x1ZGUoKSB8fCAnJyB9fVwiXG4gICAgICBbY2xhc3MuYm9yZGVyLWwtWyNlNmU4ZWRdXT1cInBvc2l0aW9uUXVpY2tSYW5nZXMoKSA9PT0gJ3JpZ2h0JyAmJiBzaG93Q2FsVGFibGVJblJhbmdlcygpXCJcbiAgICAgIFtjbGFzcy5ib3JkZXItbF09XCJwb3NpdGlvblF1aWNrUmFuZ2VzKCkgPT09ICdyaWdodCcgJiYgc2hvd0NhbFRhYmxlSW5SYW5nZXMoKVwiXG4gICAgICBbY2xhc3MuYm9yZGVyLXItWyNlNmU4ZWRdXT1cInBvc2l0aW9uUXVpY2tSYW5nZXMoKSA9PT0gJ2xlZnQnICYmIHNob3dDYWxUYWJsZUluUmFuZ2VzKClcIlxuICAgICAgW2NsYXNzLmJvcmRlci1yXT1cInBvc2l0aW9uUXVpY2tSYW5nZXMoKSA9PT0gJ2xlZnQnICYmIHNob3dDYWxUYWJsZUluUmFuZ2VzKClcIlxuICAgICAgW2NsYXNzLiFtaW4taC1bMjYwcHhdXT1cInNob3dDYWxUYWJsZUluUmFuZ2VzKCkgJiYgIWlzU2luZ2xlKClcIlxuICAgICAgW2NsYXNzLiFtaW4taC1bMzAwcHhdXT1cImhhc1RpbWVQaWNrZXIoKSAmJiAhaXNTaW5nbGUoKVwiXG4gICAgICBbY2xhc3MuIXctWzE2MHB4XV09XCIhd2lkdGhCeVBhcmVudCgpXCJcbiAgICAgIFtjbGFzcy4hdy1mdWxsXT1cIndpZHRoQnlQYXJlbnQoKVwiPlxuICAgICAgQGZvciAocmFuZ2Ugb2YgcXVpY2tSYW5nZXNBcnJheSgpOyB0cmFjayByYW5nZS5pZCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgaG92ZXI6YmctW3ZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtMyldIGN1cnNvci1wb2ludGVyIHB4LVsxNnB4XSBweS1bOHB4XVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktc2VsZWN0ZWQtcmFuZ2VdPVwicmFuZ2UuaWQgPT09IGNob3NlblF1aWNrUmFuZ2UoKSAmJiBzaG93Q3VzdG9tUmFuZ2VMYWJlbCgpXCJcbiAgICAgICAgICBbY2xhc3MuYmctW3ZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtMyldXT1cInJhbmdlLmlkID09PSBjaG9zZW5RdWlja1JhbmdlKCkgfHwgcmFuZ2UuaWQgPT09IHNlbGVjdGVkUXVpY2tSYW5nZSgpXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNsaWNrUmFuZ2UoJGV2ZW50LCByYW5nZSlcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS1mb250LWg1ciBmbGV4IHRleHQtWyMzMzMzMzNdIG1pbi13LTAgdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IExpYnNVaUNvbXBvbmVudHNQb3BvdmVyRGlyZWN0aXZlXG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgW2NvbmZpZ109XCJ7bWF4V2lkdGg6MTYwLGRpcmVjdGlvbjondG9wJyx6SW5kZXg6KHpJbmRleCgpIHx8MTAwMCkgKyAxfVwiXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwicmFuZ2UubGFiZWxcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNsaWNrUmFuZ2UoJGV2ZW50LCByYW5nZSlcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxpIGNsYXNzPVwidGV4dC1bMTJweF0gbWwtWzE2cHhdXCJcbiAgICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWljb24tY2hlY2tdPVwicmFuZ2UuaWQgPT09IHNlbGVjdGVkUXVpY2tSYW5nZSgpXCJcbiAgICAgICAgICAgIFtjbGFzcy50ZXh0LVt2YXIoLS1saWJzLXVpLWNvbG9yLWRlZmF1bHQpXV09XCJyYW5nZS5pZCA9PT0gc2VsZWN0ZWRRdWlja1JhbmdlKClcIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG4gIEBpZiAoc2hvd0NhbFRhYmxlSW5SYW5nZXMoKSkge1xuICAgIDxkaXYgY2xhc3M9XCJtLVsxNnB4XSB3LWZ1bGxcIj5cbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtZGF0ZXRpbWUtcGlja2VyLWN1c3RvbV9yYW5nZXMtY2FsZW5kYXIgW2lzU2luZ2xlXT1cImlzU2luZ2xlKClcIlxuICAgICAgICBbYXV0b0FwcGx5XT1cImF1dG9BcHBseSgpXCJcbiAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgIFtmbGFnTW91c2VdPVwiZmxhZ01vdXNlKClcIlxuICAgICAgICBbZGF0ZU9wdGlvbnNdPVwiZGF0ZU9wdGlvbnMoKVwiXG4gICAgICAgIFtoYXNUaW1lUGlja2VyXT1cImhhc1RpbWVQaWNrZXIoKVwiXG4gICAgICAgIFtxdWlja1Jhbmdlc0FycmF5XT1cInF1aWNrUmFuZ2VzQXJyYXkoKVwiXG4gICAgICAgIFtzdGFydERhdGVdPVwic3RhcnREYXRlKClcIlxuICAgICAgICBbZW5kRGF0ZV09XCJlbmREYXRlKClcIlxuICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlKClcIlxuICAgICAgICBbbWF4RGF0ZV09XCJtYXhEYXRlKClcIlxuICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIid3LWZ1bGwnXCJcbiAgICAgICAgKG91dENhbmNlbCk9XCJoYW5kbGVyQ2FuY2VsKClcIlxuICAgICAgICAob3V0UGlja2VyRGF0ZSk9XCJoYW5kbGVyUGlja2VyRGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uc0NvbnRyb2woJGV2ZW50KVwiXG4gICAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoJGV2ZW50KVwiIC8+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
303
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXJhbmdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9jdXN0b20tcmFuZ2VzL2N1c3RvbS1yYW5nZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RhdGV0aW1lL3BpY2tlci9zcmMvY3VzdG9tLXJhbmdlcy9jdXN0b20tcmFuZ2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0gsT0FBTyxFQUFjLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLMUcsT0FBTyxFQUFFLDJEQUEyRCxFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBZTVHLE1BQU0sT0FBTyxtREFBbUQ7SUFDOUQsZUFBZTtJQUNMLG9CQUFvQixHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUM5QyxnQkFBZ0IsR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELGtCQUFrQixHQUFHLE1BQU0sQ0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztJQUM1RSxnQkFBZ0IsR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO0lBRXpGLGVBQWUsR0FBRyxN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Q2hDLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRVMsc0JBQXNCLENBQUMsU0FBcUI7UUFDcEQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRVMsdUJBQXVCLENBQUMsS0FBb0M7UUFDcEUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwRCx5QkFBeUI7UUFDekIsNkJBQTZCO0lBQy9CLENBQUM7d0dBaFZVLG1EQUFtRDs0RkFBbkQsbURBQW1ELDB2R0N4QmhFLDgyRkF1REEsNnBCRHBDSSxlQUFlLCtCQUNmLDJEQUEyRCxrZ0JBQzNELGdDQUFnQzs7NEZBR3ZCLG1EQUFtRDtrQkFiL0QsU0FBUzsrQkFFRSxrREFBa0QsY0FHaEQsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWU7d0JBQ2YsMkRBQTJEO3dCQUMzRCxnQ0FBZ0M7cUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZWZmZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuaW1wb3J0IHsgZGVmYXVsdExvY2FsZUNvbmZpZywgZ2V0RGF0ZU9wdGlvbnMsIGdldERhdGVSYW5nZURlZmF1bHQgfSBmcm9tIFwiLi4vZGVmaW5lcy9kYXRlLW9wdGlvbnMuZGVmaW5lXCI7XG5pbXBvcnQgeyBJRW1pdERhdGVDYWxlbmRhciwgSUVtaXREYXRlUmFuZ2UsIElFbWl0U2luZ2xlRGF0ZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL2NhbGVuZGFyLWVtaXQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJRGF0ZVJhbmdlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvY2FsZW5kYXItdmFyaWFibGVzLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSUNhbGVuZGFyRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9mdW5jdGlvbi1jb250cm9sLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uQ29uZmlnIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvcGlja2VyLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lUGlja2VyQ3VzdG9tUmFuZ2VzQ2FsZW5kYXJDb21wb25lbnQgfSBmcm9tIFwiLi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnRcIjtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLWRhdGV0aW1lLXBpY2tlci1jdXN0b21fcmFuZ2VzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1yYW5nZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tcmFuZ2VzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NhbGVuZGFyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lUGlja2VyQ3VzdG9tUmFuZ2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqIFBST1BFUlRZICovXG4gIHByb3RlY3RlZCBzaG93Q2FsVGFibGVJblJhbmdlcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCBxdWlja1Jhbmdlc0FycmF5ID0gc2lnbmFsPEFycmF5PElEYXRlUmFuZ2U+PihbXSk7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFF1aWNrUmFuZ2UgPSBzaWduYWw8c3RyaW5nPignJyk7IC8vIHF1aWNrIHJhbmdlIMSRw6MgxJHGsOG7o2MgbMawdSB0csaw4bubYyDEkcOzXG4gIHByb3RlY3RlZCBjaG9zZW5RdWlja1JhbmdlID0gc2lnbmFsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTsgLy8gcXVpY2sgcmFuZ2UgxJFhbmcgxJHGsOG7o2MgY2jhu41uXG5cbiAgcHJpdmF0ZSBjYWxlbmRhclNob3dpbmcgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHRpbWVvdXRzID0gc2lnbmFsPEFycmF5PG51bWJlcj4+KFtdKTtcbiAgcHJpdmF0ZSBjYWxlbmRhckZ1bmN0aW9uQ29udHJvbEV2ZW50ID0gc2lnbmFsPElDYWxlbmRhckZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGNob3NlblNpbmdsZURhdGUgPSBzaWduYWw8SUVtaXRTaW5nbGVEYXRlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIGNob3NlbkRhdGVSYW5nZSA9IHNpZ25hbDxJRW1pdERhdGVSYW5nZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKiogSU5QVVQgKi9cbiAgLy8gcmVhZG9ubHkgU2VsZWN0ZWRRdWlja1JhbmdlID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlciwgbnVtYmVyPigxMjAwLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAxMjAwIH0pO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgZXh0ZW5kUmFuZ2VzID0gaW5wdXQ8QXJyYXk8SURhdGVSYW5nZT4+KFtdKTtcbiAgcmVhZG9ubHkgd2lkdGhCeVBhcmVudCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgYXV0b0FwcGx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBtaW5EYXRlID0gaW5wdXQ8ZGF5anMuRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IG1heERhdGUgPSBpbnB1dDxkYXlqcy5EYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgbGlzdFllYXJIaWRkZW5JbnB1dFNlYXJjaCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRydWUgfSk7XG5cblxuICByZWFkb25seSBwb3NpdGlvblF1aWNrUmFuZ2VzID0gaW5wdXQ8J2xlZnQnIHwgJ3JpZ2h0JywgJ2xlZnQnIHwgJ3JpZ2h0Jz4oJ2xlZnQnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnbGVmdCcgfSk7XG4gIHJlYWRvbmx5IGlzU2luZ2xlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBoYXNUaW1lUGlja2VyID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IGZsYWdNb3VzZSA9IGlucHV0PElGbGFnTW91c2U+KHsgaXNNb3VzZUVudGVyOiBmYWxzZSwgaXNNb3VzZUVudGVyQ29udGVudDogZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGRhdGVPcHRpb25zID0gaW5wdXQ8TG9jYWxpemF0aW9uQ29uZmlnPih7IC4uLmRlZmF1bHRMb2NhbGVDb25maWcoKSwgLi4uZ2V0RGF0ZU9wdGlvbnMoKSB9KTtcbiAgcmVhZG9ubHkgYWx3YXlzU2hvd0NhbGVuZGFycyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc3RhcnREYXRlID0gbW9kZWw8ZGF5anMuRGF5anMgfCB1bmRlZmluZWQ+KGRheWpzKCkuc3RhcnRPZignZGF5JykpO1xuICByZWFkb25seSBlbmREYXRlID0gbW9kZWw8ZGF5anMuRGF5anMgfCB1bmRlZmluZWQ+KGRheWpzKCkuZW5kT2YoJ2RheScpKTtcbiAgcmVhZG9ubHkgc2hvd0N1c3RvbVJhbmdlTGFiZWwgPSBpbnB1dDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBrZWVwQ2FsZW5kYXJPcGVuaW5nV2l0aFJhbmdlID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICByZWFkb25seSBzaW5nbGVEYXRlU2VsZWN0ZWQgPSBpbnB1dDxJRW1pdFNpbmdsZURhdGUgfCB1bmRlZmluZWQsIElFbWl0U2luZ2xlRGF0ZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7XG4gICAgdHJhbnNmb3JtOiAodmFsdWUpID0+IHtcbiAgICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmRhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGRhdGUgPSB2YWx1ZS5kYXRlO1xuXG4gICAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRhdGUgPSBkYXlqcyhkYXRlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmFsdWUsXG4gICAgICAgIGRhdGVcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbiAgcmVhZG9ubHkgZGF0ZVJhbmdlU2VsZWN0ZWQgPSBpbnB1dDxJRW1pdERhdGVSYW5nZSB8IHVuZGVmaW5lZCwgSUVtaXREYXRlUmFuZ2UgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwge1xuICAgIHRyYW5zZm9ybTogKHZhbHVlKSA9PiB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBzdGFydERhdGUgPSB2YWx1ZS5zdGFydERhdGU7XG4gICAgICBsZXQgZW5kRGF0ZSA9IHZhbHVlLmVuZERhdGU7XG5cbiAgICAgIGlmICh0eXBlb2Ygc3RhcnREYXRlID09PSAnc3RyaW5nJykge1xuICAgICAgICBzdGFydERhdGUgPSBkYXlqcyhzdGFydERhdGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGVuZERhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGVuZERhdGUgPSBkYXlqcyhlbmREYXRlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmFsdWUsXG4gICAgICAgIHN0YXJ0RGF0ZSxcbiAgICAgICAgZW5kRGF0ZVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKiBPVVRQVVQgKi9cbiAgcmVhZG9ubHkgb3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSA9IG91dHB1dDxJRmxhZ01vdXNlPigpO1xuICByZWFkb25seSBvdXRVcGRhdGVXaWR0aCA9IG91dHB1dDxudW1iZXI+KCk7XG4gIHJlYWRvbmx5IG91dENhbmNlbCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dFNlbGVjdFNpbmdsZURhdGUgPSBvdXRwdXQ8SUVtaXRTaW5nbGVEYXRlPigpO1xuICByZWFkb25seSBvdXRTZWxlY3REYXRlUmFuZ2UgPSBvdXRwdXQ8SUVtaXREYXRlUmFuZ2U+KCk7XG4gIHJlYWRvbmx5IG91dENsaWNrUmFuZ2UgPSBvdXRwdXQ8SURhdGVSYW5nZT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4gdW50cmFja2VkKHRoaXMub25BZnRlclZpZXdJbml0LmJpbmQodGhpcykpKTtcbiAgfVxuXG4gIHByaXZhdGUgb25BZnRlclZpZXdJbml0KCkge1xuICAgIGlmICghdGhpcy5zdGFydERhdGUoKSkge1xuICAgICAgdGhpcy5zdGFydERhdGUuc2V0KGRheWpzKCkuc3RhcnRPZignZGF5JykpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZW5kRGF0ZSgpKSB7XG4gICAgICB0aGlzLmVuZERhdGUuc2V0KGRheWpzKCkuZW5kT2YoJ2RheScpKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZVJhbmdlU2VsZWN0ZWQgPSB0aGlzLmRhdGVSYW5nZVNlbGVjdGVkKCk7XG4gICAgY29uc3Qgc2luZ2xlRGF0ZVNlbGVjdGVkID0gdGhpcy5zaW5nbGVEYXRlU2VsZWN0ZWQoKTtcbiAgICBjb25zdCBjdXN0b21SYW5nZSA9IHtcbiAgICAgIGlkOiB0aGlzLmRhdGVPcHRpb25zKCk/LmN1c3RvbVJhbmdlTGFiZWwgfHwgJycsXG4gICAgICBsYWJlbDogdGhpcy5kYXRlT3B0aW9ucygpPy5jdXN0b21SYW5nZUxhYmVsIHx8ICcnXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmlzU2luZ2xlKCkpIHtcbiAgICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgICBjb25zdCBub3cgPSBkYXlqcygpO1xuXG4gICAgICAgIHRoaXMuc3RhcnREYXRlLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICAgICAgY3VycmVudC5zZXQoJ2hvdXInLCAxMCkuc2V0KCdtaW51dGUnLCAzMCk7XG4gICAgICAgICAgICAvLyBjdXJyZW50LmhvdXIobm93LmhvdXIoKSkubWludXRlKG5vdy5taW51dGUoKSk7XG4gICAgICAgICAgfVxuXG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZW5kRGF0ZS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQuaG91cihub3cuaG91cigpKS5taW51dGUobm93Lm1pbnV0ZSgpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoc2luZ2xlRGF0ZVNlbGVjdGVkPy5kYXRlKSB7XG4gICAgICAgIHRoaXMuc3RhcnREYXRlLnNldChzaW5nbGVEYXRlU2VsZWN0ZWQuZGF0ZSBhcyBkYXlqcy5EYXlqcyk7XG4gICAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoc2luZ2xlRGF0ZVNlbGVjdGVkLmRhdGUgYXMgZGF5anMuRGF5anMpO1xuICAgICAgfVxuICAgICAgdGhpcy5yZW5kZXJSYW5nZXMoKTtcblxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGVSYW5nZVNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUXVpY2tSYW5nZS5zZXQoZGF0ZVJhbmdlU2VsZWN0ZWQucXVpY2tSYW5nZUlkID8gZGF0ZVJhbmdlU2VsZWN0ZWQucXVpY2tSYW5nZUlkIDogY3VzdG9tUmFuZ2UuaWQpO1xuICAgICAgdGhpcy5jaG9zZW5RdWlja1JhbmdlLnNldChkYXRlUmFuZ2VTZWxlY3RlZC5xdWlja1JhbmdlSWQgPz8gY3VzdG9tUmFuZ2UuaWQpO1xuXG4gICAgICB0aGlzLnN0YXJ0RGF0ZS5zZXQoZGF0ZVJhbmdlU2VsZWN0ZWQuc3RhcnREYXRlIGFzIGRheWpzLkRheWpzKTtcbiAgICAgIHRoaXMuZW5kRGF0ZS5zZXQoZGF0ZVJhbmdlU2VsZWN0ZWQuZW5kRGF0ZSBhcyBkYXlqcy5EYXlqcyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2Uuc2V0KGN1c3RvbVJhbmdlLmlkKTtcbiAgICAgIHRoaXMuY2hvc2VuUXVpY2tSYW5nZS5zZXQoY3VzdG9tUmFuZ2UuaWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZFF1aWNrUmFuZ2UoKSA9PT0gdGhpcy5kYXRlT3B0aW9ucygpPy5jdXN0b21SYW5nZUxhYmVsKSB7XG4gICAgICB0aGlzLnNob3dDYWxUYWJsZUluUmFuZ2VzLnNldCh0cnVlKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXJSYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlV2lkdGgoKSB7XG4gICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm91dFVwZGF0ZVdpZHRoLmVtaXQoMSk7XG4gICAgfSkgYXMgdW5rbm93biBhcyBudW1iZXI7XG5cbiAgICB0aGlzLnRpbWVvdXRzLnVwZGF0ZShpZHMgPT4gWy4uLmlkcywgdGltZW91dElkXSk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclJhbmdlcygpIHtcbiAgICBpZiAodGhpcy5pc1NpbmdsZSgpKSB7XG4gICAgICB0aGlzLnNob3dDYWxUYWJsZUluUmFuZ2VzLnNldCh0cnVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByYW5nZXNEZWZhdWx0ID0gZ2V0RGF0ZVJhbmdlRGVmYXVsdCgpO1xuICAgIGNvbnN0IHJhbmdlcyA9IHRoaXMuZGF0ZU9wdGlvbnMoKT8ucmFuZ2VzO1xuXG4gICAgdGhpcy5xdWlja1Jhbmdlc0FycmF5LnNldChbXSk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiByYW5nZXMpIHtcbiAgICAgIGNvbnN0IHJhbmdlVmFsdWUgPSByYW5nZXNEZWZhdWx0W2tleV07XG4gICAgICBjb25zdCBzdGFydCA9IGRheWpzKHJhbmdlVmFsdWVbMF0pO1xuICAgICAgY29uc3QgZW5kID0gZGF5anMocmFuZ2VWYWx1ZVsxXSk7XG5cbiAgICAgIHRoaXMucXVpY2tSYW5nZXNBcnJheS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQucHVzaCh7XG4gICAgICAgICAgaWQ6IGtleSxcbiAgICAgICAgICBsYWJlbDogcmFuZ2VzW2tleV0sXG4gICAgICAgICAgdmFsdWVzOiBbc3RhcnQsIGVuZF1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2hvd0N1c3RvbVJhbmdlTGFiZWwoKSAmJiB0aGlzLmRhdGVPcHRpb25zKCk/LmN1c3RvbVJhbmdlTGFiZWwpIHtcbiAgICAgIHRoaXMucXVpY2tSYW5nZXNBcnJheS51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQucHVzaCh7XG4gICAgICAgICAgaWQ6IHRoaXMuZGF0ZU9wdGlvbnMoKT8uY3VzdG9tUmFuZ2VMYWJlbCB8fCAnJyxcbiAgICAgICAgICBsYWJlbDogdGhpcy5kYXRlT3B0aW9ucygpPy5jdXN0b21SYW5nZUxhYmVsIHx8ICcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmV4dGVuZFJhbmdlcygpKSB7XG4gICAgICB0aGlzLnF1aWNrUmFuZ2VzQXJyYXkudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnVuc2hpZnQoLi4udGhpcy5leHRlbmRSYW5nZXMoKSk7XG5cbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnF1aWNrUmFuZ2VzQXJyYXkoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2hvd0NhbFRhYmxlSW5SYW5nZXMuc2V0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2FuY2VsKCkge1xuICAgIHRoaXMub3V0Q2FuY2VsLmVtaXQoJycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQaWNrZXJEYXRlKGV2ZW50OiBJRW1pdERhdGVDYWxlbmRhcikge1xuICAgIHRoaXMuY2hvc2VuU2luZ2xlRGF0ZS5zZXQoe1xuICAgICAgZGlzcGxheUxhYmVsOiBldmVudC5kaXNwbGF5TGFiZWwsXG4gICAgICBkYXRlOiBldmVudC5zdGFydERhdGUsXG4gICAgICB2YWx1ZXM6IGV2ZW50LmRldGFpbERhdGVQaWNrZXIuc3RhcnQoKVxuICAgIH0pO1xuICAgIC8vIGlmICghdGhpcy5pc1NpbmdsZSgpICYmIGV2ZW50LnN0YXJ0RGF0ZSAmJiAhZXZlbnQuZW5kRGF0ZSkge1xuICAgIC8vICAgY29uc3QgZW5kVGltZSA9IGV2ZW50LmRldGFpbERhdGVQaWNrZXIuZW5kKCk7XG4gICAgLy8gICBldmVudC5lbmREYXRlID0gZXZlbnQuc3RhcnREYXRlLmNsb25lKCkuaG91cihlbmRUaW1lLmhvdXIgYXMgbnVtYmVyKS5taW51dGUoZW5kVGltZS5taW51dGUgYXMgbnVtYmVyKS5zZWNvbmQoNTkpO1xuICAgIC8vIH1cbiAgICB0aGlzLmNob3NlbkRhdGVSYW5nZS5zZXQoe1xuICAgICAgcXVpY2tSYW5nZUlkOiB0aGlzLmNob3NlblF1aWNrUmFuZ2UoKSxcbiAgICAgIC4uLmV2ZW50XG4gICAgfSk7XG4gICAgY29uc3QgY2hvc2VuU2luZ2xlRGF0ZSA9IHRoaXMuY2hvc2VuU2luZ2xlRGF0ZSgpO1xuICAgIGNvbnN0IGNob3NlbkRhdGVSYW5nZSA9IHRoaXMuY2hvc2VuRGF0ZVJhbmdlKCk7XG4gICAgaWYgKHRoaXMuaXNTaW5nbGUoKSAmJiBjaG9zZW5TaW5nbGVEYXRlKSB7XG4gICAgICB0aGlzLm91dFNlbGVjdFNpbmdsZURhdGUuZW1pdChjaG9zZW5TaW5nbGVEYXRlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNob3NlbkRhdGVSYW5nZSB8fCAoIWNob3NlbkRhdGVSYW5nZS5zdGFydERhdGUgJiYgIWNob3NlbkRhdGVSYW5nZS5lbmREYXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm91dFNlbGVjdERhdGVSYW5nZS5lbWl0KGNob3NlbkRhdGVSYW5nZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNsaWNrUmFuZ2UoZTogRXZlbnQsIHJhbmdlOiBJRGF0ZVJhbmdlKSB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnVwZGF0ZVdpZHRoKCk7XG4gICAgdGhpcy5jaG9zZW5RdWlja1JhbmdlLnNldChyYW5nZS5pZCk7XG5cbiAgICBpZiAocmFuZ2UuaWQgPT09IHRoaXMuZGF0ZU9wdGlvbnMoKT8uY3VzdG9tUmFuZ2VMYWJlbCkge1xuICAgICAgdGhpcy5jYWxlbmRhclNob3dpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5zaG93Q2FsVGFibGVJblJhbmdlcy5zZXQodHJ1ZSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXh0ZW5kUmFuZ2VzKCkpIHtcbiAgICAgIGNvbnN0IGZpbmRFeHRlcm5hbFJhbmdlID0gdGhpcy5leHRlbmRSYW5nZXMoKS5maW5kKGl0ZW0gPT4gaXRlbS5sYWJlbCA9PT0gcmFuZ2UuaWQpO1xuXG4gICAgICBpZiAoZmluZEV4dGVybmFsUmFuZ2UgJiYgcmFuZ2UuaWQgPT09IGZpbmRFeHRlcm5hbFJhbmdlLmxhYmVsKSB7XG4gICAgICAgIGlmIChmaW5kRXh0ZXJuYWxSYW5nZS52YWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLm91dFNlbGVjdERhdGVSYW5nZS5lbWl0KHsgcXVpY2tSYW5nZUlkOiBmaW5kRXh0ZXJuYWxSYW5nZS5pZCwgZGlzcGxheUxhYmVsOiBmaW5kRXh0ZXJuYWxSYW5nZS5sYWJlbCwgc3RhcnREYXRlOiBmaW5kRXh0ZXJuYWxSYW5nZS52YWx1ZXNbMF0sIGVuZERhdGU6IGZpbmRFeHRlcm5hbFJhbmdlLnZhbHVlc1sxXSB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm91dFNlbGVjdERhdGVSYW5nZS5lbWl0KHsgcXVpY2tSYW5nZUlkOiBmaW5kRXh0ZXJuYWxSYW5nZS5pZCwgZGlzcGxheUxhYmVsOiBmaW5kRXh0ZXJuYWxSYW5nZS5sYWJlbCwgc3RhcnREYXRlOiB1bmRlZmluZWQsIGVuZERhdGU6IHVuZGVmaW5lZCB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnN0IGRhdGVzID0gcmFuZ2UudmFsdWVzID8/IFtdO1xuXG4gICAgLy8gdGhpcy5zdGFydERhdGUuc2V0KGRhdGVzWzBdLmNsb25lKCkuaG91cigwKS5taW51dGUoMCkuc2Vjb25kKDApKTtcbiAgICAvLyB0aGlzLmVuZERhdGUuc2V0KGRhdGVzWzFdLmNsb25lKCkuaG91cigyMykubWludXRlKDU5KS5zZWNvbmQoNTkpKTtcbiAgICAvLyB0aGlzLnRpbWVWYWx1ZSA9IHsgaG91cjogMCwgdG9Ib3VyOiAwLCBtaW51dGU6IDIzLCB0b01pbnV0ZTogNTkgfTtcbiAgICAvLyB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMubGVmdC5zZWxlY3RlZEhvdXIgPSAwO1xuICAgIC8vIHRoaXMudGltZXBpY2tlclZhcmlhYmxlcy5sZWZ0LnNlbGVjdGVkTWludXRlID0gMDtcbiAgICAvLyB0aGlzLnRpbWVwaWNrZXJWYXJpYWJsZXMucmlnaHQuc2VsZWN0ZWRIb3VyID0gMjM7XG4gICAgLy8gdGhpcy50aW1lcGlja2VyVmFyaWFibGVzLnJpZ2h0LnNlbGVjdGVkTWludXRlID0gNTk7XG5cbiAgICAvLyB0aGlzLnNob3dSYW5nZUxhYmVsT25JbnB1dCAmJiBsYWJlbCAhPT0gdGhpcy5sb2NhbGVEYXkuY3VzdG9tUmFuZ2VMYWJlbCA/IHRoaXMuY2hvc2VuTGFiZWwgPSBsYWJlbCA6IHRoaXMuY2FsY3VsYXRlQ2hvc2VuTGFiZWwoKTtcblxuICAgIC8vIC8vIHRoaXMuYXV0b0FwcGx5LnNldCh0cnVlKTtcbiAgICAvLyBpZiAoIXRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgLy8gICBpZih0aGlzLnN0YXJ0RGF0ZSgpKSB7XG4gICAgLy8gICAgIHRoaXMuc3RhcnREYXRlLnNldCh0aGlzLnN0YXJ0RGF0ZSgpPy5zdGFydE9mKCdkYXknKSk7XG4gICAgLy8gICB9XG4gICAgLy8gICBpZih0aGlzLmVuZERhdGUoKSkge1xuICAgIC8vICAgICB0aGlzLmVuZERhdGUuc2V0KHRoaXMuZW5kRGF0ZSgpPy5lbmRPZignZGF5JykpO1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICAvLyBpZiAoIXRoaXMuYWx3YXlzU2hvd0NhbGVuZGFycygpKSB7XG4gICAgLy8gICB0aGlzLmNhbGVuZGFyU2hvd2luZy5zZXQoZmFsc2UpO1xuICAgIC8vIH1cbiAgICAvLyB0aGlzLm91dENsaWNrUmFuZ2UuZW1pdChyYW5nZSk7XG5cbiAgICBpZiAoIXRoaXMua2VlcENhbGVuZGFyT3BlbmluZ1dpdGhSYW5nZSgpIHx8ICF0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMoKSkge1xuICAgICAgdGhpcy5vdXRTZWxlY3REYXRlUmFuZ2UuZW1pdCh7IHF1aWNrUmFuZ2VJZDogcmFuZ2UuaWQsIGRpc3BsYXlMYWJlbDogcmFuZ2UubGFiZWwsIHN0YXJ0RGF0ZTogcmFuZ2UudmFsdWVzPy5bMF0sIGVuZERhdGU6IHJhbmdlLnZhbHVlcz8uWzFdIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmICh0aGlzLnRpbWVQaWNrZXIpIHtcbiAgICAvLyAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5sZWZ0KTtcbiAgICAvLyAgIHRoaXMucmVuZGVyVGltZVBpY2tlcihTaWRlRW51bS5yaWdodCk7XG4gICAgLy8gfVxuICAgIC8vIGlmICh0aGlzLmdldE1heERhdGUoKSAmJiB0aGlzLmdldE1heERhdGUoKS5pc1NhbWUoZGF0ZXNbMF0sICdtb250aCcpKSB7XG4gICAgLy8gICB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggPSB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoLm1vbnRoKGRhdGVzWzBdLm1vbnRoKCkpO1xuICAgIC8vICAgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoID0gdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoICYmIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC55ZWFyKGRhdGVzWzBdLnllYXIoKSk7XG4gICAgLy8gICB0aGlzLmxlZnRDYWxlbmRhci5tb250aCA9IHRoaXMubGVmdENhbGVuZGFyLm1vbnRoICYmIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLm1vbnRoKGRhdGVzWzBdLm1vbnRoKCkgLSAxKTtcbiAgICAvLyAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoID0gdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGgueWVhcihkYXRlc1sxXS55ZWFyKCkpO1xuXG4gICAgLy8gICByZXR1cm4gdGhpcy51cGRhdGVDYWxlbmRhcnMoKTtcbiAgICAvLyB9XG4gICAgLy8gdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggPSB0aGlzLmxlZnRDYWxlbmRhci5tb250aCAmJiB0aGlzLmxlZnRDYWxlbmRhci5tb250aC5tb250aChkYXRlc1swXS5tb250aCgpKTtcbiAgICAvLyB0aGlzLmxlZnRDYWxlbmRhci5tb250aCA9IHRoaXMubGVmdENhbGVuZGFyLm1vbnRoICYmIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLnllYXIoZGF0ZXNbMF0ueWVhcigpKTtcbiAgICAvLyBjb25zdCBuZXh0TW9udGggPSBkYXRlc1swXS5jbG9uZSgpLmFkZCgxLCAnbW9udGgnKTtcblxuICAgIC8vIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMucmlnaHRDYWxlbmRhci5tb250aCAmJiB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGgubW9udGgobmV4dE1vbnRoLm1vbnRoKCkpO1xuICAgIC8vIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMucmlnaHRDYWxlbmRhci5tb250aCAmJiB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGgueWVhcihuZXh0TW9udGgueWVhcigpKTtcbiAgICAvLyB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDbGlja0NhbmNlbChldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAvLyB0aGlzLnN0YXJ0RGF0ZS5zZXQoZGF5anMoMCkpO1xuICAgIC8vIHRoaXMuZW5kRGF0ZS5zZXQoZGF5anMoMCkpO1xuICAgIHRoaXMub3V0Q2FuY2VsLmVtaXQoJycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ2VGbGFnTW91c2UoZmxhZ01vdXNlOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlLmVtaXQoZmxhZ01vdXNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRnVuY3Rpb25zQ29udHJvbChldmVudDogSUNhbGVuZGFyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLmNhbGVuZGFyRnVuY3Rpb25Db250cm9sRXZlbnQuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudGltZW91dHMoKS5mb3JFYWNoKGl0ZW0gPT4gY2xlYXJUaW1lb3V0KGl0ZW0pKTtcbiAgICAvLyB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgLy8gdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdiAjcGlja2VyQ29udGFpbmVyXG4gIGNsYXNzPVwibGlicy11aS1jb21wb25lbnQtY3VzdG9tX3JhbmdlcyBmbGV4IHJvdW5kZWQtWzRweF0gYmctWyNmZmZmZmZdIHotWzEwMDBdIG92ZXJmbG93LWhpZGRlblwiXG4gIFtjbGFzcy5mbGV4LXJvdy1yZXZlcnNlXT1cInBvc2l0aW9uUXVpY2tSYW5nZXMoKSA9PT0gJ3JpZ2h0J1wiPlxuICBAaWYgKCFpc1NpbmdsZSgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50LWN1c3RvbV9yYW5nZXMtcmFuZ2VzIHt7IGNsYXNzSW5jbHVkZSgpIHx8ICcnIH19XCJcbiAgICAgIFtjbGFzcy5ib3JkZXItbC1bI2U2ZThlZF1dPVwicG9zaXRpb25RdWlja1JhbmdlcygpID09PSAncmlnaHQnICYmIHNob3dDYWxUYWJsZUluUmFuZ2VzKClcIlxuICAgICAgW2NsYXNzLmJvcmRlci1sXT1cInBvc2l0aW9uUXVpY2tSYW5nZXMoKSA9PT0gJ3JpZ2h0JyAmJiBzaG93Q2FsVGFibGVJblJhbmdlcygpXCJcbiAgICAgIFtjbGFzcy5ib3JkZXItci1bI2U2ZThlZF1dPVwicG9zaXRpb25RdWlja1JhbmdlcygpID09PSAnbGVmdCcgJiYgc2hvd0NhbFRhYmxlSW5SYW5nZXMoKVwiXG4gICAgICBbY2xhc3MuYm9yZGVyLXJdPVwicG9zaXRpb25RdWlja1JhbmdlcygpID09PSAnbGVmdCcgJiYgc2hvd0NhbFRhYmxlSW5SYW5nZXMoKVwiXG4gICAgICBbY2xhc3MuIW1pbi1oLVsyNjBweF1dPVwic2hvd0NhbFRhYmxlSW5SYW5nZXMoKSAmJiAhaXNTaW5nbGUoKVwiXG4gICAgICBbY2xhc3MuIW1pbi1oLVszMDBweF1dPVwiaGFzVGltZVBpY2tlcigpICYmICFpc1NpbmdsZSgpXCJcbiAgICAgIFtjbGFzcy4hdy1bMTYwcHhdXT1cIiF3aWR0aEJ5UGFyZW50KClcIlxuICAgICAgW2NsYXNzLiF3LWZ1bGxdPVwid2lkdGhCeVBhcmVudCgpXCI+XG4gICAgICBAZm9yIChyYW5nZSBvZiBxdWlja1Jhbmdlc0FycmF5KCk7IHRyYWNrIHJhbmdlLmlkKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBob3ZlcjpiZy1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0zKV0gY3Vyc29yLXBvaW50ZXIgcHgtWzE2cHhdIHB5LVs4cHhdXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1zZWxlY3RlZC1yYW5nZV09XCJyYW5nZS5pZCA9PT0gY2hvc2VuUXVpY2tSYW5nZSgpICYmIHNob3dDdXN0b21SYW5nZUxhYmVsKClcIlxuICAgICAgICAgIFtjbGFzcy5iZy1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0zKV1dPVwicmFuZ2UuaWQgPT09IGNob3NlblF1aWNrUmFuZ2UoKSB8fCByYW5nZS5pZCA9PT0gc2VsZWN0ZWRRdWlja1JhbmdlKClcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2tSYW5nZSgkZXZlbnQsIHJhbmdlKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWZvbnQtaDVyIGZsZXggdGV4dC1bIzMzMzMzM10gbWluLXctMCB3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXYgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJEaXJlY3RpdmVcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cInttYXhXaWR0aDoxNjAsZGlyZWN0aW9uOid0b3AnLHpJbmRleDooekluZGV4KCkgfHwxMDAwKSArIDF9XCJcbiAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJyYW5nZS5sYWJlbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2tSYW5nZSgkZXZlbnQsIHJhbmdlKVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGkgY2xhc3M9XCJ0ZXh0LVsxMnB4XSBtbC1bMTZweF1cIlxuICAgICAgICAgICAgW2NsYXNzLmxpYnMtdWktaWNvbi1jaGVja109XCJyYW5nZS5pZCA9PT0gc2VsZWN0ZWRRdWlja1JhbmdlKClcIlxuICAgICAgICAgICAgW2NsYXNzLnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItZGVmYXVsdCldXT1cInJhbmdlLmlkID09PSBzZWxlY3RlZFF1aWNrUmFuZ2UoKVwiPjwvaT5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbiAgQGlmIChzaG93Q2FsVGFibGVJblJhbmdlcygpKSB7XG4gICAgPGRpdiBjbGFzcz1cIm0tWzE2cHhdIHctZnVsbFwiPlxuICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1kYXRldGltZS1waWNrZXItY3VzdG9tX3Jhbmdlcy1jYWxlbmRhciBbaXNTaW5nbGVdPVwiaXNTaW5nbGUoKVwiXG4gICAgICAgIFthdXRvQXBwbHldPVwiYXV0b0FwcGx5KClcIlxuICAgICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICAgIFtkYXRlT3B0aW9uc109XCJkYXRlT3B0aW9ucygpXCJcbiAgICAgICAgW2hhc1RpbWVQaWNrZXJdPVwiaGFzVGltZVBpY2tlcigpXCJcbiAgICAgICAgW3F1aWNrUmFuZ2VzQXJyYXldPVwicXVpY2tSYW5nZXNBcnJheSgpXCJcbiAgICAgICAgW3N0YXJ0RGF0ZV09XCJzdGFydERhdGUoKVwiXG4gICAgICAgIFtlbmREYXRlXT1cImVuZERhdGUoKVwiXG4gICAgICAgIFttaW5EYXRlXT1cIm1pbkRhdGUoKVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGUoKVwiXG4gICAgICAgIFtsaXN0WWVhckhpZGRlbklucHV0U2VhcmNoXT1cImxpc3RZZWFySGlkZGVuSW5wdXRTZWFyY2goKVwiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJ3ctZnVsbCdcIlxuICAgICAgICAob3V0Q2FuY2VsKT1cImhhbmRsZXJDYW5jZWwoKVwiXG4gICAgICAgIChvdXRQaWNrZXJEYXRlKT1cImhhbmRsZXJQaWNrZXJEYXRlKCRldmVudClcIlxuICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyRnVuY3Rpb25zQ29udHJvbCgkZXZlbnQpXCJcbiAgICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nZUZsYWdNb3VzZSgkZXZlbnQpXCIgLz5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
@@ -46,6 +46,7 @@ export class LibsUiComponentsDatetimePickerComponent {
46
46
  minDate = input();
47
47
  maxDate = input();
48
48
  placeholder = input();
49
+ listYearHiddenInputSearch = input(true, { transform: (value) => value ?? true });
49
50
  validRequired = input(undefined);
50
51
  ignoreStopPropagationEvent = input(false);
51
52
  flagMouse = model({ isMouseEnter: false, isMouseEnterContent: false });
@@ -191,7 +192,7 @@ export class LibsUiComponentsDatetimePickerComponent {
191
192
  return;
192
193
  }
193
194
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
194
- 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 }, directionPopover: { classPropertyName: "directionPopover", publicName: "directionPopover", 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 }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", 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=\"libs-ui-date-picker {{ 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 direction:directionPopover(),\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.libs-ui-disable-background]=\"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()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\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] libs-ui-date-picker-label\"\n [class.!text-[#071631]]=\"!disable()\"\n [class.!text-[#9ca2ad]]=\"disable()\">\n @if (!chosenDateFromRanges().selectedLabel) {\n @if (!isSingle()) {\n @if (!placeholder()) {\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 } @else {\n <span class=\"text-[#9ca2ad]\">{{ (placeholder() || ' ') |translate }} </span>\n }\n }\n @if (isSingle()) {\n @if (!placeholder()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n } @else {\n <span class=\"text-[#9ca2ad]\">{{ (placeholder() || ' ') |translate }} </span>\n }\n\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 });
195
+ 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 }, directionPopover: { classPropertyName: "directionPopover", publicName: "directionPopover", 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 }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, listYearHiddenInputSearch: { classPropertyName: "listYearHiddenInputSearch", publicName: "listYearHiddenInputSearch", 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=\"libs-ui-date-picker {{ 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: 425,\n directionDistance:2,\n template: customRangesRef,\n widthByParent: widthByParent(),\n whiteTheme: true,\n ignoreArrow: true,\n zIndex: zIndex(),\n classInclude: 'rounded-[4px] ',\n direction:directionPopover(),\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.libs-ui-disable-background]=\"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()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\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] libs-ui-date-picker-label\"\n [class.!text-[#071631]]=\"!disable()\"\n [class.!text-[#9ca2ad]]=\"disable()\">\n @if (!chosenDateFromRanges().selectedLabel) {\n @if (!isSingle()) {\n @if (!placeholder()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>} -\n dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n } @else {\n <span class=\"text-[#9ca2ad]\">{{ (placeholder() || ' ') |translate }} </span>\n }\n }\n @if (isSingle()) {\n @if (!placeholder()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n } @else {\n <span class=\"text-[#9ca2ad]\">{{ (placeholder() || ' ') |translate }} </span>\n }\n\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\">\n </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 [listYearHiddenInputSearch]=\"listYearHiddenInputSearch()\"\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", "listYearHiddenInputSearch", "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 });
195
196
  }
196
197
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsDatetimePickerComponent, decorators: [{
197
198
  type: Component,
@@ -200,6 +201,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
200
201
  LibsUiComponentsLabelComponent,
201
202
  LibsUiComponentsPopoverComponent,
202
203
  LibsUiComponentsDatetimePickerCustomRangesComponent
203
- ], template: "<div class=\"libs-ui-date-picker {{ 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 direction:directionPopover(),\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.libs-ui-disable-background]=\"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()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\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] libs-ui-date-picker-label\"\n [class.!text-[#071631]]=\"!disable()\"\n [class.!text-[#9ca2ad]]=\"disable()\">\n @if (!chosenDateFromRanges().selectedLabel) {\n @if (!isSingle()) {\n @if (!placeholder()) {\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 } @else {\n <span class=\"text-[#9ca2ad]\">{{ (placeholder() || ' ') |translate }} </span>\n }\n }\n @if (isSingle()) {\n @if (!placeholder()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n } @else {\n <span class=\"text-[#9ca2ad]\">{{ (placeholder() || ' ') |translate }} </span>\n }\n\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" }]
204
+ ], template: "<div class=\"libs-ui-date-picker {{ 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: 425,\n directionDistance:2,\n template: customRangesRef,\n widthByParent: widthByParent(),\n whiteTheme: true,\n ignoreArrow: true,\n zIndex: zIndex(),\n classInclude: 'rounded-[4px] ',\n direction:directionPopover(),\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.libs-ui-disable-background]=\"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()\"\n [class.libs-ui-readonly-background]=\"readonly()\"\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] libs-ui-date-picker-label\"\n [class.!text-[#071631]]=\"!disable()\"\n [class.!text-[#9ca2ad]]=\"disable()\">\n @if (!chosenDateFromRanges().selectedLabel) {\n @if (!isSingle()) {\n @if (!placeholder()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>} -\n dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n } @else {\n <span class=\"text-[#9ca2ad]\">{{ (placeholder() || ' ') |translate }} </span>\n }\n }\n @if (isSingle()) {\n @if (!placeholder()) {\n <span class=\"text-[#9ca2ad]\">dd/mm/yyyy@if (hasTimePicker()) {<span>&nbsp;hh:mm</span>}</span>\n } @else {\n <span class=\"text-[#9ca2ad]\">{{ (placeholder() || ' ') |translate }} </span>\n }\n\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\">\n </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 [listYearHiddenInputSearch]=\"listYearHiddenInputSearch()\"\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" }]
204
205
  }], ctorParameters: () => [] });
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kYXRldGltZS9waWNrZXIvc3JjL3BpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pKLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBNEMsZ0NBQWdDLEVBQThDLE1BQU0sNkJBQTZCLENBQUM7QUFDckssT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsbURBQW1ELEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQXFCcEYsTUFBTSxPQUFPLHVDQUF1QztJQUNsRCxlQUFlO0lBQ0kseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7SUFDL0QsZUFBZSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN6QyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEQsV0FBVyxHQUFHLE1BQU0sQ0FBaUIsRUFB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QUFHLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsT0FBTyxJQUFJLHlCQUF5QjtnQkFDbkUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLGlCQUFpQixJQUFJLEVBQUU7YUFDakUsQ0FBQyxDQUFDO1lBRUgsT0FBTztRQUNULENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQztZQUN4QixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPO0lBQ1QsQ0FBQzt3R0F4TlUsdUNBQXVDOzRGQUF2Qyx1Q0FBdUMsMGhLQzVCcEQsMnZOQXlJQSx5RERuSEksZUFBZSw0RkFDZiw4QkFBOEIsNHFCQUM5QixnQ0FBZ0MscWVBQ2hDLG1EQUFtRDs7NEZBRzFDLHVDQUF1QztrQkFkbkQsU0FBUzsrQkFFRSxvQ0FBb0MsY0FHbEMsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLGVBQWU7d0JBQ2YsOEJBQThCO3dCQUM5QixnQ0FBZ0M7d0JBQ2hDLG1EQUFtRDtxQkFDcEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWxcIjtcbmltcG9ydCB7IElGbGFnTW91c2UsIElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQsIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LCBUWVBFX1BPUE9WRVJfRElSRUNUSU9OLCBUWVBFX1BPUE9WRVJfRVZFTlQgfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1wb3BvdmVyXCI7XG5pbXBvcnQgeyBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xuaW1wb3J0IGRheWpzIGZyb20gXCJkYXlqc1wiO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lUGlja2VyQ3VzdG9tUmFuZ2VzQ29tcG9uZW50IH0gZnJvbSBcIi4vY3VzdG9tLXJhbmdlcy9jdXN0b20tcmFuZ2VzLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgZGVmYXVsdExvY2FsZUNvbmZpZywgZ2V0RGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi9kZWZpbmVzL2RhdGUtb3B0aW9ucy5kZWZpbmVcIjtcbmltcG9ydCB7IElFbWl0RGF0ZVJhbmdlLCBJRW1pdFNpbmdsZURhdGUgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2NhbGVuZGFyLWVtaXQuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJRGF0ZVJhbmdlIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9jYWxlbmRhci12YXJpYWJsZXMuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJRGF0ZVRpbWVQaWNrZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB9IGZyb20gXCIuL2ludGVyZmFjZXMvZnVuY3Rpb24tY29udHJvbC5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IElDaG9zZW5EYXRlLCBMb2NhbGl6YXRpb25Db25maWcsIFRZUEVfUkFOR0VfS0VZIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9waWNrZXIuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJRGF0ZVRpbWVWYWxpZCB9IGZyb20gXCIuL2ludGVyZmFjZXMvdmFsaWQuaW50ZXJmYWNlXCI7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1kYXRldGltZS1waWNrZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzRGF0ZXRpbWVQaWNrZXJDdXN0b21SYW5nZXNDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzRGF0ZXRpbWVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBQUk9QRVJUWSAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCA9IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQ7XG4gIHByb3RlY3RlZCBzaG93UmFuZ2VzUG9wdXAgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgd2lkdGggPSBjb21wdXRlZCh0aGlzLmNvbXB1dGVkV2lkdGguYmluZCh0aGlzKSk7XG4gIHByb3RlY3RlZCBzaW5nbGVFcnJvciA9IHNpZ25hbDxJRGF0ZVRpbWVWYWxpZD4oeyBtZXNzYWdlOiB1bmRlZmluZWQgfSk7XG4gIHByb3RlY3RlZCBjaG9zZW5EYXRlRnJvbVJhbmdlcyA9IHNpZ25hbDxJQ2hvc2VuRGF0ZT4oe30pO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWREYXRlRnJvbUNhbGVuZGFyITogeyBzdGFydD86IGRheWpzLkRheWpzLCBlbmQ/OiBkYXlqcy5EYXlqcyB9O1xuICBwcm90ZWN0ZWQgZGlzcGxheVJhbmdlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRMYWJlbCA9IHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMoKS5zZWxlY3RlZExhYmVsIGFzIFRZUEVfUkFOR0VfS0VZO1xuXG4gICAgaWYgKHRoaXMuaXNTaW5nbGUoKSB8fCAhc2VsZWN0ZWRMYWJlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzZWxlY3RlZExhYmVsO1xuICB9KTtcbiAgcHJvdGVjdGVkIGRhdGVPcHRpb25zID0gc2lnbmFsPExvY2FsaXphdGlvbkNvbmZpZz4oeyAuLi5kZWZhdWx0TG9jYWxlQ29uZmlnKCksIC4uLmdldERhdGVPcHRpb25zKCkgfSk7XG5cbiAgcHJpdmF0ZSBwb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAvKiogSU5QVVQgKi9cbiAgcmVhZG9ubHkgc2hvd0N1c3RvbVJhbmdlTGFiZWwgPSBpbnB1dDxib29sZWFuLCBib29sZWFuPih0cnVlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyB0cnVlIH0pO1xuICByZWFkb25seSBsYWJlbENvbmZpZyA9IGlucHV0PElMYWJlbD4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcmVhZG9ubHkgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZSA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBjbGFzc1BpY2tlckluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgY2xhc3NQaWNrZXJDb250ZW50SW5jbHVkZSA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBpZ25vcmVCb3JkZXJRdWlja1JhbmdlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB1c2VDb2xvck1vZGVFeGlzdCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgaGFzVGltZVBpY2tlciA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSBhbGxvd1Jlc2V0ID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IHdpZHRoQnlMYWJlbCA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4+KHRydWUsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IHRydWUgfSk7XG4gIHJlYWRvbmx5IGRpcmVjdGlvblBvcG92ZXIgPSBpbnB1dDxUWVBFX1BPUE9WRVJfRElSRUNUSU9OLCBUWVBFX1BPUE9WRVJfRElSRUNUSU9OIHwgdW5kZWZpbmVkPignYm90dG9tJywgeyB0cmFuc2Zvcm06IHZhbHVlID0+IHZhbHVlID8/ICdib3R0b20nIH0pO1xuICByZWFkb25seSBkZWZhdWx0V2lkdGggPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGlzU2luZ2xlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBleHRlbmRSYW5nZXMgPSBpbnB1dDxBcnJheTxJRGF0ZVJhbmdlPj4oW10pO1xuICByZWFkb25seSBpc0JvcmRlckVycm9yID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBtaW5EYXRlID0gaW5wdXQ8ZGF5anMuRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IG1heERhdGUgPSBpbnB1dDxkYXlqcy5EYXlqcyB8IHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCk7XG5cbiAgcmVhZG9ubHkgdmFsaWRSZXF1aXJlZCA9IGlucHV0PElEYXRlVGltZVZhbGlkIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZmxhZ01vdXNlID0gbW9kZWw8SUZsYWdNb3VzZT4oeyBpc01vdXNlRW50ZXI6IGZhbHNlLCBpc01vdXNlRW50ZXJDb250ZW50OiBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgd2lkdGhCeVBhcmVudCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXI+KDEyMDAsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/IDEyMDAgfSk7XG4gIHJlYWRvbmx5IHJhbmdlc1BvcG92ZXJQb3NpdGlvbiA9IGlucHV0PCdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnLCAnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJz4oJ3N0YXJ0JywgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gJ3N0YXJ0JyB9KTtcbiAgcmVhZG9ubHkgaXNOZ0NvbnRlbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZUN1c3RvbVJhbmdlcyA9IGlucHV0PHN0cmluZz4oJycpO1xuICByZWFkb25seSBhdXRvQXBwbHkgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHBvc2l0aW9uUXVpY2tSYW5nZXMgPSBpbnB1dDwnbGVmdCcgfCAncmlnaHQnPignbGVmdCcpOyAvLyB24buLIHRyw60gbGlzdCBjaOG7jW4gbmhhbmgga2hv4bqjbmcgdGjhu51pIGdpYW5cblxuICByZWFkb25seSBzaW5nbGVEYXRlU2VsZWN0ZWQgPSBtb2RlbDxJRW1pdFNpbmdsZURhdGU+KCk7XG4gIHJlYWRvbmx5IGRhdGVSYW5nZVNlbGVjdGVkID0gbW9kZWw8SUVtaXREYXRlUmFuZ2U+KCk7XG5cbiAgLyoqIE9VVFBVVCAqL1xuICByZWFkb25seSBvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlID0gb3V0cHV0PElGbGFnTW91c2U+KCk7XG4gIHJlYWRvbmx5IG91dFJlc2V0ID0gb3V0cHV0PHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0U2luZ2xlRGF0ZSA9IG91dHB1dDxJRW1pdFNpbmdsZURhdGU+KCk7XG4gIHJlYWRvbmx5IG91dFNlbGVjdERhdGVSYW5nZSA9IG91dHB1dDxJRW1pdERhdGVSYW5nZT4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJRGF0ZVRpbWVQaWNrZXJGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2luZ2xlRGF0ZVNlbGVjdGVkKCk/LmRhdGUpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBkYXlqcyh0aGlzLnNpbmdsZURhdGVTZWxlY3RlZCgpPy5kYXRlKS5mb3JtYXQodGhpcy5oYXNUaW1lUGlja2VyKCkgPyAnREQvTU0vWVlZWSBISDptbScgOiAnREQvTU0vWVlZWScpO1xuICAgICAgICAgIHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMuc2V0KHsgc2VsZWN0ZWRMYWJlbDogc3RhcnRUaW1lIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHsgY2hlY2tJc1ZhbGlkOiB0aGlzLmNoZWNrSXNWYWxpZC5iaW5kKHRoaXMpIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RSYW5nZXMoZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoZmxhZ01vdXNlOiBJRmxhZ01vdXNlKSB7XG4gICAgdGhpcy5mbGFnTW91c2Uuc2V0KGZsYWdNb3VzZSlcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZVBvcG92ZXJGbGFnTW91c2UoZmxhZ01vdXNlOiBJRmxhZ01vdXNlKSB7XG4gICAgaWYgKHRoaXMuZmxhZ01vdXNlKCk/LmlzTW91c2VFbnRlckNvbnRlbnQpIHtcbiAgICAgIGZsYWdNb3VzZS5pc01vdXNlRW50ZXJDb250ZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5vdXRDaGFuZ1N0YWdlRmxhZ01vdXNlLmVtaXQoZmxhZ01vdXNlKTtcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJGdW5jdGlvbkNvbnRyb2woZXZlbnQ6IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQb3BvdmVyRXZlbnQoZXZlbnQ6IFRZUEVfUE9QT1ZFUl9FVkVOVCkge1xuICAgIGlmIChldmVudCA9PT0gJ3JlbW92ZScpIHtcbiAgICAgIHRoaXMuc2hvd1Jhbmdlc1BvcHVwLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJQaWNrZXJTaW5nbGVEYXRlKGRhdGE6IElFbWl0U2luZ2xlRGF0ZSkge1xuICAgIHRoaXMub3V0U2VsZWN0U2luZ2xlRGF0ZS5lbWl0KGRhdGEpO1xuICAgIHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMuc2V0KHsgc2VsZWN0ZWRMYWJlbDogZGF0YS5kaXNwbGF5TGFiZWwgfSk7XG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBkYXlqcyhkYXRhLmRhdGUpLmZvcm1hdCgnREQvTU0vWVlZWSBISDptbScpO1xuXG4gICAgICB0aGlzLmNob3NlbkRhdGVGcm9tUmFuZ2VzLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5zZWxlY3RlZExhYmVsID0gYCR7c3RhcnRUaW1lfWA7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc2luZ2xlRGF0ZVNlbGVjdGVkLnNldChkYXRhKTtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgIGF3YWl0IHRoaXMuY2hlY2tJc1ZhbGlkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclBpY2tlckRhdGVSYW5nZShkYXRhOiBJRW1pdERhdGVSYW5nZSkge1xuICAgIGlmICgoZGF0YS5kaXNwbGF5TGFiZWw/LmluZGV4T2YoJ0ludmFsaWQgRGF0ZScpID8/IC0xKSA+IC0xKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHRoaXMuc2VsZWN0ZWRLZXkgPSBkYXRhLnNlbGVjdGVkTGFiZWw7XG4gICAgdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcy5zZXQoeyBzZWxlY3RlZExhYmVsOiBkYXRhLmRpc3BsYXlMYWJlbCB9KTtcblxuICAgIC8vIHRoaXMuc2VsZWN0ZWQuc3RhcnQgPSBkYXlqcyhkYXRhLnN0YXJ0RGF0ZSk7XG4gICAgLy8gdGhpcy5zZWxlY3RlZC5lbmQgPSBkYXlqcyhkYXRhLmVuZERhdGUpO1xuICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZGF5anMoZGF0YS5zdGFydERhdGUpLmZvcm1hdCgnREQvTU0vWVlZWSBISDptbScpO1xuICAgICAgY29uc3QgZW5kVGltZSA9IGRheWpzKGRhdGEuZW5kRGF0ZSkuZm9ybWF0KCdERC9NTS9ZWVlZIEhIOm1tJyk7XG5cbiAgICAgIHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnNlbGVjdGVkTGFiZWwgPSBgJHtzdGFydFRpbWV9IC0gJHtlbmRUaW1lfWA7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHRoaXMubW9EYXRlUGlja2VyLmVtaXQodGhpcy5zaW5nbGVEYXRlUGlja2VyID8geyBjaG9zZW5MYWJlbDogdGhpcy5kYXRlVmFsdWUuY2hvc2VuTGFiZWwsIHNpbmdsZURhdGU6IHRoaXMuZGF0ZVZhbHVlLnN0YXJ0RGF0ZT8udXRjKCksIHN0YXJ0RGF0ZTogdGhpcy5kYXRlVmFsdWUuc3RhcnREYXRlPy51dGMoKSwgZW5kRGF0ZTogdGhpcy5kYXRlVmFsdWUuZW5kRGF0ZT8udXRjKCkgfSA6IHsgY2hvc2VuTGFiZWw6IHRoaXMuZGF0ZVZhbHVlLmNob3NlbkxhYmVsLCBzdGFydERhdGU6IHRoaXMuZGF0ZVZhbHVlLnN0YXJ0RGF0ZT8udXRjKCksIGVuZERhdGU6IHRoaXMuZGF0ZVZhbHVlLmVuZERhdGU/LnV0YygpIH0pO1xuICAgIGNvbnN0IHNob3dWaWV3RXh0ZXJuYWxSYW5nZUxhYmVsID0gdGhpcy5leHRlbmRSYW5nZXMoKT8uZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMoKS5zZWxlY3RlZExhYmVsKTtcblxuICAgIGlmICh0aGlzLmV4dGVuZFJhbmdlcygpICYmIHNob3dWaWV3RXh0ZXJuYWxSYW5nZUxhYmVsKSB7XG4gICAgICB0aGlzLmNob3NlbkRhdGVGcm9tUmFuZ2VzLnVwZGF0ZShjdXJyZW50ID0+IHtcbiAgICAgICAgY3VycmVudC5zZWxlY3RlZExhYmVsID0gc2hvd1ZpZXdFeHRlcm5hbFJhbmdlTGFiZWwgJiYgc2hvd1ZpZXdFeHRlcm5hbFJhbmdlTGFiZWwubGFiZWw7XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXRlUmFuZ2VTZWxlY3RlZC5zZXQoeyBxdWlja1JhbmdlSWQ6IGRhdGEucXVpY2tSYW5nZUlkLCBzdGFydERhdGU6IGRhdGEuc3RhcnREYXRlLCBlbmREYXRlOiBkYXRhLmVuZERhdGUgfSk7XG4gICAgdGhpcy5vdXRTZWxlY3REYXRlUmFuZ2UuZW1pdCh7IHF1aWNrUmFuZ2VJZDogZGF0YS5xdWlja1JhbmdlSWQsIHN0YXJ0RGF0ZTogZGF0YS5zdGFydERhdGUsIGVuZERhdGU6IGRhdGEuZW5kRGF0ZSB9KTtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgIGF3YWl0IHRoaXMuY2hlY2tJc1ZhbGlkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclJlc2V0KGV2ZW50PzogRXZlbnQpIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcy5zZXQoe30pO1xuICAgIC8vIHRoaXMuc2VsZWN0ZWQgPSB7IHN0YXJ0OiBkYXlqcygpLmhvdXIoMCkubWludXRlKDApLnNlY29uZCgwKSwgZW5kOiBkYXlqcygpLmhvdXIoMjMpLm1pbnV0ZSg1OSkuc2Vjb25kKDU5KSB9O1xuICAgIHRoaXMub3V0UmVzZXQuZW1pdCh1bmRlZmluZWQpO1xuICAgIGlmICh0aGlzLnZhbGlkUmVxdWlyZWQoKSkge1xuICAgICAgYXdhaXQgdGhpcy5jaGVja0lzVmFsaWQoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclVwZGF0ZVdpZHRoKCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCk/LnVwZGF0ZVBvcG92ZXJPdmVybGF5UG9zaXRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2FuY2VsKCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrSXNWYWxpZCgpIHtcbiAgICBpZiAodGhpcy5yZWFkb25seSgpIHx8IHRoaXMuZGlzYWJsZSgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2luZ2xlRXJyb3IoKS5tZXNzYWdlID8gZmFsc2UgOiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7IG1lc3NhZ2U6IHVuZGVmaW5lZCB9KTtcblxuICAgIGlmICghdGhpcy52YWxpZFJlcXVpcmVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWxpZFJlcXVpcmVkKCkgJiYgIXRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMoKS5zZWxlY3RlZExhYmVsKSB7XG4gICAgICB0aGlzLnNpbmdsZUVycm9yLnNldCh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudmFsaWRSZXF1aXJlZCgpPy5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQsXG4gICAgICAgIGludGVycG9sYXRlUGFyYW1zOiB0aGlzLnZhbGlkUmVxdWlyZWQoKT8uaW50ZXJwb2xhdGVQYXJhbXMgfHwge31cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlZFdpZHRoKCkge1xuICAgIGlmICh0aGlzLndpZHRoQnlMYWJlbCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGVmYXVsdFdpZHRoKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRXaWR0aCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc1RpbWVQaWNrZXIoKSkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzU2luZ2xlKCkgPyAzMjIgOiAxOTA7XG4gICAgfVxuICAgIHJldHVybiAhdGhpcy5pc1NpbmdsZSgpID8gMjMyIDogMTUyO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgcmV0dXJuO1xuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJsaWJzLXVpLWRhdGUtcGlja2VyIHt7IGNsYXNzSW5jbHVkZSgpIH19XCI+XG4gIEBpZiAobGFiZWxDb25maWcoKTsgYXMgbGFiZWxDb25maWcpIHtcbiAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsIFtjbGFzc0luY2x1ZGVdPVwibGFiZWxDb25maWcuY2xhc3NJbmNsdWRlXCJcbiAgICAgIFtsYWJlbExlZnRdPVwibGFiZWxDb25maWcubGFiZWxMZWZ0XCJcbiAgICAgIFtsYWJlbExlZnRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbExlZnRDbGFzc1wiXG4gICAgICBbcmVxdWlyZWRdPVwibGFiZWxDb25maWcucmVxdWlyZWQgXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICBbZGVzY3JpcHRpb25DbGFzc109XCJsYWJlbENvbmZpZy5kZXNjcmlwdGlvbkNsYXNzXCJcbiAgICAgIFtsYWJlbFJpZ2h0XT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgICAgW2xhYmVsUmlnaHRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbFJpZ2h0Q2xhc3NcIlxuICAgICAgW29ubHlTaG93Q291bnRdPVwibGFiZWxDb25maWcub25seVNob3dDb3VudFwiXG4gICAgICBbYnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgICAgW2J1dHRvbnNSaWdodF09XCJsYWJlbENvbmZpZy5idXR0b25zUmlnaHRcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0xlZnQgfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc1JpZ2h0XT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zUmlnaHQgfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtoYXNUb2dnbGVdPVwibGFiZWxDb25maWcuaGFzVG9nZ2xlXCJcbiAgICAgIFt0b2dnbGVBY3RpdmVdPVwibGFiZWxDb25maWcudG9nZ2xlQWN0aXZlXCJcbiAgICAgIFt0b2dnbGVEaXNhYmxlXT1cImxhYmVsQ29uZmlnLnRvZ2dsZURpc2FibGUgfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtwb3BvdmVyXT1cImxhYmVsQ29uZmlnLnBvcG92ZXJcIlxuICAgICAgW2ljb25Qb3BvdmVyQ2xhc3NdPVwibGFiZWxDb25maWcuaWNvblBvcG92ZXJDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtsaW1pdExlbmd0aF09XCJsYWJlbENvbmZpZy5saW1pdExlbmd0aFwiXG4gICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvblwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uIHx8IGRpc2FibGUoKVwiXG4gICAgICBbYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NdPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uQ29udGFpbmVyQ2xhc3NcIlxuICAgICAgW2NvdW50XT1cImxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbiAgfVxuICA8ZGl2IGNsYXNzPVwiZmxleCB3LWZ1bGxcIj5cbiAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgW2NsYXNzSW5jbHVkZV09XCJjbGFzc1BpY2tlckluY2x1ZGUoKVwiXG4gICAgICBbaWdub3JlU2hvd1BvcG92ZXJdPVwiZGlzYWJsZSgpIHx8IHJlYWRvbmx5KClcIlxuICAgICAgW21vZGVdPVwiJ2NsaWNrJ1wiXG4gICAgICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudCgpXCJcbiAgICAgIFtmbGFnTW91c2VdPVwiZmxhZ01vdXNlKClcIlxuICAgICAgW2NvbmZpZ109XCJ7XG4gICAgICAgIGFuaW1hdGlvbkNvbmZpZzp7fSxcbiAgICAgICAgbWF4V2lkdGg6IDc3MCxcbiAgICAgICAgbWF4SGVpZ2h0OiA0MjAsXG4gICAgICAgIGRpcmVjdGlvbkRpc3RhbmNlOjIsXG4gICAgICAgIHRlbXBsYXRlOiBjdXN0b21SYW5nZXNSZWYsXG4gICAgICAgIHdpZHRoQnlQYXJlbnQ6IHdpZHRoQnlQYXJlbnQoKSxcbiAgICAgICAgd2hpdGVUaGVtZTogdHJ1ZSxcbiAgICAgICAgaWdub3JlQXJyb3c6IHRydWUsXG4gICAgICAgIHpJbmRleDogekluZGV4KCksXG4gICAgICAgIGNsYXNzSW5jbHVkZTogJ3JvdW5kZWQtWzRweF0gJyxcbiAgICAgICAgZGlyZWN0aW9uOmRpcmVjdGlvblBvcG92ZXIoKSxcbiAgICAgICAgcG9zaXRpb246IHttb2RlOiByYW5nZXNQb3BvdmVyUG9zaXRpb24oKSxkaXN0YW5jZTogMH19XCJcbiAgICAgIChvdXRDaGFuZ1N0YWdlRmxhZ01vdXNlKT1cImhhbmRsZXJDaGFuZ1N0YWdlUG9wb3ZlckZsYWdNb3VzZSgkZXZlbnQpXCJcbiAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJGdW5jdGlvbkNvbnRyb2woJGV2ZW50KVwiXG4gICAgICAob3V0RXZlbnQpPVwiaGFuZGxlclBvcG92ZXJFdmVudCgkZXZlbnQpXCI+XG4gICAgICBAaWYgKCFpc05nQ29udGVudCgpKSB7XG4gICAgICAgIDxkaXYgI2NvbnRhaW5lclJlZlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgcHgtWzEycHhdIGgtWzMycHhdIHJvdW5kZWQtWzRweF0gYmctWyNmZmZmZmZdIGN1cnNvci1wb2ludGVyIGxpYnMtdWktZm9udC1oNXIge3sgY2xhc3NQaWNrZXJDb250ZW50SW5jbHVkZSgpIH19XCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktZGlzYWJsZS1iYWNrZ3JvdW5kXT1cImRpc2FibGUoKVwiXG4gICAgICAgICAgW2NsYXNzLiFib3JkZXItbm9uZV09XCJpZ25vcmVCb3JkZXJRdWlja1JhbmdlKClcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1nZW5lcmFsXT1cIiFzaW5nbGVFcnJvcigpLm1lc3NhZ2UgJiYgIWlnbm9yZUJvcmRlclF1aWNrUmFuZ2UoKVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWVycm9yLWdlbmVyYWxdPVwiKHNpbmdsZUVycm9yKCkubWVzc2FnZSB8fCBpc0JvcmRlckVycm9yKCkpICYmICFpZ25vcmVCb3JkZXJRdWlja1JhbmdlKClcIlxuICAgICAgICAgIFtjbGFzcy5taW4tdy1bMjg0cHhdXT1cIiFjaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwgJiYgIWlzU2luZ2xlKCkgJiYgaGFzVGltZVBpY2tlcigpXCJcbiAgICAgICAgICBbY2xhc3MuIWJvcmRlcl09XCJzaG93UmFuZ2VzUG9wdXAoKSAmJiAhaWdub3JlQm9yZGVyUXVpY2tSYW5nZSgpICYmICFyZWFkb25seSgpXCJcbiAgICAgICAgICBbY2xhc3MuIWJvcmRlci1bIzRlOGNmN11dPVwic2hvd1Jhbmdlc1BvcHVwKCkgJiYgIWlnbm9yZUJvcmRlclF1aWNrUmFuZ2UoKSAmJiAhcmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktcmVhZG9ubHktYmFja2dyb3VuZF09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwid2lkdGgoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJTZWxlY3RSYW5nZXMoJGV2ZW50KVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLWljb24tY2FsZW5kYXIgdGV4dC1bIzljYTJhZF0gdGV4dC1bMTZweF1cIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzhweF0gbGlicy11aS1kYXRlLXBpY2tlci1sYWJlbFwiXG4gICAgICAgICAgICBbY2xhc3MuIXRleHQtWyMwNzE2MzFdXT1cIiFkaXNhYmxlKClcIlxuICAgICAgICAgICAgW2NsYXNzLiF0ZXh0LVsjOWNhMmFkXV09XCJkaXNhYmxlKClcIj5cbiAgICAgICAgICAgIEBpZiAoIWNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCkge1xuICAgICAgICAgICAgICBAaWYgKCFpc1NpbmdsZSgpKSB7XG4gICAgICAgICAgICAgICAgQGlmICghcGxhY2Vob2xkZXIoKSkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjOWNhMmFkXVwiPmRkL21tL3l5eXlAaWYgKGhhc1RpbWVQaWNrZXIoKSkgezxzcGFuPiZuYnNwO2hoOm1tPC9zcGFuPn0gLSBkZC9tbS95eXl5QGlmIChoYXNUaW1lUGlja2VyKCkpIHs8c3Bhbj4mbmJzcDtoaDptbTwvc3Bhbj59PC9zcGFuPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjOWNhMmFkXVwiPnt7IChwbGFjZWhvbGRlcigpIHx8ICcgJykgfHRyYW5zbGF0ZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoaXNTaW5nbGUoKSkge1xuICAgICAgICAgICAgICAgIEBpZiAoIXBsYWNlaG9sZGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1bIzljYTJhZF1cIj5kZC9tbS95eXl5QGlmIChoYXNUaW1lUGlja2VyKCkpIHs8c3Bhbj4mbmJzcDtoaDptbTwvc3Bhbj59PC9zcGFuPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjOWNhMmFkXVwiPnt7IChwbGFjZWhvbGRlcigpIHx8ICcgJykgfHRyYW5zbGF0ZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCAmJiAhaXNTaW5nbGUoKSkge1xuICAgICAgICAgICAgICAgICAge3sgZGlzcGxheVJhbmdlVGl0bGUoKSB9fVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCAmJiBpc1NpbmdsZSgpKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3MudGV4dC1bIzI5YzdjY11dPVwidXNlQ29sb3JNb2RlRXhpc3QoKSB8fCBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChjaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwgJiYgYWxsb3dSZXNldCgpICYmICFkaXNhYmxlKCkgJiYgIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbC1bMTJweF0gbWwtYXV0byBoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2xvc2UtY2lyY2xlLXNvbGlkIHRleHQtWzE2cHhdIHRleHQtWyNjZGQwZDZdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclJlc2V0KCRldmVudClcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoaXNOZ0NvbnRlbnQoKSkge1xuICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImhhbmRsZXJTZWxlY3RSYW5nZXMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgPC9kaXY+XG4gIEBpZiAoc2luZ2xlRXJyb3IoKS5tZXNzYWdlICYmICF2YWxpZFJlcXVpcmVkKCk/Lmlnbm9yZU1lc3NhZ2UpIHtcbiAgICA8ZGl2IGNsYXNzPVwibXQtWzhweF0gdGV4dC1bI2VlMmQ0MV0gbGlicy11aS1mb250LWg3ciBsaWJzLXVpLXRleHQtZXJyb3JcIlxuICAgICAgW2lubmVySFRNTF09XCIoc2luZ2xlRXJyb3IoKS5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQpfCB0cmFuc2xhdGU6dmFsaWRSZXF1aXJlZCgpPy5pbnRlcnBvbGF0ZVBhcmFtc1wiPjwvZGl2PlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjdXN0b21SYW5nZXNSZWY+XG4gIDxsaWJzX3VpLWNvbXBvbmVudHMtZGF0ZXRpbWUtcGlja2VyLWN1c3RvbV9yYW5nZXMgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0luY2x1ZGVDdXN0b21SYW5nZXMoKVwiXG4gICAgW3dpZHRoQnlQYXJlbnRdPVwid2lkdGhCeVBhcmVudCgpXCJcbiAgICBbZGF0ZU9wdGlvbnNdPVwiZGF0ZU9wdGlvbnMoKVwiXG4gICAgW3Bvc2l0aW9uUXVpY2tSYW5nZXNdPVwicG9zaXRpb25RdWlja1JhbmdlcygpXCJcbiAgICBbc2hvd0N1c3RvbVJhbmdlTGFiZWxdPVwic2hvd0N1c3RvbVJhbmdlTGFiZWwoKVwiXG4gICAgW2F1dG9BcHBseV09XCJhdXRvQXBwbHkoKVwiXG4gICAgW2lzU2luZ2xlXT1cImlzU2luZ2xlKClcIlxuICAgIFttaW5EYXRlXT1cIm1pbkRhdGUoKVwiXG4gICAgW21heERhdGVdPVwibWF4RGF0ZSgpXCJcbiAgICBbc2luZ2xlRGF0ZVNlbGVjdGVkXT1cInNpbmdsZURhdGVTZWxlY3RlZCgpXCJcbiAgICBbZGF0ZVJhbmdlU2VsZWN0ZWRdPVwiZGF0ZVJhbmdlU2VsZWN0ZWQoKVwiXG4gICAgW2V4dGVuZFJhbmdlc109XCJleHRlbmRSYW5nZXMoKVwiXG4gICAgW2hhc1RpbWVQaWNrZXJdPVwiaGFzVGltZVBpY2tlcigpXCJcbiAgICAob3V0VXBkYXRlV2lkdGgpPVwiaGFuZGxlclVwZGF0ZVdpZHRoKClcIlxuICAgIChvdXRDYW5jZWwpPVwiaGFuZGxlckNhbmNlbCgpXCJcbiAgICAob3V0U2VsZWN0U2luZ2xlRGF0ZSk9XCJoYW5kbGVyUGlja2VyU2luZ2xlRGF0ZSgkZXZlbnQpXCJcbiAgICAob3V0U2VsZWN0RGF0ZVJhbmdlKT1cImhhbmRsZXJQaWNrZXJEYXRlUmFuZ2UoJGV2ZW50KVwiXG4gICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nU3RhZ2VGbGFnTW91c2UoJGV2ZW50KVwiIC8+XG48L25nLXRlbXBsYXRlPlxuIl19
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9kYXRldGltZS9waWNrZXIvc3JjL3BpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvZGF0ZXRpbWUvcGlja2VyL3NyYy9waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pKLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBNEMsZ0NBQWdDLEVBQThDLE1BQU0sNkJBQTZCLENBQUM7QUFDckssT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsbURBQW1ELEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQXFCcEYsTUFBTSxPQUFPLHVDQUF1QztJQUNsRCxlQUFlO0lBQ0kseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7SUFDL0QsZUFBZSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUN6QyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEQsV0FBVyxHQUFHLE1BQU0sQ0FBaUIsRUFB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QkFDOUIsZ0NBQWdDO3dCQUNoQyxtREFBbUQ7cUJBQ3BEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5wdXQsIG1vZGVsLCBPbkRlc3Ryb3ksIE9uSW5pdCwgb3V0cHV0LCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxhYmVsXCI7XG5pbXBvcnQgeyBJRmxhZ01vdXNlLCBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCwgVFlQRV9QT1BPVkVSX0RJUkVDVElPTiwgVFlQRV9QT1BPVkVSX0VWRU5UIH0gZnJvbSBcIkBsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3ZlclwiO1xuaW1wb3J0IHsgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNEYXRldGltZVBpY2tlckN1c3RvbVJhbmdlc0NvbXBvbmVudCB9IGZyb20gXCIuL2N1c3RvbS1yYW5nZXMvY3VzdG9tLXJhbmdlcy5jb21wb25lbnRcIjtcbmltcG9ydCB7IGRlZmF1bHRMb2NhbGVDb25maWcsIGdldERhdGVPcHRpb25zIH0gZnJvbSBcIi4vZGVmaW5lcy9kYXRlLW9wdGlvbnMuZGVmaW5lXCI7XG5pbXBvcnQgeyBJRW1pdERhdGVSYW5nZSwgSUVtaXRTaW5nbGVEYXRlIH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9jYWxlbmRhci1lbWl0LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSURhdGVSYW5nZSB9IGZyb20gXCIuL2ludGVyZmFjZXMvY2FsZW5kYXItdmFyaWFibGVzLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSURhdGVUaW1lUGlja2VyRnVuY3Rpb25Db250cm9sRXZlbnQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2Z1bmN0aW9uLWNvbnRyb2wuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyBJQ2hvc2VuRGF0ZSwgTG9jYWxpemF0aW9uQ29uZmlnLCBUWVBFX1JBTkdFX0tFWSB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGlja2VyLmludGVyZmFjZVwiO1xuaW1wb3J0IHsgSURhdGVUaW1lVmFsaWQgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3ZhbGlkLmludGVyZmFjZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtZGF0ZXRpbWUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBMaWJzVWlDb21wb25lbnRzTGFiZWxDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lUGlja2VyQ3VzdG9tUmFuZ2VzQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0RhdGV0aW1lUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKiogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQgPSBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEO1xuICBwcm90ZWN0ZWQgc2hvd1Jhbmdlc1BvcHVwID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIHdpZHRoID0gY29tcHV0ZWQodGhpcy5jb21wdXRlZFdpZHRoLmJpbmQodGhpcykpO1xuICBwcm90ZWN0ZWQgc2luZ2xlRXJyb3IgPSBzaWduYWw8SURhdGVUaW1lVmFsaWQ+KHsgbWVzc2FnZTogdW5kZWZpbmVkIH0pO1xuICBwcm90ZWN0ZWQgY2hvc2VuRGF0ZUZyb21SYW5nZXMgPSBzaWduYWw8SUNob3NlbkRhdGU+KHt9KTtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkRGF0ZUZyb21DYWxlbmRhciE6IHsgc3RhcnQ/OiBkYXlqcy5EYXlqcywgZW5kPzogZGF5anMuRGF5anMgfTtcbiAgcHJvdGVjdGVkIGRpc3BsYXlSYW5nZVRpdGxlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkTGFiZWwgPSB0aGlzLmNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCBhcyBUWVBFX1JBTkdFX0tFWTtcblxuICAgIGlmICh0aGlzLmlzU2luZ2xlKCkgfHwgIXNlbGVjdGVkTGFiZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRMYWJlbDtcbiAgfSk7XG4gIHByb3RlY3RlZCBkYXRlT3B0aW9ucyA9IHNpZ25hbDxMb2NhbGl6YXRpb25Db25maWc+KHsgLi4uZGVmYXVsdExvY2FsZUNvbmZpZygpLCAuLi5nZXREYXRlT3B0aW9ucygpIH0pO1xuXG4gIHByaXZhdGUgcG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50ID0gc2lnbmFsPElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgLyoqIElOUFVUICovXG4gIHJlYWRvbmx5IHNob3dDdXN0b21SYW5nZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbj4odHJ1ZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgbGFiZWxDb25maWcgPSBpbnB1dDxJTGFiZWw+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHJlYWRvbmx5ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgY2xhc3NQaWNrZXJJbmNsdWRlID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGNsYXNzUGlja2VyQ29udGVudEluY2x1ZGUgPSBpbnB1dDxzdHJpbmc+KCcnKTtcbiAgcmVhZG9ubHkgaWdub3JlQm9yZGVyUXVpY2tSYW5nZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgdXNlQ29sb3JNb2RlRXhpc3QgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGhhc1RpbWVQaWNrZXIgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgYWxsb3dSZXNldCA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuICByZWFkb25seSB3aWR0aEJ5TGFiZWwgPSBpbnB1dDxib29sZWFuLCBib29sZWFuPih0cnVlLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyB0cnVlIH0pO1xuICByZWFkb25seSBkaXJlY3Rpb25Qb3BvdmVyID0gaW5wdXQ8VFlQRV9QT1BPVkVSX0RJUkVDVElPTiwgVFlQRV9QT1BPVkVSX0RJUkVDVElPTiB8IHVuZGVmaW5lZD4oJ2JvdHRvbScsIHsgdHJhbnNmb3JtOiB2YWx1ZSA9PiB2YWx1ZSA/PyAnYm90dG9tJyB9KTtcbiAgcmVhZG9ubHkgZGVmYXVsdFdpZHRoID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICByZWFkb25seSBpc1NpbmdsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgZXh0ZW5kUmFuZ2VzID0gaW5wdXQ8QXJyYXk8SURhdGVSYW5nZT4+KFtdKTtcbiAgcmVhZG9ubHkgaXNCb3JkZXJFcnJvciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgbWluRGF0ZSA9IGlucHV0PGRheWpzLkRheWpzIHwgc3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBtYXhEYXRlID0gaW5wdXQ8ZGF5anMuRGF5anMgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIHJlYWRvbmx5IHBsYWNlaG9sZGVyID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBsaXN0WWVhckhpZGRlbklucHV0U2VhcmNoID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4odHJ1ZSwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gdHJ1ZSB9KTtcblxuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SURhdGVUaW1lVmFsaWQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBmbGFnTW91c2UgPSBtb2RlbDxJRmxhZ01vdXNlPih7IGlzTW91c2VFbnRlcjogZmFsc2UsIGlzTW91c2VFbnRlckNvbnRlbnQ6IGZhbHNlIH0pO1xuICByZWFkb25seSB3aWR0aEJ5UGFyZW50ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxudW1iZXIsIG51bWJlcj4oMTIwMCwgeyB0cmFuc2Zvcm06ICh2YWx1ZSkgPT4gdmFsdWUgPz8gMTIwMCB9KTtcbiAgcmVhZG9ubHkgcmFuZ2VzUG9wb3ZlclBvc2l0aW9uID0gaW5wdXQ8J3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcsICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnPignc3RhcnQnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnc3RhcnQnIH0pO1xuICByZWFkb25seSBpc05nQ29udGVudCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlQ3VzdG9tUmFuZ2VzID0gaW5wdXQ8c3RyaW5nPignJyk7XG4gIHJlYWRvbmx5IGF1dG9BcHBseSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgcG9zaXRpb25RdWlja1JhbmdlcyA9IGlucHV0PCdsZWZ0JyB8ICdyaWdodCc+KCdsZWZ0Jyk7IC8vIHbhu4sgdHLDrSBsaXN0IGNo4buNbiBuaGFuaCBraG/huqNuZyB0aOG7nWkgZ2lhblxuXG4gIHJlYWRvbmx5IHNpbmdsZURhdGVTZWxlY3RlZCA9IG1vZGVsPElFbWl0U2luZ2xlRGF0ZT4oKTtcbiAgcmVhZG9ubHkgZGF0ZVJhbmdlU2VsZWN0ZWQgPSBtb2RlbDxJRW1pdERhdGVSYW5nZT4oKTtcblxuICAvKiogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dENoYW5nU3RhZ2VGbGFnTW91c2UgPSBvdXRwdXQ8SUZsYWdNb3VzZT4oKTtcbiAgcmVhZG9ubHkgb3V0UmVzZXQgPSBvdXRwdXQ8dW5kZWZpbmVkPigpO1xuICByZWFkb25seSBvdXRTZWxlY3RTaW5nbGVEYXRlID0gb3V0cHV0PElFbWl0U2luZ2xlRGF0ZT4oKTtcbiAgcmVhZG9ubHkgb3V0U2VsZWN0RGF0ZVJhbmdlID0gb3V0cHV0PElFbWl0RGF0ZVJhbmdlPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElEYXRlVGltZVBpY2tlckZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zaW5nbGVEYXRlU2VsZWN0ZWQoKT8uZGF0ZSkge1xuICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGRheWpzKHRoaXMuc2luZ2xlRGF0ZVNlbGVjdGVkKCk/LmRhdGUpLmZvcm1hdCh0aGlzLmhhc1RpbWVQaWNrZXIoKSA/ICdERC9NTS9ZWVlZIEhIOm1tJyA6ICdERC9NTS9ZWVlZJyk7XG4gICAgICAgICAgdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcy5zZXQoeyBzZWxlY3RlZExhYmVsOiBzdGFydFRpbWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoeyBjaGVja0lzVmFsaWQ6IHRoaXMuY2hlY2tJc1ZhbGlkLmJpbmQodGhpcykgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclNlbGVjdFJhbmdlcyhldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZShmbGFnTW91c2U6IElGbGFnTW91c2UpIHtcbiAgICB0aGlzLmZsYWdNb3VzZS5zZXQoZmxhZ01vdXNlKVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDaGFuZ1N0YWdlUG9wb3ZlckZsYWdNb3VzZShmbGFnTW91c2U6IElGbGFnTW91c2UpIHtcbiAgICBpZiAodGhpcy5mbGFnTW91c2UoKT8uaXNNb3VzZUVudGVyQ29udGVudCkge1xuICAgICAgZmxhZ01vdXNlLmlzTW91c2VFbnRlckNvbnRlbnQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLm91dENoYW5nU3RhZ2VGbGFnTW91c2UuZW1pdChmbGFnTW91c2UpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgaGFuZGxlckZ1bmN0aW9uQ29udHJvbChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LnNldChldmVudCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJFdmVudChldmVudDogVFlQRV9QT1BPVkVSX0VWRU5UKSB7XG4gICAgaWYgKGV2ZW50ID09PSAncmVtb3ZlJykge1xuICAgICAgdGhpcy5zaG93UmFuZ2VzUG9wdXAuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclBpY2tlclNpbmdsZURhdGUoZGF0YTogSUVtaXRTaW5nbGVEYXRlKSB7XG4gICAgdGhpcy5vdXRTZWxlY3RTaW5nbGVEYXRlLmVtaXQoZGF0YSk7XG4gICAgdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcy5zZXQoeyBzZWxlY3RlZExhYmVsOiBkYXRhLmRpc3BsYXlMYWJlbCB9KTtcbiAgICBpZiAodGhpcy5oYXNUaW1lUGlja2VyKCkpIHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IGRheWpzKGRhdGEuZGF0ZSkuZm9ybWF0KCdERC9NTS9ZWVlZIEhIOm1tJyk7XG5cbiAgICAgIHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnNlbGVjdGVkTGFiZWwgPSBgJHtzdGFydFRpbWV9YDtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zaW5nbGVEYXRlU2VsZWN0ZWQuc2V0KGRhdGEpO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gICAgYXdhaXQgdGhpcy5jaGVja0lzVmFsaWQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUGlja2VyRGF0ZVJhbmdlKGRhdGE6IElFbWl0RGF0ZVJhbmdlKSB7XG4gICAgaWYgKChkYXRhLmRpc3BsYXlMYWJlbD8uaW5kZXhPZignSW52YWxpZCBEYXRlJykgPz8gLTEpID4gLTEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gdGhpcy5zZWxlY3RlZEtleSA9IGRhdGEuc2VsZWN0ZWRMYWJlbDtcbiAgICB0aGlzLmNob3NlbkRhdGVGcm9tUmFuZ2VzLnNldCh7IHNlbGVjdGVkTGFiZWw6IGRhdGEuZGlzcGxheUxhYmVsIH0pO1xuXG4gICAgLy8gdGhpcy5zZWxlY3RlZC5zdGFydCA9IGRheWpzKGRhdGEuc3RhcnREYXRlKTtcbiAgICAvLyB0aGlzLnNlbGVjdGVkLmVuZCA9IGRheWpzKGRhdGEuZW5kRGF0ZSk7XG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICBjb25zdCBzdGFydFRpbWUgPSBkYXlqcyhkYXRhLnN0YXJ0RGF0ZSkuZm9ybWF0KCdERC9NTS9ZWVlZIEhIOm1tJyk7XG4gICAgICBjb25zdCBlbmRUaW1lID0gZGF5anMoZGF0YS5lbmREYXRlKS5mb3JtYXQoJ0REL01NL1lZWVkgSEg6bW0nKTtcblxuICAgICAgdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcy51cGRhdGUoY3VycmVudCA9PiB7XG4gICAgICAgIGN1cnJlbnQuc2VsZWN0ZWRMYWJlbCA9IGAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YDtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gdGhpcy5tb0RhdGVQaWNrZXIuZW1pdCh0aGlzLnNpbmdsZURhdGVQaWNrZXIgPyB7IGNob3NlbkxhYmVsOiB0aGlzLmRhdGVWYWx1ZS5jaG9zZW5MYWJlbCwgc2luZ2xlRGF0ZTogdGhpcy5kYXRlVmFsdWUuc3RhcnREYXRlPy51dGMoKSwgc3RhcnREYXRlOiB0aGlzLmRhdGVWYWx1ZS5zdGFydERhdGU/LnV0YygpLCBlbmREYXRlOiB0aGlzLmRhdGVWYWx1ZS5lbmREYXRlPy51dGMoKSB9IDogeyBjaG9zZW5MYWJlbDogdGhpcy5kYXRlVmFsdWUuY2hvc2VuTGFiZWwsIHN0YXJ0RGF0ZTogdGhpcy5kYXRlVmFsdWUuc3RhcnREYXRlPy51dGMoKSwgZW5kRGF0ZTogdGhpcy5kYXRlVmFsdWUuZW5kRGF0ZT8udXRjKCkgfSk7XG4gICAgY29uc3Qgc2hvd1ZpZXdFeHRlcm5hbFJhbmdlTGFiZWwgPSB0aGlzLmV4dGVuZFJhbmdlcygpPy5maW5kKGl0ZW0gPT4gaXRlbS5pZCA9PT0gdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwpO1xuXG4gICAgaWYgKHRoaXMuZXh0ZW5kUmFuZ2VzKCkgJiYgc2hvd1ZpZXdFeHRlcm5hbFJhbmdlTGFiZWwpIHtcbiAgICAgIHRoaXMuY2hvc2VuRGF0ZUZyb21SYW5nZXMudXBkYXRlKGN1cnJlbnQgPT4ge1xuICAgICAgICBjdXJyZW50LnNlbGVjdGVkTGFiZWwgPSBzaG93Vmlld0V4dGVybmFsUmFuZ2VMYWJlbCAmJiBzaG93Vmlld0V4dGVybmFsUmFuZ2VMYWJlbC5sYWJlbDtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGVSYW5nZVNlbGVjdGVkLnNldCh7IHF1aWNrUmFuZ2VJZDogZGF0YS5xdWlja1JhbmdlSWQsIHN0YXJ0RGF0ZTogZGF0YS5zdGFydERhdGUsIGVuZERhdGU6IGRhdGEuZW5kRGF0ZSB9KTtcbiAgICB0aGlzLm91dFNlbGVjdERhdGVSYW5nZS5lbWl0KHsgcXVpY2tSYW5nZUlkOiBkYXRhLnF1aWNrUmFuZ2VJZCwgc3RhcnREYXRlOiBkYXRhLnN0YXJ0RGF0ZSwgZW5kRGF0ZTogZGF0YS5lbmREYXRlIH0pO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gICAgYXdhaXQgdGhpcy5jaGVja0lzVmFsaWQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyUmVzZXQoZXZlbnQ/OiBFdmVudCkge1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNob3NlbkRhdGVGcm9tUmFuZ2VzLnNldCh7fSk7XG4gICAgLy8gdGhpcy5zZWxlY3RlZCA9IHsgc3RhcnQ6IGRheWpzKCkuaG91cigwKS5taW51dGUoMCkuc2Vjb25kKDApLCBlbmQ6IGRheWpzKCkuaG91cigyMykubWludXRlKDU5KS5zZWNvbmQoNTkpIH07XG4gICAgdGhpcy5vdXRSZXNldC5lbWl0KHVuZGVmaW5lZCk7XG4gICAgaWYgKHRoaXMudmFsaWRSZXF1aXJlZCgpKSB7XG4gICAgICBhd2FpdCB0aGlzLmNoZWNrSXNWYWxpZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyVXBkYXRlV2lkdGgoKSB7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8udXBkYXRlUG9wb3Zlck92ZXJsYXlQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJDYW5jZWwoKSB7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJc1ZhbGlkKCkge1xuICAgIGlmICh0aGlzLnJlYWRvbmx5KCkgfHwgdGhpcy5kaXNhYmxlKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKCk7XG5cbiAgICByZXR1cm4gdGhpcy5zaW5nbGVFcnJvcigpLm1lc3NhZ2UgPyBmYWxzZSA6IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKCkge1xuICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHsgbWVzc2FnZTogdW5kZWZpbmVkIH0pO1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkUmVxdWlyZWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbGlkUmVxdWlyZWQoKSAmJiAhdGhpcy5jaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwpIHtcbiAgICAgIHRoaXMuc2luZ2xlRXJyb3Iuc2V0KHtcbiAgICAgICAgbWVzc2FnZTogdGhpcy52YWxpZFJlcXVpcmVkKCk/Lm1lc3NhZ2UgfHwgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCxcbiAgICAgICAgaW50ZXJwb2xhdGVQYXJhbXM6IHRoaXMudmFsaWRSZXF1aXJlZCgpPy5pbnRlcnBvbGF0ZVBhcmFtcyB8fCB7fVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVkV2lkdGgoKSB7XG4gICAgaWYgKHRoaXMud2lkdGhCeUxhYmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kZWZhdWx0V2lkdGgoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFdpZHRoKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzVGltZVBpY2tlcigpKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNTaW5nbGUoKSA/IDMyMiA6IDE5MDtcbiAgICB9XG4gICAgcmV0dXJuICF0aGlzLmlzU2luZ2xlKCkgPyAyMzIgOiAxNTI7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImxpYnMtdWktZGF0ZS1waWNrZXIge3sgY2xhc3NJbmNsdWRlKCkgfX1cIj5cbiAgQGlmIChsYWJlbENvbmZpZygpOyBhcyBsYWJlbENvbmZpZykge1xuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWwgW2NsYXNzSW5jbHVkZV09XCJsYWJlbENvbmZpZy5jbGFzc0luY2x1ZGVcIlxuICAgICAgW2xhYmVsTGVmdF09XCJsYWJlbENvbmZpZy5sYWJlbExlZnRcIlxuICAgICAgW2xhYmVsTGVmdENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdENsYXNzXCJcbiAgICAgIFtyZXF1aXJlZF09XCJsYWJlbENvbmZpZy5yZXF1aXJlZCBcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgIFtkZXNjcmlwdGlvbkNsYXNzXT1cImxhYmVsQ29uZmlnLmRlc2NyaXB0aW9uQ2xhc3NcIlxuICAgICAgW2xhYmVsUmlnaHRdPVwibGFiZWxDb25maWcubGFiZWxSaWdodFwiXG4gICAgICBbbGFiZWxSaWdodENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgIFtidXR0b25zTGVmdF09XCJsYWJlbENvbmZpZy5idXR0b25zTGVmdFwiXG4gICAgICBbYnV0dG9uc1JpZ2h0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICBbZGlzYWJsZUJ1dHRvbnNMZWZ0XT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zTGVmdCB8fCBkaXNhYmxlKClcIlxuICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodCB8fCBkaXNhYmxlKClcIlxuICAgICAgW2hhc1RvZ2dsZV09XCJsYWJlbENvbmZpZy5oYXNUb2dnbGVcIlxuICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJsYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgW3RvZ2dsZURpc2FibGVdPVwibGFiZWxDb25maWcudG9nZ2xlRGlzYWJsZSB8fCBkaXNhYmxlKClcIlxuICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICBbaWNvblBvcG92ZXJDbGFzc109XCJsYWJlbENvbmZpZy5pY29uUG9wb3ZlckNsYXNzXCJcbiAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25dPVwibGFiZWxDb25maWcuYnV0dG9uc0Rlc2NyaXB0aW9uXCJcbiAgICAgIFtkaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uXT1cImxhYmVsQ29uZmlnLmRpc2FibGVCdXR0b25zRGVzY3JpcHRpb24gfHwgZGlzYWJsZSgpXCJcbiAgICAgIFtidXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc109XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25Db250YWluZXJDbGFzc1wiXG4gICAgICBbY291bnRdPVwibGFiZWxDb25maWcuY291bnRcIiAvPlxuICB9XG4gIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbFwiPlxuICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBbY2xhc3NJbmNsdWRlXT1cImNsYXNzUGlja2VySW5jbHVkZSgpXCJcbiAgICAgIFtpZ25vcmVTaG93UG9wb3Zlcl09XCJkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICBbbW9kZV09XCInY2xpY2snXCJcbiAgICAgIFtpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlXT1cInRydWVcIlxuICAgICAgW2lnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50XT1cImlnbm9yZVN0b3BQcm9wYWdhdGlvbkV2ZW50KClcIlxuICAgICAgW2ZsYWdNb3VzZV09XCJmbGFnTW91c2UoKVwiXG4gICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgYW5pbWF0aW9uQ29uZmlnOnt9LFxuICAgICAgICBtYXhXaWR0aDogNzcwLFxuICAgICAgICBtYXhIZWlnaHQ6IDQyNSxcbiAgICAgICAgZGlyZWN0aW9uRGlzdGFuY2U6MixcbiAgICAgICAgdGVtcGxhdGU6IGN1c3RvbVJhbmdlc1JlZixcbiAgICAgICAgd2lkdGhCeVBhcmVudDogd2lkdGhCeVBhcmVudCgpLFxuICAgICAgICB3aGl0ZVRoZW1lOiB0cnVlLFxuICAgICAgICBpZ25vcmVBcnJvdzogdHJ1ZSxcbiAgICAgICAgekluZGV4OiB6SW5kZXgoKSxcbiAgICAgICAgY2xhc3NJbmNsdWRlOiAncm91bmRlZC1bNHB4XSAnLFxuICAgICAgICBkaXJlY3Rpb246ZGlyZWN0aW9uUG9wb3ZlcigpLFxuICAgICAgICBwb3NpdGlvbjoge21vZGU6IHJhbmdlc1BvcG92ZXJQb3NpdGlvbigpLGRpc3RhbmNlOiAwfX1cIlxuICAgICAgKG91dENoYW5nU3RhZ2VGbGFnTW91c2UpPVwiaGFuZGxlckNoYW5nU3RhZ2VQb3BvdmVyRmxhZ01vdXNlKCRldmVudClcIlxuICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlckZ1bmN0aW9uQ29udHJvbCgkZXZlbnQpXCJcbiAgICAgIChvdXRFdmVudCk9XCJoYW5kbGVyUG9wb3ZlckV2ZW50KCRldmVudClcIj5cbiAgICAgIEBpZiAoIWlzTmdDb250ZW50KCkpIHtcbiAgICAgICAgPGRpdiAjY29udGFpbmVyUmVmXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBweC1bMTJweF0gaC1bMzJweF0gcm91bmRlZC1bNHB4XSBiZy1bI2ZmZmZmZl0gY3Vyc29yLXBvaW50ZXIgbGlicy11aS1mb250LWg1ciB7eyBjbGFzc1BpY2tlckNvbnRlbnRJbmNsdWRlKCkgfX1cIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1kaXNhYmxlLWJhY2tncm91bmRdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICBbY2xhc3MuIWJvcmRlci1ub25lXT1cImlnbm9yZUJvcmRlclF1aWNrUmFuZ2UoKVwiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktYm9yZGVyLWdlbmVyYWxdPVwiIXNpbmdsZUVycm9yKCkubWVzc2FnZSAmJiAhaWdub3JlQm9yZGVyUXVpY2tSYW5nZSgpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1ib3JkZXItZXJyb3ItZ2VuZXJhbF09XCIoc2luZ2xlRXJyb3IoKS5tZXNzYWdlIHx8IGlzQm9yZGVyRXJyb3IoKSkgJiYgIWlnbm9yZUJvcmRlclF1aWNrUmFuZ2UoKVwiXG4gICAgICAgICAgW2NsYXNzLm1pbi13LVsyODRweF1dPVwiIWNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCAmJiAhaXNTaW5nbGUoKSAmJiBoYXNUaW1lUGlja2VyKClcIlxuICAgICAgICAgIFtjbGFzcy4hYm9yZGVyXT1cInNob3dSYW5nZXNQb3B1cCgpICYmICFpZ25vcmVCb3JkZXJRdWlja1JhbmdlKCkgJiYgIXJlYWRvbmx5KClcIlxuICAgICAgICAgIFtjbGFzcy4hYm9yZGVyLVsjNGU4Y2Y3XV09XCJzaG93UmFuZ2VzUG9wdXAoKSAmJiAhaWdub3JlQm9yZGVyUXVpY2tSYW5nZSgpICYmICFyZWFkb25seSgpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seV09XCJyZWFkb25seSgpXCJcbiAgICAgICAgICBbY2xhc3MubGlicy11aS1yZWFkb25seS1iYWNrZ3JvdW5kXT1cInJlYWRvbmx5KClcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJ3aWR0aCgpXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclNlbGVjdFJhbmdlcygkZXZlbnQpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktaWNvbi1jYWxlbmRhciB0ZXh0LVsjOWNhMmFkXSB0ZXh0LVsxNnB4XVwiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC1bOHB4XSBsaWJzLXVpLWRhdGUtcGlja2VyLWxhYmVsXCJcbiAgICAgICAgICAgIFtjbGFzcy4hdGV4dC1bIzA3MTYzMV1dPVwiIWRpc2FibGUoKVwiXG4gICAgICAgICAgICBbY2xhc3MuIXRleHQtWyM5Y2EyYWRdXT1cImRpc2FibGUoKVwiPlxuICAgICAgICAgICAgQGlmICghY2hvc2VuRGF0ZUZyb21SYW5nZXMoKS5zZWxlY3RlZExhYmVsKSB7XG4gICAgICAgICAgICAgIEBpZiAoIWlzU2luZ2xlKCkpIHtcbiAgICAgICAgICAgICAgICBAaWYgKCFwbGFjZWhvbGRlcigpKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtWyM5Y2EyYWRdXCI+ZGQvbW0veXl5eUBpZiAoaGFzVGltZVBpY2tlcigpKSB7PHNwYW4+Jm5ic3A7aGg6bW08L3NwYW4+fSAtXG4gICAgICAgICAgICAgICAgICBkZC9tbS95eXl5QGlmIChoYXNUaW1lUGlja2VyKCkpIHs8c3Bhbj4mbmJzcDtoaDptbTwvc3Bhbj59PC9zcGFuPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjOWNhMmFkXVwiPnt7IChwbGFjZWhvbGRlcigpIHx8ICcgJykgfHRyYW5zbGF0ZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoaXNTaW5nbGUoKSkge1xuICAgICAgICAgICAgICAgIEBpZiAoIXBsYWNlaG9sZGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1bIzljYTJhZF1cIj5kZC9tbS95eXl5QGlmIChoYXNUaW1lUGlja2VyKCkpIHs8c3Bhbj4mbmJzcDtoaDptbTwvc3Bhbj59PC9zcGFuPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LVsjOWNhMmFkXVwiPnt7IChwbGFjZWhvbGRlcigpIHx8ICcgJykgfHRyYW5zbGF0ZSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCAmJiAhaXNTaW5nbGUoKSkge1xuICAgICAgICAgICAgICAgICAge3sgZGlzcGxheVJhbmdlVGl0bGUoKSB9fVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGNob3NlbkRhdGVGcm9tUmFuZ2VzKCkuc2VsZWN0ZWRMYWJlbCAmJiBpc1NpbmdsZSgpKSB7XG4gICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3MudGV4dC1bIzI5YzdjY11dPVwidXNlQ29sb3JNb2RlRXhpc3QoKSB8fCBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChjaG9zZW5EYXRlRnJvbVJhbmdlcygpLnNlbGVjdGVkTGFiZWwgJiYgYWxsb3dSZXNldCgpICYmICFkaXNhYmxlKCkgJiYgIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbC1bMTJweF0gbWwtYXV0byBoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsaWJzLXVpLWljb24tY2xvc2UtY2lyY2xlLXNvbGlkIHRleHQtWzE2cHhdIHRleHQtWyNjZGQwZDZdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlclJlc2V0KCRldmVudClcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoaXNOZ0NvbnRlbnQoKSkge1xuICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImhhbmRsZXJTZWxlY3RSYW5nZXMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgPC9kaXY+XG4gIEBpZiAoc2luZ2xlRXJyb3IoKS5tZXNzYWdlICYmICF2YWxpZFJlcXVpcmVkKCk/Lmlnbm9yZU1lc3NhZ2UpIHtcbiAgICA8ZGl2IGNsYXNzPVwibXQtWzhweF0gdGV4dC1bI2VlMmQ0MV0gbGlicy11aS1mb250LWg3ciBsaWJzLXVpLXRleHQtZXJyb3JcIlxuICAgICAgW2lubmVySFRNTF09XCIoc2luZ2xlRXJyb3IoKS5tZXNzYWdlIHx8IEVSUk9SX01FU1NBR0VfRU1QVFlfVkFMSUQpfCB0cmFuc2xhdGU6dmFsaWRSZXF1aXJlZCgpPy5pbnRlcnBvbGF0ZVBhcmFtc1wiPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjdXN0b21SYW5nZXNSZWY+XG4gIDxsaWJzX3VpLWNvbXBvbmVudHMtZGF0ZXRpbWUtcGlja2VyLWN1c3RvbV9yYW5nZXMgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgW2NsYXNzSW5jbHVkZV09XCJjbGFzc0luY2x1ZGVDdXN0b21SYW5nZXMoKVwiXG4gICAgW3dpZHRoQnlQYXJlbnRdPVwid2lkdGhCeVBhcmVudCgpXCJcbiAgICBbZGF0ZU9wdGlvbnNdPVwiZGF0ZU9wdGlvbnMoKVwiXG4gICAgW3Bvc2l0aW9uUXVpY2tSYW5nZXNdPVwicG9zaXRpb25RdWlja1JhbmdlcygpXCJcbiAgICBbc2hvd0N1c3RvbVJhbmdlTGFiZWxdPVwic2hvd0N1c3RvbVJhbmdlTGFiZWwoKVwiXG4gICAgW2F1dG9BcHBseV09XCJhdXRvQXBwbHkoKVwiXG4gICAgW2lzU2luZ2xlXT1cImlzU2luZ2xlKClcIlxuICAgIFttaW5EYXRlXT1cIm1pbkRhdGUoKVwiXG4gICAgW21heERhdGVdPVwibWF4RGF0ZSgpXCJcbiAgICBbbGlzdFllYXJIaWRkZW5JbnB1dFNlYXJjaF09XCJsaXN0WWVhckhpZGRlbklucHV0U2VhcmNoKClcIlxuICAgIFtzaW5nbGVEYXRlU2VsZWN0ZWRdPVwic2luZ2xlRGF0ZVNlbGVjdGVkKClcIlxuICAgIFtkYXRlUmFuZ2VTZWxlY3RlZF09XCJkYXRlUmFuZ2VTZWxlY3RlZCgpXCJcbiAgICBbZXh0ZW5kUmFuZ2VzXT1cImV4dGVuZFJhbmdlcygpXCJcbiAgICBbaGFzVGltZVBpY2tlcl09XCJoYXNUaW1lUGlja2VyKClcIlxuICAgIChvdXRVcGRhdGVXaWR0aCk9XCJoYW5kbGVyVXBkYXRlV2lkdGgoKVwiXG4gICAgKG91dENhbmNlbCk9XCJoYW5kbGVyQ2FuY2VsKClcIlxuICAgIChvdXRTZWxlY3RTaW5nbGVEYXRlKT1cImhhbmRsZXJQaWNrZXJTaW5nbGVEYXRlKCRldmVudClcIlxuICAgIChvdXRTZWxlY3REYXRlUmFuZ2UpPVwiaGFuZGxlclBpY2tlckRhdGVSYW5nZSgkZXZlbnQpXCJcbiAgICAob3V0Q2hhbmdTdGFnZUZsYWdNb3VzZSk9XCJoYW5kbGVyQ2hhbmdTdGFnZUZsYWdNb3VzZSgkZXZlbnQpXCIgLz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=