@projectcor/maia-components 2.11.31-4 → 2.11.32-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/FeedbackButton/FeedbackButton.styles.js +2 -2
- package/lib/components/atoms/icons/index.js +2 -3
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +10 -41
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +4 -7
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +3 -16
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +44 -54
- package/lib/components/molecules/ChatAIHome/styles.js +35 -43
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +200 -203
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +34 -149
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +9 -10
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.js +6 -37
- package/lib/components/molecules/Sidebar/Sidebar.js +323 -269
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +23 -18
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +37 -54
- package/lib/dev/Providers.js +2 -2
- package/lib/hooks/useChatManager/useChatManager.js +85 -35
- package/lib/hooks/useChats/useChats.js +4 -12
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +142 -76
- package/lib/hooks/useProjectSearch.js +4 -11
- package/lib/hooks/useSmoothStreamText/index.js +2 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +189 -0
- package/lib/hooks/useStreamingMessage/index.js +3 -0
- package/lib/hooks/useStreamingMessage/streamingStore.js +69 -0
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +22 -0
- package/lib/lang/br/index.js +2 -15
- package/lib/lang/en/index.js +2 -15
- package/lib/lang/es/index.js +2 -15
- package/lib/lang/fr/index.js +2 -15
- package/lib/mocks/mockChats.js +395 -0
- package/lib/mocks/mockedUser.js +169 -0
- package/lib/services/maia/Chats/getChatsByUserId.js +8 -14
- package/lib/services/maia/Chats/index.js +1 -7
- package/lib/services/maia/Orchestrator/orchestrator.js +4 -6
- package/lib/services/maia/client.js +9 -44
- package/lib/services/query/projectSearchByValueQuery.js +2 -2
- package/lib/store/chatsStore.types.js +2 -10
- package/lib/store/useChatsStore.js +37 -75
- package/lib/types/Chat.js +1 -3
- package/lib/types/Project.js +1 -1
- package/package.json +1 -1
- package/lib/components/atoms/icons/ChatConversation.js +0 -40
- package/lib/components/molecules/ChatAIMessages/ChatDaySeparator.js +0 -43
- package/lib/components/molecules/ChatAIMessages/ChatDaySeparator.styles.js +0 -11
- package/lib/components/molecules/ChatAIMessages/chatMessageUtils.js +0 -5
- package/lib/components/molecules/Sidebar/SidebarChats.styles.js +0 -73
- package/lib/components/molecules/Sidebar/SidebarChatsSection.js +0 -69
- package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +0 -150
- package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +0 -238
- package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +0 -70
- package/lib/components/molecules/Sidebar/sidebarChats.types.js +0 -14
- package/lib/dev/fixtures/devUser.js +0 -173
- package/lib/dev/fixtures/mockedUser.js +0 -169
- package/lib/services/maia/Chats/getChatMessagesV2.js +0 -114
- package/lib/services/maia/Chats/getSessionByAgent.js +0 -66
- package/lib/services/maia/Chats/getSessionsGroupedV2.js +0 -70
|
@@ -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 } from 'react';
|
|
18
|
+
import { useState, useCallback, useRef, useEffect } from 'react';
|
|
19
19
|
import { useTranslation } from 'react-i18next';
|
|
20
20
|
import maia from '../../services/maia';
|
|
21
21
|
import { SECTIONS } from '../../constants/config';
|
|
@@ -60,89 +60,121 @@ 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
|
|
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;
|
|
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;
|
|
65
65
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
66
66
|
while (1) switch (_context.prev = _context.next) {
|
|
67
67
|
case 0:
|
|
68
|
-
|
|
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;
|
|
69
101
|
reader = (_response$body = response.body) === null || _response$body === void 0 ? void 0 : _response$body.getReader();
|
|
70
102
|
if (reader) {
|
|
71
|
-
_context.next =
|
|
103
|
+
_context.next = 2;
|
|
72
104
|
break;
|
|
73
105
|
}
|
|
74
106
|
throw new Error('No reader available');
|
|
75
|
-
case
|
|
107
|
+
case 2:
|
|
76
108
|
decoder = new TextDecoder();
|
|
77
109
|
buffer = '';
|
|
78
110
|
accumulatedContent = '';
|
|
79
111
|
hasStartedWriting = false;
|
|
80
|
-
case
|
|
112
|
+
case 3:
|
|
81
113
|
if (!true) {
|
|
82
|
-
_context.next =
|
|
114
|
+
_context.next = 26;
|
|
83
115
|
break;
|
|
84
116
|
}
|
|
85
117
|
if (!isStoppedRef.current) {
|
|
86
|
-
_context.next =
|
|
118
|
+
_context.next = 4;
|
|
87
119
|
break;
|
|
88
120
|
}
|
|
89
121
|
reader.cancel();
|
|
90
|
-
return _context.abrupt("continue",
|
|
91
|
-
case 3:
|
|
92
|
-
_context.next = 4;
|
|
93
|
-
return reader.read();
|
|
122
|
+
return _context.abrupt("continue", 26);
|
|
94
123
|
case 4:
|
|
124
|
+
_context.next = 5;
|
|
125
|
+
return reader.read();
|
|
126
|
+
case 5:
|
|
95
127
|
_yield$reader$read = _context.sent;
|
|
96
128
|
done = _yield$reader$read.done;
|
|
97
129
|
value = _yield$reader$read.value;
|
|
98
130
|
if (!done) {
|
|
99
|
-
_context.next =
|
|
131
|
+
_context.next = 6;
|
|
100
132
|
break;
|
|
101
133
|
}
|
|
102
|
-
return _context.abrupt("continue",
|
|
103
|
-
case
|
|
134
|
+
return _context.abrupt("continue", 26);
|
|
135
|
+
case 6:
|
|
104
136
|
if (!isStoppedRef.current) {
|
|
105
|
-
_context.next =
|
|
137
|
+
_context.next = 7;
|
|
106
138
|
break;
|
|
107
139
|
}
|
|
108
140
|
reader.cancel();
|
|
109
|
-
return _context.abrupt("continue",
|
|
110
|
-
case
|
|
141
|
+
return _context.abrupt("continue", 26);
|
|
142
|
+
case 7:
|
|
111
143
|
buffer += decoder.decode(value, {
|
|
112
144
|
stream: true
|
|
113
145
|
});
|
|
114
146
|
lines = buffer.split('\n\n');
|
|
115
147
|
buffer = lines.pop() || '';
|
|
116
148
|
_iterator = _createForOfIteratorHelper(lines);
|
|
117
|
-
_context.prev =
|
|
149
|
+
_context.prev = 8;
|
|
118
150
|
_iterator.s();
|
|
119
|
-
case
|
|
151
|
+
case 9:
|
|
120
152
|
if ((_step = _iterator.n()).done) {
|
|
121
|
-
_context.next =
|
|
153
|
+
_context.next = 22;
|
|
122
154
|
break;
|
|
123
155
|
}
|
|
124
156
|
line = _step.value;
|
|
125
157
|
if (!(line.trim() === '')) {
|
|
126
|
-
_context.next =
|
|
158
|
+
_context.next = 10;
|
|
127
159
|
break;
|
|
128
160
|
}
|
|
129
|
-
return _context.abrupt("continue",
|
|
130
|
-
case
|
|
161
|
+
return _context.abrupt("continue", 21);
|
|
162
|
+
case 10:
|
|
131
163
|
_line$split = line.split('\n'), _line$split2 = _slicedToArray(_line$split, 2), eventLine = _line$split2[0], dataLine = _line$split2[1];
|
|
132
164
|
if (!(!eventLine || !dataLine)) {
|
|
133
|
-
_context.next =
|
|
165
|
+
_context.next = 11;
|
|
134
166
|
break;
|
|
135
167
|
}
|
|
136
|
-
return _context.abrupt("continue",
|
|
137
|
-
case
|
|
168
|
+
return _context.abrupt("continue", 21);
|
|
169
|
+
case 11:
|
|
138
170
|
eventType = eventLine.replace('event: ', '').trim();
|
|
139
171
|
dataStr = dataLine.replace('data: ', '').trim();
|
|
140
|
-
_context.prev =
|
|
172
|
+
_context.prev = 12;
|
|
141
173
|
_data = JSON.parse(dataStr);
|
|
142
174
|
_t = eventType;
|
|
143
|
-
_context.next = _t === 'token' ?
|
|
175
|
+
_context.next = _t === 'token' ? 13 : _t === 'node' ? 14 : _t === 'complete' ? 15 : _t === 'approval_required' ? 16 : _t === 'error' ? 17 : 18;
|
|
144
176
|
break;
|
|
145
|
-
case
|
|
177
|
+
case 13:
|
|
146
178
|
if (!hasStartedWriting) {
|
|
147
179
|
hasStartedWriting = true;
|
|
148
180
|
setIsWriting(true);
|
|
@@ -150,10 +182,9 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
150
182
|
(_onStartWritingRef$cu = onStartWritingRef.current) === null || _onStartWritingRef$cu === void 0 || _onStartWritingRef$cu.call(onStartWritingRef);
|
|
151
183
|
}
|
|
152
184
|
accumulatedContent += _data.content;
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
case 13:
|
|
185
|
+
emitThrottled(accumulatedContent);
|
|
186
|
+
return _context.abrupt("continue", 19);
|
|
187
|
+
case 14:
|
|
157
188
|
// Si el evento node tiene un mensaje, actualizarlo para mostrarlo en el loader
|
|
158
189
|
if (_data.message && typeof _data.message === 'string') {
|
|
159
190
|
// Asegurar que isLoading esté en true para mostrar el loader
|
|
@@ -162,8 +193,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
162
193
|
nodeMessage = _data.message.includes('create_task') || _data.message.includes('clone_task') ? _data.message : t('chat.executingAction');
|
|
163
194
|
setLoadingMessage(nodeMessage);
|
|
164
195
|
}
|
|
165
|
-
return _context.abrupt("continue",
|
|
166
|
-
case
|
|
196
|
+
return _context.abrupt("continue", 19);
|
|
197
|
+
case 15:
|
|
167
198
|
finalContent = _data.content || accumulatedContent;
|
|
168
199
|
sources = _data.sources || null;
|
|
169
200
|
memorySessionId = _data.memory_session_id || '';
|
|
@@ -176,72 +207,77 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
176
207
|
}
|
|
177
208
|
agentIdRaw = (_data$agent_id = _data.agent_id) !== null && _data$agent_id !== void 0 ? _data$agent_id : _data.agentId;
|
|
178
209
|
completedAgentId = agentIdRaw != null && String(agentIdRaw).trim() !== '' ? String(agentIdRaw).trim() : null;
|
|
210
|
+
flushPending();
|
|
179
211
|
setData(finalContent);
|
|
180
212
|
setIsWriting(false);
|
|
181
213
|
setLoadingMessage(null); // Limpiar mensaje cuando se completa
|
|
182
214
|
(_onFinishStreamRef$cu = onFinishStreamRef.current) === null || _onFinishStreamRef$cu === void 0 || _onFinishStreamRef$cu.call(onFinishStreamRef, finalContent, sources, memorySessionId, attachments, suggestions, completedAgentId);
|
|
183
|
-
return _context.abrupt("continue",
|
|
184
|
-
case
|
|
215
|
+
return _context.abrupt("continue", 19);
|
|
216
|
+
case 16:
|
|
217
|
+
flushPending();
|
|
185
218
|
setIsWriting(false);
|
|
186
219
|
setLoading(false);
|
|
187
220
|
setLoadingMessage(null); // Limpiar mensaje cuando se requiere aprobación
|
|
188
221
|
(_onApprovalRequiredRe = onApprovalRequiredRef.current) === null || _onApprovalRequiredRe === void 0 || _onApprovalRequiredRe.call(onApprovalRequiredRef, _data, accumulatedContent);
|
|
189
|
-
return _context.abrupt("continue",
|
|
190
|
-
case
|
|
222
|
+
return _context.abrupt("continue", 19);
|
|
223
|
+
case 17:
|
|
191
224
|
console.error('SSE Error:', _data.error);
|
|
225
|
+
flushPending();
|
|
192
226
|
setIsWriting(false);
|
|
193
227
|
setLoadingMessage(null); // Limpiar mensaje cuando hay error
|
|
194
228
|
(_onErrorRef$current = onErrorRef.current) === null || _onErrorRef$current === void 0 || _onErrorRef$current.call(onErrorRef);
|
|
195
|
-
return _context.abrupt("continue",
|
|
196
|
-
case 17:
|
|
197
|
-
console.warn('Unknown SSE event type:', eventType);
|
|
229
|
+
return _context.abrupt("continue", 19);
|
|
198
230
|
case 18:
|
|
199
|
-
|
|
200
|
-
break;
|
|
231
|
+
console.warn('Unknown SSE event type:', eventType);
|
|
201
232
|
case 19:
|
|
202
|
-
_context.
|
|
203
|
-
_t2 = _context["catch"](11);
|
|
204
|
-
console.error('Error parsing SSE data:', _t2, dataStr);
|
|
205
|
-
case 20:
|
|
206
|
-
_context.next = 8;
|
|
233
|
+
_context.next = 21;
|
|
207
234
|
break;
|
|
235
|
+
case 20:
|
|
236
|
+
_context.prev = 20;
|
|
237
|
+
_t2 = _context["catch"](12);
|
|
238
|
+
console.error('Error parsing SSE data:', _t2, dataStr);
|
|
208
239
|
case 21:
|
|
209
|
-
_context.next =
|
|
240
|
+
_context.next = 9;
|
|
210
241
|
break;
|
|
211
242
|
case 22:
|
|
212
|
-
_context.
|
|
213
|
-
|
|
214
|
-
_iterator.e(_t3);
|
|
243
|
+
_context.next = 24;
|
|
244
|
+
break;
|
|
215
245
|
case 23:
|
|
216
246
|
_context.prev = 23;
|
|
217
|
-
|
|
218
|
-
|
|
247
|
+
_t3 = _context["catch"](8);
|
|
248
|
+
_iterator.e(_t3);
|
|
219
249
|
case 24:
|
|
220
|
-
_context.
|
|
221
|
-
|
|
250
|
+
_context.prev = 24;
|
|
251
|
+
_iterator.f();
|
|
252
|
+
return _context.finish(24);
|
|
222
253
|
case 25:
|
|
223
|
-
_context.next =
|
|
254
|
+
_context.next = 3;
|
|
224
255
|
break;
|
|
225
256
|
case 26:
|
|
226
|
-
_context.
|
|
227
|
-
|
|
257
|
+
_context.next = 28;
|
|
258
|
+
break;
|
|
259
|
+
case 27:
|
|
260
|
+
_context.prev = 27;
|
|
261
|
+
_t4 = _context["catch"](1);
|
|
262
|
+
flushPending();
|
|
228
263
|
setIsWriting(false);
|
|
229
264
|
|
|
230
265
|
// Solo ejecutar onError si no fue un stop intencional
|
|
231
266
|
if (!isStoppedRef.current) {
|
|
232
267
|
(_onErrorRef$current2 = onErrorRef.current) === null || _onErrorRef$current2 === void 0 || _onErrorRef$current2.call(onErrorRef);
|
|
233
268
|
}
|
|
234
|
-
case
|
|
235
|
-
_context.prev =
|
|
269
|
+
case 28:
|
|
270
|
+
_context.prev = 28;
|
|
271
|
+
flushPending();
|
|
236
272
|
setLoading(false);
|
|
237
273
|
setIsWriting(false);
|
|
238
274
|
setLoadingMessage(null);
|
|
239
|
-
return _context.finish(
|
|
240
|
-
case
|
|
275
|
+
return _context.finish(28);
|
|
276
|
+
case 29:
|
|
241
277
|
case "end":
|
|
242
278
|
return _context.stop();
|
|
243
279
|
}
|
|
244
|
-
}, _callee, null, [[
|
|
280
|
+
}, _callee, null, [[1, 27, 28, 29], [8, 23, 24, 25], [12, 20]]);
|
|
245
281
|
}));
|
|
246
282
|
return function (_x) {
|
|
247
283
|
return _ref2.apply(this, arguments);
|
|
@@ -249,11 +285,11 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
249
285
|
}(), [t]);
|
|
250
286
|
var askMaia = /*#__PURE__*/function () {
|
|
251
287
|
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref3) {
|
|
252
|
-
var message, history, projectId, lang, userId, firstName, lastName, companyId, chatId, messageId, clientId, clientName,
|
|
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;
|
|
253
289
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
254
290
|
while (1) switch (_context2.prev = _context2.next) {
|
|
255
291
|
case 0:
|
|
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,
|
|
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;
|
|
257
293
|
_context2.prev = 1;
|
|
258
294
|
setLoading(true);
|
|
259
295
|
setIsWriting(false);
|
|
@@ -263,7 +299,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
263
299
|
|
|
264
300
|
abortControllerRef.current = new AbortController();
|
|
265
301
|
_context2.next = 2;
|
|
266
|
-
return maia.Orchestrator.orchestrator(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(
|
|
302
|
+
return maia.Orchestrator.orchestrator(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
267
303
|
input: message,
|
|
268
304
|
history: history,
|
|
269
305
|
lang: lang,
|
|
@@ -276,10 +312,7 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
276
312
|
companyId: companyId,
|
|
277
313
|
chatId: chatId,
|
|
278
314
|
messageId: messageId,
|
|
279
|
-
clientId: clientId
|
|
280
|
-
}, feeId != null ? {
|
|
281
|
-
feeId: feeId
|
|
282
|
-
} : {}), {}, {
|
|
315
|
+
clientId: clientId,
|
|
283
316
|
agentName: agentName,
|
|
284
317
|
agentId: agentId,
|
|
285
318
|
isWebSearchActive: isWebSearchActive,
|
|
@@ -309,7 +342,11 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
309
342
|
case 4:
|
|
310
343
|
_context2.prev = 4;
|
|
311
344
|
_t5 = _context2["catch"](1);
|
|
312
|
-
|
|
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
|
+
}
|
|
313
350
|
setLoading(false);
|
|
314
351
|
case 5:
|
|
315
352
|
case "end":
|
|
@@ -333,6 +370,34 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
333
370
|
(_onStopRef$current = onStopRef.current) === null || _onStopRef$current === void 0 || _onStopRef$current.call(onStopRef);
|
|
334
371
|
}
|
|
335
372
|
}, []);
|
|
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
|
+
}, []);
|
|
336
401
|
var reset = function reset() {
|
|
337
402
|
setData(null);
|
|
338
403
|
setLoading(false);
|
|
@@ -348,7 +413,8 @@ export var useOrchestratorStream = function useOrchestratorStream(_ref) {
|
|
|
348
413
|
loadingMessage: loadingMessage,
|
|
349
414
|
reset: reset,
|
|
350
415
|
stopStreaming: stopStreaming,
|
|
416
|
+
abortStreamSilently: abortStreamSilently,
|
|
351
417
|
handleSSEStream: handleSSEStream // Exponer para poder usarlo en continue-thread
|
|
352
418
|
};
|
|
353
419
|
};
|
|
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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
|
|
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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
|