@eui/components 17.2.0-snapshot-1707220366289 → 17.2.0-snapshot-1707261708066
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/docs/dependencies.html +2 -2
- package/docs/js/search/search_index.js +2 -2
- package/esm2022/eui-timepicker/eui-timepicker.component.mjs +5 -8
- package/eui-timepicker/eui-timepicker.component.d.ts.map +1 -1
- package/fesm2022/eui-components-eui-timepicker.mjs +4 -7
- package/fesm2022/eui-components-eui-timepicker.mjs.map +1 -1
- package/package.json +138 -138
@@ -95,7 +95,7 @@ export class EuiTimepickerComponent {
|
|
95
95
|
}
|
96
96
|
ngOnChanges(changes) {
|
97
97
|
if (this.isOneInputField) {
|
98
|
-
if (changes.hasSeconds) {
|
98
|
+
if (this.hasSeconds && changes.hasSeconds) {
|
99
99
|
this.timeMask = 'Hh:m0:s0';
|
100
100
|
this.placeholder = 'Hh:m0:s0';
|
101
101
|
}
|
@@ -125,7 +125,7 @@ export class EuiTimepickerComponent {
|
|
125
125
|
* @param step The step number that hours will increase or decrease
|
126
126
|
*/
|
127
127
|
changeHours(step) {
|
128
|
-
if (!this.hoursUpDisabled || !this.hoursDownDisabled) {
|
128
|
+
if ((!this.hoursUpDisabled && step > 0) || (!this.hoursDownDisabled && step < 0)) {
|
129
129
|
const val = (isNaN(this.hours) ? 0 : this.hours) + step;
|
130
130
|
this.updateHours(val.toString());
|
131
131
|
}
|
@@ -136,7 +136,7 @@ export class EuiTimepickerComponent {
|
|
136
136
|
* @param step The step number that minutes will increase or decrease
|
137
137
|
*/
|
138
138
|
changeMinutes(step) {
|
139
|
-
if (!this.minutesUpDisabled || !this.minutesDownDisabled) {
|
139
|
+
if ((!this.minutesUpDisabled && step > 0) || (!this.minutesDownDisabled && step < 0)) {
|
140
140
|
const val = (isNaN(this.mins) ? 0 : this.mins) + step;
|
141
141
|
this.updateMinutes(val.toString());
|
142
142
|
}
|
@@ -147,7 +147,7 @@ export class EuiTimepickerComponent {
|
|
147
147
|
* @param step The step number that seconds will increase or decrease
|
148
148
|
*/
|
149
149
|
changeSeconds(step) {
|
150
|
-
if (!this.secondsUpDisabled || !this.secondsDownDisabled) {
|
150
|
+
if ((!this.secondsUpDisabled && step > 0) || (!this.secondsDownDisabled && step < 0)) {
|
151
151
|
const val = (isNaN(this.secs) ? 0 : this.secs) + step;
|
152
152
|
this.updateSeconds(val.toString());
|
153
153
|
}
|
@@ -244,9 +244,6 @@ export class EuiTimepickerComponent {
|
|
244
244
|
}
|
245
245
|
return;
|
246
246
|
}
|
247
|
-
if (typeof values !== 'object' || Array.isArray(values)) {
|
248
|
-
throw new Error('value must be an EuiTimePicker Object');
|
249
|
-
}
|
250
247
|
if (values.hours < 0 || values.hours > 23 || typeof values.hours !== 'number') {
|
251
248
|
throw new Error('hours must be defined and be a number with range 0-23');
|
252
249
|
}
|
@@ -382,4 +379,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
|
|
382
379
|
type: Input,
|
383
380
|
args: [{ transform: booleanAttribute }]
|
384
381
|
}] } });
|
385
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRpbWVwaWNrZXIvZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRpbWVwaWNrZXIvZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsSUFBSSxFQUtKLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1DLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFVckQsTUFBTSxPQUFPLHNCQUFzQjtJQXFDL0IsWUFDa0QsTUFBK0IsRUFDakQsT0FBa0I7UUFBbEIsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQWxDbEQsd0JBQW1CLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUtqQyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTFCLFlBQU8sR0FBRyxnQkFBZ0IsQ0FBQztRQUUzQixhQUFRLEdBQUcsT0FBTyxDQUFBO1FBQ2xCLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUU1QixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FB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LFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxVQUFVO3NCQUFqRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBTZWxmLFxuICAgIERvQ2hlY2ssXG4gICAgT25EZXN0cm95LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgT25DaGFuZ2VzLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IERZTkFNSUNfQ09NUE9ORU5UX0NPTkZJRyB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBFdWlEYXRlVGltZVBpY2tlckNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2V1aS1kYXRlLXRpbWUtcGlja2VyLmNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBFdWlUaW1lUGlja2VyIH0gZnJvbSAnLi9tb2RlbHMvZXVpLXRpbWVwaWNrZXIubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2V1aS10aW1lcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEV1aVRpbWVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkNoYW5nZXMsIERvQ2hlY2ssIE9uRGVzdHJveSB7XG4gICAgaG91cnM6IG51bWJlcjtcbiAgICBtaW5zOiBudW1iZXI7XG4gICAgc2VjczogbnVtYmVyO1xuICAgIGlzRGF0ZXRpbWVwaWNrZXI6IGJvb2xlYW47XG4gICAgb25lSW5wdXRGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIG9uZUlucHV0SG91cnM6IHN0cmluZztcbiAgICBvbmVJbnB1dE1pbnM6IHN0cmluZztcbiAgICBvbmVJbnB1dFNlY3M6IHN0cmluZztcblxuICAgIHB1YmxpYyBob3Vyc1VwRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgaG91cnNEb3duRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgbWludXRlc1VwRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgbWludXRlc0Rvd25EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBzZWNvbmRzVXBEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBzZWNvbmRzRG93bkRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBlMmVBdHRyID0gJ2V1aS10aW1lcGlja2VyJztcblxuICAgIEBJbnB1dCgpIHRpbWVNYXNrID0gJ0hoOm0wJ1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gdGhpcy50aW1lTWFzaztcblxuICAgIEBJbnB1dCgpIHN0ZXBIb3VycyA9IDE7XG4gICAgQElucHV0KCkgc3RlcE1pbnV0ZXMgPSAxO1xuICAgIEBJbnB1dCgpIHN0ZXBTZWNvbmRzID0gMTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc3JlYWRPbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzT25lSW5wdXRGaWVsZCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNTZWNvbmRzID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHByb3BhZ2F0ZWRWYWx1ZXM6IEV1aVRpbWVQaWNrZXIgPSB7XG4gICAgICAgIGhvdXJzOiBudWxsLFxuICAgICAgICBtaW5zOiBudWxsLFxuICAgICAgICBzZWNzOiB0aGlzLmhhc1NlY29uZHMgPyBudWxsIDogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEWU5BTUlDX0NPTVBPTkVOVF9DT05GSUcpIGNvbmZpZzogRXVpRGF0ZVRpbWVQaWNrZXJDb25maWcsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaG91cnMgPSBjb25maWc/LmhvdXJzIHx8IDA7XG4gICAgICAgIHRoaXMubWlucyA9IGNvbmZpZz8ubWlucyB8fCAwO1xuICAgICAgICB0aGlzLnNlY3MgPSBjb25maWc/LnNlY3MgfHwgMDtcbiAgICAgICAgdGhpcy5pc0RhdGV0aW1lcGlja2VyID0gY29uZmlnPy5pc0RhdGV0aW1lcGlja2VyO1xuICAgICAgICB0aGlzLmhhc1NlY29uZHMgPSBjb25maWc/Lmhhc1NlY29uZHM7XG4gICAgICAgIHRoaXMuaXNPbmVJbnB1dEZpZWxkID0gY29uZmlnPy5pc09uZUlucHV0RmllbGQ7XG4gICAgICAgIHRoaXMuc3RlcEhvdXJzID0gY29uZmlnPyBjb25maWcuc3RlcEhvdXJzOiB0aGlzLnN0ZXBIb3VycztcbiAgICAgICAgdGhpcy5zdGVwTWludXRlcyA9IGNvbmZpZz8gY29uZmlnLnN0ZXBNaW51dGVzOiB0aGlzLnN0ZXBNaW51dGVzO1xuICAgICAgICB0aGlzLnN0ZXBTZWNvbmRzID0gY29uZmlnPyBjb25maWcuc3RlcFNlY29uZHM6IHRoaXMuc3RlcFNlY29uZHM7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gdGhpcy5ob3VycyA9PT0gMCB8fCBudWxsID8gJzAwJyA6IHRoaXMuaG91cnM7XG4gICAgICAgIGNvbnN0IG1pbnMgPSB0aGlzLm1pbnMgPT09IDAgfHwgbnVsbCA/ICcwMCcgOiB0aGlzLm1pbnM7XG4gICAgICAgIGNvbnN0IHNlY3MgPSB0aGlzLnNlY3MgPT09IDAgfHwgbnVsbCA/ICcwMCcgOiB0aGlzLnNlY3M7XG4gICAgICAgIHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyArIGhvdXJzICsgJzonICsgbWlucyArICc6JyArIHNlY3MpO1xuICAgICAgICB0aGlzLmNhbGxiYWNrRm4gPSBjb25maWc/LmNhbGxiYWNrRm4gfHwgdGhpcy5jYWxsYmFja0ZuO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBcbiAgICAgICAgdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gc3BsaXRzIHRoZSBlbnRlcmVkIHRpbWUgaW50byAzIHBhcnRzIGJhc2VkIG9uIHRoZSA6IGFuZCBwcm9wYWdhdGVzIGJhY2sgdGhlIGNvcnJlc3BvbmRpbmcgcGFydHNcbiAgICAgICAgICAgIGlmKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgW3RoaXMub25lSW5wdXRIb3VycywgdGhpcy5vbmVJbnB1dE1pbnMsIHRoaXMub25lSW5wdXRTZWNzXSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXR0ZWRob3VycyA9IHRoaXMub25lSW5wdXRIb3VycyA/IE51bWJlcih0aGlzLm9uZUlucHV0SG91cnMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdHRlZG1pbnMgPSB0aGlzLm9uZUlucHV0TWlucyA/IE51bWJlcih0aGlzLm9uZUlucHV0TWlucykgOiBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkc2VjcyA9IHRoaXMub25lSW5wdXRTZWNzID8gTnVtYmVyKHRoaXMub25lSW5wdXRTZWNzKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2Vjb25kcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Vyczogc3BsaXR0ZWRob3VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnM6IHNwbGl0dGVkbWlucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3M6IHNwbGl0dGVkc2VjcyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHNwbGl0dGVkaG91cnMsIHNwbGl0dGVkbWlucywgc3BsaXR0ZWRzZWNzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Vyczogc3BsaXR0ZWRob3VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnM6IHNwbGl0dGVkbWlucyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHNwbGl0dGVkaG91cnMsIHNwbGl0dGVkbWlucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzcGxpdHRlZGhvdXJzID09PSBudWxsICYmIHNwbGl0dGVkbWlucyA9PT0gbnVsbCAmJiBzcGxpdHRlZHNlY3MgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5wcm9wYWdhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTp2b2lkIHtcbiAgICAgICAgaWYodGhpcy5pc09uZUlucHV0RmllbGQpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLmhhc1NlY29uZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVNYXNrID0gJ0hoOm0wOnMwJztcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gJ0hoOm0wOnMwJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLnRpbWVNYXNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lTWFzayA9IGNoYW5nZXMudGltZU1hc2suY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBjaGFuZ2VzLnRpbWVNYXNrLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGNoYW5nZXMucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gY2hhbmdlcy5wbGFjZWhvbGRlci5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIC8vIG1hcmtzIHRoZSBpbnB1dCBjb250cm9sIGFzIHRvdWNoZWQvaW52YWxpZCBpZiB0aGUgZm9ybSBjb250cm9sIGlzIHRvdWNoZWQvaW52YWxpZFxuICAgICAgICAgICAgdGhpcy5jb250cm9sPy50b3VjaGVkID8gdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKSA6IHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbD8uaW52YWxpZCA/IHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5zZXRFcnJvcnModGhpcy5jb250cm9sLmVycm9ycykgOiB0aGlzLm9uZUlucHV0Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnRzIG9yIGRlY3JlbWVudHMgaG91cnMgYWNjb3JkaW5nIHRvIHRoZSBzdGVwIHBhcmFtIGJlaW5nIHBhc3NlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgbnVtYmVyIHRoYXQgaG91cnMgd2lsbCBpbmNyZWFzZSBvciBkZWNyZWFzZVxuICAgICAqL1xuICAgIGNoYW5nZUhvdXJzKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaG91cnNVcERpc2FibGVkIHx8ICF0aGlzLmhvdXJzRG93bkRpc2FibGVkKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSAoaXNOYU4odGhpcy5ob3VycykgPyAwIDogdGhpcy5ob3VycykgKyBzdGVwO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVIb3Vycyh2YWwudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50cyBvciBkZWNyZW1lbnRzIG1pbnV0ZXMgYWNjb3JkaW5nIHRvIHRoZSBzdGVwIHBhcmFtIGJlaW5nIHBhc3NlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgbnVtYmVyIHRoYXQgbWludXRlcyB3aWxsIGluY3JlYXNlIG9yIGRlY3JlYXNlXG4gICAgICovXG4gICAgY2hhbmdlTWludXRlcyhzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm1pbnV0ZXNVcERpc2FibGVkIHx8ICF0aGlzLm1pbnV0ZXNEb3duRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IChpc05hTih0aGlzLm1pbnMpID8gMCA6IHRoaXMubWlucykgKyBzdGVwO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVNaW51dGVzKHZhbC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmNyZW1lbnRzIG9yIGRlY3JlbWVudHMgc2Vjb25kcyBhY2NvcmRpbmcgdG8gdGhlIHN0ZXAgcGFyYW0gYmVpbmcgcGFzc2VkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RlcCBUaGUgc3RlcCBudW1iZXIgdGhhdCBzZWNvbmRzIHdpbGwgaW5jcmVhc2Ugb3IgZGVjcmVhc2VcbiAgICAgKi9cbiAgICBjaGFuZ2VTZWNvbmRzKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2Vjb25kc1VwRGlzYWJsZWQgfHwgIXRoaXMuc2Vjb25kc0Rvd25EaXNhYmxlZCkge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gKGlzTmFOKHRoaXMuc2VjcykgPyAwIDogdGhpcy5zZWNzKSArIHN0ZXA7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlY29uZHModmFsLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGlucHV0IGZpZWxkIHdoZW4gaG91cnMgY2hhbmdlIGFuZCBhZGRzIDI0aG91ciB2YWxpZGF0aW9uICsgcHJvcGFnYXRlcyB0aGUgdmFsdWUgYmFjayB0byB0aGUgZm9ybVxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1ZhbCBUaGUgbmV3IHZhbHVlIHRoYXQgaG91cnMgd2lsbCBoYXZlXG4gICAgICovXG4gICAgdXBkYXRlSG91cnMobmV3VmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZW50ZXJlZEhvdXIgPSB0aGlzLnRvSW50ZWdlcihuZXdWYWwpO1xuXG4gICAgICAgIGlmICghaXNOYU4oZW50ZXJlZEhvdXIpKSB7XG4gICAgICAgICAgICB0aGlzLmhvdXJzID0gKGVudGVyZWRIb3VyIDwgMCA/IDI0ICsgZW50ZXJlZEhvdXIgOiBlbnRlcmVkSG91cikgJSAyNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaG91cnMgPSBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrRm4odGhpcy5ob3VycywgdGhpcy5taW5zLCB0aGlzLnNlY3MpO1xuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlZFZhbHVlcyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucHJvcGFnYXRlZFZhbHVlcyxcbiAgICAgICAgICAgIGhvdXJzOiB0aGlzLmhvdXJzLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBpbnB1dCBmaWVsZCB3aGVuIG1pbnV0ZXMgY2hhbmdlIGFuZCBhZGRzIDYwbWlucyB2YWxpZGF0aW9uICsgcHJvcGFnYXRlcyB0aGUgdmFsdWUgYmFjayB0byB0aGUgZm9ybVxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1ZhbCBUaGUgbmV3IHZhbHVlIHRoYXQgbWludXRlcyB3aWxsIGhhdmVcbiAgICAgKi9cbiAgICB1cGRhdGVNaW51dGVzKG5ld1ZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVudGVyZWRNaW4gPSB0aGlzLnRvSW50ZWdlcihuZXdWYWwpO1xuXG4gICAgICAgIGlmICghaXNOYU4oZW50ZXJlZE1pbikpIHtcbiAgICAgICAgICAgIHRoaXMubWlucyA9IGVudGVyZWRNaW4gJSA2MCA8IDAgPyA2MCArIChlbnRlcmVkTWluICUgNjApIDogZW50ZXJlZE1pbiAlIDYwO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VIb3VycyhNYXRoLmZsb29yKGVudGVyZWRNaW4gLyA2MCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5taW5zID0gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHRoaXMuaG91cnMsIHRoaXMubWlucywgdGhpcy5zZWNzKTtcblxuICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICBtaW5zOiB0aGlzLm1pbnMsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMucHJvcGFnYXRlZFZhbHVlcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGlucHV0IGZpZWxkIHdoZW4gc2Vjb25kcyBjaGFuZ2UgYW5kIGFkZHMgNjBzZWNzIHZhbGlkYXRpb24gKyBwcm9wYWdhdGVzIHRoZSB2YWx1ZSBiYWNrIHRvIHRoZSBmb3JtXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3VmFsIFRoZSBuZXcgdmFsdWUgdGhhdCBzZWNvbmRzIHdpbGwgaGF2ZVxuICAgICAqL1xuICAgIHVwZGF0ZVNlY29uZHMobmV3VmFsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZW50ZXJlZFNlYyA9IHRoaXMudG9JbnRlZ2VyKG5ld1ZhbCk7XG5cbiAgICAgICAgaWYgKCFpc05hTihlbnRlcmVkU2VjKSkge1xuICAgICAgICAgICAgdGhpcy5zZWNzID0gZW50ZXJlZFNlYyAlIDYwIDwgMCA/IDYwICsgKGVudGVyZWRTZWMgJSA2MCkgOiBlbnRlcmVkU2VjICUgNjA7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZU1pbnV0ZXMoTWF0aC5mbG9vcihlbnRlcmVkU2VjIC8gNjApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VjcyA9IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2tGbih0aGlzLmhvdXJzLCB0aGlzLm1pbnMsIHRoaXMuc2Vjcyk7XG5cbiAgICAgICAgdGhpcy5wcm9wYWdhdGVkVmFsdWVzID0ge1xuICAgICAgICAgICAgLi4udGhpcy5wcm9wYWdhdGVkVmFsdWVzLFxuICAgICAgICAgICAgc2VjczogdGhpcy5zZWNzLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMucHJvcGFnYXRlZFZhbHVlcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEF1dG9maWxscyBtaW5zIGFuZCBzZWNzIHdpdGggMDBzIGlmIHRoZSB1c2VyIHRhYnMgYWZ0ZXIgZW50ZXJpbmcgaG91cnMgYW5kIG1hcmtzIHRoZSBpbnB1dCBhcyB0b3VjaGVkXG4gICAgICovXG4gICAgb25Gb2N1c091dCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMub25lSW5wdXRIb3VycyAmJiAhdGhpcy5vbmVJbnB1dE1pbnMgJiYgIXRoaXMub25lSW5wdXRTZWNzKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMub25lSW5wdXRIb3Vycykge1xuICAgICAgICAgICAgICAgIGNhc2UgJzAnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uZUlucHV0SG91cnMgPSAnMDAnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICcxJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmVJbnB1dEhvdXJzID0gJzAxJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnMic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25lSW5wdXRIb3VycyA9ICcwMic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLnBhdGNoVmFsdWUoYCR7dGhpcy5vbmVJbnB1dEhvdXJzfSA6IDAwIDogMDBgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWVzOiBFdWlUaW1lUGlja2VyKTogdm9pZCB7XG4gICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgIHRoaXMuaG91cnMgPSBudWxsO1xuICAgICAgICAgICB0aGlzLm1pbnMgPSBudWxsO1xuICAgICAgICAgICB0aGlzLnNlY3MgPSBudWxsO1xuICAgICAgICAgICBpZih0aGlzLmlzT25lSW5wdXRGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpXG4gICAgICAgICAgIH1cbiAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWVzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndmFsdWUgbXVzdCBiZSBhbiBFdWlUaW1lUGlja2VyIE9iamVjdCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZXMuaG91cnMgPCAwIHx8IHZhbHVlcy5ob3VycyA+IDIzIHx8IHR5cGVvZiB2YWx1ZXMuaG91cnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hvdXJzIG11c3QgYmUgZGVmaW5lZCBhbmQgYmUgYSBudW1iZXIgd2l0aCByYW5nZSAwLTIzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlcy5taW5zIDwgMCB8fCB2YWx1ZXMubWlucyA+IDU5IHx8IHR5cGVvZiB2YWx1ZXMubWlucyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignbWlucyBtdXN0IGJlIGRlZmluZWQgYW5kIGJlIGEgbnVtYmVyIHdpdGggcmFuZ2UgMC01OScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc1NlY29uZHMgJiYgKHZhbHVlcy5zZWNzIDwgMCB8fCB2YWx1ZXMuc2VjcyA+IDU5IHx8IHR5cGVvZiB2YWx1ZXMuc2VjcyAhPT0gJ251bWJlcicpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlY3MgbXVzdCBiZSBkZWZpbmVkIGFuZCBiZSBhIG51bWJlciB3aXRoIHJhbmdlIDAtNTknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlSG91cnModmFsdWVzLmhvdXJzLnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLnVwZGF0ZU1pbnV0ZXModmFsdWVzLm1pbnMudG9TdHJpbmcoKSk7XG4gICAgICAgIGlmICh2YWx1ZXMuc2Vjcykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWNvbmRzKHZhbHVlcy5zZWNzLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzT25lSW5wdXRGaWVsZCkge1xuICAgICAgICAgICAgY29uc3QgaG91cnMgPSB0aGlzLnBhZE51bWJlcih2YWx1ZXMuaG91cnMpO1xuICAgICAgICAgICAgY29uc3QgbWlucyA9IHRoaXMucGFkTnVtYmVyKHZhbHVlcy5taW5zKTtcbiAgICAgICAgICAgIGNvbnN0IHNlY3MgPSB0aGlzLnBhZE51bWJlcih2YWx1ZXMuc2Vjcyk7XG5cbiAgICAgICAgICAgIHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5wYXRjaFZhbHVlKCcnICsgaG91cnMgKyAnOicgKyBtaW5zICsgJzonICsgc2Vjcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGhvdXIgdXAgaW5jcmVtZW50YWwgd2hlbiBtYXggdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIGhvdXJzVXBEaXNhYmxlKHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG91cnNVcERpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBob3VyIGRvd24gZGVjcmVtZW50YWwgd2hlbiBtaW4gdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIGhvdXJzRG93bkRpc2FibGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3Vyc0Rvd25EaXNhYmxlZCA9IHN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgbWludXRlcyB1cCBpbmNyZW1lbnRhbCB3aGVuIG1heCB0aW1lIHJhbmdlIGlzIHJlYWNoZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGF0ZSBUaGUgYm9vbGVhbiB2YWx1ZSB0aGF0IGVuYWJsZXMgdGhlIGZlYXR1cmVcbiAgICAgKi9cbiAgICBwdWJsaWMgbWludXRlc1VwRGlzYWJsZShzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLm1pbnV0ZXNVcERpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBtaW51dGVzIGRvd24gZGVjcmVtZW50YWwgd2hlbiBtaW4gdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIG1pbnV0ZXNEb3duRGlzYWJsZShzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLm1pbnV0ZXNEb3duRGlzYWJsZWQgPSBzdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIHNlY29uZHMgdXAgaW5jcmVtZW50YWwgd2hlbiBtYXggdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIHNlY29uZHNVcERpc2FibGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWNvbmRzVXBEaXNhYmxlZCA9IHN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgc2Vjb25kcyBkb3duIGRlY3JlbWVudGFsIHdoZW4gbWluIHRpbWUgcmFuZ2UgaXMgcmVhY2hlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBib29sZWFuIHZhbHVlIHRoYXQgZW5hYmxlcyB0aGUgZmVhdHVyZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZWNvbmRzRG93bkRpc2FibGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWNvbmRzRG93bkRpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXG4gICAgcHJpdmF0ZSBjYWxsYmFja0ZuOiAoaG91cnM6IG51bWJlciwgbWluczogbnVtYmVyLCBzZWNzPzogbnVtYmVyKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIHRvSW50ZWdlcih2YWx1ZTogYW55KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGAke3ZhbHVlfWAsIDEwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWRzIGxlYWRpbmcgemVybyB0byB0aGUgcHJvdmlkZWQgbnVtYmVyIHdoZW4gaXNPbmVJbnB1dEZpZWxkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGFkZCBsZWFkaW5nIHplcm8gdG9cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcGFkTnVtYmVyKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIWlzTmFOKHRoaXMudG9JbnRlZ2VyKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBgMCR7dmFsdWV9YC5zbGljZSgtMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBmaW5kIHRoZSBjb3JyZWN0IHR5cGUgb3IgdHVybiBpbnRvIGEgZ2VuZXJpYywgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svMi9nZW5lcmljcy5odG1sXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpOiB2b2lkID0+IHsvKiBlbXB0eSAqL307XG5cbiAgICBwcml2YXRlIHByb3BhZ2F0ZVRvdWNoZWQgPSAoKTogdm9pZCA9PiB7LyogZW1wdHkgKi99O1xufVxuIiwiPGRpdiBjbGFzcz1cImV1aS10aW1lcGlja2VyXCIgW2NsYXNzLmV1aS10aW1lcGlja2VyLS1jZW50ZXJlZF09XCJpc0RhdGV0aW1lcGlja2VyXCIgYXR0ci5kYXRhLWUyZT1cInt7IGUyZUF0dHIgfX1cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNPbmVJbnB1dEZpZWxkOyBlbHNlIG11bHRpcGxlSW5wdXRzXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgW2NsYXNzLmV1aS10aW1lcGlja2VyX19pbnB1dC0tb25lLWZpZWxkXT1cImlzRGF0ZXRpbWVwaWNrZXJcIlxuICAgICAgICAgICAgZXVpSW5wdXRUZXh0XG4gICAgICAgICAgICBtYXNrPVwie3sgdGltZU1hc2sgfX1cIlxuICAgICAgICAgICAgW2xlYWRaZXJvRGF0ZVRpbWVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJvbmVJbnB1dEZvcm1Db250cm9sLnZhbHVlP29uZUlucHV0Rm9ybUNvbnRyb2wudmFsdWU6J05vIHRpbWUgdmFsdWUnXCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJvbmVJbnB1dEZvcm1Db250cm9sXCJcbiAgICAgICAgICAgIChmb2N1c291dCk9XCJvbkZvY3VzT3V0KClcIlxuICAgICAgICAgICAgW2Ryb3BTcGVjaWFsQ2hhcmFjdGVyc109XCJmYWxzZVwiXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNyZWFkT25seVwiIC8+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctdGVtcGxhdGUgI211bHRpcGxlSW5wdXRzPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2lucHV0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc3JlYWRPbmx5XCIgY2xhc3M9XCJldWktdGltZXBpY2tlcl9fY2hldnJvbiBldWktdGltZXBpY2tlcl9faG91cnMtdXBcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VIb3VycyhzdGVwSG91cnMpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRpbWUtY29udHJvbC0tZGlzYWJsZWRdPVwiaG91cnNVcERpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImV1aS1jaGV2cm9uLXVwXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwiZ3JleS03NVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJJbmNyZWFzZSBIb3Vyc1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAjaW5wdXRyZWZob3Vyc1xuICAgICAgICAgICAgICAgIGV1aUlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgW2xlYWRpbmdaZXJvXT1cIjJcIlxuICAgICAgICAgICAgICAgIFtkaWdpdHNdPVwiMlwiXG4gICAgICAgICAgICAgICAgW2ZyYWN0aW9uRGlnaXRzXT1cIjBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2lucHV0XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkhIXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJob3Vyc1wiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlSG91cnMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzcmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJIb3Vyc1wiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uQXJyb3dVcCk9XCJjaGFuZ2VIb3VycyhzdGVwSG91cnMpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uQXJyb3dEb3duKT1cImNoYW5nZUhvdXJzKC1zdGVwSG91cnMpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiIC8+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzcmVhZE9ubHlcIiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19jaGV2cm9uIGV1aS10aW1lcGlja2VyX19ob3Vycy1kb3duXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlSG91cnMoLXN0ZXBIb3VycylcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGltZS1jb250cm9sLS1kaXNhYmxlZF09XCJob3Vyc0Rvd25EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJldWktY2hldnJvbi1kb3duXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwiZ3JleS03NVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWNyZWFzZSBIb3Vyc1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX3NwYWNlclwiPjo8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNyZWFkT25seVwiIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2NoZXZyb24gZXVpLXRpbWVwaWNrZXJfX21pbnV0ZXMtdXBcIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VNaW51dGVzKHN0ZXBNaW51dGVzKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aW1lLWNvbnRyb2wtLWRpc2FibGVkXT1cIm1pbnV0ZXNVcERpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImV1aS1jaGV2cm9uLXVwXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwiZ3JleS03NVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJJbmNyZWFzZSBNaW51dGVzXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICNpbnB1dHJlZm1pbnNcbiAgICAgICAgICAgICAgICBldWlJbnB1dE51bWJlclxuICAgICAgICAgICAgICAgIFtsZWFkaW5nWmVyb109XCIyXCJcbiAgICAgICAgICAgICAgICBbZGlnaXRzXT1cIjJcIlxuICAgICAgICAgICAgICAgIFtmcmFjdGlvbkRpZ2l0c109XCIwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJNTVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibWluc1wiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlTWludXRlcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiaXNyZWFkT25seVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIk1pbnV0ZXNcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLkFycm93VXApPVwiY2hhbmdlTWludXRlcyhzdGVwTWludXRlcyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5BcnJvd0Rvd24pPVwiY2hhbmdlTWludXRlcygtc3RlcE1pbnV0ZXMpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiIC8+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzcmVhZE9ubHlcIiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19jaGV2cm9uIGV1aS10aW1lcGlja2VyX19taW51dGVzLWRvd25cIj5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VNaW51dGVzKC1zdGVwTWludXRlcylcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGltZS1jb250cm9sLS1kaXNhYmxlZF09XCJtaW51dGVzRG93bkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImV1aS1jaGV2cm9uLWRvd25cIlxuICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJncmV5LTc1XCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cImxcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRlY3JlYXNlIE1pbnV0ZXNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1NlY29uZHNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdGltZXBpY2tlcl9fc3BhY2VyXCI+OjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzcmVhZE9ubHlcIiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19jaGV2cm9uIGV1aS10aW1lcGlja2VyX19zZWNvbmRzLXVwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VTZWNvbmRzKHN0ZXBTZWNvbmRzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGltZS1jb250cm9sLS1kaXNhYmxlZF09XCJzZWNvbmRzVXBEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiZXVpLWNoZXZyb24tdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwiZ3JleS03NVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJJbmNyZWFzZSBzZWNvbmRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAjaW5wdXRyZWZzZWNzXG4gICAgICAgICAgICAgICAgICAgIGV1aUlucHV0TnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIFtsZWFkaW5nWmVyb109XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpZ2l0c109XCIyXCJcbiAgICAgICAgICAgICAgICAgICAgW2ZyYWN0aW9uRGlnaXRzXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU1NcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJzZWNzXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidXBkYXRlU2Vjb25kcygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzcmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLkFycm93VXApPVwiY2hhbmdlU2Vjb25kcyhzdGVwU2Vjb25kcyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uQXJyb3dEb3duKT1cImNoYW5nZVNlY29uZHMoLXN0ZXBTZWNvbmRzKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNyZWFkT25seVwiIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2NoZXZyb24gZXVpLXRpbWVwaWNrZXJfX3NlY29uZHMtZG93blwiPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlU2Vjb25kcygtc3RlcFNlY29uZHMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aW1lLWNvbnRyb2wtLWRpc2FibGVkXT1cInNlY29uZHNEb3duRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImV1aS1jaGV2cm9uLWRvd25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwiZ3JleS03NVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibFwiXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWNyZWFzZSBzZWNvbmRzXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==
|
382
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLXRpbWVwaWNrZXIvZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLXRpbWVwaWNrZXIvZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsSUFBSSxFQUtKLGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1DLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFVckQsTUFBTSxPQUFPLHNCQUFzQjtJQXFDL0IsWUFDa0QsTUFBK0IsRUFDakQsT0FBa0I7UUFBbEIsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQWxDbEQsd0JBQW1CLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUtqQyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1QixzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBRTFCLFlBQU8sR0FBRyxnQkFBZ0IsQ0FBQztRQUUzQixhQUFRLEdBQUcsT0FBTyxDQUFBO1FBQ2xCLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUU1QixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFZSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFFbkQscUJBQWdCLEdBQWtCO1lBQ3RDLEtBQUssRUFBRSxJQUFJO1lBQ1gsSUFBSSxFQUFFLElBQUk7WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzNDLENBQUM7UUFDTSxhQUFRLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7UUFtVDVELGdFQUFnRTtRQUN4RCxlQUFVLEdBQXlELEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQXNCcEYsbUhBQW1IO1FBQ25ILDhEQUE4RDtRQUN0RCxvQkFBZSxHQUFHLENBQUMsQ0FBTSxFQUFRLEVBQUUsR0FBYSxDQUFDLENBQUM7UUFFbEQscUJBQWdCLEdBQUcsR0FBUyxFQUFFLEdBQWEsQ0FBQyxDQUFDO1FBeFVqRCxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxFQUFFLGdCQUFnQixDQUFDO1FBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxFQUFFLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sRUFBRSxlQUFlLENBQUM7UUFDL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDaEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDaEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDM0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDeEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXhELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBRUosSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3JGLGtHQUFrRztZQUNsRyxJQUFHLEtBQUssRUFBRTtnQkFDTixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUM3RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzFFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDMUUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUc7d0JBQ3BCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjt3QkFDeEIsS0FBSyxFQUFFLGFBQWE7d0JBQ3BCLElBQUksRUFBRSxZQUFZO3dCQUNsQixJQUFJLEVBQUUsWUFBWTtxQkFDckIsQ0FBQztvQkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDLENBQUM7aUJBQzlEO3FCQUFNO29CQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRzt3QkFDcEIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO3dCQUN4QixLQUFLLEVBQUUsYUFBYTt3QkFDcEIsSUFBSSxFQUFFLFlBQVk7cUJBQ3JCLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7aUJBQ2hEO2dCQUNELElBQUksYUFBYSxLQUFLLElBQUksSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLFlBQVksS0FBSyxJQUFJLEVBQUU7b0JBQzFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzlCO3FCQUFNO29CQUNILElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7aUJBQy9DO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBRyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7YUFDakM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7YUFDcEQ7WUFDRCxJQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7YUFDdkQ7U0FDSjtJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ0wsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2Qsb0ZBQW9GO1lBQ3BGLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5RyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlIO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLElBQVk7UUFDcEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLEdBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLEdBQUUsQ0FBQyxDQUFDLEVBQUU7WUFDNUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLElBQVk7UUFDdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksR0FBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLElBQUksR0FBRSxDQUFDLENBQUMsRUFBRTtZQUNoRixNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztZQUN0RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxhQUFhLENBQUMsSUFBWTtRQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxHQUFFLENBQUMsQ0FBQyxFQUFFO1lBQ2hGLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILFdBQVcsQ0FBQyxNQUFjO1FBQ3RCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQ3hFO2FBQU07WUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztTQUNwQjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUc7WUFDcEIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztTQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxNQUFjO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDM0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2pEO2FBQU07WUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztTQUNuQjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUc7WUFDcEIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNsQixDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxNQUFjO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDM0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ25EO2FBQU07WUFDSCxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztTQUNuQjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUc7WUFDcEIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCO1lBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNsQixDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxVQUFVO1FBQ04sSUFBSSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDaEUsUUFBUSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN4QixLQUFLLEdBQUc7b0JBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7b0JBQzFCLE1BQU07Z0JBQ1YsS0FBSyxHQUFHO29CQUNKLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUMxQixNQUFNO2dCQUNWLEtBQUssR0FBRztvQkFDSixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztvQkFDMUIsTUFBTTthQUNiO1lBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLFlBQVksQ0FBQyxDQUFDO1NBQzFFO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFxQjtRQUM1QixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakIsSUFBRyxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN4QixJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQ3ZDO1lBQ0QsT0FBTztTQUNUO1FBRUQsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLEVBQUUsSUFBSSxPQUFPLE1BQU0sQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzNFLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztTQUM1RTtRQUNELElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUN4RSxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7U0FDM0U7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLEVBQUU7WUFDN0YsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO1NBQzNFO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDM0MsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDOUM7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQzdFO0lBQ0wsQ0FBQztJQUNEOzs7O09BSUc7SUFDSSxjQUFjLENBQUMsS0FBYztRQUNoQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNJLGdCQUFnQixDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNJLGdCQUFnQixDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUFDLEtBQWM7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNJLGdCQUFnQixDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNuQyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUFDLEtBQWM7UUFDcEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQztJQUNyQyxDQUFDO0lBRUQsbUhBQW1IO0lBQ25ILDhEQUE4RDtJQUM5RCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3BCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxtSEFBbUg7SUFDbkgsOERBQThEO0lBQzlELGlCQUFpQixDQUFDLEVBQU87UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBS0QsbUhBQW1IO0lBQ25ILDhEQUE4RDtJQUN0RCxTQUFTLENBQUMsS0FBVTtRQUN4QixPQUFPLFFBQVEsQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFNBQVMsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQy9CLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQzthQUFNO1lBQ0gsT0FBTyxFQUFFLENBQUM7U0FDYjtJQUNMLENBQUM7aUlBM1dRLHNCQUFzQixrQkFzQ1Asd0JBQXdCO3FIQXRDdkMsc0JBQXNCLHVPQTBCWCxnQkFBZ0IsMkRBQ2hCLGdCQUFnQiw0Q0FDaEIsZ0JBQWdCLGtEQ3hEeEMsd3pNQXdJQTs7MkZENUdhLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDSSxnQkFBZ0IsaUJBR1gsaUJBQWlCLENBQUMsSUFBSTs7MEJBd0NoQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLHdCQUF3Qjs7MEJBQzNDLElBQUk7OzBCQUFJLFFBQVE7eUNBdEJaLE9BQU87c0JBQWYsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRWtDLFVBQVU7c0JBQWpELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxVQUFVO3NCQUFqRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPcHRpb25hbCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBTZWxmLFxuICAgIERvQ2hlY2ssXG4gICAgT25EZXN0cm95LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgT25DaGFuZ2VzLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IERZTkFNSUNfQ09NUE9ORU5UX0NPTkZJRyB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBFdWlEYXRlVGltZVBpY2tlckNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL2V1aS1kYXRlLXRpbWUtcGlja2VyLmNvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBFdWlUaW1lUGlja2VyIH0gZnJvbSAnLi9tb2RlbHMvZXVpLXRpbWVwaWNrZXIubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2V1aS10aW1lcGlja2VyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEV1aVRpbWVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBPbkNoYW5nZXMsIERvQ2hlY2ssIE9uRGVzdHJveSB7XG4gICAgaG91cnM6IG51bWJlcjtcbiAgICBtaW5zOiBudW1iZXI7XG4gICAgc2VjczogbnVtYmVyO1xuICAgIGlzRGF0ZXRpbWVwaWNrZXI6IGJvb2xlYW47XG4gICAgb25lSW5wdXRGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuICAgIG9uZUlucHV0SG91cnM6IHN0cmluZztcbiAgICBvbmVJbnB1dE1pbnM6IHN0cmluZztcbiAgICBvbmVJbnB1dFNlY3M6IHN0cmluZztcblxuICAgIHB1YmxpYyBob3Vyc1VwRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgaG91cnNEb3duRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgbWludXRlc1VwRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgbWludXRlc0Rvd25EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBzZWNvbmRzVXBEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHB1YmxpYyBzZWNvbmRzRG93bkRpc2FibGVkID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBlMmVBdHRyID0gJ2V1aS10aW1lcGlja2VyJztcblxuICAgIEBJbnB1dCgpIHRpbWVNYXNrID0gJ0hoOm0wJ1xuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gdGhpcy50aW1lTWFzaztcblxuICAgIEBJbnB1dCgpIHN0ZXBIb3VycyA9IDE7XG4gICAgQElucHV0KCkgc3RlcE1pbnV0ZXMgPSAxO1xuICAgIEBJbnB1dCgpIHN0ZXBTZWNvbmRzID0gMTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc3JlYWRPbmx5ID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzT25lSW5wdXRGaWVsZCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNTZWNvbmRzID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHByb3BhZ2F0ZWRWYWx1ZXM6IEV1aVRpbWVQaWNrZXIgPSB7XG4gICAgICAgIGhvdXJzOiBudWxsLFxuICAgICAgICBtaW5zOiBudWxsLFxuICAgICAgICBzZWNzOiB0aGlzLmhhc1NlY29uZHMgPyBudWxsIDogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEWU5BTUlDX0NPTVBPTkVOVF9DT05GSUcpIGNvbmZpZzogRXVpRGF0ZVRpbWVQaWNrZXJDb25maWcsXG4gICAgICAgIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaG91cnMgPSBjb25maWc/LmhvdXJzIHx8IDA7XG4gICAgICAgIHRoaXMubWlucyA9IGNvbmZpZz8ubWlucyB8fCAwO1xuICAgICAgICB0aGlzLnNlY3MgPSBjb25maWc/LnNlY3MgfHwgMDtcbiAgICAgICAgdGhpcy5pc0RhdGV0aW1lcGlja2VyID0gY29uZmlnPy5pc0RhdGV0aW1lcGlja2VyO1xuICAgICAgICB0aGlzLmhhc1NlY29uZHMgPSBjb25maWc/Lmhhc1NlY29uZHM7XG4gICAgICAgIHRoaXMuaXNPbmVJbnB1dEZpZWxkID0gY29uZmlnPy5pc09uZUlucHV0RmllbGQ7XG4gICAgICAgIHRoaXMuc3RlcEhvdXJzID0gY29uZmlnPyBjb25maWcuc3RlcEhvdXJzOiB0aGlzLnN0ZXBIb3VycztcbiAgICAgICAgdGhpcy5zdGVwTWludXRlcyA9IGNvbmZpZz8gY29uZmlnLnN0ZXBNaW51dGVzOiB0aGlzLnN0ZXBNaW51dGVzO1xuICAgICAgICB0aGlzLnN0ZXBTZWNvbmRzID0gY29uZmlnPyBjb25maWcuc3RlcFNlY29uZHM6IHRoaXMuc3RlcFNlY29uZHM7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gdGhpcy5ob3VycyA9PT0gMCB8fCBudWxsID8gJzAwJyA6IHRoaXMuaG91cnM7XG4gICAgICAgIGNvbnN0IG1pbnMgPSB0aGlzLm1pbnMgPT09IDAgfHwgbnVsbCA/ICcwMCcgOiB0aGlzLm1pbnM7XG4gICAgICAgIGNvbnN0IHNlY3MgPSB0aGlzLnNlY3MgPT09IDAgfHwgbnVsbCA/ICcwMCcgOiB0aGlzLnNlY3M7XG4gICAgICAgIHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5zZXRWYWx1ZSgnJyArIGhvdXJzICsgJzonICsgbWlucyArICc6JyArIHNlY3MpO1xuICAgICAgICB0aGlzLmNhbGxiYWNrRm4gPSBjb25maWc/LmNhbGxiYWNrRm4gfHwgdGhpcy5jYWxsYmFja0ZuO1xuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBcbiAgICAgICAgdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgLy8gc3BsaXRzIHRoZSBlbnRlcmVkIHRpbWUgaW50byAzIHBhcnRzIGJhc2VkIG9uIHRoZSA6IGFuZCBwcm9wYWdhdGVzIGJhY2sgdGhlIGNvcnJlc3BvbmRpbmcgcGFydHNcbiAgICAgICAgICAgIGlmKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgW3RoaXMub25lSW5wdXRIb3VycywgdGhpcy5vbmVJbnB1dE1pbnMsIHRoaXMub25lSW5wdXRTZWNzXSA9IHZhbHVlLnNwbGl0KCc6Jyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXR0ZWRob3VycyA9IHRoaXMub25lSW5wdXRIb3VycyA/IE51bWJlcih0aGlzLm9uZUlucHV0SG91cnMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdHRlZG1pbnMgPSB0aGlzLm9uZUlucHV0TWlucyA/IE51bWJlcih0aGlzLm9uZUlucHV0TWlucykgOiBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0dGVkc2VjcyA9IHRoaXMub25lSW5wdXRTZWNzID8gTnVtYmVyKHRoaXMub25lSW5wdXRTZWNzKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2Vjb25kcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Vyczogc3BsaXR0ZWRob3VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnM6IHNwbGl0dGVkbWlucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3M6IHNwbGl0dGVkc2VjcyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHNwbGl0dGVkaG91cnMsIHNwbGl0dGVkbWlucywgc3BsaXR0ZWRzZWNzKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBob3Vyczogc3BsaXR0ZWRob3VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnM6IHNwbGl0dGVkbWlucyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHNwbGl0dGVkaG91cnMsIHNwbGl0dGVkbWlucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzcGxpdHRlZGhvdXJzID09PSBudWxsICYmIHNwbGl0dGVkbWlucyA9PT0gbnVsbCAmJiBzcGxpdHRlZHNlY3MgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UobnVsbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5wcm9wYWdhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTp2b2lkIHtcbiAgICAgICAgaWYodGhpcy5pc09uZUlucHV0RmllbGQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1NlY29uZHMgJiYgY2hhbmdlcy5oYXNTZWNvbmRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lTWFzayA9ICdIaDptMDpzMCc7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9ICdIaDptMDpzMCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy50aW1lTWFzaykge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZU1hc2sgPSBjaGFuZ2VzLnRpbWVNYXNrLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gY2hhbmdlcy50aW1lTWFzay5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihjaGFuZ2VzLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGNoYW5nZXMucGxhY2Vob2xkZXIuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICAvLyBtYXJrcyB0aGUgaW5wdXQgY29udHJvbCBhcyB0b3VjaGVkL2ludmFsaWQgaWYgdGhlIGZvcm0gY29udHJvbCBpcyB0b3VjaGVkL2ludmFsaWRcbiAgICAgICAgICAgIHRoaXMuY29udHJvbD8udG91Y2hlZCA/IHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5tYXJrQXNUb3VjaGVkKCkgOiB0aGlzLm9uZUlucHV0Rm9ybUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2w/LmludmFsaWQgPyB0aGlzLm9uZUlucHV0Rm9ybUNvbnRyb2wuc2V0RXJyb3JzKHRoaXMuY29udHJvbC5lcnJvcnMpIDogdGhpcy5vbmVJbnB1dEZvcm1Db250cm9sLnNldEVycm9ycyhudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50cyBvciBkZWNyZW1lbnRzIGhvdXJzIGFjY29yZGluZyB0byB0aGUgc3RlcCBwYXJhbSBiZWluZyBwYXNzZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGVwIFRoZSBzdGVwIG51bWJlciB0aGF0IGhvdXJzIHdpbGwgaW5jcmVhc2Ugb3IgZGVjcmVhc2VcbiAgICAgKi9cbiAgICBjaGFuZ2VIb3VycyhzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCghdGhpcy5ob3Vyc1VwRGlzYWJsZWQgJiYgc3RlcCA+MCkgfHwgKCF0aGlzLmhvdXJzRG93bkRpc2FibGVkICYmIHN0ZXAgPDApKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSAoaXNOYU4odGhpcy5ob3VycykgPyAwIDogdGhpcy5ob3VycykgKyBzdGVwO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVIb3Vycyh2YWwudG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5jcmVtZW50cyBvciBkZWNyZW1lbnRzIG1pbnV0ZXMgYWNjb3JkaW5nIHRvIHRoZSBzdGVwIHBhcmFtIGJlaW5nIHBhc3NlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ZXAgVGhlIHN0ZXAgbnVtYmVyIHRoYXQgbWludXRlcyB3aWxsIGluY3JlYXNlIG9yIGRlY3JlYXNlXG4gICAgICovXG4gICAgY2hhbmdlTWludXRlcyhzdGVwOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCghdGhpcy5taW51dGVzVXBEaXNhYmxlZCAmJiBzdGVwID4wKSB8fCAoIXRoaXMubWludXRlc0Rvd25EaXNhYmxlZCAmJiBzdGVwIDwwKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gKGlzTmFOKHRoaXMubWlucykgPyAwIDogdGhpcy5taW5zKSArIHN0ZXA7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1pbnV0ZXModmFsLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluY3JlbWVudHMgb3IgZGVjcmVtZW50cyBzZWNvbmRzIGFjY29yZGluZyB0byB0aGUgc3RlcCBwYXJhbSBiZWluZyBwYXNzZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGVwIFRoZSBzdGVwIG51bWJlciB0aGF0IHNlY29uZHMgd2lsbCBpbmNyZWFzZSBvciBkZWNyZWFzZVxuICAgICAqL1xuICAgIGNoYW5nZVNlY29uZHMoc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICgoIXRoaXMuc2Vjb25kc1VwRGlzYWJsZWQgJiYgc3RlcCA+MCkgfHwgKCF0aGlzLnNlY29uZHNEb3duRGlzYWJsZWQgJiYgc3RlcCA8MCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IChpc05hTih0aGlzLnNlY3MpID8gMCA6IHRoaXMuc2VjcykgKyBzdGVwO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWNvbmRzKHZhbC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBpbnB1dCBmaWVsZCB3aGVuIGhvdXJzIGNoYW5nZSBhbmQgYWRkcyAyNGhvdXIgdmFsaWRhdGlvbiArIHByb3BhZ2F0ZXMgdGhlIHZhbHVlIGJhY2sgdG8gdGhlIGZvcm1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdWYWwgVGhlIG5ldyB2YWx1ZSB0aGF0IGhvdXJzIHdpbGwgaGF2ZVxuICAgICAqL1xuICAgIHVwZGF0ZUhvdXJzKG5ld1ZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVudGVyZWRIb3VyID0gdGhpcy50b0ludGVnZXIobmV3VmFsKTtcblxuICAgICAgICBpZiAoIWlzTmFOKGVudGVyZWRIb3VyKSkge1xuICAgICAgICAgICAgdGhpcy5ob3VycyA9IChlbnRlcmVkSG91ciA8IDAgPyAyNCArIGVudGVyZWRIb3VyIDogZW50ZXJlZEhvdXIpICUgMjQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhvdXJzID0gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFja0ZuKHRoaXMuaG91cnMsIHRoaXMubWlucywgdGhpcy5zZWNzKTtcblxuICAgICAgICB0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLnByb3BhZ2F0ZWRWYWx1ZXMsXG4gICAgICAgICAgICBob3VyczogdGhpcy5ob3VycyxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5wcm9wYWdhdGVkVmFsdWVzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgaW5wdXQgZmllbGQgd2hlbiBtaW51dGVzIGNoYW5nZSBhbmQgYWRkcyA2MG1pbnMgdmFsaWRhdGlvbiArIHByb3BhZ2F0ZXMgdGhlIHZhbHVlIGJhY2sgdG8gdGhlIGZvcm1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBuZXdWYWwgVGhlIG5ldyB2YWx1ZSB0aGF0IG1pbnV0ZXMgd2lsbCBoYXZlXG4gICAgICovXG4gICAgdXBkYXRlTWludXRlcyhuZXdWYWw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbnRlcmVkTWluID0gdGhpcy50b0ludGVnZXIobmV3VmFsKTtcblxuICAgICAgICBpZiAoIWlzTmFOKGVudGVyZWRNaW4pKSB7XG4gICAgICAgICAgICB0aGlzLm1pbnMgPSBlbnRlcmVkTWluICUgNjAgPCAwID8gNjAgKyAoZW50ZXJlZE1pbiAlIDYwKSA6IGVudGVyZWRNaW4gJSA2MDtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlSG91cnMoTWF0aC5mbG9vcihlbnRlcmVkTWluIC8gNjApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWlucyA9IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2tGbih0aGlzLmhvdXJzLCB0aGlzLm1pbnMsIHRoaXMuc2Vjcyk7XG5cbiAgICAgICAgdGhpcy5wcm9wYWdhdGVkVmFsdWVzID0ge1xuICAgICAgICAgICAgLi4udGhpcy5wcm9wYWdhdGVkVmFsdWVzLFxuICAgICAgICAgICAgbWluczogdGhpcy5taW5zLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBpbnB1dCBmaWVsZCB3aGVuIHNlY29uZHMgY2hhbmdlIGFuZCBhZGRzIDYwc2VjcyB2YWxpZGF0aW9uICsgcHJvcGFnYXRlcyB0aGUgdmFsdWUgYmFjayB0byB0aGUgZm9ybVxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1ZhbCBUaGUgbmV3IHZhbHVlIHRoYXQgc2Vjb25kcyB3aWxsIGhhdmVcbiAgICAgKi9cbiAgICB1cGRhdGVTZWNvbmRzKG5ld1ZhbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVudGVyZWRTZWMgPSB0aGlzLnRvSW50ZWdlcihuZXdWYWwpO1xuXG4gICAgICAgIGlmICghaXNOYU4oZW50ZXJlZFNlYykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VjcyA9IGVudGVyZWRTZWMgJSA2MCA8IDAgPyA2MCArIChlbnRlcmVkU2VjICUgNjApIDogZW50ZXJlZFNlYyAlIDYwO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VNaW51dGVzKE1hdGguZmxvb3IoZW50ZXJlZFNlYyAvIDYwKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlY3MgPSBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrRm4odGhpcy5ob3VycywgdGhpcy5taW5zLCB0aGlzLnNlY3MpO1xuXG4gICAgICAgIHRoaXMucHJvcGFnYXRlZFZhbHVlcyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMucHJvcGFnYXRlZFZhbHVlcyxcbiAgICAgICAgICAgIHNlY3M6IHRoaXMuc2VjcyxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnByb3BhZ2F0ZWRWYWx1ZXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdXRvZmlsbHMgbWlucyBhbmQgc2VjcyB3aXRoIDAwcyBpZiB0aGUgdXNlciB0YWJzIGFmdGVyIGVudGVyaW5nIGhvdXJzIGFuZCBtYXJrcyB0aGUgaW5wdXQgYXMgdG91Y2hlZFxuICAgICAqL1xuICAgIG9uRm9jdXNPdXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm9uZUlucHV0SG91cnMgJiYgIXRoaXMub25lSW5wdXRNaW5zICYmICF0aGlzLm9uZUlucHV0U2Vjcykge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLm9uZUlucHV0SG91cnMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICcwJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbmVJbnB1dEhvdXJzID0gJzAwJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnMSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25lSW5wdXRIb3VycyA9ICcwMSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJzInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uZUlucHV0SG91cnMgPSAnMDInO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5wYXRjaFZhbHVlKGAke3RoaXMub25lSW5wdXRIb3Vyc30gOiAwMCA6IDAwYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByb3BhZ2F0ZVRvdWNoZWQoKTtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlczogRXVpVGltZVBpY2tlcik6IHZvaWQge1xuICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICB0aGlzLmhvdXJzID0gbnVsbDtcbiAgICAgICAgICAgdGhpcy5taW5zID0gbnVsbDtcbiAgICAgICAgICAgdGhpcy5zZWNzID0gbnVsbDtcbiAgICAgICAgICAgaWYodGhpcy5pc09uZUlucHV0RmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMub25lSW5wdXRGb3JtQ29udHJvbC5zZXRWYWx1ZShudWxsKVxuICAgICAgICAgICB9XG4gICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICBpZiAodmFsdWVzLmhvdXJzIDwgMCB8fCB2YWx1ZXMuaG91cnMgPiAyMyB8fCB0eXBlb2YgdmFsdWVzLmhvdXJzICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdob3VycyBtdXN0IGJlIGRlZmluZWQgYW5kIGJlIGEgbnVtYmVyIHdpdGggcmFuZ2UgMC0yMycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZXMubWlucyA8IDAgfHwgdmFsdWVzLm1pbnMgPiA1OSB8fCB0eXBlb2YgdmFsdWVzLm1pbnMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pbnMgbXVzdCBiZSBkZWZpbmVkIGFuZCBiZSBhIG51bWJlciB3aXRoIHJhbmdlIDAtNTknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYXNTZWNvbmRzICYmICh2YWx1ZXMuc2VjcyA8IDAgfHwgdmFsdWVzLnNlY3MgPiA1OSB8fCB0eXBlb2YgdmFsdWVzLnNlY3MgIT09ICdudW1iZXInKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWNzIG11c3QgYmUgZGVmaW5lZCBhbmQgYmUgYSBudW1iZXIgd2l0aCByYW5nZSAwLTU5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUhvdXJzKHZhbHVlcy5ob3Vycy50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy51cGRhdGVNaW51dGVzKHZhbHVlcy5taW5zLnRvU3RyaW5nKCkpO1xuICAgICAgICBpZiAodmFsdWVzLnNlY3MpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2Vjb25kcyh2YWx1ZXMuc2Vjcy50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc09uZUlucHV0RmllbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGhvdXJzID0gdGhpcy5wYWROdW1iZXIodmFsdWVzLmhvdXJzKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbnMgPSB0aGlzLnBhZE51bWJlcih2YWx1ZXMubWlucyk7XG4gICAgICAgICAgICBjb25zdCBzZWNzID0gdGhpcy5wYWROdW1iZXIodmFsdWVzLnNlY3MpO1xuXG4gICAgICAgICAgICB0aGlzLm9uZUlucHV0Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSgnJyArIGhvdXJzICsgJzonICsgbWlucyArICc6JyArIHNlY3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBob3VyIHVwIGluY3JlbWVudGFsIHdoZW4gbWF4IHRpbWUgcmFuZ2UgaXMgcmVhY2hlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBib29sZWFuIHZhbHVlIHRoYXQgZW5hYmxlcyB0aGUgZmVhdHVyZVxuICAgICAqL1xuICAgIHB1YmxpYyBob3Vyc1VwRGlzYWJsZShzdGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmhvdXJzVXBEaXNhYmxlZCA9IHN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgaG91ciBkb3duIGRlY3JlbWVudGFsIHdoZW4gbWluIHRpbWUgcmFuZ2UgaXMgcmVhY2hlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBib29sZWFuIHZhbHVlIHRoYXQgZW5hYmxlcyB0aGUgZmVhdHVyZVxuICAgICAqL1xuICAgIHB1YmxpYyBob3Vyc0Rvd25EaXNhYmxlKHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG91cnNEb3duRGlzYWJsZWQgPSBzdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIG1pbnV0ZXMgdXAgaW5jcmVtZW50YWwgd2hlbiBtYXggdGltZSByYW5nZSBpcyByZWFjaGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc3RhdGUgVGhlIGJvb2xlYW4gdmFsdWUgdGhhdCBlbmFibGVzIHRoZSBmZWF0dXJlXG4gICAgICovXG4gICAgcHVibGljIG1pbnV0ZXNVcERpc2FibGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5taW51dGVzVXBEaXNhYmxlZCA9IHN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgbWludXRlcyBkb3duIGRlY3JlbWVudGFsIHdoZW4gbWluIHRpbWUgcmFuZ2UgaXMgcmVhY2hlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBib29sZWFuIHZhbHVlIHRoYXQgZW5hYmxlcyB0aGUgZmVhdHVyZVxuICAgICAqL1xuICAgIHB1YmxpYyBtaW51dGVzRG93bkRpc2FibGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5taW51dGVzRG93bkRpc2FibGVkID0gc3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRoZSBzZWNvbmRzIHVwIGluY3JlbWVudGFsIHdoZW4gbWF4IHRpbWUgcmFuZ2UgaXMgcmVhY2hlZFxuICAgICAqXG4gICAgICogQHBhcmFtIHN0YXRlIFRoZSBib29sZWFuIHZhbHVlIHRoYXQgZW5hYmxlcyB0aGUgZmVhdHVyZVxuICAgICAqL1xuICAgIHB1YmxpYyBzZWNvbmRzVXBEaXNhYmxlKHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Vjb25kc1VwRGlzYWJsZWQgPSBzdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIHNlY29uZHMgZG93biBkZWNyZW1lbnRhbCB3aGVuIG1pbiB0aW1lIHJhbmdlIGlzIHJlYWNoZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGF0ZSBUaGUgYm9vbGVhbiB2YWx1ZSB0aGF0IGVuYWJsZXMgdGhlIGZlYXR1cmVcbiAgICAgKi9cbiAgICBwdWJsaWMgc2Vjb25kc0Rvd25EaXNhYmxlKHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Vjb25kc0Rvd25EaXNhYmxlZCA9IHN0YXRlO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8vIFRPRE86IGZpbmQgdGhlIGNvcnJlY3QgdHlwZSBvciB0dXJuIGludG8gYSBnZW5lcmljLCBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL2dlbmVyaWNzLmh0bWxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICAgIHByaXZhdGUgY2FsbGJhY2tGbjogKGhvdXJzOiBudW1iZXIsIG1pbnM6IG51bWJlciwgc2Vjcz86IG51bWJlcikgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJpdmF0ZSB0b0ludGVnZXIodmFsdWU6IGFueSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChgJHt2YWx1ZX1gLCAxMCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFkcyBsZWFkaW5nIHplcm8gdG8gdGhlIHByb3ZpZGVkIG51bWJlciB3aGVuIGlzT25lSW5wdXRGaWVsZFxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBhZGQgbGVhZGluZyB6ZXJvIHRvXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHBhZE51bWJlcih2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFpc05hTih0aGlzLnRvSW50ZWdlcih2YWx1ZSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gYDAke3ZhbHVlfWAuc2xpY2UoLTIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZmluZCB0aGUgY29ycmVjdCB0eXBlIG9yIHR1cm4gaW50byBhIGdlbmVyaWMsIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvZ2VuZXJpY3MuaHRtbFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJpdmF0ZSBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KTogdm9pZCA9PiB7LyogZW1wdHkgKi99O1xuXG4gICAgcHJpdmF0ZSBwcm9wYWdhdGVUb3VjaGVkID0gKCk6IHZvaWQgPT4gey8qIGVtcHR5ICovfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJldWktdGltZXBpY2tlclwiIFtjbGFzcy5ldWktdGltZXBpY2tlci0tY2VudGVyZWRdPVwiaXNEYXRldGltZXBpY2tlclwiIGF0dHIuZGF0YS1lMmU9XCJ7eyBlMmVBdHRyIH19XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzT25lSW5wdXRGaWVsZDsgZWxzZSBtdWx0aXBsZUlucHV0c1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIFtjbGFzcy5ldWktdGltZXBpY2tlcl9faW5wdXQtLW9uZS1maWVsZF09XCJpc0RhdGV0aW1lcGlja2VyXCJcbiAgICAgICAgICAgIGV1aUlucHV0VGV4dFxuICAgICAgICAgICAgbWFzaz1cInt7IHRpbWVNYXNrIH19XCJcbiAgICAgICAgICAgIFtsZWFkWmVyb0RhdGVUaW1lXT1cInRydWVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwib25lSW5wdXRGb3JtQ29udHJvbC52YWx1ZT9vbmVJbnB1dEZvcm1Db250cm9sLnZhbHVlOidObyB0aW1lIHZhbHVlJ1wiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwib25lSW5wdXRGb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAoZm9jdXNvdXQpPVwib25Gb2N1c091dCgpXCJcbiAgICAgICAgICAgIFtkcm9wU3BlY2lhbENoYXJhY3RlcnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzcmVhZE9ubHlcIiAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLXRlbXBsYXRlICNtdWx0aXBsZUlucHV0cz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNyZWFkT25seVwiIGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX2NoZXZyb24gZXVpLXRpbWVwaWNrZXJfX2hvdXJzLXVwXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlSG91cnMoc3RlcEhvdXJzKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy50aW1lLWNvbnRyb2wtLWRpc2FibGVkXT1cImhvdXJzVXBEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJldWktY2hldnJvbi11cFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cImdyZXktNzVcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibFwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiSW5jcmVhc2UgSG91cnNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI2lucHV0cmVmaG91cnNcbiAgICAgICAgICAgICAgICBldWlJbnB1dE51bWJlclxuICAgICAgICAgICAgICAgIFtsZWFkaW5nWmVyb109XCIyXCJcbiAgICAgICAgICAgICAgICBbZGlnaXRzXT1cIjJcIlxuICAgICAgICAgICAgICAgIFtmcmFjdGlvbkRpZ2l0c109XCIwXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS10aW1lcGlja2VyX19pbnB1dFwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJISFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaG91cnNcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUhvdXJzKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJpc3JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiSG91cnNcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLkFycm93VXApPVwiY2hhbmdlSG91cnMoc3RlcEhvdXJzKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLkFycm93RG93bik9XCJjaGFuZ2VIb3Vycygtc3RlcEhvdXJzKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAvPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc3JlYWRPbmx5XCIgY2xhc3M9XCJldWktdGltZXBpY2tlcl9fY2hldnJvbiBldWktdGltZXBpY2tlcl9faG91cnMtZG93blwiPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZUhvdXJzKC1zdGVwSG91cnMpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRpbWUtY29udHJvbC0tZGlzYWJsZWRdPVwiaG91cnNEb3duRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZXVpLWNoZXZyb24tZG93blwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cImdyZXktNzVcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibFwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVjcmVhc2UgSG91cnNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19zcGFjZXJcIj46PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJldWktdGltZXBpY2tlcl9faW5wdXQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzcmVhZE9ubHlcIiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19jaGV2cm9uIGV1aS10aW1lcGlja2VyX19taW51dGVzLXVwXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlTWludXRlcyhzdGVwTWludXRlcylcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGltZS1jb250cm9sLS1kaXNhYmxlZF09XCJtaW51dGVzVXBEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJldWktY2hldnJvbi11cFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cImdyZXktNzVcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibFwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiSW5jcmVhc2UgTWludXRlc1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAjaW5wdXRyZWZtaW5zXG4gICAgICAgICAgICAgICAgZXVpSW5wdXROdW1iZXJcbiAgICAgICAgICAgICAgICBbbGVhZGluZ1plcm9dPVwiMlwiXG4gICAgICAgICAgICAgICAgW2RpZ2l0c109XCIyXCJcbiAgICAgICAgICAgICAgICBbZnJhY3Rpb25EaWdpdHNdPVwiMFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdGltZXBpY2tlcl9faW5wdXRcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTU1cIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm1pbnNcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZU1pbnV0ZXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImlzcmVhZE9ubHlcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJNaW51dGVzXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5BcnJvd1VwKT1cImNoYW5nZU1pbnV0ZXMoc3RlcE1pbnV0ZXMpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uQXJyb3dEb3duKT1cImNoYW5nZU1pbnV0ZXMoLXN0ZXBNaW51dGVzKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAvPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc3JlYWRPbmx5XCIgY2xhc3M9XCJldWktdGltZXBpY2tlcl9fY2hldnJvbiBldWktdGltZXBpY2tlcl9fbWludXRlcy1kb3duXCI+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlTWludXRlcygtc3RlcE1pbnV0ZXMpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRpbWUtY29udHJvbC0tZGlzYWJsZWRdPVwibWludXRlc0Rvd25EaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJldWktY2hldnJvbi1kb3duXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwiZ3JleS03NVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJEZWNyZWFzZSBNaW51dGVzXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNTZWNvbmRzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLXRpbWVwaWNrZXJfX3NwYWNlclwiPjo8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktdGltZXBpY2tlcl9faW5wdXQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFpc3JlYWRPbmx5XCIgY2xhc3M9XCJldWktdGltZXBpY2tlcl9fY2hldnJvbiBldWktdGltZXBpY2tlcl9fc2Vjb25kcy11cFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlU2Vjb25kcyhzdGVwU2Vjb25kcylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnRpbWUtY29udHJvbC0tZGlzYWJsZWRdPVwic2Vjb25kc1VwRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImV1aS1jaGV2cm9uLXVwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cImdyZXktNzVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cImxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiSW5jcmVhc2Ugc2Vjb25kc1wiPlxuICAgICAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgI2lucHV0cmVmc2Vjc1xuICAgICAgICAgICAgICAgICAgICBldWlJbnB1dE51bWJlclxuICAgICAgICAgICAgICAgICAgICBbbGVhZGluZ1plcm9dPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIFtkaWdpdHNdPVwiMlwiXG4gICAgICAgICAgICAgICAgICAgIFtmcmFjdGlvbkRpZ2l0c109XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktdGltZXBpY2tlcl9faW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNTXCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2Vjc1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZVNlY29uZHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJpc3JlYWRPbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlNlY29uZHNcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5BcnJvd1VwKT1cImNoYW5nZVNlY29uZHMoc3RlcFNlY29uZHMpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLkFycm93RG93bik9XCJjaGFuZ2VTZWNvbmRzKC1zdGVwU2Vjb25kcyk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzcmVhZE9ubHlcIiBjbGFzcz1cImV1aS10aW1lcGlja2VyX19jaGV2cm9uIGV1aS10aW1lcGlja2VyX19zZWNvbmRzLWRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNoYW5nZVNlY29uZHMoLXN0ZXBTZWNvbmRzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudGltZS1jb250cm9sLS1kaXNhYmxlZF09XCJzZWNvbmRzRG93bkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJldWktY2hldnJvbi1kb3duXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cImdyZXktNzVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cImxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVjcmVhc2Ugc2Vjb25kc1wiPlxuICAgICAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"eui-timepicker.component.d.ts","sourceRoot":"","sources":["../../eui-timepicker/eui-timepicker.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,MAAM,EAIN,OAAO,EACP,SAAS,EACT,aAAa,EACb,SAAS,EAEZ,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAK9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;;AAE9D,qBAMa,sBAAuB,YAAW,oBAAoB,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS;IAuC9E,OAAO,CAAC,OAAO;IAtCvC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,mBAAqB;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IAEd,eAAe,UAAS;IACxB,iBAAiB,UAAS;IAC1B,iBAAiB,UAAS;IAC1B,mBAAmB,UAAS;IAC5B,iBAAiB,UAAS;IAC1B,mBAAmB,UAAS;IAE1B,OAAO,SAAoB;IAE3B,QAAQ,SAAU;IAClB,WAAW,SAAiB;IAE5B,SAAS,SAAK;IACd,WAAW,SAAK;IAChB,WAAW,SAAK;IAEe,UAAU,UAAS;IACnB,eAAe,UAAS;IACxB,UAAU,UAAS;IAE3D,OAAO,CAAC,gBAAgB,CAItB;IACF,OAAO,CAAC,QAAQ,CAA4C;gBAGV,MAAM,EAAE,uBAAuB,EACjD,OAAO,EAAE,SAAS;IAsBlD,QAAQ,IAAI,IAAI;IAkChB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAE,IAAI;IAgBxC,SAAS,IAAI,IAAI;IAQjB,WAAW,IAAI,IAAI;IAInB;;;;OAIG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM/B;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMjC;;;;OAIG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAMjC;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAiBjC;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAkBnC;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAmBnC;;OAEG;IACH,UAAU,IAAI,IAAI;IAmBlB,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;
|
1
|
+
{"version":3,"file":"eui-timepicker.component.d.ts","sourceRoot":"","sources":["../../eui-timepicker/eui-timepicker.component.ts"],"names":[],"mappings":"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"}
|
@@ -101,7 +101,7 @@ class EuiTimepickerComponent {
|
|
101
101
|
}
|
102
102
|
ngOnChanges(changes) {
|
103
103
|
if (this.isOneInputField) {
|
104
|
-
if (changes.hasSeconds) {
|
104
|
+
if (this.hasSeconds && changes.hasSeconds) {
|
105
105
|
this.timeMask = 'Hh:m0:s0';
|
106
106
|
this.placeholder = 'Hh:m0:s0';
|
107
107
|
}
|
@@ -131,7 +131,7 @@ class EuiTimepickerComponent {
|
|
131
131
|
* @param step The step number that hours will increase or decrease
|
132
132
|
*/
|
133
133
|
changeHours(step) {
|
134
|
-
if (!this.hoursUpDisabled || !this.hoursDownDisabled) {
|
134
|
+
if ((!this.hoursUpDisabled && step > 0) || (!this.hoursDownDisabled && step < 0)) {
|
135
135
|
const val = (isNaN(this.hours) ? 0 : this.hours) + step;
|
136
136
|
this.updateHours(val.toString());
|
137
137
|
}
|
@@ -142,7 +142,7 @@ class EuiTimepickerComponent {
|
|
142
142
|
* @param step The step number that minutes will increase or decrease
|
143
143
|
*/
|
144
144
|
changeMinutes(step) {
|
145
|
-
if (!this.minutesUpDisabled || !this.minutesDownDisabled) {
|
145
|
+
if ((!this.minutesUpDisabled && step > 0) || (!this.minutesDownDisabled && step < 0)) {
|
146
146
|
const val = (isNaN(this.mins) ? 0 : this.mins) + step;
|
147
147
|
this.updateMinutes(val.toString());
|
148
148
|
}
|
@@ -153,7 +153,7 @@ class EuiTimepickerComponent {
|
|
153
153
|
* @param step The step number that seconds will increase or decrease
|
154
154
|
*/
|
155
155
|
changeSeconds(step) {
|
156
|
-
if (!this.secondsUpDisabled || !this.secondsDownDisabled) {
|
156
|
+
if ((!this.secondsUpDisabled && step > 0) || (!this.secondsDownDisabled && step < 0)) {
|
157
157
|
const val = (isNaN(this.secs) ? 0 : this.secs) + step;
|
158
158
|
this.updateSeconds(val.toString());
|
159
159
|
}
|
@@ -250,9 +250,6 @@ class EuiTimepickerComponent {
|
|
250
250
|
}
|
251
251
|
return;
|
252
252
|
}
|
253
|
-
if (typeof values !== 'object' || Array.isArray(values)) {
|
254
|
-
throw new Error('value must be an EuiTimePicker Object');
|
255
|
-
}
|
256
253
|
if (values.hours < 0 || values.hours > 23 || typeof values.hours !== 'number') {
|
257
254
|
throw new Error('hours must be defined and be a number with range 0-23');
|
258
255
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"eui-components-eui-timepicker.mjs","sources":["../../eui-timepicker/eui-timepicker.component.ts","../../eui-timepicker/eui-timepicker.component.html","../../eui-timepicker/eui-timepicker.module.ts","../../eui-timepicker/eui-components-eui-timepicker.ts"],"sourcesContent":["import {\n Component,\n Inject,\n Input,\n OnInit,\n Optional,\n ViewEncapsulation,\n Self,\n DoCheck,\n OnDestroy,\n SimpleChanges,\n OnChanges,\n booleanAttribute,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormControl } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { DYNAMIC_COMPONENT_CONFIG } from '@eui/core';\nimport { EuiDateTimePickerConfig } from './models/eui-date-time-picker.config.model';\nimport { EuiTimePicker } from './models/eui-timepicker.model';\n\n@Component({\n selector: 'eui-timepicker',\n templateUrl: './eui-timepicker.component.html',\n styleUrls: ['./styles/_index.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class EuiTimepickerComponent implements ControlValueAccessor, OnInit, OnChanges, DoCheck, OnDestroy {\n hours: number;\n mins: number;\n secs: number;\n isDatetimepicker: boolean;\n oneInputFormControl = new FormControl();\n oneInputHours: string;\n oneInputMins: string;\n oneInputSecs: string;\n\n public hoursUpDisabled = false;\n public hoursDownDisabled = false;\n public minutesUpDisabled = false;\n public minutesDownDisabled = false;\n public secondsUpDisabled = false;\n public secondsDownDisabled = false;\n\n @Input() e2eAttr = 'eui-timepicker';\n\n @Input() timeMask = 'Hh:m0'\n @Input() placeholder = this.timeMask;\n\n @Input() stepHours = 1;\n @Input() stepMinutes = 1;\n @Input() stepSeconds = 1;\n\n @Input({ transform: booleanAttribute }) isreadOnly = false;\n @Input({ transform: booleanAttribute }) isOneInputField = false;\n @Input({ transform: booleanAttribute }) hasSeconds = false;\n\n private propagatedValues: EuiTimePicker = {\n hours: null,\n mins: null,\n secs: this.hasSeconds ? null : undefined,\n };\n private destroy$: Subject<boolean> = new Subject<boolean>();\n\n constructor(\n @Optional() @Inject(DYNAMIC_COMPONENT_CONFIG) config: EuiDateTimePickerConfig,\n @Self() @Optional() private control: NgControl,\n ) {\n this.hours = config?.hours || 0;\n this.mins = config?.mins || 0;\n this.secs = config?.secs || 0;\n this.isDatetimepicker = config?.isDatetimepicker;\n this.hasSeconds = config?.hasSeconds;\n this.isOneInputField = config?.isOneInputField;\n this.stepHours = config? config.stepHours: this.stepHours;\n this.stepMinutes = config? config.stepMinutes: this.stepMinutes;\n this.stepSeconds = config? config.stepSeconds: this.stepSeconds;\n const hours = this.hours === 0 || null ? '00' : this.hours;\n const mins = this.mins === 0 || null ? '00' : this.mins;\n const secs = this.secs === 0 || null ? '00' : this.secs;\n this.oneInputFormControl.setValue('' + hours + ':' + mins + ':' + secs);\n this.callbackFn = config?.callbackFn || this.callbackFn;\n\n if (this.control) {\n this.control.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n \n this.oneInputFormControl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {\n // splits the entered time into 3 parts based on the : and propagates back the corresponding parts\n if(value) {\n [this.oneInputHours, this.oneInputMins, this.oneInputSecs] = value.split(':');\n const splittedhours = this.oneInputHours ? Number(this.oneInputHours) : null;\n const splittedmins = this.oneInputMins ? Number(this.oneInputMins) : null;\n const splittedsecs = this.oneInputSecs ? Number(this.oneInputSecs) : null;\n if (this.hasSeconds) {\n this.propagatedValues = {\n ...this.propagatedValues,\n hours: splittedhours,\n mins: splittedmins,\n secs: splittedsecs,\n };\n this.callbackFn(splittedhours, splittedmins, splittedsecs);\n } else {\n this.propagatedValues = {\n ...this.propagatedValues,\n hours: splittedhours,\n mins: splittedmins,\n };\n this.callbackFn(splittedhours, splittedmins);\n }\n if (splittedhours === null && splittedmins === null && splittedsecs === null) {\n this.propagateChange(null);\n } else {\n this.propagateChange(this.propagatedValues);\n }\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges):void {\n if(this.isOneInputField) {\n if (changes.hasSeconds) {\n this.timeMask = 'Hh:m0:s0';\n this.placeholder = 'Hh:m0:s0';\n }\n if (changes.timeMask) {\n this.timeMask = changes.timeMask.currentValue;\n this.placeholder = changes.timeMask.currentValue;\n }\n if(changes.placeholder) {\n this.placeholder = changes.placeholder.currentValue;\n }\n }\n }\n\n ngDoCheck(): void {\n if (this.control) {\n // marks the input control as touched/invalid if the form control is touched/invalid\n this.control?.touched ? this.oneInputFormControl.markAsTouched() : this.oneInputFormControl.markAsUntouched();\n this.control?.invalid ? this.oneInputFormControl.setErrors(this.control.errors) : this.oneInputFormControl.setErrors(null);\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n /**\n * Increments or decrements hours according to the step param being passed\n *\n * @param step The step number that hours will increase or decrease\n */\n changeHours(step: number): void {\n if (!this.hoursUpDisabled || !this.hoursDownDisabled) {\n const val = (isNaN(this.hours) ? 0 : this.hours) + step;\n this.updateHours(val.toString());\n }\n }\n /**\n * Increments or decrements minutes according to the step param being passed\n *\n * @param step The step number that minutes will increase or decrease\n */\n changeMinutes(step: number): void {\n if (!this.minutesUpDisabled || !this.minutesDownDisabled) {\n const val = (isNaN(this.mins) ? 0 : this.mins) + step;\n this.updateMinutes(val.toString());\n }\n }\n /**\n * Increments or decrements seconds according to the step param being passed\n *\n * @param step The step number that seconds will increase or decrease\n */\n changeSeconds(step: number): void {\n if (!this.secondsUpDisabled || !this.secondsDownDisabled) {\n const val = (isNaN(this.secs) ? 0 : this.secs) + step;\n this.updateSeconds(val.toString());\n }\n }\n /**\n * Updates the input field when hours change and adds 24hour validation + propagates the value back to the form\n *\n * @param newVal The new value that hours will have\n */\n updateHours(newVal: string): void {\n const enteredHour = this.toInteger(newVal);\n\n if (!isNaN(enteredHour)) {\n this.hours = (enteredHour < 0 ? 24 + enteredHour : enteredHour) % 24;\n } else {\n this.hours = NaN;\n }\n\n this.callbackFn(this.hours, this.mins, this.secs);\n\n this.propagatedValues = {\n ...this.propagatedValues,\n hours: this.hours,\n };\n this.propagateChange(this.propagatedValues);\n }\n /**\n * Updates the input field when minutes change and adds 60mins validation + propagates the value back to the form\n *\n * @param newVal The new value that minutes will have\n */\n updateMinutes(newVal: string): void {\n const enteredMin = this.toInteger(newVal);\n\n if (!isNaN(enteredMin)) {\n this.mins = enteredMin % 60 < 0 ? 60 + (enteredMin % 60) : enteredMin % 60;\n this.changeHours(Math.floor(enteredMin / 60));\n } else {\n this.mins = NaN;\n }\n\n this.callbackFn(this.hours, this.mins, this.secs);\n\n this.propagatedValues = {\n ...this.propagatedValues,\n mins: this.mins,\n };\n this.propagateChange(this.propagatedValues);\n }\n /**\n * Updates the input field when seconds change and adds 60secs validation + propagates the value back to the form\n *\n * @param newVal The new value that seconds will have\n */\n updateSeconds(newVal: string): void {\n const enteredSec = this.toInteger(newVal);\n\n if (!isNaN(enteredSec)) {\n this.secs = enteredSec % 60 < 0 ? 60 + (enteredSec % 60) : enteredSec % 60;\n this.changeMinutes(Math.floor(enteredSec / 60));\n } else {\n this.secs = NaN;\n }\n\n this.callbackFn(this.hours, this.mins, this.secs);\n\n this.propagatedValues = {\n ...this.propagatedValues,\n secs: this.secs,\n };\n\n this.propagateChange(this.propagatedValues);\n }\n /**\n * Autofills mins and secs with 00s if the user tabs after entering hours and marks the input as touched\n */\n onFocusOut(): void {\n if (this.oneInputHours && !this.oneInputMins && !this.oneInputSecs) {\n switch (this.oneInputHours) {\n case '0':\n this.oneInputHours = '00';\n break;\n case '1':\n this.oneInputHours = '01';\n break;\n case '2':\n this.oneInputHours = '02';\n break;\n }\n this.oneInputFormControl.patchValue(`${this.oneInputHours} : 00 : 00`);\n }\n\n this.propagateTouched();\n }\n\n writeValue(values: EuiTimePicker): void {\n if (!values) {\n this.hours = null;\n this.mins = null;\n this.secs = null;\n if(this.isOneInputField) {\n this.oneInputFormControl.setValue(null)\n }\n return;\n }\n if (typeof values !== 'object' || Array.isArray(values)) {\n throw new Error('value must be an EuiTimePicker Object');\n }\n if (values.hours < 0 || values.hours > 23 || typeof values.hours !== 'number') {\n throw new Error('hours must be defined and be a number with range 0-23');\n }\n if (values.mins < 0 || values.mins > 59 || typeof values.mins !== 'number') {\n throw new Error('mins must be defined and be a number with range 0-59');\n }\n if (this.hasSeconds && (values.secs < 0 || values.secs > 59 || typeof values.secs !== 'number')) {\n throw new Error('secs must be defined and be a number with range 0-59');\n }\n\n this.updateHours(values.hours.toString());\n this.updateMinutes(values.mins.toString());\n if (values.secs) {\n this.updateSeconds(values.secs.toString());\n }\n if (this.isOneInputField) {\n const hours = this.padNumber(values.hours);\n const mins = this.padNumber(values.mins);\n const secs = this.padNumber(values.secs);\n\n this.oneInputFormControl.patchValue('' + hours + ':' + mins + ':' + secs);\n }\n }\n /**\n * Disables the hour up incremental when max time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public hoursUpDisable(state: boolean): void {\n this.hoursUpDisabled = state;\n }\n /**\n * Disables the hour down decremental when min time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public hoursDownDisable(state: boolean): void {\n this.hoursDownDisabled = state;\n }\n /**\n * Disables the minutes up incremental when max time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public minutesUpDisable(state: boolean): void {\n this.minutesUpDisabled = state;\n }\n /**\n * Disables the minutes down decremental when min time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public minutesDownDisable(state: boolean): void {\n this.minutesDownDisabled = state;\n }\n /**\n * Disables the seconds up incremental when max time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public secondsUpDisable(state: boolean): void {\n this.secondsUpDisabled = state;\n }\n /**\n * Disables the seconds down decremental when min time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public secondsDownDisable(state: boolean): void {\n this.secondsDownDisabled = state;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: any): void {\n this.propagateTouched = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private callbackFn: (hours: number, mins: number, secs?: number) => void = () => {};\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private toInteger(value: any): number {\n return parseInt(`${value}`, 10);\n }\n\n /**\n * Pads leading zero to the provided number when isOneInputField\n *\n * @param value The value to add leading zero to\n * @private\n */\n private padNumber(value: number): string {\n if (!isNaN(this.toInteger(value))) {\n return `0${value}`.slice(-2);\n } else {\n return '';\n }\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private propagateChange = (_: any): void => {/* empty */};\n\n private propagateTouched = (): void => {/* empty */};\n}\n","<div class=\"eui-timepicker\" [class.eui-timepicker--centered]=\"isDatetimepicker\" attr.data-e2e=\"{{ e2eAttr }}\">\n <ng-container *ngIf=\"isOneInputField; else multipleInputs\">\n <input\n [class.eui-timepicker__input--one-field]=\"isDatetimepicker\"\n euiInputText\n mask=\"{{ timeMask }}\"\n [leadZeroDateTime]=\"true\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"oneInputFormControl.value?oneInputFormControl.value:'No time value'\"\n [formControl]=\"oneInputFormControl\"\n (focusout)=\"onFocusOut()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isreadOnly\" />\n </ng-container>\n\n <ng-template #multipleInputs>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-up\">\n <eui-icon-svg\n (click)=\"changeHours(stepHours)\"\n [class.time-control--disabled]=\"hoursUpDisabled\"\n icon=\"eui-chevron-up\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Hours\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefhours\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"HH\"\n [ngModel]=\"hours\"\n (ngModelChange)=\"updateHours($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Hours\"\n (keydown.ArrowUp)=\"changeHours(stepHours); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeHours(-stepHours); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-down\">\n <eui-icon-svg\n (click)=\"changeHours(-stepHours)\"\n [class.time-control--disabled]=\"hoursDownDisabled\"\n icon=\"eui-chevron-down\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Hours\">\n </eui-icon-svg>\n </div>\n </div>\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-up\">\n <eui-icon-svg\n (click)=\"changeMinutes(stepMinutes)\"\n [class.time-control--disabled]=\"minutesUpDisabled\"\n icon=\"eui-chevron-up\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Minutes\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefmins\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"MM\"\n [ngModel]=\"mins\"\n (ngModelChange)=\"updateMinutes($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Minutes\"\n (keydown.ArrowUp)=\"changeMinutes(stepMinutes); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeMinutes(-stepMinutes); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-down\">\n <eui-icon-svg\n (click)=\"changeMinutes(-stepMinutes)\"\n [class.time-control--disabled]=\"minutesDownDisabled\"\n icon=\"eui-chevron-down\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Minutes\">\n </eui-icon-svg>\n </div>\n </div>\n <ng-container *ngIf=\"hasSeconds\">\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-up\">\n <eui-icon-svg\n (click)=\"changeSeconds(stepSeconds)\"\n [class.time-control--disabled]=\"secondsUpDisabled\"\n icon=\"eui-chevron-up\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase seconds\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefsecs\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"SS\"\n [ngModel]=\"secs\"\n (ngModelChange)=\"updateSeconds($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Seconds\"\n (keydown.ArrowUp)=\"changeSeconds(stepSeconds); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeSeconds(-stepSeconds); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-down\">\n <eui-icon-svg\n (click)=\"changeSeconds(-stepSeconds)\"\n [class.time-control--disabled]=\"secondsDownDisabled\"\n icon=\"eui-chevron-down\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease seconds\">\n </eui-icon-svg>\n </div>\n </div>\n </ng-container>\n </ng-template>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgxMaskDirective, provideNgxMask, provideEnvironmentNgxMask } from 'ngx-mask';\n\nimport { EuiTimepickerComponent } from './eui-timepicker.component';\nimport { EuiInputNumberDirectiveModule } from '@eui/components/eui-input-number';\nimport { EuiInputTextModule } from '@eui/components/eui-input-text';\nimport { EuiIconModule } from '@eui/components/eui-icon';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n EuiInputNumberDirectiveModule,\n EuiInputTextModule,\n EuiIconModule,\n NgxMaskDirective,\n ],\n providers: [provideNgxMask(), provideEnvironmentNgxMask()],\n exports: [EuiTimepickerComponent],\n declarations: [EuiTimepickerComponent],\n})\nexport class EuiTimepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"eui-components-eui-timepicker.mjs","sources":["../../eui-timepicker/eui-timepicker.component.ts","../../eui-timepicker/eui-timepicker.component.html","../../eui-timepicker/eui-timepicker.module.ts","../../eui-timepicker/eui-components-eui-timepicker.ts"],"sourcesContent":["import {\n Component,\n Inject,\n Input,\n OnInit,\n Optional,\n ViewEncapsulation,\n Self,\n DoCheck,\n OnDestroy,\n SimpleChanges,\n OnChanges,\n booleanAttribute,\n} from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormControl } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { DYNAMIC_COMPONENT_CONFIG } from '@eui/core';\nimport { EuiDateTimePickerConfig } from './models/eui-date-time-picker.config.model';\nimport { EuiTimePicker } from './models/eui-timepicker.model';\n\n@Component({\n selector: 'eui-timepicker',\n templateUrl: './eui-timepicker.component.html',\n styleUrls: ['./styles/_index.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class EuiTimepickerComponent implements ControlValueAccessor, OnInit, OnChanges, DoCheck, OnDestroy {\n hours: number;\n mins: number;\n secs: number;\n isDatetimepicker: boolean;\n oneInputFormControl = new FormControl();\n oneInputHours: string;\n oneInputMins: string;\n oneInputSecs: string;\n\n public hoursUpDisabled = false;\n public hoursDownDisabled = false;\n public minutesUpDisabled = false;\n public minutesDownDisabled = false;\n public secondsUpDisabled = false;\n public secondsDownDisabled = false;\n\n @Input() e2eAttr = 'eui-timepicker';\n\n @Input() timeMask = 'Hh:m0'\n @Input() placeholder = this.timeMask;\n\n @Input() stepHours = 1;\n @Input() stepMinutes = 1;\n @Input() stepSeconds = 1;\n\n @Input({ transform: booleanAttribute }) isreadOnly = false;\n @Input({ transform: booleanAttribute }) isOneInputField = false;\n @Input({ transform: booleanAttribute }) hasSeconds = false;\n\n private propagatedValues: EuiTimePicker = {\n hours: null,\n mins: null,\n secs: this.hasSeconds ? null : undefined,\n };\n private destroy$: Subject<boolean> = new Subject<boolean>();\n\n constructor(\n @Optional() @Inject(DYNAMIC_COMPONENT_CONFIG) config: EuiDateTimePickerConfig,\n @Self() @Optional() private control: NgControl,\n ) {\n this.hours = config?.hours || 0;\n this.mins = config?.mins || 0;\n this.secs = config?.secs || 0;\n this.isDatetimepicker = config?.isDatetimepicker;\n this.hasSeconds = config?.hasSeconds;\n this.isOneInputField = config?.isOneInputField;\n this.stepHours = config? config.stepHours: this.stepHours;\n this.stepMinutes = config? config.stepMinutes: this.stepMinutes;\n this.stepSeconds = config? config.stepSeconds: this.stepSeconds;\n const hours = this.hours === 0 || null ? '00' : this.hours;\n const mins = this.mins === 0 || null ? '00' : this.mins;\n const secs = this.secs === 0 || null ? '00' : this.secs;\n this.oneInputFormControl.setValue('' + hours + ':' + mins + ':' + secs);\n this.callbackFn = config?.callbackFn || this.callbackFn;\n\n if (this.control) {\n this.control.valueAccessor = this;\n }\n }\n\n ngOnInit(): void {\n \n this.oneInputFormControl.valueChanges.pipe(takeUntil(this.destroy$)).subscribe((value) => {\n // splits the entered time into 3 parts based on the : and propagates back the corresponding parts\n if(value) {\n [this.oneInputHours, this.oneInputMins, this.oneInputSecs] = value.split(':');\n const splittedhours = this.oneInputHours ? Number(this.oneInputHours) : null;\n const splittedmins = this.oneInputMins ? Number(this.oneInputMins) : null;\n const splittedsecs = this.oneInputSecs ? Number(this.oneInputSecs) : null;\n if (this.hasSeconds) {\n this.propagatedValues = {\n ...this.propagatedValues,\n hours: splittedhours,\n mins: splittedmins,\n secs: splittedsecs,\n };\n this.callbackFn(splittedhours, splittedmins, splittedsecs);\n } else {\n this.propagatedValues = {\n ...this.propagatedValues,\n hours: splittedhours,\n mins: splittedmins,\n };\n this.callbackFn(splittedhours, splittedmins);\n }\n if (splittedhours === null && splittedmins === null && splittedsecs === null) {\n this.propagateChange(null);\n } else {\n this.propagateChange(this.propagatedValues);\n }\n } \n });\n }\n\n ngOnChanges(changes: SimpleChanges):void {\n if(this.isOneInputField) {\n if (this.hasSeconds && changes.hasSeconds) {\n this.timeMask = 'Hh:m0:s0';\n this.placeholder = 'Hh:m0:s0';\n }\n if (changes.timeMask) {\n this.timeMask = changes.timeMask.currentValue;\n this.placeholder = changes.timeMask.currentValue;\n }\n if(changes.placeholder) {\n this.placeholder = changes.placeholder.currentValue;\n }\n }\n }\n\n ngDoCheck(): void {\n if (this.control) {\n // marks the input control as touched/invalid if the form control is touched/invalid\n this.control?.touched ? this.oneInputFormControl.markAsTouched() : this.oneInputFormControl.markAsUntouched();\n this.control?.invalid ? this.oneInputFormControl.setErrors(this.control.errors) : this.oneInputFormControl.setErrors(null);\n }\n }\n\n ngOnDestroy(): void {\n this.destroy$.next(true);\n this.destroy$.unsubscribe();\n }\n /**\n * Increments or decrements hours according to the step param being passed\n *\n * @param step The step number that hours will increase or decrease\n */\n changeHours(step: number): void {\n if ((!this.hoursUpDisabled && step >0) || (!this.hoursDownDisabled && step <0)) {\n const val = (isNaN(this.hours) ? 0 : this.hours) + step;\n this.updateHours(val.toString());\n }\n }\n /**\n * Increments or decrements minutes according to the step param being passed\n *\n * @param step The step number that minutes will increase or decrease\n */\n changeMinutes(step: number): void {\n if ((!this.minutesUpDisabled && step >0) || (!this.minutesDownDisabled && step <0)) {\n const val = (isNaN(this.mins) ? 0 : this.mins) + step;\n this.updateMinutes(val.toString());\n }\n }\n /**\n * Increments or decrements seconds according to the step param being passed\n *\n * @param step The step number that seconds will increase or decrease\n */\n changeSeconds(step: number): void {\n if ((!this.secondsUpDisabled && step >0) || (!this.secondsDownDisabled && step <0)) {\n const val = (isNaN(this.secs) ? 0 : this.secs) + step;\n this.updateSeconds(val.toString());\n }\n }\n /**\n * Updates the input field when hours change and adds 24hour validation + propagates the value back to the form\n *\n * @param newVal The new value that hours will have\n */\n updateHours(newVal: string): void {\n const enteredHour = this.toInteger(newVal);\n\n if (!isNaN(enteredHour)) {\n this.hours = (enteredHour < 0 ? 24 + enteredHour : enteredHour) % 24;\n } else {\n this.hours = NaN;\n }\n\n this.callbackFn(this.hours, this.mins, this.secs);\n\n this.propagatedValues = {\n ...this.propagatedValues,\n hours: this.hours,\n };\n this.propagateChange(this.propagatedValues);\n }\n /**\n * Updates the input field when minutes change and adds 60mins validation + propagates the value back to the form\n *\n * @param newVal The new value that minutes will have\n */\n updateMinutes(newVal: string): void {\n const enteredMin = this.toInteger(newVal);\n\n if (!isNaN(enteredMin)) {\n this.mins = enteredMin % 60 < 0 ? 60 + (enteredMin % 60) : enteredMin % 60;\n this.changeHours(Math.floor(enteredMin / 60));\n } else {\n this.mins = NaN;\n }\n\n this.callbackFn(this.hours, this.mins, this.secs);\n\n this.propagatedValues = {\n ...this.propagatedValues,\n mins: this.mins,\n };\n this.propagateChange(this.propagatedValues);\n }\n /**\n * Updates the input field when seconds change and adds 60secs validation + propagates the value back to the form\n *\n * @param newVal The new value that seconds will have\n */\n updateSeconds(newVal: string): void {\n const enteredSec = this.toInteger(newVal);\n\n if (!isNaN(enteredSec)) {\n this.secs = enteredSec % 60 < 0 ? 60 + (enteredSec % 60) : enteredSec % 60;\n this.changeMinutes(Math.floor(enteredSec / 60));\n } else {\n this.secs = NaN;\n }\n\n this.callbackFn(this.hours, this.mins, this.secs);\n\n this.propagatedValues = {\n ...this.propagatedValues,\n secs: this.secs,\n };\n\n this.propagateChange(this.propagatedValues);\n }\n /**\n * Autofills mins and secs with 00s if the user tabs after entering hours and marks the input as touched\n */\n onFocusOut(): void {\n if (this.oneInputHours && !this.oneInputMins && !this.oneInputSecs) {\n switch (this.oneInputHours) {\n case '0':\n this.oneInputHours = '00';\n break;\n case '1':\n this.oneInputHours = '01';\n break;\n case '2':\n this.oneInputHours = '02';\n break;\n }\n this.oneInputFormControl.patchValue(`${this.oneInputHours} : 00 : 00`);\n }\n\n this.propagateTouched();\n }\n\n writeValue(values: EuiTimePicker): void {\n if (!values) {\n this.hours = null;\n this.mins = null;\n this.secs = null;\n if(this.isOneInputField) {\n this.oneInputFormControl.setValue(null)\n }\n return;\n }\n \n if (values.hours < 0 || values.hours > 23 || typeof values.hours !== 'number') {\n throw new Error('hours must be defined and be a number with range 0-23');\n }\n if (values.mins < 0 || values.mins > 59 || typeof values.mins !== 'number') {\n throw new Error('mins must be defined and be a number with range 0-59');\n }\n if (this.hasSeconds && (values.secs < 0 || values.secs > 59 || typeof values.secs !== 'number')) {\n throw new Error('secs must be defined and be a number with range 0-59');\n }\n\n this.updateHours(values.hours.toString());\n this.updateMinutes(values.mins.toString());\n if (values.secs) {\n this.updateSeconds(values.secs.toString());\n }\n if (this.isOneInputField) {\n const hours = this.padNumber(values.hours);\n const mins = this.padNumber(values.mins);\n const secs = this.padNumber(values.secs);\n\n this.oneInputFormControl.patchValue('' + hours + ':' + mins + ':' + secs);\n }\n }\n /**\n * Disables the hour up incremental when max time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public hoursUpDisable(state: boolean): void {\n this.hoursUpDisabled = state;\n }\n /**\n * Disables the hour down decremental when min time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public hoursDownDisable(state: boolean): void {\n this.hoursDownDisabled = state;\n }\n /**\n * Disables the minutes up incremental when max time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public minutesUpDisable(state: boolean): void {\n this.minutesUpDisabled = state;\n }\n /**\n * Disables the minutes down decremental when min time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public minutesDownDisable(state: boolean): void {\n this.minutesDownDisabled = state;\n }\n /**\n * Disables the seconds up incremental when max time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public secondsUpDisable(state: boolean): void {\n this.secondsUpDisabled = state;\n }\n /**\n * Disables the seconds down decremental when min time range is reached\n *\n * @param state The boolean value that enables the feature\n */\n public secondsDownDisable(state: boolean): void {\n this.secondsDownDisabled = state;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n registerOnTouched(fn: any): void {\n this.propagateTouched = fn;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private callbackFn: (hours: number, mins: number, secs?: number) => void = () => {};\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private toInteger(value: any): number {\n return parseInt(`${value}`, 10);\n }\n\n /**\n * Pads leading zero to the provided number when isOneInputField\n *\n * @param value The value to add leading zero to\n * @private\n */\n private padNumber(value: number): string {\n if (!isNaN(this.toInteger(value))) {\n return `0${value}`.slice(-2);\n } else {\n return '';\n }\n }\n\n // TODO: find the correct type or turn into a generic, https://www.typescriptlang.org/docs/handbook/2/generics.html\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private propagateChange = (_: any): void => {/* empty */};\n\n private propagateTouched = (): void => {/* empty */};\n}\n","<div class=\"eui-timepicker\" [class.eui-timepicker--centered]=\"isDatetimepicker\" attr.data-e2e=\"{{ e2eAttr }}\">\n <ng-container *ngIf=\"isOneInputField; else multipleInputs\">\n <input\n [class.eui-timepicker__input--one-field]=\"isDatetimepicker\"\n euiInputText\n mask=\"{{ timeMask }}\"\n [leadZeroDateTime]=\"true\"\n [placeholder]=\"placeholder\"\n [attr.aria-label]=\"oneInputFormControl.value?oneInputFormControl.value:'No time value'\"\n [formControl]=\"oneInputFormControl\"\n (focusout)=\"onFocusOut()\"\n [dropSpecialCharacters]=\"false\"\n [readonly]=\"isreadOnly\" />\n </ng-container>\n\n <ng-template #multipleInputs>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-up\">\n <eui-icon-svg\n (click)=\"changeHours(stepHours)\"\n [class.time-control--disabled]=\"hoursUpDisabled\"\n icon=\"eui-chevron-up\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Hours\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefhours\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"HH\"\n [ngModel]=\"hours\"\n (ngModelChange)=\"updateHours($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Hours\"\n (keydown.ArrowUp)=\"changeHours(stepHours); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeHours(-stepHours); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__hours-down\">\n <eui-icon-svg\n (click)=\"changeHours(-stepHours)\"\n [class.time-control--disabled]=\"hoursDownDisabled\"\n icon=\"eui-chevron-down\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Hours\">\n </eui-icon-svg>\n </div>\n </div>\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-up\">\n <eui-icon-svg\n (click)=\"changeMinutes(stepMinutes)\"\n [class.time-control--disabled]=\"minutesUpDisabled\"\n icon=\"eui-chevron-up\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase Minutes\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefmins\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"MM\"\n [ngModel]=\"mins\"\n (ngModelChange)=\"updateMinutes($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Minutes\"\n (keydown.ArrowUp)=\"changeMinutes(stepMinutes); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeMinutes(-stepMinutes); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__minutes-down\">\n <eui-icon-svg\n (click)=\"changeMinutes(-stepMinutes)\"\n [class.time-control--disabled]=\"minutesDownDisabled\"\n icon=\"eui-chevron-down\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease Minutes\">\n </eui-icon-svg>\n </div>\n </div>\n <ng-container *ngIf=\"hasSeconds\">\n <div class=\"eui-timepicker__spacer\">:</div>\n <div class=\"eui-timepicker__input-container\">\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-up\">\n <eui-icon-svg\n (click)=\"changeSeconds(stepSeconds)\"\n [class.time-control--disabled]=\"secondsUpDisabled\"\n icon=\"eui-chevron-up\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Increase seconds\">\n </eui-icon-svg>\n </div>\n <input\n #inputrefsecs\n euiInputNumber\n [leadingZero]=\"2\"\n [digits]=\"2\"\n [fractionDigits]=\"0\"\n class=\"eui-timepicker__input\"\n placeholder=\"SS\"\n [ngModel]=\"secs\"\n (ngModelChange)=\"updateSeconds($event)\"\n [readonly]=\"isreadOnly\"\n aria-label=\"Seconds\"\n (keydown.ArrowUp)=\"changeSeconds(stepSeconds); $event.preventDefault()\"\n (keydown.ArrowDown)=\"changeSeconds(-stepSeconds); $event.preventDefault()\" />\n <div *ngIf=\"!isreadOnly\" class=\"eui-timepicker__chevron eui-timepicker__seconds-down\">\n <eui-icon-svg\n (click)=\"changeSeconds(-stepSeconds)\"\n [class.time-control--disabled]=\"secondsDownDisabled\"\n icon=\"eui-chevron-down\"\n fillColor=\"grey-75\"\n size=\"l\"\n role=\"button\"\n aria-label=\"Decrease seconds\">\n </eui-icon-svg>\n </div>\n </div>\n </ng-container>\n </ng-template>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgxMaskDirective, provideNgxMask, provideEnvironmentNgxMask } from 'ngx-mask';\n\nimport { EuiTimepickerComponent } from './eui-timepicker.component';\nimport { EuiInputNumberDirectiveModule } from '@eui/components/eui-input-number';\nimport { EuiInputTextModule } from '@eui/components/eui-input-text';\nimport { EuiIconModule } from '@eui/components/eui-icon';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n EuiInputNumberDirectiveModule,\n EuiInputTextModule,\n EuiIconModule,\n NgxMaskDirective,\n ],\n providers: [provideNgxMask(), provideEnvironmentNgxMask()],\n exports: [EuiTimepickerComponent],\n declarations: [EuiTimepickerComponent],\n})\nexport class EuiTimepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|