@projectcor/maia-components 2.11.78-16 → 2.11.78-2

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 (43) hide show
  1. package/CHANGELOG.md +0 -15
  2. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.js +17 -0
  3. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.styles.js +15 -0
  4. package/lib/components/atoms/SessionGeneratingDot/index.js +2 -0
  5. package/lib/components/atoms/SessionUnreadDot/SessionUnreadDot.js +12 -0
  6. package/lib/components/atoms/SessionUnreadDot/SessionUnreadDot.styles.js +8 -0
  7. package/lib/components/atoms/SessionUnreadDot/index.js +2 -0
  8. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +46 -7
  9. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +4 -5
  10. package/lib/components/molecules/Sidebar/Sidebar.js +51 -42
  11. package/lib/components/molecules/Sidebar/Sidebar.styles.js +10 -6
  12. package/lib/components/organisms/ChatAI/ChatAI.js +10 -2
  13. package/lib/hooks/useChatManager/useChatManager.js +456 -428
  14. package/lib/hooks/useChatMessages/useChatMessages.js +411 -249
  15. package/lib/hooks/useChats/useChats.js +8 -3
  16. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  17. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +140 -496
  18. package/lib/hooks/useStreamingMessage/index.js +2 -3
  19. package/lib/hooks/useStreamingMessage/useStreamingMessage.js +13 -17
  20. package/lib/lang/br/index.js +7 -4
  21. package/lib/lang/en/index.js +7 -4
  22. package/lib/lang/es/index.js +7 -4
  23. package/lib/lang/fr/index.js +9 -5
  24. package/lib/store/chatsSidebarOptimistic.js +87 -0
  25. package/lib/store/chatsStore.types.js +1 -1
  26. package/lib/store/sessions/activeView.js +22 -0
  27. package/lib/store/sessions/index.js +10 -0
  28. package/lib/store/sessions/sessionHitlContext.js +15 -0
  29. package/lib/store/sessions/sessionNotificationSound.js +57 -0
  30. package/lib/store/sessions/sessionNotifications.js +111 -0
  31. package/lib/store/sessions/sessionNotifications.types.js +2 -0
  32. package/lib/store/sessions/sessionStreamManager.js +585 -0
  33. package/lib/store/sessions/sessionStreamingText.js +80 -0
  34. package/lib/store/sessions/sessionUnreadPersistence.js +49 -0
  35. package/lib/store/sessions/sessions.types.js +35 -0
  36. package/lib/store/sessions/useSessionMeta.js +39 -0
  37. package/lib/store/sessions/useSessionStreamingText.js +18 -0
  38. package/lib/store/sessions/useSessionsStore.js +234 -0
  39. package/lib/store/useChatsStore.js +41 -9
  40. package/lib/types/streamActivity.js +1 -1
  41. package/lib/types/userType.d.js +1 -1
  42. package/package.json +31 -70
  43. package/lib/hooks/useStreamingMessage/streamingStore.js +0 -69
@@ -28,9 +28,13 @@ import { useTabTaskDefault } from '../useTabTaskDefault';
28
28
  import { TASK_URL_REGEX_PATTERN } from '../../constants/taskUrls';
29
29
  import { fetchAgentDetail } from '../../services/maia/Agents/fetchAgentDetail';
30
30
  import { buildHitlActionTypeList, getHitlAnalyticsAgentType } from '../../utils/hitlAnalytics';
31
- import { getThinkingLoadingMessage, getWritingStreamActivity, resolveHitlNodeStreamActivity, resolveInitialHitlStreamActivity } from '../../utils/streamActivityMessages';
32
- import { streamingStore } from '../useStreamingMessage';
33
- import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
31
+ import { sessionStreamingText } from '../../store/sessions/sessionStreamingText';
32
+ import { useSessionsStore } from '../../store/sessions/useSessionsStore';
33
+ import { useSessionMeta } from '../../store/sessions/useSessionMeta';
34
+ import { sessionStreamManager, MAX_CONCURRENT_STREAMS } from '../../store/sessions/sessionStreamManager';
35
+ import { activeView } from '../../store/sessions/activeView';
36
+ import { notifySessionFinishedInBackground } from '../../store/sessions/sessionNotifications';
37
+ import { isStreamingPlaceholderMessageId } from '../../utils/streamActivityMessages';
34
38
  var normalizeSendMessageArgs = function normalizeSendMessageArgs(attachmentsOrOptions) {
35
39
  var _options$attachments;
36
40
  if (Array.isArray(attachmentsOrOptions)) {
@@ -228,136 +232,56 @@ var useStableCallbacks = function useStableCallbacks(authUser) {
228
232
  currentUser: currentUser.current
229
233
  };
230
234
  };
231
- var parseSSELine = function parseSSELine(line) {
232
- if (!line.trim()) return null;
233
- var _line$split = line.split('\n'),
234
- _line$split2 = _slicedToArray(_line$split, 2),
235
- eventLine = _line$split2[0],
236
- dataLine = _line$split2[1];
237
- if (!eventLine || !dataLine) return null;
238
- var eventType = eventLine.replace('event: ', '').trim();
239
- var dataStr = dataLine.replace('data: ', '').trim();
240
- try {
241
- var data = JSON.parse(dataStr);
235
+ var findMessageWithApprovalByThreadIds = function findMessageWithApprovalByThreadIds(threadIds, activeMessages) {
236
+ var fromActiveView = activeMessages.find(function (message) {
237
+ var _message$approval;
238
+ return (_message$approval = message.approval) === null || _message$approval === void 0 || (_message$approval = _message$approval.pending_actions) === null || _message$approval === void 0 ? void 0 : _message$approval.some(function (action) {
239
+ return threadIds.includes(action.thread_id);
240
+ });
241
+ });
242
+ if (fromActiveView !== null && fromActiveView !== void 0 && fromActiveView.approval) {
242
243
  return {
243
- eventType: eventType,
244
- data: data
244
+ message: fromActiveView,
245
+ sessionId: fromActiveView.approval.session_id || activeView.get() || ''
245
246
  };
246
- } catch (parseError) {
247
- console.error('Error parsing SSE data:', parseError, dataStr);
248
- return null;
249
247
  }
248
+ var _useSessionsStore$get = useSessionsStore.getState(),
249
+ messages = _useSessionsStore$get.messages;
250
+ var sessionEntry = Object.entries(messages).find(function (_ref2) {
251
+ var _ref3 = _slicedToArray(_ref2, 2),
252
+ sessionMessages = _ref3[1];
253
+ return sessionMessages.some(function (message) {
254
+ var _message$approval2;
255
+ return (_message$approval2 = message.approval) === null || _message$approval2 === void 0 || (_message$approval2 = _message$approval2.pending_actions) === null || _message$approval2 === void 0 ? void 0 : _message$approval2.some(function (action) {
256
+ return threadIds.includes(action.thread_id);
257
+ });
258
+ });
259
+ });
260
+ if (sessionEntry) {
261
+ var _sessionEntry = _slicedToArray(sessionEntry, 2),
262
+ sessionId = _sessionEntry[0],
263
+ sessionMessages = _sessionEntry[1];
264
+ var found = sessionMessages.find(function (message) {
265
+ var _message$approval3;
266
+ return (_message$approval3 = message.approval) === null || _message$approval3 === void 0 || (_message$approval3 = _message$approval3.pending_actions) === null || _message$approval3 === void 0 ? void 0 : _message$approval3.some(function (action) {
267
+ return threadIds.includes(action.thread_id);
268
+ });
269
+ });
270
+ if (found !== null && found !== void 0 && found.approval) {
271
+ return {
272
+ message: found,
273
+ sessionId: found.approval.session_id || sessionId
274
+ };
275
+ }
276
+ }
277
+ return null;
250
278
  };
251
- var processSSEStream = /*#__PURE__*/function () {
252
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response, threadId, callbacks) {
253
- var _response$body;
254
- var reader, decoder, buffer, accumulatedContent, isStreamComplete, handleLine, _yield$reader$read, done, value, lines, i;
255
- return _regeneratorRuntime.wrap(function (_context) {
256
- while (1) switch (_context.prev = _context.next) {
257
- case 0:
258
- handleLine = function _handleLine(line) {
259
- var parsed = parseSSELine(line);
260
- if (!parsed) return;
261
- var eventType = parsed.eventType,
262
- data = parsed.data;
263
- var eventData = data;
264
- if (eventType === 'thinking') {
265
- callbacks.onThinking();
266
- } else if (eventType === 'token') {
267
- var content = typeof eventData.content === 'string' ? eventData.content : '';
268
- accumulatedContent = mergeStreamChunk(accumulatedContent, content);
269
- callbacks.onToken(accumulatedContent);
270
- } else if (eventType === 'content') {
271
- var _content = typeof eventData.content === 'string' ? eventData.content : '';
272
- accumulatedContent = mergeStreamChunk(accumulatedContent, _content);
273
- callbacks.onToken(accumulatedContent);
274
- if (isCompleteLikeSsePayload(eventData)) {
275
- var _eventData$agent_id;
276
- var finalContent = _content || accumulatedContent;
277
- var sources = eventData.sources || null;
278
- var memorySessionId = eventData.memory_session_id || '';
279
- var attachments = Array.isArray(eventData.attachments) ? eventData.attachments : null;
280
- var suggestions = Array.isArray(eventData.suggest_reply) ? eventData.suggest_reply : Array.isArray(eventData.suggestions) ? eventData.suggestions : null;
281
- var agentIdRaw = (_eventData$agent_id = eventData.agent_id) !== null && _eventData$agent_id !== void 0 ? _eventData$agent_id : eventData.agentId;
282
- var completedAgentId = agentIdRaw != null && String(agentIdRaw).trim() !== '' ? String(agentIdRaw).trim() : null;
283
- callbacks.onComplete(finalContent, sources, memorySessionId, threadId, attachments, suggestions, completedAgentId);
284
- }
285
- } else if (eventType === 'node') {
286
- if (eventData.message && typeof eventData.message === 'string') {
287
- callbacks.onNode(eventData.message, threadId);
288
- }
289
- } else if (eventType === 'complete') {
290
- var _eventData$agent_id2;
291
- var _finalContent = eventData.content || accumulatedContent;
292
- var _sources = eventData.sources || null;
293
- var _memorySessionId = eventData.memory_session_id || '';
294
- var _attachments = Array.isArray(eventData.attachments) ? eventData.attachments : null;
295
- var _suggestions = Array.isArray(eventData.suggest_reply) ? eventData.suggest_reply : Array.isArray(eventData.suggestions) ? eventData.suggestions : null;
296
- var _agentIdRaw = (_eventData$agent_id2 = eventData.agent_id) !== null && _eventData$agent_id2 !== void 0 ? _eventData$agent_id2 : eventData.agentId;
297
- var _completedAgentId = _agentIdRaw != null && String(_agentIdRaw).trim() !== '' ? String(_agentIdRaw).trim() : null;
298
- callbacks.onComplete(_finalContent, _sources, _memorySessionId, threadId, _attachments, _suggestions, _completedAgentId);
299
- } else if (eventType === 'approval_required') {
300
- var _callbacks$onApproval;
301
- (_callbacks$onApproval = callbacks.onApprovalRequired) === null || _callbacks$onApproval === void 0 || _callbacks$onApproval.call(callbacks, eventData, accumulatedContent, threadId);
302
- } else if (eventType === 'error') {
303
- callbacks.onError(eventData.error, threadId);
304
- }
305
- };
306
- reader = (_response$body = response.body) === null || _response$body === void 0 ? void 0 : _response$body.getReader();
307
- if (reader) {
308
- _context.next = 1;
309
- break;
310
- }
311
- throw new Error('No reader available');
312
- case 1:
313
- decoder = new TextDecoder();
314
- buffer = '';
315
- accumulatedContent = '';
316
- isStreamComplete = false;
317
- case 2:
318
- if (isStreamComplete) {
319
- _context.next = 5;
320
- break;
321
- }
322
- _context.next = 3;
323
- return reader.read();
324
- case 3:
325
- _yield$reader$read = _context.sent;
326
- done = _yield$reader$read.done;
327
- value = _yield$reader$read.value;
328
- if (!done) {
329
- _context.next = 4;
330
- break;
331
- }
332
- isStreamComplete = true;
333
- return _context.abrupt("continue", 5);
334
- case 4:
335
- buffer += decoder.decode(value, {
336
- stream: true
337
- });
338
- lines = buffer.split('\n\n');
339
- buffer = lines.pop() || '';
340
- for (i = 0; i < lines.length; i += 1) {
341
- handleLine(lines[i]);
342
- }
343
- _context.next = 2;
344
- break;
345
- case 5:
346
- case "end":
347
- return _context.stop();
348
- }
349
- }, _callee);
350
- }));
351
- return function processSSEStream(_x, _x2, _x3) {
352
- return _ref2.apply(this, arguments);
353
- };
354
- }();
355
- export var useChatManager = function useChatManager(_ref3) {
356
- var initialChatId = _ref3.chatId,
357
- userInitialMessage = _ref3.userInitialMessage,
358
- onError = _ref3.onError,
359
- _ref3$agents = _ref3.agents,
360
- agents = _ref3$agents === void 0 ? [] : _ref3$agents;
279
+ export var useChatManager = function useChatManager(_ref4) {
280
+ var initialChatId = _ref4.chatId,
281
+ userInitialMessage = _ref4.userInitialMessage,
282
+ onError = _ref4.onError,
283
+ _ref4$agents = _ref4.agents,
284
+ agents = _ref4$agents === void 0 ? [] : _ref4$agents;
361
285
  var _useT = useT(),
362
286
  t = _useT.t;
363
287
  var authUser = useUser();
@@ -416,11 +340,6 @@ export var useChatManager = function useChatManager(_ref3) {
416
340
  * que puedan llegar antes de que el abort se complete.
417
341
  */
418
342
  var activeStreamChatIdRef = useRef(null);
419
- /** Setter indirecto para abortar el stream antes de que el hook de
420
- * orquestador esté inicializado (se linkea más abajo). */
421
- var abortStreamSilentlyRef = useRef(function () {
422
- return undefined;
423
- });
424
343
  var clearStreamUiRef = useRef(function () {
425
344
  return undefined;
426
345
  });
@@ -428,10 +347,19 @@ export var useChatManager = function useChatManager(_ref3) {
428
347
  _useState2 = _slicedToArray(_useState, 2),
429
348
  activeLoadings = _useState2[0],
430
349
  setActiveLoadings = _useState2[1];
431
- var _useState3 = useState(false),
350
+ /**
351
+ * Sesión actualmente visible. Se mantiene en state (no solo en ref) para que
352
+ * el motor de streaming pueda leer reactivamente los flags de ESTA sesión
353
+ * desde el store, mientras otras siguen generando en background.
354
+ */
355
+ var _useState3 = useState(currentChatId.current),
432
356
  _useState4 = _slicedToArray(_useState3, 2),
433
- isContinuingStream = _useState4[0],
434
- setIsContinuingStream = _useState4[1];
357
+ activeSessionId = _useState4[0],
358
+ setActiveSessionId = _useState4[1];
359
+ /** True mientras esta instancia esté montada (evita setState tras desmontar). */
360
+ var isMountedRef = useRef(true);
361
+ /** Evita reconciliar dos veces el mismo estado terminal de una sesión. */
362
+ var lastHandledTerminalRef = useRef(null);
435
363
  var isWebSearchActiveRef = useRef(isWebSearchActive);
436
364
  var isDeepSearchActiveRef = useRef(isDeepSearchActive);
437
365
  /** Evita closures obsoletas cuando el footer conserva sendMessage entre renders. */
@@ -466,6 +394,71 @@ export var useChatManager = function useChatManager(_ref3) {
466
394
  removeMessage = _useChatMessages.removeMessage,
467
395
  handleScroll = _useChatMessages.handleScroll;
468
396
  messagesRef.current = messages;
397
+
398
+ /**
399
+ * Escribe un mensaje en el store por-sesión y, si la sesión es la activa,
400
+ * también en la vista local. Permite que sesiones en background acumulen su
401
+ * resultado sin pisar el chat que el usuario está mirando.
402
+ */
403
+ var commitToSession = useCallback(function (sessionId, message) {
404
+ useSessionsStore.getState().addMessage(sessionId, message);
405
+ if (isMountedRef.current && activeView.is(sessionId)) {
406
+ addMessage(message);
407
+ }
408
+ }, [addMessage]);
409
+ var dropFromSession = useCallback(function (sessionId, messageId) {
410
+ useSessionsStore.getState().removeMessage(sessionId, messageId);
411
+ if (isMountedRef.current && activeView.is(sessionId)) {
412
+ removeMessage(messageId);
413
+ }
414
+ }, [removeMessage]);
415
+
416
+ /** Limpia el tail en vuelo de una sesión (tras terminar; el backend pasa a ser fuente). */
417
+ var clearSessionTail = useCallback(function (sessionId) {
418
+ useSessionsStore.getState().setMessages(sessionId, []);
419
+ }, []);
420
+
421
+ // Registrar la sesión visible en el tracker global para que los callbacks del
422
+ // motor (que pueden pertenecer a una instancia ya desmontada) sepan cuál es la
423
+ // sesión activa actual.
424
+ useEffect(function () {
425
+ activeView.set(activeSessionId);
426
+ }, [activeSessionId]);
427
+ useEffect(function () {
428
+ isMountedRef.current = true;
429
+ return function () {
430
+ isMountedRef.current = false;
431
+ if (activeView.is(currentChatId.current)) {
432
+ activeView.set(null);
433
+ }
434
+ };
435
+ }, []);
436
+
437
+ // Reconciliación: si la sesión activa termina (complete/error/cancelled) pero el
438
+ // store por-sesión todavía tiene un placeholder de streaming, refrescamos desde
439
+ // el backend. Usamos el store (no messagesRef): handleStreamFinish limpia el
440
+ // placeholder ahí de forma síncrona; messagesRef puede quedar stale un render
441
+ // porque setStatus (Zustand) y removeMessage (React) no batchan juntos.
442
+ var activeSessionMeta = useSessionMeta(activeSessionId);
443
+ useEffect(function () {
444
+ var _activeSessionMeta$fi;
445
+ var status = activeSessionMeta === null || activeSessionMeta === void 0 ? void 0 : activeSessionMeta.status;
446
+ if (!status) return;
447
+ var isTerminal = status === 'complete' || status === 'error' || status === 'cancelled';
448
+ if (!isTerminal) return;
449
+ var key = "".concat(activeSessionId, ":").concat(status, ":").concat((_activeSessionMeta$fi = activeSessionMeta === null || activeSessionMeta === void 0 ? void 0 : activeSessionMeta.finishedAt) !== null && _activeSessionMeta$fi !== void 0 ? _activeSessionMeta$fi : '');
450
+ if (lastHandledTerminalRef.current === key) return;
451
+ lastHandledTerminalRef.current = key;
452
+ var tail = useSessionsStore.getState().getMessages(activeSessionId);
453
+ var hasStalePlaceholder = tail.some(function (msg) {
454
+ return isStreamingPlaceholderMessageId(msg.id);
455
+ });
456
+ if (hasStalePlaceholder) {
457
+ loadMessages({
458
+ force: true
459
+ });
460
+ }
461
+ }, [activeSessionMeta === null || activeSessionMeta === void 0 ? void 0 : activeSessionMeta.status, activeSessionMeta === null || activeSessionMeta === void 0 ? void 0 : activeSessionMeta.finishedAt, activeSessionId, loadMessages]);
469
462
  useEffect(function () {
470
463
  var customEvent = new CustomEvent('chat-loading-messages-changed', {
471
464
  detail: {
@@ -476,9 +469,10 @@ export var useChatManager = function useChatManager(_ref3) {
476
469
  }, [loadingMessages]);
477
470
  useEffect(function () {
478
471
  if (initialChatId && initialChatId !== currentChatId.current) {
479
- // Si hay un stream en curso, abortarlo silenciosamente para que los
480
- // tokens residuales no se escriban en el chat nuevo.
481
- abortStreamSilentlyRef.current();
472
+ // NO abortamos el stream anterior: puede seguir generando en background.
473
+ // Solo cambiamos de sesión activa; el motor rutea cada stream por su
474
+ // sessionId, así que los tokens de la sesión previa siguen aplicándose a
475
+ // ESA sesión (store), no a la nueva.
482
476
 
483
477
  // Limpiar contexto global al cambiar de conversación
484
478
  setProject(null);
@@ -486,29 +480,40 @@ export var useChatManager = function useChatManager(_ref3) {
486
480
  setChipsProject(null);
487
481
  setTask(null);
488
482
  currentChatId.current = initialChatId;
483
+ setActiveSessionId(initialChatId);
484
+ useSessionsStore.getState().markUnread(initialChatId, false);
489
485
  currentMessageId.current = uuidv4();
490
486
  currentUserQuestion.current = null;
491
487
  reportedEvent.current = false;
492
- isProcessingRef.current = false;
488
+ // isProcessingRef refleja si la sesión ACTIVA está ocupada. Si la sesión
489
+ // a la que entramos sigue generando en background, queda bloqueada; si no,
490
+ // se habilita el envío aunque otras sesiones sigan generando.
491
+ isProcessingRef.current = sessionStreamManager.isActive(initialChatId);
493
492
  streamingPlaceholderIdRef.current = null;
494
493
  activeStreamChatIdRef.current = null;
495
- streamingStore.clear();
496
- loadMessages();
494
+
495
+ // loadMessages lo dispara useChatMessages al cambiar chatId (con cache en memoria).
497
496
  }
498
- }, [initialChatId, project, setProject, setClient, setChipsProject, setTask, loadMessages]);
499
- var handleStreamError = useCallback(function (errorMessage, errorRawMessage) {
497
+ }, [initialChatId, project, setProject, setClient, setChipsProject, setTask]);
498
+ var handleStreamError = useCallback(function (ctx, errorMessage, errorRawMessage) {
500
499
  var _errorRawMessage$matc, _errorRawMessage$matc2;
501
- clearStreamUiRef.current();
502
- var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
503
- streamingStore.clear();
504
- streamingPlaceholderIdRef.current = null;
505
- activeStreamChatIdRef.current = null;
506
- removeMessage(tempMessageId);
500
+ var sessionId = ctx.sessionId,
501
+ messageId = ctx.messageId,
502
+ placeholderId = ctx.placeholderId;
503
+ var isActive = activeView.is(sessionId);
504
+ sessionStreamingText.clear(sessionId);
505
+ dropFromSession(sessionId, placeholderId);
506
+ if (isActive) {
507
+ clearStreamUiRef.current();
508
+ streamingPlaceholderIdRef.current = null;
509
+ activeStreamChatIdRef.current = null;
510
+ isProcessingRef.current = false;
511
+ }
507
512
  var message = errorMessage === "Access denied: You don't have permission to access this agent" ? t('chat.errorAccessDenied') : errorMessage === 'invalid_request_error' && errorRawMessage !== null && errorRawMessage !== void 0 && errorRawMessage.includes('prompt is too long') ? t('chat.errorPromptTooLong', {
508
513
  used: (_errorRawMessage$matc = (_errorRawMessage$matc2 = errorRawMessage.match(/(\d+) tokens/)) === null || _errorRawMessage$matc2 === void 0 ? void 0 : _errorRawMessage$matc2[1]) !== null && _errorRawMessage$matc !== void 0 ? _errorRawMessage$matc : ''
509
514
  }) : t('chat.error');
510
- addMessage({
511
- id: "answer-".concat(currentMessageId.current),
515
+ commitToSession(sessionId, {
516
+ id: "answer-".concat(messageId),
512
517
  message: message,
513
518
  isError: true,
514
519
  date: new Date(),
@@ -518,53 +523,84 @@ export var useChatManager = function useChatManager(_ref3) {
518
523
  },
519
524
  role: ChatHistoryRole.ASSISTANT
520
525
  });
521
- isProcessingRef.current = false;
522
- }, [addMessage, removeMessage, t]);
523
- var handleStreamUpdate = useCallback(function (content, sources, memorySessionId) {
524
- // Si el chat cambió mientras el stream estaba en vuelo, descartar el
525
- // token residual: no debe pintarse en el nuevo chat.
526
- if (activeStreamChatIdRef.current != null && activeStreamChatIdRef.current !== currentChatId.current) {
527
- return;
526
+ clearSessionTail(sessionId);
527
+ if (!isActive) {
528
+ notifySessionFinishedInBackground(sessionId, 'error');
528
529
  }
529
- var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
530
+ }, [commitToSession, dropFromSession, clearSessionTail, t]);
531
+ var handleStreamUpdate = useCallback(function (ctx, content) {
532
+ var sessionId = ctx.sessionId,
533
+ placeholderId = ctx.placeholderId;
530
534
 
531
- // Primera llamada de este stream: insertamos el placeholder en el
532
- // array de `messages` una única vez. Las llamadas subsiguientes ya no
533
- // tocan `messages`; el texto vive en el streamingStore (externo), por
534
- // lo que React no re-renderiza el árbol completo en cada token.
535
- if (streamingPlaceholderIdRef.current !== tempMessageId) {
536
- streamingPlaceholderIdRef.current = tempMessageId;
537
- activeStreamChatIdRef.current = currentChatId.current;
538
- streamingStore.start(tempMessageId);
539
- addMessage({
540
- id: tempMessageId,
535
+ // Aseguramos el placeholder una única vez por stream, tanto en el store
536
+ // de la sesión como en la vista si es la activa. El texto en vivo viaja
537
+ // por sessionStreamingText (externo), sin re-render del árbol completo.
538
+ var placeholderExists = useSessionsStore.getState().getMessages(sessionId).some(function (msg) {
539
+ return msg.id === placeholderId;
540
+ });
541
+ if (!placeholderExists) {
542
+ sessionStreamingText.start(sessionId, placeholderId);
543
+ commitToSession(sessionId, {
544
+ id: placeholderId,
541
545
  message: '',
542
546
  date: new Date(),
543
547
  user: {
544
548
  id: 'assistant',
545
549
  name: 'Assistant'
546
550
  },
547
- role: ChatHistoryRole.ASSISTANT,
548
- sources: sources,
549
- memorySessionId: memorySessionId
551
+ role: ChatHistoryRole.ASSISTANT
550
552
  });
551
553
  }
552
- streamingStore.setText(tempMessageId, content);
553
- }, [addMessage]);
554
+ if (activeView.is(sessionId)) {
555
+ streamingPlaceholderIdRef.current = placeholderId;
556
+ activeStreamChatIdRef.current = sessionId;
557
+ }
558
+ sessionStreamingText.setText(sessionId, placeholderId, content);
559
+ }, [commitToSession]);
554
560
  var handleStreamFinish = useCallback(/*#__PURE__*/function () {
555
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId) {
561
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(ctx, content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId) {
556
562
  var _previousMessage$appr, _window$taskPanel, _createAgentFollowUp, _editAgentFollowUp;
557
- var tempMessageId, attachments, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, wasConfigureAgentAccessApproved, createAgentFollowUp, configuredAgentId, wasEditAgentApproved, editAgentFollowUp, fromStream, fromArgs, resolvedAgentId, taskIdsFromUrls, taskIdsFromDeleteApproval, taskIdsFromDeletionText, taskIdsForDashboard, shouldSyncDashboard, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, isOnProjectRoute, _window$newProjectDas, _window$newProjectDas2, _window$newProjectDas3, _window$newProjectDas4, _window$newProjectDas5, _window$newProjectDas6, openTaskPanelId, manualApproval, manualWasTaskEdit, manualWasTaskDelete, _manualApproval$toolA, manualPseudoAction, affectedTaskIds, _window$taskPanel2, _window$taskPanel2$re, customEvent;
558
- return _regeneratorRuntime.wrap(function (_context2) {
559
- while (1) switch (_context2.prev = _context2.next) {
563
+ var sessionId, placeholderId, isActive, tempMessageId, attachments, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, wasConfigureAgentAccessApproved, createAgentFollowUp, configuredAgentId, wasEditAgentApproved, editAgentFollowUp, fromStream, fromArgs, resolvedAgentId, taskIdsFromUrls, taskIdsFromDeleteApproval, taskIdsFromDeletionText, taskIdsForDashboard, shouldSyncDashboard, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, isOnProjectRoute, _window$newProjectDas, _window$newProjectDas2, _window$newProjectDas3, _window$newProjectDas4, _window$newProjectDas5, _window$newProjectDas6, openTaskPanelId, manualApproval, manualWasTaskEdit, manualWasTaskDelete, _manualApproval$toolA, manualPseudoAction, affectedTaskIds, _window$taskPanel2, _window$taskPanel2$re, customEvent;
564
+ return _regeneratorRuntime.wrap(function (_context) {
565
+ while (1) switch (_context.prev = _context.next) {
560
566
  case 0:
561
- tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
562
- streamingStore.clear();
567
+ sessionId = ctx.sessionId, placeholderId = ctx.placeholderId;
568
+ isActive = activeView.is(sessionId);
569
+ tempMessageId = placeholderId;
570
+ sessionStreamingText.clear(sessionId);
571
+ dropFromSession(sessionId, tempMessageId);
572
+ attachments = normalizeAssistantAttachments(rawAttachments); // Sesión en background: cerramos lean. El backend ya persistió la
573
+ // respuesta, así que al volver a la sesión se carga desde ahí. Avisamos
574
+ // que terminó (unread + evento para toast/sonido).
575
+ if (isActive) {
576
+ _context.next = 1;
577
+ break;
578
+ }
579
+ commitToSession(sessionId, _objectSpread(_objectSpread({
580
+ id: "answer-".concat(memorySessionId),
581
+ message: content,
582
+ date: new Date(),
583
+ user: {
584
+ id: 'assistant',
585
+ name: 'Assistant'
586
+ },
587
+ role: ChatHistoryRole.ASSISTANT,
588
+ sources: sources
589
+ }, attachments.length > 0 ? {
590
+ attachments: attachments
591
+ } : {}), {}, {
592
+ memorySessionId: memorySessionId,
593
+ suggestions: suggestions || []
594
+ }));
595
+ clearSessionTail(sessionId);
596
+ notifySessionFinishedInBackground(sessionId, 'complete');
597
+ return _context.abrupt("return");
598
+ case 1:
563
599
  streamingPlaceholderIdRef.current = null;
564
600
  activeStreamChatIdRef.current = null;
565
601
  hitlExecutionContextRef.current = null;
566
- removeMessage(tempMessageId);
567
- attachments = normalizeAssistantAttachments(rawAttachments); // Detectar todas las URLs de tareas (.../tasks/123/detail|message|messages|files|history|hours)
602
+
603
+ // Detectar todas las URLs de tareas (.../tasks/123/detail|message|messages|files|history|hours)
568
604
  taskUrlRegex = new RegExp(TASK_URL_REGEX_PATTERN, 'g');
569
605
  matches = _toConsumableArray(content.matchAll(taskUrlRegex));
570
606
  contentToAdd = content;
@@ -632,23 +668,23 @@ export var useChatManager = function useChatManager(_ref3) {
632
668
  taskIdsForDashboard = taskIdsFromUrls.length > 0 ? taskIdsFromUrls : taskIdsFromDeleteApproval.length > 0 ? taskIdsFromDeleteApproval : taskIdsFromDeletionText;
633
669
  shouldSyncDashboard = hasApprovalInPreviousMessage && (wasTaskCreation || wasTaskEdit || wasTaskDelete) && taskIdsForDashboard.length > 0;
634
670
  if (!shouldSyncDashboard) {
635
- _context2.next = 3;
671
+ _context.next = 4;
636
672
  break;
637
673
  }
638
674
  taskIds = taskIdsForDashboard;
639
675
  if (!(matches.length > 0)) {
640
- _context2.next = 2;
676
+ _context.next = 3;
641
677
  break;
642
678
  }
643
- _context2.next = 1;
679
+ _context.next = 2;
644
680
  return getTabTaskDefault(taskIds[0]);
645
- case 1:
646
- tab = _context2.sent;
681
+ case 2:
682
+ tab = _context.sent;
647
683
  tabSegment = tab ? "/".concat(tab) : '/detail';
648
684
  contentToAdd = content.replace(taskUrlRegex, function (url) {
649
685
  return url.replace(/\/(detail|message|messages|files|history|hours)(?=$|\?)/, tabSegment);
650
686
  });
651
- case 2:
687
+ case 3:
652
688
  lastProjectMessage = messagesRef.current.filter(function (msg) {
653
689
  return msg.projectId;
654
690
  }).at(-1);
@@ -666,7 +702,7 @@ export var useChatManager = function useChatManager(_ref3) {
666
702
  (_window$newProjectDas5 = window.newProjectDashboard) === null || _window$newProjectDas5 === void 0 || (_window$newProjectDas6 = _window$newProjectDas5.deleteExistingTaskFromDashboard) === null || _window$newProjectDas6 === void 0 || _window$newProjectDas6.call(_window$newProjectDas5, taskIds);
667
703
  }
668
704
  }
669
- case 3:
705
+ case 4:
670
706
  // Refetch del task panel si está abierto y la tool aprobada editó/borró esa tarea.
671
707
  // Cubre los dos flujos de approval:
672
708
  // 1) Approval por botón → `previousMessage.approval.pending_actions` (vía hasApprovalInPreviousMessage)
@@ -686,7 +722,7 @@ export var useChatManager = function useChatManager(_ref3) {
686
722
  (_window$taskPanel2 = window.taskPanel) === null || _window$taskPanel2 === void 0 || (_window$taskPanel2$re = _window$taskPanel2.refetchTask) === null || _window$taskPanel2$re === void 0 || _window$taskPanel2$re.call(_window$taskPanel2);
687
723
  }
688
724
  }
689
- addMessage(_objectSpread(_objectSpread({
725
+ commitToSession(sessionId, _objectSpread(_objectSpread({
690
726
  id: "answer-".concat(memorySessionId),
691
727
  message: contentToAdd,
692
728
  date: new Date(),
@@ -704,6 +740,7 @@ export var useChatManager = function useChatManager(_ref3) {
704
740
  }, createAgentFollowUp ? {
705
741
  createAgentFollowUp: createAgentFollowUp
706
742
  } : {}));
743
+ clearSessionTail(sessionId);
707
744
  if ((_createAgentFollowUp = createAgentFollowUp) !== null && _createAgentFollowUp !== void 0 && _createAgentFollowUp.agentId) {
708
745
  fetchAgentDetail(createAgentFollowUp.agentId).then(function (chatAgent) {
709
746
  document.dispatchEvent(new CustomEvent('maia-merge-created-agent-into-list', {
@@ -732,24 +769,26 @@ export var useChatManager = function useChatManager(_ref3) {
732
769
  document.dispatchEvent(customEvent);
733
770
  firstTimeRef.current = false;
734
771
  }
735
- case 4:
772
+ case 5:
736
773
  case "end":
737
- return _context2.stop();
774
+ return _context.stop();
738
775
  }
739
- }, _callee2);
776
+ }, _callee);
740
777
  }));
741
- return function (_x4, _x5, _x6, _x7, _x8, _x9) {
742
- return _ref4.apply(this, arguments);
778
+ return function (_x, _x2, _x3, _x4, _x5, _x6, _x7) {
779
+ return _ref5.apply(this, arguments);
743
780
  };
744
- }(), [addMessage, removeMessage, project, getTabTaskDefault, event, agent]);
781
+ }(), [commitToSession, dropFromSession, clearSessionTail, project, getTabTaskDefault, event, agent]);
745
782
  var handleStreamStop = useCallback(function () {
783
+ // El stop siempre aplica a la sesión activa (botón del input visible).
784
+ var sessionId = currentChatId.current;
746
785
  clearStreamUiRef.current();
747
786
  var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
748
- streamingStore.clear();
787
+ sessionStreamingText.clear(sessionId);
749
788
  streamingPlaceholderIdRef.current = null;
750
789
  activeStreamChatIdRef.current = null;
751
- removeMessage(tempMessageId);
752
- addMessage({
790
+ dropFromSession(sessionId, tempMessageId);
791
+ commitToSession(sessionId, {
753
792
  id: "answer-".concat(currentMessageId.current, "-cancelled"),
754
793
  message: t('chat.cancelled'),
755
794
  date: new Date(),
@@ -760,19 +799,24 @@ export var useChatManager = function useChatManager(_ref3) {
760
799
  role: ChatHistoryRole.ASSISTANT,
761
800
  isFrontendCancelled: true
762
801
  });
802
+ clearSessionTail(sessionId);
763
803
  isProcessingRef.current = false;
764
804
  setTimeout(function () {
765
805
  var customEvent = new CustomEvent('refetch-session');
766
806
  document.dispatchEvent(customEvent);
767
807
  }, 500);
768
- }, [addMessage, removeMessage, t]);
769
- var handleApprovalRequired = useCallback(function (approval, accumulatedContent) {
808
+ }, [commitToSession, dropFromSession, clearSessionTail, t]);
809
+ var handleApprovalRequired = useCallback(function (ctx, approval, accumulatedContent) {
770
810
  var _approval$pending_act;
771
- var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
772
- streamingStore.clear();
773
- streamingPlaceholderIdRef.current = null;
774
- activeStreamChatIdRef.current = null;
775
- removeMessage(tempMessageId);
811
+ var sessionId = ctx.sessionId,
812
+ placeholderId = ctx.placeholderId;
813
+ var isActive = activeView.is(sessionId);
814
+ sessionStreamingText.clear(sessionId);
815
+ dropFromSession(sessionId, placeholderId);
816
+ if (isActive) {
817
+ streamingPlaceholderIdRef.current = null;
818
+ activeStreamChatIdRef.current = null;
819
+ }
776
820
  var hitlContext = {
777
821
  messageId: "approval-".concat(approval.original_thread_id),
778
822
  messageText: accumulatedContent || '',
@@ -782,24 +826,28 @@ export var useChatManager = function useChatManager(_ref3) {
782
826
  return action.thread_id;
783
827
  })
784
828
  };
785
- hitlExecutionContextRef.current = hitlContext;
829
+ if (isActive) {
830
+ hitlExecutionContextRef.current = hitlContext;
831
+ }
786
832
  if (approval.manual_approval_detected) {
787
- var _approval$pending_act2, _ref5, _tool_name, _tool_args;
833
+ var _approval$pending_act2, _ref6, _tool_name, _tool_args;
788
834
  var firstAction = (_approval$pending_act2 = approval.pending_actions) === null || _approval$pending_act2 === void 0 ? void 0 : _approval$pending_act2[0];
789
- var toolName = (_ref5 = (_tool_name = approval.tool_name) !== null && _tool_name !== void 0 ? _tool_name : firstAction === null || firstAction === void 0 ? void 0 : firstAction.tool_name) !== null && _ref5 !== void 0 ? _ref5 : '';
835
+ var toolName = (_ref6 = (_tool_name = approval.tool_name) !== null && _tool_name !== void 0 ? _tool_name : firstAction === null || firstAction === void 0 ? void 0 : firstAction.tool_name) !== null && _ref6 !== void 0 ? _ref6 : '';
790
836
  var toolArgs = ((_tool_args = approval.tool_args) !== null && _tool_args !== void 0 ? _tool_args : firstAction === null || firstAction === void 0 ? void 0 : firstAction.tool_args) || null;
791
- if (toolName) {
837
+ if (toolName && isActive) {
792
838
  lastManualApprovalRef.current = {
793
839
  toolName: toolName,
794
840
  toolArgs: toolArgs
795
841
  };
796
842
  }
797
- isProcessingRef.current = false;
843
+ if (isActive) {
844
+ isProcessingRef.current = false;
845
+ }
798
846
  return;
799
847
  }
800
848
 
801
849
  // Add a message with the approval request
802
- addMessage({
850
+ commitToSession(sessionId, {
803
851
  id: "approval-".concat(approval.original_thread_id),
804
852
  message: accumulatedContent || '',
805
853
  date: new Date(),
@@ -811,9 +859,14 @@ export var useChatManager = function useChatManager(_ref3) {
811
859
  approval: approval,
812
860
  approvalStatus: 'pending'
813
861
  });
814
- isProcessingRef.current = false;
815
- }, [addMessage, removeMessage]);
862
+ if (isActive) {
863
+ isProcessingRef.current = false;
864
+ } else {
865
+ notifySessionFinishedInBackground(sessionId, 'approval_required');
866
+ }
867
+ }, [commitToSession, dropFromSession]);
816
868
  var _useOrchestratorStrea = useOrchestratorStream({
869
+ activeSessionId: activeSessionId,
817
870
  onError: handleStreamError,
818
871
  onStreamUpdate: handleStreamUpdate,
819
872
  onFinishStream: handleStreamFinish,
@@ -827,32 +880,42 @@ export var useChatManager = function useChatManager(_ref3) {
827
880
  loadingMessage = _useOrchestratorStrea.loadingMessage,
828
881
  streamActivity = _useOrchestratorStrea.streamActivity,
829
882
  updateStreamActivity = _useOrchestratorStrea.updateStreamActivity,
830
- stopStreaming = _useOrchestratorStrea.stopStreaming,
831
- abortStreamSilently = _useOrchestratorStrea.abortStreamSilently;
832
-
833
- // Mantenemos el setter más reciente en una ref para que pueda usarse desde
834
- // efectos definidos antes en el archivo (cambio de chat, reset, etc.).
835
- abortStreamSilentlyRef.current = abortStreamSilently;
883
+ stopStreaming = _useOrchestratorStrea.stopStreaming;
836
884
  clearStreamUiRef.current = function () {
837
885
  updateStreamActivity(null);
838
886
  setActiveLoadings({});
839
- setIsContinuingStream(false);
840
887
  hitlExecutionContextRef.current = null;
841
888
  };
842
889
  var currentProject = project;
843
890
  var sendMessage = useCallback(/*#__PURE__*/function () {
844
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId) {
891
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId) {
845
892
  var _messagesRef$current;
846
- var _normalizeSendMessage, attachments, options, effectiveMentions, contextMessage, payloadFuaId, payloadScId, payloadContextData, displayMessage, newMessageId, lastMessageWithProject, currentAgentFromMessages, streamingPlaceholderId, finalMessage, _options$projectChang, _contextRef$current$p, history, _contextRef$current, ctxChipsProject, ctxProject, ctxClient, ctxTask, lastMessageProjectId, projectToRequest, projects, payloadFaqId, payloadAgentSuggestionId, payloadData;
847
- return _regeneratorRuntime.wrap(function (_context3) {
848
- while (1) switch (_context3.prev = _context3.next) {
893
+ var willStartNewStream, _normalizeSendMessage, attachments, options, effectiveMentions, contextMessage, payloadFuaId, payloadScId, payloadContextData, displayMessage, newMessageId, lastMessageWithProject, currentAgentFromMessages, sessionId, _contextRef$current, ctxChipsProject, ctxProject, ctxClient, ctxTask, streamingPlaceholderId, finalMessage, _options$projectChang, _contextRef$current$p, history, lastMessageProjectId, projectToRequest, projects, payloadFaqId, payloadAgentSuggestionId, payloadData;
894
+ return _regeneratorRuntime.wrap(function (_context2) {
895
+ while (1) switch (_context2.prev = _context2.next) {
849
896
  case 0:
850
897
  if (!(isProcessingRef.current || waitingResponse || loadingMessages)) {
851
- _context3.next = 1;
898
+ _context2.next = 1;
852
899
  break;
853
900
  }
854
- return _context3.abrupt("return");
901
+ return _context2.abrupt("return");
855
902
  case 1:
903
+ // Tope de concurrencia: si esta sesión no está generando y ya hay
904
+ // MAX_CONCURRENT_STREAMS activas, avisamos y no arrancamos otra.
905
+ willStartNewStream = !sessionStreamManager.isActive(currentChatId.current);
906
+ if (!(willStartNewStream && sessionStreamManager.getActiveCount() >= MAX_CONCURRENT_STREAMS)) {
907
+ _context2.next = 2;
908
+ break;
909
+ }
910
+ document.dispatchEvent(new CustomEvent('snackbar-event', {
911
+ detail: {
912
+ show: true,
913
+ severity: 'info',
914
+ message: t('chat.tooManyActiveSessions')
915
+ }
916
+ }));
917
+ return _context2.abrupt("return");
918
+ case 2:
856
919
  _normalizeSendMessage = normalizeSendMessageArgs(attachmentsOrOptions), attachments = _normalizeSendMessage.attachments, options = _normalizeSendMessage.options; // Las mentions pueden venir vía 5to parámetro (call positional desde el footer)
857
920
  // o vía SendMessageOptions (call programático). El parámetro explícito gana.
858
921
  effectiveMentions = mentions !== null && mentions !== void 0 ? mentions : options.mentions;
@@ -877,8 +940,10 @@ export var useChatManager = function useChatManager(_ref3) {
877
940
  lastMessageWithProject = messagesRef.current.filter(function (msg) {
878
941
  return msg.projectId;
879
942
  }).at(-1);
880
- currentAgentFromMessages = (_messagesRef$current = messagesRef.current) === null || _messagesRef$current === void 0 || (_messagesRef$current = _messagesRef$current[messagesRef.current.length - 1]) === null || _messagesRef$current === void 0 ? void 0 : _messagesRef$current.agentId; // No agregar projectId al mensaje del usuario - se determinará después
881
- addMessage(_objectSpread({
943
+ currentAgentFromMessages = (_messagesRef$current = messagesRef.current) === null || _messagesRef$current === void 0 || (_messagesRef$current = _messagesRef$current[messagesRef.current.length - 1]) === null || _messagesRef$current === void 0 ? void 0 : _messagesRef$current.agentId;
944
+ sessionId = currentChatId.current;
945
+ _contextRef$current = contextRef.current, ctxChipsProject = _contextRef$current.chipsProject, ctxProject = _contextRef$current.project, ctxClient = _contextRef$current.client, ctxTask = _contextRef$current.task; // No agregar projectId al mensaje del usuario - se determinará después
946
+ commitToSession(sessionId, _objectSpread({
882
947
  id: "question-".concat(currentMessageId.current),
883
948
  message: displayMessage,
884
949
  date: new Date(),
@@ -891,8 +956,9 @@ export var useChatManager = function useChatManager(_ref3) {
891
956
  currentMessageId.current = uuidv4();
892
957
  streamingPlaceholderId = "answer-".concat(currentMessageId.current, "-streaming");
893
958
  streamingPlaceholderIdRef.current = streamingPlaceholderId;
894
- activeStreamChatIdRef.current = currentChatId.current;
895
- addMessage({
959
+ activeStreamChatIdRef.current = sessionId;
960
+ sessionStreamingText.start(sessionId, streamingPlaceholderId);
961
+ commitToSession(sessionId, {
896
962
  id: streamingPlaceholderId,
897
963
  message: '',
898
964
  date: new Date(),
@@ -912,7 +978,6 @@ export var useChatManager = function useChatManager(_ref3) {
912
978
  role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
913
979
  };
914
980
  });
915
- _contextRef$current = contextRef.current, ctxChipsProject = _contextRef$current.chipsProject, ctxProject = _contextRef$current.project, ctxClient = _contextRef$current.client, ctxTask = _contextRef$current.task;
916
981
  lastMessageProjectId = lastMessageWithProject === null || lastMessageWithProject === void 0 ? void 0 : lastMessageWithProject.projectId;
917
982
  projectToRequest = resolveProjectToRequest(ctxChipsProject, lastMessageProjectId);
918
983
  console.info('[useChatManager] sendMessage context resolution:', {
@@ -925,13 +990,13 @@ export var useChatManager = function useChatManager(_ref3) {
925
990
  projectPropId: ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.id,
926
991
  agentType: agent === null || agent === void 0 ? void 0 : agent.type
927
992
  });
928
- _context3.next = 2;
993
+ _context2.next = 3;
929
994
  return fetchProjects([projectToRequest]);
930
- case 2:
931
- projects = _context3.sent;
995
+ case 3:
996
+ projects = _context2.sent;
932
997
  payloadFaqId = faqId !== null && faqId !== void 0 ? faqId : options.faqId;
933
998
  payloadAgentSuggestionId = agentSuggestionId !== null && agentSuggestionId !== void 0 ? agentSuggestionId : options.agentSuggestionId;
934
- payloadData = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
999
+ payloadData = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
935
1000
  message: finalMessage,
936
1001
  history: history,
937
1002
  projectId: projectToRequest,
@@ -968,22 +1033,24 @@ export var useChatManager = function useChatManager(_ref3) {
968
1033
  agentEntity: agent.entity
969
1034
  } : {}), (agent === null || agent === void 0 ? void 0 : agent.type) != null ? {
970
1035
  agentType: agent.type
1036
+ } : {}), (agent === null || agent === void 0 ? void 0 : agent.emoji) != null ? {
1037
+ agentEmoji: agent.emoji
971
1038
  } : {}), contextMessage ? {
972
1039
  contextMessage: contextMessage
973
1040
  } : {}), payloadContextData ? {
974
1041
  contextData: payloadContextData
975
1042
  } : {});
976
1043
  askMaia(payloadData);
977
- case 3:
1044
+ case 4:
978
1045
  case "end":
979
- return _context3.stop();
1046
+ return _context2.stop();
980
1047
  }
981
- }, _callee3);
1048
+ }, _callee2);
982
1049
  }));
983
- return function (_x0, _x1, _x10, _x11, _x12, _x13, _x14) {
984
- return _ref6.apply(this, arguments);
1050
+ return function (_x8, _x9, _x0, _x1, _x10, _x11, _x12) {
1051
+ return _ref7.apply(this, arguments);
985
1052
  };
986
- }(), [addMessage, event, askMaia, project, client, task, chipsProject, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
1053
+ }(), [addMessage, commitToSession, event, askMaia, project, client, task, chipsProject, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
987
1054
  var changeProject = useCallback(function (option) {
988
1055
  if (!currentUserQuestion.current) return;
989
1056
  if (option.id !== (project === null || project === void 0 ? void 0 : project.id)) {
@@ -1030,15 +1097,15 @@ export var useChatManager = function useChatManager(_ref3) {
1030
1097
  }
1031
1098
  }, [project, setProject, askMaia, authUser, isWebSearchActive, agent]);
1032
1099
  var handleFeedback = useCallback(/*#__PURE__*/function () {
1033
- var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(feedbackProp, chatMessageId) {
1100
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(feedbackProp, chatMessageId) {
1034
1101
  var response;
1035
- return _regeneratorRuntime.wrap(function (_context4) {
1036
- while (1) switch (_context4.prev = _context4.next) {
1102
+ return _regeneratorRuntime.wrap(function (_context3) {
1103
+ while (1) switch (_context3.prev = _context3.next) {
1037
1104
  case 0:
1038
- _context4.next = 1;
1105
+ _context3.next = 1;
1039
1106
  return maia.Chats.wasHelpfulChat(chatMessageId, feedbackProp === Feedback.THUMBS_UP);
1040
1107
  case 1:
1041
- response = _context4.sent;
1108
+ response = _context3.sent;
1042
1109
  if (response) {
1043
1110
  messagesRef.current = messagesRef.current.map(function (message) {
1044
1111
  if (message.id === chatMessageId && message.role === 'assistant') {
@@ -1051,44 +1118,72 @@ export var useChatManager = function useChatManager(_ref3) {
1051
1118
  }
1052
1119
  case 2:
1053
1120
  case "end":
1054
- return _context4.stop();
1121
+ return _context3.stop();
1055
1122
  }
1056
- }, _callee4);
1123
+ }, _callee3);
1057
1124
  }));
1058
- return function (_x15, _x16) {
1059
- return _ref7.apply(this, arguments);
1125
+ return function (_x13, _x14) {
1126
+ return _ref8.apply(this, arguments);
1060
1127
  };
1061
1128
  }(), []);
1062
1129
  var handleApprovalDecision = useCallback(/*#__PURE__*/function () {
1063
- var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(threadIds, decision, editedActions) {
1064
- var messageWithApproval, approval, messageId, loadingKey, hitlContext, initialActivity, existingMessage, newStatus, streamSettled, response, _t;
1065
- return _regeneratorRuntime.wrap(function (_context5) {
1066
- while (1) switch (_context5.prev = _context5.next) {
1130
+ var _ref9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(threadIds, decision, editedActions) {
1131
+ var found, messageWithApproval, foundSessionId, approval, sessionId, messageId, newStatus, hitlContext, isActiveSession, streamMessageId, hitlCtx, releaseActiveProcessing, result;
1132
+ return _regeneratorRuntime.wrap(function (_context4) {
1133
+ while (1) switch (_context4.prev = _context4.next) {
1067
1134
  case 0:
1068
1135
  if (threadIds !== null && threadIds !== void 0 && threadIds.length) {
1069
- _context5.next = 1;
1136
+ _context4.next = 1;
1070
1137
  break;
1071
1138
  }
1072
1139
  console.error('No thread_ids provided for approval decision');
1073
- return _context5.abrupt("return");
1140
+ return _context4.abrupt("return");
1074
1141
  case 1:
1075
- // Buscar el mensaje que contiene alguno de estos threadIds en sus pending_actions
1076
- messageWithApproval = messagesRef.current.find(function (m) {
1077
- var _m$approval;
1078
- return (_m$approval = m.approval) === null || _m$approval === void 0 || (_m$approval = _m$approval.pending_actions) === null || _m$approval === void 0 ? void 0 : _m$approval.some(function (action) {
1079
- return threadIds.includes(action.thread_id);
1080
- });
1081
- });
1082
- if (!(!messageWithApproval || !messageWithApproval.approval)) {
1083
- _context5.next = 2;
1142
+ found = findMessageWithApprovalByThreadIds(threadIds, messagesRef.current);
1143
+ if (found !== null && found !== void 0 && found.message.approval) {
1144
+ _context4.next = 2;
1084
1145
  break;
1085
1146
  }
1086
1147
  console.error('No se encontró mensaje con approval para thread_ids:', threadIds);
1087
- return _context5.abrupt("return");
1148
+ return _context4.abrupt("return");
1088
1149
  case 2:
1150
+ messageWithApproval = found.message, foundSessionId = found.sessionId;
1089
1151
  approval = messageWithApproval.approval;
1152
+ if (approval) {
1153
+ _context4.next = 3;
1154
+ break;
1155
+ }
1156
+ return _context4.abrupt("return");
1157
+ case 3:
1158
+ sessionId = approval.session_id || foundSessionId;
1159
+ if (sessionId) {
1160
+ _context4.next = 4;
1161
+ break;
1162
+ }
1163
+ console.error('No session_id disponible para approval:', threadIds);
1164
+ return _context4.abrupt("return");
1165
+ case 4:
1166
+ if (!sessionStreamManager.isActive(sessionId)) {
1167
+ _context4.next = 5;
1168
+ break;
1169
+ }
1170
+ return _context4.abrupt("return");
1171
+ case 5:
1172
+ if (!(sessionStreamManager.getActiveCount() >= MAX_CONCURRENT_STREAMS)) {
1173
+ _context4.next = 6;
1174
+ break;
1175
+ }
1176
+ document.dispatchEvent(new CustomEvent('snackbar-event', {
1177
+ detail: {
1178
+ show: true,
1179
+ severity: 'info',
1180
+ message: t('chat.tooManyActiveSessions')
1181
+ }
1182
+ }));
1183
+ return _context4.abrupt("return");
1184
+ case 6:
1090
1185
  messageId = messageWithApproval.id;
1091
- loadingKey = threadIds[0];
1186
+ newStatus = decision === 'approve' ? 'approved' : 'rejected';
1092
1187
  hitlContext = {
1093
1188
  messageId: messageId,
1094
1189
  messageText: messageWithApproval.message,
@@ -1096,174 +1191,106 @@ export var useChatManager = function useChatManager(_ref3) {
1096
1191
  pendingActions: approval.pending_actions,
1097
1192
  threadIds: threadIds
1098
1193
  };
1099
- hitlExecutionContextRef.current = hitlContext;
1100
- initialActivity = resolveInitialHitlStreamActivity(t, hitlContext); // Update message status immediately
1101
- messagesRef.current = messagesRef.current.map(function (message) {
1102
- if (message.id === messageId) {
1103
- var newStatus = decision === 'approve' ? 'approved' : 'rejected';
1104
- return _objectSpread(_objectSpread({}, message), {}, {
1105
- approvalStatus: newStatus
1106
- });
1107
- }
1108
- return message;
1109
- });
1110
-
1111
- // Trigger re-render
1112
- existingMessage = messagesRef.current.find(function (m) {
1113
- return m.id === messageId;
1114
- });
1115
- if (existingMessage) {
1116
- newStatus = decision === 'approve' ? 'approved' : 'rejected';
1117
- addMessage(_objectSpread(_objectSpread({}, existingMessage), {}, {
1118
- approvalStatus: newStatus
1119
- }));
1194
+ isActiveSession = activeView.is(sessionId);
1195
+ if (isActiveSession) {
1196
+ hitlExecutionContextRef.current = hitlContext;
1197
+ isProcessingRef.current = true;
1120
1198
  }
1121
-
1122
- // Call continue-thread endpoint with ALL thread_ids in a single request
1123
- isProcessingRef.current = true;
1124
- setIsContinuingStream(true);
1125
- currentMessageId.current = uuidv4();
1126
-
1127
- // Add loading
1128
- setActiveLoadings(function (prev) {
1129
- return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, loadingKey, initialActivity.message));
1130
- });
1131
- updateStreamActivity(initialActivity);
1132
-
1133
- // Marca si el stream cerró vía un evento terminal (complete/approval/error).
1134
- // Si el backend cierra la conexión sin emitirlo, limpiamos el indicador en el
1135
- // `finally` para que no quede trabado en "Escribiendo la respuesta".
1136
- streamSettled = false;
1137
- _context5.prev = 3;
1138
- _context5.next = 4;
1139
- return maia.Orchestrator.continueThread({
1140
- threadIds: threadIds,
1141
- // Send all action thread_ids at once
1142
- sessionId: approval.session_id,
1143
- decision: editedActions ? 'edit' : decision,
1144
- editedActions: editedActions,
1145
- agentId: (agent === null || agent === void 0 ? void 0 : agent.id) || '',
1146
- lang: authUser.lang
1147
- });
1148
- case 4:
1149
- response = _context5.sent;
1150
- if (response.ok) {
1151
- _context5.next = 5;
1152
- break;
1199
+ commitToSession(sessionId, _objectSpread(_objectSpread({}, messageWithApproval), {}, {
1200
+ approvalStatus: newStatus
1201
+ }));
1202
+ streamMessageId = uuidv4();
1203
+ if (isActiveSession) {
1204
+ currentMessageId.current = streamMessageId;
1153
1205
  }
1154
- setIsContinuingStream(false);
1155
- handleStreamError();
1156
- return _context5.abrupt("return");
1157
- case 5:
1158
- _context5.next = 6;
1159
- return processSSEStream(response, loadingKey, {
1160
- onThinking: function onThinking() {
1161
- var activity = {
1162
- phase: 'thinking',
1163
- message: getThinkingLoadingMessage(0, t)
1164
- };
1165
- updateStreamActivity(activity);
1166
- },
1167
- onToken: function onToken(content) {
1168
- updateStreamActivity(getWritingStreamActivity(t));
1169
- handleStreamUpdate(content, null, '');
1170
- },
1171
- onNode: function onNode(message, currentThreadId) {
1172
- var nodeActivity = resolveHitlNodeStreamActivity(message, t, hitlExecutionContextRef.current, currentThreadId, {
1173
- useResumingFallback: true
1174
- });
1175
- updateStreamActivity(nodeActivity);
1176
- setActiveLoadings(function (prev) {
1177
- return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, currentThreadId, nodeActivity.message));
1178
- });
1179
- },
1180
- onComplete: function onComplete(finalContent, sources, memorySessionId, currentThreadId, attachments, suggestions, agentId) {
1181
- streamSettled = true;
1182
- setIsContinuingStream(false);
1183
- handleStreamFinish(finalContent, sources, memorySessionId, attachments, suggestions, agentId);
1184
- updateStreamActivity(null);
1185
- hitlExecutionContextRef.current = null;
1186
- setActiveLoadings(function (prev) {
1187
- var newLoadings = _objectSpread({}, prev);
1188
- delete newLoadings[currentThreadId];
1189
- return newLoadings;
1190
- });
1191
- },
1192
- onApprovalRequired: function onApprovalRequired(approvalPayload, accumulatedContent, currentThreadId) {
1193
- // New HITL interruption detected after resume (chained actions)
1194
- streamSettled = true;
1195
- setIsContinuingStream(false);
1196
- updateStreamActivity(null);
1197
- hitlExecutionContextRef.current = null;
1198
- setActiveLoadings(function (prev) {
1199
- var newLoadings = _objectSpread({}, prev);
1200
- delete newLoadings[currentThreadId];
1201
- return newLoadings;
1202
- });
1203
- handleApprovalRequired(approvalPayload, accumulatedContent);
1206
+ hitlCtx = {
1207
+ sessionId: sessionId,
1208
+ messageId: streamMessageId,
1209
+ placeholderId: "answer-".concat(streamMessageId, "-streaming")
1210
+ };
1211
+ releaseActiveProcessing = function releaseActiveProcessing() {
1212
+ if (!isActiveSession) return;
1213
+ isProcessingRef.current = false;
1214
+ hitlExecutionContextRef.current = null;
1215
+ };
1216
+ _context4.next = 7;
1217
+ return sessionStreamManager.startContinueStream({
1218
+ sessionId: sessionId,
1219
+ placeholderId: hitlCtx.placeholderId,
1220
+ continueRequest: {
1221
+ threadIds: threadIds,
1222
+ sessionId: approval.session_id,
1223
+ decision: editedActions ? 'edit' : decision,
1224
+ editedActions: editedActions,
1225
+ agentId: (agent === null || agent === void 0 ? void 0 : agent.id) || '',
1226
+ lang: authUser.lang
1204
1227
  },
1205
- onError: function onError() {
1206
- streamSettled = true;
1207
- setIsContinuingStream(false);
1208
- handleStreamError();
1228
+ t: t,
1229
+ hitlExecutionContext: hitlContext,
1230
+ agentId: agent === null || agent === void 0 ? void 0 : agent.id,
1231
+ agentName: agent === null || agent === void 0 ? void 0 : agent.name,
1232
+ callbacks: {
1233
+ onStreamUpdate: function onStreamUpdate(content) {
1234
+ return handleStreamUpdate(hitlCtx, content);
1235
+ },
1236
+ onFinishStream: function onFinishStream(finishPayload) {
1237
+ releaseActiveProcessing();
1238
+ handleStreamFinish(hitlCtx, finishPayload.content, finishPayload.sources, finishPayload.memorySessionId, finishPayload.attachments, finishPayload.suggestions, finishPayload.completedAgentId);
1239
+ },
1240
+ onError: function onError() {
1241
+ releaseActiveProcessing();
1242
+ handleStreamError(hitlCtx);
1243
+ },
1244
+ onApprovalRequired: function onApprovalRequired(approvalPayload, accumulatedContent) {
1245
+ releaseActiveProcessing();
1246
+ handleApprovalRequired(hitlCtx, approvalPayload, accumulatedContent);
1247
+ }
1209
1248
  }
1210
1249
  });
1211
- case 6:
1212
- _context5.next = 8;
1213
- break;
1214
1250
  case 7:
1215
- _context5.prev = 7;
1216
- _t = _context5["catch"](3);
1217
- streamSettled = true;
1218
- setIsContinuingStream(false);
1219
- handleStreamError();
1220
- case 8:
1221
- _context5.prev = 8;
1222
- setIsContinuingStream(false);
1223
- isProcessingRef.current = false;
1224
- // Red de seguridad: si el stream cerró sin evento terminal, el indicador
1225
- // (p. ej. "Escribiendo la respuesta") quedaría trabado. Lo limpiamos aquí.
1226
- if (!streamSettled) {
1227
- updateStreamActivity(null);
1228
- hitlExecutionContextRef.current = null;
1229
- setActiveLoadings(function (prev) {
1230
- if (!(loadingKey in prev)) return prev;
1231
- var newLoadings = _objectSpread({}, prev);
1232
- delete newLoadings[loadingKey];
1233
- return newLoadings;
1234
- });
1251
+ result = _context4.sent;
1252
+ if (!result.started) {
1253
+ releaseActiveProcessing();
1254
+ if (result.reason === 'limit') {
1255
+ document.dispatchEvent(new CustomEvent('snackbar-event', {
1256
+ detail: {
1257
+ show: true,
1258
+ severity: 'info',
1259
+ message: t('chat.tooManyActiveSessions')
1260
+ }
1261
+ }));
1262
+ }
1235
1263
  }
1236
- return _context5.finish(8);
1237
- case 9:
1264
+ case 8:
1238
1265
  case "end":
1239
- return _context5.stop();
1266
+ return _context4.stop();
1240
1267
  }
1241
- }, _callee5, null, [[3, 7, 8, 9]]);
1268
+ }, _callee4);
1242
1269
  }));
1243
- return function (_x17, _x18, _x19) {
1244
- return _ref8.apply(this, arguments);
1270
+ return function (_x15, _x16, _x17) {
1271
+ return _ref9.apply(this, arguments);
1245
1272
  };
1246
- }(), [authUser, agent, addMessage, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired, updateStreamActivity, t]);
1247
- var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
1248
- var _userInitialMessage$m, _userInitialMessage$a, _ref0, _resolveProjectToRequ, _ctxProject$id, _ctxClient$id, _ctxTask$id, _ctxChipsProject$proj, hasInitialMessage, hasInitialAttachments, hasInitialFaq, hasInitialFua, hasInitialSc, history, _contextRef$current2, ctxChipsProject, ctxProject, ctxClient, ctxTask, projectToRequest;
1249
- return _regeneratorRuntime.wrap(function (_context6) {
1250
- while (1) switch (_context6.prev = _context6.next) {
1273
+ }(), [authUser, agent, commitToSession, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired, t]);
1274
+ var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
1275
+ var _userInitialMessage$m, _userInitialMessage$a, _ref1, _resolveProjectToRequ, _ctxProject$id, _ctxClient$id, _ctxTask$id, _ctxChipsProject$proj, hasInitialMessage, hasInitialAttachments, hasInitialFaq, hasInitialFua, hasInitialSc, history, _contextRef$current2, ctxChipsProject, ctxProject, ctxClient, ctxTask, projectToRequest;
1276
+ return _regeneratorRuntime.wrap(function (_context5) {
1277
+ while (1) switch (_context5.prev = _context5.next) {
1251
1278
  case 0:
1252
1279
  if (!firstTimeRef.current) {
1253
1280
  firstTimeRef.current = true;
1254
1281
  }
1255
1282
  if (!initialChatId) {
1256
- _context6.next = 2;
1283
+ _context5.next = 2;
1257
1284
  break;
1258
1285
  }
1259
- _context6.next = 1;
1286
+ _context5.next = 1;
1260
1287
  return loadMessages();
1261
1288
  case 1:
1262
- _context6.next = 4;
1289
+ _context5.next = 4;
1263
1290
  break;
1264
1291
  case 2:
1265
1292
  if (!userInitialMessage) {
1266
- _context6.next = 4;
1293
+ _context5.next = 4;
1267
1294
  break;
1268
1295
  }
1269
1296
  hasInitialMessage = Boolean((_userInitialMessage$m = userInitialMessage.message) === null || _userInitialMessage$m === void 0 ? void 0 : _userInitialMessage$m.trim());
@@ -1272,10 +1299,10 @@ export var useChatManager = function useChatManager(_ref3) {
1272
1299
  hasInitialFua = Boolean(userInitialMessage.fuaId);
1273
1300
  hasInitialSc = Boolean(userInitialMessage.scId);
1274
1301
  if (!(!hasInitialMessage && !hasInitialAttachments && !hasInitialFaq && !hasInitialFua && !hasInitialSc)) {
1275
- _context6.next = 3;
1302
+ _context5.next = 3;
1276
1303
  break;
1277
1304
  }
1278
- return _context6.abrupt("return");
1305
+ return _context5.abrupt("return");
1279
1306
  case 3:
1280
1307
  history = messagesRef.current.map(function (historyMessage) {
1281
1308
  return {
@@ -1284,7 +1311,7 @@ export var useChatManager = function useChatManager(_ref3) {
1284
1311
  };
1285
1312
  });
1286
1313
  _contextRef$current2 = contextRef.current, ctxChipsProject = _contextRef$current2.chipsProject, ctxProject = _contextRef$current2.project, ctxClient = _contextRef$current2.client, ctxTask = _contextRef$current2.task;
1287
- projectToRequest = (_ref0 = (_resolveProjectToRequ = resolveProjectToRequest(ctxChipsProject, null)) !== null && _resolveProjectToRequ !== void 0 ? _resolveProjectToRequ : ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.id) !== null && _ref0 !== void 0 ? _ref0 : null;
1314
+ projectToRequest = (_ref1 = (_resolveProjectToRequ = resolveProjectToRequest(ctxChipsProject, null)) !== null && _resolveProjectToRequ !== void 0 ? _resolveProjectToRequ : ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.id) !== null && _ref1 !== void 0 ? _ref1 : null;
1288
1315
  console.info('[useChatManager] PATH=initializeChat/userInitialMessage — contextRef resolution:', {
1289
1316
  projectPropId: (_ctxProject$id = ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.id) !== null && _ctxProject$id !== void 0 ? _ctxProject$id : null,
1290
1317
  clientId: (_ctxClient$id = ctxClient === null || ctxClient === void 0 ? void 0 : ctxClient.id) !== null && _ctxClient$id !== void 0 ? _ctxClient$id : null,
@@ -1293,7 +1320,7 @@ export var useChatManager = function useChatManager(_ref3) {
1293
1320
  projectToRequest: projectToRequest,
1294
1321
  agentType: agent === null || agent === void 0 ? void 0 : agent.type
1295
1322
  });
1296
- askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
1323
+ askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
1297
1324
  message: userInitialMessage.message,
1298
1325
  history: history,
1299
1326
  projectId: projectToRequest,
@@ -1330,6 +1357,8 @@ export var useChatManager = function useChatManager(_ref3) {
1330
1357
  agentEntity: agent.entity
1331
1358
  } : {}), (agent === null || agent === void 0 ? void 0 : agent.type) != null ? {
1332
1359
  agentType: agent.type
1360
+ } : {}), (agent === null || agent === void 0 ? void 0 : agent.emoji) != null ? {
1361
+ agentEmoji: agent.emoji
1333
1362
  } : {}), buildContextMessage(userInitialMessage.mentions) ? {
1334
1363
  contextMessage: buildContextMessage(userInitialMessage.mentions)
1335
1364
  } : {}), userInitialMessage.contextData ? {
@@ -1337,31 +1366,30 @@ export var useChatManager = function useChatManager(_ref3) {
1337
1366
  } : {}));
1338
1367
  case 4:
1339
1368
  case "end":
1340
- return _context6.stop();
1369
+ return _context5.stop();
1341
1370
  }
1342
- }, _callee6);
1371
+ }, _callee5);
1343
1372
  })), [initialChatId, userInitialMessage, project, client, task, authUser, agent, askMaia, isWebSearchActive, isDeepSearchActive]);
1344
1373
  var resetChat = useCallback(function () {
1345
- abortStreamSilentlyRef.current();
1374
+ var previousSessionId = currentChatId.current;
1375
+ sessionStreamingText.clear(previousSessionId);
1346
1376
  currentMessageId.current = uuidv4();
1347
1377
  currentUserQuestion.current = null;
1348
1378
  currentChatId.current = uuidv4();
1379
+ setActiveSessionId(currentChatId.current);
1349
1380
  reportedEvent.current = false;
1350
1381
  streamingPlaceholderIdRef.current = null;
1351
1382
  activeStreamChatIdRef.current = null;
1352
- streamingStore.clear();
1353
- setIsContinuingStream(false);
1354
1383
  }, []);
1355
1384
  var stopGeneration = useCallback(function () {
1356
1385
  stopStreaming();
1357
1386
  isProcessingRef.current = false;
1358
- setIsContinuingStream(false);
1359
1387
  }, [stopStreaming]);
1360
1388
  return {
1361
1389
  messages: messages,
1362
1390
  loadingMessages: loadingMessages,
1363
1391
  isLoadingMoreMessages: isLoadingMoreMessages,
1364
- waitingResponse: waitingResponse || isContinuingStream,
1392
+ waitingResponse: waitingResponse,
1365
1393
  isWriting: isWriting,
1366
1394
  loadingMessage: loadingMessage,
1367
1395
  streamActivity: streamActivity,
@@ -1377,7 +1405,7 @@ export var useChatManager = function useChatManager(_ref3) {
1377
1405
  initializeChat: initializeChat,
1378
1406
  resetChat: resetChat,
1379
1407
  stopGeneration: stopGeneration,
1380
- isDisabled: waitingResponse || isContinuingStream || loadingMessages
1408
+ isDisabled: waitingResponse || loadingMessages
1381
1409
  };
1382
1410
  };
1383
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJmZXRjaEFnZW50RGV0YWlsIiwiYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QiLCJnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkiLCJzdHJlYW1pbmdTdG9yZSIsImlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCIsIm1lcmdlU3RyZWFtQ2h1bmsiLCJub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MiLCJhdHRhY2htZW50c09yT3B0aW9ucyIsIl9vcHRpb25zJGF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiYXR0YWNobWVudHMiLCJvcHRpb25zIiwicmVzb2x2ZVByb2plY3RUb1JlcXVlc3QiLCJjaGlwc1Byb2plY3QiLCJsYXN0TWVzc2FnZVByb2plY3RJZCIsImNoaXBzUHJvamVjdElkIiwicHJvamVjdElkIiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJwYXJzZWQiLCJyZXNvbHZlQ2xpZW50UGF5bG9hZCIsImN0eENsaWVudCIsImN0eFByb2plY3QiLCJfY3R4UHJvamVjdCRjbGllbnQiLCJpZCIsIl9vYmplY3RTcHJlYWQiLCJjbGllbnRJZCIsIm5hbWUiLCJjbGllbnROYW1lIiwiY2xpZW50Iiwibm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMiLCJyYXdBdHRhY2htZW50cyIsImZpbHRlciIsImF0dGFjaG1lbnQiLCJfdHlwZW9mIiwibWFwIiwiaW5kZXgiLCJ0cmltIiwiY29uY2F0IiwidHlwZSIsIm1pbWVUeXBlIiwibWltZV90eXBlIiwiZnVsbEZpbGVOYW1lIiwiaW5jbHVkZXMiLCJudW1lcmljU2l6ZSIsInNpemUiLCJmaWxlIiwiRmlsZSIsInVybF9vcmlnaW5hbCIsInVuZGVmaW5lZCIsInVybF90aHVtYm5haWwiLCJ1cmxfZmlsZSIsInJvbGUiLCJleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MiLCJwZW5kaW5nQWN0aW9ucyIsImlkcyIsInB1c2hJZCIsInJhdyIsIm4iLCJwYXJzZUludCIsIlN0cmluZyIsImlzTmFOIiwicHVzaCIsImZvckVhY2giLCJhY3Rpb24iLCJfcmVjJHRhc2tfaWQiLCJhcmdzIiwidG9vbF9hcmdzIiwicmVjIiwidGFza19pZCIsInRhc2tfaWRzIiwidGFza3MiLCJ0IiwiX3RyZWMkdGFza19pZCIsInRyZWMiLCJleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyIsInRvb2xfbmFtZSIsIl9yZWMkdGFza19pZDIiLCJsaXN0IiwidGlkIiwiZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMiLCJfcmVjJGFnZW50X2lkIiwiZWRpdEFjdGlvbiIsImZpbmQiLCJhIiwidG9Mb3dlckNhc2UiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUiLCJ0b29sTmFtZSIsIl9yZWYiLCJfcmVjJGFnZW50X2lkMiIsImV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCIsInRleHQiLCJsYWJlbGVkIiwibWF0Y2giLCJib2xkIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsInRvU3RyaW5nIiwiZmlyc3ROYW1lIiwiYXZhdGFyIiwicGljdHVyZSIsImN1cnJlbnQiLCJwYXJzZVNTRUxpbmUiLCJsaW5lIiwiX2xpbmUkc3BsaXQiLCJzcGxpdCIsIl9saW5lJHNwbGl0MiIsIl9zbGljZWRUb0FycmF5IiwiZXZlbnRMaW5lIiwiZGF0YUxpbmUiLCJldmVudFR5cGUiLCJyZXBsYWNlIiwiZGF0YVN0ciIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJwYXJzZUVycm9yIiwiY29uc29sZSIsImVycm9yIiwicHJvY2Vzc1NTRVN0cmVhbSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJyZXNwb25zZSIsInRocmVhZElkIiwiY2FsbGJhY2tzIiwiX3Jlc3BvbnNlJGJvZHkiLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaXNTdHJlYW1Db21wbGV0ZSIsImhhbmRsZUxpbmUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJsaW5lcyIsImkiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIl9oYW5kbGVMaW5lIiwiZXZlbnREYXRhIiwib25UaGlua2luZyIsImNvbnRlbnQiLCJvblRva2VuIiwiX2V2ZW50RGF0YSRhZ2VudF9pZCIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsImFnZW50SWRSYXciLCJjb21wbGV0ZWRBZ2VudElkIiwib25Db21wbGV0ZSIsIm1lc3NhZ2UiLCJvbk5vZGUiLCJfZXZlbnREYXRhJGFnZW50X2lkMiIsIl9jYWxsYmFja3Mkb25BcHByb3ZhbCIsIm9uQXBwcm92YWxSZXF1aXJlZCIsImNhbGwiLCJvbkVycm9yIiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJyZWFkIiwic2VudCIsImFicnVwdCIsImRlY29kZSIsInN0cmVhbSIsInBvcCIsImxlbmd0aCIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwidXNlQ2hhdE1hbmFnZXIiLCJfcmVmMyIsImluaXRpYWxDaGF0SWQiLCJjaGF0SWQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJfcmVmMyRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJ0YXNrIiwic2V0VGFzayIsImFnZW50IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJfY2hpcHNQcm9qZWN0JHByb2plY3QiLCJfY2hpcHNQcm9qZWN0JHByb2plY3QyIiwiX3Byb2plY3QkaWQiLCJfY2xpZW50JGlkIiwiX3Rhc2skaWQiLCJpbmZvIiwiY2hpcHNQcm9qZWN0TmFtZSIsInByb2plY3ROYW1lIiwicHJvamVjdFByb3BJZCIsInRhc2tJZCIsImN1cnJlbnRNZXNzYWdlSWQiLCJjdXJyZW50VXNlclF1ZXN0aW9uIiwiY3VycmVudENoYXRJZCIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImxhc3RNYW51YWxBcHByb3ZhbFJlZiIsImhpdGxFeGVjdXRpb25Db250ZXh0UmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwic3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiIsImFjdGl2ZVN0cmVhbUNoYXRJZFJlZiIsImFib3J0U3RyZWFtU2lsZW50bHlSZWYiLCJjbGVhclN0cmVhbVVpUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzQ29udGludWluZ1N0cmVhbSIsInNldElzQ29udGludWluZ1N0cmVhbSIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiY29udGV4dFJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImNsZWFyIiwiaGFuZGxlU3RyZWFtRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJlcnJvclJhd01lc3NhZ2UiLCJfZXJyb3JSYXdNZXNzYWdlJG1hdGMiLCJfZXJyb3JSYXdNZXNzYWdlJG1hdGMyIiwidGVtcE1lc3NhZ2VJZCIsInVzZWQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwiQVNTSVNUQU5UIiwiaGFuZGxlU3RyZWFtVXBkYXRlIiwic3RhcnQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjQiLCJfY2FsbGVlMiIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsIl93aW5kb3ckdGFza1BhbmVsIiwiX2NyZWF0ZUFnZW50Rm9sbG93VXAiLCJfZWRpdEFnZW50Rm9sbG93VXAiLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsIlRBU0tfQ1JFQVRJT05fVE9PTFMiLCJUQVNLX0VESVRfVE9PTFMiLCJUQVNLX0RFTEVURV9UT09MUyIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImNvbmZpZ3VyZWRBZ2VudElkIiwid2FzRWRpdEFnZW50QXBwcm92ZWQiLCJlZGl0QWdlbnRGb2xsb3dVcCIsImZyb21TdHJlYW0iLCJmcm9tQXJncyIsInJlc29sdmVkQWdlbnRJZCIsInRhc2tJZHNGcm9tVXJscyIsInRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwiLCJ0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jRGFzaGJvYXJkIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiaXNPblByb2plY3RSb3V0ZSIsIl93aW5kb3ckbmV3UHJvamVjdERhcyIsIl93aW5kb3ckbmV3UHJvamVjdERhczIiLCJfd2luZG93JG5ld1Byb2plY3REYXMzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNCIsIl93aW5kb3ckbmV3UHJvamVjdERhczUiLCJfd2luZG93JG5ld1Byb2plY3REYXM2Iiwib3BlblRhc2tQYW5lbElkIiwibWFudWFsQXBwcm92YWwiLCJtYW51YWxXYXNUYXNrRWRpdCIsIm1hbnVhbFdhc1Rhc2tEZWxldGUiLCJfbWFudWFsQXBwcm92YWwkdG9vbEEiLCJtYW51YWxQc2V1ZG9BY3Rpb24iLCJhZmZlY3RlZFRhc2tJZHMiLCJfd2luZG93JHRhc2tQYW5lbDIiLCJfd2luZG93JHRhc2tQYW5lbDIkcmUiLCJfY29udGV4dDIiLCJSZWdFeHAiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJtYXRjaEFsbCIsIm0iLCJhdCIsImFwcHJvdmFsIiwicGVuZGluZ19hY3Rpb25zIiwic29tZSIsImFwcHJvdmFsU3RhdHVzIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImFpQ2hhdEhpdGxPcHRpb24iLCJhZ2VudF90eXBlIiwiYWN0aW9uX3R5cGUiLCJkZWNpc2lvbiIsIm9wdGlvbiIsImNyZWF0ZWRfYWdlbnRfaWQiLCJ1cmwiLCJtc2ciLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsInRhc2tQYW5lbCIsInRvb2xBcmdzIiwicmVmZXRjaFRhc2siLCJ0aGVuIiwiY2hhdEFnZW50IiwiZXJyIiwiX3g0IiwiX3g1IiwiX3g2IiwiX3g3IiwiX3g4IiwiX3g5IiwiaGFuZGxlU3RyZWFtU3RvcCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlQXBwcm92YWxSZXF1aXJlZCIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdCIsImhpdGxDb250ZXh0IiwibWVzc2FnZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwibWVzc2FnZVRleHQiLCJ0aHJlYWRJZHMiLCJ0aHJlYWRfaWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJfYXBwcm92YWwkcGVuZGluZ19hY3QyIiwiX3JlZjUiLCJfdG9vbF9uYW1lIiwiX3Rvb2xfYXJncyIsImZpcnN0QWN0aW9uIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0cmVhbUFjdGl2aXR5IiwidXBkYXRlU3RyZWFtQWN0aXZpdHkiLCJzdG9wU3RyZWFtaW5nIiwiYWJvcnRTdHJlYW1TaWxlbnRseSIsImN1cnJlbnRQcm9qZWN0Iiwic2VuZE1lc3NhZ2UiLCJfcmVmNiIsIl9jYWxsZWUzIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJlZmZlY3RpdmVNZW50aW9ucyIsImNvbnRleHRNZXNzYWdlIiwicGF5bG9hZEZ1YUlkIiwicGF5bG9hZFNjSWQiLCJwYXlsb2FkQ29udGV4dERhdGEiLCJkaXNwbGF5TWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJzdHJlYW1pbmdQbGFjZWhvbGRlcklkIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiX2NvbnRleHRSZWYkY3VycmVudCRwIiwiaGlzdG9yeSIsIl9jb250ZXh0UmVmJGN1cnJlbnQiLCJjdHhDaGlwc1Byb2plY3QiLCJjdHhUYXNrIiwicHJvamVjdFRvUmVxdWVzdCIsInByb2plY3RzIiwicGF5bG9hZEZhcUlkIiwicGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDMiLCJjb250ZXh0RGF0YSIsInBtQWlUeXBlZFRleHQiLCJVU0VSIiwicHJvamVjdENoYW5nZWQiLCJpbmNvbWVUeXBlIiwiaGlzdG9yeU1lc3NhZ2UiLCJhZ2VudFR5cGUiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwiYWdlbnROYW1lIiwiZmVlSWQiLCJ0YXNrTmFtZSIsImVudGl0eSIsImFnZW50RW50aXR5IiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJjaGFuZ2VQcm9qZWN0IiwiX3Byb2plY3QkaWQyIiwiX2NoaXBzUHJvamVjdCRwcm9qZWN0MyIsIm9wdGlvbklkIiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmNyIsIl9jYWxsZWU0IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsIl9jb250ZXh0NCIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJ3YXNIZWxwZnVsIiwiX3gxNSIsIl94MTYiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjgiLCJfY2FsbGVlNSIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwibG9hZGluZ0tleSIsImluaXRpYWxBY3Rpdml0eSIsImV4aXN0aW5nTWVzc2FnZSIsIm5ld1N0YXR1cyIsInN0cmVhbVNldHRsZWQiLCJfdCIsIl9jb250ZXh0NSIsIl9tJGFwcHJvdmFsIiwiX2RlZmluZVByb3BlcnR5IiwiT3JjaGVzdHJhdG9yIiwiY29udGludWVUaHJlYWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwib2siLCJhY3Rpdml0eSIsInBoYXNlIiwiY3VycmVudFRocmVhZElkIiwibm9kZUFjdGl2aXR5IiwidXNlUmVzdW1pbmdGYWxsYmFjayIsIm5ld0xvYWRpbmdzIiwiYXBwcm92YWxQYXlsb2FkIiwiZmluaXNoIiwiX3gxNyIsIl94MTgiLCJfeDE5IiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNiIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9yZWYwIiwiX3Jlc29sdmVQcm9qZWN0VG9SZXF1IiwiX2N0eFByb2plY3QkaWQiLCJfY3R4Q2xpZW50JGlkIiwiX2N0eFRhc2skaWQiLCJfY3R4Q2hpcHNQcm9qZWN0JHByb2oiLCJoYXNJbml0aWFsTWVzc2FnZSIsImhhc0luaXRpYWxBdHRhY2htZW50cyIsImhhc0luaXRpYWxGYXEiLCJoYXNJbml0aWFsRnVhIiwiaGFzSW5pdGlhbFNjIiwiX2NvbnRleHRSZWYkY3VycmVudDIiLCJfY29udGV4dDYiLCJCb29sZWFuIiwicmVzZXRDaGF0Iiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lc3NhZ2UsIGJ1aWxkQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQgeyBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCwgZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQge1xuICBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlLFxuICBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSxcbiAgdHlwZSBIaXRsRXhlY3V0aW9uQ29udGV4dCxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHN0cmVhbWluZ1N0b3JlIH0gZnJvbSAnLi4vdXNlU3RyZWFtaW5nTWVzc2FnZSdcbmltcG9ydCB7IGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCwgbWVyZ2VTdHJlYW1DaHVuayB9IGZyb20gJy4uLy4uL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuLyoqIGNoaXBzUHJvamVjdCBlcyBsYSBmdWVudGUgZGUgdmVyZGFkIGRlbCBwaW4gdmlzaWJsZTsgc2kgbm8gaGF5IHBpbiwgcmVzdGF1cmFyIGRlc2RlIGhpc3RvcmlhbC4gKi9cbmNvbnN0IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0ID0gKFxuICBjaGlwc1Byb2plY3Q6IHsgcHJvamVjdElkPzogc3RyaW5nIH0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBsYXN0TWVzc2FnZVByb2plY3RJZDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNoaXBzUHJvamVjdElkID0gY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgPyBOdW1iZXIoY2hpcHNQcm9qZWN0LnByb2plY3RJZCkgOiBudWxsXG4gIGlmIChjaGlwc1Byb2plY3RJZCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShjaGlwc1Byb2plY3RJZCkpIHtcbiAgICByZXR1cm4gY2hpcHNQcm9qZWN0SWRcbiAgfVxuICBpZiAobGFzdE1lc3NhZ2VQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgcmVzb2x2ZUNsaWVudFBheWxvYWQgPSAoXG4gIGN0eENsaWVudDogeyBpZD86IG51bWJlcjsgbmFtZT86IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY3R4UHJvamVjdDogUHJvamVjdCB8IG51bGwgfCB1bmRlZmluZWRcbik6IHsgY2xpZW50SWQ/OiBudW1iZXI7IGNsaWVudE5hbWU/OiBzdHJpbmcgfSA9PiB7XG4gIGlmIChjdHhDbGllbnQ/LmlkKSB7XG4gICAgcmV0dXJuIHsgY2xpZW50SWQ6IGN0eENsaWVudC5pZCwgLi4uKGN0eENsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjdHhDbGllbnQubmFtZSB9IDoge30pIH1cbiAgfVxuICBpZiAoY3R4UHJvamVjdD8uY2xpZW50SWQgIT0gbnVsbCkge1xuICAgIHJldHVybiB7IGNsaWVudElkOiBOdW1iZXIoY3R4UHJvamVjdC5jbGllbnRJZCkgfVxuICB9XG4gIGlmIChjdHhQcm9qZWN0Py5jbGllbnQ/LmlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudElkOiBjdHhQcm9qZWN0LmNsaWVudC5pZCxcbiAgICAgIC4uLihjdHhQcm9qZWN0LmNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjdHhQcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSksXG4gICAgfVxuICB9XG4gIHJldHVybiB7fVxufVxuXG5jb25zdCBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyA9IChyYXdBdHRhY2htZW50czogdW5rbm93bik6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3QXR0YWNobWVudHMpKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gcmF3QXR0YWNobWVudHNcbiAgICAuZmlsdGVyKChhdHRhY2htZW50KTogYXR0YWNobWVudCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiAhIWF0dGFjaG1lbnQgJiYgdHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKVxuICAgIC5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQubmFtZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5uYW1lLnRyaW0oKSA/IGF0dGFjaG1lbnQubmFtZS50cmltKCkgOiBgZmlsZS0ke2luZGV4ICsgMX1gXG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGF0dGFjaG1lbnQudHlwZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC50eXBlLnRyaW0oKSA/IGF0dGFjaG1lbnQudHlwZS50cmltKCkgOiAncGRmJ1xuICAgICAgY29uc3QgbWltZVR5cGUgPSB0eXBlb2YgYXR0YWNobWVudC5taW1lX3R5cGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC5taW1lX3R5cGUgOiAnJ1xuICAgICAgY29uc3QgZnVsbEZpbGVOYW1lID0gbmFtZS5pbmNsdWRlcygnLicpID8gbmFtZSA6IGAke25hbWV9LiR7dHlwZX1gXG4gICAgICBjb25zdCBudW1lcmljU2l6ZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50LnNpemUgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBhdHRhY2htZW50LnNpemVcbiAgICAgICAgICA6IE51bWJlci5pc0Zpbml0ZShOdW1iZXIoYXR0YWNobWVudC5zaXplKSlcbiAgICAgICAgICAgID8gTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSlcbiAgICAgICAgICAgIDogMFxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlOiBuZXcgRmlsZShbXSwgZnVsbEZpbGVOYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pLFxuICAgICAgICBpZDpcbiAgICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5pZCA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5pZC50cmltKClcbiAgICAgICAgICAgID8gYXR0YWNobWVudC5pZFxuICAgICAgICAgICAgOiBgYXNzaXN0YW50LWZpbGUtJHtpbmRleH0tJHtmdWxsRmlsZU5hbWV9YCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2l6ZTogbnVtZXJpY1NpemUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVybF9vcmlnaW5hbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmxfdGh1bWJuYWlsOiB0eXBlb2YgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX2ZpbGU6IHR5cGVvZiBhdHRhY2htZW50LnVybF9maWxlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX2ZpbGUgOiB1bmRlZmluZWQsXG4gICAgICAgIHJvbGU6IGF0dGFjaG1lbnQucm9sZSA9PT0gJ2Fzc2lzdGFudCcgPyAnYXNzaXN0YW50JyA6ICd1c2VyJyxcbiAgICAgIH1cbiAgICB9KVxufVxuXG4vKiogRXh0cmFlIHRhc2tfaWRzIGRlIGxvcyB0b29sX2FyZ3MgZGUgcGVuZGluZ19hY3Rpb25zLCBjdWJyaWVuZG8gbGFzIGZvcm1hcyBjb211bmVzOlxuICogIC0gYHsgdGFza19pZCB9YCBvIGB7IGlkIH1gXG4gKiAgLSBgeyB0YXNrX2lkczogW10gfWBcbiAqICAtIGB7IHRhc2tzOiBbeyB0YXNrX2lkfGlkIH0sIC4uLl0gfWBcbiAqICDDmnRpbCBwYXJhIHRvb2xzIGRlIGVkaXQvYXNzaWduL2RlbGV0ZSBjdWFuZG8gbGEgcmVzcHVlc3RhIGRlbCBMTE0gbm8gaW5jbHV5ZSBVUkxzIC90YXNrcy8uLi4vZGV0YWlsLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGlkczogbnVtYmVyW10gPSBbXVxuICBjb25zdCBwdXNoSWQgPSAocmF3OiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHJhdyA9PSBudWxsKSByZXR1cm5cbiAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICB9XG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBwdXNoSWQocmVjLnRhc2tfaWQgPz8gcmVjLmlkKVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrX2lkcykpIHtcbiAgICAgIHJlYy50YXNrX2lkcy5mb3JFYWNoKHB1c2hJZClcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjLnRhc2tzKSkge1xuICAgICAgcmVjLnRhc2tzLmZvckVhY2godCA9PiB7XG4gICAgICAgIGlmICh0ICYmIHR5cGVvZiB0ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh0KSkge1xuICAgICAgICAgIGNvbnN0IHRyZWMgPSB0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgcHVzaElkKHRyZWMudGFza19pZCA/PyB0cmVjLmlkKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG4vKiogdGFza19pZCAvIHRhc2tfaWRzIGVuIHBlbmRpbmdfYWN0aW9ucyBkZSBkZWxldGVfKiAobGEgcmVzcHVlc3RhIHB1ZWRlIG5vIGluY2x1aXIgVVJMcyAvdGFza3Mv4oCmL2RldGFpbCkuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2snKSB7XG4gICAgICBjb25zdCByYXcgPSByZWMudGFza19pZCA/PyByZWMuaWRcbiAgICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFza3NfYmF0Y2gnKSB7XG4gICAgICBjb25zdCBsaXN0ID0gcmVjLnRhc2tfaWRzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICBsaXN0LmZvckVhY2godGlkID0+IHtcbiAgICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHRpZCksIDEwKVxuICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGVkaXRBY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG4gIGlmIChcbiAgICAhZWRpdEFjdGlvbiB8fFxuICAgICFlZGl0QWN0aW9uLnRvb2xfYXJncyB8fFxuICAgIHR5cGVvZiBlZGl0QWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KGVkaXRBY3Rpb24udG9vbF9hcmdzKVxuICApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGVkaXRBY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sIHRvb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgYWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdG9vbE5hbWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi50b29sX2FyZ3MgfHwgdHlwZW9mIGFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLnRvb2xfYXJncykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkID8/IHJlYy5pZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuLyoqIMOabHRpbW8gcmVjdXJzbyBzaSBubyBoYXkgbGlua3MgbmkgdG9vbF9hcmdzIHBhcnNlYWJsZXMgKHAuIGVqLiBcIklEICoqNzU5NzEwNioqXCIpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KHRleHQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3QgbGFiZWxlZCA9IHRleHQubWF0Y2goL1xcYklEXFxzKlxcKlxcKihcXGQrKVxcKlxcKi9pKVxuICBpZiAobGFiZWxlZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChsYWJlbGVkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICBjb25zdCBib2xkID0gdGV4dC5tYXRjaCgvXFwqXFwqKFxcZHs1LH0pXFwqXFwqLylcbiAgaWYgKGJvbGQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQoYm9sZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgcGFyc2VTU0VMaW5lID0gKGxpbmU6IHN0cmluZyk6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IG51bGwgPT4ge1xuICBpZiAoIWxpbmUudHJpbSgpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG4gICAgcmV0dXJuIHsgZXZlbnRUeXBlLCBkYXRhIH1cbiAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NTU0VTdHJlYW0gPSBhc3luYyAoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiB7XG4gICAgb25UaGlua2luZzogKCkgPT4gdm9pZFxuICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkNvbXBsZXRlOiAoXG4gICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZD86IChhcHByb3ZhbDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBpc1N0cmVhbUNvbXBsZXRlID0gZmFsc2VcblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSAndGhpbmtpbmcnKSB7XG4gICAgICBjYWxsYmFja3Mub25UaGlua2luZygpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YgZXZlbnREYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZXZlbnREYXRhLmNvbnRlbnQgOiAnJ1xuICAgICAgYWNjdW11bGF0ZWRDb250ZW50ID0gbWVyZ2VTdHJlYW1DaHVuayhhY2N1bXVsYXRlZENvbnRlbnQsIGNvbnRlbnQpXG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb250ZW50Jykge1xuICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZiBldmVudERhdGEuY29udGVudCA9PT0gJ3N0cmluZycgPyBldmVudERhdGEuY29udGVudCA6ICcnXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkQ29udGVudCwgY29udGVudClcbiAgICAgIGNhbGxiYWNrcy5vblRva2VuKGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgIGlmIChpc0NvbXBsZXRlTGlrZVNzZVBheWxvYWQoZXZlbnREYXRhKSkge1xuICAgICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSBjb250ZW50IHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgICBjb25zdCBzb3VyY2VzID0gZXZlbnREYXRhLnNvdXJjZXMgfHwgbnVsbFxuICAgICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSAoZXZlbnREYXRhLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5hdHRhY2htZW50cykgPyBldmVudERhdGEuYXR0YWNobWVudHMgOiBudWxsXG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdF9yZXBseSlcbiAgICAgICAgICA/IChldmVudERhdGEuc3VnZ2VzdF9yZXBseSBhcyBzdHJpbmdbXSlcbiAgICAgICAgICA6IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3Rpb25zKVxuICAgICAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGNvbnN0IGFnZW50SWRSYXcgPSBldmVudERhdGEuYWdlbnRfaWQgPz8gZXZlbnREYXRhLmFnZW50SWRcbiAgICAgICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9XG4gICAgICAgICAgYWdlbnRJZFJhdyAhPSBudWxsICYmIFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgIT09ICcnID8gU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSA6IG51bGxcbiAgICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoXG4gICAgICAgICAgZmluYWxDb250ZW50LFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgIHRocmVhZElkLFxuICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgIGNvbXBsZXRlZEFnZW50SWRcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhbGxiYWNrcy5vbk5vZGUoZXZlbnREYXRhLm1lc3NhZ2UsIHRocmVhZElkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAoZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSAoZXZlbnREYXRhLnNvdXJjZXMgYXMgdW5rbm93bikgfHwgbnVsbFxuICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLmF0dGFjaG1lbnRzKSA/IGV2ZW50RGF0YS5hdHRhY2htZW50cyA6IG51bGxcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdF9yZXBseSlcbiAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW10pXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IGV2ZW50RGF0YS5hZ2VudF9pZCA/PyBldmVudERhdGEuYWdlbnRJZFxuICAgICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9IGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICBjYWxsYmFja3Mub25Db21wbGV0ZShmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgdGhyZWFkSWQsIGF0dGFjaG1lbnRzLCBzdWdnZXN0aW9ucywgY29tcGxldGVkQWdlbnRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcHJvdmFsX3JlcXVpcmVkJykge1xuICAgICAgY2FsbGJhY2tzLm9uQXBwcm92YWxSZXF1aXJlZD8uKGV2ZW50RGF0YSwgYWNjdW11bGF0ZWRDb250ZW50LCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnREYXRhLmVycm9yLCB0aHJlYWRJZClcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWlzU3RyZWFtQ29tcGxldGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNTdHJlYW1Db21wbGV0ZSA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBoYW5kbGVMaW5lKGxpbmVzW2ldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICB0YXNrLFxuICAgIHNldFRhc2ssXG4gICAgYWdlbnQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgZmV0Y2hQcm9qZWN0cyB9ID0gdXNlUHJvamVjdHMoKVxuICBjb25zdCB7IGN1cnJlbnRVc2VyIH0gPSB1c2VTdGFibGVDYWxsYmFja3MoYXV0aFVzZXIpXG4gIGNvbnN0IHsgZ2V0VGFiVGFza0RlZmF1bHQgfSA9IHVzZVRhYlRhc2tEZWZhdWx0KClcblxuICAvLyBERUJVRzogcmFzdHJlYXIgY3XDoW5kbyBjYW1iaWEgZWwgY29udGV4dG8gZ2xvYmFsIHBhcmEgY29ycmVsYWNpb25hciBjb24gbG9zIGVudsOtb3MgYWwgb3JjaGVzdHJhdG9yXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc29sZS5pbmZvKCdbdXNlQ2hhdE1hbmFnZXJdIGNvbnRleHQgQ0hBTkdFRDonLCB7XG4gICAgICBjaGlwc1Byb2plY3RJZDogY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgPz8gbnVsbCxcbiAgICAgIGNoaXBzUHJvamVjdE5hbWU6IGNoaXBzUHJvamVjdD8ucHJvamVjdE5hbWUgPz8gbnVsbCxcbiAgICAgIHByb2plY3RQcm9wSWQ6IHByb2plY3Q/LmlkID8/IG51bGwsXG4gICAgICBjbGllbnRJZDogY2xpZW50Py5pZCA/PyBudWxsLFxuICAgICAgdGFza0lkOiB0YXNrPy5pZCA/PyBudWxsLFxuICAgIH0pXG4gIH0sIFtjaGlwc1Byb2plY3Q/LnByb2plY3RJZCwgcHJvamVjdD8uaWQsIGNsaWVudD8uaWQsIHRhc2s/LmlkXSlcbiAgY29uc3QgY3VycmVudE1lc3NhZ2VJZCA9IHVzZVJlZih1dWlkdjQoKSlcbiAgY29uc3QgY3VycmVudFVzZXJRdWVzdGlvbiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjdXJyZW50Q2hhdElkID0gdXNlUmVmKGluaXRpYWxDaGF0SWQgfHwgdXVpZHY0KCkpXG4gIGNvbnN0IHJlcG9ydGVkRXZlbnQgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10+KFtdKVxuICAvKipcbiAgICogR3VhcmRhIGluZm8gZGVsIMO6bHRpbW8gYXBwcm92YWwgbWFudWFsIChjdWFuZG8gZWwgdXN1YXJpbyB0aXBlYSBcInNpXCIvXCJub1wiIGVuIGx1Z2FyXG4gICAqIGRlIGNsaWNrZWFyIGVsIGJvdMOzbikuIEVuIG1hbnVhbCBhcHByb3ZhbCwgYGhhbmRsZUFwcHJvdmFsUmVxdWlyZWRgIHJldG9ybmEgZWFybHlcbiAgICogc2luIGFncmVnYXIgdW4gbWVuc2FqZSBjb24gYGFwcHJvdmFsYCwgYXPDrSBxdWUgbGEgbMOzZ2ljYSBkZSByZWZldGNoIGVuIGBvblN0cmVhbUZpbmlzaGBcbiAgICogbm8gbG8gZGV0ZWN0YSB2w61hIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWxgLiBMbyBndWFyZGFtb3MgYWPDoSBwYXJhIGNvbnN1bWlybG8gZGVzcHXDqXMuXG4gICAqL1xuICBjb25zdCBsYXN0TWFudWFsQXBwcm92YWxSZWYgPSB1c2VSZWY8e1xuICAgIHRvb2xOYW1lOiBzdHJpbmdcbiAgICB0b29sQXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIH0gfCBudWxsPihudWxsKVxuICAvKiogQ29udGV4dG8gZGVsIG1lbnNhamUgZGUgYXByb2JhY2nDs24gcHJldmlvIGFsIGVqZWN1dGFyIGNvbnRpbnVlLXRocmVhZC4gKi9cbiAgY29uc3QgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYgPSB1c2VSZWY8SGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsPihudWxsKVxuICBjb25zdCBpc1Byb2Nlc3NpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGZpcnN0VGltZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgLyoqIElkIGRlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmcgYWN0aXZvIChzaSBoYXkpLiAqL1xuICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBDaGF0IGFsIHF1ZSBwZXJ0ZW5lY2UgZWwgc3RyZWFtIGFjdHVhbG1lbnRlIGFjdGl2by4gU2kgY2FtYmlhIGVsIGNoYXRcbiAgICogbWllbnRyYXMgdW4gc3RyZWFtIGVzdMOhIGVuIHZ1ZWxvLCBkZXNjYXJ0YW1vcyBsb3MgdG9rZW5zIHJlc2lkdWFsZXNcbiAgICogcXVlIHB1ZWRhbiBsbGVnYXIgYW50ZXMgZGUgcXVlIGVsIGFib3J0IHNlIGNvbXBsZXRlLlxuICAgKi9cbiAgY29uc3QgYWN0aXZlU3RyZWFtQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIC8qKiBTZXR0ZXIgaW5kaXJlY3RvIHBhcmEgYWJvcnRhciBlbCBzdHJlYW0gYW50ZXMgZGUgcXVlIGVsIGhvb2sgZGVcbiAgICogb3JxdWVzdGFkb3IgZXN0w6kgaW5pY2lhbGl6YWRvIChzZSBsaW5rZWEgbcOhcyBhYmFqbykuICovXG4gIGNvbnN0IGFib3J0U3RyZWFtU2lsZW50bHlSZWYgPSB1c2VSZWY8KCkgPT4gdm9pZD4oKCkgPT4gdW5kZWZpbmVkKVxuICBjb25zdCBjbGVhclN0cmVhbVVpUmVmID0gdXNlUmVmPCgpID0+IHZvaWQ+KCgpID0+IHVuZGVmaW5lZClcbiAgY29uc3QgW2FjdGl2ZUxvYWRpbmdzLCBzZXRBY3RpdmVMb2FkaW5nc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSlcbiAgY29uc3QgW2lzQ29udGludWluZ1N0cmVhbSwgc2V0SXNDb250aW51aW5nU3RyZWFtXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuICAvKiogRXZpdGEgY2xvc3VyZXMgb2Jzb2xldGFzIGN1YW5kbyBlbCBmb290ZXIgY29uc2VydmEgc2VuZE1lc3NhZ2UgZW50cmUgcmVuZGVycy4gKi9cbiAgY29uc3QgY29udGV4dFJlZiA9IHVzZVJlZih7IGNoaXBzUHJvamVjdCwgcHJvamVjdCwgY2xpZW50LCB0YXNrIH0pXG4gIGNvbnRleHRSZWYuY3VycmVudCA9IHsgY2hpcHNQcm9qZWN0LCBwcm9qZWN0LCBjbGllbnQsIHRhc2sgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHsgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBsb2FkTWVzc2FnZXMsIGFkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGhhbmRsZVNjcm9sbCB9ID1cbiAgICB1c2VDaGF0TWVzc2FnZXMoe1xuICAgICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgICAgb25FcnJvcixcbiAgICAgIGFnZW50cyxcbiAgICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIFNpIGhheSB1biBzdHJlYW0gZW4gY3Vyc28sIGFib3J0YXJsbyBzaWxlbmNpb3NhbWVudGUgcGFyYSBxdWUgbG9zXG4gICAgICAvLyB0b2tlbnMgcmVzaWR1YWxlcyBubyBzZSBlc2NyaWJhbiBlbiBlbCBjaGF0IG51ZXZvLlxuICAgICAgYWJvcnRTdHJlYW1TaWxlbnRseVJlZi5jdXJyZW50KClcblxuICAgICAgLy8gTGltcGlhciBjb250ZXh0byBnbG9iYWwgYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICBzZXRUYXNrKG51bGwpXG5cbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG5cbiAgICAgIGxvYWRNZXNzYWdlcygpXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIHNldFRhc2ssIGxvYWRNZXNzYWdlc10pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlPzogc3RyaW5nLCBlcnJvclJhd01lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgICA6IGVycm9yTWVzc2FnZSA9PT0gJ2ludmFsaWRfcmVxdWVzdF9lcnJvcicgJiYgZXJyb3JSYXdNZXNzYWdlPy5pbmNsdWRlcygncHJvbXB0IGlzIHRvbyBsb25nJylcbiAgICAgICAgICAgID8gdCgnY2hhdC5lcnJvclByb21wdFRvb0xvbmcnLCB7IHVzZWQ6IGVycm9yUmF3TWVzc2FnZS5tYXRjaCgvKFxcZCspIHRva2Vucy8pPy5bMV0gPz8gJycgfSlcbiAgICAgICAgICAgIDogdCgnY2hhdC5lcnJvcicpXG5cbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjb250ZW50OiBzdHJpbmcsIHNvdXJjZXM6IGFueSwgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIFNpIGVsIGNoYXQgY2FtYmnDsyBtaWVudHJhcyBlbCBzdHJlYW0gZXN0YWJhIGVuIHZ1ZWxvLCBkZXNjYXJ0YXIgZWxcbiAgICAgIC8vIHRva2VuIHJlc2lkdWFsOiBubyBkZWJlIHBpbnRhcnNlIGVuIGVsIG51ZXZvIGNoYXQuXG4gICAgICBpZiAoYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgIT0gbnVsbCAmJiBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCAhPT0gY3VycmVudENoYXRJZC5jdXJyZW50KSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuXG4gICAgICAvLyBQcmltZXJhIGxsYW1hZGEgZGUgZXN0ZSBzdHJlYW06IGluc2VydGFtb3MgZWwgcGxhY2Vob2xkZXIgZW4gZWxcbiAgICAgIC8vIGFycmF5IGRlIGBtZXNzYWdlc2AgdW5hIMO6bmljYSB2ZXouIExhcyBsbGFtYWRhcyBzdWJzaWd1aWVudGVzIHlhIG5vXG4gICAgICAvLyB0b2NhbiBgbWVzc2FnZXNgOyBlbCB0ZXh0byB2aXZlIGVuIGVsIHN0cmVhbWluZ1N0b3JlIChleHRlcm5vKSwgcG9yXG4gICAgICAvLyBsbyBxdWUgUmVhY3Qgbm8gcmUtcmVuZGVyaXphIGVsIMOhcmJvbCBjb21wbGV0byBlbiBjYWRhIHRva2VuLlxuICAgICAgaWYgKHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCAhPT0gdGVtcE1lc3NhZ2VJZCkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSB0ZW1wTWVzc2FnZUlkXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICAgIHN0cmVhbWluZ1N0b3JlLnN0YXJ0KHRlbXBNZXNzYWdlSWQpXG4gICAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICAgIGlkOiB0ZW1wTWVzc2FnZUlkLFxuICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgc3RyZWFtaW5nU3RvcmUuc2V0VGV4dCh0ZW1wTWVzc2FnZUlkLCBjb250ZW50KVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIHJhd0F0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWZldGNoIGRlbCB0YXNrIHBhbmVsIHNpIGVzdMOhIGFiaWVydG8geSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsy9ib3Jyw7MgZXNhIHRhcmVhLlxuICAgICAgLy8gQ3VicmUgbG9zIGRvcyBmbHVqb3MgZGUgYXBwcm92YWw6XG4gICAgICAvLyAgIDEpIEFwcHJvdmFsIHBvciBib3TDs24g4oaSIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zYCAodsOtYSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKVxuICAgICAgLy8gICAyKSBNYW51YWwgYXBwcm92YWwgKHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIikg4oaSIGBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudGBcbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsIC8vIGNvbnN1bWlyIHVuYSBzb2xhIHZlelxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0VkaXQgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhtYW51YWxBcHByb3ZhbC50b29sTmFtZSlcbiAgICAgIGNvbnN0IG1hbnVhbFdhc1Rhc2tEZWxldGUgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lKVxuXG4gICAgICBpZiAob3BlblRhc2tQYW5lbElkICYmICh3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlIHx8IG1hbnVhbFdhc1Rhc2tFZGl0IHx8IG1hbnVhbFdhc1Rhc2tEZWxldGUpKSB7XG4gICAgICAgIGNvbnN0IG1hbnVhbFBzZXVkb0FjdGlvbjogUGVuZGluZ0FjdGlvbiB8IG51bGwgPSBtYW51YWxBcHByb3ZhbFxuICAgICAgICAgID8gKHsgdG9vbF9uYW1lOiBtYW51YWxBcHByb3ZhbC50b29sTmFtZSwgdG9vbF9hcmdzOiBtYW51YWxBcHByb3ZhbC50b29sQXJncyA/PyB7fSB9IGFzIFBlbmRpbmdBY3Rpb24pXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkVGFza0lkcyA9IFtcbiAgICAgICAgICAuLi5leHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnMpLFxuICAgICAgICAgIC4uLnRhc2tJZHNGcm9tVXJscyxcbiAgICAgICAgICAuLi50YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLFxuICAgICAgICAgIC4uLihtYW51YWxQc2V1ZG9BY3Rpb24gPyBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MoW21hbnVhbFBzZXVkb0FjdGlvbl0pIDogW10pLFxuICAgICAgICBdLm1hcChTdHJpbmcpXG4gICAgICAgIGlmIChhZmZlY3RlZFRhc2tJZHMuaW5jbHVkZXMoU3RyaW5nKG9wZW5UYXNrUGFuZWxJZCkpKSB7XG4gICAgICAgICAgd2luZG93LnRhc2tQYW5lbD8ucmVmZXRjaFRhc2s/LigpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgLi4uKGNyZWF0ZUFnZW50Rm9sbG93VXAgPyB7IGNyZWF0ZUFnZW50Rm9sbG93VXAgfSA6IHt9KSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChjcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoY3JlYXRlQWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIGHDsWFkaXIgZWwgYWdlbnRlIHJlY2nDqW4gY3JlYWRvIGFsIGxpc3RhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoZWRpdEFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGFnZW50ZSBlZGl0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0LCBldmVudCwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2VUZXh0OiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICAgICAgICB0aHJlYWRJZHM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkKSxcbiAgICAgIH1cbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aW9uID0gYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5bMF1cbiAgICAgICAgY29uc3QgdG9vbE5hbWUgPSAoYXBwcm92YWwgYXMgeyB0b29sX25hbWU/OiBzdHJpbmcgfSkudG9vbF9uYW1lID8/IGZpcnN0QWN0aW9uPy50b29sX25hbWUgPz8gJydcbiAgICAgICAgY29uc3QgdG9vbEFyZ3MgPVxuICAgICAgICAgICgoYXBwcm92YWwgYXMgeyB0b29sX2FyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KS50b29sX2FyZ3MgPz9cbiAgICAgICAgICAgIChmaXJzdEFjdGlvbj8udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSkgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIGlmICh0b29sTmFtZSkge1xuICAgICAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0geyB0b29sTmFtZSwgdG9vbEFyZ3MgfVxuICAgICAgICB9XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHksXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5LFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbiAgfSlcblxuICAvLyBNYW50ZW5lbW9zIGVsIHNldHRlciBtw6FzIHJlY2llbnRlIGVuIHVuYSByZWYgcGFyYSBxdWUgcHVlZGEgdXNhcnNlIGRlc2RlXG4gIC8vIGVmZWN0b3MgZGVmaW5pZG9zIGFudGVzIGVuIGVsIGFyY2hpdm8gKGNhbWJpbyBkZSBjaGF0LCByZXNldCwgZXRjLikuXG4gIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCA9IGFib3J0U3RyZWFtU2lsZW50bHlcbiAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50ID0gKCkgPT4ge1xuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgc2V0QWN0aXZlTG9hZGluZ3Moe30pXG4gICAgc2V0SXNDb250aW51aW5nU3RyZWFtKGZhbHNlKVxuICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gIH1cblxuICBjb25zdCBjdXJyZW50UHJvamVjdCA9IHByb2plY3RcblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9ucyxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGF0dGFjaG1lbnRzLCBvcHRpb25zIH0gPSBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MoYXR0YWNobWVudHNPck9wdGlvbnMpXG4gICAgICAvLyBMYXMgbWVudGlvbnMgcHVlZGVuIHZlbmlyIHbDrWEgNXRvIHBhcsOhbWV0cm8gKGNhbGwgcG9zaXRpb25hbCBkZXNkZSBlbCBmb290ZXIpXG4gICAgICAvLyBvIHbDrWEgU2VuZE1lc3NhZ2VPcHRpb25zIChjYWxsIHByb2dyYW3DoXRpY28pLiBFbCBwYXLDoW1ldHJvIGV4cGzDrWNpdG8gZ2FuYS5cbiAgICAgIGNvbnN0IGVmZmVjdGl2ZU1lbnRpb25zID0gbWVudGlvbnMgPz8gb3B0aW9ucy5tZW50aW9uc1xuICAgICAgY29uc3QgY29udGV4dE1lc3NhZ2U6IENvbnRleHRNZXNzYWdlIHwgdW5kZWZpbmVkID0gYnVpbGRDb250ZXh0TWVzc2FnZShlZmZlY3RpdmVNZW50aW9ucylcbiAgICAgIGNvbnN0IHBheWxvYWRGdWFJZCA9IGZ1YUlkID8/IG9wdGlvbnMuZnVhSWRcbiAgICAgIGNvbnN0IHBheWxvYWRTY0lkID0gc2NJZCA/PyBvcHRpb25zLnNjSWRcbiAgICAgIGNvbnN0IHBheWxvYWRDb250ZXh0RGF0YSA9IG9wdGlvbnMuY29udGV4dERhdGFcbiAgICAgIGNvbnN0IGRpc3BsYXlNZXNzYWdlID0gZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheShtZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiBwYXlsb2FkRnVhSWQsXG4gICAgICAgIHNjSWQ6IHBheWxvYWRTY0lkLFxuICAgICAgfSlcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQ/LlttZXNzYWdlc1JlZi5jdXJyZW50Lmxlbmd0aCAtIDFdPy5hZ2VudElkXG5cbiAgICAgIC8vIE5vIGFncmVnYXIgcHJvamVjdElkIGFsIG1lbnNhamUgZGVsIHVzdWFyaW8gLSBzZSBkZXRlcm1pbmFyw6EgZGVzcHXDqXNcbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogYHF1ZXN0aW9uLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2U6IGRpc3BsYXlNZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgICBpZDogc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCxcbiAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiBhZ2VudD8ubmFtZSB8fCAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcblxuICAgICAgbGV0IGZpbmFsTWVzc2FnZSA9IG1lc3NhZ2VcblxuICAgICAgaWYgKG1lc3NhZ2UgPT09IHQoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpKSB7XG4gICAgICAgIGZpbmFsTWVzc2FnZSA9IGBGQVE6ICR7dCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJyl9IC0gVGlwbyBkZSByZW50YWJpbGlkYWQ6ICR7XG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0Q2hhbmdlZD8uaW5jb21lVHlwZSB8fCBjb250ZXh0UmVmLmN1cnJlbnQucHJvamVjdD8uaW5jb21lVHlwZVxuICAgICAgICB9YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlUHJvamVjdElkID0gbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkXG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBsYXN0TWVzc2FnZVByb2plY3RJZClcblxuICAgICAgY29uc29sZS5pbmZvKCdbdXNlQ2hhdE1hbmFnZXJdIHNlbmRNZXNzYWdlIGNvbnRleHQgcmVzb2x1dGlvbjonLCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBjaGlwc1Byb2plY3RJZDogY3R4Q2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgPyBOdW1iZXIoY3R4Q2hpcHNQcm9qZWN0LnByb2plY3RJZCkgOiBudWxsLFxuICAgICAgICBsYXN0TWVzc2FnZVByb2plY3RJZCxcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgY2xpZW50SWQ6IGN0eENsaWVudD8uaWQsXG4gICAgICAgIHRhc2tJZDogY3R4VGFzaz8uaWQsXG4gICAgICAgIHByb2plY3RQcm9wSWQ6IGN0eFByb2plY3Q/LmlkLFxuICAgICAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSlcblxuICAgICAgY29uc3QgcGF5bG9hZEZhcUlkID0gZmFxSWQgPz8gb3B0aW9ucy5mYXFJZFxuICAgICAgY29uc3QgcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID0gYWdlbnRTdWdnZXN0aW9uSWQgPz8gb3B0aW9ucy5hZ2VudFN1Z2dlc3Rpb25JZFxuXG4gICAgICBjb25zdCBwYXlsb2FkRGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZTogZmluYWxNZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGxcbiAgICAgICAgICA/IHsgdGFza0lkOiBOdW1iZXIoY3R4VGFzay5pZCksIC4uLihjdHhUYXNrLm5hbWUgPyB7IHRhc2tOYW1lOiBjdHhUYXNrLm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEZhcUlkID8geyBmYXFJZDogcGF5bG9hZEZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGdWFJZCA/IHsgZnVhSWQ6IHBheWxvYWRGdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZFNjSWQgPyB7IHNjSWQ6IHBheWxvYWRTY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQ29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhOiBwYXlsb2FkQ29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgdGFzayxcbiAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgXVxuICApXG5cbiAgY29uc3QgY2hhbmdlUHJvamVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGlmICghY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSByZXR1cm5cblxuICAgICAgaWYgKG9wdGlvbi5pZCAhPT0gcHJvamVjdD8uaWQpIHtcbiAgICAgICAgc2V0UHJvamVjdChvcHRpb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9qZWN0ICYmIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuXG4gICAgICAgIGNvbnNvbGUuaW5mbygnW3VzZUNoYXRNYW5hZ2VyXSBQQVRIPWNoYW5nZVByb2plY3Qg4oCUIHVzYSBvcHRpb24uaWQgZGlyZWN0byAoTk8gY2hpcHNQcm9qZWN0KTonLCB7XG4gICAgICAgICAgb3B0aW9uSWQ6IG9wdGlvbi5pZCxcbiAgICAgICAgICBwcm9qZWN0UHJvcElkOiBwcm9qZWN0Py5pZCA/PyBudWxsLFxuICAgICAgICAgIGNoaXBzUHJvamVjdElkOiBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCA/PyBudWxsLFxuICAgICAgICAgIGFnZW50VHlwZTogYWdlbnQ/LnR5cGUsXG4gICAgICAgIH0pXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgLi4uKG9wdGlvbj8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihvcHRpb24uZmVlSWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4uKG9wdGlvbj8uY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQ6IE51bWJlcihvcHRpb24uY2xpZW50SWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcm9qZWN0LCBzZXRQcm9qZWN0LCBhc2tNYWlhLCBhdXRoVXNlciwgaXNXZWJTZWFyY2hBY3RpdmUsIGFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT5cbiAgICApID0+IHtcbiAgICAgIGlmICghdGhyZWFkSWRzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gdGhyZWFkX2lkcyBwcm92aWRlZCBmb3IgYXBwcm92YWwgZGVjaXNpb24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQnVzY2FyIGVsIG1lbnNhamUgcXVlIGNvbnRpZW5lIGFsZ3VubyBkZSBlc3RvcyB0aHJlYWRJZHMgZW4gc3VzIHBlbmRpbmdfYWN0aW9uc1xuICAgICAgY29uc3QgbWVzc2FnZVdpdGhBcHByb3ZhbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+XG4gICAgICAgIG0uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICAgICAgKVxuXG4gICAgICBpZiAoIW1lc3NhZ2VXaXRoQXBwcm92YWwgfHwgIW1lc3NhZ2VXaXRoQXBwcm92YWwuYXBwcm92YWwpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2UgZW5jb250csOzIG1lbnNhamUgY29uIGFwcHJvdmFsIHBhcmEgdGhyZWFkX2lkczonLCB0aHJlYWRJZHMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGFwcHJvdmFsIH0gPSBtZXNzYWdlV2l0aEFwcHJvdmFsXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICBjb25zdCBsb2FkaW5nS2V5ID0gdGhyZWFkSWRzWzBdXG5cbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlVGV4dDogbWVzc2FnZVdpdGhBcHByb3ZhbC5tZXNzYWdlLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgfVxuICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG5cbiAgICAgIGNvbnN0IGluaXRpYWxBY3Rpdml0eSA9IHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxDb250ZXh0KVxuXG4gICAgICAvLyBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgaW1tZWRpYXRlbHlcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IG1lc3NhZ2VJZCkge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuXG4gICAgICAvLyBUcmlnZ2VyIHJlLXJlbmRlclxuICAgICAgY29uc3QgZXhpc3RpbmdNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT4gbS5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgaWYgKGV4aXN0aW5nTWVzc2FnZSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgYWRkTWVzc2FnZSh7IC4uLmV4aXN0aW5nTWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9KVxuICAgICAgfVxuXG4gICAgICAvLyBDYWxsIGNvbnRpbnVlLXRocmVhZCBlbmRwb2ludCB3aXRoIEFMTCB0aHJlYWRfaWRzIGluIGEgc2luZ2xlIHJlcXVlc3RcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgc2V0SXNDb250aW51aW5nU3RyZWFtKHRydWUpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICAvLyBBZGQgbG9hZGluZ1xuICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbbG9hZGluZ0tleV06IGluaXRpYWxBY3Rpdml0eS5tZXNzYWdlLFxuICAgICAgfSkpXG4gICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShpbml0aWFsQWN0aXZpdHkpXG5cbiAgICAgIC8vIE1hcmNhIHNpIGVsIHN0cmVhbSBjZXJyw7MgdsOtYSB1biBldmVudG8gdGVybWluYWwgKGNvbXBsZXRlL2FwcHJvdmFsL2Vycm9yKS5cbiAgICAgIC8vIFNpIGVsIGJhY2tlbmQgY2llcnJhIGxhIGNvbmV4acOzbiBzaW4gZW1pdGlybG8sIGxpbXBpYW1vcyBlbCBpbmRpY2Fkb3IgZW4gZWxcbiAgICAgIC8vIGBmaW5hbGx5YCBwYXJhIHF1ZSBubyBxdWVkZSB0cmFiYWRvIGVuIFwiRXNjcmliaWVuZG8gbGEgcmVzcHVlc3RhXCIuXG4gICAgICBsZXQgc3RyZWFtU2V0dGxlZCA9IGZhbHNlXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQoe1xuICAgICAgICAgIHRocmVhZElkcywgLy8gU2VuZCBhbGwgYWN0aW9uIHRocmVhZF9pZHMgYXQgb25jZVxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIHNldElzQ29udGludWluZ1N0cmVhbShmYWxzZSlcbiAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIFNTRSBzdHJlYW1cbiAgICAgICAgYXdhaXQgcHJvY2Vzc1NTRVN0cmVhbShyZXNwb25zZSwgbG9hZGluZ0tleSwge1xuICAgICAgICAgIG9uVGhpbmtpbmc6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSA9IHtcbiAgICAgICAgICAgICAgcGhhc2U6ICd0aGlua2luZycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UoMCwgdCksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShhY3Rpdml0eSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSh0KSlcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZShjb250ZW50LCBudWxsLCAnJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVBY3Rpdml0eSA9IHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5KFxuICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50LFxuICAgICAgICAgICAgICBjdXJyZW50VGhyZWFkSWQsXG4gICAgICAgICAgICAgIHsgdXNlUmVzdW1pbmdGYWxsYmFjazogdHJ1ZSB9XG4gICAgICAgICAgICApXG4gICAgICAgICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShub2RlQWN0aXZpdHkpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50VGhyZWFkSWRdOiBub2RlQWN0aXZpdHkubWVzc2FnZSxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Db21wbGV0ZTogKFxuICAgICAgICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICAgICAgICBzb3VyY2VzOiBhbnksXG4gICAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgICAgICAgYXR0YWNobWVudHM/OiBhbnlbXSB8IG51bGwsXG4gICAgICAgICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgICAgICAgIGFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBzdHJlYW1TZXR0bGVkID0gdHJ1ZVxuICAgICAgICAgICAgc2V0SXNDb250aW51aW5nU3RyZWFtKGZhbHNlKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCBhdHRhY2htZW50cywgc3VnZ2VzdGlvbnMsIGFnZW50SWQpXG4gICAgICAgICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZDogKGFwcHJvdmFsUGF5bG9hZDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIC8vIE5ldyBISVRMIGludGVycnVwdGlvbiBkZXRlY3RlZCBhZnRlciByZXN1bWUgKGNoYWluZWQgYWN0aW9ucylcbiAgICAgICAgICAgIHN0cmVhbVNldHRsZWQgPSB0cnVlXG4gICAgICAgICAgICBzZXRJc0NvbnRpbnVpbmdTdHJlYW0oZmFsc2UpXG4gICAgICAgICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoYXBwcm92YWxQYXlsb2FkIGFzIEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgc3RyZWFtU2V0dGxlZCA9IHRydWVcbiAgICAgICAgICAgIHNldElzQ29udGludWluZ1N0cmVhbShmYWxzZSlcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyZWFtU2V0dGxlZCA9IHRydWVcbiAgICAgICAgc2V0SXNDb250aW51aW5nU3RyZWFtKGZhbHNlKVxuICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBzZXRJc0NvbnRpbnVpbmdTdHJlYW0oZmFsc2UpXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgLy8gUmVkIGRlIHNlZ3VyaWRhZDogc2kgZWwgc3RyZWFtIGNlcnLDsyBzaW4gZXZlbnRvIHRlcm1pbmFsLCBlbCBpbmRpY2Fkb3JcbiAgICAgICAgLy8gKHAuIGVqLiBcIkVzY3JpYmllbmRvIGxhIHJlc3B1ZXN0YVwiKSBxdWVkYXLDrWEgdHJhYmFkby4gTG8gbGltcGlhbW9zIGFxdcOtLlxuICAgICAgICBpZiAoIXN0cmVhbVNldHRsZWQpIHtcbiAgICAgICAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eShudWxsKVxuICAgICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICBpZiAoIShsb2FkaW5nS2V5IGluIHByZXYpKSByZXR1cm4gcHJldlxuICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2xvYWRpbmdLZXldXG4gICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGhhbmRsZVN0cmVhbUVycm9yLFxuICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgICAgaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgICAgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5LFxuICAgICAgdCxcbiAgICBdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZT8udHJpbSgpKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEF0dGFjaG1lbnRzID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGYXEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGdWEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxTYyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQpXG5cbiAgICAgIGlmICghaGFzSW5pdGlhbE1lc3NhZ2UgJiYgIWhhc0luaXRpYWxBdHRhY2htZW50cyAmJiAhaGFzSW5pdGlhbEZhcSAmJiAhaGFzSW5pdGlhbEZ1YSAmJiAhaGFzSW5pdGlhbFNjKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIG51bGwpID8/IGN0eFByb2plY3Q/LmlkID8/IG51bGxcblxuICAgICAgY29uc29sZS5pbmZvKCdbdXNlQ2hhdE1hbmFnZXJdIFBBVEg9aW5pdGlhbGl6ZUNoYXQvdXNlckluaXRpYWxNZXNzYWdlIOKAlCBjb250ZXh0UmVmIHJlc29sdXRpb246Jywge1xuICAgICAgICBwcm9qZWN0UHJvcElkOiBjdHhQcm9qZWN0Py5pZCA/PyBudWxsLFxuICAgICAgICBjbGllbnRJZDogY3R4Q2xpZW50Py5pZCA/PyBudWxsLFxuICAgICAgICB0YXNrSWQ6IGN0eFRhc2s/LmlkID8/IG51bGwsXG4gICAgICAgIGNoaXBzUHJvamVjdElkOiBjdHhDaGlwc1Byb2plY3Q/LnByb2plY3RJZCA/PyBudWxsLFxuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IGN0eFByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oY3R4VGFzaz8uaWQgIT0gbnVsbFxuICAgICAgICAgID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSwgLi4uKGN0eFRhc2submFtZSA/IHsgdGFza05hbWU6IGN0eFRhc2submFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkID8geyBmYXFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiB1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCA/IHsgZnVhSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQgPyB7IHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAuLi4oYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpXG4gICAgICAgICAgPyB7IGNvbnRleHRNZXNzYWdlOiBidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucykgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmNvbnRleHREYXRhID8geyBjb250ZXh0RGF0YTogdXNlckluaXRpYWxNZXNzYWdlLmNvbnRleHREYXRhIH0gOiB7fSksXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW1xuICAgIGluaXRpYWxDaGF0SWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHRhc2ssXG4gICAgYXV0aFVzZXIsXG4gICAgYWdlbnQsXG4gICAgYXNrTWFpYSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gIF0pXG5cbiAgY29uc3QgcmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCgpXG4gICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgc2V0SXNDb250aW51aW5nU3RyZWFtKGZhbHNlKVxuICB9LCBbXSlcblxuICBjb25zdCBzdG9wR2VuZXJhdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdG9wU3RyZWFtaW5nKClcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0SXNDb250aW51aW5nU3RyZWFtKGZhbHNlKVxuICB9LCBbc3RvcFN0cmVhbWluZ10pXG5cbiAgcmV0dXJuIHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZTogd2FpdGluZ1Jlc3BvbnNlIHx8IGlzQ29udGludWluZ1N0cmVhbSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgY3VycmVudFByb2plY3QsXG4gICAgY3VycmVudENoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgIGN1cnJlbnRNZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcblxuICAgIHNlbmRNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgcmVzZXRDaGF0LFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuXG4gICAgaXNEaXNhYmxlZDogd2FpdGluZ1Jlc3BvbnNlIHx8IGlzQ29udGludWluZ1N0cmVhbSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLEVBQUUsSUFBSUMsTUFBTSxRQUFRLE1BQU07QUFDbkMsU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUFTQyxxQkFBcUIsUUFBUSwwQkFBMEI7QUFDaEUsU0FBU0MsSUFBSSxRQUFRLFNBQVM7QUFHOUIsU0FBU0MsT0FBTyxRQUFpQix3QkFBd0I7QUFDekQsU0FBU0MsZ0JBQWdCLFFBQVEsOEJBQThCO0FBQy9ELFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLGFBQWE7QUFDOUMsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUN0QyxTQUFTQyxRQUFRLFFBQVEsNERBQTREO0FBQ3JGLFNBQXVDQyxlQUFlLFFBQXdDLGtCQUFrQjtBQUNoSCxTQUF5Q0MsbUJBQW1CLFFBQVEsNEJBQTRCO0FBQ2hHLFNBQVNDLGtDQUFrQyxRQUFRLHNDQUFzQztBQUd6RixTQUFTQyxXQUFXLFFBQVEsZ0JBQWdCO0FBQzVDLFNBQVNDLGlCQUFpQixRQUFRLHNCQUFzQjtBQUN4RCxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsNkNBQTZDO0FBQzlFLFNBQVNDLHVCQUF1QixFQUFFQyx5QkFBeUIsUUFBUSwyQkFBMkI7QUFFOUYsU0FDRUMseUJBQXlCLEVBQ3pCQyx3QkFBd0IsRUFDeEJDLDZCQUE2QixFQUM3QkMsZ0NBQWdDLFFBRTNCLG9DQUFvQztBQUMzQyxTQUFTQyxjQUFjLFFBQVEsd0JBQXdCO0FBQ3ZELFNBQVNDLHdCQUF3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
1411
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJmZXRjaEFnZW50RGV0YWlsIiwiYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QiLCJnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwidXNlU2Vzc2lvbk1ldGEiLCJzZXNzaW9uU3RyZWFtTWFuYWdlciIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJhY3RpdmVWaWV3Iiwibm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsIm5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiX29wdGlvbnMkYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsIm9wdGlvbnMiLCJyZXNvbHZlUHJvamVjdFRvUmVxdWVzdCIsImNoaXBzUHJvamVjdCIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwiY2hpcHNQcm9qZWN0SWQiLCJwcm9qZWN0SWQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInBhcnNlZCIsInJlc29sdmVDbGllbnRQYXlsb2FkIiwiY3R4Q2xpZW50IiwiY3R4UHJvamVjdCIsIl9jdHhQcm9qZWN0JGNsaWVudCIsImlkIiwiX29iamVjdFNwcmVhZCIsImNsaWVudElkIiwibmFtZSIsImNsaWVudE5hbWUiLCJjbGllbnQiLCJub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyIsInJhd0F0dGFjaG1lbnRzIiwiZmlsdGVyIiwiYXR0YWNobWVudCIsIl90eXBlb2YiLCJtYXAiLCJpbmRleCIsInRyaW0iLCJjb25jYXQiLCJ0eXBlIiwibWltZVR5cGUiLCJtaW1lX3R5cGUiLCJmdWxsRmlsZU5hbWUiLCJpbmNsdWRlcyIsIm51bWVyaWNTaXplIiwic2l6ZSIsImZpbGUiLCJGaWxlIiwidXJsX29yaWdpbmFsIiwidW5kZWZpbmVkIiwidXJsX3RodW1ibmFpbCIsInVybF9maWxlIiwicm9sZSIsImV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwicHVzaElkIiwicmF3IiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiaXNOYU4iLCJwdXNoIiwiZm9yRWFjaCIsImFjdGlvbiIsIl9yZWMkdGFza19pZCIsImFyZ3MiLCJ0b29sX2FyZ3MiLCJyZWMiLCJ0YXNrX2lkIiwidGFza19pZHMiLCJ0YXNrcyIsInQiLCJfdHJlYyR0YXNrX2lkIiwidHJlYyIsImV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkMiIsImxpc3QiLCJ0aWQiLCJleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyIsIl9yZWMkYWdlbnRfaWQiLCJlZGl0QWN0aW9uIiwiZmluZCIsImEiLCJ0b0xvd2VyQ2FzZSIsImFnZW50X2lkIiwiYWdlbnRJZCIsImV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZSIsInRvb2xOYW1lIiwiX3JlZiIsIl9yZWMkYWdlbnRfaWQyIiwiZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0IiwidGV4dCIsImxhYmVsZWQiLCJtYXRjaCIsImJvbGQiLCJ1c2VTdGFibGVDYWxsYmFja3MiLCJhdXRoVXNlciIsImN1cnJlbnRVc2VyIiwidG9TdHJpbmciLCJmaXJzdE5hbWUiLCJhdmF0YXIiLCJwaWN0dXJlIiwiY3VycmVudCIsImZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMiLCJ0aHJlYWRJZHMiLCJhY3RpdmVNZXNzYWdlcyIsImZyb21BY3RpdmVWaWV3IiwibWVzc2FnZSIsIl9tZXNzYWdlJGFwcHJvdmFsIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwidGhyZWFkX2lkIiwic2Vzc2lvbklkIiwic2Vzc2lvbl9pZCIsImdldCIsIl91c2VTZXNzaW9uc1N0b3JlJGdldCIsImdldFN0YXRlIiwibWVzc2FnZXMiLCJzZXNzaW9uRW50cnkiLCJPYmplY3QiLCJlbnRyaWVzIiwiX3JlZjIiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5Iiwic2Vzc2lvbk1lc3NhZ2VzIiwiX21lc3NhZ2UkYXBwcm92YWwyIiwiX3Nlc3Npb25FbnRyeSIsImZvdW5kIiwiX21lc3NhZ2UkYXBwcm92YWwzIiwidXNlQ2hhdE1hbmFnZXIiLCJfcmVmNCIsImluaXRpYWxDaGF0SWQiLCJjaGF0SWQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJvbkVycm9yIiwiX3JlZjQkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInByb2plY3QiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50IiwidGFzayIsInNldFRhc2siLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiX2NoaXBzUHJvamVjdCRwcm9qZWN0IiwiX2NoaXBzUHJvamVjdCRwcm9qZWN0MiIsIl9wcm9qZWN0JGlkIiwiX2NsaWVudCRpZCIsIl90YXNrJGlkIiwiY29uc29sZSIsImluZm8iLCJjaGlwc1Byb2plY3ROYW1lIiwicHJvamVjdE5hbWUiLCJwcm9qZWN0UHJvcElkIiwidGFza0lkIiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwibGFzdE1hbnVhbEFwcHJvdmFsUmVmIiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJpc1Byb2Nlc3NpbmdSZWYiLCJmaXJzdFRpbWVSZWYiLCJzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmIiwiYWN0aXZlU3RyZWFtQ2hhdElkUmVmIiwiY2xlYXJTdHJlYW1VaVJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJhY3RpdmVMb2FkaW5ncyIsInNldEFjdGl2ZUxvYWRpbmdzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJhY3RpdmVTZXNzaW9uSWQiLCJzZXRBY3RpdmVTZXNzaW9uSWQiLCJpc01vdW50ZWRSZWYiLCJsYXN0SGFuZGxlZFRlcm1pbmFsUmVmIiwiaXNXZWJTZWFyY2hBY3RpdmVSZWYiLCJpc0RlZXBTZWFyY2hBY3RpdmVSZWYiLCJjb250ZXh0UmVmIiwiX3VzZUNoYXRNZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY29tbWl0VG9TZXNzaW9uIiwiaXMiLCJkcm9wRnJvbVNlc3Npb24iLCJtZXNzYWdlSWQiLCJjbGVhclNlc3Npb25UYWlsIiwic2V0TWVzc2FnZXMiLCJzZXQiLCJhY3RpdmVTZXNzaW9uTWV0YSIsIl9hY3RpdmVTZXNzaW9uTWV0YSRmaSIsInN0YXR1cyIsImlzVGVybWluYWwiLCJrZXkiLCJmaW5pc2hlZEF0IiwidGFpbCIsImdldE1lc3NhZ2VzIiwiaGFzU3RhbGVQbGFjZWhvbGRlciIsIm1zZyIsImZvcmNlIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIm1hcmtVbnJlYWQiLCJpc0FjdGl2ZSIsImhhbmRsZVN0cmVhbUVycm9yIiwiY3R4IiwiZXJyb3JNZXNzYWdlIiwiZXJyb3JSYXdNZXNzYWdlIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjIiwiX2Vycm9yUmF3TWVzc2FnZSRtYXRjMiIsInBsYWNlaG9sZGVySWQiLCJjbGVhciIsInVzZWQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwiQVNTSVNUQU5UIiwiaGFuZGxlU3RyZWFtVXBkYXRlIiwiY29udGVudCIsInBsYWNlaG9sZGVyRXhpc3RzIiwic3RhcnQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJzdWdnZXN0aW9ucyIsImNvbXBsZXRlZEFnZW50SWQiLCJfcHJldmlvdXNNZXNzYWdlJGFwcHIiLCJfd2luZG93JHRhc2tQYW5lbCIsIl9jcmVhdGVBZ2VudEZvbGxvd1VwIiwiX2VkaXRBZ2VudEZvbGxvd1VwIiwidGVtcE1lc3NhZ2VJZCIsInRhc2tVcmxSZWdleCIsIm1hdGNoZXMiLCJjb250ZW50VG9BZGQiLCJwcmV2aW91c01lc3NhZ2UiLCJoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlIiwiVEFTS19DUkVBVElPTl9UT09MUyIsIlRBU0tfRURJVF9UT09MUyIsIlRBU0tfREVMRVRFX1RPT0xTIiwid2FzVGFza0NyZWF0aW9uIiwid2FzVGFza0VkaXQiLCJ3YXNUYXNrRGVsZXRlIiwid2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCIsIndhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiY29uZmlndXJlZEFnZW50SWQiLCJ3YXNFZGl0QWdlbnRBcHByb3ZlZCIsImVkaXRBZ2VudEZvbGxvd1VwIiwiZnJvbVN0cmVhbSIsImZyb21BcmdzIiwicmVzb2x2ZWRBZ2VudElkIiwidGFza0lkc0Zyb21VcmxzIiwidGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCIsInRhc2tJZHNGcm9tRGVsZXRpb25UZXh0IiwidGFza0lkc0ZvckRhc2hib2FyZCIsInNob3VsZFN5bmNEYXNoYm9hcmQiLCJ0YXNrSWRzIiwidGFiIiwidGFiU2VnbWVudCIsImxhc3RQcm9qZWN0TWVzc2FnZSIsImNvbnRleHRQcm9qZWN0SWRSYXciLCJjb250ZXh0UHJvamVjdElkIiwicGF0aE1hdGNoIiwicm91dGVQcm9qZWN0SWQiLCJpc09uUHJvamVjdFJvdXRlIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMiIsIl93aW5kb3ckbmV3UHJvamVjdERhczMiLCJfd2luZG93JG5ld1Byb2plY3REYXM0IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNSIsIl93aW5kb3ckbmV3UHJvamVjdERhczYiLCJvcGVuVGFza1BhbmVsSWQiLCJtYW51YWxBcHByb3ZhbCIsIm1hbnVhbFdhc1Rhc2tFZGl0IiwibWFudWFsV2FzVGFza0RlbGV0ZSIsIl9tYW51YWxBcHByb3ZhbCR0b29sQSIsIm1hbnVhbFBzZXVkb0FjdGlvbiIsImFmZmVjdGVkVGFza0lkcyIsIl93aW5kb3ckdGFza1BhbmVsMiIsIl93aW5kb3ckdGFza1BhbmVsMiRyZSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwibGVuZ3RoIiwiYWJydXB0IiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXQiLCJhcHByb3ZhbFN0YXR1cyIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJhaUNoYXRIaXRsT3B0aW9uIiwiYWdlbnRfdHlwZSIsImFjdGlvbl90eXBlIiwiZGVjaXNpb24iLCJvcHRpb24iLCJjcmVhdGVkX2FnZW50X2lkIiwic2VudCIsInJlcGxhY2UiLCJ1cmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiY2FsbCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJ0YXNrUGFuZWwiLCJ0b29sQXJncyIsInJlZmV0Y2hUYXNrIiwidGhlbiIsImNoYXRBZ2VudCIsImVyciIsImVycm9yIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2IiwiX3g3IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiX2FwcHJvdmFsJHBlbmRpbmdfYWN0IiwiaGl0bENvbnRleHQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJtZXNzYWdlVGV4dCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdDIiLCJfcmVmNiIsIl90b29sX25hbWUiLCJfdG9vbF9hcmdzIiwiZmlyc3RBY3Rpb24iLCJfdXNlT3JjaGVzdHJhdG9yU3RyZWEiLCJvblN0cmVhbVVwZGF0ZSIsIm9uRmluaXNoU3RyZWFtIiwib25TdG9wIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiYXNrTWFpYSIsIndhaXRpbmdSZXNwb25zZSIsImlzTG9hZGluZyIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwic3RyZWFtQWN0aXZpdHkiLCJ1cGRhdGVTdHJlYW1BY3Rpdml0eSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjciLCJfY2FsbGVlMiIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsIl9tZXNzYWdlc1JlZiRjdXJyZW50Iiwid2lsbFN0YXJ0TmV3U3RyZWFtIiwiX25vcm1hbGl6ZVNlbmRNZXNzYWdlIiwiZWZmZWN0aXZlTWVudGlvbnMiLCJjb250ZXh0TWVzc2FnZSIsInBheWxvYWRGdWFJZCIsInBheWxvYWRTY0lkIiwicGF5bG9hZENvbnRleHREYXRhIiwiZGlzcGxheU1lc3NhZ2UiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwiX2NvbnRleHRSZWYkY3VycmVudCIsImN0eENoaXBzUHJvamVjdCIsImN0eFRhc2siLCJzdHJlYW1pbmdQbGFjZWhvbGRlcklkIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiX2NvbnRleHRSZWYkY3VycmVudCRwIiwiaGlzdG9yeSIsInByb2plY3RUb1JlcXVlc3QiLCJwcm9qZWN0cyIsInBheWxvYWRGYXFJZCIsInBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQyIiwiZ2V0QWN0aXZlQ291bnQiLCJzaG93Iiwic2V2ZXJpdHkiLCJjb250ZXh0RGF0YSIsInBtQWlUeXBlZFRleHQiLCJVU0VSIiwicHJvamVjdENoYW5nZWQiLCJpbmNvbWVUeXBlIiwiaGlzdG9yeU1lc3NhZ2UiLCJhZ2VudFR5cGUiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwiYWdlbnROYW1lIiwiZmVlSWQiLCJ0YXNrTmFtZSIsImVudGl0eSIsImFnZW50RW50aXR5IiwiZW1vamkiLCJhZ2VudEVtb2ppIiwiX3g4IiwiX3g5IiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiY2hhbmdlUHJvamVjdCIsIl9wcm9qZWN0JGlkMiIsIl9jaGlwc1Byb2plY3QkcHJvamVjdDMiLCJvcHRpb25JZCIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjgiLCJfY2FsbGVlMyIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJyZXNwb25zZSIsIl9jb250ZXh0MyIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJ3YXNIZWxwZnVsIiwiX3gxMyIsIl94MTQiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjkiLCJfY2FsbGVlNCIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwiZm91bmRTZXNzaW9uSWQiLCJuZXdTdGF0dXMiLCJpc0FjdGl2ZVNlc3Npb24iLCJzdHJlYW1NZXNzYWdlSWQiLCJoaXRsQ3R4IiwicmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmciLCJyZXN1bHQiLCJfY29udGV4dDQiLCJzdGFydENvbnRpbnVlU3RyZWFtIiwiY29udGludWVSZXF1ZXN0IiwiaGl0bEV4ZWN1dGlvbkNvbnRleHQiLCJjYWxsYmFja3MiLCJmaW5pc2hQYXlsb2FkIiwiYXBwcm92YWxQYXlsb2FkIiwic3RhcnRlZCIsInJlYXNvbiIsIl94MTUiLCJfeDE2IiwiX3gxNyIsImluaXRpYWxpemVDaGF0IiwiX2NhbGxlZTUiLCJfdXNlckluaXRpYWxNZXNzYWdlJG0iLCJfdXNlckluaXRpYWxNZXNzYWdlJGEiLCJfcmVmMSIsIl9yZXNvbHZlUHJvamVjdFRvUmVxdSIsIl9jdHhQcm9qZWN0JGlkIiwiX2N0eENsaWVudCRpZCIsIl9jdHhUYXNrJGlkIiwiX2N0eENoaXBzUHJvamVjdCRwcm9qIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiaGFzSW5pdGlhbEZ1YSIsImhhc0luaXRpYWxTYyIsIl9jb250ZXh0UmVmJGN1cnJlbnQyIiwiX2NvbnRleHQ1IiwiQm9vbGVhbiIsInJlc2V0Q2hhdCIsInByZXZpb3VzU2Vzc2lvbklkIiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lc3NhZ2UsIGJ1aWxkQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQgeyBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCwgZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgeyB0eXBlIEhpdGxFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHNlc3Npb25TdHJlYW1pbmdUZXh0IH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvblN0cmVhbWluZ1RleHQnXG5pbXBvcnQgeyB1c2VTZXNzaW9uc1N0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IHVzZVNlc3Npb25NZXRhIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvdXNlU2Vzc2lvbk1ldGEnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtTWFuYWdlciwgTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1NYW5hZ2VyJ1xuaW1wb3J0IHsgYWN0aXZlVmlldyB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL2FjdGl2ZVZpZXcnXG5pbXBvcnQgeyBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uTm90aWZpY2F0aW9ucydcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1Db250ZXh0IH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtL3VzZU9yY2hlc3RyYXRvclN0cmVhbS5pbnRlcmZhY2UnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuLyoqIGNoaXBzUHJvamVjdCBlcyBsYSBmdWVudGUgZGUgdmVyZGFkIGRlbCBwaW4gdmlzaWJsZTsgc2kgbm8gaGF5IHBpbiwgcmVzdGF1cmFyIGRlc2RlIGhpc3RvcmlhbC4gKi9cbmNvbnN0IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0ID0gKFxuICBjaGlwc1Byb2plY3Q6IHsgcHJvamVjdElkPzogc3RyaW5nIH0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBsYXN0TWVzc2FnZVByb2plY3RJZDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGNoaXBzUHJvamVjdElkID0gY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgPyBOdW1iZXIoY2hpcHNQcm9qZWN0LnByb2plY3RJZCkgOiBudWxsXG4gIGlmIChjaGlwc1Byb2plY3RJZCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShjaGlwc1Byb2plY3RJZCkpIHtcbiAgICByZXR1cm4gY2hpcHNQcm9qZWN0SWRcbiAgfVxuICBpZiAobGFzdE1lc3NhZ2VQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgcmVzb2x2ZUNsaWVudFBheWxvYWQgPSAoXG4gIGN0eENsaWVudDogeyBpZD86IG51bWJlcjsgbmFtZT86IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgY3R4UHJvamVjdDogUHJvamVjdCB8IG51bGwgfCB1bmRlZmluZWRcbik6IHsgY2xpZW50SWQ/OiBudW1iZXI7IGNsaWVudE5hbWU/OiBzdHJpbmcgfSA9PiB7XG4gIGlmIChjdHhDbGllbnQ/LmlkKSB7XG4gICAgcmV0dXJuIHsgY2xpZW50SWQ6IGN0eENsaWVudC5pZCwgLi4uKGN0eENsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjdHhDbGllbnQubmFtZSB9IDoge30pIH1cbiAgfVxuICBpZiAoY3R4UHJvamVjdD8uY2xpZW50SWQgIT0gbnVsbCkge1xuICAgIHJldHVybiB7IGNsaWVudElkOiBOdW1iZXIoY3R4UHJvamVjdC5jbGllbnRJZCkgfVxuICB9XG4gIGlmIChjdHhQcm9qZWN0Py5jbGllbnQ/LmlkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNsaWVudElkOiBjdHhQcm9qZWN0LmNsaWVudC5pZCxcbiAgICAgIC4uLihjdHhQcm9qZWN0LmNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjdHhQcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSksXG4gICAgfVxuICB9XG4gIHJldHVybiB7fVxufVxuXG5jb25zdCBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyA9IChyYXdBdHRhY2htZW50czogdW5rbm93bik6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3QXR0YWNobWVudHMpKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gcmF3QXR0YWNobWVudHNcbiAgICAuZmlsdGVyKChhdHRhY2htZW50KTogYXR0YWNobWVudCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiAhIWF0dGFjaG1lbnQgJiYgdHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKVxuICAgIC5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQubmFtZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5uYW1lLnRyaW0oKSA/IGF0dGFjaG1lbnQubmFtZS50cmltKCkgOiBgZmlsZS0ke2luZGV4ICsgMX1gXG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGF0dGFjaG1lbnQudHlwZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC50eXBlLnRyaW0oKSA/IGF0dGFjaG1lbnQudHlwZS50cmltKCkgOiAncGRmJ1xuICAgICAgY29uc3QgbWltZVR5cGUgPSB0eXBlb2YgYXR0YWNobWVudC5taW1lX3R5cGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC5taW1lX3R5cGUgOiAnJ1xuICAgICAgY29uc3QgZnVsbEZpbGVOYW1lID0gbmFtZS5pbmNsdWRlcygnLicpID8gbmFtZSA6IGAke25hbWV9LiR7dHlwZX1gXG4gICAgICBjb25zdCBudW1lcmljU2l6ZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50LnNpemUgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBhdHRhY2htZW50LnNpemVcbiAgICAgICAgICA6IE51bWJlci5pc0Zpbml0ZShOdW1iZXIoYXR0YWNobWVudC5zaXplKSlcbiAgICAgICAgICAgID8gTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSlcbiAgICAgICAgICAgIDogMFxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlOiBuZXcgRmlsZShbXSwgZnVsbEZpbGVOYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pLFxuICAgICAgICBpZDpcbiAgICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5pZCA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5pZC50cmltKClcbiAgICAgICAgICAgID8gYXR0YWNobWVudC5pZFxuICAgICAgICAgICAgOiBgYXNzaXN0YW50LWZpbGUtJHtpbmRleH0tJHtmdWxsRmlsZU5hbWV9YCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2l6ZTogbnVtZXJpY1NpemUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVybF9vcmlnaW5hbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmxfdGh1bWJuYWlsOiB0eXBlb2YgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX2ZpbGU6IHR5cGVvZiBhdHRhY2htZW50LnVybF9maWxlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX2ZpbGUgOiB1bmRlZmluZWQsXG4gICAgICAgIHJvbGU6IGF0dGFjaG1lbnQucm9sZSA9PT0gJ2Fzc2lzdGFudCcgPyAnYXNzaXN0YW50JyA6ICd1c2VyJyxcbiAgICAgIH1cbiAgICB9KVxufVxuXG4vKiogRXh0cmFlIHRhc2tfaWRzIGRlIGxvcyB0b29sX2FyZ3MgZGUgcGVuZGluZ19hY3Rpb25zLCBjdWJyaWVuZG8gbGFzIGZvcm1hcyBjb211bmVzOlxuICogIC0gYHsgdGFza19pZCB9YCBvIGB7IGlkIH1gXG4gKiAgLSBgeyB0YXNrX2lkczogW10gfWBcbiAqICAtIGB7IHRhc2tzOiBbeyB0YXNrX2lkfGlkIH0sIC4uLl0gfWBcbiAqICDDmnRpbCBwYXJhIHRvb2xzIGRlIGVkaXQvYXNzaWduL2RlbGV0ZSBjdWFuZG8gbGEgcmVzcHVlc3RhIGRlbCBMTE0gbm8gaW5jbHV5ZSBVUkxzIC90YXNrcy8uLi4vZGV0YWlsLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGlkczogbnVtYmVyW10gPSBbXVxuICBjb25zdCBwdXNoSWQgPSAocmF3OiB1bmtub3duKSA9PiB7XG4gICAgaWYgKHJhdyA9PSBudWxsKSByZXR1cm5cbiAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICB9XG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBwdXNoSWQocmVjLnRhc2tfaWQgPz8gcmVjLmlkKVxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlYy50YXNrX2lkcykpIHtcbiAgICAgIHJlYy50YXNrX2lkcy5mb3JFYWNoKHB1c2hJZClcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjLnRhc2tzKSkge1xuICAgICAgcmVjLnRhc2tzLmZvckVhY2godCA9PiB7XG4gICAgICAgIGlmICh0ICYmIHR5cGVvZiB0ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh0KSkge1xuICAgICAgICAgIGNvbnN0IHRyZWMgPSB0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgcHVzaElkKHRyZWMudGFza19pZCA/PyB0cmVjLmlkKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG4vKiogdGFza19pZCAvIHRhc2tfaWRzIGVuIHBlbmRpbmdfYWN0aW9ucyBkZSBkZWxldGVfKiAobGEgcmVzcHVlc3RhIHB1ZWRlIG5vIGluY2x1aXIgVVJMcyAvdGFza3Mv4oCmL2RldGFpbCkuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2snKSB7XG4gICAgICBjb25zdCByYXcgPSByZWMudGFza19pZCA/PyByZWMuaWRcbiAgICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFza3NfYmF0Y2gnKSB7XG4gICAgICBjb25zdCBsaXN0ID0gcmVjLnRhc2tfaWRzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICBsaXN0LmZvckVhY2godGlkID0+IHtcbiAgICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHRpZCksIDEwKVxuICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGVkaXRBY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG4gIGlmIChcbiAgICAhZWRpdEFjdGlvbiB8fFxuICAgICFlZGl0QWN0aW9uLnRvb2xfYXJncyB8fFxuICAgIHR5cGVvZiBlZGl0QWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KGVkaXRBY3Rpb24udG9vbF9hcmdzKVxuICApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGVkaXRBY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sIHRvb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgYWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdG9vbE5hbWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi50b29sX2FyZ3MgfHwgdHlwZW9mIGFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLnRvb2xfYXJncykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkID8/IHJlYy5pZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuLyoqIMOabHRpbW8gcmVjdXJzbyBzaSBubyBoYXkgbGlua3MgbmkgdG9vbF9hcmdzIHBhcnNlYWJsZXMgKHAuIGVqLiBcIklEICoqNzU5NzEwNioqXCIpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KHRleHQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3QgbGFiZWxlZCA9IHRleHQubWF0Y2goL1xcYklEXFxzKlxcKlxcKihcXGQrKVxcKlxcKi9pKVxuICBpZiAobGFiZWxlZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChsYWJlbGVkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICBjb25zdCBib2xkID0gdGV4dC5tYXRjaCgvXFwqXFwqKFxcZHs1LH0pXFwqXFwqLylcbiAgaWYgKGJvbGQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQoYm9sZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyA9IChcbiAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgYWN0aXZlTWVzc2FnZXM6IENoYXRNZXNzYWdlW11cbik6IHsgbWVzc2FnZTogQ2hhdE1lc3NhZ2U7IHNlc3Npb25JZDogc3RyaW5nIH0gfCBudWxsID0+IHtcbiAgY29uc3QgZnJvbUFjdGl2ZVZpZXcgPSBhY3RpdmVNZXNzYWdlcy5maW5kKG1lc3NhZ2UgPT5cbiAgICBtZXNzYWdlLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IHRocmVhZElkcy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgKVxuICBpZiAoZnJvbUFjdGl2ZVZpZXc/LmFwcHJvdmFsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IGZyb21BY3RpdmVWaWV3LFxuICAgICAgc2Vzc2lvbklkOiBmcm9tQWN0aXZlVmlldy5hcHByb3ZhbC5zZXNzaW9uX2lkIHx8IGFjdGl2ZVZpZXcuZ2V0KCkgfHwgJycsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgeyBtZXNzYWdlcyB9ID0gdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpXG4gIGNvbnN0IHNlc3Npb25FbnRyeSA9IE9iamVjdC5lbnRyaWVzKG1lc3NhZ2VzKS5maW5kKChbLCBzZXNzaW9uTWVzc2FnZXNdKSA9PlxuICAgIHNlc3Npb25NZXNzYWdlcy5zb21lKG1lc3NhZ2UgPT5cbiAgICAgIG1lc3NhZ2UuYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICAgIClcbiAgKVxuICBpZiAoc2Vzc2lvbkVudHJ5KSB7XG4gICAgY29uc3QgW3Nlc3Npb25JZCwgc2Vzc2lvbk1lc3NhZ2VzXSA9IHNlc3Npb25FbnRyeVxuICAgIGNvbnN0IGZvdW5kID0gc2Vzc2lvbk1lc3NhZ2VzLmZpbmQobWVzc2FnZSA9PlxuICAgICAgbWVzc2FnZS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgKVxuICAgIGlmIChmb3VuZD8uYXBwcm92YWwpIHtcbiAgICAgIHJldHVybiB7IG1lc3NhZ2U6IGZvdW5kLCBzZXNzaW9uSWQ6IGZvdW5kLmFwcHJvdmFsLnNlc3Npb25faWQgfHwgc2Vzc2lvbklkIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICB0YXNrLFxuICAgIHNldFRhc2ssXG4gICAgYWdlbnQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgZmV0Y2hQcm9qZWN0cyB9ID0gdXNlUHJvamVjdHMoKVxuICBjb25zdCB7IGN1cnJlbnRVc2VyIH0gPSB1c2VTdGFibGVDYWxsYmFja3MoYXV0aFVzZXIpXG4gIGNvbnN0IHsgZ2V0VGFiVGFza0RlZmF1bHQgfSA9IHVzZVRhYlRhc2tEZWZhdWx0KClcblxuICAvLyBERUJVRzogcmFzdHJlYXIgY3XDoW5kbyBjYW1iaWEgZWwgY29udGV4dG8gZ2xvYmFsIHBhcmEgY29ycmVsYWNpb25hciBjb24gbG9zIGVudsOtb3MgYWwgb3JjaGVzdHJhdG9yXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc29sZS5pbmZvKCdbdXNlQ2hhdE1hbmFnZXJdIGNvbnRleHQgQ0hBTkdFRDonLCB7XG4gICAgICBjaGlwc1Byb2plY3RJZDogY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgPz8gbnVsbCxcbiAgICAgIGNoaXBzUHJvamVjdE5hbWU6IGNoaXBzUHJvamVjdD8ucHJvamVjdE5hbWUgPz8gbnVsbCxcbiAgICAgIHByb2plY3RQcm9wSWQ6IHByb2plY3Q/LmlkID8/IG51bGwsXG4gICAgICBjbGllbnRJZDogY2xpZW50Py5pZCA/PyBudWxsLFxuICAgICAgdGFza0lkOiB0YXNrPy5pZCA/PyBudWxsLFxuICAgIH0pXG4gIH0sIFtjaGlwc1Byb2plY3Q/LnByb2plY3RJZCwgcHJvamVjdD8uaWQsIGNsaWVudD8uaWQsIHRhc2s/LmlkXSlcbiAgY29uc3QgY3VycmVudE1lc3NhZ2VJZCA9IHVzZVJlZih1dWlkdjQoKSlcbiAgY29uc3QgY3VycmVudFVzZXJRdWVzdGlvbiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjdXJyZW50Q2hhdElkID0gdXNlUmVmKGluaXRpYWxDaGF0SWQgfHwgdXVpZHY0KCkpXG4gIGNvbnN0IHJlcG9ydGVkRXZlbnQgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10+KFtdKVxuICAvKipcbiAgICogR3VhcmRhIGluZm8gZGVsIMO6bHRpbW8gYXBwcm92YWwgbWFudWFsIChjdWFuZG8gZWwgdXN1YXJpbyB0aXBlYSBcInNpXCIvXCJub1wiIGVuIGx1Z2FyXG4gICAqIGRlIGNsaWNrZWFyIGVsIGJvdMOzbikuIEVuIG1hbnVhbCBhcHByb3ZhbCwgYGhhbmRsZUFwcHJvdmFsUmVxdWlyZWRgIHJldG9ybmEgZWFybHlcbiAgICogc2luIGFncmVnYXIgdW4gbWVuc2FqZSBjb24gYGFwcHJvdmFsYCwgYXPDrSBxdWUgbGEgbMOzZ2ljYSBkZSByZWZldGNoIGVuIGBvblN0cmVhbUZpbmlzaGBcbiAgICogbm8gbG8gZGV0ZWN0YSB2w61hIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWxgLiBMbyBndWFyZGFtb3MgYWPDoSBwYXJhIGNvbnN1bWlybG8gZGVzcHXDqXMuXG4gICAqL1xuICBjb25zdCBsYXN0TWFudWFsQXBwcm92YWxSZWYgPSB1c2VSZWY8e1xuICAgIHRvb2xOYW1lOiBzdHJpbmdcbiAgICB0b29sQXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIH0gfCBudWxsPihudWxsKVxuICAvKiogQ29udGV4dG8gZGVsIG1lbnNhamUgZGUgYXByb2JhY2nDs24gcHJldmlvIGFsIGVqZWN1dGFyIGNvbnRpbnVlLXRocmVhZC4gKi9cbiAgY29uc3QgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYgPSB1c2VSZWY8SGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsPihudWxsKVxuICBjb25zdCBpc1Byb2Nlc3NpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGZpcnN0VGltZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgLyoqIElkIGRlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmcgYWN0aXZvIChzaSBoYXkpLiAqL1xuICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBDaGF0IGFsIHF1ZSBwZXJ0ZW5lY2UgZWwgc3RyZWFtIGFjdHVhbG1lbnRlIGFjdGl2by4gU2kgY2FtYmlhIGVsIGNoYXRcbiAgICogbWllbnRyYXMgdW4gc3RyZWFtIGVzdMOhIGVuIHZ1ZWxvLCBkZXNjYXJ0YW1vcyBsb3MgdG9rZW5zIHJlc2lkdWFsZXNcbiAgICogcXVlIHB1ZWRhbiBsbGVnYXIgYW50ZXMgZGUgcXVlIGVsIGFib3J0IHNlIGNvbXBsZXRlLlxuICAgKi9cbiAgY29uc3QgYWN0aXZlU3RyZWFtQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNsZWFyU3RyZWFtVWlSZWYgPSB1c2VSZWY8KCkgPT4gdm9pZD4oKCkgPT4gdW5kZWZpbmVkKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuICAvKipcbiAgICogU2VzacOzbiBhY3R1YWxtZW50ZSB2aXNpYmxlLiBTZSBtYW50aWVuZSBlbiBzdGF0ZSAobm8gc29sbyBlbiByZWYpIHBhcmEgcXVlXG4gICAqIGVsIG1vdG9yIGRlIHN0cmVhbWluZyBwdWVkYSBsZWVyIHJlYWN0aXZhbWVudGUgbG9zIGZsYWdzIGRlIEVTVEEgc2VzacOzblxuICAgKiBkZXNkZSBlbCBzdG9yZSwgbWllbnRyYXMgb3RyYXMgc2lndWVuIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgY29uc3QgW2FjdGl2ZVNlc3Npb25JZCwgc2V0QWN0aXZlU2Vzc2lvbklkXSA9IHVzZVN0YXRlPHN0cmluZz4oY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAvKiogVHJ1ZSBtaWVudHJhcyBlc3RhIGluc3RhbmNpYSBlc3TDqSBtb250YWRhIChldml0YSBzZXRTdGF0ZSB0cmFzIGRlc21vbnRhcikuICovXG4gIGNvbnN0IGlzTW91bnRlZFJlZiA9IHVzZVJlZih0cnVlKVxuICAvKiogRXZpdGEgcmVjb25jaWxpYXIgZG9zIHZlY2VzIGVsIG1pc21vIGVzdGFkbyB0ZXJtaW5hbCBkZSB1bmEgc2VzacOzbi4gKi9cbiAgY29uc3QgbGFzdEhhbmRsZWRUZXJtaW5hbFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuICAvKiogRXZpdGEgY2xvc3VyZXMgb2Jzb2xldGFzIGN1YW5kbyBlbCBmb290ZXIgY29uc2VydmEgc2VuZE1lc3NhZ2UgZW50cmUgcmVuZGVycy4gKi9cbiAgY29uc3QgY29udGV4dFJlZiA9IHVzZVJlZih7IGNoaXBzUHJvamVjdCwgcHJvamVjdCwgY2xpZW50LCB0YXNrIH0pXG4gIGNvbnRleHRSZWYuY3VycmVudCA9IHsgY2hpcHNQcm9qZWN0LCBwcm9qZWN0LCBjbGllbnQsIHRhc2sgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHsgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBsb2FkTWVzc2FnZXMsIGFkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGhhbmRsZVNjcm9sbCB9ID1cbiAgICB1c2VDaGF0TWVzc2FnZXMoe1xuICAgICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgICAgb25FcnJvcixcbiAgICAgIGFnZW50cyxcbiAgICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIC8qKlxuICAgKiBFc2NyaWJlIHVuIG1lbnNhamUgZW4gZWwgc3RvcmUgcG9yLXNlc2nDs24geSwgc2kgbGEgc2VzacOzbiBlcyBsYSBhY3RpdmEsXG4gICAqIHRhbWJpw6luIGVuIGxhIHZpc3RhIGxvY2FsLiBQZXJtaXRlIHF1ZSBzZXNpb25lcyBlbiBiYWNrZ3JvdW5kIGFjdW11bGVuIHN1XG4gICAqIHJlc3VsdGFkbyBzaW4gcGlzYXIgZWwgY2hhdCBxdWUgZWwgdXN1YXJpbyBlc3TDoSBtaXJhbmRvLlxuICAgKi9cbiAgY29uc3QgY29tbWl0VG9TZXNzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlc3Npb25JZDogc3RyaW5nLCBtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLmFkZE1lc3NhZ2Uoc2Vzc2lvbklkLCBtZXNzYWdlKVxuICAgICAgaWYgKGlzTW91bnRlZFJlZi5jdXJyZW50ICYmIGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICBhZGRNZXNzYWdlKG1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IGRyb3BGcm9tU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzZXNzaW9uSWQ6IHN0cmluZywgbWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5yZW1vdmVNZXNzYWdlKHNlc3Npb25JZCwgbWVzc2FnZUlkKVxuICAgICAgaWYgKGlzTW91bnRlZFJlZi5jdXJyZW50ICYmIGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICByZW1vdmVNZXNzYWdlKG1lc3NhZ2VJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyZW1vdmVNZXNzYWdlXVxuICApXG5cbiAgLyoqIExpbXBpYSBlbCB0YWlsIGVuIHZ1ZWxvIGRlIHVuYSBzZXNpw7NuICh0cmFzIHRlcm1pbmFyOyBlbCBiYWNrZW5kIHBhc2EgYSBzZXIgZnVlbnRlKS4gKi9cbiAgY29uc3QgY2xlYXJTZXNzaW9uVGFpbCA9IHVzZUNhbGxiYWNrKChzZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5zZXRNZXNzYWdlcyhzZXNzaW9uSWQsIFtdKVxuICB9LCBbXSlcblxuICAvLyBSZWdpc3RyYXIgbGEgc2VzacOzbiB2aXNpYmxlIGVuIGVsIHRyYWNrZXIgZ2xvYmFsIHBhcmEgcXVlIGxvcyBjYWxsYmFja3MgZGVsXG4gIC8vIG1vdG9yIChxdWUgcHVlZGVuIHBlcnRlbmVjZXIgYSB1bmEgaW5zdGFuY2lhIHlhIGRlc21vbnRhZGEpIHNlcGFuIGN1w6FsIGVzIGxhXG4gIC8vIHNlc2nDs24gYWN0aXZhIGFjdHVhbC5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhY3RpdmVWaWV3LnNldChhY3RpdmVTZXNzaW9uSWQpXG4gIH0sIFthY3RpdmVTZXNzaW9uSWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNNb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChhY3RpdmVWaWV3LmlzKGN1cnJlbnRDaGF0SWQuY3VycmVudCkpIHtcbiAgICAgICAgYWN0aXZlVmlldy5zZXQobnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFJlY29uY2lsaWFjacOzbjogc2kgbGEgc2VzacOzbiBhY3RpdmEgdGVybWluYSAoY29tcGxldGUvZXJyb3IvY2FuY2VsbGVkKSBwZXJvIGVsXG4gIC8vIHN0b3JlIHBvci1zZXNpw7NuIHRvZGF2w61hIHRpZW5lIHVuIHBsYWNlaG9sZGVyIGRlIHN0cmVhbWluZywgcmVmcmVzY2Ftb3MgZGVzZGVcbiAgLy8gZWwgYmFja2VuZC4gVXNhbW9zIGVsIHN0b3JlIChubyBtZXNzYWdlc1JlZik6IGhhbmRsZVN0cmVhbUZpbmlzaCBsaW1waWEgZWxcbiAgLy8gcGxhY2Vob2xkZXIgYWjDrSBkZSBmb3JtYSBzw61uY3JvbmE7IG1lc3NhZ2VzUmVmIHB1ZWRlIHF1ZWRhciBzdGFsZSB1biByZW5kZXJcbiAgLy8gcG9ycXVlIHNldFN0YXR1cyAoWnVzdGFuZCkgeSByZW1vdmVNZXNzYWdlIChSZWFjdCkgbm8gYmF0Y2hhbiBqdW50b3MuXG4gIGNvbnN0IGFjdGl2ZVNlc3Npb25NZXRhID0gdXNlU2Vzc2lvbk1ldGEoYWN0aXZlU2Vzc2lvbklkKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IGFjdGl2ZVNlc3Npb25NZXRhPy5zdGF0dXNcbiAgICBpZiAoIXN0YXR1cykgcmV0dXJuXG4gICAgY29uc3QgaXNUZXJtaW5hbCA9IHN0YXR1cyA9PT0gJ2NvbXBsZXRlJyB8fCBzdGF0dXMgPT09ICdlcnJvcicgfHwgc3RhdHVzID09PSAnY2FuY2VsbGVkJ1xuICAgIGlmICghaXNUZXJtaW5hbCkgcmV0dXJuXG4gICAgY29uc3Qga2V5ID0gYCR7YWN0aXZlU2Vzc2lvbklkfToke3N0YXR1c306JHthY3RpdmVTZXNzaW9uTWV0YT8uZmluaXNoZWRBdCA/PyAnJ31gXG4gICAgaWYgKGxhc3RIYW5kbGVkVGVybWluYWxSZWYuY3VycmVudCA9PT0ga2V5KSByZXR1cm5cbiAgICBsYXN0SGFuZGxlZFRlcm1pbmFsUmVmLmN1cnJlbnQgPSBrZXlcblxuICAgIGNvbnN0IHRhaWwgPSB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuZ2V0TWVzc2FnZXMoYWN0aXZlU2Vzc2lvbklkKVxuICAgIGNvbnN0IGhhc1N0YWxlUGxhY2Vob2xkZXIgPSB0YWlsLnNvbWUobXNnID0+IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobXNnLmlkKSlcbiAgICBpZiAoaGFzU3RhbGVQbGFjZWhvbGRlcikge1xuICAgICAgbG9hZE1lc3NhZ2VzKHsgZm9yY2U6IHRydWUgfSlcbiAgICB9XG4gIH0sIFthY3RpdmVTZXNzaW9uTWV0YT8uc3RhdHVzLCBhY3RpdmVTZXNzaW9uTWV0YT8uZmluaXNoZWRBdCwgYWN0aXZlU2Vzc2lvbklkLCBsb2FkTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIE5PIGFib3J0YW1vcyBlbCBzdHJlYW0gYW50ZXJpb3I6IHB1ZWRlIHNlZ3VpciBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZC5cbiAgICAgIC8vIFNvbG8gY2FtYmlhbW9zIGRlIHNlc2nDs24gYWN0aXZhOyBlbCBtb3RvciBydXRlYSBjYWRhIHN0cmVhbSBwb3Igc3VcbiAgICAgIC8vIHNlc3Npb25JZCwgYXPDrSBxdWUgbG9zIHRva2VucyBkZSBsYSBzZXNpw7NuIHByZXZpYSBzaWd1ZW4gYXBsaWPDoW5kb3NlIGFcbiAgICAgIC8vIEVTQSBzZXNpw7NuIChzdG9yZSksIG5vIGEgbGEgbnVldmEuXG5cbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgc2V0VGFzayhudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBzZXRBY3RpdmVTZXNzaW9uSWQoaW5pdGlhbENoYXRJZClcbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5tYXJrVW5yZWFkKGluaXRpYWxDaGF0SWQsIGZhbHNlKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICAvLyBpc1Byb2Nlc3NpbmdSZWYgcmVmbGVqYSBzaSBsYSBzZXNpw7NuIEFDVElWQSBlc3TDoSBvY3VwYWRhLiBTaSBsYSBzZXNpw7NuXG4gICAgICAvLyBhIGxhIHF1ZSBlbnRyYW1vcyBzaWd1ZSBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZCwgcXVlZGEgYmxvcXVlYWRhOyBzaSBubyxcbiAgICAgIC8vIHNlIGhhYmlsaXRhIGVsIGVudsOtbyBhdW5xdWUgb3RyYXMgc2VzaW9uZXMgc2lnYW4gZ2VuZXJhbmRvLlxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShpbml0aWFsQ2hhdElkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIC8vIGxvYWRNZXNzYWdlcyBsbyBkaXNwYXJhIHVzZUNoYXRNZXNzYWdlcyBhbCBjYW1iaWFyIGNoYXRJZCAoY29uIGNhY2hlIGVuIG1lbW9yaWEpLlxuICAgIH1cbiAgfSwgW2luaXRpYWxDaGF0SWQsIHByb2plY3QsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRUYXNrXSlcblxuICBjb25zdCBoYW5kbGVTdHJlYW1FcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGVycm9yTWVzc2FnZT86IHN0cmluZywgZXJyb3JSYXdNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgbWVzc2FnZUlkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgICA6IGVycm9yTWVzc2FnZSA9PT0gJ2ludmFsaWRfcmVxdWVzdF9lcnJvcicgJiYgZXJyb3JSYXdNZXNzYWdlPy5pbmNsdWRlcygncHJvbXB0IGlzIHRvbyBsb25nJylcbiAgICAgICAgICAgID8gdCgnY2hhdC5lcnJvclByb21wdFRvb0xvbmcnLCB7IHVzZWQ6IGVycm9yUmF3TWVzc2FnZS5tYXRjaCgvKFxcZCspIHRva2Vucy8pPy5bMV0gPz8gJycgfSlcbiAgICAgICAgICAgIDogdCgnY2hhdC5lcnJvcicpXG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZXNzYWdlSWR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG5cbiAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuXG4gICAgICAvLyBBc2VndXJhbW9zIGVsIHBsYWNlaG9sZGVyIHVuYSDDum5pY2EgdmV6IHBvciBzdHJlYW0sIHRhbnRvIGVuIGVsIHN0b3JlXG4gICAgICAvLyBkZSBsYSBzZXNpw7NuIGNvbW8gZW4gbGEgdmlzdGEgc2kgZXMgbGEgYWN0aXZhLiBFbCB0ZXh0byBlbiB2aXZvIHZpYWphXG4gICAgICAvLyBwb3Igc2Vzc2lvblN0cmVhbWluZ1RleHQgKGV4dGVybm8pLCBzaW4gcmUtcmVuZGVyIGRlbCDDoXJib2wgY29tcGxldG8uXG4gICAgICBjb25zdCBwbGFjZWhvbGRlckV4aXN0cyA9IHVzZVNlc3Npb25zU3RvcmVcbiAgICAgICAgLmdldFN0YXRlKClcbiAgICAgICAgLmdldE1lc3NhZ2VzKHNlc3Npb25JZClcbiAgICAgICAgLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gcGxhY2Vob2xkZXJJZClcblxuICAgICAgaWYgKCFwbGFjZWhvbGRlckV4aXN0cykge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogcGxhY2Vob2xkZXJJZCxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmVWaWV3LmlzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gcGxhY2Vob2xkZXJJZFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuICAgICAgfVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zZXRUZXh0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGVudClcbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb25dXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBjdHg6IFN0cmVhbUNvbnRleHQsXG4gICAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIHJhd0F0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcblxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IHBsYWNlaG9sZGVySWRcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHRlbXBNZXNzYWdlSWQpXG4gICAgICBjb25zdCBhdHRhY2htZW50cyA9IG5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzKHJhd0F0dGFjaG1lbnRzKVxuXG4gICAgICAvLyBTZXNpw7NuIGVuIGJhY2tncm91bmQ6IGNlcnJhbW9zIGxlYW4uIEVsIGJhY2tlbmQgeWEgcGVyc2lzdGnDsyBsYVxuICAgICAgLy8gcmVzcHVlc3RhLCBhc8OtIHF1ZSBhbCB2b2x2ZXIgYSBsYSBzZXNpw7NuIHNlIGNhcmdhIGRlc2RlIGFow60uIEF2aXNhbW9zXG4gICAgICAvLyBxdWUgdGVybWluw7MgKHVucmVhZCArIGV2ZW50byBwYXJhIHRvYXN0L3NvbmlkbykuXG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogYGFuc3dlci0ke21lbW9yeVNlc3Npb25JZH1gLFxuICAgICAgICAgIG1lc3NhZ2U6IGNvbnRlbnQsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgfSlcbiAgICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdjb21wbGV0ZScpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWZldGNoIGRlbCB0YXNrIHBhbmVsIHNpIGVzdMOhIGFiaWVydG8geSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsy9ib3Jyw7MgZXNhIHRhcmVhLlxuICAgICAgLy8gQ3VicmUgbG9zIGRvcyBmbHVqb3MgZGUgYXBwcm92YWw6XG4gICAgICAvLyAgIDEpIEFwcHJvdmFsIHBvciBib3TDs24g4oaSIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zYCAodsOtYSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKVxuICAgICAgLy8gICAyKSBNYW51YWwgYXBwcm92YWwgKHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIikg4oaSIGBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudGBcbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsIC8vIGNvbnN1bWlyIHVuYSBzb2xhIHZlelxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0VkaXQgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhtYW51YWxBcHByb3ZhbC50b29sTmFtZSlcbiAgICAgIGNvbnN0IG1hbnVhbFdhc1Rhc2tEZWxldGUgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lKVxuXG4gICAgICBpZiAob3BlblRhc2tQYW5lbElkICYmICh3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlIHx8IG1hbnVhbFdhc1Rhc2tFZGl0IHx8IG1hbnVhbFdhc1Rhc2tEZWxldGUpKSB7XG4gICAgICAgIGNvbnN0IG1hbnVhbFBzZXVkb0FjdGlvbjogUGVuZGluZ0FjdGlvbiB8IG51bGwgPSBtYW51YWxBcHByb3ZhbFxuICAgICAgICAgID8gKHsgdG9vbF9uYW1lOiBtYW51YWxBcHByb3ZhbC50b29sTmFtZSwgdG9vbF9hcmdzOiBtYW51YWxBcHByb3ZhbC50b29sQXJncyA/PyB7fSB9IGFzIFBlbmRpbmdBY3Rpb24pXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGNvbnN0IGFmZmVjdGVkVGFza0lkcyA9IFtcbiAgICAgICAgICAuLi5leHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnMpLFxuICAgICAgICAgIC4uLnRhc2tJZHNGcm9tVXJscyxcbiAgICAgICAgICAuLi50YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLFxuICAgICAgICAgIC4uLihtYW51YWxQc2V1ZG9BY3Rpb24gPyBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MoW21hbnVhbFBzZXVkb0FjdGlvbl0pIDogW10pLFxuICAgICAgICBdLm1hcChTdHJpbmcpXG4gICAgICAgIGlmIChhZmZlY3RlZFRhc2tJZHMuaW5jbHVkZXMoU3RyaW5nKG9wZW5UYXNrUGFuZWxJZCkpKSB7XG4gICAgICAgICAgd2luZG93LnRhc2tQYW5lbD8ucmVmZXRjaFRhc2s/LigpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogYGFuc3dlci0ke21lbW9yeVNlc3Npb25JZH1gLFxuICAgICAgICBtZXNzYWdlOiBjb250ZW50VG9BZGQsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBzb3VyY2VzLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMgfHwgW10sXG4gICAgICAgIC4uLihjcmVhdGVBZ2VudEZvbGxvd1VwID8geyBjcmVhdGVBZ2VudEZvbGxvd1VwIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG5cbiAgICAgIGlmIChjcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoY3JlYXRlQWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIGHDsWFkaXIgZWwgYWdlbnRlIHJlY2nDqW4gY3JlYWRvIGFsIGxpc3RhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoZWRpdEFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGFnZW50ZSBlZGl0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCBwcm9qZWN0LCBnZXRUYWJUYXNrRGVmYXVsdCwgZXZlbnQsIGFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtU3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAvLyBFbCBzdG9wIHNpZW1wcmUgYXBsaWNhIGEgbGEgc2VzacOzbiBhY3RpdmEgKGJvdMOzbiBkZWwgaW5wdXQgdmlzaWJsZSkuXG4gICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgdGVtcE1lc3NhZ2VJZClcblxuICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1jYW5jZWxsZWRgLFxuICAgICAgbWVzc2FnZTogdCgnY2hhdC5jYW5jZWxsZWQnKSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiB0cnVlLFxuICAgIH0pXG4gICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgIH0sIDUwMClcbiAgfSwgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCB0XSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGN0eDogU3RyZWFtQ29udGV4dCwgYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2VUZXh0OiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICAgICAgICB0aHJlYWRJZHM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkKSxcbiAgICAgIH1cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gaGl0bENvbnRleHRcbiAgICAgIH1cblxuICAgICAgaWYgKGFwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCkge1xuICAgICAgICBjb25zdCBmaXJzdEFjdGlvbiA9IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8uWzBdXG4gICAgICAgIGNvbnN0IHRvb2xOYW1lID0gKGFwcHJvdmFsIGFzIHsgdG9vbF9uYW1lPzogc3RyaW5nIH0pLnRvb2xfbmFtZSA/PyBmaXJzdEFjdGlvbj8udG9vbF9uYW1lID8/ICcnXG4gICAgICAgIGNvbnN0IHRvb2xBcmdzID1cbiAgICAgICAgICAoKGFwcHJvdmFsIGFzIHsgdG9vbF9hcmdzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSkudG9vbF9hcmdzID8/XG4gICAgICAgICAgICAoZmlyc3RBY3Rpb24/LnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCkpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICBpZiAodG9vbE5hbWUgJiYgaXNBY3RpdmUpIHtcbiAgICAgICAgICBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudCA9IHsgdG9vbE5hbWUsIHRvb2xBcmdzIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGFjY3VtdWxhdGVkQ29udGVudCB8fCAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBhcHByb3ZhbFN0YXR1czogJ3BlbmRpbmcnLFxuICAgICAgfSlcbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQoc2Vzc2lvbklkLCAnYXBwcm92YWxfcmVxdWlyZWQnKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uXVxuICApXG5cbiAgY29uc3Qge1xuICAgIGFza01haWEsXG4gICAgaXNMb2FkaW5nOiB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gIH0gPSB1c2VPcmNoZXN0cmF0b3JTdHJlYW0oe1xuICAgIGFjdGl2ZVNlc3Npb25JZCxcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbiAgfSlcblxuICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQgPSAoKSA9PiB7XG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICBzZXRBY3RpdmVMb2FkaW5ncyh7fSlcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gVG9wZSBkZSBjb25jdXJyZW5jaWE6IHNpIGVzdGEgc2VzacOzbiBubyBlc3TDoSBnZW5lcmFuZG8geSB5YSBoYXlcbiAgICAgIC8vIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgYWN0aXZhcywgYXZpc2Ftb3MgeSBubyBhcnJhbmNhbW9zIG90cmEuXG4gICAgICBjb25zdCB3aWxsU3RhcnROZXdTdHJlYW0gPSAhc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgICAgaWYgKHdpbGxTdGFydE5ld1N0cmVhbSAmJiBzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGF0dGFjaG1lbnRzLCBvcHRpb25zIH0gPSBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MoYXR0YWNobWVudHNPck9wdGlvbnMpXG4gICAgICAvLyBMYXMgbWVudGlvbnMgcHVlZGVuIHZlbmlyIHbDrWEgNXRvIHBhcsOhbWV0cm8gKGNhbGwgcG9zaXRpb25hbCBkZXNkZSBlbCBmb290ZXIpXG4gICAgICAvLyBvIHbDrWEgU2VuZE1lc3NhZ2VPcHRpb25zIChjYWxsIHByb2dyYW3DoXRpY28pLiBFbCBwYXLDoW1ldHJvIGV4cGzDrWNpdG8gZ2FuYS5cbiAgICAgIGNvbnN0IGVmZmVjdGl2ZU1lbnRpb25zID0gbWVudGlvbnMgPz8gb3B0aW9ucy5tZW50aW9uc1xuICAgICAgY29uc3QgY29udGV4dE1lc3NhZ2U6IENvbnRleHRNZXNzYWdlIHwgdW5kZWZpbmVkID0gYnVpbGRDb250ZXh0TWVzc2FnZShlZmZlY3RpdmVNZW50aW9ucylcbiAgICAgIGNvbnN0IHBheWxvYWRGdWFJZCA9IGZ1YUlkID8/IG9wdGlvbnMuZnVhSWRcbiAgICAgIGNvbnN0IHBheWxvYWRTY0lkID0gc2NJZCA/PyBvcHRpb25zLnNjSWRcbiAgICAgIGNvbnN0IHBheWxvYWRDb250ZXh0RGF0YSA9IG9wdGlvbnMuY29udGV4dERhdGFcbiAgICAgIGNvbnN0IGRpc3BsYXlNZXNzYWdlID0gZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheShtZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiBwYXlsb2FkRnVhSWQsXG4gICAgICAgIHNjSWQ6IHBheWxvYWRTY0lkLFxuICAgICAgfSlcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQ/LlttZXNzYWdlc1JlZi5jdXJyZW50Lmxlbmd0aCAtIDFdPy5hZ2VudElkXG5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG5cbiAgICAgIC8vIE5vIGFncmVnYXIgcHJvamVjdElkIGFsIG1lbnNhamUgZGVsIHVzdWFyaW8gLSBzZSBkZXRlcm1pbmFyw6EgZGVzcHXDqXNcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGBxdWVzdGlvbi0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlOiBkaXNwbGF5TWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVySWQpXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBzdHJlYW1pbmdQbGFjZWhvbGRlcklkLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6IGFnZW50Py5uYW1lIHx8ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IGNvbnRleHRSZWYuY3VycmVudC5wcm9qZWN0Py5pbmNvbWVUeXBlXG4gICAgICAgIH1gXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlUHJvamVjdElkID0gbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkXG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBsYXN0TWVzc2FnZVByb2plY3RJZClcblxuICAgICAgY29uc29sZS5pbmZvKCdbdXNlQ2hhdE1hbmFnZXJdIHNlbmRNZXNzYWdlIGNvbnRleHQgcmVzb2x1dGlvbjonLCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBjaGlwc1Byb2plY3RJZDogY3R4Q2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQgPyBOdW1iZXIoY3R4Q2hpcHNQcm9qZWN0LnByb2plY3RJZCkgOiBudWxsLFxuICAgICAgICBsYXN0TWVzc2FnZVByb2plY3RJZCxcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgY2xpZW50SWQ6IGN0eENsaWVudD8uaWQsXG4gICAgICAgIHRhc2tJZDogY3R4VGFzaz8uaWQsXG4gICAgICAgIHByb2plY3RQcm9wSWQ6IGN0eFByb2plY3Q/LmlkLFxuICAgICAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSlcblxuICAgICAgY29uc3QgcGF5bG9hZEZhcUlkID0gZmFxSWQgPz8gb3B0aW9ucy5mYXFJZFxuICAgICAgY29uc3QgcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID0gYWdlbnRTdWdnZXN0aW9uSWQgPz8gb3B0aW9ucy5hZ2VudFN1Z2dlc3Rpb25JZFxuXG4gICAgICBjb25zdCBwYXlsb2FkRGF0YSA9IHtcbiAgICAgICAgbWVzc2FnZTogZmluYWxNZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGxcbiAgICAgICAgICA/IHsgdGFza0lkOiBOdW1iZXIoY3R4VGFzay5pZCksIC4uLihjdHhUYXNrLm5hbWUgPyB7IHRhc2tOYW1lOiBjdHhUYXNrLm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEZhcUlkID8geyBmYXFJZDogcGF5bG9hZEZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGdWFJZCA/IHsgZnVhSWQ6IHBheWxvYWRGdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZFNjSWQgPyB7IHNjSWQ6IHBheWxvYWRTY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IGFnZW50LmVtb2ppIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRDb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHBheWxvYWRDb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbixcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICB0YXNrLFxuICAgICAgY2hpcHNQcm9qZWN0LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgY29uc29sZS5pbmZvKCdbdXNlQ2hhdE1hbmFnZXJdIFBBVEg9Y2hhbmdlUHJvamVjdCDigJQgdXNhIG9wdGlvbi5pZCBkaXJlY3RvIChOTyBjaGlwc1Byb2plY3QpOicsIHtcbiAgICAgICAgICBvcHRpb25JZDogb3B0aW9uLmlkLFxuICAgICAgICAgIHByb2plY3RQcm9wSWQ6IHByb2plY3Q/LmlkID8/IG51bGwsXG4gICAgICAgICAgY2hpcHNQcm9qZWN0SWQ6IGNoaXBzUHJvamVjdD8ucHJvamVjdElkID8/IG51bGwsXG4gICAgICAgICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICAgICAgfSlcblxuICAgICAgICBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsXG4gICAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IG9wdGlvbi5pZCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKG9wdGlvbi5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5jbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZDogTnVtYmVyKG9wdGlvbi5jbGllbnRJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHModGhyZWFkSWRzLCBtZXNzYWdlc1JlZi5jdXJyZW50KVxuICAgICAgaWYgKCFmb3VuZD8ubWVzc2FnZS5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWRzOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgbWVzc2FnZTogbWVzc2FnZVdpdGhBcHByb3ZhbCwgc2Vzc2lvbklkOiBmb3VuZFNlc3Npb25JZCB9ID0gZm91bmRcbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGlmICghYXBwcm92YWwpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGFwcHJvdmFsLnNlc3Npb25faWQgfHwgZm91bmRTZXNzaW9uSWRcbiAgICAgIGlmICghc2Vzc2lvbklkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlc3Npb25faWQgZGlzcG9uaWJsZSBwYXJhIGFwcHJvdmFsOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZVdpdGhBcHByb3ZhbC5pZFxuICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgbWVzc2FnZVRleHQ6IG1lc3NhZ2VXaXRoQXBwcm92YWwubWVzc2FnZSxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMsXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNBY3RpdmVTZXNzaW9uID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG4gICAgICBpZiAoaXNBY3RpdmVTZXNzaW9uKSB7XG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwgeyAuLi5tZXNzYWdlV2l0aEFwcHJvdmFsLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG5cbiAgICAgIGNvbnN0IHN0cmVhbU1lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBpZiAoaXNBY3RpdmVTZXNzaW9uKSB7XG4gICAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHN0cmVhbU1lc3NhZ2VJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsQ3R4OiBTdHJlYW1Db250ZXh0ID0ge1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogc3RyZWFtTWVzc2FnZUlkLFxuICAgICAgICBwbGFjZWhvbGRlcklkOiBgYW5zd2VyLSR7c3RyZWFtTWVzc2FnZUlkfS1zdHJlYW1pbmdgLFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFpc0FjdGl2ZVNlc3Npb24pIHJldHVyblxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlc3Npb25TdHJlYW1NYW5hZ2VyLnN0YXJ0Q29udGludWVTdHJlYW0oe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IGhpdGxDdHgucGxhY2Vob2xkZXJJZCxcbiAgICAgICAgY29udGludWVSZXF1ZXN0OiB7XG4gICAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHQsXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsQ29udGV4dCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lLFxuICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICBvblN0cmVhbVVwZGF0ZTogY29udGVudCA9PiBoYW5kbGVTdHJlYW1VcGRhdGUoaGl0bEN0eCwgY29udGVudCksXG4gICAgICAgICAgb25GaW5pc2hTdHJlYW06IGZpbmlzaFBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKFxuICAgICAgICAgICAgICBoaXRsQ3R4LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmNvbnRlbnQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc291cmNlcyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5tZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuY29tcGxldGVkQWdlbnRJZFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoaGl0bEN0eClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZDogKGFwcHJvdmFsUGF5bG9hZCwgYWNjdW11bGF0ZWRDb250ZW50KSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGhpdGxDdHgsIGFwcHJvdmFsUGF5bG9hZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBpZiAoIXJlc3VsdC5zdGFydGVkKSB7XG4gICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgY29tbWl0VG9TZXNzaW9uLFxuICAgICAgaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgICBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgICBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICAgICAgdCxcbiAgICBdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZT8udHJpbSgpKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEF0dGFjaG1lbnRzID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGYXEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGdWEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxTYyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQpXG5cbiAgICAgIGlmICghaGFzSW5pdGlhbE1lc3NhZ2UgJiYgIWhhc0luaXRpYWxBdHRhY2htZW50cyAmJiAhaGFzSW5pdGlhbEZhcSAmJiAhaGFzSW5pdGlhbEZ1YSAmJiAhaGFzSW5pdGlhbFNjKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIG51bGwpID8/IGN0eFByb2plY3Q/LmlkID8/IG51bGxcblxuICAgICAgY29uc29sZS5pbmZvKCdbdXNlQ2hhdE1hbmFnZXJdIFBBVEg9aW5pdGlhbGl6ZUNoYXQvdXNlckluaXRpYWxNZXNzYWdlIOKAlCBjb250ZXh0UmVmIHJlc29sdXRpb246Jywge1xuICAgICAgICBwcm9qZWN0UHJvcElkOiBjdHhQcm9qZWN0Py5pZCA/PyBudWxsLFxuICAgICAgICBjbGllbnRJZDogY3R4Q2xpZW50Py5pZCA/PyBudWxsLFxuICAgICAgICB0YXNrSWQ6IGN0eFRhc2s/LmlkID8/IG51bGwsXG4gICAgICAgIGNoaXBzUHJvamVjdElkOiBjdHhDaGlwc1Byb2plY3Q/LnByb2plY3RJZCA/PyBudWxsLFxuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IGN0eFByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oY3R4VGFzaz8uaWQgIT0gbnVsbFxuICAgICAgICAgID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSwgLi4uKGN0eFRhc2submFtZSA/IHsgdGFza05hbWU6IGN0eFRhc2submFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkID8geyBmYXFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiB1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCA/IHsgZnVhSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQgPyB7IHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IGFnZW50LmVtb2ppIH0gOiB7fSksXG4gICAgICAgIC4uLihidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucylcbiAgICAgICAgICA/IHsgY29udGV4dE1lc3NhZ2U6IGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuY29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhOiB1c2VySW5pdGlhbE1lc3NhZ2UuY29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBhdXRoVXNlcixcbiAgICBhZ2VudCxcbiAgICBhc2tNYWlhLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgXSlcblxuICBjb25zdCByZXNldENoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgcHJldmlvdXNTZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihwcmV2aW91c1Nlc3Npb25JZClcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLEVBQUUsSUFBSUMsTUFBTSxRQUFRLE1BQU07QUFDbkMsU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUFTQyxxQkFBcUIsUUFBUSwwQkFBMEI7QUFDaEUsU0FBU0MsSUFBSSxRQUFRLFNBQVM7QUFHOUIsU0FBU0MsT0FBTyxRQUFpQix3QkFBd0I7QUFDekQsU0FBU0MsZ0JBQWdCLFFBQVEsOEJBQThCO0FBQy9ELFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLGFBQWE7QUFDOUMsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUN0QyxTQUFTQyxRQUFRLFFBQVEsNERBQTREO0FBQ3JGLFNBQXVDQyxlQUFlLFFBQXdDLGtCQUFrQjtBQUNoSCxTQUF5Q0MsbUJBQW1CLFFBQVEsNEJBQTRCO0FBQ2hHLFNBQVNDLGtDQUFrQyxRQUFRLHNDQUFzQztBQUd6RixTQUFTQyxXQUFXLFFBQVEsZ0JBQWdCO0FBQzVDLFNBQVNDLGlCQUFpQixRQUFRLHNCQUFzQjtBQUN4RCxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsNkNBQTZDO0FBQzlFLFNBQVNDLHVCQUF1QixFQUFFQyx5QkFBeUIsUUFBUSwyQkFBMkI7QUFFOUYsU0FBU0Msb0JBQW9CLFFBQVEsMkNBQTJDO0FBQ2hGLFNBQVNDLGdCQUFnQixRQUFRLHVDQUF1QztBQUN4RSxTQUFTQyxjQUFjLFFBQVEscUNBQXFDO0FBQ3BFLFNBQVNDLG9CQUFvQixFQUFFQyxzQkFBc0IsUUFBUSwyQ0FBMkM7QUFDeEcsU0FBU0MsVUFBVSxRQUFRLGlDQUFpQztBQUM1RCxTQUFTQyxpQ0FBaUMsUUFBUSwyQ0FBMkM7QUFDN0YsU0FBU0MsK0JBQStCLFFBQVEsb0NBQW9DO0FBS3BGLElBQU1DLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlDLG9CQUEyQyxFQUFLO0VBQUEsSUFBQUMsb0JBQUE7RUFDaEYsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNILG9CQUFvQixDQUFDLEVBQUU7SUFDdkMsT0FBTztNQUFFSSxXQUFXLEVBQUVKLG9CQUFvQjtNQUFFSyxPQUFPLEVBQUUsQ0FBQztJQUF3QixDQUFDO0VBQ2pGO0VBRUEsSUFBTUEsT0FBMkIsR0FBR0wsb0JBQW9CLGFBQXBCQSxvQkFBb0IsY0FBcEJBLG9CQUFvQixHQUFJLENBQUMsQ0FBQztFQUM5RCxPQUFPO0lBQUVJLFdBQVcsR0FBQUgsb0JBQUEsR0FBRUksT0FBTyxDQUFDRCxXQUFXLGNBQUFILG9CQUFBLGNBQUFBLG9CQUFBLEdBQUksRUFBRTtJQUFFSSxPQUFPLEVBQVBBO0VBQVEsQ0FBQztBQUM1RCxDQUFDOztBQUVEO0FBQ0EsSUFBTUMsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDM0JDLFlBQXVELEVBQ3ZEQyxvQkFBd0QsRUFDdEM7RUFDbEIsSUFBTUMsY0FBYyxHQUFHRixZQUFZLGFBQVpBLFlBQVksZUFBWkEsWUFBWSxDQUFFRyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0osWUFBWSxDQUFDRyxTQUFTLENBQUMsR0FBRyxJQUFJO0VBQ3RGLElBQUlELGNBQWMsSUFBSSxJQUFJLElBQUlFLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDSCxjQUFjLENBQUMsRUFBRTtJQUM3RCxPQUFPQSxjQUFjO0VBQ3ZCO0VBQ0EsSUFBSUQsb0JBQW9CLElBQUksSUFBSSxFQUFFO0lBQ2hDLElBQU1LLE1BQU0sR0FBR0YsTUFBTSxDQUFDSCxvQkFBb0IsQ0FBQztJQUMzQyxPQUFPRyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBRyxJQUFJO0VBQ2hEO0VBQ0EsT0FBTyxJQUFJO0FBQ2IsQ0FBQztBQUVELElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQ3hCQyxTQUE0RCxFQUM1REMsVUFBc0MsRUFDUztFQUFBLElBQUFDLGtCQUFBO0VBQy9DLElBQUlGLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUVHLEVBQUUsRUFBRTtJQUNqQixPQUFBQyxhQUFBO01BQVNDLFFBQVEsRUFBRUwsU0FBUyxDQUFDRztJQUFFLEdBQU1ILFNBQVMsQ0FBQ00sSUFBSSxHQUFHO01BQUVDLFVBQVUsRUFBRVAsU0FBUyxDQUFDTTtJQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0Y7RUFDQSxJQUFJLENBQUFMLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFSSxRQUFRLEtBQUksSUFBSSxFQUFFO0lBQ2hDLE9BQU87TUFBRUEsUUFBUSxFQUFFVCxNQUFNLENBQUNLLFVBQVUsQ0FBQ0ksUUFBUTtJQUFFLENBQUM7RUFDbEQ7RUFDQSxJQUFJSixVQUFVLGFBQVZBLFVBQVUsZ0JBQUFDLGtCQUFBLEdBQVZELFVBQVUsQ0FBRU8sTUFBTSxjQUFBTixrQkFBQSxlQUFsQkEsa0JBQUEsQ0FBb0JDLEVBQUUsRUFBRTtJQUMxQixPQUFBQyxhQUFBO01BQ0VDLFFBQVEsRUFBRUosVUFBVSxDQUFDTyxNQUFNLENBQUNMO0lBQUUsR0FDMUJGLFVBQVUsQ0FBQ08sTUFBTSxDQUFDRixJQUFJLEdBQUc7TUFBRUMsVUFBVSxFQUFFTixVQUFVLENBQUNPLE1BQU0sQ0FBQ0Y7SUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBRTVFO0VBQ0EsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsSUFBTUcsNkJBQTZCLEdBQUcsU0FBaENBLDZCQUE2QkEsQ0FBSUMsY0FBdUIsRUFBdUI7RUFDbkYsSUFBSSxDQUFDdkIsS0FBSyxDQUFDQyxPQUFPLENBQUNzQixjQUFjLENBQUMsRUFBRTtJQUNsQyxPQUFPLEVBQUU7RUFDWDtFQUVBLE9BQU9BLGNBQWMsQ0FDbEJDLE1BQU0sQ0FBQyxVQUFDQyxVQUFVO0lBQUEsT0FBNEMsQ0FBQyxDQUFDQSxVQUFVLElBQUlDLE9BQUEsQ0FBT0QsVUFBVSxNQUFLLFFBQVE7RUFBQSxFQUFDLENBQzdHRSxHQUFHLENBQUMsVUFBQ0YsVUFBVSxFQUFFRyxLQUFLLEVBQUs7SUFDMUIsSUFBTVQsSUFBSSxHQUNSLE9BQU9NLFVBQVUsQ0FBQ04sSUFBSSxLQUFLLFFBQVEsSUFBSU0sVUFBVSxDQUFDTixJQUFJLENBQUNVLElBQUksQ0FBQyxDQUFDLEdBQUdKLFVBQVUsQ0FBQ04sSUFBSSxDQUFDVSxJQUFJLENBQUMsQ0FBQyxXQUFBQyxNQUFBLENBQVdGLEtBQUssR0FBRyxDQUFDLENBQUU7SUFDOUcsSUFBTUcsSUFBSSxHQUFHLE9BQU9OLFVBQVUsQ0FBQ00sSUFBSSxLQUFLLFFBQVEsSUFBSU4sVUFBVSxDQUFDTSxJQUFJLENBQUNGLElBQUksQ0FBQyxDQUFDLEdBQUdKLFVBQVUsQ0FBQ00sSUFBSSxDQUFDRixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUs7SUFDM0csSUFBTUcsUUFBUSxHQUFHLE9BQU9QLFVBQVUsQ0FBQ1EsU0FBUyxLQUFLLFFBQVEsR0FBR1IsVUFBVSxDQUFDUSxTQUFTLEdBQUcsRUFBRTtJQUNyRixJQUFNQyxZQUFZLEdBQUdmLElBQUksQ0FBQ2dCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBR2hCLElBQUksTUFBQVcsTUFBQSxDQUFNWCxJQUFJLE9BQUFXLE1BQUEsQ0FBSUMsSUFBSSxDQUFFO0lBQ2xFLElBQU1LLFdBQVcsR0FDZixPQUFPWCxVQUFVLENBQUNZLElBQUksS0FBSyxRQUFRLEdBQy9CWixVQUFVLENBQUNZLElBQUksR0FDZjVCLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRCxNQUFNLENBQUNnQixVQUFVLENBQUNZLElBQUksQ0FBQyxDQUFDLEdBQ3RDNUIsTUFBTSxDQUFDZ0IsVUFBVSxDQUFDWSxJQUFJLENBQUMsR0FDdkIsQ0FBQztJQUVULE9BQU87TUFDTEMsSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxFQUFFLEVBQUVMLFlBQVksRUFBRTtRQUFFSCxJQUFJLEVBQUVDO01BQVMsQ0FBQyxDQUFDO01BQ3BEaEIsRUFBRSxFQUNBLE9BQU9TLFVBQVUsQ0FBQ1QsRUFBRSxLQUFLLFFBQVEsSUFBSVMsVUFBVSxDQUFDVCxFQUFFLENBQUNhLElBQUksQ0FBQyxDQUFDLEdBQ3JESixVQUFVLENBQUNULEVBQUUscUJBQUFjLE1BQUEsQ0FDS0YsS0FBSyxPQUFBRSxNQUFBLENBQUlJLFlBQVksQ0FBRTtNQUMvQ2YsSUFBSSxFQUFKQSxJQUFJO01BQ0prQixJQUFJLEVBQUVELFdBQVc7TUFDakJMLElBQUksRUFBSkEsSUFBSTtNQUNKUyxZQUFZLEVBQUUsT0FBT2YsVUFBVSxDQUFDZSxZQUFZLEtBQUssUUFBUSxHQUFHZixVQUFVLENBQUNlLFlBQVksR0FBR0MsU0FBUztNQUMvRkMsYUFBYSxFQUFFLE9BQU9qQixVQUFVLENBQUNpQixhQUFhLEtBQUssUUFBUSxHQUFHakIsVUFBVSxDQUFDaUIsYUFBYSxHQUFHRCxTQUFTO01BQ2xHRSxRQUFRLEVBQUUsT0FBT2xCLFVBQVUsQ0FBQ2tCLFFBQVEsS0FBSyxRQUFRLEdBQUdsQixVQUFVLENBQUNrQixRQUFRLEdBQUdGLFNBQVM7TUFDbkZHLElBQUksRUFBRW5CLFVBQVUsQ0FBQ21CLElBQUksS0FBSyxXQUFXLEdBQUcsV0FBVyxHQUFHO0lBQ3hELENBQUM7RUFDSCxDQUFDLENBQUM7QUFDTixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxvQ0FBb0NBLENBQUNDLGNBQStCLEVBQVk7RUFDdkYsSUFBTUMsR0FBYSxHQUFHLEVBQUU7RUFDeEIsSUFBTUMsTUFBTSxHQUFHLFNBQVRBLE1BQU1BLENBQUlDLEdBQVksRUFBSztJQUMvQixJQUFJQSxHQUFHLElBQUksSUFBSSxFQUFFO0lBQ2pCLElBQU1DLENBQUMsR0FBR0MsUUFBUSxDQUFDQyxNQUFNLENBQUNILEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuQyxJQUFJLENBQUN4QyxNQUFNLENBQUM0QyxLQUFLLENBQUNILENBQUMsQ0FBQyxFQUFFSCxHQUFHLENBQUNPLElBQUksQ0FBQ0osQ0FBQyxDQUFDO0VBQ25DLENBQUM7RUFDREosY0FBYyxDQUFDUyxPQUFPLENBQUMsVUFBQUMsTUFBTSxFQUFJO0lBQUEsSUFBQUMsWUFBQTtJQUMvQixJQUFJLENBQUNELE1BQU0sSUFBSTlCLE9BQUEsQ0FBTzhCLE1BQU0sTUFBSyxRQUFRLEVBQUU7SUFDM0MsSUFBTUUsSUFBSSxHQUFHRixNQUFNLENBQUNHLFNBQVM7SUFDN0IsSUFBSSxFQUFFRCxJQUFJLElBQUloQyxPQUFBLENBQU9nQyxJQUFJLE1BQUssUUFBUSxJQUFJLENBQUMxRCxLQUFLLENBQUNDLE9BQU8sQ0FBQ3lELElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDakUsSUFBTUUsR0FBRyxHQUFHRixJQUErQjtJQUMzQ1YsTUFBTSxFQUFBUyxZQUFBLEdBQUNHLEdBQUcsQ0FBQ0MsT0FBTyxjQUFBSixZQUFBLGNBQUFBLFlBQUEsR0FBSUcsR0FBRyxDQUFDNUMsRUFBRSxDQUFDO0lBQzdCLElBQUloQixLQUFLLENBQUNDLE9BQU8sQ0FBQzJELEdBQUcsQ0FBQ0UsUUFBUSxDQUFDLEVBQUU7TUFDL0JGLEdBQUcsQ0FBQ0UsUUFBUSxDQUFDUCxPQUFPLENBQUNQLE1BQU0sQ0FBQztJQUM5QjtJQUNBLElBQUloRCxLQUFLLENBQUNDLE9BQU8sQ0FBQzJELEdBQUcsQ0FBQ0csS0FBSyxDQUFDLEVBQUU7TUFDNUJILEdBQUcsQ0FBQ0csS0FBSyxDQUFDUixPQUFPLENBQUMsVUFBQVMsQ0FBQyxFQUFJO1FBQ3JCLElBQUlBLENBQUMsSUFBSXRDLE9BQUEsQ0FBT3NDLENBQUMsTUFBSyxRQUFRLElBQUksQ0FBQ2hFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDK0QsQ0FBQyxDQUFDLEVBQUU7VUFBQSxJQUFBQyxhQUFBO1VBQ25ELElBQU1DLElBQUksR0FBR0YsQ0FBNEI7VUFDekNoQixNQUFNLEVBQUFpQixhQUFBLEdBQUNDLElBQUksQ0FBQ0wsT0FBTyxjQUFBSSxhQUFBLGNBQUFBLGFBQUEsR0FBSUMsSUFBSSxDQUFDbEQsRUFBRSxDQUFDO1FBQ2pDO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPK0IsR0FBRztBQUNaOztBQUVBO0FBQ0EsU0FBU29CLHNDQUFzQ0EsQ0FBQ3JCLGNBQStCLEVBQVk7RUFDekYsSUFBTUMsR0FBYSxHQUFHLEVBQUU7RUFDeEJELGNBQWMsQ0FBQ1MsT0FBTyxDQUFDLFVBQUFDLE1BQU0sRUFBSTtJQUMvQixJQUFJLENBQUNBLE1BQU0sSUFBSTlCLE9BQUEsQ0FBTzhCLE1BQU0sTUFBSyxRQUFRLEVBQUU7SUFDM0MsSUFBTUUsSUFBSSxHQUFHRixNQUFNLENBQUNHLFNBQVM7SUFDN0IsSUFBSSxFQUFFRCxJQUFJLElBQUloQyxPQUFBLENBQU9nQyxJQUFJLE1BQUssUUFBUSxJQUFJLENBQUMxRCxLQUFLLENBQUNDLE9BQU8sQ0FBQ3lELElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDakUsSUFBTUUsR0FBRyxHQUFHRixJQUErQjtJQUMzQyxJQUFJRixNQUFNLENBQUNZLFNBQVMsS0FBSyxhQUFhLEVBQUU7TUFBQSxJQUFBQyxhQUFBO01BQ3RDLElBQU1wQixHQUFHLElBQUFvQixhQUFBLEdBQUdULEdBQUcsQ0FBQ0MsT0FBTyxjQUFBUSxhQUFBLGNBQUFBLGFBQUEsR0FBSVQsR0FBRyxDQUFDNUMsRUFBRTtNQUNqQyxJQUFJaUMsR0FBRyxJQUFJLElBQUksRUFBRTtRQUNmLElBQU1DLENBQUMsR0FBR0MsUUFBUSxDQUFDQyxNQUFNLENBQUNILEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUN4QyxNQUFNLENBQUM0QyxLQUFLLENBQUNILENBQUMsQ0FBQyxFQUFFSCxHQUFHLENBQUNPLElBQUksQ0FBQ0osQ0FBQyxDQUFDO01BQ25DO0lBQ0Y7SUFDQSxJQUFJTSxNQUFNLENBQUNZLFNBQVMsS0FBSyxvQkFBb0IsRUFBRTtNQUM3QyxJQUFNRSxJQUFJLEdBQUdWLEdBQUcsQ0FBQ0UsUUFBUTtNQUN6QixJQUFJOUQsS0FBSyxDQUFDQyxPQUFPLENBQUNxRSxJQUFJLENBQUMsRUFBRTtRQUN2QkEsSUFBSSxDQUFDZixPQUFPLENBQUMsVUFBQWdCLEdBQUcsRUFBSTtVQUNsQixJQUFNckIsQ0FBQyxHQUFHQyxRQUFRLENBQUNDLE1BQU0sQ0FBQ21CLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztVQUNuQyxJQUFJLENBQUM5RCxNQUFNLENBQUM0QyxLQUFLLENBQUNILENBQUMsQ0FBQyxFQUFFSCxHQUFHLENBQUNPLElBQUksQ0FBQ0osQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQztNQUNKO0lBQ0Y7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPSCxHQUFHO0FBQ1o7QUFFQSxTQUFTeUIseUNBQXlDQSxDQUFDMUIsY0FBK0IsRUFBaUI7RUFBQSxJQUFBMkIsYUFBQTtFQUNqRyxJQUFNQyxVQUFVLEdBQUc1QixjQUFjLENBQUM2QixJQUFJLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUksQ0FBQ0EsQ0FBQyxDQUFDUixTQUFTLElBQUksRUFBRSxFQUFFUyxXQUFXLENBQUMsQ0FBQyxLQUFLLFlBQVk7RUFBQSxFQUFDO0VBQy9GLElBQ0UsQ0FBQ0gsVUFBVSxJQUNYLENBQUNBLFVBQVUsQ0FBQ2YsU0FBUyxJQUNyQmpDLE9BQUEsQ0FBT2dELFVBQVUsQ0FBQ2YsU0FBUyxNQUFLLFFBQVEsSUFDeEMzRCxLQUFLLENBQUNDLE9BQU8sQ0FBQ3lFLFVBQVUsQ0FBQ2YsU0FBUyxDQUFDLEVBQ25DO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7RUFDQSxJQUFNQyxHQUFHLEdBQUdjLFVBQVUsQ0FBQ2YsU0FBb0M7RUFDM0QsSUFBTVYsR0FBRyxJQUFBd0IsYUFBQSxHQUFHYixHQUFHLENBQUNrQixRQUFRLGNBQUFMLGFBQUEsY0FBQUEsYUFBQSxHQUFJYixHQUFHLENBQUNtQixPQUFPO0VBQ3ZDLE9BQU85QixHQUFHLElBQUksSUFBSSxHQUFHRyxNQUFNLENBQUNILEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDekM7QUFFQSxTQUFTK0IsMENBQTBDQSxDQUFDbEMsY0FBK0IsRUFBRW1DLFFBQWdCLEVBQWlCO0VBQUEsSUFBQUMsSUFBQSxFQUFBQyxjQUFBO0VBQ3BILElBQU0zQixNQUFNLEdBQUdWLGNBQWMsQ0FBQzZCLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSSxDQUFDQSxDQUFDLENBQUNSLFNBQVMsSUFBSSxFQUFFLEVBQUVTLFdBQVcsQ0FBQyxDQUFDLEtBQUtJLFFBQVEsQ0FBQ0osV0FBVyxDQUFDLENBQUM7RUFBQSxFQUFDO0VBQ3JHLElBQUksQ0FBQ3JCLE1BQU0sSUFBSSxDQUFDQSxNQUFNLENBQUNHLFNBQVMsSUFBSWpDLE9BQUEsQ0FBTzhCLE1BQU0sQ0FBQ0csU0FBUyxNQUFLLFFBQVEsSUFBSTNELEtBQUssQ0FBQ0MsT0FBTyxDQUFDdUQsTUFBTSxDQUFDRyxTQUFTLENBQUMsRUFBRTtJQUMzRyxPQUFPLElBQUk7RUFDYjtFQUNBLElBQU1DLEdBQUcsR0FBR0osTUFBTSxDQUFDRyxTQUFvQztFQUN2RCxJQUFNVixHQUFHLElBQUFpQyxJQUFBLElBQUFDLGNBQUEsR0FBR3ZCLEdBQUcsQ0FBQ2tCLFFBQVEsY0FBQUssY0FBQSxjQUFBQSxjQUFBLEdBQUl2QixHQUFHLENBQUNtQixPQUFPLGNBQUFHLElBQUEsY0FBQUEsSUFBQSxHQUFJdEIsR0FBRyxDQUFDNUMsRUFBRTtFQUNqRCxPQUFPaUMsR0FBRyxJQUFJLElBQUksR0FBR0csTUFBTSxDQUFDSCxHQUFHLENBQUMsR0FBRyxJQUFJO0FBQ3pDOztBQUVBO0FBQ0EsU0FBU21DLHVDQUF1Q0EsQ0FBQ0MsSUFBWSxFQUFZO0VBQ3ZFLElBQU1DLE9BQU8sR0FBR0QsSUFBSSxDQUFDRSxLQUFLLENBQUMsdUJBQXVCLENBQUM7RUFDbkQsSUFBSUQsT0FBTyxFQUFFO0lBQ1gsSUFBTXBDLENBQUMsR0FBR0MsUUFBUSxDQUFDbUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsQyxPQUFPN0UsTUFBTSxDQUFDNEMsS0FBSyxDQUFDSCxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDO0VBQ25DO0VBQ0EsSUFBTXNDLElBQUksR0FBR0gsSUFBSSxDQUFDRSxLQUFLLENBQUMsa0JBQWtCLENBQUM7RUFDM0MsSUFBSUMsSUFBSSxFQUFFO0lBQ1IsSUFBTXRDLEVBQUMsR0FBR0MsUUFBUSxDQUFDcUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMvQixPQUFPL0UsTUFBTSxDQUFDNEMsS0FBSyxDQUFDSCxFQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQ0EsRUFBQyxDQUFDO0VBQ25DO0VBQ0EsT0FBTyxFQUFFO0FBQ1g7QUFFQSxJQUFNdUMsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSUMsUUFBaUIsRUFBSztFQUNoRCxJQUFNQyxXQUFXLEdBQUc3SCxNQUFNLENBQWtCO0lBQzFDa0QsRUFBRSxFQUFFMEUsUUFBUSxDQUFDMUUsRUFBRSxDQUFDNEUsUUFBUSxDQUFDLENBQUM7SUFDMUJ6RSxJQUFJLEVBQUV1RSxRQUFRLENBQUNHLFNBQVM7SUFDeEJDLE1BQU0sRUFBRUosUUFBUSxDQUFDSztFQUNuQixDQUFDLENBQUM7RUFFRixJQUNFSixXQUFXLENBQUNLLE9BQU8sQ0FBQ2hGLEVBQUUsS0FBSzBFLFFBQVEsQ0FBQzFFLEVBQUUsQ0FBQzRFLFFBQVEsQ0FBQyxDQUFDLElBQ2pERCxXQUFXLENBQUNLLE9BQU8sQ0FBQzdFLElBQUksS0FBS3VFLFFBQVEsQ0FBQ0csU0FBUyxJQUMvQ0YsV0FBVyxDQUFDSyxPQUFPLENBQUNGLE1BQU0sS0FBS0osUUFBUSxDQUFDSyxPQUFPLEVBQy9DO0lBQ0FKLFdBQVcsQ0FBQ0ssT0FBTyxHQUFHO01BQ3BCaEYsRUFBRSxFQUFFMEUsUUFBUSxDQUFDMUUsRUFBRSxDQUFDNEUsUUFBUSxDQUFDLENBQUM7TUFDMUJ6RSxJQUFJLEVBQUV1RSxRQUFRLENBQUNHLFNBQVM7TUFDeEJDLE1BQU0sRUFBRUosUUFBUSxDQUFDSztJQUNuQixDQUFDO0VBQ0g7RUFDQSxPQUFPO0lBQ0xKLFdBQVcsRUFBRUEsV0FBVyxDQUFDSztFQUMzQixDQUFDO0FBQ0gsQ0FBQztBQUVELElBQU1DLGtDQUFrQyxHQUFHLFNBQXJDQSxrQ0FBa0NBLENBQ3RDQyxTQUFtQixFQUNuQkMsY0FBNkIsRUFDMEI7RUFDdkQsSUFBTUMsY0FBYyxHQUFHRCxjQUFjLENBQUN4QixJQUFJLENBQUMsVUFBQTBCLE9BQU87SUFBQSxJQUFBQyxpQkFBQTtJQUFBLFFBQUFBLGlCQUFBLEdBQ2hERCxPQUFPLENBQUNFLFFBQVEsY0FBQUQsaUJBQUEsZ0JBQUFBLGlCQUFBLEdBQWhCQSxpQkFBQSxDQUFrQkUsZUFBZSxjQUFBRixpQkFBQSx1QkFBakNBLGlCQUFBLENBQW1DRyxJQUFJLENBQUMsVUFBQWpELE1BQU07TUFBQSxPQUFJMEMsU0FBUyxDQUFDL0QsUUFBUSxDQUFDcUIsTUFBTSxDQUFDa0QsU0FBUyxDQUFDO0lBQUEsRUFBQztFQUFBLENBQ3pGLENBQUM7RUFDRCxJQUFJTixjQUFjLGFBQWRBLGNBQWMsZUFBZEEsY0FBYyxDQUFFRyxRQUFRLEVBQUU7SUFDNUIsT0FBTztNQUNMRixPQUFPLEVBQUVELGNBQWM7TUFDdkJPLFNBQVMsRUFBRVAsY0FBYyxDQUFDRyxRQUFRLENBQUNLLFVBQVUsSUFBSWxILFVBQVUsQ0FBQ21ILEdBQUcsQ0FBQyxDQUFDLElBQUk7SUFDdkUsQ0FBQztFQUNIO0VBRUEsSUFBQUMscUJBQUEsR0FBcUJ4SCxnQkFBZ0IsQ0FBQ3lILFFBQVEsQ0FBQyxDQUFDO0lBQXhDQyxRQUFRLEdBQUFGLHFCQUFBLENBQVJFLFFBQVE7RUFDaEIsSUFBTUMsWUFBWSxHQUFHQyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0gsUUFBUSxDQUFDLENBQUNyQyxJQUFJLENBQUMsVUFBQXlDLEtBQUE7SUFBQSxJQUFBQyxLQUFBLEdBQUFDLGNBQUEsQ0FBQUYsS0FBQTtNQUFJRyxlQUFlLEdBQUFGLEtBQUE7SUFBQSxPQUNwRUUsZUFBZSxDQUFDZCxJQUFJLENBQUMsVUFBQUosT0FBTztNQUFBLElBQUFtQixrQkFBQTtNQUFBLFFBQUFBLGtCQUFBLEdBQzFCbkIsT0FBTyxDQUFDRSxRQUFRLGNBQUFpQixrQkFBQSxnQkFBQUEsa0JBQUEsR0FBaEJBLGtCQUFBLENBQWtCaEIsZUFBZSxjQUFBZ0Isa0JBQUEsdUJBQWpDQSxrQkFBQSxDQUFtQ2YsSUFBSSxDQUFDLFVBQUFqRCxNQUFNO1FBQUEsT0FBSTBDLFNBQVMsQ0FBQy9ELFFBQVEsQ0FBQ3FCLE1BQU0sQ0FBQ2tELFNBQVMsQ0FBQztNQUFBLEVBQUM7SUFBQSxDQUN6RixDQUFDO0VBQUEsQ0FDSCxDQUFDO0VBQ0QsSUFBSU8sWUFBWSxFQUFFO0lBQ2hCLElBQUFRLGFBQUEsR0FBQUgsY0FBQSxDQUFxQ0wsWUFBWTtNQUExQ04sU0FBUyxHQUFBYyxhQUFBO01BQUVGLGVBQWUsR0FBQUUsYUFBQTtJQUNqQyxJQUFNQyxLQUFLLEdBQUdILGVBQWUsQ0FBQzVDLElBQUksQ0FBQyxVQUFBMEIsT0FBTztNQUFBLElBQUFzQixrQkFBQTtNQUFBLFFBQUFBLGtCQUFBLEdBQ3hDdEIsT0FBTyxDQUFDRSxRQUFRLGNBQUFvQixrQkFBQSxnQkFBQUEsa0JBQUEsR0FBaEJBLGtCQUFBLENBQWtCbkIsZUFBZSxjQUFBbUIsa0JBQUEsdUJBQWpDQSxrQkFBQSxDQUFtQ2xCLElBQUksQ0FBQyxVQUFBakQsTUFBTTtRQUFBLE9BQUkwQyxTQUFTLENBQUMvRCxRQUFRLENBQUNxQixNQUFNLENBQUNrRCxTQUFTLENBQUM7TUFBQSxFQUFDO0lBQUEsQ0FDekYsQ0FBQztJQUNELElBQUlnQixLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFbkIsUUFBUSxFQUFFO01BQ25CLE9BQU87UUFBRUYsT0FBTyxFQUFFcUIsS0FBSztRQUFFZixTQUFTLEVBQUVlLEtBQUssQ0FBQ25CLFFBQVEsQ0FBQ0ssVUFBVSxJQUFJRDtNQUFVLENBQUM7SUFDOUU7RUFDRjtFQUVBLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRCxPQUFPLElBQU1pQixjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUFDLEtBQUEsRUFLQTtFQUFBLElBSmpCQyxhQUFhLEdBQUFELEtBQUEsQ0FBckJFLE1BQU07SUFDTkMsa0JBQWtCLEdBQUFILEtBQUEsQ0FBbEJHLGtCQUFrQjtJQUNsQkMsT0FBTyxHQUFBSixLQUFBLENBQVBJLE9BQU87SUFBQUMsWUFBQSxHQUFBTCxLQUFBLENBQ1BNLE1BQU07SUFBTkEsTUFBTSxHQUFBRCxZQUFBLGNBQUcsRUFBRSxHQUFBQSxZQUFBO0VBRVgsSUFBQUUsS0FBQSxHQUFjL0osSUFBSSxDQUFDLENBQUM7SUFBWjJGLENBQUMsR0FBQW9FLEtBQUEsQ0FBRHBFLENBQUM7RUFDVCxJQUFNMEIsUUFBUSxHQUFHcEgsT0FBTyxDQUFDLENBQUM7RUFDMUIsSUFBQStKLGlCQUFBLEdBWUk5SixnQkFBZ0IsQ0FBQyxDQUFDO0lBWHBCK0osT0FBTyxHQUFBRCxpQkFBQSxDQUFQQyxPQUFPO0lBQ1BDLFVBQVUsR0FBQUYsaUJBQUEsQ0FBVkUsVUFBVTtJQUNWbEgsTUFBTSxHQUFBZ0gsaUJBQUEsQ0FBTmhILE1BQU07SUFDTm1ILFNBQVMsR0FBQUgsaUJBQUEsQ0FBVEcsU0FBUztJQUNUQyxJQUFJLEdBQUFKLGlCQUFBLENBQUpJLElBQUk7SUFDSkMsT0FBTyxHQUFBTCxpQkFBQSxDQUFQSyxPQUFPO0lBQ1BDLEtBQUssR0FBQU4saUJBQUEsQ0FBTE0sS0FBSztJQUNMQyxpQkFBaUIsR0FBQVAsaUJBQUEsQ0FBakJPLGlCQUFpQjtJQUNqQkMsa0JBQWtCLEdBQUFSLGlCQUFBLENBQWxCUSxrQkFBa0I7SUFDbEJ4SSxZQUFZLEdBQUFnSSxpQkFBQSxDQUFaaEksWUFBWTtJQUNaeUksZUFBZSxHQUFBVCxpQkFBQSxDQUFmUyxlQUFlO0VBRWpCLElBQU1DLEtBQUssR0FBR3RLLFFBQVEsQ0FBQyxDQUFDO0VBQ3hCLElBQUF1SyxZQUFBLEdBQTBCakssV0FBVyxDQUFDLENBQUM7SUFBL0JrSyxhQUFhLEdBQUFELFlBQUEsQ0FBYkMsYUFBYTtFQUNyQixJQUFBQyxtQkFBQSxHQUF3QnpELGtCQUFrQixDQUFDQyxRQUFRLENBQUM7SUFBNUNDLFdBQVcsR0FBQXVELG1CQUFBLENBQVh2RCxXQUFXO0VBQ25CLElBQUF3RCxrQkFBQSxHQUE4Qm5LLGlCQUFpQixDQUFDLENBQUM7SUFBekNvSyxpQkFBaUIsR0FBQUQsa0JBQUEsQ0FBakJDLGlCQUFpQjs7RUFFekI7RUFDQXJMLFNBQVMsQ0FBQyxZQUFNO0lBQUEsSUFBQXNMLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLFdBQUEsRUFBQUMsVUFBQSxFQUFBQyxRQUFBO0lBQ2RDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLG1DQUFtQyxFQUFFO01BQ2hEcEosY0FBYyxHQUFBOEkscUJBQUEsR0FBRWhKLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFRyxTQUFTLGNBQUE2SSxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLElBQUk7TUFDL0NPLGdCQUFnQixHQUFBTixzQkFBQSxHQUFFakosWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUV3SixXQUFXLGNBQUFQLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksSUFBSTtNQUNuRFEsYUFBYSxHQUFBUCxXQUFBLEdBQUVqQixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXRILEVBQUUsY0FBQXVJLFdBQUEsY0FBQUEsV0FBQSxHQUFJLElBQUk7TUFDbENySSxRQUFRLEdBQUFzSSxVQUFBLEdBQUVuSSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRUwsRUFBRSxjQUFBd0ksVUFBQSxjQUFBQSxVQUFBLEdBQUksSUFBSTtNQUM1Qk8sTUFBTSxHQUFBTixRQUFBLEdBQUVoQixJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRXpILEVBQUUsY0FBQXlJLFFBQUEsY0FBQUEsUUFBQSxHQUFJO0lBQ3RCLENBQUMsQ0FBQztFQUNKLENBQUMsRUFBRSxDQUFDcEosWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUVHLFNBQVMsRUFBRThILE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFdEgsRUFBRSxFQUFFSyxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRUwsRUFBRSxFQUFFeUgsSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQUV6SCxFQUFFLENBQUMsQ0FBQztFQUNoRSxJQUFNZ0osZ0JBQWdCLEdBQUdsTSxNQUFNLENBQUNJLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDekMsSUFBTStMLG1CQUFtQixHQUFHbk0sTUFBTSxDQUFnQixJQUFJLENBQUM7RUFDdkQsSUFBTW9NLGFBQWEsR0FBR3BNLE1BQU0sQ0FBQ2dLLGFBQWEsSUFBSTVKLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDdkQsSUFBTWlNLGFBQWEsR0FBR3JNLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDbkMsSUFBTXNNLFdBQVcsR0FBR3RNLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDO0VBQzdDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFLElBQU11TSxxQkFBcUIsR0FBR3ZNLE1BQU0sQ0FHMUIsSUFBSSxDQUFDO0VBQ2Y7RUFDQSxJQUFNd00sdUJBQXVCLEdBQUd4TSxNQUFNLENBQThCLElBQUksQ0FBQztFQUN6RSxJQUFNeU0sZUFBZSxHQUFHek0sTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNyQyxJQUFNME0sWUFBWSxHQUFHMU0sTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNsQztFQUNBLElBQU0yTSx5QkFBeUIsR0FBRzNNLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDO0VBQzdEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRSxJQUFNNE0scUJBQXFCLEdBQUc1TSxNQUFNLENBQWdCLElBQUksQ0FBQztFQUN6RCxJQUFNNk0sZ0JBQWdCLEdBQUc3TSxNQUFNLENBQWE7SUFBQSxPQUFNMkUsU0FBUztFQUFBLEVBQUM7RUFDNUQsSUFBQW1JLFNBQUEsR0FBNEM1TSxRQUFRLENBQXlCLENBQUMsQ0FBQyxDQUFDO0lBQUE2TSxVQUFBLEdBQUF2RCxjQUFBLENBQUFzRCxTQUFBO0lBQXpFRSxjQUFjLEdBQUFELFVBQUE7SUFBRUUsaUJBQWlCLEdBQUFGLFVBQUE7RUFDeEM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUNFLElBQUFHLFVBQUEsR0FBOENoTixRQUFRLENBQVNrTSxhQUFhLENBQUNsRSxPQUFPLENBQUM7SUFBQWlGLFVBQUEsR0FBQTNELGNBQUEsQ0FBQTBELFVBQUE7SUFBOUVFLGVBQWUsR0FBQUQsVUFBQTtJQUFFRSxrQkFBa0IsR0FBQUYsVUFBQTtFQUMxQztFQUNBLElBQU1HLFlBQVksR0FBR3ROLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDakM7RUFDQSxJQUFNdU4sc0JBQXNCLEdBQUd2TixNQUFNLENBQWdCLElBQUksQ0FBQztFQUUxRCxJQUFNd04sb0JBQW9CLEdBQUd4TixNQUFNLENBQUM4SyxpQkFBaUIsQ0FBQztFQUN0RCxJQUFNMkMscUJBQXFCLEdBQUd6TixNQUFNLENBQUMrSyxrQkFBa0IsQ0FBQztFQUN4RDtFQUNBLElBQU0yQyxVQUFVLEdBQUcxTixNQUFNLENBQUM7SUFBRXVDLFlBQVksRUFBWkEsWUFBWTtJQUFFaUksT0FBTyxFQUFQQSxPQUFPO0lBQUVqSCxNQUFNLEVBQU5BLE1BQU07SUFBRW9ILElBQUksRUFBSkE7RUFBSyxDQUFDLENBQUM7RUFDbEUrQyxVQUFVLENBQUN4RixPQUFPLEdBQUc7SUFBRTNGLFlBQVksRUFBWkEsWUFBWTtJQUFFaUksT0FBTyxFQUFQQSxPQUFPO0lBQUVqSCxNQUFNLEVBQU5BLE1BQU07SUFBRW9ILElBQUksRUFBSkE7RUFBSyxDQUFDO0VBRTVEMUssU0FBUyxDQUFDLFlBQU07SUFDZHVOLG9CQUFvQixDQUFDdEYsT0FBTyxHQUFHNEMsaUJBQWlCO0lBQ2hEMkMscUJBQXFCLENBQUN2RixPQUFPLEdBQUc2QyxrQkFBa0I7RUFDcEQsQ0FBQyxFQUFFLENBQUNELGlCQUFpQixFQUFFQyxrQkFBa0IsQ0FBQyxDQUFDO0VBRTNDLElBQUE0QyxnQkFBQSxHQUNFdE4sZUFBZSxDQUFDO01BQ2Q0SixNQUFNLEVBQUVELGFBQWEsSUFBSW9DLGFBQWEsQ0FBQ2xFLE9BQU87TUFDOUNMLFdBQVcsRUFBWEEsV0FBVztNQUNYcUMsa0JBQWtCLEVBQWxCQSxrQkFBa0I7TUFDbEJDLE9BQU8sRUFBUEEsT0FBTztNQUNQRSxNQUFNLEVBQU5BO0lBQ0YsQ0FBQyxDQUFDO0lBUEl1RCxlQUFlLEdBQUFELGdCQUFBLENBQWZDLGVBQWU7SUFBRTFFLFFBQVEsR0FBQXlFLGdCQUFBLENBQVJ6RSxRQUFRO0lBQUUyRSxxQkFBcUIsR0FBQUYsZ0JBQUEsQ0FBckJFLHFCQUFxQjtJQUFFQyxZQUFZLEdBQUFILGdCQUFBLENBQVpHLFlBQVk7SUFBRUMsVUFBVSxHQUFBSixnQkFBQSxDQUFWSSxVQUFVO0lBQUVDLGFBQWEsR0FBQUwsZ0JBQUEsQ0FBYkssYUFBYTtJQUFFQyxZQUFZLEdBQUFOLGdCQUFBLENBQVpNLFlBQVk7RUFTL0czQixXQUFXLENBQUNwRSxPQUFPLEdBQUdnQixRQUFROztFQUU5QjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsSUFBTWdGLGVBQWUsR0FBR25PLFdBQVcsQ0FDakMsVUFBQzhJLFNBQWlCLEVBQUVOLE9BQW9CLEVBQUs7SUFDM0MvRyxnQkFBZ0IsQ0FBQ3lILFFBQVEsQ0FBQyxDQUFDLENBQUM4RSxVQUFVLENBQUNsRixTQUFTLEVBQUVOLE9BQU8sQ0FBQztJQUMxRCxJQUFJK0UsWUFBWSxDQUFDcEYsT0FBTyxJQUFJdEcsVUFBVSxDQUFDdU0sRUFBRSxDQUFDdEYsU0FBUyxDQUFDLEVBQUU7TUFDcERrRixVQUFVLENBQUN4RixPQUFPLENBQUM7SUFDckI7RUFDRixDQUFDLEVBQ0QsQ0FBQ3dGLFVBQVUsQ0FDYixDQUFDO0VBRUQsSUFBTUssZUFBZSxHQUFHck8sV0FBVyxDQUNqQyxVQUFDOEksU0FBaUIsRUFBRXdGLFNBQWlCLEVBQUs7SUFDeEM3TSxnQkFBZ0IsQ0FBQ3lILFFBQVEsQ0FBQyxDQUFDLENBQUMrRSxhQUFhLENBQUNuRixTQUFTLEVBQUV3RixTQUFTLENBQUM7SUFDL0QsSUFBSWYsWUFBWSxDQUFDcEYsT0FBTyxJQUFJdEcsVUFBVSxDQUFDdU0sRUFBRSxDQUFDdEYsU0FBUyxDQUFDLEVBQUU7TUFDcERtRixhQUFhLENBQUNLLFNBQVMsQ0FBQztJQUMxQjtFQUNGLENBQUMsRUFDRCxDQUFDTCxhQUFhLENBQ2hCLENBQUM7O0VBRUQ7RUFDQSxJQUFNTSxnQkFBZ0IsR0FBR3ZPLFdBQVcsQ0FBQyxVQUFDOEksU0FBaUIsRUFBSztJQUMxRHJILGdCQUFnQixDQUFDeUgsUUFBUSxDQUFDLENBQUMsQ0FBQ3NGLFdBQVcsQ0FBQzFGLFNBQVMsRUFBRSxFQUFFLENBQUM7RUFDeEQsQ0FBQyxFQUFFLEVBQUUsQ0FBQzs7RUFFTjtFQUNBO0VBQ0E7RUFDQTVJLFNBQVMsQ0FBQyxZQUFNO0lBQ2QyQixVQUFVLENBQUM0TSxHQUFHLENBQUNwQixlQUFlLENBQUM7RUFDakMsQ0FBQyxFQUFFLENBQUNBLGVBQWUsQ0FBQyxDQUFDO0VBRXJCbk4sU0FBUyxDQUFDLFlBQU07SUFDZHFOLFlBQVksQ0FBQ3BGLE9BQU8sR0FBRyxJQUFJO0lBQzNCLE9BQU8sWUFBTTtNQUNYb0YsWUFBWSxDQUFDcEYsT0FBTyxHQUFHLEtBQUs7TUFDNUIsSUFBSXRHLFVBQVUsQ0FBQ3VNLEVBQUUsQ0FBQy9CLGFBQWEsQ0FBQ2xFLE9BQU8sQ0FBQyxFQUFFO1FBQ3hDdEcsVUFBVSxDQUFDNE0sR0FBRyxDQUFDLElBQUksQ0FBQztNQUN0QjtJQUNGLENBQUM7RUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDOztFQUVOO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFNQyxpQkFBaUIsR0FBR2hOLGNBQWMsQ0FBQzJMLGVBQWUsQ0FBQztFQUN6RG5OLFNBQVMsQ0FBQyxZQUFNO0lBQUEsSUFBQXlPLHFCQUFBO0lBQ2QsSUFBTUMsTUFBTSxHQUFHRixpQkFBaUIsYUFBakJBLGlCQUFpQix1QkFBakJBLGlCQUFpQixDQUFFRSxNQUFNO0lBQ3hDLElBQUksQ0FBQ0EsTUFBTSxFQUFFO0lBQ2IsSUFBTUMsVUFBVSxHQUFHRCxNQUFNLEtBQUssVUFBVSxJQUFJQSxNQUFNLEtBQUssT0FBTyxJQUFJQSxNQUFNLEtBQUssV0FBVztJQUN4RixJQUFJLENBQUNDLFVBQVUsRUFBRTtJQUNqQixJQUFNQyxHQUFHLE1BQUE3SyxNQUFBLENBQU1vSixlQUFlLE9BQUFwSixNQUFBLENBQUkySyxNQUFNLE9BQUEzSyxNQUFBLEVBQUEwSyxxQkFBQSxHQUFJRCxpQkFBaUIsYUFBakJBLGlCQUFpQix1QkFBakJBLGlCQUFpQixDQUFFSyxVQUFVLGNBQUFKLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRSxDQUFFO0lBQ2pGLElBQUluQixzQkFBc0IsQ0FBQ3JGLE9BQU8sS0FBSzJHLEdBQUcsRUFBRTtJQUM1Q3RCLHNCQUFzQixDQUFDckYsT0FBTyxHQUFHMkcsR0FBRztJQUVwQyxJQUFNRSxJQUFJLEdBQUd2TixnQkFBZ0IsQ0FBQ3lILFFBQVEsQ0FBQyxDQUFDLENBQUMrRixXQUFXLENBQUM1QixlQUFlLENBQUM7SUFDckUsSUFBTTZCLG1CQUFtQixHQUFHRixJQUFJLENBQUNwRyxJQUFJLENBQUMsVUFBQXVHLEdBQUc7TUFBQSxPQUFJcE4sK0JBQStCLENBQUNvTixHQUFHLENBQUNoTSxFQUFFLENBQUM7SUFBQSxFQUFDO0lBQ3JGLElBQUkrTCxtQkFBbUIsRUFBRTtNQUN2Qm5CLFlBQVksQ0FBQztRQUFFcUIsS0FBSyxFQUFFO01BQUssQ0FBQyxDQUFDO0lBQy9CO0VBQ0YsQ0FBQyxFQUFFLENBQUNWLGlCQUFpQixhQUFqQkEsaUJBQWlCLHVCQUFqQkEsaUJBQWlCLENBQUVFLE1BQU0sRUFBRUYsaUJBQWlCLGFBQWpCQSxpQkFBaUIsdUJBQWpCQSxpQkFBaUIsQ0FBRUssVUFBVSxFQUFFMUIsZUFBZSxFQUFFVSxZQUFZLENBQUMsQ0FBQztFQUU3RjdOLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTW1QLFdBQVcsR0FBRyxJQUFJQyxXQUFXLENBQUMsK0JBQStCLEVBQUU7TUFDbkVDLE1BQU0sRUFBRTtRQUFFMUIsZUFBZSxFQUFmQTtNQUFnQjtJQUM1QixDQUFDLENBQUM7SUFDRjJCLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixXQUFXLENBQUM7RUFDckMsQ0FBQyxFQUFFLENBQUN4QixlQUFlLENBQUMsQ0FBQztFQUVyQjNOLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSStKLGFBQWEsSUFBSUEsYUFBYSxLQUFLb0MsYUFBYSxDQUFDbEUsT0FBTyxFQUFFO01BQzVEO01BQ0E7TUFDQTtNQUNBOztNQUVBO01BQ0F1QyxVQUFVLENBQUMsSUFBSSxDQUFDO01BQ2hCQyxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHLElBQUksQ0FBQztNQUNqQk0sZUFBZSxDQUFDLElBQUksQ0FBQztNQUNyQkosT0FBTyxDQUFDLElBQUksQ0FBQztNQUVid0IsYUFBYSxDQUFDbEUsT0FBTyxHQUFHOEIsYUFBYTtNQUNyQ3FELGtCQUFrQixDQUFDckQsYUFBYSxDQUFDO01BQ2pDeEksZ0JBQWdCLENBQUN5SCxRQUFRLENBQUMsQ0FBQyxDQUFDd0csVUFBVSxDQUFDekYsYUFBYSxFQUFFLEtBQUssQ0FBQztNQUM1RGtDLGdCQUFnQixDQUFDaEUsT0FBTyxHQUFHOUgsTUFBTSxDQUFDLENBQUM7TUFDbkMrTCxtQkFBbUIsQ0FBQ2pFLE9BQU8sR0FBRyxJQUFJO01BQ2xDbUUsYUFBYSxDQUFDbkUsT0FBTyxHQUFHLEtBQUs7TUFDN0I7TUFDQTtNQUNBO01BQ0F1RSxlQUFlLENBQUN2RSxPQUFPLEdBQUd4RyxvQkFBb0IsQ0FBQ2dPLFFBQVEsQ0FBQzFGLGFBQWEsQ0FBQztNQUN0RTJDLHlCQUF5QixDQUFDekUsT0FBTyxHQUFHLElBQUk7TUFDeEMwRSxxQkFBcUIsQ0FBQzFFLE9BQU8sR0FBRyxJQUFJOztNQUVwQztJQUNGO0VBQ0YsQ0FBQyxFQUFFLENBQUM4QixhQUFhLEVBQUVRLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxTQUFTLEVBQUVNLGVBQWUsRUFBRUosT0FBTyxDQUFDLENBQUM7RUFFN0UsSUFBTStFLGlCQUFpQixHQUFHNVAsV0FBVyxDQUNuQyxVQUFDNlAsR0FBa0IsRUFBRUMsWUFBcUIsRUFBRUMsZUFBd0IsRUFBSztJQUFBLElBQUFDLHFCQUFBLEVBQUFDLHNCQUFBO0lBQ3ZFLElBQVFuSCxTQUFTLEdBQStCK0csR0FBRyxDQUEzQy9HLFNBQVM7TUFBRXdGLFNBQVMsR0FBb0J1QixHQUFHLENBQWhDdkIsU0FBUztNQUFFNEIsYUFBYSxHQUFLTCxHQUFHLENBQXJCSyxhQUFhO0lBQzNDLElBQU1QLFFBQVEsR0FBRzlOLFVBQVUsQ0FBQ3VNLEVBQUUsQ0FBQ3RGLFNBQVMsQ0FBQztJQUV6Q3RILG9CQUFvQixDQUFDMk8sS0FBSyxDQUFDckgsU0FBUyxDQUFDO0lBQ3JDdUYsZUFBZSxDQUFDdkYsU0FBUyxFQUFFb0gsYUFBYSxDQUFDO0lBRXpDLElBQUlQLFFBQVEsRUFBRTtNQUNaN0MsZ0JBQWdCLENBQUMzRSxPQUFPLENBQUMsQ0FBQztNQUMxQnlFLHlCQUF5QixDQUFDekUsT0FBTyxHQUFHLElBQUk7TUFDeEMwRSxxQkFBcUIsQ0FBQzFFLE9BQU8sR0FBRyxJQUFJO01BQ3BDdUUsZUFBZSxDQUFDdkUsT0FBTyxHQUFHLEtBQUs7SUFDakM7SUFFQSxJQUFNSyxPQUFPLEdBQ1hzSCxZQUFZLEtBQUssK0RBQStELEdBQzVFM0osQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQzNCMkosWUFBWSxLQUFLLHVCQUF1QixJQUFJQyxlQUFlLGFBQWZBLGVBQWUsZUFBZkEsZUFBZSxDQUFFekwsUUFBUSxDQUFDLG9CQUFvQixDQUFDLEdBQ3pGNkIsQ0FBQyxDQUFDLHlCQUF5QixFQUFFO01BQUVpSyxJQUFJLEdBQUFKLHFCQUFBLElBQUFDLHNCQUFBLEdBQUVGLGVBQWUsQ0FBQ3JJLEtBQUssQ0FBQyxjQUFjLENBQUMsY0FBQXVJLHNCQUFBLHVCQUFyQ0Esc0JBQUEsQ0FBd0MsQ0FBQyxDQUFDLGNBQUFELHFCQUFBLGNBQUFBLHFCQUFBLEdBQUk7SUFBRyxDQUFDLENBQUMsR0FDeEY3SixDQUFDLENBQUMsWUFBWSxDQUFDO0lBRXZCZ0ksZUFBZSxDQUFDckYsU0FBUyxFQUFFO01BQ3pCM0YsRUFBRSxZQUFBYyxNQUFBLENBQVlxSyxTQUFTLENBQUU7TUFDekI5RixPQUFPLEVBQVBBLE9BQU87TUFDUDZILE9BQU8sRUFBRSxJQUFJO01BQ2JDLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztNQUNoQkMsSUFBSSxFQUFFO1FBQUVyTixFQUFFLEVBQUUsV0FBVztRQUFFRyxJQUFJLEVBQUU7TUFBWSxDQUFDO01BQzVDeUIsSUFBSSxFQUFFaEUsZUFBZSxDQUFDMFA7SUFDeEIsQ0FBQyxDQUFDO0lBQ0ZsQyxnQkFBZ0IsQ0FBQ3pGLFNBQVMsQ0FBQztJQUUzQixJQUFJLENBQUM2RyxRQUFRLEVBQUU7TUFDYjdOLGlDQUFpQyxDQUFDZ0gsU0FBUyxFQUFFLE9BQU8sQ0FBQztJQUN2RDtFQUNGLENBQUMsRUFDRCxDQUFDcUYsZUFBZSxFQUFFRSxlQUFlLEVBQUVFLGdCQUFnQixFQUFFcEksQ0FBQyxDQUN4RCxDQUFDO0VBRUQsSUFBTXVLLGtCQUFrQixHQUFHMVEsV0FBVyxDQUNwQyxVQUFDNlAsR0FBa0IsRUFBRWMsT0FBZSxFQUFLO0lBQ3ZDLElBQVE3SCxTQUFTLEdBQW9CK0csR0FBRyxDQUFoQy9HLFNBQVM7TUFBRW9ILGFBQWEsR0FBS0wsR0FBRyxDQUFyQkssYUFBYTs7SUFFaEM7SUFDQTtJQUNBO0lBQ0EsSUFBTVUsaUJBQWlCLEdBQUduUCxnQkFBZ0IsQ0FDdkN5SCxRQUFRLENBQUMsQ0FBQyxDQUNWK0YsV0FBVyxDQUFDbkcsU0FBUyxDQUFDLENBQ3RCRixJQUFJLENBQUMsVUFBQXVHLEdBQUc7TUFBQSxPQUFJQSxHQUFHLENBQUNoTSxFQUFFLEtBQUsrTSxhQUFhO0lBQUEsRUFBQztJQUV4QyxJQUFJLENBQUNVLGlCQUFpQixFQUFFO01BQ3RCcFAsb0JBQW9CLENBQUNxUCxLQUFLLENBQUMvSCxTQUFTLEVBQUVvSCxhQUFhLENBQUM7TUFDcEQvQixlQUFlLENBQUNyRixTQUFTLEVBQUU7UUFDekIzRixFQUFFLEVBQUUrTSxhQUFhO1FBQ2pCMUgsT0FBTyxFQUFFLEVBQUU7UUFDWDhILElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztRQUNoQkMsSUFBSSxFQUFFO1VBQUVyTixFQUFFLEVBQUUsV0FBVztVQUFFRyxJQUFJLEVBQUU7UUFBWSxDQUFDO1FBQzVDeUIsSUFBSSxFQUFFaEUsZUFBZSxDQUFDMFA7TUFDeEIsQ0FBQyxDQUFDO0lBQ0o7SUFFQSxJQUFJNU8sVUFBVSxDQUFDdU0sRUFBRSxDQUFDdEYsU0FBUyxDQUFDLEVBQUU7TUFDNUI4RCx5QkFBeUIsQ0FBQ3pFLE9BQU8sR0FBRytILGFBQWE7TUFDakRyRCxxQkFBcUIsQ0FBQzFFLE9BQU8sR0FBR1csU0FBUztJQUMzQztJQUVBdEgsb0JBQW9CLENBQUNzUCxPQUFPLENBQUNoSSxTQUFTLEVBQUVvSCxhQUFhLEVBQUVTLE9BQU8sQ0FBQztFQUNqRSxDQUFDLEVBQ0QsQ0FBQ3hDLGVBQWUsQ0FDbEIsQ0FBQztFQUVELElBQU00QyxrQkFBa0IsR0FBRy9RLFdBQVc7SUFBQSxJQUFBZ1IsS0FBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQ3BDLFNBQUFDLFFBQ0V2QixHQUFrQixFQUNsQmMsT0FBZSxFQUNmVSxPQUFZLEVBQ1pDLGVBQXVCLEVBQ3ZCNU4sY0FBNkIsRUFDN0I2TixXQUE2QixFQUM3QkMsZ0JBQWdDO01BQUEsSUFBQUMscUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsb0JBQUEsRUFBQUMsa0JBQUE7TUFBQSxJQUFBOUksU0FBQSxFQUFBb0gsYUFBQSxFQUFBUCxRQUFBLEVBQUFrQyxhQUFBLEVBQUF4UCxXQUFBLEVBQUF5UCxZQUFBLEVBQUFDLE9BQUEsRUFBQUMsWUFBQSxFQUFBQyxlQUFBLEVBQUFDLDRCQUFBLEVBQUFDLG1CQUFBLEVBQUFDLGVBQUEsRUFBQUMsaUJBQUEsRUFBQXBOLGNBQUEsRUFBQXFOLGVBQUEsRUFBQUMsV0FBQSxFQUFBQyxhQUFBLEVBQUFDLHNCQUFBLEVBQUFDLCtCQUFBLEVBQUFDLG1CQUFBLEVBQUFDLGlCQUFBLEVBQUFDLG9CQUFBLEVBQUFDLGlCQUFBLEVBQUFDLFVBQUEsRUFBQUMsUUFBQSxFQUFBQyxlQUFBLEVBQUFDLGVBQUEsRUFBQUMseUJBQUEsRUFBQUMsdUJBQUEsRUFBQUMsbUJBQUEsRUFBQUMsbUJBQUEsRUFBQUMsT0FBQSxFQUFBQyxHQUFBLEVBQUFDLFVBQUEsRUFBQUMsa0JBQUEsRUFBQUMsbUJBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsU0FBQSxFQUFBQyxjQUFBLEVBQUFDLGdCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLGVBQUEsRUFBQUMsY0FBQSxFQUFBQyxpQkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxrQkFBQSxFQUFBQyxlQUFBLEVBQUFDLGtCQUFBLEVBQUFDLHFCQUFBLEVBQUF6RixXQUFBO01BQUEsT0FBQTZCLG1CQUFBLENBQUE2RCxJQUFBLFdBQUFDLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtVQUFBO1lBRXhCcE0sU0FBUyxHQUFvQitHLEdBQUcsQ0FBaEMvRyxTQUFTLEVBQUVvSCxhQUFhLEdBQUtMLEdBQUcsQ0FBckJLLGFBQWE7WUFDMUJQLFFBQVEsR0FBRzlOLFVBQVUsQ0FBQ3VNLEVBQUUsQ0FBQ3RGLFNBQVMsQ0FBQztZQUVuQytJLGFBQWEsR0FBRzNCLGFBQWE7WUFDbkMxTyxvQkFBb0IsQ0FBQzJPLEtBQUssQ0FBQ3JILFNBQVMsQ0FBQztZQUNyQ3VGLGVBQWUsQ0FBQ3ZGLFNBQVMsRUFBRStJLGFBQWEsQ0FBQztZQUNuQ3hQLFdBQVcsR0FBR29CLDZCQUE2QixDQUFDQyxjQUFjLENBQUMsRUFFakU7WUFDQTtZQUNBO1lBQUEsSUFDS2lNLFFBQVE7Y0FBQXFGLFFBQUEsQ0FBQUUsSUFBQTtjQUFBO1lBQUE7WUFDWC9HLGVBQWUsQ0FBQ3JGLFNBQVMsRUFBQTFGLGFBQUEsQ0FBQUEsYUFBQTtjQUN2QkQsRUFBRSxZQUFBYyxNQUFBLENBQVlxTixlQUFlLENBQUU7Y0FDL0I5SSxPQUFPLEVBQUVtSSxPQUFPO2NBQ2hCTCxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7Y0FDaEJDLElBQUksRUFBRTtnQkFBRXJOLEVBQUUsRUFBRSxXQUFXO2dCQUFFRyxJQUFJLEVBQUU7Y0FBWSxDQUFDO2NBQzVDeUIsSUFBSSxFQUFFaEUsZUFBZSxDQUFDMFAsU0FBUztjQUMvQlksT0FBTyxFQUFQQTtZQUFPLEdBQ0hoUCxXQUFXLENBQUM4UyxNQUFNLEdBQUcsQ0FBQyxHQUFHO2NBQUU5UyxXQUFXLEVBQVhBO1lBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztjQUNqRGlQLGVBQWUsRUFBZkEsZUFBZTtjQUNmQyxXQUFXLEVBQUVBLFdBQVcsSUFBSTtZQUFFLEVBQy9CLENBQUM7WUFDRmhELGdCQUFnQixDQUFDekYsU0FBUyxDQUFDO1lBQzNCaEgsaUNBQWlDLENBQUNnSCxTQUFTLEVBQUUsVUFBVSxDQUFDO1lBQUEsT0FBQWtNLFFBQUEsQ0FBQUksTUFBQTtVQUFBO1lBSTFEeEkseUJBQXlCLENBQUN6RSxPQUFPLEdBQUcsSUFBSTtZQUN4QzBFLHFCQUFxQixDQUFDMUUsT0FBTyxHQUFHLElBQUk7WUFDcENzRSx1QkFBdUIsQ0FBQ3RFLE9BQU8sR0FBRyxJQUFJOztZQUV0QztZQUNNMkosWUFBWSxHQUFHLElBQUl1RCxNQUFNLENBQUNqVSxzQkFBc0IsRUFBRSxHQUFHLENBQUM7WUFDdEQyUSxPQUFPLEdBQUF1RCxrQkFBQSxDQUFPM0UsT0FBTyxDQUFDNEUsUUFBUSxDQUFDekQsWUFBWSxDQUFDO1lBRTlDRSxZQUFZLEdBQUdyQixPQUFPO1lBQ3BCc0IsZUFBZSxHQUFHMUYsV0FBVyxDQUFDcEUsT0FBTyxDQUFDeEUsTUFBTSxDQUFDLFVBQUE2UixDQUFDO2NBQUEsT0FBSUEsQ0FBQyxDQUFDclMsRUFBRSxLQUFLME8sYUFBYTtZQUFBLEVBQUMsQ0FBQzRELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRnZELDRCQUE0QixHQUFHLENBQUFELGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFdkosUUFBUSxLQUFJLElBQUk7WUFDaEV5SixtQkFBbUIsR0FBRyxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxZQUFZLENBQUM7WUFDekVDLGVBQWUsR0FBRyxDQUN0QixXQUFXLEVBQ1gsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLHdCQUF3QixFQUN4QixtQkFBbUIsQ0FDcEI7WUFDS0MsaUJBQWlCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLENBQUM7WUFDekRwTixjQUFjLEdBQUcsQ0FBQWdOLGVBQWUsYUFBZkEsZUFBZSxnQkFBQVIscUJBQUEsR0FBZlEsZUFBZSxDQUFFdkosUUFBUSxjQUFBK0kscUJBQUEsdUJBQXpCQSxxQkFBQSxDQUEyQjlJLGVBQWUsS0FBSSxFQUFFO1lBQ2pFMkosZUFBZSxHQUNuQkosNEJBQTRCLElBQzVCak4sY0FBYyxDQUFDMkQsSUFBSSxDQUFDLFVBQUNqRCxNQUFXO2NBQUEsT0FBS3dNLG1CQUFtQixDQUFDN04sUUFBUSxDQUFDcUIsTUFBTSxDQUFDWSxTQUFTLENBQUM7WUFBQSxFQUFDO1lBQ2hGZ00sV0FBVyxHQUNmTCw0QkFBNEIsSUFBSWpOLGNBQWMsQ0FBQzJELElBQUksQ0FBQyxVQUFDakQsTUFBVztjQUFBLE9BQUt5TSxlQUFlLENBQUM5TixRQUFRLENBQUNxQixNQUFNLENBQUNZLFNBQVMsQ0FBQztZQUFBLEVBQUM7WUFDNUdpTSxhQUFhLEdBQ2pCTiw0QkFBNEIsSUFDNUJqTixjQUFjLENBQUMyRCxJQUFJLENBQUMsVUFBQ2pELE1BQVc7Y0FBQSxPQUFLME0saUJBQWlCLENBQUMvTixRQUFRLENBQUNxQixNQUFNLENBQUNZLFNBQVMsQ0FBQztZQUFBLEVBQUM7WUFDOUVrTSxzQkFBc0IsR0FDMUJQLDRCQUE0QixJQUM1QixDQUFBRCxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRXlELGNBQWMsTUFBSyxVQUFVLElBQzlDelEsY0FBYyxDQUFDMkQsSUFBSSxDQUFDLFVBQUNqRCxNQUFXO2NBQUEsT0FBS0EsTUFBTSxDQUFDWSxTQUFTLEtBQUssY0FBYztZQUFBLEVBQUM7WUFDckVtTSwrQkFBK0IsR0FDbkNSLDRCQUE0QixJQUM1QixDQUFBRCxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRXlELGNBQWMsTUFBSyxVQUFVLElBQzlDelEsY0FBYyxDQUFDMkQsSUFBSSxDQUFDLFVBQUNqRCxNQUFXO2NBQUEsT0FBSyxDQUFDQSxNQUFNLENBQUNZLFNBQVMsSUFBSSxFQUFFLEVBQUVTLFdBQVcsQ0FBQyxDQUFDLEtBQUssd0JBQXdCO1lBQUEsRUFBQztZQUUzRyxJQUFJeUwsc0JBQXNCLElBQUlrRCxNQUFNLENBQUNDLHdDQUF3QyxJQUFJcEUsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsZUFBaEJBLGdCQUFnQixDQUFFeE4sSUFBSSxDQUFDLENBQUMsRUFBRTtjQUN6RzJPLG1CQUFtQixHQUFHO2dCQUFFekwsT0FBTyxFQUFFc0ssZ0JBQWdCLENBQUN4TixJQUFJLENBQUM7Y0FBRSxDQUFDO1lBQzVELENBQUMsTUFBTSxJQUNMME8sK0JBQStCLElBQy9CaUQsTUFBTSxDQUFDQyx3Q0FBd0MsS0FDOUNwRSxnQkFBZ0IsYUFBaEJBLGdCQUFnQixlQUFoQkEsZ0JBQWdCLENBQUV4TixJQUFJLENBQUMsQ0FBQyxJQUN2Qm1ELDBDQUEwQyxDQUFDbEMsY0FBYyxFQUFFLHdCQUF3QixDQUFDLENBQUMsRUFDdkY7Y0FDTTJOLGlCQUFpQixHQUNyQixDQUFBcEIsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsdUJBQWhCQSxnQkFBZ0IsQ0FBRXhOLElBQUksQ0FBQyxDQUFDLEtBQ3hCbUQsMENBQTBDLENBQUNsQyxjQUFjLEVBQUUsd0JBQXdCLENBQUM7Y0FDdEYwTixtQkFBbUIsR0FBRztnQkFDcEJ6TCxPQUFPLEVBQUUwTDtjQUNYLENBQUM7WUFDSDtZQUVBLElBQUlILHNCQUFzQixFQUFFO2NBQzFCdkgsS0FBSyxDQUFDdkssTUFBTSxDQUFDa1YsZ0JBQWdCLEVBQUF6UyxhQUFBO2dCQUMzQjBTLFVBQVUsRUFBRXZVLHlCQUF5QixDQUFDdUosS0FBSyxDQUFDO2dCQUM1Q2lMLFdBQVcsRUFBRXpVLHVCQUF1QixDQUFDMkQsY0FBYyxDQUFDO2dCQUNwRCtRLFFBQVEsRUFBRSxRQUFRO2dCQUNsQkMsTUFBTSxFQUFFO2NBQWMsR0FDbEJ6RSxnQkFBZ0IsYUFBaEJBLGdCQUFnQixlQUFoQkEsZ0JBQWdCLENBQUV4TixJQUFJLENBQUMsQ0FBQyxHQUFHO2dCQUFFa1MsZ0JBQWdCLEVBQUUxRSxnQkFBZ0IsQ0FBQ3hOLElBQUksQ0FBQztjQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDbEYsQ0FBQztZQUNKO1lBRU02TyxvQkFBb0IsR0FDeEJYLDRCQUE0QixJQUM1QixDQUFBRCxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRXlELGNBQWMsTUFBSyxVQUFVLElBQzlDelEsY0FBYyxDQUFDMkQsSUFBSSxDQUFDLFVBQUNqRCxNQUFXO2NBQUEsT0FBSyxDQUFDQSxNQUFNLENBQUNZLFNBQVMsSUFBSSxFQUFFLEVBQUVTLFdBQVcsQ0FBQyxDQUFDLEtBQUssWUFBWTtZQUFBLEVBQUM7WUFHL0YsSUFBSTZMLG9CQUFvQixFQUFFO2NBQ2xCRSxVQUFVLEdBQUd2QixnQkFBZ0IsYUFBaEJBLGdCQUFnQix1QkFBaEJBLGdCQUFnQixDQUFFeE4sSUFBSSxDQUFDLENBQUM7Y0FDckNnUCxRQUFRLEdBQUdyTSx5Q0FBeUMsQ0FBQzFCLGNBQWMsQ0FBQztjQUNwRWdPLGVBQWUsR0FBR0YsVUFBVSxJQUFJQyxRQUFRO2NBQzlDLElBQUlDLGVBQWUsRUFBRTtnQkFDbkJILGlCQUFpQixHQUFHO2tCQUFFNUwsT0FBTyxFQUFFK0w7Z0JBQWdCLENBQUM7Y0FDbEQ7WUFDRjtZQUVNQyxlQUFlLEdBQUduQixPQUFPLENBQUNqTyxHQUFHLENBQUMsVUFBQTRELEtBQUs7Y0FBQSxPQUFJcEMsUUFBUSxDQUFDb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUFBLEVBQUM7WUFDOUR5TCx5QkFBeUIsR0FBRzdNLHNDQUFzQyxDQUFDckIsY0FBYyxDQUFDO1lBQ2xGbU8sdUJBQXVCLEdBQzNCWixhQUFhLElBQUlVLGVBQWUsQ0FBQ2lDLE1BQU0sS0FBSyxDQUFDLElBQUloQyx5QkFBeUIsQ0FBQ2dDLE1BQU0sS0FBSyxDQUFDLEdBQ25GNU4sdUNBQXVDLENBQUNvSixPQUFPLENBQUMsR0FDaEQsRUFBRTtZQUNGMEMsbUJBQW1CLEdBQ3ZCSCxlQUFlLENBQUNpQyxNQUFNLEdBQUcsQ0FBQyxHQUN0QmpDLGVBQWUsR0FDZkMseUJBQXlCLENBQUNnQyxNQUFNLEdBQUcsQ0FBQyxHQUNsQ2hDLHlCQUF5QixHQUN6QkMsdUJBQXVCO1lBRXpCRSxtQkFBbUIsR0FDdkJwQiw0QkFBNEIsS0FDM0JJLGVBQWUsSUFBSUMsV0FBVyxJQUFJQyxhQUFhLENBQUMsSUFDakRhLG1CQUFtQixDQUFDOEIsTUFBTSxHQUFHLENBQUM7WUFBQSxLQUU1QjdCLG1CQUFtQjtjQUFBMEIsUUFBQSxDQUFBRSxJQUFBO2NBQUE7WUFBQTtZQUNmM0IsT0FBTyxHQUFHRixtQkFBbUI7WUFBQSxNQUMvQnRCLE9BQU8sQ0FBQ29ELE1BQU0sR0FBRyxDQUFDO2NBQUFILFFBQUEsQ0FBQUUsSUFBQTtjQUFBO1lBQUE7WUFBQUYsUUFBQSxDQUFBRSxJQUFBO1lBQUEsT0FDRjNKLGlCQUFpQixDQUFDZ0ksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1VBQUE7WUFBekNDLEdBQUcsR0FBQXdCLFFBQUEsQ0FBQW1CLElBQUE7WUFDSDFDLFVBQVUsR0FBR0QsR0FBRyxPQUFBdlAsTUFBQSxDQUFPdVAsR0FBRyxJQUFLLFNBQVM7WUFDOUN4QixZQUFZLEdBQUdyQixPQUFPLENBQUN5RixPQUFPLENBQUN0RSxZQUFZLEVBQUUsVUFBQXVFLEdBQUc7Y0FBQSxPQUM5Q0EsR0FBRyxDQUFDRCxPQUFPLENBQUMseURBQXlELEVBQUUzQyxVQUFVLENBQUM7WUFBQSxDQUNwRixDQUFDO1VBQUE7WUFHR0Msa0JBQWtCLEdBQUduSCxXQUFXLENBQUNwRSxPQUFPLENBQUN4RSxNQUFNLENBQUMsVUFBQXdMLEdBQUc7Y0FBQSxPQUFJQSxHQUFHLENBQUN4TSxTQUFTO1lBQUEsRUFBQyxDQUFDOFMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVFOUIsbUJBQW1CLEdBQUcsQ0FBQWxKLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFdEgsRUFBRSxNQUFJdVEsa0JBQWtCLGFBQWxCQSxrQkFBa0IsdUJBQWxCQSxrQkFBa0IsQ0FBRS9RLFNBQVM7WUFDbEVpUixnQkFBZ0IsR0FBR0QsbUJBQW1CLEdBQUdyTyxRQUFRLENBQUNDLE1BQU0sQ0FBQ29PLG1CQUFtQixDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSTtZQUN6RkUsU0FBUyxHQUFHOEIsTUFBTSxDQUFDVyxRQUFRLENBQUNDLFFBQVEsQ0FBQzdPLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQztZQUNsRW9NLGNBQWMsR0FBR0QsU0FBUyxHQUFHdk8sUUFBUSxDQUFDdU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUk7WUFDOURFLGdCQUFnQixHQUFHSCxnQkFBZ0IsSUFBSUUsY0FBYyxJQUFJRixnQkFBZ0IsS0FBS0UsY0FBYztZQUVsRyxJQUFJQyxnQkFBZ0IsRUFBRTtjQUNwQixJQUFJekIsZUFBZSxFQUFFO2dCQUNuQixDQUFBMEIscUJBQUEsR0FBQTJCLE1BQU0sQ0FBQ2EsbUJBQW1CLGNBQUF4QyxxQkFBQSxnQkFBQUMsc0JBQUEsR0FBMUJELHFCQUFBLENBQTRCeUMsMEJBQTBCLGNBQUF4QyxzQkFBQSxlQUF0REEsc0JBQUEsQ0FBQXlDLElBQUEsQ0FBQTFDLHFCQUFBLEVBQXlEVCxPQUFPLENBQUM7Y0FDbkUsQ0FBQyxNQUFNLElBQUloQixXQUFXLEVBQUU7Z0JBQ3RCLENBQUEyQixzQkFBQSxHQUFBeUIsTUFBTSxDQUFDYSxtQkFBbUIsY0FBQXRDLHNCQUFBLGdCQUFBQyxzQkFBQSxHQUExQkQsc0JBQUEsQ0FBNEJ5QywyQkFBMkIsY0FBQXhDLHNCQUFBLGVBQXZEQSxzQkFBQSxDQUFBdUMsSUFBQSxDQUFBeEMsc0JBQUEsRUFBMERYLE9BQU8sQ0FBQztjQUNwRSxDQUFDLE1BQU0sSUFBSWYsYUFBYSxFQUFFO2dCQUN4QixDQUFBNEIsc0JBQUEsR0FBQXVCLE1BQU0sQ0FBQ2EsbUJBQW1CLGNBQUFwQyxzQkFBQSxnQkFBQUMsc0JBQUEsR0FBMUJELHNCQUFBLENBQTRCd0MsK0JBQStCLGNBQUF2QyxzQkFBQSxlQUEzREEsc0JBQUEsQ0FBQXFDLElBQUEsQ0FBQXRDLHNCQUFBLEVBQThEYixPQUFPLENBQUM7Y0FDeEU7WUFDRjtVQUFDO1lBR0g7WUFDQTtZQUNBO1lBQ0E7WUFDTWUsZUFBZSxJQUFBNUMsaUJBQUEsR0FBR2lFLE1BQU0sQ0FBQ2tCLFNBQVMsY0FBQW5GLGlCQUFBLHVCQUFoQkEsaUJBQUEsQ0FBa0J4RixNQUFNO1lBQzFDcUksY0FBYyxHQUFHL0gscUJBQXFCLENBQUNyRSxPQUFPO1lBQ3BEcUUscUJBQXFCLENBQUNyRSxPQUFPLEdBQUcsSUFBSSxFQUFDO1lBQy9CcU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDRCxjQUFjLElBQUluQyxlQUFlLENBQUM5TixRQUFRLENBQUNpUSxjQUFjLENBQUNuTixRQUFRLENBQUM7WUFDekZxTixtQkFBbUIsR0FBRyxDQUFDLENBQUNGLGNBQWMsSUFBSWxDLGlCQUFpQixDQUFDL04sUUFBUSxDQUFDaVEsY0FBYyxDQUFDbk4sUUFBUSxDQUFDO1lBRW5HLElBQUlrTixlQUFlLEtBQUsvQixXQUFXLElBQUlDLGFBQWEsSUFBSWdDLGlCQUFpQixJQUFJQyxtQkFBbUIsQ0FBQyxFQUFFO2NBQzNGRSxrQkFBd0MsR0FBR0osY0FBYyxHQUMxRDtnQkFBRWhPLFNBQVMsRUFBRWdPLGNBQWMsQ0FBQ25OLFFBQVE7Z0JBQUV0QixTQUFTLEdBQUE0TyxxQkFBQSxHQUFFSCxjQUFjLENBQUN1QyxRQUFRLGNBQUFwQyxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLENBQUM7Y0FBRSxDQUFDLEdBQ2pGLElBQUk7Y0FDRkUsZUFBZSxHQUFHLEdBQUEzUSxNQUFBLENBQUFxUixrQkFBQSxDQUNuQnRRLG9DQUFvQyxDQUFDQyxjQUFjLENBQUMsR0FBQXFRLGtCQUFBLENBQ3BEcEMsZUFBZSxHQUFBb0Msa0JBQUEsQ0FDZm5DLHlCQUF5QixHQUFBbUMsa0JBQUEsQ0FDeEJYLGtCQUFrQixHQUFHM1Asb0NBQW9DLENBQUMsQ0FBQzJQLGtCQUFrQixDQUFDLENBQUMsR0FBRyxFQUFFLEdBQ3hGN1EsR0FBRyxDQUFDeUIsTUFBTSxDQUFDO2NBQ2IsSUFBSXFQLGVBQWUsQ0FBQ3RRLFFBQVEsQ0FBQ2lCLE1BQU0sQ0FBQytPLGVBQWUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3JELENBQUFPLGtCQUFBLEdBQUFjLE1BQU0sQ0FBQ2tCLFNBQVMsY0FBQWhDLGtCQUFBLGdCQUFBQyxxQkFBQSxHQUFoQkQsa0JBQUEsQ0FBa0JrQyxXQUFXLGNBQUFqQyxxQkFBQSxlQUE3QkEscUJBQUEsQ0FBQTRCLElBQUEsQ0FBQTdCLGtCQUFnQyxDQUFDO2NBQ25DO1lBQ0Y7WUFFQTFHLGVBQWUsQ0FBQ3JGLFNBQVMsRUFBQTFGLGFBQUEsQ0FBQUEsYUFBQTtjQUN2QkQsRUFBRSxZQUFBYyxNQUFBLENBQVlxTixlQUFlLENBQUU7Y0FDL0I5SSxPQUFPLEVBQUV3SixZQUFZO2NBQ3JCMUIsSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO2NBQ2hCQyxJQUFJLEVBQUU7Z0JBQUVyTixFQUFFLEVBQUUsV0FBVztnQkFBRUcsSUFBSSxFQUFFO2NBQVksQ0FBQztjQUM1Q3lCLElBQUksRUFBRWhFLGVBQWUsQ0FBQzBQLFNBQVM7Y0FDL0JZLE9BQU8sRUFBUEE7WUFBTyxHQUNIaFAsV0FBVyxDQUFDOFMsTUFBTSxHQUFHLENBQUMsR0FBRztjQUFFOVMsV0FBVyxFQUFYQTtZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7Y0FDakRpUCxlQUFlLEVBQWZBLGVBQWU7Y0FDZkMsV0FBVyxFQUFFQSxXQUFXLElBQUk7WUFBRSxHQUMxQm9CLG1CQUFtQixHQUFHO2NBQUVBLG1CQUFtQixFQUFuQkE7WUFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN2RCxDQUFDO1lBQ0ZwRSxnQkFBZ0IsQ0FBQ3pGLFNBQVMsQ0FBQztZQUUzQixLQUFBNkksb0JBQUEsR0FBSWdCLG1CQUFtQixjQUFBaEIsb0JBQUEsZUFBbkJBLG9CQUFBLENBQXFCekssT0FBTyxFQUFFO2NBQ2hDN0YsZ0JBQWdCLENBQUNzUixtQkFBbUIsQ0FBQ3pMLE9BQU8sQ0FBQyxDQUMxQzhQLElBQUksQ0FBQyxVQUFBQyxTQUFTLEVBQUk7Z0JBQ2pCekgsUUFBUSxDQUFDQyxhQUFhLENBQ3BCLElBQUlILFdBQVcsQ0FBQyxvQ0FBb0MsRUFBRTtrQkFDcERDLE1BQU0sRUFBRTtvQkFBRXpFLEtBQUssRUFBRW1NO2tCQUFVO2dCQUM3QixDQUFDLENBQ0gsQ0FBQztjQUNILENBQUMsQ0FBQyxTQUNJLENBQUMsVUFBQUMsR0FBRyxFQUFJO2dCQUNackwsT0FBTyxDQUFDc0wsS0FBSyxDQUFDLHVFQUF1RSxFQUFFRCxHQUFHLENBQUM7Y0FDN0YsQ0FBQyxDQUFDO1lBQ047WUFFQSxLQUFBdEYsa0JBQUEsR0FBSWtCLGlCQUFpQixjQUFBbEIsa0JBQUEsZUFBakJBLGtCQUFBLENBQW1CMUssT0FBTyxFQUFFO2NBQzlCN0YsZ0JBQWdCLENBQUN5UixpQkFBaUIsQ0FBQzVMLE9BQU8sQ0FBQyxDQUN4QzhQLElBQUksQ0FBQyxVQUFBQyxTQUFTLEVBQUk7Z0JBQ2pCekgsUUFBUSxDQUFDQyxhQUFhLENBQ3BCLElBQUlILFdBQVcsQ0FBQyxrQ0FBa0MsRUFBRTtrQkFDbERDLE1BQU0sRUFBRTtvQkFBRXpFLEtBQUssRUFBRW1NO2tCQUFVO2dCQUM3QixDQUFDLENBQ0gsQ0FBQztjQUNILENBQUMsQ0FBQyxTQUNJLENBQUMsVUFBQUMsR0FBRyxFQUFJO2dCQUNackwsT0FBTyxDQUFDc0wsS0FBSyxDQUFDLHlEQUF5RCxFQUFFRCxHQUFHLENBQUM7Y0FDL0UsQ0FBQyxDQUFDO1lBQ047WUFFQXhLLGVBQWUsQ0FBQ3ZFLE9BQU8sR0FBRyxLQUFLO1lBQy9CLElBQUl3RSxZQUFZLENBQUN4RSxPQUFPLEVBQUU7Y0FDbEJrSCxXQUFXLEdBQUcsSUFBSUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDO2NBQ3RERSxRQUFRLENBQUNDLGFBQWEsQ0FBQ0osV0FBVyxDQUFDO2NBQ25DMUMsWUFBWSxDQUFDeEUsT0FBTyxHQUFHLEtBQUs7WUFDOUI7VUFBQztVQUFBO1lBQUEsT0FBQTZNLFFBQUEsQ0FBQW9DLElBQUE7UUFBQTtNQUFBLEdBQUFoRyxPQUFBO0lBQUEsQ0FDRjtJQUFBLGlCQUFBaUcsRUFBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQTtNQUFBLE9BQUEzRyxLQUFBLENBQUE0RyxLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEtBQ0QsQ0FBQzFKLGVBQWUsRUFBRUUsZUFBZSxFQUFFRSxnQkFBZ0IsRUFBRTlELE9BQU8sRUFBRWMsaUJBQWlCLEVBQUVMLEtBQUssRUFBRUosS0FBSyxDQUMvRixDQUFDO0VBRUQsSUFBTWdOLGdCQUFnQixHQUFHOVgsV0FBVyxDQUFDLFlBQU07SUFDekM7SUFDQSxJQUFNOEksU0FBUyxHQUFHdUQsYUFBYSxDQUFDbEUsT0FBTztJQUN2QzJFLGdCQUFnQixDQUFDM0UsT0FBTyxDQUFDLENBQUM7SUFDMUIsSUFBTTBKLGFBQWEsYUFBQTVOLE1BQUEsQ0FBYWtJLGdCQUFnQixDQUFDaEUsT0FBTyxlQUFZO0lBQ3BFM0csb0JBQW9CLENBQUMyTyxLQUFLLENBQUNySCxTQUFTLENBQUM7SUFDckM4RCx5QkFBeUIsQ0FBQ3pFLE9BQU8sR0FBRyxJQUFJO0lBQ3hDMEUscUJBQXFCLENBQUMxRSxPQUFPLEdBQUcsSUFBSTtJQUNwQ2tHLGVBQWUsQ0FBQ3ZGLFNBQVMsRUFBRStJLGFBQWEsQ0FBQztJQUV6QzFELGVBQWUsQ0FBQ3JGLFNBQVMsRUFBRTtNQUN6QjNGLEVBQUUsWUFBQWMsTUFBQSxDQUFZa0ksZ0JBQWdCLENBQUNoRSxPQUFPLGVBQVk7TUFDbERLLE9BQU8sRUFBRXJDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQztNQUM1Qm1LLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztNQUNoQkMsSUFBSSxFQUFFO1FBQUVyTixFQUFFLEVBQUUsV0FBVztRQUFFRyxJQUFJLEVBQUU7TUFBWSxDQUFDO01BQzVDeUIsSUFBSSxFQUFFaEUsZUFBZSxDQUFDMFAsU0FBUztNQUMvQnNILG1CQUFtQixFQUFFO0lBQ3ZCLENBQUMsQ0FBQztJQUNGeEosZ0JBQWdCLENBQUN6RixTQUFTLENBQUM7SUFDM0I0RCxlQUFlLENBQUN2RSxPQUFPLEdBQUcsS0FBSztJQUMvQjZQLFVBQVUsQ0FBQyxZQUFNO01BQ2YsSUFBTTNJLFdBQVcsR0FBRyxJQUFJQyxXQUFXLENBQUMsaUJBQWlCLENBQUM7TUFDdERFLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixXQUFXLENBQUM7SUFDckMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUNULENBQUMsRUFBRSxDQUFDbEIsZUFBZSxFQUFFRSxlQUFlLEVBQUVFLGdCQUFnQixFQUFFcEksQ0FBQyxDQUFDLENBQUM7RUFFM0QsSUFBTThSLHNCQUFzQixHQUFHalksV0FBVyxDQUN4QyxVQUFDNlAsR0FBa0IsRUFBRW5ILFFBQXlCLEVBQUV3UCxrQkFBMEIsRUFBSztJQUFBLElBQUFDLHFCQUFBO0lBQzdFLElBQVFyUCxTQUFTLEdBQW9CK0csR0FBRyxDQUFoQy9HLFNBQVM7TUFBRW9ILGFBQWEsR0FBS0wsR0FBRyxDQUFyQkssYUFBYTtJQUNoQyxJQUFNUCxRQUFRLEdBQUc5TixVQUFVLENBQUN1TSxFQUFFLENBQUN0RixTQUFTLENBQUM7SUFFekN0SCxvQkFBb0IsQ0FBQzJPLEtBQUssQ0FBQ3JILFNBQVMsQ0FBQztJQUNyQ3VGLGVBQWUsQ0FBQ3ZGLFNBQVMsRUFBRW9ILGFBQWEsQ0FBQztJQUV6QyxJQUFJUCxRQUFRLEVBQUU7TUFDWi9DLHlCQUF5QixDQUFDekUsT0FBTyxHQUFHLElBQUk7TUFDeEMwRSxxQkFBcUIsQ0FBQzFFLE9BQU8sR0FBRyxJQUFJO0lBQ3RDO0lBRUEsSUFBTWlRLFdBQWlDLEdBQUc7TUFDeEM5SixTQUFTLGNBQUFySyxNQUFBLENBQWN5RSxRQUFRLENBQUMyUCxrQkFBa0IsQ0FBRTtNQUNwREMsV0FBVyxFQUFFSixrQkFBa0IsSUFBSSxFQUFFO01BQ3JDeFAsUUFBUSxFQUFSQSxRQUFRO01BQ1J6RCxjQUFjLEVBQUV5RCxRQUFRLENBQUNDLGVBQWU7TUFDeENOLFNBQVMsR0FBQThQLHFCQUFBLEdBQUV6UCxRQUFRLENBQUNDLGVBQWUsY0FBQXdQLHFCQUFBLHVCQUF4QkEscUJBQUEsQ0FBMEJyVSxHQUFHLENBQUMsVUFBQTZCLE1BQU07UUFBQSxPQUFJQSxNQUFNLENBQUNrRCxTQUFTO01BQUE7SUFDckUsQ0FBQztJQUNELElBQUk4RyxRQUFRLEVBQUU7TUFDWmxELHVCQUF1QixDQUFDdEUsT0FBTyxHQUFHaVEsV0FBVztJQUMvQztJQUVBLElBQUkxUCxRQUFRLENBQUM2UCx3QkFBd0IsRUFBRTtNQUFBLElBQUFDLHNCQUFBLEVBQUFDLEtBQUEsRUFBQUMsVUFBQSxFQUFBQyxVQUFBO01BQ3JDLElBQU1DLFdBQVcsSUFBQUosc0JBQUEsR0FBRzlQLFFBQVEsQ0FBQ0MsZUFBZSxjQUFBNlAsc0JBQUEsdUJBQXhCQSxzQkFBQSxDQUEyQixDQUFDLENBQUM7TUFDakQsSUFBTXBSLFFBQVEsSUFBQXFSLEtBQUEsSUFBQUMsVUFBQSxHQUFJaFEsUUFBUSxDQUE0Qm5DLFNBQVMsY0FBQW1TLFVBQUEsY0FBQUEsVUFBQSxHQUFJRSxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRXJTLFNBQVMsY0FBQWtTLEtBQUEsY0FBQUEsS0FBQSxHQUFJLEVBQUU7TUFDL0YsSUFBTTNCLFFBQVEsR0FDWixFQUFBNkIsVUFBQSxHQUFFalEsUUFBUSxDQUE2QzVDLFNBQVMsY0FBQTZTLFVBQUEsY0FBQUEsVUFBQSxHQUM3REMsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUU5UyxTQUFTLEtBQ3pCLElBQUk7TUFDTixJQUFJc0IsUUFBUSxJQUFJdUksUUFBUSxFQUFFO1FBQ3hCbkQscUJBQXFCLENBQUNyRSxPQUFPLEdBQUc7VUFBRWYsUUFBUSxFQUFSQSxRQUFRO1VBQUUwUCxRQUFRLEVBQVJBO1FBQVMsQ0FBQztNQUN4RDtNQUNBLElBQUluSCxRQUFRLEVBQUU7UUFDWmpELGVBQWUsQ0FBQ3ZFLE9BQU8sR0FBRyxLQUFLO01BQ2pDO01BQ0E7SUFDRjs7SUFFQTtJQUNBZ0csZUFBZSxDQUFDckYsU0FBUyxFQUFFO01BQ3pCM0YsRUFBRSxjQUFBYyxNQUFBLENBQWN5RSxRQUFRLENBQUMyUCxrQkFBa0IsQ0FBRTtNQUM3QzdQLE9BQU8sRUFBRTBQLGtCQUFrQixJQUFJLEVBQUU7TUFDakM1SCxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7TUFDaEJDLElBQUksRUFBRTtRQUFFck4sRUFBRSxFQUFFLFdBQVc7UUFBRUcsSUFBSSxFQUFFO01BQVksQ0FBQztNQUM1Q3lCLElBQUksRUFBRWhFLGVBQWUsQ0FBQzBQLFNBQVM7TUFDL0IvSCxRQUFRLEVBQVJBLFFBQVE7TUFDUmdOLGNBQWMsRUFBRTtJQUNsQixDQUFDLENBQUM7SUFDRixJQUFJL0YsUUFBUSxFQUFFO01BQ1pqRCxlQUFlLENBQUN2RSxPQUFPLEdBQUcsS0FBSztJQUNqQyxDQUFDLE1BQU07TUFDTHJHLGlDQUFpQyxDQUFDZ0gsU0FBUyxFQUFFLG1CQUFtQixDQUFDO0lBQ25FO0VBQ0YsQ0FBQyxFQUNELENBQUNxRixlQUFlLEVBQUVFLGVBQWUsQ0FDbkMsQ0FBQztFQUVELElBQUF3SyxxQkFBQSxHQVFJdFkscUJBQXFCLENBQUM7TUFDeEI4TSxlQUFlLEVBQWZBLGVBQWU7TUFDZmpELE9BQU8sRUFBRXdGLGlCQUFpQjtNQUMxQmtKLGNBQWMsRUFBRXBJLGtCQUFrQjtNQUNsQ3FJLGNBQWMsRUFBRWhJLGtCQUFrQjtNQUNsQ2lJLE1BQU0sRUFBRWxCLGdCQUFnQjtNQUN4Qm1CLGtCQUFrQixFQUFFaEIsc0JBQXNCO01BQzFDeEwsdUJBQXVCLEVBQXZCQTtJQUNGLENBQUMsQ0FBQztJQWZBeU0sT0FBTyxHQUFBTCxxQkFBQSxDQUFQSyxPQUFPO0lBQ0lDLGVBQWUsR0FBQU4scUJBQUEsQ0FBMUJPLFNBQVM7SUFDVEMsU0FBUyxHQUFBUixxQkFBQSxDQUFUUSxTQUFTO0lBQ1RDLGNBQWMsR0FBQVQscUJBQUEsQ0FBZFMsY0FBYztJQUNkQyxjQUFjLEdBQUFWLHFCQUFBLENBQWRVLGNBQWM7SUFDZEMsb0JBQW9CLEdBQUFYLHFCQUFBLENBQXBCVyxvQkFBb0I7SUFDcEJDLGFBQWEsR0FBQVoscUJBQUEsQ0FBYlksYUFBYTtFQVdmM00sZ0JBQWdCLENBQUMzRSxPQUFPLEdBQUcsWUFBTTtJQUMvQnFSLG9CQUFvQixDQUFDLElBQUksQ0FBQztJQUMxQnRNLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCVCx1QkFBdUIsQ0FBQ3RFLE9BQU8sR0FBRyxJQUFJO0VBQ3hDLENBQUM7RUFFRCxJQUFNdVIsY0FBYyxHQUFHalAsT0FBTztFQUU5QixJQUFNa1AsV0FBVyxHQUFHM1osV0FBVztJQUFBLElBQUE0WixLQUFBLEdBQUEzSSxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQzdCLFNBQUEwSSxTQUNFclIsT0FBZSxFQUNmdkcsb0JBQTRELEVBQzVENlgsS0FBYyxFQUNkQyxpQkFBMEIsRUFDMUJDLFFBQTJCLEVBQzNCQyxLQUFjLEVBQ2RDLElBQWE7TUFBQSxJQUFBQyxvQkFBQTtNQUFBLElBQUFDLGtCQUFBLEVBQUFDLHFCQUFBLEVBQUFoWSxXQUFBLEVBQUFDLE9BQUEsRUFBQWdZLGlCQUFBLEVBQUFDLGNBQUEsRUFBQUMsWUFBQSxFQUFBQyxXQUFBLEVBQUFDLGtCQUFBLEVBQUFDLGNBQUEsRUFBQUMsWUFBQSxFQUFBQyxzQkFBQSxFQUFBQyx3QkFBQSxFQUFBaFMsU0FBQSxFQUFBaVMsbUJBQUEsRUFBQUMsZUFBQSxFQUFBL1gsVUFBQSxFQUFBRCxTQUFBLEVBQUFpWSxPQUFBLEVBQUFDLHNCQUFBLEVBQUFDLFlBQUEsRUFBQUMscUJBQUEsRUFBQUMscUJBQUEsRUFBQUMsT0FBQSxFQUFBN1ksb0JBQUEsRUFBQThZLGdCQUFBLEVBQUFDLFFBQUEsRUFBQUMsWUFBQSxFQUFBQyx3QkFBQSxFQUFBQyxXQUFBO01BQUEsT0FBQXpLLG1CQUFBLENBQUE2RCxJQUFBLFdBQUE2RyxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQTNHLElBQUEsR0FBQTJHLFNBQUEsQ0FBQTFHLElBQUE7VUFBQTtZQUFBLE1BRVR4SSxlQUFlLENBQUN2RSxPQUFPLElBQUlnUixlQUFlLElBQUl0TCxlQUFlO2NBQUErTixTQUFBLENBQUExRyxJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUEwRyxTQUFBLENBQUF4RyxNQUFBO1VBQUE7WUFJakU7WUFDQTtZQUNNZ0Ysa0JBQWtCLEdBQUcsQ0FBQ3pZLG9CQUFvQixDQUFDZ08sUUFBUSxDQUFDdEQsYUFBYSxDQUFDbEUsT0FBTyxDQUFDO1lBQUEsTUFDNUVpUyxrQkFBa0IsSUFBSXpZLG9CQUFvQixDQUFDa2EsY0FBYyxDQUFDLENBQUMsSUFBSWphLHNCQUFzQjtjQUFBZ2EsU0FBQSxDQUFBMUcsSUFBQTtjQUFBO1lBQUE7WUFDdkYxRixRQUFRLENBQUNDLGFBQWEsQ0FDcEIsSUFBSUgsV0FBVyxDQUFDLGdCQUFnQixFQUFFO2NBQ2hDQyxNQUFNLEVBQUU7Z0JBQUV1TSxJQUFJLEVBQUUsSUFBSTtnQkFBRUMsUUFBUSxFQUFFLE1BQU07Z0JBQUV2VCxPQUFPLEVBQUVyQyxDQUFDLENBQUMsNEJBQTRCO2NBQUU7WUFDbkYsQ0FBQyxDQUNILENBQUM7WUFBQSxPQUFBeVYsU0FBQSxDQUFBeEcsTUFBQTtVQUFBO1lBQUFpRixxQkFBQSxHQUk4QnJZLHdCQUF3QixDQUFDQyxvQkFBb0IsQ0FBQyxFQUF2RUksV0FBVyxHQUFBZ1kscUJBQUEsQ0FBWGhZLFdBQVcsRUFBRUMsT0FBTyxHQUFBK1gscUJBQUEsQ0FBUC9YLE9BQU8sRUFDNUI7WUFDQTtZQUNNZ1ksaUJBQWlCLEdBQUdOLFFBQVEsYUFBUkEsUUFBUSxjQUFSQSxRQUFRLEdBQUkxWCxPQUFPLENBQUMwWCxRQUFRO1lBQ2hETyxjQUEwQyxHQUFHdlosbUJBQW1CLENBQUNzWixpQkFBaUIsQ0FBQztZQUNuRkUsWUFBWSxHQUFHUCxLQUFLLGFBQUxBLEtBQUssY0FBTEEsS0FBSyxHQUFJM1gsT0FBTyxDQUFDMlgsS0FBSztZQUNyQ1EsV0FBVyxHQUFHUCxJQUFJLGFBQUpBLElBQUksY0FBSkEsSUFBSSxHQUFJNVgsT0FBTyxDQUFDNFgsSUFBSTtZQUNsQ1Esa0JBQWtCLEdBQUdwWSxPQUFPLENBQUMwWixXQUFXO1lBQ3hDckIsY0FBYyxHQUFHMVosa0NBQWtDLENBQUN1SCxPQUFPLEVBQUU7Y0FDakV5UixLQUFLLEVBQUVPLFlBQVk7Y0FDbkJOLElBQUksRUFBRU87WUFDUixDQUFDLENBQUM7WUFFRi9OLGVBQWUsQ0FBQ3ZFLE9BQU8sR0FBRyxJQUFJO1lBQ3hCeVMsWUFBWSxHQUFHdmEsTUFBTSxDQUFDLENBQUM7WUFDN0I4TCxnQkFBZ0IsQ0FBQ2hFLE9BQU8sR0FBR3lTLFlBQVk7WUFDdkN4TyxtQkFBbUIsQ0FBQ2pFLE9BQU8sR0FBR0ssT0FBTztZQUVyQyxJQUFJLENBQUM4RCxhQUFhLENBQUNuRSxPQUFPLEVBQUU7Y0FDMUIrQyxLQUFLLENBQUN2SyxNQUFNLENBQUNzYixhQUFhLENBQUM7Y0FDM0IzUCxhQUFhLENBQUNuRSxPQUFPLEdBQUcsSUFBSTtZQUM5Qjs7WUFFQTtZQUNNMFMsc0JBQXNCLEdBQUd0TyxXQUFXLENBQUNwRSxPQUFPLENBQUN4RSxNQUFNLENBQUMsVUFBQXdMLEdBQUc7Y0FBQSxPQUFJQSxHQUFHLENBQUN4TSxTQUFTO1lBQUEsRUFBQyxDQUFDOFMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWhGcUYsd0JBQXdCLElBQUFYLG9CQUFBLEdBQUc1TixXQUFXLENBQUNwRSxPQUFPLGNBQUFnUyxvQkFBQSxnQkFBQUEsb0JBQUEsR0FBbkJBLG9CQUFBLENBQXNCNU4sV0FBVyxDQUFDcEUsT0FBTyxDQUFDZ04sTUFBTSxHQUFHLENBQUMsQ0FBQyxjQUFBZ0Ysb0JBQUEsdUJBQXJEQSxvQkFBQSxDQUF1RGpULE9BQU87WUFFekY0QixTQUFTLEdBQUd1RCxhQUFhLENBQUNsRSxPQUFPO1lBQUE0UyxtQkFBQSxHQU1uQ3BOLFVBQVUsQ0FBQ3hGLE9BQU8sRUFKTjZTLGVBQWUsR0FBQUQsbUJBQUEsQ0FBN0J2WSxZQUFZLEVBQ0hTLFVBQVUsR0FBQThYLG1CQUFBLENBQW5CdFEsT0FBTyxFQUNDekgsU0FBUyxHQUFBK1gsbUJBQUEsQ0FBakJ2WCxNQUFNLEVBQ0F5WCxPQUFPLEdBQUFGLG1CQUFBLENBQWJuUSxJQUFJLEVBR047WUFDQXVELGVBQWUsQ0FBQ3JGLFNBQVMsRUFBQTFGLGFBQUE7Y0FDdkJELEVBQUUsY0FBQWMsTUFBQSxDQUFja0ksZ0JBQWdCLENBQUNoRSxPQUFPLENBQUU7Y0FDMUNLLE9BQU8sRUFBRW1TLGNBQWM7Y0FDdkJySyxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7Y0FDaEJDLElBQUksRUFBRTFJLFdBQVc7Y0FDakIvQyxJQUFJLEVBQUVoRSxlQUFlLENBQUNtYixJQUFJO2NBQzFCN0ssT0FBTyxFQUFFaFA7WUFBVyxHQUNoQmtZLGNBQWMsR0FBRztjQUFFQSxjQUFjLEVBQWRBO1lBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUM3QyxDQUFDO1lBRUZwTyxnQkFBZ0IsQ0FBQ2hFLE9BQU8sR0FBRzlILE1BQU0sQ0FBQyxDQUFDO1lBRTdCNmEsc0JBQXNCLGFBQUFqWCxNQUFBLENBQWFrSSxnQkFBZ0IsQ0FBQ2hFLE9BQU87WUFDakV5RSx5QkFBeUIsQ0FBQ3pFLE9BQU8sR0FBRytTLHNCQUFzQjtZQUMxRHJPLHFCQUFxQixDQUFDMUUsT0FBTyxHQUFHVyxTQUFTO1lBQ3pDdEgsb0JBQW9CLENBQUNxUCxLQUFLLENBQUMvSCxTQUFTLEVBQUVvUyxzQkFBc0IsQ0FBQztZQUM3RC9NLGVBQWUsQ0FBQ3JGLFNBQVMsRUFBRTtjQUN6QjNGLEVBQUUsRUFBRStYLHNCQUFzQjtjQUMxQjFTLE9BQU8sRUFBRSxFQUFFO2NBQ1g4SCxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7Y0FDaEJDLElBQUksRUFBRTtnQkFBRXJOLEVBQUUsRUFBRSxXQUFXO2dCQUFFRyxJQUFJLEVBQUUsQ0FBQXdILEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFeEgsSUFBSSxLQUFJO2NBQVksQ0FBQztjQUMzRHlCLElBQUksRUFBRWhFLGVBQWUsQ0FBQzBQO1lBQ3hCLENBQUMsQ0FBQztZQUVFMEssWUFBWSxHQUFHM1MsT0FBTztZQUUxQixJQUFJQSxPQUFPLEtBQUtyQyxDQUFDLENBQUMsZ0NBQWdDLENBQUMsRUFBRTtjQUNuRGdWLFlBQVksV0FBQWxYLE1BQUEsQ0FBV2tDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQywrQkFBQWxDLE1BQUEsQ0FDeEQsRUFBQW1YLHFCQUFBLEdBQUE5WSxPQUFPLENBQUM2WixjQUFjLGNBQUFmLHFCQUFBLHVCQUF0QkEscUJBQUEsQ0FBd0JnQixVQUFVLE9BQUFmLHFCQUFBLEdBQUkxTixVQUFVLENBQUN4RixPQUFPLENBQUNzQyxPQUFPLGNBQUE0USxxQkFBQSx1QkFBMUJBLHFCQUFBLENBQTRCZSxVQUFVLEVBQzVFO1lBQ0o7WUFFTWQsT0FBTyxHQUFHL08sV0FBVyxDQUFDcEUsT0FBTyxDQUFDckUsR0FBRyxDQUFDLFVBQUF1WSxjQUFjO2NBQUEsT0FBSztnQkFDekQxTCxPQUFPLEVBQUUwTCxjQUFjLENBQUM3VCxPQUFPO2dCQUMvQnpELElBQUksRUFBRXNYLGNBQWMsQ0FBQzdMLElBQUksQ0FBQ3JOLEVBQUUsS0FBSzBFLFFBQVEsQ0FBQzFFLEVBQUUsQ0FBQzRFLFFBQVEsQ0FBQyxDQUFDLEdBQUdoSCxlQUFlLENBQUNtYixJQUFJLEdBQUduYixlQUFlLENBQUMwUDtjQUNuRyxDQUFDO1lBQUEsQ0FBQyxDQUFDO1lBRUdoTyxvQkFBb0IsR0FBR29ZLHNCQUFzQixhQUF0QkEsc0JBQXNCLHVCQUF0QkEsc0JBQXNCLENBQUVsWSxTQUFTO1lBQ3hENFksZ0JBQWdCLEdBQUdoWix1QkFBdUIsQ0FBQ3lZLGVBQWUsRUFBRXZZLG9CQUFvQixDQUFDO1lBRXZGb0osT0FBTyxDQUFDQyxJQUFJLENBQUMsa0RBQWtELEVBQUU7Y0FDL0R0SixZQUFZLEVBQUV3WSxlQUFlO2NBQzdCdFksY0FBYyxFQUFFc1ksZUFBZSxhQUFmQSxlQUFlLGVBQWZBLGVBQWUsQ0FBRXJZLFNBQVMsR0FBR0MsTUFBTSxDQUFDb1ksZUFBZSxDQUFDclksU0FBUyxDQUFDLEdBQUcsSUFBSTtjQUNyRkYsb0JBQW9CLEVBQXBCQSxvQkFBb0I7Y0FDcEI4WSxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtjQUNoQmxZLFFBQVEsRUFBRUwsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUVHLEVBQUU7Y0FDdkIrSSxNQUFNLEVBQUUrTyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTlYLEVBQUU7Y0FDbkI4SSxhQUFhLEVBQUVoSixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRUUsRUFBRTtjQUM3Qm1aLFNBQVMsRUFBRXhSLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNUc7WUFDcEIsQ0FBQyxDQUFDO1lBQUEwWCxTQUFBLENBQUExRyxJQUFBO1lBQUEsT0FFcUI5SixhQUFhLENBQUMsQ0FBQ21RLGdCQUFnQixDQUFDLENBQUM7VUFBQTtZQUFsREMsUUFBUSxHQUFBSSxTQUFBLENBQUF6RixJQUFBO1lBRVJzRixZQUFZLEdBQUczQixLQUFLLGFBQUxBLEtBQUssY0FBTEEsS0FBSyxHQUFJeFgsT0FBTyxDQUFDd1gsS0FBSztZQUNyQzRCLHdCQUF3QixHQUFHM0IsaUJBQWlCLGFBQWpCQSxpQkFBaUIsY0FBakJBLGlCQUFpQixHQUFJelgsT0FBTyxDQUFDeVgsaUJBQWlCO1lBRXpFNEIsV0FBVyxHQUFBdlksYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBO2NBQ2ZvRixPQUFPLEVBQUUyUyxZQUFZO2NBQ3JCRyxPQUFPLEVBQVBBLE9BQU87Y0FDUDNZLFNBQVMsRUFBRTRZLGdCQUFnQjtjQUMzQmdCLElBQUksRUFBRTFVLFFBQVEsQ0FBQzBVLElBQUk7Y0FDbkJDLE1BQU0sRUFBRTNVLFFBQVEsQ0FBQzFFLEVBQUUsQ0FBQzRFLFFBQVEsQ0FBQyxDQUFDO2NBQzlCQyxTQUFTLEVBQUVILFFBQVEsQ0FBQ0csU0FBUztjQUM3QnlVLFFBQVEsRUFBRTVVLFFBQVEsQ0FBQzRVLFFBQVE7Y0FDM0JDLFNBQVMsRUFBRTdVLFFBQVEsQ0FBQzhVLFVBQVUsQ0FBQzVVLFFBQVEsQ0FBQyxDQUFDO2NBQ3pDbUMsTUFBTSxFQUFFbUMsYUFBYSxDQUFDbEUsT0FBTztjQUM3Qm1HLFNBQVMsRUFBRW5DLGdCQUFnQixDQUFDaEUsT0FBTztjQUNuQ3lVLFNBQVMsRUFBRSxDQUFBOVIsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV4SCxJQUFJLEtBQUksRUFBRTtjQUM1QjRELE9BQU8sRUFBRTRULHdCQUF3QixLQUFJaFEsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUUzSCxFQUFFLENBQUM7Y0FDL0M0SCxpQkFBaUIsRUFBRTBDLG9CQUFvQixDQUFDdEYsT0FBTztjQUMvQzZDLGtCQUFrQixFQUFFMEMscUJBQXFCLENBQUN2RjtZQUFPLEdBQzdDLENBQUFsRixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRTRaLEtBQUssS0FBSSxJQUFJLEdBQUc7Y0FBRUEsS0FBSyxFQUFFamEsTUFBTSxDQUFDSyxVQUFVLENBQUM0WixLQUFLO1lBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNyRTlaLG9CQUFvQixDQUFDQyxTQUFTLEVBQUVDLFVBQVUsQ0FBQyxHQUMxQ3VZLFFBQVEsYUFBUkEsUUFBUSxlQUFSQSxRQUFRLENBQUVyRyxNQUFNLEdBQUc7Y0FBRW5KLFdBQVcsRUFBRXdQLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ2xZO1lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUN6RCxDQUFBMlgsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUU5WCxFQUFFLEtBQUksSUFBSSxHQUFBQyxhQUFBO2NBQ2pCOEksTUFBTSxFQUFFdEosTUFBTSxDQUFDcVksT0FBTyxDQUFDOVgsRUFBRTtZQUFDLEdBQU04WCxPQUFPLENBQUMzWCxJQUFJLEdBQUc7Y0FBRXdaLFFBQVEsRUFBRTdCLE9BQU8sQ0FBQzNYO1lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUNoRixDQUFDLENBQUMsR0FDRmpCLFdBQVcsQ0FBQzhTLE1BQU0sR0FBRyxDQUFDLEdBQUc7Y0FBRTlTLFdBQVcsRUFBWEE7WUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQzdDb1osWUFBWSxHQUFHO2NBQUUzQixLQUFLLEVBQUUyQjtZQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDM0NDLHdCQUF3QixHQUFHO2NBQUUzQixpQkFBaUIsRUFBRTJCO1lBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDL0VsQixZQUFZLEdBQUc7Y0FBRVAsS0FBSyxFQUFFTztZQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDM0NDLFdBQVcsR0FBRztjQUFFUCxJQUFJLEVBQUVPO1lBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUN4QyxDQUFBM1AsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVpUyxNQUFNLEtBQUksSUFBSSxHQUFHO2NBQUVDLFdBQVcsRUFBRWxTLEtBQUssQ0FBQ2lTO1lBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUMxRCxDQUFBalMsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU1RyxJQUFJLEtBQUksSUFBSSxHQUFHO2NBQUVvWSxTQUFTLEVBQUV4UixLQUFLLENBQUM1RztZQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDcEQsQ0FBQTRHLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFbVMsS0FBSyxLQUFJLElBQUksR0FBRztjQUFFQyxVQUFVLEVBQUVwUyxLQUFLLENBQUNtUztZQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDdkQxQyxjQUFjLEdBQUc7Y0FBRUEsY0FBYyxFQUFkQTtZQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDeENHLGtCQUFrQixHQUFHO2NBQUVzQixXQUFXLEVBQUV0QjtZQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBR25FeEIsT0FBTyxDQUFDeUMsV0FBVyxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUFDLFNBQUEsQ0FBQXhFLElBQUE7UUFBQTtNQUFBLEdBQUF5QyxRQUFBO0lBQUEsQ0FDckI7SUFBQSxpQkFBQXNELEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUE7TUFBQSxPQUFBN0QsS0FBQSxDQUFBaEMsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQ0U3SixVQUFVLEVBQ1ZHLGVBQWUsRUFDZmpELEtBQUssRUFDTGdPLE9BQU8sRUFDUHpPLE9BQU8sRUFDUGpILE1BQU0sRUFDTm9ILElBQUksRUFDSnBJLFlBQVksRUFDWnFGLFFBQVEsRUFDUmlELEtBQUssRUFDTDNFLENBQUMsRUFDRGdULGVBQWUsRUFDZnRMLGVBQWUsRUFDZjlDLGlCQUFpQixFQUNqQkMsa0JBQWtCLENBRXRCLENBQUM7RUFFRCxJQUFNMFMsYUFBYSxHQUFHMWQsV0FBVyxDQUMvQixVQUFDaVcsTUFBZSxFQUFLO0lBQ25CLElBQUksQ0FBQzdKLG1CQUFtQixDQUFDakUsT0FBTyxFQUFFO0lBRWxDLElBQUk4TixNQUFNLENBQUM5UyxFQUFFLE1BQUtzSCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXRILEVBQUUsR0FBRTtNQUM3QnVILFVBQVUsQ0FBQ3VMLE1BQU0sQ0FBQztJQUNwQjtJQUVBLElBQUl4TCxPQUFPLElBQUkyQixtQkFBbUIsQ0FBQ2pFLE9BQU8sRUFBRTtNQUFBLElBQUF3VixZQUFBLEVBQUFDLHNCQUFBO01BQzFDLElBQU10QyxPQUFPLEdBQUcvTyxXQUFXLENBQUNwRSxPQUFPLENBQUNyRSxHQUFHLENBQUMsVUFBQXVZLGNBQWM7UUFBQSxPQUFLO1VBQ3pEMUwsT0FBTyxFQUFFMEwsY0FBYyxDQUFDN1QsT0FBTztVQUMvQnpELElBQUksRUFBRXNYLGNBQWMsQ0FBQzdMLElBQUksQ0FBQ3JOLEVBQUUsS0FBSzBFLFFBQVEsQ0FBQzFFLEVBQUUsQ0FBQzRFLFFBQVEsQ0FBQyxDQUFDLEdBQUdoSCxlQUFlLENBQUNtYixJQUFJLEdBQUduYixlQUFlLENBQUMwUDtRQUNuRyxDQUFDO01BQUEsQ0FBQyxDQUFDO01BRUg1RSxPQUFPLENBQUNDLElBQUksQ0FBQyxnRkFBZ0YsRUFBRTtRQUM3RitSLFFBQVEsRUFBRTVILE1BQU0sQ0FBQzlTLEVBQUU7UUFDbkI4SSxhQUFhLEdBQUEwUixZQUFBLEdBQUVsVCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXRILEVBQUUsY0FBQXdhLFlBQUEsY0FBQUEsWUFBQSxHQUFJLElBQUk7UUFDbENqYixjQUFjLEdBQUFrYixzQkFBQSxHQUFFcGIsWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUVHLFNBQVMsY0FBQWliLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksSUFBSTtRQUMvQ3RCLFNBQVMsRUFBRXhSLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNUc7TUFDcEIsQ0FBQyxDQUFDO01BRUZnVixPQUFPLENBQUE5VixhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBO1FBQ0xvRixPQUFPLEVBQUU0RCxtQkFBbUIsQ0FBQ2pFLE9BQU87UUFDcENtVCxPQUFPLEVBQVBBLE9BQU87UUFDUDNZLFNBQVMsRUFBRXNULE1BQU0sQ0FBQzlTLEVBQUU7UUFDcEJvWixJQUFJLEVBQUUxVSxRQUFRLENBQUMwVSxJQUFJO1FBQ25CQyxNQUFNLEVBQUUzVSxRQUFRLENBQUMxRSxFQUFFLENBQUM0RSxRQUFRLENBQUMsQ0FBQztRQUM5QkMsU0FBUyxFQUFFSCxRQUFRLENBQUNHLFNBQVM7UUFDN0J5VSxRQUFRLEVBQUU1VSxRQUFRLENBQUM0VSxRQUFRO1FBQzNCQyxTQUFTLEVBQUU3VSxRQUFRLENBQUM4VSxVQUFVLENBQUM1VSxRQUFRLENBQUMsQ0FBQztRQUN6Q21DLE1BQU0sRUFBRW1DLGFBQWEsQ0FBQ2xFLE9BQU87UUFDN0JtRyxTQUFTLEVBQUVuQyxnQkFBZ0IsQ0FBQ2hFLE9BQU87UUFDbkN5VSxTQUFTLEVBQUUsQ0FBQTlSLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFeEgsSUFBSSxLQUFJLEVBQUU7UUFDNUI0RCxPQUFPLEVBQUUsQ0FBQTRELEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFM0gsRUFBRSxLQUFJLEVBQUU7UUFDeEI0SCxpQkFBaUIsRUFBRTBDLG9CQUFvQixDQUFDdEYsT0FBTztRQUMvQzZDLGtCQUFrQixFQUFFMEMscUJBQXFCLENBQUN2RjtNQUFPLEdBQzdDLENBQUE4TixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRTRHLEtBQUssS0FBSSxJQUFJLEdBQUc7UUFBRUEsS0FBSyxFQUFFamEsTUFBTSxDQUFDcVQsTUFBTSxDQUFDNEcsS0FBSztNQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDNUQsQ0FBQTVHLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFNVMsUUFBUSxLQUFJLElBQUksR0FBRztRQUFFQSxRQUFRLEVBQUVULE1BQU0sQ0FBQ3FULE1BQU0sQ0FBQzVTLFFBQVE7TUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3JFLENBQUF5SCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWlTLE1BQU0sS0FBSSxJQUFJLEdBQUc7UUFBRUMsV0FBVyxFQUFFbFMsS0FBSyxDQUFDaVM7TUFBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQzFELENBQUFqUyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTVHLElBQUksS0FBSSxJQUFJLEdBQUc7UUFBRW9ZLFNBQVMsRUFBRXhSLEtBQUssQ0FBQzVHO01BQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN6RCxDQUFDO0lBQ0o7RUFDRixDQUFDLEVBQ0QsQ0FBQ3VHLE9BQU8sRUFBRUMsVUFBVSxFQUFFd08sT0FBTyxFQUFFclIsUUFBUSxFQUFFa0QsaUJBQWlCLEVBQUVELEtBQUssQ0FDbkUsQ0FBQztFQUVELElBQU1nVCxjQUFjLEdBQUc5ZCxXQUFXO0lBQUEsSUFBQStkLEtBQUEsR0FBQTlNLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBQyxTQUFBNk0sU0FBT0MsWUFBc0IsRUFBRUMsYUFBcUI7TUFBQSxJQUFBQyxRQUFBO01BQUEsT0FBQWpOLG1CQUFBLENBQUE2RCxJQUFBLFdBQUFxSixTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQW5KLElBQUEsR0FBQW1KLFNBQUEsQ0FBQWxKLElBQUE7VUFBQTtZQUFBa0osU0FBQSxDQUFBbEosSUFBQTtZQUFBLE9BQzlEclUsSUFBSSxDQUFDd2QsS0FBSyxDQUFDQyxjQUFjLENBQUNKLGFBQWEsRUFBRUQsWUFBWSxLQUFLbmQsUUFBUSxDQUFDeWQsU0FBUyxDQUFDO1VBQUE7WUFBOUZKLFFBQVEsR0FBQUMsU0FBQSxDQUFBakksSUFBQTtZQUNkLElBQUlnSSxRQUFRLEVBQUU7Y0FDWjVSLFdBQVcsQ0FBQ3BFLE9BQU8sR0FBR29FLFdBQVcsQ0FBQ3BFLE9BQU8sQ0FBQ3JFLEdBQUcsQ0FBQyxVQUFBMEUsT0FBTyxFQUFJO2dCQUN2RCxJQUFJQSxPQUFPLENBQUNyRixFQUFFLEtBQUsrYSxhQUFhLElBQUkxVixPQUFPLENBQUN6RCxJQUFJLEtBQUssV0FBVyxFQUFFO2tCQUNoRSxPQUFBM0IsYUFBQSxDQUFBQSxhQUFBLEtBQVlvRixPQUFPO29CQUFFZ1csVUFBVSxFQUFFUCxZQUFZLEtBQUtuZCxRQUFRLENBQUN5ZDtrQkFBUztnQkFDdEU7Z0JBQ0EsT0FBTy9WLE9BQU87Y0FDaEIsQ0FBQyxDQUFDO1lBQ0o7VUFBQztVQUFBO1lBQUEsT0FBQTRWLFNBQUEsQ0FBQWhILElBQUE7UUFBQTtNQUFBLEdBQUE0RyxRQUFBO0lBQUEsQ0FDRjtJQUFBLGlCQUFBUyxJQUFBLEVBQUFDLElBQUE7TUFBQSxPQUFBWCxLQUFBLENBQUFuRyxLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEtBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTThHLHNCQUFzQixHQUFHM2UsV0FBVztJQUFBLElBQUE0ZSxLQUFBLEdBQUEzTixpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQ3hDLFNBQUEwTixTQUNFeFcsU0FBbUIsRUFDbkIyTixRQUE4QixFQUM5QjhJLGFBQTJFO01BQUEsSUFBQWpWLEtBQUEsRUFBQWtWLG1CQUFBLEVBQUFDLGNBQUEsRUFBQXRXLFFBQUEsRUFBQUksU0FBQSxFQUFBd0YsU0FBQSxFQUFBMlEsU0FBQSxFQUFBN0csV0FBQSxFQUFBOEcsZUFBQSxFQUFBQyxlQUFBLEVBQUFDLE9BQUEsRUFBQUMsdUJBQUEsRUFBQUMsTUFBQTtNQUFBLE9BQUFwTyxtQkFBQSxDQUFBNkQsSUFBQSxXQUFBd0ssU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUF0SyxJQUFBLEdBQUFzSyxTQUFBLENBQUFySyxJQUFBO1VBQUE7WUFBQSxJQUV0RTdNLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUU4TSxNQUFNO2NBQUFvSyxTQUFBLENBQUFySyxJQUFBO2NBQUE7WUFBQTtZQUNwQnJKLE9BQU8sQ0FBQ3NMLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQztZQUFBLE9BQUFvSSxTQUFBLENBQUFuSyxNQUFBO1VBQUE7WUFJekR2TCxLQUFLLEdBQUd6QixrQ0FBa0MsQ0FBQ0MsU0FBUyxFQUFFa0UsV0FBVyxDQUFDcEUsT0FBTyxDQUFDO1lBQUEsSUFDM0UwQixLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFckIsT0FBTyxDQUFDRSxRQUFRO2NBQUE2VyxTQUFBLENBQUFySyxJQUFBO2NBQUE7WUFBQTtZQUMxQnJKLE9BQU8sQ0FBQ3NMLEtBQUssQ0FBQyxzREFBc0QsRUFBRTlPLFNBQVMsQ0FBQztZQUFBLE9BQUFrWCxTQUFBLENBQUFuSyxNQUFBO1VBQUE7WUFJakUySixtQkFBbUIsR0FBZ0NsVixLQUFLLENBQWpFckIsT0FBTyxFQUFrQ3dXLGNBQWMsR0FBS25WLEtBQUssQ0FBbkNmLFNBQVM7WUFDdkNKLFFBQVEsR0FBS3FXLG1CQUFtQixDQUFoQ3JXLFFBQVE7WUFBQSxJQUNYQSxRQUFRO2NBQUE2VyxTQUFBLENBQUFySyxJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUFxSyxTQUFBLENBQUFuSyxNQUFBO1VBQUE7WUFJUHRNLFNBQVMsR0FBR0osUUFBUSxDQUFDSyxVQUFVLElBQUlpVyxjQUFjO1lBQUEsSUFDbERsVyxTQUFTO2NBQUF5VyxTQUFBLENBQUFySyxJQUFBO2NBQUE7WUFBQTtZQUNackosT0FBTyxDQUFDc0wsS0FBSyxDQUFDLHlDQUF5QyxFQUFFOU8sU0FBUyxDQUFDO1lBQUEsT0FBQWtYLFNBQUEsQ0FBQW5LLE1BQUE7VUFBQTtZQUFBLEtBSWpFelQsb0JBQW9CLENBQUNnTyxRQUFRLENBQUM3RyxTQUFTLENBQUM7Y0FBQXlXLFNBQUEsQ0FBQXJLLElBQUE7Y0FBQTtZQUFBO1lBQUEsT0FBQXFLLFNBQUEsQ0FBQW5LLE1BQUE7VUFBQTtZQUFBLE1BSXhDelQsb0JBQW9CLENBQUNrYSxjQUFjLENBQUMsQ0FBQyxJQUFJamEsc0JBQXNCO2NBQUEyZCxTQUFBLENBQUFySyxJQUFBO2NBQUE7WUFBQTtZQUNqRTFGLFFBQVEsQ0FBQ0MsYUFBYSxDQUNwQixJQUFJSCxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7Y0FDaENDLE1BQU0sRUFBRTtnQkFBRXVNLElBQUksRUFBRSxJQUFJO2dCQUFFQyxRQUFRLEVBQUUsTUFBTTtnQkFBRXZULE9BQU8sRUFBRXJDLENBQUMsQ0FBQyw0QkFBNEI7Y0FBRTtZQUNuRixDQUFDLENBQ0gsQ0FBQztZQUFBLE9BQUFvWixTQUFBLENBQUFuSyxNQUFBO1VBQUE7WUFJRzlHLFNBQVMsR0FBR3lRLG1CQUFtQixDQUFDNWIsRUFBRTtZQUNsQzhiLFNBQVMsR0FBR2pKLFFBQVEsS0FBSyxTQUFTLEdBQUcsVUFBVSxHQUFHLFVBQVU7WUFDNURvQyxXQUFpQyxHQUFHO2NBQ3hDOUosU0FBUyxFQUFUQSxTQUFTO2NBQ1RnSyxXQUFXLEVBQUV5RyxtQkFBbUIsQ0FBQ3ZXLE9BQU87Y0FDeENFLFFBQVEsRUFBUkEsUUFBUTtjQUNSekQsY0FBYyxFQUFFeUQsUUFBUSxDQUFDQyxlQUFlO2NBQ3hDTixTQUFTLEVBQVRBO1lBQ0YsQ0FBQztZQUVLNlcsZUFBZSxHQUFHcmQsVUFBVSxDQUFDdU0sRUFBRSxDQUFDdEYsU0FBUyxDQUFDO1lBQ2hELElBQUlvVyxlQUFlLEVBQUU7Y0FDbkJ6Uyx1QkFBdUIsQ0FBQ3RFLE9BQU8sR0FBR2lRLFdBQVc7Y0FDN0MxTCxlQUFlLENBQUN2RSxPQUFPLEdBQUcsSUFBSTtZQUNoQztZQUVBZ0csZUFBZSxDQUFDckYsU0FBUyxFQUFBMUYsYUFBQSxDQUFBQSxhQUFBLEtBQU8yYixtQkFBbUI7Y0FBRXJKLGNBQWMsRUFBRXVKO1lBQVMsRUFBRSxDQUFDO1lBRTNFRSxlQUFlLEdBQUc5ZSxNQUFNLENBQUMsQ0FBQztZQUNoQyxJQUFJNmUsZUFBZSxFQUFFO2NBQ25CL1MsZ0JBQWdCLENBQUNoRSxPQUFPLEdBQUdnWCxlQUFlO1lBQzVDO1lBRU1DLE9BQXNCLEdBQUc7Y0FDN0J0VyxTQUFTLEVBQVRBLFNBQVM7Y0FDVHdGLFNBQVMsRUFBRTZRLGVBQWU7Y0FDMUJqUCxhQUFhLFlBQUFqTSxNQUFBLENBQVlrYixlQUFlO1lBQzFDLENBQUM7WUFFS0UsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FBQSxFQUFTO2NBQ3BDLElBQUksQ0FBQ0gsZUFBZSxFQUFFO2NBQ3RCeFMsZUFBZSxDQUFDdkUsT0FBTyxHQUFHLEtBQUs7Y0FDL0JzRSx1QkFBdUIsQ0FBQ3RFLE9BQU8sR0FBRyxJQUFJO1lBQ3hDLENBQUM7WUFBQW9YLFNBQUEsQ0FBQXJLLElBQUE7WUFBQSxPQUVvQnZULG9CQUFvQixDQUFDNmQsbUJBQW1CLENBQUM7Y0FDNUQxVyxTQUFTLEVBQVRBLFNBQVM7Y0FDVG9ILGFBQWEsRUFBRWtQLE9BQU8sQ0FBQ2xQLGFBQWE7Y0FDcEN1UCxlQUFlLEVBQUU7Z0JBQ2ZwWCxTQUFTLEVBQVRBLFNBQVM7Z0JBQ1RTLFNBQVMsRUFBRUosUUFBUSxDQUFDSyxVQUFVO2dCQUM5QmlOLFFBQVEsRUFBRThJLGFBQWEsR0FBRyxNQUFNLEdBQUc5SSxRQUFRO2dCQUMzQzhJLGFBQWEsRUFBYkEsYUFBYTtnQkFDYjVYLE9BQU8sRUFBRSxDQUFBNEQsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUUzSCxFQUFFLEtBQUksRUFBRTtnQkFDeEJvWixJQUFJLEVBQUUxVSxRQUFRLENBQUMwVTtjQUNqQixDQUFDO2NBQ0RwVyxDQUFDLEVBQURBLENBQUM7Y0FDRHVaLG9CQUFvQixFQUFFdEgsV0FBVztjQUNqQ2xSLE9BQU8sRUFBRTRELEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFM0gsRUFBRTtjQUNsQnlaLFNBQVMsRUFBRTlSLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFeEgsSUFBSTtjQUN0QnFjLFNBQVMsRUFBRTtnQkFDVDdHLGNBQWMsRUFBRSxTQUFoQkEsY0FBY0EsQ0FBRW5JLE9BQU87a0JBQUEsT0FBSUQsa0JBQWtCLENBQUMwTyxPQUFPLEVBQUV6TyxPQUFPLENBQUM7Z0JBQUE7Z0JBQy9Eb0ksY0FBYyxFQUFFLFNBQWhCQSxjQUFjQSxDQUFFNkcsYUFBYSxFQUFJO2tCQUMvQlAsdUJBQXVCLENBQUMsQ0FBQztrQkFDekJ0TyxrQkFBa0IsQ0FDaEJxTyxPQUFPLEVBQ1BRLGFBQWEsQ0FBQ2pQLE9BQU8sRUFDckJpUCxhQUFhLENBQUN2TyxPQUFPLEVBQ3JCdU8sYUFBYSxDQUFDdE8sZUFBZSxFQUM3QnNPLGFBQWEsQ0FBQ3ZkLFdBQVcsRUFDekJ1ZCxhQUFhLENBQUNyTyxXQUFXLEVBQ3pCcU8sYUFBYSxDQUFDcE8sZ0JBQ2hCLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRHBILE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBLEVBQVE7a0JBQ2JpVix1QkFBdUIsQ0FBQyxDQUFDO2tCQUN6QnpQLGlCQUFpQixDQUFDd1AsT0FBTyxDQUFDO2dCQUM1QixDQUFDO2dCQUNEbkcsa0JBQWtCLEVBQUUsU0FBcEJBLGtCQUFrQkEsQ0FBRzRHLGVBQWUsRUFBRTNILGtCQUFrQixFQUFLO2tCQUMzRG1ILHVCQUF1QixDQUFDLENBQUM7a0JBQ3pCcEgsc0JBQXNCLENBQUNtSCxPQUFPLEVBQUVTLGVBQWUsRUFBRTNILGtCQUFrQixDQUFDO2dCQUN0RTtjQUNGO1lBQ0YsQ0FBQyxDQUFDO1VBQUE7WUF0Q0lvSCxNQUFNLEdBQUFDLFNBQUEsQ0FBQXBKLElBQUE7WUF3Q1osSUFBSSxDQUFDbUosTUFBTSxDQUFDUSxPQUFPLEVBQUU7Y0FDbkJULHVCQUF1QixDQUFDLENBQUM7Y0FDekIsSUFBSUMsTUFBTSxDQUFDUyxNQUFNLEtBQUssT0FBTyxFQUFFO2dCQUM3QnZRLFFBQVEsQ0FBQ0MsYUFBYSxDQUNwQixJQUFJSCxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7a0JBQ2hDQyxNQUFNLEVBQUU7b0JBQUV1TSxJQUFJLEVBQUUsSUFBSTtvQkFBRUMsUUFBUSxFQUFFLE1BQU07b0JBQUV2VCxPQUFPLEVBQUVyQyxDQUFDLENBQUMsNEJBQTRCO2tCQUFFO2dCQUNuRixDQUFDLENBQ0gsQ0FBQztjQUNIO1lBQ0Y7VUFBQztVQUFBO1lBQUEsT0FBQW9aLFNBQUEsQ0FBQW5JLElBQUE7UUFBQTtNQUFBLEdBQUF5SCxRQUFBO0lBQUEsQ0FDRjtJQUFBLGlCQUFBbUIsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUE7TUFBQSxPQUFBdEIsS0FBQSxDQUFBaEgsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQ0VoUSxRQUFRLEVBQ1JpRCxLQUFLLEVBQ0xxRCxlQUFlLEVBQ2Z5QixpQkFBaUIsRUFDakJjLGtCQUFrQixFQUNsQkssa0JBQWtCLEVBQ2xCa0gsc0JBQXNCLEVBQ3RCOVIsQ0FBQyxDQUVMLENBQUM7RUFFRCxJQUFNZ2EsY0FBYyxHQUFHbmdCLFdBQVcsY0FBQWlSLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBQyxTQUFBaVAsU0FBQTtJQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLEtBQUEsRUFBQUMscUJBQUEsRUFBQUMsY0FBQSxFQUFBQyxhQUFBLEVBQUFDLFdBQUEsRUFBQUMscUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMscUJBQUEsRUFBQUMsYUFBQSxFQUFBQyxhQUFBLEVBQUFDLFlBQUEsRUFBQTNGLE9BQUEsRUFBQTRGLG9CQUFBLEVBQUFsRyxlQUFBLEVBQUEvWCxVQUFBLEVBQUFELFNBQUEsRUFBQWlZLE9BQUEsRUFBQU0sZ0JBQUE7SUFBQSxPQUFBckssbUJBQUEsQ0FBQTZELElBQUEsV0FBQW9NLFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBbE0sSUFBQSxHQUFBa00sU0FBQSxDQUFBak0sSUFBQTtRQUFBO1VBQ2pDLElBQUksQ0FBQ3ZJLFlBQVksQ0FBQ3hFLE9BQU8sRUFBRTtZQUN6QndFLFlBQVksQ0FBQ3hFLE9BQU8sR0FBRyxJQUFJO1VBQzdCO1VBQUMsS0FDRzhCLGFBQWE7WUFBQWtYLFNBQUEsQ0FBQWpNLElBQUE7WUFBQTtVQUFBO1VBQUFpTSxTQUFBLENBQUFqTSxJQUFBO1VBQUEsT0FDVG5ILFlBQVksQ0FBQyxDQUFDO1FBQUE7VUFBQW9ULFNBQUEsQ0FBQWpNLElBQUE7VUFBQTtRQUFBO1VBQUEsS0FDWC9LLGtCQUFrQjtZQUFBZ1gsU0FBQSxDQUFBak0sSUFBQTtZQUFBO1VBQUE7VUFDckIyTCxpQkFBaUIsR0FBR08sT0FBTyxFQUFBZixxQkFBQSxHQUFDbFcsa0JBQWtCLENBQUMzQixPQUFPLGNBQUE2WCxxQkFBQSx1QkFBMUJBLHFCQUFBLENBQTRCcmMsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUMvRDhjLHFCQUFxQixHQUFHTSxPQUFPLEVBQUFkLHFCQUFBLEdBQUNuVyxrQkFBa0IsQ0FBQzlILFdBQVcsY0FBQWllLHFCQUFBLHVCQUE5QkEscUJBQUEsQ0FBZ0NuTCxNQUFNLENBQUM7VUFDdkU0TCxhQUFhLEdBQUdLLE9BQU8sQ0FBQ2pYLGtCQUFrQixDQUFDMlAsS0FBSyxDQUFDO1VBQ2pEa0gsYUFBYSxHQUFHSSxPQUFPLENBQUNqWCxrQkFBa0IsQ0FBQzhQLEtBQUssQ0FBQztVQUNqRGdILFlBQVksR0FBR0csT0FBTyxDQUFDalgsa0JBQWtCLENBQUMrUCxJQUFJLENBQUM7VUFBQSxNQUVqRCxDQUFDMkcsaUJBQWlCLElBQUksQ0FBQ0MscUJBQXFCLElBQUksQ0FBQ0MsYUFBYSxJQUFJLENBQUNDLGFBQWEsSUFBSSxDQUFDQyxZQUFZO1lBQUFFLFNBQUEsQ0FBQWpNLElBQUE7WUFBQTtVQUFBO1VBQUEsT0FBQWlNLFNBQUEsQ0FBQS9MLE1BQUE7UUFBQTtVQUkvRmtHLE9BQU8sR0FBRy9PLFdBQVcsQ0FBQ3BFLE9BQU8sQ0FBQ3JFLEdBQUcsQ0FBQyxVQUFBdVksY0FBYztZQUFBLE9BQUs7Y0FDekQxTCxPQUFPLEVBQUUwTCxjQUFjLENBQUM3VCxPQUFPO2NBQy9CekQsSUFBSSxFQUFFc1gsY0FBYyxDQUFDN0wsSUFBSSxDQUFDck4sRUFBRSxLQUFLMEUsUUFBUSxDQUFDMUUsRUFBRSxDQUFDNEUsUUFBUSxDQUFDLENBQUMsR0FBR2hILGVBQWUsQ0FBQ21iLElBQUksR0FBR25iLGVBQWUsQ0FBQzBQO1lBQ25HLENBQUM7VUFBQSxDQUFDLENBQUM7VUFBQXlRLG9CQUFBLEdBT0N2VCxVQUFVLENBQUN4RixPQUFPLEVBSk42UyxlQUFlLEdBQUFrRyxvQkFBQSxDQUE3QjFlLFlBQVksRUFDSFMsVUFBVSxHQUFBaWUsb0JBQUEsQ0FBbkJ6VyxPQUFPLEVBQ0N6SCxTQUFTLEdBQUFrZSxvQkFBQSxDQUFqQjFkLE1BQU0sRUFDQXlYLE9BQU8sR0FBQWlHLG9CQUFBLENBQWJ0VyxJQUFJO1VBRUEyUSxnQkFBZ0IsSUFBQWdGLEtBQUEsSUFBQUMscUJBQUEsR0FBR2plLHVCQUF1QixDQUFDeVksZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFBd0YscUJBQUEsY0FBQUEscUJBQUEsR0FBSXZkLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFRSxFQUFFLGNBQUFvZCxLQUFBLGNBQUFBLEtBQUEsR0FBSSxJQUFJO1VBRWpHMVUsT0FBTyxDQUFDQyxJQUFJLENBQUMsa0ZBQWtGLEVBQUU7WUFDL0ZHLGFBQWEsR0FBQXdVLGNBQUEsR0FBRXhkLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFRSxFQUFFLGNBQUFzZCxjQUFBLGNBQUFBLGNBQUEsR0FBSSxJQUFJO1lBQ3JDcGQsUUFBUSxHQUFBcWQsYUFBQSxHQUFFMWQsU0FBUyxhQUFUQSxTQUFTLHVCQUFUQSxTQUFTLENBQUVHLEVBQUUsY0FBQXVkLGFBQUEsY0FBQUEsYUFBQSxHQUFJLElBQUk7WUFDL0J4VSxNQUFNLEdBQUF5VSxXQUFBLEdBQUUxRixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTlYLEVBQUUsY0FBQXdkLFdBQUEsY0FBQUEsV0FBQSxHQUFJLElBQUk7WUFDM0JqZSxjQUFjLEdBQUFrZSxxQkFBQSxHQUFFNUYsZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUVyWSxTQUFTLGNBQUFpZSxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLElBQUk7WUFDbERyRixnQkFBZ0IsRUFBaEJBLGdCQUFnQjtZQUNoQmUsU0FBUyxFQUFFeFIsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU1RztVQUNwQixDQUFDLENBQUM7VUFFRmdWLE9BQU8sQ0FBQTlWLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQTtZQUNMb0YsT0FBTyxFQUFFMkIsa0JBQWtCLENBQUMzQixPQUFPO1lBQ25DOFMsT0FBTyxFQUFQQSxPQUFPO1lBQ1AzWSxTQUFTLEVBQUU0WSxnQkFBZ0I7WUFDM0JnQixJQUFJLEVBQUUxVSxRQUFRLENBQUMwVSxJQUFJO1lBQ25CQyxNQUFNLEVBQUUzVSxRQUFRLENBQUMxRSxFQUFFLENBQUM0RSxRQUFRLENBQUMsQ0FBQztZQUM5QkMsU0FBUyxFQUFFSCxRQUFRLENBQUNHLFNBQVM7WUFDN0J5VSxRQUFRLEVBQUU1VSxRQUFRLENBQUM0VSxRQUFRO1lBQzNCQyxTQUFTLEVBQUU3VSxRQUFRLENBQUM4VSxVQUFVLENBQUM1VSxRQUFRLENBQUMsQ0FBQztZQUN6Q21DLE1BQU0sRUFBRW1DLGFBQWEsQ0FBQ2xFLE9BQU87WUFDN0JtRyxTQUFTLEVBQUVuQyxnQkFBZ0IsQ0FBQ2hFLE9BQU87WUFDbkN5VSxTQUFTLEVBQUU5UixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXhILElBQUs7WUFDdkI0RCxPQUFPLEVBQUU0RCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTNILEVBQUc7WUFDbkI0SCxpQkFBaUIsRUFBRTBDLG9CQUFvQixDQUFDdEYsT0FBTztZQUMvQzZDLGtCQUFrQixFQUFFMEMscUJBQXFCLENBQUN2RjtVQUFPLEdBQzdDLENBQUFsRixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRTRaLEtBQUssS0FBSSxJQUFJLEdBQUc7WUFBRUEsS0FBSyxFQUFFamEsTUFBTSxDQUFDSyxVQUFVLENBQUM0WixLQUFLO1VBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNyRTlaLG9CQUFvQixDQUFDQyxTQUFTLEVBQUVDLFVBQVUsQ0FBQyxHQUMxQ0EsVUFBVSxhQUFWQSxVQUFVLGVBQVZBLFVBQVUsQ0FBRUssSUFBSSxHQUFHO1lBQUUwSSxXQUFXLEVBQUUvSSxVQUFVLENBQUNLO1VBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUN4RCxDQUFBMlgsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUU5WCxFQUFFLEtBQUksSUFBSSxHQUFBQyxhQUFBO1lBQ2pCOEksTUFBTSxFQUFFdEosTUFBTSxDQUFDcVksT0FBTyxDQUFDOVgsRUFBRTtVQUFDLEdBQU04WCxPQUFPLENBQUMzWCxJQUFJLEdBQUc7WUFBRXdaLFFBQVEsRUFBRTdCLE9BQU8sQ0FBQzNYO1VBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUNoRixDQUFDLENBQUMsR0FDRjZHLGtCQUFrQixDQUFDOUgsV0FBVyxHQUFHO1lBQUVBLFdBQVcsRUFBRThILGtCQUFrQixDQUFDOUg7VUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3JGOEgsa0JBQWtCLENBQUMyUCxLQUFLLEdBQUc7WUFBRUEsS0FBSyxFQUFFM1Asa0JBQWtCLENBQUMyUDtVQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDbkUzUCxrQkFBa0IsQ0FBQzRQLGlCQUFpQixHQUFHO1lBQUVBLGlCQUFpQixFQUFFNVAsa0JBQWtCLENBQUM0UDtVQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3ZHNVAsa0JBQWtCLENBQUM4UCxLQUFLLEdBQUc7WUFBRUEsS0FBSyxFQUFFOVAsa0JBQWtCLENBQUM4UDtVQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDbkU5UCxrQkFBa0IsQ0FBQytQLElBQUksR0FBRztZQUFFQSxJQUFJLEVBQUUvUCxrQkFBa0IsQ0FBQytQO1VBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNoRSxDQUFBcFAsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVpUyxNQUFNLEtBQUksSUFBSSxHQUFHO1lBQUVDLFdBQVcsRUFBRWxTLEtBQUssQ0FBQ2lTO1VBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUMxRCxDQUFBalMsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU1RyxJQUFJLEtBQUksSUFBSSxHQUFHO1lBQUVvWSxTQUFTLEVBQUV4UixLQUFLLENBQUM1RztVQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDcEQsQ0FBQTRHLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFbVMsS0FBSyxLQUFJLElBQUksR0FBRztZQUFFQyxVQUFVLEVBQUVwUyxLQUFLLENBQUNtUztVQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDdkRqYyxtQkFBbUIsQ0FBQ21KLGtCQUFrQixDQUFDNlAsUUFBUSxDQUFDLEdBQ2hEO1lBQUVPLGNBQWMsRUFBRXZaLG1CQUFtQixDQUFDbUosa0JBQWtCLENBQUM2UCxRQUFRO1VBQUUsQ0FBQyxHQUNwRSxDQUFDLENBQUMsR0FDRjdQLGtCQUFrQixDQUFDNlIsV0FBVyxHQUFHO1lBQUVBLFdBQVcsRUFBRTdSLGtCQUFrQixDQUFDNlI7VUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzFGLENBQUM7UUFBQTtRQUFBO1VBQUEsT0FBQW1GLFNBQUEsQ0FBQS9KLElBQUE7TUFBQTtJQUFBLEdBQUFnSixRQUFBO0VBQUEsQ0FFTCxJQUFFLENBQ0RuVyxhQUFhLEVBQ2JFLGtCQUFrQixFQUNsQk0sT0FBTyxFQUNQakgsTUFBTSxFQUNOb0gsSUFBSSxFQUNKL0MsUUFBUSxFQUNSaUQsS0FBSyxFQUNMb08sT0FBTyxFQUNQbk8saUJBQWlCLEVBQ2pCQyxrQkFBa0IsQ0FDbkIsQ0FBQztFQUVGLElBQU1xVyxTQUFTLEdBQUdyaEIsV0FBVyxDQUFDLFlBQU07SUFDbEMsSUFBTXNoQixpQkFBaUIsR0FBR2pWLGFBQWEsQ0FBQ2xFLE9BQU87SUFDL0MzRyxvQkFBb0IsQ0FBQzJPLEtBQUssQ0FBQ21SLGlCQUFpQixDQUFDO0lBQzdDblYsZ0JBQWdCLENBQUNoRSxPQUFPLEdBQUc5SCxNQUFNLENBQUMsQ0FBQztJQUNuQytMLG1CQUFtQixDQUFDakUsT0FBTyxHQUFHLElBQUk7SUFDbENrRSxhQUFhLENBQUNsRSxPQUFPLEdBQUc5SCxNQUFNLENBQUMsQ0FBQztJQUNoQ2lOLGtCQUFrQixDQUFDakIsYUFBYSxDQUFDbEUsT0FBTyxDQUFDO0lBQ3pDbUUsYUFBYSxDQUFDbkUsT0FBTyxHQUFHLEtBQUs7SUFDN0J5RSx5QkFBeUIsQ0FBQ3pFLE9BQU8sR0FBRyxJQUFJO0lBQ3hDMEUscUJBQXFCLENBQUMxRSxPQUFPLEdBQUcsSUFBSTtFQUN0QyxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTW9aLGNBQWMsR0FBR3ZoQixXQUFXLENBQUMsWUFBTTtJQUN2Q3laLGFBQWEsQ0FBQyxDQUFDO0lBQ2YvTSxlQUFlLENBQUN2RSxPQUFPLEdBQUcsS0FBSztFQUNqQyxDQUFDLEVBQUUsQ0FBQ3NSLGFBQWEsQ0FBQyxDQUFDO0VBRW5CLE9BQU87SUFDTHRRLFFBQVEsRUFBUkEsUUFBUTtJQUNSMEUsZUFBZSxFQUFmQSxlQUFlO0lBQ2ZDLHFCQUFxQixFQUFyQkEscUJBQXFCO0lBQ3JCcUwsZUFBZSxFQUFmQSxlQUFlO0lBQ2ZFLFNBQVMsRUFBVEEsU0FBUztJQUNUQyxjQUFjLEVBQWRBLGNBQWM7SUFDZEMsY0FBYyxFQUFkQSxjQUFjO0lBQ2R0TSxjQUFjLEVBQWRBLGNBQWM7SUFDZHlNLGNBQWMsRUFBZEEsY0FBYztJQUNkck4sYUFBYSxFQUFFQSxhQUFhLENBQUNsRSxPQUFPO0lBQ3BDZ0UsZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDaEUsT0FBTztJQUUxQ3dSLFdBQVcsRUFBWEEsV0FBVztJQUNYK0QsYUFBYSxFQUFiQSxhQUFhO0lBQ2JJLGNBQWMsRUFBZEEsY0FBYztJQUNkYSxzQkFBc0IsRUFBdEJBLHNCQUFzQjtJQUN0QnpRLFlBQVksRUFBWkEsWUFBWTtJQUNaaVMsY0FBYyxFQUFkQSxjQUFjO0lBQ2RrQixTQUFTLEVBQVRBLFNBQVM7SUFDVEUsY0FBYyxFQUFkQSxjQUFjO0lBRWRDLFVBQVUsRUFBRXJJLGVBQWUsSUFBSXRMO0VBQ2pDLENBQUM7QUFDSCxDQUFDIiwiaWdub3JlTGlzdCI6W119