@projectcor/maia-components 2.11.31-1 → 2.11.31-3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +2 -2
  2. package/lib/components/atoms/icons/ChatConversation.js +40 -0
  3. package/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +33 -0
  4. package/lib/components/atoms/icons/index.js +3 -1
  5. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +41 -10
  6. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -4
  7. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +16 -3
  8. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +54 -44
  9. package/lib/components/molecules/ChatAIHome/styles.js +43 -35
  10. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +204 -198
  11. package/lib/components/molecules/ChatAIMessages/ChatDaySeparator.js +43 -0
  12. package/lib/components/molecules/ChatAIMessages/ChatDaySeparator.styles.js +11 -0
  13. package/lib/components/molecules/ChatAIMessages/chatMessageUtils.js +5 -0
  14. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +343 -100
  15. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +28 -15
  16. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +91 -18
  17. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +17 -2
  18. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +13 -0
  19. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +9 -0
  20. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +13 -0
  21. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +3 -0
  22. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +57 -0
  23. package/lib/components/molecules/ChatAIModal/layout.js +35 -0
  24. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +10 -9
  25. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +37 -6
  26. package/lib/components/molecules/Sidebar/Sidebar.js +269 -323
  27. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +18 -23
  28. package/lib/components/molecules/Sidebar/Sidebar.styles.js +54 -37
  29. package/lib/components/molecules/Sidebar/SidebarChats.styles.js +73 -0
  30. package/lib/components/molecules/Sidebar/SidebarChatsSection.js +69 -0
  31. package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +150 -0
  32. package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +238 -0
  33. package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +70 -0
  34. package/lib/components/molecules/Sidebar/sidebarChats.types.js +14 -0
  35. package/lib/dev/Providers.js +2 -2
  36. package/lib/dev/fixtures/devUser.js +173 -0
  37. package/lib/dev/fixtures/mockedUser.js +169 -0
  38. package/lib/hooks/useChatManager/useChatManager.js +35 -85
  39. package/lib/hooks/useChats/useChats.js +12 -4
  40. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +76 -142
  41. package/lib/hooks/useProjectSearch.js +11 -4
  42. package/lib/lang/br/index.js +19 -2
  43. package/lib/lang/en/index.js +19 -2
  44. package/lib/lang/es/index.js +19 -2
  45. package/lib/lang/fr/index.js +19 -2
  46. package/lib/services/maia/Chats/getChatMessagesV2.js +114 -0
  47. package/lib/services/maia/Chats/getChatsByUserId.js +14 -8
  48. package/lib/services/maia/Chats/getSessionByAgent.js +66 -0
  49. package/lib/services/maia/Chats/getSessionsGroupedV2.js +70 -0
  50. package/lib/services/maia/Chats/index.js +7 -1
  51. package/lib/services/maia/Orchestrator/orchestrator.js +6 -4
  52. package/lib/services/maia/client.js +44 -9
  53. package/lib/services/query/projectSearchByValueQuery.js +2 -2
  54. package/lib/store/chatsStore.types.js +10 -2
  55. package/lib/store/useChatsStore.js +75 -37
  56. package/lib/types/Chat.js +3 -1
  57. package/lib/types/Project.js +1 -1
  58. package/package.json +1 -1
  59. package/lib/hooks/useSmoothStreamText/index.js +0 -2
  60. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +0 -292
  61. package/lib/hooks/useStreamingMessage/index.js +0 -3
  62. package/lib/hooks/useStreamingMessage/streamingStore.js +0 -69
  63. package/lib/hooks/useStreamingMessage/useStreamingMessage.js +0 -22
  64. package/lib/mocks/mockChats.js +0 -395
  65. package/lib/mocks/mockedUser.js +0 -169
@@ -15,7 +15,7 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
15
15
  /* eslint-disable no-case-declarations */
16
16
  /* eslint-disable no-restricted-syntax */
17
17
  /* eslint-disable @typescript-eslint/no-explicit-any */
18
- import { useState, useCallback, useRef, useEffect } from 'react';
18
+ import { useState, useCallback, useRef } from 'react';
19
19
  import { useTranslation } from 'react-i18next';
20
20
  import maia from '../../services/maia';
21
21
  import { SECTIONS } from '../../constants/config';
@@ -60,121 +60,89 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
60
60
  onApprovalRequiredRef.current = onApprovalRequired;
61
61
  var handleSSEStream = useCallback(/*#__PURE__*/function () {
62
62
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response) {
63
- var _data$agent_id, _onFinishStreamRef$cu, _onApprovalRequiredRe, _onErrorRef$current;
64
- var pendingContent, rafId, emitThrottled, flushPending, _response$body, reader, decoder, buffer, accumulatedContent, hasStartedWriting, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, _data, _onStartWritingRef$cu, nodeMessage, finalContent, sources, memorySessionId, attachments, suggestions, agentIdRaw, completedAgentId, _onErrorRef$current2, _t, _t2, _t3, _t4;
63
+ var _onStreamUpdateRef$cu, _data$agent_id, _onFinishStreamRef$cu, _onApprovalRequiredRe, _onErrorRef$current;
64
+ var _response$body, reader, decoder, buffer, accumulatedContent, hasStartedWriting, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, _data, _onStartWritingRef$cu, nodeMessage, finalContent, sources, memorySessionId, attachments, suggestions, agentIdRaw, completedAgentId, _onErrorRef$current2, _t, _t2, _t3, _t4;
65
65
  return _regeneratorRuntime.wrap(function (_context) {
66
66
  while (1) switch (_context.prev = _context.next) {
67
67
  case 0:
68
- // rAF-throttle: evita emitir onStreamUpdate más de una vez por frame.
69
- // Acumula el último valor y lo libera en el próximo requestAnimationFrame.
70
- // Nota: no tocamos el state `data` en el hot path (solo se actualiza en
71
- // `complete`/resets) para no re-renderizar a los consumidores del hook
72
- // en cada frame; el texto en vivo viaja por el streamingStore.
73
- pendingContent = null;
74
- rafId = null;
75
- emitThrottled = function emitThrottled(content) {
76
- pendingContent = content;
77
- if (rafId != null) return;
78
- rafId = requestAnimationFrame(function () {
79
- rafId = null;
80
- if (pendingContent != null) {
81
- var _onStreamUpdateRef$cu;
82
- var toEmit = pendingContent;
83
- pendingContent = null;
84
- (_onStreamUpdateRef$cu = onStreamUpdateRef.current) === null || _onStreamUpdateRef$cu === void 0 || _onStreamUpdateRef$cu.call(onStreamUpdateRef, toEmit, null, '');
85
- }
86
- });
87
- };
88
- flushPending = function flushPending() {
89
- if (rafId != null) {
90
- cancelAnimationFrame(rafId);
91
- rafId = null;
92
- }
93
- if (pendingContent != null) {
94
- var _onStreamUpdateRef$cu2;
95
- var toEmit = pendingContent;
96
- pendingContent = null;
97
- (_onStreamUpdateRef$cu2 = onStreamUpdateRef.current) === null || _onStreamUpdateRef$cu2 === void 0 || _onStreamUpdateRef$cu2.call(onStreamUpdateRef, toEmit, null, '');
98
- }
99
- };
100
- _context.prev = 1;
68
+ _context.prev = 0;
101
69
  reader = (_response$body = response.body) === null || _response$body === void 0 ? void 0 : _response$body.getReader();
102
70
  if (reader) {
103
- _context.next = 2;
71
+ _context.next = 1;
104
72
  break;
105
73
  }
106
74
  throw new Error('No reader available');
107
- case 2:
75
+ case 1:
108
76
  decoder = new TextDecoder();
109
77
  buffer = '';
110
78
  accumulatedContent = '';
111
79
  hasStartedWriting = false;
112
- case 3:
80
+ case 2:
113
81
  if (!true) {
114
- _context.next = 26;
82
+ _context.next = 25;
115
83
  break;
116
84
  }
117
85
  if (!isStoppedRef.current) {
118
- _context.next = 4;
86
+ _context.next = 3;
119
87
  break;
120
88
  }
121
89
  reader.cancel();
122
- return _context.abrupt("continue", 26);
123
- case 4:
124
- _context.next = 5;
90
+ return _context.abrupt("continue", 25);
91
+ case 3:
92
+ _context.next = 4;
125
93
  return reader.read();
126
- case 5:
94
+ case 4:
127
95
  _yield$reader$read = _context.sent;
128
96
  done = _yield$reader$read.done;
129
97
  value = _yield$reader$read.value;
130
98
  if (!done) {
131
- _context.next = 6;
99
+ _context.next = 5;
132
100
  break;
133
101
  }
134
- return _context.abrupt("continue", 26);
135
- case 6:
102
+ return _context.abrupt("continue", 25);
103
+ case 5:
136
104
  if (!isStoppedRef.current) {
137
- _context.next = 7;
105
+ _context.next = 6;
138
106
  break;
139
107
  }
140
108
  reader.cancel();
141
- return _context.abrupt("continue", 26);
142
- case 7:
109
+ return _context.abrupt("continue", 25);
110
+ case 6:
143
111
  buffer += decoder.decode(value, {
144
112
  stream: true
145
113
  });
146
114
  lines = buffer.split('\n\n');
147
115
  buffer = lines.pop() || '';
148
116
  _iterator = _createForOfIteratorHelper(lines);
149
- _context.prev = 8;
117
+ _context.prev = 7;
150
118
  _iterator.s();
151
- case 9:
119
+ case 8:
152
120
  if ((_step = _iterator.n()).done) {
153
- _context.next = 22;
121
+ _context.next = 21;
154
122
  break;
155
123
  }
156
124
  line = _step.value;
157
125
  if (!(line.trim() === '')) {
158
- _context.next = 10;
126
+ _context.next = 9;
159
127
  break;
160
128
  }
161
- return _context.abrupt("continue", 21);
162
- case 10:
129
+ return _context.abrupt("continue", 20);
130
+ case 9:
163
131
  _line$split = line.split('\n'), _line$split2 = _slicedToArray(_line$split, 2), eventLine = _line$split2[0], dataLine = _line$split2[1];
164
132
  if (!(!eventLine || !dataLine)) {
165
- _context.next = 11;
133
+ _context.next = 10;
166
134
  break;
167
135
  }
168
- return _context.abrupt("continue", 21);
169
- case 11:
136
+ return _context.abrupt("continue", 20);
137
+ case 10:
170
138
  eventType = eventLine.replace('event: ', '').trim();
171
139
  dataStr = dataLine.replace('data: ', '').trim();
172
- _context.prev = 12;
140
+ _context.prev = 11;
173
141
  _data = JSON.parse(dataStr);
174
142
  _t = eventType;
175
- _context.next = _t === 'token' ? 13 : _t === 'node' ? 14 : _t === 'complete' ? 15 : _t === 'approval_required' ? 16 : _t === 'error' ? 17 : 18;
143
+ _context.next = _t === 'token' ? 12 : _t === 'node' ? 13 : _t === 'complete' ? 14 : _t === 'approval_required' ? 15 : _t === 'error' ? 16 : 17;
176
144
  break;
177
- case 13:
145
+ case 12:
178
146
  if (!hasStartedWriting) {
179
147
  hasStartedWriting = true;
180
148
  setIsWriting(true);
@@ -182,9 +150,10 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
182
150
  (_onStartWritingRef$cu = onStartWritingRef.current) === null || _onStartWritingRef$cu === void 0 || _onStartWritingRef$cu.call(onStartWritingRef);
183
151
  }
184
152
  accumulatedContent += _data.content;
185
- emitThrottled(accumulatedContent);
186
- return _context.abrupt("continue", 19);
187
- case 14:
153
+ setData(accumulatedContent);
154
+ (_onStreamUpdateRef$cu = onStreamUpdateRef.current) === null || _onStreamUpdateRef$cu === void 0 || _onStreamUpdateRef$cu.call(onStreamUpdateRef, accumulatedContent, null, '');
155
+ return _context.abrupt("continue", 18);
156
+ case 13:
188
157
  // Si el evento node tiene un mensaje, actualizarlo para mostrarlo en el loader
189
158
  if (_data.message && typeof _data.message === 'string') {
190
159
  // Asegurar que isLoading esté en true para mostrar el loader
@@ -193,8 +162,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
193
162
  nodeMessage = _data.message.includes('create_task') || _data.message.includes('clone_task') ? _data.message : t('chat.executingAction');
194
163
  setLoadingMessage(nodeMessage);
195
164
  }
196
- return _context.abrupt("continue", 19);
197
- case 15:
165
+ return _context.abrupt("continue", 18);
166
+ case 14:
198
167
  finalContent = _data.content || accumulatedContent;
199
168
  sources = _data.sources || null;
200
169
  memorySessionId = _data.memory_session_id || '';
@@ -207,77 +176,72 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
207
176
  }
208
177
  agentIdRaw = (_data$agent_id = _data.agent_id) !== null && _data$agent_id !== void 0 ? _data$agent_id : _data.agentId;
209
178
  completedAgentId = agentIdRaw != null && String(agentIdRaw).trim() !== '' ? String(agentIdRaw).trim() : null;
210
- flushPending();
211
179
  setData(finalContent);
212
180
  setIsWriting(false);
213
181
  setLoadingMessage(null); // Limpiar mensaje cuando se completa
214
182
  (_onFinishStreamRef$cu = onFinishStreamRef.current) === null || _onFinishStreamRef$cu === void 0 || _onFinishStreamRef$cu.call(onFinishStreamRef, finalContent, sources, memorySessionId, attachments, suggestions, completedAgentId);
215
- return _context.abrupt("continue", 19);
216
- case 16:
217
- flushPending();
183
+ return _context.abrupt("continue", 18);
184
+ case 15:
218
185
  setIsWriting(false);
219
186
  setLoading(false);
220
187
  setLoadingMessage(null); // Limpiar mensaje cuando se requiere aprobación
221
188
  (_onApprovalRequiredRe = onApprovalRequiredRef.current) === null || _onApprovalRequiredRe === void 0 || _onApprovalRequiredRe.call(onApprovalRequiredRef, _data, accumulatedContent);
222
- return _context.abrupt("continue", 19);
223
- case 17:
189
+ return _context.abrupt("continue", 18);
190
+ case 16:
224
191
  console.error('SSE Error:', _data.error);
225
- flushPending();
226
192
  setIsWriting(false);
227
193
  setLoadingMessage(null); // Limpiar mensaje cuando hay error
228
194
  (_onErrorRef$current = onErrorRef.current) === null || _onErrorRef$current === void 0 || _onErrorRef$current.call(onErrorRef);
229
- return _context.abrupt("continue", 19);
230
- case 18:
195
+ return _context.abrupt("continue", 18);
196
+ case 17:
231
197
  console.warn('Unknown SSE event type:', eventType);
232
- case 19:
233
- _context.next = 21;
198
+ case 18:
199
+ _context.next = 20;
234
200
  break;
235
- case 20:
236
- _context.prev = 20;
237
- _t2 = _context["catch"](12);
201
+ case 19:
202
+ _context.prev = 19;
203
+ _t2 = _context["catch"](11);
238
204
  console.error('Error parsing SSE data:', _t2, dataStr);
205
+ case 20:
206
+ _context.next = 8;
207
+ break;
239
208
  case 21:
240
- _context.next = 9;
209
+ _context.next = 23;
241
210
  break;
242
211
  case 22:
243
- _context.next = 24;
244
- break;
212
+ _context.prev = 22;
213
+ _t3 = _context["catch"](7);
214
+ _iterator.e(_t3);
245
215
  case 23:
246
216
  _context.prev = 23;
247
- _t3 = _context["catch"](8);
248
- _iterator.e(_t3);
249
- case 24:
250
- _context.prev = 24;
251
217
  _iterator.f();
252
- return _context.finish(24);
218
+ return _context.finish(23);
219
+ case 24:
220
+ _context.next = 2;
221
+ break;
253
222
  case 25:
254
- _context.next = 3;
223
+ _context.next = 27;
255
224
  break;
256
225
  case 26:
257
- _context.next = 28;
258
- break;
259
- case 27:
260
- _context.prev = 27;
261
- _t4 = _context["catch"](1);
262
- flushPending();
226
+ _context.prev = 26;
227
+ _t4 = _context["catch"](0);
263
228
  setIsWriting(false);
264
229
 
265
230
  // Solo ejecutar onError si no fue un stop intencional
266
231
  if (!isStoppedRef.current) {
267
232
  (_onErrorRef$current2 = onErrorRef.current) === null || _onErrorRef$current2 === void 0 || _onErrorRef$current2.call(onErrorRef);
268
233
  }
269
- case 28:
270
- _context.prev = 28;
271
- flushPending();
234
+ case 27:
235
+ _context.prev = 27;
272
236
  setLoading(false);
273
237
  setIsWriting(false);
274
238
  setLoadingMessage(null);
275
- return _context.finish(28);
276
- case 29:
239
+ return _context.finish(27);
240
+ case 28:
277
241
  case "end":
278
242
  return _context.stop();
279
243
  }
280
- }, _callee, null, [[1, 27, 28, 29], [8, 23, 24, 25], [12, 20]]);
244
+ }, _callee, null, [[0, 26, 27, 28], [7, 22, 23, 24], [11, 19]]);
281
245
  }));
282
246
  return function (_x) {
283
247
  return _ref2.apply(this, arguments);
@@ -285,11 +249,11 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
285
249
  }(), [t]);
286
250
  var askMaia = /*#__PURE__*/function () {
287
251
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref3) {
288
- var message, history, projectId, lang, userId, firstName, lastName, companyId, chatId, messageId, clientId, clientName, agentName, agentId, isWebSearchActive, isDeepSearchActive, attachments, projectName, faqId, agentSuggestionId, agentEntity, _abortControllerRef$c, response, _onErrorRef$current3, _t5;
252
+ var message, history, projectId, lang, userId, firstName, lastName, companyId, chatId, messageId, clientId, clientName, feeId, agentName, agentId, isWebSearchActive, isDeepSearchActive, attachments, projectName, faqId, agentSuggestionId, agentEntity, _abortControllerRef$c, response, _t5;
289
253
  return _regeneratorRuntime.wrap(function (_context2) {
290
254
  while (1) switch (_context2.prev = _context2.next) {
291
255
  case 0:
292
- message = _ref3.message, history = _ref3.history, projectId = _ref3.projectId, lang = _ref3.lang, userId = _ref3.userId, firstName = _ref3.firstName, lastName = _ref3.lastName, companyId = _ref3.companyId, chatId = _ref3.chatId, messageId = _ref3.messageId, clientId = _ref3.clientId, clientName = _ref3.clientName, agentName = _ref3.agentName, agentId = _ref3.agentId, isWebSearchActive = _ref3.isWebSearchActive, isDeepSearchActive = _ref3.isDeepSearchActive, attachments = _ref3.attachments, projectName = _ref3.projectName, faqId = _ref3.faqId, agentSuggestionId = _ref3.agentSuggestionId, agentEntity = _ref3.agentEntity;
256
+ message = _ref3.message, history = _ref3.history, projectId = _ref3.projectId, lang = _ref3.lang, userId = _ref3.userId, firstName = _ref3.firstName, lastName = _ref3.lastName, companyId = _ref3.companyId, chatId = _ref3.chatId, messageId = _ref3.messageId, clientId = _ref3.clientId, clientName = _ref3.clientName, feeId = _ref3.feeId, agentName = _ref3.agentName, agentId = _ref3.agentId, isWebSearchActive = _ref3.isWebSearchActive, isDeepSearchActive = _ref3.isDeepSearchActive, attachments = _ref3.attachments, projectName = _ref3.projectName, faqId = _ref3.faqId, agentSuggestionId = _ref3.agentSuggestionId, agentEntity = _ref3.agentEntity;
293
257
  _context2.prev = 1;
294
258
  setLoading(true);
295
259
  setIsWriting(false);
@@ -299,7 +263,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
299
263
 
300
264
  abortControllerRef.current = new AbortController();
301
265
  _context2.next = 2;
302
- return maia.Orchestrator.orchestrator(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
266
+ return maia.Orchestrator.orchestrator(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
303
267
  input: message,
304
268
  history: history,
305
269
  lang: lang,
@@ -312,7 +276,10 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
312
276
  companyId: companyId,
313
277
  chatId: chatId,
314
278
  messageId: messageId,
315
- clientId: clientId,
279
+ clientId: clientId
280
+ }, feeId != null ? {
281
+ feeId: feeId
282
+ } : {}), {}, {
316
283
  agentName: agentName,
317
284
  agentId: agentId,
318
285
  isWebSearchActive: isWebSearchActive,
@@ -342,11 +309,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
342
309
  case 4:
343
310
  _context2.prev = 4;
344
311
  _t5 = _context2["catch"](1);
345
- // Si fue un abort intencional (stop manual o cambio de chat), no disparar onError
346
- // porque eso inserta un "mensaje de error" en el chat al que acabamos de navegar.
347
- if (!isStoppedRef.current) {
348
- (_onErrorRef$current3 = onErrorRef.current) === null || _onErrorRef$current3 === void 0 || _onErrorRef$current3.call(onErrorRef);
349
- }
312
+ onError === null || onError === void 0 || onError();
350
313
  setLoading(false);
351
314
  case 5:
352
315
  case "end":
@@ -370,34 +333,6 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
370
333
  (_onStopRef$current = onStopRef.current) === null || _onStopRef$current === void 0 || _onStopRef$current.call(onStopRef);
371
334
  }
372
335
  }, []);
373
-
374
- /**
375
- * Aborta el stream en curso (si existe) sin disparar `onStop`.
376
- * Úselo en casos donde no queremos agregar el mensaje de "cancelado"
377
- * (por ejemplo, al cambiar de chat).
378
- */
379
- var abortStreamSilently = useCallback(function () {
380
- if (abortControllerRef.current) {
381
- isStoppedRef.current = true;
382
- abortControllerRef.current.abort();
383
- abortControllerRef.current = null;
384
- setLoading(false);
385
- setIsWriting(false);
386
- setLoadingMessage(null);
387
- }
388
- }, []);
389
-
390
- // Cleanup al desmontar: si queda un stream activo, abortarlo para evitar
391
- // que intente actualizar estado en un componente ya desmontado (fugas de
392
- // memoria y warnings).
393
- useEffect(function () {
394
- return function () {
395
- if (abortControllerRef.current) {
396
- abortControllerRef.current.abort();
397
- abortControllerRef.current = null;
398
- }
399
- };
400
- }, []);
401
336
  var reset = function reset() {
402
337
  setData(null);
403
338
  setLoading(false);
@@ -413,8 +348,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
413
348
  loadingMessage: loadingMessage,
414
349
  reset: reset,
415
350
  stopStreaming: stopStreaming,
416
- abortStreamSilently: abortStreamSilently,
417
351
  handleSSEStream: handleSSEStream // Exponer para poder usarlo en continue-thread
418
352
  };
419
353
  };
420
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJfcmVmIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RhcnRXcml0aW5nIiwib25TdG9wIiwib25FcnJvciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJkYXRhIiwic2V0RGF0YSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNMb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJsb2FkaW5nTWVzc2FnZSIsInNldExvYWRpbmdNZXNzYWdlIiwiYWJvcnRDb250cm9sbGVyUmVmIiwiaXNTdG9wcGVkUmVmIiwib25TdHJlYW1VcGRhdGVSZWYiLCJvbkZpbmlzaFN0cmVhbVJlZiIsIm9uU3RhcnRXcml0aW5nUmVmIiwib25TdG9wUmVmIiwib25FcnJvclJlZiIsIm9uQXBwcm92YWxSZXF1aXJlZFJlZiIsImN1cnJlbnQiLCJoYW5kbGVTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJfZGF0YSRhZ2VudF9pZCIsIl9vbkZpbmlzaFN0cmVhbVJlZiRjdSIsIl9vbkFwcHJvdmFsUmVxdWlyZWRSZSIsIl9vbkVycm9yUmVmJGN1cnJlbnQiLCJwZW5kaW5nQ29udGVudCIsInJhZklkIiwiZW1pdFRocm90dGxlZCIsImZsdXNoUGVuZGluZyIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImhhc1N0YXJ0ZWRXcml0aW5nIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJfbGluZSRzcGxpdCIsIl9saW5lJHNwbGl0MiIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwiZGF0YVN0ciIsIl9kYXRhIiwiX29uU3RhcnRXcml0aW5nUmVmJGN1Iiwibm9kZU1lc3NhZ2UiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwiYXR0YWNobWVudHMiLCJzdWdnZXN0aW9ucyIsImFnZW50SWRSYXciLCJjb21wbGV0ZWRBZ2VudElkIiwiX29uRXJyb3JSZWYkY3VycmVudDIiLCJfdCIsIl90MiIsIl90MyIsIl90NCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiY29udGVudCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdSIsInRvRW1pdCIsImNhbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsIl9vblN0cmVhbVVwZGF0ZVJlZiRjdTIiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsImNhbmNlbCIsImFicnVwdCIsInJlYWQiLCJzZW50IiwiZGVjb2RlIiwic3RyZWFtIiwic3BsaXQiLCJwb3AiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJuIiwidHJpbSIsInJlcGxhY2UiLCJKU09OIiwicGFyc2UiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsIkFycmF5IiwiaXNBcnJheSIsInN1Z2dlc3RfcmVwbHkiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJTdHJpbmciLCJjb25zb2xlIiwiZXJyb3IiLCJ3YXJuIiwiZSIsImYiLCJmaW5pc2giLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImFza01haWEiLCJfcmVmNCIsIl9jYWxsZWUyIiwiX3JlZjMiLCJoaXN0b3J5IiwicHJvamVjdElkIiwibGFuZyIsInVzZXJJZCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY2hhdElkIiwibWVzc2FnZUlkIiwiY2xpZW50SWQiLCJjbGllbnROYW1lIiwiYWdlbnROYW1lIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJwcm9qZWN0TmFtZSIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJhZ2VudEVudGl0eSIsIl9hYm9ydENvbnRyb2xsZXJSZWYkYyIsIl9vbkVycm9yUmVmJGN1cnJlbnQzIiwiX3Q1IiwiX2NvbnRleHQyIiwiQWJvcnRDb250cm9sbGVyIiwiT3JjaGVzdHJhdG9yIiwib3JjaGVzdHJhdG9yIiwiX29iamVjdFNwcmVhZCIsImlucHV0Iiwic2lnbmFsIiwiX3gyIiwic3RvcFN0cmVhbWluZyIsIl9vblN0b3BSZWYkY3VycmVudCIsImFib3J0IiwiYWJvcnRTdHJlYW1TaWxlbnRseSIsInJlc2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZU9yY2hlc3RyYXRvclN0cmVhbS91c2VPcmNoZXN0cmF0b3JTdHJlYW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBDaGF0SGlzdG9yeSB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBBZ2VudEVudGl0eSB9IGZyb20gJy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgVXNlT3JjaGVzdHJhdG9yU3RyZWFtUHJvcHMgfSBmcm9tICcuL3VzZU9yY2hlc3RyYXRvclN0cmVhbS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5cbmV4cG9ydCBjb25zdCB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gPSAoe1xuICBvblN0cmVhbVVwZGF0ZSxcbiAgb25GaW5pc2hTdHJlYW0sXG4gIG9uU3RhcnRXcml0aW5nLFxuICBvblN0b3AsXG4gIG9uRXJyb3IsXG4gIG9uQXBwcm92YWxSZXF1aXJlZCxcbn06IFVzZU9yY2hlc3RyYXRvclN0cmVhbVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmNoYXRBSV0pXG4gIGNvbnN0IFtkYXRhLCBzZXREYXRhXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldExvYWRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2xvYWRpbmdNZXNzYWdlLCBzZXRMb2FkaW5nTWVzc2FnZV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBhYm9ydENvbnRyb2xsZXJSZWYgPSB1c2VSZWY8QWJvcnRDb250cm9sbGVyIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNTdG9wcGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIGNvbnN0IG9uU3RyZWFtVXBkYXRlUmVmID0gdXNlUmVmKG9uU3RyZWFtVXBkYXRlKVxuICBjb25zdCBvbkZpbmlzaFN0cmVhbVJlZiA9IHVzZVJlZihvbkZpbmlzaFN0cmVhbSlcbiAgY29uc3Qgb25TdGFydFdyaXRpbmdSZWYgPSB1c2VSZWYob25TdGFydFdyaXRpbmcpXG4gIGNvbnN0IG9uU3RvcFJlZiA9IHVzZVJlZihvblN0b3ApXG4gIGNvbnN0IG9uRXJyb3JSZWYgPSB1c2VSZWYob25FcnJvcilcbiAgY29uc3Qgb25BcHByb3ZhbFJlcXVpcmVkUmVmID0gdXNlUmVmKG9uQXBwcm92YWxSZXF1aXJlZClcblxuICBvblN0cmVhbVVwZGF0ZVJlZi5jdXJyZW50ID0gb25TdHJlYW1VcGRhdGVcbiAgb25GaW5pc2hTdHJlYW1SZWYuY3VycmVudCA9IG9uRmluaXNoU3RyZWFtXG4gIG9uU3RhcnRXcml0aW5nUmVmLmN1cnJlbnQgPSBvblN0YXJ0V3JpdGluZ1xuICBvblN0b3BSZWYuY3VycmVudCA9IG9uU3RvcFxuICBvbkVycm9yUmVmLmN1cnJlbnQgPSBvbkVycm9yXG4gIG9uQXBwcm92YWxSZXF1aXJlZFJlZi5jdXJyZW50ID0gb25BcHByb3ZhbFJlcXVpcmVkXG5cbiAgY29uc3QgaGFuZGxlU1NFU3RyZWFtID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4ge1xuICAgICAgLy8gckFGLXRocm90dGxlOiBldml0YSBlbWl0aXIgb25TdHJlYW1VcGRhdGUgbcOhcyBkZSB1bmEgdmV6IHBvciBmcmFtZS5cbiAgICAgIC8vIEFjdW11bGEgZWwgw7psdGltbyB2YWxvciB5IGxvIGxpYmVyYSBlbiBlbCBwcsOzeGltbyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG4gICAgICAvLyBOb3RhOiBubyB0b2NhbW9zIGVsIHN0YXRlIGBkYXRhYCBlbiBlbCBob3QgcGF0aCAoc29sbyBzZSBhY3R1YWxpemEgZW5cbiAgICAgIC8vIGBjb21wbGV0ZWAvcmVzZXRzKSBwYXJhIG5vIHJlLXJlbmRlcml6YXIgYSBsb3MgY29uc3VtaWRvcmVzIGRlbCBob29rXG4gICAgICAvLyBlbiBjYWRhIGZyYW1lOyBlbCB0ZXh0byBlbiB2aXZvIHZpYWphIHBvciBlbCBzdHJlYW1pbmdTdG9yZS5cbiAgICAgIGxldCBwZW5kaW5nQ29udGVudDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgICAgIGxldCByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgICAgIGNvbnN0IGVtaXRUaHJvdHRsZWQgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHBlbmRpbmdDb250ZW50ID0gY29udGVudFxuICAgICAgICBpZiAocmFmSWQgIT0gbnVsbCkgcmV0dXJuXG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICByYWZJZCA9IG51bGxcbiAgICAgICAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICAgICAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudD8uKHRvRW1pdCwgbnVsbCwgJycpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29uc3QgZmx1c2hQZW5kaW5nID0gKCkgPT4ge1xuICAgICAgICBpZiAocmFmSWQgIT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKVxuICAgICAgICAgIHJhZklkID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgICBvblN0cmVhbVVwZGF0ZVJlZi5jdXJyZW50Py4odG9FbWl0LCBudWxsLCAnJylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICAgICAgICBpZiAoIXJlYWRlcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnXG4gICAgICAgIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICAgICAgICBsZXQgaGFzU3RhcnRlZFdyaXRpbmcgPSBmYWxzZVxuXG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgaWYgKGlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICAgICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJ1xuXG4gICAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSBjb250aW51ZVxuXG4gICAgICAgICAgICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG5cbiAgICAgICAgICAgICAgc3dpdGNoIChldmVudFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd0b2tlbic6XG4gICAgICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc1N0YXJ0ZWRXcml0aW5nID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UodCgnY2hhdC53cml0aW5nJykpXG4gICAgICAgICAgICAgICAgICAgIG9uU3RhcnRXcml0aW5nUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gZGF0YS5jb250ZW50XG4gICAgICAgICAgICAgICAgICBlbWl0VGhyb3R0bGVkKGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdub2RlJzpcbiAgICAgICAgICAgICAgICAgIC8vIFNpIGVsIGV2ZW50byBub2RlIHRpZW5lIHVuIG1lbnNhamUsIGFjdHVhbGl6YXJsbyBwYXJhIG1vc3RyYXJsbyBlbiBlbCBsb2FkZXJcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm1lc3NhZ2UgJiYgdHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQXNlZ3VyYXIgcXVlIGlzTG9hZGluZyBlc3TDqSBlbiB0cnVlIHBhcmEgbW9zdHJhciBlbCBsb2FkZXJcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICAvLyBNb3N0cmFyIG5vbWJyZSBzb2xvIHBhcmEgY3JlYXRlX3Rhc2sgLyBjbG9uZV90YXNrLCBlbCByZXN0byBtdWVzdHJhIGdlbsOpcmljb1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZXNzYWdlLmluY2x1ZGVzKCdjcmVhdGVfdGFzaycpIHx8IGRhdGEubWVzc2FnZS5pbmNsdWRlcygnY2xvbmVfdGFzaycpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGRhdGEubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpXG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG5vZGVNZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IGRhdGEuY29udGVudCB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZXMgPSBkYXRhLnNvdXJjZXMgfHwgbnVsbFxuICAgICAgICAgICAgICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gZGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCB8fCAnJ1xuICAgICAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGRhdGEuYXR0YWNobWVudHMpID8gZGF0YS5hdHRhY2htZW50cyA6IG51bGxcbiAgICAgICAgICAgICAgICAgIGxldCBzdWdnZXN0aW9ucyA9IG51bGxcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEuc3VnZ2VzdF9yZXBseSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBkYXRhLnN1Z2dlc3RfcmVwbHlcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnN1Z2dlc3Rpb25zKSkge1xuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyA9IGRhdGEuc3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFnZW50SWRSYXcgPSBkYXRhLmFnZW50X2lkID8/IGRhdGEuYWdlbnRJZFxuICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9XG4gICAgICAgICAgICAgICAgICAgIGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAgICAgc2V0RGF0YShmaW5hbENvbnRlbnQpXG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKSAvLyBMaW1waWFyIG1lbnNhamUgY3VhbmRvIHNlIGNvbXBsZXRhXG4gICAgICAgICAgICAgICAgICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50Py4oXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZEFnZW50SWRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdhcHByb3ZhbF9yZXF1aXJlZCc6XG4gICAgICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpIC8vIExpbXBpYXIgbWVuc2FqZSBjdWFuZG8gc2UgcmVxdWllcmUgYXByb2JhY2nDs25cbiAgICAgICAgICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZFJlZi5jdXJyZW50Py4oZGF0YSwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBkYXRhLmVycm9yKVxuICAgICAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpIC8vIExpbXBpYXIgbWVuc2FqZSBjdWFuZG8gaGF5IGVycm9yXG4gICAgICAgICAgICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBTU0UgZXZlbnQgdHlwZTonLCBldmVudFR5cGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBTU0UgZGF0YTonLCBwYXJzZUVycm9yLCBkYXRhU3RyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuXG4gICAgICAgIC8vIFNvbG8gZWplY3V0YXIgb25FcnJvciBzaSBubyBmdWUgdW4gc3RvcCBpbnRlbmNpb25hbFxuICAgICAgICBpZiAoIWlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oKVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgICB9XG4gICAgfSxcbiAgICBbdF1cbiAgKVxuXG4gIGNvbnN0IGFza01haWEgPSBhc3luYyAoe1xuICAgIG1lc3NhZ2UsXG4gICAgaGlzdG9yeSxcbiAgICBwcm9qZWN0SWQsXG4gICAgbGFuZyxcbiAgICB1c2VySWQsXG4gICAgZmlyc3ROYW1lLFxuICAgIGxhc3ROYW1lLFxuICAgIGNvbXBhbnlJZCxcbiAgICBjaGF0SWQsXG4gICAgbWVzc2FnZUlkLFxuICAgIGNsaWVudElkLFxuICAgIGNsaWVudE5hbWUsXG4gICAgYWdlbnROYW1lLFxuICAgIGFnZW50SWQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIHByb2plY3ROYW1lLFxuICAgIGZhcUlkLFxuICAgIGFnZW50U3VnZ2VzdGlvbklkLFxuICAgIGFnZW50RW50aXR5LFxuICB9OiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaGlzdG9yeTogQ2hhdEhpc3RvcnlbXVxuICAgIHByb2plY3RJZDogbnVtYmVyIHwgbnVsbFxuICAgIGxhbmc6IHN0cmluZ1xuICAgIHVzZXJJZDogc3RyaW5nXG4gICAgZmlyc3ROYW1lPzogc3RyaW5nXG4gICAgbGFzdE5hbWU/OiBzdHJpbmdcbiAgICBjb21wYW55SWQ6IHN0cmluZ1xuICAgIGNoYXRJZDogc3RyaW5nXG4gICAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgICBjbGllbnRJZD86IG51bWJlclxuICAgIGNsaWVudE5hbWU/OiBzdHJpbmdcbiAgICBhZ2VudE5hbWU6IHN0cmluZ1xuICAgIGFnZW50SWQ6IHN0cmluZ1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBhZ2VudEVudGl0eT86IEFnZW50RW50aXR5XG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0RGF0YShudWxsKVxuICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2UgLy8gUmVzZXRlYXIgZmxhZyBhbCBpbmljaWFyIG51ZXZhIHBldGljacOzblxuXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcihcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0OiBtZXNzYWdlLFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgLi4uKGZpcnN0TmFtZSA/IHsgZmlyc3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGxhc3ROYW1lID8geyBsYXN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIGNvbXBhbnlJZCxcbiAgICAgICAgICBjaGF0SWQsXG4gICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIGNsaWVudElkLFxuICAgICAgICAgIGFnZW50TmFtZSxcbiAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgICAgICAuLi4ocHJvamVjdElkID8geyBwcm9qZWN0SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHByb2plY3ROYW1lID8geyBwcm9qZWN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjbGllbnROYW1lID8geyBjbGllbnROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGZhcUlkID8geyBmYXFJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRFbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQ/LnNpZ25hbFxuICAgICAgKVxuXG4gICAgICBhd2FpdCBoYW5kbGVTU0VTdHJlYW0ocmVzcG9uc2UpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNpIGZ1ZSB1biBhYm9ydCBpbnRlbmNpb25hbCAoc3RvcCBtYW51YWwgbyBjYW1iaW8gZGUgY2hhdCksIG5vIGRpc3BhcmFyIG9uRXJyb3JcbiAgICAgIC8vIHBvcnF1ZSBlc28gaW5zZXJ0YSB1biBcIm1lbnNhamUgZGUgZXJyb3JcIiBlbiBlbCBjaGF0IGFsIHF1ZSBhY2FiYW1vcyBkZSBuYXZlZ2FyLlxuICAgICAgaWYgKCFpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICBvbkVycm9yUmVmLmN1cnJlbnQ/LigpXG4gICAgICB9XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0b3BTdHJlYW1pbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgICBvblN0b3BSZWYuY3VycmVudD8uKClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBBYm9ydGEgZWwgc3RyZWFtIGVuIGN1cnNvIChzaSBleGlzdGUpIHNpbiBkaXNwYXJhciBgb25TdG9wYC5cbiAgICogw5pzZWxvIGVuIGNhc29zIGRvbmRlIG5vIHF1ZXJlbW9zIGFncmVnYXIgZWwgbWVuc2FqZSBkZSBcImNhbmNlbGFkb1wiXG4gICAqIChwb3IgZWplbXBsbywgYWwgY2FtYmlhciBkZSBjaGF0KS5cbiAgICovXG4gIGNvbnN0IGFib3J0U3RyZWFtU2lsZW50bHkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBDbGVhbnVwIGFsIGRlc21vbnRhcjogc2kgcXVlZGEgdW4gc3RyZWFtIGFjdGl2bywgYWJvcnRhcmxvIHBhcmEgZXZpdGFyXG4gIC8vIHF1ZSBpbnRlbnRlIGFjdHVhbGl6YXIgZXN0YWRvIGVuIHVuIGNvbXBvbmVudGUgeWEgZGVzbW9udGFkbyAoZnVnYXMgZGVcbiAgLy8gbWVtb3JpYSB5IHdhcm5pbmdzKS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCByZXNldCA9ICgpID0+IHtcbiAgICBzZXREYXRhKG51bGwpXG4gICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IGZhbHNlXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFza01haWEsXG4gICAgcmVzcG9uc2U6IGRhdGEsXG4gICAgaXNMb2FkaW5nLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICByZXNldCxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICAgIGFib3J0U3RyZWFtU2lsZW50bHksXG4gICAgaGFuZGxlU1NFU3RyZWFtLCAvLyBFeHBvbmVyIHBhcmEgcG9kZXIgdXNhcmxvIGVuIGNvbnRpbnVlLXRocmVhZFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUU5QyxPQUFPQyxJQUFJLE1BQU0scUJBQXFCO0FBSXRDLFNBQVNDLFFBQVEsUUFBUSx3QkFBd0I7QUFFakQsT0FBTyxJQUFNQyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXFCQSxDQUFBQyxJQUFBLEVBT0E7RUFBQSxJQU5oQ0MsY0FBYyxHQUFBRCxJQUFBLENBQWRDLGNBQWM7SUFDZEMsY0FBYyxHQUFBRixJQUFBLENBQWRFLGNBQWM7SUFDZEMsY0FBYyxHQUFBSCxJQUFBLENBQWRHLGNBQWM7SUFDZEMsTUFBTSxHQUFBSixJQUFBLENBQU5JLE1BQU07SUFDTkMsT0FBTyxHQUFBTCxJQUFBLENBQVBLLE9BQU87SUFDUEMsa0JBQWtCLEdBQUFOLElBQUEsQ0FBbEJNLGtCQUFrQjtFQUVsQixJQUFBQyxlQUFBLEdBQWNYLGNBQWMsQ0FBQyxDQUFDRSxRQUFRLENBQUNVLE1BQU0sQ0FBQyxDQUFDO0lBQXZDQyxDQUFD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
354
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwidXNlVHJhbnNsYXRpb24iLCJtYWlhIiwiU0VDVElPTlMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJfcmVmIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RhcnRXcml0aW5nIiwib25TdG9wIiwib25FcnJvciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJkYXRhIiwic2V0RGF0YSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNMb2FkaW5nIiwic2V0TG9hZGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJsb2FkaW5nTWVzc2FnZSIsInNldExvYWRpbmdNZXNzYWdlIiwiYWJvcnRDb250cm9sbGVyUmVmIiwiaXNTdG9wcGVkUmVmIiwib25TdHJlYW1VcGRhdGVSZWYiLCJvbkZpbmlzaFN0cmVhbVJlZiIsIm9uU3RhcnRXcml0aW5nUmVmIiwib25TdG9wUmVmIiwib25FcnJvclJlZiIsIm9uQXBwcm92YWxSZXF1aXJlZFJlZiIsImN1cnJlbnQiLCJoYW5kbGVTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJfb25TdHJlYW1VcGRhdGVSZWYkY3UiLCJfZGF0YSRhZ2VudF9pZCIsIl9vbkZpbmlzaFN0cmVhbVJlZiRjdSIsIl9vbkFwcHJvdmFsUmVxdWlyZWRSZSIsIl9vbkVycm9yUmVmJGN1cnJlbnQiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJoYXNTdGFydGVkV3JpdGluZyIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJsaW5lIiwiX2xpbmUkc3BsaXQiLCJfbGluZSRzcGxpdDIiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsImRhdGFTdHIiLCJfZGF0YSIsIl9vblN0YXJ0V3JpdGluZ1JlZiRjdSIsIm5vZGVNZXNzYWdlIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsImF0dGFjaG1lbnRzIiwic3VnZ2VzdGlvbnMiLCJhZ2VudElkUmF3IiwiY29tcGxldGVkQWdlbnRJZCIsIl9vbkVycm9yUmVmJGN1cnJlbnQyIiwiX3QiLCJfdDIiLCJfdDMiLCJfdDQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJ0cmltIiwicmVwbGFjZSIsIkpTT04iLCJwYXJzZSIsImNhbGwiLCJjb250ZW50IiwibWVzc2FnZSIsImluY2x1ZGVzIiwibWVtb3J5X3Nlc3Npb25faWQiLCJBcnJheSIsImlzQXJyYXkiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiU3RyaW5nIiwiY29uc29sZSIsImVycm9yIiwid2FybiIsImUiLCJmIiwiZmluaXNoIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJhc2tNYWlhIiwiX3JlZjQiLCJfY2FsbGVlMiIsIl9yZWYzIiwiaGlzdG9yeSIsInByb2plY3RJZCIsImxhbmciLCJ1c2VySWQiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsImNvbXBhbnlJZCIsImNoYXRJZCIsIm1lc3NhZ2VJZCIsImNsaWVudElkIiwiY2xpZW50TmFtZSIsImZlZUlkIiwiYWdlbnROYW1lIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJwcm9qZWN0TmFtZSIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJhZ2VudEVudGl0eSIsIl9hYm9ydENvbnRyb2xsZXJSZWYkYyIsIl90NSIsIl9jb250ZXh0MiIsIkFib3J0Q29udHJvbGxlciIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsIl9vYmplY3RTcHJlYWQiLCJpbnB1dCIsInNpZ25hbCIsIl94MiIsInN0b3BTdHJlYW1pbmciLCJfb25TdG9wUmVmJGN1cnJlbnQiLCJhYm9ydCIsInJlc2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZU9yY2hlc3RyYXRvclN0cmVhbS91c2VPcmNoZXN0cmF0b3JTdHJlYW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3RhbnQtY29uZGl0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgQ2hhdEhpc3RvcnkgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgQWdlbnRFbnRpdHkgfSBmcm9tICcuLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IFVzZU9yY2hlc3RyYXRvclN0cmVhbVByb3BzIH0gZnJvbSAnLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0uaW50ZXJmYWNlJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgdXNlT3JjaGVzdHJhdG9yU3RyZWFtID0gKHtcbiAgb25TdHJlYW1VcGRhdGUsXG4gIG9uRmluaXNoU3RyZWFtLFxuICBvblN0YXJ0V3JpdGluZyxcbiAgb25TdG9wLFxuICBvbkVycm9yLFxuICBvbkFwcHJvdmFsUmVxdWlyZWQsXG59OiBVc2VPcmNoZXN0cmF0b3JTdHJlYW1Qcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCBbZGF0YSwgc2V0RGF0YV0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbaXNMb2FkaW5nLCBzZXRMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNXcml0aW5nLCBzZXRJc1dyaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtsb2FkaW5nTWVzc2FnZSwgc2V0TG9hZGluZ01lc3NhZ2VdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgYWJvcnRDb250cm9sbGVyUmVmID0gdXNlUmVmPEFib3J0Q29udHJvbGxlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzU3RvcHBlZFJlZiA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCBvblN0cmVhbVVwZGF0ZVJlZiA9IHVzZVJlZihvblN0cmVhbVVwZGF0ZSlcbiAgY29uc3Qgb25GaW5pc2hTdHJlYW1SZWYgPSB1c2VSZWYob25GaW5pc2hTdHJlYW0pXG4gIGNvbnN0IG9uU3RhcnRXcml0aW5nUmVmID0gdXNlUmVmKG9uU3RhcnRXcml0aW5nKVxuICBjb25zdCBvblN0b3BSZWYgPSB1c2VSZWYob25TdG9wKVxuICBjb25zdCBvbkVycm9yUmVmID0gdXNlUmVmKG9uRXJyb3IpXG4gIGNvbnN0IG9uQXBwcm92YWxSZXF1aXJlZFJlZiA9IHVzZVJlZihvbkFwcHJvdmFsUmVxdWlyZWQpXG5cbiAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudCA9IG9uU3RyZWFtVXBkYXRlXG4gIG9uRmluaXNoU3RyZWFtUmVmLmN1cnJlbnQgPSBvbkZpbmlzaFN0cmVhbVxuICBvblN0YXJ0V3JpdGluZ1JlZi5jdXJyZW50ID0gb25TdGFydFdyaXRpbmdcbiAgb25TdG9wUmVmLmN1cnJlbnQgPSBvblN0b3BcbiAgb25FcnJvclJlZi5jdXJyZW50ID0gb25FcnJvclxuICBvbkFwcHJvdmFsUmVxdWlyZWRSZWYuY3VycmVudCA9IG9uQXBwcm92YWxSZXF1aXJlZFxuXG4gIGNvbnN0IGhhbmRsZVNTRVN0cmVhbSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChyZXNwb25zZTogUmVzcG9uc2UpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gICAgICAgIGlmICghcmVhZGVyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICAgICAgICBsZXQgYnVmZmVyID0gJydcbiAgICAgICAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gICAgICAgIGxldCBoYXNTdGFydGVkV3JpdGluZyA9IGZhbHNlXG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBpZiAoaXNTdG9wcGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzU3RvcHBlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgICAgICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgICAgICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gICAgICAgICAgICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICAgICAgICAgICAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcblxuICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3Rva2VuJzpcbiAgICAgICAgICAgICAgICAgIGlmICghaGFzU3RhcnRlZFdyaXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzU3RhcnRlZFdyaXRpbmcgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgIHNldElzV3JpdGluZyh0cnVlKVxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZSh0KCdjaGF0LndyaXRpbmcnKSlcbiAgICAgICAgICAgICAgICAgICAgb25TdGFydFdyaXRpbmdSZWYuY3VycmVudD8uKClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVkQ29udGVudCArPSBkYXRhLmNvbnRlbnRcbiAgICAgICAgICAgICAgICAgIHNldERhdGEoYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICAgICAgb25TdHJlYW1VcGRhdGVSZWYuY3VycmVudD8uKGFjY3VtdWxhdGVkQ29udGVudCwgbnVsbCwgJycpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnbm9kZSc6XG4gICAgICAgICAgICAgICAgICAvLyBTaSBlbCBldmVudG8gbm9kZSB0aWVuZSB1biBtZW5zYWplLCBhY3R1YWxpemFybG8gcGFyYSBtb3N0cmFybG8gZW4gZWwgbG9hZGVyXG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YS5tZXNzYWdlICYmIHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFzZWd1cmFyIHF1ZSBpc0xvYWRpbmcgZXN0w6kgZW4gdHJ1ZSBwYXJhIG1vc3RyYXIgZWwgbG9hZGVyXG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmcodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgLy8gTW9zdHJhciBub21icmUgc29sbyBwYXJhIGNyZWF0ZV90YXNrIC8gY2xvbmVfdGFzaywgZWwgcmVzdG8gbXVlc3RyYSBnZW7DqXJpY29cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZU1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZS5pbmNsdWRlcygnY3JlYXRlX3Rhc2snKSB8fCBkYXRhLm1lc3NhZ2UuaW5jbHVkZXMoJ2Nsb25lX3Rhc2snKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBkYXRhLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdCgnY2hhdC5leGVjdXRpbmdBY3Rpb24nKVxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShub2RlTWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSBkYXRhLmNvbnRlbnQgfHwgYWNjdW11bGF0ZWRDb250ZW50XG4gICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VzID0gZGF0YS5zb3VyY2VzIHx8IG51bGxcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IGRhdGEubWVtb3J5X3Nlc3Npb25faWQgfHwgJydcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShkYXRhLmF0dGFjaG1lbnRzKSA/IGRhdGEuYXR0YWNobWVudHMgOiBudWxsXG4gICAgICAgICAgICAgICAgICBsZXQgc3VnZ2VzdGlvbnMgPSBudWxsXG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnN1Z2dlc3RfcmVwbHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zID0gZGF0YS5zdWdnZXN0X3JlcGx5XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5zdWdnZXN0aW9ucykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBkYXRhLnN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb25zdCBhZ2VudElkUmF3ID0gZGF0YS5hZ2VudF9pZCA/PyBkYXRhLmFnZW50SWRcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPVxuICAgICAgICAgICAgICAgICAgICBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgICAgICAgICAgICAgc2V0RGF0YShmaW5hbENvbnRlbnQpXG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKSAvLyBMaW1waWFyIG1lbnNhamUgY3VhbmRvIHNlIGNvbXBsZXRhXG4gICAgICAgICAgICAgICAgICBvbkZpbmlzaFN0cmVhbVJlZi5jdXJyZW50Py4oXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZEFnZW50SWRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICBjYXNlICdhcHByb3ZhbF9yZXF1aXJlZCc6XG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbCkgLy8gTGltcGlhciBtZW5zYWplIGN1YW5kbyBzZSByZXF1aWVyZSBhcHJvYmFjacOzblxuICAgICAgICAgICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkUmVmLmN1cnJlbnQ/LihkYXRhLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGRhdGEuZXJyb3IpXG4gICAgICAgICAgICAgICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKSAvLyBMaW1waWFyIG1lbnNhamUgY3VhbmRvIGhheSBlcnJvclxuICAgICAgICAgICAgICAgICAgb25FcnJvclJlZi5jdXJyZW50Py4oKVxuICAgICAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcblxuICAgICAgICAvLyBTb2xvIGVqZWN1dGFyIG9uRXJyb3Igc2kgbm8gZnVlIHVuIHN0b3AgaW50ZW5jaW9uYWxcbiAgICAgICAgaWYgKCFpc1N0b3BwZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgIG9uRXJyb3JSZWYuY3VycmVudD8uKClcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3RdXG4gIClcblxuICBjb25zdCBhc2tNYWlhID0gYXN5bmMgKHtcbiAgICBtZXNzYWdlLFxuICAgIGhpc3RvcnksXG4gICAgcHJvamVjdElkLFxuICAgIGxhbmcsXG4gICAgdXNlcklkLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBjb21wYW55SWQsXG4gICAgY2hhdElkLFxuICAgIG1lc3NhZ2VJZCxcbiAgICBjbGllbnRJZCxcbiAgICBjbGllbnROYW1lLFxuICAgIGZlZUlkLFxuICAgIGFnZW50TmFtZSxcbiAgICBhZ2VudElkLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBhdHRhY2htZW50cyxcbiAgICBwcm9qZWN0TmFtZSxcbiAgICBmYXFJZCxcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICBhZ2VudEVudGl0eSxcbiAgfToge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGhpc3Rvcnk6IENoYXRIaXN0b3J5W11cbiAgICBwcm9qZWN0SWQ6IG51bWJlciB8IG51bGxcbiAgICBsYW5nOiBzdHJpbmdcbiAgICB1c2VySWQ6IHN0cmluZ1xuICAgIGZpcnN0TmFtZT86IHN0cmluZ1xuICAgIGxhc3ROYW1lPzogc3RyaW5nXG4gICAgY29tcGFueUlkOiBzdHJpbmdcbiAgICBjaGF0SWQ6IHN0cmluZ1xuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgY2xpZW50SWQ/OiBudW1iZXJcbiAgICBjbGllbnROYW1lPzogc3RyaW5nXG4gICAgZmVlSWQ/OiBudW1iZXJcbiAgICBhZ2VudE5hbWU6IHN0cmluZ1xuICAgIGFnZW50SWQ6IHN0cmluZ1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBhZ2VudEVudGl0eT86IEFnZW50RW50aXR5XG4gIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgc2V0TG9hZGluZyh0cnVlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgc2V0RGF0YShudWxsKVxuICAgICAgc2V0TG9hZGluZ01lc3NhZ2UobnVsbClcbiAgICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2UgLy8gUmVzZXRlYXIgZmxhZyBhbCBpbmljaWFyIG51ZXZhIHBldGljacOzblxuXG4gICAgICBhYm9ydENvbnRyb2xsZXJSZWYuY3VycmVudCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcihcbiAgICAgICAge1xuICAgICAgICAgIGlucHV0OiBtZXNzYWdlLFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgbGFuZyxcbiAgICAgICAgICB1c2VySWQsXG4gICAgICAgICAgLi4uKGZpcnN0TmFtZSA/IHsgZmlyc3ROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGxhc3ROYW1lID8geyBsYXN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIGNvbXBhbnlJZCxcbiAgICAgICAgICBjaGF0SWQsXG4gICAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICAgIGNsaWVudElkLFxuICAgICAgICAgIC4uLihmZWVJZCAhPSBudWxsID8geyBmZWVJZCB9IDoge30pLFxuICAgICAgICAgIGFnZW50TmFtZSxcbiAgICAgICAgICBhZ2VudElkLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgICAgICAuLi4ocHJvamVjdElkID8geyBwcm9qZWN0SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHByb2plY3ROYW1lID8geyBwcm9qZWN0TmFtZSB9IDoge30pLFxuICAgICAgICAgIC4uLihjbGllbnROYW1lID8geyBjbGllbnROYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGZhcUlkID8geyBmYXFJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnRFbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgfSxcbiAgICAgICAgYWJvcnRDb250cm9sbGVyUmVmLmN1cnJlbnQ/LnNpZ25hbFxuICAgICAgKVxuXG4gICAgICBhd2FpdCBoYW5kbGVTU0VTdHJlYW0ocmVzcG9uc2UpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3I/LigpXG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0b3BTdHJlYW1pbmcgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50KSB7XG4gICAgICBpc1N0b3BwZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50LmFib3J0KClcbiAgICAgIGFib3J0Q29udHJvbGxlclJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc2V0TG9hZGluZyhmYWxzZSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlKG51bGwpXG4gICAgICBvblN0b3BSZWYuY3VycmVudD8uKClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgIHNldERhdGEobnVsbClcbiAgICBzZXRMb2FkaW5nKGZhbHNlKVxuICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICBzZXRMb2FkaW5nTWVzc2FnZShudWxsKVxuICAgIGlzU3RvcHBlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXNrTWFpYSxcbiAgICByZXNwb25zZTogZGF0YSxcbiAgICBpc0xvYWRpbmcsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHJlc2V0LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gICAgaGFuZGxlU1NFU3RyZWFtLCAvLyBFeHBvbmVyIHBhcmEgcG9kZXIgdXNhcmxvIGVuIGNvbnRpbnVlLXRocmVhZFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFDckQsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFFOUMsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUl0QyxTQUFTQyxRQUFRLFFBQVEsd0JBQXdCO0FBRWpELE9BQU8sSUFBTUMscUJBQXFCLEdBQUcsU0FBeEJBLHFCQUFxQkEsQ0FBQUMsSUFBQSxFQU9BO0VBQUEsSUFOaENDLGNBQWMsR0FBQUQsSUFBQSxDQUFkQyxjQUFjO0lBQ2RDLGNBQWMsR0FBQUYsSUFBQSxDQUFkRSxjQUFjO0lBQ2RDLGNBQWMsR0FBQUgsSUFBQSxDQUFkRyxjQUFjO0lBQ2RDLE1BQU0sR0FBQUosSUFBQSxDQUFOSSxNQUFNO0lBQ05DLE9BQU8sR0FBQUwsSUFBQSxD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