@skyux/datetime 11.3.0 → 11.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -233,8 +233,8 @@ export class SkyFuzzyDateService {
233
233
  };
234
234
  }
235
235
  getFuzzyDateRange(startFuzzyDate, endFuzzyDate) {
236
- let start;
237
- let end;
236
+ const start = this.getMomentFromFuzzyDate(startFuzzyDate);
237
+ const end = this.getMomentFromFuzzyDate(endFuzzyDate);
238
238
  let days;
239
239
  let months;
240
240
  let years;
@@ -243,8 +243,6 @@ export class SkyFuzzyDateService {
243
243
  startFuzzyDate.year &&
244
244
  endFuzzyDate &&
245
245
  endFuzzyDate.year) {
246
- start = this.getMomentFromFuzzyDate(startFuzzyDate);
247
- end = this.getMomentFromFuzzyDate(endFuzzyDate);
248
246
  years = end.diff(start, 'years');
249
247
  months = end.diff(start, 'months');
250
248
  days = end.diff(start, 'days');
@@ -254,6 +252,8 @@ export class SkyFuzzyDateService {
254
252
  years: years,
255
253
  months: months,
256
254
  days: days,
255
+ startDate: start.toDate(),
256
+ endDate: end.toDate(),
257
257
  valid: valid,
258
258
  };
259
259
  }
@@ -408,4 +408,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImpor
408
408
  providedIn: 'root',
409
409
  }]
410
410
  }], ctorParameters: () => [{ type: i1.SkyAppLocaleProvider }] });
411
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnV6enktZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5LWRhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBR3RELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBdUIzQzs7R0FFRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsY0FBYyxDQUFTO0lBRXZCLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXJDLFlBQVksY0FBb0M7UUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1FBQ25ELGNBQWM7YUFDWCxhQUFhLEVBQUU7YUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNwQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsMEJBQTBCO0lBQ25CLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLG9CQUFvQixDQUFD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aUJBQWlCLENBQUMsUUFBUSxDQUFDO1NBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaUJBQWlCLENBQUMsU0FBdUI7UUFDdkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQseURBQXlEO1FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCwwQ0FBMEM7UUFDMUMsSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OEdBdmRVLG1CQUFtQjtrSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUFwcExvY2FsZVByb3ZpZGVyIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreUZ1enp5RGF0ZSB9IGZyb20gJy4vZnV6enktZGF0ZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBTa3lEYXRlSW5kZXhlcyB7XG4gIHllYXJJbmRleDogbnVtYmVyO1xuICBtb250aEluZGV4OiBudW1iZXI7XG4gIGRheUluZGV4OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBTa3lGdXp6eURhdGVSYW5nZSB7XG4gIHllYXJzOiBzdHJpbmc7XG4gIG1vbnRoczogc3RyaW5nO1xuICBkYXlzOiBzdHJpbmc7XG4gIHZhbGlkOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RnV6enlEYXRlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICNjdXJyZW50TG9jYWxlOiBzdHJpbmc7XG5cbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKGxvY2FsZVByb3ZpZGVyOiBTa3lBcHBMb2NhbGVQcm92aWRlcikge1xuICAgIHRoaXMuI2N1cnJlbnRMb2NhbGUgPSBsb2NhbGVQcm92aWRlci5kZWZhdWx0TG9jYWxlO1xuICAgIGxvY2FsZVByb3ZpZGVyXG4gICAgICAuZ2V0TG9jYWxlSW5mbygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy4jbmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChsb2NhbGVJbmZvKSA9PiB7XG4gICAgICAgIHRoaXMuI2N1cnJlbnRMb2NhbGUgPSBsb2NhbGVJbmZvLmxvY2FsZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMuI25nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBicm93c2VyJ3MgY3VycmVudCBsb2NhbGUgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIGdldEN1cnJlbnRMb2NhbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy4jY3VycmVudExvY2FsZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaG9ydCBmb3JtYXQgb2YgdGhlIHByb3ZpZGVkIGxvY2FsZS5cbiAgICogSWYgbm90IHByb3ZpZGVkLCB0aGUgbG9jYWxlIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgYnJvd3NlcidzIGRlZmF1bHQgbG9jYWxlLlxuICAgKi9cbiAgcHVibGljIGdldExvY2FsZVNob3J0Rm9ybWF0KGxvY2FsZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG1vbWVudC5sb2NhbGVEYXRhKGxvY2FsZSB8fCB0aGlzLiNjdXJyZW50TG9jYWxlKS5sb25nRGF0ZUZvcm1hdCgnTCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBmdXp6eSBkYXRlIGJ5IHVzaW5nIHRoZSBwcm92aWRlZCBmb3JtYXQgYW5kIGxvY2FsZSBzdHJpbmdzLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBsb2NhbGUgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBsb2NhbGUuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0KFxuICAgIGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLFxuICAgIGZvcm1hdD86IHN0cmluZyxcbiAgICBsb2NhbGU/OiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLiNpc0Z1enp5RGF0ZVZhbGlkKGZ1enp5RGF0ZSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuI2dldERhdGVTZXBhcmF0b3IoZm9ybWF0KTtcbiAgICBjb25zdCBkYXRlUGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZm9ybWF0VG9rZW5zOiBzdHJpbmdbXSA9IHNlcGFyYXRvclxuICAgICAgPyBmb3JtYXQuc3BsaXQoc2VwYXJhdG9yKVxuICAgICAgOiBbZm9ybWF0XTtcbiAgICBsb2NhbGUgPSBsb2NhbGUgfHwgdGhpcy4jY3VycmVudExvY2FsZTtcbiAgICBjb25zdCBmdXp6eURhdGVNb21lbnQgPVxuICAgICAgdGhpcy5nZXRNb21lbnRGcm9tRnV6enlEYXRlKGZ1enp5RGF0ZSkubG9jYWxlKGxvY2FsZSk7XG5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIGZvcm1hdFRva2Vucykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0b2tlbikge1xuICAgICAgICBzd2l0Y2ggKHRva2VuLnN1YnN0cigwLCAxKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICBpZiAoZnV6enlEYXRlLnllYXIpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICBpZiAoZnV6enlEYXRlLm1vbnRoKSB7XG4gICAgICAgICAgICAgIGRhdGVQYXJ0cy5wdXNoKGZ1enp5RGF0ZU1vbWVudC5mb3JtYXQodG9rZW4pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgaWYgKGZ1enp5RGF0ZS5kYXkpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVBhcnRzLmpvaW4oc2VwYXJhdG9yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHllYXJzIHdpbGwgZGVmYXVsdCB0byBjdXJyZW50IHllYXI7IG1vbnRocyB3aWxsIGRlZmF1bHQgdG8gSmFudWFyeTtcbiAgICogZGF5cyB3aWxsIGRlZmF1bHQgdG8gMXN0IG9mIHRoZSBtb250aC5cbiAgICovXG4gIHB1YmxpYyBnZXRNb21lbnRGcm9tRnV6enlEYXRlKGZ1enp5RGF0ZT86IFNreUZ1enp5RGF0ZSk6IGFueSB7XG4gICAgaWYgKCFmdXp6eURhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB5ZWFyID0gZnV6enlEYXRlLnllYXIgfHwgdGhpcy4jZ2V0RGVmYXVsdFllYXIoZnV6enlEYXRlKTtcbiAgICBjb25zdCBtb250aCA9XG4gICAgICBmdXp6eURhdGUubW9udGggJiYgZnV6enlEYXRlLm1vbnRoID4gMCA/IGZ1enp5RGF0ZS5tb250aCAtIDEgOiAwO1xuICAgIGNvbnN0IGRheSA9IGZ1enp5RGF0ZS5kYXkgfHwgMTtcblxuICAgIHJldHVybiBtb21lbnQoW3llYXIsIG1vbnRoLCBkYXldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgc3RyaW5nIGluc3RhbmNlIG9mIGEgZnV6enkgZGF0ZS5cbiAgICogQGRlcHJlY2F0ZWQgRGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0aGUgYGZvcm1hdGAgZnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0U3RyaW5nRnJvbUZ1enp5RGF0ZShcbiAgICBmdXp6eURhdGU/OiBTa3lGdXp6eURhdGUsXG4gICAgZGF0ZUZvcm1hdD86IHN0cmluZyxcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWZ1enp5RGF0ZSB8fCAhZGF0ZUZvcm1hdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuI2dldERhdGVTZXBhcmF0b3IoZGF0ZUZvcm1hdCk7XG4gICAgY29uc3QgZGF0ZUZvcm1hdEluZGV4ZXMgPSB0aGlzLiNnZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0KTtcbiAgICBsZXQgZGF0ZVN0cmluZyA9ICcnO1xuXG4gICAgLy8gR2V0IHRoZSBjb21wb25lbnRzIG9mIHRoZSBkYXRlIGluIHRoZSBvcmRlciBleHBlY3RlZCBvZiB0aGUgbG9jYWwgZm9ybWF0LlxuICAgIGNvbnN0IGRhdGVDb21wb25lbnRzID0gW1xuICAgICAgeyB2YWx1ZTogZnV6enlEYXRlLnllYXIgfHwgMCwgaW5kZXg6IGRhdGVGb3JtYXRJbmRleGVzLnllYXJJbmRleCB9LFxuICAgICAgeyB2YWx1ZTogZnV6enlEYXRlLm1vbnRoIHx8IDAsIGluZGV4OiBkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4IH0sXG4gICAgICB7IHZhbHVlOiBmdXp6eURhdGUuZGF5IHx8IDAsIGluZGV4OiBkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCB9LFxuICAgIF07XG4gICAgZGF0ZUNvbXBvbmVudHMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IGEuaW5kZXggLSBiLmluZGV4KTtcblxuICAgIGRhdGVDb21wb25lbnRzLmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xuICAgICAgaWYgKGNvbXBvbmVudC52YWx1ZSA+IDAgJiYgY29tcG9uZW50LmluZGV4ID4gLTEpIHtcbiAgICAgICAgaWYgKGRhdGVTdHJpbmcpIHtcbiAgICAgICAgICBkYXRlU3RyaW5nICs9IHNlcGFyYXRvcjtcbiAgICAgICAgfVxuICAgICAgICBkYXRlU3RyaW5nICs9IGNvbXBvbmVudC52YWx1ZS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRhdGVTdHJpbmcudHJpbSgpO1xuICB9XG5cbiAgcHVibGljIGdldEZ1enp5RGF0ZUZyb21TZWxlY3RlZERhdGUoXG4gICAgc2VsZWN0ZWREYXRlPzogRGF0ZSxcbiAgICBkYXRlRm9ybWF0Pzogc3RyaW5nLFxuICApOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICghc2VsZWN0ZWREYXRlIHx8ICFkYXRlRm9ybWF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnV6enlEYXRlOiBTa3lGdXp6eURhdGUgPSB7fTtcbiAgICBjb25zdCBkYXRlRm9ybWF0SW5kZXhlcyA9IHRoaXMuI2dldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQpO1xuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLnllYXJJbmRleCA+IC0xKSB7XG4gICAgICBmdXp6eURhdGUueWVhciA9IHNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCA+IC0xKSB7XG4gICAgICBmdXp6eURhdGUuZGF5ID0gc2VsZWN0ZWREYXRlLmdldERhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCA+IC0xKSB7XG4gICAgICBmdXp6eURhdGUubW9udGggPSBzZWxlY3RlZERhdGUuZ2V0TW9udGgoKSArIDE7IC8vIGdldE1vbnRoKCkgaXMgMC1pbmRleGVkLlxuICAgIH1cblxuICAgIHJldHVybiBmdXp6eURhdGU7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnV6enlEYXRlRnJvbVN0cmluZyhcbiAgICBkYXRlOiBzdHJpbmcsXG4gICAgZGF0ZUZvcm1hdD86IHN0cmluZyxcbiAgKTogU2t5RnV6enlEYXRlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWRhdGUgfHwgIWRhdGVGb3JtYXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZGF5OiBhbnk7XG4gICAgbGV0IG1vbnRoOiBhbnk7XG4gICAgbGV0IHllYXI6IGFueTtcblxuICAgIGNvbnN0IGRhdGVDb21wb25lbnRzID0gdGhpcy4jZ2V0RGF0ZUNvbXBvbmVudHMoZGF0ZSk7XG4gICAgY29uc3QgaW5kZXhlcyA9IHRoaXMuI2dldERhdGVWYWx1ZUluZGV4ZXMoZGF0ZSwgZGF0ZUZvcm1hdCk7XG5cbiAgICAvLyBMb29rIGF0IHRoZSBkYXRlIHN0cmluZydzIGNvbXBvbmVudCBjb3VudDpcbiAgICAvLyAzIGluZGljYXRlcyBhIGZ1bGwgZGF0ZVxuICAgIC8vIDIgaW5kaWNhdGVzIGEgbW9udGgteWVhciBvciBtb250aC1kYXkgZGF0ZVxuICAgIC8vIDEgaW5kaWNhdGVzIGEgeWVhclxuICAgIC8vIE90aGVyIGluZGljYXRlcyBhIHByb2JsZW1cbiAgICBzd2l0Y2ggKGRhdGVDb21wb25lbnRzLmxlbmd0aCkge1xuICAgICAgY2FzZSAzOlxuICAgICAgICB5ZWFyID0gZGF0ZUNvbXBvbmVudHNbaW5kZXhlcy55ZWFySW5kZXhdO1xuICAgICAgICBtb250aCA9IGRhdGVDb21wb25lbnRzW2luZGV4ZXMubW9udGhJbmRleF07XG4gICAgICAgIGRheSA9IGRhdGVDb21wb25lbnRzW2luZGV4ZXMuZGF5SW5kZXhdO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgLy8gRmlyc3QsIGNoZWNrIGZvciBhIDQtZGlnaXQgeWVhci4gSWYgeWVhciBleGlzdHMsIHRoZW4gd2UgYXNzdW1lIHRoZSBvdGhlciBjb21wb25lbnRcbiAgICAgICAgLy8gaXMgdGhlIG1vbnRoLiBPdGhlcndpc2UsIHdlIGNhbiBhc3N1bWUgdGhlIGlucHV0IGlzIG1tL2RkIG9yIG1tL3l5ICgyLWRpZ2l0IHllYXIpLlxuICAgICAgICB5ZWFyID0gdGhpcy4jZ2V0NERpZ2l0WWVhckZyb21EYXRlU3RyaW5nKGRhdGUpO1xuICAgICAgICBpZiAoeWVhcikge1xuICAgICAgICAgIG1vbnRoID1cbiAgICAgICAgICAgIGRhdGVDb21wb25lbnRzWzBdID09PSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1sxXVxuICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChpbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIC8vIG1tL2RkXG4gICAgICAgICAgICBtb250aCA9XG4gICAgICAgICAgICAgIGluZGV4ZXMubW9udGhJbmRleCA8IGluZGV4ZXMuZGF5SW5kZXhcbiAgICAgICAgICAgICAgICA/IGRhdGVDb21wb25lbnRzWzBdXG4gICAgICAgICAgICAgICAgOiBkYXRlQ29tcG9uZW50c1sxXTtcbiAgICAgICAgICAgIGRheSA9XG4gICAgICAgICAgICAgIG1vbnRoID09PSBkYXRlQ29tcG9uZW50c1sxXVxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBtbS95eVxuICAgICAgICAgICAgbW9udGggPVxuICAgICAgICAgICAgICBpbmRleGVzLm1vbnRoSW5kZXggPCBpbmRleGVzLnllYXJJbmRleFxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgeWVhciA9XG4gICAgICAgICAgICAgIG1vbnRoID09PSBkYXRlQ29tcG9uZW50c1sxXVxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgeWVhciA9IGRhdGU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtb250aCkge1xuICAgICAgLy8gQ2hlY2sgaWYgbW9udGggaXMgdmFsaWQuXG4gICAgICBtb250aCA9IHRoaXMuI2dldE1vbnRoTnVtYmVyKG1vbnRoKTtcbiAgICAgIGlmIChtb250aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgZGF5IGlzIHZhbGlkLlxuICAgICAgaWYgKGRheSkge1xuICAgICAgICBkYXkgPSBwYXJzZUludChkYXksIDEwKTtcbiAgICAgICAgY29uc3QgZnV6enlNb21lbnQgPSB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoe1xuICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgICBkYXk6IGRheSxcbiAgICAgICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzTmFOKGRheSkgfHwgIWZ1enp5TW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh5ZWFyKSB7XG4gICAgICB5ZWFyID1cbiAgICAgICAgeWVhci50b1N0cmluZygpLmxlbmd0aCA9PT0gMlxuICAgICAgICAgID8gbW9tZW50LnBhcnNlVHdvRGlnaXRZZWFyKHllYXIpXG4gICAgICAgICAgOiBwYXJzZUludCh5ZWFyLnRvU3RyaW5nKCksIDEwKTtcbiAgICAgIGlmIChpc05hTih5ZWFyKSB8fCB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoICE9PSA0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgZGF5OiBkYXksXG4gICAgICB5ZWFyOiB5ZWFyLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0RnV6enlEYXRlUmFuZ2UoXG4gICAgc3RhcnRGdXp6eURhdGU6IFNreUZ1enp5RGF0ZSxcbiAgICBlbmRGdXp6eURhdGU6IFNreUZ1enp5RGF0ZSxcbiAgKTogU2t5RnV6enlEYXRlUmFuZ2Uge1xuICAgIGxldCBzdGFydDtcbiAgICBsZXQgZW5kO1xuICAgIGxldCBkYXlzO1xuICAgIGxldCBtb250aHM7XG4gICAgbGV0IHllYXJzO1xuICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuXG4gICAgaWYgKFxuICAgICAgc3RhcnRGdXp6eURhdGUgJiZcbiAgICAgIHN0YXJ0RnV6enlEYXRlLnllYXIgJiZcbiAgICAgIGVuZEZ1enp5RGF0ZSAmJlxuICAgICAgZW5kRnV6enlEYXRlLnllYXJcbiAgICApIHtcbiAgICAgIHN0YXJ0ID0gdGhpcy5nZXRNb21lbnRGcm9tRnV6enlEYXRlKHN0YXJ0RnV6enlEYXRlKTtcbiAgICAgIGVuZCA9IHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShlbmRGdXp6eURhdGUpO1xuXG4gICAgICB5ZWFycyA9IGVuZC5kaWZmKHN0YXJ0LCAneWVhcnMnKTtcbiAgICAgIG1vbnRocyA9IGVuZC5kaWZmKHN0YXJ0LCAnbW9udGhzJyk7XG4gICAgICBkYXlzID0gZW5kLmRpZmYoc3RhcnQsICdkYXlzJyk7XG4gICAgICB2YWxpZCA9IGVuZC5kaWZmKHN0YXJ0KSA+PSAwO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB5ZWFyczogeWVhcnMsXG4gICAgICBtb250aHM6IG1vbnRocyxcbiAgICAgIGRheXM6IGRheXMsXG4gICAgICB2YWxpZDogdmFsaWQsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXJyZW50RnV6enlEYXRlKCk6IFNreUZ1enp5RGF0ZSB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBtb21lbnQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXk6IGN1cnJlbnREYXRlLmRhdGUoKSxcbiAgICAgIG1vbnRoOiBjdXJyZW50RGF0ZS5tb250aCgpICsgMSwgLy8gbW9udGgoKSBpcyAwLWluZGV4ZWQuXG4gICAgICB5ZWFyOiBjdXJyZW50RGF0ZS55ZWFyKCksXG4gICAgfTtcbiAgfVxuXG4gICNnZXRNb3N0UmVjZW50TGVhcFllYXIoKTogbnVtYmVyIHtcbiAgICBsZXQgbGVhcFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbiAgICB3aGlsZSAoIXRoaXMuI2lzTGVhcFllYXIobGVhcFllYXIpKSB7XG4gICAgICBsZWFwWWVhciAtPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFwWWVhcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBzZXBhcmF0b3IgZm91bmQgaW4gdGhlIHByb3ZpZGVkIGRhdGUgZm9ybWF0IHN0cmluZy5cbiAgICogQWNjZXB0ZWQgc2VwYXJhdG9yczogWycvJywgJy4nLCAnLScsICcgJ10uXG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0XG4gICAqL1xuICAjZ2V0RGF0ZVNlcGFyYXRvcihkYXRlRm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXR1cm5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNlcGFyYXRvcnMgPSBbJy8nLCAnLicsICctJywgJyAnXTtcblxuICAgIHNlcGFyYXRvcnMuZm9yRWFjaCgoc2VwYXJhdG9yKSA9PiB7XG4gICAgICBpZiAoIXJldHVyblZhbHVlICYmIGRhdGVGb3JtYXQuaW5kZXhPZihzZXBhcmF0b3IpID4gMCkge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IHNlcGFyYXRvcjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gICNnZXQ0RGlnaXRZZWFyRnJvbURhdGVTdHJpbmcoZGF0ZTogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgeWVhcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuI2dldERhdGVTZXBhcmF0b3IoZGF0ZSk7XG5cbiAgICBpZiAoc2VwYXJhdG9yKSB7XG4gICAgICAvLyBGaW5kIHRoZSBudW1iZXIgdmFsdWUgaW4gdGhlIHN0cmluZyB0aGF0IGlzIDQgZGlnaXRzIGxvbmcuXG4gICAgICBkYXRlLnNwbGl0KHNlcGFyYXRvcikuZm9yRWFjaCgoZGF0ZUNvbXBvbmVudCkgPT4ge1xuICAgICAgICBpZiAoIXllYXIgJiYgcGFyc2VJbnQoZGF0ZUNvbXBvbmVudCwgMTApLnRvU3RyaW5nKCkubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgeWVhciA9IGRhdGVDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh5ZWFyICYmICFpc05hTihOdW1iZXIoeWVhcikpKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQoeWVhciwgMTApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgI2lzTGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICB9XG5cbiAgI2dldE1vbnRoTnVtYmVyKG1vbnRoOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXR1cm5WYWx1ZTogbnVtYmVyO1xuICAgIGNvbnN0IG1vbnRoQXNOdW1iZXIgPSBwYXJzZUludChtb250aCwgMTApO1xuXG4gICAgLy8gSWYgdGhlIG1vbnRoIGNvbXBvbmVudCBpcyBhIHN0cmluZyAoXCJKYW51YXJ5XCIpLCB3ZSBjaGVjayB0byBzZWUgaWYgaXQgaXMgYSB2YWxpZCBtb250aFxuICAgIGlmIChpc05hTihtb250aEFzTnVtYmVyKSkge1xuICAgICAgaWYgKCFtb21lbnQobW9udGgsICdNTU1NJykuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVyblZhbHVlID0gcGFyc2VJbnQobW9tZW50KCkubW9udGgobW9udGgpLmZvcm1hdCgnTScpLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblZhbHVlID0gbW9udGhBc051bWJlcjtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbW9udGggaXMgYmV0d2VlbiAxIGFuZCAxMlxuICAgIGlmICghKDEgPD0gcmV0dXJuVmFsdWUgJiYgcmV0dXJuVmFsdWUgPD0gMTIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgI2dldERlZmF1bHRZZWFyKGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlKTogbnVtYmVyIHtcbiAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHJldHVybiBhIGxlYXAgeWVhciBvciB0aGUgY3VycmVudCB5ZWFyLlxuICAgIGlmIChmdXp6eURhdGUubW9udGggPT09IDIgJiYgZnV6enlEYXRlLmRheSA9PT0gMjkpIHtcbiAgICAgIHJldHVybiB0aGlzLiNnZXRNb3N0UmVjZW50TGVhcFllYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gIH1cblxuICAjZ2V0RGF0ZUNvbXBvbmVudHMoZGF0ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuI2dldERhdGVTZXBhcmF0b3IoZGF0ZSk7XG4gICAgaWYgKHNlcGFyYXRvcikge1xuICAgICAgcmV0dXJuIGRhdGUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtkYXRlXTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBvcmRlciBvZiB5ZWFyLCBtb250aCwgYW5kIGRheSBmcm9tIHRoZSBwcm92aWRlZCBkYXRlIGZvcm1hdC5cbiAgI2dldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQ6IHN0cmluZyk6IFNreURhdGVJbmRleGVzIHtcbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVGb3JtYXQuaW5kZXhPZigneScpLFxuICAgICAgbW9udGhJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdtJyksXG4gICAgICBkYXlJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdkJyksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIGVhY2ggb2YgdGhlIGRhdGUgY29tcG9uZW50cyBpbiB0aGUgcHJvdmlkZWQgc3RyaW5nIChtb250aCwgZGF5LCB5ZWFyKS5cbiAgI2dldERhdGVWYWx1ZUluZGV4ZXMoZGF0ZTogc3RyaW5nLCBkYXRlRm9ybWF0OiBzdHJpbmcpOiBTa3lEYXRlSW5kZXhlcyB7XG4gICAgY29uc3QgZGF0ZUZvcm1hdEluZGV4ZXMgPSB0aGlzLiNnZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0KTtcbiAgICBjb25zdCBkYXRlQ29tcG9uZW50SW5kZXhlcyA9IFtdO1xuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXggPiAtMSkge1xuICAgICAgZGF0ZUNvbXBvbmVudEluZGV4ZXMucHVzaChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMuZGF5SW5kZXgpO1xuICAgIH1cblxuICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4KSxcbiAgICAgIG1vbnRoSW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCksXG4gICAgICBkYXlJbmRleDogZGF0ZUNvbXBvbmVudEluZGV4ZXMuaW5kZXhPZihkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIFNreUZ1enp5RGF0ZSBvYmplY3QuIFZhbGlkIGZ1enp5IGRhdGVzIGFyZSBhcyBmb2xsb3dzOlxuICAgKiBtb250aCwgZGF5LCB5ZWFyXG4gICAqIG1vbnRoLCB5ZWFyXG4gICAqIG1vbnRoLCBkYXlcbiAgICogeWVhciBvbmx5XG4gICAqL1xuICAjaXNGdXp6eURhdGVWYWxpZChmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghZnV6enlEYXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgbm9uZSBvZiB0aGUgZGF0ZXMgcGFydCBhcmUgc3BlY2lmaWVkLCByZXR1cm4gZmFsc2UuXG4gICAgaWYgKCFmdXp6eURhdGUuZGF5ICYmICFmdXp6eURhdGUubW9udGggJiYgIWZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBtb250aCBpcyBzcGVjaWZpZWQsIHJldHVybiBmYWxzZS5cbiAgICBpZiAoIWZ1enp5RGF0ZS5kYXkgJiYgZnV6enlEYXRlLm1vbnRoICYmICFmdXp6eURhdGUueWVhcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgZGF5IGlzIHNwZWNpZmllZCwgcmV0dXJuIGZhbHNlLlxuICAgIGlmIChmdXp6eURhdGUuZGF5ICYmICFmdXp6eURhdGUubW9udGggJiYgIWZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
411
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnV6enktZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2RhdGV0aW1lL3NyYy9saWIvbW9kdWxlcy9kYXRlcGlja2VyL2Z1enp5LWRhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBR3RELE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBeUIzQzs7R0FFRztBQUlILE1BQU0sT0FBTyxtQkFBbUI7SUFDOUIsY0FBYyxDQUFTO0lBRXZCLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBRXJDLFlBQVksY0FBb0M7UUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1FBQ25ELGNBQWM7YUFDWCxhQUFhLEVBQUU7YUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNwQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsMEJBQTBCO0lBQ25CLFdBQVc7UUFDaEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7T0FFRztJQUNJLGdCQUFnQjtRQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLG9CQUFvQixDQUFD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QUFDO1lBQ3RFLFFBQVEsRUFBRSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1NBQ25FLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsaUJBQWlCLENBQUMsU0FBdUI7UUFDdkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQseURBQXlEO1FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCwwQ0FBMEM7UUFDMUMsSUFBSSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OEdBdGRVLG1CQUFtQjtrSEFBbkIsbUJBQW1CLGNBRmxCLE1BQU07OzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNreUFwcExvY2FsZVByb3ZpZGVyIH0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreUZ1enp5RGF0ZSB9IGZyb20gJy4vZnV6enktZGF0ZSc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBTa3lEYXRlSW5kZXhlcyB7XG4gIHllYXJJbmRleDogbnVtYmVyO1xuICBtb250aEluZGV4OiBudW1iZXI7XG4gIGRheUluZGV4OiBudW1iZXI7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmludGVyZmFjZSBTa3lGdXp6eURhdGVSYW5nZSB7XG4gIHllYXJzOiBzdHJpbmc7XG4gIG1vbnRoczogc3RyaW5nO1xuICBkYXlzOiBzdHJpbmc7XG4gIHN0YXJ0RGF0ZTogRGF0ZTtcbiAgZW5kRGF0ZTogRGF0ZTtcbiAgdmFsaWQ6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lGdXp6eURhdGVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgI2N1cnJlbnRMb2NhbGU6IHN0cmluZztcblxuICAjbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IobG9jYWxlUHJvdmlkZXI6IFNreUFwcExvY2FsZVByb3ZpZGVyKSB7XG4gICAgdGhpcy4jY3VycmVudExvY2FsZSA9IGxvY2FsZVByb3ZpZGVyLmRlZmF1bHRMb2NhbGU7XG4gICAgbG9jYWxlUHJvdmlkZXJcbiAgICAgIC5nZXRMb2NhbGVJbmZvKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2FsZUluZm8pID0+IHtcbiAgICAgICAgdGhpcy4jY3VycmVudExvY2FsZSA9IGxvY2FsZUluZm8ubG9jYWxlO1xuICAgICAgfSk7XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy4jbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGJyb3dzZXIncyBjdXJyZW50IGxvY2FsZSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgZ2V0Q3VycmVudExvY2FsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLiNjdXJyZW50TG9jYWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNob3J0IGZvcm1hdCBvZiB0aGUgcHJvdmlkZWQgbG9jYWxlLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHRoZSBsb2NhbGUgd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBsb2NhbGUuXG4gICAqL1xuICBwdWJsaWMgZ2V0TG9jYWxlU2hvcnRGb3JtYXQobG9jYWxlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50LmxvY2FsZURhdGEobG9jYWxlIHx8IHRoaXMuI2N1cnJlbnRMb2NhbGUpLmxvbmdEYXRlRm9ybWF0KCdMJyk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhIGZ1enp5IGRhdGUgYnkgdXNpbmcgdGhlIHByb3ZpZGVkIGZvcm1hdCBhbmQgbG9jYWxlIHN0cmluZ3MuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdGhlIGxvY2FsZSB3aWxsIGJlIHRha2VuIGZyb20gdGhlIGJyb3dzZXIncyBkZWZhdWx0IGxvY2FsZS5cbiAgICovXG4gIHB1YmxpYyBmb3JtYXQoXG4gICAgZnV6enlEYXRlOiBTa3lGdXp6eURhdGUsXG4gICAgZm9ybWF0Pzogc3RyaW5nLFxuICAgIGxvY2FsZT86IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuI2lzRnV6enlEYXRlVmFsaWQoZnV6enlEYXRlKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGlmICghZm9ybWF0KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy4jZ2V0RGF0ZVNlcGFyYXRvcihmb3JtYXQpO1xuICAgIGNvbnN0IGRhdGVQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBmb3JtYXRUb2tlbnM6IHN0cmluZ1tdID0gc2VwYXJhdG9yXG4gICAgICA/IGZvcm1hdC5zcGxpdChzZXBhcmF0b3IpXG4gICAgICA6IFtmb3JtYXRdO1xuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCB0aGlzLiNjdXJyZW50TG9jYWxlO1xuICAgIGNvbnN0IGZ1enp5RGF0ZU1vbWVudCA9XG4gICAgICB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoZnV6enlEYXRlKS5sb2NhbGUobG9jYWxlKTtcblxuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgZm9ybWF0VG9rZW5zKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIHN3aXRjaCAodG9rZW4uc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgIGlmIChmdXp6eURhdGUueWVhcikge1xuICAgICAgICAgICAgICBkYXRlUGFydHMucHVzaChmdXp6eURhdGVNb21lbnQuZm9ybWF0KHRva2VuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgIGlmIChmdXp6eURhdGUubW9udGgpIHtcbiAgICAgICAgICAgICAgZGF0ZVBhcnRzLnB1c2goZnV6enlEYXRlTW9tZW50LmZvcm1hdCh0b2tlbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBpZiAoZnV6enlEYXRlLmRheSkge1xuICAgICAgICAgICAgICBkYXRlUGFydHMucHVzaChmdXp6eURhdGVNb21lbnQuZm9ybWF0KHRva2VuKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlUGFydHMuam9pbihzZXBhcmF0b3IpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIG5vdCBwcm92aWRlZCwgeWVhcnMgd2lsbCBkZWZhdWx0IHRvIGN1cnJlbnQgeWVhcjsgbW9udGhzIHdpbGwgZGVmYXVsdCB0byBKYW51YXJ5O1xuICAgKiBkYXlzIHdpbGwgZGVmYXVsdCB0byAxc3Qgb2YgdGhlIG1vbnRoLlxuICAgKi9cbiAgcHVibGljIGdldE1vbWVudEZyb21GdXp6eURhdGUoZnV6enlEYXRlPzogU2t5RnV6enlEYXRlKTogYW55IHtcbiAgICBpZiAoIWZ1enp5RGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHllYXIgPSBmdXp6eURhdGUueWVhciB8fCB0aGlzLiNnZXREZWZhdWx0WWVhcihmdXp6eURhdGUpO1xuICAgIGNvbnN0IG1vbnRoID1cbiAgICAgIGZ1enp5RGF0ZS5tb250aCAmJiBmdXp6eURhdGUubW9udGggPiAwID8gZnV6enlEYXRlLm1vbnRoIC0gMSA6IDA7XG4gICAgY29uc3QgZGF5ID0gZnV6enlEYXRlLmRheSB8fCAxO1xuXG4gICAgcmV0dXJuIG1vbWVudChbeWVhciwgbW9udGgsIGRheV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgYSBzdHJpbmcgaW5zdGFuY2Ugb2YgYSBmdXp6eSBkYXRlLlxuICAgKiBAZGVwcmVjYXRlZCBEZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZSBgZm9ybWF0YCBmdW5jdGlvbi5cbiAgICovXG4gIHB1YmxpYyBnZXRTdHJpbmdGcm9tRnV6enlEYXRlKFxuICAgIGZ1enp5RGF0ZT86IFNreUZ1enp5RGF0ZSxcbiAgICBkYXRlRm9ybWF0Pzogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghZnV6enlEYXRlIHx8ICFkYXRlRm9ybWF0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy4jZ2V0RGF0ZVNlcGFyYXRvcihkYXRlRm9ybWF0KTtcbiAgICBjb25zdCBkYXRlRm9ybWF0SW5kZXhlcyA9IHRoaXMuI2dldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQpO1xuICAgIGxldCBkYXRlU3RyaW5nID0gJyc7XG5cbiAgICAvLyBHZXQgdGhlIGNvbXBvbmVudHMgb2YgdGhlIGRhdGUgaW4gdGhlIG9yZGVyIGV4cGVjdGVkIG9mIHRoZSBsb2NhbCBmb3JtYXQuXG4gICAgY29uc3QgZGF0ZUNvbXBvbmVudHMgPSBbXG4gICAgICB7IHZhbHVlOiBmdXp6eURhdGUueWVhciB8fCAwLCBpbmRleDogZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4IH0sXG4gICAgICB7IHZhbHVlOiBmdXp6eURhdGUubW9udGggfHwgMCwgaW5kZXg6IGRhdGVGb3JtYXRJbmRleGVzLm1vbnRoSW5kZXggfSxcbiAgICAgIHsgdmFsdWU6IGZ1enp5RGF0ZS5kYXkgfHwgMCwgaW5kZXg6IGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4IH0sXG4gICAgXTtcbiAgICBkYXRlQ29tcG9uZW50cy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuXG4gICAgZGF0ZUNvbXBvbmVudHMuZm9yRWFjaCgoY29tcG9uZW50KSA9PiB7XG4gICAgICBpZiAoY29tcG9uZW50LnZhbHVlID4gMCAmJiBjb21wb25lbnQuaW5kZXggPiAtMSkge1xuICAgICAgICBpZiAoZGF0ZVN0cmluZykge1xuICAgICAgICAgIGRhdGVTdHJpbmcgKz0gc2VwYXJhdG9yO1xuICAgICAgICB9XG4gICAgICAgIGRhdGVTdHJpbmcgKz0gY29tcG9uZW50LnZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0ZVN0cmluZy50cmltKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnV6enlEYXRlRnJvbVNlbGVjdGVkRGF0ZShcbiAgICBzZWxlY3RlZERhdGU/OiBEYXRlLFxuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmcsXG4gICk6IFNreUZ1enp5RGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzZWxlY3RlZERhdGUgfHwgIWRhdGVGb3JtYXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSA9IHt9O1xuICAgIGNvbnN0IGRhdGVGb3JtYXRJbmRleGVzID0gdGhpcy4jZ2V0RGF0ZUZvcm1hdEluZGV4ZXMoZGF0ZUZvcm1hdCk7XG5cbiAgICBpZiAoZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS55ZWFyID0gc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS5kYXkgPSBzZWxlY3RlZERhdGUuZ2V0RGF0ZSgpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4ID4gLTEpIHtcbiAgICAgIGZ1enp5RGF0ZS5tb250aCA9IHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpICsgMTsgLy8gZ2V0TW9udGgoKSBpcyAwLWluZGV4ZWQuXG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1enp5RGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdXp6eURhdGVGcm9tU3RyaW5nKFxuICAgIGRhdGU6IHN0cmluZyxcbiAgICBkYXRlRm9ybWF0Pzogc3RyaW5nLFxuICApOiBTa3lGdXp6eURhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICghZGF0ZSB8fCAhZGF0ZUZvcm1hdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBkYXk6IGFueTtcbiAgICBsZXQgbW9udGg6IGFueTtcbiAgICBsZXQgeWVhcjogYW55O1xuXG4gICAgY29uc3QgZGF0ZUNvbXBvbmVudHMgPSB0aGlzLiNnZXREYXRlQ29tcG9uZW50cyhkYXRlKTtcbiAgICBjb25zdCBpbmRleGVzID0gdGhpcy4jZ2V0RGF0ZVZhbHVlSW5kZXhlcyhkYXRlLCBkYXRlRm9ybWF0KTtcblxuICAgIC8vIExvb2sgYXQgdGhlIGRhdGUgc3RyaW5nJ3MgY29tcG9uZW50IGNvdW50OlxuICAgIC8vIDMgaW5kaWNhdGVzIGEgZnVsbCBkYXRlXG4gICAgLy8gMiBpbmRpY2F0ZXMgYSBtb250aC15ZWFyIG9yIG1vbnRoLWRheSBkYXRlXG4gICAgLy8gMSBpbmRpY2F0ZXMgYSB5ZWFyXG4gICAgLy8gT3RoZXIgaW5kaWNhdGVzIGEgcHJvYmxlbVxuICAgIHN3aXRjaCAoZGF0ZUNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHllYXIgPSBkYXRlQ29tcG9uZW50c1tpbmRleGVzLnllYXJJbmRleF07XG4gICAgICAgIG1vbnRoID0gZGF0ZUNvbXBvbmVudHNbaW5kZXhlcy5tb250aEluZGV4XTtcbiAgICAgICAgZGF5ID0gZGF0ZUNvbXBvbmVudHNbaW5kZXhlcy5kYXlJbmRleF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICAvLyBGaXJzdCwgY2hlY2sgZm9yIGEgNC1kaWdpdCB5ZWFyLiBJZiB5ZWFyIGV4aXN0cywgdGhlbiB3ZSBhc3N1bWUgdGhlIG90aGVyIGNvbXBvbmVudFxuICAgICAgICAvLyBpcyB0aGUgbW9udGguIE90aGVyd2lzZSwgd2UgY2FuIGFzc3VtZSB0aGUgaW5wdXQgaXMgbW0vZGQgb3IgbW0veXkgKDItZGlnaXQgeWVhcikuXG4gICAgICAgIHllYXIgPSB0aGlzLiNnZXQ0RGlnaXRZZWFyRnJvbURhdGVTdHJpbmcoZGF0ZSk7XG4gICAgICAgIGlmICh5ZWFyKSB7XG4gICAgICAgICAgbW9udGggPVxuICAgICAgICAgICAgZGF0ZUNvbXBvbmVudHNbMF0gPT09IHllYXIudG9TdHJpbmcoKVxuICAgICAgICAgICAgICA/IGRhdGVDb21wb25lbnRzWzFdXG4gICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGluZGV4ZXMuZGF5SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgLy8gbW0vZGRcbiAgICAgICAgICAgIG1vbnRoID1cbiAgICAgICAgICAgICAgaW5kZXhlcy5tb250aEluZGV4IDwgaW5kZXhlcy5kYXlJbmRleFxuICAgICAgICAgICAgICAgID8gZGF0ZUNvbXBvbmVudHNbMF1cbiAgICAgICAgICAgICAgICA6IGRhdGVDb21wb25lbnRzWzFdO1xuICAgICAgICAgICAgZGF5ID1cbiAgICAgICAgICAgICAgbW9udGggPT09IGRhdGVDb21wb25lbnRzWzFdXG4gICAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1swXVxuICAgICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG1tL3l5XG4gICAgICAgICAgICBtb250aCA9XG4gICAgICAgICAgICAgIGluZGV4ZXMubW9udGhJbmRleCA8IGluZGV4ZXMueWVhckluZGV4XG4gICAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1swXVxuICAgICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMV07XG4gICAgICAgICAgICB5ZWFyID1cbiAgICAgICAgICAgICAgbW9udGggPT09IGRhdGVDb21wb25lbnRzWzFdXG4gICAgICAgICAgICAgICAgPyBkYXRlQ29tcG9uZW50c1swXVxuICAgICAgICAgICAgICAgIDogZGF0ZUNvbXBvbmVudHNbMV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxOlxuICAgICAgICB5ZWFyID0gZGF0ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1vbnRoKSB7XG4gICAgICAvLyBDaGVjayBpZiBtb250aCBpcyB2YWxpZC5cbiAgICAgIG1vbnRoID0gdGhpcy4jZ2V0TW9udGhOdW1iZXIobW9udGgpO1xuICAgICAgaWYgKG1vbnRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBkYXkgaXMgdmFsaWQuXG4gICAgICBpZiAoZGF5KSB7XG4gICAgICAgIGRheSA9IHBhcnNlSW50KGRheSwgMTApO1xuICAgICAgICBjb25zdCBmdXp6eU1vbWVudCA9IHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZSh7XG4gICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgIHllYXI6IHllYXIsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaXNOYU4oZGF5KSB8fCAhZnV6enlNb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHllYXIpIHtcbiAgICAgIHllYXIgPVxuICAgICAgICB5ZWFyLnRvU3RyaW5nKCkubGVuZ3RoID09PSAyXG4gICAgICAgICAgPyBtb21lbnQucGFyc2VUd29EaWdpdFllYXIoeWVhcilcbiAgICAgICAgICA6IHBhcnNlSW50KHllYXIudG9TdHJpbmcoKSwgMTApO1xuICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IHllYXIudG9TdHJpbmcoKS5sZW5ndGggIT09IDQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtb250aDogbW9udGgsXG4gICAgICBkYXk6IGRheSxcbiAgICAgIHllYXI6IHllYXIsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdXp6eURhdGVSYW5nZShcbiAgICBzdGFydEZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLFxuICAgIGVuZEZ1enp5RGF0ZTogU2t5RnV6enlEYXRlLFxuICApOiBTa3lGdXp6eURhdGVSYW5nZSB7XG4gICAgY29uc3Qgc3RhcnQgPSB0aGlzLmdldE1vbWVudEZyb21GdXp6eURhdGUoc3RhcnRGdXp6eURhdGUpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuZ2V0TW9tZW50RnJvbUZ1enp5RGF0ZShlbmRGdXp6eURhdGUpO1xuICAgIGxldCBkYXlzO1xuICAgIGxldCBtb250aHM7XG4gICAgbGV0IHllYXJzO1xuICAgIGxldCB2YWxpZCA9IGZhbHNlO1xuXG4gICAgaWYgKFxuICAgICAgc3RhcnRGdXp6eURhdGUgJiZcbiAgICAgIHN0YXJ0RnV6enlEYXRlLnllYXIgJiZcbiAgICAgIGVuZEZ1enp5RGF0ZSAmJlxuICAgICAgZW5kRnV6enlEYXRlLnllYXJcbiAgICApIHtcbiAgICAgIHllYXJzID0gZW5kLmRpZmYoc3RhcnQsICd5ZWFycycpO1xuICAgICAgbW9udGhzID0gZW5kLmRpZmYoc3RhcnQsICdtb250aHMnKTtcbiAgICAgIGRheXMgPSBlbmQuZGlmZihzdGFydCwgJ2RheXMnKTtcbiAgICAgIHZhbGlkID0gZW5kLmRpZmYoc3RhcnQpID49IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHllYXJzOiB5ZWFycyxcbiAgICAgIG1vbnRoczogbW9udGhzLFxuICAgICAgZGF5czogZGF5cyxcbiAgICAgIHN0YXJ0RGF0ZTogc3RhcnQudG9EYXRlKCksXG4gICAgICBlbmREYXRlOiBlbmQudG9EYXRlKCksXG4gICAgICB2YWxpZDogdmFsaWQsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDdXJyZW50RnV6enlEYXRlKCk6IFNreUZ1enp5RGF0ZSB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBtb21lbnQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXk6IGN1cnJlbnREYXRlLmRhdGUoKSxcbiAgICAgIG1vbnRoOiBjdXJyZW50RGF0ZS5tb250aCgpICsgMSwgLy8gbW9udGgoKSBpcyAwLWluZGV4ZWQuXG4gICAgICB5ZWFyOiBjdXJyZW50RGF0ZS55ZWFyKCksXG4gICAgfTtcbiAgfVxuXG4gICNnZXRNb3N0UmVjZW50TGVhcFllYXIoKTogbnVtYmVyIHtcbiAgICBsZXQgbGVhcFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG5cbiAgICB3aGlsZSAoIXRoaXMuI2lzTGVhcFllYXIobGVhcFllYXIpKSB7XG4gICAgICBsZWFwWWVhciAtPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBsZWFwWWVhcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBzZXBhcmF0b3IgZm91bmQgaW4gdGhlIHByb3ZpZGVkIGRhdGUgZm9ybWF0IHN0cmluZy5cbiAgICogQWNjZXB0ZWQgc2VwYXJhdG9yczogWycvJywgJy4nLCAnLScsICcgJ10uXG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0XG4gICAqL1xuICAjZ2V0RGF0ZVNlcGFyYXRvcihkYXRlRm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXR1cm5WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNlcGFyYXRvcnMgPSBbJy8nLCAnLicsICctJywgJyAnXTtcblxuICAgIHNlcGFyYXRvcnMuZm9yRWFjaCgoc2VwYXJhdG9yKSA9PiB7XG4gICAgICBpZiAoIXJldHVyblZhbHVlICYmIGRhdGVGb3JtYXQuaW5kZXhPZihzZXBhcmF0b3IpID4gMCkge1xuICAgICAgICByZXR1cm5WYWx1ZSA9IHNlcGFyYXRvcjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gICNnZXQ0RGlnaXRZZWFyRnJvbURhdGVTdHJpbmcoZGF0ZTogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgeWVhcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuI2dldERhdGVTZXBhcmF0b3IoZGF0ZSk7XG5cbiAgICBpZiAoc2VwYXJhdG9yKSB7XG4gICAgICAvLyBGaW5kIHRoZSBudW1iZXIgdmFsdWUgaW4gdGhlIHN0cmluZyB0aGF0IGlzIDQgZGlnaXRzIGxvbmcuXG4gICAgICBkYXRlLnNwbGl0KHNlcGFyYXRvcikuZm9yRWFjaCgoZGF0ZUNvbXBvbmVudCkgPT4ge1xuICAgICAgICBpZiAoIXllYXIgJiYgcGFyc2VJbnQoZGF0ZUNvbXBvbmVudCwgMTApLnRvU3RyaW5nKCkubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgeWVhciA9IGRhdGVDb21wb25lbnQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh5ZWFyICYmICFpc05hTihOdW1iZXIoeWVhcikpKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQoeWVhciwgMTApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgI2lzTGVhcFllYXIoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICB9XG5cbiAgI2dldE1vbnRoTnVtYmVyKG1vbnRoOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGxldCByZXR1cm5WYWx1ZTogbnVtYmVyO1xuICAgIGNvbnN0IG1vbnRoQXNOdW1iZXIgPSBwYXJzZUludChtb250aCwgMTApO1xuXG4gICAgLy8gSWYgdGhlIG1vbnRoIGNvbXBvbmVudCBpcyBhIHN0cmluZyAoXCJKYW51YXJ5XCIpLCB3ZSBjaGVjayB0byBzZWUgaWYgaXQgaXMgYSB2YWxpZCBtb250aFxuICAgIGlmIChpc05hTihtb250aEFzTnVtYmVyKSkge1xuICAgICAgaWYgKCFtb21lbnQobW9udGgsICdNTU1NJykuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVyblZhbHVlID0gcGFyc2VJbnQobW9tZW50KCkubW9udGgobW9udGgpLmZvcm1hdCgnTScpLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVyblZhbHVlID0gbW9udGhBc051bWJlcjtcbiAgICB9XG5cbiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbW9udGggaXMgYmV0d2VlbiAxIGFuZCAxMlxuICAgIGlmICghKDEgPD0gcmV0dXJuVmFsdWUgJiYgcmV0dXJuVmFsdWUgPD0gMTIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgI2dldERlZmF1bHRZZWFyKGZ1enp5RGF0ZTogU2t5RnV6enlEYXRlKTogbnVtYmVyIHtcbiAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIHJldHVybiBhIGxlYXAgeWVhciBvciB0aGUgY3VycmVudCB5ZWFyLlxuICAgIGlmIChmdXp6eURhdGUubW9udGggPT09IDIgJiYgZnV6enlEYXRlLmRheSA9PT0gMjkpIHtcbiAgICAgIHJldHVybiB0aGlzLiNnZXRNb3N0UmVjZW50TGVhcFllYXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgICB9XG4gIH1cblxuICAjZ2V0RGF0ZUNvbXBvbmVudHMoZGF0ZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuI2dldERhdGVTZXBhcmF0b3IoZGF0ZSk7XG4gICAgaWYgKHNlcGFyYXRvcikge1xuICAgICAgcmV0dXJuIGRhdGUuc3BsaXQoc2VwYXJhdG9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtkYXRlXTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBvcmRlciBvZiB5ZWFyLCBtb250aCwgYW5kIGRheSBmcm9tIHRoZSBwcm92aWRlZCBkYXRlIGZvcm1hdC5cbiAgI2dldERhdGVGb3JtYXRJbmRleGVzKGRhdGVGb3JtYXQ6IHN0cmluZyk6IFNreURhdGVJbmRleGVzIHtcbiAgICBkYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVGb3JtYXQuaW5kZXhPZigneScpLFxuICAgICAgbW9udGhJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdtJyksXG4gICAgICBkYXlJbmRleDogZGF0ZUZvcm1hdC5pbmRleE9mKCdkJyksXG4gICAgfTtcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGluZGV4IG9mIGVhY2ggb2YgdGhlIGRhdGUgY29tcG9uZW50cyBpbiB0aGUgcHJvdmlkZWQgc3RyaW5nIChtb250aCwgZGF5LCB5ZWFyKS5cbiAgI2dldERhdGVWYWx1ZUluZGV4ZXMoZGF0ZTogc3RyaW5nLCBkYXRlRm9ybWF0OiBzdHJpbmcpOiBTa3lEYXRlSW5kZXhlcyB7XG4gICAgY29uc3QgZGF0ZUZvcm1hdEluZGV4ZXMgPSB0aGlzLiNnZXREYXRlRm9ybWF0SW5kZXhlcyhkYXRlRm9ybWF0KTtcbiAgICBjb25zdCBkYXRlQ29tcG9uZW50SW5kZXhlcyA9IFtdO1xuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXggPiAtMSkge1xuICAgICAgZGF0ZUNvbXBvbmVudEluZGV4ZXMucHVzaChkYXRlRm9ybWF0SW5kZXhlcy55ZWFySW5kZXgpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0SW5kZXhlcy5tb250aEluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGVGb3JtYXRJbmRleGVzLmRheUluZGV4ID4gLTEpIHtcbiAgICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnB1c2goZGF0ZUZvcm1hdEluZGV4ZXMuZGF5SW5kZXgpO1xuICAgIH1cblxuICAgIGRhdGVDb21wb25lbnRJbmRleGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICB5ZWFySW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMueWVhckluZGV4KSxcbiAgICAgIG1vbnRoSW5kZXg6IGRhdGVDb21wb25lbnRJbmRleGVzLmluZGV4T2YoZGF0ZUZvcm1hdEluZGV4ZXMubW9udGhJbmRleCksXG4gICAgICBkYXlJbmRleDogZGF0ZUNvbXBvbmVudEluZGV4ZXMuaW5kZXhPZihkYXRlRm9ybWF0SW5kZXhlcy5kYXlJbmRleCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgdGhlIHByb3ZpZGVkIFNreUZ1enp5RGF0ZSBvYmplY3QuIFZhbGlkIGZ1enp5IGRhdGVzIGFyZSBhcyBmb2xsb3dzOlxuICAgKiBtb250aCwgZGF5LCB5ZWFyXG4gICAqIG1vbnRoLCB5ZWFyXG4gICAqIG1vbnRoLCBkYXlcbiAgICogeWVhciBvbmx5XG4gICAqL1xuICAjaXNGdXp6eURhdGVWYWxpZChmdXp6eURhdGU6IFNreUZ1enp5RGF0ZSk6IGJvb2xlYW4ge1xuICAgIGlmICghZnV6enlEYXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgbm9uZSBvZiB0aGUgZGF0ZXMgcGFydCBhcmUgc3BlY2lmaWVkLCByZXR1cm4gZmFsc2UuXG4gICAgaWYgKCFmdXp6eURhdGUuZGF5ICYmICFmdXp6eURhdGUubW9udGggJiYgIWZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBtb250aCBpcyBzcGVjaWZpZWQsIHJldHVybiBmYWxzZS5cbiAgICBpZiAoIWZ1enp5RGF0ZS5kYXkgJiYgZnV6enlEYXRlLm1vbnRoICYmICFmdXp6eURhdGUueWVhcikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgZGF5IGlzIHNwZWNpZmllZCwgcmV0dXJuIGZhbHNlLlxuICAgIGlmIChmdXp6eURhdGUuZGF5ICYmICFmdXp6eURhdGUubW9udGggJiYgIWZ1enp5RGF0ZS55ZWFyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
@@ -548,8 +548,8 @@ class SkyFuzzyDateService {
548
548
  };
549
549
  }
550
550
  getFuzzyDateRange(startFuzzyDate, endFuzzyDate) {
551
- let start;
552
- let end;
551
+ const start = this.getMomentFromFuzzyDate(startFuzzyDate);
552
+ const end = this.getMomentFromFuzzyDate(endFuzzyDate);
553
553
  let days;
554
554
  let months;
555
555
  let years;
@@ -558,8 +558,6 @@ class SkyFuzzyDateService {
558
558
  startFuzzyDate.year &&
559
559
  endFuzzyDate &&
560
560
  endFuzzyDate.year) {
561
- start = this.getMomentFromFuzzyDate(startFuzzyDate);
562
- end = this.getMomentFromFuzzyDate(endFuzzyDate);
563
561
  years = end.diff(start, 'years');
564
562
  months = end.diff(start, 'months');
565
563
  days = end.diff(start, 'days');
@@ -569,6 +567,8 @@ class SkyFuzzyDateService {
569
567
  years: years,
570
568
  months: months,
571
569
  days: days,
570
+ startDate: start.toDate(),
571
+ endDate: end.toDate(),
572
572
  valid: valid,
573
573
  };
574
574
  }
@@ -2512,6 +2512,7 @@ class SkyFuzzyDatepickerInputDirective {
2512
2512
  validationError = {
2513
2513
  skyFuzzyDate: {
2514
2514
  maxDate: value,
2515
+ maxDateFormatted: this.#dateFormatter.format(fuzzyDateRange.endDate, this.dateFormat),
2515
2516
  },
2516
2517
  };
2517
2518
  }
@@ -2522,6 +2523,7 @@ class SkyFuzzyDatepickerInputDirective {
2522
2523
  validationError = {
2523
2524
  skyFuzzyDate: {
2524
2525
  minDate: value,
2526
+ minDateFormatted: this.#dateFormatter.format(fuzzyDateRange.startDate, this.dateFormat),
2525
2527
  },
2526
2528
  };
2527
2529
  }
@@ -3001,6 +3003,7 @@ class SkyDatepickerInputDirective {
3001
3003
  return {
3002
3004
  skyDate: {
3003
3005
  minDate,
3006
+ minDateFormatted: this.#dateFormatter.format(minDate, this.dateFormat),
3004
3007
  },
3005
3008
  };
3006
3009
  }
@@ -3011,6 +3014,7 @@ class SkyDatepickerInputDirective {
3011
3014
  return {
3012
3015
  skyDate: {
3013
3016
  maxDate,
3017
+ maxDateFormatted: this.#dateFormatter.format(maxDate, this.dateFormat),
3014
3018
  },
3015
3019
  };
3016
3020
  }