@crestapps/ai-chat-ui 1.0.0-preview.23 → 1.0.0-preview.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["ai-chat.js"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","hasOwnProperty","_createForOfIteratorHelper","_n","F","s","next","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","push","_typeof","window","openAIChatManager","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","userLabel","assistantLabel","thumbsUpTitle","thumbsDownTitle","copyTitle","codeCopiedText","widget","chatWidgetContainer","chatWidgetStateName","chatHistorySection","showHistoryButton","closeHistoryButton","newChatButton","toggleButtonSelector","resetSizeButtonSelector","dragHandleSelector","enableDragging","enableResizing","persistLayout","defaultWidth","defaultHeight","minWidth","minHeight","messageTemplate","indicatorTemplate","sanitizeUrl","url","trimmed","trim","escapeHtmlEntities","text","span","document","createElement","textContent","innerHTML","parsePixelValue","Number","isFinite","parsed","parseFloat","clamp","min","max","Math","normalizeReference","reference","_ref","_normalized$index","_ref2","_normalized$text","_ref3","_normalized$title","_ref4","_normalized$link","_ref5","_normalized$reference","normalized","assign","index","Index","Text","title","Title","link","Link","referenceType","ReferenceType","isDownloadCitationReference","toLowerCase","normalizeReferences","references","_i","_Object$entries","entries","_normalizeReference","_Object$entries$_i","key","getCitationLabel","buildCitationDisplay","content","processedContent","messageReferences","keys","citations","citedRefs","filter","_ref6","_ref7","includes","sort","_ref8","_ref9","_ref0","_ref1","b","displayIndex","_iterator","_step","_step$value","placeholder","concat","replaceAll","referenceKey","label","isDownload","err","_i2","_citations","citation","map","_ref10","_excluded","buildCopyContent","copyContent","_iterator2","_step2","_iterator3","_step3","trimEnd","updateMessagePresentation","message","rawContent","citationDisplay","displayContent","citationReferences","htmlContent","parseMarkdownContent","renderer","marked","Renderer","data","href","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","use","extensions","level","start","idx","undefined","tokenizer","extracted","tryExtractChartMarker","startIndex","type","raw","substring","endIndex","json","token","config","jsonStart","depth","inString","escape","ch","jsonEnd","closeBracketIndex","renderChartsInMessage","charts","requestAnimationFrame","_iterator4","_step4","renderChartOnCanvas","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","renderPendingCharts","configs","_i3","_Object$keys","html","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","initialize","instanceConfig","hasWidgetConfig","widgetBehavior","openAIChatWidgetBehavior","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","appDefinition","inputElement","buttonElement","chatContainer","isSessionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","notifications","prompt","documents","existingDocuments","isUploading","isDocumentOperationPending","documentOperationQueue","uploadErrors","isDragOver","documentBar","metricsEnabled","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsButton","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","random","singleResponseMode","conversationModeEnabled","conversationButton","isConversationMode","notificationDismissTimers","pendingSessionPromise","pendingSessionResolver","pendingSessionRejector","pendingSessionTimeoutId","computed","lastAssistantIndex","role","methods","handleBeforeUnload","handleDragOver","sessionDocumentsEnabled","preventDefault","stopPropagation","inputArea","closest","classList","add","handleDragLeave","remove","handleDrop","dataTransfer","files","uploadFiles","triggerFileInput","fileInput","click","handleFileInputChange","target","queueDocumentOperation","operation","self","previousOperation","nextOperation","_callee","_context","_this","_callee3","filesToUpload","_context3","uploadDocumentUrl","_callee2","sessionId","profileId","formData","response","errorText","uploadError","result","_t","_t2","_context2","getSessionId","getProfileId","ensureSessionForDocuments","fileName","renderDocumentBar","FormData","append","fetch","method","body","ok","extractReadableErrorMessage","initializeSession","uploaded","failed","reloadCurrentSession","removeDocument","doc","_this2","_callee5","_context5","removeDocumentUrl","_callee4","removeError","_t3","_context4","headers","stringify","itemId","documentId","splice","status","formatFileSize","bytes","toFixed","escapeHtml","failedItem","failedName","errorMsg","supportedExtensionsText","replaceChildren","RETURN_DOM_FRAGMENT","closeButtons","querySelectorAll","j","addEventListener","docToRemove","parseInt","getAttribute","errorCloseButtons","addBtn","querySelector","div","fallbackMessage","startsWith","detail","normalizeAssistantAppearance","appearance","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","startConnection","_this3","_callee6","_t4","_context6","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","forEach","msg","addMessage","$nextTick","refreshAllFeedbackIcons","initialPrompt","sendMessage","stopRecording","handleReceiveError","messageId","userRating","find","id","isFinal","_conversationPartialTranscript","escaped","replace","_conversationPartialMessage","hidePlaceholder","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","stopAudio","_conversationAssistantMessage","oldMsg","responseId","hideTypingIndicator","msgIndex","newMessage","base64Audio","contentType","binaryString","atob","Uint8Array","charCodeAt","playCollectedAudio","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","onreconnected","info","autoCreateSession","startNewSession","onclose","addMessageInternal","_this4","fireEvent","CustomEvent","_this5","_message$rawContent","addMessages","_this6","showPlaceholder","isOrchestratorAvailable","applyOrchestratorAvailability","unavailableMessage","orchestratorUnavailableMessage","disabled","micButtonElement","style","display","conversationButtonElement","event","isIndicator","trimmedPrompt","streamMessage","startRecording","_this7","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","mimeType","MediaRecorder","isTypeSupported","audioBitsPerSecond","subject","Subject","pendingChunk","size","_callee7","uint8Array","base64","_context7","arrayBuffer","reduce","str","byte","String","fromCharCode","btoa","getTracks","track","stop","complete","documentElement","send","updateMicButton","toggleRecording","sessionProfileId","_this8","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentSessionId","subscribe","chunk","_i4","_Object$entries2","_normalizeReference2","_Object$entries2$_i","_this8$stream","processReferences","streamingFinished","synthesizeSpeech","_this8$stream2","getServiceDownMessage","_this9","_ref15","_message$rawContent2","stopIcon","setAttribute","startIcon","removeAttribute","focus","icons","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this0","buttons","button","buttonIndex","isPlaying","iconHtml","toggle","cacheIndex","_this1","_ttsCacheIndex","invoke","toggleMessageTts","_this10","playAudioBlob","_this11","totalLength","sum","combined","offset","_iterator5","_step5","set","blob","Blob","_this12","URL","createObjectURL","Audio","revokeObjectURL","playNextInQueue","play","_this13","nextBlob","shift","conversationModeOnAudioEnded","_this14","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","_this15","updateConversationButton","_conversationSubject","_conversationStream","AudioCtx","AudioContext","webkitAudioContext","_conversationAudioCtx","_conversationAnalyser","createAnalyser","fftSize","micSource","createMediaStreamSource","connect","analyser","interruptVolumeThreshold","freqData","frequencyBinCount","getByteFrequencyData","k","avg","_callee8","_context8","close","dismissible","autoDismissMs","endHtml","blur","startHtml","conversationModeSendPrompt","generatePrompt","element","templateProfileId","createSessionUrl","baseUrl","param","fullUrl","location","origin","searchParams","originalLength","removedCount","_this16","clearNotificationDismiss","existingIndex","findIndex","scheduleNotificationDismiss","_this17","setTimeout","timerId","clearTimeout","dismissNotification","handleNotificationAction","actionName","_this18","scrollTop","scrollHeight","clientHeight","handleUserInput","setSessionId","resetSession","rejectPendingSessionRequest","sessionRating","onSessionReset","requestNewSession","_this19","_callee9","_context9","_this20","reject","resolvePendingSessionRequest","clearPendingSessionRequest","initializeApp","_this21","placeholderElementSelector","loadSession","documentBarSelector","className","multiple","allowedExtensions","accept","parentElement","appendChild","threshold","atBottom","shiftKey","lastMsg","pop","promptGenerators","getElementsByClassName","chatSessions","showChatScreen","btn","block","codeEl","clipboard","writeText","copiedText","micButtonElementSelector","conversationButtonElementSelector","force","onSessionInitialized","resolveSessionId","copyResponse","_ref17","_message$copyContent","updateFeedbackIcons","container","upBtn","downBtn","upClass","upIcon","fontSize","downClass","downIcon","containers","$el","msgId","rateMessage","isPositive","newRating","feedbackContainer","btnClass","offsetWidth","onEnd","removeEventListener","watch","handler","onDocumentsChanged","deep","active","mounted","_this22","_callee0","isInitialized","_context0","onMounted","beforeUnmount","onBeforeUnmount","template","app","Vue","createApp","mount","attach","download","toDataURL","img","res","removeChild"],"mappings":"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","file":"ai-chat.js","sourcesContent":["window.openAIChatManager = function () {\n\n // Defaults (can be overridden by instanceConfig)\n var defaultConfig = {\n // UI defaults for generated media\n generatedImageAltText: 'Generated Image',\n generatedImageMaxWidth: 400,\n downloadImageTitle: 'Download image',\n downloadChartTitle: 'Download chart as image',\n downloadChartButtonText: 'Download',\n userLabel: 'You',\n assistantLabel: 'Assistant',\n thumbsUpTitle: 'Thumbs up',\n thumbsDownTitle: 'Thumbs down',\n copyTitle: 'Click here to copy response to clipboard.',\n codeCopiedText: 'Copied!',\n widget: {\n chatWidgetContainer: null,\n chatWidgetStateName: null,\n chatHistorySection: null,\n showHistoryButton: null,\n closeHistoryButton: null,\n newChatButton: null,\n toggleButtonSelector: null,\n resetSizeButtonSelector: null,\n dragHandleSelector: '.ai-chat-widget-header',\n enableDragging: true,\n enableResizing: true,\n persistLayout: true,\n defaultWidth: null,\n defaultHeight: null,\n minWidth: 320,\n minHeight: 420\n },\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"'msg-' + index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-msg-role ai-chat-msg-role-user\">{{ userLabel }}</div>\n <div v-else-if=\"message.role !== 'indicator'\" :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><span :class=\"getAssistantIcon(message)\"></span></span>\n {{ getAssistantLabel(message) }}\n </div>\n <div class=\"ai-chat-message-body lh-base\">\n <h4 v-if=\"message.title\">{{ message.title }}</h4>\n <div v-html=\"message.htmlContent\"></div>\n <ol v-if=\"message.citationReferences && message.citationReferences.length\" class=\"ai-chat-citation-list\">\n <li v-for=\"citation in message.citationReferences\" :key=\"'citation-' + (citation.referenceKey || citation.displayIndex)\" class=\"ai-chat-citation-item\">\n <a v-if=\"citation.link\" :href=\"citation.link\" :target=\"citation.isDownload ? null : '_blank'\" :rel=\"citation.isDownload ? null : 'noopener noreferrer'\">{{ citation.label }}</a>\n <span v-else>{{ citation.label }}</span>\n </li>\n </ol>\n <span class=\"message-buttons-container\" v-if=\"!isIndicator(message)\">\n <template v-if=\"metricsEnabled && message.role === 'assistant'\">\n <span class=\"ai-chat-message-assistant-feedback\" :data-message-id=\"message.id\">\n <button class=\"btn btn-sm btn-link text-success p-0 me-2 button-message-toolbox rate-up-btn\" @click=\"rateMessage(message, true, $event)\" :title=\"thumbsUpTitle\">\n <span class=\"fa-regular fa-thumbs-up\"></span>\n </button>\n <button class=\"btn btn-sm btn-link text-danger p-0 me-2 button-message-toolbox rate-down-btn\" @click=\"rateMessage(message, false, $event)\" :title=\"thumbsDownTitle\">\n <span class=\"fa-regular fa-thumbs-down\"></span>\n </button>\n </span>\n </template>\n <button v-if=\"textToSpeechEnabled && !isConversationMode && message.role === 'assistant' && !message.isStreaming\" class=\"btn btn-sm btn-link text-secondary p-0 me-1 button-message-toolbox\" :class=\"{ 'tts-playing': ttsPlayingMessageIndex === index }\" :data-tts-message-index=\"index\" @click=\"toggleMessageTts(message, index)\" :title=\"ttsPlayingMessageIndex === index ? 'Pause audio' : 'Read aloud'\">\n <span :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></span>\n </button>\n <button class=\"btn btn-sm btn-link text-secondary p-0 button-message-toolbox\" @click=\"copyResponse(message)\" :title=\"copyTitle\">\n <span class=\"fa-solid fa-copy\"></span>\n </button>\n </span>\n </div>\n </div>\n </div>\n <div v-for=\"notification in notifications\" :key=\"'notif-' + notification.type\" class=\"ai-chat-notification\" :class=\"'ai-chat-notification-' + (notification.type || 'info') + ' ' + (notification.cssClass || '')\">\n <div class=\"ai-chat-notification-content\">\n <span v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></span>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <button v-if=\"notification.dismissible\" class=\"btn btn-sm btn-link p-0 ms-2 ai-chat-notification-dismiss\" @click=\"dismissNotification(notification.type)\" title=\"Dismiss\">\n <span class=\"fa-solid fa-xmark\"></span>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <button v-for=\"action in notification.actions\" :key=\"action.name\" class=\"btn btn-sm\" :class=\"action.cssClass || 'btn-outline-secondary'\" @click=\"handleNotificationAction(notification.type, action.name)\">\n <span v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></span>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><span class=\"fa fa-robot\" style=\"display: inline-block;\"></span></span>\n Assistant\n </div>\n `\n };\n\n // Sanitize URLs to prevent javascript: protocol injection.\n function sanitizeUrl(url) {\n if (!url) return '';\n var trimmed = url.trim();\n if (/^javascript:/i.test(trimmed) || /^vbscript:/i.test(trimmed) || /^data:text\\/html/i.test(trimmed)) {\n return '';\n }\n return url;\n }\n\n // Safely HTML-encode a string using the DOM (avoids regex-based HTML filtering).\n function escapeHtmlEntities(text) {\n var span = document.createElement('span');\n span.textContent = text;\n return span.innerHTML;\n }\n\n function parsePixelValue(value) {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n var parsed = parseFloat(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n }\n\n function normalizeReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return null;\n }\n\n const normalized = Object.assign({}, reference);\n normalized.index = normalized.index ?? normalized.Index ?? 0;\n normalized.text = normalized.text ?? normalized.Text ?? null;\n normalized.title = normalized.title ?? normalized.Title ?? null;\n normalized.link = sanitizeUrl(normalized.link ?? normalized.Link ?? null);\n normalized.referenceType = normalized.referenceType ?? normalized.ReferenceType ?? null;\n\n return normalized;\n }\n\n function isDownloadCitationReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return false;\n }\n\n if (typeof reference.referenceType === 'string' && reference.referenceType.toLowerCase() === 'document') {\n return true;\n }\n\n if (typeof reference.link === 'string' && /\\/ai\\/documents\\/.+\\/download(?:$|\\?)/i.test(reference.link)) {\n return true;\n }\n\n return false;\n }\n\n function normalizeReferences(references) {\n if (!references || typeof references !== 'object') {\n return {};\n }\n\n const normalized = {};\n\n for (const [key, value] of Object.entries(references)) {\n normalized[key] = normalizeReference(value) ?? {};\n }\n\n return normalized;\n }\n\n function getCitationLabel(reference, key) {\n return reference.title || reference.text || key;\n }\n\n function buildCitationDisplay(content, references) {\n let processedContent = (content || '').trim();\n const messageReferences = normalizeReferences(references);\n\n if (!processedContent || !Object.keys(messageReferences).length) {\n return { content: processedContent, citations: [] };\n }\n\n const citedRefs = Object.entries(messageReferences).filter(([key]) => processedContent.includes(key));\n\n if (!citedRefs.length) {\n return { content: processedContent, citations: [] };\n }\n\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n const citations = [];\n let displayIndex = 1;\n\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${displayIndex}_${value.index || displayIndex}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n citations.push({\n referenceKey: key,\n displayIndex: displayIndex,\n label: getCitationLabel(value, key),\n link: value.link || null,\n isDownload: isDownloadCitationReference(value),\n placeholder: placeholder,\n });\n\n displayIndex++;\n }\n\n for (const citation of citations) {\n processedContent = processedContent.replaceAll(citation.placeholder, `<sup>${citation.displayIndex}</sup>`);\n }\n\n processedContent = processedContent.replaceAll('</sup><sup>', '</sup><sup>,</sup><sup>');\n\n return {\n content: processedContent,\n citations: citations.map(({ placeholder, ...citation }) => citation),\n };\n }\n\n function buildCopyContent(content, citations) {\n let copyContent = (content || '').trim();\n\n if (!copyContent || !Array.isArray(citations) || citations.length === 0) {\n return copyContent;\n }\n\n for (const citation of citations) {\n copyContent = copyContent.replaceAll(citation.referenceKey, `[${citation.displayIndex}]`);\n }\n\n copyContent += '\\n\\nReferences:\\n';\n\n for (const citation of citations) {\n copyContent += `${citation.displayIndex}. ${citation.label}`;\n\n if (citation.link) {\n copyContent += ` - ${citation.link}`;\n }\n\n copyContent += '\\n';\n }\n\n return copyContent.trimEnd();\n }\n\n function updateMessagePresentation(message, references) {\n const messageReferences = normalizeReferences(references ?? message.references);\n const rawContent = typeof message.rawContent === 'string'\n ? message.rawContent\n : typeof message.content === 'string'\n ? message.content\n : '';\n const citationDisplay = buildCitationDisplay(rawContent, messageReferences);\n\n message.rawContent = rawContent;\n message.content = rawContent;\n message.displayContent = citationDisplay.content;\n message.references = messageReferences;\n message.citationReferences = citationDisplay.citations;\n message.copyContent = buildCopyContent(rawContent, citationDisplay.citations);\n message.htmlContent = parseMarkdownContent(citationDisplay.content, message);\n\n return message;\n }\n\n const renderer = new marked.Renderer();\n\n // Modify the link rendering to open in a new tab\n renderer.link = function (data) {\n var href = sanitizeUrl(data.href);\n if (!href) return data.text || '';\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\n };\n\n // Custom code block renderer with highlight.js integration and copy button.\n renderer.code = function (data) {\n var code = data.text || '';\n var lang = (data.lang || '').trim();\n var highlighted = code;\n\n if (typeof hljs !== 'undefined') {\n if (lang && hljs.getLanguage(lang)) {\n try {\n highlighted = hljs.highlight(code, { language: lang }).value;\n } catch (_) { }\n } else {\n try {\n highlighted = hljs.highlightAuto(code).value;\n } catch (_) { }\n }\n } else {\n highlighted = escapeHtmlEntities(code);\n }\n\n var langDisplay = lang ? escapeHtmlEntities(lang) : 'code';\n return `<div class=\"ai-code-block\"><div class=\"ai-code-header\"><span class=\"ai-code-lang\"><span class=\"fa-solid fa-code\"></span> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><span class=\"fa-regular fa-copy\"></span></button></div><pre><code class=\"hljs${lang ? ' language-' + lang : ''}\">${highlighted}</code></pre></div>`;\n };\n\n // Custom image renderer for generated images with thumbnail styling and download button.\n // Handles both URL and data-URI sources (data URIs are converted to blobs for download).\n renderer.image = function (data) {\n const src = sanitizeUrl(data.href);\n if (!src) return '';\n const alt = data.text || defaultConfig.generatedImageAltText;\n const maxWidth = defaultConfig.generatedImageMaxWidth;\n return `<div class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <div class=\"mt-2\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <span class=\"fa-solid fa-download\"></span>\n </a>\n </div>\n </div>`;\n };\n\n // Chart counter for unique IDs\n let chartCounter = 0;\n\n // Collector for charts discovered during marked parsing.\n let _pendingCharts = [];\n\n // Global chart config map: any page (e.g., Chat Interactions) that uses\n // the shared marked instance can call window.renderPendingCharts() after\n // its DOM update to render charts it didn't create itself.\n window.__chartConfigs = window.__chartConfigs || {};\n\n function createChartHtml(chartId) {\n return `<div class=\"chart-container\" style=\"position: relative; width: 100%; max-width: 560px; min-height: 420px;\">`\n + `<canvas id=\"${chartId}\"></canvas>`\n + `</div>`\n + `<div class=\"mt-2\">`\n + `<button type=\"button\" class=\"btn btn-sm btn-outline-secondary download-chart-btn\" data-chart-id=\"${chartId}\" title=\"${defaultConfig.downloadChartTitle}\">`\n + `<span class=\"fa-solid fa-download\"></span> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\n\n // Register [chart:{...json...}] as a native marked block extension so the\n // markdown parser handles chart markers inline with surrounding text.\n marked.use({\n extensions: [{\n name: 'chart',\n level: 'block',\n start(src) {\n const idx = src.indexOf('[chart:');\n return idx >= 0 ? idx : undefined;\n },\n tokenizer(src) {\n const extracted = tryExtractChartMarker(src);\n if (!extracted || extracted.startIndex !== 0) {\n return undefined;\n }\n\n const chartId = `chat_chart_${++chartCounter}`;\n\n return {\n type: 'chart',\n raw: src.substring(0, extracted.endIndex),\n chartId: chartId,\n json: extracted.json,\n };\n },\n renderer(token) {\n _pendingCharts.push({ chartId: token.chartId, config: token.json });\n window.__chartConfigs[token.chartId] = token.json;\n return createChartHtml(token.chartId);\n }\n }]\n });\n\n // Extract a [chart:{...json...}] marker. This avoids regex issues with nested brackets.\n function tryExtractChartMarker(text) {\n const token = '[chart:';\n const start = text.indexOf(token);\n if (start < 0) {\n return null;\n }\n\n // Find JSON object boundary by balancing braces\n const jsonStart = start + token.length;\n let i = jsonStart;\n while (i < text.length && (text[i] === ' ' || text[i] === '\\n' || text[i] === '\\r' || text[i] === '\\t')) {\n i++;\n }\n\n if (i >= text.length || text[i] !== '{') {\n return null;\n }\n\n let depth = 0;\n let inString = false;\n let escape = false;\n\n for (; i < text.length; i++) {\n const ch = text[i];\n\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === '\\\\') {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) {\n const jsonEnd = i;\n // Expect closing bracket after JSON\n const closeBracketIndex = text.indexOf(']', jsonEnd + 1);\n if (closeBracketIndex < 0) {\n return null;\n }\n\n const json = text.substring(jsonStart, jsonEnd + 1).trim();\n return {\n startIndex: start,\n endIndex: closeBracketIndex + 1,\n json: json\n };\n }\n }\n }\n\n return null;\n }\n\n function renderChartsInMessage(message) {\n if (!message || !message._pendingCharts || !message._pendingCharts.length) {\n return;\n }\n\n // Copy and clear pending charts immediately to prevent duplicate renders.\n const charts = [...message._pendingCharts];\n message._pendingCharts = [];\n\n // Defer to requestAnimationFrame so the browser has fully laid out the\n // canvas elements before Chart.js reads their dimensions.\n requestAnimationFrame(() => {\n for (const c of charts) {\n renderChartOnCanvas(c.chartId, c.config);\n }\n });\n }\n\n function renderChartOnCanvas(chartId, config) {\n const canvas = document.getElementById(chartId);\n if (!canvas) {\n return false;\n }\n\n if (typeof Chart === 'undefined') {\n console.warn('Chart.js is not loaded. To render interactive charts, include the Chart.js library on the page (e.g., <script src=\"https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js\"></script>).');\n return false;\n }\n\n // When the canvas is inside a hidden container (e.g., a widget panel with\n // display:none), it has zero dimensions and Chart.js cannot render correctly.\n // Keep the config in __chartConfigs so renderPendingCharts() can retry later\n // once the container becomes visible.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[chartId] = config;\n return false;\n }\n\n try {\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof config === 'string' ? JSON.parse(config) : config;\n cfg.options ??= {};\n cfg.options.responsive = true;\n cfg.options.maintainAspectRatio = true;\n cfg.options.aspectRatio ??= 4 / 3;\n\n canvas._chartInstance = new Chart(canvas, cfg);\n delete window.__chartConfigs[chartId];\n return true;\n } catch (e) {\n console.error('Error creating chart:', e);\n return false;\n }\n }\n\n // Global function: renders any chart canvases whose configs are in the\n // global __chartConfigs map. Called by pages (e.g., Chat Interactions)\n // that share the marked instance but have their own rendering pipeline.\n window.renderPendingCharts = function () {\n if (typeof Chart === 'undefined') {\n return;\n }\n\n const configs = window.__chartConfigs;\n if (!configs) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const chartId of Object.keys(configs)) {\n renderChartOnCanvas(chartId, configs[chartId]);\n }\n });\n };\n\n // Parse markdown content via marked (which natively handles [chart:...] markers\n // through the registered extension) and collect pending chart configs for later\n // Chart.js rendering.\n function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = marked.parse(content, { renderer });\n message._pendingCharts = _pendingCharts.length > 0 ? [..._pendingCharts] : [];\n return DOMPurify.sanitize(html, { ADD_TAGS: ['canvas'], ADD_ATTR: ['target'] });\n }\n\n const initialize = (instanceConfig) => {\n\n const config = Object.assign({}, defaultConfig, instanceConfig);\n config.widget = Object.assign({}, defaultConfig.widget || {}, instanceConfig && instanceConfig.widget ? instanceConfig.widget : {});\n const hasWidgetConfig = !!(instanceConfig && instanceConfig.widget && instanceConfig.widget.chatWidgetContainer && instanceConfig.widget.chatWidgetStateName);\n const widgetBehavior = window.openAIChatWidgetBehavior || null;\n // Keep defaultConfig in sync so renderers use overridden values\n defaultConfig = config;\n\n if (!config.signalRHubUrl) {\n console.error('The signalRHubUrl is required.');\n return;\n }\n\n if (!config.appElementSelector) {\n console.error('The appElementSelector is required.');\n return;\n }\n\n if (!config.chatContainerElementSelector) {\n console.error('The chatContainerElementSelector is required.');\n return;\n }\n\n if (!config.inputElementSelector) {\n console.error('The inputElementSelector is required.');\n return;\n }\n\n if (!config.sendButtonElementSelector) {\n console.error('The sendButtonElementSelector is required.');\n return;\n }\n\n const appDefinition = {\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isSessionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n notifications: [],\n prompt: '',\n documents: config.existingDocuments || [],\n isUploading: false,\n isDocumentOperationPending: false,\n documentOperationQueue: null,\n uploadErrors: [],\n isDragOver: false,\n documentBar: null,\n metricsEnabled: !!config.metricsEnabled,\n userLabel: config.userLabel,\n assistantLabel: config.assistantLabel,\n thumbsUpTitle: config.thumbsUpTitle,\n thumbsDownTitle: config.thumbsDownTitle,\n copyTitle: config.copyTitle,\n isRecording: false,\n mediaRecorder: null,\n preRecordingPrompt: '',\n micButton: null,\n speechToTextEnabled: config.chatMode === 'AudioInput' || config.chatMode === 'Conversation',\n textToSpeechEnabled: config.chatMode === 'Conversation' || !!config.textToSpeechEnabled,\n ttsVoiceName: config.ttsVoiceName || null,\n audioChunks: [],\n audioPlayQueue: [],\n isPlayingAudio: false,\n currentAudioElement: null,\n currentAudioUrl: null,\n ttsButton: null,\n ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'ai-chat-' + Math.random().toString(36).slice(2),\n singleResponseMode: !!config.singleResponseMode,\n conversationModeEnabled: config.chatMode === 'Conversation',\n conversationButton: null,\n isConversationMode: false,\n notificationDismissTimers: {},\n pendingSessionPromise: null,\n pendingSessionResolver: null,\n pendingSessionRejector: null,\n pendingSessionTimeoutId: null,\n };\n },\n computed: {\n lastAssistantIndex() {\n for (var i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].role === 'assistant') {\n return i;\n }\n }\n return -1;\n }\n },\n methods: {\n handleBeforeUnload() {\n this.isNavigatingAway = true;\n },\n handleDragOver(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = true;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.add('ai-chat-drag-over');\n },\n handleDragLeave(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n },\n handleDrop(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n this.uploadFiles(Array.from(e.dataTransfer.files));\n }\n },\n triggerFileInput() {\n if (!config.sessionDocumentsEnabled || this.isDocumentOperationPending) return;\n var fileInput = document.getElementById('ai-chat-doc-input');\n if (fileInput) fileInput.click();\n },\n handleFileInputChange(e) {\n var files = e.target.files ? Array.from(e.target.files) : [];\n if (files && files.length > 0) {\n this.uploadFiles(files);\n }\n e.target.value = '';\n },\n queueDocumentOperation(operation) {\n var self = this;\n var previousOperation = this.documentOperationQueue || Promise.resolve();\n var nextOperation = previousOperation\n .catch(function () { })\n .then(async function () {\n self.isDocumentOperationPending = true;\n try {\n return await operation();\n } finally {\n self.isDocumentOperationPending = false;\n }\n });\n\n this.documentOperationQueue = nextOperation.finally(function () {\n if (self.documentOperationQueue === nextOperation) {\n self.documentOperationQueue = null;\n }\n });\n\n return this.documentOperationQueue;\n },\n async uploadFiles(files) {\n if (!config.uploadDocumentUrl) return;\n\n var filesToUpload = Array.isArray(files) ? files.slice() : Array.from(files || []);\n if (filesToUpload.length === 0) return;\n\n return this.queueDocumentOperation(async () => {\n var sessionId = this.getSessionId();\n var profileId = this.getProfileId();\n\n if (!sessionId) {\n try {\n sessionId = await this.ensureSessionForDocuments(profileId);\n } catch (err) {\n console.error('Failed to create a chat session for document upload:', err);\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n }\n\n if (!sessionId) {\n console.warn('Cannot upload documents without a session or profile.');\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n\n this.isUploading = true;\n this.uploadErrors = [];\n this.renderDocumentBar();\n try {\n var formData = new FormData();\n formData.append('sessionId', sessionId);\n for (var i = 0; i < filesToUpload.length; i++) {\n formData.append('files', filesToUpload[i]);\n }\n\n var response = await fetch(config.uploadDocumentUrl, {\n method: 'POST',\n body: formData\n });\n\n if (!response.ok) {\n var errorText = await response.text();\n var uploadError = this.extractReadableErrorMessage(errorText, 'Upload failed. Please try again.');\n console.error('Upload failed:', errorText);\n this.uploadErrors = [{ fileName: '', error: uploadError }];\n return;\n }\n\n var result = await response.json();\n\n if (result.sessionId && result.sessionId !== this.getSessionId()) {\n this.initializeSession(result.sessionId);\n }\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else if (result.uploaded && result.uploaded.length > 0) {\n this.documents = this.documents.concat(result.uploaded);\n }\n\n if (result.failed && result.failed.length > 0) {\n this.uploadErrors = result.failed;\n }\n } catch (err) {\n console.error('Upload error:', err);\n this.uploadErrors = [{ fileName: '', error: 'Upload failed. Please try again.' }];\n\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n } finally {\n this.isUploading = false;\n this.renderDocumentBar();\n }\n });\n },\n async removeDocument(doc) {\n if (!config.removeDocumentUrl) return;\n\n return this.queueDocumentOperation(async () => {\n try {\n var sessionId = this.getSessionId();\n var response = await fetch(config.removeDocumentUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ itemId: sessionId, documentId: doc.documentId })\n });\n\n if (response.ok) {\n var result = await response.json();\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else {\n var idx = this.documents.indexOf(doc);\n if (idx > -1) {\n this.documents.splice(idx, 1);\n }\n }\n } else {\n var errorText = await response.text();\n var removeError = this.extractReadableErrorMessage(errorText, 'Failed to remove document. Please try again.');\n console.error('Failed to remove document:', response.status, errorText);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: removeError }];\n if (sessionId) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n } catch (err) {\n console.error('Remove document error:', err);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: 'Failed to remove document. Please try again.' }];\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n });\n },\n formatFileSize(bytes) {\n if (bytes < 1024) return bytes + ' B';\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n },\n renderDocumentBar() {\n if (!this.documentBar) return;\n\n if (!config.sessionDocumentsEnabled) {\n this.documentBar.classList.add('d-none');\n return;\n }\n\n this.documentBar.classList.remove('d-none');\n\n var html = '<div class=\"ai-chat-doc-bar p-2\">';\n html += '<div class=\"d-flex flex-wrap align-items-center gap-1\">';\n\n for (var i = 0; i < this.documents.length; i++) {\n var doc = this.documents[i];\n var name = doc.fileName || 'Document';\n if (name.length > 20) name = name.substring(0, 17) + '...';\n html += '<span class=\"badge bg-secondary bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\" title=\"' + this.escapeHtml(doc.fileName || '') + '\">';\n html += '<span class=\"fa-solid fa-file-lines\" style=\"font-size: 0.7rem;\"></span> ';\n html += this.escapeHtml(name);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" style=\"font-size: 0.5rem;\" data-doc-index=\"' + i + '\" aria-label=\"Remove\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '></button>';\n html += '</span>';\n }\n\n for (var m = 0; m < this.uploadErrors.length; m++) {\n var failedItem = this.uploadErrors[m];\n var failedName = failedItem.fileName || 'File';\n var errorMsg = failedItem.error || 'Upload failed';\n if (failedName.length > 15) failedName = failedName.substring(0, 12) + '...';\n html += '<span class=\"badge bg-danger bg-opacity-25 text-danger d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\" title=\"' + this.escapeHtml((failedItem.fileName || '') + ': ' + errorMsg) + '\">';\n html += '<span class=\"fa-solid fa-circle-exclamation\" style=\"font-size: 0.7rem;\"></span> ';\n html += this.escapeHtml(failedName);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" style=\"font-size: 0.5rem;\" data-error-index=\"' + m + '\" aria-label=\"Dismiss\"></button>';\n html += '</span>';\n }\n\n if (this.isUploading) {\n html += '<span class=\"badge bg-info bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\">';\n html += '<span class=\"spinner-border spinner-border-sm\" style=\"width: 0.7rem; height: 0.7rem;\"></span> Uploading...';\n html += '</span>';\n }\n\n html += '<button type=\"button\" class=\"btn btn-sm btn-outline-secondary rounded-pill ai-chat-doc-add-btn d-inline-flex align-items-center gap-1\" style=\"font-size: 0.75rem; padding: 0.15rem 0.5rem;\" title=\"Attach documents\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '>';\n html += '<span class=\"fa-solid fa-paperclip\"></span>';\n if (this.documents.length === 0 && !this.isUploading) {\n html += ' <span>Attach files</span>';\n }\n html += '</button>';\n html += '</div>';\n if (config.supportedExtensionsText) {\n html += '<div class=\"small text-muted mt-2\">Supported formats: ' + this.escapeHtml(config.supportedExtensionsText) + '</div>';\n }\n\n html += '</div>';\n\n this.documentBar.replaceChildren(DOMPurify.sanitize(html, { RETURN_DOM_FRAGMENT: true }));\n\n // Bind remove handlers\n var self = this;\n var closeButtons = this.documentBar.querySelectorAll('[data-doc-index]');\n for (var j = 0; j < closeButtons.length; j++) {\n closeButtons[j].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n if (self.isDocumentOperationPending) {\n return;\n }\n\n var docToRemove = self.documents[idx];\n if (docToRemove) self.removeDocument(docToRemove);\n };\n })(parseInt(closeButtons[j].getAttribute('data-doc-index'))));\n }\n\n // Bind error dismiss handlers\n var errorCloseButtons = this.documentBar.querySelectorAll('[data-error-index]');\n for (var n = 0; n < errorCloseButtons.length; n++) {\n errorCloseButtons[n].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n self.uploadErrors.splice(idx, 1);\n self.renderDocumentBar();\n };\n })(parseInt(errorCloseButtons[n].getAttribute('data-error-index'))));\n }\n\n // Bind add button\n var addBtn = this.documentBar.querySelector('.ai-chat-doc-add-btn');\n if (addBtn) {\n addBtn.addEventListener('click', function (e) {\n e.preventDefault();\n if (self.isDocumentOperationPending) {\n return;\n }\n self.triggerFileInput();\n });\n }\n },\n escapeHtml(text) {\n var div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n },\n extractReadableErrorMessage(errorText, fallbackMessage) {\n if (!errorText || typeof errorText !== 'string') {\n return fallbackMessage;\n }\n\n var trimmed = errorText.trim();\n if (!trimmed) {\n return fallbackMessage;\n }\n\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n var parsed = JSON.parse(trimmed);\n var message = parsed?.error || parsed?.message || parsed?.title || parsed?.detail;\n return typeof message === 'string' && message.trim()\n ? message.trim()\n : fallbackMessage;\n } catch (err) {\n return fallbackMessage;\n }\n }\n\n if (/<[^>]+>/.test(trimmed)) {\n return fallbackMessage;\n }\n\n return trimmed;\n },\n normalizeAssistantAppearance(appearance) {\n if (!appearance) {\n return null;\n }\n\n var label = typeof appearance.label === 'string' ? appearance.label.trim() : '';\n var icon = typeof appearance.icon === 'string' ? appearance.icon.trim() : '';\n var cssClass = typeof appearance.cssClass === 'string' ? appearance.cssClass.trim() : '';\n var disableStreamingAnimation = !!appearance.disableStreamingAnimation;\n\n if (!label && !icon && !cssClass && !disableStreamingAnimation) {\n return null;\n }\n\n return {\n label: label,\n icon: icon,\n cssClass: cssClass,\n disableStreamingAnimation: disableStreamingAnimation,\n };\n },\n getAssistantLabel(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.label ? appearance.label : this.assistantLabel;\n },\n getAssistantRoleClasses(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n var classes = ['ai-chat-msg-role'];\n\n if (appearance && appearance.cssClass) {\n classes.push(appearance.cssClass);\n } else {\n classes.push('ai-chat-msg-role-assistant');\n }\n\n return classes;\n },\n getAssistantIconClasses(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return [this.shouldAnimateAssistantIcon(message, index) ? 'ai-streaming-icon' : 'ai-bot-icon', appearance && appearance.cssClass ? appearance.cssClass : ''];\n },\n getAssistantIcon(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.icon ? appearance.icon : 'fa fa-robot';\n },\n shouldAnimateAssistantIcon(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return !!message &&\n message.isStreaming &&\n index === this.lastAssistantIndex &&\n !(appearance && appearance.disableStreamingAnimation);\n },\n async startConnection() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(config.signalRHubUrl)\n .withAutomaticReconnect()\n .build();\n\n // Allow long-running operations (e.g., multi-step MCP tool calls)\n // without the client disconnecting prematurely.\n this.connection.serverTimeoutInMilliseconds = 600000;\n this.connection.keepAliveIntervalInMilliseconds = 15000;\n\n this.connection.on(\"LoadSession\", (data) => {\n this.initializeSession(data.sessionId, true);\n this.messages = [];\n this.documents = data.documents || [];\n this.uploadErrors = [];\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n });\n });\n\n // Update feedback icons in the DOM after all messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // When the session is new (no messages) and an initial prompt is configured,\n // automatically send it as the first user message to trigger an AI response.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.prompt = config.initialPrompt;\n this.sendMessage();\n }\n });\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n\n if (this.isRecording) {\n this.stopRecording();\n }\n\n if (widgetBehavior && typeof widgetBehavior.handleReceiveError === 'function') {\n widgetBehavior.handleReceiveError(this, error, config);\n }\n });\n\n this.connection.on(\"MessageRated\", (messageId, userRating) => {\n var msg = this.messages.find(m => m.id === messageId);\n if (msg) {\n msg.userRating = userRating;\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (sessionId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (sessionId, text) => {\n if (text) {\n this.stopAudio();\n\n // If there's an interrupted assistant message still streaming,\n // mark it as done to stop the spinner animation.\n if (this._conversationAssistantMessage) {\n var oldMsg = this.messages[this._conversationAssistantMessage.index];\n if (oldMsg) {\n oldMsg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else {\n this.addMessage({\n role: 'user',\n content: text\n });\n }\n this.scrollToBottom();\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantToken\", (sessionId, messageId, token, responseId, references, appearance) => {\n if (!this._conversationAssistantMessage) {\n this.stopAudio();\n this.hideTypingIndicator();\n\n // Ensure no stale streaming indicators remain from prior messages.\n for (var j = 0; j < this.messages.length; j++) {\n if (this.messages[j].isStreaming) {\n this.messages[j].isStreaming = false;\n }\n }\n\n var msgIndex = this.messages.length;\n var newMessage = {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n appearance: this.normalizeAssistantAppearance(appearance),\n references: {},\n };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\n }\n\n this._conversationAssistantMessage.content += token;\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n if (!msg.appearance) {\n msg.appearance = this.normalizeAssistantAppearance(appearance);\n }\n msg.rawContent = this._conversationAssistantMessage.content;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (sessionId, messageId, references) => {\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n }\n this._conversationAssistantMessage = null;\n }\n });\n\n this.connection.on(\"ReceiveAudioChunk\", (sessionId, base64Audio, contentType) => {\n if (base64Audio) {\n const binaryString = atob(base64Audio);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n this.audioChunks.push(bytes);\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (sessionId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"ReceiveNotification\", (notification) => {\n this.receiveNotification(notification);\n });\n\n this.connection.on(\"UpdateNotification\", (notification) => {\n this.updateNotification(notification);\n });\n\n this.connection.on(\"RemoveNotification\", (notificationType) => {\n this.removeNotification(notificationType);\n });\n\n this.connection.onreconnecting(() => {\n console.warn(\"SignalR: reconnecting...\");\n });\n\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n\n if (this.isSessionStarted) {\n this.reloadCurrentSession();\n } else if (config.autoCreateSession) {\n this.startNewSession();\n }\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\n }\n\n if (error) {\n console.warn(\"SignalR connection closed with error:\", error.message || error);\n }\n });\n\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n },\n addMessageInternal(message) {\n if (message.role === 'assistant') {\n message.appearance = this.normalizeAssistantAppearance(message.appearance);\n }\n\n if (message.content && !message.htmlContent) {\n message.htmlContent = parseMarkdownContent(message.content, message);\n }\n this.fireEvent(new CustomEvent(\"addingOpenAIPromotMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedOpenAIPromotMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\n\n // Ensure userRating is always defined for Vue reactivity.\n if (message.userRating === undefined) {\n message.userRating = null;\n }\n\n if (message.content) {\n message.rawContent = message.rawContent ?? message.content;\n updateMessagePresentation(message, message.references);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n addMessages(messages) {\n\n for (let i = 0; i < messages.length; i++) {\n this.addMessageInternal(messages[i]);\n }\n\n this.hidePlaceholder();\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n hidePlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.add('d-none');\n }\n this.isPlaceholderVisible = false;\n },\n showPlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.remove('d-none');\n }\n this.isPlaceholderVisible = true;\n },\n isOrchestratorAvailable() {\n return config.isOrchestratorAvailable !== false;\n },\n applyOrchestratorAvailability() {\n if (this.isOrchestratorAvailable()) {\n return true;\n }\n\n const unavailableMessage = config.orchestratorUnavailableMessage || \"This orchestrator is not currently available.\";\n\n if (this.inputElement) {\n this.inputElement.disabled = true;\n this.inputElement.value = '';\n this.inputElement.placeholder = unavailableMessage;\n }\n\n if (this.buttonElement) {\n this.buttonElement.disabled = true;\n }\n\n if (this.micButtonElement) {\n this.micButtonElement.disabled = true;\n this.micButtonElement.style.display = 'none';\n }\n\n if (this.conversationButtonElement) {\n this.conversationButtonElement.disabled = true;\n this.conversationButtonElement.style.display = 'none';\n }\n\n return false;\n },\n fireEvent(event) {\n document.dispatchEvent(event);\n },\n isIndicator(message) {\n return message.role === 'indicator';\n },\n sendMessage() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // Stop any active recording before sending.\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // Prevent stale ReceiveTranscript events from repopulating the prompt.\n this._audioInputSent = true;\n\n // In single-response mode, clear all previous messages.\n if (this.singleResponseMode) {\n this.messages.splice(0, this.messages.length);\n }\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n this.streamMessage(this.getProfileId(), trimmedPrompt, null);\n this.inputElement.value = '';\n this.prompt = '';\n },\n startRecording() {\n if (this.isRecording || !this.connection) {\n return;\n }\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n var pendingChunk = Promise.resolve();\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n subject.next(base64);\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => subject.complete());\n });\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", profileId, sessionId, subject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n this.updateMicButton();\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n });\n },\n stopRecording() {\n if (!this.isRecording || !this.mediaRecorder) {\n return;\n }\n\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.updateMicButton();\n },\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n },\n updateMicButton() {\n if (!this.micButton) {\n return;\n }\n\n if (this.isRecording) {\n this.micButton.classList.add('stt-recording');\n this.micButton.innerHTML = '<span class=\"fa-solid fa-stop\"></span>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<span class=\"fa-solid fa-microphone\"></span>';\n }\n },\n streamMessage(profileId, trimmedPrompt, sessionProfileId) {\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n\n this.streamingStarted();\n this.showTypingIndicator();\n this.autoScroll = true;\n\n var content = '';\n var references = {};\n var lastResponseId = null;\n\n // Get the index after showing typing indicator.\n var messageIndex = this.messages.length;\n var currentSessionId = this.getSessionId();\n\n this.stream = this.connection.stream(\"SendMessage\", profileId, trimmedPrompt, currentSessionId, sessionProfileId)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n\n if (chunk.sessionId && !currentSessionId) {\n this.initializeSession(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n // Re-assign the index after hiding the typing indicator.\n messageIndex = this.messages.length;\n let newMessage = {\n id: chunk.messageId,\n role: \"assistant\",\n title: chunk.title,\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n };\n\n this.messages.push(newMessage);\n\n message = newMessage;\n }\n\n if (chunk.title && (!message.title || message.title !== chunk.title)) {\n message.title = chunk.title;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = normalizeReference(value) ?? {};\n }\n }\n\n if (chunk.content) {\n\n // When the responseId changes (e.g., after an internal tool call),\n // insert a line break to visually separate response segments.\n if (chunk.responseId && lastResponseId && chunk.responseId !== lastResponseId) {\n content += '\\n\\n';\n }\n\n if (chunk.responseId) {\n lastResponseId = chunk.responseId;\n }\n\n content += chunk.content;\n }\n\n // Update the existing message\n message.rawContent = content;\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n complete: () => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n if (!msg || !msg.content) {\n // No content received at all.\n this.hideTypingIndicator();\n }\n\n // Trigger text-to-speech only in conversation mode.\n if (this.isConversationMode && this.textToSpeechEnabled && msg && msg.content) {\n this.synthesizeSpeech(msg.content);\n }\n\n this.stream?.dispose();\n this.stream = null;\n },\n error: (err) => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getServiceDownMessage());\n }\n\n this.stream?.dispose();\n this.stream = null;\n\n console.error(\"Stream error:\", err);\n }\n });\n },\n getServiceDownMessage() {\n let newMessage = {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n\n return newMessage;\n },\n processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\n\n let message = this.messages[messageIndex];\n message.rawContent = message.rawContent ?? message.content ?? '';\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n }\n },\n streamingStarted() {\n var stopIcon = this.buttonElement.getAttribute('data-stop-icon');\n\n if (stopIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(stopIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.setAttribute('disabled', 'disabled');\n }\n },\n streamingFinished() {\n var startIcon = this.buttonElement.getAttribute('data-start-icon');\n\n if (startIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(startIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.removeAttribute('disabled');\n this.inputElement.focus();\n }\n\n // Directly manipulate the DOM to stop all streaming animations.\n if (this.chatContainer) {\n var icons = this.chatContainer.querySelectorAll('.ai-streaming-icon');\n for (var i = 0; i < icons.length; i++) {\n icons[i].classList.remove('ai-streaming-icon');\n icons[i].classList.add('ai-bot-icon');\n }\n }\n\n // Also update Vue data for consistency.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n },\n handleExternalTtsStop(e) {\n if (e?.detail?.sourceId === this.ttsInstanceId) {\n return;\n }\n\n this.stopAudio(false);\n },\n updateTtsPlaybackButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-tts-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-tts-message-index'));\n var isPlaying = buttonIndex === this.ttsPlayingMessageIndex;\n var iconHtml = isPlaying\n ? '<span class=\"fa-solid fa-circle-pause\"></span>'\n : '<span class=\"fa-solid fa-circle-play\"></span>';\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n button.replaceChildren(DOMPurify.sanitize(iconHtml, { RETURN_DOM_FRAGMENT: true }));\n });\n },\n synthesizeSpeech(text, cacheIndex) {\n if (!this.textToSpeechEnabled || !text || !this.connection) {\n return;\n }\n\n this.audioChunks = [];\n this.isPlayingAudio = true;\n this._ttsCacheIndex = cacheIndex !== undefined ? cacheIndex : -1;\n\n this.connection.invoke(\"SynthesizeSpeech\", this.getProfileId(), this.getSessionId(), text, this.ttsVoiceName)\n .catch(err => {\n console.error(\"TTS synthesis error:\", err);\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this._ttsCacheIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n toggleMessageTts(message, index) {\n if (this.ttsPlayingMessageIndex === index) {\n this.stopAudio();\n return;\n }\n\n this.stopAudio(false);\n window.dispatchEvent(new CustomEvent('crestapps-ai-chat-stop-tts', {\n detail: { sourceId: this.ttsInstanceId }\n }));\n this.ttsPlayingMessageIndex = index;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n\n if (this.ttsAudioCache[index]) {\n this.playAudioBlob(this.ttsAudioCache[index]);\n return;\n }\n\n this.synthesizeSpeech(message.content, index);\n },\n playCollectedAudio() {\n if (this.audioChunks.length === 0) {\n if (!this.currentAudioElement && this.audioPlayQueue.length === 0) {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n }\n return;\n }\n\n const totalLength = this.audioChunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of this.audioChunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n this.audioChunks = [];\n\n const blob = new Blob([combined], { type: 'audio/mp3' });\n\n if (this._ttsCacheIndex >= 0) {\n this.ttsAudioCache[this._ttsCacheIndex] = blob;\n this._ttsCacheIndex = -1;\n }\n\n // If audio is already playing, queue this blob for sequential playback.\n if (this.currentAudioElement) {\n this.audioPlayQueue.push(blob);\n return;\n }\n\n this.playAudioBlob(blob);\n },\n playAudioBlob(blob) {\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n\n this.currentAudioUrl = url;\n this.currentAudioElement = audio;\n this.isPlayingAudio = true;\n\n audio.addEventListener('ended', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.addEventListener('error', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.play().catch(err => {\n console.error(\"Audio playback error:\", err);\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n playNextInQueue() {\n if (this.audioPlayQueue.length > 0) {\n var nextBlob = this.audioPlayQueue.shift();\n this.playAudioBlob(nextBlob);\n } else {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n this.conversationModeOnAudioEnded();\n }\n },\n stopAudio() {\n if (this.currentAudioElement) {\n this.currentAudioElement.pause();\n this.currentAudioElement.currentTime = 0;\n this.currentAudioElement = null;\n }\n if (this.currentAudioUrl) {\n URL.revokeObjectURL(this.currentAudioUrl);\n this.currentAudioUrl = null;\n }\n this.audioChunks = [];\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n },\n toggleConversationMode() {\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n startConversationMode() {\n if (!this.conversationModeEnabled || this.isConversationMode || !this.connection) {\n return;\n }\n\n this.isConversationMode = true;\n this.updateConversationButton();\n this._conversationPartialTranscript = '';\n this._conversationAssistantMessage = null;\n this._conversationPartialMessage = null;\n\n // Remove any previous conversation ended notification.\n this.removeNotification('conversation-ended');\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // Create an AnalyserNode for volume-based interrupt detection.\n // During TTS playback, detect when the user speaks above\n // the threshold to stop TTS (interrupt). Audio chunks are\n // always forwarded — browser echo cancellation handles\n // speaker echo so the STT stream has no gaps.\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n if (AudioCtx) {\n this._conversationAudioCtx = new AudioCtx();\n this._conversationAnalyser = this._conversationAudioCtx.createAnalyser();\n this._conversationAnalyser.fftSize = 256;\n var micSource = this._conversationAudioCtx.createMediaStreamSource(stream);\n micSource.connect(this._conversationAnalyser);\n }\n\n var pendingChunk = Promise.resolve();\n var analyser = this._conversationAnalyser;\n var interruptVolumeThreshold = 30;\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n // During TTS playback, check mic volume to detect\n // user interruption (speaking above threshold).\n if (this.isPlayingAudio && analyser) {\n var freqData = new Uint8Array(analyser.frequencyBinCount);\n analyser.getByteFrequencyData(freqData);\n var sum = 0;\n for (var k = 0; k < freqData.length; k++) { sum += freqData[k]; }\n var avg = sum / freqData.length;\n\n if (avg >= interruptVolumeThreshold) {\n // User is speaking — interrupt TTS playback.\n this.stopAudio();\n }\n }\n\n // Always send audio to STT — browser echo cancellation\n // handles speaker echo; continuous audio avoids gaps\n // that increase recognition latency.\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => {\n try {\n this._conversationSubject.complete();\n } catch (err) {\n // Already completed.\n }\n });\n });\n\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n var language = navigator.language || document.documentElement.lang || 'en-US';\n\n this.connection.send(\"StartConversation\", profileId, sessionId, this._conversationSubject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n this.isConversationMode = false;\n this.updateConversationButton();\n });\n },\n stopConversationMode() {\n if (!this.isConversationMode) {\n return;\n }\n\n this.isConversationMode = false;\n this.updateConversationButton();\n\n // Signal the server to cancel all in-progress STT/TTS streams immediately.\n if (this.connection) {\n this.connection.invoke(\"StopConversation\").catch(function () { });\n }\n\n if (this.isRecording && this.mediaRecorder) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Clean up the AudioContext used for volume monitoring.\n if (this._conversationAudioCtx) {\n this._conversationAudioCtx.close().catch(function () { });\n this._conversationAudioCtx = null;\n this._conversationAnalyser = null;\n }\n\n // Mark any in-flight assistant message as done to stop the spinner.\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Safety net: clear all lingering streaming indicators.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Show a \"conversation ended\" notification system message.\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n updateConversationButton() {\n if (!this.conversationButton) {\n return;\n }\n\n if (this.isConversationMode) {\n this.conversationButton.classList.add('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-dark', 'btn-outline-secondary');\n this.conversationButton.title = this.conversationButton.getAttribute('data-end-title') || 'End Conversation';\n var endHtml = this.conversationButton.getAttribute('data-end-html');\n if (endHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(endHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n } else {\n this.conversationButton.classList.remove('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-secondary');\n this.conversationButton.classList.add('btn-outline-dark');\n this.conversationButton.blur();\n this.conversationButton.title = this.conversationButton.getAttribute('data-start-title') || 'Start Conversation';\n var startHtml = this.conversationButton.getAttribute('data-start-html');\n if (startHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(startHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n }\n },\n conversationModeSendPrompt() {\n // Legacy: only used by AudioInput mode's ReceiveTranscript.\n },\n conversationModeOnAudioEnded() {\n // Legacy: in conversation mode, audio playback continuation\n // is handled by the persistent stream. This method is only\n // called from playCollectedAudio for non-conversation TTS.\n },\n generatePrompt(element) {\n if (!element) {\n console.error('The element paramter is required.');\n\n return;\n }\n\n let templateProfileId = element.getAttribute('data-profile-id');\n let sessionId = this.getSessionId();\n let sessionProfileId = this.getProfileId();\n\n if (!templateProfileId || !sessionId) {\n\n console.error('The given element is missing data-profile-id or the session has not yet started.');\n return;\n }\n\n // streamMessage() already shows the typing indicator.\n this.streamMessage(templateProfileId, null, sessionProfileId);\n },\n createSessionUrl(baseUrl, param, value) {\n\n const fullUrl = baseUrl.toLowerCase().startsWith('http') ? baseUrl : window.location.origin + baseUrl;\n const url = new URL(fullUrl);\n\n url.searchParams.set(param, value);\n\n return url.toString();\n },\n showTypingIndicator() {\n this.addMessage({\n role: 'indicator',\n htmlContent: config.indicatorTemplate\n });\n },\n hideTypingIndicator() {\n const originalLength = this.messages.length;\n this.messages = this.messages.filter(msg => msg.role !== 'indicator');\n const removedCount = originalLength - this.messages.length;\n return removedCount;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n this.scheduleNotificationDismiss(notification);\n }\n },\n scheduleNotificationDismiss(notification) {\n if (!notification || !notification.type || !notification.autoDismissMs || notification.autoDismissMs <= 0) {\n return;\n }\n this.notificationDismissTimers[notification.type] = setTimeout(() => {\n this.removeNotification(notification.type);\n }, notification.autoDismissMs);\n },\n clearNotificationDismiss(notificationType) {\n var timerId = this.notificationDismissTimers[notificationType];\n if (!timerId) {\n return;\n }\n clearTimeout(timerId);\n delete this.notificationDismissTimers[notificationType];\n },\n removeNotification(notificationType) {\n this.clearNotificationDismiss(notificationType);\n this.notifications = this.notifications.filter(n => n.type !== notificationType);\n },\n dismissNotification(notificationType) {\n this.removeNotification(notificationType);\n },\n handleNotificationAction(notificationType, actionName) {\n if (!this.connection) {\n return;\n }\n var sessionId = this.getSessionId();\n this.connection.invoke(\"HandleNotificationAction\", sessionId, notificationType, actionName).catch(function (err) {\n console.error(\"Error handling notification action:\", err);\n });\n },\n scrollToBottom() {\n if (!this.autoScroll) {\n return;\n }\n setTimeout(() => {\n this.chatContainer.scrollTop = this.chatContainer.scrollHeight - this.chatContainer.clientHeight;\n }, 50);\n },\n handleUserInput(event) {\n this.prompt = event.target.value;\n },\n getProfileId() {\n return this.inputElement\n ? this.inputElement.getAttribute('data-profile-id')\n : null;\n },\n setSessionId(sessionId) {\n if (!this.inputElement) {\n return;\n }\n\n this.inputElement.setAttribute('data-session-id', sessionId || '');\n },\n resetSession() {\n this.stopRecording();\n this.rejectPendingSessionRequest('Session was reset.');\n this.setSessionId('');\n this.isSessionStarted = false;\n this.sessionRating = null;\n this.messages = [];\n this.documents = [];\n if (!config.autoCreateSession) {\n this.showPlaceholder();\n }\n\n if (config.autoCreateSession) {\n this.startNewSession();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onSessionReset === 'function') {\n widgetBehavior.onSessionReset(this, config);\n }\n },\n startNewSession() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n const profileId = this.getProfileId();\n if (!profileId || !this.connection) {\n return;\n }\n\n this.requestNewSession(profileId).catch(err => console.error(err));\n },\n async ensureSessionForDocuments(profileId) {\n var sessionId = this.getSessionId();\n if (sessionId) {\n return sessionId;\n }\n\n if (!profileId || !this.connection) {\n return null;\n }\n\n return await this.requestNewSession(profileId);\n },\n requestNewSession(profileId) {\n if (this.pendingSessionPromise) {\n return this.pendingSessionPromise;\n }\n\n if (!profileId || !this.connection) {\n return Promise.resolve(null);\n }\n\n this.pendingSessionPromise = new Promise((resolve, reject) => {\n this.pendingSessionResolver = resolve;\n this.pendingSessionRejector = reject;\n this.pendingSessionTimeoutId = window.setTimeout(() => {\n this.rejectPendingSessionRequest('Timed out while creating a chat session.');\n }, 15000);\n });\n\n this.connection.invoke(\"StartSession\", profileId, null).catch(err => {\n this.rejectPendingSessionRequest(err);\n });\n\n return this.pendingSessionPromise;\n },\n resolvePendingSessionRequest(sessionId) {\n if (this.pendingSessionResolver) {\n this.pendingSessionResolver(sessionId);\n }\n\n this.clearPendingSessionRequest();\n },\n rejectPendingSessionRequest(error) {\n if (this.pendingSessionRejector) {\n this.pendingSessionRejector(error);\n }\n\n this.clearPendingSessionRequest();\n },\n clearPendingSessionRequest() {\n if (this.pendingSessionTimeoutId) {\n window.clearTimeout(this.pendingSessionTimeoutId);\n }\n\n this.pendingSessionPromise = null;\n this.pendingSessionResolver = null;\n this.pendingSessionRejector = null;\n this.pendingSessionTimeoutId = null;\n },\n initializeApp() {\n this.inputElement = document.querySelector(config.inputElementSelector);\n this.buttonElement = document.querySelector(config.sendButtonElementSelector);\n this.chatContainer = document.querySelector(config.chatContainerElementSelector);\n this.placeholder = document.querySelector(config.placeholderElementSelector);\n\n if (!this.inputElement || !this.buttonElement || !this.chatContainer || !this.placeholder) {\n console.error('AI chat app could not initialize because one or more required elements were not found.', {\n inputElementSelector: config.inputElementSelector,\n sendButtonElementSelector: config.sendButtonElementSelector,\n chatContainerElementSelector: config.chatContainerElementSelector,\n placeholderElementSelector: config.placeholderElementSelector\n });\n\n return false;\n }\n\n this.applyOrchestratorAvailability();\n\n const sessionId = this.getSessionId();\n if (!hasWidgetConfig && sessionId) {\n this.loadSession(sessionId);\n } else if (this.isOrchestratorAvailable() && config.autoCreateSession && !hasWidgetConfig && !sessionId) {\n this.startNewSession();\n }\n\n // Initialize document bar if enabled.\n if (config.sessionDocumentsEnabled && config.documentBarSelector) {\n this.documentBar = document.querySelector(config.documentBarSelector);\n if (this.documentBar) {\n this.renderDocumentBar();\n\n // Create hidden file input for document uploads.\n var fileInput = document.createElement('input');\n fileInput.type = 'file';\n fileInput.id = 'ai-chat-doc-input';\n fileInput.className = 'd-none';\n fileInput.multiple = true;\n if (config.allowedExtensions) {\n fileInput.accept = config.allowedExtensions;\n }\n fileInput.addEventListener('change', (e) => this.handleFileInputChange(e));\n this.documentBar.parentElement.appendChild(fileInput);\n\n // Set up drag-and-drop on the input area.\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) {\n inputArea.addEventListener('dragover', (e) => this.handleDragOver(e));\n inputArea.addEventListener('dragleave', (e) => this.handleDragLeave(e));\n inputArea.addEventListener('drop', (e) => this.handleDrop(e));\n }\n }\n }\n\n // Pause auto-scroll when the user manually scrolls up during streaming.\n this.chatContainer.addEventListener('scroll', () => {\n if (!this.stream) {\n return;\n }\n const threshold = 30;\n const atBottom = this.chatContainer.scrollHeight - this.chatContainer.clientHeight - this.chatContainer.scrollTop <= threshold;\n this.autoScroll = atBottom;\n });\n\n this.inputElement.addEventListener('keydown', event => {\n\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n this.buttonElement.click();\n }\n });\n\n this.inputElement.addEventListener('input', (e) => {\n this.handleUserInput(e);\n\n if (e.target.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n });\n\n this.buttonElement.addEventListener('click', () => {\n\n if (this.stream != null) {\n this.stream.dispose();\n this.stream = null;\n\n this.streamingFinished();\n this.hideTypingIndicator();\n\n // Clean up: remove empty assistant message or stop streaming animation.\n if (this.messages.length > 0) {\n const lastMsg = this.messages[this.messages.length - 1];\n if (lastMsg.role === 'assistant' && !lastMsg.content) {\n this.messages.pop();\n } else if (lastMsg.isStreaming) {\n lastMsg.isStreaming = false;\n }\n }\n\n return;\n }\n\n this.sendMessage();\n });\n\n const promptGenerators = document.getElementsByClassName('profile-generated-prompt');\n\n for (var i = 0; i < promptGenerators.length; i++) {\n promptGenerators[i].addEventListener('click', (e) => {\n e.preventDefault();\n this.generatePrompt(e.target);\n });\n }\n\n const chatSessions = document.getElementsByClassName('chat-session-history-item');\n\n for (var i = 0; i < chatSessions.length; i++) {\n chatSessions[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var sessionId = e.target.getAttribute('data-session-id');\n\n if (!sessionId) {\n console.error('an element with the class chat-session-history-item with no data-session-id set.');\n\n return;\n }\n\n this.loadSession(sessionId);\n this.showChatScreen();\n });\n }\n\n for (let i = 0; i < config.messages.length; i++) {\n this.addMessage(config.messages[i]);\n }\n\n // Update feedback icons in the DOM after initial messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // Delegate click for code block copy buttons.\n if (this.chatContainer) {\n this.chatContainer.addEventListener('click', (e) => {\n var btn = e.target.closest('.ai-code-copy-btn');\n if (!btn) {\n return;\n }\n\n var block = btn.closest('.ai-code-block') || btn.closest('pre');\n if (!block) {\n return;\n }\n\n var codeEl = block.querySelector('code');\n if (codeEl) {\n navigator.clipboard.writeText(codeEl.textContent);\n var copiedText = config.codeCopiedText || 'Copied!';\n btn.innerHTML = '<span class=\"fa-solid fa-check\"></span> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<span class=\"fa-regular fa-copy\"></span>';\n }, 2000);\n }\n });\n }\n\n // Initialize speech-to-text microphone button.\n if (this.speechToTextEnabled && config.micButtonElementSelector) {\n this.micButton = document.querySelector(config.micButtonElementSelector);\n if (this.micButton) {\n this.micButton.style.display = '';\n this.micButton.addEventListener('click', () => {\n this.toggleRecording();\n });\n }\n }\n\n // Initialize conversation mode button.\n if (this.conversationModeEnabled && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n\n return true;\n },\n loadSession(sessionId) {\n this.connection.invoke(\"LoadSession\", sessionId).catch(err => console.error(err));\n },\n reloadCurrentSession() {\n\n var sessionId = this.getSessionId();\n if (sessionId) {\n this.loadSession(sessionId);\n }\n },\n initializeSession(sessionId, force) {\n if (this.isSessionStarted && !force) {\n if (sessionId && this.getSessionId() === sessionId) {\n this.resolvePendingSessionRequest(sessionId);\n }\n\n return\n }\n this.fireEvent(new CustomEvent(\"initializingSessionOpenAIChat\", { detail: { sessionId: sessionId } }))\n this.setSessionId(sessionId);\n this.isSessionStarted = true;\n this.resolvePendingSessionRequest(sessionId);\n\n if (widgetBehavior && typeof widgetBehavior.onSessionInitialized === 'function') {\n widgetBehavior.onSessionInitialized(this, sessionId, config);\n }\n },\n getSessionId() {\n let sessionId = this.inputElement\n ? this.inputElement.getAttribute('data-session-id')\n : null;\n\n if (!sessionId && widgetBehavior && typeof widgetBehavior.resolveSessionId === 'function') {\n sessionId = widgetBehavior.resolveSessionId(this, config);\n }\n\n return sessionId;\n },\n copyResponse(message) {\n const text = message && typeof message === 'object'\n ? message.copyContent ?? message.content ?? ''\n : message ?? '';\n\n navigator.clipboard.writeText(text);\n },\n updateFeedbackIcons(container, userRating) {\n if (!container) {\n return;\n }\n\n var upBtn = container.querySelector('.rate-up-btn');\n var downBtn = container.querySelector('.rate-down-btn');\n\n // Keep feedback icons as simple span-based Font Awesome markup so\n // later state updates do not depend on i2svg replacement.\n if (upBtn) {\n var upClass = userRating === true ? 'fa-solid fa-thumbs-up' : 'fa-regular fa-thumbs-up';\n var upIcon = document.createElement('span');\n upIcon.className = upClass;\n upIcon.style.fontSize = '0.9rem';\n upBtn.textContent = '';\n upBtn.appendChild(upIcon);\n }\n\n if (downBtn) {\n var downClass = userRating === false ? 'fa-solid fa-thumbs-down' : 'fa-regular fa-thumbs-down';\n var downIcon = document.createElement('span');\n downIcon.className = downClass;\n downIcon.style.fontSize = '0.9rem';\n downBtn.textContent = '';\n downBtn.appendChild(downIcon);\n }\n },\n refreshAllFeedbackIcons() {\n var containers = this.$el.querySelectorAll('.ai-chat-message-assistant-feedback');\n\n for (var i = 0; i < containers.length; i++) {\n var msgId = containers[i].getAttribute('data-message-id');\n var msg = this.messages.find(m => m.id === msgId);\n\n if (msg) {\n this.updateFeedbackIcons(containers[i], msg.userRating);\n }\n }\n },\n rateMessage(message, isPositive, event) {\n var sessionId = this.getSessionId();\n\n if (!sessionId || !message.id || !this.connection) {\n return;\n }\n\n // Toggle: clicking the same rating again clears it.\n var newRating = message.userRating === isPositive ? null : isPositive;\n message.userRating = newRating;\n\n // Find the feedback container by message ID for reliable DOM targeting.\n var feedbackContainer = this.$el.querySelector(\n '.ai-chat-message-assistant-feedback[data-message-id=\"' + message.id + '\"]'\n );\n\n this.updateFeedbackIcons(feedbackContainer, newRating);\n\n // Trigger spark animation after Font Awesome has re-processed icons.\n if (newRating !== null && feedbackContainer) {\n setTimeout(() => {\n var btnClass = isPositive ? '.rate-up-btn' : '.rate-down-btn';\n var btn = feedbackContainer.querySelector(btnClass);\n\n if (btn) {\n btn.classList.remove('spark-effect');\n void btn.offsetWidth;\n btn.classList.add('spark-effect');\n btn.addEventListener('animationend', function onEnd() {\n btn.removeEventListener('animationend', onEnd);\n btn.classList.remove('spark-effect');\n });\n }\n }, 50);\n }\n\n this.connection.invoke(\"RateMessage\", sessionId, message.id, isPositive).catch(function (err) {\n console.error('Failed to rate message:', err);\n });\n }\n },\n watch: {\n documents: {\n handler() {\n this.renderDocumentBar();\n if (widgetBehavior && typeof widgetBehavior.onDocumentsChanged === 'function') {\n widgetBehavior.onDocumentsChanged(this, this.documents, config);\n }\n },\n deep: true\n },\n isUploading() { this.renderDocumentBar(); },\n isDocumentOperationPending() { this.renderDocumentBar(); },\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n isConversationMode(active) {\n // Hide/show mic button.\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n // Hide/show send button.\n if (this.buttonElement) {\n this.buttonElement.style.display = active ? 'none' : '';\n }\n\n // Disable/enable textarea.\n if (this.inputElement) {\n this.inputElement.disabled = active;\n if (active) {\n this.inputElement.placeholder = '';\n }\n }\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n const isInitialized = this.initializeApp();\n if (isInitialized && hasWidgetConfig && widgetBehavior && typeof widgetBehavior.onMounted === 'function') {\n widgetBehavior.onMounted(this, config);\n }\n })();\n\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n window.addEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n\n this.stopAudio(false);\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n if (this.connection) {\n this.connection.stop();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onBeforeUnmount === 'function') {\n widgetBehavior.onBeforeUnmount(this, config);\n }\n },\n template: config.messageTemplate\n };\n\n const app = Vue.createApp(appDefinition).mount(config.appElementSelector);\n\n if (widgetBehavior && typeof widgetBehavior.attach === 'function') {\n widgetBehavior.attach(app, config);\n }\n\n return app;\n };\n\n return {\n initialize: initialize\n };\n}();\n\n// Download chart as image via event delegation (DOMPurify strips inline onclick).\ndocument.addEventListener('click', function (e) {\n const btn = e.target.closest('.download-chart-btn');\n if (!btn) {\n return;\n }\n const chartId = btn.getAttribute('data-chart-id');\n const canvas = chartId ? document.getElementById(chartId) : null;\n if (!canvas) {\n console.error('Chart canvas not found:', chartId);\n return;\n }\n const link = document.createElement('a');\n link.download = 'chart-' + chartId + '.png';\n link.href = canvas.toDataURL('image/png');\n link.click();\n});\n\n// Intercept download clicks for data-URI images and convert to blob downloads.\ndocument.addEventListener('click', function (e) {\n const link = e.target.closest('.ai-download-image');\n if (!link) {\n return;\n }\n\n const container = link.closest('.generated-image-container');\n const img = container?.querySelector('img');\n if (!img) {\n return;\n }\n\n const src = img.src;\n if (!src || !src.startsWith('data:')) {\n return; // Normal URL – let the default <a> behaviour handle it.\n }\n\n e.preventDefault();\n\n fetch(src)\n .then(function (res) { return res.blob(); })\n .then(function (blob) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = link.getAttribute('download') || 'generated-image.png';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(function () { URL.revokeObjectURL(url); }, 100);\n })\n .catch(function (err) { console.error('Failed to download image:', err); });\n});\n"]}
1
+ {"version":3,"sources":["ai-chat.js"],"names":["e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","_regenerator","w","m","defineProperty","_regeneratorDefine","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_toConsumableArray","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","Array","from","isArray","_arrayLikeToArray","_objectWithoutProperties","_objectWithoutPropertiesLoose","getOwnPropertySymbols","indexOf","propertyIsEnumerable","hasOwnProperty","_createForOfIteratorHelper","_n","F","s","next","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","push","_typeof","window","openAIChatManager","defaultConfig","generatedImageAltText","generatedImageMaxWidth","downloadImageTitle","downloadChartTitle","downloadChartButtonText","userLabel","assistantLabel","thumbsUpTitle","thumbsDownTitle","copyTitle","codeCopiedText","widget","chatWidgetContainer","chatWidgetStateName","chatHistorySection","showHistoryButton","closeHistoryButton","newChatButton","toggleButtonSelector","resetSizeButtonSelector","dragHandleSelector","enableDragging","enableResizing","persistLayout","defaultWidth","defaultHeight","minWidth","minHeight","messageTemplate","indicatorTemplate","sanitizeUrl","url","trimmed","trim","escapeHtmlEntities","text","span","document","createElement","textContent","innerHTML","containsFontAwesomePlaceholders","root","nodeType","selector","matches","querySelector","refreshFontAwesomeIcons","fontAwesome","FontAwesome","dom","i2svg","node","observeFontAwesomeIcons","MutationObserver","observer","mutations","forEach","mutation","addedNodes","observe","childList","subtree","parsePixelValue","Number","isFinite","parsed","parseFloat","clamp","min","max","Math","normalizeReference","reference","_ref","_normalized$index","_ref2","_normalized$text","_ref3","_normalized$title","_ref4","_normalized$link","_ref5","_normalized$reference","normalized","assign","index","Index","Text","title","Title","link","Link","referenceType","ReferenceType","isDownloadCitationReference","toLowerCase","normalizeReferences","references","_i","_Object$entries","entries","_normalizeReference","_Object$entries$_i","key","getCitationLabel","buildCitationDisplay","content","processedContent","messageReferences","keys","citations","citedRefs","filter","_ref6","_ref7","includes","sort","_ref8","_ref9","_ref0","_ref1","b","displayIndex","_iterator","_step","_step$value","placeholder","concat","replaceAll","referenceKey","label","isDownload","err","_i2","_citations","citation","map","_ref10","_excluded","buildCopyContent","copyContent","_iterator2","_step2","_iterator3","_step3","trimEnd","updateMessagePresentation","message","rawContent","citationDisplay","displayContent","citationReferences","htmlContent","parseMarkdownContent","renderer","marked","Renderer","data","href","code","lang","highlighted","hljs","getLanguage","highlight","language","_","highlightAuto","langDisplay","image","src","alt","maxWidth","chartCounter","_pendingCharts","__chartConfigs","createChartHtml","chartId","use","extensions","level","start","idx","undefined","tokenizer","extracted","tryExtractChartMarker","startIndex","type","raw","substring","endIndex","json","token","config","jsonStart","depth","inString","escape","ch","jsonEnd","closeBracketIndex","renderChartsInMessage","charts","requestAnimationFrame","_iterator4","_step4","renderChartOnCanvas","canvas","getElementById","Chart","console","warn","offsetParent","_cfg$options","_cfg$options2","_cfg$options2$aspectR","_chartInstance","destroy","cfg","JSON","parse","options","responsive","maintainAspectRatio","aspectRatio","error","renderPendingCharts","configs","_i3","_Object$keys","html","DOMPurify","sanitize","ADD_TAGS","ADD_ATTR","initialize","instanceConfig","hasWidgetConfig","widgetBehavior","openAIChatWidgetBehavior","signalRHubUrl","appElementSelector","chatContainerElementSelector","inputElementSelector","sendButtonElementSelector","appDefinition","inputElement","buttonElement","chatContainer","isSessionStarted","isPlaceholderVisible","isStreaming","isNavigatingAway","autoScroll","stream","messages","notifications","prompt","documents","existingDocuments","isUploading","isDocumentOperationPending","documentOperationQueue","uploadErrors","isDragOver","documentBar","metricsEnabled","isRecording","mediaRecorder","preRecordingPrompt","micButton","speechToTextEnabled","chatMode","textToSpeechEnabled","ttsVoiceName","audioChunks","audioPlayQueue","isPlayingAudio","currentAudioElement","currentAudioUrl","ttsButton","ttsPlayingMessageIndex","ttsAudioCache","ttsInstanceId","random","singleResponseMode","conversationModeEnabled","conversationButton","isConversationMode","notificationDismissTimers","pendingSessionPromise","pendingSessionResolver","pendingSessionRejector","pendingSessionTimeoutId","computed","lastAssistantIndex","role","methods","handleBeforeUnload","handleDragOver","sessionDocumentsEnabled","preventDefault","stopPropagation","inputArea","closest","classList","add","handleDragLeave","remove","handleDrop","dataTransfer","files","uploadFiles","triggerFileInput","fileInput","click","handleFileInputChange","target","queueDocumentOperation","operation","self","previousOperation","nextOperation","_callee","_context","_this","_callee3","filesToUpload","_context3","uploadDocumentUrl","_callee2","sessionId","profileId","formData","response","errorText","uploadError","result","_t","_t2","_context2","getSessionId","getProfileId","ensureSessionForDocuments","fileName","renderDocumentBar","FormData","append","fetch","method","body","ok","extractReadableErrorMessage","initializeSession","uploaded","failed","reloadCurrentSession","removeDocument","doc","_this2","_callee5","_context5","removeDocumentUrl","_callee4","removeError","_t3","_context4","headers","stringify","itemId","documentId","splice","status","formatFileSize","bytes","toFixed","escapeHtml","failedItem","failedName","errorMsg","supportedExtensionsText","replaceChildren","RETURN_DOM_FRAGMENT","closeButtons","querySelectorAll","j","addEventListener","docToRemove","parseInt","getAttribute","errorCloseButtons","addBtn","div","fallbackMessage","startsWith","detail","normalizeAssistantAppearance","appearance","icon","cssClass","disableStreamingAnimation","getAssistantLabel","getAssistantRoleClasses","classes","getAssistantIconClasses","shouldAnimateAssistantIcon","getAssistantIcon","startConnection","_this3","_callee6","_t4","_context6","connection","signalR","HubConnectionBuilder","withUrl","withAutomaticReconnect","build","serverTimeoutInMilliseconds","keepAliveIntervalInMilliseconds","on","_data$messages","msg","addMessage","$nextTick","refreshAllFeedbackIcons","initialPrompt","sendMessage","stopRecording","handleReceiveError","messageId","userRating","find","id","isFinal","_conversationPartialTranscript","escaped","replace","_conversationPartialMessage","hidePlaceholder","isPartial","scrollToBottom","_audioInputSent","dispatchEvent","Event","stopAudio","_conversationAssistantMessage","oldMsg","responseId","hideTypingIndicator","msgIndex","newMessage","base64Audio","contentType","binaryString","atob","Uint8Array","charCodeAt","playCollectedAudio","notification","receiveNotification","updateNotification","notificationType","removeNotification","onreconnecting","onreconnected","info","autoCreateSession","startNewSession","onclose","addMessageInternal","_this4","fireEvent","CustomEvent","_this5","_message$rawContent","addMessages","_this6","showPlaceholder","isOrchestratorAvailable","applyOrchestratorAvailability","unavailableMessage","orchestratorUnavailableMessage","disabled","micButtonElement","style","display","conversationButtonElement","event","isIndicator","trimmedPrompt","streamMessage","startRecording","_this7","navigator","mediaDevices","getUserMedia","audio","echoCancellation","noiseSuppression","autoGainControl","mimeType","MediaRecorder","isTypeSupported","audioBitsPerSecond","subject","Subject","pendingChunk","size","_callee7","uint8Array","base64","_context7","arrayBuffer","reduce","str","byte","String","fromCharCode","btoa","getTracks","track","stop","complete","documentElement","send","updateMicButton","toggleRecording","sessionProfileId","_this8","dispose","streamingStarted","showTypingIndicator","lastResponseId","messageIndex","currentSessionId","subscribe","chunk","_i4","_Object$entries2","_normalizeReference2","_Object$entries2$_i","_this8$stream","processReferences","streamingFinished","synthesizeSpeech","_this8$stream2","getServiceDownMessage","_this9","_ref15","_message$rawContent2","stopIcon","setAttribute","startIcon","removeAttribute","focus","icons","handleExternalTtsStop","_e$detail","sourceId","updateTtsPlaybackButtons","_this0","buttons","button","buttonIndex","isPlaying","toggle","cacheIndex","_this1","_ttsCacheIndex","invoke","toggleMessageTts","_this10","playAudioBlob","_this11","totalLength","sum","combined","offset","_iterator5","_step5","set","blob","Blob","_this12","URL","createObjectURL","Audio","revokeObjectURL","playNextInQueue","play","_this13","nextBlob","shift","conversationModeOnAudioEnded","_this14","pause","currentTime","toggleConversationMode","stopConversationMode","startConversationMode","_this15","updateConversationButton","_conversationSubject","_conversationStream","AudioCtx","AudioContext","webkitAudioContext","_conversationAudioCtx","_conversationAnalyser","createAnalyser","fftSize","micSource","createMediaStreamSource","connect","analyser","interruptVolumeThreshold","freqData","frequencyBinCount","getByteFrequencyData","k","avg","_callee8","_context8","close","dismissible","autoDismissMs","endHtml","blur","startHtml","conversationModeSendPrompt","generatePrompt","element","templateProfileId","createSessionUrl","baseUrl","param","fullUrl","location","origin","searchParams","originalLength","removedCount","_this16","clearNotificationDismiss","existingIndex","findIndex","scheduleNotificationDismiss","_this17","setTimeout","timerId","clearTimeout","dismissNotification","handleNotificationAction","actionName","_this18","scrollTop","scrollHeight","clientHeight","handleUserInput","setSessionId","resetSession","rejectPendingSessionRequest","sessionRating","onSessionReset","requestNewSession","_this19","_callee9","_context9","_this20","reject","resolvePendingSessionRequest","clearPendingSessionRequest","initializeApp","_this21","placeholderElementSelector","loadSession","documentBarSelector","className","multiple","allowedExtensions","accept","parentElement","appendChild","threshold","atBottom","shiftKey","lastMsg","pop","promptGenerators","getElementsByClassName","chatSessions","showChatScreen","btn","block","codeEl","clipboard","writeText","copiedText","micButtonElementSelector","conversationButtonElementSelector","force","onSessionInitialized","resolveSessionId","copyResponse","_ref17","_message$copyContent","updateFeedbackIcons","container","upBtn","downBtn","upClass","upIcon","fontSize","downClass","downIcon","containers","$el","msgId","rateMessage","isPositive","newRating","feedbackContainer","btnClass","offsetWidth","onEnd","removeEventListener","watch","handler","onDocumentsChanged","deep","active","mounted","_this22","_callee0","isInitialized","_context0","onMounted","fontAwesomeObserver","beforeUnmount","disconnect","onBeforeUnmount","template","app","Vue","createApp","mount","attach","download","toDataURL","img","res","removeChild"],"mappings":";;;;;;0BACA,uKAAAA,CAAA,EAAAC,CAAA,EAAAC,CAAA,wBAAAC,MAAA,GAAAA,MAAA,OAAAC,CAAA,GAAAF,CAAA,CAAAG,QAAA,kBAAAC,CAAA,GAAAJ,CAAA,CAAAK,WAAA,8BAAAC,EAAAN,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAE,CAAA,QAAAC,CAAA,GAAAL,CAAA,IAAAA,CAAA,CAAAM,SAAA,YAAAC,SAAA,GAAAP,CAAA,GAAAO,SAAA,EAAAC,CAAA,GAAAC,MAAA,CAAAC,MAAA,CAAAL,CAAA,CAAAC,SAAA,UAAAK,mBAAA,CAAAH,CAAA,uBAAAV,CAAA,EAAAE,CAAA,EAAAE,CAAA,QAAAE,CAAA,EAAAC,CAAA,EAAAG,CAAA,EAAAI,CAAA,MAAAC,CAAA,GAAAX,CAAA,QAAAY,CAAA,OAAAC,CAAA,KAAAF,CAAA,KAAAb,CAAA,KAAAgB,CAAA,EAAApB,CAAA,EAAAqB,CAAA,EAAAC,CAAA,EAAAN,CAAA,EAAAM,CAAA,CAAAC,IAAA,CAAAvB,CAAA,MAAAsB,CAAA,WAAAA,EAAArB,CAAA,EAAAC,CAAA,WAAAM,CAAA,GAAAP,CAAA,EAAAQ,CAAA,MAAAG,CAAA,GAAAZ,CAAA,EAAAmB,CAAA,CAAAf,CAAA,GAAAF,CAAA,EAAAmB,CAAA,gBAAAC,EAAApB,CAAA,EAAAE,CAAA,SAAAK,CAAA,GAAAP,CAAA,EAAAU,CAAA,GAAAR,CAAA,EAAAH,CAAA,OAAAiB,CAAA,IAAAF,CAAA,KAAAV,CAAA,IAAAL,CAAA,GAAAgB,CAAA,CAAAO,MAAA,EAAAvB,CAAA,UAAAK,CAAA,EAAAE,CAAA,GAAAS,CAAA,CAAAhB,CAAA,GAAAqB,CAAA,GAAAH,CAAA,CAAAF,CAAA,EAAAQ,CAAA,GAAAjB,CAAA,KAAAN,CAAA,QAAAI,CAAA,GAAAmB,CAAA,KAAArB,CAAA,MAAAQ,CAAA,GAAAJ,CAAA,EAAAC,CAAA,GAAAD,CAAA,YAAAC,CAAA,WAAAD,CAAA,MAAAA,CAAA,MAAAR,CAAA,IAAAQ,CAAA,OAAAc,CAAA,MAAAhB,CAAA,GAAAJ,CAAA,QAAAoB,CAAA,GAAAd,CAAA,QAAAC,CAAA,MAAAU,CAAA,CAAAC,CAAA,GAAAhB,CAAA,EAAAe,CAAA,CAAAf,CAAA,GAAAI,CAAA,OAAAc,CAAA,GAAAG,CAAA,KAAAnB,CAAA,GAAAJ,CAAA,QAAAM,CAAA,MAAAJ,CAAA,IAAAA,CAAA,GAAAqB,CAAA,MAAAjB,CAAA,MAAAN,CAAA,EAAAM,CAAA,MAAAJ,CAAA,EAAAe,CAAA,CAAAf,CAAA,GAAAqB,CAAA,EAAAhB,CAAA,cAAAH,CAAA,IAAAJ,CAAA,aAAAmB,CAAA,QAAAH,CAAA,OAAAd,CAAA,qBAAAE,CAAA,EAAAW,CAAA,EAAAQ,CAAA,QAAAT,CAAA,YAAAU,SAAA,uCAAAR,CAAA,UAAAD,CAAA,IAAAK,CAAA,CAAAL,CAAA,EAAAQ,CAAA,GAAAhB,CAAA,GAAAQ,CAAA,EAAAL,CAAA,GAAAa,CAAA,GAAAxB,CAAA,GAAAQ,CAAA,OAAAT,CAAA,GAAAY,CAAA,MAAAM,CAAA,KAAAV,CAAA,KAAAC,CAAA,GAAAA,CAAA,QAAAA,CAAA,SAAAU,CAAA,CAAAf,CAAA,QAAAkB,CAAA,CAAAb,CAAA,EAAAG,CAAA,KAAAO,CAAA,CAAAf,CAAA,GAAAQ,CAAA,GAAAO,CAAA,CAAAC,CAAA,GAAAR,CAAA,aAAAI,CAAA,MAAAR,CAAA,QAAAC,CAAA,KAAAH,CAAA,YAAAL,CAAA,GAAAO,CAAA,CAAAF,CAAA,WAAAL,CAAA,GAAAA,CAAA,CAAA0B,IAAA,CAAAnB,CAAA,EAAAI,CAAA,UAAAc,SAAA,2CAAAzB,CAAA,CAAA2B,IAAA,SAAA3B,CAAA,EAAAW,CAAA,GAAAX,CAAA,CAAA4B,KAAA,EAAApB,CAAA,SAAAA,CAAA,oBAAAA,CAAA,KAAAR,CAAA,GAAAO,CAAA,eAAAP,CAAA,CAAA0B,IAAA,CAAAnB,CAAA,GAAAC,CAAA,SAAAG,CAAA,GAAAc,SAAA,uCAAApB,CAAA,gBAAAG,CAAA,OAAAD,CAAA,GAAAR,CAAA,cAAAC,CAAA,IAAAiB,CAAA,GAAAC,CAAA,CAAAf,CAAA,QAAAQ,CAAA,GAAAV,CAAA,CAAAyB,IAAA,CAAAvB,CAAA,EAAAe,CAAA,OAAAE,CAAA,kBAAApB,CAAA,IAAAO,CAAA,GAAAR,CAAA,EAAAS,CAAA,MAAAG,CAAA,GAAAX,CAAA,cAAAe,CAAA,mBAAAa,KAAA,EAAA5B,CAAA,EAAA2B,IAAA,EAAAV,CAAA,SAAAhB,CAAA,EAAAI,CAAA,EAAAE,CAAA,QAAAI,CAAA,QAAAS,CAAA,gBAAAV,UAAA,cAAAmB,kBAAA,cAAAC,2BAAA,KAAA9B,CAAA,GAAAY,MAAA,CAAAmB,cAAA,MAAAvB,CAAA,MAAAL,CAAA,IAAAH,CAAA,CAAAA,CAAA,IAAAG,CAAA,SAAAW,mBAAA,CAAAd,CAAA,OAAAG,CAAA,iCAAAH,CAAA,GAAAW,CAAA,GAAAmB,0BAAA,CAAArB,SAAA,GAAAC,SAAA,CAAAD,SAAA,GAAAG,MAAA,CAAAC,MAAA,CAAAL,CAAA,YAAAO,EAAAhB,CAAA,WAAAa,MAAA,CAAAoB,cAAA,GAAApB,MAAA,CAAAoB,cAAA,CAAAjC,CAAA,EAAA+B,0BAAA,KAAA/B,CAAA,CAAAkC,SAAA,GAAAH,0BAAA,EAAAhB,mBAAA,CAAAf,CAAA,EAAAM,CAAA,yBAAAN,CAAA,CAAAU,SAAA,GAAAG,MAAA,CAAAC,MAAA,CAAAF,CAAA,GAAAZ,CAAA,WAAA8B,iBAAA,CAAApB,SAAA,GAAAqB,0BAAA,EAAAhB,mBAAA,CAAAH,CAAA,iBAAAmB,0BAAA,GAAAhB,mBAAA,CAAAgB,0BAAA,iBAAAD,iBAAA,GAAAA,iBAAA,CAAAK,WAAA,wBAAApB,mBAAA,CAAAgB,0BAAA,EAAAzB,CAAA,wBAAAS,mBAAA,CAAAH,CAAA,GAAAG,mBAAA,CAAAH,CAAA,EAAAN,CAAA,gBAAAS,mBAAA,CAAAH,CAAA,EAAAR,CAAA,iCAAAW,mBAAA,CAAAH,CAAA,8DAAAwB,YAAA,YAAAA,aAAA,aAAAC,CAAA,EAAA7B,CAAA,EAAA8B,CAAA,EAAAtB,CAAA;AAAA,SAAAD,oBAAAf,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAH,CAAA,QAAAO,CAAA,GAAAK,MAAA,CAAA0B,cAAA,QAAA/B,CAAA,uBAAAR,CAAA,IAAAQ,CAAA,QAAAO,mBAAA,YAAAyB,mBAAAxC,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAH,CAAA,aAAAK,EAAAJ,CAAA,EAAAE,CAAA,IAAAW,mBAAA,CAAAf,CAAA,EAAAE,CAAA,YAAAF,CAAA,gBAAAyC,OAAA,CAAAvC,CAAA,EAAAE,CAAA,EAAAJ,CAAA,SAAAE,CAAA,GAAAM,CAAA,GAAAA,CAAA,CAAAR,CAAA,EAAAE,CAAA,IAAA2B,KAAA,EAAAzB,CAAA,EAAAsC,UAAA,GAAAzC,CAAA,EAAA0C,YAAA,GAAA1C,CAAA,EAAA2C,QAAA,GAAA3C,CAAA,MAAAD,CAAA,CAAAE,CAAA,IAAAE,CAAA,IAAAE,CAAA,aAAAA,CAAA,cAAAA,CAAA,mBAAAS,mBAAA,CAAAf,CAAA,EAAAE,CAAA,EAAAE,CAAA,EAAAH,CAAA;AAAA,SAAA4C,mBAAAzC,CAAA,EAAAH,CAAA,EAAAD,CAAA,EAAAE,CAAA,EAAAI,CAAA,EAAAe,CAAA,EAAAZ,CAAA,cAAAD,CAAA,GAAAJ,CAAA,CAAAiB,CAAA,EAAAZ,CAAA,GAAAG,CAAA,GAAAJ,CAAA,CAAAqB,KAAA,WAAAzB,CAAA,gBAAAJ,CAAA,CAAAI,CAAA,KAAAI,CAAA,CAAAoB,IAAA,GAAA3B,CAAA,CAAAW,CAAA,IAAAkC,OAAA,CAAAC,OAAA,CAAAnC,CAAA,EAAAoC,IAAA,CAAA9C,CAAA,EAAAI,CAAA;AAAA,SAAA2C,kBAAA7C,CAAA,6BAAAH,CAAA,SAAAD,CAAA,GAAAkD,SAAA,aAAAJ,OAAA,WAAA5C,CAAA,EAAAI,CAAA,QAAAe,CAAA,GAAAjB,CAAA,CAAA+C,KAAA,CAAAlD,CAAA,EAAAD,CAAA,YAAAoD,MAAAhD,CAAA,IAAAyC,kBAAA,CAAAxB,CAAA,EAAAnB,CAAA,EAAAI,CAAA,EAAA8C,KAAA,EAAAC,MAAA,UAAAjD,CAAA,cAAAiD,OAAAjD,CAAA,IAAAyC,kBAAA,CAAAxB,CAAA,EAAAnB,CAAA,EAAAI,CAAA,EAAA8C,KAAA,EAAAC,MAAA,WAAAjD,CAAA,KAAAgD,KAAA;AAAA,SAAAE,mBAAApD,CAAA,WAAAqD,kBAAA,CAAArD,CAAA,KAAAsD,gBAAA,CAAAtD,CAAA,KAAAuD,2BAAA,CAAAvD,CAAA,KAAAwD,kBAAA;AAAA,SAAAA,mBAAA,cAAAhC,SAAA;AAAA,SAAA8B,iBAAAtD,CAAA,8BAAAC,MAAA,YAAAD,CAAA,CAAAC,MAAA,CAAAE,QAAA,aAAAH,CAAA,uBAAAyD,KAAA,CAAAC,IAAA,CAAA1D,CAAA;AAAA,SAAAqD,mBAAArD,CAAA,QAAAyD,KAAA,CAAAE,OAAA,CAAA3D,CAAA,UAAA4D,iBAAA,CAAA5D,CAAA;AAAA,SAAA6D,yBAAA/D,CAAA,EAAAC,CAAA,gBAAAD,CAAA,iBAAAM,CAAA,EAAAJ,CAAA,EAAAM,CAAA,GAAAwD,6BAAA,CAAAhE,CAAA,EAAAC,CAAA,OAAAY,MAAA,CAAAoD,qBAAA,QAAA7D,CAAA,GAAAS,MAAA,CAAAoD,qBAAA,CAAAjE,CAAA,QAAAE,CAAA,MAAAA,CAAA,GAAAE,CAAA,CAAAoB,MAAA,EAAAtB,CAAA,IAAAI,CAAA,GAAAF,CAAA,CAAAF,CAAA,UAAAD,CAAA,CAAAiE,OAAA,CAAA5D,CAAA,QAAA6D,oBAAA,CAAAxC,IAAA,CAAA3B,CAAA,EAAAM,CAAA,MAAAE,CAAA,CAAAF,CAAA,IAAAN,CAAA,CAAAM,CAAA,aAAAE,CAAA;AAAA,SAAAwD,8BAAA9D,CAAA,EAAAF,CAAA,gBAAAE,CAAA,iBAAAD,CAAA,gBAAAG,CAAA,IAAAF,CAAA,SAAAkE,cAAA,CAAAzC,IAAA,CAAAzB,CAAA,EAAAE,CAAA,gBAAAJ,CAAA,CAAAkE,OAAA,CAAA9D,CAAA,aAAAH,CAAA,CAAAG,CAAA,IAAAF,CAAA,CAAAE,CAAA,YAAAH,CAAA;AAAA,SAAAoE,2BAAAnE,CAAA,EAAAF,CAAA,QAAAC,CAAA,yBAAAE,MAAA,IAAAD,CAAA,CAAAC,MAAA,CAAAE,QAAA,KAAAH,CAAA,qBAAAD,CAAA,QAAA0D,KAAA,CAAAE,OAAA,CAAA3D,CAAA,MAAAD,CAAA,GAAAwD,2BAAA,CAAAvD,CAAA,MAAAF,CAAA,IAAAE,CAAA,uBAAAA,CAAA,CAAAsB,MAAA,IAAAvB,CAAA,KAAAC,CAAA,GAAAD,CAAA,OAAAqE,EAAA,MAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAnE,CAAA,WAAAA,EAAA,WAAAkE,EAAA,IAAApE,CAAA,CAAAsB,MAAA,KAAAI,IAAA,WAAAA,IAAA,MAAAC,KAAA,EAAA3B,CAAA,CAAAoE,EAAA,UAAAtE,CAAA,WAAAA,EAAAE,CAAA,UAAAA,CAAA,KAAAc,CAAA,EAAAuD,CAAA,gBAAA7C,SAAA,iJAAApB,CAAA,EAAAe,CAAA,OAAAT,CAAA,gBAAA4D,CAAA,WAAAA,EAAA,IAAAvE,CAAA,GAAAA,CAAA,CAAA0B,IAAA,CAAAzB,CAAA,MAAAE,CAAA,WAAAA,EAAA,QAAAF,CAAA,GAAAD,CAAA,CAAAwE,IAAA,WAAApD,CAAA,GAAAnB,CAAA,CAAA0B,IAAA,EAAA1B,CAAA,KAAAF,CAAA,WAAAA,EAAAE,CAAA,IAAAU,CAAA,OAAAN,CAAA,GAAAJ,CAAA,KAAAc,CAAA,WAAAA,EAAA,UAAAK,CAAA,YAAApB,CAAA,cAAAA,CAAA,8BAAAW,CAAA,QAAAN,CAAA;AAAA,SAAAoE,eAAAxE,CAAA,EAAAF,CAAA,WAAA2E,eAAA,CAAAzE,CAAA,KAAA0E,qBAAA,CAAA1E,CAAA,EAAAF,CAAA,KAAAyD,2BAAA,CAAAvD,CAAA,EAAAF,CAAA,KAAA6E,gBAAA;AAAA,SAAAA,iBAAA,cAAAnD,SAAA;AAAA,SAAA+B,4BAAAvD,CAAA,EAAAmB,CAAA,QAAAnB,CAAA,2BAAAA,CAAA,SAAA4D,iBAAA,CAAA5D,CAAA,EAAAmB,CAAA,OAAApB,CAAA,MAAA6E,QAAA,CAAAnD,IAAA,CAAAzB,CAAA,EAAA6E,KAAA,6BAAA9E,CAAA,IAAAC,CAAA,CAAA8E,WAAA,KAAA/E,CAAA,GAAAC,CAAA,CAAA8E,WAAA,CAAAC,IAAA,aAAAhF,CAAA,cAAAA,CAAA,GAAA0D,KAAA,CAAAC,IAAA,CAAA1D,CAAA,oBAAAD,CAAA,+CAAAiF,IAAA,CAAAjF,CAAA,IAAA6D,iBAAA,CAAA5D,CAAA,EAAAmB,CAAA;AAAA,SAAAyC,kBAAA5D,CAAA,EAAAmB,CAAA,aAAAA,CAAA,IAAAA,CAAA,GAAAnB,CAAA,CAAAsB,MAAA,MAAAH,CAAA,GAAAnB,CAAA,CAAAsB,MAAA,YAAAxB,CAAA,MAAAI,CAAA,GAAAuD,KAAA,CAAAtC,CAAA,GAAArB,CAAA,GAAAqB,CAAA,EAAArB,CAAA,IAAAI,CAAA,CAAAJ,CAAA,IAAAE,CAAA,CAAAF,CAAA,UAAAI,CAAA;AAAA,SAAAwE,sBAAA1E,CAAA,EAAAuB,CAAA,QAAAxB,CAAA,WAAAC,CAAA,gCAAAC,MAAA,IAAAD,CAAA,CAAAC,MAAA,CAAAE,QAAA,KAAAH,CAAA,4BAAAD,CAAA,QAAAD,CAAA,EAAAI,CAAA,EAAAI,CAAA,EAAAI,CAAA,EAAAS,CAAA,OAAAL,CAAA,OAAAV,CAAA,iBAAAE,CAAA,IAAAP,CAAA,GAAAA,CAAA,CAAA0B,IAAA,CAAAzB,CAAA,GAAAuE,IAAA,QAAAhD,CAAA,QAAAZ,MAAA,CAAAZ,CAAA,MAAAA,CAAA,UAAAe,CAAA,uBAAAA,CAAA,IAAAhB,CAAA,GAAAQ,CAAA,CAAAmB,IAAA,CAAA1B,CAAA,GAAA2B,IAAA,MAAAP,CAAA,CAAA8D,IAAA,CAAAnF,CAAA,CAAA6B,KAAA,GAAAR,CAAA,CAAAG,MAAA,KAAAC,CAAA,GAAAT,CAAA,iBAAAd,CAAA,IAAAI,CAAA,OAAAF,CAAA,GAAAF,CAAA,yBAAAc,CAAA,YAAAf,CAAA,eAAAW,CAAA,GAAAX,CAAA,cAAAY,MAAA,CAAAD,CAAA,MAAAA,CAAA,2BAAAN,CAAA,QAAAF,CAAA,aAAAiB,CAAA;AAAA,SAAAsD,gBAAAzE,CAAA,QAAAyD,KAAA,CAAAE,OAAA,CAAA3D,CAAA,UAAAA,CAAA;AAAA,SAAAkF,QAAA9E,CAAA,sCAAA8E,OAAA,wBAAAjF,MAAA,uBAAAA,MAAA,CAAAE,QAAA,aAAAC,CAAA,kBAAAA,CAAA,gBAAAA,CAAA,WAAAA,CAAA,yBAAAH,MAAA,IAAAG,CAAA,CAAA0E,WAAA,KAAA7E,MAAA,IAAAG,CAAA,KAAAH,MAAA,CAAAO,SAAA,qBAAAJ,CAAA,KAAA8E,OAAA,CAAA9E,CAAA;AADA+E,MAAM,CAACC,iBAAiB,GAAG,YAAY;EAEnC;EACA,IAAIC,aAAa,GAAG;IAChB;IACAC,qBAAqB,EAAE,iBAAiB;IACxCC,sBAAsB,EAAE,GAAG;IAC3BC,kBAAkB,EAAE,gBAAgB;IACpCC,kBAAkB,EAAE,yBAAyB;IAC7CC,uBAAuB,EAAE,UAAU;IACnCC,SAAS,EAAE,KAAK;IAChBC,cAAc,EAAE,WAAW;IAC3BC,aAAa,EAAE,WAAW;IAC1BC,eAAe,EAAE,aAAa;IAC9BC,SAAS,EAAE,2CAA2C;IACtDC,cAAc,EAAE,SAAS;IACzBC,MAAM,EAAE;MACJC,mBAAmB,EAAE,IAAI;MACzBC,mBAAmB,EAAE,IAAI;MACzBC,kBAAkB,EAAE,IAAI;MACxBC,iBAAiB,EAAE,IAAI;MACvBC,kBAAkB,EAAE,IAAI;MACxBC,aAAa,EAAE,IAAI;MACnBC,oBAAoB,EAAE,IAAI;MAC1BC,uBAAuB,EAAE,IAAI;MAC7BC,kBAAkB,EAAE,wBAAwB;MAC5CC,cAAc,EAAE,IAAI;MACpBC,cAAc,EAAE,IAAI;MACpBC,aAAa,EAAE,IAAI;MACnBC,YAAY,EAAE,IAAI;MAClBC,aAAa,EAAE,IAAI;MACnBC,QAAQ,EAAE,GAAG;MACbC,SAAS,EAAE;IACf,CAAC;IACDC,eAAe,mgKAuDlB;IACGC,iBAAiB;EAMrB,CAAC;;EAED;EACA,SAASC,WAAWA,CAACC,GAAG,EAAE;IACtB,IAAI,CAACA,GAAG,EAAE,OAAO,EAAE;IACnB,IAAIC,OAAO,GAAGD,GAAG,CAACE,IAAI,CAAC,CAAC;IACxB,IAAI,eAAe,CAACvC,IAAI,CAACsC,OAAO,CAAC,IAAI,aAAa,CAACtC,IAAI,CAACsC,OAAO,CAAC,IAAI,mBAAmB,CAACtC,IAAI,CAACsC,OAAO,CAAC,EAAE;MACnG,OAAO,EAAE;IACb;IACA,OAAOD,GAAG;EACd;;EAEA;EACA,SAASG,kBAAkBA,CAACC,IAAI,EAAE;IAC9B,IAAIC,IAAI,GAAGC,QAAQ,CAACC,aAAa,CAAC,MAAM,CAAC;IACzCF,IAAI,CAACG,WAAW,GAAGJ,IAAI;IACvB,OAAOC,IAAI,CAACI,SAAS;EACzB;EAEA,SAASC,+BAA+BA,CAACC,IAAI,EAAE;IAC3C,IAAI,CAACA,IAAI,IAAIA,IAAI,CAACC,QAAQ,KAAK,CAAC,EAAE;MAC9B,OAAO,KAAK;IAChB;IAEA,IAAIC,QAAQ,GAAG,wCAAwC;IACvD,IAAI,OAAOF,IAAI,CAACG,OAAO,KAAK,UAAU,IAAIH,IAAI,CAACG,OAAO,CAACD,QAAQ,CAAC,EAAE;MAC9D,OAAO,IAAI;IACf;IAEA,OAAO,OAAOF,IAAI,CAACI,aAAa,KAAK,UAAU,IAAI,CAAC,CAACJ,IAAI,CAACI,aAAa,CAACF,QAAQ,CAAC;EACrF;EAEA,SAASG,uBAAuBA,CAACL,IAAI,EAAE;IACnC,IAAIM,WAAW,GAAGnD,MAAM,CAACoD,WAAW;IACpC,IAAI,CAACR,+BAA+B,CAACC,IAAI,CAAC,IAAI,CAACM,WAAW,IAAI,CAACA,WAAW,CAACE,GAAG,IAAI,OAAOF,WAAW,CAACE,GAAG,CAACC,KAAK,KAAK,UAAU,EAAE;MAC3H;IACJ;IAEAH,WAAW,CAACE,GAAG,CAACC,KAAK,CAAC;MAAEC,IAAI,EAAEV;IAAK,CAAC,CAAC;EACzC;EAEA,SAASW,uBAAuBA,CAACX,IAAI,EAAE;IACnC,IAAI,CAACA,IAAI,IAAI,OAAOY,gBAAgB,KAAK,WAAW,EAAE;MAClD,OAAO,IAAI;IACf;IAEA,IAAIC,QAAQ,GAAG,IAAID,gBAAgB,CAAC,UAAUE,SAAS,EAAE;MACrDA,SAAS,CAACC,OAAO,CAAC,UAAUC,QAAQ,EAAE;QAClCA,QAAQ,CAACC,UAAU,CAACF,OAAO,CAAC,UAAUL,IAAI,EAAE;UACxCL,uBAAuB,CAACK,IAAI,CAAC;QACjC,CAAC,CAAC;MACN,CAAC,CAAC;IACN,CAAC,CAAC;IAEFG,QAAQ,CAACK,OAAO,CAAClB,IAAI,EAAE;MACnBmB,SAAS,EAAE,IAAI;MACfC,OAAO,EAAE;IACb,CAAC,CAAC;IAEF,OAAOP,QAAQ;EACnB;EAEA,SAASQ,eAAeA,CAAC1H,KAAK,EAAE;IAC5B,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI2H,MAAM,CAACC,QAAQ,CAAC5H,KAAK,CAAC,EAAE;MACrD,OAAOA,KAAK;IAChB;IAEA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC3B,OAAO,IAAI;IACf;IAEA,IAAI6H,MAAM,GAAGC,UAAU,CAAC9H,KAAK,CAAC;IAC9B,OAAO2H,MAAM,CAACC,QAAQ,CAACC,MAAM,CAAC,GAAGA,MAAM,GAAG,IAAI;EAClD;EAEA,SAASE,KAAKA,CAAC/H,KAAK,EAAEgI,GAAG,EAAEC,GAAG,EAAE;IAC5B,OAAOC,IAAI,CAACF,GAAG,CAACE,IAAI,CAACD,GAAG,CAACjI,KAAK,EAAEgI,GAAG,CAAC,EAAEC,GAAG,CAAC;EAC9C;EAEA,SAASE,kBAAkBA,CAACC,SAAS,EAAE;IAAA,IAAAC,IAAA,EAAAC,iBAAA,EAAAC,KAAA,EAAAC,gBAAA,EAAAC,KAAA,EAAAC,iBAAA,EAAAC,KAAA,EAAAC,gBAAA,EAAAC,KAAA,EAAAC,qBAAA;IACnC,IAAI,CAACV,SAAS,IAAI7E,OAAA,CAAO6E,SAAS,MAAK,QAAQ,EAAE;MAC7C,OAAO,IAAI;IACf;IAEA,IAAMW,UAAU,GAAG/J,MAAM,CAACgK,MAAM,CAAC,CAAC,CAAC,EAAEZ,SAAS,CAAC;IAC/CW,UAAU,CAACE,KAAK,IAAAZ,IAAA,IAAAC,iBAAA,GAAGS,UAAU,CAACE,KAAK,cAAAX,iBAAA,cAAAA,iBAAA,GAAIS,UAAU,CAACG,KAAK,cAAAb,IAAA,cAAAA,IAAA,GAAI,CAAC;IAC5DU,UAAU,CAACjD,IAAI,IAAAyC,KAAA,IAAAC,gBAAA,GAAGO,UAAU,CAACjD,IAAI,cAAA0C,gBAAA,cAAAA,gBAAA,GAAIO,UAAU,CAACI,IAAI,cAAAZ,KAAA,cAAAA,KAAA,GAAI,IAAI;IAC5DQ,UAAU,CAACK,KAAK,IAAAX,KAAA,IAAAC,iBAAA,GAAGK,UAAU,CAACK,KAAK,cAAAV,iBAAA,cAAAA,iBAAA,GAAIK,UAAU,CAACM,KAAK,cAAAZ,KAAA,cAAAA,KAAA,GAAI,IAAI;IAC/DM,UAAU,CAACO,IAAI,GAAG7D,WAAW,EAAAkD,KAAA,IAAAC,gBAAA,GAACG,UAAU,CAACO,IAAI,cAAAV,gBAAA,cAAAA,gBAAA,GAAIG,UAAU,CAACQ,IAAI,cAAAZ,KAAA,cAAAA,KAAA,GAAI,IAAI,CAAC;IACzEI,UAAU,CAACS,aAAa,IAAAX,KAAA,IAAAC,qBAAA,GAAGC,UAAU,CAACS,aAAa,cAAAV,qBAAA,cAAAA,qBAAA,GAAIC,UAAU,CAACU,aAAa,cAAAZ,KAAA,cAAAA,KAAA,GAAI,IAAI;IAEvF,OAAOE,UAAU;EACrB;EAEA,SAASW,2BAA2BA,CAACtB,SAAS,EAAE;IAC5C,IAAI,CAACA,SAAS,IAAI7E,OAAA,CAAO6E,SAAS,MAAK,QAAQ,EAAE;MAC7C,OAAO,KAAK;IAChB;IAEA,IAAI,OAAOA,SAAS,CAACoB,aAAa,KAAK,QAAQ,IAAIpB,SAAS,CAACoB,aAAa,CAACG,WAAW,CAAC,CAAC,KAAK,UAAU,EAAE;MACrG,OAAO,IAAI;IACf;IAEA,IAAI,OAAOvB,SAAS,CAACkB,IAAI,KAAK,QAAQ,IAAI,wCAAwC,CAACjG,IAAI,CAAC+E,SAAS,CAACkB,IAAI,CAAC,EAAE;MACrG,OAAO,IAAI;IACf;IAEA,OAAO,KAAK;EAChB;EAEA,SAASM,mBAAmBA,CAACC,UAAU,EAAE;IACrC,IAAI,CAACA,UAAU,IAAItG,OAAA,CAAOsG,UAAU,MAAK,QAAQ,EAAE;MAC/C,OAAO,CAAC,CAAC;IACb;IAEA,IAAMd,UAAU,GAAG,CAAC,CAAC;IAErB,SAAAe,EAAA,MAAAC,eAAA,GAA2B/K,MAAM,CAACgL,OAAO,CAACH,UAAU,CAAC,EAAAC,EAAA,GAAAC,eAAA,CAAApK,MAAA,EAAAmK,EAAA,IAAE;MAAA,IAAAG,mBAAA;MAAlD,IAAAC,kBAAA,GAAArH,cAAA,CAAAkH,eAAA,CAAAD,EAAA;QAAOK,GAAG,GAAAD,kBAAA;QAAElK,KAAK,GAAAkK,kBAAA;MAClBnB,UAAU,CAACoB,GAAG,CAAC,IAAAF,mBAAA,GAAG9B,kBAAkB,CAACnI,KAAK,CAAC,cAAAiK,mBAAA,cAAAA,mBAAA,GAAI,CAAC,CAAC;IACrD;IAEA,OAAOlB,UAAU;EACrB;EAEA,SAASqB,gBAAgBA,CAAChC,SAAS,EAAE+B,GAAG,EAAE;IACtC,OAAO/B,SAAS,CAACgB,KAAK,IAAIhB,SAAS,CAACtC,IAAI,IAAIqE,GAAG;EACnD;EAEA,SAASE,oBAAoBA,CAACC,OAAO,EAAET,UAAU,EAAE;IAC/C,IAAIU,gBAAgB,GAAG,CAACD,OAAO,IAAI,EAAE,EAAE1E,IAAI,CAAC,CAAC;IAC7C,IAAM4E,iBAAiB,GAAGZ,mBAAmB,CAACC,UAAU,CAAC;IAEzD,IAAI,CAACU,gBAAgB,IAAI,CAACvL,MAAM,CAACyL,IAAI,CAACD,iBAAiB,CAAC,CAAC7K,MAAM,EAAE;MAC7D,OAAO;QAAE2K,OAAO,EAAEC,gBAAgB;QAAEG,SAAS,EAAE;MAAG,CAAC;IACvD;IAEA,IAAMC,SAAS,GAAG3L,MAAM,CAACgL,OAAO,CAACQ,iBAAiB,CAAC,CAACI,MAAM,CAAC,UAAAC,KAAA;MAAA,IAAAC,KAAA,GAAAjI,cAAA,CAAAgI,KAAA;QAAEV,GAAG,GAAAW,KAAA;MAAA,OAAMP,gBAAgB,CAACQ,QAAQ,CAACZ,GAAG,CAAC;IAAA,EAAC;IAErG,IAAI,CAACQ,SAAS,CAAChL,MAAM,EAAE;MACnB,OAAO;QAAE2K,OAAO,EAAEC,gBAAgB;QAAEG,SAAS,EAAE;MAAG,CAAC;IACvD;IAEAC,SAAS,CAACK,IAAI,CAAC,UAAAC,KAAA,EAAAC,KAAA;MAAA,IAAAC,KAAA,GAAAtI,cAAA,CAAAoI,KAAA;QAAIzL,CAAC,GAAA2L,KAAA;MAAA,IAAAC,KAAA,GAAAvI,cAAA,CAAAqI,KAAA;QAAMG,CAAC,GAAAD,KAAA;MAAA,OAAM5L,CAAC,CAACyJ,KAAK,GAAGoC,CAAC,CAACpC,KAAK;IAAA,EAAC;IAEnD,IAAMyB,SAAS,GAAG,EAAE;IACpB,IAAIY,YAAY,GAAG,CAAC;IAAC,IAAAC,SAAA,GAAA/I,0BAAA,CAEMmI,SAAS;MAAAa,KAAA;IAAA;MAApC,KAAAD,SAAA,CAAA5I,CAAA,MAAA6I,KAAA,GAAAD,SAAA,CAAAhN,CAAA,IAAAwB,IAAA,GAAsC;QAAA,IAAA0L,WAAA,GAAA5I,cAAA,CAAA2I,KAAA,CAAAxL,KAAA;UAA1BmK,GAAG,GAAAsB,WAAA;UAAEzL,KAAK,GAAAyL,WAAA;QAClB,IAAMC,WAAW,aAAAC,MAAA,CAAaL,YAAY,OAAAK,MAAA,CAAI3L,KAAK,CAACiJ,KAAK,IAAIqC,YAAY,OAAI;QAC7Ef,gBAAgB,GAAGA,gBAAgB,CAACqB,UAAU,CAACzB,GAAG,EAAEuB,WAAW,CAAC;QAChEhB,SAAS,CAACpH,IAAI,CAAC;UACXuI,YAAY,EAAE1B,GAAG;UACjBmB,YAAY,EAAEA,YAAY;UAC1BQ,KAAK,EAAE1B,gBAAgB,CAACpK,KAAK,EAAEmK,GAAG,CAAC;UACnCb,IAAI,EAAEtJ,KAAK,CAACsJ,IAAI,IAAI,IAAI;UACxByC,UAAU,EAAErC,2BAA2B,CAAC1J,KAAK,CAAC;UAC9C0L,WAAW,EAAEA;QACjB,CAAC,CAAC;QAEFJ,YAAY,EAAE;MAClB;IAAC,SAAAU,GAAA;MAAAT,SAAA,CAAApN,CAAA,CAAA6N,GAAA;IAAA;MAAAT,SAAA,CAAApM,CAAA;IAAA;IAED,SAAA8M,GAAA,MAAAC,UAAA,GAAuBxB,SAAS,EAAAuB,GAAA,GAAAC,UAAA,CAAAvM,MAAA,EAAAsM,GAAA,IAAE;MAA7B,IAAME,QAAQ,GAAAD,UAAA,CAAAD,GAAA;MACf1B,gBAAgB,GAAGA,gBAAgB,CAACqB,UAAU,CAACO,QAAQ,CAACT,WAAW,UAAAC,MAAA,CAAUQ,QAAQ,CAACb,YAAY,WAAQ,CAAC;IAC/G;IAEAf,gBAAgB,GAAGA,gBAAgB,CAACqB,UAAU,CAAC,aAAa,EAAE,yBAAyB,CAAC;IAExF,OAAO;MACHtB,OAAO,EAAEC,gBAAgB;MACzBG,SAAS,EAAEA,SAAS,CAAC0B,GAAG,CAAC,UAAAC,MAAA;QAAA,IAAGX,WAAW,GAAAW,MAAA,CAAXX,WAAW;UAAKS,QAAQ,GAAAjK,wBAAA,CAAAmK,MAAA,EAAAC,SAAA;QAAA,OAAOH,QAAQ;MAAA;IACvE,CAAC;EACL;EAEA,SAASI,gBAAgBA,CAACjC,OAAO,EAAEI,SAAS,EAAE;IAC1C,IAAI8B,WAAW,GAAG,CAAClC,OAAO,IAAI,EAAE,EAAE1E,IAAI,CAAC,CAAC;IAExC,IAAI,CAAC4G,WAAW,IAAI,CAAC1K,KAAK,CAACE,OAAO,CAAC0I,SAAS,CAAC,IAAIA,SAAS,CAAC/K,MAAM,KAAK,CAAC,EAAE;MACrE,OAAO6M,WAAW;IACtB;IAAC,IAAAC,UAAA,GAAAjK,0BAAA,CAEsBkI,SAAS;MAAAgC,MAAA;IAAA;MAAhC,KAAAD,UAAA,CAAA9J,CAAA,MAAA+J,MAAA,GAAAD,UAAA,CAAAlO,CAAA,IAAAwB,IAAA,GAAkC;QAAA,IAAvBoM,QAAQ,GAAAO,MAAA,CAAA1M,KAAA;QACfwM,WAAW,GAAGA,WAAW,CAACZ,UAAU,CAACO,QAAQ,CAACN,YAAY,MAAAF,MAAA,CAAMQ,QAAQ,CAACb,YAAY,MAAG,CAAC;MAC7F;IAAC,SAAAU,GAAA;MAAAS,UAAA,CAAAtO,CAAA,CAAA6N,GAAA;IAAA;MAAAS,UAAA,CAAAtN,CAAA;IAAA;IAEDqN,WAAW,IAAI,mBAAmB;IAAC,IAAAG,UAAA,GAAAnK,0BAAA,CAEZkI,SAAS;MAAAkC,MAAA;IAAA;MAAhC,KAAAD,UAAA,CAAAhK,CAAA,MAAAiK,MAAA,GAAAD,UAAA,CAAApO,CAAA,IAAAwB,IAAA,GAAkC;QAAA,IAAvBoM,SAAQ,GAAAS,MAAA,CAAA5M,KAAA;QACfwM,WAAW,OAAAb,MAAA,CAAOQ,SAAQ,CAACb,YAAY,QAAAK,MAAA,CAAKQ,SAAQ,CAACL,KAAK,CAAE;QAE5D,IAAIK,SAAQ,CAAC7C,IAAI,EAAE;UACfkD,WAAW,UAAAb,MAAA,CAAUQ,SAAQ,CAAC7C,IAAI,CAAE;QACxC;QAEAkD,WAAW,IAAI,IAAI;MACvB;IAAC,SAAAR,GAAA;MAAAW,UAAA,CAAAxO,CAAA,CAAA6N,GAAA;IAAA;MAAAW,UAAA,CAAAxN,CAAA;IAAA;IAED,OAAOqN,WAAW,CAACK,OAAO,CAAC,CAAC;EAChC;EAEA,SAASC,yBAAyBA,CAACC,OAAO,EAAElD,UAAU,EAAE;IACpD,IAAMW,iBAAiB,GAAGZ,mBAAmB,CAACC,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAIkD,OAAO,CAAClD,UAAU,CAAC;IAC/E,IAAMmD,UAAU,GAAG,OAAOD,OAAO,CAACC,UAAU,KAAK,QAAQ,GACnDD,OAAO,CAACC,UAAU,GAClB,OAAOD,OAAO,CAACzC,OAAO,KAAK,QAAQ,GAC/ByC,OAAO,CAACzC,OAAO,GACf,EAAE;IACZ,IAAM2C,eAAe,GAAG5C,oBAAoB,CAAC2C,UAAU,EAAExC,iBAAiB,CAAC;IAE3EuC,OAAO,CAACC,UAAU,GAAGA,UAAU;IAC/BD,OAAO,CAACzC,OAAO,GAAG0C,UAAU;IAC5BD,OAAO,CAACG,cAAc,GAAGD,eAAe,CAAC3C,OAAO;IAChDyC,OAAO,CAAClD,UAAU,GAAGW,iBAAiB;IACtCuC,OAAO,CAACI,kBAAkB,GAAGF,eAAe,CAACvC,SAAS;IACtDqC,OAAO,CAACP,WAAW,GAAGD,gBAAgB,CAACS,UAAU,EAAEC,eAAe,CAACvC,SAAS,CAAC;IAC7EqC,OAAO,CAACK,WAAW,GAAGC,oBAAoB,CAACJ,eAAe,CAAC3C,OAAO,EAAEyC,OAAO,CAAC;IAE5E,OAAOA,OAAO;EAClB;EAEA,IAAMO,QAAQ,GAAG,IAAIC,MAAM,CAACC,QAAQ,CAAC,CAAC;;EAEtC;EACAF,QAAQ,CAAChE,IAAI,GAAG,UAAUmE,IAAI,EAAE;IAC5B,IAAIC,IAAI,GAAGjI,WAAW,CAACgI,IAAI,CAACC,IAAI,CAAC;IACjC,IAAI,CAACA,IAAI,EAAE,OAAOD,IAAI,CAAC3H,IAAI,IAAI,EAAE;IACjC,oBAAA6F,MAAA,CAAmB+B,IAAI,uDAAA/B,MAAA,CAA+C8B,IAAI,CAAC3H,IAAI;EACnF,CAAC;;EAED;EACAwH,QAAQ,CAACK,IAAI,GAAG,UAAUF,IAAI,EAAE;IAC5B,IAAIE,IAAI,GAAGF,IAAI,CAAC3H,IAAI,IAAI,EAAE;IAC1B,IAAI8H,IAAI,GAAG,CAACH,IAAI,CAACG,IAAI,IAAI,EAAE,EAAEhI,IAAI,CAAC,CAAC;IACnC,IAAIiI,WAAW,GAAGF,IAAI;IAEtB,IAAI,OAAOG,IAAI,KAAK,WAAW,EAAE;MAC7B,IAAIF,IAAI,IAAIE,IAAI,CAACC,WAAW,CAACH,IAAI,CAAC,EAAE;QAChC,IAAI;UACAC,WAAW,GAAGC,IAAI,CAACE,SAAS,CAACL,IAAI,EAAE;YAAEM,QAAQ,EAAEL;UAAK,CAAC,CAAC,CAAC5N,KAAK;QAChE,CAAC,CAAC,OAAOkO,CAAC,EAAE,CAAE;MAClB,CAAC,MAAM;QACH,IAAI;UACAL,WAAW,GAAGC,IAAI,CAACK,aAAa,CAACR,IAAI,CAAC,CAAC3N,KAAK;QAChD,CAAC,CAAC,OAAOkO,CAAC,EAAE,CAAE;MAClB;IACJ,CAAC,MAAM;MACHL,WAAW,GAAGhI,kBAAkB,CAAC8H,IAAI,CAAC;IAC1C;IAEA,IAAIS,WAAW,GAAGR,IAAI,GAAG/H,kBAAkB,CAAC+H,IAAI,CAAC,GAAG,MAAM;IAC1D,qIAAAjC,MAAA,CAA6HyC,WAAW,8JAAAzC,MAAA,CAAkJiC,IAAI,GAAG,YAAY,GAAGA,IAAI,GAAG,EAAE,SAAAjC,MAAA,CAAKkC,WAAW;EAC7U,CAAC;;EAED;EACA;EACAP,QAAQ,CAACe,KAAK,GAAG,UAAUZ,IAAI,EAAE;IAC7B,IAAMa,GAAG,GAAG7I,WAAW,CAACgI,IAAI,CAACC,IAAI,CAAC;IAClC,IAAI,CAACY,GAAG,EAAE,OAAO,EAAE;IACnB,IAAMC,GAAG,GAAGd,IAAI,CAAC3H,IAAI,IAAIpC,aAAa,CAACC,qBAAqB;IAC5D,IAAM6K,QAAQ,GAAG9K,aAAa,CAACE,sBAAsB;IACrD,wEAAA+H,MAAA,CACY2C,GAAG,eAAA3C,MAAA,CAAU4C,GAAG,oDAAA5C,MAAA,CAA6C6C,QAAQ,kFAAA7C,MAAA,CAElE2C,GAAG,sCAAA3C,MAAA,CAA+B4C,GAAG,iBAAA5C,MAAA,CAAYjI,aAAa,CAACG,kBAAkB;EAKpG,CAAC;;EAED;EACA,IAAI4K,YAAY,GAAG,CAAC;;EAEpB;EACA,IAAIC,cAAc,GAAG,EAAE;;EAEvB;EACA;EACA;EACAlL,MAAM,CAACmL,cAAc,GAAGnL,MAAM,CAACmL,cAAc,IAAI,CAAC,CAAC;EAEnD,SAASC,eAAeA,CAACC,OAAO,EAAE;IAC9B,OAAO,oIAAAlD,MAAA,CACckD,OAAO,iBAAa,WAC3B,yBACY,4GAAAlD,MAAA,CACgFkD,OAAO,iBAAAlD,MAAA,CAAYjI,aAAa,CAACI,kBAAkB,QAAI,6CAAA6H,MAAA,CACnHjI,aAAa,CAACK,uBAAuB,CAAE,cACpE,WACH;EAClB;;EAEA;EACA;EACAwJ,MAAM,CAACuB,GAAG,CAAC;IACPC,UAAU,EAAE,CAAC;MACT3L,IAAI,EAAE,OAAO;MACb4L,KAAK,EAAE,OAAO;MACdC,KAAK,WAALA,KAAKA,CAACX,GAAG,EAAE;QACP,IAAMY,GAAG,GAAGZ,GAAG,CAACjM,OAAO,CAAC,SAAS,CAAC;QAClC,OAAO6M,GAAG,IAAI,CAAC,GAAGA,GAAG,GAAGC,SAAS;MACrC,CAAC;MACDC,SAAS,WAATA,SAASA,CAACd,GAAG,EAAE;QACX,IAAMe,SAAS,GAAGC,qBAAqB,CAAChB,GAAG,CAAC;QAC5C,IAAI,CAACe,SAAS,IAAIA,SAAS,CAACE,UAAU,KAAK,CAAC,EAAE;UAC1C,OAAOJ,SAAS;QACpB;QAEA,IAAMN,OAAO,iBAAAlD,MAAA,CAAiB,EAAE8C,YAAY,CAAE;QAE9C,OAAO;UACHe,IAAI,EAAE,OAAO;UACbC,GAAG,EAAEnB,GAAG,CAACoB,SAAS,CAAC,CAAC,EAAEL,SAAS,CAACM,QAAQ,CAAC;UACzCd,OAAO,EAAEA,OAAO;UAChBe,IAAI,EAAEP,SAAS,CAACO;QACpB,CAAC;MACL,CAAC;MACDtC,QAAQ,WAARA,QAAQA,CAACuC,KAAK,EAAE;QACZnB,cAAc,CAACpL,IAAI,CAAC;UAAEuL,OAAO,EAAEgB,KAAK,CAAChB,OAAO;UAAEiB,MAAM,EAAED,KAAK,CAACD;QAAK,CAAC,CAAC;QACnEpM,MAAM,CAACmL,cAAc,CAACkB,KAAK,CAAChB,OAAO,CAAC,GAAGgB,KAAK,CAACD,IAAI;QACjD,OAAOhB,eAAe,CAACiB,KAAK,CAAChB,OAAO,CAAC;MACzC;IACJ,CAAC;EACL,CAAC,CAAC;;EAEF;EACA,SAASS,qBAAqBA,CAACxJ,IAAI,EAAE;IACjC,IAAM+J,KAAK,GAAG,SAAS;IACvB,IAAMZ,KAAK,GAAGnJ,IAAI,CAACzD,OAAO,CAACwN,KAAK,CAAC;IACjC,IAAIZ,KAAK,GAAG,CAAC,EAAE;MACX,OAAO,IAAI;IACf;;IAEA;IACA,IAAMc,SAAS,GAAGd,KAAK,GAAGY,KAAK,CAAClQ,MAAM;IACtC,IAAIhB,CAAC,GAAGoR,SAAS;IACjB,OAAOpR,CAAC,GAAGmH,IAAI,CAACnG,MAAM,KAAKmG,IAAI,CAACnH,CAAC,CAAC,KAAK,GAAG,IAAImH,IAAI,CAACnH,CAAC,CAAC,KAAK,IAAI,IAAImH,IAAI,CAACnH,CAAC,CAAC,KAAK,IAAI,IAAImH,IAAI,CAACnH,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE;MACrGA,CAAC,EAAE;IACP;IAEA,IAAIA,CAAC,IAAImH,IAAI,CAACnG,MAAM,IAAImG,IAAI,CAACnH,CAAC,CAAC,KAAK,GAAG,EAAE;MACrC,OAAO,IAAI;IACf;IAEA,IAAIqR,KAAK,GAAG,CAAC;IACb,IAAIC,QAAQ,GAAG,KAAK;IACpB,IAAIC,MAAM,GAAG,KAAK;IAElB,OAAOvR,CAAC,GAAGmH,IAAI,CAACnG,MAAM,EAAEhB,CAAC,EAAE,EAAE;MACzB,IAAMwR,EAAE,GAAGrK,IAAI,CAACnH,CAAC,CAAC;MAElB,IAAIsR,QAAQ,EAAE;QACV,IAAIC,MAAM,EAAE;UACRA,MAAM,GAAG,KAAK;UACd;QACJ;QACA,IAAIC,EAAE,KAAK,IAAI,EAAE;UACbD,MAAM,GAAG,IAAI;UACb;QACJ;QACA,IAAIC,EAAE,KAAK,GAAG,EAAE;UACZF,QAAQ,GAAG,KAAK;QACpB;QACA;MACJ;MAEA,IAAIE,EAAE,KAAK,GAAG,EAAE;QACZF,QAAQ,GAAG,IAAI;QACf;MACJ;MAEA,IAAIE,EAAE,KAAK,GAAG,EAAE;QACZH,KAAK,EAAE;MACX,CAAC,MAAM,IAAIG,EAAE,KAAK,GAAG,EAAE;QACnBH,KAAK,EAAE;QACP,IAAIA,KAAK,KAAK,CAAC,EAAE;UACb,IAAMI,OAAO,GAAGzR,CAAC;UACjB;UACA,IAAM0R,iBAAiB,GAAGvK,IAAI,CAACzD,OAAO,CAAC,GAAG,EAAE+N,OAAO,GAAG,CAAC,CAAC;UACxD,IAAIC,iBAAiB,GAAG,CAAC,EAAE;YACvB,OAAO,IAAI;UACf;UAEA,IAAMT,IAAI,GAAG9J,IAAI,CAAC4J,SAAS,CAACK,SAAS,EAAEK,OAAO,GAAG,CAAC,CAAC,CAACxK,IAAI,CAAC,CAAC;UAC1D,OAAO;YACH2J,UAAU,EAAEN,KAAK;YACjBU,QAAQ,EAAEU,iBAAiB,GAAG,CAAC;YAC/BT,IAAI,EAAEA;UACV,CAAC;QACL;MACJ;IACJ;IAEA,OAAO,IAAI;EACf;EAEA,SAASU,qBAAqBA,CAACvD,OAAO,EAAE;IACpC,IAAI,CAACA,OAAO,IAAI,CAACA,OAAO,CAAC2B,cAAc,IAAI,CAAC3B,OAAO,CAAC2B,cAAc,CAAC/O,MAAM,EAAE;MACvE;IACJ;;IAEA;IACA,IAAM4Q,MAAM,GAAA9O,kBAAA,CAAOsL,OAAO,CAAC2B,cAAc,CAAC;IAC1C3B,OAAO,CAAC2B,cAAc,GAAG,EAAE;;IAE3B;IACA;IACA8B,qBAAqB,CAAC,YAAM;MAAA,IAAAC,UAAA,GAAAjO,0BAAA,CACR+N,MAAM;QAAAG,MAAA;MAAA;QAAtB,KAAAD,UAAA,CAAA9N,CAAA,MAAA+N,MAAA,GAAAD,UAAA,CAAAlS,CAAA,IAAAwB,IAAA,GAAwB;UAAA,IAAbnB,CAAC,GAAA8R,MAAA,CAAA1Q,KAAA;UACR2Q,mBAAmB,CAAC/R,CAAC,CAACiQ,OAAO,EAAEjQ,CAAC,CAACkR,MAAM,CAAC;QAC5C;MAAC,SAAA9D,GAAA;QAAAyE,UAAA,CAAAtS,CAAA,CAAA6N,GAAA;MAAA;QAAAyE,UAAA,CAAAtR,CAAA;MAAA;IACL,CAAC,CAAC;EACN;EAEA,SAASwR,mBAAmBA,CAAC9B,OAAO,EAAEiB,MAAM,EAAE;IAC1C,IAAMc,MAAM,GAAG5K,QAAQ,CAAC6K,cAAc,CAAChC,OAAO,CAAC;IAC/C,IAAI,CAAC+B,MAAM,EAAE;MACT,OAAO,KAAK;IAChB;IAEA,IAAI,OAAOE,KAAK,KAAK,WAAW,EAAE;MAC9BC,OAAO,CAACC,IAAI,CAAC,+LAA+L,CAAC;MAC7M,OAAO,KAAK;IAChB;;IAEA;IACA;IACA;IACA;IACA,IAAIJ,MAAM,CAACK,YAAY,KAAK,IAAI,EAAE;MAC9BzN,MAAM,CAACmL,cAAc,CAACE,OAAO,CAAC,GAAGiB,MAAM;MACvC,OAAO,KAAK;IAChB;IAEA,IAAI;MAAA,IAAAoB,YAAA,EAAAC,aAAA,EAAAC,qBAAA;MACA,IAAIR,MAAM,CAACS,cAAc,EAAE;QACvBT,MAAM,CAACS,cAAc,CAACC,OAAO,CAAC,CAAC;MACnC;MAEA,IAAMC,GAAG,GAAG,OAAOzB,MAAM,KAAK,QAAQ,GAAG0B,IAAI,CAACC,KAAK,CAAC3B,MAAM,CAAC,GAAGA,MAAM;MACpE,CAAAoB,YAAA,GAAAK,GAAG,CAACG,OAAO,cAAAR,YAAA,cAAAA,YAAA,GAAXK,GAAG,CAACG,OAAO,GAAK,CAAC,CAAC;MAClBH,GAAG,CAACG,OAAO,CAACC,UAAU,GAAG,IAAI;MAC7BJ,GAAG,CAACG,OAAO,CAACE,mBAAmB,GAAG,IAAI;MACtC,CAAAR,qBAAA,IAAAD,aAAA,GAAAI,GAAG,CAACG,OAAO,EAACG,WAAW,cAAAT,qBAAA,cAAAA,qBAAA,GAAvBD,aAAA,CAAYU,WAAW,GAAK,CAAC,GAAG,CAAC;MAEjCjB,MAAM,CAACS,cAAc,GAAG,IAAIP,KAAK,CAACF,MAAM,EAAEW,GAAG,CAAC;MAC9C,OAAO/N,MAAM,CAACmL,cAAc,CAACE,OAAO,CAAC;MACrC,OAAO,IAAI;IACf,CAAC,CAAC,OAAO1Q,CAAC,EAAE;MACR4S,OAAO,CAACe,KAAK,CAAC,uBAAuB,EAAE3T,CAAC,CAAC;MACzC,OAAO,KAAK;IAChB;EACJ;;EAEA;EACA;EACA;EACAqF,MAAM,CAACuO,mBAAmB,GAAG,YAAY;IACrC,IAAI,OAAOjB,KAAK,KAAK,WAAW,EAAE;MAC9B;IACJ;IAEA,IAAMkB,OAAO,GAAGxO,MAAM,CAACmL,cAAc;IACrC,IAAI,CAACqD,OAAO,EAAE;MACV;IACJ;IAEAxB,qBAAqB,CAAC,YAAM;MACxB,SAAAyB,GAAA,MAAAC,YAAA,GAAsBlT,MAAM,CAACyL,IAAI,CAACuH,OAAO,CAAC,EAAAC,GAAA,GAAAC,YAAA,CAAAvS,MAAA,EAAAsS,GAAA,IAAE;QAAvC,IAAMpD,OAAO,GAAAqD,YAAA,CAAAD,GAAA;QACdtB,mBAAmB,CAAC9B,OAAO,EAAEmD,OAAO,CAACnD,OAAO,CAAC,CAAC;MAClD;IACJ,CAAC,CAAC;EACN,CAAC;;EAED;EACA;EACA;EACA,SAASxB,oBAAoBA,CAAC/C,OAAO,EAAEyC,OAAO,EAAE;IAC5C2B,cAAc,GAAG,EAAE;IACnB,IAAMyD,IAAI,GAAG5E,MAAM,CAACkE,KAAK,CAACnH,OAAO,EAAE;MAAEgD,QAAQ,EAARA;IAAS,CAAC,CAAC;IAChDP,OAAO,CAAC2B,cAAc,GAAGA,cAAc,CAAC/O,MAAM,GAAG,CAAC,GAAA8B,kBAAA,CAAOiN,cAAc,IAAI,EAAE;IAC7E,OAAO0D,SAAS,CAACC,QAAQ,CAACF,IAAI,EAAE;MAAEG,QAAQ,EAAE,CAAC,QAAQ,CAAC;MAAEC,QAAQ,EAAE,CAAC,QAAQ;IAAE,CAAC,CAAC;EACnF;EAEA,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAIC,cAAc,EAAK;IAEnC,IAAM3C,MAAM,GAAG9Q,MAAM,CAACgK,MAAM,CAAC,CAAC,CAAC,EAAEtF,aAAa,EAAE+O,cAAc,CAAC;IAC/D3C,MAAM,CAACxL,MAAM,GAAGtF,MAAM,CAACgK,MAAM,CAAC,CAAC,CAAC,EAAEtF,aAAa,CAACY,MAAM,IAAI,CAAC,CAAC,EAAEmO,cAAc,IAAIA,cAAc,CAACnO,MAAM,GAAGmO,cAAc,CAACnO,MAAM,GAAG,CAAC,CAAC,CAAC;IACnI,IAAMoO,eAAe,GAAG,CAAC,EAAED,cAAc,IAAIA,cAAc,CAACnO,MAAM,IAAImO,cAAc,CAACnO,MAAM,CAACC,mBAAmB,IAAIkO,cAAc,CAACnO,MAAM,CAACE,mBAAmB,CAAC;IAC7J,IAAMmO,cAAc,GAAGnP,MAAM,CAACoP,wBAAwB,IAAI,IAAI;IAC9D;IACAlP,aAAa,GAAGoM,MAAM;IAEtB,IAAI,CAACA,MAAM,CAAC+C,aAAa,EAAE;MACvB9B,OAAO,CAACe,KAAK,CAAC,gCAAgC,CAAC;MAC/C;IACJ;IAEA,IAAI,CAAChC,MAAM,CAACgD,kBAAkB,EAAE;MAC5B/B,OAAO,CAACe,KAAK,CAAC,qCAAqC,CAAC;MACpD;IACJ;IAEA,IAAI,CAAChC,MAAM,CAACiD,4BAA4B,EAAE;MACtChC,OAAO,CAACe,KAAK,CAAC,+CAA+C,CAAC;MAC9D;IACJ;IAEA,IAAI,CAAChC,MAAM,CAACkD,oBAAoB,EAAE;MAC9BjC,OAAO,CAACe,KAAK,CAAC,uCAAuC,CAAC;MACtD;IACJ;IAEA,IAAI,CAAChC,MAAM,CAACmD,yBAAyB,EAAE;MACnClC,OAAO,CAACe,KAAK,CAAC,4CAA4C,CAAC;MAC3D;IACJ;IAEA,IAAMoB,aAAa,GAAG;MAClBzF,IAAI,WAAJA,IAAIA,CAAA,EAAG;QACH,OAAO;UACH0F,YAAY,EAAE,IAAI;UAClBC,aAAa,EAAE,IAAI;UACnBC,aAAa,EAAE,IAAI;UACnB3H,WAAW,EAAE,IAAI;UACjB4H,gBAAgB,EAAE,KAAK;UACvBC,oBAAoB,EAAE,IAAI;UAC1BC,WAAW,EAAE,KAAK;UAClBC,gBAAgB,EAAE,KAAK;UACvBC,UAAU,EAAE,IAAI;UAChBC,MAAM,EAAE,IAAI;UACZC,QAAQ,EAAE,EAAE;UACZC,aAAa,EAAE,EAAE;UACjBC,MAAM,EAAE,EAAE;UACVC,SAAS,EAAEjE,MAAM,CAACkE,iBAAiB,IAAI,EAAE;UACzCC,WAAW,EAAE,KAAK;UAClBC,0BAA0B,EAAE,KAAK;UACjCC,sBAAsB,EAAE,IAAI;UAC5BC,YAAY,EAAE,EAAE;UAChBC,UAAU,EAAE,KAAK;UACjBC,WAAW,EAAE,IAAI;UACjBC,cAAc,EAAE,CAAC,CAACzE,MAAM,CAACyE,cAAc;UACvCvQ,SAAS,EAAE8L,MAAM,CAAC9L,SAAS;UAC3BC,cAAc,EAAE6L,MAAM,CAAC7L,cAAc;UACrCC,aAAa,EAAE4L,MAAM,CAAC5L,aAAa;UACnCC,eAAe,EAAE2L,MAAM,CAAC3L,eAAe;UACvCC,SAAS,EAAE0L,MAAM,CAAC1L,SAAS;UAC3BoQ,WAAW,EAAE,KAAK;UAClBC,aAAa,EAAE,IAAI;UACnBC,kBAAkB,EAAE,EAAE;UACtBC,SAAS,EAAE,IAAI;UACfC,mBAAmB,EAAE9E,MAAM,CAAC+E,QAAQ,KAAK,YAAY,IAAI/E,MAAM,CAAC+E,QAAQ,KAAK,cAAc;UAC3FC,mBAAmB,EAAEhF,MAAM,CAAC+E,QAAQ,KAAK,cAAc,IAAI,CAAC,CAAC/E,MAAM,CAACgF,mBAAmB;UACvFC,YAAY,EAAEjF,MAAM,CAACiF,YAAY,IAAI,IAAI;UACzCC,WAAW,EAAE,EAAE;UACfC,cAAc,EAAE,EAAE;UAClBC,cAAc,EAAE,KAAK;UACrBC,mBAAmB,EAAE,IAAI;UACzBC,eAAe,EAAE,IAAI;UACrBC,SAAS,EAAE,IAAI;UACfC,sBAAsB,EAAE,CAAC,CAAC;UAC1BC,aAAa,EAAE,CAAC,CAAC;UACjBC,aAAa,EAAE,UAAU,GAAGtN,IAAI,CAACuN,MAAM,CAAC,CAAC,CAACxS,QAAQ,CAAC,EAAE,CAAC,CAACC,KAAK,CAAC,CAAC,CAAC;UAC/DwS,kBAAkB,EAAE,CAAC,CAAC5F,MAAM,CAAC4F,kBAAkB;UAC/CC,uBAAuB,EAAE7F,MAAM,CAAC+E,QAAQ,KAAK,cAAc;UAC3De,kBAAkB,EAAE,IAAI;UACxBC,kBAAkB,EAAE,KAAK;UACzBC,yBAAyB,EAAE,CAAC,CAAC;UAC7BC,qBAAqB,EAAE,IAAI;UAC3BC,sBAAsB,EAAE,IAAI;UAC5BC,sBAAsB,EAAE,IAAI;UAC5BC,uBAAuB,EAAE;QAC7B,CAAC;MACL,CAAC;MACDC,QAAQ,EAAE;QACNC,kBAAkB,WAAlBA,kBAAkBA,CAAA,EAAG;UACjB,KAAK,IAAIzX,CAAC,GAAG,IAAI,CAACiV,QAAQ,CAACjU,MAAM,GAAG,CAAC,EAAEhB,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;YAChD,IAAI,IAAI,CAACiV,QAAQ,CAACjV,CAAC,CAAC,CAAC0X,IAAI,KAAK,WAAW,EAAE;cACvC,OAAO1X,CAAC;YACZ;UACJ;UACA,OAAO,CAAC,CAAC;QACb;MACJ,CAAC;MACD2X,OAAO,EAAE;QACLC,kBAAkB,WAAlBA,kBAAkBA,CAAA,EAAG;UACjB,IAAI,CAAC9C,gBAAgB,GAAG,IAAI;QAChC,CAAC;QACD+C,cAAc,WAAdA,cAAcA,CAACrY,CAAC,EAAE;UACd,IAAI,CAAC2R,MAAM,CAAC2G,uBAAuB,EAAE;UACrCtY,CAAC,CAACuY,cAAc,CAAC,CAAC;UAClBvY,CAAC,CAACwY,eAAe,CAAC,CAAC;UACnB,IAAI,CAACtC,UAAU,GAAG,IAAI;UACtB,IAAIuC,SAAS,GAAG,IAAI,CAACzD,YAAY,GAAG,IAAI,CAACA,YAAY,CAAC0D,OAAO,CAAC,wCAAwC,CAAC,GAAG,IAAI;UAC9G,IAAID,SAAS,EAAEA,SAAS,CAACE,SAAS,CAACC,GAAG,CAAC,mBAAmB,CAAC;QAC/D,CAAC;QACDC,eAAe,WAAfA,eAAeA,CAAC7Y,CAAC,EAAE;UACf,IAAI,CAAC2R,MAAM,CAAC2G,uBAAuB,EAAE;UACrCtY,CAAC,CAACuY,cAAc,CAAC,CAAC;UAClBvY,CAAC,CAACwY,eAAe,CAAC,CAAC;UACnB,IAAI,CAACtC,UAAU,GAAG,KAAK;UACvB,IAAIuC,SAAS,GAAG,IAAI,CAACzD,YAAY,GAAG,IAAI,CAACA,YAAY,CAAC0D,OAAO,CAAC,wCAAwC,CAAC,GAAG,IAAI;UAC9G,IAAID,SAAS,EAAEA,SAAS,CAACE,SAAS,CAACG,MAAM,CAAC,mBAAmB,CAAC;QAClE,CAAC;QACDC,UAAU,WAAVA,UAAUA,CAAC/Y,CAAC,EAAE;UACV,IAAI,CAAC2R,MAAM,CAAC2G,uBAAuB,EAAE;UACrCtY,CAAC,CAACuY,cAAc,CAAC,CAAC;UAClBvY,CAAC,CAACwY,eAAe,CAAC,CAAC;UACnB,IAAI,CAACtC,UAAU,GAAG,KAAK;UACvB,IAAIuC,SAAS,GAAG,IAAI,CAACzD,YAAY,GAAG,IAAI,CAACA,YAAY,CAAC0D,OAAO,CAAC,wCAAwC,CAAC,GAAG,IAAI;UAC9G,IAAID,SAAS,EAAEA,SAAS,CAACE,SAAS,CAACG,MAAM,CAAC,mBAAmB,CAAC;UAC9D,IAAI9Y,CAAC,CAACgZ,YAAY,IAAIhZ,CAAC,CAACgZ,YAAY,CAACC,KAAK,IAAIjZ,CAAC,CAACgZ,YAAY,CAACC,KAAK,CAACzX,MAAM,GAAG,CAAC,EAAE;YAC3E,IAAI,CAAC0X,WAAW,CAACvV,KAAK,CAACC,IAAI,CAAC5D,CAAC,CAACgZ,YAAY,CAACC,KAAK,CAAC,CAAC;UACtD;QACJ,CAAC;QACDE,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UACf,IAAI,CAACxH,MAAM,CAAC2G,uBAAuB,IAAI,IAAI,CAACvC,0BAA0B,EAAE;UACxE,IAAIqD,SAAS,GAAGvR,QAAQ,CAAC6K,cAAc,CAAC,mBAAmB,CAAC;UAC5D,IAAI0G,SAAS,EAAEA,SAAS,CAACC,KAAK,CAAC,CAAC;QACpC,CAAC;QACDC,qBAAqB,WAArBA,qBAAqBA,CAACtZ,CAAC,EAAE;UACrB,IAAIiZ,KAAK,GAAGjZ,CAAC,CAACuZ,MAAM,CAACN,KAAK,GAAGtV,KAAK,CAACC,IAAI,CAAC5D,CAAC,CAACuZ,MAAM,CAACN,KAAK,CAAC,GAAG,EAAE;UAC5D,IAAIA,KAAK,IAAIA,KAAK,CAACzX,MAAM,GAAG,CAAC,EAAE;YAC3B,IAAI,CAAC0X,WAAW,CAACD,KAAK,CAAC;UAC3B;UACAjZ,CAAC,CAACuZ,MAAM,CAAC1X,KAAK,GAAG,EAAE;QACvB,CAAC;QACD2X,sBAAsB,WAAtBA,sBAAsBA,CAACC,SAAS,EAAE;UAC9B,IAAIC,IAAI,GAAG,IAAI;UACf,IAAIC,iBAAiB,GAAG,IAAI,CAAC3D,sBAAsB,IAAIlT,OAAO,CAACC,OAAO,CAAC,CAAC;UACxE,IAAI6W,aAAa,GAAGD,iBAAiB,SAC3B,CAAC,YAAY,CAAE,CAAC,CAAC,CACtB3W,IAAI,cAAAC,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAAuX,QAAA;YAAA,OAAAzX,YAAA,GAAAC,CAAA,WAAAyX,QAAA;cAAA,kBAAAA,QAAA,CAAA7Y,CAAA,GAAA6Y,QAAA,CAAA1Z,CAAA;gBAAA;kBACFsZ,IAAI,CAAC3D,0BAA0B,GAAG,IAAI;kBAAC+D,QAAA,CAAA7Y,CAAA;kBAAA6Y,QAAA,CAAA1Z,CAAA;kBAAA,OAEtBqZ,SAAS,CAAC,CAAC;gBAAA;kBAAA,OAAAK,QAAA,CAAAzY,CAAA,IAAAyY,QAAA,CAAA1Y,CAAA;gBAAA;kBAAA0Y,QAAA,CAAA7Y,CAAA;kBAExByY,IAAI,CAAC3D,0BAA0B,GAAG,KAAK;kBAAC,OAAA+D,QAAA,CAAA9Y,CAAA;gBAAA;kBAAA,OAAA8Y,QAAA,CAAAzY,CAAA;cAAA;YAAA,GAAAwY,OAAA;UAAA,CAE/C,GAAC;UAEN,IAAI,CAAC7D,sBAAsB,GAAG4D,aAAa,WAAQ,CAAC,YAAY;YAC5D,IAAIF,IAAI,CAAC1D,sBAAsB,KAAK4D,aAAa,EAAE;cAC/CF,IAAI,CAAC1D,sBAAsB,GAAG,IAAI;YACtC;UACJ,CAAC,CAAC;UAEF,OAAO,IAAI,CAACA,sBAAsB;QACtC,CAAC;QACKkD,WAAW,WAAXA,WAAWA,CAACD,KAAK,EAAE;UAAA,IAAAc,KAAA;UAAA,OAAA9W,iBAAA,cAAAb,YAAA,GAAAE,CAAA,UAAA0X,SAAA;YAAA,IAAAC,aAAA;YAAA,OAAA7X,YAAA,GAAAC,CAAA,WAAA6X,SAAA;cAAA,kBAAAA,SAAA,CAAA9Z,CAAA;gBAAA;kBAAA,IAChBuR,MAAM,CAACwI,iBAAiB;oBAAAD,SAAA,CAAA9Z,CAAA;oBAAA;kBAAA;kBAAA,OAAA8Z,SAAA,CAAA7Y,CAAA;gBAAA;kBAEzB4Y,aAAa,GAAGtW,KAAK,CAACE,OAAO,CAACoV,KAAK,CAAC,GAAGA,KAAK,CAAClU,KAAK,CAAC,CAAC,GAAGpB,KAAK,CAACC,IAAI,CAACqV,KAAK,IAAI,EAAE,CAAC;kBAAA,MAC9EgB,aAAa,CAACzY,MAAM,KAAK,CAAC;oBAAA0Y,SAAA,CAAA9Z,CAAA;oBAAA;kBAAA;kBAAA,OAAA8Z,SAAA,CAAA7Y,CAAA;gBAAA;kBAAA,OAAA6Y,SAAA,CAAA7Y,CAAA,IAEvB0Y,KAAI,CAACP,sBAAsB,cAAAvW,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAA8X,SAAA;oBAAA,IAAAC,SAAA,EAAAC,SAAA,EAAAC,QAAA,EAAA/Z,CAAA,EAAAga,QAAA,EAAAC,SAAA,EAAAC,WAAA,EAAAC,MAAA,EAAAC,EAAA,EAAAC,GAAA;oBAAA,OAAAzY,YAAA,GAAAC,CAAA,WAAAyY,SAAA;sBAAA,kBAAAA,SAAA,CAAA7Z,CAAA,GAAA6Z,SAAA,CAAA1a,CAAA;wBAAA;0BAC3Bia,SAAS,GAAGN,KAAI,CAACgB,YAAY,CAAC,CAAC;0BAC/BT,SAAS,GAAGP,KAAI,CAACiB,YAAY,CAAC,CAAC;0BAAA,IAE9BX,SAAS;4BAAAS,SAAA,CAAA1a,CAAA;4BAAA;0BAAA;0BAAA0a,SAAA,CAAA7Z,CAAA;0BAAA6Z,SAAA,CAAA1a,CAAA;0BAAA,OAEY2Z,KAAI,CAACkB,yBAAyB,CAACX,SAAS,CAAC;wBAAA;0BAA3DD,SAAS,GAAAS,SAAA,CAAA1Z,CAAA;0BAAA0Z,SAAA,CAAA1a,CAAA;0BAAA;wBAAA;0BAAA0a,SAAA,CAAA7Z,CAAA;0BAAA2Z,EAAA,GAAAE,SAAA,CAAA1Z,CAAA;0BAETwR,OAAO,CAACe,KAAK,CAAC,sDAAsD,EAAAiH,EAAK,CAAC;0BAC1Eb,KAAI,CAAC9D,YAAY,GAAG,CAAC;4BAAEiF,QAAQ,EAAE,EAAE;4BAAEvH,KAAK,EAAE;0BAAkD,CAAC,CAAC;0BAChGoG,KAAI,CAACoB,iBAAiB,CAAC,CAAC;0BAAC,OAAAL,SAAA,CAAAzZ,CAAA;wBAAA;0BAAA,IAK5BgZ,SAAS;4BAAAS,SAAA,CAAA1a,CAAA;4BAAA;0BAAA;0BACVwS,OAAO,CAACC,IAAI,CAAC,uDAAuD,CAAC;0BACrEkH,KAAI,CAAC9D,YAAY,GAAG,CAAC;4BAAEiF,QAAQ,EAAE,EAAE;4BAAEvH,KAAK,EAAE;0BAAkD,CAAC,CAAC;0BAChGoG,KAAI,CAACoB,iBAAiB,CAAC,CAAC;0BAAC,OAAAL,SAAA,CAAAzZ,CAAA;wBAAA;0BAI7B0Y,KAAI,CAACjE,WAAW,GAAG,IAAI;0BACvBiE,KAAI,CAAC9D,YAAY,GAAG,EAAE;0BACtB8D,KAAI,CAACoB,iBAAiB,CAAC,CAAC;0BAACL,SAAA,CAAA7Z,CAAA;0BAEjBsZ,QAAQ,GAAG,IAAIa,QAAQ,CAAC,CAAC;0BAC7Bb,QAAQ,CAACc,MAAM,CAAC,WAAW,EAAEhB,SAAS,CAAC;0BACvC,KAAS7Z,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyZ,aAAa,CAACzY,MAAM,EAAEhB,CAAC,EAAE,EAAE;4BAC3C+Z,QAAQ,CAACc,MAAM,CAAC,OAAO,EAAEpB,aAAa,CAACzZ,CAAC,CAAC,CAAC;0BAC9C;0BAACsa,SAAA,CAAA1a,CAAA;0BAAA,OAEoBkb,KAAK,CAAC3J,MAAM,CAACwI,iBAAiB,EAAE;4BACjDoB,MAAM,EAAE,MAAM;4BACdC,IAAI,EAAEjB;0BACV,CAAC,CAAC;wBAAA;0BAHEC,QAAQ,GAAAM,SAAA,CAAA1Z,CAAA;0BAAA,IAKPoZ,QAAQ,CAACiB,EAAE;4BAAAX,SAAA,CAAA1a,CAAA;4BAAA;0BAAA;0BAAA0a,SAAA,CAAA1a,CAAA;0BAAA,OACUoa,QAAQ,CAAC7S,IAAI,CAAC,CAAC;wBAAA;0BAAjC8S,SAAS,GAAAK,SAAA,CAAA1Z,CAAA;0BACTsZ,WAAW,GAAGX,KAAI,CAAC2B,2BAA2B,CAACjB,SAAS,EAAE,kCAAkC,CAAC;0BACjG7H,OAAO,CAACe,KAAK,CAAC,gBAAgB,EAAE8G,SAAS,CAAC;0BAC1CV,KAAI,CAAC9D,YAAY,GAAG,CAAC;4BAAEiF,QAAQ,EAAE,EAAE;4BAAEvH,KAAK,EAAE+G;0BAAY,CAAC,CAAC;0BAAC,OAAAI,SAAA,CAAAzZ,CAAA;wBAAA;0BAAAyZ,SAAA,CAAA1a,CAAA;0BAAA,OAI5Coa,QAAQ,CAAC/I,IAAI,CAAC,CAAC;wBAAA;0BAA9BkJ,MAAM,GAAAG,SAAA,CAAA1Z,CAAA;0BAEV,IAAIuZ,MAAM,CAACN,SAAS,IAAIM,MAAM,CAACN,SAAS,KAAKN,KAAI,CAACgB,YAAY,CAAC,CAAC,EAAE;4BAC9DhB,KAAI,CAAC4B,iBAAiB,CAAChB,MAAM,CAACN,SAAS,CAAC;0BAC5C;0BAEA,IAAI1W,KAAK,CAACE,OAAO,CAAC8W,MAAM,CAAC/E,SAAS,CAAC,EAAE;4BACjCmE,KAAI,CAACnE,SAAS,GAAG+E,MAAM,CAAC/E,SAAS;0BACrC,CAAC,MAAM,IAAI+E,MAAM,CAACiB,QAAQ,IAAIjB,MAAM,CAACiB,QAAQ,CAACpa,MAAM,GAAG,CAAC,EAAE;4BACtDuY,KAAI,CAACnE,SAAS,GAAGmE,KAAI,CAACnE,SAAS,CAACpI,MAAM,CAACmN,MAAM,CAACiB,QAAQ,CAAC;0BAC3D;0BAEA,IAAIjB,MAAM,CAACkB,MAAM,IAAIlB,MAAM,CAACkB,MAAM,CAACra,MAAM,GAAG,CAAC,EAAE;4BAC3CuY,KAAI,CAAC9D,YAAY,GAAG0E,MAAM,CAACkB,MAAM;0BACrC;0BAACf,SAAA,CAAA1a,CAAA;0BAAA;wBAAA;0BAAA0a,SAAA,CAAA7Z,CAAA;0BAAA4Z,GAAA,GAAAC,SAAA,CAAA1Z,CAAA;0BAEDwR,OAAO,CAACe,KAAK,CAAC,eAAe,EAAAkH,GAAK,CAAC;0BACnCd,KAAI,CAAC9D,YAAY,GAAG,CAAC;4BAAEiF,QAAQ,EAAE,EAAE;4BAAEvH,KAAK,EAAE;0BAAmC,CAAC,CAAC;0BAEjF,IAAIoG,KAAI,CAACgB,YAAY,CAAC,CAAC,EAAE;4BACrBhB,KAAI,CAAC+B,oBAAoB,CAAC,CAAC;0BAC/B;wBAAC;0BAAAhB,SAAA,CAAA7Z,CAAA;0BAED8Y,KAAI,CAACjE,WAAW,GAAG,KAAK;0BACxBiE,KAAI,CAACoB,iBAAiB,CAAC,CAAC;0BAAC,OAAAL,SAAA,CAAA9Z,CAAA;wBAAA;0BAAA,OAAA8Z,SAAA,CAAAzZ,CAAA;sBAAA;oBAAA,GAAA+Y,QAAA;kBAAA,CAEhC,GAAC;cAAA;YAAA,GAAAJ,QAAA;UAAA;QACN,CAAC;QACK+B,cAAc,WAAdA,cAAcA,CAACC,GAAG,EAAE;UAAA,IAAAC,MAAA;UAAA,OAAAhZ,iBAAA,cAAAb,YAAA,GAAAE,CAAA,UAAA4Z,SAAA;YAAA,OAAA9Z,YAAA,GAAAC,CAAA,WAAA8Z,SAAA;cAAA,kBAAAA,SAAA,CAAA/b,CAAA;gBAAA;kBAAA,IACjBuR,MAAM,CAACyK,iBAAiB;oBAAAD,SAAA,CAAA/b,CAAA;oBAAA;kBAAA;kBAAA,OAAA+b,SAAA,CAAA9a,CAAA;gBAAA;kBAAA,OAAA8a,SAAA,CAAA9a,CAAA,IAEtB4a,MAAI,CAACzC,sBAAsB,cAAAvW,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAA+Z,SAAA;oBAAA,IAAAhC,SAAA,EAAAG,QAAA,EAAAG,MAAA,EAAA5J,GAAA,EAAA0J,SAAA,EAAA6B,WAAA,EAAAC,GAAA;oBAAA,OAAAna,YAAA,GAAAC,CAAA,WAAAma,SAAA;sBAAA,kBAAAA,SAAA,CAAAvb,CAAA,GAAAub,SAAA,CAAApc,CAAA;wBAAA;0BAAAoc,SAAA,CAAAvb,CAAA;0BAEvBoZ,SAAS,GAAG4B,MAAI,CAAClB,YAAY,CAAC,CAAC;0BAAAyB,SAAA,CAAApc,CAAA;0BAAA,OACdkb,KAAK,CAAC3J,MAAM,CAACyK,iBAAiB,EAAE;4BACjDb,MAAM,EAAE,MAAM;4BACdkB,OAAO,EAAE;8BAAE,cAAc,EAAE;4BAAmB,CAAC;4BAC/CjB,IAAI,EAAEnI,IAAI,CAACqJ,SAAS,CAAC;8BAAEC,MAAM,EAAEtC,SAAS;8BAAEuC,UAAU,EAAEZ,GAAG,CAACY;4BAAW,CAAC;0BAC1E,CAAC,CAAC;wBAAA;0BAJEpC,QAAQ,GAAAgC,SAAA,CAAApb,CAAA;0BAAA,KAMRoZ,QAAQ,CAACiB,EAAE;4BAAAe,SAAA,CAAApc,CAAA;4BAAA;0BAAA;0BAAAoc,SAAA,CAAApc,CAAA;0BAAA,OACQoa,QAAQ,CAAC/I,IAAI,CAAC,CAAC;wBAAA;0BAA9BkJ,MAAM,GAAA6B,SAAA,CAAApb,CAAA;0BAEV,IAAIuC,KAAK,CAACE,OAAO,CAAC8W,MAAM,CAAC/E,SAAS,CAAC,EAAE;4BACjCqG,MAAI,CAACrG,SAAS,GAAG+E,MAAM,CAAC/E,SAAS;0BACrC,CAAC,MAAM;4BACC7E,GAAG,GAAGkL,MAAI,CAACrG,SAAS,CAAC1R,OAAO,CAAC8X,GAAG,CAAC;4BACrC,IAAIjL,GAAG,GAAG,CAAC,CAAC,EAAE;8BACVkL,MAAI,CAACrG,SAAS,CAACiH,MAAM,CAAC9L,GAAG,EAAE,CAAC,CAAC;4BACjC;0BACJ;0BAACyL,SAAA,CAAApc,CAAA;0BAAA;wBAAA;0BAAAoc,SAAA,CAAApc,CAAA;0BAAA,OAEqBoa,QAAQ,CAAC7S,IAAI,CAAC,CAAC;wBAAA;0BAAjC8S,SAAS,GAAA+B,SAAA,CAAApb,CAAA;0BACTkb,WAAW,GAAGL,MAAI,CAACP,2BAA2B,CAACjB,SAAS,EAAE,8CAA8C,CAAC;0BAC7G7H,OAAO,CAACe,KAAK,CAAC,4BAA4B,EAAE6G,QAAQ,CAACsC,MAAM,EAAErC,SAAS,CAAC;0BACvEwB,MAAI,CAAChG,YAAY,GAAG,CAAC;4BAAEiF,QAAQ,EAAEc,GAAG,CAACd,QAAQ,IAAI,EAAE;4BAAEvH,KAAK,EAAE2I;0BAAY,CAAC,CAAC;0BAC1E,IAAIjC,SAAS,EAAE;4BACX4B,MAAI,CAACH,oBAAoB,CAAC,CAAC;0BAC/B;0BACAG,MAAI,CAACd,iBAAiB,CAAC,CAAC;wBAAC;0BAAAqB,SAAA,CAAApc,CAAA;0BAAA;wBAAA;0BAAAoc,SAAA,CAAAvb,CAAA;0BAAAsb,GAAA,GAAAC,SAAA,CAAApb,CAAA;0BAG7BwR,OAAO,CAACe,KAAK,CAAC,wBAAwB,EAAA4I,GAAK,CAAC;0BAC5CN,MAAI,CAAChG,YAAY,GAAG,CAAC;4BAAEiF,QAAQ,EAAEc,GAAG,CAACd,QAAQ,IAAI,EAAE;4BAAEvH,KAAK,EAAE;0BAA+C,CAAC,CAAC;0BAC7G,IAAIsI,MAAI,CAAClB,YAAY,CAAC,CAAC,EAAE;4BACrBkB,MAAI,CAACH,oBAAoB,CAAC,CAAC;0BAC/B;0BACAG,MAAI,CAACd,iBAAiB,CAAC,CAAC;wBAAC;0BAAA,OAAAqB,SAAA,CAAAnb,CAAA;sBAAA;oBAAA,GAAAgb,QAAA;kBAAA,CAEhC,GAAC;cAAA;YAAA,GAAAH,QAAA;UAAA;QACN,CAAC;QACDa,cAAc,WAAdA,cAAcA,CAACC,KAAK,EAAE;UAClB,IAAIA,KAAK,GAAG,IAAI,EAAE,OAAOA,KAAK,GAAG,IAAI;UACrC,IAAIA,KAAK,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,CAACA,KAAK,GAAG,IAAI,EAAEC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;UACjE,OAAO,CAACD,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,EAAEC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;QACrD,CAAC;QACD9B,iBAAiB,WAAjBA,iBAAiBA,CAAA,EAAG;UAChB,IAAI,CAAC,IAAI,CAAChF,WAAW,EAAE;UAEvB,IAAI,CAACxE,MAAM,CAAC2G,uBAAuB,EAAE;YACjC,IAAI,CAACnC,WAAW,CAACwC,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;YACxC;UACJ;UAEA,IAAI,CAACzC,WAAW,CAACwC,SAAS,CAACG,MAAM,CAAC,QAAQ,CAAC;UAE3C,IAAI9E,IAAI,GAAG,mCAAmC;UAC9CA,IAAI,IAAI,yDAAyD;UAEjE,KAAK,IAAIxT,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACoV,SAAS,CAACpU,MAAM,EAAEhB,CAAC,EAAE,EAAE;YAC5C,IAAIwb,GAAG,GAAG,IAAI,CAACpG,SAAS,CAACpV,CAAC,CAAC;YAC3B,IAAIyE,IAAI,GAAG+W,GAAG,CAACd,QAAQ,IAAI,UAAU;YACrC,IAAIjW,IAAI,CAACzD,MAAM,GAAG,EAAE,EAAEyD,IAAI,GAAGA,IAAI,CAACsM,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;YAC1DyC,IAAI,IAAI,8IAA8I,GAAG,IAAI,CAACkJ,UAAU,CAAClB,GAAG,CAACd,QAAQ,IAAI,EAAE,CAAC,GAAG,IAAI;YACnMlH,IAAI,IAAI,oEAAoE;YAC5EA,IAAI,IAAI,IAAI,CAACkJ,UAAU,CAACjY,IAAI,CAAC;YAC7B+O,IAAI,IAAI,wGAAwG,GAAGxT,CAAC,GAAG,uBAAuB,IAAI,IAAI,CAACuV,0BAA0B,GAAG,WAAW,GAAG,EAAE,CAAC,GAAG,YAAY;YACpN/B,IAAI,IAAI,SAAS;UACrB;UAEA,KAAK,IAAI1R,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC2T,YAAY,CAACzU,MAAM,EAAEc,CAAC,EAAE,EAAE;YAC/C,IAAI6a,UAAU,GAAG,IAAI,CAAClH,YAAY,CAAC3T,CAAC,CAAC;YACrC,IAAI8a,UAAU,GAAGD,UAAU,CAACjC,QAAQ,IAAI,MAAM;YAC9C,IAAImC,QAAQ,GAAGF,UAAU,CAACxJ,KAAK,IAAI,eAAe;YAClD,IAAIyJ,UAAU,CAAC5b,MAAM,GAAG,EAAE,EAAE4b,UAAU,GAAGA,UAAU,CAAC7L,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;YAC5EyC,IAAI,IAAI,6IAA6I,GAAG,IAAI,CAACkJ,UAAU,CAAC,CAACC,UAAU,CAACjC,QAAQ,IAAI,EAAE,IAAI,IAAI,GAAGmC,QAAQ,CAAC,GAAG,IAAI;YAC7NrJ,IAAI,IAAI,4EAA4E;YACpFA,IAAI,IAAI,IAAI,CAACkJ,UAAU,CAACE,UAAU,CAAC;YACnCpJ,IAAI,IAAI,0GAA0G,GAAG1R,CAAC,GAAG,kCAAkC;YAC3J0R,IAAI,IAAI,SAAS;UACrB;UAEA,IAAI,IAAI,CAAC8B,WAAW,EAAE;YAClB9B,IAAI,IAAI,kIAAkI;YAC1IA,IAAI,IAAI,4GAA4G;YACpHA,IAAI,IAAI,SAAS;UACrB;UAEAA,IAAI,IAAI,sNAAsN,IAAI,IAAI,CAAC+B,0BAA0B,GAAG,WAAW,GAAG,EAAE,CAAC,GAAG,GAAG;UAC3R/B,IAAI,IAAI,uCAAuC;UAC/C,IAAI,IAAI,CAAC4B,SAAS,CAACpU,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAACsU,WAAW,EAAE;YAClD9B,IAAI,IAAI,4BAA4B;UACxC;UACAA,IAAI,IAAI,WAAW;UACnBA,IAAI,IAAI,QAAQ;UAChB,IAAIrC,MAAM,CAAC2L,uBAAuB,EAAE;YAChCtJ,IAAI,IAAI,wDAAwD,GAAG,IAAI,CAACkJ,UAAU,CAACvL,MAAM,CAAC2L,uBAAuB,CAAC,GAAG,QAAQ;UACjI;UAEAtJ,IAAI,IAAI,QAAQ;UAEhB,IAAI,CAACmC,WAAW,CAACoH,eAAe,CAACtJ,SAAS,CAACC,QAAQ,CAACF,IAAI,EAAE;YAAEwJ,mBAAmB,EAAE;UAAK,CAAC,CAAC,CAAC;;UAEzF;UACA,IAAI9D,IAAI,GAAG,IAAI;UACf,IAAI+D,YAAY,GAAG,IAAI,CAACtH,WAAW,CAACuH,gBAAgB,CAAC,kBAAkB,CAAC;UACxE,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,YAAY,CAACjc,MAAM,EAAEmc,CAAC,EAAE,EAAE;YAC1CF,YAAY,CAACE,CAAC,CAAC,CAACC,gBAAgB,CAAC,OAAO,EAAG,UAAU7M,GAAG,EAAE;cACtD,OAAO,UAAU/Q,CAAC,EAAE;gBAChBA,CAAC,CAACuY,cAAc,CAAC,CAAC;gBAClBvY,CAAC,CAACwY,eAAe,CAAC,CAAC;gBACnB,IAAIkB,IAAI,CAAC3D,0BAA0B,EAAE;kBACjC;gBACJ;gBAEA,IAAI8H,WAAW,GAAGnE,IAAI,CAAC9D,SAAS,CAAC7E,GAAG,CAAC;gBACrC,IAAI8M,WAAW,EAAEnE,IAAI,CAACqC,cAAc,CAAC8B,WAAW,CAAC;cACrD,CAAC;YACL,CAAC,CAAEC,QAAQ,CAACL,YAAY,CAACE,CAAC,CAAC,CAACI,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;UACjE;;UAEA;UACA,IAAIC,iBAAiB,GAAG,IAAI,CAAC7H,WAAW,CAACuH,gBAAgB,CAAC,oBAAoB,CAAC;UAC/E,KAAK,IAAItd,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG4d,iBAAiB,CAACxc,MAAM,EAAEpB,CAAC,EAAE,EAAE;YAC/C4d,iBAAiB,CAAC5d,CAAC,CAAC,CAACwd,gBAAgB,CAAC,OAAO,EAAG,UAAU7M,GAAG,EAAE;cAC3D,OAAO,UAAU/Q,CAAC,EAAE;gBAChBA,CAAC,CAACuY,cAAc,CAAC,CAAC;gBAClBvY,CAAC,CAACwY,eAAe,CAAC,CAAC;gBACnBkB,IAAI,CAACzD,YAAY,CAAC4G,MAAM,CAAC9L,GAAG,EAAE,CAAC,CAAC;gBAChC2I,IAAI,CAACyB,iBAAiB,CAAC,CAAC;cAC5B,CAAC;YACL,CAAC,CAAE2C,QAAQ,CAACE,iBAAiB,CAAC5d,CAAC,CAAC,CAAC2d,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;UACxE;;UAEA;UACA,IAAIE,MAAM,GAAG,IAAI,CAAC9H,WAAW,CAAC7N,aAAa,CAAC,sBAAsB,CAAC;UACnE,IAAI2V,MAAM,EAAE;YACRA,MAAM,CAACL,gBAAgB,CAAC,OAAO,EAAE,UAAU5d,CAAC,EAAE;cAC1CA,CAAC,CAACuY,cAAc,CAAC,CAAC;cAClB,IAAImB,IAAI,CAAC3D,0BAA0B,EAAE;gBACjC;cACJ;cACA2D,IAAI,CAACP,gBAAgB,CAAC,CAAC;YAC3B,CAAC,CAAC;UACN;QACJ,CAAC;QACD+D,UAAU,WAAVA,UAAUA,CAACvV,IAAI,EAAE;UACb,IAAIuW,GAAG,GAAGrW,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;UACvCoW,GAAG,CAACnW,WAAW,GAAGJ,IAAI;UACtB,OAAOuW,GAAG,CAAClW,SAAS;QACxB,CAAC;QACD0T,2BAA2B,WAA3BA,2BAA2BA,CAACjB,SAAS,EAAE0D,eAAe,EAAE;UACpD,IAAI,CAAC1D,SAAS,IAAI,OAAOA,SAAS,KAAK,QAAQ,EAAE;YAC7C,OAAO0D,eAAe;UAC1B;UAEA,IAAI3W,OAAO,GAAGiT,SAAS,CAAChT,IAAI,CAAC,CAAC;UAC9B,IAAI,CAACD,OAAO,EAAE;YACV,OAAO2W,eAAe;UAC1B;UAEA,IAAI3W,OAAO,CAAC4W,UAAU,CAAC,GAAG,CAAC,IAAI5W,OAAO,CAAC4W,UAAU,CAAC,GAAG,CAAC,EAAE;YACpD,IAAI;cACA,IAAI1U,MAAM,GAAG2J,IAAI,CAACC,KAAK,CAAC9L,OAAO,CAAC;cAChC,IAAIoH,OAAO,GAAG,CAAAlF,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEiK,KAAK,MAAIjK,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEkF,OAAO,MAAIlF,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEuB,KAAK,MAAIvB,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAE2U,MAAM;cACjF,OAAO,OAAOzP,OAAO,KAAK,QAAQ,IAAIA,OAAO,CAACnH,IAAI,CAAC,CAAC,GAC9CmH,OAAO,CAACnH,IAAI,CAAC,CAAC,GACd0W,eAAe;YACzB,CAAC,CAAC,OAAOtQ,GAAG,EAAE;cACV,OAAOsQ,eAAe;YAC1B;UACJ;UAEA,IAAI,SAAS,CAACjZ,IAAI,CAACsC,OAAO,CAAC,EAAE;YACzB,OAAO2W,eAAe;UAC1B;UAEA,OAAO3W,OAAO;QAClB,CAAC;QACD8W,4BAA4B,WAA5BA,4BAA4BA,CAACC,UAAU,EAAE;UACrC,IAAI,CAACA,UAAU,EAAE;YACb,OAAO,IAAI;UACf;UAEA,IAAI5Q,KAAK,GAAG,OAAO4Q,UAAU,CAAC5Q,KAAK,KAAK,QAAQ,GAAG4Q,UAAU,CAAC5Q,KAAK,CAAClG,IAAI,CAAC,CAAC,GAAG,EAAE;UAC/E,IAAI+W,IAAI,GAAG,OAAOD,UAAU,CAACC,IAAI,KAAK,QAAQ,GAAGD,UAAU,CAACC,IAAI,CAAC/W,IAAI,CAAC,CAAC,GAAG,EAAE;UAC5E,IAAIgX,QAAQ,GAAG,OAAOF,UAAU,CAACE,QAAQ,KAAK,QAAQ,GAAGF,UAAU,CAACE,QAAQ,CAAChX,IAAI,CAAC,CAAC,GAAG,EAAE;UACxF,IAAIiX,yBAAyB,GAAG,CAAC,CAACH,UAAU,CAACG,yBAAyB;UAEtE,IAAI,CAAC/Q,KAAK,IAAI,CAAC6Q,IAAI,IAAI,CAACC,QAAQ,IAAI,CAACC,yBAAyB,EAAE;YAC5D,OAAO,IAAI;UACf;UAEA,OAAO;YACH/Q,KAAK,EAAEA,KAAK;YACZ6Q,IAAI,EAAEA,IAAI;YACVC,QAAQ,EAAEA,QAAQ;YAClBC,yBAAyB,EAAEA;UAC/B,CAAC;QACL,CAAC;QACDC,iBAAiB,WAAjBA,iBAAiBA,CAAC/P,OAAO,EAAE;UACvB,IAAI2P,UAAU,GAAG3P,OAAO,GAAG,IAAI,CAAC0P,4BAA4B,CAAC1P,OAAO,CAAC2P,UAAU,CAAC,GAAG,IAAI;UACvF,OAAOA,UAAU,IAAIA,UAAU,CAAC5Q,KAAK,GAAG4Q,UAAU,CAAC5Q,KAAK,GAAG,IAAI,CAAC7H,cAAc;QAClF,CAAC;QACD8Y,uBAAuB,WAAvBA,uBAAuBA,CAAChQ,OAAO,EAAE;UAC7B,IAAI2P,UAAU,GAAG3P,OAAO,GAAG,IAAI,CAAC0P,4BAA4B,CAAC1P,OAAO,CAAC2P,UAAU,CAAC,GAAG,IAAI;UACvF,IAAIM,OAAO,GAAG,CAAC,kBAAkB,CAAC;UAElC,IAAIN,UAAU,IAAIA,UAAU,CAACE,QAAQ,EAAE;YACnCI,OAAO,CAAC1Z,IAAI,CAACoZ,UAAU,CAACE,QAAQ,CAAC;UACrC,CAAC,MAAM;YACHI,OAAO,CAAC1Z,IAAI,CAAC,4BAA4B,CAAC;UAC9C;UAEA,OAAO0Z,OAAO;QAClB,CAAC;QACDC,uBAAuB,WAAvBA,uBAAuBA,CAAClQ,OAAO,EAAE9D,KAAK,EAAE;UACpC,IAAIyT,UAAU,GAAG3P,OAAO,GAAG,IAAI,CAAC0P,4BAA4B,CAAC1P,OAAO,CAAC2P,UAAU,CAAC,GAAG,IAAI;UACvF,OAAO,CAAC,IAAI,CAACQ,0BAA0B,CAACnQ,OAAO,EAAE9D,KAAK,CAAC,GAAG,mBAAmB,GAAG,aAAa,EAAEyT,UAAU,IAAIA,UAAU,CAACE,QAAQ,GAAGF,UAAU,CAACE,QAAQ,GAAG,EAAE,CAAC;QAChK,CAAC;QACDO,gBAAgB,WAAhBA,gBAAgBA,CAACpQ,OAAO,EAAE;UACtB,IAAI2P,UAAU,GAAG3P,OAAO,GAAG,IAAI,CAAC0P,4BAA4B,CAAC1P,OAAO,CAAC2P,UAAU,CAAC,GAAG,IAAI;UACvF,OAAOA,UAAU,IAAIA,UAAU,CAACC,IAAI,GAAGD,UAAU,CAACC,IAAI,GAAG,aAAa;QAC1E,CAAC;QACDO,0BAA0B,WAA1BA,0BAA0BA,CAACnQ,OAAO,EAAE9D,KAAK,EAAE;UACvC,IAAIyT,UAAU,GAAG3P,OAAO,GAAG,IAAI,CAAC0P,4BAA4B,CAAC1P,OAAO,CAAC2P,UAAU,CAAC,GAAG,IAAI;UACvF,OAAO,CAAC,CAAC3P,OAAO,IACZA,OAAO,CAACyG,WAAW,IACnBvK,KAAK,KAAK,IAAI,CAACmN,kBAAkB,IACjC,EAAEsG,UAAU,IAAIA,UAAU,CAACG,yBAAyB,CAAC;QAC7D,CAAC;QACKO,eAAe,WAAfA,eAAeA,CAAA,EAAG;UAAA,IAAAC,MAAA;UAAA,OAAAjc,iBAAA,cAAAb,YAAA,GAAAE,CAAA,UAAA6c,SAAA;YAAA,IAAAC,GAAA;YAAA,OAAAhd,YAAA,GAAAC,CAAA,WAAAgd,SAAA;cAAA,kBAAAA,SAAA,CAAApe,CAAA,GAAAoe,SAAA,CAAAjf,CAAA;gBAAA;kBACpB8e,MAAI,CAACI,UAAU,GAAG,IAAIC,OAAO,CAACC,oBAAoB,CAAC,CAAC,CAC/CC,OAAO,CAAC9N,MAAM,CAAC+C,aAAa,CAAC,CAC7BgL,sBAAsB,CAAC,CAAC,CACxBC,KAAK,CAAC,CAAC;;kBAEZ;kBACA;kBACAT,MAAI,CAACI,UAAU,CAACM,2BAA2B,GAAG,MAAM;kBACpDV,MAAI,CAACI,UAAU,CAACO,+BAA+B,GAAG,KAAK;kBAEvDX,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,aAAa,EAAE,UAACxQ,IAAI,EAAK;oBAAA,IAAAyQ,cAAA;oBACxCb,MAAI,CAACvD,iBAAiB,CAACrM,IAAI,CAAC+K,SAAS,EAAE,IAAI,CAAC;oBAC5C6E,MAAI,CAACzJ,QAAQ,GAAG,EAAE;oBAClByJ,MAAI,CAACtJ,SAAS,GAAGtG,IAAI,CAACsG,SAAS,IAAI,EAAE;oBACrCsJ,MAAI,CAACjJ,YAAY,GAAG,EAAE;oBAEtB,EAAA8J,cAAA,GAACzQ,IAAI,CAACmG,QAAQ,cAAAsK,cAAA,cAAAA,cAAA,GAAI,EAAE,EAAE9W,OAAO,CAAC,UAAA+W,GAAG,EAAI;sBACjCd,MAAI,CAACe,UAAU,CAACD,GAAG,CAAC;sBAEpBd,MAAI,CAACgB,SAAS,CAAC,YAAM;wBACjB/N,qBAAqB,CAAC6N,GAAG,CAAC;sBAC9B,CAAC,CAAC;oBACN,CAAC,CAAC;;oBAEF;oBACAd,MAAI,CAACgB,SAAS,CAAC,YAAM;sBACjBhB,MAAI,CAACiB,uBAAuB,CAAC,CAAC;oBAClC,CAAC,CAAC;;oBAEF;oBACA;oBACA,IAAIjB,MAAI,CAACzJ,QAAQ,CAACjU,MAAM,KAAK,CAAC,IAAImQ,MAAM,CAACyO,aAAa,EAAE;sBACpDlB,MAAI,CAACvJ,MAAM,GAAGhE,MAAM,CAACyO,aAAa;sBAClClB,MAAI,CAACmB,WAAW,CAAC,CAAC;oBACtB;kBACJ,CAAC,CAAC;kBAEFnB,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,cAAc,EAAE,UAACnM,KAAK,EAAK;oBAC1Cf,OAAO,CAACe,KAAK,CAAC,iBAAiB,EAAEA,KAAK,CAAC;oBAEvC,IAAIuL,MAAI,CAAC7I,WAAW,EAAE;sBAClB6I,MAAI,CAACoB,aAAa,CAAC,CAAC;oBACxB;oBAEA,IAAI9L,cAAc,IAAI,OAAOA,cAAc,CAAC+L,kBAAkB,KAAK,UAAU,EAAE;sBAC3E/L,cAAc,CAAC+L,kBAAkB,CAACrB,MAAI,EAAEvL,KAAK,EAAEhC,MAAM,CAAC;oBAC1D;kBACJ,CAAC,CAAC;kBAEFuN,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,cAAc,EAAE,UAACU,SAAS,EAAEC,UAAU,EAAK;oBAC1D,IAAIT,GAAG,GAAGd,MAAI,CAACzJ,QAAQ,CAACiL,IAAI,CAAC,UAAApe,CAAC;sBAAA,OAAIA,CAAC,CAACqe,EAAE,KAAKH,SAAS;oBAAA,EAAC;oBACrD,IAAIR,GAAG,EAAE;sBACLA,GAAG,CAACS,UAAU,GAAGA,UAAU;oBAC/B;kBACJ,CAAC,CAAC;kBAEFvB,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,mBAAmB,EAAE,UAACzF,SAAS,EAAE1S,IAAI,EAAEiZ,OAAO,EAAK;oBAClE,IAAI1B,MAAI,CAACxH,kBAAkB,EAAE;sBACzB,IAAI,CAACkJ,OAAO,IAAIjZ,IAAI,EAAE;wBAClBuX,MAAI,CAAC2B,8BAA8B,GAAGlZ,IAAI;wBAC1C,IAAImZ,OAAO,GAAGnZ,IAAI,CAACoZ,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;wBACrF,IAAI/M,IAAI,GAAG,mCAAmC,GAAG8M,OAAO,GAAG,MAAM;;wBAEjE;wBACA,IAAI,CAAC5B,MAAI,CAAC8B,2BAA2B,EAAE;0BACnC9B,MAAI,CAAC+B,eAAe,CAAC,CAAC;0BACtB/B,MAAI,CAAC8B,2BAA2B,GAAG;4BAC/B9I,IAAI,EAAE,MAAM;4BACZ/L,OAAO,EAAExE,IAAI;4BACbsH,WAAW,EAAE+E,IAAI;4BACjBkN,SAAS,EAAE;0BACf,CAAC;0BACDhC,MAAI,CAACzJ,QAAQ,CAACtQ,IAAI,CAAC+Z,MAAI,CAAC8B,2BAA2B,CAAC;wBACxD,CAAC,MAAM;0BACH9B,MAAI,CAAC8B,2BAA2B,CAAC7U,OAAO,GAAGxE,IAAI;0BAC/CuX,MAAI,CAAC8B,2BAA2B,CAAC/R,WAAW,GAAG+E,IAAI;wBACvD;wBACAkL,MAAI,CAACiC,cAAc,CAAC,CAAC;sBACzB;sBACA;oBACJ;oBAEA,IAAIxZ,IAAI,IAAI,CAACuX,MAAI,CAACkC,eAAe,EAAE;sBAC/BlC,MAAI,CAACvJ,MAAM,GAAGuJ,MAAI,CAAC3I,kBAAkB,GAAG5O,IAAI;sBAC5C,IAAIuX,MAAI,CAAClK,YAAY,EAAE;wBACnBkK,MAAI,CAAClK,YAAY,CAACnT,KAAK,GAAGqd,MAAI,CAACvJ,MAAM;wBACrCuJ,MAAI,CAAClK,YAAY,CAACqM,aAAa,CAAC,IAAIC,KAAK,CAAC,OAAO,CAAC,CAAC;sBACvD;oBACJ;kBACJ,CAAC,CAAC;kBAEFpC,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,gCAAgC,EAAE,UAACzF,SAAS,EAAE1S,IAAI,EAAK;oBACtE,IAAIA,IAAI,EAAE;sBACNuX,MAAI,CAACqC,SAAS,CAAC,CAAC;;sBAEhB;sBACA;sBACA,IAAIrC,MAAI,CAACsC,6BAA6B,EAAE;wBACpC,IAAIC,MAAM,GAAGvC,MAAI,CAACzJ,QAAQ,CAACyJ,MAAI,CAACsC,6BAA6B,CAAC1W,KAAK,CAAC;wBACpE,IAAI2W,MAAM,EAAE;0BACRA,MAAM,CAACpM,WAAW,GAAG,KAAK;wBAC9B;wBACA6J,MAAI,CAACsC,6BAA6B,GAAG,IAAI;sBAC7C;;sBAEA;sBACA,IAAItC,MAAI,CAAC8B,2BAA2B,EAAE;wBAClC,IAAIF,OAAO,GAAGnZ,IAAI,CAACoZ,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAACA,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;wBACrF7B,MAAI,CAAC8B,2BAA2B,CAAC7U,OAAO,GAAGxE,IAAI;wBAC/CuX,MAAI,CAAC8B,2BAA2B,CAAC/R,WAAW,GAAG,KAAK,GAAG6R,OAAO,GAAG,MAAM;wBACvE5B,MAAI,CAAC8B,2BAA2B,CAACE,SAAS,GAAG,KAAK;wBAClDhC,MAAI,CAAC8B,2BAA2B,GAAG,IAAI;sBAC3C,CAAC,MAAM;wBACH9B,MAAI,CAACe,UAAU,CAAC;0BACZ/H,IAAI,EAAE,MAAM;0BACZ/L,OAAO,EAAExE;wBACb,CAAC,CAAC;sBACN;sBACAuX,MAAI,CAACiC,cAAc,CAAC,CAAC;oBACzB;kBACJ,CAAC,CAAC;kBAEFjC,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,mCAAmC,EAAE,UAACzF,SAAS,EAAEmG,SAAS,EAAE9O,KAAK,EAAEgQ,UAAU,EAAEhW,UAAU,EAAE6S,UAAU,EAAK;oBACzH,IAAI,CAACW,MAAI,CAACsC,6BAA6B,EAAE;sBACrCtC,MAAI,CAACqC,SAAS,CAAC,CAAC;sBAChBrC,MAAI,CAACyC,mBAAmB,CAAC,CAAC;;sBAE1B;sBACA,KAAK,IAAIhE,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGuB,MAAI,CAACzJ,QAAQ,CAACjU,MAAM,EAAEmc,CAAC,EAAE,EAAE;wBAC3C,IAAIuB,MAAI,CAACzJ,QAAQ,CAACkI,CAAC,CAAC,CAACtI,WAAW,EAAE;0BAC9B6J,MAAI,CAACzJ,QAAQ,CAACkI,CAAC,CAAC,CAACtI,WAAW,GAAG,KAAK;wBACxC;sBACJ;sBAEA,IAAIuM,QAAQ,GAAG1C,MAAI,CAACzJ,QAAQ,CAACjU,MAAM;sBACnC,IAAIqgB,UAAU,GAAG;wBACblB,EAAE,EAAEH,SAAS;wBACbtI,IAAI,EAAE,WAAW;wBACjB/L,OAAO,EAAE,EAAE;wBACX8C,WAAW,EAAE,EAAE;wBACfoG,WAAW,EAAE,IAAI;wBACjBoL,UAAU,EAAE,IAAI;wBAChBlC,UAAU,EAAEW,MAAI,CAACZ,4BAA4B,CAACC,UAAU,CAAC;wBACzD7S,UAAU,EAAE,CAAC;sBACjB,CAAC;sBACDwT,MAAI,CAACzJ,QAAQ,CAACtQ,IAAI,CAAC0c,UAAU,CAAC;sBAC9B3C,MAAI,CAACsC,6BAA6B,GAAG;wBAAE1W,KAAK,EAAE8W,QAAQ;wBAAEzV,OAAO,EAAE;sBAAG,CAAC;oBACzE;oBAEA+S,MAAI,CAACsC,6BAA6B,CAACrV,OAAO,IAAIuF,KAAK;oBACnD,IAAIsO,GAAG,GAAGd,MAAI,CAACzJ,QAAQ,CAACyJ,MAAI,CAACsC,6BAA6B,CAAC1W,KAAK,CAAC;oBACjE,IAAIkV,GAAG,EAAE;sBACL,IAAI,CAACA,GAAG,CAACzB,UAAU,EAAE;wBACjByB,GAAG,CAACzB,UAAU,GAAGW,MAAI,CAACZ,4BAA4B,CAACC,UAAU,CAAC;sBAClE;sBACAyB,GAAG,CAACnR,UAAU,GAAGqQ,MAAI,CAACsC,6BAA6B,CAACrV,OAAO;sBAC3D6T,GAAG,CAACtU,UAAU,GAAGD,mBAAmB,CAAC5K,MAAM,CAACgK,MAAM,CAAC,CAAC,CAAC,EAAEmV,GAAG,CAACtU,UAAU,IAAI,CAAC,CAAC,EAAEA,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;sBAC/FiD,yBAAyB,CAACqR,GAAG,EAAEA,GAAG,CAACtU,UAAU,CAAC;sBAC9CwT,MAAI,CAACgB,SAAS,CAAC,YAAM;wBACjB/N,qBAAqB,CAAC6N,GAAG,CAAC;wBAC1Bd,MAAI,CAACiC,cAAc,CAAC,CAAC;sBACzB,CAAC,CAAC;oBACN;kBACJ,CAAC,CAAC;kBAEFjC,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,sCAAsC,EAAE,UAACzF,SAAS,EAAEmG,SAAS,EAAE9U,UAAU,EAAK;oBAC7F,IAAIwT,MAAI,CAACsC,6BAA6B,EAAE;sBACpC,IAAIxB,GAAG,GAAGd,MAAI,CAACzJ,QAAQ,CAACyJ,MAAI,CAACsC,6BAA6B,CAAC1W,KAAK,CAAC;sBACjE,IAAIkV,GAAG,EAAE;wBACLA,GAAG,CAAC3K,WAAW,GAAG,KAAK;wBACvB2K,GAAG,CAACtU,UAAU,GAAGD,mBAAmB,CAAC5K,MAAM,CAACgK,MAAM,CAAC,CAAC,CAAC,EAAEmV,GAAG,CAACtU,UAAU,IAAI,CAAC,CAAC,EAAEA,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC/FiD,yBAAyB,CAACqR,GAAG,EAAEA,GAAG,CAACtU,UAAU,CAAC;sBAClD;sBACAwT,MAAI,CAACsC,6BAA6B,GAAG,IAAI;oBAC7C;kBACJ,CAAC,CAAC;kBAEFtC,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,mBAAmB,EAAE,UAACzF,SAAS,EAAEyH,WAAW,EAAEC,WAAW,EAAK;oBAC7E,IAAID,WAAW,EAAE;sBACb,IAAME,YAAY,GAAGC,IAAI,CAACH,WAAW,CAAC;sBACtC,IAAM9E,KAAK,GAAG,IAAIkF,UAAU,CAACF,YAAY,CAACxgB,MAAM,CAAC;sBACjD,KAAK,IAAIhB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGwhB,YAAY,CAACxgB,MAAM,EAAEhB,CAAC,EAAE,EAAE;wBAC1Cwc,KAAK,CAACxc,CAAC,CAAC,GAAGwhB,YAAY,CAACG,UAAU,CAAC3hB,CAAC,CAAC;sBACzC;sBACA0e,MAAI,CAACrI,WAAW,CAAC1R,IAAI,CAAC6X,KAAK,CAAC;oBAChC;kBACJ,CAAC,CAAC;kBAEFkC,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,sBAAsB,EAAE,UAACzF,SAAS,EAAK;oBACtD6E,MAAI,CAACkD,kBAAkB,CAAC,CAAC;kBAC7B,CAAC,CAAC;kBAEFlD,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,qBAAqB,EAAE,UAACuC,YAAY,EAAK;oBACxDnD,MAAI,CAACoD,mBAAmB,CAACD,YAAY,CAAC;kBAC1C,CAAC,CAAC;kBAEFnD,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,oBAAoB,EAAE,UAACuC,YAAY,EAAK;oBACvDnD,MAAI,CAACqD,kBAAkB,CAACF,YAAY,CAAC;kBACzC,CAAC,CAAC;kBAEFnD,MAAI,CAACI,UAAU,CAACQ,EAAE,CAAC,oBAAoB,EAAE,UAAC0C,gBAAgB,EAAK;oBAC3DtD,MAAI,CAACuD,kBAAkB,CAACD,gBAAgB,CAAC;kBAC7C,CAAC,CAAC;kBAEFtD,MAAI,CAACI,UAAU,CAACoD,cAAc,CAAC,YAAM;oBACjC9P,OAAO,CAACC,IAAI,CAAC,0BAA0B,CAAC;kBAC5C,CAAC,CAAC;kBAEFqM,MAAI,CAACI,UAAU,CAACqD,aAAa,CAAC,YAAM;oBAChC/P,OAAO,CAACgQ,IAAI,CAAC,uBAAuB,CAAC;oBAErC,IAAI1D,MAAI,CAAC/J,gBAAgB,EAAE;sBACvB+J,MAAI,CAACpD,oBAAoB,CAAC,CAAC;oBAC/B,CAAC,MAAM,IAAInK,MAAM,CAACkR,iBAAiB,EAAE;sBACjC3D,MAAI,CAAC4D,eAAe,CAAC,CAAC;oBAC1B;kBACJ,CAAC,CAAC;kBAEF5D,MAAI,CAACI,UAAU,CAACyD,OAAO,CAAC,UAACpP,KAAK,EAAK;oBAC/B,IAAIuL,MAAI,CAAC5J,gBAAgB,EAAE;sBACvB;oBACJ;oBAEA,IAAI3B,KAAK,EAAE;sBACPf,OAAO,CAACC,IAAI,CAAC,uCAAuC,EAAEc,KAAK,CAAC/E,OAAO,IAAI+E,KAAK,CAAC;oBACjF;kBACJ,CAAC,CAAC;kBAAC0L,SAAA,CAAApe,CAAA;kBAAAoe,SAAA,CAAAjf,CAAA;kBAAA,OAGO8e,MAAI,CAACI,UAAU,CAACxO,KAAK,CAAC,CAAC;gBAAA;kBAAAuO,SAAA,CAAAjf,CAAA;kBAAA;gBAAA;kBAAAif,SAAA,CAAApe,CAAA;kBAAAme,GAAA,GAAAC,SAAA,CAAAje,CAAA;kBAE7BwR,OAAO,CAACe,KAAK,CAAC,4BAA4B,EAAAyL,GAAK,CAAC;gBAAC;kBAAA,OAAAC,SAAA,CAAAhe,CAAA;cAAA;YAAA,GAAA8d,QAAA;UAAA;QAEzD,CAAC;QACD6D,kBAAkB,WAAlBA,kBAAkBA,CAACpU,OAAO,EAAE;UAAA,IAAAqU,MAAA;UACxB,IAAIrU,OAAO,CAACsJ,IAAI,KAAK,WAAW,EAAE;YAC9BtJ,OAAO,CAAC2P,UAAU,GAAG,IAAI,CAACD,4BAA4B,CAAC1P,OAAO,CAAC2P,UAAU,CAAC;UAC9E;UAEA,IAAI3P,OAAO,CAACzC,OAAO,IAAI,CAACyC,OAAO,CAACK,WAAW,EAAE;YACzCL,OAAO,CAACK,WAAW,GAAGC,oBAAoB,CAACN,OAAO,CAACzC,OAAO,EAAEyC,OAAO,CAAC;UACxE;UACA,IAAI,CAACsU,SAAS,CAAC,IAAIC,WAAW,CAAC,2BAA2B,EAAE;YAAE9E,MAAM,EAAE;cAAEzP,OAAO,EAAEA;YAAQ;UAAE,CAAC,CAAC,CAAC;UAC9F,IAAI,CAAC6G,QAAQ,CAACtQ,IAAI,CAACyJ,OAAO,CAAC;UAE3B,IAAI,CAACsR,SAAS,CAAC,YAAM;YACjB+C,MAAI,CAACC,SAAS,CAAC,IAAIC,WAAW,CAAC,0BAA0B,EAAE;cAAE9E,MAAM,EAAE;gBAAEzP,OAAO,EAAEA;cAAQ;YAAE,CAAC,CAAC,CAAC;UACjG,CAAC,CAAC;QACN,CAAC;QACDqR,UAAU,WAAVA,UAAUA,CAACrR,OAAO,EAAE;UAAA,IAAAwU,MAAA;UAEhB;UACA,IAAIxU,OAAO,CAAC6R,UAAU,KAAKzP,SAAS,EAAE;YAClCpC,OAAO,CAAC6R,UAAU,GAAG,IAAI;UAC7B;UAEA,IAAI7R,OAAO,CAACzC,OAAO,EAAE;YAAA,IAAAkX,mBAAA;YACjBzU,OAAO,CAACC,UAAU,IAAAwU,mBAAA,GAAGzU,OAAO,CAACC,UAAU,cAAAwU,mBAAA,cAAAA,mBAAA,GAAIzU,OAAO,CAACzC,OAAO;YAC1DwC,yBAAyB,CAACC,OAAO,EAAEA,OAAO,CAAClD,UAAU,CAAC;UAC1D;UAEA,IAAI,CAACsX,kBAAkB,CAACpU,OAAO,CAAC;UAChC,IAAI,CAACqS,eAAe,CAAC,CAAC;UAEtB,IAAI,CAACf,SAAS,CAAC,YAAM;YACjB;YACA/N,qBAAqB,CAACvD,OAAO,CAAC;YAC9BwU,MAAI,CAACjC,cAAc,CAAC,CAAC;UACzB,CAAC,CAAC;QACN,CAAC;QACDmC,WAAW,WAAXA,WAAWA,CAAC7N,QAAQ,EAAE;UAAA,IAAA8N,MAAA;UAElB,KAAK,IAAI/iB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGiV,QAAQ,CAACjU,MAAM,EAAEhB,CAAC,EAAE,EAAE;YACtC,IAAI,CAACwiB,kBAAkB,CAACvN,QAAQ,CAACjV,CAAC,CAAC,CAAC;UACxC;UAEA,IAAI,CAACygB,eAAe,CAAC,CAAC;UACtB,IAAI,CAACf,SAAS,CAAC,YAAM;YACjBqD,MAAI,CAACpC,cAAc,CAAC,CAAC;UACzB,CAAC,CAAC;QACN,CAAC;QACDF,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,IAAI,CAAC1T,WAAW,EAAE;YAClB,IAAI,CAACA,WAAW,CAACoL,SAAS,CAACC,GAAG,CAAC,QAAQ,CAAC;UAC5C;UACA,IAAI,CAACxD,oBAAoB,GAAG,KAAK;QACrC,CAAC;QACDoO,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,IAAI,CAACjW,WAAW,EAAE;YAClB,IAAI,CAACA,WAAW,CAACoL,SAAS,CAACG,MAAM,CAAC,QAAQ,CAAC;UAC/C;UACA,IAAI,CAAC1D,oBAAoB,GAAG,IAAI;QACpC,CAAC;QACDqO,uBAAuB,WAAvBA,uBAAuBA,CAAA,EAAG;UACtB,OAAO9R,MAAM,CAAC8R,uBAAuB,KAAK,KAAK;QACnD,CAAC;QACDC,6BAA6B,WAA7BA,6BAA6BA,CAAA,EAAG;UAC5B,IAAI,IAAI,CAACD,uBAAuB,CAAC,CAAC,EAAE;YAChC,OAAO,IAAI;UACf;UAEA,IAAME,kBAAkB,GAAGhS,MAAM,CAACiS,8BAA8B,IAAI,+CAA+C;UAEnH,IAAI,IAAI,CAAC5O,YAAY,EAAE;YACnB,IAAI,CAACA,YAAY,CAAC6O,QAAQ,GAAG,IAAI;YACjC,IAAI,CAAC7O,YAAY,CAACnT,KAAK,GAAG,EAAE;YAC5B,IAAI,CAACmT,YAAY,CAACzH,WAAW,GAAGoW,kBAAkB;UACtD;UAEA,IAAI,IAAI,CAAC1O,aAAa,EAAE;YACpB,IAAI,CAACA,aAAa,CAAC4O,QAAQ,GAAG,IAAI;UACtC;UAEA,IAAI,IAAI,CAACC,gBAAgB,EAAE;YACvB,IAAI,CAACA,gBAAgB,CAACD,QAAQ,GAAG,IAAI;YACrC,IAAI,CAACC,gBAAgB,CAACC,KAAK,CAACC,OAAO,GAAG,MAAM;UAChD;UAEA,IAAI,IAAI,CAACC,yBAAyB,EAAE;YAChC,IAAI,CAACA,yBAAyB,CAACJ,QAAQ,GAAG,IAAI;YAC9C,IAAI,CAACI,yBAAyB,CAACF,KAAK,CAACC,OAAO,GAAG,MAAM;UACzD;UAEA,OAAO,KAAK;QAChB,CAAC;QACDd,SAAS,WAATA,SAASA,CAACgB,KAAK,EAAE;UACbrc,QAAQ,CAACwZ,aAAa,CAAC6C,KAAK,CAAC;QACjC,CAAC;QACDC,WAAW,WAAXA,WAAWA,CAACvV,OAAO,EAAE;UACjB,OAAOA,OAAO,CAACsJ,IAAI,KAAK,WAAW;QACvC,CAAC;QACDmI,WAAW,WAAXA,WAAWA,CAAA,EAAG;UACV,IAAI,CAAC,IAAI,CAACqD,6BAA6B,CAAC,CAAC,EAAE;YACvC;UACJ;UAEA,IAAIU,aAAa,GAAG,IAAI,CAACzO,MAAM,CAAClO,IAAI,CAAC,CAAC;UAEtC,IAAI,CAAC2c,aAAa,EAAE;YAChB;UACJ;;UAEA;UACA,IAAI,IAAI,CAAC/N,WAAW,EAAE;YAClB,IAAI,CAACiK,aAAa,CAAC,CAAC;UACxB;;UAEA;UACA,IAAI,CAACc,eAAe,GAAG,IAAI;;UAE3B;UACA,IAAI,IAAI,CAAC7J,kBAAkB,EAAE;YACzB,IAAI,CAAC9B,QAAQ,CAACoH,MAAM,CAAC,CAAC,EAAE,IAAI,CAACpH,QAAQ,CAACjU,MAAM,CAAC;UACjD;UAEA,IAAI,CAACye,UAAU,CAAC;YACZ/H,IAAI,EAAE,MAAM;YACZ/L,OAAO,EAAEiY;UACb,CAAC,CAAC;UAEF,IAAI,CAACC,aAAa,CAAC,IAAI,CAACrJ,YAAY,CAAC,CAAC,EAAEoJ,aAAa,EAAE,IAAI,CAAC;UAC5D,IAAI,CAACpP,YAAY,CAACnT,KAAK,GAAG,EAAE;UAC5B,IAAI,CAAC8T,MAAM,GAAG,EAAE;QACpB,CAAC;QACD2O,cAAc,WAAdA,cAAcA,CAAA,EAAG;UAAA,IAAAC,MAAA;UACb,IAAI,IAAI,CAAClO,WAAW,IAAI,CAAC,IAAI,CAACiJ,UAAU,EAAE;YACtC;UACJ;UAEAkF,SAAS,CAACC,YAAY,CAACC,YAAY,CAAC;YAAEC,KAAK,EAAE;cAAEC,gBAAgB,EAAE,IAAI;cAAEC,gBAAgB,EAAE,IAAI;cAAEC,eAAe,EAAE;YAAK;UAAE,CAAC,CAAC,CACpH9hB,IAAI,CAAC,UAAAwS,MAAM,EAAI;YACZ,IAAIuP,QAAQ,GAAGC,aAAa,CAACC,eAAe,CAAC,uBAAuB,CAAC,GAC/D,uBAAuB,GACvBD,aAAa,CAACC,eAAe,CAAC,wBAAwB,CAAC,GACnD,wBAAwB,GACxB,YAAY;YAEtBV,MAAI,CAACjO,aAAa,GAAG,IAAI0O,aAAa,CAACxP,MAAM,EAAE;cAC3CuP,QAAQ,EAAEA,QAAQ;cAClBG,kBAAkB,EAAE;YACxB,CAAC,CAAC;YAEFX,MAAI,CAAChO,kBAAkB,GAAGgO,MAAI,CAAC5O,MAAM;YACrC4O,MAAI,CAACnD,eAAe,GAAG,KAAK;YAE5B,IAAI+D,OAAO,GAAG,IAAI5F,OAAO,CAAC6F,OAAO,CAAC,CAAC;YACnC,IAAI9K,SAAS,GAAGiK,MAAI,CAACvJ,YAAY,CAAC,CAAC;YACnC,IAAIX,SAAS,GAAGkK,MAAI,CAACxJ,YAAY,CAAC,CAAC,IAAI,EAAE;YACzC,IAAIsK,YAAY,GAAGviB,OAAO,CAACC,OAAO,CAAC,CAAC;YAEpCwhB,MAAI,CAACjO,aAAa,CAACsH,gBAAgB,CAAC,eAAe,EAAE,UAAC5d,CAAC,EAAK;cACxD,IAAIA,CAAC,CAACsP,IAAI,IAAItP,CAAC,CAACsP,IAAI,CAACgW,IAAI,GAAG,CAAC,EAAE;gBAC3BD,YAAY,GAAGA,YAAY,CAACriB,IAAI,cAAAC,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAAijB,SAAA;kBAAA,IAAAjW,IAAA,EAAAkW,UAAA,EAAAxD,YAAA,EAAAyD,MAAA;kBAAA,OAAArjB,YAAA,GAAAC,CAAA,WAAAqjB,SAAA;oBAAA,kBAAAA,SAAA,CAAAtlB,CAAA;sBAAA;wBAAAslB,SAAA,CAAAtlB,CAAA;wBAAA,OACZJ,CAAC,CAACsP,IAAI,CAACqW,WAAW,CAAC,CAAC;sBAAA;wBAAjCrW,IAAI,GAAAoW,SAAA,CAAAtkB,CAAA;wBACJokB,UAAU,GAAG,IAAItD,UAAU,CAAC5S,IAAI,CAAC;wBACjC0S,YAAY,GAAGwD,UAAU,CAACI,MAAM,CAAC,UAAUC,GAAG,EAAEC,KAAI,EAAE;0BAAE,OAAOD,GAAG,GAAGE,MAAM,CAACC,YAAY,CAACF,KAAI,CAAC;wBAAE,CAAC,EAAE,EAAE,CAAC;wBACtGL,MAAM,GAAGQ,IAAI,CAACjE,YAAY,CAAC;wBAC/BmD,OAAO,CAAC1gB,IAAI,CAACghB,MAAM,CAAC;sBAAC;wBAAA,OAAAC,SAAA,CAAArkB,CAAA;oBAAA;kBAAA,GAAAkkB,QAAA;gBAAA,CACxB,GAAC;cACN;YACJ,CAAC,CAAC;YAEFhB,MAAI,CAACjO,aAAa,CAACsH,gBAAgB,CAAC,MAAM,EAAE,YAAM;cAC9CpI,MAAM,CAAC0Q,SAAS,CAAC,CAAC,CAACjd,OAAO,CAAC,UAAAkd,KAAK;gBAAA,OAAIA,KAAK,CAACC,IAAI,CAAC,CAAC;cAAA,EAAC;cACjDf,YAAY,CAACriB,IAAI,CAAC;gBAAA,OAAMmiB,OAAO,CAACkB,QAAQ,CAAC,CAAC;cAAA,EAAC;YAC/C,CAAC,CAAC;YAEF,IAAIvW,QAAQ,GAAG0U,SAAS,CAAC1U,QAAQ,IAAIjI,QAAQ,CAACye,eAAe,CAAC7W,IAAI,IAAI,OAAO;YAC7E8U,MAAI,CAACjF,UAAU,CAACiH,IAAI,CAAC,iBAAiB,EAAEjM,SAAS,EAAED,SAAS,EAAE8K,OAAO,EAAEJ,QAAQ,EAAEjV,QAAQ,CAAC;YAC1FyU,MAAI,CAACjO,aAAa,CAACxF,KAAK,CAAC,GAAG,CAAC;YAC7ByT,MAAI,CAAClO,WAAW,GAAG,IAAI;YACvBkO,MAAI,CAACiC,eAAe,CAAC,CAAC;UAC1B,CAAC,CAAC,SACI,CAAC,UAAA3Y,GAAG,EAAI;YACV+E,OAAO,CAACe,KAAK,CAAC,2BAA2B,EAAE9F,GAAG,CAAC;UACnD,CAAC,CAAC;QACV,CAAC;QACDyS,aAAa,WAAbA,aAAaA,CAAA,EAAG;UACZ,IAAI,CAAC,IAAI,CAACjK,WAAW,IAAI,CAAC,IAAI,CAACC,aAAa,EAAE;YAC1C;UACJ;UAEA,IAAI,CAACA,aAAa,CAAC8P,IAAI,CAAC,CAAC;UACzB,IAAI,CAAC/P,WAAW,GAAG,KAAK;UACxB,IAAI,CAACmQ,eAAe,CAAC,CAAC;QAC1B,CAAC;QACDC,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,IAAI,CAACpQ,WAAW,EAAE;YAClB,IAAI,CAACiK,aAAa,CAAC,CAAC;UACxB,CAAC,MAAM;YACH,IAAI,CAACgE,cAAc,CAAC,CAAC;UACzB;QACJ,CAAC;QACDkC,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,CAAC,IAAI,CAAChQ,SAAS,EAAE;YACjB;UACJ;UAEA,IAAI,IAAI,CAACH,WAAW,EAAE;YAClB,IAAI,CAACG,SAAS,CAACmC,SAAS,CAACC,GAAG,CAAC,eAAe,CAAC;YAC7C,IAAI,CAACpC,SAAS,CAACxO,SAAS,GAAG,kCAAkC;UACjE,CAAC,MAAM;YACH,IAAI,CAACwO,SAAS,CAACmC,SAAS,CAACG,MAAM,CAAC,eAAe,CAAC;YAChD,IAAI,CAACtC,SAAS,CAACxO,SAAS,GAAG,wCAAwC;UACvE;QACJ,CAAC;QACDqc,aAAa,WAAbA,aAAaA,CAAC/J,SAAS,EAAE8J,aAAa,EAAEsC,gBAAgB,EAAE;UAAA,IAAAC,MAAA;UAEtD,IAAI,IAAI,CAACnR,MAAM,EAAE;YACb,IAAI,CAACA,MAAM,CAACoR,OAAO,CAAC,CAAC;YACrB,IAAI,CAACpR,MAAM,GAAG,IAAI;UACtB;UAEA,IAAI,CAACqR,gBAAgB,CAAC,CAAC;UACvB,IAAI,CAACC,mBAAmB,CAAC,CAAC;UAC1B,IAAI,CAACvR,UAAU,GAAG,IAAI;UAEtB,IAAIpJ,OAAO,GAAG,EAAE;UAChB,IAAIT,UAAU,GAAG,CAAC,CAAC;UACnB,IAAIqb,cAAc,GAAG,IAAI;;UAEzB;UACA,IAAIC,YAAY,GAAG,IAAI,CAACvR,QAAQ,CAACjU,MAAM;UACvC,IAAIylB,gBAAgB,GAAG,IAAI,CAAClM,YAAY,CAAC,CAAC;UAE1C,IAAI,CAACvF,MAAM,GAAG,IAAI,CAAC8J,UAAU,CAAC9J,MAAM,CAAC,aAAa,EAAE8E,SAAS,EAAE8J,aAAa,EAAE6C,gBAAgB,EAAEP,gBAAgB,CAAC,CAC5GQ,SAAS,CAAC;YACPziB,IAAI,EAAE,SAANA,IAAIA,CAAG0iB,KAAK,EAAK;cACb,IAAIvY,OAAO,GAAG+X,MAAI,CAAClR,QAAQ,CAACuR,YAAY,CAAC;cAEzC,IAAI,CAACpY,OAAO,EAAE;gBAEV,IAAIuY,KAAK,CAAC9M,SAAS,IAAI,CAAC4M,gBAAgB,EAAE;kBACtCN,MAAI,CAAChL,iBAAiB,CAACwL,KAAK,CAAC9M,SAAS,CAAC;gBAC3C;gBAEAsM,MAAI,CAAChF,mBAAmB,CAAC,CAAC;gBAC1B;gBACAqF,YAAY,GAAGL,MAAI,CAAClR,QAAQ,CAACjU,MAAM;gBACnC,IAAIqgB,UAAU,GAAG;kBACblB,EAAE,EAAEwG,KAAK,CAAC3G,SAAS;kBACnBtI,IAAI,EAAE,WAAW;kBACjBjN,KAAK,EAAEkc,KAAK,CAAClc,KAAK;kBAClBkB,OAAO,EAAE,EAAE;kBACX8C,WAAW,EAAE,EAAE;kBACfoG,WAAW,EAAE,IAAI;kBACjBoL,UAAU,EAAE;gBAChB,CAAC;gBAEDkG,MAAI,CAAClR,QAAQ,CAACtQ,IAAI,CAAC0c,UAAU,CAAC;gBAE9BjT,OAAO,GAAGiT,UAAU;cACxB;cAEA,IAAIsF,KAAK,CAAClc,KAAK,KAAK,CAAC2D,OAAO,CAAC3D,KAAK,IAAI2D,OAAO,CAAC3D,KAAK,KAAKkc,KAAK,CAAClc,KAAK,CAAC,EAAE;gBAClE2D,OAAO,CAAC3D,KAAK,GAAGkc,KAAK,CAAClc,KAAK;cAC/B;cAEA,IAAIkc,KAAK,CAACzb,UAAU,IAAItG,OAAA,CAAO+hB,KAAK,CAACzb,UAAU,MAAK,QAAQ,IAAI7K,MAAM,CAACyL,IAAI,CAAC6a,KAAK,CAACzb,UAAU,CAAC,CAAClK,MAAM,EAAE;gBAElG,SAAA4lB,GAAA,MAAAC,gBAAA,GAA2BxmB,MAAM,CAACgL,OAAO,CAACsb,KAAK,CAACzb,UAAU,CAAC,EAAA0b,GAAA,GAAAC,gBAAA,CAAA7lB,MAAA,EAAA4lB,GAAA,IAAE;kBAAA,IAAAE,oBAAA;kBAAxD,IAAAC,mBAAA,GAAA7iB,cAAA,CAAA2iB,gBAAA,CAAAD,GAAA;oBAAOpb,GAAG,GAAAub,mBAAA;oBAAE1lB,KAAK,GAAA0lB,mBAAA;kBAClB7b,UAAU,CAACM,GAAG,CAAC,IAAAsb,oBAAA,GAAGtd,kBAAkB,CAACnI,KAAK,CAAC,cAAAylB,oBAAA,cAAAA,oBAAA,GAAI,CAAC,CAAC;gBACrD;cACJ;cAEA,IAAIH,KAAK,CAAChb,OAAO,EAAE;gBAEf;gBACA;gBACA,IAAIgb,KAAK,CAACzF,UAAU,IAAIqF,cAAc,IAAII,KAAK,CAACzF,UAAU,KAAKqF,cAAc,EAAE;kBAC3E5a,OAAO,IAAI,MAAM;gBACrB;gBAEA,IAAIgb,KAAK,CAACzF,UAAU,EAAE;kBAClBqF,cAAc,GAAGI,KAAK,CAACzF,UAAU;gBACrC;gBAEJvV,OAAO,IAAIgb,KAAK,CAAChb,OAAO;cAC5B;;cAEI;cACAyC,OAAO,CAACC,UAAU,GAAG1C,OAAO;cAC5BwC,yBAAyB,CAACC,OAAO,EAAElD,UAAU,CAAC;cAE9Cib,MAAI,CAAClR,QAAQ,CAACuR,YAAY,CAAC,GAAGpY,OAAO;cAErC+X,MAAI,CAACzG,SAAS,CAAC,YAAM;gBACjB/N,qBAAqB,CAACvD,OAAO,CAAC;gBAC9B+X,MAAI,CAACxF,cAAc,CAAC,CAAC;cACzB,CAAC,CAAC;YACN,CAAC;YACDkF,QAAQ,EAAE,SAAVA,QAAQA,CAAA,EAAQ;cAAA,IAAAmB,aAAA;cACZb,MAAI,CAACc,iBAAiB,CAAC/b,UAAU,EAAEsb,YAAY,CAAC;cAChDL,MAAI,CAACe,iBAAiB,CAAC,CAAC;cAExB,IAAI1H,GAAG,GAAG2G,MAAI,CAAClR,QAAQ,CAACuR,YAAY,CAAC;cACrC,IAAIhH,GAAG,EAAE;gBACLA,GAAG,CAAC3K,WAAW,GAAG,KAAK;cAC3B;cAEA,IAAI,CAAC2K,GAAG,IAAI,CAACA,GAAG,CAAC7T,OAAO,EAAE;gBACtB;gBACAwa,MAAI,CAAChF,mBAAmB,CAAC,CAAC;cAC9B;;cAEA;cACA,IAAIgF,MAAI,CAACjP,kBAAkB,IAAIiP,MAAI,CAAChQ,mBAAmB,IAAIqJ,GAAG,IAAIA,GAAG,CAAC7T,OAAO,EAAE;gBAC3Ewa,MAAI,CAACgB,gBAAgB,CAAC3H,GAAG,CAAC7T,OAAO,CAAC;cACtC;cAEA,CAAAqb,aAAA,GAAAb,MAAI,CAACnR,MAAM,cAAAgS,aAAA,eAAXA,aAAA,CAAaZ,OAAO,CAAC,CAAC;cACtBD,MAAI,CAACnR,MAAM,GAAG,IAAI;YACtB,CAAC;YACD7B,KAAK,EAAE,SAAPA,KAAKA,CAAG9F,GAAG,EAAK;cAAA,IAAA+Z,cAAA;cACZjB,MAAI,CAACc,iBAAiB,CAAC/b,UAAU,EAAEsb,YAAY,CAAC;cAChDL,MAAI,CAACe,iBAAiB,CAAC,CAAC;cAExB,IAAI1H,GAAG,GAAG2G,MAAI,CAAClR,QAAQ,CAACuR,YAAY,CAAC;cACrC,IAAIhH,GAAG,EAAE;gBACLA,GAAG,CAAC3K,WAAW,GAAG,KAAK;cAC3B;cAEAsR,MAAI,CAAChF,mBAAmB,CAAC,CAAC;cAE1B,IAAI,CAACgF,MAAI,CAACrR,gBAAgB,EAAE;gBACxBqR,MAAI,CAAC1G,UAAU,CAAC0G,MAAI,CAACkB,qBAAqB,CAAC,CAAC,CAAC;cACjD;cAEA,CAAAD,cAAA,GAAAjB,MAAI,CAACnR,MAAM,cAAAoS,cAAA,eAAXA,cAAA,CAAahB,OAAO,CAAC,CAAC;cACtBD,MAAI,CAACnR,MAAM,GAAG,IAAI;cAElB5C,OAAO,CAACe,KAAK,CAAC,eAAe,EAAE9F,GAAG,CAAC;YACvC;UACJ,CAAC,CAAC;QACV,CAAC;QACDga,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;UACpB,IAAIhG,UAAU,GAAG;YACb3J,IAAI,EAAE,WAAW;YACjB/L,OAAO,EAAE,mGAAmG;YAC5G8C,WAAW,EAAE;UACjB,CAAC;UAED,OAAO4S,UAAU;QACrB,CAAC;QACD4F,iBAAiB,WAAjBA,iBAAiBA,CAAC/b,UAAU,EAAEsb,YAAY,EAAE;UAAA,IAAAc,MAAA;UACxCpc,UAAU,GAAGD,mBAAmB,CAACC,UAAU,CAAC;UAE5C,IAAI7K,MAAM,CAACyL,IAAI,CAACZ,UAAU,CAAC,CAAClK,MAAM,EAAE;YAAA,IAAAumB,MAAA,EAAAC,oBAAA;YAEhC,IAAIpZ,OAAO,GAAG,IAAI,CAAC6G,QAAQ,CAACuR,YAAY,CAAC;YACzCpY,OAAO,CAACC,UAAU,IAAAkZ,MAAA,IAAAC,oBAAA,GAAGpZ,OAAO,CAACC,UAAU,cAAAmZ,oBAAA,cAAAA,oBAAA,GAAIpZ,OAAO,CAACzC,OAAO,cAAA4b,MAAA,cAAAA,MAAA,GAAI,EAAE;YAChEpZ,yBAAyB,CAACC,OAAO,EAAElD,UAAU,CAAC;YAE9C,IAAI,CAAC+J,QAAQ,CAACuR,YAAY,CAAC,GAAGpY,OAAO;YAErC,IAAI,CAACsR,SAAS,CAAC,YAAM;cACjB/N,qBAAqB,CAACvD,OAAO,CAAC;cAC9BkZ,MAAI,CAAC3G,cAAc,CAAC,CAAC;YACzB,CAAC,CAAC;UACN;QACJ,CAAC;QACD0F,gBAAgB,WAAhBA,gBAAgBA,CAAA,EAAG;UACf,IAAIoB,QAAQ,GAAG,IAAI,CAAChT,aAAa,CAAC8I,YAAY,CAAC,gBAAgB,CAAC;UAEhE,IAAIkK,QAAQ,EAAE;YACV,IAAI,CAAChT,aAAa,CAACsI,eAAe,CAACtJ,SAAS,CAACC,QAAQ,CAAC+T,QAAQ,EAAE;cAAEzK,mBAAmB,EAAE;YAAK,CAAC,CAAC,CAAC;UACnG;UAEA,IAAI,IAAI,CAACxI,YAAY,EAAE;YACnB,IAAI,CAACA,YAAY,CAACkT,YAAY,CAAC,UAAU,EAAE,UAAU,CAAC;UAC1D;QACJ,CAAC;QACDR,iBAAiB,WAAjBA,iBAAiBA,CAAA,EAAG;UAChB,IAAIS,SAAS,GAAG,IAAI,CAAClT,aAAa,CAAC8I,YAAY,CAAC,iBAAiB,CAAC;UAElE,IAAIoK,SAAS,EAAE;YACX,IAAI,CAAClT,aAAa,CAACsI,eAAe,CAACtJ,SAAS,CAACC,QAAQ,CAACiU,SAAS,EAAE;cAAE3K,mBAAmB,EAAE;YAAK,CAAC,CAAC,CAAC;UACpG;UAEA,IAAI,IAAI,CAACxI,YAAY,EAAE;YACnB,IAAI,CAACA,YAAY,CAACoT,eAAe,CAAC,UAAU,CAAC;YAC7C,IAAI,CAACpT,YAAY,CAACqT,KAAK,CAAC,CAAC;UAC7B;;UAEA;UACA,IAAI,IAAI,CAACnT,aAAa,EAAE;YACpB,IAAIoT,KAAK,GAAG,IAAI,CAACpT,aAAa,CAACwI,gBAAgB,CAAC,oBAAoB,CAAC;YACrE,KAAK,IAAIld,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8nB,KAAK,CAAC9mB,MAAM,EAAEhB,CAAC,EAAE,EAAE;cACnC8nB,KAAK,CAAC9nB,CAAC,CAAC,CAACmY,SAAS,CAACG,MAAM,CAAC,mBAAmB,CAAC;cAC9CwP,KAAK,CAAC9nB,CAAC,CAAC,CAACmY,SAAS,CAACC,GAAG,CAAC,aAAa,CAAC;YACzC;UACJ;;UAEA;UACA,KAAK,IAAIpY,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACiV,QAAQ,CAACjU,MAAM,EAAEhB,CAAC,EAAE,EAAE;YAC3C,IAAI,IAAI,CAACiV,QAAQ,CAACjV,CAAC,CAAC,CAAC6U,WAAW,EAAE;cAC9B,IAAI,CAACI,QAAQ,CAACjV,CAAC,CAAC,CAAC6U,WAAW,GAAG,KAAK;YACxC;UACJ;QACJ,CAAC;QACDkT,qBAAqB,WAArBA,qBAAqBA,CAACvoB,CAAC,EAAE;UAAA,IAAAwoB,SAAA;UACrB,IAAI,CAAAxoB,CAAC,aAADA,CAAC,gBAAAwoB,SAAA,GAADxoB,CAAC,CAAEqe,MAAM,cAAAmK,SAAA,uBAATA,SAAA,CAAWC,QAAQ,MAAK,IAAI,CAACpR,aAAa,EAAE;YAC5C;UACJ;UAEA,IAAI,CAACkK,SAAS,CAAC,KAAK,CAAC;QACzB,CAAC;QACDmH,wBAAwB,WAAxBA,wBAAwBA,CAAA,EAAG;UAAA,IAAAC,MAAA;UACvB,IAAI,CAAC,IAAI,CAACzT,aAAa,EAAE;YACrB;UACJ;UAEA,IAAI0T,OAAO,GAAG,IAAI,CAAC1T,aAAa,CAACwI,gBAAgB,CAAC,0BAA0B,CAAC;UAE7EkL,OAAO,CAAC3f,OAAO,CAAC,UAAA4f,MAAM,EAAI;YACtB,IAAIC,WAAW,GAAGtf,MAAM,CAACqf,MAAM,CAAC9K,YAAY,CAAC,wBAAwB,CAAC,CAAC;YACvE,IAAIgL,SAAS,GAAGD,WAAW,KAAKH,MAAI,CAACxR,sBAAsB;YAE3D0R,MAAM,CAAClQ,SAAS,CAACqQ,MAAM,CAAC,aAAa,EAAED,SAAS,CAAC;YACjDF,MAAM,CAACX,YAAY,CAAC,OAAO,EAAEa,SAAS,GAAG,aAAa,GAAG,YAAY,CAAC;UAC1E,CAAC,CAAC;QACN,CAAC;QACDpB,gBAAgB,WAAhBA,gBAAgBA,CAAChgB,IAAI,EAAEshB,UAAU,EAAE;UAAA,IAAAC,MAAA;UAC/B,IAAI,CAAC,IAAI,CAACvS,mBAAmB,IAAI,CAAChP,IAAI,IAAI,CAAC,IAAI,CAAC2X,UAAU,EAAE;YACxD;UACJ;UAEA,IAAI,CAACzI,WAAW,GAAG,EAAE;UACrB,IAAI,CAACE,cAAc,GAAG,IAAI;UAC1B,IAAI,CAACoS,cAAc,GAAGF,UAAU,KAAKjY,SAAS,GAAGiY,UAAU,GAAG,CAAC,CAAC;UAEhE,IAAI,CAAC3J,UAAU,CAAC8J,MAAM,CAAC,kBAAkB,EAAE,IAAI,CAACpO,YAAY,CAAC,CAAC,EAAE,IAAI,CAACD,YAAY,CAAC,CAAC,EAAEpT,IAAI,EAAE,IAAI,CAACiP,YAAY,CAAC,SACnG,CAAC,UAAA/I,GAAG,EAAI;YACV+E,OAAO,CAACe,KAAK,CAAC,sBAAsB,EAAE9F,GAAG,CAAC;YAC1Cqb,MAAI,CAACnS,cAAc,GAAG,KAAK;YAC3BmS,MAAI,CAAC/R,sBAAsB,GAAG,CAAC,CAAC;YAChC+R,MAAI,CAACC,cAAc,GAAG,CAAC,CAAC;YACxBD,MAAI,CAAChJ,SAAS,CAAC;cAAA,OAAMgJ,MAAI,CAACR,wBAAwB,CAAC,CAAC;YAAA,EAAC;UACzD,CAAC,CAAC;QACV,CAAC;QACDW,gBAAgB,WAAhBA,gBAAgBA,CAACza,OAAO,EAAE9D,KAAK,EAAE;UAAA,IAAAwe,OAAA;UAC7B,IAAI,IAAI,CAACnS,sBAAsB,KAAKrM,KAAK,EAAE;YACvC,IAAI,CAACyW,SAAS,CAAC,CAAC;YAChB;UACJ;UAEA,IAAI,CAACA,SAAS,CAAC,KAAK,CAAC;UACrBlc,MAAM,CAACgc,aAAa,CAAC,IAAI8B,WAAW,CAAC,4BAA4B,EAAE;YAC/D9E,MAAM,EAAE;cAAEoK,QAAQ,EAAE,IAAI,CAACpR;YAAc;UAC3C,CAAC,CAAC,CAAC;UACH,IAAI,CAACF,sBAAsB,GAAGrM,KAAK;UACnC,IAAI,CAACoV,SAAS,CAAC;YAAA,OAAMoJ,OAAI,CAACZ,wBAAwB,CAAC,CAAC;UAAA,EAAC;UAErD,IAAI,IAAI,CAACtR,aAAa,CAACtM,KAAK,CAAC,EAAE;YAC3B,IAAI,CAACye,aAAa,CAAC,IAAI,CAACnS,aAAa,CAACtM,KAAK,CAAC,CAAC;YAC7C;UACJ;UAEA,IAAI,CAAC6c,gBAAgB,CAAC/Y,OAAO,CAACzC,OAAO,EAAErB,KAAK,CAAC;QACjD,CAAC;QACDsX,kBAAkB,WAAlBA,kBAAkBA,CAAA,EAAG;UAAA,IAAAoH,OAAA;UACjB,IAAI,IAAI,CAAC3S,WAAW,CAACrV,MAAM,KAAK,CAAC,EAAE;YAC/B,IAAI,CAAC,IAAI,CAACwV,mBAAmB,IAAI,IAAI,CAACF,cAAc,CAACtV,MAAM,KAAK,CAAC,EAAE;cAC/D,IAAI,CAACuV,cAAc,GAAG,KAAK;cAC3B,IAAI,CAACI,sBAAsB,GAAG,CAAC,CAAC;cAChC,IAAI,CAAC+I,SAAS,CAAC;gBAAA,OAAMsJ,OAAI,CAACd,wBAAwB,CAAC,CAAC;cAAA,EAAC;YACzD;YACA;UACJ;UAEA,IAAMe,WAAW,GAAG,IAAI,CAAC5S,WAAW,CAAC+O,MAAM,CAAC,UAAC8D,GAAG,EAAEvC,KAAK;YAAA,OAAKuC,GAAG,GAAGvC,KAAK,CAAC3lB,MAAM;UAAA,GAAE,CAAC,CAAC;UAClF,IAAMmoB,QAAQ,GAAG,IAAIzH,UAAU,CAACuH,WAAW,CAAC;UAC5C,IAAIG,MAAM,GAAG,CAAC;UAAC,IAAAC,UAAA,GAAAxlB,0BAAA,CACK,IAAI,CAACwS,WAAW;YAAAiT,MAAA;UAAA;YAApC,KAAAD,UAAA,CAAArlB,CAAA,MAAAslB,MAAA,GAAAD,UAAA,CAAAzpB,CAAA,IAAAwB,IAAA,GAAsC;cAAA,IAA3BulB,KAAK,GAAA2C,MAAA,CAAAjoB,KAAA;cACZ8nB,QAAQ,CAACI,GAAG,CAAC5C,KAAK,EAAEyC,MAAM,CAAC;cAC3BA,MAAM,IAAIzC,KAAK,CAAC3lB,MAAM;YAC1B;UAAC,SAAAqM,GAAA;YAAAgc,UAAA,CAAA7pB,CAAA,CAAA6N,GAAA;UAAA;YAAAgc,UAAA,CAAA7oB,CAAA;UAAA;UACD,IAAI,CAAC6V,WAAW,GAAG,EAAE;UAErB,IAAMmT,IAAI,GAAG,IAAIC,IAAI,CAAC,CAACN,QAAQ,CAAC,EAAE;YAAEtY,IAAI,EAAE;UAAY,CAAC,CAAC;UAExD,IAAI,IAAI,CAAC8X,cAAc,IAAI,CAAC,EAAE;YAC1B,IAAI,CAAC/R,aAAa,CAAC,IAAI,CAAC+R,cAAc,CAAC,GAAGa,IAAI;YAC9C,IAAI,CAACb,cAAc,GAAG,CAAC,CAAC;UAC5B;;UAEA;UACA,IAAI,IAAI,CAACnS,mBAAmB,EAAE;YAC1B,IAAI,CAACF,cAAc,CAAC3R,IAAI,CAAC6kB,IAAI,CAAC;YAC9B;UACJ;UAEA,IAAI,CAACT,aAAa,CAACS,IAAI,CAAC;QAC5B,CAAC;QACDT,aAAa,WAAbA,aAAaA,CAACS,IAAI,EAAE;UAAA,IAAAE,OAAA;UAChB,IAAM3iB,GAAG,GAAG4iB,GAAG,CAACC,eAAe,CAACJ,IAAI,CAAC;UACrC,IAAMrF,KAAK,GAAG,IAAI0F,KAAK,CAAC9iB,GAAG,CAAC;UAE5B,IAAI,CAAC0P,eAAe,GAAG1P,GAAG;UAC1B,IAAI,CAACyP,mBAAmB,GAAG2N,KAAK;UAChC,IAAI,CAAC5N,cAAc,GAAG,IAAI;UAE1B4N,KAAK,CAAC/G,gBAAgB,CAAC,OAAO,EAAE,YAAM;YAClCsM,OAAI,CAAClT,mBAAmB,GAAG,IAAI;YAC/BkT,OAAI,CAACjT,eAAe,GAAG,IAAI;YAC3BkT,GAAG,CAACG,eAAe,CAAC/iB,GAAG,CAAC;YACxB2iB,OAAI,CAACK,eAAe,CAAC,CAAC;UAC1B,CAAC,CAAC;UAEF5F,KAAK,CAAC/G,gBAAgB,CAAC,OAAO,EAAE,YAAM;YAClCsM,OAAI,CAAClT,mBAAmB,GAAG,IAAI;YAC/BkT,OAAI,CAACjT,eAAe,GAAG,IAAI;YAC3BkT,GAAG,CAACG,eAAe,CAAC/iB,GAAG,CAAC;YACxB2iB,OAAI,CAACK,eAAe,CAAC,CAAC;UAC1B,CAAC,CAAC;UAEF5F,KAAK,CAAC6F,IAAI,CAAC,CAAC,SAAM,CAAC,UAAA3c,GAAG,EAAI;YACtB+E,OAAO,CAACe,KAAK,CAAC,uBAAuB,EAAE9F,GAAG,CAAC;YAC3Cqc,OAAI,CAAClT,mBAAmB,GAAG,IAAI;YAC/BkT,OAAI,CAACjT,eAAe,GAAG,IAAI;YAC3BkT,GAAG,CAACG,eAAe,CAAC/iB,GAAG,CAAC;YACxB2iB,OAAI,CAACpT,cAAc,GAAG,EAAE;YACxBoT,OAAI,CAACnT,cAAc,GAAG,KAAK;YAC3BmT,OAAI,CAAC/S,sBAAsB,GAAG,CAAC,CAAC;YAChC+S,OAAI,CAAChK,SAAS,CAAC;cAAA,OAAMgK,OAAI,CAACxB,wBAAwB,CAAC,CAAC;YAAA,EAAC;UACzD,CAAC,CAAC;QACN,CAAC;QACD6B,eAAe,WAAfA,eAAeA,CAAA,EAAG;UAAA,IAAAE,OAAA;UACd,IAAI,IAAI,CAAC3T,cAAc,CAACtV,MAAM,GAAG,CAAC,EAAE;YAChC,IAAIkpB,QAAQ,GAAG,IAAI,CAAC5T,cAAc,CAAC6T,KAAK,CAAC,CAAC;YAC1C,IAAI,CAACpB,aAAa,CAACmB,QAAQ,CAAC;UAChC,CAAC,MAAM;YACH,IAAI,CAAC3T,cAAc,GAAG,KAAK;YAC3B,IAAI,CAACI,sBAAsB,GAAG,CAAC,CAAC;YAChC,IAAI,CAAC+I,SAAS,CAAC;cAAA,OAAMuK,OAAI,CAAC/B,wBAAwB,CAAC,CAAC;YAAA,EAAC;YACrD,IAAI,CAACkC,4BAA4B,CAAC,CAAC;UACvC;QACJ,CAAC;QACDrJ,SAAS,WAATA,SAASA,CAAA,EAAG;UAAA,IAAAsJ,OAAA;UACR,IAAI,IAAI,CAAC7T,mBAAmB,EAAE;YAC1B,IAAI,CAACA,mBAAmB,CAAC8T,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC9T,mBAAmB,CAAC+T,WAAW,GAAG,CAAC;YACxC,IAAI,CAAC/T,mBAAmB,GAAG,IAAI;UACnC;UACA,IAAI,IAAI,CAACC,eAAe,EAAE;YACtBkT,GAAG,CAACG,eAAe,CAAC,IAAI,CAACrT,eAAe,CAAC;YACzC,IAAI,CAACA,eAAe,GAAG,IAAI;UAC/B;UACA,IAAI,CAACJ,WAAW,GAAG,EAAE;UACrB,IAAI,CAACC,cAAc,GAAG,EAAE;UACxB,IAAI,CAACC,cAAc,GAAG,KAAK;UAC3B,IAAI,CAACI,sBAAsB,GAAG,CAAC,CAAC;UAChC,IAAI,CAAC+I,SAAS,CAAC;YAAA,OAAM2K,OAAI,CAACnC,wBAAwB,CAAC,CAAC;UAAA,EAAC;QACzD,CAAC;QACDsC,sBAAsB,WAAtBA,sBAAsBA,CAAA,EAAG;UACrB,IAAI,IAAI,CAACtT,kBAAkB,EAAE;YACzB,IAAI,CAACuT,oBAAoB,CAAC,CAAC;UAC/B,CAAC,MAAM;YACH,IAAI,CAACC,qBAAqB,CAAC,CAAC;UAChC;QACJ,CAAC;QACDA,qBAAqB,WAArBA,qBAAqBA,CAAA,EAAG;UAAA,IAAAC,OAAA;UACpB,IAAI,CAAC,IAAI,CAAC3T,uBAAuB,IAAI,IAAI,CAACE,kBAAkB,IAAI,CAAC,IAAI,CAAC4H,UAAU,EAAE;YAC9E;UACJ;UAEA,IAAI,CAAC5H,kBAAkB,GAAG,IAAI;UAC9B,IAAI,CAAC0T,wBAAwB,CAAC,CAAC;UAC/B,IAAI,CAACvK,8BAA8B,GAAG,EAAE;UACxC,IAAI,CAACW,6BAA6B,GAAG,IAAI;UACzC,IAAI,CAACR,2BAA2B,GAAG,IAAI;;UAEvC;UACA,IAAI,CAACyB,kBAAkB,CAAC,oBAAoB,CAAC;UAC7C+B,SAAS,CAACC,YAAY,CAACC,YAAY,CAAC;YAAEC,KAAK,EAAE;cAAEC,gBAAgB,EAAE,IAAI;cAAEC,gBAAgB,EAAE,IAAI;cAAEC,eAAe,EAAE;YAAK;UAAE,CAAC,CAAC,CACpH9hB,IAAI,CAAC,UAAAwS,MAAM,EAAI;YACZ,IAAIuP,QAAQ,GAAGC,aAAa,CAACC,eAAe,CAAC,uBAAuB,CAAC,GAC/D,uBAAuB,GACvBD,aAAa,CAACC,eAAe,CAAC,wBAAwB,CAAC,GACnD,wBAAwB,GACxB,YAAY;YAEtBkG,OAAI,CAAC7U,aAAa,GAAG,IAAI0O,aAAa,CAACxP,MAAM,EAAE;cAC3CuP,QAAQ,EAAEA,QAAQ;cAClBG,kBAAkB,EAAE;YACxB,CAAC,CAAC;YAEFiG,OAAI,CAACE,oBAAoB,GAAG,IAAI9L,OAAO,CAAC6F,OAAO,CAAC,CAAC;YACjD+F,OAAI,CAACG,mBAAmB,GAAG9V,MAAM;;YAEjC;YACA;YACA;YACA;YACA;YACA,IAAI+V,QAAQ,GAAGlmB,MAAM,CAACmmB,YAAY,IAAInmB,MAAM,CAAComB,kBAAkB;YAC/D,IAAIF,QAAQ,EAAE;cACVJ,OAAI,CAACO,qBAAqB,GAAG,IAAIH,QAAQ,CAAC,CAAC;cAC3CJ,OAAI,CAACQ,qBAAqB,GAAGR,OAAI,CAACO,qBAAqB,CAACE,cAAc,CAAC,CAAC;cACxET,OAAI,CAACQ,qBAAqB,CAACE,OAAO,GAAG,GAAG;cACxC,IAAIC,SAAS,GAAGX,OAAI,CAACO,qBAAqB,CAACK,uBAAuB,CAACvW,MAAM,CAAC;cAC1EsW,SAAS,CAACE,OAAO,CAACb,OAAI,CAACQ,qBAAqB,CAAC;YACjD;YAEA,IAAItG,YAAY,GAAGviB,OAAO,CAACC,OAAO,CAAC,CAAC;YACpC,IAAIkpB,QAAQ,GAAGd,OAAI,CAACQ,qBAAqB;YACzC,IAAIO,wBAAwB,GAAG,EAAE;YAEjCf,OAAI,CAAC7U,aAAa,CAACsH,gBAAgB,CAAC,eAAe,EAAE,UAAC5d,CAAC,EAAK;cACxD,IAAIA,CAAC,CAACsP,IAAI,IAAItP,CAAC,CAACsP,IAAI,CAACgW,IAAI,GAAG,CAAC,EAAE;gBAC3B;gBACA;gBACA,IAAI6F,OAAI,CAACpU,cAAc,IAAIkV,QAAQ,EAAE;kBACjC,IAAIE,QAAQ,GAAG,IAAIjK,UAAU,CAAC+J,QAAQ,CAACG,iBAAiB,CAAC;kBACzDH,QAAQ,CAACI,oBAAoB,CAACF,QAAQ,CAAC;kBACvC,IAAIzC,GAAG,GAAG,CAAC;kBACX,KAAK,IAAI4C,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,QAAQ,CAAC3qB,MAAM,EAAE8qB,CAAC,EAAE,EAAE;oBAAE5C,GAAG,IAAIyC,QAAQ,CAACG,CAAC,CAAC;kBAAE;kBAChE,IAAIC,GAAG,GAAG7C,GAAG,GAAGyC,QAAQ,CAAC3qB,MAAM;kBAE/B,IAAI+qB,GAAG,IAAIL,wBAAwB,EAAE;oBACjC;oBACAf,OAAI,CAAC5J,SAAS,CAAC,CAAC;kBACpB;gBACJ;;gBAEA;gBACA;gBACA;gBACA8D,YAAY,GAAGA,YAAY,CAACriB,IAAI,cAAAC,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAAkqB,SAAA;kBAAA,IAAAld,IAAA,EAAAkW,UAAA,EAAAxD,YAAA,EAAAyD,MAAA;kBAAA,OAAArjB,YAAA,GAAAC,CAAA,WAAAoqB,SAAA;oBAAA,kBAAAA,SAAA,CAAArsB,CAAA;sBAAA;wBAAAqsB,SAAA,CAAArsB,CAAA;wBAAA,OACZJ,CAAC,CAACsP,IAAI,CAACqW,WAAW,CAAC,CAAC;sBAAA;wBAAjCrW,IAAI,GAAAmd,SAAA,CAAArrB,CAAA;wBACJokB,UAAU,GAAG,IAAItD,UAAU,CAAC5S,IAAI,CAAC;wBACjC0S,YAAY,GAAGwD,UAAU,CAACI,MAAM,CAAC,UAAUC,GAAG,EAAEC,MAAI,EAAE;0BAAE,OAAOD,GAAG,GAAGE,MAAM,CAACC,YAAY,CAACF,MAAI,CAAC;wBAAE,CAAC,EAAE,EAAE,CAAC;wBACtGL,MAAM,GAAGQ,IAAI,CAACjE,YAAY,CAAC;wBAC/B,IAAI;0BACAmJ,OAAI,CAACE,oBAAoB,CAAC5mB,IAAI,CAACghB,MAAM,CAAC;wBAC1C,CAAC,CAAC,OAAO5X,GAAG,EAAE;0BACV;wBAAA;sBACH;wBAAA,OAAA4e,SAAA,CAAAprB,CAAA;oBAAA;kBAAA,GAAAmrB,QAAA;gBAAA,CACJ,GAAC;cACN;YACJ,CAAC,CAAC;YAEFrB,OAAI,CAAC7U,aAAa,CAACsH,gBAAgB,CAAC,MAAM,EAAE,YAAM;cAC9CpI,MAAM,CAAC0Q,SAAS,CAAC,CAAC,CAACjd,OAAO,CAAC,UAAAkd,KAAK;gBAAA,OAAIA,KAAK,CAACC,IAAI,CAAC,CAAC;cAAA,EAAC;cACjDf,YAAY,CAACriB,IAAI,CAAC,YAAM;gBACpB,IAAI;kBACAmoB,OAAI,CAACE,oBAAoB,CAAChF,QAAQ,CAAC,CAAC;gBACxC,CAAC,CAAC,OAAOxY,GAAG,EAAE;kBACV;gBAAA;cAER,CAAC,CAAC;YACN,CAAC,CAAC;YAEF,IAAIyM,SAAS,GAAG6Q,OAAI,CAACnQ,YAAY,CAAC,CAAC;YACnC,IAAIX,SAAS,GAAG8Q,OAAI,CAACpQ,YAAY,CAAC,CAAC,IAAI,EAAE;YACzC,IAAIjL,QAAQ,GAAG0U,SAAS,CAAC1U,QAAQ,IAAIjI,QAAQ,CAACye,eAAe,CAAC7W,IAAI,IAAI,OAAO;YAE7E0b,OAAI,CAAC7L,UAAU,CAACiH,IAAI,CAAC,mBAAmB,EAAEjM,SAAS,EAAED,SAAS,EAAE8Q,OAAI,CAACE,oBAAoB,EAAEtG,QAAQ,EAAEjV,QAAQ,CAAC;YAC9Gqb,OAAI,CAAC7U,aAAa,CAACxF,KAAK,CAAC,GAAG,CAAC;YAC7Bqa,OAAI,CAAC9U,WAAW,GAAG,IAAI;UAC3B,CAAC,CAAC,SACI,CAAC,UAAAxI,GAAG,EAAI;YACV+E,OAAO,CAACe,KAAK,CAAC,2BAA2B,EAAE9F,GAAG,CAAC;YAC/Csd,OAAI,CAACzT,kBAAkB,GAAG,KAAK;YAC/ByT,OAAI,CAACC,wBAAwB,CAAC,CAAC;UACnC,CAAC,CAAC;QACV,CAAC;QACDH,oBAAoB,WAApBA,oBAAoBA,CAAA,EAAG;UACnB,IAAI,CAAC,IAAI,CAACvT,kBAAkB,EAAE;YAC1B;UACJ;UAEA,IAAI,CAACA,kBAAkB,GAAG,KAAK;UAC/B,IAAI,CAAC0T,wBAAwB,CAAC,CAAC;;UAE/B;UACA,IAAI,IAAI,CAAC9L,UAAU,EAAE;YACjB,IAAI,CAACA,UAAU,CAAC8J,MAAM,CAAC,kBAAkB,CAAC,SAAM,CAAC,YAAY,CAAE,CAAC,CAAC;UACrE;UAEA,IAAI,IAAI,CAAC/S,WAAW,IAAI,IAAI,CAACC,aAAa,EAAE;YACxC,IAAI,CAACA,aAAa,CAAC8P,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC/P,WAAW,GAAG,KAAK;UAC5B;UAEA,IAAI,CAACkL,SAAS,CAAC,CAAC;UAChB,IAAI,CAACV,8BAA8B,GAAG,EAAE;UACxC,IAAI,CAACG,2BAA2B,GAAG,IAAI;;UAEvC;UACA,IAAI,IAAI,CAAC0K,qBAAqB,EAAE;YAC5B,IAAI,CAACA,qBAAqB,CAACgB,KAAK,CAAC,CAAC,SAAM,CAAC,YAAY,CAAE,CAAC,CAAC;YACzD,IAAI,CAAChB,qBAAqB,GAAG,IAAI;YACjC,IAAI,CAACC,qBAAqB,GAAG,IAAI;UACrC;;UAEA;UACA,IAAI,IAAI,CAACnK,6BAA6B,EAAE;YACpC,IAAIxB,GAAG,GAAG,IAAI,CAACvK,QAAQ,CAAC,IAAI,CAAC+L,6BAA6B,CAAC1W,KAAK,CAAC;YACjE,IAAIkV,GAAG,EAAE;cACLA,GAAG,CAAC3K,WAAW,GAAG,KAAK;YAC3B;YACA,IAAI,CAACmM,6BAA6B,GAAG,IAAI;UAC7C;;UAEA;UACA,KAAK,IAAIhhB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAACiV,QAAQ,CAACjU,MAAM,EAAEhB,CAAC,EAAE,EAAE;YAC3C,IAAI,IAAI,CAACiV,QAAQ,CAACjV,CAAC,CAAC,CAAC6U,WAAW,EAAE;cAC9B,IAAI,CAACI,QAAQ,CAACjV,CAAC,CAAC,CAAC6U,WAAW,GAAG,KAAK;YACxC;UACJ;;UAEA;UACA,IAAI,CAACiN,mBAAmB,CAAC;YACrBjR,IAAI,EAAE,oBAAoB;YAC1BlF,OAAO,EAAE,qBAAqB;YAC9BqS,IAAI,EAAE,0BAA0B;YAChCmO,WAAW,EAAE,IAAI;YACjBC,aAAa,EAAE;UACnB,CAAC,CAAC;QACN,CAAC;QACDxB,wBAAwB,WAAxBA,wBAAwBA,CAAA,EAAG;UACvB,IAAI,CAAC,IAAI,CAAC3T,kBAAkB,EAAE;YAC1B;UACJ;UAEA,IAAI,IAAI,CAACC,kBAAkB,EAAE;YACzB,IAAI,CAACD,kBAAkB,CAACkB,SAAS,CAACC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC;YAC9D,IAAI,CAACnB,kBAAkB,CAACkB,SAAS,CAACG,MAAM,CAAC,UAAU,EAAE,kBAAkB,EAAE,uBAAuB,CAAC;YACjG,IAAI,CAACrB,kBAAkB,CAACxM,KAAK,GAAG,IAAI,CAACwM,kBAAkB,CAACsG,YAAY,CAAC,gBAAgB,CAAC,IAAI,kBAAkB;YAC5G,IAAI8O,OAAO,GAAG,IAAI,CAACpV,kBAAkB,CAACsG,YAAY,CAAC,eAAe,CAAC;YACnE,IAAI8O,OAAO,EAAE;cACT,IAAI,CAACpV,kBAAkB,CAAC8F,eAAe,CAACtJ,SAAS,CAACC,QAAQ,CAAC2Y,OAAO,EAAE;gBAAErP,mBAAmB,EAAE;cAAK,CAAC,CAAC,CAAC;YACvG;UACJ,CAAC,MAAM;YACH,IAAI,CAAC/F,kBAAkB,CAACkB,SAAS,CAACG,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;YACjE,IAAI,CAACrB,kBAAkB,CAACkB,SAAS,CAACG,MAAM,CAAC,UAAU,EAAE,uBAAuB,CAAC;YAC7E,IAAI,CAACrB,kBAAkB,CAACkB,SAAS,CAACC,GAAG,CAAC,kBAAkB,CAAC;YACzD,IAAI,CAACnB,kBAAkB,CAACqV,IAAI,CAAC,CAAC;YAC9B,IAAI,CAACrV,kBAAkB,CAACxM,KAAK,GAAG,IAAI,CAACwM,kBAAkB,CAACsG,YAAY,CAAC,kBAAkB,CAAC,IAAI,oBAAoB;YAChH,IAAIgP,SAAS,GAAG,IAAI,CAACtV,kBAAkB,CAACsG,YAAY,CAAC,iBAAiB,CAAC;YACvE,IAAIgP,SAAS,EAAE;cACX,IAAI,CAACtV,kBAAkB,CAAC8F,eAAe,CAACtJ,SAAS,CAACC,QAAQ,CAAC6Y,SAAS,EAAE;gBAAEvP,mBAAmB,EAAE;cAAK,CAAC,CAAC,CAAC;YACzG;UACJ;QACJ,CAAC;QACDwP,0BAA0B,WAA1BA,0BAA0BA,CAAA,EAAG;UACzB;QAAA,CACH;QACDpC,4BAA4B,WAA5BA,4BAA4BA,CAAA,EAAG;UAC3B;UACA;UACA;QAAA,CACH;QACDqC,cAAc,WAAdA,cAAcA,CAACC,OAAO,EAAE;UACpB,IAAI,CAACA,OAAO,EAAE;YACVta,OAAO,CAACe,KAAK,CAAC,mCAAmC,CAAC;YAElD;UACJ;UAEA,IAAIwZ,iBAAiB,GAAGD,OAAO,CAACnP,YAAY,CAAC,iBAAiB,CAAC;UAC/D,IAAI1D,SAAS,GAAG,IAAI,CAACU,YAAY,CAAC,CAAC;UACnC,IAAI2L,gBAAgB,GAAG,IAAI,CAAC1L,YAAY,CAAC,CAAC;UAE1C,IAAI,CAACmS,iBAAiB,IAAI,CAAC9S,SAAS,EAAE;YAElCzH,OAAO,CAACe,KAAK,CAAC,kFAAkF,CAAC;YACjG;UACJ;;UAEA;UACA,IAAI,CAAC0Q,aAAa,CAAC8I,iBAAiB,EAAE,IAAI,EAAEzG,gBAAgB,CAAC;QACjE,CAAC;QACD0G,gBAAgB,WAAhBA,gBAAgBA,CAACC,OAAO,EAAEC,KAAK,EAAEzrB,KAAK,EAAE;UAEpC,IAAM0rB,OAAO,GAAGF,OAAO,CAAC7hB,WAAW,CAAC,CAAC,CAAC4S,UAAU,CAAC,MAAM,CAAC,GAAGiP,OAAO,GAAGhoB,MAAM,CAACmoB,QAAQ,CAACC,MAAM,GAAGJ,OAAO;UACrG,IAAM9lB,GAAG,GAAG,IAAI4iB,GAAG,CAACoD,OAAO,CAAC;UAE5BhmB,GAAG,CAACmmB,YAAY,CAAC3D,GAAG,CAACuD,KAAK,EAAEzrB,KAAK,CAAC;UAElC,OAAO0F,GAAG,CAACzC,QAAQ,CAAC,CAAC;QACzB,CAAC;QACDgiB,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;UAClB,IAAI,CAAC7G,UAAU,CAAC;YACZ/H,IAAI,EAAE,WAAW;YACjBjJ,WAAW,EAAE0C,MAAM,CAACtK;UACxB,CAAC,CAAC;QACN,CAAC;QACDsa,mBAAmB,WAAnBA,mBAAmBA,CAAA,EAAG;UAClB,IAAMgM,cAAc,GAAG,IAAI,CAAClY,QAAQ,CAACjU,MAAM;UAC3C,IAAI,CAACiU,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAAChJ,MAAM,CAAC,UAAAuT,GAAG;YAAA,OAAIA,GAAG,CAAC9H,IAAI,KAAK,WAAW;UAAA,EAAC;UACrE,IAAM0V,YAAY,GAAGD,cAAc,GAAG,IAAI,CAAClY,QAAQ,CAACjU,MAAM;UAC1D,OAAOosB,YAAY;QACvB,CAAC;QACDtL,mBAAmB,WAAnBA,mBAAmBA,CAACD,YAAY,EAAE;UAAA,IAAAwL,OAAA;UAC9B,IAAI,CAACxL,YAAY,IAAI,CAACA,YAAY,CAAChR,IAAI,EAAE;YACrC;UACJ;UACA,IAAI,CAACyc,wBAAwB,CAACzL,YAAY,CAAChR,IAAI,CAAC;UAChD,IAAI0c,aAAa,GAAG,IAAI,CAACrY,aAAa,CAACsY,SAAS,CAAC,UAAA5tB,CAAC;YAAA,OAAIA,CAAC,CAACiR,IAAI,KAAKgR,YAAY,CAAChR,IAAI;UAAA,EAAC;UACnF,IAAI0c,aAAa,IAAI,CAAC,EAAE;YACpB,IAAI,CAACrY,aAAa,CAACmH,MAAM,CAACkR,aAAa,EAAE,CAAC,EAAE1L,YAAY,CAAC;UAC7D,CAAC,MAAM;YACH,IAAI,CAAC3M,aAAa,CAACvQ,IAAI,CAACkd,YAAY,CAAC;UACzC;UACA,IAAI,CAAC4L,2BAA2B,CAAC5L,YAAY,CAAC;UAC9C,IAAI,CAACnC,SAAS,CAAC,YAAM;YACjB2N,OAAI,CAAC1M,cAAc,CAAC,CAAC;UACzB,CAAC,CAAC;QACN,CAAC;QACDoB,kBAAkB,WAAlBA,kBAAkBA,CAACF,YAAY,EAAE;UAC7B,IAAI,CAACA,YAAY,IAAI,CAACA,YAAY,CAAChR,IAAI,EAAE;YACrC;UACJ;UACA,IAAI,CAACyc,wBAAwB,CAACzL,YAAY,CAAChR,IAAI,CAAC;UAChD,IAAI0c,aAAa,GAAG,IAAI,CAACrY,aAAa,CAACsY,SAAS,CAAC,UAAA5tB,CAAC;YAAA,OAAIA,CAAC,CAACiR,IAAI,KAAKgR,YAAY,CAAChR,IAAI;UAAA,EAAC;UACnF,IAAI0c,aAAa,IAAI,CAAC,EAAE;YACpB,IAAI,CAACrY,aAAa,CAACmH,MAAM,CAACkR,aAAa,EAAE,CAAC,EAAE1L,YAAY,CAAC;YACzD,IAAI,CAAC4L,2BAA2B,CAAC5L,YAAY,CAAC;UAClD;QACJ,CAAC;QACD4L,2BAA2B,WAA3BA,2BAA2BA,CAAC5L,YAAY,EAAE;UAAA,IAAA6L,OAAA;UACtC,IAAI,CAAC7L,YAAY,IAAI,CAACA,YAAY,CAAChR,IAAI,IAAI,CAACgR,YAAY,CAACuK,aAAa,IAAIvK,YAAY,CAACuK,aAAa,IAAI,CAAC,EAAE;YACvG;UACJ;UACA,IAAI,CAACjV,yBAAyB,CAAC0K,YAAY,CAAChR,IAAI,CAAC,GAAG8c,UAAU,CAAC,YAAM;YACjED,OAAI,CAACzL,kBAAkB,CAACJ,YAAY,CAAChR,IAAI,CAAC;UAC9C,CAAC,EAAEgR,YAAY,CAACuK,aAAa,CAAC;QAClC,CAAC;QACDkB,wBAAwB,WAAxBA,wBAAwBA,CAACtL,gBAAgB,EAAE;UACvC,IAAI4L,OAAO,GAAG,IAAI,CAACzW,yBAAyB,CAAC6K,gBAAgB,CAAC;UAC9D,IAAI,CAAC4L,OAAO,EAAE;YACV;UACJ;UACAC,YAAY,CAACD,OAAO,CAAC;UACrB,OAAO,IAAI,CAACzW,yBAAyB,CAAC6K,gBAAgB,CAAC;QAC3D,CAAC;QACDC,kBAAkB,WAAlBA,kBAAkBA,CAACD,gBAAgB,EAAE;UACjC,IAAI,CAACsL,wBAAwB,CAACtL,gBAAgB,CAAC;UAC/C,IAAI,CAAC9M,aAAa,GAAG,IAAI,CAACA,aAAa,CAACjJ,MAAM,CAAC,UAAArM,CAAC;YAAA,OAAIA,CAAC,CAACiR,IAAI,KAAKmR,gBAAgB;UAAA,EAAC;QACpF,CAAC;QACD8L,mBAAmB,WAAnBA,mBAAmBA,CAAC9L,gBAAgB,EAAE;UAClC,IAAI,CAACC,kBAAkB,CAACD,gBAAgB,CAAC;QAC7C,CAAC;QACD+L,wBAAwB,WAAxBA,wBAAwBA,CAAC/L,gBAAgB,EAAEgM,UAAU,EAAE;UACnD,IAAI,CAAC,IAAI,CAAClP,UAAU,EAAE;YAClB;UACJ;UACA,IAAIjF,SAAS,GAAG,IAAI,CAACU,YAAY,CAAC,CAAC;UACnC,IAAI,CAACuE,UAAU,CAAC8J,MAAM,CAAC,0BAA0B,EAAE/O,SAAS,EAAEmI,gBAAgB,EAAEgM,UAAU,CAAC,SAAM,CAAC,UAAU3gB,GAAG,EAAE;YAC7G+E,OAAO,CAACe,KAAK,CAAC,qCAAqC,EAAE9F,GAAG,CAAC;UAC7D,CAAC,CAAC;QACN,CAAC;QACDsT,cAAc,WAAdA,cAAcA,CAAA,EAAG;UAAA,IAAAsN,OAAA;UACb,IAAI,CAAC,IAAI,CAAClZ,UAAU,EAAE;YAClB;UACJ;UACA4Y,UAAU,CAAC,YAAM;YACbM,OAAI,CAACvZ,aAAa,CAACwZ,SAAS,GAAGD,OAAI,CAACvZ,aAAa,CAACyZ,YAAY,GAAGF,OAAI,CAACvZ,aAAa,CAAC0Z,YAAY;UACpG,CAAC,EAAE,EAAE,CAAC;QACV,CAAC;QACDC,eAAe,WAAfA,eAAeA,CAAC3K,KAAK,EAAE;UACnB,IAAI,CAACvO,MAAM,GAAGuO,KAAK,CAAC3K,MAAM,CAAC1X,KAAK;QACpC,CAAC;QACDmZ,YAAY,WAAZA,YAAYA,CAAA,EAAG;UACX,OAAO,IAAI,CAAChG,YAAY,GAClB,IAAI,CAACA,YAAY,CAAC+I,YAAY,CAAC,iBAAiB,CAAC,GACjD,IAAI;QACd,CAAC;QACD+Q,YAAY,WAAZA,YAAYA,CAACzU,SAAS,EAAE;UACpB,IAAI,CAAC,IAAI,CAACrF,YAAY,EAAE;YACpB;UACJ;UAEA,IAAI,CAACA,YAAY,CAACkT,YAAY,CAAC,iBAAiB,EAAE7N,SAAS,IAAI,EAAE,CAAC;QACtE,CAAC;QACD0U,YAAY,WAAZA,YAAYA,CAAA,EAAG;UACX,IAAI,CAACzO,aAAa,CAAC,CAAC;UACpB,IAAI,CAAC0O,2BAA2B,CAAC,oBAAoB,CAAC;UACtD,IAAI,CAACF,YAAY,CAAC,EAAE,CAAC;UACrB,IAAI,CAAC3Z,gBAAgB,GAAG,KAAK;UAC7B,IAAI,CAAC8Z,aAAa,GAAG,IAAI;UACzB,IAAI,CAACxZ,QAAQ,GAAG,EAAE;UAClB,IAAI,CAACG,SAAS,GAAG,EAAE;UACnB,IAAI,CAACjE,MAAM,CAACkR,iBAAiB,EAAE;YAC3B,IAAI,CAACW,eAAe,CAAC,CAAC;UAC1B;UAEA,IAAI7R,MAAM,CAACkR,iBAAiB,EAAE;YAC1B,IAAI,CAACC,eAAe,CAAC,CAAC;UAC1B;UAEA,IAAItO,cAAc,IAAI,OAAOA,cAAc,CAAC0a,cAAc,KAAK,UAAU,EAAE;YACvE1a,cAAc,CAAC0a,cAAc,CAAC,IAAI,EAAEvd,MAAM,CAAC;UAC/C;QACJ,CAAC;QACDmR,eAAe,WAAfA,eAAeA,CAAA,EAAG;UACd,IAAI,CAAC,IAAI,CAACY,6BAA6B,CAAC,CAAC,EAAE;YACvC;UACJ;UAEA,IAAMpJ,SAAS,GAAG,IAAI,CAACU,YAAY,CAAC,CAAC;UACrC,IAAI,CAACV,SAAS,IAAI,CAAC,IAAI,CAACgF,UAAU,EAAE;YAChC;UACJ;UAEA,IAAI,CAAC6P,iBAAiB,CAAC7U,SAAS,CAAC,SAAM,CAAC,UAAAzM,GAAG;YAAA,OAAI+E,OAAO,CAACe,KAAK,CAAC9F,GAAG,CAAC;UAAA,EAAC;QACtE,CAAC;QACKoN,yBAAyB,WAAzBA,yBAAyBA,CAACX,SAAS,EAAE;UAAA,IAAA8U,OAAA;UAAA,OAAAnsB,iBAAA,cAAAb,YAAA,GAAAE,CAAA,UAAA+sB,SAAA;YAAA,IAAAhV,SAAA;YAAA,OAAAjY,YAAA,GAAAC,CAAA,WAAAitB,SAAA;cAAA,kBAAAA,SAAA,CAAAlvB,CAAA;gBAAA;kBACnCia,SAAS,GAAG+U,OAAI,CAACrU,YAAY,CAAC,CAAC;kBAAA,KAC/BV,SAAS;oBAAAiV,SAAA,CAAAlvB,CAAA;oBAAA;kBAAA;kBAAA,OAAAkvB,SAAA,CAAAjuB,CAAA,IACFgZ,SAAS;gBAAA;kBAAA,MAGhB,CAACC,SAAS,IAAI,CAAC8U,OAAI,CAAC9P,UAAU;oBAAAgQ,SAAA,CAAAlvB,CAAA;oBAAA;kBAAA;kBAAA,OAAAkvB,SAAA,CAAAjuB,CAAA,IACvB,IAAI;gBAAA;kBAAAiuB,SAAA,CAAAlvB,CAAA;kBAAA,OAGFgvB,OAAI,CAACD,iBAAiB,CAAC7U,SAAS,CAAC;gBAAA;kBAAA,OAAAgV,SAAA,CAAAjuB,CAAA,IAAAiuB,SAAA,CAAAluB,CAAA;cAAA;YAAA,GAAAiuB,QAAA;UAAA;QAClD,CAAC;QACDF,iBAAiB,WAAjBA,iBAAiBA,CAAC7U,SAAS,EAAE;UAAA,IAAAiV,OAAA;UACzB,IAAI,IAAI,CAAC3X,qBAAqB,EAAE;YAC5B,OAAO,IAAI,CAACA,qBAAqB;UACrC;UAEA,IAAI,CAAC0C,SAAS,IAAI,CAAC,IAAI,CAACgF,UAAU,EAAE;YAChC,OAAOxc,OAAO,CAACC,OAAO,CAAC,IAAI,CAAC;UAChC;UAEA,IAAI,CAAC6U,qBAAqB,GAAG,IAAI9U,OAAO,CAAC,UAACC,OAAO,EAAEysB,MAAM,EAAK;YAC1DD,OAAI,CAAC1X,sBAAsB,GAAG9U,OAAO;YACrCwsB,OAAI,CAACzX,sBAAsB,GAAG0X,MAAM;YACpCD,OAAI,CAACxX,uBAAuB,GAAG1S,MAAM,CAAC8oB,UAAU,CAAC,YAAM;cACnDoB,OAAI,CAACP,2BAA2B,CAAC,0CAA0C,CAAC;YAChF,CAAC,EAAE,KAAK,CAAC;UACb,CAAC,CAAC;UAEF,IAAI,CAAC1P,UAAU,CAAC8J,MAAM,CAAC,cAAc,EAAE9O,SAAS,EAAE,IAAI,CAAC,SAAM,CAAC,UAAAzM,GAAG,EAAI;YACjE0hB,OAAI,CAACP,2BAA2B,CAACnhB,GAAG,CAAC;UACzC,CAAC,CAAC;UAEF,OAAO,IAAI,CAAC+J,qBAAqB;QACrC,CAAC;QACD6X,4BAA4B,WAA5BA,4BAA4BA,CAACpV,SAAS,EAAE;UACpC,IAAI,IAAI,CAACxC,sBAAsB,EAAE;YAC7B,IAAI,CAACA,sBAAsB,CAACwC,SAAS,CAAC;UAC1C;UAEA,IAAI,CAACqV,0BAA0B,CAAC,CAAC;QACrC,CAAC;QACDV,2BAA2B,WAA3BA,2BAA2BA,CAACrb,KAAK,EAAE;UAC/B,IAAI,IAAI,CAACmE,sBAAsB,EAAE;YAC7B,IAAI,CAACA,sBAAsB,CAACnE,KAAK,CAAC;UACtC;UAEA,IAAI,CAAC+b,0BAA0B,CAAC,CAAC;QACrC,CAAC;QACDA,0BAA0B,WAA1BA,0BAA0BA,CAAA,EAAG;UACzB,IAAI,IAAI,CAAC3X,uBAAuB,EAAE;YAC9B1S,MAAM,CAACgpB,YAAY,CAAC,IAAI,CAACtW,uBAAuB,CAAC;UACrD;UAEA,IAAI,CAACH,qBAAqB,GAAG,IAAI;UACjC,IAAI,CAACC,sBAAsB,GAAG,IAAI;UAClC,IAAI,CAACC,sBAAsB,GAAG,IAAI;UAClC,IAAI,CAACC,uBAAuB,GAAG,IAAI;QACvC,CAAC;QACD4X,aAAa,WAAbA,aAAaA,CAAA,EAAG;UAAA,IAAAC,OAAA;UACZ,IAAI,CAAC5a,YAAY,GAAGnN,QAAQ,CAACS,aAAa,CAACqJ,MAAM,CAACkD,oBAAoB,CAAC;UACvE,IAAI,CAACI,aAAa,GAAGpN,QAAQ,CAACS,aAAa,CAACqJ,MAAM,CAACmD,yBAAyB,CAAC;UAC7E,IAAI,CAACI,aAAa,GAAGrN,QAAQ,CAACS,aAAa,CAACqJ,MAAM,CAACiD,4BAA4B,CAAC;UAChF,IAAI,CAACrH,WAAW,GAAG1F,QAAQ,CAACS,aAAa,CAACqJ,MAAM,CAACke,0BAA0B,CAAC;UAE5E,IAAI,CAAC,IAAI,CAAC7a,YAAY,IAAI,CAAC,IAAI,CAACC,aAAa,IAAI,CAAC,IAAI,CAACC,aAAa,IAAI,CAAC,IAAI,CAAC3H,WAAW,EAAE;YACvFqF,OAAO,CAACe,KAAK,CAAC,wFAAwF,EAAE;cACpGkB,oBAAoB,EAAElD,MAAM,CAACkD,oBAAoB;cACjDC,yBAAyB,EAAEnD,MAAM,CAACmD,yBAAyB;cAC3DF,4BAA4B,EAAEjD,MAAM,CAACiD,4BAA4B;cACjEib,0BAA0B,EAAEle,MAAM,CAACke;YACvC,CAAC,CAAC;YAEF,OAAO,KAAK;UAChB;UAEA,IAAI,CAACnM,6BAA6B,CAAC,CAAC;UAEpC,IAAMrJ,SAAS,GAAG,IAAI,CAACU,YAAY,CAAC,CAAC;UACrC,IAAI,CAACxG,eAAe,IAAI8F,SAAS,EAAE;YAC/B,IAAI,CAACyV,WAAW,CAACzV,SAAS,CAAC;UAC/B,CAAC,MAAM,IAAI,IAAI,CAACoJ,uBAAuB,CAAC,CAAC,IAAI9R,MAAM,CAACkR,iBAAiB,IAAI,CAACtO,eAAe,IAAI,CAAC8F,SAAS,EAAE;YACrG,IAAI,CAACyI,eAAe,CAAC,CAAC;UAC1B;;UAEA;UACA,IAAInR,MAAM,CAAC2G,uBAAuB,IAAI3G,MAAM,CAACoe,mBAAmB,EAAE;YAC9D,IAAI,CAAC5Z,WAAW,GAAGtO,QAAQ,CAACS,aAAa,CAACqJ,MAAM,CAACoe,mBAAmB,CAAC;YACrE,IAAI,IAAI,CAAC5Z,WAAW,EAAE;cAClB,IAAI,CAACgF,iBAAiB,CAAC,CAAC;;cAExB;cACA,IAAI/B,SAAS,GAAGvR,QAAQ,CAACC,aAAa,CAAC,OAAO,CAAC;cAC/CsR,SAAS,CAAC/H,IAAI,GAAG,MAAM;cACvB+H,SAAS,CAACuH,EAAE,GAAG,mBAAmB;cAClCvH,SAAS,CAAC4W,SAAS,GAAG,QAAQ;cAC9B5W,SAAS,CAAC6W,QAAQ,GAAG,IAAI;cACzB,IAAIte,MAAM,CAACue,iBAAiB,EAAE;gBAC1B9W,SAAS,CAAC+W,MAAM,GAAGxe,MAAM,CAACue,iBAAiB;cAC/C;cACA9W,SAAS,CAACwE,gBAAgB,CAAC,QAAQ,EAAE,UAAC5d,CAAC;gBAAA,OAAK4vB,OAAI,CAACtW,qBAAqB,CAACtZ,CAAC,CAAC;cAAA,EAAC;cAC1E,IAAI,CAACmW,WAAW,CAACia,aAAa,CAACC,WAAW,CAACjX,SAAS,CAAC;;cAErD;cACA,IAAIX,SAAS,GAAG,IAAI,CAACzD,YAAY,GAAG,IAAI,CAACA,YAAY,CAAC0D,OAAO,CAAC,wCAAwC,CAAC,GAAG,IAAI;cAC9G,IAAID,SAAS,EAAE;gBACXA,SAAS,CAACmF,gBAAgB,CAAC,UAAU,EAAE,UAAC5d,CAAC;kBAAA,OAAK4vB,OAAI,CAACvX,cAAc,CAACrY,CAAC,CAAC;gBAAA,EAAC;gBACrEyY,SAAS,CAACmF,gBAAgB,CAAC,WAAW,EAAE,UAAC5d,CAAC;kBAAA,OAAK4vB,OAAI,CAAC/W,eAAe,CAAC7Y,CAAC,CAAC;gBAAA,EAAC;gBACvEyY,SAAS,CAACmF,gBAAgB,CAAC,MAAM,EAAE,UAAC5d,CAAC;kBAAA,OAAK4vB,OAAI,CAAC7W,UAAU,CAAC/Y,CAAC,CAAC;gBAAA,EAAC;cACjE;YACJ;UACJ;;UAEA;UACA,IAAI,CAACkV,aAAa,CAAC0I,gBAAgB,CAAC,QAAQ,EAAE,YAAM;YAChD,IAAI,CAACgS,OAAI,CAACpa,MAAM,EAAE;cACd;YACJ;YACA,IAAM8a,SAAS,GAAG,EAAE;YACpB,IAAMC,QAAQ,GAAGX,OAAI,CAAC1a,aAAa,CAACyZ,YAAY,GAAGiB,OAAI,CAAC1a,aAAa,CAAC0Z,YAAY,GAAGgB,OAAI,CAAC1a,aAAa,CAACwZ,SAAS,IAAI4B,SAAS;YAC9HV,OAAI,CAACra,UAAU,GAAGgb,QAAQ;UAC9B,CAAC,CAAC;UAEF,IAAI,CAACvb,YAAY,CAAC4I,gBAAgB,CAAC,SAAS,EAAE,UAAAsG,KAAK,EAAI;YAEnD,IAAI0L,OAAI,CAACpa,MAAM,IAAI,IAAI,EAAE;cACrB;YACJ;YAEA,IAAI0O,KAAK,CAAClY,GAAG,KAAK,OAAO,IAAI,CAACkY,KAAK,CAACsM,QAAQ,EAAE;cAC1CtM,KAAK,CAAC3L,cAAc,CAAC,CAAC;cACtBqX,OAAI,CAAC3a,aAAa,CAACoE,KAAK,CAAC,CAAC;YAC9B;UACJ,CAAC,CAAC;UAEF,IAAI,CAACrE,YAAY,CAAC4I,gBAAgB,CAAC,OAAO,EAAE,UAAC5d,CAAC,EAAK;YAC/C4vB,OAAI,CAACf,eAAe,CAAC7uB,CAAC,CAAC;YAEvB,IAAIA,CAAC,CAACuZ,MAAM,CAAC1X,KAAK,CAAC4F,IAAI,CAAC,CAAC,EAAE;cACvBmoB,OAAI,CAAC3a,aAAa,CAACmT,eAAe,CAAC,UAAU,CAAC;YAClD,CAAC,MAAM;cACHwH,OAAI,CAAC3a,aAAa,CAACiT,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;YACrD;UACJ,CAAC,CAAC;UAEF,IAAI,CAACjT,aAAa,CAAC2I,gBAAgB,CAAC,OAAO,EAAE,YAAM;YAE/C,IAAIgS,OAAI,CAACpa,MAAM,IAAI,IAAI,EAAE;cACrBoa,OAAI,CAACpa,MAAM,CAACoR,OAAO,CAAC,CAAC;cACrBgJ,OAAI,CAACpa,MAAM,GAAG,IAAI;cAElBoa,OAAI,CAAClI,iBAAiB,CAAC,CAAC;cACxBkI,OAAI,CAACjO,mBAAmB,CAAC,CAAC;;cAE1B;cACA,IAAIiO,OAAI,CAACna,QAAQ,CAACjU,MAAM,GAAG,CAAC,EAAE;gBAC1B,IAAMivB,OAAO,GAAGb,OAAI,CAACna,QAAQ,CAACma,OAAI,CAACna,QAAQ,CAACjU,MAAM,GAAG,CAAC,CAAC;gBACvD,IAAIivB,OAAO,CAACvY,IAAI,KAAK,WAAW,IAAI,CAACuY,OAAO,CAACtkB,OAAO,EAAE;kBAClDyjB,OAAI,CAACna,QAAQ,CAACib,GAAG,CAAC,CAAC;gBACvB,CAAC,MAAM,IAAID,OAAO,CAACpb,WAAW,EAAE;kBAC5Bob,OAAO,CAACpb,WAAW,GAAG,KAAK;gBAC/B;cACJ;cAEA;YACJ;YAEAua,OAAI,CAACvP,WAAW,CAAC,CAAC;UACtB,CAAC,CAAC;UAEF,IAAMsQ,gBAAgB,GAAG9oB,QAAQ,CAAC+oB,sBAAsB,CAAC,0BAA0B,CAAC;UAEpF,KAAK,IAAIpwB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmwB,gBAAgB,CAACnvB,MAAM,EAAEhB,CAAC,EAAE,EAAE;YAC9CmwB,gBAAgB,CAACnwB,CAAC,CAAC,CAACod,gBAAgB,CAAC,OAAO,EAAE,UAAC5d,CAAC,EAAK;cACjDA,CAAC,CAACuY,cAAc,CAAC,CAAC;cAClBqX,OAAI,CAAC3C,cAAc,CAACjtB,CAAC,CAACuZ,MAAM,CAAC;YACjC,CAAC,CAAC;UACN;UAEA,IAAMsX,YAAY,GAAGhpB,QAAQ,CAAC+oB,sBAAsB,CAAC,2BAA2B,CAAC;UAEjF,KAAK,IAAIpwB,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGqwB,YAAY,CAACrvB,MAAM,EAAEhB,CAAC,EAAE,EAAE;YAC1CqwB,YAAY,CAACrwB,CAAC,CAAC,CAACod,gBAAgB,CAAC,OAAO,EAAE,UAAC5d,CAAC,EAAK;cAC7CA,CAAC,CAACuY,cAAc,CAAC,CAAC;cAElB,IAAI8B,SAAS,GAAGra,CAAC,CAACuZ,MAAM,CAACwE,YAAY,CAAC,iBAAiB,CAAC;cAExD,IAAI,CAAC1D,SAAS,EAAE;gBACZzH,OAAO,CAACe,KAAK,CAAC,kFAAkF,CAAC;gBAEjG;cACJ;cAEAic,OAAI,CAACE,WAAW,CAACzV,SAAS,CAAC;cAC3BuV,OAAI,CAACkB,cAAc,CAAC,CAAC;YACzB,CAAC,CAAC;UACN;UAEA,KAAK,IAAItwB,GAAC,GAAG,CAAC,EAAEA,GAAC,GAAGmR,MAAM,CAAC8D,QAAQ,CAACjU,MAAM,EAAEhB,GAAC,EAAE,EAAE;YAC7C,IAAI,CAACyf,UAAU,CAACtO,MAAM,CAAC8D,QAAQ,CAACjV,GAAC,CAAC,CAAC;UACvC;;UAEA;UACA,IAAI,CAAC0f,SAAS,CAAC,YAAM;YACjB0P,OAAI,CAACzP,uBAAuB,CAAC,CAAC;UAClC,CAAC,CAAC;;UAEF;UACA,IAAI,IAAI,CAACjL,aAAa,EAAE;YACpB,IAAI,CAACA,aAAa,CAAC0I,gBAAgB,CAAC,OAAO,EAAE,UAAC5d,CAAC,EAAK;cAChD,IAAI+wB,GAAG,GAAG/wB,CAAC,CAACuZ,MAAM,CAACb,OAAO,CAAC,mBAAmB,CAAC;cAC/C,IAAI,CAACqY,GAAG,EAAE;gBACN;cACJ;cAEA,IAAIC,KAAK,GAAGD,GAAG,CAACrY,OAAO,CAAC,gBAAgB,CAAC,IAAIqY,GAAG,CAACrY,OAAO,CAAC,KAAK,CAAC;cAC/D,IAAI,CAACsY,KAAK,EAAE;gBACR;cACJ;cAEA,IAAIC,MAAM,GAAGD,KAAK,CAAC1oB,aAAa,CAAC,MAAM,CAAC;cACxC,IAAI2oB,MAAM,EAAE;gBACRzM,SAAS,CAAC0M,SAAS,CAACC,SAAS,CAACF,MAAM,CAAClpB,WAAW,CAAC;gBACjD,IAAIqpB,UAAU,GAAGzf,MAAM,CAACzL,cAAc,IAAI,SAAS;gBACnD6qB,GAAG,CAAC/oB,SAAS,GAAG,oCAAoC,GAAGopB,UAAU;gBACjEjD,UAAU,CAAC,YAAM;kBACb4C,GAAG,CAAC/oB,SAAS,GAAG,oCAAoC;gBACxD,CAAC,EAAE,IAAI,CAAC;cACZ;YACJ,CAAC,CAAC;UACN;;UAEA;UACA,IAAI,IAAI,CAACyO,mBAAmB,IAAI9E,MAAM,CAAC0f,wBAAwB,EAAE;YAC7D,IAAI,CAAC7a,SAAS,GAAG3O,QAAQ,CAACS,aAAa,CAACqJ,MAAM,CAAC0f,wBAAwB,CAAC;YACxE,IAAI,IAAI,CAAC7a,SAAS,EAAE;cAChB,IAAI,CAACA,SAAS,CAACuN,KAAK,CAACC,OAAO,GAAG,EAAE;cACjC,IAAI,CAACxN,SAAS,CAACoH,gBAAgB,CAAC,OAAO,EAAE,YAAM;gBAC3CgS,OAAI,CAACnJ,eAAe,CAAC,CAAC;cAC1B,CAAC,CAAC;YACN;UACJ;;UAEA;UACA,IAAI,IAAI,CAACjP,uBAAuB,IAAI7F,MAAM,CAAC2f,iCAAiC,EAAE;YAC1E,IAAI,CAAC7Z,kBAAkB,GAAG5P,QAAQ,CAACS,aAAa,CAACqJ,MAAM,CAAC2f,iCAAiC,CAAC;YAC1F,IAAI,IAAI,CAAC7Z,kBAAkB,EAAE;cACzB,IAAI,CAACA,kBAAkB,CAACmG,gBAAgB,CAAC,OAAO,EAAE,YAAM;gBACpDgS,OAAI,CAAC5E,sBAAsB,CAAC,CAAC;cACjC,CAAC,CAAC;YACN;UACJ;UAEA,OAAO,IAAI;QACf,CAAC;QACD8E,WAAW,WAAXA,WAAWA,CAACzV,SAAS,EAAE;UACnB,IAAI,CAACiF,UAAU,CAAC8J,MAAM,CAAC,aAAa,EAAE/O,SAAS,CAAC,SAAM,CAAC,UAAAxM,GAAG;YAAA,OAAI+E,OAAO,CAACe,KAAK,CAAC9F,GAAG,CAAC;UAAA,EAAC;QACrF,CAAC;QACDiO,oBAAoB,WAApBA,oBAAoBA,CAAA,EAAG;UAEnB,IAAIzB,SAAS,GAAG,IAAI,CAACU,YAAY,CAAC,CAAC;UACnC,IAAIV,SAAS,EAAE;YACX,IAAI,CAACyV,WAAW,CAACzV,SAAS,CAAC;UAC/B;QACJ,CAAC;QACDsB,iBAAiB,WAAjBA,iBAAiBA,CAACtB,SAAS,EAAEkX,KAAK,EAAE;UAChC,IAAI,IAAI,CAACpc,gBAAgB,IAAI,CAACoc,KAAK,EAAE;YACjC,IAAIlX,SAAS,IAAI,IAAI,CAACU,YAAY,CAAC,CAAC,KAAKV,SAAS,EAAE;cAChD,IAAI,CAACoV,4BAA4B,CAACpV,SAAS,CAAC;YAChD;YAEA;UACJ;UACA,IAAI,CAAC6I,SAAS,CAAC,IAAIC,WAAW,CAAC,+BAA+B,EAAE;YAAE9E,MAAM,EAAE;cAAEhE,SAAS,EAAEA;YAAU;UAAE,CAAC,CAAC,CAAC;UACtG,IAAI,CAACyU,YAAY,CAACzU,SAAS,CAAC;UAC5B,IAAI,CAAClF,gBAAgB,GAAG,IAAI;UAC5B,IAAI,CAACsa,4BAA4B,CAACpV,SAAS,CAAC;UAE5C,IAAI7F,cAAc,IAAI,OAAOA,cAAc,CAACgd,oBAAoB,KAAK,UAAU,EAAE;YAC7Ehd,cAAc,CAACgd,oBAAoB,CAAC,IAAI,EAAEnX,SAAS,EAAE1I,MAAM,CAAC;UAChE;QACJ,CAAC;QACDoJ,YAAY,WAAZA,YAAYA,CAAA,EAAG;UACX,IAAIV,SAAS,GAAG,IAAI,CAACrF,YAAY,GAC3B,IAAI,CAACA,YAAY,CAAC+I,YAAY,CAAC,iBAAiB,CAAC,GACjD,IAAI;UAEV,IAAI,CAAC1D,SAAS,IAAI7F,cAAc,IAAI,OAAOA,cAAc,CAACid,gBAAgB,KAAK,UAAU,EAAE;YACvFpX,SAAS,GAAG7F,cAAc,CAACid,gBAAgB,CAAC,IAAI,EAAE9f,MAAM,CAAC;UAC7D;UAEA,OAAO0I,SAAS;QACpB,CAAC;QACDqX,YAAY,WAAZA,YAAYA,CAAC9iB,OAAO,EAAE;UAAA,IAAA+iB,MAAA,EAAAC,oBAAA;UAClB,IAAMjqB,IAAI,GAAGiH,OAAO,IAAIxJ,OAAA,CAAOwJ,OAAO,MAAK,QAAQ,IAAA+iB,MAAA,IAAAC,oBAAA,GAC7ChjB,OAAO,CAACP,WAAW,cAAAujB,oBAAA,cAAAA,oBAAA,GAAIhjB,OAAO,CAACzC,OAAO,cAAAwlB,MAAA,cAAAA,MAAA,GAAI,EAAE,GAC5C/iB,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,EAAE;UAEnB4V,SAAS,CAAC0M,SAAS,CAACC,SAAS,CAACxpB,IAAI,CAAC;QACvC,CAAC;QACDkqB,mBAAmB,WAAnBA,mBAAmBA,CAACC,SAAS,EAAErR,UAAU,EAAE;UACvC,IAAI,CAACqR,SAAS,EAAE;YACZ;UACJ;UAEA,IAAIC,KAAK,GAAGD,SAAS,CAACxpB,aAAa,CAAC,cAAc,CAAC;UACnD,IAAI0pB,OAAO,GAAGF,SAAS,CAACxpB,aAAa,CAAC,gBAAgB,CAAC;;UAEvD;UACA;UACA,IAAIypB,KAAK,EAAE;YACP,IAAIE,OAAO,GAAGxR,UAAU,KAAK,IAAI,GAAG,uBAAuB,GAAG,yBAAyB;YACvF,IAAIyR,MAAM,GAAGrqB,QAAQ,CAACC,aAAa,CAAC,MAAM,CAAC;YAC3CoqB,MAAM,CAAClC,SAAS,GAAGiC,OAAO;YAC1BC,MAAM,CAACnO,KAAK,CAACoO,QAAQ,GAAG,QAAQ;YAChCJ,KAAK,CAAChqB,WAAW,GAAG,EAAE;YACtBgqB,KAAK,CAAC1B,WAAW,CAAC6B,MAAM,CAAC;UAC7B;UAEA,IAAIF,OAAO,EAAE;YACT,IAAII,SAAS,GAAG3R,UAAU,KAAK,KAAK,GAAG,yBAAyB,GAAG,2BAA2B;YAC9F,IAAI4R,QAAQ,GAAGxqB,QAAQ,CAACC,aAAa,CAAC,MAAM,CAAC;YAC7CuqB,QAAQ,CAACrC,SAAS,GAAGoC,SAAS;YAC9BC,QAAQ,CAACtO,KAAK,CAACoO,QAAQ,GAAG,QAAQ;YAClCH,OAAO,CAACjqB,WAAW,GAAG,EAAE;YACxBiqB,OAAO,CAAC3B,WAAW,CAACgC,QAAQ,CAAC;UACjC;QACJ,CAAC;QACDlS,uBAAuB,WAAvBA,uBAAuBA,CAAA,EAAG;UACtB,IAAImS,UAAU,GAAG,IAAI,CAACC,GAAG,CAAC7U,gBAAgB,CAAC,qCAAqC,CAAC;UAEjF,KAAK,IAAIld,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG8xB,UAAU,CAAC9wB,MAAM,EAAEhB,CAAC,EAAE,EAAE;YACxC,IAAIgyB,KAAK,GAAGF,UAAU,CAAC9xB,CAAC,CAAC,CAACud,YAAY,CAAC,iBAAiB,CAAC;YACzD,IAAIiC,GAAG,GAAG,IAAI,CAACvK,QAAQ,CAACiL,IAAI,CAAC,UAAApe,CAAC;cAAA,OAAIA,CAAC,CAACqe,EAAE,KAAK6R,KAAK;YAAA,EAAC;YAEjD,IAAIxS,GAAG,EAAE;cACL,IAAI,CAAC6R,mBAAmB,CAACS,UAAU,CAAC9xB,CAAC,CAAC,EAAEwf,GAAG,CAACS,UAAU,CAAC;YAC3D;UACJ;QACJ,CAAC;QACDgS,WAAW,WAAXA,WAAWA,CAAC7jB,OAAO,EAAE8jB,UAAU,EAAExO,KAAK,EAAE;UACpC,IAAI7J,SAAS,GAAG,IAAI,CAACU,YAAY,CAAC,CAAC;UAEnC,IAAI,CAACV,SAAS,IAAI,CAACzL,OAAO,CAAC+R,EAAE,IAAI,CAAC,IAAI,CAACrB,UAAU,EAAE;YAC/C;UACJ;;UAEA;UACA,IAAIqT,SAAS,GAAG/jB,OAAO,CAAC6R,UAAU,KAAKiS,UAAU,GAAG,IAAI,GAAGA,UAAU;UACrE9jB,OAAO,CAAC6R,UAAU,GAAGkS,SAAS;;UAE9B;UACA,IAAIC,iBAAiB,GAAG,IAAI,CAACL,GAAG,CAACjqB,aAAa,CAC1C,uDAAuD,GAAGsG,OAAO,CAAC+R,EAAE,GAAG,IAC3E,CAAC;UAED,IAAI,CAACkR,mBAAmB,CAACe,iBAAiB,EAAED,SAAS,CAAC;;UAEtD;UACA,IAAIA,SAAS,KAAK,IAAI,IAAIC,iBAAiB,EAAE;YACzCzE,UAAU,CAAC,YAAM;cACb,IAAI0E,QAAQ,GAAGH,UAAU,GAAG,cAAc,GAAG,gBAAgB;cAC7D,IAAI3B,GAAG,GAAG6B,iBAAiB,CAACtqB,aAAa,CAACuqB,QAAQ,CAAC;cAEnD,IAAI9B,GAAG,EAAE;gBACLA,GAAG,CAACpY,SAAS,CAACG,MAAM,CAAC,cAAc,CAAC;gBACpC,KAAKiY,GAAG,CAAC+B,WAAW;gBACpB/B,GAAG,CAACpY,SAAS,CAACC,GAAG,CAAC,cAAc,CAAC;gBACjCmY,GAAG,CAACnT,gBAAgB,CAAC,cAAc,EAAE,SAASmV,KAAKA,CAAA,EAAG;kBAClDhC,GAAG,CAACiC,mBAAmB,CAAC,cAAc,EAAED,KAAK,CAAC;kBAC9ChC,GAAG,CAACpY,SAAS,CAACG,MAAM,CAAC,cAAc,CAAC;gBACxC,CAAC,CAAC;cACN;YACJ,CAAC,EAAE,EAAE,CAAC;UACV;UAEA,IAAI,CAACwG,UAAU,CAAC8J,MAAM,CAAC,aAAa,EAAE/O,SAAS,EAAEzL,OAAO,CAAC+R,EAAE,EAAE+R,UAAU,CAAC,SAAM,CAAC,UAAU7kB,GAAG,EAAE;YAC1F+E,OAAO,CAACe,KAAK,CAAC,yBAAyB,EAAE9F,GAAG,CAAC;UACjD,CAAC,CAAC;QACN;MACJ,CAAC;MACDolB,KAAK,EAAE;QACHrd,SAAS,EAAE;UACPsd,OAAO,WAAPA,OAAOA,CAAA,EAAG;YACN,IAAI,CAAC/X,iBAAiB,CAAC,CAAC;YACxB,IAAI3G,cAAc,IAAI,OAAOA,cAAc,CAAC2e,kBAAkB,KAAK,UAAU,EAAE;cAC3E3e,cAAc,CAAC2e,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAACvd,SAAS,EAAEjE,MAAM,CAAC;YACnE;UACJ,CAAC;UACDyhB,IAAI,EAAE;QACV,CAAC;QACDtd,WAAW,WAAXA,WAAWA,CAAA,EAAG;UAAE,IAAI,CAACqF,iBAAiB,CAAC,CAAC;QAAE,CAAC;QAC3CpF,0BAA0B,WAA1BA,0BAA0BA,CAAA,EAAG;UAAE,IAAI,CAACoF,iBAAiB,CAAC,CAAC;QAAE,CAAC;QAC1DpE,cAAc,WAAdA,cAAcA,CAAA,EAAG;UACb;UACA;QAAA,CACH;QACDW,kBAAkB,WAAlBA,kBAAkBA,CAAC2b,MAAM,EAAE;UACvB;UACA,IAAI,IAAI,CAAC7c,SAAS,EAAE;YAChB,IAAI,CAACA,SAAS,CAACuN,KAAK,CAACC,OAAO,GAAGqP,MAAM,GAAG,MAAM,GAAI,IAAI,CAAC5c,mBAAmB,GAAG,EAAE,GAAG,MAAO;UAC7F;;UAEA;UACA,IAAI,IAAI,CAACxB,aAAa,EAAE;YACpB,IAAI,CAACA,aAAa,CAAC8O,KAAK,CAACC,OAAO,GAAGqP,MAAM,GAAG,MAAM,GAAG,EAAE;UAC3D;;UAEA;UACA,IAAI,IAAI,CAACre,YAAY,EAAE;YACnB,IAAI,CAACA,YAAY,CAAC6O,QAAQ,GAAGwP,MAAM;YACnC,IAAIA,MAAM,EAAE;cACR,IAAI,CAACre,YAAY,CAACzH,WAAW,GAAG,EAAE;YACtC;UACJ;QACJ;MACJ,CAAC;MACD+lB,OAAO,WAAPA,OAAOA,CAAA,EAAG;QAAA,IAAAC,OAAA;QACNtwB,iBAAA,cAAAb,YAAA,GAAAE,CAAA,CAAC,SAAAkxB,SAAA;UAAA,IAAAC,aAAA;UAAA,OAAArxB,YAAA,GAAAC,CAAA,WAAAqxB,SAAA;YAAA,kBAAAA,SAAA,CAAAtzB,CAAA;cAAA;gBAAAszB,SAAA,CAAAtzB,CAAA;gBAAA,OACSmzB,OAAI,CAACtU,eAAe,CAAC,CAAC;cAAA;gBACtBwU,aAAa,GAAGF,OAAI,CAAC5D,aAAa,CAAC,CAAC;gBAC1C,IAAI8D,aAAa,IAAIlf,eAAe,IAAIC,cAAc,IAAI,OAAOA,cAAc,CAACmf,SAAS,KAAK,UAAU,EAAE;kBACtGnf,cAAc,CAACmf,SAAS,CAACJ,OAAI,EAAE5hB,MAAM,CAAC;gBAC1C;gBAEA4hB,OAAI,CAACrT,SAAS,CAAC,YAAM;kBACjB3X,uBAAuB,CAACgrB,OAAI,CAAChB,GAAG,CAAC;kBACjCgB,OAAI,CAACK,mBAAmB,GAAG/qB,uBAAuB,CAAC0qB,OAAI,CAAChB,GAAG,CAAC;gBAChE,CAAC,CAAC;cAAC;gBAAA,OAAAmB,SAAA,CAAAryB,CAAA;YAAA;UAAA,GAAAmyB,QAAA;QAAA,CACN,GAAE,CAAC;QAEJnuB,MAAM,CAACuY,gBAAgB,CAAC,cAAc,EAAE,IAAI,CAACxF,kBAAkB,CAAC;QAChE/S,MAAM,CAACuY,gBAAgB,CAAC,4BAA4B,EAAE,IAAI,CAAC2K,qBAAqB,CAAC;MACrF,CAAC;MACDsL,aAAa,WAAbA,aAAaA,CAAA,EAAG;QACZxuB,MAAM,CAAC2tB,mBAAmB,CAAC,cAAc,EAAE,IAAI,CAAC5a,kBAAkB,CAAC;QACnE/S,MAAM,CAAC2tB,mBAAmB,CAAC,4BAA4B,EAAE,IAAI,CAACzK,qBAAqB,CAAC;QAEpF,IAAI,IAAI,CAACqL,mBAAmB,EAAE;UAC1B,IAAI,CAACA,mBAAmB,CAACE,UAAU,CAAC,CAAC;UACrC,IAAI,CAACF,mBAAmB,GAAG,IAAI;QACnC;QAEA,IAAI,CAACrS,SAAS,CAAC,KAAK,CAAC;QAErB,IAAI,IAAI,CAAC/L,MAAM,EAAE;UACb,IAAI,CAACA,MAAM,CAACoR,OAAO,CAAC,CAAC;UACrB,IAAI,CAACpR,MAAM,GAAG,IAAI;QACtB;QACA,IAAI,IAAI,CAAC8J,UAAU,EAAE;UACjB,IAAI,CAACA,UAAU,CAAC8G,IAAI,CAAC,CAAC;QAC1B;QAEA,IAAI5R,cAAc,IAAI,OAAOA,cAAc,CAACuf,eAAe,KAAK,UAAU,EAAE;UACxEvf,cAAc,CAACuf,eAAe,CAAC,IAAI,EAAEpiB,MAAM,CAAC;QAChD;MACJ,CAAC;MACDqiB,QAAQ,EAAEriB,MAAM,CAACvK;IACrB,CAAC;IAED,IAAM6sB,GAAG,GAAGC,GAAG,CAACC,SAAS,CAACpf,aAAa,CAAC,CAACqf,KAAK,CAACziB,MAAM,CAACgD,kBAAkB,CAAC;IAEzE,IAAIH,cAAc,IAAI,OAAOA,cAAc,CAAC6f,MAAM,KAAK,UAAU,EAAE;MAC/D7f,cAAc,CAAC6f,MAAM,CAACJ,GAAG,EAAEtiB,MAAM,CAAC;IACtC;IAEA,OAAOsiB,GAAG;EACd,CAAC;EAED,OAAO;IACH5f,UAAU,EAAEA;EAChB,CAAC;AACL,CAAC,CAAC,CAAC;;AAEH;AACAxM,QAAQ,CAAC+V,gBAAgB,CAAC,OAAO,EAAE,UAAU5d,CAAC,EAAE;EAC5C,IAAM+wB,GAAG,GAAG/wB,CAAC,CAACuZ,MAAM,CAACb,OAAO,CAAC,qBAAqB,CAAC;EACnD,IAAI,CAACqY,GAAG,EAAE;IACN;EACJ;EACA,IAAMrgB,OAAO,GAAGqgB,GAAG,CAAChT,YAAY,CAAC,eAAe,CAAC;EACjD,IAAMtL,MAAM,GAAG/B,OAAO,GAAG7I,QAAQ,CAAC6K,cAAc,CAAChC,OAAO,CAAC,GAAG,IAAI;EAChE,IAAI,CAAC+B,MAAM,EAAE;IACTG,OAAO,CAACe,KAAK,CAAC,yBAAyB,EAAEjD,OAAO,CAAC;IACjD;EACJ;EACA,IAAMvF,IAAI,GAAGtD,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;EACxCqD,IAAI,CAACmpB,QAAQ,GAAG,QAAQ,GAAG5jB,OAAO,GAAG,MAAM;EAC3CvF,IAAI,CAACoE,IAAI,GAAGkD,MAAM,CAAC8hB,SAAS,CAAC,WAAW,CAAC;EACzCppB,IAAI,CAACkO,KAAK,CAAC,CAAC;AAChB,CAAC,CAAC;;AAEF;AACAxR,QAAQ,CAAC+V,gBAAgB,CAAC,OAAO,EAAE,UAAU5d,CAAC,EAAE;EAC5C,IAAMmL,IAAI,GAAGnL,CAAC,CAACuZ,MAAM,CAACb,OAAO,CAAC,oBAAoB,CAAC;EACnD,IAAI,CAACvN,IAAI,EAAE;IACP;EACJ;EAEA,IAAM2mB,SAAS,GAAG3mB,IAAI,CAACuN,OAAO,CAAC,4BAA4B,CAAC;EAC5D,IAAM8b,GAAG,GAAG1C,SAAS,aAATA,SAAS,uBAATA,SAAS,CAAExpB,aAAa,CAAC,KAAK,CAAC;EAC3C,IAAI,CAACksB,GAAG,EAAE;IACN;EACJ;EAEA,IAAMrkB,GAAG,GAAGqkB,GAAG,CAACrkB,GAAG;EACnB,IAAI,CAACA,GAAG,IAAI,CAACA,GAAG,CAACiO,UAAU,CAAC,OAAO,CAAC,EAAE;IAClC,OAAO,CAAC;EACZ;EAEApe,CAAC,CAACuY,cAAc,CAAC,CAAC;EAElB+C,KAAK,CAACnL,GAAG,CAAC,CACLnN,IAAI,CAAC,UAAUyxB,GAAG,EAAE;IAAE,OAAOA,GAAG,CAACzK,IAAI,CAAC,CAAC;EAAE,CAAC,CAAC,CAC3ChnB,IAAI,CAAC,UAAUgnB,IAAI,EAAE;IAClB,IAAMziB,GAAG,GAAG4iB,GAAG,CAACC,eAAe,CAACJ,IAAI,CAAC;IACrC,IAAM3oB,CAAC,GAAGwG,QAAQ,CAACC,aAAa,CAAC,GAAG,CAAC;IACrCzG,CAAC,CAACkO,IAAI,GAAGhI,GAAG;IACZlG,CAAC,CAACizB,QAAQ,GAAGnpB,IAAI,CAAC4S,YAAY,CAAC,UAAU,CAAC,IAAI,qBAAqB;IACnElW,QAAQ,CAAC2T,IAAI,CAAC6U,WAAW,CAAChvB,CAAC,CAAC;IAC5BA,CAAC,CAACgY,KAAK,CAAC,CAAC;IACTxR,QAAQ,CAAC2T,IAAI,CAACkZ,WAAW,CAACrzB,CAAC,CAAC;IAC5B8sB,UAAU,CAAC,YAAY;MAAEhE,GAAG,CAACG,eAAe,CAAC/iB,GAAG,CAAC;IAAE,CAAC,EAAE,GAAG,CAAC;EAC9D,CAAC,CAAC,SACI,CAAC,UAAUsG,GAAG,EAAE;IAAE+E,OAAO,CAACe,KAAK,CAAC,2BAA2B,EAAE9F,GAAG,CAAC;EAAE,CAAC,CAAC;AACnF,CAAC,CAAC","file":"ai-chat.js","sourcesContent":["window.openAIChatManager = function () {\n\n // Defaults (can be overridden by instanceConfig)\n var defaultConfig = {\n // UI defaults for generated media\n generatedImageAltText: 'Generated Image',\n generatedImageMaxWidth: 400,\n downloadImageTitle: 'Download image',\n downloadChartTitle: 'Download chart as image',\n downloadChartButtonText: 'Download',\n userLabel: 'You',\n assistantLabel: 'Assistant',\n thumbsUpTitle: 'Thumbs up',\n thumbsDownTitle: 'Thumbs down',\n copyTitle: 'Click here to copy response to clipboard.',\n codeCopiedText: 'Copied!',\n widget: {\n chatWidgetContainer: null,\n chatWidgetStateName: null,\n chatHistorySection: null,\n showHistoryButton: null,\n closeHistoryButton: null,\n newChatButton: null,\n toggleButtonSelector: null,\n resetSizeButtonSelector: null,\n dragHandleSelector: '.ai-chat-widget-header',\n enableDragging: true,\n enableResizing: true,\n persistLayout: true,\n defaultWidth: null,\n defaultHeight: null,\n minWidth: 320,\n minHeight: 420\n },\n messageTemplate: `\n <div class=\"ai-chat-messages\">\n <div v-for=\"(message, index) in messages\" :key=\"'msg-' + index\" class=\"ai-chat-message-item\">\n <div>\n <div v-if=\"message.role === 'user'\" class=\"ai-chat-msg-role ai-chat-msg-role-user\">{{ userLabel }}</div>\n <div v-else-if=\"message.role !== 'indicator'\" :class=\"getAssistantRoleClasses(message)\">\n <span :class=\"getAssistantIconClasses(message, index)\"><i :class=\"getAssistantIcon(message)\"></i></span>\n {{ getAssistantLabel(message) }}\n </div>\n <div class=\"ai-chat-message-body lh-base\">\n <h4 v-if=\"message.title\">{{ message.title }}</h4>\n <div v-html=\"message.htmlContent\"></div>\n <ol v-if=\"message.citationReferences && message.citationReferences.length\" class=\"ai-chat-citation-list\">\n <li v-for=\"citation in message.citationReferences\" :key=\"'citation-' + (citation.referenceKey || citation.displayIndex)\" class=\"ai-chat-citation-item\">\n <a v-if=\"citation.link\" :href=\"citation.link\" :target=\"citation.isDownload ? null : '_blank'\" :rel=\"citation.isDownload ? null : 'noopener noreferrer'\">{{ citation.label }}</a>\n <span v-else>{{ citation.label }}</span>\n </li>\n </ol>\n <span class=\"message-buttons-container\" v-if=\"!isIndicator(message)\">\n <template v-if=\"metricsEnabled && message.role === 'assistant'\">\n <span class=\"ai-chat-message-assistant-feedback\" :data-message-id=\"message.id\">\n <button type=\"button\" class=\"btn btn-sm btn-link text-success p-0 me-2 button-message-toolbox rate-up-btn\" @click=\"rateMessage(message, true, $event)\" :title=\"thumbsUpTitle\">\n <i class=\"fa-regular fa-thumbs-up\"></i>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link text-danger p-0 me-2 button-message-toolbox rate-down-btn\" @click=\"rateMessage(message, false, $event)\" :title=\"thumbsDownTitle\">\n <i class=\"fa-regular fa-thumbs-down\"></i>\n </button>\n </span>\n </template>\n <button type=\"button\" v-if=\"textToSpeechEnabled && !isConversationMode && message.role === 'assistant' && !message.isStreaming\" class=\"btn btn-sm btn-link text-secondary p-0 me-1 button-message-toolbox\" :class=\"{ 'tts-playing': ttsPlayingMessageIndex === index }\" :data-tts-message-index=\"index\" @click=\"toggleMessageTts(message, index)\" :title=\"ttsPlayingMessageIndex === index ? 'Pause audio' : 'Read aloud'\">\n <span :class=\"ttsPlayingMessageIndex === index ? 'fa-solid fa-circle-pause' : 'fa-solid fa-circle-play'\"></span>\n </button>\n <button type=\"button\" class=\"btn btn-sm btn-link text-secondary p-0 button-message-toolbox\" @click=\"copyResponse(message)\" :title=\"copyTitle\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n <div v-for=\"notification in notifications\" :key=\"'notif-' + notification.type\" class=\"ai-chat-notification\" :class=\"'ai-chat-notification-' + (notification.type || 'info') + ' ' + (notification.cssClass || '')\">\n <div class=\"ai-chat-notification-content\">\n <i v-if=\"notification.icon\" :class=\"notification.icon\" class=\"ai-chat-notification-icon\"></i>\n <span class=\"ai-chat-notification-text\">{{ notification.content }}</span>\n <button type=\"button\" v-if=\"notification.dismissible\" class=\"btn btn-sm btn-link p-0 ms-2 ai-chat-notification-dismiss\" @click=\"dismissNotification(notification.type)\" title=\"Dismiss\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div v-if=\"notification.actions && notification.actions.length\" class=\"ai-chat-notification-actions\">\n <button type=\"button\" v-for=\"action in notification.actions\" :key=\"action.name\" class=\"btn btn-sm\" :class=\"action.cssClass || 'btn-outline-secondary'\" @click=\"handleNotificationAction(notification.type, action.name)\">\n <i v-if=\"action.icon\" :class=\"action.icon\" class=\"me-1\"></i>\n {{ action.label }}\n </button>\n </div>\n </div>\n </div>\n `,\n indicatorTemplate: `\n <div class=\"ai-chat-msg-role ai-chat-msg-role-assistant\">\n <span class=\"ai-streaming-icon\"><i class=\"fa fa-robot\" style=\"display: inline-block;\"></i></span>\n Assistant\n </div>\n `\n };\n\n // Sanitize URLs to prevent javascript: protocol injection.\n function sanitizeUrl(url) {\n if (!url) return '';\n var trimmed = url.trim();\n if (/^javascript:/i.test(trimmed) || /^vbscript:/i.test(trimmed) || /^data:text\\/html/i.test(trimmed)) {\n return '';\n }\n return url;\n }\n\n // Safely HTML-encode a string using the DOM (avoids regex-based HTML filtering).\n function escapeHtmlEntities(text) {\n var span = document.createElement('span');\n span.textContent = text;\n return span.innerHTML;\n }\n\n function containsFontAwesomePlaceholders(root) {\n if (!root || root.nodeType !== 1) {\n return false;\n }\n\n var selector = 'i[class*=\"fa-\"],i.fa,i.fas,i.far,i.fab';\n if (typeof root.matches === 'function' && root.matches(selector)) {\n return true;\n }\n\n return typeof root.querySelector === 'function' && !!root.querySelector(selector);\n }\n\n function refreshFontAwesomeIcons(root) {\n var fontAwesome = window.FontAwesome;\n if (!containsFontAwesomePlaceholders(root) || !fontAwesome || !fontAwesome.dom || typeof fontAwesome.dom.i2svg !== 'function') {\n return;\n }\n\n fontAwesome.dom.i2svg({ node: root });\n }\n\n function observeFontAwesomeIcons(root) {\n if (!root || typeof MutationObserver === 'undefined') {\n return null;\n }\n\n var observer = new MutationObserver(function (mutations) {\n mutations.forEach(function (mutation) {\n mutation.addedNodes.forEach(function (node) {\n refreshFontAwesomeIcons(node);\n });\n });\n });\n\n observer.observe(root, {\n childList: true,\n subtree: true\n });\n\n return observer;\n }\n\n function parsePixelValue(value) {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n if (typeof value !== 'string') {\n return null;\n }\n\n var parsed = parseFloat(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n\n function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n }\n\n function normalizeReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return null;\n }\n\n const normalized = Object.assign({}, reference);\n normalized.index = normalized.index ?? normalized.Index ?? 0;\n normalized.text = normalized.text ?? normalized.Text ?? null;\n normalized.title = normalized.title ?? normalized.Title ?? null;\n normalized.link = sanitizeUrl(normalized.link ?? normalized.Link ?? null);\n normalized.referenceType = normalized.referenceType ?? normalized.ReferenceType ?? null;\n\n return normalized;\n }\n\n function isDownloadCitationReference(reference) {\n if (!reference || typeof reference !== 'object') {\n return false;\n }\n\n if (typeof reference.referenceType === 'string' && reference.referenceType.toLowerCase() === 'document') {\n return true;\n }\n\n if (typeof reference.link === 'string' && /\\/ai\\/documents\\/.+\\/download(?:$|\\?)/i.test(reference.link)) {\n return true;\n }\n\n return false;\n }\n\n function normalizeReferences(references) {\n if (!references || typeof references !== 'object') {\n return {};\n }\n\n const normalized = {};\n\n for (const [key, value] of Object.entries(references)) {\n normalized[key] = normalizeReference(value) ?? {};\n }\n\n return normalized;\n }\n\n function getCitationLabel(reference, key) {\n return reference.title || reference.text || key;\n }\n\n function buildCitationDisplay(content, references) {\n let processedContent = (content || '').trim();\n const messageReferences = normalizeReferences(references);\n\n if (!processedContent || !Object.keys(messageReferences).length) {\n return { content: processedContent, citations: [] };\n }\n\n const citedRefs = Object.entries(messageReferences).filter(([key]) => processedContent.includes(key));\n\n if (!citedRefs.length) {\n return { content: processedContent, citations: [] };\n }\n\n citedRefs.sort(([, a], [, b]) => a.index - b.index);\n\n const citations = [];\n let displayIndex = 1;\n\n for (const [key, value] of citedRefs) {\n const placeholder = `__CITE_${displayIndex}_${value.index || displayIndex}__`;\n processedContent = processedContent.replaceAll(key, placeholder);\n citations.push({\n referenceKey: key,\n displayIndex: displayIndex,\n label: getCitationLabel(value, key),\n link: value.link || null,\n isDownload: isDownloadCitationReference(value),\n placeholder: placeholder,\n });\n\n displayIndex++;\n }\n\n for (const citation of citations) {\n processedContent = processedContent.replaceAll(citation.placeholder, `<sup>${citation.displayIndex}</sup>`);\n }\n\n processedContent = processedContent.replaceAll('</sup><sup>', '</sup><sup>,</sup><sup>');\n\n return {\n content: processedContent,\n citations: citations.map(({ placeholder, ...citation }) => citation),\n };\n }\n\n function buildCopyContent(content, citations) {\n let copyContent = (content || '').trim();\n\n if (!copyContent || !Array.isArray(citations) || citations.length === 0) {\n return copyContent;\n }\n\n for (const citation of citations) {\n copyContent = copyContent.replaceAll(citation.referenceKey, `[${citation.displayIndex}]`);\n }\n\n copyContent += '\\n\\nReferences:\\n';\n\n for (const citation of citations) {\n copyContent += `${citation.displayIndex}. ${citation.label}`;\n\n if (citation.link) {\n copyContent += ` - ${citation.link}`;\n }\n\n copyContent += '\\n';\n }\n\n return copyContent.trimEnd();\n }\n\n function updateMessagePresentation(message, references) {\n const messageReferences = normalizeReferences(references ?? message.references);\n const rawContent = typeof message.rawContent === 'string'\n ? message.rawContent\n : typeof message.content === 'string'\n ? message.content\n : '';\n const citationDisplay = buildCitationDisplay(rawContent, messageReferences);\n\n message.rawContent = rawContent;\n message.content = rawContent;\n message.displayContent = citationDisplay.content;\n message.references = messageReferences;\n message.citationReferences = citationDisplay.citations;\n message.copyContent = buildCopyContent(rawContent, citationDisplay.citations);\n message.htmlContent = parseMarkdownContent(citationDisplay.content, message);\n\n return message;\n }\n\n const renderer = new marked.Renderer();\n\n // Modify the link rendering to open in a new tab\n renderer.link = function (data) {\n var href = sanitizeUrl(data.href);\n if (!href) return data.text || '';\n return `<a href=\"${href}\" target=\"_blank\" rel=\"noopener noreferrer\">${data.text}</a>`;\n };\n\n // Custom code block renderer with highlight.js integration and copy button.\n renderer.code = function (data) {\n var code = data.text || '';\n var lang = (data.lang || '').trim();\n var highlighted = code;\n\n if (typeof hljs !== 'undefined') {\n if (lang && hljs.getLanguage(lang)) {\n try {\n highlighted = hljs.highlight(code, { language: lang }).value;\n } catch (_) { }\n } else {\n try {\n highlighted = hljs.highlightAuto(code).value;\n } catch (_) { }\n }\n } else {\n highlighted = escapeHtmlEntities(code);\n }\n\n var langDisplay = lang ? escapeHtmlEntities(lang) : 'code';\n return `<div class=\"ai-code-block\"><div class=\"ai-code-header\"><span class=\"ai-code-lang\"><i class=\"fa-solid fa-code\"></i> ${langDisplay}</span><button type=\"button\" class=\"ai-code-copy-btn\" title=\"Copy code\"><i class=\"fa-regular fa-copy\"></i></button></div><pre><code class=\"hljs${lang ? ' language-' + lang : ''}\">${highlighted}</code></pre></div>`;\n };\n\n // Custom image renderer for generated images with thumbnail styling and download button.\n // Handles both URL and data-URI sources (data URIs are converted to blobs for download).\n renderer.image = function (data) {\n const src = sanitizeUrl(data.href);\n if (!src) return '';\n const alt = data.text || defaultConfig.generatedImageAltText;\n const maxWidth = defaultConfig.generatedImageMaxWidth;\n return `<div class=\"generated-image-container\">\n <img src=\"${src}\" alt=\"${alt}\" class=\"img-thumbnail\" style=\"max-width: ${maxWidth}px; height: auto;\" />\n <div class=\"mt-2\">\n <a href=\"${src}\" target=\"_blank\" download=\"${alt}\" title=\"${defaultConfig.downloadImageTitle}\" class=\"btn btn-sm btn-outline-secondary ai-download-image\">\n <i class=\"fa-solid fa-download\"></i>\n </a>\n </div>\n </div>`;\n };\n\n // Chart counter for unique IDs\n let chartCounter = 0;\n\n // Collector for charts discovered during marked parsing.\n let _pendingCharts = [];\n\n // Global chart config map: any page (e.g., Chat Interactions) that uses\n // the shared marked instance can call window.renderPendingCharts() after\n // its DOM update to render charts it didn't create itself.\n window.__chartConfigs = window.__chartConfigs || {};\n\n function createChartHtml(chartId) {\n return `<div class=\"chart-container\" style=\"position: relative; width: 100%; max-width: 560px; min-height: 420px;\">`\n + `<canvas id=\"${chartId}\"></canvas>`\n + `</div>`\n + `<div class=\"mt-2\">`\n + `<button type=\"button\" class=\"btn btn-sm btn-outline-secondary download-chart-btn\" data-chart-id=\"${chartId}\" title=\"${defaultConfig.downloadChartTitle}\">`\n + `<i class=\"fa-solid fa-download\"></i> ${defaultConfig.downloadChartButtonText}`\n + `</button>`\n + `</div>`;\n }\n\n // Register [chart:{...json...}] as a native marked block extension so the\n // markdown parser handles chart markers inline with surrounding text.\n marked.use({\n extensions: [{\n name: 'chart',\n level: 'block',\n start(src) {\n const idx = src.indexOf('[chart:');\n return idx >= 0 ? idx : undefined;\n },\n tokenizer(src) {\n const extracted = tryExtractChartMarker(src);\n if (!extracted || extracted.startIndex !== 0) {\n return undefined;\n }\n\n const chartId = `chat_chart_${++chartCounter}`;\n\n return {\n type: 'chart',\n raw: src.substring(0, extracted.endIndex),\n chartId: chartId,\n json: extracted.json,\n };\n },\n renderer(token) {\n _pendingCharts.push({ chartId: token.chartId, config: token.json });\n window.__chartConfigs[token.chartId] = token.json;\n return createChartHtml(token.chartId);\n }\n }]\n });\n\n // Extract a [chart:{...json...}] marker. This avoids regex issues with nested brackets.\n function tryExtractChartMarker(text) {\n const token = '[chart:';\n const start = text.indexOf(token);\n if (start < 0) {\n return null;\n }\n\n // Find JSON object boundary by balancing braces\n const jsonStart = start + token.length;\n let i = jsonStart;\n while (i < text.length && (text[i] === ' ' || text[i] === '\\n' || text[i] === '\\r' || text[i] === '\\t')) {\n i++;\n }\n\n if (i >= text.length || text[i] !== '{') {\n return null;\n }\n\n let depth = 0;\n let inString = false;\n let escape = false;\n\n for (; i < text.length; i++) {\n const ch = text[i];\n\n if (inString) {\n if (escape) {\n escape = false;\n continue;\n }\n if (ch === '\\\\') {\n escape = true;\n continue;\n }\n if (ch === '\"') {\n inString = false;\n }\n continue;\n }\n\n if (ch === '\"') {\n inString = true;\n continue;\n }\n\n if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) {\n const jsonEnd = i;\n // Expect closing bracket after JSON\n const closeBracketIndex = text.indexOf(']', jsonEnd + 1);\n if (closeBracketIndex < 0) {\n return null;\n }\n\n const json = text.substring(jsonStart, jsonEnd + 1).trim();\n return {\n startIndex: start,\n endIndex: closeBracketIndex + 1,\n json: json\n };\n }\n }\n }\n\n return null;\n }\n\n function renderChartsInMessage(message) {\n if (!message || !message._pendingCharts || !message._pendingCharts.length) {\n return;\n }\n\n // Copy and clear pending charts immediately to prevent duplicate renders.\n const charts = [...message._pendingCharts];\n message._pendingCharts = [];\n\n // Defer to requestAnimationFrame so the browser has fully laid out the\n // canvas elements before Chart.js reads their dimensions.\n requestAnimationFrame(() => {\n for (const c of charts) {\n renderChartOnCanvas(c.chartId, c.config);\n }\n });\n }\n\n function renderChartOnCanvas(chartId, config) {\n const canvas = document.getElementById(chartId);\n if (!canvas) {\n return false;\n }\n\n if (typeof Chart === 'undefined') {\n console.warn('Chart.js is not loaded. To render interactive charts, include the Chart.js library on the page (e.g., <script src=\"https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js\"></script>).');\n return false;\n }\n\n // When the canvas is inside a hidden container (e.g., a widget panel with\n // display:none), it has zero dimensions and Chart.js cannot render correctly.\n // Keep the config in __chartConfigs so renderPendingCharts() can retry later\n // once the container becomes visible.\n if (canvas.offsetParent === null) {\n window.__chartConfigs[chartId] = config;\n return false;\n }\n\n try {\n if (canvas._chartInstance) {\n canvas._chartInstance.destroy();\n }\n\n const cfg = typeof config === 'string' ? JSON.parse(config) : config;\n cfg.options ??= {};\n cfg.options.responsive = true;\n cfg.options.maintainAspectRatio = true;\n cfg.options.aspectRatio ??= 4 / 3;\n\n canvas._chartInstance = new Chart(canvas, cfg);\n delete window.__chartConfigs[chartId];\n return true;\n } catch (e) {\n console.error('Error creating chart:', e);\n return false;\n }\n }\n\n // Global function: renders any chart canvases whose configs are in the\n // global __chartConfigs map. Called by pages (e.g., Chat Interactions)\n // that share the marked instance but have their own rendering pipeline.\n window.renderPendingCharts = function () {\n if (typeof Chart === 'undefined') {\n return;\n }\n\n const configs = window.__chartConfigs;\n if (!configs) {\n return;\n }\n\n requestAnimationFrame(() => {\n for (const chartId of Object.keys(configs)) {\n renderChartOnCanvas(chartId, configs[chartId]);\n }\n });\n };\n\n // Parse markdown content via marked (which natively handles [chart:...] markers\n // through the registered extension) and collect pending chart configs for later\n // Chart.js rendering.\n function parseMarkdownContent(content, message) {\n _pendingCharts = [];\n const html = marked.parse(content, { renderer });\n message._pendingCharts = _pendingCharts.length > 0 ? [..._pendingCharts] : [];\n return DOMPurify.sanitize(html, { ADD_TAGS: ['canvas'], ADD_ATTR: ['target'] });\n }\n\n const initialize = (instanceConfig) => {\n\n const config = Object.assign({}, defaultConfig, instanceConfig);\n config.widget = Object.assign({}, defaultConfig.widget || {}, instanceConfig && instanceConfig.widget ? instanceConfig.widget : {});\n const hasWidgetConfig = !!(instanceConfig && instanceConfig.widget && instanceConfig.widget.chatWidgetContainer && instanceConfig.widget.chatWidgetStateName);\n const widgetBehavior = window.openAIChatWidgetBehavior || null;\n // Keep defaultConfig in sync so renderers use overridden values\n defaultConfig = config;\n\n if (!config.signalRHubUrl) {\n console.error('The signalRHubUrl is required.');\n return;\n }\n\n if (!config.appElementSelector) {\n console.error('The appElementSelector is required.');\n return;\n }\n\n if (!config.chatContainerElementSelector) {\n console.error('The chatContainerElementSelector is required.');\n return;\n }\n\n if (!config.inputElementSelector) {\n console.error('The inputElementSelector is required.');\n return;\n }\n\n if (!config.sendButtonElementSelector) {\n console.error('The sendButtonElementSelector is required.');\n return;\n }\n\n const appDefinition = {\n data() {\n return {\n inputElement: null,\n buttonElement: null,\n chatContainer: null,\n placeholder: null,\n isSessionStarted: false,\n isPlaceholderVisible: true,\n isStreaming: false,\n isNavigatingAway: false,\n autoScroll: true,\n stream: null,\n messages: [],\n notifications: [],\n prompt: '',\n documents: config.existingDocuments || [],\n isUploading: false,\n isDocumentOperationPending: false,\n documentOperationQueue: null,\n uploadErrors: [],\n isDragOver: false,\n documentBar: null,\n metricsEnabled: !!config.metricsEnabled,\n userLabel: config.userLabel,\n assistantLabel: config.assistantLabel,\n thumbsUpTitle: config.thumbsUpTitle,\n thumbsDownTitle: config.thumbsDownTitle,\n copyTitle: config.copyTitle,\n isRecording: false,\n mediaRecorder: null,\n preRecordingPrompt: '',\n micButton: null,\n speechToTextEnabled: config.chatMode === 'AudioInput' || config.chatMode === 'Conversation',\n textToSpeechEnabled: config.chatMode === 'Conversation' || !!config.textToSpeechEnabled,\n ttsVoiceName: config.ttsVoiceName || null,\n audioChunks: [],\n audioPlayQueue: [],\n isPlayingAudio: false,\n currentAudioElement: null,\n currentAudioUrl: null,\n ttsButton: null,\n ttsPlayingMessageIndex: -1,\n ttsAudioCache: {},\n ttsInstanceId: 'ai-chat-' + Math.random().toString(36).slice(2),\n singleResponseMode: !!config.singleResponseMode,\n conversationModeEnabled: config.chatMode === 'Conversation',\n conversationButton: null,\n isConversationMode: false,\n notificationDismissTimers: {},\n pendingSessionPromise: null,\n pendingSessionResolver: null,\n pendingSessionRejector: null,\n pendingSessionTimeoutId: null,\n };\n },\n computed: {\n lastAssistantIndex() {\n for (var i = this.messages.length - 1; i >= 0; i--) {\n if (this.messages[i].role === 'assistant') {\n return i;\n }\n }\n return -1;\n }\n },\n methods: {\n handleBeforeUnload() {\n this.isNavigatingAway = true;\n },\n handleDragOver(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = true;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.add('ai-chat-drag-over');\n },\n handleDragLeave(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n },\n handleDrop(e) {\n if (!config.sessionDocumentsEnabled) return;\n e.preventDefault();\n e.stopPropagation();\n this.isDragOver = false;\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) inputArea.classList.remove('ai-chat-drag-over');\n if (e.dataTransfer && e.dataTransfer.files && e.dataTransfer.files.length > 0) {\n this.uploadFiles(Array.from(e.dataTransfer.files));\n }\n },\n triggerFileInput() {\n if (!config.sessionDocumentsEnabled || this.isDocumentOperationPending) return;\n var fileInput = document.getElementById('ai-chat-doc-input');\n if (fileInput) fileInput.click();\n },\n handleFileInputChange(e) {\n var files = e.target.files ? Array.from(e.target.files) : [];\n if (files && files.length > 0) {\n this.uploadFiles(files);\n }\n e.target.value = '';\n },\n queueDocumentOperation(operation) {\n var self = this;\n var previousOperation = this.documentOperationQueue || Promise.resolve();\n var nextOperation = previousOperation\n .catch(function () { })\n .then(async function () {\n self.isDocumentOperationPending = true;\n try {\n return await operation();\n } finally {\n self.isDocumentOperationPending = false;\n }\n });\n\n this.documentOperationQueue = nextOperation.finally(function () {\n if (self.documentOperationQueue === nextOperation) {\n self.documentOperationQueue = null;\n }\n });\n\n return this.documentOperationQueue;\n },\n async uploadFiles(files) {\n if (!config.uploadDocumentUrl) return;\n\n var filesToUpload = Array.isArray(files) ? files.slice() : Array.from(files || []);\n if (filesToUpload.length === 0) return;\n\n return this.queueDocumentOperation(async () => {\n var sessionId = this.getSessionId();\n var profileId = this.getProfileId();\n\n if (!sessionId) {\n try {\n sessionId = await this.ensureSessionForDocuments(profileId);\n } catch (err) {\n console.error('Failed to create a chat session for document upload:', err);\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n }\n\n if (!sessionId) {\n console.warn('Cannot upload documents without a session or profile.');\n this.uploadErrors = [{ fileName: '', error: 'Could not create a chat session for the upload.' }];\n this.renderDocumentBar();\n return;\n }\n\n this.isUploading = true;\n this.uploadErrors = [];\n this.renderDocumentBar();\n try {\n var formData = new FormData();\n formData.append('sessionId', sessionId);\n for (var i = 0; i < filesToUpload.length; i++) {\n formData.append('files', filesToUpload[i]);\n }\n\n var response = await fetch(config.uploadDocumentUrl, {\n method: 'POST',\n body: formData\n });\n\n if (!response.ok) {\n var errorText = await response.text();\n var uploadError = this.extractReadableErrorMessage(errorText, 'Upload failed. Please try again.');\n console.error('Upload failed:', errorText);\n this.uploadErrors = [{ fileName: '', error: uploadError }];\n return;\n }\n\n var result = await response.json();\n\n if (result.sessionId && result.sessionId !== this.getSessionId()) {\n this.initializeSession(result.sessionId);\n }\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else if (result.uploaded && result.uploaded.length > 0) {\n this.documents = this.documents.concat(result.uploaded);\n }\n\n if (result.failed && result.failed.length > 0) {\n this.uploadErrors = result.failed;\n }\n } catch (err) {\n console.error('Upload error:', err);\n this.uploadErrors = [{ fileName: '', error: 'Upload failed. Please try again.' }];\n\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n } finally {\n this.isUploading = false;\n this.renderDocumentBar();\n }\n });\n },\n async removeDocument(doc) {\n if (!config.removeDocumentUrl) return;\n\n return this.queueDocumentOperation(async () => {\n try {\n var sessionId = this.getSessionId();\n var response = await fetch(config.removeDocumentUrl, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ itemId: sessionId, documentId: doc.documentId })\n });\n\n if (response.ok) {\n var result = await response.json();\n\n if (Array.isArray(result.documents)) {\n this.documents = result.documents;\n } else {\n var idx = this.documents.indexOf(doc);\n if (idx > -1) {\n this.documents.splice(idx, 1);\n }\n }\n } else {\n var errorText = await response.text();\n var removeError = this.extractReadableErrorMessage(errorText, 'Failed to remove document. Please try again.');\n console.error('Failed to remove document:', response.status, errorText);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: removeError }];\n if (sessionId) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n } catch (err) {\n console.error('Remove document error:', err);\n this.uploadErrors = [{ fileName: doc.fileName || '', error: 'Failed to remove document. Please try again.' }];\n if (this.getSessionId()) {\n this.reloadCurrentSession();\n }\n this.renderDocumentBar();\n }\n });\n },\n formatFileSize(bytes) {\n if (bytes < 1024) return bytes + ' B';\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';\n return (bytes / (1024 * 1024)).toFixed(1) + ' MB';\n },\n renderDocumentBar() {\n if (!this.documentBar) return;\n\n if (!config.sessionDocumentsEnabled) {\n this.documentBar.classList.add('d-none');\n return;\n }\n\n this.documentBar.classList.remove('d-none');\n\n var html = '<div class=\"ai-chat-doc-bar p-2\">';\n html += '<div class=\"d-flex flex-wrap align-items-center gap-1\">';\n\n for (var i = 0; i < this.documents.length; i++) {\n var doc = this.documents[i];\n var name = doc.fileName || 'Document';\n if (name.length > 20) name = name.substring(0, 17) + '...';\n html += '<span class=\"badge bg-secondary bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\" title=\"' + this.escapeHtml(doc.fileName || '') + '\">';\n html += '<i class=\"fa-solid fa-file-lines\" style=\"font-size: 0.7rem;\"></i> ';\n html += this.escapeHtml(name);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" style=\"font-size: 0.5rem;\" data-doc-index=\"' + i + '\" aria-label=\"Remove\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '></button>';\n html += '</span>';\n }\n\n for (var m = 0; m < this.uploadErrors.length; m++) {\n var failedItem = this.uploadErrors[m];\n var failedName = failedItem.fileName || 'File';\n var errorMsg = failedItem.error || 'Upload failed';\n if (failedName.length > 15) failedName = failedName.substring(0, 12) + '...';\n html += '<span class=\"badge bg-danger bg-opacity-25 text-danger d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\" title=\"' + this.escapeHtml((failedItem.fileName || '') + ': ' + errorMsg) + '\">';\n html += '<i class=\"fa-solid fa-circle-exclamation\" style=\"font-size: 0.7rem;\"></i> ';\n html += this.escapeHtml(failedName);\n html += ' <button type=\"button\" class=\"btn-close btn-close-sm ms-1\" style=\"font-size: 0.5rem;\" data-error-index=\"' + m + '\" aria-label=\"Dismiss\"></button>';\n html += '</span>';\n }\n\n if (this.isUploading) {\n html += '<span class=\"badge bg-info bg-opacity-25 text-dark d-inline-flex align-items-center gap-1 px-2 py-1\" style=\"font-size: 0.8rem;\">';\n html += '<span class=\"spinner-border spinner-border-sm\" style=\"width: 0.7rem; height: 0.7rem;\"></span> Uploading...';\n html += '</span>';\n }\n\n html += '<button type=\"button\" class=\"btn btn-sm btn-outline-secondary rounded-pill ai-chat-doc-add-btn d-inline-flex align-items-center gap-1\" style=\"font-size: 0.75rem; padding: 0.15rem 0.5rem;\" title=\"Attach documents\"' + (this.isDocumentOperationPending ? ' disabled' : '') + '>';\n html += '<i class=\"fa-solid fa-paperclip\"></i>';\n if (this.documents.length === 0 && !this.isUploading) {\n html += ' <span>Attach files</span>';\n }\n html += '</button>';\n html += '</div>';\n if (config.supportedExtensionsText) {\n html += '<div class=\"small text-muted mt-2\">Supported formats: ' + this.escapeHtml(config.supportedExtensionsText) + '</div>';\n }\n\n html += '</div>';\n\n this.documentBar.replaceChildren(DOMPurify.sanitize(html, { RETURN_DOM_FRAGMENT: true }));\n\n // Bind remove handlers\n var self = this;\n var closeButtons = this.documentBar.querySelectorAll('[data-doc-index]');\n for (var j = 0; j < closeButtons.length; j++) {\n closeButtons[j].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n if (self.isDocumentOperationPending) {\n return;\n }\n\n var docToRemove = self.documents[idx];\n if (docToRemove) self.removeDocument(docToRemove);\n };\n })(parseInt(closeButtons[j].getAttribute('data-doc-index'))));\n }\n\n // Bind error dismiss handlers\n var errorCloseButtons = this.documentBar.querySelectorAll('[data-error-index]');\n for (var n = 0; n < errorCloseButtons.length; n++) {\n errorCloseButtons[n].addEventListener('click', (function (idx) {\n return function (e) {\n e.preventDefault();\n e.stopPropagation();\n self.uploadErrors.splice(idx, 1);\n self.renderDocumentBar();\n };\n })(parseInt(errorCloseButtons[n].getAttribute('data-error-index'))));\n }\n\n // Bind add button\n var addBtn = this.documentBar.querySelector('.ai-chat-doc-add-btn');\n if (addBtn) {\n addBtn.addEventListener('click', function (e) {\n e.preventDefault();\n if (self.isDocumentOperationPending) {\n return;\n }\n self.triggerFileInput();\n });\n }\n },\n escapeHtml(text) {\n var div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n },\n extractReadableErrorMessage(errorText, fallbackMessage) {\n if (!errorText || typeof errorText !== 'string') {\n return fallbackMessage;\n }\n\n var trimmed = errorText.trim();\n if (!trimmed) {\n return fallbackMessage;\n }\n\n if (trimmed.startsWith('{') || trimmed.startsWith('[')) {\n try {\n var parsed = JSON.parse(trimmed);\n var message = parsed?.error || parsed?.message || parsed?.title || parsed?.detail;\n return typeof message === 'string' && message.trim()\n ? message.trim()\n : fallbackMessage;\n } catch (err) {\n return fallbackMessage;\n }\n }\n\n if (/<[^>]+>/.test(trimmed)) {\n return fallbackMessage;\n }\n\n return trimmed;\n },\n normalizeAssistantAppearance(appearance) {\n if (!appearance) {\n return null;\n }\n\n var label = typeof appearance.label === 'string' ? appearance.label.trim() : '';\n var icon = typeof appearance.icon === 'string' ? appearance.icon.trim() : '';\n var cssClass = typeof appearance.cssClass === 'string' ? appearance.cssClass.trim() : '';\n var disableStreamingAnimation = !!appearance.disableStreamingAnimation;\n\n if (!label && !icon && !cssClass && !disableStreamingAnimation) {\n return null;\n }\n\n return {\n label: label,\n icon: icon,\n cssClass: cssClass,\n disableStreamingAnimation: disableStreamingAnimation,\n };\n },\n getAssistantLabel(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.label ? appearance.label : this.assistantLabel;\n },\n getAssistantRoleClasses(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n var classes = ['ai-chat-msg-role'];\n\n if (appearance && appearance.cssClass) {\n classes.push(appearance.cssClass);\n } else {\n classes.push('ai-chat-msg-role-assistant');\n }\n\n return classes;\n },\n getAssistantIconClasses(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return [this.shouldAnimateAssistantIcon(message, index) ? 'ai-streaming-icon' : 'ai-bot-icon', appearance && appearance.cssClass ? appearance.cssClass : ''];\n },\n getAssistantIcon(message) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return appearance && appearance.icon ? appearance.icon : 'fa fa-robot';\n },\n shouldAnimateAssistantIcon(message, index) {\n var appearance = message ? this.normalizeAssistantAppearance(message.appearance) : null;\n return !!message &&\n message.isStreaming &&\n index === this.lastAssistantIndex &&\n !(appearance && appearance.disableStreamingAnimation);\n },\n async startConnection() {\n this.connection = new signalR.HubConnectionBuilder()\n .withUrl(config.signalRHubUrl)\n .withAutomaticReconnect()\n .build();\n\n // Allow long-running operations (e.g., multi-step MCP tool calls)\n // without the client disconnecting prematurely.\n this.connection.serverTimeoutInMilliseconds = 600000;\n this.connection.keepAliveIntervalInMilliseconds = 15000;\n\n this.connection.on(\"LoadSession\", (data) => {\n this.initializeSession(data.sessionId, true);\n this.messages = [];\n this.documents = data.documents || [];\n this.uploadErrors = [];\n\n (data.messages ?? []).forEach(msg => {\n this.addMessage(msg);\n\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n });\n });\n\n // Update feedback icons in the DOM after all messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // When the session is new (no messages) and an initial prompt is configured,\n // automatically send it as the first user message to trigger an AI response.\n if (this.messages.length === 0 && config.initialPrompt) {\n this.prompt = config.initialPrompt;\n this.sendMessage();\n }\n });\n\n this.connection.on(\"ReceiveError\", (error) => {\n console.error(\"SignalR Error: \", error);\n\n if (this.isRecording) {\n this.stopRecording();\n }\n\n if (widgetBehavior && typeof widgetBehavior.handleReceiveError === 'function') {\n widgetBehavior.handleReceiveError(this, error, config);\n }\n });\n\n this.connection.on(\"MessageRated\", (messageId, userRating) => {\n var msg = this.messages.find(m => m.id === messageId);\n if (msg) {\n msg.userRating = userRating;\n }\n });\n\n this.connection.on(\"ReceiveTranscript\", (sessionId, text, isFinal) => {\n if (this.isConversationMode) {\n if (!isFinal && text) {\n this._conversationPartialTranscript = text;\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n var html = '<p class=\"ai-partial-transcript\">' + escaped + '</p>';\n\n // Show partial transcript as a live user message.\n if (!this._conversationPartialMessage) {\n this.hidePlaceholder();\n this._conversationPartialMessage = {\n role: 'user',\n content: text,\n htmlContent: html,\n isPartial: true\n };\n this.messages.push(this._conversationPartialMessage);\n } else {\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = html;\n }\n this.scrollToBottom();\n }\n return;\n }\n\n if (text && !this._audioInputSent) {\n this.prompt = this.preRecordingPrompt + text;\n if (this.inputElement) {\n this.inputElement.value = this.prompt;\n this.inputElement.dispatchEvent(new Event('input'));\n }\n }\n });\n\n this.connection.on(\"ReceiveConversationUserMessage\", (sessionId, text) => {\n if (text) {\n this.stopAudio();\n\n // If there's an interrupted assistant message still streaming,\n // mark it as done to stop the spinner animation.\n if (this._conversationAssistantMessage) {\n var oldMsg = this.messages[this._conversationAssistantMessage.index];\n if (oldMsg) {\n oldMsg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Replace the partial transcript message with the final one.\n if (this._conversationPartialMessage) {\n var escaped = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n this._conversationPartialMessage.content = text;\n this._conversationPartialMessage.htmlContent = '<p>' + escaped + '</p>';\n this._conversationPartialMessage.isPartial = false;\n this._conversationPartialMessage = null;\n } else {\n this.addMessage({\n role: 'user',\n content: text\n });\n }\n this.scrollToBottom();\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantToken\", (sessionId, messageId, token, responseId, references, appearance) => {\n if (!this._conversationAssistantMessage) {\n this.stopAudio();\n this.hideTypingIndicator();\n\n // Ensure no stale streaming indicators remain from prior messages.\n for (var j = 0; j < this.messages.length; j++) {\n if (this.messages[j].isStreaming) {\n this.messages[j].isStreaming = false;\n }\n }\n\n var msgIndex = this.messages.length;\n var newMessage = {\n id: messageId,\n role: \"assistant\",\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n appearance: this.normalizeAssistantAppearance(appearance),\n references: {},\n };\n this.messages.push(newMessage);\n this._conversationAssistantMessage = { index: msgIndex, content: '' };\n }\n\n this._conversationAssistantMessage.content += token;\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n if (!msg.appearance) {\n msg.appearance = this.normalizeAssistantAppearance(appearance);\n }\n msg.rawContent = this._conversationAssistantMessage.content;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n this.$nextTick(() => {\n renderChartsInMessage(msg);\n this.scrollToBottom();\n });\n }\n });\n\n this.connection.on(\"ReceiveConversationAssistantComplete\", (sessionId, messageId, references) => {\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n msg.references = normalizeReferences(Object.assign({}, msg.references || {}, references || {}));\n updateMessagePresentation(msg, msg.references);\n }\n this._conversationAssistantMessage = null;\n }\n });\n\n this.connection.on(\"ReceiveAudioChunk\", (sessionId, base64Audio, contentType) => {\n if (base64Audio) {\n const binaryString = atob(base64Audio);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n this.audioChunks.push(bytes);\n }\n });\n\n this.connection.on(\"ReceiveAudioComplete\", (sessionId) => {\n this.playCollectedAudio();\n });\n\n this.connection.on(\"ReceiveNotification\", (notification) => {\n this.receiveNotification(notification);\n });\n\n this.connection.on(\"UpdateNotification\", (notification) => {\n this.updateNotification(notification);\n });\n\n this.connection.on(\"RemoveNotification\", (notificationType) => {\n this.removeNotification(notificationType);\n });\n\n this.connection.onreconnecting(() => {\n console.warn(\"SignalR: reconnecting...\");\n });\n\n this.connection.onreconnected(() => {\n console.info(\"SignalR: reconnected.\");\n\n if (this.isSessionStarted) {\n this.reloadCurrentSession();\n } else if (config.autoCreateSession) {\n this.startNewSession();\n }\n });\n\n this.connection.onclose((error) => {\n if (this.isNavigatingAway) {\n return;\n }\n\n if (error) {\n console.warn(\"SignalR connection closed with error:\", error.message || error);\n }\n });\n\n try {\n await this.connection.start();\n } catch (err) {\n console.error(\"SignalR Connection Error: \", err);\n }\n },\n addMessageInternal(message) {\n if (message.role === 'assistant') {\n message.appearance = this.normalizeAssistantAppearance(message.appearance);\n }\n\n if (message.content && !message.htmlContent) {\n message.htmlContent = parseMarkdownContent(message.content, message);\n }\n this.fireEvent(new CustomEvent(\"addingOpenAIPromotMessage\", { detail: { message: message } }));\n this.messages.push(message);\n\n this.$nextTick(() => {\n this.fireEvent(new CustomEvent(\"addedOpenAIPromotMessage\", { detail: { message: message } }));\n });\n },\n addMessage(message) {\n\n // Ensure userRating is always defined for Vue reactivity.\n if (message.userRating === undefined) {\n message.userRating = null;\n }\n\n if (message.content) {\n message.rawContent = message.rawContent ?? message.content;\n updateMessagePresentation(message, message.references);\n }\n\n this.addMessageInternal(message);\n this.hidePlaceholder();\n\n this.$nextTick(() => {\n // Render any pending charts once the DOM is updated\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n addMessages(messages) {\n\n for (let i = 0; i < messages.length; i++) {\n this.addMessageInternal(messages[i]);\n }\n\n this.hidePlaceholder();\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n hidePlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.add('d-none');\n }\n this.isPlaceholderVisible = false;\n },\n showPlaceholder() {\n if (this.placeholder) {\n this.placeholder.classList.remove('d-none');\n }\n this.isPlaceholderVisible = true;\n },\n isOrchestratorAvailable() {\n return config.isOrchestratorAvailable !== false;\n },\n applyOrchestratorAvailability() {\n if (this.isOrchestratorAvailable()) {\n return true;\n }\n\n const unavailableMessage = config.orchestratorUnavailableMessage || \"This orchestrator is not currently available.\";\n\n if (this.inputElement) {\n this.inputElement.disabled = true;\n this.inputElement.value = '';\n this.inputElement.placeholder = unavailableMessage;\n }\n\n if (this.buttonElement) {\n this.buttonElement.disabled = true;\n }\n\n if (this.micButtonElement) {\n this.micButtonElement.disabled = true;\n this.micButtonElement.style.display = 'none';\n }\n\n if (this.conversationButtonElement) {\n this.conversationButtonElement.disabled = true;\n this.conversationButtonElement.style.display = 'none';\n }\n\n return false;\n },\n fireEvent(event) {\n document.dispatchEvent(event);\n },\n isIndicator(message) {\n return message.role === 'indicator';\n },\n sendMessage() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n let trimmedPrompt = this.prompt.trim();\n\n if (!trimmedPrompt) {\n return;\n }\n\n // Stop any active recording before sending.\n if (this.isRecording) {\n this.stopRecording();\n }\n\n // Prevent stale ReceiveTranscript events from repopulating the prompt.\n this._audioInputSent = true;\n\n // In single-response mode, clear all previous messages.\n if (this.singleResponseMode) {\n this.messages.splice(0, this.messages.length);\n }\n\n this.addMessage({\n role: 'user',\n content: trimmedPrompt\n });\n\n this.streamMessage(this.getProfileId(), trimmedPrompt, null);\n this.inputElement.value = '';\n this.prompt = '';\n },\n startRecording() {\n if (this.isRecording || !this.connection) {\n return;\n }\n\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this.preRecordingPrompt = this.prompt;\n this._audioInputSent = false;\n\n var subject = new signalR.Subject();\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n var pendingChunk = Promise.resolve();\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n subject.next(base64);\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => subject.complete());\n });\n\n var language = navigator.language || document.documentElement.lang || 'en-US';\n this.connection.send(\"SendAudioStream\", profileId, sessionId, subject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n this.updateMicButton();\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n });\n },\n stopRecording() {\n if (!this.isRecording || !this.mediaRecorder) {\n return;\n }\n\n this.mediaRecorder.stop();\n this.isRecording = false;\n this.updateMicButton();\n },\n toggleRecording() {\n if (this.isRecording) {\n this.stopRecording();\n } else {\n this.startRecording();\n }\n },\n updateMicButton() {\n if (!this.micButton) {\n return;\n }\n\n if (this.isRecording) {\n this.micButton.classList.add('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-stop\"></i>';\n } else {\n this.micButton.classList.remove('stt-recording');\n this.micButton.innerHTML = '<i class=\"fa-solid fa-microphone\"></i>';\n }\n },\n streamMessage(profileId, trimmedPrompt, sessionProfileId) {\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n\n this.streamingStarted();\n this.showTypingIndicator();\n this.autoScroll = true;\n\n var content = '';\n var references = {};\n var lastResponseId = null;\n\n // Get the index after showing typing indicator.\n var messageIndex = this.messages.length;\n var currentSessionId = this.getSessionId();\n\n this.stream = this.connection.stream(\"SendMessage\", profileId, trimmedPrompt, currentSessionId, sessionProfileId)\n .subscribe({\n next: (chunk) => {\n let message = this.messages[messageIndex];\n\n if (!message) {\n\n if (chunk.sessionId && !currentSessionId) {\n this.initializeSession(chunk.sessionId);\n }\n\n this.hideTypingIndicator();\n // Re-assign the index after hiding the typing indicator.\n messageIndex = this.messages.length;\n let newMessage = {\n id: chunk.messageId,\n role: \"assistant\",\n title: chunk.title,\n content: \"\",\n htmlContent: \"\",\n isStreaming: true,\n userRating: null,\n };\n\n this.messages.push(newMessage);\n\n message = newMessage;\n }\n\n if (chunk.title && (!message.title || message.title !== chunk.title)) {\n message.title = chunk.title;\n }\n\n if (chunk.references && typeof chunk.references === \"object\" && Object.keys(chunk.references).length) {\n\n for (const [key, value] of Object.entries(chunk.references)) {\n references[key] = normalizeReference(value) ?? {};\n }\n }\n\n if (chunk.content) {\n\n // When the responseId changes (e.g., after an internal tool call),\n // insert a line break to visually separate response segments.\n if (chunk.responseId && lastResponseId && chunk.responseId !== lastResponseId) {\n content += '\\n\\n';\n }\n\n if (chunk.responseId) {\n lastResponseId = chunk.responseId;\n }\n\n content += chunk.content;\n }\n\n // Update the existing message\n message.rawContent = content;\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n },\n complete: () => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n if (!msg || !msg.content) {\n // No content received at all.\n this.hideTypingIndicator();\n }\n\n // Trigger text-to-speech only in conversation mode.\n if (this.isConversationMode && this.textToSpeechEnabled && msg && msg.content) {\n this.synthesizeSpeech(msg.content);\n }\n\n this.stream?.dispose();\n this.stream = null;\n },\n error: (err) => {\n this.processReferences(references, messageIndex);\n this.streamingFinished();\n\n let msg = this.messages[messageIndex];\n if (msg) {\n msg.isStreaming = false;\n }\n\n this.hideTypingIndicator();\n\n if (!this.isNavigatingAway) {\n this.addMessage(this.getServiceDownMessage());\n }\n\n this.stream?.dispose();\n this.stream = null;\n\n console.error(\"Stream error:\", err);\n }\n });\n },\n getServiceDownMessage() {\n let newMessage = {\n role: \"assistant\",\n content: \"Our service is currently unavailable. Please try again later. We apologize for the inconvenience.\",\n htmlContent: \"\",\n };\n\n return newMessage;\n },\n processReferences(references, messageIndex) {\n references = normalizeReferences(references);\n\n if (Object.keys(references).length) {\n\n let message = this.messages[messageIndex];\n message.rawContent = message.rawContent ?? message.content ?? '';\n updateMessagePresentation(message, references);\n\n this.messages[messageIndex] = message;\n\n this.$nextTick(() => {\n renderChartsInMessage(message);\n this.scrollToBottom();\n });\n }\n },\n streamingStarted() {\n var stopIcon = this.buttonElement.getAttribute('data-stop-icon');\n\n if (stopIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(stopIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.setAttribute('disabled', 'disabled');\n }\n },\n streamingFinished() {\n var startIcon = this.buttonElement.getAttribute('data-start-icon');\n\n if (startIcon) {\n this.buttonElement.replaceChildren(DOMPurify.sanitize(startIcon, { RETURN_DOM_FRAGMENT: true }));\n }\n\n if (this.inputElement) {\n this.inputElement.removeAttribute('disabled');\n this.inputElement.focus();\n }\n\n // Directly manipulate the DOM to stop all streaming animations.\n if (this.chatContainer) {\n var icons = this.chatContainer.querySelectorAll('.ai-streaming-icon');\n for (var i = 0; i < icons.length; i++) {\n icons[i].classList.remove('ai-streaming-icon');\n icons[i].classList.add('ai-bot-icon');\n }\n }\n\n // Also update Vue data for consistency.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n },\n handleExternalTtsStop(e) {\n if (e?.detail?.sourceId === this.ttsInstanceId) {\n return;\n }\n\n this.stopAudio(false);\n },\n updateTtsPlaybackButtons() {\n if (!this.chatContainer) {\n return;\n }\n\n var buttons = this.chatContainer.querySelectorAll('[data-tts-message-index]');\n\n buttons.forEach(button => {\n var buttonIndex = Number(button.getAttribute('data-tts-message-index'));\n var isPlaying = buttonIndex === this.ttsPlayingMessageIndex;\n\n button.classList.toggle('tts-playing', isPlaying);\n button.setAttribute('title', isPlaying ? 'Pause audio' : 'Read aloud');\n });\n },\n synthesizeSpeech(text, cacheIndex) {\n if (!this.textToSpeechEnabled || !text || !this.connection) {\n return;\n }\n\n this.audioChunks = [];\n this.isPlayingAudio = true;\n this._ttsCacheIndex = cacheIndex !== undefined ? cacheIndex : -1;\n\n this.connection.invoke(\"SynthesizeSpeech\", this.getProfileId(), this.getSessionId(), text, this.ttsVoiceName)\n .catch(err => {\n console.error(\"TTS synthesis error:\", err);\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this._ttsCacheIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n toggleMessageTts(message, index) {\n if (this.ttsPlayingMessageIndex === index) {\n this.stopAudio();\n return;\n }\n\n this.stopAudio(false);\n window.dispatchEvent(new CustomEvent('crestapps-ai-chat-stop-tts', {\n detail: { sourceId: this.ttsInstanceId }\n }));\n this.ttsPlayingMessageIndex = index;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n\n if (this.ttsAudioCache[index]) {\n this.playAudioBlob(this.ttsAudioCache[index]);\n return;\n }\n\n this.synthesizeSpeech(message.content, index);\n },\n playCollectedAudio() {\n if (this.audioChunks.length === 0) {\n if (!this.currentAudioElement && this.audioPlayQueue.length === 0) {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n }\n return;\n }\n\n const totalLength = this.audioChunks.reduce((sum, chunk) => sum + chunk.length, 0);\n const combined = new Uint8Array(totalLength);\n let offset = 0;\n for (const chunk of this.audioChunks) {\n combined.set(chunk, offset);\n offset += chunk.length;\n }\n this.audioChunks = [];\n\n const blob = new Blob([combined], { type: 'audio/mp3' });\n\n if (this._ttsCacheIndex >= 0) {\n this.ttsAudioCache[this._ttsCacheIndex] = blob;\n this._ttsCacheIndex = -1;\n }\n\n // If audio is already playing, queue this blob for sequential playback.\n if (this.currentAudioElement) {\n this.audioPlayQueue.push(blob);\n return;\n }\n\n this.playAudioBlob(blob);\n },\n playAudioBlob(blob) {\n const url = URL.createObjectURL(blob);\n const audio = new Audio(url);\n\n this.currentAudioUrl = url;\n this.currentAudioElement = audio;\n this.isPlayingAudio = true;\n\n audio.addEventListener('ended', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.addEventListener('error', () => {\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.playNextInQueue();\n });\n\n audio.play().catch(err => {\n console.error(\"Audio playback error:\", err);\n this.currentAudioElement = null;\n this.currentAudioUrl = null;\n URL.revokeObjectURL(url);\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n });\n },\n playNextInQueue() {\n if (this.audioPlayQueue.length > 0) {\n var nextBlob = this.audioPlayQueue.shift();\n this.playAudioBlob(nextBlob);\n } else {\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n this.conversationModeOnAudioEnded();\n }\n },\n stopAudio() {\n if (this.currentAudioElement) {\n this.currentAudioElement.pause();\n this.currentAudioElement.currentTime = 0;\n this.currentAudioElement = null;\n }\n if (this.currentAudioUrl) {\n URL.revokeObjectURL(this.currentAudioUrl);\n this.currentAudioUrl = null;\n }\n this.audioChunks = [];\n this.audioPlayQueue = [];\n this.isPlayingAudio = false;\n this.ttsPlayingMessageIndex = -1;\n this.$nextTick(() => this.updateTtsPlaybackButtons());\n },\n toggleConversationMode() {\n if (this.isConversationMode) {\n this.stopConversationMode();\n } else {\n this.startConversationMode();\n }\n },\n startConversationMode() {\n if (!this.conversationModeEnabled || this.isConversationMode || !this.connection) {\n return;\n }\n\n this.isConversationMode = true;\n this.updateConversationButton();\n this._conversationPartialTranscript = '';\n this._conversationAssistantMessage = null;\n this._conversationPartialMessage = null;\n\n // Remove any previous conversation ended notification.\n this.removeNotification('conversation-ended');\n navigator.mediaDevices.getUserMedia({ audio: { echoCancellation: true, noiseSuppression: true, autoGainControl: true } })\n .then(stream => {\n var mimeType = MediaRecorder.isTypeSupported('audio/ogg;codecs=opus')\n ? 'audio/ogg;codecs=opus'\n : MediaRecorder.isTypeSupported('audio/webm;codecs=opus')\n ? 'audio/webm;codecs=opus'\n : 'audio/webm';\n\n this.mediaRecorder = new MediaRecorder(stream, {\n mimeType: mimeType,\n audioBitsPerSecond: 128000,\n });\n\n this._conversationSubject = new signalR.Subject();\n this._conversationStream = stream;\n\n // Create an AnalyserNode for volume-based interrupt detection.\n // During TTS playback, detect when the user speaks above\n // the threshold to stop TTS (interrupt). Audio chunks are\n // always forwarded — browser echo cancellation handles\n // speaker echo so the STT stream has no gaps.\n var AudioCtx = window.AudioContext || window.webkitAudioContext;\n if (AudioCtx) {\n this._conversationAudioCtx = new AudioCtx();\n this._conversationAnalyser = this._conversationAudioCtx.createAnalyser();\n this._conversationAnalyser.fftSize = 256;\n var micSource = this._conversationAudioCtx.createMediaStreamSource(stream);\n micSource.connect(this._conversationAnalyser);\n }\n\n var pendingChunk = Promise.resolve();\n var analyser = this._conversationAnalyser;\n var interruptVolumeThreshold = 30;\n\n this.mediaRecorder.addEventListener('dataavailable', (e) => {\n if (e.data && e.data.size > 0) {\n // During TTS playback, check mic volume to detect\n // user interruption (speaking above threshold).\n if (this.isPlayingAudio && analyser) {\n var freqData = new Uint8Array(analyser.frequencyBinCount);\n analyser.getByteFrequencyData(freqData);\n var sum = 0;\n for (var k = 0; k < freqData.length; k++) { sum += freqData[k]; }\n var avg = sum / freqData.length;\n\n if (avg >= interruptVolumeThreshold) {\n // User is speaking — interrupt TTS playback.\n this.stopAudio();\n }\n }\n\n // Always send audio to STT — browser echo cancellation\n // handles speaker echo; continuous audio avoids gaps\n // that increase recognition latency.\n pendingChunk = pendingChunk.then(async () => {\n var data = await e.data.arrayBuffer();\n var uint8Array = new Uint8Array(data);\n var binaryString = uint8Array.reduce(function (str, byte) { return str + String.fromCharCode(byte); }, '');\n var base64 = btoa(binaryString);\n try {\n this._conversationSubject.next(base64);\n } catch (err) {\n // Subject may have been completed already.\n }\n });\n }\n });\n\n this.mediaRecorder.addEventListener('stop', () => {\n stream.getTracks().forEach(track => track.stop());\n pendingChunk.then(() => {\n try {\n this._conversationSubject.complete();\n } catch (err) {\n // Already completed.\n }\n });\n });\n\n var profileId = this.getProfileId();\n var sessionId = this.getSessionId() || '';\n var language = navigator.language || document.documentElement.lang || 'en-US';\n\n this.connection.send(\"StartConversation\", profileId, sessionId, this._conversationSubject, mimeType, language);\n this.mediaRecorder.start(250);\n this.isRecording = true;\n })\n .catch(err => {\n console.error('Microphone access denied:', err);\n this.isConversationMode = false;\n this.updateConversationButton();\n });\n },\n stopConversationMode() {\n if (!this.isConversationMode) {\n return;\n }\n\n this.isConversationMode = false;\n this.updateConversationButton();\n\n // Signal the server to cancel all in-progress STT/TTS streams immediately.\n if (this.connection) {\n this.connection.invoke(\"StopConversation\").catch(function () { });\n }\n\n if (this.isRecording && this.mediaRecorder) {\n this.mediaRecorder.stop();\n this.isRecording = false;\n }\n\n this.stopAudio();\n this._conversationPartialTranscript = '';\n this._conversationPartialMessage = null;\n\n // Clean up the AudioContext used for volume monitoring.\n if (this._conversationAudioCtx) {\n this._conversationAudioCtx.close().catch(function () { });\n this._conversationAudioCtx = null;\n this._conversationAnalyser = null;\n }\n\n // Mark any in-flight assistant message as done to stop the spinner.\n if (this._conversationAssistantMessage) {\n var msg = this.messages[this._conversationAssistantMessage.index];\n if (msg) {\n msg.isStreaming = false;\n }\n this._conversationAssistantMessage = null;\n }\n\n // Safety net: clear all lingering streaming indicators.\n for (var i = 0; i < this.messages.length; i++) {\n if (this.messages[i].isStreaming) {\n this.messages[i].isStreaming = false;\n }\n }\n\n // Show a \"conversation ended\" notification system message.\n this.receiveNotification({\n type: 'conversation-ended',\n content: 'Conversation ended.',\n icon: 'fa-solid fa-circle-check',\n dismissible: true,\n autoDismissMs: 5000\n });\n },\n updateConversationButton() {\n if (!this.conversationButton) {\n return;\n }\n\n if (this.isConversationMode) {\n this.conversationButton.classList.add('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-dark', 'btn-outline-secondary');\n this.conversationButton.title = this.conversationButton.getAttribute('data-end-title') || 'End Conversation';\n var endHtml = this.conversationButton.getAttribute('data-end-html');\n if (endHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(endHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n } else {\n this.conversationButton.classList.remove('active', 'btn-primary');\n this.conversationButton.classList.remove('btn-dark', 'btn-outline-secondary');\n this.conversationButton.classList.add('btn-outline-dark');\n this.conversationButton.blur();\n this.conversationButton.title = this.conversationButton.getAttribute('data-start-title') || 'Start Conversation';\n var startHtml = this.conversationButton.getAttribute('data-start-html');\n if (startHtml) {\n this.conversationButton.replaceChildren(DOMPurify.sanitize(startHtml, { RETURN_DOM_FRAGMENT: true }));\n }\n }\n },\n conversationModeSendPrompt() {\n // Legacy: only used by AudioInput mode's ReceiveTranscript.\n },\n conversationModeOnAudioEnded() {\n // Legacy: in conversation mode, audio playback continuation\n // is handled by the persistent stream. This method is only\n // called from playCollectedAudio for non-conversation TTS.\n },\n generatePrompt(element) {\n if (!element) {\n console.error('The element paramter is required.');\n\n return;\n }\n\n let templateProfileId = element.getAttribute('data-profile-id');\n let sessionId = this.getSessionId();\n let sessionProfileId = this.getProfileId();\n\n if (!templateProfileId || !sessionId) {\n\n console.error('The given element is missing data-profile-id or the session has not yet started.');\n return;\n }\n\n // streamMessage() already shows the typing indicator.\n this.streamMessage(templateProfileId, null, sessionProfileId);\n },\n createSessionUrl(baseUrl, param, value) {\n\n const fullUrl = baseUrl.toLowerCase().startsWith('http') ? baseUrl : window.location.origin + baseUrl;\n const url = new URL(fullUrl);\n\n url.searchParams.set(param, value);\n\n return url.toString();\n },\n showTypingIndicator() {\n this.addMessage({\n role: 'indicator',\n htmlContent: config.indicatorTemplate\n });\n },\n hideTypingIndicator() {\n const originalLength = this.messages.length;\n this.messages = this.messages.filter(msg => msg.role !== 'indicator');\n const removedCount = originalLength - this.messages.length;\n return removedCount;\n },\n receiveNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n } else {\n this.notifications.push(notification);\n }\n this.scheduleNotificationDismiss(notification);\n this.$nextTick(() => {\n this.scrollToBottom();\n });\n },\n updateNotification(notification) {\n if (!notification || !notification.type) {\n return;\n }\n this.clearNotificationDismiss(notification.type);\n var existingIndex = this.notifications.findIndex(n => n.type === notification.type);\n if (existingIndex >= 0) {\n this.notifications.splice(existingIndex, 1, notification);\n this.scheduleNotificationDismiss(notification);\n }\n },\n scheduleNotificationDismiss(notification) {\n if (!notification || !notification.type || !notification.autoDismissMs || notification.autoDismissMs <= 0) {\n return;\n }\n this.notificationDismissTimers[notification.type] = setTimeout(() => {\n this.removeNotification(notification.type);\n }, notification.autoDismissMs);\n },\n clearNotificationDismiss(notificationType) {\n var timerId = this.notificationDismissTimers[notificationType];\n if (!timerId) {\n return;\n }\n clearTimeout(timerId);\n delete this.notificationDismissTimers[notificationType];\n },\n removeNotification(notificationType) {\n this.clearNotificationDismiss(notificationType);\n this.notifications = this.notifications.filter(n => n.type !== notificationType);\n },\n dismissNotification(notificationType) {\n this.removeNotification(notificationType);\n },\n handleNotificationAction(notificationType, actionName) {\n if (!this.connection) {\n return;\n }\n var sessionId = this.getSessionId();\n this.connection.invoke(\"HandleNotificationAction\", sessionId, notificationType, actionName).catch(function (err) {\n console.error(\"Error handling notification action:\", err);\n });\n },\n scrollToBottom() {\n if (!this.autoScroll) {\n return;\n }\n setTimeout(() => {\n this.chatContainer.scrollTop = this.chatContainer.scrollHeight - this.chatContainer.clientHeight;\n }, 50);\n },\n handleUserInput(event) {\n this.prompt = event.target.value;\n },\n getProfileId() {\n return this.inputElement\n ? this.inputElement.getAttribute('data-profile-id')\n : null;\n },\n setSessionId(sessionId) {\n if (!this.inputElement) {\n return;\n }\n\n this.inputElement.setAttribute('data-session-id', sessionId || '');\n },\n resetSession() {\n this.stopRecording();\n this.rejectPendingSessionRequest('Session was reset.');\n this.setSessionId('');\n this.isSessionStarted = false;\n this.sessionRating = null;\n this.messages = [];\n this.documents = [];\n if (!config.autoCreateSession) {\n this.showPlaceholder();\n }\n\n if (config.autoCreateSession) {\n this.startNewSession();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onSessionReset === 'function') {\n widgetBehavior.onSessionReset(this, config);\n }\n },\n startNewSession() {\n if (!this.applyOrchestratorAvailability()) {\n return;\n }\n\n const profileId = this.getProfileId();\n if (!profileId || !this.connection) {\n return;\n }\n\n this.requestNewSession(profileId).catch(err => console.error(err));\n },\n async ensureSessionForDocuments(profileId) {\n var sessionId = this.getSessionId();\n if (sessionId) {\n return sessionId;\n }\n\n if (!profileId || !this.connection) {\n return null;\n }\n\n return await this.requestNewSession(profileId);\n },\n requestNewSession(profileId) {\n if (this.pendingSessionPromise) {\n return this.pendingSessionPromise;\n }\n\n if (!profileId || !this.connection) {\n return Promise.resolve(null);\n }\n\n this.pendingSessionPromise = new Promise((resolve, reject) => {\n this.pendingSessionResolver = resolve;\n this.pendingSessionRejector = reject;\n this.pendingSessionTimeoutId = window.setTimeout(() => {\n this.rejectPendingSessionRequest('Timed out while creating a chat session.');\n }, 15000);\n });\n\n this.connection.invoke(\"StartSession\", profileId, null).catch(err => {\n this.rejectPendingSessionRequest(err);\n });\n\n return this.pendingSessionPromise;\n },\n resolvePendingSessionRequest(sessionId) {\n if (this.pendingSessionResolver) {\n this.pendingSessionResolver(sessionId);\n }\n\n this.clearPendingSessionRequest();\n },\n rejectPendingSessionRequest(error) {\n if (this.pendingSessionRejector) {\n this.pendingSessionRejector(error);\n }\n\n this.clearPendingSessionRequest();\n },\n clearPendingSessionRequest() {\n if (this.pendingSessionTimeoutId) {\n window.clearTimeout(this.pendingSessionTimeoutId);\n }\n\n this.pendingSessionPromise = null;\n this.pendingSessionResolver = null;\n this.pendingSessionRejector = null;\n this.pendingSessionTimeoutId = null;\n },\n initializeApp() {\n this.inputElement = document.querySelector(config.inputElementSelector);\n this.buttonElement = document.querySelector(config.sendButtonElementSelector);\n this.chatContainer = document.querySelector(config.chatContainerElementSelector);\n this.placeholder = document.querySelector(config.placeholderElementSelector);\n\n if (!this.inputElement || !this.buttonElement || !this.chatContainer || !this.placeholder) {\n console.error('AI chat app could not initialize because one or more required elements were not found.', {\n inputElementSelector: config.inputElementSelector,\n sendButtonElementSelector: config.sendButtonElementSelector,\n chatContainerElementSelector: config.chatContainerElementSelector,\n placeholderElementSelector: config.placeholderElementSelector\n });\n\n return false;\n }\n\n this.applyOrchestratorAvailability();\n\n const sessionId = this.getSessionId();\n if (!hasWidgetConfig && sessionId) {\n this.loadSession(sessionId);\n } else if (this.isOrchestratorAvailable() && config.autoCreateSession && !hasWidgetConfig && !sessionId) {\n this.startNewSession();\n }\n\n // Initialize document bar if enabled.\n if (config.sessionDocumentsEnabled && config.documentBarSelector) {\n this.documentBar = document.querySelector(config.documentBarSelector);\n if (this.documentBar) {\n this.renderDocumentBar();\n\n // Create hidden file input for document uploads.\n var fileInput = document.createElement('input');\n fileInput.type = 'file';\n fileInput.id = 'ai-chat-doc-input';\n fileInput.className = 'd-none';\n fileInput.multiple = true;\n if (config.allowedExtensions) {\n fileInput.accept = config.allowedExtensions;\n }\n fileInput.addEventListener('change', (e) => this.handleFileInputChange(e));\n this.documentBar.parentElement.appendChild(fileInput);\n\n // Set up drag-and-drop on the input area.\n var inputArea = this.inputElement ? this.inputElement.closest('.ai-admin-widget-input, .text-bg-light') : null;\n if (inputArea) {\n inputArea.addEventListener('dragover', (e) => this.handleDragOver(e));\n inputArea.addEventListener('dragleave', (e) => this.handleDragLeave(e));\n inputArea.addEventListener('drop', (e) => this.handleDrop(e));\n }\n }\n }\n\n // Pause auto-scroll when the user manually scrolls up during streaming.\n this.chatContainer.addEventListener('scroll', () => {\n if (!this.stream) {\n return;\n }\n const threshold = 30;\n const atBottom = this.chatContainer.scrollHeight - this.chatContainer.clientHeight - this.chatContainer.scrollTop <= threshold;\n this.autoScroll = atBottom;\n });\n\n this.inputElement.addEventListener('keydown', event => {\n\n if (this.stream != null) {\n return;\n }\n\n if (event.key === \"Enter\" && !event.shiftKey) {\n event.preventDefault();\n this.buttonElement.click();\n }\n });\n\n this.inputElement.addEventListener('input', (e) => {\n this.handleUserInput(e);\n\n if (e.target.value.trim()) {\n this.buttonElement.removeAttribute('disabled');\n } else {\n this.buttonElement.setAttribute('disabled', true);\n }\n });\n\n this.buttonElement.addEventListener('click', () => {\n\n if (this.stream != null) {\n this.stream.dispose();\n this.stream = null;\n\n this.streamingFinished();\n this.hideTypingIndicator();\n\n // Clean up: remove empty assistant message or stop streaming animation.\n if (this.messages.length > 0) {\n const lastMsg = this.messages[this.messages.length - 1];\n if (lastMsg.role === 'assistant' && !lastMsg.content) {\n this.messages.pop();\n } else if (lastMsg.isStreaming) {\n lastMsg.isStreaming = false;\n }\n }\n\n return;\n }\n\n this.sendMessage();\n });\n\n const promptGenerators = document.getElementsByClassName('profile-generated-prompt');\n\n for (var i = 0; i < promptGenerators.length; i++) {\n promptGenerators[i].addEventListener('click', (e) => {\n e.preventDefault();\n this.generatePrompt(e.target);\n });\n }\n\n const chatSessions = document.getElementsByClassName('chat-session-history-item');\n\n for (var i = 0; i < chatSessions.length; i++) {\n chatSessions[i].addEventListener('click', (e) => {\n e.preventDefault();\n\n var sessionId = e.target.getAttribute('data-session-id');\n\n if (!sessionId) {\n console.error('an element with the class chat-session-history-item with no data-session-id set.');\n\n return;\n }\n\n this.loadSession(sessionId);\n this.showChatScreen();\n });\n }\n\n for (let i = 0; i < config.messages.length; i++) {\n this.addMessage(config.messages[i]);\n }\n\n // Update feedback icons in the DOM after initial messages have rendered.\n this.$nextTick(() => {\n this.refreshAllFeedbackIcons();\n });\n\n // Delegate click for code block copy buttons.\n if (this.chatContainer) {\n this.chatContainer.addEventListener('click', (e) => {\n var btn = e.target.closest('.ai-code-copy-btn');\n if (!btn) {\n return;\n }\n\n var block = btn.closest('.ai-code-block') || btn.closest('pre');\n if (!block) {\n return;\n }\n\n var codeEl = block.querySelector('code');\n if (codeEl) {\n navigator.clipboard.writeText(codeEl.textContent);\n var copiedText = config.codeCopiedText || 'Copied!';\n btn.innerHTML = '<i class=\"fa-solid fa-check\"></i> ' + copiedText;\n setTimeout(() => {\n btn.innerHTML = '<i class=\"fa-regular fa-copy\"></i>';\n }, 2000);\n }\n });\n }\n\n // Initialize speech-to-text microphone button.\n if (this.speechToTextEnabled && config.micButtonElementSelector) {\n this.micButton = document.querySelector(config.micButtonElementSelector);\n if (this.micButton) {\n this.micButton.style.display = '';\n this.micButton.addEventListener('click', () => {\n this.toggleRecording();\n });\n }\n }\n\n // Initialize conversation mode button.\n if (this.conversationModeEnabled && config.conversationButtonElementSelector) {\n this.conversationButton = document.querySelector(config.conversationButtonElementSelector);\n if (this.conversationButton) {\n this.conversationButton.addEventListener('click', () => {\n this.toggleConversationMode();\n });\n }\n }\n\n return true;\n },\n loadSession(sessionId) {\n this.connection.invoke(\"LoadSession\", sessionId).catch(err => console.error(err));\n },\n reloadCurrentSession() {\n\n var sessionId = this.getSessionId();\n if (sessionId) {\n this.loadSession(sessionId);\n }\n },\n initializeSession(sessionId, force) {\n if (this.isSessionStarted && !force) {\n if (sessionId && this.getSessionId() === sessionId) {\n this.resolvePendingSessionRequest(sessionId);\n }\n\n return\n }\n this.fireEvent(new CustomEvent(\"initializingSessionOpenAIChat\", { detail: { sessionId: sessionId } }))\n this.setSessionId(sessionId);\n this.isSessionStarted = true;\n this.resolvePendingSessionRequest(sessionId);\n\n if (widgetBehavior && typeof widgetBehavior.onSessionInitialized === 'function') {\n widgetBehavior.onSessionInitialized(this, sessionId, config);\n }\n },\n getSessionId() {\n let sessionId = this.inputElement\n ? this.inputElement.getAttribute('data-session-id')\n : null;\n\n if (!sessionId && widgetBehavior && typeof widgetBehavior.resolveSessionId === 'function') {\n sessionId = widgetBehavior.resolveSessionId(this, config);\n }\n\n return sessionId;\n },\n copyResponse(message) {\n const text = message && typeof message === 'object'\n ? message.copyContent ?? message.content ?? ''\n : message ?? '';\n\n navigator.clipboard.writeText(text);\n },\n updateFeedbackIcons(container, userRating) {\n if (!container) {\n return;\n }\n\n var upBtn = container.querySelector('.rate-up-btn');\n var downBtn = container.querySelector('.rate-down-btn');\n\n // Keep feedback icons as simple span-based Font Awesome markup so\n // later state updates do not depend on i2svg replacement.\n if (upBtn) {\n var upClass = userRating === true ? 'fa-solid fa-thumbs-up' : 'fa-regular fa-thumbs-up';\n var upIcon = document.createElement('span');\n upIcon.className = upClass;\n upIcon.style.fontSize = '0.9rem';\n upBtn.textContent = '';\n upBtn.appendChild(upIcon);\n }\n\n if (downBtn) {\n var downClass = userRating === false ? 'fa-solid fa-thumbs-down' : 'fa-regular fa-thumbs-down';\n var downIcon = document.createElement('span');\n downIcon.className = downClass;\n downIcon.style.fontSize = '0.9rem';\n downBtn.textContent = '';\n downBtn.appendChild(downIcon);\n }\n },\n refreshAllFeedbackIcons() {\n var containers = this.$el.querySelectorAll('.ai-chat-message-assistant-feedback');\n\n for (var i = 0; i < containers.length; i++) {\n var msgId = containers[i].getAttribute('data-message-id');\n var msg = this.messages.find(m => m.id === msgId);\n\n if (msg) {\n this.updateFeedbackIcons(containers[i], msg.userRating);\n }\n }\n },\n rateMessage(message, isPositive, event) {\n var sessionId = this.getSessionId();\n\n if (!sessionId || !message.id || !this.connection) {\n return;\n }\n\n // Toggle: clicking the same rating again clears it.\n var newRating = message.userRating === isPositive ? null : isPositive;\n message.userRating = newRating;\n\n // Find the feedback container by message ID for reliable DOM targeting.\n var feedbackContainer = this.$el.querySelector(\n '.ai-chat-message-assistant-feedback[data-message-id=\"' + message.id + '\"]'\n );\n\n this.updateFeedbackIcons(feedbackContainer, newRating);\n\n // Trigger spark animation after Font Awesome has re-processed icons.\n if (newRating !== null && feedbackContainer) {\n setTimeout(() => {\n var btnClass = isPositive ? '.rate-up-btn' : '.rate-down-btn';\n var btn = feedbackContainer.querySelector(btnClass);\n\n if (btn) {\n btn.classList.remove('spark-effect');\n void btn.offsetWidth;\n btn.classList.add('spark-effect');\n btn.addEventListener('animationend', function onEnd() {\n btn.removeEventListener('animationend', onEnd);\n btn.classList.remove('spark-effect');\n });\n }\n }, 50);\n }\n\n this.connection.invoke(\"RateMessage\", sessionId, message.id, isPositive).catch(function (err) {\n console.error('Failed to rate message:', err);\n });\n }\n },\n watch: {\n documents: {\n handler() {\n this.renderDocumentBar();\n if (widgetBehavior && typeof widgetBehavior.onDocumentsChanged === 'function') {\n widgetBehavior.onDocumentsChanged(this, this.documents, config);\n }\n },\n deep: true\n },\n isUploading() { this.renderDocumentBar(); },\n isDocumentOperationPending() { this.renderDocumentBar(); },\n isPlayingAudio() {\n // Reserved for future use — volume-based interrupt detection\n // no longer mutes tracks; browser echo cancellation handles echo.\n },\n isConversationMode(active) {\n // Hide/show mic button.\n if (this.micButton) {\n this.micButton.style.display = active ? 'none' : (this.speechToTextEnabled ? '' : 'none');\n }\n\n // Hide/show send button.\n if (this.buttonElement) {\n this.buttonElement.style.display = active ? 'none' : '';\n }\n\n // Disable/enable textarea.\n if (this.inputElement) {\n this.inputElement.disabled = active;\n if (active) {\n this.inputElement.placeholder = '';\n }\n }\n }\n },\n mounted() {\n (async () => {\n await this.startConnection();\n const isInitialized = this.initializeApp();\n if (isInitialized && hasWidgetConfig && widgetBehavior && typeof widgetBehavior.onMounted === 'function') {\n widgetBehavior.onMounted(this, config);\n }\n\n this.$nextTick(() => {\n refreshFontAwesomeIcons(this.$el);\n this.fontAwesomeObserver = observeFontAwesomeIcons(this.$el);\n });\n })();\n\n window.addEventListener('beforeunload', this.handleBeforeUnload);\n window.addEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n },\n beforeUnmount() {\n window.removeEventListener('beforeunload', this.handleBeforeUnload);\n window.removeEventListener('crestapps-ai-chat-stop-tts', this.handleExternalTtsStop);\n\n if (this.fontAwesomeObserver) {\n this.fontAwesomeObserver.disconnect();\n this.fontAwesomeObserver = null;\n }\n\n this.stopAudio(false);\n\n if (this.stream) {\n this.stream.dispose();\n this.stream = null;\n }\n if (this.connection) {\n this.connection.stop();\n }\n\n if (widgetBehavior && typeof widgetBehavior.onBeforeUnmount === 'function') {\n widgetBehavior.onBeforeUnmount(this, config);\n }\n },\n template: config.messageTemplate\n };\n\n const app = Vue.createApp(appDefinition).mount(config.appElementSelector);\n\n if (widgetBehavior && typeof widgetBehavior.attach === 'function') {\n widgetBehavior.attach(app, config);\n }\n\n return app;\n };\n\n return {\n initialize: initialize\n };\n}();\n\n// Download chart as image via event delegation (DOMPurify strips inline onclick).\ndocument.addEventListener('click', function (e) {\n const btn = e.target.closest('.download-chart-btn');\n if (!btn) {\n return;\n }\n const chartId = btn.getAttribute('data-chart-id');\n const canvas = chartId ? document.getElementById(chartId) : null;\n if (!canvas) {\n console.error('Chart canvas not found:', chartId);\n return;\n }\n const link = document.createElement('a');\n link.download = 'chart-' + chartId + '.png';\n link.href = canvas.toDataURL('image/png');\n link.click();\n});\n\n// Intercept download clicks for data-URI images and convert to blob downloads.\ndocument.addEventListener('click', function (e) {\n const link = e.target.closest('.ai-download-image');\n if (!link) {\n return;\n }\n\n const container = link.closest('.generated-image-container');\n const img = container?.querySelector('img');\n if (!img) {\n return;\n }\n\n const src = img.src;\n if (!src || !src.startsWith('data:')) {\n return; // Normal URL – let the default <a> behaviour handle it.\n }\n\n e.preventDefault();\n\n fetch(src)\n .then(function (res) { return res.blob(); })\n .then(function (blob) {\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = link.getAttribute('download') || 'generated-image.png';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n setTimeout(function () { URL.revokeObjectURL(url); }, 100);\n })\n .catch(function (err) { console.error('Failed to download image:', err); });\n});\n"]}