22 lines
121 KiB
JavaScript
22 lines
121 KiB
JavaScript
"use strict";
|
|
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
self["webpackHotUpdate_N_E"]("app/page",{
|
|
|
|
/***/ "(app-pages-browser)/./src/components/chat-interface.tsx":
|
|
/*!*******************************************!*\
|
|
!*** ./src/components/chat-interface.tsx ***!
|
|
\*******************************************/
|
|
/***/ ((module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ChatInterface: () => (/* binding */ ChatInterface)\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/.pnpm/next@15.5.4_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var framer_motion__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! framer-motion */ \"(app-pages-browser)/./node_modules/.pnpm/framer-motion@12.23.24_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/render/components/motion/proxy.mjs\");\n/* harmony import */ var framer_motion__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! framer-motion */ \"(app-pages-browser)/./node_modules/.pnpm/framer-motion@12.23.24_react-dom@19.1.0_react@19.1.0__react@19.1.0/node_modules/framer-motion/dist/es/components/AnimatePresence/index.mjs\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./src/components/ui/button.tsx\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/square-pen.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/copy.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/x.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/chevron-down.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/loader-circle.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/send.js\");\n/* harmony import */ var _barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! __barrel_optimize__?names=ChevronDown,Copy,Loader2,Paperclip,Send,SquarePen,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/.pnpm/lucide-react@0.454.0_react@19.1.0/node_modules/lucide-react/dist/esm/icons/paperclip.js\");\n/* harmony import */ var _components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/dropdown-menu */ \"(app-pages-browser)/./src/components/ui/dropdown-menu.tsx\");\n/* harmony import */ var _markdown_renderer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./markdown-renderer */ \"(app-pages-browser)/./src/components/markdown-renderer.tsx\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./src/lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ ChatInterface auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\n\nfunction ChatInterface(param) {\n let { agent, agents, onAgentSelected, isAgentsLoading } = param;\n _s();\n const heroGreeting = \"hello, user\";\n const [messages, setMessages] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const [input, setInput] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [isLoading, setIsLoading] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const [sessionId, setSessionId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [selectedImages, setSelectedImages] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)([]);\n const messagesContainerRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const inputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const fileInputRef = (0,react__WEBPACK_IMPORTED_MODULE_1__.useRef)(null);\n const [copiedMessageId, setCopiedMessageId] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n // Use agent-specific session ID: chat-session-{agentId}\n const sessionKey = \"chat-session-\".concat(agent.id);\n let existingSessionId = localStorage.getItem(sessionKey);\n if (!existingSessionId) {\n // Generate new sessionID using timestamp and random string\n existingSessionId = \"session-\".concat(agent.id, \"-\").concat(Date.now(), \"-\").concat(Math.random().toString(36).substring(2, 15));\n localStorage.setItem(sessionKey, existingSessionId);\n }\n setSessionId(existingSessionId);\n // Load existing messages for this agent\n const messagesKey = \"chat-messages-\".concat(agent.id);\n const savedMessages = localStorage.getItem(messagesKey);\n if (savedMessages) {\n try {\n const parsed = JSON.parse(savedMessages);\n // Ensure timestamps are Date objects\n const messages = parsed.map({\n \"ChatInterface.useEffect.messages\": (msg)=>({\n ...msg,\n timestamp: new Date(msg.timestamp)\n })\n }[\"ChatInterface.useEffect.messages\"]);\n setMessages(messages);\n } catch (err) {\n console.error(\"[chat] Failed to load saved messages:\", err);\n }\n }\n }\n }[\"ChatInterface.useEffect\"], [\n agent.id\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n if (messagesContainerRef.current) {\n messagesContainerRef.current.scrollTop = messagesContainerRef.current.scrollHeight;\n }\n }\n }[\"ChatInterface.useEffect\"], [\n messages,\n isLoading\n ]);\n // Save messages to localStorage whenever they change\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n const messagesKey = \"chat-messages-\".concat(agent.id);\n localStorage.setItem(messagesKey, JSON.stringify(messages));\n }\n }[\"ChatInterface.useEffect\"], [\n messages,\n agent.id\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"ChatInterface.useEffect\": ()=>{\n if (inputRef.current) {\n inputRef.current.style.height = \"auto\";\n inputRef.current.style.height = Math.min(inputRef.current.scrollHeight, 160) + \"px\";\n }\n }\n }[\"ChatInterface.useEffect\"], [\n input\n ]);\n // Handle image file selection\n const handleImageSelect = async (e)=>{\n const files = e.currentTarget.files;\n if (!files) return;\n const newImages = [];\n for(let i = 0; i < files.length; i++){\n const file = files[i];\n // Only accept image files\n if (!file.type.startsWith(\"image/\")) {\n console.warn(\"[chat] Skipping non-image file:\", file.name);\n continue;\n }\n try {\n const base64 = await fileToBase64(file);\n newImages.push(base64);\n } catch (err) {\n console.error(\"[chat] Failed to convert image:\", err);\n }\n }\n setSelectedImages((prev)=>[\n ...prev,\n ...newImages\n ]);\n // Reset file input\n if (fileInputRef.current) {\n fileInputRef.current.value = \"\";\n }\n };\n // Convert file to base64 string\n const fileToBase64 = (file)=>{\n return new Promise((resolve, reject)=>{\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = ()=>resolve(reader.result);\n reader.onerror = reject;\n });\n };\n // Remove selected image\n const removeImage = (index)=>{\n setSelectedImages((prev)=>prev.filter((_, i)=>i !== index));\n };\n const sendMessage = async (e)=>{\n if (e) {\n e.preventDefault();\n }\n if (!input.trim() || isLoading) return;\n const userMessage = {\n id: Date.now().toString(),\n role: \"user\",\n content: input.trim(),\n timestamp: new Date(),\n images: selectedImages.length > 0 ? selectedImages : undefined\n };\n setMessages((prev)=>[\n ...prev,\n userMessage\n ]);\n setInput(\"\");\n setSelectedImages([]);\n setIsLoading(true);\n try {\n const response = await fetch(\"/api/chat\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify({\n message: userMessage.content,\n timestamp: userMessage.timestamp.toISOString(),\n sessionId: sessionId,\n agentId: agent.id,\n images: selectedImages.length > 0 ? selectedImages : undefined\n })\n });\n const data = await response.json();\n if (!response.ok) {\n const errorMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: data.error || \"Failed to communicate with the webhook.\",\n timestamp: new Date(),\n isError: true,\n hint: data.hint\n };\n setMessages((prev)=>[\n ...prev,\n errorMessage\n ]);\n } else {\n const assistantMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: data.response || data.message || JSON.stringify(data),\n timestamp: new Date()\n };\n setMessages((prev)=>[\n ...prev,\n assistantMessage\n ]);\n }\n } catch (error) {\n console.error(\"[v0] Error sending message:\", error);\n const errorMessage = {\n id: (Date.now() + 1).toString(),\n role: \"assistant\",\n content: \"Sorry, I encountered an error processing your message. Please try again.\",\n timestamp: new Date(),\n isError: true\n };\n setMessages((prev)=>[\n ...prev,\n errorMessage\n ]);\n } finally{\n var _inputRef_current;\n setIsLoading(false);\n (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus();\n }\n };\n const startNewChat = ()=>{\n var // Focus input\n _inputRef_current;\n // Clear all messages\n setMessages([]);\n // Generate new sessionID for this agent\n const newSessionId = \"session-\".concat(agent.id, \"-\").concat(Date.now(), \"-\").concat(Math.random().toString(36).substring(2, 15));\n setSessionId(newSessionId);\n const sessionKey = \"chat-session-\".concat(agent.id);\n localStorage.setItem(sessionKey, newSessionId);\n // Clear input and images\n setInput(\"\");\n setSelectedImages([]);\n (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.focus();\n };\n const handleKeyDown = (e)=>{\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n sendMessage();\n }\n };\n const handleCopyMessage = async (id, content)=>{\n try {\n await navigator.clipboard.writeText(content);\n setCopiedMessageId(id);\n setTimeout(()=>{\n setCopiedMessageId((current)=>current === id ? null : current);\n }, 1200);\n } catch (error) {\n console.error(\"[chat] Failed to copy message\", error);\n }\n };\n const canSwitchAgents = agents.length > 0 && !isAgentsLoading;\n const hasMessages = messages.length > 0;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.div, {\n initial: {\n opacity: 0,\n y: 35\n },\n animate: {\n opacity: 1,\n y: 0\n },\n transition: {\n duration: 0.85,\n ease: \"easeOut\"\n },\n className: \"relative flex h-full w-full flex-col overflow-hidden rounded-[2.5rem] bg-gradient-to-b from-white/0 via-white/15 to-white/45 px-4 py-8 shadow-[0_15px_35px_rgba(45,45,45,0.1),0_0_0_1px_rgba(255,255,255,0.25)_inset,0_15px_25px_rgba(255,255,255,0.12)_inset] backdrop-blur-xl dark:bg-gradient-to-b dark:from-transparent dark:via-white/5 dark:to-white/20 dark:shadow-[0_12px_25px_rgba(0,0,0,0.35),0_0_0_1px_rgba(255,255,255,0.06)_inset,0_12px_20px_rgba(255,255,255,0.04)_inset] sm:px-8 sm:py-10\",\n children: [\n messages.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute left-8 top-8 z-10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n onClick: startNewChat,\n variant: \"ghost\",\n size: \"icon\",\n className: \"group h-11 w-11 rounded-2xl border border-white/25 bg-white/15 text-white shadow-[0_2px_6px_rgba(0,0,0,0.12)] backdrop-blur transition hover:bg-white/25\",\n title: \"Start a fresh conversation\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 269,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 262,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 261,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: messagesContainerRef,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)(\"px-1 pt-4 sm:px-0\", hasMessages ? \"flex-1 overflow-y-auto pb-10\" : \"pb-6\"),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-[52rem] space-y-10 px-2 sm:px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_8__.AnimatePresence, {\n mode: \"wait\",\n children: hasMessages ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.div, {\n initial: {\n opacity: 0,\n y: 30\n },\n animate: {\n opacity: 1,\n y: 0\n },\n exit: {\n opacity: 0,\n y: -20\n },\n transition: {\n duration: 0.6,\n ease: \"easeOut\"\n },\n className: \"space-y-10\",\n children: [\n messages.map((message)=>{\n const isUser = message.role === \"user\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.div, {\n layout: true,\n initial: {\n opacity: 0,\n y: 15\n },\n animate: {\n opacity: 1,\n y: 0\n },\n transition: {\n duration: 0.35,\n ease: \"easeOut\"\n },\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)(\"message-frame flex flex-col gap-3\", isUser ? \"items-end text-right\" : \"\"),\n children: [\n isUser ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-bubble user\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_markdown_renderer__WEBPACK_IMPORTED_MODULE_4__.MarkdownRenderer, {\n content: message.content,\n tone: \"bubble\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 305,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 304,\n columnNumber: 25\n }, this) : message.isError ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-sm font-medium text-destructive\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"whitespace-pre-wrap break-words leading-relaxed\",\n children: message.content\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 309,\n columnNumber: 27\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 308,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative text-sm text-charcoal dark:text-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_markdown_renderer__WEBPACK_IMPORTED_MODULE_4__.MarkdownRenderer, {\n content: message.content\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 313,\n columnNumber: 27\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mt-4 flex items-center justify-end gap-3 border-t border-white/10 pt-3 opacity-50 transition hover:opacity-100\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>handleCopyMessage(message.id, message.content),\n className: \"inline-flex h-7 w-7 items-center justify-center rounded border border-white/20 bg-white/8 text-white/70 shadow-[0_2px_5px_rgba(0,0,0,0.07)] backdrop-blur transition-transform duration-150 hover:bg-white/18 \".concat(copiedMessageId === message.id ? \"scale-90 bg-white/20 text-white\" : \"\"),\n \"aria-label\": \"Copy response\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"h-2.5 w-2.5\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 323,\n columnNumber: 31\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 315,\n columnNumber: 29\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 314,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 312,\n columnNumber: 25\n }, this),\n message.hint && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-lg border border-accent/60 bg-accent/40 px-3 py-2 text-xs text-charcoal\",\n children: message.hint\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 330,\n columnNumber: 25\n }, this)\n ]\n }, message.id, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 295,\n columnNumber: 21\n }, this);\n }),\n isLoading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-frame flex flex-col gap-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3 text-sm text-muted-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"uppercase tracking-[0.25em] text-white/70\",\n children: \"Correspondent\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 341,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"relative flex h-3 w-24 overflow-hidden rounded-full bg-white/10\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute inset-y-0 w-1/2 animate-[shimmer_1.4s_infinite] bg-white/40\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 343,\n columnNumber: 25\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 342,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 340,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 339,\n columnNumber: 19\n }, this)\n ]\n }, \"conversation\", true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 284,\n columnNumber: 15\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.div, {\n initial: {\n opacity: 0,\n y: 60\n },\n animate: {\n opacity: 1,\n y: 0\n },\n exit: {\n opacity: 0,\n y: -20\n },\n transition: {\n duration: 0.65,\n ease: \"easeOut\"\n },\n className: \"flex min-h-[40vh] flex-col items-center justify-center gap-6 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"text-center\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"font-heading text-[7rem] lowercase tracking-tight text-white/85 drop-shadow-[0_12px_30px_rgba(0,0,0,0.4)]\",\n children: heroGreeting.split(\"\").map((char, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.span, {\n initial: {\n opacity: 0,\n y: 18\n },\n animate: {\n opacity: 1,\n y: 0\n },\n transition: {\n delay: 0.15 + index * 0.05,\n duration: 0.35,\n ease: \"easeOut\"\n },\n className: \"inline-block\",\n children: char === \" \" ? \"\\u00A0\" : char\n }, \"\".concat(char, \"-\").concat(index), false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 361,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 359,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 358,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"w-full max-w-3xl space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-[0.6rem] uppercase tracking-[0.4em] text-white/55\",\n children: \"Select a correspondent to begin\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 375,\n columnNumber: 19\n }, this),\n agents.length > 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap items-center justify-center gap-3\",\n children: agents.map((entry)=>{\n const isActive = entry.id === agent.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>onAgentSelected(entry),\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_5__.cn)(\"rounded-full border px-4 py-2 text-[0.65rem] uppercase tracking-[0.35em] transition\", isActive ? \"border-white/25 bg-white/25 text-white shadow-[0_5px_20px_rgba(0,0,0,0.35)]\" : \"border-white/10 bg-white/5 text-white/70 hover:border-white/30 hover:text-white\"),\n children: entry.name\n }, entry.id, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 383,\n columnNumber: 27\n }, this);\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 379,\n columnNumber: 21\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-sm text-white/60\",\n children: \"No agents available yet.\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 399,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 374,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"grid w-full max-w-2xl gap-4 sm:grid-cols-2\",\n children: [\n \"Help me brainstorm ideas for a new mobile app\",\n \"Generate creative writing prompts for a fantasy novel\",\n \"Suggest innovative marketing strategies for a startup\",\n \"Create a list of unique product names for a tech company\"\n ].map((prompt, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>setInput(prompt),\n className: \"scroll-reveal rounded-2xl border border-border/30 bg-white/80 p-4 text-left text-sm text-charcoal shadow-sm transition hover:border-ring/60 hover:bg-white\",\n style: {\n animationDelay: \"\".concat(index * 50, \"ms\")\n },\n children: prompt\n }, prompt, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 410,\n columnNumber: 21\n }, this))\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 403,\n columnNumber: 17\n }, this)\n ]\n }, \"empty-state\", true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 350,\n columnNumber: 15\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 282,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 281,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 274,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(framer_motion__WEBPACK_IMPORTED_MODULE_6__.motion.div, {\n layout: true,\n className: \"relative mt-auto pt-6 pb-4 transition-all duration-500\",\n animate: {\n y: hasMessages ? 0 : -140,\n scale: hasMessages ? 1 : 1.05\n },\n transition: {\n type: \"spring\",\n stiffness: 160,\n damping: 24\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: sendMessage,\n className: \"relative flex justify-center\",\n children: [\n selectedImages.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-3 flex flex-wrap gap-3 px-3 pt-2\",\n children: selectedImages.map((image, index)=>/*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"img\", {\n src: image,\n alt: \"Selected \".concat(index),\n className: \"h-16 w-16 rounded-lg border border-border/40 object-cover shadow-md\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 438,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n onClick: ()=>removeImage(index),\n className: \"absolute -right-2 -top-2 flex h-5 w-5 items-center justify-center rounded-full text-white shadow-md hover:opacity-80\",\n style: {\n backgroundColor: \"var(--charcoal-ink)\"\n },\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n className: \"h-3 w-3\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 449,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 443,\n columnNumber: 19\n }, this)\n ]\n }, index, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 437,\n columnNumber: 17\n }, this))\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 435,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"manuscript-panel w-[85%] max-w-2xl p-5\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-col gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"textarea\", {\n ref: inputRef,\n value: input,\n onChange: (e)=>setInput(e.target.value),\n onKeyDown: handleKeyDown,\n placeholder: \"Write a note, share a hunch, or paste a brief…\",\n disabled: isLoading,\n rows: 1,\n className: \"min-h-[32px] max-h-32 w-full resize-none border-0 bg-transparent text-lg text-foreground placeholder:text-muted-foreground/80 focus:outline-none\",\n style: {\n overflow: \"hidden\",\n height: \"auto\"\n },\n onInput: (e)=>{\n const target = e.target;\n target.style.height = \"auto\";\n target.style.height = Math.min(target.scrollHeight, 160) + \"px\";\n }\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 458,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap items-center justify-between gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenu, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuTrigger, {\n asChild: true,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n type: \"button\",\n className: \"inline-flex max-w-[12rem] items-center gap-2 rounded-xl border border-white/15 bg-white/10 px-3 py-2 text-left text-[0.55rem] uppercase tracking-[0.3em] text-white/70 backdrop-blur transition hover:border-white/30 hover:text-white disabled:opacity-50\",\n disabled: !canSwitchAgents,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"truncate text-xs font-heading normal-case tracking-normal text-white\",\n children: agent.name\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 486,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n className: \"h-3.5 w-3.5 text-white/70\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 489,\n columnNumber: 23\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 481,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 480,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuContent, {\n align: \"start\",\n className: \"min-w-[12rem] rounded-2xl border border-white/15 bg-black/80 p-2 text-white shadow-[0_20px_40px_rgba(0,0,0,0.5)] backdrop-blur\",\n children: isAgentsLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuItem, {\n disabled: true,\n className: \"text-white/50\",\n children: \"Gathering correspondents…\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 497,\n columnNumber: 23\n }, this) : agents.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuItem, {\n disabled: true,\n className: \"text-white/50\",\n children: \"No agents configured\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 501,\n columnNumber: 23\n }, this) : agents.map((entry)=>{\n const isActive = entry.id === agent.id;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dropdown_menu__WEBPACK_IMPORTED_MODULE_3__.DropdownMenuItem, {\n onClick: ()=>onAgentSelected(entry),\n className: \"flex w-full items-center justify-between rounded-xl px-3 py-2 text-xs transition \".concat(isActive ? \"bg-white/15 text-white\" : \"text-white/70 hover:bg-white/5 hover:text-white\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"font-heading text-sm\",\n children: entry.name\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 517,\n columnNumber: 29\n }, this),\n isActive && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[0.55rem] uppercase tracking-[0.3em]\",\n children: \"Active\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 518,\n columnNumber: 42\n }, this)\n ]\n }, entry.id, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 508,\n columnNumber: 27\n }, this);\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 492,\n columnNumber: 19\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 479,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap items-center justify-end gap-3 text-xs uppercase tracking-[0.25em] text-muted-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"submit\",\n disabled: !input.trim() || isLoading,\n size: \"icon\",\n className: \"group h-12 w-12 flex-shrink-0 rounded-2xl border border-white/20 bg-white/30 text-white shadow-[0_10px_25px_rgba(0,0,0,0.2)] backdrop-blur transition hover:bg-white/40 disabled:opacity-50\",\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n className: \"h-4 w-4 animate-spin\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 534,\n columnNumber: 21\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 536,\n columnNumber: 21\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 527,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n ref: fileInputRef,\n type: \"file\",\n multiple: true,\n accept: \"image/*\",\n onChange: handleImageSelect,\n className: \"hidden\",\n disabled: isLoading\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 539,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_2__.Button, {\n type: \"button\",\n variant: \"ghost\",\n size: \"icon\",\n onClick: ()=>{\n var _fileInputRef_current;\n return (_fileInputRef_current = fileInputRef.current) === null || _fileInputRef_current === void 0 ? void 0 : _fileInputRef_current.click();\n },\n disabled: isLoading,\n className: \"h-11 w-11 rounded-2xl border border-white/20 bg-white/10 text-white/80 transition hover:bg-white/20 hover:text-white\",\n title: \"Attach image\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_ChevronDown_Copy_Loader2_Paperclip_Send_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n className: \"h-4 w-4\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 557,\n columnNumber: 19\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 548,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 526,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 478,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 457,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 456,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 432,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 426,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 254,\n columnNumber: 5\n }, this);\n}\n_s(ChatInterface, \"MgPyy7XoB3CzWkE+MfZYF14dWUQ=\");\n_c = ChatInterface;\nvar _c;\n$RefreshReg$(_c, \"ChatInterface\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL2NoYXQtaW50ZXJmYWNlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSW1EO0FBQ0k7QUFDUjtBQUN5QztBQU1sRDtBQUNnQjtBQUV0QjtBQVN6QixTQUFTbUIsY0FBYyxLQUtUO1FBTFMsRUFDNUJDLEtBQUssRUFDTEMsTUFBTSxFQUNOQyxlQUFlLEVBQ2ZDLGVBQWUsRUFDSSxHQUxTOztJQU01QixNQUFNQyxlQUFlO0lBQ3JCLE1BQU0sQ0FBQ0MsVUFBVUMsWUFBWSxHQUFHMUIsK0NBQVFBLENBQVksRUFBRTtJQUN0RCxNQUFNLENBQUMyQixPQUFPQyxTQUFTLEdBQUc1QiwrQ0FBUUEsQ0FBQztJQUNuQyxNQUFNLENBQUM2QixXQUFXQyxhQUFhLEdBQUc5QiwrQ0FBUUEsQ0FBQztJQUMzQyxNQUFNLENBQUMrQixXQUFXQyxhQUFhLEdBQUdoQywrQ0FBUUEsQ0FBUztJQUNuRCxNQUFNLENBQUNpQyxnQkFBZ0JDLGtCQUFrQixHQUFHbEMsK0NBQVFBLENBQVcsRUFBRTtJQUNqRSxNQUFNbUMsdUJBQXVCbEMsNkNBQU1BLENBQWlCO0lBQ3BELE1BQU1tQyxXQUFXbkMsNkNBQU1BLENBQXNCO0lBQzdDLE1BQU1vQyxlQUFlcEMsNkNBQU1BLENBQW1CO0lBQzlDLE1BQU0sQ0FBQ3FDLGlCQUFpQkMsbUJBQW1CLEdBQUd2QywrQ0FBUUEsQ0FBZ0I7SUFFdEVFLGdEQUFTQTttQ0FBQztZQUNSLHdEQUF3RDtZQUN4RCxNQUFNc0MsYUFBYSxnQkFBeUIsT0FBVHBCLE1BQU1xQixFQUFFO1lBQzNDLElBQUlDLG9CQUFvQkMsYUFBYUMsT0FBTyxDQUFDSjtZQUU3QyxJQUFJLENBQUNFLG1CQUFtQjtnQkFDdEIsMkRBQTJEO2dCQUMzREEsb0JBQW9CLFdBQXVCRyxPQUFaekIsTUFBTXFCLEVBQUUsRUFBQyxLQUFpQkssT0FBZEQsS0FBS0UsR0FBRyxJQUFHLEtBQStDLE9BQTVDRCxLQUFLRSxNQUFNLEdBQUdDLFFBQVEsQ0FBQyxJQUFJQyxTQUFTLENBQUMsR0FBRztnQkFDakdQLGFBQWFRLE9BQU8sQ0FBQ1gsWUFBWUU7WUFDbkM7WUFFQVYsYUFBYVU7WUFFYix3Q0FBd0M7WUFDeEMsTUFBTVUsY0FBYyxpQkFBMEIsT0FBVGhDLE1BQU1xQixFQUFFO1lBQzdDLE1BQU1ZLGdCQUFnQlYsYUFBYUMsT0FBTyxDQUFDUTtZQUMzQyxJQUFJQyxlQUFlO2dCQUNqQixJQUFJO29CQUNGLE1BQU1DLFNBQVNDLEtBQUtDLEtBQUssQ0FBQ0g7b0JBQzFCLHFDQUFxQztvQkFDckMsTUFBTTVCLFdBQVc2QixPQUFPRyxHQUFHOzREQUFDLENBQUNDLE1BQWM7Z0NBQ3pDLEdBQUdBLEdBQUc7Z0NBQ05DLFdBQVcsSUFBSWQsS0FBS2EsSUFBSUMsU0FBUzs0QkFDbkM7O29CQUNBakMsWUFBWUQ7Z0JBQ2QsRUFBRSxPQUFPbUMsS0FBSztvQkFDWkMsUUFBUUMsS0FBSyxDQUFDLHlDQUF5Q0Y7Z0JBQ3pEO1lBQ0Y7UUFDRjtrQ0FBRztRQUFDeEMsTUFBTXFCLEVBQUU7S0FBQztJQUVidkMsZ0RBQVNBO21DQUFDO1lBQ1IsSUFBSWlDLHFCQUFxQjRCLE9BQU8sRUFBRTtnQkFDaEM1QixxQkFBcUI0QixPQUFPLENBQUNDLFNBQVMsR0FBRzdCLHFCQUFxQjRCLE9BQU8sQ0FBQ0UsWUFBWTtZQUNwRjtRQUNGO2tDQUFHO1FBQUN4QztRQUFVSTtLQUFVO0lBRXhCLHFEQUFxRDtJQUNyRDNCLGdEQUFTQTttQ0FBQztZQUNSLE1BQU1rRCxjQUFjLGlCQUEwQixPQUFUaEMsTUFBTXFCLEVBQUU7WUFDN0NFLGFBQWFRLE9BQU8sQ0FBQ0MsYUFBYUcsS0FBS1csU0FBUyxDQUFDekM7UUFDbkQ7a0NBQUc7UUFBQ0E7UUFBVUwsTUFBTXFCLEVBQUU7S0FBQztJQUV2QnZDLGdEQUFTQTttQ0FBQztZQUNSLElBQUlrQyxTQUFTMkIsT0FBTyxFQUFFO2dCQUNwQjNCLFNBQVMyQixPQUFPLENBQUNJLEtBQUssQ0FBQ0MsTUFBTSxHQUFHO2dCQUNoQ2hDLFNBQVMyQixPQUFPLENBQUNJLEtBQUssQ0FBQ0MsTUFBTSxHQUFHdEIsS0FBS3VCLEdBQUcsQ0FBQ2pDLFNBQVMyQixPQUFPLENBQUNFLFlBQVksRUFBRSxPQUFPO1lBQ2pGO1FBQ0Y7a0NBQUc7UUFBQ3RDO0tBQU07SUFFViw4QkFBOEI7SUFDOUIsTUFBTTJDLG9CQUFvQixPQUFPQztRQUMvQixNQUFNQyxRQUFRRCxFQUFFRSxhQUFhLENBQUNELEtBQUs7UUFDbkMsSUFBSSxDQUFDQSxPQUFPO1FBRVosTUFBTUUsWUFBc0IsRUFBRTtRQUM5QixJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUgsTUFBTUksTUFBTSxFQUFFRCxJQUFLO1lBQ3JDLE1BQU1FLE9BQU9MLEtBQUssQ0FBQ0csRUFBRTtZQUNyQiwwQkFBMEI7WUFDMUIsSUFBSSxDQUFDRSxLQUFLQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQ2xCLFFBQVFtQixJQUFJLENBQUMsbUNBQW1DSCxLQUFLSSxJQUFJO2dCQUN6RDtZQUNGO1lBRUEsSUFBSTtnQkFDRixNQUFNQyxTQUFTLE1BQU1DLGFBQWFOO2dCQUNsQ0gsVUFBVVUsSUFBSSxDQUFDRjtZQUNqQixFQUFFLE9BQU90QixLQUFLO2dCQUNaQyxRQUFRQyxLQUFLLENBQUMsbUNBQW1DRjtZQUNuRDtRQUNGO1FBRUExQixrQkFBa0IsQ0FBQ21ELE9BQVM7bUJBQUlBO21CQUFTWDthQUFVO1FBQ25ELG1CQUFtQjtRQUNuQixJQUFJckMsYUFBYTBCLE9BQU8sRUFBRTtZQUN4QjFCLGFBQWEwQixPQUFPLENBQUN1QixLQUFLLEdBQUc7UUFDL0I7SUFDRjtJQUVBLGdDQUFnQztJQUNoQyxNQUFNSCxlQUFlLENBQUNOO1FBQ3BCLE9BQU8sSUFBSVUsUUFBUSxDQUFDQyxTQUFTQztZQUMzQixNQUFNQyxTQUFTLElBQUlDO1lBQ25CRCxPQUFPRSxhQUFhLENBQUNmO1lBQ3JCYSxPQUFPRyxNQUFNLEdBQUcsSUFBTUwsUUFBUUUsT0FBT0ksTUFBTTtZQUMzQ0osT0FBT0ssT0FBTyxHQUFHTjtRQUNuQjtJQUNGO0lBRUEsd0JBQXdCO0lBQ3hCLE1BQU1PLGNBQWMsQ0FBQ0M7UUFDbkIvRCxrQkFBa0IsQ0FBQ21ELE9BQVNBLEtBQUthLE1BQU0sQ0FBQyxDQUFDQyxHQUFHeEIsSUFBTUEsTUFBTXNCO0lBQzFEO0lBRUEsTUFBTUcsY0FBYyxPQUFPN0I7UUFDekIsSUFBSUEsR0FBRztZQUNMQSxFQUFFOEIsY0FBYztRQUNsQjtRQUVBLElBQUksQ0FBQzFFLE1BQU0yRSxJQUFJLE1BQU16RSxXQUFXO1FBRWhDLE1BQU0wRSxjQUF1QjtZQUMzQjlELElBQUlJLEtBQUtFLEdBQUcsR0FBR0UsUUFBUTtZQUN2QnVELE1BQU07WUFDTkMsU0FBUzlFLE1BQU0yRSxJQUFJO1lBQ25CM0MsV0FBVyxJQUFJZDtZQUNmNkQsUUFBUXpFLGVBQWUyQyxNQUFNLEdBQUcsSUFBSTNDLGlCQUFpQjBFO1FBQ3ZEO1FBRUFqRixZQUFZLENBQUMyRCxPQUFTO21CQUFJQTtnQkFBTWtCO2FBQVk7UUFDNUMzRSxTQUFTO1FBQ1RNLGtCQUFrQixFQUFFO1FBQ3BCSixhQUFhO1FBRWIsSUFBSTtZQUNGLE1BQU04RSxXQUFXLE1BQU1DLE1BQU0sYUFBYTtnQkFDeENDLFFBQVE7Z0JBQ1JDLFNBQVM7b0JBQ1AsZ0JBQWdCO2dCQUNsQjtnQkFDQUMsTUFBTXpELEtBQUtXLFNBQVMsQ0FBQztvQkFDbkIrQyxTQUFTVixZQUFZRSxPQUFPO29CQUM1QjlDLFdBQVc0QyxZQUFZNUMsU0FBUyxDQUFDdUQsV0FBVztvQkFDNUNuRixXQUFXQTtvQkFDWG9GLFNBQVMvRixNQUFNcUIsRUFBRTtvQkFDakJpRSxRQUFRekUsZUFBZTJDLE1BQU0sR0FBRyxJQUFJM0MsaUJBQWlCMEU7Z0JBQ3ZEO1lBQ0Y7WUFFQSxNQUFNUyxPQUFRLE1BQU1SLFNBQVNTLElBQUk7WUFPakMsSUFBSSxDQUFDVCxTQUFTVSxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU1DLGVBQXdCO29CQUM1QjlFLElBQUksQ0FBQ0ksS0FBS0UsR0FBRyxLQUFLLEdBQUdFLFFBQVE7b0JBQzdCdUQsTUFBTTtvQkFDTkMsU0FBU1csS0FBS3RELEtBQUssSUFBSTtvQkFDdkJILFdBQVcsSUFBSWQ7b0JBQ2YyRSxTQUFTO29CQUNUQyxNQUFNTCxLQUFLSyxJQUFJO2dCQUNqQjtnQkFDQS9GLFlBQVksQ0FBQzJELE9BQVM7MkJBQUlBO3dCQUFNa0M7cUJBQWE7WUFDL0MsT0FBTztnQkFDTCxNQUFNRyxtQkFBNEI7b0JBQ2hDakYsSUFBSSxDQUFDSSxLQUFLRSxHQUFHLEtBQUssR0FBR0UsUUFBUTtvQkFDN0J1RCxNQUFNO29CQUNOQyxTQUFTVyxLQUFLUixRQUFRLElBQUlRLEtBQUtILE9BQU8sSUFBSTFELEtBQUtXLFNBQVMsQ0FBQ2tEO29CQUN6RHpELFdBQVcsSUFBSWQ7Z0JBQ2pCO2dCQUNBbkIsWUFBWSxDQUFDMkQsT0FBUzsyQkFBSUE7d0JBQU1xQztxQkFBaUI7WUFDbkQ7UUFDRixFQUFFLE9BQU81RCxPQUFPO1lBQ2RELFFBQVFDLEtBQUssQ0FBQywrQkFBK0JBO1lBRTdDLE1BQU15RCxlQUF3QjtnQkFDNUI5RSxJQUFJLENBQUNJLEtBQUtFLEdBQUcsS0FBSyxHQUFHRSxRQUFRO2dCQUM3QnVELE1BQU07Z0JBQ05DLFNBQVM7Z0JBQ1Q5QyxXQUFXLElBQUlkO2dCQUNmMkUsU0FBUztZQUNYO1lBRUE5RixZQUFZLENBQUMyRCxPQUFTO3VCQUFJQTtvQkFBTWtDO2lCQUFhO1FBQy9DLFNBQVU7Z0JBRVJuRjtZQURBTixhQUFhO2FBQ2JNLG9CQUFBQSxTQUFTMkIsT0FBTyxjQUFoQjNCLHdDQUFBQSxrQkFBa0J1RixLQUFLO1FBQ3pCO0lBQ0Y7SUFFQSxNQUFNQyxlQUFlO1lBV25CLGNBQWM7UUFDZHhGO1FBWEEscUJBQXFCO1FBQ3JCVixZQUFZLEVBQUU7UUFDZCx3Q0FBd0M7UUFDeEMsTUFBTW1HLGVBQWUsV0FBdUJoRixPQUFaekIsTUFBTXFCLEVBQUUsRUFBQyxLQUFpQkssT0FBZEQsS0FBS0UsR0FBRyxJQUFHLEtBQStDLE9BQTVDRCxLQUFLRSxNQUFNLEdBQUdDLFFBQVEsQ0FBQyxJQUFJQyxTQUFTLENBQUMsR0FBRztRQUNsR2xCLGFBQWE2RjtRQUNiLE1BQU1yRixhQUFhLGdCQUF5QixPQUFUcEIsTUFBTXFCLEVBQUU7UUFDM0NFLGFBQWFRLE9BQU8sQ0FBQ1gsWUFBWXFGO1FBQ2pDLHlCQUF5QjtRQUN6QmpHLFNBQVM7UUFDVE0sa0JBQWtCLEVBQUU7U0FFcEJFLG9CQUFBQSxTQUFTMkIsT0FBTyxjQUFoQjNCLHdDQUFBQSxrQkFBa0J1RixLQUFLO0lBQ3pCO0lBRUEsTUFBTUcsZ0JBQWdCLENBQUN2RDtRQUNyQixJQUFJQSxFQUFFd0QsR0FBRyxLQUFLLFdBQVcsQ0FBQ3hELEVBQUV5RCxRQUFRLEVBQUU7WUFDcEN6RCxFQUFFOEIsY0FBYztZQUNoQkQ7UUFDRjtJQUNGO0lBRUEsTUFBTTZCLG9CQUFvQixPQUFPeEYsSUFBWWdFO1FBQzNDLElBQUk7WUFDRixNQUFNeUIsVUFBVUMsU0FBUyxDQUFDQyxTQUFTLENBQUMzQjtZQUNwQ2xFLG1CQUFtQkU7WUFDbkI0RixXQUFXO2dCQUNUOUYsbUJBQW1CLENBQUN3QixVQUFhQSxZQUFZdEIsS0FBSyxPQUFPc0I7WUFDM0QsR0FBRztRQUNMLEVBQUUsT0FBT0QsT0FBTztZQUNkRCxRQUFRQyxLQUFLLENBQUMsaUNBQWlDQTtRQUNqRDtJQUNGO0lBRUEsTUFBTXdFLGtCQUFrQmpILE9BQU91RCxNQUFNLEdBQUcsS0FBSyxDQUFDckQ7SUFDOUMsTUFBTWdILGNBQWM5RyxTQUFTbUQsTUFBTSxHQUFHO0lBRXRDLHFCQUNFLDhEQUFDekUsaURBQU1BLENBQUNxSSxHQUFHO1FBQ1RDLFNBQVM7WUFBRUMsU0FBUztZQUFHQyxHQUFHO1FBQUc7UUFDN0JDLFNBQVM7WUFBRUYsU0FBUztZQUFHQyxHQUFHO1FBQUU7UUFDNUJFLFlBQVk7WUFBRUMsVUFBVTtZQUFNQyxNQUFNO1FBQVU7UUFDOUNDLFdBQVU7O1lBRVR2SCxTQUFTbUQsTUFBTSxHQUFHLG1CQUNqQiw4REFBQzREO2dCQUFJUSxXQUFVOzBCQUNiLDRFQUFDM0kseURBQU1BO29CQUNMNEksU0FBU3JCO29CQUNUc0IsU0FBUTtvQkFDUkMsTUFBSztvQkFDTEgsV0FBVTtvQkFDVkksT0FBTTs4QkFFTiw0RUFBQzVJLCtIQUFTQTt3QkFBQ3dJLFdBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBSzNCLDhEQUFDUjtnQkFDQ2EsS0FBS2xIO2dCQUNMNkcsV0FBVzlILDhDQUFFQSxDQUNYLHFCQUNBcUgsY0FBYyxpQ0FBaUM7MEJBR2pELDRFQUFDQztvQkFBSVEsV0FBVTs4QkFDYiw0RUFBQzVJLDBEQUFlQTt3QkFBQ2tKLE1BQUs7a0NBQ25CZiw0QkFDQyw4REFBQ3BJLGlEQUFNQSxDQUFDcUksR0FBRzs0QkFFVEMsU0FBUztnQ0FBRUMsU0FBUztnQ0FBR0MsR0FBRzs0QkFBRzs0QkFDN0JDLFNBQVM7Z0NBQUVGLFNBQVM7Z0NBQUdDLEdBQUc7NEJBQUU7NEJBQzVCWSxNQUFNO2dDQUFFYixTQUFTO2dDQUFHQyxHQUFHLENBQUM7NEJBQUc7NEJBQzNCRSxZQUFZO2dDQUFFQyxVQUFVO2dDQUFLQyxNQUFNOzRCQUFVOzRCQUM3Q0MsV0FBVTs7Z0NBRVR2SCxTQUFTZ0MsR0FBRyxDQUFDLENBQUN3RDtvQ0FDYixNQUFNdUMsU0FBU3ZDLFFBQVFULElBQUksS0FBSztvQ0FDaEMscUJBQ0UsOERBQUNyRyxpREFBTUEsQ0FBQ3FJLEdBQUc7d0NBRVRpQixNQUFNO3dDQUNOaEIsU0FBUzs0Q0FBRUMsU0FBUzs0Q0FBR0MsR0FBRzt3Q0FBRzt3Q0FDN0JDLFNBQVM7NENBQUVGLFNBQVM7NENBQUdDLEdBQUc7d0NBQUU7d0NBQzVCRSxZQUFZOzRDQUFFQyxVQUFVOzRDQUFNQyxNQUFNO3dDQUFVO3dDQUM5Q0MsV0FBVzlILDhDQUFFQSxDQUFDLHFDQUFxQ3NJLFNBQVMseUJBQXlCOzs0Q0FFcEZBLHVCQUNDLDhEQUFDaEI7Z0RBQUlRLFdBQVU7MERBQ2IsNEVBQUMvSCxnRUFBZ0JBO29EQUFDd0YsU0FBU1EsUUFBUVIsT0FBTztvREFBRWlELE1BQUs7Ozs7Ozs7Ozs7dURBRWpEekMsUUFBUU8sT0FBTyxpQkFDakIsOERBQUNnQjtnREFBSVEsV0FBVTswREFDYiw0RUFBQ1c7b0RBQUVYLFdBQVU7OERBQW1EL0IsUUFBUVIsT0FBTzs7Ozs7Ozs7OztxRUFHakYsOERBQUMrQjtnREFBSVEsV0FBVTs7a0VBQ2IsOERBQUMvSCxnRUFBZ0JBO3dEQUFDd0YsU0FBU1EsUUFBUVIsT0FBTzs7Ozs7O2tFQUMxQyw4REFBQytCO3dEQUFJUSxXQUFVO2tFQUNiLDRFQUFDWTs0REFDQzlFLE1BQUs7NERBQ0xtRSxTQUFTLElBQU1oQixrQkFBa0JoQixRQUFReEUsRUFBRSxFQUFFd0UsUUFBUVIsT0FBTzs0REFDNUR1QyxXQUFXLGlOQUVWLE9BREMxRyxvQkFBb0IyRSxRQUFReEUsRUFBRSxHQUFHLG9DQUFvQzs0REFFdkVvSCxjQUFXO3NFQUVYLDRFQUFDbkosK0hBQUlBO2dFQUFDc0ksV0FBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs0Q0FNdkIvQixRQUFRUSxJQUFJLGtCQUNYLDhEQUFDZTtnREFBSVEsV0FBVTswREFDWi9CLFFBQVFRLElBQUk7Ozs7Ozs7dUNBbkNaUixRQUFReEUsRUFBRTs7Ozs7Z0NBd0NyQjtnQ0FFQ1osMkJBQ0MsOERBQUMyRztvQ0FBSVEsV0FBVTs4Q0FDYiw0RUFBQ1I7d0NBQUlRLFdBQVU7OzBEQUNiLDhEQUFDYztnREFBS2QsV0FBVTswREFBNEM7Ozs7OzswREFDNUQsOERBQUNjO2dEQUFLZCxXQUFVOzBEQUNkLDRFQUFDYztvREFBS2QsV0FBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBMURwQjs7OztpREFpRU4sOERBQUM3SSxpREFBTUEsQ0FBQ3FJLEdBQUc7NEJBRVRDLFNBQVM7Z0NBQUVDLFNBQVM7Z0NBQUdDLEdBQUc7NEJBQUc7NEJBQzdCQyxTQUFTO2dDQUFFRixTQUFTO2dDQUFHQyxHQUFHOzRCQUFFOzRCQUM1QlksTUFBTTtnQ0FBRWIsU0FBUztnQ0FBR0MsR0FBRyxDQUFDOzRCQUFHOzRCQUMzQkUsWUFBWTtnQ0FBRUMsVUFBVTtnQ0FBTUMsTUFBTTs0QkFBVTs0QkFDOUNDLFdBQVU7OzhDQUVWLDhEQUFDUjtvQ0FBSVEsV0FBVTs4Q0FDYiw0RUFBQ2U7d0NBQUdmLFdBQVU7a0RBQ1h4SCxhQUFhd0ksS0FBSyxDQUFDLElBQUl2RyxHQUFHLENBQUMsQ0FBQ3dHLE1BQU1oRSxzQkFDakMsOERBQUM5RixpREFBTUEsQ0FBQzJKLElBQUk7Z0RBRVZyQixTQUFTO29EQUFFQyxTQUFTO29EQUFHQyxHQUFHO2dEQUFHO2dEQUM3QkMsU0FBUztvREFBRUYsU0FBUztvREFBR0MsR0FBRztnREFBRTtnREFDNUJFLFlBQVk7b0RBQUVxQixPQUFPLE9BQU9qRSxRQUFRO29EQUFNNkMsVUFBVTtvREFBTUMsTUFBTTtnREFBVTtnREFDMUVDLFdBQVU7MERBRVRpQixTQUFTLE1BQU0sV0FBV0E7K0NBTnRCLEdBQVdoRSxPQUFSZ0UsTUFBSyxLQUFTLE9BQU5oRTs7Ozs7Ozs7Ozs7Ozs7OzhDQVl4Qiw4REFBQ3VDO29DQUFJUSxXQUFVOztzREFDYiw4REFBQ1c7NENBQUVYLFdBQVU7c0RBQXlEOzs7Ozs7d0NBR3JFM0gsT0FBT3VELE1BQU0sR0FBRyxrQkFDZiw4REFBQzREOzRDQUFJUSxXQUFVO3NEQUNaM0gsT0FBT29DLEdBQUcsQ0FBQyxDQUFDMEc7Z0RBQ1gsTUFBTUMsV0FBV0QsTUFBTTFILEVBQUUsS0FBS3JCLE1BQU1xQixFQUFFO2dEQUN0QyxxQkFDRSw4REFBQ21IO29EQUVDWCxTQUFTLElBQU0zSCxnQkFBZ0I2STtvREFDL0JuQixXQUFXOUgsOENBQUVBLENBQ1gsdUZBQ0FrSixXQUNJLGdGQUNBOzhEQUdMRCxNQUFNbEYsSUFBSTttREFUTmtGLE1BQU0xSCxFQUFFOzs7Ozs0Q0FZbkI7Ozs7O2lFQUdGLDhEQUFDa0g7NENBQUVYLFdBQVU7c0RBQXdCOzs7Ozs7Ozs7Ozs7OENBSXpDLDhEQUFDUjtvQ0FBSVEsV0FBVTs4Q0FDWjt3Q0FDQzt3Q0FDQTt3Q0FDQTt3Q0FDQTtxQ0FDRCxDQUFDdkYsR0FBRyxDQUFDLENBQUM0RyxRQUFRcEUsc0JBQ2IsOERBQUMyRDs0Q0FFQ1gsU0FBUyxJQUFNckgsU0FBU3lJOzRDQUN4QnJCLFdBQVU7NENBQ1Y3RSxPQUFPO2dEQUFFbUcsZ0JBQWdCLEdBQWMsT0FBWHJFLFFBQVEsSUFBRzs0Q0FBSTtzREFFMUNvRTsyQ0FMSUE7Ozs7Ozs7Ozs7OzJCQTVEUDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBMkVkLDhEQUFDbEssaURBQU1BLENBQUNxSSxHQUFHO2dCQUNUaUIsTUFBTTtnQkFDTlQsV0FBVTtnQkFDVkosU0FBUztvQkFBRUQsR0FBR0osY0FBYyxJQUFJLENBQUM7b0JBQUtnQyxPQUFPaEMsY0FBYyxJQUFJO2dCQUFLO2dCQUNwRU0sWUFBWTtvQkFBRS9ELE1BQU07b0JBQVUwRixXQUFXO29CQUFLQyxTQUFTO2dCQUFHOzBCQUUxRCw0RUFBQ0M7b0JBQUtDLFVBQVV2RTtvQkFBYTRDLFdBQVU7O3dCQUVwQy9HLGVBQWUyQyxNQUFNLEdBQUcsbUJBQ3ZCLDhEQUFDNEQ7NEJBQUlRLFdBQVU7c0NBQ1ovRyxlQUFld0IsR0FBRyxDQUFDLENBQUNtSCxPQUFPM0Usc0JBQzFCLDhEQUFDdUM7b0NBQWdCUSxXQUFVOztzREFDekIsOERBQUM2Qjs0Q0FDQ0MsS0FBS0Y7NENBQ0xHLEtBQUssWUFBa0IsT0FBTjlFOzRDQUNqQitDLFdBQVU7Ozs7OztzREFFWiw4REFBQ1k7NENBQ0M5RSxNQUFLOzRDQUNMbUUsU0FBUyxJQUFNakQsWUFBWUM7NENBQzNCK0MsV0FBVTs0Q0FDVjdFLE9BQU87Z0RBQUU2RyxpQkFBaUI7NENBQXNCO3NEQUVoRCw0RUFBQ3JLLGdJQUFDQTtnREFBQ3FJLFdBQVU7Ozs7Ozs7Ozs7OzttQ0FaUC9DOzs7Ozs7Ozs7O3NDQW1CaEIsOERBQUN1Qzs0QkFBSVEsV0FBVTtzQ0FDYiw0RUFBQ1I7Z0NBQUlRLFdBQVU7O2tEQUNiLDhEQUFDaUM7d0NBQ0M1QixLQUFLakg7d0NBQ0xrRCxPQUFPM0Q7d0NBQ1B1SixVQUFVLENBQUMzRyxJQUFNM0MsU0FBUzJDLEVBQUU0RyxNQUFNLENBQUM3RixLQUFLO3dDQUN4QzhGLFdBQVd0RDt3Q0FDWHVELGFBQVk7d0NBQ1pDLFVBQVV6Sjt3Q0FDVjBKLE1BQU07d0NBQ052QyxXQUFVO3dDQUNWN0UsT0FBTzs0Q0FDTHFILFVBQVU7NENBQ1ZwSCxRQUFRO3dDQUNWO3dDQUNBcUgsU0FBUyxDQUFDbEg7NENBQ1IsTUFBTTRHLFNBQVM1RyxFQUFFNEcsTUFBTTs0Q0FDdkJBLE9BQU9oSCxLQUFLLENBQUNDLE1BQU0sR0FBRzs0Q0FDdEIrRyxPQUFPaEgsS0FBSyxDQUFDQyxNQUFNLEdBQUd0QixLQUFLdUIsR0FBRyxDQUFDOEcsT0FBT2xILFlBQVksRUFBRSxPQUFPO3dDQUM3RDs7Ozs7O2tEQUdGLDhEQUFDdUU7d0NBQUlRLFdBQVU7OzBEQUNiLDhEQUFDbkksc0VBQVlBOztrRUFDWCw4REFBQ0csNkVBQW1CQTt3REFBQzBLLE9BQU87a0VBQzFCLDRFQUFDOUI7NERBQ0M5RSxNQUFLOzREQUNMa0UsV0FBVTs0REFDVnNDLFVBQVUsQ0FBQ2hEOzs4RUFFWCw4REFBQ3dCO29FQUFLZCxXQUFVOzhFQUNiNUgsTUFBTTZELElBQUk7Ozs7Ozs4RUFFYiw4REFBQ3JFLGdJQUFXQTtvRUFBQ29JLFdBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7O2tFQUczQiw4REFBQ2xJLDZFQUFtQkE7d0RBQ2xCNkssT0FBTTt3REFDTjNDLFdBQVU7a0VBRVR6SCxnQ0FDQyw4REFBQ1IsMEVBQWdCQTs0REFBQ3VLLFFBQVE7NERBQUN0QyxXQUFVO3NFQUFnQjs7Ozs7bUVBR25EM0gsT0FBT3VELE1BQU0sS0FBSyxrQkFDcEIsOERBQUM3RCwwRUFBZ0JBOzREQUFDdUssUUFBUTs0REFBQ3RDLFdBQVU7c0VBQWdCOzs7OzttRUFJckQzSCxPQUFPb0MsR0FBRyxDQUFDLENBQUMwRzs0REFDVixNQUFNQyxXQUFXRCxNQUFNMUgsRUFBRSxLQUFLckIsTUFBTXFCLEVBQUU7NERBQ3RDLHFCQUNFLDhEQUFDMUIsMEVBQWdCQTtnRUFFZmtJLFNBQVMsSUFBTTNILGdCQUFnQjZJO2dFQUMvQm5CLFdBQVcsb0ZBSVYsT0FIQ29CLFdBQ0ksMkJBQ0E7O2tGQUdOLDhEQUFDTjt3RUFBS2QsV0FBVTtrRkFBd0JtQixNQUFNbEYsSUFBSTs7Ozs7O29FQUNqRG1GLDBCQUFZLDhEQUFDTjt3RUFBS2QsV0FBVTtrRkFBNEM7Ozs7Ozs7K0RBVHBFbUIsTUFBTTFILEVBQUU7Ozs7O3dEQVluQjs7Ozs7Ozs7Ozs7OzBEQUtOLDhEQUFDK0Y7Z0RBQUlRLFdBQVU7O2tFQUNiLDhEQUFDM0kseURBQU1BO3dEQUNMeUUsTUFBSzt3REFDTHdHLFVBQVUsQ0FBQzNKLE1BQU0yRSxJQUFJLE1BQU16RTt3REFDM0JzSCxNQUFLO3dEQUNMSCxXQUFVO2tFQUVYbkgsMEJBQ0MsOERBQUN0QixnSUFBT0E7NERBQUN5SSxXQUFVOzs7OztpRkFFbkIsOERBQUMxSSxnSUFBSUE7NERBQUMwSSxXQUFVOzs7Ozs7Ozs7OztrRUFHcEIsOERBQUNySDt3REFDQzBILEtBQUtoSDt3REFDTHlDLE1BQUs7d0RBQ0w4RyxRQUFRO3dEQUNSQyxRQUFPO3dEQUNQWCxVQUFVNUc7d0RBQ1YwRSxXQUFVO3dEQUNWc0MsVUFBVXpKOzs7Ozs7a0VBRVosOERBQUN4Qix5REFBTUE7d0RBQ0x5RSxNQUFLO3dEQUNMb0UsU0FBUTt3REFDUkMsTUFBSzt3REFDTEYsU0FBUztnRUFBTTVHO29FQUFBQSx3QkFBQUEsYUFBYTBCLE9BQU8sY0FBcEIxQiw0Q0FBQUEsc0JBQXNCeUosS0FBSzs7d0RBQzFDUixVQUFVeko7d0RBQ1ZtSCxXQUFVO3dEQUNWSSxPQUFNO2tFQUVOLDRFQUFDM0ksZ0lBQVNBOzREQUFDdUksV0FBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVXZDO0dBN2hCZ0I3SDtLQUFBQSIsInNvdXJjZXMiOlsiL2hvbWUvbmljaG9sYWkvRG9jdW1lbnRzL2Rldi9tdWx0aS1hZ2VudF9jaGF0X2ludGVyZmFjZS9zcmMvY29tcG9uZW50cy9jaGF0LWludGVyZmFjZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCJcblxuaW1wb3J0IHR5cGUgUmVhY3QgZnJvbSBcInJlYWN0XCJcblxuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7IG1vdGlvbiwgQW5pbWF0ZVByZXNlbmNlIH0gZnJvbSBcImZyYW1lci1tb3Rpb25cIlxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9idXR0b25cIlxuaW1wb3J0IHsgU2VuZCwgTG9hZGVyMiwgU3F1YXJlUGVuLCBQYXBlcmNsaXAsIENvcHksIFgsIENoZXZyb25Eb3duIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiXG5pbXBvcnQge1xuICBEcm9wZG93bk1lbnUsXG4gIERyb3Bkb3duTWVudUNvbnRlbnQsXG4gIERyb3Bkb3duTWVudUl0ZW0sXG4gIERyb3Bkb3duTWVudVRyaWdnZXIsXG59IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvZHJvcGRvd24tbWVudVwiXG5pbXBvcnQgeyBNYXJrZG93blJlbmRlcmVyIH0gZnJvbSBcIi4vbWFya2Rvd24tcmVuZGVyZXJcIlxuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBBZ2VudCB9IGZyb20gXCJAL2xpYi90eXBlc1wiXG5pbXBvcnQgeyBjbiB9IGZyb20gXCJAL2xpYi91dGlsc1wiXG5cbmludGVyZmFjZSBDaGF0SW50ZXJmYWNlUHJvcHMge1xuICBhZ2VudDogQWdlbnRcbiAgYWdlbnRzOiBBZ2VudFtdXG4gIG9uQWdlbnRTZWxlY3RlZDogKGFnZW50OiBBZ2VudCkgPT4gdm9pZFxuICBpc0FnZW50c0xvYWRpbmc6IGJvb2xlYW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIENoYXRJbnRlcmZhY2Uoe1xuICBhZ2VudCxcbiAgYWdlbnRzLFxuICBvbkFnZW50U2VsZWN0ZWQsXG4gIGlzQWdlbnRzTG9hZGluZyxcbn06IENoYXRJbnRlcmZhY2VQcm9wcykge1xuICBjb25zdCBoZXJvR3JlZXRpbmcgPSBcImhlbGxvLCB1c2VyXCJcbiAgY29uc3QgW21lc3NhZ2VzLCBzZXRNZXNzYWdlc10gPSB1c2VTdGF0ZTxNZXNzYWdlW10+KFtdKVxuICBjb25zdCBbaW5wdXQsIHNldElucHV0XSA9IHVzZVN0YXRlKFwiXCIpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nlc3Npb25JZCwgc2V0U2Vzc2lvbklkXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIilcbiAgY29uc3QgW3NlbGVjdGVkSW1hZ2VzLCBzZXRTZWxlY3RlZEltYWdlc10gPSB1c2VTdGF0ZTxzdHJpbmdbXT4oW10pXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PihudWxsKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3QgW2NvcGllZE1lc3NhZ2VJZCwgc2V0Q29waWVkTWVzc2FnZUlkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBVc2UgYWdlbnQtc3BlY2lmaWMgc2Vzc2lvbiBJRDogY2hhdC1zZXNzaW9uLXthZ2VudElkfVxuICAgIGNvbnN0IHNlc3Npb25LZXkgPSBgY2hhdC1zZXNzaW9uLSR7YWdlbnQuaWR9YFxuICAgIGxldCBleGlzdGluZ1Nlc3Npb25JZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHNlc3Npb25LZXkpXG5cbiAgICBpZiAoIWV4aXN0aW5nU2Vzc2lvbklkKSB7XG4gICAgICAvLyBHZW5lcmF0ZSBuZXcgc2Vzc2lvbklEIHVzaW5nIHRpbWVzdGFtcCBhbmQgcmFuZG9tIHN0cmluZ1xuICAgICAgZXhpc3RpbmdTZXNzaW9uSWQgPSBgc2Vzc2lvbi0ke2FnZW50LmlkfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDE1KX1gXG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShzZXNzaW9uS2V5LCBleGlzdGluZ1Nlc3Npb25JZClcbiAgICB9XG5cbiAgICBzZXRTZXNzaW9uSWQoZXhpc3RpbmdTZXNzaW9uSWQpXG5cbiAgICAvLyBMb2FkIGV4aXN0aW5nIG1lc3NhZ2VzIGZvciB0aGlzIGFnZW50XG4gICAgY29uc3QgbWVzc2FnZXNLZXkgPSBgY2hhdC1tZXNzYWdlcy0ke2FnZW50LmlkfWBcbiAgICBjb25zdCBzYXZlZE1lc3NhZ2VzID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0obWVzc2FnZXNLZXkpXG4gICAgaWYgKHNhdmVkTWVzc2FnZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc2F2ZWRNZXNzYWdlcylcbiAgICAgICAgLy8gRW5zdXJlIHRpbWVzdGFtcHMgYXJlIERhdGUgb2JqZWN0c1xuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IHBhcnNlZC5tYXAoKG1zZzogYW55KSA9PiAoe1xuICAgICAgICAgIC4uLm1zZyxcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKG1zZy50aW1lc3RhbXApLFxuICAgICAgICB9KSlcbiAgICAgICAgc2V0TWVzc2FnZXMobWVzc2FnZXMpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltjaGF0XSBGYWlsZWQgdG8gbG9hZCBzYXZlZCBtZXNzYWdlczpcIiwgZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2FnZW50LmlkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtZXNzYWdlc0NvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICBtZXNzYWdlc0NvbnRhaW5lclJlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzQ29udGFpbmVyUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgfVxuICB9LCBbbWVzc2FnZXMsIGlzTG9hZGluZ10pXG5cbiAgLy8gU2F2ZSBtZXNzYWdlcyB0byBsb2NhbFN0b3JhZ2Ugd2hlbmV2ZXIgdGhleSBjaGFuZ2VcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBtZXNzYWdlc0tleSA9IGBjaGF0LW1lc3NhZ2VzLSR7YWdlbnQuaWR9YFxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG1lc3NhZ2VzS2V5LCBKU09OLnN0cmluZ2lmeShtZXNzYWdlcykpXG4gIH0sIFttZXNzYWdlcywgYWdlbnQuaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCJcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gTWF0aC5taW4oaW5wdXRSZWYuY3VycmVudC5zY3JvbGxIZWlnaHQsIDE2MCkgKyBcInB4XCJcbiAgICB9XG4gIH0sIFtpbnB1dF0pXG5cbiAgLy8gSGFuZGxlIGltYWdlIGZpbGUgc2VsZWN0aW9uXG4gIGNvbnN0IGhhbmRsZUltYWdlU2VsZWN0ID0gYXN5bmMgKGU6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZmlsZXMgPSBlLmN1cnJlbnRUYXJnZXQuZmlsZXNcbiAgICBpZiAoIWZpbGVzKSByZXR1cm5cblxuICAgIGNvbnN0IG5ld0ltYWdlczogc3RyaW5nW10gPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXVxuICAgICAgLy8gT25seSBhY2NlcHQgaW1hZ2UgZmlsZXNcbiAgICAgIGlmICghZmlsZS50eXBlLnN0YXJ0c1dpdGgoXCJpbWFnZS9cIikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW2NoYXRdIFNraXBwaW5nIG5vbi1pbWFnZSBmaWxlOlwiLCBmaWxlLm5hbWUpXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NCA9IGF3YWl0IGZpbGVUb0Jhc2U2NChmaWxlKVxuICAgICAgICBuZXdJbWFnZXMucHVzaChiYXNlNjQpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIltjaGF0XSBGYWlsZWQgdG8gY29udmVydCBpbWFnZTpcIiwgZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIHNldFNlbGVjdGVkSW1hZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgLi4ubmV3SW1hZ2VzXSlcbiAgICAvLyBSZXNldCBmaWxlIGlucHV0XG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9IFwiXCJcbiAgICB9XG4gIH1cblxuICAvLyBDb252ZXJ0IGZpbGUgdG8gYmFzZTY0IHN0cmluZ1xuICBjb25zdCBmaWxlVG9CYXNlNjQgPSAoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpXG4gICAgICByZWFkZXIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShyZWFkZXIucmVzdWx0IGFzIHN0cmluZylcbiAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0XG4gICAgfSlcbiAgfVxuXG4gIC8vIFJlbW92ZSBzZWxlY3RlZCBpbWFnZVxuICBjb25zdCByZW1vdmVJbWFnZSA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgc2V0U2VsZWN0ZWRJbWFnZXMoKHByZXYpID0+IHByZXYuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBpbmRleCkpXG4gIH1cblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IGFzeW5jIChlPzogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XG4gICAgaWYgKGUpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgIH1cblxuICAgIGlmICghaW5wdXQudHJpbSgpIHx8IGlzTG9hZGluZykgcmV0dXJuXG5cbiAgICBjb25zdCB1c2VyTWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgIGlkOiBEYXRlLm5vdygpLnRvU3RyaW5nKCksXG4gICAgICByb2xlOiBcInVzZXJcIixcbiAgICAgIGNvbnRlbnQ6IGlucHV0LnRyaW0oKSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgIGltYWdlczogc2VsZWN0ZWRJbWFnZXMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSW1hZ2VzIDogdW5kZWZpbmVkLFxuICAgIH1cblxuICAgIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgdXNlck1lc3NhZ2VdKVxuICAgIHNldElucHV0KFwiXCIpXG4gICAgc2V0U2VsZWN0ZWRJbWFnZXMoW10pXG4gICAgc2V0SXNMb2FkaW5nKHRydWUpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChcIi9hcGkvY2hhdFwiLCB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG1lc3NhZ2U6IHVzZXJNZXNzYWdlLmNvbnRlbnQsXG4gICAgICAgICAgdGltZXN0YW1wOiB1c2VyTWVzc2FnZS50aW1lc3RhbXAudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudC5pZCxcbiAgICAgICAgICBpbWFnZXM6IHNlbGVjdGVkSW1hZ2VzLmxlbmd0aCA+IDAgPyBzZWxlY3RlZEltYWdlcyA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSksXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMge1xuICAgICAgICBlcnJvcj86IHN0cmluZ1xuICAgICAgICBoaW50Pzogc3RyaW5nXG4gICAgICAgIHJlc3BvbnNlPzogc3RyaW5nXG4gICAgICAgIG1lc3NhZ2U/OiBzdHJpbmdcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2U6IE1lc3NhZ2UgPSB7XG4gICAgICAgICAgaWQ6IChEYXRlLm5vdygpICsgMSkudG9TdHJpbmcoKSxcbiAgICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICAgIGNvbnRlbnQ6IGRhdGEuZXJyb3IgfHwgXCJGYWlsZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgd2ViaG9vay5cIixcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgICBoaW50OiBkYXRhLmhpbnQsXG4gICAgICAgIH1cbiAgICAgICAgc2V0TWVzc2FnZXMoKHByZXYpID0+IFsuLi5wcmV2LCBlcnJvck1lc3NhZ2VdKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXNzaXN0YW50TWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICBpZDogKERhdGUubm93KCkgKyAxKS50b1N0cmluZygpLFxuICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgY29udGVudDogZGF0YS5yZXNwb25zZSB8fCBkYXRhLm1lc3NhZ2UgfHwgSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICB9XG4gICAgICAgIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgYXNzaXN0YW50TWVzc2FnZV0pXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbdjBdIEVycm9yIHNlbmRpbmcgbWVzc2FnZTpcIiwgZXJyb3IpXG5cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgaWQ6IChEYXRlLm5vdygpICsgMSkudG9TdHJpbmcoKSxcbiAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgY29udGVudDogXCJTb3JyeSwgSSBlbmNvdW50ZXJlZCBhbiBlcnJvciBwcm9jZXNzaW5nIHlvdXIgbWVzc2FnZS4gUGxlYXNlIHRyeSBhZ2Fpbi5cIixcbiAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgfVxuXG4gICAgICBzZXRNZXNzYWdlcygocHJldikgPT4gWy4uLnByZXYsIGVycm9yTWVzc2FnZV0pXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdGFydE5ld0NoYXQgPSAoKSA9PiB7XG4gICAgLy8gQ2xlYXIgYWxsIG1lc3NhZ2VzXG4gICAgc2V0TWVzc2FnZXMoW10pXG4gICAgLy8gR2VuZXJhdGUgbmV3IHNlc3Npb25JRCBmb3IgdGhpcyBhZ2VudFxuICAgIGNvbnN0IG5ld1Nlc3Npb25JZCA9IGBzZXNzaW9uLSR7YWdlbnQuaWR9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTUpfWBcbiAgICBzZXRTZXNzaW9uSWQobmV3U2Vzc2lvbklkKVxuICAgIGNvbnN0IHNlc3Npb25LZXkgPSBgY2hhdC1zZXNzaW9uLSR7YWdlbnQuaWR9YFxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHNlc3Npb25LZXksIG5ld1Nlc3Npb25JZClcbiAgICAvLyBDbGVhciBpbnB1dCBhbmQgaW1hZ2VzXG4gICAgc2V0SW5wdXQoXCJcIilcbiAgICBzZXRTZWxlY3RlZEltYWdlcyhbXSlcbiAgICAvLyBGb2N1cyBpbnB1dFxuICAgIGlucHV0UmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBzZW5kTWVzc2FnZSgpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ29weU1lc3NhZ2UgPSBhc3luYyAoaWQ6IHN0cmluZywgY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvbnRlbnQpXG4gICAgICBzZXRDb3BpZWRNZXNzYWdlSWQoaWQpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgc2V0Q29waWVkTWVzc2FnZUlkKChjdXJyZW50KSA9PiAoY3VycmVudCA9PT0gaWQgPyBudWxsIDogY3VycmVudCkpXG4gICAgICB9LCAxMjAwKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW2NoYXRdIEZhaWxlZCB0byBjb3B5IG1lc3NhZ2VcIiwgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2FuU3dpdGNoQWdlbnRzID0gYWdlbnRzLmxlbmd0aCA+IDAgJiYgIWlzQWdlbnRzTG9hZGluZ1xuICBjb25zdCBoYXNNZXNzYWdlcyA9IG1lc3NhZ2VzLmxlbmd0aCA+IDBcblxuICByZXR1cm4gKFxuICAgIDxtb3Rpb24uZGl2XG4gICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAsIHk6IDM1IH19XG4gICAgICBhbmltYXRlPXt7IG9wYWNpdHk6IDEsIHk6IDAgfX1cbiAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuODUsIGVhc2U6IFwiZWFzZU91dFwiIH19XG4gICAgICBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGgtZnVsbCB3LWZ1bGwgZmxleC1jb2wgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtWzIuNXJlbV0gYmctZ3JhZGllbnQtdG8tYiBmcm9tLXdoaXRlLzAgdmlhLXdoaXRlLzE1IHRvLXdoaXRlLzQ1IHB4LTQgcHktOCBzaGFkb3ctWzBfMTVweF8zNXB4X3JnYmEoNDUsNDUsNDUsMC4xKSwwXzBfMF8xcHhfcmdiYSgyNTUsMjU1LDI1NSwwLjI1KV9pbnNldCwwXzE1cHhfMjVweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMTIpX2luc2V0XSBiYWNrZHJvcC1ibHVyLXhsIGRhcms6YmctZ3JhZGllbnQtdG8tYiBkYXJrOmZyb20tdHJhbnNwYXJlbnQgZGFyazp2aWEtd2hpdGUvNSBkYXJrOnRvLXdoaXRlLzIwIGRhcms6c2hhZG93LVswXzEycHhfMjVweF9yZ2JhKDAsMCwwLDAuMzUpLDBfMF8wXzFweF9yZ2JhKDI1NSwyNTUsMjU1LDAuMDYpX2luc2V0LDBfMTJweF8yMHB4X3JnYmEoMjU1LDI1NSwyNTUsMC4wNClfaW5zZXRdIHNtOnB4LTggc206cHktMTBcIlxuICAgID5cbiAgICAgIHttZXNzYWdlcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBsZWZ0LTggdG9wLTggei0xMFwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9e3N0YXJ0TmV3Q2hhdH1cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJncm91cCBoLTExIHctMTEgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci13aGl0ZS8yNSBiZy13aGl0ZS8xNSB0ZXh0LXdoaXRlIHNoYWRvdy1bMF8ycHhfNnB4X3JnYmEoMCwwLDAsMC4xMildIGJhY2tkcm9wLWJsdXIgdHJhbnNpdGlvbiBob3ZlcjpiZy13aGl0ZS8yNVwiXG4gICAgICAgICAgICB0aXRsZT1cIlN0YXJ0IGEgZnJlc2ggY29udmVyc2F0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3F1YXJlUGVuIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXttZXNzYWdlc0NvbnRhaW5lclJlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICBcInB4LTEgcHQtNCBzbTpweC0wXCIsXG4gICAgICAgICAgaGFzTWVzc2FnZXMgPyBcImZsZXgtMSBvdmVyZmxvdy15LWF1dG8gcGItMTBcIiA6IFwicGItNlwiXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBtYXgtdy1bNTJyZW1dIHNwYWNlLXktMTAgcHgtMiBzbTpweC00XCI+XG4gICAgICAgICAgPEFuaW1hdGVQcmVzZW5jZSBtb2RlPVwid2FpdFwiPlxuICAgICAgICAgICAge2hhc01lc3NhZ2VzID8gKFxuICAgICAgICAgICAgICA8bW90aW9uLmRpdlxuICAgICAgICAgICAgICAgIGtleT1cImNvbnZlcnNhdGlvblwiXG4gICAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAzMCB9fVxuICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTIwIH19XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC42LCBlYXNlOiBcImVhc2VPdXRcIiB9fVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNwYWNlLXktMTBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge21lc3NhZ2VzLm1hcCgobWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXNVc2VyID0gbWVzc2FnZS5yb2xlID09PSBcInVzZXJcIlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e21lc3NhZ2UuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgbGF5b3V0XG4gICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAxNSB9fVxuICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb249e3sgZHVyYXRpb246IDAuMzUsIGVhc2U6IFwiZWFzZU91dFwiIH19XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcIm1lc3NhZ2UtZnJhbWUgZmxleCBmbGV4LWNvbCBnYXAtM1wiLCBpc1VzZXIgPyBcIml0ZW1zLWVuZCB0ZXh0LXJpZ2h0XCIgOiBcIlwiKX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtpc1VzZXIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYnViYmxlIHVzZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE1hcmtkb3duUmVuZGVyZXIgY29udGVudD17bWVzc2FnZS5jb250ZW50fSB0b25lPVwiYnViYmxlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiBtZXNzYWdlLmlzRXJyb3IgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1kZXN0cnVjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzc05hbWU9XCJ3aGl0ZXNwYWNlLXByZS13cmFwIGJyZWFrLXdvcmRzIGxlYWRpbmctcmVsYXhlZFwiPnttZXNzYWdlLmNvbnRlbnR9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgdGV4dC1zbSB0ZXh0LWNoYXJjb2FsIGRhcms6dGV4dC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxNYXJrZG93blJlbmRlcmVyIGNvbnRlbnQ9e21lc3NhZ2UuY29udGVudH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtdC00IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktZW5kIGdhcC0zIGJvcmRlci10IGJvcmRlci13aGl0ZS8xMCBwdC0zIG9wYWNpdHktNTAgdHJhbnNpdGlvbiBob3ZlcjpvcGFjaXR5LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ29weU1lc3NhZ2UobWVzc2FnZS5pZCwgbWVzc2FnZS5jb250ZW50KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YGlubGluZS1mbGV4IGgtNyB3LTcgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQgYm9yZGVyIGJvcmRlci13aGl0ZS8yMCBiZy13aGl0ZS84IHRleHQtd2hpdGUvNzAgc2hhZG93LVswXzJweF81cHhfcmdiYSgwLDAsMCwwLjA3KV0gYmFja2Ryb3AtYmx1ciB0cmFuc2l0aW9uLXRyYW5zZm9ybSBkdXJhdGlvbi0xNTAgaG92ZXI6Ymctd2hpdGUvMTggJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkTWVzc2FnZUlkID09PSBtZXNzYWdlLmlkID8gXCJzY2FsZS05MCBiZy13aGl0ZS8yMCB0ZXh0LXdoaXRlXCIgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJDb3B5IHJlc3BvbnNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Q29weSBjbGFzc05hbWU9XCJoLTIuNSB3LTIuNVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICAgIHttZXNzYWdlLmhpbnQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItYWNjZW50LzYwIGJnLWFjY2VudC80MCBweC0zIHB5LTIgdGV4dC14cyB0ZXh0LWNoYXJjb2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHttZXNzYWdlLmhpbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L21vdGlvbi5kaXY+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1mcmFtZSBmbGV4IGZsZXgtY29sIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgdGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ1cHBlcmNhc2UgdHJhY2tpbmctWzAuMjVlbV0gdGV4dC13aGl0ZS83MFwiPkNvcnJlc3BvbmRlbnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleCBoLTMgdy0yNCBvdmVyZmxvdy1oaWRkZW4gcm91bmRlZC1mdWxsIGJnLXdoaXRlLzEwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSBpbnNldC15LTAgdy0xLzIgYW5pbWF0ZS1bc2hpbW1lcl8xLjRzX2luZmluaXRlXSBiZy13aGl0ZS80MFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgICAgICAgICBrZXk9XCJlbXB0eS1zdGF0ZVwiXG4gICAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiA2MCB9fVxuICAgICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSwgeTogMCB9fVxuICAgICAgICAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCwgeTogLTIwIH19XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC42NSwgZWFzZTogXCJlYXNlT3V0XCIgfX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4IG1pbi1oLVs0MHZoXSBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTYgdGV4dC1jZW50ZXJcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT1cImZvbnQtaGVhZGluZyB0ZXh0LVs3cmVtXSBsb3dlcmNhc2UgdHJhY2tpbmctdGlnaHQgdGV4dC13aGl0ZS84NSBkcm9wLXNoYWRvdy1bMF8xMnB4XzMwcHhfcmdiYSgwLDAsMCwwLjQpXVwiPlxuICAgICAgICAgICAgICAgICAgICB7aGVyb0dyZWV0aW5nLnNwbGl0KFwiXCIpLm1hcCgoY2hhciwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8bW90aW9uLnNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YCR7Y2hhcn0tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwLCB5OiAxOCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxLCB5OiAwIH19XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uPXt7IGRlbGF5OiAwLjE1ICsgaW5kZXggKiAwLjA1LCBkdXJhdGlvbjogMC4zNSwgZWFzZTogXCJlYXNlT3V0XCIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoYXIgPT09IFwiIFwiID8gXCJcXHUwMEEwXCIgOiBjaGFyfVxuICAgICAgICAgICAgICAgICAgICAgIDwvbW90aW9uLnNwYW4+XG4gICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwidy1mdWxsIG1heC13LTN4bCBzcGFjZS15LTRcIj5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtWzAuNnJlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjRlbV0gdGV4dC13aGl0ZS81NVwiPlxuICAgICAgICAgICAgICAgICAgICBTZWxlY3QgYSBjb3JyZXNwb25kZW50IHRvIGJlZ2luXG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICB7YWdlbnRzLmxlbmd0aCA+IDAgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAge2FnZW50cy5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGVudHJ5LmlkID09PSBhZ2VudC5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17ZW50cnkuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25BZ2VudFNlbGVjdGVkKGVudHJ5KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJyb3VuZGVkLWZ1bGwgYm9yZGVyIHB4LTQgcHktMiB0ZXh0LVswLjY1cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMzVlbV0gdHJhbnNpdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImJvcmRlci13aGl0ZS8yNSBiZy13aGl0ZS8yNSB0ZXh0LXdoaXRlIHNoYWRvdy1bMF81cHhfMjBweF9yZ2JhKDAsMCwwLDAuMzUpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJib3JkZXItd2hpdGUvMTAgYmctd2hpdGUvNSB0ZXh0LXdoaXRlLzcwIGhvdmVyOmJvcmRlci13aGl0ZS8zMCBob3Zlcjp0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2VudHJ5Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtc20gdGV4dC13aGl0ZS82MFwiPk5vIGFnZW50cyBhdmFpbGFibGUgeWV0LjwvcD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImdyaWQgdy1mdWxsIG1heC13LTJ4bCBnYXAtNCBzbTpncmlkLWNvbHMtMlwiPlxuICAgICAgICAgICAgICAgICAge1tcbiAgICAgICAgICAgICAgICAgICAgXCJIZWxwIG1lIGJyYWluc3Rvcm0gaWRlYXMgZm9yIGEgbmV3IG1vYmlsZSBhcHBcIixcbiAgICAgICAgICAgICAgICAgICAgXCJHZW5lcmF0ZSBjcmVhdGl2ZSB3cml0aW5nIHByb21wdHMgZm9yIGEgZmFudGFzeSBub3ZlbFwiLFxuICAgICAgICAgICAgICAgICAgICBcIlN1Z2dlc3QgaW5ub3ZhdGl2ZSBtYXJrZXRpbmcgc3RyYXRlZ2llcyBmb3IgYSBzdGFydHVwXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiQ3JlYXRlIGEgbGlzdCBvZiB1bmlxdWUgcHJvZHVjdCBuYW1lcyBmb3IgYSB0ZWNoIGNvbXBhbnlcIixcbiAgICAgICAgICAgICAgICAgIF0ubWFwKChwcm9tcHQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e3Byb21wdH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRJbnB1dChwcm9tcHQpfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInNjcm9sbC1yZXZlYWwgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1ib3JkZXIvMzAgYmctd2hpdGUvODAgcC00IHRleHQtbGVmdCB0ZXh0LXNtIHRleHQtY2hhcmNvYWwgc2hhZG93LXNtIHRyYW5zaXRpb24gaG92ZXI6Ym9yZGVyLXJpbmcvNjAgaG92ZXI6Ymctd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGFuaW1hdGlvbkRlbGF5OiBgJHtpbmRleCAqIDUwfW1zYCB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3Byb21wdH1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tb3Rpb24uZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L0FuaW1hdGVQcmVzZW5jZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG1vdGlvbi5kaXZcbiAgICAgICAgbGF5b3V0XG4gICAgICAgIGNsYXNzTmFtZT1cInJlbGF0aXZlIG10LWF1dG8gcHQtNiBwYi00IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTUwMFwiXG4gICAgICAgIGFuaW1hdGU9e3sgeTogaGFzTWVzc2FnZXMgPyAwIDogLTE0MCwgc2NhbGU6IGhhc01lc3NhZ2VzID8gMSA6IDEuMDUgfX1cbiAgICAgICAgdHJhbnNpdGlvbj17eyB0eXBlOiBcInNwcmluZ1wiLCBzdGlmZm5lc3M6IDE2MCwgZGFtcGluZzogMjQgfX1cbiAgICAgID5cbiAgICAgICAgPGZvcm0gb25TdWJtaXQ9e3NlbmRNZXNzYWdlfSBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4IGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgey8qIEltYWdlIHByZXZpZXcgc2VjdGlvbiAqL31cbiAgICAgICAgICB7c2VsZWN0ZWRJbWFnZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1iLTMgZmxleCBmbGV4LXdyYXAgZ2FwLTMgcHgtMyBwdC0yXCI+XG4gICAgICAgICAgICAgIHtzZWxlY3RlZEltYWdlcy5tYXAoKGltYWdlLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXYga2V5PXtpbmRleH0gY2xhc3NOYW1lPVwicmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgc3JjPXtpbWFnZX1cbiAgICAgICAgICAgICAgICAgICAgYWx0PXtgU2VsZWN0ZWQgJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTE2IHctMTYgcm91bmRlZC1sZyBib3JkZXIgYm9yZGVyLWJvcmRlci80MCBvYmplY3QtY292ZXIgc2hhZG93LW1kXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByZW1vdmVJbWFnZShpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIC1yaWdodC0yIC10b3AtMiBmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0ZXh0LXdoaXRlIHNoYWRvdy1tZCBob3ZlcjpvcGFjaXR5LTgwXCJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBcInZhcigtLWNoYXJjb2FsLWluaylcIiB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8WCBjbGFzc05hbWU9XCJoLTMgdy0zXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1hbnVzY3JpcHQtcGFuZWwgdy1bODUlXSBtYXgtdy0yeGwgcC01XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXR9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlKSA9PiBzZXRJbnB1dChlLnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiV3JpdGUgYSBub3RlLCBzaGFyZSBhIGh1bmNoLCBvciBwYXN0ZSBhIGJyaWVm4oCmXCJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgIHJvd3M9ezF9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWluLWgtWzMycHhdIG1heC1oLTMyIHctZnVsbCByZXNpemUtbm9uZSBib3JkZXItMCBiZy10cmFuc3BhcmVudCB0ZXh0LWxnIHRleHQtZm9yZWdyb3VuZCBwbGFjZWhvbGRlcjp0ZXh0LW11dGVkLWZvcmVncm91bmQvODAgZm9jdXM6b3V0bGluZS1ub25lXCJcbiAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgb25JbnB1dD17KGUpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnRcbiAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBcImF1dG9cIlxuICAgICAgICAgICAgICAgICAgdGFyZ2V0LnN0eWxlLmhlaWdodCA9IE1hdGgubWluKHRhcmdldC5zY3JvbGxIZWlnaHQsIDE2MCkgKyBcInB4XCJcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtNFwiPlxuICAgICAgICAgICAgICAgIDxEcm9wZG93bk1lbnU+XG4gICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51VHJpZ2dlciBhc0NoaWxkPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaW5saW5lLWZsZXggbWF4LXctWzEycmVtXSBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC14bCBib3JkZXIgYm9yZGVyLXdoaXRlLzE1IGJnLXdoaXRlLzEwIHB4LTMgcHktMiB0ZXh0LWxlZnQgdGV4dC1bMC41NXJlbV0gdXBwZXJjYXNlIHRyYWNraW5nLVswLjNlbV0gdGV4dC13aGl0ZS83MCBiYWNrZHJvcC1ibHVyIHRyYW5zaXRpb24gaG92ZXI6Ym9yZGVyLXdoaXRlLzMwIGhvdmVyOnRleHQtd2hpdGUgZGlzYWJsZWQ6b3BhY2l0eS01MFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFjYW5Td2l0Y2hBZ2VudHN9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0cnVuY2F0ZSB0ZXh0LXhzIGZvbnQtaGVhZGluZyBub3JtYWwtY2FzZSB0cmFja2luZy1ub3JtYWwgdGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge2FnZW50Lm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxDaGV2cm9uRG93biBjbGFzc05hbWU9XCJoLTMuNSB3LTMuNSB0ZXh0LXdoaXRlLzcwXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudVRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51Q29udGVudFxuICAgICAgICAgICAgICAgICAgICBhbGlnbj1cInN0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWluLXctWzEycmVtXSByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXdoaXRlLzE1IGJnLWJsYWNrLzgwIHAtMiB0ZXh0LXdoaXRlIHNoYWRvdy1bMF8yMHB4XzQwcHhfcmdiYSgwLDAsMCwwLjUpXSBiYWNrZHJvcC1ibHVyXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge2lzQWdlbnRzTG9hZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8RHJvcGRvd25NZW51SXRlbSBkaXNhYmxlZCBjbGFzc05hbWU9XCJ0ZXh0LXdoaXRlLzUwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBHYXRoZXJpbmcgY29ycmVzcG9uZGVudHPigKZcbiAgICAgICAgICAgICAgICAgICAgICA8L0Ryb3Bkb3duTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICkgOiBhZ2VudHMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxEcm9wZG93bk1lbnVJdGVtIGRpc2FibGVkIGNsYXNzTmFtZT1cInRleHQtd2hpdGUvNTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIE5vIGFnZW50cyBjb25maWd1cmVkXG4gICAgICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgIGFnZW50cy5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGVudHJ5LmlkID09PSBhZ2VudC5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPERyb3Bkb3duTWVudUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2VudHJ5LmlkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQWdlbnRTZWxlY3RlZChlbnRyeSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgZmxleCB3LWZ1bGwgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiByb3VuZGVkLXhsIHB4LTMgcHktMiB0ZXh0LXhzIHRyYW5zaXRpb24gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gXCJiZy13aGl0ZS8xNSB0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcInRleHQtd2hpdGUvNzAgaG92ZXI6Ymctd2hpdGUvNSBob3Zlcjp0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImZvbnQtaGVhZGluZyB0ZXh0LXNtXCI+e2VudHJ5Lm5hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpc0FjdGl2ZSAmJiA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LVswLjU1cmVtXSB1cHBlcmNhc2UgdHJhY2tpbmctWzAuM2VtXVwiPkFjdGl2ZTwvc3Bhbj59XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9Ecm9wZG93bk1lbnVDb250ZW50PlxuICAgICAgICAgICAgICAgIDwvRHJvcGRvd25NZW51PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIganVzdGlmeS1lbmQgZ2FwLTMgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMjVlbV0gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17IWlucHV0LnRyaW0oKSB8fCBpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZ3JvdXAgaC0xMiB3LTEyIGZsZXgtc2hyaW5rLTAgcm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci13aGl0ZS8yMCBiZy13aGl0ZS8zMCB0ZXh0LXdoaXRlIHNoYWRvdy1bMF8xMHB4XzI1cHhfcmdiYSgwLDAsMCwwLjIpXSBiYWNrZHJvcC1ibHVyIHRyYW5zaXRpb24gaG92ZXI6Ymctd2hpdGUvNDAgZGlzYWJsZWQ6b3BhY2l0eS01MFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2lzTG9hZGluZyA/IChcbiAgICAgICAgICAgICAgICAgICAgPExvYWRlcjIgY2xhc3NOYW1lPVwiaC00IHctNCBhbmltYXRlLXNwaW5cIiAvPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPFNlbmQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvKlwiXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlSW1hZ2VTZWxlY3R9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtMTEgdy0xMSByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLXdoaXRlLzIwIGJnLXdoaXRlLzEwIHRleHQtd2hpdGUvODAgdHJhbnNpdGlvbiBob3ZlcjpiZy13aGl0ZS8yMCBob3Zlcjp0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiQXR0YWNoIGltYWdlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8UGFwZXJjbGlwIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L21vdGlvbi5kaXY+XG4gICAgPC9tb3Rpb24uZGl2PlxuICApXG59XG4iXSwibmFtZXMiOlsidXNlU3RhdGUiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJtb3Rpb24iLCJBbmltYXRlUHJlc2VuY2UiLCJCdXR0b24iLCJTZW5kIiwiTG9hZGVyMiIsIlNxdWFyZVBlbiIsIlBhcGVyY2xpcCIsIkNvcHkiLCJYIiwiQ2hldnJvbkRvd24iLCJEcm9wZG93bk1lbnUiLCJEcm9wZG93bk1lbnVDb250ZW50IiwiRHJvcGRvd25NZW51SXRlbSIsIkRyb3Bkb3duTWVudVRyaWdnZXIiLCJNYXJrZG93blJlbmRlcmVyIiwiY24iLCJDaGF0SW50ZXJmYWNlIiwiYWdlbnQiLCJhZ2VudHMiLCJvbkFnZW50U2VsZWN0ZWQiLCJpc0FnZW50c0xvYWRpbmciLCJoZXJvR3JlZXRpbmciLCJtZXNzYWdlcyIsInNldE1lc3NhZ2VzIiwiaW5wdXQiLCJzZXRJbnB1dCIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsInNlc3Npb25JZCIsInNldFNlc3Npb25JZCIsInNlbGVjdGVkSW1hZ2VzIiwic2V0U2VsZWN0ZWRJbWFnZXMiLCJtZXNzYWdlc0NvbnRhaW5lclJlZiIsImlucHV0UmVmIiwiZmlsZUlucHV0UmVmIiwiY29waWVkTWVzc2FnZUlkIiwic2V0Q29waWVkTWVzc2FnZUlkIiwic2Vzc2lvbktleSIsImlkIiwiZXhpc3RpbmdTZXNzaW9uSWQiLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiRGF0ZSIsIk1hdGgiLCJub3ciLCJyYW5kb20iLCJ0b1N0cmluZyIsInN1YnN0cmluZyIsInNldEl0ZW0iLCJtZXNzYWdlc0tleSIsInNhdmVkTWVzc2FnZXMiLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJtYXAiLCJtc2ciLCJ0aW1lc3RhbXAiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0Iiwic3RyaW5naWZ5Iiwic3R5bGUiLCJoZWlnaHQiLCJtaW4iLCJoYW5kbGVJbWFnZVNlbGVjdCIsImUiLCJmaWxlcyIsImN1cnJlbnRUYXJnZXQiLCJuZXdJbWFnZXMiLCJpIiwibGVuZ3RoIiwiZmlsZSIsInR5cGUiLCJzdGFydHNXaXRoIiwid2FybiIsIm5hbWUiLCJiYXNlNjQiLCJmaWxlVG9CYXNlNjQiLCJwdXNoIiwicHJldiIsInZhbHVlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwicmVhZEFzRGF0YVVSTCIsIm9ubG9hZCIsInJlc3VsdCIsIm9uZXJyb3IiLCJyZW1vdmVJbWFnZSIsImluZGV4IiwiZmlsdGVyIiwiXyIsInNlbmRNZXNzYWdlIiwicHJldmVudERlZmF1bHQiLCJ0cmltIiwidXNlck1lc3NhZ2UiLCJyb2xlIiwiY29udGVudCIsImltYWdlcyIsInVuZGVmaW5lZCIsInJlc3BvbnNlIiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwiYm9keSIsIm1lc3NhZ2UiLCJ0b0lTT1N0cmluZyIsImFnZW50SWQiLCJkYXRhIiwianNvbiIsIm9rIiwiZXJyb3JNZXNzYWdlIiwiaXNFcnJvciIsImhpbnQiLCJhc3Npc3RhbnRNZXNzYWdlIiwiZm9jdXMiLCJzdGFydE5ld0NoYXQiLCJuZXdTZXNzaW9uSWQiLCJoYW5kbGVLZXlEb3duIiwia2V5Iiwic2hpZnRLZXkiLCJoYW5kbGVDb3B5TWVzc2FnZSIsIm5hdmlnYXRvciIsImNsaXBib2FyZCIsIndyaXRlVGV4dCIsInNldFRpbWVvdXQiLCJjYW5Td2l0Y2hBZ2VudHMiLCJoYXNNZXNzYWdlcyIsImRpdiIsImluaXRpYWwiLCJvcGFjaXR5IiwieSIsImFuaW1hdGUiLCJ0cmFuc2l0aW9uIiwiZHVyYXRpb24iLCJlYXNlIiwiY2xhc3NOYW1lIiwib25DbGljayIsInZhcmlhbnQiLCJzaXplIiwidGl0bGUiLCJyZWYiLCJtb2RlIiwiZXhpdCIsImlzVXNlciIsImxheW91dCIsInRvbmUiLCJwIiwiYnV0dG9uIiwiYXJpYS1sYWJlbCIsInNwYW4iLCJoMSIsInNwbGl0IiwiY2hhciIsImRlbGF5IiwiZW50cnkiLCJpc0FjdGl2ZSIsInByb21wdCIsImFuaW1hdGlvbkRlbGF5Iiwic2NhbGUiLCJzdGlmZm5lc3MiLCJkYW1waW5nIiwiZm9ybSIsIm9uU3VibWl0IiwiaW1hZ2UiLCJpbWciLCJzcmMiLCJhbHQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0ZXh0YXJlYSIsIm9uQ2hhbmdlIiwidGFyZ2V0Iiwib25LZXlEb3duIiwicGxhY2Vob2xkZXIiLCJkaXNhYmxlZCIsInJvd3MiLCJvdmVyZmxvdyIsIm9uSW5wdXQiLCJhc0NoaWxkIiwiYWxpZ24iLCJtdWx0aXBsZSIsImFjY2VwdCIsImNsaWNrIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/chat-interface.tsx\n"));
|
|
|
|
/***/ })
|
|
|
|
}); |