mis-crystal-design-system 4.0.39-test-1 → 4.0.39-test-R

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.
@@ -58,45 +58,62 @@
58
58
  TimeRangePickerComponent.prototype.setFirstIntervals = function () {
59
59
  var minutes = moment__namespace().minutes();
60
60
  var offset = this.interval - (minutes % this.interval);
61
- // first interval for the start picker will be the one closest to the current time
62
- // if the start date is equal to the curr date
63
- if (this.startDate === this.endDate) {
64
- var currentTime = moment__namespace().valueOf();
65
- // if current time >= 11:45 the start picker will show
66
- // current time instead of next closest interval
67
- if (currentTime >= moment__namespace().endOf("d").subtract(15, "m").valueOf()) {
68
- this.firstIntervalForStartPicker = currentTime;
61
+ // start date, 22 MAY === current date, 22 MAY
62
+ if (this.startDate === this.currDate) {
63
+ var currentTime = moment__namespace(this.startDateEpoch).valueOf();
64
+ // start date, 22 MAY === current date, 22 MAY === end date, 22 MAY
65
+ if (this.startDate === this.endDate) {
66
+ // current time is in last interval
67
+ if (currentTime >= moment__namespace(this.startDateEpoch).endOf("d").subtract(this.interval, "m").valueOf()) {
68
+ this.firstIntervalForStartPicker = currentTime;
69
+ this.firstIntervalForEndPicker = moment__namespace(this.endDateEpoch).endOf("d").valueOf();
70
+ }
71
+ // current time isn't in last interval
72
+ else {
73
+ this.firstIntervalForStartPicker = moment__namespace().add(offset, "m").valueOf();
74
+ this.firstIntervalForEndPicker = moment__namespace().add(offset, "m").add(this.interval, "m").valueOf();
75
+ }
69
76
  }
77
+ // start date, 22 MAY === current date, 22 MAY !== end date, 30 MAY
70
78
  else {
71
- this.firstIntervalForStartPicker = moment__namespace().add(offset, "m").valueOf();
79
+ // current time is in last interval
80
+ if (currentTime >= moment__namespace(this.startDateEpoch).endOf("d").subtract(this.interval, "m").valueOf()) {
81
+ this.firstIntervalForStartPicker = currentTime;
82
+ this.firstIntervalForEndPicker = moment__namespace(this.endDateEpoch).endOf("d").valueOf();
83
+ }
84
+ // current time isn't in last interval
85
+ else {
86
+ this.firstIntervalForStartPicker = moment__namespace().add(offset, "m").valueOf();
87
+ this.firstIntervalForEndPicker = moment__namespace(this.endDateEpoch).valueOf();
88
+ }
72
89
  }
73
- this.startTime = {
74
- valid: true,
75
- time: moment__namespace().add(offset, "m").format(this.timeFormat),
76
- epoch: moment__namespace().add(offset, "m").valueOf()
77
- };
78
- }
79
- else {
80
- this.firstIntervalForStartPicker = moment__namespace(this.startDateEpoch).startOf("d").valueOf();
81
- this.startTime = {
82
- valid: true,
83
- time: this.givenStartTime ? moment__namespace(this.givenStartTime).format(this.timeFormat) : moment__namespace(this.startDateEpoch).startOf('d').add(offset, "m").format(this.timeFormat),
84
- epoch: this.givenStartTime ? this.givenStartTime : moment__namespace(this.startDateEpoch).startOf('d').add(offset, "m").valueOf()
85
- };
86
- }
87
- // for the end picker if the startDate and the endDate is same
88
- // the first interval is set one interval ahead of the first interval for start picker
89
- // else if the dates are different we set it to the start of the day
90
- if (this.startDate === this.endDate) {
91
- this.firstIntervalForEndPicker = moment__namespace().add(offset, "m").add(this.interval, "m").valueOf();
92
90
  }
91
+ // start date, 30 MAY !== current date, 22 MAY
93
92
  else {
94
- this.firstIntervalForEndPicker = moment__namespace().startOf("d").valueOf();
93
+ // start date === end Date
94
+ if (this.startDate === this.endDate) {
95
+ this.firstIntervalForStartPicker = moment__namespace(this.startDateEpoch).startOf("d").valueOf();
96
+ this.firstIntervalForEndPicker = moment__namespace(this.endDateEpoch).add(this.interval, "m").valueOf();
97
+ }
98
+ // start date !== end date
99
+ else {
100
+ this.firstIntervalForStartPicker = moment__namespace(this.startDateEpoch).startOf("d").valueOf();
101
+ this.firstIntervalForEndPicker = moment__namespace(this.startDateEpoch).startOf("d").valueOf();
102
+ }
95
103
  }
104
+ if (this.givenStartTime)
105
+ this.firstIntervalForStartPicker = this.givenStartTime;
106
+ if (this.givenEndTime)
107
+ this.firstIntervalForEndPicker = this.givenEndTime;
108
+ this.startTime = {
109
+ valid: true,
110
+ time: moment__namespace(this.firstIntervalForStartPicker).format(this.timeFormat),
111
+ epoch: moment__namespace(this.firstIntervalForStartPicker).valueOf()
112
+ };
96
113
  this.endTime = {
97
114
  valid: true,
98
115
  time: moment__namespace(this.firstIntervalForEndPicker).format(this.timeFormat),
99
- epoch: this.firstIntervalForEndPicker
116
+ epoch: moment__namespace(this.firstIntervalForEndPicker).valueOf()
100
117
  };
101
118
  };
102
119
  TimeRangePickerComponent.prototype.emitTimeRange = function (data) {
@@ -1 +1 @@
1
- {"version":3,"file":"mis-crystal-design-system-timerangepicker.umd.js","sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts","../../../projects/mis-components/timerangepicker/mis-crystal-design-system-timerangepicker.ts"],"sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime, TDirection } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth: string = \"100px\";\n @Input() dropdownWidth?: string;\n @Input() height: string = \"46px\";\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() givenStartTime: number;\n @Input() givenEndTime: number;\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Input() showTooltip: boolean = true;\n @Input() direction: TDirection = 'row';\n @Input() gap: string = '1rem';\n\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n startDate!: string;\n endDate!: string;\n currDate!: string;\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n triggerChange: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n moment.tz.setDefault(this.timezone);\n this.startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n this.endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n this.currDate = moment().format(\"DD-MM-YYYY\");\n this.setFirstIntervals();\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // first interval for the start picker will be the one closest to the current time\n // if the start date is equal to the curr date\n if (this.startDate === this.endDate) {\n const currentTime = moment().valueOf();\n\n // if current time >= 11:45 the start picker will show\n // current time instead of next closest interval\n if ( currentTime >= moment().endOf(\"d\").subtract(15, \"m\").valueOf()){\n this.firstIntervalForStartPicker = currentTime;\n } else {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n }\n this.startTime = {\n valid: true,\n time: moment().add(offset, \"m\").format(this.timeFormat),\n epoch: moment().add(offset, \"m\").valueOf()\n };\n } else {\n this.firstIntervalForStartPicker = moment(this.startDateEpoch).startOf(\"d\").valueOf();\n this.startTime = {\n valid: true,\n time: this.givenStartTime ? moment(this.givenStartTime).format(this.timeFormat) : moment(this.startDateEpoch).startOf('d').add(offset, \"m\").format(this.timeFormat),\n epoch: this.givenStartTime ? this.givenStartTime : moment(this.startDateEpoch).startOf('d').add(offset, \"m\").valueOf()\n };\n }\n\n // for the end picker if the startDate and the endDate is same\n // the first interval is set one interval ahead of the first interval for start picker\n // else if the dates are different we set it to the start of the day\n if (this.startDate === this.endDate) {\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n } else {\n this.firstIntervalForEndPicker = moment().startOf(\"d\").valueOf();\n }\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat),\n epoch: this.firstIntervalForEndPicker\n };\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n this.rangeValidity = true;\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n if (this.startDate === this.endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`)\n .add(offset, \"m\")\n .valueOf();\n\n // if the first interval == 12:00am, set it as 11:59pm\n const intervalAsString = moment(this.firstIntervalForEndPicker).format(this.timeFormat);\n const endOfDayAsString = moment(moment(`${this.startDate}`, `DD-MM-YYYY ${this.timeFormat}`).endOf(\"d\").add(1, \"m\")).format(this.timeFormat);\n if (intervalAsString === endOfDayAsString) {\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).endOf(\"d\").valueOf();\n }\n\n } else {\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) &&\n this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n this.triggerChange = !this.triggerChange;\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n\n const timeMoment = moment(`${moment(date).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);\n let flag: boolean = false;\n\n // if the first interval is set to the start of the day\n // then we don't check its validity against the current time\n if ((this.givenStartTime && this.givenEndTime) || (this.startDate !== this.endDate && this.startDate !== this.currDate)) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timeMoment.diff(moment(), \"m\") >= 0 ? true : false;\n }\n\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation(validity: boolean) {\n if (validity && this.startDate === this.endDate) {\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["moment","EventEmitter","moment.tz","Component","ChangeDetectorRef","Input","Output","NgModule","CommonModule","FormsModule","TimePickerModule"],"mappings":"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"}
1
+ {"version":3,"file":"mis-crystal-design-system-timerangepicker.umd.js","sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts","../../../projects/mis-components/timerangepicker/mis-crystal-design-system-timerangepicker.ts"],"sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime, TDirection } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth: string = \"100px\";\n @Input() dropdownWidth?: string;\n @Input() height: string = \"46px\";\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() givenStartTime: number;\n @Input() givenEndTime: number;\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Input() showTooltip: boolean = true;\n @Input() direction: TDirection = 'row';\n @Input() gap: string = '1rem';\n\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n startDate!: string;\n endDate!: string;\n currDate!: string;\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n triggerChange: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n moment.tz.setDefault(this.timezone);\n this.startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n this.endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n this.currDate = moment().format(\"DD-MM-YYYY\");\n this.setFirstIntervals();\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // start date, 22 MAY === current date, 22 MAY\n if( this.startDate === this.currDate ){\n const currentTime = moment(this.startDateEpoch).valueOf();\n\n // start date, 22 MAY === current date, 22 MAY === end date, 22 MAY\n if(this.startDate === this.endDate){\n\n // current time is in last interval\n if( currentTime >= moment(this.startDateEpoch).endOf(\"d\").subtract(this.interval,\"m\").valueOf()){\n this.firstIntervalForStartPicker = currentTime;\n this.firstIntervalForEndPicker = moment(this.endDateEpoch).endOf(\"d\").valueOf();\n }\n // current time isn't in last interval\n else {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n }\n } \n // start date, 22 MAY === current date, 22 MAY !== end date, 30 MAY\n else {\n // current time is in last interval\n if( currentTime >= moment(this.startDateEpoch).endOf(\"d\").subtract(this.interval,\"m\").valueOf()){\n this.firstIntervalForStartPicker = currentTime;\n this.firstIntervalForEndPicker = moment(this.endDateEpoch).endOf(\"d\").valueOf();\n }\n // current time isn't in last interval\n else {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.firstIntervalForEndPicker = moment(this.endDateEpoch).valueOf();\n }\n }\n }\n // start date, 30 MAY !== current date, 22 MAY\n else {\n // start date === end Date\n if( this.startDate === this.endDate){\n this.firstIntervalForStartPicker = moment(this.startDateEpoch).startOf(\"d\").valueOf();\n this.firstIntervalForEndPicker = moment(this.endDateEpoch).add(this.interval, \"m\").valueOf();\n } \n // start date !== end date\n else {\n this.firstIntervalForStartPicker = moment(this.startDateEpoch).startOf(\"d\").valueOf();\n this.firstIntervalForEndPicker = moment(this.startDateEpoch).startOf(\"d\").valueOf();\n }\n\n }\n\n if(this.givenStartTime)\n this.firstIntervalForStartPicker = this.givenStartTime;\n \n if(this.givenEndTime)\n this.firstIntervalForEndPicker = this.givenEndTime;\n \n this.startTime = {\n valid: true,\n time: moment(this.firstIntervalForStartPicker).format(this.timeFormat),\n epoch: moment(this.firstIntervalForStartPicker).valueOf()\n };\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat),\n epoch: moment(this.firstIntervalForEndPicker).valueOf()\n };\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n this.rangeValidity = true;\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n if (this.startDate === this.endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`)\n .add(offset, \"m\")\n .valueOf();\n\n // if the first interval == 12:00am, set it as 11:59pm\n const intervalAsString = moment(this.firstIntervalForEndPicker).format(this.timeFormat);\n const endOfDayAsString = moment(moment(`${this.startDate}`, `DD-MM-YYYY ${this.timeFormat}`).endOf(\"d\").add(1, \"m\")).format(this.timeFormat);\n if (intervalAsString === endOfDayAsString) {\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).endOf(\"d\").valueOf();\n }\n\n } else {\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) &&\n this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n this.triggerChange = !this.triggerChange;\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n\n const timeMoment = moment(`${moment(date).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);\n let flag: boolean = false;\n\n // if the first interval is set to the start of the day\n // then we don't check its validity against the current time\n if ((this.givenStartTime && this.givenEndTime) || (this.startDate !== this.endDate && this.startDate !== this.currDate)) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timeMoment.diff(moment(), \"m\") >= 0 ? true : false;\n }\n\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation(validity: boolean) {\n if (validity && this.startDate === this.endDate) {\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["moment","EventEmitter","moment.tz","Component","ChangeDetectorRef","Input","Output","NgModule","CommonModule","FormsModule","TimePickerModule"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("moment-timezone"),require("@angular/common"),require("@angular/forms"),require("mis-crystal-design-system/timepicker")):"function"==typeof define&&define.amd?define("mis-crystal-design-system/timerangepicker",["exports","@angular/core","moment-timezone","@angular/common","@angular/forms","mis-crystal-design-system/timepicker"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self)["mis-crystal-design-system"]=t["mis-crystal-design-system"]||{},t["mis-crystal-design-system"].timerangepicker={}),t.ng.core,t.moment,t.ng.common,t.ng.forms,t["mis-crystal-design-system"].timepicker)}(this,(function(t,e,i,r,a,n){"use strict";function s(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach((function(i){if("default"!==i){var r=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,r.get?r:{enumerable:!0,get:function(){return t[i]}})}})),e.default=t,Object.freeze(e)}var m=s(i),o=function(){function t(t){this.cdr=t,this.inputWidth="100px",this.height="46px",this.timezone="Asia/Kolkata",this.startDateEpoch=m().tz(this.timezone).valueOf(),this.endDateEpoch=m().tz(this.timezone).valueOf(),this.clockFormat=12,this.interval=15,this.showTooltip=!0,this.direction="row",this.gap="1rem",this.timeRangeEmitter=new e.EventEmitter,this.firstIntervalForStartPicker=m().valueOf(),this.firstIntervalForEndPicker=m().valueOf(),this.rangeValidity=!0,this.triggerChange=!0}return t.prototype.ngOnInit=function(){},t.prototype.ngOnChanges=function(){this.timeFormat=12===this.clockFormat?"hh:mm a":"HH:mm",i.tz.setDefault(this.timezone),this.startDate=m(this.startDateEpoch).format("DD-MM-YYYY"),this.endDate=m(this.endDateEpoch).format("DD-MM-YYYY"),this.currDate=m().format("DD-MM-YYYY"),this.setFirstIntervals()},t.prototype.setFirstIntervals=function(){var t=m().minutes(),e=this.interval-t%this.interval;if(this.startDate===this.endDate){var i=m().valueOf();i>=m().endOf("d").subtract(15,"m").valueOf()?this.firstIntervalForStartPicker=i:this.firstIntervalForStartPicker=m().add(e,"m").valueOf(),this.startTime={valid:!0,time:m().add(e,"m").format(this.timeFormat),epoch:m().add(e,"m").valueOf()}}else this.firstIntervalForStartPicker=m(this.startDateEpoch).startOf("d").valueOf(),this.startTime={valid:!0,time:this.givenStartTime?m(this.givenStartTime).format(this.timeFormat):m(this.startDateEpoch).startOf("d").add(e,"m").format(this.timeFormat),epoch:this.givenStartTime?this.givenStartTime:m(this.startDateEpoch).startOf("d").add(e,"m").valueOf()};this.startDate===this.endDate?this.firstIntervalForEndPicker=m().add(e,"m").add(this.interval,"m").valueOf():this.firstIntervalForEndPicker=m().startOf("d").valueOf(),this.endTime={valid:!0,time:m(this.firstIntervalForEndPicker).format(this.timeFormat),epoch:this.firstIntervalForEndPicker}},t.prototype.emitTimeRange=function(t){this.timeRangeEmitter.emit(t)},t.prototype.startPickerHandler=function(t){if(this.startTime=t,this.rangeValidity=!0,this.startDate===this.endDate){var e=m(this.startTime.time,this.timeFormat).minutes(),i=this.interval-e%this.interval;this.firstIntervalForEndPicker=m(this.startDate+" "+this.startTime.time,"'DD-MM-YYYY' "+this.timeFormat).add(i,"m").valueOf(),m(this.firstIntervalForEndPicker).format(this.timeFormat)===m(m(""+this.startDate,"DD-MM-YYYY "+this.timeFormat).endOf("d").add(1,"m")).format(this.timeFormat)&&(this.firstIntervalForEndPicker=m(this.startDate+" "+this.startTime.time,"'DD-MM-YYYY' "+this.timeFormat).endOf("d").valueOf())}else{var r=this.checkTimeValidity(this.startTime.time.trim(),this.startDateEpoch)&&this.checkTimeValidity(this.endTime.time.trim(),this.endDateEpoch);this.rangeValidation(r),this.emitTimeRange({valid:r&&this.rangeValidity,startTime:this.startTime.time,endTime:this.endTime.time,startEpoch:m(this.startDate+" "+this.startTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf(),endEpoch:m(this.endDate+" "+this.endTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf()})}this.triggerChange=!this.triggerChange},t.prototype.endPickerHandler=function(t){this.endTime=t;var e=this.checkTimeValidity(this.startTime.time.trim(),this.startDateEpoch)&&this.checkTimeValidity(this.endTime.time.trim(),this.endDateEpoch);this.rangeValidation(e),this.emitTimeRange({valid:e&&this.rangeValidity,startTime:this.startTime.time,endTime:this.endTime.time,startEpoch:m(this.startDate+" "+this.startTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf(),endEpoch:m(this.endDate+" "+this.endTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf()})},t.prototype.checkTimeValidity=function(t,e){var i=12===this.clockFormat?/^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i:/^([01][0-9]|2[0-3]):[0-5][0-9]$/,r=m(m(e).format("DD-MM-YYYY")+" "+t,"'DD-MM-YYYY' "+this.timeFormat);return this.givenStartTime&&this.givenEndTime||this.startDate!==this.endDate&&this.startDate!==this.currDate?!!t.match(i):!!(t.match(i)&&r.diff(m(),"m")>=0)},t.prototype.rangeValidation=function(t){if(t&&this.startDate===this.endDate){var e=m(this.startTime.time,this.timeFormat),i=m(this.endTime.time,this.timeFormat);this.rangeValidity=i.diff(e,"m")>=1,this.cdr.detectChanges()}},t}();o.decorators=[{type:e.Component,args:[{selector:"mis-timerangepicker",template:'<div class="rangepicker-container" [ngStyle]="{\'flexDirection\': direction, \'gap\': gap}">\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="startDateEpoch"\n [firstInterval]="firstIntervalForStartPicker"\n (timeEmitter)="startPickerHandler($event)"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="inputWidth"\n [dropdownWidth]="dropdownWidth"\n [showTooltip]="showTooltip"\n [givenTime]="givenStartTime"\n ></mis-timepicker>\n <p *ngIf="direction === \'row\'">-</p>\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="endDateEpoch"\n [firstInterval]="firstIntervalForEndPicker"\n (timeEmitter)="endPickerHandler($event)"\n [rangeValidity]="rangeValidity"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="inputWidth"\n [dropdownWidth]="dropdownWidth"\n [showTooltip]="showTooltip"\n [givenTime]="givenEndTime"\n [triggerChange]="triggerChange"\n ></mis-timepicker>\n</div>\n',styles:[".rangepicker-container{display:flex;gap:1rem;align-items:center}p{margin:0;display:inline-flex;align-items:center}"]}]}],o.ctorParameters=function(){return[{type:e.ChangeDetectorRef}]},o.propDecorators={inputWidth:[{type:e.Input}],dropdownWidth:[{type:e.Input}],height:[{type:e.Input}],timezone:[{type:e.Input}],startDateEpoch:[{type:e.Input}],endDateEpoch:[{type:e.Input}],givenStartTime:[{type:e.Input}],givenEndTime:[{type:e.Input}],clockFormat:[{type:e.Input}],interval:[{type:e.Input}],showTooltip:[{type:e.Input}],direction:[{type:e.Input}],gap:[{type:e.Input}],timeRangeEmitter:[{type:e.Output}]};var h=function(){function t(){}return t.forRoot=function(){return{ngModule:t,providers:[]}},t}();h.decorators=[{type:e.NgModule,args:[{declarations:[o],imports:[r.CommonModule,a.FormsModule,n.TimePickerModule],exports:[o]}]}],t.TimeRangePickerComponent=o,t.TimeRangePickerModule=h,Object.defineProperty(t,"__esModule",{value:!0})}));
1
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@angular/core"),require("moment-timezone"),require("@angular/common"),require("@angular/forms"),require("mis-crystal-design-system/timepicker")):"function"==typeof define&&define.amd?define("mis-crystal-design-system/timerangepicker",["exports","@angular/core","moment-timezone","@angular/common","@angular/forms","mis-crystal-design-system/timepicker"],e):e(((t="undefined"!=typeof globalThis?globalThis:t||self)["mis-crystal-design-system"]=t["mis-crystal-design-system"]||{},t["mis-crystal-design-system"].timerangepicker={}),t.ng.core,t.moment,t.ng.common,t.ng.forms,t["mis-crystal-design-system"].timepicker)}(this,(function(t,e,i,r,a,n){"use strict";function s(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach((function(i){if("default"!==i){var r=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,r.get?r:{enumerable:!0,get:function(){return t[i]}})}})),e.default=t,Object.freeze(e)}var o=s(i),h=function(){function t(t){this.cdr=t,this.inputWidth="100px",this.height="46px",this.timezone="Asia/Kolkata",this.startDateEpoch=o().tz(this.timezone).valueOf(),this.endDateEpoch=o().tz(this.timezone).valueOf(),this.clockFormat=12,this.interval=15,this.showTooltip=!0,this.direction="row",this.gap="1rem",this.timeRangeEmitter=new e.EventEmitter,this.firstIntervalForStartPicker=o().valueOf(),this.firstIntervalForEndPicker=o().valueOf(),this.rangeValidity=!0,this.triggerChange=!0}return t.prototype.ngOnInit=function(){},t.prototype.ngOnChanges=function(){this.timeFormat=12===this.clockFormat?"hh:mm a":"HH:mm",i.tz.setDefault(this.timezone),this.startDate=o(this.startDateEpoch).format("DD-MM-YYYY"),this.endDate=o(this.endDateEpoch).format("DD-MM-YYYY"),this.currDate=o().format("DD-MM-YYYY"),this.setFirstIntervals()},t.prototype.setFirstIntervals=function(){var t=o().minutes(),e=this.interval-t%this.interval;if(this.startDate===this.currDate){var i=o(this.startDateEpoch).valueOf();this.startDate===this.endDate?i>=o(this.startDateEpoch).endOf("d").subtract(this.interval,"m").valueOf()?(this.firstIntervalForStartPicker=i,this.firstIntervalForEndPicker=o(this.endDateEpoch).endOf("d").valueOf()):(this.firstIntervalForStartPicker=o().add(e,"m").valueOf(),this.firstIntervalForEndPicker=o().add(e,"m").add(this.interval,"m").valueOf()):i>=o(this.startDateEpoch).endOf("d").subtract(this.interval,"m").valueOf()?(this.firstIntervalForStartPicker=i,this.firstIntervalForEndPicker=o(this.endDateEpoch).endOf("d").valueOf()):(this.firstIntervalForStartPicker=o().add(e,"m").valueOf(),this.firstIntervalForEndPicker=o(this.endDateEpoch).valueOf())}else this.startDate===this.endDate?(this.firstIntervalForStartPicker=o(this.startDateEpoch).startOf("d").valueOf(),this.firstIntervalForEndPicker=o(this.endDateEpoch).add(this.interval,"m").valueOf()):(this.firstIntervalForStartPicker=o(this.startDateEpoch).startOf("d").valueOf(),this.firstIntervalForEndPicker=o(this.startDateEpoch).startOf("d").valueOf());this.givenStartTime&&(this.firstIntervalForStartPicker=this.givenStartTime),this.givenEndTime&&(this.firstIntervalForEndPicker=this.givenEndTime),this.startTime={valid:!0,time:o(this.firstIntervalForStartPicker).format(this.timeFormat),epoch:o(this.firstIntervalForStartPicker).valueOf()},this.endTime={valid:!0,time:o(this.firstIntervalForEndPicker).format(this.timeFormat),epoch:o(this.firstIntervalForEndPicker).valueOf()}},t.prototype.emitTimeRange=function(t){this.timeRangeEmitter.emit(t)},t.prototype.startPickerHandler=function(t){if(this.startTime=t,this.rangeValidity=!0,this.startDate===this.endDate){var e=o(this.startTime.time,this.timeFormat).minutes(),i=this.interval-e%this.interval;this.firstIntervalForEndPicker=o(this.startDate+" "+this.startTime.time,"'DD-MM-YYYY' "+this.timeFormat).add(i,"m").valueOf(),o(this.firstIntervalForEndPicker).format(this.timeFormat)===o(o(""+this.startDate,"DD-MM-YYYY "+this.timeFormat).endOf("d").add(1,"m")).format(this.timeFormat)&&(this.firstIntervalForEndPicker=o(this.startDate+" "+this.startTime.time,"'DD-MM-YYYY' "+this.timeFormat).endOf("d").valueOf())}else{var r=this.checkTimeValidity(this.startTime.time.trim(),this.startDateEpoch)&&this.checkTimeValidity(this.endTime.time.trim(),this.endDateEpoch);this.rangeValidation(r),this.emitTimeRange({valid:r&&this.rangeValidity,startTime:this.startTime.time,endTime:this.endTime.time,startEpoch:o(this.startDate+" "+this.startTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf(),endEpoch:o(this.endDate+" "+this.endTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf()})}this.triggerChange=!this.triggerChange},t.prototype.endPickerHandler=function(t){this.endTime=t;var e=this.checkTimeValidity(this.startTime.time.trim(),this.startDateEpoch)&&this.checkTimeValidity(this.endTime.time.trim(),this.endDateEpoch);this.rangeValidation(e),this.emitTimeRange({valid:e&&this.rangeValidity,startTime:this.startTime.time,endTime:this.endTime.time,startEpoch:o(this.startDate+" "+this.startTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf(),endEpoch:o(this.endDate+" "+this.endTime.time,"DD-MM-YYYY "+this.timeFormat).valueOf()})},t.prototype.checkTimeValidity=function(t,e){var i=12===this.clockFormat?/^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i:/^([01][0-9]|2[0-3]):[0-5][0-9]$/,r=o(o(e).format("DD-MM-YYYY")+" "+t,"'DD-MM-YYYY' "+this.timeFormat);return this.givenStartTime&&this.givenEndTime||this.startDate!==this.endDate&&this.startDate!==this.currDate?!!t.match(i):!!(t.match(i)&&r.diff(o(),"m")>=0)},t.prototype.rangeValidation=function(t){if(t&&this.startDate===this.endDate){var e=o(this.startTime.time,this.timeFormat),i=o(this.endTime.time,this.timeFormat);this.rangeValidity=i.diff(e,"m")>=1,this.cdr.detectChanges()}},t}();h.decorators=[{type:e.Component,args:[{selector:"mis-timerangepicker",template:'<div class="rangepicker-container" [ngStyle]="{\'flexDirection\': direction, \'gap\': gap}">\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="startDateEpoch"\n [firstInterval]="firstIntervalForStartPicker"\n (timeEmitter)="startPickerHandler($event)"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="inputWidth"\n [dropdownWidth]="dropdownWidth"\n [showTooltip]="showTooltip"\n [givenTime]="givenStartTime"\n ></mis-timepicker>\n <p *ngIf="direction === \'row\'">-</p>\n <mis-timepicker\n [clockFormat]="clockFormat"\n [interval]="interval"\n [dateAsEpoch]="endDateEpoch"\n [firstInterval]="firstIntervalForEndPicker"\n (timeEmitter)="endPickerHandler($event)"\n [rangeValidity]="rangeValidity"\n [timezone]="timezone"\n [height]="height"\n [inputWidth]="inputWidth"\n [dropdownWidth]="dropdownWidth"\n [showTooltip]="showTooltip"\n [givenTime]="givenEndTime"\n [triggerChange]="triggerChange"\n ></mis-timepicker>\n</div>\n',styles:[".rangepicker-container{display:flex;gap:1rem;align-items:center}p{margin:0;display:inline-flex;align-items:center}"]}]}],h.ctorParameters=function(){return[{type:e.ChangeDetectorRef}]},h.propDecorators={inputWidth:[{type:e.Input}],dropdownWidth:[{type:e.Input}],height:[{type:e.Input}],timezone:[{type:e.Input}],startDateEpoch:[{type:e.Input}],endDateEpoch:[{type:e.Input}],givenStartTime:[{type:e.Input}],givenEndTime:[{type:e.Input}],clockFormat:[{type:e.Input}],interval:[{type:e.Input}],showTooltip:[{type:e.Input}],direction:[{type:e.Input}],gap:[{type:e.Input}],timeRangeEmitter:[{type:e.Output}]};var m=function(){function t(){}return t.forRoot=function(){return{ngModule:t,providers:[]}},t}();m.decorators=[{type:e.NgModule,args:[{declarations:[h],imports:[r.CommonModule,a.FormsModule,n.TimePickerModule],exports:[h]}]}],t.TimeRangePickerComponent=h,t.TimeRangePickerModule=m,Object.defineProperty(t,"__esModule",{value:!0})}));
2
2
  //# sourceMappingURL=mis-crystal-design-system-timerangepicker.umd.min.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts"],"names":["TimeRangePickerComponent","cdr","this","inputWidth","height","timezone","startDateEpoch","moment","tz","valueOf","endDateEpoch","clockFormat","interval","showTooltip","direction","gap","timeRangeEmitter","EventEmitter","firstIntervalForStartPicker","firstIntervalForEndPicker","rangeValidity","triggerChange","prototype","ngOnInit","ngOnChanges","timeFormat","moment.tz","setDefault","startDate","format","endDate","currDate","setFirstIntervals","minutes","offset","currentTime","endOf","subtract","add","startTime","valid","time","epoch","startOf","givenStartTime","endTime","emitTimeRange","data","emit","startPickerHandler","validity","checkTimeValidity","trim","rangeValidation","startEpoch","endEpoch","endPickerHandler","date","RE","timeMoment","givenEndTime","match","diff","startMoment","endMoment","detectChanges","Component","args","selector","template","ChangeDetectorRef","Input","Output","TimeRangePickerModule","forRoot","ngModule","providers","NgModule","declarations","imports","CommonModule","FormsModule","TimePickerModule","exports"],"mappings":"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","sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime, TDirection } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth: string = \"100px\";\n @Input() dropdownWidth?: string;\n @Input() height: string = \"46px\";\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() givenStartTime: number;\n @Input() givenEndTime: number;\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Input() showTooltip: boolean = true;\n @Input() direction: TDirection = 'row';\n @Input() gap: string = '1rem';\n\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n startDate!: string;\n endDate!: string;\n currDate!: string;\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n triggerChange: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n moment.tz.setDefault(this.timezone);\n this.startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n this.endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n this.currDate = moment().format(\"DD-MM-YYYY\");\n this.setFirstIntervals();\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // first interval for the start picker will be the one closest to the current time\n // if the start date is equal to the curr date\n if (this.startDate === this.endDate) {\n const currentTime = moment().valueOf();\n\n // if current time >= 11:45 the start picker will show\n // current time instead of next closest interval\n if ( currentTime >= moment().endOf(\"d\").subtract(15, \"m\").valueOf()){\n this.firstIntervalForStartPicker = currentTime;\n } else {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n }\n this.startTime = {\n valid: true,\n time: moment().add(offset, \"m\").format(this.timeFormat),\n epoch: moment().add(offset, \"m\").valueOf()\n };\n } else {\n this.firstIntervalForStartPicker = moment(this.startDateEpoch).startOf(\"d\").valueOf();\n this.startTime = {\n valid: true,\n time: this.givenStartTime ? moment(this.givenStartTime).format(this.timeFormat) : moment(this.startDateEpoch).startOf('d').add(offset, \"m\").format(this.timeFormat),\n epoch: this.givenStartTime ? this.givenStartTime : moment(this.startDateEpoch).startOf('d').add(offset, \"m\").valueOf()\n };\n }\n\n // for the end picker if the startDate and the endDate is same\n // the first interval is set one interval ahead of the first interval for start picker\n // else if the dates are different we set it to the start of the day\n if (this.startDate === this.endDate) {\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n } else {\n this.firstIntervalForEndPicker = moment().startOf(\"d\").valueOf();\n }\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat),\n epoch: this.firstIntervalForEndPicker\n };\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n this.rangeValidity = true;\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n if (this.startDate === this.endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`)\n .add(offset, \"m\")\n .valueOf();\n\n // if the first interval == 12:00am, set it as 11:59pm\n const intervalAsString = moment(this.firstIntervalForEndPicker).format(this.timeFormat);\n const endOfDayAsString = moment(moment(`${this.startDate}`, `DD-MM-YYYY ${this.timeFormat}`).endOf(\"d\").add(1, \"m\")).format(this.timeFormat);\n if (intervalAsString === endOfDayAsString) {\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).endOf(\"d\").valueOf();\n }\n\n } else {\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) &&\n this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n this.triggerChange = !this.triggerChange;\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n\n const timeMoment = moment(`${moment(date).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);\n let flag: boolean = false;\n\n // if the first interval is set to the start of the day\n // then we don't check its validity against the current time\n if ((this.givenStartTime && this.givenEndTime) || (this.startDate !== this.endDate && this.startDate !== this.currDate)) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timeMoment.diff(moment(), \"m\") >= 0 ? true : false;\n }\n\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation(validity: boolean) {\n if (validity && this.startDate === this.endDate) {\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}"]}
1
+ {"version":3,"sources":["../../../projects/mis-components/timerangepicker/timerangepicker.component.ts","../../../projects/mis-components/timerangepicker/timerangepicker.module.ts"],"names":["TimeRangePickerComponent","cdr","this","inputWidth","height","timezone","startDateEpoch","moment","tz","valueOf","endDateEpoch","clockFormat","interval","showTooltip","direction","gap","timeRangeEmitter","EventEmitter","firstIntervalForStartPicker","firstIntervalForEndPicker","rangeValidity","triggerChange","prototype","ngOnInit","ngOnChanges","timeFormat","moment.tz","setDefault","startDate","format","endDate","currDate","setFirstIntervals","minutes","offset","currentTime","endOf","subtract","add","startOf","givenStartTime","givenEndTime","startTime","valid","time","epoch","endTime","emitTimeRange","data","emit","startPickerHandler","validity","checkTimeValidity","trim","rangeValidation","startEpoch","endEpoch","endPickerHandler","date","RE","timeMoment","match","diff","startMoment","endMoment","detectChanges","Component","args","selector","template","ChangeDetectorRef","Input","Output","TimeRangePickerModule","forRoot","ngModule","providers","NgModule","declarations","imports","CommonModule","FormsModule","TimePickerModule","exports"],"mappings":"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","sourcesContent":["import { Component, Input, ChangeDetectorRef, Output, EventEmitter } from \"@angular/core\";\nimport * as moment from \"moment-timezone\";\nimport { ITimeRange, ITime, TDirection } from \"./timerange.namespace\";\n\n@Component({\n selector: \"mis-timerangepicker\",\n templateUrl: \"./timerangepicker.component.html\",\n styleUrls: [\"./timerangepicker.component.scss\"]\n})\nexport class TimeRangePickerComponent {\n @Input() inputWidth: string = \"100px\";\n @Input() dropdownWidth?: string;\n @Input() height: string = \"46px\";\n @Input() timezone: string = \"Asia/Kolkata\";\n @Input() startDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() endDateEpoch: number = moment().tz(this.timezone).valueOf();\n @Input() givenStartTime: number;\n @Input() givenEndTime: number;\n @Input() clockFormat: number = 12;\n @Input() interval: number = 15;\n @Input() showTooltip: boolean = true;\n @Input() direction: TDirection = 'row';\n @Input() gap: string = '1rem';\n\n @Output() timeRangeEmitter = new EventEmitter<ITimeRange>();\n\n startDate!: string;\n endDate!: string;\n currDate!: string;\n timeFormat!: string;\n firstIntervalForStartPicker: number = moment().valueOf();\n firstIntervalForEndPicker: number = moment().valueOf();\n startTime!: ITime;\n endTime!: ITime;\n rangeValidity: boolean = true;\n triggerChange: boolean = true;\n\n constructor(private cdr: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n ngOnChanges() {\n this.timeFormat = this.clockFormat === 12 ? \"hh:mm a\" : \"HH:mm\";\n moment.tz.setDefault(this.timezone);\n this.startDate = moment(this.startDateEpoch).format(\"DD-MM-YYYY\");\n this.endDate = moment(this.endDateEpoch).format(\"DD-MM-YYYY\");\n this.currDate = moment().format(\"DD-MM-YYYY\");\n this.setFirstIntervals();\n }\n\n // calculate the first interval of the picker\n setFirstIntervals(): void {\n const minutes = moment().minutes();\n const offset = this.interval - (minutes % this.interval);\n\n // start date, 22 MAY === current date, 22 MAY\n if( this.startDate === this.currDate ){\n const currentTime = moment(this.startDateEpoch).valueOf();\n\n // start date, 22 MAY === current date, 22 MAY === end date, 22 MAY\n if(this.startDate === this.endDate){\n\n // current time is in last interval\n if( currentTime >= moment(this.startDateEpoch).endOf(\"d\").subtract(this.interval,\"m\").valueOf()){\n this.firstIntervalForStartPicker = currentTime;\n this.firstIntervalForEndPicker = moment(this.endDateEpoch).endOf(\"d\").valueOf();\n }\n // current time isn't in last interval\n else {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.firstIntervalForEndPicker = moment().add(offset, \"m\").add(this.interval, \"m\").valueOf();\n }\n } \n // start date, 22 MAY === current date, 22 MAY !== end date, 30 MAY\n else {\n // current time is in last interval\n if( currentTime >= moment(this.startDateEpoch).endOf(\"d\").subtract(this.interval,\"m\").valueOf()){\n this.firstIntervalForStartPicker = currentTime;\n this.firstIntervalForEndPicker = moment(this.endDateEpoch).endOf(\"d\").valueOf();\n }\n // current time isn't in last interval\n else {\n this.firstIntervalForStartPicker = moment().add(offset, \"m\").valueOf();\n this.firstIntervalForEndPicker = moment(this.endDateEpoch).valueOf();\n }\n }\n }\n // start date, 30 MAY !== current date, 22 MAY\n else {\n // start date === end Date\n if( this.startDate === this.endDate){\n this.firstIntervalForStartPicker = moment(this.startDateEpoch).startOf(\"d\").valueOf();\n this.firstIntervalForEndPicker = moment(this.endDateEpoch).add(this.interval, \"m\").valueOf();\n } \n // start date !== end date\n else {\n this.firstIntervalForStartPicker = moment(this.startDateEpoch).startOf(\"d\").valueOf();\n this.firstIntervalForEndPicker = moment(this.startDateEpoch).startOf(\"d\").valueOf();\n }\n\n }\n\n if(this.givenStartTime)\n this.firstIntervalForStartPicker = this.givenStartTime;\n \n if(this.givenEndTime)\n this.firstIntervalForEndPicker = this.givenEndTime;\n \n this.startTime = {\n valid: true,\n time: moment(this.firstIntervalForStartPicker).format(this.timeFormat),\n epoch: moment(this.firstIntervalForStartPicker).valueOf()\n };\n\n this.endTime = {\n valid: true,\n time: moment(this.firstIntervalForEndPicker).format(this.timeFormat),\n epoch: moment(this.firstIntervalForEndPicker).valueOf()\n };\n }\n\n emitTimeRange(data: ITimeRange): void {\n this.timeRangeEmitter.emit(data);\n }\n\n //handlers catch the emitted values and run validation\n startPickerHandler(time: ITime): void {\n this.startTime = time;\n this.rangeValidity = true;\n // if the start time changes and the start date is the same as the end date\n // and the start time >= end time\n // update the first interval of end picker according to the time set in start picker\n if (this.startDate === this.endDate) {\n let minutes = moment(this.startTime.time, this.timeFormat).minutes();\n let offset = this.interval - (minutes % this.interval);\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`)\n .add(offset, \"m\")\n .valueOf();\n\n // if the first interval == 12:00am, set it as 11:59pm\n const intervalAsString = moment(this.firstIntervalForEndPicker).format(this.timeFormat);\n const endOfDayAsString = moment(moment(`${this.startDate}`, `DD-MM-YYYY ${this.timeFormat}`).endOf(\"d\").add(1, \"m\")).format(this.timeFormat);\n if (intervalAsString === endOfDayAsString) {\n this.firstIntervalForEndPicker = moment(`${this.startDate} ${this.startTime.time}`, `'DD-MM-YYYY' ${this.timeFormat}`).endOf(\"d\").valueOf();\n }\n\n } else {\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) &&\n this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n this.triggerChange = !this.triggerChange;\n }\n\n endPickerHandler(time: ITime): void {\n this.endTime = time;\n\n const validity =\n this.checkTimeValidity(this.startTime.time.trim(), this.startDateEpoch) && this.checkTimeValidity(this.endTime.time.trim(), this.endDateEpoch);\n\n this.rangeValidation(validity);\n this.emitTimeRange({\n valid: validity && this.rangeValidity,\n startTime: this.startTime.time,\n endTime: this.endTime.time,\n startEpoch: moment(`${this.startDate} ${this.startTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf(),\n endEpoch: moment(`${this.endDate} ${this.endTime.time}`, `DD-MM-YYYY ${this.timeFormat}`).valueOf()\n });\n }\n\n checkTimeValidity(time: string, date: number): boolean {\n const RE12 = /^(([0][1-9]|1[0-2]):([0-5][0-9])( )?(am|pm|AM|PM))$/i;\n const RE24 = /^([01][0-9]|2[0-3]):[0-5][0-9]$/;\n const RE = this.clockFormat === 12 ? RE12 : RE24;\n\n const timeMoment = moment(`${moment(date).format(\"DD-MM-YYYY\")} ${time}`, `'DD-MM-YYYY' ${this.timeFormat}`);\n let flag: boolean = false;\n\n // if the first interval is set to the start of the day\n // then we don't check its validity against the current time\n if ((this.givenStartTime && this.givenEndTime) || (this.startDate !== this.endDate && this.startDate !== this.currDate)) {\n flag = time.match(RE) ? true : false;\n } else {\n flag = time.match(RE) && timeMoment.diff(moment(), \"m\") >= 0 ? true : false;\n }\n\n return flag;\n }\n\n // validates end picker's input according to the start picker's input\n rangeValidation(validity: boolean) {\n if (validity && this.startDate === this.endDate) {\n const startMoment = moment(this.startTime.time, this.timeFormat);\n const endMoment = moment(this.endTime.time, this.timeFormat);\n this.rangeValidity = endMoment.diff(startMoment, \"m\") >= 1 ? true : false;\n this.cdr.detectChanges();\n }\n }\n}\n","import { NgModule, ModuleWithProviders } from \"@angular/core\";\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { TimeRangePickerComponent } from \"./timerangepicker.component\";\nimport { TimePickerModule } from \"mis-crystal-design-system/timepicker\";\n\n@NgModule({\n declarations: [TimeRangePickerComponent],\n imports: [CommonModule, FormsModule, TimePickerModule],\n exports: [TimeRangePickerComponent]\n})\nexport class TimeRangePickerModule {\n static forRoot(): ModuleWithProviders<TimeRangePickerModule> {\n return { ngModule: TimeRangePickerModule, providers: [] };\n }\n}"]}
@@ -160,7 +160,7 @@ export class TimePickerComponent {
160
160
  }
161
161
  roundedEpoch = offset >= this.interval / 2 ? (moment(chosenTimeEpoch).subtract(this.interval - offset, "m")).valueOf() : (moment(chosenTimeEpoch).add(offset, "m")).valueOf();
162
162
  // finding the index of element that needs to be highlighted
163
- if (moment(chosenTimeEpoch).format(this.timeFormat) > moment(this.dateAsEpoch).endOf("d").subtract(this.interval, "m").format(this.timeFormat)) {
163
+ if (chosenTimeEpoch > moment(this.dateAsEpoch).endOf("d").subtract(this.interval, "m").valueOf()) {
164
164
  this.isHighlighted = this.timeIntervals.length - 1;
165
165
  }
166
166
  else {
@@ -245,4 +245,4 @@ TimePickerComponent.propDecorators = {
245
245
  tooltipDirective: [{ type: ViewChild, args: [ToolTipDirective,] }],
246
246
  timeIntervalRefs: [{ type: ViewChildren, args: ["timeInterval",] }]
247
247
  };
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy90aW1lcGlja2VyL3RpbWVwaWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQVFyRSxNQUFNLE9BQU8sbUJBQW1CO0lBMEM5QjtRQXZDQSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0Isa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0IsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDckIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFHekIsYUFBUSxHQUFXLGNBQWMsQ0FBQztRQUNsQyxXQUFNLEdBQVcsYUFBYSxDQUFDO1FBQy9CLGVBQVUsR0FBVyxPQUFPLENBQUM7UUFFN0IsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixnQkFBVyxHQUFXLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXpDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBQ3JDLGtCQUFhLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUdqQyxrQkFBYSxHQUFZLElBQUksQ0FB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QUFLO3lCQUNMLEtBQUs7NEJBQ0wsS0FBSzt1QkFDTCxLQUFLOzBCQUNMLEtBQUs7NEJBQ0wsS0FBSzs0QkFDTCxLQUFLOzBCQUNMLEtBQUs7d0JBRUwsS0FBSztzQkFDTCxLQUFLOzRCQUNMLEtBQUs7MEJBRUwsTUFBTTtvQkFDTixTQUFTLFNBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtrQ0FDbkMsU0FBUyxTQUFDLG1CQUFtQjsrQkFDN0IsU0FBUyxTQUFDLGdCQUFnQjsrQkFHMUIsWUFBWSxTQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gXCJtb21lbnQtdGltZXpvbmVcIjtcbmltcG9ydCB7IElUaW1lIH0gZnJvbSBcIi4vdGltZS5uYW1lc3BhY2VcIjtcbmltcG9ydCB7IFRpbWVwaWNrZXJEaXJlY3RpdmUgfSBmcm9tIFwiLi90aW1lcGlja2VyLmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgVG9vbFRpcERpcmVjdGl2ZSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL3Rvb2x0aXBcIjtcblxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWlzLXRpbWVwaWNrZXJcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi90aW1lcGlja2VyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi90aW1lcGlja2VyLmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIFRpbWVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgY3VyclRpbWUhOiBzdHJpbmc7XG4gIGNob3NlblRpbWU6IHN0cmluZztcbiAgb3BlblN0YXR1czogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0hpZ2hsaWdodGVkOiBudW1iZXIgPSAwO1xuICBpc0ludmFsaWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGltZUludGVydmFsczogc3RyaW5nW10gPSBbXTtcbiAgc2hvdWxkU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG4gIHVzZXJJbnB1dEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZ2l2ZW5UaW1lRmxhZzogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb2NrRm9ybWF0OiBudW1iZXIgPSAxMjtcbiAgdGltZUZvcm1hdCE6IHN0cmluZztcbiAgXG4gIEBJbnB1dCgpIHRpbWV6b25lOiBzdHJpbmcgPSBcIkFzaWEvS29sa2F0YVwiO1xuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9IFwibWF4LWNvbnRlbnRcIjtcbiAgQElucHV0KCkgaW5wdXRXaWR0aDogc3RyaW5nID0gXCIxMDBweFwiO1xuICBASW5wdXQoKSBkcm9wZG93bldpZHRoPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbnRlcnZhbDogbnVtYmVyID0gMTU7XG4gIEBJbnB1dCgpIGRhdGVBc0Vwb2NoOiBudW1iZXIgPSBtb21lbnQoKS52YWx1ZU9mKCk7XG4gIEBJbnB1dCgpIGZpcnN0SW50ZXJ2YWwhOiBudW1iZXI7XG4gIEBJbnB1dCgpIHJhbmdlVmFsaWRpdHk6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93VG9vbHRpcDogYm9vbGVhbiA9IHRydWU7XG4gIGRpc3BheVRvb2xUaXA6IGJvb2xlYW4gPSB0aGlzLnNob3dUb29sdGlwO1xuICBASW5wdXQoKSBnaXZlblRpbWU6IG51bWJlcjtcbiAgQElucHV0KCkgbWluVGltZT86IG51bWJlcjtcbiAgQElucHV0KCkgdHJpZ2dlckNoYW5nZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgQE91dHB1dCgpIHRpbWVFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxJVGltZT4oKTtcbiAgQFZpZXdDaGlsZChcImlucHV0XCIsIHsgc3RhdGljOiB0cnVlIH0pIGlucHV0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKFRpbWVwaWNrZXJEaXJlY3RpdmUpIHRpbWVwaWNrZXJEaXJlY3RpdmU6IFRpbWVwaWNrZXJEaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGQoVG9vbFRpcERpcmVjdGl2ZSkgdG9vbHRpcERpcmVjdGl2ZTogVG9vbFRpcERpcmVjdGl2ZTtcblxuICAvLyBnZXRzIGFsbCB0aGUgbGkgZWxlbWVudHMgZnJvbSB0aGUgZHJvcGRvd24gYW5kIHNjcm9sbHMgdG8gdGhlIGhpZ2hsaWdodGVkIGVsZW1lbnRcbiAgQFZpZXdDaGlsZHJlbihcInRpbWVJbnRlcnZhbFwiKSBzZXQgdGltZUludGVydmFsUmVmcyhpbnRlcnZhbHMpIHtcbiAgICBpbnRlcnZhbHMuZm9yRWFjaChpbnRlcnZhbCA9PiB7XG4gICAgICBpZiAoaW50ZXJ2YWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3RbMF0gPT09IFwiaGlnaGxpZ2h0XCIpIHtcbiAgICAgICAgY29uc3QgaGlnaGxpZ2h0ZWQgPSBpbnRlcnZhbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGhpZ2hsaWdodGVkLnNjcm9sbEludG9WaWV3KHsgYmxvY2s6IFwiY2VudGVyXCIgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKXt9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmKCF0aGlzLmdpdmVuVGltZSAmJiAhdGhpcy5taW5UaW1lKSB7XG4gICAgICB0aGlzLmNob3NlblRpbWUgPSBtb21lbnQodGhpcy5maXJzdEludGVydmFsKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KTtcbiAgICAgIGxldCBjaG9zZW5UaW1lTW9tZW50ID0gdGhpcy5nZXRNb21lbnQodGhpcy5jaG9zZW5UaW1lKTtcbiAgICAgIHRoaXMuZW1pdFRpbWUoe1xuICAgICAgICB2YWxpZDogIXRoaXMuaXNJbnZhbGlkLFxuICAgICAgICB0aW1lOiB0aGlzLmNob3NlblRpbWUsXG4gICAgICAgIGVwb2NoOiBjaG9zZW5UaW1lTW9tZW50LnZhbHVlT2YoKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy50aW1lRm9ybWF0ID0gdGhpcy5jbG9ja0Zvcm1hdCA9PT0gMTIgPyBcImhoOm1tIGFcIiA6IFwiSEg6bW1cIjtcbiAgICBtb21lbnQudHouc2V0RGVmYXVsdCh0aGlzLnRpbWV6b25lKTtcblxuICAgIGlmICh0aGlzLnRpbWVGb3JtYXQpIHtcbiAgICAgIGxldCBjaG9zZW5UaW1lTW9tZW50ID0gdGhpcy5nZXRNb21lbnQodGhpcy5jaG9zZW5UaW1lKTtcbiAgICBcbiAgICAgIC8vIGlmIHRoZSBmaXJzdCBpbnRlcnZhbCBpcyA+PSB0aGUgY2hvc2VuIHRpbWVcbiAgICAgIC8vIHRoZW4gb25seSB1cGRhdGUgdGhlIHZhbHVlIG9mIGNob3NlbiB0aW1lXG4gICAgICAvLyBlbHNlIGl0IHJlbWFpbnMgdGhlIHNhbWVcbiAgICAgIGlmICh0aGlzLmZpcnN0SW50ZXJ2YWwgPj0gY2hvc2VuVGltZU1vbWVudC52YWx1ZU9mKCkgJiYgdGhpcy5yYW5nZVZhbGlkaXR5ICYmICF0aGlzLnVzZXJJbnB1dEZsYWcpIHtcbiAgICAgICAgdGhpcy5jaG9zZW5UaW1lID0gbW9tZW50KHRoaXMuZmlyc3RJbnRlcnZhbCkuZm9ybWF0KHRoaXMudGltZUZvcm1hdCk7XG4gICAgICAgIGNob3NlblRpbWVNb21lbnQgPSB0aGlzLmdldE1vbWVudCh0aGlzLmNob3NlblRpbWUpXG4gICAgICB9XG5cbiAgICAgIGlmKCh0aGlzLmdpdmVuVGltZUZsYWcgJiYgdGhpcy5naXZlblRpbWUpIHx8IHRoaXMubWluVGltZSApIHtcbiAgICAgICAgdGhpcy5jaG9zZW5UaW1lID0gbW9tZW50KHRoaXMubWluVGltZSB8fCB0aGlzLmdpdmVuVGltZSkuZm9ybWF0KHRoaXMudGltZUZvcm1hdCk7XG4gICAgICB9XG4gICAgICBjaG9zZW5UaW1lTW9tZW50ID0gdGhpcy5nZXRNb21lbnQodGhpcy5jaG9zZW5UaW1lKVxuXG4gICAgICBpZiAoIXRoaXMudXNlcklucHV0RmxhZykgdGhpcy5wb3B1bGF0ZURyb3Bkb3duKCk7XG4gICAgICB0aGlzLnVzZXJJbnB1dEZsYWcgPSBmYWxzZTtcbiAgICAgIFxuICAgICAgaWYodGhpcy5jaG9zZW5UaW1lKSB7XG4gICAgICAgIHRoaXMuaXNJbnZhbGlkID0gIXRoaXMuY2hlY2tUaW1lVmFsaWRpdHkodGhpcy5jaG9zZW5UaW1lLnRyaW0oKSk7XG4gICAgICAgIHRoaXMuZW1pdFRpbWUoe1xuICAgICAgICAgIHZhbGlkOiAhdGhpcy5pc0ludmFsaWQsXG4gICAgICAgICAgdGltZTogdGhpcy5jaG9zZW5UaW1lLFxuICAgICAgICAgIGVwb2NoOiBjaG9zZW5UaW1lTW9tZW50LnZhbHVlT2YoKVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVDbG9zZXN0SW50ZXJ2YWwodGhpcy5jaG9zZW5UaW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbWl0VGltZShkYXRhOiBJVGltZSk6IHZvaWQge1xuICAgIHRoaXMudGltZUVtaXR0ZXIuZW1pdChkYXRhKTtcbiAgfVxuXG4gIC8vIGZ1bmN0aW9uIHRvIGdldCBtb21lbnQgb2JqZWN0IHdoZW4gdGltZSBpcyBnaXZlbiBpbiBzdHJpbmdcbiAgZ2V0TW9tZW50KHRpbWU6IHN0cmluZyl7XG4gICAgcmV0dXJuIG1vbWVudChgJHttb21lbnQodGhpcy5kYXRlQXNFcG9jaCkuZm9ybWF0KFwiREQtTU0tWVlZWVwiKX0gJHt0aW1lfWAsIGAnREQtTU0tWVlZWScgJHt0aGlzLnRpbWVGb3JtYXR9YClcbiAgfVxuXG4gIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5kaXNwYXlUb29sVGlwID0gZmFsc2U7XG4gICAgdGhpcy51c2VySW5wdXRGbGFnID0gZmFsc2U7XG4gICAgdGhpcy5vcGVuU3RhdHVzID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudGltZXBpY2tlckRpcmVjdGl2ZSkgdGhpcy50aW1lcGlja2VyRGlyZWN0aXZlLmRlc3Ryb3lPdmVybGF5KCk7XG4gIH1cblxuICAvLyB0b2dnbGUgdGltZXBpY2tlciBkcm9wZG93blxuICBvcGVuRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXlUb29sVGlwID0gdHJ1ZTtcbiAgICB0aGlzLm9wZW5TdGF0dXMgPSB0cnVlO1xuICB9XG5cbiAgY2hlY2tUaW1lVmFsaWRpdHkodGltZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgUkUxMiA9IC9eKChbMF1bMS05XXwxWzAtMl0pOihbMC01XVswLTldKSggKT8oYW18cG18QU18UE0pKSQvaTtcbiAgICBjb25zdCBSRTI0ID0gL14oWzAxXVswLTldfDJbMC0zXSk6WzAtNV1bMC05XSQvO1xuICAgIGNvbnN0IFJFID0gdGhpcy5jbG9ja0Zvcm1hdCA9PT0gMTIgPyBSRTEyIDogUkUyNDtcblxuICAgIGNvbnN0IHRpbWVNb21lbnQgPSB0aGlzLmdldE1vbWVudCh0aW1lKTtcbiAgICBsZXQgZmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gaWYgdGhlIGZpcnN0IGludGVydmFsIGlzIHNldCB0byB0aGUgc3RhcnQgb2YgdGhlIGRheVxuICAgIC8vIG9yIGEgdGltZSBpcyBhbHJlYWR5IHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgdG8gc2hvd1xuICAgIC8vIHRoZW4gd2UgZG9uJ3QgY2hlY2sgaXRzIHZhbGlkaXR5IGFnYWluc3QgdGhlIGN1cnJlbnQgdGltZVxuICAgIGlmIChcbiAgICAgIHRoaXMubWluVGltZSB8fCBcbiAgICAgIHRoaXMuZ2l2ZW5UaW1lIHx8XG4gICAgICAodGhpcy5maXJzdEludGVydmFsICYmXG4gICAgICBtb21lbnQodGhpcy5maXJzdEludGVydmFsKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KS52YWx1ZU9mKCkgPT09IG1vbWVudCgpLnN0YXJ0T2YoXCJkXCIpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpLnZhbHVlT2YoKSlcbiAgICApIHtcbiAgICAgIGZsYWcgPSB0aW1lLm1hdGNoKFJFKSA/IHRydWUgOiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhZyA9IHRpbWUubWF0Y2goUkUpICYmIHRpbWVNb21lbnQuZGlmZihtb21lbnQoKSwgXCJtXCIpID49IDAgPyB0cnVlOiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhZztcbiAgfVxuXG4gIC8vIHVwZGF0ZSBjaG9zZW4gdGltZSBhcyBzb29uIGFzIHRoZSB1c2VyIGNsaWNrcyBvbiBhbiBpbnRlcnZhbFxuICBvblRpbWVTZWxlY3QodGltZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pc0ludmFsaWQgPSAhdGhpcy5jaGVja1RpbWVWYWxpZGl0eSh0aW1lLnRyaW0oKSk7XG4gICAgaWYgKCF0aGlzLmlzSW52YWxpZCkge1xuICAgICAgdGhpcy5jaG9zZW5UaW1lID0gdGltZTtcbiAgICAgIHRoaXMuY2FsY3VsYXRlQ2xvc2VzdEludGVydmFsKHRoaXMuY2hvc2VuVGltZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGltZU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50KHRpbWUpO1xuICAgIHRoaXMuZW1pdFRpbWUoe1xuICAgICAgdmFsaWQ6ICF0aGlzLmlzSW52YWxpZCxcbiAgICAgIHRpbWU6IHRpbWUsXG4gICAgICBlcG9jaDogdGltZU1vbWVudC52YWx1ZU9mKCkgXG4gICAgfSk7XG4gICAgdGhpcy5vcGVuU3RhdHVzID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudGltZXBpY2tlckRpcmVjdGl2ZSkgdGhpcy50aW1lcGlja2VyRGlyZWN0aXZlLmRlc3Ryb3lPdmVybGF5KCk7XG4gIH1cblxuICAvLyBjaGVja3MgdmFsaWRpdHkgb2YgdGltZSBvbiBpbnB1dCBjaGFuZ2UgYW5kIGNhbGN1bGF0ZXMgdGhlIGNsb3Nlc3QgaW50ZXJ2YWxcbiAgb25UaW1lQ2hhbmdlKHRpbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaXNJbnZhbGlkID0gIXRoaXMuY2hlY2tUaW1lVmFsaWRpdHkodGltZS50cmltKCkpO1xuXG4gICAgaWYgKCF0aGlzLmlzSW52YWxpZCkge1xuICAgICAgdGhpcy51c2VySW5wdXRGbGFnID0gdHJ1ZTtcbiAgICAgIHRoaXMub3BlblN0YXR1cyA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMudGltZXBpY2tlckRpcmVjdGl2ZSkgdGhpcy50aW1lcGlja2VyRGlyZWN0aXZlLmRlc3Ryb3lPdmVybGF5KCk7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUNsb3Nlc3RJbnRlcnZhbCh0aW1lKTtcbiAgICB9XG4gICAgY29uc3QgdGltZU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50KHRpbWUpO1xuICAgIHRoaXMuZW1pdFRpbWUoe1xuICAgICAgdmFsaWQ6ICF0aGlzLmlzSW52YWxpZCxcbiAgICAgIHRpbWU6IHRpbWUsXG4gICAgICBlcG9jaDogdGltZU1vbWVudC52YWx1ZU9mKCkgXG4gICAgfSk7XG4gIH1cblxuICBjYWxjdWxhdGVDbG9zZXN0SW50ZXJ2YWwodGltZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IHJvdW5kZWRFcG9jaDogbnVtYmVyO1xuICAgIC8vIENvbnZlcnRpbmcgdGltZSBhbmQgZGF0ZSB0byBhIG1vbWVudCBvYmplY3QgXG4gICAgY29uc3QgY2hvc2VuRGF0ZSA9IG1vbWVudCh0aGlzLmRhdGVBc0Vwb2NoKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpOyAvLyAwNS0wMS0yMDI0XG4gICAgY29uc3QgcGFyc2VkVGltZVdpdGhEYXRlID0gbW9tZW50KGAke2Nob3NlbkRhdGV9ICR7dGltZX1gLCBgREQtTU0tWVlZWSAke3RoaXMudGltZUZvcm1hdH1gKTtcbiAgICAvLyBDb252ZXJ0aW5nIG1vbWVudCBvYmplY3QgdG8gZXBvY2hcbiAgICBjb25zdCBjaG9zZW5UaW1lRXBvY2ggPSBwYXJzZWRUaW1lV2l0aERhdGUudmFsdWVPZigpO1xuICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuaW50ZXJ2YWwgLSAobW9tZW50KGNob3NlblRpbWVFcG9jaCkubWludXRlcygpICUgdGhpcy5pbnRlcnZhbCk7XG5cbiAgICBpZiAodGhpcy5taW5UaW1lICYmICF0aGlzLmdpdmVuVGltZSkge1xuICAgICAgdGhpcy5pc0hpZ2hsaWdodGVkID0gMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcm91bmRlZEVwb2NoID0gb2Zmc2V0ID49IHRoaXMuaW50ZXJ2YWwgLyAyID8gKG1vbWVudChjaG9zZW5UaW1lRXBvY2gpLnN1YnRyYWN0KHRoaXMuaW50ZXJ2YWwgLSBvZmZzZXQsIFwibVwiKSkudmFsdWVPZigpIDogKG1vbWVudChjaG9zZW5UaW1lRXBvY2gpLmFkZCggb2Zmc2V0LCBcIm1cIikpLnZhbHVlT2YoKTtcblxuICAgIC8vIGZpbmRpbmcgdGhlIGluZGV4IG9mIGVsZW1lbnQgdGhhdCBuZWVkcyB0byBiZSBoaWdobGlnaHRlZFxuICAgIGlmIChtb21lbnQoY2hvc2VuVGltZUVwb2NoKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KSA+IG1vbWVudCh0aGlzLmRhdGVBc0Vwb2NoKS5lbmRPZihcImRcIikuc3VidHJhY3QodGhpcy5pbnRlcnZhbCwgXCJtXCIpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpKSB7XG4gICAgICB0aGlzLmlzSGlnaGxpZ2h0ZWQgPSB0aGlzLnRpbWVJbnRlcnZhbHMubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgcm91bmRlZEVwb2NoTW9tZW50ID0gbW9tZW50KHJvdW5kZWRFcG9jaCk7XG4gICAgICB0aGlzLmlzSGlnaGxpZ2h0ZWQgPSB0aGlzLnRpbWVJbnRlcnZhbHMuZmluZEluZGV4KGludGVydmFsID0+IHtcbiAgICAgICAgY29uc3QgaW50ZXJ2YWxPYmogPSBtb21lbnQoYCR7Y2hvc2VuRGF0ZX0gJHtpbnRlcnZhbH1gLCBgREQtTU0tWVlZWSAke3RoaXMudGltZUZvcm1hdH1gKTtcbiAgICAgICAgcmV0dXJuIGludGVydmFsT2JqLmlzU2FtZShyb3VuZGVkRXBvY2hNb21lbnQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICAvLyBwb3B1bGF0ZXMgdGhlIGRyb3Bkb3duIGFjY29yZGluZyB0byB0aGUgZmlyc3QgaW50ZXJ2YWwgcmVjZWl2ZWRcbiAgcG9wdWxhdGVEcm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVJbnRlcnZhbHMgPSBbXTtcblxuICAgIC8vIGlmIHBpY2tlciBpcyB1c2VkIGFzIGFuIGluZGl2aWR1YWwgY29tcG9uZW50XG4gICAgaWYgKCF0aGlzLmZpcnN0SW50ZXJ2YWwpIHtcbiAgICAgIC8vIGZpcnN0SW50ZXJ2YWwgaXMgaW5pdGlhbGlzZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IHRpbWVcbiAgICAgIC8vIGlmIHRoZSBkYXRlIGlzIHNhbWUgYXMgdGhlIGN1cnJlbnQgZGF0ZVxuICAgICAgaWYgKG1vbWVudCh0aGlzLmRhdGVBc0Vwb2NoKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpID09PSBtb21lbnQoKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpICYmICF0aGlzLm1pblRpbWUpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5pbnRlcnZhbCAtIChtb21lbnQoKS5taW51dGVzKCkgJSB0aGlzLmludGVydmFsKTtcbiAgICAgICAgdGhpcy5maXJzdEludGVydmFsID0gbW9tZW50KCkuYWRkKG9mZnNldCwgXCJtXCIpLnZhbHVlT2YoKTtcbiAgICAgIH1cbiAgICAgIC8vIGlmIG1pbmltdW0gdGltZSB0byBzaG93IGlzIHByb3ZpZGVkXG4gICAgICBlbHNlIGlmKHRoaXMubWluVGltZSl7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMuaW50ZXJ2YWwgLSAobW9tZW50KHRoaXMubWluVGltZSkubWludXRlcygpICUgdGhpcy5pbnRlcnZhbCk7XG4gICAgICAgIHRoaXMuZmlyc3RJbnRlcnZhbCA9IG1vbWVudCh0aGlzLm1pblRpbWUpLmFkZChvZmZzZXQsIFwibVwiKS52YWx1ZU9mKCk7XG4gICAgICB9XG4gICAgICAvLyBlbHNlIHRoZSBmaXJzdEludGVydmFsIGlzIGluaXRpYWxpc2VkIGFzIHN0YXJ0IG9mIGRheVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuZmlyc3RJbnRlcnZhbCA9IG1vbWVudCgpLnN0YXJ0T2YoXCJkXCIpLnZhbHVlT2YoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZih0aGlzLmdpdmVuVGltZSAmJiB0aGlzLmdpdmVuVGltZUZsYWcpe1xuICAgICAgdGhpcy5maXJzdEludGVydmFsID0gbW9tZW50KHRoaXMuZ2l2ZW5UaW1lKS5zdGFydE9mKCdkJykudmFsdWVPZigpO1xuICAgICAgdGhpcy5naXZlblRpbWVGbGFnID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZUFzU3RyaW5nID0gbW9tZW50KHRoaXMuZGF0ZUFzRXBvY2gpLmZvcm1hdCgnREQtTU0tWVlZWScpO1xuICAgIGNvbnN0IGludGVydmFsQXNTdHJpbmcgPSBtb21lbnQodGhpcy5maXJzdEludGVydmFsKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KTtcbiAgICBjb25zdCBzdGFydCA9IG1vbWVudChgJHtkYXRlQXNTdHJpbmd9ICR7aW50ZXJ2YWxBc1N0cmluZ31gLCBgREQtTU0tWVlZWSAke3RoaXMudGltZUZvcm1hdH1gKTtcbiAgICBjb25zdCBlbmQgPSBtb21lbnQoYCR7ZGF0ZUFzU3RyaW5nfWAsICdERC1NTS1ZWVlZJykuZW5kT2YoJ2QnKTtcblxuICAgIFxuICAgIHdoaWxlIChzdGFydC52YWx1ZU9mKCkgPCBlbmQudmFsdWVPZigpKSB7XG4gICAgICB0aGlzLnRpbWVJbnRlcnZhbHMucHVzaChzdGFydC5mb3JtYXQodGhpcy50aW1lRm9ybWF0KSk7XG4gICAgICBzdGFydC5hZGQodGhpcy5pbnRlcnZhbCwgXCJtXCIpO1xuICAgIH1cblxuICAgIC8vIGlmIHRoZSBzdGFydCB0aW1lIGlzIGVxdWFsIHRvIHRoZSBpbnRlcnZhbCBqdXN0IGJlZm9yZSBtaWRuaWdodFxuICAgIC8vIGFuZCB0aGUgc3RhcnQgZGF0ZSA9IGVuZCBkYXRlXG4gICAgLy8gcHVzaCAxMTo1OXBtIG9ubHlcbiAgICBpZiAodGhpcy50aW1lSW50ZXJ2YWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jaG9zZW5UaW1lID0gbW9tZW50KCkuZW5kT2YoXCJkXCIpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgdGhpcy50aW1lSW50ZXJ2YWxzLnB1c2gobW9tZW50KCkuZW5kT2YoXCJkXCIpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy50b29sdGlwRGlyZWN0aXZlKSB0aGlzLnRvb2x0aXBEaXJlY3RpdmUuaGlkZVRvb2xUaXAoKTtcbiAgfVxufVxuIl19
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy90aW1lcGlja2VyL3RpbWVwaWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUUxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQVFyRSxNQUFNLE9BQU8sbUJBQW1CO0lBMEM5QjtRQXZDQSxlQUFVLEdBQVksS0FBSyxDQUFDO1FBQzVCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0Isa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0IsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isa0JBQWEsR0FBWSxJQUFJLENBQUM7UUFDckIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFHekIsYUFBUSxHQUFXLGNBQWMsQ0FBQztRQUNsQyxXQUFNLEdBQVcsYUFBYSxDQUFDO1FBQy9CLGVBQVUsR0FBVyxPQUFPLENBQUM7UUFFN0IsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixnQkFBVyxHQUFXLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXpDLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBQzlCLGdCQUFXLEdBQVksSUFBSSxDQUFDO1FBQ3JDLGtCQUFhLEdBQVksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUdqQyxrQkFBYSxHQUFZLElBQUksQ0FB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MEJBQ0wsS0FBSzt3QkFFTCxLQUFLO3NCQUNMLEtBQUs7NEJBQ0wsS0FBSzswQkFFTCxNQUFNO29CQUNOLFNBQVMsU0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2tDQUNuQyxTQUFTLFNBQUMsbUJBQW1COytCQUM3QixTQUFTLFNBQUMsZ0JBQWdCOytCQUcxQixZQUFZLFNBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSBcIm1vbWVudC10aW1lem9uZVwiO1xuaW1wb3J0IHsgSVRpbWUgfSBmcm9tIFwiLi90aW1lLm5hbWVzcGFjZVwiO1xuaW1wb3J0IHsgVGltZXBpY2tlckRpcmVjdGl2ZSB9IGZyb20gXCIuL3RpbWVwaWNrZXIuZGlyZWN0aXZlXCI7XG5pbXBvcnQgeyBUb29sVGlwRGlyZWN0aXZlIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vdG9vbHRpcFwiO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdGltZXBpY2tlclwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL3RpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3RpbWVwaWNrZXIuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgVGltZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBjdXJyVGltZSE6IHN0cmluZztcbiAgY2hvc2VuVGltZTogc3RyaW5nO1xuICBvcGVuU3RhdHVzOiBib29sZWFuID0gZmFsc2U7XG4gIGlzSGlnaGxpZ2h0ZWQ6IG51bWJlciA9IDA7XG4gIGlzSW52YWxpZDogYm9vbGVhbiA9IGZhbHNlO1xuICB0aW1lSW50ZXJ2YWxzOiBzdHJpbmdbXSA9IFtdO1xuICBzaG91bGRTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdXNlcklucHV0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBnaXZlblRpbWVGbGFnOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgY2xvY2tGb3JtYXQ6IG51bWJlciA9IDEyO1xuICB0aW1lRm9ybWF0ITogc3RyaW5nO1xuICBcbiAgQElucHV0KCkgdGltZXpvbmU6IHN0cmluZyA9IFwiQXNpYS9Lb2xrYXRhXCI7XG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gXCJtYXgtY29udGVudFwiO1xuICBASW5wdXQoKSBpbnB1dFdpZHRoOiBzdHJpbmcgPSBcIjEwMHB4XCI7XG4gIEBJbnB1dCgpIGRyb3Bkb3duV2lkdGg/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGludGVydmFsOiBudW1iZXIgPSAxNTtcbiAgQElucHV0KCkgZGF0ZUFzRXBvY2g6IG51bWJlciA9IG1vbWVudCgpLnZhbHVlT2YoKTtcbiAgQElucHV0KCkgZmlyc3RJbnRlcnZhbCE6IG51bWJlcjtcbiAgQElucHV0KCkgcmFuZ2VWYWxpZGl0eTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dUb29sdGlwOiBib29sZWFuID0gdHJ1ZTtcbiAgZGlzcGF5VG9vbFRpcDogYm9vbGVhbiA9IHRoaXMuc2hvd1Rvb2x0aXA7XG4gIEBJbnB1dCgpIGdpdmVuVGltZTogbnVtYmVyO1xuICBASW5wdXQoKSBtaW5UaW1lPzogbnVtYmVyO1xuICBASW5wdXQoKSB0cmlnZ2VyQ2hhbmdlOiBib29sZWFuID0gdHJ1ZTtcblxuICBAT3V0cHV0KCkgdGltZUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElUaW1lPigpO1xuICBAVmlld0NoaWxkKFwiaW5wdXRcIiwgeyBzdGF0aWM6IHRydWUgfSkgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoVGltZXBpY2tlckRpcmVjdGl2ZSkgdGltZXBpY2tlckRpcmVjdGl2ZTogVGltZXBpY2tlckRpcmVjdGl2ZTtcbiAgQFZpZXdDaGlsZChUb29sVGlwRGlyZWN0aXZlKSB0b29sdGlwRGlyZWN0aXZlOiBUb29sVGlwRGlyZWN0aXZlO1xuXG4gIC8vIGdldHMgYWxsIHRoZSBsaSBlbGVtZW50cyBmcm9tIHRoZSBkcm9wZG93biBhbmQgc2Nyb2xscyB0byB0aGUgaGlnaGxpZ2h0ZWQgZWxlbWVudFxuICBAVmlld0NoaWxkcmVuKFwidGltZUludGVydmFsXCIpIHNldCB0aW1lSW50ZXJ2YWxSZWZzKGludGVydmFscykge1xuICAgIGludGVydmFscy5mb3JFYWNoKGludGVydmFsID0+IHtcbiAgICAgIGlmIChpbnRlcnZhbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdFswXSA9PT0gXCJoaWdobGlnaHRcIikge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRlZCA9IGludGVydmFsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gaGlnaGxpZ2h0ZWQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogXCJjZW50ZXJcIiB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcigpe31cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYoIXRoaXMuZ2l2ZW5UaW1lICYmICF0aGlzLm1pblRpbWUpIHtcbiAgICAgIHRoaXMuY2hvc2VuVGltZSA9IG1vbWVudCh0aGlzLmZpcnN0SW50ZXJ2YWwpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgICAgbGV0IGNob3NlblRpbWVNb21lbnQgPSB0aGlzLmdldE1vbWVudCh0aGlzLmNob3NlblRpbWUpO1xuICAgICAgdGhpcy5lbWl0VGltZSh7XG4gICAgICAgIHZhbGlkOiAhdGhpcy5pc0ludmFsaWQsXG4gICAgICAgIHRpbWU6IHRoaXMuY2hvc2VuVGltZSxcbiAgICAgICAgZXBvY2g6IGNob3NlblRpbWVNb21lbnQudmFsdWVPZigpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVGb3JtYXQgPSB0aGlzLmNsb2NrRm9ybWF0ID09PSAxMiA/IFwiaGg6bW0gYVwiIDogXCJISDptbVwiO1xuICAgIG1vbWVudC50ei5zZXREZWZhdWx0KHRoaXMudGltZXpvbmUpO1xuXG4gICAgaWYgKHRoaXMudGltZUZvcm1hdCkge1xuICAgICAgbGV0IGNob3NlblRpbWVNb21lbnQgPSB0aGlzLmdldE1vbWVudCh0aGlzLmNob3NlblRpbWUpO1xuICAgIFxuICAgICAgLy8gaWYgdGhlIGZpcnN0IGludGVydmFsIGlzID49IHRoZSBjaG9zZW4gdGltZVxuICAgICAgLy8gdGhlbiBvbmx5IHVwZGF0ZSB0aGUgdmFsdWUgb2YgY2hvc2VuIHRpbWVcbiAgICAgIC8vIGVsc2UgaXQgcmVtYWlucyB0aGUgc2FtZVxuICAgICAgaWYgKHRoaXMuZmlyc3RJbnRlcnZhbCA+PSBjaG9zZW5UaW1lTW9tZW50LnZhbHVlT2YoKSAmJiB0aGlzLnJhbmdlVmFsaWRpdHkgJiYgIXRoaXMudXNlcklucHV0RmxhZykge1xuICAgICAgICB0aGlzLmNob3NlblRpbWUgPSBtb21lbnQodGhpcy5maXJzdEludGVydmFsKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KTtcbiAgICAgICAgY2hvc2VuVGltZU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50KHRoaXMuY2hvc2VuVGltZSlcbiAgICAgIH1cblxuICAgICAgaWYoKHRoaXMuZ2l2ZW5UaW1lRmxhZyAmJiB0aGlzLmdpdmVuVGltZSkgfHwgdGhpcy5taW5UaW1lICkge1xuICAgICAgICB0aGlzLmNob3NlblRpbWUgPSBtb21lbnQodGhpcy5taW5UaW1lIHx8IHRoaXMuZ2l2ZW5UaW1lKS5mb3JtYXQodGhpcy50aW1lRm9ybWF0KTtcbiAgICAgIH1cbiAgICAgIGNob3NlblRpbWVNb21lbnQgPSB0aGlzLmdldE1vbWVudCh0aGlzLmNob3NlblRpbWUpXG5cbiAgICAgIGlmICghdGhpcy51c2VySW5wdXRGbGFnKSB0aGlzLnBvcHVsYXRlRHJvcGRvd24oKTtcbiAgICAgIHRoaXMudXNlcklucHV0RmxhZyA9IGZhbHNlO1xuICAgICAgXG4gICAgICBpZih0aGlzLmNob3NlblRpbWUpIHtcbiAgICAgICAgdGhpcy5pc0ludmFsaWQgPSAhdGhpcy5jaGVja1RpbWVWYWxpZGl0eSh0aGlzLmNob3NlblRpbWUudHJpbSgpKTtcbiAgICAgICAgdGhpcy5lbWl0VGltZSh7XG4gICAgICAgICAgdmFsaWQ6ICF0aGlzLmlzSW52YWxpZCxcbiAgICAgICAgICB0aW1lOiB0aGlzLmNob3NlblRpbWUsXG4gICAgICAgICAgZXBvY2g6IGNob3NlblRpbWVNb21lbnQudmFsdWVPZigpXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUNsb3Nlc3RJbnRlcnZhbCh0aGlzLmNob3NlblRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGVtaXRUaW1lKGRhdGE6IElUaW1lKTogdm9pZCB7XG4gICAgdGhpcy50aW1lRW1pdHRlci5lbWl0KGRhdGEpO1xuICB9XG5cbiAgLy8gZnVuY3Rpb24gdG8gZ2V0IG1vbWVudCBvYmplY3Qgd2hlbiB0aW1lIGlzIGdpdmVuIGluIHN0cmluZ1xuICBnZXRNb21lbnQodGltZTogc3RyaW5nKXtcbiAgICByZXR1cm4gbW9tZW50KGAke21vbWVudCh0aGlzLmRhdGVBc0Vwb2NoKS5mb3JtYXQoXCJERC1NTS1ZWVlZXCIpfSAke3RpbWV9YCwgYCdERC1NTS1ZWVlZJyAke3RoaXMudGltZUZvcm1hdH1gKVxuICB9XG5cbiAgY2xvc2VEcm9wZG93bigpIHtcbiAgICB0aGlzLmRpc3BheVRvb2xUaXAgPSBmYWxzZTtcbiAgICB0aGlzLnVzZXJJbnB1dEZsYWcgPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5TdGF0dXMgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50aW1lcGlja2VyRGlyZWN0aXZlKSB0aGlzLnRpbWVwaWNrZXJEaXJlY3RpdmUuZGVzdHJveU92ZXJsYXkoKTtcbiAgfVxuXG4gIC8vIHRvZ2dsZSB0aW1lcGlja2VyIGRyb3Bkb3duXG4gIG9wZW5Ecm9wZG93bigpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3BheVRvb2xUaXAgPSB0cnVlO1xuICAgIHRoaXMub3BlblN0YXR1cyA9IHRydWU7XG4gIH1cblxuICBjaGVja1RpbWVWYWxpZGl0eSh0aW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBSRTEyID0gL14oKFswXVsxLTldfDFbMC0yXSk6KFswLTVdWzAtOV0pKCApPyhhbXxwbXxBTXxQTSkpJC9pO1xuICAgIGNvbnN0IFJFMjQgPSAvXihbMDFdWzAtOV18MlswLTNdKTpbMC01XVswLTldJC87XG4gICAgY29uc3QgUkUgPSB0aGlzLmNsb2NrRm9ybWF0ID09PSAxMiA/IFJFMTIgOiBSRTI0O1xuXG4gICAgY29uc3QgdGltZU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50KHRpbWUpO1xuICAgIGxldCBmbGFnOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBpZiB0aGUgZmlyc3QgaW50ZXJ2YWwgaXMgc2V0IHRvIHRoZSBzdGFydCBvZiB0aGUgZGF5XG4gICAgLy8gb3IgYSB0aW1lIGlzIGFscmVhZHkgcHJvdmlkZWQgdG8gdGhlIGNvbXBvbmVudCB0byBzaG93XG4gICAgLy8gdGhlbiB3ZSBkb24ndCBjaGVjayBpdHMgdmFsaWRpdHkgYWdhaW5zdCB0aGUgY3VycmVudCB0aW1lXG4gICAgaWYgKFxuICAgICAgdGhpcy5taW5UaW1lIHx8IFxuICAgICAgdGhpcy5naXZlblRpbWUgfHxcbiAgICAgICh0aGlzLmZpcnN0SW50ZXJ2YWwgJiZcbiAgICAgIG1vbWVudCh0aGlzLmZpcnN0SW50ZXJ2YWwpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpLnZhbHVlT2YoKSA9PT0gbW9tZW50KCkuc3RhcnRPZihcImRcIikuZm9ybWF0KHRoaXMudGltZUZvcm1hdCkudmFsdWVPZigpKVxuICAgICkge1xuICAgICAgZmxhZyA9IHRpbWUubWF0Y2goUkUpID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICBmbGFnID0gdGltZS5tYXRjaChSRSkgJiYgdGltZU1vbWVudC5kaWZmKG1vbWVudCgpLCBcIm1cIikgPj0gMCA/IHRydWU6IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBmbGFnO1xuICB9XG5cbiAgLy8gdXBkYXRlIGNob3NlbiB0aW1lIGFzIHNvb24gYXMgdGhlIHVzZXIgY2xpY2tzIG9uIGFuIGludGVydmFsXG4gIG9uVGltZVNlbGVjdCh0aW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlzSW52YWxpZCA9ICF0aGlzLmNoZWNrVGltZVZhbGlkaXR5KHRpbWUudHJpbSgpKTtcbiAgICBpZiAoIXRoaXMuaXNJbnZhbGlkKSB7XG4gICAgICB0aGlzLmNob3NlblRpbWUgPSB0aW1lO1xuICAgICAgdGhpcy5jYWxjdWxhdGVDbG9zZXN0SW50ZXJ2YWwodGhpcy5jaG9zZW5UaW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lTW9tZW50ID0gdGhpcy5nZXRNb21lbnQodGltZSk7XG4gICAgdGhpcy5lbWl0VGltZSh7XG4gICAgICB2YWxpZDogIXRoaXMuaXNJbnZhbGlkLFxuICAgICAgdGltZTogdGltZSxcbiAgICAgIGVwb2NoOiB0aW1lTW9tZW50LnZhbHVlT2YoKSBcbiAgICB9KTtcbiAgICB0aGlzLm9wZW5TdGF0dXMgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50aW1lcGlja2VyRGlyZWN0aXZlKSB0aGlzLnRpbWVwaWNrZXJEaXJlY3RpdmUuZGVzdHJveU92ZXJsYXkoKTtcbiAgfVxuXG4gIC8vIGNoZWNrcyB2YWxpZGl0eSBvZiB0aW1lIG9uIGlucHV0IGNoYW5nZSBhbmQgY2FsY3VsYXRlcyB0aGUgY2xvc2VzdCBpbnRlcnZhbFxuICBvblRpbWVDaGFuZ2UodGltZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pc0ludmFsaWQgPSAhdGhpcy5jaGVja1RpbWVWYWxpZGl0eSh0aW1lLnRyaW0oKSk7XG5cbiAgICBpZiAoIXRoaXMuaXNJbnZhbGlkKSB7XG4gICAgICB0aGlzLnVzZXJJbnB1dEZsYWcgPSB0cnVlO1xuICAgICAgdGhpcy5vcGVuU3RhdHVzID0gZmFsc2U7XG4gICAgICBpZiAodGhpcy50aW1lcGlja2VyRGlyZWN0aXZlKSB0aGlzLnRpbWVwaWNrZXJEaXJlY3RpdmUuZGVzdHJveU92ZXJsYXkoKTtcbiAgICAgIHRoaXMuY2FsY3VsYXRlQ2xvc2VzdEludGVydmFsKHRpbWUpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lTW9tZW50ID0gdGhpcy5nZXRNb21lbnQodGltZSk7XG4gICAgdGhpcy5lbWl0VGltZSh7XG4gICAgICB2YWxpZDogIXRoaXMuaXNJbnZhbGlkLFxuICAgICAgdGltZTogdGltZSxcbiAgICAgIGVwb2NoOiB0aW1lTW9tZW50LnZhbHVlT2YoKSBcbiAgICB9KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZUNsb3Nlc3RJbnRlcnZhbCh0aW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsZXQgcm91bmRlZEVwb2NoOiBudW1iZXI7XG4gICAgLy8gQ29udmVydGluZyB0aW1lIGFuZCBkYXRlIHRvIGEgbW9tZW50IG9iamVjdCBcbiAgICBjb25zdCBjaG9zZW5EYXRlID0gbW9tZW50KHRoaXMuZGF0ZUFzRXBvY2gpLmZvcm1hdChcIkRELU1NLVlZWVlcIik7IC8vIDA1LTAxLTIwMjRcbiAgICBjb25zdCBwYXJzZWRUaW1lV2l0aERhdGUgPSBtb21lbnQoYCR7Y2hvc2VuRGF0ZX0gJHt0aW1lfWAsIGBERC1NTS1ZWVlZICR7dGhpcy50aW1lRm9ybWF0fWApO1xuICAgIC8vIENvbnZlcnRpbmcgbW9tZW50IG9iamVjdCB0byBlcG9jaFxuICAgIGNvbnN0IGNob3NlblRpbWVFcG9jaCA9IHBhcnNlZFRpbWVXaXRoRGF0ZS52YWx1ZU9mKCk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5pbnRlcnZhbCAtIChtb21lbnQoY2hvc2VuVGltZUVwb2NoKS5taW51dGVzKCkgJSB0aGlzLmludGVydmFsKTtcblxuICAgIGlmICh0aGlzLm1pblRpbWUgJiYgIXRoaXMuZ2l2ZW5UaW1lKSB7XG4gICAgICB0aGlzLmlzSGlnaGxpZ2h0ZWQgPSAwO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByb3VuZGVkRXBvY2ggPSBvZmZzZXQgPj0gdGhpcy5pbnRlcnZhbCAvIDIgPyAobW9tZW50KGNob3NlblRpbWVFcG9jaCkuc3VidHJhY3QodGhpcy5pbnRlcnZhbCAtIG9mZnNldCwgXCJtXCIpKS52YWx1ZU9mKCkgOiAobW9tZW50KGNob3NlblRpbWVFcG9jaCkuYWRkKCBvZmZzZXQsIFwibVwiKSkudmFsdWVPZigpO1xuXG4gICAgLy8gZmluZGluZyB0aGUgaW5kZXggb2YgZWxlbWVudCB0aGF0IG5lZWRzIHRvIGJlIGhpZ2hsaWdodGVkXG4gICAgaWYgKCBjaG9zZW5UaW1lRXBvY2ggPiBtb21lbnQodGhpcy5kYXRlQXNFcG9jaCkuZW5kT2YoXCJkXCIpLnN1YnRyYWN0KHRoaXMuaW50ZXJ2YWwsIFwibVwiKS52YWx1ZU9mKCkpIHtcbiAgICAgIHRoaXMuaXNIaWdobGlnaHRlZCA9IHRoaXMudGltZUludGVydmFscy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByb3VuZGVkRXBvY2hNb21lbnQgPSBtb21lbnQocm91bmRlZEVwb2NoKTtcbiAgICAgIHRoaXMuaXNIaWdobGlnaHRlZCA9IHRoaXMudGltZUludGVydmFscy5maW5kSW5kZXgoaW50ZXJ2YWwgPT4ge1xuICAgICAgICBjb25zdCBpbnRlcnZhbE9iaiA9IG1vbWVudChgJHtjaG9zZW5EYXRlfSAke2ludGVydmFsfWAsIGBERC1NTS1ZWVlZICR7dGhpcy50aW1lRm9ybWF0fWApO1xuICAgICAgICByZXR1cm4gaW50ZXJ2YWxPYmouaXNTYW1lKHJvdW5kZWRFcG9jaE1vbWVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIHBvcHVsYXRlcyB0aGUgZHJvcGRvd24gYWNjb3JkaW5nIHRvIHRoZSBmaXJzdCBpbnRlcnZhbCByZWNlaXZlZFxuICBwb3B1bGF0ZURyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMudGltZUludGVydmFscyA9IFtdO1xuXG4gICAgLy8gaWYgcGlja2VyIGlzIHVzZWQgYXMgYW4gaW5kaXZpZHVhbCBjb21wb25lbnRcbiAgICBpZiAoIXRoaXMuZmlyc3RJbnRlcnZhbCkge1xuICAgICAgLy8gZmlyc3RJbnRlcnZhbCBpcyBpbml0aWFsaXNlZCBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgdGltZVxuICAgICAgLy8gaWYgdGhlIGRhdGUgaXMgc2FtZSBhcyB0aGUgY3VycmVudCBkYXRlXG4gICAgICBpZiAobW9tZW50KHRoaXMuZGF0ZUFzRXBvY2gpLmZvcm1hdChcIkRELU1NLVlZWVlcIikgPT09IG1vbWVudCgpLmZvcm1hdChcIkRELU1NLVlZWVlcIikgJiYgIXRoaXMubWluVGltZSkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLmludGVydmFsIC0gKG1vbWVudCgpLm1pbnV0ZXMoKSAlIHRoaXMuaW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLmZpcnN0SW50ZXJ2YWwgPSBtb21lbnQoKS5hZGQob2Zmc2V0LCBcIm1cIikudmFsdWVPZigpO1xuICAgICAgfVxuICAgICAgLy8gaWYgbWluaW11bSB0aW1lIHRvIHNob3cgaXMgcHJvdmlkZWRcbiAgICAgIGVsc2UgaWYodGhpcy5taW5UaW1lKXtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy5pbnRlcnZhbCAtIChtb21lbnQodGhpcy5taW5UaW1lKS5taW51dGVzKCkgJSB0aGlzLmludGVydmFsKTtcbiAgICAgICAgdGhpcy5maXJzdEludGVydmFsID0gbW9tZW50KHRoaXMubWluVGltZSkuYWRkKG9mZnNldCwgXCJtXCIpLnZhbHVlT2YoKTtcbiAgICAgIH1cbiAgICAgIC8vIGVsc2UgdGhlIGZpcnN0SW50ZXJ2YWwgaXMgaW5pdGlhbGlzZWQgYXMgc3RhcnQgb2YgZGF5XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5maXJzdEludGVydmFsID0gbW9tZW50KCkuc3RhcnRPZihcImRcIikudmFsdWVPZigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHRoaXMuZ2l2ZW5UaW1lICYmIHRoaXMuZ2l2ZW5UaW1lRmxhZyl7XG4gICAgICB0aGlzLmZpcnN0SW50ZXJ2YWwgPSBtb21lbnQodGhpcy5naXZlblRpbWUpLnN0YXJ0T2YoJ2QnKS52YWx1ZU9mKCk7XG4gICAgICB0aGlzLmdpdmVuVGltZUZsYWcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlQXNTdHJpbmcgPSBtb21lbnQodGhpcy5kYXRlQXNFcG9jaCkuZm9ybWF0KCdERC1NTS1ZWVlZJyk7XG4gICAgY29uc3QgaW50ZXJ2YWxBc1N0cmluZyA9IG1vbWVudCh0aGlzLmZpcnN0SW50ZXJ2YWwpLmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpO1xuICAgIGNvbnN0IHN0YXJ0ID0gbW9tZW50KGAke2RhdGVBc1N0cmluZ30gJHtpbnRlcnZhbEFzU3RyaW5nfWAsIGBERC1NTS1ZWVlZICR7dGhpcy50aW1lRm9ybWF0fWApO1xuICAgIGNvbnN0IGVuZCA9IG1vbWVudChgJHtkYXRlQXNTdHJpbmd9YCwgJ0RELU1NLVlZWVknKS5lbmRPZignZCcpO1xuXG4gICAgXG4gICAgd2hpbGUgKHN0YXJ0LnZhbHVlT2YoKSA8IGVuZC52YWx1ZU9mKCkpIHtcbiAgICAgIHRoaXMudGltZUludGVydmFscy5wdXNoKHN0YXJ0LmZvcm1hdCh0aGlzLnRpbWVGb3JtYXQpKTtcbiAgICAgIHN0YXJ0LmFkZCh0aGlzLmludGVydmFsLCBcIm1cIik7XG4gICAgfVxuXG4gICAgLy8gaWYgdGhlIHN0YXJ0IHRpbWUgaXMgZXF1YWwgdG8gdGhlIGludGVydmFsIGp1c3QgYmVmb3JlIG1pZG5pZ2h0XG4gICAgLy8gYW5kIHRoZSBzdGFydCBkYXRlID0gZW5kIGRhdGVcbiAgICAvLyBwdXNoIDExOjU5cG0gb25seVxuICAgIGlmICh0aGlzLnRpbWVJbnRlcnZhbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNob3NlblRpbWUgPSBtb21lbnQoKS5lbmRPZihcImRcIikuZm9ybWF0KHRoaXMudGltZUZvcm1hdCk7XG4gICAgICB0aGlzLnRpbWVJbnRlcnZhbHMucHVzaChtb21lbnQoKS5lbmRPZihcImRcIikuZm9ybWF0KHRoaXMudGltZUZvcm1hdCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnRvb2x0aXBEaXJlY3RpdmUpIHRoaXMudG9vbHRpcERpcmVjdGl2ZS5oaWRlVG9vbFRpcCgpO1xuICB9XG59XG4iXX0=