diff --git a/.gitignore b/.gitignore index 386c032..bee3a5a 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ data.sqlite* # Piper-Stimmmodell (109 MB) — siehe README, wird lokal heruntergeladen server/voices/*.onnx + +# Build-Artefakt, wird aus web/src erzeugt +web/dist/ diff --git a/README.md b/README.md index 327c707..8c5e3ab 100644 --- a/README.md +++ b/README.md @@ -166,12 +166,30 @@ sich das in den Einstellungen. | `calculate` | Arithmetik mit eigenem Parser | | `read_file` | Textdatei unterhalb des Projektverzeichnisses lesen | | `list_files` | Verzeichnis auflisten | -| `remember` | Wichtigen Punkt als gepinnten Ankerpunkt ins Gedächtnis schreiben | +| `remember` | Wichtigen Punkt als Ankerpunkt ins Gedächtnis schreiben — **Rückfrage** | | `recall` | Gedächtnis (Ankerpunkte) durchsuchen | -| `read_webpage` | Öffentliche Website laden, Hauptinhalt als Markdown | +| `read_webpage` | Öffentliche Website laden, Hauptinhalt als Markdown — **Rückfrage** | Aktuelle Liste: `curl -s http://localhost:8788/api/tools` +### Rückfrage vor Werkzeugen mit Außenwirkung + +Werkzeuge mit `requiresConfirmation` laufen erst nach Freigabe. Der Server +schickt eine Rückfrage über den WebSocket, die Oberfläche zeigt Werkzeugname +und die **vollständigen** Argumente, und erst die Antwort löst die Ausführung +aus: + +| Antwort | Wirkung | +|---|---| +| Ablehnen | Werkzeug läuft nicht; das Modell bekommt "vom Nutzer abgelehnt" als Ergebnis und macht ohne weiter | +| Einmal zulassen | Nur dieser eine Aufruf | +| Immer zulassen | Dieses Werkzeug bis zum Neuladen der Seite, pro WebSocket-Verbindung | + +Ohne Antwort gilt nach 2 Minuten „abgelehnt"; dasselbe bei Verbindungsabbruch +und beim Stoppen der Antwort. Läuft ein Werkzeug ohne Rückkanal (Skript, +Test), wird es abgelehnt statt ungefragt ausgeführt — die Bestätigung soll +sich nicht dadurch umgehen lassen, dass niemand zum Fragen da ist. + ## Gedächtnis (Chat-Memory) Das Gedächtnis hat drei Schichten: @@ -219,17 +237,29 @@ Endpunkte: `GET /api/sessions/:id/memory`, `POST /api/sessions/:id/dream`, ### Grenzen -Alle Werkzeuge sind **ausschließlich lesend**. Es gibt nichts, was schreibt, -löscht oder Befehle ausführt — entsprechend braucht es noch keine -Rückfrage pro Aufruf. Das Feld `requiresConfirmation` in -`tools/types.ts` ist bereits vorgesehen, damit die Bestätigungspflicht nicht -nachträglich eingezogen werden muss, sobald ein schreibendes Werkzeug dazukommt. +Kein Werkzeug führt Befehle aus oder verändert Dateien. Zwei haben trotzdem +Außenwirkung und sind deshalb bestätigungspflichtig (siehe oben): -Ausnahme Netzwerk: `read_webpage` lädt öffentliche Websites. Der Abruf ist -geguardet — nur http/https, private Adressbereiche werden nach DNS-Auflösung -abgewiesen (SSRF-Schutz, auch über Weiterleitungen), 15 s Zeitlimit, 2 MB -Fetch-Limit, 25 kB Output-Cap. Der Inhalt wird dem Modell als nicht -vertrauenswürdig markiert (Prompt-Injection aus Webseiten). +- **`read_webpage`** verlässt den Rechner. Die URL selbst ist dabei der + kritische Teil: Fremdinhalt kann das Modell anweisen, Gesprächsinhalte in + eine Adresse zu packen und so nach außen zu geben. Deshalb bekommt der + Nutzer die vollständige URL vor dem Abruf zu sehen. +- **`remember`** schreibt dauerhaft und sessionübergreifend ins Gedächtnis. + Modell-Anker werden **nicht** gepinnt — sie unterliegen dem normalen Verfall. + Gepinnt wird nur, was der Nutzer im Gedächtnis-Panel selbst mit ★ markiert. + +Der Abruf in `read_webpage` ist mehrfach geguardet: nur http/https, private +Adressbereiche abgewiesen (auch über Weiterleitungen), 15 s Zeitlimit, 2 MB +Fetch-Limit, 25 kB Output-Cap. Die DNS-Auflösung ist **an die Verbindung +gepinnt** (`lookup`-Hook in `tools/web.ts`) — geprüft wird genau die Adresse, +die dann auch verbunden wird. Ein getrennter Vorab-Check, wie ihn `fetch` +erzwingt, ließe DNS-Rebinding zu: öffentlich beim Prüfen, `127.0.0.1` beim +Verbinden. Der Inhalt wird dem Modell zusätzlich als nicht vertrauenswürdig +markiert (Prompt-Injection aus Webseiten). + +Ein Nutzer-Abbruch („Stop") beendet auch ein laufendes Werkzeug: `ctx.signal` +kombiniert Abbruch und Zeitlimit und geht bis in den offenen Netzwerkabruf +durch. Der Dateizugriff liegt in einer Sandbox: Jeder Pfad wird über `realpath` aufgelöst (löst auch Symlinks auf) und muss danach unterhalb der Wurzel liegen, @@ -260,10 +290,17 @@ Läuft das Frontend woanders, die Origin ergänzen: ALLOWED_ORIGINS=http://192.168.1.50:5174 ``` -Weitere Maßnahmen: Rate-Limits auf `/api/stt` (10/min) und `/api/tts` (30/min), +Weitere Maßnahmen: Rate-Limits auf `/api/stt` (10/min), `/api/tts` (30/min), +`/dream` (4/min) und auf Chats pro WebSocket-Verbindung (30/min), Format-Whitelist per Magic Bytes vor dem `ffmpeg`-Aufruf, und Fehlerdetails landen im Server-Log statt in der HTTP-Antwort. +Bewusst **nicht** abgesichert: Anfragen ohne `Origin`-Header werden +durchgelassen (`isOriginAllowed`). Für Browser-Clients trägt die Prüfung, denn +`fetch` und Formular-POSTs senden immer eine Origin — jedes lokale Programm +kommt aber ungefragt an die API. Das ist für den Einzelplatzbetrieb so +gewollt; für alles andere gilt der Absatz unten. + Für externen Zugriff reicht ein Reverse-Proxy **nicht** — davor gehört eine echte Authentifizierung. diff --git a/server/src/index.ts b/server/src/index.ts index 48138c3..e68ec58 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -2,6 +2,7 @@ import Fastify from "fastify"; import cors from "@fastify/cors"; import { WebSocketServer, WebSocket } from "ws"; import type { IncomingMessage } from "node:http"; +import { randomUUID } from "node:crypto"; import { readFileSync } from "node:fs"; import path from "node:path"; import * as dbmod from "./db.js"; @@ -35,6 +36,15 @@ const PORT = Number(process.env.PORT ?? 8788); const OLLAMA_URL = process.env.OLLAMA_URL ?? "http://localhost:11434"; const MODEL = process.env.MODEL ?? "qwen3.5:latest"; +/** + * Wie lange auf die Freigabe eines bestätigungspflichtigen Werkzeugs gewartet + * wird. Danach gilt "abgelehnt" — eine Antwort soll nicht ewig hängen, nur + * weil niemand am Rechner sitzt. + */ +const CONFIRM_TIMEOUT_MS = 120_000; +/** Chats pro Minute und Verbindung. Bremst Schleifen und OpenRouter-Kosten. */ +const CHAT_LIMIT_PER_MIN = 30; + const DREAM_IDLE_MS = 180_000; const DREAM_BATCH = 10; const dreamTimers = new Map>(); @@ -325,7 +335,54 @@ function broadcast(data: unknown) { } wss.on("connection", (socket: WebSocket, _req: IncomingMessage) => { - let activeAbort: AbortController | null = null; + // Mehrere Antworten können parallel laufen (zweite Nachricht bei laufendem + // Stream). Ein einzelnes Feld würde beim Abbruch nur die letzte erwischen. + const activeAborts = new Set(); + const pendingConfirms = new Map(); + /** Werkzeuge, die der Nutzer für diese Verbindung generell freigegeben hat. */ + const alwaysAllowed = new Set(); + const chatLimiter = createRateLimiter(CHAT_LIMIT_PER_MIN, 60_000); + + function denyAllConfirms() { + for (const entry of [...pendingConfirms.values()]) entry.decide(false); + } + + /** + * Fragt den Nutzer, bevor ein Werkzeug mit Außenwirkung läuft. Bricht die + * Verbindung weg oder bleibt die Antwort aus, gilt das als Ablehnung. + */ + function confirmTool( + messageId: string, + name: string, + args: Record, + ): Promise { + if (alwaysAllowed.has(name)) return Promise.resolve(true); + if (socket.readyState !== WebSocket.OPEN) return Promise.resolve(false); + + const id = randomUUID(); + return new Promise((resolve) => { + const timer = setTimeout(() => decide(false), CONFIRM_TIMEOUT_MS); + function decide(approved: boolean) { + clearTimeout(timer); + pendingConfirms.delete(id); + resolve(approved); + } + pendingConfirms.set(id, { name, decide }); + socket.send( + JSON.stringify({ + type: "tool-confirm", + id, + messageId, + name, + // Ungekürzt: der Nutzer muss genau sehen, was rausgeht — bei + // read_webpage ist die vollständige URL der eigentliche Punkt. + args: JSON.stringify(args), + }), + ); + }); + } + + socket.on("close", denyAllConfirms); socket.on("message", async (raw: Buffer) => { let msg: Record; @@ -336,13 +393,31 @@ wss.on("connection", (socket: WebSocket, _req: IncomingMessage) => { return; } + if (msg.type === "tool-confirm-reply") { + const entry = pendingConfirms.get(String(msg.id ?? "")); + if (!entry) return; + // Der Werkzeugname kommt aus dem Server-Zustand, nicht aus der Antwort: + // sonst könnte eine Freigabe für ein Werkzeug ein anderes freischalten. + if (msg.decision === "always") alwaysAllowed.add(entry.name); + entry.decide(msg.decision === "allow" || msg.decision === "always"); + return; + } + if (msg.type === "abort") { - activeAbort?.abort(); + for (const controller of activeAborts) controller.abort(); + denyAllConfirms(); return; } if (msg.type !== "chat") return; + if (!chatLimiter("chat")) { + socket.send( + JSON.stringify({ type: "error", error: "Zu viele Anfragen — kurz warten." }), + ); + return; + } + const sessionId = String(msg.sessionId ?? ""); const content = String(msg.content ?? "").trim(); @@ -423,7 +498,8 @@ wss.on("connection", (socket: WebSocket, _req: IncomingMessage) => { const assistantRow = dbmod.insertMessage(session.id, "assistant", ""); socket.send(JSON.stringify({ type: "assistant-start", message: assistantRow })); - activeAbort = new AbortController(); + const abort = new AbortController(); + activeAborts.add(abort); let full = ""; let thinking = ""; const callbacks = { @@ -463,6 +539,9 @@ wss.on("connection", (socket: WebSocket, _req: IncomingMessage) => { JSON.stringify({ type: "tool-result", messageId: assistantRow.id, name, ok, durationMs }), ); }, + onToolConfirm(name: string, args: Record) { + return confirmTool(assistantRow.id, name, args); + }, }; try { @@ -479,10 +558,10 @@ wss.on("connection", (socket: WebSocket, _req: IncomingMessage) => { }, apiKey, callbacks, - activeAbort.signal, + abort.signal, ); } else { - await streamChat(history, system, opts, callbacks, activeAbort.signal); + await streamChat(history, system, opts, callbacks, abort.signal); } dbmod.updateAssistantMessage(assistantRow.id, full.trim(), thinking.trim() || null); mem.appendEvent(session.id, "message", { @@ -493,7 +572,7 @@ wss.on("connection", (socket: WebSocket, _req: IncomingMessage) => { JSON.stringify({ type: "done", messageId: assistantRow.id, - aborted: activeAbort.signal.aborted, + aborted: abort.signal.aborted, }), ); broadcast({ type: "sessions-changed" }); @@ -507,7 +586,7 @@ wss.on("connection", (socket: WebSocket, _req: IncomingMessage) => { } } catch (err) { const aborted = - activeAbort.signal.aborted || + abort.signal.aborted || (err instanceof Error && err.name === "AbortError"); dbmod.updateAssistantMessage(assistantRow.id, full.trim(), thinking.trim() || null); if (aborted) { @@ -522,7 +601,7 @@ wss.on("connection", (socket: WebSocket, _req: IncomingMessage) => { ); } } finally { - activeAbort = null; + activeAborts.delete(abort); } }); }); diff --git a/server/src/ollama.ts b/server/src/ollama.ts index 0f65020..b402635 100644 --- a/server/src/ollama.ts +++ b/server/src/ollama.ts @@ -24,6 +24,11 @@ export interface StreamCallbacks { onToolCall?(name: string, args: Record): void; /** Werkzeug ist fertig. */ onToolResult?(name: string, ok: boolean, durationMs: number): void; + /** + * Holt die Freigabe des Nutzers für ein bestätigungspflichtiges Werkzeug. + * Fehlt der Rückkanal, lehnt `runTool` solche Werkzeuge ab. + */ + onToolConfirm?(name: string, args: Record): Promise; } /** Muss zum OLLAMA_URL in index.ts passen — vorher war der Host hier hartkodiert. */ @@ -200,7 +205,13 @@ export async function streamChat( for (const call of toolCalls) { cb.onToolCall?.(call.name, call.arguments); - const result = await runTool(call, { signal, sessionId: opts.sessionId }); + const result = await runTool(call, { + signal, + sessionId: opts.sessionId, + confirm: cb.onToolConfirm + ? (c) => cb.onToolConfirm!(c.name, c.arguments) + : undefined, + }); cb.onToolResult?.(result.name, result.ok, result.durationMs); messages.push({ role: "tool", tool_name: result.name, content: result.content }); } diff --git a/server/src/security.ts b/server/src/security.ts index 183be27..58046bc 100644 --- a/server/src/security.ts +++ b/server/src/security.ts @@ -39,6 +39,9 @@ interface Bucket { resetAt: number; } +/** Ab dieser Größe wird aufgeräumt — reicht für jede realistische Nutzung. */ +const MAX_BUCKETS = 1000; + /** * Einfacher In-Memory-Zähler pro Zeitfenster. Bremst teure Endpunkte * (Whisper läuft bis zu 180 s) gegen versehentliche oder böswillige Fluten. @@ -46,8 +49,16 @@ interface Bucket { export function createRateLimiter(limit: number, windowMs: number) { const buckets = new Map(); + /** Abgelaufene Zähler wegräumen, damit die Map nicht unbegrenzt wächst. */ + function sweep(now: number) { + for (const [key, bucket] of buckets) { + if (now >= bucket.resetAt) buckets.delete(key); + } + } + return function allow(key: string): boolean { const now = Date.now(); + if (buckets.size > MAX_BUCKETS) sweep(now); const bucket = buckets.get(key); if (!bucket || now >= bucket.resetAt) { diff --git a/server/src/tools/index.ts b/server/src/tools/index.ts index 3a6bc9a..84431f5 100644 --- a/server/src/tools/index.ts +++ b/server/src/tools/index.ts @@ -43,6 +43,11 @@ export function toolNames(): string[] { return REGISTRY.map((t) => t.name); } +/** + * Zeitlimit für das Ergebnis. Der `signal` unten bricht das Werkzeug zusätzlich + * ab — beides zusammen, weil ein Werkzeug den Signal auch ignorieren kann und + * die Antwort dann trotzdem nicht ewig hängen darf. + */ function withTimeout(p: Promise, ms: number, name: string): Promise { return new Promise((resolve, reject) => { const timer = setTimeout( @@ -74,9 +79,26 @@ export async function runTool(call: ToolCall, ctx: ToolContext): Promise { + if (!ctx.confirm) return false; + try { + return await ctx.confirm(call); + } catch { + return false; + } +} diff --git a/server/src/tools/remember.ts b/server/src/tools/remember.ts index b1ee7b0..bd3fe4f 100644 --- a/server/src/tools/remember.ts +++ b/server/src/tools/remember.ts @@ -6,7 +6,7 @@ import type { Tool } from "./types.js"; export const rememberTool: Tool = { name: "remember", description: - "Speichert einen dauerhaft wichtigen Punkt als Ankerpunkt im Gedächtnis des aktuellen Chats. Nur für Fakten, Entscheidungen, Präferenzen oder offene Punkte — nicht für flüchtige Inhalte.", + "Speichert einen dauerhaft wichtigen Punkt als Ankerpunkt im Gedächtnis des aktuellen Chats. Nur für Fakten, Entscheidungen, Präferenzen oder offene Punkte — nicht für flüchtige Inhalte. Der Nutzer muss jeden Aufruf freigeben.", requiresConfirmation: true, parameters: { type: "object", @@ -27,6 +27,10 @@ export const rememberTool: Tool = { const text = String(args.text ?? "").trim(); if (!ctx.sessionId) throw new ToolError("Keine Sitzung für das Gedächtnis bekannt"); if (text.length < 6) throw new ToolError("Text ist zu kurz, um ihn zu merken"); + // Bewusst ungepinnt: ein vom Modell gesetzter Anker soll dem normalen + // Verfall unterliegen. Gepinnt wird nur, was der Nutzer im + // Gedächtnis-Panel selbst mit ★ markiert — sonst überlebt ein einmal + // untergeschobener "Fakt" jede Traumphase und jede Rekonstruktion. const result = upsertAnchor(ctx.sessionId, { text, kind: ANCHOR_KINDS.includes(args.kind as AnchorKind) @@ -34,7 +38,6 @@ export const rememberTool: Tool = { : "fact", importance: 0.9, origin: "model", - pinned: true, }); return { stored: result, text }; }, diff --git a/server/src/tools/types.ts b/server/src/tools/types.ts index aec6172..2373f4f 100644 --- a/server/src/tools/types.ts +++ b/server/src/tools/types.ts @@ -10,6 +10,12 @@ export interface ToolContext { signal: AbortSignal; /** Sitzung des aktuellen Chats — für Werkzeuge mit Gedächtniszugriff. */ sessionId?: string; + /** + * Holt die Freigabe des Nutzers für ein Werkzeug mit Außenwirkung. + * Fehlt der Rückkanal, werden bestätigungspflichtige Werkzeuge abgelehnt — + * lieber nicht ausführen als ungefragt. + */ + confirm?(call: ToolCall): Promise; } export interface Tool { @@ -17,9 +23,9 @@ export interface Tool { description: string; parameters: ToolSchema; /** - * Kennzeichnet Werkzeuge mit Außenwirkung (schreibend, Netzwerk, Server). - * Bisher gibt es nur lesende Werkzeuge; das Feld existiert, damit die - * Bestätigungspflicht später nicht nachträglich eingezogen werden muss. + * Kennzeichnet Werkzeuge mit Außenwirkung (Netzwerk, dauerhafter Speicher). + * `runTool` fragt vor der Ausführung über `ToolContext.confirm` beim Nutzer + * nach und lehnt ab, wenn keine Freigabe kommt. */ requiresConfirmation?: boolean; /** Gibt zurück, was dem Modell als Ergebnis gezeigt wird. */ diff --git a/server/src/tools/web.ts b/server/src/tools/web.ts index 6368ed9..67f422e 100644 --- a/server/src/tools/web.ts +++ b/server/src/tools/web.ts @@ -1,5 +1,8 @@ -import { lookup } from "node:dns/promises"; -import { isIP } from "node:net"; +import dns from "node:dns"; +import { request as httpRequest, type IncomingMessage } from "node:http"; +import { request as httpsRequest } from "node:https"; +import { isIP, type LookupFunction } from "node:net"; +import { createBrotliDecompress, createGunzip, createInflate } from "node:zlib"; import { parseHTML } from "linkedom"; import { Defuddle } from "defuddle/node"; import { ToolError } from "./types.js"; @@ -9,6 +12,8 @@ const TIMEOUT_MS = 15_000; const MAX_HTML_BYTES = 2 * 1024 * 1024; const MAX_CONTENT_CHARS = 25_000; const MAX_REDIRECTS = 5; +const ALLOWED_TYPES = + /text\/html|text\/plain|application\/xhtml|application\/json|application\/xml|text\/markdown/; const USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36 agenttwo-readweb/1.0"; @@ -39,23 +44,53 @@ function isPrivateIP(ip: string): boolean { first.startsWith("fe9") || first.startsWith("fea") || first.startsWith("feb"); } +/** `new URL().hostname` liefert IPv6-Literale in Klammern: [::1] -> ::1. */ +function bareHost(hostname: string): string { + return hostname.startsWith("[") && hostname.endsWith("]") + ? hostname.slice(1, -1) + : hostname; +} + /** - * SSRF-Schutz: Der Server löst den Host selbst auf und weist private Bereiche - * ab. Ohne das könnte das Modell http://localhost:8788/api/sessions lesen — - * der Origin-Check schützt nicht vor server-eigenem fetch. + * DNS-Auflösung, die private Adressen ablehnt — eingehängt als `lookup` der + * HTTP-Verbindung. + * + * Entscheidend ist, dass genau diese Auflösung auch verbunden wird. Ein + * getrennter Vorab-Check (wie ihn `fetch` erzwingt, das selbst noch einmal + * auflöst) ließe DNS-Rebinding zu: öffentlich bei der Prüfung, 127.0.0.1 beim + * Verbinden. + */ +const guardedLookup: LookupFunction = (hostname, options, callback) => { + dns.lookup(hostname, options, (err, address, family) => { + if (err) return callback(err, "", 0); + const addresses = Array.isArray(address) ? address : [{ address, family }]; + for (const a of addresses) { + if (isPrivateIP(a.address)) { + return callback(new ToolError("Zugriff auf private Adressen ist gesperrt"), "", 0); + } + } + callback(null, address as string, family); + }); +}; + +/** + * Vorab-Prüfung, rein für die Fehlermeldung: so bekommt das Modell "private + * Adresse gesperrt" statt eines generischen Verbindungsfehlers. Die + * verbindliche Grenze ist `guardedLookup`. */ async function assertPublicHost(hostname: string): Promise { - if (isIP(hostname)) { - if (isPrivateIP(hostname)) throw new ToolError("Zugriff auf private Adressen ist gesperrt"); + const host = bareHost(hostname); + if (isIP(host)) { + if (isPrivateIP(host)) throw new ToolError("Zugriff auf private Adressen ist gesperrt"); return; } let addrs: { address: string }[]; try { - addrs = await lookup(hostname, { all: true, verbatim: true }); + addrs = await dns.promises.lookup(host, { all: true, verbatim: true }); } catch { - throw new ToolError(`Host nicht auflösbar: ${hostname}`); + throw new ToolError(`Host nicht auflösbar: ${host}`); } - if (addrs.length === 0) throw new ToolError(`Host nicht auflösbar: ${hostname}`); + if (addrs.length === 0) throw new ToolError(`Host nicht auflösbar: ${host}`); for (const a of addrs) { if (isPrivateIP(a.address)) { throw new ToolError("Zugriff auf private Adressen ist gesperrt"); @@ -76,49 +111,93 @@ function assertHttpUrl(raw: string): URL { return url; } -async function fetchWithGuards(rawUrl: string): Promise<{ url: string; body: string }> { - let url = assertHttpUrl(rawUrl).toString(); +/** Ein GET mit gepinnter Auflösung. Weiterleitungen bleiben Sache des Aufrufers. */ +function send(url: URL, signal: AbortSignal): Promise { + const request = url.protocol === "https:" ? httpsRequest : httpRequest; + return new Promise((resolve, reject) => { + const req = request( + url, + { + method: "GET", + lookup: guardedLookup, + signal, + timeout: TIMEOUT_MS, + headers: { + "User-Agent": USER_AGENT, + Accept: "text/html, text/plain, application/xhtml+xml", + "Accept-Encoding": "gzip, deflate, br", + }, + }, + resolve, + ); + req.on("timeout", () => req.destroy(new ToolError("Zeitlimit beim Abruf überschritten"))); + req.on("error", (err) => { + if (err instanceof ToolError) return reject(err); + if (signal.aborted) return reject(new ToolError("Abruf abgebrochen")); + reject(new ToolError(`Abruf fehlgeschlagen: ${url.host}`)); + }); + req.end(); + }); +} + +/** Antwortkörper bis MAX_HTML_BYTES lesen, komprimierte Antworten auspacken. */ +async function readCapped(res: IncomingMessage): Promise { + const encoding = String(res.headers["content-encoding"] ?? "").toLowerCase(); + const stream = + encoding === "gzip" ? res.pipe(createGunzip()) + : encoding === "deflate" ? res.pipe(createInflate()) + : encoding === "br" ? res.pipe(createBrotliDecompress()) + : res; + + const decoder = new TextDecoder(); + let html = ""; + let bytes = 0; + try { + for await (const chunk of stream as AsyncIterable) { + bytes += chunk.byteLength; + html += decoder.decode(chunk, { stream: true }); + if (bytes > MAX_HTML_BYTES) break; + } + } catch { + // Abbruch mitten im Strom: was schon da ist, reicht dem Extraktor meist. + if (!html) throw new ToolError("Antwort konnte nicht gelesen werden"); + } finally { + res.destroy(); + } + return html; +} + +async function fetchWithGuards( + rawUrl: string, + signal: AbortSignal, +): Promise<{ url: string; body: string }> { + let url = assertHttpUrl(rawUrl); for (let hop = 0; hop <= MAX_REDIRECTS; hop++) { - await assertPublicHost(new URL(url).hostname); + await assertPublicHost(url.hostname); - const res = await fetch(url, { - redirect: "manual", - headers: { "User-Agent": USER_AGENT, Accept: "text/html, text/plain, application/xhtml+xml" }, - signal: AbortSignal.timeout(TIMEOUT_MS), - }); + const res = await send(url, signal); + const status = res.statusCode ?? 0; - if (res.status >= 300 && res.status < 400) { - const location = res.headers.get("location"); - if (!location) break; - url = new URL(location, url).toString(); - assertHttpUrl(url); + if (status >= 300 && status < 400) { + const location = res.headers.location; + res.destroy(); + if (!location) throw new ToolError(`Weiterleitung ohne Ziel (HTTP ${status})`); + url = assertHttpUrl(new URL(location, url).toString()); continue; } - if (!res.ok) throw new ToolError(`HTTP ${res.status} für ${url}`); + if (status < 200 || status >= 300) { + res.destroy(); + throw new ToolError(`HTTP ${status} für ${url}`); + } - const type = (res.headers.get("content-type") ?? "").toLowerCase(); - if (!/text\/html|text\/plain|application\/xhtml|application\/json|application\/xml|text\/markdown/.test(type)) { + const type = String(res.headers["content-type"] ?? "").toLowerCase(); + if (!ALLOWED_TYPES.test(type)) { + res.destroy(); throw new ToolError(`Nicht unterstützter Inhaltstyp: ${type || "unbekannt"}`); } - const reader = res.body?.getReader(); - if (!reader) throw new ToolError("Leere Antwort"); - const decoder = new TextDecoder(); - let html = ""; - let bytes = 0; - for (;;) { - const { done, value } = await reader.read(); - if (done) break; - bytes += value.byteLength; - if (bytes > MAX_HTML_BYTES) { - void reader.cancel(); - html += decoder.decode(value, { stream: true }); - break; - } - html += decoder.decode(value, { stream: true }); - } - return { url, body: html }; + return { url: url.toString(), body: await readCapped(res) }; } throw new ToolError(`Zu viele Weiterleitungen (> ${MAX_REDIRECTS})`); } @@ -126,7 +205,10 @@ async function fetchWithGuards(rawUrl: string): Promise<{ url: string; body: str export const readWebpageTool: Tool = { name: "read_webpage", description: - "Liest eine öffentliche Website und gibt den Hauptinhalt als Markdown zurück (Titel, Autor, Text). Nur für öffentliche URLs — lokale/private Adressen werden abgewiesen.", + "Liest eine öffentliche Website und gibt den Hauptinhalt als Markdown zurück (Titel, Autor, Text). Nur für öffentliche URLs — lokale/private Adressen werden abgewiesen. Der Nutzer muss jeden Aufruf freigeben.", + // Der Abruf verlässt den Rechner: die URL selbst ist ein Kanal nach außen. + // Deshalb sieht der Nutzer sie vor dem Aufruf und gibt sie frei. + requiresConfirmation: true, parameters: { type: "object", properties: { @@ -134,11 +216,11 @@ export const readWebpageTool: Tool = { }, required: ["url"], }, - async run(args) { + async run(args, ctx) { const raw = String(args.url ?? "").trim(); if (!raw) throw new ToolError("url fehlt"); - const { url, body } = await fetchWithGuards(raw); + const { url, body } = await fetchWithGuards(raw, ctx.signal); const { document } = parseHTML(body); const result = await Defuddle(document, url, { markdown: true }); diff --git a/web/dist/assets/index-CQxQcFyH.js b/web/dist/assets/index-CQxQcFyH.js deleted file mode 100644 index b167acb..0000000 --- a/web/dist/assets/index-CQxQcFyH.js +++ /dev/null @@ -1,74 +0,0 @@ -var Dh=Object.defineProperty;var Ph=(e,i,r)=>i in e?Dh(e,i,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[i]=r;var Ti=(e,i,r)=>Ph(e,typeof i!="symbol"?i+"":i,r);(function(){const i=document.createElement("link").relList;if(i&&i.supports&&i.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))l(s);new MutationObserver(s=>{for(const c of s)if(c.type==="childList")for(const u of c.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&l(u)}).observe(document,{childList:!0,subtree:!0});function r(s){const c={};return s.integrity&&(c.integrity=s.integrity),s.referrerPolicy&&(c.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?c.credentials="include":s.crossOrigin==="anonymous"?c.credentials="omit":c.credentials="same-origin",c}function l(s){if(s.ep)return;s.ep=!0;const c=r(s);fetch(s.href,c)}})();function Co(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var js={exports:{}},yo={},Gs={exports:{}},Fe={};/** - * @license React - * react.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var ff;function zh(){if(ff)return Fe;ff=1;var e=Symbol.for("react.element"),i=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),l=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),c=Symbol.for("react.provider"),u=Symbol.for("react.context"),f=Symbol.for("react.forward_ref"),p=Symbol.for("react.suspense"),m=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),h=Symbol.iterator;function b(R){return R===null||typeof R!="object"?null:(R=h&&R[h]||R["@@iterator"],typeof R=="function"?R:null)}var E={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},w=Object.assign,N={};function O(R,$,k){this.props=R,this.context=$,this.refs=N,this.updater=k||E}O.prototype.isReactComponent={},O.prototype.setState=function(R,$){if(typeof R!="object"&&typeof R!="function"&&R!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,R,$,"setState")},O.prototype.forceUpdate=function(R){this.updater.enqueueForceUpdate(this,R,"forceUpdate")};function S(){}S.prototype=O.prototype;function L(R,$,k){this.props=R,this.context=$,this.refs=N,this.updater=k||E}var P=L.prototype=new S;P.constructor=L,w(P,O.prototype),P.isPureReactComponent=!0;var q=Array.isArray,X=Object.prototype.hasOwnProperty,M={current:null},le={key:!0,ref:!0,__self:!0,__source:!0};function de(R,$,k){var ke,Me={},we=null,$e=null;if($!=null)for(ke in $.ref!==void 0&&($e=$.ref),$.key!==void 0&&(we=""+$.key),$)X.call($,ke)&&!le.hasOwnProperty(ke)&&(Me[ke]=$[ke]);var De=arguments.length-2;if(De===1)Me.children=k;else if(1>>1,$=V[R];if(0>>1;Rs(Me,v))we<$&&0>s($e,Me)?(V[R]=$e,V[we]=v,R=we):(V[R]=Me,V[ke]=v,R=ke);else if(we<$&&0>s($e,v))V[R]=$e,V[we]=v,R=we;else break e}}return ae}function s(V,ae){var v=V.sortIndex-ae.sortIndex;return v!==0?v:V.id-ae.id}if(typeof performance=="object"&&typeof performance.now=="function"){var c=performance;e.unstable_now=function(){return c.now()}}else{var u=Date,f=u.now();e.unstable_now=function(){return u.now()-f}}var p=[],m=[],y=1,h=null,b=3,E=!1,w=!1,N=!1,O=typeof setTimeout=="function"?setTimeout:null,S=typeof clearTimeout=="function"?clearTimeout:null,L=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function P(V){for(var ae=r(m);ae!==null;){if(ae.callback===null)l(m);else if(ae.startTime<=V)l(m),ae.sortIndex=ae.expirationTime,i(p,ae);else break;ae=r(m)}}function q(V){if(N=!1,P(V),!w)if(r(p)!==null)w=!0,se(X);else{var ae=r(m);ae!==null&&z(q,ae.startTime-V)}}function X(V,ae){w=!1,N&&(N=!1,S(de),de=-1),E=!0;var v=b;try{for(P(ae),h=r(p);h!==null&&(!(h.expirationTime>ae)||V&&!j());){var R=h.callback;if(typeof R=="function"){h.callback=null,b=h.priorityLevel;var $=R(h.expirationTime<=ae);ae=e.unstable_now(),typeof $=="function"?h.callback=$:h===r(p)&&l(p),P(ae)}else l(p);h=r(p)}if(h!==null)var k=!0;else{var ke=r(m);ke!==null&&z(q,ke.startTime-ae),k=!1}return k}finally{h=null,b=v,E=!1}}var M=!1,le=null,de=-1,K=5,A=-1;function j(){return!(e.unstable_now()-AV||125R?(V.sortIndex=v,i(m,V),r(p)===null&&V===r(m)&&(N?(S(de),de=-1):N=!0,z(q,v-R))):(V.sortIndex=$,i(p,V),w||E||(w=!0,se(X))),V},e.unstable_shouldYield=j,e.unstable_wrapCallback=function(V){var ae=b;return function(){var v=b;b=ae;try{return V.apply(this,arguments)}finally{b=v}}}})(Vs)),Vs}var yf;function Hh(){return yf||(yf=1,Ws.exports=$h()),Ws.exports}/** - * @license React - * react-dom.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */var bf;function jh(){if(bf)return Yt;bf=1;var e=Au(),i=Hh();function r(t){for(var n="https://reactjs.org/docs/error-decoder.html?invariant="+t,o=1;o"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),p=Object.prototype.hasOwnProperty,m=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,y={},h={};function b(t){return p.call(h,t)?!0:p.call(y,t)?!1:m.test(t)?h[t]=!0:(y[t]=!0,!1)}function E(t,n,o,a){if(o!==null&&o.type===0)return!1;switch(typeof n){case"function":case"symbol":return!0;case"boolean":return a?!1:o!==null?!o.acceptsBooleans:(t=t.toLowerCase().slice(0,5),t!=="data-"&&t!=="aria-");default:return!1}}function w(t,n,o,a){if(n===null||typeof n>"u"||E(t,n,o,a))return!0;if(a)return!1;if(o!==null)switch(o.type){case 3:return!n;case 4:return n===!1;case 5:return isNaN(n);case 6:return isNaN(n)||1>n}return!1}function N(t,n,o,a,d,g,_){this.acceptsBooleans=n===2||n===3||n===4,this.attributeName=a,this.attributeNamespace=d,this.mustUseProperty=o,this.propertyName=t,this.type=n,this.sanitizeURL=g,this.removeEmptyString=_}var O={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(t){O[t]=new N(t,0,!1,t,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(t){var n=t[0];O[n]=new N(n,1,!1,t[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(t){O[t]=new N(t,2,!1,t.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(t){O[t]=new N(t,2,!1,t,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(t){O[t]=new N(t,3,!1,t.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(t){O[t]=new N(t,3,!0,t,null,!1,!1)}),["capture","download"].forEach(function(t){O[t]=new N(t,4,!1,t,null,!1,!1)}),["cols","rows","size","span"].forEach(function(t){O[t]=new N(t,6,!1,t,null,!1,!1)}),["rowSpan","start"].forEach(function(t){O[t]=new N(t,5,!1,t.toLowerCase(),null,!1,!1)});var S=/[\-:]([a-z])/g;function L(t){return t[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(t){var n=t.replace(S,L);O[n]=new N(n,1,!1,t,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(t){var n=t.replace(S,L);O[n]=new N(n,1,!1,t,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(t){var n=t.replace(S,L);O[n]=new N(n,1,!1,t,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(t){O[t]=new N(t,1,!1,t.toLowerCase(),null,!1,!1)}),O.xlinkHref=new N("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(t){O[t]=new N(t,1,!1,t.toLowerCase(),null,!0,!0)});function P(t,n,o,a){var d=O.hasOwnProperty(n)?O[n]:null;(d!==null?d.type!==0:a||!(2x||d[_]!==g[x]){var C=` -`+d[_].replace(" at new "," at ");return t.displayName&&C.includes("")&&(C=C.replace("",t.displayName)),C}while(1<=_&&0<=x);break}}}finally{k=!1,Error.prepareStackTrace=o}return(t=t?t.displayName||t.name:"")?$(t):""}function Me(t){switch(t.tag){case 5:return $(t.type);case 16:return $("Lazy");case 13:return $("Suspense");case 19:return $("SuspenseList");case 0:case 2:case 15:return t=ke(t.type,!1),t;case 11:return t=ke(t.type.render,!1),t;case 1:return t=ke(t.type,!0),t;default:return""}}function we(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case le:return"Fragment";case M:return"Portal";case K:return"Profiler";case de:return"StrictMode";case J:return"Suspense";case Q:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case j:return(t.displayName||"Context")+".Consumer";case A:return(t._context.displayName||"Context")+".Provider";case U:var n=t.render;return t=t.displayName,t||(t=n.displayName||n.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case G:return n=t.displayName||null,n!==null?n:we(t.type)||"Memo";case se:n=t._payload,t=t._init;try{return we(t(n))}catch{}}return null}function $e(t){var n=t.type;switch(t.tag){case 24:return"Cache";case 9:return(n.displayName||"Context")+".Consumer";case 10:return(n._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=n.render,t=t.displayName||t.name||"",n.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return n;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return we(n);case 8:return n===de?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof n=="function")return n.displayName||n.name||null;if(typeof n=="string")return n}return null}function De(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Ge(t){var n=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(n==="checkbox"||n==="radio")}function Ze(t){var n=Ge(t)?"checked":"value",o=Object.getOwnPropertyDescriptor(t.constructor.prototype,n),a=""+t[n];if(!t.hasOwnProperty(n)&&typeof o<"u"&&typeof o.get=="function"&&typeof o.set=="function"){var d=o.get,g=o.set;return Object.defineProperty(t,n,{configurable:!0,get:function(){return d.call(this)},set:function(_){a=""+_,g.call(this,_)}}),Object.defineProperty(t,n,{enumerable:o.enumerable}),{getValue:function(){return a},setValue:function(_){a=""+_},stopTracking:function(){t._valueTracker=null,delete t[n]}}}}function Zt(t){t._valueTracker||(t._valueTracker=Ze(t))}function rr(t){if(!t)return!1;var n=t._valueTracker;if(!n)return!0;var o=n.getValue(),a="";return t&&(a=Ge(t)?t.checked?"true":"false":t.value),t=a,t!==o?(n.setValue(t),!0):!1}function An(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function Hn(t,n){var o=n.checked;return v({},n,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:o??t._wrapperState.initialChecked})}function jn(t,n){var o=n.defaultValue==null?"":n.defaultValue,a=n.checked!=null?n.checked:n.defaultChecked;o=De(n.value!=null?n.value:o),t._wrapperState={initialChecked:a,initialValue:o,controlled:n.type==="checkbox"||n.type==="radio"?n.checked!=null:n.value!=null}}function Ke(t,n){n=n.checked,n!=null&&P(t,"checked",n,!1)}function Jt(t,n){Ke(t,n);var o=De(n.value),a=n.type;if(o!=null)a==="number"?(o===0&&t.value===""||t.value!=o)&&(t.value=""+o):t.value!==""+o&&(t.value=""+o);else if(a==="submit"||a==="reset"){t.removeAttribute("value");return}n.hasOwnProperty("value")?Rn(t,n.type,o):n.hasOwnProperty("defaultValue")&&Rn(t,n.type,De(n.defaultValue)),n.checked==null&&n.defaultChecked!=null&&(t.defaultChecked=!!n.defaultChecked)}function an(t,n,o){if(n.hasOwnProperty("value")||n.hasOwnProperty("defaultValue")){var a=n.type;if(!(a!=="submit"&&a!=="reset"||n.value!==void 0&&n.value!==null))return;n=""+t._wrapperState.initialValue,o||n===t.value||(t.value=n),t.defaultValue=n}o=t.name,o!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,o!==""&&(t.name=o)}function Rn(t,n,o){(n!=="number"||An(t.ownerDocument)!==t)&&(o==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+o&&(t.defaultValue=""+o))}var bn=Array.isArray;function On(t,n,o,a){if(t=t.options,n){n={};for(var d=0;d"+n.valueOf().toString()+"",n=Ce.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;n.firstChild;)t.appendChild(n.firstChild)}});function He(t,n){if(n){var o=t.firstChild;if(o&&o===t.lastChild&&o.nodeType===3){o.nodeValue=n;return}}t.textContent=n}var _t={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},En=["Webkit","ms","Moz","O"];Object.keys(_t).forEach(function(t){En.forEach(function(n){n=n+t.charAt(0).toUpperCase()+t.substring(1),_t[n]=_t[t]})});function jt(t,n,o){return n==null||typeof n=="boolean"||n===""?"":o||typeof n!="number"||n===0||_t.hasOwnProperty(t)&&_t[t]?(""+n).trim():n+"px"}function _n(t,n){t=t.style;for(var o in n)if(n.hasOwnProperty(o)){var a=o.indexOf("--")===0,d=jt(o,n[o],a);o==="float"&&(o="cssFloat"),a?t.setProperty(o,d):t[o]=d}}var Gn=v({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function vt(t,n){if(n){if(Gn[t]&&(n.children!=null||n.dangerouslySetInnerHTML!=null))throw Error(r(137,t));if(n.dangerouslySetInnerHTML!=null){if(n.children!=null)throw Error(r(60));if(typeof n.dangerouslySetInnerHTML!="object"||!("__html"in n.dangerouslySetInnerHTML))throw Error(r(61))}if(n.style!=null&&typeof n.style!="object")throw Error(r(62))}}function un(t,n){if(t.indexOf("-")===-1)return typeof n.is=="string";switch(t){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Ct=null;function ei(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var ti=null,ir=null,Kn=null;function Wn(t){if(t=to(t)){if(typeof ti!="function")throw Error(r(280));var n=t.stateNode;n&&(n=tl(n),ti(t.stateNode,t.type,n))}}function T(t){ir?Kn?Kn.push(t):Kn=[t]:ir=t}function Y(){if(ir){var t=ir,n=Kn;if(Kn=ir=null,Wn(t),n)for(t=0;t>>=0,t===0?32:31-(Mn(t)/ii|0)|0}var Ft=64,Ir=4194304;function lr(t){switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function Mr(t,n){var o=t.pendingLanes;if(o===0)return 0;var a=0,d=t.suspendedLanes,g=t.pingedLanes,_=o&268435455;if(_!==0){var x=_&~d;x!==0?a=lr(x):(g&=_,g!==0&&(a=lr(g)))}else _=o&~d,_!==0?a=lr(_):g!==0&&(a=lr(g));if(a===0)return 0;if(n!==0&&n!==a&&(n&d)===0&&(d=a&-a,g=n&-n,d>=g||d===16&&(g&4194240)!==0))return n;if((a&4)!==0&&(a|=o&16),n=t.entangledLanes,n!==0)for(t=t.entanglements,n&=a;0o;o++)n.push(t);return n}function sr(t,n,o){t.pendingLanes|=n,n!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,n=31-ut(n),t[n]=o}function cn(t,n){var o=t.pendingLanes&~n;t.pendingLanes=n,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=n,t.mutableReadLanes&=n,t.entangledLanes&=n,n=t.entanglements;var a=t.eventTimes;for(t=t.expirationTimes;0=Wi),ic=" ",oc=!1;function lc(t,n){switch(t){case"keyup":return Rg.indexOf(n.keyCode)!==-1;case"keydown":return n.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function ac(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var ai=!1;function Ig(t,n){switch(t){case"compositionend":return ac(n);case"keypress":return n.which!==32?null:(oc=!0,ic);case"textInput":return t=n.data,t===ic&&oc?null:t;default:return null}}function Mg(t,n){if(ai)return t==="compositionend"||!wa&&lc(t,n)?(t=Zu(),Go=ya=cr=null,ai=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(n.ctrlKey||n.altKey||n.metaKey)||n.ctrlKey&&n.altKey){if(n.char&&1=n)return{node:o,offset:n-t};t=a}e:{for(;o;){if(o.nextSibling){o=o.nextSibling;break e}o=o.parentNode}o=void 0}o=mc(o)}}function hc(t,n){return t&&n?t===n?!0:t&&t.nodeType===3?!1:n&&n.nodeType===3?hc(t,n.parentNode):"contains"in t?t.contains(n):t.compareDocumentPosition?!!(t.compareDocumentPosition(n)&16):!1:!1}function yc(){for(var t=window,n=An();n instanceof t.HTMLIFrameElement;){try{var o=typeof n.contentWindow.location.href=="string"}catch{o=!1}if(o)t=n.contentWindow;else break;n=An(t.document)}return n}function Na(t){var n=t&&t.nodeName&&t.nodeName.toLowerCase();return n&&(n==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||n==="textarea"||t.contentEditable==="true")}function Hg(t){var n=yc(),o=t.focusedElem,a=t.selectionRange;if(n!==o&&o&&o.ownerDocument&&hc(o.ownerDocument.documentElement,o)){if(a!==null&&Na(o)){if(n=a.start,t=a.end,t===void 0&&(t=n),"selectionStart"in o)o.selectionStart=n,o.selectionEnd=Math.min(t,o.value.length);else if(t=(n=o.ownerDocument||document)&&n.defaultView||window,t.getSelection){t=t.getSelection();var d=o.textContent.length,g=Math.min(a.start,d);a=a.end===void 0?g:Math.min(a.end,d),!t.extend&&g>a&&(d=a,a=g,g=d),d=gc(o,g);var _=gc(o,a);d&&_&&(t.rangeCount!==1||t.anchorNode!==d.node||t.anchorOffset!==d.offset||t.focusNode!==_.node||t.focusOffset!==_.offset)&&(n=n.createRange(),n.setStart(d.node,d.offset),t.removeAllRanges(),g>a?(t.addRange(n),t.extend(_.node,_.offset)):(n.setEnd(_.node,_.offset),t.addRange(n)))}}for(n=[],t=o;t=t.parentNode;)t.nodeType===1&&n.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof o.focus=="function"&&o.focus(),o=0;o=document.documentMode,si=null,Ta=null,Qi=null,Ca=!1;function bc(t,n,o){var a=o.window===o?o.document:o.nodeType===9?o:o.ownerDocument;Ca||si==null||si!==An(a)||(a=si,"selectionStart"in a&&Na(a)?a={start:a.selectionStart,end:a.selectionEnd}:(a=(a.ownerDocument&&a.ownerDocument.defaultView||window).getSelection(),a={anchorNode:a.anchorNode,anchorOffset:a.anchorOffset,focusNode:a.focusNode,focusOffset:a.focusOffset}),Qi&&Yi(Qi,a)||(Qi=a,a=Zo(Ta,"onSelect"),0pi||(t.current=Ua[pi],Ua[pi]=null,pi--)}function nt(t,n){pi++,Ua[pi]=t.current,t.current=n}var mr={},Ot=pr(mr),Gt=pr(!1),zr=mr;function mi(t,n){var o=t.type.contextTypes;if(!o)return mr;var a=t.stateNode;if(a&&a.__reactInternalMemoizedUnmaskedChildContext===n)return a.__reactInternalMemoizedMaskedChildContext;var d={},g;for(g in o)d[g]=n[g];return a&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=n,t.__reactInternalMemoizedMaskedChildContext=d),d}function Kt(t){return t=t.childContextTypes,t!=null}function nl(){ot(Gt),ot(Ot)}function Mc(t,n,o){if(Ot.current!==mr)throw Error(r(168));nt(Ot,n),nt(Gt,o)}function Lc(t,n,o){var a=t.stateNode;if(n=n.childContextTypes,typeof a.getChildContext!="function")return o;a=a.getChildContext();for(var d in a)if(!(d in n))throw Error(r(108,$e(t)||"Unknown",d));return v({},o,a)}function rl(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||mr,zr=Ot.current,nt(Ot,t),nt(Gt,Gt.current),!0}function Dc(t,n,o){var a=t.stateNode;if(!a)throw Error(r(169));o?(t=Lc(t,n,zr),a.__reactInternalMemoizedMergedChildContext=t,ot(Gt),ot(Ot),nt(Ot,t)):ot(Gt),nt(Gt,o)}var Yn=null,il=!1,$a=!1;function Pc(t){Yn===null?Yn=[t]:Yn.push(t)}function eh(t){il=!0,Pc(t)}function gr(){if(!$a&&Yn!==null){$a=!0;var t=0,n=Ve;try{var o=Yn;for(Ve=1;t>=_,d-=_,Qn=1<<32-ut(n)+d|o<Oe?(Tt=Ne,Ne=null):Tt=Ne.sibling;var Ye=Z(D,Ne,F[Oe],ie);if(Ye===null){Ne===null&&(Ne=Tt);break}t&&Ne&&Ye.alternate===null&&n(D,Ne),I=g(Ye,I,Oe),Se===null?_e=Ye:Se.sibling=Ye,Se=Ye,Ne=Tt}if(Oe===F.length)return o(D,Ne),at&&Br(D,Oe),_e;if(Ne===null){for(;OeOe?(Tt=Ne,Ne=null):Tt=Ne.sibling;var xr=Z(D,Ne,Ye.value,ie);if(xr===null){Ne===null&&(Ne=Tt);break}t&&Ne&&xr.alternate===null&&n(D,Ne),I=g(xr,I,Oe),Se===null?_e=xr:Se.sibling=xr,Se=xr,Ne=Tt}if(Ye.done)return o(D,Ne),at&&Br(D,Oe),_e;if(Ne===null){for(;!Ye.done;Oe++,Ye=F.next())Ye=te(D,Ye.value,ie),Ye!==null&&(I=g(Ye,I,Oe),Se===null?_e=Ye:Se.sibling=Ye,Se=Ye);return at&&Br(D,Oe),_e}for(Ne=a(D,Ne);!Ye.done;Oe++,Ye=F.next())Ye=pe(Ne,D,Oe,Ye.value,ie),Ye!==null&&(t&&Ye.alternate!==null&&Ne.delete(Ye.key===null?Oe:Ye.key),I=g(Ye,I,Oe),Se===null?_e=Ye:Se.sibling=Ye,Se=Ye);return t&&Ne.forEach(function(Lh){return n(D,Lh)}),at&&Br(D,Oe),_e}function ht(D,I,F,ie){if(typeof F=="object"&&F!==null&&F.type===le&&F.key===null&&(F=F.props.children),typeof F=="object"&&F!==null){switch(F.$$typeof){case X:e:{for(var _e=F.key,Se=I;Se!==null;){if(Se.key===_e){if(_e=F.type,_e===le){if(Se.tag===7){o(D,Se.sibling),I=d(Se,F.props.children),I.return=D,D=I;break e}}else if(Se.elementType===_e||typeof _e=="object"&&_e!==null&&_e.$$typeof===se&&Hc(_e)===Se.type){o(D,Se.sibling),I=d(Se,F.props),I.ref=no(D,Se,F),I.return=D,D=I;break e}o(D,Se);break}else n(D,Se);Se=Se.sibling}F.type===le?(I=Vr(F.props.children,D.mode,ie,F.key),I.return=D,D=I):(ie=Il(F.type,F.key,F.props,null,D.mode,ie),ie.ref=no(D,I,F),ie.return=D,D=ie)}return _(D);case M:e:{for(Se=F.key;I!==null;){if(I.key===Se)if(I.tag===4&&I.stateNode.containerInfo===F.containerInfo&&I.stateNode.implementation===F.implementation){o(D,I.sibling),I=d(I,F.children||[]),I.return=D,D=I;break e}else{o(D,I);break}else n(D,I);I=I.sibling}I=Fs(F,D.mode,ie),I.return=D,D=I}return _(D);case se:return Se=F._init,ht(D,I,Se(F._payload),ie)}if(bn(F))return be(D,I,F,ie);if(ae(F))return Ee(D,I,F,ie);sl(D,F)}return typeof F=="string"&&F!==""||typeof F=="number"?(F=""+F,I!==null&&I.tag===6?(o(D,I.sibling),I=d(I,F),I.return=D,D=I):(o(D,I),I=zs(F,D.mode,ie),I.return=D,D=I),_(D)):o(D,I)}return ht}var bi=jc(!0),Gc=jc(!1),ul=pr(null),cl=null,Ei=null,Va=null;function qa(){Va=Ei=cl=null}function Ya(t){var n=ul.current;ot(ul),t._currentValue=n}function Qa(t,n,o){for(;t!==null;){var a=t.alternate;if((t.childLanes&n)!==n?(t.childLanes|=n,a!==null&&(a.childLanes|=n)):a!==null&&(a.childLanes&n)!==n&&(a.childLanes|=n),t===o)break;t=t.return}}function _i(t,n){cl=t,Va=Ei=null,t=t.dependencies,t!==null&&t.firstContext!==null&&((t.lanes&n)!==0&&(Wt=!0),t.firstContext=null)}function pn(t){var n=t._currentValue;if(Va!==t)if(t={context:t,memoizedValue:n,next:null},Ei===null){if(cl===null)throw Error(r(308));Ei=t,cl.dependencies={lanes:0,firstContext:t}}else Ei=Ei.next=t;return n}var Ur=null;function Xa(t){Ur===null?Ur=[t]:Ur.push(t)}function Kc(t,n,o,a){var d=n.interleaved;return d===null?(o.next=o,Xa(n)):(o.next=d.next,d.next=o),n.interleaved=o,Zn(t,a)}function Zn(t,n){t.lanes|=n;var o=t.alternate;for(o!==null&&(o.lanes|=n),o=t,t=t.return;t!==null;)t.childLanes|=n,o=t.alternate,o!==null&&(o.childLanes|=n),o=t,t=t.return;return o.tag===3?o.stateNode:null}var hr=!1;function Za(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function Wc(t,n){t=t.updateQueue,n.updateQueue===t&&(n.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,effects:t.effects})}function Jn(t,n){return{eventTime:t,lane:n,tag:0,payload:null,callback:null,next:null}}function yr(t,n,o){var a=t.updateQueue;if(a===null)return null;if(a=a.shared,(qe&2)!==0){var d=a.pending;return d===null?n.next=n:(n.next=d.next,d.next=n),a.pending=n,Zn(t,o)}return d=a.interleaved,d===null?(n.next=n,Xa(a)):(n.next=d.next,d.next=n),a.interleaved=n,Zn(t,o)}function dl(t,n,o){if(n=n.updateQueue,n!==null&&(n=n.shared,(o&4194240)!==0)){var a=n.lanes;a&=t.pendingLanes,o|=a,n.lanes=o,Bi(t,o)}}function Vc(t,n){var o=t.updateQueue,a=t.alternate;if(a!==null&&(a=a.updateQueue,o===a)){var d=null,g=null;if(o=o.firstBaseUpdate,o!==null){do{var _={eventTime:o.eventTime,lane:o.lane,tag:o.tag,payload:o.payload,callback:o.callback,next:null};g===null?d=g=_:g=g.next=_,o=o.next}while(o!==null);g===null?d=g=n:g=g.next=n}else d=g=n;o={baseState:a.baseState,firstBaseUpdate:d,lastBaseUpdate:g,shared:a.shared,effects:a.effects},t.updateQueue=o;return}t=o.lastBaseUpdate,t===null?o.firstBaseUpdate=n:t.next=n,o.lastBaseUpdate=n}function fl(t,n,o,a){var d=t.updateQueue;hr=!1;var g=d.firstBaseUpdate,_=d.lastBaseUpdate,x=d.shared.pending;if(x!==null){d.shared.pending=null;var C=x,B=C.next;C.next=null,_===null?g=B:_.next=B,_=C;var ee=t.alternate;ee!==null&&(ee=ee.updateQueue,x=ee.lastBaseUpdate,x!==_&&(x===null?ee.firstBaseUpdate=B:x.next=B,ee.lastBaseUpdate=C))}if(g!==null){var te=d.baseState;_=0,ee=B=C=null,x=g;do{var Z=x.lane,pe=x.eventTime;if((a&Z)===Z){ee!==null&&(ee=ee.next={eventTime:pe,lane:0,tag:x.tag,payload:x.payload,callback:x.callback,next:null});e:{var be=t,Ee=x;switch(Z=n,pe=o,Ee.tag){case 1:if(be=Ee.payload,typeof be=="function"){te=be.call(pe,te,Z);break e}te=be;break e;case 3:be.flags=be.flags&-65537|128;case 0:if(be=Ee.payload,Z=typeof be=="function"?be.call(pe,te,Z):be,Z==null)break e;te=v({},te,Z);break e;case 2:hr=!0}}x.callback!==null&&x.lane!==0&&(t.flags|=64,Z=d.effects,Z===null?d.effects=[x]:Z.push(x))}else pe={eventTime:pe,lane:Z,tag:x.tag,payload:x.payload,callback:x.callback,next:null},ee===null?(B=ee=pe,C=te):ee=ee.next=pe,_|=Z;if(x=x.next,x===null){if(x=d.shared.pending,x===null)break;Z=x,x=Z.next,Z.next=null,d.lastBaseUpdate=Z,d.shared.pending=null}}while(!0);if(ee===null&&(C=te),d.baseState=C,d.firstBaseUpdate=B,d.lastBaseUpdate=ee,n=d.shared.interleaved,n!==null){d=n;do _|=d.lane,d=d.next;while(d!==n)}else g===null&&(d.shared.lanes=0);jr|=_,t.lanes=_,t.memoizedState=te}}function qc(t,n,o){if(t=n.effects,n.effects=null,t!==null)for(n=0;no?o:4,t(!0);var a=rs.transition;rs.transition={};try{t(!1),n()}finally{Ve=o,rs.transition=a}}function pd(){return mn().memoizedState}function ih(t,n,o){var a=vr(t);if(o={lane:a,action:o,hasEagerState:!1,eagerState:null,next:null},md(t))gd(n,o);else if(o=Kc(t,n,o,a),o!==null){var d=Ut();Tn(o,t,a,d),hd(o,n,a)}}function oh(t,n,o){var a=vr(t),d={lane:a,action:o,hasEagerState:!1,eagerState:null,next:null};if(md(t))gd(n,d);else{var g=t.alternate;if(t.lanes===0&&(g===null||g.lanes===0)&&(g=n.lastRenderedReducer,g!==null))try{var _=n.lastRenderedState,x=g(_,o);if(d.hasEagerState=!0,d.eagerState=x,kn(x,_)){var C=n.interleaved;C===null?(d.next=d,Xa(n)):(d.next=C.next,C.next=d),n.interleaved=d;return}}catch{}finally{}o=Kc(t,n,d,a),o!==null&&(d=Ut(),Tn(o,t,a,d),hd(o,n,a))}}function md(t){var n=t.alternate;return t===dt||n!==null&&n===dt}function gd(t,n){lo=gl=!0;var o=t.pending;o===null?n.next=n:(n.next=o.next,o.next=n),t.pending=n}function hd(t,n,o){if((o&4194240)!==0){var a=n.lanes;a&=t.pendingLanes,o|=a,n.lanes=o,Bi(t,o)}}var bl={readContext:pn,useCallback:It,useContext:It,useEffect:It,useImperativeHandle:It,useInsertionEffect:It,useLayoutEffect:It,useMemo:It,useReducer:It,useRef:It,useState:It,useDebugValue:It,useDeferredValue:It,useTransition:It,useMutableSource:It,useSyncExternalStore:It,useId:It,unstable_isNewReconciler:!1},lh={readContext:pn,useCallback:function(t,n){return zn().memoizedState=[t,n===void 0?null:n],t},useContext:pn,useEffect:od,useImperativeHandle:function(t,n,o){return o=o!=null?o.concat([t]):null,hl(4194308,4,sd.bind(null,n,t),o)},useLayoutEffect:function(t,n){return hl(4194308,4,t,n)},useInsertionEffect:function(t,n){return hl(4,2,t,n)},useMemo:function(t,n){var o=zn();return n=n===void 0?null:n,t=t(),o.memoizedState=[t,n],t},useReducer:function(t,n,o){var a=zn();return n=o!==void 0?o(n):n,a.memoizedState=a.baseState=n,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:n},a.queue=t,t=t.dispatch=ih.bind(null,dt,t),[a.memoizedState,t]},useRef:function(t){var n=zn();return t={current:t},n.memoizedState=t},useState:rd,useDebugValue:cs,useDeferredValue:function(t){return zn().memoizedState=t},useTransition:function(){var t=rd(!1),n=t[0];return t=rh.bind(null,t[1]),zn().memoizedState=t,[n,t]},useMutableSource:function(){},useSyncExternalStore:function(t,n,o){var a=dt,d=zn();if(at){if(o===void 0)throw Error(r(407));o=o()}else{if(o=n(),Nt===null)throw Error(r(349));(Hr&30)!==0||Zc(a,n,o)}d.memoizedState=o;var g={value:o,getSnapshot:n};return d.queue=g,od(ed.bind(null,a,g,t),[t]),a.flags|=2048,uo(9,Jc.bind(null,a,g,o,n),void 0,null),o},useId:function(){var t=zn(),n=Nt.identifierPrefix;if(at){var o=Xn,a=Qn;o=(a&~(1<<32-ut(a)-1)).toString(32)+o,n=":"+n+"R"+o,o=ao++,0<\/script>",t=t.removeChild(t.firstChild)):typeof a.is=="string"?t=_.createElement(o,{is:a.is}):(t=_.createElement(o),o==="select"&&(_=t,a.multiple?_.multiple=!0:a.size&&(_.size=a.size))):t=_.createElementNS(t,o),t[Dn]=n,t[eo]=a,Pd(t,n,!1,!1),n.stateNode=t;e:{switch(_=un(o,a),o){case"dialog":it("cancel",t),it("close",t),d=a;break;case"iframe":case"object":case"embed":it("load",t),d=a;break;case"video":case"audio":for(d=0;dSi&&(n.flags|=128,a=!0,co(g,!1),n.lanes=4194304)}else{if(!a)if(t=pl(_),t!==null){if(n.flags|=128,a=!0,o=t.updateQueue,o!==null&&(n.updateQueue=o,n.flags|=4),co(g,!0),g.tail===null&&g.tailMode==="hidden"&&!_.alternate&&!at)return Mt(n),null}else 2*st()-g.renderingStartTime>Si&&o!==1073741824&&(n.flags|=128,a=!0,co(g,!1),n.lanes=4194304);g.isBackwards?(_.sibling=n.child,n.child=_):(o=g.last,o!==null?o.sibling=_:n.child=_,g.last=_)}return g.tail!==null?(n=g.tail,g.rendering=n,g.tail=n.sibling,g.renderingStartTime=st(),n.sibling=null,o=ct.current,nt(ct,a?o&1|2:o&1),n):(Mt(n),null);case 22:case 23:return Ls(),a=n.memoizedState!==null,t!==null&&t.memoizedState!==null!==a&&(n.flags|=8192),a&&(n.mode&1)!==0?(rn&1073741824)!==0&&(Mt(n),n.subtreeFlags&6&&(n.flags|=8192)):Mt(n),null;case 24:return null;case 25:return null}throw Error(r(156,n.tag))}function mh(t,n){switch(ja(n),n.tag){case 1:return Kt(n.type)&&nl(),t=n.flags,t&65536?(n.flags=t&-65537|128,n):null;case 3:return vi(),ot(Gt),ot(Ot),ns(),t=n.flags,(t&65536)!==0&&(t&128)===0?(n.flags=t&-65537|128,n):null;case 5:return es(n),null;case 13:if(ot(ct),t=n.memoizedState,t!==null&&t.dehydrated!==null){if(n.alternate===null)throw Error(r(340));yi()}return t=n.flags,t&65536?(n.flags=t&-65537|128,n):null;case 19:return ot(ct),null;case 4:return vi(),null;case 10:return Ya(n.type._context),null;case 22:case 23:return Ls(),null;case 24:return null;default:return null}}var kl=!1,Lt=!1,gh=typeof WeakSet=="function"?WeakSet:Set,ye=null;function wi(t,n){var o=t.ref;if(o!==null)if(typeof o=="function")try{o(null)}catch(a){pt(t,n,a)}else o.current=null}function ks(t,n,o){try{o()}catch(a){pt(t,n,a)}}var Bd=!1;function hh(t,n){if(La=Ho,t=yc(),Na(t)){if("selectionStart"in t)var o={start:t.selectionStart,end:t.selectionEnd};else e:{o=(o=t.ownerDocument)&&o.defaultView||window;var a=o.getSelection&&o.getSelection();if(a&&a.rangeCount!==0){o=a.anchorNode;var d=a.anchorOffset,g=a.focusNode;a=a.focusOffset;try{o.nodeType,g.nodeType}catch{o=null;break e}var _=0,x=-1,C=-1,B=0,ee=0,te=t,Z=null;t:for(;;){for(var pe;te!==o||d!==0&&te.nodeType!==3||(x=_+d),te!==g||a!==0&&te.nodeType!==3||(C=_+a),te.nodeType===3&&(_+=te.nodeValue.length),(pe=te.firstChild)!==null;)Z=te,te=pe;for(;;){if(te===t)break t;if(Z===o&&++B===d&&(x=_),Z===g&&++ee===a&&(C=_),(pe=te.nextSibling)!==null)break;te=Z,Z=te.parentNode}te=pe}o=x===-1||C===-1?null:{start:x,end:C}}else o=null}o=o||{start:0,end:0}}else o=null;for(Da={focusedElem:t,selectionRange:o},Ho=!1,ye=n;ye!==null;)if(n=ye,t=n.child,(n.subtreeFlags&1028)!==0&&t!==null)t.return=n,ye=t;else for(;ye!==null;){n=ye;try{var be=n.alternate;if((n.flags&1024)!==0)switch(n.tag){case 0:case 11:case 15:break;case 1:if(be!==null){var Ee=be.memoizedProps,ht=be.memoizedState,D=n.stateNode,I=D.getSnapshotBeforeUpdate(n.elementType===n.type?Ee:xn(n.type,Ee),ht);D.__reactInternalSnapshotBeforeUpdate=I}break;case 3:var F=n.stateNode.containerInfo;F.nodeType===1?F.textContent="":F.nodeType===9&&F.documentElement&&F.removeChild(F.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(r(163))}}catch(ie){pt(n,n.return,ie)}if(t=n.sibling,t!==null){t.return=n.return,ye=t;break}ye=n.return}return be=Bd,Bd=!1,be}function fo(t,n,o){var a=n.updateQueue;if(a=a!==null?a.lastEffect:null,a!==null){var d=a=a.next;do{if((d.tag&t)===t){var g=d.destroy;d.destroy=void 0,g!==void 0&&ks(n,o,g)}d=d.next}while(d!==a)}}function wl(t,n){if(n=n.updateQueue,n=n!==null?n.lastEffect:null,n!==null){var o=n=n.next;do{if((o.tag&t)===t){var a=o.create;o.destroy=a()}o=o.next}while(o!==n)}}function ws(t){var n=t.ref;if(n!==null){var o=t.stateNode;switch(t.tag){case 5:t=o;break;default:t=o}typeof n=="function"?n(t):n.current=t}}function Ud(t){var n=t.alternate;n!==null&&(t.alternate=null,Ud(n)),t.child=null,t.deletions=null,t.sibling=null,t.tag===5&&(n=t.stateNode,n!==null&&(delete n[Dn],delete n[eo],delete n[Ba],delete n[Zg],delete n[Jg])),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}function $d(t){return t.tag===5||t.tag===3||t.tag===4}function Hd(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||$d(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function xs(t,n,o){var a=t.tag;if(a===5||a===6)t=t.stateNode,n?o.nodeType===8?o.parentNode.insertBefore(t,n):o.insertBefore(t,n):(o.nodeType===8?(n=o.parentNode,n.insertBefore(t,o)):(n=o,n.appendChild(t)),o=o._reactRootContainer,o!=null||n.onclick!==null||(n.onclick=el));else if(a!==4&&(t=t.child,t!==null))for(xs(t,n,o),t=t.sibling;t!==null;)xs(t,n,o),t=t.sibling}function Ss(t,n,o){var a=t.tag;if(a===5||a===6)t=t.stateNode,n?o.insertBefore(t,n):o.appendChild(t);else if(a!==4&&(t=t.child,t!==null))for(Ss(t,n,o),t=t.sibling;t!==null;)Ss(t,n,o),t=t.sibling}var At=null,Sn=!1;function br(t,n,o){for(o=o.child;o!==null;)jd(t,n,o),o=o.sibling}function jd(t,n,o){if(Be&&typeof Be.onCommitFiberUnmount=="function")try{Be.onCommitFiberUnmount(ze,o)}catch{}switch(o.tag){case 5:Lt||wi(o,n);case 6:var a=At,d=Sn;At=null,br(t,n,o),At=a,Sn=d,At!==null&&(Sn?(t=At,o=o.stateNode,t.nodeType===8?t.parentNode.removeChild(o):t.removeChild(o)):At.removeChild(o.stateNode));break;case 18:At!==null&&(Sn?(t=At,o=o.stateNode,t.nodeType===8?Fa(t.parentNode,o):t.nodeType===1&&Fa(t,o),ji(t)):Fa(At,o.stateNode));break;case 4:a=At,d=Sn,At=o.stateNode.containerInfo,Sn=!0,br(t,n,o),At=a,Sn=d;break;case 0:case 11:case 14:case 15:if(!Lt&&(a=o.updateQueue,a!==null&&(a=a.lastEffect,a!==null))){d=a=a.next;do{var g=d,_=g.destroy;g=g.tag,_!==void 0&&((g&2)!==0||(g&4)!==0)&&ks(o,n,_),d=d.next}while(d!==a)}br(t,n,o);break;case 1:if(!Lt&&(wi(o,n),a=o.stateNode,typeof a.componentWillUnmount=="function"))try{a.props=o.memoizedProps,a.state=o.memoizedState,a.componentWillUnmount()}catch(x){pt(o,n,x)}br(t,n,o);break;case 21:br(t,n,o);break;case 22:o.mode&1?(Lt=(a=Lt)||o.memoizedState!==null,br(t,n,o),Lt=a):br(t,n,o);break;default:br(t,n,o)}}function Gd(t){var n=t.updateQueue;if(n!==null){t.updateQueue=null;var o=t.stateNode;o===null&&(o=t.stateNode=new gh),n.forEach(function(a){var d=Sh.bind(null,t,a);o.has(a)||(o.add(a),a.then(d,d))})}}function Nn(t,n){var o=n.deletions;if(o!==null)for(var a=0;ad&&(d=_),a&=~g}if(a=d,a=st()-a,a=(120>a?120:480>a?480:1080>a?1080:1920>a?1920:3e3>a?3e3:4320>a?4320:1960*bh(a/1960))-a,10t?16:t,_r===null)var a=!1;else{if(t=_r,_r=null,Cl=0,(qe&6)!==0)throw Error(r(331));var d=qe;for(qe|=4,ye=t.current;ye!==null;){var g=ye,_=g.child;if((ye.flags&16)!==0){var x=g.deletions;if(x!==null){for(var C=0;Cst()-Cs?Kr(t,0):Ts|=o),qt(t,n)}function rf(t,n){n===0&&((t.mode&1)===0?n=1:(n=Ir,Ir<<=1,(Ir&130023424)===0&&(Ir=4194304)));var o=Ut();t=Zn(t,n),t!==null&&(sr(t,n,o),qt(t,o))}function xh(t){var n=t.memoizedState,o=0;n!==null&&(o=n.retryLane),rf(t,o)}function Sh(t,n){var o=0;switch(t.tag){case 13:var a=t.stateNode,d=t.memoizedState;d!==null&&(o=d.retryLane);break;case 19:a=t.stateNode;break;default:throw Error(r(314))}a!==null&&a.delete(n),rf(t,o)}var of;of=function(t,n,o){if(t!==null)if(t.memoizedProps!==n.pendingProps||Gt.current)Wt=!0;else{if((t.lanes&o)===0&&(n.flags&128)===0)return Wt=!1,fh(t,n,o);Wt=(t.flags&131072)!==0}else Wt=!1,at&&(n.flags&1048576)!==0&&zc(n,ll,n.index);switch(n.lanes=0,n.tag){case 2:var a=n.type;vl(t,n),t=n.pendingProps;var d=mi(n,Ot.current);_i(n,o),d=os(null,n,a,t,d,o);var g=ls();return n.flags|=1,typeof d=="object"&&d!==null&&typeof d.render=="function"&&d.$$typeof===void 0?(n.tag=1,n.memoizedState=null,n.updateQueue=null,Kt(a)?(g=!0,rl(n)):g=!1,n.memoizedState=d.state!==null&&d.state!==void 0?d.state:null,Za(n),d.updater=El,n.stateNode=d,d._reactInternals=n,fs(n,a,t,o),n=hs(null,n,a,!0,g,o)):(n.tag=0,at&&g&&Ha(n),Bt(null,n,d,o),n=n.child),n;case 16:a=n.elementType;e:{switch(vl(t,n),t=n.pendingProps,d=a._init,a=d(a._payload),n.type=a,d=n.tag=Th(a),t=xn(a,t),d){case 0:n=gs(null,n,a,t,o);break e;case 1:n=Rd(null,n,a,t,o);break e;case 11:n=Sd(null,n,a,t,o);break e;case 14:n=Nd(null,n,a,xn(a.type,t),o);break e}throw Error(r(306,a,""))}return n;case 0:return a=n.type,d=n.pendingProps,d=n.elementType===a?d:xn(a,d),gs(t,n,a,d,o);case 1:return a=n.type,d=n.pendingProps,d=n.elementType===a?d:xn(a,d),Rd(t,n,a,d,o);case 3:e:{if(Od(n),t===null)throw Error(r(387));a=n.pendingProps,g=n.memoizedState,d=g.element,Wc(t,n),fl(n,a,null,o);var _=n.memoizedState;if(a=_.element,g.isDehydrated)if(g={element:a,isDehydrated:!1,cache:_.cache,pendingSuspenseBoundaries:_.pendingSuspenseBoundaries,transitions:_.transitions},n.updateQueue.baseState=g,n.memoizedState=g,n.flags&256){d=ki(Error(r(423)),n),n=Id(t,n,a,o,d);break e}else if(a!==d){d=ki(Error(r(424)),n),n=Id(t,n,a,o,d);break e}else for(nn=fr(n.stateNode.containerInfo.firstChild),tn=n,at=!0,wn=null,o=Gc(n,null,a,o),n.child=o;o;)o.flags=o.flags&-3|4096,o=o.sibling;else{if(yi(),a===d){n=er(t,n,o);break e}Bt(t,n,a,o)}n=n.child}return n;case 5:return Yc(n),t===null&&Ka(n),a=n.type,d=n.pendingProps,g=t!==null?t.memoizedProps:null,_=d.children,Pa(a,d)?_=null:g!==null&&Pa(a,g)&&(n.flags|=32),Ad(t,n),Bt(t,n,_,o),n.child;case 6:return t===null&&Ka(n),null;case 13:return Md(t,n,o);case 4:return Ja(n,n.stateNode.containerInfo),a=n.pendingProps,t===null?n.child=bi(n,null,a,o):Bt(t,n,a,o),n.child;case 11:return a=n.type,d=n.pendingProps,d=n.elementType===a?d:xn(a,d),Sd(t,n,a,d,o);case 7:return Bt(t,n,n.pendingProps,o),n.child;case 8:return Bt(t,n,n.pendingProps.children,o),n.child;case 12:return Bt(t,n,n.pendingProps.children,o),n.child;case 10:e:{if(a=n.type._context,d=n.pendingProps,g=n.memoizedProps,_=d.value,nt(ul,a._currentValue),a._currentValue=_,g!==null)if(kn(g.value,_)){if(g.children===d.children&&!Gt.current){n=er(t,n,o);break e}}else for(g=n.child,g!==null&&(g.return=n);g!==null;){var x=g.dependencies;if(x!==null){_=g.child;for(var C=x.firstContext;C!==null;){if(C.context===a){if(g.tag===1){C=Jn(-1,o&-o),C.tag=2;var B=g.updateQueue;if(B!==null){B=B.shared;var ee=B.pending;ee===null?C.next=C:(C.next=ee.next,ee.next=C),B.pending=C}}g.lanes|=o,C=g.alternate,C!==null&&(C.lanes|=o),Qa(g.return,o,n),x.lanes|=o;break}C=C.next}}else if(g.tag===10)_=g.type===n.type?null:g.child;else if(g.tag===18){if(_=g.return,_===null)throw Error(r(341));_.lanes|=o,x=_.alternate,x!==null&&(x.lanes|=o),Qa(_,o,n),_=g.sibling}else _=g.child;if(_!==null)_.return=g;else for(_=g;_!==null;){if(_===n){_=null;break}if(g=_.sibling,g!==null){g.return=_.return,_=g;break}_=_.return}g=_}Bt(t,n,d.children,o),n=n.child}return n;case 9:return d=n.type,a=n.pendingProps.children,_i(n,o),d=pn(d),a=a(d),n.flags|=1,Bt(t,n,a,o),n.child;case 14:return a=n.type,d=xn(a,n.pendingProps),d=xn(a.type,d),Nd(t,n,a,d,o);case 15:return Td(t,n,n.type,n.pendingProps,o);case 17:return a=n.type,d=n.pendingProps,d=n.elementType===a?d:xn(a,d),vl(t,n),n.tag=1,Kt(a)?(t=!0,rl(n)):t=!1,_i(n,o),bd(n,a,d),fs(n,a,d,o),hs(null,n,a,!0,t,o);case 19:return Dd(t,n,o);case 22:return Cd(t,n,o)}throw Error(r(156,n.tag))};function lf(t,n){return Po(t,n)}function Nh(t,n,o,a){this.tag=t,this.key=o,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=n,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=a,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function hn(t,n,o,a){return new Nh(t,n,o,a)}function Ps(t){return t=t.prototype,!(!t||!t.isReactComponent)}function Th(t){if(typeof t=="function")return Ps(t)?1:0;if(t!=null){if(t=t.$$typeof,t===U)return 11;if(t===G)return 14}return 2}function wr(t,n){var o=t.alternate;return o===null?(o=hn(t.tag,n,t.key,t.mode),o.elementType=t.elementType,o.type=t.type,o.stateNode=t.stateNode,o.alternate=t,t.alternate=o):(o.pendingProps=n,o.type=t.type,o.flags=0,o.subtreeFlags=0,o.deletions=null),o.flags=t.flags&14680064,o.childLanes=t.childLanes,o.lanes=t.lanes,o.child=t.child,o.memoizedProps=t.memoizedProps,o.memoizedState=t.memoizedState,o.updateQueue=t.updateQueue,n=t.dependencies,o.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},o.sibling=t.sibling,o.index=t.index,o.ref=t.ref,o}function Il(t,n,o,a,d,g){var _=2;if(a=t,typeof t=="function")Ps(t)&&(_=1);else if(typeof t=="string")_=5;else e:switch(t){case le:return Vr(o.children,d,g,n);case de:_=8,d|=8;break;case K:return t=hn(12,o,n,d|2),t.elementType=K,t.lanes=g,t;case J:return t=hn(13,o,n,d),t.elementType=J,t.lanes=g,t;case Q:return t=hn(19,o,n,d),t.elementType=Q,t.lanes=g,t;case z:return Ml(o,d,g,n);default:if(typeof t=="object"&&t!==null)switch(t.$$typeof){case A:_=10;break e;case j:_=9;break e;case U:_=11;break e;case G:_=14;break e;case se:_=16,a=null;break e}throw Error(r(130,t==null?t:typeof t,""))}return n=hn(_,o,n,d),n.elementType=t,n.type=a,n.lanes=g,n}function Vr(t,n,o,a){return t=hn(7,t,a,n),t.lanes=o,t}function Ml(t,n,o,a){return t=hn(22,t,a,n),t.elementType=z,t.lanes=o,t.stateNode={isHidden:!1},t}function zs(t,n,o){return t=hn(6,t,null,n),t.lanes=o,t}function Fs(t,n,o){return n=hn(4,t.children!==null?t.children:[],t.key,n),n.lanes=o,n.stateNode={containerInfo:t.containerInfo,pendingChildren:null,implementation:t.implementation},n}function Ch(t,n,o,a,d){this.tag=n,this.containerInfo=t,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=ar(0),this.expirationTimes=ar(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=ar(0),this.identifierPrefix=a,this.onRecoverableError=d,this.mutableSourceEagerHydrationData=null}function Bs(t,n,o,a,d,g,_,x,C){return t=new Ch(t,n,o,x,C),n===1?(n=1,g===!0&&(n|=8)):n=0,g=hn(3,null,null,n),t.current=g,g.stateNode=t,g.memoizedState={element:a,isDehydrated:o,cache:null,transitions:null,pendingSuspenseBoundaries:null},Za(g),t}function Ah(t,n,o){var a=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(i){console.error(i)}}return e(),Ks.exports=jh(),Ks.exports}var _f;function Kh(){if(_f)return Ul;_f=1;var e=Gh();return Ul.createRoot=e.createRoot,Ul.hydrateRoot=e.hydrateRoot,Ul}var Wh=Kh();const Vh=Co(Wh);class qh{constructor(){Ti(this,"ws",null);Ti(this,"handlers",new Set);Ti(this,"queue",[]);Ti(this,"closedByUser",!1);Ti(this,"onStatus")}connect(){var l;this.closedByUser=!1,(l=this.onStatus)==null||l.call(this,"connecting");const i=location.protocol==="https:"?"wss:":"ws:",r=new WebSocket(`${i}//${location.host}/ws`);r.onopen=()=>{var s;(s=this.onStatus)==null||s.call(this,"open");for(const c of this.queue)r.send(c);this.queue=[]},r.onmessage=s=>{try{const c=JSON.parse(s.data);for(const u of this.handlers)u(c)}catch{}},r.onclose=()=>{var s;(s=this.onStatus)==null||s.call(this,"closed"),this.closedByUser||setTimeout(()=>this.connect(),1500)},this.ws=r}send(i){var l;const r=JSON.stringify(i);((l=this.ws)==null?void 0:l.readyState)===WebSocket.OPEN?this.ws.send(r):this.queue.push(r)}close(){var i;this.closedByUser=!0,(i=this.ws)==null||i.close()}subscribe(i){return this.handlers.add(i),()=>this.handlers.delete(i)}}const Rp="oxagenttwo.options",vf="oxagenttwo.session",kf="oxagenttwo.systemPrompt";function Yh(){const e={model:"qwen3.5:latest",think:!0,tools:!0,temperature:.7,numPredict:2048,provider:"ollama",openrouterModel:"anthropic/claude-sonnet-4.5",memorySteps:10,memoryAnchors:!0,dreamAuto:!0};try{const i=localStorage.getItem(Rp);if(i)return{...e,...JSON.parse(i)}}catch{}return e}function Qh(){const e=ce.useRef(null),[i,r]=ce.useState("connecting"),[l,s]=ce.useState([]),[c,u]=ce.useState(()=>localStorage.getItem(vf)),[f,p]=ce.useState([]),[m,y]=ce.useState(!1),[h,b]=ce.useState({}),[E,w]=ce.useState(Yh),[N,O]=ce.useState(()=>localStorage.getItem(kf)??""),[S,L]=ce.useState(null),P=ce.useRef(!1);ce.useEffect(()=>{const j=new qh;e.current=j,j.onStatus=r;const U=j.subscribe(J=>{const Q=J.type;if(Q==="user-message"){const G=J.message;p(se=>se.some(z=>z.id===G.id)?se:[...se,G]),u(se=>se===G.session_id?se:G.session_id)}else if(Q==="assistant-start"){const G=J.message;p(se=>[...se,{...G,content:"",thinking:""}])}else if(Q==="thinking"){const G=J.text;p(se=>se.map(z=>z.id===J.messageId?{...z,thinking:(z.thinking??"")+G}:z))}else if(Q==="token"){const G=J.text;p(se=>se.map(z=>z.id===J.messageId?{...z,content:z.content+G}:z))}else Q==="tool-call"?b(G=>({...G,[J.messageId]:[...G[J.messageId]??[],{name:J.name,args:J.args}]})):Q==="tool-result"?b(G=>{const se=G[J.messageId]??[],z=[...se].reverse().findIndex(v=>v.name===J.name&&v.ok===void 0);if(z===-1)return G;const V=se.length-1-z,ae=se.map((v,R)=>R===V?{...v,ok:J.ok,durationMs:J.durationMs}:v);return{...G,[J.messageId]:ae}}):Q==="done"||Q==="error"?(P.current=!1,y(!1)):(Q==="sessions-changed"||Q==="session-deleted")&&q()});return j.connect(),()=>{U(),j.close()}},[]);const q=ce.useCallback(async()=>{const U=await(await fetch("/api/sessions")).json();s(U),u(J=>{var Q;return J&&U.some(G=>G.id===J)?J:((Q=U[0])==null?void 0:Q.id)??null})},[]);ce.useEffect(()=>{q()},[q]),ce.useEffect(()=>{fetch(`/api/model?name=${encodeURIComponent(E.model)}`).then(j=>j.json()).then(L).catch(()=>L({ok:!1,error:"Ollama nicht erreichbar"}))},[E.model]),ce.useEffect(()=>{if(!c){p([]);return}localStorage.setItem(vf,c),P.current=!1,y(!1),fetch(`/api/sessions/${c}/messages`).then(j=>j.json()).then(j=>p(Array.isArray(j)?j:[])).catch(()=>p([]))},[c]);const X=ce.useCallback(j=>{w(U=>{const J={...U,...j};return localStorage.setItem(Rp,JSON.stringify(J)),J})},[]),M=ce.useCallback(j=>{O(j),localStorage.setItem(kf,j)},[]),le=ce.useCallback((j,U=[],J=[])=>{var Q;!j.trim()&&U.length===0&&J.length===0||P.current||!c||(P.current=!0,y(!0),(Q=e.current)==null||Q.send({type:"chat",sessionId:c,content:j,images:U,files:J,options:E,systemPrompt:N}))},[c,E,N]),de=ce.useCallback(()=>{var j;(j=e.current)==null||j.send({type:"abort"})},[]),K=ce.useCallback(async()=>{const U=await(await fetch("/api/sessions",{method:"POST"})).json();await q(),u(U.id)},[q]),A=ce.useCallback(async j=>{await fetch(`/api/sessions/${j}`,{method:"DELETE"}),s(U=>U.filter(J=>J.id!==j)),u(U=>U===j?null:U),await q()},[q]);return{status:i,sessions:l,activeId:c,setActiveId:u,messages:f,streaming:m,toolEvents:h,sendMessage:le,abort:de,newSession:K,deleteSession:A,options:E,setOptions:X,systemPrompt:N,setSystemPrompt:M,modelInfo:S}}function Xh({onTranscript:e,onQueueDrained:i}){const[r,l]=ce.useState(!1),[s,c]=ce.useState(!1),[u,f]=ce.useState(!1),[p,m]=ce.useState(null),y=ce.useRef(null),h=ce.useRef([]),b=ce.useRef(null),E=ce.useRef(null),w=ce.useRef([]),N=ce.useRef(null),O=ce.useRef(!1),S=ce.useRef(null),L=ce.useRef(i);L.current=i;const P=ce.useRef(e);P.current=e;const q=ce.useCallback(async()=>{if(O.current)return;const K=w.current.shift();if(K===void 0){f(!1),L.current();return}O.current=!0,f(!0);try{S.current=new AbortController;const A=await fetch("/api/tts",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text:K}),signal:S.current.signal});if(!A.ok)throw new Error(`TTS HTTP ${A.status}`);const j=await A.blob(),U=new Audio(URL.createObjectURL(j));N.current=U,await new Promise(J=>{U.onended=()=>J(),U.onerror=()=>J(),U.play().catch(()=>J())}),URL.revokeObjectURL(U.src)}catch(A){A instanceof DOMException&&A.name==="AbortError"||m(A instanceof Error?A.message:String(A))}finally{O.current=!1,S.current=null,q()}},[]),X=ce.useCallback(K=>{const A=K.trim();A&&(w.current.push(A),q())},[q]),M=ce.useCallback(()=>{var K;w.current=[],(K=S.current)==null||K.abort(),N.current&&(N.current.pause(),N.current.src=""),O.current=!1,f(!1)},[]),le=ce.useCallback(()=>{var K;E.current&&clearTimeout(E.current),E.current=null,((K=y.current)==null?void 0:K.state)==="recording"&&y.current.stop()},[]),de=ce.useCallback(async()=>{var K;if(((K=y.current)==null?void 0:K.state)!=="recording"){m(null);try{const A=await navigator.mediaDevices.getUserMedia({audio:!0});b.current=A;const j=new MediaRecorder(A);h.current=[],j.ondataavailable=U=>{U.data.size>0&&h.current.push(U.data)},j.onstop=async()=>{var J,Q;(J=b.current)==null||J.getTracks().forEach(G=>G.stop()),b.current=null,l(!1);const U=new Blob(h.current);if(h.current=[],!(U.size<2e3)){c(!0);try{const se=await(await fetch("/api/stt",{method:"POST",headers:{"Content-Type":"application/octet-stream"},body:U})).json();if(!se.ok)throw new Error(se.error??"STT fehlgeschlagen");const z=(Q=se.text)==null?void 0:Q.trim();z?P.current(z):m("Nichts verstanden — bitte nochmal sprechen.")}catch(G){m(G instanceof Error?G.message:String(G))}finally{c(!1)}}},y.current=j,j.start(),l(!0),E.current=setTimeout(()=>le(),3e4)}catch(A){m(A instanceof Error?A.message:String(A))}}},[e,le]);return ce.useEffect(()=>()=>{var K,A;((K=y.current)==null?void 0:K.state)==="recording"&&y.current.stop(),(A=b.current)==null||A.getTracks().forEach(j=>j.stop()),M()},[]),{recording:r,transcribing:s,speaking:u,error:p,setError:m,startRecording:de,stopRecording:le,enqueueSpeech:X,cancelSpeech:M}}function Zh({sessions:e,activeId:i,onSelect:r,onNew:l,onDelete:s}){return H.jsxs("aside",{className:"sidebar",children:[H.jsxs("div",{className:"sidebar-header",children:[H.jsxs("div",{className:"brand",children:[H.jsx("span",{className:"brand-prompt",children:"▸"})," agenttwo-tools"]}),H.jsx("button",{className:"btn-new",onClick:l,children:"+ Neuer Chat"})]}),H.jsxs("nav",{className:"session-list",children:[e.length===0&&H.jsx("div",{className:"empty-hint",children:"Noch keine Sessions."}),e.map(c=>H.jsxs("div",{className:`session-item ${c.id===i?"active":""}`,onClick:()=>r(c.id),children:[H.jsx("span",{className:"session-title",children:c.title}),H.jsx("button",{className:"session-delete",title:"Session löschen",onClick:u=>{u.stopPropagation(),s(c.id)},children:"✕"})]},c.id))]})]})}function Jh(e,i){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const ey=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,ty=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,ny={};function wf(e,i){return(ny.jsx?ty:ey).test(e)}const ry=/[ \t\n\f\r]/g;function iy(e){return typeof e=="object"?e.type==="text"?xf(e.value):!1:xf(e)}function xf(e){return e.replace(ry,"")===""}class Ao{constructor(i,r,l){this.normal=r,this.property=i,l&&(this.space=l)}}Ao.prototype.normal={};Ao.prototype.property={};Ao.prototype.space=void 0;function Op(e,i){const r={},l={};for(const s of e)Object.assign(r,s.property),Object.assign(l,s.normal);return new Ao(r,l,i)}function hu(e){return e.toLowerCase()}class Xt{constructor(i,r){this.attribute=r,this.property=i}}Xt.prototype.attribute="";Xt.prototype.booleanish=!1;Xt.prototype.boolean=!1;Xt.prototype.commaOrSpaceSeparated=!1;Xt.prototype.commaSeparated=!1;Xt.prototype.defined=!1;Xt.prototype.mustUseProperty=!1;Xt.prototype.number=!1;Xt.prototype.overloadedBoolean=!1;Xt.prototype.property="";Xt.prototype.spaceSeparated=!1;Xt.prototype.space=void 0;let oy=0;const Le=Zr(),Et=Zr(),yu=Zr(),ne=Zr(),Je=Zr(),Qr=Zr(),on=Zr();function Zr(){return 2**++oy}const bu=Object.freeze(Object.defineProperty({__proto__:null,boolean:Le,booleanish:Et,commaOrSpaceSeparated:on,commaSeparated:Qr,number:ne,overloadedBoolean:yu,spaceSeparated:Je},Symbol.toStringTag,{value:"Module"})),qs=Object.keys(bu);class Ru extends Xt{constructor(i,r,l,s){let c=-1;if(super(i,r),Sf(this,"space",s),typeof l=="number")for(;++c4&&r.slice(0,4)==="data"&&cy.test(i)){if(i.charAt(4)==="-"){const c=i.slice(5).replace(Nf,py);l="data"+c.charAt(0).toUpperCase()+c.slice(1)}else{const c=i.slice(4);if(!Nf.test(c)){let u=c.replace(uy,fy);u.charAt(0)!=="-"&&(u="-"+u),i="data"+u}}s=Ru}return new s(l,i)}function fy(e){return"-"+e.toLowerCase()}function py(e){return e.charAt(1).toUpperCase()}const my=Op([Ip,ly,Dp,Pp,zp],"html"),Ou=Op([Ip,ay,Dp,Pp,zp],"svg");function gy(e){return e.join(" ").trim()}var Ci={},Ys,Tf;function hy(){if(Tf)return Ys;Tf=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,i=/\n/g,r=/^\s*/,l=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,s=/^:\s*/,c=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,u=/^[;\s]*/,f=/^\s+|\s+$/g,p=` -`,m="/",y="*",h="",b="comment",E="declaration";function w(O,S){if(typeof O!="string")throw new TypeError("First argument must be a string");if(!O)return[];S=S||{};var L=1,P=1;function q(Q){var G=Q.match(i);G&&(L+=G.length);var se=Q.lastIndexOf(p);P=~se?Q.length-se:P+Q.length}function X(){var Q={line:L,column:P};return function(G){return G.position=new M(Q),K(),G}}function M(Q){this.start=Q,this.end={line:L,column:P},this.source=S.source}M.prototype.content=O;function le(Q){var G=new Error(S.source+":"+L+":"+P+": "+Q);if(G.reason=Q,G.filename=S.source,G.line=L,G.column=P,G.source=O,!S.silent)throw G}function de(Q){var G=Q.exec(O);if(G){var se=G[0];return q(se),O=O.slice(se.length),G}}function K(){de(r)}function A(Q){var G;for(Q=Q||[];G=j();)G!==!1&&Q.push(G);return Q}function j(){var Q=X();if(!(m!=O.charAt(0)||y!=O.charAt(1))){for(var G=2;h!=O.charAt(G)&&(y!=O.charAt(G)||m!=O.charAt(G+1));)++G;if(G+=2,h===O.charAt(G-1))return le("End of comment missing");var se=O.slice(2,G-2);return P+=2,q(se),O=O.slice(G),P+=2,Q({type:b,comment:se})}}function U(){var Q=X(),G=de(l);if(G){if(j(),!de(s))return le("property missing ':'");var se=de(c),z=Q({type:E,property:N(G[0].replace(e,h)),value:se?N(se[0].replace(e,h)):h});return de(u),z}}function J(){var Q=[];A(Q);for(var G;G=U();)G!==!1&&(Q.push(G),A(Q));return Q}return K(),J()}function N(O){return O?O.replace(f,h):h}return Ys=w,Ys}var Cf;function yy(){if(Cf)return Ci;Cf=1;var e=Ci&&Ci.__importDefault||function(l){return l&&l.__esModule?l:{default:l}};Object.defineProperty(Ci,"__esModule",{value:!0}),Ci.default=r;const i=e(hy());function r(l,s){let c=null;if(!l||typeof l!="string")return c;const u=(0,i.default)(l),f=typeof s=="function";return u.forEach(p=>{if(p.type!=="declaration")return;const{property:m,value:y}=p;f?s(m,y,p):y&&(c=c||{},c[m]=y)}),c}return Ci}var bo={},Af;function by(){if(Af)return bo;Af=1,Object.defineProperty(bo,"__esModule",{value:!0}),bo.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,i=/-([a-z])/g,r=/^[^-]+$/,l=/^-(webkit|moz|ms|o|khtml)-/,s=/^-(ms)-/,c=function(m){return!m||r.test(m)||e.test(m)},u=function(m,y){return y.toUpperCase()},f=function(m,y){return"".concat(y,"-")},p=function(m,y){return y===void 0&&(y={}),c(m)?m:(m=m.toLowerCase(),y.reactCompat?m=m.replace(s,f):m=m.replace(l,f),m.replace(i,u))};return bo.camelCase=p,bo}var Eo,Rf;function Ey(){if(Rf)return Eo;Rf=1;var e=Eo&&Eo.__importDefault||function(s){return s&&s.__esModule?s:{default:s}},i=e(yy()),r=by();function l(s,c){var u={};return!s||typeof s!="string"||(0,i.default)(s,function(f,p){f&&p&&(u[(0,r.camelCase)(f,c)]=p)}),u}return l.default=l,Eo=l,Eo}var _y=Ey();const vy=Co(_y),Fp=Bp("end"),Iu=Bp("start");function Bp(e){return i;function i(r){const l=r&&r.position&&r.position[e]||{};if(typeof l.line=="number"&&l.line>0&&typeof l.column=="number"&&l.column>0)return{line:l.line,column:l.column,offset:typeof l.offset=="number"&&l.offset>-1?l.offset:void 0}}}function ky(e){const i=Iu(e),r=Fp(e);if(i&&r)return{start:i,end:r}}function wo(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?Of(e.position):"start"in e||"end"in e?Of(e):"line"in e||"column"in e?Eu(e):""}function Eu(e){return If(e&&e.line)+":"+If(e&&e.column)}function Of(e){return Eu(e&&e.start)+"-"+Eu(e&&e.end)}function If(e){return e&&typeof e=="number"?e:1}class Pt extends Error{constructor(i,r,l){super(),typeof r=="string"&&(l=r,r=void 0);let s="",c={},u=!1;if(r&&("line"in r&&"column"in r?c={place:r}:"start"in r&&"end"in r?c={place:r}:"type"in r?c={ancestors:[r],place:r.position}:c={...r}),typeof i=="string"?s=i:!c.cause&&i&&(u=!0,s=i.message,c.cause=i),!c.ruleId&&!c.source&&typeof l=="string"){const p=l.indexOf(":");p===-1?c.ruleId=l:(c.source=l.slice(0,p),c.ruleId=l.slice(p+1))}if(!c.place&&c.ancestors&&c.ancestors){const p=c.ancestors[c.ancestors.length-1];p&&(c.place=p.position)}const f=c.place&&"start"in c.place?c.place.start:c.place;this.ancestors=c.ancestors||void 0,this.cause=c.cause||void 0,this.column=f?f.column:void 0,this.fatal=void 0,this.file="",this.message=s,this.line=f?f.line:void 0,this.name=wo(c.place)||"1:1",this.place=c.place||void 0,this.reason=this.message,this.ruleId=c.ruleId||void 0,this.source=c.source||void 0,this.stack=u&&c.cause&&typeof c.cause.stack=="string"?c.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Pt.prototype.file="";Pt.prototype.name="";Pt.prototype.reason="";Pt.prototype.message="";Pt.prototype.stack="";Pt.prototype.column=void 0;Pt.prototype.line=void 0;Pt.prototype.ancestors=void 0;Pt.prototype.cause=void 0;Pt.prototype.fatal=void 0;Pt.prototype.place=void 0;Pt.prototype.ruleId=void 0;Pt.prototype.source=void 0;const Mu={}.hasOwnProperty,wy=new Map,xy=/[A-Z]/g,Sy=new Set(["table","tbody","thead","tfoot","tr"]),Ny=new Set(["td","th"]),Up="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function Ty(e,i){if(!i||i.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=i.filePath||void 0;let l;if(i.development){if(typeof i.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");l=Dy(r,i.jsxDEV)}else{if(typeof i.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof i.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");l=Ly(r,i.jsx,i.jsxs)}const s={Fragment:i.Fragment,ancestors:[],components:i.components||{},create:l,elementAttributeNameCase:i.elementAttributeNameCase||"react",evaluater:i.createEvaluater?i.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:i.ignoreInvalidStyle||!1,passKeys:i.passKeys!==!1,passNode:i.passNode||!1,schema:i.space==="svg"?Ou:my,stylePropertyNameCase:i.stylePropertyNameCase||"dom",tableCellAlignToStyle:i.tableCellAlignToStyle!==!1},c=$p(s,e,void 0);return c&&typeof c!="string"?c:s.create(e,s.Fragment,{children:c||void 0},void 0)}function $p(e,i,r){if(i.type==="element")return Cy(e,i,r);if(i.type==="mdxFlowExpression"||i.type==="mdxTextExpression")return Ay(e,i);if(i.type==="mdxJsxFlowElement"||i.type==="mdxJsxTextElement")return Oy(e,i,r);if(i.type==="mdxjsEsm")return Ry(e,i);if(i.type==="root")return Iy(e,i,r);if(i.type==="text")return My(e,i)}function Cy(e,i,r){const l=e.schema;let s=l;i.tagName.toLowerCase()==="svg"&&l.space==="html"&&(s=Ou,e.schema=s),e.ancestors.push(i);const c=jp(e,i.tagName,!1),u=Py(e,i);let f=Du(e,i);return Sy.has(i.tagName)&&(f=f.filter(function(p){return typeof p=="string"?!iy(p):!0})),Hp(e,u,c,i),Lu(u,f),e.ancestors.pop(),e.schema=l,e.create(i,c,u,r)}function Ay(e,i){if(i.data&&i.data.estree&&e.evaluater){const l=i.data.estree.body[0];return l.type,e.evaluater.evaluateExpression(l.expression)}No(e,i.position)}function Ry(e,i){if(i.data&&i.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(i.data.estree);No(e,i.position)}function Oy(e,i,r){const l=e.schema;let s=l;i.name==="svg"&&l.space==="html"&&(s=Ou,e.schema=s),e.ancestors.push(i);const c=i.name===null?e.Fragment:jp(e,i.name,!0),u=zy(e,i),f=Du(e,i);return Hp(e,u,c,i),Lu(u,f),e.ancestors.pop(),e.schema=l,e.create(i,c,u,r)}function Iy(e,i,r){const l={};return Lu(l,Du(e,i)),e.create(i,e.Fragment,l,r)}function My(e,i){return i.value}function Hp(e,i,r,l){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(i.node=l)}function Lu(e,i){if(i.length>0){const r=i.length>1?i:i[0];r&&(e.children=r)}}function Ly(e,i,r){return l;function l(s,c,u,f){const m=Array.isArray(u.children)?r:i;return f?m(c,u,f):m(c,u)}}function Dy(e,i){return r;function r(l,s,c,u){const f=Array.isArray(c.children),p=Iu(l);return i(s,c,u,f,{columnNumber:p?p.column-1:void 0,fileName:e,lineNumber:p?p.line:void 0},void 0)}}function Py(e,i){const r={};let l,s;for(s in i.properties)if(s!=="children"&&Mu.call(i.properties,s)){const c=Fy(e,s,i.properties[s]);if(c){const[u,f]=c;e.tableCellAlignToStyle&&u==="align"&&typeof f=="string"&&Ny.has(i.tagName)?l=f:r[u]=f}}if(l){const c=r.style||(r.style={});c[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=l}return r}function zy(e,i){const r={};for(const l of i.attributes)if(l.type==="mdxJsxExpressionAttribute")if(l.data&&l.data.estree&&e.evaluater){const c=l.data.estree.body[0];c.type;const u=c.expression;u.type;const f=u.properties[0];f.type,Object.assign(r,e.evaluater.evaluateExpression(f.argument))}else No(e,i.position);else{const s=l.name;let c;if(l.value&&typeof l.value=="object")if(l.value.data&&l.value.data.estree&&e.evaluater){const f=l.value.data.estree.body[0];f.type,c=e.evaluater.evaluateExpression(f.expression)}else No(e,i.position);else c=l.value===null?!0:l.value;r[s]=c}return r}function Du(e,i){const r=[];let l=-1;const s=e.passKeys?new Map:wy;for(;++ls?0:s+i:i=i>s?s:i,r=r>0?r:0,l.length<1e4)u=Array.from(l),u.unshift(i,r),e.splice(...u);else for(r&&e.splice(i,r);c0?(ln(e,e.length,0,i),e):i}const Df={}.hasOwnProperty;function Kp(e){const i={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function Cn(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Ht=Nr(/[A-Za-z]/),Dt=Nr(/[\dA-Za-z]/),Vy=Nr(/[#-'*+\--9=?A-Z^-~]/);function Xl(e){return e!==null&&(e<32||e===127)}const _u=Nr(/\d/),qy=Nr(/[\dA-Fa-f]/),Yy=Nr(/[!-/:-@[-`{-~]/);function Te(e){return e!==null&&e<-2}function et(e){return e!==null&&(e<0||e===32)}function Ue(e){return e===-2||e===-1||e===32}const ia=Nr(new RegExp("\\p{P}|\\p{S}","u")),Xr=Nr(/\s/);function Nr(e){return i;function i(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function Li(e){const i=[];let r=-1,l=0,s=0;for(;++r55295&&c<57344){const f=e.charCodeAt(r+1);c<56320&&f>56319&&f<57344?(u=String.fromCharCode(c,f),s=1):u="�"}else u=String.fromCharCode(c);u&&(i.push(e.slice(l,r),encodeURIComponent(u)),l=r+s+1,u=""),s&&(r+=s,s=0)}return i.join("")+e.slice(l)}function We(e,i,r,l){const s=l?l-1:Number.POSITIVE_INFINITY;let c=0;return u;function u(p){return Ue(p)?(e.enter(r),f(p)):i(p)}function f(p){return Ue(p)&&c++u))return;const le=i.events.length;let de=le,K,A;for(;de--;)if(i.events[de][0]==="exit"&&i.events[de][1].type==="chunkFlow"){if(K){A=i.events[de][1].end;break}K=!0}for(S(l),M=le;MP;){const X=r[q];i.containerState=X[1],X[0].exit.call(i,e)}r.length=P}function L(){s.write([null]),c=void 0,s=void 0,i.containerState._closeFlow=void 0}}function eb(e,i,r){return We(e,e.attempt(this.parser.constructs.document,i,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Ii(e){if(e===null||et(e)||Xr(e))return 1;if(ia(e))return 2}function oa(e,i,r){const l=[];let s=-1;for(;++s1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const h={...e[l][1].end},b={...e[r][1].start};zf(h,-p),zf(b,p),u={type:p>1?"strongSequence":"emphasisSequence",start:h,end:{...e[l][1].end}},f={type:p>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:b},c={type:p>1?"strongText":"emphasisText",start:{...e[l][1].end},end:{...e[r][1].start}},s={type:p>1?"strong":"emphasis",start:{...u.start},end:{...f.end}},e[l][1].end={...u.start},e[r][1].start={...f.end},m=[],e[l][1].end.offset-e[l][1].start.offset&&(m=yn(m,[["enter",e[l][1],i],["exit",e[l][1],i]])),m=yn(m,[["enter",s,i],["enter",u,i],["exit",u,i],["enter",c,i]]),m=yn(m,oa(i.parser.constructs.insideSpan.null,e.slice(l+1,r),i)),m=yn(m,[["exit",c,i],["enter",f,i],["exit",f,i],["exit",s,i]]),e[r][1].end.offset-e[r][1].start.offset?(y=2,m=yn(m,[["enter",e[r][1],i],["exit",e[r][1],i]])):y=0,ln(e,l-1,r-l+3,m),r=l+m.length-y-2;break}}for(r=-1;++r0&&Ue(M)?We(e,L,"linePrefix",c+1)(M):L(M)}function L(M){return M===null||Te(M)?e.check(Ff,N,q)(M):(e.enter("codeFlowValue"),P(M))}function P(M){return M===null||Te(M)?(e.exit("codeFlowValue"),L(M)):(e.consume(M),P)}function q(M){return e.exit("codeFenced"),i(M)}function X(M,le,de){let K=0;return A;function A(G){return M.enter("lineEnding"),M.consume(G),M.exit("lineEnding"),j}function j(G){return M.enter("codeFencedFence"),Ue(G)?We(M,U,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(G):U(G)}function U(G){return G===f?(M.enter("codeFencedFenceSequence"),J(G)):de(G)}function J(G){return G===f?(K++,M.consume(G),J):K>=u?(M.exit("codeFencedFenceSequence"),Ue(G)?We(M,Q,"whitespace")(G):Q(G)):de(G)}function Q(G){return G===null||Te(G)?(M.exit("codeFencedFence"),le(G)):de(G)}}}function fb(e,i,r){const l=this;return s;function s(u){return u===null?r(u):(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),c)}function c(u){return l.parser.lazy[l.now().line]?r(u):i(u)}}const Xs={name:"codeIndented",tokenize:mb},pb={partial:!0,tokenize:gb};function mb(e,i,r){const l=this;return s;function s(m){return e.enter("codeIndented"),We(e,c,"linePrefix",5)(m)}function c(m){const y=l.events[l.events.length-1];return y&&y[1].type==="linePrefix"&&y[2].sliceSerialize(y[1],!0).length>=4?u(m):r(m)}function u(m){return m===null?p(m):Te(m)?e.attempt(pb,u,p)(m):(e.enter("codeFlowValue"),f(m))}function f(m){return m===null||Te(m)?(e.exit("codeFlowValue"),u(m)):(e.consume(m),f)}function p(m){return e.exit("codeIndented"),i(m)}}function gb(e,i,r){const l=this;return s;function s(u){return l.parser.lazy[l.now().line]?r(u):Te(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),s):We(e,c,"linePrefix",5)(u)}function c(u){const f=l.events[l.events.length-1];return f&&f[1].type==="linePrefix"&&f[2].sliceSerialize(f[1],!0).length>=4?i(u):Te(u)?s(u):r(u)}}const hb={name:"codeText",previous:bb,resolve:yb,tokenize:Eb};function yb(e){let i=e.length-4,r=3,l,s;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[i][1].type==="lineEnding"||e[i][1].type==="space")){for(l=r;++l=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+i+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return ithis.left.length?this.right.slice(this.right.length-l+this.left.length,this.right.length-i+this.left.length).reverse():this.left.slice(i).concat(this.right.slice(this.right.length-l+this.left.length).reverse())}splice(i,r,l){const s=r||0;this.setCursor(Math.trunc(i));const c=this.right.splice(this.right.length-s,Number.POSITIVE_INFINITY);return l&&_o(this.left,l),c.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(i){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(i)}pushMany(i){this.setCursor(Number.POSITIVE_INFINITY),_o(this.left,i)}unshift(i){this.setCursor(0),this.right.push(i)}unshiftMany(i){this.setCursor(0),_o(this.right,i.reverse())}setCursor(i){if(!(i===this.left.length||i>this.left.length&&this.right.length===0||i<0&&this.left.length===0))if(i=4?i(u):e.interrupt(l.parser.constructs.flow,r,i)(u)}}function Xp(e,i,r,l,s,c,u,f,p){const m=p||Number.POSITIVE_INFINITY;let y=0;return h;function h(S){return S===60?(e.enter(l),e.enter(s),e.enter(c),e.consume(S),e.exit(c),b):S===null||S===32||S===41||Xl(S)?r(S):(e.enter(l),e.enter(u),e.enter(f),e.enter("chunkString",{contentType:"string"}),N(S))}function b(S){return S===62?(e.enter(c),e.consume(S),e.exit(c),e.exit(s),e.exit(l),i):(e.enter(f),e.enter("chunkString",{contentType:"string"}),E(S))}function E(S){return S===62?(e.exit("chunkString"),e.exit(f),b(S)):S===null||S===60||Te(S)?r(S):(e.consume(S),S===92?w:E)}function w(S){return S===60||S===62||S===92?(e.consume(S),E):E(S)}function N(S){return!y&&(S===null||S===41||et(S))?(e.exit("chunkString"),e.exit(f),e.exit(u),e.exit(l),i(S)):y999||E===null||E===91||E===93&&!p||E===94&&!f&&"_hiddenFootnoteSupport"in u.parser.constructs?r(E):E===93?(e.exit(c),e.enter(s),e.consume(E),e.exit(s),e.exit(l),i):Te(E)?(e.enter("lineEnding"),e.consume(E),e.exit("lineEnding"),y):(e.enter("chunkString",{contentType:"string"}),h(E))}function h(E){return E===null||E===91||E===93||Te(E)||f++>999?(e.exit("chunkString"),y(E)):(e.consume(E),p||(p=!Ue(E)),E===92?b:h)}function b(E){return E===91||E===92||E===93?(e.consume(E),f++,h):h(E)}}function Jp(e,i,r,l,s,c){let u;return f;function f(b){return b===34||b===39||b===40?(e.enter(l),e.enter(s),e.consume(b),e.exit(s),u=b===40?41:b,p):r(b)}function p(b){return b===u?(e.enter(s),e.consume(b),e.exit(s),e.exit(l),i):(e.enter(c),m(b))}function m(b){return b===u?(e.exit(c),p(u)):b===null?r(b):Te(b)?(e.enter("lineEnding"),e.consume(b),e.exit("lineEnding"),We(e,m,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),y(b))}function y(b){return b===u||b===null||Te(b)?(e.exit("chunkString"),m(b)):(e.consume(b),b===92?h:y)}function h(b){return b===u||b===92?(e.consume(b),y):y(b)}}function xo(e,i){let r;return l;function l(s){return Te(s)?(e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),r=!0,l):Ue(s)?We(e,l,r?"linePrefix":"lineSuffix")(s):i(s)}}const Tb={name:"definition",tokenize:Ab},Cb={partial:!0,tokenize:Rb};function Ab(e,i,r){const l=this;let s;return c;function c(E){return e.enter("definition"),u(E)}function u(E){return Zp.call(l,e,f,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(E)}function f(E){return s=Cn(l.sliceSerialize(l.events[l.events.length-1][1]).slice(1,-1)),E===58?(e.enter("definitionMarker"),e.consume(E),e.exit("definitionMarker"),p):r(E)}function p(E){return et(E)?xo(e,m)(E):m(E)}function m(E){return Xp(e,y,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(E)}function y(E){return e.attempt(Cb,h,h)(E)}function h(E){return Ue(E)?We(e,b,"whitespace")(E):b(E)}function b(E){return E===null||Te(E)?(e.exit("definition"),l.parser.defined.push(s),i(E)):r(E)}}function Rb(e,i,r){return l;function l(f){return et(f)?xo(e,s)(f):r(f)}function s(f){return Jp(e,c,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(f)}function c(f){return Ue(f)?We(e,u,"whitespace")(f):u(f)}function u(f){return f===null||Te(f)?i(f):r(f)}}const Ob={name:"hardBreakEscape",tokenize:Ib};function Ib(e,i,r){return l;function l(c){return e.enter("hardBreakEscape"),e.consume(c),s}function s(c){return Te(c)?(e.exit("hardBreakEscape"),i(c)):r(c)}}const Mb={name:"headingAtx",resolve:Lb,tokenize:Db};function Lb(e,i){let r=e.length-2,l=3,s,c;return e[l][1].type==="whitespace"&&(l+=2),r-2>l&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(l===r-1||r-4>l&&e[r-2][1].type==="whitespace")&&(r-=l+1===r?2:4),r>l&&(s={type:"atxHeadingText",start:e[l][1].start,end:e[r][1].end},c={type:"chunkText",start:e[l][1].start,end:e[r][1].end,contentType:"text"},ln(e,l,r-l+1,[["enter",s,i],["enter",c,i],["exit",c,i],["exit",s,i]])),e}function Db(e,i,r){let l=0;return s;function s(y){return e.enter("atxHeading"),c(y)}function c(y){return e.enter("atxHeadingSequence"),u(y)}function u(y){return y===35&&l++<6?(e.consume(y),u):y===null||et(y)?(e.exit("atxHeadingSequence"),f(y)):r(y)}function f(y){return y===35?(e.enter("atxHeadingSequence"),p(y)):y===null||Te(y)?(e.exit("atxHeading"),i(y)):Ue(y)?We(e,f,"whitespace")(y):(e.enter("atxHeadingText"),m(y))}function p(y){return y===35?(e.consume(y),p):(e.exit("atxHeadingSequence"),f(y))}function m(y){return y===null||y===35||et(y)?(e.exit("atxHeadingText"),f(y)):(e.consume(y),m)}}const Pb=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Uf=["pre","script","style","textarea"],zb={concrete:!0,name:"htmlFlow",resolveTo:Ub,tokenize:$b},Fb={partial:!0,tokenize:jb},Bb={partial:!0,tokenize:Hb};function Ub(e){let i=e.length;for(;i--&&!(e[i][0]==="enter"&&e[i][1].type==="htmlFlow"););return i>1&&e[i-2][1].type==="linePrefix"&&(e[i][1].start=e[i-2][1].start,e[i+1][1].start=e[i-2][1].start,e.splice(i-2,2)),e}function $b(e,i,r){const l=this;let s,c,u,f,p;return m;function m(k){return y(k)}function y(k){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(k),h}function h(k){return k===33?(e.consume(k),b):k===47?(e.consume(k),c=!0,N):k===63?(e.consume(k),s=3,l.interrupt?i:v):Ht(k)?(e.consume(k),u=String.fromCharCode(k),O):r(k)}function b(k){return k===45?(e.consume(k),s=2,E):k===91?(e.consume(k),s=5,f=0,w):Ht(k)?(e.consume(k),s=4,l.interrupt?i:v):r(k)}function E(k){return k===45?(e.consume(k),l.interrupt?i:v):r(k)}function w(k){const ke="CDATA[";return k===ke.charCodeAt(f++)?(e.consume(k),f===ke.length?l.interrupt?i:U:w):r(k)}function N(k){return Ht(k)?(e.consume(k),u=String.fromCharCode(k),O):r(k)}function O(k){if(k===null||k===47||k===62||et(k)){const ke=k===47,Me=u.toLowerCase();return!ke&&!c&&Uf.includes(Me)?(s=1,l.interrupt?i(k):U(k)):Pb.includes(u.toLowerCase())?(s=6,ke?(e.consume(k),S):l.interrupt?i(k):U(k)):(s=7,l.interrupt&&!l.parser.lazy[l.now().line]?r(k):c?L(k):P(k))}return k===45||Dt(k)?(e.consume(k),u+=String.fromCharCode(k),O):r(k)}function S(k){return k===62?(e.consume(k),l.interrupt?i:U):r(k)}function L(k){return Ue(k)?(e.consume(k),L):A(k)}function P(k){return k===47?(e.consume(k),A):k===58||k===95||Ht(k)?(e.consume(k),q):Ue(k)?(e.consume(k),P):A(k)}function q(k){return k===45||k===46||k===58||k===95||Dt(k)?(e.consume(k),q):X(k)}function X(k){return k===61?(e.consume(k),M):Ue(k)?(e.consume(k),X):P(k)}function M(k){return k===null||k===60||k===61||k===62||k===96?r(k):k===34||k===39?(e.consume(k),p=k,le):Ue(k)?(e.consume(k),M):de(k)}function le(k){return k===p?(e.consume(k),p=null,K):k===null||Te(k)?r(k):(e.consume(k),le)}function de(k){return k===null||k===34||k===39||k===47||k===60||k===61||k===62||k===96||et(k)?X(k):(e.consume(k),de)}function K(k){return k===47||k===62||Ue(k)?P(k):r(k)}function A(k){return k===62?(e.consume(k),j):r(k)}function j(k){return k===null||Te(k)?U(k):Ue(k)?(e.consume(k),j):r(k)}function U(k){return k===45&&s===2?(e.consume(k),se):k===60&&s===1?(e.consume(k),z):k===62&&s===4?(e.consume(k),R):k===63&&s===3?(e.consume(k),v):k===93&&s===5?(e.consume(k),ae):Te(k)&&(s===6||s===7)?(e.exit("htmlFlowData"),e.check(Fb,$,J)(k)):k===null||Te(k)?(e.exit("htmlFlowData"),J(k)):(e.consume(k),U)}function J(k){return e.check(Bb,Q,$)(k)}function Q(k){return e.enter("lineEnding"),e.consume(k),e.exit("lineEnding"),G}function G(k){return k===null||Te(k)?J(k):(e.enter("htmlFlowData"),U(k))}function se(k){return k===45?(e.consume(k),v):U(k)}function z(k){return k===47?(e.consume(k),u="",V):U(k)}function V(k){if(k===62){const ke=u.toLowerCase();return Uf.includes(ke)?(e.consume(k),R):U(k)}return Ht(k)&&u.length<8?(e.consume(k),u+=String.fromCharCode(k),V):U(k)}function ae(k){return k===93?(e.consume(k),v):U(k)}function v(k){return k===62?(e.consume(k),R):k===45&&s===2?(e.consume(k),v):U(k)}function R(k){return k===null||Te(k)?(e.exit("htmlFlowData"),$(k)):(e.consume(k),R)}function $(k){return e.exit("htmlFlow"),i(k)}}function Hb(e,i,r){const l=this;return s;function s(u){return Te(u)?(e.enter("lineEnding"),e.consume(u),e.exit("lineEnding"),c):r(u)}function c(u){return l.parser.lazy[l.now().line]?r(u):i(u)}}function jb(e,i,r){return l;function l(s){return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),e.attempt(Ro,i,r)}}const Gb={name:"htmlText",tokenize:Kb};function Kb(e,i,r){const l=this;let s,c,u;return f;function f(v){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(v),p}function p(v){return v===33?(e.consume(v),m):v===47?(e.consume(v),X):v===63?(e.consume(v),P):Ht(v)?(e.consume(v),de):r(v)}function m(v){return v===45?(e.consume(v),y):v===91?(e.consume(v),c=0,w):Ht(v)?(e.consume(v),L):r(v)}function y(v){return v===45?(e.consume(v),E):r(v)}function h(v){return v===null?r(v):v===45?(e.consume(v),b):Te(v)?(u=h,z(v)):(e.consume(v),h)}function b(v){return v===45?(e.consume(v),E):h(v)}function E(v){return v===62?se(v):v===45?b(v):h(v)}function w(v){const R="CDATA[";return v===R.charCodeAt(c++)?(e.consume(v),c===R.length?N:w):r(v)}function N(v){return v===null?r(v):v===93?(e.consume(v),O):Te(v)?(u=N,z(v)):(e.consume(v),N)}function O(v){return v===93?(e.consume(v),S):N(v)}function S(v){return v===62?se(v):v===93?(e.consume(v),S):N(v)}function L(v){return v===null||v===62?se(v):Te(v)?(u=L,z(v)):(e.consume(v),L)}function P(v){return v===null?r(v):v===63?(e.consume(v),q):Te(v)?(u=P,z(v)):(e.consume(v),P)}function q(v){return v===62?se(v):P(v)}function X(v){return Ht(v)?(e.consume(v),M):r(v)}function M(v){return v===45||Dt(v)?(e.consume(v),M):le(v)}function le(v){return Te(v)?(u=le,z(v)):Ue(v)?(e.consume(v),le):se(v)}function de(v){return v===45||Dt(v)?(e.consume(v),de):v===47||v===62||et(v)?K(v):r(v)}function K(v){return v===47?(e.consume(v),se):v===58||v===95||Ht(v)?(e.consume(v),A):Te(v)?(u=K,z(v)):Ue(v)?(e.consume(v),K):se(v)}function A(v){return v===45||v===46||v===58||v===95||Dt(v)?(e.consume(v),A):j(v)}function j(v){return v===61?(e.consume(v),U):Te(v)?(u=j,z(v)):Ue(v)?(e.consume(v),j):K(v)}function U(v){return v===null||v===60||v===61||v===62||v===96?r(v):v===34||v===39?(e.consume(v),s=v,J):Te(v)?(u=U,z(v)):Ue(v)?(e.consume(v),U):(e.consume(v),Q)}function J(v){return v===s?(e.consume(v),s=void 0,G):v===null?r(v):Te(v)?(u=J,z(v)):(e.consume(v),J)}function Q(v){return v===null||v===34||v===39||v===60||v===61||v===96?r(v):v===47||v===62||et(v)?K(v):(e.consume(v),Q)}function G(v){return v===47||v===62||et(v)?K(v):r(v)}function se(v){return v===62?(e.consume(v),e.exit("htmlTextData"),e.exit("htmlText"),i):r(v)}function z(v){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(v),e.exit("lineEnding"),V}function V(v){return Ue(v)?We(e,ae,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(v):ae(v)}function ae(v){return e.enter("htmlTextData"),u(v)}}const Fu={name:"labelEnd",resolveAll:Yb,resolveTo:Qb,tokenize:Xb},Wb={tokenize:Zb},Vb={tokenize:Jb},qb={tokenize:eE};function Yb(e){let i=-1;const r=[];for(;++i=3&&(m===null||Te(m))?(e.exit("thematicBreak"),i(m)):r(m)}function p(m){return m===s?(e.consume(m),l++,p):(e.exit("thematicBreakSequence"),Ue(m)?We(e,f,"whitespace")(m):f(m))}}const Qt={continuation:{tokenize:cE},exit:fE,name:"list",tokenize:uE},aE={partial:!0,tokenize:pE},sE={partial:!0,tokenize:dE};function uE(e,i,r){const l=this,s=l.events[l.events.length-1];let c=s&&s[1].type==="linePrefix"?s[2].sliceSerialize(s[1],!0).length:0,u=0;return f;function f(E){const w=l.containerState.type||(E===42||E===43||E===45?"listUnordered":"listOrdered");if(w==="listUnordered"?!l.containerState.marker||E===l.containerState.marker:_u(E)){if(l.containerState.type||(l.containerState.type=w,e.enter(w,{_container:!0})),w==="listUnordered")return e.enter("listItemPrefix"),E===42||E===45?e.check(Ql,r,m)(E):m(E);if(!l.interrupt||E===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),p(E)}return r(E)}function p(E){return _u(E)&&++u<10?(e.consume(E),p):(!l.interrupt||u<2)&&(l.containerState.marker?E===l.containerState.marker:E===41||E===46)?(e.exit("listItemValue"),m(E)):r(E)}function m(E){return e.enter("listItemMarker"),e.consume(E),e.exit("listItemMarker"),l.containerState.marker=l.containerState.marker||E,e.check(Ro,l.interrupt?r:y,e.attempt(aE,b,h))}function y(E){return l.containerState.initialBlankLine=!0,c++,b(E)}function h(E){return Ue(E)?(e.enter("listItemPrefixWhitespace"),e.consume(E),e.exit("listItemPrefixWhitespace"),b):r(E)}function b(E){return l.containerState.size=c+l.sliceSerialize(e.exit("listItemPrefix"),!0).length,i(E)}}function cE(e,i,r){const l=this;return l.containerState._closeFlow=void 0,e.check(Ro,s,c);function s(f){return l.containerState.furtherBlankLines=l.containerState.furtherBlankLines||l.containerState.initialBlankLine,We(e,i,"listItemIndent",l.containerState.size+1)(f)}function c(f){return l.containerState.furtherBlankLines||!Ue(f)?(l.containerState.furtherBlankLines=void 0,l.containerState.initialBlankLine=void 0,u(f)):(l.containerState.furtherBlankLines=void 0,l.containerState.initialBlankLine=void 0,e.attempt(sE,i,u)(f))}function u(f){return l.containerState._closeFlow=!0,l.interrupt=void 0,We(e,e.attempt(Qt,i,r),"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(f)}}function dE(e,i,r){const l=this;return We(e,s,"listItemIndent",l.containerState.size+1);function s(c){const u=l.events[l.events.length-1];return u&&u[1].type==="listItemIndent"&&u[2].sliceSerialize(u[1],!0).length===l.containerState.size?i(c):r(c)}}function fE(e){e.exit(this.containerState.type)}function pE(e,i,r){const l=this;return We(e,s,"listItemPrefixWhitespace",l.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function s(c){const u=l.events[l.events.length-1];return!Ue(c)&&u&&u[1].type==="listItemPrefixWhitespace"?i(c):r(c)}}const $f={name:"setextUnderline",resolveTo:mE,tokenize:gE};function mE(e,i){let r=e.length,l,s,c;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){l=r;break}e[r][1].type==="paragraph"&&(s=r)}else e[r][1].type==="content"&&e.splice(r,1),!c&&e[r][1].type==="definition"&&(c=r);const u={type:"setextHeading",start:{...e[l][1].start},end:{...e[e.length-1][1].end}};return e[s][1].type="setextHeadingText",c?(e.splice(s,0,["enter",u,i]),e.splice(c+1,0,["exit",e[l][1],i]),e[l][1].end={...e[c][1].end}):e[l][1]=u,e.push(["exit",u,i]),e}function gE(e,i,r){const l=this;let s;return c;function c(m){let y=l.events.length,h;for(;y--;)if(l.events[y][1].type!=="lineEnding"&&l.events[y][1].type!=="linePrefix"&&l.events[y][1].type!=="content"){h=l.events[y][1].type==="paragraph";break}return!l.parser.lazy[l.now().line]&&(l.interrupt||h)?(e.enter("setextHeadingLine"),s=m,u(m)):r(m)}function u(m){return e.enter("setextHeadingLineSequence"),f(m)}function f(m){return m===s?(e.consume(m),f):(e.exit("setextHeadingLineSequence"),Ue(m)?We(e,p,"lineSuffix")(m):p(m))}function p(m){return m===null||Te(m)?(e.exit("setextHeadingLine"),i(m)):r(m)}}const hE={tokenize:yE};function yE(e){const i=this,r=e.attempt(Ro,l,e.attempt(this.parser.constructs.flowInitial,s,We(e,e.attempt(this.parser.constructs.flow,s,e.attempt(kb,s)),"linePrefix")));return r;function l(c){if(c===null){e.consume(c);return}return e.enter("lineEndingBlank"),e.consume(c),e.exit("lineEndingBlank"),i.currentConstruct=void 0,r}function s(c){if(c===null){e.consume(c);return}return e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),i.currentConstruct=void 0,r}}const bE={resolveAll:tm()},EE=em("string"),_E=em("text");function em(e){return{resolveAll:tm(e==="text"?vE:void 0),tokenize:i};function i(r){const l=this,s=this.parser.constructs[e],c=r.attempt(s,u,f);return u;function u(y){return m(y)?c(y):f(y)}function f(y){if(y===null){r.consume(y);return}return r.enter("data"),r.consume(y),p}function p(y){return m(y)?(r.exit("data"),c(y)):(r.consume(y),p)}function m(y){if(y===null)return!0;const h=s[y];let b=-1;if(h)for(;++b-1){const f=u[0];typeof f=="string"?u[0]=f.slice(l):u.shift()}c>0&&u.push(e[s].slice(0,c))}return u}function LE(e,i){let r=-1;const l=[];let s;for(;++r0){const _t=Ce.tokenStack[Ce.tokenStack.length-1];(_t[1]||jf).call(Ce,void 0,_t[0])}for(oe.position={start:Sr(W.length>0?W[0][1].start:{line:1,column:1,offset:0}),end:Sr(W.length>0?W[W.length-2][1].end:{line:1,column:1,offset:0})},He=-1;++He0&&(l.className=["language-"+s[0]]);let c={type:"element",tagName:"code",properties:l,children:[{type:"text",value:r}]};return i.meta&&(c.data={meta:i.meta}),e.patch(i,c),c=e.applyData(i,c),c={type:"element",tagName:"pre",properties:{},children:[c]},e.patch(i,c),c}function qE(e,i){const r={type:"element",tagName:"del",properties:{},children:e.all(i)};return e.patch(i,r),e.applyData(i,r)}function YE(e,i){const r={type:"element",tagName:"em",properties:{},children:e.all(i)};return e.patch(i,r),e.applyData(i,r)}function QE(e,i){const r=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",l=String(i.identifier).toUpperCase(),s=Li(l.toLowerCase()),c=e.footnoteOrder.indexOf(l);let u,f=e.footnoteCounts.get(l);f===void 0?(f=0,e.footnoteOrder.push(l),u=e.footnoteOrder.length):u=c+1,f+=1,e.footnoteCounts.set(l,f);const p={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+s,id:r+"fnref-"+s+(f>1?"-"+f:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(u)}]};e.patch(i,p);const m={type:"element",tagName:"sup",properties:{},children:[p]};return e.patch(i,m),e.applyData(i,m)}function XE(e,i){const r={type:"element",tagName:"h"+i.depth,properties:{},children:e.all(i)};return e.patch(i,r),e.applyData(i,r)}function ZE(e,i){if(e.options.allowDangerousHtml){const r={type:"raw",value:i.value};return e.patch(i,r),e.applyData(i,r)}}function im(e,i){const r=i.referenceType;let l="]";if(r==="collapsed"?l+="[]":r==="full"&&(l+="["+(i.label||i.identifier)+"]"),i.type==="imageReference")return[{type:"text",value:"!["+i.alt+l}];const s=e.all(i),c=s[0];c&&c.type==="text"?c.value="["+c.value:s.unshift({type:"text",value:"["});const u=s[s.length-1];return u&&u.type==="text"?u.value+=l:s.push({type:"text",value:l}),s}function JE(e,i){const r=String(i.identifier).toUpperCase(),l=e.definitionById.get(r);if(!l)return im(e,i);const s={src:Li(l.url||""),alt:i.alt};l.title!==null&&l.title!==void 0&&(s.title=l.title);const c={type:"element",tagName:"img",properties:s,children:[]};return e.patch(i,c),e.applyData(i,c)}function e_(e,i){const r={src:Li(i.url)};i.alt!==null&&i.alt!==void 0&&(r.alt=i.alt),i.title!==null&&i.title!==void 0&&(r.title=i.title);const l={type:"element",tagName:"img",properties:r,children:[]};return e.patch(i,l),e.applyData(i,l)}function t_(e,i){const r={type:"text",value:i.value.replace(/\r?\n|\r/g," ")};e.patch(i,r);const l={type:"element",tagName:"code",properties:{},children:[r]};return e.patch(i,l),e.applyData(i,l)}function n_(e,i){const r=String(i.identifier).toUpperCase(),l=e.definitionById.get(r);if(!l)return im(e,i);const s={href:Li(l.url||"")};l.title!==null&&l.title!==void 0&&(s.title=l.title);const c={type:"element",tagName:"a",properties:s,children:e.all(i)};return e.patch(i,c),e.applyData(i,c)}function r_(e,i){const r={href:Li(i.url)};i.title!==null&&i.title!==void 0&&(r.title=i.title);const l={type:"element",tagName:"a",properties:r,children:e.all(i)};return e.patch(i,l),e.applyData(i,l)}function i_(e,i,r){const l=e.all(i),s=r?o_(r):om(i),c={},u=[];if(typeof i.checked=="boolean"){const y=l[0];let h;y&&y.type==="element"&&y.tagName==="p"?h=y:(h={type:"element",tagName:"p",properties:{},children:[]},l.unshift(h)),h.children.length>0&&h.children.unshift({type:"text",value:" "}),h.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:i.checked,disabled:!0},children:[]}),c.className=["task-list-item"]}let f=-1;for(;++f1}function l_(e,i){const r={},l=e.all(i);let s=-1;for(typeof i.start=="number"&&i.start!==1&&(r.start=i.start);++s0){const u={type:"element",tagName:"tbody",properties:{},children:e.wrap(r,!0)},f=Iu(i.children[1]),p=Fp(i.children[i.children.length-1]);f&&p&&(u.position={start:f,end:p}),s.push(u)}const c={type:"element",tagName:"table",properties:{},children:e.wrap(s,!0)};return e.patch(i,c),e.applyData(i,c)}function d_(e,i,r){const l=r?r.children:void 0,c=(l?l.indexOf(i):1)===0?"th":"td",u=r&&r.type==="table"?r.align:void 0,f=u?u.length:i.children.length;let p=-1;const m=[];for(;++p0,!0),l[0]),s=l.index+l[0].length,l=r.exec(i);return c.push(Wf(i.slice(s),s>0,!1)),c.join("")}function Wf(e,i,r){let l=0,s=e.length;if(i){let c=e.codePointAt(l);for(;c===Gf||c===Kf;)l++,c=e.codePointAt(l)}if(r){let c=e.codePointAt(s-1);for(;c===Gf||c===Kf;)s--,c=e.codePointAt(s-1)}return s>l?e.slice(l,s):""}function m_(e,i){const r={type:"text",value:p_(String(i.value))};return e.patch(i,r),e.applyData(i,r)}function g_(e,i){const r={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(i,r),e.applyData(i,r)}const h_={blockquote:KE,break:WE,code:VE,delete:qE,emphasis:YE,footnoteReference:QE,heading:XE,html:ZE,imageReference:JE,image:e_,inlineCode:t_,linkReference:n_,link:r_,listItem:i_,list:l_,paragraph:a_,root:s_,strong:u_,table:c_,tableCell:f_,tableRow:d_,text:m_,thematicBreak:g_,toml:$l,yaml:$l,definition:$l,footnoteDefinition:$l};function $l(){}const lm=-1,la=0,So=1,Zl=2,Bu=3,Uu=4,$u=5,Hu=6,am=7,sm=8,um=typeof self=="object"?self:globalThis,Vf=(e,i)=>{switch(e){case"Function":case"SharedWorker":case"Worker":case"eval":case"setInterval":case"setTimeout":throw new TypeError("unable to deserialize "+e)}return new um[e](i)},y_=(e,i)=>{const r=(s,c)=>(e.set(c,s),s),l=s=>{if(e.has(s))return e.get(s);const[c,u]=i[s];switch(c){case la:case lm:return r(u,s);case So:{const f=r([],s);for(const p of u)f.push(l(p));return f}case Zl:{const f=r({},s);for(const[p,m]of u)f[l(p)]=l(m);return f}case Bu:return r(new Date(u),s);case Uu:{const{source:f,flags:p}=u;return r(new RegExp(f,p),s)}case $u:{const f=r(new Map,s);for(const[p,m]of u)f.set(l(p),l(m));return f}case Hu:{const f=r(new Set,s);for(const p of u)f.add(l(p));return f}case am:{const{name:f,message:p}=u;return r(typeof um[f]=="function"?Vf(f,p):new Error(p),s)}case sm:return r(BigInt(u),s);case"BigInt":return r(Object(BigInt(u)),s);case"ArrayBuffer":return r(new Uint8Array(u).buffer,u);case"DataView":{const{buffer:f}=new Uint8Array(u);return r(new DataView(f),u)}}return r(Vf(c,u),s)};return l},qf=e=>y_(new Map,e)(0),Yr="",{toString:b_}={},{keys:E_}=Object,vo=e=>{const i=typeof e;if(i!=="object"||!e)return[la,i];const r=b_.call(e).slice(8,-1);switch(r){case"Array":return[So,Yr];case"Object":return[Zl,Yr];case"Date":return[Bu,Yr];case"RegExp":return[Uu,Yr];case"Map":return[$u,Yr];case"Set":return[Hu,Yr];case"DataView":return[So,r]}return r.includes("Array")?[So,r]:e instanceof Error?[am,e.name||"Error"]:[Zl,r]},Hl=([e,i])=>e===la&&(i==="function"||i==="symbol"),__=(e,i,r,l)=>{const s=(u,f)=>{const p=l.push(u)-1;return r.set(f,p),p},c=u=>{if(r.has(u))return r.get(u);let[f,p]=vo(u);switch(f){case la:{let y=u;switch(p){case"bigint":f=sm,y=u.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+p);y=null;break;case"undefined":return s([lm],u)}return s([f,y],u)}case So:{if(p){let b=u;return p==="DataView"?b=new Uint8Array(u.buffer):p==="ArrayBuffer"&&(b=new Uint8Array(u)),s([p,[...b]],u)}const y=[],h=s([f,y],u);for(const b of u)y.push(c(b));return h}case Zl:{if(p)switch(p){case"BigInt":return s([p,u.toString()],u);case"Boolean":case"Number":case"String":return s([p,u.valueOf()],u)}if(i&&"toJSON"in u)return c(u.toJSON());const y=[],h=s([f,y],u);for(const b of E_(u))(e||!Hl(vo(u[b])))&&y.push([c(b),c(u[b])]);return h}case Bu:return s([f,isNaN(u.getTime())?Yr:u.toISOString()],u);case Uu:{const{source:y,flags:h}=u;return s([f,{source:y,flags:h}],u)}case $u:{const y=[],h=s([f,y],u);for(const[b,E]of u)(e||!(Hl(vo(b))||Hl(vo(E))))&&y.push([c(b),c(E)]);return h}case Hu:{const y=[],h=s([f,y],u);for(const b of u)(e||!Hl(vo(b)))&&y.push(c(b));return h}}const{message:m}=u;return s([f,{name:p,message:m}],u)};return c},Yf=(e,{json:i,lossy:r}={})=>{const l=[];return __(!(i||r),!!i,new Map,l)(e),l},Jl=typeof structuredClone=="function"?(e,i)=>i&&("json"in i||"lossy"in i)?qf(Yf(e,i)):structuredClone(e):(e,i)=>qf(Yf(e,i));function v_(e,i){const r=[{type:"text",value:"↩"}];return i>1&&r.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(i)}]}),r}function k_(e,i){return"Back to reference "+(e+1)+(i>1?"-"+i:"")}function w_(e){const i=typeof e.options.clobberPrefix=="string"?e.options.clobberPrefix:"user-content-",r=e.options.footnoteBackContent||v_,l=e.options.footnoteBackLabel||k_,s=e.options.footnoteLabel||"Footnotes",c=e.options.footnoteLabelTagName||"h2",u=e.options.footnoteLabelProperties||{className:["sr-only"]},f=[];let p=-1;for(;++p0&&w.push({type:"text",value:" "});let L=typeof r=="string"?r:r(p,E);typeof L=="string"&&(L={type:"text",value:L}),w.push({type:"element",tagName:"a",properties:{href:"#"+i+"fnref-"+b+(E>1?"-"+E:""),dataFootnoteBackref:"",ariaLabel:typeof l=="string"?l:l(p,E),className:["data-footnote-backref"]},children:Array.isArray(L)?L:[L]})}const O=y[y.length-1];if(O&&O.type==="element"&&O.tagName==="p"){const L=O.children[O.children.length-1];L&&L.type==="text"?L.value+=" ":O.children.push({type:"text",value:" "}),O.children.push(...w)}else y.push(...w);const S={type:"element",tagName:"li",properties:{id:i+"fn-"+b},children:e.wrap(y,!0)};e.patch(m,S),f.push(S)}if(f.length!==0)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:c,properties:{...Jl(u),id:"footnote-label"},children:[{type:"text",value:s}]},{type:"text",value:` -`},{type:"element",tagName:"ol",properties:{},children:e.wrap(f,!0)},{type:"text",value:` -`}]}}const Oo=(function(e){if(e==null)return T_;if(typeof e=="function")return aa(e);if(typeof e=="object")return Array.isArray(e)?x_(e):S_(e);if(typeof e=="string")return N_(e);throw new Error("Expected function, string, or object as test")});function x_(e){const i=[];let r=-1;for(;++r":""))+")"})}return b;function b(){let E=cm,w,N,O;if((!i||c(p,m,y[y.length-1]||void 0))&&(E=O_(r(p,y)),E[0]===ku))return E;if("children"in p&&p.children){const S=p;if(S.children&&E[0]!==R_)for(N=(l?S.children.length:-1)+u,O=y.concat(S);N>-1&&N0&&r.push({type:"text",value:` -`}),r}function Qf(e){let i=0,r=e.charCodeAt(i);for(;r===9||r===32;)i++,r=e.charCodeAt(i);return e.slice(i)}function Xf(e,i){const r=M_(e,i),l=r.one(e,void 0),s=w_(r),c=Array.isArray(l)?{type:"root",children:l}:l||{type:"root",children:[]};return s&&c.children.push({type:"text",value:` -`},s),c}function F_(e,i){return e&&"run"in e?async function(r,l){const s=Xf(r,{file:l,...i});await e.run(s,l)}:function(r,l){return Xf(r,{file:l,...e||i})}}function Zf(e){if(e)throw e}var Js,Jf;function B_(){if(Jf)return Js;Jf=1;var e=Object.prototype.hasOwnProperty,i=Object.prototype.toString,r=Object.defineProperty,l=Object.getOwnPropertyDescriptor,s=function(m){return typeof Array.isArray=="function"?Array.isArray(m):i.call(m)==="[object Array]"},c=function(m){if(!m||i.call(m)!=="[object Object]")return!1;var y=e.call(m,"constructor"),h=m.constructor&&m.constructor.prototype&&e.call(m.constructor.prototype,"isPrototypeOf");if(m.constructor&&!y&&!h)return!1;var b;for(b in m);return typeof b>"u"||e.call(m,b)},u=function(m,y){r&&y.name==="__proto__"?r(m,y.name,{enumerable:!0,configurable:!0,value:y.newValue,writable:!0}):m[y.name]=y.newValue},f=function(m,y){if(y==="__proto__")if(e.call(m,y)){if(l)return l(m,y).value}else return;return m[y]};return Js=function p(){var m,y,h,b,E,w,N=arguments[0],O=1,S=arguments.length,L=!1;for(typeof N=="boolean"&&(L=N,N=arguments[1]||{},O=2),(N==null||typeof N!="object"&&typeof N!="function")&&(N={});Ou.length;let p;f&&u.push(s);try{p=e.apply(this,u)}catch(m){const y=m;if(f&&r)throw y;return s(y)}f||(p&&p.then&&typeof p.then=="function"?p.then(c,s):p instanceof Error?s(p):c(p))}function s(u,...f){r||(r=!0,i(u,...f))}function c(u){s(null,u)}}const Un={basename:j_,dirname:G_,extname:K_,join:W_,sep:"/"};function j_(e,i){if(i!==void 0&&typeof i!="string")throw new TypeError('"ext" argument must be a string');Io(e);let r=0,l=-1,s=e.length,c;if(i===void 0||i.length===0||i.length>e.length){for(;s--;)if(e.codePointAt(s)===47){if(c){r=s+1;break}}else l<0&&(c=!0,l=s+1);return l<0?"":e.slice(r,l)}if(i===e)return"";let u=-1,f=i.length-1;for(;s--;)if(e.codePointAt(s)===47){if(c){r=s+1;break}}else u<0&&(c=!0,u=s+1),f>-1&&(e.codePointAt(s)===i.codePointAt(f--)?f<0&&(l=s):(f=-1,l=u));return r===l?l=u:l<0&&(l=e.length),e.slice(r,l)}function G_(e){if(Io(e),e.length===0)return".";let i=-1,r=e.length,l;for(;--r;)if(e.codePointAt(r)===47){if(l){i=r;break}}else l||(l=!0);return i<0?e.codePointAt(0)===47?"/":".":i===1&&e.codePointAt(0)===47?"//":e.slice(0,i)}function K_(e){Io(e);let i=e.length,r=-1,l=0,s=-1,c=0,u;for(;i--;){const f=e.codePointAt(i);if(f===47){if(u){l=i+1;break}continue}r<0&&(u=!0,r=i+1),f===46?s<0?s=i:c!==1&&(c=1):s>-1&&(c=-1)}return s<0||r<0||c===0||c===1&&s===r-1&&s===l+1?"":e.slice(s,r)}function W_(...e){let i=-1,r;for(;++i0&&e.codePointAt(e.length-1)===47&&(r+="/"),i?"/"+r:r}function q_(e,i){let r="",l=0,s=-1,c=0,u=-1,f,p;for(;++u<=e.length;){if(u2){if(p=r.lastIndexOf("/"),p!==r.length-1){p<0?(r="",l=0):(r=r.slice(0,p),l=r.length-1-r.lastIndexOf("/")),s=u,c=0;continue}}else if(r.length>0){r="",l=0,s=u,c=0;continue}}i&&(r=r.length>0?r+"/..":"..",l=2)}else r.length>0?r+="/"+e.slice(s+1,u):r=e.slice(s+1,u),l=u-s-1;s=u,c=0}else f===46&&c>-1?c++:c=-1}return r}function Io(e){if(typeof e!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const Y_={cwd:Q_};function Q_(){return"/"}function Su(e){return!!(e!==null&&typeof e=="object"&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&e.auth===void 0)}function X_(e){if(typeof e=="string")e=new URL(e);else if(!Su(e)){const i=new TypeError('The "path" argument must be of type string or an instance of URL. Received `'+e+"`");throw i.code="ERR_INVALID_ARG_TYPE",i}if(e.protocol!=="file:"){const i=new TypeError("The URL must be of scheme file");throw i.code="ERR_INVALID_URL_SCHEME",i}return Z_(e)}function Z_(e){if(e.hostname!==""){const l=new TypeError('File URL host must be "localhost" or empty on darwin');throw l.code="ERR_INVALID_FILE_URL_HOST",l}const i=e.pathname;let r=-1;for(;++r0){let[E,...w]=y;const N=l[b][1];xu(N)&&xu(E)&&(E=eu(!0,N,E)),l[b]=[m,E,...w]}}}}const nv=new ju().freeze();function iu(e,i){if(typeof i!="function")throw new TypeError("Cannot `"+e+"` without `parser`")}function ou(e,i){if(typeof i!="function")throw new TypeError("Cannot `"+e+"` without `compiler`")}function lu(e,i){if(i)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function tp(e){if(!xu(e)||typeof e.type!="string")throw new TypeError("Expected node, got `"+e+"`")}function np(e,i,r){if(!r)throw new Error("`"+e+"` finished async. Use `"+i+"` instead")}function jl(e){return rv(e)?e:new fm(e)}function rv(e){return!!(e&&typeof e=="object"&&"message"in e&&"messages"in e)}function iv(e){return typeof e=="string"||ov(e)}function ov(e){return!!(e&&typeof e=="object"&&"byteLength"in e&&"byteOffset"in e)}const lv="https://github.com/remarkjs/react-markdown/blob/main/changelog.md",rp=[],ip={allowDangerousHtml:!0},av=/^(https?|ircs?|mailto|xmpp)$/i,sv=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function uv(e){const i=cv(e),r=dv(e);return fv(i.runSync(i.parse(r),r),e)}function cv(e){const i=e.rehypePlugins||rp,r=e.remarkPlugins||rp,l=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...ip}:ip;return nv().use(GE).use(r).use(F_,l).use(i)}function dv(e){const i=e.children||"",r=new fm;return typeof i=="string"&&(r.value=i),r}function fv(e,i){const r=i.allowedElements,l=i.allowElement,s=i.components,c=i.disallowedElements,u=i.skipHtml,f=i.unwrapDisallowed,p=i.urlTransform||pv;for(const y of sv)Object.hasOwn(i,y.from)&&(""+y.from+(y.to?"use `"+y.to+"` instead":"remove it")+lv+y.id,void 0);return i.className&&(e={type:"element",tagName:"div",properties:{className:i.className},children:e.type==="root"?e.children:[e]}),sa(e,m),Ty(e,{Fragment:H.Fragment,components:s,ignoreInvalidStyle:!0,jsx:H.jsx,jsxs:H.jsxs,passKeys:!0,passNode:!0});function m(y,h,b){if(y.type==="raw"&&b&&typeof h=="number")return u?b.children.splice(h,1):b.children[h]={type:"text",value:y.value},h;if(y.type==="element"){let E;for(E in Qs)if(Object.hasOwn(Qs,E)&&Object.hasOwn(y.properties,E)){const w=y.properties[E],N=Qs[E];(N===null||N.includes(y.tagName))&&(y.properties[E]=p(String(w||""),E,y))}}if(y.type==="element"){let E=r?!r.includes(y.tagName):c?c.includes(y.tagName):!1;if(!E&&l&&typeof h=="number"&&(E=!l(y,h,b)),E&&b&&typeof h=="number")return f&&y.children?b.children.splice(h,1,...y.children):b.children.splice(h,1),h}}}function pv(e){const i=e.indexOf(":"),r=e.indexOf("?"),l=e.indexOf("#"),s=e.indexOf("/");return i===-1||s!==-1&&i>s||r!==-1&&i>r||l!==-1&&i>l||av.test(e.slice(0,i))?e:""}function op(e,i){const r=String(e);if(typeof i!="string")throw new TypeError("Expected character");let l=0,s=r.indexOf(i);for(;s!==-1;)l++,s=r.indexOf(i,s+i.length);return l}function mv(e){if(typeof e!="string")throw new TypeError("Expected a string");return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function gv(e,i,r){const s=Oo((r||{}).ignore||[]),c=hv(i);let u=-1;for(;++u0?{type:"text",value:M}:void 0),M===!1?b.lastIndex=q+1:(w!==q&&L.push({type:"text",value:m.value.slice(w,q)}),Array.isArray(M)?L.push(...M):M&&L.push(M),w=q+P[0].length,S=!0),!b.global)break;P=b.exec(m.value)}return S?(w?\]}]+$/.exec(e);if(!i)return[e,void 0];e=e.slice(0,i.index);let r=i[0],l=r.indexOf(")");const s=op(e,"(");let c=op(e,")");for(;l!==-1&&s>c;)e+=r.slice(0,l+1),r=r.slice(l+1),l=r.indexOf(")"),c++;return[e,r]}function pm(e,i){const r=e.input.charCodeAt(e.index-1);return(e.index===0||Xr(r)||ia(r))&&(!i||r!==47)}mm.peek=Bv;function Ov(){this.buffer()}function Iv(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function Mv(){this.buffer()}function Lv(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function Dv(e){const i=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=Cn(this.sliceSerialize(e)).toLowerCase(),r.label=i}function Pv(e){this.exit(e)}function zv(e){const i=this.resume(),r=this.stack[this.stack.length-1];r.type,r.identifier=Cn(this.sliceSerialize(e)).toLowerCase(),r.label=i}function Fv(e){this.exit(e)}function Bv(){return"["}function mm(e,i,r,l){const s=r.createTracker(l);let c=s.move("[^");const u=r.enter("footnoteReference"),f=r.enter("reference");return c+=s.move(r.safe(r.associationId(e),{after:"]",before:c})),f(),u(),c+=s.move("]"),c}function Uv(){return{enter:{gfmFootnoteCallString:Ov,gfmFootnoteCall:Iv,gfmFootnoteDefinitionLabelString:Mv,gfmFootnoteDefinition:Lv},exit:{gfmFootnoteCallString:Dv,gfmFootnoteCall:Pv,gfmFootnoteDefinitionLabelString:zv,gfmFootnoteDefinition:Fv}}}function $v(e){let i=!1;return e&&e.firstLineBlank&&(i=!0),{handlers:{footnoteDefinition:r,footnoteReference:mm},unsafe:[{character:"[",inConstruct:["label","phrasing","reference"]}]};function r(l,s,c,u){const f=c.createTracker(u);let p=f.move("[^");const m=c.enter("footnoteDefinition"),y=c.enter("label");return p+=f.move(c.safe(c.associationId(l),{before:p,after:"]"})),y(),p+=f.move("]:"),l.children&&l.children.length>0&&(f.shift(4),p+=f.move((i?` -`:" ")+c.indentLines(c.containerFlow(l,f.current()),i?gm:Hv))),m(),p}}function Hv(e,i,r){return i===0?e:gm(e,i,r)}function gm(e,i,r){return(r?"":" ")+e}const jv=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];hm.peek=qv;function Gv(){return{canContainEols:["delete"],enter:{strikethrough:Wv},exit:{strikethrough:Vv}}}function Kv(){return{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:jv}],handlers:{delete:hm}}}function Wv(e){this.enter({type:"delete",children:[]},e)}function Vv(e){this.exit(e)}function hm(e,i,r,l){const s=r.createTracker(l),c=r.enter("strikethrough");let u=s.move("~~");return u+=r.containerPhrasing(e,{...s.current(),before:u,after:"~"}),u+=s.move("~~"),c(),u}function qv(){return"~"}function Yv(e){return e.length}function Qv(e,i){const r=i||{},l=(r.align||[]).concat(),s=r.stringLength||Yv,c=[],u=[],f=[],p=[];let m=0,y=-1;for(;++ym&&(m=e[y].length);++Sp[S])&&(p[S]=P)}N.push(L)}u[y]=N,f[y]=O}let h=-1;if(typeof l=="object"&&"length"in l)for(;++hp[h]&&(p[h]=L),E[h]=L),b[h]=P}u.splice(1,0,b),f.splice(1,0,E),y=-1;const w=[];for(;++y "),c.shift(2);const u=r.indentLines(r.containerFlow(e,c.current()),Jv);return s(),u}function Jv(e,i,r){return">"+(r?"":" ")+e}function ek(e,i){return ap(e,i.inConstruct,!0)&&!ap(e,i.notInConstruct,!1)}function ap(e,i,r){if(typeof i=="string"&&(i=[i]),!i||i.length===0)return r;let l=-1;for(;++lu&&(u=c):c=1,s=l+i.length,l=r.indexOf(i,s);return u}function nk(e,i){return!!(i.options.fences===!1&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}function rk(e){const i=e.options.fence||"`";if(i!=="`"&&i!=="~")throw new Error("Cannot serialize code with `"+i+"` for `options.fence`, expected `` ` `` or `~`");return i}function ik(e,i,r,l){const s=rk(r),c=e.value||"",u=s==="`"?"GraveAccent":"Tilde";if(nk(e,r)){const h=r.enter("codeIndented"),b=r.indentLines(c,ok);return h(),b}const f=r.createTracker(l),p=s.repeat(Math.max(tk(c,s)+1,3)),m=r.enter("codeFenced");let y=f.move(p);if(e.lang){const h=r.enter(`codeFencedLang${u}`);y+=f.move(r.safe(e.lang,{before:y,after:" ",encode:["`"],...f.current()})),h()}if(e.lang&&e.meta){const h=r.enter(`codeFencedMeta${u}`);y+=f.move(" "),y+=f.move(r.safe(e.meta,{before:y,after:` -`,encode:["`"],...f.current()})),h()}return y+=f.move(` -`),c&&(y+=f.move(c+` -`)),y+=f.move(p),m(),y}function ok(e,i,r){return(r?"":" ")+e}function Gu(e){const i=e.options.quote||'"';if(i!=='"'&&i!=="'")throw new Error("Cannot serialize title with `"+i+"` for `options.quote`, expected `\"`, or `'`");return i}function lk(e,i,r,l){const s=Gu(r),c=s==='"'?"Quote":"Apostrophe",u=r.enter("definition");let f=r.enter("label");const p=r.createTracker(l);let m=p.move("[");return m+=p.move(r.safe(r.associationId(e),{before:m,after:"]",...p.current()})),m+=p.move("]: "),f(),!e.url||/[\0- \u007F]/.test(e.url)?(f=r.enter("destinationLiteral"),m+=p.move("<"),m+=p.move(r.safe(e.url,{before:m,after:">",...p.current()})),m+=p.move(">")):(f=r.enter("destinationRaw"),m+=p.move(r.safe(e.url,{before:m,after:e.title?" ":` -`,...p.current()}))),f(),e.title&&(f=r.enter(`title${c}`),m+=p.move(" "+s),m+=p.move(r.safe(e.title,{before:m,after:s,...p.current()})),m+=p.move(s),f()),u(),m}function ak(e){const i=e.options.emphasis||"*";if(i!=="*"&&i!=="_")throw new Error("Cannot serialize emphasis with `"+i+"` for `options.emphasis`, expected `*`, or `_`");return i}function To(e){return"&#x"+e.toString(16).toUpperCase()+";"}function ea(e,i,r){const l=Ii(e),s=Ii(i);return l===void 0?s===void 0?r==="_"?{inside:!0,outside:!0}:{inside:!1,outside:!1}:s===1?{inside:!0,outside:!0}:{inside:!1,outside:!0}:l===1?s===void 0?{inside:!1,outside:!1}:s===1?{inside:!0,outside:!0}:{inside:!1,outside:!1}:s===void 0?{inside:!1,outside:!1}:s===1?{inside:!0,outside:!1}:{inside:!1,outside:!1}}ym.peek=sk;function ym(e,i,r,l){const s=ak(r),c=r.enter("emphasis"),u=r.createTracker(l),f=u.move(s);let p=u.move(r.containerPhrasing(e,{after:s,before:f,...u.current()}));const m=p.charCodeAt(0),y=ea(l.before.charCodeAt(l.before.length-1),m,s);y.inside&&(p=To(m)+p.slice(1));const h=p.charCodeAt(p.length-1),b=ea(l.after.charCodeAt(0),h,s);b.inside&&(p=p.slice(0,-1)+To(h));const E=u.move(s);return c(),r.attentionEncodeSurroundingInfo={after:b.outside,before:y.outside},f+p+E}function sk(e,i,r){return r.options.emphasis||"*"}function uk(e,i){let r=!1;return sa(e,function(l){if("value"in l&&/\r?\n|\r/.test(l.value)||l.type==="break")return r=!0,ku}),!!((!e.depth||e.depth<3)&&Pu(e)&&(i.options.setext||r))}function ck(e,i,r,l){const s=Math.max(Math.min(6,e.depth||1),1),c=r.createTracker(l);if(uk(e,r)){const y=r.enter("headingSetext"),h=r.enter("phrasing"),b=r.containerPhrasing(e,{...c.current(),before:` -`,after:` -`});return h(),y(),b+` -`+(s===1?"=":"-").repeat(b.length-(Math.max(b.lastIndexOf("\r"),b.lastIndexOf(` -`))+1))}const u="#".repeat(s),f=r.enter("headingAtx"),p=r.enter("phrasing");c.move(u+" ");let m=r.containerPhrasing(e,{before:"# ",after:` -`,...c.current()});return/^[\t ]/.test(m)&&(m=To(m.charCodeAt(0))+m.slice(1)),m=m?u+" "+m:u,r.options.closeAtx&&(m+=" "+u),p(),f(),m}bm.peek=dk;function bm(e){return e.value||""}function dk(){return"<"}Em.peek=fk;function Em(e,i,r,l){const s=Gu(r),c=s==='"'?"Quote":"Apostrophe",u=r.enter("image");let f=r.enter("label");const p=r.createTracker(l);let m=p.move("![");return m+=p.move(r.safe(e.alt,{before:m,after:"]",...p.current()})),m+=p.move("]("),f(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(f=r.enter("destinationLiteral"),m+=p.move("<"),m+=p.move(r.safe(e.url,{before:m,after:">",...p.current()})),m+=p.move(">")):(f=r.enter("destinationRaw"),m+=p.move(r.safe(e.url,{before:m,after:e.title?" ":")",...p.current()}))),f(),e.title&&(f=r.enter(`title${c}`),m+=p.move(" "+s),m+=p.move(r.safe(e.title,{before:m,after:s,...p.current()})),m+=p.move(s),f()),m+=p.move(")"),u(),m}function fk(){return"!"}_m.peek=pk;function _m(e,i,r,l){const s=e.referenceType,c=r.enter("imageReference");let u=r.enter("label");const f=r.createTracker(l);let p=f.move("![");const m=r.safe(e.alt,{before:p,after:"]",...f.current()});p+=f.move(m+"]["),u();const y=r.stack;r.stack=[],u=r.enter("reference");const h=r.safe(r.associationId(e),{before:p,after:"]",...f.current()});return u(),r.stack=y,c(),s==="full"||!m||m!==h?p+=f.move(h+"]"):s==="shortcut"?p=p.slice(0,-1):p+=f.move("]"),p}function pk(){return"!"}vm.peek=mk;function vm(e,i,r){let l=e.value||"",s="`",c=-1;for(;new RegExp("(^|[^`])"+s+"([^`]|$)").test(l);)s+="`";for(/[^ \r\n]/.test(l)&&(/^[ \r\n]/.test(l)&&/[ \r\n]$/.test(l)||/^`|`$/.test(l))&&(l=" "+l+" ");++c\u007F]/.test(e.url))}wm.peek=gk;function wm(e,i,r,l){const s=Gu(r),c=s==='"'?"Quote":"Apostrophe",u=r.createTracker(l);let f,p;if(km(e,r)){const y=r.stack;r.stack=[],f=r.enter("autolink");let h=u.move("<");return h+=u.move(r.containerPhrasing(e,{before:h,after:">",...u.current()})),h+=u.move(">"),f(),r.stack=y,h}f=r.enter("link"),p=r.enter("label");let m=u.move("[");return m+=u.move(r.containerPhrasing(e,{before:m,after:"](",...u.current()})),m+=u.move("]("),p(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(p=r.enter("destinationLiteral"),m+=u.move("<"),m+=u.move(r.safe(e.url,{before:m,after:">",...u.current()})),m+=u.move(">")):(p=r.enter("destinationRaw"),m+=u.move(r.safe(e.url,{before:m,after:e.title?" ":")",...u.current()}))),p(),e.title&&(p=r.enter(`title${c}`),m+=u.move(" "+s),m+=u.move(r.safe(e.title,{before:m,after:s,...u.current()})),m+=u.move(s),p()),m+=u.move(")"),f(),m}function gk(e,i,r){return km(e,r)?"<":"["}xm.peek=hk;function xm(e,i,r,l){const s=e.referenceType,c=r.enter("linkReference");let u=r.enter("label");const f=r.createTracker(l);let p=f.move("[");const m=r.containerPhrasing(e,{before:p,after:"]",...f.current()});p+=f.move(m+"]["),u();const y=r.stack;r.stack=[],u=r.enter("reference");const h=r.safe(r.associationId(e),{before:p,after:"]",...f.current()});return u(),r.stack=y,c(),s==="full"||!m||m!==h?p+=f.move(h+"]"):s==="shortcut"?p=p.slice(0,-1):p+=f.move("]"),p}function hk(){return"["}function Ku(e){const i=e.options.bullet||"*";if(i!=="*"&&i!=="+"&&i!=="-")throw new Error("Cannot serialize items with `"+i+"` for `options.bullet`, expected `*`, `+`, or `-`");return i}function yk(e){const i=Ku(e),r=e.options.bulletOther;if(!r)return i==="*"?"-":"*";if(r!=="*"&&r!=="+"&&r!=="-")throw new Error("Cannot serialize items with `"+r+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(r===i)throw new Error("Expected `bullet` (`"+i+"`) and `bulletOther` (`"+r+"`) to be different");return r}function bk(e){const i=e.options.bulletOrdered||".";if(i!=="."&&i!==")")throw new Error("Cannot serialize items with `"+i+"` for `options.bulletOrdered`, expected `.` or `)`");return i}function Sm(e){const i=e.options.rule||"*";if(i!=="*"&&i!=="-"&&i!=="_")throw new Error("Cannot serialize rules with `"+i+"` for `options.rule`, expected `*`, `-`, or `_`");return i}function Ek(e,i,r,l){const s=r.enter("list"),c=r.bulletCurrent;let u=e.ordered?bk(r):Ku(r);const f=e.ordered?u==="."?")":".":yk(r);let p=i&&r.bulletLastUsed?u===r.bulletLastUsed:!1;if(!e.ordered){const y=e.children?e.children[0]:void 0;if((u==="*"||u==="-")&&y&&(!y.children||!y.children[0])&&r.stack[r.stack.length-1]==="list"&&r.stack[r.stack.length-2]==="listItem"&&r.stack[r.stack.length-3]==="list"&&r.stack[r.stack.length-4]==="listItem"&&r.indexStack[r.indexStack.length-1]===0&&r.indexStack[r.indexStack.length-2]===0&&r.indexStack[r.indexStack.length-3]===0&&(p=!0),Sm(r)===u&&y){let h=-1;for(;++h-1?i.start:1)+(r.options.incrementListMarker===!1?0:i.children.indexOf(e))+c);let u=c.length+1;(s==="tab"||s==="mixed"&&(i&&i.type==="list"&&i.spread||e.spread))&&(u=Math.ceil(u/4)*4);const f=r.createTracker(l);f.move(c+" ".repeat(u-c.length)),f.shift(u);const p=r.enter("listItem"),m=r.indentLines(r.containerFlow(e,f.current()),y);return p(),m;function y(h,b,E){return b?(E?"":" ".repeat(u))+h:(E?c:c+" ".repeat(u-c.length))+h}}function kk(e,i,r,l){const s=r.enter("paragraph"),c=r.enter("phrasing"),u=r.containerPhrasing(e,l);return c(),s(),u}const wk=Oo(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function xk(e,i,r,l){return(e.children.some(function(u){return wk(u)})?r.containerPhrasing:r.containerFlow).call(r,e,l)}function Sk(e){const i=e.options.strong||"*";if(i!=="*"&&i!=="_")throw new Error("Cannot serialize strong with `"+i+"` for `options.strong`, expected `*`, or `_`");return i}Nm.peek=Nk;function Nm(e,i,r,l){const s=Sk(r),c=r.enter("strong"),u=r.createTracker(l),f=u.move(s+s);let p=u.move(r.containerPhrasing(e,{after:s,before:f,...u.current()}));const m=p.charCodeAt(0),y=ea(l.before.charCodeAt(l.before.length-1),m,s);y.inside&&(p=To(m)+p.slice(1));const h=p.charCodeAt(p.length-1),b=ea(l.after.charCodeAt(0),h,s);b.inside&&(p=p.slice(0,-1)+To(h));const E=u.move(s+s);return c(),r.attentionEncodeSurroundingInfo={after:b.outside,before:y.outside},f+p+E}function Nk(e,i,r){return r.options.strong||"*"}function Tk(e,i,r,l){return r.safe(e.value,l)}function Ck(e){const i=e.options.ruleRepetition||3;if(i<3)throw new Error("Cannot serialize rules with repetition `"+i+"` for `options.ruleRepetition`, expected `3` or more");return i}function Ak(e,i,r){const l=(Sm(r)+(r.options.ruleSpaces?" ":"")).repeat(Ck(r));return r.options.ruleSpaces?l.slice(0,-1):l}const Tm={blockquote:Zv,break:sp,code:ik,definition:lk,emphasis:ym,hardBreak:sp,heading:ck,html:bm,image:Em,imageReference:_m,inlineCode:vm,link:wm,linkReference:xm,list:Ek,listItem:vk,paragraph:kk,root:xk,strong:Nm,text:Tk,thematicBreak:Ak};function Rk(){return{enter:{table:Ok,tableData:up,tableHeader:up,tableRow:Mk},exit:{codeText:Lk,table:Ik,tableData:cu,tableHeader:cu,tableRow:cu}}}function Ok(e){const i=e._align;this.enter({type:"table",align:i.map(function(r){return r==="none"?null:r}),children:[]},e),this.data.inTable=!0}function Ik(e){this.exit(e),this.data.inTable=void 0}function Mk(e){this.enter({type:"tableRow",children:[]},e)}function cu(e){this.exit(e)}function up(e){this.enter({type:"tableCell",children:[]},e)}function Lk(e){let i=this.resume();this.data.inTable&&(i=i.replace(/\\([\\|])/g,Dk));const r=this.stack[this.stack.length-1];r.type,r.value=i,this.exit(e)}function Dk(e,i){return i==="|"?i:e}function Pk(e){const i=e||{},r=i.tableCellPadding,l=i.tablePipeAlign,s=i.stringLength,c=r?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:` -`,inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[ :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:b,table:u,tableCell:p,tableRow:f}};function u(E,w,N,O){return m(y(E,N,O),E.align)}function f(E,w,N,O){const S=h(E,N,O),L=m([S]);return L.slice(0,L.indexOf(` -`))}function p(E,w,N,O){const S=N.enter("tableCell"),L=N.enter("phrasing"),P=N.containerPhrasing(E,{...O,before:c,after:c});return L(),S(),P}function m(E,w){return Qv(E,{align:w,alignDelimiters:l,padding:r,stringLength:s})}function y(E,w,N){const O=E.children;let S=-1;const L=[],P=w.enter("table");for(;++S0&&!r&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),r}const ew={tokenize:sw,partial:!0};function tw(){return{document:{91:{name:"gfmFootnoteDefinition",tokenize:ow,continuation:{tokenize:lw},exit:aw}},text:{91:{name:"gfmFootnoteCall",tokenize:iw},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:nw,resolveTo:rw}}}}function nw(e,i,r){const l=this;let s=l.events.length;const c=l.parser.gfmFootnotes||(l.parser.gfmFootnotes=[]);let u;for(;s--;){const p=l.events[s][1];if(p.type==="labelImage"){u=p;break}if(p.type==="gfmFootnoteCall"||p.type==="labelLink"||p.type==="label"||p.type==="image"||p.type==="link")break}return f;function f(p){if(!u||!u._balanced)return r(p);const m=Cn(l.sliceSerialize({start:u.end,end:l.now()}));return m.codePointAt(0)!==94||!c.includes(m.slice(1))?r(p):(e.enter("gfmFootnoteCallLabelMarker"),e.consume(p),e.exit("gfmFootnoteCallLabelMarker"),i(p))}}function rw(e,i){let r=e.length;for(;r--;)if(e[r][1].type==="labelImage"&&e[r][0]==="enter"){e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const l={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},s={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};s.end.column++,s.end.offset++,s.end._bufferIndex++;const c={type:"gfmFootnoteCallString",start:Object.assign({},s.end),end:Object.assign({},e[e.length-1][1].start)},u={type:"chunkString",contentType:"string",start:Object.assign({},c.start),end:Object.assign({},c.end)},f=[e[r+1],e[r+2],["enter",l,i],e[r+3],e[r+4],["enter",s,i],["exit",s,i],["enter",c,i],["enter",u,i],["exit",u,i],["exit",c,i],e[e.length-2],e[e.length-1],["exit",l,i]];return e.splice(r,e.length-r+1,...f),e}function iw(e,i,r){const l=this,s=l.parser.gfmFootnotes||(l.parser.gfmFootnotes=[]);let c=0,u;return f;function f(h){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(h),e.exit("gfmFootnoteCallLabelMarker"),p}function p(h){return h!==94?r(h):(e.enter("gfmFootnoteCallMarker"),e.consume(h),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",m)}function m(h){if(c>999||h===93&&!u||h===null||h===91||et(h))return r(h);if(h===93){e.exit("chunkString");const b=e.exit("gfmFootnoteCallString");return s.includes(Cn(l.sliceSerialize(b)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(h),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),i):r(h)}return et(h)||(u=!0),c++,e.consume(h),h===92?y:m}function y(h){return h===91||h===92||h===93?(e.consume(h),c++,m):m(h)}}function ow(e,i,r){const l=this,s=l.parser.gfmFootnotes||(l.parser.gfmFootnotes=[]);let c,u=0,f;return p;function p(w){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(w),e.exit("gfmFootnoteDefinitionLabelMarker"),m}function m(w){return w===94?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(w),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",y):r(w)}function y(w){if(u>999||w===93&&!f||w===null||w===91||et(w))return r(w);if(w===93){e.exit("chunkString");const N=e.exit("gfmFootnoteDefinitionLabelString");return c=Cn(l.sliceSerialize(N)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(w),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),b}return et(w)||(f=!0),u++,e.consume(w),w===92?h:y}function h(w){return w===91||w===92||w===93?(e.consume(w),u++,y):y(w)}function b(w){return w===58?(e.enter("definitionMarker"),e.consume(w),e.exit("definitionMarker"),s.includes(c)||s.push(c),We(e,E,"gfmFootnoteDefinitionWhitespace")):r(w)}function E(w){return i(w)}}function lw(e,i,r){return e.check(Ro,i,e.attempt(ew,i,r))}function aw(e){e.exit("gfmFootnoteDefinition")}function sw(e,i,r){const l=this;return We(e,s,"gfmFootnoteDefinitionIndent",5);function s(c){const u=l.events[l.events.length-1];return u&&u[1].type==="gfmFootnoteDefinitionIndent"&&u[2].sliceSerialize(u[1],!0).length===4?i(c):r(c)}}function uw(e){let r=(e||{}).singleTilde;const l={name:"strikethrough",tokenize:c,resolveAll:s};return r==null&&(r=!0),{text:{126:l},insideSpan:{null:[l]},attentionMarkers:{null:[126]}};function s(u,f){let p=-1;for(;++p1?p(w):(u.consume(w),h++,E);if(h<2&&!r)return p(w);const O=u.exit("strikethroughSequenceTemporary"),S=Ii(w);return O._open=!S||S===2&&!!N,O._close=!N||N===2&&!!S,f(w)}}}class cw{constructor(){this.map=[]}add(i,r,l){dw(this,i,r,l)}consume(i){if(this.map.sort(function(c,u){return c[0]-u[0]}),this.map.length===0)return;let r=this.map.length;const l=[];for(;r>0;)r-=1,l.push(i.slice(this.map[r][0]+this.map[r][1]),this.map[r][2]),i.length=this.map[r][0];l.push(i.slice()),i.length=0;let s=l.pop();for(;s;){for(const c of s)i.push(c);s=l.pop()}this.map.length=0}}function dw(e,i,r,l){let s=0;if(!(r===0&&l.length===0)){for(;s-1;){const Q=l.events[j][1].type;if(Q==="lineEnding"||Q==="linePrefix")j--;else break}const U=j>-1?l.events[j][1].type:null,J=U==="tableHead"||U==="tableRow"?M:p;return J===M&&l.parser.lazy[l.now().line]?r(A):J(A)}function p(A){return e.enter("tableHead"),e.enter("tableRow"),m(A)}function m(A){return A===124||(u=!0,c+=1),y(A)}function y(A){return A===null?r(A):Te(A)?c>1?(c=0,l.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(A),e.exit("lineEnding"),E):r(A):Ue(A)?We(e,y,"whitespace")(A):(c+=1,u&&(u=!1,s+=1),A===124?(e.enter("tableCellDivider"),e.consume(A),e.exit("tableCellDivider"),u=!0,y):(e.enter("data"),h(A)))}function h(A){return A===null||A===124||et(A)?(e.exit("data"),y(A)):(e.consume(A),A===92?b:h)}function b(A){return A===92||A===124?(e.consume(A),h):h(A)}function E(A){return l.interrupt=!1,l.parser.lazy[l.now().line]?r(A):(e.enter("tableDelimiterRow"),u=!1,Ue(A)?We(e,w,"linePrefix",l.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(A):w(A))}function w(A){return A===45||A===58?O(A):A===124?(u=!0,e.enter("tableCellDivider"),e.consume(A),e.exit("tableCellDivider"),N):X(A)}function N(A){return Ue(A)?We(e,O,"whitespace")(A):O(A)}function O(A){return A===58?(c+=1,u=!0,e.enter("tableDelimiterMarker"),e.consume(A),e.exit("tableDelimiterMarker"),S):A===45?(c+=1,S(A)):A===null||Te(A)?q(A):X(A)}function S(A){return A===45?(e.enter("tableDelimiterFiller"),L(A)):X(A)}function L(A){return A===45?(e.consume(A),L):A===58?(u=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(A),e.exit("tableDelimiterMarker"),P):(e.exit("tableDelimiterFiller"),P(A))}function P(A){return Ue(A)?We(e,q,"whitespace")(A):q(A)}function q(A){return A===124?w(A):A===null||Te(A)?!u||s!==c?X(A):(e.exit("tableDelimiterRow"),e.exit("tableHead"),i(A)):X(A)}function X(A){return r(A)}function M(A){return e.enter("tableRow"),le(A)}function le(A){return A===124?(e.enter("tableCellDivider"),e.consume(A),e.exit("tableCellDivider"),le):A===null||Te(A)?(e.exit("tableRow"),i(A)):Ue(A)?We(e,le,"whitespace")(A):(e.enter("data"),de(A))}function de(A){return A===null||A===124||et(A)?(e.exit("data"),le(A)):(e.consume(A),A===92?K:de)}function K(A){return A===92||A===124?(e.consume(A),de):de(A)}}function gw(e,i){let r=-1,l=!0,s=0,c=[0,0,0,0],u=[0,0,0,0],f=!1,p=0,m,y,h;const b=new cw;for(;++rr[2]+1){const w=r[2]+1,N=r[3]-r[2]-1;e.add(w,N,[])}}e.add(r[3]+1,0,[["exit",h,i]])}return s!==void 0&&(c.end=Object.assign({},Ai(i.events,s)),e.add(s,0,[["exit",c,i]]),c=void 0),c}function dp(e,i,r,l,s){const c=[],u=Ai(i.events,r);s&&(s.end=Object.assign({},u),c.push(["exit",s,i])),l.end=Object.assign({},u),c.push(["exit",l,i]),e.add(r+1,0,c)}function Ai(e,i){const r=e[i],l=r[0]==="enter"?"start":"end";return r[1][l]}const hw={name:"tasklistCheck",tokenize:bw};function yw(){return{text:{91:hw}}}function bw(e,i,r){const l=this;return s;function s(p){return l.previous!==null||!l._gfmTasklistFirstContentOfListItem?r(p):(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(p),e.exit("taskListCheckMarker"),c)}function c(p){return et(p)?(e.enter("taskListCheckValueUnchecked"),e.consume(p),e.exit("taskListCheckValueUnchecked"),u):p===88||p===120?(e.enter("taskListCheckValueChecked"),e.consume(p),e.exit("taskListCheckValueChecked"),u):r(p)}function u(p){return p===93?(e.enter("taskListCheckMarker"),e.consume(p),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),f):r(p)}function f(p){return Te(p)?i(p):Ue(p)?e.check({tokenize:Ew},i,r)(p):r(p)}}function Ew(e,i,r){return We(e,l,"whitespace");function l(s){return s===null?r(s):i(s)}}function _w(e){return Kp([Kk(),tw(),uw(e),pw(),yw()])}const vw={};function kw(e){const i=this,r=e||vw,l=i.data(),s=l.micromarkExtensions||(l.micromarkExtensions=[]),c=l.fromMarkdownExtensions||(l.fromMarkdownExtensions=[]),u=l.toMarkdownExtensions||(l.toMarkdownExtensions=[]);s.push(_w(r)),c.push($k()),u.push(Hk(r))}const fp=(function(e,i,r){const l=Oo(r);if(!e||!e.type||!e.children)throw new Error("Expected parent node");if(typeof i=="number"){if(i<0||i===Number.POSITIVE_INFINITY)throw new Error("Expected positive finite number as index")}else if(i=e.children.indexOf(i),i<0)throw new Error("Expected child node or index");for(;++im&&(m=y):y&&(m!==void 0&&m>-1&&p.push(` -`.repeat(m)||" "),m=-1,p.push(y))}return p.join("")}function zm(e,i,r){return e.type==="element"?Rw(e,i,r):e.type==="text"?r.whitespace==="normal"?Fm(e,r):Ow(e):[]}function Rw(e,i,r){const l=Bm(e,r),s=e.children||[];let c=-1,u=[];if(Cw(e))return u;let f,p;for(Tu(e)||hp(e)&&fp(i,e,hp)?p=` -`:Tw(e)?(f=2,p=2):Pm(e)&&(f=1,p=1);++c]+>")+")",f={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},m={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},y={className:"number",variants:[{begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"},{begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"}],relevance:0},h={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(m,{className:"string"}),{className:"string",begin:/<.*?>/},r,e.C_BLOCK_COMMENT_MODE]},b={className:"title",begin:i.optional(s)+e.IDENT_RE,relevance:0},E=i.optional(s)+e.IDENT_RE+"\\s*\\(",w=["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],N=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],O=["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"],S=["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"],q={type:N,keyword:w,literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:O},X={className:"function.dispatch",relevance:0,keywords:{_hint:S},begin:i.concat(/\b/,`(?!${w.join("|")})`,e.IDENT_RE,i.lookahead(/(<[^<>]+>|)\s*\(/))},M=[X,h,f,r,e.C_BLOCK_COMMENT_MODE,y,m],le={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:q,contains:M.concat([{begin:/\(/,end:/\)/,keywords:q,contains:M.concat(["self"]),relevance:0}]),relevance:0},de={className:"function",begin:"("+u+"[\\*&\\s]+)+"+E,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:q,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:l,keywords:q,relevance:0},{begin:E,returnBegin:!0,contains:[b],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[m,y]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:q,relevance:0,contains:[r,e.C_BLOCK_COMMENT_MODE,m,y,f,{begin:/\(/,end:/\)/,keywords:q,relevance:0,contains:["self",r,e.C_BLOCK_COMMENT_MODE,m,y,f]}]},f,r,e.C_BLOCK_COMMENT_MODE,h]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:q,illegal:"",keywords:q,contains:["self",f]},{begin:e.IDENT_RE+"::",keywords:q},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}function zw(e){const i={type:["boolean","byte","word","String"],built_in:["KeyboardController","MouseController","SoftwareSerial","EthernetServer","EthernetClient","LiquidCrystal","RobotControl","GSMVoiceCall","EthernetUDP","EsploraTFT","HttpClient","RobotMotor","WiFiClient","GSMScanner","FileSystem","Scheduler","GSMServer","YunClient","YunServer","IPAddress","GSMClient","GSMModem","Keyboard","Ethernet","Console","GSMBand","Esplora","Stepper","Process","WiFiUDP","GSM_SMS","Mailbox","USBHost","Firmata","PImage","Client","Server","GSMPIN","FileIO","Bridge","Serial","EEPROM","Stream","Mouse","Audio","Servo","File","Task","GPRS","WiFi","Wire","TFT","GSM","SPI","SD"],_hints:["setup","loop","runShellCommandAsynchronously","analogWriteResolution","retrieveCallingNumber","printFirmwareVersion","analogReadResolution","sendDigitalPortPair","noListenOnLocalhost","readJoystickButton","setFirmwareVersion","readJoystickSwitch","scrollDisplayRight","getVoiceCallStatus","scrollDisplayLeft","writeMicroseconds","delayMicroseconds","beginTransmission","getSignalStrength","runAsynchronously","getAsynchronously","listenOnLocalhost","getCurrentCarrier","readAccelerometer","messageAvailable","sendDigitalPorts","lineFollowConfig","countryNameWrite","runShellCommand","readStringUntil","rewindDirectory","readTemperature","setClockDivider","readLightSensor","endTransmission","analogReference","detachInterrupt","countryNameRead","attachInterrupt","encryptionType","readBytesUntil","robotNameWrite","readMicrophone","robotNameRead","cityNameWrite","userNameWrite","readJoystickY","readJoystickX","mouseReleased","openNextFile","scanNetworks","noInterrupts","digitalWrite","beginSpeaker","mousePressed","isActionDone","mouseDragged","displayLogos","noAutoscroll","addParameter","remoteNumber","getModifiers","keyboardRead","userNameRead","waitContinue","processInput","parseCommand","printVersion","readNetworks","writeMessage","blinkVersion","cityNameRead","readMessage","setDataMode","parsePacket","isListening","setBitOrder","beginPacket","isDirectory","motorsWrite","drawCompass","digitalRead","clearScreen","serialEvent","rightToLeft","setTextSize","leftToRight","requestFrom","keyReleased","compassRead","analogWrite","interrupts","WiFiServer","disconnect","playMelody","parseFloat","autoscroll","getPINUsed","setPINUsed","setTimeout","sendAnalog","readSlider","analogRead","beginWrite","createChar","motorsStop","keyPressed","tempoWrite","readButton","subnetMask","debugPrint","macAddress","writeGreen","randomSeed","attachGPRS","readString","sendString","remotePort","releaseAll","mouseMoved","background","getXChange","getYChange","answerCall","getResult","voiceCall","endPacket","constrain","getSocket","writeJSON","getButton","available","connected","findUntil","readBytes","exitValue","readGreen","writeBlue","startLoop","IPAddress","isPressed","sendSysex","pauseMode","gatewayIP","setCursor","getOemKey","tuneWrite","noDisplay","loadImage","switchPIN","onRequest","onReceive","changePIN","playFile","noBuffer","parseInt","overflow","checkPIN","knobRead","beginTFT","bitClear","updateIR","bitWrite","position","writeRGB","highByte","writeRed","setSpeed","readBlue","noStroke","remoteIP","transfer","shutdown","hangCall","beginSMS","endWrite","attached","maintain","noCursor","checkReg","checkPUK","shiftOut","isValid","shiftIn","pulseIn","connect","println","localIP","pinMode","getIMEI","display","noBlink","process","getBand","running","beginSD","drawBMP","lowByte","setBand","release","bitRead","prepare","pointTo","readRed","setMode","noFill","remove","listen","stroke","detach","attach","noTone","exists","buffer","height","bitSet","circle","config","cursor","random","IRread","setDNS","endSMS","getKey","micros","millis","begin","print","write","ready","flush","width","isPIN","blink","clear","press","mkdir","rmdir","close","point","yield","image","BSSID","click","delay","read","text","move","peek","beep","rect","line","open","seek","fill","size","turn","stop","home","find","step","tone","sqrt","RSSI","SSID","end","bit","tan","cos","sin","pow","map","abs","max","min","get","run","put"],literal:["DIGITAL_MESSAGE","FIRMATA_STRING","ANALOG_MESSAGE","REPORT_DIGITAL","REPORT_ANALOG","INPUT_PULLUP","SET_PIN_MODE","INTERNAL2V56","SYSTEM_RESET","LED_BUILTIN","INTERNAL1V1","SYSEX_START","INTERNAL","EXTERNAL","DEFAULT","OUTPUT","INPUT","HIGH","LOW"]},r=Pw(e),l=r.keywords;return l.type=[...l.type,...i.type],l.literal=[...l.literal,...i.literal],l.built_in=[...l.built_in,...i.built_in],l._hints=i._hints,r.name="Arduino",r.aliases=["ino"],r.supersetOf="cpp",r}function Fw(e){const i=e.regex,r={},l={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[r]}]};Object.assign(r,{className:"variable",variants:[{begin:i.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},l]});const s={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},c=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),u={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},f={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,r,s]};s.contains.push(f);const p={match:/\\"/},m={className:"string",begin:/'/,end:/'/},y={match:/\\'/},h={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,r]},b=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],E=e.SHEBANG({binary:`(${b.join("|")})`,relevance:10}),w={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},N=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],O=["true","false"],S={match:/(\/[a-z._-]+)+/},L=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],P=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],q=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],X=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:N,literal:O,built_in:[...L,...P,"set","shopt",...q,...X]},contains:[E,e.SHEBANG(),w,h,c,u,S,f,p,m,y,r]}}function Bw(e){const i=e.regex,r=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),l="decltype\\(auto\\)",s="[a-zA-Z_]\\w*::",u="("+l+"|"+i.optional(s)+"[a-zA-Z_]\\w*"+i.optional("<[^<>]+>")+")",f={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},m={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},y={className:"number",variants:[{match:/\b(0b[01']+)/},{match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/},{match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0},h={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(m,{className:"string"}),{className:"string",begin:/<.*?>/},r,e.C_BLOCK_COMMENT_MODE]},b={className:"title",begin:i.optional(s)+e.IDENT_RE,relevance:0},E=i.optional(s)+e.IDENT_RE+"\\s*\\(",O={keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"],literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},S=[h,f,r,e.C_BLOCK_COMMENT_MODE,y,m],L={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:O,contains:S.concat([{begin:/\(/,end:/\)/,keywords:O,contains:S.concat(["self"]),relevance:0}]),relevance:0},P={begin:"("+u+"[\\*&\\s]+)+"+E,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:O,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:l,keywords:O,relevance:0},{begin:E,returnBegin:!0,contains:[e.inherit(b,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:O,relevance:0,contains:[r,e.C_BLOCK_COMMENT_MODE,m,y,f,{begin:/\(/,end:/\)/,keywords:O,relevance:0,contains:["self",r,e.C_BLOCK_COMMENT_MODE,m,y,f]}]},f,r,e.C_BLOCK_COMMENT_MODE,h]};return{name:"C",aliases:["h"],keywords:O,disableAutodetect:!0,illegal:"=]/,contains:[{beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:h,strings:m,keywords:O}}}function Uw(e){const i=e.regex,r=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),l="decltype\\(auto\\)",s="[a-zA-Z_]\\w*::",u="(?!struct)("+l+"|"+i.optional(s)+"[a-zA-Z_]\\w*"+i.optional("<[^<>]+>")+")",f={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},m={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'("+"\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)"+"|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},y={className:"number",variants:[{begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"},{begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"}],relevance:0},h={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(m,{className:"string"}),{className:"string",begin:/<.*?>/},r,e.C_BLOCK_COMMENT_MODE]},b={className:"title",begin:i.optional(s)+e.IDENT_RE,relevance:0},E=i.optional(s)+e.IDENT_RE+"\\s*\\(",w=["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],N=["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],O=["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"],S=["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"],q={type:N,keyword:w,literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:O},X={className:"function.dispatch",relevance:0,keywords:{_hint:S},begin:i.concat(/\b/,`(?!${w.join("|")})`,e.IDENT_RE,i.lookahead(/(<[^<>]+>|)\s*\(/))},M=[X,h,f,r,e.C_BLOCK_COMMENT_MODE,y,m],le={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:q,contains:M.concat([{begin:/\(/,end:/\)/,keywords:q,contains:M.concat(["self"]),relevance:0}]),relevance:0},de={className:"function",begin:"("+u+"[\\*&\\s]+)+"+E,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:q,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:l,keywords:q,relevance:0},{begin:E,returnBegin:!0,contains:[b],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[m,y]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:q,relevance:0,contains:[r,e.C_BLOCK_COMMENT_MODE,m,y,f,{begin:/\(/,end:/\)/,keywords:q,relevance:0,contains:["self",r,e.C_BLOCK_COMMENT_MODE,m,y,f]}]},f,r,e.C_BLOCK_COMMENT_MODE,h]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:q,illegal:"",keywords:q,contains:["self",f]},{begin:e.IDENT_RE+"::",keywords:q},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}function $w(e){const i=["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],r=["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"],l=["default","false","null","true"],s=["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"],c=["add","alias","and","ascending","args","async","await","by","descending","dynamic","equals","file","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","record","remove","required","scoped","select","set","unmanaged","value|0","var","when","where","with","yield"],u={keyword:s.concat(c),built_in:i,literal:l},f=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),p={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9'_]+|(\\b[\\d'_]+(\\.[\\d'_]*)?|\\.[\\d'_]+)([eE][-+]?[\\d'_]+)?)"}],relevance:0},m={className:"string",begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1},y={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},h=e.inherit(y,{illegal:/\n/}),b={className:"subst",begin:/\{/,end:/\}/,keywords:u},E=e.inherit(b,{illegal:/\n/}),w={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},e.BACKSLASH_ESCAPE,E]},N={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},b]},O=e.inherit(N,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},E]});b.contains=[N,w,y,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,e.C_BLOCK_COMMENT_MODE],E.contains=[O,w,h,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,p,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const S={variants:[m,N,w,y,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},L={begin:"<",end:">",contains:[{beginKeywords:"in out"},f]},P=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",q={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:u,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:""},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},S,p,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},f,L,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[f,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[f,L,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+P+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:u,contains:[{beginKeywords:r.join(" "),relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[e.TITLE_MODE,L],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:u,relevance:0,contains:[S,p,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},q]}}const Hw=e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},UNICODE_RANGE:{scope:"number",begin:/\b[Uu]\+[0-9A-Fa-f][0-9A-Fa-f?]{0,4}(-[0-9A-Fa-f][0-9A-Fa-f]{0,4})?/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),jw=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],Gw=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],Kw=[...jw,...Gw],Ww=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),Vw=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),qw=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),Yw=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","unicode-range","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function Qw(e){const i=e.regex,r=Hw(e),l={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},s="and or not only",c=/@-?\w[\w]*(-\w+)*/,u="[a-zA-Z-][a-zA-Z0-9_-]*",f=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[r.BLOCK_COMMENT,l,r.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+u,relevance:0},r.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+Vw.join("|")+")"},{begin:":(:)?("+qw.join("|")+")"}]},r.CSS_VARIABLE,{className:"attribute",begin:"\\b("+Yw.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[r.BLOCK_COMMENT,r.HEXCOLOR,r.IMPORTANT,r.CSS_NUMBER_MODE,r.UNICODE_RANGE,...f,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...f,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},r.FUNCTION_DISPATCH]},{begin:i.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:c},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:s,attribute:Ww.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...f,r.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+Kw.join("|")+")\\b"}]}}function Xw(e){const i=e.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:i.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^@@ +-\d+ +\+\d+,\d+ +@@/,/^@@ +-\d+,\d+ +\+\d+ +@@/,/^@@ +-\d+ +\+\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:i.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}function Zw(e){const c={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:c,illegal:"Um(e,i,r-1))}function tx(e){const i=e.regex,r="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",l=r+Um("(?:<"+r+"~~~(?:\\s*,\\s*"+r+"~~~)*>)?",/~~~/g,2),p={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto","when"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},m={className:"meta",begin:"@"+r,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},y={className:"params",begin:/\(/,end:/\)/,keywords:p,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:p,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,r],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[i.concat(/(?!else)/,r),/\s+/,r,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,r],className:{1:"keyword",3:"title.class"},contains:[y,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+l+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:p,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:p,relevance:0,contains:[m,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,yp,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},yp,m]}}const bp="[A-Za-z$_][0-9A-Za-z$_]*",nx=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],rx=["true","false","null","undefined","NaN","Infinity"],$m=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],Hm=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],jm=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],ix=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],ox=[].concat(jm,$m,Hm);function lx(e){const i=e.regex,r=(V,{after:ae})=>{const v="",end:""},c=/<[A-Za-z0-9\\._:-]+\s*\/>/,u={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(V,ae)=>{const v=V[0].length+V.index,R=V.input[v];if(R==="<"||R===","){ae.ignoreMatch();return}R===">"&&(r(V,{after:v})||ae.ignoreMatch());let $;const k=V.input.substring(v);if($=k.match(/^\s*=/)){ae.ignoreMatch();return}if(($=k.match(/^\s+extends\s+/))&&$.index===0){ae.ignoreMatch();return}}},f={$pattern:bp,keyword:nx,literal:rx,built_in:ox,"variable.language":ix},p="[0-9](_?[0-9])*",m=`\\.(${p})`,y="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",h={className:"number",variants:[{begin:`(\\b(${y})((${m})|\\.)?|(${m}))[eE][+-]?(${p})\\b`},{begin:`\\b(${y})\\b((${m})\\b|\\.)?|(${m})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},b={className:"subst",begin:"\\$\\{",end:"\\}",keywords:f,contains:[]},E={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"xml"}},w={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"css"}},N={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"graphql"}},O={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,b]},L={className:"comment",variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:l+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},P=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,E,w,N,O,{match:/\$\d+/},h];b.contains=P.concat({begin:/\{/,end:/\}/,keywords:f,contains:["self"].concat(P)});const q=[].concat(L,b.contains),X=q.concat([{begin:/(\s*)\(/,end:/\)/,keywords:f,contains:["self"].concat(q)}]),M={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:f,contains:X},le={variants:[{match:[/class/,/\s+/,l,/\s+/,/extends/,/\s+/,i.concat(l,"(",i.concat(/\./,l),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,l],scope:{1:"keyword",3:"title.class"}}]},de={relevance:0,match:i.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...$m,...Hm]}},K={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},A={variants:[{match:[/function/,/\s+/,l,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[M],illegal:/%/},j={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function U(V){return i.concat("(?!",V.join("|"),")")}const J={match:i.concat(/\b/,U([...jm,"super","import","await"].map(V=>`${V}\\s*\\(`)),l,i.lookahead(/\s*\(/)),className:"title.function",relevance:0},Q={begin:i.concat(/\./,i.lookahead(i.concat(l,/(?![0-9A-Za-z$_(])/))),end:l,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},G={match:[/get|set/,/\s+/,l,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},M]},se="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",z={match:[/const|var|let/,/\s+/,l,/\s*/,/=\s*/,/(async\s*)?/,i.lookahead(se)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[M]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:f,exports:{PARAMS_CONTAINS:X,CLASS_REFERENCE:de},illegal:/#(?![$_A-Za-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),K,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,E,w,N,O,L,{match:/\$\d+/},h,de,{scope:"attr",match:l+i.lookahead(":"),relevance:0},z,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[L,e.REGEXP_MODE,{className:"function",begin:se,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:f,contains:X}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:s.begin,end:s.end},{match:c},{begin:u.begin,"on:begin":u.isTrulyOpeningTag,end:u.end}],subLanguage:"xml",contains:[{begin:u.begin,end:u.end,skip:!0,contains:["self"]}]}]},A,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[M,e.inherit(e.TITLE_MODE,{begin:l,className:"title.function"})]},{match:/\.\.\./,relevance:0},Q,{match:"\\$"+l,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[M]},J,j,le,G,{match:/\$[(.]/}]}}const ax="([-+]?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)|NaN|[-+]?Infinity",sx={scope:"number",match:ax,relevance:0};function ux(e){const i={className:"attr",begin:/(("(\\.|[^\\"\r\n])*")|('(\\.|[^\\'\r\n])*'))(?=\s*:)/,relevance:1.01},r={match:/[{}[\],:]/,className:"punctuation",relevance:0},l=["true","false","null"],s={scope:"literal",beginKeywords:l.join(" ")};return{name:"JSON",aliases:["jsonc","json5"],keywords:{literal:l},contains:[i,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,s,sx,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}var Oi="[0-9](_*[0-9])*",Vl=`\\.(${Oi})`,ql="[0-9a-fA-F](_*[0-9a-fA-F])*",cx={className:"number",variants:[{begin:`(\\b(${Oi})((${Vl})|\\.)?|(${Vl}))[eE][+-]?(${Oi})[fFdD]?\\b`},{begin:`\\b(${Oi})((${Vl})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${Vl})[fFdD]?\\b`},{begin:`\\b(${Oi})[fFdD]\\b`},{begin:`\\b0[xX]((${ql})\\.?|(${ql})?\\.(${ql}))[pP][+-]?(${Oi})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${ql})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function dx(e){const i={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},r={className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},l={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},s={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},c={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},u={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[c,s]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,c,s]}]};s.contains.push(u);const f={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},p={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(u,{className:"string"}),"self"]}]},m=cx,y=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),h={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},b=h;return b.variants[1].contains=[h],h.variants[1].contains=[b],{name:"Kotlin",aliases:["kt","kts"],keywords:i,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,y,r,l,f,p,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:i,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:i,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[h,e.C_LINE_COMMENT_MODE,y],relevance:0},e.C_LINE_COMMENT_MODE,y,f,p,u,e.C_NUMBER_MODE]},y]},{begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},f,p]},u,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:` -`},m]}}const fx=e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},UNICODE_RANGE:{scope:"number",begin:/\b[Uu]\+[0-9A-Fa-f][0-9A-Fa-f?]{0,4}(-[0-9A-Fa-f][0-9A-Fa-f]{0,4})?/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),px=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],mx=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],gx=[...px,...mx],hx=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),Gm=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),Km=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),yx=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","unicode-range","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse(),bx=Gm.concat(Km).sort().reverse();function Ex(e){const i=fx(e),r=bx,l="and or not only",s="[\\w-]+",c="("+s+"|@\\{"+s+"\\})",u=[],f=[],p=function(P){return{className:"string",begin:"~?"+P+".*?"+P}},m=function(P,q,X){return{className:P,begin:q,relevance:X}},y={$pattern:/[a-z-]+/,keyword:l,attribute:hx.join(" ")},h={begin:"\\(",end:"\\)",contains:f,keywords:y,relevance:0};f.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,p("'"),p('"'),i.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},i.UNICODE_RANGE,i.HEXCOLOR,h,m("variable","@@?"+s,10),m("variable","@\\{"+s+"\\}"),m("built_in","~?`[^`]*?`"),{className:"attribute",begin:s+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0},i.IMPORTANT,{beginKeywords:"and not"},i.FUNCTION_DISPATCH);const b=f.concat({begin:/\{/,end:/\}/,contains:u}),E={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(f)},w={begin:c+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},i.CSS_VARIABLE,{className:"attribute",begin:"\\b("+yx.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:f}}]},N={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:y,returnEnd:!0,contains:f,relevance:0}},O={className:"variable",variants:[{begin:"@"+s+"\\s*:",relevance:15},{begin:"@"+s}],starts:{end:"[;}]",returnEnd:!0,contains:b}},S={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:c,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:`[<='$"]`,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,E,m("keyword","all\\b"),m("variable","@\\{"+s+"\\}"),{begin:"\\b("+gx.join("|")+")\\b",className:"selector-tag"},i.CSS_NUMBER_MODE,m("selector-tag",c,0),m("selector-id","#"+c),m("selector-class","\\."+c,0),m("selector-tag","&",0),i.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+Gm.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+Km.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:b},{begin:"!important"},i.FUNCTION_DISPATCH]},L={begin:s+`:(:)?(${r.join("|")})`,returnBegin:!0,contains:[S]};return u.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,N,O,L,w,S,E,i.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:`[=>'/<($"]`,contains:u}}function _x(e){const i="\\[=*\\[",r="\\]=*\\]",l={begin:i,end:r,contains:["self"]},s=[e.COMMENT("--(?!"+i+")","$"),e.COMMENT("--"+i,r,{contains:[l],relevance:10})];return{name:"Lua",aliases:["pluto"],keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:s.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:s}].concat(s)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:i,end:r,contains:[l],relevance:5}])}}function vx(e){const i={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%",subLanguage:"xml",relevance:0},l={begin:"^[-\\*]{3,}",end:"$"},s={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},c={className:"bullet",begin:"^[ ]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},u={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},f=/[A-Za-z][A-Za-z0-9+.-]*/,p={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:i.concat(/\[.+?\]\(/,f,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},m={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},y={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},h=e.inherit(m,{contains:[]}),b=e.inherit(y,{contains:[]});m.contains.push(b),y.contains.push(h);let E=[r,p];return[m,y,h,b].forEach(S=>{S.contains=S.contains.concat(E)}),E=E.concat(m,y),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:E},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:E}]}]},r,c,m,y,{className:"quote",begin:"^>\\s+",contains:E,end:"$"},s,l,p,u,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}function wx(e){const i={className:"built_in",begin:"\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+"},r=/[a-zA-Z@][a-zA-Z0-9_]*/,f={"variable.language":["this","super"],$pattern:r,keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]},p={$pattern:r,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:f,illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+p.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:p,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}function xx(e){const i=e.regex,r=["abs","accept","alarm","and","atan2","bind","binmode","bless","break","caller","chdir","chmod","chomp","chop","chown","chr","chroot","class","close","closedir","connect","continue","cos","crypt","dbmclose","dbmopen","defined","delete","die","do","dump","each","else","elsif","endgrent","endhostent","endnetent","endprotoent","endpwent","endservent","eof","eval","exec","exists","exit","exp","fcntl","field","fileno","flock","for","foreach","fork","format","formline","getc","getgrent","getgrgid","getgrnam","gethostbyaddr","gethostbyname","gethostent","getlogin","getnetbyaddr","getnetbyname","getnetent","getpeername","getpgrp","getpriority","getprotobyname","getprotobynumber","getprotoent","getpwent","getpwnam","getpwuid","getservbyname","getservbyport","getservent","getsockname","getsockopt","given","glob","gmtime","goto","grep","gt","hex","if","index","int","ioctl","join","keys","kill","last","lc","lcfirst","length","link","listen","local","localtime","log","lstat","lt","ma","map","method","mkdir","msgctl","msgget","msgrcv","msgsnd","my","ne","next","no","not","oct","open","opendir","or","ord","our","pack","package","pipe","pop","pos","print","printf","prototype","push","q|0","qq","quotemeta","qw","qx","rand","read","readdir","readline","readlink","readpipe","recv","redo","ref","rename","require","reset","return","reverse","rewinddir","rindex","rmdir","say","scalar","seek","seekdir","select","semctl","semget","semop","send","setgrent","sethostent","setnetent","setpgrp","setpriority","setprotoent","setpwent","setservent","setsockopt","shift","shmctl","shmget","shmread","shmwrite","shutdown","sin","sleep","socket","socketpair","sort","splice","split","sprintf","sqrt","srand","stat","state","study","sub","substr","symlink","syscall","sysopen","sysread","sysseek","system","syswrite","tell","telldir","tie","tied","time","times","tr","truncate","uc","ucfirst","umask","undef","unless","unlink","unpack","unshift","untie","until","use","utime","values","vec","wait","waitpid","wantarray","warn","when","while","write","x|0","xor","y|0"],l=/[dualxmsipngr]{0,12}/,s={$pattern:/[\w.]+/,keyword:r.join(" ")},c={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:s},u={begin:/->\{/,end:/\}/},f={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},p={scope:"variable",variants:[{begin:/\$\d/},{begin:i.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[f]},m={className:"number",variants:[{match:/0?\.[0-9][0-9_]+\b/},{match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{match:/\b0b[0-1][0-1_]*\b/}],relevance:0},y=[e.BACKSLASH_ESCAPE,c,p],h=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],b=(N,O,S="\\1")=>{const L=S==="\\1"?S:i.concat(S,O);return i.concat(i.concat("(?:",N,")"),O,/(?:\\.|[^\\\/])*?/,L,/(?:\\.|[^\\\/])*?/,S,l)},E=(N,O,S)=>i.concat(i.concat("(?:",N,")"),O,/(?:\\.|[^\\\/])*?/,S,l),w=[p,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),u,{className:"string",contains:y,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},m,{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:b("s|tr|y",i.either(...h,{capture:!0}))},{begin:b("s|tr|y","\\(","\\)")},{begin:b("s|tr|y","\\[","\\]")},{begin:b("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:E("(?:m|qr)?",/\//,/\//)},{begin:E("m|qr",i.either(...h,{capture:!0}),/\1/)},{begin:E("m|qr",/\(/,/\)/)},{begin:E("m|qr",/\[/,/\]/)},{begin:E("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub method",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,f]},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,f,m]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return c.contains=w,u.contains=w,{name:"Perl",aliases:["pl","pm"],keywords:s,contains:w}}function Sx(e){const i=e.regex,r=/(?![A-Za-z0-9])(?![$])/,l=i.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,r),s=i.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,r),c=i.concat(/[A-Z]+/,r),u={scope:"variable",match:"\\$+"+l},f={scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},p={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},m=e.inherit(e.APOS_STRING_MODE,{illegal:null}),y=e.inherit(e.QUOTE_STRING_MODE,{illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(p)}),h={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:e.QUOTE_STRING_MODE.contains.concat(p),"on:begin":(Q,G)=>{G.data._beginMatch=Q[1]||Q[2]},"on:end":(Q,G)=>{G.data._beginMatch!==Q[1]&&G.ignoreMatch()}},b=e.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),E=`[ -]`,w={scope:"string",variants:[y,m,h,b]},N={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},O=["false","null","true"],S=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],L=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],q={keyword:S,literal:(Q=>{const G=[];return Q.forEach(se=>{G.push(se),se.toLowerCase()===se?G.push(se.toUpperCase()):G.push(se.toLowerCase())}),G})(O),built_in:L},X=Q=>Q.map(G=>G.replace(/\|\d+$/,"")),M={variants:[{match:[/new/,i.concat(E,"+"),i.concat("(?!",X(L).join("\\b|"),"\\b)"),s],scope:{1:"keyword",4:"title.class"}}]},le=i.concat(l,"\\b(?!\\()"),de={variants:[{match:[i.concat(/::/,i.lookahead(/(?!class\b)/)),le],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[s,i.concat(/::/,i.lookahead(/(?!class\b)/)),le],scope:{1:"title.class",3:"variable.constant"}},{match:[s,i.concat("::",i.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[s,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},K={scope:"attr",match:i.concat(l,i.lookahead(":"),i.lookahead(/(?!::)/))},A={relevance:0,begin:/\(/,end:/\)/,keywords:q,contains:[K,u,de,e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE,e.HASH_COMMENT_MODE,w,N,M]},j={relevance:0,match:[/\b/,i.concat("(?!fn\\b|function\\b|",X(S).join("\\b|"),"|",X(L).join("\\b|"),"\\b)"),l,i.concat(E,"*"),i.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[A]};A.contains.push(j);const U=[K,de,e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE,e.HASH_COMMENT_MODE,w,N,M],J={begin:i.concat(/#\[\s*\\?/,i.either(s,c)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:O,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:O,keyword:["new","array"]},contains:["self",...U]},...U,{scope:"meta",variants:[{match:s},{match:c}]}]};return{case_insensitive:!1,keywords:q,contains:[J,e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},f,{scope:"variable.language",match:/\$this\b/},u,j,de,{match:[/const/,/\s/,l],scope:{1:"keyword",3:"variable.constant"}},M,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:q,contains:["self",J,u,de,e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE,e.HASH_COMMENT_MODE,w,N]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},w,N]}}function Nx(e){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}function Tx(e){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}function Cx(e){const i=e.regex,r=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),l=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],f={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:l,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},p={className:"meta",begin:/^(>>>|\.\.\.) /},m={className:"subst",begin:/\{/,end:/\}/,keywords:f,illegal:/#/},y={begin:/\{\{/,relevance:0},h={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,p],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,p],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,p,y,m]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,p,y,m]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,y,m]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,y,m]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},b="[0-9](_?[0-9])*",E=`(\\b(${b}))?\\.(${b})|\\b(${b})\\.`,w=`\\b|${l.join("|")}`,N={className:"number",relevance:0,variants:[{begin:`(\\b(${b})|(${E}))[eE][+-]?(${b})[jJ]?(?=${w})`},{begin:`(${E})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${w})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${w})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${w})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${w})`},{begin:`\\b(${b})[jJ](?=${w})`}]},O={className:"comment",begin:i.lookahead(/# type:/),end:/$/,keywords:f,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},S={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:f,contains:["self",p,N,h,e.HASH_COMMENT_MODE]}]};return m.contains=[h,N,p],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:f,illegal:/(<\/|\?)|=>/,contains:[p,N,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},h,O,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,r],scope:{1:"keyword",3:"title.function"},contains:[S]},{variants:[{match:[/\bclass/,/\s+/,r,/\s*/,/\(\s*/,r,/\s*\)/]},{match:[/\bclass/,/\s+/,r]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[N,S,h]}]}}function Ax(e){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}function Rx(e){const i=e.regex,r=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,l=i.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),s=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,c=i.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/);return{name:"R",keywords:{$pattern:r,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:i.lookahead(i.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{scope:"variable",variants:[{match:r},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]}),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE],variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[s,l]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,l]},{scope:{1:"punctuation",2:"number"},match:[c,l]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,l]}]},{scope:{3:"operator"},match:[r,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:s},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:c},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}function Ox(e){const i=e.regex,r="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",l=i.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),s=i.concat(l,/(::\w+)*/),u={"variable.constant":["__FILE__","__LINE__","__ENCODING__"],"variable.language":["self","super"],keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield",...["include","extend","prepend","public","private","protected","raise","throw"]],built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],literal:["true","false","nil"]},f={className:"doctag",begin:"@[A-Za-z]+"},p={begin:"#<",end:">"},m=[e.COMMENT("#","$",{contains:[f]}),e.COMMENT("^=begin","^=end",{contains:[f],relevance:10}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],y={className:"subst",begin:/#\{/,end:/\}/,keywords:u},h={className:"string",contains:[e.BACKSLASH_ESCAPE,y],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:i.concat(/<<[-~]?'?/,i.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,y]})]}]},b="[1-9](_?[0-9])*|0",E="[0-9](_?[0-9])*",w={className:"number",relevance:0,variants:[{begin:`\\b(${b})(\\.(${E}))?([eE][+-]?(${E})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},N={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:u}]},M=[h,{variants:[{match:[/class\s+/,s,/\s+<\s+/,s]},{match:[/\b(class|module)\s+/,s]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:u},{match:[/(include|extend)\s+/,s],scope:{2:"title.class"},keywords:u},{relevance:0,match:[s,/\.new[. (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{relevance:0,match:l,scope:"title.class"},{match:[/def/,/\s+/,r],scope:{1:"keyword",3:"title.function"},contains:[N]},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[h,{begin:r}],relevance:0},w,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:u},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,y],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(p,m),relevance:0}].concat(p,m);y.contains=M,N.contains=M;const A=[{begin:/^\s*=>/,starts:{end:"$",contains:M}},{className:"meta.prompt",begin:"^("+"[>?]>"+"|"+"[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]"+"|"+"(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>"+")(?=[ ])",starts:{end:"$",keywords:u,contains:M}}];return m.unshift(p),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:u,illegal:/\/\*/,contains:[e.SHEBANG({binary:"ruby"})].concat(A).concat(m).concat(M)}}function Ix(e){const i=e.regex,r=/(r#)?/,l=i.concat(r,e.UNDERSCORE_IDENT_RE),s=i.concat(r,e.IDENT_RE),c={className:"title.function.invoke",relevance:0,begin:i.concat(/\b/,/(?!let|for|while|if|else|match\b)/,s,i.lookahead(/\s*\(/))},u="([ui](8|16|32|64|128|size)|f(32|64))?",f=["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"],p=["true","false","Some","None","Ok","Err"],m=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],y=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:y,keyword:f,literal:p,built_in:m},illegal:""},c]}}const Mx=e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},UNICODE_RANGE:{scope:"number",begin:/\b[Uu]\+[0-9A-Fa-f][0-9A-Fa-f?]{0,4}(-[0-9A-Fa-f][0-9A-Fa-f]{0,4})?/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),Lx=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],Dx=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],Px=[...Lx,...Dx],zx=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),Fx=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),Bx=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),Ux=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","unicode-range","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function $x(e){const i=Mx(e),r=Bx,l=Fx,s="@[a-z-]+",c="and or not only",f={className:"variable",begin:"(\\$"+"[a-zA-Z-][a-zA-Z0-9_-]*"+")\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},i.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+Px.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+l.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+r.join("|")+")"},f,{begin:/\(/,end:/\)/,contains:[i.CSS_NUMBER_MODE]},i.CSS_VARIABLE,{className:"attribute",begin:"\\b("+Ux.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[i.BLOCK_COMMENT,f,i.HEXCOLOR,i.CSS_NUMBER_MODE,i.UNICODE_RANGE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i.IMPORTANT,i.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:s,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:c,attribute:zx.join(" ")},contains:[{begin:s,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},f,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,i.HEXCOLOR,i.CSS_NUMBER_MODE]},i.FUNCTION_DISPATCH]}}function Hx(e){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}function jx(e){const i=e.regex,r=e.COMMENT("--","$"),l={scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},s={begin:/"/,end:/"/,contains:[{match:/""/}]},c=["true","false","unknown"],u=["double precision","large object","with timezone","without timezone"],f=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],p=["add","asc","collation","desc","final","first","last","view"],m=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year"],y=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],h=["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"],b=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],E=y,w=[...m,...p].filter(X=>!y.includes(X)),N={scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},O={scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0},S={match:i.concat(/\b/,i.either(...E),/\s*\(/),relevance:0,keywords:{built_in:E}};function L(X){return i.concat(/\b/,i.either(...X.map(M=>M.replace(/\s+/,"\\s+"))),/\b/)}const P={scope:"keyword",match:L(b),relevance:0};function q(X,{exceptions:M,when:le}={}){const de=le;return M=M||[],X.map(K=>K.match(/\|\d+$/)||M.includes(K)?K:de(K)?`${K}|0`:K)}return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:q(w,{when:X=>X.length<3}),literal:c,type:f,built_in:h},contains:[{scope:"type",match:L(u)},P,S,N,l,s,e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,r,O]}}function Wm(e){return e?typeof e=="string"?e:e.source:null}function ko(e){return Xe("(?=",e,")")}function Xe(...e){return e.map(r=>Wm(r)).join("")}function Gx(e){const i=e[e.length-1];return typeof i=="object"&&i.constructor===Object?(e.splice(e.length-1,1),i):{}}function $t(...e){return"("+(Gx(e).capture?"":"?:")+e.map(l=>Wm(l)).join("|")+")"}const qu=e=>Xe(/\b/,e,/\w$/.test(e)?/\b/:/\B/),Kx=["Protocol","Type"].map(qu),Ep=["init","self"].map(qu),Wx=["Any","Self"],du=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],_p=["false","nil","true"],Vx=["assignment","associativity","higherThan","left","lowerThan","none","right"],qx=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],vp=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],Vm=$t(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),qm=$t(Vm,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),fu=Xe(Vm,qm,"*"),Ym=$t(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),ta=$t(Ym,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),Bn=Xe(Ym,ta,"*"),Yl=Xe(/[A-Z]/,ta,"*"),Yx=["attached","autoclosure",Xe(/convention\(/,$t("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",Xe(/objc\(/,Bn,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],Qx=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];function Xx(e){const i={match:/\s+/,relevance:0},r=e.COMMENT("/\\*","\\*/",{contains:["self"]}),l=[e.C_LINE_COMMENT_MODE,r],s={match:[/\./,$t(...Kx,...Ep)],className:{2:"keyword"}},c={match:Xe(/\./,$t(...du)),relevance:0},u=du.filter(Ke=>typeof Ke=="string").concat(["_|0"]),f=du.filter(Ke=>typeof Ke!="string").concat(Wx).map(qu),p={variants:[{className:"keyword",match:$t(...f,...Ep)}]},m={$pattern:$t(/\b\w+/,/#\w+/),keyword:u.concat(qx),literal:_p},y=[s,c,p],h={match:Xe(/\./,$t(...vp)),relevance:0},b={className:"built_in",match:Xe(/\b/,$t(...vp),/(?=\()/)},E=[h,b],w={match:/->/,relevance:0},N={className:"operator",relevance:0,variants:[{match:fu},{match:`\\.(\\.|${qm})+`}]},O=[w,N],S="([0-9]_*)+",L="([0-9a-fA-F]_*)+",P={className:"number",relevance:0,variants:[{match:`\\b(${S})(\\.(${S}))?([eE][+-]?(${S}))?\\b`},{match:`\\b0x(${L})(\\.(${L}))?([pP][+-]?(${S}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},q=(Ke="")=>({className:"subst",variants:[{match:Xe(/\\/,Ke,/[0\\tnr"']/)},{match:Xe(/\\/,Ke,/u\{[0-9a-fA-F]{1,8}\}/)}]}),X=(Ke="")=>({className:"subst",match:Xe(/\\/,Ke,/[\t ]*(?:[\r\n]|\r\n)/)}),M=(Ke="")=>({className:"subst",label:"interpol",begin:Xe(/\\/,Ke,/\(/),end:/\)/}),le=(Ke="")=>({begin:Xe(Ke,/"""/),end:Xe(/"""/,Ke),contains:[q(Ke),X(Ke),M(Ke)]}),de=(Ke="")=>({begin:Xe(Ke,/"/),end:Xe(/"/,Ke),contains:[q(Ke),M(Ke)]}),K={className:"string",variants:[le(),le("#"),le("##"),le("###"),de(),de("#"),de("##"),de("###")]},A=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}],j={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,contains:A},U=Ke=>{const Jt=Xe(Ke,/\//),an=Xe(/\//,Ke);return{begin:Jt,end:an,contains:[...A,{scope:"comment",begin:`#(?!.*${an})`,end:/$/}]}},J={scope:"regexp",variants:[U("###"),U("##"),U("#"),j]},Q={match:Xe(/`/,Bn,/`/)},G={className:"variable",match:/\$\d+/},se={className:"variable",match:`\\$${ta}+`},z=[Q,G,se],V={match:/(@|#(un)?)available/,scope:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:Qx,contains:[...O,P,K]}]}},ae={scope:"keyword",match:Xe(/@/,$t(...Yx),ko($t(/\(/,/\s+/)))},v={scope:"meta",match:Xe(/@/,Bn)},R=[V,ae,v],$={match:ko(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:Xe(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,ta,"+")},{className:"type",match:Yl,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:Xe(/\s+&\s+/,ko(Yl)),relevance:0}]},k={begin://,keywords:m,contains:[...l,...y,...R,w,$]};$.contains.push(k);const ke={match:Xe(Bn,/\s*:/),keywords:"_|0",relevance:0},Me={begin:/\(/,end:/\)/,relevance:0,keywords:m,contains:["self",ke,...l,J,...y,...E,...O,P,K,...z,...R,$]},we={begin://,keywords:"repeat each",contains:[...l,$]},$e={begin:$t(ko(Xe(Bn,/\s*:/)),ko(Xe(Bn,/\s+/,Bn,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:Bn}]},De={begin:/\(/,end:/\)/,keywords:m,contains:[$e,...l,...y,...O,P,K,...R,$,Me],endsParent:!0,illegal:/["']/},Ge={match:[/(func|macro)/,/\s+/,$t(Q.match,Bn,fu)],className:{1:"keyword",3:"title.function"},contains:[we,De,i],illegal:[/\[/,/%/]},Ze={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[we,De,i],illegal:/\[|%/},Zt={match:[/operator/,/\s+/,fu],className:{1:"keyword",3:"title"}},rr={begin:[/precedencegroup/,/\s+/,Yl],className:{1:"keyword",3:"title"},contains:[$],keywords:[...Vx,..._p],end:/}/},An={match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{1:"keyword",3:"keyword",5:"title.function"}},Hn={match:[/class\b/,/\s+/,/var\b/],scope:{1:"keyword",3:"keyword"}},jn={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,Bn,/\s*/],beginScope:{1:"keyword",3:"title.class"},keywords:m,contains:[we,...y,{begin:/:/,end:/\{/,keywords:m,contains:[{scope:"title.class.inherited",match:Yl},...y],relevance:0}]};for(const Ke of K.variants){const Jt=Ke.contains.find(Rn=>Rn.label==="interpol");Jt.keywords=m;const an=[...y,...E,...O,P,K,...z];Jt.contains=[...an,{begin:/\(/,end:/\)/,contains:["self",...an]}]}return{name:"Swift",keywords:m,contains:[...l,Ge,Ze,An,Hn,jn,Zt,rr,{beginKeywords:"import",end:/$/,contains:[...l],relevance:0},J,...y,...E,...O,P,K,...z,...R,$,Me]}}const na="[A-Za-z$_][0-9A-Za-z$_]*",Qm=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],Xm=["true","false","null","undefined","NaN","Infinity"],Zm=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],Jm=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],eg=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],tg=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],ng=[].concat(eg,Zm,Jm);function Zx(e){const i=e.regex,r=(V,{after:ae})=>{const v="",end:""},c=/<[A-Za-z0-9\\._:-]+\s*\/>/,u={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(V,ae)=>{const v=V[0].length+V.index,R=V.input[v];if(R==="<"||R===","){ae.ignoreMatch();return}R===">"&&(r(V,{after:v})||ae.ignoreMatch());let $;const k=V.input.substring(v);if($=k.match(/^\s*=/)){ae.ignoreMatch();return}if(($=k.match(/^\s+extends\s+/))&&$.index===0){ae.ignoreMatch();return}}},f={$pattern:na,keyword:Qm,literal:Xm,built_in:ng,"variable.language":tg},p="[0-9](_?[0-9])*",m=`\\.(${p})`,y="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",h={className:"number",variants:[{begin:`(\\b(${y})((${m})|\\.)?|(${m}))[eE][+-]?(${p})\\b`},{begin:`\\b(${y})\\b((${m})\\b|\\.)?|(${m})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},b={className:"subst",begin:"\\$\\{",end:"\\}",keywords:f,contains:[]},E={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"xml"}},w={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"css"}},N={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:"graphql"}},O={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,b]},L={className:"comment",variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:l+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},P=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,E,w,N,O,{match:/\$\d+/},h];b.contains=P.concat({begin:/\{/,end:/\}/,keywords:f,contains:["self"].concat(P)});const q=[].concat(L,b.contains),X=q.concat([{begin:/(\s*)\(/,end:/\)/,keywords:f,contains:["self"].concat(q)}]),M={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:f,contains:X},le={variants:[{match:[/class/,/\s+/,l,/\s+/,/extends/,/\s+/,i.concat(l,"(",i.concat(/\./,l),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,l],scope:{1:"keyword",3:"title.class"}}]},de={relevance:0,match:i.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...Zm,...Jm]}},K={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},A={variants:[{match:[/function/,/\s+/,l,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[M],illegal:/%/},j={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function U(V){return i.concat("(?!",V.join("|"),")")}const J={match:i.concat(/\b/,U([...eg,"super","import","await"].map(V=>`${V}\\s*\\(`)),l,i.lookahead(/\s*\(/)),className:"title.function",relevance:0},Q={begin:i.concat(/\./,i.lookahead(i.concat(l,/(?![0-9A-Za-z$_(])/))),end:l,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},G={match:[/get|set/,/\s+/,l,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},M]},se="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",z={match:[/const|var|let/,/\s+/,l,/\s*/,/=\s*/,/(async\s*)?/,i.lookahead(se)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[M]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:f,exports:{PARAMS_CONTAINS:X,CLASS_REFERENCE:de},illegal:/#(?![$_A-Za-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),K,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,E,w,N,O,L,{match:/\$\d+/},h,de,{scope:"attr",match:l+i.lookahead(":"),relevance:0},z,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[L,e.REGEXP_MODE,{className:"function",begin:se,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:f,contains:X}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:s.begin,end:s.end},{match:c},{begin:u.begin,"on:begin":u.isTrulyOpeningTag,end:u.end}],subLanguage:"xml",contains:[{begin:u.begin,end:u.end,skip:!0,contains:["self"]}]}]},A,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[M,e.inherit(e.TITLE_MODE,{begin:l,className:"title.function"})]},{match:/\.\.\./,relevance:0},Q,{match:"\\$"+l,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[M]},J,j,le,G,{match:/\$[(.]/}]}}function Jx(e){const i=e.regex,r=Zx(e),l=na,s=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],c={begin:[/namespace/,/\s+/,e.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},u={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:s},contains:[r.exports.CLASS_REFERENCE]},f={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},p=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],m={$pattern:na,keyword:Qm.concat(p),literal:Xm,built_in:ng.concat(s),"variable.language":tg},y={className:"meta",begin:"@"+l},h=(N,O,S)=>{const L=N.contains.findIndex(P=>P.label===O);if(L===-1)throw new Error("can not find mode to replace");N.contains.splice(L,1,S)};Object.assign(r.keywords,m),r.exports.PARAMS_CONTAINS.push(y);const b=r.contains.find(N=>N.scope==="attr"),E=Object.assign({},b,{match:i.concat(l,i.lookahead(/\s*\?:/))});r.exports.PARAMS_CONTAINS.push([r.exports.CLASS_REFERENCE,b,E]),r.contains=r.contains.concat([y,c,u,E]),h(r,"shebang",e.SHEBANG()),h(r,"use_strict",f);const w=r.contains.find(N=>N.label==="func.def");return w.relevance=0,Object.assign(r,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),r}function eS(e){const i=e.regex,r={className:"string",begin:/"(""|[^/n])"C\b/},l={className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},s=/\d{1,2}\/\d{1,2}\/\d{4}/,c=/\d{4}-\d{1,2}-\d{1,2}/,u=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,f=/\d{1,2}(:\d{1,2}){1,2}/,p={className:"literal",variants:[{begin:i.concat(/# */,i.either(c,s),/ *#/)},{begin:i.concat(/# */,f,/ *#/)},{begin:i.concat(/# */,u,/ *#/)},{begin:i.concat(/# */,i.either(c,s),/ +/,i.either(u,f),/ *#/)}]},m={className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},y={className:"label",begin:/^\w+:/},h=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),b=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[r,l,p,m,y,h,b,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:"const disable else elseif enable end externalsource if region then"},contains:[b]}]}}function tS(e){e.regex;const i=e.COMMENT(/\(;/,/;\)/);i.contains.push("self");const r=e.COMMENT(/;;/,/$/),l=["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"],s={begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},c={className:"variable",begin:/\$[\w_]+/},u={match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},f={className:"number",relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/},p={match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},m={className:"keyword",match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/};return{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,keyword:l},contains:[r,i,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},c,u,s,e.QUOTE_STRING_MODE,p,m,f]}}function nS(e){const i=e.regex,r=i.concat(/[\p{L}_]/u,i.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),l=/[\p{L}0-9._:-]+/u,s={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},c={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},u=e.inherit(c,{begin:/\(/,end:/\)/}),f=e.inherit(e.APOS_STRING_MODE,{className:"string"}),p=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),m={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[c,p,f,u,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[c,u,p,f]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},s,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[p]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[m],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[m],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:i.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:r,relevance:0,starts:m}]},{className:"tag",begin:i.concat(/<\//,i.lookahead(i.concat(r,/>/))),contains:[{className:"name",begin:r,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}function rS(e){const i="true false yes no null",r="[\\w#;/?:@&=+$,.~*'()[\\]]+",l={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},s={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},c={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},u={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,s]},f=e.inherit(u,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),b={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},E={end:",",endsWithParent:!0,excludeEnd:!0,keywords:i,relevance:0},w={begin:/\{/,end:/\}/,contains:[E],illegal:"\\n",relevance:0},N={begin:"\\[",end:"\\]",contains:[E],illegal:"\\n",relevance:0},O=[l,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+r},{className:"type",begin:"!<"+r+">"},{className:"type",begin:"!"+r},{className:"type",begin:"!!"+r},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:i,keywords:{literal:i}},b,{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},w,N,c,u],S=[...O];return S.pop(),S.push(f),E.contains=S,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:O}}const iS={arduino:zw,bash:Fw,c:Bw,cpp:Uw,csharp:$w,css:Qw,diff:Xw,go:Zw,graphql:Jw,ini:ex,java:tx,javascript:lx,json:ux,kotlin:dx,less:Ex,lua:_x,makefile:vx,markdown:kx,objectivec:wx,perl:xx,php:Sx,"php-template":Nx,plaintext:Tx,python:Cx,"python-repl":Ax,r:Rx,ruby:Ox,rust:Ix,scss:$x,shell:Hx,sql:jx,swift:Xx,typescript:Jx,vbnet:eS,wasm:tS,xml:nS,yaml:rS};var pu,kp;function oS(){if(kp)return pu;kp=1;function e(T){return T instanceof Map?T.clear=T.delete=T.set=function(){throw new Error("map is read-only")}:T instanceof Set&&(T.add=T.clear=T.delete=function(){throw new Error("set is read-only")}),Object.freeze(T),Object.getOwnPropertyNames(T).forEach(Y=>{const fe=T[Y],Re=typeof fe;(Re==="object"||Re==="function")&&!Object.isFrozen(fe)&&e(fe)}),T}class i{constructor(Y){Y.data===void 0&&(Y.data={}),this.data=Y.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function r(T){return T.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function l(T,...Y){const fe=Object.create(null);for(const Re in T)fe[Re]=T[Re];return Y.forEach(function(Re){for(const rt in Re)fe[rt]=Re[rt]}),fe}const s="",c=T=>!!T.scope,u=(T,{prefix:Y})=>{if(T.startsWith("language:"))return T.replace("language:","language-");if(T.includes(".")){const fe=T.split(".");return[`${Y}${fe.shift()}`,...fe.map((Re,rt)=>`${Re}${"_".repeat(rt+1)}`)].join(" ")}return`${Y}${T}`};class f{constructor(Y,fe){this.buffer="",this.classPrefix=fe.classPrefix,Y.walk(this)}addText(Y){this.buffer+=r(Y)}openNode(Y){if(!c(Y))return;const fe=u(Y.scope,{prefix:this.classPrefix});this.span(fe)}closeNode(Y){c(Y)&&(this.buffer+=s)}value(){return this.buffer}span(Y){this.buffer+=``}}const p=(T={})=>{const Y={children:[]};return Object.assign(Y,T),Y};class m{constructor(){this.rootNode=p(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(Y){this.top.children.push(Y)}openNode(Y){const fe=p({scope:Y});this.add(fe),this.stack.push(fe)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(Y){return this.constructor._walk(Y,this.rootNode)}static _walk(Y,fe){return typeof fe=="string"?Y.addText(fe):fe.children&&(Y.openNode(fe),fe.children.forEach(Re=>this._walk(Y,Re)),Y.closeNode(fe)),Y}static _collapse(Y){typeof Y!="string"&&Y.children&&(Y.children.every(fe=>typeof fe=="string")?Y.children=[Y.children.join("")]:Y.children.forEach(fe=>{m._collapse(fe)}))}}class y extends m{constructor(Y){super(),this.options=Y}addText(Y){Y!==""&&this.add(Y)}startScope(Y){this.openNode(Y)}endScope(){this.closeNode()}__addSublanguage(Y,fe){const Re=Y.root;fe&&(Re.scope=`language:${fe}`),this.add(Re)}toHTML(){return new f(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function h(T){return T?typeof T=="string"?T:T.source:null}function b(T){return N("(?=",T,")")}function E(T){return N("(?:",T,")*")}function w(T){return N("(?:",T,")?")}function N(...T){return T.map(fe=>h(fe)).join("")}function O(T){const Y=T[T.length-1];return typeof Y=="object"&&Y.constructor===Object?(T.splice(T.length-1,1),Y):{}}function S(...T){return"("+(O(T).capture?"":"?:")+T.map(Re=>h(Re)).join("|")+")"}function L(T){return new RegExp(T.toString()+"|").exec("").length-1}function P(T,Y){const fe=T&&T.exec(Y);return fe&&fe.index===0}const q=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function X(T,{joinWith:Y}){let fe=0;return T.map(Re=>{fe+=1;const rt=fe;let lt=h(Re),he="";for(;lt.length>0;){const me=q.exec(lt);if(!me){he+=lt;break}he+=lt.substring(0,me.index),lt=lt.substring(me.index+me[0].length),me[0][0]==="\\"&&me[1]?he+="\\"+String(Number(me[1])+rt):(he+=me[0],me[0]==="("&&fe++)}return he}).map(Re=>`(${Re})`).join(Y)}const M=/\b\B/,le="[a-zA-Z]\\w*",de="[a-zA-Z_]\\w*",K="\\b\\d+(\\.\\d+)?",A="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",j="\\b(0b[01]+)",U="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",J=(T={})=>{const Y=/^#![ ]*\//;return T.binary&&(T.begin=N(Y,/.*\b/,T.binary,/\b.*/)),l({scope:"meta",begin:Y,end:/$/,relevance:0,"on:begin":(fe,Re)=>{fe.index!==0&&Re.ignoreMatch()}},T)},Q={begin:"\\\\[\\s\\S]",relevance:0},G={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[Q]},se={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[Q]},z={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},V=function(T,Y,fe={}){const Re=l({scope:"comment",begin:T,end:Y,contains:[]},fe);Re.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const rt=S("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return Re.contains.push({begin:N(/[ ]+/,"(",rt,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),Re},ae=V("//","$"),v=V("/\\*","\\*/"),R=V("#","$"),$={scope:"number",begin:K,relevance:0},k={scope:"number",begin:A,relevance:0},ke={scope:"number",begin:j,relevance:0},Me={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[Q,{begin:/\[/,end:/\]/,relevance:0,contains:[Q]}]},we={scope:"title",begin:le,relevance:0},$e={scope:"title",begin:de,relevance:0},De={begin:"\\.\\s*"+de,relevance:0};var Ze=Object.freeze({__proto__:null,APOS_STRING_MODE:G,BACKSLASH_ESCAPE:Q,BINARY_NUMBER_MODE:ke,BINARY_NUMBER_RE:j,COMMENT:V,C_BLOCK_COMMENT_MODE:v,C_LINE_COMMENT_MODE:ae,C_NUMBER_MODE:k,C_NUMBER_RE:A,END_SAME_AS_BEGIN:function(T){return Object.assign(T,{"on:begin":(Y,fe)=>{fe.data._beginMatch=Y[1]},"on:end":(Y,fe)=>{fe.data._beginMatch!==Y[1]&&fe.ignoreMatch()}})},HASH_COMMENT_MODE:R,IDENT_RE:le,MATCH_NOTHING_RE:M,METHOD_GUARD:De,NUMBER_MODE:$,NUMBER_RE:K,PHRASAL_WORDS_MODE:z,QUOTE_STRING_MODE:se,REGEXP_MODE:Me,RE_STARTERS_RE:U,SHEBANG:J,TITLE_MODE:we,UNDERSCORE_IDENT_RE:de,UNDERSCORE_TITLE_MODE:$e});function Zt(T,Y){T.input[T.index-1]==="."&&Y.ignoreMatch()}function rr(T,Y){T.className!==void 0&&(T.scope=T.className,delete T.className)}function An(T,Y){Y&&T.beginKeywords&&(T.begin="\\b("+T.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",T.__beforeBegin=Zt,T.keywords=T.keywords||T.beginKeywords,delete T.beginKeywords,T.relevance===void 0&&(T.relevance=0))}function Hn(T,Y){Array.isArray(T.illegal)&&(T.illegal=S(...T.illegal))}function jn(T,Y){if(T.match){if(T.begin||T.end)throw new Error("begin & end are not supported with match");T.begin=T.match,delete T.match}}function Ke(T,Y){T.relevance===void 0&&(T.relevance=1)}const Jt=(T,Y)=>{if(!T.beforeMatch)return;if(T.starts)throw new Error("beforeMatch cannot be used with starts");const fe=Object.assign({},T);Object.keys(T).forEach(Re=>{delete T[Re]}),T.keywords=fe.keywords,T.begin=N(fe.beforeMatch,b(fe.begin)),T.starts={relevance:0,contains:[Object.assign(fe,{endsParent:!0})]},T.relevance=0,delete fe.beforeMatch},an=["of","and","for","in","not","or","if","then","parent","list","value"],Rn="keyword";function bn(T,Y,fe=Rn){const Re=Object.create(null);return typeof T=="string"?rt(fe,T.split(" ")):Array.isArray(T)?rt(fe,T):Object.keys(T).forEach(function(lt){Object.assign(Re,bn(T[lt],Y,lt))}),Re;function rt(lt,he){Y&&(he=he.map(me=>me.toLowerCase())),he.forEach(function(me){const xe=me.split("|");Re[xe[0]]=[lt,On(xe[0],xe[1])]})}}function On(T,Y){return Y?Number(Y):Tr(T)?0:1}function Tr(T){return an.includes(T.toLowerCase())}const Cr={},sn=T=>{console.error(T)},Ar=(T,...Y)=>{console.log(`WARN: ${T}`,...Y)},W=(T,Y)=>{Cr[`${T}/${Y}`]||(console.log(`Deprecated as of ${T}. ${Y}`),Cr[`${T}/${Y}`]=!0)},oe=new Error;function Ce(T,Y,{key:fe}){let Re=0;const rt=T[fe],lt={},he={};for(let me=1;me<=Y.length;me++)he[me+Re]=rt[me],lt[me+Re]=!0,Re+=L(Y[me-1]);T[fe]=he,T[fe]._emit=lt,T[fe]._multi=!0}function Pe(T){if(Array.isArray(T.begin)){if(T.skip||T.excludeBegin||T.returnBegin)throw sn("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),oe;if(typeof T.beginScope!="object"||T.beginScope===null)throw sn("beginScope must be object"),oe;Ce(T,T.begin,{key:"beginScope"}),T.begin=X(T.begin,{joinWith:""})}}function He(T){if(Array.isArray(T.end)){if(T.skip||T.excludeEnd||T.returnEnd)throw sn("skip, excludeEnd, returnEnd not compatible with endScope: {}"),oe;if(typeof T.endScope!="object"||T.endScope===null)throw sn("endScope must be object"),oe;Ce(T,T.end,{key:"endScope"}),T.end=X(T.end,{joinWith:""})}}function _t(T){T.scope&&typeof T.scope=="object"&&T.scope!==null&&(T.beginScope=T.scope,delete T.scope)}function En(T){_t(T),typeof T.beginScope=="string"&&(T.beginScope={_wrap:T.beginScope}),typeof T.endScope=="string"&&(T.endScope={_wrap:T.endScope}),Pe(T),He(T)}function jt(T){function Y(he,me){return new RegExp(h(he),"m"+(T.case_insensitive?"i":"")+(T.unicodeRegex?"u":"")+(me?"g":""))}class fe{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(me,xe){xe.position=this.position++,this.matchIndexes[this.matchAt]=xe,this.regexes.push([xe,me]),this.matchAt+=L(me)+1}compile(){this.regexes.length===0&&(this.exec=()=>null);const me=this.regexes.map(xe=>xe[1]);this.matcherRe=Y(X(me,{joinWith:"|"}),!0),this.lastIndex=0}exec(me){this.matcherRe.lastIndex=this.lastIndex;const xe=this.matcherRe.exec(me);if(!xe)return null;const yt=xe.findIndex((In,or)=>or>0&&In!==void 0),tt=this.matchIndexes[yt];return xe.splice(0,yt),Object.assign(xe,tt)}}class Re{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(me){if(this.multiRegexes[me])return this.multiRegexes[me];const xe=new fe;return this.rules.slice(me).forEach(([yt,tt])=>xe.addRule(yt,tt)),xe.compile(),this.multiRegexes[me]=xe,xe}resumingScanAtSamePosition(){return this.regexIndex!==0}considerAll(){this.regexIndex=0}addRule(me,xe){this.rules.push([me,xe]),xe.type==="begin"&&this.count++}exec(me){const xe=this.getMatcher(this.regexIndex);xe.lastIndex=this.lastIndex;let yt=xe.exec(me);if(this.resumingScanAtSamePosition()&&!(yt&&yt.index===this.lastIndex)){const tt=this.getMatcher(0);tt.lastIndex=this.lastIndex+1,yt=tt.exec(me)}return yt&&(this.regexIndex+=yt.position+1,this.regexIndex===this.count&&this.considerAll()),yt}}function rt(he){const me=new Re;return he.contains.forEach(xe=>me.addRule(xe.begin,{rule:xe,type:"begin"})),he.terminatorEnd&&me.addRule(he.terminatorEnd,{type:"end"}),he.illegal&&me.addRule(he.illegal,{type:"illegal"}),me}function lt(he,me){const xe=he;if(he.isCompiled)return xe;[rr,jn,En,Jt].forEach(tt=>tt(he,me)),T.compilerExtensions.forEach(tt=>tt(he,me)),he.__beforeBegin=null,[An,Hn,Ke].forEach(tt=>tt(he,me)),he.isCompiled=!0;let yt=null;return typeof he.keywords=="object"&&he.keywords.$pattern&&(he.keywords=Object.assign({},he.keywords),yt=he.keywords.$pattern,delete he.keywords.$pattern),yt=yt||/\w+/,he.keywords&&(he.keywords=bn(he.keywords,T.case_insensitive)),xe.keywordPatternRe=Y(yt,!0),me&&(he.begin||(he.begin=/\B|\b/),xe.beginRe=Y(xe.begin),!he.end&&!he.endsWithParent&&(he.end=/\B|\b/),he.end&&(xe.endRe=Y(xe.end)),xe.terminatorEnd=h(xe.end)||"",he.endsWithParent&&me.terminatorEnd&&(xe.terminatorEnd+=(he.end?"|":"")+me.terminatorEnd)),he.illegal&&(xe.illegalRe=Y(he.illegal)),he.contains||(he.contains=[]),he.contains=[].concat(...he.contains.map(function(tt){return Gn(tt==="self"?he:tt)})),he.contains.forEach(function(tt){lt(tt,xe)}),he.starts&<(he.starts,me),xe.matcher=rt(xe),xe}if(T.compilerExtensions||(T.compilerExtensions=[]),T.contains&&T.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return T.classNameAliases=l(T.classNameAliases||{}),lt(T)}function _n(T){return T?T.endsWithParent||_n(T.starts):!1}function Gn(T){return T.variants&&!T.cachedVariants&&(T.cachedVariants=T.variants.map(function(Y){return l(T,{variants:null},Y)})),T.cachedVariants?T.cachedVariants:_n(T)?l(T,{starts:T.starts?l(T.starts):null}):Object.isFrozen(T)?l(T):T}var vt="11.11.2";class un extends Error{constructor(Y,fe){super(Y),this.name="HTMLInjectionError",this.html=fe}}const Ct=r,ei=l,ti=Symbol("nomatch"),ir=7,Kn=function(T){const Y=Object.create(null),fe=Object.create(null),Re=[];let rt=!0;const lt="Could not find the language '{}', did you forget to load/include a language module?",he={disableAutodetect:!0,name:"Plain text",contains:[]};let me={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:y};function xe(re){return me.noHighlightRe.test(re)}function yt(re){let ve=re.className+" ";ve+=re.parentNode?re.parentNode.className:"";const ze=me.languageDetectRe.exec(ve);if(ze){const Be=vn(ze[1]);return Be||(Ar(lt.replace("{}",ze[1])),Ar("Falling back to no-highlight mode for this block.",re)),Be?ze[1]:"no-highlight"}return ve.split(/\s+/).find(Be=>xe(Be)||vn(Be))}function tt(re,ve,ze){let Be="",mt="";typeof ve=="object"?(Be=re,ze=ve.ignoreIllegals,mt=ve.language):(W("10.7.0","highlight(lang, code, ...args) has been deprecated."),W("10.7.0",`Please use highlight(code, options) instead. -https://github.com/highlightjs/highlight.js/issues/2277`),mt=re,Be=ve),ze===void 0&&(ze=!0);const ut={code:Be,language:mt};Or("before:highlight",ut);const Mn=ut.result?ut.result:In(ut.language,ut.code,ze);return Mn.code=ut.code,Or("after:highlight",Mn),Mn}function In(re,ve,ze,Be){const mt=Object.create(null);function ut(ue,ge){return ue.keywords[ge]}function Mn(){if(!Ie.keywords){gt.addText(Qe);return}let ue=0;Ie.keywordPatternRe.lastIndex=0;let ge=Ie.keywordPatternRe.exec(Qe),Ae="";for(;ge;){Ae+=Qe.substring(ue,ge.index);const je=cn.case_insensitive?ge[0].toLowerCase():ge[0],ft=ut(Ie,je);if(ft){const[xt,ma]=ft;if(gt.addText(Ae),Ae="",mt[je]=(mt[je]||0)+1,mt[je]<=ir&&(Lr+=ma),xt.startsWith("_"))Ae+=ge[0];else{const Uo=cn.classNameAliases[xt]||xt;Ft(ge[0],Uo)}}else Ae+=ge[0];ue=Ie.keywordPatternRe.lastIndex,ge=Ie.keywordPatternRe.exec(Qe)}Ae+=Qe.substring(ue),gt.addText(Ae)}function ii(){if(Qe==="")return;let ue=null;if(typeof Ie.subLanguage=="string"){if(!Y[Ie.subLanguage]){gt.addText(Qe);return}ue=In(Ie.subLanguage,Qe,!0,Ui[Ie.subLanguage]),Ui[Ie.subLanguage]=ue._top}else ue=Rr(Qe,Ie.subLanguage.length?Ie.subLanguage:null);Ie.relevance>0&&(Lr+=ue.relevance),gt.__addSublanguage(ue._emitter,ue.language)}function zt(){Ie.subLanguage!=null?ii():Mn(),Qe=""}function Ft(ue,ge){ue!==""&&(gt.startScope(ge),gt.addText(ue),gt.endScope())}function Ir(ue,ge){let Ae=1;const je=ge.length-1;for(;Ae<=je;){if(!ue._emit[Ae]){Ae++;continue}const ft=cn.classNameAliases[ue[Ae]]||ue[Ae],xt=ge[Ae];ft?Ft(xt,ft):(Qe=xt,Mn(),Qe=""),Ae++}}function lr(ue,ge){return ue.scope&&typeof ue.scope=="string"&>.openNode(cn.classNameAliases[ue.scope]||ue.scope),ue.beginScope&&(ue.beginScope._wrap?(Ft(Qe,cn.classNameAliases[ue.beginScope._wrap]||ue.beginScope._wrap),Qe=""):ue.beginScope._multi&&(Ir(ue.beginScope,ge),Qe="")),Ie=Object.create(ue,{parent:{value:Ie}}),Ie}function Mr(ue,ge,Ae){let je=P(ue.endRe,Ae);if(je){if(ue["on:end"]){const ft=new i(ue);ue["on:end"](ge,ft),ft.isMatchIgnored&&(je=!1)}if(je){for(;ue.endsParent&&ue.parent;)ue=ue.parent;return ue}}if(ue.endsWithParent)return Mr(ue.parent,ge,Ae)}function fa(ue){return Ie.matcher.regexIndex===0?(Qe+=ue[0],1):(ur=!0,0)}function pa(ue){const ge=ue[0],Ae=ue.rule,je=new i(Ae),ft=[Ae.__beforeBegin,Ae["on:begin"]];for(const xt of ft)if(xt&&(xt(ue,je),je.isMatchIgnored))return fa(ge);return Ae.skip?Qe+=ge:(Ae.excludeBegin&&(Qe+=ge),zt(),!Ae.returnBegin&&!Ae.excludeBegin&&(Qe=ge)),lr(Ae,ue),Ae.returnBegin?0:ge.length}function Fi(ue){const ge=ue[0],Ae=ve.substring(ue.index),je=Mr(Ie,ue,Ae);if(!je)return ti;const ft=Ie;Ie.endScope&&Ie.endScope._wrap?(zt(),Ft(ge,Ie.endScope._wrap)):Ie.endScope&&Ie.endScope._multi?(zt(),Ir(Ie.endScope,ue)):ft.skip?Qe+=ge:(ft.returnEnd||ft.excludeEnd||(Qe+=ge),zt(),ft.excludeEnd&&(Qe=ge));do Ie.scope&>.closeNode(),!Ie.skip&&!Ie.subLanguage&&(Lr+=Ie.relevance),Ie=Ie.parent;while(Ie!==je.parent);return je.starts&&lr(je.starts,ue),ft.returnEnd?0:ge.length}function Bo(){const ue=[];for(let ge=Ie;ge!==cn;ge=ge.parent)ge.scope&&ue.unshift(ge.scope);ue.forEach(ge=>gt.openNode(ge))}let ar={};function sr(ue,ge){const Ae=ge&&ge[0];if(Qe+=ue,Ae==null)return zt(),0;if(ar.type==="begin"&&ge.type==="end"&&ar.index===ge.index&&Ae===""){if(Qe+=ve.slice(ge.index,ge.index+1),!rt){const je=new Error(`0 width match regex (${re})`);throw je.languageName=re,je.badRule=ar.rule,je}return 1}if(ar=ge,ge.type==="begin")return pa(ge);if(ge.type==="illegal"&&!ze){const je=new Error('Illegal lexeme "'+Ae+'" for mode "'+(Ie.scope||"")+'"');throw je.mode=Ie,je}else if(ge.type==="end"){const je=Fi(ge);if(je!==ti)return je}if(ge.type==="illegal"&&Ae==="")return ge.index===ve.length||(Qe+=` -`),1;if(Dr>1e5&&Dr>ge.index*3)throw new Error("potential infinite loop, way more iterations than matches");return Qe+=Ae,Ae.length}const cn=vn(re);if(!cn)throw sn(lt.replace("{}",re)),new Error('Unknown language: "'+re+'"');const Bi=jt(cn);let Ve="",Ie=Be||Bi;const Ui={},gt=new me.__emitter(me);Bo();let Qe="",Lr=0,Ln=0,Dr=0,ur=!1;try{if(cn.__emitTokens)cn.__emitTokens(ve,gt);else{for(Ie.matcher.considerAll();;){Dr++,ur?ur=!1:Ie.matcher.considerAll(),Ie.matcher.lastIndex=Ln;const ue=Ie.matcher.exec(ve);if(!ue)break;const ge=ve.substring(Ln,ue.index),Ae=sr(ge,ue);Ln=ue.index+Ae}sr(ve.substring(Ln))}return gt.finalize(),Ve=gt.toHTML(),{language:re,value:Ve,relevance:Lr,illegal:!1,_emitter:gt,_top:Ie}}catch(ue){if(ue.message&&ue.message.includes("Illegal"))return{language:re,value:Ct(ve),illegal:!0,relevance:0,_illegalBy:{message:ue.message,index:Ln,context:ve.slice(Ln-100,Ln+100),mode:ue.mode,resultSoFar:Ve},_emitter:gt};if(rt)return{language:re,value:Ct(ve),illegal:!1,relevance:0,errorRaised:ue,_emitter:gt,_top:Ie};throw ue}}function or(re){const ve={value:Ct(re),illegal:!1,relevance:0,_top:he,_emitter:new me.__emitter(me)};return ve._emitter.addText(re),ve}function Rr(re,ve){ve=ve||me.languages||Object.keys(Y);const ze=or(re),Be=ve.filter(vn).filter(Fo).map(zt=>In(zt,re,!1));Be.unshift(ze);const mt=Be.sort((zt,Ft)=>{if(zt.relevance!==Ft.relevance)return Ft.relevance-zt.relevance;if(zt.language&&Ft.language){if(vn(zt.language).supersetOf===Ft.language)return 1;if(vn(Ft.language).supersetOf===zt.language)return-1}return 0}),[ut,Mn]=mt,ii=ut;return ii.secondBest=Mn,ii}function ua(re,ve,ze){const Be=ve&&fe[ve]||ze;re.classList.add("hljs"),re.classList.add(`language-${Be}`)}function Di(re){let ve=null;const ze=yt(re);if(xe(ze))return;if(Or("before:highlightElement",{el:re,language:ze}),re.dataset.highlighted){console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",re);return}if(re.children.length>0&&(me.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(re)),me.throwUnescapedHTML))throw new un("One of your code blocks includes unescaped HTML.",re.innerHTML);ve=re;const Be=ve.textContent,mt=ze?tt(Be,{language:ze,ignoreIllegals:!0}):Rr(Be);re.innerHTML=mt.value,re.dataset.highlighted="yes",ua(re,ze,mt.language),re.result={language:mt.language,re:mt.relevance,relevance:mt.relevance},mt.secondBest&&(re.secondBest={language:mt.secondBest.language,relevance:mt.secondBest.relevance}),Or("after:highlightElement",{el:re,result:mt,text:Be})}function ca(re){me=ei(me,re)}const Vn=()=>{ni(),W("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")};function Mo(){ni(),W("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")}let Pi=!1;function ni(){function re(){ni()}if(document.readyState==="loading"){Pi||window.addEventListener("DOMContentLoaded",re,!1),Pi=!0;return}document.querySelectorAll(me.cssSelector).forEach(Di)}function Lo(re,ve){let ze=null;try{ze=ve(T)}catch(Be){if(sn("Language definition for '{}' could not be registered.".replace("{}",re)),rt)sn(Be);else throw Be;ze=he}ze.name||(ze.name=re),Y[re]=ze,ze.rawDefinition=ve.bind(null,T),ze.aliases&&zo(ze.aliases,{languageName:re})}function Do(re){delete Y[re];for(const ve of Object.keys(fe))fe[ve]===re&&delete fe[ve]}function Po(){return Object.keys(Y)}function vn(re){return re=(re||"").toLowerCase(),Y[re]||Y[fe[re]]}function zo(re,{languageName:ve}){typeof re=="string"&&(re=[re]),re.forEach(ze=>{fe[ze.toLowerCase()]=ve})}function Fo(re){const ve=vn(re);return ve&&!ve.disableAutodetect}function st(re){re["before:highlightBlock"]&&!re["before:highlightElement"]&&(re["before:highlightElement"]=ve=>{re["before:highlightBlock"](Object.assign({block:ve.el},ve))}),re["after:highlightBlock"]&&!re["after:highlightElement"]&&(re["after:highlightElement"]=ve=>{re["after:highlightBlock"](Object.assign({block:ve.el},ve))})}function da(re){st(re),Re.push(re)}function zi(re){const ve=Re.indexOf(re);ve!==-1&&Re.splice(ve,1)}function Or(re,ve){const ze=re;Re.forEach(function(Be){Be[ze]&&Be[ze](ve)})}function ri(re){return W("10.7.0","highlightBlock will be removed entirely in v12.0"),W("10.7.0","Please use highlightElement now."),Di(re)}Object.assign(T,{highlight:tt,highlightAuto:Rr,highlightAll:ni,highlightElement:Di,highlightBlock:ri,configure:ca,initHighlighting:Vn,initHighlightingOnLoad:Mo,registerLanguage:Lo,unregisterLanguage:Do,listLanguages:Po,getLanguage:vn,registerAliases:zo,autoDetection:Fo,inherit:ei,addPlugin:da,removePlugin:zi}),T.debugMode=function(){rt=!1},T.safeMode=function(){rt=!0},T.versionString=vt,T.regex={concat:N,lookahead:b,either:S,optional:w,anyNumberOfTimes:E};for(const re in Ze)typeof Ze[re]=="object"&&e(Ze[re]);return Object.assign(T,Ze),T},Wn=Kn({});return Wn.newInstance=()=>Kn({}),pu=Wn,Wn.HighlightJS=Wn,Wn.default=Wn,pu}var lS=oS();const aS=Co(lS),wp={},sS="hljs-";function uS(e){const i=aS.newInstance();return e&&c(e),{highlight:r,highlightAuto:l,listLanguages:s,register:c,registerAlias:u,registered:f};function r(p,m,y){const h=y||wp,b=typeof h.prefix=="string"?h.prefix:sS;if(!i.getLanguage(p))throw new Error("Unknown language: `"+p+"` is not registered");i.configure({__emitter:cS,classPrefix:b});const E=i.highlight(m,{ignoreIllegals:!0,language:p});if(E.errorRaised)throw new Error("Could not highlight with `Highlight.js`",{cause:E.errorRaised});const w=E._emitter.root,N=w.data;return N.language=E.language,N.relevance=E.relevance,w}function l(p,m){const h=(m||wp).subset||s();let b=-1,E=0,w;for(;++bE&&(E=O.data.relevance,w=O)}return w||{type:"root",children:[],data:{language:void 0,relevance:E}}}function s(){return i.listLanguages()}function c(p,m){if(typeof p=="string")i.registerLanguage(p,m);else{let y;for(y in p)Object.hasOwn(p,y)&&i.registerLanguage(y,p[y])}}function u(p,m){if(typeof p=="string")i.registerAliases(typeof m=="string"?m:[...m],{languageName:p});else{let y;for(y in p)if(Object.hasOwn(p,y)){const h=p[y];i.registerAliases(typeof h=="string"?h:[...h],{languageName:y})}}}function f(p){return!!i.getLanguage(p)}}class cS{constructor(i){this.options=i,this.root={type:"root",children:[],data:{language:void 0,relevance:0}},this.stack=[this.root]}addText(i){if(i==="")return;const r=this.stack[this.stack.length-1],l=r.children[r.children.length-1];l&&l.type==="text"?l.value+=i:r.children.push({type:"text",value:i})}startScope(i){this.openNode(String(i))}endScope(){this.closeNode()}__addSublanguage(i,r){const l=this.stack[this.stack.length-1],s=i.root.children;r?l.children.push({type:"element",tagName:"span",properties:{className:[r]},children:s}):l.children.push(...s)}openNode(i){const r=this,l=i.split(".").map(function(u,f){return f?u+"_".repeat(f):r.options.classPrefix+u}),s=this.stack[this.stack.length-1],c={type:"element",tagName:"span",properties:{className:l},children:[]};s.children.push(c),this.stack.push(c)}closeNode(){this.stack.pop()}finalize(){}toHTML(){return""}}const dS={};function fS(e){const i=e||dS,r=i.aliases,l=i.detect||!1,s=i.languages||iS,c=i.plainText,u=i.prefix,f=i.subset;let p="hljs";const m=uS(s);if(r&&m.registerAlias(r),u){const y=u.indexOf("-");p=y===-1?u:u.slice(0,y)}return function(y,h){sa(y,"element",function(b,E,w){if(b.tagName!=="code"||!w||w.type!=="element"||w.tagName!=="pre")return;const N=pS(b);if(N===!1||!N&&!l||N&&c&&c.includes(N))return;Array.isArray(b.properties.className)||(b.properties.className=[]),b.properties.className.includes(p)||b.properties.className.unshift(p);const O=Aw(b,{whitespace:"pre"});let S;try{S=N?m.highlight(N,O,{prefix:u}):m.highlightAuto(O,{prefix:u,subset:f})}catch(L){const P=L;if(N&&/Unknown language/.test(P.message)){h.message("Cannot highlight as `"+N+"`, it’s not registered",{ancestors:[w,b],cause:P,place:b.position,ruleId:"missing-language",source:"rehype-highlight"});return}throw P}!N&&S.data&&S.data.language&&b.properties.className.push("language-"+S.data.language),S.children.length>0&&(b.children=S.children)})}}function pS(e){const i=e.properties.className;let r=-1;if(!Array.isArray(i))return;let l;for(;++rtypeof r=="string"):[]}catch{return[]}}function hS(e){if(!e.files)return[];try{const i=JSON.parse(e.files);return Array.isArray(i)?i.flatMap(r=>{const l=r;return typeof(l==null?void 0:l.name)!="string"||typeof(l==null?void 0:l.content)!="string"?[]:[{name:l.name,content:l.content}]}):[]}catch{return[]}}function yS({message:e,toolEvents:i=[],modelLabel:r="qwen3"}){const[l,s]=ce.useState(!1),c=e.role==="user",u=gS(e),f=hS(e);return H.jsxs("div",{className:`msg ${c?"msg-user":"msg-assistant"}`,children:[H.jsx("div",{className:"msg-role",children:c?"du":r}),!c&&e.thinking&&e.thinking.length>0&&H.jsxs("div",{className:`thinking ${l?"open":""}`,children:[H.jsxs("button",{className:"thinking-toggle",onClick:()=>s(p=>!p),children:[H.jsx("span",{className:`caret ${l?"rotated":""}`,children:"▸"}),e.content===""&&l===!1?"denkt nach …":`Denkprozess (${e.thinking.length.toLocaleString("de-DE")} Zeichen)`]}),l&&H.jsx("pre",{className:"thinking-body",children:e.thinking})]}),i.length>0&&H.jsx("div",{className:"tool-events",children:i.map((p,m)=>H.jsxs("div",{className:`tool-event ${p.ok===!1?"failed":""}`,children:[H.jsx("span",{className:"tool-icon",children:p.ok===void 0?"⋯":p.ok?"✓":"✗"}),H.jsx("code",{children:p.name}),H.jsx("span",{className:"tool-args",title:p.args,children:p.args}),p.durationMs!==void 0&&H.jsxs("span",{className:"tool-time",children:[p.durationMs," ms"]})]},m))}),u.length>0&&H.jsx("div",{className:"msg-images",children:u.map((p,m)=>H.jsx("img",{src:`data:${mS(p)};base64,${p}`,alt:`Anhang ${m+1}`,loading:"lazy"},m))}),f.length>0&&H.jsx("div",{className:"msg-files",children:f.map(p=>H.jsxs("span",{className:"file-chip",title:`${p.content.length.toLocaleString("de-DE")} Zeichen`,children:["📄 ",p.name," · ",Math.max(1,Math.round(p.content.length/1024))," kB"]},p.name))}),c?e.content?H.jsx("div",{className:"msg-content user-content",children:e.content}):null:H.jsx("div",{className:"msg-content markdown",children:H.jsx(uv,{remarkPlugins:[kw],rehypePlugins:[fS],children:e.content||"▍"})})]})}const xp=4,Sp=6*1024*1024,mu=["image/png","image/jpeg","image/gif","image/webp"],Np=4,ra=1e5,Tp=10*1024*1024,gu=[".txt",".json",".md",".markdown",".csv",".tsv",".log",".xml",".yaml",".yml",".toml",".ini",".cfg",".conf",".sql",".sh",".bash",".zsh",".py",".js",".mjs",".cjs",".jsx",".ts",".tsx",".css",".scss",".html",".htm",".svg",".rs",".go",".java",".kt",".rb",".php",".c",".h",".cpp",".hpp",".cs",".swift",".diff",".patch"],rg=["application/pdf"],Cu=[".pdf"],Cp=["application/json","application/xml","application/yaml","application/x-sh"];function bS(e){return new Promise((i,r)=>{const l=new FileReader;l.onerror=()=>r(new Error(`${e.name} konnte nicht gelesen werden`)),l.onload=()=>{const s=String(l.result),c=s.indexOf(",");i({id:`${e.name}-${e.size}-${Date.now()}-${Math.random()}`,base64:s.slice(c+1),dataUrl:s,name:e.name||"Bild"})},l.readAsDataURL(e)})}async function ES(e){const i="."+(e.name.split(".").pop()??"").toLowerCase();if(rg.includes(e.type)||Cu.includes(i)){if(e.size>Tp)throw new Error(`${e.name}: größer als ${Math.round(Tp/1024/1024)} MB`);const l=await new Promise((c,u)=>{const f=new FileReader;f.onerror=()=>u(new Error(`${e.name} konnte nicht gelesen werden`)),f.onload=()=>c(String(f.result)),f.readAsDataURL(e)}),s=l.indexOf(",");return{id:`${e.name}-${e.size}-${Date.now()}-${Math.random()}`,name:e.name||"PDF",content:l.slice(s+1),bytes:e.size,encoding:"base64"}}const r=await e.text();if(r.length===0)throw new Error(`${e.name} ist leer`);if(r.length>ra)throw new Error(`${e.name}: größer als ${Math.round(ra/1e3)} kB Text`);if(/[\x00-\x08\x0B\x0C\x0E-\x1F]/.test(r.slice(0,2e3)))throw new Error(`${e.name}: wirkt binär — nur Textdateien`);return{id:`${e.name}-${e.size}-${Date.now()}-${Math.random()}`,name:e.name||"Datei",content:r,bytes:e.size,encoding:"text"}}function _S({streaming:e,disabled:i,recording:r,transcribing:l,injectedText:s,modelLabel:c="qwen3",onInjected:u,onSend:f,onAbort:p,onMicToggle:m}){const[y,h]=ce.useState(""),[b,E]=ce.useState([]),[w,N]=ce.useState([]),[O,S]=ce.useState(null),[L,P]=ce.useState(!1),q=ce.useRef(null),X=ce.useRef(null);ce.useEffect(()=>{s!=null&&(h(s),u(),requestAnimationFrame(()=>{var K,A;(K=q.current)==null||K.focus(),(A=q.current)==null||A.setSelectionRange(s.length,s.length)}))},[s,u]);const M=async K=>{S(null);const A=[],j=[];for(const U of K){const J="."+(U.name.split(".").pop()??"").toLowerCase();if(mu.includes(U.type)){if(U.size>Sp){S(`${U.name}: größer als ${Sp/1024/1024} MB`);continue}A.push(U)}else if(U.type.startsWith("text/")||Cp.includes(U.type)||rg.includes(U.type)||gu.includes(J)||Cu.includes(J)){if(U.size>ra*2){S(`${U.name}: größer als ${Math.round(ra*2/1e3)} kB`);continue}j.push(U)}else S(`${U.name||"Datei"}: nur Bilder (PNG, JPEG, GIF, WebP) oder Textdateien`)}try{if(A.length){const U=await Promise.all(A.map(bS));E(J=>{const Q=xp-J.length;return U.length>Q&&S(`Maximal ${xp} Bilder pro Nachricht`),[...J,...U.slice(0,Math.max(Q,0))]})}if(j.length){const U=await Promise.all(j.map(ES));N(J=>{const Q=Np-J.length;return U.length>Q&&S(`Maximal ${Np} Dateien pro Nachricht`),[...J,...U.slice(0,Math.max(Q,0))]})}}catch(U){S(U instanceof Error?U.message:"Datei konnte nicht gelesen werden")}},le=()=>{const K=y.trim();!K&&b.length===0&&w.length===0||e||i||(f(K,b.map(A=>A.base64),w.map(A=>({name:A.name,content:A.content,encoding:A.encoding==="base64"?"base64":void 0}))),h(""),E([]),N([]),S(null),requestAnimationFrame(()=>{var A;return(A=q.current)==null?void 0:A.focus()}))},de=(y.trim().length>0||b.length>0||w.length>0)&&!i;return H.jsxs("div",{className:`composer ${L?"dragging":""}`,onDragOver:K=>{i||(K.preventDefault(),P(!0))},onDragLeave:()=>P(!1),onDrop:K=>{i||(K.preventDefault(),P(!1),M([...K.dataTransfer.files]))},children:[(b.length>0||w.length>0||O)&&H.jsxs("div",{className:"attachments",children:[b.map(K=>H.jsxs("div",{className:"attachment",children:[H.jsx("img",{src:K.dataUrl,alt:K.name}),H.jsx("button",{className:"attachment-remove",onClick:()=>E(A=>A.filter(j=>j.id!==K.id)),title:`${K.name} entfernen`,children:"×"})]},K.id)),w.map(K=>H.jsxs("div",{className:"attachment attachment-file",children:[H.jsxs("span",{className:"attachment-file-name",children:["📄 ",K.name," · ",Math.max(1,Math.round(K.bytes/1024))," kB"]}),H.jsx("button",{className:"attachment-remove",onClick:()=>N(A=>A.filter(j=>j.id!==K.id)),title:`${K.name} entfernen`,children:"×"})]},K.id)),O&&H.jsx("span",{className:"attachment-error",children:O})]}),H.jsxs("div",{className:"composer-row",children:[H.jsx("button",{className:`btn-mic ${r?"recording":""} ${l?"transcribing":""}`,onClick:m,title:r?"Aufnahme stoppen & senden":l?"Transkribiere …":"Sprachnachricht aufnehmen",disabled:l||i,children:r?"●":l?"…":"🎙"}),H.jsx("button",{className:"btn-attach",onClick:()=>{var K;return(K=X.current)==null?void 0:K.click()},disabled:i,title:"Bild oder Textdatei anhängen (auch per Einfügen oder Drag & Drop)",children:"📎"}),H.jsx("input",{ref:X,type:"file",accept:[...mu,...gu,...Cu].join(","),multiple:!0,hidden:!0,onChange:K=>{M([...K.target.files??[]]),K.target.value=""}}),H.jsx("textarea",{ref:q,value:y,placeholder:r?"Ich höre zu … (zum Beenden nochmal auf das Mikro klicken)":i?"Keine Session aktiv — neuen Chat starten":`Nachricht an ${c} … (Enter = senden, Bild einfügen mit ⌘V)`,rows:1,disabled:i,onChange:K=>h(K.target.value),onPaste:K=>{const A=[...K.clipboardData.files].filter(j=>{const U="."+(j.name.split(".").pop()??"").toLowerCase();return mu.includes(j.type)||j.type.startsWith("text/")||Cp.includes(j.type)||gu.includes(U)});A.length&&(K.preventDefault(),M(A))},onKeyDown:K=>{K.key==="Enter"&&!K.shiftKey&&(K.preventDefault(),le())}}),e?H.jsx("button",{className:"btn-send stop",onClick:p,children:"■ Stop"}):H.jsx("button",{className:"btn-send",disabled:!de,onClick:le,children:"Senden ▸"})]})]})}const vS={fact:"Fakt",decision:"Entscheidung",preference:"Präferenz",entity:"Entität",open_question:"Offen"};function kS({sessionId:e,onClose:i}){const[r,l]=ce.useState(null),[s,c]=ce.useState(null),u=ce.useCallback(async()=>{try{const E=await(await fetch(`/api/sessions/${e}/memory`)).json();E.state&&l(E)}catch{l(null)}},[e]);ce.useEffect(()=>{u()},[u]);const f=async()=>{c("dream");try{await fetch(`/api/sessions/${e}/dream`,{method:"POST"}),await u()}finally{c(null)}},p=async()=>{c("rebuild");try{await fetch(`/api/sessions/${e}/memory/rebuild`,{method:"POST"}),await u()}finally{c(null)}},m=async b=>{await fetch(`/api/anchors/${b.id}`,{method:"PATCH",headers:{"Content-Type":"application/json"},body:JSON.stringify({pinned:!b.pinned})}),await u()},y=async b=>{await fetch(`/api/anchors/${b.id}`,{method:"DELETE"}),await u()},h=r?r.state.last_seq-r.state.last_dream_seq:0;return H.jsx("div",{className:"memory-overlay",onClick:i,children:H.jsxs("section",{className:"memory-panel",onClick:b=>b.stopPropagation(),children:[H.jsxs("header",{className:"memory-header",children:[H.jsxs("div",{children:[H.jsx("div",{className:"memory-title",children:"🧠 Gedächtnis"}),H.jsx("div",{className:"memory-stats",children:r?`${r.state.last_seq} Log-Schritte · ${r.state.dream_count}× geträumt · ${h} unkonsolidiert`:"lädt …"})]}),H.jsx("button",{className:"memory-close",onClick:i,title:"Schließen",children:"✕"})]}),H.jsxs("div",{className:"memory-actions",children:[H.jsx("button",{onClick:()=>void f(),disabled:s!==null,children:s==="dream"?"… träumt":"💤 Traumphase jetzt"}),H.jsx("button",{onClick:()=>void p(),disabled:s!==null,children:s==="rebuild"?"… faltet":"↻ Aus Log rekonstruieren"})]}),r&&r.anchors.length===0&&H.jsx("div",{className:"memory-empty",children:"Noch keine Ankerpunkte. Sie entstehen durch die Traumphase (automatisch nach Inaktivität oder Manual oben) oder wenn das Modell sich etwas mit „remember“ merkt."}),r==null?void 0:r.anchors.map(b=>H.jsxs("div",{className:"anchor-row"+(b.pinned?" pinned":""),children:[H.jsxs("div",{className:"anchor-body",children:[H.jsxs("div",{className:"anchor-kind",children:[vS[b.kind]??b.kind," · ",b.origin]}),H.jsx("div",{className:"anchor-text",children:b.text}),H.jsxs("div",{className:"anchor-meta",children:["Wichtigkeit ",(b.importance*100).toFixed(0)," % · ",b.hits,"× bestätigt"]}),H.jsx("div",{className:"anchor-bar",children:H.jsx("div",{className:"anchor-bar-fill",style:{width:`${Math.round(b.importance*100)}%`}})})]}),H.jsxs("div",{className:"anchor-actions",children:[H.jsx("button",{onClick:()=>void m(b),title:b.pinned?"Pin lösen (Decay möglich)":"Pinnen (vor Decay geschützt)",children:b.pinned?"★":"☆"}),H.jsx("button",{onClick:()=>void y(b),title:"Ankerpunkt löschen",children:"✕"})]})]},b.id))]})})}const Ap="oxagenttwo.voiceMode";function wS(){var Q,G,se;const e=Qh(),i=ce.useRef(null),[r,l]=ce.useState(!1),[s,c]=ce.useState(!1),[u,f]=ce.useState(null),[p,m]=ce.useState(()=>localStorage.getItem(Ap)==="1"),[y,h]=ce.useState([]),[b,E]=ce.useState([]);ce.useEffect(()=>{r&&e.options.provider==="openrouter"&&y.length===0&&fetch("/api/openrouter/models").then(z=>z.json()).then(z=>{z.ok&&z.models&&h(z.models)}).catch(()=>{}),r&&e.options.provider==="ollama"&&b.length===0&&fetch("/api/ollama/models").then(z=>z.json()).then(z=>{z.ok&&z.models&&E(z.models)}).catch(()=>{})},[r,e.options.provider,y.length,b.length]);const w=ce.useRef(p),N=ce.useRef(!1),O=ce.useRef(!1);N.current=e.streaming,w.current=p;const S=ce.useCallback(z=>{m(z),localStorage.setItem(Ap,z?"1":"0")},[]),L=Xh({onTranscript:z=>{w.current?(P.current.cancelSpeech(),X.current="",q.current.sendMessage(z)):f(z)},onQueueDrained:()=>{O.current&&(O.current=!1,w.current&&!N.current&&P.current.startRecording())}}),P=ce.useRef(L);P.current=L;const q=ce.useRef(e);q.current=e;const X=ce.useRef(""),M=ce.useRef({id:"",offset:0});ce.useEffect(()=>{const z=i.current;z&&(z.scrollTop=z.scrollHeight)},[e.messages]),ce.useEffect(()=>{if(!p)return;const z=[...e.messages].reverse().find(k=>k.role==="assistant");if(!z)return;M.current.id!==z.id&&(M.current={id:z.id,offset:0},X.current="");const V=z.content;if(V.length=40&&($=v.slice(0,ke))}else if(v.length>300){const k=Math.max(v.lastIndexOf(", "),v.lastIndexOf(" "));$=k>100?v.slice(0,k+1):v}$&&(X.current=v.slice($.length),L.enqueueSpeech($))});const le=ce.useRef(!1);ce.useEffect(()=>{if(le.current&&!e.streaming&&p){const z=X.current.trim();z&&(X.current="",L.enqueueSpeech(z)),(z||M.current.id)&&(O.current=!0)}le.current=e.streaming},[e.streaming,p,L]);const[de,K]=ce.useState([]);ce.useEffect(()=>{fetch("/api/tools").then(z=>z.json()).then(z=>K(z.tools??[])).catch(()=>K([]))},[]);const A=(e.options.provider==="openrouter"?e.options.openrouterModel.split("/").pop():e.options.model.replace(/:latest$/,""))??"qwen3",j=ce.useCallback((z,V=[],ae=[])=>{L.cancelSpeech(),X.current="",e.sendMessage(z,V,ae)},[e,L]),U=ce.useCallback(()=>{L.cancelSpeech(),X.current="",e.abort()},[e,L]),J=ce.useCallback(()=>{L.recording?L.stopRecording():(L.cancelSpeech(),L.startRecording())},[L]);return H.jsxs("div",{className:"app",children:[H.jsx(Zh,{sessions:e.sessions,activeId:e.activeId,onSelect:e.setActiveId,onNew:()=>void e.newSession(),onDelete:z=>void e.deleteSession(z)}),H.jsxs("main",{className:"main",children:[H.jsxs("header",{className:"topbar",children:[H.jsxs("div",{className:"model-badge",title:(Q=e.modelInfo)!=null&&Q.ok||(G=e.modelInfo)==null?void 0:G.error,children:[H.jsx("span",{className:`status-dot ${e.status==="open"?"on":"off"}`}),e.options.provider==="openrouter"?`☁ ${e.options.openrouterModel}`:(se=e.modelInfo)!=null&&se.ok?`${e.modelInfo.model} · ${e.modelInfo.parameterSize} · ${e.modelInfo.quantization}`:"Ollama offline"]}),H.jsxs("div",{className:"topbar-actions",children:[p&&(L.recording||L.transcribing||L.speaking)&&H.jsx("span",{className:"voice-state",children:L.recording?"● hört zu":L.transcribing?"… transkribiert":"🔊 spricht"}),H.jsx("button",{className:`btn-settings ${p?"toggled":""}`,onClick:()=>{p&&(L.cancelSpeech(),L.stopRecording()),S(!p)},title:"Sprachmodus: Antworten werden vorgelesen, danach wird automatisch wieder zugehört",children:p?"🔊 Stimme: an":"🔇 Stimme: aus"}),H.jsx("button",{className:"btn-settings",onClick:()=>c(z=>!z),disabled:!e.activeId,title:"Gedächtnis: Ankerpunkte, Traumphase, Log-Rekonstruktion",children:"🧠 Gedächtnis"}),H.jsx("button",{className:"btn-settings",onClick:()=>l(z=>!z),children:"⚙ Einstellungen"})]})]}),r&&H.jsxs("section",{className:"settings-panel",children:[H.jsxs("label",{className:"setting-row",children:[H.jsx("span",{children:"Modell"}),H.jsxs("select",{className:"provider-select",value:e.options.provider,onChange:z=>e.setOptions({provider:z.target.value}),children:[H.jsx("option",{value:"ollama",children:"Lokal: qwen3.5 (Ollama)"}),H.jsx("option",{value:"openrouter",children:"OpenRouter (Cloud)"})]})]}),e.options.provider==="openrouter"&&H.jsxs("label",{className:"setting-row column",children:[H.jsxs("span",{children:["OpenRouter-Modell (",y.length," verfügbar)"]}),H.jsx("input",{list:"or-models",value:e.options.openrouterModel,placeholder:"z. B. anthropic/claude-sonnet-4.5",onChange:z=>e.setOptions({openrouterModel:z.target.value})}),H.jsx("datalist",{id:"or-models",children:y.map(z=>H.jsxs("option",{value:z.id,children:[z.name," · ",z.promptPrice===0?"gratis":`$${z.promptPrice.toFixed(2)}/M`]},z.id))})]}),e.options.provider==="ollama"&&H.jsxs("label",{className:"setting-row",children:[H.jsx("span",{children:"Lokales Modell (Ollama)"}),H.jsxs("select",{className:"provider-select",value:b.some(z=>z.name===e.options.model)?e.options.model:"",onChange:z=>e.setOptions({model:z.target.value}),children:[!b.some(z=>z.name===e.options.model)&&H.jsxs("option",{value:"",children:[e.options.model," (nicht installiert)"]}),b.map(z=>H.jsxs("option",{value:z.name,children:[z.name,z.parameterSize?` · ${z.parameterSize}`:"",z.sizeGB?` · ${z.sizeGB} GB`:""]},z.name)),b.length===0&&H.jsx("option",{value:e.options.model,children:e.options.model})]})]}),e.options.provider==="ollama"&&H.jsxs("label",{className:"setting-row checkbox",children:[H.jsx("input",{type:"checkbox",checked:e.options.think,onChange:z=>e.setOptions({think:z.target.checked})}),H.jsx("span",{children:"Thinking-Mode (Modell denkt sichtbar vor der Antwort)"})]}),H.jsxs("label",{className:"setting-row checkbox",children:[H.jsx("input",{type:"checkbox",checked:e.options.tools,onChange:z=>e.setOptions({tools:z.target.checked})}),H.jsxs("span",{children:["Werkzeuge (",de.length>0?de.join(", "):"keine geladen",")"]})]}),H.jsxs("label",{className:"setting-row",children:[H.jsxs("span",{children:["Temperature: ",e.options.temperature.toFixed(2)]}),H.jsx("input",{type:"range",min:0,max:1.5,step:.05,value:e.options.temperature,onChange:z=>e.setOptions({temperature:Number(z.target.value)})})]}),H.jsxs("label",{className:"setting-row",children:[H.jsxs("span",{children:["Max. Tokens: ",e.options.numPredict]}),H.jsx("input",{type:"range",min:256,max:8192,step:256,value:e.options.numPredict,onChange:z=>e.setOptions({numPredict:Number(z.target.value)})})]}),H.jsxs("label",{className:"setting-row",children:[H.jsxs("span",{children:["Gedächtnis-Fenster: ",e.options.memorySteps," Schritte"]}),H.jsx("input",{type:"range",min:2,max:50,step:1,value:e.options.memorySteps,onChange:z=>e.setOptions({memorySteps:Number(z.target.value)})})]}),H.jsxs("label",{className:"setting-row checkbox",children:[H.jsx("input",{type:"checkbox",checked:e.options.memoryAnchors,onChange:z=>e.setOptions({memoryAnchors:z.target.checked})}),H.jsx("span",{children:"Ankerpunkte ins Modell einspielen (Gedächtnis als System-Kontext)"})]}),H.jsxs("label",{className:"setting-row checkbox",children:[H.jsx("input",{type:"checkbox",checked:e.options.dreamAuto,onChange:z=>e.setOptions({dreamAuto:z.target.checked})}),H.jsx("span",{children:"Auto-Traumphase (Konsolidierung nach 3 Min Inaktivität oder 10 Schritten)"})]}),H.jsxs("label",{className:"setting-row column",children:[H.jsx("span",{children:"System-Prompt"}),H.jsx("textarea",{rows:3,placeholder:"Optional: Verhalten des Modells steuern …",value:e.systemPrompt,onChange:z=>e.setSystemPrompt(z.target.value)})]})]}),s&&e.activeId&&H.jsx(kS,{sessionId:e.activeId,onClose:()=>c(!1)}),H.jsxs("div",{className:"messages",ref:i,children:[e.messages.length===0&&H.jsxs("div",{className:"welcome",children:[H.jsx("div",{className:"welcome-title",children:"▸ agenttwo-tools"}),H.jsx("p",{children:"Echtzeit-Chat mit lokalem Qwen3 über Ollama — per Tastatur oder Stimme (Whisper STT + Piper TTS, alles lokal)."}),H.jsx("p",{className:"hint",children:"🎙 für Sprachnachricht · 🔊 Stimme an für freihändigen Dialog"})]}),e.messages.map(z=>H.jsx(yS,{message:z,toolEvents:e.toolEvents[z.id],modelLabel:A},z.id))]}),L.error&&H.jsxs("div",{className:"voice-error",children:[L.error,H.jsx("button",{onClick:()=>L.setError(null),children:"✕"})]}),H.jsx(_S,{streaming:e.streaming,disabled:!e.activeId,recording:L.recording,transcribing:L.transcribing,injectedText:u,modelLabel:A,onInjected:()=>f(null),onSend:j,onAbort:U,onMicToggle:J})]})]})}Vh.createRoot(document.getElementById("root")).render(H.jsx(Uh.StrictMode,{children:H.jsx(wS,{})})); diff --git a/web/dist/assets/index-CXQcDbVB.css b/web/dist/assets/index-CXQcDbVB.css deleted file mode 100644 index c89f180..0000000 --- a/web/dist/assets/index-CXQcDbVB.css +++ /dev/null @@ -1,10 +0,0 @@ -pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! - Theme: GitHub Dark - Description: Dark theme as seen on github.com - Author: github.com - Maintainer: @Hirse - Updated: 2021-05-15 - - Outdated base version: https://github.com/primer/github-syntax-dark - Current colors taken from GitHub's CSS -*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}:root{--bg: #0a0f0c;--bg-panel: #0e1511;--bg-elevated: #121b15;--border: #1e2c23;--text: #d4e4d8;--text-dim: #7a9484;--accent: #3ddc84;--accent-dim: #2a9a5f;--accent-warm: #ffb454;--user-bg: #16241c;--mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace}*{box-sizing:border-box;margin:0;padding:0}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font-family:var(--mono);font-size:14px;line-height:1.55}.app{display:flex;height:100%}.sidebar{width:250px;flex-shrink:0;background:var(--bg-panel);border-right:1px solid var(--border);display:flex;flex-direction:column}.sidebar-header{padding:16px 14px;border-bottom:1px solid var(--border)}.brand{font-weight:700;letter-spacing:.04em;color:var(--accent);margin-bottom:12px}.brand-prompt{animation:blink 1.2s steps(2) infinite}@keyframes blink{50%{opacity:.25}}.btn-new,.btn-settings,.btn-send{font-family:inherit;font-size:13px;background:transparent;color:var(--accent);border:1px solid var(--accent-dim);border-radius:6px;padding:7px 12px;cursor:pointer;transition:background .15s,border-color .15s}.btn-new{width:100%}.btn-new:hover,.btn-settings:hover{background:#3ddc8414;border-color:var(--accent)}.session-list{overflow-y:auto;flex:1;padding:8px}.empty-hint{color:var(--text-dim);padding:10px;font-size:13px}.session-item{display:flex;align-items:center;gap:6px;padding:8px 10px;border-radius:6px;cursor:pointer;color:var(--text-dim);margin-bottom:2px}.session-item:hover{background:var(--bg-elevated);color:var(--text)}.session-item.active{background:var(--user-bg);color:var(--accent)}.session-title{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-size:13px}.session-delete{background:none;border:none;color:var(--text-dim);cursor:pointer;opacity:0;font-size:12px}.session-item:hover .session-delete{opacity:1}.session-delete:hover{color:#ff6b6b}.main{flex:1;display:flex;flex-direction:column;min-width:0}.topbar{display:flex;justify-content:space-between;align-items:center;padding:12px 20px;border-bottom:1px solid var(--border);background:var(--bg-panel)}.model-badge{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--text-dim)}.status-dot{width:8px;height:8px;border-radius:50%;background:#555}.status-dot.on{background:var(--accent);box-shadow:0 0 6px var(--accent)}.status-dot.off{background:#ff6b6b}.settings-panel{padding:14px 20px;border-bottom:1px solid var(--border);background:var(--bg-elevated);display:flex;flex-direction:column;gap:12px}.setting-row{display:flex;align-items:center;gap:14px;font-size:13px;color:var(--text-dim)}.setting-row.column{flex-direction:column;align-items:stretch}.setting-row input[type=range]{flex:1;accent-color:var(--accent)}.setting-row textarea,.provider-select,.settings-panel input[list]{font-family:inherit;background:var(--bg);border:1px solid var(--border);color:var(--text);border-radius:6px;padding:8px 10px}.setting-row textarea{resize:vertical}.provider-select{min-width:220px}.messages{flex:1;overflow-y:auto;padding:24px 20px;scroll-behavior:smooth}.welcome{max-width:640px;margin:80px auto;text-align:center;color:var(--text-dim)}.welcome-title{font-size:22px;color:var(--accent);margin-bottom:12px}.welcome .hint{margin-top:8px;font-size:13px}.msg{max-width:760px;margin:0 auto 20px}.msg-role{font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--text-dim);margin-bottom:6px}.msg-user .msg-role{color:var(--accent)}.user-content{background:var(--user-bg);border:1px solid var(--border);border-radius:10px;padding:12px 14px;white-space:pre-wrap;word-break:break-word}.markdown{word-break:break-word}.markdown p{margin:0 0 10px}.markdown p:last-child{margin-bottom:0}.markdown ul,.markdown ol{margin:0 0 10px 22px}.markdown li{margin-bottom:4px}.markdown h1,.markdown h2,.markdown h3{margin:16px 0 8px;color:var(--accent)}.markdown blockquote{border-left:3px solid var(--accent-dim);padding-left:12px;color:var(--text-dim);margin:0 0 10px}.markdown a{color:var(--accent)}.markdown table{border-collapse:collapse;margin-bottom:10px}.markdown th,.markdown td{border:1px solid var(--border);padding:5px 10px;font-size:13px}.markdown :not(pre)>code{background:var(--bg-elevated);border:1px solid var(--border);border-radius:4px;padding:1px 5px;font-size:13px;color:var(--accent-warm)}.markdown pre{background:var(--bg-panel);border:1px solid var(--border);border-radius:8px;padding:12px 14px;overflow-x:auto;margin-bottom:10px;font-size:13px}.thinking{margin-bottom:8px;border:1px dashed var(--border);border-radius:8px}.thinking-toggle{width:100%;text-align:left;background:none;border:none;font-family:inherit;font-size:12px;color:var(--text-dim);padding:8px 10px;cursor:pointer}.thinking-toggle:hover{color:var(--accent-warm)}.caret{display:inline-block;transition:transform .15s}.caret.rotated{transform:rotate(90deg)}.thinking-body{padding:4px 12px 10px;font-size:12.5px;color:var(--text-dim);white-space:pre-wrap;max-height:260px;overflow-y:auto}.composer{display:flex;gap:10px;padding:14px 20px 18px;border-top:1px solid var(--border);background:var(--bg-panel);align-items:stretch}.btn-mic{width:46px;flex-shrink:0;font-size:18px;background:transparent;border:1px solid var(--border);border-radius:8px;cursor:pointer;color:var(--text-dim);transition:border-color .15s,color .15s,box-shadow .15s}.btn-mic:hover:not(:disabled){border-color:var(--accent-dim);color:var(--accent)}.btn-mic.recording{border-color:#ff6b6b;color:#ff6b6b;animation:pulse 1.2s ease-in-out infinite}.btn-mic.transcribing{border-color:var(--accent-warm);color:var(--accent-warm)}@keyframes pulse{50%{box-shadow:0 0 0 5px #ff6b6b26}}.voice-state{font-size:12px;color:var(--accent-warm);white-space:nowrap}.topbar-actions{display:flex;align-items:center;gap:12px}.btn-settings.toggled{color:var(--accent-warm);border-color:var(--accent-warm)}.voice-error{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:0 20px 8px;padding:8px 12px;font-size:13px;color:#ffb454;background:#ffb45414;border:1px solid rgba(255,180,84,.3);border-radius:8px}.voice-error button{background:none;border:none;color:inherit;cursor:pointer}.composer textarea{flex:1;resize:none;font-family:inherit;font-size:14px;background:var(--bg);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:11px 14px;min-height:44px;max-height:180px}.composer textarea:focus{outline:none;border-color:var(--accent-dim)}.composer textarea::placeholder{color:#4d6355}.btn-send{min-width:96px;align-self:stretch}.btn-send:disabled{opacity:.4;cursor:not-allowed}.btn-send:not(:disabled):hover{background:#3ddc841a}.btn-send.stop{color:var(--accent-warm);border-color:var(--accent-warm)}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}::-webkit-scrollbar-track{background:transparent}.composer.dragging{outline:2px dashed var(--accent, #3fb950);outline-offset:-4px}.composer{flex-direction:column;align-items:stretch}.composer-row{display:flex;align-items:flex-end;gap:10px;width:100%}.attachments{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:0 0 8px}.attachment{position:relative;width:64px;height:64px}.attachment img{width:100%;height:100%;object-fit:cover;border-radius:6px;border:1px solid var(--border, #30363d)}.attachment-remove{position:absolute;top:-6px;right:-6px;width:20px;height:20px;line-height:18px;padding:0;border-radius:50%;border:1px solid var(--border, #30363d);background:var(--bg, #0d1117);color:var(--fg, #c9d1d9);cursor:pointer}.attachment-error{font-size:.85em;color:#f85149}.btn-attach{flex:0 0 auto;background:transparent;border:1px solid var(--border, #30363d);border-radius:8px;padding:8px 10px;cursor:pointer;color:inherit}.btn-attach:disabled{opacity:.4;cursor:default}.msg-images{display:flex;flex-wrap:wrap;gap:8px;margin:6px 0}.msg-images img{max-width:min(320px,100%);max-height:320px;border-radius:8px;border:1px solid var(--border, #30363d)}.tool-events{display:flex;flex-direction:column;gap:4px;margin:4px 0 10px}.tool-event{display:flex;align-items:center;gap:8px;font-size:.85em;padding:4px 10px;border-left:2px solid var(--accent, #3fb950);background:#3fb9500f;border-radius:0 4px 4px 0;color:var(--fg-dim, #8b949e)}.tool-event.failed{border-left-color:#f85149;background:#f851490f}.tool-event code{color:var(--fg, #c9d1d9);font-weight:600}.tool-args{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:.75}.tool-time{flex:0 0 auto;opacity:.6;font-variant-numeric:tabular-nums}.memory-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#04080699;display:flex;align-items:center;justify-content:center;z-index:50}.memory-panel{width:min(660px,92vw);max-height:80vh;overflow-y:auto;background:var(--bg-panel);border:1px solid var(--border);border-radius:10px;padding:18px;display:flex;flex-direction:column;gap:10px}.memory-header{display:flex;justify-content:space-between;align-items:flex-start}.memory-title{color:var(--accent);font-weight:700;letter-spacing:.03em}.memory-stats{color:var(--text-dim);font-size:12px;margin-top:2px}.memory-close{background:transparent;border:none;color:var(--text-dim);font-size:15px;cursor:pointer}.memory-close:hover{color:var(--text)}.memory-actions{display:flex;gap:8px}.memory-actions button{font-family:inherit;font-size:12px;background:transparent;color:var(--accent);border:1px solid var(--accent-dim);border-radius:6px;padding:5px 10px;cursor:pointer}.memory-actions button:hover:not(:disabled){background:var(--user-bg)}.memory-actions button:disabled{opacity:.5;cursor:default}.memory-empty{color:var(--text-dim);font-size:13px;padding:14px;text-align:center;border:1px dashed var(--border);border-radius:8px}.anchor-row{display:flex;gap:10px;align-items:flex-start;padding:9px 12px;background:var(--bg-elevated);border:1px solid var(--border);border-radius:8px}.anchor-row.pinned{border-color:var(--accent-dim)}.anchor-body{flex:1;min-width:0}.anchor-kind{font-size:11px;color:var(--accent-warm);text-transform:uppercase;letter-spacing:.06em}.anchor-text{font-size:13px;margin-top:3px;overflow-wrap:anywhere}.anchor-meta{font-size:11px;color:var(--text-dim);margin-top:4px}.anchor-bar{height:3px;background:var(--border);border-radius:2px;margin-top:6px;overflow:hidden}.anchor-bar-fill{height:100%;background:var(--accent);border-radius:2px}.anchor-actions{display:flex;gap:2px;flex-shrink:0}.anchor-actions button{background:transparent;border:none;color:var(--text-dim);cursor:pointer;font-size:14px;padding:2px 4px}.anchor-actions button:hover{color:var(--accent)}.attachment-file{width:auto;min-width:120px;max-width:320px;height:auto;padding:8px 10px;border-radius:8px;background:var(--bg-elevated);border:1px solid var(--border);display:flex;align-items:center;gap:8px}.attachment-file-name{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.msg-files{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}.file-chip{font-size:12px;color:var(--text-dim);background:var(--bg-elevated);border:1px solid var(--border);border-radius:6px;padding:3px 8px;max-width:320px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} diff --git a/web/dist/favicon.svg b/web/dist/favicon.svg deleted file mode 100644 index 349f2b7..0000000 --- a/web/dist/favicon.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - diff --git a/web/dist/index.html b/web/dist/index.html deleted file mode 100644 index c0d5ea9..0000000 --- a/web/dist/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - agenttwo-tools — qwen3 mit Vision - - - - -
- - diff --git a/web/src/App.tsx b/web/src/App.tsx index e5995f8..866d293 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -5,6 +5,7 @@ import { Sidebar } from "./components/Sidebar"; import { ChatMessage } from "./components/ChatMessage"; import { Composer } from "./components/Composer"; import { MemoryPanel } from "./components/MemoryPanel"; +import { ToolConfirm } from "./components/ToolConfirm"; import type { OpenRouterModel, OllamaModel } from "./types"; const VOICE_KEY = "oxagenttwo.voiceMode"; @@ -434,6 +435,10 @@ export default function App() { ))} + {chat.toolConfirm && ( + + )} + {voice.error && (
{voice.error} diff --git a/web/src/components/ToolConfirm.tsx b/web/src/components/ToolConfirm.tsx new file mode 100644 index 0000000..aa61f3f --- /dev/null +++ b/web/src/components/ToolConfirm.tsx @@ -0,0 +1,71 @@ +import type { ToolConfirmRequest, ToolDecision } from "../types"; + +/** Kurzer Satz, was dieser Aufruf tatsächlich tut — pro Werkzeug. */ +const WHAT_HAPPENS: Record = { + read_webpage: "Diese Adresse wird von deinem Rechner abgerufen — inklusive allem, was in der URL steht.", + remember: "Dieser Punkt landet dauerhaft im Gedächtnis und geht künftig in jeden Chat mit ein.", +}; + +/** Argumente als lesbare Zeilen; unlesbares JSON fällt auf den Rohtext zurück. */ +function argLines(args: string): [string, string][] { + try { + const parsed: unknown = JSON.parse(args); + if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) { + return Object.entries(parsed as Record).map(([k, v]) => [ + k, + typeof v === "string" ? v : JSON.stringify(v), + ]); + } + } catch { + /* unten als Rohtext */ + } + return [["", args]]; +} + +export function ToolConfirm({ + request, + onDecide, +}: { + request: ToolConfirmRequest; + onDecide: (id: string, decision: ToolDecision) => void; +}) { + return ( +
+
+ + + Das Modell möchte {request.name} ausführen + +
+ +
+ {argLines(request.args).map(([key, value], i) => ( +
+ {key &&
{key}
} +
{value}
+
+ ))} +
+ + {WHAT_HAPPENS[request.name] && ( +

{WHAT_HAPPENS[request.name]}

+ )} + +
+ + + +
+
+ ); +} diff --git a/web/src/styles.css b/web/src/styles.css index bdd1fbf..d57fcfe 100644 --- a/web/src/styles.css +++ b/web/src/styles.css @@ -896,3 +896,108 @@ body { text-overflow: ellipsis; white-space: nowrap; } + +/* --- Werkzeug-Freigabe --- */ +.tool-confirm { + margin: 0 16px 10px; + padding: 12px 14px; + border: 1px solid var(--accent-warm); + border-radius: 8px; + background: rgba(255, 180, 84, 0.07); + display: flex; + flex-direction: column; + gap: 10px; +} + +.tool-confirm-head { + display: flex; + align-items: center; + gap: 8px; + font-size: 0.9em; +} + +.tool-confirm-mark { + color: var(--accent-warm); +} + +.tool-confirm-head code { + color: var(--accent-warm); + font-weight: 600; +} + +.tool-confirm-args { + display: flex; + flex-direction: column; + gap: 4px; + max-height: 160px; + overflow-y: auto; + padding: 8px 10px; + border-radius: 6px; + background: var(--bg); + font-size: 0.85em; +} + +.tool-confirm-arg { + display: flex; + gap: 8px; +} + +.tool-confirm-arg dt { + flex: 0 0 auto; + color: var(--text-dim); +} + +.tool-confirm-arg dd { + flex: 1 1 auto; + /* Umbrechen statt abschneiden: eine gekürzte URL wäre wertlos zum Prüfen. */ + overflow-wrap: anywhere; +} + +.tool-confirm-hint { + font-size: 0.82em; + color: var(--text-dim); +} + +.tool-confirm-actions { + display: flex; + gap: 8px; + flex-wrap: wrap; +} + +.btn-decide { + padding: 6px 14px; + border-radius: 6px; + border: 1px solid var(--border); + background: var(--bg-elevated); + color: var(--text); + font-family: var(--mono); + font-size: 0.85em; + cursor: pointer; +} + +.btn-decide:hover { + border-color: var(--text-dim); +} + +.btn-decide.allow { + border-color: var(--accent-dim); + color: var(--accent); +} + +.btn-decide.allow:hover { + background: rgba(61, 220, 132, 0.1); +} + +.btn-decide.always { + color: var(--text-dim); +} + +.btn-decide.deny:hover { + border-color: #f85149; + color: #f85149; +} + +.btn-decide:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 2px; +} diff --git a/web/src/types.ts b/web/src/types.ts index 0895fc0..a600b53 100644 --- a/web/src/types.ts +++ b/web/src/types.ts @@ -31,6 +31,20 @@ export interface ToolEvent { durationMs?: number; } +/** + * Rückfrage des Servers, bevor ein Werkzeug mit Außenwirkung läuft. + * `args` ist das vollständige JSON — bei read_webpage steckt darin die URL, + * die der Rechner sonst ungefragt abrufen würde. + */ +export interface ToolConfirmRequest { + id: string; + messageId: string; + name: string; + args: string; +} + +export type ToolDecision = "allow" | "always" | "deny"; + export interface ChatOptions { model: string; think: boolean; diff --git a/web/src/useChat.ts b/web/src/useChat.ts index d4c4340..da45e7d 100644 --- a/web/src/useChat.ts +++ b/web/src/useChat.ts @@ -1,6 +1,13 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { ChatSocket } from "./socket"; -import type { ChatOptions, Message, Session , ToolEvent } from "./types"; +import type { + ChatOptions, + Message, + Session, + ToolConfirmRequest, + ToolDecision, + ToolEvent, +} from "./types"; export type ConnStatus = "connecting" | "open" | "closed"; export interface ModelInfo { @@ -46,6 +53,9 @@ export function useChat() { const [messages, setMessages] = useState([]); const [streaming, setStreaming] = useState(false); const [toolEvents, setToolEvents] = useState>({}); + // Der Server fragt Werkzeuge einzeln und nacheinander an; die Queue ist die + // Absicherung für den Fall, dass doch zwei Antworten parallel laufen. + const [toolConfirms, setToolConfirms] = useState([]); const [options, setOptionsState] = useState(loadOptions); const [systemPrompt, setSystemPromptState] = useState( () => localStorage.getItem(SYSTEM_KEY) ?? "", @@ -112,9 +122,23 @@ export function useChat() { ); return { ...prev, [data.messageId as string]: updated }; }); + } else if (t === "tool-confirm") { + setToolConfirms((prev) => [ + ...prev, + { + id: data.id as string, + messageId: data.messageId as string, + name: data.name as string, + args: data.args as string, + }, + ]); } else if (t === "done" || t === "error") { streamingRef.current = false; setStreaming(false); + // Der Server hat jede offene Rückfrage bereits selbst entschieden. + setToolConfirms((prev) => + prev.filter((c) => c.messageId !== (data.messageId as string)), + ); } else if (t === "sessions-changed" || t === "session-deleted") { void refreshSessions(); } @@ -199,6 +223,12 @@ export function useChat() { const abort = useCallback(() => { socketRef.current?.send({ type: "abort" }); + setToolConfirms([]); + }, []); + + const decideToolConfirm = useCallback((id: string, decision: ToolDecision) => { + socketRef.current?.send({ type: "tool-confirm-reply", id, decision }); + setToolConfirms((prev) => prev.filter((c) => c.id !== id)); }, []); const newSession = useCallback(async () => { @@ -226,6 +256,8 @@ export function useChat() { messages, streaming, toolEvents, + toolConfirm: toolConfirms[0] ?? null, + decideToolConfirm, sendMessage, abort, newSession,