@eqproject/eqp-dynamic-module 2.11.2 → 2.11.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/USERGUIDE.md +437 -437
  2. package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +143 -13
  3. package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +76 -3
  4. package/esm2020/lib/components/private/add-formula-field/add-formula-field.component.mjs +74 -13
  5. package/esm2020/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.mjs +14 -2
  6. package/esm2020/lib/components/private/field-graphics-editor/field-graphics-editor.component.mjs +735 -0
  7. package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +16 -15
  8. package/esm2020/lib/components/private/form-records/list-form-record/list-form-record.component.mjs +1 -1
  9. package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +1 -1
  10. package/esm2020/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.mjs +1 -1
  11. package/esm2020/lib/components/private/graphs/graph/graph.component.mjs +3 -3
  12. package/esm2020/lib/eqp-dynamic-module.module.mjs +4 -1
  13. package/esm2020/lib/utils/css-color.mjs +101 -0
  14. package/esm2020/lib/utils/css-declarations.mjs +119 -0
  15. package/esm2020/lib/utils/css-property-catalog.mjs +134 -0
  16. package/esm2020/lib/utils/field-style-catalog.mjs +491 -0
  17. package/esm2020/public-api.mjs +6 -1
  18. package/fesm2015/eqproject-eqp-dynamic-module.mjs +1941 -73
  19. package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
  20. package/fesm2020/eqproject-eqp-dynamic-module.mjs +1906 -80
  21. package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
  22. package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +39 -0
  23. package/lib/components/private/add-form-field/add-form-field.component.d.ts +19 -0
  24. package/lib/components/private/add-formula-field/add-formula-field.component.d.ts +5 -1
  25. package/lib/components/private/field-graphics-editor/field-graphics-editor.component.d.ts +192 -0
  26. package/lib/eqp-dynamic-module.module.d.ts +66 -65
  27. package/lib/utils/css-color.d.ts +15 -0
  28. package/lib/utils/css-declarations.d.ts +23 -0
  29. package/lib/utils/css-property-catalog.d.ts +36 -0
  30. package/lib/utils/field-style-catalog.d.ts +130 -0
  31. package/package.json +1 -1
  32. package/public-api.d.ts +5 -0
@@ -0,0 +1,491 @@
1
+ import { FieldTypeEnum } from '../models/baseField.model';
2
+ import { ListPresentationEnum } from '../models/fields/listValueField.model';
3
+ import { getCssDeclaration, parseCssDeclarations, setCssDeclaration } from './css-declarations';
4
+ const STATE_NORMALE = { key: 'Normale', label: 'Normale' };
5
+ const STATE_MOUSEOVER = { key: 'Mouseover', label: 'Mouse sopra' };
6
+ const STATE_FOCUSED = { key: 'Focused', label: 'Selezionato' };
7
+ const STATE_SELEZIONATO = { key: 'Selezionato', label: 'Selezionato' };
8
+ const STATE_NOTVALID = { key: 'NotValid', label: 'Non valido' };
9
+ const STATE_READONLY = { key: 'Readonly', label: 'Sola lettura' };
10
+ const FULL_STATES = [STATE_NORMALE, STATE_MOUSEOVER, STATE_FOCUSED, STATE_NOTVALID, STATE_READONLY];
11
+ /** Elementi del campo "Elenco generico", che cambiano in base alla modalità di presentazione */
12
+ const LIST_VALUE_COMBO_ELEMENTS = [
13
+ { key: 'Container', label: 'Contenitore' },
14
+ { key: 'Label', label: 'Etichetta' },
15
+ { key: 'CasellaTrigger', label: 'Casella Select' },
16
+ { key: 'BottoneCancella', label: 'Bottone Cancella' },
17
+ ];
18
+ const LIST_VALUE_RADIO_ELEMENTS = [
19
+ { key: 'Container', label: 'Contenitore' },
20
+ { key: 'Label', label: 'Etichetta' },
21
+ { key: 'Opzione', label: 'Opzione' },
22
+ { key: 'Selezione', label: 'Selezione (radio)' },
23
+ ];
24
+ const LIST_VALUE_BUTTON_ELEMENTS = [
25
+ { key: 'Label', label: 'Etichetta' },
26
+ { key: 'Bottone', label: 'Bottone' },
27
+ ];
28
+ export const FIELD_STYLE_CATALOG = [
29
+ {
30
+ fieldType: FieldTypeEnum['Campo di testo'],
31
+ label: 'Campo di testo',
32
+ styleProp: 'TextFieldStyleCSS',
33
+ elements: [
34
+ { key: 'Container', label: 'Contenitore' },
35
+ { key: 'Input', label: 'Casella di testo' },
36
+ { key: 'Descrizione', label: 'Descrizione (label)' },
37
+ { key: 'Icona', label: 'Icona' },
38
+ { key: 'Microfono', label: 'Microfono' },
39
+ { key: 'Errore', label: 'Testo errore' },
40
+ ],
41
+ states: FULL_STATES,
42
+ },
43
+ {
44
+ fieldType: FieldTypeEnum['Area di testo'],
45
+ label: 'Area di testo',
46
+ styleProp: 'TextareaFieldStyleCSS',
47
+ elements: [
48
+ { key: 'Container', label: 'Contenitore' },
49
+ { key: 'Input', label: 'Area di testo' },
50
+ { key: 'Descrizione', label: 'Descrizione (label)' },
51
+ { key: 'Icona', label: 'Icona' },
52
+ { key: 'Microfono', label: 'Microfono' },
53
+ { key: 'Errore', label: 'Testo errore' },
54
+ ],
55
+ states: FULL_STATES,
56
+ },
57
+ {
58
+ fieldType: FieldTypeEnum['Campo numerico'],
59
+ label: 'Campo numerico',
60
+ styleProp: 'NumericFieldStyleCSS',
61
+ elements: [
62
+ { key: 'Container', label: 'Contenitore' },
63
+ { key: 'Input', label: 'Casella numerica' },
64
+ { key: 'Descrizione', label: 'Descrizione (label)' },
65
+ { key: 'Icona', label: 'Icona' },
66
+ { key: 'Errore', label: 'Testo errore' },
67
+ ],
68
+ states: FULL_STATES,
69
+ },
70
+ {
71
+ fieldType: FieldTypeEnum['Booleano'],
72
+ label: 'Booleano',
73
+ styleProp: 'BooleanFieldStyleCSS',
74
+ elements: [
75
+ { key: 'Container', label: 'Contenitore' },
76
+ { key: 'Scelta', label: 'Controllo (toggle / checkbox / radio)' },
77
+ { key: 'Descrizione', label: 'Descrizione (label)' },
78
+ ],
79
+ states: [STATE_NORMALE, STATE_MOUSEOVER, STATE_FOCUSED, STATE_READONLY],
80
+ },
81
+ {
82
+ fieldType: FieldTypeEnum['Data e/o ora'],
83
+ label: 'Data e/o ora',
84
+ styleProp: 'DateFieldStyleCSS',
85
+ elements: [
86
+ { key: 'Container', label: 'Contenitore esterno' },
87
+ { key: 'Descrizione', label: 'Descrizione (label)' },
88
+ { key: 'ContenitoreInterno', label: 'Contenitore interno' },
89
+ { key: 'CampoData', label: 'Casella di testo' },
90
+ { key: 'IconaCalendario', label: 'Bottone calendario' },
91
+ { key: 'IconaOrologio', label: 'Bottone orologio' },
92
+ { key: 'IconaCancellazione', label: 'Bottone cancellazione' },
93
+ { key: 'Tooltip', label: 'Tooltip' },
94
+ ],
95
+ states: FULL_STATES,
96
+ },
97
+ {
98
+ fieldType: FieldTypeEnum['Allegato'],
99
+ label: 'Allegato',
100
+ styleProp: 'AttachmentFieldStyleCSS',
101
+ elements: [
102
+ { key: 'Container', label: 'Contenitore' },
103
+ { key: 'Label', label: 'Label / intestazione' },
104
+ { key: 'BottoneAggiungi', label: 'Bottone Aggiungi' },
105
+ { key: 'BottoneDownload', label: 'Bottone Download' },
106
+ { key: 'BottoneElimina', label: 'Bottone Elimina' },
107
+ { key: 'BottoneAnteprima', label: 'Bottone Anteprima' },
108
+ { key: 'CampoNomeFile', label: 'Campo nome file' },
109
+ ],
110
+ states: [STATE_NORMALE, STATE_MOUSEOVER, STATE_NOTVALID, STATE_READONLY],
111
+ },
112
+ {
113
+ fieldType: FieldTypeEnum['Immagine'],
114
+ label: 'Immagine',
115
+ styleProp: 'ImageFieldStyleCSS',
116
+ elements: [
117
+ { key: 'Container', label: 'Contenitore' },
118
+ { key: 'Descrizione', label: 'Descrizione (label)' },
119
+ { key: 'BottoneDisegna', label: 'Bottone Disegna' },
120
+ ],
121
+ states: [STATE_NORMALE, STATE_MOUSEOVER],
122
+ },
123
+ {
124
+ fieldType: FieldTypeEnum['Elenco generico'],
125
+ label: 'Elenco generico',
126
+ styleProp: 'ListValueFieldStyleCSS',
127
+ elements: LIST_VALUE_COMBO_ELEMENTS,
128
+ states: [STATE_NORMALE, STATE_MOUSEOVER, STATE_SELEZIONATO, STATE_NOTVALID, STATE_READONLY],
129
+ },
130
+ {
131
+ fieldType: FieldTypeEnum['Elenco immagini'],
132
+ label: 'Elenco immagini',
133
+ styleProp: 'ImageSelectorFieldStyleCSS',
134
+ elements: [
135
+ { key: 'Container', label: 'Contenitore' },
136
+ { key: 'CasellaSelezione', label: 'Casella di selezione' },
137
+ { key: 'Descrizione', label: 'Descrizione (label)' },
138
+ { key: 'Selezioni', label: 'Selezioni (checkbox)' },
139
+ ],
140
+ states: [STATE_NORMALE, STATE_MOUSEOVER, STATE_SELEZIONATO, STATE_NOTVALID, STATE_READONLY],
141
+ },
142
+ {
143
+ fieldType: FieldTypeEnum['Etichetta'],
144
+ label: 'Etichetta',
145
+ styleProp: 'LabelFieldStyleCSS',
146
+ elements: [
147
+ { key: 'Container', label: 'Contenitore' },
148
+ ],
149
+ states: [STATE_NORMALE, STATE_MOUSEOVER],
150
+ },
151
+ {
152
+ fieldType: FieldTypeEnum['Immagine con markers'],
153
+ label: 'Immagine con markers',
154
+ styleProp: 'ImageWithMarkersFieldStyleCSS',
155
+ elements: [
156
+ { key: 'Container', label: 'Contenitore' },
157
+ { key: 'Descrizione', label: 'Descrizione (label)' },
158
+ { key: 'BottoneMarca', label: 'Bottone Marca' },
159
+ ],
160
+ states: [STATE_NORMALE, STATE_MOUSEOVER],
161
+ },
162
+ {
163
+ fieldType: FieldTypeEnum['Bottone'],
164
+ label: 'Bottone',
165
+ styleProp: 'ActionButtonFieldStyleCSS',
166
+ elements: [
167
+ { key: 'Container', label: 'Bottone' },
168
+ { key: 'Icona', label: 'Icona' },
169
+ { key: 'Descrizione', label: 'Etichetta (label)' },
170
+ ],
171
+ states: [STATE_NORMALE, STATE_MOUSEOVER, { key: 'Selezionato', label: 'Selezionato (click)' }],
172
+ },
173
+ ];
174
+ /**
175
+ * Nome di un campo da mostrare a video. Description può valere " " (uno spazio: truthy ma
176
+ * invisibile), quindi va ripulita prima di usarla; poi il testo dell'Etichetta, il codice, il Name.
177
+ */
178
+ export function getFieldDisplayName(field) {
179
+ if (!field) {
180
+ return '';
181
+ }
182
+ const candidates = [
183
+ field.Description,
184
+ field.Etichetta,
185
+ field.Label,
186
+ field.Name,
187
+ ];
188
+ for (const c of candidates) {
189
+ const t = (c ?? '').toString().trim();
190
+ if (t) {
191
+ return t;
192
+ }
193
+ }
194
+ return '';
195
+ }
196
+ /** Definizione del catalogo per una tipologia; null se la tipologia non ha grafica configurabile */
197
+ export function getFieldStyleTypeDef(fieldType) {
198
+ return FIELD_STYLE_CATALOG.find((d) => Number(d.fieldType) === Number(fieldType)) ?? null;
199
+ }
200
+ /**
201
+ * Elementi grafici di un campo. Coincidono con quelli del catalogo, salvo l'Elenco generico
202
+ * dove dipendono dalla modalità di presentazione scelta sul campo.
203
+ */
204
+ export function getFieldStyleElements(field) {
205
+ const def = getFieldStyleTypeDef(field?.FieldType);
206
+ if (!def) {
207
+ return [];
208
+ }
209
+ if (Number(def.fieldType) === Number(FieldTypeEnum['Elenco generico'])) {
210
+ const mode = Number(field?.PresentationMode);
211
+ if (mode === ListPresentationEnum['Pulsante con testo']) {
212
+ return LIST_VALUE_BUTTON_ELEMENTS;
213
+ }
214
+ if (mode === ListPresentationEnum['Radio button']) {
215
+ return LIST_VALUE_RADIO_ELEMENTS;
216
+ }
217
+ return LIST_VALUE_COMBO_ELEMENTS;
218
+ }
219
+ return def.elements;
220
+ }
221
+ /** Mappa degli stili del campo (può essere undefined se non è mai stata valorizzata) */
222
+ export function getFieldStyleMap(field) {
223
+ const def = getFieldStyleTypeDef(field?.FieldType);
224
+ if (!def) {
225
+ return null;
226
+ }
227
+ return field[def.styleProp] ?? null;
228
+ }
229
+ /** Come getFieldStyleMap, ma crea la mappa se manca */
230
+ export function ensureFieldStyleMap(field) {
231
+ const def = getFieldStyleTypeDef(field?.FieldType);
232
+ if (!def) {
233
+ return null;
234
+ }
235
+ if (!field[def.styleProp]) {
236
+ field[def.styleProp] = {};
237
+ }
238
+ return field[def.styleProp];
239
+ }
240
+ /** Legge il CSS di un "Elemento + Stato" (es. "InputFocused") */
241
+ export function getFieldStyleValue(field, key) {
242
+ return getFieldStyleMap(field)?.[key] ?? '';
243
+ }
244
+ /** Scrive il CSS di un "Elemento + Stato"; il valore vuoto rimuove la chiave dal JSON */
245
+ export function setFieldStyleValue(field, key, value) {
246
+ const map = ensureFieldStyleMap(field);
247
+ if (!map) {
248
+ return;
249
+ }
250
+ // undefined viene escluso da JSON.stringify -> il JSON salvato rimane compatto
251
+ map[key] = value || undefined;
252
+ }
253
+ /** True se il campo non ha ancora nessuna regola grafica impostata */
254
+ export function isFieldStyleMapEmpty(field) {
255
+ const map = getFieldStyleMap(field);
256
+ if (!map) {
257
+ return true;
258
+ }
259
+ return !Object.keys(map).some((k) => !!map[k]);
260
+ }
261
+ /** Copia profonda della mappa stili di un campo (solo le chiavi valorizzate) */
262
+ export function cloneFieldStyleMap(field) {
263
+ const map = getFieldStyleMap(field);
264
+ const clone = {};
265
+ if (!map) {
266
+ return clone;
267
+ }
268
+ Object.keys(map).forEach((k) => { if (map[k]) {
269
+ clone[k] = map[k];
270
+ } });
271
+ return clone;
272
+ }
273
+ const FT = FieldTypeEnum;
274
+ export const GLOBAL_STYLE_ELEMENTS = [
275
+ {
276
+ key: 'Contenitore',
277
+ label: 'Contenitore',
278
+ perType: {
279
+ [FT['Campo di testo']]: ['Container'],
280
+ [FT['Area di testo']]: ['Container'],
281
+ [FT['Campo numerico']]: ['Container'],
282
+ [FT['Booleano']]: ['Container'],
283
+ [FT['Data e/o ora']]: ['Container'],
284
+ [FT['Allegato']]: ['Container'],
285
+ [FT['Immagine']]: ['Container'],
286
+ [FT['Elenco generico']]: ['Container'],
287
+ [FT['Elenco immagini']]: ['Container'],
288
+ [FT['Etichetta']]: ['Container'],
289
+ [FT['Immagine con markers']]: ['Container'],
290
+ [FT['Bottone']]: ['Container'],
291
+ },
292
+ },
293
+ {
294
+ key: 'Etichetta',
295
+ label: 'Etichetta / descrizione',
296
+ perType: {
297
+ [FT['Campo di testo']]: ['Descrizione'],
298
+ [FT['Area di testo']]: ['Descrizione'],
299
+ [FT['Campo numerico']]: ['Descrizione'],
300
+ [FT['Booleano']]: ['Descrizione'],
301
+ [FT['Data e/o ora']]: ['Descrizione'],
302
+ [FT['Allegato']]: ['Label'],
303
+ [FT['Immagine']]: ['Descrizione'],
304
+ [FT['Elenco generico']]: ['Label'],
305
+ [FT['Elenco immagini']]: ['Descrizione'],
306
+ [FT['Immagine con markers']]: ['Descrizione'],
307
+ [FT['Bottone']]: ['Descrizione'],
308
+ },
309
+ },
310
+ {
311
+ key: 'Valore',
312
+ label: 'Area del valore',
313
+ perType: {
314
+ [FT['Campo di testo']]: ['Input'],
315
+ [FT['Area di testo']]: ['Input'],
316
+ [FT['Campo numerico']]: ['Input'],
317
+ [FT['Booleano']]: ['Scelta'],
318
+ [FT['Data e/o ora']]: ['CampoData'],
319
+ [FT['Allegato']]: ['CampoNomeFile'],
320
+ [FT['Elenco generico']]: ['CasellaTrigger', 'Opzione', 'Bottone'],
321
+ [FT['Elenco immagini']]: ['CasellaSelezione'],
322
+ },
323
+ },
324
+ ];
325
+ /**
326
+ * Elementi reali di un campo corrispondenti a un elemento logico globale.
327
+ * Interseca la mappatura per tipologia con gli elementi che il campo ha davvero
328
+ * (l'Elenco generico, per esempio, cambia elementi in base alla modalità di presentazione).
329
+ */
330
+ export function resolveGlobalElementKeys(field, globalKey) {
331
+ const def = GLOBAL_STYLE_ELEMENTS.find((g) => g.key === globalKey);
332
+ if (!def) {
333
+ return [];
334
+ }
335
+ const candidates = def.perType[Number(field?.FieldType)] ?? [];
336
+ if (candidates.length === 0) {
337
+ return [];
338
+ }
339
+ const available = new Set(getFieldStyleElements(field).map((e) => e.key));
340
+ return candidates.filter((k) => available.has(k));
341
+ }
342
+ /** Stati comuni a tutte le tipologie passate: sono gli unici applicabili globalmente */
343
+ export function getCommonStates(fieldTypes) {
344
+ const defs = fieldTypes
345
+ .map((t) => getFieldStyleTypeDef(t))
346
+ .filter((d) => d != null);
347
+ if (defs.length === 0) {
348
+ return [];
349
+ }
350
+ return defs[0].states.filter((state) => defs.every((d) => d.states.some((s) => s.key === state.key)));
351
+ }
352
+ //#endregion Grafica globale
353
+ //#region CSS legacy (FieldstyleCSS / LabelstyleCSS)
354
+ /**
355
+ * I campi hanno due proprietà storiche, LabelstyleCSS e FieldstyleCSS, che i template
356
+ * applicano ancora con [ngStyle], quindi come stili INLINE. Essendo inline battono le regole
357
+ * "#uid { ... }" iniettate dalla grafica per elemento e stato: un colore impostato dall'editor
358
+ * grafico non si vedeva sui campi che avevano il CSS legacy valorizzato.
359
+ *
360
+ * Questa tabella dice, per ogni tipologia, su quale elemento della grafica nuova finisce
361
+ * ciascuna delle due proprietà legacy, in modo da poterle assorbire e avere una sola fonte
362
+ * di verità. Le tipologie assenti non usano [ngStyle] in nessun template.
363
+ */
364
+ export const LEGACY_STYLE_TARGETS = {
365
+ [FT['Campo di testo']]: { label: 'Descrizione', field: 'Input' },
366
+ [FT['Area di testo']]: { label: 'Descrizione', field: 'Input' },
367
+ [FT['Campo numerico']]: { label: 'Descrizione', field: 'Input' },
368
+ [FT['Booleano']]: { label: 'Descrizione' },
369
+ [FT['Elenco immagini']]: { label: 'Descrizione' },
370
+ [FT['Etichetta']]: { label: 'Container' },
371
+ [FT['Elenco generico']]: { label: 'Label', field: 'Container' },
372
+ };
373
+ /**
374
+ * Riversa il CSS legacy del campo dentro una mappa "Elemento+Stato" -> CSS, sullo stato Normale.
375
+ * Non sovrascrive le proprietà già presenti nella mappa: la grafica nuova ha la precedenza.
376
+ */
377
+ export function mergeLegacyStylesIntoMap(field, map, only) {
378
+ const result = { consumed: [], keys: [] };
379
+ const target = LEGACY_STYLE_TARGETS[Number(field?.FieldType)];
380
+ if (!target) {
381
+ return result;
382
+ }
383
+ const available = new Set(getFieldStyleElements(field).map((e) => e.key));
384
+ const absorb = (css, elementKey, name) => {
385
+ if (only && only !== name) {
386
+ return;
387
+ }
388
+ if (!css || !css.trim() || !elementKey || !available.has(elementKey)) {
389
+ return;
390
+ }
391
+ const key = elementKey + 'Normale';
392
+ let current = map[key] ?? '';
393
+ parseCssDeclarations(css).forEach((d) => {
394
+ if (!getCssDeclaration(current, d.prop)) {
395
+ current = setCssDeclaration(current, d.prop, d.value);
396
+ }
397
+ });
398
+ if (current) {
399
+ map[key] = current;
400
+ }
401
+ result.consumed.push(name);
402
+ if (!result.keys.includes(key)) {
403
+ result.keys.push(key);
404
+ }
405
+ };
406
+ absorb(field.LabelstyleCSS, target.label, 'LabelstyleCSS');
407
+ absorb(field.FieldstyleCSS, target.field, 'FieldstyleCSS');
408
+ return result;
409
+ }
410
+ /** Chiave "ElementoNormale" su cui finirebbe una proprietà legacy, o null se non applicabile */
411
+ export function legacyTargetKey(field, name) {
412
+ const target = LEGACY_STYLE_TARGETS[Number(field?.FieldType)];
413
+ if (!target) {
414
+ return null;
415
+ }
416
+ const elementKey = name === 'LabelstyleCSS' ? target.label : target.field;
417
+ if (!elementKey) {
418
+ return null;
419
+ }
420
+ const available = new Set(getFieldStyleElements(field).map((e) => e.key));
421
+ return available.has(elementKey) ? elementKey + 'Normale' : null;
422
+ }
423
+ /** Mappa stili "effettiva" di un campo: quella per elemento più il CSS legacy assorbito */
424
+ export function getEffectiveStyleMap(field) {
425
+ const map = cloneFieldStyleMap(field);
426
+ mergeLegacyStylesIntoMap(field, map);
427
+ return map;
428
+ }
429
+ /**
430
+ * True se il campo ha una grafica da qualche parte: nella mappa per elemento oppure nel CSS
431
+ * legacy. È il test giusto per "questo campo può fare da sorgente" (eredità, Copia Grafica):
432
+ * isFieldStyleMapEmpty guarda solo la mappa nuova e ignorerebbe i campi stilizzati solo col legacy.
433
+ */
434
+ export function hasEffectiveStyles(field) {
435
+ return Object.keys(getEffectiveStyleMap(field)).length > 0;
436
+ }
437
+ //#endregion CSS legacy (FieldstyleCSS / LabelstyleCSS)
438
+ //#region Grafica di default ereditata
439
+ /**
440
+ * Grafica di default costruita a partire da campi di tipologia DIVERSA.
441
+ *
442
+ * L'eredità naturale è fra campi della stessa tipologia, che condividono i nomi degli elementi.
443
+ * Quando però una tipologia viene usata per la prima volta non c'è nessun campo simile da cui
444
+ * copiare: in quel caso si passa per gli elementi logici della grafica globale (contenitore,
445
+ * etichetta, area del valore), che ogni tipologia sa tradurre nei propri elementi.
446
+ *
447
+ * @param field campo nuovo che deve ricevere la grafica
448
+ * @param sources campi già presenti nella form, in ordine
449
+ */
450
+ export function buildGlobalInheritedMap(field, sources) {
451
+ const result = {};
452
+ const typeDef = getFieldStyleTypeDef(field?.FieldType);
453
+ if (!typeDef) {
454
+ return result;
455
+ }
456
+ GLOBAL_STYLE_ELEMENTS.forEach((globalElement) => {
457
+ const targetKeys = resolveGlobalElementKeys(field, globalElement.key);
458
+ if (targetKeys.length === 0) {
459
+ return;
460
+ }
461
+ for (const source of sources ?? []) {
462
+ if (source === field) {
463
+ continue;
464
+ }
465
+ if (Number(source?.FieldType) === Number(typeDef.fieldType)) {
466
+ continue;
467
+ }
468
+ const sourceKeys = resolveGlobalElementKeys(source, globalElement.key);
469
+ if (sourceKeys.length === 0) {
470
+ continue;
471
+ }
472
+ const sourceMap = getEffectiveStyleMap(source);
473
+ let copied = false;
474
+ // Solo gli stati che la tipologia di destinazione conosce davvero
475
+ typeDef.states.forEach((state) => {
476
+ const css = sourceMap[sourceKeys[0] + state.key];
477
+ if (!css || !css.trim()) {
478
+ return;
479
+ }
480
+ targetKeys.forEach((tk) => { result[tk + state.key] = css; });
481
+ copied = true;
482
+ });
483
+ if (copied) {
484
+ break;
485
+ }
486
+ }
487
+ });
488
+ return result;
489
+ }
490
+ //#endregion Grafica di default ereditata
491
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtc3R5bGUtY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvbGliL3V0aWxzL2ZpZWxkLXN0eWxlLWNhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFhLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBa0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQTBCaEcsTUFBTSxhQUFhLEdBQXVCLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDL0UsTUFBTSxlQUFlLEdBQXVCLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDdkYsTUFBTSxhQUFhLEdBQXVCLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDbkYsTUFBTSxpQkFBaUIsR0FBdUIsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQztBQUMzRixNQUFNLGNBQWMsR0FBdUIsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUNwRixNQUFNLGNBQWMsR0FBdUIsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQztBQUV0RixNQUFNLFdBQVcsR0FBRyxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUVwRyxnR0FBZ0c7QUFDaEcsTUFBTSx5QkFBeUIsR0FBOEI7SUFDekQsRUFBRSxH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LEVBQUU7Z0JBQUUsU0FBUzthQUFFO1lBQ25DLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsS0FBSyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUFFLFNBQVM7YUFBRTtZQUUxRSxNQUFNLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQUUsU0FBUzthQUFFO1lBRTFDLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9DLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQztZQUVuQixrRUFBa0U7WUFDbEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDN0IsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQUUsT0FBTztpQkFBRTtnQkFDcEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbEIsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLE1BQU0sRUFBRTtnQkFBRSxNQUFNO2FBQUU7U0FDekI7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRCx5Q0FBeUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRmllbGQsIEZpZWxkVHlwZUVudW0gfSBmcm9tICcuLi9tb2RlbHMvYmFzZUZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgTGlzdFByZXNlbnRhdGlvbkVudW0sIExpc3RWYWx1ZUZpZWxkIH0gZnJvbSAnLi4vbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IGdldENzc0RlY2xhcmF0aW9uLCBwYXJzZUNzc0RlY2xhcmF0aW9ucywgc2V0Q3NzRGVjbGFyYXRpb24gfSBmcm9tICcuL2Nzcy1kZWNsYXJhdGlvbnMnO1xyXG5cclxuLyoqXHJcbiAqIENhdGFsb2dvIGNlbnRyYWxpenphdG8gZGVsbGEgZ3JhZmljYSBkZWkgY2FtcGkuXHJcbiAqXHJcbiAqIE9nbmkgdGlwb2xvZ2lhIGRpIGNhbXBvIGVzcG9uZSB1bmEgbWFwcGEgcGlhdHRhIFwiRWxlbWVudG8gKyBTdGF0b1wiIC0+IHN0cmluZ2EgQ1NTXHJcbiAqIChlcy4gVGV4dEZpZWxkU3R5bGVDU1MuSW5wdXRGb2N1c2VkID0gXCJjb2xvcjogcmVkO1wiKS4gUXVpIHN0YW5ubywgaW4gdW4gdW5pY28gcG9zdG8sXHJcbiAqIGkgbWV0YWRhdGkgZGkgcXVhbGkgZWxlbWVudGkgZSBxdWFsaSBzdGF0aSBlc2lzdG9ubyBwZXIgb2duaSB0aXBvbG9naWEsIGluc2llbWUgYWdsaVxyXG4gKiBhY2Nlc3NvciBnZW5lcmljaSBwZXIgbGVnZ2VyZS9zY3JpdmVyZSBxdWVsbGUgbWFwcGUgc2VuemEgZHVwbGljYXJlIGNvZGljZSBwZXIgdGlwby5cclxuICovXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkU3R5bGVFbnRyeURlZiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRTdHlsZVR5cGVEZWYge1xyXG4gICAgZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtO1xyXG4gICAgLyoqIEV0aWNoZXR0YSBkZWxsYSB0aXBvbG9naWEgbW9zdHJhdGEgYSB2aWRlbyAqL1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxuICAgIC8qKiBOb21lIGRlbGxhIHByb3ByaWV0w6AgY2hlIGNvbnRpZW5lIGxhIG1hcHBhIGRlZ2xpIHN0aWxpIHN1bCBmaWVsZCAqL1xyXG4gICAgc3R5bGVQcm9wOiBzdHJpbmc7XHJcbiAgICBlbGVtZW50czogQXJyYXk8RmllbGRTdHlsZUVudHJ5RGVmPjtcclxuICAgIHN0YXRlczogQXJyYXk8RmllbGRTdHlsZUVudHJ5RGVmPjtcclxufVxyXG5cclxuY29uc3QgU1RBVEVfTk9STUFMRTogRmllbGRTdHlsZUVudHJ5RGVmID0geyBrZXk6ICdOb3JtYWxlJywgbGFiZWw6ICdOb3JtYWxlJyB9O1xyXG5jb25zdCBTVEFURV9NT1VTRU9WRVI6IEZpZWxkU3R5bGVFbnRyeURlZiA9IHsga2V5OiAnTW91c2VvdmVyJywgbGFiZWw6ICdNb3VzZSBzb3ByYScgfTtcclxuY29uc3QgU1RBVEVfRk9DVVNFRDogRmllbGRTdHlsZUVudHJ5RGVmID0geyBrZXk6ICdGb2N1c2VkJywgbGFiZWw6ICdTZWxlemlvbmF0bycgfTtcclxuY29uc3QgU1RBVEVfU0VMRVpJT05BVE86IEZpZWxkU3R5bGVFbnRyeURlZiA9IHsga2V5OiAnU2VsZXppb25hdG8nLCBsYWJlbDogJ1NlbGV6aW9uYXRvJyB9O1xyXG5jb25zdCBTVEFURV9OT1RWQUxJRDogRmllbGRTdHlsZUVudHJ5RGVmID0geyBrZXk6ICdOb3RWYWxpZCcsIGxhYmVsOiAnTm9uIHZhbGlkbycgfTtcclxuY29uc3QgU1RBVEVfUkVBRE9OTFk6IEZpZWxkU3R5bGVFbnRyeURlZiA9IHsga2V5OiAnUmVhZG9ubHknLCBsYWJlbDogJ1NvbGEgbGV0dHVyYScgfTtcclxuXHJcbmNvbnN0IEZVTExfU1RBVEVTID0gW1NUQVRFX05PUk1BTEUsIFNUQVRFX01PVVNFT1ZFUiwgU1RBVEVfRk9DVVNFRCwgU1RBVEVfTk9UVkFMSUQsIFNUQVRFX1JFQURPTkxZXTtcclxuXHJcbi8qKiBFbGVtZW50aSBkZWwgY2FtcG8gXCJFbGVuY28gZ2VuZXJpY29cIiwgY2hlIGNhbWJpYW5vIGluIGJhc2UgYWxsYSBtb2RhbGl0w6AgZGkgcHJlc2VudGF6aW9uZSAqL1xyXG5jb25zdCBMSVNUX1ZBTFVFX0NPTUJPX0VMRU1FTlRTOiBBcnJheTxGaWVsZFN0eWxlRW50cnlEZWY+ID0gW1xyXG4gICAgeyBrZXk6ICdDb250YWluZXInLCBsYWJlbDogJ0NvbnRlbml0b3JlJyB9LFxyXG4gICAgeyBrZXk6ICdMYWJlbCcsIGxhYmVsOiAnRXRpY2hldHRhJyB9LFxyXG4gICAgeyBrZXk6ICdDYXNlbGxhVHJpZ2dlcicsIGxhYmVsOiAnQ2FzZWxsYSBTZWxlY3QnIH0sXHJcbiAgICB7IGtleTogJ0JvdHRvbmVDYW5jZWxsYScsIGxhYmVsOiAnQm90dG9uZSBDYW5jZWxsYScgfSxcclxuXTtcclxuY29uc3QgTElTVF9WQUxVRV9SQURJT19FTEVNRU5UUzogQXJyYXk8RmllbGRTdHlsZUVudHJ5RGVmPiA9IFtcclxuICAgIHsga2V5OiAnQ29udGFpbmVyJywgbGFiZWw6ICdDb250ZW5pdG9yZScgfSxcclxuICAgIHsga2V5OiAnTGFiZWwnLCBsYWJlbDogJ0V0aWNoZXR0YScgfSxcclxuICAgIHsga2V5OiAnT3B6aW9uZScsIGxhYmVsOiAnT3B6aW9uZScgfSxcclxuICAgIHsga2V5OiAnU2VsZXppb25lJywgbGFiZWw6ICdTZWxlemlvbmUgKHJhZGlvKScgfSxcclxuXTtcclxuY29uc3QgTElTVF9WQUxVRV9CVVRUT05fRUxFTUVOVFM6IEFycmF5PEZpZWxkU3R5bGVFbnRyeURlZj4gPSBbXHJcbiAgICB7IGtleTogJ0xhYmVsJywgbGFiZWw6ICdFdGljaGV0dGEnIH0sXHJcbiAgICB7IGtleTogJ0JvdHRvbmUnLCBsYWJlbDogJ0JvdHRvbmUnIH0sXHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgRklFTERfU1RZTEVfQ0FUQUxPRzogQXJyYXk8RmllbGRTdHlsZVR5cGVEZWY+ID0gW1xyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnQ2FtcG8gZGkgdGVzdG8nXSxcclxuICAgICAgICBsYWJlbDogJ0NhbXBvIGRpIHRlc3RvJyxcclxuICAgICAgICBzdHlsZVByb3A6ICdUZXh0RmllbGRTdHlsZUNTUycsXHJcbiAgICAgICAgZWxlbWVudHM6IFtcclxuICAgICAgICAgICAgeyBrZXk6ICdDb250YWluZXInLCBsYWJlbDogJ0NvbnRlbml0b3JlJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0lucHV0JywgbGFiZWw6ICdDYXNlbGxhIGRpIHRlc3RvJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0Rlc2NyaXppb25lJywgbGFiZWw6ICdEZXNjcml6aW9uZSAobGFiZWwpJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0ljb25hJywgbGFiZWw6ICdJY29uYScgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdNaWNyb2Zvbm8nLCBsYWJlbDogJ01pY3JvZm9ubycgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdFcnJvcmUnLCBsYWJlbDogJ1Rlc3RvIGVycm9yZScgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHN0YXRlczogRlVMTF9TVEFURVMsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnQXJlYSBkaSB0ZXN0byddLFxyXG4gICAgICAgIGxhYmVsOiAnQXJlYSBkaSB0ZXN0bycsXHJcbiAgICAgICAgc3R5bGVQcm9wOiAnVGV4dGFyZWFGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnSW5wdXQnLCBsYWJlbDogJ0FyZWEgZGkgdGVzdG8nIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0Rlc2NyaXppb25lIChsYWJlbCknIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnSWNvbmEnLCBsYWJlbDogJ0ljb25hJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ01pY3JvZm9ubycsIGxhYmVsOiAnTWljcm9mb25vJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0Vycm9yZScsIGxhYmVsOiAnVGVzdG8gZXJyb3JlJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBGVUxMX1NUQVRFUyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtWydDYW1wbyBudW1lcmljbyddLFxyXG4gICAgICAgIGxhYmVsOiAnQ2FtcG8gbnVtZXJpY28nLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ051bWVyaWNGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnSW5wdXQnLCBsYWJlbDogJ0Nhc2VsbGEgbnVtZXJpY2EnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0Rlc2NyaXppb25lIChsYWJlbCknIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnSWNvbmEnLCBsYWJlbDogJ0ljb25hJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0Vycm9yZScsIGxhYmVsOiAnVGVzdG8gZXJyb3JlJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBGVUxMX1NUQVRFUyxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtWydCb29sZWFubyddLFxyXG4gICAgICAgIGxhYmVsOiAnQm9vbGVhbm8nLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0Jvb2xlYW5GaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnU2NlbHRhJywgbGFiZWw6ICdDb250cm9sbG8gKHRvZ2dsZSAvIGNoZWNrYm94IC8gcmFkaW8pJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0Rlc2NyaXppb25lJywgbGFiZWw6ICdEZXNjcml6aW9uZSAobGFiZWwpJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBbU1RBVEVfTk9STUFMRSwgU1RBVEVfTU9VU0VPVkVSLCBTVEFURV9GT0NVU0VELCBTVEFURV9SRUFET05MWV0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnRGF0YSBlL28gb3JhJ10sXHJcbiAgICAgICAgbGFiZWw6ICdEYXRhIGUvbyBvcmEnLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0RhdGVGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUgZXN0ZXJubycgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdEZXNjcml6aW9uZScsIGxhYmVsOiAnRGVzY3JpemlvbmUgKGxhYmVsKScgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdDb250ZW5pdG9yZUludGVybm8nLCBsYWJlbDogJ0NvbnRlbml0b3JlIGludGVybm8nIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQ2FtcG9EYXRhJywgbGFiZWw6ICdDYXNlbGxhIGRpIHRlc3RvJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0ljb25hQ2FsZW5kYXJpbycsIGxhYmVsOiAnQm90dG9uZSBjYWxlbmRhcmlvJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0ljb25hT3JvbG9naW8nLCBsYWJlbDogJ0JvdHRvbmUgb3JvbG9naW8nIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnSWNvbmFDYW5jZWxsYXppb25lJywgbGFiZWw6ICdCb3R0b25lIGNhbmNlbGxhemlvbmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnVG9vbHRpcCcsIGxhYmVsOiAnVG9vbHRpcCcgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHN0YXRlczogRlVMTF9TVEFURVMsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnQWxsZWdhdG8nXSxcclxuICAgICAgICBsYWJlbDogJ0FsbGVnYXRvJyxcclxuICAgICAgICBzdHlsZVByb3A6ICdBdHRhY2htZW50RmllbGRTdHlsZUNTUycsXHJcbiAgICAgICAgZWxlbWVudHM6IFtcclxuICAgICAgICAgICAgeyBrZXk6ICdDb250YWluZXInLCBsYWJlbDogJ0NvbnRlbml0b3JlJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0xhYmVsJywgbGFiZWw6ICdMYWJlbCAvIGludGVzdGF6aW9uZScgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdCb3R0b25lQWdnaXVuZ2knLCBsYWJlbDogJ0JvdHRvbmUgQWdnaXVuZ2knIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQm90dG9uZURvd25sb2FkJywgbGFiZWw6ICdCb3R0b25lIERvd25sb2FkJyB9LFxyXG4gICAgICAgICAgICB7IGtleTogJ0JvdHRvbmVFbGltaW5hJywgbGFiZWw6ICdCb3R0b25lIEVsaW1pbmEnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQm90dG9uZUFudGVwcmltYScsIGxhYmVsOiAnQm90dG9uZSBBbnRlcHJpbWEnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQ2FtcG9Ob21lRmlsZScsIGxhYmVsOiAnQ2FtcG8gbm9tZSBmaWxlJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBbU1RBVEVfTk9STUFMRSwgU1RBVEVfTU9VU0VPVkVSLCBTVEFURV9OT1RWQUxJRCwgU1RBVEVfUkVBRE9OTFldLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBmaWVsZFR5cGU6IEZpZWxkVHlwZUVudW1bJ0ltbWFnaW5lJ10sXHJcbiAgICAgICAgbGFiZWw6ICdJbW1hZ2luZScsXHJcbiAgICAgICAgc3R5bGVQcm9wOiAnSW1hZ2VGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0Rlc2NyaXppb25lIChsYWJlbCknIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQm90dG9uZURpc2VnbmEnLCBsYWJlbDogJ0JvdHRvbmUgRGlzZWduYScgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHN0YXRlczogW1NUQVRFX05PUk1BTEUsIFNUQVRFX01PVVNFT1ZFUl0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnRWxlbmNvIGdlbmVyaWNvJ10sXHJcbiAgICAgICAgbGFiZWw6ICdFbGVuY28gZ2VuZXJpY28nLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0xpc3RWYWx1ZUZpZWxkU3R5bGVDU1MnLFxyXG4gICAgICAgIGVsZW1lbnRzOiBMSVNUX1ZBTFVFX0NPTUJPX0VMRU1FTlRTLFxyXG4gICAgICAgIHN0YXRlczogW1NUQVRFX05PUk1BTEUsIFNUQVRFX01PVVNFT1ZFUiwgU1RBVEVfU0VMRVpJT05BVE8sIFNUQVRFX05PVFZBTElELCBTVEFURV9SRUFET05MWV0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnRWxlbmNvIGltbWFnaW5pJ10sXHJcbiAgICAgICAgbGFiZWw6ICdFbGVuY28gaW1tYWdpbmknLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0ltYWdlU2VsZWN0b3JGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQ2FzZWxsYVNlbGV6aW9uZScsIGxhYmVsOiAnQ2FzZWxsYSBkaSBzZWxlemlvbmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0Rlc2NyaXppb25lIChsYWJlbCknIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnU2VsZXppb25pJywgbGFiZWw6ICdTZWxlemlvbmkgKGNoZWNrYm94KScgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHN0YXRlczogW1NUQVRFX05PUk1BTEUsIFNUQVRFX01PVVNFT1ZFUiwgU1RBVEVfU0VMRVpJT05BVE8sIFNUQVRFX05PVFZBTElELCBTVEFURV9SRUFET05MWV0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIGZpZWxkVHlwZTogRmllbGRUeXBlRW51bVsnRXRpY2hldHRhJ10sXHJcbiAgICAgICAgbGFiZWw6ICdFdGljaGV0dGEnLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0xhYmVsRmllbGRTdHlsZUNTUycsXHJcbiAgICAgICAgZWxlbWVudHM6IFtcclxuICAgICAgICAgICAgeyBrZXk6ICdDb250YWluZXInLCBsYWJlbDogJ0NvbnRlbml0b3JlJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBbU1RBVEVfTk9STUFMRSwgU1RBVEVfTU9VU0VPVkVSXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtWydJbW1hZ2luZSBjb24gbWFya2VycyddLFxyXG4gICAgICAgIGxhYmVsOiAnSW1tYWdpbmUgY29uIG1hcmtlcnMnLFxyXG4gICAgICAgIHN0eWxlUHJvcDogJ0ltYWdlV2l0aE1hcmtlcnNGaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQ29udGVuaXRvcmUnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0Rlc2NyaXppb25lIChsYWJlbCknIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnQm90dG9uZU1hcmNhJywgbGFiZWw6ICdCb3R0b25lIE1hcmNhJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBbU1RBVEVfTk9STUFMRSwgU1RBVEVfTU9VU0VPVkVSXSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtWydCb3R0b25lJ10sXHJcbiAgICAgICAgbGFiZWw6ICdCb3R0b25lJyxcclxuICAgICAgICBzdHlsZVByb3A6ICdBY3Rpb25CdXR0b25GaWVsZFN0eWxlQ1NTJyxcclxuICAgICAgICBlbGVtZW50czogW1xyXG4gICAgICAgICAgICB7IGtleTogJ0NvbnRhaW5lcicsIGxhYmVsOiAnQm90dG9uZScgfSxcclxuICAgICAgICAgICAgeyBrZXk6ICdJY29uYScsIGxhYmVsOiAnSWNvbmEnIH0sXHJcbiAgICAgICAgICAgIHsga2V5OiAnRGVzY3JpemlvbmUnLCBsYWJlbDogJ0V0aWNoZXR0YSAobGFiZWwpJyB9LFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgc3RhdGVzOiBbU1RBVEVfTk9STUFMRSwgU1RBVEVfTU9VU0VPVkVSLCB7IGtleTogJ1NlbGV6aW9uYXRvJywgbGFiZWw6ICdTZWxlemlvbmF0byAoY2xpY2spJyB9XSxcclxuICAgIH0sXHJcbl07XHJcblxyXG4vKipcclxuICogTm9tZSBkaSB1biBjYW1wbyBkYSBtb3N0cmFyZSBhIHZpZGVvLiBEZXNjcmlwdGlvbiBwdcOyIHZhbGVyZSBcIiBcIiAodW5vIHNwYXppbzogdHJ1dGh5IG1hXHJcbiAqIGludmlzaWJpbGUpLCBxdWluZGkgdmEgcmlwdWxpdGEgcHJpbWEgZGkgdXNhcmxhOyBwb2kgaWwgdGVzdG8gZGVsbCdFdGljaGV0dGEsIGlsIGNvZGljZSwgaWwgTmFtZS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZERpc3BsYXlOYW1lKGZpZWxkOiBCYXNlRmllbGQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFmaWVsZCkgeyByZXR1cm4gJyc7IH1cclxuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXHJcbiAgICAgICAgZmllbGQuRGVzY3JpcHRpb24sXHJcbiAgICAgICAgKGZpZWxkIGFzIGFueSkuRXRpY2hldHRhLFxyXG4gICAgICAgIGZpZWxkLkxhYmVsLFxyXG4gICAgICAgIGZpZWxkLk5hbWUsXHJcbiAgICBdO1xyXG4gICAgZm9yIChjb25zdCBjIG9mIGNhbmRpZGF0ZXMpIHtcclxuICAgICAgICBjb25zdCB0ID0gKGMgPz8gJycpLnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gICAgICAgIGlmICh0KSB7IHJldHVybiB0OyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbn1cclxuXHJcbi8qKiBEZWZpbml6aW9uZSBkZWwgY2F0YWxvZ28gcGVyIHVuYSB0aXBvbG9naWE7IG51bGwgc2UgbGEgdGlwb2xvZ2lhIG5vbiBoYSBncmFmaWNhIGNvbmZpZ3VyYWJpbGUgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpZWxkU3R5bGVUeXBlRGVmKGZpZWxkVHlwZTogRmllbGRUeXBlRW51bSB8IG51bWJlcik6IEZpZWxkU3R5bGVUeXBlRGVmIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gRklFTERfU1RZTEVfQ0FUQUxPRy5maW5kKChkKSA9PiBOdW1iZXIoZC5maWVsZFR5cGUpID09PSBOdW1iZXIoZmllbGRUeXBlKSkgPz8gbnVsbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIEVsZW1lbnRpIGdyYWZpY2kgZGkgdW4gY2FtcG8uIENvaW5jaWRvbm8gY29uIHF1ZWxsaSBkZWwgY2F0YWxvZ28sIHNhbHZvIGwnRWxlbmNvIGdlbmVyaWNvXHJcbiAqIGRvdmUgZGlwZW5kb25vIGRhbGxhIG1vZGFsaXTDoCBkaSBwcmVzZW50YXppb25lIHNjZWx0YSBzdWwgY2FtcG8uXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRTdHlsZUVsZW1lbnRzKGZpZWxkOiBCYXNlRmllbGQpOiBBcnJheTxGaWVsZFN0eWxlRW50cnlEZWY+IHtcclxuICAgIGNvbnN0IGRlZiA9IGdldEZpZWxkU3R5bGVUeXBlRGVmKGZpZWxkPy5GaWVsZFR5cGUpO1xyXG4gICAgaWYgKCFkZWYpIHsgcmV0dXJuIFtdOyB9XHJcblxyXG4gICAgaWYgKE51bWJlcihkZWYuZmllbGRUeXBlKSA9PT0gTnVtYmVyKEZpZWxkVHlwZUVudW1bJ0VsZW5jbyBnZW5lcmljbyddKSkge1xyXG4gICAgICAgIGNvbnN0IG1vZGUgPSBOdW1iZXIoKGZpZWxkIGFzIExpc3RWYWx1ZUZpZWxkKT8uUHJlc2VudGF0aW9uTW9kZSk7XHJcbiAgICAgICAgaWYgKG1vZGUgPT09IExpc3RQcmVzZW50YXRpb25FbnVtWydQdWxzYW50ZSBjb24gdGVzdG8nXSkgeyByZXR1cm4gTElTVF9WQUxVRV9CVVRUT05fRUxFTUVOVFM7IH1cclxuICAgICAgICBpZiAobW9kZSA9PT0gTGlzdFByZXNlbnRhdGlvbkVudW1bJ1JhZGlvIGJ1dHRvbiddKSB7IHJldHVybiBMSVNUX1ZBTFVFX1JBRElPX0VMRU1FTlRTOyB9XHJcbiAgICAgICAgcmV0dXJuIExJU1RfVkFMVUVfQ09NQk9fRUxFTUVOVFM7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRlZi5lbGVtZW50cztcclxufVxyXG5cclxuLyoqIE1hcHBhIGRlZ2xpIHN0aWxpIGRlbCBjYW1wbyAocHXDsiBlc3NlcmUgdW5kZWZpbmVkIHNlIG5vbiDDqCBtYWkgc3RhdGEgdmFsb3JpenphdGEpICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZFN0eWxlTWFwKGZpZWxkOiBCYXNlRmllbGQpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHwgbnVsbCB7XHJcbiAgICBjb25zdCBkZWYgPSBnZXRGaWVsZFN0eWxlVHlwZURlZihmaWVsZD8uRmllbGRUeXBlKTtcclxuICAgIGlmICghZGVmKSB7IHJldHVybiBudWxsOyB9XHJcbiAgICByZXR1cm4gKGZpZWxkIGFzIGFueSlbZGVmLnN0eWxlUHJvcF0gPz8gbnVsbDtcclxufVxyXG5cclxuLyoqIENvbWUgZ2V0RmllbGRTdHlsZU1hcCwgbWEgY3JlYSBsYSBtYXBwYSBzZSBtYW5jYSAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRmllbGRTdHlsZU1hcChmaWVsZDogQmFzZUZpZWxkKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IG51bGwge1xyXG4gICAgY29uc3QgZGVmID0gZ2V0RmllbGRTdHlsZVR5cGVEZWYoZmllbGQ/LkZpZWxkVHlwZSk7XHJcbiAgICBpZiAoIWRlZikgeyByZXR1cm4gbnVsbDsgfVxyXG4gICAgaWYgKCEoZmllbGQgYXMgYW55KVtkZWYuc3R5bGVQcm9wXSkgeyAoZmllbGQgYXMgYW55KVtkZWYuc3R5bGVQcm9wXSA9IHt9OyB9XHJcbiAgICByZXR1cm4gKGZpZWxkIGFzIGFueSlbZGVmLnN0eWxlUHJvcF07XHJcbn1cclxuXHJcbi8qKiBMZWdnZSBpbCBDU1MgZGkgdW4gXCJFbGVtZW50byArIFN0YXRvXCIgKGVzLiBcIklucHV0Rm9jdXNlZFwiKSAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmllbGRTdHlsZVZhbHVlKGZpZWxkOiBCYXNlRmllbGQsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBnZXRGaWVsZFN0eWxlTWFwKGZpZWxkKT8uW2tleV0gPz8gJyc7XHJcbn1cclxuXHJcbi8qKiBTY3JpdmUgaWwgQ1NTIGRpIHVuIFwiRWxlbWVudG8gKyBTdGF0b1wiOyBpbCB2YWxvcmUgdnVvdG8gcmltdW92ZSBsYSBjaGlhdmUgZGFsIEpTT04gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEZpZWxkU3R5bGVWYWx1ZShmaWVsZDogQmFzZUZpZWxkLCBrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgbWFwID0gZW5zdXJlRmllbGRTdHlsZU1hcChmaWVsZCk7XHJcbiAgICBpZiAoIW1hcCkgeyByZXR1cm47IH1cclxuICAgIC8vIHVuZGVmaW5lZCB2aWVuZSBlc2NsdXNvIGRhIEpTT04uc3RyaW5naWZ5IC0+IGlsIEpTT04gc2FsdmF0byByaW1hbmUgY29tcGF0dG9cclxuICAgIChtYXAgYXMgYW55KVtrZXldID0gdmFsdWUgfHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG4vKiogVHJ1ZSBzZSBpbCBjYW1wbyBub24gaGEgYW5jb3JhIG5lc3N1bmEgcmVnb2xhIGdyYWZpY2EgaW1wb3N0YXRhICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0ZpZWxkU3R5bGVNYXBFbXB0eShmaWVsZDogQmFzZUZpZWxkKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBtYXAgPSBnZXRGaWVsZFN0eWxlTWFwKGZpZWxkKTtcclxuICAgIGlmICghbWFwKSB7IHJldHVybiB0cnVlOyB9XHJcbiAgICByZXR1cm4gIU9iamVjdC5rZXlzKG1hcCkuc29tZSgoaykgPT4gISFtYXBba10pO1xyXG59XHJcblxyXG4vKiogQ29waWEgcHJvZm9uZGEgZGVsbGEgbWFwcGEgc3RpbGkgZGkgdW4gY2FtcG8gKHNvbG8gbGUgY2hpYXZpIHZhbG9yaXp6YXRlKSAqL1xyXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVGaWVsZFN0eWxlTWFwKGZpZWxkOiBCYXNlRmllbGQpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IG1hcCA9IGdldEZpZWxkU3R5bGVNYXAoZmllbGQpO1xyXG4gICAgY29uc3QgY2xvbmU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIGlmICghbWFwKSB7IHJldHVybiBjbG9uZTsgfVxyXG4gICAgT2JqZWN0LmtleXMobWFwKS5mb3JFYWNoKChrKSA9PiB7IGlmIChtYXBba10pIHsgY2xvbmVba10gPSBtYXBba107IH0gfSk7XHJcbiAgICByZXR1cm4gY2xvbmU7XHJcbn1cclxuXHJcbi8vI3JlZ2lvbiBHcmFmaWNhIGdsb2JhbGVcclxuXHJcbi8qKlxyXG4gKiBFbGVtZW50byBcImxvZ2ljb1wiIGRlbGxhIGdyYWZpY2EgZ2xvYmFsZTogdW4gY29uY2V0dG8gKGNvbnRlbml0b3JlLCBldGljaGV0dGEsIGFyZWEgZGVsIHZhbG9yZSlcclxuICogcHJlc2VudGUgaW4gcXVhc2kgdHV0dGUgbGUgdGlwb2xvZ2llIG1hIGNoZSBvZ25pIHRpcG9sb2dpYSBjaGlhbWEgY29uIHVuIG5vbWUgZGl2ZXJzby5cclxuICogU2VydmUgYWxsYSBzY2hlZGEgXCJHcmFmaWNhIGdsb2JhbGVcIiwgZG92ZSBzaSBtb2RpZmljYW5vIGluc2llbWUgY2FtcGkgZGkgdGlwb2xvZ2llIGRpdmVyc2UuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEdsb2JhbFN0eWxlRWxlbWVudERlZiB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIGxhYmVsOiBzdHJpbmc7XHJcbiAgICAvKiogUGVyIG9nbmkgdGlwb2xvZ2lhLCBnbGkgZWxlbWVudGkgcmVhbGkgc3UgY3VpIHNjcml2ZXJlICovXHJcbiAgICBwZXJUeXBlOiB7IFtmaWVsZFR5cGU6IG51bWJlcl06IEFycmF5PHN0cmluZz4gfTtcclxufVxyXG5cclxuY29uc3QgRlQgPSBGaWVsZFR5cGVFbnVtO1xyXG5cclxuZXhwb3J0IGNvbnN0IEdMT0JBTF9TVFlMRV9FTEVNRU5UUzogQXJyYXk8R2xvYmFsU3R5bGVFbGVtZW50RGVmPiA9IFtcclxuICAgIHtcclxuICAgICAgICBrZXk6ICdDb250ZW5pdG9yZScsXHJcbiAgICAgICAgbGFiZWw6ICdDb250ZW5pdG9yZScsXHJcbiAgICAgICAgcGVyVHlwZToge1xyXG4gICAgICAgICAgICBbRlRbJ0NhbXBvIGRpIHRlc3RvJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0FyZWEgZGkgdGVzdG8nXV06IFsnQ29udGFpbmVyJ10sXHJcbiAgICAgICAgICAgIFtGVFsnQ2FtcG8gbnVtZXJpY28nXV06IFsnQ29udGFpbmVyJ10sXHJcbiAgICAgICAgICAgIFtGVFsnQm9vbGVhbm8nXV06IFsnQ29udGFpbmVyJ10sXHJcbiAgICAgICAgICAgIFtGVFsnRGF0YSBlL28gb3JhJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0FsbGVnYXRvJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0ltbWFnaW5lJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0VsZW5jbyBnZW5lcmljbyddXTogWydDb250YWluZXInXSxcclxuICAgICAgICAgICAgW0ZUWydFbGVuY28gaW1tYWdpbmknXV06IFsnQ29udGFpbmVyJ10sXHJcbiAgICAgICAgICAgIFtGVFsnRXRpY2hldHRhJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0ltbWFnaW5lIGNvbiBtYXJrZXJzJ11dOiBbJ0NvbnRhaW5lciddLFxyXG4gICAgICAgICAgICBbRlRbJ0JvdHRvbmUnXV06IFsnQ29udGFpbmVyJ10sXHJcbiAgICAgICAgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAga2V5OiAnRXRpY2hldHRhJyxcclxuICAgICAgICBsYWJlbDogJ0V0aWNoZXR0YSAvIGRlc2NyaXppb25lJyxcclxuICAgICAgICBwZXJUeXBlOiB7XHJcbiAgICAgICAgICAgIFtGVFsnQ2FtcG8gZGkgdGVzdG8nXV06IFsnRGVzY3JpemlvbmUnXSxcclxuICAgICAgICAgICAgW0ZUWydBcmVhIGRpIHRlc3RvJ11dOiBbJ0Rlc2NyaXppb25lJ10sXHJcbiAgICAgICAgICAgIFtGVFsnQ2FtcG8gbnVtZXJpY28nXV06IFsnRGVzY3JpemlvbmUnXSxcclxuICAgICAgICAgICAgW0ZUWydCb29sZWFubyddXTogWydEZXNjcml6aW9uZSddLFxyXG4gICAgICAgICAgICBbRlRbJ0RhdGEgZS9vIG9yYSddXTogWydEZXNjcml6aW9uZSddLFxyXG4gICAgICAgICAgICBbRlRbJ0FsbGVnYXRvJ11dOiBbJ0xhYmVsJ10sXHJcbiAgICAgICAgICAgIFtGVFsnSW1tYWdpbmUnXV06IFsnRGVzY3JpemlvbmUnXSxcclxuICAgICAgICAgICAgW0ZUWydFbGVuY28gZ2VuZXJpY28nXV06IFsnTGFiZWwnXSxcclxuICAgICAgICAgICAgW0ZUWydFbGVuY28gaW1tYWdpbmknXV06IFsnRGVzY3JpemlvbmUnXSxcclxuICAgICAgICAgICAgW0ZUWydJbW1hZ2luZSBjb24gbWFya2VycyddXTogWydEZXNjcml6aW9uZSddLFxyXG4gICAgICAgICAgICBbRlRbJ0JvdHRvbmUnXV06IFsnRGVzY3JpemlvbmUnXSxcclxuICAgICAgICB9LFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBrZXk6ICdWYWxvcmUnLFxyXG4gICAgICAgIGxhYmVsOiAnQXJlYSBkZWwgdmFsb3JlJyxcclxuICAgICAgICBwZXJUeXBlOiB7XHJcbiAgICAgICAgICAgIFtGVFsnQ2FtcG8gZGkgdGVzdG8nXV06IFsnSW5wdXQnXSxcclxuICAgICAgICAgICAgW0ZUWydBcmVhIGRpIHRlc3RvJ11dOiBbJ0lucHV0J10sXHJcbiAgICAgICAgICAgIFtGVFsnQ2FtcG8gbnVtZXJpY28nXV06IFsnSW5wdXQnXSxcclxuICAgICAgICAgICAgW0ZUWydCb29sZWFubyddXTogWydTY2VsdGEnXSxcclxuICAgICAgICAgICAgW0ZUWydEYXRhIGUvbyBvcmEnXV06IFsnQ2FtcG9EYXRhJ10sXHJcbiAgICAgICAgICAgIFtGVFsnQWxsZWdhdG8nXV06IFsnQ2FtcG9Ob21lRmlsZSddLFxyXG4gICAgICAgICAgICBbRlRbJ0VsZW5jbyBnZW5lcmljbyddXTogWydDYXNlbGxhVHJpZ2dlcicsICdPcHppb25lJywgJ0JvdHRvbmUnXSxcclxuICAgICAgICAgICAgW0ZUWydFbGVuY28gaW1tYWdpbmknXV06IFsnQ2FzZWxsYVNlbGV6aW9uZSddLFxyXG4gICAgICAgIH0sXHJcbiAgICB9LFxyXG5dO1xyXG5cclxuLyoqXHJcbiAqIEVsZW1lbnRpIHJlYWxpIGRpIHVuIGNhbXBvIGNvcnJpc3BvbmRlbnRpIGEgdW4gZWxlbWVudG8gbG9naWNvIGdsb2JhbGUuXHJcbiAqIEludGVyc2VjYSBsYSBtYXBwYXR1cmEgcGVyIHRpcG9sb2dpYSBjb24gZ2xpIGVsZW1lbnRpIGNoZSBpbCBjYW1wbyBoYSBkYXZ2ZXJvXHJcbiAqIChsJ0VsZW5jbyBnZW5lcmljbywgcGVyIGVzZW1waW8sIGNhbWJpYSBlbGVtZW50aSBpbiBiYXNlIGFsbGEgbW9kYWxpdMOgIGRpIHByZXNlbnRhemlvbmUpLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVHbG9iYWxFbGVtZW50S2V5cyhmaWVsZDogQmFzZUZpZWxkLCBnbG9iYWxLZXk6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgY29uc3QgZGVmID0gR0xPQkFMX1NUWUxFX0VMRU1FTlRTLmZpbmQoKGcpID0+IGcua2V5ID09PSBnbG9iYWxLZXkpO1xyXG4gICAgaWYgKCFkZWYpIHsgcmV0dXJuIFtdOyB9XHJcblxyXG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IGRlZi5wZXJUeXBlW051bWJlcihmaWVsZD8uRmllbGRUeXBlKV0gPz8gW107XHJcbiAgICBpZiAoY2FuZGlkYXRlcy5sZW5ndGggPT09IDApIHsgcmV0dXJuIFtdOyB9XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlID0gbmV3IFNldChnZXRGaWVsZFN0eWxlRWxlbWVudHMoZmllbGQpLm1hcCgoZSkgPT4gZS5rZXkpKTtcclxuICAgIHJldHVybiBjYW5kaWRhdGVzLmZpbHRlcigoaykgPT4gYXZhaWxhYmxlLmhhcyhrKSk7XHJcbn1cclxuXHJcbi8qKiBTdGF0aSBjb211bmkgYSB0dXR0ZSBsZSB0aXBvbG9naWUgcGFzc2F0ZTogc29ubyBnbGkgdW5pY2kgYXBwbGljYWJpbGkgZ2xvYmFsbWVudGUgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbW1vblN0YXRlcyhmaWVsZFR5cGVzOiBBcnJheTxGaWVsZFR5cGVFbnVtIHwgbnVtYmVyPik6IEFycmF5PEZpZWxkU3R5bGVFbnRyeURlZj4ge1xyXG4gICAgY29uc3QgZGVmcyA9IGZpZWxkVHlwZXNcclxuICAgICAgICAubWFwKCh0KSA9PiBnZXRGaWVsZFN0eWxlVHlwZURlZih0KSlcclxuICAgICAgICAuZmlsdGVyKChkKTogZCBpcyBGaWVsZFN0eWxlVHlwZURlZiA9PiBkICE9IG51bGwpO1xyXG4gICAgaWYgKGRlZnMubGVuZ3RoID09PSAwKSB7IHJldHVybiBbXTsgfVxyXG5cclxuICAgIHJldHVybiBkZWZzWzBdLnN0YXRlcy5maWx0ZXIoKHN0YXRlKSA9PlxyXG4gICAgICAgIGRlZnMuZXZlcnkoKGQpID0+IGQuc3RhdGVzLnNvbWUoKHMpID0+IHMua2V5ID09PSBzdGF0ZS5rZXkpKVxyXG4gICAgKTtcclxufVxyXG5cclxuLy8jZW5kcmVnaW9uIEdyYWZpY2EgZ2xvYmFsZVxyXG5cclxuLy8jcmVnaW9uIENTUyBsZWdhY3kgKEZpZWxkc3R5bGVDU1MgLyBMYWJlbHN0eWxlQ1NTKVxyXG5cclxuLyoqXHJcbiAqIEkgY2FtcGkgaGFubm8gZHVlIHByb3ByaWV0w6Agc3RvcmljaGUsIExhYmVsc3R5bGVDU1MgZSBGaWVsZHN0eWxlQ1NTLCBjaGUgaSB0ZW1wbGF0ZVxyXG4gKiBhcHBsaWNhbm8gYW5jb3JhIGNvbiBbbmdTdHlsZV0sIHF1aW5kaSBjb21lIHN0aWxpIElOTElORS4gRXNzZW5kbyBpbmxpbmUgYmF0dG9ubyBsZSByZWdvbGVcclxuICogXCIjdWlkIHsgLi4uIH1cIiBpbmlldHRhdGUgZGFsbGEgZ3JhZmljYSBwZXIgZWxlbWVudG8gZSBzdGF0bzogdW4gY29sb3JlIGltcG9zdGF0byBkYWxsJ2VkaXRvclxyXG4gKiBncmFmaWNvIG5vbiBzaSB2ZWRldmEgc3VpIGNhbXBpIGNoZSBhdmV2YW5vIGlsIENTUyBsZWdhY3kgdmFsb3JpenphdG8uXHJcbiAqXHJcbiAqIFF1ZXN0YSB0YWJlbGxhIGRpY2UsIHBlciBvZ25pIHRpcG9sb2dpYSwgc3UgcXVhbGUgZWxlbWVudG8gZGVsbGEgZ3JhZmljYSBudW92YSBmaW5pc2NlXHJcbiAqIGNpYXNjdW5hIGRlbGxlIGR1ZSBwcm9wcmlldMOgIGxlZ2FjeSwgaW4gbW9kbyBkYSBwb3RlcmxlIGFzc29yYmlyZSBlIGF2ZXJlIHVuYSBzb2xhIGZvbnRlXHJcbiAqIGRpIHZlcml0w6AuIExlIHRpcG9sb2dpZSBhc3NlbnRpIG5vbiB1c2FubyBbbmdTdHlsZV0gaW4gbmVzc3VuIHRlbXBsYXRlLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IExFR0FDWV9TVFlMRV9UQVJHRVRTOiB7IFtmaWVsZFR5cGU6IG51bWJlcl06IHsgbGFiZWw/OiBzdHJpbmc7IGZpZWxkPzogc3RyaW5nIH0gfSA9IHtcclxuICAgIFtGVFsnQ2FtcG8gZGkgdGVzdG8nXV06IHsgbGFiZWw6ICdEZXNjcml6aW9uZScsIGZpZWxkOiAnSW5wdXQnIH0sXHJcbiAgICBbRlRbJ0FyZWEgZGkgdGVzdG8nXV06IHsgbGFiZWw6ICdEZXNjcml6aW9uZScsIGZpZWxkOiAnSW5wdXQnIH0sXHJcbiAgICBbRlRbJ0NhbXBvIG51bWVyaWNvJ11dOiB7IGxhYmVsOiAnRGVzY3JpemlvbmUnLCBmaWVsZDogJ0lucHV0JyB9LFxyXG4gICAgW0ZUWydCb29sZWFubyddXTogeyBsYWJlbDogJ0Rlc2NyaXppb25lJyB9LFxyXG4gICAgW0ZUWydFbGVuY28gaW1tYWdpbmknXV06IHsgbGFiZWw6ICdEZXNjcml6aW9uZScgfSxcclxuICAgIFtGVFsnRXRpY2hldHRhJ11dOiB7IGxhYmVsOiAnQ29udGFpbmVyJyB9LFxyXG4gICAgW0ZUWydFbGVuY28gZ2VuZXJpY28nXV06IHsgbGFiZWw6ICdMYWJlbCcsIGZpZWxkOiAnQ29udGFpbmVyJyB9LFxyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lNZXJnZVJlc3VsdCB7XHJcbiAgICAvKiogUHJvcHJpZXTDoCBsZWdhY3kgYXNzb3JiaXRlICovXHJcbiAgICBjb25zdW1lZDogQXJyYXk8J0xhYmVsc3R5bGVDU1MnIHwgJ0ZpZWxkc3R5bGVDU1MnPjtcclxuICAgIC8qKiBDaGlhdmkgXCJFbGVtZW50b1N0YXRvXCIgdG9jY2F0ZSBkYWxsJ2Fzc29yYmltZW50byAqL1xyXG4gICAga2V5czogQXJyYXk8c3RyaW5nPjtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJpdmVyc2EgaWwgQ1NTIGxlZ2FjeSBkZWwgY2FtcG8gZGVudHJvIHVuYSBtYXBwYSBcIkVsZW1lbnRvK1N0YXRvXCIgLT4gQ1NTLCBzdWxsbyBzdGF0byBOb3JtYWxlLlxyXG4gKiBOb24gc292cmFzY3JpdmUgbGUgcHJvcHJpZXTDoCBnacOgIHByZXNlbnRpIG5lbGxhIG1hcHBhOiBsYSBncmFmaWNhIG51b3ZhIGhhIGxhIHByZWNlZGVuemEuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VMZWdhY3lTdHlsZXNJbnRvTWFwKFxyXG4gICAgZmllbGQ6IEJhc2VGaWVsZCxcclxuICAgIG1hcDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSxcclxuICAgIG9ubHk/OiAnTGFiZWxzdHlsZUNTUycgfCAnRmllbGRzdHlsZUNTUydcclxuKTogTGVnYWN5TWVyZ2VSZXN1bHQge1xyXG4gICAgY29uc3QgcmVzdWx0OiBMZWdhY3lNZXJnZVJlc3VsdCA9IHsgY29uc3VtZWQ6IFtdLCBrZXlzOiBbXSB9O1xyXG5cclxuICAgIGNvbnN0IHRhcmdldCA9IExFR0FDWV9TVFlMRV9UQVJHRVRTW051bWJlcihmaWVsZD8uRmllbGRUeXBlKV07XHJcbiAgICBpZiAoIXRhcmdldCkgeyByZXR1cm4gcmVzdWx0OyB9XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlID0gbmV3IFNldChnZXRGaWVsZFN0eWxlRWxlbWVudHMoZmllbGQpLm1hcCgoZSkgPT4gZS5rZXkpKTtcclxuXHJcbiAgICBjb25zdCBhYnNvcmIgPSAoY3NzOiBzdHJpbmcsIGVsZW1lbnRLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCwgbmFtZTogJ0xhYmVsc3R5bGVDU1MnIHwgJ0ZpZWxkc3R5bGVDU1MnKSA9PiB7XHJcbiAgICAgICAgaWYgKG9ubHkgJiYgb25seSAhPT0gbmFtZSkgeyByZXR1cm47IH1cclxuICAgICAgICBpZiAoIWNzcyB8fCAhY3NzLnRyaW0oKSB8fCAhZWxlbWVudEtleSB8fCAhYXZhaWxhYmxlLmhhcyhlbGVtZW50S2V5KSkgeyByZXR1cm47IH1cclxuXHJcbiAgICAgICAgY29uc3Qga2V5ID0gZWxlbWVudEtleSArICdOb3JtYWxlJztcclxuICAgICAgICBsZXQgY3VycmVudCA9IG1hcFtrZXldID8/ICcnO1xyXG5cclxuICAgICAgICBwYXJzZUNzc0RlY2xhcmF0aW9ucyhjc3MpLmZvckVhY2goKGQpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFnZXRDc3NEZWNsYXJhdGlvbihjdXJyZW50LCBkLnByb3ApKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gc2V0Q3NzRGVjbGFyYXRpb24oY3VycmVudCwgZC5wcm9wLCBkLnZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoY3VycmVudCkgeyBtYXBba2V5XSA9IGN1cnJlbnQ7IH1cclxuICAgICAgICByZXN1bHQuY29uc3VtZWQucHVzaChuYW1lKTtcclxuICAgICAgICBpZiAoIXJlc3VsdC5rZXlzLmluY2x1ZGVzKGtleSkpIHsgcmVzdWx0LmtleXMucHVzaChrZXkpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIGFic29yYihmaWVsZC5MYWJlbHN0eWxlQ1NTLCB0YXJnZXQubGFiZWwsICdMYWJlbHN0eWxlQ1NTJyk7XHJcbiAgICBhYnNvcmIoZmllbGQuRmllbGRzdHlsZUNTUywgdGFyZ2V0LmZpZWxkLCAnRmllbGRzdHlsZUNTUycpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuLyoqIENoaWF2ZSBcIkVsZW1lbnRvTm9ybWFsZVwiIHN1IGN1aSBmaW5pcmViYmUgdW5hIHByb3ByaWV0w6AgbGVnYWN5LCBvIG51bGwgc2Ugbm9uIGFwcGxpY2FiaWxlICovXHJcbmV4cG9ydCBmdW5jdGlvbiBsZWdhY3lUYXJnZXRLZXkoZmllbGQ6IEJhc2VGaWVsZCwgbmFtZTogJ0xhYmVsc3R5bGVDU1MnIHwgJ0ZpZWxkc3R5bGVDU1MnKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBMRUdBQ1lfU1RZTEVfVEFSR0VUU1tOdW1iZXIoZmllbGQ/LkZpZWxkVHlwZSldO1xyXG4gICAgaWYgKCF0YXJnZXQpIHsgcmV0dXJuIG51bGw7IH1cclxuXHJcbiAgICBjb25zdCBlbGVtZW50S2V5ID0gbmFtZSA9PT0gJ0xhYmVsc3R5bGVDU1MnID8gdGFyZ2V0LmxhYmVsIDogdGFyZ2V0LmZpZWxkO1xyXG4gICAgaWYgKCFlbGVtZW50S2V5KSB7IHJldHVybiBudWxsOyB9XHJcblxyXG4gICAgY29uc3QgYXZhaWxhYmxlID0gbmV3IFNldChnZXRGaWVsZFN0eWxlRWxlbWVudHMoZmllbGQpLm1hcCgoZSkgPT4gZS5rZXkpKTtcclxuICAgIHJldHVybiBhdmFpbGFibGUuaGFzKGVsZW1lbnRLZXkpID8gZWxlbWVudEtleSArICdOb3JtYWxlJyA6IG51bGw7XHJcbn1cclxuXHJcbi8qKiBNYXBwYSBzdGlsaSBcImVmZmV0dGl2YVwiIGRpIHVuIGNhbXBvOiBxdWVsbGEgcGVyIGVsZW1lbnRvIHBpw7kgaWwgQ1NTIGxlZ2FjeSBhc3NvcmJpdG8gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEVmZmVjdGl2ZVN0eWxlTWFwKGZpZWxkOiBCYXNlRmllbGQpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcclxuICAgIGNvbnN0IG1hcCA9IGNsb25lRmllbGRTdHlsZU1hcChmaWVsZCk7XHJcbiAgICBtZXJnZUxlZ2FjeVN0eWxlc0ludG9NYXAoZmllbGQsIG1hcCk7XHJcbiAgICByZXR1cm4gbWFwO1xyXG59XHJcblxyXG4vKipcclxuICogVHJ1ZSBzZSBpbCBjYW1wbyBoYSB1bmEgZ3JhZmljYSBkYSBxdWFsY2hlIHBhcnRlOiBuZWxsYSBtYXBwYSBwZXIgZWxlbWVudG8gb3BwdXJlIG5lbCBDU1NcclxuICogbGVnYWN5LiDDiCBpbCB0ZXN0IGdpdXN0byBwZXIgXCJxdWVzdG8gY2FtcG8gcHXDsiBmYXJlIGRhIHNvcmdlbnRlXCIgKGVyZWRpdMOgLCBDb3BpYSBHcmFmaWNhKTpcclxuICogaXNGaWVsZFN0eWxlTWFwRW1wdHkgZ3VhcmRhIHNvbG8gbGEgbWFwcGEgbnVvdmEgZSBpZ25vcmVyZWJiZSBpIGNhbXBpIHN0aWxpenphdGkgc29sbyBjb2wgbGVnYWN5LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGhhc0VmZmVjdGl2ZVN0eWxlcyhmaWVsZDogQmFzZUZpZWxkKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZ2V0RWZmZWN0aXZlU3R5bGVNYXAoZmllbGQpKS5sZW5ndGggPiAwO1xyXG59XHJcblxyXG4vLyNlbmRyZWdpb24gQ1NTIGxlZ2FjeSAoRmllbGRzdHlsZUNTUyAvIExhYmVsc3R5bGVDU1MpXHJcblxyXG4vLyNyZWdpb24gR3JhZmljYSBkaSBkZWZhdWx0IGVyZWRpdGF0YVxyXG5cclxuLyoqXHJcbiAqIEdyYWZpY2EgZGkgZGVmYXVsdCBjb3N0cnVpdGEgYSBwYXJ0aXJlIGRhIGNhbXBpIGRpIHRpcG9sb2dpYSBESVZFUlNBLlxyXG4gKlxyXG4gKiBMJ2VyZWRpdMOgIG5hdHVyYWxlIMOoIGZyYSBjYW1waSBkZWxsYSBzdGVzc2EgdGlwb2xvZ2lhLCBjaGUgY29uZGl2aWRvbm8gaSBub21pIGRlZ2xpIGVsZW1lbnRpLlxyXG4gKiBRdWFuZG8gcGVyw7IgdW5hIHRpcG9sb2dpYSB2aWVuZSB1c2F0YSBwZXIgbGEgcHJpbWEgdm9sdGEgbm9uIGMnw6ggbmVzc3VuIGNhbXBvIHNpbWlsZSBkYSBjdWlcclxuICogY29waWFyZTogaW4gcXVlbCBjYXNvIHNpIHBhc3NhIHBlciBnbGkgZWxlbWVudGkgbG9naWNpIGRlbGxhIGdyYWZpY2EgZ2xvYmFsZSAoY29udGVuaXRvcmUsXHJcbiAqIGV0aWNoZXR0YSwgYXJlYSBkZWwgdmFsb3JlKSwgY2hlIG9nbmkgdGlwb2xvZ2lhIHNhIHRyYWR1cnJlIG5laSBwcm9wcmkgZWxlbWVudGkuXHJcbiAqXHJcbiAqIEBwYXJhbSBmaWVsZCAgIGNhbXBvIG51b3ZvIGNoZSBkZXZlIHJpY2V2ZXJlIGxhIGdyYWZpY2FcclxuICogQHBhcmFtIHNvdXJjZXMgY2FtcGkgZ2nDoCBwcmVzZW50aSBuZWxsYSBmb3JtLCBpbiBvcmRpbmVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEdsb2JhbEluaGVyaXRlZE1hcChcclxuICAgIGZpZWxkOiBCYXNlRmllbGQsXHJcbiAgICBzb3VyY2VzOiBBcnJheTxCYXNlRmllbGQ+XHJcbik6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xyXG4gICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblxyXG4gICAgY29uc3QgdHlwZURlZiA9IGdldEZpZWxkU3R5bGVUeXBlRGVmKGZpZWxkPy5GaWVsZFR5cGUpO1xyXG4gICAgaWYgKCF0eXBlRGVmKSB7IHJldHVybiByZXN1bHQ7IH1cclxuXHJcbiAgICBHTE9CQUxfU1RZTEVfRUxFTUVOVFMuZm9yRWFjaCgoZ2xvYmFsRWxlbWVudCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldEtleXMgPSByZXNvbHZlR2xvYmFsRWxlbWVudEtleXMoZmllbGQsIGdsb2JhbEVsZW1lbnQua2V5KTtcclxuICAgICAgICBpZiAodGFyZ2V0S2V5cy5sZW5ndGggPT09IDApIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMgPz8gW10pIHtcclxuICAgICAgICAgICAgaWYgKHNvdXJjZSA9PT0gZmllbGQpIHsgY29udGludWU7IH1cclxuICAgICAgICAgICAgaWYgKE51bWJlcihzb3VyY2U/LkZpZWxkVHlwZSkgPT09IE51bWJlcih0eXBlRGVmLmZpZWxkVHlwZSkpIHsgY29udGludWU7IH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUtleXMgPSByZXNvbHZlR2xvYmFsRWxlbWVudEtleXMoc291cmNlLCBnbG9iYWxFbGVtZW50LmtleSk7XHJcbiAgICAgICAgICAgIGlmIChzb3VyY2VLZXlzLmxlbmd0aCA9PT0gMCkgeyBjb250aW51ZTsgfVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc291cmNlTWFwID0gZ2V0RWZmZWN0aXZlU3R5bGVNYXAoc291cmNlKTtcclxuICAgICAgICAgICAgbGV0IGNvcGllZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gU29sbyBnbGkgc3RhdGkgY2hlIGxhIHRpcG9sb2dpYSBkaSBkZXN0aW5hemlvbmUgY29ub3NjZSBkYXZ2ZXJvXHJcbiAgICAgICAgICAgIHR5cGVEZWYuc3RhdGVzLmZvckVhY2goKHN0YXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjc3MgPSBzb3VyY2VNYXBbc291cmNlS2V5c1swXSArIHN0YXRlLmtleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNzcyB8fCAhY3NzLnRyaW0oKSkgeyByZXR1cm47IH1cclxuICAgICAgICAgICAgICAgIHRhcmdldEtleXMuZm9yRWFjaCgodGspID0+IHsgcmVzdWx0W3RrICsgc3RhdGUua2V5XSA9IGNzczsgfSk7XHJcbiAgICAgICAgICAgICAgICBjb3BpZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb3BpZWQpIHsgYnJlYWs7IH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG4vLyNlbmRyZWdpb24gR3JhZmljYSBkaSBkZWZhdWx0IGVyZWRpdGF0YVxyXG4iXX0=
@@ -5,6 +5,7 @@ export * from './lib/eqp-dynamic-module.module';
5
5
  export * from './lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component';
6
6
  export * from './lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component';
7
7
  export * from './lib/components/private/add-form-field/add-form-field.component';
8
+ export * from './lib/components/private/field-graphics-editor/field-graphics-editor.component';
8
9
  export * from './lib/components/private/dynamic-module-field-fix/dynamic-module-field.component';
9
10
  export * from './lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component';
10
11
  export * from './lib/components/private/field-templates/attachment-field-template/attachment-field-template.component';
@@ -57,4 +58,8 @@ export * from './lib/services/utilityHelper.services';
57
58
  export * from './lib/models/graph.model';
58
59
  export * from './lib/directives/dynamic-loader/dynamic-loader.directive';
59
60
  export * from './lib/directives/speech-to-text/speech-to-text.directive';
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywyRUFBMkUsQ0FBQztBQUMxRixjQUFjLHFHQUFxRyxDQUFDO0FBQ3BILGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyxrRkFBa0YsQ0FBQztBQUNqRyxjQUFjLGtHQUFrRyxDQUFDO0FBQ2pILGNBQWMsd0dBQXdHLENBQUM7QUFDdkgsY0FBYyxrR0FBa0csQ0FBQztBQUNqSCxjQUFjLDRGQUE0RixDQUFDO0FBQzNHLGNBQWMsOEZBQThGLENBQUM7QUFDN0csY0FBYyx3R0FBd0csQ0FBQztBQUN2SCxjQUFjLGtHQUFrRyxDQUFDO0FBQ2pILGNBQWMsNEZBQTRGLENBQUM7QUFDM0csY0FBYyxvR0FBb0csQ0FBQztBQUNuSCxjQUFjLGlGQUFpRixDQUFDO0FBQ2hHLGNBQWMsdUZBQXVGLENBQUM7QUFDdEcsY0FBYyxtRkFBbUYsQ0FBQztBQUNsRyxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLDREQUE0RCxDQUFDO0FBQzNFLGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx3REFBd0QsQ0FBQztBQUN2RSxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYywwREFBMEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBlcXAtZHluYW1pYy1tb2R1bGVcclxuICovXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VxcC1keW5hbWljLW1vZHVsZS5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2V4cG9ydGVkL2VxcC1keW5hbWljLW1vZHVsZS9lcXAtZHluYW1pYy1tb2R1bGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHBvcnRlZC9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yL2VxcC1keW5hbWljLW1vZHVsZS1jb25maWd1cmF0b3IuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2FkZC1mb3JtLWZpZWxkL2FkZC1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9keW5hbWljLW1vZHVsZS1maWVsZC1maXgvZHluYW1pYy1tb2R1bGUtZmllbGQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2R5bmFtaWMtbW9kdWxlLWZpZWxkLWV4dHJhLWZpeC9keW5hbWljLW1vZHVsZS1maWVsZC1leHRyYS1maXguY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9hdHRhY2htZW50LWZpZWxkLXRlbXBsYXRlL2F0dGFjaG1lbnQtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9ib29sZWFuLWZpZWxkLXRlbXBsYXRlL2Jvb2xlYW4tZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9kYXRlLWZpZWxkLXRlbXBsYXRlL2RhdGUtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9pbWFnZS1maWVsZC10ZW1wbGF0ZS9pbWFnZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUvbGlzdC12YWx1ZS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL251bWVyaWMtZmllbGQtdGVtcGxhdGUvbnVtZXJpYy1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL3RleHQtZmllbGQtdGVtcGxhdGUvdGV4dC1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL3RleHRhcmVhLWZpZWxkLXRlbXBsYXRlL3RleHRhcmVhLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvYWRkLWZvcm0tcmVjb3JkL2FkZC1mb3JtLXJlY29yZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL3JlcGFpci1mb3JtLWZpZWxkcy9yZXBhaXItZm9ybS1maWVsZHMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2Zvcm0tcmVjb3Jkcy9saXN0LWZvcm0tcmVjb3JkL2xpc3QtZm9ybS1yZWNvcmQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaW50ZXJmYWNlcy9pQmFzZUZpZWxkQ29tcG9uZW50LmludGVyZmFjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMvaVJvb3RPYmplY3QuaW50ZXJmYWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2Jhc2VGaWVsZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9iYXNlT2JqLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2NvbnRleHQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvckNvbmZpZy5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9keW5hbWljTW9kdWxlQ29uZmlndXJhdG9yU3BlY2lmaWNDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbmZpZy5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9keW5hbWljTW9kdWxlR2VuZXJhbENvbmZpZy5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9keW5hbWljTW9kdWxlQ29tcGlsZUNvbmZpZy5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9keW5hbWljTW9kdWxlTGlzdENvbmZpZy5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9keW5hbWljTW9kdWxlUmVwYWlyQ29uZmlnLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2R5bmFtaWNNb2R1bGVGaWx0ZXJSZXN1bHRWaWV3TW9kZUVudW0ubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZVZpZXdNb2RlRW51bSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9keW5hbWljTW9kdWxlTGlzdEZvcm1SZWNvcmRBY3Rpb25zRGVmYXVsdCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9lbmRQb2ludENvbmZpZ3VyYXRpb24ubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZW50aXR5Lm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2Zvcm0ubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3RyaWdnZXIubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvc3RhdGlzdGljLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkRXh0cmFDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZmllbGRzL2F0dGFjaG1lbnRGaWVsZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9maWVsZHMvYm9vbGVhbkZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9kYXRlRmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZmllbGRzL2ltYWdlRmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZmllbGRzL2xpc3RWYWx1ZUZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9pbWFnZVNlbGVjdG9yRmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZmllbGRzL2xvb2t1cEZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9udW1lcmljRmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZmllbGRzL3RleHRhcmVhRmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZmllbGRzL3RleHRGaWVsZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2N1c3RvbS1mb3JtLXZhbGlkYXRvcnMuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL2VxcC1keW5hbWljLW1vZHVsZS1kaWFsb2cuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3NwaW5uZXIuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3V0aWxpdHlIZWxwZXIuc2VydmljZXMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZ3JhcGgubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2R5bmFtaWMtbG9hZGVyL2R5bmFtaWMtbG9hZGVyLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvc3BlZWNoLXRvLXRleHQvc3BlZWNoLXRvLXRleHQuZGlyZWN0aXZlJzsiXX0=
61
+ export * from './lib/utils/field-style-catalog';
62
+ export * from './lib/utils/css-declarations';
63
+ export * from './lib/utils/css-property-catalog';
64
+ export * from './lib/utils/css-color';
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2VxcC1keW5hbWljLW1vZHVsZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywyRUFBMkUsQ0FBQztBQUMxRixjQUFjLHFHQUFxRyxDQUFDO0FBQ3BILGNBQWMsa0VBQWtFLENBQUM7QUFDakYsY0FBYyxnRkFBZ0YsQ0FBQztBQUMvRixjQUFjLGtGQUFrRixDQUFDO0FBQ2pHLGNBQWMsa0dBQWtHLENBQUM7QUFDakgsY0FBYyx3R0FBd0csQ0FBQztBQUN2SCxjQUFjLGtHQUFrRyxDQUFDO0FBQ2pILGNBQWMsNEZBQTRGLENBQUM7QUFDM0csY0FBYyw4RkFBOEYsQ0FBQztBQUM3RyxjQUFjLHdHQUF3RyxDQUFDO0FBQ3ZILGNBQWMsa0dBQWtHLENBQUM7QUFDakgsY0FBYyw0RkFBNEYsQ0FBQztBQUMzRyxjQUFjLG9HQUFvRyxDQUFDO0FBQ25ILGNBQWMsaUZBQWlGLENBQUM7QUFDaEcsY0FBYyx1RkFBdUYsQ0FBQztBQUN0RyxjQUFjLG1GQUFtRixDQUFDO0FBQ2xHLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLG9EQUFvRCxDQUFDO0FBQ25FLGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsMERBQTBELENBQUM7QUFDekUsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHdEQUF3RCxDQUFDO0FBQ3ZFLGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywwREFBMEQsQ0FBQztBQUN6RSxjQUFjLDBEQUEwRCxDQUFDO0FBQ3pFLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZXFwLWR5bmFtaWMtbW9kdWxlXHJcbiAqL1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9lcXAtZHluYW1pYy1tb2R1bGUubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9leHBvcnRlZC9lcXAtZHluYW1pYy1tb2R1bGUvZXFwLWR5bmFtaWMtbW9kdWxlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZXhwb3J0ZWQvZXFwLWR5bmFtaWMtbW9kdWxlLWNvbmZpZ3VyYXRvci9lcXAtZHluYW1pYy1tb2R1bGUtY29uZmlndXJhdG9yLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9hZGQtZm9ybS1maWVsZC9hZGQtZm9ybS1maWVsZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtZ3JhcGhpY3MtZWRpdG9yL2ZpZWxkLWdyYXBoaWNzLWVkaXRvci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZHluYW1pYy1tb2R1bGUtZmllbGQtZml4L2R5bmFtaWMtbW9kdWxlLWZpZWxkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9keW5hbWljLW1vZHVsZS1maWVsZC1leHRyYS1maXgvZHluYW1pYy1tb2R1bGUtZmllbGQtZXh0cmEtZml4LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvYXR0YWNobWVudC1maWVsZC10ZW1wbGF0ZS9hdHRhY2htZW50LWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvYm9vbGVhbi1maWVsZC10ZW1wbGF0ZS9ib29sZWFuLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvZGF0ZS1maWVsZC10ZW1wbGF0ZS9kYXRlLWZpZWxkLXRlbXBsYXRlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9maWVsZC10ZW1wbGF0ZXMvaW1hZ2UtZmllbGQtdGVtcGxhdGUvaW1hZ2UtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9saXN0LXZhbHVlLWZpZWxkLXRlbXBsYXRlL2xpc3QtdmFsdWUtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9udW1lcmljLWZpZWxkLXRlbXBsYXRlL251bWVyaWMtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy90ZXh0LWZpZWxkLXRlbXBsYXRlL3RleHQtZmllbGQtdGVtcGxhdGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy90ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZS90ZXh0YXJlYS1maWVsZC10ZW1wbGF0ZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZm9ybS1yZWNvcmRzL2FkZC1mb3JtLXJlY29yZC9hZGQtZm9ybS1yZWNvcmQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wcml2YXRlL2Zvcm0tcmVjb3Jkcy9yZXBhaXItZm9ybS1maWVsZHMvcmVwYWlyLWZvcm0tZmllbGRzLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcHJpdmF0ZS9mb3JtLXJlY29yZHMvbGlzdC1mb3JtLXJlY29yZC9saXN0LWZvcm0tcmVjb3JkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ludGVyZmFjZXMvaUJhc2VGaWVsZENvbXBvbmVudC5pbnRlcmZhY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnRlcmZhY2VzL2lSb290T2JqZWN0LmludGVyZmFjZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9iYXNlRmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvYmFzZU9iai5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9jb250ZXh0Lm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2R5bmFtaWNNb2R1bGVDb25maWd1cmF0b3JDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbmZpZ3VyYXRvclNwZWNpZmljQ29uZmlnLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2R5bmFtaWNNb2R1bGVDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUdlbmVyYWxDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUNvbXBpbGVDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RDb25maWcubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZVJlcGFpckNvbmZpZy5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9keW5hbWljTW9kdWxlRmlsdGVyUmVzdWx0Vmlld01vZGVFbnVtLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2R5bmFtaWNNb2R1bGVWaWV3TW9kZUVudW0nO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZHluYW1pY01vZHVsZUxpc3RGb3JtUmVjb3JkQWN0aW9uc0RlZmF1bHQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZW5kUG9pbnRDb25maWd1cmF0aW9uLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2VudGl0eS5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9mb3JtLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3JlY29yZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy90cmlnZ2VyLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL3N0YXRpc3RpYy5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9maWVsZEV4dHJhQ29uZmlnLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9hdHRhY2htZW50RmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvZmllbGRzL2Jvb2xlYW5GaWVsZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9maWVsZHMvZGF0ZUZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9pbWFnZUZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9saXN0VmFsdWVGaWVsZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9maWVsZHMvaW1hZ2VTZWxlY3RvckZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy9sb29rdXBGaWVsZC5tb2RlbCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9maWVsZHMvbnVtZXJpY0ZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy90ZXh0YXJlYUZpZWxkLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2ZpZWxkcy90ZXh0RmllbGQubW9kZWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9jdXN0b20tZm9ybS12YWxpZGF0b3JzLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9lcXAtZHluYW1pYy1tb2R1bGUtZGlhbG9nLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9zcGlubmVyLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2dyYXBoLm1vZGVsJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9keW5hbWljLWxvYWRlci9keW5hbWljLWxvYWRlci5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL3NwZWVjaC10by10ZXh0L3NwZWVjaC10by10ZXh0LmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzL2ZpZWxkLXN0eWxlLWNhdGFsb2cnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9jc3MtZGVjbGFyYXRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMvY3NzLXByb3BlcnR5LWNhdGFsb2cnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91dGlscy9jc3MtY29sb3InO1xyXG4iXX0=