@acorex/components 16.18.50 → 16.19.2
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/fesm2022/acorex-components.mjs +836 -731
- package/fesm2022/acorex-components.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/lib/base/base-page.class.d.ts +2 -2
- package/lib/base/element.class.d.ts +5 -5
- package/lib/calendar/scheduler/views/scheduler-view.component.d.ts +1 -1
- package/lib/data-filter/filter.class.d.ts +1 -1
- package/lib/data-list/core/data-list.component.d.ts +1 -1
- package/lib/date-picker/date-picker.component.d.ts +21 -4
- package/lib/property-editor/property-editor.class.d.ts +1 -1
- package/lib/textbox/textbox.component.d.ts +2 -1
- package/package.json +4 -6
- package/esm2022/acorex-components.mjs +0 -5
- package/esm2022/index.mjs +0 -159
- package/esm2022/lib/accordion/accordion.component.mjs +0 -45
- package/esm2022/lib/accordion/accordion.module.mjs +0 -20
- package/esm2022/lib/base/base-page.class.mjs +0 -97
- package/esm2022/lib/base/components.class.mjs +0 -17
- package/esm2022/lib/base/element.class.mjs +0 -307
- package/esm2022/lib/base/events.class.mjs +0 -17
- package/esm2022/lib/button/button.component.mjs +0 -74
- package/esm2022/lib/button/button.module.mjs +0 -21
- package/esm2022/lib/calendar/calendar-box/calendar-box.component.mjs +0 -469
- package/esm2022/lib/calendar/calendar-box/calendar-box.module.mjs +0 -22
- package/esm2022/lib/calendar/scheduler/scheduler-views.property.mjs +0 -59
- package/esm2022/lib/calendar/scheduler/scheduler.class.mjs +0 -16
- package/esm2022/lib/calendar/scheduler/scheduler.component.mjs +0 -226
- package/esm2022/lib/calendar/scheduler/scheduler.module.mjs +0 -68
- package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-navigator.mjs +0 -136
- package/esm2022/lib/calendar/scheduler/toolbars/scheduler-toolbar-views.mjs +0 -37
- package/esm2022/lib/calendar/scheduler/views/agenda/scheduler-agenda-view.component.mjs +0 -49
- package/esm2022/lib/calendar/scheduler/views/daytime/scheduler-daytime-view.component.mjs +0 -102
- package/esm2022/lib/calendar/scheduler/views/month/scheduler-month-view.component.mjs +0 -214
- package/esm2022/lib/calendar/scheduler/views/scheduler-view.component.mjs +0 -99
- package/esm2022/lib/calendar/scheduler/views/timeline/scheduler-timeline-view.component.mjs +0 -85
- package/esm2022/lib/checkbox/checkbox.component.mjs +0 -112
- package/esm2022/lib/checkbox/checkbox.module.mjs +0 -20
- package/esm2022/lib/color-picker/color-box/color-box.component.mjs +0 -423
- package/esm2022/lib/color-picker/color-picker.component.mjs +0 -89
- package/esm2022/lib/color-picker/color-picker.module.mjs +0 -24
- package/esm2022/lib/context-menu/context-menu.component.mjs +0 -68
- package/esm2022/lib/context-menu/context-menu.directive.mjs +0 -146
- package/esm2022/lib/context-menu/context-menu.module.mjs +0 -20
- package/esm2022/lib/data-filter/columns/filter-column-date.component.mjs +0 -140
- package/esm2022/lib/data-filter/columns/filter-column-number.component.mjs +0 -119
- package/esm2022/lib/data-filter/columns/filter-column-selection.component.mjs +0 -75
- package/esm2022/lib/data-filter/columns/filter-column-string.component.mjs +0 -119
- package/esm2022/lib/data-filter/filter-panel/filter-panel.component.mjs +0 -267
- package/esm2022/lib/data-filter/filter.class.mjs +0 -46
- package/esm2022/lib/data-filter/filter.module.mjs +0 -88
- package/esm2022/lib/data-filter/toolbar/filter-toolbar.component.mjs +0 -168
- package/esm2022/lib/data-list/core/data-list.component.mjs +0 -37
- package/esm2022/lib/data-list/list/list.component.mjs +0 -134
- package/esm2022/lib/data-list/list/list.module.mjs +0 -22
- package/esm2022/lib/data-list/list/toolbar-list-view.component.mjs +0 -84
- package/esm2022/lib/data-source/datasource.component.mjs +0 -47
- package/esm2022/lib/data-source/datasource.module.mjs +0 -18
- package/esm2022/lib/data-source/read-param.mjs +0 -7
- package/esm2022/lib/date-picker/date-picker.component.mjs +0 -1102
- package/esm2022/lib/date-picker/date-picker.module.mjs +0 -50
- package/esm2022/lib/dialog/dialog.component.mjs +0 -26
- package/esm2022/lib/dialog/dialog.module.mjs +0 -21
- package/esm2022/lib/dialog/dialog.service.mjs +0 -160
- package/esm2022/lib/drawer/content.component.mjs +0 -18
- package/esm2022/lib/drawer/drawer-container.component.mjs +0 -38
- package/esm2022/lib/drawer/drawer.component.mjs +0 -146
- package/esm2022/lib/drawer/drawer.module.mjs +0 -23
- package/esm2022/lib/dropdown/dropdown.component.mjs +0 -186
- package/esm2022/lib/dropdown/dropdown.module.mjs +0 -26
- package/esm2022/lib/fieldset/fieldset.component.mjs +0 -57
- package/esm2022/lib/fieldset/fieldset.module.mjs +0 -19
- package/esm2022/lib/form-group/form-group.component.mjs +0 -108
- package/esm2022/lib/form-group/form-group.module.mjs +0 -22
- package/esm2022/lib/form-group/form-lable.directive.mjs +0 -23
- package/esm2022/lib/label/label.component.mjs +0 -22
- package/esm2022/lib/label/label.module.mjs +0 -21
- package/esm2022/lib/loading/loading-indicator.component.mjs +0 -18
- package/esm2022/lib/loading/loading-panel.component.mjs +0 -45
- package/esm2022/lib/loading/loading.module.mjs +0 -21
- package/esm2022/lib/loading/loading.service.mjs +0 -47
- package/esm2022/lib/menu/menu-item.component.mjs +0 -50
- package/esm2022/lib/menu/menu.component.mjs +0 -114
- package/esm2022/lib/menu/menu.module.mjs +0 -22
- package/esm2022/lib/menu/menu2.component.mjs +0 -100
- package/esm2022/lib/number-box/number-box.component.mjs +0 -715
- package/esm2022/lib/number-box/number-box.module.mjs +0 -21
- package/esm2022/lib/page/content.component.mjs +0 -27
- package/esm2022/lib/page/footer.component.mjs +0 -19
- package/esm2022/lib/page/page.component.mjs +0 -57
- package/esm2022/lib/page/page.module.mjs +0 -22
- package/esm2022/lib/panel-box/panel-box.component.mjs +0 -87
- package/esm2022/lib/panel-box/panel-box.module.mjs +0 -19
- package/esm2022/lib/password-box/password-box.component.mjs +0 -36
- package/esm2022/lib/password-box/password-box.module.mjs +0 -23
- package/esm2022/lib/popover/custom-cdk-overlay.service.mjs +0 -50
- package/esm2022/lib/popover/overlay.service.mjs +0 -94
- package/esm2022/lib/popover/popover.component.mjs +0 -145
- package/esm2022/lib/popover/popover.module.mjs +0 -19
- package/esm2022/lib/popup/popup.component.mjs +0 -160
- package/esm2022/lib/popup/popup.module.mjs +0 -25
- package/esm2022/lib/popup/popup.service.mjs +0 -94
- package/esm2022/lib/progress-bar/progress-bar.component.mjs +0 -16
- package/esm2022/lib/progress-bar/progress-bar.module.mjs +0 -19
- package/esm2022/lib/property-editor/editors/check-editor/check-editor.mjs +0 -65
- package/esm2022/lib/property-editor/editors/check-editor/check.module.mjs +0 -22
- package/esm2022/lib/property-editor/editors/color-editor/color.editor.mjs +0 -41
- package/esm2022/lib/property-editor/editors/color-editor/color.module.mjs +0 -24
- package/esm2022/lib/property-editor/editors/column-editor/column.editor.mjs +0 -118
- package/esm2022/lib/property-editor/editors/column-editor/column.module.mjs +0 -32
- package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.editor.mjs +0 -216
- package/esm2022/lib/property-editor/editors/conditional-color-editor/conditional-color.module.mjs +0 -76
- package/esm2022/lib/property-editor/editors/date-editor/date.editor.mjs +0 -87
- package/esm2022/lib/property-editor/editors/date-editor/date.module.mjs +0 -24
- package/esm2022/lib/property-editor/editors/number-editor/number.editor.mjs +0 -72
- package/esm2022/lib/property-editor/editors/number-editor/number.module.mjs +0 -24
- package/esm2022/lib/property-editor/editors/range-editor/range.editor.mjs +0 -145
- package/esm2022/lib/property-editor/editors/range-editor/range.module.mjs +0 -59
- package/esm2022/lib/property-editor/editors/searchbar-selectbox-editor/searchbar-selectbox-editor.mjs +0 -76
- package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.editor.mjs +0 -75
- package/esm2022/lib/property-editor/editors/selectbox-editor/selectbox.module.mjs +0 -25
- package/esm2022/lib/property-editor/editors/selection-editor/selection-editor.mjs +0 -73
- package/esm2022/lib/property-editor/editors/selection-editor/selection.module.mjs +0 -22
- package/esm2022/lib/property-editor/editors/switch-editor/number.editor.mjs +0 -30
- package/esm2022/lib/property-editor/editors/switch-editor/number.module.mjs +0 -25
- package/esm2022/lib/property-editor/editors/text-editor/text.editor.mjs +0 -36
- package/esm2022/lib/property-editor/editors/text-editor/text.module.mjs +0 -24
- package/esm2022/lib/property-editor/editors/textarea-editor/textarea.editor.mjs +0 -35
- package/esm2022/lib/property-editor/editors/textarea-editor/textarea.module.mjs +0 -24
- package/esm2022/lib/property-editor/editors/time-editor/time.editor.mjs +0 -55
- package/esm2022/lib/property-editor/editors/time-editor/time.module.mjs +0 -24
- package/esm2022/lib/property-editor/property-editor-renderer.directive.mjs +0 -167
- package/esm2022/lib/property-editor/property-editor.class.mjs +0 -108
- package/esm2022/lib/property-editor/property-editor.module.mjs +0 -194
- package/esm2022/lib/query-builder/query-builder-group.component.mjs +0 -129
- package/esm2022/lib/query-builder/query-builder-popup/query-builder-popup.component.mjs +0 -177
- package/esm2022/lib/query-builder/query-builder-rule.component.mjs +0 -428
- package/esm2022/lib/query-builder/query-builder.class.mjs +0 -42
- package/esm2022/lib/query-builder/query-builder.component.mjs +0 -92
- package/esm2022/lib/query-builder/query-builder.module.mjs +0 -62
- package/esm2022/lib/query-builder/query-builder.service.mjs +0 -199
- package/esm2022/lib/search-bar/search-bar.component.mjs +0 -293
- package/esm2022/lib/search-bar/search-bar.module.mjs +0 -61
- package/esm2022/lib/searchbox/searchbox.component.mjs +0 -138
- package/esm2022/lib/searchbox/searchbox.module.mjs +0 -24
- package/esm2022/lib/selectbox/selectbox.component.mjs +0 -1137
- package/esm2022/lib/selectbox/selectbox.module.mjs +0 -45
- package/esm2022/lib/selectbox/selectbox2.component.mjs +0 -617
- package/esm2022/lib/selection-list/selection-list.component.mjs +0 -120
- package/esm2022/lib/selection-list/selection-list.module.mjs +0 -21
- package/esm2022/lib/switch/switch.component.mjs +0 -55
- package/esm2022/lib/switch/switch.module.mjs +0 -20
- package/esm2022/lib/tab-page/tab-page-Renderer.component.mjs +0 -75
- package/esm2022/lib/tab-page/tab-page-host.component.mjs +0 -124
- package/esm2022/lib/tab-page/tab-page.module.mjs +0 -21
- package/esm2022/lib/tab-page/tab-page.service.mjs +0 -159
- package/esm2022/lib/tab-strip/tab-strip.component.mjs +0 -48
- package/esm2022/lib/tab-strip/tab-strip.module.mjs +0 -19
- package/esm2022/lib/tab-view/dynamic-tabs.directive.mjs +0 -25
- package/esm2022/lib/tab-view/tab-view.component.mjs +0 -110
- package/esm2022/lib/tab-view/tab-view.module.mjs +0 -21
- package/esm2022/lib/tab-view/tab.component.mjs +0 -33
- package/esm2022/lib/textarea/textarea.component.mjs +0 -44
- package/esm2022/lib/textarea/textarea.module.mjs +0 -21
- package/esm2022/lib/textbox/textbox.component.mjs +0 -46
- package/esm2022/lib/textbox/textbox.module.mjs +0 -36
- package/esm2022/lib/time-picker/time-picker.component.mjs +0 -1107
- package/esm2022/lib/time-picker/time-picker.module.mjs +0 -34
- package/esm2022/lib/toast/toast-message/toast-message.component.mjs +0 -76
- package/esm2022/lib/toast/toast-wrapper/toast-wrapper.component.mjs +0 -13
- package/esm2022/lib/toast/toast.module.mjs +0 -21
- package/esm2022/lib/toast/toast.service.mjs +0 -45
- package/esm2022/lib/toolbar/group-button/toolbar-group-button.component.mjs +0 -77
- package/esm2022/lib/toolbar/menu/toolbar-menu.component.mjs +0 -65
- package/esm2022/lib/toolbar/search/toolbar-search.component.mjs +0 -56
- package/esm2022/lib/toolbar/title/toolbar-title.component.mjs +0 -37
- package/esm2022/lib/toolbar/toolbar-item.mjs +0 -4
- package/esm2022/lib/toolbar/toolbar.component.mjs +0 -13
- package/esm2022/lib/toolbar/toolbar.module.mjs +0 -40
- package/esm2022/lib/tooltip/tooltip.directive.mjs +0 -115
- package/esm2022/lib/tooltip/tooltip.module.mjs +0 -19
- package/esm2022/lib/tree-side-menu/tree-side-menu.component.mjs +0 -697
- package/esm2022/lib/tree-side-menu/tree-side-menu.module.mjs +0 -33
- package/esm2022/lib/tree-view/tree-view.component.mjs +0 -854
- package/esm2022/lib/tree-view/tree-view.module.mjs +0 -22
- package/esm2022/lib/upload-file/upload-file.component.mjs +0 -299
- package/esm2022/lib/upload-file/upload-file.events.mjs +0 -2
- package/esm2022/lib/upload-file/upload-file.module.mjs +0 -24
- package/esm2022/lib/validation/validation-form.component.mjs +0 -68
- package/esm2022/lib/validation/validation-rule.widget.mjs +0 -133
- package/esm2022/lib/validation/validation.class.mjs +0 -2
- package/esm2022/lib/validation/validation.component.mjs +0 -89
- package/esm2022/lib/validation/validation.module.mjs +0 -34
@@ -1,1107 +0,0 @@
|
|
1
|
-
import { AXTranslator } from '@acorex/core';
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, } from '@angular/core';
|
3
|
-
import { AXBaseTextComponent, AXValidatableComponent, } from '../base/element.class';
|
4
|
-
import { AXValueEvent } from '../base/events.class';
|
5
|
-
import * as i0 from "@angular/core";
|
6
|
-
import * as i1 from "@angular/common";
|
7
|
-
import * as i2 from "@angular/forms";
|
8
|
-
import * as i3 from "../button/button.component";
|
9
|
-
import * as i4 from "ngx-mask";
|
10
|
-
export class AXTimePickerItemChangedEvent {
|
11
|
-
minute;
|
12
|
-
second;
|
13
|
-
hour;
|
14
|
-
time;
|
15
|
-
}
|
16
|
-
export class AXTimePickerChangedEvent extends AXValueEvent {
|
17
|
-
}
|
18
|
-
export class AXTimePickerComponent extends AXBaseTextComponent {
|
19
|
-
cdr;
|
20
|
-
onValueChanged = new EventEmitter();
|
21
|
-
// @ViewChild('input', { static: true })
|
22
|
-
// @ContentChild('input', { static: true })
|
23
|
-
// input: ElementRef<HTMLInputElement>;
|
24
|
-
timeType;
|
25
|
-
showMask = true;
|
26
|
-
type = 'HHmm';
|
27
|
-
showCurentTime = false;
|
28
|
-
clearDisabled = true;
|
29
|
-
HHmmss = [
|
30
|
-
/[0-2]/,
|
31
|
-
/[0-9]/,
|
32
|
-
':',
|
33
|
-
/[0-5]/,
|
34
|
-
/[0-9]/,
|
35
|
-
':',
|
36
|
-
/[0-5]/,
|
37
|
-
/[0-9]/,
|
38
|
-
];
|
39
|
-
HHmm = [/[0-2]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
|
40
|
-
HH = [/[0-2]/, /[0-9]/];
|
41
|
-
hhmmss = [
|
42
|
-
/[0-1]/,
|
43
|
-
/[0-9]/,
|
44
|
-
':',
|
45
|
-
/[0-5]/,
|
46
|
-
/[0-9]/,
|
47
|
-
':',
|
48
|
-
/[0-5]/,
|
49
|
-
/[0-9]/,
|
50
|
-
];
|
51
|
-
hhmm = [/[0-1]/, /[0-9]/, ':', /[0-5]/, /[0-9]/];
|
52
|
-
hh = [/[0-1]/, /[0-9]/];
|
53
|
-
// TODO: apply am pm from locale
|
54
|
-
hhmmssam = [
|
55
|
-
/[0-1]/,
|
56
|
-
/[0-9]/,
|
57
|
-
':',
|
58
|
-
/[0-5]/,
|
59
|
-
/[0-9]/,
|
60
|
-
':',
|
61
|
-
/[0-5]/,
|
62
|
-
/[0-9]/,
|
63
|
-
' ',
|
64
|
-
/[a|p|ق|ب]/,
|
65
|
-
AXTranslator.get('dateTime.dayTime.m'),
|
66
|
-
];
|
67
|
-
hhmmam = [
|
68
|
-
/[0-1]/,
|
69
|
-
/[0-9]/,
|
70
|
-
':',
|
71
|
-
/[0-5]/,
|
72
|
-
/[0-9]/,
|
73
|
-
' ',
|
74
|
-
/[a|p|ق|ب]/,
|
75
|
-
AXTranslator.get('dateTime.dayTime.m'),
|
76
|
-
];
|
77
|
-
hham = [
|
78
|
-
/[0-1]/,
|
79
|
-
/[0-9]/,
|
80
|
-
' ',
|
81
|
-
/[a|p|ق|ب]/,
|
82
|
-
AXTranslator.get('dateTime.dayTime.m'),
|
83
|
-
];
|
84
|
-
textValue = '';
|
85
|
-
valueHam = '-- ' + AXTranslator.get('dateTime.dayTime.am');
|
86
|
-
valueMam = '--:-- ' + AXTranslator.get('dateTime.dayTime.am');
|
87
|
-
valueSam = '--:--:-- ' + AXTranslator.get('dateTime.dayTime.am');
|
88
|
-
_values;
|
89
|
-
get value() {
|
90
|
-
return this._values;
|
91
|
-
}
|
92
|
-
set value(v) {
|
93
|
-
if (v === '' ||
|
94
|
-
v == null ||
|
95
|
-
v === '--:--:--' ||
|
96
|
-
v === '--:--' ||
|
97
|
-
v === '--' ||
|
98
|
-
v === this.valueSam ||
|
99
|
-
v === this.valueMam ||
|
100
|
-
v === this.valueHam) {
|
101
|
-
this.clearDisabled = false;
|
102
|
-
const old = this._values;
|
103
|
-
switch (this.type) {
|
104
|
-
case 'HHmmss':
|
105
|
-
this.textValue = '--:--:--';
|
106
|
-
break;
|
107
|
-
case 'HHmm':
|
108
|
-
this.textValue = '--:--';
|
109
|
-
break;
|
110
|
-
case 'HH':
|
111
|
-
this.textValue = '--';
|
112
|
-
break;
|
113
|
-
case 'hhmmss':
|
114
|
-
this.textValue = '--:--:--';
|
115
|
-
break;
|
116
|
-
case 'hhmm':
|
117
|
-
this.textValue = '--:--';
|
118
|
-
break;
|
119
|
-
case 'hh':
|
120
|
-
this.textValue = '--';
|
121
|
-
break;
|
122
|
-
case 'hhmmssam':
|
123
|
-
this.textValue = this.valueSam;
|
124
|
-
break;
|
125
|
-
case 'hhmmam':
|
126
|
-
this.textValue = this.valueMam;
|
127
|
-
break;
|
128
|
-
case 'hham':
|
129
|
-
this.textValue = this.valueHam;
|
130
|
-
break;
|
131
|
-
}
|
132
|
-
this._values = null;
|
133
|
-
if (v !== old) {
|
134
|
-
this.valueChange.emit(null);
|
135
|
-
this.onValueChanged.emit({
|
136
|
-
component: this,
|
137
|
-
value: { hour: null, minute: null, second: null, time: null },
|
138
|
-
oldValue: { time: old },
|
139
|
-
htmlElement: this.ref.nativeElement,
|
140
|
-
});
|
141
|
-
}
|
142
|
-
}
|
143
|
-
else {
|
144
|
-
this.clearDisabled = true;
|
145
|
-
if (this._values && v) {
|
146
|
-
const old = this._values;
|
147
|
-
const ind1 = v.charAt(0);
|
148
|
-
const ind2 = v.charAt(1);
|
149
|
-
const ind3 = v.charAt(2);
|
150
|
-
const ind4 = v.charAt(3);
|
151
|
-
const ind5 = v.charAt(4);
|
152
|
-
const ind6 = v.charAt(5);
|
153
|
-
const ind7 = v.charAt(6);
|
154
|
-
const ind8 = v.charAt(7);
|
155
|
-
const ind9 = v.charAt(8);
|
156
|
-
const ind10 = v.charAt(9);
|
157
|
-
const indOld4 = old.charAt(9);
|
158
|
-
const indOld7 = old.charAt(9);
|
159
|
-
const indOld10 = old.charAt(9);
|
160
|
-
// handle hhmmssAm
|
161
|
-
if (ind1 === '-' &&
|
162
|
-
ind2 !== '-' &&
|
163
|
-
this.timeType.mask === this.hhmmssam) {
|
164
|
-
this.textValue =
|
165
|
-
'0' +
|
166
|
-
ind2 +
|
167
|
-
ind3 +
|
168
|
-
ind4 +
|
169
|
-
ind5 +
|
170
|
-
ind6 +
|
171
|
-
ind7 +
|
172
|
-
ind8 +
|
173
|
-
ind9 +
|
174
|
-
ind10 +
|
175
|
-
AXTranslator.get('dateTime.dayTime.m');
|
176
|
-
setTimeout(() => {
|
177
|
-
this.setCaretPosition(this.input.nativeElement, 2);
|
178
|
-
this.cursorPosition = 2;
|
179
|
-
}, 0);
|
180
|
-
}
|
181
|
-
if (ind4 === '-' &&
|
182
|
-
ind5 !== '-' &&
|
183
|
-
this.timeType.mask === this.hhmmssam) {
|
184
|
-
this.textValue =
|
185
|
-
ind1 +
|
186
|
-
ind2 +
|
187
|
-
ind3 +
|
188
|
-
'0' +
|
189
|
-
ind5 +
|
190
|
-
ind6 +
|
191
|
-
ind7 +
|
192
|
-
ind8 +
|
193
|
-
ind9 +
|
194
|
-
ind10 +
|
195
|
-
AXTranslator.get('dateTime.dayTime.m');
|
196
|
-
setTimeout(() => {
|
197
|
-
this.setCaretPosition(this.input.nativeElement, 5);
|
198
|
-
this.cursorPosition = 5;
|
199
|
-
}, 0);
|
200
|
-
}
|
201
|
-
if (ind7 === '-' &&
|
202
|
-
ind8 !== '-' &&
|
203
|
-
this.timeType.mask === this.hhmmssam) {
|
204
|
-
this.textValue =
|
205
|
-
ind1 +
|
206
|
-
ind2 +
|
207
|
-
ind3 +
|
208
|
-
ind4 +
|
209
|
-
ind5 +
|
210
|
-
ind6 +
|
211
|
-
'0' +
|
212
|
-
ind8 +
|
213
|
-
ind9 +
|
214
|
-
ind10 +
|
215
|
-
AXTranslator.get('dateTime.dayTime.m');
|
216
|
-
setTimeout(() => {
|
217
|
-
this.setCaretPosition(this.input.nativeElement, 8);
|
218
|
-
this.cursorPosition = 8;
|
219
|
-
}, 0);
|
220
|
-
}
|
221
|
-
if (indOld10 === '-' && this.timeType.mask === this.hhmmssam) {
|
222
|
-
this.textValue =
|
223
|
-
ind1 +
|
224
|
-
ind2 +
|
225
|
-
ind3 +
|
226
|
-
ind4 +
|
227
|
-
ind5 +
|
228
|
-
ind6 +
|
229
|
-
ind7 +
|
230
|
-
ind8 +
|
231
|
-
ind9 +
|
232
|
-
AXTranslator.get('dateTime.dayTime.am');
|
233
|
-
}
|
234
|
-
//
|
235
|
-
if (ind1 === '-' &&
|
236
|
-
ind2 !== '-' &&
|
237
|
-
this.timeType.mask === this.hhmmam) {
|
238
|
-
this.textValue =
|
239
|
-
'0' +
|
240
|
-
ind2 +
|
241
|
-
ind3 +
|
242
|
-
ind4 +
|
243
|
-
ind5 +
|
244
|
-
ind6 +
|
245
|
-
ind7 +
|
246
|
-
AXTranslator.get('dateTime.dayTime.m');
|
247
|
-
setTimeout(() => {
|
248
|
-
this.setCaretPosition(this.input.nativeElement, 2);
|
249
|
-
this.cursorPosition = 2;
|
250
|
-
}, 0);
|
251
|
-
}
|
252
|
-
if (ind4 === '-' &&
|
253
|
-
ind5 !== '-' &&
|
254
|
-
this.timeType.mask === this.hhmmam) {
|
255
|
-
this.textValue =
|
256
|
-
ind1 +
|
257
|
-
ind2 +
|
258
|
-
ind3 +
|
259
|
-
'0' +
|
260
|
-
ind5 +
|
261
|
-
ind6 +
|
262
|
-
ind7 +
|
263
|
-
AXTranslator.get('dateTime.dayTime.m');
|
264
|
-
setTimeout(() => {
|
265
|
-
this.setCaretPosition(this.input.nativeElement, 5);
|
266
|
-
this.cursorPosition = 5;
|
267
|
-
}, 0);
|
268
|
-
}
|
269
|
-
if (indOld7 === '-' && this.timeType.mask === this.hhmmam) {
|
270
|
-
this.textValue =
|
271
|
-
ind1 +
|
272
|
-
ind2 +
|
273
|
-
ind3 +
|
274
|
-
ind4 +
|
275
|
-
ind5 +
|
276
|
-
ind6 +
|
277
|
-
AXTranslator.get('dateTime.dayTime.am');
|
278
|
-
}
|
279
|
-
//
|
280
|
-
if (ind1 === '-' && ind2 !== '-' && this.timeType.mask === this.hham) {
|
281
|
-
this.textValue =
|
282
|
-
'0' + ind2 + ind3 + ind4 + AXTranslator.get('dateTime.dayTime.m');
|
283
|
-
setTimeout(() => {
|
284
|
-
this.setCaretPosition(this.input.nativeElement, 2);
|
285
|
-
this.cursorPosition = 2;
|
286
|
-
}, 0);
|
287
|
-
}
|
288
|
-
if (indOld4 === '-' && this.timeType.mask === this.hham) {
|
289
|
-
this.textValue =
|
290
|
-
ind1 + ind2 + ind3 + AXTranslator.get('dateTime.dayTime.am');
|
291
|
-
}
|
292
|
-
//
|
293
|
-
if (ind1 === '-' &&
|
294
|
-
ind2 !== '-' &&
|
295
|
-
(this.timeType.mask === this.hhmmss ||
|
296
|
-
this.timeType.mask === this.HHmmss)) {
|
297
|
-
this.textValue = '0' + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8;
|
298
|
-
setTimeout(() => {
|
299
|
-
this.setCaretPosition(this.input.nativeElement, 2);
|
300
|
-
this.cursorPosition = 2;
|
301
|
-
}, 0);
|
302
|
-
}
|
303
|
-
if (ind4 === '-' &&
|
304
|
-
ind5 !== '-' &&
|
305
|
-
(this.timeType.mask === this.hhmmss ||
|
306
|
-
this.timeType.mask === this.HHmmss)) {
|
307
|
-
this.textValue = ind1 + ind2 + ind3 + '0' + ind5 + ind6 + ind7 + ind8;
|
308
|
-
setTimeout(() => {
|
309
|
-
this.setCaretPosition(this.input.nativeElement, 6);
|
310
|
-
this.cursorPosition = 6;
|
311
|
-
}, 0);
|
312
|
-
}
|
313
|
-
if (ind7 === '-' &&
|
314
|
-
ind8 !== '-' &&
|
315
|
-
(this.timeType.mask === this.hhmmss ||
|
316
|
-
this.timeType.mask === this.HHmmss)) {
|
317
|
-
this.textValue = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + '0' + ind8;
|
318
|
-
setTimeout(() => {
|
319
|
-
this.setCaretPosition(this.input.nativeElement, 9);
|
320
|
-
this.cursorPosition = 9;
|
321
|
-
}, 0);
|
322
|
-
}
|
323
|
-
//
|
324
|
-
if (ind1 === '-' &&
|
325
|
-
ind2 !== '-' &&
|
326
|
-
(this.timeType.mask === this.hhmm || this.timeType.mask === this.HHmm)) {
|
327
|
-
this.textValue = '0' + ind2 + ind3 + ind4 + ind5;
|
328
|
-
setTimeout(() => {
|
329
|
-
this.setCaretPosition(this.input.nativeElement, 2);
|
330
|
-
this.cursorPosition = 2;
|
331
|
-
}, 0);
|
332
|
-
}
|
333
|
-
if (ind4 === '-' &&
|
334
|
-
ind5 !== '-' &&
|
335
|
-
(this.timeType.mask === this.hhmm || this.timeType.mask === this.HHmm)) {
|
336
|
-
this.textValue = ind1 + ind2 + ind3 + '0' + ind5;
|
337
|
-
setTimeout(() => {
|
338
|
-
this.setCaretPosition(this.input.nativeElement, 5);
|
339
|
-
this.cursorPosition = 5;
|
340
|
-
}, 0);
|
341
|
-
}
|
342
|
-
//
|
343
|
-
if (ind1 === '-' &&
|
344
|
-
ind2 !== '-' &&
|
345
|
-
(this.timeType.mask === this.hh || this.timeType.mask === this.HH)) {
|
346
|
-
this.textValue = '0' + ind2;
|
347
|
-
setTimeout(() => {
|
348
|
-
this.setCaretPosition(this.input.nativeElement, 2);
|
349
|
-
this.cursorPosition = 2;
|
350
|
-
}, 0);
|
351
|
-
}
|
352
|
-
}
|
353
|
-
if (v !== this._values) {
|
354
|
-
const old = this._values;
|
355
|
-
this.textValue = v;
|
356
|
-
this._values = v && v.indexOf('-') === -1 ? v : null;
|
357
|
-
if (v.indexOf('-') === -1) {
|
358
|
-
this.valueChange.emit(v);
|
359
|
-
this.onValueChanged.emit({
|
360
|
-
component: this,
|
361
|
-
value: {
|
362
|
-
time: v,
|
363
|
-
hour: Number(v[0] + v[1]),
|
364
|
-
minute: v[3] &&
|
365
|
-
v[3] !== AXTranslator.get('dateTime.dayTime.a') &&
|
366
|
-
v[3] !== AXTranslator.get('dateTime.dayTime.p')
|
367
|
-
? Number(v[3] + v[4])
|
368
|
-
: null,
|
369
|
-
second: v[6] &&
|
370
|
-
v[6] !== AXTranslator.get('dateTime.dayTime.a') &&
|
371
|
-
v[6] !== AXTranslator.get('dateTime.dayTime.p')
|
372
|
-
? Number(v[6] + v[7])
|
373
|
-
: null,
|
374
|
-
},
|
375
|
-
oldValue: { time: old },
|
376
|
-
htmlElement: this.ref.nativeElement,
|
377
|
-
});
|
378
|
-
this.cdr.detectChanges();
|
379
|
-
this.clearValidationStyle(this.input.nativeElement);
|
380
|
-
}
|
381
|
-
}
|
382
|
-
}
|
383
|
-
}
|
384
|
-
cursorPosition = 0;
|
385
|
-
constructor(cdr, ref) {
|
386
|
-
super(cdr, ref);
|
387
|
-
this.cdr = cdr;
|
388
|
-
this.timeType = 'HHmm';
|
389
|
-
}
|
390
|
-
clearValue() {
|
391
|
-
this.clear();
|
392
|
-
this.handleInputFocus();
|
393
|
-
}
|
394
|
-
ngOnInit() {
|
395
|
-
switch (this.timeType) {
|
396
|
-
case 'HHmmss':
|
397
|
-
this.type = 'HHmmss';
|
398
|
-
this.timeType = 'Hh:m0:s0';
|
399
|
-
this.textValue = this.value ? this.value : '--:--:--';
|
400
|
-
break;
|
401
|
-
case 'HHmm':
|
402
|
-
this.type = 'HHmm';
|
403
|
-
this.timeType = 'Hh:m0';
|
404
|
-
this.textValue = this.value ? this.value : '--:--';
|
405
|
-
break;
|
406
|
-
case 'HH':
|
407
|
-
this.type = 'HH';
|
408
|
-
this.timeType = 'Hh';
|
409
|
-
this.textValue = this.value ? this.value : '--';
|
410
|
-
break;
|
411
|
-
case 'hhmmss':
|
412
|
-
this.type = 'hhmmss';
|
413
|
-
this.timeType = 'hh:m0:s0';
|
414
|
-
this.textValue = this.value ? this.value : '--:--:--';
|
415
|
-
break;
|
416
|
-
case 'hhmm':
|
417
|
-
this.type = 'hhmm';
|
418
|
-
this.timeType = 'hh:m0:s0';
|
419
|
-
this.textValue = this.value ? this.value : '--:--';
|
420
|
-
break;
|
421
|
-
case 'hh':
|
422
|
-
this.type = 'hh';
|
423
|
-
this.timeType = 'hh';
|
424
|
-
this.textValue = this.value ? this.value : '--';
|
425
|
-
break;
|
426
|
-
case 'hhmmssam':
|
427
|
-
this.type = 'hhmmssam';
|
428
|
-
this.timeType = 'H0h0:m0s0AA';
|
429
|
-
this.textValue = this.value ? this.value : this.valueSam;
|
430
|
-
break;
|
431
|
-
case 'hhmmam':
|
432
|
-
this.type = 'hhmmam';
|
433
|
-
this.timeType = 'H0h0:m0AA';
|
434
|
-
this.textValue = this.value ? this.value : this.valueMam;
|
435
|
-
break;
|
436
|
-
case 'hham':
|
437
|
-
this.type = 'hham';
|
438
|
-
this.timeType = 'h0h0am';
|
439
|
-
this.textValue = this.value ? this.value : this.valueHam;
|
440
|
-
break;
|
441
|
-
default:
|
442
|
-
this.type = 'HHmm';
|
443
|
-
this.timeType = 'H0h0:m0';
|
444
|
-
this.textValue = this.value ? this.value : '--:--';
|
445
|
-
break;
|
446
|
-
}
|
447
|
-
if (this.showCurentTime === true) {
|
448
|
-
const hour = new Date().getHours() > 10
|
449
|
-
? new Date().getHours()
|
450
|
-
: '0' + new Date().getHours();
|
451
|
-
let amHour;
|
452
|
-
if (new Date().getHours() > 10) {
|
453
|
-
if (new Date().getHours() > 12) {
|
454
|
-
if (new Date().getHours() - 12 < 10) {
|
455
|
-
amHour = '0' + (new Date().getHours() - 12);
|
456
|
-
}
|
457
|
-
else {
|
458
|
-
amHour = new Date().getHours();
|
459
|
-
}
|
460
|
-
}
|
461
|
-
else {
|
462
|
-
amHour = new Date().getHours();
|
463
|
-
}
|
464
|
-
}
|
465
|
-
else {
|
466
|
-
amHour = '0' + new Date().getHours();
|
467
|
-
}
|
468
|
-
const min = new Date().getMinutes() > 9
|
469
|
-
? new Date().getMinutes()
|
470
|
-
: '0' + new Date().getMinutes();
|
471
|
-
const sec = new Date().getSeconds() > 9
|
472
|
-
? new Date().getSeconds()
|
473
|
-
: '0' + new Date().getSeconds();
|
474
|
-
if (this.type === 'hh' ||
|
475
|
-
this.type === 'hhmm' ||
|
476
|
-
this.type === 'hhmmss' ||
|
477
|
-
this.type === 'hhmmssam') {
|
478
|
-
if (hour >= 12) {
|
479
|
-
this.value =
|
480
|
-
amHour +
|
481
|
-
':' +
|
482
|
-
min +
|
483
|
-
':' +
|
484
|
-
sec +
|
485
|
-
' ' +
|
486
|
-
AXTranslator.get('dateTime.dayTime.pm');
|
487
|
-
}
|
488
|
-
else {
|
489
|
-
this.value =
|
490
|
-
amHour +
|
491
|
-
':' +
|
492
|
-
min +
|
493
|
-
':' +
|
494
|
-
sec +
|
495
|
-
' ' +
|
496
|
-
AXTranslator.get('dateTime.dayTime.am');
|
497
|
-
}
|
498
|
-
}
|
499
|
-
else if (this.type === 'hham') {
|
500
|
-
if (hour >= 12) {
|
501
|
-
this.value = amHour + ' ' + AXTranslator.get('dateTime.dayTime.pm');
|
502
|
-
}
|
503
|
-
else {
|
504
|
-
this.value = amHour + ' ' + AXTranslator.get('dateTime.dayTime.am');
|
505
|
-
}
|
506
|
-
}
|
507
|
-
else if (this.type === 'hhmmam') {
|
508
|
-
if (hour >= 12) {
|
509
|
-
this.value =
|
510
|
-
amHour + ':' + min + ' ' + AXTranslator.get('dateTime.dayTime.pm');
|
511
|
-
}
|
512
|
-
else {
|
513
|
-
this.value =
|
514
|
-
amHour + ':' + min + ' ' + AXTranslator.get('dateTime.dayTime.am');
|
515
|
-
}
|
516
|
-
}
|
517
|
-
else {
|
518
|
-
this.value = hour + ':' + min + ':' + sec;
|
519
|
-
}
|
520
|
-
}
|
521
|
-
}
|
522
|
-
onStartfocus() {
|
523
|
-
this.input.nativeElement.style.caretColor = 'transparent';
|
524
|
-
setTimeout(() => {
|
525
|
-
this.setCaretPosition(this.input.nativeElement, 0);
|
526
|
-
this.cursorPosition = 0;
|
527
|
-
this.input.nativeElement.style.caretColor = 'auto';
|
528
|
-
}, 0);
|
529
|
-
}
|
530
|
-
handleInputFocus() {
|
531
|
-
this.onStartfocus();
|
532
|
-
this.input.nativeElement.focus();
|
533
|
-
}
|
534
|
-
handleInputBlur(e) {
|
535
|
-
if (this.textValue.indexOf('-') !== -1) {
|
536
|
-
switch (this.type) {
|
537
|
-
case 'HHmmss':
|
538
|
-
this.textValue = '--:--:--';
|
539
|
-
break;
|
540
|
-
case 'HHmm':
|
541
|
-
this.textValue = '--:--';
|
542
|
-
break;
|
543
|
-
case 'HH':
|
544
|
-
this.textValue = '--';
|
545
|
-
break;
|
546
|
-
case 'hhmmss':
|
547
|
-
this.textValue = '--:--:--';
|
548
|
-
break;
|
549
|
-
case 'hhmm':
|
550
|
-
this.textValue = '--:--';
|
551
|
-
break;
|
552
|
-
case 'hh':
|
553
|
-
this.textValue = '--';
|
554
|
-
break;
|
555
|
-
case 'hhmmssam':
|
556
|
-
this.textValue = this.valueSam;
|
557
|
-
break;
|
558
|
-
case 'hhmmam':
|
559
|
-
this.textValue = this.valueMam;
|
560
|
-
break;
|
561
|
-
case 'hham':
|
562
|
-
this.textValue = this.valueHam;
|
563
|
-
break;
|
564
|
-
}
|
565
|
-
}
|
566
|
-
}
|
567
|
-
handleKeyPress(event) {
|
568
|
-
const inputChar = String.fromCharCode(event.charCode);
|
569
|
-
const firstChar = this.textValue.charAt(0);
|
570
|
-
const secondChar = this.textValue.charAt(1);
|
571
|
-
setTimeout(() => {
|
572
|
-
if (this.input.nativeElement.selectionStart ||
|
573
|
-
this.input.nativeElement.selectionStart === 0) {
|
574
|
-
this.cursorPosition = this.input.nativeElement.selectionStart;
|
575
|
-
// this.cursorPosition += 1 ;
|
576
|
-
}
|
577
|
-
}, 0);
|
578
|
-
if (firstChar === '2') {
|
579
|
-
if (secondChar === '' ||
|
580
|
-
this.textValue.charAt(1) >= '4' ||
|
581
|
-
this.cursorPosition < 3) {
|
582
|
-
if (inputChar >= '4') {
|
583
|
-
event.preventDefault();
|
584
|
-
}
|
585
|
-
}
|
586
|
-
}
|
587
|
-
if (this.timeType.mask === this.hhmmss ||
|
588
|
-
this.timeType.mask === this.hhmm ||
|
589
|
-
this.timeType.mask === this.hh ||
|
590
|
-
this.timeType.mask === this.hhmmssam ||
|
591
|
-
this.timeType.mask === this.hhmmam ||
|
592
|
-
this.timeType.mask === this.hham) {
|
593
|
-
if (firstChar === '1') {
|
594
|
-
if (secondChar === '' ||
|
595
|
-
this.textValue.charAt(1) >= '3' ||
|
596
|
-
this.cursorPosition < 3) {
|
597
|
-
if (inputChar >= '3') {
|
598
|
-
event.preventDefault();
|
599
|
-
}
|
600
|
-
}
|
601
|
-
}
|
602
|
-
}
|
603
|
-
if (inputChar === '-') {
|
604
|
-
event.preventDefault();
|
605
|
-
}
|
606
|
-
}
|
607
|
-
handleKeyUp(event) {
|
608
|
-
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
609
|
-
this.input.nativeElement.style.caretColor = 'auto';
|
610
|
-
event.preventDefault();
|
611
|
-
event.stopPropagation();
|
612
|
-
}
|
613
|
-
// up & down button
|
614
|
-
if (event.key === 'ArrowUp') {
|
615
|
-
this.setCaret();
|
616
|
-
}
|
617
|
-
if (event.key === 'ArrowDown') {
|
618
|
-
this.setCaret();
|
619
|
-
}
|
620
|
-
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
621
|
-
event.preventDefault();
|
622
|
-
return false;
|
623
|
-
}
|
624
|
-
// left & right Button
|
625
|
-
if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
|
626
|
-
if (this.input.nativeElement.selectionStart ||
|
627
|
-
this.input.nativeElement.selectionStart === 0) {
|
628
|
-
this.cursorPosition = this.input.nativeElement.selectionStart;
|
629
|
-
}
|
630
|
-
}
|
631
|
-
// home button
|
632
|
-
if (event.key === 'Home') {
|
633
|
-
this.cursorPosition = 0;
|
634
|
-
}
|
635
|
-
// end button
|
636
|
-
if (event.key === 'End') {
|
637
|
-
if (this.timeType.mask === this.hhmmssam ||
|
638
|
-
this.timeType.mask === this.hhmmam ||
|
639
|
-
this.timeType.mask === this.hham) {
|
640
|
-
if (this.timeType.mask === this.hhmmssam) {
|
641
|
-
this.cursorPosition = 9;
|
642
|
-
setTimeout(() => {
|
643
|
-
this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
|
644
|
-
this.input.nativeElement.style.caretColor = 'auto';
|
645
|
-
}, 0);
|
646
|
-
}
|
647
|
-
if (this.timeType.mask === this.hhmmam) {
|
648
|
-
this.cursorPosition = 6;
|
649
|
-
setTimeout(() => {
|
650
|
-
this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
|
651
|
-
this.input.nativeElement.style.caretColor = 'auto';
|
652
|
-
}, 0);
|
653
|
-
}
|
654
|
-
if (this.timeType.mask === this.hham) {
|
655
|
-
this.cursorPosition = 3;
|
656
|
-
setTimeout(() => {
|
657
|
-
this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
|
658
|
-
this.input.nativeElement.style.caretColor = 'auto';
|
659
|
-
}, 0);
|
660
|
-
}
|
661
|
-
}
|
662
|
-
else {
|
663
|
-
this.cursorPosition = this.textValue.length;
|
664
|
-
}
|
665
|
-
}
|
666
|
-
// backspace Control
|
667
|
-
if (event.key === 'Backspace') {
|
668
|
-
const ind1 = this.textValue.charAt(0);
|
669
|
-
const ind2 = this.textValue.charAt(1);
|
670
|
-
const ind3 = this.textValue.charAt(2);
|
671
|
-
const ind4 = this.textValue.charAt(3);
|
672
|
-
const ind5 = this.textValue.charAt(4);
|
673
|
-
const ind6 = this.textValue.charAt(5);
|
674
|
-
const ind7 = this.textValue.charAt(6);
|
675
|
-
const ind8 = this.textValue.charAt(7);
|
676
|
-
const ind9 = this.textValue.charAt(8);
|
677
|
-
const ind10 = this.textValue.charAt(9);
|
678
|
-
if (this.timeType.mask === this.hhmmssam) {
|
679
|
-
if (ind10 === '-') {
|
680
|
-
this.textValue =
|
681
|
-
ind1 +
|
682
|
-
ind2 +
|
683
|
-
ind3 +
|
684
|
-
ind4 +
|
685
|
-
ind5 +
|
686
|
-
ind6 +
|
687
|
-
ind7 +
|
688
|
-
ind8 +
|
689
|
-
ind9 +
|
690
|
-
AXTranslator.get('dateTime.dayTime.am');
|
691
|
-
setTimeout(() => {
|
692
|
-
this.setCaretPosition(this.input.nativeElement, 0);
|
693
|
-
this.cursorPosition = 0;
|
694
|
-
}, 0);
|
695
|
-
}
|
696
|
-
}
|
697
|
-
if (this.timeType.mask === this.hhmmam) {
|
698
|
-
if (ind7 === '-') {
|
699
|
-
this.textValue =
|
700
|
-
ind1 +
|
701
|
-
ind2 +
|
702
|
-
ind3 +
|
703
|
-
ind4 +
|
704
|
-
ind5 +
|
705
|
-
ind6 +
|
706
|
-
AXTranslator.get('dateTime.dayTime.am');
|
707
|
-
setTimeout(() => {
|
708
|
-
this.setCaretPosition(this.input.nativeElement, 0);
|
709
|
-
this.cursorPosition = 0;
|
710
|
-
}, 0);
|
711
|
-
}
|
712
|
-
}
|
713
|
-
if (this.timeType.mask === this.hham) {
|
714
|
-
if (ind4 === '-') {
|
715
|
-
this.textValue =
|
716
|
-
ind1 + ind2 + ind3 + AXTranslator.get('dateTime.dayTime.am');
|
717
|
-
setTimeout(() => {
|
718
|
-
this.setCaretPosition(this.input.nativeElement, 0);
|
719
|
-
this.cursorPosition = 0;
|
720
|
-
}, 0);
|
721
|
-
}
|
722
|
-
}
|
723
|
-
if (this.textValue.length <= 0) {
|
724
|
-
this.cursorPosition = 0;
|
725
|
-
}
|
726
|
-
else {
|
727
|
-
this.cursorPosition -= 1;
|
728
|
-
}
|
729
|
-
}
|
730
|
-
}
|
731
|
-
handleKeyDown(event) {
|
732
|
-
if (event.key === 'End') {
|
733
|
-
if (this.timeType.mask === this.hhmmssam ||
|
734
|
-
this.timeType.mask === this.hhmmam ||
|
735
|
-
this.timeType.mask === this.hham) {
|
736
|
-
this.input.nativeElement.style.caretColor = 'transparent';
|
737
|
-
}
|
738
|
-
else {
|
739
|
-
this.input.nativeElement.style.caretColor = 'auto';
|
740
|
-
}
|
741
|
-
}
|
742
|
-
let newValue = this.textValue;
|
743
|
-
const ind1 = newValue.charAt(0);
|
744
|
-
const ind2 = newValue.charAt(1);
|
745
|
-
const ind3 = this.textValue.charAt(2);
|
746
|
-
const ind4 = this.textValue.charAt(3);
|
747
|
-
const ind5 = this.textValue.charAt(4);
|
748
|
-
const ind6 = this.textValue.charAt(5);
|
749
|
-
const ind7 = this.textValue.charAt(6);
|
750
|
-
const ind8 = this.textValue.charAt(7);
|
751
|
-
const ind9 = this.textValue.charAt(8);
|
752
|
-
const ind10 = this.textValue.charAt(9);
|
753
|
-
const ind11 = this.textValue.charAt(10);
|
754
|
-
// up key
|
755
|
-
if (event.key === 'ArrowUp') {
|
756
|
-
// hour
|
757
|
-
if (this.cursorPosition <= 2) {
|
758
|
-
const hourind = ind1 + ind2;
|
759
|
-
const newHour = +hourind + 1;
|
760
|
-
newValue = newHour.toString();
|
761
|
-
if (this.timeType.mask === this.hhmmss ||
|
762
|
-
this.timeType.mask === this.hhmm ||
|
763
|
-
this.timeType.mask === this.hh ||
|
764
|
-
this.timeType.mask === this.hhmmssam ||
|
765
|
-
this.timeType.mask === this.hhmmam ||
|
766
|
-
this.timeType.mask === this.hham) {
|
767
|
-
if (hourind === '--') {
|
768
|
-
newValue = '0';
|
769
|
-
}
|
770
|
-
if (ind1 !== '-' && hourind === ind1 + '-') {
|
771
|
-
newValue = '0';
|
772
|
-
}
|
773
|
-
if (ind2 !== '-' && hourind === '-' + ind2) {
|
774
|
-
newValue = '0';
|
775
|
-
}
|
776
|
-
if (+newValue > 12) {
|
777
|
-
newValue = '01';
|
778
|
-
}
|
779
|
-
else if (+newValue < 10) {
|
780
|
-
newValue = '0' + newValue;
|
781
|
-
}
|
782
|
-
}
|
783
|
-
else {
|
784
|
-
if (hourind === '--') {
|
785
|
-
newValue = '0';
|
786
|
-
}
|
787
|
-
if (ind1 !== '-' && hourind === ind1 + '-') {
|
788
|
-
newValue = '0';
|
789
|
-
}
|
790
|
-
if (ind2 !== '-' && hourind === '-' + ind2) {
|
791
|
-
newValue = '0';
|
792
|
-
}
|
793
|
-
if (+newValue > 23) {
|
794
|
-
newValue = '00';
|
795
|
-
}
|
796
|
-
else if (+newValue < 10) {
|
797
|
-
newValue = '0' + newValue;
|
798
|
-
}
|
799
|
-
}
|
800
|
-
const afterHourind = ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
|
801
|
-
const hour = newValue.toString() + afterHourind;
|
802
|
-
this.textValue = hour;
|
803
|
-
}
|
804
|
-
// minute
|
805
|
-
if (this.cursorPosition >= 3 && this.cursorPosition <= 5) {
|
806
|
-
const hourind = ind4 + ind5;
|
807
|
-
const newHour = +hourind + 1;
|
808
|
-
newValue = newHour.toString();
|
809
|
-
if (hourind === '--') {
|
810
|
-
newValue = '0';
|
811
|
-
}
|
812
|
-
if (ind4 !== '-' && hourind === ind4 + '-') {
|
813
|
-
newValue = '0';
|
814
|
-
}
|
815
|
-
if (ind5 !== '-' && hourind === '-' + ind5) {
|
816
|
-
newValue = '0';
|
817
|
-
}
|
818
|
-
if (+newValue > 59) {
|
819
|
-
newValue = '00';
|
820
|
-
}
|
821
|
-
else if (+newValue < 10) {
|
822
|
-
newValue = '0' + newValue;
|
823
|
-
}
|
824
|
-
const beforeHourind = ind1 + ind2 + ind3;
|
825
|
-
const afterHourind = ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
|
826
|
-
const minute = beforeHourind + newValue.toString() + afterHourind;
|
827
|
-
this.textValue = minute;
|
828
|
-
}
|
829
|
-
// second
|
830
|
-
if (this.cursorPosition >= 6 && this.cursorPosition <= 8) {
|
831
|
-
const secondind = ind7 + ind8;
|
832
|
-
const newSecond = +secondind + 1;
|
833
|
-
newValue = newSecond.toString();
|
834
|
-
if (secondind === '--') {
|
835
|
-
newValue = '0';
|
836
|
-
}
|
837
|
-
if (ind7 !== '-' && secondind === ind7 + '-') {
|
838
|
-
newValue = '0';
|
839
|
-
}
|
840
|
-
if (ind8 !== '-' && secondind === '-' + ind8) {
|
841
|
-
newValue = '0';
|
842
|
-
}
|
843
|
-
if (+newValue > 59) {
|
844
|
-
newValue = '00';
|
845
|
-
}
|
846
|
-
else if (+newValue < 10) {
|
847
|
-
newValue = '0' + newValue;
|
848
|
-
}
|
849
|
-
const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
|
850
|
-
const afterHourind = ind9 + ind10 + ind11;
|
851
|
-
const second = beforeHourind + newValue.toString() + afterHourind;
|
852
|
-
this.textValue = second;
|
853
|
-
}
|
854
|
-
// type am/PM
|
855
|
-
if (this.timeType.mask === this.hhmmssam) {
|
856
|
-
if (this.cursorPosition > 8) {
|
857
|
-
let typeind = ind10.toString();
|
858
|
-
const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9;
|
859
|
-
const afterHourind = ind11;
|
860
|
-
if (ind10 === AXTranslator.get('dateTime.dayTime.p')) {
|
861
|
-
typeind = AXTranslator.get('dateTime.dayTime.a');
|
862
|
-
}
|
863
|
-
else if (ind10 === AXTranslator.get('dateTime.dayTime.a')) {
|
864
|
-
typeind = AXTranslator.get('dateTime.dayTime.p');
|
865
|
-
}
|
866
|
-
this.textValue = beforeHourind + typeind + afterHourind;
|
867
|
-
}
|
868
|
-
}
|
869
|
-
if (this.timeType.mask === this.hhmmam) {
|
870
|
-
if (this.cursorPosition >= 6) {
|
871
|
-
let typeind = ind7.toString();
|
872
|
-
const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
|
873
|
-
const afterHourind = ind8;
|
874
|
-
if (ind7 === AXTranslator.get('dateTime.dayTime.p')) {
|
875
|
-
typeind = AXTranslator.get('dateTime.dayTime.a');
|
876
|
-
}
|
877
|
-
else if (ind7 === AXTranslator.get('dateTime.dayTime.a')) {
|
878
|
-
typeind = AXTranslator.get('dateTime.dayTime.p');
|
879
|
-
}
|
880
|
-
this.textValue = beforeHourind + typeind + afterHourind;
|
881
|
-
}
|
882
|
-
}
|
883
|
-
if (this.timeType.mask === this.hham) {
|
884
|
-
if (this.cursorPosition >= 3) {
|
885
|
-
let typeind2 = ind4.toString();
|
886
|
-
const beforeHourind = ind1 + ind2 + ind3;
|
887
|
-
const afterHourind = ind5;
|
888
|
-
if (ind4 === AXTranslator.get('dateTime.dayTime.p')) {
|
889
|
-
typeind2 = AXTranslator.get('dateTime.dayTime.a');
|
890
|
-
}
|
891
|
-
else if (ind4 === AXTranslator.get('dateTime.dayTime.a')) {
|
892
|
-
typeind2 = AXTranslator.get('dateTime.dayTime.p');
|
893
|
-
}
|
894
|
-
this.textValue = beforeHourind + typeind2 + afterHourind;
|
895
|
-
}
|
896
|
-
}
|
897
|
-
}
|
898
|
-
// key down
|
899
|
-
if (event.key === 'ArrowDown') {
|
900
|
-
// hour
|
901
|
-
if (this.cursorPosition <= 2) {
|
902
|
-
const hourind = ind1 + ind2;
|
903
|
-
const newHour = +hourind - 1;
|
904
|
-
newValue = newHour.toString();
|
905
|
-
if (this.timeType.mask === this.hhmmss ||
|
906
|
-
this.timeType.mask === this.hhmm ||
|
907
|
-
this.timeType.mask === this.hh ||
|
908
|
-
this.timeType.mask === this.hhmmssam ||
|
909
|
-
this.timeType.mask === this.hhmmam ||
|
910
|
-
this.timeType.mask === this.hham) {
|
911
|
-
if (hourind === '--') {
|
912
|
-
newValue = '0';
|
913
|
-
}
|
914
|
-
if (ind1 !== '-' && hourind === ind1 + '-') {
|
915
|
-
newValue = '0';
|
916
|
-
}
|
917
|
-
if (ind2 !== '-' && hourind === '-' + ind2) {
|
918
|
-
newValue = '0';
|
919
|
-
}
|
920
|
-
if (+newValue < 1) {
|
921
|
-
newValue = '12';
|
922
|
-
}
|
923
|
-
else if (+newValue < 10) {
|
924
|
-
newValue = '0' + newValue;
|
925
|
-
}
|
926
|
-
}
|
927
|
-
else {
|
928
|
-
if (hourind === '--') {
|
929
|
-
newValue = '0';
|
930
|
-
}
|
931
|
-
if (ind1 !== '-' && hourind === ind1 + '-') {
|
932
|
-
newValue = '0';
|
933
|
-
}
|
934
|
-
if (ind2 !== '-' && hourind === '-' + ind2) {
|
935
|
-
newValue = '0';
|
936
|
-
}
|
937
|
-
if (+newValue < 0) {
|
938
|
-
newValue = '23';
|
939
|
-
}
|
940
|
-
else if (+newValue < 10) {
|
941
|
-
newValue = '0' + newValue;
|
942
|
-
}
|
943
|
-
}
|
944
|
-
const afterHourIndex = ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
|
945
|
-
const hour = newValue.toString() + afterHourIndex;
|
946
|
-
this.textValue = hour;
|
947
|
-
}
|
948
|
-
// minute
|
949
|
-
if (this.cursorPosition >= 3 && this.cursorPosition <= 5) {
|
950
|
-
const minuteind = ind4 + ind5;
|
951
|
-
const newMinute = +minuteind - 1;
|
952
|
-
newValue = newMinute.toString();
|
953
|
-
if (minuteind === '--') {
|
954
|
-
newValue = '0';
|
955
|
-
}
|
956
|
-
if (ind4 !== '-' && minuteind === ind4 + '-') {
|
957
|
-
newValue = '0';
|
958
|
-
}
|
959
|
-
if (ind5 !== '-' && minuteind === '-' + ind5) {
|
960
|
-
newValue = '0';
|
961
|
-
}
|
962
|
-
if (minuteind === '--') {
|
963
|
-
newValue = '0';
|
964
|
-
}
|
965
|
-
if (+newValue < 0) {
|
966
|
-
newValue = '59';
|
967
|
-
}
|
968
|
-
else if (+newValue < 10) {
|
969
|
-
newValue = '0' + newValue;
|
970
|
-
}
|
971
|
-
const beforeMinuteIndex = ind1 + ind2 + ind3;
|
972
|
-
const afterMinuteIndex = ind6 + ind7 + ind8 + ind9 + ind10 + ind11;
|
973
|
-
const minute = beforeMinuteIndex + newValue.toString() + afterMinuteIndex;
|
974
|
-
this.textValue = minute;
|
975
|
-
}
|
976
|
-
// second
|
977
|
-
if (this.cursorPosition >= 6 && this.cursorPosition <= 8) {
|
978
|
-
const secondIndex = ind7 + ind8;
|
979
|
-
const newSecond = +secondIndex - 1;
|
980
|
-
newValue = newSecond.toString();
|
981
|
-
if (secondIndex === '--') {
|
982
|
-
newValue = '0';
|
983
|
-
}
|
984
|
-
if (ind7 !== '-' && secondIndex === ind7 + '-') {
|
985
|
-
newValue = '0';
|
986
|
-
}
|
987
|
-
if (ind8 !== '-' && secondIndex === '-' + ind8) {
|
988
|
-
newValue = '0';
|
989
|
-
}
|
990
|
-
if (secondIndex === '--') {
|
991
|
-
newValue = '0';
|
992
|
-
}
|
993
|
-
if (+newValue < 0) {
|
994
|
-
newValue = '59';
|
995
|
-
}
|
996
|
-
else if (+newValue < 10) {
|
997
|
-
newValue = '0' + newValue;
|
998
|
-
}
|
999
|
-
const beforesecondIndex = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
|
1000
|
-
const aftersecondIndex = ind9 + ind10 + ind11;
|
1001
|
-
const second = beforesecondIndex + newValue.toString() + aftersecondIndex;
|
1002
|
-
this.textValue = second;
|
1003
|
-
}
|
1004
|
-
// type
|
1005
|
-
if (this.timeType.mask === this.hhmmssam) {
|
1006
|
-
if (this.cursorPosition > 8) {
|
1007
|
-
let typeind = ind10.toString();
|
1008
|
-
const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6 + ind7 + ind8 + ind9;
|
1009
|
-
const afterHourind = ind11;
|
1010
|
-
if (ind10 === AXTranslator.get('dateTime.dayTime.p')) {
|
1011
|
-
typeind = AXTranslator.get('dateTime.dayTime.a');
|
1012
|
-
}
|
1013
|
-
else if (ind10 === AXTranslator.get('dateTime.dayTime.a')) {
|
1014
|
-
typeind = AXTranslator.get('dateTime.dayTime.p');
|
1015
|
-
}
|
1016
|
-
this.textValue = beforeHourind + typeind + afterHourind;
|
1017
|
-
}
|
1018
|
-
}
|
1019
|
-
if (this.timeType.mask === this.hhmmam) {
|
1020
|
-
if (this.cursorPosition >= 6) {
|
1021
|
-
let typeind = ind7.toString();
|
1022
|
-
const beforeHourind = ind1 + ind2 + ind3 + ind4 + ind5 + ind6;
|
1023
|
-
const afterHourind = ind8;
|
1024
|
-
if (ind7 === AXTranslator.get('dateTime.dayTime.p')) {
|
1025
|
-
typeind = AXTranslator.get('dateTime.dayTime.a');
|
1026
|
-
}
|
1027
|
-
else if (ind7 === AXTranslator.get('dateTime.dayTime.a')) {
|
1028
|
-
typeind = AXTranslator.get('dateTime.dayTime.p');
|
1029
|
-
}
|
1030
|
-
this.textValue = beforeHourind + typeind + afterHourind;
|
1031
|
-
}
|
1032
|
-
}
|
1033
|
-
if (this.timeType.mask === this.hham) {
|
1034
|
-
if (this.cursorPosition >= 3) {
|
1035
|
-
let typeind2 = ind4.toString();
|
1036
|
-
const beforeHourind = ind1 + ind2 + ind3;
|
1037
|
-
const afterHourind = ind5;
|
1038
|
-
//TO DO this is wrong check index
|
1039
|
-
if (ind4 === AXTranslator.get('dateTime.dayTime.p')) {
|
1040
|
-
typeind2 = AXTranslator.get('dateTime.dayTime.a');
|
1041
|
-
}
|
1042
|
-
else if (ind4 === AXTranslator.get('dateTime.dayTime.a')) {
|
1043
|
-
typeind2 = AXTranslator.get('dateTime.dayTime.p');
|
1044
|
-
}
|
1045
|
-
this.textValue = beforeHourind + typeind2 + afterHourind;
|
1046
|
-
}
|
1047
|
-
}
|
1048
|
-
}
|
1049
|
-
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
1050
|
-
this.input.nativeElement.style.caretColor = 'transparent';
|
1051
|
-
event.preventDefault();
|
1052
|
-
event.stopPropagation();
|
1053
|
-
return false;
|
1054
|
-
}
|
1055
|
-
if (event.key === 'Delete') {
|
1056
|
-
event.preventDefault();
|
1057
|
-
}
|
1058
|
-
}
|
1059
|
-
handleClick(event) {
|
1060
|
-
if (this.input.nativeElement.selectionStart ||
|
1061
|
-
this.input.nativeElement.selectionStart === 0) {
|
1062
|
-
this.cursorPosition = this.input.nativeElement.selectionStart;
|
1063
|
-
}
|
1064
|
-
}
|
1065
|
-
doGetCaretPosition(ctrl) {
|
1066
|
-
let CaretPos = 0;
|
1067
|
-
if (ctrl.selectionStart || ctrl.selectionStart === 0) {
|
1068
|
-
CaretPos = ctrl.selectionStart;
|
1069
|
-
return CaretPos;
|
1070
|
-
}
|
1071
|
-
}
|
1072
|
-
setCaretPosition(ctrl, pos) {
|
1073
|
-
if (ctrl.setSelectionRange) {
|
1074
|
-
ctrl.focus();
|
1075
|
-
ctrl.setSelectionRange(pos, pos);
|
1076
|
-
}
|
1077
|
-
else if (ctrl.createTextRange) {
|
1078
|
-
const range = ctrl.createTextRange();
|
1079
|
-
range.collapse(true);
|
1080
|
-
range.moveEnd('character', pos);
|
1081
|
-
range.moveStart('character', pos);
|
1082
|
-
range.select();
|
1083
|
-
}
|
1084
|
-
}
|
1085
|
-
setCaret() {
|
1086
|
-
this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
|
1087
|
-
}
|
1088
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXTimePickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
1089
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.7", type: AXTimePickerComponent, selector: "ax-time-picker", inputs: { timeType: "timeType", showMask: "showMask", showCurentTime: "showCurentTime" }, outputs: { onValueChanged: "onValueChanged" }, host: { styleAttribute: "width: 100%" }, providers: [
|
1090
|
-
{ provide: AXValidatableComponent, useExisting: AXTimePickerComponent },
|
1091
|
-
], usesInheritance: true, ngImport: i0, template: "<div class=\"ax form-item\" [class.disabled]=\"disabled\" [attr.id]=\"uid\" #fc>\n <div class=\"ax items-wrapper\">\n <ng-content select=\"[start]\"> </ng-content>\n <i class=\"form-item-icon {{ icon }}\" *ngIf=\"icon\"></i>\n </div>\n <div class=\"content\" #content>\n <div\n class=\"ax form-control input {{ size }}\"\n [class.disabled]=\"disabled\"\n [class.readonly]=\"readonly\"\n [class.icon]=\"icon\"\n >\n <input\n #input\n type=\"text\"\n class=\"ax {{ size }}\"\n [mask]=\"timeType\"\n [showMaskTyped]=\"showMask\"\n [(ngModel)]=\"textValue\"\n placeholder=\"{{ placeholder }}\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [ngClass]=\"setTextAlign()\"\n [class.clear]=\"value && allowClear\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur($event)\"\n (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (click)=\"handleClick($event)\"\n />\n </div>\n </div>\n <div class=\"ax items-wrapper\">\n <ax-button\n *ngIf=\"value && allowClear\"\n icon=\"far fa-times\"\n type=\"danger blank\"\n (click)=\"clear()\"\n [disabled]=\"disabled\"\n [tabIndex]=\"-1\"\n ></ax-button>\n <ng-content select=\"[end]\"> </ng-content>\n </div>\n</div>\n<!-- [textMask]=\"{mask: mask , showMask:showMask , guid: maskGuid , keepCharPositions: maskKeepCharPositions}\" -->\n<!-- <input #input id=\"timePickerValue\" [textMask]=\"timeType\" type=\"text\" [(ngModel)]=\"value\" (keypress)='handleKeyPress($event)'\n (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\"> -->\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.AXButtonComponent, selector: "ax-button", inputs: ["type", "icon", "submitBehavior", "cancelBehavior", "block", "loading", "selected"] }, { kind: "directive", type: i4.NgxMaskDirective, selector: "input[mask], textarea[mask]", inputs: ["mask", "specialCharacters", "patterns", "prefix", "suffix", "thousandSeparator", "decimalMarker", "dropSpecialCharacters", "hiddenInput", "showMaskTyped", "placeHolderCharacter", "shownMaskExpression", "showTemplate", "clearIfNotMatch", "validation", "separatorLimit", "allowNegativeNumbers", "leadZeroDateTime", "leadZero", "triggerOnMaskChange", "apm", "inputTransformFn", "outputTransformFn", "keepCharacterPositions"], outputs: ["maskFilled"], exportAs: ["mask", "ngxMask"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
1092
|
-
}
|
1093
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXTimePickerComponent, decorators: [{
|
1094
|
-
type: Component,
|
1095
|
-
args: [{ selector: 'ax-time-picker', changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [
|
1096
|
-
{ provide: AXValidatableComponent, useExisting: AXTimePickerComponent },
|
1097
|
-
], template: "<div class=\"ax form-item\" [class.disabled]=\"disabled\" [attr.id]=\"uid\" #fc>\n <div class=\"ax items-wrapper\">\n <ng-content select=\"[start]\"> </ng-content>\n <i class=\"form-item-icon {{ icon }}\" *ngIf=\"icon\"></i>\n </div>\n <div class=\"content\" #content>\n <div\n class=\"ax form-control input {{ size }}\"\n [class.disabled]=\"disabled\"\n [class.readonly]=\"readonly\"\n [class.icon]=\"icon\"\n >\n <input\n #input\n type=\"text\"\n class=\"ax {{ size }}\"\n [mask]=\"timeType\"\n [showMaskTyped]=\"showMask\"\n [(ngModel)]=\"textValue\"\n placeholder=\"{{ placeholder }}\"\n [readonly]=\"readonly\"\n [disabled]=\"disabled\"\n [ngClass]=\"setTextAlign()\"\n [class.clear]=\"value && allowClear\"\n (focus)=\"handleInputFocus()\"\n (blur)=\"handleInputBlur($event)\"\n (keyup)=\"handleKeyUp($event)\"\n (keydown)=\"handleKeyDown($event)\"\n (click)=\"handleClick($event)\"\n />\n </div>\n </div>\n <div class=\"ax items-wrapper\">\n <ax-button\n *ngIf=\"value && allowClear\"\n icon=\"far fa-times\"\n type=\"danger blank\"\n (click)=\"clear()\"\n [disabled]=\"disabled\"\n [tabIndex]=\"-1\"\n ></ax-button>\n <ng-content select=\"[end]\"> </ng-content>\n </div>\n</div>\n<!-- [textMask]=\"{mask: mask , showMask:showMask , guid: maskGuid , keepCharPositions: maskKeepCharPositions}\" -->\n<!-- <input #input id=\"timePickerValue\" [textMask]=\"timeType\" type=\"text\" [(ngModel)]=\"value\" (keypress)='handleKeyPress($event)'\n (keyup)=\"handleKeyUp($event)\" (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick($event)\"> -->\n" }]
|
1098
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { onValueChanged: [{
|
1099
|
-
type: Output
|
1100
|
-
}], timeType: [{
|
1101
|
-
type: Input
|
1102
|
-
}], showMask: [{
|
1103
|
-
type: Input
|
1104
|
-
}], showCurentTime: [{
|
1105
|
-
type: Input
|
1106
|
-
}] } });
|
1107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvdGltZS1waWNrZXIvdGltZS1waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsc0JBQXNCLEdBQ3ZCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFFcEQsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxNQUFNLENBQVU7SUFDaEIsTUFBTSxDQUFVO0lBQ2hCLElBQUksQ0FBVTtJQUNkLElBQUksQ0FBUztDQUNkO0FBQ0QsTUFBTSxPQUFPLHdCQUF5QixTQUFRLFlBQTBDO0NBQUc7QUFXM0YsTUFBTSxPQUFPLHFCQUNYLFNBQVEsbUJBQW1CO0lBZ2FMO0lBNVp0QixjQUFjLEdBQ1osSUFBSSxZQUFZLEVBQTRCLENBQUM7SUFFL0Msd0NBQXdDO0lBQ3hDLDJDQUEyQztJQUMzQyx1Q0FBdUM7SUFHdkMsUUFBUSxDQUFNO0lBR2QsUUFBUSxHQUFHLElBQUksQ0FBQztJQUVoQixJQUFJLEdBQVcsTUFBTSxDQUFDO0lBRXRCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsYUFBYSxHQUFZLElBQUksQ0FBQztJQUM5QixNQUFNLEdBQVE7UUFD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QUF1QixDQUFDLE1BQU0sUUFDekMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQ25CO3dCQUNULEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFdBQVcsdUJBQXVCLEVBQUU7cUJBQ3hFOytHQU9ELGNBQWM7c0JBRGIsTUFBTTtnQkFTUCxRQUFRO3NCQURQLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYVHJhbnNsYXRvciB9IGZyb20gJ0BhY29yZXgvY29yZSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQVhCYXNlVGV4dENvbXBvbmVudCxcbiAgQVhWYWxpZGF0YWJsZUNvbXBvbmVudCxcbn0gZnJvbSAnLi4vYmFzZS9lbGVtZW50LmNsYXNzJztcbmltcG9ydCB7IEFYVmFsdWVFdmVudCB9IGZyb20gJy4uL2Jhc2UvZXZlbnRzLmNsYXNzJztcblxuZXhwb3J0IGNsYXNzIEFYVGltZVBpY2tlckl0ZW1DaGFuZ2VkRXZlbnQge1xuICBtaW51dGU/OiBudW1iZXI7XG4gIHNlY29uZD86IG51bWJlcjtcbiAgaG91cj86IG51bWJlcjtcbiAgdGltZTogc3RyaW5nO1xufVxuZXhwb3J0IGNsYXNzIEFYVGltZVBpY2tlckNoYW5nZWRFdmVudCBleHRlbmRzIEFYVmFsdWVFdmVudDxBWFRpbWVQaWNrZXJJdGVtQ2hhbmdlZEV2ZW50PiB7fVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC10aW1lLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi90aW1lLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IHN0eWxlOiAnd2lkdGg6IDEwMCUnIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogQVhWYWxpZGF0YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYVGltZVBpY2tlckNvbXBvbmVudCB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFRpbWVQaWNrZXJDb21wb25lbnRcbiAgZXh0ZW5kcyBBWEJhc2VUZXh0Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIEBPdXRwdXQoKVxuICBvblZhbHVlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYVGltZVBpY2tlckNoYW5nZWRFdmVudD4gPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8QVhUaW1lUGlja2VyQ2hhbmdlZEV2ZW50PigpO1xuXG4gIC8vIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgLy8gQENvbnRlbnRDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAvLyBpbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBASW5wdXQoKVxuICB0aW1lVHlwZTogYW55O1xuXG4gIEBJbnB1dCgpXG4gIHNob3dNYXNrID0gdHJ1ZTtcblxuICB0eXBlOiBzdHJpbmcgPSAnSEhtbSc7XG4gIEBJbnB1dCgpXG4gIHNob3dDdXJlbnRUaW1lOiBib29sZWFuID0gZmFsc2U7XG5cbiAgY2xlYXJEaXNhYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIEhIbW1zczogYW55ID0gW1xuICAgIC9bMC0yXS8sXG4gICAgL1swLTldLyxcbiAgICAnOicsXG4gICAgL1swLTVdLyxcbiAgICAvWzAtOV0vLFxuICAgICc6JyxcbiAgICAvWzAtNV0vLFxuICAgIC9bMC05XS8sXG4gIF07XG4gIEhIbW06IGFueSA9IFsvWzAtMl0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xuICBISDogYW55ID0gWy9bMC0yXS8sIC9bMC05XS9dO1xuICBoaG1tc3M6IGFueSA9IFtcbiAgICAvWzAtMV0vLFxuICAgIC9bMC05XS8sXG4gICAgJzonLFxuICAgIC9bMC01XS8sXG4gICAgL1swLTldLyxcbiAgICAnOicsXG4gICAgL1swLTVdLyxcbiAgICAvWzAtOV0vLFxuICBdO1xuICBoaG1tOiBhbnkgPSBbL1swLTFdLywgL1swLTldLywgJzonLCAvWzAtNV0vLCAvWzAtOV0vXTtcbiAgaGg6IGFueSA9IFsvWzAtMV0vLCAvWzAtOV0vXTtcbiAgLy8gVE9ETzogYXBwbHkgYW0gcG0gZnJvbSBsb2NhbGVcbiAgaGhtbXNzYW06IGFueSA9IFtcbiAgICAvWzAtMV0vLFxuICAgIC9bMC05XS8sXG4gICAgJzonLFxuICAgIC9bMC01XS8sXG4gICAgL1swLTldLyxcbiAgICAnOicsXG4gICAgL1swLTVdLyxcbiAgICAvWzAtOV0vLFxuICAgICcgJyxcbiAgICAvW2F8cHzZgnzYqF0vLFxuICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpLFxuICBdO1xuICBoaG1tYW06IGFueSA9IFtcbiAgICAvWzAtMV0vLFxuICAgIC9bMC05XS8sXG4gICAgJzonLFxuICAgIC9bMC01XS8sXG4gICAgL1swLTldLyxcbiAgICAnICcsXG4gICAgL1thfHB82YJ82KhdLyxcbiAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLm0nKSxcbiAgXTtcbiAgaGhhbTogYW55ID0gW1xuICAgIC9bMC0xXS8sXG4gICAgL1swLTldLyxcbiAgICAnICcsXG4gICAgL1thfHB82YJ82KhdLyxcbiAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLm0nKSxcbiAgXTtcbiAgdGV4dFZhbHVlOiBzdHJpbmcgPSAnJztcblxuICB2YWx1ZUhhbTogc3RyaW5nID0gJy0tICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gIHZhbHVlTWFtOiBzdHJpbmcgPSAnLS06LS0gJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcbiAgdmFsdWVTYW06IHN0cmluZyA9ICctLTotLTotLSAnICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xuXG4gIHByaXZhdGUgX3ZhbHVlczogc3RyaW5nO1xuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlcztcbiAgfVxuICBwdWJsaWMgc2V0IHZhbHVlKHY6IHN0cmluZykge1xuICAgIGlmIChcbiAgICAgIHYgPT09ICcnIHx8XG4gICAgICB2ID09IG51bGwgfHxcbiAgICAgIHYgPT09ICctLTotLTotLScgfHxcbiAgICAgIHYgPT09ICctLTotLScgfHxcbiAgICAgIHYgPT09ICctLScgfHxcbiAgICAgIHYgPT09IHRoaXMudmFsdWVTYW0gfHxcbiAgICAgIHYgPT09IHRoaXMudmFsdWVNYW0gfHxcbiAgICAgIHYgPT09IHRoaXMudmFsdWVIYW1cbiAgICApIHtcbiAgICAgIHRoaXMuY2xlYXJEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBvbGQgPSB0aGlzLl92YWx1ZXM7XG4gICAgICBzd2l0Y2ggKHRoaXMudHlwZSkge1xuICAgICAgICBjYXNlICdISG1tc3MnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSEhtbSc6XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnLS06LS0nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdISCc6XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnLS0nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdoaG1tc3MnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbSc6XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnLS06LS0nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnLS0nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdoaG1tc3NhbSc6XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlU2FtO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdoaG1tYW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZU1hbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhhbSc6XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlSGFtO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl92YWx1ZXMgPSBudWxsO1xuICAgICAgaWYgKHYgIT09IG9sZCkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHZhbHVlOiB7IGhvdXI6IG51bGwsIG1pbnV0ZTogbnVsbCwgc2Vjb25kOiBudWxsLCB0aW1lOiBudWxsIH0sXG4gICAgICAgICAgb2xkVmFsdWU6IHsgdGltZTogb2xkIH0sXG4gICAgICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNsZWFyRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoaXMuX3ZhbHVlcyAmJiB2KSB7XG4gICAgICAgIGNvbnN0IG9sZCA9IHRoaXMuX3ZhbHVlcztcbiAgICAgICAgY29uc3QgaW5kMSA9IHYuY2hhckF0KDApO1xuICAgICAgICBjb25zdCBpbmQyID0gdi5jaGFyQXQoMSk7XG4gICAgICAgIGNvbnN0IGluZDMgPSB2LmNoYXJBdCgyKTtcbiAgICAgICAgY29uc3QgaW5kNCA9IHYuY2hhckF0KDMpO1xuICAgICAgICBjb25zdCBpbmQ1ID0gdi5jaGFyQXQoNCk7XG4gICAgICAgIGNvbnN0IGluZDYgPSB2LmNoYXJBdCg1KTtcbiAgICAgICAgY29uc3QgaW5kNyA9IHYuY2hhckF0KDYpO1xuICAgICAgICBjb25zdCBpbmQ4ID0gdi5jaGFyQXQoNyk7XG4gICAgICAgIGNvbnN0IGluZDkgPSB2LmNoYXJBdCg4KTtcbiAgICAgICAgY29uc3QgaW5kMTAgPSB2LmNoYXJBdCg5KTtcblxuICAgICAgICBjb25zdCBpbmRPbGQ0ID0gb2xkLmNoYXJBdCg5KTtcbiAgICAgICAgY29uc3QgaW5kT2xkNyA9IG9sZC5jaGFyQXQoOSk7XG4gICAgICAgIGNvbnN0IGluZE9sZDEwID0gb2xkLmNoYXJBdCg5KTtcblxuICAgICAgICAvLyBoYW5kbGUgaGhtbXNzQW1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluZDEgPT09ICctJyAmJlxuICAgICAgICAgIGluZDIgIT09ICctJyAmJlxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XG4gICAgICAgICAgICAnMCcgK1xuICAgICAgICAgICAgaW5kMiArXG4gICAgICAgICAgICBpbmQzICtcbiAgICAgICAgICAgIGluZDQgK1xuICAgICAgICAgICAgaW5kNSArXG4gICAgICAgICAgICBpbmQ2ICtcbiAgICAgICAgICAgIGluZDcgK1xuICAgICAgICAgICAgaW5kOCArXG4gICAgICAgICAgICBpbmQ5ICtcbiAgICAgICAgICAgIGluZDEwICtcbiAgICAgICAgICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgMik7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMjtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5kNCA9PT0gJy0nICYmXG4gICAgICAgICAgaW5kNSAhPT0gJy0nICYmXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cbiAgICAgICAgICAgIGluZDEgK1xuICAgICAgICAgICAgaW5kMiArXG4gICAgICAgICAgICBpbmQzICtcbiAgICAgICAgICAgICcwJyArXG4gICAgICAgICAgICBpbmQ1ICtcbiAgICAgICAgICAgIGluZDYgK1xuICAgICAgICAgICAgaW5kNyArXG4gICAgICAgICAgICBpbmQ4ICtcbiAgICAgICAgICAgIGluZDkgK1xuICAgICAgICAgICAgaW5kMTAgK1xuICAgICAgICAgICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCA1KTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA1O1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmQ3ID09PSAnLScgJiZcbiAgICAgICAgICBpbmQ4ICE9PSAnLScgJiZcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW1cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxuICAgICAgICAgICAgaW5kMSArXG4gICAgICAgICAgICBpbmQyICtcbiAgICAgICAgICAgIGluZDMgK1xuICAgICAgICAgICAgaW5kNCArXG4gICAgICAgICAgICBpbmQ1ICtcbiAgICAgICAgICAgIGluZDYgK1xuICAgICAgICAgICAgJzAnICtcbiAgICAgICAgICAgIGluZDggK1xuICAgICAgICAgICAgaW5kOSArXG4gICAgICAgICAgICBpbmQxMCArXG4gICAgICAgICAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLm0nKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDgpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDg7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZE9sZDEwID09PSAnLScgJiYgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxuICAgICAgICAgICAgaW5kMSArXG4gICAgICAgICAgICBpbmQyICtcbiAgICAgICAgICAgIGluZDMgK1xuICAgICAgICAgICAgaW5kNCArXG4gICAgICAgICAgICBpbmQ1ICtcbiAgICAgICAgICAgIGluZDYgK1xuICAgICAgICAgICAgaW5kNyArXG4gICAgICAgICAgICBpbmQ4ICtcbiAgICAgICAgICAgIGluZDkgK1xuICAgICAgICAgICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluZDEgPT09ICctJyAmJlxuICAgICAgICAgIGluZDIgIT09ICctJyAmJlxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW1cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxuICAgICAgICAgICAgJzAnICtcbiAgICAgICAgICAgIGluZDIgK1xuICAgICAgICAgICAgaW5kMyArXG4gICAgICAgICAgICBpbmQ0ICtcbiAgICAgICAgICAgIGluZDUgK1xuICAgICAgICAgICAgaW5kNiArXG4gICAgICAgICAgICBpbmQ3ICtcbiAgICAgICAgICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUubScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgMik7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMjtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5kNCA9PT0gJy0nICYmXG4gICAgICAgICAgaW5kNSAhPT0gJy0nICYmXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XG4gICAgICAgICAgICBpbmQxICtcbiAgICAgICAgICAgIGluZDIgK1xuICAgICAgICAgICAgaW5kMyArXG4gICAgICAgICAgICAnMCcgK1xuICAgICAgICAgICAgaW5kNSArXG4gICAgICAgICAgICBpbmQ2ICtcbiAgICAgICAgICAgIGluZDcgK1xuICAgICAgICAgICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCA1KTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA1O1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRPbGQ3ID09PSAnLScgJiYgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cbiAgICAgICAgICAgIGluZDEgK1xuICAgICAgICAgICAgaW5kMiArXG4gICAgICAgICAgICBpbmQzICtcbiAgICAgICAgICAgIGluZDQgK1xuICAgICAgICAgICAgaW5kNSArXG4gICAgICAgICAgICBpbmQ2ICtcbiAgICAgICAgICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vXG4gICAgICAgIGlmIChpbmQxID09PSAnLScgJiYgaW5kMiAhPT0gJy0nICYmIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxuICAgICAgICAgICAgJzAnICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5tJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAyKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAyO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRPbGQ0ID09PSAnLScgJiYgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW0pIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XG4gICAgICAgICAgICBpbmQxICsgaW5kMiArIGluZDMgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgaW5kMSA9PT0gJy0nICYmXG4gICAgICAgICAgaW5kMiAhPT0gJy0nICYmXG4gICAgICAgICAgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3MgfHxcbiAgICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5ISG1tc3MpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJzAnICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kODtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDIpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluZDQgPT09ICctJyAmJlxuICAgICAgICAgIGluZDUgIT09ICctJyAmJlxuICAgICAgICAgICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8XG4gICAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEhtbXNzKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGluZDEgKyBpbmQyICsgaW5kMyArICcwJyArIGluZDUgKyBpbmQ2ICsgaW5kNyArIGluZDg7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCA2KTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSA2O1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmQ3ID09PSAnLScgJiZcbiAgICAgICAgICBpbmQ4ICE9PSAnLScgJiZcbiAgICAgICAgICAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zcyB8fFxuICAgICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLkhIbW1zcylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyAnMCcgKyBpbmQ4O1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgOSk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gOTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmQxID09PSAnLScgJiZcbiAgICAgICAgICBpbmQyICE9PSAnLScgJiZcbiAgICAgICAgICAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW0gfHwgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLkhIbW0pXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJzAnICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q2FyZXRQb3NpdGlvbih0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIDIpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDI7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGluZDQgPT09ICctJyAmJlxuICAgICAgICAgIGluZDUgIT09ICctJyAmJlxuICAgICAgICAgICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fCB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuSEhtbSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBpbmQxICsgaW5kMiArIGluZDMgKyAnMCcgKyBpbmQ1O1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgNSk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gNTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbmQxID09PSAnLScgJiZcbiAgICAgICAgICBpbmQyICE9PSAnLScgJiZcbiAgICAgICAgICAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoIHx8IHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5ISClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnMCcgKyBpbmQyO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgMik7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMjtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHYgIT09IHRoaXMuX3ZhbHVlcykge1xuICAgICAgICBjb25zdCBvbGQgPSB0aGlzLl92YWx1ZXM7XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gdjtcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gdiAmJiB2LmluZGV4T2YoJy0nKSA9PT0gLTEgPyB2IDogbnVsbDtcbiAgICAgICAgaWYgKHYuaW5kZXhPZignLScpID09PSAtMSkge1xuICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2KTtcbiAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgdGltZTogdixcbiAgICAgICAgICAgICAgaG91cjogTnVtYmVyKHZbMF0gKyB2WzFdKSxcbiAgICAgICAgICAgICAgbWludXRlOlxuICAgICAgICAgICAgICAgIHZbM10gJiZcbiAgICAgICAgICAgICAgICB2WzNdICE9PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSAmJlxuICAgICAgICAgICAgICAgIHZbM10gIT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpXG4gICAgICAgICAgICAgICAgICA/IE51bWJlcih2WzNdICsgdls0XSlcbiAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgc2Vjb25kOlxuICAgICAgICAgICAgICAgIHZbNl0gJiZcbiAgICAgICAgICAgICAgICB2WzZdICE9PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSAmJlxuICAgICAgICAgICAgICAgIHZbNl0gIT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpXG4gICAgICAgICAgICAgICAgICA/IE51bWJlcih2WzZdICsgdls3XSlcbiAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbGRWYWx1ZTogeyB0aW1lOiBvbGQgfSxcbiAgICAgICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjdXJzb3JQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcmVmOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIoY2RyLCByZWYpO1xuXG4gICAgdGhpcy50aW1lVHlwZSA9ICdISG1tJztcbiAgfVxuICBjbGVhclZhbHVlKCkge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICB0aGlzLmhhbmRsZUlucHV0Rm9jdXMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy50aW1lVHlwZSkge1xuICAgICAgY2FzZSAnSEhtbXNzJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ0hIbW1zcyc7XG4gICAgICAgIHRoaXMudGltZVR5cGUgPSAnSGg6bTA6czAnO1xuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogJy0tOi0tOi0tJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdISG1tJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ0hIbW0nO1xuICAgICAgICB0aGlzLnRpbWVUeXBlID0gJ0hoOm0wJztcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLTotLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSEgnOlxuICAgICAgICB0aGlzLnR5cGUgPSAnSEgnO1xuICAgICAgICB0aGlzLnRpbWVUeXBlID0gJ0hoJztcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGhtbXNzJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ2hobW1zcyc7XG4gICAgICAgIHRoaXMudGltZVR5cGUgPSAnaGg6bTA6czAnO1xuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogJy0tOi0tOi0tJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoaG1tJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ2hobW0nO1xuICAgICAgICB0aGlzLnRpbWVUeXBlID0gJ2hoOm0wOnMwJztcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLTotLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGgnOlxuICAgICAgICB0aGlzLnR5cGUgPSAnaGgnO1xuICAgICAgICB0aGlzLnRpbWVUeXBlID0gJ2hoJztcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6ICctLSc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGhtbXNzYW0nOlxuICAgICAgICB0aGlzLnR5cGUgPSAnaGhtbXNzYW0nO1xuICAgICAgICB0aGlzLnRpbWVUeXBlID0gJ0gwaDA6bTBzMEFBJztcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IHRoaXMudmFsdWVTYW07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaGhtbWFtJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ2hobW1hbSc7XG4gICAgICAgIHRoaXMudGltZVR5cGUgPSAnSDBoMDptMEFBJztcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IHRoaXMudmFsdWVNYW07XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdoaGFtJzpcbiAgICAgICAgdGhpcy50eXBlID0gJ2hoYW0nO1xuICAgICAgICB0aGlzLnRpbWVUeXBlID0gJ2gwaDBhbSc7XG5cbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZSA6IHRoaXMudmFsdWVIYW07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy50eXBlID0gJ0hIbW0nO1xuICAgICAgICB0aGlzLnRpbWVUeXBlID0gJ0gwaDA6bTAnO1xuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlIDogJy0tOi0tJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dDdXJlbnRUaW1lID09PSB0cnVlKSB7XG4gICAgICBjb25zdCBob3VyOiBhbnkgPVxuICAgICAgICBuZXcgRGF0ZSgpLmdldEhvdXJzKCkgPiAxMFxuICAgICAgICAgID8gbmV3IERhdGUoKS5nZXRIb3VycygpXG4gICAgICAgICAgOiAnMCcgKyBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gICAgICBsZXQgYW1Ib3VyOiBhbnk7XG5cbiAgICAgIGlmIChuZXcgRGF0ZSgpLmdldEhvdXJzKCkgPiAxMCkge1xuICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRIb3VycygpID4gMTIpIHtcbiAgICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRIb3VycygpIC0gMTIgPCAxMCkge1xuICAgICAgICAgICAgYW1Ib3VyID0gJzAnICsgKG5ldyBEYXRlKCkuZ2V0SG91cnMoKSAtIDEyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW1Ib3VyID0gbmV3IERhdGUoKS5nZXRIb3VycygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbUhvdXIgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFtSG91ciA9ICcwJyArIG5ldyBEYXRlKCkuZ2V0SG91cnMoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWluID1cbiAgICAgICAgbmV3IERhdGUoKS5nZXRNaW51dGVzKCkgPiA5XG4gICAgICAgICAgPyBuZXcgRGF0ZSgpLmdldE1pbnV0ZXMoKVxuICAgICAgICAgIDogJzAnICsgbmV3IERhdGUoKS5nZXRNaW51dGVzKCk7XG4gICAgICBjb25zdCBzZWMgPVxuICAgICAgICBuZXcgRGF0ZSgpLmdldFNlY29uZHMoKSA+IDlcbiAgICAgICAgICA/IG5ldyBEYXRlKCkuZ2V0U2Vjb25kcygpXG4gICAgICAgICAgOiAnMCcgKyBuZXcgRGF0ZSgpLmdldFNlY29uZHMoKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50eXBlID09PSAnaGgnIHx8XG4gICAgICAgIHRoaXMudHlwZSA9PT0gJ2hobW0nIHx8XG4gICAgICAgIHRoaXMudHlwZSA9PT0gJ2hobW1zcycgfHxcbiAgICAgICAgdGhpcy50eXBlID09PSAnaGhtbXNzYW0nXG4gICAgICApIHtcbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgICAgIGFtSG91ciArXG4gICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgbWluICtcbiAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICBzZWMgK1xuICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucG0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgICAgIGFtSG91ciArXG4gICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgbWluICtcbiAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICBzZWMgK1xuICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdoaGFtJykge1xuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBhbUhvdXIgKyAnICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnBtJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGFtSG91ciArICcgJyArIEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYW0nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdoaG1tYW0nKSB7XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgICAgICBhbUhvdXIgKyAnOicgKyBtaW4gKyAnICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnBtJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgICAgICBhbUhvdXIgKyAnOicgKyBtaW4gKyAnICcgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBob3VyICsgJzonICsgbWluICsgJzonICsgc2VjO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU3RhcnRmb2N1cygpIHtcbiAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcbiAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAwO1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAnYXV0byc7XG4gICAgfSwgMCk7XG4gIH1cblxuICBoYW5kbGVJbnB1dEZvY3VzKCkge1xuICAgIHRoaXMub25TdGFydGZvY3VzKCk7XG4gICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cbiAgaGFuZGxlSW5wdXRCbHVyKGUpIHtcbiAgICBpZiAodGhpcy50ZXh0VmFsdWUuaW5kZXhPZignLScpICE9PSAtMSkge1xuICAgICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnSEhtbXNzJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0hIbW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnSEgnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbXNzJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICctLTotLTotLSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hobW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tOi0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gJy0tJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbXNzYW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZVNhbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaGhtbWFtJzpcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHRoaXMudmFsdWVNYW07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hoYW0nOlxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gdGhpcy52YWx1ZUhhbTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVLZXlQcmVzcyhldmVudDogYW55KSB7XG4gICAgY29uc3QgaW5wdXRDaGFyID0gU3RyaW5nLmZyb21DaGFyQ29kZShldmVudC5jaGFyQ29kZSk7XG4gICAgY29uc3QgZmlyc3RDaGFyID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDApO1xuICAgIGNvbnN0IHNlY29uZENoYXIgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMSk7XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0IHx8XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgIC8vIHRoaXMuY3Vyc29yUG9zaXRpb24gKz0gMSA7XG4gICAgICB9XG4gICAgfSwgMCk7XG5cbiAgICBpZiAoZmlyc3RDaGFyID09PSAnMicpIHtcbiAgICAgIGlmIChcbiAgICAgICAgc2Vjb25kQ2hhciA9PT0gJycgfHxcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUuY2hhckF0KDEpID49ICc0JyB8fFxuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uIDwgM1xuICAgICAgKSB7XG4gICAgICAgIGlmIChpbnB1dENoYXIgPj0gJzQnKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8XG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbSB8fFxuICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoIHx8XG4gICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0gfHxcbiAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcbiAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtXG4gICAgKSB7XG4gICAgICBpZiAoZmlyc3RDaGFyID09PSAnMScpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNlY29uZENoYXIgPT09ICcnIHx8XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUuY2hhckF0KDEpID49ICczJyB8fFxuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPCAzXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChpbnB1dENoYXIgPj0gJzMnKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaW5wdXRDaGFyID09PSAnLScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAnYXV0byc7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIC8vIHVwICYgZG93biBidXR0b25cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIHRoaXMuc2V0Q2FyZXQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuc2V0Q2FyZXQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gbGVmdCAmIHJpZ2h0IEJ1dHRvblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCB8fFxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGhvbWUgYnV0dG9uXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcbiAgICB9XG5cbiAgICAvLyBlbmQgYnV0dG9uXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VuZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8XG4gICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcbiAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW1cbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtKSB7XG4gICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24oXG4gICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5jYXJldENvbG9yID0gJ2F1dG8nO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtKSB7XG4gICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IDY7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24oXG4gICAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5jYXJldENvbG9yID0gJ2F1dG8nO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbSkge1xuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAzO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKFxuICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbiA9IHRoaXMudGV4dFZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBiYWNrc3BhY2UgQ29udHJvbFxuICAgIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XG4gICAgICBjb25zdCBpbmQxID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDApO1xuICAgICAgY29uc3QgaW5kMiA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCgxKTtcbiAgICAgIGNvbnN0IGluZDMgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMik7XG4gICAgICBjb25zdCBpbmQ0ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDMpO1xuICAgICAgY29uc3QgaW5kNSA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg0KTtcbiAgICAgIGNvbnN0IGluZDYgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNSk7XG4gICAgICBjb25zdCBpbmQ3ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDYpO1xuICAgICAgY29uc3QgaW5kOCA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg3KTtcbiAgICAgIGNvbnN0IGluZDkgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoOCk7XG4gICAgICBjb25zdCBpbmQxMCA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg5KTtcbiAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0pIHtcbiAgICAgICAgaWYgKGluZDEwID09PSAnLScpIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XG4gICAgICAgICAgICBpbmQxICtcbiAgICAgICAgICAgIGluZDIgK1xuICAgICAgICAgICAgaW5kMyArXG4gICAgICAgICAgICBpbmQ0ICtcbiAgICAgICAgICAgIGluZDUgK1xuICAgICAgICAgICAgaW5kNiArXG4gICAgICAgICAgICBpbmQ3ICtcbiAgICAgICAgICAgIGluZDggK1xuICAgICAgICAgICAgaW5kOSArXG4gICAgICAgICAgICBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAwO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICBpZiAoaW5kNyA9PT0gJy0nKSB7XG4gICAgICAgICAgdGhpcy50ZXh0VmFsdWUgPVxuICAgICAgICAgICAgaW5kMSArXG4gICAgICAgICAgICBpbmQyICtcbiAgICAgICAgICAgIGluZDMgK1xuICAgICAgICAgICAgaW5kNCArXG4gICAgICAgICAgICBpbmQ1ICtcbiAgICAgICAgICAgIGluZDYgK1xuICAgICAgICAgICAgQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hbScpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgMCk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtKSB7XG4gICAgICAgIGlmIChpbmQ0ID09PSAnLScpIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9XG4gICAgICAgICAgICBpbmQxICsgaW5kMiArIGluZDMgKyBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmFtJyk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCAwKTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSAwO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRleHRWYWx1ZS5sZW5ndGggPD0gMCkge1xuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gLT0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VuZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8XG4gICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tYW0gfHxcbiAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW1cbiAgICAgICkge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV3VmFsdWUgPSB0aGlzLnRleHRWYWx1ZTtcblxuICAgIGNvbnN0IGluZDEgPSBuZXdWYWx1ZS5jaGFyQXQoMCk7XG4gICAgY29uc3QgaW5kMiA9IG5ld1ZhbHVlLmNoYXJBdCgxKTtcbiAgICBjb25zdCBpbmQzID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDIpO1xuICAgIGNvbnN0IGluZDQgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoMyk7XG4gICAgY29uc3QgaW5kNSA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg0KTtcbiAgICBjb25zdCBpbmQ2ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDUpO1xuICAgIGNvbnN0IGluZDcgPSB0aGlzLnRleHRWYWx1ZS5jaGFyQXQoNik7XG4gICAgY29uc3QgaW5kOCA9IHRoaXMudGV4dFZhbHVlLmNoYXJBdCg3KTtcbiAgICBjb25zdCBpbmQ5ID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDgpO1xuICAgIGNvbnN0IGluZDEwID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDkpO1xuICAgIGNvbnN0IGluZDExID0gdGhpcy50ZXh0VmFsdWUuY2hhckF0KDEwKTtcblxuICAgIC8vIHVwIGtleVxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgLy8gaG91clxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPD0gMikge1xuICAgICAgICBjb25zdCBob3VyaW5kID0gaW5kMSArIGluZDI7XG4gICAgICAgIGNvbnN0IG5ld0hvdXIgPSAraG91cmluZCArIDE7XG4gICAgICAgIG5ld1ZhbHVlID0gbmV3SG91ci50b1N0cmluZygpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zcyB8fFxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1zc2FtIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSB8fFxuICAgICAgICAgIHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaGFtXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChob3VyaW5kID09PSAnLS0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDEgIT09ICctJyAmJiBob3VyaW5kID09PSBpbmQxICsgJy0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDIgIT09ICctJyAmJiBob3VyaW5kID09PSAnLScgKyBpbmQyKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCtuZXdWYWx1ZSA+IDEyKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwMSc7XG4gICAgICAgICAgfSBlbHNlIGlmICgrbmV3VmFsdWUgPCAxMCkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGhvdXJpbmQgPT09ICctLScpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kMSAhPT0gJy0nICYmIGhvdXJpbmQgPT09IGluZDEgKyAnLScpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kMiAhPT0gJy0nICYmIGhvdXJpbmQgPT09ICctJyArIGluZDIpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoK25ld1ZhbHVlID4gMjMpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAwJztcbiAgICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPVxuICAgICAgICAgIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIGluZDExO1xuICAgICAgICBjb25zdCBob3VyID0gbmV3VmFsdWUudG9TdHJpbmcoKSArIGFmdGVySG91cmluZDtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSBob3VyO1xuICAgICAgfVxuICAgICAgLy8gbWludXRlXG4gICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSAzICYmIHRoaXMuY3Vyc29yUG9zaXRpb24gPD0gNSkge1xuICAgICAgICBjb25zdCBob3VyaW5kID0gaW5kNCArIGluZDU7XG4gICAgICAgIGNvbnN0IG5ld0hvdXIgPSAraG91cmluZCArIDE7XG5cbiAgICAgICAgbmV3VmFsdWUgPSBuZXdIb3VyLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChob3VyaW5kID09PSAnLS0nKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDQgIT09ICctJyAmJiBob3VyaW5kID09PSBpbmQ0ICsgJy0nKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDUgIT09ICctJyAmJiBob3VyaW5kID09PSAnLScgKyBpbmQ1KSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCtuZXdWYWx1ZSA+IDU5KSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMDAnO1xuICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzO1xuICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQ2ICsgaW5kNyArIGluZDggKyBpbmQ5ICsgaW5kMTAgKyBpbmQxMTtcbiAgICAgICAgY29uc3QgbWludXRlID0gYmVmb3JlSG91cmluZCArIG5ld1ZhbHVlLnRvU3RyaW5nKCkgKyBhZnRlckhvdXJpbmQ7XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gbWludXRlO1xuICAgICAgfVxuXG4gICAgICAvLyBzZWNvbmRcbiAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uID49IDYgJiYgdGhpcy5jdXJzb3JQb3NpdGlvbiA8PSA4KSB7XG4gICAgICAgIGNvbnN0IHNlY29uZGluZCA9IGluZDcgKyBpbmQ4O1xuICAgICAgICBjb25zdCBuZXdTZWNvbmQgPSArc2Vjb25kaW5kICsgMTtcblxuICAgICAgICBuZXdWYWx1ZSA9IG5ld1NlY29uZC50b1N0cmluZygpO1xuICAgICAgICBpZiAoc2Vjb25kaW5kID09PSAnLS0nKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDcgIT09ICctJyAmJiBzZWNvbmRpbmQgPT09IGluZDcgKyAnLScpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kOCAhPT0gJy0nICYmIHNlY29uZGluZCA9PT0gJy0nICsgaW5kOCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICgrbmV3VmFsdWUgPiA1OSkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAwJztcbiAgICAgICAgfSBlbHNlIGlmICgrbmV3VmFsdWUgPCAxMCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNjtcbiAgICAgICAgY29uc3QgYWZ0ZXJIb3VyaW5kID0gaW5kOSArIGluZDEwICsgaW5kMTE7XG4gICAgICAgIGNvbnN0IHNlY29uZCA9IGJlZm9yZUhvdXJpbmQgKyBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJIb3VyaW5kO1xuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHNlY29uZDtcbiAgICAgIH1cblxuICAgICAgLy8gdHlwZSBhbS9QTVxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+IDgpIHtcbiAgICAgICAgICBsZXQgdHlwZWluZCA9IGluZDEwLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID1cbiAgICAgICAgICAgIGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOTtcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQxMTtcblxuICAgICAgICAgIGlmIChpbmQxMCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDEwID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kICsgYWZ0ZXJIb3VyaW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSA2KSB7XG4gICAgICAgICAgbGV0IHR5cGVpbmQgPSBpbmQ3LnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2O1xuICAgICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDg7XG5cbiAgICAgICAgICBpZiAoaW5kNyA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDcgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpKSB7XG4gICAgICAgICAgICB0eXBlaW5kID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gYmVmb3JlSG91cmluZCArIHR5cGVpbmQgKyBhZnRlckhvdXJpbmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSAzKSB7XG4gICAgICAgICAgbGV0IHR5cGVpbmQyID0gaW5kNC50b1N0cmluZygpO1xuXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMztcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQ1O1xuXG4gICAgICAgICAgaWYgKGluZDQgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpKSB7XG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW5kNCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5hJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQyID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gYmVmb3JlSG91cmluZCArIHR5cGVpbmQyICsgYWZ0ZXJIb3VyaW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8ga2V5IGRvd25cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgLy8gaG91clxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPD0gMikge1xuICAgICAgICBjb25zdCBob3VyaW5kID0gaW5kMSArIGluZDI7XG4gICAgICAgIGNvbnN0IG5ld0hvdXIgPSAraG91cmluZCAtIDE7XG5cbiAgICAgICAgbmV3VmFsdWUgPSBuZXdIb3VyLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW0gfHxcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGggfHxcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbXNzYW0gfHxcbiAgICAgICAgICB0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhtbWFtIHx8XG4gICAgICAgICAgdGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhoYW1cbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGhvdXJpbmQgPT09ICctLScpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kMSAhPT0gJy0nICYmIGhvdXJpbmQgPT09IGluZDEgKyAnLScpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5kMiAhPT0gJy0nICYmIGhvdXJpbmQgPT09ICctJyArIGluZDIpIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoK25ld1ZhbHVlIDwgMSkge1xuICAgICAgICAgICAgbmV3VmFsdWUgPSAnMTInO1xuICAgICAgICAgIH0gZWxzZSBpZiAoK25ld1ZhbHVlIDwgMTApIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChob3VyaW5kID09PSAnLS0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDEgIT09ICctJyAmJiBob3VyaW5kID09PSBpbmQxICsgJy0nKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGluZDIgIT09ICctJyAmJiBob3VyaW5kID09PSAnLScgKyBpbmQyKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCtuZXdWYWx1ZSA8IDApIHtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gJzIzJztcbiAgICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XG4gICAgICAgICAgICBuZXdWYWx1ZSA9ICcwJyArIG5ld1ZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZnRlckhvdXJJbmRleCA9XG4gICAgICAgICAgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOSArIGluZDEwICsgaW5kMTE7XG4gICAgICAgIGNvbnN0IGhvdXIgPSBuZXdWYWx1ZS50b1N0cmluZygpICsgYWZ0ZXJIb3VySW5kZXg7XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gaG91cjtcbiAgICAgIH1cbiAgICAgIC8vIG1pbnV0ZVxuICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb24gPj0gMyAmJiB0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDUpIHtcbiAgICAgICAgY29uc3QgbWludXRlaW5kID0gaW5kNCArIGluZDU7XG4gICAgICAgIGNvbnN0IG5ld01pbnV0ZSA9ICttaW51dGVpbmQgLSAxO1xuXG4gICAgICAgIG5ld1ZhbHVlID0gbmV3TWludXRlLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChtaW51dGVpbmQgPT09ICctLScpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kNCAhPT0gJy0nICYmIG1pbnV0ZWluZCA9PT0gaW5kNCArICctJykge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmQ1ICE9PSAnLScgJiYgbWludXRlaW5kID09PSAnLScgKyBpbmQ1KSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZWluZCA9PT0gJy0tJykge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICgrbmV3VmFsdWUgPCAwKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnNTknO1xuICAgICAgICB9IGVsc2UgaWYgKCtuZXdWYWx1ZSA8IDEwKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCcgKyBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiZWZvcmVNaW51dGVJbmRleCA9IGluZDEgKyBpbmQyICsgaW5kMztcbiAgICAgICAgY29uc3QgYWZ0ZXJNaW51dGVJbmRleCA9IGluZDYgKyBpbmQ3ICsgaW5kOCArIGluZDkgKyBpbmQxMCArIGluZDExO1xuICAgICAgICBjb25zdCBtaW51dGUgPVxuICAgICAgICAgIGJlZm9yZU1pbnV0ZUluZGV4ICsgbmV3VmFsdWUudG9TdHJpbmcoKSArIGFmdGVyTWludXRlSW5kZXg7XG4gICAgICAgIHRoaXMudGV4dFZhbHVlID0gbWludXRlO1xuICAgICAgfVxuXG4gICAgICAvLyBzZWNvbmRcbiAgICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uID49IDYgJiYgdGhpcy5jdXJzb3JQb3NpdGlvbiA8PSA4KSB7XG4gICAgICAgIGNvbnN0IHNlY29uZEluZGV4ID0gaW5kNyArIGluZDg7XG4gICAgICAgIGNvbnN0IG5ld1NlY29uZCA9ICtzZWNvbmRJbmRleCAtIDE7XG5cbiAgICAgICAgbmV3VmFsdWUgPSBuZXdTZWNvbmQudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKHNlY29uZEluZGV4ID09PSAnLS0nKSB7XG4gICAgICAgICAgbmV3VmFsdWUgPSAnMCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZDcgIT09ICctJyAmJiBzZWNvbmRJbmRleCA9PT0gaW5kNyArICctJykge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmQ4ICE9PSAnLScgJiYgc2Vjb25kSW5kZXggPT09ICctJyArIGluZDgpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kSW5kZXggPT09ICctLScpIHtcbiAgICAgICAgICBuZXdWYWx1ZSA9ICcwJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoK25ld1ZhbHVlIDwgMCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzU5JztcbiAgICAgICAgfSBlbHNlIGlmICgrbmV3VmFsdWUgPCAxMCkge1xuICAgICAgICAgIG5ld1ZhbHVlID0gJzAnICsgbmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmVmb3Jlc2Vjb25kSW5kZXggPSBpbmQxICsgaW5kMiArIGluZDMgKyBpbmQ0ICsgaW5kNSArIGluZDY7XG4gICAgICAgIGNvbnN0IGFmdGVyc2Vjb25kSW5kZXggPSBpbmQ5ICsgaW5kMTAgKyBpbmQxMTtcbiAgICAgICAgY29uc3Qgc2Vjb25kID1cbiAgICAgICAgICBiZWZvcmVzZWNvbmRJbmRleCArIG5ld1ZhbHVlLnRvU3RyaW5nKCkgKyBhZnRlcnNlY29uZEluZGV4O1xuICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IHNlY29uZDtcbiAgICAgIH1cblxuICAgICAgLy8gdHlwZVxuICAgICAgaWYgKHRoaXMudGltZVR5cGUubWFzayA9PT0gdGhpcy5oaG1tc3NhbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+IDgpIHtcbiAgICAgICAgICBsZXQgdHlwZWluZCA9IGluZDEwLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID1cbiAgICAgICAgICAgIGluZDEgKyBpbmQyICsgaW5kMyArIGluZDQgKyBpbmQ1ICsgaW5kNiArIGluZDcgKyBpbmQ4ICsgaW5kOTtcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQxMTtcblxuICAgICAgICAgIGlmIChpbmQxMCA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDEwID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKSkge1xuICAgICAgICAgICAgdHlwZWluZCA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kICsgYWZ0ZXJIb3VyaW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50aW1lVHlwZS5tYXNrID09PSB0aGlzLmhobW1hbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSA2KSB7XG4gICAgICAgICAgbGV0IHR5cGVpbmQgPSBpbmQ3LnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBjb25zdCBiZWZvcmVIb3VyaW5kID0gaW5kMSArIGluZDIgKyBpbmQzICsgaW5kNCArIGluZDUgKyBpbmQ2O1xuICAgICAgICAgIGNvbnN0IGFmdGVySG91cmluZCA9IGluZDg7XG5cbiAgICAgICAgICBpZiAoaW5kNyA9PT0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJykpIHtcbiAgICAgICAgICAgIHR5cGVpbmQgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDcgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpKSB7XG4gICAgICAgICAgICB0eXBlaW5kID0gQVhUcmFuc2xhdG9yLmdldCgnZGF0ZVRpbWUuZGF5VGltZS5wJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID0gYmVmb3JlSG91cmluZCArIHR5cGVpbmQgKyBhZnRlckhvdXJpbmQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRpbWVUeXBlLm1hc2sgPT09IHRoaXMuaGhhbSkge1xuICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA+PSAzKSB7XG4gICAgICAgICAgbGV0IHR5cGVpbmQyID0gaW5kNC50b1N0cmluZygpO1xuXG4gICAgICAgICAgY29uc3QgYmVmb3JlSG91cmluZCA9IGluZDEgKyBpbmQyICsgaW5kMztcbiAgICAgICAgICBjb25zdCBhZnRlckhvdXJpbmQgPSBpbmQ1O1xuICAgICAgICAgIC8vVE8gRE8gdGhpcyBpcyB3cm9uZyBjaGVjayBpbmRleFxuICAgICAgICAgIGlmIChpbmQ0ID09PSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLnAnKSkge1xuICAgICAgICAgICAgdHlwZWluZDIgPSBBWFRyYW5zbGF0b3IuZ2V0KCdkYXRlVGltZS5kYXlUaW1lLmEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGluZDQgPT09IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUuYScpKSB7XG4gICAgICAgICAgICB0eXBlaW5kMiA9IEFYVHJhbnNsYXRvci5nZXQoJ2RhdGVUaW1lLmRheVRpbWUucCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9IGJlZm9yZUhvdXJpbmQgKyB0eXBlaW5kMiArIGFmdGVySG91cmluZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChldmVudC5rZXkgPT09ICdEZWxldGUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUNsaWNrKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0IHx8XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgfVxuICB9XG5cbiAgZG9HZXRDYXJldFBvc2l0aW9uKGN0cmwpIHtcbiAgICBsZXQgQ2FyZXRQb3MgPSAwO1xuICAgIGlmIChjdHJsLnNlbGVjdGlvblN0YXJ0IHx8IGN0cmwuc2VsZWN0aW9uU3RhcnQgPT09IDApIHtcbiAgICAgIENhcmV0UG9zID0gY3RybC5zZWxlY3Rpb25TdGFydDtcbiAgICAgIHJldHVybiBDYXJldFBvcztcbiAgICB9XG4gIH1cblxuICBzZXRDYXJldFBvc2l0aW9uKGN0cmwsIHBvcykge1xuICAgIGlmIChjdHJsLnNldFNlbGVjdGlvblJhbmdlKSB7XG4gICAgICBjdHJsLmZvY3VzKCk7XG4gICAgICBjdHJsLnNldFNlbGVjdGlvblJhbmdlKHBvcywgcG9zKTtcbiAgICB9IGVsc2UgaWYgKGN0cmwuY3JlYXRlVGV4dFJhbmdlKSB7XG4gICAgICBjb25zdCByYW5nZSA9IGN0cmwuY3JlYXRlVGV4dFJhbmdlKCk7XG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIHBvcyk7XG4gICAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHBvcyk7XG4gICAgICByYW5nZS5zZWxlY3QoKTtcbiAgICB9XG4gIH1cblxuICBzZXRDYXJldCgpIHtcbiAgICB0aGlzLnNldENhcmV0UG9zaXRpb24odGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCB0aGlzLmN1cnNvclBvc2l0aW9uKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4IGZvcm0taXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJkaXNhYmxlZFwiIFthdHRyLmlkXT1cInVpZFwiICNmYz5cbiAgPGRpdiBjbGFzcz1cImF4IGl0ZW1zLXdyYXBwZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc3RhcnRdXCI+IDwvbmctY29udGVudD5cbiAgICA8aSBjbGFzcz1cImZvcm0taXRlbS1pY29uIHt7IGljb24gfX1cIiAqbmdJZj1cImljb25cIj48L2k+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiICNjb250ZW50PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYXggZm9ybS1jb250cm9sIGlucHV0IHt7IHNpemUgfX1cIlxuICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtjbGFzcy5yZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICBbY2xhc3MuaWNvbl09XCJpY29uXCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgI2lucHV0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgY2xhc3M9XCJheCB7eyBzaXplIH19XCJcbiAgICAgICAgW21hc2tdPVwidGltZVR5cGVcIlxuICAgICAgICBbc2hvd01hc2tUeXBlZF09XCJzaG93TWFza1wiXG4gICAgICAgIFsobmdNb2RlbCldPVwidGV4dFZhbHVlXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciB9fVwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInNldFRleHRBbGlnbigpXCJcbiAgICAgICAgW2NsYXNzLmNsZWFyXT1cInZhbHVlICYmIGFsbG93Q2xlYXJcIlxuICAgICAgICAoZm9jdXMpPVwiaGFuZGxlSW5wdXRGb2N1cygpXCJcbiAgICAgICAgKGJsdXIpPVwiaGFuZGxlSW5wdXRCbHVyKCRldmVudClcIlxuICAgICAgICAoa2V5dXApPVwiaGFuZGxlS2V5VXAoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljaygkZXZlbnQpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYXggaXRlbXMtd3JhcHBlclwiPlxuICAgIDxheC1idXR0b25cbiAgICAgICpuZ0lmPVwidmFsdWUgJiYgYWxsb3dDbGVhclwiXG4gICAgICBpY29uPVwiZmFyIGZhLXRpbWVzXCJcbiAgICAgIHR5cGU9XCJkYW5nZXIgYmxhbmtcIlxuICAgICAgKGNsaWNrKT1cImNsZWFyKClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFt0YWJJbmRleF09XCItMVwiXG4gICAgPjwvYXgtYnV0dG9uPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltlbmRdXCI+IDwvbmctY29udGVudD5cbiAgPC9kaXY+XG48L2Rpdj5cbjwhLS0gW3RleHRNYXNrXT1cInttYXNrOiBtYXNrICwgc2hvd01hc2s6c2hvd01hc2sgLCBndWlkOiBtYXNrR3VpZCAsIGtlZXBDaGFyUG9zaXRpb25zOiBtYXNrS2VlcENoYXJQb3NpdGlvbnN9XCIgLS0+XG48IS0tIDxpbnB1dCAjaW5wdXQgaWQ9XCJ0aW1lUGlja2VyVmFsdWVcIiBbdGV4dE1hc2tdPVwidGltZVR5cGVcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwidmFsdWVcIiAoa2V5cHJlc3MpPSdoYW5kbGVLZXlQcmVzcygkZXZlbnQpJ1xuICAgIChrZXl1cCk9XCJoYW5kbGVLZXlVcCgkZXZlbnQpXCIgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudClcIj4gLS0+XG4iXX0=
|