@acorex/components 16.18.49 → 16.19.1
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 +726 -693
- 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/property-editor/property-editor.class.d.ts +1 -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 -472
- 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,715 +0,0 @@
|
|
1
|
-
import { Component, Input, ElementRef, ChangeDetectorRef, ChangeDetectionStrategy, input, } from '@angular/core';
|
2
|
-
import { Observable, Subject } from 'rxjs';
|
3
|
-
import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
|
4
|
-
import { AXBaseTextComponent, AXValidatableComponent, } from '../base/element.class';
|
5
|
-
import * as i0 from "@angular/core";
|
6
|
-
import * as i1 from "@angular/common";
|
7
|
-
import * as i2 from "../button/button.component";
|
8
|
-
import * as i3 from "@angular/forms";
|
9
|
-
export class AXNumberBoxComponent extends AXBaseTextComponent {
|
10
|
-
cdr;
|
11
|
-
min = null;
|
12
|
-
max = null;
|
13
|
-
showSeparator = input(false);
|
14
|
-
showCurrency = false;
|
15
|
-
showCounter = true;
|
16
|
-
scrollWeel = true;
|
17
|
-
showDoubleCounter = false;
|
18
|
-
maxLength = 18;
|
19
|
-
userQuestionUpdate = new Subject();
|
20
|
-
userEdite = false;
|
21
|
-
tmp;
|
22
|
-
count;
|
23
|
-
findDots = false;
|
24
|
-
findMinus = false;
|
25
|
-
cursorPosition = 0;
|
26
|
-
dotPosition;
|
27
|
-
textValue;
|
28
|
-
decimalConstant = 0.1;
|
29
|
-
lastStep = null;
|
30
|
-
intStep = 1;
|
31
|
-
decimalNumber = null;
|
32
|
-
customStep = null;
|
33
|
-
_values;
|
34
|
-
get value() {
|
35
|
-
return this._values;
|
36
|
-
}
|
37
|
-
set value(v) {
|
38
|
-
if (v === '-') {
|
39
|
-
this.textValue = '-';
|
40
|
-
this._values = '-';
|
41
|
-
}
|
42
|
-
else {
|
43
|
-
if (v === '' || v == null || v === undefined
|
44
|
-
? true
|
45
|
-
: isNaN(Number(v.toString().replace(/,/g, ''))) === false) {
|
46
|
-
if (v === '' || v == null || v === undefined) {
|
47
|
-
this.textValue = '';
|
48
|
-
const old = this._values;
|
49
|
-
this._values = null;
|
50
|
-
if (this._values !== old) {
|
51
|
-
this.valueChange.emit(null);
|
52
|
-
this.onValueChanged.emit({
|
53
|
-
isUserChange: this.userEdite,
|
54
|
-
component: this,
|
55
|
-
value: null,
|
56
|
-
oldValue: this.showSeparator() && old
|
57
|
-
? old === '-'
|
58
|
-
? null
|
59
|
-
: Number(old.replace(/,/g, ''))
|
60
|
-
: old === null || old === undefined
|
61
|
-
? null
|
62
|
-
: old === '-'
|
63
|
-
? null
|
64
|
-
: Number(old),
|
65
|
-
htmlElement: this.ref.nativeElement,
|
66
|
-
});
|
67
|
-
this.userEdite = false;
|
68
|
-
this.cdr.detectChanges();
|
69
|
-
this.clearValidationStyle(this.input.nativeElement);
|
70
|
-
}
|
71
|
-
}
|
72
|
-
else {
|
73
|
-
v = v.toString();
|
74
|
-
// this.addCommas(v.toString());
|
75
|
-
this.textValue =
|
76
|
-
this.showSeparator() && v ? this.addCommas(v.toString()) : v;
|
77
|
-
// if (this.textValue.indexOf('.') !== -1) {
|
78
|
-
// // const dottt= (this.textValue.length-1) - this.textValue.indexOf('.')
|
79
|
-
// if (this.textValue.length - 1 - this.textValue.indexOf('.') < this.decimalNumber) {
|
80
|
-
// const a = this.decimalNumber - (this.textValue.length - 1 - this.textValue.indexOf('.'));
|
81
|
-
// const z = '0';
|
82
|
-
// this.textValue = this.textValue + '0';
|
83
|
-
// }
|
84
|
-
// }
|
85
|
-
if (this._values) {
|
86
|
-
const old = this._values;
|
87
|
-
if (old.toString().search(/\./g) !== v.toString().search(/\./g)) {
|
88
|
-
if (this.cursorPosition <= old.search(/\./g)) {
|
89
|
-
this.cursorPosition = v.search(/\./g);
|
90
|
-
}
|
91
|
-
else {
|
92
|
-
this.cursorPosition = v.length;
|
93
|
-
}
|
94
|
-
}
|
95
|
-
}
|
96
|
-
if (v !== this._values) {
|
97
|
-
const old = this._values;
|
98
|
-
this._values = v;
|
99
|
-
this.valueChange.emit(this.showSeparator() && v
|
100
|
-
? Number(v.replace(/,/g, ''))
|
101
|
-
: Number(v));
|
102
|
-
this.onValueChanged.emit({
|
103
|
-
isUserChange: this.userEdite,
|
104
|
-
component: this,
|
105
|
-
value: this.showSeparator() && v
|
106
|
-
? Number(v.replace(/,/g, ''))
|
107
|
-
: Number(v),
|
108
|
-
oldValue: this.showSeparator() && old
|
109
|
-
? old === '-'
|
110
|
-
? null
|
111
|
-
: Number(old.replace(/,/g, ''))
|
112
|
-
: old === null || old === undefined
|
113
|
-
? null
|
114
|
-
: old === '-'
|
115
|
-
? null
|
116
|
-
: Number(old),
|
117
|
-
htmlElement: this.ref.nativeElement,
|
118
|
-
});
|
119
|
-
this.userEdite = false;
|
120
|
-
this.cdr.detectChanges();
|
121
|
-
this.clearValidationStyle(this.input.nativeElement);
|
122
|
-
}
|
123
|
-
}
|
124
|
-
}
|
125
|
-
else {
|
126
|
-
this.textValue = '';
|
127
|
-
v = null;
|
128
|
-
const old = this._values;
|
129
|
-
this._values = null;
|
130
|
-
if (this._values !== old) {
|
131
|
-
this.valueChange.emit(null);
|
132
|
-
this.onValueChanged.emit({
|
133
|
-
isUserChange: this.userEdite,
|
134
|
-
component: this,
|
135
|
-
value: null,
|
136
|
-
oldValue: this.showSeparator() && old
|
137
|
-
? old === '-'
|
138
|
-
? null
|
139
|
-
: Number(old.replace(/,/g, ''))
|
140
|
-
: old === null || old === undefined
|
141
|
-
? null
|
142
|
-
: old === '-'
|
143
|
-
? null
|
144
|
-
: Number(old),
|
145
|
-
htmlElement: this.ref.nativeElement,
|
146
|
-
});
|
147
|
-
this.userEdite = false;
|
148
|
-
this.cdr.detectChanges();
|
149
|
-
this.clearValidationStyle(this.input.nativeElement);
|
150
|
-
}
|
151
|
-
}
|
152
|
-
}
|
153
|
-
}
|
154
|
-
constructor(cdr, ref) {
|
155
|
-
super(cdr, ref);
|
156
|
-
this.cdr = cdr;
|
157
|
-
this.textAlign = 'left';
|
158
|
-
}
|
159
|
-
calcSeparator(num) {
|
160
|
-
if (this.showSeparator()) {
|
161
|
-
return num + +(num / 3);
|
162
|
-
}
|
163
|
-
else {
|
164
|
-
return num;
|
165
|
-
}
|
166
|
-
}
|
167
|
-
addCommas2(x) {
|
168
|
-
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
169
|
-
}
|
170
|
-
addCommas(nStr) {
|
171
|
-
nStr += '';
|
172
|
-
const x = nStr.split('.');
|
173
|
-
let x1 = x[0];
|
174
|
-
const x2 = x.length > 1 ? '.' + x[1] : '';
|
175
|
-
const rgx = /(\d+)(\d{3})/;
|
176
|
-
while (rgx.test(x1)) {
|
177
|
-
x1 = x1.replace(rgx, '$1' + ',' + '$2');
|
178
|
-
}
|
179
|
-
return x1 + x2;
|
180
|
-
}
|
181
|
-
ngOnInit() {
|
182
|
-
if (this.disabled === false) {
|
183
|
-
if (this.scrollWeel === true) {
|
184
|
-
setTimeout(() => {
|
185
|
-
if (this.readonly === false) {
|
186
|
-
this.input.nativeElement.addEventListener('wheel', (e) => {
|
187
|
-
this.handleWheel(e);
|
188
|
-
});
|
189
|
-
}
|
190
|
-
}, 500);
|
191
|
-
}
|
192
|
-
}
|
193
|
-
// this.value = this.min.toString();
|
194
|
-
}
|
195
|
-
handleWheel(event) {
|
196
|
-
if (event.wheelDelta > 0) {
|
197
|
-
this.input.nativeElement.style.caretColor = 'transparent';
|
198
|
-
this.upStepHandel();
|
199
|
-
this.delaySearch();
|
200
|
-
setTimeout(() => {
|
201
|
-
this.setCaret();
|
202
|
-
this.input.nativeElement.style.caretColor = 'auto';
|
203
|
-
}, 0);
|
204
|
-
}
|
205
|
-
if (event.wheelDelta < 0) {
|
206
|
-
this.input.nativeElement.style.caretColor = 'transparent';
|
207
|
-
this.downStepHandel();
|
208
|
-
this.delaySearch();
|
209
|
-
setTimeout(() => {
|
210
|
-
this.setCaret();
|
211
|
-
this.input.nativeElement.style.caretColor = 'auto';
|
212
|
-
}, 0);
|
213
|
-
}
|
214
|
-
event.stopPropagation();
|
215
|
-
event.preventDefault();
|
216
|
-
}
|
217
|
-
handleKeyPress(event) {
|
218
|
-
this.userEdite = true;
|
219
|
-
const NumberDotpattern = /[0-9\.]/g;
|
220
|
-
const NumberMinusPattern = /[0-9\-]/g;
|
221
|
-
const inputChar = String.fromCharCode(event.charCode);
|
222
|
-
if (this.value && this.value.toString().match(/\./g) === null) {
|
223
|
-
this.findDots = false;
|
224
|
-
}
|
225
|
-
if (this.value && this.value.toString().search('-') === null) {
|
226
|
-
this.findMinus = false;
|
227
|
-
}
|
228
|
-
// get cursur position when key press
|
229
|
-
if (this.input.nativeElement.selectionStart ||
|
230
|
-
this.input.nativeElement.selectionStart === 0) {
|
231
|
-
this.cursorPosition = this.input.nativeElement.selectionStart;
|
232
|
-
this.cursorPosition += 1;
|
233
|
-
}
|
234
|
-
// control cursor when in first Index
|
235
|
-
if (this.cursorPosition <= 1) {
|
236
|
-
if (!NumberMinusPattern.test(inputChar)) {
|
237
|
-
event.preventDefault();
|
238
|
-
}
|
239
|
-
if (this.value && this.value.match(/\-/g)) {
|
240
|
-
event.preventDefault();
|
241
|
-
}
|
242
|
-
}
|
243
|
-
// control cursor when in another index
|
244
|
-
if (this.cursorPosition !== 1) {
|
245
|
-
if (event.keyCode !== 8 && !NumberDotpattern.test(inputChar)) {
|
246
|
-
event.preventDefault();
|
247
|
-
}
|
248
|
-
else {
|
249
|
-
// for contor decimal figur = 0 or null
|
250
|
-
if (this.decimalNumber === null || this.decimalNumber === 0) {
|
251
|
-
if (inputChar === '.') {
|
252
|
-
event.preventDefault();
|
253
|
-
}
|
254
|
-
}
|
255
|
-
// control decimal number (figur of decimal)
|
256
|
-
if (this.value && this.value.toString().match(/\./g)) {
|
257
|
-
const figureAfterDot = this.value.length - this.value.indexOf('.');
|
258
|
-
const dotIndex = this.value.indexOf('.');
|
259
|
-
if (dotIndex - 1 + dotIndex + figureAfterDot >
|
260
|
-
dotIndex - 1 + dotIndex + this.decimalNumber &&
|
261
|
-
this.cursorPosition - 1 > dotIndex) {
|
262
|
-
event.preventDefault();
|
263
|
-
}
|
264
|
-
}
|
265
|
-
// control '.' input
|
266
|
-
if (inputChar === '.') {
|
267
|
-
const lastChar = this.value.toString().charAt(this.value.length - 1);
|
268
|
-
// control . when last char is -
|
269
|
-
if (lastChar.toString().match(/\-/g)) {
|
270
|
-
event.preventDefault();
|
271
|
-
}
|
272
|
-
// control . when find first dot
|
273
|
-
if (this.findDots) {
|
274
|
-
event.preventDefault();
|
275
|
-
}
|
276
|
-
this.findDots = true;
|
277
|
-
this.findMinus = true;
|
278
|
-
}
|
279
|
-
}
|
280
|
-
}
|
281
|
-
}
|
282
|
-
handleKeyUp(event) {
|
283
|
-
this.userEdite = true;
|
284
|
-
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
285
|
-
this.input.nativeElement.style.caretColor = 'auto';
|
286
|
-
event.preventDefault();
|
287
|
-
event.stopPropagation();
|
288
|
-
}
|
289
|
-
if (event.key === 'ArrowUp') {
|
290
|
-
this.setCaret();
|
291
|
-
}
|
292
|
-
if (event.key === 'ArrowDown') {
|
293
|
-
this.setCaret();
|
294
|
-
}
|
295
|
-
// left & right Button
|
296
|
-
if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
|
297
|
-
if (this.input.nativeElement.selectionStart ||
|
298
|
-
this.input.nativeElement.selectionStart === 0) {
|
299
|
-
this.cursorPosition = this.input.nativeElement.selectionStart;
|
300
|
-
}
|
301
|
-
}
|
302
|
-
// home button
|
303
|
-
if (event.key === 'Home') {
|
304
|
-
this.cursorPosition = 0;
|
305
|
-
}
|
306
|
-
// end button
|
307
|
-
if (event.key === 'End') {
|
308
|
-
this.cursorPosition = this.value.length;
|
309
|
-
}
|
310
|
-
// set delay with rxjs
|
311
|
-
this.delaySearch();
|
312
|
-
// backspace Control
|
313
|
-
if (event.key === 'Backspace') {
|
314
|
-
if (this.value === null || this.value.length <= 0) {
|
315
|
-
this.cursorPosition = 0;
|
316
|
-
}
|
317
|
-
else {
|
318
|
-
this.cursorPosition -= 1;
|
319
|
-
}
|
320
|
-
}
|
321
|
-
}
|
322
|
-
handleKeyDown(event) {
|
323
|
-
this.userEdite = true;
|
324
|
-
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
325
|
-
event.preventDefault();
|
326
|
-
event.stopPropagation();
|
327
|
-
}
|
328
|
-
if (this.readonly === false) {
|
329
|
-
const countAfterDot = this.value !== null && this.value !== '' && this.value !== undefined
|
330
|
-
? this.value.toString().length -
|
331
|
-
1 -
|
332
|
-
this.value.toString().indexOf('.')
|
333
|
-
: 0;
|
334
|
-
const defaultStep = countAfterDot > this.decimalNumber
|
335
|
-
? Math.pow(this.decimalConstant, this.decimalNumber)
|
336
|
-
: Math.pow(this.decimalConstant, countAfterDot);
|
337
|
-
// step and +- with up key and down key
|
338
|
-
if (this.value && this.value.toString().match(/\./g)) {
|
339
|
-
this.dotPosition = this.value.indexOf('.');
|
340
|
-
if (this.dotPosition >= this.cursorPosition) {
|
341
|
-
if (event.key === 'ArrowDown') {
|
342
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
343
|
-
this.count = this.tmp - +this.intStep;
|
344
|
-
if (this.min === null || Number(this.count) >= Number(this.min)) {
|
345
|
-
// this.value = this.count.toFixed(this.decimalNumber);
|
346
|
-
this.value = this.count.toFixed(countAfterDot > this.decimalNumber
|
347
|
-
? this.decimalNumber
|
348
|
-
: countAfterDot);
|
349
|
-
}
|
350
|
-
}
|
351
|
-
if (event.key === 'ArrowUp') {
|
352
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
353
|
-
this.count = this.tmp + +this.intStep;
|
354
|
-
if (this.max === null || Number(this.count) <= Number(this.max)) {
|
355
|
-
this.value = this.count.toFixed(countAfterDot > this.decimalNumber
|
356
|
-
? this.decimalNumber
|
357
|
-
: countAfterDot);
|
358
|
-
}
|
359
|
-
}
|
360
|
-
}
|
361
|
-
else {
|
362
|
-
if (event.key === 'ArrowDown') {
|
363
|
-
if (this.min === null || Number(this.value) > Number(this.min)) {
|
364
|
-
if (this.customStep !== null) {
|
365
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
366
|
-
this.lastStep =
|
367
|
-
parseFloat(defaultStep.toFixed(countAfterDot > this.decimalNumber
|
368
|
-
? this.decimalNumber
|
369
|
-
: countAfterDot)) +
|
370
|
-
parseFloat(this.customStep.toFixed(countAfterDot > this.decimalNumber
|
371
|
-
? this.decimalNumber
|
372
|
-
: countAfterDot)) -
|
373
|
-
parseFloat(defaultStep.toFixed(countAfterDot > this.decimalNumber
|
374
|
-
? this.decimalNumber
|
375
|
-
: countAfterDot));
|
376
|
-
this.count = parseFloat(this.tmp) - this.lastStep;
|
377
|
-
this.value = this.count.toFixed(countAfterDot > this.decimalNumber
|
378
|
-
? this.decimalNumber
|
379
|
-
: countAfterDot);
|
380
|
-
}
|
381
|
-
else {
|
382
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
383
|
-
this.count = parseFloat(this.tmp) - defaultStep;
|
384
|
-
this.value = this.count.toFixed(countAfterDot > this.decimalNumber
|
385
|
-
? this.decimalNumber
|
386
|
-
: countAfterDot);
|
387
|
-
}
|
388
|
-
}
|
389
|
-
}
|
390
|
-
if (event.key === 'ArrowUp') {
|
391
|
-
if (this.max === null || Number(this.value) < Number(this.max)) {
|
392
|
-
if (this.customStep !== null) {
|
393
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
394
|
-
this.lastStep =
|
395
|
-
parseFloat(defaultStep.toFixed(countAfterDot > this.decimalNumber
|
396
|
-
? this.decimalNumber
|
397
|
-
: countAfterDot)) +
|
398
|
-
parseFloat(this.customStep.toFixed(countAfterDot > this.decimalNumber
|
399
|
-
? this.decimalNumber
|
400
|
-
: countAfterDot)) -
|
401
|
-
parseFloat(defaultStep.toFixed(countAfterDot > this.decimalNumber
|
402
|
-
? this.decimalNumber
|
403
|
-
: countAfterDot));
|
404
|
-
this.count = parseFloat(this.tmp) + this.lastStep;
|
405
|
-
this.value = this.count.toFixed(countAfterDot > this.decimalNumber
|
406
|
-
? this.decimalNumber
|
407
|
-
: countAfterDot);
|
408
|
-
}
|
409
|
-
else {
|
410
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
411
|
-
this.count = parseFloat(this.tmp) + defaultStep;
|
412
|
-
this.value = this.count.toFixed(countAfterDot > this.decimalNumber
|
413
|
-
? this.decimalNumber
|
414
|
-
: countAfterDot);
|
415
|
-
}
|
416
|
-
}
|
417
|
-
}
|
418
|
-
}
|
419
|
-
}
|
420
|
-
else {
|
421
|
-
if (event.key === 'ArrowDown') {
|
422
|
-
if (this.min != null && this.value == null) {
|
423
|
-
this.value = this.min.toString();
|
424
|
-
}
|
425
|
-
else {
|
426
|
-
if (this.min === null ||
|
427
|
-
Number(this.value) > parseInt(this.min.toString())) {
|
428
|
-
if (this.value == null) {
|
429
|
-
this.value = '0';
|
430
|
-
}
|
431
|
-
else {
|
432
|
-
this.tmp = +this.value.toString().replace(/,/g, '');
|
433
|
-
this.count = +this.tmp - +this.intStep;
|
434
|
-
this.value = this.count.toString().replace(/,/g, '');
|
435
|
-
}
|
436
|
-
}
|
437
|
-
}
|
438
|
-
}
|
439
|
-
if (event.key === 'ArrowUp') {
|
440
|
-
if (this.min != null && this.value == null) {
|
441
|
-
this.value = this.min.toString();
|
442
|
-
}
|
443
|
-
else {
|
444
|
-
if (this.max === null ||
|
445
|
-
Number(this.value) < parseInt(this.max.toString())) {
|
446
|
-
if (this.value == null) {
|
447
|
-
this.value = '0';
|
448
|
-
}
|
449
|
-
else {
|
450
|
-
this.tmp = this.value.toString().replace(/,/g, '');
|
451
|
-
this.count = +this.tmp + +this.intStep;
|
452
|
-
this.value = this.count.toString().replace(/,/g, '');
|
453
|
-
}
|
454
|
-
}
|
455
|
-
}
|
456
|
-
}
|
457
|
-
}
|
458
|
-
}
|
459
|
-
// stop when keydown
|
460
|
-
if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
|
461
|
-
this.input.nativeElement.style.caretColor = 'transparent';
|
462
|
-
event.preventDefault();
|
463
|
-
event.stopPropagation();
|
464
|
-
return false;
|
465
|
-
}
|
466
|
-
}
|
467
|
-
handleClick() {
|
468
|
-
if (this.input.nativeElement.selectionStart ||
|
469
|
-
this.input.nativeElement.selectionStart === 0) {
|
470
|
-
this.cursorPosition = this.input.nativeElement.selectionStart;
|
471
|
-
}
|
472
|
-
}
|
473
|
-
delaySearch() {
|
474
|
-
Observable.create((observer) => {
|
475
|
-
this.userQuestionUpdate = observer;
|
476
|
-
});
|
477
|
-
this.userQuestionUpdate
|
478
|
-
.pipe(debounceTime(1000), distinctUntilChanged())
|
479
|
-
.subscribe((text) => this.checkMinMax(text));
|
480
|
-
// this.userQuestionUpdate.next((e.target as any).value);
|
481
|
-
setTimeout(() => {
|
482
|
-
this.userQuestionUpdate.next(this.input.nativeElement.value);
|
483
|
-
}, 50);
|
484
|
-
}
|
485
|
-
checkMinMax(text) {
|
486
|
-
let number;
|
487
|
-
if (text?.indexOf(',') > 0) {
|
488
|
-
number = Number(text.replaceAll(',', ''));
|
489
|
-
}
|
490
|
-
else {
|
491
|
-
number = Number(text);
|
492
|
-
}
|
493
|
-
if (!!this.min) {
|
494
|
-
if (number < this.min) {
|
495
|
-
this.value = '';
|
496
|
-
}
|
497
|
-
}
|
498
|
-
if (!!this.max) {
|
499
|
-
if (number > this.max) {
|
500
|
-
this.value = '';
|
501
|
-
}
|
502
|
-
}
|
503
|
-
}
|
504
|
-
doGetCaretPosition(ctrl) {
|
505
|
-
let CaretPos = 0;
|
506
|
-
if (ctrl.selectionStart || ctrl.selectionStart === 0) {
|
507
|
-
CaretPos = ctrl.selectionStart;
|
508
|
-
return CaretPos;
|
509
|
-
}
|
510
|
-
}
|
511
|
-
setCaretPosition(ctrl, pos) {
|
512
|
-
if (ctrl.setSelectionRange) {
|
513
|
-
ctrl.focus();
|
514
|
-
ctrl.setSelectionRange(pos, pos);
|
515
|
-
}
|
516
|
-
else if (ctrl.createTextRange) {
|
517
|
-
const range = ctrl.createTextRange();
|
518
|
-
range.collapse(true);
|
519
|
-
range.moveEnd('character', pos);
|
520
|
-
range.moveStart('character', pos);
|
521
|
-
range.select();
|
522
|
-
}
|
523
|
-
}
|
524
|
-
setCaret() {
|
525
|
-
this.setCaretPosition(this.input.nativeElement, this.cursorPosition);
|
526
|
-
}
|
527
|
-
upStepHandel() {
|
528
|
-
this.userEdite = true;
|
529
|
-
if (this.min != null && this.value == null) {
|
530
|
-
this.value = this.min.toString();
|
531
|
-
}
|
532
|
-
else {
|
533
|
-
if (this.readonly === false) {
|
534
|
-
const countAfterDot = this.value !== null && this.value !== '' && this.value !== undefined
|
535
|
-
? this.value.toString().length -
|
536
|
-
1 -
|
537
|
-
this.value.toString().indexOf('.')
|
538
|
-
: 0;
|
539
|
-
if (this.value == null) {
|
540
|
-
this.value = '0';
|
541
|
-
}
|
542
|
-
else {
|
543
|
-
const defaultStep = countAfterDot > this.decimalNumber
|
544
|
-
? Math.pow(this.decimalConstant, this.decimalNumber)
|
545
|
-
: Math.pow(this.decimalConstant, countAfterDot);
|
546
|
-
this.dotPosition = this.value.toString().indexOf('.') + 1;
|
547
|
-
if (this.value && this.value.toString().match(/\./g)) {
|
548
|
-
if (this.dotPosition > this.cursorPosition) {
|
549
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
550
|
-
this.count = this.tmp + +this.intStep;
|
551
|
-
if (this.max === null || Number(this.count) <= this.max) {
|
552
|
-
this.value = this.count.toFixed(countAfterDot > this.decimalNumber
|
553
|
-
? this.decimalNumber
|
554
|
-
: countAfterDot);
|
555
|
-
}
|
556
|
-
}
|
557
|
-
else {
|
558
|
-
if (this.max === null || Number(this.value) < Number(this.max)) {
|
559
|
-
if (this.customStep !== null) {
|
560
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
561
|
-
this.lastStep =
|
562
|
-
parseFloat(defaultStep.toFixed(countAfterDot > this.decimalNumber
|
563
|
-
? this.decimalNumber
|
564
|
-
: countAfterDot)) +
|
565
|
-
parseFloat(this.customStep.toFixed(countAfterDot > this.decimalNumber
|
566
|
-
? this.decimalNumber
|
567
|
-
: countAfterDot)) -
|
568
|
-
parseFloat(defaultStep.toFixed(countAfterDot > this.decimalNumber
|
569
|
-
? this.decimalNumber
|
570
|
-
: countAfterDot));
|
571
|
-
this.count = parseFloat(this.tmp) + this.lastStep;
|
572
|
-
this.value = this.count
|
573
|
-
.toFixed(countAfterDot > this.decimalNumber
|
574
|
-
? this.decimalNumber
|
575
|
-
: countAfterDot)
|
576
|
-
.replace(/,/g, '');
|
577
|
-
}
|
578
|
-
else {
|
579
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
580
|
-
this.count = parseFloat(this.tmp) + defaultStep;
|
581
|
-
this.value = this.count
|
582
|
-
.toFixed(countAfterDot > this.decimalNumber
|
583
|
-
? this.decimalNumber
|
584
|
-
: countAfterDot)
|
585
|
-
.replace(/,/g, '');
|
586
|
-
}
|
587
|
-
}
|
588
|
-
}
|
589
|
-
}
|
590
|
-
else {
|
591
|
-
if (this.max === null ||
|
592
|
-
Number(this.value) < parseInt(this.max.toString())) {
|
593
|
-
this.tmp = this.value.toString().replace(/,/g, '');
|
594
|
-
this.count = +this.tmp + +this.intStep;
|
595
|
-
this.value = this.count.toString().replace(/,/g, '');
|
596
|
-
}
|
597
|
-
}
|
598
|
-
}
|
599
|
-
}
|
600
|
-
}
|
601
|
-
}
|
602
|
-
downStepHandel() {
|
603
|
-
this.userEdite = true;
|
604
|
-
if (this.min != null && this.value == null) {
|
605
|
-
this.value = this.min.toString();
|
606
|
-
}
|
607
|
-
else {
|
608
|
-
if (this.readonly === false) {
|
609
|
-
const countAfterDot = this.value !== null && this.value !== '' && this.value !== undefined
|
610
|
-
? this.value.toString().length -
|
611
|
-
1 -
|
612
|
-
this.value.toString().indexOf('.')
|
613
|
-
: 0;
|
614
|
-
if (this.value == null) {
|
615
|
-
this.value = '0';
|
616
|
-
}
|
617
|
-
else {
|
618
|
-
const defaultStep = countAfterDot > this.decimalNumber
|
619
|
-
? Math.pow(this.decimalConstant, this.decimalNumber)
|
620
|
-
: Math.pow(this.decimalConstant, countAfterDot);
|
621
|
-
this.dotPosition = this.value.toString().indexOf('.') + 1;
|
622
|
-
if (this.value && this.value.toString().match(/\./g)) {
|
623
|
-
if (this.dotPosition > this.cursorPosition) {
|
624
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
625
|
-
this.count =
|
626
|
-
parseFloat(this.value.replace(/,/g, '')) - +this.intStep;
|
627
|
-
if (this.min === null || Number(this.count) >= this.min) {
|
628
|
-
this.value = this.count
|
629
|
-
.toFixed(countAfterDot > this.decimalNumber
|
630
|
-
? this.decimalNumber
|
631
|
-
: countAfterDot)
|
632
|
-
.replace(/,/g, '');
|
633
|
-
}
|
634
|
-
}
|
635
|
-
else {
|
636
|
-
if (this.min === null || Number(this.value) > Number(this.min)) {
|
637
|
-
if (this.customStep !== null) {
|
638
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
639
|
-
this.lastStep =
|
640
|
-
parseFloat(defaultStep.toFixed(countAfterDot > this.decimalNumber
|
641
|
-
? this.decimalNumber
|
642
|
-
: countAfterDot)) +
|
643
|
-
parseFloat(this.customStep.toFixed(countAfterDot > this.decimalNumber
|
644
|
-
? this.decimalNumber
|
645
|
-
: countAfterDot)) -
|
646
|
-
parseFloat(defaultStep.toFixed(countAfterDot > this.decimalNumber
|
647
|
-
? this.decimalNumber
|
648
|
-
: countAfterDot));
|
649
|
-
this.count = parseFloat(this.tmp) - this.lastStep;
|
650
|
-
this.value = this.count.toFixed(countAfterDot > this.decimalNumber
|
651
|
-
? this.decimalNumber
|
652
|
-
: countAfterDot);
|
653
|
-
}
|
654
|
-
else {
|
655
|
-
this.tmp = parseFloat(this.value.replace(/,/g, ''));
|
656
|
-
this.count = parseFloat(this.tmp) - defaultStep;
|
657
|
-
this.value = this.count.toFixed(countAfterDot > this.decimalNumber
|
658
|
-
? this.decimalNumber
|
659
|
-
: countAfterDot);
|
660
|
-
}
|
661
|
-
}
|
662
|
-
}
|
663
|
-
}
|
664
|
-
else {
|
665
|
-
if (this.min === null ||
|
666
|
-
Number(this.value) > parseInt(this.min.toString())) {
|
667
|
-
this.tmp = +this.value.toString().replace(/,/g, '');
|
668
|
-
this.count = +this.tmp - +this.intStep;
|
669
|
-
this.value = this.count.toString().replace(/,/g, '');
|
670
|
-
}
|
671
|
-
}
|
672
|
-
}
|
673
|
-
}
|
674
|
-
}
|
675
|
-
}
|
676
|
-
handleInputBlur(e) {
|
677
|
-
this.checkMinMax(this.textValue);
|
678
|
-
this.onBlur.emit({
|
679
|
-
component: this,
|
680
|
-
htmlElement: this.ref.nativeElement,
|
681
|
-
htmlEvent: e,
|
682
|
-
});
|
683
|
-
}
|
684
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXNumberBoxComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
685
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.0.7", type: AXNumberBoxComponent, selector: "ax-number-box", inputs: { min: { classPropertyName: "min", publicName: "min", isSignal: false, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: false, isRequired: false, transformFunction: null }, showSeparator: { classPropertyName: "showSeparator", publicName: "showSeparator", isSignal: true, isRequired: false, transformFunction: null }, showCurrency: { classPropertyName: "showCurrency", publicName: "showCurrency", isSignal: false, isRequired: false, transformFunction: null }, showCounter: { classPropertyName: "showCounter", publicName: "showCounter", isSignal: false, isRequired: false, transformFunction: null }, scrollWeel: { classPropertyName: "scrollWeel", publicName: "scrollWeel", isSignal: false, isRequired: false, transformFunction: null }, showDoubleCounter: { classPropertyName: "showDoubleCounter", publicName: "showDoubleCounter", isSignal: false, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: false, isRequired: false, transformFunction: null }, intStep: { classPropertyName: "intStep", publicName: "intStep", isSignal: false, isRequired: false, transformFunction: null }, decimalNumber: { classPropertyName: "decimalNumber", publicName: "decimalNumber", isSignal: false, isRequired: false, transformFunction: null }, customStep: { classPropertyName: "customStep", publicName: "customStep", isSignal: false, isRequired: false, transformFunction: null } }, host: { styleAttribute: "width: 100%" }, providers: [
|
686
|
-
{ provide: AXValidatableComponent, useExisting: AXNumberBoxComponent },
|
687
|
-
], 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]\">\n </ng-content>\n <ax-button icon=\"far fa-plus\" type=\"success blank\" (click)=\"upStepHandel()\" [disabled]=\"disabled\" *ngIf=\"showDoubleCounter\"></ax-button>\n </div>\n <div class=\"content\" #content>\n <div class=\"ax form-control input {{size}}\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\"\n [class.icon]=\"icon\">\n <input [autocomplete]=\"autocomplete\" [name]=\"name\" #input type=\"text\" class=\"ax {{size}}\" [maxlength]=\"calcSeparator(maxLength)\" [(ngModel)]=\"textValue\" placeholder=\"{{placeholder}}\"\n [readonly]=\"readonly\" [disabled]=\"disabled\" [ngClass]=\"setTextAlign()\"\n [class.clear]=\"value && allowClear\" (focus)=\"handleInputFocus($event)\" (blur)=\"handleInputBlur($event)\"\n (keypress)=\"handleKeyPress($event)\" (ngModelChange)=\"this.userQuestionUpdate.next($event)\"\n (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick()\" (keyup)=\"handleKeyUp($event)\">\n <i class=\"{{icon}}\" *ngIf=\"icon\"></i>\n </div>\n </div>\n <div class=\"ax items-wrapper\">\n <ax-button *ngIf=\"value && allowClear\" [disabled]=\"disabled\" icon=\"far fa-times\" type=\"danger blank\"\n (click)=\"clear()\"></ax-button>\n <ax-button icon=\"far fa-minus\" type=\"danger blank\" (click)=\"downStepHandel()\" [disabled]=\"disabled\" *ngIf=\"showDoubleCounter\"></ax-button>\n <ng-content select=\"[end]\">\n </ng-content>\n <div class=\"arrow-number\" *ngIf=\"showCounter && !showDoubleCounter && !readonly\" >\n <ax-button type=\"light blank\" [disabled]=\"disabled\" icon=\"fas fa-angle-up\" [size]=\"size\"\n (mousedown)=\"upStepHandel()\" (mouseup)=\"delaySearch()\" [tabIndex]=\"-1\"></ax-button>\n <ax-button type=\"light blank\" [disabled]=\"disabled\" icon=\"fas fa-angle-down\" [size]=\"size\"\n (mousedown)=\"downStepHandel()\" (mouseup)=\"delaySearch()\" [tabIndex]=\"-1\"></ax-button>\n </div>\n </div>\n\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["type", "icon", "submitBehavior", "cancelBehavior", "block", "loading", "selected"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
688
|
-
}
|
689
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.7", ngImport: i0, type: AXNumberBoxComponent, decorators: [{
|
690
|
-
type: Component,
|
691
|
-
args: [{ selector: 'ax-number-box', changeDetection: ChangeDetectionStrategy.OnPush, host: { style: 'width: 100%' }, providers: [
|
692
|
-
{ provide: AXValidatableComponent, useExisting: AXNumberBoxComponent },
|
693
|
-
], template: "<div class=\"ax form-item\" [class.disabled]=\"disabled\" [attr.id]=\"uid\" #fc>\n <div class=\"ax items-wrapper\">\n <ng-content select=\"[start]\">\n </ng-content>\n <ax-button icon=\"far fa-plus\" type=\"success blank\" (click)=\"upStepHandel()\" [disabled]=\"disabled\" *ngIf=\"showDoubleCounter\"></ax-button>\n </div>\n <div class=\"content\" #content>\n <div class=\"ax form-control input {{size}}\" [class.disabled]=\"disabled\" [class.readonly]=\"readonly\"\n [class.icon]=\"icon\">\n <input [autocomplete]=\"autocomplete\" [name]=\"name\" #input type=\"text\" class=\"ax {{size}}\" [maxlength]=\"calcSeparator(maxLength)\" [(ngModel)]=\"textValue\" placeholder=\"{{placeholder}}\"\n [readonly]=\"readonly\" [disabled]=\"disabled\" [ngClass]=\"setTextAlign()\"\n [class.clear]=\"value && allowClear\" (focus)=\"handleInputFocus($event)\" (blur)=\"handleInputBlur($event)\"\n (keypress)=\"handleKeyPress($event)\" (ngModelChange)=\"this.userQuestionUpdate.next($event)\"\n (keydown)=\"handleKeyDown($event)\" (click)=\"handleClick()\" (keyup)=\"handleKeyUp($event)\">\n <i class=\"{{icon}}\" *ngIf=\"icon\"></i>\n </div>\n </div>\n <div class=\"ax items-wrapper\">\n <ax-button *ngIf=\"value && allowClear\" [disabled]=\"disabled\" icon=\"far fa-times\" type=\"danger blank\"\n (click)=\"clear()\"></ax-button>\n <ax-button icon=\"far fa-minus\" type=\"danger blank\" (click)=\"downStepHandel()\" [disabled]=\"disabled\" *ngIf=\"showDoubleCounter\"></ax-button>\n <ng-content select=\"[end]\">\n </ng-content>\n <div class=\"arrow-number\" *ngIf=\"showCounter && !showDoubleCounter && !readonly\" >\n <ax-button type=\"light blank\" [disabled]=\"disabled\" icon=\"fas fa-angle-up\" [size]=\"size\"\n (mousedown)=\"upStepHandel()\" (mouseup)=\"delaySearch()\" [tabIndex]=\"-1\"></ax-button>\n <ax-button type=\"light blank\" [disabled]=\"disabled\" icon=\"fas fa-angle-down\" [size]=\"size\"\n (mousedown)=\"downStepHandel()\" (mouseup)=\"delaySearch()\" [tabIndex]=\"-1\"></ax-button>\n </div>\n </div>\n\n</div>\n" }]
|
694
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { min: [{
|
695
|
-
type: Input
|
696
|
-
}], max: [{
|
697
|
-
type: Input
|
698
|
-
}], showCurrency: [{
|
699
|
-
type: Input
|
700
|
-
}], showCounter: [{
|
701
|
-
type: Input
|
702
|
-
}], scrollWeel: [{
|
703
|
-
type: Input
|
704
|
-
}], showDoubleCounter: [{
|
705
|
-
type: Input
|
706
|
-
}], maxLength: [{
|
707
|
-
type: Input
|
708
|
-
}], intStep: [{
|
709
|
-
type: Input
|
710
|
-
}], decimalNumber: [{
|
711
|
-
type: Input
|
712
|
-
}], customStep: [{
|
713
|
-
type: Input
|
714
|
-
}] } });
|
715
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9udW1iZXItYm94L251bWJlci1ib3guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvbnVtYmVyLWJveC9udW1iZXItYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFFVixpQkFBaUIsRUFDakIsdUJBQXVCLEVBR3ZCLEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixzQkFBc0IsR0FDdkIsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7QUFVL0IsTUFBTSxPQUFPLG9CQUNYLFNBQVEsbUJBQW1CO0lBMktMO0lBeEtiLEdBQUcsR0FBVyxJQUFJLENBQUM7SUFDbkIsR0FBRyxHQUFXLElBQUksQ0FBQztJQUU1QixhQUFhLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO0lBR3RDLFlBQVksR0FBWSxLQUFLLENBQUM7SUFHOUIsV0FBVyxHQUFZLElBQUksQ0FBQztJQUc1QixVQUFVLEdBQVksSUFBSSxDQUFDO0lBRzNCLGlCQUFpQixHQUFZLEtBQUssQ0FBQztJQUduQyxTQUFTLEdBQVcsRUFBRSxDQUFDO0lBRXZCLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUFVLENBQUM7SUFFM0MsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUUzQixHQUFHLENBQU07SUFDVCxLQUFLLENBQVM7SUFDZCxRQUFRLEdBQVksS0FB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QUksRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDdkQsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsQ0FBUTtRQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNmLFNBQVMsRUFBRSxJQUFJO1lBQ2YsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYTtZQUNuQyxTQUFTLEVBQUUsQ0FBQztTQUNiLENBQUMsQ0FBQztJQUNMLENBQUM7dUdBenlCVSxvQkFBb0I7MkZBQXBCLG9CQUFvQiw4aURBSnBCO1lBQ1QsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFO1NBQ3ZFLGlEQ3hCSCx1dUVBZ0NBOzsyRkROYSxvQkFBb0I7a0JBVGhDLFNBQVM7K0JBQ0UsZUFBZSxtQkFFUix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxhQUNuQjt3QkFDVCxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLHNCQUFzQixFQUFFO3FCQUN2RTsrR0FNUSxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixXQUFXO3NCQURWLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLGlCQUFpQjtzQkFEaEIsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBaUJHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBFbGVtZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25Jbml0LFxuICBpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQVhCYXNlVGV4dENvbXBvbmVudCxcbiAgQVhWYWxpZGF0YWJsZUNvbXBvbmVudCxcbn0gZnJvbSAnLi4vYmFzZS9lbGVtZW50LmNsYXNzJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LW51bWJlci1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vbnVtYmVyLWJveC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7IHN0eWxlOiAnd2lkdGg6IDEwMCUnIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHsgcHJvdmlkZTogQVhWYWxpZGF0YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYTnVtYmVyQm94Q29tcG9uZW50IH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFYTnVtYmVyQm94Q29tcG9uZW50XG4gIGV4dGVuZHMgQVhCYXNlVGV4dENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBASW5wdXQoKSBtaW46IG51bWJlciA9IG51bGw7XG4gIEBJbnB1dCgpIG1heDogbnVtYmVyID0gbnVsbDtcblxuICBzaG93U2VwYXJhdG9yID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dDdXJyZW5jeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIHNob3dDb3VudGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzY3JvbGxXZWVsOiBib29sZWFuID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBzaG93RG91YmxlQ291bnRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIG1heExlbmd0aDogbnVtYmVyID0gMTg7XG5cbiAgdXNlclF1ZXN0aW9uVXBkYXRlID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIHVzZXJFZGl0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHRtcDogYW55O1xuICBjb3VudDogbnVtYmVyO1xuICBmaW5kRG90czogYm9vbGVhbiA9IGZhbHNlO1xuICBmaW5kTWludXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY3Vyc29yUG9zaXRpb246IG51bWJlciA9IDA7XG4gIGRvdFBvc2l0aW9uOiBudW1iZXI7XG4gIHRleHRWYWx1ZTogc3RyaW5nO1xuICBkZWNpbWFsQ29uc3RhbnQ6IG51bWJlciA9IDAuMTtcbiAgbGFzdFN0ZXA6IG51bWJlciA9IG51bGw7XG5cbiAgQElucHV0KCkgaW50U3RlcDogbnVtYmVyID0gMTtcbiAgQElucHV0KCkgZGVjaW1hbE51bWJlcjogbnVtYmVyID0gbnVsbDtcbiAgQElucHV0KCkgY3VzdG9tU3RlcDogbnVtYmVyID0gbnVsbDtcblxuICBwcml2YXRlIF92YWx1ZXM6IHN0cmluZztcbiAgcHVibGljIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZXM7XG4gIH1cbiAgcHVibGljIHNldCB2YWx1ZSh2OiBzdHJpbmcpIHtcbiAgICBpZiAodiA9PT0gJy0nKSB7XG4gICAgICB0aGlzLnRleHRWYWx1ZSA9ICctJztcbiAgICAgIHRoaXMuX3ZhbHVlcyA9ICctJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICB2ID09PSAnJyB8fCB2ID09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiBpc05hTihOdW1iZXIodi50b1N0cmluZygpLnJlcGxhY2UoLywvZywgJycpKSkgPT09IGZhbHNlXG4gICAgICApIHtcbiAgICAgICAgaWYgKHYgPT09ICcnIHx8IHYgPT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLnRleHRWYWx1ZSA9ICcnO1xuICAgICAgICAgIGNvbnN0IG9sZCA9IHRoaXMuX3ZhbHVlcztcbiAgICAgICAgICB0aGlzLl92YWx1ZXMgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlcyAhPT0gb2xkKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgICAgICBpc1VzZXJDaGFuZ2U6IHRoaXMudXNlckVkaXRlLFxuICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICBvbGRWYWx1ZTpcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTZXBhcmF0b3IoKSAmJiBvbGRcbiAgICAgICAgICAgICAgICAgID8gb2xkID09PSAnLSdcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogTnVtYmVyKG9sZC5yZXBsYWNlKC8sL2csICcnKSlcbiAgICAgICAgICAgICAgICAgIDogb2xkID09PSBudWxsIHx8IG9sZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgIDogb2xkID09PSAnLSdcbiAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgOiBOdW1iZXIob2xkKSxcbiAgICAgICAgICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudXNlckVkaXRlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHYgPSB2LnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICAvLyB0aGlzLmFkZENvbW1hcyh2LnRvU3RyaW5nKCkpO1xuICAgICAgICAgIHRoaXMudGV4dFZhbHVlID1cbiAgICAgICAgICAgIHRoaXMuc2hvd1NlcGFyYXRvcigpICYmIHYgPyB0aGlzLmFkZENvbW1hcyh2LnRvU3RyaW5nKCkpIDogdjtcblxuICAgICAgICAgIC8vIGlmICh0aGlzLnRleHRWYWx1ZS5pbmRleE9mKCcuJykgIT09IC0xKSB7XG4gICAgICAgICAgLy8gICAvLyBjb25zdCBkb3R0dD0gKHRoaXMudGV4dFZhbHVlLmxlbmd0aC0xKSAtIHRoaXMudGV4dFZhbHVlLmluZGV4T2YoJy4nKVxuICAgICAgICAgIC8vICAgaWYgKHRoaXMudGV4dFZhbHVlLmxlbmd0aCAtIDEgLSB0aGlzLnRleHRWYWx1ZS5pbmRleE9mKCcuJykgPCB0aGlzLmRlY2ltYWxOdW1iZXIpIHtcbiAgICAgICAgICAvLyAgICAgY29uc3QgYSA9IHRoaXMuZGVjaW1hbE51bWJlciAtICh0aGlzLnRleHRWYWx1ZS5sZW5ndGggLSAxIC0gdGhpcy50ZXh0VmFsdWUuaW5kZXhPZignLicpKTtcbiAgICAgICAgICAvLyAgICAgY29uc3QgeiA9ICcwJztcbiAgICAgICAgICAvLyAgICAgdGhpcy50ZXh0VmFsdWUgPSB0aGlzLnRleHRWYWx1ZSArICcwJztcbiAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICBpZiAodGhpcy5fdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBvbGQgPSB0aGlzLl92YWx1ZXM7XG4gICAgICAgICAgICBpZiAob2xkLnRvU3RyaW5nKCkuc2VhcmNoKC9cXC4vZykgIT09IHYudG9TdHJpbmcoKS5zZWFyY2goL1xcLi9nKSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbiA8PSBvbGQuc2VhcmNoKC9cXC4vZykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gdi5zZWFyY2goL1xcLi9nKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gdi5sZW5ndGg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHYgIT09IHRoaXMuX3ZhbHVlcykge1xuICAgICAgICAgICAgY29uc3Qgb2xkID0gdGhpcy5fdmFsdWVzO1xuICAgICAgICAgICAgdGhpcy5fdmFsdWVzID0gdjtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChcbiAgICAgICAgICAgICAgdGhpcy5zaG93U2VwYXJhdG9yKCkgJiYgdlxuICAgICAgICAgICAgICAgID8gTnVtYmVyKHYucmVwbGFjZSgvLC9nLCAnJykpXG4gICAgICAgICAgICAgICAgOiBOdW1iZXIodilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VkLmVtaXQoe1xuICAgICAgICAgICAgICBpc1VzZXJDaGFuZ2U6IHRoaXMudXNlckVkaXRlLFxuICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NlcGFyYXRvcigpICYmIHZcbiAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHYucmVwbGFjZSgvLC9nLCAnJykpXG4gICAgICAgICAgICAgICAgICA6IE51bWJlcih2KSxcbiAgICAgICAgICAgICAgb2xkVmFsdWU6XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U2VwYXJhdG9yKCkgJiYgb2xkXG4gICAgICAgICAgICAgICAgICA/IG9sZCA9PT0gJy0nXG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IE51bWJlcihvbGQucmVwbGFjZSgvLC9nLCAnJykpXG4gICAgICAgICAgICAgICAgICA6IG9sZCA9PT0gbnVsbCB8fCBvbGQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICA6IG9sZCA9PT0gJy0nXG4gICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgIDogTnVtYmVyKG9sZCksXG4gICAgICAgICAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnVzZXJFZGl0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWUgPSAnJztcbiAgICAgICAgdiA9IG51bGw7XG4gICAgICAgIGNvbnN0IG9sZCA9IHRoaXMuX3ZhbHVlcztcbiAgICAgICAgdGhpcy5fdmFsdWVzID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5fdmFsdWVzICE9PSBvbGQpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZC5lbWl0KHtcbiAgICAgICAgICAgIGlzVXNlckNoYW5nZTogdGhpcy51c2VyRWRpdGUsXG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIG9sZFZhbHVlOlxuICAgICAgICAgICAgICB0aGlzLnNob3dTZXBhcmF0b3IoKSAmJiBvbGRcbiAgICAgICAgICAgICAgICA/IG9sZCA9PT0gJy0nXG4gICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgIDogTnVtYmVyKG9sZC5yZXBsYWNlKC8sL2csICcnKSlcbiAgICAgICAgICAgICAgICA6IG9sZCA9PT0gbnVsbCB8fCBvbGQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgIDogb2xkID09PSAnLSdcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IE51bWJlcihvbGQpLFxuICAgICAgICAgICAgaHRtbEVsZW1lbnQ6IHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy51c2VyRWRpdGUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLCByZWY6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcihjZHIsIHJlZik7XG4gICAgdGhpcy50ZXh0QWxpZ24gPSAnbGVmdCc7XG4gIH1cblxuICBjYWxjU2VwYXJhdG9yKG51bTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuc2hvd1NlcGFyYXRvcigpKSB7XG4gICAgICByZXR1cm4gbnVtICsgKyhudW0gLyAzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bTtcbiAgICB9XG4gIH1cblxuICBhZGRDb21tYXMyKHgpIHtcbiAgICByZXR1cm4geC50b1N0cmluZygpLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csICcsJyk7XG4gIH1cblxuICBhZGRDb21tYXMoblN0cikge1xuICAgIG5TdHIgKz0gJyc7XG4gICAgY29uc3QgeCA9IG5TdHIuc3BsaXQoJy4nKTtcbiAgICBsZXQgeDEgPSB4WzBdO1xuICAgIGNvbnN0IHgyID0geC5sZW5ndGggPiAxID8gJy4nICsgeFsxXSA6ICcnO1xuICAgIGNvbnN0IHJneCA9IC8oXFxkKykoXFxkezN9KS87XG4gICAgd2hpbGUgKHJneC50ZXN0KHgxKSkge1xuICAgICAgeDEgPSB4MS5yZXBsYWNlKHJneCwgJyQxJyArICcsJyArICckMicpO1xuICAgIH1cbiAgICByZXR1cm4geDEgKyB4MjtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkID09PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsV2VlbCA9PT0gdHJ1ZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5yZWFkb25seSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd3aGVlbCcsIChlKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlV2hlZWwoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhpcy52YWx1ZSA9IHRoaXMubWluLnRvU3RyaW5nKCk7XG4gIH1cblxuICBoYW5kbGVXaGVlbChldmVudCkge1xuICAgIGlmICgoZXZlbnQgYXMgYW55KS53aGVlbERlbHRhID4gMCkge1xuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmNhcmV0Q29sb3IgPSAndHJhbnNwYXJlbnQnO1xuXG4gICAgICB0aGlzLnVwU3RlcEhhbmRlbCgpO1xuICAgICAgdGhpcy5kZWxheVNlYXJjaCgpO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRDYXJldCgpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgICBpZiAoKGV2ZW50IGFzIGFueSkud2hlZWxEZWx0YSA8IDApIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5jYXJldENvbG9yID0gJ3RyYW5zcGFyZW50JztcblxuICAgICAgdGhpcy5kb3duU3RlcEhhbmRlbCgpO1xuICAgICAgdGhpcy5kZWxheVNlYXJjaCgpO1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRDYXJldCgpO1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICdhdXRvJztcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgaGFuZGxlS2V5UHJlc3MoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudXNlckVkaXRlID0gdHJ1ZTtcbiAgICBjb25zdCBOdW1iZXJEb3RwYXR0ZXJuID0gL1swLTlcXC5dL2c7XG4gICAgY29uc3QgTnVtYmVyTWludXNQYXR0ZXJuID0gL1swLTlcXC1dL2c7XG5cbiAgICBjb25zdCBpbnB1dENoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGV2ZW50LmNoYXJDb2RlKTtcblxuICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUudG9TdHJpbmcoKS5tYXRjaCgvXFwuL2cpID09PSBudWxsKSB7XG4gICAgICB0aGlzLmZpbmREb3RzID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUudG9TdHJpbmcoKS5zZWFyY2goJy0nKSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5maW5kTWludXMgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBnZXQgY3Vyc3VyIHBvc2l0aW9uIHdoZW4ga2V5IHByZXNzXG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0IHx8XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICB0aGlzLmN1cnNvclBvc2l0aW9uICs9IDE7XG4gICAgfVxuXG4gICAgLy8gY29udHJvbCBjdXJzb3Igd2hlbiBpbiBmaXJzdCBJbmRleFxuICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uIDw9IDEpIHtcbiAgICAgIGlmICghTnVtYmVyTWludXNQYXR0ZXJuLnRlc3QoaW5wdXRDaGFyKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5tYXRjaCgvXFwtL2cpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnRyb2wgY3Vyc29yIHdoZW4gaW4gYW5vdGhlciBpbmRleFxuICAgIGlmICh0aGlzLmN1cnNvclBvc2l0aW9uICE9PSAxKSB7XG4gICAgICBpZiAoZXZlbnQua2V5Q29kZSAhPT0gOCAmJiAhTnVtYmVyRG90cGF0dGVybi50ZXN0KGlucHV0Q2hhcikpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZvciBjb250b3IgZGVjaW1hbCBmaWd1ciA9IDAgb3IgbnVsbFxuICAgICAgICBpZiAodGhpcy5kZWNpbWFsTnVtYmVyID09PSBudWxsIHx8IHRoaXMuZGVjaW1hbE51bWJlciA9PT0gMCkge1xuICAgICAgICAgIGlmIChpbnB1dENoYXIgPT09ICcuJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29udHJvbCBkZWNpbWFsIG51bWJlciAoZmlndXIgb2YgZGVjaW1hbClcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS50b1N0cmluZygpLm1hdGNoKC9cXC4vZykpIHtcbiAgICAgICAgICBjb25zdCBmaWd1cmVBZnRlckRvdCA9IHRoaXMudmFsdWUubGVuZ3RoIC0gdGhpcy52YWx1ZS5pbmRleE9mKCcuJyk7XG4gICAgICAgICAgY29uc3QgZG90SW5kZXggPSB0aGlzLnZhbHVlLmluZGV4T2YoJy4nKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkb3RJbmRleCAtIDEgKyBkb3RJbmRleCArIGZpZ3VyZUFmdGVyRG90ID5cbiAgICAgICAgICAgICAgZG90SW5kZXggLSAxICsgZG90SW5kZXggKyB0aGlzLmRlY2ltYWxOdW1iZXIgJiZcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gLSAxID4gZG90SW5kZXhcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnRyb2wgJy4nIGlucHV0XG4gICAgICAgIGlmIChpbnB1dENoYXIgPT09ICcuJykge1xuICAgICAgICAgIGNvbnN0IGxhc3RDaGFyID0gdGhpcy52YWx1ZS50b1N0cmluZygpLmNoYXJBdCh0aGlzLnZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIC8vIGNvbnRyb2wgLiB3aGVuIGxhc3QgY2hhciBpcyAtXG4gICAgICAgICAgaWYgKGxhc3RDaGFyLnRvU3RyaW5nKCkubWF0Y2goL1xcLS9nKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gY29udHJvbCAuIHdoZW4gZmluZCBmaXJzdCBkb3RcbiAgICAgICAgICBpZiAodGhpcy5maW5kRG90cykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5maW5kRG90cyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5maW5kTWludXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICB0aGlzLnVzZXJFZGl0ZSA9IHRydWU7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5jYXJldENvbG9yID0gJ2F1dG8nO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgdGhpcy5zZXRDYXJldCgpO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICB0aGlzLnNldENhcmV0KCk7XG4gICAgfVxuXG4gICAgLy8gbGVmdCAmIHJpZ2h0IEJ1dHRvblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCB8fFxuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGhvbWUgYnV0dG9uXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcbiAgICB9XG5cbiAgICAvLyBlbmQgYnV0dG9uXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VuZCcpIHtcbiAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLnZhbHVlLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvLyBzZXQgZGVsYXkgd2l0aCByeGpzXG4gICAgdGhpcy5kZWxheVNlYXJjaCgpO1xuXG4gICAgLy8gYmFja3NwYWNlIENvbnRyb2xcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xuICAgICAgaWYgKHRoaXMudmFsdWUgPT09IG51bGwgfHwgdGhpcy52YWx1ZS5sZW5ndGggPD0gMCkge1xuICAgICAgICB0aGlzLmN1cnNvclBvc2l0aW9uID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gLT0gMTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy51c2VyRWRpdGUgPSB0cnVlO1xuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlYWRvbmx5ID09PSBmYWxzZSkge1xuICAgICAgY29uc3QgY291bnRBZnRlckRvdCA9XG4gICAgICAgIHRoaXMudmFsdWUgIT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gJycgJiYgdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoIC1cbiAgICAgICAgICAgIDEgLVxuICAgICAgICAgICAgdGhpcy52YWx1ZS50b1N0cmluZygpLmluZGV4T2YoJy4nKVxuICAgICAgICAgIDogMDtcbiAgICAgIGNvbnN0IGRlZmF1bHRTdGVwOiBudW1iZXIgPVxuICAgICAgICBjb3VudEFmdGVyRG90ID4gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgPyBNYXRoLnBvdyh0aGlzLmRlY2ltYWxDb25zdGFudCwgdGhpcy5kZWNpbWFsTnVtYmVyKVxuICAgICAgICAgIDogTWF0aC5wb3codGhpcy5kZWNpbWFsQ29uc3RhbnQsIGNvdW50QWZ0ZXJEb3QpO1xuICAgICAgLy8gc3RlcCBhbmQgKy0gd2l0aCB1cCBrZXkgYW5kIGRvd24ga2V5XG4gICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLnRvU3RyaW5nKCkubWF0Y2goL1xcLi9nKSkge1xuICAgICAgICB0aGlzLmRvdFBvc2l0aW9uID0gdGhpcy52YWx1ZS5pbmRleE9mKCcuJyk7XG4gICAgICAgIGlmICh0aGlzLmRvdFBvc2l0aW9uID49IHRoaXMuY3Vyc29yUG9zaXRpb24pIHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgICAgdGhpcy50bXAgPSBwYXJzZUZsb2F0KHRoaXMudmFsdWUucmVwbGFjZSgvLC9nLCAnJykpO1xuICAgICAgICAgICAgdGhpcy5jb3VudCA9IHRoaXMudG1wIC0gK3RoaXMuaW50U3RlcDtcbiAgICAgICAgICAgIGlmICh0aGlzLm1pbiA9PT0gbnVsbCB8fCBOdW1iZXIodGhpcy5jb3VudCkgPj0gTnVtYmVyKHRoaXMubWluKSkge1xuICAgICAgICAgICAgICAvLyB0aGlzLnZhbHVlID0gdGhpcy5jb3VudC50b0ZpeGVkKHRoaXMuZGVjaW1hbE51bWJlcik7XG4gICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvdW50LnRvRml4ZWQoXG4gICAgICAgICAgICAgICAgY291bnRBZnRlckRvdCA+IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgIDogY291bnRBZnRlckRvdFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgICAgICAgdGhpcy50bXAgPSBwYXJzZUZsb2F0KHRoaXMudmFsdWUucmVwbGFjZSgvLC9nLCAnJykpO1xuICAgICAgICAgICAgdGhpcy5jb3VudCA9IHRoaXMudG1wICsgK3RoaXMuaW50U3RlcDtcbiAgICAgICAgICAgIGlmICh0aGlzLm1heCA9PT0gbnVsbCB8fCBOdW1iZXIodGhpcy5jb3VudCkgPD0gTnVtYmVyKHRoaXMubWF4KSkge1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb3VudC50b0ZpeGVkKFxuICAgICAgICAgICAgICAgIGNvdW50QWZ0ZXJEb3QgPiB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICA6IGNvdW50QWZ0ZXJEb3RcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1pbiA9PT0gbnVsbCB8fCBOdW1iZXIodGhpcy52YWx1ZSkgPiBOdW1iZXIodGhpcy5taW4pKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVN0ZXAgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRtcCA9IHBhcnNlRmxvYXQodGhpcy52YWx1ZS5yZXBsYWNlKC8sL2csICcnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U3RlcCA9XG4gICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RlcC50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgICAgIGNvdW50QWZ0ZXJEb3QgPiB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvdW50QWZ0ZXJEb3RcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKSArXG4gICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1c3RvbVN0ZXAudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgICAgICBjb3VudEFmdGVyRG90ID4gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb3VudEFmdGVyRG90XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFN0ZXAudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgICAgICBjb3VudEFmdGVyRG90ID4gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb3VudEFmdGVyRG90XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudCA9IHBhcnNlRmxvYXQodGhpcy50bXApIC0gdGhpcy5sYXN0U3RlcDtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb3VudC50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgY291bnRBZnRlckRvdCA+IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICA6IGNvdW50QWZ0ZXJEb3RcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudG1wID0gcGFyc2VGbG9hdCh0aGlzLnZhbHVlLnJlcGxhY2UoLywvZywgJycpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ID0gcGFyc2VGbG9hdCh0aGlzLnRtcCkgLSBkZWZhdWx0U3RlcDtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb3VudC50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgY291bnRBZnRlckRvdCA+IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICA6IGNvdW50QWZ0ZXJEb3RcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXggPT09IG51bGwgfHwgTnVtYmVyKHRoaXMudmFsdWUpIDwgTnVtYmVyKHRoaXMubWF4KSkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5jdXN0b21TdGVwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50bXAgPSBwYXJzZUZsb2F0KHRoaXMudmFsdWUucmVwbGFjZSgvLC9nLCAnJykpO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdFN0ZXAgPVxuICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFN0ZXAudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgICAgICBjb3VudEFmdGVyRG90ID4gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb3VudEFmdGVyRG90XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21TdGVwLnRvRml4ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgY291bnRBZnRlckRvdCA+IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY291bnRBZnRlckRvdFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTdGVwLnRvRml4ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgY291bnRBZnRlckRvdCA+IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY291bnRBZnRlckRvdFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSBwYXJzZUZsb2F0KHRoaXMudG1wKSArIHRoaXMubGFzdFN0ZXA7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY291bnQudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgIGNvdW50QWZ0ZXJEb3QgPiB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgOiBjb3VudEFmdGVyRG90XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRtcCA9IHBhcnNlRmxvYXQodGhpcy52YWx1ZS5yZXBsYWNlKC8sL2csICcnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudCA9IHBhcnNlRmxvYXQodGhpcy50bXApICsgZGVmYXVsdFN0ZXA7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY291bnQudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgIGNvdW50QWZ0ZXJEb3QgPiB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgOiBjb3VudEFmdGVyRG90XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgICAgICBpZiAodGhpcy5taW4gIT0gbnVsbCAmJiB0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbi50b1N0cmluZygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMubWluID09PSBudWxsIHx8XG4gICAgICAgICAgICAgIE51bWJlcih0aGlzLnZhbHVlKSA+IHBhcnNlSW50KHRoaXMubWluLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSAnMCc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50bXAgPSArdGhpcy52YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoLywvZywgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSArdGhpcy50bXAgLSArdGhpcy5pbnRTdGVwO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvdW50LnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICAgICAgaWYgKHRoaXMubWluICE9IG51bGwgJiYgdGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW4udG9TdHJpbmcoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLm1heCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgICBOdW1iZXIodGhpcy52YWx1ZSkgPCBwYXJzZUludCh0aGlzLm1heC50b1N0cmluZygpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gJzAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudG1wID0gdGhpcy52YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoLywvZywgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSArdGhpcy50bXAgKyArdGhpcy5pbnRTdGVwO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvdW50LnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzdG9wIHdoZW4ga2V5ZG93blxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuY2FyZXRDb2xvciA9ICd0cmFuc3BhcmVudCc7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlQ2xpY2soKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0IHx8XG4gICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb24gPSB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgfVxuICB9XG5cbiAgZGVsYXlTZWFyY2goKSB7XG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUoKG9ic2VydmVyKSA9PiB7XG4gICAgICB0aGlzLnVzZXJRdWVzdGlvblVwZGF0ZSA9IG9ic2VydmVyO1xuICAgIH0pO1xuICAgIHRoaXMudXNlclF1ZXN0aW9uVXBkYXRlXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKCh0ZXh0OiBzdHJpbmcpID0+IHRoaXMuY2hlY2tNaW5NYXgodGV4dCkpO1xuICAgIC8vIHRoaXMudXNlclF1ZXN0aW9uVXBkYXRlLm5leHQoKGUudGFyZ2V0IGFzIGFueSkudmFsdWUpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy51c2VyUXVlc3Rpb25VcGRhdGUubmV4dCh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIH0sIDUwKTtcbiAgfVxuXG4gIGNoZWNrTWluTWF4KHRleHQpIHtcbiAgICBsZXQgbnVtYmVyOiBudW1iZXI7XG4gICAgaWYgKHRleHQ/LmluZGV4T2YoJywnKSA+IDApIHtcbiAgICAgIG51bWJlciA9IE51bWJlcih0ZXh0LnJlcGxhY2VBbGwoJywnLCAnJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1iZXIgPSBOdW1iZXIodGV4dCk7XG4gICAgfVxuXG4gICAgaWYgKCEhdGhpcy5taW4pIHtcbiAgICAgIGlmIChudW1iZXIgPCB0aGlzLm1pbikge1xuICAgICAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghIXRoaXMubWF4KSB7XG4gICAgICBpZiAobnVtYmVyID4gdGhpcy5tYXgpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRvR2V0Q2FyZXRQb3NpdGlvbihjdHJsKSB7XG4gICAgbGV0IENhcmV0UG9zID0gMDtcbiAgICBpZiAoY3RybC5zZWxlY3Rpb25TdGFydCB8fCBjdHJsLnNlbGVjdGlvblN0YXJ0ID09PSAwKSB7XG4gICAgICBDYXJldFBvcyA9IGN0cmwuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICByZXR1cm4gQ2FyZXRQb3M7XG4gICAgfVxuICB9XG5cbiAgc2V0Q2FyZXRQb3NpdGlvbihjdHJsLCBwb3MpIHtcbiAgICBpZiAoY3RybC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgICAgY3RybC5mb2N1cygpO1xuICAgICAgY3RybC5zZXRTZWxlY3Rpb25SYW5nZShwb3MsIHBvcyk7XG4gICAgfSBlbHNlIGlmIChjdHJsLmNyZWF0ZVRleHRSYW5nZSkge1xuICAgICAgY29uc3QgcmFuZ2UgPSBjdHJsLmNyZWF0ZVRleHRSYW5nZSgpO1xuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBwb3MpO1xuICAgICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBwb3MpO1xuICAgICAgcmFuZ2Uuc2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgc2V0Q2FyZXQoKSB7XG4gICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCwgdGhpcy5jdXJzb3JQb3NpdGlvbik7XG4gIH1cblxuICB1cFN0ZXBIYW5kZWwoKSB7XG4gICAgdGhpcy51c2VyRWRpdGUgPSB0cnVlO1xuICAgIGlmICh0aGlzLm1pbiAhPSBudWxsICYmIHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnJlYWRvbmx5ID09PSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjb3VudEFmdGVyRG90ID1cbiAgICAgICAgICB0aGlzLnZhbHVlICE9PSBudWxsICYmIHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLnZhbHVlLnRvU3RyaW5nKCkubGVuZ3RoIC1cbiAgICAgICAgICAgICAgMSAtXG4gICAgICAgICAgICAgIHRoaXMudmFsdWUudG9TdHJpbmcoKS5pbmRleE9mKCcuJylcbiAgICAgICAgICAgIDogMDtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSAnMCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdFN0ZXA6IG51bWJlciA9XG4gICAgICAgICAgICBjb3VudEFmdGVyRG90ID4gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgID8gTWF0aC5wb3codGhpcy5kZWNpbWFsQ29uc3RhbnQsIHRoaXMuZGVjaW1hbE51bWJlcilcbiAgICAgICAgICAgICAgOiBNYXRoLnBvdyh0aGlzLmRlY2ltYWxDb25zdGFudCwgY291bnRBZnRlckRvdCk7XG4gICAgICAgICAgdGhpcy5kb3RQb3NpdGlvbiA9IHRoaXMudmFsdWUudG9TdHJpbmcoKS5pbmRleE9mKCcuJykgKyAxO1xuICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUudG9TdHJpbmcoKS5tYXRjaCgvXFwuL2cpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kb3RQb3NpdGlvbiA+IHRoaXMuY3Vyc29yUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy50bXAgPSBwYXJzZUZsb2F0KHRoaXMudmFsdWUucmVwbGFjZSgvLC9nLCAnJykpO1xuICAgICAgICAgICAgICB0aGlzLmNvdW50ID0gdGhpcy50bXAgKyArdGhpcy5pbnRTdGVwO1xuICAgICAgICAgICAgICBpZiAodGhpcy5tYXggPT09IG51bGwgfHwgTnVtYmVyKHRoaXMuY291bnQpIDw9IHRoaXMubWF4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY291bnQudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgIGNvdW50QWZ0ZXJEb3QgPiB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgOiBjb3VudEFmdGVyRG90XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMubWF4ID09PSBudWxsIHx8IE51bWJlcih0aGlzLnZhbHVlKSA8IE51bWJlcih0aGlzLm1heCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXN0b21TdGVwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRtcCA9IHBhcnNlRmxvYXQodGhpcy52YWx1ZS5yZXBsYWNlKC8sL2csICcnKSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTdGVwID1cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RlcC50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRBZnRlckRvdCA+IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvdW50QWZ0ZXJEb3RcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tU3RlcC50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRBZnRlckRvdCA+IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvdW50QWZ0ZXJEb3RcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTdGVwLnRvRml4ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudEFmdGVyRG90ID4gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY291bnRBZnRlckRvdFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSBwYXJzZUZsb2F0KHRoaXMudG1wKSArIHRoaXMubGFzdFN0ZXA7XG4gICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb3VudFxuICAgICAgICAgICAgICAgICAgICAudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgICAgICBjb3VudEFmdGVyRG90ID4gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgOiBjb3VudEFmdGVyRG90XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJycpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRtcCA9IHBhcnNlRmxvYXQodGhpcy52YWx1ZS5yZXBsYWNlKC8sL2csICcnKSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvdW50ID0gcGFyc2VGbG9hdCh0aGlzLnRtcCkgKyBkZWZhdWx0U3RlcDtcbiAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvdW50XG4gICAgICAgICAgICAgICAgICAgIC50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgICAgIGNvdW50QWZ0ZXJEb3QgPiB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvdW50QWZ0ZXJEb3RcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5tYXggPT09IG51bGwgfHxcbiAgICAgICAgICAgICAgTnVtYmVyKHRoaXMudmFsdWUpIDwgcGFyc2VJbnQodGhpcy5tYXgudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnRtcCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csICcnKTtcbiAgICAgICAgICAgICAgdGhpcy5jb3VudCA9ICt0aGlzLnRtcCArICt0aGlzLmludFN0ZXA7XG5cbiAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY291bnQudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkb3duU3RlcEhhbmRlbCgpIHtcbiAgICB0aGlzLnVzZXJFZGl0ZSA9IHRydWU7XG4gICAgaWYgKHRoaXMubWluICE9IG51bGwgJiYgdGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW4udG9TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMucmVhZG9ubHkgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGNvdW50QWZ0ZXJEb3QgPVxuICAgICAgICAgIHRoaXMudmFsdWUgIT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gJycgJiYgdGhpcy52YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMudmFsdWUudG9TdHJpbmcoKS5sZW5ndGggLVxuICAgICAgICAgICAgICAxIC1cbiAgICAgICAgICAgICAgdGhpcy52YWx1ZS50b1N0cmluZygpLmluZGV4T2YoJy4nKVxuICAgICAgICAgICAgOiAwO1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9ICcwJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBkZWZhdWx0U3RlcDogbnVtYmVyID1cbiAgICAgICAgICAgIGNvdW50QWZ0ZXJEb3QgPiB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgPyBNYXRoLnBvdyh0aGlzLmRlY2ltYWxDb25zdGFudCwgdGhpcy5kZWNpbWFsTnVtYmVyKVxuICAgICAgICAgICAgICA6IE1hdGgucG93KHRoaXMuZGVjaW1hbENvbnN0YW50LCBjb3VudEFmdGVyRG90KTtcbiAgICAgICAgICB0aGlzLmRvdFBvc2l0aW9uID0gdGhpcy52YWx1ZS50b1N0cmluZygpLmluZGV4T2YoJy4nKSArIDE7XG4gICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS50b1N0cmluZygpLm1hdGNoKC9cXC4vZykpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRvdFBvc2l0aW9uID4gdGhpcy5jdXJzb3JQb3NpdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLnRtcCA9IHBhcnNlRmxvYXQodGhpcy52YWx1ZS5yZXBsYWNlKC8sL2csICcnKSk7XG4gICAgICAgICAgICAgIHRoaXMuY291bnQgPVxuICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy52YWx1ZS5yZXBsYWNlKC8sL2csICcnKSkgLSArdGhpcy5pbnRTdGVwO1xuICAgICAgICAgICAgICBpZiAodGhpcy5taW4gPT09IG51bGwgfHwgTnVtYmVyKHRoaXMuY291bnQpID49IHRoaXMubWluKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY291bnRcbiAgICAgICAgICAgICAgICAgIC50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgICBjb3VudEFmdGVyRG90ID4gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICA6IGNvdW50QWZ0ZXJEb3RcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMubWluID09PSBudWxsIHx8IE51bWJlcih0aGlzLnZhbHVlKSA+IE51bWJlcih0aGlzLm1pbikpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXN0b21TdGVwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRtcCA9IHBhcnNlRmxvYXQodGhpcy52YWx1ZS5yZXBsYWNlKC8sL2csICcnKSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTdGVwID1cbiAgICAgICAgICAgICAgICAgICAgcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0U3RlcC50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRBZnRlckRvdCA+IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvdW50QWZ0ZXJEb3RcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tU3RlcC50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgICAgICAgY291bnRBZnRlckRvdCA+IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvdW50QWZ0ZXJEb3RcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTdGVwLnRvRml4ZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3VudEFmdGVyRG90ID4gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY291bnRBZnRlckRvdFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSBwYXJzZUZsb2F0KHRoaXMudG1wKSAtIHRoaXMubGFzdFN0ZXA7XG4gICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5jb3VudC50b0ZpeGVkKFxuICAgICAgICAgICAgICAgICAgICBjb3VudEFmdGVyRG90ID4gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmRlY2ltYWxOdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICA6IGNvdW50QWZ0ZXJEb3RcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMudG1wID0gcGFyc2VGbG9hdCh0aGlzLnZhbHVlLnJlcGxhY2UoLywvZywgJycpKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSBwYXJzZUZsb2F0KHRoaXMudG1wKSAtIGRlZmF1bHRTdGVwO1xuICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY291bnQudG9GaXhlZChcbiAgICAgICAgICAgICAgICAgICAgY291bnRBZnRlckRvdCA+IHRoaXMuZGVjaW1hbE51bWJlclxuICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kZWNpbWFsTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgOiBjb3VudEFmdGVyRG90XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMubWluID09PSBudWxsIHx8XG4gICAgICAgICAgICAgIE51bWJlcih0aGlzLnZhbHVlKSA+IHBhcnNlSW50KHRoaXMubWluLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy50bXAgPSArdGhpcy52YWx1ZS50b1N0cmluZygpLnJlcGxhY2UoLywvZywgJycpO1xuICAgICAgICAgICAgICB0aGlzLmNvdW50ID0gK3RoaXMudG1wIC0gK3RoaXMuaW50U3RlcDtcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY291bnQudG9TdHJpbmcoKS5yZXBsYWNlKC8sL2csICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbnB1dEJsdXIoZTogRXZlbnQpIHtcbiAgICB0aGlzLmNoZWNrTWluTWF4KHRoaXMudGV4dFZhbHVlKTtcbiAgICB0aGlzLm9uQmx1ci5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIGh0bWxFbGVtZW50OiB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgaHRtbEV2ZW50OiBlLFxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXggZm9ybS1pdGVtXCIgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCIgW2F0dHIuaWRdPVwidWlkXCIgI2ZjPlxuICAgIDxkaXYgY2xhc3M9XCJheCBpdGVtcy13cmFwcGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltzdGFydF1cIj5cbiAgICAgICAgPC9uZy1jb250ZW50PlxuICAgICAgICA8YXgtYnV0dG9uIGljb249XCJmYXIgZmEtcGx1c1wiIHR5cGU9XCJzdWNjZXNzIGJsYW5rXCIgKGNsaWNrKT1cInVwU3RlcEhhbmRlbCgpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgKm5nSWY9XCJzaG93RG91YmxlQ291bnRlclwiPjwvYXgtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCIgI2NvbnRlbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheCBmb3JtLWNvbnRyb2wgaW5wdXQge3tzaXplfX1cIiBbY2xhc3MuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbY2xhc3MucmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgW2NsYXNzLmljb25dPVwiaWNvblwiPlxuICAgICAgICAgICAgPGlucHV0IFthdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCIgW25hbWVdPVwibmFtZVwiICNpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYXgge3tzaXplfX1cIiBbbWF4bGVuZ3RoXT1cImNhbGNTZXBhcmF0b3IobWF4TGVuZ3RoKVwiIFsobmdNb2RlbCldPVwidGV4dFZhbHVlXCIgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlaG9sZGVyfX1cIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtuZ0NsYXNzXT1cInNldFRleHRBbGlnbigpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuY2xlYXJdPVwidmFsdWUgJiYgYWxsb3dDbGVhclwiIChmb2N1cyk9XCJoYW5kbGVJbnB1dEZvY3VzKCRldmVudClcIiAoYmx1cik9XCJoYW5kbGVJbnB1dEJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImhhbmRsZUtleVByZXNzKCRldmVudClcIiAobmdNb2RlbENoYW5nZSk9XCJ0aGlzLnVzZXJRdWVzdGlvblVwZGF0ZS5uZXh0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZUtleURvd24oJGV2ZW50KVwiIChjbGljayk9XCJoYW5kbGVDbGljaygpXCIgKGtleXVwKT1cImhhbmRsZUtleVVwKCRldmVudClcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwie3tpY29ufX1cIiAqbmdJZj1cImljb25cIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJheCBpdGVtcy13cmFwcGVyXCI+XG4gICAgICAgIDxheC1idXR0b24gKm5nSWY9XCJ2YWx1ZSAmJiBhbGxvd0NsZWFyXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgaWNvbj1cImZhciBmYS10aW1lc1wiIHR5cGU9XCJkYW5nZXIgYmxhbmtcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKClcIj48L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gaWNvbj1cImZhciBmYS1taW51c1wiIHR5cGU9XCJkYW5nZXIgYmxhbmtcIiAoY2xpY2spPVwiZG93blN0ZXBIYW5kZWwoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiICpuZ0lmPVwic2hvd0RvdWJsZUNvdW50ZXJcIj48L2F4LWJ1dHRvbj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2VuZF1cIj5cbiAgICAgICAgPC9uZy1jb250ZW50PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3ctbnVtYmVyXCIgKm5nSWY9XCJzaG93Q291bnRlciAmJiAhc2hvd0RvdWJsZUNvdW50ZXIgJiYgIXJlYWRvbmx5XCIgPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbiB0eXBlPVwibGlnaHQgYmxhbmtcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBpY29uPVwiZmFzIGZhLWFuZ2xlLXVwXCIgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJ1cFN0ZXBIYW5kZWwoKVwiIChtb3VzZXVwKT1cImRlbGF5U2VhcmNoKClcIiBbdGFiSW5kZXhdPVwiLTFcIj48L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gdHlwZT1cImxpZ2h0IGJsYW5rXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgaWNvbj1cImZhcyBmYS1hbmdsZS1kb3duXCIgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCJkb3duU3RlcEhhbmRlbCgpXCIgKG1vdXNldXApPVwiZGVsYXlTZWFyY2goKVwiIFt0YWJJbmRleF09XCItMVwiPjwvYXgtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuPC9kaXY+XG4iXX0=
|