Correspondents/.next/static/webpack/app/page.47c03f3b6ce10662.hot-update.js

22 lines
107 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 _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_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,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_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,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/sparkles.js\");\n/* harmony import */ var _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,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/bot.js\");\n/* harmony import */ var _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,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_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,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_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,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 _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,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/mic.js\");\n/* harmony import */ var _barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! __barrel_optimize__?names=Bot,Loader2,Mic,Paperclip,Send,Sparkles,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 _markdown_renderer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./markdown-renderer */ \"(app-pages-browser)/./src/components/markdown-renderer.tsx\");\n/* __next_internal_client_entry_do_not_use__ ChatInterface auto */ \nvar _s = $RefreshSig$();\n\n\n\n\nfunction ChatInterface(param) {\n let { agent } = param;\n _s();\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 (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 // 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 return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative flex h-full w-full flex-col px-2 sm:px-4\",\n children: [\n messages.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"absolute right-6 top-6 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: \"h-11 w-11 rounded-full border border-border/60 bg-white/70 text-charcoal shadow-lg backdrop-blur hover:bg-burnt/30 hover:text-charcoal\",\n title: \"Start a fresh conversation\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_4__[\"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: 225,\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: 218,\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: 217,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n ref: messagesContainerRef,\n className: \"flex-1 overflow-y-auto px-1 py-10 pb-40 sm:px-0\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto max-w-3xl space-y-10\",\n children: messages.length === 0 ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex min-h-[60vh] flex-col items-center justify-center gap-10 text-center\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mx-auto flex h-20 w-20 items-center justify-center rounded-full border border-border/40 bg-white/60 text-burnt shadow-lg\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n className: \"h-8 w-8\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 236,\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: 235,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"font-heading text-3xl text-charcoal\",\n children: [\n \"Welcome to \",\n agent.name\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 239,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-base leading-relaxed text-muted-foreground\",\n children: agent.description\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 240,\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: 238,\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: 234,\n columnNumber: 15\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: 251,\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: 244,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2 text-xs text-muted-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-1.5 w-1.5 rounded-full bg-burnt\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 263,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"AI Assistant Online\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 264,\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: 262,\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: 233,\n columnNumber: 13\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\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)(\"div\", {\n className: \"message-frame flex gap-4 \".concat(isUser ? \"flex-row-reverse\" : \"\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-avatar \".concat(isUser ? \"user\" : \"assistant\"),\n children: isUser ? \"You\" : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"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: 277,\n columnNumber: 41\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 276,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-1 flex-col gap-3 \".concat(isUser ? \"items-end text-right\" : \"\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-wrap items-center gap-2 text-xs uppercase tracking-[0.2em] text-muted-foreground \".concat(isUser ? \"justify-end\" : \"\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: isUser ? \"Collector\" : agent.name\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 282,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[0.65rem] normal-case tracking-normal\",\n children: message.timestamp.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\"\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 283,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 281,\n columnNumber: 23\n }, this),\n isUser ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-bubble user text-charcoal\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"whitespace-pre-wrap break-words text-sm 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: 290,\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: 289,\n columnNumber: 25\n }, this) : message.isError ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-bubble assistant border border-destructive/40 text-destructive\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"whitespace-pre-wrap break-words text-sm 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: 294,\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: 293,\n columnNumber: 25\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-bubble assistant text-charcoal\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_markdown_renderer__WEBPACK_IMPORTED_MODULE_3__.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: 298,\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: 297,\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: 303,\n columnNumber: 25\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 280,\n columnNumber: 21\n }, this)\n ]\n }, message.id, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 272,\n columnNumber: 19\n }, this);\n }),\n isLoading && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-frame flex gap-4\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-avatar assistant\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_6__[\"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: 315,\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: 314,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-1 flex-col gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2 text-xs uppercase tracking-[0.2em] text-muted-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\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: 319,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-[0.65rem] normal-case tracking-normal\",\n children: new Date().toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\"\n })\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 320,\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: 318,\n columnNumber: 21\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"message-bubble assistant flex items-center gap-3 text-sm text-muted-foreground\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n className: \"h-4 w-4 animate-spin text-burnt\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 325,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Thinking...\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 326,\n columnNumber: 23\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-1\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-1 w-1 rounded-full bg-burnt animate-bounce\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 328,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-1 w-1 rounded-full bg-burnt animate-bounce\",\n style: {\n animationDelay: \"0.1s\"\n }\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 329,\n columnNumber: 25\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"h-1 w-1 rounded-full bg-burnt animate-bounce\",\n style: {\n animationDelay: \"0.2s\"\n }\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 }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 327,\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: 324,\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: 317,\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: 313,\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: 268,\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: 231,\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: 230,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"fixed bottom-6 left-1/2 z-20 w-full max-w-3xl -translate-x-1/2 px-4\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: sendMessage,\n className: \"relative\",\n children: [\n selectedImages.length > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"mb-2 flex flex-wrap gap-2 px-3 pt-3\",\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 object-cover\"\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 348,\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 bg-red-500 text-white hover:bg-red-600\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"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: 358,\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: 353,\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: 347,\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: 345,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"rounded-2xl border border-neutral-800 bg-neutral-900/95 p-3 shadow-2xl backdrop-blur-md\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-end gap-3\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex flex-1 flex-col gap-2\",\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: \"Ask me anything or share your ideas... (Enter to send, Shift+Enter for new line)\",\n disabled: isLoading,\n rows: 1,\n className: \"min-h-[20px] max-h-32 resize-none border-0 bg-transparent text-white placeholder:text-neutral-500 focus:outline-none focus:ring-0\",\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, 128) + 'px';\n }\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 368,\n columnNumber: 17\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\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: 390,\n columnNumber: 21\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-8 w-8 text-neutral-400 hover:text-white hover:bg-neutral-800\",\n title: \"Attach image\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"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: 408,\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: 399,\n columnNumber: 21\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 className: \"h-8 w-8 text-neutral-400 hover:text-white hover:bg-neutral-800\",\n title: \"Voice input\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"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: 417,\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: 410,\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: 389,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n input.trim() && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"text-xs text-neutral-500\",\n children: [\n input.length,\n \"/2000\"\n ]\n }, void 0, true, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 423,\n columnNumber: 23\n }, this),\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: \"h-9 w-9 flex-shrink-0 rounded-xl bg-orange-500 text-white hover:bg-orange-600 disabled:opacity-50\",\n children: isLoading ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_7__[\"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: 433,\n columnNumber: 36\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bot_Loader2_Mic_Paperclip_Send_Sparkles_SquarePen_X_lucide_react__WEBPACK_IMPORTED_MODULE_11__[\"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: 433,\n columnNumber: 83\n }, this)\n }, void 0, false, {\n fileName: \"/home/nicholai/Documents/dev/multi-agent_chat_interface/src/components/chat-interface.tsx\",\n lineNumber: 427,\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: 421,\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: 388,\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: 367,\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: 366,\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: 365,\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: 342,\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: 341,\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: 215,\n columnNumber: 5\n }, this);\n}\n_s(ChatInterface, \"1rfLb0uXXOh5S4M+kQCpCGT2ZDM=\");\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL2NoYXQtaW50ZXJmYWNlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSW1EO0FBQ0o7QUFFMEM7QUFDbkM7QUFPL0MsU0FBU2EsY0FBYyxLQUE2QjtRQUE3QixFQUFFQyxLQUFLLEVBQXNCLEdBQTdCOztJQUM1QixNQUFNLENBQUNDLFVBQVVDLFlBQVksR0FBR2hCLCtDQUFRQSxDQUFZLEVBQUU7SUFDdEQsTUFBTSxDQUFDaUIsT0FBT0MsU0FBUyxHQUFHbEIsK0NBQVFBLENBQUM7SUFDbkMsTUFBTSxDQUFDbUIsV0FBV0MsYUFBYSxHQUFHcEIsK0NBQVFBLENBQUM7SUFDM0MsTUFBTSxDQUFDcUIsV0FBV0MsYUFBYSxHQUFHdEIsK0NBQVFBLENBQVM7SUFDbkQsTUFBTSxDQUFDdUIsZ0JBQWdCQyxrQkFBa0IsR0FBR3hCLCtDQUFRQSxDQUFXLEVBQUU7SUFDakUsTUFBTXlCLHVCQUF1QnhCLDZDQUFNQSxDQUFpQjtJQUNwRCxNQUFNeUIsV0FBV3pCLDZDQUFNQSxDQUFzQjtJQUM3QyxNQUFNMEIsZUFBZTFCLDZDQUFNQSxDQUFtQjtJQUU5Q0MsZ0RBQVNBO21DQUFDO1lBQ1Isd0RBQXdEO1lBQ3hELE1BQU0wQixhQUFhLGdCQUF5QixPQUFUZCxNQUFNZSxFQUFFO1lBQzNDLElBQUlDLG9CQUFvQkMsYUFBYUMsT0FBTyxDQUFDSjtZQUU3QyxJQUFJLENBQUNFLG1CQUFtQjtnQkFDdEIsMkRBQTJEO2dCQUMzREEsb0JBQW9CLFdBQXVCRyxPQUFabkIsTUFBTWUsRUFBRSxFQUFDLEtBQWlCSyxPQUFkRCxLQUFLRSxHQUFHLElBQUcsS0FBK0MsT0FBNUNELEtBQUtFLE1BQU0sR0FBR0MsUUFBUSxDQUFDLElBQUlDLFNBQVMsQ0FBQyxHQUFHO2dCQUNqR1AsYUFBYVEsT0FBTyxDQUFDWCxZQUFZRTtZQUNuQztZQUVBUixhQUFhUTtZQUViLHdDQUF3QztZQUN4QyxNQUFNVSxjQUFj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NERBQ1ZnRyxXQUFVOzREQUNWSSxPQUFNO3NFQUVOLDRFQUFDOUcsK0hBQVNBO2dFQUFDMEcsV0FBVTs7Ozs7Ozs7Ozs7c0VBRXZCLDhEQUFDaEgseURBQU1BOzREQUNMNEQsTUFBSzs0REFDTHNELFNBQVE7NERBQ1JDLE1BQUs7NERBQ0xILFdBQVU7NERBQ1ZJLE9BQU07c0VBRU4sNEVBQUM3RyxnSUFBR0E7Z0VBQUN5RyxXQUFVOzs7Ozs7Ozs7Ozs7Ozs7Ozs4REFJbkIsOERBQUNEO29EQUFJQyxXQUFVOzt3REFDWmxHLE1BQU1zRSxJQUFJLG9CQUNULDhEQUFDeUM7NERBQUtiLFdBQVU7O2dFQUNibEcsTUFBTTRDLE1BQU07Z0VBQUM7Ozs7Ozs7c0VBR2xCLDhEQUFDMUQseURBQU1BOzREQUNMNEQsTUFBSzs0REFDTGlGLFVBQVUsQ0FBQy9ILE1BQU1zRSxJQUFJLE1BQU1wRTs0REFDM0JtRyxNQUFLOzREQUNMSCxXQUFVO3NFQUVUaEcsMEJBQVksOERBQUNiLCtIQUFPQTtnRUFBQzZHLFdBQVU7Ozs7O3FGQUE0Qiw4REFBQy9HLGdJQUFJQTtnRUFBQytHLFdBQVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV2xHO0dBNWFnQnRHO0tBQUFBIiwic291cmNlcyI6WyIvaG9tZS9uaWNob2xhaS9Eb2N1bWVudHMvZGV2L211bHRpLWFnZW50X2NoYXRfaW50ZXJmYWNlL3NyYy9jb21wb25lbnRzL2NoYXQtaW50ZXJmYWNlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIlxuXG5pbXBvcnQgdHlwZSBSZWFjdCBmcm9tIFwicmVhY3RcIlxuXG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9idXR0b25cIlxuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2lucHV0XCJcbmltcG9ydCB7IFNlbmQsIEJvdCwgTG9hZGVyMiwgU3F1YXJlUGVuLCBTcGFya2xlcywgUGFwZXJjbGlwLCBNaWMsIFggfSBmcm9tIFwibHVjaWRlLXJlYWN0XCJcbmltcG9ydCB7IE1hcmtkb3duUmVuZGVyZXIgfSBmcm9tIFwiLi9tYXJrZG93bi1yZW5kZXJlclwiXG5pbXBvcnQgdHlwZSB7IE1lc3NhZ2UsIEFnZW50IH0gZnJvbSBcIkAvbGliL3R5cGVzXCJcblxuaW50ZXJmYWNlIENoYXRJbnRlcmZhY2VQcm9wcyB7XG4gIGFnZW50OiBBZ2VudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gQ2hhdEludGVyZmFjZSh7IGFnZW50IH06IENoYXRJbnRlcmZhY2VQcm9wcykge1xuICBjb25zdCBbbWVzc2FnZXMsIHNldE1lc3NhZ2VzXSA9IHVzZVN0YXRlPE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IFtpbnB1dCwgc2V0SW5wdXRdID0gdXNlU3RhdGUoXCJcIilcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2Vzc2lvbklkLCBzZXRTZXNzaW9uSWRdID0gdXNlU3RhdGU8c3RyaW5nPihcIlwiKVxuICBjb25zdCBbc2VsZWN0ZWRJbWFnZXMsIHNldFNlbGVjdGVkSW1hZ2VzXSA9IHVzZVN0YXRlPHN0cmluZ1tdPihbXSlcbiAgY29uc3QgbWVzc2FnZXNDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGlucHV0UmVmID0gdXNlUmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gVXNlIGFnZW50LXNwZWNpZmljIHNlc3Npb24gSUQ6IGNoYXQtc2Vzc2lvbi17YWdlbnRJZH1cbiAgICBjb25zdCBzZXNzaW9uS2V5ID0gYGNoYXQtc2Vzc2lvbi0ke2FnZW50LmlkfWBcbiAgICBsZXQgZXhpc3RpbmdTZXNzaW9uSWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzZXNzaW9uS2V5KVxuXG4gICAgaWYgKCFleGlzdGluZ1Nlc3Npb25JZCkge1xuICAgICAgLy8gR2VuZXJhdGUgbmV3IHNlc3Npb25JRCB1c2luZyB0aW1lc3RhbXAgYW5kIHJhbmRvbSBzdHJpbmdcbiAgICAgIGV4aXN0aW5nU2Vzc2lvbklkID0gYHNlc3Npb24tJHthZ2VudC5pZH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSl9YFxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oc2Vzc2lvbktleSwgZXhpc3RpbmdTZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgc2V0U2Vzc2lvbklkKGV4aXN0aW5nU2Vzc2lvbklkKVxuXG4gICAgLy8gTG9hZCBleGlzdGluZyBtZXNzYWdlcyBmb3IgdGhpcyBhZ2VudFxuICAgIGNvbnN0IG1lc3NhZ2VzS2V5ID0gYGNoYXQtbWVzc2FnZXMtJHthZ2VudC5pZH1gXG4gICAgY29uc3Qgc2F2ZWRNZXNzYWdlcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKG1lc3NhZ2VzS2V5KVxuICAgIGlmIChzYXZlZE1lc3NhZ2VzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHNhdmVkTWVzc2FnZXMpXG4gICAgICAgIC8vIEVuc3VyZSB0aW1lc3RhbXBzIGFyZSBEYXRlIG9iamVjdHNcbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBwYXJzZWQubWFwKChtc2c6IGFueSkgPT4gKHtcbiAgICAgICAgICAuLi5tc2csXG4gICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZShtc2cudGltZXN0YW1wKSxcbiAgICAgICAgfSkpXG4gICAgICAgIHNldE1lc3NhZ2VzKG1lc3NhZ2VzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbY2hhdF0gRmFpbGVkIHRvIGxvYWQgc2F2ZWQgbWVzc2FnZXM6XCIsIGVycilcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthZ2VudC5pZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWVzc2FnZXNDb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgbWVzc2FnZXNDb250YWluZXJSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZXNzYWdlc0NvbnRhaW5lclJlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuICAgIH1cbiAgfSwgW21lc3NhZ2VzLCBpc0xvYWRpbmddKVxuXG4gIC8vIFNhdmUgbWVzc2FnZXMgdG8gbG9jYWxTdG9yYWdlIHdoZW5ldmVyIHRoZXkgY2hhbmdlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZXNLZXkgPSBgY2hhdC1tZXNzYWdlcy0ke2FnZW50LmlkfWBcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShtZXNzYWdlc0tleSwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMpKVxuICB9LCBbbWVzc2FnZXMsIGFnZW50LmlkXSlcblxuICAvLyBIYW5kbGUgaW1hZ2UgZmlsZSBzZWxlY3Rpb25cbiAgY29uc3QgaGFuZGxlSW1hZ2VTZWxlY3QgPSBhc3luYyAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGUuY3VycmVudFRhcmdldC5maWxlc1xuICAgIGlmICghZmlsZXMpIHJldHVyblxuXG4gICAgY29uc3QgbmV3SW1hZ2VzOiBzdHJpbmdbXSA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzW2ldXG4gICAgICAvLyBPbmx5IGFjY2VwdCBpbWFnZSBmaWxlc1xuICAgICAgaWYgKCFmaWxlLnR5cGUuc3RhcnRzV2l0aChcImltYWdlL1wiKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbY2hhdF0gU2tpcHBpbmcgbm9uLWltYWdlIGZpbGU6XCIsIGZpbGUubmFtZSlcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gYXdhaXQgZmlsZVRvQmFzZTY0KGZpbGUpXG4gICAgICAgIG5ld0ltYWdlcy5wdXNoKGJhc2U2NClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiW2NoYXRdIEZhaWxlZCB0byBjb252ZXJ0IGltYWdlOlwiLCBlcnIpXG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0U2VsZWN0ZWRJbWFnZXMoKHByZXYpID0+IFsuLi5wcmV2LCAuLi5uZXdJbWFnZXNdKVxuICAgIC8vIFJlc2V0IGZpbGUgaW5wdXRcbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gXCJcIlxuICAgIH1cbiAgfVxuXG4gIC8vIENvbnZlcnQgZmlsZSB0byBiYXNlNjQgc3RyaW5nXG4gIGNvbnN0IGZpbGVUb0Jhc2U2NCA9IChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSlcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKVxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3RcbiAgICB9KVxuICB9XG5cbiAgLy8gUmVtb3ZlIHNlbGVjdGVkIGltYWdlXG4gIGNvbnN0IHJlbW92ZUltYWdlID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBzZXRTZWxlY3RlZEltYWdlcygocHJldikgPT4gcHJldi5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGluZGV4KSlcbiAgfVxuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gYXN5bmMgKGU/OiBSZWFjdC5Gb3JtRXZlbnQpID0+IHtcbiAgICBpZiAoZSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgaWYgKCFpbnB1dC50cmltKCkgfHwgaXNMb2FkaW5nKSByZXR1cm5cblxuICAgIGNvbnN0IHVzZXJNZXNzYWdlOiBNZXNzYWdlID0ge1xuICAgICAgaWQ6IERhdGUubm93KCkudG9TdHJpbmcoKSxcbiAgICAgIHJvbGU6IFwidXNlclwiLFxuICAgICAgY29udGVudDogaW5wdXQudHJpbSgpLFxuICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxuICAgICAgaW1hZ2VzOiBzZWxlY3RlZEltYWdlcy5sZW5ndGggPiAwID8gc2VsZWN0ZWRJbWFnZXMgOiB1bmRlZmluZWQsXG4gICAgfVxuXG4gICAgc2V0TWVzc2FnZXMoKHByZXYpID0+IFsuLi5wcmV2LCB1c2VyTWVzc2FnZV0pXG4gICAgc2V0SW5wdXQoXCJcIilcbiAgICBzZXRTZWxlY3RlZEltYWdlcyhbXSlcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiL2FwaS9jaGF0XCIsIHtcbiAgICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgbWVzc2FnZTogdXNlck1lc3NhZ2UuY29udGVudCxcbiAgICAgICAgICB0aW1lc3RhbXA6IHVzZXJNZXNzYWdlLnRpbWVzdGFtcC50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50LmlkLFxuICAgICAgICAgIGltYWdlczogc2VsZWN0ZWRJbWFnZXMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSW1hZ2VzIDogdW5kZWZpbmVkLFxuICAgICAgICB9KSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7XG4gICAgICAgIGVycm9yPzogc3RyaW5nXG4gICAgICAgIGhpbnQ/OiBzdHJpbmdcbiAgICAgICAgcmVzcG9uc2U/OiBzdHJpbmdcbiAgICAgICAgbWVzc2FnZT86IHN0cmluZ1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZTogTWVzc2FnZSA9IHtcbiAgICAgICAgICBpZDogKERhdGUubm93KCkgKyAxKS50b1N0cmluZygpLFxuICAgICAgICAgIHJvbGU6IFwiYXNzaXN0YW50XCIsXG4gICAgICAgICAgY29udGVudDogZGF0YS5lcnJvciB8fCBcIkZhaWxlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSB3ZWJob29rLlwiLFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgICAgIGhpbnQ6IGRhdGEuaGludCxcbiAgICAgICAgfVxuICAgICAgICBzZXRNZXNzYWdlcygocHJldikgPT4gWy4uLnByZXYsIGVycm9yTWVzc2FnZV0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhc3Npc3RhbnRNZXNzYWdlOiBNZXNzYWdlID0ge1xuICAgICAgICAgIGlkOiAoRGF0ZS5ub3coKSArIDEpLnRvU3RyaW5nKCksXG4gICAgICAgICAgcm9sZTogXCJhc3Npc3RhbnRcIixcbiAgICAgICAgICBjb250ZW50OiBkYXRhLnJlc3BvbnNlIHx8IGRhdGEubWVzc2FnZSB8fCBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICAgIH1cbiAgICAgICAgc2V0TWVzc2FnZXMoKHByZXYpID0+IFsuLi5wcmV2LCBhc3Npc3RhbnRNZXNzYWdlXSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIlt2MF0gRXJyb3Igc2VuZGluZyBtZXNzYWdlOlwiLCBlcnJvcilcblxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlOiBNZXNzYWdlID0ge1xuICAgICAgICBpZDogKERhdGUubm93KCkgKyAxKS50b1N0cmluZygpLFxuICAgICAgICByb2xlOiBcImFzc2lzdGFudFwiLFxuICAgICAgICBjb250ZW50OiBcIlNvcnJ5LCBJIGVuY291bnRlcmVkIGFuIGVycm9yIHByb2Nlc3NpbmcgeW91ciBtZXNzYWdlLiBQbGVhc2UgdHJ5IGFnYWluLlwiLFxuICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICB9XG5cbiAgICAgIHNldE1lc3NhZ2VzKChwcmV2KSA9PiBbLi4ucHJldiwgZXJyb3JNZXNzYWdlXSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgaW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN0YXJ0TmV3Q2hhdCA9ICgpID0+IHtcbiAgICAvLyBDbGVhciBhbGwgbWVzc2FnZXNcbiAgICBzZXRNZXNzYWdlcyhbXSlcbiAgICAvLyBHZW5lcmF0ZSBuZXcgc2Vzc2lvbklEIGZvciB0aGlzIGFnZW50XG4gICAgY29uc3QgbmV3U2Vzc2lvbklkID0gYHNlc3Npb24tJHthZ2VudC5pZH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxNSl9YFxuICAgIHNldFNlc3Npb25JZChuZXdTZXNzaW9uSWQpXG4gICAgY29uc3Qgc2Vzc2lvbktleSA9IGBjaGF0LXNlc3Npb24tJHthZ2VudC5pZH1gXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oc2Vzc2lvbktleSwgbmV3U2Vzc2lvbklkKVxuICAgIC8vIENsZWFyIGlucHV0IGFuZCBpbWFnZXNcbiAgICBzZXRJbnB1dChcIlwiKVxuICAgIHNldFNlbGVjdGVkSW1hZ2VzKFtdKVxuICAgIC8vIEZvY3VzIGlucHV0XG4gICAgaW5wdXRSZWYuY3VycmVudD8uZm9jdXMoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIHNlbmRNZXNzYWdlKClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleCBoLWZ1bGwgdy1mdWxsIGZsZXgtY29sIHB4LTIgc206cHgtNFwiPlxuICAgICAge21lc3NhZ2VzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImFic29sdXRlIHJpZ2h0LTYgdG9wLTYgei0xMFwiPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIG9uQ2xpY2s9e3N0YXJ0TmV3Q2hhdH1cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgICAgICBjbGFzc05hbWU9XCJoLTExIHctMTEgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItYm9yZGVyLzYwIGJnLXdoaXRlLzcwIHRleHQtY2hhcmNvYWwgc2hhZG93LWxnIGJhY2tkcm9wLWJsdXIgaG92ZXI6YmctYnVybnQvMzAgaG92ZXI6dGV4dC1jaGFyY29hbFwiXG4gICAgICAgICAgICB0aXRsZT1cIlN0YXJ0IGEgZnJlc2ggY29udmVyc2F0aW9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U3F1YXJlUGVuIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG5cbiAgICAgIDxkaXYgcmVmPXttZXNzYWdlc0NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LXktYXV0byBweC0xIHB5LTEwIHBiLTQwIHNtOnB4LTBcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteC1hdXRvIG1heC13LTN4bCBzcGFjZS15LTEwXCI+XG4gICAgICAgICAge21lc3NhZ2VzLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBtaW4taC1bNjB2aF0gZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xMCB0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXgtYXV0byBmbGV4IGgtMjAgdy0yMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItYm9yZGVyLzQwIGJnLXdoaXRlLzYwIHRleHQtYnVybnQgc2hhZG93LWxnXCI+XG4gICAgICAgICAgICAgICAgICA8U3BhcmtsZXMgY2xhc3NOYW1lPVwiaC04IHctOFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9XCJmb250LWhlYWRpbmcgdGV4dC0zeGwgdGV4dC1jaGFyY29hbFwiPldlbGNvbWUgdG8ge2FnZW50Lm5hbWV9PC9oMT5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQtYmFzZSBsZWFkaW5nLXJlbGF4ZWQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e2FnZW50LmRlc2NyaXB0aW9ufTwvcD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJncmlkIHctZnVsbCBtYXgtdy0yeGwgZ2FwLTQgc206Z3JpZC1jb2xzLTJcIj5cbiAgICAgICAgICAgICAgICB7W1xuICAgICAgICAgICAgICAgICAgXCJIZWxwIG1lIGJyYWluc3Rvcm0gaWRlYXMgZm9yIGEgbmV3IG1vYmlsZSBhcHBcIixcbiAgICAgICAgICAgICAgICAgIFwiR2VuZXJhdGUgY3JlYXRpdmUgd3JpdGluZyBwcm9tcHRzIGZvciBhIGZhbnRhc3kgbm92ZWxcIixcbiAgICAgICAgICAgICAgICAgIFwiU3VnZ2VzdCBpbm5vdmF0aXZlIG1hcmtldGluZyBzdHJhdGVnaWVzIGZvciBhIHN0YXJ0dXBcIixcbiAgICAgICAgICAgICAgICAgIFwiQ3JlYXRlIGEgbGlzdCBvZiB1bmlxdWUgcHJvZHVjdCBuYW1lcyBmb3IgYSB0ZWNoIGNvbXBhbnlcIixcbiAgICAgICAgICAgICAgICBdLm1hcCgocHJvbXB0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBrZXk9e3Byb21wdH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0SW5wdXQocHJvbXB0KX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwic2Nyb2xsLXJldmVhbCByb3VuZGVkLTJ4bCBib3JkZXIgYm9yZGVyLWJvcmRlci8zMCBiZy13aGl0ZS84MCBwLTQgdGV4dC1sZWZ0IHRleHQtc20gdGV4dC1jaGFyY29hbCBzaGFkb3ctc20gdHJhbnNpdGlvbiBob3Zlcjpib3JkZXItcmluZy82MCBob3ZlcjpiZy13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGFuaW1hdGlvbkRlbGF5OiBgJHtpbmRleCAqIDUwfW1zYCB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cHJvbXB0fVxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImgtMS41IHctMS41IHJvdW5kZWQtZnVsbCBiZy1idXJudFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuPkFJIEFzc2lzdGFudCBPbmxpbmU8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0xMFwiPlxuICAgICAgICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNVc2VyID0gbWVzc2FnZS5yb2xlID09PSBcInVzZXJcIlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGtleT17bWVzc2FnZS5pZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgbWVzc2FnZS1mcmFtZSBmbGV4IGdhcC00ICR7aXNVc2VyID8gXCJmbGV4LXJvdy1yZXZlcnNlXCIgOiBcIlwifWB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgbWVzc2FnZS1hdmF0YXIgJHtpc1VzZXIgPyBcInVzZXJcIiA6IFwiYXNzaXN0YW50XCJ9YH0+XG4gICAgICAgICAgICAgICAgICAgICAge2lzVXNlciA/IFwiWW91XCIgOiA8Qm90IGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPn1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BmbGV4IGZsZXgtMSBmbGV4LWNvbCBnYXAtMyAke2lzVXNlciA/IFwiaXRlbXMtZW5kIHRleHQtcmlnaHRcIiA6IFwiXCJ9YH0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2BmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTIgdGV4dC14cyB1cHBlcmNhc2UgdHJhY2tpbmctWzAuMmVtXSB0ZXh0LW11dGVkLWZvcmVncm91bmQgJHtpc1VzZXIgPyBcImp1c3RpZnktZW5kXCIgOiBcIlwifWB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e2lzVXNlciA/IFwiQ29sbGVjdG9yXCIgOiBhZ2VudC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtWzAuNjVyZW1dIG5vcm1hbC1jYXNlIHRyYWNraW5nLW5vcm1hbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7bWVzc2FnZS50aW1lc3RhbXAudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLCB7IGhvdXI6IFwiMi1kaWdpdFwiLCBtaW51dGU6IFwiMi1kaWdpdFwiIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAge2lzVXNlciA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1idWJibGUgdXNlciB0ZXh0LWNoYXJjb2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cIndoaXRlc3BhY2UtcHJlLXdyYXAgYnJlYWstd29yZHMgdGV4dC1zbSBsZWFkaW5nLXJlbGF4ZWRcIj57bWVzc2FnZS5jb250ZW50fTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICkgOiBtZXNzYWdlLmlzRXJyb3IgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYnViYmxlIGFzc2lzdGFudCBib3JkZXIgYm9yZGVyLWRlc3RydWN0aXZlLzQwIHRleHQtZGVzdHJ1Y3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwid2hpdGVzcGFjZS1wcmUtd3JhcCBicmVhay13b3JkcyB0ZXh0LXNtIGxlYWRpbmctcmVsYXhlZFwiPnttZXNzYWdlLmNvbnRlbnR9PC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1idWJibGUgYXNzaXN0YW50IHRleHQtY2hhcmNvYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE1hcmtkb3duUmVuZGVyZXIgY29udGVudD17bWVzc2FnZS5jb250ZW50fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgICAgICAgICAgIHttZXNzYWdlLmhpbnQgJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3VuZGVkLWxnIGJvcmRlciBib3JkZXItYWNjZW50LzYwIGJnLWFjY2VudC80MCBweC0zIHB5LTIgdGV4dC14cyB0ZXh0LWNoYXJjb2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHttZXNzYWdlLmhpbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSl9XG5cbiAgICAgICAgICAgICAge2lzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZXNzYWdlLWZyYW1lIGZsZXggZ2FwLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVzc2FnZS1hdmF0YXIgYXNzaXN0YW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxCb3QgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LTEgZmxleC1jb2wgZ2FwLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXhzIHVwcGVyY2FzZSB0cmFja2luZy1bMC4yZW1dIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnthZ2VudC5uYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LVswLjY1cmVtXSBub3JtYWwtY2FzZSB0cmFja2luZy1ub3JtYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZyhbXSwgeyBob3VyOiBcIjItZGlnaXRcIiwgbWludXRlOiBcIjItZGlnaXRcIiB9KX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lc3NhZ2UtYnViYmxlIGFzc2lzdGFudCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMyB0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxMb2FkZXIyIGNsYXNzTmFtZT1cImgtNCB3LTQgYW5pbWF0ZS1zcGluIHRleHQtYnVybnRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlRoaW5raW5nLi4uPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLTEgdy0xIHJvdW5kZWQtZnVsbCBiZy1idXJudCBhbmltYXRlLWJvdW5jZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJoLTEgdy0xIHJvdW5kZWQtZnVsbCBiZy1idXJudCBhbmltYXRlLWJvdW5jZVwiIHN0eWxlPXt7IGFuaW1hdGlvbkRlbGF5OiBcIjAuMXNcIiB9fT48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaC0xIHctMSByb3VuZGVkLWZ1bGwgYmctYnVybnQgYW5pbWF0ZS1ib3VuY2VcIiBzdHlsZT17eyBhbmltYXRpb25EZWxheTogXCIwLjJzXCIgfX0+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZpeGVkIGJvdHRvbS02IGxlZnQtMS8yIHotMjAgdy1mdWxsIG1heC13LTN4bCAtdHJhbnNsYXRlLXgtMS8yIHB4LTRcIj5cbiAgICAgICAgPGZvcm0gb25TdWJtaXQ9e3NlbmRNZXNzYWdlfSBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgIHsvKiBJbWFnZSBwcmV2aWV3IHNlY3Rpb24gKi99XG4gICAgICAgICAge3NlbGVjdGVkSW1hZ2VzLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYi0yIGZsZXggZmxleC13cmFwIGdhcC0yIHB4LTMgcHQtM1wiPlxuICAgICAgICAgICAgICB7c2VsZWN0ZWRJbWFnZXMubWFwKChpbWFnZSwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICA8ZGl2IGtleT17aW5kZXh9IGNsYXNzTmFtZT1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIHNyYz17aW1hZ2V9XG4gICAgICAgICAgICAgICAgICAgIGFsdD17YFNlbGVjdGVkICR7aW5kZXh9YH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC0xNiB3LTE2IHJvdW5kZWQtbGcgb2JqZWN0LWNvdmVyXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByZW1vdmVJbWFnZShpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIC1yaWdodC0yIC10b3AtMiBmbGV4IGgtNSB3LTUgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCBiZy1yZWQtNTAwIHRleHQtd2hpdGUgaG92ZXI6YmctcmVkLTYwMFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxYIGNsYXNzTmFtZT1cImgtMyB3LTNcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cblxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm91bmRlZC0yeGwgYm9yZGVyIGJvcmRlci1uZXV0cmFsLTgwMCBiZy1uZXV0cmFsLTkwMC85NSBwLTMgc2hhZG93LTJ4bCBiYWNrZHJvcC1ibHVyLW1kXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtZW5kIGdhcC0zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBmbGV4LTEgZmxleC1jb2wgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICB2YWx1ZT17aW5wdXR9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldElucHV0KGUudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQXNrIG1lIGFueXRoaW5nIG9yIHNoYXJlIHlvdXIgaWRlYXMuLi4gKEVudGVyIHRvIHNlbmQsIFNoaWZ0K0VudGVyIGZvciBuZXcgbGluZSlcIlxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAgIHJvd3M9ezF9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtaW4taC1bMjBweF0gbWF4LWgtMzIgcmVzaXplLW5vbmUgYm9yZGVyLTAgYmctdHJhbnNwYXJlbnQgdGV4dC13aGl0ZSBwbGFjZWhvbGRlcjp0ZXh0LW5ldXRyYWwtNTAwIGZvY3VzOm91dGxpbmUtbm9uZSBmb2N1czpyaW5nLTBcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICdhdXRvJ1xuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIG9uSW5wdXQ9eyhlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5zdHlsZS5oZWlnaHQgPSBNYXRoLm1pbih0YXJnZXQuc2Nyb2xsSGVpZ2h0LCAxMjgpICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlLypcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbWFnZVNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc0xvYWRpbmd9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKX1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB3LTggdGV4dC1uZXV0cmFsLTQwMCBob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLW5ldXRyYWwtODAwXCJcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIkF0dGFjaCBpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8UGFwZXJjbGlwIGNsYXNzTmFtZT1cImgtNCB3LTRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB3LTggdGV4dC1uZXV0cmFsLTQwMCBob3Zlcjp0ZXh0LXdoaXRlIGhvdmVyOmJnLW5ldXRyYWwtODAwXCJcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlZvaWNlIGlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxNaWMgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAge2lucHV0LnRyaW0oKSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW5ldXRyYWwtNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aW5wdXQubGVuZ3RofS8yMDAwXG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFpbnB1dC50cmltKCkgfHwgaXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJpY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTkgdy05IGZsZXgtc2hyaW5rLTAgcm91bmRlZC14bCBiZy1vcmFuZ2UtNTAwIHRleHQtd2hpdGUgaG92ZXI6Ymctb3JhbmdlLTYwMCBkaXNhYmxlZDpvcGFjaXR5LTUwXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHtpc0xvYWRpbmcgPyA8TG9hZGVyMiBjbGFzc05hbWU9XCJoLTQgdy00IGFuaW1hdGUtc3BpblwiIC8+IDogPFNlbmQgY2xhc3NOYW1lPVwiaC00IHctNFwiIC8+fVxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKVxufVxuIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiQnV0dG9uIiwiU2VuZCIsIkJvdCIsIkxvYWRlcjIiLCJTcXVhcmVQZW4iLCJTcGFya2xlcyIsIlBhcGVyY2xpcCIsIk1pYyIsIlgiLCJNYXJrZG93blJlbmRlcmVyIiwiQ2hhdEludGVyZmFjZSIsImFnZW50IiwibWVzc2FnZXMiLCJzZXRNZXNzYWdlcyIsImlucHV0Iiwic2V0SW5wdXQiLCJpc0xvYWRpbmciLCJzZXRJc0xvYWRpbmciLCJzZXNzaW9uSWQiLCJzZXRTZXNzaW9uSWQiLCJzZWxlY3RlZEltYWdlcyIsInNldFNlbGVjdGVkSW1hZ2VzIiwibWVzc2FnZXNDb250YWluZXJSZWYiLCJpbnB1dFJlZiIsImZpbGVJbnB1dFJlZiIsInNlc3Npb25LZXkiLCJpZCIsImV4aXN0aW5nU2Vzc2lvbklkIiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsIkRhdGUiLCJNYXRoIiwibm93IiwicmFuZG9tIiwidG9TdHJpbmciLCJzdWJzdHJpbmciLCJzZXRJdGVtIiwibWVzc2FnZXNLZXkiLCJzYXZlZE1lc3NhZ2VzIiwicGFyc2VkIiwiSlNPTiIsInBhcnNlIiwibWFwIiwibXNnIiwidGltZXN0YW1wIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwiY3VycmVudCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsInN0cmluZ2lmeSIsImhhbmRsZUltYWdlU2VsZWN0IiwiZSIsImZpbGVzIiwiY3VycmVudFRhcmdldCIsIm5ld0ltYWdlcyIsImkiLCJsZW5ndGgiLCJmaWxlIiwidHlwZSIsInN0YXJ0c1dpdGgiLCJ3YXJuIiwibmFtZSIsImJhc2U2NCIsImZpbGVUb0Jhc2U2NCIsInB1c2giLCJwcmV2IiwidmFsdWUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJyZWFkQXNEYXRhVVJMIiwib25sb2FkIiwicmVzdWx0Iiwib25lcnJvciIsInJlbW92ZUltYWdlIiwiaW5kZXgiLCJmaWx0ZXIiLCJfIiwic2VuZE1lc3NhZ2UiLCJwcmV2ZW50RGVmYXVsdCIsInRyaW0iLCJ1c2VyTWVzc2FnZSIsInJvbGUiLCJjb250ZW50IiwiaW1hZ2VzIiwidW5kZWZpbmVkIiwicmVzcG9uc2UiLCJmZXRjaCIsIm1ldGhvZCIsImhlYWRlcnMiLCJib2R5IiwibWVzc2FnZSIsInRvSVNPU3RyaW5nIiwiYWdlbnRJZCIsImRhdGEiLCJqc29uIiwib2siLCJlcnJvck1lc3NhZ2UiLCJpc0Vycm9yIiwiaGludCIsImFzc2lzdGFudE1lc3NhZ2UiLCJmb2N1cyIsInN0YXJ0TmV3Q2hhdCIsIm5ld1Nlc3Npb25JZCIsImhhbmRsZUtleURvd24iLCJrZXkiLCJzaGlmdEtleSIsImRpdiIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJ2YXJpYW50Iiwic2l6ZSIsInRpdGxlIiwicmVmIiwiaDEiLCJwIiwiZGVzY3JpcHRpb24iLCJwcm9tcHQiLCJidXR0b24iLCJzdHlsZSIsImFuaW1hdGlvbkRlbGF5Iiwic3BhbiIsImlzVXNlciIsInRvTG9jYWxlVGltZVN0cmluZyIsImhvdXIiLCJtaW51dGUiLCJmb3JtIiwib25TdWJtaXQiLCJpbWFnZSIsImltZyIsInNyYyIsImFsdCIsInRleHRhcmVhIiwib25DaGFuZ2UiLCJ0YXJnZXQiLCJvbktleURvd24iLCJwbGFjZWhvbGRlciIsImRpc2FibGVkIiwicm93cyIsIm92ZXJmbG93IiwiaGVpZ2h0Iiwib25JbnB1dCIsIm1pbiIsIm11bHRpcGxlIiwiYWNjZXB0IiwiY2xpY2siXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/chat-interface.tsx\n"));
/***/ })
});