@sd-angular/core 1.0.78 → 1.0.79

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 (44) hide show
  1. package/bundles/sd-angular-core-chip.umd.js +197 -43
  2. package/bundles/sd-angular-core-chip.umd.js.map +1 -1
  3. package/bundles/sd-angular-core-chip.umd.min.js +2 -2
  4. package/bundles/sd-angular-core-chip.umd.min.js.map +1 -1
  5. package/bundles/sd-angular-core-grid-material.umd.js +1 -1
  6. package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
  7. package/bundles/sd-angular-core-grid-material.umd.min.js +1 -1
  8. package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
  9. package/bundles/sd-angular-core-loading.umd.js +367 -22
  10. package/bundles/sd-angular-core-loading.umd.js.map +1 -1
  11. package/bundles/sd-angular-core-loading.umd.min.js +15 -1
  12. package/bundles/sd-angular-core-loading.umd.min.js.map +1 -1
  13. package/bundles/sd-angular-core-radio.umd.js +36 -21
  14. package/bundles/sd-angular-core-radio.umd.js.map +1 -1
  15. package/bundles/sd-angular-core-radio.umd.min.js +2 -2
  16. package/bundles/sd-angular-core-radio.umd.min.js.map +1 -1
  17. package/bundles/sd-angular-core-select.umd.js +0 -1
  18. package/bundles/sd-angular-core-select.umd.js.map +1 -1
  19. package/bundles/sd-angular-core-select.umd.min.js +2 -2
  20. package/bundles/sd-angular-core-select.umd.min.js.map +1 -1
  21. package/chip/sd-angular-core-chip.metadata.json +1 -1
  22. package/chip/src/lib/chip.component.d.ts +6 -4
  23. package/esm2015/chip/src/lib/chip.component.js +156 -33
  24. package/esm2015/grid-material/src/lib/components/desktop-cell-view/desktop-cell-view.component.js +2 -2
  25. package/esm2015/loading/src/lib/loading.service.js +49 -14
  26. package/esm2015/radio/src/lib/radio.component.js +36 -21
  27. package/esm2015/select/src/lib/select.component.js +1 -2
  28. package/fesm2015/sd-angular-core-chip.js +155 -32
  29. package/fesm2015/sd-angular-core-chip.js.map +1 -1
  30. package/fesm2015/sd-angular-core-grid-material.js +1 -1
  31. package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
  32. package/fesm2015/sd-angular-core-loading.js +48 -13
  33. package/fesm2015/sd-angular-core-loading.js.map +1 -1
  34. package/fesm2015/sd-angular-core-radio.js +35 -21
  35. package/fesm2015/sd-angular-core-radio.js.map +1 -1
  36. package/fesm2015/sd-angular-core-select.js +0 -1
  37. package/fesm2015/sd-angular-core-select.js.map +1 -1
  38. package/grid-material/sd-angular-core-grid-material.metadata.json +1 -1
  39. package/loading/sd-angular-core-loading.metadata.json +1 -1
  40. package/loading/src/lib/loading.service.d.ts +5 -2
  41. package/package.json +1 -1
  42. package/radio/sd-angular-core-radio.metadata.json +1 -1
  43. package/radio/src/lib/radio.component.d.ts +5 -5
  44. package/{sd-angular-core-1.0.78.tgz → sd-angular-core-1.0.79.tgz} +0 -0
@@ -1,15 +1,15 @@
1
- var _name, _form, _itemChanges, _items, _subscription, _updateValidator;
2
- import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
1
+ var _name, _form, _itemChanges, _items, _allItems, _allItem, _cache, _delay, _itemsChanges, _subscription, _updateValidator, _loadItems, _loadSelectedItems;
2
+ import { __awaiter, __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
3
  import { Component, Input, ViewChild, Output, EventEmitter, ChangeDetectorRef, ContentChild } from '@angular/core';
4
4
  import { COMMA, ENTER } from '@angular/cdk/keycodes';
5
- import { map, startWith } from 'rxjs/operators';
5
+ import { debounceTime, map, startWith, switchMap } from 'rxjs/operators';
6
6
  import * as uuid from 'uuid';
7
7
  import { NgForm, FormControl, Validators } from '@angular/forms';
8
- import { Subscription, Subject } from 'rxjs';
8
+ import { Subscription, Subject, BehaviorSubject, combineLatest } from 'rxjs';
9
9
  import { SdUtilityService } from '@sd-angular/core/utility';
10
10
  import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
11
11
  import { SdChipDisplayDef } from './directives/sd-chip-display-def.directive';
12
- import { SdViewDefDirective } from '@sd-angular/core/common';
12
+ import { SdFormControl, SdViewDefDirective } from '@sd-angular/core/common';
13
13
  class SdChipErrotStateMatcher {
14
14
  constructor(formControl) {
15
15
  this.formControl = formControl;
@@ -31,8 +31,25 @@ export class SdChip {
31
31
  this.removable = true;
32
32
  _itemChanges.set(this, new Subject());
33
33
  _items.set(this, []);
34
+ // @Input() set items(items: undefined | any[]) {
35
+ // if (!items) {
36
+ // this.#items = [];
37
+ // } else if (Array.isArray(items)) {
38
+ // this.#items = items.filter(e => (e ?? '').toString().trim() !== '');
39
+ // } else {
40
+ // this.#items = items;
41
+ // }
42
+ // this.inputControl.updateValueAndValidity();
43
+ // this.#itemChanges.next(this.items);
44
+ // }
45
+ // Server search
46
+ this.loading = false;
47
+ _allItems.set(this, void 0);
48
+ _allItem.set(this, {});
49
+ _cache.set(this, {});
50
+ _delay.set(this, 200); // Sau khoảng thời gian delay nếu không có thay đổi thì thì mới bắt đầu thực hiện gọi hàm
51
+ _itemsChanges.set(this, new BehaviorSubject([]));
34
52
  this.limit = 50;
35
- this.selectedItems = [];
36
53
  // Validator
37
54
  this.isRequired = false;
38
55
  this.modelChange = new EventEmitter();
@@ -41,7 +58,7 @@ export class SdChip {
41
58
  this.chipSelected = new EventEmitter();
42
59
  this.isFocused = false;
43
60
  this.inputControl = new FormControl();
44
- this.formControl = new FormControl();
61
+ this.formControl = new SdFormControl();
45
62
  this.matcher = new SdChipErrotStateMatcher(this.formControl);
46
63
  _subscription.set(this, new Subscription());
47
64
  _updateValidator.set(this, () => {
@@ -62,6 +79,39 @@ export class SdChip {
62
79
  this.formControl.setAsyncValidators(asyncValidators);
63
80
  this.formControl.updateValueAndValidity();
64
81
  });
82
+ _loadItems.set(this, (searchText, items) => __awaiter(this, void 0, void 0, function* () {
83
+ searchText = (searchText === null || searchText === void 0 ? void 0 : searchText.toString()) || '';
84
+ if (__classPrivateFieldGet(this, _cache)[searchText] === undefined) {
85
+ this.loading = true;
86
+ const results = yield items(searchText).catch(() => []).finally(() => this.loading = false);
87
+ const objItem = Array.toObject(results, this.valueField);
88
+ __classPrivateFieldSet(this, _allItem, Object.assign(Object.assign({}, __classPrivateFieldGet(this, _allItem)), objItem));
89
+ __classPrivateFieldGet(this, _cache)[searchText] = results.union(this.valueField);
90
+ }
91
+ // if (!this.multiple) {
92
+ // return this.#cache[searchText];
93
+ // }
94
+ const selectedItems = yield __classPrivateFieldGet(this, _loadSelectedItems).call(this, this.formControl.value, items);
95
+ // Đưa những selectedItems lên đầu nếu không mat-select-trigger sẽ không work
96
+ return [...selectedItems, ...__classPrivateFieldGet(this, _cache)[searchText]].union(this.valueField);
97
+ }));
98
+ _loadSelectedItems.set(this, (value, items) => __awaiter(this, void 0, void 0, function* () {
99
+ if (!(value === null || value === void 0 ? void 0 : value.toString())) {
100
+ return [];
101
+ }
102
+ const values = Array.isArray(value) ? value : [value];
103
+ if (!this.valueField && !this.displayField) {
104
+ return values;
105
+ }
106
+ this.loading = true;
107
+ if (values.some(val => __classPrivateFieldGet(this, _allItem)[val] === undefined)) {
108
+ const results = yield items(value, true).catch(() => []).finally(() => this.loading = false);
109
+ const objItem = Array.toObject(results, this.valueField);
110
+ const objValue = Array.toObject(values.map(val => ({ [val === null || val === void 0 ? void 0 : val.toString()]: { [this.valueField]: val, [this.displayField]: val } })), this.valueField);
111
+ __classPrivateFieldSet(this, _allItem, Object.assign(Object.assign(Object.assign({}, objValue), __classPrivateFieldGet(this, _allItem)), objItem));
112
+ }
113
+ return values.map(val => { var _a; return (_a = __classPrivateFieldGet(this, _allItem)[val === null || val === void 0 ? void 0 : val.toString()]) !== null && _a !== void 0 ? _a : { [this.valueField]: val, [this.displayField]: val }; });
114
+ }));
65
115
  this.filter = (value) => {
66
116
  return __classPrivateFieldGet(this, _items).filter(item => {
67
117
  var _a;
@@ -211,26 +261,25 @@ export class SdChip {
211
261
  this.removable = (val === '') || val;
212
262
  }
213
263
  set items(items) {
264
+ __classPrivateFieldSet(this, _delay, 0);
214
265
  if (!items) {
215
- __classPrivateFieldSet(this, _items, []);
266
+ __classPrivateFieldGet(this, _itemsChanges).next([]);
216
267
  }
217
268
  else if (Array.isArray(items)) {
218
- __classPrivateFieldSet(this, _items, items.filter(e => (e !== null && e !== void 0 ? e : '').toString().trim() !== ''));
269
+ __classPrivateFieldGet(this, _itemsChanges).next(items.filter(e => e !== null && e !== undefined));
219
270
  }
220
271
  else {
221
- __classPrivateFieldSet(this, _items, items);
272
+ __classPrivateFieldSet(this, _delay, 500);
273
+ __classPrivateFieldGet(this, _itemsChanges).next(items);
222
274
  }
223
- this.inputControl.updateValueAndValidity();
224
- __classPrivateFieldGet(this, _itemChanges).next(this.items);
275
+ this.formControl.updateValueAndValidity();
225
276
  }
226
277
  // model
227
278
  set model(values) {
228
279
  if (!Array.isArray(values)) {
229
280
  values = [];
230
281
  }
231
- this.formControl.setValue(values, {
232
- emitEvent: false
233
- });
282
+ this.formControl.setValue(values);
234
283
  }
235
284
  set required(val) {
236
285
  this.isRequired = (val === '') || val;
@@ -261,24 +310,98 @@ export class SdChip {
261
310
  }
262
311
  ngAfterViewInit() {
263
312
  var _a;
264
- __classPrivateFieldGet(this, _subscription).add(this.formControl.valueChanges.subscribe(() => {
265
- const values = this.formControl.value || [];
266
- this.selectedItems = __classPrivateFieldGet(this, _items).filter(item => values.findIndex(value => value === (item === null || item === void 0 ? void 0 : item[this.valueField])) !== -1);
267
- this.modelChange.emit(values);
268
- this.sdChange.emit(values);
269
- setTimeout(() => {
270
- var _a;
271
- (_a = __classPrivateFieldGet(this, _form)) === null || _a === void 0 ? void 0 : _a.markAsDirty();
272
- }, 0);
313
+ __classPrivateFieldGet(this, _subscription).add(this.formControl.sdChanges.subscribe(() => {
314
+ this.ref.markForCheck();
273
315
  }));
274
- __classPrivateFieldGet(this, _subscription).add(__classPrivateFieldGet(this, _itemChanges).pipe(startWith(__classPrivateFieldGet(this, _items))).subscribe(() => {
275
- const values = this.formControl.value || [];
276
- this.selectedItems = [];
277
- for (const value of values) {
278
- const item = __classPrivateFieldGet(this, _items).find(e => (e === null || e === void 0 ? void 0 : e[this.valueField]) === value) || {};
279
- this.selectedItems.push(Object.assign(Object.assign({}, item), { [this.valueField]: value }));
316
+ __classPrivateFieldSet(this, _allItems, combineLatest([
317
+ __classPrivateFieldGet(this, _itemsChanges).asObservable(),
318
+ this.inputControl.valueChanges.pipe(startWith(''), debounceTime(__classPrivateFieldGet(this, _delay))),
319
+ this.formControl.valueChanges.pipe(startWith(this.formControl.value))
320
+ ]).pipe(switchMap(([items, val, formValue]) => __awaiter(this, void 0, void 0, function* () {
321
+ if (typeof (items) === 'function') {
322
+ return yield __classPrivateFieldGet(this, _loadItems).call(this, val, items);
280
323
  }
281
- }));
324
+ __classPrivateFieldSet(this, _allItem, items.toObject(this.valueField));
325
+ const isArray = Array.isArray(formValue);
326
+ const hasFields = !!this.valueField && !!this.displayField;
327
+ const filteredItems = items.filter(item => {
328
+ const value = hasFields ? item[this.valueField] : item;
329
+ const display = hasFields ? item[this.displayField] : item;
330
+ if (String.aliasIncludes(value, val) || String.aliasIncludes(display, val)) {
331
+ return true;
332
+ }
333
+ if (isArray) {
334
+ return formValue.some(e => e === value);
335
+ }
336
+ return formValue === value;
337
+ });
338
+ if (items.length <= this.limit) {
339
+ return filteredItems;
340
+ }
341
+ // Đưa những selectedItems lên đầu nếu không mat-select-trigger sẽ không work
342
+ return filteredItems.sort((current, next) => {
343
+ const value1 = hasFields ? current[this.valueField] : current;
344
+ const value2 = hasFields ? next[this.valueField] : next;
345
+ let flag1 = 0;
346
+ let flag2 = 0;
347
+ if (isArray) {
348
+ flag1 = formValue.some(e => e === value1) ? 1 : 0;
349
+ flag2 = formValue.some(e => e === value2) ? 1 : 0;
350
+ return flag2 - flag1;
351
+ }
352
+ flag1 = formValue === value1 ? 1 : 0;
353
+ flag2 = formValue === value2 ? 1 : 0;
354
+ return flag2 - flag1;
355
+ });
356
+ }))));
357
+ this.selectedItems = combineLatest([
358
+ __classPrivateFieldGet(this, _itemsChanges).asObservable(),
359
+ this.formControl.valueChanges.pipe(startWith(this.formControl.value))
360
+ ])
361
+ .pipe(switchMap(([items, val]) => __awaiter(this, void 0, void 0, function* () {
362
+ // Vì một số lý do chưa xác định mà khi sử dụng sdViewDef thì khi chuyển sang dạng view sẽ trigger val = null
363
+ // Nhưng formControl.value vẫn có giá trị đúng nên thực hiện gán val = this.formControl.value;
364
+ val = this.formControl.value;
365
+ if (!(val === null || val === void 0 ? void 0 : val.toString())) {
366
+ return [];
367
+ }
368
+ const values = Array.isArray(val) ? val : [val];
369
+ if (!this.valueField) {
370
+ return values;
371
+ }
372
+ if (typeof (items) === 'function') {
373
+ return yield __classPrivateFieldGet(this, _loadSelectedItems).call(this, val, items);
374
+ }
375
+ return values.map(value => {
376
+ return (items === null || items === void 0 ? void 0 : items.find(item => item[this.valueField] === value)) || {
377
+ [this.valueField]: value,
378
+ [this.displayField]: value
379
+ };
380
+ });
381
+ })));
382
+ this.filteredItems = __classPrivateFieldGet(this, _allItems).pipe(map(allItems => allItems.paging(this.limit)));
383
+ // this.display = this.selectedItems.pipe(
384
+ // map(selectedItems => selectedItems?.map(item => this.displayField ? item[this.displayField] : item)?.join(', ')));
385
+ // this.#subscription.add(this.formControl.valueChanges.subscribe(() => {
386
+ // const values: (string | number)[] = this.formControl.value || [];
387
+ // this.selectedItems = this.#items.filter(item => values.findIndex(value => value === item?.[this.valueField]) !== -1);
388
+ // this.modelChange.emit(values);
389
+ // this.sdChange.emit(values);
390
+ // setTimeout(() => {
391
+ // this.#form?.markAsDirty();
392
+ // }, 0);
393
+ // }));
394
+ // this.#subscription.add(this.#itemChanges.pipe(startWith(this.#items)).subscribe(() => {
395
+ // const values: (string | number)[] = this.formControl.value || [];
396
+ // this.selectedItems = [];
397
+ // for (const value of values) {
398
+ // const item = this.#items.find(e => e?.[this.valueField] === value) || {};
399
+ // this.selectedItems.push({
400
+ // ...item,
401
+ // [this.valueField]: value
402
+ // });
403
+ // }
404
+ // }));
282
405
  (_a = __classPrivateFieldGet(this, _form)) === null || _a === void 0 ? void 0 : _a.addControl(__classPrivateFieldGet(this, _name), this.formControl);
283
406
  }
284
407
  ngOnDestroy() {
@@ -287,7 +410,7 @@ export class SdChip {
287
410
  __classPrivateFieldGet(this, _subscription).unsubscribe();
288
411
  }
289
412
  }
290
- _name = new WeakMap(), _form = new WeakMap(), _itemChanges = new WeakMap(), _items = new WeakMap(), _subscription = new WeakMap(), _updateValidator = new WeakMap();
413
+ _name = new WeakMap(), _form = new WeakMap(), _itemChanges = new WeakMap(), _items = new WeakMap(), _allItems = new WeakMap(), _allItem = new WeakMap(), _cache = new WeakMap(), _delay = new WeakMap(), _itemsChanges = new WeakMap(), _subscription = new WeakMap(), _updateValidator = new WeakMap(), _loadItems = new WeakMap(), _loadSelectedItems = new WeakMap();
291
414
  SdChip.decorators = [
292
415
  { type: Component, args: [{
293
416
  selector: 'sd-chip',
@@ -326,4 +449,4 @@ SdChip.propDecorators = {
326
449
  sdView: [{ type: ContentChild, args: [SdViewDefDirective,] }],
327
450
  sdChipDisplay: [{ type: ContentChild, args: [SdChipDisplayDef,] }]
328
451
  };
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2NoaXAvIiwic291cmNlcyI6WyJzcmMvbGliL2NoaXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBR1osaUJBQWlCLEVBRWpCLFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sRUFBVyxXQUFXLEVBQTRDLFVBQVUsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4SSxPQUFPLEVBQWMsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUc1RCxPQUFPLEVBQWlELHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHdkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0QsTUFBTSx1QkFBdUI7SUFDM0IsWUFBb0IsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBSSxDQUFDO0lBQ2pELFlBQVksQ0FBQyxPQUEyQixFQUFFLElBQXdDOztRQUNoRixNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMzQyxP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b0JBT0wsS0FBSzt1QkFVTCxLQUFLO21CQU1MLEtBQUssU0FBQyxLQUFLO21CQUtYLEtBQUssU0FBQyxLQUFLOzBCQUlYLE1BQU07dUJBR04sS0FBSzt1QkFXTCxNQUFNO3VCQUNOLE1BQU07MkJBQ04sTUFBTTtvQkFFTixTQUFTLFNBQUMsT0FBTzs4QkFDakIsU0FBUyxTQUFDLE1BQU07dUJBQ2hCLFNBQVMsU0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2tDQUN0QyxTQUFTLFNBQUMsc0JBQXNCLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7cUJBQ2xFLFlBQVksU0FBQyxrQkFBa0I7NEJBQy9CLFlBQVksU0FBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkluaXQsIE9uRGVzdHJveSxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ29udGVudENoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENPTU1BLCBFTlRFUiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBOZ0Zvcm0sIE5nTW9kZWwsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTZFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS91dGlsaXR5JztcclxuaW1wb3J0IHsgU2RUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS90cmFuc2xhdGUnO1xyXG5pbXBvcnQgeyBNYXRDaGlwSW5wdXRFdmVudCwgTWF0Q2hpcExpc3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZSwgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IFNkQ2hpcFVwZGF0ZSB9IGZyb20gJy4vY2hpcC5tb2RlbCc7XHJcbmltcG9ydCB7IEVycm9yU3RhdGVNYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmltcG9ydCB7IFNkQ2hpcERpc3BsYXlEZWYgfSBmcm9tICcuL2RpcmVjdGl2ZXMvc2QtY2hpcC1kaXNwbGF5LWRlZi5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTZFZpZXdEZWZEaXJlY3RpdmUgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2NvbW1vbic7XHJcblxyXG5jbGFzcyBTZENoaXBFcnJvdFN0YXRlTWF0Y2hlciBpbXBsZW1lbnRzIEVycm9yU3RhdGVNYXRjaGVyIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbCkgeyB9XHJcbiAgaXNFcnJvclN0YXRlKGNvbnRyb2w6IEZvcm1Db250cm9sIHwgbnVsbCwgZm9ybTogRm9ybUdyb3VwRGlyZWN0aXZlIHwgTmdGb3JtIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaXNTdWJtaXR0ZWQgPSBmb3JtICYmIGZvcm0uc3VibWl0dGVkO1xyXG4gICAgcmV0dXJuICEhKHRoaXMuZm9ybUNvbnRyb2w/LmludmFsaWQgJiYgKHRoaXMuZm9ybUNvbnRyb2w/LmRpcnR5IHx8IHRoaXMuZm9ybUNvbnRyb2w/LnRvdWNoZWQgfHwgaXNTdWJtaXR0ZWQpKTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtY2hpcCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NoaXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NoaXAuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RDaGlwIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gICNuYW1lID0gdXVpZC52NCgpO1xyXG4gIEBJbnB1dCgpIHNldCBuYW1lKHZhbDogc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsKSB7XHJcbiAgICAgIHRoaXMuI25hbWUgPSB2YWw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNlcGFyYXRvcktleXNDb2RlczogbnVtYmVyW10gPSBbRU5URVIsIENPTU1BXTtcclxuICBzZWxlY3RhYmxlID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaXplOiAnc20nIHwgJ2xnJztcclxuICAjZm9ybTogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIHNldCBmb3JtKHZhbDogTmdGb3JtIHwgRm9ybUdyb3VwKSB7XHJcbiAgICBpZiAodmFsKSB7XHJcbiAgICAgIGlmICh2YWwgaW5zdGFuY2VvZiBOZ0Zvcm0pIHtcclxuICAgICAgICB0aGlzLiNmb3JtID0gdmFsLmZvcm07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy4jZm9ybSA9IHZhbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHZhbHVlRmllbGQ6IHN0cmluZztcclxuICBASW5wdXQoKSBkaXNwbGF5RmllbGQ6IHN0cmluZztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIHJlbW92YWJsZTogYm9vbGVhbiB8ICgoaXRlbTogYW55KSA9PiBib29sZWFuKSA9IHRydWU7XHJcbiAgQElucHV0KCdyZW1vdmFibGUnKSBzZXQgX3JlbW92YWJsZSh2YWw6ICcnIHwgYm9vbGVhbiB8ICgoaXRlbTogYW55KSA9PiBib29sZWFuKSkge1xyXG4gICAgdGhpcy5yZW1vdmFibGUgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gIH1cclxuICAjaXRlbUNoYW5nZXMgPSBuZXcgU3ViamVjdDxhbnlbXT4oKTtcclxuICAjaXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgc2V0IGl0ZW1zKGl0ZW1zOiB1bmRlZmluZWQgfCBhbnlbXSkge1xyXG4gICAgaWYgKCFpdGVtcykge1xyXG4gICAgICB0aGlzLiNpdGVtcyA9IFtdO1xyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xyXG4gICAgICB0aGlzLiNpdGVtcyA9IGl0ZW1zLmZpbHRlcihlID0+IChlID8/ICcnKS50b1N0cmluZygpLnRyaW0oKSAhPT0gJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy4jaXRlbXMgPSBpdGVtcztcclxuICAgIH1cclxuICAgIHRoaXMuaW5wdXRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuI2l0ZW1DaGFuZ2VzLm5leHQodGhpcy5pdGVtcyk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGxpbWl0ID0gNTA7XHJcbiAgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuICBmaWx0ZXJlZEl0ZW1zOiBPYnNlcnZhYmxlPGFueVtdPjtcclxuXHJcbiAgaXB0OiBhbnk7XHJcblxyXG4gIC8vIG1vZGVsXHJcbiAgQElucHV0KCkgc2V0IG1vZGVsKHZhbHVlczogdW5kZWZpbmVkIHwgKHN0cmluZyB8IG51bWJlcilbXSkge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcclxuICAgICAgdmFsdWVzID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlcywge1xyXG4gICAgICBlbWl0RXZlbnQ6IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8gVmFsaWRhdG9yXHJcbiAgaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCByZXF1aXJlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5pc1JlcXVpcmVkID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgbWluOiBudW1iZXI7XHJcbiAgQElucHV0KCdtaW4nKSBzZXQgcE1pbih2YWw6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgdGhpcy5taW4gPSArdmFsIHx8IDA7XHJcbiAgICB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICB9XHJcbiAgbWF4OiBudW1iZXI7XHJcbiAgQElucHV0KCdtYXgnKSBzZXQgcE1heCh2YWw6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgdGhpcy5tYXggPSArdmFsIHx8IDA7XHJcbiAgICB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICB9XHJcbiAgQE91dHB1dCgpIG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBPcHRpb25hbFxyXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdmFsID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHNkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuICBAT3V0cHV0KCkgc2RVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFNkQ2hpcFVwZGF0ZT4oKTtcclxuICBAT3V0cHV0KCkgY2hpcFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnYXV0bycpIG1hdEF1dG9jb21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlO1xyXG4gIEBWaWV3Q2hpbGQoJ2NoaXBMaXN0JywgeyBzdGF0aWM6IHRydWUgfSkgY2hpcExpc3Q6IE1hdENoaXBMaXN0O1xyXG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciwgeyByZWFkOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0pIGF1dG9jb21wbGV0ZVRyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XHJcbiAgQENvbnRlbnRDaGlsZChTZFZpZXdEZWZEaXJlY3RpdmUpIHNkVmlldzogU2RWaWV3RGVmRGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoU2RDaGlwRGlzcGxheURlZikgc2RDaGlwRGlzcGxheTogU2RDaGlwRGlzcGxheURlZjtcclxuICBpc0ZvY3VzZWQgPSBmYWxzZTtcclxuICBpbnB1dENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICBmb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIG1hdGNoZXIgPSBuZXcgU2RDaGlwRXJyb3RTdGF0ZU1hdGNoZXIodGhpcy5mb3JtQ29udHJvbCk7XHJcbiAgI3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgdXRpbGl0eVNlcnZpY2U6IFNkVXRpbGl0eVNlcnZpY2UpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gdGhpcy5pbnB1dENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXHJcbiAgICAgIHN0YXJ0V2l0aDxzdHJpbmcgfCB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9PignJyksXHJcbiAgICAgIG1hcChpdGVtID0+IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyA/IGl0ZW0gOiAoaXRlbT8uW3RoaXMuZGlzcGxheUZpZWxkXSA/PyAnJykpLFxyXG4gICAgICBtYXAobmFtZSA9PiB0aGlzLmZpbHRlcihuYW1lKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlczogKHN0cmluZyB8IG51bWJlcilbXSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuI2l0ZW1zLmZpbHRlcihpdGVtID0+IHZhbHVlcy5maW5kSW5kZXgodmFsdWUgPT4gdmFsdWUgPT09IGl0ZW0/Llt0aGlzLnZhbHVlRmllbGRdKSAhPT0gLTEpO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodmFsdWVzKTtcclxuICAgICAgdGhpcy5zZENoYW5nZS5lbWl0KHZhbHVlcyk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuI2Zvcm0/Lm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLiNpdGVtQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLiNpdGVtcykpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlczogKHN0cmluZyB8IG51bWJlcilbXSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLiNpdGVtcy5maW5kKGUgPT4gZT8uW3RoaXMudmFsdWVGaWVsZF0gPT09IHZhbHVlKSB8fCB7fTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh7XHJcbiAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgW3RoaXMudmFsdWVGaWVsZF06IHZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuI2Zvcm0/LmFkZENvbnRyb2wodGhpcy4jbmFtZSwgdGhpcy5mb3JtQ29udHJvbCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuI2Zvcm0/LnJlbW92ZUNvbnRyb2wodGhpcy4jbmFtZSk7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gICN1cGRhdGVWYWxpZGF0b3IgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5jbGVhckFzeW5jVmFsaWRhdG9ycygpO1xyXG4gICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgY29uc3QgYXN5bmNWYWxpZGF0b3JzOiBBc3luY1ZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgIGlmICh0aGlzLmlzUmVxdWlyZWQpIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubWluID4gMCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW4pKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1heCA+IDApIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4KSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyhhc3luY1ZhbGlkYXRvcnMpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXIgPSAodmFsdWU6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1bXSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy4jaXRlbXNcclxuICAgICAgLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZT8uc29tZSh2YWwgPT4gdmFsID09PSBpdGVtW3RoaXMudmFsdWVGaWVsZF0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAhdmFsdWUgfHwgdGhpcy51dGlsaXR5U2VydmljZS5jaGFuZ2VBbGlhc0xvd2VyQ2FzZShpdGVtW3RoaXMuZGlzcGxheUZpZWxkXSlcclxuICAgICAgICAgIC5pbmRleE9mKHRoaXMudXRpbGl0eVNlcnZpY2UuY2hhbmdlQWxpYXNMb3dlckNhc2UodmFsdWUpKSAhPT0gLTE7XHJcbiAgICAgIH0pLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGluZGV4IDwgdGhpcy5saW1pdCk7XHJcbiAgfVxyXG5cclxuICBvbkFkZCA9IChldmVudDogTWF0Q2hpcElucHV0RXZlbnQpOiB2b2lkID0+IHtcclxuICAgIC8vIEFkZCBpdGVtIG9ubHkgd2hlbiBNYXRBdXRvY29tcGxldGUgaXMgbm90IG9wZW5cclxuICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGlzIGRvZXMgbm90IGNvbmZsaWN0IHdpdGggT3B0aW9uU2VsZWN0ZWQgRXZlbnRcclxuICAgIGlmICghdGhpcy5tYXRBdXRvY29tcGxldGUuaXNPcGVuKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnZhbHVlID8/ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuXHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuI2l0ZW1zLmZpbmQoZSA9PiBlW3RoaXMuZGlzcGxheUZpZWxkXVxyXG4gICAgICAgICAgJiYgZVt0aGlzLmRpc3BsYXlGaWVsZF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gdmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA/PyBbXTtcclxuICAgICAgICAgIHZhbHVlcy5wdXNoKGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFuZG4xIHZp4bq/dCDEkeG7gyB44butIGzDvSB04bqhbSB1cyBCMkIxRC0xODI4OSDhu58gUzY5XHJcbiAgb25BZGQyID0gKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCk6IHZvaWQgPT4ge1xyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnZhbHVlID8/ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLiNpdGVtcy5maW5kKGUgPT4gZVt0aGlzLnZhbHVlRmllbGRdXHJcbiAgICAgICAgJiYgZVt0aGlzLnZhbHVlRmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS50cmltKCkgPT09IHZhbHVlKTtcclxuXHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA/PyBbXTtcclxuICAgICAgICBpZiAoIXZhbHVlcy5pbmNsdWRlcyhpdGVtW3RoaXMudmFsdWVGaWVsZF0pKSB7XHJcbiAgICAgICAgICB2YWx1ZXMucHVzaChpdGVtW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlID0gKGl0ZW06IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgdmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA/PyBbXTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWVzLmZpbHRlcih2YWx1ZSA9PiBpdGVtPy5bdGhpcy52YWx1ZUZpZWxkXSAhPT0gdmFsdWUpKTtcclxuICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdCA9IChpdGVtOiBhbnkpOiB2b2lkID0+IHtcclxuICAgIHRoaXMuY2hpcFNlbGVjdGVkLmVtaXQoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdCA9IChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkgPT4ge1xyXG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQub3B0aW9uLnZhbHVlPy5bdGhpcy52YWx1ZUZpZWxkXSA/PyAnJykudG9TdHJpbmcoKS50cmltKCk7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuI2l0ZW1zLmZpbmQoZSA9PiBlW3RoaXMudmFsdWVGaWVsZF1cclxuICAgICAgICAmJiBlW3RoaXMudmFsdWVGaWVsZF0udG9TdHJpbmcoKS50cmltKCkgPT09IHZhbHVlKTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10gPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlID8/IFtdO1xyXG4gICAgICAgIHZhbHVlcy5wdXNoKGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZXMpO1xyXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlcj8ub3BlblBhbmVsKCk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc3BsYXlGbiA9ICh2YWx1ZTogc3RyaW5nIHwgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpZiAoIXRoaXMuI2l0ZW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLiNpdGVtcy5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLnZhbHVlRmllbGRdID09PSB2YWx1ZSk7XHJcbiAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtW3RoaXMuZGlzcGxheUZpZWxkXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy4jaXRlbXMuc29tZShpdGVtID0+IGl0ZW1bdGhpcy5kaXNwbGF5RmllbGRdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih2YWx1ZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlW3RoaXMuZGlzcGxheUZpZWxkXSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRm9jdXMgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XHJcbiAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgICAvLyB0aGlzLmlucHV0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUoJycsIHtcclxuICAgICAgZW1pdEV2ZW50OiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuc2RWaWV3Py50ZW1wbGF0ZVJlZikge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQgJiYgIXRoaXMuaXNGb2N1c2VkKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb2N1cyA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXI/Lm9wZW5QYW5lbCgpO1xyXG4gICAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIG9uQ2xlYXIgPSAoJGV2ZW50PzogYW55KSA9PiB7XHJcbiAgICAkZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShbXSk7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXI/Lm9wZW5QYW5lbCgpO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxufVxyXG4iXX0=
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2NoaXAvIiwic291cmNlcyI6WyJzcmMvbGliL2NoaXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBR1osaUJBQWlCLEVBRWpCLFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxFQUFXLFdBQVcsRUFBNEMsVUFBVSxFQUFzQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hJLE9BQU8sRUFBYyxZQUFZLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHNUQsT0FBTyxFQUFpRCxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBR3ZILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RSxNQUFNLHVCQUF1QjtJQUMzQixZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtJQUFJLENBQUM7SUFDakQsWUFBWSxDQUFDLE9BQTJCLEVBQUUsSUFBd0M7O1FBQ2hGLE1B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QWtDO1FBQ2xDLGdGQUFnRjtRQUNoRixnQ0FBZ0M7UUFDaEMsaUJBQWlCO1FBQ2pCLGlDQUFpQztRQUNqQyxVQUFVO1FBQ1YsTUFBTTtRQUNOLE9BQU87UUFDUCxtRkFBWSxVQUFVLHNDQUFhLElBQUksQ0FBQyxXQUFXLEVBQUU7SUFDdkQsQ0FBQztJQUVELFdBQVc7O1FBQ1QsbUZBQVksYUFBYSxzQ0FBYTtRQUN0Qyw0Q0FBbUIsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7OztZQWpQRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFNBQVM7Z0JBQ25CLG84RUFBb0M7O2FBRXJDOzs7WUEvQkMsaUJBQWlCO1lBVVYsZ0JBQWdCOzs7bUJBd0J0QixLQUFLO21CQU9MLEtBQUs7bUJBRUwsS0FBSztvQkFTTCxLQUFLO3lCQUNMLEtBQUs7MkJBQ0wsS0FBSzswQkFDTCxLQUFLO3lCQUVMLEtBQUssU0FBQyxXQUFXO29CQTJCakIsS0FBSztvQkFZTCxLQUFLO29CQU9MLEtBQUs7dUJBUUwsS0FBSzttQkFNTCxLQUFLLFNBQUMsS0FBSzttQkFLWCxLQUFLLFNBQUMsS0FBSzswQkFJWCxNQUFNO3VCQUdOLEtBQUs7dUJBV0wsTUFBTTt1QkFDTixNQUFNOzJCQUNOLE1BQU07b0JBRU4sU0FBUyxTQUFDLE9BQU87OEJBQ2pCLFNBQVMsU0FBQyxNQUFNO3VCQUNoQixTQUFTLFNBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtrQ0FDdEMsU0FBUyxTQUFDLHNCQUFzQixFQUFFLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFO3FCQUNsRSxZQUFZLFNBQUMsa0JBQWtCOzRCQUMvQixZQUFZLFNBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25Jbml0LCBPbkRlc3Ryb3ksXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIENvbnRlbnRDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDT01NQSwgRU5URVIgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgeyBOZ0Zvcm0sIE5nTW9kZWwsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0b3JzLCBGb3JtR3JvdXBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgU3ViamVjdCwgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFNkVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3V0aWxpdHknO1xyXG5pbXBvcnQgeyBTZFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL3RyYW5zbGF0ZSc7XHJcbmltcG9ydCB7IE1hdENoaXBJbnB1dEV2ZW50LCBNYXRDaGlwTGlzdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlLCBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50LCBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHsgU2RDaGlwVXBkYXRlIH0gZnJvbSAnLi9jaGlwLm1vZGVsJztcclxuaW1wb3J0IHsgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgU2RDaGlwRGlzcGxheURlZiB9IGZyb20gJy4vZGlyZWN0aXZlcy9zZC1jaGlwLWRpc3BsYXktZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkRm9ybUNvbnRyb2wsIFNkVmlld0RlZkRpcmVjdGl2ZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuXHJcbmNsYXNzIFNkQ2hpcEVycm90U3RhdGVNYXRjaGVyIGltcGxlbWVudHMgRXJyb3JTdGF0ZU1hdGNoZXIge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sKSB7IH1cclxuICBpc0Vycm9yU3RhdGUoY29udHJvbDogRm9ybUNvbnRyb2wgfCBudWxsLCBmb3JtOiBGb3JtR3JvdXBEaXJlY3RpdmUgfCBOZ0Zvcm0gfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpc1N1Ym1pdHRlZCA9IGZvcm0gJiYgZm9ybS5zdWJtaXR0ZWQ7XHJcbiAgICByZXR1cm4gISEodGhpcy5mb3JtQ29udHJvbD8uaW52YWxpZCAmJiAodGhpcy5mb3JtQ29udHJvbD8uZGlydHkgfHwgdGhpcy5mb3JtQ29udHJvbD8udG91Y2hlZCB8fCBpc1N1Ym1pdHRlZCkpO1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC1jaGlwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hpcC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2hpcC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZENoaXAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgI25hbWUgPSB1dWlkLnY0KCk7XHJcbiAgQElucHV0KCkgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy4jbmFtZSA9IHZhbDtcclxuICAgIH1cclxuICB9XHJcbiAgc2VwYXJhdG9yS2V5c0NvZGVzOiBudW1iZXJbXSA9IFtFTlRFUiwgQ09NTUFdO1xyXG4gIHNlbGVjdGFibGUgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNpemU6ICdzbScgfCAnbGcnO1xyXG4gICNmb3JtOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgc2V0IGZvcm0odmFsOiBOZ0Zvcm0gfCBGb3JtR3JvdXApIHtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIE5nRm9ybSkge1xyXG4gICAgICAgIHRoaXMuI2Zvcm0gPSB2YWwuZm9ybTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLiNmb3JtID0gdmFsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgdmFsdWVGaWVsZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlGaWVsZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgcmVtb3ZhYmxlOiBib29sZWFuIHwgKChpdGVtOiBhbnkpID0+IGJvb2xlYW4pID0gdHJ1ZTtcclxuICBASW5wdXQoJ3JlbW92YWJsZScpIHNldCBfcmVtb3ZhYmxlKHZhbDogJycgfCBib29sZWFuIHwgKChpdGVtOiBhbnkpID0+IGJvb2xlYW4pKSB7XHJcbiAgICB0aGlzLnJlbW92YWJsZSA9ICh2YWwgPT09ICcnKSB8fCB2YWw7XHJcbiAgfVxyXG4gICNpdGVtQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PGFueVtdPigpO1xyXG4gICNpdGVtczogYW55W10gPSBbXTtcclxuICAvLyBASW5wdXQoKSBzZXQgaXRlbXMoaXRlbXM6IHVuZGVmaW5lZCB8IGFueVtdKSB7XHJcbiAgLy8gICBpZiAoIWl0ZW1zKSB7XHJcbiAgLy8gICAgIHRoaXMuI2l0ZW1zID0gW107XHJcbiAgLy8gICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XHJcbiAgLy8gICAgIHRoaXMuI2l0ZW1zID0gaXRlbXMuZmlsdGVyKGUgPT4gKGUgPz8gJycpLnRvU3RyaW5nKCkudHJpbSgpICE9PSAnJyk7XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICB0aGlzLiNpdGVtcyA9IGl0ZW1zO1xyXG4gIC8vICAgfVxyXG4gIC8vICAgdGhpcy5pbnB1dENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIC8vICAgdGhpcy4jaXRlbUNoYW5nZXMubmV4dCh0aGlzLml0ZW1zKTtcclxuICAvLyB9XHJcbiAgLy8gU2VydmVyIHNlYXJjaFxyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICAjYWxsSXRlbXM6IE9ic2VydmFibGU8YW55W10+O1xyXG4gICNhbGxJdGVtOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnlcclxuICB9ID0ge307XHJcbiAgI2NhY2hlOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnlbXVxyXG4gIH0gPSB7fTtcclxuICAjZGVsYXkgPSAyMDA7IC8vIFNhdSBraG/huqNuZyB0aOG7nWkgZ2lhbiBkZWxheSBu4bq/dSBraMO0bmcgY8OzIHRoYXkgxJHhu5VpIHRow6wgdGjDrCBt4bubaSBi4bqvdCDEkeG6p3UgdGjhu7FjIGhp4buHbiBn4buNaSBow6BtXHJcbiAgI2l0ZW1zQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10gfCBTZWFyY2hGdW5jPihbXSk7XHJcbiAgQElucHV0KCkgc2V0IGl0ZW1zKGl0ZW1zOiB1bmRlZmluZWQgfCBhbnlbXSB8IFNlYXJjaEZ1bmMpIHtcclxuICAgIHRoaXMuI2RlbGF5ID0gMDtcclxuICAgIGlmICghaXRlbXMpIHtcclxuICAgICAgdGhpcy4jaXRlbXNDaGFuZ2VzLm5leHQoW10pO1xyXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xyXG4gICAgICB0aGlzLiNpdGVtc0NoYW5nZXMubmV4dChpdGVtcy5maWx0ZXIoZSA9PiBlICE9PSBudWxsICYmIGUgIT09IHVuZGVmaW5lZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy4jZGVsYXkgPSA1MDA7XHJcbiAgICAgIHRoaXMuI2l0ZW1zQ2hhbmdlcy5uZXh0KGl0ZW1zKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuICBASW5wdXQoKSBsaW1pdCA9IDUwO1xyXG4gIHNlbGVjdGVkSXRlbXM6IE9ic2VydmFibGU8YW55W10+O1xyXG4gIGZpbHRlcmVkSXRlbXM6IE9ic2VydmFibGU8YW55W10+O1xyXG5cclxuICBpcHQ6IGFueTtcclxuXHJcbiAgLy8gbW9kZWxcclxuICBASW5wdXQoKSBzZXQgbW9kZWwodmFsdWVzOiB1bmRlZmluZWQgfCAoc3RyaW5nIHwgbnVtYmVyKVtdKSB7XHJcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xyXG4gICAgICB2YWx1ZXMgPSBbXTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWVzKTtcclxuICB9XHJcbiAgLy8gVmFsaWRhdG9yXHJcbiAgaXNSZXF1aXJlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNldCByZXF1aXJlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5pc1JlcXVpcmVkID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuXHJcbiAgbWluOiBudW1iZXI7XHJcbiAgQElucHV0KCdtaW4nKSBzZXQgcE1pbih2YWw6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgdGhpcy5taW4gPSArdmFsIHx8IDA7XHJcbiAgICB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICB9XHJcbiAgbWF4OiBudW1iZXI7XHJcbiAgQElucHV0KCdtYXgnKSBzZXQgcE1heCh2YWw6IG51bWJlciB8IHN0cmluZykge1xyXG4gICAgdGhpcy5tYXggPSArdmFsIHx8IDA7XHJcbiAgICB0aGlzLiN1cGRhdGVWYWxpZGF0b3IoKTtcclxuICB9XHJcbiAgQE91dHB1dCgpIG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAvLyBPcHRpb25hbFxyXG4gIEBJbnB1dCgpIHNldCBkaXNhYmxlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdmFsID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIHNkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuICBAT3V0cHV0KCkgc2RVcGRhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPFNkQ2hpcFVwZGF0ZT4oKTtcclxuICBAT3V0cHV0KCkgY2hpcFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnYXV0bycpIG1hdEF1dG9jb21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlO1xyXG4gIEBWaWV3Q2hpbGQoJ2NoaXBMaXN0JywgeyBzdGF0aWM6IHRydWUgfSkgY2hpcExpc3Q6IE1hdENoaXBMaXN0O1xyXG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciwgeyByZWFkOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0pIGF1dG9jb21wbGV0ZVRyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XHJcbiAgQENvbnRlbnRDaGlsZChTZFZpZXdEZWZEaXJlY3RpdmUpIHNkVmlldzogU2RWaWV3RGVmRGlyZWN0aXZlO1xyXG4gIEBDb250ZW50Q2hpbGQoU2RDaGlwRGlzcGxheURlZikgc2RDaGlwRGlzcGxheTogU2RDaGlwRGlzcGxheURlZjtcclxuICBpc0ZvY3VzZWQgPSBmYWxzZTtcclxuICBpbnB1dENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICBmb3JtQ29udHJvbCA9IG5ldyBTZEZvcm1Db250cm9sKCk7XHJcbiAgbWF0Y2hlciA9IG5ldyBTZENoaXBFcnJvdFN0YXRlTWF0Y2hlcih0aGlzLmZvcm1Db250cm9sKTtcclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSB1dGlsaXR5U2VydmljZTogU2RVdGlsaXR5U2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSB0aGlzLmlucHV0Q29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgc3RhcnRXaXRoPHN0cmluZyB8IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0+KCcnKSxcclxuICAgICAgbWFwKGl0ZW0gPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnID8gaXRlbSA6IChpdGVtPy5bdGhpcy5kaXNwbGF5RmllbGRdID8/ICcnKSksXHJcbiAgICAgIG1hcChuYW1lID0+IHRoaXMuZmlsdGVyKG5hbWUpKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy5mb3JtQ29udHJvbC5zZENoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5yZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICB9KSk7XHJcbiAgICB0aGlzLiNhbGxJdGVtcyA9IGNvbWJpbmVMYXRlc3QoW1xyXG4gICAgICB0aGlzLiNpdGVtc0NoYW5nZXMuYXNPYnNlcnZhYmxlKCksXHJcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCgnJyksIGRlYm91bmNlVGltZSh0aGlzLiNkZWxheSkpLFxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmZvcm1Db250cm9sLnZhbHVlKSldKS5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcChhc3luYyAoW2l0ZW1zLCB2YWwsIGZvcm1WYWx1ZV0pID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgKGl0ZW1zKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy4jbG9hZEl0ZW1zKHZhbCwgaXRlbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy4jYWxsSXRlbSA9IGl0ZW1zLnRvT2JqZWN0KHRoaXMudmFsdWVGaWVsZCk7XHJcbiAgICAgICAgICBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgaGFzRmllbGRzID0gISF0aGlzLnZhbHVlRmllbGQgJiYgISF0aGlzLmRpc3BsYXlGaWVsZDtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaGFzRmllbGRzID8gaXRlbVt0aGlzLnZhbHVlRmllbGRdIDogaXRlbTtcclxuICAgICAgICAgICAgY29uc3QgZGlzcGxheSA9IGhhc0ZpZWxkcyA/IGl0ZW1bdGhpcy5kaXNwbGF5RmllbGRdIDogaXRlbTtcclxuICAgICAgICAgICAgaWYgKFN0cmluZy5hbGlhc0luY2x1ZGVzKHZhbHVlLCB2YWwpIHx8IFN0cmluZy5hbGlhc0luY2x1ZGVzKGRpc3BsYXksIHZhbCkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmb3JtVmFsdWUuc29tZShlID0+IGUgPT09IHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybVZhbHVlID09PSB2YWx1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8PSB0aGlzLmxpbWl0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZEl0ZW1zO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gxJDGsGEgbmjhu69uZyBzZWxlY3RlZEl0ZW1zIGzDqm4gxJHhuqd1IG7hur91IGtow7RuZyBtYXQtc2VsZWN0LXRyaWdnZXIgc+G6vSBraMO0bmcgd29ya1xyXG4gICAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMuc29ydCgoY3VycmVudCwgbmV4dCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZTEgPSBoYXNGaWVsZHMgPyBjdXJyZW50W3RoaXMudmFsdWVGaWVsZF0gOiBjdXJyZW50O1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBoYXNGaWVsZHMgPyBuZXh0W3RoaXMudmFsdWVGaWVsZF0gOiBuZXh0O1xyXG4gICAgICAgICAgICBsZXQgZmxhZzEgPSAwO1xyXG4gICAgICAgICAgICBsZXQgZmxhZzIgPSAwO1xyXG4gICAgICAgICAgICBpZiAoaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgIGZsYWcxID0gZm9ybVZhbHVlLnNvbWUoZSA9PiBlID09PSB2YWx1ZTEpID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgZmxhZzIgPSBmb3JtVmFsdWUuc29tZShlID0+IGUgPT09IHZhbHVlMikgPyAxIDogMDtcclxuICAgICAgICAgICAgICByZXR1cm4gZmxhZzIgLSBmbGFnMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmbGFnMSA9IGZvcm1WYWx1ZSA9PT0gdmFsdWUxID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGZsYWcyID0gZm9ybVZhbHVlID09PSB2YWx1ZTIgPyAxIDogMDtcclxuICAgICAgICAgICAgcmV0dXJuIGZsYWcyIC0gZmxhZzE7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy4jaXRlbXNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmZvcm1Db250cm9sLnZhbHVlKSldKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoYXN5bmMgKFtpdGVtcywgdmFsXSkgPT4ge1xyXG4gICAgICAgICAgLy8gVsOsIG3hu5l0IHPhu5EgbMO9IGRvIGNoxrBhIHjDoWMgxJHhu4tuaCBtw6Aga2hpIHPhu60gZOG7pW5nIHNkVmlld0RlZiB0aMOsIGtoaSBjaHV54buDbiBzYW5nIGThuqFuZyB2aWV3IHPhur0gdHJpZ2dlciB2YWwgPSBudWxsXHJcbiAgICAgICAgICAvLyBOaMawbmcgZm9ybUNvbnRyb2wudmFsdWUgduG6q24gY8OzIGdpw6EgdHLhu4sgxJHDum5nIG7Dqm4gdGjhu7FjIGhp4buHbiBnw6FuIHZhbCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICB2YWwgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKCF2YWw/LnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogW3ZhbF07XHJcbiAgICAgICAgICBpZiAoIXRoaXMudmFsdWVGaWVsZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHR5cGVvZiAoaXRlbXMpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLiNsb2FkU2VsZWN0ZWRJdGVtcyh2YWwsIGl0ZW1zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zPy5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLnZhbHVlRmllbGRdID09PSB2YWx1ZSkgfHwge1xyXG4gICAgICAgICAgICAgIFt0aGlzLnZhbHVlRmllbGRdOiB2YWx1ZSxcclxuICAgICAgICAgICAgICBbdGhpcy5kaXNwbGF5RmllbGRdOiB2YWx1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuI2FsbEl0ZW1zLnBpcGUobWFwKGFsbEl0ZW1zID0+IGFsbEl0ZW1zLnBhZ2luZyh0aGlzLmxpbWl0KSkpO1xyXG4gICAgLy8gdGhpcy5kaXNwbGF5ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLnBpcGUoXHJcbiAgICAvLyAgIG1hcChzZWxlY3RlZEl0ZW1zID0+IHNlbGVjdGVkSXRlbXM/Lm1hcChpdGVtID0+IHRoaXMuZGlzcGxheUZpZWxkID8gaXRlbVt0aGlzLmRpc3BsYXlGaWVsZF0gOiBpdGVtKT8uam9pbignLCAnKSkpO1xyXG4gICAgLy8gdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgLy8gICBjb25zdCB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10gPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlIHx8IFtdO1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLiNpdGVtcy5maWx0ZXIoaXRlbSA9PiB2YWx1ZXMuZmluZEluZGV4KHZhbHVlID0+IHZhbHVlID09PSBpdGVtPy5bdGhpcy52YWx1ZUZpZWxkXSkgIT09IC0xKTtcclxuICAgIC8vICAgdGhpcy5tb2RlbENoYW5nZS5lbWl0KHZhbHVlcyk7XHJcbiAgICAvLyAgIHRoaXMuc2RDaGFuZ2UuZW1pdCh2YWx1ZXMpO1xyXG4gICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICB0aGlzLiNmb3JtPy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgLy8gICB9LCAwKTtcclxuICAgIC8vIH0pKTtcclxuICAgIC8vIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQodGhpcy4jaXRlbUNoYW5nZXMucGlwZShzdGFydFdpdGgodGhpcy4jaXRlbXMpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgLy8gICBjb25zdCB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10gPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlIHx8IFtdO1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgIC8vICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcclxuICAgIC8vICAgICBjb25zdCBpdGVtID0gdGhpcy4jaXRlbXMuZmluZChlID0+IGU/Llt0aGlzLnZhbHVlRmllbGRdID09PSB2YWx1ZSkgfHwge307XHJcbiAgICAvLyAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goe1xyXG4gICAgLy8gICAgICAgLi4uaXRlbSxcclxuICAgIC8vICAgICAgIFt0aGlzLnZhbHVlRmllbGRdOiB2YWx1ZVxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KSk7XHJcbiAgICB0aGlzLiNmb3JtPy5hZGRDb250cm9sKHRoaXMuI25hbWUsIHRoaXMuZm9ybUNvbnRyb2wpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNmb3JtPy5yZW1vdmVDb250cm9sKHRoaXMuI25hbWUpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAjdXBkYXRlVmFsaWRhdG9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcclxuICAgIGNvbnN0IHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuICAgIGNvbnN0IGFzeW5jVmFsaWRhdG9yczogQXN5bmNWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICBpZiAodGhpcy5pc1JlcXVpcmVkKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1pbiA+IDApIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHRoaXMubWluKSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tYXggPiAwKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLm1heCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JzKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgI2xvYWRJdGVtcyA9IGFzeW5jIChzZWFyY2hUZXh0OiBzdHJpbmcsIGl0ZW1zOiBTZWFyY2hGdW5jKSA9PiB7XHJcbiAgICBzZWFyY2hUZXh0ID0gc2VhcmNoVGV4dD8udG9TdHJpbmcoKSB8fCAnJztcclxuICAgIGlmICh0aGlzLiNjYWNoZVtzZWFyY2hUZXh0XSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBpdGVtcyhzZWFyY2hUZXh0KS5jYXRjaCgoKSA9PiBbXSkuZmluYWxseSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XHJcbiAgICAgIGNvbnN0IG9iakl0ZW0gPSBBcnJheS50b09iamVjdChyZXN1bHRzLCB0aGlzLnZhbHVlRmllbGQpO1xyXG4gICAgICB0aGlzLiNhbGxJdGVtID0ge1xyXG4gICAgICAgIC4uLnRoaXMuI2FsbEl0ZW0sXHJcbiAgICAgICAgLi4ub2JqSXRlbVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLiNjYWNoZVtzZWFyY2hUZXh0XSA9IHJlc3VsdHMudW5pb24odGhpcy52YWx1ZUZpZWxkKTtcclxuICAgIH1cclxuICAgIC8vIGlmICghdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgLy8gICByZXR1cm4gdGhpcy4jY2FjaGVbc2VhcmNoVGV4dF07XHJcbiAgICAvLyB9XHJcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gYXdhaXQgdGhpcy4jbG9hZFNlbGVjdGVkSXRlbXModGhpcy5mb3JtQ29udHJvbC52YWx1ZSwgaXRlbXMpO1xyXG4gICAgLy8gxJDGsGEgbmjhu69uZyBzZWxlY3RlZEl0ZW1zIGzDqm4gxJHhuqd1IG7hur91IGtow7RuZyBtYXQtc2VsZWN0LXRyaWdnZXIgc+G6vSBraMO0bmcgd29ya1xyXG4gICAgcmV0dXJuIFsuLi5zZWxlY3RlZEl0ZW1zLCAuLi50aGlzLiNjYWNoZVtzZWFyY2hUZXh0XV0udW5pb24odGhpcy52YWx1ZUZpZWxkKTtcclxuICB9XHJcblxyXG4gICNsb2FkU2VsZWN0ZWRJdGVtcyA9IGFzeW5jICh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIGl0ZW1zOiBTZWFyY2hGdW5jKSA9PiB7XHJcbiAgICBpZiAoIXZhbHVlPy50b1N0cmluZygpKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xyXG4gICAgaWYgKCF0aGlzLnZhbHVlRmllbGQgJiYgIXRoaXMuZGlzcGxheUZpZWxkKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHZhbHVlcy5zb21lKHZhbCA9PiB0aGlzLiNhbGxJdGVtW3ZhbF0gPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGl0ZW1zKHZhbHVlLCB0cnVlKS5jYXRjaCgoKSA9PiBbXSkuZmluYWxseSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XHJcbiAgICAgIGNvbnN0IG9iakl0ZW0gPSBBcnJheS50b09iamVjdChyZXN1bHRzLCB0aGlzLnZhbHVlRmllbGQpO1xyXG4gICAgICBjb25zdCBvYmpWYWx1ZSA9IEFycmF5LnRvT2JqZWN0KFxyXG4gICAgICAgIHZhbHVlcy5tYXAodmFsID0+ICh7IFt2YWw/LnRvU3RyaW5nKCldOiB7IFt0aGlzLnZhbHVlRmllbGRdOiB2YWwsIFt0aGlzLmRpc3BsYXlGaWVsZF06IHZhbCB9IH0pKSwgdGhpcy52YWx1ZUZpZWxkKTtcclxuICAgICAgdGhpcy4jYWxsSXRlbSA9IHtcclxuICAgICAgICAuLi5vYmpWYWx1ZSxcclxuICAgICAgICAuLi50aGlzLiNhbGxJdGVtLFxyXG4gICAgICAgIC4uLm9iakl0ZW1cclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZXMubWFwKHZhbCA9PiB0aGlzLiNhbGxJdGVtW3ZhbD8udG9TdHJpbmcoKV0gPz8geyBbdGhpcy52YWx1ZUZpZWxkXTogdmFsLCBbdGhpcy5kaXNwbGF5RmllbGRdOiB2YWwgfSk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXIgPSAodmFsdWU6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1bXSA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy4jaXRlbXNcclxuICAgICAgLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZT8uc29tZSh2YWwgPT4gdmFsID09PSBpdGVtW3RoaXMudmFsdWVGaWVsZF0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAhdmFsdWUgfHwgdGhpcy51dGlsaXR5U2VydmljZS5jaGFuZ2VBbGlhc0xvd2VyQ2FzZShpdGVtW3RoaXMuZGlzcGxheUZpZWxkXSlcclxuICAgICAgICAgIC5pbmRleE9mKHRoaXMudXRpbGl0eVNlcnZpY2UuY2hhbmdlQWxpYXNMb3dlckNhc2UodmFsdWUpKSAhPT0gLTE7XHJcbiAgICAgIH0pLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IGluZGV4IDwgdGhpcy5saW1pdCk7XHJcbiAgfVxyXG5cclxuICBvbkFkZCA9IChldmVudDogTWF0Q2hpcElucHV0RXZlbnQpOiB2b2lkID0+IHtcclxuICAgIC8vIEFkZCBpdGVtIG9ubHkgd2hlbiBNYXRBdXRvY29tcGxldGUgaXMgbm90IG9wZW5cclxuICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGlzIGRvZXMgbm90IGNvbmZsaWN0IHdpdGggT3B0aW9uU2VsZWN0ZWQgRXZlbnRcclxuICAgIGlmICghdGhpcy5tYXRBdXRvY29tcGxldGUuaXNPcGVuKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnZhbHVlID8/ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuXHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuI2l0ZW1zLmZpbmQoZSA9PiBlW3RoaXMuZGlzcGxheUZpZWxkXVxyXG4gICAgICAgICAgJiYgZVt0aGlzLmRpc3BsYXlGaWVsZF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLnRyaW0oKSA9PT0gdmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA/PyBbXTtcclxuICAgICAgICAgIHZhbHVlcy5wdXNoKGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFuZG4xIHZp4bq/dCDEkeG7gyB44butIGzDvSB04bqhbSB1cyBCMkIxRC0xODI4OSDhu58gUzY5XHJcbiAgb25BZGQyID0gKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCk6IHZvaWQgPT4ge1xyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnZhbHVlID8/ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLiNpdGVtcy5maW5kKGUgPT4gZVt0aGlzLnZhbHVlRmllbGRdXHJcbiAgICAgICAgJiYgZVt0aGlzLnZhbHVlRmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS50cmltKCkgPT09IHZhbHVlKTtcclxuXHJcbiAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA/PyBbXTtcclxuICAgICAgICBpZiAoIXZhbHVlcy5pbmNsdWRlcyhpdGVtW3RoaXMudmFsdWVGaWVsZF0pKSB7XHJcbiAgICAgICAgICB2YWx1ZXMucHVzaChpdGVtW3RoaXMudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG9uUmVtb3ZlID0gKGl0ZW06IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgY29uc3QgdmFsdWVzOiAoc3RyaW5nIHwgbnVtYmVyKVtdID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSA/PyBbXTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWVzLmZpbHRlcih2YWx1ZSA9PiBpdGVtPy5bdGhpcy52YWx1ZUZpZWxkXSAhPT0gdmFsdWUpKTtcclxuICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdCA9IChpdGVtOiBhbnkpOiB2b2lkID0+IHtcclxuICAgIHRoaXMuY2hpcFNlbGVjdGVkLmVtaXQoaXRlbSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdCA9IChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkgPT4ge1xyXG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQub3B0aW9uLnZhbHVlPy5bdGhpcy52YWx1ZUZpZWxkXSA/PyAnJykudG9TdHJpbmcoKS50cmltKCk7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuI2l0ZW1zLmZpbmQoZSA9PiBlW3RoaXMudmFsdWVGaWVsZF1cclxuICAgICAgICAmJiBlW3RoaXMudmFsdWVGaWVsZF0udG9TdHJpbmcoKS50cmltKCkgPT09IHZhbHVlKTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXM6IChzdHJpbmcgfCBudW1iZXIpW10gPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlID8/IFtdO1xyXG4gICAgICAgIHZhbHVlcy5wdXNoKGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZXMpO1xyXG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC52YWx1ZSA9ICcnO1xyXG4gICAgICAgIHRoaXMuaW5wdXRDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVHJpZ2dlcj8ub3BlblBhbmVsKCk7XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc3BsYXlGbiA9ICh2YWx1ZTogc3RyaW5nIHwgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICBpZiAoIXRoaXMuI2l0ZW1zKSB7XHJcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLiNpdGVtcy5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLnZhbHVlRmllbGRdID09PSB2YWx1ZSk7XHJcbiAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtW3RoaXMuZGlzcGxheUZpZWxkXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy4jaXRlbXMuc29tZShpdGVtID0+IGl0ZW1bdGhpcy5kaXNwbGF5RmllbGRdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih2YWx1ZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZSA/IHZhbHVlW3RoaXMuZGlzcGxheUZpZWxkXSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRm9jdXMgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XHJcbiAgICB0aGlzLmlucHV0Q29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgICAvLyB0aGlzLmlucHV0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBvbkJsdXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUoJycsIHtcclxuICAgICAgZW1pdEV2ZW50OiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMuc2RWaWV3Py50ZW1wbGF0ZVJlZikge1xyXG4gICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQgJiYgIXRoaXMuaXNGb2N1c2VkKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb2N1cyA9ICgpID0+IHtcclxuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXI/Lm9wZW5QYW5lbCgpO1xyXG4gICAgICB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIG9uQ2xlYXIgPSAoJGV2ZW50PzogYW55KSA9PiB7XHJcbiAgICAkZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgdGhpcy5pbnB1dENvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZShbXSk7XHJcbiAgICB0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXI/Lm9wZW5QYW5lbCgpO1xyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxufVxyXG5cclxudHlwZSBTZWFyY2hGdW5jID0gKHNlYXJjaFRleHQ/OiBzdHJpbmcgfCBzdHJpbmdbXSwgaXNGb3JtVmFsdWU/OiBib29sZWFuKSA9PiBQcm9taXNlPGFueVtdPjsiXX0=
@@ -5,7 +5,7 @@ export class SdDesktopCellView {
5
5
  SdDesktopCellView.decorators = [
6
6
  { type: Component, args: [{
7
7
  selector: 'sd-desktop-cell-view',
8
- template: "<ng-container *ngIf=\"item[column.field] | cellView:item:column:gridOption:key | async as view\">\r\n <ng-container *ngIf=\"view.display.hasHtml;else useValue\">\r\n <div *ngIf=\"view.click\" (click)=\"view.click()\" class=\"text-break cursor-pointer\" [matTooltip]=\"view.tooltip\"\r\n [class.text-center]=\"view.display.align === 'center'\" [class.text-right]=\"view.display.align === 'right'\"\r\n [innerHTML]=\"view.display.html | safeHtml\">\r\n </div>\r\n <div *ngIf=\"!view.click\" class=\"text-break\" [matTooltip]=\"view.tooltip\"\r\n [class.text-center]=\"view.display.align === 'center'\" [class.text-right]=\"view.display.align === 'right'\"\r\n [innerHTML]=\"view.display.html | safeHtml\">\r\n </div>\r\n </ng-container>\r\n <ng-template #useValue>\r\n <ng-container *ngIf=\"!!view.badge; else noBadge\">\r\n <sd-badge [type]=\"view.badge.type\" [title]=\"view.display.value\" [color]=\"view.badge.color\"\r\n [icon]=\"view.badge.icon\" [tooltip]=\"view.tooltip\" (sdClick)=\"column.click(item[column.field], item)\"></sd-badge>\r\n </ng-container>\r\n <ng-template #noBadge>\r\n <ng-container *ngIf=\"column.type !== 'children'; else childrenView\">\r\n <div *ngIf=\"column.type !== 'image'\" class=\"text-break\" [class.text-center]=\"view.display.align === 'center'\"\r\n [class.text-right]=\"view.display.align === 'right'\" [matTooltip]=\"view.tooltip\">\r\n <a *ngIf=\"!!view.click\" href=\"javascript:;\" (click)=\"view.click()\">{{view.display.value}}</a>\r\n <ng-container *ngIf=\"!view.click\">{{view.display.value}}\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"column.type === 'image'\" class=\"align-middle text-center\">\r\n <img *ngIf=\"view.display.value\" [src]=\"view.display.value\" [width]=\"column.option?.width\"\r\n [height]=\"column.option?.height\" class=\"c-image\" (click)=\"!!view.click && view.click()\"\r\n [class.cursor-pointer]=\"!!view.click\">\r\n <mat-icon *ngIf=\"!view.display.value\" class=\"c-img\" [class.cursor-pointer]=\"!!view.click\"\r\n (click)=\"!!view.click && view.click()\">\r\n image</mat-icon>\r\n </div>\r\n </ng-container>\r\n <ng-template #childrenView>\r\n <sd-desktop-cell-children-view [key]=\"key\" [item]=\"item\" [column]=\"column\">\r\n </sd-desktop-cell-children-view>\r\n </ng-template>\r\n </ng-template>\r\n </ng-template>\r\n</ng-container>",
8
+ template: "<ng-container *ngIf=\"item[column.field] | cellView:item:column:gridOption:key | async as view\">\r\n <ng-container *ngIf=\"view.display.hasHtml;else useValue\">\r\n <div *ngIf=\"view.click\" (click)=\"view.click()\" class=\"text-break cursor-pointer\" [matTooltip]=\"view.tooltip\"\r\n [class.text-center]=\"view.display.align === 'center'\" [class.text-right]=\"view.display.align === 'right'\"\r\n [innerHTML]=\"view.display.html | safeHtml\">\r\n </div>\r\n <div *ngIf=\"!view.click\" class=\"text-break\" [matTooltip]=\"view.tooltip\"\r\n [class.text-center]=\"view.display.align === 'center'\" [class.text-right]=\"view.display.align === 'right'\"\r\n [innerHTML]=\"view.display.html | safeHtml\">\r\n </div>\r\n </ng-container>\r\n <ng-template #useValue>\r\n <ng-container *ngIf=\"!!view.badge; else noBadge\">\r\n <sd-badge [type]=\"view.badge.type\" [title]=\"view.display.value\" [color]=\"view.badge.color\"\r\n [icon]=\"view.badge.icon\" [tooltip]=\"view.tooltip\" (sdClick)=\"!!view.click && view.click()\"></sd-badge>\r\n </ng-container>\r\n <ng-template #noBadge>\r\n <ng-container *ngIf=\"column.type !== 'children'; else childrenView\">\r\n <div *ngIf=\"column.type !== 'image'\" class=\"text-break\" [class.text-center]=\"view.display.align === 'center'\"\r\n [class.text-right]=\"view.display.align === 'right'\" [matTooltip]=\"view.tooltip\">\r\n <a *ngIf=\"!!view.click\" href=\"javascript:;\" (click)=\"view.click()\">{{view.display.value}}</a>\r\n <ng-container *ngIf=\"!view.click\">{{view.display.value}}\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"column.type === 'image'\" class=\"align-middle text-center\">\r\n <img *ngIf=\"view.display.value\" [src]=\"view.display.value\" [width]=\"column.option?.width\"\r\n [height]=\"column.option?.height\" class=\"c-image\" (click)=\"!!view.click && view.click()\"\r\n [class.cursor-pointer]=\"!!view.click\">\r\n <mat-icon *ngIf=\"!view.display.value\" class=\"c-img\" [class.cursor-pointer]=\"!!view.click\"\r\n (click)=\"!!view.click && view.click()\">\r\n image</mat-icon>\r\n </div>\r\n </ng-container>\r\n <ng-template #childrenView>\r\n <sd-desktop-cell-children-view [key]=\"key\" [item]=\"item\" [column]=\"column\">\r\n </sd-desktop-cell-children-view>\r\n </ng-template>\r\n </ng-template>\r\n </ng-template>\r\n</ng-container>",
9
9
  changeDetection: ChangeDetectionStrategy.OnPush,
10
10
  styles: [".text-black400{color:#757575}.c-color-success{color:#4caf50}.c-color-danger{color:#f82c13}.c-image{-o-object-fit:contain;margin:5px 0;object-fit:contain}.c-img{font-size:30px;opacity:.5}.c-img.pointer:hover{opacity:.9}"]
11
11
  },] }
@@ -18,4 +18,4 @@ SdDesktopCellView.propDecorators = {
18
18
  item: [{ type: Input }],
19
19
  gridOption: [{ type: Input }]
20
20
  };
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVza3RvcC1jZWxsLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLW1hdGVyaWFsLyIsInNvdXJjZXMiOlsic3JjL2xpYi9jb21wb25lbnRzL2Rlc2t0b3AtY2VsbC12aWV3L2Rlc2t0b3AtY2VsbC12aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQVVyRixNQUFNLE9BQU8saUJBQWlCO0lBTTVCLGdCQUNJLENBQUM7OztZQWJOLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQywwL0VBQWlEO2dCQUVqRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7Ozs7bUJBRUUsS0FBSztrQkFDTCxLQUFLO3FCQUNMLEtBQUs7bUJBQ0wsS0FBSzt5QkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZEdyaWRNYXRlcmlhbENvbHVtbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNkR3JpZE1hdGVyaWFsT3B0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtb3B0aW9uLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtZGVza3RvcC1jZWxsLXZpZXcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXNrdG9wLWNlbGwtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGVza3RvcC1jZWxsLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2REZXNrdG9wQ2VsbFZpZXcge1xyXG4gIEBJbnB1dCgpIHNkSWQ6IHN0cmluZztcclxuICBASW5wdXQoKSBrZXk6IHN0cmluZztcclxuICBASW5wdXQoKSBjb2x1bW46IFNkR3JpZE1hdGVyaWFsQ29sdW1uO1xyXG4gIEBJbnB1dCgpIGl0ZW06IGFueTtcclxuICBASW5wdXQoKSBncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbjtcclxuICBjb25zdHJ1Y3RvcihcclxuICApIHsgfVxyXG59XHJcbiJdfQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVza3RvcC1jZWxsLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9ncmlkLW1hdGVyaWFsLyIsInNvdXJjZXMiOlsic3JjL2xpYi9jb21wb25lbnRzL2Rlc2t0b3AtY2VsbC12aWV3L2Rlc2t0b3AtY2VsbC12aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQVVyRixNQUFNLE9BQU8saUJBQWlCO0lBTTVCLGdCQUNJLENBQUM7OztZQWJOLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxnL0VBQWlEO2dCQUVqRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7Ozs7bUJBRUUsS0FBSztrQkFDTCxLQUFLO3FCQUNMLEtBQUs7bUJBQ0wsS0FBSzt5QkFDTCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZEdyaWRNYXRlcmlhbENvbHVtbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWNvbHVtbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNkR3JpZE1hdGVyaWFsT3B0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtb3B0aW9uLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtZGVza3RvcC1jZWxsLXZpZXcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kZXNrdG9wLWNlbGwtdmlldy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGVza3RvcC1jZWxsLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2REZXNrdG9wQ2VsbFZpZXcge1xyXG4gIEBJbnB1dCgpIHNkSWQ6IHN0cmluZztcclxuICBASW5wdXQoKSBrZXk6IHN0cmluZztcclxuICBASW5wdXQoKSBjb2x1bW46IFNkR3JpZE1hdGVyaWFsQ29sdW1uO1xyXG4gIEBJbnB1dCgpIGl0ZW06IGFueTtcclxuICBASW5wdXQoKSBncmlkT3B0aW9uOiBTZEdyaWRNYXRlcmlhbE9wdGlvbjtcclxuICBjb25zdHJ1Y3RvcihcclxuICApIHsgfVxyXG59XHJcbiJdfQ==
@@ -1,30 +1,65 @@
1
- import { Injectable } from "@angular/core";
2
- import $ from "jquery";
1
+ var _createLoading;
2
+ import { __classPrivateFieldGet } from "tslib";
3
+ import { Injectable, RendererFactory2 } from "@angular/core";
3
4
  import * as i0 from "@angular/core";
4
5
  export class SdLoadingService {
5
- constructor() {
6
+ constructor(rendererFactory) {
6
7
  this.loadingId = "L8d556b9b-f6dd-46e9-9710-757e65d82839";
7
8
  this.start = (element = "body") => {
8
- $(element).append(this.loadingNormal);
9
+ const ele = document.querySelector(element);
10
+ this.loadingElement = __classPrivateFieldGet(this, _createLoading).call(this);
11
+ ele.append(this.loadingElement);
9
12
  };
10
13
  this.isLoading = () => {
11
- return $(`#${this.loadingId}`).length > 0;
14
+ return !!this.loadingElement;
12
15
  };
13
16
  this.stop = (element = "body") => {
14
- $(element).children(`#${this.loadingId}`).remove();
17
+ var _a;
18
+ (_a = this.loadingElement) === null || _a === void 0 ? void 0 : _a.remove();
19
+ this.loadingElement = undefined;
15
20
  };
16
- }
17
- // Loading
18
- get loadingNormal() {
19
- // tslint:disable-next-line: max-line-length
20
- return `<div class="sd-loading" id="${this.loadingId}" style="top:0;left:0;height:100vh;width:100vw;position:absolute;opacity:0.6;background:#FFFFFF;z-index: 99999;"><i class="fa fa-5x fa-spinner fa-pulse" style="margin-top:calc(50vh - 2.5rem);margin-left:calc(50vw - 2.5rem)"></i></div>`;
21
+ _createLoading.set(this, () => {
22
+ const renderer = this.renderer;
23
+ const container = this.renderer.createElement('div');
24
+ const icon = this.renderer.createElement('i');
25
+ const containerStyle = {
26
+ position: 'absolute',
27
+ top: 0,
28
+ left: 0,
29
+ height: '100%',
30
+ width: '100%',
31
+ opacity: 0.6,
32
+ background: '#FFFFFF',
33
+ 'z-index': 99999
34
+ };
35
+ const iconStyle = {
36
+ position: 'absolute',
37
+ top: 'calc(50% - 2.5rem)',
38
+ left: 'calc(50% - 2.5rem)',
39
+ };
40
+ renderer.addClass(container, 'sd-loading');
41
+ renderer.setAttribute(container, 'id', this.loadingId);
42
+ Object.entries(containerStyle).forEach((entry) => {
43
+ renderer.setStyle(container, entry[0], entry[1]);
44
+ });
45
+ renderer.setAttribute(icon, 'class', 'fa fa-5x fa-spinner fa-pulse');
46
+ Object.entries(iconStyle).forEach((entry) => {
47
+ renderer.setStyle(icon, entry[0], entry[1]);
48
+ });
49
+ container.appendChild(icon);
50
+ return container;
51
+ });
52
+ this.renderer = rendererFactory.createRenderer(null, null);
21
53
  }
22
54
  }
23
- SdLoadingService.ɵprov = i0.ɵɵdefineInjectable({ factory: function SdLoadingService_Factory() { return new SdLoadingService(); }, token: SdLoadingService, providedIn: "root" });
55
+ _createLoading = new WeakMap();
56
+ SdLoadingService.ɵprov = i0.ɵɵdefineInjectable({ factory: function SdLoadingService_Factory() { return new SdLoadingService(i0.ɵɵinject(i0.RendererFactory2)); }, token: SdLoadingService, providedIn: "root" });
24
57
  SdLoadingService.decorators = [
25
58
  { type: Injectable, args: [{
26
59
  providedIn: "root",
27
60
  },] }
28
61
  ];
29
- SdLoadingService.ctorParameters = () => [];
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9sb2FkaW5nLyIsInNvdXJjZXMiOlsic3JjL2xpYi9sb2FkaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7O0FBS3ZCLE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0I7UUFGUSxjQUFTLEdBQUcsdUNBQXVDLENBQUM7UUFVNUQsVUFBSyxHQUFHLENBQUMsVUFBa0IsTUFBTSxFQUFFLEVBQUU7WUFDbkMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDO1FBRUYsY0FBUyxHQUFHLEdBQUcsRUFBRTtZQUNmLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUM7UUFFRixTQUFJLEdBQUcsQ0FBQyxVQUFrQixNQUFNLEVBQUUsRUFBRTtZQUNsQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckQsQ0FBQyxDQUFDO0lBbEJhLENBQUM7SUFFaEIsVUFBVTtJQUNWLElBQVksYUFBYTtRQUN2Qiw0Q0FBNEM7UUFDNUMsT0FBTywrQkFBK0IsSUFBSSxDQUFDLFNBQVMsNE9BQTRPLENBQUM7SUFDblMsQ0FBQzs7OztZQVpGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZExvYWRpbmdTZXJ2aWNlIHtcclxuICBwcml2YXRlIGxvYWRpbmdJZCA9IFwiTDhkNTU2YjliLWY2ZGQtNDZlOS05NzEwLTc1N2U2NWQ4MjgzOVwiO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIC8vIExvYWRpbmdcclxuICBwcml2YXRlIGdldCBsb2FkaW5nTm9ybWFsKCkge1xyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcclxuICAgIHJldHVybiBgPGRpdiBjbGFzcz1cInNkLWxvYWRpbmdcIiBpZD1cIiR7dGhpcy5sb2FkaW5nSWR9XCIgc3R5bGU9XCJ0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMHZoO3dpZHRoOjEwMHZ3O3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MC42O2JhY2tncm91bmQ6I0ZGRkZGRjt6LWluZGV4OiA5OTk5OTtcIj48aSBjbGFzcz1cImZhIGZhLTV4IGZhLXNwaW5uZXIgZmEtcHVsc2VcIiBzdHlsZT1cIm1hcmdpbi10b3A6Y2FsYyg1MHZoIC0gMi41cmVtKTttYXJnaW4tbGVmdDpjYWxjKDUwdncgLSAyLjVyZW0pXCI+PC9pPjwvZGl2PmA7XHJcbiAgfVxyXG5cclxuICBzdGFydCA9IChlbGVtZW50OiBzdHJpbmcgPSBcImJvZHlcIikgPT4ge1xyXG4gICAgJChlbGVtZW50KS5hcHBlbmQodGhpcy5sb2FkaW5nTm9ybWFsKTtcclxuICB9O1xyXG5cclxuICBpc0xvYWRpbmcgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gJChgIyR7dGhpcy5sb2FkaW5nSWR9YCkubGVuZ3RoID4gMDtcclxuICB9O1xyXG5cclxuICBzdG9wID0gKGVsZW1lbnQ6IHN0cmluZyA9IFwiYm9keVwiKSA9PiB7XHJcbiAgICAkKGVsZW1lbnQpLmNoaWxkcmVuKGAjJHt0aGlzLmxvYWRpbmdJZH1gKS5yZW1vdmUoKTtcclxuICB9O1xyXG59XHJcbiJdfQ==
62
+ SdLoadingService.ctorParameters = () => [
63
+ { type: RendererFactory2 }
64
+ ];
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IkM6L1VzZXJzL25naGlhdHQxNV9vbmVtb3VudC9Eb2N1bWVudHMvbGliLWNvcmUtdWkvcHJvamVjdHMvc2QtY29yZS9sb2FkaW5nLyIsInNvdXJjZXMiOlsic3JjL2xpYi9sb2FkaW5nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUt4RSxNQUFNLE9BQU8sZ0JBQWdCO0lBTTNCLFlBQ0UsZUFBaUM7UUFOM0IsY0FBUyxHQUFHLHVDQUF1QyxDQUFDO1FBVzVELFVBQUssR0FBRyxDQUFDLFVBQWtCLE1BQU0sRUFBRSxFQUFFO1lBQ25DLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxrREFBQSxJQUFJLENBQWlCLENBQUM7WUFDNUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsY0FBUyxHQUFHLEdBQUcsRUFBRTtZQUNmLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDL0IsQ0FBQyxDQUFDO1FBRUYsU0FBSSxHQUFHLENBQUMsVUFBa0IsTUFBTSxFQUFFLEVBQUU7O1lBQ2xDLE1BQUEsSUFBSSxDQUFDLGNBQWMsMENBQUUsTUFBTSxHQUFHO1lBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDO1FBQ2xDLENBQUMsQ0FBQztRQUVGLHlCQUFpQixHQUFnQixFQUFFO1lBQ2pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDL0IsTUFBTSxTQUFTLEdBQWdCLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sSUFBSSxHQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRCxNQUFNLGNBQWMsR0FBRztnQkFDckIsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLEdBQUcsRUFBRSxDQUFDO2dCQUNOLElBQUksRUFBRSxDQUFDO2dCQUNQLE1BQU0sRUFBRSxNQUFNO2dCQUNkLEtBQUssRUFBRSxNQUFNO2dCQUNiLE9BQU8sRUFBRSxHQUFHO2dCQUNaLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFBO1lBQ0QsTUFBTSxTQUFTLEdBQUc7Z0JBQ2hCLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixHQUFHLEVBQUUsb0JBQW9CO2dCQUN6QixJQUFJLEVBQUUsb0JBQW9CO2FBQzNCLENBQUE7WUFDRCxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUMzQyxRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXZELE1BQU0sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQy9DLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FBQztZQUNILFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQzFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FBQztZQUVILFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxFQUFBO1FBbERDLElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDN0QsQ0FBQzs7Ozs7WUFiRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQUorQixnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RMb2FkaW5nU2VydmljZSB7XHJcbiAgcHJpdmF0ZSBsb2FkaW5nSWQgPSBcIkw4ZDU1NmI5Yi1mNmRkLTQ2ZTktOTcxMC03NTdlNjVkODI4MzlcIjtcclxuXHJcbiAgcHJpdmF0ZSBsb2FkaW5nRWxlbWVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XHJcbiAgXHJcbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyXHJcbiAgKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnQgPSAoZWxlbWVudDogc3RyaW5nID0gXCJib2R5XCIpID0+IHtcclxuICAgIGNvbnN0IGVsZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWxlbWVudCk7XHJcbiAgICB0aGlzLmxvYWRpbmdFbGVtZW50ID0gdGhpcy4jY3JlYXRlTG9hZGluZygpO1xyXG4gICAgZWxlLmFwcGVuZCh0aGlzLmxvYWRpbmdFbGVtZW50KTtcclxuICB9O1xyXG5cclxuICBpc0xvYWRpbmcgPSAoKSA9PiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmxvYWRpbmdFbGVtZW50O1xyXG4gIH07XHJcblxyXG4gIHN0b3AgPSAoZWxlbWVudDogc3RyaW5nID0gXCJib2R5XCIpID0+IHtcclxuICAgIHRoaXMubG9hZGluZ0VsZW1lbnQ/LnJlbW92ZSgpO1xyXG4gICAgdGhpcy5sb2FkaW5nRWxlbWVudCA9IHVuZGVmaW5lZDtcclxuICB9O1xyXG5cclxuICAjY3JlYXRlTG9hZGluZyA9ICgpOiBIVE1MRWxlbWVudCA9PiB7XHJcbiAgICBjb25zdCByZW5kZXJlciA9IHRoaXMucmVuZGVyZXI7XHJcbiAgICBjb25zdCBjb250YWluZXI6IEhUTUxFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgIGNvbnN0IGljb246IEhUTUxFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdpJyk7XHJcbiAgICBjb25zdCBjb250YWluZXJTdHlsZSA9IHtcclxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICAgIHRvcDogMCxcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgIG9wYWNpdHk6IDAuNixcclxuICAgICAgYmFja2dyb3VuZDogJyNGRkZGRkYnLFxyXG4gICAgICAnei1pbmRleCc6IDk5OTk5XHJcbiAgICB9XHJcbiAgICBjb25zdCBpY29uU3R5bGUgPSB7XHJcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxyXG4gICAgICB0b3A6ICdjYWxjKDUwJSAtIDIuNXJlbSknLFxyXG4gICAgICBsZWZ0OiAnY2FsYyg1MCUgLSAyLjVyZW0pJyxcclxuICAgIH1cclxuICAgIHJlbmRlcmVyLmFkZENsYXNzKGNvbnRhaW5lciwgJ3NkLWxvYWRpbmcnKTtcclxuICAgIHJlbmRlcmVyLnNldEF0dHJpYnV0ZShjb250YWluZXIsICdpZCcsIHRoaXMubG9hZGluZ0lkKTtcclxuICAgIFxyXG4gICAgT2JqZWN0LmVudHJpZXMoY29udGFpbmVyU3R5bGUpLmZvckVhY2goKGVudHJ5KSA9PiB7XHJcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGNvbnRhaW5lciwgZW50cnlbMF0sIGVudHJ5WzFdKTtcclxuICAgIH0pO1xyXG4gICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGljb24sICdjbGFzcycsICdmYSBmYS01eCBmYS1zcGlubmVyIGZhLXB1bHNlJyk7XHJcbiAgICBPYmplY3QuZW50cmllcyhpY29uU3R5bGUpLmZvckVhY2goKGVudHJ5KSA9PiB7XHJcbiAgICAgIHJlbmRlcmVyLnNldFN0eWxlKGljb24sIGVudHJ5WzBdLCBlbnRyeVsxXSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaWNvbik7XHJcbiAgICByZXR1cm4gY29udGFpbmVyO1xyXG4gIH1cclxufVxyXG4iXX0=