@projectcor/maia-components 2.11.29 → 2.11.31-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +160 -165
- package/lib/hooks/useChatManager/useChatManager.js +78 -16
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +139 -70
- package/lib/hooks/useSmoothStreamText/index.js +2 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +101 -0
- package/lib/hooks/useStreamingMessage/index.js +3 -0
- package/lib/hooks/useStreamingMessage/streamingStore.js +69 -0
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +22 -0
- package/lib/lang/br/index.js +19 -1
- package/lib/lang/en/index.js +19 -1
- package/lib/lang/es/index.js +19 -1
- package/lib/lang/fr/index.js +23 -1
- package/package.json +1 -1
|
@@ -32,6 +32,8 @@ import { useUser } from '../../../context/cor-user';
|
|
|
32
32
|
import { useT } from '../../../hooks/useT';
|
|
33
33
|
import { useChatManager } from '../../../hooks/useChatManager/useChatManager';
|
|
34
34
|
import { useTaskPanel } from '../../../hooks/useTaskPanel';
|
|
35
|
+
import { useSmoothStreamText } from '../../../hooks/useSmoothStreamText';
|
|
36
|
+
import { useStreamingMessage } from '../../../hooks/useStreamingMessage';
|
|
35
37
|
import { LoadingText } from '../../atoms/LoadingText';
|
|
36
38
|
import { Loader } from '../../atoms/Loader';
|
|
37
39
|
import { MessageFromUser, MessageFromOther, MessageContentFromUser, MessageContentFromOther } from './styles';
|
|
@@ -45,10 +47,7 @@ import { ChatAISuggestions } from './ChatAISuggestions';
|
|
|
45
47
|
import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
|
|
46
48
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
47
49
|
import { downloadFileFromUrl } from '../../../utils/fileDownloadHelper';
|
|
48
|
-
|
|
49
|
-
/** Contexto con el texto del mensaje en streaming. Solo el componente que lo consume re-renderiza cuando cambia. */
|
|
50
50
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
51
|
-
var StreamingMessageContext = /*#__PURE__*/React.createContext('');
|
|
52
51
|
var code = createCodePlugin({
|
|
53
52
|
themes: ['github-light', 'github-light']
|
|
54
53
|
});
|
|
@@ -212,8 +211,20 @@ var CustomLink = function CustomLink(_ref5) {
|
|
|
212
211
|
/** Solo este componente re-renderiza cuando cambia el texto en streaming (lee del context). */
|
|
213
212
|
var StreamingMessageBody = /*#__PURE__*/memo(function (props) {
|
|
214
213
|
var _props$createAgentFol;
|
|
215
|
-
|
|
216
|
-
|
|
214
|
+
// Texto del stream: solo se lee del store cuando este mensaje es el
|
|
215
|
+
// que está en streaming. useSyncExternalStore aísla el re-render a
|
|
216
|
+
// este componente, sin tocar el resto del árbol.
|
|
217
|
+
var streamingText = useStreamingMessage(props.isStreaming ? props.messageId : null);
|
|
218
|
+
var rawText = props.isStreaming ? streamingText : props.message;
|
|
219
|
+
// Smooth streaming: desacopla la cadencia del backend del render.
|
|
220
|
+
// Durante el streaming libera chars a ritmo constante vía rAF; cuando
|
|
221
|
+
// termina, muestra el texto final al instante (sin animación residual).
|
|
222
|
+
var displayText = useSmoothStreamText(rawText, {
|
|
223
|
+
enabled: !!props.isStreaming,
|
|
224
|
+
targetLagMs: 120,
|
|
225
|
+
maxCharsPerFrame: 24,
|
|
226
|
+
snapToWordBoundary: true
|
|
227
|
+
});
|
|
217
228
|
var createAgentActionsAgentId = (_props$createAgentFol = props.createAgentFollowUp) === null || _props$createAgentFol === void 0 ? void 0 : _props$createAgentFol.agentId;
|
|
218
229
|
if (!displayText && !props.isStreaming) return null;
|
|
219
230
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
@@ -454,7 +465,6 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
454
465
|
});
|
|
455
466
|
});
|
|
456
467
|
var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
457
|
-
var _lastMsg$user, _lastMsg$message;
|
|
458
468
|
var userInitialMessage = _ref7.userInitialMessage,
|
|
459
469
|
initialChatId = _ref7.initialChatId,
|
|
460
470
|
onError = _ref7.onError,
|
|
@@ -487,8 +497,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
487
497
|
_useState0 = _slicedToArray(_useState9, 2),
|
|
488
498
|
selectedSuggestionMessageIds = _useState0[0],
|
|
489
499
|
setSelectedSuggestionMessageIds = _useState0[1];
|
|
490
|
-
var streamingMessagePropsRef = useRef({});
|
|
491
|
-
var streamingMessageIdRef = useRef(null);
|
|
492
500
|
var _useChatManager = useChatManager({
|
|
493
501
|
chatId: initialChatId || undefined,
|
|
494
502
|
userInitialMessage: userInitialMessage,
|
|
@@ -525,27 +533,57 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
525
533
|
});
|
|
526
534
|
sendMessage(suggestion);
|
|
527
535
|
}, [sendMessage, selectedSuggestionMessageIds, event, agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.name, agent === null || agent === void 0 ? void 0 : agent.type]);
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
}
|
|
546
|
-
}, 500);
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* Actualiza el estado del botón "scroll to bottom" comparando la posición
|
|
539
|
+
* actual del scroll con el fondo. Usa un ref para evitar `setState` cuando
|
|
540
|
+
* el valor no cambia.
|
|
541
|
+
*/
|
|
542
|
+
var updateScrollBottomVisibility = useCallback(function () {
|
|
543
|
+
var el = messagesRef.current;
|
|
544
|
+
if (!el) return;
|
|
545
|
+
var scrollTop = el.scrollTop,
|
|
546
|
+
scrollHeight = el.scrollHeight,
|
|
547
|
+
clientHeight = el.clientHeight;
|
|
548
|
+
var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
549
|
+
var shouldShow = distanceFromBottom > 50;
|
|
550
|
+
if (showScrollToBottomRef.current !== shouldShow) {
|
|
551
|
+
showScrollToBottomRef.current = shouldShow;
|
|
552
|
+
setShowScrollToBottom(shouldShow);
|
|
547
553
|
}
|
|
548
554
|
}, []);
|
|
555
|
+
|
|
556
|
+
/**
|
|
557
|
+
* Scroll inmediato al fondo (dentro de rAF para coordinar con el paint)
|
|
558
|
+
* y actualiza la visibilidad del botón. Respeta `skipIfUserScrolling` para
|
|
559
|
+
* no sobrescribir el scroll manual del usuario durante el streaming.
|
|
560
|
+
*/
|
|
561
|
+
var scrollToBottomRaf = useCallback(function () {
|
|
562
|
+
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
563
|
+
var _opts$skipIfUserScrol = opts.skipIfUserScrolling,
|
|
564
|
+
skipIfUserScrolling = _opts$skipIfUserScrol === void 0 ? false : _opts$skipIfUserScrol,
|
|
565
|
+
_opts$delayMs = opts.delayMs,
|
|
566
|
+
delayMs = _opts$delayMs === void 0 ? 0 : _opts$delayMs;
|
|
567
|
+
var run = function run() {
|
|
568
|
+
requestAnimationFrame(function () {
|
|
569
|
+
var el = messagesRef.current;
|
|
570
|
+
if (!el) return;
|
|
571
|
+
if (skipIfUserScrolling && userScrollingRef.current) return;
|
|
572
|
+
el.scrollTop = el.scrollHeight;
|
|
573
|
+
updateScrollBottomVisibility();
|
|
574
|
+
});
|
|
575
|
+
};
|
|
576
|
+
if (delayMs > 0) setTimeout(run, delayMs);else run();
|
|
577
|
+
}, [updateScrollBottomVisibility]);
|
|
578
|
+
var handleClickScrollToBottom = useCallback(function () {
|
|
579
|
+
if (!messagesRef.current) return;
|
|
580
|
+
messagesRef.current.scrollTo({
|
|
581
|
+
top: messagesRef.current.scrollHeight,
|
|
582
|
+
behavior: 'smooth'
|
|
583
|
+
});
|
|
584
|
+
// Dar tiempo al smooth-scroll antes de recalcular la visibilidad del botón.
|
|
585
|
+
setTimeout(updateScrollBottomVisibility, 500);
|
|
586
|
+
}, [updateScrollBottomVisibility]);
|
|
549
587
|
var handleScrollToBottom = useCallback(function (e) {
|
|
550
588
|
var container = e.currentTarget;
|
|
551
589
|
if (scrollRafRef.current !== null) {
|
|
@@ -566,19 +604,13 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
566
604
|
}
|
|
567
605
|
userScrollingRef.current = !isNearBottom;
|
|
568
606
|
lastScrollTopRef.current = scrollTop;
|
|
569
|
-
|
|
570
|
-
var shouldShow = distanceFromBottom > 50;
|
|
571
|
-
var didSetState = showScrollToBottomRef.current !== shouldShow;
|
|
572
|
-
if (didSetState) {
|
|
573
|
-
showScrollToBottomRef.current = shouldShow;
|
|
574
|
-
setShowScrollToBottom(shouldShow);
|
|
575
|
-
}
|
|
607
|
+
updateScrollBottomVisibility();
|
|
576
608
|
if (isNearBottom && onScrollToBottom) {
|
|
577
609
|
onScrollToBottom();
|
|
578
610
|
}
|
|
579
611
|
handleScroll(container);
|
|
580
612
|
});
|
|
581
|
-
}, [onScrollToBottom, handleScroll]);
|
|
613
|
+
}, [onScrollToBottom, handleScroll, updateScrollBottomVisibility]);
|
|
582
614
|
|
|
583
615
|
// refs to stabilize functions and avoid unnecessary re-renders
|
|
584
616
|
var sendMessageRef = useRef(sendMessage);
|
|
@@ -612,124 +644,110 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
612
644
|
}
|
|
613
645
|
}, []);
|
|
614
646
|
|
|
615
|
-
//
|
|
616
|
-
//
|
|
617
|
-
//
|
|
647
|
+
// Autoscroll mientras el texto del stream crece. El texto se pinta al ritmo
|
|
648
|
+
// de `useSmoothStreamText` (~60fps), no al ritmo de llegada de tokens del
|
|
649
|
+
// backend: por eso acá usamos un loop de rAF que compara `scrollHeight`
|
|
650
|
+
// contra el último valor observado y ajusta solo cuando cambia. Así el
|
|
651
|
+
// scroll queda perfectamente sincronizado con la animación del texto sin
|
|
652
|
+
// depender de la cadencia del streamingStore.
|
|
618
653
|
useEffect(function () {
|
|
619
|
-
if (!
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
var
|
|
623
|
-
var
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
654
|
+
if (!waitingResponse && !isWriting) return undefined;
|
|
655
|
+
if (!messagesRef.current) return undefined;
|
|
656
|
+
var rafId = null;
|
|
657
|
+
var lastHeight = messagesRef.current.scrollHeight;
|
|
658
|
+
var _tick = function tick() {
|
|
659
|
+
var el = messagesRef.current;
|
|
660
|
+
if (!el) {
|
|
661
|
+
rafId = null;
|
|
662
|
+
return;
|
|
663
|
+
}
|
|
664
|
+
var currentHeight = el.scrollHeight;
|
|
665
|
+
if (currentHeight !== lastHeight) {
|
|
666
|
+
lastHeight = currentHeight;
|
|
667
|
+
if (!userScrollingRef.current) {
|
|
668
|
+
el.scrollTop = currentHeight;
|
|
669
|
+
}
|
|
670
|
+
updateScrollBottomVisibility();
|
|
635
671
|
}
|
|
672
|
+
rafId = requestAnimationFrame(_tick);
|
|
673
|
+
};
|
|
674
|
+
rafId = requestAnimationFrame(_tick);
|
|
675
|
+
return function () {
|
|
676
|
+
if (rafId != null) cancelAnimationFrame(rafId);
|
|
636
677
|
};
|
|
678
|
+
}, [waitingResponse, isWriting, updateScrollBottomVisibility]);
|
|
637
679
|
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
setTimeout(scrollToBottom, 100);
|
|
680
|
+
// Al comenzar a esperar la respuesta del backend, scroll inicial al fondo.
|
|
681
|
+
useEffect(function () {
|
|
682
|
+
if (waitingResponse && messagesRef.current) {
|
|
683
|
+
scrollToBottomRaf({
|
|
684
|
+
skipIfUserScrolling: true
|
|
644
685
|
});
|
|
645
|
-
}
|
|
646
|
-
|
|
647
|
-
|
|
686
|
+
}
|
|
687
|
+
}, [waitingResponse, scrollToBottomRaf]);
|
|
688
|
+
|
|
689
|
+
// Scroll cuando cambian los mensajes: distingue "nuevo mensaje" (agregado)
|
|
690
|
+
// de "reemplazo" (mismo id/length, ej. feedback o approvalStatus). En
|
|
691
|
+
// reemplazos solo se recalcula la visibilidad del botón sin forzar scroll.
|
|
692
|
+
var lastMessageIdRef = useRef(null);
|
|
693
|
+
var lastMessagesLengthRef = useRef(0);
|
|
648
694
|
useEffect(function () {
|
|
649
|
-
|
|
650
|
-
if (
|
|
695
|
+
var _lastMessage$id;
|
|
696
|
+
if (!messagesRef.current || loadingMessages || isLoadingMoreMessages || isLoadingMoreRef.current) {
|
|
651
697
|
return;
|
|
652
698
|
}
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
var shouldShow = distanceFromBottom > 50;
|
|
663
|
-
showScrollToBottomRef.current = shouldShow;
|
|
664
|
-
setShowScrollToBottom(shouldShow);
|
|
665
|
-
}
|
|
666
|
-
});
|
|
699
|
+
var lastMessage = messages[messages.length - 1];
|
|
700
|
+
var lastId = (_lastMessage$id = lastMessage === null || lastMessage === void 0 ? void 0 : lastMessage.id) !== null && _lastMessage$id !== void 0 ? _lastMessage$id : null;
|
|
701
|
+
var prevId = lastMessageIdRef.current;
|
|
702
|
+
var prevLen = lastMessagesLengthRef.current;
|
|
703
|
+
lastMessageIdRef.current = lastId;
|
|
704
|
+
lastMessagesLengthRef.current = messages.length;
|
|
705
|
+
var isNewMessage = lastId !== prevId || messages.length !== prevLen;
|
|
706
|
+
if (!isNewMessage) {
|
|
707
|
+
updateScrollBottomVisibility();
|
|
667
708
|
return;
|
|
668
709
|
}
|
|
669
|
-
if (!messagesRef.current || loadingMessages || isLoadingMoreMessages || isLoadingMoreRef.current) return;
|
|
670
710
|
var container = messagesRef.current;
|
|
671
|
-
var lastMessage = messages[messages.length - 1];
|
|
672
|
-
var isNewAnswerMessage = lastMessage && lastMessage.id.startsWith('answer-');
|
|
673
|
-
var isNewUserMessage = lastMessage && lastMessage.id.startsWith('question-');
|
|
674
|
-
var isNewApprovalMessage = lastMessage && (lastMessage.id.startsWith('approval-') || !!lastMessage.approval);
|
|
675
711
|
var isAtBottom = container.scrollHeight - container.scrollTop <= container.clientHeight + 100;
|
|
676
|
-
var
|
|
677
|
-
var isNotInitialMessage = !messages.some(function (msg) {
|
|
712
|
+
var hasInitialMessage = messages.some(function (msg) {
|
|
678
713
|
return msg.id === 'user-initial-message';
|
|
679
714
|
});
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
692
|
-
var shouldShow = distanceFromBottom > 50;
|
|
693
|
-
showScrollToBottomRef.current = shouldShow;
|
|
694
|
-
setShowScrollToBottom(shouldShow);
|
|
695
|
-
}
|
|
696
|
-
});
|
|
697
|
-
};
|
|
698
|
-
if (scrollDelay > 0) {
|
|
699
|
-
setTimeout(doScroll, scrollDelay);
|
|
700
|
-
} else {
|
|
701
|
-
doScroll();
|
|
702
|
-
}
|
|
703
|
-
} else if (hasMessages && isNotInitialMessage && !isNewAnswerMessage && !isNewUserMessage && !isNewApprovalMessage) {
|
|
704
|
-
requestAnimationFrame(function () {
|
|
705
|
-
if (messagesRef.current) {
|
|
706
|
-
messagesRef.current.scrollTop = messagesRef.current.scrollHeight;
|
|
707
|
-
var _messagesRef$current4 = messagesRef.current,
|
|
708
|
-
scrollTop = _messagesRef$current4.scrollTop,
|
|
709
|
-
scrollHeight = _messagesRef$current4.scrollHeight,
|
|
710
|
-
clientHeight = _messagesRef$current4.clientHeight;
|
|
711
|
-
var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
712
|
-
var shouldShow = distanceFromBottom > 50;
|
|
713
|
-
showScrollToBottomRef.current = shouldShow;
|
|
714
|
-
setShowScrollToBottom(shouldShow);
|
|
715
|
-
}
|
|
715
|
+
var isApproval = !!lastMessage && (lastMessage.id.startsWith('approval-') || !!lastMessage.approval);
|
|
716
|
+
var isAnswerOrQuestion = !!lastMessage && (lastMessage.id.startsWith('answer-') || lastMessage.id.startsWith('question-'));
|
|
717
|
+
|
|
718
|
+
// Approval: secuencia de scrolls con delay porque el ApprovalBox necesita
|
|
719
|
+
// un tick para medirse. Scrollea aunque el usuario no esté al fondo si no
|
|
720
|
+
// está scrolleando manualmente.
|
|
721
|
+
if (isApproval && (isAtBottom || !userScrollingRef.current)) {
|
|
722
|
+
scrollToBottomRaf();
|
|
723
|
+
scrollToBottomRaf();
|
|
724
|
+
scrollToBottomRaf({
|
|
725
|
+
delayMs: 100
|
|
716
726
|
});
|
|
727
|
+
return;
|
|
717
728
|
}
|
|
718
|
-
}, [messages, loadingMessages, isLoadingMoreMessages, waitingResponse]);
|
|
719
729
|
|
|
720
|
-
|
|
730
|
+
// Nuevos answer/question: scroll si el usuario ya estaba al fondo.
|
|
731
|
+
if (isAnswerOrQuestion && isAtBottom) {
|
|
732
|
+
scrollToBottomRaf();
|
|
733
|
+
return;
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
// Caso borde: cambios de mensajes sin ser nuevo answer/user/approval
|
|
737
|
+
// pero sí un mensaje nuevo (no el "user-initial-message"). Scrollea.
|
|
738
|
+
if (!isAnswerOrQuestion && !isApproval && !hasInitialMessage && messages.length > prevLen) {
|
|
739
|
+
scrollToBottomRaf();
|
|
740
|
+
return;
|
|
741
|
+
}
|
|
742
|
+
updateScrollBottomVisibility();
|
|
743
|
+
}, [messages, loadingMessages, isLoadingMoreMessages, scrollToBottomRaf, updateScrollBottomVisibility]);
|
|
744
|
+
|
|
745
|
+
// Estado inicial del botón scroll-to-bottom al terminar loadingMessages.
|
|
721
746
|
useEffect(function () {
|
|
722
|
-
if (
|
|
723
|
-
|
|
724
|
-
var scrollTop = container.scrollTop,
|
|
725
|
-
scrollHeight = container.scrollHeight,
|
|
726
|
-
clientHeight = container.clientHeight;
|
|
727
|
-
var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
728
|
-
var shouldShow = distanceFromBottom > 50;
|
|
729
|
-
showScrollToBottomRef.current = shouldShow;
|
|
730
|
-
setShowScrollToBottom(shouldShow);
|
|
747
|
+
if (!loadingMessages) {
|
|
748
|
+
updateScrollBottomVisibility();
|
|
731
749
|
}
|
|
732
|
-
}, [loadingMessages, messages.length]);
|
|
750
|
+
}, [loadingMessages, messages.length, updateScrollBottomVisibility]);
|
|
733
751
|
|
|
734
752
|
// Obtener el último mensaje del usuario para verificar si tiene attachments
|
|
735
753
|
var lastUserMessage = messages.filter(function (msg) {
|
|
@@ -751,49 +769,26 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
751
769
|
expandedRef.current = expanded;
|
|
752
770
|
}
|
|
753
771
|
}, [expanded]);
|
|
754
|
-
var lastMsg = messages[messages.length - 1];
|
|
755
|
-
var isStreamingActive = (waitingResponse || isWriting) && lastMsg && (lastMsg.role === ChatHistoryRole.ASSISTANT || ((_lastMsg$user = lastMsg.user) === null || _lastMsg$user === void 0 ? void 0 : _lastMsg$user.id) === 'assistant');
|
|
756
|
-
var streamingText = isStreamingActive ? (_lastMsg$message = lastMsg.message) !== null && _lastMsg$message !== void 0 ? _lastMsg$message : '' : '';
|
|
757
772
|
if (loadingMessages) {
|
|
758
773
|
return /*#__PURE__*/_jsx(Loader, {});
|
|
759
774
|
}
|
|
760
775
|
var messagesContent = /*#__PURE__*/_jsxs(_Fragment, {
|
|
761
776
|
children: [isLoadingMoreMessages && /*#__PURE__*/_jsx(LoadingText, {
|
|
762
777
|
text: t('chat.loadingMore')
|
|
763
|
-
}), /*#__PURE__*/_jsx(
|
|
764
|
-
value: streamingText,
|
|
778
|
+
}), /*#__PURE__*/_jsx(_Fragment, {
|
|
765
779
|
children: messages.map(function (message, index) {
|
|
766
780
|
var _message$attachments, _message$sources, _message$project, _message$id;
|
|
767
|
-
if (!((_message$attachments = message.attachments) !== null && _message$attachments !== void 0 && _message$attachments.length || (_message$sources = message.sources) !== null && _message$sources !== void 0 && _message$sources.length) && !message.message && !((_message$project = message.project) !== null && _message$project !== void 0 && _message$project.name) && !message.approval) return null;
|
|
768
|
-
var messageFeedback = (message === null || message === void 0 ? void 0 : message.wasHelpful) === undefined || message.wasHelpful === null ? null : message.wasHelpful ? Feedback.THUMBS_UP : Feedback.THUMBS_DOWN;
|
|
769
781
|
var isAssistantMessage = message.role === ChatHistoryRole.ASSISTANT || message.user.id === 'assistant';
|
|
770
782
|
var isLastMessage = index === messages.length - 1;
|
|
771
783
|
var isStreaming = isAssistantMessage && isLastMessage && (waitingResponse || isWriting);
|
|
772
784
|
|
|
785
|
+
// No filtrar el placeholder del mensaje en streaming: su texto vive
|
|
786
|
+
// en el streamingStore y `message.message` es '' hasta el complete.
|
|
787
|
+
if (!isStreaming && !((_message$attachments = message.attachments) !== null && _message$attachments !== void 0 && _message$attachments.length || (_message$sources = message.sources) !== null && _message$sources !== void 0 && _message$sources.length) && !message.message && !((_message$project = message.project) !== null && _message$project !== void 0 && _message$project.name) && !message.approval) return null;
|
|
788
|
+
var messageFeedback = (message === null || message === void 0 ? void 0 : message.wasHelpful) === undefined || message.wasHelpful === null ? null : message.wasHelpful ? Feedback.THUMBS_UP : Feedback.THUMBS_DOWN;
|
|
789
|
+
|
|
773
790
|
// Key estable: solo message.id para evitar remount durante streaming (message.date puede cambiar)
|
|
774
791
|
var messageKey = (_message$id = message.id) !== null && _message$id !== void 0 ? _message$id : "msg-".concat(index);
|
|
775
|
-
if (isStreaming) {
|
|
776
|
-
if (streamingMessageIdRef.current !== message.id) {
|
|
777
|
-
var _message$id2;
|
|
778
|
-
streamingMessageIdRef.current = (_message$id2 = message.id) !== null && _message$id2 !== void 0 ? _message$id2 : null;
|
|
779
|
-
Object.assign(streamingMessagePropsRef.current, message, {
|
|
780
|
-
message: undefined
|
|
781
|
-
}, {
|
|
782
|
-
authUser: authUser,
|
|
783
|
-
handleSelectOption: handleSelectOption,
|
|
784
|
-
handleFeedback: handleFeedback,
|
|
785
|
-
handleApprovalDecision: handleApprovalDecision,
|
|
786
|
-
handleSuggestionClick: handleSuggestionClick,
|
|
787
|
-
hasSelectedSuggestion: !!selectedSuggestionMessageIds[message.id],
|
|
788
|
-
disableFeedback: messageFeedback,
|
|
789
|
-
isStreaming: true,
|
|
790
|
-
isLastMessage: isLastMessage,
|
|
791
|
-
expanded: expanded
|
|
792
|
-
});
|
|
793
|
-
}
|
|
794
|
-
return /*#__PURE__*/_jsx(MessageItem, _objectSpread({}, streamingMessagePropsRef.current), messageKey);
|
|
795
|
-
}
|
|
796
|
-
streamingMessageIdRef.current = null;
|
|
797
792
|
return /*#__PURE__*/_createElement(MessageItem, _objectSpread(_objectSpread({}, message), {}, {
|
|
798
793
|
key: messageKey,
|
|
799
794
|
authUser: authUser,
|
|
@@ -803,7 +798,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
803
798
|
handleSuggestionClick: handleSuggestionClick,
|
|
804
799
|
hasSelectedSuggestion: !!selectedSuggestionMessageIds[message.id],
|
|
805
800
|
disableFeedback: messageFeedback,
|
|
806
|
-
isStreaming:
|
|
801
|
+
isStreaming: isStreaming,
|
|
807
802
|
isLastMessage: isLastMessage,
|
|
808
803
|
expanded: expanded
|
|
809
804
|
}));
|
|
@@ -846,4 +841,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref7) {
|
|
|
846
841
|
});
|
|
847
842
|
};
|
|
848
843
|
export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
|
|
849
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiU3RyZWFtZG93biIsImNyZWF0ZUNvZGVQbHVnaW4iLCJBcnJvd1NtYWxsRG93biIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVVzZXIiLCJ1c2VUIiwidXNlQ2hhdE1hbmFnZXIiLCJ1c2VUYXNrUGFuZWwiLCJMb2FkaW5nVGV4dCIsIkxvYWRlciIsIk1lc3NhZ2VGcm9tVXNlciIsIk1lc3NhZ2VGcm9tT3RoZXIiLCJNZXNzYWdlQ29udGVudEZyb21Vc2VyIiwiTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIiLCJNZXNzYWdlRmVlZGJhY2siLCJTQ0NBSU1lc3NhZ2VXcmFwcGVyIiwiU2Nyb2xsVG9Cb3R0b21CdXR0b24iLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiU0NBc3Npc3RhbnROYW1lIiwiU0NBc3Npc3RhbnRBdmF0YXIiLCJTQ1Rhc2tMaW5rIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0F0dGFjaG1lbnRzUm93IiwiU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJNQUlBSWNvbiIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJDaGF0QUlTdWdnZXN0aW9ucyIsIkNoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIlN0cmVhbWluZ01lc3NhZ2VDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsImNvZGUiLCJ0aGVtZXMiLCJBc3Npc3RhbnRBdmF0YXJJbm5lciIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJjaGlsZHJlbiIsInR5cGUiLCJ3aWR0aCIsImhlaWdodCIsImVtb2ppIiwiQXNzaXN0YW50QXZhdGFyIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsInByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiTWVzc2FnZUNvbXBvbmVudCIsIl9vYmplY3RTcHJlYWQiLCJNZXNzYWdlQ29udGVudFdyYXBwZXIiLCJfcmVmMiIsIl9leGNsdWRlZDIiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIk1lc3NhZ2VPcHRpb25zIiwiX3JlZjMiLCJvcHRpb25zIiwiaGFuZGxlU2VsZWN0T3B0aW9uIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRPcHRpb24iLCJzZXRTZWxlY3RlZE9wdGlvbiIsImhhbmRsZVNlbGVjdCIsIm9wdGlvbiIsIm1hcCIsIiRoYXNTZWxlY3Rpb24iLCIkZGltbWVkIiwiaWQiLCJvbkNsaWNrIiwibmFtZSIsIkFzc2lzdGFudE1lc3NhZ2VIZWFkZXIiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImxvY2FsQWdlbnQiLCJzZXRMb2NhbEFnZW50IiwiX3VzZUdsb2JhbENvbnRleHQyIiwiZ2V0VGFiU2VnbWVudEZyb21IcmVmIiwiaHJlZiIsIm1hdGNoIiwidGVzdCIsImV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlIiwibWVzc2FnZSIsInRhc2tVcmxSZWdleCIsIlJlZ0V4cCIsInRhc2tzIiwic2VlbklkcyIsIlNldCIsImV4ZWMiLCJ0YXNrSWQiLCJ1cmwiLCJoYXMiLCJhZGQiLCJlc2NhcGVkVXJsIiwicmVwbGFjZSIsIm1hcmtkb3duTGlua1JlZ2V4IiwiY29uY2F0IiwibGlua01hdGNoIiwidGl0bGUiLCJwdXNoIiwiaGFzVGFza0xpbmtzIiwidGV4dCIsImxlbmd0aCIsIlRhc2tMaW5rIiwiX3JlZjQiLCJ0YWJTZWdtZW50IiwiX3VzZVRhc2tQYW5lbCIsImJ1aWxkT3BlblRhc2siLCJvcGVuVGFzayIsImhhbmRsZUNsaWNrIiwiZSIsIm1ldGFLZXkiLCJjdHJsS2V5IiwicHJldmVudERlZmF1bHQiLCJDdXN0b21MaW5rIiwiX3JlZjUiLCJyZXN0IiwiX2V4Y2x1ZGVkMyIsInRhc2tNYXRjaCIsIlN0cmVhbWluZ01lc3NhZ2VCb2R5IiwiX3Byb3BzJGNyZWF0ZUFnZW50Rm9sIiwiZnJvbUNvbnRleHQiLCJ1c2VDb250ZXh0IiwiZGlzcGxheVRleHQiLCJpc1N0cmVhbWluZyIsImNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiYWdlbnRJZCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJpc0Fzc2lzdGFudCIsInBsdWdpbnMiLCJjb21wb25lbnRzIiwiYSIsImxpbmtTYWZldHkiLCJlbmFibGVkIiwiaXNBbmltYXRpbmciLCJzaGlraVRoZW1lIiwiY29udHJvbHMiLCJ0YWJsZSIsImlzRXJyb3IiLCJhcHByb3ZhbCIsImNvbnRlbnQiLCJzb3VyY2VzIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwibWVzc2FnZUlkIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHByb2plY3RNZXRhZGF0IiwidXNlciIsImF1dGhVc2VyIiwiaXNDaGFuZ2VQcm9qZWN0IiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiQVNTSVNUQU5UIiwibWVzc2FnZUF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImZpbGUiLCJGaWxlIiwib3JpZ2luYWxGaWxlIiwidXJsX3RodW1ibmFpbCIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwiaGFuZGxlQ2xvc2VQcmV2aWV3IiwiaGFuZGxlQXR0YWNobWVudERvd25sb2FkIiwiX3JlZjYiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImV4dGVuc2lvbiIsImZpbGVOYW1lIiwiZmlsZVVybCIsImJsb2JVcmwiLCJkb3dubG9hZGVkRmlsZSIsImxpbmsiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiaW5jbHVkZXMiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJkb3dubG9hZCIsInN0eWxlIiwiZGlzcGxheSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwic2V0VGltZW91dCIsInJlbW92ZUNoaWxkIiwicmV2b2tlT2JqZWN0VVJMIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYXNGZWVkYmFjayIsIiRpc0Fzc2lzdGFudCIsIm1lc3NhZ2VFeHRyYUNvbnRlbnQiLCJmZWVkYmFjayIsInNlc3Npb25JZCIsInNwbGl0IiwiZmlsdGVyIiwicXVlc3Rpb25JZCIsImpvaW4iLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNyIsIl9sYXN0TXNnJHVzZXIiLCJfbGFzdE1zZyRtZXNzYWdlIiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQzIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJldmVudCIsIm1lc3NhZ2VzUmVmIiwiY2hhdEluaXRpYWxpemVkUmVmIiwiaXNMb2FkaW5nTW9yZVJlZiIsInVzZXJTY3JvbGxpbmdSZWYiLCJzY3JvbGxUaHJlc2hvbGRSZWYiLCJsYXN0U2Nyb2xsVG9wUmVmIiwic2hvd1Njcm9sbFRvQm90dG9tUmVmIiwic2Nyb2xsUmFmUmVmIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93U2Nyb2xsVG9Cb3R0b20iLCJzZXRTaG93U2Nyb2xsVG9Cb3R0b20iLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwic3RyZWFtaW5nTWVzc2FnZVByb3BzUmVmIiwic3RyZWFtaW5nTWVzc2FnZUlkUmVmIiwiX3VzZUNoYXRNYW5hZ2VyIiwiY2hhdElkIiwidW5kZWZpbmVkIiwibWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInRyaW0iLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJlbnRpdHkiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwiaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSIsImN1cnJlbnQiLCJzY3JvbGxUbyIsInRvcCIsInNjcm9sbEhlaWdodCIsImJlaGF2aW9yIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJzY3JvbGxUb3AiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJzaG91bGRTaG93IiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJjb250YWluZXIiLCJjdXJyZW50VGFyZ2V0IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJpc1Njcm9sbGluZ1VwIiwiaXNOZWFyQm90dG9tIiwiZGlkU2V0U3RhdGUiLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwibGFzdE1lc3NhZ2UiLCJoYXNBcHByb3ZhbCIsImlzQXRCb3R0b20iLCJzY3JvbGxUb0JvdHRvbSIsIl9tZXNzYWdlc1JlZiRjdXJyZW50MiIsImlzTmV3QW5zd2VyTWVzc2FnZSIsImlzTmV3VXNlck1lc3NhZ2UiLCJpc05ld0FwcHJvdmFsTWVzc2FnZSIsImhhc01lc3NhZ2VzIiwiaXNOb3RJbml0aWFsTWVzc2FnZSIsIm1zZyIsInNjcm9sbERlbGF5IiwiZG9TY3JvbGwiLCJfbWVzc2FnZXNSZWYkY3VycmVudDMiLCJfbWVzc2FnZXNSZWYkY3VycmVudDQiLCJsYXN0VXNlck1lc3NhZ2UiLCJhdCIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJsYXN0TXNnIiwiaXNTdHJlYW1pbmdBY3RpdmUiLCJzdHJlYW1pbmdUZXh0IiwibWVzc2FnZXNDb250ZW50IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJfbWVzc2FnZSRpZCIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJtZXNzYWdlS2V5IiwiX21lc3NhZ2UkaWQyIiwiT2JqZWN0IiwiYXNzaWduIiwia2V5Iiwia2V5cyIsInZhbHVlcyIsImZpbmQiLCIkc2Nyb2xsT25QYXJlbnQiLCJyZWYiLCJvblNjcm9sbCIsIiRpc01hcmtldHBsYWNlR2xvYmFsIiwiY29sb3IiLCJDaGF0QUlNZXNzYWdlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9DaGF0QUlNZXNzYWdlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bnN0YWJsZS1uZXN0ZWQtY29tcG9uZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgbWVtbywgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFN0cmVhbWRvd24gfSBmcm9tICdzdHJlYW1kb3duJ1xuaW1wb3J0IHsgY3JlYXRlQ29kZVBsdWdpbiB9IGZyb20gJ0BzdHJlYW1kb3duL2NvZGUnXG5pbXBvcnQgeyBBcnJvd1NtYWxsRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Fycm93U21hbGxEb3duJ1xuXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXBwcm92YWxCb3ggfSBmcm9tICcuLi8uLi9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveCdcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50UHJldmlld01vZGFsJ1xuaW1wb3J0IHsgQXR0YWNobWVudENhcmRBdWRpbyB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkQXVkaW8nXG5pbXBvcnQgeyBNQUlBTWVzc2FnZVByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQU1lc3NhZ2UvTUFJQU1lc3NhZ2UuaW50ZXJmYWNlcydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0SGlzdG9yeVJvbGUsIFRhc2tJbmZvIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVRhc2tQYW5lbCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVRhc2tQYW5lbCdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDT3B0aW9uc0xpc3QsXG4gIFNDT3B0aW9uSXRlbSxcbiAgU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyLFxuICBTQ0Fzc2lzdGFudE5hbWUsXG4gIFNDQXNzaXN0YW50QXZhdGFyLFxuICBTQ1Rhc2tMaW5rLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbn0gZnJvbSAnLi9uZXdTdHlsZXMnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IE1BSUFJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgQ2hhdEFJU3VnZ2VzdGlvbnMgfSBmcm9tICcuL0NoYXRBSVN1Z2dlc3Rpb25zJ1xuaW1wb3J0IHsgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVGcm9tVXJsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZURvd25sb2FkSGVscGVyJ1xuXG4vKiogQ29udGV4dG8gY29uIGVsIHRleHRvIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZy4gU29sbyBlbCBjb21wb25lbnRlIHF1ZSBsbyBjb25zdW1lIHJlLXJlbmRlcml6YSBjdWFuZG8gY2FtYmlhLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PHN0cmluZz4oJycpXG5cbmNvbnN0IGNvZGUgPSBjcmVhdGVDb2RlUGx1Z2luKHsgdGhlbWVzOiBbJ2dpdGh1Yi1saWdodCcsICdnaXRodWItbGlnaHQnXSB9KVxuXG5jb25zdCBBc3Npc3RhbnRBdmF0YXJJbm5lcjogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICByZXR1cm4gKFxuICAgIDxTQ0Fzc2lzdGFudEF2YXRhcj5cbiAgICAgIHthZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/IDxNQUlBSWNvbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+IDogYWdlbnQ/LmVtb2ppfVxuICAgIDwvU0NBc3Npc3RhbnRBdmF0YXI+XG4gIClcbn1cblxuY29uc3QgQXNzaXN0YW50QXZhdGFyID0gbWVtbyhBc3Npc3RhbnRBdmF0YXJJbm5lcilcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sIGZhcUlkPzogc3RyaW5nLCBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZykgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPzogYm9vbGVhblxuICBoYW5kbGVGZWVkYmFjazogKGZlZWRiYWNrOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGhhbmRsZUFwcHJvdmFsRGVjaXNpb246ICh0aHJlYWRJZHM6IHN0cmluZ1tdLCBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcpID0+IHZvaWRcbiAgZGlzYWJsZUZlZWRiYWNrPzogRmVlZGJhY2sgfCBudWxsXG4gIHNvdXJjZXM/OiBhbnlcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICBleHBhbmRlZD86IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIE1lc3NhZ2VXcmFwcGVyUHJvcHMge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgJ2RhdGEtbWVzc2FnZS1pZCc/OiBzdHJpbmdcbiAgaGFzRmVlZGJhY2s/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHMgPSBNQUlBTWVzc2FnZVByb3BzICYge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGlzQ2hhbmdlUHJvamVjdD86IGJvb2xlYW5cbn1cblxuY29uc3QgTWVzc2FnZVdyYXBwZXI6IEZDPE1lc3NhZ2VXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlRnJvbVVzZXIgOiBNZXNzYWdlRnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbXBvbmVudCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L01lc3NhZ2VDb21wb25lbnQ+XG59XG5cbmNvbnN0IE1lc3NhZ2VDb250ZW50V3JhcHBlcjogRkM8TWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29udGVudENvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlQ29udGVudEZyb21Vc2VyIDogTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29udGVudENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIE1lc3NhZ2VPcHRpb25zKHtcbiAgb3B0aW9ucyxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uLFxufToge1xuICBvcHRpb25zOiBQcm9qZWN0W10gfCBudWxsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxufSkge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPFByb2plY3QgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbmNvbnN0IEFzc2lzdGFudE1lc3NhZ2VIZWFkZXIgPSAoKSA9PiB7XG4gIGNvbnN0IFtsb2NhbEFnZW50LCBzZXRMb2NhbEFnZW50XSA9IHVzZVN0YXRlPEFnZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRMb2NhbEFnZW50KGFnZW50KVxuICB9LCBbYWdlbnRdKVxuXG4gIHJldHVybiAoXG4gICAgPFNDQXNzaXN0YW50TWVzc2FnZUhlYWRlcj5cbiAgICAgIDxBc3Npc3RhbnRBdmF0YXIgLz5cbiAgICAgIHtsb2NhbEFnZW50Py5uYW1lICYmIChcbiAgICAgICAgPFNDQXNzaXN0YW50TmFtZT57bG9jYWxBZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/ICdNQUlBJyA6IGxvY2FsQWdlbnQ/Lm5hbWV9PC9TQ0Fzc2lzdGFudE5hbWU+XG4gICAgICApfVxuICAgIDwvU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyPlxuICApXG59XG5cbi8vIEV4dHJhZSBlbCBzZWdtZW50byBkZSB0YWIgKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpIGRlbCBocmVmIHBhcmEgYWJyaXIgZWwgbW9kYWwgY29uIGVsIHRhYiBjb3JyZWN0b1xuY29uc3QgZ2V0VGFiU2VnbWVudEZyb21IcmVmID0gKGhyZWY6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG1hdGNoID0gaHJlZi5tYXRjaCgvXFwvdGFza3NcXC9cXGQrXFwvKFteLz9dKykvKVxuICByZXR1cm4gbWF0Y2ggJiYgL14oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykkLy50ZXN0KG1hdGNoWzFdKSA/IG1hdGNoWzFdIDogJ2RldGFpbCdcbn1cblxuLyoqIEV4dHJhZSBsYXMgdGFyZWFzIGVubGF6YWRhcyBlbiBlbCB0ZXh0byAoVVJMcyBxdWUgY29pbmNpZGVuIGNvbiBUQVNLX1VSTF9SRUdFWF9QQVRURVJOKS4gKi9cbmNvbnN0IGV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZyk6IFRhc2tJbmZvW10gPT4ge1xuICBpZiAoIW1lc3NhZ2UpIHJldHVybiBbXVxuICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgY29uc3QgdGFza3M6IFRhc2tJbmZvW10gPSBbXVxuICBjb25zdCBzZWVuSWRzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gbnVsbFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgd2hpbGUgKChtYXRjaCA9IHRhc2tVcmxSZWdleC5leGVjKG1lc3NhZ2UpKSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRhc2tJZCA9IG1hdGNoWzFdXG4gICAgY29uc3QgdXJsID0gbWF0Y2hbMF1cbiAgICBpZiAoIXNlZW5JZHMuaGFzKHRhc2tJZCkpIHtcbiAgICAgIHNlZW5JZHMuYWRkKHRhc2tJZClcbiAgICAgIGNvbnN0IGVzY2FwZWRVcmwgPSB1cmwucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxuICAgICAgY29uc3QgbWFya2Rvd25MaW5rUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcWyhbXlxcXFxdXSspXFxcXF1cXFxcKCR7ZXNjYXBlZFVybH1cXFxcKWApXG4gICAgICBjb25zdCBsaW5rTWF0Y2ggPSBtZXNzYWdlLm1hdGNoKG1hcmtkb3duTGlua1JlZ2V4KVxuICAgICAgY29uc3QgdGl0bGUgPSBsaW5rTWF0Y2ggPyBsaW5rTWF0Y2hbMV0gOiBgVGFyZWEgIyR7dGFza0lkfWBcbiAgICAgIHRhc2tzLnB1c2goeyBpZDogdGFza0lkLCB0aXRsZSwgdXJsIH0pXG4gICAgfVxuICB9XG4gIHJldHVybiB0YXNrc1xufVxuXG5jb25zdCBoYXNUYXNrTGlua3MgPSAodGV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiBleHRyYWN0VGFza3NGcm9tTWVzc2FnZSh0ZXh0KS5sZW5ndGggPiAwXG5cbi8vIENvbXBvbmVudCBmb3IgdGFzayBsaW5rcyB0aGF0IHVzZXMgdGhlIHVzZVRhc2tQYW5lbCBob29rXG5jb25zdCBUYXNrTGluazogRkM8eyBocmVmOiBzdHJpbmc7IHRhc2tJZDogc3RyaW5nOyBjaGlsZHJlbjogUmVhY3ROb2RlIH0+ID0gKHsgaHJlZiwgdGFza0lkLCBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IHRhYlNlZ21lbnQgPSBnZXRUYWJTZWdtZW50RnJvbUhyZWYoaHJlZilcbiAgY29uc3QgeyBidWlsZE9wZW5UYXNrIH0gPSB1c2VUYXNrUGFuZWwodGFza0lkLCB0YWJTZWdtZW50KVxuICBjb25zdCBvcGVuVGFzayA9IGJ1aWxkT3BlblRhc2soKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB7XG4gICAgLy8gU2kgZXMgQ21kL0N0cmwgKyBjbGljaywgZGVqYXIgcXVlIHNlIGFicmEgZW4gbnVldmEgcGVzdGHDsWEgKGNvbXBvcnRhbWllbnRvIHBvciBkZWZlY3RvKVxuICAgIGlmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBvcGVuVGFzaygpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ1Rhc2tMaW5rIGhyZWY9e2hyZWZ9IG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NDVGFza0xpbms+XG4gIClcbn1cblxuLy8gQ3VzdG9tIGxpbmsgY29tcG9uZW50IGZvciBTdHJlYW1kb3duOiB0YXNrIFVSTHMgb3BlbiB0aGUgdGFzayBwYW5lbCwgb3RoZXIgbGlua3MgcmVuZGVyIG5vcm1hbGx5XG50eXBlIEN1c3RvbUxpbmtQcm9wcyA9IFJlYWN0LkFuY2hvckhUTUxBdHRyaWJ1dGVzPEhUTUxBbmNob3JFbGVtZW50PiAmIHsgbm9kZT86IHVua25vd24gfVxuY29uc3QgQ3VzdG9tTGluazogRkM8Q3VzdG9tTGlua1Byb3BzPiA9ICh7IGhyZWYsIGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgaWYgKCFocmVmIHx8IHR5cGVvZiBocmVmICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8YSBocmVmPXtocmVmfSB7Li4ucmVzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYT5cbiAgICApXG4gIH1cbiAgY29uc3QgdGFza01hdGNoID0gaHJlZi5tYXRjaChuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4pKVxuICBpZiAodGFza01hdGNoKSB7XG4gICAgY29uc3QgdGFza0lkID0gdGFza01hdGNoWzFdXG4gICAgcmV0dXJuIChcbiAgICAgIDxUYXNrTGluayBocmVmPXtocmVmfSB0YXNrSWQ9e3Rhc2tJZH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvVGFza0xpbms+XG4gICAgKVxuICB9XG4gIHJldHVybiAoXG4gICAgPGEgaHJlZj17aHJlZn0gey4uLnJlc3R9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYT5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIGNvbnN0IGZyb21Db250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChTdHJlYW1pbmdNZXNzYWdlQ29udGV4dClcbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gZnJvbUNvbnRleHQgOiBwcm9wcy5tZXNzYWdlXG4gICAgY29uc3QgY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCA9IHByb3BzLmNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWRcbiAgICBpZiAoIWRpc3BsYXlUZXh0ICYmICFwcm9wcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXJcbiAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtwcm9wcy5pc0Fzc2lzdGFudCAmJiBoYXNUYXNrTGlua3MoZGlzcGxheVRleHQpID8gJ2hhcy10YXNrLWxpbmtzJyA6ICcnfVxuICAgICAgICA+XG4gICAgICAgICAgPFN0cmVhbWRvd25cbiAgICAgICAgICAgIHBsdWdpbnM9e3sgY29kZSB9fVxuICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBDdXN0b21MaW5rIH0gYXMgUGFyYW1ldGVyczx0eXBlb2YgU3RyZWFtZG93bj5bMF1bJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgIGxpbmtTYWZldHk9e3sgZW5hYmxlZDogZmFsc2UgfX1cbiAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgc2hpa2lUaGVtZT17WydnaXRodWItbGlnaHQnLCAnZ2l0aHViLWxpZ2h0J119XG4gICAgICAgICAgICBjb250cm9scz17eyB0YWJsZTogZmFsc2UsIGNvZGU6IGZhbHNlIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Rpc3BsYXlUZXh0fVxuICAgICAgICAgIDwvU3RyZWFtZG93bj5cbiAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiYgIXByb3BzLmlzRXJyb3IgJiYgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXByb3BzLmFwcHJvdmFsICYmICFwcm9wcy5pc1N0cmVhbWluZyAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2VGZWVkYmFja1xuICAgICAgICAgICAgY29udGVudD17ZGlzcGxheVRleHR9XG4gICAgICAgICAgICBzb3VyY2VzPXtwcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e3Byb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e3Byb3BzLmRpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiYgIXByb3BzLmlzRXJyb3IgJiYgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXByb3BzLmFwcHJvdmFsICYmIChcbiAgICAgICAgICA8Q2hhdEFJU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtwcm9wcy5zdWdnZXN0aW9ucyB8fCBbXX1cbiAgICAgICAgICAgIG9uU2VsZWN0U3VnZ2VzdGlvbj17c3VnZ2VzdGlvbiA9PiBwcm9wcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2socHJvcHMubWVzc2FnZUlkLCBzdWdnZXN0aW9uKX1cbiAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgISFjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNcbiAgICAgICAgICAgICAgYWdlbnRJZD17Y3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cbilcblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICBjb25zdCBtZXNzYWdlQXR0YWNobWVudHMgPVxuICAgIGF0dGFjaG1lbnRzICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcbiAgICAgID8gYXR0YWNobWVudHNcbiAgICAgIDogIWlzQXNzaXN0YW50ICYmIEFycmF5LmlzQXJyYXkoc291cmNlcylcbiAgICAgICAgPyAoc291cmNlcyBhcyBBdHRhY2htZW50RmlsZVtdKVxuICAgICAgICA6IFtdXG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudENsaWNrID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgLy8gUGVybWl0aXIgcHJldmlzdWFsaXphY2nDs24gc2kgdGllbmUgYXJjaGl2byBsb2NhbCBvIFVSTHMgZGVsIGJhY2tlbmRcbiAgICBpZiAoXG4gICAgICBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX2ZpbGVcbiAgICApIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQgPSBhc3luYyAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBhdHRhY2htZW50Lm5hbWUuaW5jbHVkZXMoJy4nKSA/ICcnIDogYC4ke2F0dGFjaG1lbnQudHlwZX1gXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHthdHRhY2htZW50Lm5hbWV9JHtleHRlbnNpb259YFxuICAgIGNvbnN0IGZpbGVVcmwgPSBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fCBhdHRhY2htZW50LnVybF9maWxlIHx8IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbFxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBibG9iVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuXG4gICAgICBpZiAoZmlsZVVybCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoZmlsZVVybCwgZmlsZU5hbWUsIGF0dGFjaG1lbnQudHlwZSlcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZG93bmxvYWRlZEZpbGUpXG4gICAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYXR0YWNobWVudC5maWxlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWJsb2JVcmwpIHJldHVyblxuXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBsaW5rLmhyZWYgPSBibG9iVXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWVcbiAgICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKVxuICAgICAgbGluay5jbGljaygpXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybClcbiAgICAgIH0sIDEwMClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRvd25sb2FkIGF0dGFjaG1lbnQnLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICBpZiAoaXNDaGFuZ2VQcm9qZWN0ICYmIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICB7aXNBc3Npc3RhbnQgJiYgPEFzc2lzdGFudE1lc3NhZ2VIZWFkZXIgLz59XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAge2lzQXNzaXN0YW50ICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgeyEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3cgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgICB7bWVzc2FnZUF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGV0ZWN0YXIgc2kgZXMgdW4gYXJjaGl2byBkZSBhdWRpb1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50VHlwZSA9IGF0dGFjaG1lbnQ/LnR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudE5hbWUgPSBhdHRhY2htZW50Py5uYW1lPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzQXVkaW9GaWxlID1cbiAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZS5zdGFydHNXaXRoKCdhdWRpby8nKSB8fFxuICAgICAgICAgICAgICAgIFsnZmxhYycsICdtNGEnLCAnbXAzJywgJ21wNCcsICdvZ2EnLCAnb2dnJywgJ3dhdicsICd3ZWJtJ10uaW5jbHVkZXMoYXR0YWNobWVudFR5cGUpIHx8XG4gICAgICAgICAgICAgICAgWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddLnNvbWUoZXh0ID0+XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50TmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChpc0F1ZGlvRmlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiA8QXR0YWNobWVudENhcmRBdWRpbyBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9IGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9IC8+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxBdHRhY2htZW50Q2FyZFxuICAgICAgICAgICAgICAgICAga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfVxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudD17YXR0YWNobWVudH1cbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgb25Eb3dubG9hZD17KCkgPT4gaGFuZGxlQXR0YWNobWVudERvd25sb2FkKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQXR0YWNobWVudENsaWNrKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvU0NBdHRhY2htZW50c1Jvdz5cbiAgICAgICAgKX1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJyl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgICB7KCEhbWVzc2FnZSB8fCBpc1N0cmVhbWluZykgJiYgIWFwcHJvdmFsICYmICEoaXNBc3Npc3RhbnQgJiYgISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFN0cmVhbWluZ01lc3NhZ2VCb2R5XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlID8/ICcnfVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9eyEhaXNTdHJlYW1pbmd9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fVxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgIGFwcHJvdmFsPXthcHByb3ZhbH1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG4gIGV4cGFuZGVkLFxufTogQ2hhdEFJTWVzc2FnZXNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IGlzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHVzZXJTY3JvbGxpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzLCBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSlcbiAgY29uc3Qgc3RyZWFtaW5nTWVzc2FnZVByb3BzUmVmID0gdXNlUmVmPFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih7fSlcbiAgY29uc3Qgc3RyZWFtaW5nTWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGNoYW5nZVByb2plY3Qob3B0aW9uKVxuICAgIH0sXG4gICAgW2NoYW5nZVByb2plY3RdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uPy50cmltKCkpIHJldHVyblxuICAgICAgaWYgKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZUlkXSkgcmV0dXJuXG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJyAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhZ2VudD8ubmFtZSB8fCAnJylcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID8gJ21hcmtldHBsYWNlJyA6IGFnZW50Py50eXBlLFxuICAgICAgfSlcbiAgICAgIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMocHJldiA9PiAoeyAuLi5wcmV2LCBbbWVzc2FnZUlkXTogdHJ1ZSB9KSlcbiAgICAgIHNlbmRNZXNzYWdlKHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbc2VuZE1lc3NhZ2UsIHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIGV2ZW50LCBhZ2VudD8uZW50aXR5LCBhZ2VudD8ubmFtZSwgYWdlbnQ/LnR5cGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvKHtcbiAgICAgICAgdG9wOiBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodCxcbiAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgfSlcbiAgICAgIC8vIEFjdHVhbGl6YXIgZXN0YWRvIGRlc3B1w6lzIGRlIHVuIGJyZXZlIGRlbGF5IHBhcmEgcGVybWl0aXIgcXVlIGVsIHNjcm9sbCBzZSBjb21wbGV0ZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0sIDUwMClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9ICFpc05lYXJCb3R0b21cbiAgICAgICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gc2Nyb2xsVG9wXG5cbiAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgICBjb25zdCBkaWRTZXRTdGF0ZSA9IHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93XG4gICAgICAgIGlmIChkaWRTZXRTdGF0ZSkge1xuICAgICAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvblNjcm9sbFRvQm90dG9tLCBoYW5kbGVTY3JvbGxdXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQsIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQsIHdhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICAvLyBDdWFuZG8gZWwgYWdlbnRlIGVtcGllemEgYSByZXNwb25kZXIsIHJlc2V0ZWFyIGVsIGZsYWcgeSBlbCB1bWJyYWwgcGFyYSBhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGxsZWdhIHVuIG1lbnNhamUgZGUgYXByb2JhY2nDs24gKEFwcHJvdmFsQm94KS4gU2luIFJlc2l6ZU9ic2VydmVyIGVuIGVsXG4gIC8vIGNvbnRlbmVkb3I6IG9ic2VydmFybG8gZGlzcGFyYWJhIGNhbGxiYWNrcyBhbCBjYW1iaWFyIGVsIGxheW91dC9zY3JvbGxiYXIgeSBjYWRhIHVub1xuICAvLyBsbGFtYWJhIHNjcm9sbFRvQm90dG9tKCksIHByb3ZvY2FuZG8gdGlyb25lcyBhbCBzY3JvbGxlYXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50IHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gICAgY29uc3QgaGFzQXBwcm92YWwgPSBsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcblxuICAgIGlmICghaGFzQXBwcm92YWwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcblxuICAgIGlmICghKGlzQXRCb3R0b20gfHwgIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxUb0JvdHRvbSA9ICgpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZWN1ZW5jaWEgaW5pY2lhbCBkZSBzY3JvbGwgcGFyYSBjdWFuZG8gZWwgQXBwcm92YWxCb3ggYWNhYmEgZGUgcmVuZGVyaXphcnNlXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHNjcm9sbFRvQm90dG9tKClcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgc2V0VGltZW91dChzY3JvbGxUb0JvdHRvbSwgMTAwKVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNpIGVsIHVzdWFyaW8gZXN0w6Egc2Nyb2xsZWFuZG8gbWFudWFsbWVudGUsIG5vIGhhY2VyIGF1dG8gc2Nyb2xsXG4gICAgaWYgKHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCAmJiB3YWl0aW5nUmVzcG9uc2UpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgJiYgbWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHJldHVyblxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cblxuICAgIGNvbnN0IGlzTmV3QW5zd2VyTWVzc2FnZSA9IGxhc3RNZXNzYWdlICYmIGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKVxuICAgIGNvbnN0IGlzTmV3VXNlck1lc3NhZ2UgPSBsYXN0TWVzc2FnZSAmJiBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKVxuICAgIGNvbnN0IGlzTmV3QXBwcm92YWxNZXNzYWdlID0gbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcbiAgICBjb25zdCBoYXNNZXNzYWdlcyA9ICEhbWVzc2FnZXMubGVuZ3RoXG4gICAgY29uc3QgaXNOb3RJbml0aWFsTWVzc2FnZSA9ICFtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG5cbiAgICBpZiAoKGlzTmV3QW5zd2VyTWVzc2FnZSB8fCBpc05ld1VzZXJNZXNzYWdlIHx8IGlzTmV3QXBwcm92YWxNZXNzYWdlKSAmJiBpc0F0Qm90dG9tKSB7XG4gICAgICAvLyBQYXJhIG1lbnNhamVzIGRlIGFwcm9iYWNpw7NuLCB1c2FyIHVuIHBlcXVlw7FvIGRlbGF5IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIEFwcHJvdmFsQm94IHNlIGhheWEgcmVuZGVyaXphZG9cbiAgICAgIGNvbnN0IHNjcm9sbERlbGF5ID0gaXNOZXdBcHByb3ZhbE1lc3NhZ2UgPyAxMDAgOiAwXG4gICAgICBjb25zdCBkb1Njcm9sbCA9ICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuICAgICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc2Nyb2xsRGVsYXkgPiAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZG9TY3JvbGwsIHNjcm9sbERlbGF5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9TY3JvbGwoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBoYXNNZXNzYWdlcyAmJlxuICAgICAgaXNOb3RJbml0aWFsTWVzc2FnZSAmJlxuICAgICAgIWlzTmV3QW5zd2VyTWVzc2FnZSAmJlxuICAgICAgIWlzTmV3VXNlck1lc3NhZ2UgJiZcbiAgICAgICFpc05ld0FwcHJvdmFsTWVzc2FnZVxuICAgICkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCB3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIC8vIFZlcmlmaWNhciBlbCBlc3RhZG8gaW5pY2lhbCBkZWwgc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXJcbiAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoXSlcblxuICAvLyBPYnRlbmVyIGVsIMO6bHRpbW8gbWVuc2FqZSBkZWwgdXN1YXJpbyBwYXJhIHZlcmlmaWNhciBzaSB0aWVuZSBhdHRhY2htZW50c1xuICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAuYXQoLTEpXG5cbiAgY29uc3QgaGFzQXR0YWNobWVudHMgPVxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uYXR0YWNobWVudHMpICYmIGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGgpIHx8XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5zb3VyY2VzKSAmJiBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGgpXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcbiAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYWdlbnQ/Lm5hbWUgfHwgJycpXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBjb25zdCBsYXN0TXNnID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgY29uc3QgaXNTdHJlYW1pbmdBY3RpdmUgPVxuICAgICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKSAmJlxuICAgIGxhc3RNc2cgJiZcbiAgICAobGFzdE1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IGxhc3RNc2cudXNlcj8uaWQgPT09ICdhc3Npc3RhbnQnKVxuICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gaXNTdHJlYW1pbmdBY3RpdmUgPyAobGFzdE1zZy5tZXNzYWdlID8/ICcnKSA6ICcnXG5cbiAgaWYgKGxvYWRpbmdNZXNzYWdlcykge1xuICAgIHJldHVybiA8TG9hZGVyIC8+XG4gIH1cblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8U3RyZWFtaW5nTWVzc2FnZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N0cmVhbWluZ1RleHR9PlxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VGZWVkYmFjayA9XG4gICAgICAgICAgICBtZXNzYWdlPy53YXNIZWxwZnVsID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZS53YXNIZWxwZnVsID09PSBudWxsXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IG1lc3NhZ2Uud2FzSGVscGZ1bFxuICAgICAgICAgICAgICAgID8gRmVlZGJhY2suVEhVTUJTX1VQXG4gICAgICAgICAgICAgICAgOiBGZWVkYmFjay5USFVNQlNfRE9XTlxuXG4gICAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gS2V5IGVzdGFibGU6IHNvbG8gbWVzc2FnZS5pZCBwYXJhIGV2aXRhciByZW1vdW50IGR1cmFudGUgc3RyZWFtaW5nIChtZXNzYWdlLmRhdGUgcHVlZGUgY2FtYmlhcilcbiAgICAgICAgICBjb25zdCBtZXNzYWdlS2V5ID0gbWVzc2FnZS5pZCA/PyBgbXNnLSR7aW5kZXh9YFxuXG4gICAgICAgICAgaWYgKGlzU3RyZWFtaW5nKSB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtaW5nTWVzc2FnZUlkUmVmLmN1cnJlbnQgIT09IG1lc3NhZ2UuaWQpIHtcbiAgICAgICAgICAgICAgc3RyZWFtaW5nTWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlLmlkID8/IG51bGxcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICBzdHJlYW1pbmdNZXNzYWdlUHJvcHNSZWYuY3VycmVudCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIHsgbWVzc2FnZTogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgYXV0aFVzZXIsXG4gICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjayxcbiAgICAgICAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb246ICEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXSxcbiAgICAgICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjazogbWVzc2FnZUZlZWRiYWNrLFxuICAgICAgICAgICAgICAgICAgaXNTdHJlYW1pbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gPE1lc3NhZ2VJdGVtIGtleT17bWVzc2FnZUtleX0gey4uLihzdHJlYW1pbmdNZXNzYWdlUHJvcHNSZWYuY3VycmVudCBhcyBNZXNzYWdlSXRlbVByb3BzKX0gLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgc3RyZWFtaW5nTWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNZXNzYWdlSXRlbVxuICAgICAgICAgICAgICB7Li4ubWVzc2FnZX1cbiAgICAgICAgICAgICAga2V5PXttZXNzYWdlS2V5fVxuICAgICAgICAgICAgICBhdXRoVXNlcj17YXV0aFVzZXJ9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufVxuICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb249e2hhbmRsZUFwcHJvdmFsRGVjaXNpb259XG4gICAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb249eyEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtmYWxzZX1cbiAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC9TdHJlYW1pbmdNZXNzYWdlQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgIHsod2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlIHx8IE9iamVjdC5rZXlzKGFjdGl2ZUxvYWRpbmdzIHx8IHt9KS5sZW5ndGggPiAwKSAmJiAoXG4gICAgICAgIDxTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICAgICB7T2JqZWN0LmtleXMoYWN0aXZlTG9hZGluZ3MgfHwge30pLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICA8TG9hZGluZ1RleHRcbiAgICAgICAgICAgICAga2V5PVwibG9hZGluZy1hY3RpdmVcIlxuICAgICAgICAgICAgICB0ZXh0PXtcbiAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKGFjdGl2ZUxvYWRpbmdzIHx8IHt9KS5maW5kKG1zZyA9PiBtc2cgIT09IHQoJ2NoYXQucHJvY2Vzc2luZycpKSB8fCB0KCdjaGF0LnByb2Nlc3NpbmcnKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAod2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlKSAmJiAoXG4gICAgICAgICAgICAgIDxMb2FkaW5nVGV4dFxuICAgICAgICAgICAgICAgIHRleHQ9e1xuICAgICAgICAgICAgICAgICAgbG9hZGluZ01lc3NhZ2UgfHxcbiAgICAgICAgICAgICAgICAgIChpc1dlYlNlYXJjaEFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICA/ICdCdXNjYW5kbyBlbiBsYSB3ZWInXG4gICAgICAgICAgICAgICAgICAgIDogaXNEZWVwU2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgPyB0KCdjaGF0LmdlbmVyYXRpbmdEZWVwU2VhcmNoJylcbiAgICAgICAgICAgICAgICAgICAgICA6IGhhc0F0dGFjaG1lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHQoJ2NoYXQuZ2VuZXJhdGluZ0F0dGFjaG1lbnQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0KCdjaGF0LmdlbmVyYXRpbmcnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApXG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VzT3V0ZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fT5cbiAgICAgIHtpc1Njcm9sbE9uUGFyZW50ID8gKFxuICAgICAgICA8U0NNZXNzYWdlc1Njcm9sbCByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fSAkaXNNYXJrZXRwbGFjZUdsb2JhbD17aXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50fT5cbiAgICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICAgIDwvU0NNZXNzYWdlc1Njcm9sbD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01lc3NhZ2VzSW5uZXJcbiAgICAgICAgICByZWY9e21lc3NhZ2VzUmVmfVxuICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX1cbiAgICAgICAgICAkc2Nyb2xsT25QYXJlbnQ9e2ZhbHNlfVxuICAgICAgICAgICRpc01hcmtldHBsYWNlR2xvYmFsPXtpc01hcmtldHBsYWNlR2xvYmFsQWdlbnR9XG4gICAgICAgID5cbiAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93U2Nyb2xsVG9Cb3R0b20gJiYgKFxuICAgICAgICA8U2Nyb2xsVG9Cb3R0b21CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxBcnJvd1NtYWxsRG93biBjb2xvcj1cIiM2NjZcIiB3aWR0aD1cIjIwcHhcIiBoZWlnaHQ9XCIyMHB4XCIgLz5cbiAgICAgICAgPC9TY3JvbGxUb0JvdHRvbUJ1dHRvbj5cbiAgICAgICl9XG4gICAgPC9TQ01lc3NhZ2VzT3V0ZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLEtBQUssSUFBUUMsSUFBSSxFQUFhQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBQUMsYUFBQSxJQUFBQyxjQUFBLFFBQVEsT0FBTztBQUM3RyxTQUFTQyxVQUFVLFFBQVEsWUFBWTtBQUN2QyxTQUFTQyxnQkFBZ0IsUUFBUSxrQkFBa0I7QUFDbkQsU0FBU0MsY0FBYyxRQUFRLGlEQUFpRDtBQUVoRixTQUFTQyxjQUFjLFFBQVEsMkNBQTJDO0FBQzFFLFNBQVNDLFdBQVcsUUFBUSxxQ0FBcUM7QUFDakUsU0FBU0Msc0JBQXNCLFFBQVEsb0NBQW9DO0FBQzNFLFNBQVNDLG1CQUFtQixRQUFRLGdEQUFnRDtBQUVwRixTQUFzQkMsZUFBZSxRQUFrQixxQkFBcUI7QUFFNUUsU0FBa0JDLE9BQU8sUUFBUSwyQkFBMkI7QUFFNUQsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyxjQUFjLFFBQVEsOENBQThDO0FBQzdFLFNBQVNDLFlBQVksUUFBUSw2QkFBNkI7QUFFMUQsU0FBU0MsV0FBVyxRQUFRLHlCQUF5QjtBQUNyRCxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBSTNDLFNBQVNDLGVBQWUsRUFBRUMsZ0JBQWdCLEVBQUVDLHNCQUFzQixFQUFFQyx1QkFBdUIsUUFBUSxVQUFVO0FBQzdHLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FDRUMsbUJBQW1CLEVBQ25CQyxvQkFBb0IsRUFDcEJDLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCQyxlQUFlLEVBQ2ZDLHVCQUF1QixFQUN2QkMsYUFB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
|
|
844
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiU3RyZWFtZG93biIsImNyZWF0ZUNvZGVQbHVnaW4iLCJBcnJvd1NtYWxsRG93biIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVVzZXIiLCJ1c2VUIiwidXNlQ2hhdE1hbmFnZXIiLCJ1c2VUYXNrUGFuZWwiLCJ1c2VTbW9vdGhTdHJlYW1UZXh0IiwidXNlU3RyZWFtaW5nTWVzc2FnZSIsIkxvYWRpbmdUZXh0IiwiTG9hZGVyIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIlNDTWVzc2FnZXNPdXRlciIsIlNDTWVzc2FnZXNTY3JvbGwiLCJTQ01lc3NhZ2VzSW5uZXIiLCJTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbiIsIlNDT3B0aW9uc0xpc3QiLCJTQ09wdGlvbkl0ZW0iLCJTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXIiLCJTQ0Fzc2lzdGFudE5hbWUiLCJTQ0Fzc2lzdGFudEF2YXRhciIsIlNDVGFza0xpbmsiLCJTQ01lc3NhZ2VJdGVtV3JhcHBlciIsIlNDTWVzc2FnZUl0ZW1Jbm5lciIsIlNDQXR0YWNobWVudHNSb3ciLCJTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbiIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIk1BSUFJY29uIiwiVEFTS19VUkxfUkVHRVhfUEFUVEVSTiIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJkb3dubG9hZEZpbGVGcm9tVXJsIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiY29kZSIsInRoZW1lcyIsIkFzc2lzdGFudEF2YXRhcklubmVyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsImNoaWxkcmVuIiwidHlwZSIsIndpZHRoIiwiaGVpZ2h0IiwiZW1vamkiLCJBc3Npc3RhbnRBdmF0YXIiLCJNZXNzYWdlV3JhcHBlciIsIl9yZWYiLCJpc0N1cnJlbnRVc2VyIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiQXNzaXN0YW50TWVzc2FnZUhlYWRlciIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibG9jYWxBZ2VudCIsInNldExvY2FsQWdlbnQiLCJfdXNlR2xvYmFsQ29udGV4dDIiLCJnZXRUYWJTZWdtZW50RnJvbUhyZWYiLCJocmVmIiwibWF0Y2giLCJ0ZXN0IiwiZXh0cmFjdFRhc2tzRnJvbU1lc3NhZ2UiLCJtZXNzYWdlIiwidGFza1VybFJlZ2V4IiwiUmVnRXhwIiwidGFza3MiLCJzZWVuSWRzIiwiU2V0IiwiZXhlYyIsInRhc2tJZCIsInVybCIsImhhcyIsImFkZCIsImVzY2FwZWRVcmwiLCJyZXBsYWNlIiwibWFya2Rvd25MaW5rUmVnZXgiLCJjb25jYXQiLCJsaW5rTWF0Y2giLCJ0aXRsZSIsInB1c2giLCJoYXNUYXNrTGlua3MiLCJ0ZXh0IiwibGVuZ3RoIiwiVGFza0xpbmsiLCJfcmVmNCIsInRhYlNlZ21lbnQiLCJfdXNlVGFza1BhbmVsIiwiYnVpbGRPcGVuVGFzayIsIm9wZW5UYXNrIiwiaGFuZGxlQ2xpY2siLCJlIiwibWV0YUtleSIsImN0cmxLZXkiLCJwcmV2ZW50RGVmYXVsdCIsIkN1c3RvbUxpbmsiLCJfcmVmNSIsInJlc3QiLCJfZXhjbHVkZWQzIiwidGFza01hdGNoIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkY3JlYXRlQWdlbnRGb2wiLCJzdHJlYW1pbmdUZXh0IiwiaXNTdHJlYW1pbmciLCJtZXNzYWdlSWQiLCJyYXdUZXh0IiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwidGFyZ2V0TGFnTXMiLCJtYXhDaGFyc1BlckZyYW1lIiwic25hcFRvV29yZEJvdW5kYXJ5IiwiY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJhZ2VudElkIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsImlzQXNzaXN0YW50IiwicGx1Z2lucyIsImNvbXBvbmVudHMiLCJhIiwibGlua1NhZmV0eSIsImlzQW5pbWF0aW5nIiwic2hpa2lUaGVtZSIsImNvbnRyb2xzIiwidGFibGUiLCJpc0Vycm9yIiwiYXBwcm92YWwiLCJjb250ZW50Iiwic291cmNlcyIsImhhbmRsZUZlZWRiYWNrIiwiaGFuZGxlRmVlZGJhY2tDbGljayIsImRpc2FibGVGZWVkYmFjayIsInN1Z2dlc3Rpb25zIiwib25TZWxlY3RTdWdnZXN0aW9uIiwic3VnZ2VzdGlvbiIsImhhbmRsZVN1Z2dlc3Rpb25DbGljayIsImRpc2FibGVkIiwic3VnZ2VzdGlvbnNEaXNhYmxlZCIsImhpZGRlbiIsImlzTGFzdE1lc3NhZ2UiLCJNZXNzYWdlSXRlbSIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJyb2xlIiwiYXR0YWNobWVudHMiLCJhcHByb3ZhbFN0YXR1cyIsImhhc1NlbGVjdGVkU3VnZ2VzdGlvbiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwicHJldmlld0F0dGFjaG1lbnQiLCJzZXRQcmV2aWV3QXR0YWNobWVudCIsIlVTRVIiLCJ0b1N0cmluZyIsIkFTU0lTVEFOVCIsIm1lc3NhZ2VBdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImhhbmRsZUF0dGFjaG1lbnRDbGljayIsImF0dGFjaG1lbnQiLCJmaWxlIiwiRmlsZSIsIm9yaWdpbmFsRmlsZSIsInVybF90aHVtYm5haWwiLCJ1cmxfb3JpZ2luYWwiLCJ1cmxfZmlsZSIsImhhbmRsZUNsb3NlUHJldmlldyIsImhhbmRsZUF0dGFjaG1lbnREb3dubG9hZCIsIl9yZWY2IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJleHRlbnNpb24iLCJmaWxlTmFtZSIsImZpbGVVcmwiLCJibG9iVXJsIiwiZG93bmxvYWRlZEZpbGUiLCJsaW5rIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImluY2x1ZGVzIiwic2VudCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImFicnVwdCIsImRvY3VtZW50IiwiZG93bmxvYWQiLCJzdHlsZSIsImRpc3BsYXkiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwiaW5kZXgiLCJfYXR0YWNobWVudCR0eXBlIiwiX2F0dGFjaG1lbnQkbmFtZSIsImF0dGFjaG1lbnRUeXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsImlzQXVkaW9GaWxlIiwic3RhcnRzV2l0aCIsInNvbWUiLCJleHQiLCJlbmRzV2l0aCIsInBvc2l0aW9uSW5kZXgiLCJvbkRvd25sb2FkIiwicGVuZGluZ19hY3Rpb25zIiwiYWN0aW9ucyIsInN0YXR1cyIsIm9uQXBwcm92ZSIsInRocmVhZElkcyIsIm9uUmVqZWN0IiwiaXNQcm9qZWN0RGVsZXRlZCIsInByb2plY3RNZXRhZGF0YSIsImlzX2RlbGV0ZWQiLCJpc0V4cGFuZGVkIiwiZXhwYW5kZWQiLCJoaXRsSW5zdGFuY2VJZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIndhcm5pbmdNZXNzYWdlIiwid2FybmluZ19tZXNzYWdlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImlzT3BlbiIsIm9uQ2xvc2UiLCJDaGF0QUlNZXNzYWdlc0lubmVyIiwiX3JlZjciLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJpbml0aWFsQ2hhdElkIiwib25FcnJvciIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsIm9uU2Nyb2xsVG9Cb3R0b20iLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dDMiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwidXNlclNjcm9sbGluZ1JlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzY3JvbGxSYWZSZWYiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNob3dTY3JvbGxUb0JvdHRvbSIsInNldFNob3dTY3JvbGxUb0JvdHRvbSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsInNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJfdXNlQ2hhdE1hbmFnZXIiLCJjaGF0SWQiLCJ1bmRlZmluZWQiLCJtZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwiYWN0aXZlTG9hZGluZ3MiLCJzZW5kTWVzc2FnZSIsImNoYW5nZVByb2plY3QiLCJpbml0aWFsaXplQ2hhdCIsImhhbmRsZVNjcm9sbCIsInN0b3BHZW5lcmF0aW9uIiwidHJpbSIsImlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCIsImVudGl0eSIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFnZW50X3R5cGUiLCJfZGVmaW5lUHJvcGVydHkiLCJ1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5IiwiZWwiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsInNjcm9sbFRvQm90dG9tUmFmIiwib3B0cyIsIl9vcHRzJHNraXBJZlVzZXJTY3JvbCIsInNraXBJZlVzZXJTY3JvbGxpbmciLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20iLCJzY3JvbGxUbyIsInRvcCIsImJlaGF2aW9yIiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJjb250YWluZXIiLCJjdXJyZW50VGFyZ2V0IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJpc1Njcm9sbGluZ1VwIiwiaXNOZWFyQm90dG9tIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsInJhZklkIiwibGFzdEhlaWdodCIsInRpY2siLCJjdXJyZW50SGVpZ2h0IiwibGFzdE1lc3NhZ2VJZFJlZiIsImxhc3RNZXNzYWdlc0xlbmd0aFJlZiIsIl9sYXN0TWVzc2FnZSRpZCIsImxhc3RNZXNzYWdlIiwibGFzdElkIiwicHJldklkIiwicHJldkxlbiIsImlzTmV3TWVzc2FnZSIsImlzQXRCb3R0b20iLCJoYXNJbml0aWFsTWVzc2FnZSIsIm1zZyIsImlzQXBwcm92YWwiLCJpc0Fuc3dlck9yUXVlc3Rpb24iLCJsYXN0VXNlck1lc3NhZ2UiLCJhdCIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJtZXNzYWdlc0NvbnRlbnQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRwcm9qZWN0IiwiX21lc3NhZ2UkaWQiLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwibWVzc2FnZUtleSIsImtleSIsIk9iamVjdCIsImtleXMiLCJ2YWx1ZXMiLCJmaW5kIiwiJHNjcm9sbE9uUGFyZW50IiwicmVmIiwib25TY3JvbGwiLCIkaXNNYXJrZXRwbGFjZUdsb2JhbCIsImNvbG9yIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTdHJlYW1kb3duIH0gZnJvbSAnc3RyZWFtZG93bidcbmltcG9ydCB7IGNyZWF0ZUNvZGVQbHVnaW4gfSBmcm9tICdAc3RyZWFtZG93bi9jb2RlJ1xuaW1wb3J0IHsgQXJyb3dTbWFsbERvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BcnJvd1NtYWxsRG93bidcblxuaW1wb3J0IHsgQXR0YWNobWVudENhcmQgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZCdcbmltcG9ydCB7IEFwcHJvdmFsQm94IH0gZnJvbSAnLi4vLi4vYXRvbXMvQXBwcm92YWxCb3gvQXBwcm92YWxCb3gnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkQXVkaW8gfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZEF1ZGlvJ1xuaW1wb3J0IHsgTUFJQU1lc3NhZ2VQcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFNZXNzYWdlL01BSUFNZXNzYWdlLmludGVyZmFjZXMnXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdEhpc3RvcnlSb2xlLCBUYXNrSW5mbyB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5cbmltcG9ydCB7IENPUlVzZXIsIHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IHVzZUNoYXRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXInXG5pbXBvcnQgeyB1c2VUYXNrUGFuZWwgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUYXNrUGFuZWwnXG5pbXBvcnQgeyB1c2VTbW9vdGhTdHJlYW1UZXh0IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU21vb3RoU3RyZWFtVGV4dCdcbmltcG9ydCB7IHVzZVN0cmVhbWluZ01lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTdHJlYW1pbmdNZXNzYWdlJ1xuXG5pbXBvcnQgeyBMb2FkaW5nVGV4dCB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRpbmdUZXh0J1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUHJvamVjdCdcblxuaW1wb3J0IHsgTWVzc2FnZUZyb21Vc2VyLCBNZXNzYWdlRnJvbU90aGVyLCBNZXNzYWdlQ29udGVudEZyb21Vc2VyLCBNZXNzYWdlQ29udGVudEZyb21PdGhlciB9IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgTWVzc2FnZUZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHtcbiAgU0NDQUlNZXNzYWdlV3JhcHBlcixcbiAgU2Nyb2xsVG9Cb3R0b21CdXR0b24sXG4gIFNDTWVzc2FnZXNPdXRlcixcbiAgU0NNZXNzYWdlc1Njcm9sbCxcbiAgU0NNZXNzYWdlc0lubmVyLFxuICBTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbixcbiAgU0NPcHRpb25zTGlzdCxcbiAgU0NPcHRpb25JdGVtLFxuICBTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXIsXG4gIFNDQXNzaXN0YW50TmFtZSxcbiAgU0NBc3Npc3RhbnRBdmF0YXIsXG4gIFNDVGFza0xpbmssXG4gIFNDTWVzc2FnZUl0ZW1XcmFwcGVyLFxuICBTQ01lc3NhZ2VJdGVtSW5uZXIsXG4gIFNDQXR0YWNobWVudHNSb3csXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgTUFJQUljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBDaGF0QUlTdWdnZXN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMnXG5pbXBvcnQgeyBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMgfSBmcm9tICcuL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGRvd25sb2FkRmlsZUZyb21VcmwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlRG93bmxvYWRIZWxwZXInXG5cbmNvbnN0IGNvZGUgPSBjcmVhdGVDb2RlUGx1Z2luKHsgdGhlbWVzOiBbJ2dpdGh1Yi1saWdodCcsICdnaXRodWItbGlnaHQnXSB9KVxuXG5jb25zdCBBc3Npc3RhbnRBdmF0YXJJbm5lcjogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICByZXR1cm4gKFxuICAgIDxTQ0Fzc2lzdGFudEF2YXRhcj5cbiAgICAgIHthZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/IDxNQUlBSWNvbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+IDogYWdlbnQ/LmVtb2ppfVxuICAgIDwvU0NBc3Npc3RhbnRBdmF0YXI+XG4gIClcbn1cblxuY29uc3QgQXNzaXN0YW50QXZhdGFyID0gbWVtbyhBc3Npc3RhbnRBdmF0YXJJbm5lcilcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sIGZhcUlkPzogc3RyaW5nLCBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZykgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPzogYm9vbGVhblxuICBoYW5kbGVGZWVkYmFjazogKGZlZWRiYWNrOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGhhbmRsZUFwcHJvdmFsRGVjaXNpb246ICh0aHJlYWRJZHM6IHN0cmluZ1tdLCBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcpID0+IHZvaWRcbiAgZGlzYWJsZUZlZWRiYWNrPzogRmVlZGJhY2sgfCBudWxsXG4gIHNvdXJjZXM/OiBhbnlcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICBleHBhbmRlZD86IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIE1lc3NhZ2VXcmFwcGVyUHJvcHMge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgJ2RhdGEtbWVzc2FnZS1pZCc/OiBzdHJpbmdcbiAgaGFzRmVlZGJhY2s/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHMgPSBNQUlBTWVzc2FnZVByb3BzICYge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGlzQ2hhbmdlUHJvamVjdD86IGJvb2xlYW5cbn1cblxuY29uc3QgTWVzc2FnZVdyYXBwZXI6IEZDPE1lc3NhZ2VXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlRnJvbVVzZXIgOiBNZXNzYWdlRnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbXBvbmVudCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L01lc3NhZ2VDb21wb25lbnQ+XG59XG5cbmNvbnN0IE1lc3NhZ2VDb250ZW50V3JhcHBlcjogRkM8TWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29udGVudENvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlQ29udGVudEZyb21Vc2VyIDogTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29udGVudENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIE1lc3NhZ2VPcHRpb25zKHtcbiAgb3B0aW9ucyxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uLFxufToge1xuICBvcHRpb25zOiBQcm9qZWN0W10gfCBudWxsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxufSkge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPFByb2plY3QgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbmNvbnN0IEFzc2lzdGFudE1lc3NhZ2VIZWFkZXIgPSAoKSA9PiB7XG4gIGNvbnN0IFtsb2NhbEFnZW50LCBzZXRMb2NhbEFnZW50XSA9IHVzZVN0YXRlPEFnZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRMb2NhbEFnZW50KGFnZW50KVxuICB9LCBbYWdlbnRdKVxuXG4gIHJldHVybiAoXG4gICAgPFNDQXNzaXN0YW50TWVzc2FnZUhlYWRlcj5cbiAgICAgIDxBc3Npc3RhbnRBdmF0YXIgLz5cbiAgICAgIHtsb2NhbEFnZW50Py5uYW1lICYmIChcbiAgICAgICAgPFNDQXNzaXN0YW50TmFtZT57bG9jYWxBZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/ICdNQUlBJyA6IGxvY2FsQWdlbnQ/Lm5hbWV9PC9TQ0Fzc2lzdGFudE5hbWU+XG4gICAgICApfVxuICAgIDwvU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyPlxuICApXG59XG5cbi8vIEV4dHJhZSBlbCBzZWdtZW50byBkZSB0YWIgKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpIGRlbCBocmVmIHBhcmEgYWJyaXIgZWwgbW9kYWwgY29uIGVsIHRhYiBjb3JyZWN0b1xuY29uc3QgZ2V0VGFiU2VnbWVudEZyb21IcmVmID0gKGhyZWY6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IG1hdGNoID0gaHJlZi5tYXRjaCgvXFwvdGFza3NcXC9cXGQrXFwvKFteLz9dKykvKVxuICByZXR1cm4gbWF0Y2ggJiYgL14oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykkLy50ZXN0KG1hdGNoWzFdKSA/IG1hdGNoWzFdIDogJ2RldGFpbCdcbn1cblxuLyoqIEV4dHJhZSBsYXMgdGFyZWFzIGVubGF6YWRhcyBlbiBlbCB0ZXh0byAoVVJMcyBxdWUgY29pbmNpZGVuIGNvbiBUQVNLX1VSTF9SRUdFWF9QQVRURVJOKS4gKi9cbmNvbnN0IGV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlID0gKG1lc3NhZ2U6IHN0cmluZyk6IFRhc2tJbmZvW10gPT4ge1xuICBpZiAoIW1lc3NhZ2UpIHJldHVybiBbXVxuICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgY29uc3QgdGFza3M6IFRhc2tJbmZvW10gPSBbXVxuICBjb25zdCBzZWVuSWRzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgbGV0IG1hdGNoOiBSZWdFeHBFeGVjQXJyYXkgfCBudWxsID0gbnVsbFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgd2hpbGUgKChtYXRjaCA9IHRhc2tVcmxSZWdleC5leGVjKG1lc3NhZ2UpKSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRhc2tJZCA9IG1hdGNoWzFdXG4gICAgY29uc3QgdXJsID0gbWF0Y2hbMF1cbiAgICBpZiAoIXNlZW5JZHMuaGFzKHRhc2tJZCkpIHtcbiAgICAgIHNlZW5JZHMuYWRkKHRhc2tJZClcbiAgICAgIGNvbnN0IGVzY2FwZWRVcmwgPSB1cmwucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKVxuICAgICAgY29uc3QgbWFya2Rvd25MaW5rUmVnZXggPSBuZXcgUmVnRXhwKGBcXFxcWyhbXlxcXFxdXSspXFxcXF1cXFxcKCR7ZXNjYXBlZFVybH1cXFxcKWApXG4gICAgICBjb25zdCBsaW5rTWF0Y2ggPSBtZXNzYWdlLm1hdGNoKG1hcmtkb3duTGlua1JlZ2V4KVxuICAgICAgY29uc3QgdGl0bGUgPSBsaW5rTWF0Y2ggPyBsaW5rTWF0Y2hbMV0gOiBgVGFyZWEgIyR7dGFza0lkfWBcbiAgICAgIHRhc2tzLnB1c2goeyBpZDogdGFza0lkLCB0aXRsZSwgdXJsIH0pXG4gICAgfVxuICB9XG4gIHJldHVybiB0YXNrc1xufVxuXG5jb25zdCBoYXNUYXNrTGlua3MgPSAodGV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiBleHRyYWN0VGFza3NGcm9tTWVzc2FnZSh0ZXh0KS5sZW5ndGggPiAwXG5cbi8vIENvbXBvbmVudCBmb3IgdGFzayBsaW5rcyB0aGF0IHVzZXMgdGhlIHVzZVRhc2tQYW5lbCBob29rXG5jb25zdCBUYXNrTGluazogRkM8eyBocmVmOiBzdHJpbmc7IHRhc2tJZDogc3RyaW5nOyBjaGlsZHJlbjogUmVhY3ROb2RlIH0+ID0gKHsgaHJlZiwgdGFza0lkLCBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IHRhYlNlZ21lbnQgPSBnZXRUYWJTZWdtZW50RnJvbUhyZWYoaHJlZilcbiAgY29uc3QgeyBidWlsZE9wZW5UYXNrIH0gPSB1c2VUYXNrUGFuZWwodGFza0lkLCB0YWJTZWdtZW50KVxuICBjb25zdCBvcGVuVGFzayA9IGJ1aWxkT3BlblRhc2soKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB7XG4gICAgLy8gU2kgZXMgQ21kL0N0cmwgKyBjbGljaywgZGVqYXIgcXVlIHNlIGFicmEgZW4gbnVldmEgcGVzdGHDsWEgKGNvbXBvcnRhbWllbnRvIHBvciBkZWZlY3RvKVxuICAgIGlmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBvcGVuVGFzaygpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ1Rhc2tMaW5rIGhyZWY9e2hyZWZ9IG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NDVGFza0xpbms+XG4gIClcbn1cblxuLy8gQ3VzdG9tIGxpbmsgY29tcG9uZW50IGZvciBTdHJlYW1kb3duOiB0YXNrIFVSTHMgb3BlbiB0aGUgdGFzayBwYW5lbCwgb3RoZXIgbGlua3MgcmVuZGVyIG5vcm1hbGx5XG50eXBlIEN1c3RvbUxpbmtQcm9wcyA9IFJlYWN0LkFuY2hvckhUTUxBdHRyaWJ1dGVzPEhUTUxBbmNob3JFbGVtZW50PiAmIHsgbm9kZT86IHVua25vd24gfVxuY29uc3QgQ3VzdG9tTGluazogRkM8Q3VzdG9tTGlua1Byb3BzPiA9ICh7IGhyZWYsIGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgaWYgKCFocmVmIHx8IHR5cGVvZiBocmVmICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8YSBocmVmPXtocmVmfSB7Li4ucmVzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYT5cbiAgICApXG4gIH1cbiAgY29uc3QgdGFza01hdGNoID0gaHJlZi5tYXRjaChuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4pKVxuICBpZiAodGFza01hdGNoKSB7XG4gICAgY29uc3QgdGFza0lkID0gdGFza01hdGNoWzFdXG4gICAgcmV0dXJuIChcbiAgICAgIDxUYXNrTGluayBocmVmPXtocmVmfSB0YXNrSWQ9e3Rhc2tJZH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvVGFza0xpbms+XG4gICAgKVxuICB9XG4gIHJldHVybiAoXG4gICAgPGEgaHJlZj17aHJlZn0gey4uLnJlc3R9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYT5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIC8vIFRleHRvIGRlbCBzdHJlYW06IHNvbG8gc2UgbGVlIGRlbCBzdG9yZSBjdWFuZG8gZXN0ZSBtZW5zYWplIGVzIGVsXG4gICAgLy8gcXVlIGVzdMOhIGVuIHN0cmVhbWluZy4gdXNlU3luY0V4dGVybmFsU3RvcmUgYcOtc2xhIGVsIHJlLXJlbmRlciBhXG4gICAgLy8gZXN0ZSBjb21wb25lbnRlLCBzaW4gdG9jYXIgZWwgcmVzdG8gZGVsIMOhcmJvbC5cbiAgICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShwcm9wcy5pc1N0cmVhbWluZyA/IHByb3BzLm1lc3NhZ2VJZCA6IG51bGwpXG4gICAgY29uc3QgcmF3VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gc3RyZWFtaW5nVGV4dCA6IHByb3BzLm1lc3NhZ2VcbiAgICAvLyBTbW9vdGggc3RyZWFtaW5nOiBkZXNhY29wbGEgbGEgY2FkZW5jaWEgZGVsIGJhY2tlbmQgZGVsIHJlbmRlci5cbiAgICAvLyBEdXJhbnRlIGVsIHN0cmVhbWluZyBsaWJlcmEgY2hhcnMgYSByaXRtbyBjb25zdGFudGUgdsOtYSByQUY7IGN1YW5kb1xuICAgIC8vIHRlcm1pbmEsIG11ZXN0cmEgZWwgdGV4dG8gZmluYWwgYWwgaW5zdGFudGUgKHNpbiBhbmltYWNpw7NuIHJlc2lkdWFsKS5cbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHVzZVNtb290aFN0cmVhbVRleHQocmF3VGV4dCwge1xuICAgICAgZW5hYmxlZDogISFwcm9wcy5pc1N0cmVhbWluZyxcbiAgICAgIHRhcmdldExhZ01zOiAxMjAsXG4gICAgICBtYXhDaGFyc1BlckZyYW1lOiAyNCxcbiAgICAgIHNuYXBUb1dvcmRCb3VuZGFyeTogdHJ1ZSxcbiAgICB9KVxuICAgIGNvbnN0IGNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSBwcm9wcy5jcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkXG4gICAgaWYgKCFkaXNwbGF5VGV4dCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcpIHJldHVybiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17cHJvcHMuaXNBc3Npc3RhbnQgJiYgaGFzVGFza0xpbmtzKGRpc3BsYXlUZXh0KSA/ICdoYXMtdGFzay1saW5rcycgOiAnJ31cbiAgICAgICAgPlxuICAgICAgICAgIDxTdHJlYW1kb3duXG4gICAgICAgICAgICBwbHVnaW5zPXt7IGNvZGUgfX1cbiAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogQ3VzdG9tTGluayB9IGFzIFBhcmFtZXRlcnM8dHlwZW9mIFN0cmVhbWRvd24+WzBdWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICBsaW5rU2FmZXR5PXt7IGVuYWJsZWQ6IGZhbHNlIH19XG4gICAgICAgICAgICBpc0FuaW1hdGluZz17ISFwcm9wcy5pc1N0cmVhbWluZ31cbiAgICAgICAgICAgIHNoaWtpVGhlbWU9e1snZ2l0aHViLWxpZ2h0JywgJ2dpdGh1Yi1saWdodCddfVxuICAgICAgICAgICAgY29udHJvbHM9e3sgdGFibGU6IGZhbHNlLCBjb2RlOiBmYWxzZSB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtkaXNwbGF5VGV4dH1cbiAgICAgICAgICA8L1N0cmVhbWRvd24+XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmICFwcm9wcy5pc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwcm9wcy5hcHByb3ZhbCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgc291cmNlcz17cHJvcHMuc291cmNlc31cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtwcm9wcy5oYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmICFwcm9wcy5pc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwcm9wcy5hcHByb3ZhbCAmJiAoXG4gICAgICAgICAgPENoYXRBSVN1Z2dlc3Rpb25zXG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17cHJvcHMuc3VnZ2VzdGlvbnMgfHwgW119XG4gICAgICAgICAgICBvblNlbGVjdFN1Z2dlc3Rpb249e3N1Z2dlc3Rpb24gPT4gcHJvcHMuaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKHByb3BzLm1lc3NhZ2VJZCwgc3VnZ2VzdGlvbil9XG4gICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICEhY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zXG4gICAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbmNvbnN0IE1lc3NhZ2VJdGVtID0gbWVtbygocHJvcHM6IE1lc3NhZ2VJdGVtUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHVzZXIsXG4gICAgbWVzc2FnZSxcbiAgICBpc1N0cmVhbWluZyxcbiAgICBpc0Vycm9yLFxuICAgIGF1dGhVc2VyLFxuICAgIG9wdGlvbnMsXG4gICAgaXNDaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbixcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBkaXNhYmxlRmVlZGJhY2ssXG4gICAgcm9sZSxcbiAgICBzb3VyY2VzLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFwcHJvdmFsLFxuICAgIGFwcHJvdmFsU3RhdHVzLFxuICAgIHN1Z2dlc3Rpb25zLFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAsXG4gICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uLFxuICAgIGlzTGFzdE1lc3NhZ2UsXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCBpc0N1cnJlbnRVc2VyID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKVxuICBjb25zdCBpc0Fzc2lzdGFudCA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAge2lzQXNzaXN0YW50ICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgICAgIDxNZXNzYWdlQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgIGlzQ2hhbmdlUHJvamVjdD17aXNDaGFuZ2VQcm9qZWN0fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgbWVzc2FnZUV4dHJhQ29udGVudD17PE1lc3NhZ2VPcHRpb25zIG9wdGlvbnM9e29wdGlvbnMgYXMgYW55fSBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn0gLz59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgICAgIDwvTWVzc2FnZVdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2tDbGljayA9IChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBpZFxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIocXVlc3Rpb25JZCA9PiBxdWVzdGlvbklkICE9PSAnYW5zd2VyJylcbiAgICAgIC5qb2luKCctJylcbiAgICBoYW5kbGVGZWVkYmFjaz8uKGZlZWRiYWNrLCBzZXNzaW9uSWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgIHtpc0Fzc2lzdGFudCAmJiA8QXNzaXN0YW50TWVzc2FnZUhlYWRlciAvPn1cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgICAgIDxBcHByb3ZhbEJveFxuICAgICAgICAgICAgICBhY3Rpb25zPXthcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnN9XG4gICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgIG9uQXBwcm92ZT17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAnYXBwcm92ZScpfVxuICAgICAgICAgICAgICBvblJlamVjdD17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgIGlzUHJvamVjdERlbGV0ZWQ9e3Byb3BzLnByb2plY3RNZXRhZGF0YT8uaXNfZGVsZXRlZCA9PT0gdHJ1ZX1cbiAgICAgICAgICAgICAgaXNFeHBhbmRlZD17cHJvcHMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgIGhpdGxJbnN0YW5jZUlkPXthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9XG4gICAgICAgICAgICAgIHdhcm5pbmdNZXNzYWdlPXthcHByb3ZhbC53YXJuaW5nX21lc3NhZ2V9XG4gICAgICAgICAgICAgIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ9e2FwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgKX1cbiAgICAgICAgeyghIW1lc3NhZ2UgfHwgaXNTdHJlYW1pbmcpICYmICFhcHByb3ZhbCAmJiAhKGlzQXNzaXN0YW50ICYmICEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXshIWlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH1cbiAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICBhcHByb3ZhbD17YXBwcm92YWx9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgc291cmNlcz17c291cmNlc31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA9e2NyZWF0ZUFnZW50Rm9sbG93VXB9XG4gICAgICAgICAgICBoYW5kbGVGZWVkYmFja0NsaWNrPXtoYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtkaXNhYmxlRmVlZGJhY2sgPz8gbnVsbH1cbiAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhIWhhc1NlbGVjdGVkU3VnZ2VzdGlvbn1cbiAgICAgICAgICAgIG1lc3NhZ2VJZD17aWR9XG4gICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1NDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgIDxBdHRhY2htZW50UHJldmlld01vZGFsXG4gICAgICAgIGlzT3Blbj17ISFwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VQcmV2aWV3fVxuICAgICAgICBhdHRhY2htZW50PXtwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgIC8+XG4gICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgKVxufSlcblxuY29uc3QgQ2hhdEFJTWVzc2FnZXNJbm5lciA9ICh7XG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgaW5pdGlhbENoYXRJZCxcbiAgb25FcnJvcixcbiAgb25TZW5kTWVzc2FnZVJlYWR5LFxuICBvblNjcm9sbFRvQm90dG9tLFxuICBhdHRhY2htZW50cyxcbiAgYWdlbnRzLFxuICBleHBhbmRlZCxcbn06IENoYXRBSU1lc3NhZ2VzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgeyBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgY2hhdEluaXRpYWxpemVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBpc0xvYWRpbmdNb3JlUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCB1c2VyU2Nyb2xsaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaHJlc2hvbGRSZWYgPSB1c2VSZWYoMzkpXG4gIGNvbnN0IGxhc3RTY3JvbGxUb3BSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc2hvd1Njcm9sbFRvQm90dG9tUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxSYWZSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dTY3JvbGxUb0JvdHRvbSwgc2V0U2hvd1Njcm9sbFRvQm90dG9tXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcywgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGNoYW5nZVByb2plY3Qob3B0aW9uKVxuICAgIH0sXG4gICAgW2NoYW5nZVByb2plY3RdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uPy50cmltKCkpIHJldHVyblxuICAgICAgaWYgKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZUlkXSkgcmV0dXJuXG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJyAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhZ2VudD8ubmFtZSB8fCAnJylcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID8gJ21hcmtldHBsYWNlJyA6IGFnZW50Py50eXBlLFxuICAgICAgfSlcbiAgICAgIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMocHJldiA9PiAoeyAuLi5wcmV2LCBbbWVzc2FnZUlkXTogdHJ1ZSB9KSlcbiAgICAgIHNlbmRNZXNzYWdlKHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbc2VuZE1lc3NhZ2UsIHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIGV2ZW50LCBhZ2VudD8uZW50aXR5LCBhZ2VudD8ubmFtZSwgYWdlbnQ/LnR5cGVdXG4gIClcblxuICAvKipcbiAgICogQWN0dWFsaXphIGVsIGVzdGFkbyBkZWwgYm90w7NuIFwic2Nyb2xsIHRvIGJvdHRvbVwiIGNvbXBhcmFuZG8gbGEgcG9zaWNpw7NuXG4gICAqIGFjdHVhbCBkZWwgc2Nyb2xsIGNvbiBlbCBmb25kby4gVXNhIHVuIHJlZiBwYXJhIGV2aXRhciBgc2V0U3RhdGVgIGN1YW5kb1xuICAgKiBlbCB2YWxvciBubyBjYW1iaWEuXG4gICAqL1xuICBjb25zdCB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwpIHJldHVyblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gZWxcbiAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICBpZiAoc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3cpIHtcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGlubWVkaWF0byBhbCBmb25kbyAoZGVudHJvIGRlIHJBRiBwYXJhIGNvb3JkaW5hciBjb24gZWwgcGFpbnQpXG4gICAqIHkgYWN0dWFsaXphIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uIFJlc3BldGEgYHNraXBJZlVzZXJTY3JvbGxpbmdgIHBhcmFcbiAgICogbm8gc29icmVzY3JpYmlyIGVsIHNjcm9sbCBtYW51YWwgZGVsIHVzdWFyaW8gZHVyYW50ZSBlbCBzdHJlYW1pbmcuXG4gICAqL1xuICBjb25zdCBzY3JvbGxUb0JvdHRvbVJhZiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRzOiB7IHNraXBJZlVzZXJTY3JvbGxpbmc/OiBib29sZWFuOyBkZWxheU1zPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgeyBza2lwSWZVc2VyU2Nyb2xsaW5nID0gZmFsc2UsIGRlbGF5TXMgPSAwIH0gPSBvcHRzXG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICAgICAgaWYgKHNraXBJZlVzZXJTY3JvbGxpbmcgJiYgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChkZWxheU1zID4gMCkgc2V0VGltZW91dChydW4sIGRlbGF5TXMpXG4gICAgICBlbHNlIHJ1bigpXG4gICAgfSxcbiAgICBbdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvKHtcbiAgICAgIHRvcDogbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHQsXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgfSlcbiAgICAvLyBEYXIgdGllbXBvIGFsIHNtb290aC1zY3JvbGwgYW50ZXMgZGUgcmVjYWxjdWxhciBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLlxuICAgIHNldFRpbWVvdXQodXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSwgNTAwKVxuICB9LCBbdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gIWlzTmVhckJvdHRvbVxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxUb3BcblxuICAgICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uU2Nyb2xsVG9Cb3R0b20sIGhhbmRsZVNjcm9sbCwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV1cbiAgKVxuXG4gIC8vIHJlZnMgdG8gc3RhYmlsaXplIGZ1bmN0aW9ucyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICBjb25zdCBzZW5kTWVzc2FnZVJlZiA9IHVzZVJlZihzZW5kTWVzc2FnZSlcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoc3RvcEdlbmVyYXRpb24pXG4gIGNvbnN0IG9uU2VuZE1lc3NhZ2VSZWFkeVJlZiA9IHVzZVJlZihvblNlbmRNZXNzYWdlUmVhZHkpXG5cbiAgLy8gdXBkYXRlIHJlZnMgd2hlbiBmdW5jdGlvbnMgY2hhbmdlXG4gIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQgPSBzZW5kTWVzc2FnZVxuICBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50ID0gc3RvcEdlbmVyYXRpb25cbiAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQgPSBvblNlbmRNZXNzYWdlUmVhZHlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoc2VuZE1lc3NhZ2VSZWYuY3VycmVudCwgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCwgd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXG4gIH0sIFtpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIC8vIEN1YW5kbyBlbCBhZ2VudGUgZW1waWV6YSBhIHJlc3BvbmRlciwgcmVzZXRlYXIgZWwgZmxhZyB5IGVsIHVtYnJhbCBwYXJhIGFjdGl2YXIgZWwgYXV0by1zY3JvbGxcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlKSB7XG4gICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGluaXRpYWxpemVDaGF0KClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIEF1dG9zY3JvbGwgbWllbnRyYXMgZWwgdGV4dG8gZGVsIHN0cmVhbSBjcmVjZS4gRWwgdGV4dG8gc2UgcGludGEgYWwgcml0bW9cbiAgLy8gZGUgYHVzZVNtb290aFN0cmVhbVRleHRgICh+NjBmcHMpLCBubyBhbCByaXRtbyBkZSBsbGVnYWRhIGRlIHRva2VucyBkZWxcbiAgLy8gYmFja2VuZDogcG9yIGVzbyBhY8OhIHVzYW1vcyB1biBsb29wIGRlIHJBRiBxdWUgY29tcGFyYSBgc2Nyb2xsSGVpZ2h0YFxuICAvLyBjb250cmEgZWwgw7psdGltbyB2YWxvciBvYnNlcnZhZG8geSBhanVzdGEgc29sbyBjdWFuZG8gY2FtYmlhLiBBc8OtIGVsXG4gIC8vIHNjcm9sbCBxdWVkYSBwZXJmZWN0YW1lbnRlIHNpbmNyb25pemFkbyBjb24gbGEgYW5pbWFjacOzbiBkZWwgdGV4dG8gc2luXG4gIC8vIGRlcGVuZGVyIGRlIGxhIGNhZGVuY2lhIGRlbCBzdHJlYW1pbmdTdG9yZS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXdhaXRpbmdSZXNwb25zZSAmJiAhaXNXcml0aW5nKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBsZXQgcmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsXG4gICAgbGV0IGxhc3RIZWlnaHQgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuXG4gICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByYWZJZCA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICBpZiAoY3VycmVudEhlaWdodCAhPT0gbGFzdEhlaWdodCkge1xuICAgICAgICBsYXN0SGVpZ2h0ID0gY3VycmVudEhlaWdodFxuICAgICAgICBpZiAoIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkge1xuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgICAgIH1cbiAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgfVxuXG4gICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJhZklkICE9IG51bGwpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nLCB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5XSlcblxuICAvLyBBbCBjb21lbnphciBhIGVzcGVyYXIgbGEgcmVzcHVlc3RhIGRlbCBiYWNrZW5kLCBzY3JvbGwgaW5pY2lhbCBhbCBmb25kby5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlICYmIG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgc2tpcElmVXNlclNjcm9sbGluZzogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gY2FtYmlhbiBsb3MgbWVuc2FqZXM6IGRpc3Rpbmd1ZSBcIm51ZXZvIG1lbnNhamVcIiAoYWdyZWdhZG8pXG4gIC8vIGRlIFwicmVlbXBsYXpvXCIgKG1pc21vIGlkL2xlbmd0aCwgZWouIGZlZWRiYWNrIG8gYXBwcm92YWxTdGF0dXMpLiBFblxuICAvLyByZWVtcGxhem9zIHNvbG8gc2UgcmVjYWxjdWxhIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24gc2luIGZvcnphciBzY3JvbGwuXG4gIGNvbnN0IGxhc3RNZXNzYWdlSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmID0gdXNlUmVmPG51bWJlcj4oMClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBsYXN0SWQgPSBsYXN0TWVzc2FnZT8uaWQgPz8gbnVsbFxuICAgIGNvbnN0IHByZXZJZCA9IGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudFxuICAgIGNvbnN0IHByZXZMZW4gPSBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IGxhc3RJZFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld01lc3NhZ2UgPSBsYXN0SWQgIT09IHByZXZJZCB8fCBtZXNzYWdlcy5sZW5ndGggIT09IHByZXZMZW5cbiAgICBpZiAoIWlzTmV3TWVzc2FnZSkge1xuICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcbiAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IG1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcbiAgICBjb25zdCBpc0FwcHJvdmFsID0gISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcbiAgICBjb25zdCBpc0Fuc3dlck9yUXVlc3Rpb24gPVxuICAgICAgISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYW5zd2VyLScpIHx8IGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpKVxuXG4gICAgLy8gQXBwcm92YWw6IHNlY3VlbmNpYSBkZSBzY3JvbGxzIGNvbiBkZWxheSBwb3JxdWUgZWwgQXBwcm92YWxCb3ggbmVjZXNpdGFcbiAgICAvLyB1biB0aWNrIHBhcmEgbWVkaXJzZS4gU2Nyb2xsZWEgYXVucXVlIGVsIHVzdWFyaW8gbm8gZXN0w6kgYWwgZm9uZG8gc2kgbm9cbiAgICAvLyBlc3TDoSBzY3JvbGxlYW5kbyBtYW51YWxtZW50ZS5cbiAgICBpZiAoaXNBcHByb3ZhbCAmJiAoaXNBdEJvdHRvbSB8fCAhdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIE51ZXZvcyBhbnN3ZXIvcXVlc3Rpb246IHNjcm9sbCBzaSBlbCB1c3VhcmlvIHlhIGVzdGFiYSBhbCBmb25kby5cbiAgICBpZiAoaXNBbnN3ZXJPclF1ZXN0aW9uICYmIGlzQXRCb3R0b20pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENhc28gYm9yZGU6IGNhbWJpb3MgZGUgbWVuc2FqZXMgc2luIHNlciBudWV2byBhbnN3ZXIvdXNlci9hcHByb3ZhbFxuICAgIC8vIHBlcm8gc8OtIHVuIG1lbnNhamUgbnVldm8gKG5vIGVsIFwidXNlci1pbml0aWFsLW1lc3NhZ2VcIikuIFNjcm9sbGVhLlxuICAgIGlmICghaXNBbnN3ZXJPclF1ZXN0aW9uICYmICFpc0FwcHJvdmFsICYmICFoYXNJbml0aWFsTWVzc2FnZSAmJiBtZXNzYWdlcy5sZW5ndGggPiBwcmV2TGVuKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgfSwgW21lc3NhZ2VzLCBsb2FkaW5nTWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgc2Nyb2xsVG9Cb3R0b21SYWYsIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldKVxuXG4gIC8vIEVzdGFkbyBpbmljaWFsIGRlbCBib3TDs24gc2Nyb2xsLXRvLWJvdHRvbSBhbCB0ZXJtaW5hciBsb2FkaW5nTWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICAgIH1cbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5XSlcblxuICAvLyBPYnRlbmVyIGVsIMO6bHRpbW8gbWVuc2FqZSBkZWwgdXN1YXJpbyBwYXJhIHZlcmlmaWNhciBzaSB0aWVuZSBhdHRhY2htZW50c1xuICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAuYXQoLTEpXG5cbiAgY29uc3QgaGFzQXR0YWNobWVudHMgPVxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uYXR0YWNobWVudHMpICYmIGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGgpIHx8XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5zb3VyY2VzKSAmJiBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGgpXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcbiAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYWdlbnQ/Lm5hbWUgfHwgJycpXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIDxMb2FkZXIgLz5cbiAgfVxuXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGVudCA9IChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiA8TG9hZGluZ1RleHQgdGV4dD17dCgnY2hhdC5sb2FkaW5nTW9yZScpfSAvPn1cbiAgICAgIDw+XG4gICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmVhbWluZyAmJlxuICAgICAgICAgICAgIShtZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGggfHwgbWVzc2FnZS5zb3VyY2VzPy5sZW5ndGgpICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5wcm9qZWN0Py5uYW1lICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5hcHByb3ZhbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBudWxsXG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlRmVlZGJhY2sgPVxuICAgICAgICAgICAgbWVzc2FnZT8ud2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2Uud2FzSGVscGZ1bCA9PT0gbnVsbFxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiBtZXNzYWdlLndhc0hlbHBmdWxcbiAgICAgICAgICAgICAgICA/IEZlZWRiYWNrLlRIVU1CU19VUFxuICAgICAgICAgICAgICAgIDogRmVlZGJhY2suVEhVTUJTX0RPV05cblxuICAgICAgICAgIC8vIEtleSBlc3RhYmxlOiBzb2xvIG1lc3NhZ2UuaWQgcGFyYSBldml0YXIgcmVtb3VudCBkdXJhbnRlIHN0cmVhbWluZyAobWVzc2FnZS5kYXRlIHB1ZWRlIGNhbWJpYXIpXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUtleSA9IG1lc3NhZ2UuaWQgPz8gYG1zZy0ke2luZGV4fWBcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgey4uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgIGtleT17bWVzc2FnZUtleX1cbiAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9ufVxuICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPXshIXNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZS5pZF19XG4gICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17bWVzc2FnZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICAgeyh3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2UgfHwgT2JqZWN0LmtleXMoYWN0aXZlTG9hZGluZ3MgfHwge30pLmxlbmd0aCA+IDApICYmIChcbiAgICAgICAgPFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgICAgIHtPYmplY3Qua2V5cyhhY3RpdmVMb2FkaW5ncyB8fCB7fSkubGVuZ3RoID4gMCA/IChcbiAgICAgICAgICAgIDxMb2FkaW5nVGV4dFxuICAgICAgICAgICAgICBrZXk9XCJsb2FkaW5nLWFjdGl2ZVwiXG4gICAgICAgICAgICAgIHRleHQ9e1xuICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoYWN0aXZlTG9hZGluZ3MgfHwge30pLmZpbmQobXNnID0+IG1zZyAhPT0gdCgnY2hhdC5wcm9jZXNzaW5nJykpIHx8IHQoJ2NoYXQucHJvY2Vzc2luZycpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICh3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2UpICYmIChcbiAgICAgICAgICAgICAgPExvYWRpbmdUZXh0XG4gICAgICAgICAgICAgICAgdGV4dD17XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nTWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgKGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgID8gJ0J1c2NhbmRvIGVuIGxhIHdlYidcbiAgICAgICAgICAgICAgICAgICAgOiBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICA/IHQoJ2NoYXQuZ2VuZXJhdGluZ0RlZXBTZWFyY2gnKVxuICAgICAgICAgICAgICAgICAgICAgIDogaGFzQXR0YWNobWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdCgnY2hhdC5nZW5lcmF0aW5nQXR0YWNobWVudCcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2NoYXQuZ2VuZXJhdGluZycpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIClcbiAgICAgICAgICApfVxuICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZXNPdXRlciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9PlxuICAgICAge2lzU2Nyb2xsT25QYXJlbnQgPyAoXG4gICAgICAgIDxTQ01lc3NhZ2VzU2Nyb2xsIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDTWVzc2FnZXNJbm5lciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9ICRpc01hcmtldHBsYWNlR2xvYmFsPXtpc01hcmtldHBsYWNlR2xvYmFsQWdlbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VzU2Nyb2xsPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lclxuICAgICAgICAgIHJlZj17bWVzc2FnZXNSZWZ9XG4gICAgICAgICAgb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfVxuICAgICAgICAgICRzY3JvbGxPblBhcmVudD17ZmFsc2V9XG4gICAgICAgICAgJGlzTWFya2V0cGxhY2VHbG9iYWw9e2lzTWFya2V0cGxhY2VHbG9iYWxBZ2VudH1cbiAgICAgICAgPlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAge3Nob3dTY3JvbGxUb0JvdHRvbSAmJiAoXG4gICAgICAgIDxTY3JvbGxUb0JvdHRvbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPEFycm93U21hbGxEb3duIGNvbG9yPVwiIzY2NlwiIHdpZHRoPVwiMjBweFwiIGhlaWdodD1cIjIwcHhcIiAvPlxuICAgICAgICA8L1Njcm9sbFRvQm90dG9tQnV0dG9uPlxuICAgICAgKX1cbiAgICA8L1NDTWVzc2FnZXNPdXRlcj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTWVzc2FnZXMgPSBSZWFjdC5tZW1vKENoYXRBSU1lc3NhZ2VzSW5uZXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsS0FBSyxJQUFRQyxJQUFJLEVBQWFDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxlQUFlLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFBQyxhQUFBLElBQUFDLGNBQUEsUUFBUSxPQUFPO0FBQzdHLFNBQVNDLFVBQVUsUUFBUSxZQUFZO0FBQ3ZDLFNBQVNDLGdCQUFnQixRQUFRLGtCQUFrQjtBQUNuRCxTQUFTQyxjQUFjLFFBQVEsaURBQWlEO0FBRWhGLFNBQVNDLGNBQWMsUUFBUSwyQ0FBMkM7QUFDMUUsU0FBU0MsV0FBVyxRQUFRLHFDQUFxQztBQUNqRSxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFDM0UsU0FBU0MsbUJBQW1CLFFBQVEsZ0RBQWdEO0FBRXBGLFNBQXNCQyxlQUFlLFFBQWtCLHFCQUFxQjtBQUU1RSxTQUFrQkMsT0FBTyxRQUFR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
|