genassist-chat-react 1.0.8 → 1.0.10
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/dist/components/AttachmentPreview.d.ts +8 -0
- package/dist/components/AttachmentPreview.js +72 -0
- package/dist/components/ChatMessage.d.ts +1 -7
- package/dist/components/ChatMessage.js +11 -217
- package/dist/components/FileTypeIcon.d.ts +2 -0
- package/dist/components/FileTypeIcon.js +12 -0
- package/dist/components/GenAgentChat.js +42 -14
- package/dist/components/GenAgentConfigPanel.d.ts +34 -0
- package/dist/components/GenAgentConfigPanel.js +360 -0
- package/dist/components/Spinner.d.ts +7 -0
- package/dist/components/Spinner.js +19 -0
- package/dist/components/VoiceInput.js +7 -11
- package/dist/components/WelcomeCard.d.ts +19 -0
- package/dist/components/WelcomeCard.js +38 -0
- package/dist/hooks/useChat.d.ts +1 -0
- package/dist/hooks/useChat.js +50 -21
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -1
- package/dist/services/chatService.d.ts +2 -1
- package/dist/services/chatService.js +14 -6
- package/dist/utils/fileIcons.d.ts +4 -0
- package/dist/utils/fileIcons.js +15 -0
- package/dist/utils/time.d.ts +1 -0
- package/dist/utils/time.js +32 -0
- package/package.json +1 -1
|
@@ -77,6 +77,7 @@ export var GenAgentChat = function (_a) {
|
|
|
77
77
|
var headerRef = useRef(null);
|
|
78
78
|
var _o = useState(0), headerHeight = _o[0], setHeaderHeight = _o[1];
|
|
79
79
|
var _p = useState(false), showBacklight = _p[0], setShowBacklight = _p[1];
|
|
80
|
+
// default thinking messages if none provided by workflow
|
|
80
81
|
var DEFAULT_THINKING_MESSAGES = [
|
|
81
82
|
"Thinking…",
|
|
82
83
|
"Analyzing your question…",
|
|
@@ -97,7 +98,7 @@ export var GenAgentChat = function (_a) {
|
|
|
97
98
|
onError: onError,
|
|
98
99
|
onTakeover: onTakeover,
|
|
99
100
|
onFinalize: onFinalize
|
|
100
|
-
}), messages = _s.messages, isLoading = _s.isLoading, sendMessage = _s.sendMessage, uploadFile = _s.uploadFile, resetConversation = _s.resetConversation, startConversation = _s.startConversation, connectionState = _s.connectionState, conversationId = _s.conversationId, possibleQueries = _s.possibleQueries,
|
|
101
|
+
}), messages = _s.messages, isLoading = _s.isLoading, sendMessage = _s.sendMessage, uploadFile = _s.uploadFile, resetConversation = _s.resetConversation, startConversation = _s.startConversation, connectionState = _s.connectionState, conversationId = _s.conversationId, possibleQueries = _s.possibleQueries, isFinalized = _s.isFinalized, isAgentTyping = _s.isAgentTyping, addFeedback = _s.addFeedback, welcomeTitle = _s.welcomeTitle, welcomeImageUrl = _s.welcomeImageUrl, welcomeMessage = _s.welcomeMessage, thinkingPhrases = _s.thinkingPhrases, thinkingDelayMs = _s.thinkingDelayMs;
|
|
101
102
|
var messagesEndRef = useRef(null);
|
|
102
103
|
var audioService = useRef(null);
|
|
103
104
|
var hasUserMessages = messages.some(function (message) { return message.speaker === 'customer'; });
|
|
@@ -364,7 +365,7 @@ export var GenAgentChat = function (_a) {
|
|
|
364
365
|
overflow: 'hidden',
|
|
365
366
|
backgroundColor: (theme === null || theme === void 0 ? void 0 : theme.secondaryColor) || '#f5f5f5',
|
|
366
367
|
fontFamily: fontFamily,
|
|
367
|
-
boxShadow:
|
|
368
|
+
boxShadow: "0 4px 20px rgba(0, 0, 0, 0.2)",
|
|
368
369
|
position: 'relative'
|
|
369
370
|
};
|
|
370
371
|
var headerStyle = {
|
|
@@ -376,9 +377,6 @@ export var GenAgentChat = function (_a) {
|
|
|
376
377
|
justifyContent: 'space-between',
|
|
377
378
|
alignItems: 'center',
|
|
378
379
|
position: 'relative',
|
|
379
|
-
// Keep header below the content card so glow can appear under the card edge
|
|
380
|
-
zIndex: 0,
|
|
381
|
-
overflow: 'visible',
|
|
382
380
|
};
|
|
383
381
|
var logoContainerStyle = {
|
|
384
382
|
display: 'flex',
|
|
@@ -660,7 +658,7 @@ export var GenAgentChat = function (_a) {
|
|
|
660
658
|
};
|
|
661
659
|
var floatingContainerStyle = __assign(__assign({}, getChatPositionStyles()), getResponsiveDimensions());
|
|
662
660
|
var toggleButtonStyle = __assign(__assign({}, getPositionStyles()), { width: '60px', height: '60px', borderRadius: '50%', backgroundColor: primaryColor, border: 'none', color: 'white', fontSize: '24px', cursor: 'pointer', boxShadow: '0 4px 12px rgba(41, 98, 255, 0.3)', transition: 'all 0.3s ease', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1001 });
|
|
663
|
-
var renderChatComponent = function () { return (_jsxs("div", { style: containerStyle, children: [_jsx("style", { children: "\n @keyframes blink { 0% { opacity: 0.2; } 20% { opacity: 1; } 100% { opacity: 0.2; } }\n /* Hide scrollbars for the expanding textarea but keep scrolling */\n .ga-textarea-nosb { scrollbar-width: none; -ms-overflow-style: none; }\n .ga-textarea-nosb::-webkit-scrollbar { width: 0; height: 0; }\n /* Backlight sweep under content edge (GPU-friendly).\n Wider travel to fully reach both corners. */\n @keyframes ga-backlight-sweep2 { 0% { transform: translateX(-35%); } 100% { transform: translateX(105%); } }\n @keyframes ga-backlight-pulse { 0%,100% { opacity: 0.7; } 50% { opacity: 1; } }\n @keyframes ga-think-change { 0% { opacity: 0; transform: translateY(4px); } 100% { opacity: 1; transform: translateY(0); } }\n " }), _jsxs("div", { style: headerStyle, ref: headerRef, children: [_jsxs("div", { style: logoContainerStyle, children: [_jsx("img", { src: chatLogo, alt: "Logo", style: logoStyle }), _jsxs("div", { style: headerTitleContainerStyle, children: [_jsx("div", { style: headerTitleStyle, children: headerTitle }), _jsx("div", { style: headerSubtitleStyle, children: "Support" })] })] }), _jsx("button", { style: menuButtonStyle, onClick: handleMenuClick, title: "Menu", children: _jsx(MoreVertical, { size: 24, color: "#111111" }) })] }), showBacklight && (_jsx("div", { style: {
|
|
661
|
+
var renderChatComponent = function () { return (_jsxs("div", { style: containerStyle, "data-genassist-root": "true", children: [_jsx("style", { children: "\n @keyframes blink { 0% { opacity: 0.2; } 20% { opacity: 1; } 100% { opacity: 0.2; } }\n /* Hide scrollbars for the expanding textarea but keep scrolling */\n .ga-textarea-nosb { scrollbar-width: none; -ms-overflow-style: none; }\n .ga-textarea-nosb::-webkit-scrollbar { width: 0; height: 0; }\n /* Backlight sweep under content edge (GPU-friendly).\n Wider travel to fully reach both corners. */\n @keyframes ga-backlight-sweep2 { 0% { transform: translateX(-35%); } 100% { transform: translateX(105%); } }\n @keyframes ga-backlight-pulse { 0%,100% { opacity: 0.7; } 50% { opacity: 1; } }\n @keyframes ga-think-change { 0% { opacity: 0; transform: translateY(4px); } 100% { opacity: 1; transform: translateY(0); } }\n " }), _jsxs("div", { style: headerStyle, ref: headerRef, children: [_jsxs("div", { style: logoContainerStyle, children: [_jsx("img", { src: chatLogo, alt: "Logo", style: logoStyle }), _jsxs("div", { style: headerTitleContainerStyle, children: [_jsx("div", { style: headerTitleStyle, children: headerTitle }), _jsx("div", { style: headerSubtitleStyle, children: "Support" })] })] }), _jsx("button", { style: menuButtonStyle, onClick: handleMenuClick, title: "Menu", children: _jsx(MoreVertical, { size: 24, color: "#111111" }) })] }), showBacklight && (_jsx("div", { style: {
|
|
664
662
|
position: 'absolute',
|
|
665
663
|
left: 0,
|
|
666
664
|
right: 0,
|
|
@@ -681,11 +679,33 @@ export var GenAgentChat = function (_a) {
|
|
|
681
679
|
willChange: 'transform, opacity',
|
|
682
680
|
animation: 'ga-backlight-sweep2 1.2s cubic-bezier(0.4,0.0,0.2,1) infinite alternate, ga-backlight-pulse 2.4s ease-in-out infinite',
|
|
683
681
|
borderRadius: 18,
|
|
684
|
-
} }) })), showMenu && (_jsx("div", { ref: menuRef, style: menuPopupStyle, children: _jsxs("div", { style: menuItemStyle, onClick: handleResetClick, children: [_jsx(RefreshCw, { size: 16 }), "Reset conversation"] }) })), _jsxs("div", { style: contentCardStyle, children: [_jsxs("div", { style: chatContainerStyle, children: [
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
682
|
+
} }) })), showMenu && (_jsx("div", { ref: menuRef, style: menuPopupStyle, children: _jsxs("div", { style: menuItemStyle, onClick: handleResetClick, children: [_jsx(RefreshCw, { size: 16 }), "Reset conversation"] }) })), _jsxs("div", { style: contentCardStyle, children: [_jsxs("div", { style: chatContainerStyle, children: [(function () {
|
|
683
|
+
return null;
|
|
684
|
+
})(), (function () {
|
|
685
|
+
// show welcome card
|
|
686
|
+
var shouldShowSyntheticWelcome = !hasUserMessages &&
|
|
687
|
+
(messages.length === 0 || messages[0].speaker !== 'agent') &&
|
|
688
|
+
(Boolean(welcomeTitle) || Boolean(welcomeImageUrl) || Boolean(welcomeMessage));
|
|
689
|
+
if (!shouldShowSyntheticWelcome)
|
|
690
|
+
return null;
|
|
691
|
+
var now = Math.floor(Date.now() / 1000);
|
|
692
|
+
var syntheticWelcome = {
|
|
693
|
+
create_time: now,
|
|
694
|
+
start_time: 0,
|
|
695
|
+
end_time: 0.01,
|
|
696
|
+
speaker: 'agent',
|
|
697
|
+
text: welcomeMessage || '',
|
|
698
|
+
};
|
|
699
|
+
return (_jsx(ChatMessageComponent, { message: syntheticWelcome, theme: theme, isFirstMessage: true, isNextSameSpeaker: false, isPrevSameSpeaker: false, enableTypewriter: false, welcomeImageUrl: welcomeImageUrl || undefined, welcomeTitle: welcomeTitle || undefined, possibleQueries: possibleQueries, onQuickQuery: handleQueryClick }, "__synthetic_welcome__"));
|
|
700
|
+
})(), (function () {
|
|
701
|
+
var firstAgentIndex = messages.findIndex(function (m) { return m.speaker === 'agent'; });
|
|
702
|
+
return messages.map(function (message, index) {
|
|
703
|
+
var isNextSameSpeaker = index < messages.length - 1 && messages[index + 1].speaker === message.speaker;
|
|
704
|
+
var isPrevSameSpeaker = index > 0 && messages[index - 1].speaker === message.speaker;
|
|
705
|
+
var isFirstAgentMessage = index === firstAgentIndex && message.speaker === 'agent' && !hasUserMessages;
|
|
706
|
+
return (_jsx(ChatMessageComponent, { message: message, theme: theme, onPlayAudio: message.speaker === 'agent' ? playResponseAudio : undefined, isPlayingAudio: isPlayingAudio, isFirstMessage: isFirstAgentMessage, isNextSameSpeaker: isNextSameSpeaker, isPrevSameSpeaker: isPrevSameSpeaker, onFeedback: function (messageId, value) { return addFeedback(messageId, value); }, enableTypewriter: index === messages.length - 1 && message.speaker === 'agent', welcomeImageUrl: isFirstAgentMessage ? (welcomeImageUrl || undefined) : undefined, welcomeTitle: isFirstAgentMessage ? (welcomeTitle || undefined) : undefined, possibleQueries: isFirstAgentMessage ? possibleQueries : undefined, onQuickQuery: handleQueryClick }, index));
|
|
707
|
+
});
|
|
708
|
+
})(), isAgentTyping && currentThinkingParts.length > 0 && (_jsxs("div", { style: { display: 'flex', flexDirection: 'column', maxWidth: '80%' }, children: [_jsx("div", { style: { fontSize: '14px', color: '#000000', fontWeight: 600, marginBottom: 4 }, children: "Agent" }), _jsx("div", { style: {
|
|
689
709
|
backgroundColor: 'transparent',
|
|
690
710
|
padding: 0,
|
|
691
711
|
borderRadius: 0,
|
|
@@ -695,7 +715,15 @@ export var GenAgentChat = function (_a) {
|
|
|
695
715
|
willChange: 'transform, opacity',
|
|
696
716
|
color: '#6b7280',
|
|
697
717
|
fontSize: '13px',
|
|
698
|
-
}, children: currentThinkingParts[currentThinkingPartIndex] || currentThinkingParts[currentThinkingParts.length - 1] }, "".concat(currentThinkingPartIndex, "-").concat(currentThinkingParts.join('|'))) })] })), _jsx("div", { ref: messagesEndRef })] }),
|
|
718
|
+
}, children: currentThinkingParts[currentThinkingPartIndex] || currentThinkingParts[currentThinkingParts.length - 1] }, "".concat(currentThinkingPartIndex, "-").concat(currentThinkingParts.join('|'))) })] })), _jsx("div", { ref: messagesEndRef })] }), (function () {
|
|
719
|
+
var showingSyntheticWelcome = !hasUserMessages &&
|
|
720
|
+
(messages.length === 0 || messages[0].speaker !== 'agent') &&
|
|
721
|
+
(Boolean(welcomeTitle) || Boolean(welcomeImageUrl) || Boolean(welcomeMessage));
|
|
722
|
+
return (possibleQueries.length > 0 &&
|
|
723
|
+
!hasUserMessages &&
|
|
724
|
+
(messages.length === 0 || messages[0].speaker !== 'agent') &&
|
|
725
|
+
!showingSyntheticWelcome);
|
|
726
|
+
})() && (_jsx("div", { style: possibleQueriesContainerStyle, children: possibleQueries.map(function (query, index) { return (_jsx("button", { style: queryButtonStyle, onClick: function () { return handleQueryClick(query); }, disabled: isLoading, children: query }, index)); }) })), attachments.length > 0 && (_jsx("div", { style: { padding: '0 16px', marginBottom: '8px', display: 'flex', gap: '8px', flexWrap: 'wrap' }, children: attachments.map(function (file, index) { return (_jsx(AttachmentPreview, { file: file, onRemove: function () { return handleRemoveAttachment(file.name); }, uploading: uploadingFiles.has(file.name) }, index)); }) })), !conversationId || isFinalized ? (_jsx("div", { style: inputContainerStyle, children: _jsx("button", { style: __assign(__assign({}, sendButtonStyle), { width: '100%', height: '48px', borderRadius: '16px' }), onClick: handleStartConversation, disabled: isLoading, children: "Start Conversation" }) })) : (_jsx("form", { onSubmit: handleSubmit, style: inputContainerStyle, children: _jsxs("div", { style: inputWrapperStyle, children: [_jsx("button", { type: "button", style: attachButtonStyle, title: "Attach", onClick: function () { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: _jsx(Paperclip, { size: 22, color: "#757575" }) }), _jsx("input", { type: "file", multiple: true, ref: fileInputRef, style: { display: 'none' }, onChange: handleFileChange }), _jsx("textarea", { ref: textAreaRef, style: textAreaStyle, className: "ga-textarea-nosb", value: inputValue, onChange: function (e) { return setInputValue(e.target.value); }, onKeyDown: function (e) {
|
|
699
727
|
if (e.key === 'Enter' && !e.shiftKey) {
|
|
700
728
|
e.preventDefault();
|
|
701
729
|
if ((inputValue.trim() !== '' || attachments.length > 0) && connectionState === 'connected') {
|
|
@@ -704,8 +732,8 @@ export var GenAgentChat = function (_a) {
|
|
|
704
732
|
}
|
|
705
733
|
}, placeholder: placeholder, disabled: !conversationId || isFinalized, rows: 1 }), _jsx("div", { style: rightActionContainerStyle, children: inputValue.trim() === '' && attachments.length === 0 ? (_jsx(VoiceInput, { onTranscription: function (text) { return setInputValue(text); }, onError: handleVoiceError, baseUrl: baseUrl, apiKey: apiKey, theme: theme })) : (_jsx("button", { type: "submit", style: sendButtonStyle, disabled: (inputValue.trim() === '' && attachments.length === 0) || connectionState !== 'connected', children: _jsx(Send, { size: 18, color: "#ffffff" }) })) })] }) }))] }), _jsx("div", { style: confirmOverlayStyle, children: _jsxs("div", { style: confirmDialogStyle, children: [_jsx("h3", { style: { fontFamily: fontFamily, marginTop: 0 }, children: "Reset Conversation" }), _jsx("p", { style: { fontFamily: fontFamily, fontSize: fontSize }, children: "This will clear the current conversation history and start a new conversation. Are you sure?" }), _jsxs("div", { style: confirmButtonsStyle, children: [_jsx("button", { style: __assign(__assign({}, confirmButtonStyle(false)), { color: textColor }), onClick: handleCancelReset, children: "Cancel" }), _jsx("button", { style: confirmButtonStyle(true), onClick: handleConfirmReset, children: "Reset" })] })] }) })] })); };
|
|
706
734
|
if (mode === 'floating') {
|
|
707
|
-
return (_jsxs(_Fragment, { children: [_jsx("button", { style: toggleButtonStyle, onClick: function () { return setIsFloatingOpen(function (prev) { return !prev; }); }, title: isFloatingOpen ? "Close Chat" : "Open Chat", children: isFloatingOpen ? _jsx(XIcon, { size: 24 }) : _jsx(MessageSquareMore, { size: 24 }) }), isFloatingOpen && (_jsx("div", { style: floatingContainerStyle, children: renderChatComponent() }))] }));
|
|
735
|
+
return (_jsxs(_Fragment, { children: [_jsx("button", { style: toggleButtonStyle, onClick: function () { return setIsFloatingOpen(function (prev) { return !prev; }); }, title: isFloatingOpen ? "Close Chat" : "Open Chat", children: isFloatingOpen ? _jsx(XIcon, { size: 24 }) : _jsx(MessageSquareMore, { size: 24 }) }), isFloatingOpen && (_jsx("div", { style: floatingContainerStyle, "data-genassist-container": "floating", children: renderChatComponent() }))] }));
|
|
708
736
|
}
|
|
709
737
|
return renderChatComponent();
|
|
710
738
|
};
|
|
711
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQW1ELE1BQU0sY0FBYyxDQUFDO0FBQ25KLE9BQU8sUUFBUSxNQUFNLHlCQUF5QixDQUFDO0FBRS9DLE1BQU0sQ0FBQyxJQUFNLFlBQVksR0FBZ0MsVUFBQyxFQWF6RDtRQVpDLE9BQU8sYUFBQSxFQUNQLE1BQU0sWUFBQSxFQUNOLE1BQU0sWUFBQSxFQUNOLFFBQVEsY0FBQSxFQUNSLE9BQU8sYUFBQSxFQUNQLFVBQVUsZ0JBQUEsRUFDVixVQUFVLGdCQUFBLEVBQ1YsS0FBSyxXQUFBLEVBQ0wsbUJBQXlCLEVBQXpCLFdBQVcsbUJBQUcsV0FBVyxLQUFBLEVBQ3pCLG1CQUE4QixFQUE5QixXQUFXLG1CQUFHLGdCQUFnQixLQUFBLEVBQzlCLFlBQWlCLEVBQWpCLElBQUksbUJBQUcsVUFBVSxLQUFBLEVBQ2pCLHNCQUFtQixFQUFuQixjQUFjLG1CQUFHLEVBQUUsS0FBQTtJQUViLElBQUEs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QUFPLENBQ0wsOEJBQ0UsaUJBQ0UsS0FBSyxFQUFFLGlCQUFpQixFQUN4QixPQUFPLEVBQUUsY0FBTSxPQUFBLGlCQUFpQixDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsQ0FBQyxJQUFJLEVBQUwsQ0FBSyxDQUFDLEVBQWhDLENBQWdDLEVBQy9DLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsV0FBVyxZQUVqRCxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUMsS0FBSyxJQUFDLElBQUksRUFBRSxFQUFFLEdBQUksQ0FBQyxDQUFDLENBQUMsS0FBQyxpQkFBaUIsSUFBQyxJQUFJLEVBQUUsRUFBRSxHQUFJLEdBQ2hFLEVBRVIsY0FBYyxJQUFJLENBQ2pCLGNBQUssS0FBSyxFQUFFLHNCQUFzQixZQUMvQixtQkFBbUIsRUFBRSxHQUNsQixDQUNQLElBQ0EsQ0FDSixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sbUJBQW1CLEVBQUUsQ0FBQztBQUMvQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZUNvbXBvbmVudCwgQXR0YWNobWVudFByZXZpZXcgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IHVzZUNoYXQgfSBmcm9tICcuLi9ob29rcy91c2VDaGF0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBHZW5BZ2VudENoYXRQcm9wcyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFZvaWNlSW5wdXQgfSBmcm9tICcuL1ZvaWNlSW5wdXQnO1xuaW1wb3J0IHsgQXVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXVkaW9TZXJ2aWNlJztcbmltcG9ydCB7IFNlbmQsIFBhcGVyY2xpcCwgTW9yZVZlcnRpY2FsLCBSZWZyZXNoQ3csIFhJY29uLCBNZXNzYWdlU3F1YXJlTW9yZSwgRmlsZSBhcyBGaWxlSWNvbiwgRmlsZUltYWdlLCBGaWxlVGV4dCwgRmlsZUpzb24gfSBmcm9tICdsdWNpZGUtcmVhY3QnO1xuaW1wb3J0IGNoYXRMb2dvIGZyb20gJy4uL2Fzc2V0cy9jaGF0LWxvZ28ucG5nJztcblxuZXhwb3J0IGNvbnN0IEdlbkFnZW50Q2hhdDogUmVhY3QuRkM8R2VuQWdlbnRDaGF0UHJvcHM+ID0gKHtcbiAgYmFzZVVybCxcbiAgYXBpS2V5LFxuICB0ZW5hbnQsXG4gIG1ldGFkYXRhLFxuICBvbkVycm9yLFxuICBvblRha2VvdmVyLFxuICBvbkZpbmFsaXplLFxuICB0aGVtZSxcbiAgaGVhZGVyVGl0bGUgPSAnR2VuYXNzaXN0JyxcbiAgcGxhY2Vob2xkZXIgPSAnQXNrIGEgcXVlc3Rpb24nLFxuICBtb2RlID0gJ2VtYmVkZGVkJyxcbiAgZmxvYXRpbmdDb25maWcgPSB7fVxufSk6IFJlYWN0LlJlYWN0RWxlbWVudCA9PiB7XG4gIGNvbnN0IFtpbnB1dFZhbHVlLCBzZXRJbnB1dFZhbHVlXSA9IHVzZVN0YXRlKCcnKTtcbiAgY29uc3QgW3Nob3dSZXNldENvbmZpcm0sIHNldFNob3dSZXNldENvbmZpcm1dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc2hvd01lbnUsIHNldFNob3dNZW51XSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzUGxheWluZ0F1ZGlvLCBzZXRJc1BsYXlpbmdBdWRpb10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc0Zsb2F0aW5nT3Blbiwgc2V0SXNGbG9hdGluZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXR0YWNobWVudHMsIHNldEF0dGFjaG1lbnRzXSA9IHVzZVN0YXRlPEZpbGVbXT4oW10pO1xuICBjb25zdCBbdXBsb2FkaW5nRmlsZXMsIHNldFVwbG9hZGluZ0ZpbGVzXSA9IHVzZVN0YXRlPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuICBjb25zdCBtZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB0ZXh0QXJlYVJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKTtcbiAgY29uc3QgaGVhZGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgW2hlYWRlckhlaWdodCwgc2V0SGVhZGVySGVpZ2h0XSA9IHVzZVN0YXRlKDApO1xuICBjb25zdCBbc2hvd0JhY2tsaWdodCwgc2V0U2hvd0JhY2tsaWdodF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVMgPSBbXG4gICAgXCJUaGlua2luZ+KAplwiLFxuICAgIFwiQW5hbHl6aW5nIHlvdXIgcXVlc3Rpb27igKZcIixcbiAgICBcIlNlYXJjaGluZyBrbm93bGVkZ2XigKZcIixcbiAgICBcIlB1bGxpbmcgcmVsZXZhbnQgaW5mb+KAplwiLFxuICAgIFwiRHJhZnRpbmcgdGhlIGFuc3dlcuKAplwiLFxuICAgIFwiRG91Ymxl4oCRY2hlY2tpbmcgZGV0YWlsc+KAplwiLFxuICAgIFwiVHlpbmcgaXQgdG9nZXRoZXLigKZcIixcbiAgICBcIkFsbW9zdCB0aGVyZeKAplwiLFxuICBdO1xuICBjb25zdCBbY3VycmVudFRoaW5raW5nUGFydHMsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSk7XG4gIGNvbnN0IFtjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgsIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICB1cGxvYWRGaWxlLFxuICAgIHJlc2V0Q29udmVyc2F0aW9uLFxuICAgIHN0YXJ0Q29udmVyc2F0aW9uLFxuICAgIGNvbm5lY3Rpb25TdGF0ZSxcbiAgICBjb252ZXJzYXRpb25JZCxcbiAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgaXNUYWtlbk92ZXIsXG4gICAgaXNGaW5hbGl6ZWQsXG4gICAgaXNBZ2VudFR5cGluZyxcbiAgICBhZGRGZWVkYmFjayxcbiAgICB3ZWxjb21lVGl0bGUsXG4gICAgd2VsY29tZUltYWdlVXJsLFxuICAgIHRoaW5raW5nUGhyYXNlcyxcbiAgICB0aGlua2luZ0RlbGF5TXMsXG4gIH0gPSB1c2VDaGF0KHtcbiAgICBiYXNlVXJsLFxuICAgIGFwaUtleSxcbiAgICB0ZW5hbnQsXG4gICAgbWV0YWRhdGEsXG4gICAgb25FcnJvcixcbiAgICBvblRha2VvdmVyLFxuICAgIG9uRmluYWxpemVcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzRW5kUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgYXVkaW9TZXJ2aWNlID0gdXNlUmVmPEF1ZGlvU2VydmljZSB8IG51bGw+KG51bGwpO1xuXG4gIGNvbnN0IGhhc1VzZXJNZXNzYWdlcyA9IG1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PiBtZXNzYWdlLnNwZWFrZXIgPT09ICdjdXN0b21lcicpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXVkaW9TZXJ2aWNlLmN1cnJlbnQgPSBuZXcgQXVkaW9TZXJ2aWNlKHsgYmFzZVVybCwgYXBpS2V5IH0pO1xuICB9LCBbYmFzZVVybCwgYXBpS2V5XSk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWVzc2FnZXNFbmRSZWYuY3VycmVudCkge1xuICAgICAgbWVzc2FnZXNFbmRSZWYuY3VycmVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICB9XG4gIH0sIFttZXNzYWdlc10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdXBkYXRlSGVhZGVySGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgc2V0SGVhZGVySGVpZ2h0KGhlYWRlclJlZi5jdXJyZW50Py5vZmZzZXRIZWlnaHQgfHwgMCk7XG4gICAgfTtcbiAgICB1cGRhdGVIZWFkZXJIZWlnaHQoKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlSGVhZGVySGVpZ2h0KTtcbiAgICByZXR1cm4gKCkgPT4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gIH0sIFtdKTtcblxuICAvLyBTbW9vdGhseSBzaG93L2hpZGUgdGhlIGJhY2tsaWdodCB3aGlsZSB0aGUgYWdlbnQgaXMgdHlwaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQWdlbnRUeXBpbmcpIHtcbiAgICAgIHNldFNob3dCYWNrbGlnaHQodHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHQgPSBzZXRUaW1lb3V0KCgpID0+IHNldFNob3dCYWNrbGlnaHQoZmFsc2UpLCA0MjApOyAvLyBhbGxvdyBmYWRlLW91dFxuICAgIHJldHVybiAoKSA9PiBjbGVhclRpbWVvdXQodCk7XG4gIH0sIFtpc0FnZW50VHlwaW5nXSk7XG5cbiAgLy8gU2hvdyBcInRoaW5raW5nXCIgcGhyYXNlcyB3aGlsZSBhZ2VudCBpcyB0eXBpbmdcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzQWdlbnRUeXBpbmcpIHtcbiAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzKFtdKTtcbiAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleCgwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSYW5kb21seSBzZWxlY3QgYSBwaHJhc2UgZnJvbSB0aGUgbGlzdFxuICAgIGNvbnN0IGxpc3QgPSAodGhpbmtpbmdQaHJhc2VzICYmIHRoaW5raW5nUGhyYXNlcy5sZW5ndGggPiAwKSA/IHRoaW5raW5nUGhyYXNlcyA6IERFRkFVTFRfVEhJTktJTkdfTUVTU0FHRVM7XG4gICAgY29uc3QgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBsaXN0Lmxlbmd0aCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRQaHJhc2UgPSBsaXN0W3JhbmRvbUluZGV4XTtcblxuICAgIC8vIFNwbGl0IGJ5IHwgdG8gZ2V0IHBhcnRzLCBvciB1c2UgdGhlIHBocmFzZSBhcyBhIHNpbmdsZSBwYXJ0IGlmIG5vIHwgZm91bmRcbiAgICBjb25zdCBwYXJ0cyA9IHNlbGVjdGVkUGhyYXNlLmluY2x1ZGVzKCd8JykgXG4gICAgICA/IHNlbGVjdGVkUGhyYXNlLnNwbGl0KCd8JykubWFwKHBhcnQgPT4gcGFydC50cmltKCkpLmZpbHRlcihwYXJ0ID0+IHBhcnQubGVuZ3RoID4gMClcbiAgICAgIDogW3NlbGVjdGVkUGhyYXNlLnRyaW0oKV07XG5cbiAgICAvLyBJbml0aWFsaXplIHdpdGggZmlyc3QgcGFydFxuICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRzKHBhcnRzKTtcbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoMCk7XG5cbiAgICAvLyBJZiB0aGVyZSdzIG9ubHkgb25lIHBhcnQsIG5vIG5lZWQgdG8gcHJvZ3Jlc3NcbiAgICBpZiAocGFydHMubGVuZ3RoIDw9IDEpIHJldHVybjtcblxuICAgIC8vIFByb2dyZXNzIHRocm91Z2ggcGFydHMgd2l0aCBkZWxheSwgYnV0IHN0b3AgYXQgdGhlIGxhc3Qgb25lXG4gICAgY29uc3Qgcm90RGVsYXkgPSBNYXRoLm1heCgyNTAsIHRoaW5raW5nRGVsYXlNcyB8fCAxMDAwKTtcbiAgICBjb25zdCB0aW1lb3V0SWRzOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PltdID0gW107XG5cbiAgICAvLyBTZXQgdXAgdGltZW91dHMgZm9yIGVhY2ggcGFydCB0cmFuc2l0aW9uXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHNldEN1cnJlbnRUaGlua2luZ1BhcnRJbmRleChpKTtcbiAgICAgIH0sIHJvdERlbGF5ICogaSk7XG4gICAgICB0aW1lb3V0SWRzLnB1c2godGltZW91dElkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGltZW91dElkcy5mb3JFYWNoKGlkID0+IGNsZWFyVGltZW91dChpZCkpO1xuICAgIH07XG4gIH0sIFtpc0FnZW50VHlwaW5nLCB0aGlua2luZ1BocmFzZXMsIHRoaW5raW5nRGVsYXlNc10pO1xuXG4gIGNvbnN0IHN1Ym1pdE1lc3NhZ2UgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBjb25zdCB0ZXh0VG9TZW5kID0gaW5wdXRWYWx1ZTtcbiAgICBjb25zdCBmaWxlc1RvVXBsb2FkID0gWy4uLmF0dGFjaG1lbnRzXTtcbiAgICBzZXRJbnB1dFZhbHVlKCcnKTtcbiAgICBzZXRBdHRhY2htZW50cyhbXSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHNlbmRNZXNzYWdlKHRleHRUb1NlbmQsIGZpbGVzVG9VcGxvYWQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZW5kaW5nIG1lc3NhZ2U6JywgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBhc3luYyAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGF3YWl0IHN1Ym1pdE1lc3NhZ2UoKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gYXN5bmMgKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUudGFyZ2V0LmZpbGVzKSB7XG4gICAgICBjb25zdCBuZXdGaWxlcyA9IEFycmF5LmZyb20oZS50YXJnZXQuZmlsZXMpO1xuICAgICAgc2V0QXR0YWNobWVudHMocHJldiA9PiBbLi4ucHJldiwgLi4ubmV3RmlsZXNdKTtcblxuICAgICAgY29uc3QgbmV3VXBsb2FkaW5nRmlsZXMgPSBuZXcgU2V0KHVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgIG5ld0ZpbGVzLmZvckVhY2goZmlsZSA9PiBuZXdVcGxvYWRpbmdGaWxlcy5hZGQoZmlsZS5uYW1lKSk7XG4gICAgICBzZXRVcGxvYWRpbmdGaWxlcyhuZXdVcGxvYWRpbmdGaWxlcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKG5ld0ZpbGVzLm1hcChmaWxlID0+IHVwbG9hZEZpbGUoZmlsZSkpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgZmlsZSB1cGxvYWQ6XCIsIGVycm9yKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3QgZmluYWxVcGxvYWRpbmdGaWxlcyA9IG5ldyBTZXQodXBsb2FkaW5nRmlsZXMpO1xuICAgICAgICBuZXdGaWxlcy5mb3JFYWNoKGZpbGUgPT4gZmluYWxVcGxvYWRpbmdGaWxlcy5kZWxldGUoZmlsZS5uYW1lKSk7XG4gICAgICAgIHNldFVwbG9hZGluZ0ZpbGVzKGZpbmFsVXBsb2FkaW5nRmlsZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZW1vdmVBdHRhY2htZW50ID0gKGZpbGVOYW1lOiBzdHJpbmcpID0+IHtcbiAgICBzZXRBdHRhY2htZW50cyhwcmV2ID0+IHByZXYuZmlsdGVyKGYgPT4gZi5uYW1lICE9PSBmaWxlTmFtZSkpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVZvaWNlRXJyb3IgPSAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgY29uc29sZS5lcnJvcignVm9pY2UgaW5wdXQgZXJyb3I6JywgZXJyb3IpO1xuICAgIGlmIChvbkVycm9yKSB7XG4gICAgICBvbkVycm9yKGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcGxheVJlc3BvbnNlQXVkaW8gPSBhc3luYyAodGV4dDogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFhdWRpb1NlcnZpY2UuY3VycmVudCB8fCBpc1BsYXlpbmdBdWRpbykgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKHRydWUpO1xuICAgICAgY29uc3QgYXVkaW9CbG9iID0gYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQudGV4dFRvU3BlZWNoKHRleHQpO1xuICAgICAgYXdhaXQgYXVkaW9TZXJ2aWNlLmN1cnJlbnQucGxheUF1ZGlvKGF1ZGlvQmxvYik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBsYXlpbmcgYXVkaW86JywgZXJyb3IpO1xuICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgb25FcnJvcihlcnJvciBhcyBFcnJvcik7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUGxheWluZ0F1ZGlvKGZhbHNlKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUXVlcnlDbGljayA9IGFzeW5jIChxdWVyeTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuICAgIFxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZShxdWVyeSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlbmRpbmcgcXVpY2sgcXVlcnk6JywgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYW5kbGVTdGFydENvbnZlcnNhdGlvbiA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXNMb2FkaW5nKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3RhcnRDb252ZXJzYXRpb24oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgY29udmVyc2F0aW9uOicsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTWVudUNsaWNrID0gKCkgPT4ge1xuICAgIHNldFNob3dNZW51KHByZXYgPT4gIXByZXYpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVJlc2V0Q2xpY2sgPSAoKSA9PiB7XG4gICAgc2V0U2hvd01lbnUoZmFsc2UpO1xuICAgIHNldFNob3dSZXNldENvbmZpcm0odHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybVJlc2V0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHJlc2V0Q29udmVyc2F0aW9uKCk7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlQ2FuY2VsUmVzZXQgPSAoKSA9PiB7XG4gICAgc2V0U2hvd1Jlc2V0Q29uZmlybShmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgcHJpbWFyeUNvbG9yID0gdGhlbWU/LnByaW1hcnlDb2xvciB8fCAnIzI5NjJGRic7XG4gIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHRoZW1lPy5iYWNrZ3JvdW5kQ29sb3IgfHwgJyNmZmZmZmYnO1xuICBjb25zdCB0ZXh0Q29sb3IgPSB0aGVtZT8udGV4dENvbG9yIHx8ICcjMDAwMDAwJztcbiAgY29uc3QgZm9udEZhbWlseSA9IHRoZW1lPy5mb250RmFtaWx5IHx8ICdSb2JvdG8sIEFyaWFsLCBzYW5zLXNlcmlmJztcbiAgY29uc3QgZm9udFNpemUgPSB0aGVtZT8uZm9udFNpemUgfHwgJzE0cHgnO1xuICBjb25zdCBmb250U2l6ZU51bWJlciA9IHR5cGVvZiBmb250U2l6ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludChmb250U2l6ZSwgMTApIDogKHR5cGVvZiBmb250U2l6ZSA9PT0gJ251bWJlcicgPyBmb250U2l6ZSA6IDE0KTtcbiAgY29uc3QgbGluZUhlaWdodFB4ID0gTWF0aC5yb3VuZChmb250U2l6ZU51bWJlciAqIDEuNSk7XG4gIGNvbnN0IHRleHRBcmVhTWF4SGVpZ2h0ID0gbGluZUhlaWdodFB4ICogMzsgLy8gdXAgdG8gMyBsaW5lc1xuXG4gIGNvbnN0IHBvc2l0aW9uID0gZmxvYXRpbmdDb25maWcucG9zaXRpb24gfHwgJ2JvdHRvbS1yaWdodCc7XG4gIGNvbnN0IG9mZnNldCA9IGZsb2F0aW5nQ29uZmlnLm9mZnNldCB8fCB7IHg6IDIwLCB5OiAyMCB9O1xuICBjb25zdCBvZmZzZXRYID0gb2Zmc2V0LnggfHwgMjA7XG4gIGNvbnN0IG9mZnNldFkgPSBvZmZzZXQueSB8fCAyMDtcblxuICBjb25zdCBjb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgbWF4SGVpZ2h0OiAnNjAwcHgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgbWF4V2lkdGg6ICc0MDBweCcsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlMGUwZTAnLFxuICAgIGJvcmRlclJhZGl1czogJzMycHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lPy5zZWNvbmRhcnlDb2xvciB8fCAnI2Y1ZjVmNScsXG4gICAgZm9udEZhbWlseSxcbiAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgfTtcblxuICBjb25zdCBoZWFkZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnLFxuICAgIGNvbG9yOiAnIzExMTExMScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIC8vIEtlZXAgaGVhZGVyIGJlbG93IHRoZSBjb250ZW50IGNhcmQgc28gZ2xvdyBjYW4gYXBwZWFyIHVuZGVyIHRoZSBjYXJkIGVkZ2VcbiAgICB6SW5kZXg6IDAsXG4gICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgfTtcblxuICBjb25zdCBsb2dvQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzEwcHgnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMSxcbiAgfTtcblxuICBjb25zdCBsb2dvU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgd2lkdGg6ICcyOHB4JyxcbiAgICBoZWlnaHQ6ICcyOHB4JyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgfTtcblxuICBjb25zdCBoZWFkZXJUaXRsZVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZvbnRTaXplOiAnMTZweCcsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIG1hcmdpbjogMCxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclN1YnRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBtYXJnaW46IDAsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBtZW51QnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIGNvbG9yOiAnIzExMTExMScsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzMycHgnLFxuICAgIGhlaWdodDogJzMycHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIHpJbmRleDogMSxcbiAgfTtcblxuICBjb25zdCBtZW51UG9wdXBTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6ICc1MHB4JyxcbiAgICByaWdodDogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgYm94U2hhZG93OiAnMCAycHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMSknLFxuICAgIHpJbmRleDogNSxcbiAgICBtaW5XaWR0aDogJzE1MHB4JyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIH07XG5cbiAgY29uc3QgbWVudUl0ZW1TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAnMTBweCAxNXB4JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNmMGYwZjAnLFxuICB9O1xuXG4gIGNvbnN0IGNoYXRDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgIHBhZGRpbmc6ICcxNXB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICB9O1xuXG4gIGNvbnN0IGlucHV0Q29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIHBhZGRpbmc6ICcxMnB4IDE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGdhcDogJzhweCcsXG4gIH07XG5cbiAgY29uc3QgaW5wdXRXcmFwcGVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXg6IDEsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyUmFkaXVzOiAnMjRweCcsXG4gICAgYm9yZGVyOiAnMXB4IHNvbGlkICNlNWU3ZWInLFxuICAgIHBhZGRpbmc6ICcwIDEycHgnLFxuICAgIG1pbkhlaWdodDogJzUwcHgnLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDYpJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICB9O1xuXG4gIGNvbnN0IHRleHRBcmVhU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZmxleDogMSxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICBmb250U2l6ZSxcbiAgICBmb250RmFtaWx5LFxuICAgIHBhZGRpbmc6ICcxMHB4JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICc0NnB4JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIHJlc2l6ZTogJ25vbmUnLFxuICAgIGxpbmVIZWlnaHQ6IGAke2xpbmVIZWlnaHRQeH1weGAsXG4gICAgbWF4SGVpZ2h0OiBgJHt0ZXh0QXJlYU1heEhlaWdodH1weGAsXG4gICAgb3ZlcmZsb3dZOiAnaGlkZGVuJyxcbiAgfTtcblxuICBjb25zdCBhdHRhY2hCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgY29sb3I6ICcjNzU3NTc1JyxcbiAgICBwYWRkaW5nOiAwLFxuICB9O1xuXG4gIGNvbnN0IHNlbmRCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICBjb2xvcjogJyNmZmZmZmYnLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgd2lkdGg6ICczNnB4JyxcbiAgICBoZWlnaHQ6ICczNnB4JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBmbGV4U2hyaW5rOiAwLFxuICAgIGJveFNoYWRvdzogJzAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDgpJyxcbiAgfTtcblxuICBjb25zdCByaWdodEFjdGlvbkNvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHJpZ2h0OiAnNHB4JyxcbiAgICB0b3A6ICc1MCUnLFxuICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gIH07XG5cbiAgY29uc3QgYXV0b1Jlc2l6ZVRleHRBcmVhID0gKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gdGV4dEFyZWFSZWYuY3VycmVudDtcbiAgICBpZiAoIWVsKSByZXR1cm47XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgIGNvbnN0IG5ld0hlaWdodCA9IE1hdGgubWluKGVsLnNjcm9sbEhlaWdodCwgdGV4dEFyZWFNYXhIZWlnaHQpO1xuICAgIGVsLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XG4gICAgZWwuc3R5bGUub3ZlcmZsb3dZID0gZWwuc2Nyb2xsSGVpZ2h0ID4gdGV4dEFyZWFNYXhIZWlnaHQgPyAnYXV0bycgOiAnaGlkZGVuJztcbiAgfTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1dG9SZXNpemVUZXh0QXJlYSgpO1xuICB9LCBbaW5wdXRWYWx1ZSwgZm9udFNpemVOdW1iZXJdKTtcblxuICBjb25zdCBwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgICBwYWRkaW5nOiAnMCcsXG4gICAgcGFkZGluZ0xlZnQ6ICcyOHB4JyxcbiAgICBwYWRkaW5nUmlnaHQ6ICcyOHB4JyxcbiAgICBtYXJnaW5Ub3A6ICc1cHgnLFxuICAgIG1hcmdpbkJvdHRvbTogJzE1cHgnLFxuICAgIHdpZHRoOiAnMTAwJScsXG4gICAgZm9udEZhbWlseSxcbiAgfTtcblxuICBjb25zdCBxdWVyeUJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWU/LnNlY29uZGFyeUNvbG9yIHx8ICcjZjVmNWY1JyxcbiAgICBjb2xvcjogdGV4dENvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzZweCcsXG4gICAgZm9udFNpemUsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgYm94U2hhZG93OiAnbm9uZScsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBtYXhXaWR0aDogJzI0MHB4JyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1PdmVybGF5U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogc2hvd1Jlc2V0Q29uZmlybSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICB0b3A6IDAsXG4gICAgbGVmdDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiYSgwLCAwLCAwLCAwLjUpJyxcbiAgICB6SW5kZXg6IDEwLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBjb25maXJtRGlhbG9nU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgcGFkZGluZzogJzIwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgbWF4V2lkdGg6ICczMDBweCcsXG4gICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICBmb250RmFtaWx5LFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybUJ1dHRvbnNTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIG1hcmdpblRvcDogJzE1cHgnLFxuICAgIGdhcDogJzEwcHgnLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1CdXR0b25TdHlsZSA9IChpc0NvbmZpcm06IGJvb2xlYW4pOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+ICh7XG4gICAgcGFkZGluZzogJzhweCAxNnB4JyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGlzQ29uZmlybSA/ICcjRjQ0MzM2JyA6ICcjZTBlMGUwJyxcbiAgICBjb2xvcjogaXNDb25maXJtID8gJyNmZmZmZmYnIDogdGV4dENvbG9yLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udEZhbWlseSxcbiAgICBmb250U2l6ZSxcbiAgfSk7XG5cbiAgY29uc3QgY29udGVudENhcmRTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogMjQsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IDI0LFxuICAgIGJveFNoYWRvdzogJzAgLTJweCA2cHggcmdiYSgwLDAsMCwwLjAzKScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAyLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJ1xuICB9O1xuXG4gIC8vIEZsb2F0aW5nIG1vZGUgc3R5bGVzXG4gIGNvbnN0IGdldFBvc2l0aW9uU3R5bGVzID0gKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4ge1xuICAgIGNvbnN0IGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIHpJbmRleDogMTAwMCxcbiAgICB9O1xuXG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgYm90dG9tOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAnYm90dG9tLWxlZnQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIGxlZnQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIHRvcDogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCBsZWZ0OiBvZmZzZXRYIH07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldENoYXRQb3NpdGlvblN0eWxlcyA9ICgpOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0+IHtcbiAgICBjb25zdCBiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB6SW5kZXg6IDk5OSxcbiAgICB9O1xuXG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgY2FzZSAnYm90dG9tLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZICsgODAsXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSArIDgwLFxuICAgICAgICAgIGxlZnQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgICBjYXNlICd0b3AtcmlnaHQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICB0b3A6IG9mZnNldFkgKyA4MCxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3RvcC1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgdG9wOiBvZmZzZXRZICsgODAsXG4gICAgICAgICAgbGVmdDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIGJvdHRvbTogb2Zmc2V0WSArIDgwLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRSZXNwb25zaXZlRGltZW5zaW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBzY3JlZW5XaWR0aCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAxMDI0O1xuICAgIGlmIChzY3JlZW5XaWR0aCA8PSA0ODApIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAnY2FsYygxMDB2dyAtIDQwcHgpJywgaGVpZ2h0OiAnNDUwcHgnIH07XG4gICAgfSBlbHNlIGlmIChzY3JlZW5XaWR0aCA8PSA3NjgpIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAnMzUwcHgnLCBoZWlnaHQ6ICc1MDBweCcgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczODBweCcsIGhlaWdodDogJzYwMHB4JyB9O1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBmbG9hdGluZ0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIC4uLmdldENoYXRQb3NpdGlvblN0eWxlcygpLFxuICAgIC4uLmdldFJlc3BvbnNpdmVEaW1lbnNpb25zKCksXG4gIH07XG5cbiAgY29uc3QgdG9nZ2xlQnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uZ2V0UG9zaXRpb25TdHlsZXMoKSxcbiAgICB3aWR0aDogJzYwcHgnLFxuICAgIGhlaWdodDogJzYwcHgnLFxuICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgYmFja2dyb3VuZENvbG9yOiBwcmltYXJ5Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgY29sb3I6ICd3aGl0ZScsXG4gICAgZm9udFNpemU6ICcyNHB4JyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBib3hTaGFkb3c6ICcwIDRweCAxMnB4IHJnYmEoNDEsIDk4LCAyNTUsIDAuMyknLFxuICAgIHRyYW5zaXRpb246ICdhbGwgMC4zcyBlYXNlJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIHpJbmRleDogMTAwMSxcbiAgfTtcblxuICBjb25zdCByZW5kZXJDaGF0Q29tcG9uZW50ID0gKCkgPT4gKFxuICAgIDxkaXYgc3R5bGU9e2NvbnRhaW5lclN0eWxlfT5cbiAgICAgIDxzdHlsZT57YFxuICAgICAgICBAa2V5ZnJhbWVzIGJsaW5rIHsgMCUgeyBvcGFjaXR5OiAwLjI7IH0gMjAlIHsgb3BhY2l0eTogMTsgfSAxMDAlIHsgb3BhY2l0eTogMC4yOyB9IH1cbiAgICAgICAgLyogSGlkZSBzY3JvbGxiYXJzIGZvciB0aGUgZXhwYW5kaW5nIHRleHRhcmVhIGJ1dCBrZWVwIHNjcm9sbGluZyAqL1xuICAgICAgICAuZ2EtdGV4dGFyZWEtbm9zYiB7IHNjcm9sbGJhci13aWR0aDogbm9uZTsgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOyB9XG4gICAgICAgIC5nYS10ZXh0YXJlYS1ub3NiOjotd2Via2l0LXNjcm9sbGJhciB7IHdpZHRoOiAwOyBoZWlnaHQ6IDA7IH1cbiAgICAgICAgLyogQmFja2xpZ2h0IHN3ZWVwIHVuZGVyIGNvbnRlbnQgZWRnZSAoR1BVLWZyaWVuZGx5KS5cbiAgICAgICAgICAgV2lkZXIgdHJhdmVsIHRvIGZ1bGx5IHJlYWNoIGJvdGggY29ybmVycy4gKi9cbiAgICAgICAgQGtleWZyYW1lcyBnYS1iYWNrbGlnaHQtc3dlZXAyIHsgMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTM1JSk7IH0gMTAwJSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMDUlKTsgfSB9XG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtYmFja2xpZ2h0LXB1bHNlIHsgMCUsMTAwJSB7IG9wYWNpdHk6IDAuNzsgfSA1MCUgeyBvcGFjaXR5OiAxOyB9IH1cbiAgICAgICAgQGtleWZyYW1lcyBnYS10aGluay1jaGFuZ2UgeyAwJSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOyB9IDEwMCUgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0gfVxuICAgICAgYH08L3N0eWxlPlxuICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3R5bGV9IHJlZj17aGVhZGVyUmVmfT5cbiAgICAgICAgPGRpdiBzdHlsZT17bG9nb0NvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICA8aW1nIHNyYz17Y2hhdExvZ299IGFsdD1cIkxvZ29cIiBzdHlsZT17bG9nb1N0eWxlfSAvPlxuICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyVGl0bGVTdHlsZX0+e2hlYWRlclRpdGxlfTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aGVhZGVyU3VidGl0bGVTdHlsZX0+U3VwcG9ydDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHN0eWxlPXttZW51QnV0dG9uU3R5bGV9XG4gICAgICAgICAgb25DbGljaz17aGFuZGxlTWVudUNsaWNrfVxuICAgICAgICAgIHRpdGxlPVwiTWVudVwiXG4gICAgICAgID5cbiAgICAgICAgICA8TW9yZVZlcnRpY2FsIHNpemU9ezI0fSBjb2xvcj1cIiMxMTExMTFcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgPC9kaXY+XG4gICAgICB7c2hvd0JhY2tsaWdodCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcmlnaHQ6IDAsXG4gICAgICAgICAgICB0b3A6IE1hdGgubWF4KDAsIGhlYWRlckhlaWdodCAtIDE0KSxcbiAgICAgICAgICAgIGhlaWdodDogNDIsXG4gICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICAgICAgICB6SW5kZXg6IDEsXG4gICAgICAgICAgICBvcGFjaXR5OiBpc0FnZW50VHlwaW5nID8gMSA6IDAsXG4gICAgICAgICAgICB0cmFuc2l0aW9uOiAnb3BhY2l0eSA0MjBtcyBlYXNlLWluLW91dCcsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgICB0b3A6IDYsXG4gICAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgICAgIHdpZHRoOiAnNzglJyxcbiAgICAgICAgICAgICAgZmlsdGVyOiAnYmx1cigyMnB4KScsXG4gICAgICAgICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgICAgICAgJ2xpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSg5OSwxMDIsMjQxLDAuMCkgMCUsIHJnYmEoOTksMTAyLDI0MSwwLjM1KSAxNSUsIHJnYmEoOTksMTAyLDI0MSwwLjU1KSA1MCUsIHJnYmEoOTksMTAyLDI0MSwwLjM1KSA4NSUsIHJnYmEoOTksMTAyLDI0MSwwLjApIDEwMCUpJyxcbiAgICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybSwgb3BhY2l0eScsXG4gICAgICAgICAgICAgIGFuaW1hdGlvbjogJ2dhLWJhY2tsaWdodC1zd2VlcDIgMS4ycyBjdWJpYy1iZXppZXIoMC40LDAuMCwwLjIsMSkgaW5maW5pdGUgYWx0ZXJuYXRlLCBnYS1iYWNrbGlnaHQtcHVsc2UgMi40cyBlYXNlLWluLW91dCBpbmZpbml0ZScsXG4gICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMTgsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cblxuICAgICAge3Nob3dNZW51ICYmIChcbiAgICAgICAgPGRpdiByZWY9e21lbnVSZWZ9IHN0eWxlPXttZW51UG9wdXBTdHlsZX0+XG4gICAgICAgICAgPGRpdiBzdHlsZT17bWVudUl0ZW1TdHlsZX0gb25DbGljaz17aGFuZGxlUmVzZXRDbGlja30+XG4gICAgICAgICAgICA8UmVmcmVzaEN3IHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgUmVzZXQgY29udmVyc2F0aW9uXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIFxuICAgICAgPGRpdiBzdHlsZT17Y29udGVudENhcmRTdHlsZX0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2NoYXRDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAge21lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzTmV4dFNhbWVTcGVha2VyID0gaW5kZXggPCBtZXNzYWdlcy5sZW5ndGggLSAxICYmIG1lc3NhZ2VzW2luZGV4ICsgMV0uc3BlYWtlciA9PT0gbWVzc2FnZS5zcGVha2VyO1xuICAgICAgICAgICAgY29uc3QgaXNQcmV2U2FtZVNwZWFrZXIgPSBpbmRleCA+IDAgJiYgbWVzc2FnZXNbaW5kZXggLSAxXS5zcGVha2VyID09PSBtZXNzYWdlLnNwZWFrZXI7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIDxDaGF0TWVzc2FnZUNvbXBvbmVudCBcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fSBcbiAgICAgICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfSBcbiAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgb25QbGF5QXVkaW89e21lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyA/IHBsYXlSZXNwb25zZUF1ZGlvIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIGlzUGxheWluZ0F1ZGlvPXtpc1BsYXlpbmdBdWRpb31cbiAgICAgICAgICAgICAgICBpc0ZpcnN0TWVzc2FnZT17aW5kZXggPT09IDAgJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnICYmICFoYXNVc2VyTWVzc2FnZXN9XG4gICAgICAgICAgICAgICAgaXNOZXh0U2FtZVNwZWFrZXI9e2lzTmV4dFNhbWVTcGVha2VyfVxuICAgICAgICAgICAgICAgIGlzUHJldlNhbWVTcGVha2VyPXtpc1ByZXZTYW1lU3BlYWtlcn1cbiAgICAgICAgICAgICAgICBvbkZlZWRiYWNrPXsobWVzc2FnZUlkLCB2YWx1ZSkgPT4gYWRkRmVlZGJhY2sobWVzc2FnZUlkLCB2YWx1ZSl9XG4gICAgICAgICAgICAgICAgZW5hYmxlVHlwZXdyaXRlcj17aW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZS5zcGVha2VyID09PSAnYWdlbnQnfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVJbWFnZVVybD17aW5kZXggPT09IDAgPyB3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17aW5kZXggPT09IDAgPyAod2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgcG9zc2libGVRdWVyaWVzPXtpbmRleCA9PT0gMCA/IHBvc3NpYmxlUXVlcmllcyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pfVxuICAgICAgICAgIHtpc0FnZW50VHlwaW5nICYmIGN1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLCBtYXhXaWR0aDogJzgwJScgfX0+XG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZm9udFNpemU6ICcxNHB4JywgY29sb3I6ICcjMDAwMDAwJywgZm9udFdlaWdodDogNjAwLCBtYXJnaW5Cb3R0b206IDQgfX0+QWdlbnQ8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogMCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleH0tJHtjdXJyZW50VGhpbmtpbmdQYXJ0cy5qb2luKCd8Jyl9YH1cbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogJ2dhLXRoaW5rLWNoYW5nZSAyMjBtcyBlYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybSwgb3BhY2l0eScsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzZiNzI4MCcsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTNweCcsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHtjdXJyZW50VGhpbmtpbmdQYXJ0c1tjdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXhdIHx8IGN1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRzLmxlbmd0aCAtIDFdfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG4gICAgICAgICAgPGRpdiByZWY9e21lc3NhZ2VzRW5kUmVmfSAvPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICB7cG9zc2libGVRdWVyaWVzLmxlbmd0aCA+IDAgJiYgIWhhc1VzZXJNZXNzYWdlcyAmJiAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICB7cG9zc2libGVRdWVyaWVzLm1hcCgocXVlcnksIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBzdHlsZT17cXVlcnlCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVRdWVyeUNsaWNrKHF1ZXJ5KX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3F1ZXJ5fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICBcbiAgICAgICAge2F0dGFjaG1lbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzAgMTZweCcsIG1hcmdpbkJvdHRvbTogJzhweCcsIGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnOHB4JywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGZpbGUsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxBdHRhY2htZW50UHJldmlldyBcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fSBcbiAgICAgICAgICAgICAgICBmaWxlPXtmaWxlfSBcbiAgICAgICAgICAgICAgICBvblJlbW92ZT17KCkgPT4gaGFuZGxlUmVtb3ZlQXR0YWNobWVudChmaWxlLm5hbWUpfVxuICAgICAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nRmlsZXMuaGFzKGZpbGUubmFtZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkID8gKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBzdHlsZT17ey4uLnNlbmRCdXR0b25TdHlsZSwgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnNDhweCcsIGJvcmRlclJhZGl1czogJzE2cHgnfX1cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3RhcnRDb252ZXJzYXRpb259XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFN0YXJ0IENvbnZlcnNhdGlvblxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRXcmFwcGVyU3R5bGV9PlxuICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgICBzdHlsZT17YXR0YWNoQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgdGl0bGU9XCJBdHRhY2hcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBzaXplPXsyMn0gY29sb3I9XCIjNzU3NTc1XCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICByZWY9e3RleHRBcmVhUmVmfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt0ZXh0QXJlYVN0eWxlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdhLXRleHRhcmVhLW5vc2JcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpbnB1dFZhbHVlLnRyaW0oKSAhPT0gJycgfHwgYXR0YWNobWVudHMubGVuZ3RoID4gMCkgJiYgY29ubmVjdGlvblN0YXRlID09PSAnY29ubmVjdGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY29udmVyc2F0aW9uSWQgfHwgaXNGaW5hbGl6ZWR9XG4gICAgICAgICAgICAgICAgcm93cz17MX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cmlnaHRBY3Rpb25Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge2lucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8Vm9pY2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICBvblRyYW5zY3JpcHRpb249eyh0ZXh0OiBzdHJpbmcpID0+IHNldElucHV0VmFsdWUodGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3I9e2hhbmRsZVZvaWNlRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e2Jhc2VVcmx9XG4gICAgICAgICAgICAgICAgICAgIGFwaUtleT17YXBpS2V5fVxuICAgICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCIgXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzZW5kQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXsoaW5wdXRWYWx1ZS50cmltKCkgPT09ICcnICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkgfHwgY29ubmVjdGlvblN0YXRlICE9PSAnY29ubmVjdGVkJ31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbmQgc2l6ZT17MTh9IGNvbG9yPVwiI2ZmZmZmZlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHN0eWxlPXtjb25maXJtT3ZlcmxheVN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybURpYWxvZ1N0eWxlfT5cbiAgICAgICAgICA8aDMgc3R5bGU9e3tmb250RmFtaWx5LCBtYXJnaW5Ub3A6IDB9fT5SZXNldCBDb252ZXJzYXRpb248L2gzPlxuICAgICAgICAgIDxwIHN0eWxlPXt7Zm9udEZhbWlseSwgZm9udFNpemV9fT5UaGlzIHdpbGwgY2xlYXIgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIGhpc3RvcnkgYW5kIHN0YXJ0IGEgbmV3IGNvbnZlcnNhdGlvbi4gQXJlIHlvdSBzdXJlPzwvcD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtQnV0dG9uc1N0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3suLi5jb25maXJtQnV0dG9uU3R5bGUoZmFsc2UpLCBjb2xvcjogdGV4dENvbG9yfX0gb25DbGljaz17aGFuZGxlQ2FuY2VsUmVzZXR9PkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17Y29uZmlybUJ1dHRvblN0eWxlKHRydWUpfSBvbkNsaWNrPXtoYW5kbGVDb25maXJtUmVzZXR9PlJlc2V0PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgaWYgKG1vZGUgPT09ICdmbG9hdGluZycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHN0eWxlPXt0b2dnbGVCdXR0b25TdHlsZX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc0Zsb2F0aW5nT3BlbihwcmV2ID0+ICFwcmV2KX1cbiAgICAgICAgICB0aXRsZT17aXNGbG9hdGluZ09wZW4gPyBcIkNsb3NlIENoYXRcIiA6IFwiT3BlbiBDaGF0XCJ9XG4gICAgICAgID5cbiAgICAgICAgICB7aXNGbG9hdGluZ09wZW4gPyA8WEljb24gc2l6ZT17MjR9IC8+IDogPE1lc3NhZ2VTcXVhcmVNb3JlIHNpemU9ezI0fSAvPn1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIFxuICAgICAgICB7aXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAge3JlbmRlckNoYXRDb21wb25lbnQoKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gcmVuZGVyQ2hhdENvbXBvbmVudCgpO1xufTtcbiJdfQ==
|
|
739
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR2VuQWdlbnRDaGF0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvR2VuQWdlbnRDaGF0LnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDakcsT0FBTyxRQUFRLE1BQU0seUJBQXlCLENBQUM7QUFFL0MsTUFBTSxDQUFDLElBQU0sWUFBWSxHQUFnQyxVQUFDLEVBYXpEO1FBWkMsT0FBTyxhQUFBLEVBQ1AsTUFBTSxZQUFBLEVBQ04sTUFBTSxZQUFBLEVBQ04sUUFBUSxjQUFBLEVBQ1IsT0FBTyxhQUFBLEVBQ1AsVUFBVSxnQkFBQSxFQUNWLFVBQVUsZ0JBQUEsRUFDVixLQUFLLFdBQUEsRUFDTCxtQkFBeUIsRUFBekIsV0FBVyxtQkFBRyxXQUFXLEtBQUEsRUFDekIsbUJBQThCLEVBQTlCLFdBQVcsbUJBQUcsZ0JBQWdCLEtBQUEsRUFDOUIsWUFBaUIsRUFBakIsSUFBSSxtQkFBRyxVQUFVLEtBQUEsRUFDakIsc0JBQW1CLEVBQW5CLGNBQWMsbUJBQUcsRUFBRSxLQUFBO0lBRWIsSUFBQSxL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dCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBDaGF0TWVzc2FnZUNvbXBvbmVudCwgQXR0YWNobWVudFByZXZpZXcgfSBmcm9tICcuL0NoYXRNZXNzYWdlJztcbmltcG9ydCB7IHVzZUNoYXQgfSBmcm9tICcuLi9ob29rcy91c2VDaGF0JztcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBHZW5BZ2VudENoYXRQcm9wcyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFZvaWNlSW5wdXQgfSBmcm9tICcuL1ZvaWNlSW5wdXQnO1xuaW1wb3J0IHsgQXVkaW9TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXVkaW9TZXJ2aWNlJztcbmltcG9ydCB7IFNlbmQsIFBhcGVyY2xpcCwgTW9yZVZlcnRpY2FsLCBSZWZyZXNoQ3csIFhJY29uLCBNZXNzYWdlU3F1YXJlTW9yZX0gZnJvbSAnbHVjaWRlLXJlYWN0JztcbmltcG9ydCBjaGF0TG9nbyBmcm9tICcuLi9hc3NldHMvY2hhdC1sb2dvLnBuZyc7XG5cbmV4cG9ydCBjb25zdCBHZW5BZ2VudENoYXQ6IFJlYWN0LkZDPEdlbkFnZW50Q2hhdFByb3BzPiA9ICh7XG4gIGJhc2VVcmwsXG4gIGFwaUtleSxcbiAgdGVuYW50LFxuICBtZXRhZGF0YSxcbiAgb25FcnJvcixcbiAgb25UYWtlb3ZlcixcbiAgb25GaW5hbGl6ZSxcbiAgdGhlbWUsXG4gIGhlYWRlclRpdGxlID0gJ0dlbmFzc2lzdCcsXG4gIHBsYWNlaG9sZGVyID0gJ0FzayBhIHF1ZXN0aW9uJyxcbiAgbW9kZSA9ICdlbWJlZGRlZCcsXG4gIGZsb2F0aW5nQ29uZmlnID0ge31cbn0pOiBSZWFjdC5SZWFjdEVsZW1lbnQgPT4ge1xuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzaG93UmVzZXRDb25maXJtLCBzZXRTaG93UmVzZXRDb25maXJtXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3Nob3dNZW51LCBzZXRTaG93TWVudV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc1BsYXlpbmdBdWRpbywgc2V0SXNQbGF5aW5nQXVkaW9dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXNGbG9hdGluZ09wZW4sIHNldElzRmxvYXRpbmdPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2F0dGFjaG1lbnRzLCBzZXRBdHRhY2htZW50c10gPSB1c2VTdGF0ZTxGaWxlW10+KFtdKTtcbiAgY29uc3QgW3VwbG9hZGluZ0ZpbGVzLCBzZXRVcGxvYWRpbmdGaWxlc10gPSB1c2VTdGF0ZTxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcbiAgY29uc3QgbWVudVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcbiAgY29uc3QgdGV4dEFyZWFSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGhlYWRlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IFtoZWFkZXJIZWlnaHQsIHNldEhlYWRlckhlaWdodF0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3Nob3dCYWNrbGlnaHQsIHNldFNob3dCYWNrbGlnaHRdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIC8vIGRlZmF1bHQgdGhpbmtpbmcgbWVzc2FnZXMgaWYgbm9uZSBwcm92aWRlZCBieSB3b3JrZmxvd1xuICBjb25zdCBERUZBVUxUX1RISU5LSU5HX01FU1NBR0VTID0gW1xuICAgIFwiVGhpbmtpbmfigKZcIixcbiAgICBcIkFuYWx5emluZyB5b3VyIHF1ZXN0aW9u4oCmXCIsXG4gICAgXCJTZWFyY2hpbmcga25vd2xlZGdl4oCmXCIsXG4gICAgXCJQdWxsaW5nIHJlbGV2YW50IGluZm/igKZcIixcbiAgICBcIkRyYWZ0aW5nIHRoZSBhbnN3ZXLigKZcIixcbiAgICBcIkRvdWJsZeKAkWNoZWNraW5nIGRldGFpbHPigKZcIixcbiAgICBcIlR5aW5nIGl0IHRvZ2V0aGVy4oCmXCIsXG4gICAgXCJBbG1vc3QgdGhlcmXigKZcIixcbiAgXTtcbiAgY29uc3QgW2N1cnJlbnRUaGlua2luZ1BhcnRzLCBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0c10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oW10pO1xuICBjb25zdCBbY3VycmVudFRoaW5raW5nUGFydEluZGV4LCBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXhdID0gdXNlU3RhdGUoMCk7XG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBpc0xvYWRpbmcsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgdXBsb2FkRmlsZSxcbiAgICByZXNldENvbnZlcnNhdGlvbixcbiAgICBzdGFydENvbnZlcnNhdGlvbixcbiAgICBjb25uZWN0aW9uU3RhdGUsXG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgcG9zc2libGVRdWVyaWVzLFxuICAgIGlzRmluYWxpemVkLFxuICAgIGlzQWdlbnRUeXBpbmcsXG4gICAgYWRkRmVlZGJhY2ssXG4gICAgd2VsY29tZVRpdGxlLFxuICAgIHdlbGNvbWVJbWFnZVVybCxcbiAgICB3ZWxjb21lTWVzc2FnZSxcbiAgICB0aGlua2luZ1BocmFzZXMsXG4gICAgdGhpbmtpbmdEZWxheU1zLFxuICB9ID0gdXNlQ2hhdCh7XG4gICAgYmFzZVVybCxcbiAgICBhcGlLZXksXG4gICAgdGVuYW50LFxuICAgIG1ldGFkYXRhLFxuICAgIG9uRXJyb3IsXG4gICAgb25UYWtlb3ZlcixcbiAgICBvbkZpbmFsaXplXG4gIH0pO1xuICBjb25zdCBtZXNzYWdlc0VuZFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGF1ZGlvU2VydmljZSA9IHVzZVJlZjxBdWRpb1NlcnZpY2UgfCBudWxsPihudWxsKTtcblxuICBjb25zdCBoYXNVc2VyTWVzc2FnZXMgPSBtZXNzYWdlcy5zb21lKG1lc3NhZ2UgPT4gbWVzc2FnZS5zcGVha2VyID09PSAnY3VzdG9tZXInKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGF1ZGlvU2VydmljZS5jdXJyZW50ID0gbmV3IEF1ZGlvU2VydmljZSh7IGJhc2VVcmwsIGFwaUtleSB9KTtcbiAgfSwgW2Jhc2VVcmwsIGFwaUtleV0pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG1lc3NhZ2VzRW5kUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lc3NhZ2VzRW5kUmVmLmN1cnJlbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgfVxuICB9LCBbbWVzc2FnZXNdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZUhlYWRlckhlaWdodCA9ICgpID0+IHtcbiAgICAgIHNldEhlYWRlckhlaWdodChoZWFkZXJSZWYuY3VycmVudD8ub2Zmc2V0SGVpZ2h0IHx8IDApO1xuICAgIH07XG4gICAgdXBkYXRlSGVhZGVySGVpZ2h0KCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZUhlYWRlckhlaWdodCk7XG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB1cGRhdGVIZWFkZXJIZWlnaHQpO1xuICB9LCBbXSk7XG5cbiAgLy8gU21vb3RobHkgc2hvdy9oaWRlIHRoZSBiYWNrbGlnaHQgd2hpbGUgdGhlIGFnZW50IGlzIHR5cGluZ1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc0FnZW50VHlwaW5nKSB7XG4gICAgICBzZXRTaG93QmFja2xpZ2h0KHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0ID0gc2V0VGltZW91dCgoKSA9PiBzZXRTaG93QmFja2xpZ2h0KGZhbHNlKSwgNDIwKTsgLy8gYWxsb3cgZmFkZS1vdXRcbiAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KHQpO1xuICB9LCBbaXNBZ2VudFR5cGluZ10pO1xuXG4gIC8vIFNob3cgXCJ0aGlua2luZ1wiIHBocmFzZXMgd2hpbGUgYWdlbnQgaXMgdHlwaW5nXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0FnZW50VHlwaW5nKSB7XG4gICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0cyhbXSk7XG4gICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmFuZG9tbHkgc2VsZWN0IGEgcGhyYXNlIGZyb20gdGhlIGxpc3RcbiAgICBjb25zdCBsaXN0ID0gKHRoaW5raW5nUGhyYXNlcyAmJiB0aGlua2luZ1BocmFzZXMubGVuZ3RoID4gMCkgPyB0aGlua2luZ1BocmFzZXMgOiBERUZBVUxUX1RISU5LSU5HX01FU1NBR0VTO1xuICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbGlzdC5sZW5ndGgpO1xuICAgIGNvbnN0IHNlbGVjdGVkUGhyYXNlID0gbGlzdFtyYW5kb21JbmRleF07XG5cbiAgICAvLyBTcGxpdCBieSB8IHRvIGdldCBwYXJ0cywgb3IgdXNlIHRoZSBwaHJhc2UgYXMgYSBzaW5nbGUgcGFydCBpZiBubyB8IGZvdW5kXG4gICAgY29uc3QgcGFydHMgPSBzZWxlY3RlZFBocmFzZS5pbmNsdWRlcygnfCcpIFxuICAgICAgPyBzZWxlY3RlZFBocmFzZS5zcGxpdCgnfCcpLm1hcChwYXJ0ID0+IHBhcnQudHJpbSgpKS5maWx0ZXIocGFydCA9PiBwYXJ0Lmxlbmd0aCA+IDApXG4gICAgICA6IFtzZWxlY3RlZFBocmFzZS50cmltKCldO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB3aXRoIGZpcnN0IHBhcnRcbiAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0cyhwYXJ0cyk7XG4gICAgc2V0Q3VycmVudFRoaW5raW5nUGFydEluZGV4KDApO1xuXG4gICAgLy8gSWYgdGhlcmUncyBvbmx5IG9uZSBwYXJ0LCBubyBuZWVkIHRvIHByb2dyZXNzXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8PSAxKSByZXR1cm47XG5cbiAgICAvLyBQcm9ncmVzcyB0aHJvdWdoIHBhcnRzIHdpdGggZGVsYXksIGJ1dCBzdG9wIGF0IHRoZSBsYXN0IG9uZVxuICAgIGNvbnN0IHJvdERlbGF5ID0gTWF0aC5tYXgoMjUwLCB0aGlua2luZ0RlbGF5TXMgfHwgMTAwMCk7XG4gICAgY29uc3QgdGltZW91dElkczogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD5bXSA9IFtdO1xuXG4gICAgLy8gU2V0IHVwIHRpbWVvdXRzIGZvciBlYWNoIHBhcnQgdHJhbnNpdGlvblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBzZXRDdXJyZW50VGhpbmtpbmdQYXJ0SW5kZXgoaSk7XG4gICAgICB9LCByb3REZWxheSAqIGkpO1xuICAgICAgdGltZW91dElkcy5wdXNoKHRpbWVvdXRJZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRpbWVvdXRJZHMuZm9yRWFjaChpZCA9PiBjbGVhclRpbWVvdXQoaWQpKTtcbiAgICB9O1xuICB9LCBbaXNBZ2VudFR5cGluZywgdGhpbmtpbmdQaHJhc2VzLCB0aGlua2luZ0RlbGF5TXNdKTtcblxuICBjb25zdCBzdWJtaXRNZXNzYWdlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpbnB1dFZhbHVlLnRyaW0oKSA9PT0gJycgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgdGV4dFRvU2VuZCA9IGlucHV0VmFsdWU7XG4gICAgY29uc3QgZmlsZXNUb1VwbG9hZCA9IFsuLi5hdHRhY2htZW50c107XG4gICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBzZW5kTWVzc2FnZSh0ZXh0VG9TZW5kLCBmaWxlc1RvVXBsb2FkKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2VuZGluZyBtZXNzYWdlOicsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gYXN5bmMgKGU6IFJlYWN0LkZvcm1FdmVudCkgPT4ge1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBhd2FpdCBzdWJtaXRNZXNzYWdlKCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRmlsZUNoYW5nZSA9IGFzeW5jIChlOiBSZWFjdC5DaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLnRhcmdldC5maWxlcykge1xuICAgICAgY29uc3QgbmV3RmlsZXMgPSBBcnJheS5mcm9tKGUudGFyZ2V0LmZpbGVzKTtcbiAgICAgIHNldEF0dGFjaG1lbnRzKHByZXYgPT4gWy4uLnByZXYsIC4uLm5ld0ZpbGVzXSk7XG5cbiAgICAgIGNvbnN0IG5ld1VwbG9hZGluZ0ZpbGVzID0gbmV3IFNldCh1cGxvYWRpbmdGaWxlcyk7XG4gICAgICBuZXdGaWxlcy5mb3JFYWNoKGZpbGUgPT4gbmV3VXBsb2FkaW5nRmlsZXMuYWRkKGZpbGUubmFtZSkpO1xuICAgICAgc2V0VXBsb2FkaW5nRmlsZXMobmV3VXBsb2FkaW5nRmlsZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChuZXdGaWxlcy5tYXAoZmlsZSA9PiB1cGxvYWRGaWxlKGZpbGUpKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGZpbGUgdXBsb2FkOlwiLCBlcnJvcilcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN0IGZpbmFsVXBsb2FkaW5nRmlsZXMgPSBuZXcgU2V0KHVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgICAgbmV3RmlsZXMuZm9yRWFjaChmaWxlID0+IGZpbmFsVXBsb2FkaW5nRmlsZXMuZGVsZXRlKGZpbGUubmFtZSkpO1xuICAgICAgICBzZXRVcGxvYWRpbmdGaWxlcyhmaW5hbFVwbG9hZGluZ0ZpbGVzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVtb3ZlQXR0YWNobWVudCA9IChmaWxlTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgc2V0QXR0YWNobWVudHMocHJldiA9PiBwcmV2LmZpbHRlcihmID0+IGYubmFtZSAhPT0gZmlsZU5hbWUpKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVWb2ljZUVycm9yID0gKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1ZvaWNlIGlucHV0IGVycm9yOicsIGVycm9yKTtcbiAgICBpZiAob25FcnJvcikge1xuICAgICAgb25FcnJvcihlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBsYXlSZXNwb25zZUF1ZGlvID0gYXN5bmMgKHRleHQ6IHN0cmluZykgPT4ge1xuICAgIGlmICghYXVkaW9TZXJ2aWNlLmN1cnJlbnQgfHwgaXNQbGF5aW5nQXVkaW8pIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBzZXRJc1BsYXlpbmdBdWRpbyh0cnVlKTtcbiAgICAgIGNvbnN0IGF1ZGlvQmxvYiA9IGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnRleHRUb1NwZWVjaCh0ZXh0KTtcbiAgICAgIGF3YWl0IGF1ZGlvU2VydmljZS5jdXJyZW50LnBsYXlBdWRpbyhhdWRpb0Jsb2IpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwbGF5aW5nIGF1ZGlvOicsIGVycm9yKTtcbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIG9uRXJyb3IoZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1BsYXlpbmdBdWRpbyhmYWxzZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVF1ZXJ5Q2xpY2sgPSBhc3luYyAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc0xvYWRpbmcpIHJldHVybjtcbiAgICBcbiAgICB0cnkge1xuICAgICAgYXdhaXQgc2VuZE1lc3NhZ2UocXVlcnkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZW5kaW5nIHF1aWNrIHF1ZXJ5OicsIGVycm9yKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU3RhcnRDb252ZXJzYXRpb24gPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzTG9hZGluZykgcmV0dXJuO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0YXJ0Q29udmVyc2F0aW9uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIGNvbnZlcnNhdGlvbjonLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9ICgpID0+IHtcbiAgICBzZXRTaG93TWVudShwcmV2ID0+ICFwcmV2KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZXNldENsaWNrID0gKCkgPT4ge1xuICAgIHNldFNob3dNZW51KGZhbHNlKTtcbiAgICBzZXRTaG93UmVzZXRDb25maXJtKHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1SZXNldCA9IGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCByZXNldENvbnZlcnNhdGlvbigpO1xuICAgIHNldFNob3dSZXNldENvbmZpcm0oZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNhbmNlbFJlc2V0ID0gKCkgPT4ge1xuICAgIHNldFNob3dSZXNldENvbmZpcm0oZmFsc2UpO1xuICB9O1xuXG4gIGNvbnN0IHByaW1hcnlDb2xvciA9IHRoZW1lPy5wcmltYXJ5Q29sb3IgfHwgJyMyOTYyRkYnO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSB0aGVtZT8uYmFja2dyb3VuZENvbG9yIHx8ICcjZmZmZmZmJztcbiAgY29uc3QgdGV4dENvbG9yID0gdGhlbWU/LnRleHRDb2xvciB8fCAnIzAwMDAwMCc7XG4gIGNvbnN0IGZvbnRGYW1pbHkgPSB0aGVtZT8uZm9udEZhbWlseSB8fCAnUm9ib3RvLCBBcmlhbCwgc2Fucy1zZXJpZic7XG4gIGNvbnN0IGZvbnRTaXplID0gdGhlbWU/LmZvbnRTaXplIHx8ICcxNHB4JztcbiAgY29uc3QgZm9udFNpemVOdW1iZXIgPSB0eXBlb2YgZm9udFNpemUgPT09ICdzdHJpbmcnID8gcGFyc2VJbnQoZm9udFNpemUsIDEwKSA6ICh0eXBlb2YgZm9udFNpemUgPT09ICdudW1iZXInID8gZm9udFNpemUgOiAxNCk7XG4gIGNvbnN0IGxpbmVIZWlnaHRQeCA9IE1hdGgucm91bmQoZm9udFNpemVOdW1iZXIgKiAxLjUpO1xuICBjb25zdCB0ZXh0QXJlYU1heEhlaWdodCA9IGxpbmVIZWlnaHRQeCAqIDM7IC8vIHVwIHRvIDMgbGluZXNcblxuICBjb25zdCBwb3NpdGlvbiA9IGZsb2F0aW5nQ29uZmlnLnBvc2l0aW9uIHx8ICdib3R0b20tcmlnaHQnO1xuICBjb25zdCBvZmZzZXQgPSBmbG9hdGluZ0NvbmZpZy5vZmZzZXQgfHwgeyB4OiAyMCwgeTogMjAgfTtcbiAgY29uc3Qgb2Zmc2V0WCA9IG9mZnNldC54IHx8IDIwO1xuICBjb25zdCBvZmZzZXRZID0gb2Zmc2V0LnkgfHwgMjA7XG5cbiAgY29uc3QgY29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGhlaWdodDogJzEwMCUnLFxuICAgIG1heEhlaWdodDogJzYwMHB4JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG1heFdpZHRoOiAnNDAwcHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgICBib3JkZXJSYWRpdXM6ICczMnB4JyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnLFxuICAgIGZvbnRGYW1pbHksXG4gICAgYm94U2hhZG93OiBcIjAgNHB4IDIwcHggcmdiYSgwLCAwLCAwLCAwLjIpXCIsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgfTtcblxuICBjb25zdCBoZWFkZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBwYWRkaW5nOiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnLFxuICAgIGNvbG9yOiAnIzExMTExMScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB9O1xuXG4gIGNvbnN0IGxvZ29Db250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnMTBweCcsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAxLFxuICB9O1xuXG4gIGNvbnN0IGxvZ29TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICB3aWR0aDogJzI4cHgnLFxuICAgIGhlaWdodDogJzI4cHgnLFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclRpdGxlQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICB9O1xuXG4gIGNvbnN0IGhlYWRlclRpdGxlU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgZm9udFNpemU6ICcxNnB4JyxcbiAgICBmb250V2VpZ2h0OiAnYm9sZCcsXG4gICAgbWFyZ2luOiAwLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgaGVhZGVyU3VidGl0bGVTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgIG1hcmdpbjogMCxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IG1lbnVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgY29sb3I6ICcjMTExMTExJyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBib3JkZXJSYWRpdXM6ICc1MCUnLFxuICAgIHdpZHRoOiAnMzJweCcsXG4gICAgaGVpZ2h0OiAnMzJweCcsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBvdXRsaW5lOiAnbm9uZScsXG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgekluZGV4OiAxLFxuICB9O1xuXG4gIGNvbnN0IG1lbnVQb3B1cFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogJzUwcHgnLFxuICAgIHJpZ2h0OiAnMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICBib3hTaGFkb3c6ICcwIDJweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKScsXG4gICAgekluZGV4OiA1LFxuICAgIG1pbldpZHRoOiAnMTUwcHgnLFxuICAgIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgfTtcblxuICBjb25zdCBtZW51SXRlbVN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIHBhZGRpbmc6ICcxMHB4IDE1cHgnLFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgZm9udFNpemUsXG4gICAgZm9udEZhbWlseSxcbiAgICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2YwZjBmMCcsXG4gIH07XG5cbiAgY29uc3QgY2hhdENvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZsZXg6IDEsXG4gICAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gICAgcGFkZGluZzogJzE1cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gIH07XG5cbiAgY29uc3QgaW5wdXRDb250YWluZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgcGFkZGluZzogJzEycHggMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgZ2FwOiAnOHB4JyxcbiAgfTtcblxuICBjb25zdCBpbnB1dFdyYXBwZXJTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleDogMSxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZmZmZmZmJyxcbiAgICBib3JkZXJSYWRpdXM6ICcyNHB4JyxcbiAgICBib3JkZXI6ICcxcHggc29saWQgI2U1ZTdlYicsXG4gICAgcGFkZGluZzogJzAgMTJweCcsXG4gICAgbWluSGVpZ2h0OiAnNTBweCcsXG4gICAgYm94U2hhZG93OiAnMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wNiknLFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gIH07XG5cbiAgY29uc3QgdGV4dEFyZWFTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBmbGV4OiAxLFxuICAgIGJvcmRlcjogJ25vbmUnLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgIGZvbnRTaXplLFxuICAgIGZvbnRGYW1pbHksXG4gICAgcGFkZGluZzogJzEwcHgnLFxuICAgIHBhZGRpbmdSaWdodDogJzQ2cHgnLFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgcmVzaXplOiAnbm9uZScsXG4gICAgbGluZUhlaWdodDogYCR7bGluZUhlaWdodFB4fXB4YCxcbiAgICBtYXhIZWlnaHQ6IGAke3RleHRBcmVhTWF4SGVpZ2h0fXB4YCxcbiAgICBvdmVyZmxvd1k6ICdoaWRkZW4nLFxuICB9O1xuXG4gIGNvbnN0IGF0dGFjaEJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIG91dGxpbmU6ICdub25lJyxcbiAgICBjb2xvcjogJyM3NTc1NzUnLFxuICAgIHBhZGRpbmc6IDAsXG4gIH07XG5cbiAgY29uc3Qgc2VuZEJ1dHRvblN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGJhY2tncm91bmRDb2xvcjogcHJpbWFyeUNvbG9yLFxuICAgIGNvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICB3aWR0aDogJzM2cHgnLFxuICAgIGhlaWdodDogJzM2cHgnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgb3V0bGluZTogJ25vbmUnLFxuICAgIGZsZXhTaHJpbms6IDAsXG4gICAgYm94U2hhZG93OiAnMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCknLFxuICB9O1xuXG4gIGNvbnN0IHJpZ2h0QWN0aW9uQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgcmlnaHQ6ICc0cHgnLFxuICAgIHRvcDogJzUwJScsXG4gICAgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtNTAlKScsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgfTtcblxuICBjb25zdCBhdXRvUmVzaXplVGV4dEFyZWEgPSAoKSA9PiB7XG4gICAgY29uc3QgZWwgPSB0ZXh0QXJlYVJlZi5jdXJyZW50O1xuICAgIGlmICghZWwpIHJldHVybjtcbiAgICBlbC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgY29uc3QgbmV3SGVpZ2h0ID0gTWF0aC5taW4oZWwuc2Nyb2xsSGVpZ2h0LCB0ZXh0QXJlYU1heEhlaWdodCk7XG4gICAgZWwuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YDtcbiAgICBlbC5zdHlsZS5vdmVyZmxvd1kgPSBlbC5zY3JvbGxIZWlnaHQgPiB0ZXh0QXJlYU1heEhlaWdodCA/ICdhdXRvJyA6ICdoaWRkZW4nO1xuICB9O1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYXV0b1Jlc2l6ZVRleHRBcmVhKCk7XG4gIH0sIFtpbnB1dFZhbHVlLCBmb250U2l6ZU51bWJlcl0pO1xuXG4gIGNvbnN0IHBvc3NpYmxlUXVlcmllc0NvbnRhaW5lclN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBnYXA6ICc4cHgnLFxuICAgIHBhZGRpbmc6ICcwJyxcbiAgICBwYWRkaW5nTGVmdDogJzI4cHgnLFxuICAgIHBhZGRpbmdSaWdodDogJzI4cHgnLFxuICAgIG1hcmdpblRvcDogJzVweCcsXG4gICAgbWFyZ2luQm90dG9tOiAnMTVweCcsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICBmb250RmFtaWx5LFxuICB9O1xuXG4gIGNvbnN0IHF1ZXJ5QnV0dG9uU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgcGFkZGluZzogJzEycHggMTVweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZT8uc2Vjb25kYXJ5Q29sb3IgfHwgJyNmNWY1ZjUnLFxuICAgIGNvbG9yOiB0ZXh0Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNnB4JyxcbiAgICBmb250U2l6ZSxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICBmb250V2VpZ2h0OiAnbm9ybWFsJyxcbiAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG1heFdpZHRoOiAnMjQwcHgnLFxuICAgIGZvbnRGYW1pbHksXG4gIH07XG5cbiAgY29uc3QgY29uZmlybU92ZXJsYXlTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBkaXNwbGF5OiBzaG93UmVzZXRDb25maXJtID8gJ2ZsZXgnIDogJ25vbmUnLFxuICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgIHRvcDogMCxcbiAgICBsZWZ0OiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuNSknLFxuICAgIHpJbmRleDogMTAsXG4gICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICB9O1xuXG4gIGNvbnN0IGNvbmZpcm1EaWFsb2dTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvcixcbiAgICBwYWRkaW5nOiAnMjBweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnOHB4JyxcbiAgICBtYXhXaWR0aDogJzMwMHB4JyxcbiAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgIGZvbnRGYW1pbHksXG4gICAgY29sb3I6IHRleHRDb2xvcixcbiAgfTtcblxuICBjb25zdCBjb25maXJtQnV0dG9uc1N0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgbWFyZ2luVG9wOiAnMTVweCcsXG4gICAgZ2FwOiAnMTBweCcsXG4gIH07XG5cbiAgY29uc3QgY29uZmlybUJ1dHRvblN0eWxlID0gKGlzQ29uZmlybTogYm9vbGVhbik6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4gKHtcbiAgICBwYWRkaW5nOiAnOHB4IDE2cHgnLFxuICAgIGJhY2tncm91bmRDb2xvcjogaXNDb25maXJtID8gJyNGNDQzMzYnIDogJyNlMGUwZTAnLFxuICAgIGNvbG9yOiBpc0NvbmZpcm0gPyAnI2ZmZmZmZicgOiB0ZXh0Q29sb3IsXG4gICAgYm9yZGVyOiAnbm9uZScsXG4gICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICBmb250RmFtaWx5LFxuICAgIGZvbnRTaXplLFxuICB9KTtcblxuICBjb25zdCBjb250ZW50Q2FyZFN0eWxlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzID0ge1xuICAgIGZsZXg6IDEsXG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgIGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAyNCxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogMjQsXG4gICAgYm94U2hhZG93OiAnMCAtMnB4IDZweCByZ2JhKDAsMCwwLDAuMDMpJyxcbiAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICB6SW5kZXg6IDIsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nXG4gIH07XG5cbiAgLy8gRmxvYXRpbmcgbW9kZSBzdHlsZXNcbiAgY29uc3QgZ2V0UG9zaXRpb25TdHlsZXMgPSAoKTogUmVhY3QuQ1NTUHJvcGVydGllcyA9PiB7XG4gICAgY29uc3QgYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgekluZGV4OiAxMDAwLFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCBib3R0b206IG9mZnNldFksIHJpZ2h0OiBvZmZzZXRYIH07XG4gICAgICBjYXNlICdib3R0b20tbGVmdCc6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgbGVmdDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAndG9wLXJpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHsgLi4uYmFzZSwgdG9wOiBvZmZzZXRZLCByaWdodDogb2Zmc2V0WCB9O1xuICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICByZXR1cm4geyAuLi5iYXNlLCB0b3A6IG9mZnNldFksIGxlZnQ6IG9mZnNldFggfTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB7IC4uLmJhc2UsIGJvdHRvbTogb2Zmc2V0WSwgcmlnaHQ6IG9mZnNldFggfTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0Q2hhdFBvc2l0aW9uU3R5bGVzID0gKCk6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPT4ge1xuICAgIGNvbnN0IGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgIHpJbmRleDogOTk5LFxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHBvc2l0aW9uKSB7XG4gICAgICBjYXNlICdib3R0b20tcmlnaHQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICBib3R0b206IG9mZnNldFkgKyA4MCxcbiAgICAgICAgICByaWdodDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ2JvdHRvbS1sZWZ0JzpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZICsgODAsXG4gICAgICAgICAgbGVmdDogb2Zmc2V0WCBcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ3RvcC1yaWdodCc6XG4gICAgICAgIHJldHVybiB7IFxuICAgICAgICAgIC4uLmJhc2UsIFxuICAgICAgICAgIHRvcDogb2Zmc2V0WSArIDgwLFxuICAgICAgICAgIHJpZ2h0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgICAgY2FzZSAndG9wLWxlZnQnOlxuICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAuLi5iYXNlLCBcbiAgICAgICAgICB0b3A6IG9mZnNldFkgKyA4MCxcbiAgICAgICAgICBsZWZ0OiBvZmZzZXRYIFxuICAgICAgICB9O1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHsgXG4gICAgICAgICAgLi4uYmFzZSwgXG4gICAgICAgICAgYm90dG9tOiBvZmZzZXRZICsgODAsXG4gICAgICAgICAgcmlnaHQ6IG9mZnNldFggXG4gICAgICAgIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFJlc3BvbnNpdmVEaW1lbnNpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjcmVlbldpZHRoID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuaW5uZXJXaWR0aCA6IDEwMjQ7XG4gICAgaWYgKHNjcmVlbldpZHRoIDw9IDQ4MCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICdjYWxjKDEwMHZ3IC0gNDBweCknLCBoZWlnaHQ6ICc0NTBweCcgfTtcbiAgICB9IGVsc2UgaWYgKHNjcmVlbldpZHRoIDw9IDc2OCkge1xuICAgICAgcmV0dXJuIHsgd2lkdGg6ICczNTBweCcsIGhlaWdodDogJzUwMHB4JyB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4geyB3aWR0aDogJzM4MHB4JywgaGVpZ2h0OiAnNjAwcHgnIH07XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsb2F0aW5nQ29udGFpbmVyU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7XG4gICAgLi4uZ2V0Q2hhdFBvc2l0aW9uU3R5bGVzKCksXG4gICAgLi4uZ2V0UmVzcG9uc2l2ZURpbWVuc2lvbnMoKSxcbiAgfTtcblxuICBjb25zdCB0b2dnbGVCdXR0b25TdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAuLi5nZXRQb3NpdGlvblN0eWxlcygpLFxuICAgIHdpZHRoOiAnNjBweCcsXG4gICAgaGVpZ2h0OiAnNjBweCcsXG4gICAgYm9yZGVyUmFkaXVzOiAnNTAlJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHByaW1hcnlDb2xvcixcbiAgICBib3JkZXI6ICdub25lJyxcbiAgICBjb2xvcjogJ3doaXRlJyxcbiAgICBmb250U2l6ZTogJzI0cHgnLFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIGJveFNoYWRvdzogJzAgNHB4IDEycHggcmdiYSg0MSwgOTgsIDI1NSwgMC4zKScsXG4gICAgdHJhbnNpdGlvbjogJ2FsbCAwLjNzIGVhc2UnLFxuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgekluZGV4OiAxMDAxLFxuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNoYXRDb21wb25lbnQgPSAoKSA9PiAoXG4gICAgPGRpdiBzdHlsZT17Y29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LXJvb3Q9XCJ0cnVlXCI+XG4gICAgICA8c3R5bGU+e2BcbiAgICAgICAgQGtleWZyYW1lcyBibGluayB7IDAlIHsgb3BhY2l0eTogMC4yOyB9IDIwJSB7IG9wYWNpdHk6IDE7IH0gMTAwJSB7IG9wYWNpdHk6IDAuMjsgfSB9XG4gICAgICAgIC8qIEhpZGUgc2Nyb2xsYmFycyBmb3IgdGhlIGV4cGFuZGluZyB0ZXh0YXJlYSBidXQga2VlcCBzY3JvbGxpbmcgKi9cbiAgICAgICAgLmdhLXRleHRhcmVhLW5vc2IgeyBzY3JvbGxiYXItd2lkdGg6IG5vbmU7IC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgfVxuICAgICAgICAuZ2EtdGV4dGFyZWEtbm9zYjo6LXdlYmtpdC1zY3JvbGxiYXIgeyB3aWR0aDogMDsgaGVpZ2h0OiAwOyB9XG4gICAgICAgIC8qIEJhY2tsaWdodCBzd2VlcCB1bmRlciBjb250ZW50IGVkZ2UgKEdQVS1mcmllbmRseSkuXG4gICAgICAgICAgIFdpZGVyIHRyYXZlbCB0byBmdWxseSByZWFjaCBib3RoIGNvcm5lcnMuICovXG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtYmFja2xpZ2h0LXN3ZWVwMiB7IDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0zNSUpOyB9IDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTA1JSk7IH0gfVxuICAgICAgICBAa2V5ZnJhbWVzIGdhLWJhY2tsaWdodC1wdWxzZSB7IDAlLDEwMCUgeyBvcGFjaXR5OiAwLjc7IH0gNTAlIHsgb3BhY2l0eTogMTsgfSB9XG4gICAgICAgIEBrZXlmcmFtZXMgZ2EtdGhpbmstY2hhbmdlIHsgMCUgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoNHB4KTsgfSAxMDAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9IH1cbiAgICAgIGB9PC9zdHlsZT5cbiAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN0eWxlfSByZWY9e2hlYWRlclJlZn0+XG4gICAgICAgIDxkaXYgc3R5bGU9e2xvZ29Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgPGltZyBzcmM9e2NoYXRMb2dvfSBhbHQ9XCJMb2dvXCIgc3R5bGU9e2xvZ29TdHlsZX0gLz5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtoZWFkZXJUaXRsZUNvbnRhaW5lclN0eWxlfT5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclRpdGxlU3R5bGV9PntoZWFkZXJUaXRsZX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9e2hlYWRlclN1YnRpdGxlU3R5bGV9PlN1cHBvcnQ8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBzdHlsZT17bWVudUJ1dHRvblN0eWxlfVxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU1lbnVDbGlja31cbiAgICAgICAgICB0aXRsZT1cIk1lbnVcIlxuICAgICAgICA+XG4gICAgICAgICAgPE1vcmVWZXJ0aWNhbCBzaXplPXsyNH0gY29sb3I9XCIjMTExMTExXCIgLz5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgIDwvZGl2PlxuICAgICAge3Nob3dCYWNrbGlnaHQgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIHJpZ2h0OiAwLFxuICAgICAgICAgICAgdG9wOiBNYXRoLm1heCgwLCBoZWFkZXJIZWlnaHQgLSAxNCksXG4gICAgICAgICAgICBoZWlnaHQ6IDQyLFxuICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgekluZGV4OiAxLFxuICAgICAgICAgICAgb3BhY2l0eTogaXNBZ2VudFR5cGluZyA/IDEgOiAwLFxuICAgICAgICAgICAgdHJhbnNpdGlvbjogJ29wYWNpdHkgNDIwbXMgZWFzZS1pbi1vdXQnLFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgdG9wOiA2LFxuICAgICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgICAgICB3aWR0aDogJzc4JScsXG4gICAgICAgICAgICAgIGZpbHRlcjogJ2JsdXIoMjJweCknLFxuICAgICAgICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgICAgICAgICdsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHJnYmEoOTksMTAyLDI0MSwwLjApIDAlLCByZ2JhKDk5LDEwMiwyNDEsMC4zNSkgMTUlLCByZ2JhKDk5LDEwMiwyNDEsMC41NSkgNTAlLCByZ2JhKDk5LDEwMiwyNDEsMC4zNSkgODUlLCByZ2JhKDk5LDEwMiwyNDEsMC4wKSAxMDAlKScsXG4gICAgICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0sIG9wYWNpdHknLFxuICAgICAgICAgICAgICBhbmltYXRpb246ICdnYS1iYWNrbGlnaHQtc3dlZXAyIDEuMnMgY3ViaWMtYmV6aWVyKDAuNCwwLjAsMC4yLDEpIGluZmluaXRlIGFsdGVybmF0ZSwgZ2EtYmFja2xpZ2h0LXB1bHNlIDIuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGUnLFxuICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6IDE4LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93TWVudSAmJiAoXG4gICAgICAgIDxkaXYgcmVmPXttZW51UmVmfSBzdHlsZT17bWVudVBvcHVwU3R5bGV9PlxuICAgICAgICAgIDxkaXYgc3R5bGU9e21lbnVJdGVtU3R5bGV9IG9uQ2xpY2s9e2hhbmRsZVJlc2V0Q2xpY2t9PlxuICAgICAgICAgICAgPFJlZnJlc2hDdyBzaXplPXsxNn0gLz5cbiAgICAgICAgICAgIFJlc2V0IGNvbnZlcnNhdGlvblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICBcbiAgICAgIDxkaXYgc3R5bGU9e2NvbnRlbnRDYXJkU3R5bGV9PlxuICAgICAgICA8ZGl2IHN0eWxlPXtjaGF0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHNob3cgd2VsY29tZSBjYXJkXG4gICAgICAgICAgICBjb25zdCBzaG91bGRTaG93U3ludGhldGljV2VsY29tZSA9XG4gICAgICAgICAgICAgICFoYXNVc2VyTWVzc2FnZXMgJiZcbiAgICAgICAgICAgICAgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCB8fCBtZXNzYWdlc1swXS5zcGVha2VyICE9PSAnYWdlbnQnKSAmJlxuICAgICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSk7XG5cbiAgICAgICAgICAgIGlmICghc2hvdWxkU2hvd1N5bnRoZXRpY1dlbGNvbWUpIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICBjb25zdCBub3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIGNvbnN0IHN5bnRoZXRpY1dlbGNvbWU6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiAwLFxuICAgICAgICAgICAgICBlbmRfdGltZTogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogJ2FnZW50JyxcbiAgICAgICAgICAgICAgdGV4dDogd2VsY29tZU1lc3NhZ2UgfHwgJycsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VDb21wb25lbnRcbiAgICAgICAgICAgICAgICBrZXk9XCJfX3N5bnRoZXRpY193ZWxjb21lX19cIlxuICAgICAgICAgICAgICAgIG1lc3NhZ2U9e3N5bnRoZXRpY1dlbGNvbWV9XG4gICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgIGlzRmlyc3RNZXNzYWdlPXt0cnVlfVxuICAgICAgICAgICAgICAgIGlzTmV4dFNhbWVTcGVha2VyPXtmYWxzZX1cbiAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgZW5hYmxlVHlwZXdyaXRlcj17ZmFsc2V9XG4gICAgICAgICAgICAgICAgd2VsY29tZUltYWdlVXJsPXt3ZWxjb21lSW1hZ2VVcmwgfHwgdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgIHdlbGNvbWVUaXRsZT17d2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e3Bvc3NpYmxlUXVlcmllc31cbiAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEFnZW50SW5kZXggPSBtZXNzYWdlcy5maW5kSW5kZXgobSA9PiBtLnNwZWFrZXIgPT09ICdhZ2VudCcpO1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXNOZXh0U2FtZVNwZWFrZXIgPSBpbmRleCA8IG1lc3NhZ2VzLmxlbmd0aCAtIDEgJiYgbWVzc2FnZXNbaW5kZXggKyAxXS5zcGVha2VyID09PSBtZXNzYWdlLnNwZWFrZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGlzUHJldlNhbWVTcGVha2VyID0gaW5kZXggPiAwICYmIG1lc3NhZ2VzW2luZGV4IC0gMV0uc3BlYWtlciA9PT0gbWVzc2FnZS5zcGVha2VyO1xuICAgICAgICAgICAgICBjb25zdCBpc0ZpcnN0QWdlbnRNZXNzYWdlID0gaW5kZXggPT09IGZpcnN0QWdlbnRJbmRleCAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCcgJiYgIWhhc1VzZXJNZXNzYWdlcztcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8Q2hhdE1lc3NhZ2VDb21wb25lbnQgXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fSBcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9IFxuICAgICAgICAgICAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICAgICAgICAgICAgb25QbGF5QXVkaW89e21lc3NhZ2Uuc3BlYWtlciA9PT0gJ2FnZW50JyA/IHBsYXlSZXNwb25zZUF1ZGlvIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICAgICAgaXNQbGF5aW5nQXVkaW89e2lzUGxheWluZ0F1ZGlvfVxuICAgICAgICAgICAgICAgICAgaXNGaXJzdE1lc3NhZ2U9e2lzRmlyc3RBZ2VudE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICBpc05leHRTYW1lU3BlYWtlcj17aXNOZXh0U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBpc1ByZXZTYW1lU3BlYWtlcj17aXNQcmV2U2FtZVNwZWFrZXJ9XG4gICAgICAgICAgICAgICAgICBvbkZlZWRiYWNrPXsobWVzc2FnZUlkLCB2YWx1ZSkgPT4gYWRkRmVlZGJhY2sobWVzc2FnZUlkLCB2YWx1ZSl9XG4gICAgICAgICAgICAgICAgICBlbmFibGVUeXBld3JpdGVyPXtpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMSAmJiBtZXNzYWdlLnNwZWFrZXIgPT09ICdhZ2VudCd9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lSW1hZ2VVcmw9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZUltYWdlVXJsIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICB3ZWxjb21lVGl0bGU9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyAod2VsY29tZVRpdGxlIHx8IHVuZGVmaW5lZCkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM9e2lzRmlyc3RBZ2VudE1lc3NhZ2UgPyBwb3NzaWJsZVF1ZXJpZXMgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgICAgICBvblF1aWNrUXVlcnk9e2hhbmRsZVF1ZXJ5Q2xpY2t9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgICAge2lzQWdlbnRUeXBpbmcgJiYgY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsIG1heFdpZHRoOiAnODAlJyB9fT5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogJzE0cHgnLCBjb2xvcjogJyMwMDAwMDAnLCBmb250V2VpZ2h0OiA2MDAsIG1hcmdpbkJvdHRvbTogNCB9fT5BZ2VudDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAwLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgIH19PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7Y3VycmVudFRoaW5raW5nUGFydEluZGV4fS0ke2N1cnJlbnRUaGlua2luZ1BhcnRzLmpvaW4oJ3wnKX1gfVxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uOiAnZ2EtdGhpbmstY2hhbmdlIDIyMG1zIGVhc2UnLFxuICAgICAgICAgICAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtLCBvcGFjaXR5JyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICcjNmI3MjgwJyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6ICcxM3B4JyxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2N1cnJlbnRUaGlua2luZ1BhcnRzW2N1cnJlbnRUaGlua2luZ1BhcnRJbmRleF0gfHwgY3VycmVudFRoaW5raW5nUGFydHNbY3VycmVudFRoaW5raW5nUGFydHMubGVuZ3RoIC0gMV19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgICA8ZGl2IHJlZj17bWVzc2FnZXNFbmRSZWZ9IC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93aW5nU3ludGhldGljV2VsY29tZSA9XG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAoQm9vbGVhbih3ZWxjb21lVGl0bGUpIHx8IEJvb2xlYW4od2VsY29tZUltYWdlVXJsKSB8fCBCb29sZWFuKHdlbGNvbWVNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBvc3NpYmxlUXVlcmllcy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhaGFzVXNlck1lc3NhZ2VzICYmXG4gICAgICAgICAgICAobWVzc2FnZXMubGVuZ3RoID09PSAwIHx8IG1lc3NhZ2VzWzBdLnNwZWFrZXIgIT09ICdhZ2VudCcpICYmXG4gICAgICAgICAgICAhc2hvd2luZ1N5bnRoZXRpY1dlbGNvbWVcbiAgICAgICAgICApO1xuICAgICAgICB9KSgpICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXtwb3NzaWJsZVF1ZXJpZXNDb250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICB7cG9zc2libGVRdWVyaWVzLm1hcCgocXVlcnksIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgICBzdHlsZT17cXVlcnlCdXR0b25TdHlsZX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVRdWVyeUNsaWNrKHF1ZXJ5KX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3F1ZXJ5fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICBcbiAgICAgICAge2F0dGFjaG1lbnRzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgcGFkZGluZzogJzAgMTZweCcsIG1hcmdpbkJvdHRvbTogJzhweCcsIGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnOHB4JywgZmxleFdyYXA6ICd3cmFwJyB9fT5cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGZpbGUsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxBdHRhY2htZW50UHJldmlldyBcbiAgICAgICAgICAgICAgICBrZXk9e2luZGV4fSBcbiAgICAgICAgICAgICAgICBmaWxlPXtmaWxlfSBcbiAgICAgICAgICAgICAgICBvblJlbW92ZT17KCkgPT4gaGFuZGxlUmVtb3ZlQXR0YWNobWVudChmaWxlLm5hbWUpfVxuICAgICAgICAgICAgICAgIHVwbG9hZGluZz17dXBsb2FkaW5nRmlsZXMuaGFzKGZpbGUubmFtZSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cblxuICAgICAgICB7IWNvbnZlcnNhdGlvbklkIHx8IGlzRmluYWxpemVkID8gKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBzdHlsZT17ey4uLnNlbmRCdXR0b25TdHlsZSwgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnNDhweCcsIGJvcmRlclJhZGl1czogJzE2cHgnfX1cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3RhcnRDb252ZXJzYXRpb259XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFN0YXJ0IENvbnZlcnNhdGlvblxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gc3R5bGU9e2lucHV0Q29udGFpbmVyU3R5bGV9PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17aW5wdXRXcmFwcGVyU3R5bGV9PlxuICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgICBzdHlsZT17YXR0YWNoQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgdGl0bGU9XCJBdHRhY2hcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBhcGVyY2xpcCBzaXplPXsyMn0gY29sb3I9XCIjNzU3NTc1XCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICByZWY9e3RleHRBcmVhUmVmfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt0ZXh0QXJlYVN0eWxlfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImdhLXRleHRhcmVhLW5vc2JcIlxuICAgICAgICAgICAgICAgIHZhbHVlPXtpbnB1dFZhbHVlfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0SW5wdXRWYWx1ZShlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChpbnB1dFZhbHVlLnRyaW0oKSAhPT0gJycgfHwgYXR0YWNobWVudHMubGVuZ3RoID4gMCkgJiYgY29ubmVjdGlvblN0YXRlID09PSAnY29ubmVjdGVkJykge1xuICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pdE1lc3NhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXshY29udmVyc2F0aW9uSWQgfHwgaXNGaW5hbGl6ZWR9XG4gICAgICAgICAgICAgICAgcm93cz17MX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT17cmlnaHRBY3Rpb25Db250YWluZXJTdHlsZX0+XG4gICAgICAgICAgICAgICAge2lucHV0VmFsdWUudHJpbSgpID09PSAnJyAmJiBhdHRhY2htZW50cy5sZW5ndGggPT09IDAgPyAoXG4gICAgICAgICAgICAgICAgICA8Vm9pY2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICBvblRyYW5zY3JpcHRpb249eyh0ZXh0OiBzdHJpbmcpID0+IHNldElucHV0VmFsdWUodGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3I9e2hhbmRsZVZvaWNlRXJyb3J9XG4gICAgICAgICAgICAgICAgICAgIGJhc2VVcmw9e2Jhc2VVcmx9XG4gICAgICAgICAgICAgICAgICAgIGFwaUtleT17YXBpS2V5fVxuICAgICAgICAgICAgICAgICAgICB0aGVtZT17dGhlbWV9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCIgXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXtzZW5kQnV0dG9uU3R5bGV9XG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXsoaW5wdXRWYWx1ZS50cmltKCkgPT09ICcnICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkgfHwgY29ubmVjdGlvblN0YXRlICE9PSAnY29ubmVjdGVkJ31cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNlbmQgc2l6ZT17MTh9IGNvbG9yPVwiI2ZmZmZmZlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHN0eWxlPXtjb25maXJtT3ZlcmxheVN0eWxlfT5cbiAgICAgICAgPGRpdiBzdHlsZT17Y29uZmlybURpYWxvZ1N0eWxlfT5cbiAgICAgICAgICA8aDMgc3R5bGU9e3tmb250RmFtaWx5LCBtYXJnaW5Ub3A6IDB9fT5SZXNldCBDb252ZXJzYXRpb248L2gzPlxuICAgICAgICAgIDxwIHN0eWxlPXt7Zm9udEZhbWlseSwgZm9udFNpemV9fT5UaGlzIHdpbGwgY2xlYXIgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIGhpc3RvcnkgYW5kIHN0YXJ0IGEgbmV3IGNvbnZlcnNhdGlvbi4gQXJlIHlvdSBzdXJlPzwvcD5cbiAgICAgICAgICA8ZGl2IHN0eWxlPXtjb25maXJtQnV0dG9uc1N0eWxlfT5cbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9e3suLi5jb25maXJtQnV0dG9uU3R5bGUoZmFsc2UpLCBjb2xvcjogdGV4dENvbG9yfX0gb25DbGljaz17aGFuZGxlQ2FuY2VsUmVzZXR9PkNhbmNlbDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBzdHlsZT17Y29uZmlybUJ1dHRvblN0eWxlKHRydWUpfSBvbkNsaWNrPXtoYW5kbGVDb25maXJtUmVzZXR9PlJlc2V0PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG5cbiAgaWYgKG1vZGUgPT09ICdmbG9hdGluZycpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHN0eWxlPXt0b2dnbGVCdXR0b25TdHlsZX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJc0Zsb2F0aW5nT3BlbihwcmV2ID0+ICFwcmV2KX1cbiAgICAgICAgICB0aXRsZT17aXNGbG9hdGluZ09wZW4gPyBcIkNsb3NlIENoYXRcIiA6IFwiT3BlbiBDaGF0XCJ9XG4gICAgICAgID5cbiAgICAgICAgICB7aXNGbG9hdGluZ09wZW4gPyA8WEljb24gc2l6ZT17MjR9IC8+IDogPE1lc3NhZ2VTcXVhcmVNb3JlIHNpemU9ezI0fSAvPn1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIFxuICAgICAgICB7aXNGbG9hdGluZ09wZW4gJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e2Zsb2F0aW5nQ29udGFpbmVyU3R5bGV9IGRhdGEtZ2VuYXNzaXN0LWNvbnRhaW5lcj1cImZsb2F0aW5nXCI+XG4gICAgICAgICAgICB7cmVuZGVyQ2hhdENvbXBvbmVudCgpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZW5kZXJDaGF0Q29tcG9uZW50KCk7XG59O1xuIl19
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface ChatTheme {
|
|
3
|
+
primaryColor: string;
|
|
4
|
+
secondaryColor: string;
|
|
5
|
+
backgroundColor: string;
|
|
6
|
+
textColor: string;
|
|
7
|
+
fontFamily: string;
|
|
8
|
+
fontSize: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ChatSettingsConfig {
|
|
11
|
+
name: string;
|
|
12
|
+
description: string;
|
|
13
|
+
}
|
|
14
|
+
export interface GenAgentConfigPanelProps {
|
|
15
|
+
theme?: ChatTheme;
|
|
16
|
+
onThemeChange?: (next: ChatTheme) => void;
|
|
17
|
+
chatSettings?: ChatSettingsConfig;
|
|
18
|
+
onChatSettingsChange?: (next: ChatSettingsConfig) => void;
|
|
19
|
+
metadata?: Record<string, any>;
|
|
20
|
+
onMetadataChange?: (next: Record<string, any>) => void;
|
|
21
|
+
defaultOpen?: {
|
|
22
|
+
appearance?: boolean;
|
|
23
|
+
settings?: boolean;
|
|
24
|
+
metadata?: boolean;
|
|
25
|
+
};
|
|
26
|
+
onSave?: (payload: {
|
|
27
|
+
theme: ChatTheme;
|
|
28
|
+
chatSettings: ChatSettingsConfig;
|
|
29
|
+
metadata: Record<string, any>;
|
|
30
|
+
}) => void;
|
|
31
|
+
onCancel?: () => void;
|
|
32
|
+
style?: React.CSSProperties;
|
|
33
|
+
}
|
|
34
|
+
export declare const GenAgentConfigPanel: React.FC<GenAgentConfigPanelProps>;
|