@c80/ui 1.0.41 → 1.0.44

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,8 +1,9 @@
1
1
  export * from './table.types';
2
2
  export * from './table.component';
3
+ export * from './table.utils';
3
4
  export * from './table-data-converter.service';
4
5
  export * from './table-column-visibility.service';
5
6
  export * from './table-data-utils.service';
6
7
  export * from './table-selection.service';
7
8
  export * from './table-crud-state.service';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NyYy9saWIvdGFibGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RhYmxlLnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUtZGF0YS1jb252ZXJ0ZXIuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLWNvbHVtbi12aXNpYmlsaXR5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS1kYXRhLXV0aWxzLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS1zZWxlY3Rpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLWNydWQtc3RhdGUuc2VydmljZSc7XG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3VpL3NyYy9saWIvdGFibGUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3RhYmxlLnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS1kYXRhLWNvbnZlcnRlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUtY29sdW1uLXZpc2liaWxpdHkuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLWRhdGEtdXRpbHMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUtY3J1ZC1zdGF0ZS5zZXJ2aWNlJztcbiJdfQ==
@@ -1,5 +1,6 @@
1
1
  import { Injectable, inject } from '@angular/core';
2
2
  import { TableDataConverterService } from './table-data-converter.service';
3
+ import { TableDataUtilsService } from './table-data-utils.service';
3
4
  import * as i0 from "@angular/core";
4
5
  /**
5
6
  * Servicio para gestionar la lógica de visibilidad de columnas en tablas C80
@@ -11,6 +12,7 @@ import * as i0 from "@angular/core";
11
12
  */
12
13
  export class TableColumnVisibilityService {
13
14
  dataConverter = inject(TableDataConverterService);
15
+ dataUtils = inject(TableDataUtilsService);
14
16
  /**
15
17
  * Actualiza las keys de columnas visibles basándose en el estado actual
16
18
  * @param columns - Definiciones de columnas
@@ -25,125 +27,72 @@ export class TableColumnVisibilityService {
25
27
  }
26
28
  /**
27
29
  * Determina si una columna debe ser visible basándose en su configuración y datos
30
+ * Método unificado que maneja todos los casos de visibilidad
28
31
  * @param column - La definición de la columna
29
32
  * @param data - Datos actuales de la tabla
30
- * @param forceShowInCreation - Si es true, ignora hideIfAllValuesAreNull (usado en modo creación)
33
+ * @param options - Opciones de contexto (creación, edición, fila específica)
31
34
  * @returns true si la columna debe ser visible
32
35
  */
33
- isColumnVisible(column, data, forceShowInCreation = false) {
36
+ isColumnVisible(column, data, options = {}) {
34
37
  // PRIORIDAD 1: Si visible está explícitamente establecido en false, SIEMPRE ocultar
35
38
  if (column.visible === false) {
36
39
  return false;
37
40
  }
38
- // PRIORIDAD 2: Si hideIfAllValuesAreNull es true y todos los valores están vacíos, ocultar
39
- // EXCEPCIÓN: En modo creación, mostramos estas columnas para permitir entrada de datos
40
- if (column.hideIfAllValuesAreNull === true && !forceShowInCreation && this.areAllColumnValuesEmpty(column, data)) {
41
- return false;
42
- }
43
- // Por defecto: mostrar
44
- return true;
45
- }
46
- /**
47
- * Determina si una columna debe ser visible en los headers
48
- * @param column - La definición de la columna
49
- * @param data - Datos actuales de la tabla
50
- * @param creating - Si está en modo creación
51
- * @param editing - ID de fila en edición (null si no hay edición)
52
- * @returns true si el header debe ser visible
53
- */
54
- isColumnVisibleInHeader(column, data, creating, editing) {
55
- // PRIORIDAD 1: Si visible está explícitamente establecido en false, SIEMPRE ocultar
56
- if (column.visible === false) {
57
- return false;
58
- }
59
- // Si estamos en modo creación, mostrar columnas con hideIfAllValuesAreNull
60
- if (creating && column.hideIfAllValuesAreNull === true) {
41
+ // Si no tiene hideIfAllValuesAreNull, mostrar siempre
42
+ if (!column.hideIfAllValuesAreNull) {
61
43
  return true;
62
44
  }
63
- // Si hay una fila en modo edición y la columna tiene hideIfAllValuesAreNull
64
- if (editing !== null && column.hideIfAllValuesAreNull === true) {
65
- // Buscar la fila que se está editando
66
- const editingRow = data.find(row => row['id'] === editing);
67
- if (editingRow) {
68
- // Solo mostrar el header si la fila en edición tiene valor en esta columna
69
- const cellValue = this.getCellValue(editingRow, column.accessor);
45
+ // PRIORIDAD 2: Para columnas con hideIfAllValuesAreNull, ocultar si el valor es falsy (excepto 0)
46
+ // Esto aplica tanto en modo creación como edición
47
+ // CONTEXTO: Modo creación
48
+ if (options.creating) {
49
+ // En creación, verificar el valor de la fila en creación si existe
50
+ const creatingRow = options.row;
51
+ if (creatingRow) {
52
+ const cellValue = this.dataUtils.getCellValue(creatingRow, column.accessor);
70
53
  return !this.dataConverter.isValueEmpty(cellValue);
71
54
  }
72
- // Si no se encuentra la fila, no mostrar el header
55
+ // Si no hay fila, ocultar (valor vacío por defecto)
73
56
  return false;
74
57
  }
75
- // Si hideIfAllValuesAreNull es true y todos los valores están vacíos, ocultar
76
- if (column.hideIfAllValuesAreNull === true && this.areAllColumnValuesEmpty(column, data)) {
58
+ // CONTEXTO: Fila en edición
59
+ if (options.editing !== undefined && options.editing !== null) {
60
+ const editingRow = options.row ?? data.find(r => r['id'] === options.editing);
61
+ if (editingRow) {
62
+ const cellValue = this.dataUtils.getCellValue(editingRow, column.accessor);
63
+ return !this.dataConverter.isValueEmpty(cellValue);
64
+ }
77
65
  return false;
78
66
  }
79
- // Por defecto: mostrar
80
- return true;
67
+ // CONTEXTO: Vista normal - verificar si todos los valores están vacíos
68
+ return !this.areAllColumnValuesEmpty(column, data);
81
69
  }
82
70
  /**
83
- * Determina si una columna debe ser visible en una fila específica considerando el modo edición
84
- * @param column - La definición de la columna
85
- * @param row - La fila actual
86
- * @param data - Datos actuales de la tabla
87
- * @param editing - ID de fila en edición (null si no hay edición)
88
- * @returns true si la columna debe ser visible para esta fila
71
+ * Determina si una columna debe ser visible en los headers
72
+ * Wrapper para mantener compatibilidad con API existente
73
+ */
74
+ isColumnVisibleInHeader(column, data, creating, editing) {
75
+ return this.isColumnVisible(column, data, { creating, editing });
76
+ }
77
+ /**
78
+ * Determina si una columna debe ser visible en una fila específica
79
+ * Wrapper para mantener compatibilidad con API existente
89
80
  */
90
81
  isColumnVisibleForRow(column, row, data, editing) {
91
- // PRIORIDAD 1: Si visible está explícitamente establecido en false, SIEMPRE ocultar
92
- if (column.visible === false) {
93
- return false;
94
- }
95
- // PRIORIDAD 2: Si esta fila específica está en modo edición y la columna tiene hideIfAllValuesAreNull
96
- const isEditingThisRow = editing === row['id'];
97
- if (isEditingThisRow && column.hideIfAllValuesAreNull === true) {
98
- // En edición, solo mostrar si esta fila específica tiene valor en esta columna
99
- const cellValue = this.getCellValue(row, column.accessor);
100
- return !this.dataConverter.isValueEmpty(cellValue);
101
- }
102
- // PRIORIDAD 3: Si hideIfAllValuesAreNull es true y todos los valores están vacíos, ocultar
103
- if (column.hideIfAllValuesAreNull === true && this.areAllColumnValuesEmpty(column, data)) {
104
- return false;
105
- }
106
- // Por defecto: mostrar
107
- return true;
82
+ return this.isColumnVisible(column, data, { editing, row });
108
83
  }
109
84
  /**
110
85
  * Verifica si todos los valores de una columna están vacíos/nulos
111
- * @param column - La definición de la columna
112
- * @param data - Datos actuales de la tabla
113
- * @returns true si todos los valores están vacíos
114
86
  */
115
87
  areAllColumnValuesEmpty(column, data) {
116
88
  if (data.length === 0) {
117
- return true; // Si no hay datos, consideramos la columna como vacía
89
+ return true;
118
90
  }
119
91
  return data.every(row => {
120
- const value = this.getCellValue(row, column.accessor);
92
+ const value = this.dataUtils.getCellValue(row, column.accessor);
121
93
  return this.dataConverter.isValueEmpty(value);
122
94
  });
123
95
  }
124
- /**
125
- * Obtiene el valor de una celda usando el accessor, soportando notación de punto para propiedades anidadas
126
- * @param row - La fila de datos
127
- * @param accessor - El accessor de la columna
128
- * @returns El valor de la celda
129
- */
130
- getCellValue(row, accessor) {
131
- if (accessor.includes('.')) {
132
- return this.getNestedValue(row, accessor);
133
- }
134
- return row[accessor];
135
- }
136
- /**
137
- * Obtiene el valor de un objeto usando notación de punto (ej: 'task.name')
138
- * @param obj - Objeto del cual obtener el valor
139
- * @param accessor - Ruta de acceso usando notación de punto
140
- * @returns El valor anidado o undefined
141
- */
142
- getNestedValue(obj, accessor) {
143
- return accessor.split('.').reduce((current, key) => {
144
- return current && typeof current === 'object' ? current[key] : undefined;
145
- }, obj);
146
- }
147
96
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableColumnVisibilityService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
148
97
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableColumnVisibilityService, providedIn: 'root' });
149
98
  }
@@ -153,4 +102,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
153
102
  providedIn: 'root'
154
103
  }]
155
104
  }] });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLXZpc2liaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS1jb2x1bW4tdmlzaWJpbGl0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUUzRTs7Ozs7OztHQU9HO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUVwQixhQUFhLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFFbkU7Ozs7Ozs7T0FPRztJQUNILGlCQUFpQixDQUNiLE9BQXlCLEVBQ3pCLElBQVMsRUFDVCxRQUFpQixFQUNqQixPQUFrQjtRQUVsQixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ3hDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FDN0QsQ0FBQztRQUNGLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZUFBZSxDQUNYLE1BQXNCLEVBQ3RCLElBQVMsRUFDVCxtQkFBbUIsR0FBRyxLQUFLO1FBRTNCLG9GQUFvRjtRQUNwRixJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDM0IsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELDJGQUEyRjtRQUMzRix1RkFBdUY7UUFDdkYsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEtBQUssSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUks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S0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN0RCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssWUFBWSxDQUFvQyxHQUFNLEVBQUUsUUFBZ0I7UUFDNUUsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsT0FBUSxHQUErQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGNBQWMsQ0FBQyxHQUE0QixFQUFFLFFBQWdCO1FBQ2pFLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDL0MsT0FBTyxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBRSxPQUFtQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDMUcsQ0FBQyxFQUFFLEdBQWMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7d0dBbExRLDRCQUE0Qjs0R0FBNUIsNEJBQTRCLGNBRnpCLE1BQU07OzRGQUVULDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEM4MFRhYmxlQ29sRGVmLCBJRCB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgVGFibGVEYXRhQ29udmVydGVyU2VydmljZSB9IGZyb20gJy4vdGFibGUtZGF0YS1jb252ZXJ0ZXIuc2VydmljZSc7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBnZXN0aW9uYXIgbGEgbMOzZ2ljYSBkZSB2aXNpYmlsaWRhZCBkZSBjb2x1bW5hcyBlbiB0YWJsYXMgQzgwXG4gKlxuICogTWFuZWphIGxhcyByZWdsYXMgY29tcGxlamFzIGRlIHZpc2liaWxpZGFkIGJhc2FkYXMgZW46XG4gKiAtIENvbmZpZ3VyYWNpw7NuIGV4cGzDrWNpdGEgKHZpc2libGU6IGZhbHNlKVxuICogLSBPY3VsdGFjacOzbiBhdXRvbcOhdGljYSAoaGlkZUlmQWxsVmFsdWVzQXJlTnVsbClcbiAqIC0gRXN0YWRvIGRlIGNyZWFjacOzbiB5IGVkaWNpw7NuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb2x1bW5WaXNpYmlsaXR5U2VydmljZSB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGFDb252ZXJ0ZXIgPSBpbmplY3QoVGFibGVEYXRhQ29udmVydGVyU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBBY3R1YWxpemEgbGFzIGtleXMgZGUgY29sdW1uYXMgdmlzaWJsZXMgYmFzw6FuZG9zZSBlbiBlbCBlc3RhZG8gYWN0dWFsXG4gICAgICogQHBhcmFtIGNvbHVtbnMgLSBEZWZpbmljaW9uZXMgZGUgY29sdW1uYXNcbiAgICAgKiBAcGFyYW0gZGF0YSAtIERhdG9zIGFjdHVhbGVzIGRlIGxhIHRhYmxhXG4gICAgICogQHBhcmFtIGNyZWF0aW5nIC0gU2kgZXN0w6EgZW4gbW9kbyBjcmVhY2nDs25cbiAgICAgKiBAcGFyYW0gZWRpdGluZyAtIElEIGRlIGZpbGEgZW4gZWRpY2nDs24gKG51bGwgc2kgbm8gaGF5IGVkaWNpw7NuKVxuICAgICAqIEByZXR1cm5zIEFycmF5IGRlIGFjY2Vzc29ycyBkZSBjb2x1bW5hcyB2aXNpYmxlc1xuICAgICAqL1xuICAgIHVwZGF0ZVZpc2libGVLZXlzPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgICAgIGNvbHVtbnM6IEM4MFRhYmxlQ29sRGVmW10sXG4gICAgICAgIGRhdGE6IFRbXSxcbiAgICAgICAgY3JlYXRpbmc6IGJvb2xlYW4sXG4gICAgICAgIGVkaXRpbmc6IElEIHwgbnVsbFxuICAgICk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBjb2x1bW5zLmZpbHRlcihjb2wgPT5cbiAgICAgICAgICAgIHRoaXMuaXNDb2x1bW5WaXNpYmxlSW5IZWFkZXIoY29sLCBkYXRhLCBjcmVhdGluZywgZWRpdGluZylcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHZpc2libGVDb2x1bW5zLm1hcChjb2wgPT4gY29sLmFjY2Vzc29yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmEgc2kgdW5hIGNvbHVtbmEgZGViZSBzZXIgdmlzaWJsZSBiYXPDoW5kb3NlIGVuIHN1IGNvbmZpZ3VyYWNpw7NuIHkgZGF0b3NcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gTGEgZGVmaW5pY2nDs24gZGUgbGEgY29sdW1uYVxuICAgICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgYWN0dWFsZXMgZGUgbGEgdGFibGFcbiAgICAgKiBAcGFyYW0gZm9yY2VTaG93SW5DcmVhdGlvbiAtIFNpIGVzIHRydWUsIGlnbm9yYSBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsICh1c2FkbyBlbiBtb2RvIGNyZWFjacOzbilcbiAgICAgKiBAcmV0dXJucyB0cnVlIHNpIGxhIGNvbHVtbmEgZGViZSBzZXIgdmlzaWJsZVxuICAgICAqL1xuICAgIGlzQ29sdW1uVmlzaWJsZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBjb2x1bW46IEM4MFRhYmxlQ29sRGVmLFxuICAgICAgICBkYXRhOiBUW10sXG4gICAgICAgIGZvcmNlU2hvd0luQ3JlYXRpb24gPSBmYWxzZVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBQUklPUklEQUQgMTogU2kgdmlzaWJsZSBlc3TDoSBleHBsw61jaXRhbWVudGUgZXN0YWJsZWNpZG8gZW4gZmFsc2UsIFNJRU1QUkUgb2N1bHRhclxuICAgICAgICBpZiAoY29sdW1uLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQUklPUklEQUQgMjogU2kgaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCBlcyB0cnVlIHkgdG9kb3MgbG9zIHZhbG9yZXMgZXN0w6FuIHZhY8Otb3MsIG9jdWx0YXJcbiAgICAgICAgLy8gRVhDRVBDScOTTjogRW4gbW9kbyBjcmVhY2nDs24sIG1vc3RyYW1vcyBlc3RhcyBjb2x1bW5hcyBwYXJhIHBlcm1pdGlyIGVudHJhZGEgZGUgZGF0b3NcbiAgICAgICAgaWYgKGNvbHVtbi5oaWRlSWZBbGxWYWx1ZXNBcmVOdWxsID09PSB0cnVlICYmICFmb3JjZVNob3dJbkNyZWF0aW9uICYmIHRoaXMuYXJlQWxsQ29sdW1uVmFsdWVzRW1wdHkoY29sdW1uLCBkYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUG9yIGRlZmVjdG86IG1vc3RyYXJcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5hIHNpIHVuYSBjb2x1bW5hIGRlYmUgc2VyIHZpc2libGUgZW4gbG9zIGhlYWRlcnNcbiAgICAgKiBAcGFyYW0gY29sdW1uIC0gTGEgZGVmaW5pY2nDs24gZGUgbGEgY29sdW1uYVxuICAgICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgYWN0dWFsZXMgZGUgbGEgdGFibGFcbiAgICAgKiBAcGFyYW0gY3JlYXRpbmcgLSBTaSBlc3TDoSBlbiBtb2RvIGNyZWFjacOzblxuICAgICAqIEBwYXJhbSBlZGl0aW5nIC0gSUQgZGUgZmlsYSBlbiBlZGljacOzbiAobnVsbCBzaSBubyBoYXkgZWRpY2nDs24pXG4gICAgICogQHJldHVybnMgdHJ1ZSBzaSBlbCBoZWFkZXIgZGViZSBzZXIgdmlzaWJsZVxuICAgICAqL1xuICAgIGlzQ29sdW1uVmlzaWJsZUluSGVhZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgICAgIGNvbHVtbjogQzgwVGFibGVDb2xEZWYsXG4gICAgICAgIGRhdGE6IFRbXSxcbiAgICAgICAgY3JlYXRpbmc6IGJvb2xlYW4sXG4gICAgICAgIGVkaXRpbmc6IElEIHwgbnVsbFxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBQUklPUklEQUQgMTogU2kgdmlzaWJsZSBlc3TDoSBleHBsw61jaXRhbWVudGUgZXN0YWJsZWNpZG8gZW4gZmFsc2UsIFNJRU1QUkUgb2N1bHRhclxuICAgICAgICBpZiAoY29sdW1uLnZpc2libGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaSBlc3RhbW9zIGVuIG1vZG8gY3JlYWNpw7NuLCBtb3N0cmFyIGNvbHVtbmFzIGNvbiBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsXG4gICAgICAgIGlmIChjcmVhdGluZyAmJiBjb2x1bW4uaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaSBoYXkgdW5hIGZpbGEgZW4gbW9kbyBlZGljacOzbiB5IGxhIGNvbHVtbmEgdGllbmUgaGlkZUlmQWxsVmFsdWVzQXJlTnVsbFxuICAgICAgICBpZiAoZWRpdGluZyAhPT0gbnVsbCAmJiBjb2x1bW4uaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy8gQnVzY2FyIGxhIGZpbGEgcXVlIHNlIGVzdMOhIGVkaXRhbmRvXG4gICAgICAgICAgICBjb25zdCBlZGl0aW5nUm93ID0gZGF0YS5maW5kKHJvdyA9PiByb3dbJ2lkJ10gPT09IGVkaXRpbmcpO1xuXG4gICAgICAgICAgICBpZiAoZWRpdGluZ1Jvdykge1xuICAgICAgICAgICAgICAgIC8vIFNvbG8gbW9zdHJhciBlbCBoZWFkZXIgc2kgbGEgZmlsYSBlbiBlZGljacOzbiB0aWVuZSB2YWxvciBlbiBlc3RhIGNvbHVtbmFcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShlZGl0aW5nUm93LCBjb2x1bW4uYWNjZXNzb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5kYXRhQ29udmVydGVyLmlzVmFsdWVFbXB0eShjZWxsVmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTaSBubyBzZSBlbmN1ZW50cmEgbGEgZmlsYSwgbm8gbW9zdHJhciBlbCBoZWFkZXJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNpIGhpZGVJZkFsbFZhbHVlc0FyZU51bGwgZXMgdHJ1ZSB5IHRvZG9zIGxvcyB2YWxvcmVzIGVzdMOhbiB2YWPDrW9zLCBvY3VsdGFyXG4gICAgICAgIGlmIChjb2x1bW4uaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCA9PT0gdHJ1ZSAmJiB0aGlzLmFyZUFsbENvbHVtblZhbHVlc0VtcHR5KGNvbHVtbiwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBvciBkZWZlY3RvOiBtb3N0cmFyXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERldGVybWluYSBzaSB1bmEgY29sdW1uYSBkZWJlIHNlciB2aXNpYmxlIGVuIHVuYSBmaWxhIGVzcGVjw61maWNhIGNvbnNpZGVyYW5kbyBlbCBtb2RvIGVkaWNpw7NuXG4gICAgICogQHBhcmFtIGNvbHVtbiAtIExhIGRlZmluaWNpw7NuIGRlIGxhIGNvbHVtbmFcbiAgICAgKiBAcGFyYW0gcm93IC0gTGEgZmlsYSBhY3R1YWxcbiAgICAgKiBAcGFyYW0gZGF0YSAtIERhdG9zIGFjdHVhbGVzIGRlIGxhIHRhYmxhXG4gICAgICogQHBhcmFtIGVkaXRpbmcgLSBJRCBkZSBmaWxhIGVuIGVkaWNpw7NuIChudWxsIHNpIG5vIGhheSBlZGljacOzbilcbiAgICAgKiBAcmV0dXJucyB0cnVlIHNpIGxhIGNvbHVtbmEgZGViZSBzZXIgdmlzaWJsZSBwYXJhIGVzdGEgZmlsYVxuICAgICAqL1xuICAgIGlzQ29sdW1uVmlzaWJsZUZvclJvdzxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBjb2x1bW46IEM4MFRhYmxlQ29sRGVmLFxuICAgICAgICByb3c6IFQsXG4gICAgICAgIGRhdGE6IFRbXSxcbiAgICAgICAgZWRpdGluZzogSUQgfCBudWxsXG4gICAgKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIFBSSU9SSURBRCAxOiBTaSB2aXNpYmxlIGVzdMOhIGV4cGzDrWNpdGFtZW50ZSBlc3RhYmxlY2lkbyBlbiBmYWxzZSwgU0lFTVBSRSBvY3VsdGFyXG4gICAgICAgIGlmIChjb2x1bW4udmlzaWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBSSU9SSURBRCAyOiBTaSBlc3RhIGZpbGEgZXNwZWPDrWZpY2EgZXN0w6EgZW4gbW9kbyBlZGljacOzbiB5IGxhIGNvbHVtbmEgdGllbmUgaGlkZUlmQWxsVmFsdWVzQXJlTnVsbFxuICAgICAgICBjb25zdCBpc0VkaXRpbmdUaGlzUm93ID0gZWRpdGluZyA9PT0gcm93WydpZCddO1xuICAgICAgICBpZiAoaXNFZGl0aW5nVGhpc1JvdyAmJiBjb2x1bW4uaGlkZUlmQWxsVmFsdWVzQXJlTnVsbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy8gRW4gZWRpY2nDs24sIHNvbG8gbW9zdHJhciBzaSBlc3RhIGZpbGEgZXNwZWPDrWZpY2EgdGllbmUgdmFsb3IgZW4gZXN0YSBjb2x1bW5hXG4gICAgICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShyb3csIGNvbHVtbi5hY2Nlc3Nvcik7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuZGF0YUNvbnZlcnRlci5pc1ZhbHVlRW1wdHkoY2VsbFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBSSU9SSURBRCAzOiBTaSBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsIGVzIHRydWUgeSB0b2RvcyBsb3MgdmFsb3JlcyBlc3TDoW4gdmFjw61vcywgb2N1bHRhclxuICAgICAgICBpZiAoY29sdW1uLmhpZGVJZkFsbFZhbHVlc0FyZU51bGwgPT09IHRydWUgJiYgdGhpcy5hcmVBbGxDb2x1bW5WYWx1ZXNFbXB0eShjb2x1bW4sIGRhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQb3IgZGVmZWN0bzogbW9zdHJhclxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWZXJpZmljYSBzaSB0b2RvcyBsb3MgdmFsb3JlcyBkZSB1bmEgY29sdW1uYSBlc3TDoW4gdmFjw61vcy9udWxvc1xuICAgICAqIEBwYXJhbSBjb2x1bW4gLSBMYSBkZWZpbmljacOzbiBkZSBsYSBjb2x1bW5hXG4gICAgICogQHBhcmFtIGRhdGEgLSBEYXRvcyBhY3R1YWxlcyBkZSBsYSB0YWJsYVxuICAgICAqIEByZXR1cm5zIHRydWUgc2kgdG9kb3MgbG9zIHZhbG9yZXMgZXN0w6FuIHZhY8Otb3NcbiAgICAgKi9cbiAgICBhcmVBbGxDb2x1bW5WYWx1ZXNFbXB0eTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBjb2x1bW46IEM4MFRhYmxlQ29sRGVmLFxuICAgICAgICBkYXRhOiBUW11cbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gU2kgbm8gaGF5IGRhdG9zLCBjb25zaWRlcmFtb3MgbGEgY29sdW1uYSBjb21vIHZhY8OtYVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGEuZXZlcnkocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRDZWxsVmFsdWUocm93LCBjb2x1bW4uYWNjZXNzb3IpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUNvbnZlcnRlci5pc1ZhbHVlRW1wdHkodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPYnRpZW5lIGVsIHZhbG9yIGRlIHVuYSBjZWxkYSB1c2FuZG8gZWwgYWNjZXNzb3IsIHNvcG9ydGFuZG8gbm90YWNpw7NuIGRlIHB1bnRvIHBhcmEgcHJvcGllZGFkZXMgYW5pZGFkYXNcbiAgICAgKiBAcGFyYW0gcm93IC0gTGEgZmlsYSBkZSBkYXRvc1xuICAgICAqIEBwYXJhbSBhY2Nlc3NvciAtIEVsIGFjY2Vzc29yIGRlIGxhIGNvbHVtbmFcbiAgICAgKiBAcmV0dXJucyBFbCB2YWxvciBkZSBsYSBjZWxkYVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q2VsbFZhbHVlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ocm93OiBULCBhY2Nlc3Nvcjogc3RyaW5nKTogdW5rbm93biB7XG4gICAgICAgIGlmIChhY2Nlc3Nvci5pbmNsdWRlcygnLicpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXROZXN0ZWRWYWx1ZShyb3csIGFjY2Vzc29yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHJvdyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbYWNjZXNzb3JdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9idGllbmUgZWwgdmFsb3IgZGUgdW4gb2JqZXRvIHVzYW5kbyBub3RhY2nDs24gZGUgcHVudG8gKGVqOiAndGFzay5uYW1lJylcbiAgICAgKiBAcGFyYW0gb2JqIC0gT2JqZXRvIGRlbCBjdWFsIG9idGVuZXIgZWwgdmFsb3JcbiAgICAgKiBAcGFyYW0gYWNjZXNzb3IgLSBSdXRhIGRlIGFjY2VzbyB1c2FuZG8gbm90YWNpw7NuIGRlIHB1bnRvXG4gICAgICogQHJldHVybnMgRWwgdmFsb3IgYW5pZGFkbyBvIHVuZGVmaW5lZFxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TmVzdGVkVmFsdWUob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYWNjZXNzb3I6IHN0cmluZyk6IHVua25vd24ge1xuICAgICAgICByZXR1cm4gYWNjZXNzb3Iuc3BsaXQoJy4nKS5yZWR1Y2UoKGN1cnJlbnQsIGtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQgJiYgdHlwZW9mIGN1cnJlbnQgPT09ICdvYmplY3QnID8gKGN1cnJlbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sIG9iaiBhcyB1bmtub3duKTtcbiAgICB9XG59XG4iXX0=
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLXZpc2liaWxpdHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS1jb2x1bW4tdmlzaWJpbGl0eS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUVuRTs7Ozs7OztHQU9HO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUV0QixhQUFhLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDbEQsU0FBUyxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRTNEOzs7Ozs7O09BT0c7SUFDSCxpQkFBaUIsQ0FDZixPQUF5QixFQUN6QixJQUFTLEVBQ1QsUUFBaUIsRUFDakIsT0FBc0I7UUFFdEIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUMxQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQzNELENBQUM7UUFDRixPQUFPLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxlQUFlLENBQ2IsTUFBc0IsRUFDdEIsSUFBUyxFQUNULFVBS0ksRUFBRTtRQUVOLG9GQUFvRjtRQUNwRixJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDN0IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxrR0FBa0c7UUFDbEcsa0RBQWtEO1FBRWxELDBCQUEwQjtRQUMxQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixtRUFBbUU7WUFDbkUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNoQyxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1RSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUNELG9EQUFvRDtZQUNwRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCw0QkFBNEI7UUFDNUIsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzlELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUUsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzRSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUVELHVFQUF1RTtRQUN2RSxPQUFPLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsdUJBQXVCLENBQ3JCLE1BQXNCLEVBQ3RCLElBQVMsRUFDVCxRQUFpQixFQUNqQixPQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7O09BR0c7SUFDSCxxQkFBcUIsQ0FDbkIsTUFBc0IsRUFDdEIsR0FBTSxFQUNOLElBQVMsRUFDVCxPQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QixDQUM3QixNQUFzQixFQUN0QixJQUFTO1FBRVQsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQTNIVSw0QkFBNEI7NEdBQTVCLDRCQUE0QixjQUYzQixNQUFNOzs0RkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDODBUYWJsZUNvbERlZiB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgVGFibGVEYXRhQ29udmVydGVyU2VydmljZSB9IGZyb20gJy4vdGFibGUtZGF0YS1jb252ZXJ0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZURhdGFVdGlsc1NlcnZpY2UgfSBmcm9tICcuL3RhYmxlLWRhdGEtdXRpbHMuc2VydmljZSc7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBnZXN0aW9uYXIgbGEgbMOzZ2ljYSBkZSB2aXNpYmlsaWRhZCBkZSBjb2x1bW5hcyBlbiB0YWJsYXMgQzgwXG4gKlxuICogTWFuZWphIGxhcyByZWdsYXMgY29tcGxlamFzIGRlIHZpc2liaWxpZGFkIGJhc2FkYXMgZW46XG4gKiAtIENvbmZpZ3VyYWNpw7NuIGV4cGzDrWNpdGEgKHZpc2libGU6IGZhbHNlKVxuICogLSBPY3VsdGFjacOzbiBhdXRvbcOhdGljYSAoaGlkZUlmQWxsVmFsdWVzQXJlTnVsbClcbiAqIC0gRXN0YWRvIGRlIGNyZWFjacOzbiB5IGVkaWNpw7NuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uVmlzaWJpbGl0eVNlcnZpY2Uge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YUNvbnZlcnRlciA9IGluamVjdChUYWJsZURhdGFDb252ZXJ0ZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhVXRpbHMgPSBpbmplY3QoVGFibGVEYXRhVXRpbHNTZXJ2aWNlKTtcblxuICAvKipcbiAgICogQWN0dWFsaXphIGxhcyBrZXlzIGRlIGNvbHVtbmFzIHZpc2libGVzIGJhc8OhbmRvc2UgZW4gZWwgZXN0YWRvIGFjdHVhbFxuICAgKiBAcGFyYW0gY29sdW1ucyAtIERlZmluaWNpb25lcyBkZSBjb2x1bW5hc1xuICAgKiBAcGFyYW0gZGF0YSAtIERhdG9zIGFjdHVhbGVzIGRlIGxhIHRhYmxhXG4gICAqIEBwYXJhbSBjcmVhdGluZyAtIFNpIGVzdMOhIGVuIG1vZG8gY3JlYWNpw7NuXG4gICAqIEBwYXJhbSBlZGl0aW5nIC0gSUQgZGUgZmlsYSBlbiBlZGljacOzbiAobnVsbCBzaSBubyBoYXkgZWRpY2nDs24pXG4gICAqIEByZXR1cm5zIEFycmF5IGRlIGFjY2Vzc29ycyBkZSBjb2x1bW5hcyB2aXNpYmxlc1xuICAgKi9cbiAgdXBkYXRlVmlzaWJsZUtleXM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICBjb2x1bW5zOiBDODBUYWJsZUNvbERlZltdLFxuICAgIGRhdGE6IFRbXSxcbiAgICBjcmVhdGluZzogYm9vbGVhbixcbiAgICBlZGl0aW5nOiBzdHJpbmcgfCBudWxsXG4gICk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbCA9PlxuICAgICAgdGhpcy5pc0NvbHVtblZpc2libGVJbkhlYWRlcihjb2wsIGRhdGEsIGNyZWF0aW5nLCBlZGl0aW5nKVxuICAgICk7XG4gICAgcmV0dXJuIHZpc2libGVDb2x1bW5zLm1hcChjb2wgPT4gY29sLmFjY2Vzc29yKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmEgc2kgdW5hIGNvbHVtbmEgZGViZSBzZXIgdmlzaWJsZSBiYXPDoW5kb3NlIGVuIHN1IGNvbmZpZ3VyYWNpw7NuIHkgZGF0b3NcbiAgICogTcOpdG9kbyB1bmlmaWNhZG8gcXVlIG1hbmVqYSB0b2RvcyBsb3MgY2Fzb3MgZGUgdmlzaWJpbGlkYWRcbiAgICogQHBhcmFtIGNvbHVtbiAtIExhIGRlZmluaWNpw7NuIGRlIGxhIGNvbHVtbmFcbiAgICogQHBhcmFtIGRhdGEgLSBEYXRvcyBhY3R1YWxlcyBkZSBsYSB0YWJsYVxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wY2lvbmVzIGRlIGNvbnRleHRvIChjcmVhY2nDs24sIGVkaWNpw7NuLCBmaWxhIGVzcGVjw61maWNhKVxuICAgKiBAcmV0dXJucyB0cnVlIHNpIGxhIGNvbHVtbmEgZGViZSBzZXIgdmlzaWJsZVxuICAgKi9cbiAgaXNDb2x1bW5WaXNpYmxlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgY29sdW1uOiBDODBUYWJsZUNvbERlZixcbiAgICBkYXRhOiBUW10sXG4gICAgb3B0aW9uczoge1xuICAgICAgZm9yY2VTaG93SW5DcmVhdGlvbj86IGJvb2xlYW47XG4gICAgICBjcmVhdGluZz86IGJvb2xlYW47XG4gICAgICBlZGl0aW5nPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIHJvdz86IFQ7XG4gICAgfSA9IHt9XG4gICk6IGJvb2xlYW4ge1xuICAgIC8vIFBSSU9SSURBRCAxOiBTaSB2aXNpYmxlIGVzdMOhIGV4cGzDrWNpdGFtZW50ZSBlc3RhYmxlY2lkbyBlbiBmYWxzZSwgU0lFTVBSRSBvY3VsdGFyXG4gICAgaWYgKGNvbHVtbi52aXNpYmxlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFNpIG5vIHRpZW5lIGhpZGVJZkFsbFZhbHVlc0FyZU51bGwsIG1vc3RyYXIgc2llbXByZVxuICAgIGlmICghY29sdW1uLmhpZGVJZkFsbFZhbHVlc0FyZU51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIFBSSU9SSURBRCAyOiBQYXJhIGNvbHVtbmFzIGNvbiBoaWRlSWZBbGxWYWx1ZXNBcmVOdWxsLCBvY3VsdGFyIHNpIGVsIHZhbG9yIGVzIGZhbHN5IChleGNlcHRvIDApXG4gICAgLy8gRXN0byBhcGxpY2EgdGFudG8gZW4gbW9kbyBjcmVhY2nDs24gY29tbyBlZGljacOzblxuXG4gICAgLy8gQ09OVEVYVE86IE1vZG8gY3JlYWNpw7NuXG4gICAgaWYgKG9wdGlvbnMuY3JlYXRpbmcpIHtcbiAgICAgIC8vIEVuIGNyZWFjacOzbiwgdmVyaWZpY2FyIGVsIHZhbG9yIGRlIGxhIGZpbGEgZW4gY3JlYWNpw7NuIHNpIGV4aXN0ZVxuICAgICAgY29uc3QgY3JlYXRpbmdSb3cgPSBvcHRpb25zLnJvdztcbiAgICAgIGlmIChjcmVhdGluZ1Jvdykge1xuICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSB0aGlzLmRhdGFVdGlscy5nZXRDZWxsVmFsdWUoY3JlYXRpbmdSb3csIGNvbHVtbi5hY2Nlc3Nvcik7XG4gICAgICAgIHJldHVybiAhdGhpcy5kYXRhQ29udmVydGVyLmlzVmFsdWVFbXB0eShjZWxsVmFsdWUpO1xuICAgICAgfVxuICAgICAgLy8gU2kgbm8gaGF5IGZpbGEsIG9jdWx0YXIgKHZhbG9yIHZhY8OtbyBwb3IgZGVmZWN0bylcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBDT05URVhUTzogRmlsYSBlbiBlZGljacOzblxuICAgIGlmIChvcHRpb25zLmVkaXRpbmcgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmVkaXRpbmcgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGVkaXRpbmdSb3cgPSBvcHRpb25zLnJvdyA/PyBkYXRhLmZpbmQociA9PiByWydpZCddID09PSBvcHRpb25zLmVkaXRpbmcpO1xuICAgICAgaWYgKGVkaXRpbmdSb3cpIHtcbiAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gdGhpcy5kYXRhVXRpbHMuZ2V0Q2VsbFZhbHVlKGVkaXRpbmdSb3csIGNvbHVtbi5hY2Nlc3Nvcik7XG4gICAgICAgIHJldHVybiAhdGhpcy5kYXRhQ29udmVydGVyLmlzVmFsdWVFbXB0eShjZWxsVmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIENPTlRFWFRPOiBWaXN0YSBub3JtYWwgLSB2ZXJpZmljYXIgc2kgdG9kb3MgbG9zIHZhbG9yZXMgZXN0w6FuIHZhY8Otb3NcbiAgICByZXR1cm4gIXRoaXMuYXJlQWxsQ29sdW1uVmFsdWVzRW1wdHkoY29sdW1uLCBkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmEgc2kgdW5hIGNvbHVtbmEgZGViZSBzZXIgdmlzaWJsZSBlbiBsb3MgaGVhZGVyc1xuICAgKiBXcmFwcGVyIHBhcmEgbWFudGVuZXIgY29tcGF0aWJpbGlkYWQgY29uIEFQSSBleGlzdGVudGVcbiAgICovXG4gIGlzQ29sdW1uVmlzaWJsZUluSGVhZGVyPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgY29sdW1uOiBDODBUYWJsZUNvbERlZixcbiAgICBkYXRhOiBUW10sXG4gICAgY3JlYXRpbmc6IGJvb2xlYW4sXG4gICAgZWRpdGluZzogc3RyaW5nIHwgbnVsbFxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0NvbHVtblZpc2libGUoY29sdW1uLCBkYXRhLCB7IGNyZWF0aW5nLCBlZGl0aW5nIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluYSBzaSB1bmEgY29sdW1uYSBkZWJlIHNlciB2aXNpYmxlIGVuIHVuYSBmaWxhIGVzcGVjw61maWNhXG4gICAqIFdyYXBwZXIgcGFyYSBtYW50ZW5lciBjb21wYXRpYmlsaWRhZCBjb24gQVBJIGV4aXN0ZW50ZVxuICAgKi9cbiAgaXNDb2x1bW5WaXNpYmxlRm9yUm93PFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgY29sdW1uOiBDODBUYWJsZUNvbERlZixcbiAgICByb3c6IFQsXG4gICAgZGF0YTogVFtdLFxuICAgIGVkaXRpbmc6IHN0cmluZyB8IG51bGxcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2x1bW5WaXNpYmxlKGNvbHVtbiwgZGF0YSwgeyBlZGl0aW5nLCByb3cgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgdG9kb3MgbG9zIHZhbG9yZXMgZGUgdW5hIGNvbHVtbmEgZXN0w6FuIHZhY8Otb3MvbnVsb3NcbiAgICovXG4gIHByaXZhdGUgYXJlQWxsQ29sdW1uVmFsdWVzRW1wdHk8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICBjb2x1bW46IEM4MFRhYmxlQ29sRGVmLFxuICAgIGRhdGE6IFRbXVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLmV2ZXJ5KHJvdyA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YVV0aWxzLmdldENlbGxWYWx1ZShyb3csIGNvbHVtbi5hY2Nlc3Nvcik7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhQ29udmVydGVyLmlzVmFsdWVFbXB0eSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import { Injectable, signal, inject } from '@angular/core';
2
2
  import { TableColumnVisibilityService } from './table-column-visibility.service';
3
- import { TableDataConverterService } from './table-data-converter.service';
3
+ import { TableDataUtilsService } from './table-data-utils.service';
4
4
  import * as i0 from "@angular/core";
5
5
  /**
6
6
  * Servicio para gestionar el estado CRUD (Crear, Leer, Actualizar, Eliminar) en tablas C80
@@ -9,28 +9,16 @@ import * as i0 from "@angular/core";
9
9
  * - Estado de creación y edición
10
10
  * - Gestión de datos temporales (newRow, editRow)
11
11
  * - Aplicación de valores dinámicos
12
- * - Validación y conversión de datos antes de emisión de eventos
12
+ * - Validación y conversión de datos
13
13
  */
14
14
  export class TableCrudStateService {
15
15
  visibilityService = inject(TableColumnVisibilityService);
16
- dataConverter = inject(TableDataConverterService);
16
+ dataUtils = inject(TableDataUtilsService);
17
17
  /**
18
18
  * Filtra columnas visibles y editables
19
19
  */
20
20
  getEditableColumns(columns, data, includeHiddenIfNull) {
21
- return columns.filter(col => this.visibilityService.isColumnVisible(col, data, includeHiddenIfNull) && !col.readOnly);
22
- }
23
- /**
24
- * Convierte valores de row según definición de columnas
25
- */
26
- convertRowValues(row, columns, data) {
27
- return columns.reduce((acc, col) => {
28
- const sampleValue = data.length > 0
29
- ? this.visibilityService['getCellValue'](data[0], col.accessor)
30
- : undefined;
31
- acc[col.accessor] = this.dataConverter.convertCellValue(row[col.accessor], col, sampleValue);
32
- return acc;
33
- }, {});
21
+ return columns.filter(col => this.visibilityService.isColumnVisible(col, data, { forceShowInCreation: includeHiddenIfNull }) && !col.readOnly);
34
22
  }
35
23
  /**
36
24
  * Inicializa row para creación con valores por defecto
@@ -49,7 +37,7 @@ export class TableCrudStateService {
49
37
  initializeEditRow(row, columns, data) {
50
38
  const edit = {};
51
39
  for (const col of this.getEditableColumns(columns, data, true)) {
52
- const value = this.visibilityService['getCellValue'](row, col.accessor);
40
+ const value = this.dataUtils.getCellValue(row, col.accessor);
53
41
  edit[col.accessor] = value;
54
42
  }
55
43
  return edit;
@@ -68,111 +56,52 @@ export class TableCrudStateService {
68
56
  newRow: newRow.asReadonly(),
69
57
  editing: editing.asReadonly(),
70
58
  editRow: editRow.asReadonly(),
71
- startCreate: this.createStartCreateFn(creating, newRow),
72
- cancelCreate: this.createCancelCreateFn(creating, newRow),
73
- updateNewRow: this.createUpdateNewRowFn(newRow),
74
- saveCreate: this.createSaveCreateFn(newRow, creating),
75
- startEdit: this.createStartEditFn(editing, editRow),
76
- cancelEdit: this.createCancelEditFn(editing, editRow),
77
- updateEditRow: this.createUpdateEditRowFn(editRow),
78
- saveEdit: this.createSaveEditFn(editRow, editing),
79
- applyInputValues: this.createApplyInputValuesFn(creating, newRow, editing, editRow),
59
+ startCreate: (columns, data) => this.startCreate(creating, newRow, columns, data),
60
+ cancelCreate: () => this.cancelCreate(creating, newRow),
61
+ updateNewRow: (key, value) => this.updateRow(newRow, key, value),
62
+ startEdit: (row, columns, data) => this.startEdit({ editing, editRow }, row, columns, data),
63
+ cancelEdit: () => this.cancelEdit(editing, editRow),
64
+ updateEditRow: (key, value) => this.updateRow(editRow, key, value),
65
+ applyInputValues: (partialValues) => this.applyInputValues({ creating, newRow, editing, editRow }, partialValues),
80
66
  };
81
67
  }
82
- createStartCreateFn(creating, newRow) {
83
- return (columns, data) => {
84
- creating.set(true);
85
- newRow.set(this.initializeNewRow(columns, data));
86
- };
68
+ startCreate(creating, newRow, columns, data) {
69
+ creating.set(true);
70
+ newRow.set(this.initializeNewRow(columns, data));
87
71
  }
88
- createCancelCreateFn(creating, newRow) {
89
- return () => {
90
- creating.set(false);
91
- newRow.set(null);
92
- };
72
+ cancelCreate(creating, newRow) {
73
+ creating.set(false);
74
+ newRow.set(null);
93
75
  }
94
- createUpdateNewRowFn(newRow) {
95
- return (key, value) => {
96
- const current = newRow();
97
- if (!current)
98
- return;
99
- newRow.set({ ...current, [key]: value });
100
- };
76
+ updateRow(rowSignal, key, value) {
77
+ const current = rowSignal();
78
+ if (!current)
79
+ return;
80
+ rowSignal.set({ ...current, [key]: value });
101
81
  }
102
- createSaveCreateFn(newRow, creating) {
103
- return (columns, data, createEmitter) => {
104
- const row = newRow();
105
- if (!row)
106
- return;
107
- const visibleColumns = this.getEditableColumns(columns, data, true);
108
- const converted = this.convertRowValues(row, visibleColumns, data);
109
- createEmitter.emit({
110
- row: converted,
111
- done: (success) => {
112
- if (success) {
113
- creating.set(false);
114
- newRow.set(null);
115
- }
116
- },
117
- });
118
- };
82
+ startEdit(signals, row, columns, data) {
83
+ signals.editing.set(row['id']);
84
+ signals.editRow.set(this.initializeEditRow(row, columns, data));
119
85
  }
120
- createStartEditFn(editing, editRow) {
121
- return (row, columns, data) => {
122
- editing.set(row['id']);
123
- editRow.set(this.initializeEditRow(row, columns, data));
124
- };
86
+ cancelEdit(editing, editRow) {
87
+ editing.set(null);
88
+ editRow.set(null);
125
89
  }
126
- createCancelEditFn(editing, editRow) {
127
- return () => {
128
- editing.set(null);
129
- editRow.set(null);
130
- };
131
- }
132
- createUpdateEditRowFn(editRow) {
133
- return (key, value) => {
134
- const current = editRow();
135
- if (!current)
136
- return;
137
- editRow.set({ ...current, [key]: value });
138
- };
139
- }
140
- createSaveEditFn(editRow, editing) {
141
- return (rowId, columns, data, updateEmitter) => {
142
- const currentEditRow = editRow();
143
- if (!currentEditRow)
144
- return;
145
- const visibleColumns = this.getEditableColumns(columns, data, true);
146
- const converted = this.convertRowValues(currentEditRow, visibleColumns, data);
147
- updateEmitter.emit({
148
- id: rowId,
149
- changes: converted,
150
- done: (success) => {
151
- if (success) {
152
- editing.set(null);
153
- editRow.set(null);
154
- }
155
- },
156
- });
157
- };
158
- }
159
- createApplyInputValuesFn(creating, newRow, editing, editRow) {
160
- return (partialValues) => {
161
- if (!creating() && editing() === null)
162
- return;
163
- if (creating()) {
164
- const currentRow = newRow();
165
- if (currentRow) {
166
- newRow.set({ ...currentRow, ...partialValues });
167
- }
90
+ applyInputValues(signals, partialValues) {
91
+ if (!signals.creating() && signals.editing() === null)
92
+ return;
93
+ if (signals.creating()) {
94
+ const currentRow = signals.newRow();
95
+ if (currentRow) {
96
+ signals.newRow.set({ ...currentRow, ...partialValues });
168
97
  }
169
- else {
170
- const currentEditRow = editRow();
171
- if (currentEditRow) {
172
- editRow.set({ ...currentEditRow, ...partialValues });
173
- }
98
+ }
99
+ else {
100
+ const currentEditRow = signals.editRow();
101
+ if (currentEditRow) {
102
+ signals.editRow.set({ ...currentEditRow, ...partialValues });
174
103
  }
175
- };
104
+ }
176
105
  }
177
106
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableCrudStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
178
107
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableCrudStateService, providedIn: 'root' });
@@ -183,4 +112,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
183
112
  providedIn: 'root'
184
113
  }]
185
114
  }] });
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY3J1ZC1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy91aS9zcmMvbGliL3RhYmxlL3RhYmxlLWNydWQtc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUUzRTs7Ozs7Ozs7R0FRRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUFFYixpQkFBaUIsR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUN6RCxhQUFhLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFFbkU7O09BRUc7SUFDSyxrQkFBa0IsQ0FDdEIsT0FBeUIsRUFDekIsSUFBUyxFQUNULG1CQUE0QjtRQUU1QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQ2pCLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUNqRyxDQUFDO0lBQ04sQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQ3BCLEdBQWUsRUFDZixPQUF5QixFQUN6QixJQUFTO1FBRVQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQy9CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxD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QUFPO1lBRTlDLElBQUksUUFBUSxFQUFFLEVBQUUsQ0FBQztnQkFDYixNQUFNLFVBQVUsR0FBRyxNQUFNLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxVQUFVLEVBQUUsQ0FBQztvQkFDYixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxVQUFVLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRCxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLE1BQU0sY0FBYyxHQUFHLE9BQU8sRUFBRSxDQUFDO2dCQUNqQyxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQztJQUNOLENBQUM7d0dBdE9RLHFCQUFxQjs0R0FBckIscUJBQXFCLGNBRmxCLE1BQU07OzRGQUVULHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBzaWduYWwsIEV2ZW50RW1pdHRlciwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDODBUYWJsZUNvbERlZiwgSUQgfSBmcm9tICcuL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuL3RhYmxlLWNvbHVtbi12aXNpYmlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFibGVEYXRhQ29udmVydGVyU2VydmljZSB9IGZyb20gJy4vdGFibGUtZGF0YS1jb252ZXJ0ZXIuc2VydmljZSc7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBnZXN0aW9uYXIgZWwgZXN0YWRvIENSVUQgKENyZWFyLCBMZWVyLCBBY3R1YWxpemFyLCBFbGltaW5hcikgZW4gdGFibGFzIEM4MFxuICpcbiAqIE1hbmVqYTpcbiAqIC0gRXN0YWRvIGRlIGNyZWFjacOzbiB5IGVkaWNpw7NuXG4gKiAtIEdlc3Rpw7NuIGRlIGRhdG9zIHRlbXBvcmFsZXMgKG5ld1JvdywgZWRpdFJvdylcbiAqIC0gQXBsaWNhY2nDs24gZGUgdmFsb3JlcyBkaW7DoW1pY29zXG4gKiAtIFZhbGlkYWNpw7NuIHkgY29udmVyc2nDs24gZGUgZGF0b3MgYW50ZXMgZGUgZW1pc2nDs24gZGUgZXZlbnRvc1xuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ3J1ZFN0YXRlU2VydmljZSB7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpc2liaWxpdHlTZXJ2aWNlID0gaW5qZWN0KFRhYmxlQ29sdW1uVmlzaWJpbGl0eVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YUNvbnZlcnRlciA9IGluamVjdChUYWJsZURhdGFDb252ZXJ0ZXJTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRyYSBjb2x1bW5hcyB2aXNpYmxlcyB5IGVkaXRhYmxlc1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RWRpdGFibGVDb2x1bW5zPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgICAgIGNvbHVtbnM6IEM4MFRhYmxlQ29sRGVmW10sXG4gICAgICAgIGRhdGE6IFRbXSxcbiAgICAgICAgaW5jbHVkZUhpZGRlbklmTnVsbDogYm9vbGVhblxuICAgICk6IEM4MFRhYmxlQ29sRGVmW10ge1xuICAgICAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoXG4gICAgICAgICAgICBjb2wgPT4gdGhpcy52aXNpYmlsaXR5U2VydmljZS5pc0NvbHVtblZpc2libGUoY29sLCBkYXRhLCBpbmNsdWRlSGlkZGVuSWZOdWxsKSAmJiAhY29sLnJlYWRPbmx5XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmllcnRlIHZhbG9yZXMgZGUgcm93IHNlZ8O6biBkZWZpbmljacOzbiBkZSBjb2x1bW5hc1xuICAgICAqL1xuICAgIHByaXZhdGUgY29udmVydFJvd1ZhbHVlczxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICByb3c6IFBhcnRpYWw8VD4sXG4gICAgICAgIGNvbHVtbnM6IEM4MFRhYmxlQ29sRGVmW10sXG4gICAgICAgIGRhdGE6IFRbXVxuICAgICk6IFBhcnRpYWw8VD4ge1xuICAgICAgICByZXR1cm4gY29sdW1ucy5yZWR1Y2UoKGFjYywgY29sKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzYW1wbGVWYWx1ZSA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gdGhpcy52aXNpYmlsaXR5U2VydmljZVsnZ2V0Q2VsbFZhbHVlJ10oZGF0YVswXSwgY29sLmFjY2Vzc29yKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgYWNjW2NvbC5hY2Nlc3Nvcl0gPSB0aGlzLmRhdGFDb252ZXJ0ZXIuY29udmVydENlbGxWYWx1ZShyb3dbY29sLmFjY2Vzc29yXSwgY29sLCBzYW1wbGVWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgYXMgUGFydGlhbDxUPjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmljaWFsaXphIHJvdyBwYXJhIGNyZWFjacOzbiBjb24gdmFsb3JlcyBwb3IgZGVmZWN0b1xuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdGlhbGl6ZU5ld1JvdzxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBjb2x1bW5zOiBDODBUYWJsZUNvbERlZltdLFxuICAgICAgICBkYXRhOiBUW11cbiAgICApOiBQYXJ0aWFsPFQ+IHtcbiAgICAgICAgY29uc3Qgcm93OiBQYXJ0aWFsPFQ+ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuZ2V0RWRpdGFibGVDb2x1bW5zKGNvbHVtbnMsIGRhdGEsIHRydWUpKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBjb2wuZGVmYXVsdCA9PT0gdW5kZWZpbmVkID8gJycgOiBjb2wuZGVmYXVsdDtcbiAgICAgICAgICAgIChyb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2NvbC5hY2Nlc3Nvcl0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmljaWFsaXphIHJvdyBwYXJhIGVkaWNpw7NuIGNvbiB2YWxvcmVzIGFjdHVhbGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplRWRpdFJvdzxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICByb3c6IFQsXG4gICAgICAgIGNvbHVtbnM6IEM4MFRhYmxlQ29sRGVmW10sXG4gICAgICAgIGRhdGE6IFRbXVxuICAgICk6IFBhcnRpYWw8VD4ge1xuICAgICAgICBjb25zdCBlZGl0OiBQYXJ0aWFsPFQ+ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuZ2V0RWRpdGFibGVDb2x1bW5zKGNvbHVtbnMsIGRhdGEsIHRydWUpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmlzaWJpbGl0eVNlcnZpY2VbJ2dldENlbGxWYWx1ZSddKHJvdywgY29sLmFjY2Vzc29yKTtcbiAgICAgICAgICAgIChlZGl0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtjb2wuYWNjZXNzb3JdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVkaXQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pY2lhbGl6YSBlbCBlc3RhZG8gQ1JVRCBwYXJhIHVuYSBudWV2YSB0YWJsYVxuICAgICAqIEByZXR1cm5zIE9iamV0byBjb24gc2lnbmFscyB5IG3DqXRvZG9zIHBhcmEgZ2VzdGnDs24gQ1JVRFxuICAgICAqL1xuICAgIGNyZWF0ZUNydWRTdGF0ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KCkge1xuICAgICAgICBjb25zdCBjcmVhdGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IHNpZ25hbDxQYXJ0aWFsPFQ+IHwgbnVsbD4obnVsbCk7XG4gICAgICAgIGNvbnN0IGVkaXRpbmcgPSBzaWduYWw8SUQgfCBudWxsPihudWxsKTtcbiAgICAgICAgY29uc3QgZWRpdFJvdyA9IHNpZ25hbDxQYXJ0aWFsPFQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNyZWF0aW5nOiBjcmVhdGluZy5hc1JlYWRvbmx5KCksXG4gICAgICAgICAgICBuZXdSb3c6IG5ld1Jvdy5hc1JlYWRvbmx5KCksXG4gICAgICAgICAgICBlZGl0aW5nOiBlZGl0aW5nLmFzUmVhZG9ubHkoKSxcbiAgICAgICAgICAgIGVkaXRSb3c6IGVkaXRSb3cuYXNSZWFkb25seSgpLFxuICAgICAgICAgICAgc3RhcnRDcmVhdGU6IHRoaXMuY3JlYXRlU3RhcnRDcmVhdGVGbihjcmVhdGluZywgbmV3Um93KSxcbiAgICAgICAgICAgIGNhbmNlbENyZWF0ZTogdGhpcy5jcmVhdGVDYW5jZWxDcmVhdGVGbihjcmVhdGluZywgbmV3Um93KSxcbiAgICAgICAgICAgIHVwZGF0ZU5ld1JvdzogdGhpcy5jcmVhdGVVcGRhdGVOZXdSb3dGbihuZXdSb3cpLFxuICAgICAgICAgICAgc2F2ZUNyZWF0ZTogdGhpcy5jcmVhdGVTYXZlQ3JlYXRlRm4obmV3Um93LCBjcmVhdGluZyksXG4gICAgICAgICAgICBzdGFydEVkaXQ6IHRoaXMuY3JlYXRlU3RhcnRFZGl0Rm4oZWRpdGluZywgZWRpdFJvdyksXG4gICAgICAgICAgICBjYW5jZWxFZGl0OiB0aGlzLmNyZWF0ZUNhbmNlbEVkaXRGbihlZGl0aW5nLCBlZGl0Um93KSxcbiAgICAgICAgICAgIHVwZGF0ZUVkaXRSb3c6IHRoaXMuY3JlYXRlVXBkYXRlRWRpdFJvd0ZuKGVkaXRSb3cpLFxuICAgICAgICAgICAgc2F2ZUVkaXQ6IHRoaXMuY3JlYXRlU2F2ZUVkaXRGbihlZGl0Um93LCBlZGl0aW5nKSxcbiAgICAgICAgICAgIGFwcGx5SW5wdXRWYWx1ZXM6IHRoaXMuY3JlYXRlQXBwbHlJbnB1dFZhbHVlc0ZuKGNyZWF0aW5nLCBuZXdSb3csIGVkaXRpbmcsIGVkaXRSb3cpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlU3RhcnRDcmVhdGVGbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBjcmVhdGluZzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPGJvb2xlYW4+PixcbiAgICAgICAgbmV3Um93OiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8UGFydGlhbDxUPiB8IG51bGw+PlxuICAgICkge1xuICAgICAgICByZXR1cm4gKGNvbHVtbnM6IEM4MFRhYmxlQ29sRGVmW10sIGRhdGE6IFRbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY3JlYXRpbmcuc2V0KHRydWUpO1xuICAgICAgICAgICAgbmV3Um93LnNldCh0aGlzLmluaXRpYWxpemVOZXdSb3coY29sdW1ucywgZGF0YSkpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ2FuY2VsQ3JlYXRlRm48VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgICAgY3JlYXRpbmc6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxib29sZWFuPj4sXG4gICAgICAgIG5ld1JvdzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPj5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGNyZWF0aW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgICBuZXdSb3cuc2V0KG51bGwpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVXBkYXRlTmV3Um93Rm48VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgICAgbmV3Um93OiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8UGFydGlhbDxUPiB8IG51bGw+PlxuICAgICkge1xuICAgICAgICByZXR1cm4gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IG5ld1JvdygpO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50KSByZXR1cm47XG4gICAgICAgICAgICBuZXdSb3cuc2V0KHsgLi4uY3VycmVudCwgW2tleV06IHZhbHVlIH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlU2F2ZUNyZWF0ZUZuPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgICAgIG5ld1JvdzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPj4sXG4gICAgICAgIGNyZWF0aW5nOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBjb2x1bW5zOiBDODBUYWJsZUNvbERlZltdLFxuICAgICAgICAgICAgZGF0YTogVFtdLFxuICAgICAgICAgICAgY3JlYXRlRW1pdHRlcjogRXZlbnRFbWl0dGVyPHsgcm93OiBQYXJ0aWFsPFQ+OyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PlxuICAgICAgICApOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IG5ld1JvdygpO1xuICAgICAgICAgICAgaWYgKCFyb3cpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSB0aGlzLmdldEVkaXRhYmxlQ29sdW1ucyhjb2x1bW5zLCBkYXRhLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IHRoaXMuY29udmVydFJvd1ZhbHVlcyhyb3csIHZpc2libGVDb2x1bW5zLCBkYXRhKTtcblxuICAgICAgICAgICAgY3JlYXRlRW1pdHRlci5lbWl0KHtcbiAgICAgICAgICAgICAgICByb3c6IGNvbnZlcnRlZCxcbiAgICAgICAgICAgICAgICBkb25lOiAoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Jvdy5zZXQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVTdGFydEVkaXRGbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBlZGl0aW5nOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8SUQgfCBudWxsPj4sXG4gICAgICAgIGVkaXRSb3c6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxQYXJ0aWFsPFQ+IHwgbnVsbD4+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiAocm93OiBULCBjb2x1bW5zOiBDODBUYWJsZUNvbERlZltdLCBkYXRhOiBUW10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGVkaXRpbmcuc2V0KHJvd1snaWQnXSBhcyBJRCk7XG4gICAgICAgICAgICBlZGl0Um93LnNldCh0aGlzLmluaXRpYWxpemVFZGl0Um93KHJvdywgY29sdW1ucywgZGF0YSkpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ2FuY2VsRWRpdEZuPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgICAgIGVkaXRpbmc6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxJRCB8IG51bGw+PixcbiAgICAgICAgZWRpdFJvdzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPj5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGVkaXRpbmcuc2V0KG51bGwpO1xuICAgICAgICAgICAgZWRpdFJvdy5zZXQobnVsbCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVVcGRhdGVFZGl0Um93Rm48VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICAgICAgZWRpdFJvdzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPj5cbiAgICApIHtcbiAgICAgICAgcmV0dXJuIChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBlZGl0Um93KCk7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnQpIHJldHVybjtcbiAgICAgICAgICAgIGVkaXRSb3cuc2V0KHsgLi4uY3VycmVudCwgW2tleV06IHZhbHVlIH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlU2F2ZUVkaXRGbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBlZGl0Um93OiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8UGFydGlhbDxUPiB8IG51bGw+PixcbiAgICAgICAgZWRpdGluZzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPElEIHwgbnVsbD4+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICByb3dJZDogSUQsXG4gICAgICAgICAgICBjb2x1bW5zOiBDODBUYWJsZUNvbERlZltdLFxuICAgICAgICAgICAgZGF0YTogVFtdLFxuICAgICAgICAgICAgdXBkYXRlRW1pdHRlcjogRXZlbnRFbWl0dGVyPHsgaWQ6IElEOyBjaGFuZ2VzOiBQYXJ0aWFsPFQ+OyBkb25lOiAocmVzdWx0OiBib29sZWFuKSA9PiB2b2lkOyB9PlxuICAgICAgICApOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRFZGl0Um93ID0gZWRpdFJvdygpO1xuICAgICAgICAgICAgaWYgKCFjdXJyZW50RWRpdFJvdykgcmV0dXJuO1xuXG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlQ29sdW1ucyA9IHRoaXMuZ2V0RWRpdGFibGVDb2x1bW5zKGNvbHVtbnMsIGRhdGEsIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgY29udmVydGVkID0gdGhpcy5jb252ZXJ0Um93VmFsdWVzKGN1cnJlbnRFZGl0Um93LCB2aXNpYmxlQ29sdW1ucywgZGF0YSk7XG5cbiAgICAgICAgICAgIHVwZGF0ZUVtaXR0ZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgaWQ6IHJvd0lkLFxuICAgICAgICAgICAgICAgIGNoYW5nZXM6IGNvbnZlcnRlZCxcbiAgICAgICAgICAgICAgICBkb25lOiAoc3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGluZy5zZXQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0Um93LnNldChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUFwcGx5SW5wdXRWYWx1ZXNGbjxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgICAgICBjcmVhdGluZzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPGJvb2xlYW4+PixcbiAgICAgICAgbmV3Um93OiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8UGFydGlhbDxUPiB8IG51bGw+PixcbiAgICAgICAgZWRpdGluZzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPElEIHwgbnVsbD4+LFxuICAgICAgICBlZGl0Um93OiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8UGFydGlhbDxUPiB8IG51bGw+PlxuICAgICkge1xuICAgICAgICByZXR1cm4gKHBhcnRpYWxWYWx1ZXM6IFBhcnRpYWw8VD4pOiB2b2lkID0+IHtcbiAgICAgICAgICAgIGlmICghY3JlYXRpbmcoKSAmJiBlZGl0aW5nKCkgPT09IG51bGwpIHJldHVybjtcblxuICAgICAgICAgICAgaWYgKGNyZWF0aW5nKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Um93ID0gbmV3Um93KCk7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3Um93LnNldCh7IC4uLmN1cnJlbnRSb3csIC4uLnBhcnRpYWxWYWx1ZXMgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RWRpdFJvdyA9IGVkaXRSb3coKTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEVkaXRSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgZWRpdFJvdy5zZXQoeyAuLi5jdXJyZW50RWRpdFJvdywgLi4ucGFydGlhbFZhbHVlcyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY3J1ZC1zdGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy91aS9zcmMvbGliL3RhYmxlL3RhYmxlLWNydWQtc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0QsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRW5FOzs7Ozs7OztHQVFHO0FBSUgsTUFBTSxPQUFPLHFCQUFxQjtJQUVmLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ3pELFNBQVMsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUUzRDs7T0FFRztJQUNLLGtCQUFrQixDQUN4QixPQUF5QixFQUN6QixJQUFTLEVBQ1QsbUJBQTRCO1FBRTVCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FDbkIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUN4SCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQ3RCLE9BQXlCLEVBQ3pCLElBQVM7UUFFVCxNQUFNLEdBQUcsR0FBZSxFQUFFLENBQUM7UUFDM0IsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQy9ELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxPQUFPLEtBQUssU0FBUyxD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LENBQUM7Z0JBQ2YsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLFVBQVUsRUFBRSxHQUFHLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxjQUFjLEVBQUUsR0FBRyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzt3R0FqSlUscUJBQXFCOzRHQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDODBUYWJsZUNvbERlZiB9IGZyb20gJy4vdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW5WaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vdGFibGUtY29sdW1uLXZpc2liaWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBUYWJsZURhdGFVdGlsc1NlcnZpY2UgfSBmcm9tICcuL3RhYmxlLWRhdGEtdXRpbHMuc2VydmljZSc7XG5cbi8qKlxuICogU2VydmljaW8gcGFyYSBnZXN0aW9uYXIgZWwgZXN0YWRvIENSVUQgKENyZWFyLCBMZWVyLCBBY3R1YWxpemFyLCBFbGltaW5hcikgZW4gdGFibGFzIEM4MFxuICpcbiAqIE1hbmVqYTpcbiAqIC0gRXN0YWRvIGRlIGNyZWFjacOzbiB5IGVkaWNpw7NuXG4gKiAtIEdlc3Rpw7NuIGRlIGRhdG9zIHRlbXBvcmFsZXMgKG5ld1JvdywgZWRpdFJvdylcbiAqIC0gQXBsaWNhY2nDs24gZGUgdmFsb3JlcyBkaW7DoW1pY29zXG4gKiAtIFZhbGlkYWNpw7NuIHkgY29udmVyc2nDs24gZGUgZGF0b3NcbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDcnVkU3RhdGVTZXJ2aWNlIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IHZpc2liaWxpdHlTZXJ2aWNlID0gaW5qZWN0KFRhYmxlQ29sdW1uVmlzaWJpbGl0eVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFVdGlscyA9IGluamVjdChUYWJsZURhdGFVdGlsc1NlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBGaWx0cmEgY29sdW1uYXMgdmlzaWJsZXMgeSBlZGl0YWJsZXNcbiAgICovXG4gIHByaXZhdGUgZ2V0RWRpdGFibGVDb2x1bW5zPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgY29sdW1uczogQzgwVGFibGVDb2xEZWZbXSxcbiAgICBkYXRhOiBUW10sXG4gICAgaW5jbHVkZUhpZGRlbklmTnVsbDogYm9vbGVhblxuICApOiBDODBUYWJsZUNvbERlZltdIHtcbiAgICByZXR1cm4gY29sdW1ucy5maWx0ZXIoXG4gICAgICBjb2wgPT4gdGhpcy52aXNpYmlsaXR5U2VydmljZS5pc0NvbHVtblZpc2libGUoY29sLCBkYXRhLCB7IGZvcmNlU2hvd0luQ3JlYXRpb246IGluY2x1ZGVIaWRkZW5JZk51bGwgfSkgJiYgIWNvbC5yZWFkT25seVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSByb3cgcGFyYSBjcmVhY2nDs24gY29uIHZhbG9yZXMgcG9yIGRlZmVjdG9cbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZU5ld1JvdzxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgIGNvbHVtbnM6IEM4MFRhYmxlQ29sRGVmW10sXG4gICAgZGF0YTogVFtdXG4gICk6IFBhcnRpYWw8VD4ge1xuICAgIGNvbnN0IHJvdzogUGFydGlhbDxUPiA9IHt9O1xuICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuZ2V0RWRpdGFibGVDb2x1bW5zKGNvbHVtbnMsIGRhdGEsIHRydWUpKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBjb2wuZGVmYXVsdCA9PT0gdW5kZWZpbmVkID8gJycgOiBjb2wuZGVmYXVsdDtcbiAgICAgIChyb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2NvbC5hY2Nlc3Nvcl0gPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByb3c7XG4gIH1cblxuICAvKipcbiAgICogSW5pY2lhbGl6YSByb3cgcGFyYSBlZGljacOzbiBjb24gdmFsb3JlcyBhY3R1YWxlc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplRWRpdFJvdzxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgIHJvdzogVCxcbiAgICBjb2x1bW5zOiBDODBUYWJsZUNvbERlZltdLFxuICAgIGRhdGE6IFRbXVxuICApOiBQYXJ0aWFsPFQ+IHtcbiAgICBjb25zdCBlZGl0OiBQYXJ0aWFsPFQ+ID0ge307XG4gICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5nZXRFZGl0YWJsZUNvbHVtbnMoY29sdW1ucywgZGF0YSwgdHJ1ZSkpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kYXRhVXRpbHMuZ2V0Q2VsbFZhbHVlKHJvdywgY29sLmFjY2Vzc29yKTtcbiAgICAgIChlZGl0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtjb2wuYWNjZXNzb3JdID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBlZGl0O1xuICB9XG5cbiAgLyoqXG4gICAqIEluaWNpYWxpemEgZWwgZXN0YWRvIENSVUQgcGFyYSB1bmEgbnVldmEgdGFibGFcbiAgICogQHJldHVybnMgT2JqZXRvIGNvbiBzaWduYWxzIHkgbcOpdG9kb3MgcGFyYSBnZXN0acOzbiBDUlVEXG4gICAqL1xuICBjcmVhdGVDcnVkU3RhdGU8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PigpIHtcbiAgICBjb25zdCBjcmVhdGluZyA9IHNpZ25hbChmYWxzZSk7XG4gICAgY29uc3QgbmV3Um93ID0gc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPihudWxsKTtcbiAgICBjb25zdCBlZGl0aW5nID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAgIGNvbnN0IGVkaXRSb3cgPSBzaWduYWw8UGFydGlhbDxUPiB8IG51bGw+KG51bGwpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0aW5nOiBjcmVhdGluZy5hc1JlYWRvbmx5KCksXG4gICAgICBuZXdSb3c6IG5ld1Jvdy5hc1JlYWRvbmx5KCksXG4gICAgICBlZGl0aW5nOiBlZGl0aW5nLmFzUmVhZG9ubHkoKSxcbiAgICAgIGVkaXRSb3c6IGVkaXRSb3cuYXNSZWFkb25seSgpLFxuICAgICAgc3RhcnRDcmVhdGU6IChjb2x1bW5zOiBDODBUYWJsZUNvbERlZltdLCBkYXRhOiBUW10pID0+IHRoaXMuc3RhcnRDcmVhdGUoY3JlYXRpbmcsIG5ld1JvdywgY29sdW1ucywgZGF0YSksXG4gICAgICBjYW5jZWxDcmVhdGU6ICgpID0+IHRoaXMuY2FuY2VsQ3JlYXRlKGNyZWF0aW5nLCBuZXdSb3cpLFxuICAgICAgdXBkYXRlTmV3Um93OiAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiB0aGlzLnVwZGF0ZVJvdyhuZXdSb3csIGtleSwgdmFsdWUpLFxuICAgICAgc3RhcnRFZGl0OiAocm93OiBULCBjb2x1bW5zOiBDODBUYWJsZUNvbERlZltdLCBkYXRhOiBUW10pID0+IHRoaXMuc3RhcnRFZGl0KHsgZWRpdGluZywgZWRpdFJvdyB9LCByb3csIGNvbHVtbnMsIGRhdGEpLFxuICAgICAgY2FuY2VsRWRpdDogKCkgPT4gdGhpcy5jYW5jZWxFZGl0KGVkaXRpbmcsIGVkaXRSb3cpLFxuICAgICAgdXBkYXRlRWRpdFJvdzogKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gdGhpcy51cGRhdGVSb3coZWRpdFJvdywga2V5LCB2YWx1ZSksXG4gICAgICBhcHBseUlucHV0VmFsdWVzOiAocGFydGlhbFZhbHVlczogUGFydGlhbDxUPikgPT4gdGhpcy5hcHBseUlucHV0VmFsdWVzKHsgY3JlYXRpbmcsIG5ld1JvdywgZWRpdGluZywgZWRpdFJvdyB9LCBwYXJ0aWFsVmFsdWVzKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydENyZWF0ZTxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgIGNyZWF0aW5nOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8Ym9vbGVhbj4+LFxuICAgIG5ld1JvdzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPj4sXG4gICAgY29sdW1uczogQzgwVGFibGVDb2xEZWZbXSxcbiAgICBkYXRhOiBUW11cbiAgKTogdm9pZCB7XG4gICAgY3JlYXRpbmcuc2V0KHRydWUpO1xuICAgIG5ld1Jvdy5zZXQodGhpcy5pbml0aWFsaXplTmV3Um93KGNvbHVtbnMsIGRhdGEpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsQ3JlYXRlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oXG4gICAgY3JlYXRpbmc6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxib29sZWFuPj4sXG4gICAgbmV3Um93OiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8UGFydGlhbDxUPiB8IG51bGw+PlxuICApOiB2b2lkIHtcbiAgICBjcmVhdGluZy5zZXQoZmFsc2UpO1xuICAgIG5ld1Jvdy5zZXQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJvdzxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgIHJvd1NpZ25hbDogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPj4sXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWU6IHVua25vd25cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHJvd1NpZ25hbCgpO1xuICAgIGlmICghY3VycmVudCkgcmV0dXJuO1xuICAgIHJvd1NpZ25hbC5zZXQoeyAuLi5jdXJyZW50LCBba2V5XTogdmFsdWUgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0RWRpdDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgIHNpZ25hbHM6IHtcbiAgICAgIGVkaXRpbmc6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxzdHJpbmcgfCBudWxsPj47XG4gICAgICBlZGl0Um93OiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8UGFydGlhbDxUPiB8IG51bGw+PjtcbiAgICB9LFxuICAgIHJvdzogVCxcbiAgICBjb2x1bW5zOiBDODBUYWJsZUNvbERlZltdLFxuICAgIGRhdGE6IFRbXVxuICApOiB2b2lkIHtcbiAgICBzaWduYWxzLmVkaXRpbmcuc2V0KHJvd1snaWQnXSBhcyBzdHJpbmcpO1xuICAgIHNpZ25hbHMuZWRpdFJvdy5zZXQodGhpcy5pbml0aWFsaXplRWRpdFJvdyhyb3csIGNvbHVtbnMsIGRhdGEpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsRWRpdDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KFxuICAgIGVkaXRpbmc6IFJldHVyblR5cGU8dHlwZW9mIHNpZ25hbDxzdHJpbmcgfCBudWxsPj4sXG4gICAgZWRpdFJvdzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPj5cbiAgKTogdm9pZCB7XG4gICAgZWRpdGluZy5zZXQobnVsbCk7XG4gICAgZWRpdFJvdy5zZXQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5SW5wdXRWYWx1ZXM8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+PihcbiAgICBzaWduYWxzOiB7XG4gICAgICBjcmVhdGluZzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPGJvb2xlYW4+PjtcbiAgICAgIG5ld1JvdzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPj47XG4gICAgICBlZGl0aW5nOiBSZXR1cm5UeXBlPHR5cGVvZiBzaWduYWw8c3RyaW5nIHwgbnVsbD4+O1xuICAgICAgZWRpdFJvdzogUmV0dXJuVHlwZTx0eXBlb2Ygc2lnbmFsPFBhcnRpYWw8VD4gfCBudWxsPj47XG4gICAgfSxcbiAgICBwYXJ0aWFsVmFsdWVzOiBQYXJ0aWFsPFQ+XG4gICk6IHZvaWQge1xuICAgIGlmICghc2lnbmFscy5jcmVhdGluZygpICYmIHNpZ25hbHMuZWRpdGluZygpID09PSBudWxsKSByZXR1cm47XG5cbiAgICBpZiAoc2lnbmFscy5jcmVhdGluZygpKSB7XG4gICAgICBjb25zdCBjdXJyZW50Um93ID0gc2lnbmFscy5uZXdSb3coKTtcbiAgICAgIGlmIChjdXJyZW50Um93KSB7XG4gICAgICAgIHNpZ25hbHMubmV3Um93LnNldCh7IC4uLmN1cnJlbnRSb3csIC4uLnBhcnRpYWxWYWx1ZXMgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRFZGl0Um93ID0gc2lnbmFscy5lZGl0Um93KCk7XG4gICAgICBpZiAoY3VycmVudEVkaXRSb3cpIHtcbiAgICAgICAgc2lnbmFscy5lZGl0Um93LnNldCh7IC4uLmN1cnJlbnRFZGl0Um93LCAuLi5wYXJ0aWFsVmFsdWVzIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19