ca-components 1.0.78 → 1.0.80
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.
- package/esm2022/lib/ca-components.module.mjs +16 -4
- package/esm2022/lib/components/ca-activity-log-list/ca-activity-log-list.component.mjs +1 -1
- package/esm2022/lib/components/ca-app-tooltip-v2/ca-app-tooltip-v2.component.mjs +1 -1
- package/esm2022/lib/components/ca-filters/components/ca-dispatcher-filter/ca-dispatcher-filter.component.mjs +2 -2
- package/esm2022/lib/components/ca-filters/components/ca-money-filter/ca-money-filter.component.mjs +2 -2
- package/esm2022/lib/components/ca-filters/components/ca-state-filter/ca-state-filter.component.mjs +2 -2
- package/esm2022/lib/components/ca-filters/components/ca-trailer-type-filter/ca-trailer-type-filter.component.mjs +1 -1
- package/esm2022/lib/components/ca-filters/components/ca-truck-type-filter/ca-truck-type-filter.component.mjs +1 -1
- package/esm2022/lib/components/ca-filters/components/ca-user-filter/ca-user-filter.component.mjs +2 -2
- package/esm2022/lib/components/ca-input/base-classes/ca-input-base-helpres.mjs +237 -0
- package/esm2022/lib/components/ca-input/base-classes/ca-input-base.mjs +1020 -0
- package/esm2022/lib/components/ca-input/base-classes/ca-input-event-manager.mjs +24 -0
- package/esm2022/lib/components/ca-input/ca-input.component.mjs +53 -163
- package/esm2022/lib/components/ca-input/components/ca-input-clear/ca-input-clear.component.mjs +4 -4
- package/esm2022/lib/components/ca-input/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.mjs +11 -17
- package/esm2022/lib/components/ca-input/config/ca-input.config.mjs +1 -1
- package/esm2022/lib/components/ca-input/directives/caps-lock.directive.mjs +50 -0
- package/esm2022/lib/components/ca-input/directives/index.mjs +5 -1
- package/esm2022/lib/components/ca-input/directives/input-max-value.directive.mjs +53 -0
- package/esm2022/lib/components/ca-input/directives/min-max-value.directive.mjs +1 -1
- package/esm2022/lib/components/ca-input/directives/price_format.directive.mjs +41 -0
- package/esm2022/lib/components/ca-input/directives/restrict-input.directive.mjs +98 -0
- package/esm2022/lib/components/ca-input/enums/input-text-transform.enum.mjs +9 -0
- package/esm2022/lib/components/ca-input/input-test/input-test.component.mjs +175 -0
- package/esm2022/lib/components/ca-input/pipes/input-container-class.pipe.mjs +16 -16
- package/esm2022/lib/components/ca-input/pipes/input-datetime-picker-class.pipe.mjs +1 -1
- package/esm2022/lib/components/ca-input/pipes/input-error.pipe.mjs +18 -15
- package/esm2022/lib/components/ca-input/pipes/input-pattern.pipe.mjs +322 -0
- package/esm2022/lib/components/ca-input/services/index.mjs +1 -2
- package/esm2022/lib/components/ca-input/utils/constants/input-constants.mjs +102 -1
- package/esm2022/lib/components/ca-input-address-dropdown/ca-input-address-dropdown.component.mjs +2 -2
- package/esm2022/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs +809 -0
- package/esm2022/lib/components/ca-input-dropdown/ca-input-dropdown.component.mjs +18 -18
- package/esm2022/lib/components/ca-rating-review/ca-rating-review.component.mjs +2 -2
- package/esm2022/lib/components/ca-rating-review/components/ca-ratings-reviews-popup/ca-ratings-reviews-popup.component.mjs +1 -1
- package/esm2022/lib/components/ca-upload-files/components/ca-upload-file/ca-upload-file.component.mjs +1 -1
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/ca-components.mjs +7690 -7171
- package/fesm2022/ca-components.mjs.map +1 -1
- package/lib/ca-components.module.d.ts +32 -30
- package/lib/components/ca-filters/ca-filter.component.d.ts +2 -2
- package/lib/components/ca-input/base-classes/ca-input-base-helpres.d.ts +29 -0
- package/lib/components/ca-input/base-classes/ca-input-base.d.ts +82 -0
- package/lib/components/ca-input/base-classes/ca-input-event-manager.d.ts +16 -0
- package/lib/components/ca-input/ca-input.component.d.ts +30 -48
- package/lib/components/ca-input/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component.d.ts +3 -7
- package/lib/components/ca-input/config/ca-input.config.d.ts +10 -1
- package/lib/components/ca-input/directives/caps-lock.directive.d.ts +14 -0
- package/lib/components/ca-input/directives/index.d.ts +4 -0
- package/lib/components/ca-input/directives/input-max-value.directive.d.ts +12 -0
- package/lib/components/ca-input/directives/price_format.directive.d.ts +11 -0
- package/lib/components/ca-input/directives/restrict-input.directive.d.ts +15 -0
- package/lib/components/ca-input/enums/input-text-transform.enum.d.ts +6 -0
- package/lib/components/ca-input/input-test/input-test.component.d.ts +47 -0
- package/lib/components/ca-input/pipes/input-container-class.pipe.d.ts +3 -3
- package/lib/components/ca-input/pipes/input-datetime-picker-class.pipe.d.ts +1 -1
- package/lib/components/ca-input/pipes/input-pattern.pipe.d.ts +25 -0
- package/lib/components/ca-input/services/index.d.ts +0 -1
- package/lib/components/ca-input/utils/constants/input-constants.d.ts +11 -0
- package/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.d.ts +99 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
- package/esm2022/lib/components/ca-input/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs +0 -100
- package/esm2022/lib/components/ca-input/services/ca-input-state.service.mjs +0 -2173
- package/lib/components/ca-input/components/ca-input-datetime-picker/ca-input-datetime-picker.component.d.ts +0 -48
- package/lib/components/ca-input/services/ca-input-state.service.d.ts +0 -196
package/esm2022/lib/components/ca-input-datetime-picker/ca-input-datetime-picker.component.mjs
ADDED
|
@@ -0,0 +1,809 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, Self, ViewChild, } from '@angular/core';
|
|
2
|
+
import { FormsModule, ReactiveFormsModule, } from '@angular/forms';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
// Imports
|
|
5
|
+
import moment from 'moment';
|
|
6
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
7
|
+
import { InputSvgRoutes } from '../ca-input/utils';
|
|
8
|
+
// Pipe
|
|
9
|
+
import { InputContainerClassPipe, InputDatetimePickerClassPipe, } from '../ca-input/pipes';
|
|
10
|
+
// Components
|
|
11
|
+
import { CaInputComponent } from '../ca-input/ca-input.component';
|
|
12
|
+
import { CaCustomDatetimePickersComponent } from '../ca-custom-datetime-pickers/ca-custom-datetime-pickers.component';
|
|
13
|
+
import { CaInputPlaceholderIconComponent } from '../ca-input/components/ca-input-placeholder-icon/ca-input-placeholder-icon.component';
|
|
14
|
+
// Enums
|
|
15
|
+
import { InputConfigNameStringEnum } from '../ca-input/enums';
|
|
16
|
+
// Services
|
|
17
|
+
import { CalendarDateTimePickerService } from '../ca-custom-datetime-pickers/services/calendar-datetime-picker.service';
|
|
18
|
+
import { AngularSvgIconModule } from 'angular-svg-icon';
|
|
19
|
+
import { FormControlPipe } from '../ca-input/pipes/form-control.pipe';
|
|
20
|
+
import * as i0 from "@angular/core";
|
|
21
|
+
import * as i1 from "@angular/forms";
|
|
22
|
+
import * as i2 from "../ca-custom-datetime-pickers/services/calendar-datetime-picker.service";
|
|
23
|
+
import * as i3 from "@angular/common";
|
|
24
|
+
export class CaInputDatetimePickerComponent {
|
|
25
|
+
constructor(superControl, calendarService) {
|
|
26
|
+
this.superControl = superControl;
|
|
27
|
+
this.calendarService = calendarService;
|
|
28
|
+
this.clearInputEvent = new EventEmitter();
|
|
29
|
+
this.blurInputEvent = new EventEmitter();
|
|
30
|
+
this.showDateInput = false;
|
|
31
|
+
this.dateTimeInputDate = new Date();
|
|
32
|
+
this.selectionInput = -1;
|
|
33
|
+
this.inputSvgRoutes = InputSvgRoutes;
|
|
34
|
+
this.isTouchedInput = false;
|
|
35
|
+
this.preventBlur = false;
|
|
36
|
+
// Date
|
|
37
|
+
this.newInputChanged = false;
|
|
38
|
+
this.selectLastOneForSelectionEmitter = new EventEmitter();
|
|
39
|
+
this.selectLastOneAfterMouseUpEmitter = new EventEmitter();
|
|
40
|
+
this.onDatePasteEmitter = new EventEmitter();
|
|
41
|
+
this.onFocusEmitter = new EventEmitter();
|
|
42
|
+
this.changeSelectionEmmiter = new EventEmitter();
|
|
43
|
+
this.setSelectionEmmiter = new EventEmitter();
|
|
44
|
+
this.destroy$ = new Subject();
|
|
45
|
+
this.superControl.valueAccessor = this;
|
|
46
|
+
}
|
|
47
|
+
ngAfterViewInit() {
|
|
48
|
+
this.setTimePickerTime();
|
|
49
|
+
setTimeout(() => {
|
|
50
|
+
if (this.superControl.control?.value)
|
|
51
|
+
this.setTimeDateInput(this.superControl.control?.value, true);
|
|
52
|
+
}, 300);
|
|
53
|
+
this.calendarService.dateChanged
|
|
54
|
+
.pipe(takeUntil(this.destroy$))
|
|
55
|
+
.subscribe((date) => {
|
|
56
|
+
if (!this.inputConfig.isDisabled) {
|
|
57
|
+
this.setTimeDateInput(date);
|
|
58
|
+
this.caInputComponent.caInputPlaceholderIconComponent.t2?.close();
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
get getSuperControl() {
|
|
63
|
+
return this.superControl.control;
|
|
64
|
+
}
|
|
65
|
+
selectLastOneForSelection() {
|
|
66
|
+
let range, selection;
|
|
67
|
+
this.showDateInput = true;
|
|
68
|
+
this.selectionInput = -1;
|
|
69
|
+
this.caInputComponent.isFocusInput = true;
|
|
70
|
+
if (window.getSelection && document.createRange) {
|
|
71
|
+
selection = window.getSelection();
|
|
72
|
+
range = document.createRange();
|
|
73
|
+
if (this.inputConfig.name !==
|
|
74
|
+
InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
|
|
75
|
+
range.setStart(this.span3.nativeElement, 1);
|
|
76
|
+
range.setEnd(this.span3.nativeElement, 1);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
range.setStart(this.span2.nativeElement, 1);
|
|
80
|
+
range.setEnd(this.span2.nativeElement, 1);
|
|
81
|
+
}
|
|
82
|
+
selection?.removeAllRanges();
|
|
83
|
+
selection?.addRange(range);
|
|
84
|
+
}
|
|
85
|
+
this.timeoutCleaner = setTimeout(() => {
|
|
86
|
+
clearTimeout(this.dateTimeMainTimer);
|
|
87
|
+
clearTimeout(this.focusBlur);
|
|
88
|
+
}, 90);
|
|
89
|
+
}
|
|
90
|
+
selectLastOneAfterMouseUp() {
|
|
91
|
+
if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
|
|
92
|
+
this.selectionInput = 1;
|
|
93
|
+
this.span2.nativeElement.focus();
|
|
94
|
+
this.setSpanSelection(this.span2.nativeElement);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
this.selectionInput = 2;
|
|
98
|
+
this.span3.nativeElement.focus();
|
|
99
|
+
this.setSpanSelection(this.span3.nativeElement);
|
|
100
|
+
}
|
|
101
|
+
this.showDateInput = true;
|
|
102
|
+
this.timeoutCleaner = setTimeout(() => {
|
|
103
|
+
clearTimeout(this.dateTimeMainTimer);
|
|
104
|
+
clearTimeout(this.focusBlur);
|
|
105
|
+
}, 90);
|
|
106
|
+
}
|
|
107
|
+
onDatePaste(event) {
|
|
108
|
+
event.preventDefault();
|
|
109
|
+
const pasteText = event.clipboardData?.getData('text');
|
|
110
|
+
const pastedDate = new Date(pasteText);
|
|
111
|
+
if (!isNaN(pastedDate.getTime())) {
|
|
112
|
+
this.setTimeDateInput(pastedDate);
|
|
113
|
+
this.selectSpanByTabIndex(this.selectionInput);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
changeSelection(event, noPreventDefault = false) {
|
|
117
|
+
if (!noPreventDefault) {
|
|
118
|
+
event.preventDefault();
|
|
119
|
+
event.stopPropagation();
|
|
120
|
+
}
|
|
121
|
+
const isNavigationKey = this.isNavigationKey(event);
|
|
122
|
+
const isSpecialTimePickerKey = this.selectionInput === 3 &&
|
|
123
|
+
this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER;
|
|
124
|
+
if (isNavigationKey || isSpecialTimePickerKey) {
|
|
125
|
+
event.preventDefault();
|
|
126
|
+
this.handleNavigationKey(event);
|
|
127
|
+
}
|
|
128
|
+
else if (!this.isNumber(event)) {
|
|
129
|
+
if (!noPreventDefault)
|
|
130
|
+
event.preventDefault();
|
|
131
|
+
else {
|
|
132
|
+
if (!noPreventDefault)
|
|
133
|
+
event.preventDefault();
|
|
134
|
+
if (this.selectionInput === -1)
|
|
135
|
+
this.selectionInput = 0;
|
|
136
|
+
this.handleKeyboardInputs(event);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
isNumber(evt) {
|
|
141
|
+
evt = evt ? evt : window.event;
|
|
142
|
+
let charCode = evt.which ? evt.which : evt.keyCode;
|
|
143
|
+
return ((charCode >= 48 && charCode <= 57) || (charCode >= 96 && charCode <= 105));
|
|
144
|
+
}
|
|
145
|
+
isNavigationKey(e) {
|
|
146
|
+
const navigationKeys = [37, 38, 39, 40, 8, 9, 46]; // Arrow keys, Backspace, Tab, Delete
|
|
147
|
+
return navigationKeys.includes(e.keyCode);
|
|
148
|
+
}
|
|
149
|
+
onFocus(event) {
|
|
150
|
+
this.onFocusEmitter.emit(event);
|
|
151
|
+
}
|
|
152
|
+
closePopover() {
|
|
153
|
+
if (this.caInputComponent.caInputPlaceholderIconComponent.t2)
|
|
154
|
+
this.caInputComponent.caInputPlaceholderIconComponent.t2.close();
|
|
155
|
+
}
|
|
156
|
+
toggleDropdownOptions() {
|
|
157
|
+
if (this.caInputComponent.caInputPlaceholderIconComponent.t2) {
|
|
158
|
+
if (!this.caInputComponent.caInputPlaceholderIconComponent.t2.isOpen()) {
|
|
159
|
+
clearTimeout(this.dateTimeMainTimer);
|
|
160
|
+
clearTimeout(this.focusBlur);
|
|
161
|
+
this.holder1.nativeElement.focus();
|
|
162
|
+
this.selectionInput = -1;
|
|
163
|
+
this.setSpanSelection(this.holder1.nativeElement);
|
|
164
|
+
this.caInputComponent.caInputPlaceholderIconComponent.t2.open();
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
this.holder1.nativeElement.blur();
|
|
168
|
+
// this.setIsFocusInput(false);
|
|
169
|
+
let selection = window.getSelection();
|
|
170
|
+
selection?.removeAllRanges();
|
|
171
|
+
}
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
handleFocusInput(e) {
|
|
176
|
+
const event = e;
|
|
177
|
+
if (!this.inputConfig.isDisabled) {
|
|
178
|
+
clearTimeout(this.dateTimeMainTimer);
|
|
179
|
+
clearTimeout(this.focusBlur);
|
|
180
|
+
this.showDateInput = true;
|
|
181
|
+
if ((this.selectionInput === -1 &&
|
|
182
|
+
event?.target?.nodeName === 'INPUT') ||
|
|
183
|
+
event?.relatedTarget?.nodeName === 'INPUT' ||
|
|
184
|
+
event?.relatedTarget === null) {
|
|
185
|
+
this.preventBlur = true;
|
|
186
|
+
this.holder1.nativeElement.focus();
|
|
187
|
+
this.setSpanSelection(this.holder1.nativeElement);
|
|
188
|
+
this.selectionInput = -1;
|
|
189
|
+
}
|
|
190
|
+
this.caInputComponent.caInputPlaceholderIconComponent.t2.toggle();
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
setSpanSelection(element) {
|
|
194
|
+
let range;
|
|
195
|
+
let selection;
|
|
196
|
+
if (window.getSelection && document.createRange) {
|
|
197
|
+
selection = window.getSelection();
|
|
198
|
+
range = document.createRange();
|
|
199
|
+
range.selectNodeContents(element);
|
|
200
|
+
selection?.removeAllRanges();
|
|
201
|
+
selection?.addRange(range);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
setSelection(event) {
|
|
205
|
+
const element = event.target;
|
|
206
|
+
const selectionInput = parseInt(element.getAttribute('tabindex'));
|
|
207
|
+
const currentSelection = window.getSelection();
|
|
208
|
+
if (currentSelection && currentSelection.toString().length > 10) {
|
|
209
|
+
this.holder1.nativeElement.focus();
|
|
210
|
+
this.selectionInput = 0;
|
|
211
|
+
this.setSpanSelection(this.holder1.nativeElement);
|
|
212
|
+
clearTimeout(this.dateTimeMainTimer);
|
|
213
|
+
clearTimeout(this.focusBlur);
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
clearTimeout(this.dateTimeMainTimer);
|
|
217
|
+
if (element.classList.contains('main')) {
|
|
218
|
+
this.selectionInput = selectionInput;
|
|
219
|
+
this.setSpanSelection(element);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
if (this.selectionInput === -1) {
|
|
223
|
+
this.span1.nativeElement.focus();
|
|
224
|
+
this.selectionInput = 0;
|
|
225
|
+
this.setSpanSelection(this.span1.nativeElement);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
event.preventDefault();
|
|
229
|
+
this.selectSpanByTabIndex(this.selectionInput);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
registerOnChange(fn) {
|
|
234
|
+
this.onChange = fn;
|
|
235
|
+
}
|
|
236
|
+
onChange(_) {
|
|
237
|
+
this.superControl.control?.setValue(_);
|
|
238
|
+
this.superControl.control?.markAsTouched(); // Mark the control as touched
|
|
239
|
+
this.superControl.control?.markAsDirty();
|
|
240
|
+
}
|
|
241
|
+
writeValue(obj) { }
|
|
242
|
+
registerOnTouched() { }
|
|
243
|
+
// BLUR ON INPUT
|
|
244
|
+
blurOnDateTime() {
|
|
245
|
+
clearTimeout(this.dateTimeMainTimer);
|
|
246
|
+
this.dateTimeMainTimer = setTimeout(() => {
|
|
247
|
+
if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {
|
|
248
|
+
if (!isNaN(this.span1?.nativeElement.innerHTML) &&
|
|
249
|
+
!isNaN(this.span2?.nativeElement.innerHTML) &&
|
|
250
|
+
!isNaN(this.span3?.nativeElement.innerHTML)) {
|
|
251
|
+
if (this.inputConfig.isFutureDateDisabled &&
|
|
252
|
+
moment(this.dateTimeInputDate).isAfter(moment()))
|
|
253
|
+
this.superControl.control?.setErrors({
|
|
254
|
+
invalid: true,
|
|
255
|
+
});
|
|
256
|
+
// don't accept future dates
|
|
257
|
+
else {
|
|
258
|
+
if (this.inputConfig.expiredDateInvalid &&
|
|
259
|
+
moment(this.dateTimeInputDate).isBefore(moment())) {
|
|
260
|
+
this.superControl.control?.setErrors({ invalid: true }); // don't accept expired dates
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
this.calendarService.dateChanged.next(this.dateTimeInputDate);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
this.span1.nativeElement.innerHTML = 'mm';
|
|
269
|
+
this.span2.nativeElement.innerHTML = 'dd';
|
|
270
|
+
this.span3.nativeElement.innerHTML = 'yy';
|
|
271
|
+
this.dateTimeInputDate = new Date();
|
|
272
|
+
this.showDateInput = false;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
else if (this.inputConfig.name ===
|
|
276
|
+
InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
|
|
277
|
+
if (!isNaN(this.span1.nativeElement.innerHTML) &&
|
|
278
|
+
!isNaN(this.span2.nativeElement.innerHTML)) {
|
|
279
|
+
if (this.inputConfig.expiredDateInvalid &&
|
|
280
|
+
moment(this.dateTimeInputDate).isBefore(moment())) {
|
|
281
|
+
this.superControl.control?.setErrors({ invalid: true }); // don't accept expired dates
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
this.calendarService.dateChanged.next(this.dateTimeInputDate);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
this.span1.nativeElement.innerHTML = 'mm';
|
|
289
|
+
this.span2.nativeElement.innerHTML = 'yy';
|
|
290
|
+
this.dateTimeInputDate = new Date();
|
|
291
|
+
this.showDateInput = false;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
if (!isNaN(this.span1.nativeElement.innerHTML) &&
|
|
296
|
+
!isNaN(this.span2.nativeElement.innerHTML)) {
|
|
297
|
+
this.calendarService.dateChanged.next(this.dateTimeInputDate);
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
this.span1.nativeElement.innerHTML = 'HH';
|
|
301
|
+
this.span2.nativeElement.innerHTML = 'MM';
|
|
302
|
+
this.setTimePickerTime();
|
|
303
|
+
this.showDateInput = false;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
clearTimeout(this.dateTimeMainTimer);
|
|
307
|
+
this.selectionInput = -1;
|
|
308
|
+
this.newInputChanged = true;
|
|
309
|
+
}, 100);
|
|
310
|
+
}
|
|
311
|
+
onPopoverShown() {
|
|
312
|
+
this.showDateInput = true;
|
|
313
|
+
this.holder1.nativeElement.focus();
|
|
314
|
+
}
|
|
315
|
+
onPopoverHidden() {
|
|
316
|
+
this.blurOnDateTime();
|
|
317
|
+
}
|
|
318
|
+
setTimeDateInput(date, hasValue) {
|
|
319
|
+
let text, dateFormat, timeFormat;
|
|
320
|
+
if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {
|
|
321
|
+
text = moment(new Date(date)).format('MM/DD/YY');
|
|
322
|
+
dateFormat = text.split('/');
|
|
323
|
+
}
|
|
324
|
+
else if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
|
|
325
|
+
text = moment(new Date(date)).format('MM/DD/YY');
|
|
326
|
+
dateFormat = text.split('/');
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
date =
|
|
330
|
+
date instanceof Date
|
|
331
|
+
? date
|
|
332
|
+
: new Date(moment().format('MM/DD/YYYY') + ' ' + date);
|
|
333
|
+
text = moment(new Date(date)).format('HH:mm');
|
|
334
|
+
timeFormat = moment(new Date(date)).format('hh/mm/A');
|
|
335
|
+
dateFormat = timeFormat.split('/');
|
|
336
|
+
}
|
|
337
|
+
if (!hasValue)
|
|
338
|
+
this.onChange(text);
|
|
339
|
+
// this.input.nativeElement.value = text;
|
|
340
|
+
this.setIsFocusInput(false);
|
|
341
|
+
if (this.span1)
|
|
342
|
+
this.span1.nativeElement.innerHTML = dateFormat[0];
|
|
343
|
+
if (this.span2)
|
|
344
|
+
if (this.inputConfig.name !==
|
|
345
|
+
InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
|
|
346
|
+
this.span2.nativeElement.innerHTML = dateFormat[1];
|
|
347
|
+
this.span3.nativeElement.innerHTML = dateFormat[2];
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
350
|
+
this.span2.nativeElement.innerHTML = dateFormat[2];
|
|
351
|
+
}
|
|
352
|
+
this.dateTimeInputDate = new Date(date);
|
|
353
|
+
this.showDateInput = true;
|
|
354
|
+
}
|
|
355
|
+
handleKeyboardInputs(e, isRestart) {
|
|
356
|
+
const spanOneValue = isNaN(this.span1.nativeElement.innerHTML) || this.newInputChanged
|
|
357
|
+
? undefined
|
|
358
|
+
: parseInt(this.span1.nativeElement.innerHTML);
|
|
359
|
+
const span2Value = isNaN(this.span2.nativeElement.innerHTML) || this.newInputChanged
|
|
360
|
+
? undefined
|
|
361
|
+
: parseInt(this.span2.nativeElement.innerHTML);
|
|
362
|
+
let span3Value;
|
|
363
|
+
if (this.inputConfig.name !== InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
|
|
364
|
+
span3Value =
|
|
365
|
+
isNaN(this.span3.nativeElement.innerHTML) || this.newInputChanged
|
|
366
|
+
? ''
|
|
367
|
+
: parseInt(this.span3.nativeElement.innerHTML);
|
|
368
|
+
}
|
|
369
|
+
this.newInputChanged = false;
|
|
370
|
+
if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {
|
|
371
|
+
if (this.selectionInput === 0) {
|
|
372
|
+
if (isRestart) {
|
|
373
|
+
this.span1.nativeElement.innerHTML = 'mm';
|
|
374
|
+
this.selectionInput = 0;
|
|
375
|
+
this.selectSpanByTabIndex(0);
|
|
376
|
+
}
|
|
377
|
+
else if (spanOneValue !== undefined) {
|
|
378
|
+
let final_value = parseInt(`${spanOneValue}${e.key}`);
|
|
379
|
+
if (final_value > 12) {
|
|
380
|
+
this.span1.nativeElement.innerHTML = ('0' + parseInt(e.key)).slice(-2);
|
|
381
|
+
this.selectionInput = 1;
|
|
382
|
+
this.selectSpanByTabIndex(1, true);
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setMonth(parseInt(this.span1.nativeElement.innerHTML + parseInt(e.key)) -
|
|
386
|
+
1));
|
|
387
|
+
if (!final_value)
|
|
388
|
+
this.span1.nativeElement.innerHTML = 'mm';
|
|
389
|
+
else
|
|
390
|
+
this.span1.nativeElement.innerHTML = (this.span1.nativeElement.innerHTML + parseInt(e.key)).slice(-2);
|
|
391
|
+
this.selectionInput = 1;
|
|
392
|
+
this.selectSpanByTabIndex(1, true);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
if (parseInt(e.key))
|
|
397
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setMonth(parseInt(e.key) - 1));
|
|
398
|
+
const final_value = ('0' + parseInt(e.key)).slice(-2);
|
|
399
|
+
this.span1.nativeElement.innerHTML = final_value;
|
|
400
|
+
if (parseInt(`1${e.key}`) > 12) {
|
|
401
|
+
this.selectionInput = 1;
|
|
402
|
+
this.selectSpanByTabIndex(1, true);
|
|
403
|
+
}
|
|
404
|
+
else
|
|
405
|
+
this.selectSpanByTabIndex(0);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
else if (this.selectionInput === 1) {
|
|
409
|
+
if (isRestart) {
|
|
410
|
+
this.span2.nativeElement.innerHTML = 'dd';
|
|
411
|
+
this.selectionInput = 0;
|
|
412
|
+
this.selectSpanByTabIndex(0, true);
|
|
413
|
+
}
|
|
414
|
+
else if (span2Value !== undefined) {
|
|
415
|
+
let final_value = parseInt(`${span2Value}${e.key}`);
|
|
416
|
+
if (final_value > 31) {
|
|
417
|
+
this.span2.nativeElement.innerHTML = ('0' + parseInt(e.key)).slice(-2);
|
|
418
|
+
this.selectionInput = 2;
|
|
419
|
+
this.selectSpanByTabIndex(2, true);
|
|
420
|
+
}
|
|
421
|
+
else {
|
|
422
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setDate(parseInt(this.span2.nativeElement.innerHTML + parseInt(e.key))));
|
|
423
|
+
if (!final_value) {
|
|
424
|
+
this.span2.nativeElement.innerHTML = 'dd';
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
this.span2.nativeElement.innerHTML = (this.span2.nativeElement.innerHTML + parseInt(e.key)).slice(-2);
|
|
428
|
+
}
|
|
429
|
+
this.selectionInput = 2;
|
|
430
|
+
this.selectSpanByTabIndex(2, true);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
else {
|
|
434
|
+
if (parseInt(e.key))
|
|
435
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setDate(parseInt(e.key)));
|
|
436
|
+
this.span2.nativeElement.innerHTML = ('0' + parseInt(e.key)).slice(-2);
|
|
437
|
+
if (parseInt(`1${e.key}`) > 31) {
|
|
438
|
+
this.selectionInput = 2;
|
|
439
|
+
this.selectSpanByTabIndex(2, true);
|
|
440
|
+
}
|
|
441
|
+
else {
|
|
442
|
+
this.selectSpanByTabIndex(1);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
if (isRestart) {
|
|
448
|
+
this.span3.nativeElement.innerHTML = 'yy';
|
|
449
|
+
this.selectionInput = 1;
|
|
450
|
+
this.selectSpanByTabIndex(1, true);
|
|
451
|
+
}
|
|
452
|
+
else if (!span3Value || span3Value.toString().length === 2) {
|
|
453
|
+
this.span3.nativeElement.innerHTML = ('0' + parseInt(e.key)).slice(-2);
|
|
454
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setFullYear(parseInt(`200${parseInt(e.key)}`)));
|
|
455
|
+
this.selectSpanByTabIndex(2);
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
const finalYear = parseInt(this.span3.nativeElement.innerHTML + parseInt(e.key));
|
|
459
|
+
const finalShowYear = finalYear > 31
|
|
460
|
+
? parseInt(`19${finalYear}`)
|
|
461
|
+
: parseInt(`20${finalYear}`);
|
|
462
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setFullYear(finalShowYear));
|
|
463
|
+
this.span3.nativeElement.innerHTML = (this.span3.nativeElement.innerHTML + parseInt(e.key)).slice(-2);
|
|
464
|
+
this.selectSpanByTabIndex(2);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
else if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
|
|
469
|
+
if (!this.selectionInput) {
|
|
470
|
+
if (isRestart) {
|
|
471
|
+
this.span1.nativeElement.innerHTML = 'mm';
|
|
472
|
+
this.selectionInput = 0;
|
|
473
|
+
this.selectSpanByTabIndex(0);
|
|
474
|
+
}
|
|
475
|
+
else if (spanOneValue) {
|
|
476
|
+
const final_value = parseInt(`${spanOneValue}${e.key}`);
|
|
477
|
+
if (final_value > 12) {
|
|
478
|
+
this.span1.nativeElement.innerHTML = ('0' + parseInt(e.key)).slice(-2);
|
|
479
|
+
this.selectionInput = 1;
|
|
480
|
+
this.selectSpanByTabIndex(1, true);
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setMonth(parseInt(this.span1.nativeElement.innerHTML + parseInt(e.key)) -
|
|
484
|
+
1));
|
|
485
|
+
if (!final_value) {
|
|
486
|
+
this.span1.nativeElement.innerHTML = 'mm';
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
this.span1.nativeElement.innerHTML = (this.span1.nativeElement.innerHTML + parseInt(e.key)).slice(-2);
|
|
490
|
+
}
|
|
491
|
+
this.selectionInput = 1;
|
|
492
|
+
this.selectSpanByTabIndex(1, true);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
if (parseInt(e.key))
|
|
497
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setMonth(parseInt(e.key) - 1));
|
|
498
|
+
const final_value = ('0' + parseInt(e.key)).slice(-2);
|
|
499
|
+
this.span1.nativeElement.innerHTML = final_value;
|
|
500
|
+
if (parseInt(`1${e.key}`) > 12) {
|
|
501
|
+
this.selectionInput = 1;
|
|
502
|
+
this.selectSpanByTabIndex(1, true);
|
|
503
|
+
}
|
|
504
|
+
else
|
|
505
|
+
this.selectSpanByTabIndex(0);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
else {
|
|
509
|
+
if (isRestart) {
|
|
510
|
+
this.span2.nativeElement.innerHTML = 'yy';
|
|
511
|
+
this.selectionInput = 2;
|
|
512
|
+
this.selectSpanByTabIndex(2, true);
|
|
513
|
+
}
|
|
514
|
+
else if (!span2Value || span2Value.toString().length === 2) {
|
|
515
|
+
this.span2.nativeElement.innerHTML = ('0' + parseInt(e.key)).slice(-2);
|
|
516
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setFullYear(parseInt(`200${parseInt(e.key)}`)));
|
|
517
|
+
this.selectSpanByTabIndex(1);
|
|
518
|
+
}
|
|
519
|
+
else {
|
|
520
|
+
const finalYear = parseInt(this.span2.nativeElement.innerHTML + parseInt(e.key));
|
|
521
|
+
const finalShowYear = finalYear > 31
|
|
522
|
+
? parseInt(`19${finalYear}`)
|
|
523
|
+
: parseInt(`20${finalYear}`);
|
|
524
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setFullYear(finalShowYear));
|
|
525
|
+
this.span2.nativeElement.innerHTML = (this.span2.nativeElement.innerHTML + parseInt(e.key)).slice(-2);
|
|
526
|
+
this.selectSpanByTabIndex(1);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
selectSpanByTabIndex(indx, changeTab) {
|
|
532
|
+
switch (indx) {
|
|
533
|
+
case 0:
|
|
534
|
+
this.setSpanSelection(this.span1.nativeElement);
|
|
535
|
+
break;
|
|
536
|
+
case 1:
|
|
537
|
+
this.setSpanSelection(this.span2.nativeElement);
|
|
538
|
+
break;
|
|
539
|
+
case 2:
|
|
540
|
+
this.setSpanSelection(this.span3.nativeElement);
|
|
541
|
+
break;
|
|
542
|
+
default:
|
|
543
|
+
this.setSpanSelection(this.holder1.nativeElement);
|
|
544
|
+
}
|
|
545
|
+
if (changeTab)
|
|
546
|
+
this.newInputChanged = true;
|
|
547
|
+
}
|
|
548
|
+
handleNavigationKey(event) {
|
|
549
|
+
switch (event.keyCode) {
|
|
550
|
+
case 37: // Left arrow
|
|
551
|
+
this.moveSelectionLeft();
|
|
552
|
+
break;
|
|
553
|
+
case 39: // Right arrow
|
|
554
|
+
case 9: // Tab
|
|
555
|
+
this.moveSelectionRightOrTab(event);
|
|
556
|
+
break;
|
|
557
|
+
case 38: // Up arrow
|
|
558
|
+
this.setDateTimeModel('up');
|
|
559
|
+
break;
|
|
560
|
+
case 40: // Down arrow
|
|
561
|
+
this.setDateTimeModel('down');
|
|
562
|
+
break;
|
|
563
|
+
case 8: // Backspace
|
|
564
|
+
case 46: // Delete
|
|
565
|
+
this.handleKeyboardInputs(event, true);
|
|
566
|
+
break;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
handleDatePickerInput(isUp, isDatePicker) {
|
|
570
|
+
if (this.selectionInput === 0)
|
|
571
|
+
this.updateMonth(isUp);
|
|
572
|
+
else if (this.selectionInput === 1)
|
|
573
|
+
this.updateDate(isUp, isDatePicker);
|
|
574
|
+
else
|
|
575
|
+
this.updateYear(isUp, isDatePicker);
|
|
576
|
+
}
|
|
577
|
+
setDateTimeModel(direction) {
|
|
578
|
+
if (this.selectionInput === -1)
|
|
579
|
+
this.selectionInput = 0;
|
|
580
|
+
const isUp = direction === 'up';
|
|
581
|
+
const isDatePicker = this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER;
|
|
582
|
+
const isBankCardPicker = this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;
|
|
583
|
+
if (isDatePicker || isBankCardPicker)
|
|
584
|
+
this.handleDatePickerInput(isUp, isDatePicker);
|
|
585
|
+
else
|
|
586
|
+
this.handleTimePickerInput(isUp);
|
|
587
|
+
}
|
|
588
|
+
moveSelectionRightOrTab(e) {
|
|
589
|
+
const isDatepickerBankCard = this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER_BANK_CARD;
|
|
590
|
+
const maxIndex = isDatepickerBankCard ? 1 : 2;
|
|
591
|
+
if (this.selectionInput < maxIndex && !e.shiftKey) {
|
|
592
|
+
this.selectionInput += 1;
|
|
593
|
+
this.selectSpanByTabIndex(this.selectionInput, true);
|
|
594
|
+
}
|
|
595
|
+
else if (e.keyCode === 9 && !e.shiftKey) {
|
|
596
|
+
this.focusNextInput();
|
|
597
|
+
}
|
|
598
|
+
else if (e.shiftKey && e.keyCode === 9) {
|
|
599
|
+
this.focusPreviousInput();
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
focusPreviousInput() {
|
|
603
|
+
const allInputs = Array.from(document.querySelectorAll('input.input-control'));
|
|
604
|
+
const currentIndex = allInputs.findIndex((input) => input === this.caInputComponent.input.nativeElement);
|
|
605
|
+
if (currentIndex === -1)
|
|
606
|
+
this.selectionInput = 3;
|
|
607
|
+
else if (currentIndex === 0)
|
|
608
|
+
this.selectionInput = 0;
|
|
609
|
+
else {
|
|
610
|
+
this.selectionInput -= 1;
|
|
611
|
+
this.selectSpanByTabIndex(this.selectionInput);
|
|
612
|
+
}
|
|
613
|
+
if (currentIndex > 0)
|
|
614
|
+
allInputs[currentIndex - 1].focus();
|
|
615
|
+
this.selectionInput = -1;
|
|
616
|
+
}
|
|
617
|
+
focusNextInput() {
|
|
618
|
+
const allInputs = Array.from(document.querySelectorAll('input.input-control'));
|
|
619
|
+
const currentIndex = allInputs.findIndex((input) => input === this.caInputComponent.input.nativeElement);
|
|
620
|
+
if (allInputs[currentIndex + 1])
|
|
621
|
+
allInputs[currentIndex + 1].focus();
|
|
622
|
+
else {
|
|
623
|
+
this.setIsFocusInput(false);
|
|
624
|
+
this.blurOnDateTime();
|
|
625
|
+
}
|
|
626
|
+
this.selectionInput = -1;
|
|
627
|
+
}
|
|
628
|
+
setIsFocusInput(value) {
|
|
629
|
+
this.caInputComponent.isFocusInput = value;
|
|
630
|
+
}
|
|
631
|
+
moveSelectionLeft() {
|
|
632
|
+
if (this.selectionInput > 0) {
|
|
633
|
+
this.selectionInput -= 1;
|
|
634
|
+
this.selectSpanByTabIndex(this.selectionInput, true);
|
|
635
|
+
}
|
|
636
|
+
}
|
|
637
|
+
updateMonth(isUp) {
|
|
638
|
+
const monthDelta = isUp ? 1 : -1;
|
|
639
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setMonth(this.dateTimeInputDate.getMonth() + monthDelta));
|
|
640
|
+
this.span1.nativeElement.innerHTML = this.padValue(this.dateTimeInputDate.getMonth() + 1);
|
|
641
|
+
this.setSpanSelection(this.span1.nativeElement);
|
|
642
|
+
}
|
|
643
|
+
updateDate(isUp, isDatePicker) {
|
|
644
|
+
const dateDelta = isUp ? 1 : -1;
|
|
645
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setDate(this.dateTimeInputDate.getDate() + dateDelta));
|
|
646
|
+
const spanElement = isDatePicker
|
|
647
|
+
? this.span2.nativeElement
|
|
648
|
+
: this.span1.nativeElement;
|
|
649
|
+
spanElement.innerHTML = this.padValue(this.dateTimeInputDate.getDate());
|
|
650
|
+
this.setSpanSelection(spanElement);
|
|
651
|
+
}
|
|
652
|
+
updateYear(isUp, isDatePicker) {
|
|
653
|
+
const yearDelta = isUp ? 1 : -1;
|
|
654
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setFullYear(this.dateTimeInputDate.getFullYear() + yearDelta));
|
|
655
|
+
const spanElement = isDatePicker
|
|
656
|
+
? this.span3.nativeElement
|
|
657
|
+
: this.span2.nativeElement;
|
|
658
|
+
spanElement.innerHTML = this.dateTimeInputDate
|
|
659
|
+
.getFullYear()
|
|
660
|
+
.toString()
|
|
661
|
+
.slice(-2);
|
|
662
|
+
this.setSpanSelection(spanElement);
|
|
663
|
+
}
|
|
664
|
+
padValue(value) {
|
|
665
|
+
return ('0' + value).slice(-2);
|
|
666
|
+
}
|
|
667
|
+
handleTimePickerInput(isUp) {
|
|
668
|
+
if (this.selectionInput === 0)
|
|
669
|
+
this.updateHours(isUp);
|
|
670
|
+
else if (this.selectionInput === 1)
|
|
671
|
+
this.updateMinutes(isUp);
|
|
672
|
+
else
|
|
673
|
+
this.toggleAMPM();
|
|
674
|
+
}
|
|
675
|
+
updateHours(isUp) {
|
|
676
|
+
const hoursDelta = isUp ? 1 : -1;
|
|
677
|
+
let selectedHours = this.dateTimeInputDate.getHours() + hoursDelta;
|
|
678
|
+
if (selectedHours === 0)
|
|
679
|
+
selectedHours = 24;
|
|
680
|
+
if (selectedHours === -1)
|
|
681
|
+
selectedHours = 23;
|
|
682
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setHours(selectedHours));
|
|
683
|
+
this.span1.nativeElement.innerHTML = this.padValue(selectedHours > 12 ? selectedHours - 12 : selectedHours);
|
|
684
|
+
this.setSpanSelection(this.span1.nativeElement);
|
|
685
|
+
this.span3.nativeElement.innerHTML =
|
|
686
|
+
selectedHours > 11 && selectedHours < 24 ? 'PM' : 'AM';
|
|
687
|
+
}
|
|
688
|
+
updateMinutes(isUp) {
|
|
689
|
+
const minutesDelta = isUp ? 1 : -1;
|
|
690
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setMinutes(this.dateTimeInputDate.getMinutes() + minutesDelta));
|
|
691
|
+
this.span2.nativeElement.innerHTML = this.padValue(this.dateTimeInputDate.getMinutes());
|
|
692
|
+
this.setSpanSelection(this.span2.nativeElement);
|
|
693
|
+
}
|
|
694
|
+
toggleAMPM() {
|
|
695
|
+
this.span3.nativeElement.innerHTML =
|
|
696
|
+
this.span3.nativeElement.innerHTML === 'AM' ? 'PM' : 'AM';
|
|
697
|
+
const hoursToAdd = this.span3.nativeElement.innerHTML === 'AM' ? -12 : 12;
|
|
698
|
+
this.dateTimeInputDate = new Date(this.dateTimeInputDate.setHours(this.dateTimeInputDate.getHours() + hoursToAdd));
|
|
699
|
+
this.setSpanSelection(this.span3.nativeElement);
|
|
700
|
+
}
|
|
701
|
+
clearInput(event) {
|
|
702
|
+
this.clearInputEvent.emit(event);
|
|
703
|
+
this.setIsFocusInput(false);
|
|
704
|
+
this.resetDateTimeInputs();
|
|
705
|
+
}
|
|
706
|
+
onBlurInput(event) {
|
|
707
|
+
this.blurInputEvent.emit(event);
|
|
708
|
+
}
|
|
709
|
+
resetDateTimeInputs() {
|
|
710
|
+
if (this.span1)
|
|
711
|
+
if (this.inputConfig.name === InputConfigNameStringEnum.DATE_PICKER) {
|
|
712
|
+
this.span1.nativeElement.innerHTML = 'mm';
|
|
713
|
+
this.span2.nativeElement.innerHTML = 'dd';
|
|
714
|
+
this.span3.nativeElement.innerHTML = 'yy';
|
|
715
|
+
}
|
|
716
|
+
else if (this.inputConfig.name ===
|
|
717
|
+
InputConfigNameStringEnum.DATE_PICKER_BANK_CARD) {
|
|
718
|
+
this.span1.nativeElement.innerHTML = 'mm';
|
|
719
|
+
this.span2.nativeElement.innerHTML = 'yy';
|
|
720
|
+
}
|
|
721
|
+
else if (this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER) {
|
|
722
|
+
this.span1.nativeElement.innerHTML = 'HH';
|
|
723
|
+
this.span2.nativeElement.innerHTML = 'MM';
|
|
724
|
+
this.span3.nativeElement.innerHTML = 'AM';
|
|
725
|
+
}
|
|
726
|
+
this.setTimePickerTime();
|
|
727
|
+
this.newInputChanged = true;
|
|
728
|
+
this.setIsFocusInput(false);
|
|
729
|
+
this.showDateInput = false;
|
|
730
|
+
}
|
|
731
|
+
setTimePickerTime() {
|
|
732
|
+
if (this.inputConfig.name === InputConfigNameStringEnum.TIME_PICKER)
|
|
733
|
+
this.dateTimeInputDate = new Date(moment().format('MM/DD/YYYY') +
|
|
734
|
+
(this.inputConfig?.isFromDate ? ' 12:15' : ' 12:00'));
|
|
735
|
+
}
|
|
736
|
+
ngOnDestroy() {
|
|
737
|
+
this.destroy$.next();
|
|
738
|
+
this.destroy$.complete();
|
|
739
|
+
}
|
|
740
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaInputDatetimePickerComponent, deps: [{ token: i1.NgControl, self: true }, { token: i2.CalendarDateTimePickerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
741
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CaInputDatetimePickerComponent, isStandalone: true, selector: "app-ca-input-datetime-picker", inputs: { inputConfig: "inputConfig" }, outputs: { clearInputEvent: "clear", blurInputEvent: "blurInput", selectLastOneForSelectionEmitter: "selectLastOneForSelectionEmitter", selectLastOneAfterMouseUpEmitter: "selectLastOneAfterMouseUpEmitter", onDatePasteEmitter: "onDatePasteEmitter", onFocusEmitter: "onFocusEmitter", changeSelectionEmmiter: "changeSelectionEmmiter", setSelectionEmmiter: "setSelectionEmmiter" }, providers: [CalendarDateTimePickerService], viewQueries: [{ propertyName: "caInputPlaceholderIconComponent", first: true, predicate: CaInputPlaceholderIconComponent, descendants: true }, { propertyName: "dateTimePopover", first: true, predicate: ["dateTimePopover"], descendants: true }, { propertyName: "caInputComponent", first: true, predicate: CaInputComponent, descendants: true, static: true }, { propertyName: "span1", first: true, predicate: ["span1"], descendants: true }, { propertyName: "span2", first: true, predicate: ["span2"], descendants: true }, { propertyName: "span3", first: true, predicate: ["span3"], descendants: true }, { propertyName: "holder1", first: true, predicate: ["holder1"], descendants: true }], ngImport: i0, template: "<div\n class=\"datetime-picker-main-holder input-custom-group datetimeclass\"\n [ngClass]=\"\n getSuperControl\n | inputContainerClass\n : caInputComponent.isFocusInput\n : caInputComponent.isTouchedInput\n : inputConfig\n : getSuperControl?.value\n \"\n>\n <div\n #holder1\n class=\"date_time_holder input-control\"\n [class.active]=\"showDateInput\"\n tabindex=\"-1\"\n (mousedown)=\"selectLastOneForSelection()\"\n (mouseup)=\"selectLastOneAfterMouseUp()\"\n (paste)=\"onDatePaste($event)\"\n (keydown)=\"changeSelection($event, true)\"\n (click)=\"toggleDropdownOptions()\"\n [ngStyle]=\"{\n 'padding-left': inputConfig.isIconHidden ? '2px' : '27px'\n }\"\n [ngClass]=\"\n caInputComponent.isFocusInput\n | inputDatetimePickerClass\n : false\n : getSuperControl\n : inputConfig\n : caInputComponent.isTouchedInput\n : getSuperControl?.value\n \"\n >\n <span\n #span1\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"0\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'mm' : 'HH'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ':'\"\n ></div>\n </span>\n <span\n #span2\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"1\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'dd' : 'MM'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ' '\"\n ></div>\n </span>\n <span\n #span3\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"2\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'yy' : 'AM'\"\n ></span>\n </div>\n <app-ca-input\n [inputConfig]=\"inputConfig\"\n [dateTimePopover]=\"dateTimePopover\"\n (focusInputEvent)=\"handleFocusInput($event)\"\n (handleToggleDropdownOptions)=\"toggleDropdownOptions()\"\n (closePopover)=\"blurOnDateTime()\"\n (blurInput)=\"onBlurInput($event)\"\n (clear)=\"clearInput($event)\"\n [formControl]=\"getSuperControl! | formControl\"\n ></app-ca-input>\n</div>\n\n<!-- Popover for DateTime Pickers -->\n<ng-template #dateTimePopover let-data=\"data\">\n <div class=\"datetime-dropdown-holder\">\n <app-ca-custom-datetime-pickers\n [calendarType]=\"\n inputConfig.name === 'datepicker' ||\n inputConfig.name === 'datepickerBankCard'\n ? 'date'\n : 'time'\n \"\n [inputConfig]=\"inputConfig\"\n [placeholder]=\"'MM/DD/YY'\"\n [dateTime]=\"dateTimeInputDate\"\n (closePopover)=\"closePopover()\"\n ></app-ca-custom-datetime-pickers>\n </div>\n</ng-template>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap\";@import\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css\";.ca-font-thin{font-weight:100!important}.ca-font-extra-light{font-weight:200!important}.ca-font-light{font-weight:300!important}.ca-font-regular{font-weight:400!important}.ca-font-medium{font-weight:500!important}.ca-font-semi-bold{font-weight:600!important}.ca-font-bold{font-weight:700!important}.ca-font-extra-bold{font-weight:800!important}.ca-font-black{font-weight:900!important}.pickup-delivery-popover{top:-38px!important;max-width:340px!important}.pickup-delivery-popover.bs-popover-top{top:auto!important;bottom:-38px!important}.pickup-delivery-popover.bs-popover-top .load-component .assigned-load-holder{order:3;margin-top:4px;margin-bottom:0!important}.pickup-delivery-popover.bs-popover-top .load-component .statusBar{order:2;margin-top:4px}.pickup-delivery-popover.bs-popover-top .load-component .animation-three-tabs{order:1}.gps_dropdown_popover{top:-38px;max-width:494px}.gps_dropdown_popover .popover-body{padding:0}.table-progress-popover{background-color:unset!important;margin-left:-10px}.table-progress-popover .progress-dropdown{margin-top:-6px;width:260px;height:200px;background:#2f2f2f;border-radius:3px;padding:8px;box-shadow:0 0 4px #00000026;overflow:hidden;-webkit-animation:progressAnimation .25s ease-in-out;animation:progressAnimation .25s ease-in-out}.table-progress-popover .progress-dropdown .progress-header .progress-title{font-size:18px;font-weight:600;color:#dadada}.table-progress-popover .progress-dropdown .progress-header .progress-title span{font-weight:400}.table-progress-popover .progress-dropdown .progress-header .progress-total{font-size:14px;line-height:17px;color:#dadada}.table-progress-popover .progress-dropdown .table-progress-bar-container{width:100%;height:8px;margin-top:6px;border-radius:2px;overflow:hidden}.table-progress-popover .progress-dropdown .table-progress-bar-container .table-progress-bar{height:100%}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-dual-info-container .progress-info-container{width:50%}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container{margin-top:10px}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container .progress-info-title{margin-bottom:2px;font-size:11px;font-weight:700;line-height:14px;color:#ffffffb2}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container .progress-info-text{font-size:14px;line-height:18px;color:#dadada}.table-progress-popover .progress-dropdown.credit-dropdown{height:100px}@-webkit-keyframes progressAnimation{0%{height:0px}to{height:220px}}@keyframes progressAnimation{0%{height:0px}to{height:220px}}ngb-popover-window{padding:unset!important;border:unset!important}ngb-popover-window .popover-arrow{display:none!important}ngb-popover-window .popover-body{padding:unset!important}.dispatch-note .popover-body{position:relative;top:-4px;left:-4px}.tooltip{font-size:12px;position:relative}.tooltip.show{opacity:.83}.tooltip.fade:after,.tooltip.fade:before{transform:translateY(-10px);transition:all .15s ease-in-out}.tooltip.fade:hover:after,.tooltip.fade:hover:before{opacity:1;transform:translate(0)}.tooltip-inner{padding:4px 10px;white-space:nowrap;max-width:none;border-radius:3px}.tooltip-inner:empty{padding:0}.placeholder-delete .tooltip-inner{background-color:#f66}.placeholder-delete .arrow:before{border-top-color:#f66}.custom-popup-owners-for-flag .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(126%) translate(-50%)!important;width:130px;border-radius:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-for-flag .arrow{bottom:-18%;transform:rotate(180deg);left:calc(50% + 2.7rem)}.custom-popup-owners-for-flag .tooltip{opacity:.93!important;width:0}.custom-popup-owners{z-index:999}.custom-popup-owners .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(132%);z-index:999;box-shadow:0 0 3px #0003}.custom-popup-owners .arrow{bottom:-20%;transform:rotate(180deg)}.custom-popup-owners .tooltip{transform:translateY(-61px)!important}.custom-popup-owners-year{z-index:999}.custom-popup-owners-year .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(132%);z-index:999;box-shadow:0 0 3px #0003}.custom-popup-owners-year .arrow{bottom:-20%;transform:rotate(180deg)}.custom-popup-owners-year .tooltip{transform:translate(70px,-61px)!important}.custom-popup-owners-info .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(-100%) translate(-10%);width:200px;height:36px;display:flex;justify-content:center;align-items:center;border-radius:3px;margin-top:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-info .tooltip{opacity:.93;width:0}.custom-popup-owners-info .arrow{display:none}.custom-popup-owners-info #phone-inside{position:relative;right:26px;bottom:0}.custom-popup-owners-info-at .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(-108%) translate(-7%);width:270px;height:36px;display:flex;justify-content:center;align-items:center;border-radius:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-info-at .tooltip{opacity:1;width:0}.custom-popup-owners-info-at .arrow{display:none}.custom-popup-owners-for-tag .tooltip-inner{color:#3b3b3b;background-color:#fff;width:100px;border-radius:3px;box-shadow:0 0 3px #0003!important}.custom-popup-owners-for-tag .tooltip{top:5px!important}.custom-popup-owners-for-tag .arrow{bottom:-24%}.align-items-flex-start{justify-content:center;align-items:center}.align-items-flex-end{display:flex;justify-content:center;flex-direction:column;align-self:flex-end;align-items:flex-start}.label-add{align-self:flex-start}.fadeInLoad{animation:fadeInLoad .25s}@keyframes fadeInLoad{0%{opacity:0}to{opacity:1}}.fadeIn{opacity:1;-webkit-transition:.25s;-moz-transition:.25s;-o-transition:.25s;transition:.25s}.thisText:hover .fadeIn{opacity:0}.fadeInLoad{animation-name:example;animation-duration:.25s}@keyframes example{0%{transform:scale(.5)}to{transform:scale(1)}}.tooltip.tooltip-table-icons{left:12px!important;opacity:1}.tooltip.tooltip-table-icons .arrow{display:none!important}.tooltip.tooltip-table-icons .tooltip-inner{border-radius:0 50px 50px;background:#28529f}.tooltip.show{opacity:1;animation:fadeIn ease .5s!important;-webkit-animation:fadeIn ease .5s!important;-moz-animation:fadeIn ease .5s!important;-o-animation:fadeIn ease .5s!important;-ms-animation:fadeIn ease .5s!important}.ta-tooltip{position:absolute;font-size:12px;text-align:center;color:#fff;line-height:22px;z-index:999999!important;opacity:0;white-space:nowrap;transform:scale(.7)}.ta-tooltip.ta-tooltip-show{opacity:.85;transform:scale(1);padding:0 12px}.ta-tooltip.ta-tooltip-bottom-right,.ta-tooltip.ta-tooltip-bottom-right-corner{transform-origin:top left;border-radius:0 15px 15px}.ta-tooltip.ta-tooltip-bottom-left{transform-origin:top right;border-radius:15px 0 15px 15px}@keyframes scaleItem{0%{transform:scale(.4)}to{transform:scale(1)}}.app-ca-main-tooltip{pointer-events:none}.app-ca-main-tooltip .tooltip-inner{padding:0;background-color:transparent;pointer-events:none}.app-ca-main-tooltip .tooltip-inner .tooltip-holder{display:flex;font-size:11px;font-weight:700;border-radius:2px;padding:2px 8px;animation:scaleItem .3s;white-space:normal}.app-ca-main-tooltip .tooltip-inner .tooltip-holder:empty{padding:0}.tooltip-arrow{display:none!important}.trucks.semitruck svg path,.trucks.semisleeper svg path,.trucks.flatbed svg path,.trucks.stepdeck svg path,.trucks.lowboyrgn svg path,.trucks.chassis svg path,.trucks.conestoga svg path,.trucks.sidekit svg path,.trucks.container svg path,.trailers.semitruck svg path,.trailers.semisleeper svg path,.trailers.flatbed svg path,.trailers.stepdeck svg path,.trailers.lowboyrgn svg path,.trailers.chassis svg path,.trailers.conestoga svg path,.trailers.sidekit svg path,.trailers.container svg path{fill:#92b1f5}.trucks.boxtruck svg path,.trucks.reefertruck svg path,.trucks.cargovan svg path,.trucks.dryvan svg path,.trucks.reefer svg path,.trailers.boxtruck svg path,.trailers.reefertruck svg path,.trailers.cargovan svg path,.trailers.dryvan svg path,.trailers.reefer svg path{fill:#fbc88b}.trucks.dumptruck svg path,.trucks.cementtruck svg path,.trucks.garbagetruck svg path,.trucks.enddump svg path,.trucks.bottomdump svg path,.trucks.hopper svg path,.trucks.tanker svg path,.trucks.pneumatictanker svg path,.trailers.dumptruck svg path,.trailers.cementtruck svg path,.trailers.garbagetruck svg path,.trailers.enddump svg path,.trailers.bottomdump svg path,.trailers.hopper svg path,.trailers.tanker svg path,.trailers.pneumatictanker svg path{fill:#ed9292}.trucks.towtruck svg path,.trucks.carhauler svg path,.trucks.spotter svg path,.trucks.carhaulerstigner svg path,.trailers.towtruck svg path,.trailers.carhauler svg path,.trailers.spotter svg path,.trailers.carhaulerstigner svg path{fill:#86c9c3}.trucks .svgtext-template-text,.trailers .svgtext-template-text{color:#fff;transition:color .3s ease-in-out}.colors .black svg #droplet{fill:#6c6c6c}.colors .brown svg #droplet{fill:#a1887f}.colors .darkgreen svg #droplet{fill:#4db6a2}.colors .lightgreen svg #droplet{fill:#81c784}.colors .darkblue svg #droplet{fill:#546fd2}.colors .lightblue svg #droplet{fill:#64b5f6}.colors .gray svg #droplet{fill:#aaa}.colors .purple svg #droplet{fill:#ba68c8}.colors .gold svg #droplet{fill:#bcad79}.colors .silver svg #droplet{fill:#dadada}.colors .red svg #droplet{fill:#f96b69}.colors .pink svg #droplet{fill:#f26ec2}.colors .white svg #droplet{fill:#f1f1f1}.colors .orange svg #droplet{fill:#ff8a65}.colors .yellow svg #droplet{fill:#ffd54f}.colors:hover{transition:all .3s ease-in-out}.colors:hover .black svg #droplet{fill:#3c3c3c}.colors:hover .brown svg #droplet{fill:#8d6e63}.colors:hover .darkgreen svg #droplet{fill:#26a690}.colors:hover .lightgreen svg #droplet{fill:#66bb6a}.colors:hover .darkblue svg #droplet{fill:#304fc1}.colors:hover .lightblue svg #droplet{fill:#42a5f5}.colors:hover .gray svg #droplet{fill:#919191}.colors:hover .purple svg #droplet{fill:#ab47bc}.colors:hover .gold svg #droplet{fill:#aa9c6e}.colors:hover .silver svg #droplet{fill:#b7b7b7}.colors:hover .red svg #droplet{fill:#ef5350}.colors:hover .pink svg #droplet{fill:#fa4daa}.colors:hover .white svg #droplet{fill:#fff}.colors:hover .orange svg #droplet{fill:#ff7043}.colors:hover .yellow svg #droplet{fill:#ffca28}.text-color-black{color:#424242!important}.text-color-black::-moz-selection{background:#42424233!important;color:#424242!important}.text-color-black::selection{background:#42424233!important;color:#424242!important}.text-color-black-2{color:#2f2f2f!important}.text-color-black-2::-moz-selection{background:#2f2f2f33!important;color:#2f2f2f!important}.text-color-black-2::selection{background:#2f2f2f33!important;color:#2f2f2f!important}.text-color-muted{color:#919191!important}.text-color-muted::-moz-selection{background:#91919133!important;color:#919191!important}.text-color-muted::selection{background:#91919133!important;color:#919191!important}.text-color-green{color:#56b4ac!important}.text-color-green::-moz-selection{background:#56b4ac33!important;color:#56b4ac!important}.text-color-green::selection{background:#56b4ac33!important;color:#56b4ac!important}.text-color-blue-13{color:#6692f1!important}.text-color-blue-13::-moz-selection{background:#66921833!important;color:#6692f1!important}.text-color-blue-13::selection{background:#66921833!important;color:#6692f1!important}.text-color-blue-18{color:#3b73ed!important}.text-color-blue-18::-moz-selection{background:#3b73ed33!important;color:#3b73ed!important}.text-color-blue-18::selection{background:#3b73ed33!important;color:#3b73ed!important}.text-color-red-10{color:#e66767!important}.text-color-red-10::-moz-selection{background:#e6676733!important;color:#e66767!important}.text-color-red-10::selection{background:#e6676733!important;color:#e66767!important}.text-color-light-grey{color:#e5e5e5!important}.text-color-light-grey::-moz-selection{background:#e5e5e533!important;color:#e5e5e5!important}.text-color-light-grey::selection{background:#e5e5e533!important;color:#e5e5e5!important}.text-color-light-grey-2{color:#aaa!important}.text-color-light-grey-2::-moz-selection{background:#aaa3!important;color:#aaa!important}.text-color-light-grey-2::selection{background:#aaa3!important;color:#aaa!important}.text-color-light-grey-6{color:#ccc!important}.text-color-light-grey-6::-moz-selection{color:#ccc!important;background:#aaa3!important}.text-color-light-grey-6::selection{color:#ccc!important;background:#aaa3!important}.text-color-white{color:#dadada!important}.text-color-white::-moz-selection{color:#dadada!important;background:#fff3!important}.text-color-white::selection{color:#dadada!important;background:#fff3!important}.text-color-white-4{color:#ffffffb2!important}.text-color-white-4::-moz-selection{color:#ffffffb2!important;background:#fff3!important}.text-color-white-4::selection{color:#ffffffb2!important;background:#fff3!important}.text-color-dark-grey{color:#6c6c6c!important}.text-color-dark-grey::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-dark-grey::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw6-2{color:#6c6c6c!important}.text-color-bw6-2::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw6-2::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw-9{color:#dadada!important}.text-color-bw-9::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw-9::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-grey{color:#919191!important}.text-color-grey::-moz-selection{color:#919191!important;background:#91919133!important}.text-color-grey::selection{color:#919191!important;background:#91919133!important}.text-color-grey .address-text::-moz-selection,.text-color-grey .marker-bold-text::-moz-selection{color:#919191!important;background:#91919133!important}.text-color-grey .address-text::selection,.text-color-grey .marker-bold-text::selection{color:#919191!important;background:#91919133!important}.text-size-11{font-size:11px!important;line-height:14px!important}.text-size-14{font-size:14px!important;line-height:18px!important}.text-size-16{font-size:16px!important;line-height:19px!important}.text-size-18{font-size:18px!important;line-height:22px!important}.text-size-26{font-size:26px!important;line-height:32px!important}.text-size-28{font-size:28px!important;line-height:34px!important}@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.svg-fill-black svg path{fill:#424242!important}.svg-fill-muted svg path{fill:#919191!important}.svg-fill-bw-9 svg path{fill:#dadada!important}.svg-fill-light-grey-2 svg path{fill:#aaa!important}.svg-fill-light-grey-6 svg path{fill:#ccc!important}.svg-fill-blue-13 svg path{fill:#6692f1!important}.svg-fill-blue-19 svg path{fill:#92b1f5!important}.svg-fill-blue-26 svg path{fill:#4dc5eb!important}.svg-hover-muted svg path{transition:all .3s ease-in-out}.svg-hover-muted:hover svg path{fill:#919191!important}.svg-hover-black svg path{transition:all .3s ease-in-out}.svg-hover-black:hover svg path{fill:#424242!important}.svg-hover-blue-15 svg path{transition:all .3s ease-in-out}.svg-hover-blue-15:hover svg path{fill:#0b49d1!important}.svg-hover-bw6-2 svg path{transition:all .3s ease-in-out}.svg-hover-bw6-2:hover svg path{fill:#6c6c6c!important}.svg-hover-trash-red svg path{transition:all .3s ease-in-out}.svg-hover-trash-red:hover svg path{fill:#ff5050!important}.svg-hover-red-14 svg path{transition:all .3s ease-in-out}.svg-hover-red-14:hover svg path{fill:#c20c0c!important}.svg-size-12 svg{width:12px;height:12px}.svg-size-14 svg{width:14px;height:14px}.svg-size-16 svg{width:16px;height:16px}.svg-size-18 svg{width:18px;height:18px}.svg-size-44-16 svg{width:44px;height:16px}*{margin:0;font-family:Montserrat,sans-serif}html{scroll-behavior:auto!important}.gm-style-iw-chr,.gm-style-iw-tc{display:none}.gm-style .gm-style-iw-c{border-radius:0}.gm-style-iw{overflow-y:auto!important;overflow-x:hidden!important}.gm-style-iw>div{overflow:visible!important}.infoWindow{overflow:hidden!important}.gm-style-iw-d,.gm-style-iw.gm-style-iw-c{max-height:350px!important}::ng-deep .popover{--bs-popover-border-width: 0;--bs-popover-body-padding-y: 0;--bs-popover-body-padding-x: 0}::ng-deep .popover .popover-arrow{display:none}.datetime-picker-main-holder{position:relative}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover{transition:.3s ease-in-out}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear{display:inline-block}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:hover~.input-control{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:after:hover~.input-control{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.datetimeclass{border-radius:2px!important}.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-empty){background-color:#eee}.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-empty):hover{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.datetimeclass.invalid-empty-focus-out{background-color:#fae3e3}.datetime-picker-main-holder.input-custom-group.datetimeclass.invalid-empty-focus-out:hover{background-color:#f5c7c7}.datetime-picker-main-holder.input-custom-group.datetimeclass.valid-focus-out{background-color:#e2ecf9}.datetime-picker-main-holder.input-custom-group.datetimeclass.valid-focus-out:hover{background-color:#c5d8f3}.datetime-picker-main-holder.input-custom-group.datetimeclass.inactive-empty,.datetime-picker-main-holder.input-custom-group.datetimeclass.inactive-filled{background-color:#f7f7f7}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-empty){background-color:#424242}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-empty):hover{background-color:#6c6c6c}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.valid-focus-out-filled{background-color:red}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.valid-focus-out-filled:hover{background-color:#c5d8f3}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.inactive-empty,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.inactive-filled{background-color:#f7f7f7}\n", "@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.date_time_holder{display:flex;align-items:center;position:absolute;top:0;width:100%;height:100%;padding:0 6px;opacity:0;z-index:20;cursor:text}.date_time_holder span{position:relative;line-height:14px;display:flex;height:100%;align-items:center;z-index:10}.date_time_holder span .border-picker{position:absolute;top:0;left:50%;transform:translate(-50%);height:100%;display:flex;align-items:center;justify-content:center;width:0px}.date_time_holder span::selection{background-color:#fff3;color:#fff}.date_time_holder span div::selection{background-color:#fff3;color:#fff}.date_time_holder::selection{background-color:transparent!important;color:#fff}.date_time_holder span.main{padding:0 2px;outline:none;font-size:14px;z-index:11}.date_time_holder span.main::selection{z-index:10}.date_time_holder span.main:first-child{padding-left:4px}.date_time_holder span.reset-selection-color::selection{background-color:transparent!important;color:#2f2f2f!important}.date_time_holder.focus{opacity:1;padding-left:35px}.date_time_holder.focus span:nth-child(2){z-index:12;pointer-events:none}.date_time_holder.focus span:nth-child(3){z-index:13}.date_time_holder.focus span:nth-child(4){z-index:14;pointer-events:none}.date_time_holder.focus span:nth-child(5){z-index:15}.date_time_holder.valid-focus-out-filled{opacity:1}.date_time_holder.valid-focus-out-filled span,.date_time_holder.valid-focus-out-filled span .border-picker{color:#2f2f2f!important;-webkit-user-select:none;user-select:none}.date_time_holder.dark.valid-focus-out-filled{background:#3b73ed33!important}.date_time_holder.dark.valid-focus-out-filled span,.date_time_holder.dark.valid-focus-out-filled span .border-picker{color:#fff!important}.date_time_holder.dark.valid-focus-out-filled:hover{background:#3b73ed66!important}.date_time_holder.dark.valid-focus-in{background:#0b49d1!important}.date_time_holder.dark.valid-focus-in span,.date_time_holder.dark.valid-focus-in span .border-picker{color:#fff!important}.date_time_holder.focus{background-color:#1d1d1d;color:#fff;transition:.2s ease-in-out}.date_time_holder.valid-focus-in{opacity:1}.date_time_holder.valid-focus-in::selection,.date_time_holder.valid-focus-in div::selection{background-color:#fff3;color:#fff}.date_time_holder.invalid-focus-out-filled{opacity:1}.date_time_holder.date_time_holder_bank_card span.main{padding:0 3px}\n"], dependencies: [{ kind: "ngmodule", type:
|
|
742
|
+
// modules
|
|
743
|
+
CommonModule }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: AngularSvgIconModule }, { kind: "component", type:
|
|
744
|
+
// components
|
|
745
|
+
CaInputComponent, selector: "app-ca-input", inputs: ["inputConfig", "dateTimePopover", "incorrectValue", "selectedDropdownLabelColor", "template"], outputs: ["handleToggleDropdownOptions", "incorrectEvent", "blurInput", "focusInput", "change", "commandEvent", "clear", "showHideDropdown", "dropDownKeyNavigation"] }, { kind: "component", type: CaCustomDatetimePickersComponent, selector: "app-ca-custom-datetime-pickers", inputs: ["dateTime", "inputConfig", "calendarType", "placeholder"], outputs: ["closePopover"] }, { kind: "pipe", type:
|
|
746
|
+
// pipes
|
|
747
|
+
InputDatetimePickerClassPipe, name: "inputDatetimePickerClass" }, { kind: "pipe", type: InputContainerClassPipe, name: "inputContainerClass" }, { kind: "pipe", type: FormControlPipe, name: "formControl" }] }); }
|
|
748
|
+
}
|
|
749
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CaInputDatetimePickerComponent, decorators: [{
|
|
750
|
+
type: Component,
|
|
751
|
+
args: [{ selector: 'app-ca-input-datetime-picker', standalone: true, imports: [
|
|
752
|
+
// modules
|
|
753
|
+
CommonModule,
|
|
754
|
+
FormsModule,
|
|
755
|
+
ReactiveFormsModule,
|
|
756
|
+
AngularSvgIconModule,
|
|
757
|
+
// components
|
|
758
|
+
CaInputComponent,
|
|
759
|
+
CaCustomDatetimePickersComponent,
|
|
760
|
+
// pipes
|
|
761
|
+
InputDatetimePickerClassPipe,
|
|
762
|
+
InputContainerClassPipe,
|
|
763
|
+
FormControlPipe,
|
|
764
|
+
], providers: [CalendarDateTimePickerService], template: "<div\n class=\"datetime-picker-main-holder input-custom-group datetimeclass\"\n [ngClass]=\"\n getSuperControl\n | inputContainerClass\n : caInputComponent.isFocusInput\n : caInputComponent.isTouchedInput\n : inputConfig\n : getSuperControl?.value\n \"\n>\n <div\n #holder1\n class=\"date_time_holder input-control\"\n [class.active]=\"showDateInput\"\n tabindex=\"-1\"\n (mousedown)=\"selectLastOneForSelection()\"\n (mouseup)=\"selectLastOneAfterMouseUp()\"\n (paste)=\"onDatePaste($event)\"\n (keydown)=\"changeSelection($event, true)\"\n (click)=\"toggleDropdownOptions()\"\n [ngStyle]=\"{\n 'padding-left': inputConfig.isIconHidden ? '2px' : '27px'\n }\"\n [ngClass]=\"\n caInputComponent.isFocusInput\n | inputDatetimePickerClass\n : false\n : getSuperControl\n : inputConfig\n : caInputComponent.isTouchedInput\n : getSuperControl?.value\n \"\n >\n <span\n #span1\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"0\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'mm' : 'HH'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ':'\"\n ></div>\n </span>\n <span\n #span2\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"1\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'dd' : 'MM'\"\n ></span>\n <span>\n <div\n class=\"border-picker\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? '/' : ' '\"\n ></div>\n </span>\n <span\n #span3\n class=\"main\"\n [ngClass]=\"{\n 'reset-selection-color': !caInputComponent.isFocusInput\n }\"\n tabindex=\"2\"\n (mouseup)=\"setSelection($event)\"\n (keydown)=\"changeSelection($event)\"\n [innerHTML]=\"inputConfig.name === 'datepicker' ? 'yy' : 'AM'\"\n ></span>\n </div>\n <app-ca-input\n [inputConfig]=\"inputConfig\"\n [dateTimePopover]=\"dateTimePopover\"\n (focusInputEvent)=\"handleFocusInput($event)\"\n (handleToggleDropdownOptions)=\"toggleDropdownOptions()\"\n (closePopover)=\"blurOnDateTime()\"\n (blurInput)=\"onBlurInput($event)\"\n (clear)=\"clearInput($event)\"\n [formControl]=\"getSuperControl! | formControl\"\n ></app-ca-input>\n</div>\n\n<!-- Popover for DateTime Pickers -->\n<ng-template #dateTimePopover let-data=\"data\">\n <div class=\"datetime-dropdown-holder\">\n <app-ca-custom-datetime-pickers\n [calendarType]=\"\n inputConfig.name === 'datepicker' ||\n inputConfig.name === 'datepickerBankCard'\n ? 'date'\n : 'time'\n \"\n [inputConfig]=\"inputConfig\"\n [placeholder]=\"'MM/DD/YY'\"\n [dateTime]=\"dateTimeInputDate\"\n (closePopover)=\"closePopover()\"\n ></app-ca-custom-datetime-pickers>\n </div>\n</ng-template>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap\";@import\"https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css\";.ca-font-thin{font-weight:100!important}.ca-font-extra-light{font-weight:200!important}.ca-font-light{font-weight:300!important}.ca-font-regular{font-weight:400!important}.ca-font-medium{font-weight:500!important}.ca-font-semi-bold{font-weight:600!important}.ca-font-bold{font-weight:700!important}.ca-font-extra-bold{font-weight:800!important}.ca-font-black{font-weight:900!important}.pickup-delivery-popover{top:-38px!important;max-width:340px!important}.pickup-delivery-popover.bs-popover-top{top:auto!important;bottom:-38px!important}.pickup-delivery-popover.bs-popover-top .load-component .assigned-load-holder{order:3;margin-top:4px;margin-bottom:0!important}.pickup-delivery-popover.bs-popover-top .load-component .statusBar{order:2;margin-top:4px}.pickup-delivery-popover.bs-popover-top .load-component .animation-three-tabs{order:1}.gps_dropdown_popover{top:-38px;max-width:494px}.gps_dropdown_popover .popover-body{padding:0}.table-progress-popover{background-color:unset!important;margin-left:-10px}.table-progress-popover .progress-dropdown{margin-top:-6px;width:260px;height:200px;background:#2f2f2f;border-radius:3px;padding:8px;box-shadow:0 0 4px #00000026;overflow:hidden;-webkit-animation:progressAnimation .25s ease-in-out;animation:progressAnimation .25s ease-in-out}.table-progress-popover .progress-dropdown .progress-header .progress-title{font-size:18px;font-weight:600;color:#dadada}.table-progress-popover .progress-dropdown .progress-header .progress-title span{font-weight:400}.table-progress-popover .progress-dropdown .progress-header .progress-total{font-size:14px;line-height:17px;color:#dadada}.table-progress-popover .progress-dropdown .table-progress-bar-container{width:100%;height:8px;margin-top:6px;border-radius:2px;overflow:hidden}.table-progress-popover .progress-dropdown .table-progress-bar-container .table-progress-bar{height:100%}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-dual-info-container .progress-info-container{width:50%}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container{margin-top:10px}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container .progress-info-title{margin-bottom:2px;font-size:11px;font-weight:700;line-height:14px;color:#ffffffb2}.table-progress-popover .progress-dropdown .progress-dropdown-body .progress-info-container .progress-info-text{font-size:14px;line-height:18px;color:#dadada}.table-progress-popover .progress-dropdown.credit-dropdown{height:100px}@-webkit-keyframes progressAnimation{0%{height:0px}to{height:220px}}@keyframes progressAnimation{0%{height:0px}to{height:220px}}ngb-popover-window{padding:unset!important;border:unset!important}ngb-popover-window .popover-arrow{display:none!important}ngb-popover-window .popover-body{padding:unset!important}.dispatch-note .popover-body{position:relative;top:-4px;left:-4px}.tooltip{font-size:12px;position:relative}.tooltip.show{opacity:.83}.tooltip.fade:after,.tooltip.fade:before{transform:translateY(-10px);transition:all .15s ease-in-out}.tooltip.fade:hover:after,.tooltip.fade:hover:before{opacity:1;transform:translate(0)}.tooltip-inner{padding:4px 10px;white-space:nowrap;max-width:none;border-radius:3px}.tooltip-inner:empty{padding:0}.placeholder-delete .tooltip-inner{background-color:#f66}.placeholder-delete .arrow:before{border-top-color:#f66}.custom-popup-owners-for-flag .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(126%) translate(-50%)!important;width:130px;border-radius:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-for-flag .arrow{bottom:-18%;transform:rotate(180deg);left:calc(50% + 2.7rem)}.custom-popup-owners-for-flag .tooltip{opacity:.93!important;width:0}.custom-popup-owners{z-index:999}.custom-popup-owners .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(132%);z-index:999;box-shadow:0 0 3px #0003}.custom-popup-owners .arrow{bottom:-20%;transform:rotate(180deg)}.custom-popup-owners .tooltip{transform:translateY(-61px)!important}.custom-popup-owners-year{z-index:999}.custom-popup-owners-year .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(132%);z-index:999;box-shadow:0 0 3px #0003}.custom-popup-owners-year .arrow{bottom:-20%;transform:rotate(180deg)}.custom-popup-owners-year .tooltip{transform:translate(70px,-61px)!important}.custom-popup-owners-info .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(-100%) translate(-10%);width:200px;height:36px;display:flex;justify-content:center;align-items:center;border-radius:3px;margin-top:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-info .tooltip{opacity:.93;width:0}.custom-popup-owners-info .arrow{display:none}.custom-popup-owners-info #phone-inside{position:relative;right:26px;bottom:0}.custom-popup-owners-info-at .tooltip-inner{color:#3b3b3b;background-color:#fff;transform:translateY(-108%) translate(-7%);width:270px;height:36px;display:flex;justify-content:center;align-items:center;border-radius:3px;box-shadow:0 0 3px #0003}.custom-popup-owners-info-at .tooltip{opacity:1;width:0}.custom-popup-owners-info-at .arrow{display:none}.custom-popup-owners-for-tag .tooltip-inner{color:#3b3b3b;background-color:#fff;width:100px;border-radius:3px;box-shadow:0 0 3px #0003!important}.custom-popup-owners-for-tag .tooltip{top:5px!important}.custom-popup-owners-for-tag .arrow{bottom:-24%}.align-items-flex-start{justify-content:center;align-items:center}.align-items-flex-end{display:flex;justify-content:center;flex-direction:column;align-self:flex-end;align-items:flex-start}.label-add{align-self:flex-start}.fadeInLoad{animation:fadeInLoad .25s}@keyframes fadeInLoad{0%{opacity:0}to{opacity:1}}.fadeIn{opacity:1;-webkit-transition:.25s;-moz-transition:.25s;-o-transition:.25s;transition:.25s}.thisText:hover .fadeIn{opacity:0}.fadeInLoad{animation-name:example;animation-duration:.25s}@keyframes example{0%{transform:scale(.5)}to{transform:scale(1)}}.tooltip.tooltip-table-icons{left:12px!important;opacity:1}.tooltip.tooltip-table-icons .arrow{display:none!important}.tooltip.tooltip-table-icons .tooltip-inner{border-radius:0 50px 50px;background:#28529f}.tooltip.show{opacity:1;animation:fadeIn ease .5s!important;-webkit-animation:fadeIn ease .5s!important;-moz-animation:fadeIn ease .5s!important;-o-animation:fadeIn ease .5s!important;-ms-animation:fadeIn ease .5s!important}.ta-tooltip{position:absolute;font-size:12px;text-align:center;color:#fff;line-height:22px;z-index:999999!important;opacity:0;white-space:nowrap;transform:scale(.7)}.ta-tooltip.ta-tooltip-show{opacity:.85;transform:scale(1);padding:0 12px}.ta-tooltip.ta-tooltip-bottom-right,.ta-tooltip.ta-tooltip-bottom-right-corner{transform-origin:top left;border-radius:0 15px 15px}.ta-tooltip.ta-tooltip-bottom-left{transform-origin:top right;border-radius:15px 0 15px 15px}@keyframes scaleItem{0%{transform:scale(.4)}to{transform:scale(1)}}.app-ca-main-tooltip{pointer-events:none}.app-ca-main-tooltip .tooltip-inner{padding:0;background-color:transparent;pointer-events:none}.app-ca-main-tooltip .tooltip-inner .tooltip-holder{display:flex;font-size:11px;font-weight:700;border-radius:2px;padding:2px 8px;animation:scaleItem .3s;white-space:normal}.app-ca-main-tooltip .tooltip-inner .tooltip-holder:empty{padding:0}.tooltip-arrow{display:none!important}.trucks.semitruck svg path,.trucks.semisleeper svg path,.trucks.flatbed svg path,.trucks.stepdeck svg path,.trucks.lowboyrgn svg path,.trucks.chassis svg path,.trucks.conestoga svg path,.trucks.sidekit svg path,.trucks.container svg path,.trailers.semitruck svg path,.trailers.semisleeper svg path,.trailers.flatbed svg path,.trailers.stepdeck svg path,.trailers.lowboyrgn svg path,.trailers.chassis svg path,.trailers.conestoga svg path,.trailers.sidekit svg path,.trailers.container svg path{fill:#92b1f5}.trucks.boxtruck svg path,.trucks.reefertruck svg path,.trucks.cargovan svg path,.trucks.dryvan svg path,.trucks.reefer svg path,.trailers.boxtruck svg path,.trailers.reefertruck svg path,.trailers.cargovan svg path,.trailers.dryvan svg path,.trailers.reefer svg path{fill:#fbc88b}.trucks.dumptruck svg path,.trucks.cementtruck svg path,.trucks.garbagetruck svg path,.trucks.enddump svg path,.trucks.bottomdump svg path,.trucks.hopper svg path,.trucks.tanker svg path,.trucks.pneumatictanker svg path,.trailers.dumptruck svg path,.trailers.cementtruck svg path,.trailers.garbagetruck svg path,.trailers.enddump svg path,.trailers.bottomdump svg path,.trailers.hopper svg path,.trailers.tanker svg path,.trailers.pneumatictanker svg path{fill:#ed9292}.trucks.towtruck svg path,.trucks.carhauler svg path,.trucks.spotter svg path,.trucks.carhaulerstigner svg path,.trailers.towtruck svg path,.trailers.carhauler svg path,.trailers.spotter svg path,.trailers.carhaulerstigner svg path{fill:#86c9c3}.trucks .svgtext-template-text,.trailers .svgtext-template-text{color:#fff;transition:color .3s ease-in-out}.colors .black svg #droplet{fill:#6c6c6c}.colors .brown svg #droplet{fill:#a1887f}.colors .darkgreen svg #droplet{fill:#4db6a2}.colors .lightgreen svg #droplet{fill:#81c784}.colors .darkblue svg #droplet{fill:#546fd2}.colors .lightblue svg #droplet{fill:#64b5f6}.colors .gray svg #droplet{fill:#aaa}.colors .purple svg #droplet{fill:#ba68c8}.colors .gold svg #droplet{fill:#bcad79}.colors .silver svg #droplet{fill:#dadada}.colors .red svg #droplet{fill:#f96b69}.colors .pink svg #droplet{fill:#f26ec2}.colors .white svg #droplet{fill:#f1f1f1}.colors .orange svg #droplet{fill:#ff8a65}.colors .yellow svg #droplet{fill:#ffd54f}.colors:hover{transition:all .3s ease-in-out}.colors:hover .black svg #droplet{fill:#3c3c3c}.colors:hover .brown svg #droplet{fill:#8d6e63}.colors:hover .darkgreen svg #droplet{fill:#26a690}.colors:hover .lightgreen svg #droplet{fill:#66bb6a}.colors:hover .darkblue svg #droplet{fill:#304fc1}.colors:hover .lightblue svg #droplet{fill:#42a5f5}.colors:hover .gray svg #droplet{fill:#919191}.colors:hover .purple svg #droplet{fill:#ab47bc}.colors:hover .gold svg #droplet{fill:#aa9c6e}.colors:hover .silver svg #droplet{fill:#b7b7b7}.colors:hover .red svg #droplet{fill:#ef5350}.colors:hover .pink svg #droplet{fill:#fa4daa}.colors:hover .white svg #droplet{fill:#fff}.colors:hover .orange svg #droplet{fill:#ff7043}.colors:hover .yellow svg #droplet{fill:#ffca28}.text-color-black{color:#424242!important}.text-color-black::-moz-selection{background:#42424233!important;color:#424242!important}.text-color-black::selection{background:#42424233!important;color:#424242!important}.text-color-black-2{color:#2f2f2f!important}.text-color-black-2::-moz-selection{background:#2f2f2f33!important;color:#2f2f2f!important}.text-color-black-2::selection{background:#2f2f2f33!important;color:#2f2f2f!important}.text-color-muted{color:#919191!important}.text-color-muted::-moz-selection{background:#91919133!important;color:#919191!important}.text-color-muted::selection{background:#91919133!important;color:#919191!important}.text-color-green{color:#56b4ac!important}.text-color-green::-moz-selection{background:#56b4ac33!important;color:#56b4ac!important}.text-color-green::selection{background:#56b4ac33!important;color:#56b4ac!important}.text-color-blue-13{color:#6692f1!important}.text-color-blue-13::-moz-selection{background:#66921833!important;color:#6692f1!important}.text-color-blue-13::selection{background:#66921833!important;color:#6692f1!important}.text-color-blue-18{color:#3b73ed!important}.text-color-blue-18::-moz-selection{background:#3b73ed33!important;color:#3b73ed!important}.text-color-blue-18::selection{background:#3b73ed33!important;color:#3b73ed!important}.text-color-red-10{color:#e66767!important}.text-color-red-10::-moz-selection{background:#e6676733!important;color:#e66767!important}.text-color-red-10::selection{background:#e6676733!important;color:#e66767!important}.text-color-light-grey{color:#e5e5e5!important}.text-color-light-grey::-moz-selection{background:#e5e5e533!important;color:#e5e5e5!important}.text-color-light-grey::selection{background:#e5e5e533!important;color:#e5e5e5!important}.text-color-light-grey-2{color:#aaa!important}.text-color-light-grey-2::-moz-selection{background:#aaa3!important;color:#aaa!important}.text-color-light-grey-2::selection{background:#aaa3!important;color:#aaa!important}.text-color-light-grey-6{color:#ccc!important}.text-color-light-grey-6::-moz-selection{color:#ccc!important;background:#aaa3!important}.text-color-light-grey-6::selection{color:#ccc!important;background:#aaa3!important}.text-color-white{color:#dadada!important}.text-color-white::-moz-selection{color:#dadada!important;background:#fff3!important}.text-color-white::selection{color:#dadada!important;background:#fff3!important}.text-color-white-4{color:#ffffffb2!important}.text-color-white-4::-moz-selection{color:#ffffffb2!important;background:#fff3!important}.text-color-white-4::selection{color:#ffffffb2!important;background:#fff3!important}.text-color-dark-grey{color:#6c6c6c!important}.text-color-dark-grey::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-dark-grey::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw6-2{color:#6c6c6c!important}.text-color-bw6-2::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw6-2::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw-9{color:#dadada!important}.text-color-bw-9::-moz-selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-bw-9::selection{color:#6c6c6c!important;background:#6c6c6c33!important}.text-color-grey{color:#919191!important}.text-color-grey::-moz-selection{color:#919191!important;background:#91919133!important}.text-color-grey::selection{color:#919191!important;background:#91919133!important}.text-color-grey .address-text::-moz-selection,.text-color-grey .marker-bold-text::-moz-selection{color:#919191!important;background:#91919133!important}.text-color-grey .address-text::selection,.text-color-grey .marker-bold-text::selection{color:#919191!important;background:#91919133!important}.text-size-11{font-size:11px!important;line-height:14px!important}.text-size-14{font-size:14px!important;line-height:18px!important}.text-size-16{font-size:16px!important;line-height:19px!important}.text-size-18{font-size:18px!important;line-height:22px!important}.text-size-26{font-size:26px!important;line-height:32px!important}.text-size-28{font-size:28px!important;line-height:34px!important}@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.svg-fill-black svg path{fill:#424242!important}.svg-fill-muted svg path{fill:#919191!important}.svg-fill-bw-9 svg path{fill:#dadada!important}.svg-fill-light-grey-2 svg path{fill:#aaa!important}.svg-fill-light-grey-6 svg path{fill:#ccc!important}.svg-fill-blue-13 svg path{fill:#6692f1!important}.svg-fill-blue-19 svg path{fill:#92b1f5!important}.svg-fill-blue-26 svg path{fill:#4dc5eb!important}.svg-hover-muted svg path{transition:all .3s ease-in-out}.svg-hover-muted:hover svg path{fill:#919191!important}.svg-hover-black svg path{transition:all .3s ease-in-out}.svg-hover-black:hover svg path{fill:#424242!important}.svg-hover-blue-15 svg path{transition:all .3s ease-in-out}.svg-hover-blue-15:hover svg path{fill:#0b49d1!important}.svg-hover-bw6-2 svg path{transition:all .3s ease-in-out}.svg-hover-bw6-2:hover svg path{fill:#6c6c6c!important}.svg-hover-trash-red svg path{transition:all .3s ease-in-out}.svg-hover-trash-red:hover svg path{fill:#ff5050!important}.svg-hover-red-14 svg path{transition:all .3s ease-in-out}.svg-hover-red-14:hover svg path{fill:#c20c0c!important}.svg-size-12 svg{width:12px;height:12px}.svg-size-14 svg{width:14px;height:14px}.svg-size-16 svg{width:16px;height:16px}.svg-size-18 svg{width:18px;height:18px}.svg-size-44-16 svg{width:44px;height:16px}*{margin:0;font-family:Montserrat,sans-serif}html{scroll-behavior:auto!important}.gm-style-iw-chr,.gm-style-iw-tc{display:none}.gm-style .gm-style-iw-c{border-radius:0}.gm-style-iw{overflow-y:auto!important;overflow-x:hidden!important}.gm-style-iw>div{overflow:visible!important}.infoWindow{overflow:hidden!important}.gm-style-iw-d,.gm-style-iw.gm-style-iw-c{max-height:350px!important}::ng-deep .popover{--bs-popover-border-width: 0;--bs-popover-body-padding-y: 0;--bs-popover-body-padding-x: 0}::ng-deep .popover .popover-arrow{display:none}.datetime-picker-main-holder{position:relative}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover{transition:.3s ease-in-out}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear{display:inline-block}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:hover~.input-control{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-dropdown-arrow:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-icon:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover app-ca-input-placeholder-icon:after:hover~.input-control,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:before:hover,.datetime-picker-main-holder.input-custom-group.custom-filled-hover:hover .input-clear:after:hover~.input-control{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.datetimeclass{border-radius:2px!important}.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-empty){background-color:#eee}.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.valid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass:not(.invalid-focus-out-empty):hover{background-color:#dadada}.datetime-picker-main-holder.input-custom-group.datetimeclass.invalid-empty-focus-out{background-color:#fae3e3}.datetime-picker-main-holder.input-custom-group.datetimeclass.invalid-empty-focus-out:hover{background-color:#f5c7c7}.datetime-picker-main-holder.input-custom-group.datetimeclass.valid-focus-out{background-color:#e2ecf9}.datetime-picker-main-holder.input-custom-group.datetimeclass.valid-focus-out:hover{background-color:#c5d8f3}.datetime-picker-main-holder.input-custom-group.datetimeclass.inactive-empty,.datetime-picker-main-holder.input-custom-group.datetimeclass.inactive-filled{background-color:#f7f7f7}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out-filled),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-in),.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-empty){background-color:#424242}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.valid-focus-out-filled):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-in):hover,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark:not(.invalid-focus-out-empty):hover{background-color:#6c6c6c}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.valid-focus-out-filled{background-color:red}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.valid-focus-out-filled:hover{background-color:#c5d8f3}.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.inactive-empty,.datetime-picker-main-holder.input-custom-group.datetimeclass.dark.inactive-filled{background-color:#f7f7f7}\n", "@keyframes dropdown{0%{margin-top:20px;visibility:hidden;opacity:0}to{opacity:1;margin-top:10px;visibility:visible!important}}@keyframes dropup{0%{margin-top:-19px;visibility:hidden;opacity:0}to{margin-top:inherit;visibility:visible!important}}.date_time_holder{display:flex;align-items:center;position:absolute;top:0;width:100%;height:100%;padding:0 6px;opacity:0;z-index:20;cursor:text}.date_time_holder span{position:relative;line-height:14px;display:flex;height:100%;align-items:center;z-index:10}.date_time_holder span .border-picker{position:absolute;top:0;left:50%;transform:translate(-50%);height:100%;display:flex;align-items:center;justify-content:center;width:0px}.date_time_holder span::selection{background-color:#fff3;color:#fff}.date_time_holder span div::selection{background-color:#fff3;color:#fff}.date_time_holder::selection{background-color:transparent!important;color:#fff}.date_time_holder span.main{padding:0 2px;outline:none;font-size:14px;z-index:11}.date_time_holder span.main::selection{z-index:10}.date_time_holder span.main:first-child{padding-left:4px}.date_time_holder span.reset-selection-color::selection{background-color:transparent!important;color:#2f2f2f!important}.date_time_holder.focus{opacity:1;padding-left:35px}.date_time_holder.focus span:nth-child(2){z-index:12;pointer-events:none}.date_time_holder.focus span:nth-child(3){z-index:13}.date_time_holder.focus span:nth-child(4){z-index:14;pointer-events:none}.date_time_holder.focus span:nth-child(5){z-index:15}.date_time_holder.valid-focus-out-filled{opacity:1}.date_time_holder.valid-focus-out-filled span,.date_time_holder.valid-focus-out-filled span .border-picker{color:#2f2f2f!important;-webkit-user-select:none;user-select:none}.date_time_holder.dark.valid-focus-out-filled{background:#3b73ed33!important}.date_time_holder.dark.valid-focus-out-filled span,.date_time_holder.dark.valid-focus-out-filled span .border-picker{color:#fff!important}.date_time_holder.dark.valid-focus-out-filled:hover{background:#3b73ed66!important}.date_time_holder.dark.valid-focus-in{background:#0b49d1!important}.date_time_holder.dark.valid-focus-in span,.date_time_holder.dark.valid-focus-in span .border-picker{color:#fff!important}.date_time_holder.focus{background-color:#1d1d1d;color:#fff;transition:.2s ease-in-out}.date_time_holder.valid-focus-in{opacity:1}.date_time_holder.valid-focus-in::selection,.date_time_holder.valid-focus-in div::selection{background-color:#fff3;color:#fff}.date_time_holder.invalid-focus-out-filled{opacity:1}.date_time_holder.date_time_holder_bank_card span.main{padding:0 3px}\n"] }]
|
|
765
|
+
}], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
|
|
766
|
+
type: Self
|
|
767
|
+
}] }, { type: i2.CalendarDateTimePickerService }], propDecorators: { inputConfig: [{
|
|
768
|
+
type: Input
|
|
769
|
+
}], clearInputEvent: [{
|
|
770
|
+
type: Output,
|
|
771
|
+
args: ['clear']
|
|
772
|
+
}], blurInputEvent: [{
|
|
773
|
+
type: Output,
|
|
774
|
+
args: ['blurInput']
|
|
775
|
+
}], caInputPlaceholderIconComponent: [{
|
|
776
|
+
type: ViewChild,
|
|
777
|
+
args: [CaInputPlaceholderIconComponent]
|
|
778
|
+
}], dateTimePopover: [{
|
|
779
|
+
type: ViewChild,
|
|
780
|
+
args: ['dateTimePopover']
|
|
781
|
+
}], caInputComponent: [{
|
|
782
|
+
type: ViewChild,
|
|
783
|
+
args: [CaInputComponent, { static: true }]
|
|
784
|
+
}], selectLastOneForSelectionEmitter: [{
|
|
785
|
+
type: Output
|
|
786
|
+
}], selectLastOneAfterMouseUpEmitter: [{
|
|
787
|
+
type: Output
|
|
788
|
+
}], onDatePasteEmitter: [{
|
|
789
|
+
type: Output
|
|
790
|
+
}], onFocusEmitter: [{
|
|
791
|
+
type: Output
|
|
792
|
+
}], changeSelectionEmmiter: [{
|
|
793
|
+
type: Output
|
|
794
|
+
}], setSelectionEmmiter: [{
|
|
795
|
+
type: Output
|
|
796
|
+
}], span1: [{
|
|
797
|
+
type: ViewChild,
|
|
798
|
+
args: ['span1', { static: false }]
|
|
799
|
+
}], span2: [{
|
|
800
|
+
type: ViewChild,
|
|
801
|
+
args: ['span2', { static: false }]
|
|
802
|
+
}], span3: [{
|
|
803
|
+
type: ViewChild,
|
|
804
|
+
args: ['span3', { static: false }]
|
|
805
|
+
}], holder1: [{
|
|
806
|
+
type: ViewChild,
|
|
807
|
+
args: ['holder1', { static: false }]
|
|
808
|
+
}] } });
|
|
809
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NhLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZGF0ZXRpbWUtcGlja2VyL2NhLWlucHV0LWRhdGV0aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLFdBQVcsRUFFWCxtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsVUFBVTtBQUNWLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkxQyxPQUFPLEVBQW9CLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJFLE9BQU87QUFDUCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDRCQUE0QixHQUM3QixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLGFBQWE7QUFDYixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN0SCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxzRkFBc0YsQ0FB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ZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2VsZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3Jtc01vZHVsZSxcbiAgTmdDb250cm9sLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vLyBJbXBvcnRzXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBOZ2JQb3BvdmVyIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbi8vIE1vZGVsc1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jYS1pbnB1dC9jb25maWcnO1xuaW1wb3J0IHsgSW5wdXRDaGFuZ2VWYWx1ZSwgSW5wdXRTdmdSb3V0ZXMgfSBmcm9tICcuLi9jYS1pbnB1dC91dGlscyc7XG5cbi8vIFBpcGVcbmltcG9ydCB7XG4gIElucHV0Q29udGFpbmVyQ2xhc3NQaXBlLFxuICBJbnB1dERhdGV0aW1lUGlja2VyQ2xhc3NQaXBlLFxufSBmcm9tICcuLi9jYS1pbnB1dC9waXBlcyc7XG5cbi8vIENvbXBvbmVudHNcbmltcG9ydCB7IENhSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi9jYS1pbnB1dC9jYS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FDdXN0b21EYXRldGltZVBpY2tlcnNDb21wb25lbnQgfSBmcm9tICcuLi9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycy9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NhLWlucHV0L2NvbXBvbmVudHMvY2EtaW5wdXQtcGxhY2Vob2xkZXItaWNvbi9jYS1pbnB1dC1wbGFjZWhvbGRlci1pY29uLmNvbXBvbmVudCc7XG5cbi8vIEVudW1zXG5pbXBvcnQgeyBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtIH0gZnJvbSAnLi4vY2EtaW5wdXQvZW51bXMnO1xuXG4vLyBTZXJ2aWNlc1xuaW1wb3J0IHsgQ2FsZW5kYXJEYXRlVGltZVBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi9jYS1jdXN0b20tZGF0ZXRpbWUtcGlja2Vycy9zZXJ2aWNlcy9jYWxlbmRhci1kYXRldGltZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2xQaXBlIH0gZnJvbSAnLi4vY2EtaW5wdXQvcGlwZXMvZm9ybS1jb250cm9sLnBpcGUnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNhLWlucHV0LWRhdGV0aW1lLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtcbiAgICAnLi9jYS1pbnB1dC1kYXRldGltZS1waWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICAgICcuLi9jYS1pbnB1dC9zY3NzLy9jYS1pbnB1dC5kYXRlcGlja2VyLnNjc3MnLFxuICBdLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgLy8gbW9kdWxlc1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEFuZ3VsYXJTdmdJY29uTW9kdWxlLFxuICAgIC8vIGNvbXBvbmVudHNcbiAgICBDYUlucHV0Q29tcG9uZW50LFxuICAgIENhQ3VzdG9tRGF0ZXRpbWVQaWNrZXJzQ29tcG9uZW50LFxuICAgIC8vIHBpcGVzXG4gICAgSW5wdXREYXRldGltZVBpY2tlckNsYXNzUGlwZSxcbiAgICBJbnB1dENvbnRhaW5lckNsYXNzUGlwZSxcbiAgICBGb3JtQ29udHJvbFBpcGUsXG4gIF0sXG4gIHByb3ZpZGVyczogW0NhbGVuZGFyRGF0ZVRpbWVQaWNrZXJTZXJ2aWNlXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FJbnB1dERhdGV0aW1lUGlja2VyQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKSBpbnB1dENvbmZpZyE6IElDYUlucHV0O1xuXG4gIEBPdXRwdXQoJ2NsZWFyJykgY2xlYXJJbnB1dEV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgnYmx1cklucHV0JykgYmx1cklucHV0RXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIEBWaWV3Q2hpbGQoQ2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudClcbiAgY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudCE6IENhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQ7XG5cbiAgQFZpZXdDaGlsZCgnZGF0ZVRpbWVQb3BvdmVyJykgZGF0ZVRpbWVQb3BvdmVyITogTmdiUG9wb3ZlcjtcbiAgQFZpZXdDaGlsZChDYUlucHV0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBjYUlucHV0Q29tcG9uZW50ITogQ2FJbnB1dENvbXBvbmVudDtcblxuICBwdWJsaWMgc2hvd0RhdGVJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZGF0ZVRpbWVJbnB1dERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBwdWJsaWMgc2VsZWN0aW9uSW5wdXQ6IG51bWJlciA9IC0xO1xuXG4gIHByaXZhdGUgZGF0ZVRpbWVNYWluVGltZXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSBmb2N1c0JsdXIhOiBOb2RlSlMuVGltZW91dCB8IG51bWJlcjtcbiAgcHJpdmF0ZSB0aW1lb3V0Q2xlYW5lciE6IE5vZGVKUy5UaW1lb3V0IHwgbnVtYmVyO1xuXG4gIHB1YmxpYyBpbnB1dFN2Z1JvdXRlcyA9IElucHV0U3ZnUm91dGVzO1xuXG4gIHB1YmxpYyBpc1RvdWNoZWRJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgcHJldmVudEJsdXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gRGF0ZVxuICBwdWJsaWMgbmV3SW5wdXRDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHNlbGVjdExhc3RPbmVGb3JTZWxlY3Rpb25FbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvbkRhdGVQYXN0ZUVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPENsaXBib2FyZEV2ZW50PigpO1xuICBAT3V0cHV0KCkgb25Gb2N1c0VtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjaGFuZ2VTZWxlY3Rpb25FbW1pdGVyID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgZTogS2V5Ym9hcmRFdmVudDtcbiAgICBub1ByZXZlbnREZWZhdWx0OiBib29sZWFuO1xuICB9PigpO1xuICBAT3V0cHV0KCkgc2V0U2VsZWN0aW9uRW1taXRlciA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB2b2lkO1xuICAgIHN0b3BQcm9wYWdhdGlvbjogKCkgPT4gdm9pZDtcbiAgICB0YXJnZXQ6IGFueTtcbiAgfT4oKTtcblxuICBAVmlld0NoaWxkKCdzcGFuMScsIHsgc3RhdGljOiBmYWxzZSB9KSBzcGFuMSE6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3NwYW4yJywgeyBzdGF0aWM6IGZhbHNlIH0pIHNwYW4yITogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc3BhbjMnLCB7IHN0YXRpYzogZmFsc2UgfSkgc3BhbjMhOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdob2xkZXIxJywgeyBzdGF0aWM6IGZhbHNlIH0pIGhvbGRlcjEhOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBTZWxmKCkgcHVibGljIHN1cGVyQ29udHJvbDogTmdDb250cm9sLFxuICAgIHByaXZhdGUgY2FsZW5kYXJTZXJ2aWNlOiBDYWxlbmRhckRhdGVUaW1lUGlja2VyU2VydmljZVxuICApIHtcbiAgICB0aGlzLnN1cGVyQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy52YWx1ZSlcbiAgICAgICAgdGhpcy5zZXRUaW1lRGF0ZUlucHV0KHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnZhbHVlLCB0cnVlKTtcbiAgICB9LCAzMDApO1xuXG4gICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWRcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGUpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFRpbWVEYXRlSW5wdXQoZGF0ZSk7XG4gICAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDI/LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0IGdldFN1cGVyQ29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBlckNvbnRyb2wuY29udHJvbDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RMYXN0T25lRm9yU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCByYW5nZSwgc2VsZWN0aW9uO1xuXG4gICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dCA9IHRydWU7XG5cbiAgICBpZiAod2luZG93LmdldFNlbGVjdGlvbiAmJiBkb2N1bWVudC5jcmVhdGVSYW5nZSkge1xuICAgICAgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICByYW5nZS5zZXRTdGFydCh0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgICByYW5nZS5zZXRFbmQodGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LCAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlLnNldFN0YXJ0KHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCwgMSk7XG4gICAgICAgIHJhbmdlLnNldEVuZCh0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQsIDEpO1xuICAgICAgfVxuXG4gICAgICBzZWxlY3Rpb24/LnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuXG4gICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICB9LCA5MCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSB0cnVlO1xuXG4gICAgdGhpcy50aW1lb3V0Q2xlYW5lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNCbHVyKTtcbiAgICB9LCA5MCk7XG4gIH1cblxuICBwdWJsaWMgb25EYXRlUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHBhc3RlVGV4dCA9IGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcGFzdGVkRGF0ZSA9IG5ldyBEYXRlKHBhc3RlVGV4dCk7XG4gICAgaWYgKCFpc05hTihwYXN0ZWREYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgIHRoaXMuc2V0VGltZURhdGVJbnB1dChwYXN0ZWREYXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNoYW5nZVNlbGVjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCwgbm9QcmV2ZW50RGVmYXVsdCA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID0gdGhpcy5pc05hdmlnYXRpb25LZXkoZXZlbnQpO1xuICAgIGNvbnN0IGlzU3BlY2lhbFRpbWVQaWNrZXJLZXkgPVxuICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMyAmJlxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSO1xuXG4gICAgaWYgKGlzTmF2aWdhdGlvbktleSB8fCBpc1NwZWNpYWxUaW1lUGlja2VyS2V5KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5oYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzTnVtYmVyKGV2ZW50KSkge1xuICAgICAgaWYgKCFub1ByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmICghbm9QcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTnVtYmVyKGV2dDogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGV2dCA9IGV2dCA/IGV2dCA6ICh3aW5kb3cuZXZlbnQgYXMgS2V5Ym9hcmRFdmVudCk7XG4gICAgbGV0IGNoYXJDb2RlID0gZXZ0LndoaWNoID8gZXZ0LndoaWNoIDogZXZ0LmtleUNvZGU7XG4gICAgcmV0dXJuIChcbiAgICAgIChjaGFyQ29kZSA+PSA0OCAmJiBjaGFyQ29kZSA8PSA1NykgfHwgKGNoYXJDb2RlID49IDk2ICYmIGNoYXJDb2RlIDw9IDEwNSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05hdmlnYXRpb25LZXkoZTogS2V5Ym9hcmRFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5hdmlnYXRpb25LZXlzID0gWzM3LCAzOCwgMzksIDQwLCA4LCA5LCA0Nl07IC8vIEFycm93IGtleXMsIEJhY2tzcGFjZSwgVGFiLCBEZWxldGVcbiAgICByZXR1cm4gbmF2aWdhdGlvbktleXMuaW5jbHVkZXMoZS5rZXlDb2RlKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkZvY3VzKGV2ZW50PzogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHRoaXMub25Gb2N1c0VtaXR0ZXIuZW1pdChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50MilcbiAgICAgIHRoaXMuY2FJbnB1dENvbXBvbmVudC5jYUlucHV0UGxhY2Vob2xkZXJJY29uQ29tcG9uZW50LnQyLmNsb3NlKCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRHJvcGRvd25PcHRpb25zKCkge1xuICAgIGlmICh0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mikge1xuICAgICAgaWYgKCF0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mi5pc09wZW4oKSkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmNhSW5wdXRQbGFjZWhvbGRlckljb25Db21wb25lbnQudDIub3BlbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAvLyB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG4gICAgICAgIGxldCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGhhbmRsZUZvY3VzSW5wdXQoZTogRXZlbnQpIHtcbiAgICBjb25zdCBldmVudCA9IGUgYXMgRm9jdXNFdmVudDtcblxuICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5mb2N1c0JsdXIpO1xuICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IC0xICYmXG4gICAgICAgICAgKGV2ZW50Py50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5ub2RlTmFtZSA9PT0gJ0lOUFVUJykgfHxcbiAgICAgICAgKGV2ZW50Py5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ubm9kZU5hbWUgPT09ICdJTlBVVCcgfHxcbiAgICAgICAgZXZlbnQ/LnJlbGF0ZWRUYXJnZXQgPT09IG51bGxcbiAgICAgICkge1xuICAgICAgICB0aGlzLnByZXZlbnRCbHVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IC0xO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNhSW5wdXRDb21wb25lbnQuY2FJbnB1dFBsYWNlaG9sZGVySWNvbkNvbXBvbmVudC50Mi50b2dnbGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0U3BhblNlbGVjdGlvbihlbGVtZW50OiBOb2RlKTogdm9pZCB7XG4gICAgbGV0IHJhbmdlOiBSYW5nZTtcbiAgICBsZXQgc2VsZWN0aW9uOiBTZWxlY3Rpb24gfCBudWxsO1xuXG4gICAgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgZG9jdW1lbnQuY3JlYXRlUmFuZ2UpIHtcbiAgICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTtcbiAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uKGV2ZW50OiB7XG4gICAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7XG4gICAgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB2b2lkO1xuICAgIHRhcmdldDogYW55O1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcblxuICAgIGNvbnN0IHNlbGVjdGlvbklucHV0ID0gcGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JykpO1xuXG4gICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcblxuICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICYmIGN1cnJlbnRTZWxlY3Rpb24udG9TdHJpbmcoKS5sZW5ndGggPiAxMCkge1xuICAgICAgdGhpcy5ob2xkZXIxLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50KTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRhdGVUaW1lTWFpblRpbWVyKTtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZvY3VzQmx1cik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZGF0ZVRpbWVNYWluVGltZXIpO1xuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbWFpbicpKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gc2VsZWN0aW9uSW5wdXQ7XG4gICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24oZWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkge1xuICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCh0aGlzLnNlbGVjdGlvbklucHV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcHVibGljIG9uQ2hhbmdlKF86IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHtcbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRWYWx1ZShfKTtcbiAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5tYXJrQXNUb3VjaGVkKCk7IC8vIE1hcmsgdGhlIGNvbnRyb2wgYXMgdG91Y2hlZFxuICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IElucHV0Q2hhbmdlVmFsdWUpOiB2b2lkIHt9XG5cbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKCk6IHZvaWQge31cblxuICAvLyBCTFVSIE9OIElOUFVUXG4gIHB1YmxpYyBibHVyT25EYXRlVGltZSgpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgdGhpcy5kYXRlVGltZU1haW5UaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjE/Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yPy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCkgJiZcbiAgICAgICAgICAhaXNOYU4odGhpcy5zcGFuMz8ubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuaXNGdXR1cmVEYXRlRGlzYWJsZWQgJiZcbiAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlKS5pc0FmdGVyKG1vbWVudCgpKVxuICAgICAgICAgIClcbiAgICAgICAgICAgIHRoaXMuc3VwZXJDb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh7XG4gICAgICAgICAgICAgIGludmFsaWQ6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBkb24ndCBhY2NlcHQgZnV0dXJlIGRhdGVzXG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuZXhwaXJlZERhdGVJbnZhbGlkICYmXG4gICAgICAgICAgICAgIG1vbWVudCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlKS5pc0JlZm9yZShtb21lbnQoKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pOyAvLyBkb24ndCBhY2NlcHQgZXhwaXJlZCBkYXRlc1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhclNlcnZpY2UuZGF0ZUNoYW5nZWQubmV4dCh0aGlzLmRhdGVUaW1lSW5wdXREYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgdGhpcy5zaG93RGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT1cbiAgICAgICAgSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICAgICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpICYmXG4gICAgICAgICAgIWlzTmFOKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuZXhwaXJlZERhdGVJbnZhbGlkICYmXG4gICAgICAgICAgICBtb21lbnQodGhpcy5kYXRlVGltZUlucHV0RGF0ZSkuaXNCZWZvcmUobW9tZW50KCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sPy5zZXRFcnJvcnMoeyBpbnZhbGlkOiB0cnVlIH0pOyAvLyBkb24ndCBhY2NlcHQgZXhwaXJlZCBkYXRlc1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKSAmJlxuICAgICAgICAgICFpc05hTih0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNhbGVuZGFyU2VydmljZS5kYXRlQ2hhbmdlZC5uZXh0KHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnTU0nO1xuICAgICAgICAgIHRoaXMuc2V0VGltZVBpY2tlclRpbWUoKTtcbiAgICAgICAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kYXRlVGltZU1haW5UaW1lcik7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gICAgICB0aGlzLm5ld0lucHV0Q2hhbmdlZCA9IHRydWU7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHB1YmxpYyBvblBvcG92ZXJTaG93bigpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSB0cnVlO1xuICAgIHRoaXMuaG9sZGVyMS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgb25Qb3BvdmVySGlkZGVuKCk6IHZvaWQge1xuICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUaW1lRGF0ZUlucHV0KGRhdGU6IElucHV0Q2hhbmdlVmFsdWUsIGhhc1ZhbHVlPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGxldCB0ZXh0LCBkYXRlRm9ybWF0LCB0aW1lRm9ybWF0O1xuICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVIpIHtcbiAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnTU0vREQvWVknKTtcbiAgICAgIGRhdGVGb3JtYXQgPSB0ZXh0LnNwbGl0KCcvJyk7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUl9CQU5LX0NBUkRcbiAgICApIHtcbiAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnTU0vREQvWVknKTtcbiAgICAgIGRhdGVGb3JtYXQgPSB0ZXh0LnNwbGl0KCcvJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRhdGUgPVxuICAgICAgICBkYXRlIGluc3RhbmNlb2YgRGF0ZVxuICAgICAgICAgID8gZGF0ZVxuICAgICAgICAgIDogbmV3IERhdGUobW9tZW50KCkuZm9ybWF0KCdNTS9ERC9ZWVlZJykgKyAnICcgKyBkYXRlKTtcbiAgICAgIHRleHQgPSBtb21lbnQobmV3IERhdGUoZGF0ZSkpLmZvcm1hdCgnSEg6bW0nKTtcblxuICAgICAgdGltZUZvcm1hdCA9IG1vbWVudChuZXcgRGF0ZShkYXRlKSkuZm9ybWF0KCdoaC9tbS9BJyk7XG4gICAgICBkYXRlRm9ybWF0ID0gdGltZUZvcm1hdC5zcGxpdCgnLycpO1xuICAgIH1cblxuICAgIGlmICghaGFzVmFsdWUpIHRoaXMub25DaGFuZ2UodGV4dCk7XG4gICAgLy8gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGV4dDtcbiAgICB0aGlzLnNldElzRm9jdXNJbnB1dChmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5zcGFuMSkgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGRhdGVGb3JtYXRbMF07XG5cbiAgICBpZiAodGhpcy5zcGFuMilcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzFdO1xuICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZGF0ZUZvcm1hdFsyXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBkYXRlRm9ybWF0WzJdO1xuICAgICAgfVxuXG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgIHRoaXMuc2hvd0RhdGVJbnB1dCA9IHRydWU7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5Ym9hcmRJbnB1dHMoZTogS2V5Ym9hcmRFdmVudCwgaXNSZXN0YXJ0PzogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IHNwYW5PbmVWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgIGlzTmFOKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG4gICAgY29uc3Qgc3BhbjJWYWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgIGlzTmFOKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG5cbiAgICBsZXQgc3BhbjNWYWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICE9PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICkge1xuICAgICAgc3BhbjNWYWx1ZSA9XG4gICAgICAgIGlzTmFOKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwpIHx8IHRoaXMubmV3SW5wdXRDaGFuZ2VkXG4gICAgICAgICAgPyAnJ1xuICAgICAgICAgIDogcGFyc2VJbnQodGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCk7XG4gICAgfVxuXG4gICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMCkge1xuICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdtbSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfSBlbHNlIGlmIChzcGFuT25lVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxldCBmaW5hbF92YWx1ZSA9IHBhcnNlSW50KGAke3NwYW5PbmVWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoXG4gICAgICAgICAgICAgIC0yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgoXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQodGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KSkgLVxuICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKSB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TW9udGgocGFyc2VJbnQoZS5rZXkpIC0gMSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbF92YWx1ZSA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKC0yKTtcblxuICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSBmaW5hbF92YWx1ZTtcblxuICAgICAgICAgIGlmIChwYXJzZUludChgMSR7ZS5rZXl9YCkgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3BhbjJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGV0IGZpbmFsX3ZhbHVlID0gcGFyc2VJbnQoYCR7c3BhbjJWYWx1ZX0ke2Uua2V5fWApO1xuICAgICAgICAgIGlmIChmaW5hbF92YWx1ZSA+IDMxKSB7XG4gICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKCcwJyArIHBhcnNlSW50KGUua2V5KSkuc2xpY2UoXG4gICAgICAgICAgICAgIC0yXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDI7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RGF0ZShcbiAgICAgICAgICAgICAgICBwYXJzZUludCh0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIWZpbmFsX3ZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnZGQnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IChcbiAgICAgICAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RGF0ZShwYXJzZUludChlLmtleSkpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKFxuICAgICAgICAgICAgLTJcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKHBhcnNlSW50KGAxJHtlLmtleX1gKSA+IDMxKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gMjtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNSZXN0YXJ0KSB7XG4gICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICd5eSc7XG4gICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICghc3BhbjNWYWx1ZSB8fCBzcGFuM1ZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKFxuICAgICAgICAgICAgLTJcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0RnVsbFllYXIoXG4gICAgICAgICAgICAgIHBhcnNlSW50KGAyMDAke3BhcnNlSW50KGUua2V5KX1gKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGZpbmFsWWVhciA9IHBhcnNlSW50KFxuICAgICAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCBmaW5hbFNob3dZZWFyID1cbiAgICAgICAgICAgIGZpbmFsWWVhciA+IDMxXG4gICAgICAgICAgICAgID8gcGFyc2VJbnQoYDE5JHtmaW5hbFllYXJ9YClcbiAgICAgICAgICAgICAgOiBwYXJzZUludChgMjAke2ZpbmFsWWVhcn1gKTtcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKGZpbmFsU2hvd1llYXIpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICsgcGFyc2VJbnQoZS5rZXkpXG4gICAgICAgICAgKS5zbGljZSgtMik7XG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEXG4gICAgKSB7XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uSW5wdXQpIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAwO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3Bhbk9uZVZhbHVlKSB7XG4gICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSBwYXJzZUludChgJHtzcGFuT25lVmFsdWV9JHtlLmtleX1gKTtcbiAgICAgICAgICBpZiAoZmluYWxfdmFsdWUgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICgnMCcgKyBwYXJzZUludChlLmtleSkpLnNsaWNlKFxuICAgICAgICAgICAgICAtMlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1vbnRoKFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSkpIC1cbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKCFmaW5hbF92YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoXG4gICAgICAgICAgICAgICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICAgICApLnNsaWNlKC0yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDE7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KDEsIHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocGFyc2VJbnQoZS5rZXkpKVxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldE1vbnRoKHBhcnNlSW50KGUua2V5KSAtIDEpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxfdmFsdWUgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZSgtMik7XG5cbiAgICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gZmluYWxfdmFsdWU7XG5cbiAgICAgICAgICBpZiAocGFyc2VJbnQoYDEke2Uua2V5fWApID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAxO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxLCB0cnVlKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzUmVzdGFydCkge1xuICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAyO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMiwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXNwYW4yVmFsdWUgfHwgc3BhbjJWYWx1ZS50b1N0cmluZygpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAoJzAnICsgcGFyc2VJbnQoZS5rZXkpKS5zbGljZShcbiAgICAgICAgICAgIC0yXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKFxuICAgICAgICAgICAgICBwYXJzZUludChgMjAwJHtwYXJzZUludChlLmtleSl9YClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgdGhpcy5zZWxlY3RTcGFuQnlUYWJJbmRleCgxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBmaW5hbFllYXIgPSBwYXJzZUludChcbiAgICAgICAgICAgIHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKyBwYXJzZUludChlLmtleSlcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3QgZmluYWxTaG93WWVhciA9XG4gICAgICAgICAgICBmaW5hbFllYXIgPiAzMVxuICAgICAgICAgICAgICA/IHBhcnNlSW50KGAxOSR7ZmluYWxZZWFyfWApXG4gICAgICAgICAgICAgIDogcGFyc2VJbnQoYDIwJHtmaW5hbFllYXJ9YCk7XG4gICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRGdWxsWWVhcihmaW5hbFNob3dZZWFyKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gKFxuICAgICAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCArIHBhcnNlSW50KGUua2V5KVxuICAgICAgICAgICkuc2xpY2UoLTIpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3RTcGFuQnlUYWJJbmRleChpbmR4OiBudW1iZXIsIGNoYW5nZVRhYj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGluZHgpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLmhvbGRlcjEubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZVRhYikgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOYXZpZ2F0aW9uS2V5KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5rZXlDb2RlKSB7XG4gICAgICBjYXNlIDM3OiAvLyBMZWZ0IGFycm93XG4gICAgICAgIHRoaXMubW92ZVNlbGVjdGlvbkxlZnQoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM5OiAvLyBSaWdodCBhcnJvd1xuICAgICAgY2FzZSA5OiAvLyBUYWJcbiAgICAgICAgdGhpcy5tb3ZlU2VsZWN0aW9uUmlnaHRPclRhYihldmVudCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzODogLy8gVXAgYXJyb3dcbiAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCd1cCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNDA6IC8vIERvd24gYXJyb3dcbiAgICAgICAgdGhpcy5zZXREYXRlVGltZU1vZGVsKCdkb3duJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSA4OiAvLyBCYWNrc3BhY2VcbiAgICAgIGNhc2UgNDY6IC8vIERlbGV0ZVxuICAgICAgICB0aGlzLmhhbmRsZUtleWJvYXJkSW5wdXRzKGV2ZW50LCB0cnVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEYXRlUGlja2VySW5wdXQoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDApIHRoaXMudXBkYXRlTW9udGgoaXNVcCk7XG4gICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA9PT0gMSkgdGhpcy51cGRhdGVEYXRlKGlzVXAsIGlzRGF0ZVBpY2tlcik7XG4gICAgZWxzZSB0aGlzLnVwZGF0ZVllYXIoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGF0ZVRpbWVNb2RlbChkaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAtMSkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG5cbiAgICBjb25zdCBpc1VwID0gZGlyZWN0aW9uID09PSAndXAnO1xuICAgIGNvbnN0IGlzRGF0ZVBpY2tlciA9XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVI7XG4gICAgY29uc3QgaXNCYW5rQ2FyZFBpY2tlciA9XG4gICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUgPT09IElucHV0Q29uZmlnTmFtZVN0cmluZ0VudW0uREFURV9QSUNLRVJfQkFOS19DQVJEO1xuXG4gICAgaWYgKGlzRGF0ZVBpY2tlciB8fCBpc0JhbmtDYXJkUGlja2VyKVxuICAgICAgdGhpcy5oYW5kbGVEYXRlUGlja2VySW5wdXQoaXNVcCwgaXNEYXRlUGlja2VyKTtcbiAgICBlbHNlIHRoaXMuaGFuZGxlVGltZVBpY2tlcklucHV0KGlzVXApO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlU2VsZWN0aW9uUmlnaHRPclRhYihlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaXNEYXRlcGlja2VyQmFua0NhcmQgPVxuICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRDtcbiAgICBjb25zdCBtYXhJbmRleCA9IGlzRGF0ZXBpY2tlckJhbmtDYXJkID8gMSA6IDI7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA8IG1heEluZGV4ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0ICs9IDE7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAoZS5rZXlDb2RlID09PSA5ICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dElucHV0KCk7XG4gICAgfSBlbHNlIGlmIChlLnNoaWZ0S2V5ICYmIGUua2V5Q29kZSA9PT0gOSkge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzSW5wdXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvY3VzUHJldmlvdXNJbnB1dCgpOiB2b2lkIHtcbiAgICBjb25zdCBhbGxJbnB1dHMgPSBBcnJheS5mcm9tKFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQuaW5wdXQtY29udHJvbCcpXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50W107XG5cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSBhbGxJbnB1dHMuZmluZEluZGV4KFxuICAgICAgKGlucHV0KSA9PiBpbnB1dCA9PT0gdGhpcy5jYUlucHV0Q29tcG9uZW50LmlucHV0Lm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuXG4gICAgaWYgKGN1cnJlbnRJbmRleCA9PT0gLTEpIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAzO1xuICAgIGVsc2UgaWYgKGN1cnJlbnRJbmRleCA9PT0gMCkgdGhpcy5zZWxlY3Rpb25JbnB1dCA9IDA7XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbklucHV0IC09IDE7XG4gICAgICB0aGlzLnNlbGVjdFNwYW5CeVRhYkluZGV4KHRoaXMuc2VsZWN0aW9uSW5wdXQpO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50SW5kZXggPiAwKSBhbGxJbnB1dHNbY3VycmVudEluZGV4IC0gMV0uZm9jdXMoKTtcblxuICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgPSAtMTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNOZXh0SW5wdXQoKTogdm9pZCB7XG4gICAgY29uc3QgYWxsSW5wdXRzID0gQXJyYXkuZnJvbShcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0LmlucHV0LWNvbnRyb2wnKVxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudFtdO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbElucHV0cy5maW5kSW5kZXgoXG4gICAgICAoaW5wdXQpID0+IGlucHV0ID09PSB0aGlzLmNhSW5wdXRDb21wb25lbnQuaW5wdXQubmF0aXZlRWxlbWVudFxuICAgICk7XG5cbiAgICBpZiAoYWxsSW5wdXRzW2N1cnJlbnRJbmRleCArIDFdKSBhbGxJbnB1dHNbY3VycmVudEluZGV4ICsgMV0uZm9jdXMoKTtcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICAgIHRoaXMuYmx1ck9uRGF0ZVRpbWUoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGlvbklucHV0ID0gLTE7XG4gIH1cblxuICBwdWJsaWMgc2V0SXNGb2N1c0lucHV0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5jYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dCA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBtb3ZlU2VsZWN0aW9uTGVmdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25JbnB1dCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uSW5wdXQgLT0gMTtcbiAgICAgIHRoaXMuc2VsZWN0U3BhbkJ5VGFiSW5kZXgodGhpcy5zZWxlY3Rpb25JbnB1dCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb250aChpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGhEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXRNb250aChcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNb250aCgpICsgbW9udGhEZWx0YVxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5wYWRWYWx1ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0TW9udGgoKSArIDFcbiAgICApO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbih0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVEYXRlKGlzVXA6IGJvb2xlYW4sIGlzRGF0ZVBpY2tlcjogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IGRhdGVEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5zZXREYXRlKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldERhdGUoKSArIGRhdGVEZWx0YVxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBzcGFuRWxlbWVudCA9IGlzRGF0ZVBpY2tlclxuICAgICAgPyB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnRcbiAgICAgIDogdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50O1xuICAgIHNwYW5FbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUodGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXREYXRlKCkpO1xuICAgIHRoaXMuc2V0U3BhblNlbGVjdGlvbihzcGFuRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVllYXIoaXNVcDogYm9vbGVhbiwgaXNEYXRlUGlja2VyOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgeWVhckRlbHRhID0gaXNVcCA/IDEgOiAtMTtcbiAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlID0gbmV3IERhdGUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLnNldEZ1bGxZZWFyKFxuICAgICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldEZ1bGxZZWFyKCkgKyB5ZWFyRGVsdGFcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3Qgc3BhbkVsZW1lbnQgPSBpc0RhdGVQaWNrZXJcbiAgICAgID8gdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50XG4gICAgICA6IHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudDtcbiAgICBzcGFuRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmRhdGVUaW1lSW5wdXREYXRlXG4gICAgICAuZ2V0RnVsbFllYXIoKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC5zbGljZSgtMik7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHNwYW5FbGVtZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFkVmFsdWUodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVUaW1lUGlja2VySW5wdXQoaXNVcDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbklucHV0ID09PSAwKSB0aGlzLnVwZGF0ZUhvdXJzKGlzVXApO1xuICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSW5wdXQgPT09IDEpIHRoaXMudXBkYXRlTWludXRlcyhpc1VwKTtcbiAgICBlbHNlIHRoaXMudG9nZ2xlQU1QTSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVIb3Vycyhpc1VwOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaG91cnNEZWx0YSA9IGlzVXAgPyAxIDogLTE7XG4gICAgbGV0IHNlbGVjdGVkSG91cnMgPSB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldEhvdXJzKCkgKyBob3Vyc0RlbHRhO1xuXG4gICAgaWYgKHNlbGVjdGVkSG91cnMgPT09IDApIHNlbGVjdGVkSG91cnMgPSAyNDtcbiAgICBpZiAoc2VsZWN0ZWRIb3VycyA9PT0gLTEpIHNlbGVjdGVkSG91cnMgPSAyMztcblxuICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0SG91cnMoc2VsZWN0ZWRIb3VycylcbiAgICApO1xuXG4gICAgdGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICBzZWxlY3RlZEhvdXJzID4gMTIgPyBzZWxlY3RlZEhvdXJzIC0gMTIgOiBzZWxlY3RlZEhvdXJzXG4gICAgKTtcbiAgICB0aGlzLnNldFNwYW5TZWxlY3Rpb24odGhpcy5zcGFuMS5uYXRpdmVFbGVtZW50KTtcblxuICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgc2VsZWN0ZWRIb3VycyA+IDExICYmIHNlbGVjdGVkSG91cnMgPCAyNCA/ICdQTScgOiAnQU0nO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNaW51dGVzKGlzVXA6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBtaW51dGVzRGVsdGEgPSBpc1VwID8gMSA6IC0xO1xuICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0TWludXRlcyhcbiAgICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZS5nZXRNaW51dGVzKCkgKyBtaW51dGVzRGVsdGFcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IHRoaXMucGFkVmFsdWUoXG4gICAgICB0aGlzLmRhdGVUaW1lSW5wdXREYXRlLmdldE1pbnV0ZXMoKVxuICAgICk7XG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjIubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZUFNUE0oKTogdm9pZCB7XG4gICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9XG4gICAgICB0aGlzLnNwYW4zLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09PSAnQU0nID8gJ1BNJyA6ICdBTSc7XG5cbiAgICBjb25zdCBob3Vyc1RvQWRkID0gdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PT0gJ0FNJyA/IC0xMiA6IDEyO1xuICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUgPSBuZXcgRGF0ZShcbiAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuc2V0SG91cnMoXG4gICAgICAgIHRoaXMuZGF0ZVRpbWVJbnB1dERhdGUuZ2V0SG91cnMoKSArIGhvdXJzVG9BZGRcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zZXRTcGFuU2VsZWN0aW9uKHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJJbnB1dChldmVudDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJJbnB1dEV2ZW50LmVtaXQoZXZlbnQpO1xuXG4gICAgdGhpcy5zZXRJc0ZvY3VzSW5wdXQoZmFsc2UpO1xuICAgIHRoaXMucmVzZXREYXRlVGltZUlucHV0cygpO1xuICB9XG5cbiAgcHVibGljIG9uQmx1cklucHV0KGV2ZW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5ibHVySW5wdXRFdmVudC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldERhdGVUaW1lSW5wdXRzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNwYW4xKVxuICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5EQVRFX1BJQ0tFUikge1xuICAgICAgICB0aGlzLnNwYW4xLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ21tJztcbiAgICAgICAgdGhpcy5zcGFuMi5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdkZCc7XG4gICAgICAgIHRoaXMuc3BhbjMubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAneXknO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lID09PVxuICAgICAgICBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLkRBVEVfUElDS0VSX0JBTktfQ0FSRFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnbW0nO1xuICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ3l5JztcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXRDb25maWcubmFtZSA9PT0gSW5wdXRDb25maWdOYW1lU3RyaW5nRW51bS5USU1FX1BJQ0tFUlxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc3BhbjEubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPSAnSEgnO1xuICAgICAgICB0aGlzLnNwYW4yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJ01NJztcbiAgICAgICAgdGhpcy5zcGFuMy5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9ICdBTSc7XG4gICAgICB9XG5cbiAgICB0aGlzLnNldFRpbWVQaWNrZXJUaW1lKCk7XG4gICAgdGhpcy5uZXdJbnB1dENoYW5nZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0SXNGb2N1c0lucHV0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dEYXRlSW5wdXQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRUaW1lUGlja2VyVGltZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5uYW1lID09PSBJbnB1dENvbmZpZ05hbWVTdHJpbmdFbnVtLlRJTUVfUElDS0VSKVxuICAgICAgdGhpcy5kYXRlVGltZUlucHV0RGF0ZSA9IG5ldyBEYXRlKFxuICAgICAgICBtb21lbnQoKS5mb3JtYXQoJ01NL0REL1lZWVknKSArXG4gICAgICAgICAgKHRoaXMuaW5wdXRDb25maWc/LmlzRnJvbURhdGUgPyAnIDEyOjE1JyA6ICcgMTI6MDAnKVxuICAgICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJkYXRldGltZS1waWNrZXItbWFpbi1ob2xkZXIgaW5wdXQtY3VzdG9tLWdyb3VwIGRhdGV0aW1lY2xhc3NcIlxuICBbbmdDbGFzc109XCJcbiAgICBnZXRTdXBlckNvbnRyb2xcbiAgICAgIHwgaW5wdXRDb250YWluZXJDbGFzc1xuICAgICAgICA6IGNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0XG4gICAgICAgIDogY2FJbnB1dENvbXBvbmVudC5pc1RvdWNoZWRJbnB1dFxuICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgIDogZ2V0U3VwZXJDb250cm9sPy52YWx1ZVxuICBcIlxuPlxuICA8ZGl2XG4gICAgI2hvbGRlcjFcbiAgICBjbGFzcz1cImRhdGVfdGltZV9ob2xkZXIgaW5wdXQtY29udHJvbFwiXG4gICAgW2NsYXNzLmFjdGl2ZV09XCJzaG93RGF0ZUlucHV0XCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAobW91c2Vkb3duKT1cInNlbGVjdExhc3RPbmVGb3JTZWxlY3Rpb24oKVwiXG4gICAgKG1vdXNldXApPVwic2VsZWN0TGFzdE9uZUFmdGVyTW91c2VVcCgpXCJcbiAgICAocGFzdGUpPVwib25EYXRlUGFzdGUoJGV2ZW50KVwiXG4gICAgKGtleWRvd24pPVwiY2hhbmdlU2VsZWN0aW9uKCRldmVudCwgdHJ1ZSlcIlxuICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bk9wdGlvbnMoKVwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgJ3BhZGRpbmctbGVmdCc6IGlucHV0Q29uZmlnLmlzSWNvbkhpZGRlbiA/ICcycHgnIDogJzI3cHgnXG4gICAgfVwiXG4gICAgW25nQ2xhc3NdPVwiXG4gICAgICBjYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dFxuICAgICAgICB8IGlucHV0RGF0ZXRpbWVQaWNrZXJDbGFzc1xuICAgICAgICAgIDogZmFsc2VcbiAgICAgICAgICA6IGdldFN1cGVyQ29udHJvbFxuICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICA6IGNhSW5wdXRDb21wb25lbnQuaXNUb3VjaGVkSW5wdXRcbiAgICAgICAgICA6IGdldFN1cGVyQ29udHJvbD8udmFsdWVcbiAgICBcIlxuICA+XG4gICAgPHNwYW5cbiAgICAgICNzcGFuMVxuICAgICAgY2xhc3M9XCJtYWluXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ3Jlc2V0LXNlbGVjdGlvbi1jb2xvcic6ICFjYUlucHV0Q29tcG9uZW50LmlzRm9jdXNJbnB1dFxuICAgICAgfVwiXG4gICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgKG1vdXNldXApPVwic2V0U2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgKGtleWRvd24pPVwiY2hhbmdlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAnbW0nIDogJ0hIJ1wiXG4gICAgPjwvc3Bhbj5cbiAgICA8c3Bhbj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJib3JkZXItcGlja2VyXCJcbiAgICAgICAgW2lubmVySFRNTF09XCJpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgPyAnLycgOiAnOidcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhblxuICAgICAgI3NwYW4yXG4gICAgICBjbGFzcz1cIm1haW5cIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAncmVzZXQtc2VsZWN0aW9uLWNvbG9yJzogIWNhSW5wdXRDb21wb25lbnQuaXNGb2N1c0lucHV0XG4gICAgICB9XCJcbiAgICAgIHRhYmluZGV4PVwiMVwiXG4gICAgICAobW91c2V1cCk9XCJzZXRTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAoa2V5ZG93bik9XCJjaGFuZ2VTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICdkZCcgOiAnTU0nXCJcbiAgICA+PC9zcGFuPlxuICAgIDxzcGFuPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImJvcmRlci1waWNrZXJcIlxuICAgICAgICBbaW5uZXJIVE1MXT1cImlucHV0Q29uZmlnLm5hbWUgPT09ICdkYXRlcGlja2VyJyA/ICcvJyA6ICcgJ1wiXG4gICAgICA+PC9kaXY+XG4gICAgPC9zcGFuPlxuICAgIDxzcGFuXG4gICAgICAjc3BhbjNcbiAgICAgIGNsYXNzPVwibWFpblwiXG4gICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICdyZXNldC1zZWxlY3Rpb24tY29sb3InOiAhY2FJbnB1dENvbXBvbmVudC5pc0ZvY3VzSW5wdXRcbiAgICAgIH1cIlxuICAgICAgdGFiaW5kZXg9XCIyXCJcbiAgICAgIChtb3VzZXVwKT1cInNldFNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgIChrZXlkb3duKT1cImNoYW5nZVNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgIFtpbm5lckhUTUxdPVwiaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXInID8gJ3l5JyA6ICdBTSdcIlxuICAgID48L3NwYW4+XG4gIDwvZGl2PlxuICA8YXBwLWNhLWlucHV0XG4gICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICBbZGF0ZVRpbWVQb3BvdmVyXT1cImRhdGVUaW1lUG9wb3ZlclwiXG4gICAgKGZvY3VzSW5wdXRFdmVudCk9XCJoYW5kbGVGb2N1c0lucHV0KCRldmVudClcIlxuICAgIChoYW5kbGVUb2dnbGVEcm9wZG93bk9wdGlvbnMpPVwidG9nZ2xlRHJvcGRvd25PcHRpb25zKClcIlxuICAgIChjbG9zZVBvcG92ZXIpPVwiYmx1ck9uRGF0ZVRpbWUoKVwiXG4gICAgKGJsdXJJbnB1dCk9XCJvbkJsdXJJbnB1dCgkZXZlbnQpXCJcbiAgICAoY2xlYXIpPVwiY2xlYXJJbnB1dCgkZXZlbnQpXCJcbiAgICBbZm9ybUNvbnRyb2xdPVwiZ2V0U3VwZXJDb250cm9sISB8IGZvcm1Db250cm9sXCJcbiAgICA+PC9hcHAtY2EtaW5wdXQ+XG48L2Rpdj5cblxuPCEtLSBQb3BvdmVyIGZvciBEYXRlVGltZSBQaWNrZXJzIC0tPlxuPG5nLXRlbXBsYXRlICNkYXRlVGltZVBvcG92ZXIgbGV0LWRhdGE9XCJkYXRhXCI+XG4gIDxkaXYgY2xhc3M9XCJkYXRldGltZS1kcm9wZG93bi1ob2xkZXJcIj5cbiAgICA8YXBwLWNhLWN1c3RvbS1kYXRldGltZS1waWNrZXJzXG4gICAgICBbY2FsZW5kYXJUeXBlXT1cIlxuICAgICAgICBpbnB1dENvbmZpZy5uYW1lID09PSAnZGF0ZXBpY2tlcicgfHxcbiAgICAgICAgaW5wdXRDb25maWcubmFtZSA9PT0gJ2RhdGVwaWNrZXJCYW5rQ2FyZCdcbiAgICAgICAgICA/ICdkYXRlJ1xuICAgICAgICAgIDogJ3RpbWUnXG4gICAgICBcIlxuICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInTU0vREQvWVknXCJcbiAgICAgIFtkYXRlVGltZV09XCJkYXRlVGltZUlucHV0RGF0ZVwiXG4gICAgICAoY2xvc2VQb3BvdmVyKT1cImNsb3NlUG9wb3ZlcigpXCJcbiAgICA+PC9hcHAtY2EtY3VzdG9tLWRhdGV0aW1lLXBpY2tlcnM+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|