@datagrok-libraries/utils 4.3.2 → 4.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -6
- package/package.json +1 -1
- package/src/fetch-utils.d.ts +13 -0
- package/src/fetch-utils.d.ts.map +1 -0
- package/src/fetch-utils.js +32 -0
- package/src/settings/active-files-base.d.ts +9 -1
- package/src/settings/active-files-base.d.ts.map +1 -1
- package/src/settings/active-files-base.js +31 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# utils changelog
|
|
2
2
|
|
|
3
|
+
## 4.3.4 (2024-09-25)
|
|
4
|
+
|
|
5
|
+
### New features
|
|
6
|
+
|
|
7
|
+
* utils lib: Add setActive and onValueChanged for ActiveFiles for dialog history
|
|
8
|
+
|
|
3
9
|
## 4.2.30 (2024-09-06)
|
|
4
10
|
|
|
5
11
|
- Preparing 1.21.1 release
|
|
@@ -22,7 +28,7 @@ Invocation time refactoring
|
|
|
22
28
|
|
|
23
29
|
## 4.2.25 (2024-08-15)
|
|
24
30
|
|
|
25
|
-
Added invocation time to tests
|
|
31
|
+
Added invocation time to tests
|
|
26
32
|
|
|
27
33
|
## 4.2.24 (2024-08-09)
|
|
28
34
|
|
|
@@ -46,8 +52,7 @@ Optimize linesrenderer for short lines and no mouseover checking conditions. add
|
|
|
46
52
|
|
|
47
53
|
## 4.2.19 (2024-08-02)
|
|
48
54
|
|
|
49
|
-
Fix benchmark timeout
|
|
50
|
-
|
|
55
|
+
Fix benchmark timeout
|
|
51
56
|
|
|
52
57
|
## 4.2.18 (2024-08-02)
|
|
53
58
|
|
|
@@ -63,7 +68,7 @@ Fixed core tests output to the Test Manager app
|
|
|
63
68
|
|
|
64
69
|
## 4.2.15 (2024-07-30)
|
|
65
70
|
|
|
66
|
-
Removed Unhadled exception test for benchmarks
|
|
71
|
+
Removed Unhadled exception test for benchmarks
|
|
67
72
|
|
|
68
73
|
## 4.2.14 (2024-07-29)
|
|
69
74
|
|
|
@@ -151,7 +156,8 @@ Fix the lastError problem in the test engine.
|
|
|
151
156
|
|
|
152
157
|
### Features
|
|
153
158
|
|
|
154
|
-
* [#2687](https://github.com/datagrok-ai/public/issues/2687): Forms viewer: Added an option to adjust the size of the
|
|
159
|
+
* [#2687](https://github.com/datagrok-ai/public/issues/2687): Forms viewer: Added an option to adjust the size of the
|
|
160
|
+
molecule.
|
|
155
161
|
* Lowered line threshold for scatterplot lines renderer.
|
|
156
162
|
|
|
157
163
|
## 4.1.43 (2024-02-15)
|
|
@@ -175,7 +181,7 @@ Fix the lastError problem in the test engine.
|
|
|
175
181
|
|
|
176
182
|
* Added to testViewer support options.awaitViewer
|
|
177
183
|
|
|
178
|
-
### Bug fixes
|
|
184
|
+
### Bug fixes
|
|
179
185
|
|
|
180
186
|
* Fixed testViewer for element selector
|
|
181
187
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wraps an async function `fn` that fetches data from an API and returns a Promise.
|
|
3
|
+
* If `fn` succeeds, its result is returned. If it fails, a custom error with the message
|
|
4
|
+
* 'Promise rejected' is thrown.
|
|
5
|
+
*
|
|
6
|
+
* @template T - The type of the Promise returned by `fn`.
|
|
7
|
+
* @param {() => Promise<T>} fn - The async function that fetches data from an API to wrap.
|
|
8
|
+
* @returns {Promise<T>} - Resolves with `fn`'s result or rejects with
|
|
9
|
+
* 'Promise rejected' if `fn` fails.
|
|
10
|
+
* @throws {Error} - Throws 'Promise rejected' on failure.
|
|
11
|
+
*/
|
|
12
|
+
export declare function fetchWrapper<T>(fn: () => Promise<T>): Promise<T>;
|
|
13
|
+
//# sourceMappingURL=fetch-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-utils.d.ts","sourceRoot":"","sources":["fetch-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAOtE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Wraps an async function `fn` that fetches data from an API and returns a Promise.
|
|
12
|
+
* If `fn` succeeds, its result is returned. If it fails, a custom error with the message
|
|
13
|
+
* 'Promise rejected' is thrown.
|
|
14
|
+
*
|
|
15
|
+
* @template T - The type of the Promise returned by `fn`.
|
|
16
|
+
* @param {() => Promise<T>} fn - The async function that fetches data from an API to wrap.
|
|
17
|
+
* @returns {Promise<T>} - Resolves with `fn`'s result or rejects with
|
|
18
|
+
* 'Promise rejected' if `fn` fails.
|
|
19
|
+
* @throws {Error} - Throws 'Promise rejected' on failure.
|
|
20
|
+
*/
|
|
21
|
+
export function fetchWrapper(fn) {
|
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
try {
|
|
24
|
+
return yield fn();
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
console.error('Promise rejected');
|
|
28
|
+
throw new Error('Promise rejected');
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2gtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmZXRjaC11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxVQUFnQixZQUFZLENBQUksRUFBb0I7O1FBQ3hELElBQUk7WUFDRixPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7U0FDbkI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0NBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFdyYXBzIGFuIGFzeW5jIGZ1bmN0aW9uIGBmbmAgdGhhdCBmZXRjaGVzIGRhdGEgZnJvbSBhbiBBUEkgYW5kIHJldHVybnMgYSBQcm9taXNlLiBcbiAqIElmIGBmbmAgc3VjY2VlZHMsIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuIElmIGl0IGZhaWxzLCBhIGN1c3RvbSBlcnJvciB3aXRoIHRoZSBtZXNzYWdlIFxuICogJ1Byb21pc2UgcmVqZWN0ZWQnIGlzIHRocm93bi5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBQcm9taXNlIHJldHVybmVkIGJ5IGBmbmAuXG4gKiBAcGFyYW0geygpID0+IFByb21pc2U8VD59IGZuIC0gVGhlIGFzeW5jIGZ1bmN0aW9uIHRoYXQgZmV0Y2hlcyBkYXRhIGZyb20gYW4gQVBJIHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxUPn0gLSBSZXNvbHZlcyB3aXRoIGBmbmAncyByZXN1bHQgb3IgcmVqZWN0cyB3aXRoIFxuICogICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb21pc2UgcmVqZWN0ZWQnIGlmIGBmbmAgZmFpbHMuXG4gKiBAdGhyb3dzIHtFcnJvcn0gLSBUaHJvd3MgJ1Byb21pc2UgcmVqZWN0ZWQnIG9uIGZhaWx1cmUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZXI8VD4oZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdQcm9taXNlIHJlamVjdGVkJyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcm9taXNlIHJlamVjdGVkJyk7XG4gIH1cbn0iXX0=
|
|
@@ -7,16 +7,24 @@ export declare class ActiveFiles {
|
|
|
7
7
|
readonly path: string;
|
|
8
8
|
readonly userStorageName: string;
|
|
9
9
|
/**file extension to filter files in file open dialog*/ readonly ext: string;
|
|
10
|
+
protected readonly options?: {
|
|
11
|
+
onValueChanged: (value: string[]) => void;
|
|
12
|
+
} | undefined;
|
|
10
13
|
private settings?;
|
|
11
14
|
protected constructor(path: string, userStorageName: string,
|
|
12
|
-
/**file extension to filter files in file open dialog*/ ext?: string
|
|
15
|
+
/**file extension to filter files in file open dialog*/ ext?: string, options?: {
|
|
16
|
+
onValueChanged: (value: string[]) => void;
|
|
17
|
+
} | undefined);
|
|
13
18
|
getUserSettings(): Promise<FilesSettings>;
|
|
14
19
|
setUserSettings(value: FilesSettings): void;
|
|
15
20
|
protected getAllAvailable(): Promise<string[]>;
|
|
16
21
|
getActive(): Promise<string[]>;
|
|
22
|
+
setActive(value: string[]): void;
|
|
17
23
|
protected createInput(available: string, isChecked: boolean): DG.InputBase<boolean>;
|
|
18
24
|
protected getInputs(): Promise<DG.InputBase<boolean>[]>;
|
|
19
25
|
getForm(): Promise<HTMLDivElement>;
|
|
26
|
+
protected inputs: Map<string, DG.InputBase<boolean>> | null;
|
|
27
|
+
protected fireOnValueChanged(): void;
|
|
20
28
|
private updateSelectionStatus;
|
|
21
29
|
private availableRemove;
|
|
22
30
|
private getNewAvailable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"active-files-base.d.ts","sourceRoot":"","sources":["active-files-base.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"active-files-base.d.ts","sourceRoot":"","sources":["active-files-base.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAItC,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAA;AAED,qBAAa,WAAW;aAIJ,IAAI,EAAE,MAAM;aACZ,eAAe,EAAE,MAAM;IACvC,uDAAuD,UAAiB,GAAG,EAAE,MAAM;IACnF,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;gCAA4B,MAAM,EAAE,KAAK,IAAI;;IAN1E,OAAO,CAAC,QAAQ,CAAC,CAAgB;IAEjC,SAAS,aACS,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM;IACvC,uDAAuD,CAAiB,GAAG,GAAE,MAAe,EACzE,OAAO,CAAC;gCAA4B,MAAM,EAAE,KAAK,IAAI;iBAAE;IAMtE,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC;IAa/C,eAAe,CAAC,KAAK,EAAE,aAAa;cAKpB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IASvC,SAAS,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAQpC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAOvC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC;cAiBnE,SAAS,IAAI,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IAgBhD,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAoB/C,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,CAAQ;IAEnE,SAAS,CAAC,kBAAkB,IAAI,IAAI;YAKtB,qBAAqB;YAiBrB,eAAe;YAYf,eAAe;CAa9B"}
|
|
@@ -10,12 +10,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
import * as grok from 'datagrok-api/grok';
|
|
11
11
|
import * as ui from 'datagrok-api/ui';
|
|
12
12
|
import * as DG from 'datagrok-api/dg';
|
|
13
|
+
import wu from 'wu';
|
|
13
14
|
export class ActiveFiles {
|
|
14
15
|
constructor(path, userStorageName,
|
|
15
|
-
/**file extension to filter files in file open dialog*/ ext = '.csv') {
|
|
16
|
+
/**file extension to filter files in file open dialog*/ ext = '.csv', options) {
|
|
16
17
|
this.path = path;
|
|
17
18
|
this.userStorageName = userStorageName;
|
|
18
19
|
this.ext = ext;
|
|
20
|
+
this.options = options;
|
|
21
|
+
this.inputs = null;
|
|
19
22
|
if ('/' !== this.path[this.path.length - 1])
|
|
20
23
|
this.path += '/';
|
|
21
24
|
if ('.' !== this.ext[0])
|
|
@@ -53,6 +56,12 @@ export class ActiveFiles {
|
|
|
53
56
|
return (yield this.getAllAvailable()).filter((available) => !settings.excluded.includes(available));
|
|
54
57
|
});
|
|
55
58
|
}
|
|
59
|
+
setActive(value) {
|
|
60
|
+
const valueSet = new Set(value);
|
|
61
|
+
for (const [file, input] of this.inputs.entries()) {
|
|
62
|
+
input.value = valueSet.has(file);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
56
65
|
createInput(available, isChecked) {
|
|
57
66
|
const cb = ui.input.bool(available, {
|
|
58
67
|
value: isChecked,
|
|
@@ -69,13 +78,16 @@ export class ActiveFiles {
|
|
|
69
78
|
}
|
|
70
79
|
getInputs() {
|
|
71
80
|
return __awaiter(this, void 0, void 0, function* () {
|
|
81
|
+
this.inputs = new Map();
|
|
72
82
|
const all = yield this.getAllAvailable();
|
|
73
83
|
const active = yield this.getActive();
|
|
74
84
|
const inputs = new Array(all.length);
|
|
75
85
|
for (let i = 0; i < all.length; i++) {
|
|
76
86
|
const isChecked = active.includes(all[i]);
|
|
77
87
|
inputs[i] = this.createInput(all[i], isChecked);
|
|
88
|
+
this.inputs.set(all[i], inputs[i]);
|
|
78
89
|
}
|
|
90
|
+
this.fireOnValueChanged();
|
|
79
91
|
return inputs;
|
|
80
92
|
});
|
|
81
93
|
}
|
|
@@ -88,31 +100,42 @@ export class ActiveFiles {
|
|
|
88
100
|
ui.button('ADD', () => __awaiter(this, void 0, void 0, function* () {
|
|
89
101
|
let newAvailable = '';
|
|
90
102
|
newAvailable = yield this.getNewAvailable();
|
|
91
|
-
if (newAvailable !== '')
|
|
92
|
-
|
|
103
|
+
if (newAvailable !== '') {
|
|
104
|
+
const newInput = this.createInput(newAvailable, true);
|
|
105
|
+
inputsDiv.append(newInput.root);
|
|
106
|
+
this.inputs.set(newAvailable, newInput);
|
|
107
|
+
this.fireOnValueChanged();
|
|
108
|
+
}
|
|
93
109
|
}))
|
|
94
110
|
]);
|
|
95
111
|
return formDiv;
|
|
96
112
|
});
|
|
97
113
|
}
|
|
98
|
-
|
|
114
|
+
fireOnValueChanged() {
|
|
115
|
+
var _a;
|
|
116
|
+
(_a = this.options) === null || _a === void 0 ? void 0 : _a.onValueChanged(wu(this.inputs.entries()).filter(([_, i]) => i.value).map(([a, _]) => a).toArray());
|
|
117
|
+
}
|
|
118
|
+
updateSelectionStatus(available, newIsChecked) {
|
|
99
119
|
return __awaiter(this, void 0, void 0, function* () {
|
|
100
120
|
const settings = yield this.getUserSettings();
|
|
101
|
-
const
|
|
102
|
-
if (
|
|
121
|
+
const oldIsChecked = !settings.excluded.includes(available);
|
|
122
|
+
if (oldIsChecked === newIsChecked)
|
|
103
123
|
return;
|
|
104
|
-
if (
|
|
124
|
+
if (newIsChecked) {
|
|
105
125
|
const index = settings.excluded.indexOf(available);
|
|
106
126
|
if (index > -1)
|
|
107
127
|
settings.excluded.splice(index, 1);
|
|
108
128
|
}
|
|
109
129
|
else
|
|
110
130
|
settings.excluded.push(available);
|
|
131
|
+
this.fireOnValueChanged();
|
|
111
132
|
this.setUserSettings(settings);
|
|
112
133
|
});
|
|
113
134
|
}
|
|
114
135
|
availableRemove(available) {
|
|
115
136
|
return __awaiter(this, void 0, void 0, function* () {
|
|
137
|
+
this.inputs.delete(available);
|
|
138
|
+
this.fireOnValueChanged();
|
|
116
139
|
const settings = yield this.getUserSettings();
|
|
117
140
|
const index = settings.excluded.indexOf(available);
|
|
118
141
|
if (index > -1)
|
|
@@ -138,4 +161,4 @@ export class ActiveFiles {
|
|
|
138
161
|
});
|
|
139
162
|
}
|
|
140
163
|
}
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWZpbGVzLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhY3RpdmUtZmlsZXMtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU90QyxNQUFNLE9BQU8sV0FBVztJQUd0QixZQUNrQixJQUFZLEVBQ1osZUFBdUI7SUFDdkMsdURBQXVELENBQWdCLE1BQWMsTUFBTTtRQUYzRSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osb0JBQWUsR0FBZixlQUFlLENBQVE7UUFDZ0MsUUFBRyxHQUFILEdBQUcsQ0FBaUI7UUFFM0YsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQztRQUM5RCxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDckQsQ0FBQztJQUVLLGVBQWU7O1lBQ25CLElBQUksSUFBSSxDQUFDLFFBQVE7Z0JBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBRXZCLE1BQU0sTUFBTSxHQUF1QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2hHLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUMsQ0FBQztZQUV2RSxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakUsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRWpFLE9BQU8sSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDN0IsQ0FBQztLQUFBO0lBRUQsZUFBZSxDQUFDLEtBQW9CO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRWUsZUFBZTs7WUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25ELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDbEMsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztLQUFBO0lBRVksU0FBUzs7WUFDcEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDOUMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO2dCQUM5QixPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFFM0IsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDdEcsQ0FBQztLQUFBO0lBRVMsV0FBVyxDQUFDLFNBQWlCLEVBQUUsU0FBa0I7UUFDekQsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xDLEtBQUssRUFBRSxTQUFTO1lBQ2hCLGNBQWMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7U0FDeEUsQ0FBMEIsQ0FBQztRQUM1QixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixTQUFTLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDdkcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU87WUFDMUMsQ0FBQyxDQUFDLENBQUM7WUFFSCxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsQ0FBQyxFQUFFLFVBQVUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTNCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVlLFNBQVM7O1lBQ3ZCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sTUFBTSxHQUE0QixJQUFJLEtBQUssQ0FBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXJGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNuQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDakQ7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO0tBQUE7SUFFWSxPQUFPOztZQUNsQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUU7Z0JBQ3ZCLFNBQVM7Z0JBQ1QsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBUyxFQUFFO29CQUMxQixJQUFJLFlBQVksR0FBVyxFQUFFLENBQUM7b0JBQzlCLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxZQUFZLEtBQUssRUFBRTt3QkFDckIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEUsQ0FBQyxDQUFBLENBQUM7YUFDSCxDQUFDLENBQUM7WUFFSCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO0tBQUE7SUFFYSxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLFlBQXFCOztZQUMxRSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5QyxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVELElBQUksWUFBWSxLQUFLLFlBQVk7Z0JBQy9CLE9BQU87WUFFVCxJQUFJLFlBQVksRUFBRTtnQkFDaEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ25ELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztvQkFDWixRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEM7O2dCQUNDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXBDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsQ0FBQztLQUFBO0lBRWEsZUFBZSxDQUFDLFNBQWlCOztZQUM3QyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM5QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ1osUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLFNBQVMsdUJBQXVCLENBQUMsQ0FBQztRQUM1RCxDQUFDO0tBQUE7SUFFYSxlQUFlOztZQUMzQixPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUM3QyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztvQkFDaEIsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHO29CQUNoQixJQUFJLEVBQUUsQ0FBTyxZQUFZLEVBQUUsRUFBRTt3QkFDM0IsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQzt3QkFDL0IsTUFBTSxNQUFNLEdBQUcsTUFBTSxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2hELE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBUSxDQUFDLENBQUM7d0JBQ2pHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDaEIsQ0FBQyxDQUFBO2lCQUNGLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztLQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuXG5leHBvcnQgdHlwZSBGaWxlc1NldHRpbmdzID0ge1xuICBleGNsdWRlZDogc3RyaW5nW10sXG4gIGV4cGxpY2l0OiBzdHJpbmdbXVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aXZlRmlsZXMge1xuICBwcml2YXRlIHNldHRpbmdzPzogRmlsZXNTZXR0aW5ncztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgdXNlclN0b3JhZ2VOYW1lOiBzdHJpbmcsXG4gICAgLyoqZmlsZSBleHRlbnNpb24gdG8gZmlsdGVyIGZpbGVzIGluIGZpbGUgb3BlbiBkaWFsb2cqL3B1YmxpYyByZWFkb25seSBleHQ6IHN0cmluZyA9ICcuY3N2J1xuICApIHtcbiAgICBpZiAoJy8nICE9PSB0aGlzLnBhdGhbdGhpcy5wYXRoLmxlbmd0aCAtIDFdKSB0aGlzLnBhdGggKz0gJy8nO1xuICAgIGlmICgnLicgIT09IHRoaXMuZXh0WzBdKSB0aGlzLmV4dCA9ICcuJyArIHRoaXMuZXh0O1xuICB9XG5cbiAgYXN5bmMgZ2V0VXNlclNldHRpbmdzKCk6IFByb21pc2U8RmlsZXNTZXR0aW5ncz4ge1xuICAgIGlmICh0aGlzLnNldHRpbmdzKVxuICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3M7XG5cbiAgICBjb25zdCByZXNTdHI6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdyb2sudXNlclNldHRpbmdzLmdldFZhbHVlKHRoaXMudXNlclN0b3JhZ2VOYW1lLCAnU2V0dGluZ3MnKTtcbiAgICBjb25zdCByZXMgPSByZXNTdHIgPyBKU09OLnBhcnNlKHJlc1N0cikgOiB7ZXhjbHVkZWQ6IFtdLCBleHBsaWNpdDogW119O1xuXG4gICAgcmVzLmV4cGxpY2l0ID0gcmVzLmV4cGxpY2l0IGluc3RhbmNlb2YgQXJyYXkgPyByZXMuZXhwbGljaXQgOiBbXTtcbiAgICByZXMuZXhjbHVkZWQgPSByZXMuZXhjbHVkZWQgaW5zdGFuY2VvZiBBcnJheSA/IHJlcy5leGNsdWRlZCA6IFtdO1xuXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MgPSByZXM7XG4gIH1cblxuICBzZXRVc2VyU2V0dGluZ3ModmFsdWU6IEZpbGVzU2V0dGluZ3MpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdmFsdWU7XG4gICAgZ3Jvay51c2VyU2V0dGluZ3MuYWRkKHRoaXMudXNlclN0b3JhZ2VOYW1lLCAnU2V0dGluZ3MnLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFsbEF2YWlsYWJsZSgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgbGlzdCA9IGF3YWl0IGdyb2suZGFwaS5maWxlcy5saXN0KHRoaXMucGF0aCk7XG4gICAgY29uc3QgcGF0aHMgPSBsaXN0Lm1hcCgoZmlsZUluZm8pID0+IHtcbiAgICAgIHJldHVybiBmaWxlSW5mby5mdWxsUGF0aC5yZXBsYWNlKGAke3RoaXMucGF0aH1gLCAnJyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGF0aHM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWN0aXZlKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IGF3YWl0IHRoaXMuZ2V0VXNlclNldHRpbmdzKCk7XG4gICAgaWYgKHNldHRpbmdzLmV4cGxpY2l0Lmxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gc2V0dGluZ3MuZXhwbGljaXQ7XG5cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2V0QWxsQXZhaWxhYmxlKCkpLmZpbHRlcigoYXZhaWxhYmxlKSA9PiAhc2V0dGluZ3MuZXhjbHVkZWQuaW5jbHVkZXMoYXZhaWxhYmxlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlSW5wdXQoYXZhaWxhYmxlOiBzdHJpbmcsIGlzQ2hlY2tlZDogYm9vbGVhbik6IERHLklucHV0QmFzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY2IgPSB1aS5pbnB1dC5ib29sKGF2YWlsYWJsZSwge1xuICAgICAgdmFsdWU6IGlzQ2hlY2tlZCxcbiAgICAgIG9uVmFsdWVDaGFuZ2VkOiAodmFsdWUpID0+IHRoaXMudXBkYXRlU2VsZWN0aW9uU3RhdHVzKGF2YWlsYWJsZSwgdmFsdWUpXG4gICAgfSkgYXMgREcuSW5wdXRCYXNlPGJvb2xlYW4+O1xuICAgIGNiLmFkZE9wdGlvbnModWkuYnV0dG9uKHVpLmljb25GQSgndHJhc2gnKSwgKCkgPT4ge1xuICAgICAgY29uc3QgcmVtRGlhbG9nID0gdWkuZGlhbG9nKHt0aXRsZTogJ1dhcm5pbmcnfSkuYWRkKHVpLmRpdlRleHQoYERlbGV0ZSBmaWxlICcke2F2YWlsYWJsZX0nP2ApKS5vbk9LKCgpID0+IHtcbiAgICAgICAgY2Iucm9vdC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVSZW1vdmUoYXZhaWxhYmxlKTsgLy9hc3luY1xuICAgICAgfSk7XG5cbiAgICAgIHJlbURpYWxvZy5zaG93KCk7XG4gICAgfSwgYERlbGV0ZSAke2F2YWlsYWJsZX1gKSk7XG5cbiAgICByZXR1cm4gY2I7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0SW5wdXRzKCk6IFByb21pc2U8REcuSW5wdXRCYXNlPGJvb2xlYW4+W10+IHtcbiAgICBjb25zdCBhbGwgPSBhd2FpdCB0aGlzLmdldEFsbEF2YWlsYWJsZSgpO1xuICAgIGNvbnN0IGFjdGl2ZSA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlKCk7XG4gICAgY29uc3QgaW5wdXRzOiBERy5JbnB1dEJhc2U8Ym9vbGVhbj5bXSA9IG5ldyBBcnJheTxERy5JbnB1dEJhc2U8Ym9vbGVhbj4+KGFsbC5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGFjdGl2ZS5pbmNsdWRlcyhhbGxbaV0pO1xuICAgICAgaW5wdXRzW2ldID0gdGhpcy5jcmVhdGVJbnB1dChhbGxbaV0sIGlzQ2hlY2tlZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlucHV0cztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRGb3JtKCk6IFByb21pc2U8SFRNTERpdkVsZW1lbnQ+IHtcbiAgICBjb25zdCBpbnB1dHMgPSBhd2FpdCB0aGlzLmdldElucHV0cygpO1xuICAgIGNvbnN0IGlucHV0c0RpdiA9IHVpLmRpdlYoaW5wdXRzKTtcbiAgICBjb25zdCBmb3JtRGl2ID0gdWkuZGl2ViggW1xuICAgICAgaW5wdXRzRGl2LFxuICAgICAgdWkuYnV0dG9uKCdBREQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGxldCBuZXdBdmFpbGFibGU6IHN0cmluZyA9ICcnO1xuICAgICAgICBuZXdBdmFpbGFibGUgPSBhd2FpdCB0aGlzLmdldE5ld0F2YWlsYWJsZSgpO1xuICAgICAgICBpZiAobmV3QXZhaWxhYmxlICE9PSAnJylcbiAgICAgICAgICBpbnB1dHNEaXYuYXBwZW5kKHRoaXMuY3JlYXRlSW5wdXQobmV3QXZhaWxhYmxlLCB0cnVlKS5yb290KTtcbiAgICAgIH0pXG4gICAgXSk7XG5cbiAgICByZXR1cm4gZm9ybURpdjtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU2VsZWN0aW9uU3RhdHVzKGF2YWlsYWJsZTogc3RyaW5nLCBuZXdpc0NoZWNrZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IGF3YWl0IHRoaXMuZ2V0VXNlclNldHRpbmdzKCk7XG4gICAgY29uc3Qgb2xkaXNDaGVja2VkID0gIXNldHRpbmdzLmV4Y2x1ZGVkLmluY2x1ZGVzKGF2YWlsYWJsZSk7XG4gICAgaWYgKG9sZGlzQ2hlY2tlZCA9PT0gbmV3aXNDaGVja2VkKVxuICAgICAgcmV0dXJuO1xuXG4gICAgaWYgKG5ld2lzQ2hlY2tlZCkge1xuICAgICAgY29uc3QgaW5kZXggPSBzZXR0aW5ncy5leGNsdWRlZC5pbmRleE9mKGF2YWlsYWJsZSk7XG4gICAgICBpZiAoaW5kZXggPiAtMSlcbiAgICAgICAgc2V0dGluZ3MuZXhjbHVkZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9IGVsc2VcbiAgICAgIHNldHRpbmdzLmV4Y2x1ZGVkLnB1c2goYXZhaWxhYmxlKTtcblxuICAgIHRoaXMuc2V0VXNlclNldHRpbmdzKHNldHRpbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXZhaWxhYmxlUmVtb3ZlKGF2YWlsYWJsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLmdldFVzZXJTZXR0aW5ncygpO1xuICAgIGNvbnN0IGluZGV4ID0gc2V0dGluZ3MuZXhjbHVkZWQuaW5kZXhPZihhdmFpbGFibGUpO1xuICAgIGlmIChpbmRleCA+IC0xKVxuICAgICAgc2V0dGluZ3MuZXhjbHVkZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnNldFVzZXJTZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgYXdhaXQgZ3Jvay5kYXBpLmZpbGVzLmRlbGV0ZSh0aGlzLnBhdGggKyBhdmFpbGFibGUpO1xuICAgIGdyb2suc2hlbGwuaW5mbyhgRmlsZSAke2F2YWlsYWJsZX0gc3VjY2Vzc2Z1bGx5IGRlbGV0ZWRgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TmV3QXZhaWxhYmxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgREcuVXRpbHMub3BlbkZpbGUoe1xuICAgICAgICBhY2NlcHQ6IHRoaXMuZXh0LFxuICAgICAgICBvcGVuOiBhc3luYyAoc2VsZWN0ZWRGaWxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHNlbGVjdGVkRmlsZS5uYW1lO1xuICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHNlbGVjdGVkRmlsZS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgIGF3YWl0IGdyb2suZGFwaS5maWxlcy53cml0ZSh0aGlzLnBhdGggKyBgJHtzZWxlY3RlZEZpbGUubmFtZX1gLCAobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSkgYXMgYW55KTtcbiAgICAgICAgICByZXNvbHZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWZpbGVzLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhY3RpdmUtZmlsZXMtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEMsT0FBTyxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV0QyxPQUFPLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFPcEIsTUFBTSxPQUFPLFdBQVc7SUFHdEIsWUFDa0IsSUFBWSxFQUNaLGVBQXVCO0lBQ3ZDLHVEQUF1RCxDQUFpQixNQUFjLE1BQU0sRUFDekUsT0FBdUQ7UUFIMUQsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLG9CQUFlLEdBQWYsZUFBZSxDQUFRO1FBQ2lDLFFBQUcsR0FBSCxHQUFHLENBQWlCO1FBQ3pFLFlBQU8sR0FBUCxPQUFPLENBQWdEO1FBcUdsRSxXQUFNLEdBQThDLElBQUksQ0FBQztRQW5HakUsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQztRQUM5RCxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDckQsQ0FBQztJQUVLLGVBQWU7O1lBQ25CLElBQUksSUFBSSxDQUFDLFFBQVE7Z0JBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBRXZCLE1BQU0sTUFBTSxHQUF1QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2hHLE1BQU0sR0FBRyxH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QztZQUMvQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsU0FBUyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzVELENBQUM7S0FBQTtJQUVhLGVBQWU7O1lBQzNCLE9BQU8sSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzdDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO29CQUNoQixNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUc7b0JBQ2hCLElBQUksRUFBRSxDQUFPLFlBQVksRUFBRSxFQUFFO3dCQUMzQixNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO3dCQUMvQixNQUFNLE1BQU0sR0FBRyxNQUFNLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDaEQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFRLENBQUMsQ0FBQzt3QkFDakcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNoQixDQUFDLENBQUE7aUJBQ0YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0tBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5cbmltcG9ydCB3dSBmcm9tICd3dSc7XG5cbmV4cG9ydCB0eXBlIEZpbGVzU2V0dGluZ3MgPSB7XG4gIGV4Y2x1ZGVkOiBzdHJpbmdbXSxcbiAgZXhwbGljaXQ6IHN0cmluZ1tdXG59XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmVGaWxlcyB7XG4gIHByaXZhdGUgc2V0dGluZ3M/OiBGaWxlc1NldHRpbmdzO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGF0aDogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSB1c2VyU3RvcmFnZU5hbWU6IHN0cmluZyxcbiAgICAvKipmaWxlIGV4dGVuc2lvbiB0byBmaWx0ZXIgZmlsZXMgaW4gZmlsZSBvcGVuIGRpYWxvZyovIHB1YmxpYyByZWFkb25seSBleHQ6IHN0cmluZyA9ICcuY3N2JyxcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3B0aW9ucz86IHsgb25WYWx1ZUNoYW5nZWQ6ICh2YWx1ZTogc3RyaW5nW10pID0+IHZvaWQgfVxuICApIHtcbiAgICBpZiAoJy8nICE9PSB0aGlzLnBhdGhbdGhpcy5wYXRoLmxlbmd0aCAtIDFdKSB0aGlzLnBhdGggKz0gJy8nO1xuICAgIGlmICgnLicgIT09IHRoaXMuZXh0WzBdKSB0aGlzLmV4dCA9ICcuJyArIHRoaXMuZXh0O1xuICB9XG5cbiAgYXN5bmMgZ2V0VXNlclNldHRpbmdzKCk6IFByb21pc2U8RmlsZXNTZXR0aW5ncz4ge1xuICAgIGlmICh0aGlzLnNldHRpbmdzKVxuICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3M7XG5cbiAgICBjb25zdCByZXNTdHI6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGdyb2sudXNlclNldHRpbmdzLmdldFZhbHVlKHRoaXMudXNlclN0b3JhZ2VOYW1lLCAnU2V0dGluZ3MnKTtcbiAgICBjb25zdCByZXMgPSByZXNTdHIgPyBKU09OLnBhcnNlKHJlc1N0cikgOiB7ZXhjbHVkZWQ6IFtdLCBleHBsaWNpdDogW119O1xuXG4gICAgcmVzLmV4cGxpY2l0ID0gcmVzLmV4cGxpY2l0IGluc3RhbmNlb2YgQXJyYXkgPyByZXMuZXhwbGljaXQgOiBbXTtcbiAgICByZXMuZXhjbHVkZWQgPSByZXMuZXhjbHVkZWQgaW5zdGFuY2VvZiBBcnJheSA/IHJlcy5leGNsdWRlZCA6IFtdO1xuXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MgPSByZXM7XG4gIH1cblxuICBzZXRVc2VyU2V0dGluZ3ModmFsdWU6IEZpbGVzU2V0dGluZ3MpIHtcbiAgICB0aGlzLnNldHRpbmdzID0gdmFsdWU7XG4gICAgZ3Jvay51c2VyU2V0dGluZ3MuYWRkKHRoaXMudXNlclN0b3JhZ2VOYW1lLCAnU2V0dGluZ3MnLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGdldEFsbEF2YWlsYWJsZSgpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3QgbGlzdCA9IGF3YWl0IGdyb2suZGFwaS5maWxlcy5saXN0KHRoaXMucGF0aCk7XG4gICAgY29uc3QgcGF0aHMgPSBsaXN0Lm1hcCgoZmlsZUluZm8pID0+IHtcbiAgICAgIHJldHVybiBmaWxlSW5mby5mdWxsUGF0aC5yZXBsYWNlKGAke3RoaXMucGF0aH1gLCAnJyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGF0aHM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QWN0aXZlKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IGF3YWl0IHRoaXMuZ2V0VXNlclNldHRpbmdzKCk7XG4gICAgaWYgKHNldHRpbmdzLmV4cGxpY2l0Lmxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gc2V0dGluZ3MuZXhwbGljaXQ7XG5cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuZ2V0QWxsQXZhaWxhYmxlKCkpLmZpbHRlcigoYXZhaWxhYmxlKSA9PiAhc2V0dGluZ3MuZXhjbHVkZWQuaW5jbHVkZXMoYXZhaWxhYmxlKSk7XG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aXZlKHZhbHVlOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlU2V0ID0gbmV3IFNldCh2YWx1ZSk7XG4gICAgZm9yIChjb25zdCBbZmlsZSwgaW5wdXRdIG9mIHRoaXMuaW5wdXRzIS5lbnRyaWVzKCkpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gdmFsdWVTZXQuaGFzKGZpbGUpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVJbnB1dChhdmFpbGFibGU6IHN0cmluZywgaXNDaGVja2VkOiBib29sZWFuKTogREcuSW5wdXRCYXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjYiA9IHVpLmlucHV0LmJvb2woYXZhaWxhYmxlLCB7XG4gICAgICB2YWx1ZTogaXNDaGVja2VkLFxuICAgICAgb25WYWx1ZUNoYW5nZWQ6ICh2YWx1ZSkgPT4gdGhpcy51cGRhdGVTZWxlY3Rpb25TdGF0dXMoYXZhaWxhYmxlLCB2YWx1ZSlcbiAgICB9KSBhcyBERy5JbnB1dEJhc2U8Ym9vbGVhbj47XG4gICAgY2IuYWRkT3B0aW9ucyh1aS5idXR0b24odWkuaWNvbkZBKCd0cmFzaCcpLCAoKSA9PiB7XG4gICAgICBjb25zdCByZW1EaWFsb2cgPSB1aS5kaWFsb2coe3RpdGxlOiAnV2FybmluZyd9KS5hZGQodWkuZGl2VGV4dChgRGVsZXRlIGZpbGUgJyR7YXZhaWxhYmxlfSc/YCkpLm9uT0soKCkgPT4ge1xuICAgICAgICBjYi5yb290LnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmF2YWlsYWJsZVJlbW92ZShhdmFpbGFibGUpOyAvL2FzeW5jXG4gICAgICB9KTtcblxuICAgICAgcmVtRGlhbG9nLnNob3coKTtcbiAgICB9LCBgRGVsZXRlICR7YXZhaWxhYmxlfWApKTtcblxuICAgIHJldHVybiBjYjtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBnZXRJbnB1dHMoKTogUHJvbWlzZTxERy5JbnB1dEJhc2U8Ym9vbGVhbj5bXT4ge1xuICAgIHRoaXMuaW5wdXRzID0gbmV3IE1hcDxzdHJpbmcsIERHLklucHV0QmFzZTxib29sZWFuPj4oKTtcbiAgICBjb25zdCBhbGwgPSBhd2FpdCB0aGlzLmdldEFsbEF2YWlsYWJsZSgpO1xuICAgIGNvbnN0IGFjdGl2ZSA9IGF3YWl0IHRoaXMuZ2V0QWN0aXZlKCk7XG4gICAgY29uc3QgaW5wdXRzOiBERy5JbnB1dEJhc2U8Ym9vbGVhbj5bXSA9IG5ldyBBcnJheTxERy5JbnB1dEJhc2U8Ym9vbGVhbj4+KGFsbC5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGwubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGFjdGl2ZS5pbmNsdWRlcyhhbGxbaV0pO1xuICAgICAgaW5wdXRzW2ldID0gdGhpcy5jcmVhdGVJbnB1dChhbGxbaV0sIGlzQ2hlY2tlZCk7XG4gICAgICB0aGlzLmlucHV0cy5zZXQoYWxsW2ldLCBpbnB1dHNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuZmlyZU9uVmFsdWVDaGFuZ2VkKCk7XG4gICAgcmV0dXJuIGlucHV0cztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRGb3JtKCk6IFByb21pc2U8SFRNTERpdkVsZW1lbnQ+IHtcbiAgICBjb25zdCBpbnB1dHMgPSBhd2FpdCB0aGlzLmdldElucHV0cygpO1xuICAgIGNvbnN0IGlucHV0c0RpdiA9IHVpLmRpdlYoaW5wdXRzKTtcbiAgICBjb25zdCBmb3JtRGl2ID0gdWkuZGl2VihbXG4gICAgICBpbnB1dHNEaXYsXG4gICAgICB1aS5idXR0b24oJ0FERCcsIGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IG5ld0F2YWlsYWJsZTogc3RyaW5nID0gJyc7XG4gICAgICAgIG5ld0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMuZ2V0TmV3QXZhaWxhYmxlKCk7XG4gICAgICAgIGlmIChuZXdBdmFpbGFibGUgIT09ICcnKSB7XG4gICAgICAgICAgY29uc3QgbmV3SW5wdXQgPSB0aGlzLmNyZWF0ZUlucHV0KG5ld0F2YWlsYWJsZSwgdHJ1ZSk7XG4gICAgICAgICAgaW5wdXRzRGl2LmFwcGVuZChuZXdJbnB1dC5yb290KTtcbiAgICAgICAgICB0aGlzLmlucHV0cyEuc2V0KG5ld0F2YWlsYWJsZSwgbmV3SW5wdXQpO1xuICAgICAgICAgIHRoaXMuZmlyZU9uVmFsdWVDaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgXSk7XG5cbiAgICByZXR1cm4gZm9ybURpdjtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnB1dHM6IE1hcDxzdHJpbmcsIERHLklucHV0QmFzZTxib29sZWFuPj4gfCBudWxsID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgZmlyZU9uVmFsdWVDaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRoaXMub3B0aW9ucz8ub25WYWx1ZUNoYW5nZWQoXG4gICAgICB3dSh0aGlzLmlucHV0cyEuZW50cmllcygpKS5maWx0ZXIoKFtfLCBpXSkgPT4gaS52YWx1ZSkubWFwKChbYSwgX10pID0+IGEpLnRvQXJyYXkoKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVNlbGVjdGlvblN0YXR1cyhhdmFpbGFibGU6IHN0cmluZywgbmV3SXNDaGVja2VkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLmdldFVzZXJTZXR0aW5ncygpO1xuICAgIGNvbnN0IG9sZElzQ2hlY2tlZCA9ICFzZXR0aW5ncy5leGNsdWRlZC5pbmNsdWRlcyhhdmFpbGFibGUpO1xuICAgIGlmIChvbGRJc0NoZWNrZWQgPT09IG5ld0lzQ2hlY2tlZClcbiAgICAgIHJldHVybjtcblxuICAgIGlmIChuZXdJc0NoZWNrZWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gc2V0dGluZ3MuZXhjbHVkZWQuaW5kZXhPZihhdmFpbGFibGUpO1xuICAgICAgaWYgKGluZGV4ID4gLTEpXG4gICAgICAgIHNldHRpbmdzLmV4Y2x1ZGVkLnNwbGljZShpbmRleCwgMSk7XG4gICAgfSBlbHNlXG4gICAgICBzZXR0aW5ncy5leGNsdWRlZC5wdXNoKGF2YWlsYWJsZSk7XG4gICAgdGhpcy5maXJlT25WYWx1ZUNoYW5nZWQoKTtcblxuICAgIHRoaXMuc2V0VXNlclNldHRpbmdzKHNldHRpbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYXZhaWxhYmxlUmVtb3ZlKGF2YWlsYWJsZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pbnB1dHMhLmRlbGV0ZShhdmFpbGFibGUpO1xuICAgIHRoaXMuZmlyZU9uVmFsdWVDaGFuZ2VkKCk7XG4gICAgY29uc3Qgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLmdldFVzZXJTZXR0aW5ncygpO1xuICAgIGNvbnN0IGluZGV4ID0gc2V0dGluZ3MuZXhjbHVkZWQuaW5kZXhPZihhdmFpbGFibGUpO1xuICAgIGlmIChpbmRleCA+IC0xKVxuICAgICAgc2V0dGluZ3MuZXhjbHVkZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnNldFVzZXJTZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgYXdhaXQgZ3Jvay5kYXBpLmZpbGVzLmRlbGV0ZSh0aGlzLnBhdGggKyBhdmFpbGFibGUpO1xuICAgIGdyb2suc2hlbGwuaW5mbyhgRmlsZSAke2F2YWlsYWJsZX0gc3VjY2Vzc2Z1bGx5IGRlbGV0ZWRgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TmV3QXZhaWxhYmxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgREcuVXRpbHMub3BlbkZpbGUoe1xuICAgICAgICBhY2NlcHQ6IHRoaXMuZXh0LFxuICAgICAgICBvcGVuOiBhc3luYyAoc2VsZWN0ZWRGaWxlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHNlbGVjdGVkRmlsZS5uYW1lO1xuICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHNlbGVjdGVkRmlsZS5hcnJheUJ1ZmZlcigpO1xuICAgICAgICAgIGF3YWl0IGdyb2suZGFwaS5maWxlcy53cml0ZSh0aGlzLnBhdGggKyBgJHtzZWxlY3RlZEZpbGUubmFtZX1gLCAobmV3IFVpbnQ4QXJyYXkoYnVmZmVyKSkgYXMgYW55KTtcbiAgICAgICAgICByZXNvbHZlKHBhdGgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|