agenticpool 1.0.4 → 1.0.6
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/README.md +70 -49
- package/dist/api/ApiClient.js +57 -10
- package/dist/commands/auth.js +21 -20
- package/dist/commands/networks.js +39 -30
- package/dist/config/ConfigManager.d.ts +1 -0
- package/dist/config/ConfigManager.js +34 -15
- package/dist/index.js +7 -2
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.js +34 -0
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ exports.registerNetworkCommands = registerNetworkCommands;
|
|
|
7
7
|
const AuthHelper_1 = require("../auth/AuthHelper");
|
|
8
8
|
const LimitsManager_1 = require("../limits/LimitsManager");
|
|
9
9
|
const datamodel_1 = require("../datamodel");
|
|
10
|
+
const logger_1 = require("../utils/logger");
|
|
10
11
|
const chalk_1 = __importDefault(require("chalk"));
|
|
11
12
|
function registerNetworkCommands(program) {
|
|
12
13
|
const networks = program.command('networks').description('Network management commands');
|
|
@@ -14,16 +15,18 @@ function registerNetworkCommands(program) {
|
|
|
14
15
|
.command('list')
|
|
15
16
|
.description('List public networks')
|
|
16
17
|
.option('-f, --filter <type>', 'Filter: popular, newest, unpopular')
|
|
18
|
+
.option('-l, --limit <number>', 'Limit results', '50')
|
|
17
19
|
.option('--format <format>', 'Output format: toon, json, text', 'toon')
|
|
18
20
|
.action(async (options) => {
|
|
19
21
|
try {
|
|
22
|
+
logger_1.logger.info('Fetching public networks...');
|
|
20
23
|
const client = await AuthHelper_1.AuthHelper.getApiClient();
|
|
21
24
|
const response = await client.get('/v1/networks', {
|
|
22
25
|
strategy: options.filter,
|
|
26
|
+
limit: options.limit,
|
|
23
27
|
short: 'true'
|
|
24
28
|
});
|
|
25
29
|
if (response.success && response.data) {
|
|
26
|
-
// Filter only requested fields: title (name), id, description, users
|
|
27
30
|
const filteredData = response.data.map(net => ({
|
|
28
31
|
id: net.id,
|
|
29
32
|
title: net.name,
|
|
@@ -37,7 +40,7 @@ function registerNetworkCommands(program) {
|
|
|
37
40
|
console.log((0, datamodel_1.encode)(filteredData));
|
|
38
41
|
}
|
|
39
42
|
else {
|
|
40
|
-
|
|
43
|
+
logger_1.logger.success(`\nFound ${filteredData.length} networks:\n`);
|
|
41
44
|
filteredData.forEach((network) => {
|
|
42
45
|
console.log(chalk_1.default.cyan.bold(network.title || network.id));
|
|
43
46
|
console.log(chalk_1.default.gray(' ID:'), network.id);
|
|
@@ -48,11 +51,11 @@ function registerNetworkCommands(program) {
|
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
53
|
else {
|
|
51
|
-
|
|
54
|
+
logger_1.logger.error('Error:', response.error?.message || 'Failed to list networks');
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
57
|
catch (error) {
|
|
55
|
-
|
|
58
|
+
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
56
59
|
}
|
|
57
60
|
});
|
|
58
61
|
networks
|
|
@@ -66,12 +69,13 @@ function registerNetworkCommands(program) {
|
|
|
66
69
|
.option('--format <format>', 'Output format: toon, json, text', 'toon')
|
|
67
70
|
.action(async (options) => {
|
|
68
71
|
try {
|
|
72
|
+
logger_1.logger.info('Creating new network community...');
|
|
69
73
|
const { client } = await AuthHelper_1.AuthHelper.getFirstAuthenticatedClient();
|
|
70
74
|
const mineRes = await client.get('/v1/networks/mine');
|
|
71
75
|
const currentCount = mineRes.success && mineRes.data ? mineRes.data.length : 0;
|
|
72
76
|
const limitCheck = await LimitsManager_1.limitsManager.canCreateNetwork(currentCount);
|
|
73
77
|
if (!limitCheck.allowed) {
|
|
74
|
-
|
|
78
|
+
logger_1.logger.error('Limit:', limitCheck.reason);
|
|
75
79
|
return;
|
|
76
80
|
}
|
|
77
81
|
const response = await client.post('/v1/networks', {
|
|
@@ -89,16 +93,16 @@ function registerNetworkCommands(program) {
|
|
|
89
93
|
console.log((0, datamodel_1.encode)(response.data));
|
|
90
94
|
}
|
|
91
95
|
else {
|
|
92
|
-
|
|
96
|
+
logger_1.logger.success('✓ Network created successfully!');
|
|
93
97
|
console.log(chalk_1.default.gray('ID:'), response.data.id);
|
|
94
98
|
}
|
|
95
99
|
}
|
|
96
100
|
else {
|
|
97
|
-
|
|
101
|
+
logger_1.logger.error('Error:', response.error?.message || 'Failed to create network');
|
|
98
102
|
}
|
|
99
103
|
}
|
|
100
104
|
catch (error) {
|
|
101
|
-
|
|
105
|
+
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
102
106
|
}
|
|
103
107
|
});
|
|
104
108
|
networks
|
|
@@ -108,6 +112,7 @@ function registerNetworkCommands(program) {
|
|
|
108
112
|
.option('--format <format>', 'Output format: toon, json, text', 'toon')
|
|
109
113
|
.action(async (networkId, options) => {
|
|
110
114
|
try {
|
|
115
|
+
logger_1.logger.info(`Fetching details for network: ${networkId}...`);
|
|
111
116
|
const client = await AuthHelper_1.AuthHelper.getApiClient();
|
|
112
117
|
const response = await client.get(`/v1/networks/${networkId}`);
|
|
113
118
|
if (response.success && response.data) {
|
|
@@ -132,11 +137,11 @@ function registerNetworkCommands(program) {
|
|
|
132
137
|
}
|
|
133
138
|
}
|
|
134
139
|
else {
|
|
135
|
-
|
|
140
|
+
logger_1.logger.error('Error:', response.error?.message || 'Network not found');
|
|
136
141
|
}
|
|
137
142
|
}
|
|
138
143
|
catch (error) {
|
|
139
|
-
|
|
144
|
+
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
140
145
|
}
|
|
141
146
|
});
|
|
142
147
|
networks
|
|
@@ -146,6 +151,7 @@ function registerNetworkCommands(program) {
|
|
|
146
151
|
.option('--format <format>', 'Output format: toon, json, text', 'toon')
|
|
147
152
|
.action(async (networkId, options) => {
|
|
148
153
|
try {
|
|
154
|
+
logger_1.logger.info(`Fetching profile questions for ${networkId}...`);
|
|
149
155
|
const client = await AuthHelper_1.AuthHelper.getApiClient();
|
|
150
156
|
const response = await client.get(`/v1/networks/${networkId}/profile/questions`);
|
|
151
157
|
if (response.success && response.data) {
|
|
@@ -156,7 +162,7 @@ function registerNetworkCommands(program) {
|
|
|
156
162
|
console.log((0, datamodel_1.encode)(response.data));
|
|
157
163
|
}
|
|
158
164
|
else {
|
|
159
|
-
|
|
165
|
+
logger_1.logger.success(`\nProfile Questions for ${networkId}:\n`);
|
|
160
166
|
response.data.forEach((q) => {
|
|
161
167
|
console.log(`${chalk_1.default.cyan(q.order + '.')} ${q.question}${q.required ? chalk_1.default.red(' *') : ''}`);
|
|
162
168
|
});
|
|
@@ -164,17 +170,16 @@ function registerNetworkCommands(program) {
|
|
|
164
170
|
}
|
|
165
171
|
}
|
|
166
172
|
else {
|
|
167
|
-
// Some networks might not have questions yet, return empty list
|
|
168
173
|
if (options.format === 'json')
|
|
169
174
|
console.log('[]');
|
|
170
175
|
else if (options.format === 'toon')
|
|
171
176
|
console.log((0, datamodel_1.encode)([]));
|
|
172
177
|
else
|
|
173
|
-
|
|
178
|
+
logger_1.logger.warn('No questions found for this network.');
|
|
174
179
|
}
|
|
175
180
|
}
|
|
176
181
|
catch (error) {
|
|
177
|
-
|
|
182
|
+
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
178
183
|
}
|
|
179
184
|
});
|
|
180
185
|
networks
|
|
@@ -183,6 +188,7 @@ function registerNetworkCommands(program) {
|
|
|
183
188
|
.option('--format <format>', 'Output format: toon, json, text', 'toon')
|
|
184
189
|
.action(async (options) => {
|
|
185
190
|
try {
|
|
191
|
+
logger_1.logger.info('Fetching your registered networks...');
|
|
186
192
|
const { client } = await AuthHelper_1.AuthHelper.getFirstAuthenticatedClient();
|
|
187
193
|
const response = await client.get('/v1/networks/mine');
|
|
188
194
|
if (response.success && response.data) {
|
|
@@ -194,10 +200,10 @@ function registerNetworkCommands(program) {
|
|
|
194
200
|
}
|
|
195
201
|
else {
|
|
196
202
|
if (response.data.length === 0) {
|
|
197
|
-
|
|
203
|
+
logger_1.logger.warn('No networks found.');
|
|
198
204
|
return;
|
|
199
205
|
}
|
|
200
|
-
|
|
206
|
+
logger_1.logger.success(`\nYour networks (${response.data.length}):\n`);
|
|
201
207
|
response.data.forEach((network) => {
|
|
202
208
|
console.log(chalk_1.default.cyan.bold(network.name || network.id));
|
|
203
209
|
console.log(chalk_1.default.gray(' ID:'), network.id);
|
|
@@ -207,11 +213,11 @@ function registerNetworkCommands(program) {
|
|
|
207
213
|
}
|
|
208
214
|
}
|
|
209
215
|
else {
|
|
210
|
-
|
|
216
|
+
logger_1.logger.error('Error:', response.error?.message || 'Failed to list networks');
|
|
211
217
|
}
|
|
212
218
|
}
|
|
213
219
|
catch (error) {
|
|
214
|
-
|
|
220
|
+
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
215
221
|
}
|
|
216
222
|
});
|
|
217
223
|
networks
|
|
@@ -221,6 +227,7 @@ function registerNetworkCommands(program) {
|
|
|
221
227
|
.option('--format <format>', 'Output format: toon, json, text', 'toon')
|
|
222
228
|
.action(async (networkId, options) => {
|
|
223
229
|
try {
|
|
230
|
+
logger_1.logger.info(`Fetching members for ${networkId}...`);
|
|
224
231
|
const client = await AuthHelper_1.AuthHelper.getApiClient();
|
|
225
232
|
const response = await client.get(`/v1/networks/${networkId}/members`);
|
|
226
233
|
if (response.success && response.data) {
|
|
@@ -231,7 +238,7 @@ function registerNetworkCommands(program) {
|
|
|
231
238
|
console.log((0, datamodel_1.encode)(response.data));
|
|
232
239
|
}
|
|
233
240
|
else {
|
|
234
|
-
|
|
241
|
+
logger_1.logger.success(`\nMembers (${response.data.length}):\n`);
|
|
235
242
|
response.data.forEach((member) => {
|
|
236
243
|
console.log(chalk_1.default.cyan(member.publicToken));
|
|
237
244
|
console.log(chalk_1.default.gray(' Role:'), member.role);
|
|
@@ -241,11 +248,11 @@ function registerNetworkCommands(program) {
|
|
|
241
248
|
}
|
|
242
249
|
}
|
|
243
250
|
else {
|
|
244
|
-
|
|
251
|
+
logger_1.logger.error('Error:', response.error?.message || 'Failed to list members');
|
|
245
252
|
}
|
|
246
253
|
}
|
|
247
254
|
catch (error) {
|
|
248
|
-
|
|
255
|
+
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
249
256
|
}
|
|
250
257
|
});
|
|
251
258
|
networks
|
|
@@ -254,26 +261,27 @@ function registerNetworkCommands(program) {
|
|
|
254
261
|
.argument('<networkId>', 'Network ID')
|
|
255
262
|
.action(async (networkId) => {
|
|
256
263
|
try {
|
|
264
|
+
logger_1.logger.info(`Joining network community: ${networkId}...`);
|
|
257
265
|
const { client: authClient } = await AuthHelper_1.AuthHelper.getFirstAuthenticatedClient();
|
|
258
266
|
const mineRes = await authClient.get('/v1/networks/mine');
|
|
259
267
|
const currentCount = mineRes.success && mineRes.data ? mineRes.data.length : 0;
|
|
260
268
|
const limitCheck = await LimitsManager_1.limitsManager.canJoinNetwork(currentCount);
|
|
261
269
|
if (!limitCheck.allowed) {
|
|
262
|
-
|
|
270
|
+
logger_1.logger.error('Limit:', limitCheck.reason);
|
|
263
271
|
return;
|
|
264
272
|
}
|
|
265
273
|
const result = await AuthHelper_1.AuthHelper.ensureAuthenticated(networkId);
|
|
266
274
|
if (result.isNewUser) {
|
|
267
|
-
|
|
275
|
+
logger_1.logger.success('✓ Joined network successfully!');
|
|
268
276
|
}
|
|
269
277
|
else {
|
|
270
|
-
|
|
278
|
+
logger_1.logger.success('✓ Already authenticated to network.');
|
|
271
279
|
}
|
|
272
280
|
console.log(chalk_1.default.gray('Network:'), networkId);
|
|
273
281
|
console.log(chalk_1.default.gray('Public Token:'), result.credentials.publicToken);
|
|
274
282
|
}
|
|
275
283
|
catch (error) {
|
|
276
|
-
|
|
284
|
+
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
277
285
|
}
|
|
278
286
|
});
|
|
279
287
|
networks
|
|
@@ -285,6 +293,7 @@ function registerNetworkCommands(program) {
|
|
|
285
293
|
.option('--format <format>', 'Output format: toon, json, text', 'toon')
|
|
286
294
|
.action(async (options) => {
|
|
287
295
|
try {
|
|
296
|
+
logger_1.logger.info(`Running discovery strategy: ${options.strategy}...`);
|
|
288
297
|
const client = await AuthHelper_1.AuthHelper.getApiClient();
|
|
289
298
|
const response = await client.get('/v1/networks/discover', {
|
|
290
299
|
strategy: options.strategy,
|
|
@@ -300,7 +309,7 @@ function registerNetworkCommands(program) {
|
|
|
300
309
|
}
|
|
301
310
|
else {
|
|
302
311
|
const data = response.data;
|
|
303
|
-
|
|
312
|
+
logger_1.logger.success(`\nDiscovered ${data.totalFound} networks (${options.strategy} strategy):\n`);
|
|
304
313
|
data.networks.forEach((network) => {
|
|
305
314
|
console.log(chalk_1.default.cyan.bold(network.name || network.id));
|
|
306
315
|
console.log(chalk_1.default.gray(' ID:'), network.id);
|
|
@@ -310,7 +319,7 @@ function registerNetworkCommands(program) {
|
|
|
310
319
|
console.log();
|
|
311
320
|
});
|
|
312
321
|
if (data.recommendedForYou && data.recommendedForYou.length > 0) {
|
|
313
|
-
|
|
322
|
+
logger_1.logger.info('\nRecommended for you:\n');
|
|
314
323
|
data.recommendedForYou.forEach((rec) => {
|
|
315
324
|
console.log(chalk_1.default.cyan(` ${rec.networkId}`));
|
|
316
325
|
console.log(chalk_1.default.gray(' Reason:'), rec.reason);
|
|
@@ -320,12 +329,12 @@ function registerNetworkCommands(program) {
|
|
|
320
329
|
}
|
|
321
330
|
}
|
|
322
331
|
else {
|
|
323
|
-
|
|
332
|
+
logger_1.logger.error('Error:', response.error?.message || 'Failed to discover networks');
|
|
324
333
|
}
|
|
325
334
|
}
|
|
326
335
|
catch (error) {
|
|
327
|
-
|
|
336
|
+
logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
|
|
328
337
|
}
|
|
329
338
|
});
|
|
330
339
|
}
|
|
331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbmV0d29ya3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFRQSwwREF1VEM7QUE1VEQsbURBQWdEO0FBQ2hELDJEQUF3RDtBQUN4RCw0Q0FBc0M7QUFDdEMsa0RBQTBCO0FBRTFCLFNBQWdCLHVCQUF1QixDQUFDLE9BQWdCO0lBQ3RELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFFeEYsUUFBUTtTQUNMLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDZixXQUFXLENBQUMsc0JBQXNCLENBQUM7U0FDbkMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLG9DQUFvQyxDQUFDO1NBQ25FLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLENBQUM7U0FDdEUsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLHVCQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFRLGNBQWMsRUFBRTtnQkFDdkQsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2dCQUN4QixLQUFLLEVBQUUsTUFBTTthQUNkLENBQUMsQ0FBQztZQUVILElBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RDLHFFQUFxRTtnQkFDckUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUM3QyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1YsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJO29CQUNm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QUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgQXBpQ2xpZW50IH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IGNvbmZpZ01hbmFnZXIgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQXV0aEhlbHBlciB9IGZyb20gJy4uL2F1dGgvQXV0aEhlbHBlcic7XG5pbXBvcnQgeyBsaW1pdHNNYW5hZ2VyIH0gZnJvbSAnLi4vbGltaXRzL0xpbWl0c01hbmFnZXInO1xuaW1wb3J0IHsgZW5jb2RlIH0gZnJvbSAnLi4vZGF0YW1vZGVsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlck5ldHdvcmtDb21tYW5kcyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIGNvbnN0IG5ldHdvcmtzID0gcHJvZ3JhbS5jb21tYW5kKCduZXR3b3JrcycpLmRlc2NyaXB0aW9uKCdOZXR3b3JrIG1hbmFnZW1lbnQgY29tbWFuZHMnKTtcblxuICBuZXR3b3Jrc1xuICAgIC5jb21tYW5kKCdsaXN0JylcbiAgICAuZGVzY3JpcHRpb24oJ0xpc3QgcHVibGljIG5ldHdvcmtzJylcbiAgICAub3B0aW9uKCctZiwgLS1maWx0ZXIgPHR5cGU+JywgJ0ZpbHRlcjogcG9wdWxhciwgbmV3ZXN0LCB1bnBvcHVsYXInKVxuICAgIC5vcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQ6IHRvb24sIGpzb24sIHRleHQnLCAndG9vbicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgQXV0aEhlbHBlci5nZXRBcGlDbGllbnQoKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueVtdPignL3YxL25ldHdvcmtzJywge1xuICAgICAgICAgIHN0cmF0ZWd5OiBvcHRpb25zLmZpbHRlcixcbiAgICAgICAgICBzaG9ydDogJ3RydWUnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICAvLyBGaWx0ZXIgb25seSByZXF1ZXN0ZWQgZmllbGRzOiB0aXRsZSAobmFtZSksIGlkLCBkZXNjcmlwdGlvbiwgdXNlcnNcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSByZXNwb25zZS5kYXRhLm1hcChuZXQgPT4gKHtcbiAgICAgICAgICAgIGlkOiBuZXQuaWQsXG4gICAgICAgICAgICB0aXRsZTogbmV0Lm5hbWUsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogbmV0LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgdXNlcnM6IG5ldC51c2Vyc1xuICAgICAgICAgIH0pKTtcblxuICAgICAgICAgIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShmaWx0ZXJlZERhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAndG9vbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShmaWx0ZXJlZERhdGEpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4uYm9sZChgXFxuRm91bmQgJHtmaWx0ZXJlZERhdGEubGVuZ3RofSBuZXR3b3JrczpcXG5gKSk7XG4gICAgICAgICAgICBmaWx0ZXJlZERhdGEuZm9yRWFjaCgobmV0d29yazogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4uYm9sZChuZXR3b3JrLnRpdGxlIHx8IG5ldHdvcmsuaWQpKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBJRDonKSwgbmV0d29yay5pZCk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgRGVzY3JpcHRpb246JyksIG5ldHdvcmsuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFVzZXJzOicpLCBuZXR3b3JrLnVzZXJzKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBuZXR3b3JrcycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBuZXR3b3Jrc1xuICAgIC5jb21tYW5kKCdjcmVhdGUnKVxuICAgIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgbmV3IG5ldHdvcmsnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW4sIC0tbmFtZSA8bmFtZT4nLCAnTmV0d29yayBuYW1lJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1kLCAtLWRlc2NyaXB0aW9uIDxkZXNjPicsICdTaG9ydCBkZXNjcmlwdGlvbicpXG4gICAgLm9wdGlvbignLWwsIC0tbG9uZy1kZXNjcmlwdGlvbiA8ZGVzYz4nLCAnTG9uZyBkZXNjcmlwdGlvbiAobWFya2Rvd24pJylcbiAgICAub3B0aW9uKCctLWxvZ28gPHVybD4nLCAnTG9nbyBVUkwnKVxuICAgIC5vcHRpb24oJy0tcHJpdmF0ZScsICdNYWtlIG5ldHdvcmsgcHJpdmF0ZScpXG4gICAgLm9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdDogdG9vbiwganNvbiwgdGV4dCcsICd0b29uJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgQXV0aEhlbHBlci5nZXRGaXJzdEF1dGhlbnRpY2F0ZWRDbGllbnQoKTtcblxuICAgICAgICBjb25zdCBtaW5lUmVzID0gYXdhaXQgY2xpZW50LmdldDxhbnlbXT4oJy92MS9uZXR3b3Jrcy9taW5lJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IG1pbmVSZXMuc3VjY2VzcyAmJiBtaW5lUmVzLmRhdGEgPyBtaW5lUmVzLmRhdGEubGVuZ3RoIDogMDtcbiAgICAgICAgY29uc3QgbGltaXRDaGVjayA9IGF3YWl0IGxpbWl0c01hbmFnZXIuY2FuQ3JlYXRlTmV0d29yayhjdXJyZW50Q291bnQpO1xuICAgICAgICBpZiAoIWxpbWl0Q2hlY2suYWxsb3dlZCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdMaW1pdDonKSwgbGltaXRDaGVjay5yZWFzb24pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8YW55PignL3YxL25ldHdvcmtzJywge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbixcbiAgICAgICAgICBsb25nRGVzY3JpcHRpb246IG9wdGlvbnMubG9uZ0Rlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgIGxvZ29Vcmw6IG9wdGlvbnMubG9nbyB8fCAnJyxcbiAgICAgICAgICBpc1B1YmxpYzogIW9wdGlvbnMucHJpdmF0ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAndG9vbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgTmV0d29yayBjcmVhdGVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgcmVzcG9uc2UuZGF0YS5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBjcmVhdGUgbmV0d29yaycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBuZXR3b3Jrc1xuICAgIC5jb21tYW5kKCdzaG93JylcbiAgICAuZGVzY3JpcHRpb24oJ1Nob3cgZnVsbCBuZXR3b3JrIGRldGFpbHMgKHByb2ZpbGUgY2FyZCknKVxuICAgIC5hcmd1bWVudCgnPG5ldHdvcmtJZD4nLCAnTmV0d29yayBJRCcpXG4gICAgLm9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdDogdG9vbiwganNvbiwgdGV4dCcsICd0b29uJylcbiAgICAuYWN0aW9uKGFzeW5jIChuZXR3b3JrSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IEF1dGhIZWxwZXIuZ2V0QXBpQ2xpZW50KCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxhbnk+KGAvdjEvbmV0d29ya3MvJHtuZXR3b3JrSWR9YCk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhLCBudWxsLCAyKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ3Rvb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbmNvZGUocmVzcG9uc2UuZGF0YSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXR3b3JrID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4uYm9sZChgXFxuJHtuZXR3b3JrLm5hbWV9XFxuYCkpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnSUQ6JyksIG5ldHdvcmsuaWQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnRGVzY3JpcHRpb246JyksIG5ldHdvcmsuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnU3RhdHVzOicpLCBuZXR3b3JrLnN0YXR1cyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdQdWJsaWM6JyksIG5ldHdvcmsuaXNQdWJsaWMgPyAnWWVzJyA6ICdObycpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVXNlcnM6JyksIG5ldHdvcmsudXNlcnMpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAobmV0d29yay5sb25nRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnXFxuUGFydGljaXBhdGlvbiBSdWxlcyAoTG9uZyBEZXNjcmlwdGlvbik6JykpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhuZXR3b3JrLmxvbmdEZXNjcmlwdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ05ldHdvcmsgbm90IGZvdW5kJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIG5ldHdvcmtzXG4gICAgLmNvbW1hbmQoJ3F1ZXN0aW9ucycpXG4gICAgLmRlc2NyaXB0aW9uKCdHZXQgcHJvZmlsZSBxdWVzdGlvbnMgZm9yIGEgbmV0d29yaycpXG4gICAgLmFyZ3VtZW50KCc8bmV0d29ya0lkPicsICdOZXR3b3JrIElEJylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCB0ZXh0JywgJ3Rvb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG5ldHdvcmtJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgQXV0aEhlbHBlci5nZXRBcGlDbGllbnQoKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueVtdPihgL3YxL25ldHdvcmtzLyR7bmV0d29ya0lkfS9wcm9maWxlL3F1ZXN0aW9uc2ApO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICd0b29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZW5jb2RlKHJlc3BvbnNlLmRhdGEpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4uYm9sZChgXFxuUHJvZmlsZSBRdWVzdGlvbnMgZm9yICR7bmV0d29ya0lkfTpcXG5gKSk7XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKHE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHtjaGFsay5jeWFuKHEub3JkZXIgKyAnLicpfSAke3EucXVlc3Rpb259JHtxLnJlcXVpcmVkID8gY2hhbGsucmVkKCcgKicpIDogJyd9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNvbWUgbmV0d29ya3MgbWlnaHQgbm90IGhhdmUgcXVlc3Rpb25zIHlldCwgcmV0dXJuIGVtcHR5IGxpc3RcbiAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJykgY29uc29sZS5sb2coJ1tdJyk7XG4gICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICd0b29uJykgY29uc29sZS5sb2coZW5jb2RlKFtdKSk7XG4gICAgICAgICAgZWxzZSBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ05vIHF1ZXN0aW9ucyBmb3VuZCBmb3IgdGhpcyBuZXR3b3JrLicpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgbmV0d29ya3NcbiAgICAuY29tbWFuZCgnbWluZScpXG4gICAgLmRlc2NyaXB0aW9uKCdMaXN0IHlvdXIgbmV0d29ya3MnKVxuICAgIC5vcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQ6IHRvb24sIGpzb24sIHRleHQnLCAndG9vbicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IEF1dGhIZWxwZXIuZ2V0Rmlyc3RBdXRoZW50aWNhdGVkQ2xpZW50KCk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueVtdPignL3YxL25ldHdvcmtzL21pbmUnKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAndG9vbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ05vIG5ldHdvcmtzIGZvdW5kLicpKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbi5ib2xkKGBcXG5Zb3VyIG5ldHdvcmtzICgke3Jlc3BvbnNlLmRhdGEubGVuZ3RofSk6XFxuYCkpO1xuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YS5mb3JFYWNoKChuZXR3b3JrOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKG5ldHdvcmsubmFtZSB8fCBuZXR3b3JrLmlkKSk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgSUQ6JyksIG5ldHdvcmsuaWQpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIERlc2NyaXB0aW9uOicpLCBuZXR3b3JrLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBuZXR3b3JrcycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBuZXR3b3Jrc1xuICAgIC5jb21tYW5kKCdtZW1iZXJzJylcbiAgICAuZGVzY3JpcHRpb24oJ0xpc3QgbmV0d29yayBtZW1iZXJzJylcbiAgICAuYXJndW1lbnQoJzxuZXR3b3JrSWQ+JywgJ05ldHdvcmsgSUQnKVxuICAgIC5vcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQ6IHRvb24sIGpzb24sIHRleHQnLCAndG9vbicpXG4gICAgLmFjdGlvbihhc3luYyAobmV0d29ya0lkLCBvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBBdXRoSGVscGVyLmdldEFwaUNsaWVudCgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8YW55W10+KGAvdjEvbmV0d29ya3MvJHtuZXR3b3JrSWR9L21lbWJlcnNgKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAndG9vbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoYFxcbk1lbWJlcnMgKCR7cmVzcG9uc2UuZGF0YS5sZW5ndGh9KTpcXG5gKSk7XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKG1lbWJlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4obWVtYmVyLnB1YmxpY1Rva2VuKSk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgUm9sZTonKSwgbWVtYmVyLnJvbGUpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIERlc2NyaXB0aW9uOicpLCBtZW1iZXIuc2hvcnREZXNjcmlwdGlvbiB8fCAnKG5vbmUpJyk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGxpc3QgbWVtYmVycycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBuZXR3b3Jrc1xuICAgIC5jb21tYW5kKCdqb2luJylcbiAgICAuZGVzY3JpcHRpb24oJ0pvaW4gYSBuZXR3b3JrIChhdXRvLXJlZ2lzdGVyIGlmIG5lZWRlZCknKVxuICAgIC5hcmd1bWVudCgnPG5ldHdvcmtJZD4nLCAnTmV0d29yayBJRCcpXG4gICAgLmFjdGlvbihhc3luYyAobmV0d29ya0lkKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudDogYXV0aENsaWVudCB9ID0gYXdhaXQgQXV0aEhlbHBlci5nZXRGaXJzdEF1dGhlbnRpY2F0ZWRDbGllbnQoKTtcbiAgICAgICAgY29uc3QgbWluZVJlcyA9IGF3YWl0IGF1dGhDbGllbnQuZ2V0PGFueVtdPignL3YxL25ldHdvcmtzL21pbmUnKTtcbiAgICAgICAgY29uc3QgY3VycmVudENvdW50ID0gbWluZVJlcy5zdWNjZXNzICYmIG1pbmVSZXMuZGF0YSA/IG1pbmVSZXMuZGF0YS5sZW5ndGggOiAwO1xuICAgICAgICBjb25zdCBsaW1pdENoZWNrID0gYXdhaXQgbGltaXRzTWFuYWdlci5jYW5Kb2luTmV0d29yayhjdXJyZW50Q291bnQpO1xuICAgICAgICBpZiAoIWxpbWl0Q2hlY2suYWxsb3dlZCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdMaW1pdDonKSwgbGltaXRDaGVjay5yZWFzb24pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IEF1dGhIZWxwZXIuZW5zdXJlQXV0aGVudGljYXRlZChuZXR3b3JrSWQpO1xuXG4gICAgICAgIGlmIChyZXN1bHQuaXNOZXdVc2VyKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBKb2luZWQgbmV0d29yayBzdWNjZXNzZnVsbHkhJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgQWxyZWFkeSBhdXRoZW50aWNhdGVkIHRvIG5ldHdvcmsuJykpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ05ldHdvcms6JyksIG5ldHdvcmtJZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1B1YmxpYyBUb2tlbjonKSwgcmVzdWx0LmNyZWRlbnRpYWxzLnB1YmxpY1Rva2VuKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIG5ldHdvcmtzXG4gICAgLmNvbW1hbmQoJ2Rpc2NvdmVyJylcbiAgICAuZGVzY3JpcHRpb24oJ0Rpc2NvdmVyIG5ldHdvcmtzIGJ5IHN0cmF0ZWd5JylcbiAgICAub3B0aW9uKCctcywgLS1zdHJhdGVneSA8dHlwZT4nLCAnU3RyYXRlZ3k6IHBvcHVsYXIsIG5ld2VzdCwgdW5wb3B1bGFyLCByZWNvbW1lbmRlZCcsICdwb3B1bGFyJylcbiAgICAub3B0aW9uKCctbCwgLS1saW1pdCA8bnVtYmVyPicsICdMaW1pdCByZXN1bHRzJywgJzIwJylcbiAgICAub3B0aW9uKCctbiwgLS1uZXR3b3JrIDxpZD4nLCAnVGFyZ2V0IG5ldHdvcmsgKGZvciByZWNvbW1lbmRlZCBzdHJhdGVneSknKVxuICAgIC5vcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQ6IHRvb24sIGpzb24sIHRleHQnLCAndG9vbicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgQXV0aEhlbHBlci5nZXRBcGlDbGllbnQoKTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueT4oJy92MS9uZXR3b3Jrcy9kaXNjb3ZlcicsIHtcbiAgICAgICAgICBzdHJhdGVneTogb3B0aW9ucy5zdHJhdGVneSxcbiAgICAgICAgICBsaW1pdDogb3B0aW9ucy5saW1pdCxcbiAgICAgICAgICBuZXR3b3JrOiBvcHRpb25zLm5ldHdvcmtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhLCBudWxsLCAyKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ3Rvb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbmNvZGUocmVzcG9uc2UuZGF0YSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuLmJvbGQoYFxcbkRpc2NvdmVyZWQgJHtkYXRhLnRvdGFsRm91bmR9IG5ldHdvcmtzICgke29wdGlvbnMuc3RyYXRlZ3l9IHN0cmF0ZWd5KTpcXG5gKSk7XG5cbiAgICAgICAgICAgIGRhdGEubmV0d29ya3MuZm9yRWFjaCgobmV0d29yazogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4uYm9sZChuZXR3b3JrLm5hbWUgfHwgbmV0d29yay5pZCkpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIElEOicpLCBuZXR3b3JrLmlkKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBEZXNjcmlwdGlvbjonKSwgbmV0d29yay5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgVXNlcnM6JyksIG5ldHdvcmsudXNlcnMpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFN0YXR1czonKSwgbmV0d29yay5zdGF0dXMpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnJlY29tbWVuZGVkRm9yWW91ICYmIGRhdGEucmVjb21tZW5kZWRGb3JZb3UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3cuYm9sZCgnXFxuUmVjb21tZW5kZWQgZm9yIHlvdTpcXG4nKSk7XG4gICAgICAgICAgICAgIGRhdGEucmVjb21tZW5kZWRGb3JZb3UuZm9yRWFjaCgocmVjOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGAgICR7cmVjLm5ldHdvcmtJZH1gKSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBSZWFzb246JyksIHJlYy5yZWFzb24pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZGlzY292ZXIgbmV0d29ya3MnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29ya3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbmV0d29ya3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSwwREErVEM7QUFyVUQsbURBQWdEO0FBQ2hELDJEQUF3RDtBQUN4RCw0Q0FBc0M7QUFDdEMsNENBQXlDO0FBQ3pDLGtEQUEwQjtBQUUxQixTQUFnQix1QkFBdUIsQ0FBQyxPQUFnQjtJQUN0RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBRXhGLFFBQVE7U0FDTCxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ2YsV0FBVyxDQUFDLHNCQUFzQixDQUFDO1NBQ25DLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxvQ0FBb0MsQ0FBQztTQUNuRSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQztTQUNyRCxNQUFNLENBQUMsbUJBQW1CLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxDQUFDO1NBQ3RFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsZUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sdUJBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQVEsY0FBYyxFQUFFO2dCQUN2RCxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU07Z0JBQ3hCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDcEIsS0FBSyxFQUFFLE1BQU07YUFDZCxDQUFDLENBQUM7WUFFSCxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QyxNQUFNLFlBQVksR0FBRyxR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QUFFLENBQUM7d0JBQ2hFLGVBQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFOzRCQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDOzRCQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDOzRCQUNqRCxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7d0JBQ2hCLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixlQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSw2QkFBNkIsQ0FBQyxDQUFDO1lBQ25GLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25GLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBjb25maWdNYW5hZ2VyIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IEF1dGhIZWxwZXIgfSBmcm9tICcuLi9hdXRoL0F1dGhIZWxwZXInO1xuaW1wb3J0IHsgbGltaXRzTWFuYWdlciB9IGZyb20gJy4uL2xpbWl0cy9MaW1pdHNNYW5hZ2VyJztcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gJy4uL2RhdGFtb2RlbCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTmV0d29ya0NvbW1hbmRzKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgY29uc3QgbmV0d29ya3MgPSBwcm9ncmFtLmNvbW1hbmQoJ25ldHdvcmtzJykuZGVzY3JpcHRpb24oJ05ldHdvcmsgbWFuYWdlbWVudCBjb21tYW5kcycpO1xuXG4gIG5ldHdvcmtzXG4gICAgLmNvbW1hbmQoJ2xpc3QnKVxuICAgIC5kZXNjcmlwdGlvbignTGlzdCBwdWJsaWMgbmV0d29ya3MnKVxuICAgIC5vcHRpb24oJy1mLCAtLWZpbHRlciA8dHlwZT4nLCAnRmlsdGVyOiBwb3B1bGFyLCBuZXdlc3QsIHVucG9wdWxhcicpXG4gICAgLm9wdGlvbignLWwsIC0tbGltaXQgPG51bWJlcj4nLCAnTGltaXQgcmVzdWx0cycsICc1MCcpXG4gICAgLm9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdDogdG9vbiwganNvbiwgdGV4dCcsICd0b29uJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIuaW5mbygnRmV0Y2hpbmcgcHVibGljIG5ldHdvcmtzLi4uJyk7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IEF1dGhIZWxwZXIuZ2V0QXBpQ2xpZW50KCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxhbnlbXT4oJy92MS9uZXR3b3JrcycsIHtcbiAgICAgICAgICBzdHJhdGVneTogb3B0aW9ucy5maWx0ZXIsXG4gICAgICAgICAgbGltaXQ6IG9wdGlvbnMubGltaXQsXG4gICAgICAgICAgc2hvcnQ6ICd0cnVlJ1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhID0gcmVzcG9uc2UuZGF0YS5tYXAobmV0ID0+ICh7XG4gICAgICAgICAgICBpZDogbmV0LmlkLFxuICAgICAgICAgICAgdGl0bGU6IG5ldC5uYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IG5ldC5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgIHVzZXJzOiBuZXQudXNlcnNcbiAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoZmlsdGVyZWREYXRhLCBudWxsLCAyKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ3Rvb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbmNvZGUoZmlsdGVyZWREYXRhKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5zdWNjZXNzKGBcXG5Gb3VuZCAke2ZpbHRlcmVkRGF0YS5sZW5ndGh9IG5ldHdvcmtzOlxcbmApO1xuICAgICAgICAgICAgZmlsdGVyZWREYXRhLmZvckVhY2goKG5ldHdvcms6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuLmJvbGQobmV0d29yay50aXRsZSB8fCBuZXR3b3JrLmlkKSk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgSUQ6JyksIG5ldHdvcmsuaWQpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIERlc2NyaXB0aW9uOicpLCBuZXR3b3JrLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBVc2VyczonKSwgbmV0d29yay51c2Vycyk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGxpc3QgbmV0d29ya3MnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgbmV0d29ya3NcbiAgICAuY29tbWFuZCgnY3JlYXRlJylcbiAgICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIG5ldyBuZXR3b3JrJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5hbWUgPG5hbWU+JywgJ05ldHdvcmsgbmFtZScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctZCwgLS1kZXNjcmlwdGlvbiA8ZGVzYz4nLCAnU2hvcnQgZGVzY3JpcHRpb24nKVxuICAgIC5vcHRpb24oJy1sLCAtLWxvbmctZGVzY3JpcHRpb24gPGRlc2M+JywgJ0xvbmcgZGVzY3JpcHRpb24gKG1hcmtkb3duKScpXG4gICAgLm9wdGlvbignLS1sb2dvIDx1cmw+JywgJ0xvZ28gVVJMJylcbiAgICAub3B0aW9uKCctLXByaXZhdGUnLCAnTWFrZSBuZXR3b3JrIHByaXZhdGUnKVxuICAgIC5vcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQ6IHRvb24sIGpzb24sIHRleHQnLCAndG9vbicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0NyZWF0aW5nIG5ldyBuZXR3b3JrIGNvbW11bml0eS4uLicpO1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgQXV0aEhlbHBlci5nZXRGaXJzdEF1dGhlbnRpY2F0ZWRDbGllbnQoKTtcblxuICAgICAgICBjb25zdCBtaW5lUmVzID0gYXdhaXQgY2xpZW50LmdldDxhbnlbXT4oJy92MS9uZXR3b3Jrcy9taW5lJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9IG1pbmVSZXMuc3VjY2VzcyAmJiBtaW5lUmVzLmRhdGEgPyBtaW5lUmVzLmRhdGEubGVuZ3RoIDogMDtcbiAgICAgICAgY29uc3QgbGltaXRDaGVjayA9IGF3YWl0IGxpbWl0c01hbmFnZXIuY2FuQ3JlYXRlTmV0d29yayhjdXJyZW50Q291bnQpO1xuICAgICAgICBpZiAoIWxpbWl0Q2hlY2suYWxsb3dlZCkge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignTGltaXQ6JywgbGltaXRDaGVjay5yZWFzb24pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3Q8YW55PignL3YxL25ldHdvcmtzJywge1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9ucy5kZXNjcmlwdGlvbixcbiAgICAgICAgICBsb25nRGVzY3JpcHRpb246IG9wdGlvbnMubG9uZ0Rlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgIGxvZ29Vcmw6IG9wdGlvbnMubG9nbyB8fCAnJyxcbiAgICAgICAgICBpc1B1YmxpYzogIW9wdGlvbnMucHJpdmF0ZVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAndG9vbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5zdWNjZXNzKCfinJMgTmV0d29yayBjcmVhdGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0lEOicpLCByZXNwb25zZS5kYXRhLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGNyZWF0ZSBuZXR3b3JrJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIG5ldHdvcmtzXG4gICAgLmNvbW1hbmQoJ3Nob3cnKVxuICAgIC5kZXNjcmlwdGlvbignU2hvdyBmdWxsIG5ldHdvcmsgZGV0YWlscyAocHJvZmlsZSBjYXJkKScpXG4gICAgLmFyZ3VtZW50KCc8bmV0d29ya0lkPicsICdOZXR3b3JrIElEJylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCB0ZXh0JywgJ3Rvb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG5ldHdvcmtJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYEZldGNoaW5nIGRldGFpbHMgZm9yIG5ldHdvcms6ICR7bmV0d29ya0lkfS4uLmApO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBBdXRoSGVscGVyLmdldEFwaUNsaWVudCgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8YW55PihgL3YxL25ldHdvcmtzLyR7bmV0d29ya0lkfWApO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICd0b29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZW5jb2RlKHJlc3BvbnNlLmRhdGEpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV0d29yayA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuLmJvbGQoYFxcbiR7bmV0d29yay5uYW1lfVxcbmApKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0lEOicpLCBuZXR3b3JrLmlkKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0Rlc2NyaXB0aW9uOicpLCBuZXR3b3JrLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1N0YXR1czonKSwgbmV0d29yay5zdGF0dXMpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnUHVibGljOicpLCBuZXR3b3JrLmlzUHVibGljID8gJ1llcycgOiAnTm8nKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1VzZXJzOicpLCBuZXR3b3JrLnVzZXJzKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKG5ldHdvcmsubG9uZ0Rlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1xcblBhcnRpY2lwYXRpb24gUnVsZXMgKExvbmcgRGVzY3JpcHRpb24pOicpKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cobmV0d29yay5sb25nRGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yOicsIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdOZXR3b3JrIG5vdCBmb3VuZCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yOicsIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBuZXR3b3Jrc1xuICAgIC5jb21tYW5kKCdxdWVzdGlvbnMnKVxuICAgIC5kZXNjcmlwdGlvbignR2V0IHByb2ZpbGUgcXVlc3Rpb25zIGZvciBhIG5ldHdvcmsnKVxuICAgIC5hcmd1bWVudCgnPG5ldHdvcmtJZD4nLCAnTmV0d29yayBJRCcpXG4gICAgLm9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdDogdG9vbiwganNvbiwgdGV4dCcsICd0b29uJylcbiAgICAuYWN0aW9uKGFzeW5jIChuZXR3b3JrSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKGBGZXRjaGluZyBwcm9maWxlIHF1ZXN0aW9ucyBmb3IgJHtuZXR3b3JrSWR9Li4uYCk7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IEF1dGhIZWxwZXIuZ2V0QXBpQ2xpZW50KCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxhbnlbXT4oYC92MS9uZXR3b3Jrcy8ke25ldHdvcmtJZH0vcHJvZmlsZS9xdWVzdGlvbnNgKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAndG9vbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5zdWNjZXNzKGBcXG5Qcm9maWxlIFF1ZXN0aW9ucyBmb3IgJHtuZXR3b3JrSWR9OlxcbmApO1xuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YS5mb3JFYWNoKChxOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7Y2hhbGsuY3lhbihxLm9yZGVyICsgJy4nKX0gJHtxLnF1ZXN0aW9ufSR7cS5yZXF1aXJlZCA/IGNoYWxrLnJlZCgnIConKSA6ICcnfWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJykgY29uc29sZS5sb2coJ1tdJyk7XG4gICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICd0b29uJykgY29uc29sZS5sb2coZW5jb2RlKFtdKSk7XG4gICAgICAgICAgZWxzZSBsb2dnZXIud2FybignTm8gcXVlc3Rpb25zIGZvdW5kIGZvciB0aGlzIG5ldHdvcmsuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIG5ldHdvcmtzXG4gICAgLmNvbW1hbmQoJ21pbmUnKVxuICAgIC5kZXNjcmlwdGlvbignTGlzdCB5b3VyIG5ldHdvcmtzJylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCB0ZXh0JywgJ3Rvb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKCdGZXRjaGluZyB5b3VyIHJlZ2lzdGVyZWQgbmV0d29ya3MuLi4nKTtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IEF1dGhIZWxwZXIuZ2V0Rmlyc3RBdXRoZW50aWNhdGVkQ2xpZW50KCk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueVtdPignL3YxL25ldHdvcmtzL21pbmUnKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAndG9vbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybignTm8gbmV0d29ya3MgZm91bmQuJyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYFxcbllvdXIgbmV0d29ya3MgKCR7cmVzcG9uc2UuZGF0YS5sZW5ndGh9KTpcXG5gKTtcbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZm9yRWFjaCgobmV0d29yazogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4uYm9sZChuZXR3b3JrLm5hbWUgfHwgbmV0d29yay5pZCkpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIElEOicpLCBuZXR3b3JrLmlkKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBEZXNjcmlwdGlvbjonKSwgbmV0d29yay5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGxpc3QgbmV0d29ya3MnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgbmV0d29ya3NcbiAgICAuY29tbWFuZCgnbWVtYmVycycpXG4gICAgLmRlc2NyaXB0aW9uKCdMaXN0IG5ldHdvcmsgbWVtYmVycycpXG4gICAgLmFyZ3VtZW50KCc8bmV0d29ya0lkPicsICdOZXR3b3JrIElEJylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCB0ZXh0JywgJ3Rvb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG5ldHdvcmtJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYEZldGNoaW5nIG1lbWJlcnMgZm9yICR7bmV0d29ya0lkfS4uLmApO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBBdXRoSGVscGVyLmdldEFwaUNsaWVudCgpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8YW55W10+KGAvdjEvbmV0d29ya3MvJHtuZXR3b3JrSWR9L21lbWJlcnNgKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAndG9vbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5zdWNjZXNzKGBcXG5NZW1iZXJzICgke3Jlc3BvbnNlLmRhdGEubGVuZ3RofSk6XFxuYCk7XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKG1lbWJlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4obWVtYmVyLnB1YmxpY1Rva2VuKSk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgUm9sZTonKSwgbWVtYmVyLnJvbGUpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIERlc2NyaXB0aW9uOicpLCBtZW1iZXIuc2hvcnREZXNjcmlwdGlvbiB8fCAnKG5vbmUpJyk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGxpc3QgbWVtYmVycycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yOicsIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICBuZXR3b3Jrc1xuICAgIC5jb21tYW5kKCdqb2luJylcbiAgICAuZGVzY3JpcHRpb24oJ0pvaW4gYSBuZXR3b3JrIChhdXRvLXJlZ2lzdGVyIGlmIG5lZWRlZCknKVxuICAgIC5hcmd1bWVudCgnPG5ldHdvcmtJZD4nLCAnTmV0d29yayBJRCcpXG4gICAgLmFjdGlvbihhc3luYyAobmV0d29ya0lkKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsb2dnZXIuaW5mbyhgSm9pbmluZyBuZXR3b3JrIGNvbW11bml0eTogJHtuZXR3b3JrSWR9Li4uYCk7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50OiBhdXRoQ2xpZW50IH0gPSBhd2FpdCBBdXRoSGVscGVyLmdldEZpcnN0QXV0aGVudGljYXRlZENsaWVudCgpO1xuICAgICAgICBjb25zdCBtaW5lUmVzID0gYXdhaXQgYXV0aENsaWVudC5nZXQ8YW55W10+KCcvdjEvbmV0d29ya3MvbWluZScpO1xuICAgICAgICBjb25zdCBjdXJyZW50Q291bnQgPSBtaW5lUmVzLnN1Y2Nlc3MgJiYgbWluZVJlcy5kYXRhID8gbWluZVJlcy5kYXRhLmxlbmd0aCA6IDA7XG4gICAgICAgIGNvbnN0IGxpbWl0Q2hlY2sgPSBhd2FpdCBsaW1pdHNNYW5hZ2VyLmNhbkpvaW5OZXR3b3JrKGN1cnJlbnRDb3VudCk7XG4gICAgICAgIGlmICghbGltaXRDaGVjay5hbGxvd2VkKSB7XG4gICAgICAgICAgbG9nZ2VyLmVycm9yKCdMaW1pdDonLCBsaW1pdENoZWNrLnJlYXNvbik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG5ldHdvcmtJZCk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5pc05ld1VzZXIpIHtcbiAgICAgICAgICBsb2dnZXIuc3VjY2Vzcygn4pyTIEpvaW5lZCBuZXR3b3JrIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuc3VjY2Vzcygn4pyTIEFscmVhZHkgYXV0aGVudGljYXRlZCB0byBuZXR3b3JrLicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ05ldHdvcms6JyksIG5ldHdvcmtJZCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1B1YmxpYyBUb2tlbjonKSwgcmVzdWx0LmNyZWRlbnRpYWxzLnB1YmxpY1Rva2VuKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIG5ldHdvcmtzXG4gICAgLmNvbW1hbmQoJ2Rpc2NvdmVyJylcbiAgICAuZGVzY3JpcHRpb24oJ0Rpc2NvdmVyIG5ldHdvcmtzIGJ5IHN0cmF0ZWd5JylcbiAgICAub3B0aW9uKCctcywgLS1zdHJhdGVneSA8dHlwZT4nLCAnU3RyYXRlZ3k6IHBvcHVsYXIsIG5ld2VzdCwgdW5wb3B1bGFyLCByZWNvbW1lbmRlZCcsICdwb3B1bGFyJylcbiAgICAub3B0aW9uKCctbCwgLS1saW1pdCA8bnVtYmVyPicsICdMaW1pdCByZXN1bHRzJywgJzIwJylcbiAgICAub3B0aW9uKCctbiwgLS1uZXR3b3JrIDxpZD4nLCAnVGFyZ2V0IG5ldHdvcmsgKGZvciByZWNvbW1lbmRlZCBzdHJhdGVneSknKVxuICAgIC5vcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQ6IHRvb24sIGpzb24sIHRleHQnLCAndG9vbicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFJ1bm5pbmcgZGlzY292ZXJ5IHN0cmF0ZWd5OiAke29wdGlvbnMuc3RyYXRlZ3l9Li4uYCk7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IEF1dGhIZWxwZXIuZ2V0QXBpQ2xpZW50KCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxhbnk+KCcvdjEvbmV0d29ya3MvZGlzY292ZXInLCB7XG4gICAgICAgICAgc3RyYXRlZ3k6IG9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICAgICAgbGltaXQ6IG9wdGlvbnMubGltaXQsXG4gICAgICAgICAgbmV0d29yazogb3B0aW9ucy5uZXR3b3JrXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICd0b29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZW5jb2RlKHJlc3BvbnNlLmRhdGEpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICBsb2dnZXIuc3VjY2VzcyhgXFxuRGlzY292ZXJlZCAke2RhdGEudG90YWxGb3VuZH0gbmV0d29ya3MgKCR7b3B0aW9ucy5zdHJhdGVneX0gc3RyYXRlZ3kpOlxcbmApO1xuXG4gICAgICAgICAgICBkYXRhLm5ldHdvcmtzLmZvckVhY2goKG5ldHdvcms6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuLmJvbGQobmV0d29yay5uYW1lIHx8IG5ldHdvcmsuaWQpKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBJRDonKSwgbmV0d29yay5pZCk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgRGVzY3JpcHRpb246JyksIG5ldHdvcmsuZGVzY3JpcHRpb24pO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFVzZXJzOicpLCBuZXR3b3JrLnVzZXJzKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBTdGF0dXM6JyksIG5ldHdvcmsuc3RhdHVzKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoZGF0YS5yZWNvbW1lbmRlZEZvcllvdSAmJiBkYXRhLnJlY29tbWVuZGVkRm9yWW91Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ1xcblJlY29tbWVuZGVkIGZvciB5b3U6XFxuJyk7XG4gICAgICAgICAgICAgIGRhdGEucmVjb21tZW5kZWRGb3JZb3UuZm9yRWFjaCgocmVjOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGAgICR7cmVjLm5ldHdvcmtJZH1gKSk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBSZWFzb246JyksIHJlYy5yZWFzb24pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yOicsIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZGlzY292ZXIgbmV0d29ya3MnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=
|
|
@@ -37,6 +37,7 @@ exports.configManager = exports.ConfigManager = void 0;
|
|
|
37
37
|
const path = __importStar(require("path"));
|
|
38
38
|
const os = __importStar(require("os"));
|
|
39
39
|
const fs = __importStar(require("fs-extra"));
|
|
40
|
+
const logger_1 = require("../utils/logger");
|
|
40
41
|
const CONFIG_DIR = path.join(os.homedir(), '.agenticpool');
|
|
41
42
|
const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
|
|
42
43
|
const CREDENTIALS_DIR = path.join(CONFIG_DIR, 'credentials');
|
|
@@ -46,24 +47,40 @@ const NETWORKS_FILE = path.join(CONFIG_DIR, 'networks.md');
|
|
|
46
47
|
class ConfigManager {
|
|
47
48
|
constructor() {
|
|
48
49
|
this.initialized = false;
|
|
50
|
+
this.initializing = false;
|
|
49
51
|
}
|
|
50
52
|
async init() {
|
|
51
|
-
if (this.initialized)
|
|
53
|
+
if (this.initialized || this.initializing)
|
|
52
54
|
return;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
await
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
55
|
+
this.initializing = true;
|
|
56
|
+
logger_1.logger.debug(`Initializing ConfigManager. Path: ${CONFIG_DIR}`);
|
|
57
|
+
try {
|
|
58
|
+
await fs.ensureDir(CONFIG_DIR);
|
|
59
|
+
await fs.ensureDir(CREDENTIALS_DIR);
|
|
60
|
+
await fs.ensureDir(PROFILES_DIR);
|
|
61
|
+
await fs.ensureDir(CACHE_DIR);
|
|
62
|
+
if (!(await fs.pathExists(CONFIG_FILE))) {
|
|
63
|
+
logger_1.logger.debug('Creating default config file');
|
|
64
|
+
const defaultConfig = {
|
|
65
|
+
apiUrl: 'https://api.agenticpool.net',
|
|
66
|
+
defaultFormat: 'toon'
|
|
67
|
+
};
|
|
68
|
+
await fs.writeJson(CONFIG_FILE, defaultConfig, { spaces: 2 });
|
|
69
|
+
}
|
|
70
|
+
if (!(await fs.pathExists(NETWORKS_FILE))) {
|
|
71
|
+
logger_1.logger.debug('Creating default networks file');
|
|
72
|
+
await fs.writeFile(NETWORKS_FILE, '# Registered AgenticPool Networks\n\n');
|
|
73
|
+
}
|
|
74
|
+
this.initialized = true;
|
|
75
|
+
logger_1.logger.debug('ConfigManager initialized');
|
|
62
76
|
}
|
|
63
|
-
|
|
64
|
-
|
|
77
|
+
catch (e) {
|
|
78
|
+
logger_1.logger.debug(`ConfigManager init failed: ${e instanceof Error ? e.message : 'Unknown'}`);
|
|
79
|
+
throw e;
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
this.initializing = false;
|
|
65
83
|
}
|
|
66
|
-
this.initialized = true;
|
|
67
84
|
}
|
|
68
85
|
async getGlobalConfig() {
|
|
69
86
|
await this.init();
|
|
@@ -71,6 +88,7 @@ class ConfigManager {
|
|
|
71
88
|
}
|
|
72
89
|
async saveGlobalConfig(config) {
|
|
73
90
|
await this.init();
|
|
91
|
+
logger_1.logger.debug('Saving global config');
|
|
74
92
|
await fs.writeJson(CONFIG_FILE, config, { spaces: 2 });
|
|
75
93
|
}
|
|
76
94
|
async setApiUrl(url) {
|
|
@@ -93,15 +111,16 @@ class ConfigManager {
|
|
|
93
111
|
async saveCredentials(networkId, credentials) {
|
|
94
112
|
await this.init();
|
|
95
113
|
const credFile = path.join(CREDENTIALS_DIR, `${networkId}.json`);
|
|
114
|
+
logger_1.logger.debug(`Saving credentials for ${networkId}`);
|
|
96
115
|
await fs.writeJson(credFile, credentials, { spaces: 2 });
|
|
97
116
|
}
|
|
98
117
|
async addRegisteredNetwork(networkId, reason) {
|
|
99
118
|
await this.init();
|
|
119
|
+
logger_1.logger.debug(`Registering network in local history: ${networkId}`);
|
|
100
120
|
const content = await fs.readFile(NETWORKS_FILE, 'utf-8');
|
|
101
121
|
const lines = content.split('\n');
|
|
102
122
|
const entryPrefix = `- ${networkId}`;
|
|
103
123
|
const fullEntry = `- ${networkId}${reason ? ` | Reason: ${reason}` : ''}`;
|
|
104
|
-
// Check if network already exists, if so update the line
|
|
105
124
|
const existingIndex = lines.findIndex(line => line.trim().startsWith(entryPrefix));
|
|
106
125
|
if (existingIndex !== -1) {
|
|
107
126
|
lines[existingIndex] = fullEntry;
|
|
@@ -160,4 +179,4 @@ class ConfigManager {
|
|
|
160
179
|
}
|
|
161
180
|
exports.ConfigManager = ConfigManager;
|
|
162
181
|
exports.configManager = new ConfigManager();
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvQ29uZmlnTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLDZDQUErQjtBQUcvQixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUMzRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN6RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM3RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztBQWtCM0QsTUFBYSxhQUFhO0lBQTFCO1FBQ1UsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUEySTlCLENBQUM7SUF6SUMsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUU3QixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FB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QztRQUVELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBSSxHQUFXLEVBQUUsSUFBTztRQUNwQyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDdEQsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUE1SUQsc0NBNElDO0FBRVksUUFBQSxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBBdXRoVG9rZW5zIH0gZnJvbSAnLi4vZGF0YW1vZGVsJztcblxuY29uc3QgQ09ORklHX0RJUiA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuYWdlbnRpY3Bvb2wnKTtcbmNvbnN0IENPTkZJR19GSUxFID0gcGF0aC5qb2luKENPTkZJR19ESVIsICdjb25maWcuanNvbicpO1xuY29uc3QgQ1JFREVOVElBTFNfRElSID0gcGF0aC5qb2luKENPTkZJR19ESVIsICdjcmVkZW50aWFscycpO1xuY29uc3QgUFJPRklMRVNfRElSID0gcGF0aC5qb2luKENPTkZJR19ESVIsICdwcm9maWxlcycpO1xuY29uc3QgQ0FDSEVfRElSID0gcGF0aC5qb2luKENPTkZJR19ESVIsICdjYWNoZScpO1xuY29uc3QgTkVUV09SS1NfRklMRSA9IHBhdGguam9pbihDT05GSUdfRElSLCAnbmV0d29ya3MubWQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxDb25maWcge1xuICBhcGlVcmw6IHN0cmluZztcbiAgZGVmYXVsdEZvcm1hdDogJ3Rvb24nIHwgJ2pzb24nO1xuICBodW1hbnNBcGlVcmw/OiBzdHJpbmc7XG4gIGh1bWFuVWlkPzogc3RyaW5nO1xuICBodW1hbkp3dD86IHN0cmluZztcbiAgaHVtYW5Kd3RFeHBpcmVzQXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0NyZWRlbnRpYWxzIHtcbiAgcHVibGljVG9rZW46IHN0cmluZztcbiAgcHJpdmF0ZUtleTogc3RyaW5nO1xuICBqd3Q/OiBzdHJpbmc7XG4gIGV4cGlyZXNBdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmZpZ01hbmFnZXIge1xuICBwcml2YXRlIGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkgcmV0dXJuO1xuICAgIFxuICAgIGF3YWl0IGZzLmVuc3VyZURpcihDT05GSUdfRElSKTtcbiAgICBhd2FpdCBmcy5lbnN1cmVEaXIoQ1JFREVOVElBTFNfRElSKTtcbiAgICBhd2FpdCBmcy5lbnN1cmVEaXIoUFJPRklMRVNfRElSKTtcbiAgICBhd2FpdCBmcy5lbnN1cmVEaXIoQ0FDSEVfRElSKTtcbiAgICBcbiAgICBpZiAoIShhd2FpdCBmcy5wYXRoRXhpc3RzKENPTkZJR19GSUxFKSkpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2F2ZUdsb2JhbENvbmZpZyh7XG4gICAgICAgIGFwaVVybDogJ2h0dHBzOi8vYXBpLmFnZW50aWNwb29sLm5ldCcsXG4gICAgICAgIGRlZmF1bHRGb3JtYXQ6ICd0b29uJ1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCEoYXdhaXQgZnMucGF0aEV4aXN0cyhORVRXT1JLU19GSUxFKSkpIHtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShORVRXT1JLU19GSUxFLCAnIyBSZWdpc3RlcmVkIEFnZW50aWNQb29sIE5ldHdvcmtzXFxuXFxuJyk7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgYXN5bmMgZ2V0R2xvYmFsQ29uZmlnKCk6IFByb21pc2U8R2xvYmFsQ29uZmlnPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgcmV0dXJuIGZzLnJlYWRKc29uKENPTkZJR19GSUxFKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVHbG9iYWxDb25maWcoY29uZmlnOiBHbG9iYWxDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBhd2FpdCBmcy53cml0ZUpzb24oQ09ORklHX0ZJTEUsIGNvbmZpZywgeyBzcGFjZXM6IDIgfSk7XG4gIH1cblxuICBhc3luYyBzZXRBcGlVcmwodXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmdldEdsb2JhbENvbmZpZygpO1xuICAgIGNvbmZpZy5hcGlVcmwgPSB1cmw7XG4gICAgYXdhaXQgdGhpcy5zYXZlR2xvYmFsQ29uZmlnKGNvbmZpZyk7XG4gIH1cblxuICBhc3luYyBnZXRDcmVkZW50aWFscyhuZXR3b3JrSWQ6IHN0cmluZyk6IFByb21pc2U8TmV0d29ya0NyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIGNvbnN0IGNyZWRGaWxlID0gcGF0aC5qb2luKENSRURFTlRJQUxTX0RJUiwgYCR7bmV0d29ya0lkfS5qc29uYCk7XG4gICAgXG4gICAgaWYgKCEoYXdhaXQgZnMucGF0aEV4aXN0cyhjcmVkRmlsZSkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY3JlZHMgPSBhd2FpdCBmcy5yZWFkSnNvbihjcmVkRmlsZSk7XG4gICAgXG4gICAgaWYgKGNyZWRzLmV4cGlyZXNBdCAmJiBEYXRlLm5vdygpID4gY3JlZHMuZXhwaXJlc0F0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGNyZWRzO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUNyZWRlbnRpYWxzKG5ldHdvcmtJZDogc3RyaW5nLCBjcmVkZW50aWFsczogTmV0d29ya0NyZWRlbnRpYWxzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgY3JlZEZpbGUgPSBwYXRoLmpvaW4oQ1JFREVOVElBTFNfRElSLCBgJHtuZXR3b3JrSWR9Lmpzb25gKTtcbiAgICBhd2FpdCBmcy53cml0ZUpzb24oY3JlZEZpbGUsIGNyZWRlbnRpYWxzLCB7IHNwYWNlczogMiB9KTtcbiAgfVxuXG4gIGFzeW5jIGFkZFJlZ2lzdGVyZWROZXR3b3JrKG5ldHdvcmtJZDogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgZnMucmVhZEZpbGUoTkVUV09SS1NfRklMRSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KCdcXG4nKTtcbiAgICBcbiAgICBjb25zdCBlbnRyeVByZWZpeCA9IGAtICR7bmV0d29ya0lkfWA7XG4gICAgY29uc3QgZnVsbEVudHJ5ID0gYC0gJHtuZXR3b3JrSWR9JHtyZWFzb24gPyBgIHwgUmVhc29uOiAke3JlYXNvbn1gIDogJyd9YDtcbiAgICBcbiAgICAvLyBDaGVjayBpZiBuZXR3b3JrIGFscmVhZHkgZXhpc3RzLCBpZiBzbyB1cGRhdGUgdGhlIGxpbmVcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gbGluZXMuZmluZEluZGV4KGxpbmUgPT4gbGluZS50cmltKCkuc3RhcnRzV2l0aChlbnRyeVByZWZpeCkpO1xuICAgIFxuICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xuICAgICAgbGluZXNbZXhpc3RpbmdJbmRleF0gPSBmdWxsRW50cnk7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoTkVUV09SS1NfRklMRSwgbGluZXMuam9pbignXFxuJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBmcy5hcHBlbmRGaWxlKE5FVFdPUktTX0ZJTEUsIGAke2Z1bGxFbnRyeX1cXG5gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRSZWdpc3RlcmVkTmV0d29ya3MoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShORVRXT1JLU19GSUxFLCAndXRmLTgnKTtcbiAgICByZXR1cm4gY29udGVudFxuICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgLmZpbHRlcihsaW5lID0+IGxpbmUuc3RhcnRzV2l0aCgnLSAnKSlcbiAgICAgIC5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoJy0gJywgJycpLnRyaW0oKSk7XG4gIH1cblxuICBhc3luYyBjbGVhckNyZWRlbnRpYWxzKG5ldHdvcmtJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgY3JlZEZpbGUgPSBwYXRoLmpvaW4oQ1JFREVOVElBTFNfRElSLCBgJHtuZXR3b3JrSWR9Lmpzb25gKTtcbiAgICBhd2FpdCBmcy5yZW1vdmUoY3JlZEZpbGUpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UHJvZmlsZShuZXR3b3JrSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIGNvbnN0IHByb2ZpbGVGaWxlID0gcGF0aC5qb2luKFBST0ZJTEVTX0RJUiwgYCR7bmV0d29ya0lkfS5tZGApO1xuICAgIFxuICAgIGlmICghKGF3YWl0IGZzLnBhdGhFeGlzdHMocHJvZmlsZUZpbGUpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmcy5yZWFkRmlsZShwcm9maWxlRmlsZSwgJ3V0Zi04Jyk7XG4gIH1cblxuICBhc3luYyBzYXZlUHJvZmlsZShuZXR3b3JrSWQ6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgcHJvZmlsZUZpbGUgPSBwYXRoLmpvaW4oUFJPRklMRVNfRElSLCBgJHtuZXR3b3JrSWR9Lm1kYCk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKHByb2ZpbGVGaWxlLCBjb250ZW50KTtcbiAgfVxuXG4gIGFzeW5jIGdldENhY2hlPFQ+KGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIGNvbnN0IGNhY2hlRmlsZSA9IHBhdGguam9pbihDQUNIRV9ESVIsIGAke2tleX0uanNvbmApO1xuICAgIFxuICAgIGlmICghKGF3YWl0IGZzLnBhdGhFeGlzdHMoY2FjaGVGaWxlKSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZnMucmVhZEpzb24oY2FjaGVGaWxlKTtcbiAgfVxuXG4gIGFzeW5jIHNldENhY2hlPFQ+KGtleTogc3RyaW5nLCBkYXRhOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKENBQ0hFX0RJUiwgYCR7a2V5fS5qc29uYCk7XG4gICAgYXdhaXQgZnMud3JpdGVKc29uKGNhY2hlRmlsZSwgZGF0YSwgeyBzcGFjZXM6IDIgfSk7XG4gIH1cblxuICBhc3luYyBjbGVhckNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIGF3YWl0IGZzLmVtcHR5RGlyKENBQ0hFX0RJUik7XG4gIH1cblxuICBnZXRDb25maWdQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIENPTkZJR19ESVI7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBuZXcgQ29uZmlnTWFuYWdlcigpO1xuIl19
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnTWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvQ29uZmlnTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBNkI7QUFDN0IsdUNBQXlCO0FBQ3pCLDZDQUErQjtBQUUvQiw0Q0FBeUM7QUFFekMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDM0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDekQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDN0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFrQjNELE1BQWEsYUFBYTtJQUExQjtRQUNVLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBMkovQixDQUFDO0lBekpDLEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTztRQUVsRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixlQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQztZQUNILE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQixNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEMsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUU5QixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUN4QyxlQUFNLENBQUMsS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7Z0JBQzdDLE1BQU0sYUFBYSxHQUFpQjtvQkFDbEMsTUFBTSxFQUFFLDZCQUE2QjtvQkFDckMsYUFBYSxFQUFFLE1BQU07aUJBQ3RCLENBQUM7Z0JBQ0YsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoRSxDQUFDO1lBRUQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDMUMsZUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO2dCQUMvQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLHVDQUF1QyxDQUFDLENBQUM7WUFDN0UsQ0FBQztZQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLGVBQU0sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLGVBQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7WUFDekYsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlO1FBQ25CLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQW9CO1FBQ3pDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLGVBQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUNyQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQVc7UUFDekIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDNUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDcEIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBaUI7UUFDcEMsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxTQUFTLE9BQU8sQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFDLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQUMsU0FBaUIsRUFBRSxXQUErQjtRQUN0RSxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLFNBQVMsT0FBTyxDQUFDLENBQUM7UUFDakUsZUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsU0FBaUIsRUFBRSxNQUFlO1FBQzNELE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLGVBQU0sQ0FBQyxLQUFLLENBQUMseUNBQXlDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDbkUsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxDLE1BQU0sV0FBVyxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDckMsTUFBTSxTQUFTLEdBQUcsS0FBSyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxjQUFjLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUUxRSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBRW5GLElBQUksYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDekIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUNqQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsR0FBRyxTQUFTLElBQUksQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQjtRQUN6QixNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixNQUFNLE9BQU8sR0FBRyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELE9BQU8sT0FBTzthQUNYLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDWCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFpQjtRQUN0QyxNQUFNLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNsQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLFNBQVMsT0FBTyxDQUFDLENBQUM7UUFDakUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQWlCO1FBQ2hDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsU0FBUyxLQUFLLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBaUIsRUFBRSxPQUFlO1FBQ2xELE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsU0FBUyxLQUFLLENBQUMsQ0FBQztRQUMvRCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFJLEdBQVc7UUFDM0IsTUFBTSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUSxDQUFJLEdBQVcsRUFBRSxJQUFPO1FBQ3BDLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUN0RCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNkLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYTtRQUNYLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7Q0FDRjtBQTdKRCxzQ0E2SkM7QUFFWSxRQUFBLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IEF1dGhUb2tlbnMgfSBmcm9tICcuLi9kYXRhbW9kZWwnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyJztcblxuY29uc3QgQ09ORklHX0RJUiA9IHBhdGguam9pbihvcy5ob21lZGlyKCksICcuYWdlbnRpY3Bvb2wnKTtcbmNvbnN0IENPTkZJR19GSUxFID0gcGF0aC5qb2luKENPTkZJR19ESVIsICdjb25maWcuanNvbicpO1xuY29uc3QgQ1JFREVOVElBTFNfRElSID0gcGF0aC5qb2luKENPTkZJR19ESVIsICdjcmVkZW50aWFscycpO1xuY29uc3QgUFJPRklMRVNfRElSID0gcGF0aC5qb2luKENPTkZJR19ESVIsICdwcm9maWxlcycpO1xuY29uc3QgQ0FDSEVfRElSID0gcGF0aC5qb2luKENPTkZJR19ESVIsICdjYWNoZScpO1xuY29uc3QgTkVUV09SS1NfRklMRSA9IHBhdGguam9pbihDT05GSUdfRElSLCAnbmV0d29ya3MubWQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBHbG9iYWxDb25maWcge1xuICBhcGlVcmw6IHN0cmluZztcbiAgZGVmYXVsdEZvcm1hdDogJ3Rvb24nIHwgJ2pzb24nO1xuICBodW1hbnNBcGlVcmw/OiBzdHJpbmc7XG4gIGh1bWFuVWlkPzogc3RyaW5nO1xuICBodW1hbkp3dD86IHN0cmluZztcbiAgaHVtYW5Kd3RFeHBpcmVzQXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV0d29ya0NyZWRlbnRpYWxzIHtcbiAgcHVibGljVG9rZW46IHN0cmluZztcbiAgcHJpdmF0ZUtleTogc3RyaW5nO1xuICBqd3Q/OiBzdHJpbmc7XG4gIGV4cGlyZXNBdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENvbmZpZ01hbmFnZXIge1xuICBwcml2YXRlIGluaXRpYWxpemVkID0gZmFsc2U7XG4gIHByaXZhdGUgaW5pdGlhbGl6aW5nID0gZmFsc2U7XG5cbiAgYXN5bmMgaW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCB8fCB0aGlzLmluaXRpYWxpemluZykgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMuaW5pdGlhbGl6aW5nID0gdHJ1ZTtcbiAgICBsb2dnZXIuZGVidWcoYEluaXRpYWxpemluZyBDb25maWdNYW5hZ2VyLiBQYXRoOiAke0NPTkZJR19ESVJ9YCk7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGZzLmVuc3VyZURpcihDT05GSUdfRElSKTtcbiAgICAgIGF3YWl0IGZzLmVuc3VyZURpcihDUkVERU5USUFMU19ESVIpO1xuICAgICAgYXdhaXQgZnMuZW5zdXJlRGlyKFBST0ZJTEVTX0RJUik7XG4gICAgICBhd2FpdCBmcy5lbnN1cmVEaXIoQ0FDSEVfRElSKTtcbiAgICAgIFxuICAgICAgaWYgKCEoYXdhaXQgZnMucGF0aEV4aXN0cyhDT05GSUdfRklMRSkpKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnQ3JlYXRpbmcgZGVmYXVsdCBjb25maWcgZmlsZScpO1xuICAgICAgICBjb25zdCBkZWZhdWx0Q29uZmlnOiBHbG9iYWxDb25maWcgPSB7XG4gICAgICAgICAgYXBpVXJsOiAnaHR0cHM6Ly9hcGkuYWdlbnRpY3Bvb2wubmV0JyxcbiAgICAgICAgICBkZWZhdWx0Rm9ybWF0OiAndG9vbidcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVKc29uKENPTkZJR19GSUxFLCBkZWZhdWx0Q29uZmlnLCB7IHNwYWNlczogMiB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCEoYXdhaXQgZnMucGF0aEV4aXN0cyhORVRXT1JLU19GSUxFKSkpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdDcmVhdGluZyBkZWZhdWx0IG5ldHdvcmtzIGZpbGUnKTtcbiAgICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKE5FVFdPUktTX0ZJTEUsICcjIFJlZ2lzdGVyZWQgQWdlbnRpY1Bvb2wgTmV0d29ya3NcXG5cXG4nKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICBsb2dnZXIuZGVidWcoJ0NvbmZpZ01hbmFnZXIgaW5pdGlhbGl6ZWQnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYENvbmZpZ01hbmFnZXIgaW5pdCBmYWlsZWQ6ICR7ZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogJ1Vua25vd24nfWApO1xuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pbml0aWFsaXppbmcgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRHbG9iYWxDb25maWcoKTogUHJvbWlzZTxHbG9iYWxDb25maWc+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICByZXR1cm4gZnMucmVhZEpzb24oQ09ORklHX0ZJTEUpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUdsb2JhbENvbmZpZyhjb25maWc6IEdsb2JhbENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIGxvZ2dlci5kZWJ1ZygnU2F2aW5nIGdsb2JhbCBjb25maWcnKTtcbiAgICBhd2FpdCBmcy53cml0ZUpzb24oQ09ORklHX0ZJTEUsIGNvbmZpZywgeyBzcGFjZXM6IDIgfSk7XG4gIH1cblxuICBhc3luYyBzZXRBcGlVcmwodXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmdldEdsb2JhbENvbmZpZygpO1xuICAgIGNvbmZpZy5hcGlVcmwgPSB1cmw7XG4gICAgYXdhaXQgdGhpcy5zYXZlR2xvYmFsQ29uZmlnKGNvbmZpZyk7XG4gIH1cblxuICBhc3luYyBnZXRDcmVkZW50aWFscyhuZXR3b3JrSWQ6IHN0cmluZyk6IFByb21pc2U8TmV0d29ya0NyZWRlbnRpYWxzIHwgbnVsbD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCgpO1xuICAgIGNvbnN0IGNyZWRGaWxlID0gcGF0aC5qb2luKENSRURFTlRJQUxTX0RJUiwgYCR7bmV0d29ya0lkfS5qc29uYCk7XG4gICAgXG4gICAgaWYgKCEoYXdhaXQgZnMucGF0aEV4aXN0cyhjcmVkRmlsZSkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgY3JlZHMgPSBhd2FpdCBmcy5yZWFkSnNvbihjcmVkRmlsZSk7XG4gICAgXG4gICAgaWYgKGNyZWRzLmV4cGlyZXNBdCAmJiBEYXRlLm5vdygpID4gY3JlZHMuZXhwaXJlc0F0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGNyZWRzO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUNyZWRlbnRpYWxzKG5ldHdvcmtJZDogc3RyaW5nLCBjcmVkZW50aWFsczogTmV0d29ya0NyZWRlbnRpYWxzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgY3JlZEZpbGUgPSBwYXRoLmpvaW4oQ1JFREVOVElBTFNfRElSLCBgJHtuZXR3b3JrSWR9Lmpzb25gKTtcbiAgICBsb2dnZXIuZGVidWcoYFNhdmluZyBjcmVkZW50aWFscyBmb3IgJHtuZXR3b3JrSWR9YCk7XG4gICAgYXdhaXQgZnMud3JpdGVKc29uKGNyZWRGaWxlLCBjcmVkZW50aWFscywgeyBzcGFjZXM6IDIgfSk7XG4gIH1cblxuICBhc3luYyBhZGRSZWdpc3RlcmVkTmV0d29yayhuZXR3b3JrSWQ6IHN0cmluZywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgbG9nZ2VyLmRlYnVnKGBSZWdpc3RlcmluZyBuZXR3b3JrIGluIGxvY2FsIGhpc3Rvcnk6ICR7bmV0d29ya0lkfWApO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmcy5yZWFkRmlsZShORVRXT1JLU19GSUxFLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICAgIFxuICAgIGNvbnN0IGVudHJ5UHJlZml4ID0gYC0gJHtuZXR3b3JrSWR9YDtcbiAgICBjb25zdCBmdWxsRW50cnkgPSBgLSAke25ldHdvcmtJZH0ke3JlYXNvbiA/IGAgfCBSZWFzb246ICR7cmVhc29ufWAgOiAnJ31gO1xuICAgIFxuICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSBsaW5lcy5maW5kSW5kZXgobGluZSA9PiBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKGVudHJ5UHJlZml4KSk7XG4gICAgXG4gICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XG4gICAgICBsaW5lc1tleGlzdGluZ0luZGV4XSA9IGZ1bGxFbnRyeTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZShORVRXT1JLU19GSUxFLCBsaW5lcy5qb2luKCdcXG4nKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IGZzLmFwcGVuZEZpbGUoTkVUV09SS1NfRklMRSwgYCR7ZnVsbEVudHJ5fVxcbmApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFJlZ2lzdGVyZWROZXR3b3JrcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IGZzLnJlYWRGaWxlKE5FVFdPUktTX0ZJTEUsICd1dGYtOCcpO1xuICAgIHJldHVybiBjb250ZW50XG4gICAgICAuc3BsaXQoJ1xcbicpXG4gICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZS5zdGFydHNXaXRoKCctICcpKVxuICAgICAgLm1hcChsaW5lID0+IGxpbmUucmVwbGFjZSgnLSAnLCAnJykudHJpbSgpKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQ3JlZGVudGlhbHMobmV0d29ya0lkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBjb25zdCBjcmVkRmlsZSA9IHBhdGguam9pbihDUkVERU5USUFMU19ESVIsIGAke25ldHdvcmtJZH0uanNvbmApO1xuICAgIGF3YWl0IGZzLnJlbW92ZShjcmVkRmlsZSk7XG4gIH1cblxuICBhc3luYyBnZXRQcm9maWxlKG5ldHdvcmtJZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgcHJvZmlsZUZpbGUgPSBwYXRoLmpvaW4oUFJPRklMRVNfRElSLCBgJHtuZXR3b3JrSWR9Lm1kYCk7XG4gICAgXG4gICAgaWYgKCEoYXdhaXQgZnMucGF0aEV4aXN0cyhwcm9maWxlRmlsZSkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGZzLnJlYWRGaWxlKHByb2ZpbGVGaWxlLCAndXRmLTgnKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVQcm9maWxlKG5ldHdvcmtJZDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBjb25zdCBwcm9maWxlRmlsZSA9IHBhdGguam9pbihQUk9GSUxFU19ESVIsIGAke25ldHdvcmtJZH0ubWRgKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUocHJvZmlsZUZpbGUsIGNvbnRlbnQpO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q2FjaGU8VD4oa2V5OiBzdHJpbmcpOiBQcm9taXNlPFQgfCBudWxsPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgY29uc3QgY2FjaGVGaWxlID0gcGF0aC5qb2luKENBQ0hFX0RJUiwgYCR7a2V5fS5qc29uYCk7XG4gICAgXG4gICAgaWYgKCEoYXdhaXQgZnMucGF0aEV4aXN0cyhjYWNoZUZpbGUpKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmcy5yZWFkSnNvbihjYWNoZUZpbGUpO1xuICB9XG5cbiAgYXN5bmMgc2V0Q2FjaGU8VD4oa2V5OiBzdHJpbmcsIGRhdGE6IFQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoKTtcbiAgICBjb25zdCBjYWNoZUZpbGUgPSBwYXRoLmpvaW4oQ0FDSEVfRElSLCBgJHtrZXl9Lmpzb25gKTtcbiAgICBhd2FpdCBmcy53cml0ZUpzb24oY2FjaGVGaWxlLCBkYXRhLCB7IHNwYWNlczogMiB9KTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQ2FjaGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KCk7XG4gICAgYXdhaXQgZnMuZW1wdHlEaXIoQ0FDSEVfRElSKTtcbiAgfVxuXG4gIGdldENvbmZpZ1BhdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQ09ORklHX0RJUjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY29uZmlnTWFuYWdlciA9IG5ldyBDb25maWdNYW5hZ2VyKCk7XG4iXX0=
|