@simpleangularcontrols/sac-common 16.0.0-rc.2 → 16.0.0-rc.4

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 (83) hide show
  1. package/common/basedatetimecontrol.d.ts +33 -33
  2. package/common/basedatetimecontrol.d.ts.map +1 -1
  3. package/common/baseinputcontrol.d.ts +9 -9
  4. package/common/baseinputcontrol.d.ts.map +1 -1
  5. package/common/basemodelcontrol.d.ts +122 -89
  6. package/common/basemodelcontrol.d.ts.map +1 -1
  7. package/common/baseuploadcontrol.d.ts +140 -140
  8. package/common/baseuploadcontrol.d.ts.map +1 -1
  9. package/controls/checkbox/checkbox.d.ts +7 -3
  10. package/controls/checkbox/checkbox.d.ts.map +1 -1
  11. package/controls/checkbox/radiobuttons.d.ts +5 -4
  12. package/controls/checkbox/radiobuttons.d.ts.map +1 -1
  13. package/controls/contextmenu/contextmenu.d.ts +42 -42
  14. package/controls/contextmenu/contextmenu.d.ts.map +1 -1
  15. package/controls/contextmenu/contextmenuanchor.d.ts +2 -2
  16. package/controls/contextmenu/contextmenuanchor.d.ts.map +1 -1
  17. package/controls/contextmenu/contextmenucontainer.d.ts +2 -2
  18. package/controls/contextmenu/contextmenucontainer.d.ts.map +1 -1
  19. package/controls/datetime/date.d.ts +7 -7
  20. package/controls/datetime/date.d.ts.map +1 -1
  21. package/controls/datetime/datetime.d.ts +7 -7
  22. package/controls/datetime/datetime.d.ts.map +1 -1
  23. package/controls/datetime/time.d.ts +7 -7
  24. package/controls/datetime/time.d.ts.map +1 -1
  25. package/controls/form/form.d.ts +7 -43
  26. package/controls/form/form.d.ts.map +1 -1
  27. package/controls/input/inputdecimal.d.ts +21 -21
  28. package/controls/input/inputdecimal.d.ts.map +1 -1
  29. package/controls/layout/formlayout.d.ts +45 -0
  30. package/controls/layout/formlayout.d.ts.map +1 -0
  31. package/controls/list/dropdown.d.ts +45 -45
  32. package/controls/list/dropdown.d.ts.map +1 -1
  33. package/controls/multilanguage/multilanguageinput.d.ts +5 -4
  34. package/controls/multilanguage/multilanguageinput.d.ts.map +1 -1
  35. package/controls/multilanguage/multilanguageinputarea.d.ts +5 -4
  36. package/controls/multilanguage/multilanguageinputarea.d.ts.map +1 -1
  37. package/controls/tinymce/tinymce.d.ts +63 -63
  38. package/controls/tinymce/tinymce.d.ts.map +1 -1
  39. package/esm2022/common/basedatetimecontrol.mjs +75 -81
  40. package/esm2022/common/baseinputcontrol.mjs +20 -20
  41. package/esm2022/common/basemodelcontrol.mjs +295 -201
  42. package/esm2022/common/baseuploadcontrol.mjs +225 -224
  43. package/esm2022/controls/checkbox/checkbox.mjs +11 -5
  44. package/esm2022/controls/checkbox/radiobuttons.mjs +13 -12
  45. package/esm2022/controls/contextmenu/contextmenu.mjs +85 -75
  46. package/esm2022/controls/contextmenu/contextmenuanchor.mjs +6 -4
  47. package/esm2022/controls/contextmenu/contextmenucontainer.mjs +6 -4
  48. package/esm2022/controls/datetime/date.mjs +12 -12
  49. package/esm2022/controls/datetime/datetime.mjs +15 -15
  50. package/esm2022/controls/datetime/time.mjs +15 -15
  51. package/esm2022/controls/form/form.mjs +26 -80
  52. package/esm2022/controls/input/inputdecimal.mjs +58 -53
  53. package/esm2022/controls/layout/formlayout.mjs +73 -0
  54. package/esm2022/controls/list/dropdown.mjs +110 -91
  55. package/esm2022/controls/multilanguage/multilanguageinput.mjs +10 -9
  56. package/esm2022/controls/multilanguage/multilanguageinputarea.mjs +10 -9
  57. package/esm2022/controls/tinymce/tinymce.mjs +102 -95
  58. package/esm2022/interfaces/ISacConfigurationService.mjs +2 -0
  59. package/esm2022/interfaces/ISacIconService.mjs +1 -1
  60. package/esm2022/interfaces/ISacLabelSizes.mjs +2 -0
  61. package/esm2022/public_api.mjs +20 -18
  62. package/esm2022/services/index.mjs +6 -5
  63. package/esm2022/services/sac-configuration.service.mjs +71 -0
  64. package/esm2022/utilities/guid.mjs +16 -0
  65. package/fesm2022/simpleangularcontrols-sac-common.mjs +2157 -1916
  66. package/fesm2022/simpleangularcontrols-sac-common.mjs.map +1 -1
  67. package/interfaces/ISacConfigurationService.d.ts +30 -0
  68. package/interfaces/ISacConfigurationService.d.ts.map +1 -0
  69. package/interfaces/ISacIconService.d.ts +2 -2
  70. package/interfaces/ISacIconService.d.ts.map +1 -1
  71. package/interfaces/ISacLabelSizes.d.ts +27 -0
  72. package/interfaces/ISacLabelSizes.d.ts.map +1 -0
  73. package/package.json +2 -2
  74. package/public_api.d.ts +19 -17
  75. package/public_api.d.ts.map +1 -1
  76. package/services/index.d.ts +5 -4
  77. package/services/index.d.ts.map +1 -1
  78. package/services/sac-configuration.service.d.ts +70 -0
  79. package/services/sac-configuration.service.d.ts.map +1 -0
  80. package/simpleangularcontrols-sac-common-16.0.0-rc.4.tgz +0 -0
  81. package/utilities/guid.d.ts +5 -0
  82. package/utilities/guid.d.ts.map +1 -0
  83. package/simpleangularcontrols-sac-common-16.0.0-rc.2.tgz +0 -0
@@ -1,92 +1,95 @@
1
1
  import { Directive, Host, Input } from '@angular/core';
2
2
  import { FormControlName, FormGroupDirective, NgControl, } from '@angular/forms';
3
3
  import { Observable } from 'rxjs';
4
- import { SacDefaultLocalisationService, SACLOCALISATION_SERVICE, } from '../services/sac-localisation.service';
4
+ import { SACCONFIGURATION_SERVICE, SacDefaultConfigurationService, } from '../services/sac-configuration.service';
5
+ import { SACLOCALISATION_SERVICE, SacDefaultLocalisationService, } from '../services/sac-localisation.service';
5
6
  import { convertToBoolean } from '../utilities/convertion';
7
+ import { createGuid } from '../utilities/guid';
6
8
  import * as i0 from "@angular/core";
7
- import * as i1 from "../controls/form/form";
9
+ import * as i1 from "../controls/layout/formlayout";
8
10
  /**
9
11
  * Abstract Klasse für SacBaseModelControl. Implements ControlValueAccessor, Validator, OnInit
10
12
  */
11
13
  class SacBaseModelControl {
14
+ // #endregion Properties
15
+ // #region Constructors
12
16
  /**
13
- * Definiert den Label Text
17
+ * Constructor
18
+ * @param formlayout SacFormLayoutCommon to define scoped layout settings
19
+ * @param injector Injector for injecting services
14
20
  */
15
- set label(v) {
16
- this._label = v;
17
- this.UpdateLabelToControl();
18
- }
19
- /**
20
- * Definiert den Label Text
21
- */
22
- get label() {
23
- return this._label;
24
- }
25
- /**
26
- * Definiert ob das Control disabled ist
27
- */
28
- get isdisabled() {
29
- return this._disabledForm || this.disabled;
30
- }
31
- // #endregion
32
- // #region Constructor
33
- /**
34
- * Konstruktor
35
- * Inject des Formulars
36
- * @parent SacFormCommon
37
- * @injector Injector
38
- */
39
- constructor(parent, injector) {
21
+ constructor(formlayout, injector) {
40
22
  this.injector = injector;
23
+ // #region Properties
24
+ /**
25
+ * Inline Errors für das Control
26
+ */
27
+ this._inlineerrorenabled = null;
28
+ this._label = '';
29
+ /**
30
+ * Boolean Property dirty; default Wert - false
31
+ */
32
+ this._dirty = false;
41
33
  /**
42
34
  * SacModel Form ist disabled
43
35
  */
44
36
  this._disabledForm = false;
45
- this._label = '';
46
- // #endregion
47
- // #region Properties
48
37
  /**
49
- * Name des Controls
38
+ * Boolean Property touched; default Wert - false
50
39
  */
51
- this.name = '';
40
+ this._touched = false;
52
41
  /**
53
- * Definiert die Labelgröse
42
+ * Interne Variable, die den Wert des Controls hält
54
43
  */
55
- this.labelsize = undefined;
44
+ this._value = null;
56
45
  /**
57
- * Deaktiviert das Label im Template
46
+ * Form layout instance if exists
58
47
  */
59
- this.disablelabel = false;
48
+ this.formlayout = null;
60
49
  /**
61
50
  * Deaktiviert das Input Control
62
51
  */
63
52
  this.disabled = false;
64
53
  /**
65
- * Kontroliert, ob das Label adaptive ist
54
+ * Deaktiviert das Label im Template
66
55
  */
67
- this.isadaptivelabel = undefined;
56
+ this.disablelabel = false;
68
57
  /**
69
- * Definiert, ob das Control Sprachspezifisch ist
58
+ * defines that error messages are displayed under the controls
70
59
  */
71
- this.islanguagespecific = false;
60
+ this.inlineError = true;
72
61
  /**
73
- * Interne Variable, die den Wert des Controls hält
62
+ * defines that the labels are displayed as adaptive labels
74
63
  */
75
- this._value = null;
64
+ this.isAdaptiveLabel = false;
76
65
  /**
77
- * Boolean Property dirty; default Wert - false
66
+ * default labe size for large devices
78
67
  */
79
- this._dirty = false;
68
+ this.labelSizeLg = null;
80
69
  /**
81
- * Boolean Property touched; default Wert - false
70
+ * default label size for medium devices
82
71
  */
83
- this._touched = false;
72
+ this.labelSizeMd = null;
84
73
  /**
85
- * Inline Errors für das Control
74
+ * default label size for small devices
86
75
  */
87
- this._inlineerrorenabled = null;
88
- // #endregion
89
- // #region Implementation ControlValueAccessor
76
+ this.labelSizeSm = null;
77
+ /**
78
+ * default label size for extra large devices
79
+ */
80
+ this.labelSizeXl = null;
81
+ /**
82
+ * default label column size
83
+ */
84
+ this.labelSizeXs = null;
85
+ /**
86
+ * default label size for extra extra large devices
87
+ */
88
+ this.labelSizeXxl = null;
89
+ /**
90
+ * Name des Controls
91
+ */
92
+ this.name = createGuid();
90
93
  /**
91
94
  * Leere Implementation von "propagateChange". Muss gemacht werden, damit kein Fehler entsteht
92
95
  */
@@ -95,76 +98,30 @@ class SacBaseModelControl {
95
98
  * Leere Implementation von "propagateTouch". Muss gemacht werden, damit kein Fehler entsteht
96
99
  */
97
100
  this.propagateTouch = () => { };
98
- this.parent = parent;
101
+ this.formlayout = formlayout;
99
102
  this.lngResourceService = injector.get(SACLOCALISATION_SERVICE, new SacDefaultLocalisationService());
103
+ this.configurationService = injector.get(SACCONFIGURATION_SERVICE, new SacDefaultConfigurationService());
100
104
  }
101
- // #endregion
102
- // #region Control Events
105
+ // #endregion Constructors
106
+ // #region Public Getters And Setters
103
107
  /**
104
- * Init Event
108
+ * Aktiviert oder Deaktiviert die Inline Errors für das Control
105
109
  */
106
- ngOnInit() {
107
- // receive form via formcontrolname or formcontrol instance
108
- const formControl = this.injector.get(NgControl, null);
109
- if (formControl instanceof FormControlName) {
110
- const form = this.injector.get(FormGroupDirective, null);
111
- this.ngControl = form.getControl(formControl);
110
+ set inlineerrorenabled(value) {
111
+ if (value === null || value === undefined) {
112
+ this._inlineerrorenabled = null;
112
113
  }
113
114
  else {
114
- this.ngControl = formControl.control;
115
- }
116
- this.UpdateLabelToControl();
117
- /**
118
- * Label Size von Formular lesen
119
- */
120
- if (this.labelsize === undefined) {
121
- if (this.parent?.labelsize !== undefined) {
122
- this.labelsize = this.parent.labelsize;
123
- }
124
- else {
125
- this.labelsize = 4;
126
- }
127
- }
128
- /**
129
- * Adaptive Label from Form
130
- */
131
- if (this.isadaptivelabel === undefined) {
132
- if (this.parent?.isadaptivelabel !== undefined) {
133
- this.isadaptivelabel = this.parent.isadaptivelabel;
134
- }
135
- else {
136
- this.isadaptivelabel = false;
137
- }
115
+ this._inlineerrorenabled = convertToBoolean(value);
138
116
  }
139
- this.OnClassInit();
140
117
  }
141
118
  /**
142
- * Methode, damit andere Controls änderungen im Control mitbekommen können
143
- * Zur Änderungsinfo die Methode propagateChange aufrufen.
144
- */
145
- registerOnChange(fn) {
146
- this.propagateChange = (obj) => fn(obj);
147
- }
148
- /**
149
- * Methode, damit andere Controls änderungen mitbekommen, wenn das Control aktiviert (Focus) wird.
150
- */
151
- registerOnTouched(fn) {
152
- this.propagateTouch = (obj) => fn(obj);
153
- }
154
- /**
155
- * Methode zum schreiben von Werten aus dem Model in das Control
156
- */
157
- writeValue(value) {
158
- this._value = value;
159
- }
160
- /**
161
- * Setzt das Control auf Disabled
119
+ * Definiert den Label Text
162
120
  */
163
- setDisabledState(isDisabled) {
164
- this._disabledForm = isDisabled;
121
+ set label(v) {
122
+ this._label = v;
123
+ this.UpdateLabelToControl();
165
124
  }
166
- // #endregion
167
- // #region Control Value
168
125
  /**
169
126
  * Set Methode für NgModel Binding in Html Markup
170
127
  * Input wird benötigt, damit der Wert auch über das Markup gesetzt werden kann.
@@ -177,74 +134,60 @@ class SacBaseModelControl {
177
134
  this.propagateChange(this._value);
178
135
  }
179
136
  /**
180
- * Get Methode für NgModel Binding in Html Markup
137
+ * Methode ergibt Boolean Wert für dirty
181
138
  */
182
- get value() {
183
- return this._value;
139
+ get dirty() {
140
+ if (this.ngControl !== null) {
141
+ this._dirty = this.ngControl.dirty;
142
+ }
143
+ return this._dirty;
184
144
  }
185
- /**
186
- * Methode die den Wert des Inputs setzt
187
- */
188
- setValue(v) {
189
- this.value = v;
145
+ get inlineerrorenabled() {
146
+ return this._inlineerrorenabled;
190
147
  }
191
- // #endregion
192
- // #region Internal Properties
193
148
  /**
194
- * Berechnet die Breite des Labels
149
+ * Methode ergibt boolean Wert wenn Form invalid oder nicht invalid ist
195
150
  */
196
- get _inputsize() {
197
- return 12 - this.labelsize;
151
+ get invalid() {
152
+ return (this.ngControl !== undefined &&
153
+ this.ngControl !== null &&
154
+ this.ngControl.invalid);
198
155
  }
199
- // #endregion
200
- // #region Protected Helper Methods
201
156
  /**
202
- * Method can be used to Set Properties at Class Init
203
- */
204
- OnClassInit() { }
205
- /**
206
- * Methode ergibt Decimal Symbol
157
+ * Definiert ob das Control disabled ist
207
158
  */
208
- GetDecimalSymbol() {
209
- return '.';
159
+ get isdisabled() {
160
+ return this._disabledForm || this.disabled;
210
161
  }
211
162
  /**
212
- * Method can Overwriten in Parent Classes
213
- * @param value Wert welcher in den korrekten Typ konvertiert werden soll
214
- * @returns Wert im korrekten Typ
163
+ * Returns whether the inline error messages are active for this control.
215
164
  */
216
- ConvertInputValue(value) {
217
- return value;
218
- }
219
- UpdateLabelToControl() {
220
- // HACK: Add addition property to FormControl. Can be fixed if solution for ticket: https://github.com/angular/angular/issues/19686
221
- if (this.ngControl) {
222
- this.ngControl.controllabel = this.label;
165
+ get isinlineerrorenabled() {
166
+ if (this.formlayout?.IsInlineErrorEnabled === null ||
167
+ this.formlayout?.IsInlineErrorEnabled === undefined) {
168
+ return this._inlineerrorenabled;
223
169
  }
224
- }
225
- // #endregion
226
- //#region Validation Base
227
- /**
228
- * Validator Methode
229
- */
230
- validate(c) {
231
- const error = this.validateData(c);
232
- return error;
170
+ return (this.formlayout.IsInlineErrorEnabled !== false &&
171
+ this._inlineerrorenabled !== false);
233
172
  }
234
173
  /**
235
- * Methode registriert Änderungen bei der Validierung
174
+ * Definiert den Label Text
236
175
  */
237
- registerOnValidatorChange(fn) {
238
- this._onChange = fn;
176
+ get label() {
177
+ return this._label;
239
178
  }
240
179
  /**
241
- * Methode ergibt Boolean Wert für dirty
180
+ * returns an object with all label sizes. These values can then be transferred to corresponding CSS classes using a pipe
242
181
  */
243
- get dirty() {
244
- if (this.ngControl !== null) {
245
- this._dirty = this.ngControl.dirty;
246
- }
247
- return this._dirty;
182
+ get labelSizes() {
183
+ return {
184
+ labelSizeSm: this.labelSizeSm,
185
+ labelSizeMd: this.labelSizeMd,
186
+ labelSizeXs: this.labelSizeXs,
187
+ labelSizeXl: this.labelSizeXl,
188
+ labelSizeXxl: this.labelSizeXxl,
189
+ labelSizeLg: this.labelSizeLg,
190
+ };
248
191
  }
249
192
  /**
250
193
  * Methode ergibt Boolean Wert für touched
@@ -256,20 +199,13 @@ class SacBaseModelControl {
256
199
  return this._touched;
257
200
  }
258
201
  /**
259
- * Methode ergibt boolean Wert wenn Form invalid oder nicht invalid ist
260
- */
261
- get invalid() {
262
- return (this.ngControl !== undefined &&
263
- this.ngControl !== null &&
264
- this.ngControl.invalid);
265
- }
266
- /**
267
- * Methode ergibt boolean touched = true
202
+ * Get Methode für NgModel Binding in Html Markup
268
203
  */
269
- onTouch() {
270
- this._touched = true;
271
- this.propagateTouch();
204
+ get value() {
205
+ return this._value;
272
206
  }
207
+ // #endregion Public Getters And Setters
208
+ // #region Public Methods
273
209
  /**
274
210
  * Methode ergibt Error anhand von gegebenen Kriterien
275
211
  */
@@ -305,6 +241,99 @@ class SacBaseModelControl {
305
241
  parameters['FIELD'] = errorItem.fieldName;
306
242
  return this.lngResourceService.GetString(errorItem.errorMessageKey, parameters);
307
243
  }
244
+ /**
245
+ * Init Event
246
+ */
247
+ ngOnInit() {
248
+ // receive form via formcontrolname or formcontrol instance
249
+ const formControl = this.injector.get(NgControl, null);
250
+ if (formControl instanceof FormControlName) {
251
+ const form = this.injector.get(FormGroupDirective, null);
252
+ this.ngControl = form.getControl(formControl);
253
+ }
254
+ else {
255
+ if (formControl) {
256
+ this.ngControl = formControl.control;
257
+ }
258
+ }
259
+ this.UpdateLabelToControl();
260
+ // set label sizes from formlayout directive
261
+ this.setLabelSizes();
262
+ // set adaptive label property from formlayout directive
263
+ this.setIsAdaptiveLabel();
264
+ this.OnClassInit();
265
+ }
266
+ /**
267
+ * Methode ergibt boolean touched = true
268
+ */
269
+ onTouch() {
270
+ this._touched = true;
271
+ this.propagateTouch();
272
+ }
273
+ /**
274
+ * Methode, damit andere Controls änderungen im Control mitbekommen können
275
+ * Zur Änderungsinfo die Methode propagateChange aufrufen.
276
+ */
277
+ registerOnChange(fn) {
278
+ this.propagateChange = (obj) => fn(obj);
279
+ }
280
+ /**
281
+ * Methode, damit andere Controls änderungen mitbekommen, wenn das Control aktiviert (Focus) wird.
282
+ */
283
+ registerOnTouched(fn) {
284
+ this.propagateTouch = (obj) => fn(obj);
285
+ }
286
+ /**
287
+ * Methode registriert Änderungen bei der Validierung
288
+ */
289
+ registerOnValidatorChange(fn) {
290
+ this._onChange = fn;
291
+ }
292
+ /**
293
+ * Setzt das Control auf Disabled
294
+ */
295
+ setDisabledState(isDisabled) {
296
+ this._disabledForm = isDisabled;
297
+ }
298
+ /**
299
+ * Methode die den Wert des Inputs setzt
300
+ */
301
+ setValue(v) {
302
+ this.value = v;
303
+ }
304
+ /**
305
+ * Validator Methode
306
+ */
307
+ validate(c) {
308
+ const error = this.validateData(c);
309
+ return error;
310
+ }
311
+ /**
312
+ * Methode zum schreiben von Werten aus dem Model in das Control
313
+ */
314
+ writeValue(value) {
315
+ this._value = value;
316
+ }
317
+ // #endregion Public Abstract Methods
318
+ // #region Protected Methods
319
+ /**
320
+ * Method can Overwriten in Parent Classes
321
+ * @param value Wert welcher in den korrekten Typ konvertiert werden soll
322
+ * @returns Wert im korrekten Typ
323
+ */
324
+ ConvertInputValue(value) {
325
+ return value;
326
+ }
327
+ /**
328
+ * Methode ergibt Decimal Symbol
329
+ */
330
+ GetDecimalSymbol() {
331
+ return '.';
332
+ }
333
+ /**
334
+ * Method can be used to Set Properties at Class Init
335
+ */
336
+ OnClassInit() { }
308
337
  /**
309
338
  * Aktualisiert den NgModel Wert und die Gültigkeit des Validators des Controls
310
339
  */
@@ -313,56 +342,121 @@ class SacBaseModelControl {
313
342
  this.ngControl.updateValueAndValidity({ onlySelf: true });
314
343
  }
315
344
  }
345
+ // #endregion Protected Methods
346
+ // #region Private Methods
347
+ UpdateLabelToControl() {
348
+ // HACK: Add addition property to FormControl. Can be fixed if solution for ticket: https://github.com/angular/angular/issues/19686
349
+ if (this.ngControl) {
350
+ this.ngControl.controllabel = this.label;
351
+ }
352
+ }
316
353
  /**
317
- * Aktiviert oder Deaktiviert die Inline Errors für das Control
354
+ * Set adaptive label property from parent layout control
318
355
  */
319
- set inlineerrorenabled(value) {
320
- if (value === null || value === undefined) {
321
- this._inlineerrorenabled = null;
322
- }
323
- else {
324
- this._inlineerrorenabled = convertToBoolean(value);
356
+ setIsAdaptiveLabel() {
357
+ if (!this.isAdaptiveLabel) {
358
+ if (this.formlayout?.isAdaptiveLabel !== undefined) {
359
+ this.isAdaptiveLabel = this.formlayout.isAdaptiveLabel;
360
+ }
361
+ else {
362
+ this.isAdaptiveLabel = false;
363
+ }
325
364
  }
326
365
  }
327
- get inlineerrorenabled() {
328
- return this._inlineerrorenabled;
329
- }
330
366
  /**
331
- * Returns whether the inline error messages are active for this control.
367
+ * Set label sizes from property or parent layout control
332
368
  */
333
- get isinlineerrorenabled() {
334
- if (this.parent?.IsInlineErrorEnabled === null ||
335
- this.parent?.IsInlineErrorEnabled === undefined) {
336
- return this._inlineerrorenabled;
369
+ setLabelSizes() {
370
+ // set size extra small
371
+ if (!this.labelSizeXs) {
372
+ if (this.formlayout?.labelSizeXs) {
373
+ this.labelSizeXs = this.formlayout.labelSizeXs;
374
+ }
375
+ else {
376
+ this.labelSizeXs = this.configurationService.LabelSizeXs;
377
+ }
378
+ }
379
+ // set size small
380
+ if (!this.labelSizeSm) {
381
+ if (this.formlayout?.labelSizeSm) {
382
+ this.labelSizeSm = this.formlayout.labelSizeSm;
383
+ }
384
+ else {
385
+ this.labelSizeSm = this.configurationService.LabelSizeSm;
386
+ }
387
+ }
388
+ // set size medium
389
+ if (!this.labelSizeMd) {
390
+ if (this.formlayout?.labelSizeMd) {
391
+ this.labelSizeMd = this.formlayout.labelSizeMd;
392
+ }
393
+ else {
394
+ this.labelSizeMd = this.configurationService.LabelSizeMd;
395
+ }
396
+ }
397
+ // set size large
398
+ if (!this.labelSizeLg) {
399
+ if (this.formlayout?.labelSizeLg) {
400
+ this.labelSizeLg = this.formlayout.labelSizeLg;
401
+ }
402
+ else {
403
+ this.labelSizeLg = this.configurationService.LabelSizeLg;
404
+ }
405
+ }
406
+ // set size extra large
407
+ if (!this.labelSizeXl) {
408
+ if (this.formlayout?.labelSizeXl) {
409
+ this.labelSizeXl = this.formlayout.labelSizeXl;
410
+ }
411
+ else {
412
+ this.labelSizeXl = this.configurationService.LabelSizeXl;
413
+ }
414
+ }
415
+ // set size extra extra large
416
+ if (!this.labelSizeXxl) {
417
+ if (this.formlayout?.labelSizeXxl) {
418
+ this.labelSizeXxl = this.formlayout.labelSizeXxl;
419
+ }
420
+ else {
421
+ this.labelSizeXxl = this.configurationService.LabelSizeXxl;
422
+ }
337
423
  }
338
- return (this.parent.IsInlineErrorEnabled !== false &&
339
- this._inlineerrorenabled !== false);
340
424
  }
341
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacBaseModelControl, deps: [{ token: i1.SacFormCommon, host: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
342
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SacBaseModelControl, inputs: { name: "name", label: "label", labelsize: "labelsize", disablelabel: "disablelabel", disabled: "disabled", isadaptivelabel: "isadaptivelabel", islanguagespecific: "islanguagespecific", value: "value", inlineerrorenabled: "inlineerrorenabled" }, ngImport: i0 }); }
425
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacBaseModelControl, deps: [{ token: i1.SacFormLayoutCommon, host: true }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
426
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: SacBaseModelControl, inputs: { disabled: "disabled", disablelabel: "disablelabel", inlineError: "inlineError", isAdaptiveLabel: "isAdaptiveLabel", labelSizeLg: "labelSizeLg", labelSizeMd: "labelSizeMd", labelSizeSm: "labelSizeSm", labelSizeXl: "labelSizeXl", labelSizeXs: "labelSizeXs", labelSizeXxl: "labelSizeXxl", name: "name", inlineerrorenabled: "inlineerrorenabled", label: "label", value: "value" }, ngImport: i0 }); }
343
427
  }
344
428
  export { SacBaseModelControl };
345
429
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SacBaseModelControl, decorators: [{
346
430
  type: Directive
347
- }], ctorParameters: function () { return [{ type: i1.SacFormCommon, decorators: [{
431
+ }], ctorParameters: function () { return [{ type: i1.SacFormLayoutCommon, decorators: [{
348
432
  type: Host
349
- }] }, { type: i0.Injector }]; }, propDecorators: { name: [{
433
+ }] }, { type: i0.Injector }]; }, propDecorators: { disabled: [{
350
434
  type: Input
351
- }], label: [{
435
+ }], disablelabel: [{
352
436
  type: Input
353
- }], labelsize: [{
437
+ }], inlineError: [{
354
438
  type: Input
355
- }], disablelabel: [{
439
+ }], isAdaptiveLabel: [{
356
440
  type: Input
357
- }], disabled: [{
441
+ }], labelSizeLg: [{
358
442
  type: Input
359
- }], isadaptivelabel: [{
443
+ }], labelSizeMd: [{
360
444
  type: Input
361
- }], islanguagespecific: [{
445
+ }], labelSizeSm: [{
362
446
  type: Input
363
- }], value: [{
447
+ }], labelSizeXl: [{
448
+ type: Input
449
+ }], labelSizeXs: [{
450
+ type: Input
451
+ }], labelSizeXxl: [{
452
+ type: Input
453
+ }], name: [{
364
454
  type: Input
365
455
  }], inlineerrorenabled: [{
366
456
  type: Input
457
+ }], label: [{
458
+ type: Input
459
+ }], value: [{
460
+ type: Input
367
461
  }] } });
368
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZW1vZGVsY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1jb21tb24vc3JjL2NvbW1vbi9iYXNlbW9kZWxjb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFZLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBSUwsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixTQUFTLEdBR1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSWxDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsdUJBQXVCLEdBQ3hCLE1BQU0sc0NBQXNDLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUczRDs7R0FFRztBQUNILE1BQ3NCLG1CQUFtQjtJQWdDdkM7O09BRUc7SUFDSCxJQUFhLEtBQUssQ0FBQyxDQUFTO1FBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFDRDs7T0FFRztJQUNILElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBdUJEOztPQUVHO0lBQ0gsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDN0MsQ0FBQztJQUVELGFBQWE7SUFFYixzQkFBc0I7SUFFdEI7Ozs7O09BS0c7SUFDSCxZQUFvQixNQUFxQixFQUFVLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUEzRXJFOztXQUVHO1FBQ08sa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFVakMsV0FBTSxHQUFXLEVBQUUsQ0FBQztRQUU1QixhQUFh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QkFBbUI7bUdBQW5CLG1CQUFtQjs7U0FBbkIsbUJBQW1COzRGQUFuQixtQkFBbUI7a0JBRHhDLFNBQVM7OzBCQXFGSyxJQUFJO21FQXJEUixJQUFJO3NCQUFaLEtBQUs7Z0JBSU8sS0FBSztzQkFBakIsS0FBSztnQkFjRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxlQUFlO3NCQUF2QixLQUFLO2dCQUlHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFtSkYsS0FBSztzQkFEUixLQUFLO2dCQWdNRixrQkFBa0I7c0JBRHJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBGb3JtQ29udHJvbE5hbWUsXHJcbiAgRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gIE5nQ29udHJvbCxcclxuICBWYWxpZGF0aW9uRXJyb3JzLFxyXG4gIFZhbGlkYXRvcixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2FjRm9ybUNvbW1vbiB9IGZyb20gJy4uL2NvbnRyb2xzL2Zvcm0vZm9ybSc7XHJcbmltcG9ydCB7IElTYWNMb2NhbGlzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjTG9jYWxpc2F0aW9uU2VydmljZSc7XHJcbmltcG9ydCB7IElBYnN0cmFjdENvbnRyb2xMYWJlbEV4dGVuc2lvbiB9IGZyb20gJy4uL3B1YmxpY19hcGknO1xyXG5pbXBvcnQge1xyXG4gIFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlLFxyXG4gIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxyXG59IGZyb20gJy4uL3NlcnZpY2VzL3NhYy1sb2NhbGlzYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xlYW4gfSBmcm9tICcuLi91dGlsaXRpZXMvY29udmVydGlvbic7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvckl0ZW0gfSBmcm9tICcuLi92YWxpZGF0aW9uJztcclxuXHJcbi8qKlxyXG4gKiBBYnN0cmFjdCBLbGFzc2UgZsO8ciBTYWNCYXNlTW9kZWxDb250cm9sLiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdFxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYWNCYXNlTW9kZWxDb250cm9sPFZBTFVFPlxyXG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0XHJcbntcclxuICAvLyAjcmVnaW9uIFByaXZhdGUgVmFyaWFibGVzXHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcmVudCBGb3JtdWxhclxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBwYXJlbnQ6IFNhY0Zvcm1Db21tb247XHJcbiAgLyoqXHJcbiAgICogU2FjTW9kZWwgRm9ybSBpc3QgZGlzYWJsZWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgX2Rpc2FibGVkRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIG5nQ29udHJvbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBuZ0NvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcclxuICAvKipcclxuICAgKiBTZXJ2aWNlIGbDvHIgRXJyb3IgTG9jYWxpc2F0aW9uXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGxuZ1Jlc291cmNlU2VydmljZTogSVNhY0xvY2FsaXNhdGlvblNlcnZpY2U7XHJcblxyXG4gIHByaXZhdGUgX2xhYmVsOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgLyoqXHJcbiAgICogTmFtZSBkZXMgQ29udHJvbHNcclxuICAgKi9cclxuICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgPSAnJztcclxuICAvKipcclxuICAgKiBEZWZpbmllcnQgZGVuIExhYmVsIFRleHRcclxuICAgKi9cclxuICBASW5wdXQoKSBzZXQgbGFiZWwodjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9sYWJlbCA9IHY7XHJcbiAgICB0aGlzLlVwZGF0ZUxhYmVsVG9Db250cm9sKCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERlZmluaWVydCBkZW4gTGFiZWwgVGV4dFxyXG4gICAqL1xyXG4gIGdldCBsYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pZXJ0IGRpZSBMYWJlbGdyw7ZzZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGxhYmVsc2l6ZTogbnVtYmVyID0gdW5kZWZpbmVkO1xyXG4gIC8qKlxyXG4gICAqIERlYWt0aXZpZXJ0IGRhcyBMYWJlbCBpbSBUZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRpc2FibGVsYWJlbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIERlYWt0aXZpZXJ0IGRhcyBJbnB1dCBDb250cm9sXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBLb250cm9saWVydCwgb2IgZGFzIExhYmVsIGFkYXB0aXZlIGlzdFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGlzYWRhcHRpdmVsYWJlbDogYm9vbGVhbiA9IHVuZGVmaW5lZDtcclxuICAvKipcclxuICAgKiBEZWZpbmllcnQsIG9iIGRhcyBDb250cm9sIFNwcmFjaHNwZXppZmlzY2ggaXN0XHJcbiAgICovXHJcbiAgQElucHV0KCkgaXNsYW5ndWFnZXNwZWNpZmljOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaWVydCBvYiBkYXMgQ29udHJvbCBkaXNhYmxlZCBpc3RcclxuICAgKi9cclxuICBnZXQgaXNkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEZvcm0gfHwgdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb25cclxuXHJcbiAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvclxyXG5cclxuICAvKipcclxuICAgKiBLb25zdHJ1a3RvclxyXG4gICAqIEluamVjdCBkZXMgRm9ybXVsYXJzXHJcbiAgICogQHBhcmVudCBTYWNGb3JtQ29tbW9uXHJcbiAgICogQGluamVjdG9yIEluamVjdG9yXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IoQEhvc3QoKSBwYXJlbnQ6IFNhY0Zvcm1Db21tb24sIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcclxuICAgIHRoaXMubG5nUmVzb3VyY2VTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNMT0NBTElTQVRJT05fU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnRlcm5lIFZhcmlhYmxlLCBkaWUgZGVuIFdlcnQgZGVzIENvbnRyb2xzIGjDpGx0XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIF92YWx1ZTogVkFMVUUgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0b3JcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgX29uQ2hhbmdlOiAoKSA9PiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBCb29sZWFuIFByb3BlcnR5IGRpcnR5OyBkZWZhdWx0IFdlcnQgLSBmYWxzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQm9vbGVhbiBQcm9wZXJ0eSB0b3VjaGVkOyBkZWZhdWx0IFdlcnQgLSBmYWxzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfdG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBJbmxpbmUgRXJyb3JzIGbDvHIgZGFzIENvbnRyb2xcclxuICAgKi9cclxuICBwcml2YXRlIF9pbmxpbmVlcnJvcmVuYWJsZWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIENvbnRyb2wgRXZlbnRzXHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXQgRXZlbnRcclxuICAgKi9cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIHJlY2VpdmUgZm9ybSB2aWEgZm9ybWNvbnRyb2xuYW1lIG9yIGZvcm1jb250cm9sIGluc3RhbmNlXHJcbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XHJcbiAgICBpZiAoZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbE5hbWUpIHtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEZvcm1Hcm91cERpcmVjdGl2ZSwgbnVsbCk7XHJcbiAgICAgIHRoaXMubmdDb250cm9sID0gZm9ybS5nZXRDb250cm9sKGZvcm1Db250cm9sKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubmdDb250cm9sID0gZm9ybUNvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5VcGRhdGVMYWJlbFRvQ29udHJvbCgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGFiZWwgU2l6ZSB2b24gRm9ybXVsYXIgbGVzZW5cclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMubGFiZWxzaXplID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHRoaXMucGFyZW50Py5sYWJlbHNpemUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMubGFiZWxzaXplID0gdGhpcy5wYXJlbnQubGFiZWxzaXplO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxzaXplID0gNDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRhcHRpdmUgTGFiZWwgZnJvbSBGb3JtXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmlzYWRhcHRpdmVsYWJlbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmICh0aGlzLnBhcmVudD8uaXNhZGFwdGl2ZWxhYmVsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmlzYWRhcHRpdmVsYWJlbCA9IHRoaXMucGFyZW50LmlzYWRhcHRpdmVsYWJlbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzYWRhcHRpdmVsYWJlbCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5PbkNsYXNzSW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIEltcGxlbWVudGF0aW9uIENvbnRyb2xWYWx1ZUFjY2Vzc29yXHJcblxyXG4gIC8qKlxyXG4gICAqIExlZXJlIEltcGxlbWVudGF0aW9uIHZvbiBcInByb3BhZ2F0ZUNoYW5nZVwiLiBNdXNzIGdlbWFjaHQgd2VyZGVuLCBkYW1pdCBrZWluIEZlaGxlciBlbnRzdGVodFxyXG4gICAqL1xyXG4gIHByb3BhZ2F0ZUNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcbiAgLyoqXHJcbiAgICogTGVlcmUgSW1wbGVtZW50YXRpb24gdm9uIFwicHJvcGFnYXRlVG91Y2hcIi4gTXVzcyBnZW1hY2h0IHdlcmRlbiwgZGFtaXQga2VpbiBGZWhsZXIgZW50c3RlaHRcclxuICAgKi9cclxuICBwcm9wYWdhdGVUb3VjaDogYW55ID0gKCkgPT4ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUsIGRhbWl0IGFuZGVyZSBDb250cm9scyDDpG5kZXJ1bmdlbiBpbSBDb250cm9sIG1pdGJla29tbWVuIGvDtm5uZW5cclxuICAgKiBadXIgw4RuZGVydW5nc2luZm8gZGllIE1ldGhvZGUgcHJvcGFnYXRlQ2hhbmdlIGF1ZnJ1ZmVuLlxyXG4gICAqL1xyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSAob2JqKSA9PiBmbihvYmopO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSwgZGFtaXQgYW5kZXJlIENvbnRyb2xzIMOkbmRlcnVuZ2VuIG1pdGJla29tbWVuLCB3ZW5uIGRhcyBDb250cm9sIGFrdGl2aWVydCAoRm9jdXMpIHdpcmQuXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVUb3VjaCA9IChvYmopID0+IGZuKG9iaik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIHp1bSBzY2hyZWliZW4gdm9uIFdlcnRlbiBhdXMgZGVtIE1vZGVsIGluIGRhcyBDb250cm9sXHJcbiAgICovXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogVkFMVUUpIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR6dCBkYXMgQ29udHJvbCBhdWYgRGlzYWJsZWRcclxuICAgKi9cclxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rpc2FibGVkRm9ybSA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIC8vICNyZWdpb24gQ29udHJvbCBWYWx1ZVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgTWV0aG9kZSBmw7xyIE5nTW9kZWwgQmluZGluZyBpbiBIdG1sIE1hcmt1cFxyXG4gICAqIElucHV0IHdpcmQgYmVuw7Z0aWd0LCBkYW1pdCBkZXIgV2VydCBhdWNoIMO8YmVyIGRhcyBNYXJrdXAgZ2VzZXR6dCB3ZXJkZW4ga2Fubi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2OiBWQUxVRSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5Db252ZXJ0SW5wdXRWYWx1ZSh2KTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBNZXRob2RlIGbDvHIgTmdNb2RlbCBCaW5kaW5nIGluIEh0bWwgTWFya3VwXHJcbiAgICovXHJcbiAgZ2V0IHZhbHVlKCk6IFZBTFVFIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZGllIGRlbiBXZXJ0IGRlcyBJbnB1dHMgc2V0enRcclxuICAgKi9cclxuICBzZXRWYWx1ZSh2OiBWQUxVRSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIC8vICNyZWdpb24gSW50ZXJuYWwgUHJvcGVydGllc1xyXG5cclxuICAvKipcclxuICAgKiBCZXJlY2huZXQgZGllIEJyZWl0ZSBkZXMgTGFiZWxzXHJcbiAgICovXHJcbiAgZ2V0IF9pbnB1dHNpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAxMiAtIHRoaXMubGFiZWxzaXplO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyAjcmVnaW9uIFByb3RlY3RlZCBIZWxwZXIgTWV0aG9kc1xyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgY2FuIGJlIHVzZWQgdG8gU2V0IFByb3BlcnRpZXMgYXQgQ2xhc3MgSW5pdFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBPbkNsYXNzSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IERlY2ltYWwgU3ltYm9sXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIEdldERlY2ltYWxTeW1ib2woKTogc3RyaW5nIHtcclxuICAgIHJldHVybiAnLic7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2QgY2FuIE92ZXJ3cml0ZW4gaW4gUGFyZW50IENsYXNzZXNcclxuICAgKiBAcGFyYW0gdmFsdWUgV2VydCB3ZWxjaGVyIGluIGRlbiBrb3JyZWt0ZW4gVHlwIGtvbnZlcnRpZXJ0IHdlcmRlbiBzb2xsXHJcbiAgICogQHJldHVybnMgV2VydCBpbSBrb3JyZWt0ZW4gVHlwXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIENvbnZlcnRJbnB1dFZhbHVlKHZhbHVlOiBWQUxVRSk6IFZBTFVFIHtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgVXBkYXRlTGFiZWxUb0NvbnRyb2woKTogdm9pZCB7XHJcbiAgICAvLyBIQUNLOiBBZGQgYWRkaXRpb24gcHJvcGVydHkgdG8gRm9ybUNvbnRyb2wuIENhbiBiZSBmaXhlZCBpZiBzb2x1dGlvbiBmb3IgdGlja2V0OiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xOTY4NlxyXG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgIChcclxuICAgICAgICB0aGlzLm5nQ29udHJvbCBhcyB1bmtub3duIGFzIElBYnN0cmFjdENvbnRyb2xMYWJlbEV4dGVuc2lvblxyXG4gICAgICApLmNvbnRyb2xsYWJlbCA9IHRoaXMubGFiZWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBWYWxpZGF0aW9uIEJhc2VcclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdG9yIE1ldGhvZGVcclxuICAgKi9cclxuICB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBlcnJvcjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSB0aGlzLnZhbGlkYXRlRGF0YShjKTtcclxuICAgIHJldHVybiBlcnJvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFic3RyYWt0ZSBWYWxpZGF0b3IgTWV0aG9kZVxyXG4gICAqL1xyXG4gIGFic3RyYWN0IHZhbGlkYXRlRGF0YShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSByZWdpc3RyaWVydCDDhG5kZXJ1bmdlbiBiZWkgZGVyIFZhbGlkaWVydW5nXHJcbiAgICovXHJcbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IEJvb2xlYW4gV2VydCBmw7xyIGRpcnR5XHJcbiAgICovXHJcbiAgcHVibGljIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9kaXJ0eSA9IHRoaXMubmdDb250cm9sLmRpcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9kaXJ0eTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IEJvb2xlYW4gV2VydCBmw7xyIHRvdWNoZWRcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHRvdWNoZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fdG91Y2hlZCA9IHRoaXMubmdDb250cm9sLnRvdWNoZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX3RvdWNoZWQ7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IGJvb2xlYW4gV2VydCB3ZW5uIEZvcm0gaW52YWxpZCBvZGVyIG5pY2h0IGludmFsaWQgaXN0XHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLm5nQ29udHJvbC5pbnZhbGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBlcmdpYnQgYm9vbGVhbiB0b3VjaGVkID0gdHJ1ZVxyXG4gICAqL1xyXG4gIG9uVG91Y2goKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b3VjaGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucHJvcGFnYXRlVG91Y2goKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IEVycm9yIGFuaGFuZCB2b24gZ2VnZWJlbmVuIEtyaXRlcmllblxyXG4gICAqL1xyXG4gIEdldEVycm9yTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sLmVycm9ycyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubmdDb250cm9sLmVycm9ycyA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nPigob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KCcnKTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSB0aGlzLm5nQ29udHJvbC5lcnJvcnM7XHJcblxyXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCgnJyk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhlcnJvcnMpO1xyXG5cclxuICAgIGlmIChrZXlzLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoJycpO1xyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9ySXRlbTogVmFsaWRhdGlvbkVycm9ySXRlbSA9IGVycm9yc1trZXlzWzBdXTtcclxuXHJcbiAgICAvLyBWYWxpZGF0aW9uIFBhcmFtZXRlcnNcclxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7fTtcclxuICAgIGlmIChlcnJvckl0ZW0ucGFyYW1ldGVycyAhPT0gbnVsbCAmJiBlcnJvckl0ZW0ucGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGVycm9ySXRlbS5wYXJhbWV0ZXJzLmZvckVhY2goKHYsIGspID0+IHtcclxuICAgICAgICBwYXJhbWV0ZXJzW2tdID0gdjtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwYXJhbWV0ZXJzWydGSUVMRCddID0gZXJyb3JJdGVtLmZpZWxkTmFtZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5sbmdSZXNvdXJjZVNlcnZpY2UuR2V0U3RyaW5nKFxyXG4gICAgICBlcnJvckl0ZW0uZXJyb3JNZXNzYWdlS2V5LFxyXG4gICAgICBwYXJhbWV0ZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWt0dWFsaXNpZXJ0IGRlbiBOZ01vZGVsIFdlcnQgdW5kIGRpZSBHw7xsdGlna2VpdCBkZXMgVmFsaWRhdG9ycyBkZXMgQ29udHJvbHNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgVXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLm5nQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBa3RpdmllcnQgb2RlciBEZWFrdGl2aWVydCBkaWUgSW5saW5lIEVycm9ycyBmw7xyIGRhcyBDb250cm9sXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgaW5saW5lZXJyb3JlbmFibGVkKHZhbHVlOiBib29sZWFuIHwgbnVsbCkge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5faW5saW5lZXJyb3JlbmFibGVkID0gbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCA9IGNvbnZlcnRUb0Jvb2xlYW4odmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgaW5saW5lZXJyb3JlbmFibGVkKCk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlubGluZSBlcnJvciBtZXNzYWdlcyBhcmUgYWN0aXZlIGZvciB0aGlzIGNvbnRyb2wuXHJcbiAgICovXHJcbiAgZ2V0IGlzaW5saW5lZXJyb3JlbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnBhcmVudD8uSXNJbmxpbmVFcnJvckVuYWJsZWQgPT09IG51bGwgfHxcclxuICAgICAgdGhpcy5wYXJlbnQ/LklzSW5saW5lRXJyb3JFbmFibGVkID09PSB1bmRlZmluZWRcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5faW5saW5lZXJyb3JlbmFibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMucGFyZW50LklzSW5saW5lRXJyb3JFbmFibGVkICE9PSBmYWxzZSAmJlxyXG4gICAgICB0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQgIT09IGZhbHNlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIl19
462
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZW1vZGVsY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NhYy1jb21tb24vc3JjL2NvbW1vbi9iYXNlbW9kZWxjb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFZLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBR0wsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixTQUFTLEdBSVYsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTWxDLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsOEJBQThCLEdBQy9CLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qiw2QkFBNkIsR0FDOUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQUcvQzs7R0FFRztBQUNILE1BQ3NCLG1CQUFtQjtJQTZHdkMsd0JBQXdCO0lBRXhCLHVCQUF1QjtJQUV2Qjs7OztPQUlHO0lBQ0gsWUFDVSxVQUErQixFQUMvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBckg1QixxQkFBcUI7UUFFckI7O1dBRUc7UUFDSyx3QkFBbUIsR0FBbUIsSUFBSSxDQUFDO1FBQzNDLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFPNUI7O1dBRUc7UUFDTyxXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ2xDOztXQUVHO1FBQ08sa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFLekM7O1dBRUc7UUFDTyxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQ3BDOztXQUVHO1FBQ08sV0FBTSxHQUFVLElBQUksQ0FBQztRQUMvQjs7V0FFRztRQUNPLGVBQVUsR0FBd0IsSUFBSSxDQUFDO1FBVWpEOztXQUVHO1FBQ2EsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQzs7V0FFRztRQUNhLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlDOztXQUVHO1FBQ2EsZ0JBQVcsR0FBWSxJQUFJLENBQUM7UUFDNUM7O1dBRUc7UUFDYSxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqRDs7V0FFRztRQUVJLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUN6Qzs7V0FFRztRQUVJLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUN6Qzs7V0FFRztRQUVJLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUN6Qzs7V0FFRztRQUVJLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUN6Qzs7V0FFRztRQUVJLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUN6Qzs7V0FFRztRQUVJLGlCQUFZLEdBQWtCLElBQUksQ0FBQztRQUMxQzs7V0FFRztRQUNhLFNBQUksR0FBVyxVQUFVLEVBQUUsQ0FBQztRQUU1Qzs7V0FFRztRQUNJLG9CQUFlLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQ3ZDOztXQUVHO1FBQ0ksbUJBQWMsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFlcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQ3BDLHVCQUF1QixFQUN2QixJQUFJLDZCQUE2QixFQUFFLENBQ3BDLENBQUM7UUFFRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FDdEMsd0JBQXdCLEVBQ3hCLElBQUksOEJBQThCLEVBQUUsQ0FDckMsQ0FBQztJQUNKLENBQUM7SUFFRCwwQkFBMEI7SUFFMUIscUNBQXFDO0lBRXJDOztPQUVHO0lBQ0gsSUFDVyxrQkFBa0IsQ0FBQyxLQUFxQjtRQUNqRCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN6QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1NBQ2pDO2FBQU07WUFDTCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFvQixLQUFLLENBQUMsQ0FBUztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFDVyxLQUFLLENBQUMsQ0FBUTtRQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxLQUFLO1FBQ2QsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtZQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1NBQ3BDO1FBRUQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE9BQU87UUFDaEIsT0FBTyxDQUNMLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUztZQUM1QixJQUFJLENBQUMsU0FBUyxLQUFLLElBQUk7WUFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQ3ZCLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxvQkFBb0I7UUFDN0IsSUFDRSxJQUFJLENBQUMsVUFBVSxFQUFFLG9CQUFvQixLQUFLLElBQUk7WUFDOUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxvQkFBb0IsS0FBSyxTQUFTLEVBQ25EO1lBQ0EsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7U0FDakM7UUFFRCxPQUFPLENBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsS0FBSyxLQUFLO1lBQzlDLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLENBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxVQUFVO1FBQ25CLE9BQU87WUFDTCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztTQUN4QztRQUVELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELHdDQUF3QztJQUV4Qyx5QkFBeUI7SUFFekI7O09BRUc7SUFDSSxlQUFlO1FBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtZQUN6RSxPQUFPLElBQUksVUFBVSxDQUFTLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsTUFBTSxNQUFNLEdBQXFCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBRXZELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsT0FBTyxJQUFJLFVBQVUsQ0FBUyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUN6QyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNsQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sSUFBSSxHQUFhLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0MsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUNwQixPQUFPLElBQUksVUFBVSxDQUFTLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3pDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2xCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsTUFBTSxTQUFTLEdBQXdCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV2RCx3QkFBd0I7UUFDeEIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksU0FBUyxDQUFDLFVBQVUsS0FBSyxJQUFJLElBQUksU0FBUyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUU7WUFDdkUsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEIsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO1FBRTFDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FDdEMsU0FBUyxDQUFDLGVBQWUsRUFDekIsVUFBVSxDQUNYLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRO1FBQ2IsMkRBQTJEO1FBQzNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLFdBQVcsWUFBWSxlQUFlLEVBQUU7WUFDMUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9DO2FBQU07WUFDTCxJQUFJLFdBQVcsRUFBRTtnQkFDZixJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxPQUE2QixDQUFDO2FBQzVEO1NBQ0Y7UUFFRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUU1Qiw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLHdEQUF3RDtRQUN4RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNaLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksZ0JBQWdCLENBQUMsRUFBTztRQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCLENBQUMsRUFBTztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0kseUJBQXlCLENBQUMsRUFBYztRQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsQ0FBUTtRQUN0QixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNqQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRLENBQUMsQ0FBa0I7UUFDaEMsTUFBTSxLQUFLLEdBQTRCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSSxVQUFVLENBQUMsS0FBWTtRQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBV0QscUNBQXFDO0lBRXJDLDRCQUE0QjtJQUU1Qjs7OztPQUlHO0lBQ08saUJBQWlCLENBQUMsS0FBWTtRQUN0QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7T0FFRztJQUNPLGdCQUFnQjtRQUN4QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7T0FFRztJQUNPLFdBQVcsS0FBVSxDQUFDO0lBRWhDOztPQUVHO0lBQ08sc0JBQXNCO1FBQzlCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDO0lBRUQsK0JBQStCO0lBRS9CLDBCQUEwQjtJQUVsQixvQkFBb0I7UUFDMUIsbUlBQW1JO1FBQ25JLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUVoQixJQUFJLENBQUMsU0FDTixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxlQUFlLEtBQUssU0FBUyxFQUFFO2dCQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO2FBQ3hEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO2FBQzlCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhO1FBQ25CLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO2FBQ2hEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQzthQUMxRDtTQUNGO1FBRUQsaUJBQWlCO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7YUFDaEQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDO2FBQzFEO1NBQ0Y7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQzthQUNoRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUM7YUFDMUQ7U0FDRjtRQUVELGlCQUFpQjtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO2FBQ2hEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQzthQUMxRDtTQUNGO1FBRUQsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7YUFDaEQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDO2FBQzFEO1NBQ0Y7UUFFRCw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksRUFBRTtnQkFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQzthQUNsRDtpQkFBTTtnQkFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUM7YUFDNUQ7U0FDRjtJQUNILENBQUM7K0dBMWdCbUIsbUJBQW1CO21HQUFuQixtQkFBbUI7O1NBQW5CLG1CQUFtQjs0RkFBbkIsbUJBQW1CO2tCQUR4QyxTQUFTOzswQkF3SEwsSUFBSTttRUFuRVMsUUFBUTtzQkFBdkIsS0FBSztnQkFJVSxZQUFZO3NCQUEzQixLQUFLO2dCQUlVLFdBQVc7c0JBQTFCLEtBQUs7Z0JBSVUsZUFBZTtzQkFBOUIsS0FBSztnQkFLQyxXQUFXO3NCQURqQixLQUFLO2dCQU1DLFdBQVc7c0JBRGpCLEtBQUs7Z0JBTUMsV0FBVztzQkFEakIsS0FBSztnQkFNQyxXQUFXO3NCQURqQixLQUFLO2dCQU1DLFdBQVc7c0JBRGpCLEtBQUs7Z0JBTUMsWUFBWTtzQkFEbEIsS0FBSztnQkFLVSxJQUFJO3NCQUFuQixLQUFLO2dCQTRDSyxrQkFBa0I7c0JBRDVCLEtBQUs7Z0JBWWMsS0FBSztzQkFBeEIsS0FBSztnQkFVSyxLQUFLO3NCQURmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIEZvcm1Db250cm9sTmFtZSxcclxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcbiAgTmdDb250cm9sLFxyXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcclxuICBWYWxpZGF0aW9uRXJyb3JzLFxyXG4gIFZhbGlkYXRvcixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2FjRm9ybUxheW91dENvbW1vbiB9IGZyb20gJy4uL2NvbnRyb2xzL2xheW91dC9mb3JtbGF5b3V0JztcclxuaW1wb3J0IHsgSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjQ29uZmlndXJhdGlvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjTGFiZWxTaXplcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0xhYmVsU2l6ZXMnO1xyXG5pbXBvcnQgeyBJU2FjTG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJQWJzdHJhY3RDb250cm9sTGFiZWxFeHRlbnNpb24gfSBmcm9tICcuLi9wdWJsaWNfYXBpJztcclxuaW1wb3J0IHtcclxuICBTQUNDT05GSUdVUkFUSU9OX1NFUlZJQ0UsXHJcbiAgU2FjRGVmYXVsdENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG59IGZyb20gJy4uL3NlcnZpY2VzL3NhYy1jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxyXG4gIFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlLFxyXG59IGZyb20gJy4uL3NlcnZpY2VzL3NhYy1sb2NhbGlzYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xlYW4gfSBmcm9tICcuLi91dGlsaXRpZXMvY29udmVydGlvbic7XHJcbmltcG9ydCB7IGNyZWF0ZUd1aWQgfSBmcm9tICcuLi91dGlsaXRpZXMvZ3VpZCc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvckl0ZW0gfSBmcm9tICcuLi92YWxpZGF0aW9uJztcclxuXHJcbi8qKlxyXG4gKiBBYnN0cmFjdCBLbGFzc2UgZsO8ciBTYWNCYXNlTW9kZWxDb250cm9sLiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdFxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYWNCYXNlTW9kZWxDb250cm9sPFZBTFVFPlxyXG4gIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciwgT25Jbml0XHJcbntcclxuICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgLyoqXHJcbiAgICogSW5saW5lIEVycm9ycyBmw7xyIGRhcyBDb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaW5saW5lZXJyb3JlbmFibGVkOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfbGFiZWw6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKipcclxuICAgKiBTZXJ2aWNlIGZvciBsb2FkaW5nIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBjb250cm9sc1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWd1cmF0aW9uU2VydmljZTogSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlO1xyXG5cclxuICAvKipcclxuICAgKiBCb29sZWFuIFByb3BlcnR5IGRpcnR5OyBkZWZhdWx0IFdlcnQgLSBmYWxzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfZGlydHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBTYWNNb2RlbCBGb3JtIGlzdCBkaXNhYmxlZFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfZGlzYWJsZWRGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdG9yXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIF9vbkNoYW5nZTogKCkgPT4gdm9pZDtcclxuICAvKipcclxuICAgKiBCb29sZWFuIFByb3BlcnR5IHRvdWNoZWQ7IGRlZmF1bHQgV2VydCAtIGZhbHNlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIF90b3VjaGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogSW50ZXJuZSBWYXJpYWJsZSwgZGllIGRlbiBXZXJ0IGRlcyBDb250cm9scyBow6RsdFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfdmFsdWU6IFZBTFVFID0gbnVsbDtcclxuICAvKipcclxuICAgKiBGb3JtIGxheW91dCBpbnN0YW5jZSBpZiBleGlzdHNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZm9ybWxheW91dDogU2FjRm9ybUxheW91dENvbW1vbiA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogU2VydmljZSBmw7xyIEVycm9yIExvY2FsaXNhdGlvblxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBsbmdSZXNvdXJjZVNlcnZpY2U6IElTYWNMb2NhbGlzYXRpb25TZXJ2aWNlO1xyXG4gIC8qKlxyXG4gICAqIG5nQ29udHJvbFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBuZ0NvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVha3RpdmllcnQgZGFzIElucHV0IENvbnRyb2xcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBEZWFrdGl2aWVydCBkYXMgTGFiZWwgaW0gVGVtcGxhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWxhYmVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogZGVmaW5lcyB0aGF0IGVycm9yIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQgdW5kZXIgdGhlIGNvbnRyb2xzXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGlubGluZUVycm9yOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBkZWZpbmVzIHRoYXQgdGhlIGxhYmVscyBhcmUgZGlzcGxheWVkIGFzIGFkYXB0aXZlIGxhYmVsc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpc0FkYXB0aXZlTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmUgc2l6ZSBmb3IgbGFyZ2UgZGV2aWNlc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZUxnOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIG1lZGl1bSBkZXZpY2VzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbGFiZWxTaXplTWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3Igc21hbGwgZGV2aWNlc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZVNtOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIGV4dHJhIGxhcmdlIGRldmljZXNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbFNpemVYbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogZGVmYXVsdCBsYWJlbCBjb2x1bW4gc2l6ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZVhzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIGV4dHJhIGV4dHJhIGxhcmdlIGRldmljZXNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbFNpemVYeGw6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIE5hbWUgZGVzIENvbnRyb2xzXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZyA9IGNyZWF0ZUd1aWQoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogTGVlcmUgSW1wbGVtZW50YXRpb24gdm9uIFwicHJvcGFnYXRlQ2hhbmdlXCIuIE11c3MgZ2VtYWNodCB3ZXJkZW4sIGRhbWl0IGtlaW4gRmVobGVyIGVudHN0ZWh0XHJcbiAgICovXHJcbiAgcHVibGljIHByb3BhZ2F0ZUNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcbiAgLyoqXHJcbiAgICogTGVlcmUgSW1wbGVtZW50YXRpb24gdm9uIFwicHJvcGFnYXRlVG91Y2hcIi4gTXVzcyBnZW1hY2h0IHdlcmRlbiwgZGFtaXQga2VpbiBGZWhsZXIgZW50c3RlaHRcclxuICAgKi9cclxuICBwdWJsaWMgcHJvcGFnYXRlVG91Y2g6IGFueSA9ICgpID0+IHt9O1xyXG5cclxuICAvLyAjZW5kcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgLyoqXHJcbiAgICogQ29uc3RydWN0b3JcclxuICAgKiBAcGFyYW0gZm9ybWxheW91dCBTYWNGb3JtTGF5b3V0Q29tbW9uIHRvIGRlZmluZSBzY29wZWQgbGF5b3V0IHNldHRpbmdzXHJcbiAgICogQHBhcmFtIGluamVjdG9yIEluamVjdG9yIGZvciBpbmplY3Rpbmcgc2VydmljZXNcclxuICAgKi9cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBIb3N0KCkgZm9ybWxheW91dDogU2FjRm9ybUxheW91dENvbW1vbixcclxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgKSB7XHJcbiAgICB0aGlzLmZvcm1sYXlvdXQgPSBmb3JtbGF5b3V0O1xyXG4gICAgdGhpcy5sbmdSZXNvdXJjZVNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ0xPQ0FMSVNBVElPTl9TRVJWSUNFLFxyXG4gICAgICBuZXcgU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UoKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNDT05GSUdVUkFUSU9OX1NFUlZJQ0UsXHJcbiAgICAgIG5ldyBTYWNEZWZhdWx0Q29uZmlndXJhdGlvblNlcnZpY2UoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb24gQ29uc3RydWN0b3JzXHJcblxyXG4gIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgLyoqXHJcbiAgICogQWt0aXZpZXJ0IG9kZXIgRGVha3RpdmllcnQgZGllIElubGluZSBFcnJvcnMgZsO8ciBkYXMgQ29udHJvbFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBpbmxpbmVlcnJvcmVuYWJsZWQodmFsdWU6IGJvb2xlYW4gfCBudWxsKSB7XHJcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQgPSBudWxsO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5faW5saW5lZXJyb3JlbmFibGVkID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmllcnQgZGVuIExhYmVsIFRleHRcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGxhYmVsKHY6IHN0cmluZykge1xyXG4gICAgdGhpcy5fbGFiZWwgPSB2O1xyXG4gICAgdGhpcy5VcGRhdGVMYWJlbFRvQ29udHJvbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IE1ldGhvZGUgZsO8ciBOZ01vZGVsIEJpbmRpbmcgaW4gSHRtbCBNYXJrdXBcclxuICAgKiBJbnB1dCB3aXJkIGJlbsO2dGlndCwgZGFtaXQgZGVyIFdlcnQgYXVjaCDDvGJlciBkYXMgTWFya3VwIGdlc2V0enQgd2VyZGVuIGthbm4uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHZhbHVlKHY6IFZBTFVFKSB7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLkNvbnZlcnRJbnB1dFZhbHVlKHYpO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBlcmdpYnQgQm9vbGVhbiBXZXJ0IGbDvHIgZGlydHlcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2RpcnR5ID0gdGhpcy5uZ0NvbnRyb2wuZGlydHk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuX2RpcnR5O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpbmxpbmVlcnJvcmVuYWJsZWQoKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IGJvb2xlYW4gV2VydCB3ZW5uIEZvcm0gaW52YWxpZCBvZGVyIG5pY2h0IGludmFsaWQgaXN0XHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLm5nQ29udHJvbC5pbnZhbGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pZXJ0IG9iIGRhcyBDb250cm9sIGRpc2FibGVkIGlzdFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEZvcm0gfHwgdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5saW5lIGVycm9yIG1lc3NhZ2VzIGFyZSBhY3RpdmUgZm9yIHRoaXMgY29udHJvbC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlzaW5saW5lZXJyb3JlbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmZvcm1sYXlvdXQ/LklzSW5saW5lRXJyb3JFbmFibGVkID09PSBudWxsIHx8XHJcbiAgICAgIHRoaXMuZm9ybWxheW91dD8uSXNJbmxpbmVFcnJvckVuYWJsZWQgPT09IHVuZGVmaW5lZFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5mb3JtbGF5b3V0LklzSW5saW5lRXJyb3JFbmFibGVkICE9PSBmYWxzZSAmJlxyXG4gICAgICB0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQgIT09IGZhbHNlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pZXJ0IGRlbiBMYWJlbCBUZXh0XHJcbiAgICovXHJcbiAgcHVibGljIGdldCBsYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBhbGwgbGFiZWwgc2l6ZXMuIFRoZXNlIHZhbHVlcyBjYW4gdGhlbiBiZSB0cmFuc2ZlcnJlZCB0byBjb3JyZXNwb25kaW5nIENTUyBjbGFzc2VzIHVzaW5nIGEgcGlwZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgbGFiZWxTaXplcygpOiBJU2FjTGFiZWxTaXplcyB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsYWJlbFNpemVTbTogdGhpcy5sYWJlbFNpemVTbSxcclxuICAgICAgbGFiZWxTaXplTWQ6IHRoaXMubGFiZWxTaXplTWQsXHJcbiAgICAgIGxhYmVsU2l6ZVhzOiB0aGlzLmxhYmVsU2l6ZVhzLFxyXG4gICAgICBsYWJlbFNpemVYbDogdGhpcy5sYWJlbFNpemVYbCxcclxuICAgICAgbGFiZWxTaXplWHhsOiB0aGlzLmxhYmVsU2l6ZVh4bCxcclxuICAgICAgbGFiZWxTaXplTGc6IHRoaXMubGFiZWxTaXplTGcsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBlcmdpYnQgQm9vbGVhbiBXZXJ0IGbDvHIgdG91Y2hlZFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl90b3VjaGVkID0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fdG91Y2hlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBNZXRob2RlIGbDvHIgTmdNb2RlbCBCaW5kaW5nIGluIEh0bWwgTWFya3VwXHJcbiAgICovXHJcbiAgcHVibGljIGdldCB2YWx1ZSgpOiBWQUxVRSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBHZXR0ZXJzIEFuZCBTZXR0ZXJzXHJcblxyXG4gIC8vICNyZWdpb24gUHVibGljIE1ldGhvZHNcclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBlcmdpYnQgRXJyb3IgYW5oYW5kIHZvbiBnZWdlYmVuZW4gS3JpdGVyaWVuXHJcbiAgICovXHJcbiAgcHVibGljIEdldEVycm9yTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sLmVycm9ycyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubmdDb250cm9sLmVycm9ycyA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nPigob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KCcnKTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSB0aGlzLm5nQ29udHJvbC5lcnJvcnM7XHJcblxyXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCgnJyk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBPYmplY3Qua2V5cyhlcnJvcnMpO1xyXG5cclxuICAgIGlmIChrZXlzLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoJycpO1xyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9ySXRlbTogVmFsaWRhdGlvbkVycm9ySXRlbSA9IGVycm9yc1trZXlzWzBdXTtcclxuXHJcbiAgICAvLyBWYWxpZGF0aW9uIFBhcmFtZXRlcnNcclxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB7fTtcclxuICAgIGlmIChlcnJvckl0ZW0ucGFyYW1ldGVycyAhPT0gbnVsbCAmJiBlcnJvckl0ZW0ucGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGVycm9ySXRlbS5wYXJhbWV0ZXJzLmZvckVhY2goKHYsIGspID0+IHtcclxuICAgICAgICBwYXJhbWV0ZXJzW2tdID0gdjtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBwYXJhbWV0ZXJzWydGSUVMRCddID0gZXJyb3JJdGVtLmZpZWxkTmFtZTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5sbmdSZXNvdXJjZVNlcnZpY2UuR2V0U3RyaW5nKFxyXG4gICAgICBlcnJvckl0ZW0uZXJyb3JNZXNzYWdlS2V5LFxyXG4gICAgICBwYXJhbWV0ZXJzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdCBFdmVudFxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgIC8vIHJlY2VpdmUgZm9ybSB2aWEgZm9ybWNvbnRyb2xuYW1lIG9yIGZvcm1jb250cm9sIGluc3RhbmNlXHJcbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XHJcbiAgICBpZiAoZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbE5hbWUpIHtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEZvcm1Hcm91cERpcmVjdGl2ZSwgbnVsbCk7XHJcbiAgICAgIHRoaXMubmdDb250cm9sID0gZm9ybS5nZXRDb250cm9sKGZvcm1Db250cm9sKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChmb3JtQ29udHJvbCkge1xyXG4gICAgICAgIHRoaXMubmdDb250cm9sID0gZm9ybUNvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlVwZGF0ZUxhYmVsVG9Db250cm9sKCk7XHJcblxyXG4gICAgLy8gc2V0IGxhYmVsIHNpemVzIGZyb20gZm9ybWxheW91dCBkaXJlY3RpdmVcclxuICAgIHRoaXMuc2V0TGFiZWxTaXplcygpO1xyXG5cclxuICAgIC8vIHNldCBhZGFwdGl2ZSBsYWJlbCBwcm9wZXJ0eSBmcm9tIGZvcm1sYXlvdXQgZGlyZWN0aXZlXHJcbiAgICB0aGlzLnNldElzQWRhcHRpdmVMYWJlbCgpO1xyXG5cclxuICAgIHRoaXMuT25DbGFzc0luaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IGJvb2xlYW4gdG91Y2hlZCA9IHRydWVcclxuICAgKi9cclxuICBwdWJsaWMgb25Ub3VjaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RvdWNoZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVUb3VjaCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSwgZGFtaXQgYW5kZXJlIENvbnRyb2xzIMOkbmRlcnVuZ2VuIGltIENvbnRyb2wgbWl0YmVrb21tZW4ga8O2bm5lblxyXG4gICAqIFp1ciDDhG5kZXJ1bmdzaW5mbyBkaWUgTWV0aG9kZSBwcm9wYWdhdGVDaGFuZ2UgYXVmcnVmZW4uXHJcbiAgICovXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSAob2JqKSA9PiBmbihvYmopO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSwgZGFtaXQgYW5kZXJlIENvbnRyb2xzIMOkbmRlcnVuZ2VuIG1pdGJla29tbWVuLCB3ZW5uIGRhcyBDb250cm9sIGFrdGl2aWVydCAoRm9jdXMpIHdpcmQuXHJcbiAgICovXHJcbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGFnYXRlVG91Y2ggPSAob2JqKSA9PiBmbihvYmopO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSByZWdpc3RyaWVydCDDhG5kZXJ1bmdlbiBiZWkgZGVyIFZhbGlkaWVydW5nXHJcbiAgICovXHJcbiAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR6dCBkYXMgQ29udHJvbCBhdWYgRGlzYWJsZWRcclxuICAgKi9cclxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZEZvcm0gPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBkaWUgZGVuIFdlcnQgZGVzIElucHV0cyBzZXR6dFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRWYWx1ZSh2OiBWQUxVRSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0b3IgTWV0aG9kZVxyXG4gICAqL1xyXG4gIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBlcnJvcjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSB0aGlzLnZhbGlkYXRlRGF0YShjKTtcclxuICAgIHJldHVybiBlcnJvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgenVtIHNjaHJlaWJlbiB2b24gV2VydGVuIGF1cyBkZW0gTW9kZWwgaW4gZGFzIENvbnRyb2xcclxuICAgKi9cclxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogVkFMVUUpIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gIC8vICNyZWdpb24gUHVibGljIEFic3RyYWN0IE1ldGhvZHNcclxuXHJcbiAgLyoqXHJcbiAgICogQWJzdHJha3RlIFZhbGlkYXRvciBNZXRob2RlXHJcbiAgICovXHJcbiAgcHVibGljIGFic3RyYWN0IHZhbGlkYXRlRGF0YShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbDtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgQWJzdHJhY3QgTWV0aG9kc1xyXG5cclxuICAvLyAjcmVnaW9uIFByb3RlY3RlZCBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCBjYW4gT3ZlcndyaXRlbiBpbiBQYXJlbnQgQ2xhc3Nlc1xyXG4gICAqIEBwYXJhbSB2YWx1ZSBXZXJ0IHdlbGNoZXIgaW4gZGVuIGtvcnJla3RlbiBUeXAga29udmVydGllcnQgd2VyZGVuIHNvbGxcclxuICAgKiBAcmV0dXJucyBXZXJ0IGltIGtvcnJla3RlbiBUeXBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgQ29udmVydElucHV0VmFsdWUodmFsdWU6IFZBTFVFKTogVkFMVUUge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBlcmdpYnQgRGVjaW1hbCBTeW1ib2xcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgR2V0RGVjaW1hbFN5bWJvbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICcuJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCBjYW4gYmUgdXNlZCB0byBTZXQgUHJvcGVydGllcyBhdCBDbGFzcyBJbml0XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIE9uQ2xhc3NJbml0KCk6IHZvaWQge31cclxuXHJcbiAgLyoqXHJcbiAgICogQWt0dWFsaXNpZXJ0IGRlbiBOZ01vZGVsIFdlcnQgdW5kIGRpZSBHw7xsdGlna2VpdCBkZXMgVmFsaWRhdG9ycyBkZXMgQ29udHJvbHNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgVXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLm5nQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFByb3RlY3RlZCBNZXRob2RzXHJcblxyXG4gIC8vICNyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcblxyXG4gIHByaXZhdGUgVXBkYXRlTGFiZWxUb0NvbnRyb2woKTogdm9pZCB7XHJcbiAgICAvLyBIQUNLOiBBZGQgYWRkaXRpb24gcHJvcGVydHkgdG8gRm9ybUNvbnRyb2wuIENhbiBiZSBmaXhlZCBpZiBzb2x1dGlvbiBmb3IgdGlja2V0OiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xOTY4NlxyXG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgIChcclxuICAgICAgICB0aGlzLm5nQ29udHJvbCBhcyB1bmtub3duIGFzIElBYnN0cmFjdENvbnRyb2xMYWJlbEV4dGVuc2lvblxyXG4gICAgICApLmNvbnRyb2xsYWJlbCA9IHRoaXMubGFiZWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgYWRhcHRpdmUgbGFiZWwgcHJvcGVydHkgZnJvbSBwYXJlbnQgbGF5b3V0IGNvbnRyb2xcclxuICAgKi9cclxuICBwcml2YXRlIHNldElzQWRhcHRpdmVMYWJlbCgpIHtcclxuICAgIGlmICghdGhpcy5pc0FkYXB0aXZlTGFiZWwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uaXNBZGFwdGl2ZUxhYmVsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICB0aGlzLmlzQWRhcHRpdmVMYWJlbCA9IHRoaXMuZm9ybWxheW91dC5pc0FkYXB0aXZlTGFiZWw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc0FkYXB0aXZlTGFiZWwgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGxhYmVsIHNpemVzIGZyb20gcHJvcGVydHkgb3IgcGFyZW50IGxheW91dCBjb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRMYWJlbFNpemVzKCkge1xyXG4gICAgLy8gc2V0IHNpemUgZXh0cmEgc21hbGxcclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVYcykge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVYcykge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWHMgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplWHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVYcyA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplWHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgc2l6ZSBzbWFsbFxyXG4gICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVNtKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZVNtKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVTbSA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVTbTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZVNtID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVTbTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldCBzaXplIG1lZGl1bVxyXG4gICAgaWYgKCF0aGlzLmxhYmVsU2l6ZU1kKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZU1kKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVNZCA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVNZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZU1kID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVNZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldCBzaXplIGxhcmdlXHJcbiAgICBpZiAoIXRoaXMubGFiZWxTaXplTGcpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplTGcpIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZUxnID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZUxnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplTGcgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZUxnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHNpemUgZXh0cmEgbGFyZ2VcclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVYbCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVYbCkge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWGwgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplWGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVYbCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplWGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgc2l6ZSBleHRyYSBleHRyYSBsYXJnZVxyXG4gICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVh4bCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVYeGwpIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZVh4bCA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVYeGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVYeGwgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVh4bDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxufVxyXG4iXX0=