@acorex/core 7.17.26 → 7.17.28

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.
Files changed (111) hide show
  1. package/dateTime/index.d.ts +2 -0
  2. package/dateTime/lib/calendar.service.d.ts +6 -1
  3. package/dateTime/lib/datetime.class.d.ts +6 -5
  4. package/dateTime/lib/datetime.module.d.ts +0 -2
  5. package/dateTime/lib/datetime.pipe.d.ts +3 -0
  6. package/dateTime/lib/formatters/datetime-formatter.d.ts +19 -0
  7. package/dateTime/lib/formatters/timeleft-formatter.d.ts +16 -0
  8. package/esm2022/dateTime/index.mjs +3 -1
  9. package/esm2022/dateTime/lib/calendar.service.mjs +17 -9
  10. package/esm2022/dateTime/lib/dateTime.config.mjs +5 -28
  11. package/esm2022/dateTime/lib/datetime.class.mjs +66 -14
  12. package/esm2022/dateTime/lib/datetime.module.mjs +9 -11
  13. package/esm2022/dateTime/lib/datetime.pipe.mjs +5 -7
  14. package/esm2022/dateTime/lib/formatters/datetime-formatter.mjs +30 -0
  15. package/esm2022/dateTime/lib/formatters/timeleft-formatter.mjs +91 -0
  16. package/esm2022/file/lib/file-size-formatter.mjs +2 -2
  17. package/esm2022/file/lib/file.module.mjs +8 -10
  18. package/esm2022/format/index.mjs +3 -2
  19. package/esm2022/format/lib/format.config.mjs +3 -2
  20. package/esm2022/format/lib/format.module.mjs +22 -9
  21. package/esm2022/format/lib/format.pipe.mjs +5 -6
  22. package/esm2022/format/lib/format.service.mjs +57 -12
  23. package/esm2022/format/lib/format.types.mjs +2 -0
  24. package/esm2022/format/lib/formatters/number-formatter.mjs +75 -0
  25. package/esm2022/translation/index.mjs +7 -2
  26. package/esm2022/translation/lib/translation-scope.resolver.mjs +11 -0
  27. package/esm2022/translation/lib/translation.config.mjs +20 -0
  28. package/esm2022/translation/lib/translation.loader.mjs +14 -0
  29. package/esm2022/translation/lib/translation.module.mjs +29 -7
  30. package/esm2022/translation/lib/translation.service.mjs +105 -0
  31. package/esm2022/translation/lib/translation.types.mjs +2 -0
  32. package/esm2022/translation/lib/translator.directive.mjs +28 -0
  33. package/esm2022/translation/lib/translator.pipe.mjs +33 -7
  34. package/esm2022/validation/index.mjs +2 -2
  35. package/esm2022/validation/lib/rules/between-rule.mjs +8 -1
  36. package/esm2022/validation/lib/rules/callback-rule.mjs +8 -1
  37. package/esm2022/validation/lib/rules/equal-rule.mjs +8 -1
  38. package/esm2022/validation/lib/rules/greater-than.mjs +8 -1
  39. package/esm2022/validation/lib/rules/length-rule.mjs +9 -1
  40. package/esm2022/validation/lib/rules/less-than-rule.mjs +8 -1
  41. package/esm2022/validation/lib/rules/maxlength-rule.mjs +8 -1
  42. package/esm2022/validation/lib/rules/minlength-rule.mjs +8 -1
  43. package/esm2022/validation/lib/rules/regex-rule.mjs +13 -2
  44. package/esm2022/validation/lib/rules/required-rule.mjs +13 -3
  45. package/esm2022/validation/lib/validation.config.mjs +3 -4
  46. package/esm2022/validation/lib/validation.module.mjs +38 -12
  47. package/esm2022/validation/lib/validation.service.mjs +30 -16
  48. package/esm2022/validation/lib/validation.types.mjs +3 -0
  49. package/fesm2022/acorex-core-dateTime.mjs +110 -68
  50. package/fesm2022/acorex-core-dateTime.mjs.map +1 -1
  51. package/fesm2022/acorex-core-file.mjs +8 -9
  52. package/fesm2022/acorex-core-file.mjs.map +1 -1
  53. package/fesm2022/acorex-core-format.mjs +147 -55
  54. package/fesm2022/acorex-core-format.mjs.map +1 -1
  55. package/fesm2022/acorex-core-translation.mjs +212 -45
  56. package/fesm2022/acorex-core-translation.mjs.map +1 -1
  57. package/fesm2022/acorex-core-validation.mjs +131 -32
  58. package/fesm2022/acorex-core-validation.mjs.map +1 -1
  59. package/file/lib/file-size-formatter.d.ts +10 -2
  60. package/file/lib/file.module.d.ts +2 -3
  61. package/format/index.d.ts +2 -1
  62. package/format/lib/format.config.d.ts +4 -3
  63. package/format/lib/format.module.d.ts +9 -3
  64. package/format/lib/format.pipe.d.ts +2 -1
  65. package/format/lib/format.service.d.ts +26 -2
  66. package/format/lib/format.types.d.ts +4 -0
  67. package/format/lib/formatters/number-formatter.d.ts +23 -0
  68. package/package.json +1 -7
  69. package/translation/index.d.ts +6 -1
  70. package/translation/lib/translation-scope.resolver.d.ts +2 -0
  71. package/translation/lib/translation.config.d.ts +14 -0
  72. package/translation/lib/translation.loader.d.ts +14 -0
  73. package/translation/lib/translation.module.d.ts +2 -1
  74. package/translation/lib/translation.service.d.ts +26 -0
  75. package/translation/lib/translation.types.d.ts +10 -0
  76. package/translation/lib/translator.directive.d.ts +12 -0
  77. package/translation/lib/translator.pipe.d.ts +12 -4
  78. package/validation/index.d.ts +1 -1
  79. package/validation/lib/rules/between-rule.d.ts +5 -2
  80. package/validation/lib/rules/callback-rule.d.ts +5 -2
  81. package/validation/lib/rules/equal-rule.d.ts +5 -2
  82. package/validation/lib/rules/greater-than.d.ts +5 -2
  83. package/validation/lib/rules/length-rule.d.ts +5 -2
  84. package/validation/lib/rules/less-than-rule.d.ts +5 -2
  85. package/validation/lib/rules/maxlength-rule.d.ts +5 -2
  86. package/validation/lib/rules/minlength-rule.d.ts +5 -2
  87. package/validation/lib/rules/regex-rule.d.ts +6 -2
  88. package/validation/lib/rules/required-rule.d.ts +6 -2
  89. package/validation/lib/validation.config.d.ts +3 -3
  90. package/validation/lib/validation.module.d.ts +10 -4
  91. package/validation/lib/validation.service.d.ts +8 -3
  92. package/validation/lib/{validation.d.ts → validation.types.d.ts} +3 -3
  93. package/dateTime/lib/datetime-formatter.d.ts +0 -15
  94. package/esm2022/dateTime/lib/datetime-formatter.mjs +0 -109
  95. package/esm2022/format/lib/number-formatter.mjs +0 -16
  96. package/esm2022/format/lib/string-formatter.mjs +0 -26
  97. package/esm2022/intl/acorex-core-intl.mjs +0 -5
  98. package/esm2022/intl/index.mjs +0 -3
  99. package/esm2022/intl/lib/numbers/number-format-options.mjs +0 -10
  100. package/esm2022/intl/lib/numbers/numbers-utils.mjs +0 -39
  101. package/esm2022/translation/lib/translator.mjs +0 -42
  102. package/esm2022/validation/lib/validation.mjs +0 -2
  103. package/fesm2022/acorex-core-intl.mjs +0 -54
  104. package/fesm2022/acorex-core-intl.mjs.map +0 -1
  105. package/format/lib/number-formatter.d.ts +0 -5
  106. package/format/lib/string-formatter.d.ts +0 -5
  107. package/intl/README.md +0 -3
  108. package/intl/index.d.ts +0 -2
  109. package/intl/lib/numbers/number-format-options.d.ts +0 -7
  110. package/intl/lib/numbers/numbers-utils.d.ts +0 -3
  111. package/translation/lib/translator.d.ts +0 -11
@@ -1,3 +1,5 @@
1
+ export * from './lib/formatters/datetime-formatter';
2
+ export * from './lib/formatters/timeleft-formatter';
1
3
  export * from './lib/calendar.service';
2
4
  export * from './lib/dateTime.config';
3
5
  export * from './lib/datetime.class';
@@ -3,9 +3,14 @@ import { AXCalendar, AXDateTime, AXDateValue } from './datetime.class';
3
3
  import { AXHolidayDate, AXHolidaysLoaderOptions } from './holidays.loader';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class AXCalendarService {
6
- private _config;
6
+ private config;
7
7
  private _holidaysLoader;
8
8
  get calendar(): AXCalendar;
9
+ private activeCalendar;
10
+ calendarChanges$: import("rxjs").Observable<AXCalendar>;
11
+ getDefaultCalendar(): AXCalendar;
12
+ getActiveCalendar(): AXCalendar;
13
+ setActiveCalendar(name: string): void;
9
14
  onHolidaysChanged: Subject<AXHolidayDate[]>;
10
15
  private _holidays;
11
16
  get holidays(): AXHolidayDate[];
@@ -39,10 +39,9 @@ export type AXDateTimeParts = {
39
39
  second: AXDateTimePart;
40
40
  };
41
41
  export interface AXCalendarConfig {
42
+ weekdays: number[];
42
43
  weekend: number[];
43
44
  formats: AXDateTimeDisplayFormats;
44
- dayNames: AXDateTimeUnitNames;
45
- monthNames: AXDateTimeUnitNames;
46
45
  }
47
46
  export declare abstract class AXCalendar {
48
47
  private _config;
@@ -52,8 +51,7 @@ export declare abstract class AXCalendar {
52
51
  constructor(config: AXCalendarConfig);
53
52
  get weekend(): number[];
54
53
  get formats(): AXDateTimeDisplayFormats;
55
- get dayNames(): AXDateTimeUnitNames;
56
- get monthNames(): AXDateTimeUnitNames;
54
+ get weekdays(): number[];
57
55
  abstract name(): string;
58
56
  abstract dayOfMonth(date: Date): number;
59
57
  abstract dayOfYear(date: Date): number;
@@ -91,7 +89,10 @@ export declare class AXDateTime {
91
89
  startOf(unit?: TimeUnit): AXDateTime;
92
90
  endOf(unit?: TimeUnit): AXDateTime;
93
91
  private _formatKeys;
94
- format(format?: string): string;
92
+ format(format?: string, options?: {
93
+ locale?: string;
94
+ }): string;
95
+ getDateTimeFormatByLocale(locale: string, style: 'shortDate' | 'longDate' | 'shortTime' | 'longTime'): string;
95
96
  private pad;
96
97
  equal(value: Date | AXDateTime, unit?: TimeUnit): boolean;
97
98
  compare(value: Date | AXDateTime, unit?: TimeUnit): number;
@@ -1,9 +1,7 @@
1
- import { AXFormatterRegistryService } from '@acorex/core/format';
2
1
  import * as i0 from "@angular/core";
3
2
  import * as i1 from "./datetime.pipe";
4
3
  import * as i2 from "@acorex/core/format";
5
4
  export declare class AXDateTimeModule {
6
- constructor(service: AXFormatterRegistryService);
7
5
  static ɵfac: i0.ɵɵFactoryDeclaration<AXDateTimeModule, never>;
8
6
  static ɵmod: i0.ɵɵNgModuleDeclaration<AXDateTimeModule, [typeof i1.AXDateTimePipe], [typeof i2.AXFormatModule], [typeof i1.AXDateTimePipe]>;
9
7
  static ɵinj: i0.ɵɵInjectorDeclaration<AXDateTimeModule>;
@@ -1,6 +1,9 @@
1
1
  import { PipeTransform } from '@angular/core';
2
2
  import { AXDateTime } from './datetime.class';
3
3
  import * as i0 from "@angular/core";
4
+ /**
5
+ * @deprecated The pipe should not be used, use format instead
6
+ */
4
7
  export declare class AXDateTimePipe implements PipeTransform {
5
8
  private _calendarService;
6
9
  transform(value: Date | AXDateTime | string, format?: string, calendarName?: string): string;
@@ -0,0 +1,19 @@
1
+ import { AXFormatOptions, AXFormatter } from '@acorex/core/format';
2
+ import * as i0 from "@angular/core";
3
+ export interface AXDateTimeFormatterOptions extends AXFormatOptions {
4
+ format?: string;
5
+ calendar?: string;
6
+ locale?: string;
7
+ }
8
+ declare module '@acorex/core/format' {
9
+ interface AXFormatOptionsMap {
10
+ 'datetime': AXDateTimeFormatterOptions;
11
+ }
12
+ }
13
+ export declare class AXDateTimeFormatter implements AXFormatter {
14
+ private calendarService;
15
+ get name(): string;
16
+ format(value: unknown, options?: AXDateTimeFormatterOptions | string): string;
17
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXDateTimeFormatter, never>;
18
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXDateTimeFormatter>;
19
+ }
@@ -0,0 +1,16 @@
1
+ import { AXFormatOptions, AXFormatter } from '@acorex/core/format';
2
+ import * as i0 from "@angular/core";
3
+ export interface AXTimeLeftFormatterOptions extends AXFormatOptions {
4
+ format: string;
5
+ }
6
+ declare module '@acorex/core/format' {
7
+ interface AXFormatOptionsMap {
8
+ 'timeleft': AXTimeLeftFormatterOptions;
9
+ }
10
+ }
11
+ export declare class AXTimeLeftFormatter implements AXFormatter {
12
+ get name(): string;
13
+ format(value: number | string, options?: AXTimeLeftFormatterOptions): string;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<AXTimeLeftFormatter, never>;
15
+ static ɵprov: i0.ɵɵInjectableDeclaration<AXTimeLeftFormatter>;
16
+ }
@@ -1,3 +1,5 @@
1
+ export * from './lib/formatters/datetime-formatter';
2
+ export * from './lib/formatters/timeleft-formatter';
1
3
  export * from './lib/calendar.service';
2
4
  export * from './lib/dateTime.config';
3
5
  export * from './lib/datetime.class';
@@ -6,4 +8,4 @@ export * from './lib/datetime.pipe';
6
8
  export * from './lib/georgian.calendar';
7
9
  export * from './lib/holidays.loader';
8
10
  export * from './lib/jalali.calendar';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZVRpbWUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2NhbGVuZGFyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZVRpbWUuY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGV0aW1lLmNsYXNzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGV0aW1lLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRldGltZS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2dlb3JnaWFuLmNhbGVuZGFyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hvbGlkYXlzLmxvYWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9qYWxhbGkuY2FsZW5kYXInO1xuIl19
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZVRpbWUvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9mb3JtYXR0ZXJzL2RhdGV0aW1lLWZvcm1hdHRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9mb3JtYXR0ZXJzL3RpbWVsZWZ0LWZvcm1hdHRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jYWxlbmRhci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGVUaW1lLmNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRldGltZS5jbGFzcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRldGltZS5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZXRpbWUucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9nZW9yZ2lhbi5jYWxlbmRhcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9ob2xpZGF5cy5sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvamFsYWxpLmNhbGVuZGFyJztcbiJdfQ==
@@ -1,19 +1,31 @@
1
1
  import { Injectable, inject } from '@angular/core';
2
- import { Subject } from 'rxjs';
2
+ import { BehaviorSubject, Subject } from 'rxjs';
3
3
  import { AX_DATETIME_CONFIG } from './dateTime.config';
4
4
  import { AXDateTime } from './datetime.class';
5
5
  import { AX_DATETIME_HOLIDAYS_LOADER } from './holidays.loader';
6
6
  import * as i0 from "@angular/core";
7
7
  export class AXCalendarService {
8
8
  get calendar() {
9
- return this._config.calendars[this._config.calendar];
9
+ return this.getActiveCalendar();
10
+ }
11
+ getDefaultCalendar() {
12
+ return this.config.calendars[this.config.calendar];
13
+ }
14
+ getActiveCalendar() {
15
+ return this.activeCalendar.getValue();
16
+ }
17
+ setActiveCalendar(name) {
18
+ const calendar = this.resolveCalendar(name);
19
+ this.activeCalendar.next(calendar);
10
20
  }
11
21
  get holidays() {
12
22
  return this._holidays;
13
23
  }
14
24
  constructor() {
15
- this._config = inject(AX_DATETIME_CONFIG);
25
+ this.config = inject(AX_DATETIME_CONFIG);
16
26
  this._holidaysLoader = inject(AX_DATETIME_HOLIDAYS_LOADER);
27
+ this.activeCalendar = new BehaviorSubject(this.getDefaultCalendar());
28
+ this.calendarChanges$ = this.activeCalendar.asObservable();
17
29
  this.onHolidaysChanged = new Subject();
18
30
  this._holidays = [];
19
31
  this.loadHolidays();
@@ -39,7 +51,7 @@ export class AXCalendarService {
39
51
  return new AXDateTime(new Date(), calendar);
40
52
  }
41
53
  resolveCalendar(name) {
42
- const c = this._config.calendars[name];
54
+ const c = this.config.calendars[name];
43
55
  if (!c) {
44
56
  console.error(`"${name}" is not a valid calendar name!`);
45
57
  return this.calendar;
@@ -47,10 +59,6 @@ export class AXCalendarService {
47
59
  return c;
48
60
  }
49
61
  convert(value, calendarName) {
50
- // const isISOString = val => {
51
- // const d = new Date(val);
52
- // return !Number.isNaN(d.valueOf()) && d.toISOString() === val;
53
- // };
54
62
  const isISOString = (str) => {
55
63
  if (!/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(.\d{3}Z)?/.test(str))
56
64
  return false;
@@ -75,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
75
83
  type: Injectable,
76
84
  args: [{ providedIn: 'root' }]
77
85
  }], ctorParameters: () => [] });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlVGltZS9zcmMvbGliL2NhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQW9CLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekUsT0FBTyxFQUFjLFVBQVUsRUFBZSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZFLE9BQU8sRUFBMEMsMkJBQTJCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFHeEcsTUFBTSxPQUFPLGlCQUFpQjtJQUk1QixJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFJRCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRDtRQWJRLFlBQU8sR0FBcUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdkQsb0JBQWUsR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQU12RCxzQkFBaUIsR0FBNkIsSUFBSSxPQUFPLEVBQW1CLENBQUM7UUFDNUUsY0FBUyxHQUFvQixFQUFFLENBQUM7UUFNdEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxZQUFZLENBQUMsT0FBaUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUM5RCxJQUFJLENBQUMsU0FBUyxH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RSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYRGF0ZVRpbWVDb25maWcsIEFYX0RBVEVUSU1FX0NPTkZJRyB9IGZyb20gJy4vZGF0ZVRpbWUuY29uZmlnJztcbmltcG9ydCB7IEFYQ2FsZW5kYXIsIEFYRGF0ZVRpbWUsIEFYRGF0ZVZhbHVlIH0gZnJvbSAnLi9kYXRldGltZS5jbGFzcyc7XG5pbXBvcnQgeyBBWEhvbGlkYXlEYXRlLCBBWEhvbGlkYXlzTG9hZGVyT3B0aW9ucywgQVhfREFURVRJTUVfSE9MSURBWVNfTE9BREVSIH0gZnJvbSAnLi9ob2xpZGF5cy5sb2FkZXInO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFYQ2FsZW5kYXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfY29uZmlnOiBBWERhdGVUaW1lQ29uZmlnID0gaW5qZWN0KEFYX0RBVEVUSU1FX0NPTkZJRyk7XG4gIHByaXZhdGUgX2hvbGlkYXlzTG9hZGVyID0gaW5qZWN0KEFYX0RBVEVUSU1FX0hPTElEQVlTX0xPQURFUik7XG5cbiAgcHVibGljIGdldCBjYWxlbmRhcigpOiBBWENhbGVuZGFyIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmNhbGVuZGFyc1t0aGlzLl9jb25maWcuY2FsZW5kYXJdO1xuICB9XG5cbiAgcHVibGljIG9uSG9saWRheXNDaGFuZ2VkOiBTdWJqZWN0PEFYSG9saWRheURhdGVbXT4gPSBuZXcgU3ViamVjdDxBWEhvbGlkYXlEYXRlW10+KCk7XG4gIHByaXZhdGUgX2hvbGlkYXlzOiBBWEhvbGlkYXlEYXRlW10gPSBbXTtcbiAgcHVibGljIGdldCBob2xpZGF5cygpOiBBWEhvbGlkYXlEYXRlW10ge1xuICAgIHJldHVybiB0aGlzLl9ob2xpZGF5cztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubG9hZEhvbGlkYXlzKCk7XG4gIH1cblxuICBwdWJsaWMgbG9hZEhvbGlkYXlzKG9wdGlvbnM/OiBBWEhvbGlkYXlzTG9hZGVyT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLl9ob2xpZGF5c0xvYWRlci5nZXRIb2xpZGF5cyhvcHRpb25zKS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgdGhpcy5faG9saWRheXMgPSB2YWx1ZTtcbiAgICAgIHRoaXMub25Ib2xpZGF5c0NoYW5nZWQubmV4dCh0aGlzLl9ob2xpZGF5cyk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlKHZhbHVlOiBBWERhdGVWYWx1ZSwgY2FsZW5kYXJOYW1lPzogc3RyaW5nKTogQVhEYXRlVGltZTtcbiAgcHVibGljIGNyZWF0ZSh2YWx1ZTogRGF0ZSwgY2FsZW5kYXJOYW1lPzogc3RyaW5nKTogQVhEYXRlVGltZTtcbiAgcHVibGljIGNyZWF0ZSh2YWx1ZTogQVhEYXRlVmFsdWUgfCBEYXRlLCBjYWxlbmRhck5hbWU/OiBzdHJpbmcpOiBBWERhdGVUaW1lIHtcbiAgICBjb25zdCBjYWxlbmRhciA9IGNhbGVuZGFyTmFtZSA/IHRoaXMucmVzb2x2ZUNhbGVuZGFyKGNhbGVuZGFyTmFtZSkgOiB0aGlzLmNhbGVuZGFyO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiBuZXcgQVhEYXRlVGltZSh2YWx1ZSwgY2FsZW5kYXIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWU/LnllYXIgJiYgdmFsdWU/Lm1vbnRoKSB7XG4gICAgICByZXR1cm4gY2FsZW5kYXIuY3JlYXRlKHZhbHVlIGFzIEFYRGF0ZVZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubm93KCk7XG4gIH1cblxuICBwdWJsaWMgbm93KGNhbGVuZGFyTmFtZT86IHN0cmluZyk6IEFYRGF0ZVRpbWUge1xuICAgIGNvbnN0IGNhbGVuZGFyID0gY2FsZW5kYXJOYW1lID8gdGhpcy5yZXNvbHZlQ2FsZW5kYXIoY2FsZW5kYXJOYW1lKSA6IHRoaXMuY2FsZW5kYXI7XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKG5ldyBEYXRlKCksIGNhbGVuZGFyKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlQ2FsZW5kYXIobmFtZTogc3RyaW5nKTogQVhDYWxlbmRhciB7XG4gICAgY29uc3QgYyA9IHRoaXMuX2NvbmZpZy5jYWxlbmRhcnNbbmFtZV07XG4gICAgaWYgKCFjKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBcIiR7bmFtZX1cIiBpcyBub3QgYSB2YWxpZCBjYWxlbmRhciBuYW1lIWApO1xuICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXI7XG4gICAgfVxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgcHVibGljIGNvbnZlcnQodmFsdWU6IERhdGUgfCBBWERhdGVUaW1lIHwgc3RyaW5nLCBjYWxlbmRhck5hbWU/OiBzdHJpbmcpOiBBWERhdGVUaW1lIHtcbiAgICAvLyBjb25zdCBpc0lTT1N0cmluZyA9IHZhbCA9PiB7XG4gICAgLy8gICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSh2YWwpO1xuICAgIC8vICAgICByZXR1cm4gIU51bWJlci5pc05hTihkLnZhbHVlT2YoKSkgJiYgZC50b0lTT1N0cmluZygpID09PSB2YWw7XG4gICAgLy8gfTtcblxuICAgIGNvbnN0IGlzSVNPU3RyaW5nID0gKHN0cikgPT4ge1xuICAgICAgaWYgKCEvXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oLlxcZHszfVopPy8udGVzdChzdHIpKSByZXR1cm4gZmFsc2U7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUoc3RyKTtcbiAgICAgIHJldHVybiBkIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oZC5nZXRUaW1lKCkpOyAvLyB2YWxpZCBkYXRlXG4gICAgfTtcbiAgICAvL1xuICAgIGNvbnN0IGNhbGVuZGFyID0gY2FsZW5kYXJOYW1lID8gdGhpcy5yZXNvbHZlQ2FsZW5kYXIoY2FsZW5kYXJOYW1lKSA6IHRoaXMuY2FsZW5kYXI7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChpc0lTT1N0cmluZyh2YWx1ZSkpIHJldHVybiBuZXcgQVhEYXRlVGltZShuZXcgRGF0ZSh2YWx1ZSksIGNhbGVuZGFyKTtcbiAgICAgIGVsc2UgcmV0dXJuIGNhbGVuZGFyLnBhcnNlKHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZSA9IHZhbHVlIGluc3RhbmNlb2YgQVhEYXRlVGltZSA/IHZhbHVlLmRhdGUgOiAodmFsdWUgYXMgRGF0ZSk7XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKGRhdGUsIGNhbGVuZGFyKTtcbiAgfVxufVxuIl19
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9kYXRlVGltZS9zcmMvbGliL2NhbGVuZGFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFvQixrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pFLE9BQU8sRUFBYyxVQUFVLEVBQWUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RSxPQUFPLEVBQTBDLDJCQUEyQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBR3hHLE1BQU0sT0FBTyxpQkFBaUI7SUFJNUIsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUtNLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQVk7UUFDbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBSUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7UUE3QlEsV0FBTSxHQUFxQixNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztR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QUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzs7Z0JBQ3BFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQztRQUNELE1BQU0sSUFBSSxHQUFHLEtBQUssWUFBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFFLEtBQWMsQ0FBQztRQUN4RSxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDOzhHQWpGVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQURKLE1BQU07OzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFYRGF0ZVRpbWVDb25maWcsIEFYX0RBVEVUSU1FX0NPTkZJRyB9IGZyb20gJy4vZGF0ZVRpbWUuY29uZmlnJztcbmltcG9ydCB7IEFYQ2FsZW5kYXIsIEFYRGF0ZVRpbWUsIEFYRGF0ZVZhbHVlIH0gZnJvbSAnLi9kYXRldGltZS5jbGFzcyc7XG5pbXBvcnQgeyBBWEhvbGlkYXlEYXRlLCBBWEhvbGlkYXlzTG9hZGVyT3B0aW9ucywgQVhfREFURVRJTUVfSE9MSURBWVNfTE9BREVSIH0gZnJvbSAnLi9ob2xpZGF5cy5sb2FkZXInO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFYQ2FsZW5kYXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjb25maWc6IEFYRGF0ZVRpbWVDb25maWcgPSBpbmplY3QoQVhfREFURVRJTUVfQ09ORklHKTtcbiAgcHJpdmF0ZSBfaG9saWRheXNMb2FkZXIgPSBpbmplY3QoQVhfREFURVRJTUVfSE9MSURBWVNfTE9BREVSKTtcblxuICBwdWJsaWMgZ2V0IGNhbGVuZGFyKCk6IEFYQ2FsZW5kYXIge1xuICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZUNhbGVuZGFyKCk7XG4gIH1cblxuICBwcml2YXRlIGFjdGl2ZUNhbGVuZGFyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBWENhbGVuZGFyPih0aGlzLmdldERlZmF1bHRDYWxlbmRhcigpKTtcbiAgY2FsZW5kYXJDaGFuZ2VzJCA9IHRoaXMuYWN0aXZlQ2FsZW5kYXIuYXNPYnNlcnZhYmxlKCk7XG5cbiAgcHVibGljIGdldERlZmF1bHRDYWxlbmRhcigpOiBBWENhbGVuZGFyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2FsZW5kYXJzW3RoaXMuY29uZmlnLmNhbGVuZGFyXTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY3RpdmVDYWxlbmRhcigpOiBBWENhbGVuZGFyIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVDYWxlbmRhci5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIHNldEFjdGl2ZUNhbGVuZGFyKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNhbGVuZGFyID0gdGhpcy5yZXNvbHZlQ2FsZW5kYXIobmFtZSk7XG4gICAgdGhpcy5hY3RpdmVDYWxlbmRhci5uZXh0KGNhbGVuZGFyKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkhvbGlkYXlzQ2hhbmdlZDogU3ViamVjdDxBWEhvbGlkYXlEYXRlW10+ID0gbmV3IFN1YmplY3Q8QVhIb2xpZGF5RGF0ZVtdPigpO1xuICBwcml2YXRlIF9ob2xpZGF5czogQVhIb2xpZGF5RGF0ZVtdID0gW107XG4gIHB1YmxpYyBnZXQgaG9saWRheXMoKTogQVhIb2xpZGF5RGF0ZVtdIHtcbiAgICByZXR1cm4gdGhpcy5faG9saWRheXM7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmxvYWRIb2xpZGF5cygpO1xuICB9XG5cbiAgcHVibGljIGxvYWRIb2xpZGF5cyhvcHRpb25zPzogQVhIb2xpZGF5c0xvYWRlck9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5faG9saWRheXNMb2FkZXIuZ2V0SG9saWRheXMob3B0aW9ucykudGhlbigodmFsdWUpID0+IHtcbiAgICAgIHRoaXMuX2hvbGlkYXlzID0gdmFsdWU7XG4gICAgICB0aGlzLm9uSG9saWRheXNDaGFuZ2VkLm5leHQodGhpcy5faG9saWRheXMpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZSh2YWx1ZTogQVhEYXRlVmFsdWUsIGNhbGVuZGFyTmFtZT86IHN0cmluZyk6IEFYRGF0ZVRpbWU7XG4gIHB1YmxpYyBjcmVhdGUodmFsdWU6IERhdGUsIGNhbGVuZGFyTmFtZT86IHN0cmluZyk6IEFYRGF0ZVRpbWU7XG4gIHB1YmxpYyBjcmVhdGUodmFsdWU6IEFYRGF0ZVZhbHVlIHwgRGF0ZSwgY2FsZW5kYXJOYW1lPzogc3RyaW5nKTogQVhEYXRlVGltZSB7XG4gICAgY29uc3QgY2FsZW5kYXIgPSBjYWxlbmRhck5hbWUgPyB0aGlzLnJlc29sdmVDYWxlbmRhcihjYWxlbmRhck5hbWUpIDogdGhpcy5jYWxlbmRhcjtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gbmV3IEFYRGF0ZVRpbWUodmFsdWUsIGNhbGVuZGFyKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlPy55ZWFyICYmIHZhbHVlPy5tb250aCkge1xuICAgICAgcmV0dXJuIGNhbGVuZGFyLmNyZWF0ZSh2YWx1ZSBhcyBBWERhdGVWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5vdygpO1xuICB9XG5cbiAgcHVibGljIG5vdyhjYWxlbmRhck5hbWU/OiBzdHJpbmcpOiBBWERhdGVUaW1lIHtcbiAgICBjb25zdCBjYWxlbmRhciA9IGNhbGVuZGFyTmFtZSA/IHRoaXMucmVzb2x2ZUNhbGVuZGFyKGNhbGVuZGFyTmFtZSkgOiB0aGlzLmNhbGVuZGFyO1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShuZXcgRGF0ZSgpLCBjYWxlbmRhcik7XG4gIH1cblxuICBwdWJsaWMgcmVzb2x2ZUNhbGVuZGFyKG5hbWU6IHN0cmluZyk6IEFYQ2FsZW5kYXIge1xuICAgIGNvbnN0IGMgPSB0aGlzLmNvbmZpZy5jYWxlbmRhcnNbbmFtZV07XG4gICAgaWYgKCFjKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBcIiR7bmFtZX1cIiBpcyBub3QgYSB2YWxpZCBjYWxlbmRhciBuYW1lIWApO1xuICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXI7XG4gICAgfVxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgcHVibGljIGNvbnZlcnQodmFsdWU6IERhdGUgfCBBWERhdGVUaW1lIHwgc3RyaW5nLCBjYWxlbmRhck5hbWU/OiBzdHJpbmcpOiBBWERhdGVUaW1lIHtcbiAgICBjb25zdCBpc0lTT1N0cmluZyA9IChzdHIpID0+IHtcbiAgICAgIGlmICghL1xcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KC5cXGR7M31aKT8vLnRlc3Qoc3RyKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHN0cik7XG4gICAgICByZXR1cm4gZCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGQuZ2V0VGltZSgpKTsgLy8gdmFsaWQgZGF0ZVxuICAgIH07XG4gICAgLy9cbiAgICBjb25zdCBjYWxlbmRhciA9IGNhbGVuZGFyTmFtZSA/IHRoaXMucmVzb2x2ZUNhbGVuZGFyKGNhbGVuZGFyTmFtZSkgOiB0aGlzLmNhbGVuZGFyO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoaXNJU09TdHJpbmcodmFsdWUpKSByZXR1cm4gbmV3IEFYRGF0ZVRpbWUobmV3IERhdGUodmFsdWUpLCBjYWxlbmRhcik7XG4gICAgICBlbHNlIHJldHVybiBjYWxlbmRhci5wYXJzZSh2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGUgPSB2YWx1ZSBpbnN0YW5jZW9mIEFYRGF0ZVRpbWUgPyB2YWx1ZS5kYXRlIDogKHZhbHVlIGFzIERhdGUpO1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZShkYXRlLCBjYWxlbmRhcik7XG4gIH1cbn1cbiJdfQ==
@@ -15,26 +15,8 @@ export const AXDateTimeDefaultConfig = {
15
15
  calendar: 'georgian',
16
16
  calendars: {
17
17
  georgian: new GeorgianCalendar({
18
- dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'].map((d) => ({
19
- long: d,
20
- short: d.substring(0, 3),
21
- letter: d[0],
22
- })),
23
- monthNames: [
24
- 'January',
25
- 'February',
26
- 'March',
27
- 'April',
28
- 'May',
29
- 'June',
30
- 'July',
31
- 'August',
32
- 'September',
33
- 'October',
34
- 'November',
35
- 'December',
36
- ].map((d) => ({ long: d, short: d.substring(0, 3), letter: d[0] })),
37
- weekend: [6, 7],
18
+ weekdays: [0, 1, 2, 3, 4, 5, 6],
19
+ weekend: [5, 6],
38
20
  formats: {
39
21
  dateInput: 'yyyy/MM/dd',
40
22
  timeInput: 'HH:mm',
@@ -45,13 +27,8 @@ export const AXDateTimeDefaultConfig = {
45
27
  },
46
28
  }),
47
29
  jalali: new JalaliCalendar({
48
- monthNames: 'فروردین_اردیبهشت_خرداد_تیر_مرداد_شهریور_مهر_آبان_آذر_دی_بهمن_اسفند'
49
- .split('_')
50
- .map((d) => ({ long: d, short: d, letter: d[0] })),
51
- dayNames: 'شنبه_یکشنبه_دوشنبه_سه شنبه_چهارشنبه_پنج شنبه_جمعه'
52
- .split('_')
53
- .map((d) => ({ long: d, short: d[0], letter: d[0] })),
54
- weekend: [7],
30
+ weekdays: [6, 0, 1, 2, 3, 4, 5],
31
+ weekend: [6],
55
32
  formats: {
56
33
  dateInput: 'yyyy/MM/dd',
57
34
  timeInput: 'HH:mm',
@@ -70,4 +47,4 @@ export function dateTimeConfig(config = {}) {
70
47
  };
71
48
  return result;
72
49
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZVRpbWUuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGVUaW1lL3NyYy9saWIvZGF0ZVRpbWUuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBU25ELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFtQixvQkFBb0IsRUFBRTtJQUMzRixVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ1osTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUM1QyxPQUFPLHVCQUF1QixDQUFDO0lBQ2pDLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBcUI7SUFDdkQsUUFBUSxFQUFFLFVBQVU7SUFDcEIsU0FBUyxFQUFFO1FBQ1QsUUFBUSxFQUFFLElBQUksZ0JBQWdCLENBQUM7WUFDN0IsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRyxJQUFJLEVBQUUsQ0FBQztnQkFDUCxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QixNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiLENBQUMsQ0FBQztZQUNILFVBQVUsRUFBRTtnQkFDVixTQUFTO2dCQUNULFVBQVU7Z0JBQ1YsT0FBTztnQkFDUCxPQUFPO2dCQUNQLEtBQUs7Z0JBQ0wsTUFBTTtnQkFDTixNQUFNO2dCQUNOLFFBQVE7Z0JBQ1IsV0FBVztnQkFDWCxTQUFTO2dCQUNULFVBQVU7Z0JBQ1YsVUFBVTthQUNYLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNmLE9BQU8sRUFBRTtnQkFDUCxTQUFTLEVBQUUsWUFBWTtnQkFDdkIsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLGFBQWEsRUFBRSxrQkFBa0I7Z0JBQ2pDLFdBQVcsRUFBRSxrQkFBa0I7Z0JBQy9CLFdBQVcsRUFBRSxPQUFPO2dCQUNwQixlQUFlLEVBQUUsd0JBQXdCO2FBQzFDO1NBQ0YsQ0FBQztRQUNGLE1BQU0sRUFBRSxJQUFJLGNBQWMsQ0FBQztZQUN6QixVQUFVLEVBQUUsb0VBQW9FO2lCQUM3RSxLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwRCxRQUFRLEVBQUUsbURBQW1EO2lCQUMxRCxLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDWixPQUFPLEVBQUU7Z0JBQ1AsU0FBUyxFQUFFLFlBQVk7Z0JBQ3ZCLFNBQVMsRUFBRSxPQUFPO2dCQUNsQixhQUFhLEVBQUUsa0JBQWtCO2dCQUNqQyxXQUFXLEVBQUUsa0JBQWtCO2dCQUMvQixXQUFXLEVBQUUsT0FBTztnQkFDcEIsZUFBZSxFQUFFLHdCQUF3QjthQUMxQztTQUNGLENBQUM7S0FDSDtDQUNGLENBQUM7QUFJRixNQUFNLFVBQVUsY0FBYyxDQUFDLFNBQWdDLEVBQUU7SUFDL0QsTUFBTSxNQUFNLEdBQUc7UUFDYixHQUFHLHVCQUF1QjtRQUMxQixHQUFHLE1BQU07S0FDVixDQUFDO0lBQ0YsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYX0dMT0JBTF9DT05GSUcgfSBmcm9tICdAYWNvcmV4L2NvcmUvY29uZmlnJztcbmltcG9ydCB7IEluamVjdGlvblRva2VuLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBWENhbGVuZGFyIH0gZnJvbSAnLi9kYXRldGltZS5jbGFzcyc7XG5pbXBvcnQgeyBHZW9yZ2lhbkNhbGVuZGFyIH0gZnJvbSAnLi9nZW9yZ2lhbi5jYWxlbmRhcic7XG5pbXBvcnQgeyBKYWxhbGlDYWxlbmRhciB9IGZyb20gJy4vamFsYWxpLmNhbGVuZGFyJztcblxuZXhwb3J0IGludGVyZmFjZSBBWERhdGVUaW1lQ29uZmlnIHtcbiAgY2FsZW5kYXI6IHN0cmluZztcbiAgY2FsZW5kYXJzOiB7XG4gICAgW2tleTogc3RyaW5nXTogQVhDYWxlbmRhcjtcbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IEFYX0RBVEVUSU1FX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWERhdGVUaW1lQ29uZmlnPignQVhfREFURVRJTUVfQ09ORklHJywge1xuICBwcm92aWRlZEluOiAncm9vdCcsXG4gIGZhY3Rvcnk6ICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWwgPSBpbmplY3QoQVhfR0xPQkFMX0NPTkZJRyk7XG4gICAgc2V0KGdsb2JhbCwgJ2RhdGVUaW1lJywgQVhfREFURVRJTUVfQ09ORklHKTtcbiAgICByZXR1cm4gQVhEYXRlVGltZURlZmF1bHRDb25maWc7XG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IEFYRGF0ZVRpbWVEZWZhdWx0Q29uZmlnOiBBWERhdGVUaW1lQ29uZmlnID0ge1xuICBjYWxlbmRhcjogJ2dlb3JnaWFuJyxcbiAgY2FsZW5kYXJzOiB7XG4gICAgZ2VvcmdpYW46IG5ldyBHZW9yZ2lhbkNhbGVuZGFyKHtcbiAgICAgIGRheU5hbWVzOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J10ubWFwKChkKSA9PiAoe1xuICAgICAgICBsb25nOiBkLFxuICAgICAgICBzaG9ydDogZC5zdWJzdHJpbmcoMCwgMyksXG4gICAgICAgIGxldHRlcjogZFswXSxcbiAgICAgIH0pKSxcbiAgICAgIG1vbnRoTmFtZXM6IFtcbiAgICAgICAgJ0phbnVhcnknLFxuICAgICAgICAnRmVicnVhcnknLFxuICAgICAgICAnTWFyY2gnLFxuICAgICAgICAnQXByaWwnLFxuICAgICAgICAnTWF5JyxcbiAgICAgICAgJ0p1bmUnLFxuICAgICAgICAnSnVseScsXG4gICAgICAgICdBdWd1c3QnLFxuICAgICAgICAnU2VwdGVtYmVyJyxcbiAgICAgICAgJ09jdG9iZXInLFxuICAgICAgICAnTm92ZW1iZXInLFxuICAgICAgICAnRGVjZW1iZXInLFxuICAgICAgXS5tYXAoKGQpID0+ICh7IGxvbmc6IGQsIHNob3J0OiBkLnN1YnN0cmluZygwLCAzKSwgbGV0dGVyOiBkWzBdIH0pKSxcbiAgICAgIHdlZWtlbmQ6IFs2LCA3XSxcbiAgICAgIGZvcm1hdHM6IHtcbiAgICAgICAgZGF0ZUlucHV0OiAneXl5eS9NTS9kZCcsXG4gICAgICAgIHRpbWVJbnB1dDogJ0hIOm1tJyxcbiAgICAgICAgZGF0ZVRpbWVJbnB1dDogJ3l5eXkvTU0vZGQgSEg6bW0nLFxuICAgICAgICBkYXRlRGlzcGxheTogJ0REREQsIGQgTU1NIHl5eXknLFxuICAgICAgICB0aW1lRGlzcGxheTogJ0hIOm1tJyxcbiAgICAgICAgZGF0ZVRpbWVEaXNwbGF5OiAnRERERCwgZCBNTU0geXl5eSBISDptbScsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIGphbGFsaTogbmV3IEphbGFsaUNhbGVuZGFyKHtcbiAgICAgIG1vbnRoTmFtZXM6ICfZgdix2YjYsdiv24zZhl/Yp9ix2K/bjNio2YfYtNiqX9iu2LHYr9in2K9f2KrbjNixX9mF2LHYr9in2K9f2LTZh9ix24zZiNixX9mF2YfYsV/Yotio2KfZhl/Yotiw2LFf2K/bjF/YqNmH2YXZhl/Yp9iz2YHZhtivJ1xuICAgICAgICAuc3BsaXQoJ18nKVxuICAgICAgICAubWFwKChkKSA9PiAoeyBsb25nOiBkLCBzaG9ydDogZCwgbGV0dGVyOiBkWzBdIH0pKSxcbiAgICAgIGRheU5hbWVzOiAn2LTZhtio2Ydf24zaqdi02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mHINi02YbYqNmHX9qG2YfYp9ix2LTZhtio2Ydf2b7ZhtisINi02YbYqNmHX9is2YXYudmHJ1xuICAgICAgICAuc3BsaXQoJ18nKVxuICAgICAgICAubWFwKChkKSA9PiAoeyBsb25nOiBkLCBzaG9ydDogZFswXSwgbGV0dGVyOiBkWzBdIH0pKSxcbiAgICAgIHdlZWtlbmQ6IFs3XSxcbiAgICAgIGZvcm1hdHM6IHtcbiAgICAgICAgZGF0ZUlucHV0OiAneXl5eS9NTS9kZCcsXG4gICAgICAgIHRpbWVJbnB1dDogJ0hIOm1tJyxcbiAgICAgICAgZGF0ZVRpbWVJbnB1dDogJ3l5eXkvTU0vZGQgSEg6bW0nLFxuICAgICAgICBkYXRlRGlzcGxheTogJ0REREQsIGQgTU1NIHl5eXknLFxuICAgICAgICB0aW1lRGlzcGxheTogJ0hIOm1tJyxcbiAgICAgICAgZGF0ZVRpbWVEaXNwbGF5OiAnRERERCwgZCBNTU0geXl5eSBISDptbScsXG4gICAgICB9LFxuICAgIH0pLFxuICB9LFxufTtcblxuZXhwb3J0IHR5cGUgUGFydGlhbERhdGVUaW1lQ29uZmlnID0gUGFydGlhbDxBWERhdGVUaW1lQ29uZmlnPjtcblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUaW1lQ29uZmlnKGNvbmZpZzogUGFydGlhbERhdGVUaW1lQ29uZmlnID0ge30pOiBBWERhdGVUaW1lQ29uZmlnIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIC4uLkFYRGF0ZVRpbWVEZWZhdWx0Q29uZmlnLFxuICAgIC4uLmNvbmZpZyxcbiAgfTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZVRpbWUuY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL2RhdGVUaW1lL3NyYy9saWIvZGF0ZVRpbWUuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBU25ELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFtQixvQkFBb0IsRUFBRTtJQUMzRixVQUFVLEVBQUUsTUFBTTtJQUNsQixPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ1osTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDeEMsR0FBRyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUM1QyxPQUFPLHVCQUF1QixDQUFDO0lBQ2pDLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBcUI7SUFDdkQsUUFBUSxFQUFFLFVBQVU7SUFDcEIsU0FBUyxFQUFFO1FBQ1QsUUFBUSxFQUFFLElBQUksZ0JBQWdCLENBQUM7WUFDN0IsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDZixPQUFPLEVBQUU7Z0JBQ1AsU0FBUyxFQUFFLFlBQVk7Z0JBQ3ZCLFNBQVMsRUFBRSxPQUFPO2dCQUNsQixhQUFhLEVBQUUsa0JBQWtCO2dCQUNqQyxXQUFXLEVBQUUsa0JBQWtCO2dCQUMvQixXQUFXLEVBQUUsT0FBTztnQkFDcEIsZUFBZSxFQUFFLHdCQUF3QjthQUMxQztTQUNGLENBQUM7UUFDRixNQUFNLEVBQUUsSUFBSSxjQUFjLENBQUM7WUFDekIsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNaLE9BQU8sRUFBRTtnQkFDUCxTQUFTLEVBQUUsWUFBWTtnQkFDdkIsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLGFBQWEsRUFBRSxrQkFBa0I7Z0JBQ2pDLFdBQVcsRUFBRSxrQkFBa0I7Z0JBQy9CLFdBQVcsRUFBRSxPQUFPO2dCQUNwQixlQUFlLEVBQUUsd0JBQXdCO2FBQzFDO1NBQ0YsQ0FBQztLQUNIO0NBQ0YsQ0FBQztBQUlGLE1BQU0sVUFBVSxjQUFjLENBQUMsU0FBZ0MsRUFBRTtJQUMvRCxNQUFNLE1BQU0sR0FBRztRQUNiLEdBQUcsdUJBQXVCO1FBQzFCLEdBQUcsTUFBTTtLQUNWLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhfR0xPQkFMX0NPTkZJRyB9IGZyb20gJ0BhY29yZXgvY29yZS9jb25maWcnO1xuaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEFYQ2FsZW5kYXIgfSBmcm9tICcuL2RhdGV0aW1lLmNsYXNzJztcbmltcG9ydCB7IEdlb3JnaWFuQ2FsZW5kYXIgfSBmcm9tICcuL2dlb3JnaWFuLmNhbGVuZGFyJztcbmltcG9ydCB7IEphbGFsaUNhbGVuZGFyIH0gZnJvbSAnLi9qYWxhbGkuY2FsZW5kYXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYRGF0ZVRpbWVDb25maWcge1xuICBjYWxlbmRhcjogc3RyaW5nO1xuICBjYWxlbmRhcnM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBBWENhbGVuZGFyO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgQVhfREFURVRJTUVfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPEFYRGF0ZVRpbWVDb25maWc+KCdBWF9EQVRFVElNRV9DT05GSUcnLCB7XG4gIHByb3ZpZGVkSW46ICdyb290JyxcbiAgZmFjdG9yeTogKCkgPT4ge1xuICAgIGNvbnN0IGdsb2JhbCA9IGluamVjdChBWF9HTE9CQUxfQ09ORklHKTtcbiAgICBzZXQoZ2xvYmFsLCAnZGF0ZVRpbWUnLCBBWF9EQVRFVElNRV9DT05GSUcpO1xuICAgIHJldHVybiBBWERhdGVUaW1lRGVmYXVsdENvbmZpZztcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgQVhEYXRlVGltZURlZmF1bHRDb25maWc6IEFYRGF0ZVRpbWVDb25maWcgPSB7XG4gIGNhbGVuZGFyOiAnZ2VvcmdpYW4nLFxuICBjYWxlbmRhcnM6IHtcbiAgICBnZW9yZ2lhbjogbmV3IEdlb3JnaWFuQ2FsZW5kYXIoe1xuICAgICAgd2Vla2RheXM6IFswLCAxLCAyLCAzLCA0LCA1LCA2XSxcbiAgICAgIHdlZWtlbmQ6IFs1LCA2XSxcbiAgICAgIGZvcm1hdHM6IHtcbiAgICAgICAgZGF0ZUlucHV0OiAneXl5eS9NTS9kZCcsXG4gICAgICAgIHRpbWVJbnB1dDogJ0hIOm1tJyxcbiAgICAgICAgZGF0ZVRpbWVJbnB1dDogJ3l5eXkvTU0vZGQgSEg6bW0nLFxuICAgICAgICBkYXRlRGlzcGxheTogJ0REREQsIGQgTU1NIHl5eXknLFxuICAgICAgICB0aW1lRGlzcGxheTogJ0hIOm1tJyxcbiAgICAgICAgZGF0ZVRpbWVEaXNwbGF5OiAnRERERCwgZCBNTU0geXl5eSBISDptbScsXG4gICAgICB9LFxuICAgIH0pLFxuICAgIGphbGFsaTogbmV3IEphbGFsaUNhbGVuZGFyKHtcbiAgICAgIHdlZWtkYXlzOiBbNiwgMCwgMSwgMiwgMywgNCwgNV0sXG4gICAgICB3ZWVrZW5kOiBbNl0sXG4gICAgICBmb3JtYXRzOiB7XG4gICAgICAgIGRhdGVJbnB1dDogJ3l5eXkvTU0vZGQnLFxuICAgICAgICB0aW1lSW5wdXQ6ICdISDptbScsXG4gICAgICAgIGRhdGVUaW1lSW5wdXQ6ICd5eXl5L01NL2RkIEhIOm1tJyxcbiAgICAgICAgZGF0ZURpc3BsYXk6ICdERERELCBkIE1NTSB5eXl5JyxcbiAgICAgICAgdGltZURpc3BsYXk6ICdISDptbScsXG4gICAgICAgIGRhdGVUaW1lRGlzcGxheTogJ0REREQsIGQgTU1NIHl5eXkgSEg6bW0nLFxuICAgICAgfSxcbiAgICB9KSxcbiAgfSxcbn07XG5cbmV4cG9ydCB0eXBlIFBhcnRpYWxEYXRlVGltZUNvbmZpZyA9IFBhcnRpYWw8QVhEYXRlVGltZUNvbmZpZz47XG5cbmV4cG9ydCBmdW5jdGlvbiBkYXRlVGltZUNvbmZpZyhjb25maWc6IFBhcnRpYWxEYXRlVGltZUNvbmZpZyA9IHt9KTogQVhEYXRlVGltZUNvbmZpZyB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAuLi5BWERhdGVUaW1lRGVmYXVsdENvbmZpZyxcbiAgICAuLi5jb25maWcsXG4gIH07XG4gIHJldHVybiByZXN1bHQ7XG59XG4iXX0=
@@ -1,4 +1,5 @@
1
- import { orderBy } from 'lodash-es';
1
+ import { defaults, orderBy } from 'lodash-es';
2
+ import { translateSync } from '@acorex/core/translation';
2
3
  export class AXCalendar {
3
4
  /**
4
5
  * @ignore
@@ -12,11 +13,8 @@ export class AXCalendar {
12
13
  get formats() {
13
14
  return this._config.formats;
14
15
  }
15
- get dayNames() {
16
- return this._config.dayNames;
17
- }
18
- get monthNames() {
19
- return this._config.monthNames;
16
+ get weekdays() {
17
+ return this._config.weekdays;
20
18
  }
21
19
  }
22
20
  export class AXDateTime {
@@ -27,6 +25,7 @@ export class AXDateTime {
27
25
  return this._calendar;
28
26
  }
29
27
  constructor(value, calendar) {
28
+ //TODO: remove unused items
30
29
  this._formatKeys = {
31
30
  ss: () => this.pad(this.date.getSeconds(), 2),
32
31
  s: () => this.date.getSeconds().toString(),
@@ -38,13 +37,14 @@ export class AXDateTime {
38
37
  mm: () => this.pad(this.date.getMinutes(), 2),
39
38
  m: () => this.date.getMinutes().toString(),
40
39
  //
41
- MMMM: () => this.calendar.monthNames[this.calendar.monthOfYear(this.date) - 1].long,
42
- MMM: () => this.calendar.monthNames[this.calendar.monthOfYear(this.date) - 1].short,
40
+ MMMM: () => translateSync(`dateTime.months.${this.calendar.name()}.long.${this.calendar.monthOfYear(this.date) - 1}`),
41
+ MMM: () => translateSync(`dateTime.months.${this.calendar.name()}.short.${this.calendar.monthOfYear(this.date) - 1}`),
43
42
  MM: () => this.pad(this.calendar.monthOfYear(this.date), 2),
44
43
  M: () => this.calendar.monthOfYear(this.date),
45
44
  //
46
- DDDD: () => this.calendar.dayNames[this.calendar.dayOfWeek(this.date) - 1].long,
47
- DDD: () => this.calendar.dayNames[this.calendar.dayOfWeek(this.date) - 1].short,
45
+ E: () => translateSync(`dateTime.weekdays.long.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`),
46
+ DDD: () => translateSync(`dateTime.weekdays.short.${this.calendar.weekdays[this.calendar.dayOfWeek(this.date) - 1]}`),
47
+ DDDD: () => this._formatKeys['E'](),
48
48
  //
49
49
  yyyy: () => this.pad(this.calendar.year(this.date), 4),
50
50
  YYYY: () => this.pad(this.calendar.year(this.date), 4),
@@ -59,7 +59,15 @@ export class AXDateTime {
59
59
  //
60
60
  A: () => (this.date.getHours() < 12 ? 'am' : 'pm'),
61
61
  a: () => (this.date.getHours() < 12 ? 'am' : 'pm'),
62
- //"date": () => this.format(this.getFormatPattern('fa-IR', 'date')),
62
+ 'date': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),
63
+ 'shortDate': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortDate')),
64
+ 'longDate': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longDate')),
65
+ //
66
+ 'shortTime': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),
67
+ 'time': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'shortTime')),
68
+ 'longTime': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longTime')),
69
+ //
70
+ 'datetime': (options) => this.format(this.getDateTimeFormatByLocale(options.locale, 'longTime')),
63
71
  };
64
72
  this._calendar = calendar;
65
73
  this._date = value;
@@ -115,14 +123,58 @@ export class AXDateTime {
115
123
  endOf(unit = 'day') {
116
124
  return this._calendar.endOf(this.date, unit);
117
125
  }
118
- format(format = this.calendar.formats.dateTimeDisplay) {
126
+ format(format = this.getDateTimeFormatByLocale(navigator.language, 'shortDate'), options) {
127
+ const effectiveOptions = defaults({}, options, {
128
+ locale: navigator.language
129
+ });
119
130
  const re = new RegExp(orderBy(Object.keys(this._formatKeys), (c) => c.length, ['desc']).join('|'), 'gi');
120
131
  return format.replace(re, (matched) => {
121
132
  const f = this._formatKeys[matched];
122
- const r = f();
133
+ const r = f(effectiveOptions);
123
134
  return r;
124
135
  });
125
136
  }
137
+ getDateTimeFormatByLocale(locale, style) {
138
+ let options = {};
139
+ switch (style) {
140
+ case 'shortDate': // Year, Month, Day
141
+ options = { year: 'numeric', month: '2-digit', day: '2-digit' };
142
+ break;
143
+ case 'longDate': // Weekday, Month name, Day, Year
144
+ options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
145
+ break;
146
+ case 'shortTime': // Hour, Minute
147
+ options = { hour: '2-digit', minute: '2-digit', hour12: false };
148
+ break;
149
+ case 'longTime': // Hour, Minute, Second
150
+ options = { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false };
151
+ break;
152
+ }
153
+ const formatter = new Intl.DateTimeFormat(locale, options);
154
+ // Get parts of the date and/or time
155
+ const parts = formatter.formatToParts(new Date());
156
+ // Map parts to their respective format
157
+ const formatMap = {
158
+ 'day': 'dd',
159
+ 'month': style == 'longDate' ? 'MMMM' : 'MM',
160
+ 'year': 'yyyy',
161
+ 'hour': 'HH',
162
+ 'minute': 'mm',
163
+ 'second': 'ss',
164
+ 'weekday': 'E',
165
+ 'literal': ''
166
+ };
167
+ // Construct the date and/or time format string
168
+ return parts.map(part => {
169
+ if (part.type === 'literal') {
170
+ // Use the literal part directly as separator
171
+ return part.value;
172
+ }
173
+ else {
174
+ return formatMap[part.type] || part.value;
175
+ }
176
+ }).join('');
177
+ }
126
178
  pad(n, width, z = '0') {
127
179
  n = n + '';
128
180
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
@@ -268,4 +320,4 @@ export class AXDateTimeRange {
268
320
  return result;
269
321
  }
270
322
  }
271
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZVRpbWUvc3JjL2xpYi9kYXRldGltZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBbURwQyxNQUFNLE9BQWdCLFVBQVU7SUFHOUI7O09BRUc7SUFDSCxZQUFZLE1BQXdCO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztJQUNqQyxDQUFDO0NBMkJGO0FBRUQsTUFBTSxPQUFPLFVBQVU7SUFHckIsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFHRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELFlBQVksS0FBVyxFQUFFLFFBQW9CO1FBd0VyQyxnQkFBVyxHQUFHO1lBQ3BCLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUMxQyxFQUFFO1lBQ0YsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRCxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFELENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ3ZELEVBQUU7WUFDRixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDMUMsRUFBRTtZQUNGLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSTtZQUNuRixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUs7WUFDbkYsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRCxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM3QyxFQUFFO1lBQ0YsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJO1lBQy9FLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSztZQUMvRSxFQUFFO1lBQ0YsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLEVBQUU7WUFDRixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMzQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7WUFDeEMsRUFBRTtZQUNGLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEQsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQ3JELEVBQUU7WUFDRixDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbEQsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xELG9FQUFvRTtTQUNyRSxDQUFDO1FBeEdBLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQWMsRUFBRSxNQUFjO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFpQixLQUFLLEVBQUUsS0FBYTtRQUN2QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxRQUFRLENBQUMsR0FBc0I7UUFDN0IsTUFBTSxJQUFJLEdBQUcsR0FBRyxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUUsR0FBWSxDQUFDO1FBQ2xFLE1BQU0sR0FBRyxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBaUIsS0FBSztRQUM1QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFpQixLQUFLO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBcUNELE1BQU0sQ0FBQyxTQUFpQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlO1FBQzNELE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pHLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNwQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHTyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRztRQUMzQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNYLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQXdCLEVBQUUsT0FBaUIsS0FBSztRQUNwRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQXdCLEVBQUUsT0FBaUIsS0FBSztRQUN0RCxNQUFNLElBQUksR0FBRyxLQUFLLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBRSxLQUFjLENBQUM7UUFDeEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBRTtZQUN0QyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ1osT0FBTyxDQUFDLENBQUM7YUFDVjtpQkFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ2xCLE9BQU8sQ0FBQyxDQUFDO2FBQ1Y7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLENBQUMsQ0FBQzthQUNYO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsUUFBUSxJQUFJLEVBQUU7WUFDWixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsS0FBSyxNQUFNO2dCQUNULENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RCxLQUFLLE9BQU87Z0JBQ1YsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlELEtBQUssS0FBSztnQkFDUixDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUQsS0FBSyxNQUFNO2dCQUNULENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRCxLQUFLLFFBQVE7Z0JBQ1gsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BELEtBQUssUUFBUTtnQkFDWCxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ2hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQ7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDeEQ7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sZUFBZTtJQUUxQixJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQVcsS0FBSyxDQUFDLENBQWtCO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUFDdkMsQ0FBQztJQUVELFlBQVksSUFBZ0I7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBZSxDQUM5QixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3pELElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7Q0FJRjtBQXdCRCxNQUFNLE9BQU8sZUFBZTtJQUkxQixJQUFXLFNBQVM7UUFDbEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxZQUFZLFNBQXFCLEVBQUUsT0FBbUI7UUFDcEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7SUFDMUIsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLE1BQU0sR0FBZTtZQUN6QixXQUFXLEVBQUUsQ0FBQztZQUNkLE9BQU8sRUFBRSxDQUFDO1lBQ1YsT0FBTyxFQUFFLENBQUM7WUFDVixLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksRUFBRSxDQUFDO1lBQ1AsTUFBTSxFQUFFLENBQUM7WUFDVCxLQUFLLEVBQUUsQ0FBQztZQUNSLEtBQUssRUFBRTtnQkFDTCxXQUFXLEVBQUUsQ0FBQztnQkFDZCxPQUFPLEVBQUUsQ0FBQztnQkFDVixPQUFPLEVBQUUsQ0FBQztnQkFDVixLQUFLLEVBQUUsQ0FBQztnQkFDUixJQUFJLEVBQUUsQ0FBQztnQkFDUCxLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLEVBQUUsQ0FBQztnQkFDVCxLQUFLLEVBQUUsQ0FBQzthQUNUO1NBQ0YsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQztRQUN4QixNQUFNLE9BQU8sR0FBRyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUM5QixNQUFNLFFBQVEsR0FBRyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFDbEMsTUFBTSxTQUFTLEdBQUcsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQztRQUMzQyxFQUFFO1FBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUQsRUFBRTtRQUNGLCtEQUErRDtRQUMvRCx1RUFBdUU7UUFDdkUsMkRBQTJEO1FBQzNELGdCQUFnQjtRQUNoQixJQUFJO1FBQ0osMENBQTBDO1FBQzFDLGVBQWU7UUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELEVBQUU7UUFDRixNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUNyRCxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxlQUFlO1FBQ2YsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlELE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxTQUFTLENBQUMsT0FBaUIsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFpQixFQUFFLENBQUM7UUFDaEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNuQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkI7WUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDL0I7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBaUJGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCB0eXBlIFRpbWVVbml0ID0gJ21zJyB8ICdzZWNvbmQnIHwgJ21pbnV0ZScgfCAnaG91cicgfCAnZGF5JyB8ICdtb250aCcgfCAneWVhcicgfCAnd2Vlayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhEYXRlVmFsdWUge1xuICB5ZWFyOiBudW1iZXI7XG4gIG1vbnRoOiBudW1iZXI7XG4gIGRhdGU6IG51bWJlcjtcbiAgaG91cnM/OiBudW1iZXI7XG4gIG1pbnV0ZXM/OiBudW1iZXI7XG4gIHNlY29uZHM/OiBudW1iZXI7XG4gIG1zPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYRGF0ZVRpbWVEaXNwbGF5Rm9ybWF0cyB7XG4gIGRhdGVJbnB1dDogc3RyaW5nO1xuICB0aW1lSW5wdXQ6IHN0cmluZztcbiAgZGF0ZVRpbWVJbnB1dDogc3RyaW5nO1xuICBkYXRlRGlzcGxheTogc3RyaW5nO1xuICB0aW1lRGlzcGxheTogc3RyaW5nO1xuICBkYXRlVGltZURpc3BsYXk6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQVhEYXRlVGltZVVuaXROYW1lcyA9IHsgbG9uZzogc3RyaW5nOyBzaG9ydDogc3RyaW5nOyBsZXR0ZXI6IHN0cmluZyB9W107XG5cbmV4cG9ydCB0eXBlIEFYRGF0ZVRpbWVQYXJ0ID0ge1xuICBrZXk6IHN0cmluZztcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgcGxhY2Vob2xkZXJzOiBzdHJpbmdbXTtcbiAgdHlwZWRWYWx1ZT86IHN0cmluZyB8IG51bGw7XG4gIGRlZmF1bHQ6IG51bWJlcjtcbiAgZW5hYmxlZDogYm9vbGVhbjtcbiAgcmVhbFZhbHVlOiAoKSA9PiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBBWERhdGVUaW1lUGFydHMgPSB7XG4gIHllYXI6IEFYRGF0ZVRpbWVQYXJ0O1xuICBtb250aDogQVhEYXRlVGltZVBhcnQ7XG4gIGRheTogQVhEYXRlVGltZVBhcnQ7XG4gIGhvdXI6IEFYRGF0ZVRpbWVQYXJ0O1xuICBtaW51dGU6IEFYRGF0ZVRpbWVQYXJ0O1xuICBzZWNvbmQ6IEFYRGF0ZVRpbWVQYXJ0O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBWENhbGVuZGFyQ29uZmlnIHtcbiAgd2Vla2VuZDogbnVtYmVyW107XG4gIGZvcm1hdHM6IEFYRGF0ZVRpbWVEaXNwbGF5Rm9ybWF0cztcbiAgZGF5TmFtZXM6IEFYRGF0ZVRpbWVVbml0TmFtZXM7XG4gIG1vbnRoTmFtZXM6IEFYRGF0ZVRpbWVVbml0TmFtZXM7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWENhbGVuZGFyIHtcbiAgcHJpdmF0ZSBfY29uZmlnOiBBWENhbGVuZGFyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFYQ2FsZW5kYXJDb25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHdlZWtlbmQoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcud2Vla2VuZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZm9ybWF0cygpOiBBWERhdGVUaW1lRGlzcGxheUZvcm1hdHMge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuZm9ybWF0cztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGF5TmFtZXMoKTogQVhEYXRlVGltZVVuaXROYW1lcyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5kYXlOYW1lcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgbW9udGhOYW1lcygpOiBBWERhdGVUaW1lVW5pdE5hbWVzIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLm1vbnRoTmFtZXM7XG4gIH1cblxuICBhYnN0cmFjdCBuYW1lKCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBkYXlPZk1vbnRoKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgZGF5T2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgZGF5T2ZXZWVrKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgbW9udGhPZlllYXIoZGF0ZTogRGF0ZSk6IG51bWJlcjtcblxuICBhYnN0cmFjdCB3ZWVrT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3QgeWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGFkZChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgYW1vdW50OiBudW1iZXIpOiBBWERhdGVUaW1lO1xuXG4gIGFic3RyYWN0IHNldChkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCwgdmFsdWU6IG51bWJlcik6IEFYRGF0ZVRpbWU7XG5cbiAgYWJzdHJhY3Qgc3RhcnRPZihkYXRlOiBEYXRlLCB1bml0OiBUaW1lVW5pdCk6IEFYRGF0ZVRpbWU7XG5cbiAgYWJzdHJhY3QgZW5kT2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lO1xuXG4gIGFic3RyYWN0IGNyZWF0ZSh2YWx1ZTogQVhEYXRlVmFsdWUpOiBBWERhdGVUaW1lO1xuXG4gIGFic3RyYWN0IHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBBWERhdGVUaW1lO1xufVxuXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZSB7XG4gIHByaXZhdGUgX2RhdGU6IERhdGU7XG5cbiAgZ2V0IGRhdGUoKTogRGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGU7XG4gIH1cblxuICBwcml2YXRlIF9jYWxlbmRhcjogQVhDYWxlbmRhcjtcbiAgZ2V0IGNhbGVuZGFyKCk6IEFYQ2FsZW5kYXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHZhbHVlOiBEYXRlLCBjYWxlbmRhcjogQVhDYWxlbmRhcikge1xuICAgIHRoaXMuX2NhbGVuZGFyID0gY2FsZW5kYXI7XG4gICAgdGhpcy5fZGF0ZSA9IHZhbHVlO1xuICB9XG5cbiAgY2xvbmUoKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIG5ldyBBWERhdGVUaW1lKHRoaXMuZGF0ZSwgdGhpcy5jYWxlbmRhcik7XG4gIH1cblxuICBnZXQgZGF5T2ZNb250aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgZGF5T2ZZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmRheU9mWWVhcih0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IGRheU9mV2VlaygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZldlZWsodGhpcy5kYXRlKTtcbiAgfVxuXG4gIGdldCBob3VyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGUuZ2V0SG91cnMoKTtcbiAgfVxuXG4gIGdldCBtaW51dGUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0ZS5nZXRNaW51dGVzKCk7XG4gIH1cblxuICBnZXQgc2Vjb25kKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGUuZ2V0U2Vjb25kcygpO1xuICB9XG5cbiAgZ2V0IHllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IG1vbnRoT2ZZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgd2Vla09mWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci53ZWVrT2ZZZWFyKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgbW9udGgoKTogQVhDYWxlbmRhck1vbnRoIHtcbiAgICByZXR1cm4gbmV3IEFYQ2FsZW5kYXJNb250aCh0aGlzKTtcbiAgfVxuXG4gIGFkZCh1bml0OiBUaW1lVW5pdCwgYW1vdW50OiBudW1iZXIpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuYWRkKHRoaXMuZGF0ZSwgdW5pdCwgYW1vdW50KTtcbiAgfVxuXG4gIHNldCh1bml0OiBUaW1lVW5pdCA9ICdkYXknLCB2YWx1ZTogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLnNldCh0aGlzLmRhdGUsIHVuaXQsIHZhbHVlKTtcbiAgfVxuXG4gIGR1cmF0aW9uKGVuZDogRGF0ZSB8IEFYRGF0ZVRpbWUpOiBBWFRpbWVTcGFuIHtcbiAgICBjb25zdCBkYXRlID0gZW5kIGluc3RhbmNlb2YgQVhEYXRlVGltZSA/IGVuZC5kYXRlIDogKGVuZCBhcyBEYXRlKTtcbiAgICBjb25zdCB2YWwgPSBuZXcgQVhEYXRlVGltZShkYXRlLCB0aGlzLmNhbGVuZGFyKTtcbiAgICBjb25zdCByYW5nZSA9IG5ldyBBWERhdGVUaW1lUmFuZ2UodGhpcywgdmFsKTtcbiAgICByZXR1cm4gcmFuZ2UuZHVyYXRpb24oKTtcbiAgfVxuXG4gIHN0YXJ0T2YodW5pdDogVGltZVVuaXQgPSAnZGF5Jyk6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5zdGFydE9mKHRoaXMuZGF0ZSwgdW5pdCk7XG4gIH1cblxuICBlbmRPZih1bml0OiBUaW1lVW5pdCA9ICdkYXknKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmVuZE9mKHRoaXMuZGF0ZSwgdW5pdCk7XG4gIH1cblxuICBwcml2YXRlIF9mb3JtYXRLZXlzID0ge1xuICAgIHNzOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpLCAyKSxcbiAgICBzOiAoKSA9PiB0aGlzLmRhdGUuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCksXG4gICAgLy9cbiAgICBkZDogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSksIDIpLFxuICAgIEREOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLmRheU9mTW9udGgodGhpcy5kYXRlKSwgMiksXG4gICAgZDogKCkgPT4gdGhpcy5jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSkudG9TdHJpbmcoKSxcbiAgICAvL1xuICAgIG1tOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0TWludXRlcygpLCAyKSxcbiAgICBtOiAoKSA9PiB0aGlzLmRhdGUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCksXG4gICAgLy9cbiAgICBNTU1NOiAoKSA9PiB0aGlzLmNhbGVuZGFyLm1vbnRoTmFtZXNbdGhpcy5jYWxlbmRhci5tb250aE9mWWVhcih0aGlzLmRhdGUpIC0gMV0ubG9uZyxcbiAgICBNTU06ICgpID0+IHRoaXMuY2FsZW5kYXIubW9udGhOYW1lc1t0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSkgLSAxXS5zaG9ydCxcbiAgICBNTTogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci5tb250aE9mWWVhcih0aGlzLmRhdGUpLCAyKSxcbiAgICBNOiAoKSA9PiB0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSksXG4gICAgLy9cbiAgICBEREREOiAoKSA9PiB0aGlzLmNhbGVuZGFyLmRheU5hbWVzW3RoaXMuY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMuZGF0ZSkgLSAxXS5sb25nLFxuICAgIERERDogKCkgPT4gdGhpcy5jYWxlbmRhci5kYXlOYW1lc1t0aGlzLmNhbGVuZGFyLmRheU9mV2Vlayh0aGlzLmRhdGUpIC0gMV0uc2hvcnQsXG4gICAgLy9cbiAgICB5eXl5OiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLnllYXIodGhpcy5kYXRlKSwgNCksXG4gICAgWVlZWTogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSksIDQpLFxuICAgIHl5OiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLnllYXIodGhpcy5kYXRlKSwgNCkuc3Vic3RyaW5nKDIpLFxuICAgIFlZOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmNhbGVuZGFyLnllYXIodGhpcy5kYXRlKSwgNCkuc3Vic3RyaW5nKDIpLFxuICAgIC8vXG4gICAgSEg6ICgpID0+IHRoaXMucGFkKHRoaXMuZGF0ZS5nZXRIb3VycygpLCAyKSxcbiAgICBIOiAoKSA9PiB0aGlzLmRhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpLFxuICAgIC8vXG4gICAgaGg6ICgpID0+IHRoaXMucGFkKHRoaXMuZGF0ZS5nZXRIb3VycygpICUgMTIgfHwgMTIsIDIpLFxuICAgIGg6ICgpID0+ICh0aGlzLmRhdGUuZ2V0SG91cnMoKSAlIDEyIHx8IDEyKS50b1N0cmluZygpLFxuICAgIC8vXG4gICAgQTogKCkgPT4gKHRoaXMuZGF0ZS5nZXRIb3VycygpIDwgMTIgPyAnYW0nIDogJ3BtJyksXG4gICAgYTogKCkgPT4gKHRoaXMuZGF0ZS5nZXRIb3VycygpIDwgMTIgPyAnYW0nIDogJ3BtJyksXG4gICAgLy9cImRhdGVcIjogKCkgPT4gdGhpcy5mb3JtYXQodGhpcy5nZXRGb3JtYXRQYXR0ZXJuKCdmYS1JUicsICdkYXRlJykpLFxuICB9O1xuXG4gIGZvcm1hdChmb3JtYXQ6IHN0cmluZyA9IHRoaXMuY2FsZW5kYXIuZm9ybWF0cy5kYXRlVGltZURpc3BsYXkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChvcmRlckJ5KE9iamVjdC5rZXlzKHRoaXMuX2Zvcm1hdEtleXMpLCAoYykgPT4gYy5sZW5ndGgsIFsnZGVzYyddKS5qb2luKCd8JyksICdnaScpO1xuICAgIHJldHVybiBmb3JtYXQucmVwbGFjZShyZSwgKG1hdGNoZWQpID0+IHtcbiAgICAgIGNvbnN0IGYgPSB0aGlzLl9mb3JtYXRLZXlzW21hdGNoZWRdXG4gICAgICBjb25zdCByID0gZigpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfSk7XG4gIH1cblxuXG4gIHByaXZhdGUgcGFkKG4sIHdpZHRoLCB6ID0gJzAnKSB7XG4gICAgbiA9IG4gKyAnJztcbiAgICByZXR1cm4gbi5sZW5ndGggPj0gd2lkdGggPyBuIDogbmV3IEFycmF5KHdpZHRoIC0gbi5sZW5ndGggKyAxKS5qb2luKHopICsgbjtcbiAgfVxuXG4gIGVxdWFsKHZhbHVlOiBEYXRlIHwgQVhEYXRlVGltZSwgdW5pdDogVGltZVVuaXQgPSAnZGF5Jykge1xuICAgIHJldHVybiB0aGlzLmNvbXBhcmUodmFsdWUsIHVuaXQpID09IDA7XG4gIH1cblxuICBjb21wYXJlKHZhbHVlOiBEYXRlIHwgQVhEYXRlVGltZSwgdW5pdDogVGltZVVuaXQgPSAnZGF5Jykge1xuICAgIGNvbnN0IGRhdGUgPSB2YWx1ZSBpbnN0YW5jZW9mIEFYRGF0ZVRpbWUgPyB2YWx1ZS5kYXRlIDogKHZhbHVlIGFzIERhdGUpO1xuICAgIGNvbnN0IHZhbCA9IG5ldyBBWERhdGVUaW1lKGRhdGUsIHRoaXMuY2FsZW5kYXIpO1xuICAgIGNvbnN0IGZ1bmMgPSAodjE6IG51bWJlciwgdjI6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKHYxID09IHYyKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSBlbHNlIGlmICh2MSA+IHYyKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH07XG4gICAgbGV0IHAgPSAwO1xuICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMueWVhciwgdmFsLnllYXIpO1xuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIHAgPSB0aGlzLmNvbXBhcmUodmFsLCAneWVhcicpO1xuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLndlZWtPZlllYXIsIHZhbC53ZWVrT2ZZZWFyKSA6IHA7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHAgPSB0aGlzLmNvbXBhcmUodmFsLCAneWVhcicpO1xuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLm1vbnRoT2ZZZWFyLCB2YWwubW9udGhPZlllYXIpIDogcDtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgIHAgPSB0aGlzLmNvbXBhcmUodmFsLCAneWVhcicpO1xuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLmRheU9mWWVhciwgdmFsLmRheU9mWWVhcikgOiBwO1xuICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgIHAgPSB0aGlzLmNvbXBhcmUodmFsLCAnZGF5Jyk7XG4gICAgICAgIHJldHVybiBwID09IDAgPyBmdW5jKHRoaXMuaG91ciwgdmFsLmhvdXIpIDogcDtcbiAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgIHAgPSB0aGlzLmNvbXBhcmUodmFsLCAnaG91cicpO1xuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLm1pbnV0ZSwgdmFsLm1pbnV0ZSkgOiBwO1xuICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgcCA9IHRoaXMuY29tcGFyZSh2YWwsICdtaW51dGUnKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5zZWNvbmQsIHZhbC5zZWNvbmQpIDogcDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmdW5jKHRoaXMuZGF0ZS5nZXRUaW1lKCksIHZhbC5kYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBWENhbGVuZGFyTW9udGgge1xuICBwcml2YXRlIF9yYW5nZTogQVhEYXRlVGltZVJhbmdlO1xuICBwdWJsaWMgZ2V0IHJhbmdlKCk6IEFYRGF0ZVRpbWVSYW5nZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JhbmdlO1xuICB9XG4gIHB1YmxpYyBzZXQgcmFuZ2UodjogQVhEYXRlVGltZVJhbmdlKSB7XG4gICAgdGhpcy5fcmFuZ2UgPSB2O1xuICB9XG5cbiAgcHVibGljIGdldCB0b3RhbERheXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZS5lbmRUaW1lLmRheU9mTW9udGg7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihkYXRlOiBBWERhdGVUaW1lKSB7XG4gICAgdGhpcy5pbmRleCA9IGRhdGUuZGF0ZS5nZXRNb250aCgpO1xuICAgIHRoaXMubmFtZSA9IGRhdGUuZm9ybWF0KCdNTU1NJyk7XG4gICAgdGhpcy5yYW5nZSA9IG5ldyBBWERhdGVUaW1lUmFuZ2UoXG4gICAgICBuZXcgQVhEYXRlVGltZShkYXRlLnN0YXJ0T2YoJ21vbnRoJykuZGF0ZSwgZGF0ZS5jYWxlbmRhciksXG4gICAgICBuZXcgQVhEYXRlVGltZShkYXRlLmVuZE9mKCdtb250aCcpLmRhdGUsIGRhdGUuY2FsZW5kYXIpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYVGltZVNwYW5Ub3RhbCB7XG4gIG1pbGlzZWNvbmRzOiBudW1iZXI7XG4gIHNlY29uZHM6IG51bWJlcjtcbiAgbWludXRlczogbnVtYmVyO1xuICBob3VyczogbnVtYmVyO1xuICBkYXlzOiBudW1iZXI7XG4gIHdlZWtzOiBudW1iZXI7XG4gIG1vbnRoczogbnVtYmVyO1xuICB5ZWFyczogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFYVGltZVNwYW4ge1xuICBtaWxpc2Vjb25kczogbnVtYmVyO1xuICBzZWNvbmRzOiBudW1iZXI7XG4gIG1pbnV0ZXM6IG51bWJlcjtcbiAgaG91cnM6IG51bWJlcjtcbiAgZGF5czogbnVtYmVyO1xuICBtb250aHM6IG51bWJlcjtcbiAgeWVhcnM6IG51bWJlcjtcbiAgdG90YWw6IEFYVGltZVNwYW5Ub3RhbDtcbn1cblxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWVSYW5nZSB7XG4gIHByaXZhdGUgX3N0YXJ0VGltZTogQVhEYXRlVGltZTtcbiAgcHJpdmF0ZSBfZW5kVGltZTogQVhEYXRlVGltZTtcblxuICBwdWJsaWMgZ2V0IHN0YXJ0VGltZSgpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRUaW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBlbmRUaW1lKCk6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiB0aGlzLl9lbmRUaW1lO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc3RhcnRUaW1lOiBBWERhdGVUaW1lLCBlbmRUaW1lOiBBWERhdGVUaW1lKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gc3RhcnRUaW1lO1xuICAgIHRoaXMuX2VuZFRpbWUgPSBlbmRUaW1lO1xuICB9XG5cbiAgZHVyYXRpb24oKTogQVhUaW1lU3BhbiB7XG4gICAgY29uc3QgcmVzdWx0OiBBWFRpbWVTcGFuID0ge1xuICAgICAgbWlsaXNlY29uZHM6IDAsXG4gICAgICBzZWNvbmRzOiAwLFxuICAgICAgbWludXRlczogMCxcbiAgICAgIGhvdXJzOiAwLFxuICAgICAgZGF5czogMCxcbiAgICAgIG1vbnRoczogMCxcbiAgICAgIHllYXJzOiAwLFxuICAgICAgdG90YWw6IHtcbiAgICAgICAgbWlsaXNlY29uZHM6IDAsXG4gICAgICAgIHNlY29uZHM6IDAsXG4gICAgICAgIG1pbnV0ZXM6IDAsXG4gICAgICAgIGhvdXJzOiAwLFxuICAgICAgICBkYXlzOiAwLFxuICAgICAgICB3ZWVrczogMCxcbiAgICAgICAgbW9udGhzOiAwLFxuICAgICAgICB5ZWFyczogMCxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IG9uZV9zZWNvbmQgPSAxMDAwO1xuICAgIGNvbnN0IG9uZV9taW4gPSBvbmVfc2Vjb25kICogNjA7XG4gICAgY29uc3Qgb25lX2hvdXIgPSBvbmVfbWluICogNjA7XG4gICAgY29uc3Qgb25lX2RheSA9IG9uZV9ob3VyICogMjQ7XG4gICAgY29uc3Qgb25lX3dlZWsgPSBvbmVfZGF5ICogNztcbiAgICBjb25zdCBvbmVfeWVhciA9IDM2NS4yNSAqIG9uZV9kYXk7XG4gICAgY29uc3Qgb25lX21vbnRoID0gb25lX3llYXIgLyAxMjtcbiAgICBjb25zdCBzdGFydFRpbWUgPSB0aGlzLl9zdGFydFRpbWUuZGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3QgZW5kVGltZSA9IHRoaXMuX2VuZFRpbWUuZGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGVuZFRpbWUgLSBzdGFydFRpbWUpO1xuICAgIC8vXG4gICAgcmVzdWx0LnRvdGFsLm1pbGlzZWNvbmRzID0gZGlmZjtcbiAgICByZXN1bHQudG90YWwuc2Vjb25kcyA9IE51bWJlcigoZGlmZiAvIG9uZV9zZWNvbmQpLnRvRml4ZWQoMikpO1xuICAgIHJlc3VsdC50b3RhbC5taW51dGVzID0gTnVtYmVyKChkaWZmIC8gb25lX21pbikudG9GaXhlZCgyKSk7XG4gICAgcmVzdWx0LnRvdGFsLmhvdXJzID0gTnVtYmVyKChkaWZmIC8gb25lX2hvdXIpLnRvRml4ZWQoMikpO1xuICAgIHJlc3VsdC50b3RhbC5kYXlzID0gTnVtYmVyKChkaWZmIC8gb25lX2RheSkudG9GaXhlZCgyKSk7XG4gICAgcmVzdWx0LnRvdGFsLndlZWtzID0gTnVtYmVyKChkaWZmIC8gb25lX3dlZWspLnRvRml4ZWQoMikpO1xuICAgIC8vXG4gICAgLy8gbGV0IG1vbnRocyA9ICh0aGlzLmVuZFRpbWUueWVhciAtIHRoaXMuc3RhcnRUaW1lLnllYXIpICogMTI7XG4gICAgLy8gbW9udGhzICs9IHRoaXMuZW5kVGltZS5tb250aE9mWWVhciAtIHRoaXMuc3RhcnRUaW1lLm1vbnRoT2ZZZWFyICsgMTtcbiAgICAvLyBpZiAodGhpcy5lbmRUaW1lLmRheU9mWWVhciA8IHRoaXMuc3RhcnRUaW1lLmRheU9mWWVhcikge1xuICAgIC8vICAgICBtb250aHMtLTtcbiAgICAvLyB9XG4gICAgLy8gcmVzdWx0LnRvdGFsLm1vbnRocyA9IE1hdGguYWJzKG1vbnRocyk7XG4gICAgLy8gVE9ETzogcmV2aWV3XG4gICAgcmVzdWx0LnRvdGFsLm1vbnRocyA9IE51bWJlcigoZGlmZiAvIG9uZV9tb250aCkudG9GaXhlZCgyKSk7XG4gICAgcmVzdWx0LnRvdGFsLnllYXJzID0gTnVtYmVyKChkaWZmIC8gb25lX3llYXIpLnRvRml4ZWQoMikpO1xuICAgIC8vXG4gICAgcmVzdWx0Lm1pbGlzZWNvbmRzID0gcmVzdWx0LnRvdGFsLm1pbGlzZWNvbmRzICUgMTAwMDtcbiAgICByZXN1bHQuc2Vjb25kcyA9IE51bWJlcigocmVzdWx0LnRvdGFsLnNlY29uZHMgJSA2MCkudG9GaXhlZCgwKSk7XG4gICAgcmVzdWx0Lm1pbnV0ZXMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5taW51dGVzICUgNjApLnRvRml4ZWQoMCkpO1xuICAgIHJlc3VsdC5ob3VycyA9IE51bWJlcigocmVzdWx0LnRvdGFsLmhvdXJzICUgMjQpLnRvRml4ZWQoMCkpO1xuICAgIC8vIFRPRE86IHJldmlld1xuICAgIHJlc3VsdC5kYXlzID0gTnVtYmVyKChyZXN1bHQudG90YWwuZGF5cyAlIDMwLjQpLnRvRml4ZWQoMCkpO1xuICAgIHJlc3VsdC5tb250aHMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5tb250aHMgJSAxMikudG9GaXhlZCgwKSk7XG4gICAgcmVzdWx0LnllYXJzID0gTnVtYmVyKHJlc3VsdC50b3RhbC55ZWFycy50b0ZpeGVkKDApKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZW51bXVyYXRlKHVuaXQ6IFRpbWVVbml0ID0gJ2RheScsIGFtb3VudCA9IDEpOiBBWERhdGVUaW1lW10ge1xuICAgIGNvbnN0IHJlc3VsdDogQVhEYXRlVGltZVtdID0gW107XG4gICAgbGV0IGl0ZW0gPSB0aGlzLl9zdGFydFRpbWUuY2xvbmUoKTtcbiAgICB3aGlsZSAoaXRlbS5jb21wYXJlKHRoaXMuX2VuZFRpbWUsIHVuaXQpIDwgMSkge1xuICAgICAgaWYgKCFyZXN1bHQuc29tZSgoYykgPT4gYy5lcXVhbChpdGVtLCB1bml0KSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgICBpdGVtID0gaXRlbS5hZGQodW5pdCwgYW1vdW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGluY2x1ZGVzKHZhbHVlOiBBWERhdGVUaW1lLCB1bml0OiBUaW1lVW5pdCA9ICdkYXknKTogYm9vbGVhbiB7XG4gIC8vICAgLy8gVE9ETzogPz9cbiAgLy8gICByZXR1cm4gdHJ1ZTtcbiAgLy8gfVxuXG4gIC8vIGdldFZpZXdDb21wYWlyZSh2aWV3KSB7XG4gIC8vICAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgLy8gICAgICAgICBjYXNlICdkYXknOlxuICAvLyAgICAgICAgICAgICByZXR1cm4gJ1lNRCc7XG4gIC8vICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAvLyAgICAgICAgICAgICByZXR1cm4gJ1lNJztcbiAgLy8gICAgICAgICBjYXNlICd5ZWFyJzpcbiAgLy8gICAgICAgICAgICAgcmV0dXJuICdZJztcbiAgLy8gICAgIH1cbiAgLy8gfVxufVxuIl19
323
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvZGF0ZVRpbWUvc3JjL2xpYi9kYXRldGltZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFrRHpELE1BQU0sT0FBZ0IsVUFBVTtJQUc5Qjs7T0FFRztJQUNILFlBQVksTUFBd0I7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUM5QixDQUFDO0lBR0QsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDL0IsQ0FBQztDQTRCRjtBQUVELE1BQU0sT0FBTyxVQUFVO0lBR3JCLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBR0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxZQUFZLEtBQVcsRUFBRSxRQUFvQjtRQXdFN0MsMkJBQTJCO1FBQ25CLGdCQUFXLEdBQUc7WUFFcEIsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0MsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQzFDLEVBQUU7WUFDRixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFELEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUU7WUFDdkQsRUFBRTtZQUNGLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRTtZQUMxQyxFQUFFO1lBQ0YsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckgsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckgsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzRCxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUM3QyxFQUFFO1lBQ0YsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEgsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckgsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDbkMsRUFBRTtZQUNGLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEQsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0RCxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNqRSxFQUFFO1lBQ0YsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0MsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO1lBQ3hDLEVBQUU7WUFDRixFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRTtZQUNyRCxFQUFFO1lBQ0YsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xELENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNsRCxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixD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LENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUQsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFpQixLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUM7UUFDMUMsTUFBTSxNQUFNLEdBQWlCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQjtZQUNELElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUMvQjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FpQkYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZWZhdWx0cywgb3JkZXJCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyB0cmFuc2xhdGVTeW5jIH0gZnJvbSAnQGFjb3JleC9jb3JlL3RyYW5zbGF0aW9uJztcblxuZXhwb3J0IHR5cGUgVGltZVVuaXQgPSAnbXMnIHwgJ3NlY29uZCcgfCAnbWludXRlJyB8ICdob3VyJyB8ICdkYXknIHwgJ21vbnRoJyB8ICd5ZWFyJyB8ICd3ZWVrJztcblxuZXhwb3J0IGludGVyZmFjZSBBWERhdGVWYWx1ZSB7XG4gIHllYXI6IG51bWJlcjtcbiAgbW9udGg6IG51bWJlcjtcbiAgZGF0ZTogbnVtYmVyO1xuICBob3Vycz86IG51bWJlcjtcbiAgbWludXRlcz86IG51bWJlcjtcbiAgc2Vjb25kcz86IG51bWJlcjtcbiAgbXM/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhEYXRlVGltZURpc3BsYXlGb3JtYXRzIHtcbiAgZGF0ZUlucHV0OiBzdHJpbmc7XG4gIHRpbWVJbnB1dDogc3RyaW5nO1xuICBkYXRlVGltZUlucHV0OiBzdHJpbmc7XG4gIGRhdGVEaXNwbGF5OiBzdHJpbmc7XG4gIHRpbWVEaXNwbGF5OiBzdHJpbmc7XG4gIGRhdGVUaW1lRGlzcGxheTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBBWERhdGVUaW1lVW5pdE5hbWVzID0geyBsb25nOiBzdHJpbmc7IHNob3J0OiBzdHJpbmc7IGxldHRlcjogc3RyaW5nIH1bXTtcblxuZXhwb3J0IHR5cGUgQVhEYXRlVGltZVBhcnQgPSB7XG4gIGtleTogc3RyaW5nO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBwbGFjZWhvbGRlcnM6IHN0cmluZ1tdO1xuICB0eXBlZFZhbHVlPzogc3RyaW5nIHwgbnVsbDtcbiAgZGVmYXVsdDogbnVtYmVyO1xuICBlbmFibGVkOiBib29sZWFuO1xuICByZWFsVmFsdWU6ICgpID0+IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFYRGF0ZVRpbWVQYXJ0cyA9IHtcbiAgeWVhcjogQVhEYXRlVGltZVBhcnQ7XG4gIG1vbnRoOiBBWERhdGVUaW1lUGFydDtcbiAgZGF5OiBBWERhdGVUaW1lUGFydDtcbiAgaG91cjogQVhEYXRlVGltZVBhcnQ7XG4gIG1pbnV0ZTogQVhEYXRlVGltZVBhcnQ7XG4gIHNlY29uZDogQVhEYXRlVGltZVBhcnQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEFYQ2FsZW5kYXJDb25maWcge1xuICB3ZWVrZGF5czogbnVtYmVyW107XG4gIHdlZWtlbmQ6IG51bWJlcltdO1xuICBmb3JtYXRzOiBBWERhdGVUaW1lRGlzcGxheUZvcm1hdHM7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWENhbGVuZGFyIHtcbiAgcHJpdmF0ZSBfY29uZmlnOiBBWENhbGVuZGFyQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWc6IEFYQ2FsZW5kYXJDb25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHdlZWtlbmQoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcud2Vla2VuZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZm9ybWF0cygpOiBBWERhdGVUaW1lRGlzcGxheUZvcm1hdHMge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuZm9ybWF0cztcbiAgfVxuXG5cbiAgcHVibGljIGdldCB3ZWVrZGF5cygpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy53ZWVrZGF5cztcbiAgfVxuXG5cbiAgYWJzdHJhY3QgbmFtZSgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgZGF5T2ZNb250aChkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGRheU9mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IGRheU9mV2VlayhkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IG1vbnRoT2ZZZWFyKGRhdGU6IERhdGUpOiBudW1iZXI7XG5cbiAgYWJzdHJhY3Qgd2Vla09mWWVhcihkYXRlOiBEYXRlKTogbnVtYmVyO1xuXG4gIGFic3RyYWN0IHllYXIoZGF0ZTogRGF0ZSk6IG51bWJlcjtcblxuICBhYnN0cmFjdCBhZGQoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQsIGFtb3VudDogbnVtYmVyKTogQVhEYXRlVGltZTtcblxuICBhYnN0cmFjdCBzZXQoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQsIHZhbHVlOiBudW1iZXIpOiBBWERhdGVUaW1lO1xuXG4gIGFic3RyYWN0IHN0YXJ0T2YoZGF0ZTogRGF0ZSwgdW5pdDogVGltZVVuaXQpOiBBWERhdGVUaW1lO1xuXG4gIGFic3RyYWN0IGVuZE9mKGRhdGU6IERhdGUsIHVuaXQ6IFRpbWVVbml0KTogQVhEYXRlVGltZTtcblxuICBhYnN0cmFjdCBjcmVhdGUodmFsdWU6IEFYRGF0ZVZhbHVlKTogQVhEYXRlVGltZTtcblxuICBhYnN0cmFjdCBwYXJzZSh2YWx1ZTogc3RyaW5nKTogQVhEYXRlVGltZTtcbn1cblxuZXhwb3J0IGNsYXNzIEFYRGF0ZVRpbWUge1xuICBwcml2YXRlIF9kYXRlOiBEYXRlO1xuXG4gIGdldCBkYXRlKCk6IERhdGUge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2FsZW5kYXI6IEFYQ2FsZW5kYXI7XG4gIGdldCBjYWxlbmRhcigpOiBBWENhbGVuZGFyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXI7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogRGF0ZSwgY2FsZW5kYXI6IEFYQ2FsZW5kYXIpIHtcbiAgICB0aGlzLl9jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHRoaXMuX2RhdGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGNsb25lKCk6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiBuZXcgQVhEYXRlVGltZSh0aGlzLmRhdGUsIHRoaXMuY2FsZW5kYXIpO1xuICB9XG5cbiAgZ2V0IGRheU9mTW9udGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZNb250aCh0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IGRheU9mWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5kYXlPZlllYXIodGhpcy5kYXRlKTtcbiAgfVxuXG4gIGdldCBkYXlPZldlZWsoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuZGF5T2ZXZWVrKHRoaXMuZGF0ZSk7XG4gIH1cblxuICBnZXQgaG91cigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kYXRlLmdldEhvdXJzKCk7XG4gIH1cblxuICBnZXQgbWludXRlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGUuZ2V0TWludXRlcygpO1xuICB9XG5cbiAgZ2V0IHNlY29uZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kYXRlLmdldFNlY29uZHMoKTtcbiAgfVxuXG4gIGdldCB5ZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLnllYXIodGhpcy5kYXRlKTtcbiAgfVxuXG4gIGdldCBtb250aE9mWWVhcigpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5tb250aE9mWWVhcih0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IHdlZWtPZlllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIud2Vla09mWWVhcih0aGlzLmRhdGUpO1xuICB9XG5cbiAgZ2V0IG1vbnRoKCk6IEFYQ2FsZW5kYXJNb250aCB7XG4gICAgcmV0dXJuIG5ldyBBWENhbGVuZGFyTW9udGgodGhpcyk7XG4gIH1cblxuICBhZGQodW5pdDogVGltZVVuaXQsIGFtb3VudDogbnVtYmVyKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyLmFkZCh0aGlzLmRhdGUsIHVuaXQsIGFtb3VudCk7XG4gIH1cblxuICBzZXQodW5pdDogVGltZVVuaXQgPSAnZGF5JywgdmFsdWU6IG51bWJlcik6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5zZXQodGhpcy5kYXRlLCB1bml0LCB2YWx1ZSk7XG4gIH1cblxuICBkdXJhdGlvbihlbmQ6IERhdGUgfCBBWERhdGVUaW1lKTogQVhUaW1lU3BhbiB7XG4gICAgY29uc3QgZGF0ZSA9IGVuZCBpbnN0YW5jZW9mIEFYRGF0ZVRpbWUgPyBlbmQuZGF0ZSA6IChlbmQgYXMgRGF0ZSk7XG4gICAgY29uc3QgdmFsID0gbmV3IEFYRGF0ZVRpbWUoZGF0ZSwgdGhpcy5jYWxlbmRhcik7XG4gICAgY29uc3QgcmFuZ2UgPSBuZXcgQVhEYXRlVGltZVJhbmdlKHRoaXMsIHZhbCk7XG4gICAgcmV0dXJuIHJhbmdlLmR1cmF0aW9uKCk7XG4gIH1cblxuICBzdGFydE9mKHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsZW5kYXIuc3RhcnRPZih0aGlzLmRhdGUsIHVuaXQpO1xuICB9XG5cbiAgZW5kT2YodW5pdDogVGltZVVuaXQgPSAnZGF5Jyk6IEFYRGF0ZVRpbWUge1xuICAgIHJldHVybiB0aGlzLl9jYWxlbmRhci5lbmRPZih0aGlzLmRhdGUsIHVuaXQpO1xuICB9XG5cbiAgLy9UT0RPOiByZW1vdmUgdW51c2VkIGl0ZW1zXG4gIHByaXZhdGUgX2Zvcm1hdEtleXMgPSB7XG5cbiAgICBzczogKCkgPT4gdGhpcy5wYWQodGhpcy5kYXRlLmdldFNlY29uZHMoKSwgMiksXG4gICAgczogKCkgPT4gdGhpcy5kYXRlLmdldFNlY29uZHMoKS50b1N0cmluZygpLFxuICAgIC8vXG4gICAgZGQ6ICgpID0+IHRoaXMucGFkKHRoaXMuY2FsZW5kYXIuZGF5T2ZNb250aCh0aGlzLmRhdGUpLCAyKSxcbiAgICBERDogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci5kYXlPZk1vbnRoKHRoaXMuZGF0ZSksIDIpLFxuICAgIGQ6ICgpID0+IHRoaXMuY2FsZW5kYXIuZGF5T2ZNb250aCh0aGlzLmRhdGUpLnRvU3RyaW5nKCksXG4gICAgLy9cbiAgICBtbTogKCkgPT4gdGhpcy5wYWQodGhpcy5kYXRlLmdldE1pbnV0ZXMoKSwgMiksXG4gICAgbTogKCkgPT4gdGhpcy5kYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLFxuICAgIC8vXG4gICAgTU1NTTogKCkgPT4gdHJhbnNsYXRlU3luYyhgZGF0ZVRpbWUubW9udGhzLiR7dGhpcy5jYWxlbmRhci5uYW1lKCl9LmxvbmcuJHt0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSkgLSAxfWApLFxuICAgIE1NTTogKCkgPT4gdHJhbnNsYXRlU3luYyhgZGF0ZVRpbWUubW9udGhzLiR7dGhpcy5jYWxlbmRhci5uYW1lKCl9LnNob3J0LiR7dGhpcy5jYWxlbmRhci5tb250aE9mWWVhcih0aGlzLmRhdGUpIC0gMX1gKSxcbiAgICBNTTogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci5tb250aE9mWWVhcih0aGlzLmRhdGUpLCAyKSxcbiAgICBNOiAoKSA9PiB0aGlzLmNhbGVuZGFyLm1vbnRoT2ZZZWFyKHRoaXMuZGF0ZSksXG4gICAgLy9cbiAgICBFOiAoKSA9PiB0cmFuc2xhdGVTeW5jKGBkYXRlVGltZS53ZWVrZGF5cy5sb25nLiR7dGhpcy5jYWxlbmRhci53ZWVrZGF5c1t0aGlzLmNhbGVuZGFyLmRheU9mV2Vlayh0aGlzLmRhdGUpIC0gMV19YCksXG4gICAgREREOiAoKSA9PiB0cmFuc2xhdGVTeW5jKGBkYXRlVGltZS53ZWVrZGF5cy5zaG9ydC4ke3RoaXMuY2FsZW5kYXIud2Vla2RheXNbdGhpcy5jYWxlbmRhci5kYXlPZldlZWsodGhpcy5kYXRlKSAtIDFdfWApLFxuICAgIEREREQ6ICgpID0+IHRoaXMuX2Zvcm1hdEtleXNbJ0UnXSgpLFxuICAgIC8vXG4gICAgeXl5eTogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSksIDQpLFxuICAgIFlZWVk6ICgpID0+IHRoaXMucGFkKHRoaXMuY2FsZW5kYXIueWVhcih0aGlzLmRhdGUpLCA0KSxcbiAgICB5eTogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSksIDQpLnN1YnN0cmluZygyKSxcbiAgICBZWTogKCkgPT4gdGhpcy5wYWQodGhpcy5jYWxlbmRhci55ZWFyKHRoaXMuZGF0ZSksIDQpLnN1YnN0cmluZygyKSxcbiAgICAvL1xuICAgIEhIOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0SG91cnMoKSwgMiksXG4gICAgSDogKCkgPT4gdGhpcy5kYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKSxcbiAgICAvL1xuICAgIGhoOiAoKSA9PiB0aGlzLnBhZCh0aGlzLmRhdGUuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCAyKSxcbiAgICBoOiAoKSA9PiAodGhpcy5kYXRlLmdldEhvdXJzKCkgJSAxMiB8fCAxMikudG9TdHJpbmcoKSxcbiAgICAvL1xuICAgIEE6ICgpID0+ICh0aGlzLmRhdGUuZ2V0SG91cnMoKSA8IDEyID8gJ2FtJyA6ICdwbScpLFxuICAgIGE6ICgpID0+ICh0aGlzLmRhdGUuZ2V0SG91cnMoKSA8IDEyID8gJ2FtJyA6ICdwbScpLFxuICAgICdkYXRlJzogKG9wdGlvbnMpID0+IHRoaXMuZm9ybWF0KHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShvcHRpb25zLmxvY2FsZSwgJ3Nob3J0RGF0ZScpKSxcbiAgICAnc2hvcnREYXRlJzogKG9wdGlvbnMpID0+IHRoaXMuZm9ybWF0KHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShvcHRpb25zLmxvY2FsZSwgJ3Nob3J0RGF0ZScpKSxcbiAgICAnbG9uZ0RhdGUnOiAob3B0aW9ucykgPT4gdGhpcy5mb3JtYXQodGhpcy5nZXREYXRlVGltZUZvcm1hdEJ5TG9jYWxlKG9wdGlvbnMubG9jYWxlLCAnbG9uZ0RhdGUnKSksXG4gICAgLy9cbiAgICAnc2hvcnRUaW1lJzogKG9wdGlvbnMpID0+IHRoaXMuZm9ybWF0KHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShvcHRpb25zLmxvY2FsZSwgJ3Nob3J0VGltZScpKSxcbiAgICAndGltZSc6IChvcHRpb25zKSA9PiB0aGlzLmZvcm1hdCh0aGlzLmdldERhdGVUaW1lRm9ybWF0QnlMb2NhbGUob3B0aW9ucy5sb2NhbGUsICdzaG9ydFRpbWUnKSksXG4gICAgJ2xvbmdUaW1lJzogKG9wdGlvbnMpID0+IHRoaXMuZm9ybWF0KHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShvcHRpb25zLmxvY2FsZSwgJ2xvbmdUaW1lJykpLFxuICAgIC8vXG4gICAgJ2RhdGV0aW1lJzogKG9wdGlvbnMpID0+IHRoaXMuZm9ybWF0KHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShvcHRpb25zLmxvY2FsZSwgJ2xvbmdUaW1lJykpLFxuICB9O1xuXG4gIGZvcm1hdChmb3JtYXQ6IHN0cmluZyA9IHRoaXMuZ2V0RGF0ZVRpbWVGb3JtYXRCeUxvY2FsZShuYXZpZ2F0b3IubGFuZ3VhZ2UsICdzaG9ydERhdGUnKSwgb3B0aW9ucz86IHsgbG9jYWxlPzogc3RyaW5nIH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IGVmZmVjdGl2ZU9wdGlvbnMgPSBkZWZhdWx0cyh7fSwgb3B0aW9ucywge1xuICAgICAgbG9jYWxlOiBuYXZpZ2F0b3IubGFuZ3VhZ2VcbiAgICB9KTtcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAob3JkZXJCeShPYmplY3Qua2V5cyh0aGlzLl9mb3JtYXRLZXlzKSwgKGMpID0+IGMubGVuZ3RoLCBbJ2Rlc2MnXSkuam9pbignfCcpLCAnZ2knKTtcbiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UocmUsIChtYXRjaGVkKSA9PiB7XG4gICAgICBjb25zdCBmID0gdGhpcy5fZm9ybWF0S2V5c1ttYXRjaGVkXVxuICAgICAgY29uc3QgciA9IGYoZWZmZWN0aXZlT3B0aW9ucyk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9KTtcbiAgfVxuXG5cblxuICBnZXREYXRlVGltZUZvcm1hdEJ5TG9jYWxlKGxvY2FsZTogc3RyaW5nLCBzdHlsZTogJ3Nob3J0RGF0ZScgfCAnbG9uZ0RhdGUnIHwgJ3Nob3J0VGltZScgfCAnbG9uZ1RpbWUnKTogc3RyaW5nIHtcbiAgICBsZXQgb3B0aW9uczogSW50bC5EYXRlVGltZUZvcm1hdE9wdGlvbnMgPSB7fTtcbiAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICBjYXNlICdzaG9ydERhdGUnOiAvLyBZZWFyLCBNb250aCwgRGF5XG4gICAgICAgIG9wdGlvbnMgPSB7IHllYXI6ICdudW1lcmljJywgbW9udGg6ICcyLWRpZ2l0JywgZGF5OiAnMi1kaWdpdCcgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsb25nRGF0ZSc6IC8vIFdlZWtkYXksIE1vbnRoIG5hbWUsIERheSwgWWVhclxuICAgICAgICBvcHRpb25zID0geyB3ZWVrZGF5OiAnbG9uZycsIHllYXI6ICdudW1lcmljJywgbW9udGg6ICdsb25nJywgZGF5OiAnbnVtZXJpYycgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzaG9ydFRpbWUnOiAvLyBIb3VyLCBNaW51dGVcbiAgICAgICAgb3B0aW9ucyA9IHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JywgaG91cjEyOiBmYWxzZSB9O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2xvbmdUaW1lJzogLy8gSG91ciwgTWludXRlLCBTZWNvbmRcbiAgICAgICAgb3B0aW9ucyA9IHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0Jywgc2Vjb25kOiAnMi1kaWdpdCcsIGhvdXIxMjogZmFsc2UgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jYWxlLCBvcHRpb25zKTtcblxuICAgIC8vIEdldCBwYXJ0cyBvZiB0aGUgZGF0ZSBhbmQvb3IgdGltZVxuICAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyLmZvcm1hdFRvUGFydHMobmV3IERhdGUoKSk7XG5cbiAgICAvLyBNYXAgcGFydHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBmb3JtYXRcbiAgICBjb25zdCBmb3JtYXRNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICAnZGF5JzogJ2RkJyxcbiAgICAgICdtb250aCc6IHN0eWxlID09ICdsb25nRGF0ZScgPyAnTU1NTScgOiAnTU0nLFxuICAgICAgJ3llYXInOiAneXl5eScsXG4gICAgICAnaG91cic6ICdISCcsXG4gICAgICAnbWludXRlJzogJ21tJyxcbiAgICAgICdzZWNvbmQnOiAnc3MnLFxuICAgICAgJ3dlZWtkYXknOiAnRScsXG4gICAgICAnbGl0ZXJhbCc6ICcnXG4gICAgfTtcblxuICAgIC8vIENvbnN0cnVjdCB0aGUgZGF0ZSBhbmQvb3IgdGltZSBmb3JtYXQgc3RyaW5nXG4gICAgcmV0dXJuIHBhcnRzLm1hcChwYXJ0ID0+IHtcbiAgICAgIGlmIChwYXJ0LnR5cGUgPT09ICdsaXRlcmFsJykge1xuICAgICAgICAvLyBVc2UgdGhlIGxpdGVyYWwgcGFydCBkaXJlY3RseSBhcyBzZXBhcmF0b3JcbiAgICAgICAgcmV0dXJuIHBhcnQudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZm9ybWF0TWFwW3BhcnQudHlwZV0gfHwgcGFydC52YWx1ZTtcbiAgICAgIH1cbiAgICB9KS5qb2luKCcnKTtcbiAgfVxuXG5cblxuICBwcml2YXRlIHBhZChuLCB3aWR0aCwgeiA9ICcwJykge1xuICAgIG4gPSBuICsgJyc7XG4gICAgcmV0dXJuIG4ubGVuZ3RoID49IHdpZHRoID8gbiA6IG5ldyBBcnJheSh3aWR0aCAtIG4ubGVuZ3RoICsgMSkuam9pbih6KSArIG47XG4gIH1cblxuICBlcXVhbCh2YWx1ZTogRGF0ZSB8IEFYRGF0ZVRpbWUsIHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wYXJlKHZhbHVlLCB1bml0KSA9PSAwO1xuICB9XG5cbiAgY29tcGFyZSh2YWx1ZTogRGF0ZSB8IEFYRGF0ZVRpbWUsIHVuaXQ6IFRpbWVVbml0ID0gJ2RheScpIHtcbiAgICBjb25zdCBkYXRlID0gdmFsdWUgaW5zdGFuY2VvZiBBWERhdGVUaW1lID8gdmFsdWUuZGF0ZSA6ICh2YWx1ZSBhcyBEYXRlKTtcbiAgICBjb25zdCB2YWwgPSBuZXcgQVhEYXRlVGltZShkYXRlLCB0aGlzLmNhbGVuZGFyKTtcbiAgICBjb25zdCBmdW5jID0gKHYxOiBudW1iZXIsIHYyOiBudW1iZXIpID0+IHtcbiAgICAgIGlmICh2MSA9PSB2Mikge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gZWxzZSBpZiAodjEgPiB2Mikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGxldCBwID0gMDtcbiAgICBzd2l0Y2ggKHVuaXQpIHtcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICByZXR1cm4gZnVuYyh0aGlzLnllYXIsIHZhbC55ZWFyKTtcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy53ZWVrT2ZZZWFyLCB2YWwud2Vla09mWWVhcikgOiBwO1xuICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5tb250aE9mWWVhciwgdmFsLm1vbnRoT2ZZZWFyKSA6IHA7XG4gICAgICBjYXNlICdkYXknOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ3llYXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5kYXlPZlllYXIsIHZhbC5kYXlPZlllYXIpIDogcDtcbiAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ2RheScpO1xuICAgICAgICByZXR1cm4gcCA9PSAwID8gZnVuYyh0aGlzLmhvdXIsIHZhbC5ob3VyKSA6IHA7XG4gICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICBwID0gdGhpcy5jb21wYXJlKHZhbCwgJ2hvdXInKTtcbiAgICAgICAgcmV0dXJuIHAgPT0gMCA/IGZ1bmModGhpcy5taW51dGUsIHZhbC5taW51dGUpIDogcDtcbiAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgIHAgPSB0aGlzLmNvbXBhcmUodmFsLCAnbWludXRlJyk7XG4gICAgICAgIHJldHVybiBwID09IDAgPyBmdW5jKHRoaXMuc2Vjb25kLCB2YWwuc2Vjb25kKSA6IHA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZnVuYyh0aGlzLmRhdGUuZ2V0VGltZSgpLCB2YWwuZGF0ZS5nZXRUaW1lKCkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQVhDYWxlbmRhck1vbnRoIHtcbiAgcHJpdmF0ZSBfcmFuZ2U6IEFYRGF0ZVRpbWVSYW5nZTtcbiAgcHVibGljIGdldCByYW5nZSgpOiBBWERhdGVUaW1lUmFuZ2Uge1xuICAgIHJldHVybiB0aGlzLl9yYW5nZTtcbiAgfVxuICBwdWJsaWMgc2V0IHJhbmdlKHY6IEFYRGF0ZVRpbWVSYW5nZSkge1xuICAgIHRoaXMuX3JhbmdlID0gdjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdG90YWxEYXlzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2UuZW5kVGltZS5kYXlPZk1vbnRoO1xuICB9XG5cbiAgY29uc3RydWN0b3IoZGF0ZTogQVhEYXRlVGltZSkge1xuICAgIHRoaXMuaW5kZXggPSBkYXRlLmRhdGUuZ2V0TW9udGgoKTtcbiAgICB0aGlzLm5hbWUgPSBkYXRlLmZvcm1hdCgnTU1NTScpO1xuICAgIHRoaXMucmFuZ2UgPSBuZXcgQVhEYXRlVGltZVJhbmdlKFxuICAgICAgbmV3IEFYRGF0ZVRpbWUoZGF0ZS5zdGFydE9mKCdtb250aCcpLmRhdGUsIGRhdGUuY2FsZW5kYXIpLFxuICAgICAgbmV3IEFYRGF0ZVRpbWUoZGF0ZS5lbmRPZignbW9udGgnKS5kYXRlLCBkYXRlLmNhbGVuZGFyKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpbmRleDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFRpbWVTcGFuVG90YWwge1xuICBtaWxpc2Vjb25kczogbnVtYmVyO1xuICBzZWNvbmRzOiBudW1iZXI7XG4gIG1pbnV0ZXM6IG51bWJlcjtcbiAgaG91cnM6IG51bWJlcjtcbiAgZGF5czogbnVtYmVyO1xuICB3ZWVrczogbnVtYmVyO1xuICBtb250aHM6IG51bWJlcjtcbiAgeWVhcnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFRpbWVTcGFuIHtcbiAgbWlsaXNlY29uZHM6IG51bWJlcjtcbiAgc2Vjb25kczogbnVtYmVyO1xuICBtaW51dGVzOiBudW1iZXI7XG4gIGhvdXJzOiBudW1iZXI7XG4gIGRheXM6IG51bWJlcjtcbiAgbW9udGhzOiBudW1iZXI7XG4gIHllYXJzOiBudW1iZXI7XG4gIHRvdGFsOiBBWFRpbWVTcGFuVG90YWw7XG59XG5cbmV4cG9ydCBjbGFzcyBBWERhdGVUaW1lUmFuZ2Uge1xuICBwcml2YXRlIF9zdGFydFRpbWU6IEFYRGF0ZVRpbWU7XG4gIHByaXZhdGUgX2VuZFRpbWU6IEFYRGF0ZVRpbWU7XG5cbiAgcHVibGljIGdldCBzdGFydFRpbWUoKTogQVhEYXRlVGltZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXJ0VGltZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZW5kVGltZSgpOiBBWERhdGVUaW1lIHtcbiAgICByZXR1cm4gdGhpcy5fZW5kVGltZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHN0YXJ0VGltZTogQVhEYXRlVGltZSwgZW5kVGltZTogQVhEYXRlVGltZSkge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IHN0YXJ0VGltZTtcbiAgICB0aGlzLl9lbmRUaW1lID0gZW5kVGltZTtcbiAgfVxuXG4gIGR1cmF0aW9uKCk6IEFYVGltZVNwYW4ge1xuICAgIGNvbnN0IHJlc3VsdDogQVhUaW1lU3BhbiA9IHtcbiAgICAgIG1pbGlzZWNvbmRzOiAwLFxuICAgICAgc2Vjb25kczogMCxcbiAgICAgIG1pbnV0ZXM6IDAsXG4gICAgICBob3VyczogMCxcbiAgICAgIGRheXM6IDAsXG4gICAgICBtb250aHM6IDAsXG4gICAgICB5ZWFyczogMCxcbiAgICAgIHRvdGFsOiB7XG4gICAgICAgIG1pbGlzZWNvbmRzOiAwLFxuICAgICAgICBzZWNvbmRzOiAwLFxuICAgICAgICBtaW51dGVzOiAwLFxuICAgICAgICBob3VyczogMCxcbiAgICAgICAgZGF5czogMCxcbiAgICAgICAgd2Vla3M6IDAsXG4gICAgICAgIG1vbnRoczogMCxcbiAgICAgICAgeWVhcnM6IDAsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBvbmVfc2Vjb25kID0gMTAwMDtcbiAgICBjb25zdCBvbmVfbWluID0gb25lX3NlY29uZCAqIDYwO1xuICAgIGNvbnN0IG9uZV9ob3VyID0gb25lX21pbiAqIDYwO1xuICAgIGNvbnN0IG9uZV9kYXkgPSBvbmVfaG91ciAqIDI0O1xuICAgIGNvbnN0IG9uZV93ZWVrID0gb25lX2RheSAqIDc7XG4gICAgY29uc3Qgb25lX3llYXIgPSAzNjUuMjUgKiBvbmVfZGF5O1xuICAgIGNvbnN0IG9uZV9tb250aCA9IG9uZV95ZWFyIC8gMTI7XG4gICAgY29uc3Qgc3RhcnRUaW1lID0gdGhpcy5fc3RhcnRUaW1lLmRhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGVuZFRpbWUgPSB0aGlzLl9lbmRUaW1lLmRhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IGRpZmYgPSBNYXRoLmFicyhlbmRUaW1lIC0gc3RhcnRUaW1lKTtcbiAgICAvL1xuICAgIHJlc3VsdC50b3RhbC5taWxpc2Vjb25kcyA9IGRpZmY7XG4gICAgcmVzdWx0LnRvdGFsLnNlY29uZHMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfc2Vjb25kKS50b0ZpeGVkKDIpKTtcbiAgICByZXN1bHQudG90YWwubWludXRlcyA9IE51bWJlcigoZGlmZiAvIG9uZV9taW4pLnRvRml4ZWQoMikpO1xuICAgIHJlc3VsdC50b3RhbC5ob3VycyA9IE51bWJlcigoZGlmZiAvIG9uZV9ob3VyKS50b0ZpeGVkKDIpKTtcbiAgICByZXN1bHQudG90YWwuZGF5cyA9IE51bWJlcigoZGlmZiAvIG9uZV9kYXkpLnRvRml4ZWQoMikpO1xuICAgIHJlc3VsdC50b3RhbC53ZWVrcyA9IE51bWJlcigoZGlmZiAvIG9uZV93ZWVrKS50b0ZpeGVkKDIpKTtcbiAgICAvL1xuICAgIC8vIGxldCBtb250aHMgPSAodGhpcy5lbmRUaW1lLnllYXIgLSB0aGlzLnN0YXJ0VGltZS55ZWFyKSAqIDEyO1xuICAgIC8vIG1vbnRocyArPSB0aGlzLmVuZFRpbWUubW9udGhPZlllYXIgLSB0aGlzLnN0YXJ0VGltZS5tb250aE9mWWVhciArIDE7XG4gICAgLy8gaWYgKHRoaXMuZW5kVGltZS5kYXlPZlllYXIgPCB0aGlzLnN0YXJ0VGltZS5kYXlPZlllYXIpIHtcbiAgICAvLyAgICAgbW9udGhzLS07XG4gICAgLy8gfVxuICAgIC8vIHJlc3VsdC50b3RhbC5tb250aHMgPSBNYXRoLmFicyhtb250aHMpO1xuICAgIC8vIFRPRE86IHJldmlld1xuICAgIHJlc3VsdC50b3RhbC5tb250aHMgPSBOdW1iZXIoKGRpZmYgLyBvbmVfbW9udGgpLnRvRml4ZWQoMikpO1xuICAgIHJlc3VsdC50b3RhbC55ZWFycyA9IE51bWJlcigoZGlmZiAvIG9uZV95ZWFyKS50b0ZpeGVkKDIpKTtcbiAgICAvL1xuICAgIHJlc3VsdC5taWxpc2Vjb25kcyA9IHJlc3VsdC50b3RhbC5taWxpc2Vjb25kcyAlIDEwMDA7XG4gICAgcmVzdWx0LnNlY29uZHMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5zZWNvbmRzICUgNjApLnRvRml4ZWQoMCkpO1xuICAgIHJlc3VsdC5taW51dGVzID0gTnVtYmVyKChyZXN1bHQudG90YWwubWludXRlcyAlIDYwKS50b0ZpeGVkKDApKTtcbiAgICByZXN1bHQuaG91cnMgPSBOdW1iZXIoKHJlc3VsdC50b3RhbC5ob3VycyAlIDI0KS50b0ZpeGVkKDApKTtcbiAgICAvLyBUT0RPOiByZXZpZXdcbiAgICByZXN1bHQuZGF5cyA9IE51bWJlcigocmVzdWx0LnRvdGFsLmRheXMgJSAzMC40KS50b0ZpeGVkKDApKTtcbiAgICByZXN1bHQubW9udGhzID0gTnVtYmVyKChyZXN1bHQudG90YWwubW9udGhzICUgMTIpLnRvRml4ZWQoMCkpO1xuICAgIHJlc3VsdC55ZWFycyA9IE51bWJlcihyZXN1bHQudG90YWwueWVhcnMudG9GaXhlZCgwKSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGVudW11cmF0ZSh1bml0OiBUaW1lVW5pdCA9ICdkYXknLCBhbW91bnQgPSAxKTogQVhEYXRlVGltZVtdIHtcbiAgICBjb25zdCByZXN1bHQ6IEFYRGF0ZVRpbWVbXSA9IFtdO1xuICAgIGxldCBpdGVtID0gdGhpcy5fc3RhcnRUaW1lLmNsb25lKCk7XG4gICAgd2hpbGUgKGl0ZW0uY29tcGFyZSh0aGlzLl9lbmRUaW1lLCB1bml0KSA8IDEpIHtcbiAgICAgIGlmICghcmVzdWx0LnNvbWUoKGMpID0+IGMuZXF1YWwoaXRlbSwgdW5pdCkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgICAgfVxuICAgICAgaXRlbSA9IGl0ZW0uYWRkKHVuaXQsIGFtb3VudCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpbmNsdWRlcyh2YWx1ZTogQVhEYXRlVGltZSwgdW5pdDogVGltZVVuaXQgPSAnZGF5Jyk6IGJvb2xlYW4ge1xuICAvLyAgIC8vIFRPRE86ID8/XG4gIC8vICAgcmV0dXJuIHRydWU7XG4gIC8vIH1cblxuICAvLyBnZXRWaWV3Q29tcGFpcmUodmlldykge1xuICAvLyAgICAgc3dpdGNoICh2aWV3KSB7XG4gIC8vICAgICAgICAgY2FzZSAnZGF5JzpcbiAgLy8gICAgICAgICAgICAgcmV0dXJuICdZTUQnO1xuICAvLyAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgLy8gICAgICAgICAgICAgcmV0dXJuICdZTSc7XG4gIC8vICAgICAgICAgY2FzZSAneWVhcic6XG4gIC8vICAgICAgICAgICAgIHJldHVybiAnWSc7XG4gIC8vICAgICB9XG4gIC8vIH1cbn1cbiJdfQ==