@projectcor/maia-components 2.11.69 → 2.11.70-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/Chip/Chip.js +50 -15
- package/lib/components/atoms/Chip/styles.js +9 -5
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +38 -6
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +21 -13
- package/lib/components/atoms/MAIAInput/MAIAInput.js +32 -14
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +297 -46
- package/lib/components/molecules/ChatAIHome/styles.js +63 -26
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +54 -148
- package/lib/components/molecules/ChatAIMessages/newStyles.js +19 -9
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +220 -42
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +4 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +26 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +20 -25
- package/lib/components/molecules/ChatFooter/ChatFooter.js +75 -18
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +22 -7
- package/lib/components/molecules/ChatFooter/styles.js +11 -2
- package/lib/components/molecules/Sidebar/Sidebar.js +11 -7
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
- package/lib/constants/maiaTaskPanelAccess.js +7 -5
- package/lib/constants/taskUrls.js +9 -2
- package/lib/context/global-context.js +8 -1
- package/lib/hooks/index.js +2 -1
- package/lib/hooks/useChatManager/useChatManager.js +149 -125
- package/lib/hooks/useChatMessages/useChatMessages.js +33 -2
- package/lib/hooks/useContextPinPopover.js +235 -0
- package/lib/hooks/useEntitySearch.js +74 -129
- package/lib/hooks/useEvent.js +2 -1
- package/lib/hooks/useFrequentlyAskedQuestions.js +12 -10
- package/lib/hooks/useFrequentlyUsedActions.js +5 -3
- package/lib/hooks/useMentionAllowedTypes.js +11 -1
- package/lib/hooks/useMentionPopover.js +3 -2
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +27 -18
- package/lib/hooks/useProjectSearch.js +4 -28
- package/lib/hooks/useProjectSummaryConfig.js +74 -4
- package/lib/hooks/useRecentClientsSearch.js +4 -34
- package/lib/hooks/useRecentContexts.js +86 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +24 -16
- package/lib/lang/br/index.js +28 -2
- package/lib/lang/en/index.js +28 -2
- package/lib/lang/es/index.js +28 -2
- package/lib/lang/fr/index.js +28 -2
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +6 -3
- package/lib/services/maia/Agents/getAgents.js +225 -175
- package/lib/services/maia/Chats/getChatMessages.js +13 -3
- package/lib/services/maia/Chats/getChatsByUserId.js +10 -2
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +6 -4
- package/lib/services/maia/Orchestrator/orchestrator.js +21 -5
- package/lib/services/maia/RecentContexts/getRecentContexts.js +54 -0
- package/lib/services/maia/RecentContexts/index.js +6 -0
- package/lib/services/maia/index.js +4 -2
- package/lib/services/utils/validateIsMaia.js +2 -2
- package/lib/types/agent.js +1 -1
- package/lib/utils/agentDisplayName.js +9 -1
- package/lib/utils/entityLinkRender.js +135 -0
- package/lib/utils/hitlAnalytics.js +3 -3
- package/lib/utils/renderContextMentions.js +3 -1
- package/package.json +1 -1
|
@@ -20,17 +20,35 @@ import { fetchMaia } from '../client';
|
|
|
20
20
|
import { useUser } from '../../../context/cor-user';
|
|
21
21
|
import { isMaiaCloneAgentsRoleBlocked } from '../../../constants/maiaTaskPanelAccess';
|
|
22
22
|
import { mapCORLang } from '../../../lang/utils';
|
|
23
|
+
var isMaiaAgent = function isMaiaAgent(agent) {
|
|
24
|
+
return agent.type === 'orchestrator';
|
|
25
|
+
};
|
|
26
|
+
var isMarketplaceMaiakerEnabled = function isMarketplaceMaiakerEnabled() {
|
|
27
|
+
return !!window.MAIA_MARKETPLACE_MAIAKER;
|
|
28
|
+
};
|
|
29
|
+
var is403AgentFetchError = function is403AgentFetchError(err) {
|
|
30
|
+
var _error$response, _error$message, _error$message2;
|
|
31
|
+
var error = err;
|
|
32
|
+
return (error === null || error === void 0 || (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.status) === 403 || (error === null || error === void 0 ? void 0 : error.status) === 403 || Boolean(error === null || error === void 0 || (_error$message = error.message) === null || _error$message === void 0 ? void 0 : _error$message.includes("You don't have permission to view agents")) || Boolean(error === null || error === void 0 || (_error$message2 = error.message) === null || _error$message2 === void 0 ? void 0 : _error$message2.includes('Failed fetching data'));
|
|
33
|
+
};
|
|
34
|
+
var mergeAgentsWithoutDuplicates = function mergeAgentsWithoutDuplicates(base, extra) {
|
|
35
|
+
var ids = new Set(base.map(function (agent) {
|
|
36
|
+
return agent.id;
|
|
37
|
+
}));
|
|
38
|
+
var merged = _toConsumableArray(base);
|
|
39
|
+
extra.forEach(function (agent) {
|
|
40
|
+
if (!ids.has(agent.id)) merged.push(agent);
|
|
41
|
+
});
|
|
42
|
+
return merged;
|
|
43
|
+
};
|
|
23
44
|
|
|
24
45
|
/**
|
|
25
|
-
* Ordena los agentes:
|
|
46
|
+
* Ordena los agentes: MAIA primero (si existe), luego favoritos alfabéticamente, luego no favoritos alfabéticamente
|
|
26
47
|
*/
|
|
27
48
|
var sortAgents = function sortAgents(agents) {
|
|
28
|
-
|
|
29
|
-
var cloneAgents = agents.filter(function (ag) {
|
|
30
|
-
return ag.type === 'clone';
|
|
31
|
-
});
|
|
49
|
+
var maiaAgents = agents.filter(isMaiaAgent);
|
|
32
50
|
var otherAgents = agents.filter(function (ag) {
|
|
33
|
-
return ag
|
|
51
|
+
return !isMaiaAgent(ag);
|
|
34
52
|
});
|
|
35
53
|
|
|
36
54
|
// Separar favoritos y no favoritos
|
|
@@ -44,9 +62,7 @@ var sortAgents = function sortAgents(agents) {
|
|
|
44
62
|
}).sort(function (a, b) {
|
|
45
63
|
return a.name.localeCompare(b.name);
|
|
46
64
|
});
|
|
47
|
-
|
|
48
|
-
// Combinar: clones primero, luego favoritos, luego no favoritos
|
|
49
|
-
return cloneAgents.length ? [].concat(_toConsumableArray(cloneAgents), _toConsumableArray(favorites), _toConsumableArray(nonFavorites)) : [].concat(_toConsumableArray(favorites), _toConsumableArray(nonFavorites));
|
|
65
|
+
return maiaAgents.length ? [].concat(_toConsumableArray(maiaAgents), _toConsumableArray(favorites), _toConsumableArray(nonFavorites)) : [].concat(_toConsumableArray(favorites), _toConsumableArray(nonFavorites));
|
|
50
66
|
};
|
|
51
67
|
export var useGetAgents = function useGetAgents(_ref) {
|
|
52
68
|
var selectAgent = _ref.selectAgent,
|
|
@@ -87,7 +103,6 @@ export var useGetAgents = function useGetAgents(_ref) {
|
|
|
87
103
|
var agentsRef = useRef(agents);
|
|
88
104
|
var preSearchAgentsRef = useRef(null);
|
|
89
105
|
agentsRef.current = agents;
|
|
90
|
-
var canFetchCloneAgents = !isMaiaCloneAgentsRoleBlocked(user, section);
|
|
91
106
|
var addAgent = useCallback(function (newAgent, options) {
|
|
92
107
|
setAgents(function (prev) {
|
|
93
108
|
// Verificar si el agente ya existe para evitar duplicados
|
|
@@ -185,150 +200,195 @@ export var useGetAgents = function useGetAgents(_ref) {
|
|
|
185
200
|
}
|
|
186
201
|
}, [agents.data, selectAgent]);
|
|
187
202
|
var handleGetAgents = useCallback(/*#__PURE__*/function () {
|
|
188
|
-
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function
|
|
203
|
+
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(agentToSelect) {
|
|
189
204
|
var _agentToSelect$id;
|
|
190
|
-
var requestKey, isMultiAgents, agentParsed, hasMore, nextOffset,
|
|
191
|
-
return _regeneratorRuntime.wrap(function (
|
|
192
|
-
while (1) switch (
|
|
205
|
+
var requestKey, isMultiAgents, agentParsed, hasMore, nextOffset, cloneAgentsRoleBlocked, canFetchCloneAgents, fetchGlobalCloneAgents, customAgents, customHasMore, customNextOffset, is403, maiaAgents, loadCloneAgents, loadCustomAgents, queryParams, queryString, path, response, data, globalCloneAgents, _responseError$respon, _responseError$messag, _responseError$messag2, is403Error, _agentParsed, _agentParsed2, _lastSelectedAgentRef, _lastSelectedAgentRef2, availableAgents, _availableAgents, firstAgent, _lastSelectedAgentRef3, _availableAgents2, _availableAgents3, firstAvailableAgent, _t4, _t5;
|
|
206
|
+
return _regeneratorRuntime.wrap(function (_context4) {
|
|
207
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
193
208
|
case 0:
|
|
194
209
|
if (!isRefreshingRef.current) {
|
|
195
|
-
|
|
210
|
+
_context4.next = 1;
|
|
196
211
|
break;
|
|
197
212
|
}
|
|
198
|
-
return
|
|
213
|
+
return _context4.abrupt("return");
|
|
199
214
|
case 1:
|
|
200
215
|
requestKey = (agentToSelect === null || agentToSelect === void 0 || (_agentToSelect$id = agentToSelect.id) === null || _agentToSelect$id === void 0 ? void 0 : _agentToSelect$id.toString()) || 'default';
|
|
201
216
|
if (!(lastRequestRef.current === requestKey && !loading)) {
|
|
202
|
-
|
|
217
|
+
_context4.next = 2;
|
|
203
218
|
break;
|
|
204
219
|
}
|
|
205
|
-
return
|
|
220
|
+
return _context4.abrupt("return");
|
|
206
221
|
case 2:
|
|
207
222
|
isRefreshingRef.current = true;
|
|
208
223
|
lastRequestRef.current = requestKey;
|
|
209
224
|
setLoading(true);
|
|
210
225
|
setError(null);
|
|
211
226
|
isMultiAgents = !!window.MAIA_CHAT_AI_FEATURE_ACCESS && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
|
|
212
|
-
|
|
227
|
+
_context4.prev = 3;
|
|
213
228
|
agentParsed = [];
|
|
214
229
|
hasMore = false;
|
|
215
|
-
nextOffset = null;
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
}
|
|
220
|
-
// Query clone (Maia) y custom son independientes → se disparan en paralelo.
|
|
221
|
-
cloneAgents = [];
|
|
222
|
-
customAgents = [];
|
|
223
|
-
customHasMore = false;
|
|
224
|
-
customNextOffset = null;
|
|
225
|
-
is403 = function is403(err) {
|
|
226
|
-
var _err$response, _err$message, _err$message2;
|
|
227
|
-
return (err === null || err === void 0 || (_err$response = err.response) === null || _err$response === void 0 ? void 0 : _err$response.status) === 403 || (err === null || err === void 0 ? void 0 : err.status) === 403 || (err === null || err === void 0 || (_err$message = err.message) === null || _err$message === void 0 ? void 0 : _err$message.includes("You don't have permission to view agents")) || (err === null || err === void 0 || (_err$message2 = err.message) === null || _err$message2 === void 0 ? void 0 : _err$message2.includes('Failed fetching data'));
|
|
228
|
-
}; // fetchCOR lanza esto para 403 sin 'Access denied'
|
|
229
|
-
loadCloneAgents = /*#__PURE__*/function () {
|
|
230
|
+
nextOffset = null;
|
|
231
|
+
cloneAgentsRoleBlocked = isMaiaCloneAgentsRoleBlocked(user, section);
|
|
232
|
+
canFetchCloneAgents = !cloneAgentsRoleBlocked;
|
|
233
|
+
fetchGlobalCloneAgents = /*#__PURE__*/function () {
|
|
230
234
|
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
231
|
-
var
|
|
235
|
+
var cloneResponse, cloneData, _t;
|
|
232
236
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
233
237
|
while (1) switch (_context.prev = _context.next) {
|
|
234
238
|
case 0:
|
|
235
|
-
if (canFetchCloneAgents) {
|
|
239
|
+
if (!(!isMarketplaceMaiakerEnabled() || !canFetchCloneAgents)) {
|
|
236
240
|
_context.next = 1;
|
|
237
241
|
break;
|
|
238
242
|
}
|
|
239
|
-
return _context.abrupt("return");
|
|
243
|
+
return _context.abrupt("return", []);
|
|
240
244
|
case 1:
|
|
241
245
|
_context.prev = 1;
|
|
242
|
-
orderParam = section === 'client' ? '&order=client,project' : section === 'project' || section === 'header' || section === 'task' ? '&order=project,client' : '';
|
|
243
246
|
_context.next = 2;
|
|
244
247
|
return fetchMaia({
|
|
245
|
-
path: "agents?agent_type=clone&lang=".concat(mapCORLang(i18n.language))
|
|
248
|
+
path: "agents?agent_type=clone&entity=global&lang=".concat(mapCORLang(i18n.language)),
|
|
246
249
|
method: 'GET'
|
|
247
250
|
});
|
|
248
251
|
case 2:
|
|
249
|
-
|
|
252
|
+
cloneResponse = _context.sent;
|
|
250
253
|
_context.next = 3;
|
|
251
|
-
return
|
|
254
|
+
return cloneResponse.json();
|
|
252
255
|
case 3:
|
|
253
|
-
|
|
254
|
-
|
|
256
|
+
cloneData = _context.sent;
|
|
257
|
+
return _context.abrupt("return", (cloneData.data || []).filter(function (ag) {
|
|
255
258
|
return ag.type === 'clone';
|
|
256
|
-
}))
|
|
257
|
-
_context.next = 5;
|
|
258
|
-
break;
|
|
259
|
+
}));
|
|
259
260
|
case 4:
|
|
260
261
|
_context.prev = 4;
|
|
261
262
|
_t = _context["catch"](1);
|
|
262
|
-
if (
|
|
263
|
+
if (!is403AgentFetchError(_t)) {
|
|
263
264
|
_context.next = 5;
|
|
264
265
|
break;
|
|
265
266
|
}
|
|
266
|
-
|
|
267
|
+
return _context.abrupt("return", []);
|
|
267
268
|
case 5:
|
|
269
|
+
throw _t;
|
|
270
|
+
case 6:
|
|
268
271
|
case "end":
|
|
269
272
|
return _context.stop();
|
|
270
273
|
}
|
|
271
274
|
}, _callee, null, [[1, 4]]);
|
|
272
275
|
}));
|
|
273
|
-
return function
|
|
276
|
+
return function fetchGlobalCloneAgents() {
|
|
274
277
|
return _ref6.apply(this, arguments);
|
|
275
278
|
};
|
|
276
|
-
}();
|
|
277
|
-
|
|
279
|
+
}(); // Si tiene feature access multi agents, hacer dos queries (Maia + custom) en cualquier sección
|
|
280
|
+
if (!isMultiAgents) {
|
|
281
|
+
_context4.next = 5;
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
// Query clone (Maia) y custom son independientes → se disparan en paralelo.
|
|
285
|
+
customAgents = [];
|
|
286
|
+
customHasMore = false;
|
|
287
|
+
customNextOffset = null;
|
|
288
|
+
is403 = is403AgentFetchError;
|
|
289
|
+
maiaAgents = [];
|
|
290
|
+
loadCloneAgents = /*#__PURE__*/function () {
|
|
278
291
|
var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
279
|
-
var
|
|
292
|
+
var _maiaData$data, maiaResponse, maiaData, globalCloneAgents, _t2;
|
|
280
293
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
281
294
|
while (1) switch (_context2.prev = _context2.next) {
|
|
282
295
|
case 0:
|
|
283
|
-
|
|
284
|
-
|
|
296
|
+
if (canFetchCloneAgents) {
|
|
297
|
+
_context2.next = 1;
|
|
298
|
+
break;
|
|
299
|
+
}
|
|
300
|
+
return _context2.abrupt("return");
|
|
301
|
+
case 1:
|
|
302
|
+
_context2.prev = 1;
|
|
303
|
+
_context2.next = 2;
|
|
304
|
+
return fetchMaia({
|
|
305
|
+
path: "agents?agent_type=orchestrator&lang=".concat(mapCORLang(i18n.language)),
|
|
306
|
+
method: 'GET'
|
|
307
|
+
});
|
|
308
|
+
case 2:
|
|
309
|
+
maiaResponse = _context2.sent;
|
|
310
|
+
_context2.next = 3;
|
|
311
|
+
return maiaResponse.json();
|
|
312
|
+
case 3:
|
|
313
|
+
maiaData = _context2.sent;
|
|
314
|
+
maiaAgents = ((_maiaData$data = maiaData.data) === null || _maiaData$data === void 0 ? void 0 : _maiaData$data.filter(isMaiaAgent)) || [];
|
|
315
|
+
_context2.next = 4;
|
|
316
|
+
return fetchGlobalCloneAgents();
|
|
317
|
+
case 4:
|
|
318
|
+
globalCloneAgents = _context2.sent;
|
|
319
|
+
maiaAgents = mergeAgentsWithoutDuplicates(maiaAgents, globalCloneAgents);
|
|
320
|
+
_context2.next = 6;
|
|
321
|
+
break;
|
|
322
|
+
case 5:
|
|
323
|
+
_context2.prev = 5;
|
|
324
|
+
_t2 = _context2["catch"](1);
|
|
325
|
+
if (is403(_t2)) {
|
|
326
|
+
_context2.next = 6;
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
throw _t2;
|
|
330
|
+
case 6:
|
|
331
|
+
case "end":
|
|
332
|
+
return _context2.stop();
|
|
333
|
+
}
|
|
334
|
+
}, _callee2, null, [[1, 5]]);
|
|
335
|
+
}));
|
|
336
|
+
return function loadCloneAgents() {
|
|
337
|
+
return _ref7.apply(this, arguments);
|
|
338
|
+
};
|
|
339
|
+
}();
|
|
340
|
+
loadCustomAgents = /*#__PURE__*/function () {
|
|
341
|
+
var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
342
|
+
var customResponse, customData, _t3;
|
|
343
|
+
return _regeneratorRuntime.wrap(function (_context3) {
|
|
344
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
345
|
+
case 0:
|
|
346
|
+
_context3.prev = 0;
|
|
347
|
+
_context3.next = 1;
|
|
285
348
|
return fetchMaia({
|
|
286
349
|
path: 'agents?agent_type=custom&limit=7&offset=0',
|
|
287
350
|
method: 'GET'
|
|
288
351
|
});
|
|
289
352
|
case 1:
|
|
290
|
-
customResponse =
|
|
291
|
-
|
|
353
|
+
customResponse = _context3.sent;
|
|
354
|
+
_context3.next = 2;
|
|
292
355
|
return customResponse.json();
|
|
293
356
|
case 2:
|
|
294
|
-
customData =
|
|
357
|
+
customData = _context3.sent;
|
|
295
358
|
customAgents = customData.data || [];
|
|
296
359
|
customHasMore = customData.has_more || false;
|
|
297
360
|
customNextOffset = customData.next_offset || null;
|
|
298
|
-
|
|
361
|
+
_context3.next = 4;
|
|
299
362
|
break;
|
|
300
363
|
case 3:
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
if (is403(
|
|
304
|
-
|
|
364
|
+
_context3.prev = 3;
|
|
365
|
+
_t3 = _context3["catch"](0);
|
|
366
|
+
if (is403(_t3)) {
|
|
367
|
+
_context3.next = 4;
|
|
305
368
|
break;
|
|
306
369
|
}
|
|
307
|
-
throw
|
|
370
|
+
throw _t3;
|
|
308
371
|
case 4:
|
|
309
372
|
case "end":
|
|
310
|
-
return
|
|
373
|
+
return _context3.stop();
|
|
311
374
|
}
|
|
312
|
-
},
|
|
375
|
+
}, _callee3, null, [[0, 3]]);
|
|
313
376
|
}));
|
|
314
377
|
return function loadCustomAgents() {
|
|
315
|
-
return
|
|
378
|
+
return _ref8.apply(this, arguments);
|
|
316
379
|
};
|
|
317
380
|
}();
|
|
318
|
-
|
|
381
|
+
_context4.next = 4;
|
|
319
382
|
return Promise.all([loadCloneAgents(), loadCustomAgents()]);
|
|
320
383
|
case 4:
|
|
321
384
|
// Combinar: agentes clone primero, luego los custom (si existen)
|
|
322
385
|
// Si el usuario tiene un rol deshabilitado, no incluir cloneAgents
|
|
323
386
|
if (!canFetchCloneAgents) {
|
|
324
|
-
// Rol sin acceso a clones (p. ej. colaborador
|
|
387
|
+
// Rol sin acceso a clones (p. ej. freelancer/cliente o colaborador en project/client): solo customAgents
|
|
325
388
|
// Si customAgents está vacío (por 403), agentParsed será []
|
|
326
389
|
agentParsed = customAgents;
|
|
327
390
|
} else {
|
|
328
|
-
|
|
329
|
-
// Si customAgents está vacío (por 403) pero hay cloneAgents, agentParsed tendrá los clones
|
|
330
|
-
// Si no hay cloneAgents ni customAgents, agentParsed será []
|
|
331
|
-
agentParsed = cloneAgents.length ? [].concat(_toConsumableArray(cloneAgents), _toConsumableArray(customAgents)) : customAgents;
|
|
391
|
+
agentParsed = maiaAgents.length ? [].concat(_toConsumableArray(maiaAgents), _toConsumableArray(customAgents)) : customAgents;
|
|
332
392
|
}
|
|
333
393
|
// Ordenar: Maia primero, luego favoritos alfabéticamente, luego no favoritos alfabéticamente
|
|
334
394
|
agentParsed = sortAgents(agentParsed);
|
|
@@ -344,64 +404,60 @@ export var useGetAgents = function useGetAgents(_ref) {
|
|
|
344
404
|
if (agentParsed.length === 0) {
|
|
345
405
|
setError(null);
|
|
346
406
|
}
|
|
347
|
-
|
|
407
|
+
_context4.next = 12;
|
|
348
408
|
break;
|
|
349
409
|
case 5:
|
|
350
|
-
|
|
351
|
-
if (shouldRequestCloneAgents) {
|
|
352
|
-
_context3.next = 6;
|
|
353
|
-
break;
|
|
354
|
-
}
|
|
355
|
-
setAgents({
|
|
356
|
-
data: [],
|
|
357
|
-
has_more: false,
|
|
358
|
-
next_offset: null
|
|
359
|
-
});
|
|
360
|
-
setError(null);
|
|
361
|
-
_context3.next = 12;
|
|
362
|
-
break;
|
|
363
|
-
case 6:
|
|
410
|
+
// Lógica para project, client o header sin multiAgents (mismo criterio de orden project/client; header añade paginación)
|
|
364
411
|
queryParams = new URLSearchParams();
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
412
|
+
if (section === 'project' || section === 'client' || section === 'header' || section === 'task') {
|
|
413
|
+
queryParams.append('agent_type', 'orchestrator');
|
|
414
|
+
queryParams.append('lang', mapCORLang(i18n.language));
|
|
415
|
+
if (section === 'header') {
|
|
416
|
+
queryParams.append('limit', '7');
|
|
417
|
+
queryParams.append('offset', '0');
|
|
418
|
+
}
|
|
371
419
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
420
|
+
queryString = queryParams.toString();
|
|
421
|
+
path = "agents".concat(queryString ? "?".concat(queryString) : '');
|
|
422
|
+
_context4.prev = 6;
|
|
423
|
+
_context4.next = 7;
|
|
375
424
|
return fetchMaia({
|
|
376
425
|
path: path,
|
|
377
426
|
method: 'GET'
|
|
378
427
|
});
|
|
379
|
-
case
|
|
380
|
-
response =
|
|
381
|
-
|
|
428
|
+
case 7:
|
|
429
|
+
response = _context4.sent;
|
|
430
|
+
_context4.next = 8;
|
|
382
431
|
return response.json();
|
|
383
|
-
case
|
|
384
|
-
data =
|
|
432
|
+
case 8:
|
|
433
|
+
data = _context4.sent;
|
|
434
|
+
// data.data ya contiene el/los agentes orquestadores de la query agent_type=orchestrator
|
|
385
435
|
agentParsed = data.data || [];
|
|
436
|
+
_context4.next = 9;
|
|
437
|
+
return fetchGlobalCloneAgents();
|
|
438
|
+
case 9:
|
|
439
|
+
globalCloneAgents = _context4.sent;
|
|
440
|
+
agentParsed = mergeAgentsWithoutDuplicates(agentParsed, globalCloneAgents);
|
|
441
|
+
// Ordenar: Maia primero, luego favoritos alfabéticamente, luego no favoritos alfabéticamente
|
|
386
442
|
agentParsed = sortAgents(agentParsed);
|
|
387
443
|
hasMore = data.has_more;
|
|
388
444
|
nextOffset = data.next_offset;
|
|
389
445
|
setAgents(_objectSpread(_objectSpread({}, data), {}, {
|
|
390
446
|
data: agentParsed
|
|
391
447
|
}));
|
|
392
|
-
|
|
448
|
+
_context4.next = 12;
|
|
393
449
|
break;
|
|
394
450
|
case 10:
|
|
395
|
-
|
|
396
|
-
|
|
451
|
+
_context4.prev = 10;
|
|
452
|
+
_t4 = _context4["catch"](6);
|
|
397
453
|
// Verificar si el error es 403
|
|
398
454
|
// fetchCOR puede lanzar diferentes tipos de errores:
|
|
399
455
|
// 1. Error con errorData.detail si incluye 'Access denied'
|
|
400
456
|
// 2. Error genérico 'Failed fetching data' si es 403 pero no incluye 'Access denied'
|
|
401
457
|
// 3. Necesitamos verificar el status code si está disponible
|
|
402
|
-
is403Error = (
|
|
458
|
+
is403Error = (_t4 === null || _t4 === void 0 || (_responseError$respon = _t4.response) === null || _responseError$respon === void 0 ? void 0 : _responseError$respon.status) === 403 || (_t4 === null || _t4 === void 0 ? void 0 : _t4.status) === 403 || (_t4 === null || _t4 === void 0 || (_responseError$messag = _t4.message) === null || _responseError$messag === void 0 ? void 0 : _responseError$messag.includes("You don't have permission to view agents")) || (_t4 === null || _t4 === void 0 || (_responseError$messag2 = _t4.message) === null || _responseError$messag2 === void 0 ? void 0 : _responseError$messag2.includes('Failed fetching data')); // fetchCOR lanza esto para 403 sin 'Access denied'
|
|
403
459
|
if (!is403Error) {
|
|
404
|
-
|
|
460
|
+
_context4.next = 11;
|
|
405
461
|
break;
|
|
406
462
|
}
|
|
407
463
|
// Si es 403, establecer agentes vacíos y continuar
|
|
@@ -411,10 +467,10 @@ export var useGetAgents = function useGetAgents(_ref) {
|
|
|
411
467
|
next_offset: null
|
|
412
468
|
});
|
|
413
469
|
setError(null);
|
|
414
|
-
|
|
470
|
+
_context4.next = 12;
|
|
415
471
|
break;
|
|
416
472
|
case 11:
|
|
417
|
-
throw
|
|
473
|
+
throw _t4;
|
|
418
474
|
case 12:
|
|
419
475
|
// Lógica de select agent - Solo seleccionar si hay agentes disponibles
|
|
420
476
|
if (agentParsed.length > 0) {
|
|
@@ -428,8 +484,8 @@ export var useGetAgents = function useGetAgents(_ref) {
|
|
|
428
484
|
} else if ((_agentParsed = agentParsed) !== null && _agentParsed !== void 0 && _agentParsed[0] && (!agent || !agentParsed.find(function (a) {
|
|
429
485
|
return a.id === agent.id;
|
|
430
486
|
}))) {
|
|
431
|
-
availableAgents = window.MAIA_CHAT_AI_FEATURE_ACCESS &&
|
|
432
|
-
return agentItem
|
|
487
|
+
availableAgents = window.MAIA_CHAT_AI_FEATURE_ACCESS && !cloneAgentsRoleBlocked ? agentParsed : agentParsed.filter(function (agentItem) {
|
|
488
|
+
return !isMaiaAgent(agentItem);
|
|
433
489
|
});
|
|
434
490
|
_availableAgents = _slicedToArray(availableAgents, 1), firstAgent = _availableAgents[0];
|
|
435
491
|
if (firstAgent && ((_lastSelectedAgentRef2 = lastSelectedAgentRef.current) === null || _lastSelectedAgentRef2 === void 0 ? void 0 : _lastSelectedAgentRef2.id) !== firstAgent.id) {
|
|
@@ -437,8 +493,8 @@ export var useGetAgents = function useGetAgents(_ref) {
|
|
|
437
493
|
selectAgent(firstAgent);
|
|
438
494
|
}
|
|
439
495
|
} else if (agentToSelect && (_agentParsed2 = agentParsed) !== null && _agentParsed2 !== void 0 && _agentParsed2.length) {
|
|
440
|
-
_availableAgents2 = window.MAIA_CHAT_AI_FEATURE_ACCESS &&
|
|
441
|
-
return agentItem
|
|
496
|
+
_availableAgents2 = window.MAIA_CHAT_AI_FEATURE_ACCESS && !cloneAgentsRoleBlocked ? agentParsed : agentParsed.filter(function (agentItem) {
|
|
497
|
+
return !isMaiaAgent(agentItem);
|
|
442
498
|
});
|
|
443
499
|
_availableAgents3 = _slicedToArray(_availableAgents2, 1), firstAvailableAgent = _availableAgents3[0];
|
|
444
500
|
if (firstAvailableAgent && ((_lastSelectedAgentRef3 = lastSelectedAgentRef.current) === null || _lastSelectedAgentRef3 === void 0 ? void 0 : _lastSelectedAgentRef3.id) !== firstAvailableAgent.id) {
|
|
@@ -448,64 +504,64 @@ export var useGetAgents = function useGetAgents(_ref) {
|
|
|
448
504
|
}
|
|
449
505
|
}
|
|
450
506
|
setLoading(false);
|
|
451
|
-
|
|
507
|
+
_context4.next = 14;
|
|
452
508
|
break;
|
|
453
509
|
case 13:
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
setError(
|
|
510
|
+
_context4.prev = 13;
|
|
511
|
+
_t5 = _context4["catch"](3);
|
|
512
|
+
setError(_t5 instanceof Error ? _t5.message : 'An unknown error occurred');
|
|
457
513
|
setLoading(false);
|
|
458
514
|
case 14:
|
|
459
|
-
|
|
515
|
+
_context4.prev = 14;
|
|
460
516
|
isRefreshingRef.current = false;
|
|
461
517
|
setTimeout(function () {
|
|
462
518
|
if (!isRefreshingRef.current) {
|
|
463
519
|
lastRequestRef.current = null;
|
|
464
520
|
}
|
|
465
521
|
}, 100);
|
|
466
|
-
return
|
|
522
|
+
return _context4.finish(14);
|
|
467
523
|
case 15:
|
|
468
524
|
case "end":
|
|
469
|
-
return
|
|
525
|
+
return _context4.stop();
|
|
470
526
|
}
|
|
471
|
-
},
|
|
527
|
+
}, _callee4, null, [[3, 13, 14, 15], [6, 10]]);
|
|
472
528
|
}));
|
|
473
529
|
return function (_x) {
|
|
474
530
|
return _ref5.apply(this, arguments);
|
|
475
531
|
};
|
|
476
|
-
}(), [selectAgent, section, agent, loading
|
|
532
|
+
}(), [selectAgent, section, agent, loading]);
|
|
477
533
|
var searchCustomAgents = useCallback(/*#__PURE__*/function () {
|
|
478
|
-
var
|
|
479
|
-
var response, data,
|
|
480
|
-
return _regeneratorRuntime.wrap(function (
|
|
481
|
-
while (1) switch (
|
|
534
|
+
var _ref9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(query) {
|
|
535
|
+
var response, data, _t6;
|
|
536
|
+
return _regeneratorRuntime.wrap(function (_context5) {
|
|
537
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
482
538
|
case 0:
|
|
483
539
|
if (query) {
|
|
484
|
-
|
|
540
|
+
_context5.next = 1;
|
|
485
541
|
break;
|
|
486
542
|
}
|
|
487
543
|
if (preSearchAgentsRef.current) {
|
|
488
544
|
setAgents(preSearchAgentsRef.current);
|
|
489
545
|
preSearchAgentsRef.current = null;
|
|
490
546
|
}
|
|
491
|
-
return
|
|
547
|
+
return _context5.abrupt("return");
|
|
492
548
|
case 1:
|
|
493
549
|
if (!preSearchAgentsRef.current) {
|
|
494
550
|
preSearchAgentsRef.current = agentsRef.current;
|
|
495
551
|
}
|
|
496
552
|
setSearchLoading(true);
|
|
497
|
-
|
|
498
|
-
|
|
553
|
+
_context5.prev = 2;
|
|
554
|
+
_context5.next = 3;
|
|
499
555
|
return fetchMaia({
|
|
500
556
|
path: "agents?agent_type=custom&limit=20&offset=0&q=".concat(encodeURIComponent(query)),
|
|
501
557
|
method: 'GET'
|
|
502
558
|
});
|
|
503
559
|
case 3:
|
|
504
|
-
response =
|
|
505
|
-
|
|
560
|
+
response = _context5.sent;
|
|
561
|
+
_context5.next = 4;
|
|
506
562
|
return response.json();
|
|
507
563
|
case 4:
|
|
508
|
-
data =
|
|
564
|
+
data = _context5.sent;
|
|
509
565
|
setAgents(function (prev) {
|
|
510
566
|
var cloneAgents = prev.data.filter(function (ag) {
|
|
511
567
|
return ag.type === 'clone';
|
|
@@ -517,93 +573,87 @@ export var useGetAgents = function useGetAgents(_ref) {
|
|
|
517
573
|
next_offset: null
|
|
518
574
|
};
|
|
519
575
|
});
|
|
520
|
-
|
|
576
|
+
_context5.next = 6;
|
|
521
577
|
break;
|
|
522
578
|
case 5:
|
|
523
|
-
|
|
524
|
-
|
|
579
|
+
_context5.prev = 5;
|
|
580
|
+
_t6 = _context5["catch"](2);
|
|
525
581
|
handleSnackbarError(t('snackbar.loadMoreAgents.error'));
|
|
526
582
|
case 6:
|
|
527
|
-
|
|
583
|
+
_context5.prev = 6;
|
|
528
584
|
setSearchLoading(false);
|
|
529
|
-
return
|
|
585
|
+
return _context5.finish(6);
|
|
530
586
|
case 7:
|
|
531
587
|
case "end":
|
|
532
|
-
return
|
|
588
|
+
return _context5.stop();
|
|
533
589
|
}
|
|
534
|
-
},
|
|
590
|
+
}, _callee5, null, [[2, 5, 6, 7]]);
|
|
535
591
|
}));
|
|
536
592
|
return function (_x2) {
|
|
537
|
-
return
|
|
593
|
+
return _ref9.apply(this, arguments);
|
|
538
594
|
};
|
|
539
595
|
}(), []);
|
|
540
|
-
var loadMoreAgents = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function
|
|
541
|
-
var isMultiAgents, canLoadMore, path, queryParams, response, data,
|
|
542
|
-
return _regeneratorRuntime.wrap(function (
|
|
543
|
-
while (1) switch (
|
|
596
|
+
var loadMoreAgents = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
597
|
+
var isMultiAgents, canLoadMore, path, queryParams, response, data, _t7;
|
|
598
|
+
return _regeneratorRuntime.wrap(function (_context6) {
|
|
599
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
544
600
|
case 0:
|
|
545
601
|
isMultiAgents = !!window.MAIA_CHAT_AI_FEATURE_ACCESS && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS; // Cargar más: en header siempre; en project solo si isMultiAgents (porque solo entonces hay paginación de custom)
|
|
546
602
|
canLoadMore = section === 'header' || isMultiAgents;
|
|
547
603
|
if (!(!canLoadMore || !agents.has_more || !agents.next_offset || loadingMore)) {
|
|
548
|
-
|
|
604
|
+
_context6.next = 1;
|
|
549
605
|
break;
|
|
550
606
|
}
|
|
551
|
-
return
|
|
607
|
+
return _context6.abrupt("return");
|
|
552
608
|
case 1:
|
|
553
609
|
setLoadingMore(true);
|
|
554
610
|
setError(null);
|
|
555
|
-
|
|
611
|
+
_context6.prev = 2;
|
|
556
612
|
// Si es multiAgents, solo cargar agents custom (Maia ya está cargado)
|
|
557
613
|
if (isMultiAgents) {
|
|
558
614
|
// Mantener cantidad impar de cards: primera carga 7, siguientes +6 (7, 13, 19, ...)
|
|
559
615
|
path = "agents?agent_type=custom&limit=6&offset=".concat(agents.next_offset);
|
|
560
616
|
} else {
|
|
561
|
-
// Si no es multiAgents, cargar más agentes
|
|
617
|
+
// Si no es multiAgents, cargar más agentes orquestadores (MAIA)
|
|
562
618
|
queryParams = new URLSearchParams();
|
|
563
|
-
queryParams.append('agent_type', '
|
|
619
|
+
queryParams.append('agent_type', 'orchestrator');
|
|
564
620
|
queryParams.append('lang', mapCORLang(i18n.language));
|
|
565
|
-
queryParams.append('order', 'project,client');
|
|
566
621
|
queryParams.append('limit', '7');
|
|
567
622
|
queryParams.append('offset', agents.next_offset.toString());
|
|
568
623
|
path = "agents?".concat(queryParams.toString());
|
|
569
624
|
}
|
|
570
|
-
|
|
625
|
+
_context6.next = 3;
|
|
571
626
|
return fetchMaia({
|
|
572
627
|
path: path,
|
|
573
628
|
method: 'GET'
|
|
574
629
|
});
|
|
575
630
|
case 3:
|
|
576
|
-
response =
|
|
577
|
-
|
|
631
|
+
response = _context6.sent;
|
|
632
|
+
_context6.next = 4;
|
|
578
633
|
return response.json();
|
|
579
634
|
case 4:
|
|
580
|
-
data =
|
|
635
|
+
data = _context6.sent;
|
|
581
636
|
// Acumular agentes, excluyendo duplicados
|
|
582
637
|
setAgents(function (prev) {
|
|
583
638
|
if (isMultiAgents) {
|
|
584
|
-
// Lógica para multiAgents: separar
|
|
585
|
-
|
|
586
|
-
var existingCloneAgents = prev.data.filter(function (ag) {
|
|
587
|
-
return ag.type === 'clone';
|
|
588
|
-
});
|
|
639
|
+
// Lógica para multiAgents: separar MAIA y custom
|
|
640
|
+
var existingMaiaAgents = prev.data.filter(isMaiaAgent);
|
|
589
641
|
|
|
590
|
-
// Obtener IDs existentes (excluyendo
|
|
642
|
+
// Obtener IDs existentes (excluyendo MAIA)
|
|
591
643
|
var _existingIds = new Set(prev.data.filter(function (ag) {
|
|
592
|
-
return ag
|
|
644
|
+
return !isMaiaAgent(ag);
|
|
593
645
|
}).map(function (ag) {
|
|
594
646
|
return ag.id;
|
|
595
647
|
}));
|
|
596
648
|
|
|
597
|
-
// Filtrar nuevos agents que no estén ya en la lista (y que no sean
|
|
649
|
+
// Filtrar nuevos agents que no estén ya en la lista (y que no sean MAIA)
|
|
598
650
|
var _newAgents = data.data.filter(function (ag) {
|
|
599
|
-
return ag
|
|
651
|
+
return !isMaiaAgent(ag) && !_existingIds.has(ag.id);
|
|
600
652
|
});
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
var _newData = existingCloneAgents.length ? [].concat(_toConsumableArray(existingCloneAgents), _toConsumableArray(prev.data.filter(function (ag) {
|
|
604
|
-
return ag.type !== 'clone';
|
|
653
|
+
var _newData = existingMaiaAgents.length ? [].concat(_toConsumableArray(existingMaiaAgents), _toConsumableArray(prev.data.filter(function (ag) {
|
|
654
|
+
return !isMaiaAgent(ag);
|
|
605
655
|
})), _toConsumableArray(_newAgents)) : [].concat(_toConsumableArray(prev.data.filter(function (ag) {
|
|
606
|
-
return ag
|
|
656
|
+
return !isMaiaAgent(ag);
|
|
607
657
|
})), _toConsumableArray(_newAgents));
|
|
608
658
|
|
|
609
659
|
// Ordenar: Maia primero, luego favoritos alfabéticamente, luego no favoritos alfabéticamente
|
|
@@ -614,7 +664,7 @@ export var useGetAgents = function useGetAgents(_ref) {
|
|
|
614
664
|
next_offset: data.next_offset
|
|
615
665
|
};
|
|
616
666
|
}
|
|
617
|
-
// Lógica para !isMultiAgents:
|
|
667
|
+
// Lógica para !isMultiAgents: agregar evitando duplicados
|
|
618
668
|
var existingIds = new Set(prev.data.map(function (ag) {
|
|
619
669
|
return ag.id;
|
|
620
670
|
}));
|
|
@@ -632,18 +682,18 @@ export var useGetAgents = function useGetAgents(_ref) {
|
|
|
632
682
|
};
|
|
633
683
|
});
|
|
634
684
|
setLoadingMore(false);
|
|
635
|
-
|
|
685
|
+
_context6.next = 6;
|
|
636
686
|
break;
|
|
637
687
|
case 5:
|
|
638
|
-
|
|
639
|
-
|
|
688
|
+
_context6.prev = 5;
|
|
689
|
+
_t7 = _context6["catch"](2);
|
|
640
690
|
handleSnackbarError(t('snackbar.loadMoreAgents.error'));
|
|
641
691
|
setLoadingMore(false);
|
|
642
692
|
case 6:
|
|
643
693
|
case "end":
|
|
644
|
-
return
|
|
694
|
+
return _context6.stop();
|
|
645
695
|
}
|
|
646
|
-
},
|
|
696
|
+
}, _callee6, null, [[2, 5]]);
|
|
647
697
|
})), [section, agents.has_more, agents.next_offset, loadingMore, i18n.language]);
|
|
648
698
|
return {
|
|
649
699
|
agents: agents,
|
|
@@ -662,4 +712,4 @@ export var useGetAgents = function useGetAgents(_ref) {
|
|
|
662
712
|
sortAgentsList: sortAgentsList
|
|
663
713
|
};
|
|
664
714
|
};
|
|
665
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlVHJhbnNsYXRpb24iLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJmZXRjaE1haWEiLCJ1c2VVc2VyIiwiaXNNYWlhQ2xvbmVBZ2VudHNSb2xlQmxvY2tlZCIsIm1hcENPUkxhbmciLCJzb3J0QWdlbnRzIiwiYWdlbnRzIiwiY2xvbmVBZ2VudHMiLCJmaWx0ZXIiLCJhZyIsInR5cGUiLCJvdGhlckFnZW50cyIsImZhdm9yaXRlcyIsImlzX2Zhdm9yaXRlIiwic29ydCIsImEiLCJiIiwibmFtZSIsImxvY2FsZUNvbXBhcmUiLCJub25GYXZvcml0ZXMiLCJsZW5ndGgiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJ1c2VHZXRBZ2VudHMiLCJfcmVmIiwic2VsZWN0QWdlbnQiLCJzZWN0aW9uIiwiYWdlbnQiLCJoYW5kbGVHb0hvbWUiLCJ1c2VyIiwiX3VzZVN0YXRlIiwiZGF0YSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNldEFnZW50cyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImxvYWRpbmdNb3JlIiwic2V0TG9hZGluZ01vcmUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNlYXJjaExvYWRpbmciLCJzZXRTZWFyY2hMb2FkaW5nIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJlcnJvciIsInNldEVycm9yIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlVHJhbnNsYXRpb24iLCJ0IiwiaTE4biIsImxhc3RTZWxlY3RlZEFnZW50UmVmIiwiaXNSZWZyZXNoaW5nUmVmIiwibGFzdFJlcXVlc3RSZWYiLCJhZ2VudHNSZWYiLCJwcmVTZWFyY2hBZ2VudHNSZWYiLCJjdXJyZW50IiwiY2FuRmV0Y2hDbG9uZUFnZW50cyIsImFkZEFnZW50IiwibmV3QWdlbnQiLCJvcHRpb25zIiwicHJldiIsImFnZW50RXhpc3RzIiwic29tZSIsImV4aXN0aW5nQWdlbnQiLCJpZCIsIm5ld0RhdGEiLCJzb3J0ZWREYXRhIiwiX29iamVjdFNwcmVhZCIsIm5hdmlnYXRlSG9tZSIsInJlbW92ZUFnZW50IiwiYWdlbnRJZCIsInRvU3RyaW5nIiwidXBkYXRlQWdlbnQiLCJ1cGRhdGVkQWdlbnQiLCJ1cGRhdGVkRGF0YSIsIm1hcCIsInVwZGF0ZUFnZW50RmF2b3JpdGUiLCJzaG91bGRTb3J0IiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiX3JlZjIiLCJtZXNzYWdlIiwiYWdlbnRGaWVsZHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJtZXJnZWRBZ2VudCIsImZpbmFsRGF0YSIsImZpbmQiLCJfcmVmMyIsIl9leGNsdWRlZDIiLCJfcmVmNCIsIl9leGNsdWRlZDMiLCJzb3J0QWdlbnRzTGlzdCIsInNlbGVjdEZpcnN0QWdlbnQiLCJmaXJzdEFnZW50IiwiZmluZEluZGV4IiwiYWdlbnREYXRhIiwiaGFuZGxlR2V0QWdlbnRzIiwiX3JlZjUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZTMiLCJhZ2VudFRvU2VsZWN0IiwiX2FnZW50VG9TZWxlY3QkaWQiLCJyZXF1ZXN0S2V5IiwiaXNNdWx0aUFnZW50cyIsImFnZW50UGFyc2VkIiwiaGFzTW9yZSIsIm5leHRPZmZzZXQiLCJjdXN0b21BZ2VudHMiLCJjdXN0b21IYXNNb3JlIiwiY3VzdG9tTmV4dE9mZnNldCIsImlzNDAzIiwibG9hZENsb25lQWdlbnRzIiwibG9hZEN1c3RvbUFnZW50cyIsInNob3VsZFJlcXVlc3RDbG9uZUFnZW50cyIsInF1ZXJ5UGFyYW1zIiwicGF0aCIsInJlc3BvbnNlIiwiX3Jlc3BvbnNlRXJyb3IkcmVzcG9uIiwiX3Jlc3BvbnNlRXJyb3IkbWVzc2FnIiwiX3Jlc3BvbnNlRXJyb3IkbWVzc2FnMiIsImlzNDAzRXJyb3IiLCJfYWdlbnRQYXJzZWQiLCJfYWdlbnRQYXJzZWQyIiwiX2xhc3RTZWxlY3RlZEFnZW50UmVmIiwiX2xhc3RTZWxlY3RlZEFnZW50UmVmMiIsImF2YWlsYWJsZUFnZW50cyIsIl9hdmFpbGFibGVBZ2VudHMiLCJfbGFzdFNlbGVjdGVkQWdlbnRSZWYzIiwiX2F2YWlsYWJsZUFnZW50czIiLCJfYXZhaWxhYmxlQWdlbnRzMyIsImZpcnN0QXZhaWxhYmxlQWdlbnQiLCJfdDMiLCJfdDQiLCJ3cmFwIiwiX2NvbnRleHQzIiwibmV4dCIsImFicnVwdCIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJlcnIiLCJfZXJyJHJlc3BvbnNlIiwiX2VyciRtZXNzYWdlIiwiX2VyciRtZXNzYWdlMiIsInN0YXR1cyIsImluY2x1ZGVzIiwiX3JlZjYiLCJfY2FsbGVlIiwiX21haWFEYXRhJGRhdGEiLCJvcmRlclBhcmFtIiwibWFpYVJlc3BvbnNlIiwibWFpYURhdGEiLCJfdCIsIl9jb250ZXh0IiwibGFuZ3VhZ2UiLCJtZXRob2QiLCJzZW50IiwianNvbiIsInN0b3AiLCJhcHBseSIsIl9yZWY3IiwiX2NhbGxlZTIiLCJjdXN0b21SZXNwb25zZSIsImN1c3RvbURhdGEiLCJfdDIiLCJfY29udGV4dDIiLCJoYXNfbW9yZSIsIm5leHRfb2Zmc2V0IiwiUHJvbWlzZSIsImFsbCIsIlVSTFNlYXJjaFBhcmFtcyIsImFwcGVuZCIsImFnZW50VG9SZXF1ZXN0IiwiYWdlbnRJdGVtIiwiRXJyb3IiLCJzZXRUaW1lb3V0IiwiZmluaXNoIiwiX3giLCJzZWFyY2hDdXN0b21BZ2VudHMiLCJfcmVmOCIsIl9jYWxsZWU0IiwicXVlcnkiLCJfdDUiLCJfY29udGV4dDQiLCJlbmNvZGVVUklDb21wb25lbnQiLCJjdXN0b21SZXN1bHRzIiwiX3gyIiwibG9hZE1vcmVBZ2VudHMiLCJfY2FsbGVlNSIsImNhbkxvYWRNb3JlIiwiX3Q2IiwiX2NvbnRleHQ1IiwiZXhpc3RpbmdDbG9uZUFnZW50cyIsImV4aXN0aW5nSWRzIiwiU2V0IiwibmV3QWdlbnRzIiwiaGFzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL21haWEvQWdlbnRzL2dldEFnZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IGZldGNoTWFpYSB9IGZyb20gJy4uL2NsaWVudCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IGlzTWFpYUNsb25lQWdlbnRzUm9sZUJsb2NrZWQgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvbWFpYVRhc2tQYW5lbEFjY2VzcydcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuXG4vKipcbiAqIE9yZGVuYSBsb3MgYWdlbnRlczogYWdlbnRlcyBjbG9uZSBwcmltZXJvIChzaSBleGlzdGVuKSwgbHVlZ28gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGUsIGx1ZWdvIG5vIGZhdm9yaXRvcyBhbGZhYsOpdGljYW1lbnRlXG4gKi9cbmNvbnN0IHNvcnRBZ2VudHMgPSAoYWdlbnRzOiBBZ2VudFtdKTogQWdlbnRbXSA9PiB7XG4gIC8vIFNlcGFyYXIgYWdlbnRlcyBjbG9uZSBkZWwgcmVzdG9cbiAgY29uc3QgY2xvbmVBZ2VudHMgPSBhZ2VudHMuZmlsdGVyKGFnID0+IGFnLnR5cGUgPT09ICdjbG9uZScpXG4gIGNvbnN0IG90aGVyQWdlbnRzID0gYWdlbnRzLmZpbHRlcihhZyA9PiBhZy50eXBlICE9PSAnY2xvbmUnKVxuXG4gIC8vIFNlcGFyYXIgZmF2b3JpdG9zIHkgbm8gZmF2b3JpdG9zXG4gIGNvbnN0IGZhdm9yaXRlcyA9IG90aGVyQWdlbnRzLmZpbHRlcihhZyA9PiBhZy5pc19mYXZvcml0ZSkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSlcbiAgY29uc3Qgbm9uRmF2b3JpdGVzID0gb3RoZXJBZ2VudHMuZmlsdGVyKGFnID0+ICFhZy5pc19mYXZvcml0ZSkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSlcblxuICAvLyBDb21iaW5hcjogY2xvbmVzIHByaW1lcm8sIGx1ZWdvIGZhdm9yaXRvcywgbHVlZ28gbm8gZmF2b3JpdG9zXG4gIHJldHVybiBjbG9uZUFnZW50cy5sZW5ndGggPyBbLi4uY2xvbmVBZ2VudHMsIC4uLmZhdm9yaXRlcywgLi4ubm9uRmF2b3JpdGVzXSA6IFsuLi5mYXZvcml0ZXMsIC4uLm5vbkZhdm9yaXRlc11cbn1cblxudHlwZSBVc2VHZXRBZ2VudHNQcm9wcyA9IHtcbiAgc2VsZWN0QWdlbnQ6IChhZ2VudDogQWdlbnQpID0+IHZvaWRcbiAgc2VjdGlvbjogJ3Byb2plY3QnIHwgJ2hlYWRlcicgfCAnY2xpZW50JyB8ICd0YXNrJ1xuICBhZ2VudDogQWdlbnQgfCBudWxsXG4gIGhhbmRsZUdvSG9tZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgdHlwZSBBZGRBZ2VudE9wdGlvbnMgPSB7XG4gIC8qKiBQb3IgZGVmZWN0byBgdHJ1ZWAgKGNvbXBvcnRhbWllbnRvIEFCTSkuIFBhc2FyIGBmYWxzZWAgYWwgaW5zZXJ0YXIgYWdlbnRlIGNyZWFkbyBwb3IgY2hhdCBzaW4gY2FtYmlhciBkZSB2aXN0YS4gKi9cbiAgbmF2aWdhdGVIb21lPzogYm9vbGVhblxufVxuXG5leHBvcnQgY29uc3QgdXNlR2V0QWdlbnRzID0gKHsgc2VsZWN0QWdlbnQsIHNlY3Rpb24sIGFnZW50LCBoYW5kbGVHb0hvbWUgfTogVXNlR2V0QWdlbnRzUHJvcHMpID0+IHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBbYWdlbnRzLCBzZXRBZ2VudHNdID0gdXNlU3RhdGU8eyBkYXRhOiBBZ2VudFtdOyBoYXNfbW9yZT86IGJvb2xlYW47IG5leHRfb2Zmc2V0PzogbnVtYmVyIHwgbnVsbCB9Pih7IGRhdGE6IFtdIH0pXG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbG9hZGluZ01vcmUsIHNldExvYWRpbmdNb3JlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VhcmNoTG9hZGluZywgc2V0U2VhcmNoTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVHJhbnNsYXRpb24oJ2NoYXRfYWlfc2VjdGlvbicpXG4gIGNvbnN0IGxhc3RTZWxlY3RlZEFnZW50UmVmID0gdXNlUmVmPEFnZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNSZWZyZXNoaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBsYXN0UmVxdWVzdFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBhZ2VudHNSZWYgPSB1c2VSZWYoYWdlbnRzKVxuICBjb25zdCBwcmVTZWFyY2hBZ2VudHNSZWYgPSB1c2VSZWY8eyBkYXRhOiBBZ2VudFtdOyBoYXNfbW9yZT86IGJvb2xlYW47IG5leHRfb2Zmc2V0PzogbnVtYmVyIHwgbnVsbCB9IHwgbnVsbD4obnVsbClcblxuICBhZ2VudHNSZWYuY3VycmVudCA9IGFnZW50c1xuXG4gIGNvbnN0IGNhbkZldGNoQ2xvbmVBZ2VudHMgPSAhaXNNYWlhQ2xvbmVBZ2VudHNSb2xlQmxvY2tlZCh1c2VyLCBzZWN0aW9uKVxuXG4gIGNvbnN0IGFkZEFnZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKG5ld0FnZW50OiBBZ2VudCwgb3B0aW9ucz86IEFkZEFnZW50T3B0aW9ucykgPT4ge1xuICAgICAgc2V0QWdlbnRzKHByZXYgPT4ge1xuICAgICAgICAvLyBWZXJpZmljYXIgc2kgZWwgYWdlbnRlIHlhIGV4aXN0ZSBwYXJhIGV2aXRhciBkdXBsaWNhZG9zXG4gICAgICAgIGNvbnN0IGFnZW50RXhpc3RzID0gcHJldi5kYXRhLnNvbWUoZXhpc3RpbmdBZ2VudCA9PiBleGlzdGluZ0FnZW50LmlkID09PSBuZXdBZ2VudC5pZClcbiAgICAgICAgaWYgKGFnZW50RXhpc3RzKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdEYXRhID0gWy4uLnByZXYuZGF0YSwgbmV3QWdlbnRdXG4gICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSBzb3J0QWdlbnRzKG5ld0RhdGEpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICBkYXRhOiBzb3J0ZWREYXRhLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKG9wdGlvbnM/Lm5hdmlnYXRlSG9tZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgaGFuZGxlR29Ib21lKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVHb0hvbWVdXG4gIClcblxuICBjb25zdCByZW1vdmVBZ2VudCA9IHVzZUNhbGxiYWNrKChhZ2VudElkOiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgICBzZXRBZ2VudHMocHJldiA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIGRhdGE6IHByZXYuZGF0YS5maWx0ZXIoYSA9PiBhLmlkICE9PSBhZ2VudElkLnRvU3RyaW5nKCkpLFxuICAgIH0pKVxuICB9LCBbXSlcblxuICBjb25zdCB1cGRhdGVBZ2VudCA9IHVzZUNhbGxiYWNrKCh1cGRhdGVkQWdlbnQ6IEFnZW50KSA9PiB7XG4gICAgc2V0QWdlbnRzKHByZXYgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBwcmV2LmRhdGEubWFwKGV4aXN0aW5nQWdlbnQgPT5cbiAgICAgICAgZXhpc3RpbmdBZ2VudC5pZCA9PT0gdXBkYXRlZEFnZW50LmlkID8gdXBkYXRlZEFnZW50IDogZXhpc3RpbmdBZ2VudFxuICAgICAgKVxuICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHNvcnRBZ2VudHModXBkYXRlZERhdGEpXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBkYXRhOiBzb3J0ZWREYXRhLFxuICAgICAgfVxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZUFnZW50RmF2b3JpdGUgPSB1c2VDYWxsYmFjayhcbiAgICAodXBkYXRlZEFnZW50OiBBZ2VudCwgc2hvdWxkU29ydDogYm9vbGVhbiA9IGZhbHNlKSA9PiB7XG4gICAgICBzZXRBZ2VudHMocHJldiA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gcHJldi5kYXRhLm1hcChleGlzdGluZ0FnZW50ID0+IHtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdBZ2VudC5pZCA9PT0gdXBkYXRlZEFnZW50LmlkKSB7XG4gICAgICAgICAgICBjb25zdCB7IG1lc3NhZ2UsIC4uLmFnZW50RmllbGRzIH0gPSB1cGRhdGVkQWdlbnQgYXMgYW55XG4gICAgICAgICAgICBjb25zdCBtZXJnZWRBZ2VudCA9IHsgLi4uZXhpc3RpbmdBZ2VudCwgLi4uYWdlbnRGaWVsZHMgfVxuICAgICAgICAgICAgcmV0dXJuIG1lcmdlZEFnZW50XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBleGlzdGluZ0FnZW50XG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU29sbyBvcmRlbmFyIHNpIHNob3VsZFNvcnQgZXMgdHJ1ZVxuICAgICAgICBjb25zdCBmaW5hbERhdGEgPSBzaG91bGRTb3J0ID8gc29ydEFnZW50cyh1cGRhdGVkRGF0YSkgOiB1cGRhdGVkRGF0YVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICBkYXRhOiBmaW5hbERhdGEsXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIEFjdHVhbGl6YXIgZWwgYWdlbnRlIHNlbGVjY2lvbmFkbyBzaSBlcyBlbCBxdWUgc2UgZXN0w6EgYWN0dWFsaXphbmRvXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSB1cGRhdGVkQWdlbnQuaWQpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmQoYSA9PiBhLmlkID09PSB1cGRhdGVkQWdlbnQuaWQpXG4gICAgICAgIGlmIChleGlzdGluZ0FnZW50KSB7XG4gICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCAuLi5hZ2VudEZpZWxkcyB9ID0gdXBkYXRlZEFnZW50IGFzIGFueVxuICAgICAgICAgIGNvbnN0IG1lcmdlZEFnZW50ID0geyAuLi5leGlzdGluZ0FnZW50LCAuLi5hZ2VudEZpZWxkcyB9XG4gICAgICAgICAgc2VsZWN0QWdlbnQobWVyZ2VkQWdlbnQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCAuLi5hZ2VudEZpZWxkcyB9ID0gdXBkYXRlZEFnZW50IGFzIGFueVxuICAgICAgICAgIHNlbGVjdEFnZW50KGFnZW50RmllbGRzIGFzIEFnZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnQsIHNlbGVjdEFnZW50LCBhZ2VudHMuZGF0YV1cbiAgKVxuXG4gIGNvbnN0IHNvcnRBZ2VudHNMaXN0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldEFnZW50cyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSBzb3J0QWdlbnRzKHByZXYuZGF0YSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGRhdGE6IHNvcnRlZERhdGEsXG4gICAgICB9XG4gICAgfSlcbiAgfSwgW10pXG5cbiAgY29uc3Qgc2VsZWN0Rmlyc3RBZ2VudCA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkPzogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoYWdlbnRzLmRhdGEubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kSW5kZXgoYWdlbnREYXRhID0+IGFnZW50RGF0YS5pZCA9PT0gYWdlbnRJZClcbiAgICAgICAgbGFzdFNlbGVjdGVkQWdlbnRSZWYuY3VycmVudCA9IGFnZW50cy5kYXRhW2ZpcnN0QWdlbnQgPT09IDAgPyAxIDogMF1cbiAgICAgICAgc2VsZWN0QWdlbnQoYWdlbnRzLmRhdGFbZmlyc3RBZ2VudCA9PT0gMCA/IDEgOiAwXSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudHMuZGF0YSwgc2VsZWN0QWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVHZXRBZ2VudHMgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoYWdlbnRUb1NlbGVjdD86IEFnZW50KSA9PiB7XG4gICAgICBpZiAoaXNSZWZyZXNoaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RLZXkgPSBhZ2VudFRvU2VsZWN0Py5pZD8udG9TdHJpbmcoKSB8fCAnZGVmYXVsdCdcbiAgICAgIGlmIChsYXN0UmVxdWVzdFJlZi5jdXJyZW50ID09PSByZXF1ZXN0S2V5ICYmICFsb2FkaW5nKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpc1JlZnJlc2hpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGxhc3RSZXF1ZXN0UmVmLmN1cnJlbnQgPSByZXF1ZXN0S2V5XG4gICAgICBzZXRMb2FkaW5nKHRydWUpXG4gICAgICBzZXRFcnJvcihudWxsKVxuXG4gICAgICBjb25zdCBpc011bHRpQWdlbnRzID0gISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGFnZW50UGFyc2VkOiBBZ2VudFtdID0gW11cbiAgICAgICAgbGV0IGhhc01vcmUgPSBmYWxzZVxuICAgICAgICBsZXQgbmV4dE9mZnNldDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgICAgICAvLyBTaSB0aWVuZSBmZWF0dXJlIGFjY2VzcyBtdWx0aSBhZ2VudHMsIGhhY2VyIGRvcyBxdWVyaWVzIChNYWlhICsgY3VzdG9tKSBlbiBjdWFscXVpZXIgc2VjY2nDs25cbiAgICAgICAgaWYgKGlzTXVsdGlBZ2VudHMpIHtcbiAgICAgICAgICAvLyBRdWVyeSBjbG9uZSAoTWFpYSkgeSBjdXN0b20gc29uIGluZGVwZW5kaWVudGVzIOKGkiBzZSBkaXNwYXJhbiBlbiBwYXJhbGVsby5cbiAgICAgICAgICBsZXQgY2xvbmVBZ2VudHM6IEFnZW50W10gPSBbXVxuICAgICAgICAgIGxldCBjdXN0b21BZ2VudHM6IEFnZW50W10gPSBbXVxuICAgICAgICAgIGxldCBjdXN0b21IYXNNb3JlID0gZmFsc2VcbiAgICAgICAgICBsZXQgY3VzdG9tTmV4dE9mZnNldDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgICAgICAgIGNvbnN0IGlzNDAzID0gKGVycjogYW55KTogYm9vbGVhbiA9PlxuICAgICAgICAgICAgZXJyPy5yZXNwb25zZT8uc3RhdHVzID09PSA0MDMgfHxcbiAgICAgICAgICAgIGVycj8uc3RhdHVzID09PSA0MDMgfHxcbiAgICAgICAgICAgIGVycj8ubWVzc2FnZT8uaW5jbHVkZXMoXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHZpZXcgYWdlbnRzXCIpIHx8XG4gICAgICAgICAgICBlcnI/Lm1lc3NhZ2U/LmluY2x1ZGVzKCdGYWlsZWQgZmV0Y2hpbmcgZGF0YScpIC8vIGZldGNoQ09SIGxhbnphIGVzdG8gcGFyYSA0MDMgc2luICdBY2Nlc3MgZGVuaWVkJ1xuXG4gICAgICAgICAgY29uc3QgbG9hZENsb25lQWdlbnRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjYW5GZXRjaENsb25lQWdlbnRzKSByZXR1cm5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZGVyUGFyYW0gPVxuICAgICAgICAgICAgICAgIHNlY3Rpb24gPT09ICdjbGllbnQnXG4gICAgICAgICAgICAgICAgICA/ICcmb3JkZXI9Y2xpZW50LHByb2plY3QnXG4gICAgICAgICAgICAgICAgICA6IHNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBzZWN0aW9uID09PSAnaGVhZGVyJyB8fCBzZWN0aW9uID09PSAndGFzaydcbiAgICAgICAgICAgICAgICAgICAgPyAnJm9yZGVyPXByb2plY3QsY2xpZW50J1xuICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IG1haWFSZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWNsb25lJmxhbmc9JHttYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpfSR7b3JkZXJQYXJhbX1gLFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGNvbnN0IG1haWFEYXRhID0gYXdhaXQgbWFpYVJlc3BvbnNlLmpzb24oKVxuICAgICAgICAgICAgICBjbG9uZUFnZW50cyA9IG1haWFEYXRhLmRhdGE/LmZpbHRlcigoYWc6IEFnZW50KSA9PiBhZy50eXBlID09PSAnY2xvbmUnKSB8fCBbXVxuICAgICAgICAgICAgfSBjYXRjaCAobWFpYUVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgLy8gU2kgZXMgNDAzLCBjb250aW51YXIgc2luIGxvcyBjbG9uZUFnZW50czsgc2kgZXMgb3RybyBlcnJvciwgcHJvcGFnYXJsb1xuICAgICAgICAgICAgICBpZiAoIWlzNDAzKG1haWFFcnJvcikpIHRocm93IG1haWFFcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGxvYWRDdXN0b21BZ2VudHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBjdXN0b21SZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgICAgICAgcGF0aDogJ2FnZW50cz9hZ2VudF90eXBlPWN1c3RvbSZsaW1pdD03Jm9mZnNldD0wJyxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICBjb25zdCBjdXN0b21EYXRhID0gYXdhaXQgY3VzdG9tUmVzcG9uc2UuanNvbigpXG4gICAgICAgICAgICAgIGN1c3RvbUFnZW50cyA9IGN1c3RvbURhdGEuZGF0YSB8fCBbXVxuICAgICAgICAgICAgICBjdXN0b21IYXNNb3JlID0gY3VzdG9tRGF0YS5oYXNfbW9yZSB8fCBmYWxzZVxuICAgICAgICAgICAgICBjdXN0b21OZXh0T2Zmc2V0ID0gY3VzdG9tRGF0YS5uZXh0X29mZnNldCB8fCBudWxsXG4gICAgICAgICAgICB9IGNhdGNoIChjdXN0b21FcnJvcjogYW55KSB7XG4gICAgICAgICAgICAgIC8vIFNpIGVzIDQwMywgY29udGludWFyIHNpbiBsb3MgY3VzdG9tQWdlbnRzIChxdWVkYSBjb21vIGFycmF5IHZhY8Otbyk7IHNpIG5vLCBwcm9wYWdhcmxvXG4gICAgICAgICAgICAgIGlmICghaXM0MDMoY3VzdG9tRXJyb3IpKSB0aHJvdyBjdXN0b21FcnJvclxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtsb2FkQ2xvbmVBZ2VudHMoKSwgbG9hZEN1c3RvbUFnZW50cygpXSlcblxuICAgICAgICAgIC8vIENvbWJpbmFyOiBhZ2VudGVzIGNsb25lIHByaW1lcm8sIGx1ZWdvIGxvcyBjdXN0b20gKHNpIGV4aXN0ZW4pXG4gICAgICAgICAgLy8gU2kgZWwgdXN1YXJpbyB0aWVuZSB1biByb2wgZGVzaGFiaWxpdGFkbywgbm8gaW5jbHVpciBjbG9uZUFnZW50c1xuICAgICAgICAgIGlmICghY2FuRmV0Y2hDbG9uZUFnZW50cykge1xuICAgICAgICAgICAgLy8gUm9sIHNpbiBhY2Nlc28gYSBjbG9uZXMgKHAuIGVqLiBjb2xhYm9yYWRvciBmdWVyYSBkZWwgcGlsb3RvKTogc29sbyBjdXN0b21BZ2VudHNcbiAgICAgICAgICAgIC8vIFNpIGN1c3RvbUFnZW50cyBlc3TDoSB2YWPDrW8gKHBvciA0MDMpLCBhZ2VudFBhcnNlZCBzZXLDoSBbXVxuICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBjdXN0b21BZ2VudHNcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUm9sIGNvbiBhY2Nlc28gYSBjbG9uZXM6IGNsb25lQWdlbnRzICsgY3VzdG9tQWdlbnRzXG4gICAgICAgICAgICAvLyBTaSBjdXN0b21BZ2VudHMgZXN0w6EgdmFjw61vIChwb3IgNDAzKSBwZXJvIGhheSBjbG9uZUFnZW50cywgYWdlbnRQYXJzZWQgdGVuZHLDoSBsb3MgY2xvbmVzXG4gICAgICAgICAgICAvLyBTaSBubyBoYXkgY2xvbmVBZ2VudHMgbmkgY3VzdG9tQWdlbnRzLCBhZ2VudFBhcnNlZCBzZXLDoSBbXVxuICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBjbG9uZUFnZW50cy5sZW5ndGggPyBbLi4uY2xvbmVBZ2VudHMsIC4uLmN1c3RvbUFnZW50c10gOiBjdXN0b21BZ2VudHNcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gT3JkZW5hcjogTWFpYSBwcmltZXJvLCBsdWVnbyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZSwgbHVlZ28gbm8gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGVcbiAgICAgICAgICBhZ2VudFBhcnNlZCA9IHNvcnRBZ2VudHMoYWdlbnRQYXJzZWQpXG4gICAgICAgICAgaGFzTW9yZSA9IGN1c3RvbUhhc01vcmVcbiAgICAgICAgICBuZXh0T2Zmc2V0ID0gY3VzdG9tTmV4dE9mZnNldFxuXG4gICAgICAgICAgc2V0QWdlbnRzKHtcbiAgICAgICAgICAgIGRhdGE6IGFnZW50UGFyc2VkLFxuICAgICAgICAgICAgaGFzX21vcmU6IGhhc01vcmUsXG4gICAgICAgICAgICBuZXh0X29mZnNldDogbmV4dE9mZnNldCxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFnZW50ZXMgZGVzcHXDqXMgZGUgcHJvY2VzYXIgbGFzIHF1ZXJpZXMsIGxpbXBpYXIgZWwgZXJyb3JcbiAgICAgICAgICBpZiAoYWdlbnRQYXJzZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzZXRFcnJvcihudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzaG91bGRSZXF1ZXN0Q2xvbmVBZ2VudHMgPVxuICAgICAgICAgICAgY2FuRmV0Y2hDbG9uZUFnZW50cyAmJlxuICAgICAgICAgICAgKHNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBzZWN0aW9uID09PSAnY2xpZW50JyB8fCBzZWN0aW9uID09PSAnaGVhZGVyJyB8fCBzZWN0aW9uID09PSAndGFzaycpXG5cbiAgICAgICAgICBpZiAoIXNob3VsZFJlcXVlc3RDbG9uZUFnZW50cykge1xuICAgICAgICAgICAgc2V0QWdlbnRzKHsgZGF0YTogW10sIGhhc19tb3JlOiBmYWxzZSwgbmV4dF9vZmZzZXQ6IG51bGwgfSlcbiAgICAgICAgICAgIHNldEVycm9yKG51bGwpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gICAgICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ2FnZW50X3R5cGUnLCAnY2xvbmUnKVxuICAgICAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKCdsYW5nJywgbWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKSlcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnb3JkZXInLCBzZWN0aW9uID09PSAnY2xpZW50JyA/ICdjbGllbnQscHJvamVjdCcgOiAncHJvamVjdCxjbGllbnQnKVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdoZWFkZXInKSB7XG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnbGltaXQnLCAnNycpXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnb2Zmc2V0JywgJzAnKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXRoID0gYGFnZW50cz8ke3F1ZXJ5UGFyYW1zLnRvU3RyaW5nKCl9YFxuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBkYXRhLmRhdGEgfHwgW11cbiAgICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBzb3J0QWdlbnRzKGFnZW50UGFyc2VkKVxuICAgICAgICAgICAgICBoYXNNb3JlID0gZGF0YS5oYXNfbW9yZVxuICAgICAgICAgICAgICBuZXh0T2Zmc2V0ID0gZGF0YS5uZXh0X29mZnNldFxuXG4gICAgICAgICAgICAgIHNldEFnZW50cyh7XG4gICAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgICBkYXRhOiBhZ2VudFBhcnNlZCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gY2F0Y2ggKHJlc3BvbnNlRXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICAvLyBWZXJpZmljYXIgc2kgZWwgZXJyb3IgZXMgNDAzXG4gICAgICAgICAgICAgIC8vIGZldGNoQ09SIHB1ZWRlIGxhbnphciBkaWZlcmVudGVzIHRpcG9zIGRlIGVycm9yZXM6XG4gICAgICAgICAgICAgIC8vIDEuIEVycm9yIGNvbiBlcnJvckRhdGEuZGV0YWlsIHNpIGluY2x1eWUgJ0FjY2VzcyBkZW5pZWQnXG4gICAgICAgICAgICAgIC8vIDIuIEVycm9yIGdlbsOpcmljbyAnRmFpbGVkIGZldGNoaW5nIGRhdGEnIHNpIGVzIDQwMyBwZXJvIG5vIGluY2x1eWUgJ0FjY2VzcyBkZW5pZWQnXG4gICAgICAgICAgICAgIC8vIDMuIE5lY2VzaXRhbW9zIHZlcmlmaWNhciBlbCBzdGF0dXMgY29kZSBzaSBlc3TDoSBkaXNwb25pYmxlXG4gICAgICAgICAgICAgIGNvbnN0IGlzNDAzRXJyb3IgPVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMyB8fFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3I/LnN0YXR1cyA9PT0gNDAzIHx8XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvcj8ubWVzc2FnZT8uaW5jbHVkZXMoXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHZpZXcgYWdlbnRzXCIpIHx8XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvcj8ubWVzc2FnZT8uaW5jbHVkZXMoJ0ZhaWxlZCBmZXRjaGluZyBkYXRhJykgLy8gZmV0Y2hDT1IgbGFuemEgZXN0byBwYXJhIDQwMyBzaW4gJ0FjY2VzcyBkZW5pZWQnXG5cbiAgICAgICAgICAgICAgaWYgKGlzNDAzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBTaSBlcyA0MDMsIGVzdGFibGVjZXIgYWdlbnRlcyB2YWPDrW9zIHkgY29udGludWFyXG4gICAgICAgICAgICAgICAgc2V0QWdlbnRzKHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxuICAgICAgICAgICAgICAgICAgaGFzX21vcmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbmV4dF9vZmZzZXQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBzZXRFcnJvcihudWxsKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNpIGVzIG90cm8gZXJyb3IsIGxhbnphcmxvXG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2VFcnJvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTMOzZ2ljYSBkZSBzZWxlY3QgYWdlbnQgLSBTb2xvIHNlbGVjY2lvbmFyIHNpIGhheSBhZ2VudGVzIGRpc3BvbmlibGVzXG4gICAgICAgIGlmIChhZ2VudFBhcnNlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKGFnZW50VG9TZWxlY3QgJiYgYWdlbnRQYXJzZWQuZmluZCgoYWdlbnRUb1JlcXVlc3Q6IEFnZW50KSA9PiBhZ2VudFRvUmVxdWVzdC5pZCA9PT0gYWdlbnRUb1NlbGVjdC5pZCkpIHtcbiAgICAgICAgICAgIGlmIChsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50Py5pZCAhPT0gYWdlbnRUb1NlbGVjdC5pZCkge1xuICAgICAgICAgICAgICBsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50ID0gYWdlbnRUb1NlbGVjdFxuICAgICAgICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFRvU2VsZWN0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYWdlbnRQYXJzZWQ/LlswXSAmJiAoIWFnZW50IHx8ICFhZ2VudFBhcnNlZC5maW5kKChhOiBBZ2VudCkgPT4gYS5pZCA9PT0gYWdlbnQuaWQpKSkge1xuICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlQWdlbnRzID1cbiAgICAgICAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyAmJiBjYW5GZXRjaENsb25lQWdlbnRzXG4gICAgICAgICAgICAgICAgPyBhZ2VudFBhcnNlZFxuICAgICAgICAgICAgICAgIDogYWdlbnRQYXJzZWQuZmlsdGVyKChhZ2VudEl0ZW06IEFnZW50KSA9PiBhZ2VudEl0ZW0udHlwZSAhPT0gJ2Nsb25lJylcblxuICAgICAgICAgICAgY29uc3QgW2ZpcnN0QWdlbnRdID0gYXZhaWxhYmxlQWdlbnRzXG4gICAgICAgICAgICBpZiAoZmlyc3RBZ2VudCAmJiBsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50Py5pZCAhPT0gZmlyc3RBZ2VudC5pZCkge1xuICAgICAgICAgICAgICBsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50ID0gZmlyc3RBZ2VudFxuICAgICAgICAgICAgICBzZWxlY3RBZ2VudChmaXJzdEFnZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYWdlbnRUb1NlbGVjdCAmJiBhZ2VudFBhcnNlZD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBhdmFpbGFibGVBZ2VudHMgPVxuICAgICAgICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTICYmIGNhbkZldGNoQ2xvbmVBZ2VudHNcbiAgICAgICAgICAgICAgICA/IGFnZW50UGFyc2VkXG4gICAgICAgICAgICAgICAgOiBhZ2VudFBhcnNlZC5maWx0ZXIoKGFnZW50SXRlbTogQWdlbnQpID0+IGFnZW50SXRlbS50eXBlICE9PSAnY2xvbmUnKVxuXG4gICAgICAgICAgICBjb25zdCBbZmlyc3RBdmFpbGFibGVBZ2VudF0gPSBhdmFpbGFibGVBZ2VudHNcbiAgICAgICAgICAgIGlmIChmaXJzdEF2YWlsYWJsZUFnZW50ICYmIGxhc3RTZWxlY3RlZEFnZW50UmVmLmN1cnJlbnQ/LmlkICE9PSBmaXJzdEF2YWlsYWJsZUFnZW50LmlkKSB7XG4gICAgICAgICAgICAgIGxhc3RTZWxlY3RlZEFnZW50UmVmLmN1cnJlbnQgPSBmaXJzdEF2YWlsYWJsZUFnZW50XG4gICAgICAgICAgICAgIHNlbGVjdEFnZW50KGZpcnN0QXZhaWxhYmxlQWdlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzZXRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQnKVxuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNSZWZyZXNoaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoIWlzUmVmcmVzaGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBsYXN0UmVxdWVzdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlbGVjdEFnZW50LCBzZWN0aW9uLCBhZ2VudCwgbG9hZGluZywgY2FuRmV0Y2hDbG9uZUFnZW50cywgaTE4bi5sYW5ndWFnZV1cbiAgKVxuXG4gIGNvbnN0IHNlYXJjaEN1c3RvbUFnZW50cyA9IHVzZUNhbGxiYWNrKGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFxdWVyeSkge1xuICAgICAgaWYgKHByZVNlYXJjaEFnZW50c1JlZi5jdXJyZW50KSB7XG4gICAgICAgIHNldEFnZW50cyhwcmVTZWFyY2hBZ2VudHNSZWYuY3VycmVudClcbiAgICAgICAgcHJlU2VhcmNoQWdlbnRzUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXByZVNlYXJjaEFnZW50c1JlZi5jdXJyZW50KSB7XG4gICAgICBwcmVTZWFyY2hBZ2VudHNSZWYuY3VycmVudCA9IGFnZW50c1JlZi5jdXJyZW50XG4gICAgfVxuXG4gICAgc2V0U2VhcmNoTG9hZGluZyh0cnVlKVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWN1c3RvbSZsaW1pdD0yMCZvZmZzZXQ9MCZxPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5KX1gLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgfSlcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcblxuICAgICAgc2V0QWdlbnRzKHByZXYgPT4ge1xuICAgICAgICBjb25zdCBjbG9uZUFnZW50cyA9IHByZXYuZGF0YS5maWx0ZXIoKGFnOiBBZ2VudCkgPT4gYWcudHlwZSA9PT0gJ2Nsb25lJylcbiAgICAgICAgY29uc3QgY3VzdG9tUmVzdWx0czogQWdlbnRbXSA9IGRhdGEuZGF0YSB8fCBbXVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IGNsb25lQWdlbnRzLmxlbmd0aCA/IFsuLi5jbG9uZUFnZW50cywgLi4uY3VzdG9tUmVzdWx0c10gOiBjdXN0b21SZXN1bHRzLFxuICAgICAgICAgIGhhc19tb3JlOiBmYWxzZSxcbiAgICAgICAgICBuZXh0X29mZnNldDogbnVsbCxcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnc25hY2tiYXIubG9hZE1vcmVBZ2VudHMuZXJyb3InKSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0U2VhcmNoTG9hZGluZyhmYWxzZSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGxvYWRNb3JlQWdlbnRzID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlzTXVsdGlBZ2VudHMgPSAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICAgIC8vIENhcmdhciBtw6FzOiBlbiBoZWFkZXIgc2llbXByZTsgZW4gcHJvamVjdCBzb2xvIHNpIGlzTXVsdGlBZ2VudHMgKHBvcnF1ZSBzb2xvIGVudG9uY2VzIGhheSBwYWdpbmFjacOzbiBkZSBjdXN0b20pXG4gICAgY29uc3QgY2FuTG9hZE1vcmUgPSBzZWN0aW9uID09PSAnaGVhZGVyJyB8fCBpc011bHRpQWdlbnRzXG4gICAgaWYgKCFjYW5Mb2FkTW9yZSB8fCAhYWdlbnRzLmhhc19tb3JlIHx8ICFhZ2VudHMubmV4dF9vZmZzZXQgfHwgbG9hZGluZ01vcmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldExvYWRpbmdNb3JlKHRydWUpXG4gICAgc2V0RXJyb3IobnVsbClcblxuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aDogc3RyaW5nXG5cbiAgICAgIC8vIFNpIGVzIG11bHRpQWdlbnRzLCBzb2xvIGNhcmdhciBhZ2VudHMgY3VzdG9tIChNYWlhIHlhIGVzdMOhIGNhcmdhZG8pXG4gICAgICBpZiAoaXNNdWx0aUFnZW50cykge1xuICAgICAgICAvLyBNYW50ZW5lciBjYW50aWRhZCBpbXBhciBkZSBjYXJkczogcHJpbWVyYSBjYXJnYSA3LCBzaWd1aWVudGVzICs2ICg3LCAxMywgMTksIC4uLilcbiAgICAgICAgcGF0aCA9IGBhZ2VudHM/YWdlbnRfdHlwZT1jdXN0b20mbGltaXQ9NiZvZmZzZXQ9JHthZ2VudHMubmV4dF9vZmZzZXR9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2kgbm8gZXMgbXVsdGlBZ2VudHMsIGNhcmdhciBtw6FzIGFnZW50ZXMgY2xvbmUgKE1haWEpIOKAlCBtaXNtbyBvcmRlciBxdWUgcHJvamVjdCBwYXJhIGhlYWRlclxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ2FnZW50X3R5cGUnLCAnY2xvbmUnKVxuICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ2xhbmcnLCBtYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpKVxuICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ29yZGVyJywgJ3Byb2plY3QsY2xpZW50JylcbiAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKCdsaW1pdCcsICc3JylcbiAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKCdvZmZzZXQnLCBhZ2VudHMubmV4dF9vZmZzZXQudG9TdHJpbmcoKSlcbiAgICAgICAgcGF0aCA9IGBhZ2VudHM/JHtxdWVyeVBhcmFtcy50b1N0cmluZygpfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgICBwYXRoLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuXG4gICAgICAvLyBBY3VtdWxhciBhZ2VudGVzLCBleGNsdXllbmRvIGR1cGxpY2Fkb3NcbiAgICAgIHNldEFnZW50cyhwcmV2ID0+IHtcbiAgICAgICAgaWYgKGlzTXVsdGlBZ2VudHMpIHtcbiAgICAgICAgICAvLyBMw7NnaWNhIHBhcmEgbXVsdGlBZ2VudHM6IHNlcGFyYXIgY2xvbmUgeSBjdXN0b21cbiAgICAgICAgICAvLyBNYW50ZW5lciB0b2RvcyBsb3MgYWdlbnRlcyBjbG9uZSBleGlzdGVudGVzIGFsIGluaWNpb1xuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQ2xvbmVBZ2VudHMgPSBwcmV2LmRhdGEuZmlsdGVyKChhZzogQWdlbnQpID0+IGFnLnR5cGUgPT09ICdjbG9uZScpXG5cbiAgICAgICAgICAvLyBPYnRlbmVyIElEcyBleGlzdGVudGVzIChleGNsdXllbmRvIGNsb25lcylcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5kYXRhLmZpbHRlcigoYWc6IEFnZW50KSA9PiBhZy50eXBlICE9PSAnY2xvbmUnKS5tYXAoKGFnOiBBZ2VudCkgPT4gYWcuaWQpKVxuXG4gICAgICAgICAgLy8gRmlsdHJhciBudWV2b3MgYWdlbnRzIHF1ZSBubyBlc3TDqW4geWEgZW4gbGEgbGlzdGEgKHkgcXVlIG5vIHNlYW4gY2xvbmUpXG4gICAgICAgICAgY29uc3QgbmV3QWdlbnRzID0gZGF0YS5kYXRhLmZpbHRlcigoYWc6IEFnZW50KSA9PiBhZy50eXBlICE9PSAnY2xvbmUnICYmICFleGlzdGluZ0lkcy5oYXMoYWcuaWQpKVxuXG4gICAgICAgICAgLy8gQ29uc3RydWlyIGVsIG51ZXZvIGFycmF5OiBjbG9uZXMgcHJpbWVybywgbHVlZ28gbG9zIGFnZW50cyBleGlzdGVudGVzIHF1ZSBubyBzZWFuIGNsb25lLCBsdWVnbyBsb3MgbnVldm9zXG4gICAgICAgICAgY29uc3QgbmV3RGF0YSA9IGV4aXN0aW5nQ2xvbmVBZ2VudHMubGVuZ3RoXG4gICAgICAgICAgICA/IFsuLi5leGlzdGluZ0Nsb25lQWdlbnRzLCAuLi5wcmV2LmRhdGEuZmlsdGVyKChhZzogQWdlbnQpID0+IGFnLnR5cGUgIT09ICdjbG9uZScpLCAuLi5uZXdBZ2VudHNdXG4gICAgICAgICAgICA6IFsuLi5wcmV2LmRhdGEuZmlsdGVyKChhZzogQWdlbnQpID0+IGFnLnR5cGUgIT09ICdjbG9uZScpLCAuLi5uZXdBZ2VudHNdXG5cbiAgICAgICAgICAvLyBPcmRlbmFyOiBNYWlhIHByaW1lcm8sIGx1ZWdvIGZhdm9yaXRvcyBhbGZhYsOpdGljYW1lbnRlLCBsdWVnbyBubyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZVxuICAgICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSBzb3J0QWdlbnRzKG5ld0RhdGEpXG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogc29ydGVkRGF0YSxcbiAgICAgICAgICAgIGhhc19tb3JlOiBkYXRhLmhhc19tb3JlLFxuICAgICAgICAgICAgbmV4dF9vZmZzZXQ6IGRhdGEubmV4dF9vZmZzZXQsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEzDs2dpY2EgcGFyYSAhaXNNdWx0aUFnZW50czogdG9kb3MgbG9zIGFnZW50ZXMgc29uIGNsb25lLCBzaW1wbGVtZW50ZSBhZ3JlZ2FyIGV2aXRhbmRvIGR1cGxpY2Fkb3NcbiAgICAgICAgY29uc3QgZXhpc3RpbmdJZHMgPSBuZXcgU2V0KHByZXYuZGF0YS5tYXAoKGFnOiBBZ2VudCkgPT4gYWcuaWQpKVxuICAgICAgICBjb25zdCBuZXdBZ2VudHMgPSAoZGF0YS5kYXRhIHx8IFtdKS5maWx0ZXIoKGFnOiBBZ2VudCkgPT4gIWV4aXN0aW5nSWRzLmhhcyhhZy5pZCkpXG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBbLi4ucHJldi5kYXRhLCAuLi5uZXdBZ2VudHNdXG5cbiAgICAgICAgLy8gT3JkZW5hcjogTWFpYSBwcmltZXJvLCBsdWVnbyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZSwgbHVlZ28gbm8gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGVcbiAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHNvcnRBZ2VudHMobmV3RGF0YSlcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHNvcnRlZERhdGEsXG4gICAgICAgICAgaGFzX21vcmU6IGRhdGEuaGFzX21vcmUsXG4gICAgICAgICAgbmV4dF9vZmZzZXQ6IGRhdGEubmV4dF9vZmZzZXQsXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIHNldExvYWRpbmdNb3JlKGZhbHNlKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdzbmFja2Jhci5sb2FkTW9yZUFnZW50cy5lcnJvcicpKVxuICAgICAgc2V0TG9hZGluZ01vcmUoZmFsc2UpXG4gICAgfVxuICB9LCBbc2VjdGlvbiwgYWdlbnRzLmhhc19tb3JlLCBhZ2VudHMubmV4dF9vZmZzZXQsIGxvYWRpbmdNb3JlLCBpMThuLmxhbmd1YWdlXSlcblxuICByZXR1cm4ge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBzZWFyY2hDdXN0b21BZ2VudHMsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxNQUFNLFFBQVEsT0FBTztBQUNyRCxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxrQkFBa0IsUUFBUSxzREFBc0Q7QUFDekYsU0FBU0MsU0FBUyxRQUFRLFdBQVc7QUFFckMsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUNuRCxTQUFTQyw0QkFBNEIsUUFBUSx3Q0FBd0M7QUFDckYsU0FBU0MsVUFBVSxRQUFRLHFCQUFx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
|
|
715
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlVHJhbnNsYXRpb24iLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJmZXRjaE1haWEiLCJ1c2VVc2VyIiwiaXNNYWlhQ2xvbmVBZ2VudHNSb2xlQmxvY2tlZCIsIm1hcENPUkxhbmciLCJpc01haWFBZ2VudCIsImFnZW50IiwidHlwZSIsImlzTWFya2V0cGxhY2VNYWlha2VyRW5hYmxlZCIsIndpbmRvdyIsIk1BSUFfTUFSS0VUUExBQ0VfTUFJQUtFUiIsImlzNDAzQWdlbnRGZXRjaEVycm9yIiwiZXJyIiwiX2Vycm9yJHJlc3BvbnNlIiwiX2Vycm9yJG1lc3NhZ2UiLCJfZXJyb3IkbWVzc2FnZTIiLCJlcnJvciIsInJlc3BvbnNlIiwic3RhdHVzIiwiQm9vbGVhbiIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsIm1lcmdlQWdlbnRzV2l0aG91dER1cGxpY2F0ZXMiLCJiYXNlIiwiZXh0cmEiLCJpZHMiLCJTZXQiLCJtYXAiLCJpZCIsIm1lcmdlZCIsIl90b0NvbnN1bWFibGVBcnJheSIsImZvckVhY2giLCJoYXMiLCJwdXNoIiwic29ydEFnZW50cyIsImFnZW50cyIsIm1haWFBZ2VudHMiLCJmaWx0ZXIiLCJvdGhlckFnZW50cyIsImFnIiwiZmF2b3JpdGVzIiwiaXNfZmF2b3JpdGUiLCJzb3J0IiwiYSIsImIiLCJuYW1lIiwibG9jYWxlQ29tcGFyZSIsIm5vbkZhdm9yaXRlcyIsImxlbmd0aCIsImNvbmNhdCIsInVzZUdldEFnZW50cyIsIl9yZWYiLCJzZWxlY3RBZ2VudCIsInNlY3Rpb24iLCJoYW5kbGVHb0hvbWUiLCJ1c2VyIiwiX3VzZVN0YXRlIiwiZGF0YSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNldEFnZW50cyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibG9hZGluZyIsInNldExvYWRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImxvYWRpbmdNb3JlIiwic2V0TG9hZGluZ01vcmUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNlYXJjaExvYWRpbmciLCJzZXRTZWFyY2hMb2FkaW5nIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzZXRFcnJvciIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhckVycm9yIiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsImkxOG4iLCJsYXN0U2VsZWN0ZWRBZ2VudFJlZiIsImlzUmVmcmVzaGluZ1JlZiIsImxhc3RSZXF1ZXN0UmVmIiwiYWdlbnRzUmVmIiwicHJlU2VhcmNoQWdlbnRzUmVmIiwiY3VycmVudCIsImFkZEFnZW50IiwibmV3QWdlbnQiLCJvcHRpb25zIiwicHJldiIsImFnZW50RXhpc3RzIiwic29tZSIsImV4aXN0aW5nQWdlbnQiLCJuZXdEYXRhIiwic29ydGVkRGF0YSIsIl9vYmplY3RTcHJlYWQiLCJuYXZpZ2F0ZUhvbWUiLCJyZW1vdmVBZ2VudCIsImFnZW50SWQiLCJ0b1N0cmluZyIsInVwZGF0ZUFnZW50IiwidXBkYXRlZEFnZW50IiwidXBkYXRlZERhdGEiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2hvdWxkU29ydCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIl9yZWYyIiwiYWdlbnRGaWVsZHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJtZXJnZWRBZ2VudCIsImZpbmFsRGF0YSIsImZpbmQiLCJfcmVmMyIsIl9leGNsdWRlZDIiLCJfcmVmNCIsIl9leGNsdWRlZDMiLCJzb3J0QWdlbnRzTGlzdCIsInNlbGVjdEZpcnN0QWdlbnQiLCJmaXJzdEFnZW50IiwiZmluZEluZGV4IiwiYWdlbnREYXRhIiwiaGFuZGxlR2V0QWdlbnRzIiwiX3JlZjUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZTQiLCJhZ2VudFRvU2VsZWN0IiwiX2FnZW50VG9TZWxlY3QkaWQiLCJyZXF1ZXN0S2V5IiwiaXNNdWx0aUFnZW50cyIsImFnZW50UGFyc2VkIiwiaGFzTW9yZSIsIm5leHRPZmZzZXQiLCJjbG9uZUFnZW50c1JvbGVCbG9ja2VkIiwiY2FuRmV0Y2hDbG9uZUFnZW50cyIsImZldGNoR2xvYmFsQ2xvbmVBZ2VudHMiLCJjdXN0b21BZ2VudHMiLCJjdXN0b21IYXNNb3JlIiwiY3VzdG9tTmV4dE9mZnNldCIsImlzNDAzIiwibG9hZENsb25lQWdlbnRzIiwibG9hZEN1c3RvbUFnZW50cyIsInF1ZXJ5UGFyYW1zIiwicXVlcnlTdHJpbmciLCJwYXRoIiwiZ2xvYmFsQ2xvbmVBZ2VudHMiLCJfcmVzcG9uc2VFcnJvciRyZXNwb24iLCJfcmVzcG9uc2VFcnJvciRtZXNzYWciLCJfcmVzcG9uc2VFcnJvciRtZXNzYWcyIiwiaXM0MDNFcnJvciIsIl9hZ2VudFBhcnNlZCIsIl9hZ2VudFBhcnNlZDIiLCJfbGFzdFNlbGVjdGVkQWdlbnRSZWYiLCJfbGFzdFNlbGVjdGVkQWdlbnRSZWYyIiwiYXZhaWxhYmxlQWdlbnRzIiwiX2F2YWlsYWJsZUFnZW50cyIsIl9sYXN0U2VsZWN0ZWRBZ2VudFJlZjMiLCJfYXZhaWxhYmxlQWdlbnRzMiIsIl9hdmFpbGFibGVBZ2VudHMzIiwiZmlyc3RBdmFpbGFibGVBZ2VudCIsIl90NCIsIl90NSIsIndyYXAiLCJfY29udGV4dDQiLCJuZXh0IiwiYWJydXB0IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsIl9yZWY2IiwiX2NhbGxlZSIsImNsb25lUmVzcG9uc2UiLCJjbG9uZURhdGEiLCJfdCIsIl9jb250ZXh0IiwibGFuZ3VhZ2UiLCJtZXRob2QiLCJzZW50IiwianNvbiIsInN0b3AiLCJhcHBseSIsIl9yZWY3IiwiX2NhbGxlZTIiLCJfbWFpYURhdGEkZGF0YSIsIm1haWFSZXNwb25zZSIsIm1haWFEYXRhIiwiX3QyIiwiX2NvbnRleHQyIiwiX3JlZjgiLCJfY2FsbGVlMyIsImN1c3RvbVJlc3BvbnNlIiwiY3VzdG9tRGF0YSIsIl90MyIsIl9jb250ZXh0MyIsImhhc19tb3JlIiwibmV4dF9vZmZzZXQiLCJQcm9taXNlIiwiYWxsIiwiVVJMU2VhcmNoUGFyYW1zIiwiYXBwZW5kIiwiYWdlbnRUb1JlcXVlc3QiLCJhZ2VudEl0ZW0iLCJFcnJvciIsInNldFRpbWVvdXQiLCJmaW5pc2giLCJfeCIsInNlYXJjaEN1c3RvbUFnZW50cyIsIl9yZWY5IiwiX2NhbGxlZTUiLCJxdWVyeSIsIl90NiIsIl9jb250ZXh0NSIsImVuY29kZVVSSUNvbXBvbmVudCIsImNsb25lQWdlbnRzIiwiY3VzdG9tUmVzdWx0cyIsIl94MiIsImxvYWRNb3JlQWdlbnRzIiwiX2NhbGxlZTYiLCJjYW5Mb2FkTW9yZSIsIl90NyIsIl9jb250ZXh0NiIsImV4aXN0aW5nTWFpYUFnZW50cyIsImV4aXN0aW5nSWRzIiwibmV3QWdlbnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL21haWEvQWdlbnRzL2dldEFnZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IGZldGNoTWFpYSB9IGZyb20gJy4uL2NsaWVudCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IGlzTWFpYUNsb25lQWdlbnRzUm9sZUJsb2NrZWQgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvbWFpYVRhc2tQYW5lbEFjY2VzcydcbmltcG9ydCB7IFNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgbWFwQ09STGFuZyB9IGZyb20gJy4uLy4uLy4uL2xhbmcvdXRpbHMnXG5cbmNvbnN0IGlzTWFpYUFnZW50ID0gKGFnZW50OiBBZ2VudCkgPT4gYWdlbnQudHlwZSA9PT0gJ29yY2hlc3RyYXRvcidcblxuY29uc3QgaXNNYXJrZXRwbGFjZU1haWFrZXJFbmFibGVkID0gKCkgPT4gISF3aW5kb3cuTUFJQV9NQVJLRVRQTEFDRV9NQUlBS0VSXG5cbmNvbnN0IGlzNDAzQWdlbnRGZXRjaEVycm9yID0gKGVycjogdW5rbm93bik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBlcnJvciA9IGVyciBhcyB7IHJlc3BvbnNlPzogeyBzdGF0dXM/OiBudW1iZXIgfTsgc3RhdHVzPzogbnVtYmVyOyBtZXNzYWdlPzogc3RyaW5nIH1cbiAgcmV0dXJuIChcbiAgICBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAzIHx8XG4gICAgZXJyb3I/LnN0YXR1cyA9PT0gNDAzIHx8XG4gICAgQm9vbGVhbihlcnJvcj8ubWVzc2FnZT8uaW5jbHVkZXMoXCJZb3UgZG9uJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIHZpZXcgYWdlbnRzXCIpKSB8fFxuICAgIEJvb2xlYW4oZXJyb3I/Lm1lc3NhZ2U/LmluY2x1ZGVzKCdGYWlsZWQgZmV0Y2hpbmcgZGF0YScpKVxuICApXG59XG5cbmNvbnN0IG1lcmdlQWdlbnRzV2l0aG91dER1cGxpY2F0ZXMgPSAoYmFzZTogQWdlbnRbXSwgZXh0cmE6IEFnZW50W10pOiBBZ2VudFtdID0+IHtcbiAgY29uc3QgaWRzID0gbmV3IFNldChiYXNlLm1hcChhZ2VudCA9PiBhZ2VudC5pZCkpXG4gIGNvbnN0IG1lcmdlZCA9IFsuLi5iYXNlXVxuICBleHRyYS5mb3JFYWNoKGFnZW50ID0+IHtcbiAgICBpZiAoIWlkcy5oYXMoYWdlbnQuaWQpKSBtZXJnZWQucHVzaChhZ2VudClcbiAgfSlcbiAgcmV0dXJuIG1lcmdlZFxufVxuXG4vKipcbiAqIE9yZGVuYSBsb3MgYWdlbnRlczogTUFJQSBwcmltZXJvIChzaSBleGlzdGUpLCBsdWVnbyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZSwgbHVlZ28gbm8gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGVcbiAqL1xuY29uc3Qgc29ydEFnZW50cyA9IChhZ2VudHM6IEFnZW50W10pOiBBZ2VudFtdID0+IHtcbiAgY29uc3QgbWFpYUFnZW50cyA9IGFnZW50cy5maWx0ZXIoaXNNYWlhQWdlbnQpXG4gIGNvbnN0IG90aGVyQWdlbnRzID0gYWdlbnRzLmZpbHRlcihhZyA9PiAhaXNNYWlhQWdlbnQoYWcpKVxuXG4gIC8vIFNlcGFyYXIgZmF2b3JpdG9zIHkgbm8gZmF2b3JpdG9zXG4gIGNvbnN0IGZhdm9yaXRlcyA9IG90aGVyQWdlbnRzLmZpbHRlcihhZyA9PiBhZy5pc19mYXZvcml0ZSkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSlcbiAgY29uc3Qgbm9uRmF2b3JpdGVzID0gb3RoZXJBZ2VudHMuZmlsdGVyKGFnID0+ICFhZy5pc19mYXZvcml0ZSkuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSlcblxuICByZXR1cm4gbWFpYUFnZW50cy5sZW5ndGggPyBbLi4ubWFpYUFnZW50cywgLi4uZmF2b3JpdGVzLCAuLi5ub25GYXZvcml0ZXNdIDogWy4uLmZhdm9yaXRlcywgLi4ubm9uRmF2b3JpdGVzXVxufVxuXG50eXBlIFVzZUdldEFnZW50c1Byb3BzID0ge1xuICBzZWxlY3RBZ2VudDogKGFnZW50OiBBZ2VudCkgPT4gdm9pZFxuICBzZWN0aW9uOiBTZWN0aW9uXG4gIGFnZW50OiBBZ2VudCB8IG51bGxcbiAgaGFuZGxlR29Ib21lOiAoKSA9PiB2b2lkXG59XG5cbmV4cG9ydCB0eXBlIEFkZEFnZW50T3B0aW9ucyA9IHtcbiAgLyoqIFBvciBkZWZlY3RvIGB0cnVlYCAoY29tcG9ydGFtaWVudG8gQUJNKS4gUGFzYXIgYGZhbHNlYCBhbCBpbnNlcnRhciBhZ2VudGUgY3JlYWRvIHBvciBjaGF0IHNpbiBjYW1iaWFyIGRlIHZpc3RhLiAqL1xuICBuYXZpZ2F0ZUhvbWU/OiBib29sZWFuXG59XG5cbmV4cG9ydCBjb25zdCB1c2VHZXRBZ2VudHMgPSAoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZSB9OiBVc2VHZXRBZ2VudHNQcm9wcykgPT4ge1xuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IFthZ2VudHMsIHNldEFnZW50c10gPSB1c2VTdGF0ZTx7IGRhdGE6IEFnZW50W107IGhhc19tb3JlPzogYm9vbGVhbjsgbmV4dF9vZmZzZXQ/OiBudW1iZXIgfCBudWxsIH0+KHsgZGF0YTogW10gfSlcbiAgY29uc3QgW2xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtsb2FkaW5nTW9yZSwgc2V0TG9hZGluZ01vcmVdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWFyY2hMb2FkaW5nLCBzZXRTZWFyY2hMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZXJyb3IsIHNldEVycm9yXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHsgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcbiAgY29uc3QgeyB0LCBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbignY2hhdF9haV9zZWN0aW9uJylcbiAgY29uc3QgbGFzdFNlbGVjdGVkQWdlbnRSZWYgPSB1c2VSZWY8QWdlbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBpc1JlZnJlc2hpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGxhc3RSZXF1ZXN0UmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGFnZW50c1JlZiA9IHVzZVJlZihhZ2VudHMpXG4gIGNvbnN0IHByZVNlYXJjaEFnZW50c1JlZiA9IHVzZVJlZjx7IGRhdGE6IEFnZW50W107IGhhc19tb3JlPzogYm9vbGVhbjsgbmV4dF9vZmZzZXQ/OiBudW1iZXIgfCBudWxsIH0gfCBudWxsPihudWxsKVxuXG4gIGFnZW50c1JlZi5jdXJyZW50ID0gYWdlbnRzXG5cbiAgY29uc3QgYWRkQWdlbnQgPSB1c2VDYWxsYmFjayhcbiAgICAobmV3QWdlbnQ6IEFnZW50LCBvcHRpb25zPzogQWRkQWdlbnRPcHRpb25zKSA9PiB7XG4gICAgICBzZXRBZ2VudHMocHJldiA9PiB7XG4gICAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBhZ2VudGUgeWEgZXhpc3RlIHBhcmEgZXZpdGFyIGR1cGxpY2Fkb3NcbiAgICAgICAgY29uc3QgYWdlbnRFeGlzdHMgPSBwcmV2LmRhdGEuc29tZShleGlzdGluZ0FnZW50ID0+IGV4aXN0aW5nQWdlbnQuaWQgPT09IG5ld0FnZW50LmlkKVxuICAgICAgICBpZiAoYWdlbnRFeGlzdHMpIHtcbiAgICAgICAgICByZXR1cm4gcHJldlxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBbLi4ucHJldi5kYXRhLCBuZXdBZ2VudF1cbiAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHNvcnRBZ2VudHMobmV3RGF0YSlcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIGRhdGE6IHNvcnRlZERhdGEsXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAob3B0aW9ucz8ubmF2aWdhdGVIb21lICE9PSBmYWxzZSkge1xuICAgICAgICBoYW5kbGVHb0hvbWUoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUdvSG9tZV1cbiAgKVxuXG4gIGNvbnN0IHJlbW92ZUFnZW50ID0gdXNlQ2FsbGJhY2soKGFnZW50SWQ6IG51bWJlciB8IHN0cmluZykgPT4ge1xuICAgIHNldEFnZW50cyhwcmV2ID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgZGF0YTogcHJldi5kYXRhLmZpbHRlcihhID0+IGEuaWQgIT09IGFnZW50SWQudG9TdHJpbmcoKSksXG4gICAgfSkpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHVwZGF0ZUFnZW50ID0gdXNlQ2FsbGJhY2soKHVwZGF0ZWRBZ2VudDogQWdlbnQpID0+IHtcbiAgICBzZXRBZ2VudHMocHJldiA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IHByZXYuZGF0YS5tYXAoZXhpc3RpbmdBZ2VudCA9PlxuICAgICAgICBleGlzdGluZ0FnZW50LmlkID09PSB1cGRhdGVkQWdlbnQuaWQgPyB1cGRhdGVkQWdlbnQgOiBleGlzdGluZ0FnZW50XG4gICAgICApXG4gICAgICBjb25zdCBzb3J0ZWREYXRhID0gc29ydEFnZW50cyh1cGRhdGVkRGF0YSlcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICAgIGRhdGE6IHNvcnRlZERhdGEsXG4gICAgICB9XG4gICAgfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgdXBkYXRlQWdlbnRGYXZvcml0ZSA9IHVzZUNhbGxiYWNrKFxuICAgICh1cGRhdGVkQWdlbnQ6IEFnZW50LCBzaG91bGRTb3J0OiBib29sZWFuID0gZmFsc2UpID0+IHtcbiAgICAgIHNldEFnZW50cyhwcmV2ID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZERhdGEgPSBwcmV2LmRhdGEubWFwKGV4aXN0aW5nQWdlbnQgPT4ge1xuICAgICAgICAgIGlmIChleGlzdGluZ0FnZW50LmlkID09PSB1cGRhdGVkQWdlbnQuaWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbWVzc2FnZSwgLi4uYWdlbnRGaWVsZHMgfSA9IHVwZGF0ZWRBZ2VudCBhcyBhbnlcbiAgICAgICAgICAgIGNvbnN0IG1lcmdlZEFnZW50ID0geyAuLi5leGlzdGluZ0FnZW50LCAuLi5hZ2VudEZpZWxkcyB9XG4gICAgICAgICAgICByZXR1cm4gbWVyZ2VkQWdlbnRcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nQWdlbnRcbiAgICAgICAgfSlcblxuICAgICAgICAvLyBTb2xvIG9yZGVuYXIgc2kgc2hvdWxkU29ydCBlcyB0cnVlXG4gICAgICAgIGNvbnN0IGZpbmFsRGF0YSA9IHNob3VsZFNvcnQgPyBzb3J0QWdlbnRzKHVwZGF0ZWREYXRhKSA6IHVwZGF0ZWREYXRhXG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgIGRhdGE6IGZpbmFsRGF0YSxcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgLy8gQWN0dWFsaXphciBlbCBhZ2VudGUgc2VsZWNjaW9uYWRvIHNpIGVzIGVsIHF1ZSBzZSBlc3TDoSBhY3R1YWxpemFuZG9cbiAgICAgIGlmIChhZ2VudD8uaWQgPT09IHVwZGF0ZWRBZ2VudC5pZCkge1xuICAgICAgICBjb25zdCBleGlzdGluZ0FnZW50ID0gYWdlbnRzLmRhdGEuZmluZChhID0+IGEuaWQgPT09IHVwZGF0ZWRBZ2VudC5pZClcbiAgICAgICAgaWYgKGV4aXN0aW5nQWdlbnQpIHtcbiAgICAgICAgICBjb25zdCB7IG1lc3NhZ2UsIC4uLmFnZW50RmllbGRzIH0gPSB1cGRhdGVkQWdlbnQgYXMgYW55XG4gICAgICAgICAgY29uc3QgbWVyZ2VkQWdlbnQgPSB7IC4uLmV4aXN0aW5nQWdlbnQsIC4uLmFnZW50RmllbGRzIH1cbiAgICAgICAgICBzZWxlY3RBZ2VudChtZXJnZWRBZ2VudClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB7IG1lc3NhZ2UsIC4uLmFnZW50RmllbGRzIH0gPSB1cGRhdGVkQWdlbnQgYXMgYW55XG4gICAgICAgICAgc2VsZWN0QWdlbnQoYWdlbnRGaWVsZHMgYXMgQWdlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudCwgc2VsZWN0QWdlbnQsIGFnZW50cy5kYXRhXVxuICApXG5cbiAgY29uc3Qgc29ydEFnZW50c0xpc3QgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0QWdlbnRzKHByZXYgPT4ge1xuICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHNvcnRBZ2VudHMocHJldi5kYXRhKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgZGF0YTogc29ydGVkRGF0YSxcbiAgICAgIH1cbiAgICB9KVxuICB9LCBbXSlcblxuICBjb25zdCBzZWxlY3RGaXJzdEFnZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50SWQ/OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChhZ2VudHMuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZmlyc3RBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmRJbmRleChhZ2VudERhdGEgPT4gYWdlbnREYXRhLmlkID09PSBhZ2VudElkKVxuICAgICAgICBsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50ID0gYWdlbnRzLmRhdGFbZmlyc3RBZ2VudCA9PT0gMCA/IDEgOiAwXVxuICAgICAgICBzZWxlY3RBZ2VudChhZ2VudHMuZGF0YVtmaXJzdEFnZW50ID09PSAwID8gMSA6IDBdKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50cy5kYXRhLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUdldEFnZW50cyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChhZ2VudFRvU2VsZWN0PzogQWdlbnQpID0+IHtcbiAgICAgIGlmIChpc1JlZnJlc2hpbmdSZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdEtleSA9IGFnZW50VG9TZWxlY3Q/LmlkPy50b1N0cmluZygpIHx8ICdkZWZhdWx0J1xuICAgICAgaWYgKGxhc3RSZXF1ZXN0UmVmLmN1cnJlbnQgPT09IHJlcXVlc3RLZXkgJiYgIWxvYWRpbmcpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlzUmVmcmVzaGluZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgbGFzdFJlcXVlc3RSZWYuY3VycmVudCA9IHJlcXVlc3RLZXlcbiAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgIHNldEVycm9yKG51bGwpXG5cbiAgICAgIGNvbnN0IGlzTXVsdGlBZ2VudHMgPSAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuXG4gICAgICB0cnkge1xuICAgICAgICBsZXQgYWdlbnRQYXJzZWQ6IEFnZW50W10gPSBbXVxuICAgICAgICBsZXQgaGFzTW9yZSA9IGZhbHNlXG4gICAgICAgIGxldCBuZXh0T2Zmc2V0OiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAgICAgICBjb25zdCBjbG9uZUFnZW50c1JvbGVCbG9ja2VkID0gaXNNYWlhQ2xvbmVBZ2VudHNSb2xlQmxvY2tlZCh1c2VyLCBzZWN0aW9uKVxuICAgICAgICBjb25zdCBjYW5GZXRjaENsb25lQWdlbnRzID0gIWNsb25lQWdlbnRzUm9sZUJsb2NrZWRcblxuICAgICAgICBjb25zdCBmZXRjaEdsb2JhbENsb25lQWdlbnRzID0gYXN5bmMgKCk6IFByb21pc2U8QWdlbnRbXT4gPT4ge1xuICAgICAgICAgIGlmICghaXNNYXJrZXRwbGFjZU1haWFrZXJFbmFibGVkKCkgfHwgIWNhbkZldGNoQ2xvbmVBZ2VudHMpIHJldHVybiBbXVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjbG9uZVJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWNsb25lJmVudGl0eT1nbG9iYWwmbGFuZz0ke21hcENPUkxhbmcoaTE4bi5sYW5ndWFnZSl9YCxcbiAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjb25zdCBjbG9uZURhdGEgPSBhd2FpdCBjbG9uZVJlc3BvbnNlLmpzb24oKVxuICAgICAgICAgICAgcmV0dXJuIChjbG9uZURhdGEuZGF0YSB8fCBbXSkuZmlsdGVyKChhZzogQWdlbnQpID0+IGFnLnR5cGUgPT09ICdjbG9uZScpXG4gICAgICAgICAgfSBjYXRjaCAoY2xvbmVFcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzNDAzQWdlbnRGZXRjaEVycm9yKGNsb25lRXJyb3IpKSByZXR1cm4gW11cbiAgICAgICAgICAgIHRocm93IGNsb25lRXJyb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaSB0aWVuZSBmZWF0dXJlIGFjY2VzcyBtdWx0aSBhZ2VudHMsIGhhY2VyIGRvcyBxdWVyaWVzIChNYWlhICsgY3VzdG9tKSBlbiBjdWFscXVpZXIgc2VjY2nDs25cbiAgICAgICAgaWYgKGlzTXVsdGlBZ2VudHMpIHtcbiAgICAgICAgICAvLyBRdWVyeSBjbG9uZSAoTWFpYSkgeSBjdXN0b20gc29uIGluZGVwZW5kaWVudGVzIOKGkiBzZSBkaXNwYXJhbiBlbiBwYXJhbGVsby5cbiAgICAgICAgICBsZXQgY3VzdG9tQWdlbnRzOiBBZ2VudFtdID0gW11cbiAgICAgICAgICBsZXQgY3VzdG9tSGFzTW9yZSA9IGZhbHNlXG4gICAgICAgICAgbGV0IGN1c3RvbU5leHRPZmZzZXQ6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICAgICAgICBjb25zdCBpczQwMyA9IGlzNDAzQWdlbnRGZXRjaEVycm9yXG5cbiAgICAgICAgICBsZXQgbWFpYUFnZW50czogQWdlbnRbXSA9IFtdXG5cbiAgICAgICAgICBjb25zdCBsb2FkQ2xvbmVBZ2VudHMgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWNhbkZldGNoQ2xvbmVBZ2VudHMpIHJldHVyblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgbWFpYVJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9b3JjaGVzdHJhdG9yJmxhbmc9JHttYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpfWAsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgY29uc3QgbWFpYURhdGEgPSBhd2FpdCBtYWlhUmVzcG9uc2UuanNvbigpXG4gICAgICAgICAgICAgIG1haWFBZ2VudHMgPSBtYWlhRGF0YS5kYXRhPy5maWx0ZXIoaXNNYWlhQWdlbnQpIHx8IFtdXG4gICAgICAgICAgICAgIGNvbnN0IGdsb2JhbENsb25lQWdlbnRzID0gYXdhaXQgZmV0Y2hHbG9iYWxDbG9uZUFnZW50cygpXG4gICAgICAgICAgICAgIG1haWFBZ2VudHMgPSBtZXJnZUFnZW50c1dpdGhvdXREdXBsaWNhdGVzKG1haWFBZ2VudHMsIGdsb2JhbENsb25lQWdlbnRzKVxuICAgICAgICAgICAgfSBjYXRjaCAobWFpYUVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgIC8vIFNpIGVzIDQwMywgY29udGludWFyIHNpbiBsb3MgY2xvbmVBZ2VudHM7IHNpIGVzIG90cm8gZXJyb3IsIHByb3BhZ2FybG9cbiAgICAgICAgICAgICAgaWYgKCFpczQwMyhtYWlhRXJyb3IpKSB0aHJvdyBtYWlhRXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBsb2FkQ3VzdG9tQWdlbnRzID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgY3VzdG9tUmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgICAgICAgICAgICAgIHBhdGg6ICdhZ2VudHM/YWdlbnRfdHlwZT1jdXN0b20mbGltaXQ9NyZvZmZzZXQ9MCcsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgY29uc3QgY3VzdG9tRGF0YSA9IGF3YWl0IGN1c3RvbVJlc3BvbnNlLmpzb24oKVxuICAgICAgICAgICAgICBjdXN0b21BZ2VudHMgPSBjdXN0b21EYXRhLmRhdGEgfHwgW11cbiAgICAgICAgICAgICAgY3VzdG9tSGFzTW9yZSA9IGN1c3RvbURhdGEuaGFzX21vcmUgfHwgZmFsc2VcbiAgICAgICAgICAgICAgY3VzdG9tTmV4dE9mZnNldCA9IGN1c3RvbURhdGEubmV4dF9vZmZzZXQgfHwgbnVsbFxuICAgICAgICAgICAgfSBjYXRjaCAoY3VzdG9tRXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICAvLyBTaSBlcyA0MDMsIGNvbnRpbnVhciBzaW4gbG9zIGN1c3RvbUFnZW50cyAocXVlZGEgY29tbyBhcnJheSB2YWPDrW8pOyBzaSBubywgcHJvcGFnYXJsb1xuICAgICAgICAgICAgICBpZiAoIWlzNDAzKGN1c3RvbUVycm9yKSkgdGhyb3cgY3VzdG9tRXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbbG9hZENsb25lQWdlbnRzKCksIGxvYWRDdXN0b21BZ2VudHMoKV0pXG5cbiAgICAgICAgICAvLyBDb21iaW5hcjogYWdlbnRlcyBjbG9uZSBwcmltZXJvLCBsdWVnbyBsb3MgY3VzdG9tIChzaSBleGlzdGVuKVxuICAgICAgICAgIC8vIFNpIGVsIHVzdWFyaW8gdGllbmUgdW4gcm9sIGRlc2hhYmlsaXRhZG8sIG5vIGluY2x1aXIgY2xvbmVBZ2VudHNcbiAgICAgICAgICBpZiAoIWNhbkZldGNoQ2xvbmVBZ2VudHMpIHtcbiAgICAgICAgICAgIC8vIFJvbCBzaW4gYWNjZXNvIGEgY2xvbmVzIChwLiBlai4gZnJlZWxhbmNlci9jbGllbnRlIG8gY29sYWJvcmFkb3IgZW4gcHJvamVjdC9jbGllbnQpOiBzb2xvIGN1c3RvbUFnZW50c1xuICAgICAgICAgICAgLy8gU2kgY3VzdG9tQWdlbnRzIGVzdMOhIHZhY8OtbyAocG9yIDQwMyksIGFnZW50UGFyc2VkIHNlcsOhIFtdXG4gICAgICAgICAgICBhZ2VudFBhcnNlZCA9IGN1c3RvbUFnZW50c1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZ2VudFBhcnNlZCA9IG1haWFBZ2VudHMubGVuZ3RoID8gWy4uLm1haWFBZ2VudHMsIC4uLmN1c3RvbUFnZW50c10gOiBjdXN0b21BZ2VudHNcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gT3JkZW5hcjogTWFpYSBwcmltZXJvLCBsdWVnbyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZSwgbHVlZ28gbm8gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGVcbiAgICAgICAgICBhZ2VudFBhcnNlZCA9IHNvcnRBZ2VudHMoYWdlbnRQYXJzZWQpXG4gICAgICAgICAgaGFzTW9yZSA9IGN1c3RvbUhhc01vcmVcbiAgICAgICAgICBuZXh0T2Zmc2V0ID0gY3VzdG9tTmV4dE9mZnNldFxuXG4gICAgICAgICAgc2V0QWdlbnRzKHtcbiAgICAgICAgICAgIGRhdGE6IGFnZW50UGFyc2VkLFxuICAgICAgICAgICAgaGFzX21vcmU6IGhhc01vcmUsXG4gICAgICAgICAgICBuZXh0X29mZnNldDogbmV4dE9mZnNldCxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gU2kgbm8gaGF5IGFnZW50ZXMgZGVzcHXDqXMgZGUgcHJvY2VzYXIgbGFzIHF1ZXJpZXMsIGxpbXBpYXIgZWwgZXJyb3JcbiAgICAgICAgICBpZiAoYWdlbnRQYXJzZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzZXRFcnJvcihudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBMw7NnaWNhIHBhcmEgcHJvamVjdCwgY2xpZW50IG8gaGVhZGVyIHNpbiBtdWx0aUFnZW50cyAobWlzbW8gY3JpdGVyaW8gZGUgb3JkZW4gcHJvamVjdC9jbGllbnQ7IGhlYWRlciBhw7FhZGUgcGFnaW5hY2nDs24pXG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgICAgICBpZiAoc2VjdGlvbiA9PT0gJ3Byb2plY3QnIHx8IHNlY3Rpb24gPT09ICdjbGllbnQnIHx8IHNlY3Rpb24gPT09ICdoZWFkZXInIHx8IHNlY3Rpb24gPT09ICd0YXNrJykge1xuICAgICAgICAgICAgcXVlcnlQYXJhbXMuYXBwZW5kKCdhZ2VudF90eXBlJywgJ29yY2hlc3RyYXRvcicpXG4gICAgICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ2xhbmcnLCBtYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpKVxuICAgICAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdoZWFkZXInKSB7XG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnbGltaXQnLCAnNycpXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnb2Zmc2V0JywgJzAnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlQYXJhbXMudG9TdHJpbmcoKVxuICAgICAgICAgIGNvbnN0IHBhdGggPSBgYWdlbnRzJHtxdWVyeVN0cmluZyA/IGA/JHtxdWVyeVN0cmluZ31gIDogJyd9YFxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgICAgIC8vIGRhdGEuZGF0YSB5YSBjb250aWVuZSBlbC9sb3MgYWdlbnRlcyBvcnF1ZXN0YWRvcmVzIGRlIGxhIHF1ZXJ5IGFnZW50X3R5cGU9b3JjaGVzdHJhdG9yXG4gICAgICAgICAgICBhZ2VudFBhcnNlZCA9IGRhdGEuZGF0YSB8fCBbXVxuICAgICAgICAgICAgY29uc3QgZ2xvYmFsQ2xvbmVBZ2VudHMgPSBhd2FpdCBmZXRjaEdsb2JhbENsb25lQWdlbnRzKClcbiAgICAgICAgICAgIGFnZW50UGFyc2VkID0gbWVyZ2VBZ2VudHNXaXRob3V0RHVwbGljYXRlcyhhZ2VudFBhcnNlZCwgZ2xvYmFsQ2xvbmVBZ2VudHMpXG4gICAgICAgICAgICAvLyBPcmRlbmFyOiBNYWlhIHByaW1lcm8sIGx1ZWdvIGZhdm9yaXRvcyBhbGZhYsOpdGljYW1lbnRlLCBsdWVnbyBubyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZVxuICAgICAgICAgICAgYWdlbnRQYXJzZWQgPSBzb3J0QWdlbnRzKGFnZW50UGFyc2VkKVxuICAgICAgICAgICAgaGFzTW9yZSA9IGRhdGEuaGFzX21vcmVcbiAgICAgICAgICAgIG5leHRPZmZzZXQgPSBkYXRhLm5leHRfb2Zmc2V0XG5cbiAgICAgICAgICAgIHNldEFnZW50cyh7XG4gICAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICAgIGRhdGE6IGFnZW50UGFyc2VkLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGNhdGNoIChyZXNwb25zZUVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBlcnJvciBlcyA0MDNcbiAgICAgICAgICAgIC8vIGZldGNoQ09SIHB1ZWRlIGxhbnphciBkaWZlcmVudGVzIHRpcG9zIGRlIGVycm9yZXM6XG4gICAgICAgICAgICAvLyAxLiBFcnJvciBjb24gZXJyb3JEYXRhLmRldGFpbCBzaSBpbmNsdXllICdBY2Nlc3MgZGVuaWVkJ1xuICAgICAgICAgICAgLy8gMi4gRXJyb3IgZ2Vuw6lyaWNvICdGYWlsZWQgZmV0Y2hpbmcgZGF0YScgc2kgZXMgNDAzIHBlcm8gbm8gaW5jbHV5ZSAnQWNjZXNzIGRlbmllZCdcbiAgICAgICAgICAgIC8vIDMuIE5lY2VzaXRhbW9zIHZlcmlmaWNhciBlbCBzdGF0dXMgY29kZSBzaSBlc3TDoSBkaXNwb25pYmxlXG4gICAgICAgICAgICBjb25zdCBpczQwM0Vycm9yID1cbiAgICAgICAgICAgICAgcmVzcG9uc2VFcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAzIHx8XG4gICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3I/LnN0YXR1cyA9PT0gNDAzIHx8XG4gICAgICAgICAgICAgIHJlc3BvbnNlRXJyb3I/Lm1lc3NhZ2U/LmluY2x1ZGVzKFwiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byB2aWV3IGFnZW50c1wiKSB8fFxuICAgICAgICAgICAgICByZXNwb25zZUVycm9yPy5tZXNzYWdlPy5pbmNsdWRlcygnRmFpbGVkIGZldGNoaW5nIGRhdGEnKSAvLyBmZXRjaENPUiBsYW56YSBlc3RvIHBhcmEgNDAzIHNpbiAnQWNjZXNzIGRlbmllZCdcblxuICAgICAgICAgICAgaWYgKGlzNDAzRXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gU2kgZXMgNDAzLCBlc3RhYmxlY2VyIGFnZW50ZXMgdmFjw61vcyB5IGNvbnRpbnVhclxuICAgICAgICAgICAgICBzZXRBZ2VudHMoe1xuICAgICAgICAgICAgICAgIGRhdGE6IFtdLFxuICAgICAgICAgICAgICAgIGhhc19tb3JlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBuZXh0X29mZnNldDogbnVsbCxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgc2V0RXJyb3IobnVsbClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFNpIGVzIG90cm8gZXJyb3IsIGxhbnphcmxvXG4gICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlRXJyb3JcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBMw7NnaWNhIGRlIHNlbGVjdCBhZ2VudCAtIFNvbG8gc2VsZWNjaW9uYXIgc2kgaGF5IGFnZW50ZXMgZGlzcG9uaWJsZXNcbiAgICAgICAgaWYgKGFnZW50UGFyc2VkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAoYWdlbnRUb1NlbGVjdCAmJiBhZ2VudFBhcnNlZC5maW5kKChhZ2VudFRvUmVxdWVzdDogQWdlbnQpID0+IGFnZW50VG9SZXF1ZXN0LmlkID09PSBhZ2VudFRvU2VsZWN0LmlkKSkge1xuICAgICAgICAgICAgaWYgKGxhc3RTZWxlY3RlZEFnZW50UmVmLmN1cnJlbnQ/LmlkICE9PSBhZ2VudFRvU2VsZWN0LmlkKSB7XG4gICAgICAgICAgICAgIGxhc3RTZWxlY3RlZEFnZW50UmVmLmN1cnJlbnQgPSBhZ2VudFRvU2VsZWN0XG4gICAgICAgICAgICAgIHNlbGVjdEFnZW50KGFnZW50VG9TZWxlY3QpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChhZ2VudFBhcnNlZD8uWzBdICYmICghYWdlbnQgfHwgIWFnZW50UGFyc2VkLmZpbmQoKGE6IEFnZW50KSA9PiBhLmlkID09PSBhZ2VudC5pZCkpKSB7XG4gICAgICAgICAgICBjb25zdCBhdmFpbGFibGVBZ2VudHMgPVxuICAgICAgICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTICYmICFjbG9uZUFnZW50c1JvbGVCbG9ja2VkXG4gICAgICAgICAgICAgICAgPyBhZ2VudFBhcnNlZFxuICAgICAgICAgICAgICAgIDogYWdlbnRQYXJzZWQuZmlsdGVyKChhZ2VudEl0ZW06IEFnZW50KSA9PiAhaXNNYWlhQWdlbnQoYWdlbnRJdGVtKSlcblxuICAgICAgICAgICAgY29uc3QgW2ZpcnN0QWdlbnRdID0gYXZhaWxhYmxlQWdlbnRzXG4gICAgICAgICAgICBpZiAoZmlyc3RBZ2VudCAmJiBsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50Py5pZCAhPT0gZmlyc3RBZ2VudC5pZCkge1xuICAgICAgICAgICAgICBsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50ID0gZmlyc3RBZ2VudFxuICAgICAgICAgICAgICBzZWxlY3RBZ2VudChmaXJzdEFnZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoYWdlbnRUb1NlbGVjdCAmJiBhZ2VudFBhcnNlZD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBhdmFpbGFibGVBZ2VudHMgPVxuICAgICAgICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTICYmICFjbG9uZUFnZW50c1JvbGVCbG9ja2VkXG4gICAgICAgICAgICAgICAgPyBhZ2VudFBhcnNlZFxuICAgICAgICAgICAgICAgIDogYWdlbnRQYXJzZWQuZmlsdGVyKChhZ2VudEl0ZW06IEFnZW50KSA9PiAhaXNNYWlhQWdlbnQoYWdlbnRJdGVtKSlcblxuICAgICAgICAgICAgY29uc3QgW2ZpcnN0QXZhaWxhYmxlQWdlbnRdID0gYXZhaWxhYmxlQWdlbnRzXG4gICAgICAgICAgICBpZiAoZmlyc3RBdmFpbGFibGVBZ2VudCAmJiBsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50Py5pZCAhPT0gZmlyc3RBdmFpbGFibGVBZ2VudC5pZCkge1xuICAgICAgICAgICAgICBsYXN0U2VsZWN0ZWRBZ2VudFJlZi5jdXJyZW50ID0gZmlyc3RBdmFpbGFibGVBZ2VudFxuICAgICAgICAgICAgICBzZWxlY3RBZ2VudChmaXJzdEF2YWlsYWJsZUFnZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHNldExvYWRpbmcoZmFsc2UpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2V0RXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdBbiB1bmtub3duIGVycm9yIG9jY3VycmVkJylcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzUmVmcmVzaGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKCFpc1JlZnJlc2hpbmdSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgbGFzdFJlcXVlc3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGxvYWRpbmddXG4gIClcblxuICBjb25zdCBzZWFyY2hDdXN0b21BZ2VudHMgPSB1c2VDYWxsYmFjayhhc3luYyAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIGlmIChwcmVTZWFyY2hBZ2VudHNSZWYuY3VycmVudCkge1xuICAgICAgICBzZXRBZ2VudHMocHJlU2VhcmNoQWdlbnRzUmVmLmN1cnJlbnQpXG4gICAgICAgIHByZVNlYXJjaEFnZW50c1JlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFwcmVTZWFyY2hBZ2VudHNSZWYuY3VycmVudCkge1xuICAgICAgcHJlU2VhcmNoQWdlbnRzUmVmLmN1cnJlbnQgPSBhZ2VudHNSZWYuY3VycmVudFxuICAgIH1cblxuICAgIHNldFNlYXJjaExvYWRpbmcodHJ1ZSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgIHBhdGg6IGBhZ2VudHM/YWdlbnRfdHlwZT1jdXN0b20mbGltaXQ9MjAmb2Zmc2V0PTAmcT0ke2VuY29kZVVSSUNvbXBvbmVudChxdWVyeSl9YCxcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIH0pXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG5cbiAgICAgIHNldEFnZW50cyhwcmV2ID0+IHtcbiAgICAgICAgY29uc3QgY2xvbmVBZ2VudHMgPSBwcmV2LmRhdGEuZmlsdGVyKChhZzogQWdlbnQpID0+IGFnLnR5cGUgPT09ICdjbG9uZScpXG4gICAgICAgIGNvbnN0IGN1c3RvbVJlc3VsdHM6IEFnZW50W10gPSBkYXRhLmRhdGEgfHwgW11cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBjbG9uZUFnZW50cy5sZW5ndGggPyBbLi4uY2xvbmVBZ2VudHMsIC4uLmN1c3RvbVJlc3VsdHNdIDogY3VzdG9tUmVzdWx0cyxcbiAgICAgICAgICBoYXNfbW9yZTogZmFsc2UsXG4gICAgICAgICAgbmV4dF9vZmZzZXQ6IG51bGwsXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ3NuYWNrYmFyLmxvYWRNb3JlQWdlbnRzLmVycm9yJykpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNlYXJjaExvYWRpbmcoZmFsc2UpXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBsb2FkTW9yZUFnZW50cyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBpc011bHRpQWdlbnRzID0gISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgICAvLyBDYXJnYXIgbcOhczogZW4gaGVhZGVyIHNpZW1wcmU7IGVuIHByb2plY3Qgc29sbyBzaSBpc011bHRpQWdlbnRzIChwb3JxdWUgc29sbyBlbnRvbmNlcyBoYXkgcGFnaW5hY2nDs24gZGUgY3VzdG9tKVxuICAgIGNvbnN0IGNhbkxvYWRNb3JlID0gc2VjdGlvbiA9PT0gJ2hlYWRlcicgfHwgaXNNdWx0aUFnZW50c1xuICAgIGlmICghY2FuTG9hZE1vcmUgfHwgIWFnZW50cy5oYXNfbW9yZSB8fCAhYWdlbnRzLm5leHRfb2Zmc2V0IHx8IGxvYWRpbmdNb3JlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRMb2FkaW5nTW9yZSh0cnVlKVxuICAgIHNldEVycm9yKG51bGwpXG5cbiAgICB0cnkge1xuICAgICAgbGV0IHBhdGg6IHN0cmluZ1xuXG4gICAgICAvLyBTaSBlcyBtdWx0aUFnZW50cywgc29sbyBjYXJnYXIgYWdlbnRzIGN1c3RvbSAoTWFpYSB5YSBlc3TDoSBjYXJnYWRvKVxuICAgICAgaWYgKGlzTXVsdGlBZ2VudHMpIHtcbiAgICAgICAgLy8gTWFudGVuZXIgY2FudGlkYWQgaW1wYXIgZGUgY2FyZHM6IHByaW1lcmEgY2FyZ2EgNywgc2lndWllbnRlcyArNiAoNywgMTMsIDE5LCAuLi4pXG4gICAgICAgIHBhdGggPSBgYWdlbnRzP2FnZW50X3R5cGU9Y3VzdG9tJmxpbWl0PTYmb2Zmc2V0PSR7YWdlbnRzLm5leHRfb2Zmc2V0fWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNpIG5vIGVzIG11bHRpQWdlbnRzLCBjYXJnYXIgbcOhcyBhZ2VudGVzIG9ycXVlc3RhZG9yZXMgKE1BSUEpXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpXG4gICAgICAgIHF1ZXJ5UGFyYW1zLmFwcGVuZCgnYWdlbnRfdHlwZScsICdvcmNoZXN0cmF0b3InKVxuICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ2xhbmcnLCBtYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpKVxuICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ2xpbWl0JywgJzcnKVxuICAgICAgICBxdWVyeVBhcmFtcy5hcHBlbmQoJ29mZnNldCcsIGFnZW50cy5uZXh0X29mZnNldC50b1N0cmluZygpKVxuICAgICAgICBwYXRoID0gYGFnZW50cz8ke3F1ZXJ5UGFyYW1zLnRvU3RyaW5nKCl9YFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgIHBhdGgsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG5cbiAgICAgIC8vIEFjdW11bGFyIGFnZW50ZXMsIGV4Y2x1eWVuZG8gZHVwbGljYWRvc1xuICAgICAgc2V0QWdlbnRzKHByZXYgPT4ge1xuICAgICAgICBpZiAoaXNNdWx0aUFnZW50cykge1xuICAgICAgICAgIC8vIEzDs2dpY2EgcGFyYSBtdWx0aUFnZW50czogc2VwYXJhciBNQUlBIHkgY3VzdG9tXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdNYWlhQWdlbnRzID0gcHJldi5kYXRhLmZpbHRlcihpc01haWFBZ2VudClcblxuICAgICAgICAgIC8vIE9idGVuZXIgSURzIGV4aXN0ZW50ZXMgKGV4Y2x1eWVuZG8gTUFJQSlcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0lkcyA9IG5ldyBTZXQocHJldi5kYXRhLmZpbHRlcigoYWc6IEFnZW50KSA9PiAhaXNNYWlhQWdlbnQoYWcpKS5tYXAoKGFnOiBBZ2VudCkgPT4gYWcuaWQpKVxuXG4gICAgICAgICAgLy8gRmlsdHJhciBudWV2b3MgYWdlbnRzIHF1ZSBubyBlc3TDqW4geWEgZW4gbGEgbGlzdGEgKHkgcXVlIG5vIHNlYW4gTUFJQSlcbiAgICAgICAgICBjb25zdCBuZXdBZ2VudHMgPSBkYXRhLmRhdGEuZmlsdGVyKChhZzogQWdlbnQpID0+ICFpc01haWFBZ2VudChhZykgJiYgIWV4aXN0aW5nSWRzLmhhcyhhZy5pZCkpXG5cbiAgICAgICAgICBjb25zdCBuZXdEYXRhID0gZXhpc3RpbmdNYWlhQWdlbnRzLmxlbmd0aFxuICAgICAgICAgICAgPyBbLi4uZXhpc3RpbmdNYWlhQWdlbnRzLCAuLi5wcmV2LmRhdGEuZmlsdGVyKChhZzogQWdlbnQpID0+ICFpc01haWFBZ2VudChhZykpLCAuLi5uZXdBZ2VudHNdXG4gICAgICAgICAgICA6IFsuLi5wcmV2LmRhdGEuZmlsdGVyKChhZzogQWdlbnQpID0+ICFpc01haWFBZ2VudChhZykpLCAuLi5uZXdBZ2VudHNdXG5cbiAgICAgICAgICAvLyBPcmRlbmFyOiBNYWlhIHByaW1lcm8sIGx1ZWdvIGZhdm9yaXRvcyBhbGZhYsOpdGljYW1lbnRlLCBsdWVnbyBubyBmYXZvcml0b3MgYWxmYWLDqXRpY2FtZW50ZVxuICAgICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSBzb3J0QWdlbnRzKG5ld0RhdGEpXG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogc29ydGVkRGF0YSxcbiAgICAgICAgICAgIGhhc19tb3JlOiBkYXRhLmhhc19tb3JlLFxuICAgICAgICAgICAgbmV4dF9vZmZzZXQ6IGRhdGEubmV4dF9vZmZzZXQsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEzDs2dpY2EgcGFyYSAhaXNNdWx0aUFnZW50czogYWdyZWdhciBldml0YW5kbyBkdXBsaWNhZG9zXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nSWRzID0gbmV3IFNldChwcmV2LmRhdGEubWFwKChhZzogQWdlbnQpID0+IGFnLmlkKSlcbiAgICAgICAgY29uc3QgbmV3QWdlbnRzID0gKGRhdGEuZGF0YSB8fCBbXSkuZmlsdGVyKChhZzogQWdlbnQpID0+ICFleGlzdGluZ0lkcy5oYXMoYWcuaWQpKVxuICAgICAgICBjb25zdCBuZXdEYXRhID0gWy4uLnByZXYuZGF0YSwgLi4ubmV3QWdlbnRzXVxuXG4gICAgICAgIC8vIE9yZGVuYXI6IE1haWEgcHJpbWVybywgbHVlZ28gZmF2b3JpdG9zIGFsZmFiw6l0aWNhbWVudGUsIGx1ZWdvIG5vIGZhdm9yaXRvcyBhbGZhYsOpdGljYW1lbnRlXG4gICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSBzb3J0QWdlbnRzKG5ld0RhdGEpXG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRhOiBzb3J0ZWREYXRhLFxuICAgICAgICAgIGhhc19tb3JlOiBkYXRhLmhhc19tb3JlLFxuICAgICAgICAgIG5leHRfb2Zmc2V0OiBkYXRhLm5leHRfb2Zmc2V0LFxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBzZXRMb2FkaW5nTW9yZShmYWxzZSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnc25hY2tiYXIubG9hZE1vcmVBZ2VudHMuZXJyb3InKSlcbiAgICAgIHNldExvYWRpbmdNb3JlKGZhbHNlKVxuICAgIH1cbiAgfSwgW3NlY3Rpb24sIGFnZW50cy5oYXNfbW9yZSwgYWdlbnRzLm5leHRfb2Zmc2V0LCBsb2FkaW5nTW9yZSwgaTE4bi5sYW5ndWFnZV0pXG5cbiAgcmV0dXJuIHtcbiAgICBhZ2VudHMsXG4gICAgbG9hZGluZyxcbiAgICBsb2FkaW5nTW9yZSxcbiAgICBlcnJvcixcbiAgICBoYW5kbGVHZXRBZ2VudHMsXG4gICAgbG9hZE1vcmVBZ2VudHMsXG4gICAgc2VhcmNoQ3VzdG9tQWdlbnRzLFxuICAgIHNlYXJjaExvYWRpbmcsXG4gICAgYWRkQWdlbnQsXG4gICAgcmVtb3ZlQWdlbnQsXG4gICAgdXBkYXRlQWdlbnQsXG4gICAgdXBkYXRlQWdlbnRGYXZvcml0ZSxcbiAgICBzZWxlY3RGaXJzdEFnZW50LFxuICAgIHNvcnRBZ2VudHNMaXN0LFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFDckQsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0Msa0JBQWtCLFFBQVEsc0RBQXNEO0FBQ3pGLFNBQVNDLFNBQVMsUUFBUSxXQUFXO0FBRXJDLFNBQVNDLE9BQU8sUUFBUSwyQkFBMkI7QUFDbkQsU0FBU0MsNEJBQTRCLFFBQVEsd0NBQXdDO0FBRXJGLFNBQVNDLFVBQVUsUUFBUSxxQkFBcUI7QUFFaEQsSUFBTUMsV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUlDLEtBQVk7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
|