@valtimo/components 12.7.0 → 12.9.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 (23) hide show
  1. package/assets/css/formio-carbon.scss +132 -14
  2. package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +28 -19
  3. package/esm2022/lib/components/form-io/formio-value-resolver-selector/formio-value-resolver-selector.component.mjs +1 -1
  4. package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +20 -6
  5. package/esm2022/lib/components/multi-input/components/key-value-path-selector/key-value-path-selector.component.mjs +2 -2
  6. package/esm2022/lib/components/multi-input/components/value-path-selector-dropdown-value/value-path-selector-dropdown-value.component.mjs +2 -2
  7. package/esm2022/lib/components/multi-input/components/value-path-selector-value/value-path-selector-value.component.mjs +2 -2
  8. package/esm2022/lib/components/status-selector/status-selector.component.mjs +3 -3
  9. package/esm2022/lib/components/value-path-selector/value-path-selector.component.mjs +62 -22
  10. package/esm2022/lib/models/value-path-selector.model.mjs +7 -2
  11. package/esm2022/lib/services/value-path-selector.service.mjs +55 -40
  12. package/fesm2022/valtimo-components.mjs +165 -83
  13. package/fesm2022/valtimo-components.mjs.map +1 -1
  14. package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -1
  15. package/lib/components/multi-input/carbon-multi-input.component.d.ts +3 -1
  16. package/lib/components/multi-input/carbon-multi-input.component.d.ts.map +1 -1
  17. package/lib/components/value-path-selector/value-path-selector.component.d.ts +13 -7
  18. package/lib/components/value-path-selector/value-path-selector.component.d.ts.map +1 -1
  19. package/lib/models/value-path-selector.model.d.ts +17 -2
  20. package/lib/models/value-path-selector.model.d.ts.map +1 -1
  21. package/lib/services/value-path-selector.service.d.ts +8 -4
  22. package/lib/services/value-path-selector.service.d.ts.map +1 -1
  23. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { BaseApiService } from '@valtimo/config';
3
- import { BehaviorSubject, catchError, combineLatest, interval, map, of, Subscription, switchMap, take, } from 'rxjs';
3
+ import { BehaviorSubject, Subscription, interval, map, of, take, tap } from 'rxjs';
4
+ import { ValuePathType, } from '../models';
4
5
  import { deepmerge } from 'deepmerge-ts';
5
6
  import { isEqual } from 'lodash';
6
- import { tap } from 'rxjs/operators';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/common/http";
9
9
  import * as i2 from "@valtimo/config";
@@ -17,32 +17,6 @@ export class ValuePathSelectorService extends BaseApiService {
17
17
  this._subscriptions = new Subscription();
18
18
  this.openClearCacheSubscription();
19
19
  }
20
- getResolvableKeysPerPrefix(prefixes, documentDefinitionName, version = 'latest') {
21
- return of(version).pipe(switchMap(version => {
22
- const prefixesWithCache = prefixes.filter(prefix => !!this.getResultFromCache(prefix, documentDefinitionName, version));
23
- const resultsFromCache = prefixesWithCache
24
- .map(prefix => this.getResultFromCache(prefix, documentDefinitionName, version))
25
- .reduce((acc, curr) => [...acc, ...curr], []);
26
- const prefixesWithoutCache = prefixes.filter(prefix => !prefixesWithCache.includes(prefix));
27
- const httpCall = typeof version !== 'number'
28
- ? this.httpClient
29
- .post(this.getApiUrl(`/management/v1/value-resolver/document-definition/${documentDefinitionName}/keys`), prefixesWithoutCache)
30
- .pipe(catchError(() => of([])))
31
- : this.httpClient
32
- .post(this.getApiUrl(`/management/v1/value-resolver/document-definition/${documentDefinitionName}/version/${version}/keys`), prefixesWithoutCache)
33
- .pipe(catchError(() => of([])));
34
- return combineLatest([
35
- prefixesWithoutCache.length > 0 ? httpCall : of([]),
36
- of(resultsFromCache),
37
- ]);
38
- }), tap(([result, resultsFromCache]) => {
39
- const combinedResults = [...result, ...resultsFromCache];
40
- prefixes.forEach(prefix => {
41
- const prefixResults = combinedResults.filter(valuePath => valuePath.includes(prefix));
42
- this.cacheResult(prefix, documentDefinitionName, version, prefixResults);
43
- });
44
- }), map(([result, resultsFromCache]) => [...result, ...resultsFromCache]));
45
- }
46
20
  ngOnDestroy() {
47
21
  this._subscriptions.unsubscribe();
48
22
  }
@@ -55,26 +29,67 @@ export class ValuePathSelectorService extends BaseApiService {
55
29
  getDocumentDefinitionCache() {
56
30
  return this._documentDefinitionCache$.asObservable();
57
31
  }
32
+ getResolvableKeys(prefixes, documentDefinitionName, type = ValuePathType.FIELD, version = 'latest') {
33
+ this._prefixes = prefixes;
34
+ this._documentDefinitionName = documentDefinitionName;
35
+ this._version = version;
36
+ const url = typeof version !== 'number'
37
+ ? `/management/v2/value-resolver/document-definition/${documentDefinitionName}/keys`
38
+ : `/management/v2/value-resolver/document-definition/${documentDefinitionName}/version/${version}/keys`;
39
+ const prefixesWithoutCache = prefixes.filter((prefix) => !this.getCacheResult(prefix, type));
40
+ return (prefixesWithoutCache.length > 0
41
+ ? this.httpClient.post(this.getApiUrl(url), {
42
+ prefixes: prefixesWithoutCache,
43
+ type,
44
+ })
45
+ : of([])).pipe(tap((results) => {
46
+ if (type === ValuePathType.FIELD)
47
+ this.cacheMapping(results.map((result) => ({ path: result.path })), type);
48
+ else
49
+ this.cacheMapping(results.reduce((acc, curr) => [...acc, ...this.mapCollectionItem(curr)], []), type);
50
+ }), map(() => prefixes.reduce((acc, curr) => [...acc, ...(this.getCacheResult(curr, type) ?? [])], [])));
51
+ }
58
52
  openClearCacheSubscription() {
59
53
  this._subscriptions.add(interval(60 * 1000).subscribe(() => {
60
54
  this._cache = {};
61
55
  this._documentDefinitionCache$.next(null);
62
56
  }));
63
57
  }
64
- getResultFromCache(prefix, documentDefinitionName, version = 'latest') {
65
- return this._cache[documentDefinitionName]?.[version]?.[prefix] || null;
58
+ getCacheResult(prefix, type) {
59
+ return this._cache[this._documentDefinitionName]?.[this._version]?.[prefix]?.[type];
60
+ }
61
+ mapCollectionItem(item, parentPath) {
62
+ const fieldChildren = [];
63
+ const collectionChildren = [];
64
+ item.children.forEach((child) => {
65
+ if (child.type === ValuePathType.FIELD)
66
+ fieldChildren.push(child);
67
+ else
68
+ collectionChildren.push(child);
69
+ });
70
+ return [
71
+ {
72
+ path: `${parentPath ?? ''}${item.path}`,
73
+ children: fieldChildren.map((child) => child.path),
74
+ },
75
+ ...collectionChildren.reduce((acc, curr) => [...acc, ...this.mapCollectionItem(curr, `${parentPath ?? ''}${item.path}`)], []),
76
+ ];
66
77
  }
67
- cacheResult(prefix, documentDefinitionName, version = 'latest', result) {
68
- const resultCacheObject = {
69
- [documentDefinitionName]: {
70
- [version]: {
71
- [prefix]: result,
72
- },
78
+ cacheMapping(results, type) {
79
+ if (!results.length)
80
+ return;
81
+ const prefixResults = this._prefixes.reduce((acc, curr) => ({
82
+ ...acc,
83
+ [curr]: {
84
+ [type]: results.filter((result) => result.path.split(':')[0] === curr),
85
+ },
86
+ }), {});
87
+ const tempCache = {
88
+ [this._documentDefinitionName]: {
89
+ [this._version]: prefixResults,
73
90
  },
74
91
  };
75
- if (!this.getResultFromCache(prefix, documentDefinitionName, version)) {
76
- this._cache = deepmerge(this._cache, resultCacheObject);
77
- }
92
+ this._cache = deepmerge(this._cache, tempCache);
78
93
  }
79
94
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValuePathSelectorService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable }); }
80
95
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ValuePathSelectorService, providedIn: 'root' }); }
@@ -85,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
85
100
  providedIn: 'root',
86
101
  }]
87
102
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.ConfigService }] });
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtcGF0aC1zZWxlY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvdmFsdWUtcGF0aC1zZWxlY3Rvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxjQUFjLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsYUFBYSxFQUNiLFFBQVEsRUFDUixHQUFHLEVBRUgsRUFBRSxFQUNGLFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxHQUNMLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUV2QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQy9CLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUtuQyxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsY0FBYztJQU0xRCxZQUNxQixVQUFzQixFQUN0QixhQUE0QjtRQUUvQyxLQUFLLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBSGQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVB6QyxXQUFNLEdBQTJCLEVBQUUsQ0FBQztRQUNwQyw4QkFBeUIsR0FBRyxJQUFJLGVBQWUsQ0FBNkIsSUFBSSxDQUFDLENBQUM7UUFFekUsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBT25ELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTSwwQkFBMEIsQ0FDL0IsUUFBbUMsRUFDbkMsc0JBQThCLEVBQzlCLFVBQW9DLFFBQVE7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TSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDMUQsQ0FBQztJQUNILENBQUM7K0dBekdVLHdCQUF3QjttSEFBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzRGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SW5qZWN0YWJsZSwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QmFzZUFwaVNlcnZpY2UsIENvbmZpZ1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGludGVydmFsLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICBTdWJzY3JpcHRpb24sXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1ZhbHVlUGF0aFNlbGVjdG9yQ2FjaGUsIFZhbHVlUGF0aFNlbGVjdG9yUHJlZml4LCBWYWx1ZVBhdGhWZXJzaW9uQXJndW1lbnR9IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge2RlZXBtZXJnZX0gZnJvbSAnZGVlcG1lcmdlLXRzJztcbmltcG9ydCB7RG9jdW1lbnREZWZpbml0aW9uc30gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtpc0VxdWFsfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHt0YXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlUGF0aFNlbGVjdG9yU2VydmljZSBleHRlbmRzIEJhc2VBcGlTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBfY2FjaGU6IFZhbHVlUGF0aFNlbGVjdG9yQ2FjaGUgPSB7fTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnREZWZpbml0aW9uQ2FjaGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb2N1bWVudERlZmluaXRpb25zIHwgbnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZVxuICApIHtcbiAgICBzdXBlcihodHRwQ2xpZW50LCBjb25maWdTZXJ2aWNlKTtcbiAgICB0aGlzLm9wZW5DbGVhckNhY2hlU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzb2x2YWJsZUtleXNQZXJQcmVmaXgoXG4gICAgcHJlZml4ZXM6IFZhbHVlUGF0aFNlbGVjdG9yUHJlZml4W10sXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IFZhbHVlUGF0aFZlcnNpb25Bcmd1bWVudCA9ICdsYXRlc3QnXG4gICk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gb2YodmVyc2lvbikucGlwZShcbiAgICAgIHN3aXRjaE1hcCh2ZXJzaW9uID0+IHtcbiAgICAgICAgY29uc3QgcHJlZml4ZXNXaXRoQ2FjaGUgPSBwcmVmaXhlcy5maWx0ZXIoXG4gICAgICAgICAgcHJlZml4ID0+ICEhdGhpcy5nZXRSZXN1bHRGcm9tQ2FjaGUocHJlZml4LCBkb2N1bWVudERlZmluaXRpb25OYW1lLCB2ZXJzaW9uKVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZXN1bHRzRnJvbUNhY2hlID0gcHJlZml4ZXNXaXRoQ2FjaGVcbiAgICAgICAgICAubWFwKHByZWZpeCA9PiB0aGlzLmdldFJlc3VsdEZyb21DYWNoZShwcmVmaXgsIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHZlcnNpb24pKVxuICAgICAgICAgIC5yZWR1Y2UoKGFjYywgY3VycikgPT4gWy4uLmFjYywgLi4uY3Vycl0sIFtdKTtcbiAgICAgICAgY29uc3QgcHJlZml4ZXNXaXRob3V0Q2FjaGUgPSBwcmVmaXhlcy5maWx0ZXIocHJlZml4ID0+ICFwcmVmaXhlc1dpdGhDYWNoZS5pbmNsdWRlcyhwcmVmaXgpKTtcbiAgICAgICAgY29uc3QgaHR0cENhbGwgPVxuICAgICAgICAgIHR5cGVvZiB2ZXJzaW9uICE9PSAnbnVtYmVyJ1xuICAgICAgICAgICAgPyB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdDxcbiAgICAgICAgICAgICAgICAgIHN0cmluZ1tdXG4gICAgICAgICAgICAgICAgPih0aGlzLmdldEFwaVVybChgL21hbmFnZW1lbnQvdjEvdmFsdWUtcmVzb2x2ZXIvZG9jdW1lbnQtZGVmaW5pdGlvbi8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L2tleXNgKSwgcHJlZml4ZXNXaXRob3V0Q2FjaGUpXG4gICAgICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZihbXSkpKVxuICAgICAgICAgICAgOiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdDxcbiAgICAgICAgICAgICAgICAgIHN0cmluZ1tdXG4gICAgICAgICAgICAgICAgPih0aGlzLmdldEFwaVVybChgL21hbmFnZW1lbnQvdjEvdmFsdWUtcmVzb2x2ZXIvZG9jdW1lbnQtZGVmaW5pdGlvbi8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L3ZlcnNpb24vJHt2ZXJzaW9ufS9rZXlzYCksIHByZWZpeGVzV2l0aG91dENhY2hlKVxuICAgICAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKCkgPT4gb2YoW10pKSk7XG5cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIHByZWZpeGVzV2l0aG91dENhY2hlLmxlbmd0aCA+IDAgPyBodHRwQ2FsbCA6IG9mKFtdKSxcbiAgICAgICAgICBvZihyZXN1bHRzRnJvbUNhY2hlKSxcbiAgICAgICAgXSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgoW3Jlc3VsdCwgcmVzdWx0c0Zyb21DYWNoZV0pID0+IHtcbiAgICAgICAgY29uc3QgY29tYmluZWRSZXN1bHRzID0gWy4uLnJlc3VsdCwgLi4ucmVzdWx0c0Zyb21DYWNoZV07XG4gICAgICAgIHByZWZpeGVzLmZvckVhY2gocHJlZml4ID0+IHtcbiAgICAgICAgICBjb25zdCBwcmVmaXhSZXN1bHRzID0gY29tYmluZWRSZXN1bHRzLmZpbHRlcih2YWx1ZVBhdGggPT4gdmFsdWVQYXRoLmluY2x1ZGVzKHByZWZpeCkpO1xuICAgICAgICAgIHRoaXMuY2FjaGVSZXN1bHQocHJlZml4LCBkb2N1bWVudERlZmluaXRpb25OYW1lLCB2ZXJzaW9uLCBwcmVmaXhSZXN1bHRzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIG1hcCgoW3Jlc3VsdCwgcmVzdWx0c0Zyb21DYWNoZV0pID0+IFsuLi5yZXN1bHQsIC4uLnJlc3VsdHNGcm9tQ2FjaGVdKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHVibGljIHNldERvY3VtZW50RGVmaW5pdGlvbkNhY2hlKGNhY2hlOiBEb2N1bWVudERlZmluaXRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uQ2FjaGUkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGN1cnJlbnRDYWNoZSA9PiB7XG4gICAgICBpZiAoIWlzRXF1YWwoY2FjaGUsIGN1cnJlbnRDYWNoZSkpIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbkNhY2hlJC5uZXh0KGNhY2hlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXREb2N1bWVudERlZmluaXRpb25DYWNoZSgpOiBPYnNlcnZhYmxlPERvY3VtZW50RGVmaW5pdGlvbnMgfCBudWxsPiB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbkNhY2hlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkNsZWFyQ2FjaGVTdWJzY3JpcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICBpbnRlcnZhbCg2MCAqIDEwMDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NhY2hlID0ge307XG4gICAgICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbkNhY2hlJC5uZXh0KG51bGwpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXN1bHRGcm9tQ2FjaGUoXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLFxuICAgIHZlcnNpb246IFZhbHVlUGF0aFZlcnNpb25Bcmd1bWVudCA9ICdsYXRlc3QnXG4gICk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlW2RvY3VtZW50RGVmaW5pdGlvbk5hbWVdPy5bdmVyc2lvbl0/LltwcmVmaXhdIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNhY2hlUmVzdWx0KFxuICAgIHByZWZpeDogc3RyaW5nLFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBWYWx1ZVBhdGhWZXJzaW9uQXJndW1lbnQgPSAnbGF0ZXN0JyxcbiAgICByZXN1bHQ6IHN0cmluZ1tdXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdENhY2hlT2JqZWN0OiBWYWx1ZVBhdGhTZWxlY3RvckNhY2hlID0ge1xuICAgICAgW2RvY3VtZW50RGVmaW5pdGlvbk5hbWVdOiB7XG4gICAgICAgIFt2ZXJzaW9uXToge1xuICAgICAgICAgIFtwcmVmaXhdOiByZXN1bHQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuZ2V0UmVzdWx0RnJvbUNhY2hlKHByZWZpeCwgZG9jdW1lbnREZWZpbml0aW9uTmFtZSwgdmVyc2lvbikpIHtcbiAgICAgIHRoaXMuX2NhY2hlID0gZGVlcG1lcmdlKHRoaXMuX2NhY2hlLCByZXN1bHRDYWNoZU9iamVjdCk7XG4gICAgfVxuICB9XG59XG4iXX0=
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtcGF0aC1zZWxlY3Rvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmFsdGltby9jb21wb25lbnRzL3NyYy9saWIvc2VydmljZXMvdmFsdWUtcGF0aC1zZWxlY3Rvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBQyxjQUFjLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGVBQWUsRUFBYyxZQUFZLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBS0wsYUFBYSxHQUVkLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFdkMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFFBQVEsQ0FBQzs7OztBQUsvQixNQUFNLE9BQU8sd0JBQXlCLFNBQVEsY0FBYztJQVMxRCxZQUNxQixVQUFzQixFQUN0QixhQUE0QjtRQUUvQyxLQUFLLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBSGQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQU56QyxXQUFNLEdBQTJCLEVBQUUsQ0FBQztRQUNwQyw4QkFBeUIsR0FBRyxJQUFJLGVBQWUsQ0FBNkIsSUFBSSxDQUFDLENBQUM7UUFDekUsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBT25ELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVNLDBCQUEwQixD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QUMsT0FBd0IsRUFBRSxJQUFtQjtRQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRTVCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUN6QyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDZCxHQUFHLEdBQUc7WUFDTixDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNOLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQXFCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQzthQUN0RjtTQUNGLENBQUMsRUFDRixFQUFFLENBQ0gsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUEyQjtZQUN4QyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO2dCQUM5QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxhQUFhO2FBQy9CO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEQsQ0FBQzsrR0FySVUsd0JBQXdCO21IQUF4Qix3QkFBd0IsY0FGdkIsTUFBTTs7NEZBRVAsd0JBQXdCO2tCQUhwQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCYXNlQXBpU2VydmljZSwgQ29uZmlnU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIGludGVydmFsLCBtYXAsIG9mLCB0YWtlLCB0YXB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgVmFsdWVQYXRoSXRlbSxcbiAgVmFsdWVQYXRoUmVzcG9uc2UsXG4gIFZhbHVlUGF0aFNlbGVjdG9yQ2FjaGUsXG4gIFZhbHVlUGF0aFNlbGVjdG9yUHJlZml4LFxuICBWYWx1ZVBhdGhUeXBlLFxuICBWYWx1ZVBhdGhWZXJzaW9uQXJndW1lbnQsXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQge2RlZXBtZXJnZX0gZnJvbSAnZGVlcG1lcmdlLXRzJztcbmltcG9ydCB7RG9jdW1lbnREZWZpbml0aW9uc30gZnJvbSAnQHZhbHRpbW8vZG9jdW1lbnQnO1xuaW1wb3J0IHtpc0VxdWFsfSBmcm9tICdsb2Rhc2gnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVmFsdWVQYXRoU2VsZWN0b3JTZXJ2aWNlIGV4dGVuZHMgQmFzZUFwaVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9wcmVmaXhlczogVmFsdWVQYXRoU2VsZWN0b3JQcmVmaXhbXTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF92ZXJzaW9uOiBWYWx1ZVBhdGhWZXJzaW9uQXJndW1lbnQ7XG5cbiAgcHJpdmF0ZSBfY2FjaGU6IFZhbHVlUGF0aFNlbGVjdG9yQ2FjaGUgPSB7fTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnREZWZpbml0aW9uQ2FjaGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEb2N1bWVudERlZmluaXRpb25zIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoaHR0cENsaWVudCwgY29uZmlnU2VydmljZSk7XG4gICAgdGhpcy5vcGVuQ2xlYXJDYWNoZVN1YnNjcmlwdGlvbigpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXREb2N1bWVudERlZmluaXRpb25DYWNoZShjYWNoZTogRG9jdW1lbnREZWZpbml0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbkNhY2hlJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShjdXJyZW50Q2FjaGUgPT4ge1xuICAgICAgaWYgKCFpc0VxdWFsKGNhY2hlLCBjdXJyZW50Q2FjaGUpKSB0aGlzLl9kb2N1bWVudERlZmluaXRpb25DYWNoZSQubmV4dChjYWNoZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RG9jdW1lbnREZWZpbml0aW9uQ2FjaGUoKTogT2JzZXJ2YWJsZTxEb2N1bWVudERlZmluaXRpb25zIHwgbnVsbD4ge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudERlZmluaXRpb25DYWNoZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UmVzb2x2YWJsZUtleXMoXG4gICAgcHJlZml4ZXM6IFZhbHVlUGF0aFNlbGVjdG9yUHJlZml4W10sXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLFxuICAgIHR5cGU6IFZhbHVlUGF0aFR5cGUgPSBWYWx1ZVBhdGhUeXBlLkZJRUxELFxuICAgIHZlcnNpb246IFZhbHVlUGF0aFZlcnNpb25Bcmd1bWVudCA9ICdsYXRlc3QnXG4gICk6IE9ic2VydmFibGU8VmFsdWVQYXRoSXRlbVtdPiB7XG4gICAgdGhpcy5fcHJlZml4ZXMgPSBwcmVmaXhlcztcbiAgICB0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lID0gZG9jdW1lbnREZWZpbml0aW9uTmFtZTtcbiAgICB0aGlzLl92ZXJzaW9uID0gdmVyc2lvbjtcblxuICAgIGNvbnN0IHVybCA9XG4gICAgICB0eXBlb2YgdmVyc2lvbiAhPT0gJ251bWJlcidcbiAgICAgICAgPyBgL21hbmFnZW1lbnQvdjIvdmFsdWUtcmVzb2x2ZXIvZG9jdW1lbnQtZGVmaW5pdGlvbi8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L2tleXNgXG4gICAgICAgIDogYC9tYW5hZ2VtZW50L3YyL3ZhbHVlLXJlc29sdmVyL2RvY3VtZW50LWRlZmluaXRpb24vJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS92ZXJzaW9uLyR7dmVyc2lvbn0va2V5c2A7XG5cbiAgICBjb25zdCBwcmVmaXhlc1dpdGhvdXRDYWNoZTogVmFsdWVQYXRoU2VsZWN0b3JQcmVmaXhbXSA9IHByZWZpeGVzLmZpbHRlcihcbiAgICAgIChwcmVmaXg6IFZhbHVlUGF0aFNlbGVjdG9yUHJlZml4KSA9PiAhdGhpcy5nZXRDYWNoZVJlc3VsdChwcmVmaXgsIHR5cGUpXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICBwcmVmaXhlc1dpdGhvdXRDYWNoZS5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5odHRwQ2xpZW50LnBvc3Q8VmFsdWVQYXRoUmVzcG9uc2VbXT4odGhpcy5nZXRBcGlVcmwodXJsKSwge1xuICAgICAgICAgICAgcHJlZml4ZXM6IHByZWZpeGVzV2l0aG91dENhY2hlLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICB9KVxuICAgICAgICA6IG9mKFtdKVxuICAgICkucGlwZShcbiAgICAgIHRhcCgocmVzdWx0czogVmFsdWVQYXRoUmVzcG9uc2VbXSkgPT4ge1xuICAgICAgICBpZiAodHlwZSA9PT0gVmFsdWVQYXRoVHlwZS5GSUVMRClcbiAgICAgICAgICB0aGlzLmNhY2hlTWFwcGluZyhcbiAgICAgICAgICAgIHJlc3VsdHMubWFwKChyZXN1bHQ6IFZhbHVlUGF0aFJlc3BvbnNlKSA9PiAoe3BhdGg6IHJlc3VsdC5wYXRofSkpLFxuICAgICAgICAgICAgdHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICB0aGlzLmNhY2hlTWFwcGluZyhcbiAgICAgICAgICAgIHJlc3VsdHMucmVkdWNlKChhY2MsIGN1cnIpID0+IFsuLi5hY2MsIC4uLnRoaXMubWFwQ29sbGVjdGlvbkl0ZW0oY3VycildLCBbXSksXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgbWFwKCgpID0+XG4gICAgICAgIHByZWZpeGVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBbLi4uYWNjLCAuLi4odGhpcy5nZXRDYWNoZVJlc3VsdChjdXJyLCB0eXBlKSA/PyBbXSldLCBbXSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQ2xlYXJDYWNoZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGludGVydmFsKDYwICogMTAwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uQ2FjaGUkLm5leHQobnVsbCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldENhY2hlUmVzdWx0KFxuICAgIHByZWZpeDogVmFsdWVQYXRoU2VsZWN0b3JQcmVmaXgsXG4gICAgdHlwZTogVmFsdWVQYXRoVHlwZVxuICApOiBWYWx1ZVBhdGhJdGVtW10gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZVt0aGlzLl9kb2N1bWVudERlZmluaXRpb25OYW1lXT8uW3RoaXMuX3ZlcnNpb25dPy5bcHJlZml4XT8uW3R5cGVdO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBDb2xsZWN0aW9uSXRlbShpdGVtOiBWYWx1ZVBhdGhSZXNwb25zZSwgcGFyZW50UGF0aD86IHN0cmluZyk6IFZhbHVlUGF0aEl0ZW1bXSB7XG4gICAgY29uc3QgZmllbGRDaGlsZHJlbiA9IFtdO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25DaGlsZHJlbiA9IFtdO1xuXG4gICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogVmFsdWVQYXRoUmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChjaGlsZC50eXBlID09PSBWYWx1ZVBhdGhUeXBlLkZJRUxEKSBmaWVsZENoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgZWxzZSBjb2xsZWN0aW9uQ2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBwYXRoOiBgJHtwYXJlbnRQYXRoID8/ICcnfSR7aXRlbS5wYXRofWAsXG4gICAgICAgIGNoaWxkcmVuOiBmaWVsZENoaWxkcmVuLm1hcCgoY2hpbGQ6IFZhbHVlUGF0aFJlc3BvbnNlKSA9PiBjaGlsZC5wYXRoKSxcbiAgICAgIH0sXG4gICAgICAuLi5jb2xsZWN0aW9uQ2hpbGRyZW4ucmVkdWNlKFxuICAgICAgICAoYWNjLCBjdXJyKSA9PiBbLi4uYWNjLCAuLi50aGlzLm1hcENvbGxlY3Rpb25JdGVtKGN1cnIsIGAke3BhcmVudFBhdGggPz8gJyd9JHtpdGVtLnBhdGh9YCldLFxuICAgICAgICBbXVxuICAgICAgKSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWNoZU1hcHBpbmcocmVzdWx0czogVmFsdWVQYXRoSXRlbVtdLCB0eXBlOiBWYWx1ZVBhdGhUeXBlKTogdm9pZCB7XG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJlZml4UmVzdWx0cyA9IHRoaXMuX3ByZWZpeGVzLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnIpID0+ICh7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgW2N1cnJdOiB7XG4gICAgICAgICAgW3R5cGVdOiByZXN1bHRzLmZpbHRlcigocmVzdWx0OiBWYWx1ZVBhdGhJdGVtKSA9PiByZXN1bHQucGF0aC5zcGxpdCgnOicpWzBdID09PSBjdXJyKSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAge31cbiAgICApO1xuXG4gICAgY29uc3QgdGVtcENhY2hlOiBWYWx1ZVBhdGhTZWxlY3RvckNhY2hlID0ge1xuICAgICAgW3RoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWVdOiB7XG4gICAgICAgIFt0aGlzLl92ZXJzaW9uXTogcHJlZml4UmVzdWx0cyxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIHRoaXMuX2NhY2hlID0gZGVlcG1lcmdlKHRoaXMuX2NhY2hlLCB0ZW1wQ2FjaGUpO1xuICB9XG59XG4iXX0=