@metadev/lux 0.18.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/esm2020/lib/autocomplete/autocomplete.component.mjs +479 -0
  2. package/esm2020/lib/autocomplete-list/autocomplete-list.component.mjs +254 -0
  3. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +75 -0
  4. package/esm2020/lib/checkbox/checkbox.component.mjs +154 -0
  5. package/{esm2015/lib/datasource.js → esm2020/lib/datasource.mjs} +0 -0
  6. package/esm2020/lib/datetime/datetime.component.mjs +306 -0
  7. package/esm2020/lib/filter/filter.component.mjs +152 -0
  8. package/esm2020/lib/geolocation/geolocation.component.mjs +407 -0
  9. package/{esm2015/lib/geolocation/geolocation.service.js → esm2020/lib/geolocation/geolocation.service.mjs} +7 -11
  10. package/esm2020/lib/geolocation/openlayer-loader.service.mjs +62 -0
  11. package/{esm2015/lib/helperFns.js → esm2020/lib/helperFns.mjs} +0 -0
  12. package/esm2020/lib/input/input.component.mjs +452 -0
  13. package/{esm2015/lib/input/regexp.service.js → esm2020/lib/input/regexp.service.mjs} +7 -6
  14. package/{esm2015/lib/lang.js → esm2020/lib/lang.mjs} +0 -0
  15. package/esm2020/lib/lux.module.mjs +130 -0
  16. package/{esm2015/lib/map/geopoint.js → esm2020/lib/map/geopoint.mjs} +0 -0
  17. package/esm2020/lib/map/map.component.mjs +265 -0
  18. package/esm2020/lib/modal/modal-backdrop.mjs +26 -0
  19. package/esm2020/lib/modal/modal-config.mjs +14 -0
  20. package/{esm2015/lib/modal/modal-dismiss-reasons.js → esm2020/lib/modal/modal-dismiss-reasons.mjs} +0 -0
  21. package/{esm2015/lib/modal/modal-ref.js → esm2020/lib/modal/modal-ref.mjs} +0 -0
  22. package/esm2020/lib/modal/modal-stack.mjs +179 -0
  23. package/esm2020/lib/modal/modal-window.mjs +119 -0
  24. package/esm2020/lib/modal/modal.service.mjs +26 -0
  25. package/{esm2015/lib/modal/util.js → esm2020/lib/modal/util.mjs} +0 -0
  26. package/esm2020/lib/pagination/pagination.component.mjs +137 -0
  27. package/{esm2015/lib/pagination/pagination.js → esm2020/lib/pagination/pagination.mjs} +0 -0
  28. package/esm2020/lib/radiogroup/radiogroup.component.mjs +130 -0
  29. package/esm2020/lib/select/select.component.mjs +149 -0
  30. package/{esm2015/lib/tooltip/placement.js → esm2020/lib/tooltip/placement.mjs} +0 -0
  31. package/{esm2015/lib/tooltip/tooltip-context.js → esm2020/lib/tooltip/tooltip-context.mjs} +0 -0
  32. package/esm2020/lib/tooltip/tooltip.component.mjs +23 -0
  33. package/esm2020/lib/tooltip/tooltip.directive.mjs +60 -0
  34. package/{esm2015/lib/tooltip/tooltip.service.js → esm2020/lib/tooltip/tooltip.service.mjs} +7 -9
  35. package/{esm2015/lib/tooltip/tooltop-content.js → esm2020/lib/tooltip/tooltop-content.mjs} +0 -0
  36. package/esm2020/lib/voice-recognition/voice-recognition.directive.mjs +73 -0
  37. package/{esm2015/lib/window/window.service.js → esm2020/lib/window/window.service.mjs} +0 -0
  38. package/esm2020/metadev-lux.mjs +5 -0
  39. package/esm2020/public-api.mjs +21 -0
  40. package/fesm2015/metadev-lux.mjs +4345 -0
  41. package/fesm2015/metadev-lux.mjs.map +1 -0
  42. package/fesm2020/metadev-lux.mjs +4343 -0
  43. package/fesm2020/metadev-lux.mjs.map +1 -0
  44. package/lib/autocomplete/autocomplete.component.d.ts +3 -0
  45. package/lib/autocomplete-list/autocomplete-list.component.d.ts +3 -0
  46. package/lib/breadcrumb/breadcrumb.component.d.ts +3 -0
  47. package/lib/checkbox/checkbox.component.d.ts +3 -0
  48. package/lib/datetime/datetime.component.d.ts +4 -0
  49. package/lib/filter/filter.component.d.ts +3 -0
  50. package/lib/geolocation/geolocation.component.d.ts +4 -0
  51. package/lib/geolocation/geolocation.service.d.ts +3 -0
  52. package/lib/geolocation/openlayer-loader.service.d.ts +3 -0
  53. package/lib/input/input.component.d.ts +3 -0
  54. package/lib/input/regexp.service.d.ts +3 -0
  55. package/lib/lux.module.d.ts +26 -0
  56. package/lib/map/map.component.d.ts +3 -0
  57. package/lib/modal/modal-backdrop.d.ts +3 -0
  58. package/lib/modal/modal-config.d.ts +3 -0
  59. package/lib/modal/modal-stack.d.ts +3 -0
  60. package/lib/modal/modal-window.d.ts +3 -0
  61. package/lib/modal/modal.service.d.ts +3 -0
  62. package/lib/pagination/pagination.component.d.ts +3 -0
  63. package/lib/radiogroup/radiogroup.component.d.ts +3 -0
  64. package/lib/select/select.component.d.ts +3 -0
  65. package/lib/tooltip/tooltip.component.d.ts +3 -0
  66. package/lib/tooltip/tooltip.directive.d.ts +3 -0
  67. package/lib/tooltip/tooltip.service.d.ts +3 -0
  68. package/lib/voice-recognition/voice-recognition.directive.d.ts +3 -0
  69. package/metadev-lux.d.ts +1 -16
  70. package/package.json +23 -11
  71. package/public-api.d.ts +12 -7
  72. package/bundles/metadev-lux.umd.js +0 -4715
  73. package/bundles/metadev-lux.umd.js.map +0 -1
  74. package/esm2015/lib/autocomplete/autocomplete.component.js +0 -455
  75. package/esm2015/lib/autocomplete-list/autocomplete-list.component.js +0 -230
  76. package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -77
  77. package/esm2015/lib/checkbox/checkbox.component.js +0 -142
  78. package/esm2015/lib/datetime/datetime.component.js +0 -275
  79. package/esm2015/lib/filter/filter.component.js +0 -140
  80. package/esm2015/lib/geolocation/geolocation.component.js +0 -371
  81. package/esm2015/lib/geolocation/openlayer-loader.service.js +0 -63
  82. package/esm2015/lib/input/input.component.js +0 -419
  83. package/esm2015/lib/lux.module.js +0 -83
  84. package/esm2015/lib/map/map.component.js +0 -261
  85. package/esm2015/lib/modal/modal-backdrop.js +0 -19
  86. package/esm2015/lib/modal/modal-config.js +0 -12
  87. package/esm2015/lib/modal/modal-stack.js +0 -182
  88. package/esm2015/lib/modal/modal-window.js +0 -92
  89. package/esm2015/lib/modal/modal.service.js +0 -28
  90. package/esm2015/lib/pagination/pagination.component.js +0 -134
  91. package/esm2015/lib/radiogroup/radiogroup.component.js +0 -114
  92. package/esm2015/lib/select/select.component.js +0 -131
  93. package/esm2015/lib/tooltip/tooltip.component.js +0 -19
  94. package/esm2015/lib/tooltip/tooltip.directive.js +0 -52
  95. package/esm2015/lib/voice-recognition/voice-recognition.directive.js +0 -76
  96. package/esm2015/metadev-lux.js +0 -21
  97. package/esm2015/public-api.js +0 -16
  98. package/fesm2015/metadev-lux.js +0 -4089
  99. package/fesm2015/metadev-lux.js.map +0 -1
  100. package/metadev-lux.metadata.json +0 -1
@@ -1,371 +0,0 @@
1
- import { Component, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild } from '@angular/core';
2
- import { NG_VALIDATORS, NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { exists, hasValue, isInitialAndEmpty, isValidNumber, roundToMultipleOf } from '../helperFns';
4
- import { languageDetector } from '../lang';
5
- import { ModalService } from '../modal/modal.service';
6
- import { GeolocationService } from './geolocation.service';
7
- export class GeolocationComponent {
8
- constructor(modalService, locationService) {
9
- this.modalService = modalService;
10
- this.locationService = locationService;
11
- this.touched = false;
12
- this.dirty = false;
13
- this.lastErrors = null;
14
- this.latitudeValue = undefined;
15
- this.longitudeValue = undefined;
16
- this.isValidNumber = isValidNumber;
17
- this.i18n = {
18
- en: {
19
- lat: 'latitude',
20
- lon: 'longitude',
21
- selectLocation: 'Select location',
22
- location: 'Location',
23
- selectAction: 'Select',
24
- cancelAction: 'Cancel',
25
- closeAction: 'Close',
26
- typeToSearch: 'type to search',
27
- cardinalPoints: {
28
- north: 'N',
29
- south: 'S',
30
- east: 'E',
31
- west: 'W'
32
- },
33
- userErrors: {
34
- required: 'Required field.',
35
- minLatitude: 'Minimum latitude is $minLatitude.',
36
- maxLatitude: 'Maximum latitude is $maxLatitude.',
37
- minLongitude: 'Minimum longitude is $minLongitude.',
38
- maxLongitude: 'Maximum longitude is $maxLongitude.'
39
- }
40
- },
41
- es: {
42
- lat: 'latitud',
43
- lon: 'longitud',
44
- selectLocation: 'Seleccione ubicación',
45
- location: 'Ubicación',
46
- selectAction: 'Seleccionar',
47
- cancelAction: 'Cancelar',
48
- closeAction: 'Cerrar',
49
- typeToSearch: 'escribe para buscar',
50
- cardinalPoints: {
51
- north: 'N',
52
- south: 'S',
53
- east: 'E',
54
- west: 'O'
55
- },
56
- userErrors: {
57
- required: 'El campo es obligatorio.',
58
- minLatitude: 'La latitud mínima es $minLatitude.',
59
- maxLatitude: 'La latitud máxima es $maxLatitude.',
60
- minLongitude: 'La longitud mínima es $minLongitude.',
61
- maxLongitude: 'La longitud máxima es $maxLongitude.'
62
- }
63
- }
64
- };
65
- this.lang = languageDetector();
66
- this.inlineErrors = false;
67
- this.readonly = null;
68
- this.valueChange = new EventEmitter();
69
- this.keyPress = new EventEmitter();
70
- this.onChange = (value) => { };
71
- this.onTouched = () => { };
72
- }
73
- get className() {
74
- return this.checkClassName();
75
- }
76
- set disabled(v) {
77
- v = typeof v === 'string' && v !== 'false' ? true : v;
78
- this._disabled = v;
79
- }
80
- get disabled() {
81
- return this._disabled;
82
- }
83
- set required(v) {
84
- this._required = v;
85
- }
86
- get required() {
87
- return this._required;
88
- }
89
- set value(v) {
90
- if (v === this._value) {
91
- return; // prevent events when there is no changes
92
- }
93
- const initialAndEmpty = isInitialAndEmpty(this._value, v);
94
- if (v &&
95
- v.coordinates &&
96
- v.coordinates.length === 2 &&
97
- exists(v.coordinates[0] && exists(v.coordinates[1]))) {
98
- this._value = v;
99
- this.setLatitudeInControl(v.coordinates[1]);
100
- this.setLongitudeInControl(v.coordinates[0]);
101
- }
102
- else if (!v) {
103
- this._value = null;
104
- this.setLatitudeInControl(null);
105
- this.setLongitudeInControl(null);
106
- }
107
- else {
108
- this._value = v;
109
- // we don't set value in control if the value is not valid
110
- // if we do, the content of the control changes and can erase what the user is typing
111
- }
112
- this.onChange(v);
113
- if (!initialAndEmpty) {
114
- this.valueChange.emit(v);
115
- }
116
- }
117
- get value() {
118
- return this._value;
119
- }
120
- // ControlValueAccessor Interface implementation
121
- writeValue(value) {
122
- this.value = value;
123
- }
124
- registerOnChange(onChange) {
125
- this.onChange = onChange;
126
- }
127
- registerOnTouched(onTouched) {
128
- this.onTouched = onTouched;
129
- }
130
- markAsTouched() {
131
- if (!this.touched) {
132
- this.onTouched();
133
- this.touched = true;
134
- }
135
- }
136
- setDisabledState(disabled) {
137
- this.disabled = disabled;
138
- }
139
- // End of ControlValueAccessor Interface implementation
140
- setLatitudeInControl(latitude) {
141
- // this.latitude.nativeElement.value = latitude;
142
- this.latitudeValue = latitude;
143
- }
144
- setLongitudeInControl(longitude) {
145
- // this.longitude.nativeElement.value = longitude;
146
- this.longitudeValue = longitude;
147
- }
148
- clear() {
149
- this.setLatitudeInControl(null);
150
- this.setLongitudeInControl(null);
151
- this.value = null;
152
- }
153
- // Validator interface
154
- registerOnValidatorChange() { }
155
- validate(control) {
156
- const value = control.value;
157
- let result = null;
158
- if (this.required &&
159
- !hasValue(value) &&
160
- !exists(this.latitudeValue) &&
161
- !exists(this.longitudeValue)) {
162
- result = result || {};
163
- result.required = { value, reason: 'Required field.' };
164
- }
165
- if (!exists(this.latitudeValue) && exists(this.longitudeValue)) {
166
- result = result || {};
167
- result.existsLatitude = {
168
- value,
169
- reason: 'Latitude not specified.'
170
- };
171
- }
172
- if (exists(this.latitudeValue) && !exists(this.longitudeValue)) {
173
- result = result || {};
174
- result.existsLongitude = {
175
- value,
176
- reason: 'Longitude not specified.'
177
- };
178
- }
179
- if (exists(this.minLatitude) && this.latitudeValue < this.minLatitude) {
180
- result = result || {};
181
- result.minLatitude = {
182
- value,
183
- min: this.minLatitude,
184
- reason: `Latitude is lower than minimum value: ${this.minLatitude}.`
185
- };
186
- }
187
- if (exists(this.maxLatitude) && this.latitudeValue > this.maxLatitude) {
188
- result = result || {};
189
- result.maxLatitude = {
190
- value,
191
- max: this.maxLatitude,
192
- reason: `Latitude is higher than maximum value: ${this.maxLatitude}.`
193
- };
194
- }
195
- if (exists(this.minLongitude) && this.longitudeValue < this.minLongitude) {
196
- result = result || {};
197
- result.minLongitude = {
198
- value,
199
- min: this.minLongitude,
200
- reason: `Longitude is lower than minimum value: ${this.minLongitude}.`
201
- };
202
- }
203
- if (exists(this.maxLongitude) && this.longitudeValue > this.maxLongitude) {
204
- result = result || {};
205
- result.maxLongitude = {
206
- value,
207
- max: this.maxLongitude,
208
- reason: `Longitude is higher than maximum value: ${this.maxLongitude}.`
209
- };
210
- }
211
- this.lastErrors = result;
212
- return result;
213
- }
214
- // End of Validator interface
215
- ngOnInit() {
216
- this.inputId = this.inputId
217
- ? this.inputId
218
- : `geolocation$${GeolocationComponent.idCounter++}`;
219
- this.setPatterns();
220
- }
221
- roundToStepAndUpdateLatitudeAndLongitude(newLatitudeAndLongitude) {
222
- const newLatitude = roundToMultipleOf(newLatitudeAndLongitude[1], this.step);
223
- const newLongitude = roundToMultipleOf(newLatitudeAndLongitude[0], this.step);
224
- if (this.disabled || this.readonly) {
225
- return;
226
- }
227
- if (!exists(newLatitudeAndLongitude)) {
228
- this.value = null;
229
- }
230
- this.value = {
231
- type: 'Point',
232
- coordinates: [newLongitude, newLatitude]
233
- };
234
- }
235
- onLostFocus() {
236
- this.markAsTouched();
237
- }
238
- onEventLatitude(newLatitude) {
239
- if (this.disabled || this.readonly) {
240
- return;
241
- }
242
- const newLatitudeValue = isValidNumber(newLatitude) ? +newLatitude : null;
243
- if (!(exists(this.value) && exists(this.value.coordinates[0])) &&
244
- !exists(newLatitudeValue)) {
245
- this.value = null;
246
- }
247
- else {
248
- this.value = {
249
- type: 'Point',
250
- coordinates: [
251
- this.value ? this.value.coordinates[0] : undefined,
252
- newLatitudeValue
253
- ]
254
- };
255
- }
256
- this.markAsTouched();
257
- }
258
- onEventLongitude(newLongitude) {
259
- if (this.disabled || this.readonly) {
260
- return;
261
- }
262
- const newLongitudeValue = isValidNumber(newLongitude)
263
- ? +newLongitude
264
- : null;
265
- if (!exists(newLongitudeValue) &&
266
- !(exists(this.value) && exists(this._value.coordinates[1]))) {
267
- this.value = null;
268
- }
269
- else {
270
- this.value = {
271
- type: 'Point',
272
- coordinates: [
273
- newLongitudeValue,
274
- this.value ? this.value.coordinates[1] : undefined
275
- ]
276
- };
277
- }
278
- this.markAsTouched();
279
- }
280
- onKeyPress(event) {
281
- this.keyPress.emit(event);
282
- }
283
- checkClassName() {
284
- return this.disabled
285
- ? this.readonly
286
- ? 'disabled readonly'
287
- : 'disabled'
288
- : this.readonly
289
- ? 'readonly'
290
- : '';
291
- }
292
- openModalMap(modal) {
293
- this.modalService.open(modal).result.then((result) => {
294
- if (result !== 'cancel') {
295
- this.roundToStepAndUpdateLatitudeAndLongitude(result);
296
- }
297
- }, (_) => { });
298
- }
299
- onSearchLocationChanged(newValue, map) {
300
- map.markerPoint = newValue;
301
- map.center = map.markerPoint;
302
- }
303
- get mapTitle() {
304
- return this._disabled || !!this.readonly
305
- ? this.i18n[this.lang].location
306
- : this.i18n[this.lang].selectLocation;
307
- }
308
- get self() {
309
- return this;
310
- }
311
- getLabels(instance, keys) {
312
- return instance.locationService.getLabels(instance.locationService, keys);
313
- }
314
- getData(instance, search) {
315
- return instance.locationService.getData(instance.locationService, search);
316
- }
317
- setPatterns() {
318
- this.step = this.step || 0.00001; // 0.00001 degrees = 1.11 meters
319
- this.zoom = this.zoom || 18; // (360/2^18) degrees ~ 0.00137 degrees ~ 153 meters
320
- this.minLatitude = this.minLatitude || -90;
321
- this.maxLatitude = this.maxLatitude || +90;
322
- this.minLongitude = this.minLongitude || -180;
323
- this.maxLongitude = this.maxLongitude || +180;
324
- }
325
- }
326
- GeolocationComponent.idCounter = 0;
327
- GeolocationComponent.decorators = [
328
- { type: Component, args: [{
329
- selector: 'lux-geolocation',
330
- template: "<input\n #latitude\n class=\"rounded-left prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$latitude'\"\n [(ngModel)]=\"latitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLatitude !== undefined && minLatitude !== null\n ? minLatitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLatitude !== undefined && maxLatitude !== null\n ? maxLatitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lat\"\n (keyup)=\"onEventLatitude(latitude.value)\"\n (change)=\"onEventLatitude(latitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n class=\"infix symbol clickable\"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\">\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.north\n }}</span>\n <span *ngIf=\"isValidNumber(latitudeValue) && latitudeValue < 0\">{{\n i18n[lang].cardinalPoints.south\n }}</span>\n <span *ngIf=\"!isValidNumber(latitudeValue)\" class=\"icon-globe\"></span>\n</div>\n<input\n #longitude\n class=\"prefix\"\n [ngClass]=\"className\"\n type=\"number\"\n [id]=\"inputId + '$longitude'\"\n [(ngModel)]=\"longitudeValue\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.disabled]=\"disabled === true ? 'true' : undefined\"\n [attr.readonly]=\"readonly === true ? 'true' : undefined\"\n [attr.min]=\"\n minLongitude !== undefined && minLongitude !== null\n ? minLongitude.toString()\n : undefined\n \"\n [attr.max]=\"\n maxLongitude !== undefined && maxLongitude !== null\n ? maxLongitude.toString()\n : undefined\n \"\n [attr.step]=\"\n step !== undefined && step !== null ? step.toString() : undefined\n \"\n [placeholder]=\"i18n[lang].lon\"\n (keyup)=\"onEventLongitude(longitude.value)\"\n (change)=\"onEventLongitude(longitude.value)\"\n (keypress)=\"onKeyPress($event)\"\n (blur)=\"onLostFocus()\"\n/>\n<div\n [class]=\"\n disabled || readonly\n ? 'clickable rounded-right postfix symbol'\n : 'clickable postfix symbol'\n \"\n [ngClass]=\"className\"\n (click)=\"openModalMap(modalMap)\"\n>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue >= 0\">{{\n i18n[lang].cardinalPoints.east\n }}</span>\n <span *ngIf=\"isValidNumber(longitudeValue) && longitudeValue < 0\">{{\n i18n[lang].cardinalPoints.west\n }}</span>\n <span *ngIf=\"!isValidNumber(longitudeValue)\" class=\"icon-globe\"></span>\n</div>\n<button\n #clearButton\n *ngIf=\"!(disabled || readonly)\"\n class=\"rounded-right postfix bordered icon icon-clear\"\n [id]=\"inputId + '$clear'\"\n type=\"button\"\n (click)=\"clear()\"\n aria-label=\"clear\"\n></button>\n\n<div *ngIf=\"inlineErrors && lastErrors && (dirty || touched)\" class=\"alert\">\n <div *ngIf=\"lastErrors.required\">\n {{ i18n[lang].userErrors.required }}\n </div>\n <div *ngIf=\"lastErrors.minLatitude\">\n {{\n i18n[lang].userErrors.minLatitude.replace(\n '$minLatitude',\n lastErrors.minLatitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLatitude\">\n {{\n i18n[lang].userErrors.maxLatitude.replace(\n '$maxLatitude',\n lastErrors.maxLatitude.max\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.minLongitude\">\n {{\n i18n[lang].userErrors.minLongitude.replace(\n '$minLongitude',\n lastErrors.minLongitude.min\n )\n }}\n </div>\n <div *ngIf=\"lastErrors.maxLongitude\">\n {{\n i18n[lang].userErrors.maxLongitude.replace(\n '$maxLongitude',\n lastErrors.maxLongitude.max\n )\n }}\n </div>\n</div>\n\n<ng-template #modalMap let-modal>\n <div class=\"lux-modal-header\">\n <h4 class=\"modal-title\" id=\"modal-basic-title\">{{ mapTitle }}</h4>\n <button\n type=\"button\"\n class=\"close\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss('Cross click')\"\n >\n <span aria-hidden=\"true\">\u00D7</span>\n </button>\n </div>\n <div class=\"lux-modal-body content\">\n <lux-autocomplete\n #searchBar\n [attr.aria-label]=\"i18n[lang].typeToSearch\"\n [placeholder]=\"i18n[lang].typeToSearch\"\n *ngIf=\"!disabled && !readonly\"\n [instance]=\"self\"\n [resolveLabelsFunction]=\"getLabels\"\n [populateFunction]=\"getData\"\n (valueChange)=\"onSearchLocationChanged(searchBar.value, map)\"\n ></lux-autocomplete>\n <div class=\"map-container\">\n <lux-map\n #map\n [center]=\"value\"\n [markerPoint]=\"value\"\n [zoom]=\"zoom\"\n [readonly]=\"readonly === true || disabled === true ? true : false\"\n ></lux-map>\n </div>\n </div>\n <div class=\"lux-modal-footer\">\n <button\n *ngIf=\"disabled || readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].closeAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-cancel\"\n (click)=\"modal.close('cancel')\"\n >\n {{ i18n[lang].cancelAction }}\n </button>\n <button\n *ngIf=\"!disabled && !readonly\"\n type=\"button\"\n class=\"btn btn-select\"\n (click)=\"modal.close(map.markerPoint.coordinates)\"\n >\n {{ i18n[lang].selectAction }}\n </button>\n </div>\n</ng-template>\n",
331
- providers: [
332
- {
333
- provide: NG_VALUE_ACCESSOR,
334
- multi: true,
335
- useExisting: forwardRef(() => GeolocationComponent)
336
- },
337
- {
338
- provide: NG_VALIDATORS,
339
- multi: true,
340
- useExisting: forwardRef(() => GeolocationComponent)
341
- }
342
- ],
343
- styles: [":focus{z-index:1}input,select,textarea{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:0;margin:var(--lux-input-margin, 0rem);padding:0 .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0 .5rem;margin-bottom:0;font-weight:400;color:default;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:default;background:var(--lux-symbol-background, default);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:.25rem;border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}:host{display:flex;align-items:stretch}.btn-select{color:#fff;background-color:#4242d1;margin-left:2rem}.btn-cancel{color:#fff;background-color:#c22929}.readonly{border:none}.readonly:focus{border:none;outline:none}.disabled{background-color:#f1f1f1;background-color:var(--lux-disabled-color, #f1f1f1);border-color:#6d6d6d;border-color:var(--lux-disabled-border-color, #6d6d6d)}.icon,.icon-clear,.icon-globe{display:inline-block;background-size:1rem 1rem;background-position:center;background-repeat:no-repeat;min-width:1rem;min-height:1rem;width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);z-index:1}.clickable{cursor:pointer}.icon-globe{background:url(/assets/img/globe.svg) no-repeat center;background:var(--lux-autocomplete-icon-globe, url(/assets/img/globe.svg) no-repeat center);background-size:1rem;height:100%}.icon-clear{width:1.5rem;width:var(--lux-autocomplete-icon-width, 1.5rem);background:url(/assets/img/filter-clear.png) no-repeat center;background:var(--lux-autocomplete-icon-clear, url(/assets/img/filter-clear.png) no-repeat center);background-size:.5rem .5rem;background-size:var(--lux-autocomplete-icon-bg-size, .5rem .5rem);z-index:1}.lux-modal-body{padding:0}.map-container{height:45vh;height:var(--lux-geolocation-map-height, 45vh);width:90vw;width:var(--lux-geolocation-map-width, 90vw)}\n"]
344
- },] }
345
- ];
346
- GeolocationComponent.ctorParameters = () => [
347
- { type: ModalService },
348
- { type: GeolocationService }
349
- ];
350
- GeolocationComponent.propDecorators = {
351
- latitude: [{ type: ViewChild, args: ['latitude', { static: true },] }],
352
- longitude: [{ type: ViewChild, args: ['longitude', { static: true },] }],
353
- map: [{ type: ViewChild, args: ['map', { static: false },] }],
354
- minLatitude: [{ type: Input }],
355
- maxLatitude: [{ type: Input }],
356
- minLongitude: [{ type: Input }],
357
- maxLongitude: [{ type: Input }],
358
- step: [{ type: Input }],
359
- zoom: [{ type: Input }],
360
- lang: [{ type: Input }],
361
- inlineErrors: [{ type: Input }],
362
- inputId: [{ type: Input }],
363
- ariaLabel: [{ type: Input, args: ['aria-label',] }],
364
- readonly: [{ type: Input }],
365
- disabled: [{ type: Input }],
366
- required: [{ type: Input }],
367
- value: [{ type: Input }],
368
- valueChange: [{ type: Output }],
369
- keyPress: [{ type: Output }]
370
- };
371
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvZ2VvbG9jYXRpb24vZ2VvbG9jYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUVMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVMLGFBQWEsRUFDYixpQkFBaUIsRUFFbEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4QixPQUFPLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGlCQUFpQixFQUNsQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBbUIzRCxNQUFNLE9BQU8sb0JBQW9CO0lBb0ovQixZQUNVLFlBQTBCLEVBQzNCLGVBQW1DO1FBRGxDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUFvQjtRQS9JNUMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ2QsZUFBVSxHQUE0QixJQUFJLENBQUM7UUFNM0Msa0JBQWEsR0FBWSxTQUFTLENBQUM7UUFDbkMsbUJBQWMsR0FBWSxTQUFTLENBQUM7UUFFcEMsa0JBQWEsR0FBRyxhQUFhLENBQUM7UUFFOUIsU0FBSSxHQUFHO1lBQ0wsRUFBRSxFQUFFO2dCQUNGLEdBQUcsRUFBRSxVQUFVO2dCQUNmLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixjQUFjLEVBQUUsaUJBQWlCO2dCQUNqQyxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsWUFBWSxFQUFFLFFBQVE7Z0JBQ3RCLFlBQVksRUFBRSxRQUFRO2dCQUN0QixXQUFXLEVBQUUsT0FBTztnQkFDcEIsWUFBWSxFQUFFLGdCQUFnQjtnQkFDOUIsY0FBYyxFQUFFO29CQUNkLEtBQUssRUFBRSxHQUFHO29CQUNWLEtBQUssRUFBRSxHQUFHO29CQUNWLElBQUksRUFBRSxHQUFHO29CQUNULElBQUksRUFBRSxHQUFHO2lCQUNWO2dCQUNELFVBQVUsRUFBRTtvQkFDVixRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixXQUFXLEVBQUUsbUNBQW1DO29CQUNoRCxXQUFXLEVBQUUsbUNBQW1DO29CQUNoRCxZQUFZLEVBQUUscUNBQXFDO29CQUNuRCxZQUFZLEVBQUUscUNBQXFDO2lCQUNwRDthQUNGO1lBQ0QsRUFBRSxFQUFFO2dCQUNGLEdBQUcsRUFBRSxTQUFTO2dCQUNkLEdBQUcsRUFBRSxVQUFVO2dCQUNmLGNBQWMsRUFBRSxzQkFBc0I7Z0JBQ3RDLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixZQUFZLEVBQUUsYUFBYTtnQkFDM0IsWUFBWSxFQUFFLFVBQVU7Z0JBQ3hCLFdBQVcsRUFBRSxRQUFRO2dCQUNyQixZQUFZLEVBQUUscUJBQXFCO2dCQUNuQyxjQUFjLEVBQUU7b0JBQ2QsS0FBSyxFQUFFLEdBQUc7b0JBQ1YsS0FBSyxFQUFFLEdBQUc7b0JBQ1YsSUFBSSxFQUFFLEdBQUc7b0JBQ1QsSUFBSSxFQUFFLEdBQUc7aUJBQ1Y7Z0JBQ0QsVUFBVSxFQUFFO29CQUNWLFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFdBQVcsRUFBRSxvQ0FBb0M7b0JBQ2pELFdBQVcsRUFBRSxvQ0FBb0M7b0JBQ2pELFlBQVksRUFBRSxzQ0FBc0M7b0JBQ3BELFlBQVksRUFBRSxzQ0FBc0M7aUJBQ3JEO2FBQ0Y7U0FDRixDQUFDO1FBbUJPLFNBQUksR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBR3JCLGFBQVEsR0FBbUIsSUFBSSxDQUFDO1FBb0R0QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFDM0MsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO1FBRXZELGFBQVEsR0FBRyxDQUFDLEtBQVUsRUFBUSxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQ3BDLGNBQVMsR0FBRyxHQUFTLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFLeEIsQ0FBQztJQXJFSixJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBUUQsSUFDSSxRQUFRLENBQUMsQ0FBbUI7UUFDOUIsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUNJLFFBQVEsQ0FBQyxDQUFVO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQ0ksS0FBSyxDQUFDLENBQVc7UUFDbkIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNyQixPQUFPLENBQUMsMENBQTBDO1NBQ25EO1FBQ0QsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUNFLENBQUM7WUFDRCxDQUFDLENBQUMsV0FBVztZQUNiLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDMUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNwRDtZQUNBLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5QzthQUFNLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2xDO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoQiwwREFBMEQ7WUFDMUQscUZBQXFGO1NBQ3RGO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFCO0lBQ0gsQ0FBQztJQUNELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBYUQsZ0RBQWdEO0lBQ2hELFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxRQUFhO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDakIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQWlCO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFDRCx1REFBdUQ7SUFFL0Msb0JBQW9CLENBQUMsUUFBZ0I7UUFDM0MsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyxhQUFhLEdBQUcsUUFBUSxDQUFDO0lBQ2hDLENBQUM7SUFDTyxxQkFBcUIsQ0FBQyxTQUFpQjtRQUM3QyxrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUNELEtBQUs7UUFDSCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIseUJBQXlCLEtBQVUsQ0FBQztJQUVwQyxRQUFRLENBQUMsT0FBd0I7UUFDL0IsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUM1QixJQUFJLE1BQU0sR0FBNEIsSUFBSSxDQUFDO1FBRTNDLElBQ0UsSUFBSSxDQUFDLFFBQVE7WUFDYixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDaEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUMzQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQzVCO1lBQ0EsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztTQUN4RDtRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDOUQsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLGNBQWMsR0FBRztnQkFDdEIsS0FBSztnQkFDTCxNQUFNLEVBQUUseUJBQXlCO2FBQ2xDLENBQUM7U0FDSDtRQUNELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDOUQsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLGVBQWUsR0FBRztnQkFDdkIsS0FBSztnQkFDTCxNQUFNLEVBQUUsMEJBQTBCO2FBQ25DLENBQUM7U0FDSDtRQUNELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckUsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLFdBQVcsR0FBRztnQkFDbkIsS0FBSztnQkFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVc7Z0JBQ3JCLE1BQU0sRUFBRSx5Q0FBeUMsSUFBSSxDQUFDLFdBQVcsR0FBRzthQUNyRSxDQUFDO1NBQ0g7UUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3JFLE1BQU0sR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sQ0FBQyxXQUFXLEdBQUc7Z0JBQ25CLEtBQUs7Z0JBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUNyQixNQUFNLEVBQUUsMENBQTBDLElBQUksQ0FBQyxXQUFXLEdBQUc7YUFDdEUsQ0FBQztTQUNIO1FBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN4RSxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsWUFBWSxHQUFHO2dCQUNwQixLQUFLO2dCQUNMLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWTtnQkFDdEIsTUFBTSxFQUFFLDBDQUEwQyxJQUFJLENBQUMsWUFBWSxHQUFHO2FBQ3ZFLENBQUM7U0FDSDtRQUNELElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDeEUsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDdEIsTUFBTSxDQUFDLFlBQVksR0FBRztnQkFDcEIsS0FBSztnQkFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ3RCLE1BQU0sRUFBRSwyQ0FBMkMsSUFBSSxDQUFDLFlBQVksR0FBRzthQUN4RSxDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUN6QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQ0QsNkJBQTZCO0lBRTdCLFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPO1lBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNkLENBQUMsQ0FBQyxlQUFlLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCx3Q0FBd0MsQ0FDdEMsdUJBQWlDO1FBRWpDLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUNuQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsRUFDMUIsSUFBSSxDQUFDLElBQUksQ0FDVixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLENBQ3BDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUMxQixJQUFJLENBQUMsSUFBSSxDQUNWLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNsQyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDbkI7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsSUFBSSxFQUFFLE9BQU87WUFDYixXQUFXLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO1NBQ3pDLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0QsZUFBZSxDQUFDLFdBQW1CO1FBQ2pDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLE9BQU87U0FDUjtRQUNELE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzFFLElBQ0UsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUQsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsRUFDekI7WUFDQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNuQjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRztnQkFDWCxJQUFJLEVBQUUsT0FBTztnQkFDYixXQUFXLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQ2xELGdCQUFnQjtpQkFDakI7YUFDRixDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELGdCQUFnQixDQUFDLFlBQW9CO1FBQ25DLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLE9BQU87U0FDUjtRQUNELE1BQU0saUJBQWlCLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FBQyxZQUFZO1lBQ2YsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNULElBQ0UsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUM7WUFDMUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDM0Q7WUFDQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNuQjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRztnQkFDWCxJQUFJLEVBQUUsT0FBTztnQkFDYixXQUFXLEVBQUU7b0JBQ1gsaUJBQWlCO29CQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztpQkFDbkQ7YUFDRixDQUFDO1NBQ0g7UUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELFVBQVUsQ0FBQyxLQUFvQjtRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVE7WUFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO2dCQUNiLENBQUMsQ0FBQyxtQkFBbUI7Z0JBQ3JCLENBQUMsQ0FBQyxVQUFVO1lBQ2QsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRO2dCQUNmLENBQUMsQ0FBQyxVQUFVO2dCQUNaLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDVCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQXVCO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3ZDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDVCxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyx3Q0FBd0MsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2RDtRQUNILENBQUMsRUFDRCxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUNWLENBQUM7SUFDSixDQUFDO0lBRUQsdUJBQXVCLENBQUMsUUFBa0IsRUFBRSxHQUFRO1FBQ2xELEdBQUcsQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUTtZQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQzFDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxTQUFTLENBQ1AsUUFBOEIsRUFDOUIsSUFBZ0I7UUFFaEIsT0FBTyxRQUFRLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxPQUFPLENBQ0wsUUFBOEIsRUFDOUIsTUFBYztRQUVkLE9BQU8sUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsQ0FBQyxnQ0FBZ0M7UUFDbEUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLG9EQUFvRDtRQUNqRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDaEQsQ0FBQzs7QUE1WU0sOEJBQVMsR0FBRyxDQUFDLENBQUM7O1lBbEJ0QixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtnQkFDM0IsMmpMQUEyQztnQkFFM0MsU0FBUyxFQUFFO29CQUNUO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLEtBQUssRUFBRSxJQUFJO3dCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7cUJBQ3BEO29CQUNEO3dCQUNFLE9BQU8sRUFBRSxhQUFhO3dCQUN0QixLQUFLLEVBQUUsSUFBSTt3QkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDO3FCQUNwRDtpQkFDRjs7YUFDRjs7O1lBbkJRLFlBQVk7WUFDWixrQkFBa0I7Ozt1QkFzQnhCLFNBQVMsU0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3dCQUN0QyxTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtrQkFDdkMsU0FBUyxTQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7MEJBZ0VsQyxLQUFLOzBCQUVMLEtBQUs7MkJBRUwsS0FBSzsyQkFFTCxLQUFLO21CQUVMLEtBQUs7bUJBRUwsS0FBSzttQkFPTCxLQUFLOzJCQUNMLEtBQUs7c0JBQ0wsS0FBSzt3QkFDTCxLQUFLLFNBQUMsWUFBWTt1QkFDbEIsS0FBSzt1QkFFTCxLQUFLO3VCQVNMLEtBQUs7b0JBUUwsS0FBSzswQkFpQ0wsTUFBTTt1QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgTkdfVkFMSURBVE9SUyxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4uL2RhdGFzb3VyY2UnO1xuaW1wb3J0IHtcbiAgZXhpc3RzLFxuICBoYXNWYWx1ZSxcbiAgaXNJbml0aWFsQW5kRW1wdHksXG4gIGlzVmFsaWROdW1iZXIsXG4gIHJvdW5kVG9NdWx0aXBsZU9mXG59IGZyb20gJy4uL2hlbHBlckZucyc7XG5pbXBvcnQgeyBsYW5ndWFnZURldGVjdG9yIH0gZnJvbSAnLi4vbGFuZyc7XG5pbXBvcnQgeyBHZW9Qb2ludCB9IGZyb20gJy4uL21hcC9nZW9wb2ludCc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEdlb2xvY2F0aW9uU2VydmljZSB9IGZyb20gJy4vZ2VvbG9jYXRpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x1eC1nZW9sb2NhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9nZW9sb2NhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dlb2xvY2F0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBHZW9sb2NhdGlvbkNvbXBvbmVudClcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEdlb2xvY2F0aW9uQ29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBHZW9sb2NhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHN0YXRpYyBpZENvdW50ZXIgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoJ2xhdGl0dWRlJywgeyBzdGF0aWM6IHRydWUgfSkgbGF0aXR1ZGU6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2xvbmdpdHVkZScsIHsgc3RhdGljOiB0cnVlIH0pIGxvbmdpdHVkZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnbWFwJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1hcD86IEVsZW1lbnRSZWY7XG5cbiAgdG91Y2hlZCA9IGZhbHNlO1xuICBkaXJ0eSA9IGZhbHNlO1xuICBsYXN0RXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW47XG4gIHByaXZhdGUgX3JlcXVpcmVkOiBib29sZWFuO1xuICBwcml2YXRlIF92YWx1ZTogYW55O1xuXG4gIGxhdGl0dWRlVmFsdWU/OiBudW1iZXIgPSB1bmRlZmluZWQ7XG4gIGxvbmdpdHVkZVZhbHVlPzogbnVtYmVyID0gdW5kZWZpbmVkO1xuXG4gIGlzVmFsaWROdW1iZXIgPSBpc1ZhbGlkTnVtYmVyO1xuXG4gIGkxOG4gPSB7XG4gICAgZW46IHtcbiAgICAgIGxhdDogJ2xhdGl0dWRlJyxcbiAgICAgIGxvbjogJ2xvbmdpdHVkZScsXG4gICAgICBzZWxlY3RMb2NhdGlvbjogJ1NlbGVjdCBsb2NhdGlvbicsXG4gICAgICBsb2NhdGlvbjogJ0xvY2F0aW9uJyxcbiAgICAgIHNlbGVjdEFjdGlvbjogJ1NlbGVjdCcsXG4gICAgICBjYW5jZWxBY3Rpb246ICdDYW5jZWwnLFxuICAgICAgY2xvc2VBY3Rpb246ICdDbG9zZScsXG4gICAgICB0eXBlVG9TZWFyY2g6ICd0eXBlIHRvIHNlYXJjaCcsXG4gICAgICBjYXJkaW5hbFBvaW50czoge1xuICAgICAgICBub3J0aDogJ04nLFxuICAgICAgICBzb3V0aDogJ1MnLFxuICAgICAgICBlYXN0OiAnRScsXG4gICAgICAgIHdlc3Q6ICdXJ1xuICAgICAgfSxcbiAgICAgIHVzZXJFcnJvcnM6IHtcbiAgICAgICAgcmVxdWlyZWQ6ICdSZXF1aXJlZCBmaWVsZC4nLFxuICAgICAgICBtaW5MYXRpdHVkZTogJ01pbmltdW0gbGF0aXR1ZGUgaXMgJG1pbkxhdGl0dWRlLicsXG4gICAgICAgIG1heExhdGl0dWRlOiAnTWF4aW11bSBsYXRpdHVkZSBpcyAkbWF4TGF0aXR1ZGUuJyxcbiAgICAgICAgbWluTG9uZ2l0dWRlOiAnTWluaW11bSBsb25naXR1ZGUgaXMgJG1pbkxvbmdpdHVkZS4nLFxuICAgICAgICBtYXhMb25naXR1ZGU6ICdNYXhpbXVtIGxvbmdpdHVkZSBpcyAkbWF4TG9uZ2l0dWRlLidcbiAgICAgIH1cbiAgICB9LFxuICAgIGVzOiB7XG4gICAgICBsYXQ6ICdsYXRpdHVkJyxcbiAgICAgIGxvbjogJ2xvbmdpdHVkJyxcbiAgICAgIHNlbGVjdExvY2F0aW9uOiAnU2VsZWNjaW9uZSB1YmljYWNpw7NuJyxcbiAgICAgIGxvY2F0aW9uOiAnVWJpY2FjacOzbicsXG4gICAgICBzZWxlY3RBY3Rpb246ICdTZWxlY2Npb25hcicsXG4gICAgICBjYW5jZWxBY3Rpb246ICdDYW5jZWxhcicsXG4gICAgICBjbG9zZUFjdGlvbjogJ0NlcnJhcicsXG4gICAgICB0eXBlVG9TZWFyY2g6ICdlc2NyaWJlIHBhcmEgYnVzY2FyJyxcbiAgICAgIGNhcmRpbmFsUG9pbnRzOiB7XG4gICAgICAgIG5vcnRoOiAnTicsXG4gICAgICAgIHNvdXRoOiAnUycsXG4gICAgICAgIGVhc3Q6ICdFJyxcbiAgICAgICAgd2VzdDogJ08nXG4gICAgICB9LFxuICAgICAgdXNlckVycm9yczoge1xuICAgICAgICByZXF1aXJlZDogJ0VsIGNhbXBvIGVzIG9ibGlnYXRvcmlvLicsXG4gICAgICAgIG1pbkxhdGl0dWRlOiAnTGEgbGF0aXR1ZCBtw61uaW1hIGVzICRtaW5MYXRpdHVkZS4nLFxuICAgICAgICBtYXhMYXRpdHVkZTogJ0xhIGxhdGl0dWQgbcOheGltYSBlcyAkbWF4TGF0aXR1ZGUuJyxcbiAgICAgICAgbWluTG9uZ2l0dWRlOiAnTGEgbG9uZ2l0dWQgbcOtbmltYSBlcyAkbWluTG9uZ2l0dWRlLicsXG4gICAgICAgIG1heExvbmdpdHVkZTogJ0xhIGxvbmdpdHVkIG3DoXhpbWEgZXMgJG1heExvbmdpdHVkZS4nXG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBtaW5MYXRpdHVkZTogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4TGF0aXR1ZGU6IG51bWJlcjtcbiAgQElucHV0KClcbiAgcHVibGljIG1pbkxvbmdpdHVkZTogbnVtYmVyO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4TG9uZ2l0dWRlOiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdGVwOiBudW1iZXI7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB6b29tOiBudW1iZXI7XG5cbiAgZ2V0IGNsYXNzTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNoZWNrQ2xhc3NOYW1lKCk7XG4gIH1cblxuICBASW5wdXQoKSBsYW5nID0gbGFuZ3VhZ2VEZXRlY3RvcigpO1xuICBASW5wdXQoKSBwdWJsaWMgaW5saW5lRXJyb3JzID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBpbnB1dElkOiBzdHJpbmc7XG4gIEBJbnB1dCgnYXJpYS1sYWJlbCcpIHB1YmxpYyBhcmlhTGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIHJlYWRvbmx5OiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgc2V0IGRpc2FibGVkKHY6IHN0cmluZyB8IGJvb2xlYW4pIHtcbiAgICB2ID0gdHlwZW9mIHYgPT09ICdzdHJpbmcnICYmIHYgIT09ICdmYWxzZScgPyB0cnVlIDogdjtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHY7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCk6IHN0cmluZyB8IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCByZXF1aXJlZCh2OiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSB2O1xuICB9XG4gIGdldCByZXF1aXJlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodjogR2VvUG9pbnQpIHtcbiAgICBpZiAodiA9PT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHJldHVybjsgLy8gcHJldmVudCBldmVudHMgd2hlbiB0aGVyZSBpcyBubyBjaGFuZ2VzXG4gICAgfVxuICAgIGNvbnN0IGluaXRpYWxBbmRFbXB0eSA9IGlzSW5pdGlhbEFuZEVtcHR5KHRoaXMuX3ZhbHVlLCB2KTtcbiAgICBpZiAoXG4gICAgICB2ICYmXG4gICAgICB2LmNvb3JkaW5hdGVzICYmXG4gICAgICB2LmNvb3JkaW5hdGVzLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgZXhpc3RzKHYuY29vcmRpbmF0ZXNbMF0gJiYgZXhpc3RzKHYuY29vcmRpbmF0ZXNbMV0pKVxuICAgICkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgdGhpcy5zZXRMYXRpdHVkZUluQ29udHJvbCh2LmNvb3JkaW5hdGVzWzFdKTtcbiAgICAgIHRoaXMuc2V0TG9uZ2l0dWRlSW5Db250cm9sKHYuY29vcmRpbmF0ZXNbMF0pO1xuICAgIH0gZWxzZSBpZiAoIXYpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMuc2V0TGF0aXR1ZGVJbkNvbnRyb2wobnVsbCk7XG4gICAgICB0aGlzLnNldExvbmdpdHVkZUluQ29udHJvbChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgLy8gd2UgZG9uJ3Qgc2V0IHZhbHVlIGluIGNvbnRyb2wgaWYgdGhlIHZhbHVlIGlzIG5vdCB2YWxpZFxuICAgICAgLy8gaWYgd2UgZG8sIHRoZSBjb250ZW50IG9mIHRoZSBjb250cm9sIGNoYW5nZXMgYW5kIGNhbiBlcmFzZSB3aGF0IHRoZSB1c2VyIGlzIHR5cGluZ1xuICAgIH1cbiAgICB0aGlzLm9uQ2hhbmdlKHYpO1xuICAgIGlmICghaW5pdGlhbEFuZEVtcHR5KSB7XG4gICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodik7XG4gICAgfVxuICB9XG4gIGdldCB2YWx1ZSgpOiBHZW9Qb2ludCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxHZW9Qb2ludD4oKTtcbiAgQE91dHB1dCgpIGtleVByZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxLZXlib2FyZEV2ZW50PigpO1xuXG4gIG9uQ2hhbmdlID0gKHZhbHVlOiBhbnkpOiB2b2lkID0+IHt9O1xuICBvblRvdWNoZWQgPSAoKTogdm9pZCA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgIHB1YmxpYyBsb2NhdGlvblNlcnZpY2U6IEdlb2xvY2F0aW9uU2VydmljZVxuICApIHt9XG5cbiAgLy8gQ29udHJvbFZhbHVlQWNjZXNzb3IgSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2Uob25DaGFuZ2U6IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBvbkNoYW5nZTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gIH1cblxuICBtYXJrQXNUb3VjaGVkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50b3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xuICB9XG4gIC8vIEVuZCBvZiBDb250cm9sVmFsdWVBY2Nlc3NvciBJbnRlcmZhY2UgaW1wbGVtZW50YXRpb25cblxuICBwcml2YXRlIHNldExhdGl0dWRlSW5Db250cm9sKGxhdGl0dWRlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyB0aGlzLmxhdGl0dWRlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBsYXRpdHVkZTtcbiAgICB0aGlzLmxhdGl0dWRlVmFsdWUgPSBsYXRpdHVkZTtcbiAgfVxuICBwcml2YXRlIHNldExvbmdpdHVkZUluQ29udHJvbChsb25naXR1ZGU6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIHRoaXMubG9uZ2l0dWRlLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBsb25naXR1ZGU7XG4gICAgdGhpcy5sb25naXR1ZGVWYWx1ZSA9IGxvbmdpdHVkZTtcbiAgfVxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnNldExhdGl0dWRlSW5Db250cm9sKG51bGwpO1xuICAgIHRoaXMuc2V0TG9uZ2l0dWRlSW5Db250cm9sKG51bGwpO1xuICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICB9XG5cbiAgLy8gVmFsaWRhdG9yIGludGVyZmFjZVxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKCk6IHZvaWQge31cblxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGxldCByZXN1bHQ6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gbnVsbDtcblxuICAgIGlmIChcbiAgICAgIHRoaXMucmVxdWlyZWQgJiZcbiAgICAgICFoYXNWYWx1ZSh2YWx1ZSkgJiZcbiAgICAgICFleGlzdHModGhpcy5sYXRpdHVkZVZhbHVlKSAmJlxuICAgICAgIWV4aXN0cyh0aGlzLmxvbmdpdHVkZVZhbHVlKVxuICAgICkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0LnJlcXVpcmVkID0geyB2YWx1ZSwgcmVhc29uOiAnUmVxdWlyZWQgZmllbGQuJyB9O1xuICAgIH1cbiAgICBpZiAoIWV4aXN0cyh0aGlzLmxhdGl0dWRlVmFsdWUpICYmIGV4aXN0cyh0aGlzLmxvbmdpdHVkZVZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0LmV4aXN0c0xhdGl0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgcmVhc29uOiAnTGF0aXR1ZGUgbm90IHNwZWNpZmllZC4nXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZXhpc3RzKHRoaXMubGF0aXR1ZGVWYWx1ZSkgJiYgIWV4aXN0cyh0aGlzLmxvbmdpdHVkZVZhbHVlKSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0LmV4aXN0c0xvbmdpdHVkZSA9IHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHJlYXNvbjogJ0xvbmdpdHVkZSBub3Qgc3BlY2lmaWVkLidcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChleGlzdHModGhpcy5taW5MYXRpdHVkZSkgJiYgdGhpcy5sYXRpdHVkZVZhbHVlIDwgdGhpcy5taW5MYXRpdHVkZSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0IHx8IHt9O1xuICAgICAgcmVzdWx0Lm1pbkxhdGl0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWluOiB0aGlzLm1pbkxhdGl0dWRlLFxuICAgICAgICByZWFzb246IGBMYXRpdHVkZSBpcyBsb3dlciB0aGFuIG1pbmltdW0gdmFsdWU6ICR7dGhpcy5taW5MYXRpdHVkZX0uYFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGV4aXN0cyh0aGlzLm1heExhdGl0dWRlKSAmJiB0aGlzLmxhdGl0dWRlVmFsdWUgPiB0aGlzLm1heExhdGl0dWRlKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWF4TGF0aXR1ZGUgPSB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBtYXg6IHRoaXMubWF4TGF0aXR1ZGUsXG4gICAgICAgIHJlYXNvbjogYExhdGl0dWRlIGlzIGhpZ2hlciB0aGFuIG1heGltdW0gdmFsdWU6ICR7dGhpcy5tYXhMYXRpdHVkZX0uYFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGV4aXN0cyh0aGlzLm1pbkxvbmdpdHVkZSkgJiYgdGhpcy5sb25naXR1ZGVWYWx1ZSA8IHRoaXMubWluTG9uZ2l0dWRlKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWluTG9uZ2l0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWluOiB0aGlzLm1pbkxvbmdpdHVkZSxcbiAgICAgICAgcmVhc29uOiBgTG9uZ2l0dWRlIGlzIGxvd2VyIHRoYW4gbWluaW11bSB2YWx1ZTogJHt0aGlzLm1pbkxvbmdpdHVkZX0uYFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGV4aXN0cyh0aGlzLm1heExvbmdpdHVkZSkgJiYgdGhpcy5sb25naXR1ZGVWYWx1ZSA+IHRoaXMubWF4TG9uZ2l0dWRlKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQgfHwge307XG4gICAgICByZXN1bHQubWF4TG9uZ2l0dWRlID0ge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbWF4OiB0aGlzLm1heExvbmdpdHVkZSxcbiAgICAgICAgcmVhc29uOiBgTG9uZ2l0dWRlIGlzIGhpZ2hlciB0aGFuIG1heGltdW0gdmFsdWU6ICR7dGhpcy5tYXhMb25naXR1ZGV9LmBcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMubGFzdEVycm9ycyA9IHJlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8vIEVuZCBvZiBWYWxpZGF0b3IgaW50ZXJmYWNlXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dElkID0gdGhpcy5pbnB1dElkXG4gICAgICA/IHRoaXMuaW5wdXRJZFxuICAgICAgOiBgZ2VvbG9jYXRpb24kJHtHZW9sb2NhdGlvbkNvbXBvbmVudC5pZENvdW50ZXIrK31gO1xuICAgIHRoaXMuc2V0UGF0dGVybnMoKTtcbiAgfVxuXG4gIHJvdW5kVG9TdGVwQW5kVXBkYXRlTGF0aXR1ZGVBbmRMb25naXR1ZGUoXG4gICAgbmV3TGF0aXR1ZGVBbmRMb25naXR1ZGU6IG51bWJlcltdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0xhdGl0dWRlID0gcm91bmRUb011bHRpcGxlT2YoXG4gICAgICBuZXdMYXRpdHVkZUFuZExvbmdpdHVkZVsxXSxcbiAgICAgIHRoaXMuc3RlcFxuICAgICk7XG4gICAgY29uc3QgbmV3TG9uZ2l0dWRlID0gcm91bmRUb011bHRpcGxlT2YoXG4gICAgICBuZXdMYXRpdHVkZUFuZExvbmdpdHVkZVswXSxcbiAgICAgIHRoaXMuc3RlcFxuICAgICk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWV4aXN0cyhuZXdMYXRpdHVkZUFuZExvbmdpdHVkZSkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnZhbHVlID0ge1xuICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgIGNvb3JkaW5hdGVzOiBbbmV3TG9uZ2l0dWRlLCBuZXdMYXRpdHVkZV1cbiAgICB9O1xuICB9XG5cbiAgb25Mb3N0Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XG4gIH1cbiAgb25FdmVudExhdGl0dWRlKG5ld0xhdGl0dWRlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld0xhdGl0dWRlVmFsdWUgPSBpc1ZhbGlkTnVtYmVyKG5ld0xhdGl0dWRlKSA/ICtuZXdMYXRpdHVkZSA6IG51bGw7XG4gICAgaWYgKFxuICAgICAgIShleGlzdHModGhpcy52YWx1ZSkgJiYgZXhpc3RzKHRoaXMudmFsdWUuY29vcmRpbmF0ZXNbMF0pKSAmJlxuICAgICAgIWV4aXN0cyhuZXdMYXRpdHVkZVZhbHVlKVxuICAgICkge1xuICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbXG4gICAgICAgICAgdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUuY29vcmRpbmF0ZXNbMF0gOiB1bmRlZmluZWQsXG4gICAgICAgICAgbmV3TGF0aXR1ZGVWYWx1ZVxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuICBvbkV2ZW50TG9uZ2l0dWRlKG5ld0xvbmdpdHVkZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXdMb25naXR1ZGVWYWx1ZSA9IGlzVmFsaWROdW1iZXIobmV3TG9uZ2l0dWRlKVxuICAgICAgPyArbmV3TG9uZ2l0dWRlXG4gICAgICA6IG51bGw7XG4gICAgaWYgKFxuICAgICAgIWV4aXN0cyhuZXdMb25naXR1ZGVWYWx1ZSkgJiZcbiAgICAgICEoZXhpc3RzKHRoaXMudmFsdWUpICYmIGV4aXN0cyh0aGlzLl92YWx1ZS5jb29yZGluYXRlc1sxXSkpXG4gICAgKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtcbiAgICAgICAgICBuZXdMb25naXR1ZGVWYWx1ZSxcbiAgICAgICAgICB0aGlzLnZhbHVlID8gdGhpcy52YWx1ZS5jb29yZGluYXRlc1sxXSA6IHVuZGVmaW5lZFxuICAgICAgICBdXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcbiAgfVxuICBvbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5rZXlQcmVzcy5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGNoZWNrQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWRcbiAgICAgID8gdGhpcy5yZWFkb25seVxuICAgICAgICA/ICdkaXNhYmxlZCByZWFkb25seSdcbiAgICAgICAgOiAnZGlzYWJsZWQnXG4gICAgICA6IHRoaXMucmVhZG9ubHlcbiAgICAgID8gJ3JlYWRvbmx5J1xuICAgICAgOiAnJztcbiAgfVxuXG4gIG9wZW5Nb2RhbE1hcChtb2RhbDogVGVtcGxhdGVSZWY8YW55Pik6IHZvaWQge1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4obW9kYWwpLnJlc3VsdC50aGVuKFxuICAgICAgKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAocmVzdWx0ICE9PSAnY2FuY2VsJykge1xuICAgICAgICAgIHRoaXMucm91bmRUb1N0ZXBBbmRVcGRhdGVMYXRpdHVkZUFuZExvbmdpdHVkZShyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgKF8pID0+IHt9XG4gICAgKTtcbiAgfVxuXG4gIG9uU2VhcmNoTG9jYXRpb25DaGFuZ2VkKG5ld1ZhbHVlOiBHZW9Qb2ludCwgbWFwOiBhbnkpOiB2b2lkIHtcbiAgICBtYXAubWFya2VyUG9pbnQgPSBuZXdWYWx1ZTtcbiAgICBtYXAuY2VudGVyID0gbWFwLm1hcmtlclBvaW50O1xuICB9XG5cbiAgZ2V0IG1hcFRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8ICEhdGhpcy5yZWFkb25seVxuICAgICAgPyB0aGlzLmkxOG5bdGhpcy5sYW5nXS5sb2NhdGlvblxuICAgICAgOiB0aGlzLmkxOG5bdGhpcy5sYW5nXS5zZWxlY3RMb2NhdGlvbjtcbiAgfVxuXG4gIGdldCBzZWxmKCk6IEdlb2xvY2F0aW9uQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldExhYmVscyhcbiAgICBpbnN0YW5jZTogR2VvbG9jYXRpb25Db21wb25lbnQsXG4gICAga2V5czogR2VvUG9pbnRbXVxuICApOiBPYnNlcnZhYmxlPERhdGFTb3VyY2U8R2VvUG9pbnQsIHN0cmluZz4+IHtcbiAgICByZXR1cm4gaW5zdGFuY2UubG9jYXRpb25TZXJ2aWNlLmdldExhYmVscyhpbnN0YW5jZS5sb2NhdGlvblNlcnZpY2UsIGtleXMpO1xuICB9XG5cbiAgZ2V0RGF0YShcbiAgICBpbnN0YW5jZTogR2VvbG9jYXRpb25Db21wb25lbnQsXG4gICAgc2VhcmNoOiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxEYXRhU291cmNlPEdlb1BvaW50LCBzdHJpbmc+PiB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmxvY2F0aW9uU2VydmljZS5nZXREYXRhKGluc3RhbmNlLmxvY2F0aW9uU2VydmljZSwgc2VhcmNoKTtcbiAgfVxuXG4gIHNldFBhdHRlcm5zKCk6IHZvaWQge1xuICAgIHRoaXMuc3RlcCA9IHRoaXMuc3RlcCB8fCAwLjAwMDAxOyAvLyAwLjAwMDAxIGRlZ3JlZXMgPSAxLjExIG1ldGVyc1xuICAgIHRoaXMuem9vbSA9IHRoaXMuem9vbSB8fCAxODsgLy8gKDM2MC8yXjE4KSBkZWdyZWVzIH4gMC4wMDEzNyBkZWdyZWVzIH4gMTUzIG1ldGVyc1xuICAgIHRoaXMubWluTGF0aXR1ZGUgPSB0aGlzLm1pbkxhdGl0dWRlIHx8IC05MDtcbiAgICB0aGlzLm1heExhdGl0dWRlID0gdGhpcy5tYXhMYXRpdHVkZSB8fCArOTA7XG4gICAgdGhpcy5taW5Mb25naXR1ZGUgPSB0aGlzLm1pbkxvbmdpdHVkZSB8fCAtMTgwO1xuICAgIHRoaXMubWF4TG9uZ2l0dWRlID0gdGhpcy5tYXhMb25naXR1ZGUgfHwgKzE4MDtcbiAgfVxufVxuIl19
@@ -1,63 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { from, of } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- let openLayersIsInstalled = false;
5
- export class OpenLayerLoaderService {
6
- load() {
7
- if (window.ol) {
8
- return of(true);
9
- }
10
- const openLayerJsUrl = 'https://openlayers.org/en/v5.3.0/build/ol.js';
11
- const openLayerCssUrl = 'https://openlayers.org/en/v5.3.0/css/ol.css';
12
- if (!openLayersIsInstalled) {
13
- openLayersIsInstalled = true; // only try to install it once
14
- loadCss(openLayerCssUrl, () => { });
15
- return from(new Promise((resolve, _) => {
16
- loadScript(openLayerJsUrl, () => resolve(true));
17
- }));
18
- }
19
- return of(true);
20
- }
21
- }
22
- OpenLayerLoaderService.ɵprov = i0.ɵɵdefineInjectable({ factory: function OpenLayerLoaderService_Factory() { return new OpenLayerLoaderService(); }, token: OpenLayerLoaderService, providedIn: "root" });
23
- OpenLayerLoaderService.decorators = [
24
- { type: Injectable, args: [{ providedIn: 'root' },] }
25
- ];
26
- /** Dynamically load a script from url and return a callback */
27
- const loadScript = (url, callback) => {
28
- const script = document.createElement('script');
29
- script.type = 'text/javascript';
30
- if (script.readyState) {
31
- // for old IE
32
- script.onreadystatechange = () => {
33
- if (script.readyState === 'loaded' || script.readyState === 'complete') {
34
- script.onreadystatechange = null;
35
- callback();
36
- }
37
- };
38
- }
39
- else {
40
- // Others browsers
41
- script.onload = () => {
42
- callback();
43
- };
44
- }
45
- script.src = url;
46
- document.getElementsByTagName('head')[0].appendChild(script);
47
- };
48
- const ɵ0 = loadScript;
49
- /** Dynamically load css from url and return a callback */
50
- const loadCss = (url, callback) => {
51
- const link = document.createElement('link');
52
- link.type = 'text/css';
53
- link.rel = 'stylesheet';
54
- link.type = 'text/javascript';
55
- link.href = url;
56
- link.onload = () => {
57
- callback();
58
- };
59
- document.getElementsByTagName('head')[0].appendChild(link);
60
- };
61
- const ɵ1 = loadCss;
62
- export { ɵ0, ɵ1 };
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmxheWVyLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvZ2VvbG9jYXRpb24vb3BlbmxheWVyLWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRTVDLElBQUkscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0FBR2xDLE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsSUFBSTtRQUNGLElBQUssTUFBYyxDQUFDLEVBQUUsRUFBRTtZQUN0QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQjtRQUVELE1BQU0sY0FBYyxHQUFHLDhDQUE4QyxDQUFDO1FBQ3RFLE1BQU0sZUFBZSxHQUFHLDZDQUE2QyxDQUFDO1FBRXRFLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUMxQixxQkFBcUIsR0FBRyxJQUFJLENBQUMsQ0FBQyw4QkFBOEI7WUFDNUQsT0FBTyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FDVCxJQUFJLE9BQU8sQ0FBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbEMsVUFBVSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsRCxDQUFDLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDOzs7O1lBcEJGLFVBQVUsU0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBdUJsQywrREFBK0Q7QUFDL0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFXLEVBQUUsUUFBb0IsRUFBUSxFQUFFO0lBQzdELE1BQU0sTUFBTSxHQUFRLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckQsTUFBTSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUVoQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7UUFDckIsYUFBYTtRQUNiLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxHQUFTLEVBQUU7WUFDckMsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtnQkFDdEUsTUFBTSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztnQkFDakMsUUFBUSxFQUFFLENBQUM7YUFDWjtRQUNILENBQUMsQ0FBQztLQUNIO1NBQU07UUFDTCxrQkFBa0I7UUFDbEIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFTLEVBQUU7WUFDekIsUUFBUSxFQUFFLENBQUM7UUFDYixDQUFDLENBQUM7S0FDSDtJQUNELE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ2pCLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDOztBQUVGLDBEQUEwRDtBQUMxRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQVcsRUFBRSxRQUFvQixFQUFRLEVBQUU7SUFDMUQsTUFBTSxJQUFJLEdBQVEsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQztJQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBUyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0lBQ0YsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5sZXQgb3BlbkxheWVyc0lzSW5zdGFsbGVkID0gZmFsc2U7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgT3BlbkxheWVyTG9hZGVyU2VydmljZSB7XG4gIGxvYWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKCh3aW5kb3cgYXMgYW55KS5vbCkge1xuICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5MYXllckpzVXJsID0gJ2h0dHBzOi8vb3BlbmxheWVycy5vcmcvZW4vdjUuMy4wL2J1aWxkL29sLmpzJztcbiAgICBjb25zdCBvcGVuTGF5ZXJDc3NVcmwgPSAnaHR0cHM6Ly9vcGVubGF5ZXJzLm9yZy9lbi92NS4zLjAvY3NzL29sLmNzcyc7XG5cbiAgICBpZiAoIW9wZW5MYXllcnNJc0luc3RhbGxlZCkge1xuICAgICAgb3BlbkxheWVyc0lzSW5zdGFsbGVkID0gdHJ1ZTsgLy8gb25seSB0cnkgdG8gaW5zdGFsbCBpdCBvbmNlXG4gICAgICBsb2FkQ3NzKG9wZW5MYXllckNzc1VybCwgKCkgPT4ge30pO1xuICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCBfKSA9PiB7XG4gICAgICAgICAgbG9hZFNjcmlwdChvcGVuTGF5ZXJKc1VybCwgKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb2YodHJ1ZSk7XG4gIH1cbn1cblxuLyoqIER5bmFtaWNhbGx5IGxvYWQgYSBzY3JpcHQgZnJvbSB1cmwgYW5kIHJldHVybiBhIGNhbGxiYWNrICovXG5jb25zdCBsb2FkU2NyaXB0ID0gKHVybDogc3RyaW5nLCBjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICBjb25zdCBzY3JpcHQ6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuXG4gIGlmIChzY3JpcHQucmVhZHlTdGF0ZSkge1xuICAgIC8vIGZvciBvbGQgSUVcbiAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSAnbG9hZGVkJyB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVycyBicm93c2Vyc1xuICAgIHNjcmlwdC5vbmxvYWQgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH1cbiAgc2NyaXB0LnNyYyA9IHVybDtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xufTtcblxuLyoqIER5bmFtaWNhbGx5IGxvYWQgY3NzIGZyb20gdXJsIGFuZCByZXR1cm4gYSBjYWxsYmFjayAqL1xuY29uc3QgbG9hZENzcyA9ICh1cmw6IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkID0+IHtcbiAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnO1xuICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgbGluay50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gIGxpbmsuaHJlZiA9IHVybDtcbiAgbGluay5vbmxvYWQgPSAoKTogdm9pZCA9PiB7XG4gICAgY2FsbGJhY2soKTtcbiAgfTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChsaW5rKTtcbn07XG4iXX0=