@elderbyte/ngx-starter 17.8.0 → 17.9.0

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.
@@ -18,6 +18,7 @@ import { ElderLocalTimeInputComponent } from '../elder-local-time-input/elder-lo
18
18
  import { ElderDateTimeInputComponent } from '../elder-date-time-input/elder-date-time-input.component';
19
19
  import { AsyncPipe } from '@angular/common';
20
20
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
21
+ import { coerceInterval, coerceIntervalIsoStr } from '../../../common/time/interval-coerce';
21
22
  import * as i0 from "@angular/core";
22
23
  import * as i1 from "@angular/cdk/a11y";
23
24
  import * as i2 from "@ngx-translate/core";
@@ -42,7 +43,7 @@ export class ElderIntervalInputComponent extends ElderFormFieldControlBase {
42
43
  this._mode = 'date-time-range';
43
44
  this.zone = ZoneId.systemDefault();
44
45
  this.controlType = this._mode;
45
- this.interval$ = this.value$.pipe(map(value => this.coerceInterval(value)));
46
+ this.interval$ = this.value$.pipe(map(value => coerceInterval(value)));
46
47
  this.endTime$ = this.interval$.pipe(map(interval => interval?.end ? LocalTime.from(interval.end.atZone(this.zone)) : null));
47
48
  this.startLocalDate$ = this.interval$.pipe(map(interval => interval?.start ? LocalDate.from(interval.start.atZone(this.zone)) : null));
48
49
  this.endLocalDate$ = this.interval$.pipe(map(interval => interval?.end ? LocalDate.from(interval.end.atZone(this.zone)) : null));
@@ -69,7 +70,7 @@ export class ElderIntervalInputComponent extends ElderFormFieldControlBase {
69
70
  return this._mode;
70
71
  }
71
72
  get isoValueChange() {
72
- return this.valueChange.pipe(map(value => this.coerceIsoStr(value)));
73
+ return this.valueChange.pipe(map(value => coerceIntervalIsoStr(value)));
73
74
  }
74
75
  set isoValue(value) {
75
76
  this.value = value ? this.coerceValue(value) : null;
@@ -78,7 +79,7 @@ export class ElderIntervalInputComponent extends ElderFormFieldControlBase {
78
79
  return true;
79
80
  }
80
81
  get interval() {
81
- return this.coerceInterval(this.value);
82
+ return coerceInterval(this.value);
82
83
  }
83
84
  /***************************************************************************
84
85
  * *
@@ -141,8 +142,8 @@ export class ElderIntervalInputComponent extends ElderFormFieldControlBase {
141
142
  }
142
143
  }
143
144
  valuesEquals(a, b) {
144
- const aInterval = this.coerceInterval(a);
145
- const bInterval = this.coerceInterval(b);
145
+ const aInterval = coerceInterval(a);
146
+ const bInterval = coerceInterval(b);
146
147
  return (aInterval && bInterval)
147
148
  ? aInterval.equals(bInterval)
148
149
  : aInterval === bInterval;
@@ -171,32 +172,10 @@ export class ElderIntervalInputComponent extends ElderFormFieldControlBase {
171
172
  }
172
173
  coerceValue(value) {
173
174
  if (this.valueAsIsoStr) {
174
- return this.coerceIsoStr(value);
175
+ return coerceIntervalIsoStr(value);
175
176
  }
176
177
  else {
177
- return this.coerceInterval(value);
178
- }
179
- }
180
- coerceInterval(value) {
181
- if (value instanceof Interval) {
182
- return value;
183
- }
184
- else if ((typeof value) === 'string') {
185
- return Interval.parse(value);
186
- }
187
- else {
188
- return undefined;
189
- }
190
- }
191
- coerceIsoStr(value) {
192
- if (value instanceof Interval) {
193
- return value.toInstantString();
194
- }
195
- else if ((typeof value) === 'string') {
196
- return value;
197
- }
198
- else {
199
- return undefined;
178
+ return coerceInterval(value);
200
179
  }
201
180
  }
202
181
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ElderIntervalInputComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.FocusMonitor }, { token: i2.TranslateService }, { token: i3.NgControl, optional: true, self: true }, { token: i4.DateAdapter }, { token: MAT_DATE_LOCALE }], target: i0.ɵɵFactoryTarget.Component }); }
@@ -231,4 +210,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
231
210
  }], isoValue: [{
232
211
  type: Input
233
212
  }] } });
234
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItaW50ZXJ2YWwtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy90aW1lL2VsZGVyLWludGVydmFsLWlucHV0L2VsZGVyLWludGVydmFsLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvdGltZS9lbGRlci1pbnRlcnZhbC1pbnB1dC9lbGRlci1pbnRlcnZhbC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsUUFBUSxFQUFpQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQVUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFFeEcsT0FBTyxFQUFtQixlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQVksV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENB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UUFBUTs7MEJBQUksSUFBSTs7MEJBRWhCLE1BQU07MkJBQUMsZUFBZTt5Q0E1QmxCLElBQUk7c0JBRFYsS0FBSztnQkFzRUssYUFBYTtzQkFEdkIsS0FBSztnQkFVSyxJQUFJO3NCQURkLEtBQUs7Z0JBV0ssY0FBYztzQkFEeEIsTUFBTTtnQkFRSSxRQUFRO3NCQURsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTZWxmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtMb2dnZXJGYWN0b3J5fSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQge0ludGVydmFsLCBJc29JbnRlcnZhbFN0cn0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3RpbWUvaW50ZXJ2YWwnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIG1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtJbnN0YW50LCBMb2NhbERhdGUsIExvY2FsVGltZSwgWm9uZUlkfSBmcm9tICdAanMtam9kYS9jb3JlJztcbmltcG9ydCB7RWxkZXJGb3JtRmllbGRDb250cm9sQmFzZX0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2Zvcm1zL2VsZGVyLWZvcm0tZmllbGQtY29udHJvbC1iYXNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0ZvY3VzTW9uaXRvcn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlLCBUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtOZ0NvbnRyb2wsIEZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge01hdEZvcm1GaWVsZENvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHtUaW1lVXRpbH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3RpbWUvdGltZS11dGlsJztcbmltcG9ydCB7RGF0ZUFkYXB0ZXIsIE1BVF9EQVRFX0xPQ0FMRX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge0xvY2FsZURhdGVGb3JtYXRzfSBmcm9tICcuLi9kYXRlLWZvcm1hdHMvbG9jYWxlLWRhdGUtZm9ybWF0cyc7XG5pbXBvcnQge0VsZGVyTG9jYWxEYXRlSW5wdXRDb21wb25lbnR9IGZyb20gJy4uL2VsZGVyLWxvY2FsLWRhdGUtaW5wdXQvZWxkZXItbG9jYWwtZGF0ZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHtNYXRJY29ufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7XG4gIE1hdERhdGVSYW5nZUlucHV0LFxuICBNYXRTdGFydERhdGUsXG4gIE1hdEVuZERhdGUsXG4gIE1hdERhdGVwaWNrZXJUb2dnbGUsXG4gIE1hdERhdGVwaWNrZXJUb2dnbGVJY29uLFxuICBNYXREYXRlUmFuZ2VQaWNrZXJcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQge0VsZGVyTG9jYWxUaW1lSW5wdXRDb21wb25lbnR9IGZyb20gJy4uL2VsZGVyLWxvY2FsLXRpbWUtaW5wdXQvZWxkZXItbG9jYWwtdGltZS1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHtFbGRlckRhdGVUaW1lSW5wdXRDb21wb25lbnR9IGZyb20gJy4uL2VsZGVyLWRhdGUtdGltZS1pbnB1dC9lbGRlci1kYXRlLXRpbWUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7QXN5bmNQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuZXhwb3J0IHR5cGUgSW50ZXJ2YWxJbnB1dE1vZGUgPVxuXG4vKipcbiAqIFN1cHBvcnRzIHRoZSBzZWxlY3Rpb24gb2YgYSBzaW5nbGUgKGZ1bGwpIGRheTpcbiAqIDEyLjEyLjIwMjBcbiAqL1xuICAnc2luZ2xlLWRheScgfFxuXG4gIC8qKlxuICAgKiBTdXBwb3J0cyBhIHRpbWUgaW50ZXJ2YWwgaW4gYSBkYXk6XG4gICAqIDEyLjEyLjIwMjAgMTM6MDAgLSAxODowMFxuICAgKi9cbiAgJ2RheS10aW1lLXJhbmdlJyB8XG5cbiAgLyoqXG4gICAqIFN1cHBvcnRzIGEgZGF0ZSBpbnRlcnZhbCB3aXRob3V0IHRpbWVcbiAgICogMTIuMTIuMjAyMCAtIDIyLjA2LjIwMjFcbiAgICovXG4gICdkYXRlLXJhbmdlJyB8XG5cbiAgLyoqXG4gICAqIFN1cHBvcnRzIGEgZGF0ZS10aW1lIHRvIGRhdGUtdGltZSBpbnRlcnZhbFxuICAgKiAxMi4xMi4yMDIwIDg6MDAgLSAyMi4wNi4yMDIxIDE3OjAwXG4gICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgYXMgaXQgc3VwcG9ydHMgdGhlIG1vc3QgZGV0YWlsZWQgaW5wdXQuXG4gICAqL1xuICAnZGF0ZS10aW1lLXJhbmdlJ1xuICA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLWludGVydmFsLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VsZGVyLWludGVydmFsLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWxkZXItaW50ZXJ2YWwtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRWxkZXJJbnRlcnZhbElucHV0Q29tcG9uZW50fSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBGb3Jtc01vZHVsZSxcbiAgICBFbGRlckRhdGVUaW1lSW5wdXRDb21wb25lbnQsIEVsZGVyTG9jYWxUaW1lSW5wdXRDb21wb25lbnQsXG4gICAgTWF0RGF0ZVJhbmdlSW5wdXQsIE1hdFN0YXJ0RGF0ZSxcbiAgICBNYXRFbmREYXRlLCBNYXREYXRlcGlja2VyVG9nZ2xlLCBNYXRJY29uLCBNYXREYXRlcGlja2VyVG9nZ2xlSWNvbiwgTWF0RGF0ZVJhbmdlUGlja2VyLFxuICAgIEVsZGVyTG9jYWxEYXRlSW5wdXRDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVySW50ZXJ2YWxJbnB1dENvbXBvbmVudCBleHRlbmRzIEVsZGVyRm9ybUZpZWxkQ29udHJvbEJhc2U8SW50ZXJ2YWwgfCBJc29JbnRlcnZhbFN0cj4ge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIF9tb2RlOiBJbnRlcnZhbElucHV0TW9kZSA9ICdkYXRlLXRpbWUtcmFuZ2UnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB6b25lID0gWm9uZUlkLnN5c3RlbURlZmF1bHQoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZW5kVGltZSQ6IE9ic2VydmFibGU8TG9jYWxUaW1lPjtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhcnRMb2NhbERhdGUkOiBPYnNlcnZhYmxlPExvY2FsRGF0ZT47XG4gIHB1YmxpYyByZWFkb25seSBlbmRMb2NhbERhdGUkOiBPYnNlcnZhYmxlPExvY2FsRGF0ZT47XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXJ0RGF0ZSQ6IE9ic2VydmFibGU8RGF0ZT47XG4gIHB1YmxpYyByZWFkb25seSBlbmREYXRlJDogT2JzZXJ2YWJsZTxEYXRlPjtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGF0ZWZvcm1hdDogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpbnRlcnZhbCQ6IE9ic2VydmFibGU8SW50ZXJ2YWw+O1xuICBwcml2YXRlIF92YWx1ZUFzSXNvU3RyOiBib29sZWFuO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhvc3RSZWY6IEVsZW1lbnRSZWYsXG4gICAgem9uZTogTmdab25lLFxuICAgIGZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgY3VzdG9tRGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPERhdGU+LFxuICAgIEBJbmplY3QoTUFUX0RBVEVfTE9DQUxFKSBtYXREYXRlTG9jYWxlOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBob3N0UmVmLFxuICAgICAgJ2ludGVydmFsLWlucHV0JywgLy8gPT4gbWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtaW50ZXJ2YWwtaW5wdXRcbiAgICAgIGZvY3VzTW9uaXRvcixcbiAgICAgIHRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICBuZ0NvbnRyb2xcbiAgICApO1xuXG4gICAgdGhpcy5jb250cm9sVHlwZSA9IHRoaXMuX21vZGU7XG4gICAgdGhpcy5pbnRlcnZhbCQgPSB0aGlzLnZhbHVlJC5waXBlKFxuICAgICAgbWFwKHZhbHVlID0+IHRoaXMuY29lcmNlSW50ZXJ2YWwodmFsdWUpKVxuICAgICk7XG5cbiAgICB0aGlzLmVuZFRpbWUkID0gdGhpcy5pbnRlcnZhbCQucGlwZShcbiAgICAgIG1hcChpbnRlcnZhbCA9PiBpbnRlcnZhbD8uZW5kID8gTG9jYWxUaW1lLmZyb20oaW50ZXJ2YWwuZW5kLmF0Wm9uZSh0aGlzLnpvbmUpKSA6IG51bGwpXG4gICAgKTtcblxuICAgIHRoaXMuc3RhcnRMb2NhbERhdGUkID0gdGhpcy5pbnRlcnZhbCQucGlwZShcbiAgICAgIG1hcChpbnRlcnZhbCA9PiBpbnRlcnZhbD8uc3RhcnQgPyBMb2NhbERhdGUuZnJvbShpbnRlcnZhbC5zdGFydC5hdFpvbmUodGhpcy56b25lKSkgOiBudWxsKVxuICAgICk7XG5cbiAgICB0aGlzLmVuZExvY2FsRGF0ZSQgPSB0aGlzLmludGVydmFsJC5waXBlKFxuICAgICAgbWFwKGludGVydmFsID0+IGludGVydmFsPy5lbmQgPyBMb2NhbERhdGUuZnJvbShpbnRlcnZhbC5lbmQuYXRab25lKHRoaXMuem9uZSkpIDogbnVsbClcbiAgICApO1xuXG4gICAgdGhpcy5zdGFydERhdGUkID0gdGhpcy5tYXBJZ25vcmVFcnJvck9ic2VydmFibGUodGhpcy5zdGFydExvY2FsRGF0ZSQsIChkOiBMb2NhbERhdGUpID0+IFRpbWVVdGlsLmxvY2FsRGF0ZVRvRGF0ZShkKSk7XG4gICAgdGhpcy5lbmREYXRlJCA9IHRoaXMubWFwSWdub3JlRXJyb3JPYnNlcnZhYmxlKHRoaXMuZW5kTG9jYWxEYXRlJCwgKGQ6IExvY2FsRGF0ZSkgPT4gVGltZVV0aWwubG9jYWxEYXRlVG9EYXRlKGQpKTtcblxuICAgIHRoaXMuZGF0ZWZvcm1hdCA9IExvY2FsZURhdGVGb3JtYXRzLmdldEZvcm1hdHNPZkxvY2FsZShtYXREYXRlTG9jYWxlKVswXS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByb3BlcnRpZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHZhbHVlQXNJc29TdHIoZW5hYmxlZDogQm9vbGVhbklucHV0KSB7XG4gICAgdGhpcy5fdmFsdWVBc0lzb1N0ciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShlbmFibGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdmFsdWVBc0lzb1N0cigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVBc0lzb1N0cjtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgbW9kZShtb2RlOiBJbnRlcnZhbElucHV0TW9kZSkge1xuICAgIHRoaXMuX21vZGUgPSBtb2RlO1xuICAgIHRoaXMuY29udHJvbFR5cGUgPSBtb2RlO1xuICB9XG5cbiAgcHVibGljIGdldCBtb2RlKCk6IEludGVydmFsSW5wdXRNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fbW9kZTtcbiAgfVxuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgZ2V0IGlzb1ZhbHVlQ2hhbmdlKCk6IE9ic2VydmFibGU8SXNvSW50ZXJ2YWxTdHIgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVDaGFuZ2UucGlwZShcbiAgICAgIG1hcCh2YWx1ZSA9PiB0aGlzLmNvZXJjZUlzb1N0cih2YWx1ZSkpXG4gICAgKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgaXNvVmFsdWUodmFsdWU6IElzb0ludGVydmFsU3RyIHwgbnVsbCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSA/IHRoaXMuY29lcmNlVmFsdWUodmFsdWUpIDogbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc2hvdWxkTGFiZWxGbG9hdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW50ZXJ2YWwoKTogSW50ZXJ2YWwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNvZXJjZUludGVydmFsKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblxuICBwdWJsaWMgZm9jdXMob3B0aW9ucz86IEZvY3VzT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oJ2ZvY3VzKCkgbm90IHlldCBzdXBwb3J0ZWQhJyk7XG4gICAgLy8gdGhpcy5pbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uZm9jdXMob3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdibHVyKCkgbm90IHlldCBzdXBwb3J0ZWQhJyk7XG4gICAgLy8gdGhpcy5pbnB1dFJlZj8ubmF0aXZlRWxlbWVudD8uYmx1cigpO1xuICB9XG5cbiAgcHVibGljIG9uRGF5VGltZVN0YXJ0Q2hhbmdlZChzdGFydDogSW5zdGFudCkge1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICB0aGlzLmluc3RhbnRBdEVuZE9mRGF5KHN0YXJ0KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25EYXlUaW1lRW5kVGltZUNoYW5nZWQoZW5kVGltZTogTG9jYWxUaW1lKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmludGVydmFsLnN0YXJ0O1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuaW5zdGFudFdpdGhUaW1lKHN0YXJ0LCBlbmRUaW1lKTtcbiAgICB0aGlzLnVwZGF0ZUNvZXJjZWRWYWx1ZShcbiAgICAgIEludGVydmFsLm9mKFxuICAgICAgICBzdGFydCxcbiAgICAgICAgIWVuZC5pc0FmdGVyKHN0YXJ0KSA/IHRoaXMuaW5zdGFudEF0RW5kT2ZEYXkoc3RhcnQpIDogZW5kXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN0YXJ0Q2hhbmdlZChzdGFydDogSW5zdGFudCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICB0aGlzLmludGVydmFsLmVuZFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25FbmRDaGFuZ2VkKGVuZDogSW5zdGFudCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwuc3RhcnQsXG4gICAgICAgIGVuZFxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25TdGFydERhdGVDaGFuZ2VkKHZhbHVlOiBEYXRlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnRvTG9jYWxEYXRlKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUNvZXJjZWRWYWx1ZShcbiAgICAgIEludGVydmFsLm9mKFxuICAgICAgICB0aGlzLmxvY2FsRGF0ZVRvSW5zdGFudChkYXRlKSxcbiAgICAgICAgdGhpcy5pbnRlcnZhbD8uZW5kXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVuZERhdGVDaGFuZ2VkKHZhbHVlOiBEYXRlIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzLnRvTG9jYWxEYXRlKHZhbHVlKTtcbiAgICB0aGlzLnVwZGF0ZUNvZXJjZWRWYWx1ZShcbiAgICAgIEludGVydmFsLm9mKFxuICAgICAgICB0aGlzLmludGVydmFsPy5zdGFydCxcbiAgICAgICAgdGhpcy5sb2NhbERhdGVUb0luc3RhbnQoZGF0ZSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uU2luZ2xlRGF5RGF0ZUNoYW5nZWQoZGF0ZTogTG9jYWxEYXRlKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgICBJbnRlcnZhbC5vZkRheShkYXRlLCB0aGlzLnpvbmUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgdXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgIHZhbHVlOiBJbnRlcnZhbCB8IElzb0ludGVydmFsU3RyIHwgdW5kZWZpbmVkIHwgbnVsbFxuICApOiB2b2lke1xuICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5jb2VyY2VWYWx1ZSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YW50QXRTdGFydE9mRGF5Tm93KCk6IEluc3RhbnQge1xuICAgIHJldHVybiBMb2NhbERhdGUubm93KCkuYXRTdGFydE9mRGF5KCkuYXRab25lKHRoaXMuem9uZSkudG9JbnN0YW50KCk7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbnRBdEVuZE9mRGF5KGluc3RhbnQ6IEluc3RhbnQpOiBJbnN0YW50IHtcbiAgICByZXR1cm4gTG9jYWxEYXRlLm9mSW5zdGFudChpbnN0YW50KS5hdFN0YXJ0T2ZEYXkoKS5wbHVzRGF5cygxKS5hdFpvbmUodGhpcy56b25lKS50b0luc3RhbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9jYWxEYXRlVG9JbnN0YW50KGRhdGU6IExvY2FsRGF0ZSk6IEluc3RhbnQgfCB1bmRlZmluZWQge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICByZXR1cm4gZGF0ZS5hdFN0YXJ0T2ZEYXkoKS5hdFpvbmUodGhpcy56b25lKS50b0luc3RhbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsdWVzRXF1YWxzKFxuICAgIGE6IEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHIgfCB1bmRlZmluZWQgfCBudWxsLFxuICAgIGI6IEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHIgfCB1bmRlZmluZWQgfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFJbnRlcnZhbCA9IHRoaXMuY29lcmNlSW50ZXJ2YWwoYSk7XG4gICAgY29uc3QgYkludGVydmFsID0gdGhpcy5jb2VyY2VJbnRlcnZhbChiKTtcbiAgICByZXR1cm4gKGFJbnRlcnZhbCAmJiBiSW50ZXJ2YWwpXG4gICAgICA/IGFJbnRlcnZhbC5lcXVhbHMoYkludGVydmFsKVxuICAgICAgOiBhSW50ZXJ2YWwgPT09IGJJbnRlcnZhbDtcbiAgfVxuXG4gIHByaXZhdGUgaW5zdGFudFdpdGhUaW1lKGluc3RhbnQ6IEluc3RhbnQsIHRpbWU6IExvY2FsVGltZSk6IEluc3RhbnQge1xuICAgIHJldHVybiBpbnN0YW50XG4gICAgICAuYXRab25lKHRoaXMuem9uZSlcbiAgICAgIC53aXRoSG91cih0aW1lLmhvdXIoKSlcbiAgICAgIC53aXRoTWludXRlKHRpbWUubWludXRlKCkpXG4gICAgICAudG9JbnN0YW50KCk7XG4gIH1cblxuICBwcml2YXRlIHRvTG9jYWxEYXRlKHZhbHVlOiBEYXRlKTogTG9jYWxEYXRlIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB2YWx1ZSA/IFRpbWVVdGlsLmRhdGVUb0xvY2FsRGF0ZSh2YWx1ZSkgOiBudWxsO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2dnZXIud2FybignRmFpbGVkIHRvIGFwcGx5IHZhbHVlIHRvIGRhdGVWYWx1ZTogJyArIHZhbHVlLCBlcnIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBJZ25vcmVFcnJvck9ic2VydmFibGU8VD4oXG4gICAgZGF0ZTogT2JzZXJ2YWJsZTxMb2NhbERhdGU+LFxuICAgIGNvbnZlcnNpb25GbjogKGQ6IExvY2FsRGF0ZSkgPT4gVFxuICApOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgcmV0dXJuIGRhdGUucGlwZShcbiAgICAgIG1hcChsb2NhbERhdGUgPT4gbG9jYWxEYXRlID8gY29udmVyc2lvbkZuKGxvY2FsRGF0ZSkgOiBudWxsKSxcbiAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjb252ZXJ0IGxvY2FsIGRhdGUhJywgZXJyKTtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2VyY2VWYWx1ZShcbiAgICB2YWx1ZTogSW50ZXJ2YWwgfCBJc29JbnRlcnZhbFN0ciB8IHVuZGVmaW5lZCB8IG51bGxcbiAgKTogSW50ZXJ2YWwgfCBJc29JbnRlcnZhbFN0ciB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIGlmICh0aGlzLnZhbHVlQXNJc29TdHIpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvZXJjZUlzb1N0cih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmNvZXJjZUludGVydmFsKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvZXJjZUludGVydmFsKFxuICAgIHZhbHVlOiBJbnRlcnZhbCB8IElzb0ludGVydmFsU3RyIHwgdW5kZWZpbmVkIHwgbnVsbFxuICApOiBJbnRlcnZhbCB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgSW50ZXJ2YWwpIHtcbiAgICAgIHJldHVybiB2YWx1ZSBhcyBJbnRlcnZhbDtcbiAgICB9IGVsc2UgaWYgKCh0eXBlb2YgdmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIEludGVydmFsLnBhcnNlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvZXJjZUlzb1N0cihcbiAgICB2YWx1ZTogSW50ZXJ2YWwgfCBJc29JbnRlcnZhbFN0ciB8IHVuZGVmaW5lZCB8IG51bGxcbiAgKTogSXNvSW50ZXJ2YWxTdHIge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEludGVydmFsKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JbnN0YW50U3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICgodHlwZW9mIHZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiIsIkBzd2l0Y2ggKG1vZGUpIHtcblxuICBAY2FzZSAoJ2RhdGUtdGltZS1yYW5nZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvd1wiPlxuICAgICAgPGVsZGVyLWRhdGUtdGltZS1pbnB1dCBjbGFzcz1cImZsZXhcIiBjZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIihpbnRlcnZhbCQgfCBhc3luYyk/LnN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvblN0YXJ0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLmZyb20nIHwgdHJhbnNsYXRlKVwiXG4gICAgICA+PC9lbGRlci1kYXRlLXRpbWUtaW5wdXQ+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvciBmbGV4LW5vbmVcIj7igJM8L3NwYW4+XG4gICAgICA8ZWxkZXItZGF0ZS10aW1lLWlucHV0IGNsYXNzPVwiZmxleFwiIGNlbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiKGludGVydmFsJCB8IGFzeW5jKT8uZW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvbkVuZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIocGxhY2Vob2xkZXIgfHwgJycpICsgJyAnICsgKCdpbnRlcnZhbC50bycgfCB0cmFuc2xhdGUpXCJcbiAgICAgID48L2VsZGVyLWRhdGUtdGltZS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgfVxuICBAY2FzZSAoJ2RheS10aW1lLXJhbmdlJykge1xuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtcm93IGdhcC14cyBlbGRlci1mbGV4LWludGVydmFsLWNvbnRyb2xcIj5cblxuICAgICAgPCEtLSAgW25hbWVdPVwibmFtZSArICctZGF5LXN0YXJ0J1wiIC0tPlxuICAgICAgPGVsZGVyLWRhdGUtdGltZS1pbnB1dFxuICAgICAgICBbdmFsdWVdPVwiKGludGVydmFsJCB8IGFzeW5jKT8uc3RhcnRcIlxuICAgICAgICAodmFsdWVVcGRhdGVkKT1cIm9uRGF5VGltZVN0YXJ0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLmZyb20nIHwgdHJhbnNsYXRlKVwiXG4gICAgICA+PC9lbGRlci1kYXRlLXRpbWUtaW5wdXQ+XG5cbiAgICAgIDwhLS0gW25hbWVdPVwibmFtZSArICctZGF5LWVuZCdcIiAtLT5cbiAgICAgIDxlbGRlci1sb2NhbC10aW1lLWlucHV0XG4gICAgICAgIFt2YWx1ZV09XCJlbmRUaW1lJCB8IGFzeW5jXCJcbiAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvbkRheVRpbWVFbmRUaW1lQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLnRvJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgPjwvZWxkZXItbG9jYWwtdGltZS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBjYXNlICgnZGF0ZS1yYW5nZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvdyBnYXAteHMgZWxkZXItZmxleC1pbnRlcnZhbC1jb250cm9sXCI+XG5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dFxuICAgICAgICBjbGFzcz1cIm1kYy10ZXh0LWZpZWxkX19pbnB1dFwiXG4gICAgICAgIFtyYW5nZVBpY2tlcl09XCJwaWNrZXJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiISFkaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGVcbiAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRlZm9ybWF0XCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0YXJ0RGF0ZSQgfCBhc3luY1wiIG5hbWU9XCJkYXRlLXJhbmdlLnN0YXJ0XCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUsIHVwZGF0ZU9uOiAnYmx1cid9XCJcbiAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU3RhcnREYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFkaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgPGlucHV0IG1hdEVuZERhdGVcbiAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRlZm9ybWF0XCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImVuZERhdGUkIHwgYXN5bmNcIiBuYW1lPVwiZGF0ZS1yYW5nZS5lbmRcIlxuICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSwgdXBkYXRlT246ICdibHVyJ31cIlxuICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25FbmREYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFkaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIGNsYXNzPVwiZWxkZXItY29udHJvbC1pY29uLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwicGlja2VyXCI+XG4gICAgICAgIDxtYXQtaWNvbiBtYXREYXRlcGlja2VyVG9nZ2xlSWNvbj5jYWxlbmRhcl9tb250aDwvbWF0LWljb24+XG4gICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBjYXNlICgnc2luZ2xlLWRheScpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvdyBlbGRlci1mbGV4LWNvbnRyb2xcIj5cblxuICAgICAgPCEtLSBbbmFtZV09XCJuYW1lXCIgLS0+XG4gICAgICA8ZWxkZXItbG9jYWwtZGF0ZS1pbnB1dCBjbGFzcz1cImZsZXhcIiBjZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdGFydExvY2FsRGF0ZSQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVVcGRhdGVkKT1cIm9uU2luZ2xlRGF5RGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiKHBsYWNlaG9sZGVyIHx8ICcnKVwiXG4gICAgICA+PC9lbGRlci1sb2NhbC1kYXRlLWlucHV0PlxuICAgIDwvZGl2PlxuICB9XG59XG5cblxuXG5cblxuXG4iXX0=
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItaW50ZXJ2YWwtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy90aW1lL2VsZGVyLWludGVydmFsLWlucHV0L2VsZGVyLWludGVydmFsLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvdGltZS9lbGRlci1pbnRlcnZhbC1pbnB1dC9lbGRlci1pbnRlcnZhbC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxNQUFNLEVBQ04sS0FBSyxFQUVMLFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsUUFBUSxFQUFpQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQVUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFFeEcsT0FBTyxFQUFtQixlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQVksV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENB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U0FBUyw2Q0FBRSxlQUFlLDJGQUFFLFdBQVcsK21CQUMvQywyQkFBMkIsK0hBQUUsNEJBQTRCLHNIQUN6RCxpQkFBaUIsZ09BQUUsWUFBWSxzR0FDL0IsVUFBVSxvR0FBRSxtQkFBbUIsNktBQUUsT0FBTywySUFBRSx1QkFBdUIsc0VBQUUsa0JBQWtCLG9HQUNyRiw0QkFBNEI7OzJGQUVuQiwyQkFBMkI7a0JBZnZDLFNBQVM7K0JBQ0Usc0JBQXNCLG1CQUdmLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1QsRUFBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyw2QkFBNkIsRUFBQztxQkFDekUsY0FDVyxJQUFJLFdBQ1AsQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLFdBQVc7d0JBQy9DLDJCQUEyQixFQUFFLDRCQUE0Qjt3QkFDekQsaUJBQWlCLEVBQUUsWUFBWTt3QkFDL0IsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxrQkFBa0I7d0JBQ3JGLDRCQUE0QixDQUFDOzswQkF5QzVCLFFBQVE7OzBCQUFJLElBQUk7OzBCQUVoQixNQUFNOzJCQUFDLGVBQWU7eUNBNUJsQixJQUFJO3NCQURWLEtBQUs7Z0JBc0VLLGFBQWE7c0JBRHZCLEtBQUs7Z0JBVUssSUFBSTtzQkFEZCxLQUFLO2dCQVdLLGNBQWM7c0JBRHhCLE1BQU07Z0JBUUksUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2VsZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtJbnRlcnZhbCwgSXNvSW50ZXJ2YWxTdHJ9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90aW1lL2ludGVydmFsJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7SW5zdGFudCwgTG9jYWxEYXRlLCBMb2NhbFRpbWUsIFpvbmVJZH0gZnJvbSAnQGpzLWpvZGEvY29yZSc7XG5pbXBvcnQge0VsZGVyRm9ybUZpZWxkQ29udHJvbEJhc2V9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9mb3Jtcy9lbGRlci1mb3JtLWZpZWxkLWNvbnRyb2wtYmFzZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHtGb2N1c01vbml0b3J9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZSwgVHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TmdDb250cm9sLCBGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtNYXRGb3JtRmllbGRDb250cm9sfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7VGltZVV0aWx9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi90aW1lL3RpbWUtdXRpbCc7XG5pbXBvcnQge0RhdGVBZGFwdGVyLCBNQVRfREFURV9MT0NBTEV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtMb2NhbGVEYXRlRm9ybWF0c30gZnJvbSAnLi4vZGF0ZS1mb3JtYXRzL2xvY2FsZS1kYXRlLWZvcm1hdHMnO1xuaW1wb3J0IHtFbGRlckxvY2FsRGF0ZUlucHV0Q29tcG9uZW50fSBmcm9tICcuLi9lbGRlci1sb2NhbC1kYXRlLWlucHV0L2VsZGVyLWxvY2FsLWRhdGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7TWF0SWNvbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge1xuICBNYXREYXRlUmFuZ2VJbnB1dCxcbiAgTWF0U3RhcnREYXRlLFxuICBNYXRFbmREYXRlLFxuICBNYXREYXRlcGlja2VyVG9nZ2xlLFxuICBNYXREYXRlcGlja2VyVG9nZ2xlSWNvbixcbiAgTWF0RGF0ZVJhbmdlUGlja2VyXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtFbGRlckxvY2FsVGltZUlucHV0Q29tcG9uZW50fSBmcm9tICcuLi9lbGRlci1sb2NhbC10aW1lLWlucHV0L2VsZGVyLWxvY2FsLXRpbWUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7RWxkZXJEYXRlVGltZUlucHV0Q29tcG9uZW50fSBmcm9tICcuLi9lbGRlci1kYXRlLXRpbWUtaW5wdXQvZWxkZXItZGF0ZS10aW1lLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQge0FzeW5jUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Qm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge2NvZXJjZUludGVydmFsLCBjb2VyY2VJbnRlcnZhbElzb1N0cn0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3RpbWUvaW50ZXJ2YWwtY29lcmNlJztcblxuZXhwb3J0IHR5cGUgSW50ZXJ2YWxJbnB1dE1vZGUgPVxuXG4vKipcbiAqIFN1cHBvcnRzIHRoZSBzZWxlY3Rpb24gb2YgYSBzaW5nbGUgKGZ1bGwpIGRheTpcbiAqIDEyLjEyLjIwMjBcbiAqL1xuICAnc2luZ2xlLWRheScgfFxuXG4gIC8qKlxuICAgKiBTdXBwb3J0cyBhIHRpbWUgaW50ZXJ2YWwgaW4gYSBkYXk6XG4gICAqIDEyLjEyLjIwMjAgMTM6MDAgLSAxODowMFxuICAgKi9cbiAgJ2RheS10aW1lLXJhbmdlJyB8XG5cbiAgLyoqXG4gICAqIFN1cHBvcnRzIGEgZGF0ZSBpbnRlcnZhbCB3aXRob3V0IHRpbWVcbiAgICogMTIuMTIuMjAyMCAtIDIyLjA2LjIwMjFcbiAgICovXG4gICdkYXRlLXJhbmdlJyB8XG5cbiAgLyoqXG4gICAqIFN1cHBvcnRzIGEgZGF0ZS10aW1lIHRvIGRhdGUtdGltZSBpbnRlcnZhbFxuICAgKiAxMi4xMi4yMDIwIDg6MDAgLSAyMi4wNi4yMDIxIDE3OjAwXG4gICAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgYXMgaXQgc3VwcG9ydHMgdGhlIG1vc3QgZGV0YWlsZWQgaW5wdXQuXG4gICAqL1xuICAnZGF0ZS10aW1lLXJhbmdlJ1xuICA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VsZGVyLWludGVydmFsLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VsZGVyLWludGVydmFsLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZWxkZXItaW50ZXJ2YWwtaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRWxkZXJJbnRlcnZhbElucHV0Q29tcG9uZW50fSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBGb3Jtc01vZHVsZSxcbiAgICBFbGRlckRhdGVUaW1lSW5wdXRDb21wb25lbnQsIEVsZGVyTG9jYWxUaW1lSW5wdXRDb21wb25lbnQsXG4gICAgTWF0RGF0ZVJhbmdlSW5wdXQsIE1hdFN0YXJ0RGF0ZSxcbiAgICBNYXRFbmREYXRlLCBNYXREYXRlcGlja2VyVG9nZ2xlLCBNYXRJY29uLCBNYXREYXRlcGlja2VyVG9nZ2xlSWNvbiwgTWF0RGF0ZVJhbmdlUGlja2VyLFxuICAgIEVsZGVyTG9jYWxEYXRlSW5wdXRDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVySW50ZXJ2YWxJbnB1dENvbXBvbmVudCBleHRlbmRzIEVsZGVyRm9ybUZpZWxkQ29udHJvbEJhc2U8SW50ZXJ2YWwgfCBJc29JbnRlcnZhbFN0cj4ge1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBwcml2YXRlIF9tb2RlOiBJbnRlcnZhbElucHV0TW9kZSA9ICdkYXRlLXRpbWUtcmFuZ2UnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB6b25lID0gWm9uZUlkLnN5c3RlbURlZmF1bHQoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZW5kVGltZSQ6IE9ic2VydmFibGU8TG9jYWxUaW1lPjtcblxuICBwdWJsaWMgcmVhZG9ubHkgc3RhcnRMb2NhbERhdGUkOiBPYnNlcnZhYmxlPExvY2FsRGF0ZT47XG4gIHB1YmxpYyByZWFkb25seSBlbmRMb2NhbERhdGUkOiBPYnNlcnZhYmxlPExvY2FsRGF0ZT47XG5cbiAgcHVibGljIHJlYWRvbmx5IHN0YXJ0RGF0ZSQ6IE9ic2VydmFibGU8RGF0ZT47XG4gIHB1YmxpYyByZWFkb25seSBlbmREYXRlJDogT2JzZXJ2YWJsZTxEYXRlPjtcblxuICBwdWJsaWMgcmVhZG9ubHkgZGF0ZWZvcm1hdDogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSBpbnRlcnZhbCQ6IE9ic2VydmFibGU8SW50ZXJ2YWw+O1xuICBwcml2YXRlIF92YWx1ZUFzSXNvU3RyOiBib29sZWFuO1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGhvc3RSZWY6IEVsZW1lbnRSZWYsXG4gICAgem9uZTogTmdab25lLFxuICAgIGZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXG4gICAgY3VzdG9tRGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPERhdGU+LFxuICAgIEBJbmplY3QoTUFUX0RBVEVfTE9DQUxFKSBtYXREYXRlTG9jYWxlOiBzdHJpbmdcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBob3N0UmVmLFxuICAgICAgJ2ludGVydmFsLWlucHV0JywgLy8gPT4gbWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtaW50ZXJ2YWwtaW5wdXRcbiAgICAgIGZvY3VzTW9uaXRvcixcbiAgICAgIHRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICBuZ0NvbnRyb2xcbiAgICApO1xuXG4gICAgdGhpcy5jb250cm9sVHlwZSA9IHRoaXMuX21vZGU7XG4gICAgdGhpcy5pbnRlcnZhbCQgPSB0aGlzLnZhbHVlJC5waXBlKFxuICAgICAgbWFwKHZhbHVlID0+IGNvZXJjZUludGVydmFsKHZhbHVlKSlcbiAgICApO1xuXG4gICAgdGhpcy5lbmRUaW1lJCA9IHRoaXMuaW50ZXJ2YWwkLnBpcGUoXG4gICAgICBtYXAoaW50ZXJ2YWwgPT4gaW50ZXJ2YWw/LmVuZCA/IExvY2FsVGltZS5mcm9tKGludGVydmFsLmVuZC5hdFpvbmUodGhpcy56b25lKSkgOiBudWxsKVxuICAgICk7XG5cbiAgICB0aGlzLnN0YXJ0TG9jYWxEYXRlJCA9IHRoaXMuaW50ZXJ2YWwkLnBpcGUoXG4gICAgICBtYXAoaW50ZXJ2YWwgPT4gaW50ZXJ2YWw/LnN0YXJ0ID8gTG9jYWxEYXRlLmZyb20oaW50ZXJ2YWwuc3RhcnQuYXRab25lKHRoaXMuem9uZSkpIDogbnVsbClcbiAgICApO1xuXG4gICAgdGhpcy5lbmRMb2NhbERhdGUkID0gdGhpcy5pbnRlcnZhbCQucGlwZShcbiAgICAgIG1hcChpbnRlcnZhbCA9PiBpbnRlcnZhbD8uZW5kID8gTG9jYWxEYXRlLmZyb20oaW50ZXJ2YWwuZW5kLmF0Wm9uZSh0aGlzLnpvbmUpKSA6IG51bGwpXG4gICAgKTtcblxuICAgIHRoaXMuc3RhcnREYXRlJCA9IHRoaXMubWFwSWdub3JlRXJyb3JPYnNlcnZhYmxlKHRoaXMuc3RhcnRMb2NhbERhdGUkLCAoZDogTG9jYWxEYXRlKSA9PiBUaW1lVXRpbC5sb2NhbERhdGVUb0RhdGUoZCkpO1xuICAgIHRoaXMuZW5kRGF0ZSQgPSB0aGlzLm1hcElnbm9yZUVycm9yT2JzZXJ2YWJsZSh0aGlzLmVuZExvY2FsRGF0ZSQsIChkOiBMb2NhbERhdGUpID0+IFRpbWVVdGlsLmxvY2FsRGF0ZVRvRGF0ZShkKSk7XG5cbiAgICB0aGlzLmRhdGVmb3JtYXQgPSBMb2NhbGVEYXRlRm9ybWF0cy5nZXRGb3JtYXRzT2ZMb2NhbGUobWF0RGF0ZUxvY2FsZSlbMF0udG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB2YWx1ZUFzSXNvU3RyKGVuYWJsZWQ6IEJvb2xlYW5JbnB1dCkge1xuICAgIHRoaXMuX3ZhbHVlQXNJc29TdHIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkoZW5hYmxlZCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlQXNJc29TdHIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlQXNJc29TdHI7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IG1vZGUobW9kZTogSW50ZXJ2YWxJbnB1dE1vZGUpIHtcbiAgICB0aGlzLl9tb2RlID0gbW9kZTtcbiAgICB0aGlzLmNvbnRyb2xUeXBlID0gbW9kZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbW9kZSgpOiBJbnRlcnZhbElucHV0TW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGU7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgcHVibGljIGdldCBpc29WYWx1ZUNoYW5nZSgpOiBPYnNlcnZhYmxlPElzb0ludGVydmFsU3RyIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLnZhbHVlQ2hhbmdlLnBpcGUoXG4gICAgICBtYXAodmFsdWUgPT4gY29lcmNlSW50ZXJ2YWxJc29TdHIodmFsdWUpKVxuICAgICk7XG4gIH1cblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGlzb1ZhbHVlKHZhbHVlOiBJc29JbnRlcnZhbFN0ciB8IG51bGwpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgPyB0aGlzLmNvZXJjZVZhbHVlKHZhbHVlKSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNob3VsZExhYmVsRmxvYXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGludGVydmFsKCk6IEludGVydmFsIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY29lcmNlSW50ZXJ2YWwodGhpcy52YWx1ZSk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXG4gIHB1YmxpYyBmb2N1cyhvcHRpb25zPzogRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5sb2dnZXIud2FybignZm9jdXMoKSBub3QgeWV0IHN1cHBvcnRlZCEnKTtcbiAgICAvLyB0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5mb2N1cyhvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBibHVyKCk6IHZvaWQge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oJ2JsdXIoKSBub3QgeWV0IHN1cHBvcnRlZCEnKTtcbiAgICAvLyB0aGlzLmlucHV0UmVmPy5uYXRpdmVFbGVtZW50Py5ibHVyKCk7XG4gIH1cblxuICBwdWJsaWMgb25EYXlUaW1lU3RhcnRDaGFuZ2VkKHN0YXJ0OiBJbnN0YW50KSB7XG4gICAgdGhpcy51cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgICBJbnRlcnZhbC5vZihcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHRoaXMuaW5zdGFudEF0RW5kT2ZEYXkoc3RhcnQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkRheVRpbWVFbmRUaW1lQ2hhbmdlZChlbmRUaW1lOiBMb2NhbFRpbWUpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuaW50ZXJ2YWwuc3RhcnQ7XG4gICAgY29uc3QgZW5kID0gdGhpcy5pbnN0YW50V2l0aFRpbWUoc3RhcnQsIGVuZFRpbWUpO1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHN0YXJ0LFxuICAgICAgICAhZW5kLmlzQWZ0ZXIoc3RhcnQpID8gdGhpcy5pbnN0YW50QXRFbmRPZkRheShzdGFydCkgOiBlbmRcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uU3RhcnRDaGFuZ2VkKHN0YXJ0OiBJbnN0YW50KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgICBJbnRlcnZhbC5vZihcbiAgICAgICAgc3RhcnQsXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwuZW5kXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkVuZENoYW5nZWQoZW5kOiBJbnN0YW50KTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgICBJbnRlcnZhbC5vZihcbiAgICAgICAgdGhpcy5pbnRlcnZhbC5zdGFydCxcbiAgICAgICAgZW5kXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBvblN0YXJ0RGF0ZUNoYW5nZWQodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMudG9Mb2NhbERhdGUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHRoaXMubG9jYWxEYXRlVG9JbnN0YW50KGRhdGUpLFxuICAgICAgICB0aGlzLmludGVydmFsPy5lbmRcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uRW5kRGF0ZUNoYW5nZWQodmFsdWU6IERhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXMudG9Mb2NhbERhdGUodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlQ29lcmNlZFZhbHVlKFxuICAgICAgSW50ZXJ2YWwub2YoXG4gICAgICAgIHRoaXMuaW50ZXJ2YWw/LnN0YXJ0LFxuICAgICAgICB0aGlzLmxvY2FsRGF0ZVRvSW5zdGFudChkYXRlKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgb25TaW5nbGVEYXlEYXRlQ2hhbmdlZChkYXRlOiBMb2NhbERhdGUpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZUNvZXJjZWRWYWx1ZShcbiAgICAgIEludGVydmFsLm9mRGF5KGRhdGUsIHRoaXMuem9uZSlcbiAgICApO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgbWV0aG9kcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSB1cGRhdGVDb2VyY2VkVmFsdWUoXG4gICAgdmFsdWU6IEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHIgfCB1bmRlZmluZWQgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlVmFsdWUodGhpcy5jb2VyY2VWYWx1ZSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YW50QXRTdGFydE9mRGF5Tm93KCk6IEluc3RhbnQge1xuICAgIHJldHVybiBMb2NhbERhdGUubm93KCkuYXRTdGFydE9mRGF5KCkuYXRab25lKHRoaXMuem9uZSkudG9JbnN0YW50KCk7XG4gIH1cblxuICBwcml2YXRlIGluc3RhbnRBdEVuZE9mRGF5KGluc3RhbnQ6IEluc3RhbnQpOiBJbnN0YW50IHtcbiAgICByZXR1cm4gTG9jYWxEYXRlLm9mSW5zdGFudChpbnN0YW50KS5hdFN0YXJ0T2ZEYXkoKS5wbHVzRGF5cygxKS5hdFpvbmUodGhpcy56b25lKS50b0luc3RhbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9jYWxEYXRlVG9JbnN0YW50KGRhdGU6IExvY2FsRGF0ZSk6IEluc3RhbnQgfCB1bmRlZmluZWQge1xuICAgIGlmIChkYXRlKSB7XG4gICAgICByZXR1cm4gZGF0ZS5hdFN0YXJ0T2ZEYXkoKS5hdFpvbmUodGhpcy56b25lKS50b0luc3RhbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsdWVzRXF1YWxzKFxuICAgIGE6IEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHIgfCB1bmRlZmluZWQgfCBudWxsLFxuICAgIGI6IEludGVydmFsIHwgSXNvSW50ZXJ2YWxTdHIgfCB1bmRlZmluZWQgfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFJbnRlcnZhbCA9IGNvZXJjZUludGVydmFsKGEpO1xuICAgIGNvbnN0IGJJbnRlcnZhbCA9IGNvZXJjZUludGVydmFsKGIpO1xuICAgIHJldHVybiAoYUludGVydmFsICYmIGJJbnRlcnZhbClcbiAgICAgID8gYUludGVydmFsLmVxdWFscyhiSW50ZXJ2YWwpXG4gICAgICA6IGFJbnRlcnZhbCA9PT0gYkludGVydmFsO1xuICB9XG5cbiAgcHJpdmF0ZSBpbnN0YW50V2l0aFRpbWUoaW5zdGFudDogSW5zdGFudCwgdGltZTogTG9jYWxUaW1lKTogSW5zdGFudCB7XG4gICAgcmV0dXJuIGluc3RhbnRcbiAgICAgIC5hdFpvbmUodGhpcy56b25lKVxuICAgICAgLndpdGhIb3VyKHRpbWUuaG91cigpKVxuICAgICAgLndpdGhNaW51dGUodGltZS5taW51dGUoKSlcbiAgICAgIC50b0luc3RhbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9Mb2NhbERhdGUodmFsdWU6IERhdGUpOiBMb2NhbERhdGUgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHZhbHVlID8gVGltZVV0aWwuZGF0ZVRvTG9jYWxEYXRlKHZhbHVlKSA6IG51bGw7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKCdGYWlsZWQgdG8gYXBwbHkgdmFsdWUgdG8gZGF0ZVZhbHVlOiAnICsgdmFsdWUsIGVycik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcElnbm9yZUVycm9yT2JzZXJ2YWJsZTxUPihcbiAgICBkYXRlOiBPYnNlcnZhYmxlPExvY2FsRGF0ZT4sXG4gICAgY29udmVyc2lvbkZuOiAoZDogTG9jYWxEYXRlKSA9PiBUXG4gICk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gZGF0ZS5waXBlKFxuICAgICAgbWFwKGxvY2FsRGF0ZSA9PiBsb2NhbERhdGUgPyBjb252ZXJzaW9uRm4obG9jYWxEYXRlKSA6IG51bGwpLFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgbG9jYWwgZGF0ZSEnLCBlcnIpO1xuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvZXJjZVZhbHVlKFxuICAgIHZhbHVlOiBJbnRlcnZhbCB8IElzb0ludGVydmFsU3RyIHwgdW5kZWZpbmVkIHwgbnVsbFxuICApOiBJbnRlcnZhbCB8IElzb0ludGVydmFsU3RyIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMudmFsdWVBc0lzb1N0cikge1xuICAgICAgcmV0dXJuIGNvZXJjZUludGVydmFsSXNvU3RyKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGNvZXJjZUludGVydmFsKHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbiIsIkBzd2l0Y2ggKG1vZGUpIHtcblxuICBAY2FzZSAoJ2RhdGUtdGltZS1yYW5nZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvd1wiPlxuICAgICAgPGVsZGVyLWRhdGUtdGltZS1pbnB1dCBjbGFzcz1cImZsZXhcIiBjZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIihpbnRlcnZhbCQgfCBhc3luYyk/LnN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvblN0YXJ0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLmZyb20nIHwgdHJhbnNsYXRlKVwiXG4gICAgICA+PC9lbGRlci1kYXRlLXRpbWUtaW5wdXQ+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdC1kYXRlLXJhbmdlLWlucHV0LXNlcGFyYXRvciBmbGV4LW5vbmVcIj7igJM8L3NwYW4+XG4gICAgICA8ZWxkZXItZGF0ZS10aW1lLWlucHV0IGNsYXNzPVwiZmxleFwiIGNlbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiKGludGVydmFsJCB8IGFzeW5jKT8uZW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvbkVuZENoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIocGxhY2Vob2xkZXIgfHwgJycpICsgJyAnICsgKCdpbnRlcnZhbC50bycgfCB0cmFuc2xhdGUpXCJcbiAgICAgID48L2VsZGVyLWRhdGUtdGltZS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgfVxuICBAY2FzZSAoJ2RheS10aW1lLXJhbmdlJykge1xuICAgIDxkaXYgY2xhc3M9XCJsYXlvdXQtcm93IGdhcC14cyBlbGRlci1mbGV4LWludGVydmFsLWNvbnRyb2xcIj5cblxuICAgICAgPCEtLSAgW25hbWVdPVwibmFtZSArICctZGF5LXN0YXJ0J1wiIC0tPlxuICAgICAgPGVsZGVyLWRhdGUtdGltZS1pbnB1dFxuICAgICAgICBbdmFsdWVdPVwiKGludGVydmFsJCB8IGFzeW5jKT8uc3RhcnRcIlxuICAgICAgICAodmFsdWVVcGRhdGVkKT1cIm9uRGF5VGltZVN0YXJ0Q2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLmZyb20nIHwgdHJhbnNsYXRlKVwiXG4gICAgICA+PC9lbGRlci1kYXRlLXRpbWUtaW5wdXQ+XG5cbiAgICAgIDwhLS0gW25hbWVdPVwibmFtZSArICctZGF5LWVuZCdcIiAtLT5cbiAgICAgIDxlbGRlci1sb2NhbC10aW1lLWlucHV0XG4gICAgICAgIFt2YWx1ZV09XCJlbmRUaW1lJCB8IGFzeW5jXCJcbiAgICAgICAgKHZhbHVlVXBkYXRlZCk9XCJvbkRheVRpbWVFbmRUaW1lQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIihwbGFjZWhvbGRlciB8fCAnJykgKyAnICcgKyAoJ2ludGVydmFsLnRvJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgPjwvZWxkZXItbG9jYWwtdGltZS1pbnB1dD5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBjYXNlICgnZGF0ZS1yYW5nZScpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvdyBnYXAteHMgZWxkZXItZmxleC1pbnRlcnZhbC1jb250cm9sXCI+XG5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dFxuICAgICAgICBjbGFzcz1cIm1kYy10ZXh0LWZpZWxkX19pbnB1dFwiXG4gICAgICAgIFtyYW5nZVBpY2tlcl09XCJwaWNrZXJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiISFkaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGVcbiAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRlZm9ybWF0XCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInN0YXJ0RGF0ZSQgfCBhc3luY1wiIG5hbWU9XCJkYXRlLXJhbmdlLnN0YXJ0XCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUsIHVwZGF0ZU9uOiAnYmx1cid9XCJcbiAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU3RhcnREYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFkaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgPGlucHV0IG1hdEVuZERhdGVcbiAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRlZm9ybWF0XCJcbiAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImVuZERhdGUkIHwgYXN5bmNcIiBuYW1lPVwiZGF0ZS1yYW5nZS5lbmRcIlxuICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSwgdXBkYXRlT246ICdibHVyJ31cIlxuICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25FbmREYXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFkaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIGNsYXNzPVwiZWxkZXItY29udHJvbC1pY29uLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0xvY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JdPVwicGlja2VyXCI+XG4gICAgICAgIDxtYXQtaWNvbiBtYXREYXRlcGlja2VyVG9nZ2xlSWNvbj5jYWxlbmRhcl9tb250aDwvbWF0LWljb24+XG4gICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIEBjYXNlICgnc2luZ2xlLWRheScpIHtcbiAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LXJvdyBlbGRlci1mbGV4LWNvbnRyb2xcIj5cblxuICAgICAgPCEtLSBbbmFtZV09XCJuYW1lXCIgLS0+XG4gICAgICA8ZWxkZXItbG9jYWwtZGF0ZS1pbnB1dCBjbGFzcz1cImZsZXhcIiBjZW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzdGFydExvY2FsRGF0ZSQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVVcGRhdGVkKT1cIm9uU2luZ2xlRGF5RGF0ZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiKHBsYWNlaG9sZGVyIHx8ICcnKVwiXG4gICAgICA+PC9lbGRlci1sb2NhbC1kYXRlLWlucHV0PlxuICAgIDwvZGl2PlxuICB9XG59XG5cblxuXG5cblxuXG4iXX0=
@@ -1380,7 +1380,7 @@ class Interval {
1380
1380
  static parse(iso) {
1381
1381
  const parts = iso.split('/');
1382
1382
  if (parts.length !== 2) {
1383
- throw new Error('The given string is not a valid iso interval: ' + iso);
1383
+ throw new Error('The given string is not a valid iso interval: "' + iso + '"');
1384
1384
  }
1385
1385
  const start = parts[0] ? Instant.parse(parts[0]) : null;
1386
1386
  const endStr = parts[1];
@@ -2229,6 +2229,35 @@ class BytesPerSecondFormat {
2229
2229
  }
2230
2230
  }
2231
2231
 
2232
+ function coerceInterval(value) {
2233
+ if (value) {
2234
+ if (value instanceof Interval) {
2235
+ return value;
2236
+ }
2237
+ else if (((typeof value) === 'string') && value.length > 0) {
2238
+ return Interval.parse(value);
2239
+ }
2240
+ else {
2241
+ this.logger.warn('Unsupported value that cant be converted to Interval: "' + value + '"');
2242
+ }
2243
+ }
2244
+ return undefined;
2245
+ }
2246
+ function coerceIntervalIsoStr(value) {
2247
+ if (value) {
2248
+ if (value instanceof Interval) {
2249
+ return value.toInstantString();
2250
+ }
2251
+ else if ((typeof value) === 'string') {
2252
+ return coerceInterval(value)?.toInstantString();
2253
+ }
2254
+ else {
2255
+ this.logger.warn('Unsupported value that cant be converted to Iso Interval Str: "' + value + '"');
2256
+ }
2257
+ }
2258
+ return undefined;
2259
+ }
2260
+
2232
2261
  class DateUtil {
2233
2262
  static { this.IsoDateDelimiter = '-'; }
2234
2263
  static { this.IsoTimeDelimiter = ':'; }
@@ -25494,7 +25523,7 @@ class ElderIntervalInputComponent extends ElderFormFieldControlBase {
25494
25523
  this._mode = 'date-time-range';
25495
25524
  this.zone = ZoneId.systemDefault();
25496
25525
  this.controlType = this._mode;
25497
- this.interval$ = this.value$.pipe(map(value => this.coerceInterval(value)));
25526
+ this.interval$ = this.value$.pipe(map(value => coerceInterval(value)));
25498
25527
  this.endTime$ = this.interval$.pipe(map(interval => interval?.end ? LocalTime.from(interval.end.atZone(this.zone)) : null));
25499
25528
  this.startLocalDate$ = this.interval$.pipe(map(interval => interval?.start ? LocalDate.from(interval.start.atZone(this.zone)) : null));
25500
25529
  this.endLocalDate$ = this.interval$.pipe(map(interval => interval?.end ? LocalDate.from(interval.end.atZone(this.zone)) : null));
@@ -25521,7 +25550,7 @@ class ElderIntervalInputComponent extends ElderFormFieldControlBase {
25521
25550
  return this._mode;
25522
25551
  }
25523
25552
  get isoValueChange() {
25524
- return this.valueChange.pipe(map(value => this.coerceIsoStr(value)));
25553
+ return this.valueChange.pipe(map(value => coerceIntervalIsoStr(value)));
25525
25554
  }
25526
25555
  set isoValue(value) {
25527
25556
  this.value = value ? this.coerceValue(value) : null;
@@ -25530,7 +25559,7 @@ class ElderIntervalInputComponent extends ElderFormFieldControlBase {
25530
25559
  return true;
25531
25560
  }
25532
25561
  get interval() {
25533
- return this.coerceInterval(this.value);
25562
+ return coerceInterval(this.value);
25534
25563
  }
25535
25564
  /***************************************************************************
25536
25565
  * *
@@ -25593,8 +25622,8 @@ class ElderIntervalInputComponent extends ElderFormFieldControlBase {
25593
25622
  }
25594
25623
  }
25595
25624
  valuesEquals(a, b) {
25596
- const aInterval = this.coerceInterval(a);
25597
- const bInterval = this.coerceInterval(b);
25625
+ const aInterval = coerceInterval(a);
25626
+ const bInterval = coerceInterval(b);
25598
25627
  return (aInterval && bInterval)
25599
25628
  ? aInterval.equals(bInterval)
25600
25629
  : aInterval === bInterval;
@@ -25623,32 +25652,10 @@ class ElderIntervalInputComponent extends ElderFormFieldControlBase {
25623
25652
  }
25624
25653
  coerceValue(value) {
25625
25654
  if (this.valueAsIsoStr) {
25626
- return this.coerceIsoStr(value);
25627
- }
25628
- else {
25629
- return this.coerceInterval(value);
25630
- }
25631
- }
25632
- coerceInterval(value) {
25633
- if (value instanceof Interval) {
25634
- return value;
25635
- }
25636
- else if ((typeof value) === 'string') {
25637
- return Interval.parse(value);
25638
- }
25639
- else {
25640
- return undefined;
25641
- }
25642
- }
25643
- coerceIsoStr(value) {
25644
- if (value instanceof Interval) {
25645
- return value.toInstantString();
25646
- }
25647
- else if ((typeof value) === 'string') {
25648
- return value;
25655
+ return coerceIntervalIsoStr(value);
25649
25656
  }
25650
25657
  else {
25651
- return undefined;
25658
+ return coerceInterval(value);
25652
25659
  }
25653
25660
  }
25654
25661
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ElderIntervalInputComponent, deps: [{ token: i0.ElementRef }, { token: i0.NgZone }, { token: i1$1.FocusMonitor }, { token: i2.TranslateService }, { token: i3.NgControl, optional: true, self: true }, { token: i4.DateAdapter }, { token: MAT_DATE_LOCALE }], target: i0.ɵɵFactoryTarget.Component }); }
@@ -27207,6 +27214,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
27207
27214
  }]
27208
27215
  }], ctorParameters: () => [] });
27209
27216
 
27217
+ class ElderOverlayRef {
27218
+ /***************************************************************************
27219
+ * *
27220
+ * Constructor *
27221
+ * *
27222
+ **************************************************************************/
27223
+ constructor(overlay) {
27224
+ this.overlay = overlay;
27225
+ if (!overlay) {
27226
+ throw new Error('ElderOverlayComponent is required!');
27227
+ }
27228
+ }
27229
+ /***************************************************************************
27230
+ * *
27231
+ * Properties *
27232
+ * *
27233
+ **************************************************************************/
27234
+ get attached() {
27235
+ return this.overlay.attached;
27236
+ }
27237
+ /***************************************************************************
27238
+ * *
27239
+ * Public API *
27240
+ * *
27241
+ **************************************************************************/
27242
+ attachedChange() {
27243
+ return this.overlay.attachedChange;
27244
+ }
27245
+ close() {
27246
+ this.overlay.closeOverlay();
27247
+ }
27248
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ElderOverlayRef, deps: [{ token: ElderOverlayComponent }], target: i0.ɵɵFactoryTarget.Injectable }); }
27249
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ElderOverlayRef }); }
27250
+ }
27251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ElderOverlayRef, decorators: [{
27252
+ type: Injectable
27253
+ }], ctorParameters: () => [{ type: ElderOverlayComponent }] });
27254
+
27210
27255
  class OverlayShowOptions {
27211
27256
  }
27212
27257
  class ElderOverlayComponent {
@@ -27355,7 +27400,15 @@ class ElderOverlayComponent {
27355
27400
  return this._overlayRef.attach(searchPanelPortal);
27356
27401
  }
27357
27402
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ElderOverlayComponent, deps: [{ token: i0.ViewContainerRef }, { token: i1$c.Overlay }, { token: i1$c.OverlayPositionBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
27358
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: ElderOverlayComponent, isStandalone: true, selector: "elder-overlay", inputs: { originX: "originX", originY: "originY", overlayX: "overlayX", overlayY: "overlayY", offsetY: "offsetY", offsetX: "offsetX", backdrop: "backdrop", backdropVisible: "backdropVisible", origin: "origin", positionStrategy: "positionStrategy", overlaySize: "overlaySize" }, outputs: { keydownEvents: "keydownEvents", attachedChange: "attachedChange" }, viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true, static: true }], exportAs: ["elderOverlay"], ngImport: i0, template: `
27403
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.4", type: ElderOverlayComponent, isStandalone: true, selector: "elder-overlay", inputs: { originX: "originX", originY: "originY", overlayX: "overlayX", overlayY: "overlayY", offsetY: "offsetY", offsetX: "offsetX", backdrop: "backdrop", backdropVisible: "backdropVisible", origin: "origin", positionStrategy: "positionStrategy", overlaySize: "overlaySize" }, outputs: { keydownEvents: "keydownEvents", attachedChange: "attachedChange" }, providers: [
27404
+ {
27405
+ provide: ElderOverlayRef,
27406
+ useFactory: (self) => {
27407
+ return new ElderOverlayRef(self);
27408
+ },
27409
+ deps: [ElderOverlayComponent]
27410
+ }
27411
+ ], viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true, static: true }], exportAs: ["elderOverlay"], ngImport: i0, template: `
27359
27412
  <ng-template>
27360
27413
  <ng-content></ng-content>
27361
27414
  </ng-template>
@@ -27372,7 +27425,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
27372
27425
  </ng-template>
27373
27426
  `,
27374
27427
  changeDetection: ChangeDetectionStrategy.OnPush,
27375
- standalone: true
27428
+ standalone: true,
27429
+ providers: [
27430
+ {
27431
+ provide: ElderOverlayRef,
27432
+ useFactory: (self) => {
27433
+ return new ElderOverlayRef(self);
27434
+ },
27435
+ deps: [ElderOverlayComponent]
27436
+ }
27437
+ ],
27376
27438
  }]
27377
27439
  }], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i1$c.Overlay }, { type: i1$c.OverlayPositionBuilder }], propDecorators: { templateRef: [{
27378
27440
  type: ViewChild,
@@ -32265,5 +32327,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImpor
32265
32327
  * Generated bundle index. Do not edit.
32266
32328
  */
32267
32329
 
32268
- export { ActivationEventSource, Arrays, AuditedEntity, AutoStartSpec, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, ComparatorBuilder, ConfirmDialogConfig, ContinuableListing, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, Currency, CurrencyCode, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceEventBinding, DataContextStateIndicatorComponent, DataContextStatus, DataSourceAdapter, DataSourceBase, DataSourceChangeEvent, DataSourceChangeType, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DataViewIframeAdapterDirective, DataViewIframeComponent, DataViewMessage, DataViewMessageTypeValues, DataViewOptionsProviderBinding, DataViewSelection, DataViewSelectionInit, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DrawerOutletBinding, DurationBucket, DurationFormat, ELDER_DATA_VIEW, ELDER_SELECT_BASE, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutoSelectFirstDirective, ElderAutocompleteComponent, ElderAutocompleteDirective, ElderAutocompleteManyDirective, ElderAutocompleteModule, ElderBadgeChipAvatarDirective, ElderBadgeChipDirective, ElderBadgeComponent, ElderBadgeDirective, ElderBadgeModule, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCheckboxState, ElderChipLabelDirective, ElderChipListSelectComponent, ElderChipListSelectModule, ElderChipsModule, ElderClearSelectDirective, ElderClipboardPutDirective, ElderClipboardService, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewOptions, ElderDataViewOptionsProvider, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDelayedFocusDirective, ElderDeleteActiveDirective, ElderDetailDialogComponent, ElderDetailDirective, ElderDialogConfig, ElderDialogModule, ElderDialogPanelComponent, ElderDialogService, ElderDimensionsInputComponent, ElderDropZoneComponent, ElderDurationInputComponent, ElderEntityValueAccessorUtil, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFormFieldControlBase, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoHintDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderFromFieldBase, ElderFromFieldEntityBase, ElderFromFieldMultiEntityBase, ElderGlobalSearchComponent, ElderGlobalSearchModule, ElderGlobalSearchService, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderHttpClient, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollModule, ElderInputPatternDirective, ElderIntervalInputComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderMasterActivationDirective, ElderMasterDetailComponent, ElderMasterDetailModule, ElderMasterDetailService, ElderMasterDirective, ElderMaxValidator, ElderMeasuresModule, ElderMinValidator, ElderMultiEntityValueAccessorUtil, ElderMultiSelectAllInitialDirective, ElderMultiSelectBase, ElderMultiSelectChipOptionsComponent, ElderMultiSelectChipsComponent, ElderMultiSelectFormField, ElderMultipleOfUtil, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPanelComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityFormFieldComponent, ElderQuantityInputControlComponent, ElderQuantityModule, ElderQuantityPipe, ElderQuantityRangeValidator, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRepeatPipeLegacy, ElderRequiredDimensionsValidator, ElderRequiredIgnoreZeroValidator, ElderRequiredQuantityValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderRouterService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderScrollbarDirective, ElderScrollbarModule, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSearchUrlDirective, ElderSelectBase, ElderSelectChipAvatarDirective, ElderSelectChipDirective, ElderSelectComponent, ElderSelectComponentState, ElderSelectCustomInputDirective, ElderSelectFormField, ElderSelectModule, ElderSelectOnTabDirective, ElderSelectOptionComponent, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderSelectionPopupTriggerAdapterDirective, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSingleSortComponent, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableProviders, ElderTableRootDirective, ElderTableSortDirective, ElderTableToolbarDirective, ElderThemeApplierDirective, ElderThemeDirective, ElderThemeModule, ElderThemePreferenceService, ElderThemeService, ElderThemeToggleComponent, ElderTimeModule, ElderToastModule, ElderToastService, ElderTogglePanelComponent, ElderTogglePanelPrimaryDirective, ElderTogglePanelSecondaryDirective, ElderTogglePanelTriggerDirective, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTrimPipe, ElderTripleStateCheckboxDirective, ElderTruncatePipe, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderValidationErrorDirective, ElderViewersModule, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FileEntry, FileListingRx, FileUploadClient, Filter, FilterContext, FilterUtil, FocusUtil, FormFieldBaseComponent, GlobalDragDropService, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, IndexedEntities, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalParsePipe, IsoIntervalPipe, ItemActivationEvent, ItemActivationOptions, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownElderThemes, KnownLocaleTags, LocalListDataSource, LocalPagedDataSource, LocalisationPickerService, MasterDetailActivationEvent, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, MultiModelBaseComponent, NextNumberUtil, Objects, OnlineStatus, Page, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveEventSourceState, ReactiveFetchEventSource, ReactiveFetchEventSourceService, ReactiveMap, ReactiveSSeMessage, RefreshingEntity, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, SearchQuery, SelectChipSpecUtil, SelectOptionChipSpecUtil, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, Sort, SortOption, SortUtil, StandardToastComponent, SubBar, SuggestionProvider, TemplateCompositeControl, TemplatedSelectionDialogComponent, ThemeSpec, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToIsoDateStringPipe, ToastType, TokenChunkRequest, ToolbarHeader, Translated, TranslatedConverter, TranslatedEnumValue, TranslatedText, TypedEventMessage, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueWrapper, ViewProviders, WeightPipe, alphaNumStringComparator, buildFormIntegrationProviders, createDataOptionsProvider, createSelectionModel, existingOrNewElderTableModel, initSearchUrlService, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isDataViewMessageType, isElderEntityValueAccessor, isElderMultiEntityValueAccessor, isListDataSource, isPagedDataSource, lazySample, lazySampleTime, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone, themeInit };
32330
+ export { ActivationEventSource, Arrays, AuditedEntity, AutoStartSpec, BlobUrl, BytesFormat, BytesPerSecondFormat, BytesPipe, CardDropEvent, CardOrganizerData, CardStack, CollectionUtil, ComparatorBuilder, ConfirmDialogConfig, ContinuableListing, CsvColumnSpec, CsvSerializer, CsvSpec, CsvStreamExporter, CsvStreamExporterBuilder, CsvStreamExporterBuilderService, Currency, CurrencyCode, CurrencyUnit, CurrencyUnitRegistry, CustomDateAdapter, DataContextActivePage, DataContextAutoStarter, DataContextBase, DataContextBuilder, DataContextContinuableBase, DataContextContinuablePaged, DataContextContinuableToken, DataContextLifeCycleBinding, DataContextSelectionDirective, DataContextSimple, DataContextSnapshot, DataContextSourceEventBinding, DataContextStateIndicatorComponent, DataContextStatus, DataSourceAdapter, DataSourceBase, DataSourceChangeEvent, DataSourceChangeType, DataSourceProcessor, DataTransferFactory, DataTransferProgress, DataTransferProgressAggregate, DataTransferState, DataTransferStatus, DataViewIframeAdapterDirective, DataViewIframeComponent, DataViewMessage, DataViewMessageTypeValues, DataViewOptionsProviderBinding, DataViewSelection, DataViewSelectionInit, DateUtil, DelegateContinuableDataSource, DelegateDataSource, DelegateListDataSource, DelegatePagedDataSource, Dimensions, DrawerOutletBinding, DurationBucket, DurationFormat, ELDER_DATA_VIEW, ELDER_SELECT_BASE, ElderAccessDeniedComponent, ElderAccessDeniedModule, ElderAppHeaderComponent, ElderAuditModule, ElderAuditedEntityComponent, ElderAutoSelectFirstDirective, ElderAutocompleteComponent, ElderAutocompleteDirective, ElderAutocompleteManyDirective, ElderAutocompleteModule, ElderBadgeChipAvatarDirective, ElderBadgeChipDirective, ElderBadgeComponent, ElderBadgeDirective, ElderBadgeModule, ElderBlobViewerComponent, ElderBreadCrumbsComponent, ElderBreadCrumbsModule, ElderButtonGroupComponent, ElderButtonGroupModule, ElderCardComponent, ElderCardContentDirective, ElderCardHeaderActionsDirective, ElderCardHeaderComponent, ElderCardModule, ElderCardOrganizerComponent, ElderCardOrganizerModule, ElderCardPanelComponent, ElderCardStackComponent, ElderCardSubtitleDirective, ElderCardTitleDirective, ElderCheckboxState, ElderChipLabelDirective, ElderChipListSelectComponent, ElderChipListSelectModule, ElderChipsModule, ElderClearSelectDirective, ElderClipboardPutDirective, ElderClipboardService, ElderConfirmDialogComponent, ElderConnectivityModule, ElderConnectivityService, ElderContainersModule, ElderCsvExportBtnComponent, ElderCsvModule, ElderCurrencyModule, ElderCurrencyPipe, ElderDataCommonModule, ElderDataToolbarComponent, ElderDataTransferModule, ElderDataTransferService, ElderDataViewBaseComponent, ElderDataViewOptions, ElderDataViewOptionsProvider, ElderDateSwitcherComponent, ElderDateTimeInputComponent, ElderDelayedFocusDirective, ElderDeleteActiveDirective, ElderDetailDialogComponent, ElderDetailDirective, ElderDialogConfig, ElderDialogModule, ElderDialogPanelComponent, ElderDialogService, ElderDimensionsInputComponent, ElderDropZoneComponent, ElderDurationInputComponent, ElderEntityValueAccessorUtil, ElderEnumTranslationService, ElderErrorModule, ElderEventSourceService, ElderExceptionDetailComponent, ElderExpandToggleButtonComponent, ElderExpandToggleButtonModule, ElderFileDropZoneDirective, ElderFileModule, ElderFileSelectComponent, ElderFileSelectDirective, ElderFileUploadComponent, ElderFormFieldControlBase, ElderFormFieldDenseDirective, ElderFormFieldLabelDirective, ElderFormFieldNoHintDirective, ElderFormFieldNoSpinnerDirective, ElderFormsDirectivesModule, ElderFormsModule, ElderFromFieldBase, ElderFromFieldEntityBase, ElderFromFieldMultiEntityBase, ElderGlobalSearchComponent, ElderGlobalSearchModule, ElderGlobalSearchService, ElderGridComponent, ElderGridModule, ElderGridTileDirective, ElderGridToolbarDirective, ElderHeaderComponent, ElderHeaderModule, ElderHttpClient, ElderI18nEntitiesModule, ElderIFrameModule, ElderInfiniteAutocompleteDirective, ElderInfiniteScrollDirective, ElderInfiniteScrollModule, ElderInputPatternDirective, ElderIntervalInputComponent, ElderKeyEventDirective, ElderLabelInputComponent, ElderLabelsModule, ElderLanguageConfig, ElderLanguageInterceptor, ElderLanguageModule, ElderLanguageService, ElderLanguageSwitcherComponent, ElderLocalDateInputComponent, ElderLocalTimeInputComponent, ElderLocalesDeChModule, ElderLocalizedInputComponent, ElderLocalizedInputDialogComponent, ElderLocalizedInputDialogService, ElderLocalizedInputTableComponent, ElderLocalizedTextColumnDirective, ElderLocalizedTextsDirective, ElderMasterActivationDirective, ElderMasterDetailComponent, ElderMasterDetailModule, ElderMasterDetailService, ElderMasterDirective, ElderMaxValidator, ElderMeasuresModule, ElderMinValidator, ElderMultiEntityValueAccessorUtil, ElderMultiSelectAllInitialDirective, ElderMultiSelectBase, ElderMultiSelectChipOptionsComponent, ElderMultiSelectChipsComponent, ElderMultiSelectFormField, ElderMultipleOfUtil, ElderMultipleOfValidator, ElderNavGroupComponent, ElderNavLinkComponent, ElderNavListComponent, ElderNavModule, ElderNextFocusableDirective, ElderNumberCellDirective, ElderOfflineIndicatorComponent, ElderOverlayComponent, ElderOverlayModule, ElderOverlayOriginDirective, ElderOverlayRef, ElderOverlayTriggerDirective, ElderPaddingDirective, ElderPanelComponent, ElderPanelModule, ElderPeriodInputComponent, ElderPipesModule, ElderPlugParentFormDirective, ElderProgressBarComponent, ElderProgressBarModule, ElderQuantityFormFieldComponent, ElderQuantityInputControlComponent, ElderQuantityModule, ElderQuantityPipe, ElderQuantityRangeValidator, ElderQuantityService, ElderQuantityTransformPipe, ElderQuestionDialogComponent, ElderRepeatPipe, ElderRepeatPipeLegacy, ElderRequiredDimensionsValidator, ElderRequiredIgnoreZeroValidator, ElderRequiredQuantityValidator, ElderRoundPipe, ElderRouteOutletDrawerService, ElderRouterOutletService, ElderRouterService, ElderSafeUrlPipe, ElderScrollContainerComponent, ElderScrollbarDirective, ElderScrollbarModule, ElderSearchBoxComponent, ElderSearchContextDirective, ElderSearchInputDirective, ElderSearchModule, ElderSearchPanelComponent, ElderSearchUrlDirective, ElderSelectBase, ElderSelectChipAvatarDirective, ElderSelectChipDirective, ElderSelectComponent, ElderSelectComponentState, ElderSelectCustomInputDirective, ElderSelectFormField, ElderSelectModule, ElderSelectOnTabDirective, ElderSelectOptionComponent, ElderSelectValueDirective, ElderSelectionDialogComponent, ElderSelectionDialogDirective, ElderSelectionMasterCheckboxComponent, ElderSelectionPopupTriggerAdapterDirective, ElderShellCenterDirective, ElderShellComponent, ElderShellModule, ElderShellNavigationToggleComponent, ElderShellService, ElderShellSideLeftDirective, ElderShellSideRightDirective, ElderShellSlotDirective, ElderSimpleSelectionViewComponent, ElderSimpleSelectionViewModule, ElderSingleSortComponent, ElderStackCardDirective, ElderStopEventPropagationDirective, ElderSvgViewerComponent, ElderTabDirective, ElderTabFocusTrapDirective, ElderTabGroupRoutingDirective, ElderTabModule, ElderTableActivationDirective, ElderTableComponent, ElderTableExtensionDirective, ElderTableGroup, ElderTableModel, ElderTableModelCdkTableBinding, ElderTableModelQueryGroup, ElderTableModule, ElderTableProviders, ElderTableRootDirective, ElderTableSortDirective, ElderTableToolbarDirective, ElderThemeApplierDirective, ElderThemeDirective, ElderThemeModule, ElderThemePreferenceService, ElderThemeService, ElderThemeToggleComponent, ElderTimeModule, ElderToastModule, ElderToastService, ElderTogglePanelComponent, ElderTogglePanelPrimaryDirective, ElderTogglePanelSecondaryDirective, ElderTogglePanelTriggerDirective, ElderToolbarColumnDirective, ElderToolbarComponent, ElderToolbarContentDirective, ElderToolbarModule, ElderToolbarService, ElderToolbarTitleComponent, ElderToolbarTitleService, ElderTouchedDirective, ElderTrimPipe, ElderTripleStateCheckboxDirective, ElderTruncatePipe, ElderUnitSelectDirective, ElderUnitService, ElderUrlFragment, ElderUrlFragmentModule, ElderUrlFragmentParamsService, ElderUrlFragmentSwitcherComponent, ElderValidationErrorDirective, ElderViewersModule, EntitySetPatch, ErrorUtil, ExceptionDetailCtx, FileEntry, FileListingRx, FileUploadClient, Filter, FilterContext, FilterUtil, FocusUtil, FormFieldBaseComponent, GlobalDragDropService, HttpClientBuilder, HttpClientPristine, HttpDataTransfer, HttpDataTransferAggregateComponent, HttpDataTransferComponent, HttpDataTransferIndicatorComponent, HttpDataTransferOverviewComponent, HttpParamsBuilder, I18nBase, I18nPickAsyncPipe, I18nPickPipe, I18nText, IFrameState, IframeCloseDirective, IframeDialogComponent, IframeHostComponent, IframeService, IframeSideContentComponent, IndexedEntities, InternalRestClientConfig, Interval, IsoDurationPipe, IsoIntervalParsePipe, IsoIntervalPipe, ItemActivationEvent, ItemActivationOptions, JsonMapUtil, KafentConfig, KafentEvent, KafentEventService, KafentEventStream, KafentEventStreamDisabled, KafentEventStreamSse, KafentEventTransport, KafentModule, KafentSseEventChannel, KafentTokenProvider, KafentTokenProviderSessionStorage, KafentTopicSse, KnownElderThemes, KnownLocaleTags, LocalListDataSource, LocalPagedDataSource, LocalisationPickerService, MasterDetailActivationEvent, MasterSelectionState, MatTableDataContextBinding, MatTableDataContextBindingBuilder, MultiModelBaseComponent, NextNumberUtil, Objects, OnlineStatus, Page, PageRequest, Pageable, ParseUtil, Path, PathNode, PeriodBucket, PeriodDuration, PeriodFormat, ProcessIterationContext, ProcessState, PropertyPathUtil, Quantity, QueryListBinding, QuestionDialogConfig, ReactiveEventSource, ReactiveEventSourceState, ReactiveFetchEventSource, ReactiveFetchEventSourceService, ReactiveMap, ReactiveSSeMessage, RefreshingEntity, RestClient, RestClientConfig, RestClientContinuable, RestClientList, RestClientPaged, SearchQuery, SelectChipSpecUtil, SelectOptionChipSpecUtil, SelectionModel, SelectionModelPopupDirective, Sets, SimpleLocalisationPicker, Sort, SortOption, SortUtil, StandardToastComponent, SubBar, SuggestionProvider, TemplateCompositeControl, TemplatedSelectionDialogComponent, ThemeSpec, TimeAgoPipe, TimeDurationPipe, TimeUtil, ToIsoDateStringPipe, ToastType, TokenChunkRequest, ToolbarHeader, Translated, TranslatedConverter, TranslatedEnumValue, TranslatedText, TypedEventMessage, Unit, UnitDimension, UnitDimensionInfo, UnitInfo, UnitRegistry, UrlBuilder, UrlQueryParams, UuidUtil, ValueAccessorBase, ValueWrapper, ViewProviders, WeightPipe, alphaNumStringComparator, buildFormIntegrationProviders, coerceInterval, coerceIntervalIsoStr, createDataOptionsProvider, createSelectionModel, existingOrNewElderTableModel, initSearchUrlService, isActivePagedDataContext, isContinuableDataContext, isContinuableDataSource, isDataContext, isDataSource, isDataViewMessageType, isElderEntityValueAccessor, isElderMultiEntityValueAccessor, isListDataSource, isPagedDataSource, lazySample, lazySampleTime, naturalValueComparator, newElderTableModel, proxyControlContainer, registerLocale, runInZone, themeInit };
32269
32331
  //# sourceMappingURL=elderbyte-ngx-starter.mjs.map