@oneluiz/dual-datepicker 2.4.0 → 2.5.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.
@@ -1,6 +1,8 @@
1
- import { Component, Input, Output, EventEmitter, HostListener, forwardRef, signal, computed, effect } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter, HostListener, forwardRef, signal, computed, effect, inject } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormsModule, ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { DATE_ADAPTER } from './date-adapter';
5
+ import { NativeDateAdapter } from './native-date-adapter';
4
6
  import * as i0 from "@angular/core";
5
7
  import * as i1 from "@angular/common";
6
8
  export class DualDatepickerComponent {
@@ -27,12 +29,14 @@ export class DualDatepickerComponent {
27
29
  locale = {};
28
30
  dateRangeChange = new EventEmitter();
29
31
  dateRangeSelected = new EventEmitter();
32
+ // Date adapter injection
33
+ dateAdapter = inject(DATE_ADAPTER);
30
34
  // Signals for reactive state
31
35
  mostrarDatePicker = signal(false);
32
36
  rangoFechas = signal('');
33
37
  fechaSeleccionandoInicio = signal(true);
34
- mesActual = signal(new Date());
35
- mesAnterior = signal(new Date());
38
+ mesActual = signal(this.dateAdapter.today());
39
+ mesAnterior = signal(this.dateAdapter.today());
36
40
  diasMesActual = signal([]);
37
41
  diasMesAnterior = signal([]);
38
42
  isDisabled = signal(false);
@@ -83,17 +87,19 @@ export class DualDatepickerComponent {
83
87
  }
84
88
  }
85
89
  formatearFecha(fecha) {
86
- const year = fecha.getFullYear();
87
- const month = String(fecha.getMonth() + 1).padStart(2, '0');
88
- const day = String(fecha.getDate()).padStart(2, '0');
90
+ const year = this.dateAdapter.getYear(fecha);
91
+ const month = String(this.dateAdapter.getMonth(fecha) + 1).padStart(2, '0');
92
+ const day = String(this.dateAdapter.getDate(fecha)).padStart(2, '0');
89
93
  return `${year}-${month}-${day}`;
90
94
  }
91
95
  formatearFechaDisplay(fechaStr) {
92
96
  if (!fechaStr)
93
97
  return '';
94
- const fecha = new Date(fechaStr + 'T00:00:00');
98
+ const fecha = this.dateAdapter.parse(fechaStr);
99
+ if (!fecha)
100
+ return '';
95
101
  const monthNames = this.locale.monthNamesShort || this.defaultMonthNamesShort;
96
- return `${fecha.getDate()} ${monthNames[fecha.getMonth()]}`;
102
+ return `${this.dateAdapter.getDate(fecha)} ${monthNames[this.dateAdapter.getMonth(fecha)]}`;
97
103
  }
98
104
  actualizarRangoFechasTexto() {
99
105
  if (this.fechaInicio && this.fechaFin) {
@@ -110,7 +116,10 @@ export class DualDatepickerComponent {
110
116
  if (this.mostrarDatePicker()) {
111
117
  this.fechaSeleccionandoInicio.set(true);
112
118
  const mesActualValue = this.mesActual();
113
- this.mesAnterior.set(new Date(mesActualValue.getFullYear(), mesActualValue.getMonth() - 1, 1));
119
+ const año = this.dateAdapter.getYear(mesActualValue);
120
+ const mes = this.dateAdapter.getMonth(mesActualValue);
121
+ const mesAnteriorDate = this.dateAdapter.createDate(año, mes - 1, 1);
122
+ this.mesAnterior.set(mesAnteriorDate);
114
123
  this.generarCalendarios();
115
124
  }
116
125
  this.onTouched();
@@ -124,18 +133,18 @@ export class DualDatepickerComponent {
124
133
  this.diasMesActual.set(this.generarCalendarioMes(this.mesActual()));
125
134
  }
126
135
  generarCalendarioMes(fecha) {
127
- const año = fecha.getFullYear();
128
- const mes = fecha.getMonth();
129
- const primerDia = new Date(año, mes, 1);
130
- const ultimoDia = new Date(año, mes + 1, 0);
131
- const diasEnMes = ultimoDia.getDate();
132
- const primerDiaSemana = primerDia.getDay();
136
+ const año = this.dateAdapter.getYear(fecha);
137
+ const mes = this.dateAdapter.getMonth(fecha);
138
+ const primerDia = this.dateAdapter.createDate(año, mes, 1);
139
+ const ultimoDia = this.dateAdapter.createDate(año, mes + 1, 0);
140
+ const diasEnMes = this.dateAdapter.getDate(ultimoDia);
141
+ const primerDiaSemana = this.dateAdapter.getDay(primerDia);
133
142
  const diasMes = [];
134
143
  for (let i = 0; i < primerDiaSemana; i++) {
135
144
  diasMes.push({ dia: null, esMesActual: false });
136
145
  }
137
146
  for (let dia = 1; dia <= diasEnMes; dia++) {
138
- const fechaDia = new Date(año, mes, dia);
147
+ const fechaDia = this.dateAdapter.createDate(año, mes, dia);
139
148
  const fechaStr = this.formatearFecha(fechaDia);
140
149
  diasMes.push({
141
150
  dia: dia,
@@ -183,22 +192,26 @@ export class DualDatepickerComponent {
183
192
  }
184
193
  cambiarMes(direccion) {
185
194
  const mesActualValue = this.mesActual();
186
- this.mesActual.set(new Date(mesActualValue.getFullYear(), mesActualValue.getMonth() + direccion, 1));
187
- const nuevoMesActual = this.mesActual();
188
- this.mesAnterior.set(new Date(nuevoMesActual.getFullYear(), nuevoMesActual.getMonth() - 1, 1));
195
+ const año = this.dateAdapter.getYear(mesActualValue);
196
+ const mes = this.dateAdapter.getMonth(mesActualValue);
197
+ const nuevoMesActual = this.dateAdapter.createDate(año, mes + direccion, 1);
198
+ this.mesActual.set(nuevoMesActual);
199
+ const añoNuevo = this.dateAdapter.getYear(nuevoMesActual);
200
+ const mesNuevo = this.dateAdapter.getMonth(nuevoMesActual);
201
+ const mesAnteriorNuevo = this.dateAdapter.createDate(añoNuevo, mesNuevo - 1, 1);
202
+ this.mesAnterior.set(mesAnteriorNuevo);
189
203
  this.generarCalendarios();
190
204
  }
191
205
  getNombreMes(fecha) {
192
206
  const monthNames = this.locale.monthNames || this.defaultMonthNames;
193
- return `${monthNames[fecha.getMonth()]} ${fecha.getFullYear()}`;
207
+ return `${monthNames[this.dateAdapter.getMonth(fecha)]} ${this.dateAdapter.getYear(fecha)}`;
194
208
  }
195
209
  getDayNames() {
196
210
  return this.locale.dayNamesShort || this.defaultDayNamesShort;
197
211
  }
198
212
  seleccionarRangoPredefinido(preset) {
199
- const hoy = new Date();
200
- const fechaInicio = new Date(hoy);
201
- fechaInicio.setDate(hoy.getDate() - preset.daysAgo);
213
+ const hoy = this.dateAdapter.today();
214
+ const fechaInicio = this.dateAdapter.addDays(hoy, -preset.daysAgo);
202
215
  this.fechaInicio = this.formatearFecha(fechaInicio);
203
216
  this.fechaFin = this.formatearFecha(hoy);
204
217
  this.actualizarRangoFechasTexto();
@@ -269,6 +282,10 @@ export class DualDatepickerComponent {
269
282
  provide: NG_VALUE_ACCESSOR,
270
283
  useExisting: forwardRef(() => DualDatepickerComponent),
271
284
  multi: true
285
+ },
286
+ {
287
+ provide: DATE_ADAPTER,
288
+ useClass: NativeDateAdapter
272
289
  }
273
290
  ], usesOnChanges: true, ngImport: i0, template: "<div class=\"datepicker-wrapper\" \n [style.--input-border-hover]=\"inputBorderColorHover\"\n [style.--input-border-focus]=\"inputBorderColorFocus\">\n <input \n type=\"text\" \n class=\"datepicker-input\" \n [value]=\"rangoFechas()\" \n (click)=\"toggleDatePicker()\" \n [placeholder]=\"placeholder\"\n [disabled]=\"isDisabled()\"\n [ngStyle]=\"{\n 'background-color': inputBackgroundColor,\n 'color': inputTextColor,\n 'border-color': inputBorderColor,\n 'padding': inputPadding\n }\"\n readonly>\n\n @if (mostrarDatePicker()) {\n <div class=\"date-picker-dropdown\">\n @if (showPresets) {\n <div class=\"date-picker-presets\">\n @for (preset of presets; track preset.label) {\n <button type=\"button\" (click)=\"seleccionarRangoPredefinido(preset)\">{{ preset.label }}</button>\n }\n <button type=\"button\" class=\"btn-close-calendar\" (click)=\"cerrarDatePicker()\" title=\"Close\">\n \u00D7\n </button>\n </div>\n }\n\n @if (!showPresets) {\n <div class=\"date-picker-header-only-close\">\n <button type=\"button\" class=\"btn-close-calendar\" (click)=\"cerrarDatePicker()\" title=\"Close\">\n \u00D7\n </button>\n </div>\n }\n\n <!-- Calendars -->\n <div class=\"date-picker-calendars\">\n <!-- Previous month calendar -->\n <div class=\"date-picker-calendar\">\n <div class=\"date-picker-header\">\n <button type=\"button\" (click)=\"cambiarMes(-1)\">\n <svg width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\"/>\n </svg>\n </button>\n <span>{{ nombreMesAnterior() }}</span>\n <button type=\"button\" style=\"visibility: hidden;\">\n <svg width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\"/>\n </svg>\n </button>\n </div>\n <div class=\"date-picker-weekdays\">\n @for (dayName of diasSemana(); track $index) {\n <span>{{ dayName }}</span>\n }\n </div>\n <div class=\"date-picker-days\">\n @for (diaObj of diasMesAnterior(); track diaObj.fecha || $index) {\n <button \n type=\"button\"\n class=\"date-picker-day\" \n [class.empty]=\"!diaObj.esMesActual\"\n [class.selected]=\"diaObj.esInicio || diaObj.esFin\"\n [class.in-range]=\"diaObj.enRango && !diaObj.esInicio && !diaObj.esFin\"\n (click)=\"seleccionarDia(diaObj)\"\n [disabled]=\"!diaObj.esMesActual\">\n {{ diaObj.dia }}\n </button>\n }\n </div>\n </div>\n\n <!-- Current month calendar -->\n <div class=\"date-picker-calendar\">\n <div class=\"date-picker-header\">\n <button type=\"button\" style=\"visibility: hidden;\">\n <svg width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\"/>\n </svg>\n </button>\n <span>{{ nombreMesActual() }}</span>\n <button type=\"button\" (click)=\"cambiarMes(1)\">\n <svg width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\"/>\n </svg>\n </button>\n </div>\n <div class=\"date-picker-weekdays\">\n @for (dayName of diasSemana(); track $index) {\n <span>{{ dayName }}</span>\n }\n </div>\n <div class=\"date-picker-days\">\n @for (diaObj of diasMesActual(); track diaObj.fecha || $index) {\n <button \n type=\"button\"\n class=\"date-picker-day\" \n [class.empty]=\"!diaObj.esMesActual\"\n [class.selected]=\"diaObj.esInicio || diaObj.esFin\"\n [class.in-range]=\"diaObj.enRango && !diaObj.esInicio && !diaObj.esFin\"\n (click)=\"seleccionarDia(diaObj)\"\n [disabled]=\"!diaObj.esMesActual\">\n {{ diaObj.dia }}\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Footer with clear button -->\n @if (showClearButton) {\n <div class=\"date-picker-footer\">\n <button type=\"button\" class=\"btn-clear\" (click)=\"limpiar()\" title=\"Clear selection\">\n Clear\n </button>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".datepicker-wrapper{position:relative;width:100%}.datepicker-wrapper .datepicker-input{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;cursor:pointer}.datepicker-wrapper .datepicker-input:hover{border-color:var(--input-border-hover, #ced4da)}.datepicker-wrapper .datepicker-input:focus{border-color:var(--input-border-focus, #80bdff);box-shadow:0 0 0 .2rem #007bff40;outline:0}.datepicker-wrapper .datepicker-input::placeholder{color:#6c757d;opacity:1}.datepicker-wrapper .datepicker-input:disabled,.datepicker-wrapper .datepicker-input[readonly]{background-color:#e9ecef;opacity:1}.date-picker-dropdown{position:absolute;top:100%;left:0;margin-top:4px;background:#fff;border:1px solid #e1e4e8;border-radius:8px;box-shadow:0 4px 12px #00000014,0 0 1px #00000014;padding:16px;z-index:1060;min-width:680px}@media (max-width: 768px){.date-picker-dropdown{min-width:100%;left:0;right:0}}.date-picker-header-only-close{display:flex;justify-content:flex-end;margin-bottom:12px}.date-picker-header-only-close .btn-close-calendar{background-color:transparent;border:1px solid transparent;color:#6b7280;padding:6px 10px;border-radius:6px;cursor:pointer;transition:all .15s ease;font-size:1.5rem;line-height:1}.date-picker-header-only-close .btn-close-calendar:hover{background-color:#fee;border-color:#fcc;color:#dc2626;transform:translateY(-1px);box-shadow:0 2px 4px #dc26261a}.date-picker-header-only-close .btn-close-calendar:active{transform:translateY(0);box-shadow:none}.date-picker-presets{display:flex;gap:6px;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e5e7eb;align-items:center}@media (max-width: 768px){.date-picker-presets{flex-wrap:wrap}}.date-picker-presets button{font-size:.75rem;padding:6px 14px;border:none;background-color:#f9fafb;color:#374151;border-radius:6px;transition:all .15s ease;font-weight:500;cursor:pointer;border:1px solid #e5e7eb}.date-picker-presets button:hover{background-color:#f3f4f6;border-color:#d1d5db;transform:translateY(-1px);box-shadow:0 2px 4px #0000000f}.date-picker-presets button:active{transform:translateY(0);box-shadow:none}.date-picker-presets .btn-close-calendar{margin-left:auto;background-color:transparent;border:1px solid transparent;color:#6b7280;padding:6px 10px;font-size:1.5rem;line-height:1}.date-picker-presets .btn-close-calendar:hover{background-color:#fee;border-color:#fcc;color:#dc2626;transform:translateY(-1px);box-shadow:0 2px 4px #dc26261a}.date-picker-presets .btn-close-calendar:active{transform:translateY(0);box-shadow:none}.date-picker-calendars{display:flex;gap:32px}@media (max-width: 768px){.date-picker-calendars{flex-direction:column;gap:16px}}.date-picker-calendar{flex:1}.date-picker-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding:0 4px}.date-picker-header span{font-size:.813rem;font-weight:600;color:#111827}.date-picker-header button{padding:4px;color:#6b7280;text-decoration:none;border-radius:6px;transition:all .15s ease;border:none;background:transparent;cursor:pointer}.date-picker-header button:hover{background-color:#f3f4f6;color:#111827}.date-picker-weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:4px}.date-picker-weekdays span{text-align:center;font-size:.625rem;font-weight:600;color:#6b7280;padding:6px}.date-picker-days{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.date-picker-day{aspect-ratio:1;border:none;background:transparent;border-radius:50%;font-size:.75rem;cursor:pointer;transition:all .15s ease;color:#374151;font-weight:400}.date-picker-day:hover:not(:disabled):not(.selected){background-color:#f3f4f6;color:#111827}.date-picker-day.empty{visibility:hidden}.date-picker-day.selected{background-color:#222;color:#fff;font-weight:600}.date-picker-day.in-range{background-color:#f9fafb;border-radius:0}.date-picker-day:disabled{cursor:not-allowed;opacity:.3}.date-picker-footer{padding:12px;border-top:1px solid #e1e4e8;display:flex;justify-content:center;gap:8px}.date-picker-footer .btn-clear{padding:8px 16px;background-color:#f6f8fa;border:1px solid #d0d7de;border-radius:6px;font-size:.875rem;font-weight:500;color:#24292f;cursor:pointer;transition:all .15s ease}.date-picker-footer .btn-clear:hover{background-color:#f3f4f6;border-color:#8c959f;transform:translateY(-1px);box-shadow:0 2px 4px #0000000d}.date-picker-footer .btn-clear:active{transform:translateY(0);box-shadow:none;background-color:#e9ecef}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: ReactiveFormsModule }] });
274
291
  }
@@ -279,6 +296,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
279
296
  provide: NG_VALUE_ACCESSOR,
280
297
  useExisting: forwardRef(() => DualDatepickerComponent),
281
298
  multi: true
299
+ },
300
+ {
301
+ provide: DATE_ADAPTER,
302
+ useClass: NativeDateAdapter
282
303
  }
283
304
  ], template: "<div class=\"datepicker-wrapper\" \n [style.--input-border-hover]=\"inputBorderColorHover\"\n [style.--input-border-focus]=\"inputBorderColorFocus\">\n <input \n type=\"text\" \n class=\"datepicker-input\" \n [value]=\"rangoFechas()\" \n (click)=\"toggleDatePicker()\" \n [placeholder]=\"placeholder\"\n [disabled]=\"isDisabled()\"\n [ngStyle]=\"{\n 'background-color': inputBackgroundColor,\n 'color': inputTextColor,\n 'border-color': inputBorderColor,\n 'padding': inputPadding\n }\"\n readonly>\n\n @if (mostrarDatePicker()) {\n <div class=\"date-picker-dropdown\">\n @if (showPresets) {\n <div class=\"date-picker-presets\">\n @for (preset of presets; track preset.label) {\n <button type=\"button\" (click)=\"seleccionarRangoPredefinido(preset)\">{{ preset.label }}</button>\n }\n <button type=\"button\" class=\"btn-close-calendar\" (click)=\"cerrarDatePicker()\" title=\"Close\">\n \u00D7\n </button>\n </div>\n }\n\n @if (!showPresets) {\n <div class=\"date-picker-header-only-close\">\n <button type=\"button\" class=\"btn-close-calendar\" (click)=\"cerrarDatePicker()\" title=\"Close\">\n \u00D7\n </button>\n </div>\n }\n\n <!-- Calendars -->\n <div class=\"date-picker-calendars\">\n <!-- Previous month calendar -->\n <div class=\"date-picker-calendar\">\n <div class=\"date-picker-header\">\n <button type=\"button\" (click)=\"cambiarMes(-1)\">\n <svg width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\"/>\n </svg>\n </button>\n <span>{{ nombreMesAnterior() }}</span>\n <button type=\"button\" style=\"visibility: hidden;\">\n <svg width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\"/>\n </svg>\n </button>\n </div>\n <div class=\"date-picker-weekdays\">\n @for (dayName of diasSemana(); track $index) {\n <span>{{ dayName }}</span>\n }\n </div>\n <div class=\"date-picker-days\">\n @for (diaObj of diasMesAnterior(); track diaObj.fecha || $index) {\n <button \n type=\"button\"\n class=\"date-picker-day\" \n [class.empty]=\"!diaObj.esMesActual\"\n [class.selected]=\"diaObj.esInicio || diaObj.esFin\"\n [class.in-range]=\"diaObj.enRango && !diaObj.esInicio && !diaObj.esFin\"\n (click)=\"seleccionarDia(diaObj)\"\n [disabled]=\"!diaObj.esMesActual\">\n {{ diaObj.dia }}\n </button>\n }\n </div>\n </div>\n\n <!-- Current month calendar -->\n <div class=\"date-picker-calendar\">\n <div class=\"date-picker-header\">\n <button type=\"button\" style=\"visibility: hidden;\">\n <svg width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z\"/>\n </svg>\n </button>\n <span>{{ nombreMesActual() }}</span>\n <button type=\"button\" (click)=\"cambiarMes(1)\">\n <svg width=\"16\" height=\"16\" fill=\"currentColor\" viewBox=\"0 0 16 16\">\n <path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\"/>\n </svg>\n </button>\n </div>\n <div class=\"date-picker-weekdays\">\n @for (dayName of diasSemana(); track $index) {\n <span>{{ dayName }}</span>\n }\n </div>\n <div class=\"date-picker-days\">\n @for (diaObj of diasMesActual(); track diaObj.fecha || $index) {\n <button \n type=\"button\"\n class=\"date-picker-day\" \n [class.empty]=\"!diaObj.esMesActual\"\n [class.selected]=\"diaObj.esInicio || diaObj.esFin\"\n [class.in-range]=\"diaObj.enRango && !diaObj.esInicio && !diaObj.esFin\"\n (click)=\"seleccionarDia(diaObj)\"\n [disabled]=\"!diaObj.esMesActual\">\n {{ diaObj.dia }}\n </button>\n }\n </div>\n </div>\n </div>\n\n <!-- Footer with clear button -->\n @if (showClearButton) {\n <div class=\"date-picker-footer\">\n <button type=\"button\" class=\"btn-clear\" (click)=\"limpiar()\" title=\"Clear selection\">\n Clear\n </button>\n </div>\n }\n </div>\n }\n</div>\n", styles: [".datepicker-wrapper{position:relative;width:100%}.datepicker-wrapper .datepicker-input{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;cursor:pointer}.datepicker-wrapper .datepicker-input:hover{border-color:var(--input-border-hover, #ced4da)}.datepicker-wrapper .datepicker-input:focus{border-color:var(--input-border-focus, #80bdff);box-shadow:0 0 0 .2rem #007bff40;outline:0}.datepicker-wrapper .datepicker-input::placeholder{color:#6c757d;opacity:1}.datepicker-wrapper .datepicker-input:disabled,.datepicker-wrapper .datepicker-input[readonly]{background-color:#e9ecef;opacity:1}.date-picker-dropdown{position:absolute;top:100%;left:0;margin-top:4px;background:#fff;border:1px solid #e1e4e8;border-radius:8px;box-shadow:0 4px 12px #00000014,0 0 1px #00000014;padding:16px;z-index:1060;min-width:680px}@media (max-width: 768px){.date-picker-dropdown{min-width:100%;left:0;right:0}}.date-picker-header-only-close{display:flex;justify-content:flex-end;margin-bottom:12px}.date-picker-header-only-close .btn-close-calendar{background-color:transparent;border:1px solid transparent;color:#6b7280;padding:6px 10px;border-radius:6px;cursor:pointer;transition:all .15s ease;font-size:1.5rem;line-height:1}.date-picker-header-only-close .btn-close-calendar:hover{background-color:#fee;border-color:#fcc;color:#dc2626;transform:translateY(-1px);box-shadow:0 2px 4px #dc26261a}.date-picker-header-only-close .btn-close-calendar:active{transform:translateY(0);box-shadow:none}.date-picker-presets{display:flex;gap:6px;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid #e5e7eb;align-items:center}@media (max-width: 768px){.date-picker-presets{flex-wrap:wrap}}.date-picker-presets button{font-size:.75rem;padding:6px 14px;border:none;background-color:#f9fafb;color:#374151;border-radius:6px;transition:all .15s ease;font-weight:500;cursor:pointer;border:1px solid #e5e7eb}.date-picker-presets button:hover{background-color:#f3f4f6;border-color:#d1d5db;transform:translateY(-1px);box-shadow:0 2px 4px #0000000f}.date-picker-presets button:active{transform:translateY(0);box-shadow:none}.date-picker-presets .btn-close-calendar{margin-left:auto;background-color:transparent;border:1px solid transparent;color:#6b7280;padding:6px 10px;font-size:1.5rem;line-height:1}.date-picker-presets .btn-close-calendar:hover{background-color:#fee;border-color:#fcc;color:#dc2626;transform:translateY(-1px);box-shadow:0 2px 4px #dc26261a}.date-picker-presets .btn-close-calendar:active{transform:translateY(0);box-shadow:none}.date-picker-calendars{display:flex;gap:32px}@media (max-width: 768px){.date-picker-calendars{flex-direction:column;gap:16px}}.date-picker-calendar{flex:1}.date-picker-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding:0 4px}.date-picker-header span{font-size:.813rem;font-weight:600;color:#111827}.date-picker-header button{padding:4px;color:#6b7280;text-decoration:none;border-radius:6px;transition:all .15s ease;border:none;background:transparent;cursor:pointer}.date-picker-header button:hover{background-color:#f3f4f6;color:#111827}.date-picker-weekdays{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;margin-bottom:4px}.date-picker-weekdays span{text-align:center;font-size:.625rem;font-weight:600;color:#6b7280;padding:6px}.date-picker-days{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.date-picker-day{aspect-ratio:1;border:none;background:transparent;border-radius:50%;font-size:.75rem;cursor:pointer;transition:all .15s ease;color:#374151;font-weight:400}.date-picker-day:hover:not(:disabled):not(.selected){background-color:#f3f4f6;color:#111827}.date-picker-day.empty{visibility:hidden}.date-picker-day.selected{background-color:#222;color:#fff;font-weight:600}.date-picker-day.in-range{background-color:#f9fafb;border-radius:0}.date-picker-day:disabled{cursor:not-allowed;opacity:.3}.date-picker-footer{padding:12px;border-top:1px solid #e1e4e8;display:flex;justify-content:center;gap:8px}.date-picker-footer .btn-clear{padding:8px 16px;background-color:#f6f8fa;border:1px solid #d0d7de;border-radius:6px;font-size:.875rem;font-weight:500;color:#24292f;cursor:pointer;transition:all .15s ease}.date-picker-footer .btn-clear:hover{background-color:#f3f4f6;border-color:#8c959f;transform:translateY(-1px);box-shadow:0 2px 4px #0000000d}.date-picker-footer .btn-clear:active{transform:translateY(0);box-shadow:none;background-color:#e9ecef}\n"] }]
284
305
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { placeholder: [{
@@ -321,4 +342,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
321
342
  type: HostListener,
322
343
  args: ['document:click', ['$event']]
323
344
  }] } });
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vc3JjL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxZQUFZLEVBQWMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pLLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFtQzNHLE1BQU0sT0FBTyx1QkFBdUI7SUFpRGQ7SUFoRFgsV0FBVyxHQUFXLG1CQUFtQixDQUFDO0lBQzFDLFdBQVcsR0FBVyxFQUFFLENBQUM7SUFDekIsUUFBUSxHQUFXLEVBQUUsQ0FBQztJQUN0QixXQUFXLEdBQVksSUFBSSxDQUFDO0lBQzVCLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFDakMsZ0JBQWdCLEdBQVksSUFBSSxDQUFDO0lBQ2pDLHNCQUFzQixHQUFZLElBQUksQ0FBQztJQUN2QyxtQkFBbUIsR0FBWSxJQUFJLENBQUM7SUFDcEMsT0FBTyxHQUFtQjtRQUNqQyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtRQUNwQyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUN4QyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtLQUNyQyxDQUFDO0lBQ08sb0JBQW9CLEdBQVcsTUFBTSxDQUFDO0lBQ3RDLGNBQWMsR0FBVyxTQUFTLENBQUM7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O2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFxQ1AsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYsIGZvcndhcmRSZWYsIHNpZ25hbCwgY29tcHV0ZWQsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0ZVJhbmdlIHtcbiAgZmVjaGFJbmljaW86IHN0cmluZztcbiAgZmVjaGFGaW46IHN0cmluZztcbiAgcmFuZ29UZXh0bzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFByZXNldENvbmZpZyB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGRheXNBZ286IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbGVDb25maWcge1xuICBtb250aE5hbWVzPzogc3RyaW5nW107XG4gIG1vbnRoTmFtZXNTaG9ydD86IHN0cmluZ1tdO1xuICBkYXlOYW1lcz86IHN0cmluZ1tdO1xuICBkYXlOYW1lc1Nob3J0Pzogc3RyaW5nW107XG4gIGZpcnN0RGF5T2ZXZWVrPzogbnVtYmVyOyAvLyAwID0gU3VuZGF5LCAxID0gTW9uZGF5LCBldGMuXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25neC1kdWFsLWRhdGVwaWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEdWFsRGF0ZXBpY2tlckNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEdWFsRGF0ZXBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VsZWN0IGRhdGUgcmFuZ2UnO1xuICBASW5wdXQoKSBmZWNoYUluaWNpbzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGZlY2hhRmluOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2hvd1ByZXNldHM6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93Q2xlYXJCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY2xvc2VPblNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIGNsb3NlT25QcmVzZXRTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBjbG9zZU9uQ2xpY2tPdXRzaWRlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgcHJlc2V0czogUHJlc2V0Q29uZmlnW10gPSBbXG4gICAgeyBsYWJlbDogJ0xhc3QgbW9udGgnLCBkYXlzQWdvOiAzMCB9LFxuICAgIHsgbGFiZWw6ICdMYXN0IDYgbW9udGhzJywgZGF5c0FnbzogMTgwIH0sXG4gICAgeyBsYWJlbDogJ0xhc3QgeWVhcicsIGRheXNBZ286IDM2NSB9XG4gIF07XG4gIEBJbnB1dCgpIGlucHV0QmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnI2ZmZic7XG4gIEBJbnB1dCgpIGlucHV0VGV4dENvbG9yOiBzdHJpbmcgPSAnIzQ5NTA1Nyc7XG4gIEBJbnB1dCgpIGlucHV0Qm9yZGVyQ29sb3I6IHN0cmluZyA9ICcjY2VkNGRhJztcbiAgQElucHV0KCkgaW5wdXRCb3JkZXJDb2xvckhvdmVyOiBzdHJpbmcgPSAnI2NlZDRkYSc7XG4gIEBJbnB1dCgpIGlucHV0Qm9yZGVyQ29sb3JGb2N1czogc3RyaW5nID0gJyM4MGJkZmYnO1xuICBASW5wdXQoKSBpbnB1dFBhZGRpbmc6IHN0cmluZyA9ICcwLjM3NXJlbSAwLjc1cmVtJztcbiAgQElucHV0KCkgbG9jYWxlOiBMb2NhbGVDb25maWcgPSB7fTtcblxuICBAT3V0cHV0KCkgZGF0ZVJhbmdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlUmFuZ2U+KCk7XG4gIEBPdXRwdXQoKSBkYXRlUmFuZ2VTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPigpO1xuXG4gIC8vIFNpZ25hbHMgZm9yIHJlYWN0aXZlIHN0YXRlXG4gIG1vc3RyYXJEYXRlUGlja2VyID0gc2lnbmFsKGZhbHNlKTtcbiAgcmFuZ29GZWNoYXMgPSBzaWduYWwoJycpO1xuICBmZWNoYVNlbGVjY2lvbmFuZG9JbmljaW8gPSBzaWduYWwodHJ1ZSk7XG4gIG1lc0FjdHVhbCA9IHNpZ25hbChuZXcgRGF0ZSgpKTtcbiAgbWVzQW50ZXJpb3IgPSBzaWduYWwobmV3IERhdGUoKSk7XG4gIGRpYXNNZXNBY3R1YWwgPSBzaWduYWw8YW55W10+KFtdKTtcbiAgZGlhc01lc0FudGVyaW9yID0gc2lnbmFsPGFueVtdPihbXSk7XG4gIGlzRGlzYWJsZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8vIENvbXB1dGVkIHZhbHVlc1xuICBub21icmVNZXNBY3R1YWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldE5vbWJyZU1lcyh0aGlzLm1lc0FjdHVhbCgpKSk7XG4gIG5vbWJyZU1lc0FudGVyaW9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nZXROb21icmVNZXModGhpcy5tZXNBbnRlcmlvcigpKSk7XG4gIGRpYXNTZW1hbmEgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldERheU5hbWVzKCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdE1vbnRoTmFtZXMgPSBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TW9udGhOYW1lc1Nob3J0ID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHREYXlOYW1lcyA9IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0RGF5TmFtZXNTaG9ydCA9IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddO1xuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGNhbGxiYWNrc1xuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IERhdGVSYW5nZSB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAvLyBFZmZlY3QgdG8gZW1pdCBjaGFuZ2VzIHdoZW4gZGF0ZXMgY2hhbmdlXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHJhbmdvID0gdGhpcy5yYW5nb0ZlY2hhcygpO1xuICAgICAgaWYgKHRoaXMuZmVjaGFJbmljaW8gfHwgdGhpcy5mZWNoYUZpbikge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0RGF0ZVJhbmdlVmFsdWUoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uQ2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9zdHJhckRhdGVQaWNrZXIoKSAmJiB0aGlzLmNsb3NlT25DbGlja091dHNpZGUpIHtcbiAgICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgICAgaWYgKCFjbGlja2VkSW5zaWRlKSB7XG4gICAgICAgIHRoaXMuY2VycmFyRGF0ZVBpY2tlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZlY2hhSW5pY2lvICYmIHRoaXMuZmVjaGFGaW4pIHtcbiAgICAgIHRoaXMuYWN0dWFsaXphclJhbmdvRmVjaGFzVGV4dG8oKTtcbiAgICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydmZWNoYUluaWNpbyddIHx8IGNoYW5nZXNbJ2ZlY2hhRmluJ10pIHtcbiAgICAgIGlmICh0aGlzLmZlY2hhSW5pY2lvICYmIHRoaXMuZmVjaGFGaW4pIHtcbiAgICAgICAgdGhpcy5hY3R1YWxpemFyUmFuZ29GZWNoYXNUZXh0bygpO1xuICAgICAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5mZWNoYUluaWNpbyAmJiAhdGhpcy5mZWNoYUZpbikge1xuICAgICAgICB0aGlzLnJhbmdvRmVjaGFzLnNldCgnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0ZWFyRmVjaGEoZmVjaGE6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHllYXIgPSBmZWNoYS5nZXRGdWxsWWVhcigpO1xuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGZlY2hhLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyhmZWNoYS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7XG4gIH1cblxuICBmb3JtYXRlYXJGZWNoYURpc3BsYXkoZmVjaGFTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFmZWNoYVN0cikgcmV0dXJuICcnO1xuICAgIGNvbnN0IGZlY2hhID0gbmV3IERhdGUoZmVjaGFTdHIgKyAnVDAwOjAwOjAwJyk7XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IHRoaXMubG9jYWxlLm1vbnRoTmFtZXNTaG9ydCB8fCB0aGlzLmRlZmF1bHRNb250aE5hbWVzU2hvcnQ7XG4gICAgcmV0dXJuIGAke2ZlY2hhLmdldERhdGUoKX0gJHttb250aE5hbWVzW2ZlY2hhLmdldE1vbnRoKCldfWA7XG4gIH1cblxuICBhY3R1YWxpemFyUmFuZ29GZWNoYXNUZXh0bygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mZWNoYUluaWNpbyAmJiB0aGlzLmZlY2hhRmluKSB7XG4gICAgICBjb25zdCBpbmljaW8gPSB0aGlzLmZvcm1hdGVhckZlY2hhRGlzcGxheSh0aGlzLmZlY2hhSW5pY2lvKTtcbiAgICAgIGNvbnN0IGZpbiA9IHRoaXMuZm9ybWF0ZWFyRmVjaGFEaXNwbGF5KHRoaXMuZmVjaGFGaW4pO1xuICAgICAgdGhpcy5yYW5nb0ZlY2hhcy5zZXQoYCR7aW5pY2lvfSAtICR7ZmlufWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJhbmdvRmVjaGFzLnNldCgnJyk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRGF0ZVBpY2tlcigpOiB2b2lkIHtcbiAgICB0aGlzLm1vc3RyYXJEYXRlUGlja2VyLnVwZGF0ZSh2YWx1ZSA9PiAhdmFsdWUpO1xuICAgIGlmICh0aGlzLm1vc3RyYXJEYXRlUGlja2VyKCkpIHtcbiAgICAgIHRoaXMuZmVjaGFTZWxlY2Npb25hbmRvSW5pY2lvLnNldCh0cnVlKTtcbiAgICAgIGNvbnN0IG1lc0FjdHVhbFZhbHVlID0gdGhpcy5tZXNBY3R1YWwoKTtcbiAgICAgIHRoaXMubWVzQW50ZXJpb3Iuc2V0KG5ldyBEYXRlKG1lc0FjdHVhbFZhbHVlLmdldEZ1bGxZZWFyKCksIG1lc0FjdHVhbFZhbHVlLmdldE1vbnRoKCkgLSAxLCAxKSk7XG4gICAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICAgIH1cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgY2VycmFyRGF0ZVBpY2tlcigpOiB2b2lkIHtcbiAgICB0aGlzLm1vc3RyYXJEYXRlUGlja2VyLnNldChmYWxzZSk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGdlbmVyYXJDYWxlbmRhcmlvcygpOiB2b2lkIHtcbiAgICB0aGlzLmRpYXNNZXNBbnRlcmlvci5zZXQodGhpcy5nZW5lcmFyQ2FsZW5kYXJpb01lcyh0aGlzLm1lc0FudGVyaW9yKCkpKTtcbiAgICB0aGlzLmRpYXNNZXNBY3R1YWwuc2V0KHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9NZXModGhpcy5tZXNBY3R1YWwoKSkpO1xuICB9XG5cbiAgZ2VuZXJhckNhbGVuZGFyaW9NZXMoZmVjaGE6IERhdGUpOiBhbnlbXSB7XG4gICAgY29uc3QgYcOxbyA9IGZlY2hhLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbWVzID0gZmVjaGEuZ2V0TW9udGgoKTtcbiAgICBjb25zdCBwcmltZXJEaWEgPSBuZXcgRGF0ZShhw7FvLCBtZXMsIDEpO1xuICAgIGNvbnN0IHVsdGltb0RpYSA9IG5ldyBEYXRlKGHDsW8sIG1lcyArIDEsIDApO1xuICAgIGNvbnN0IGRpYXNFbk1lcyA9IHVsdGltb0RpYS5nZXREYXRlKCk7XG4gICAgY29uc3QgcHJpbWVyRGlhU2VtYW5hID0gcHJpbWVyRGlhLmdldERheSgpO1xuXG4gICAgY29uc3QgZGlhc01lcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmltZXJEaWFTZW1hbmE7IGkrKykge1xuICAgICAgZGlhc01lcy5wdXNoKHsgZGlhOiBudWxsLCBlc01lc0FjdHVhbDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgZGlhID0gMTsgZGlhIDw9IGRpYXNFbk1lczsgZGlhKyspIHtcbiAgICAgIGNvbnN0IGZlY2hhRGlhID0gbmV3IERhdGUoYcOxbywgbWVzLCBkaWEpO1xuICAgICAgY29uc3QgZmVjaGFTdHIgPSB0aGlzLmZvcm1hdGVhckZlY2hhKGZlY2hhRGlhKTtcbiAgICAgIGRpYXNNZXMucHVzaCh7XG4gICAgICAgIGRpYTogZGlhLFxuICAgICAgICBmZWNoYTogZmVjaGFTdHIsXG4gICAgICAgIGVzTWVzQWN0dWFsOiB0cnVlLFxuICAgICAgICBlc0luaWNpbzogdGhpcy5mZWNoYUluaWNpbyA9PT0gZmVjaGFTdHIsXG4gICAgICAgIGVzRmluOiB0aGlzLmZlY2hhRmluID09PSBmZWNoYVN0cixcbiAgICAgICAgZW5SYW5nbzogdGhpcy5lc3RhRW5SYW5nbyhmZWNoYVN0cilcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBkaWFzTWVzO1xuICB9XG5cbiAgZXN0YUVuUmFuZ28oZmVjaGFTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5mZWNoYUluaWNpbyB8fCAhdGhpcy5mZWNoYUZpbikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBmZWNoYVN0ciA+PSB0aGlzLmZlY2hhSW5pY2lvICYmIGZlY2hhU3RyIDw9IHRoaXMuZmVjaGFGaW47XG4gIH1cblxuICBzZWxlY2Npb25hckRpYShkaWFPYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICghZGlhT2JqLmVzTWVzQWN0dWFsIHx8IHRoaXMuaXNEaXNhYmxlZCgpKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5mZWNoYVNlbGVjY2lvbmFuZG9JbmljaW8oKSkge1xuICAgICAgdGhpcy5mZWNoYUluaWNpbyA9IGRpYU9iai5mZWNoYTtcbiAgICAgIHRoaXMuZmVjaGFGaW4gPSAnJztcbiAgICAgIHRoaXMucmFuZ29GZWNoYXMuc2V0KCcnKTtcbiAgICAgIHRoaXMuZmVjaGFTZWxlY2Npb25hbmRvSW5pY2lvLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmVtaXRpckNhbWJpbygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGlhT2JqLmZlY2hhIDwgdGhpcy5mZWNoYUluaWNpbykge1xuICAgICAgICB0aGlzLmZlY2hhRmluID0gdGhpcy5mZWNoYUluaWNpbztcbiAgICAgICAgdGhpcy5mZWNoYUluaWNpbyA9IGRpYU9iai5mZWNoYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmVjaGFGaW4gPSBkaWFPYmouZmVjaGE7XG4gICAgICB9XG4gICAgICB0aGlzLmFjdHVhbGl6YXJSYW5nb0ZlY2hhc1RleHRvKCk7XG4gICAgICBpZiAodGhpcy5jbG9zZU9uU2VsZWN0aW9uKSB7XG4gICAgICAgIHRoaXMubW9zdHJhckRhdGVQaWNrZXIuc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmVjaGFTZWxlY2Npb25hbmRvSW5pY2lvLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuZW1pdGlyQ2FtYmlvKCk7XG4gICAgICB0aGlzLmVtaXRpclNlbGVjY2lvbigpO1xuICAgIH1cbiAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICB9XG5cbiAgY2FtYmlhck1lcyhkaXJlY2Npb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG1lc0FjdHVhbFZhbHVlID0gdGhpcy5tZXNBY3R1YWwoKTtcbiAgICB0aGlzLm1lc0FjdHVhbC5zZXQobmV3IERhdGUobWVzQWN0dWFsVmFsdWUuZ2V0RnVsbFllYXIoKSwgbWVzQWN0dWFsVmFsdWUuZ2V0TW9udGgoKSArIGRpcmVjY2lvbiwgMSkpO1xuICAgIGNvbnN0IG51ZXZvTWVzQWN0dWFsID0gdGhpcy5tZXNBY3R1YWwoKTtcbiAgICB0aGlzLm1lc0FudGVyaW9yLnNldChuZXcgRGF0ZShudWV2b01lc0FjdHVhbC5nZXRGdWxsWWVhcigpLCBudWV2b01lc0FjdHVhbC5nZXRNb250aCgpIC0gMSwgMSkpO1xuICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gIH1cblxuICBnZXROb21icmVNZXMoZmVjaGE6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSB0aGlzLmxvY2FsZS5tb250aE5hbWVzIHx8IHRoaXMuZGVmYXVsdE1vbnRoTmFtZXM7XG4gICAgcmV0dXJuIGAke21vbnRoTmFtZXNbZmVjaGEuZ2V0TW9udGgoKV19ICR7ZmVjaGEuZ2V0RnVsbFllYXIoKX1gO1xuICB9XG5cbiAgZ2V0RGF5TmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmxvY2FsZS5kYXlOYW1lc1Nob3J0IHx8IHRoaXMuZGVmYXVsdERheU5hbWVzU2hvcnQ7XG4gIH1cblxuICBzZWxlY2Npb25hclJhbmdvUHJlZGVmaW5pZG8ocHJlc2V0OiBQcmVzZXRDb25maWcpOiB2b2lkIHtcbiAgICBjb25zdCBob3kgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGZlY2hhSW5pY2lvID0gbmV3IERhdGUoaG95KTtcbiAgICBmZWNoYUluaWNpby5zZXREYXRlKGhveS5nZXREYXRlKCkgLSBwcmVzZXQuZGF5c0Fnbyk7XG5cbiAgICB0aGlzLmZlY2hhSW5pY2lvID0gdGhpcy5mb3JtYXRlYXJGZWNoYShmZWNoYUluaWNpbyk7XG4gICAgdGhpcy5mZWNoYUZpbiA9IHRoaXMuZm9ybWF0ZWFyRmVjaGEoaG95KTtcbiAgICB0aGlzLmFjdHVhbGl6YXJSYW5nb0ZlY2hhc1RleHRvKCk7XG4gICAgdGhpcy5nZW5lcmFyQ2FsZW5kYXJpb3MoKTtcbiAgICBpZiAodGhpcy5jbG9zZU9uUHJlc2V0U2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLm1vc3RyYXJEYXRlUGlja2VyLnNldChmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuZW1pdGlyU2VsZWNjaW9uKCk7XG4gIH1cblxuICBsaW1waWFyKCk6IHZvaWQge1xuICAgIHRoaXMuZmVjaGFJbmljaW8gPSAnJztcbiAgICB0aGlzLmZlY2hhRmluID0gJyc7XG4gICAgdGhpcy5yYW5nb0ZlY2hhcy5zZXQoJycpO1xuICAgIHRoaXMubW9zdHJhckRhdGVQaWNrZXIuc2V0KGZhbHNlKTtcbiAgICB0aGlzLmZlY2hhU2VsZWNjaW9uYW5kb0luaWNpby5zZXQodHJ1ZSk7XG4gICAgdGhpcy5lbWl0aXJDYW1iaW8oKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0aXJDYW1iaW8oKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlUmFuZ2VDaGFuZ2UuZW1pdCh7XG4gICAgICBmZWNoYUluaWNpbzogdGhpcy5mZWNoYUluaWNpbyxcbiAgICAgIGZlY2hhRmluOiB0aGlzLmZlY2hhRmluLFxuICAgICAgcmFuZ29UZXh0bzogdGhpcy5yYW5nb0ZlY2hhcygpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRpclNlbGVjY2lvbigpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVSYW5nZVNlbGVjdGVkLmVtaXQoe1xuICAgICAgZmVjaGFJbmljaW86IHRoaXMuZmVjaGFJbmljaW8sXG4gICAgICBmZWNoYUZpbjogdGhpcy5mZWNoYUZpbixcbiAgICAgIHJhbmdvVGV4dG86IHRoaXMucmFuZ29GZWNoYXMoKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRlUmFuZ2VWYWx1ZSgpOiBEYXRlUmFuZ2Uge1xuICAgIHJldHVybiB7XG4gICAgICBmZWNoYUluaWNpbzogdGhpcy5mZWNoYUluaWNpbyxcbiAgICAgIGZlY2hhRmluOiB0aGlzLmZlY2hhRmluLFxuICAgICAgcmFuZ29UZXh0bzogdGhpcy5yYW5nb0ZlY2hhcygpXG4gICAgfTtcbiAgfVxuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IERhdGVSYW5nZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuZmVjaGFJbmljaW8gPSB2YWx1ZS5mZWNoYUluaWNpbyB8fCAnJztcbiAgICAgIHRoaXMuZmVjaGFGaW4gPSB2YWx1ZS5mZWNoYUZpbiB8fCAnJztcbiAgICAgIGlmICh0aGlzLmZlY2hhSW5pY2lvICYmIHRoaXMuZmVjaGFGaW4pIHtcbiAgICAgICAgdGhpcy5hY3R1YWxpemFyUmFuZ29GZWNoYXNUZXh0bygpO1xuICAgICAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZlY2hhSW5pY2lvID0gJyc7XG4gICAgICB0aGlzLmZlY2hhRmluID0gJyc7XG4gICAgICB0aGlzLnJhbmdvRmVjaGFzLnNldCgnJyk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBEYXRlUmFuZ2UgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5pc0Rpc2FibGVkLnNldChpc0Rpc2FibGVkKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItd3JhcHBlclwiIFxuICBbc3R5bGUuLS1pbnB1dC1ib3JkZXItaG92ZXJdPVwiaW5wdXRCb3JkZXJDb2xvckhvdmVyXCJcbiAgW3N0eWxlLi0taW5wdXQtYm9yZGVyLWZvY3VzXT1cImlucHV0Qm9yZGVyQ29sb3JGb2N1c1wiPlxuICA8aW5wdXQgXG4gICAgdHlwZT1cInRleHRcIiBcbiAgICBjbGFzcz1cImRhdGVwaWNrZXItaW5wdXRcIiBcbiAgICBbdmFsdWVdPVwicmFuZ29GZWNoYXMoKVwiIFxuICAgIChjbGljayk9XCJ0b2dnbGVEYXRlUGlja2VyKClcIiBcbiAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVkKClcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogaW5wdXRCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAnY29sb3InOiBpbnB1dFRleHRDb2xvcixcbiAgICAgICdib3JkZXItY29sb3InOiBpbnB1dEJvcmRlckNvbG9yLFxuICAgICAgJ3BhZGRpbmcnOiBpbnB1dFBhZGRpbmdcbiAgICB9XCJcbiAgICByZWFkb25seT5cblxuICBAaWYgKG1vc3RyYXJEYXRlUGlja2VyKCkpIHtcbiAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWRyb3Bkb3duXCI+XG4gICAgQGlmIChzaG93UHJlc2V0cykge1xuICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1wcmVzZXRzXCI+XG4gICAgICBAZm9yIChwcmVzZXQgb2YgcHJlc2V0czsgdHJhY2sgcHJlc2V0LmxhYmVsKSB7XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2VsZWNjaW9uYXJSYW5nb1ByZWRlZmluaWRvKHByZXNldClcIj57eyBwcmVzZXQubGFiZWwgfX08L2J1dHRvbj5cbiAgICAgIH1cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlLWNhbGVuZGFyXCIgKGNsaWNrKT1cImNlcnJhckRhdGVQaWNrZXIoKVwiIHRpdGxlPVwiQ2xvc2VcIj5cbiAgICAgICAgw5dcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoIXNob3dQcmVzZXRzKSB7XG4gICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWhlYWRlci1vbmx5LWNsb3NlXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZS1jYWxlbmRhclwiIChjbGljayk9XCJjZXJyYXJEYXRlUGlja2VyKClcIiB0aXRsZT1cIkNsb3NlXCI+XG4gICAgICAgIMOXXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tIENhbGVuZGFycyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItY2FsZW5kYXJzXCI+XG4gICAgICA8IS0tIFByZXZpb3VzIG1vbnRoIGNhbGVuZGFyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWNhbGVuZGFyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1oZWFkZXJcIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2FtYmlhck1lcygtMSlcIj5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cbiAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTEuMzU0IDEuNjQ2YS41LjUgMCAwIDEgMCAuNzA4TDUuNzA3IDhsNS42NDcgNS42NDZhLjUuNSAwIDAgMS0uNzA4LjcwOGwtNi02YS41LjUgMCAwIDEgMC0uNzA4bDYtNmEuNS41IDAgMCAxIC43MDggMHpcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8c3Bhbj57eyBub21icmVNZXNBbnRlcmlvcigpIH19PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuO1wiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk00LjY0NiAxLjY0NmEuNS41IDAgMCAxIC43MDggMGw2IDZhLjUuNSAwIDAgMSAwIC43MDhsLTYgNmEuNS41IDAgMCAxLS43MDgtLjcwOEwxMC4yOTMgOCA0LjY0NiAyLjM1NGEuNS41IDAgMCAxIDAtLjcwOHpcIi8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci13ZWVrZGF5c1wiPlxuICAgICAgICAgIEBmb3IgKGRheU5hbWUgb2YgZGlhc1NlbWFuYSgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxzcGFuPnt7IGRheU5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWRheXNcIj5cbiAgICAgICAgICBAZm9yIChkaWFPYmogb2YgZGlhc01lc0FudGVyaW9yKCk7IHRyYWNrIGRpYU9iai5mZWNoYSB8fCAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWRheVwiIFxuICAgICAgICAgICAgICBbY2xhc3MuZW1wdHldPVwiIWRpYU9iai5lc01lc0FjdHVhbFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJkaWFPYmouZXNJbmljaW8gfHwgZGlhT2JqLmVzRmluXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmluLXJhbmdlXT1cImRpYU9iai5lblJhbmdvICYmICFkaWFPYmouZXNJbmljaW8gJiYgIWRpYU9iai5lc0ZpblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY2Npb25hckRpYShkaWFPYmopXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFkaWFPYmouZXNNZXNBY3R1YWxcIj5cbiAgICAgICAgICAgICAge3sgZGlhT2JqLmRpYSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIEN1cnJlbnQgbW9udGggY2FsZW5kYXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItY2FsZW5kYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuO1wiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMS4zNTQgMS42NDZhLjUuNSAwIDAgMSAwIC43MDhMNS43MDcgOGw1LjY0NyA1LjY0NmEuNS41IDAgMCAxLS43MDguNzA4bC02LTZhLjUuNSAwIDAgMSAwLS43MDhsNi02YS41LjUgMCAwIDEgLjcwOCAwelwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuPnt7IG5vbWJyZU1lc0FjdHVhbCgpIH19PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW1iaWFyTWVzKDEpXCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTQuNjQ2IDEuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxIDAgLjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOC0uNzA4TDEwLjI5MyA4IDQuNjQ2IDIuMzU0YS41LjUgMCAwIDEgMC0uNzA4elwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXdlZWtkYXlzXCI+XG4gICAgICAgICAgQGZvciAoZGF5TmFtZSBvZiBkaWFzU2VtYW5hKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPHNwYW4+e3sgZGF5TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItZGF5c1wiPlxuICAgICAgICAgIEBmb3IgKGRpYU9iaiBvZiBkaWFzTWVzQWN0dWFsKCk7IHRyYWNrIGRpYU9iai5mZWNoYSB8fCAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImRhdGUtcGlja2VyLWRheVwiIFxuICAgICAgICAgICAgICBbY2xhc3MuZW1wdHldPVwiIWRpYU9iai5lc01lc0FjdHVhbFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJkaWFPYmouZXNJbmljaW8gfHwgZGlhT2JqLmVzRmluXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmluLXJhbmdlXT1cImRpYU9iai5lblJhbmdvICYmICFkaWFPYmouZXNJbmljaW8gJiYgIWRpYU9iai5lc0ZpblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY2Npb25hckRpYShkaWFPYmopXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFkaWFPYmouZXNNZXNBY3R1YWxcIj5cbiAgICAgICAgICAgICAge3sgZGlhT2JqLmRpYSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb290ZXIgd2l0aCBjbGVhciBidXR0b24gLS0+XG4gICAgQGlmIChzaG93Q2xlYXJCdXR0b24pIHtcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItZm9vdGVyXCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbGVhclwiIChjbGljayk9XCJsaW1waWFyKClcIiB0aXRsZT1cIkNsZWFyIHNlbGVjdGlvblwiPlxuICAgICAgICBDbGVhclxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgfVxuICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
345
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vc3JjL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxZQUFZLEVBQWMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqTCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEVBQWUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7OztBQXVDMUQsTUFBTSxPQUFPLHVCQUF1QjtJQW9EZDtJQW5EWCxXQUFXLEdBQVcsbUJBQW1CLENBQUM7SUFDMUMsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLFdBQVcsR0FBWSxJQUFJLENBQUM7SUFDNUIsZUFBZSxHQUFZLEtBQUssQ0FBQztJQUNqQyxnQkFBZ0IsR0FBWSxJQUFJLENBQUM7SUFDakMsc0JBQXNCLEdBQVksSUFBSSxDQUFDO0lBQ3ZDLG1CQUFtQixHQUFZLElBQUksQ0FBQztJQUNwQyxPQUFPLEdBQW1CO1FBQ2pDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO1FBQ3BDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFO0tBQ3JDLENBQUM7SUFDTyxvQkFBb0IsR0FBVyxNQUFNLENBQUM7SUFDdEMsY0FBYyxHQUFXLFNBQVMsQ0FBQztJQUNuQyxnQkFBZ0IsR0FBVyxTQUFTLENBQUM7SUFDckMscUJBQXFCLEdBQVcsU0FBUyxDQUFDO0lBQzFDLHFCQUFxQixHQUFXLFNBQVMsQ0FBQztJQUMxQyxZQUFZLEdBQVcsa0JBQWtCLENBQUM7SUFDMUMsTUFBTSxHQUFpQixFQUFFLENBQUM7SUFFekIsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFhLENBQUM7SUFDaEQsaUJBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztJQUU1RCx5QkFBeUI7SUFDakIsV0FBVyxHQUFHLE1BQU0sQ0FBYyxZQUFZLENBQUMsQ0FBQztJQUV4RCw2QkFBNkI7SUFDN0IsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLFdBQVcsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekIsd0JBQXdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLGFBQWEsR0FBRyxNQUFNLENBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEMsZUFBZSxHQUFHLE1BQU0sQ0FBUSxFQUFFLENBQUMsQ0FBQztJQUNwQyxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTNCLGtCQUFrQjtJQUNsQixlQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzFFLFVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFFL0IsaUJBQWlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQy9JLHNCQUFzQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5RyxlQUFlLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNqRyxvQkFBb0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRTVFLGlDQUFpQztJQUN6QixRQUFRLEdBQXNDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUN2RCxTQUFTLEdBQWUsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBRXpDLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDeEMsMkNBQTJDO1FBQzNDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxjQUFjLENBQUMsS0FBaUI7UUFDOUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN6RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzVCLENBQUM7aUJBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFXO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckUsT0FBTyxHQUFHLElBQUksSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWdCO1FBQ3BDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUM7UUFDOUUsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUYsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDeEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDckQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDdEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsS0FBVztRQUM5QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTNELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUVuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUVELEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0MsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDWCxHQUFHLEVBQUUsR0FBRztnQkFDUixLQUFLLEVBQUUsUUFBUTtnQkFDZixXQUFXLEVBQUUsSUFBSTtnQkFDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEtBQUssUUFBUTtnQkFDdkMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUTtnQkFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO2FBQ3BDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQWdCO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN0RCxPQUFPLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ25FLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBVztRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQUUsT0FBTztRQUVyRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDbEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUMvQixDQUFDO1lBQ0QsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQWlCO1FBQzFCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN4QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUVuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFXO1FBQ3RCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNwRSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztJQUM5RixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ2hFLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxNQUFvQjtRQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVuRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFDeEIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQzFCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixPQUFPO1lBQ0wsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtTQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELHNDQUFzQztJQUN0QyxVQUFVLENBQUMsS0FBdUI7UUFDaEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFxQztRQUNwRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBYztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbEMsQ0FBQzt3R0ExU1UsdUJBQXVCOzRGQUF2Qix1QkFBdUIsd3hCQVp2QjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3RELEtBQUssRUFBRSxJQUFJO2FBQ1o7WUFDRDtnQkFDRSxPQUFPLEVBQUUsWUFBWTtnQkFDckIsUUFBUSxFQUFFLGlCQUFpQjthQUM1QjtTQUNGLCtDQ3pDSCxxOEpBNkhBLHltSkRqR1ksWUFBWSxtSEFBRSxXQUFXLDhCQUFFLG1CQUFtQjs7NEZBZTdDLHVCQUF1QjtrQkFsQm5DLFNBQVM7K0JBQ0UscUJBQXFCLGNBQ25CLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsYUFHOUM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxZQUFZOzRCQUNyQixRQUFRLEVBQUUsaUJBQWlCO3lCQUM1QjtxQkFDRjsrRUFHUSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUtHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQXdDUCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgZm9yd2FyZFJlZiwgc2lnbmFsLCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIERBVEVfQURBUFRFUiB9IGZyb20gJy4vZGF0ZS1hZGFwdGVyJztcbmltcG9ydCB7IE5hdGl2ZURhdGVBZGFwdGVyIH0gZnJvbSAnLi9uYXRpdmUtZGF0ZS1hZGFwdGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBEYXRlUmFuZ2Uge1xuICBmZWNoYUluaWNpbzogc3RyaW5nO1xuICBmZWNoYUZpbjogc3RyaW5nO1xuICByYW5nb1RleHRvOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlc2V0Q29uZmlnIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgZGF5c0FnbzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsZUNvbmZpZyB7XG4gIG1vbnRoTmFtZXM/OiBzdHJpbmdbXTtcbiAgbW9udGhOYW1lc1Nob3J0Pzogc3RyaW5nW107XG4gIGRheU5hbWVzPzogc3RyaW5nW107XG4gIGRheU5hbWVzU2hvcnQ/OiBzdHJpbmdbXTtcbiAgZmlyc3REYXlPZldlZWs/OiBudW1iZXI7IC8vIDAgPSBTdW5kYXksIDEgPSBNb25kYXksIGV0Yy5cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LWR1YWwtZGF0ZXBpY2tlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kdWFsLWRhdGVwaWNrZXIuY29tcG9uZW50LnNjc3MnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IER1YWxEYXRlcGlja2VyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBEQVRFX0FEQVBURVIsXG4gICAgICB1c2VDbGFzczogTmF0aXZlRGF0ZUFkYXB0ZXJcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRHVhbERhdGVwaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjdCBkYXRlIHJhbmdlJztcbiAgQElucHV0KCkgZmVjaGFJbmljaW86IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBmZWNoYUZpbjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNob3dQcmVzZXRzOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0NsZWFyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsb3NlT25TZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBjbG9zZU9uUHJlc2V0U2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgY2xvc2VPbkNsaWNrT3V0c2lkZTogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHByZXNldHM6IFByZXNldENvbmZpZ1tdID0gW1xuICAgIHsgbGFiZWw6ICdMYXN0IG1vbnRoJywgZGF5c0FnbzogMzAgfSxcbiAgICB7IGxhYmVsOiAnTGFzdCA2IG1vbnRocycsIGRheXNBZ286IDE4MCB9LFxuICAgIHsgbGFiZWw6ICdMYXN0IHllYXInLCBkYXlzQWdvOiAzNjUgfVxuICBdO1xuICBASW5wdXQoKSBpbnB1dEJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyNmZmYnO1xuICBASW5wdXQoKSBpbnB1dFRleHRDb2xvcjogc3RyaW5nID0gJyM0OTUwNTcnO1xuICBASW5wdXQoKSBpbnB1dEJvcmRlckNvbG9yOiBzdHJpbmcgPSAnI2NlZDRkYSc7XG4gIEBJbnB1dCgpIGlucHV0Qm9yZGVyQ29sb3JIb3Zlcjogc3RyaW5nID0gJyNjZWQ0ZGEnO1xuICBASW5wdXQoKSBpbnB1dEJvcmRlckNvbG9yRm9jdXM6IHN0cmluZyA9ICcjODBiZGZmJztcbiAgQElucHV0KCkgaW5wdXRQYWRkaW5nOiBzdHJpbmcgPSAnMC4zNzVyZW0gMC43NXJlbSc7XG4gIEBJbnB1dCgpIGxvY2FsZTogTG9jYWxlQ29uZmlnID0ge307XG5cbiAgQE91dHB1dCgpIGRhdGVSYW5nZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZVJhbmdlPigpO1xuICBAT3V0cHV0KCkgZGF0ZVJhbmdlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVSYW5nZT4oKTtcblxuICAvLyBEYXRlIGFkYXB0ZXIgaW5qZWN0aW9uXG4gIHByaXZhdGUgZGF0ZUFkYXB0ZXIgPSBpbmplY3Q8RGF0ZUFkYXB0ZXI+KERBVEVfQURBUFRFUik7XG5cbiAgLy8gU2lnbmFscyBmb3IgcmVhY3RpdmUgc3RhdGVcbiAgbW9zdHJhckRhdGVQaWNrZXIgPSBzaWduYWwoZmFsc2UpO1xuICByYW5nb0ZlY2hhcyA9IHNpZ25hbCgnJyk7XG4gIGZlY2hhU2VsZWNjaW9uYW5kb0luaWNpbyA9IHNpZ25hbCh0cnVlKTtcbiAgbWVzQWN0dWFsID0gc2lnbmFsKHRoaXMuZGF0ZUFkYXB0ZXIudG9kYXkoKSk7XG4gIG1lc0FudGVyaW9yID0gc2lnbmFsKHRoaXMuZGF0ZUFkYXB0ZXIudG9kYXkoKSk7XG4gIGRpYXNNZXNBY3R1YWwgPSBzaWduYWw8YW55W10+KFtdKTtcbiAgZGlhc01lc0FudGVyaW9yID0gc2lnbmFsPGFueVtdPihbXSk7XG4gIGlzRGlzYWJsZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIC8vIENvbXB1dGVkIHZhbHVlc1xuICBub21icmVNZXNBY3R1YWwgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldE5vbWJyZU1lcyh0aGlzLm1lc0FjdHVhbCgpKSk7XG4gIG5vbWJyZU1lc0FudGVyaW9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nZXROb21icmVNZXModGhpcy5tZXNBbnRlcmlvcigpKSk7XG4gIGRpYXNTZW1hbmEgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdldERheU5hbWVzKCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdE1vbnRoTmFtZXMgPSBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0TW9udGhOYW1lc1Nob3J0ID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHREYXlOYW1lcyA9IFsnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0RGF5TmFtZXNTaG9ydCA9IFsnUycsICdNJywgJ1QnLCAnVycsICdUJywgJ0YnLCAnUyddO1xuXG4gIC8vIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGNhbGxiYWNrc1xuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IERhdGVSYW5nZSB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHtcbiAgICAvLyBFZmZlY3QgdG8gZW1pdCBjaGFuZ2VzIHdoZW4gZGF0ZXMgY2hhbmdlXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHJhbmdvID0gdGhpcy5yYW5nb0ZlY2hhcygpO1xuICAgICAgaWYgKHRoaXMuZmVjaGFJbmljaW8gfHwgdGhpcy5mZWNoYUZpbikge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuZ2V0RGF0ZVJhbmdlVmFsdWUoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uQ2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9zdHJhckRhdGVQaWNrZXIoKSAmJiB0aGlzLmNsb3NlT25DbGlja091dHNpZGUpIHtcbiAgICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgICAgaWYgKCFjbGlja2VkSW5zaWRlKSB7XG4gICAgICAgIHRoaXMuY2VycmFyRGF0ZVBpY2tlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZlY2hhSW5pY2lvICYmIHRoaXMuZmVjaGFGaW4pIHtcbiAgICAgIHRoaXMuYWN0dWFsaXphclJhbmdvRmVjaGFzVGV4dG8oKTtcbiAgICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydmZWNoYUluaWNpbyddIHx8IGNoYW5nZXNbJ2ZlY2hhRmluJ10pIHtcbiAgICAgIGlmICh0aGlzLmZlY2hhSW5pY2lvICYmIHRoaXMuZmVjaGFGaW4pIHtcbiAgICAgICAgdGhpcy5hY3R1YWxpemFyUmFuZ29GZWNoYXNUZXh0bygpO1xuICAgICAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5mZWNoYUluaWNpbyAmJiAhdGhpcy5mZWNoYUZpbikge1xuICAgICAgICB0aGlzLnJhbmdvRmVjaGFzLnNldCgnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0ZWFyRmVjaGEoZmVjaGE6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmRhdGVBZGFwdGVyLmdldFllYXIoZmVjaGEpO1xuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZmVjaGEpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBjb25zdCBkYXkgPSBTdHJpbmcodGhpcy5kYXRlQWRhcHRlci5nZXREYXRlKGZlY2hhKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgfVxuXG4gIGZvcm1hdGVhckZlY2hhRGlzcGxheShmZWNoYVN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWZlY2hhU3RyKSByZXR1cm4gJyc7XG4gICAgY29uc3QgZmVjaGEgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKGZlY2hhU3RyKTtcbiAgICBpZiAoIWZlY2hhKSByZXR1cm4gJyc7XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IHRoaXMubG9jYWxlLm1vbnRoTmFtZXNTaG9ydCB8fCB0aGlzLmRlZmF1bHRNb250aE5hbWVzU2hvcnQ7XG4gICAgcmV0dXJuIGAke3RoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShmZWNoYSl9ICR7bW9udGhOYW1lc1t0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKGZlY2hhKV19YDtcbiAgfVxuXG4gIGFjdHVhbGl6YXJSYW5nb0ZlY2hhc1RleHRvKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZlY2hhSW5pY2lvICYmIHRoaXMuZmVjaGFGaW4pIHtcbiAgICAgIGNvbnN0IGluaWNpbyA9IHRoaXMuZm9ybWF0ZWFyRmVjaGFEaXNwbGF5KHRoaXMuZmVjaGFJbmljaW8pO1xuICAgICAgY29uc3QgZmluID0gdGhpcy5mb3JtYXRlYXJGZWNoYURpc3BsYXkodGhpcy5mZWNoYUZpbik7XG4gICAgICB0aGlzLnJhbmdvRmVjaGFzLnNldChgJHtpbmljaW99IC0gJHtmaW59YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmFuZ29GZWNoYXMuc2V0KCcnKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVEYXRlUGlja2VyKCk6IHZvaWQge1xuICAgIHRoaXMubW9zdHJhckRhdGVQaWNrZXIudXBkYXRlKHZhbHVlID0+ICF2YWx1ZSk7XG4gICAgaWYgKHRoaXMubW9zdHJhckRhdGVQaWNrZXIoKSkge1xuICAgICAgdGhpcy5mZWNoYVNlbGVjY2lvbmFuZG9JbmljaW8uc2V0KHRydWUpO1xuICAgICAgY29uc3QgbWVzQWN0dWFsVmFsdWUgPSB0aGlzLm1lc0FjdHVhbCgpO1xuICAgICAgY29uc3QgYcOxbyA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihtZXNBY3R1YWxWYWx1ZSk7XG4gICAgICBjb25zdCBtZXMgPSB0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKG1lc0FjdHVhbFZhbHVlKTtcbiAgICAgIGNvbnN0IG1lc0FudGVyaW9yRGF0ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShhw7FvLCBtZXMgLSAxLCAxKTtcbiAgICAgIHRoaXMubWVzQW50ZXJpb3Iuc2V0KG1lc0FudGVyaW9yRGF0ZSk7XG4gICAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICAgIH1cbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgY2VycmFyRGF0ZVBpY2tlcigpOiB2b2lkIHtcbiAgICB0aGlzLm1vc3RyYXJEYXRlUGlja2VyLnNldChmYWxzZSk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGdlbmVyYXJDYWxlbmRhcmlvcygpOiB2b2lkIHtcbiAgICB0aGlzLmRpYXNNZXNBbnRlcmlvci5zZXQodGhpcy5nZW5lcmFyQ2FsZW5kYXJpb01lcyh0aGlzLm1lc0FudGVyaW9yKCkpKTtcbiAgICB0aGlzLmRpYXNNZXNBY3R1YWwuc2V0KHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9NZXModGhpcy5tZXNBY3R1YWwoKSkpO1xuICB9XG5cbiAgZ2VuZXJhckNhbGVuZGFyaW9NZXMoZmVjaGE6IERhdGUpOiBhbnlbXSB7XG4gICAgY29uc3QgYcOxbyA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihmZWNoYSk7XG4gICAgY29uc3QgbWVzID0gdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChmZWNoYSk7XG4gICAgY29uc3QgcHJpbWVyRGlhID0gdGhpcy5kYXRlQWRhcHRlci5jcmVhdGVEYXRlKGHDsW8sIG1lcywgMSk7XG4gICAgY29uc3QgdWx0aW1vRGlhID0gdGhpcy5kYXRlQWRhcHRlci5jcmVhdGVEYXRlKGHDsW8sIG1lcyArIDEsIDApO1xuICAgIGNvbnN0IGRpYXNFbk1lcyA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh1bHRpbW9EaWEpO1xuICAgIGNvbnN0IHByaW1lckRpYVNlbWFuYSA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0RGF5KHByaW1lckRpYSk7XG5cbiAgICBjb25zdCBkaWFzTWVzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaW1lckRpYVNlbWFuYTsgaSsrKSB7XG4gICAgICBkaWFzTWVzLnB1c2goeyBkaWE6IG51bGwsIGVzTWVzQWN0dWFsOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBkaWEgPSAxOyBkaWEgPD0gZGlhc0VuTWVzOyBkaWErKykge1xuICAgICAgY29uc3QgZmVjaGFEaWEgPSB0aGlzLmRhdGVBZGFwdGVyLmNyZWF0ZURhdGUoYcOxbywgbWVzLCBkaWEpO1xuICAgICAgY29uc3QgZmVjaGFTdHIgPSB0aGlzLmZvcm1hdGVhckZlY2hhKGZlY2hhRGlhKTtcbiAgICAgIGRpYXNNZXMucHVzaCh7XG4gICAgICAgIGRpYTogZGlhLFxuICAgICAgICBmZWNoYTogZmVjaGFTdHIsXG4gICAgICAgIGVzTWVzQWN0dWFsOiB0cnVlLFxuICAgICAgICBlc0luaWNpbzogdGhpcy5mZWNoYUluaWNpbyA9PT0gZmVjaGFTdHIsXG4gICAgICAgIGVzRmluOiB0aGlzLmZlY2hhRmluID09PSBmZWNoYVN0cixcbiAgICAgICAgZW5SYW5nbzogdGhpcy5lc3RhRW5SYW5nbyhmZWNoYVN0cilcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBkaWFzTWVzO1xuICB9XG5cbiAgZXN0YUVuUmFuZ28oZmVjaGFTdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5mZWNoYUluaWNpbyB8fCAhdGhpcy5mZWNoYUZpbikgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBmZWNoYVN0ciA+PSB0aGlzLmZlY2hhSW5pY2lvICYmIGZlY2hhU3RyIDw9IHRoaXMuZmVjaGFGaW47XG4gIH1cblxuICBzZWxlY2Npb25hckRpYShkaWFPYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICghZGlhT2JqLmVzTWVzQWN0dWFsIHx8IHRoaXMuaXNEaXNhYmxlZCgpKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5mZWNoYVNlbGVjY2lvbmFuZG9JbmljaW8oKSkge1xuICAgICAgdGhpcy5mZWNoYUluaWNpbyA9IGRpYU9iai5mZWNoYTtcbiAgICAgIHRoaXMuZmVjaGFGaW4gPSAnJztcbiAgICAgIHRoaXMucmFuZ29GZWNoYXMuc2V0KCcnKTtcbiAgICAgIHRoaXMuZmVjaGFTZWxlY2Npb25hbmRvSW5pY2lvLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmVtaXRpckNhbWJpbygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGlhT2JqLmZlY2hhIDwgdGhpcy5mZWNoYUluaWNpbykge1xuICAgICAgICB0aGlzLmZlY2hhRmluID0gdGhpcy5mZWNoYUluaWNpbztcbiAgICAgICAgdGhpcy5mZWNoYUluaWNpbyA9IGRpYU9iai5mZWNoYTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmVjaGFGaW4gPSBkaWFPYmouZmVjaGE7XG4gICAgICB9XG4gICAgICB0aGlzLmFjdHVhbGl6YXJSYW5nb0ZlY2hhc1RleHRvKCk7XG4gICAgICBpZiAodGhpcy5jbG9zZU9uU2VsZWN0aW9uKSB7XG4gICAgICAgIHRoaXMubW9zdHJhckRhdGVQaWNrZXIuc2V0KGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmVjaGFTZWxlY2Npb25hbmRvSW5pY2lvLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuZW1pdGlyQ2FtYmlvKCk7XG4gICAgICB0aGlzLmVtaXRpclNlbGVjY2lvbigpO1xuICAgIH1cbiAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICB9XG5cbiAgY2FtYmlhck1lcyhkaXJlY2Npb246IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG1lc0FjdHVhbFZhbHVlID0gdGhpcy5tZXNBY3R1YWwoKTtcbiAgICBjb25zdCBhw7FvID0gdGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKG1lc0FjdHVhbFZhbHVlKTtcbiAgICBjb25zdCBtZXMgPSB0aGlzLmRhdGVBZGFwdGVyLmdldE1vbnRoKG1lc0FjdHVhbFZhbHVlKTtcbiAgICBjb25zdCBudWV2b01lc0FjdHVhbCA9IHRoaXMuZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShhw7FvLCBtZXMgKyBkaXJlY2Npb24sIDEpO1xuICAgIHRoaXMubWVzQWN0dWFsLnNldChudWV2b01lc0FjdHVhbCk7XG4gICAgXG4gICAgY29uc3QgYcOxb051ZXZvID0gdGhpcy5kYXRlQWRhcHRlci5nZXRZZWFyKG51ZXZvTWVzQWN0dWFsKTtcbiAgICBjb25zdCBtZXNOdWV2byA9IHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0TW9udGgobnVldm9NZXNBY3R1YWwpO1xuICAgIGNvbnN0IG1lc0FudGVyaW9yTnVldm8gPSB0aGlzLmRhdGVBZGFwdGVyLmNyZWF0ZURhdGUoYcOxb051ZXZvLCBtZXNOdWV2byAtIDEsIDEpO1xuICAgIHRoaXMubWVzQW50ZXJpb3Iuc2V0KG1lc0FudGVyaW9yTnVldm8pO1xuICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gIH1cblxuICBnZXROb21icmVNZXMoZmVjaGE6IERhdGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSB0aGlzLmxvY2FsZS5tb250aE5hbWVzIHx8IHRoaXMuZGVmYXVsdE1vbnRoTmFtZXM7XG4gICAgcmV0dXJuIGAke21vbnRoTmFtZXNbdGhpcy5kYXRlQWRhcHRlci5nZXRNb250aChmZWNoYSldfSAke3RoaXMuZGF0ZUFkYXB0ZXIuZ2V0WWVhcihmZWNoYSl9YDtcbiAgfVxuXG4gIGdldERheU5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGUuZGF5TmFtZXNTaG9ydCB8fCB0aGlzLmRlZmF1bHREYXlOYW1lc1Nob3J0O1xuICB9XG5cbiAgc2VsZWNjaW9uYXJSYW5nb1ByZWRlZmluaWRvKHByZXNldDogUHJlc2V0Q29uZmlnKTogdm9pZCB7XG4gICAgY29uc3QgaG95ID0gdGhpcy5kYXRlQWRhcHRlci50b2RheSgpO1xuICAgIGNvbnN0IGZlY2hhSW5pY2lvID0gdGhpcy5kYXRlQWRhcHRlci5hZGREYXlzKGhveSwgLXByZXNldC5kYXlzQWdvKTtcblxuICAgIHRoaXMuZmVjaGFJbmljaW8gPSB0aGlzLmZvcm1hdGVhckZlY2hhKGZlY2hhSW5pY2lvKTtcbiAgICB0aGlzLmZlY2hhRmluID0gdGhpcy5mb3JtYXRlYXJGZWNoYShob3kpO1xuICAgIHRoaXMuYWN0dWFsaXphclJhbmdvRmVjaGFzVGV4dG8oKTtcbiAgICB0aGlzLmdlbmVyYXJDYWxlbmRhcmlvcygpO1xuICAgIGlmICh0aGlzLmNsb3NlT25QcmVzZXRTZWxlY3Rpb24pIHtcbiAgICAgIHRoaXMubW9zdHJhckRhdGVQaWNrZXIuc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0aXJTZWxlY2Npb24oKTtcbiAgfVxuXG4gIGxpbXBpYXIoKTogdm9pZCB7XG4gICAgdGhpcy5mZWNoYUluaWNpbyA9ICcnO1xuICAgIHRoaXMuZmVjaGFGaW4gPSAnJztcbiAgICB0aGlzLnJhbmdvRmVjaGFzLnNldCgnJyk7XG4gICAgdGhpcy5tb3N0cmFyRGF0ZVBpY2tlci5zZXQoZmFsc2UpO1xuICAgIHRoaXMuZmVjaGFTZWxlY2Npb25hbmRvSW5pY2lvLnNldCh0cnVlKTtcbiAgICB0aGlzLmVtaXRpckNhbWJpbygpO1xuICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRpckNhbWJpbygpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGVSYW5nZUNoYW5nZS5lbWl0KHtcbiAgICAgIGZlY2hhSW5pY2lvOiB0aGlzLmZlY2hhSW5pY2lvLFxuICAgICAgZmVjaGFGaW46IHRoaXMuZmVjaGFGaW4sXG4gICAgICByYW5nb1RleHRvOiB0aGlzLnJhbmdvRmVjaGFzKClcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdGlyU2VsZWNjaW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0ZVJhbmdlU2VsZWN0ZWQuZW1pdCh7XG4gICAgICBmZWNoYUluaWNpbzogdGhpcy5mZWNoYUluaWNpbyxcbiAgICAgIGZlY2hhRmluOiB0aGlzLmZlY2hhRmluLFxuICAgICAgcmFuZ29UZXh0bzogdGhpcy5yYW5nb0ZlY2hhcygpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldERhdGVSYW5nZVZhbHVlKCk6IERhdGVSYW5nZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZlY2hhSW5pY2lvOiB0aGlzLmZlY2hhSW5pY2lvLFxuICAgICAgZmVjaGFGaW46IHRoaXMuZmVjaGFGaW4sXG4gICAgICByYW5nb1RleHRvOiB0aGlzLnJhbmdvRmVjaGFzKClcbiAgICB9O1xuICB9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW1wbGVtZW50YXRpb25cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogRGF0ZVJhbmdlIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5mZWNoYUluaWNpbyA9IHZhbHVlLmZlY2hhSW5pY2lvIHx8ICcnO1xuICAgICAgdGhpcy5mZWNoYUZpbiA9IHZhbHVlLmZlY2hhRmluIHx8ICcnO1xuICAgICAgaWYgKHRoaXMuZmVjaGFJbmljaW8gJiYgdGhpcy5mZWNoYUZpbikge1xuICAgICAgICB0aGlzLmFjdHVhbGl6YXJSYW5nb0ZlY2hhc1RleHRvKCk7XG4gICAgICAgIHRoaXMuZ2VuZXJhckNhbGVuZGFyaW9zKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmVjaGFJbmljaW8gPSAnJztcbiAgICAgIHRoaXMuZmVjaGFGaW4gPSAnJztcbiAgICAgIHRoaXMucmFuZ29GZWNoYXMuc2V0KCcnKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IERhdGVSYW5nZSB8IG51bGwpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlci13cmFwcGVyXCIgXG4gIFtzdHlsZS4tLWlucHV0LWJvcmRlci1ob3Zlcl09XCJpbnB1dEJvcmRlckNvbG9ySG92ZXJcIlxuICBbc3R5bGUuLS1pbnB1dC1ib3JkZXItZm9jdXNdPVwiaW5wdXRCb3JkZXJDb2xvckZvY3VzXCI+XG4gIDxpbnB1dCBcbiAgICB0eXBlPVwidGV4dFwiIFxuICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1pbnB1dFwiIFxuICAgIFt2YWx1ZV09XCJyYW5nb0ZlY2hhcygpXCIgXG4gICAgKGNsaWNrKT1cInRvZ2dsZURhdGVQaWNrZXIoKVwiIFxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBpbnB1dEJhY2tncm91bmRDb2xvcixcbiAgICAgICdjb2xvcic6IGlucHV0VGV4dENvbG9yLFxuICAgICAgJ2JvcmRlci1jb2xvcic6IGlucHV0Qm9yZGVyQ29sb3IsXG4gICAgICAncGFkZGluZyc6IGlucHV0UGFkZGluZ1xuICAgIH1cIlxuICAgIHJlYWRvbmx5PlxuXG4gIEBpZiAobW9zdHJhckRhdGVQaWNrZXIoKSkge1xuICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItZHJvcGRvd25cIj5cbiAgICBAaWYgKHNob3dQcmVzZXRzKSB7XG4gICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXByZXNldHNcIj5cbiAgICAgIEBmb3IgKHByZXNldCBvZiBwcmVzZXRzOyB0cmFjayBwcmVzZXQubGFiZWwpIHtcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZWxlY2Npb25hclJhbmdvUHJlZGVmaW5pZG8ocHJlc2V0KVwiPnt7IHByZXNldC5sYWJlbCB9fTwvYnV0dG9uPlxuICAgICAgfVxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UtY2FsZW5kYXJcIiAoY2xpY2spPVwiY2VycmFyRGF0ZVBpY2tlcigpXCIgdGl0bGU9XCJDbG9zZVwiPlxuICAgICAgICDDl1xuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmICghc2hvd1ByZXNldHMpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItaGVhZGVyLW9ubHktY2xvc2VcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlLWNhbGVuZGFyXCIgKGNsaWNrKT1cImNlcnJhckRhdGVQaWNrZXIoKVwiIHRpdGxlPVwiQ2xvc2VcIj5cbiAgICAgICAgw5dcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0gQ2FsZW5kYXJzIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhcnNcIj5cbiAgICAgIDwhLS0gUHJldmlvdXMgbW9udGggY2FsZW5kYXIgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItY2FsZW5kYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW1iaWFyTWVzKC0xKVwiPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMS4zNTQgMS42NDZhLjUuNSAwIDAgMSAwIC43MDhMNS43MDcgOGw1LjY0NyA1LjY0NmEuNS41IDAgMCAxLS43MDguNzA4bC02LTZhLjUuNSAwIDAgMSAwLS43MDhsNi02YS41LjUgMCAwIDEgLjcwOCAwelwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxzcGFuPnt7IG5vbWJyZU1lc0FudGVyaW9yKCkgfX08L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTQuNjQ2IDEuNjQ2YS41LjUgMCAwIDEgLjcwOCAwbDYgNmEuNS41IDAgMCAxIDAgLjcwOGwtNiA2YS41LjUgMCAwIDEtLjcwOC0uNzA4TDEwLjI5MyA4IDQuNjQ2IDIuMzU0YS41LjUgMCAwIDEgMC0uNzA4elwiLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyLXdlZWtkYXlzXCI+XG4gICAgICAgICAgQGZvciAoZGF5TmFtZSBvZiBkaWFzU2VtYW5hKCk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPHNwYW4+e3sgZGF5TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItZGF5c1wiPlxuICAgICAgICAgIEBmb3IgKGRpYU9iaiBvZiBkaWFzTWVzQW50ZXJpb3IoKTsgdHJhY2sgZGlhT2JqLmZlY2hhIHx8ICRpbmRleCkge1xuICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItZGF5XCIgXG4gICAgICAgICAgICAgIFtjbGFzcy5lbXB0eV09XCIhZGlhT2JqLmVzTWVzQWN0dWFsXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRpYU9iai5lc0luaWNpbyB8fCBkaWFPYmouZXNGaW5cIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4tcmFuZ2VdPVwiZGlhT2JqLmVuUmFuZ28gJiYgIWRpYU9iai5lc0luaWNpbyAmJiAhZGlhT2JqLmVzRmluXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjY2lvbmFyRGlhKGRpYU9iailcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRpYU9iai5lc01lc0FjdHVhbFwiPlxuICAgICAgICAgICAgICB7eyBkaWFPYmouZGlhIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gQ3VycmVudCBtb250aCBjYWxlbmRhciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1jYWxlbmRhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItaGVhZGVyXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OiBoaWRkZW47XCI+XG4gICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTExLjM1NCAxLjY0NmEuNS41IDAgMCAxIDAgLjcwOEw1LjcwNyA4bDUuNjQ3IDUuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhsLTYtNmEuNS41IDAgMCAxIDAtLjcwOGw2LTZhLjUuNSAwIDAgMSAuNzA4IDB6XCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHNwYW4+e3sgbm9tYnJlTWVzQWN0dWFsKCkgfX08L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbWJpYXJNZXMoMSlcIj5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cbiAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNNC42NDYgMS42NDZhLjUuNSAwIDAgMSAuNzA4IDBsNiA2YS41LjUgMCAwIDEgMCAuNzA4bC02IDZhLjUuNSAwIDAgMS0uNzA4LS43MDhMMTAuMjkzIDggNC42NDYgMi4zNTRhLjUuNSAwIDAgMSAwLS43MDh6XCIvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItd2Vla2RheXNcIj5cbiAgICAgICAgICBAZm9yIChkYXlOYW1lIG9mIGRpYXNTZW1hbmEoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8c3Bhbj57eyBkYXlOYW1lIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1kYXlzXCI+XG4gICAgICAgICAgQGZvciAoZGlhT2JqIG9mIGRpYXNNZXNBY3R1YWwoKTsgdHJhY2sgZGlhT2JqLmZlY2hhIHx8ICRpbmRleCkge1xuICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZGF0ZS1waWNrZXItZGF5XCIgXG4gICAgICAgICAgICAgIFtjbGFzcy5lbXB0eV09XCIhZGlhT2JqLmVzTWVzQWN0dWFsXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRpYU9iai5lc0luaWNpbyB8fCBkaWFPYmouZXNGaW5cIlxuICAgICAgICAgICAgICBbY2xhc3MuaW4tcmFuZ2VdPVwiZGlhT2JqLmVuUmFuZ28gJiYgIWRpYU9iai5lc0luaWNpbyAmJiAhZGlhT2JqLmVzRmluXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjY2lvbmFyRGlhKGRpYU9iailcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWRpYU9iai5lc01lc0FjdHVhbFwiPlxuICAgICAgICAgICAgICB7eyBkaWFPYmouZGlhIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEZvb3RlciB3aXRoIGNsZWFyIGJ1dHRvbiAtLT5cbiAgICBAaWYgKHNob3dDbGVhckJ1dHRvbikge1xuICAgIDxkaXYgY2xhc3M9XCJkYXRlLXBpY2tlci1mb290ZXJcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsZWFyXCIgKGNsaWNrKT1cImxpbXBpYXIoKVwiIHRpdGxlPVwiQ2xlYXIgc2VsZWN0aW9uXCI+XG4gICAgICAgIENsZWFyXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,112 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { DateAdapter } from './date-adapter';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Date adapter implementation for native JavaScript Date objects
6
+ * This is the default adapter used by the component
7
+ */
8
+ export class NativeDateAdapter extends DateAdapter {
9
+ parse(value) {
10
+ if (!value)
11
+ return null;
12
+ if (value instanceof Date) {
13
+ return new Date(value);
14
+ }
15
+ if (typeof value === 'string' || typeof value === 'number') {
16
+ const date = new Date(value);
17
+ return this.isValid(date) ? date : null;
18
+ }
19
+ return null;
20
+ }
21
+ format(date, format = 'YYYY-MM-DD') {
22
+ if (!this.isValid(date))
23
+ return '';
24
+ const year = date.getFullYear();
25
+ const month = String(date.getMonth() + 1).padStart(2, '0');
26
+ const day = String(date.getDate()).padStart(2, '0');
27
+ // Simple format implementation
28
+ switch (format) {
29
+ case 'YYYY-MM-DD':
30
+ return `${year}-${month}-${day}`;
31
+ case 'MM/DD/YYYY':
32
+ return `${month}/${day}/${year}`;
33
+ case 'DD/MM/YYYY':
34
+ return `${day}/${month}/${year}`;
35
+ default:
36
+ return `${year}-${month}-${day}`;
37
+ }
38
+ }
39
+ addDays(date, days) {
40
+ const result = this.clone(date);
41
+ result.setDate(result.getDate() + days);
42
+ return result;
43
+ }
44
+ addMonths(date, months) {
45
+ const result = this.clone(date);
46
+ result.setMonth(result.getMonth() + months);
47
+ return result;
48
+ }
49
+ getYear(date) {
50
+ return date.getFullYear();
51
+ }
52
+ getMonth(date) {
53
+ return date.getMonth();
54
+ }
55
+ getDate(date) {
56
+ return date.getDate();
57
+ }
58
+ getDay(date) {
59
+ return date.getDay();
60
+ }
61
+ createDate(year, month, date) {
62
+ return new Date(year, month, date);
63
+ }
64
+ today() {
65
+ return new Date();
66
+ }
67
+ isSameDay(a, b) {
68
+ if (!a || !b)
69
+ return false;
70
+ if (!this.isValid(a) || !this.isValid(b))
71
+ return false;
72
+ return (a.getFullYear() === b.getFullYear() &&
73
+ a.getMonth() === b.getMonth() &&
74
+ a.getDate() === b.getDate());
75
+ }
76
+ isBefore(a, b) {
77
+ if (!a || !b)
78
+ return false;
79
+ if (!this.isValid(a) || !this.isValid(b))
80
+ return false;
81
+ return a.getTime() < b.getTime();
82
+ }
83
+ isAfter(a, b) {
84
+ if (!a || !b)
85
+ return false;
86
+ if (!this.isValid(a) || !this.isValid(b))
87
+ return false;
88
+ return a.getTime() > b.getTime();
89
+ }
90
+ isBetween(date, start, end) {
91
+ if (!date || !start || !end)
92
+ return false;
93
+ if (!this.isValid(date) || !this.isValid(start) || !this.isValid(end))
94
+ return false;
95
+ const dateTime = date.getTime();
96
+ const startTime = start.getTime();
97
+ const endTime = end.getTime();
98
+ return dateTime >= startTime && dateTime <= endTime;
99
+ }
100
+ clone(date) {
101
+ return new Date(date.getTime());
102
+ }
103
+ isValid(date) {
104
+ return date instanceof Date && !isNaN(date.getTime());
105
+ }
106
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NativeDateAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
107
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NativeDateAdapter });
108
+ }
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NativeDateAdapter, decorators: [{
110
+ type: Injectable
111
+ }] });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUtYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9uYXRpdmUtZGF0ZS1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUU3Qzs7O0dBR0c7QUFFSCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsV0FBaUI7SUFDdEQsS0FBSyxDQUFDLEtBQVU7UUFDZCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXhCLElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQzFCLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzNELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDMUMsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFVLEVBQUUsU0FBaUIsWUFBWTtRQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUVuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXBELCtCQUErQjtRQUMvQixRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2YsS0FBSyxZQUFZO2dCQUNmLE9BQU8sR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ25DLEtBQUssWUFBWTtnQkFDZixPQUFPLEdBQUcsS0FBSyxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNuQyxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxHQUFHLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbkM7Z0JBQ0UsT0FBTyxHQUFHLElBQUksSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsSUFBVSxFQUFFLElBQVk7UUFDOUIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVUsRUFBRSxNQUFjO1FBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVU7UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFFLElBQVk7UUFDbEQsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxTQUFTLENBQUMsQ0FBYyxFQUFFLENBQWM7UUFDdEMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFdkQsT0FBTyxDQUNMLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFO1lBQ25DLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFO1lBQzdCLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUSxDQUFDLENBQWMsRUFBRSxDQUFjO1FBQ3JDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXZELE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsT0FBTyxDQUFDLENBQWMsRUFBRSxDQUFjO1FBQ3BDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXZELE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQWlCLEVBQUUsS0FBa0IsRUFBRSxHQUFnQjtRQUMvRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFFcEYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFOUIsT0FBTyxRQUFRLElBQUksU0FBUyxJQUFJLFFBQVEsSUFBSSxPQUFPLENBQUM7SUFDdEQsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFVO1FBQ2QsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQVM7UUFDZixPQUFPLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQzt3R0FsSFUsaUJBQWlCOzRHQUFqQixpQkFBaUI7OzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJy4vZGF0ZS1hZGFwdGVyJztcblxuLyoqXG4gKiBEYXRlIGFkYXB0ZXIgaW1wbGVtZW50YXRpb24gZm9yIG5hdGl2ZSBKYXZhU2NyaXB0IERhdGUgb2JqZWN0c1xuICogVGhpcyBpcyB0aGUgZGVmYXVsdCBhZGFwdGVyIHVzZWQgYnkgdGhlIGNvbXBvbmVudFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmF0aXZlRGF0ZUFkYXB0ZXIgZXh0ZW5kcyBEYXRlQWRhcHRlcjxEYXRlPiB7XG4gIHBhcnNlKHZhbHVlOiBhbnkpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoZGF0ZSkgPyBkYXRlIDogbnVsbDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3JtYXQoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcgPSAnWVlZWS1NTS1ERCcpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKGRhdGUpKSByZXR1cm4gJyc7XG4gICAgXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICBcbiAgICAvLyBTaW1wbGUgZm9ybWF0IGltcGxlbWVudGF0aW9uXG4gICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgIGNhc2UgJ1lZWVktTU0tREQnOlxuICAgICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgICAgIGNhc2UgJ01NL0REL1lZWVknOlxuICAgICAgICByZXR1cm4gYCR7bW9udGh9LyR7ZGF5fS8ke3llYXJ9YDtcbiAgICAgIGNhc2UgJ0REL01NL1lZWVknOlxuICAgICAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xuICAgIH1cbiAgfVxuXG4gIGFkZERheXMoZGF0ZTogRGF0ZSwgZGF5czogbnVtYmVyKTogRGF0ZSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jbG9uZShkYXRlKTtcbiAgICByZXN1bHQuc2V0RGF0ZShyZXN1bHQuZ2V0RGF0ZSgpICsgZGF5cyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGFkZE1vbnRocyhkYXRlOiBEYXRlLCBtb250aHM6IG51bWJlcik6IERhdGUge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2xvbmUoZGF0ZSk7XG4gICAgcmVzdWx0LnNldE1vbnRoKHJlc3VsdC5nZXRNb250aCgpICsgbW9udGhzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0WWVhcihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgZ2V0TW9udGgoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIGdldERhdGUoZGF0ZTogRGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGRhdGUuZ2V0RGF0ZSgpO1xuICB9XG5cbiAgZ2V0RGF5KGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldERheSgpO1xuICB9XG5cbiAgY3JlYXRlRGF0ZSh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIsIGRhdGU6IG51bWJlcik6IERhdGUge1xuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSk7XG4gIH1cblxuICB0b2RheSgpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoKTtcbiAgfVxuXG4gIGlzU2FtZURheShhOiBEYXRlIHwgbnVsbCwgYjogRGF0ZSB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZChhKSB8fCAhdGhpcy5pc1ZhbGlkKGIpKSByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgcmV0dXJuIChcbiAgICAgIGEuZ2V0RnVsbFllYXIoKSA9PT0gYi5nZXRGdWxsWWVhcigpICYmXG4gICAgICBhLmdldE1vbnRoKCkgPT09IGIuZ2V0TW9udGgoKSAmJlxuICAgICAgYS5nZXREYXRlKCkgPT09IGIuZ2V0RGF0ZSgpXG4gICAgKTtcbiAgfVxuXG4gIGlzQmVmb3JlKGE6IERhdGUgfCBudWxsLCBiOiBEYXRlIHwgbnVsbCk6IGJvb2xlYW4ge1xuICAgIGlmICghYSB8fCAhYikgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKGEpIHx8ICF0aGlzLmlzVmFsaWQoYikpIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICByZXR1cm4gYS5nZXRUaW1lKCkgPCBiLmdldFRpbWUoKTtcbiAgfVxuXG4gIGlzQWZ0ZXIoYTogRGF0ZSB8IG51bGwsIGI6IERhdGUgfCBudWxsKTogYm9vbGVhbiB7XG4gICAgaWYgKCFhIHx8ICFiKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoYSkgfHwgIXRoaXMuaXNWYWxpZChiKSkgcmV0dXJuIGZhbHNlO1xuICAgIFxuICAgIHJldHVybiBhLmdldFRpbWUoKSA+IGIuZ2V0VGltZSgpO1xuICB9XG5cbiAgaXNCZXR3ZWVuKGRhdGU6IERhdGUgfCBudWxsLCBzdGFydDogRGF0ZSB8IG51bGwsIGVuZDogRGF0ZSB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIWRhdGUgfHwgIXN0YXJ0IHx8ICFlbmQpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZChkYXRlKSB8fCAhdGhpcy5pc1ZhbGlkKHN0YXJ0KSB8fCAhdGhpcy5pc1ZhbGlkKGVuZCkpIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICBjb25zdCBkYXRlVGltZSA9IGRhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHN0YXJ0LmdldFRpbWUoKTtcbiAgICBjb25zdCBlbmRUaW1lID0gZW5kLmdldFRpbWUoKTtcbiAgICBcbiAgICByZXR1cm4gZGF0ZVRpbWUgPj0gc3RhcnRUaW1lICYmIGRhdGVUaW1lIDw9IGVuZFRpbWU7XG4gIH1cblxuICBjbG9uZShkYXRlOiBEYXRlKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIGlzVmFsaWQoZGF0ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSk7XG4gIH1cbn1cbiJdfQ==
@@ -2,4 +2,7 @@
2
2
  * Public API Surface of @oneluiz/dual-datepicker
3
3
  */
4
4
  export { DualDatepickerComponent } from './dual-datepicker.component';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAb25lbHVpei9kdWFsLWRhdGVwaWNrZXJcbiAqL1xuXG5leHBvcnQgeyBEdWFsRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5leHBvcnQgdHlwZSB7IERhdGVSYW5nZSwgUHJlc2V0Q29uZmlnLCBMb2NhbGVDb25maWcgfSBmcm9tICcuL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuIl19
5
+ // Date Adapter System
6
+ export { DateAdapter, DATE_ADAPTER } from './date-adapter';
7
+ export { NativeDateAdapter } from './native-date-adapter';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHdEUsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAb25lbHVpei9kdWFsLWRhdGVwaWNrZXJcbiAqL1xuXG5leHBvcnQgeyBEdWFsRGF0ZXBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZHVhbC1kYXRlcGlja2VyLmNvbXBvbmVudCc7XG5leHBvcnQgdHlwZSB7IERhdGVSYW5nZSwgUHJlc2V0Q29uZmlnLCBMb2NhbGVDb25maWcgfSBmcm9tICcuL2R1YWwtZGF0ZXBpY2tlci5jb21wb25lbnQnO1xuXG4vLyBEYXRlIEFkYXB0ZXIgU3lzdGVtXG5leHBvcnQgeyBEYXRlQWRhcHRlciwgREFURV9BREFQVEVSIH0gZnJvbSAnLi9kYXRlLWFkYXB0ZXInO1xuZXhwb3J0IHsgTmF0aXZlRGF0ZUFkYXB0ZXIgfSBmcm9tICcuL25hdGl2ZS1kYXRlLWFkYXB0ZXInO1xuIl19