ideawave 0.0.65 → 0.0.66

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.mjs +119 -29
  2. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import{createRequire as c7}from"node:module";var l7=c7(import.meta.url);function d7(){let Z=globalThis.performance?.now?.()??Date.now();return Math.round(Z*10)/10}function m(Z,X={}){if(typeof process<"u"&&process.env.IDEAWAVE_AGENT_RUNTIME_TRACE==="0")return;let Q=Object.fromEntries(Object.entries(X).filter(([,K])=>K!==void 0));console.info("[agent-runtime-trace]",JSON.stringify({event:Z,epochMs:Date.now(),monotonicMs:d7(),...typeof document>"u"?{}:{visibility:document.visibilityState},...Q}))}var i7=600000,a7=60000,Y6=200,p7=2,A=new Map,q0=null;function s7(Z){Z.then((X)=>X.dispose()).catch(()=>{return})}function N1(Z){for(let X of Z.idleWaiters)X();Z.idleWaiters.clear()}function O0(Z,X){if(A.get(Z)!==X)return;A.delete(Z),N1(X),s7(X.sessionPromise)}function r7(){if(q0!==null)return;q0=setInterval(()=>{let Z=Date.now();for(let[X,Q]of A){if(Q.inUse)continue;if(Z-Q.lastUsed<i7)continue;O0(X,Q)}if(A.size===0&&q0!==null)clearInterval(q0),q0=null},a7),q0.unref?.()}function o7(){if(A.size<Y6)return;let Z=null,X=1/0;for(let[K,Y]of A){if(Y.inUse)continue;if(Y.lastUsed>=X)continue;Z=K,X=Y.lastUsed}if(!Z)return;let Q=A.get(Z);if(!Q)return;O0(Z,Q)}function n7(){let Z=0;while(A.size>Y6){let X=null,Q=null;for(let[K,Y]of A){if(Y.inUse)continue;if(Q&&Y.lastUsed>=Q.lastUsed)continue;X=K,Q=Y}if(!X||!Q)break;O0(X,Q),Z+=1}if(Z>0)m("session_pool.global_idle_trimmed",{evictedSessions:Z,poolEntries:A.size})}function t7(Z){let X=Array.from(A.entries()).filter(([,K])=>K.frontendSessionId===Z&&!K.inUse).sort(([,K],[,Y])=>K.lastUsed-Y.lastUsed),Q=X.length-p7;if(Q<=0)return;for(let[K,Y]of X.slice(0,Q))O0(K,Y);m("session_pool.frontend_idle_trimmed",{frontendSessionId:Z,evictedSessions:Q,poolEntries:A.size})}function h4(Z,X,Q){return`${Z}:${X}:${Q}`}async function D1(Z){let X=A.get(Z.key);if(X){if(X.inUse)return m("session_pool.wait_for_idle",{frontendSessionId:X.frontendSessionId,poolEntries:A.size}),await new Promise((K)=>X.idleWaiters.add(K)),D1(Z);if(X.fingerprint===Z.fingerprint){X.inUse=!0,X.lastUsed=Date.now();try{let K=await X.sessionPromise;if(K.isAlive()){if(X.frontendSessionId)m("session_pool.reuse",{frontendSessionId:X.frontendSessionId,poolEntries:A.size});return K}}catch{}O0(Z.key,X)}else O0(Z.key,X)}let Q=Z.open();if(o7(),A.set(Z.key,{key:Z.key,frontendSessionId:Z.frontendSessionId??null,fingerprint:Z.fingerprint,sessionPromise:Q,lastUsed:Date.now(),inUse:!0,idleWaiters:new Set}),r7(),Z.frontendSessionId)m("session_pool.open",{frontendSessionId:Z.frontendSessionId,poolEntries:A.size});try{return await Q}catch(K){let Y=A.get(Z.key);if(Y?.sessionPromise===Q)O0(Z.key,Y);throw K}}function M4(Z,X=!1){let Q=A.get(Z);if(!Q)return;if(X){O0(Z,Q);return}if(Q.inUse=!1,Q.lastUsed=Date.now(),Q.frontendSessionId)t7(Q.frontendSessionId),m("session_pool.release",{frontendSessionId:Q.frontendSessionId,poolEntries:A.size});if(n7(),A.get(Z)===Q)N1(Q)}async function J6(Z){let X=Array.from(A.entries()).filter(([,Q])=>Q.frontendSessionId===Z);for(let[Q,K]of X)A.delete(Q),N1(K);return await Promise.all(X.map(([,Q])=>Q.sessionPromise.then((K)=>K.dispose()).catch(()=>{return}))),m("session_pool.frontend_evicted",{frontendSessionId:Z,evictedSessions:X.length,poolEntries:A.size}),X.length}async function e7(){let Z=Array.from(A.values());A.clear();for(let X of Z)N1(X);if(q0!==null)clearInterval(q0),q0=null;await Promise.all(Z.map((X)=>X.sessionPromise.then((Q)=>Q.dispose()).catch(()=>{return})))}function N4(Z){let X=Object.entries(Z.configValues??{}),Q=X.length>0?JSON.stringify(Object.fromEntries(X.sort(([K],[Y])=>K.localeCompare(Y)))):"";return[Z.adapterId,Z.configId??"",Z.modelId??"",Q,Z.mcpUrl??"",Z.runFolder??"",Z.toolSurface??"full"].join(" ")}var W6=!1;function Z9(){if(W6)return;W6=!0;let Z=()=>{e7()};process.once("beforeExit",Z),process.once("SIGTERM",Z),process.once("SIGINT",Z)}Z9();import{readFileSync as K9}from"node:fs";import{homedir as X9}from"node:os";import{join as $1}from"node:path";function Q9(){let Z=X9();switch(process.platform){case"win32":return process.env.APPDATA??$1(Z,"AppData","Roaming");case"darwin":return $1(Z,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??$1(Z,".config")}}function V6(){let Z=process.env.IDEAWAVE_MCP_JSON_PATH;if(Z&&Z.trim().length>0)return Z;return $1(Q9(),"ideawave","mcp.json")}var H6=null;function z6(Z){H6=Z}var W9=86400000;function Y9(){let Z;try{Z=K9(V6(),"utf8")}catch{return null}let X;try{X=JSON.parse(Z)}catch{return null}if(typeof X.url!=="string")return null;if(typeof X.startedAt==="string"){let Q=Date.parse(X.startedAt);if(!Number.isNaN(Q)){if(Date.now()-Q>W9)return null}}if(typeof X.pid==="number"&&X.pid>0)try{process.kill(X.pid,0)}catch(Q){if(Q?.code!=="EPERM")return null}return{url:X.url}}function j6(Z,X={}){let Q=[];if(X.userId&&X.userId.trim().length>0)Q.push({name:"X-Ideawave-User-Id",value:X.userId.trim()});if(X.frontendSessionId&&X.frontendSessionId.trim().length>0)Q.push({name:"X-Ideawave-Frontend-Session-Id",value:X.frontendSessionId.trim()});if(X.toolSurface==="read")Q.push({name:"X-Ideawave-Tool-Surface",value:"read"});if(X.imagesSupported)Q.push({name:"X-Ideawave-Images-Supported",value:"1"});if(X.cardId&&X.cardId.trim().length>0)Q.push({name:"X-Ideawave-Card-Id",value:X.cardId.trim()});if(X.boardId&&X.boardId.trim().length>0)Q.push({name:"X-Ideawave-Board-Id",value:X.boardId.trim()});if(X.runFolder&&X.runFolder.trim().length>0)Q.push({name:"X-Ideawave-Run-Folder",value:X.runFolder.trim()});return{type:"http",name:"ideawave-board",url:Z,headers:Q}}function D4(Z={}){let X=H6;if(X)return j6(X.url,Z);let Q=Y9();if(!Q)return null;return j6(Q.url,Z)}var w6="browser-proxy-v2",U6="browser-proxy-v3",F6="browser-proxy-v4",J9=new Set(["hello","frontend_hello","cli_status","browser_status","bridge_probe","bridge_probe_ack","bridge_ping","bridge_pong","tool_metadata","run_turn","cancel_run","tool_result","request_tool_metadata","tool_call","partial_text","tool_activity","run_settled","runtime_rpc","runtime_rpc_result","browser_rpc","browser_rpc_result","warmup_run","warmup_result"]);function g1(Z){try{let X=JSON.parse(Z);if(X&&typeof X==="object"&&typeof X.type==="string"&&J9.has(X.type))return X}catch{}return null}function G1(Z){return JSON.stringify(Z)}import Z1 from"node:fs/promises";import w9 from"node:path";import{z as g}from"zod";var B6=g.object({id:g.string(),name:g.string().nullable().default(null),description:g.string().nullable().default(null)}),x6=g.union([g.string(),g.boolean()]),V9=g.object({value:g.string(),name:g.string(),description:g.string().nullable().default(null),group:g.string().nullable().default(null),groupName:g.string().nullable().default(null)}),L6=g.object({id:g.string(),name:g.string(),category:g.string().nullable().default(null),description:g.string().nullable().default(null),type:g.enum(["select","boolean"]),currentValue:x6.nullable().default(null),options:g.array(V9).default([])}),$4=g.record(g.string(),x6).default({}),j9=g.discriminatedUnion("kind",[g.object({id:g.string(),kind:g.literal("registered"),adapterId:g.enum(["claude-code","opencode","codex","copilot"]),displayName:g.string(),runFolder:g.string().nullable(),defaultModelId:g.string().nullable().default(null),defaultConfigValues:$4,discoveredModels:g.array(B6).default([]),discoveredConfigOptions:g.array(L6).default([]),discoveredAt:g.string().nullable().default(null)}),g.object({id:g.string(),kind:g.literal("custom"),displayName:g.string(),command:g.string(),args:g.array(g.string()),env:g.record(g.string(),g.string()),runFolder:g.string().nullable(),defaultModelId:g.string().nullable().default(null),defaultConfigValues:$4,discoveredModels:g.array(B6).default([]),discoveredConfigOptions:g.array(L6).default([]),discoveredAt:g.string().nullable().default(null)})]),q6=g.object({runtimeConfigId:g.string(),runFolder:g.string().nullable(),modelId:g.string().nullable().default(null),configValues:$4}),E1=g.object({version:g.literal(1),globalDefaultConfigId:g.string().nullable(),runtimes:g.array(j9),boardOverrides:g.record(g.string(),q6).default({}),cardOverrides:g.record(g.string(),q6).default({})});import H9 from"node:os";import m1 from"node:path";function z9(){let Z=H9.homedir();switch(process.platform){case"win32":return process.env.APPDATA??m1.join(Z,"AppData","Roaming");case"darwin":return m1.join(Z,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??m1.join(Z,".config")}}function k1(){let Z=process.env.IDEAWAVE_RUNTIME_CONFIG_PATH;if(Z)return Z;return m1.join(z9(),"ideawave","runtimes.json")}var U9={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},P6=new Map;function F9(Z){return P6.get(Z)??Promise.resolve()}function B9(Z,X){P6.set(Z,X)}async function W0(Z){let X=Z??k1(),Q;try{Q=await Z1.readFile(X,"utf-8")}catch(Y){if(Y.code==="ENOENT")return structuredClone(U9);throw Y}return E1.parse(JSON.parse(Q))}async function j0(Z,X){let Q=X??k1(),K=F9(Q).then(async()=>{let Y=await W0(Q),J=structuredClone(Y),H=await Z(J);return await L9(J,Q),H});return B9(Q,K.catch(()=>{return})),K}async function L9(Z,X){let Q=X??k1(),K=w9.dirname(Q);await Z1.mkdir(K,{recursive:!0});let Y=`${Q}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`,J=JSON.stringify(Z,null,2);await Z1.writeFile(Y,J,"utf-8");try{await Z1.rename(Y,Q)}catch(H){throw await Z1.unlink(Y).catch(()=>{return}),H}}import{spawn as C9}from"node:child_process";import{closeSync as h9,existsSync as v6,mkdirSync as R6,openSync as M9,readFileSync as N9,renameSync as D9,rmSync as C6,statSync as $9,unlinkSync as g9,writeFileSync as G9}from"node:fs";import O6 from"node:os";import m0 from"node:path";var q9=/\.(?:cmd|bat)$/i;function x9(Z){return process.platform==="win32"&&q9.test(Z)}function _1(Z){return x9(Z)?{shell:!0,windowsHide:!0}:{}}import{execFile as v9}from"node:child_process";import{promisify as R9}from"node:util";import{execFile as P9}from"node:child_process";import{promisify as f9}from"node:util";var y9=f9(P9),g4=new Map,f6=5000,O9=/\.(?:cmd|bat|com|exe)$/i;function b9(Z){let X=Z.split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0);if(X.length===0)return null;if(process.platform!=="win32")return X[0]??null;return X.find((Q)=>O9.test(Q))??X[0]??null}async function y6(Z,X=y9){let Q=g4.get(Z);if(Q&&Q.expiresAt>Date.now())return Q.value;let K=process.platform==="win32"?"where":"which";try{let{stdout:Y}=await X(K,[Z],{timeout:2000}),J=b9(Y);return g4.set(Z,{value:J,expiresAt:Date.now()+f6}),J}catch{return g4.set(Z,{value:null,expiresAt:Date.now()+f6}),null}}class X1 extends Error{code;constructor(Z,X){super(Z);this.name="AcpError",this.code=X}}class E0 extends X1{constructor(Z="No ACP runtime configured"){super(Z,"RUNTIME_NOT_CONFIGURED");this.name="RuntimeNotConfiguredError"}}class T extends X1{constructor(Z){super(Z,"RUNTIME_UNREACHABLE");this.name="RuntimeUnreachableError"}}class c0 extends X1{authMethods;constructor(Z,X){super(Z,"AUTH_REQUIRED");this.name="AuthRequiredError",this.authMethods=X}}class U0 extends X1{constructor(Z="ACP session timed out"){super(Z,"SESSION_TIMEOUT");this.name="SessionTimeoutError"}}var YY=R9(v9);function i(Z,...X){return y6(Z,...X)}function K0(Z){let X={};for(let[Q,K]of Object.entries(process.env))if(typeof K==="string")X[Q]=K;return{...X,...Z??{}}}var E4=[{adapterId:"claude-code",runtimeBinary:"claude",packageName:"@agentclientprotocol/claude-agent-acp",version:"0.61.0",warmupArgs:["--cli","--help"]},{adapterId:"codex",runtimeBinary:"codex",packageName:"@agentclientprotocol/codex-acp",version:"1.1.7",warmupArgs:["--version"]}],E9=1800000,S1=new Map;function m4(){if(process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR)return process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR;if(process.platform==="win32"){let Z=process.env.LOCALAPPDATA??m0.join(O6.homedir(),"AppData","Local");return m0.join(Z,"ideawave","acp-bridges")}return m0.join(process.env.XDG_CACHE_HOME??m0.join(O6.homedir(),".cache"),"ideawave","acp-bridges")}function m9(Z){return Z.replace(/^@/,"").replace(/[/\\]/g,"-")}function I1(){return m0.join(m4(),"install-state.json")}function k4(Z){return m0.join(m4(),`${m9(Z.packageName)}@${Z.version}.install.lock`)}function _4(){return process.platform==="win32"?"npx.cmd":"npx"}function S4(Z){return`${Z.packageName}@${Z.version}`}function h6(){let Z=I1();if(!v6(Z))return{};try{return JSON.parse(N9(Z,"utf8"))}catch{return{}}}function G4(Z,X){let Q=m4();R6(Q,{recursive:!0});let K=h6();K.bridges={...K.bridges??{},[Z.adapterId]:X},G9(`${I1()}.tmp`,`${JSON.stringify(K,null,2)}
3
- `),D9(`${I1()}.tmp`,I1())}function M6(Z){return E4.find((X)=>X.packageName===Z)??null}function Y0(Z,X,Q){return{adapterId:Z.adapterId,packageName:Z.packageName,version:Z.version,status:X,...Q?{error:Q}:{}}}function b6(Z,X){return X?.packageName===Z.packageName&&X.version===Z.version}function N6(Z){try{return Date.now()-$9(Z).mtimeMs>E9}catch{return!1}}function k9(Z){let X=k4(Z);if(!v6(X))return!1;if(N6(X))return C6(X,{force:!0}),!1;return!0}function _9(Z){let X=k4(Z);if(R6(m0.dirname(X),{recursive:!0}),N6(X))C6(X,{force:!0});try{let Q=M9(X,"wx");return h9(Q),!0}catch{return!1}}function S9(Z){g9(k4(Z))}function I4(Z){let X=h6().bridges?.[Z.adapterId];if(b6(Z,X)&&X.status==="ready")return Y0(Z,"ready");if(S1.has(Z.adapterId)||k9(Z))return Y0(Z,"installing");if(b6(Z,X)&&X.status==="failed")return Y0(Z,"failed",X.error);return Y0(Z,"missing")}function Q1(Z,X){Z?.onStatusChange?.(X)}function I9(Z,X){let Q=I4(Z);if(Q.status==="ready")return Q1(X,Q),Q;if(Q.status==="installing"){let U=S1.get(Z.adapterId);if(U&&X?.onStatusChange)U.then((q)=>Q1(X,q));return Q1(X,Q),Q}if(!_9(Z))return Y0(Z,"installing");let K=Y0(Z,"installing");G4(Z,K),Q1(X,K);let Y=()=>{},J=new Promise((U)=>{Y=U});S1.set(Z.adapterId,J);let H=!1,w=(U)=>{if(H)return;H=!0;try{S9(Z)}catch{}G4(Z,U),Q1(X,U),S1.delete(Z.adapterId),Y(U)},B;try{let U=_4();B=C9(U,["-y",S4(Z),...Z.warmupArgs],{stdio:"ignore",windowsHide:!0,..._1(U)})}catch(U){let q=Y0(Z,"failed",U instanceof Error?U.message:String(U));return w(q),q}return B.on("error",(U)=>{w(Y0(Z,"failed",U.message))}),B.on("close",(U)=>{if(U===0){w(Y0(Z,"ready"));return}w(Y0(Z,"failed",`npx warmup exited ${U??"null"}`))}),B.unref(),K}function l0(Z){let X=M6(Z);return X?I4(X):null}async function D6(Z){let X=[];for(let Q of E4){if(!await i(Q.runtimeBinary)){X.push(Y0(Q,"not_needed"));continue}X.push(I9(Q,Z))}return X.filter((Q)=>Q.status!=="not_needed")}function T1(Z){let X=M6(Z);if(!X)return null;if(I4(X).status!=="ready")return null;return{command:_4(),args:["-y",S4(X)],env:{}}}function T4(Z,X){if(Z.command!==_4())return!1;let Q=E4.find((K)=>Z.args.includes(S4(K)));if(!Q)return!1;return G4(Q,Y0(Q,"failed",X)),!0}var $6="claude",A4="@agentclientprotocol/claude-agent-acp",g6=["claude-agent-acp","claude-code-acp"],G6="Install Claude Code from https://github.com/anthropics/claude-code",E6={id:"claude-code",displayName:"Claude Code",kind:"registered",supportsImages:!0,resolveSpawnConfig:async()=>{if(!await i($6))throw new T(`Claude Code CLI not found. ${G6}`);let X=T1(A4);if(X)return{command:X.command,args:X.args,env:K0(X.env)};let Q=l0(A4),K=Q?.status==="installing";for(let J of g6){let H=await i(J);if(H&&!K&&Q?.status!=="failed")return{command:H,args:[],env:K0()}}let Y=Q?.status==="failed"?`Claude Code ACP bridge install failed. ${Q.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Claude Code ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new T(Y)},checkReadiness:async()=>{if(!await i($6))return{status:"not_installed",detail:G6};let X=l0(A4);if(X?.status==="ready")return{status:"ready"};if(X?.status==="installing")return{status:"not_running",detail:"Installing Claude Code ACP bridge..."};if(X?.status==="failed")return{status:"not_running",detail:X.error??"Claude Code ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};for(let Q of g6)if(await i(Q))return{status:"ready"};return{status:"not_running",detail:"Installing Claude Code ACP bridge..."}},authHint:"Run `claude login` (or set ANTHROPIC_API_KEY)."};var m6="codex",u4="@agentclientprotocol/codex-acp",k6="codex-acp",_6="Install Codex CLI from https://developers.openai.com/codex/cli",S6={id:"codex",displayName:"Codex",kind:"registered",resolveSpawnConfig:async()=>{if(!await i(m6))throw new T(`Codex CLI not found. ${_6}`);let X=T1(u4);if(X)return{command:X.command,args:X.args,env:K0(X.env)};let Q=l0(u4),K=Q?.status==="installing",Y=await i(k6);if(Y&&!K&&Q?.status!=="failed")return{command:Y,args:[],env:K0()};let J=Q?.status==="failed"?`Codex ACP bridge install failed. ${Q.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Codex ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new T(J)},checkReadiness:async()=>{if(!await i(m6))return{status:"not_installed",detail:_6};let X=l0(u4);if(X?.status==="ready")return{status:"ready"};if(X?.status==="installing")return{status:"not_running",detail:"Installing Codex ACP bridge..."};if(X?.status==="failed")return{status:"not_running",detail:X.error??"Codex ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};if(await i(k6))return{status:"ready"};return{status:"not_running",detail:"Installing Codex ACP bridge..."}},authHint:"Run `codex login` (or set OPENAI_API_KEY)."};var I6="copilot",T6="copilot-acp",A6="npm i -g @github/copilot",u6={id:"copilot",displayName:"GitHub Copilot",kind:"registered",resolveSpawnConfig:async()=>{let Z=await i(I6);if(Z)return{command:Z,args:["--acp"],env:K0()};let X=await i(T6);if(X)return{command:X,args:[],env:K0()};throw new T(`Copilot not installed. Run: ${A6}`)},checkReadiness:async()=>{if(await i(I6))return{status:"ready"};if(await i(T6))return{status:"ready"};return{status:"not_installed",detail:A6}},authHint:"Run `gh auth login` (or `copilot login`)."};import T9 from"node:fs/promises";function A9(Z){return Z.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(Z)}async function c6(Z){if(A9(Z))try{return await T9.access(Z),!0}catch{return!1}return await i(Z)!==null}var l6={id:"custom",displayName:"Custom ACP",kind:"custom",resolveSpawnConfig:async(Z)=>{if(Z.kind!=="custom")throw new T("customAdapter received non-custom entry");if(!await c6(Z.command))throw new T(`custom: command "${Z.command}" not found`);return{command:Z.command,args:Z.args,env:K0(Z.env)}},checkReadiness:async(Z)=>{if(Z.kind!=="custom")return{status:"unknown"};return await c6(Z.command)?{status:"ready"}:{status:"not_installed"}}};var d6="opencode",i6="Install OpenCode from https://opencode.ai",a6={id:"opencode",displayName:"OpenCode",kind:"registered",resolveSpawnConfig:async()=>{let Z=await i(d6);if(!Z)throw new T(`OpenCode not installed. ${i6}`);return{command:Z,args:["acp"],env:K0()}},checkReadiness:async()=>{if(!await i(d6))return{status:"not_installed",detail:i6};return{status:"ready"}},authHint:"Run `opencode auth login <provider>` (or set the provider's API-key env var)."};var p6={"claude-code":E6,opencode:a6,codex:S6,copilot:u6};function F0(Z){if(Z.kind==="custom")return l6;let X=p6[Z.adapterId];if(!X)throw Error(`Unknown registered adapter: ${Z.adapterId}`);return X}function d0(){return Object.values(p6)}var c4=new Map,A1=new Map,u9=30000;function u1(Z,X){let Q=c4.get(Z);if(Q&&Q.expiresAt>Date.now())return Promise.resolve(Q.value);let K=A1.get(Z);if(K)return K;let Y=X().then((J)=>{return c4.set(Z,{value:J,expiresAt:Date.now()+u9}),J}).finally(()=>{A1.delete(Z)});return A1.set(Z,Y),Y}async function s6(Z){let X=await Promise.all(d0().map((J)=>u1(J.id,async()=>({adapterId:J.id,...await J.checkReadiness({id:"__probe__",kind:"registered",adapterId:J.id,displayName:J.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})})))),K=(await W0(Z)).runtimes.filter((J)=>J.kind==="custom"),Y=await Promise.all(K.map((J)=>u1(`custom:${J.id}`,async()=>({adapterId:J.id,...await F0(J).checkReadiness(J)}))));return[...X,...Y]}async function r6(Z,X){let Q=d0().find((J)=>J.id===Z);if(Q)return u1(Q.id,async()=>({adapterId:Q.id,...await Q.checkReadiness({id:"__probe__",kind:"registered",adapterId:Q.id,displayName:Q.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})}));let Y=(await W0(X)).runtimes.find((J)=>J.id===Z);if(!Y||Y.kind!=="custom")return null;return u1(`custom:${Y.id}`,async()=>({adapterId:Y.id,...await F0(Y).checkReadiness(Y)}))}function o6(){c4.clear(),A1.clear()}import{randomBytes as X8,randomUUID as e6}from"node:crypto";import{WebSocket as c1,WebSocketServer as l9}from"ws";function b0(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function c9(Z){try{let X=new URL(Z);if(X.protocol!=="https:"||X.hostname!=="www.google.com"||X.username||X.password||X.pathname!=="/"&&X.pathname!=="/webhp")return null;return"https://www.google.com/search"}catch{return null}}function l4(Z){let X=b0(c9(Z.sourceUrl));return`(() => {
2
+ import{createRequire as l7}from"node:module";var i7=l7(import.meta.url);function d7(){let Z=globalThis.performance?.now?.()??Date.now();return Math.round(Z*10)/10}function m(Z,X={}){if(typeof process<"u"&&process.env.IDEAWAVE_AGENT_RUNTIME_TRACE==="0")return;let Q=Object.fromEntries(Object.entries(X).filter(([,K])=>K!==void 0));console.info("[agent-runtime-trace]",JSON.stringify({event:Z,epochMs:Date.now(),monotonicMs:d7(),...typeof document>"u"?{}:{visibility:document.visibilityState},...Q}))}var a7=600000,p7=60000,J6=200,r7=2,A=new Map,q0=null;function s7(Z){Z.then((X)=>X.dispose()).catch(()=>{return})}function N1(Z){for(let X of Z.idleWaiters)X();Z.idleWaiters.clear()}function O0(Z,X){if(A.get(Z)!==X)return;A.delete(Z),N1(X),s7(X.sessionPromise)}function o7(){if(q0!==null)return;q0=setInterval(()=>{let Z=Date.now();for(let[X,Q]of A){if(Q.inUse)continue;if(Z-Q.lastUsed<a7)continue;O0(X,Q)}if(A.size===0&&q0!==null)clearInterval(q0),q0=null},p7),q0.unref?.()}function n7(){if(A.size<J6)return;let Z=null,X=1/0;for(let[K,J]of A){if(J.inUse)continue;if(J.lastUsed>=X)continue;Z=K,X=J.lastUsed}if(!Z)return;let Q=A.get(Z);if(!Q)return;O0(Z,Q)}function t7(){let Z=0;while(A.size>J6){let X=null,Q=null;for(let[K,J]of A){if(J.inUse)continue;if(Q&&J.lastUsed>=Q.lastUsed)continue;X=K,Q=J}if(!X||!Q)break;O0(X,Q),Z+=1}if(Z>0)m("session_pool.global_idle_trimmed",{evictedSessions:Z,poolEntries:A.size})}function e7(Z){let X=Array.from(A.entries()).filter(([,K])=>K.frontendSessionId===Z&&!K.inUse).sort(([,K],[,J])=>K.lastUsed-J.lastUsed),Q=X.length-r7;if(Q<=0)return;for(let[K,J]of X.slice(0,Q))O0(K,J);m("session_pool.frontend_idle_trimmed",{frontendSessionId:Z,evictedSessions:Q,poolEntries:A.size})}function h4(Z,X,Q){return`${Z}:${X}:${Q}`}async function D1(Z){let X=A.get(Z.key);if(X){if(X.inUse)return m("session_pool.wait_for_idle",{frontendSessionId:X.frontendSessionId,poolEntries:A.size}),await new Promise((K)=>X.idleWaiters.add(K)),D1(Z);if(X.fingerprint===Z.fingerprint){X.inUse=!0,X.lastUsed=Date.now();try{let K=await X.sessionPromise;if(K.isAlive()){if(X.frontendSessionId)m("session_pool.reuse",{frontendSessionId:X.frontendSessionId,poolEntries:A.size});return K}}catch{}O0(Z.key,X)}else O0(Z.key,X)}let Q=Z.open();if(n7(),A.set(Z.key,{key:Z.key,frontendSessionId:Z.frontendSessionId??null,fingerprint:Z.fingerprint,sessionPromise:Q,lastUsed:Date.now(),inUse:!0,idleWaiters:new Set}),o7(),Z.frontendSessionId)m("session_pool.open",{frontendSessionId:Z.frontendSessionId,poolEntries:A.size});try{return await Q}catch(K){let J=A.get(Z.key);if(J?.sessionPromise===Q)O0(Z.key,J);throw K}}function M4(Z,X=!1){let Q=A.get(Z);if(!Q)return;if(X){O0(Z,Q);return}if(Q.inUse=!1,Q.lastUsed=Date.now(),Q.frontendSessionId)e7(Q.frontendSessionId),m("session_pool.release",{frontendSessionId:Q.frontendSessionId,poolEntries:A.size});if(t7(),A.get(Z)===Q)N1(Q)}async function Y6(Z){let X=Array.from(A.entries()).filter(([,Q])=>Q.frontendSessionId===Z);for(let[Q,K]of X)A.delete(Q),N1(K);return await Promise.all(X.map(([,Q])=>Q.sessionPromise.then((K)=>K.dispose()).catch(()=>{return}))),m("session_pool.frontend_evicted",{frontendSessionId:Z,evictedSessions:X.length,poolEntries:A.size}),X.length}async function Z9(){let Z=Array.from(A.values());A.clear();for(let X of Z)N1(X);if(q0!==null)clearInterval(q0),q0=null;await Promise.all(Z.map((X)=>X.sessionPromise.then((Q)=>Q.dispose()).catch(()=>{return})))}function N4(Z){let X=Object.entries(Z.configValues??{}),Q=X.length>0?JSON.stringify(Object.fromEntries(X.sort(([K],[J])=>K.localeCompare(J)))):"";return[Z.adapterId,Z.configId??"",Z.modelId??"",Q,Z.mcpUrl??"",Z.runFolder??"",Z.toolSurface??"full"].join(" ")}var W6=!1;function X9(){if(W6)return;W6=!0;let Z=()=>{Z9()};process.once("beforeExit",Z),process.once("SIGTERM",Z),process.once("SIGINT",Z)}X9();import{readFileSync as W9}from"node:fs";import{homedir as Q9}from"node:os";import{join as g1}from"node:path";function K9(){let Z=Q9();switch(process.platform){case"win32":return process.env.APPDATA??g1(Z,"AppData","Roaming");case"darwin":return g1(Z,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??g1(Z,".config")}}function V6(){let Z=process.env.IDEAWAVE_MCP_JSON_PATH;if(Z&&Z.trim().length>0)return Z;return g1(K9(),"ideawave","mcp.json")}var H6=null;function w6(Z){H6=Z}var J9=86400000;function Y9(){let Z;try{Z=W9(V6(),"utf8")}catch{return null}let X;try{X=JSON.parse(Z)}catch{return null}if(typeof X.url!=="string")return null;if(typeof X.startedAt==="string"){let Q=Date.parse(X.startedAt);if(!Number.isNaN(Q)){if(Date.now()-Q>J9)return null}}if(typeof X.pid==="number"&&X.pid>0)try{process.kill(X.pid,0)}catch(Q){if(Q?.code!=="EPERM")return null}return{url:X.url}}function j6(Z,X={}){let Q=[];if(X.userId&&X.userId.trim().length>0)Q.push({name:"X-Ideawave-User-Id",value:X.userId.trim()});if(X.frontendSessionId&&X.frontendSessionId.trim().length>0)Q.push({name:"X-Ideawave-Frontend-Session-Id",value:X.frontendSessionId.trim()});if(X.toolSurface==="read")Q.push({name:"X-Ideawave-Tool-Surface",value:"read"});if(X.imagesSupported)Q.push({name:"X-Ideawave-Images-Supported",value:"1"});if(X.cardId&&X.cardId.trim().length>0)Q.push({name:"X-Ideawave-Card-Id",value:X.cardId.trim()});if(X.boardId&&X.boardId.trim().length>0)Q.push({name:"X-Ideawave-Board-Id",value:X.boardId.trim()});if(X.runFolder&&X.runFolder.trim().length>0)Q.push({name:"X-Ideawave-Run-Folder",value:X.runFolder.trim()});return{type:"http",name:"ideawave-board",url:Z,headers:Q}}function D4(Z={}){let X=H6;if(X)return j6(X.url,Z);let Q=Y9();if(!Q)return null;return j6(Q.url,Z)}var z6="browser-proxy-v2",U6="browser-proxy-v3",F6="browser-proxy-v4",V9=new Set(["hello","frontend_hello","cli_status","browser_status","bridge_probe","bridge_probe_ack","bridge_ping","bridge_pong","tool_metadata","run_turn","cancel_run","tool_result","request_tool_metadata","tool_call","partial_text","tool_activity","run_settled","runtime_rpc","runtime_rpc_result","browser_rpc","browser_rpc_result","warmup_run","warmup_result"]);function $1(Z){try{let X=JSON.parse(Z);if(X&&typeof X==="object"&&typeof X.type==="string"&&V9.has(X.type))return X}catch{}return null}function G1(Z){return JSON.stringify(Z)}import Z1 from"node:fs/promises";import U9 from"node:path";import{z as $}from"zod";var B6=$.object({id:$.string(),name:$.string().nullable().default(null),description:$.string().nullable().default(null)}),x6=$.union([$.string(),$.boolean()]),j9=$.object({value:$.string(),name:$.string(),description:$.string().nullable().default(null),group:$.string().nullable().default(null),groupName:$.string().nullable().default(null)}),L6=$.object({id:$.string(),name:$.string(),category:$.string().nullable().default(null),description:$.string().nullable().default(null),type:$.enum(["select","boolean"]),currentValue:x6.nullable().default(null),options:$.array(j9).default([])}),g4=$.record($.string(),x6).default({}),H9=$.discriminatedUnion("kind",[$.object({id:$.string(),kind:$.literal("registered"),adapterId:$.enum(["claude-code","opencode","codex","copilot"]),displayName:$.string(),runFolder:$.string().nullable(),defaultModelId:$.string().nullable().default(null),defaultConfigValues:g4,discoveredModels:$.array(B6).default([]),discoveredConfigOptions:$.array(L6).default([]),discoveredAt:$.string().nullable().default(null)}),$.object({id:$.string(),kind:$.literal("custom"),displayName:$.string(),command:$.string(),args:$.array($.string()),env:$.record($.string(),$.string()),runFolder:$.string().nullable(),defaultModelId:$.string().nullable().default(null),defaultConfigValues:g4,discoveredModels:$.array(B6).default([]),discoveredConfigOptions:$.array(L6).default([]),discoveredAt:$.string().nullable().default(null)})]),q6=$.object({runtimeConfigId:$.string(),runFolder:$.string().nullable(),modelId:$.string().nullable().default(null),configValues:g4}),E1=$.object({version:$.literal(1),globalDefaultConfigId:$.string().nullable(),runtimes:$.array(H9),boardOverrides:$.record($.string(),q6).default({}),cardOverrides:$.record($.string(),q6).default({})});import w9 from"node:os";import m1 from"node:path";function z9(){let Z=w9.homedir();switch(process.platform){case"win32":return process.env.APPDATA??m1.join(Z,"AppData","Roaming");case"darwin":return m1.join(Z,"Library","Application Support");default:return process.env.XDG_CONFIG_HOME??m1.join(Z,".config")}}function k1(){let Z=process.env.IDEAWAVE_RUNTIME_CONFIG_PATH;if(Z)return Z;return m1.join(z9(),"ideawave","runtimes.json")}var F9={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},P6=new Map;function B9(Z){return P6.get(Z)??Promise.resolve()}function L9(Z,X){P6.set(Z,X)}async function W0(Z){let X=Z??k1(),Q;try{Q=await Z1.readFile(X,"utf-8")}catch(J){if(J.code==="ENOENT")return structuredClone(F9);throw J}return E1.parse(JSON.parse(Q))}async function j0(Z,X){let Q=X??k1(),K=B9(Q).then(async()=>{let J=await W0(Q),Y=structuredClone(J),j=await Z(Y);return await q9(Y,Q),j});return L9(Q,K.catch(()=>{return})),K}async function q9(Z,X){let Q=X??k1(),K=U9.dirname(Q);await Z1.mkdir(K,{recursive:!0});let J=`${Q}.tmp.${process.pid}.${Math.random().toString(36).slice(2)}`,Y=JSON.stringify(Z,null,2);await Z1.writeFile(J,Y,"utf-8");try{await Z1.rename(J,Q)}catch(j){throw await Z1.unlink(J).catch(()=>{return}),j}}import{spawn as h9}from"node:child_process";import{closeSync as M9,existsSync as v6,mkdirSync as R6,openSync as N9,readFileSync as D9,renameSync as g9,rmSync as C6,statSync as $9,unlinkSync as G9,writeFileSync as E9}from"node:fs";import O6 from"node:os";import m0 from"node:path";var x9=/\.(?:cmd|bat)$/i;function P9(Z){return process.platform==="win32"&&x9.test(Z)}function _1(Z){return P9(Z)?{shell:!0,windowsHide:!0}:{}}import{execFile as R9}from"node:child_process";import{promisify as C9}from"node:util";import{execFile as f9}from"node:child_process";import{promisify as y9}from"node:util";var O9=y9(f9),$4=new Map,f6=5000,b9=/\.(?:cmd|bat|com|exe)$/i;function v9(Z){let X=Z.split(/\r?\n/).map((Q)=>Q.trim()).filter((Q)=>Q.length>0);if(X.length===0)return null;if(process.platform!=="win32")return X[0]??null;return X.find((Q)=>b9.test(Q))??X[0]??null}async function y6(Z,X=O9){let Q=$4.get(Z);if(Q&&Q.expiresAt>Date.now())return Q.value;let K=process.platform==="win32"?"where":"which";try{let{stdout:J}=await X(K,[Z],{timeout:2000}),Y=v9(J);return $4.set(Z,{value:Y,expiresAt:Date.now()+f6}),Y}catch{return $4.set(Z,{value:null,expiresAt:Date.now()+f6}),null}}class X1 extends Error{code;constructor(Z,X){super(Z);this.name="AcpError",this.code=X}}class E0 extends X1{constructor(Z="No ACP runtime configured"){super(Z,"RUNTIME_NOT_CONFIGURED");this.name="RuntimeNotConfiguredError"}}class T extends X1{constructor(Z){super(Z,"RUNTIME_UNREACHABLE");this.name="RuntimeUnreachableError"}}class c0 extends X1{authMethods;constructor(Z,X){super(Z,"AUTH_REQUIRED");this.name="AuthRequiredError",this.authMethods=X}}class U0 extends X1{constructor(Z="ACP session timed out"){super(Z,"SESSION_TIMEOUT");this.name="SessionTimeoutError"}}var YJ=C9(R9);function d(Z,...X){return y6(Z,...X)}function K0(Z){let X={};for(let[Q,K]of Object.entries(process.env))if(typeof K==="string")X[Q]=K;return{...X,...Z??{}}}var E4=[{adapterId:"claude-code",runtimeBinary:"claude",packageName:"@agentclientprotocol/claude-agent-acp",version:"0.61.0",warmupArgs:["--cli","--help"]},{adapterId:"codex",runtimeBinary:"codex",packageName:"@agentclientprotocol/codex-acp",version:"1.1.7",warmupArgs:["--version"]}],m9=1800000,S1=new Map;function m4(){if(process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR)return process.env.IDEAWAVE_ACP_BRIDGE_CACHE_DIR;if(process.platform==="win32"){let Z=process.env.LOCALAPPDATA??m0.join(O6.homedir(),"AppData","Local");return m0.join(Z,"ideawave","acp-bridges")}return m0.join(process.env.XDG_CACHE_HOME??m0.join(O6.homedir(),".cache"),"ideawave","acp-bridges")}function k9(Z){return Z.replace(/^@/,"").replace(/[/\\]/g,"-")}function I1(){return m0.join(m4(),"install-state.json")}function k4(Z){return m0.join(m4(),`${k9(Z.packageName)}@${Z.version}.install.lock`)}function _4(){return process.platform==="win32"?"npx.cmd":"npx"}function S4(Z){return`${Z.packageName}@${Z.version}`}function h6(){let Z=I1();if(!v6(Z))return{};try{return JSON.parse(D9(Z,"utf8"))}catch{return{}}}function G4(Z,X){let Q=m4();R6(Q,{recursive:!0});let K=h6();K.bridges={...K.bridges??{},[Z.adapterId]:X},E9(`${I1()}.tmp`,`${JSON.stringify(K,null,2)}
3
+ `),g9(`${I1()}.tmp`,I1())}function M6(Z){return E4.find((X)=>X.packageName===Z)??null}function J0(Z,X,Q){return{adapterId:Z.adapterId,packageName:Z.packageName,version:Z.version,status:X,...Q?{error:Q}:{}}}function b6(Z,X){return X?.packageName===Z.packageName&&X.version===Z.version}function N6(Z){try{return Date.now()-$9(Z).mtimeMs>m9}catch{return!1}}function _9(Z){let X=k4(Z);if(!v6(X))return!1;if(N6(X))return C6(X,{force:!0}),!1;return!0}function S9(Z){let X=k4(Z);if(R6(m0.dirname(X),{recursive:!0}),N6(X))C6(X,{force:!0});try{let Q=N9(X,"wx");return M9(Q),!0}catch{return!1}}function I9(Z){G9(k4(Z))}function I4(Z){let X=h6().bridges?.[Z.adapterId];if(b6(Z,X)&&X.status==="ready")return J0(Z,"ready");if(S1.has(Z.adapterId)||_9(Z))return J0(Z,"installing");if(b6(Z,X)&&X.status==="failed")return J0(Z,"failed",X.error);return J0(Z,"missing")}function Q1(Z,X){Z?.onStatusChange?.(X)}function T9(Z,X){let Q=I4(Z);if(Q.status==="ready")return Q1(X,Q),Q;if(Q.status==="installing"){let z=S1.get(Z.adapterId);if(z&&X?.onStatusChange)z.then((q)=>Q1(X,q));return Q1(X,Q),Q}if(!S9(Z))return J0(Z,"installing");let K=J0(Z,"installing");G4(Z,K),Q1(X,K);let J=()=>{},Y=new Promise((z)=>{J=z});S1.set(Z.adapterId,Y);let j=!1,U=(z)=>{if(j)return;j=!0;try{I9(Z)}catch{}G4(Z,z),Q1(X,z),S1.delete(Z.adapterId),J(z)},B;try{let z=_4();B=h9(z,["-y",S4(Z),...Z.warmupArgs],{stdio:"ignore",windowsHide:!0,..._1(z)})}catch(z){let q=J0(Z,"failed",z instanceof Error?z.message:String(z));return U(q),q}return B.on("error",(z)=>{U(J0(Z,"failed",z.message))}),B.on("close",(z)=>{if(z===0){U(J0(Z,"ready"));return}U(J0(Z,"failed",`npx warmup exited ${z??"null"}`))}),B.unref(),K}function l0(Z){let X=M6(Z);return X?I4(X):null}async function D6(Z){let X=[];for(let Q of E4){if(!await d(Q.runtimeBinary)){X.push(J0(Q,"not_needed"));continue}X.push(T9(Q,Z))}return X.filter((Q)=>Q.status!=="not_needed")}function T1(Z){let X=M6(Z);if(!X)return null;if(I4(X).status!=="ready")return null;return{command:_4(),args:["-y",S4(X)],env:{}}}function T4(Z,X){if(Z.command!==_4())return!1;let Q=E4.find((K)=>Z.args.includes(S4(K)));if(!Q)return!1;return G4(Q,J0(Q,"failed",X)),!0}var g6="claude",A4="@agentclientprotocol/claude-agent-acp",$6=["claude-agent-acp","claude-code-acp"],G6="Install Claude Code from https://github.com/anthropics/claude-code",E6={id:"claude-code",displayName:"Claude Code",kind:"registered",supportsImages:!0,resolveSpawnConfig:async()=>{if(!await d(g6))throw new T(`Claude Code CLI not found. ${G6}`);let X=T1(A4);if(X)return{command:X.command,args:X.args,env:K0(X.env)};let Q=l0(A4),K=Q?.status==="installing";for(let Y of $6){let j=await d(Y);if(j&&!K&&Q?.status!=="failed")return{command:j,args:[],env:K0()}}let J=Q?.status==="failed"?`Claude Code ACP bridge install failed. ${Q.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Claude Code ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new T(J)},checkReadiness:async()=>{if(!await d(g6))return{status:"not_installed",detail:G6};let X=l0(A4);if(X?.status==="ready")return{status:"ready"};if(X?.status==="installing")return{status:"not_running",detail:"Installing Claude Code ACP bridge..."};if(X?.status==="failed")return{status:"not_running",detail:X.error??"Claude Code ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};for(let Q of $6)if(await d(Q))return{status:"ready"};return{status:"not_running",detail:"Installing Claude Code ACP bridge..."}},authHint:"Run `claude login` (or set ANTHROPIC_API_KEY)."};var m6="codex",u4="@agentclientprotocol/codex-acp",k6="codex-acp",_6="Install Codex CLI from https://developers.openai.com/codex/cli",S6={id:"codex",displayName:"Codex",kind:"registered",resolveSpawnConfig:async()=>{if(!await d(m6))throw new T(`Codex CLI not found. ${_6}`);let X=T1(u4);if(X)return{command:X.command,args:X.args,env:K0(X.env)};let Q=l0(u4),K=Q?.status==="installing",J=await d(k6);if(J&&!K&&Q?.status!=="failed")return{command:J,args:[],env:K0()};let Y=Q?.status==="failed"?`Codex ACP bridge install failed. ${Q.error??"Restart IdeaWave CLI so it can warm the pinned bridge again."}`:"Codex ACP bridge is not ready. Keep IdeaWave CLI running and retry in a moment.";throw new T(Y)},checkReadiness:async()=>{if(!await d(m6))return{status:"not_installed",detail:_6};let X=l0(u4);if(X?.status==="ready")return{status:"ready"};if(X?.status==="installing")return{status:"not_running",detail:"Installing Codex ACP bridge..."};if(X?.status==="failed")return{status:"not_running",detail:X.error??"Codex ACP bridge install failed. Restart IdeaWave CLI so it can warm the pinned bridge again."};if(await d(k6))return{status:"ready"};return{status:"not_running",detail:"Installing Codex ACP bridge..."}},authHint:"Run `codex login` (or set OPENAI_API_KEY)."};var I6="copilot",T6="copilot-acp",A6="npm i -g @github/copilot",u6={id:"copilot",displayName:"GitHub Copilot",kind:"registered",resolveSpawnConfig:async()=>{let Z=await d(I6);if(Z)return{command:Z,args:["--acp"],env:K0()};let X=await d(T6);if(X)return{command:X,args:[],env:K0()};throw new T(`Copilot not installed. Run: ${A6}`)},checkReadiness:async()=>{if(await d(I6))return{status:"ready"};if(await d(T6))return{status:"ready"};return{status:"not_installed",detail:A6}},authHint:"Run `gh auth login` (or `copilot login`)."};import A9 from"node:fs/promises";function u9(Z){return Z.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(Z)}async function c6(Z){if(u9(Z))try{return await A9.access(Z),!0}catch{return!1}return await d(Z)!==null}var l6={id:"custom",displayName:"Custom ACP",kind:"custom",resolveSpawnConfig:async(Z)=>{if(Z.kind!=="custom")throw new T("customAdapter received non-custom entry");if(!await c6(Z.command))throw new T(`custom: command "${Z.command}" not found`);return{command:Z.command,args:Z.args,env:K0(Z.env)}},checkReadiness:async(Z)=>{if(Z.kind!=="custom")return{status:"unknown"};return await c6(Z.command)?{status:"ready"}:{status:"not_installed"}}};var i6="opencode",d6="Install OpenCode from https://opencode.ai",a6={id:"opencode",displayName:"OpenCode",kind:"registered",resolveSpawnConfig:async()=>{let Z=await d(i6);if(!Z)throw new T(`OpenCode not installed. ${d6}`);return{command:Z,args:["acp"],env:K0()}},checkReadiness:async()=>{if(!await d(i6))return{status:"not_installed",detail:d6};return{status:"ready"}},authHint:"Run `opencode auth login <provider>` (or set the provider's API-key env var)."};var p6={"claude-code":E6,opencode:a6,codex:S6,copilot:u6};function F0(Z){if(Z.kind==="custom")return l6;let X=p6[Z.adapterId];if(!X)throw Error(`Unknown registered adapter: ${Z.adapterId}`);return X}function i0(){return Object.values(p6)}var c4=new Map,A1=new Map,c9=30000;function u1(Z,X){let Q=c4.get(Z);if(Q&&Q.expiresAt>Date.now())return Promise.resolve(Q.value);let K=A1.get(Z);if(K)return K;let J=X().then((Y)=>{return c4.set(Z,{value:Y,expiresAt:Date.now()+c9}),Y}).finally(()=>{A1.delete(Z)});return A1.set(Z,J),J}async function r6(Z){let X=await Promise.all(i0().map((Y)=>u1(Y.id,async()=>({adapterId:Y.id,...await Y.checkReadiness({id:"__probe__",kind:"registered",adapterId:Y.id,displayName:Y.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})})))),K=(await W0(Z)).runtimes.filter((Y)=>Y.kind==="custom"),J=await Promise.all(K.map((Y)=>u1(`custom:${Y.id}`,async()=>({adapterId:Y.id,...await F0(Y).checkReadiness(Y)}))));return[...X,...J]}async function s6(Z,X){let Q=i0().find((Y)=>Y.id===Z);if(Q)return u1(Q.id,async()=>({adapterId:Q.id,...await Q.checkReadiness({id:"__probe__",kind:"registered",adapterId:Q.id,displayName:Q.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null})}));let J=(await W0(X)).runtimes.find((Y)=>Y.id===Z);if(!J||J.kind!=="custom")return null;return u1(`custom:${J.id}`,async()=>({adapterId:J.id,...await F0(J).checkReadiness(J)}))}function o6(){c4.clear(),A1.clear()}import{randomBytes as Q3,randomUUID as e6}from"node:crypto";import{WebSocket as c1,WebSocketServer as i9}from"ws";function b0(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function l9(Z){try{let X=new URL(Z);if(X.protocol!=="https:"||X.hostname!=="www.google.com"||X.username||X.password||X.pathname!=="/"&&X.pathname!=="/webhp")return null;return"https://www.google.com/search"}catch{return null}}function l4(Z){let X=b0(l9(Z.sourceUrl));return`(() => {
4
4
  "use strict";
5
5
  let TOKEN = ${b0(Z.token)};
6
6
  let SOURCE_URL = ${b0(Z.sourceUrl)};
@@ -396,7 +396,7 @@ import{createRequire as c7}from"node:module";var l7=c7(import.meta.url);function
396
396
  if (BRIDGE_SCRIPT) BRIDGE_SCRIPT.remove();
397
397
  if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", state, { once: true });
398
398
  else state();
399
- })();`}function n6(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function d4(Z){return`(() => {
399
+ })();`}function n6(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function i4(Z){return`(() => {
400
400
  "use strict";
401
401
  if (window.__browserKitHooked) return;
402
402
  window.__browserKitHooked = true;
@@ -531,6 +531,96 @@ import{createRequire as c7}from"node:module";var l7=c7(import.meta.url);function
531
531
  }
532
532
  } catch {}
533
533
 
534
+ // The POC runs at the top-level localhost site, while IdeaWave embeds the
535
+ // wrapper below a hosted app. Third-party-cookie blocking therefore affects
536
+ // the embedded build even though both versions proxy the page to localhost.
537
+ // Keep client-written upstream cookies in partitioned localhost cookies. The
538
+ // CLI decodes these on the next proxy request and adds them to the session's
539
+ // server-side cookie jar.
540
+ try {
541
+ const cookieDescriptor =
542
+ Object.getOwnPropertyDescriptor(Document.prototype, "cookie") ||
543
+ Object.getOwnPropertyDescriptor(HTMLDocument.prototype, "cookie");
544
+ const nativeCookieGet = cookieDescriptor && cookieDescriptor.get;
545
+ const nativeCookieSet = cookieDescriptor && cookieDescriptor.set;
546
+ const cookiePrefix = "__browser_kit_client_";
547
+ const encodeCookiePart = (value) =>
548
+ btoa(unescape(encodeURIComponent(value)))
549
+ .replace(/\\+/g, "-")
550
+ .replace(/\\//g, "_")
551
+ .replace(/=+$/g, "");
552
+ const originCookiePrefix =
553
+ cookiePrefix + encodeCookiePart(realOrigin()) + ".";
554
+ const nativeCookies = () =>
555
+ nativeCookieGet ? nativeCookieGet.call(document) : "";
556
+
557
+ if (nativeCookieGet && nativeCookieSet) {
558
+ Object.defineProperty(document, "cookie", {
559
+ configurable: true,
560
+ get() {
561
+ return nativeCookies()
562
+ .split(";")
563
+ .map((part) => part.trim())
564
+ .filter((part) => part.startsWith(originCookiePrefix))
565
+ .map((part) => {
566
+ const equals = part.indexOf("=");
567
+ if (equals < 0) return "";
568
+ try {
569
+ const payload = JSON.parse(
570
+ decodeURIComponent(part.slice(equals + 1)),
571
+ );
572
+ return payload && !payload.deleted
573
+ ? payload.name + "=" + payload.value
574
+ : "";
575
+ } catch {
576
+ return "";
577
+ }
578
+ })
579
+ .filter(Boolean)
580
+ .join("; ");
581
+ },
582
+ set(value) {
583
+ const parts = String(value).split(";");
584
+ const nameValue = parts.shift() || "";
585
+ const equals = nameValue.indexOf("=");
586
+ if (equals < 1) return;
587
+ const name = nameValue.slice(0, equals).trim();
588
+ const cookieValue = nameValue.slice(equals + 1).trim();
589
+ const attributes = new Map();
590
+ for (const part of parts) {
591
+ const index = part.indexOf("=");
592
+ const key = (index < 0 ? part : part.slice(0, index))
593
+ .trim()
594
+ .toLowerCase();
595
+ attributes.set(
596
+ key,
597
+ index < 0 ? "" : part.slice(index + 1).trim(),
598
+ );
599
+ }
600
+ const maxAge = Number(attributes.get("max-age"));
601
+ const expiresAt = Date.parse(attributes.get("expires") || "");
602
+ const deleted =
603
+ (Number.isFinite(maxAge) && maxAge <= 0) ||
604
+ (Number.isFinite(expiresAt) && expiresAt <= Date.now());
605
+ const wrapperName = originCookiePrefix + encodeCookiePart(name);
606
+ const payload = encodeURIComponent(
607
+ JSON.stringify({ name, value: cookieValue, deleted }),
608
+ );
609
+ const lifetime = deleted ? 60 : 60 * 60 * 24 * 30;
610
+ nativeCookieSet.call(
611
+ document,
612
+ wrapperName +
613
+ "=" +
614
+ payload +
615
+ "; Path=/; Max-Age=" +
616
+ lifetime +
617
+ "; SameSite=None; Secure; Partitioned",
618
+ );
619
+ },
620
+ });
621
+ }
622
+ } catch {}
623
+
534
624
  const namespaceStorage = (storage) => {
535
625
  if (!storage) return storage;
536
626
  const prefix = "__browser_kit_" + realOrigin() + "::";
@@ -654,7 +744,7 @@ import{createRequire as c7}from"node:module";var l7=c7(import.meta.url);function
654
744
  };
655
745
  addEventListener("popstate", notifyNavigation);
656
746
  addEventListener("hashchange", notifyNavigation);
657
- })();`}var t6=new Set(["content-security-policy","content-security-policy-report-only","x-frame-options","cross-origin-opener-policy","cross-origin-embedder-policy","cross-origin-resource-policy","content-encoding","content-length","transfer-encoding","set-cookie","strict-transport-security","report-to","nel","permissions-policy","x-content-type-options"]);function i0(Z,X,Q){if(!Z)return Z;let K=Z.trim();if(K.startsWith(`${Q}/browser-kit/proxy/`)||K.startsWith("/browser-kit/proxy/")||/^(data|blob|mailto|tel|javascript):/i.test(K)||K.startsWith("#"))return K;try{let Y=new URL(K,X);if(Y.protocol!=="http:"&&Y.protocol!=="https:")return K;return`${Q}/browser-kit/proxy/${Y.href}`}catch{return K}}function i4(Z){let X=(Q)=>{let K=Q.trim().replace(/^["']|["']$/g,"");if(!K||K.startsWith("data:"))return Q;return i0(K,Z.baseUrl,Z.proxyOrigin)};return Z.css.replace(/url\(\s*([^)]+?)\s*\)/gi,(Q,K)=>`url(${X(K)})`).replace(/@import\s+(["'])([^"']+)\1/gi,(Q,K,Y)=>`@import ${K}${X(Y)}${K}`)}function a4(Z){let X=new URL(Z.sourceUrl).origin,Q=Z.html.replace(/<meta[^>]+http-equiv\s*=\s*["']?content-security-policy["']?[^>]*>/gi,"").replace(/\sintegrity\s*=\s*(["'])[^"']*\1/gi,"").replace(/(\b(?:href|src|action|poster)\s*=\s*["'])(https?:)\/\//gi,"$1/browser-kit/proxy/$2//").replace(/(\b(?:href|src|action|poster)\s*=\s*["'])\/\//gi,"$1/browser-kit/proxy/https://").replace(/(\b(?:href|action|poster)\s*=\s*["'])\/(?!\/|browser-kit\/proxy\/)/gi,`$1/browser-kit/proxy/${X}/`).replace(/(\bimport\s*\(\s*["'])\/(?!\/|browser-kit\/proxy\/)([^"']*)(["']\s*\))/g,`$1/browser-kit/proxy/${X}/$2$3`).replace(/(\bimport\s*\(\s*\\["'])\/(?!\/|browser-kit\/proxy\/)([^"'\\]*)(\\["']\s*\))/g,`$1/browser-kit/proxy/${X}/$2$3`);Q=Q.replace(/(<meta[^>]+http-equiv\s*=\s*["']?refresh["']?[^>]*content\s*=\s*["'][^"']*?url\s*=\s*)([^"'\s>]+)/gi,(H,w,B)=>w+i0(B,Z.sourceUrl,Z.proxyOrigin)),Q=Q.replace(/\bsrcset\s*=\s*["']([^"']*)["']/gi,(H,w)=>{return`srcset="${w.split(",").map((U)=>{let q=U.trim().split(/\s+/),h=q.shift();if(!h)return"";return[i0(h,Z.sourceUrl,Z.proxyOrigin),...q].join(" ")}).filter(Boolean).join(", ")}"`});let K=d4({sourceUrl:Z.sourceUrl,proxyOrigin:Z.proxyOrigin}),Y=l4({token:Z.bridgeToken,sourceUrl:Z.sourceUrl,revision:Z.revision,navigateUrlPrefix:Z.navigateUrlPrefix,parentOrigin:Z.proxyOrigin}),J=`<base href="${Z.proxyOrigin}/browser-kit/proxy/${Z.sourceUrl}"><script data-browser-kit-runtime>${K}</script><script data-ideawave-browser-bridge>${Y}</script>`;if(/<head[^>]*>/i.test(Q))return Q.replace(/<head[^>]*>/i,(H)=>H+J);if(/<html[^>]*>/i.test(Q))return Q.replace(/<html[^>]*>/i,(H)=>H+J);return J+Q}function p4(){return`
747
+ })();`}var t6=new Set(["content-security-policy","content-security-policy-report-only","x-frame-options","cross-origin-opener-policy","cross-origin-embedder-policy","cross-origin-resource-policy","content-encoding","content-length","transfer-encoding","set-cookie","strict-transport-security","report-to","nel","permissions-policy","x-content-type-options"]);function d0(Z,X,Q){if(!Z)return Z;let K=Z.trim();if(K.startsWith(`${Q}/browser-kit/proxy/`)||K.startsWith("/browser-kit/proxy/")||/^(data|blob|mailto|tel|javascript):/i.test(K)||K.startsWith("#"))return K;try{let J=new URL(K,X);if(J.protocol!=="http:"&&J.protocol!=="https:")return K;return`${Q}/browser-kit/proxy/${J.href}`}catch{return K}}function d4(Z){let X=(Q)=>{let K=Q.trim().replace(/^["']|["']$/g,"");if(!K||K.startsWith("data:"))return Q;return d0(K,Z.baseUrl,Z.proxyOrigin)};return Z.css.replace(/url\(\s*([^)]+?)\s*\)/gi,(Q,K)=>`url(${X(K)})`).replace(/@import\s+(["'])([^"']+)\1/gi,(Q,K,J)=>`@import ${K}${X(J)}${K}`)}function a4(Z){let X=new URL(Z.sourceUrl).origin,Q=Z.html.replace(/<meta[^>]+http-equiv\s*=\s*["']?content-security-policy["']?[^>]*>/gi,"").replace(/\sintegrity\s*=\s*(["'])[^"']*\1/gi,"").replace(/(\b(?:href|src|action|poster)\s*=\s*["'])(https?:)\/\//gi,"$1/browser-kit/proxy/$2//").replace(/(\b(?:href|src|action|poster)\s*=\s*["'])\/\//gi,"$1/browser-kit/proxy/https://").replace(/(\b(?:href|action|poster)\s*=\s*["'])\/(?!\/|browser-kit\/proxy\/)/gi,`$1/browser-kit/proxy/${X}/`).replace(/(\bimport\s*\(\s*["'])\/(?!\/|browser-kit\/proxy\/)([^"']*)(["']\s*\))/g,`$1/browser-kit/proxy/${X}/$2$3`).replace(/(\bimport\s*\(\s*\\["'])\/(?!\/|browser-kit\/proxy\/)([^"'\\]*)(\\["']\s*\))/g,`$1/browser-kit/proxy/${X}/$2$3`);Q=Q.replace(/(<meta[^>]+http-equiv\s*=\s*["']?refresh["']?[^>]*content\s*=\s*["'][^"']*?url\s*=\s*)([^"'\s>]+)/gi,(j,U,B)=>U+d0(B,Z.sourceUrl,Z.proxyOrigin)),Q=Q.replace(/\bsrcset\s*=\s*["']([^"']*)["']/gi,(j,U)=>{return`srcset="${U.split(",").map((z)=>{let q=z.trim().split(/\s+/),R=q.shift();if(!R)return"";return[d0(R,Z.sourceUrl,Z.proxyOrigin),...q].join(" ")}).filter(Boolean).join(", ")}"`});let K=i4({sourceUrl:Z.sourceUrl,proxyOrigin:Z.proxyOrigin}),J=l4({token:Z.bridgeToken,sourceUrl:Z.sourceUrl,revision:Z.revision,navigateUrlPrefix:Z.navigateUrlPrefix,parentOrigin:Z.proxyOrigin}),Y=`<base href="${Z.proxyOrigin}/browser-kit/proxy/${Z.sourceUrl}"><script data-browser-kit-runtime>${K}</script><script data-ideawave-browser-bridge>${J}</script>`;if(/<head[^>]*>/i.test(Q))return Q.replace(/<head[^>]*>/i,(j)=>j+Y);if(/<html[^>]*>/i.test(Q))return Q.replace(/<html[^>]*>/i,(j)=>j+Y);return Y+Q}function p4(){return`
658
748
  self.addEventListener("install", (event) => event.waitUntil(self.skipWaiting()));
659
749
  self.addEventListener("activate", (event) => event.waitUntil(self.clients.claim()));
660
750
 
@@ -742,7 +832,7 @@ self.addEventListener("fetch", (event) => {
742
832
  return proxy(event, url.href);
743
833
  })());
744
834
  });
745
- `}var d9=1800000,K1="/browser-kit/proxy/";function i9(Z){let X=Z??"";return X.startsWith("[")?X.slice(1,X.indexOf("]")):X.split(":")[0]??""}function Z8(Z){let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")throw Error("Only HTTP(S) browser URLs are supported");return X.href}function a9(Z){let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")throw Error("Browser frontend origin is invalid");return X.origin}function s4(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function p9(){return X8(12).toString("hex")}function s9(Z){let X=new Headers;for(let[Q,K]of Object.entries(Z.headers))if(typeof K==="string")X.set(Q,K);else if(Array.isArray(K))X.set(Q,K.join(", "));return X}async function r9(Z){if(Z.method==="GET"||Z.method==="HEAD")return;let X=[];for await(let Q of Z)X.push(Buffer.isBuffer(Q)?Q:Buffer.from(Q));return X.length>0?Buffer.concat(X):void 0}function o9(Z){let X={};return Z.forEach((Q,K)=>{X[K]=Q}),X}function n9(Z,X){return`<!doctype html>
835
+ `}var d9=1800000,K1="/browser-kit/proxy/",Z3="__browser_kit_client_";function a9(Z){let X=Z??"";return X.startsWith("[")?X.slice(1,X.indexOf("]")):X.split(":")[0]??""}function X3(Z){let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")throw Error("Only HTTP(S) browser URLs are supported");return X.href}function p9(Z){let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")throw Error("Browser frontend origin is invalid");return X.origin}function r4(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function r9(){return Q3(12).toString("hex")}function s9(Z){let X=new Headers;for(let[Q,K]of Object.entries(Z.headers))if(typeof K==="string")X.set(Q,K);else if(Array.isArray(K))X.set(Q,K.join(", "));return X}async function o9(Z){if(Z.method==="GET"||Z.method==="HEAD")return;let X=[];for await(let Q of Z)X.push(Buffer.isBuffer(Q)?Q:Buffer.from(Q));return X.length>0?Buffer.concat(X):void 0}function n9(Z){let X={};return Z.forEach((Q,K)=>{X[K]=Q}),X}function t9(Z,X){return`<!doctype html>
746
836
  <html>
747
837
  <head>
748
838
  <meta charset="utf-8">
@@ -760,9 +850,9 @@ html,body,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden;backgro
760
850
  <div id="status" hidden></div>
761
851
  <script>
762
852
  (() => {
763
- const TOKEN = ${s4(Z.bridgeToken)};
764
- const FRONTEND_ORIGIN = ${s4(Z.frontendOrigin)};
765
- const INITIAL_URL = ${s4(X)};
853
+ const TOKEN = ${r4(Z.bridgeToken)};
854
+ const FRONTEND_ORIGIN = ${r4(Z.frontendOrigin)};
855
+ const INITIAL_URL = ${r4(X)};
766
856
  const frame = document.getElementById("view");
767
857
  const status = document.getElementById("status");
768
858
  const showError = (error) => {
@@ -788,49 +878,49 @@ html,body,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden;backgro
788
878
  })();
789
879
  </script>
790
880
  </body>
791
- </html>`}class l1{sessions=new Map;cookies=new Map;socketServer=new l9({noServer:!0});sweepTimer;port=null;constructor(){this.sweepTimer=setInterval(()=>this.sweep(),60000),this.sweepTimer.unref?.()}setPort(Z){this.port=Z}wrapperOrigin(Z){if(!this.port)throw Error("Browser kit is not ready");return`http://${Z.wrapperHost}.localhost:${this.port}`}result(Z){let X=this.wrapperOrigin(Z);return{proxySessionId:Z.id,wrapperUrl:`${X}/browser-kit/wrapper?session=${encodeURIComponent(Z.id)}`,bridgeToken:Z.bridgeToken,navigateUrlPrefix:`${X}/browser-kit/navigate?session=${encodeURIComponent(Z.id)}&url=`}}async handleRpc(Z,X,Q){if(Q.method==="open_proxy_session"){let K=Q.params;if(typeof K.browserNodeId!=="string"||typeof K.url!=="string")throw Error("Browser proxy session input is invalid");let Y=Z8(K.url),J=a9(X),H=[...this.sessions.values()].find((B)=>B.frontendSessionId===Z&&B.browserNodeId===K.browserNodeId);if(H){if(H.frontendOrigin!==J)throw Error("Browser proxy session origin changed unexpectedly");return H.currentUrl=Y,H.lastUsedAt=Date.now(),this.result(H)}let w={id:e6(),frontendSessionId:Z,frontendOrigin:J,browserNodeId:K.browserNodeId,wrapperHost:`iw-browser-${p9()}`,bridgeToken:X8(24).toString("base64url"),currentUrl:Y,lastUsedAt:Date.now()};return this.sessions.set(w.id,w),this.result(w)}if(Q.method==="close_proxy_session"){let K=Q.params;if(typeof K.proxySessionId!=="string")throw Error("Browser proxy session input is invalid");let Y=this.sessions.get(K.proxySessionId);if(Y&&Y.frontendSessionId!==Z)throw Error("Browser proxy session belongs to another frontend session");if(Y)this.sessions.delete(Y.id);return{closed:!0}}if(Q.method==="build_snapshot")throw Error("Browser-kit snapshots are not available yet");throw Error("Unsupported browser-kit RPC operation")}closeFrontendSession(Z){for(let X of this.sessions.values())if(X.frontendSessionId===Z)this.sessions.delete(X.id)}async close(){clearInterval(this.sweepTimer),this.sessions.clear(),this.socketServer.close()}sweep(){let Z=Date.now()-d9;for(let X of this.sessions.values())if(X.lastUsedAt<Z)this.sessions.delete(X.id)}sessionForRequest(Z){let X=i9(Z.headers.host);return[...this.sessions.values()].find((Q)=>X===`${Q.wrapperHost}.localhost`)??null}storeCookies(Z,X){for(let Q of Z){let[K="",...Y]=Q.split(";"),J=K.indexOf("=");if(J<0)continue;let H=K.slice(0,J).trim(),w=K.slice(J+1).trim(),B=X.toLowerCase();for(let q of Y){let h=q.indexOf("="),M=(h<0?q:q.slice(0,h)).trim().toLowerCase(),O=h<0?"":q.slice(h+1).trim();if(M==="domain"&&O)B=O.replace(/^\./,"").toLowerCase()}if(!this.cookies.has(B))this.cookies.set(B,new Map);let U=this.cookies.get(B);if(!U)continue;if(w===""||/(^|;)\s*max-age=0/i.test(Q))U.delete(H);else U.set(H,w)}}cookieHeader(Z){let X=Z.toLowerCase(),Q=[];for(let[K,Y]of this.cookies)if(X===K||X.endsWith(`.${K}`))for(let[J,H]of Y)Q.push(`${J}=${H}`);return Q.join("; ")}async proxy(Z,X,Q,K){let Y=K.pathname.slice(K1.length)+K.search+K.hash;if(!/^https?:\/\//i.test(Y)){X.writeHead(400,{"content-type":"text/plain"}),X.end(`Bad proxy target: ${Y}`);return}let J=await r9(Z),H=Z.method??"GET",w=Y,B=J,U=null;for(let O=0;;O+=1){let f=new URL(w),C=s9(Z);for(let _ of["host","connection","origin","referer","cookie","accept-encoding"])C.delete(_);let N=this.cookieHeader(f.hostname);if(N)C.set("cookie",N);C.set("referer",`${f.origin}/`);let b={method:H,headers:C,redirect:"manual",...H!=="GET"&&H!=="HEAD"&&B?{body:B,duplex:"half"}:{}};try{U=await fetch(w,b)}catch(_){X.writeHead(502,{"content-type":"text/plain"}),X.end(`Proxy fetch error for ${w}: ${_ instanceof Error?_.message:String(_)}`);return}let $=U.headers.getSetCookie,v=typeof $==="function"?$.call(U.headers):[];if(v.length>0)this.storeCookies(v,f.hostname);let G=U.headers.get("location");if(U.status>=300&&U.status<400&&G&&O<15){if(w=new URL(G,w).href,U.status===303||H==="POST"&&(U.status===301||U.status===302))H="GET",B=void 0;continue}break}if(!U)throw Error("Browser proxy received no response");Q.lastUsedAt=Date.now();let q=new Headers;U.headers.forEach((O,f)=>{if(!t6.has(f.toLowerCase()))q.set(f,O)}),q.set("access-control-allow-origin","*"),q.set("access-control-allow-credentials","true");for(let O of["location","content-location"]){let f=q.get(O);if(f)q.set(O,i0(f,w,this.wrapperOrigin(Q)))}let h=(U.headers.get("content-type")??"").toLowerCase(),M;if(h.includes("text/html")){let O=e6();M=a4({html:await U.text(),sourceUrl:w,proxyOrigin:this.wrapperOrigin(Q),bridgeToken:Q.bridgeToken,revision:O,navigateUrlPrefix:`${this.wrapperOrigin(Q)}/browser-kit/navigate?session=${encodeURIComponent(Q.id)}&url=`}),q.delete("etag"),q.delete("last-modified"),q.set("cache-control","no-store"),q.append("set-cookie",`__browser_kit_origin=${encodeURIComponent(new URL(w).origin)}; Path=/; SameSite=Lax`)}else if(h.includes("text/css"))M=i4({css:await U.text(),baseUrl:w,proxyOrigin:this.wrapperOrigin(Q)}),q.delete("etag"),q.delete("last-modified"),q.set("cache-control","no-store");else M=Buffer.from(await U.arrayBuffer());if(X.writeHead(U.status,o9(q)),Z.method==="HEAD")X.end();else X.end(M)}async handleHttpRequest(Z,X){let Q=new URL(Z.url??"/","http://localhost");if(!Q.pathname.startsWith("/browser-kit/"))return!1;let K=this.sessionForRequest(Z);if(!K)return X.writeHead(404,{"content-type":"text/plain"}),X.end("Browser-kit session not found"),!0;if(K.lastUsedAt=Date.now(),Q.pathname==="/browser-kit/wrapper"){if(Q.searchParams.get("session")!==K.id||Z.method!=="GET"&&Z.method!=="HEAD")return X.writeHead(403),X.end(),!0;let Y=n9(K,K.currentUrl);if(X.writeHead(200,{"content-type":"text/html; charset=utf-8","cache-control":"no-store","content-security-policy":`default-src 'self'; script-src 'self' 'unsafe-inline'; worker-src 'self'; style-src 'unsafe-inline'; frame-src 'self'; connect-src 'self'; frame-ancestors ${K.frontendOrigin}`,"access-control-allow-origin":K.frontendOrigin,vary:"Origin"}),Z.method==="HEAD")X.end();else X.end(Y);return!0}if(Q.pathname==="/browser-kit/sw.js")return X.writeHead(200,{"content-type":"text/javascript; charset=utf-8","service-worker-allowed":"/","cache-control":"no-store"}),X.end(p4()),!0;if(Q.pathname==="/browser-kit/navigate"){let Y=Q.searchParams.get("url");if(!Y)return X.writeHead(400),X.end(),!0;return K.currentUrl=Z8(Y),X.writeHead(307,{location:`${this.wrapperOrigin(K)}${K1}${K.currentUrl}`,"cache-control":"no-store"}),X.end(),!0}if(Q.pathname.startsWith(K1))return await this.proxy(Z,X,K,Q),!0;return X.writeHead(404),X.end(),!0}handleUpgrade(Z,X,Q){let K=new URL(Z.url??"/","http://localhost");if(!K.pathname.startsWith(K1))return!1;if(!this.sessionForRequest(Z))return X.destroy(),!0;let J=K.pathname.slice(K1.length)+K.search+K.hash;if(!/^wss?:\/\//i.test(J))return X.destroy(),!0;return this.socketServer.handleUpgrade(Z,X,Q,(H)=>{let w;try{let U=new URL(J),q={origin:U.origin},h=this.cookieHeader(U.hostname);if(h)q.cookie=h;w=new c1(J,{headers:q})}catch{H.close(1011,"bad target");return}let B=[];w.binaryType="arraybuffer",w.on("open",()=>{for(let U of B)w.send(U);B.length=0}),H.on("message",(U)=>{if(w.readyState===c1.OPEN)w.send(U);else B.push(U)}),w.on("message",(U)=>{if(H.readyState===c1.OPEN)H.send(U)}),H.on("close",()=>w.close()),H.on("error",()=>w.close()),w.on("close",(U,q)=>{if(H.readyState===c1.OPEN)H.close(U>=1000&&U<=4999?U:1000,q.toString())}),w.on("error",()=>H.close(1011,"upstream error"))}),!0}}function t9(Z){if(!Z)return null;let X=Z.indexOf("/");if(X<=0)return null;return Z.slice(0,X)}function d1(Z){let X=[...Z.models];if(Z.adapterId!=="opencode"||X.length===0)return X;let Q=t9(Z.currentModelId)??(X.some((Y)=>Y.id.startsWith("opencode/"))?"opencode":null);if(!Q)return X;let K=X.filter((Y)=>Y.id===Z.currentModelId||Y.id.startsWith(`${Q}/`));return K.length>0?K:X}import{Readable as BZ,Writable as LZ}from"node:stream";import{ClientSideConnection as U8,ndJsonStream as F8}from"@agentclientprotocol/sdk";import v0 from"node:fs/promises";import Q0 from"node:path";class Y1 extends Error{constructor(Z){super(Z);this.name="PathTraversalError"}}class o4 extends Error{constructor(Z){super(Z);this.name="HiddenPathError"}}class n4 extends Error{constructor(Z){super(Z);this.name="RunFolderFileTooLargeError"}}class W1 extends Error{constructor(Z){super(Z);this.name="RunFolderBinaryFileError"}}var e9=new Set([".bzr",".cache",".claude",".config",".env",".git",".hg",".idea",".obsidian",".svn",".vscode","node_modules"]),Q8=1e6,ZZ=4096,XZ=new TextDecoder("utf-8",{fatal:!0});function QZ(Z){return Z.split(/[\\/]+/).filter((X)=>X.length>0)}function i1(Z){if(Q0.isAbsolute(Z))throw new Y1("Absolute paths are not allowed");for(let X of QZ(Z)){if(X===".")continue;if(X==="..")throw new Y1("Parent-directory traversal is not allowed");if(X.startsWith(".")||e9.has(X))throw new o4(`Path segment "${X}" is hidden or configuration data`)}}function KZ(Z){i1(Z);let X=Q0.normalize(Z||".");return X==="."?"":X}function WZ(Z,X,Q){let K=Q0.relative(Z,X);if(K===".."||K.startsWith(`..${Q0.sep}`)||Q0.isAbsolute(K))throw new Y1(`Path "${Q}" resolves outside the run folder`);if(K.length>0)i1(K);return K}async function r4(Z,X){i1(X);let Q=Q0.resolve(Z,X||"."),K;try{K=await v0.realpath(Q)}catch(Y){if(Y.code!=="ENOENT")throw Y;let J=Q0.dirname(Q),H=[Q0.basename(Q)];while(J!==Z&&J!==Q0.dirname(J))try{J=await v0.realpath(J);break}catch(w){if(w.code!=="ENOENT")throw w;H.unshift(Q0.basename(J)),J=Q0.dirname(J)}K=Q0.join(J,...H)}return WZ(Z,K,X),K}async function YZ(Z,X){let Q=await v0.realpath(Z);return r4(Q,X)}function JZ(Z){let X=Z.subarray(0,Math.min(Z.length,ZZ));if(X.length===0)return!1;let Q=0;for(let K of X){if(K===0)return!0;let Y=K===9||K===10||K===12||K===13;if(K<32&&!Y)Q+=1}return Q/X.length>0.3}async function a1(Z,X){let Q=await YZ(Z,X),K=await v0.stat(Q);if(!K.isFile())throw new W1(`Path "${X}" is not a text file`);if(K.size>Q8)throw new n4(`File "${X}" is too large to read (${K.size} bytes, max ${Q8} bytes)`);let Y=await v0.readFile(Q);if(JZ(Y))throw new W1(`File "${X}" appears to be binary, not text`);try{return XZ.decode(Y)}catch{throw new W1(`File "${X}" is not valid UTF-8 text`)}}function VZ(Z){if(Z.isDirectory())return"directory";if(Z.isFile())return"file";if(Z.isSymbolicLink())return"symlink";return"other"}function K8(Z){return Z.split(Q0.sep).join("/")}async function W8(Z,X=""){let Q=await v0.realpath(Z),K=KZ(X),Y=await r4(Q,K),J=await v0.readdir(Y,{withFileTypes:!0}),H=[];for(let w of J){let B=K?Q0.join(K,w.name):w.name;try{i1(B);let U=await r4(Q,B),q=await v0.stat(U);H.push({name:w.name,path:K8(B),type:VZ(w),size:w.isFile()?q.size:null})}catch{}}return H.sort((w,B)=>{if(w.type==="directory"&&B.type!=="directory")return-1;if(w.type!=="directory"&&B.type==="directory")return 1;return w.name.localeCompare(B.name)}),{path:K8(K),absolutePath:Y,entries:H}}var t4={fs:{readTextFile:!0,writeTextFile:!1},terminal:!1};function Y8(Z){return{readTextFile:async(X)=>{return{content:await a1(Z,X.path)}}}}import{spawn as jZ}from"node:child_process";function e4(Z){let X=jZ(Z.command,Z.args,{cwd:Z.cwd,env:Z.env,stdio:["pipe","pipe","pipe"],..._1(Z.command)});if(!X.stdin||!X.stdout||!X.stderr)throw Error("Failed to allocate stdio streams for ACP subprocess");let{stdin:Q,stdout:K,stderr:Y}=X,J=4096,H=[],w=0;Y.on("data",(N)=>{H.push(N),w+=N.length;while(w>J*2&&H.length>1){let b=H.shift();if(b)w-=b.length}});let B=()=>{let N=Buffer.concat(H).toString("utf8");return N.length>J?N.slice(-J):N},U=!1,q=!1,h,M,O=new Promise((N)=>{h=N}),f=new Promise((N)=>{M=N}),C=(N)=>{if(q)return;if(q=!0,h(N),!U)M(N)};return X.on("exit",(N,b)=>{C({code:N,signal:b,stderr:B()})}),X.on("error",(N)=>{let b=B(),$=N?.message??String(N);C({code:null,signal:null,stderr:b?`${$}
792
- ${b}`:$})}),{stdin:Q,stdout:K,stderr:Y,kill:(N="SIGTERM")=>{if(U)return;U=!0;try{X.kill(N)}catch{}},waitForExit:O,processCrashed:f}}var HZ=["mcp_ideawave_board_","ideawave_board_","ideawave-board_","ideawave-board.","ideawave.board."];function zZ(Z){let X=Z.toLowerCase();for(let Q of HZ)if(X.startsWith(Q))return Z.slice(Q.length);if(/^mcp[-_.]/i.test(Z))return Z.slice(4);return Z}function p1(Z){return zZ(Z.trim())}function Z2(Z){let X=p1(Z);if(!X)return"Tool";if(!/[-_.]/.test(X))return X.charAt(0).toUpperCase()+X.slice(1);let Q=X.replace(/[-_.]+/g," ").replace(/\s+/g," ").trim();if(!Q)return"Tool";return Q.charAt(0).toUpperCase()+Q.slice(1)}function X2(Z){let X=Z?.toLowerCase();if(X==="completed"||X==="complete"||X==="done"||X==="success"||X==="succeeded")return"completed";if(X==="failed"||X==="error"||X==="errored")return"failed";return"running"}function Q2(Z){if(typeof Z!=="string")return null;let X=Z.trim();return X?X:null}function J8(Z){if(typeof Z!=="string")return"Tool";let X=Z.trim();return X?X:"Tool"}function wZ(Z,X){if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let Q=Z;for(let K of X){let Y=Q[K];if(typeof Y==="string"&&Y.trim())return Y.trim()}return null}function K2(Z,X){let Q=Z.trim().toLowerCase();if(Q==="skill"||Q==="workflow"||Q==="tool"||Q==="invalid"){let K=wZ(X,["skillName","workflowName","toolName","name","title"]);if(K){let Y=Q==="skill"?" skill":Q==="workflow"?" workflow":"";return`${Z2(K)}${Y}`}}if(Q==="invalid")return"Tool call";return Z2(Z)}var UZ=33,V8=1600;function k0(Z){if(Z.length<=V8)return Z;return`${Z.slice(0,V8-22)}
793
- ... truncated`}function r1(Z){let X=Z.replace(/\r\n?/g,`
794
- `),Q=X.trim();if(Q.startsWith('"')&&Q.endsWith('"')||Q.startsWith("'")&&Q.endsWith("'"))try{let Y=JSON.parse(Q);if(typeof Y==="string")return Y.replace(/\r\n?/g,`
881
+ </html>`}class l1{sessions=new Map;socketServer=new i9({noServer:!0});sweepTimer;port=null;constructor(){this.sweepTimer=setInterval(()=>this.sweep(),60000),this.sweepTimer.unref?.()}setPort(Z){this.port=Z}wrapperOrigin(Z){if(!this.port)throw Error("Browser kit is not ready");return`http://${Z.wrapperHost}.localhost:${this.port}`}result(Z){let X=this.wrapperOrigin(Z);return{proxySessionId:Z.id,wrapperUrl:`${X}/browser-kit/wrapper?session=${encodeURIComponent(Z.id)}`,bridgeToken:Z.bridgeToken,navigateUrlPrefix:`${X}/browser-kit/navigate?session=${encodeURIComponent(Z.id)}&url=`}}async handleRpc(Z,X,Q){if(Q.method==="open_proxy_session"){let K=Q.params;if(typeof K.browserNodeId!=="string"||typeof K.url!=="string")throw Error("Browser proxy session input is invalid");let J=X3(K.url),Y=p9(X),j=[...this.sessions.values()].find((B)=>B.frontendSessionId===Z&&B.browserNodeId===K.browserNodeId);if(j){if(j.frontendOrigin!==Y)throw Error("Browser proxy session origin changed unexpectedly");return j.currentUrl=J,j.lastUsedAt=Date.now(),this.result(j)}let U={id:e6(),frontendSessionId:Z,frontendOrigin:Y,browserNodeId:K.browserNodeId,wrapperHost:`iw-browser-${r9()}`,bridgeToken:Q3(24).toString("base64url"),currentUrl:J,lastUsedAt:Date.now(),cookies:new Map};return this.sessions.set(U.id,U),this.result(U)}if(Q.method==="close_proxy_session"){let K=Q.params;if(typeof K.proxySessionId!=="string")throw Error("Browser proxy session input is invalid");let J=this.sessions.get(K.proxySessionId);if(J&&J.frontendSessionId!==Z)throw Error("Browser proxy session belongs to another frontend session");if(J)this.sessions.delete(J.id);return{closed:!0}}if(Q.method==="build_snapshot")throw Error("Browser-kit snapshots are not available yet");throw Error("Unsupported browser-kit RPC operation")}closeFrontendSession(Z){for(let X of this.sessions.values())if(X.frontendSessionId===Z)this.sessions.delete(X.id)}async close(){clearInterval(this.sweepTimer),this.sessions.clear(),this.socketServer.close()}sweep(){let Z=Date.now()-d9;for(let X of this.sessions.values())if(X.lastUsedAt<Z)this.sessions.delete(X.id)}sessionForRequest(Z){let X=a9(Z.headers.host);return[...this.sessions.values()].find((Q)=>X===`${Q.wrapperHost}.localhost`)??null}storeCookies(Z,X,Q){for(let K of X){let[J="",...Y]=K.split(";"),j=J.indexOf("=");if(j<0)continue;let U=J.slice(0,j).trim(),B=J.slice(j+1).trim(),z=Q.toLowerCase();for(let R of Y){let h=R.indexOf("="),O=(h<0?R:R.slice(0,h)).trim().toLowerCase(),f=h<0?"":R.slice(h+1).trim();if(O==="domain"&&f)z=f.replace(/^\./,"").toLowerCase()}if(!Z.cookies.has(z))Z.cookies.set(z,new Map);let q=Z.cookies.get(z);if(!q)continue;if(B===""||/(^|;)\s*max-age=0/i.test(K))q.delete(U);else q.set(U,B)}}storeClientCookies(Z,X){if(!X)return;for(let Q of X.split(";")){let K=Q.trim(),J=K.indexOf("=");if(J<1)continue;let Y=K.slice(0,J);if(!Y.startsWith(Z3))continue;let j=Y.slice(Z3.length).split(".");if(j.length!==2)continue;try{let U=Buffer.from(j[0]??"","base64url").toString(),B=Buffer.from(j[1]??"","base64url").toString(),z=JSON.parse(decodeURIComponent(K.slice(J+1))),q=new URL(U).hostname.toLowerCase();if(!B||z.name!==B||typeof z.value!=="string")continue;if(!Z.cookies.has(q))Z.cookies.set(q,new Map);let R=Z.cookies.get(q);if(!R)continue;if(z.deleted===!0)R.delete(B);else R.set(B,z.value)}catch{}}}cookieHeader(Z,X){let Q=X.toLowerCase(),K=[];for(let[J,Y]of Z.cookies)if(Q===J||Q.endsWith(`.${J}`))for(let[j,U]of Y)K.push(`${j}=${U}`);return K.join("; ")}async proxy(Z,X,Q,K){let J=K.pathname.slice(K1.length)+K.search+K.hash;if(!/^https?:\/\//i.test(J)){X.writeHead(400,{"content-type":"text/plain"}),X.end(`Bad proxy target: ${J}`);return}let Y=await o9(Z),j=Z.method??"GET",U=J,B=Y,z=null;this.storeClientCookies(Q,Z.headers.cookie);for(let O=0;;O+=1){let f=new URL(U),M=s9(Z);for(let _ of["host","connection","origin","referer","cookie","accept-encoding"])M.delete(_);let N=this.cookieHeader(Q,f.hostname);if(N)M.set("cookie",N);M.set("referer",`${f.origin}/`);let b={method:j,headers:M,redirect:"manual",...j!=="GET"&&j!=="HEAD"&&B?{body:B,duplex:"half"}:{}};try{z=await fetch(U,b)}catch(_){X.writeHead(502,{"content-type":"text/plain"}),X.end(`Proxy fetch error for ${U}: ${_ instanceof Error?_.message:String(_)}`);return}let g=z.headers.getSetCookie,v=typeof g==="function"?g.call(z.headers):[];if(v.length>0)this.storeCookies(Q,v,f.hostname);let G=z.headers.get("location");if(z.status>=300&&z.status<400&&G&&O<15){if(U=new URL(G,U).href,z.status===303||j==="POST"&&(z.status===301||z.status===302))j="GET",B=void 0;continue}break}if(!z)throw Error("Browser proxy received no response");Q.lastUsedAt=Date.now();let q=new Headers;z.headers.forEach((O,f)=>{if(!t6.has(f.toLowerCase()))q.set(f,O)}),q.set("access-control-allow-origin","*"),q.set("access-control-allow-credentials","true");for(let O of["location","content-location"]){let f=q.get(O);if(f)q.set(O,d0(f,U,this.wrapperOrigin(Q)))}let R=(z.headers.get("content-type")??"").toLowerCase(),h;if(R.includes("text/html")){let O=e6();h=a4({html:await z.text(),sourceUrl:U,proxyOrigin:this.wrapperOrigin(Q),bridgeToken:Q.bridgeToken,revision:O,navigateUrlPrefix:`${this.wrapperOrigin(Q)}/browser-kit/navigate?session=${encodeURIComponent(Q.id)}&url=`}),q.delete("etag"),q.delete("last-modified"),q.set("cache-control","no-store"),q.append("set-cookie",`__browser_kit_origin=${encodeURIComponent(new URL(U).origin)}; Path=/; SameSite=Lax`)}else if(R.includes("text/css"))h=d4({css:await z.text(),baseUrl:U,proxyOrigin:this.wrapperOrigin(Q)}),q.delete("etag"),q.delete("last-modified"),q.set("cache-control","no-store");else h=Buffer.from(await z.arrayBuffer());if(X.writeHead(z.status,n9(q)),Z.method==="HEAD")X.end();else X.end(h)}async handleHttpRequest(Z,X){let Q=new URL(Z.url??"/","http://localhost");if(!Q.pathname.startsWith("/browser-kit/"))return!1;let K=this.sessionForRequest(Z);if(!K)return X.writeHead(404,{"content-type":"text/plain"}),X.end("Browser-kit session not found"),!0;if(K.lastUsedAt=Date.now(),Q.pathname==="/browser-kit/wrapper"){if(Q.searchParams.get("session")!==K.id||Z.method!=="GET"&&Z.method!=="HEAD")return X.writeHead(403),X.end(),!0;let J=t9(K,K.currentUrl);if(X.writeHead(200,{"content-type":"text/html; charset=utf-8","cache-control":"no-store","content-security-policy":`default-src 'self'; script-src 'self' 'unsafe-inline'; worker-src 'self'; style-src 'unsafe-inline'; frame-src 'self'; connect-src 'self'; frame-ancestors ${K.frontendOrigin}`,"access-control-allow-origin":K.frontendOrigin,vary:"Origin"}),Z.method==="HEAD")X.end();else X.end(J);return!0}if(Q.pathname==="/browser-kit/sw.js")return X.writeHead(200,{"content-type":"text/javascript; charset=utf-8","service-worker-allowed":"/","cache-control":"no-store"}),X.end(p4()),!0;if(Q.pathname==="/browser-kit/navigate"){let J=Q.searchParams.get("url");if(!J)return X.writeHead(400),X.end(),!0;return K.currentUrl=X3(J),X.writeHead(307,{location:`${this.wrapperOrigin(K)}${K1}${K.currentUrl}`,"cache-control":"no-store"}),X.end(),!0}if(Q.pathname.startsWith(K1))return await this.proxy(Z,X,K,Q),!0;return X.writeHead(404),X.end(),!0}handleUpgrade(Z,X,Q){let K=new URL(Z.url??"/","http://localhost");if(!K.pathname.startsWith(K1))return!1;let J=this.sessionForRequest(Z);if(!J)return X.destroy(),!0;let Y=K.pathname.slice(K1.length)+K.search+K.hash;if(!/^wss?:\/\//i.test(Y))return X.destroy(),!0;return this.socketServer.handleUpgrade(Z,X,Q,(j)=>{let U;try{let z=new URL(Y),q={origin:z.origin},R=this.cookieHeader(J,z.hostname);if(R)q.cookie=R;U=new c1(Y,{headers:q})}catch{j.close(1011,"bad target");return}let B=[];U.binaryType="arraybuffer",U.on("open",()=>{for(let z of B)U.send(z);B.length=0}),j.on("message",(z)=>{if(U.readyState===c1.OPEN)U.send(z);else B.push(z)}),U.on("message",(z)=>{if(j.readyState===c1.OPEN)j.send(z)}),j.on("close",()=>U.close()),j.on("error",()=>U.close()),U.on("close",(z,q)=>{if(j.readyState===c1.OPEN)j.close(z>=1000&&z<=4999?z:1000,q.toString())}),U.on("error",()=>j.close(1011,"upstream error"))}),!0}}function e9(Z){if(!Z)return null;let X=Z.indexOf("/");if(X<=0)return null;return Z.slice(0,X)}function i1(Z){let X=[...Z.models];if(Z.adapterId!=="opencode"||X.length===0)return X;let Q=e9(Z.currentModelId)??(X.some((J)=>J.id.startsWith("opencode/"))?"opencode":null);if(!Q)return X;let K=X.filter((J)=>J.id===Z.currentModelId||J.id.startsWith(`${Q}/`));return K.length>0?K:X}import{Readable as LZ,Writable as qZ}from"node:stream";import{ClientSideConnection as F3,ndJsonStream as B3}from"@agentclientprotocol/sdk";import v0 from"node:fs/promises";import Q0 from"node:path";class J1 extends Error{constructor(Z){super(Z);this.name="PathTraversalError"}}class o4 extends Error{constructor(Z){super(Z);this.name="HiddenPathError"}}class n4 extends Error{constructor(Z){super(Z);this.name="RunFolderFileTooLargeError"}}class W1 extends Error{constructor(Z){super(Z);this.name="RunFolderBinaryFileError"}}var ZZ=new Set([".bzr",".cache",".claude",".config",".env",".git",".hg",".idea",".obsidian",".svn",".vscode","node_modules"]),K3=1e6,XZ=4096,QZ=new TextDecoder("utf-8",{fatal:!0});function KZ(Z){return Z.split(/[\\/]+/).filter((X)=>X.length>0)}function d1(Z){if(Q0.isAbsolute(Z))throw new J1("Absolute paths are not allowed");for(let X of KZ(Z)){if(X===".")continue;if(X==="..")throw new J1("Parent-directory traversal is not allowed");if(X.startsWith(".")||ZZ.has(X))throw new o4(`Path segment "${X}" is hidden or configuration data`)}}function WZ(Z){d1(Z);let X=Q0.normalize(Z||".");return X==="."?"":X}function JZ(Z,X,Q){let K=Q0.relative(Z,X);if(K===".."||K.startsWith(`..${Q0.sep}`)||Q0.isAbsolute(K))throw new J1(`Path "${Q}" resolves outside the run folder`);if(K.length>0)d1(K);return K}async function s4(Z,X){d1(X);let Q=Q0.resolve(Z,X||"."),K;try{K=await v0.realpath(Q)}catch(J){if(J.code!=="ENOENT")throw J;let Y=Q0.dirname(Q),j=[Q0.basename(Q)];while(Y!==Z&&Y!==Q0.dirname(Y))try{Y=await v0.realpath(Y);break}catch(U){if(U.code!=="ENOENT")throw U;j.unshift(Q0.basename(Y)),Y=Q0.dirname(Y)}K=Q0.join(Y,...j)}return JZ(Z,K,X),K}async function YZ(Z,X){let Q=await v0.realpath(Z);return s4(Q,X)}function VZ(Z){let X=Z.subarray(0,Math.min(Z.length,XZ));if(X.length===0)return!1;let Q=0;for(let K of X){if(K===0)return!0;let J=K===9||K===10||K===12||K===13;if(K<32&&!J)Q+=1}return Q/X.length>0.3}async function a1(Z,X){let Q=await YZ(Z,X),K=await v0.stat(Q);if(!K.isFile())throw new W1(`Path "${X}" is not a text file`);if(K.size>K3)throw new n4(`File "${X}" is too large to read (${K.size} bytes, max ${K3} bytes)`);let J=await v0.readFile(Q);if(VZ(J))throw new W1(`File "${X}" appears to be binary, not text`);try{return QZ.decode(J)}catch{throw new W1(`File "${X}" is not valid UTF-8 text`)}}function jZ(Z){if(Z.isDirectory())return"directory";if(Z.isFile())return"file";if(Z.isSymbolicLink())return"symlink";return"other"}function W3(Z){return Z.split(Q0.sep).join("/")}async function J3(Z,X=""){let Q=await v0.realpath(Z),K=WZ(X),J=await s4(Q,K),Y=await v0.readdir(J,{withFileTypes:!0}),j=[];for(let U of Y){let B=K?Q0.join(K,U.name):U.name;try{d1(B);let z=await s4(Q,B),q=await v0.stat(z);j.push({name:U.name,path:W3(B),type:jZ(U),size:U.isFile()?q.size:null})}catch{}}return j.sort((U,B)=>{if(U.type==="directory"&&B.type!=="directory")return-1;if(U.type!=="directory"&&B.type==="directory")return 1;return U.name.localeCompare(B.name)}),{path:W3(K),absolutePath:J,entries:j}}var t4={fs:{readTextFile:!0,writeTextFile:!1},terminal:!1};function Y3(Z){return{readTextFile:async(X)=>{return{content:await a1(Z,X.path)}}}}import{spawn as HZ}from"node:child_process";function e4(Z){let X=HZ(Z.command,Z.args,{cwd:Z.cwd,env:Z.env,stdio:["pipe","pipe","pipe"],..._1(Z.command)});if(!X.stdin||!X.stdout||!X.stderr)throw Error("Failed to allocate stdio streams for ACP subprocess");let{stdin:Q,stdout:K,stderr:J}=X,Y=4096,j=[],U=0;J.on("data",(N)=>{j.push(N),U+=N.length;while(U>Y*2&&j.length>1){let b=j.shift();if(b)U-=b.length}});let B=()=>{let N=Buffer.concat(j).toString("utf8");return N.length>Y?N.slice(-Y):N},z=!1,q=!1,R,h,O=new Promise((N)=>{R=N}),f=new Promise((N)=>{h=N}),M=(N)=>{if(q)return;if(q=!0,R(N),!z)h(N)};return X.on("exit",(N,b)=>{M({code:N,signal:b,stderr:B()})}),X.on("error",(N)=>{let b=B(),g=N?.message??String(N);M({code:null,signal:null,stderr:b?`${g}
882
+ ${b}`:g})}),{stdin:Q,stdout:K,stderr:J,kill:(N="SIGTERM")=>{if(z)return;z=!0;try{X.kill(N)}catch{}},waitForExit:O,processCrashed:f}}var wZ=["mcp_ideawave_board_","ideawave_board_","ideawave-board_","ideawave-board.","ideawave.board."];function zZ(Z){let X=Z.toLowerCase();for(let Q of wZ)if(X.startsWith(Q))return Z.slice(Q.length);if(/^mcp[-_.]/i.test(Z))return Z.slice(4);return Z}function p1(Z){return zZ(Z.trim())}function Z2(Z){let X=p1(Z);if(!X)return"Tool";if(!/[-_.]/.test(X))return X.charAt(0).toUpperCase()+X.slice(1);let Q=X.replace(/[-_.]+/g," ").replace(/\s+/g," ").trim();if(!Q)return"Tool";return Q.charAt(0).toUpperCase()+Q.slice(1)}function X2(Z){let X=Z?.toLowerCase();if(X==="completed"||X==="complete"||X==="done"||X==="success"||X==="succeeded")return"completed";if(X==="failed"||X==="error"||X==="errored")return"failed";return"running"}function Q2(Z){if(typeof Z!=="string")return null;let X=Z.trim();return X?X:null}function V3(Z){if(typeof Z!=="string")return"Tool";let X=Z.trim();return X?X:"Tool"}function UZ(Z,X){if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let Q=Z;for(let K of X){let J=Q[K];if(typeof J==="string"&&J.trim())return J.trim()}return null}function K2(Z,X){let Q=Z.trim().toLowerCase();if(Q==="skill"||Q==="workflow"||Q==="tool"||Q==="invalid"){let K=UZ(X,["skillName","workflowName","toolName","name","title"]);if(K){let J=Q==="skill"?" skill":Q==="workflow"?" workflow":"";return`${Z2(K)}${J}`}}if(Q==="invalid")return"Tool call";return Z2(Z)}var FZ=33,j3=1600;function k0(Z){if(Z.length<=j3)return Z;return`${Z.slice(0,j3-22)}
883
+ ... truncated`}function s1(Z){let X=Z.replace(/\r\n?/g,`
884
+ `),Q=X.trim();if(Q.startsWith('"')&&Q.endsWith('"')||Q.startsWith("'")&&Q.endsWith("'"))try{let J=JSON.parse(Q);if(typeof J==="string")return J.replace(/\r\n?/g,`
795
885
  `)}catch{return X}if(!X.includes("\\\""))return X;let K=X.replace(/\\r\\n/g,`
796
886
  `).replace(/\\n/g,`
797
887
  `).replace(/\\r/g,`
798
- `).replace(/\\t/g,"\t").replace(/\\"/g,'"');try{let Y=JSON.parse(K);if(Y!==null&&typeof Y==="object")return K}catch{return X}return X}function x0(Z){if(Z===void 0||Z===null)return null;if(typeof Z==="string"){let X=r1(Z).trim();return X?k0(X):null}if(typeof Z==="number"||typeof Z==="boolean"||typeof Z==="bigint")return String(Z);try{return k0(JSON.stringify(Z,null,2))}catch{return k0(r1(String(Z)))}}function FZ(Z){if(!Z||typeof Z!=="object")return null;let X=Z;if(X.type==="text"&&typeof X.text==="string")return r1(X.text);if(X.type==="image")return"[image]";if(X.type==="resource")return"[resource]";if(X.type==="content"){let Q=X.content;if(Q&&typeof Q==="object"){let K=Q;if(K.type==="text"&&typeof K.text==="string")return r1(K.text);if(K.type==="image")return"[image]";if(K.type==="resource")return"[resource]"}}if(X.type==="diff")return`Diff: ${typeof X.path==="string"?X.path:"unknown file"}`;if(X.type==="terminal")return`Terminal: ${typeof X.terminalId==="string"?X.terminalId:"terminal"}`;return x0(Z)}function s1(Z){if(!Array.isArray(Z))return null;let X=Z.map(FZ).filter((Q)=>Boolean(Q?.trim()));if(X.length===0)return null;return k0(X.join(`
888
+ `).replace(/\\t/g,"\t").replace(/\\"/g,'"');try{let J=JSON.parse(K);if(J!==null&&typeof J==="object")return K}catch{return X}return X}function x0(Z){if(Z===void 0||Z===null)return null;if(typeof Z==="string"){let X=s1(Z).trim();return X?k0(X):null}if(typeof Z==="number"||typeof Z==="boolean"||typeof Z==="bigint")return String(Z);try{return k0(JSON.stringify(Z,null,2))}catch{return k0(s1(String(Z)))}}function BZ(Z){if(!Z||typeof Z!=="object")return null;let X=Z;if(X.type==="text"&&typeof X.text==="string")return s1(X.text);if(X.type==="image")return"[image]";if(X.type==="resource")return"[resource]";if(X.type==="content"){let Q=X.content;if(Q&&typeof Q==="object"){let K=Q;if(K.type==="text"&&typeof K.text==="string")return s1(K.text);if(K.type==="image")return"[image]";if(K.type==="resource")return"[resource]"}}if(X.type==="diff")return`Diff: ${typeof X.path==="string"?X.path:"unknown file"}`;if(X.type==="terminal")return`Terminal: ${typeof X.terminalId==="string"?X.terminalId:"terminal"}`;return x0(Z)}function r1(Z){if(!Array.isArray(Z))return null;let X=Z.map(BZ).filter((Q)=>Boolean(Q?.trim()));if(X.length===0)return null;return k0(X.join(`
799
889
 
800
- `))}function W2(Z){if(!Z||typeof Z!=="object"||Array.isArray(Z))return x0(Z);let X=Z,Q=s1(X.content);if(Q)return Q;for(let J of["output","result","text","message"]){let H=x0(X[J]);if(H)return H}let K=x0(X.stdout),Y=x0(X.stderr);if(K||Y)return k0([K?`stdout:
801
- ${K}`:null,Y?`stderr:
802
- ${Y}`:null].filter(Boolean).join(`
890
+ `))}function W2(Z){if(!Z||typeof Z!=="object"||Array.isArray(Z))return x0(Z);let X=Z,Q=r1(X.content);if(Q)return Q;for(let Y of["output","result","text","message"]){let j=x0(X[Y]);if(j)return j}let K=x0(X.stdout),J=x0(X.stderr);if(K||J)return k0([K?`stdout:
891
+ ${K}`:null,J?`stderr:
892
+ ${J}`:null].filter(Boolean).join(`
803
893
 
804
- `));return x0(Z)}function j8(Z,X){if(!X)return Z;if(!Z)return X;if(Z===X||Z.endsWith(X))return Z;if(X.startsWith(Z))return X;return k0(`${Z}
894
+ `));return x0(Z)}function H3(Z,X){if(!X)return Z;if(!Z)return X;if(Z===X||Z.endsWith(X))return Z;if(X.startsWith(Z))return X;return k0(`${Z}
805
895
 
806
- ${X}`)}function Y2(Z){if(!Array.isArray(Z))return null;let X=Z.flatMap((Q)=>{if(!Q||typeof Q!=="object")return[];let K=Q;if(typeof K.path!=="string"||!K.path.trim())return[];let Y=typeof K.line==="number"?`:${K.line}`:"";return[`${K.path}${Y}`]});return X.length>0?X.slice(0,5):null}function H8(Z){let{ctx:X,appendText:Q,appendToolActivity:K}=Z,Y=Z.flushIntervalMs??UZ,J="",H="",w=0,B=null,U={},q=new Map,h=(D)=>{if(q.set(D.toolCallId,D),!K)return;K({boardId:X.boardId,cardId:X.cardId,runId:X.runId,entry:D}).catch((x)=>{console.warn("[streamAdapter] appendToolActivity failed",x)})},M=(D)=>{let x=`${X.runId}:thought`,E=q.get(x);if(!E||E.status!=="running")return;h({...E,status:"completed",completedAt:E.completedAt??D})},O=(D)=>{for(let x of q.values()){if(x.status!=="running"||x.rawTitle.toLowerCase()!=="toolsearch")continue;h({...x,status:"completed",completedAt:x.completedAt??D})}},f=(D)=>{for(let x of Array.from(q.values())){if(x.status!=="running")continue;if(x.kind==="thought"||x.rawTitle==="agent_thought")continue;h({...x,status:"completed",completedAt:x.completedAt??D})}},C="",N=0,b=null,$=null,v=(D)=>{if(D===C)return;C=D,N=Date.now(),Q({boardId:X.boardId,cardId:X.cardId,runId:X.runId,text:D}).catch((x)=>{console.warn("[streamAdapter] appendText failed",x)})},G=()=>{if(b!==null)clearTimeout(b),b=null;if($!==null){let D=$;$=null,v(D)}},_=(D)=>{let x=Date.now()-N;if(x>=Y&&b===null){v(D);return}if($=D,b===null){let E=Math.max(0,Y-x);b=setTimeout(()=>{b=null,G()},E)}};return{onSessionUpdate:async(D)=>{let x=D.update;switch(U[x.sessionUpdate]=(U[x.sessionUpdate]??0)+1,x.sessionUpdate){case"agent_message_chunk":{let E=new Date().toISOString();if(M(E),x.content.type==="text")J+=x.content.text,_(J);else{let k=`agent_message_chunk:${x.content.type}`;U[k]=(U[k]??0)+1}return}case"agent_thought_chunk":{if(x.content.type!=="text")return;H+=x.content.text;let E=new Date().toISOString(),k=`${X.runId}:thought`,l=q.get(k);h({toolCallId:k,rawTitle:"agent_thought",title:"Thought",kind:"thought",status:"running",startedAt:l?.startedAt??E,completedAt:null,contentPreview:k0(H.trim())});return}case"user_message_chunk":return;case"tool_call":{w+=1;let E=J8(x.title),k=X2(x.status),l=new Date().toISOString();M(l),O(l),h({toolCallId:x.toolCallId,rawTitle:E,title:K2(E,x.rawInput),kind:Q2(x.kind),status:k,startedAt:l,completedAt:k==="running"?null:l,inputPreview:x0(x.rawInput),outputPreview:W2(x.rawOutput),contentPreview:s1(x.content),locations:Y2(x.locations)});return}case"tool_call_update":{let E=q.get(x.toolCallId);if(!E){let c=J8(x.title),X0=X2(x.status),r=new Date().toISOString();h({toolCallId:x.toolCallId,rawTitle:c,title:K2(c,x.rawInput),kind:Q2(x.kind),status:X0,startedAt:r,completedAt:X0==="running"?null:r,inputPreview:x0(x.rawInput),outputPreview:W2(x.rawOutput),contentPreview:s1(x.content),locations:Y2(x.locations)});return}let k=x.status===void 0||x.status===null?E.status:X2(x.status),l=typeof x.title==="string"&&x.title.trim().length>0?x.title:E.rawTitle,L0=typeof x.title==="string"&&x.title.trim().length>0,y0=k==="running"?E.completedAt:E.completedAt??new Date().toISOString(),I=x.content===void 0?E.contentPreview:j8(E.contentPreview,s1(x.content)),p=x.rawOutput===void 0?E.outputPreview:j8(E.outputPreview,W2(x.rawOutput));h({...E,rawTitle:l,title:L0?K2(l,x.rawInput):E.title,kind:x.kind===void 0?E.kind:Q2(x.kind),status:k,completedAt:y0,inputPreview:x.rawInput===void 0?E.inputPreview:x0(x.rawInput),outputPreview:p,contentPreview:I,locations:x.locations===void 0?E.locations:Y2(x.locations)});return}case"plan":B=x.entries;return;case"available_commands_update":return;case"current_mode_update":return;default:return}},getFinalText:()=>J,getToolCallCount:()=>w,getLatestPlan:()=>B,getUpdateTypeCounts:()=>({...U}),flush:(D)=>{let x=new Date().toISOString();if(M(x),D?.completeOpenToolCalls)f(x);G()}}}var J1=1,z8=-32000;function w8(Z){if(Z.awaitingInput)return!1;return Z.nowMs-Z.lastUpdateMs>=Z.windowMs}function B8(Z){if(!Z||typeof Z!=="object")return!1;return Z.code===z8}var qZ=60000,xZ=qZ,PZ=5000;function fZ(Z){let X=Math.max(1,Math.round(Z/1000));return`Runtime has not responded for ${X} ${X===1?"second":"seconds"}. Retry the agent run.`}function L8(){return{name:"ideawave-cli",title:"IdeaWave CLI",version:"0.0.65".trim()?"0.0.65":"dev"}}function q8(Z){if(Z===J1)return;throw new T(`Unsupported ACP protocol version ${Z}; expected ${J1}`)}function x8(Z){return BZ.toWeb(Z)}function P8(Z){return LZ.toWeb(Z)}function J2(Z){return Z!==null&&typeof Z==="object"}function yZ(Z){if(!Array.isArray(Z))return[];let X=[];for(let Q of Z){if(!J2(Q))continue;if(typeof Q.group==="string"&&Array.isArray(Q.options)){let K=typeof Q.name==="string"?Q.name:Q.group;for(let Y of Q.options){if(!J2(Y))continue;if(typeof Y.value!=="string"||typeof Y.name!=="string")continue;X.push({value:Y.value,name:Y.name,description:typeof Y.description==="string"?Y.description:null,group:Q.group,groupName:K})}continue}if(typeof Q.value!=="string"||typeof Q.name!=="string")continue;X.push({value:Q.value,name:Q.name,description:typeof Q.description==="string"?Q.description:null,group:null,groupName:null})}return X}function OZ(Z){if(!J2(Z))return null;if(typeof Z.id!=="string"||typeof Z.name!=="string")return null;let X=typeof Z.category==="string"?Z.category:null,Q=typeof Z.description==="string"?Z.description:null;if(Z.type==="select"){let K=typeof Z.currentValue==="string"?Z.currentValue:null;return{id:Z.id,name:Z.name,category:X,description:Q,type:"select",currentValue:K,options:yZ(Z.options)}}if(Z.type==="boolean"){let K=typeof Z.currentValue==="boolean"?Z.currentValue:typeof Z.value==="boolean"?Z.value:null;return{id:Z.id,name:Z.name,category:X,description:Q,type:"boolean",currentValue:K,options:[]}}return null}function V2(Z){let X=(Z.configOptions??[]).map(OZ).filter((w)=>w!==null),Q=X.find((w)=>w.type==="select"&&w.category==="model")??X.find((w)=>w.type==="select"&&w.id==="model")??null,K=Q?.options.map((w)=>({id:w.value,name:w.name,description:w.description??null})),Y=bZ(Z.models),J=K&&K.length>0?K:Y&&Y.length>0?Y:null,H=(typeof Q?.currentValue==="string"?Q.currentValue:null)??vZ(Z.models)??null;return{models:J,currentModelId:H,configOptions:X,modelConfigId:Q?.id??null}}function bZ(Z){if(!Z||!Array.isArray(Z.availableModels))return null;let X=[];for(let Q of Z.availableModels){if(typeof Q.modelId!=="string")continue;X.push({id:Q.modelId,name:typeof Q.name==="string"?Q.name:null,description:typeof Q.description==="string"?Q.description:null})}return X.length>0?X:null}function vZ(Z){return typeof Z?.currentModelId==="string"?Z.currentModelId:null}function RZ(Z,X){let Q=[];if(Z.trim())Q.push({type:"text",text:Z});for(let K of X)if(K.content.trim())Q.push({type:"text",text:K.content});return Q}function CZ(Z){if(typeof Z.value==="boolean")return{sessionId:Z.sessionId,configId:Z.configId,type:"boolean",value:Z.value};return{sessionId:Z.sessionId,configId:Z.configId,value:Z.value}}function hZ(Z,X){let Q=V2({configOptions:X.configOptions});return{models:Q.models??Z.models,currentModelId:Q.currentModelId??Z.currentModelId,configOptions:Q.configOptions,modelConfigId:Q.modelConfigId??Z.modelConfigId}}function f8(Z,X){if(Z==="default")return null;if(!X||X.length===0)return Z;let Q=X.find((U)=>U.id===Z);if(Q)return Q.id;let K=Z.toLowerCase(),Y=K.includes("opus")?"opus":K.includes("sonnet")?"sonnet":K.includes("haiku")?"haiku":null;if(!Y)return Z;let J=(U)=>`${U.id} ${U.name??""} ${U.description??""}`.toLowerCase(),H=X.filter((U)=>J(U).includes(Y));if(H.length===0)return Z;let B=(K.includes("1m")?H.find((U)=>J(U).includes("1m")):void 0)??H[0];return B?B.id:Z}async function o1(Z){try{let X=await Z.conn.setSessionConfigOption(CZ({sessionId:Z.sessionId,configId:Z.configId,value:Z.value}));return hZ(Z.metadata,X)}catch(X){return console.warn(`[acp] setSessionConfigOption(${Z.label}) failed; using agent default.`,X instanceof Error?X.message:X),Z.metadata}}async function j2(Z){let X=e4(Z.spawn),Q=[],K=0,Y=4096;X.stderr.on("data",(I)=>{Q.push(I),K+=I.length;while(K>Y*2&&Q.length>1){let p=Q.shift();if(p)K-=p.length}});let J=()=>{let I=Buffer.concat(Q).toString("utf8");return I.length>Y?I.slice(-Y):I},H=Y8(Z.spawn.cwd),w={current:null},B={current:null},U={at:Date.now()},q=null,h=P8(X.stdin),M=x8(X.stdout),O=F8(h,M),C=new U8((I)=>({requestPermission:async(p)=>{let c=p.options,X0=c?.find((r)=>r.kind==="allow_once")??c?.find((r)=>r.kind==="allow_always");if(X0)return{outcome:{outcome:"selected",optionId:X0.optionId}};return{outcome:{outcome:"cancelled"}}},sessionUpdate:async(p)=>{U.at=Date.now();let c=B.current;if(c){let r=p.update.sessionUpdate;if(c.updateCount+=1,c.updateCount===1||c.lastUpdateType!==r||r==="tool_call"||r==="tool_call_update")m("acp.session_update",{runId:c.runId,cardId:c.cardId,sessionId:q,updateType:r,updateCount:c.updateCount,elapsedMs:Date.now()-c.startedAt});c.lastUpdateType=r}let X0=w.current;if(X0)await X0.onSessionUpdate(p)},readTextFile:H.readTextFile}),O),N=()=>X.kill();if(Z.signal)Z.signal.addEventListener("abort",N);let b=()=>{if(Z.signal)Z.signal.removeEventListener("abort",N)},$=async(I,p)=>{if(b(),X.kill(),B8(I))throw new c0(I.message??"Authentication required",p);if(I instanceof Error&&I.message==="ACP connection closed"){if(Z.signal?.aborted)throw new T("ACP session cancelled: abort signal received");let c=await Promise.race([X.processCrashed,X.waitForExit,new Promise((X0)=>setTimeout(()=>X0({stderr:""}),500))]);throw new T(`Runtime process exited before completion: ${c.stderr?.trim()??""}`)}throw I},v;try{v=await C.initialize({protocolVersion:J1,clientCapabilities:t4,clientInfo:L8()})}catch(I){throw await $(I,[]),Error("unreachable")}try{q8(v.protocolVersion)}catch(I){throw b(),X.kill(),I}let G=v.authMethods?.map((I)=>I.id)??[],_;try{_=await C.newSession({cwd:Z.spawn.cwd,mcpServers:Z.mcpServers??[]})}catch(I){throw await $(I,G),Error("unreachable")}let D=_.sessionId;q=D;let x=V2(_),E=Z.modelId??null,k=E?f8(E,x.models):null;if(k&&k!==x.currentModelId)if(x.modelConfigId)x=await o1({conn:C,sessionId:D,configId:x.modelConfigId,value:k,metadata:x,label:`${x.modelConfigId}=${k}`});else console.warn(`[acp] runtime did not advertise a model config option for ${k}; using agent default.`);for(let[I,p]of Object.entries(Z.configValues??{}).sort(([c],[X0])=>c.localeCompare(X0))){if(I===x.modelConfigId)continue;if(!x.configOptions.some((c)=>c.id===I))continue;x=await o1({conn:C,sessionId:D,configId:I,value:p,metadata:x,label:`${I}=${String(p)}`})}b();let l=!1,L0=async()=>{if(l)return;l=!0,X.kill(),await Promise.race([X.waitForExit,new Promise((I)=>setTimeout(I,2000))])},y0=!1;return X.processCrashed.then(()=>{y0=!0}),{sessionId:D,availableModels:x.models,currentModelId:x.currentModelId,availableConfigOptions:x.configOptions,isAlive:()=>!l&&!y0,dispose:L0,prompt:(I)=>MZ({proc:X,conn:C,sessionId:D,activeAdapter:w,activeTrace:B,lastUpdate:U,collectStderrTail:J},I)}}async function MZ(Z,X){let{proc:Q,conn:K,sessionId:Y,activeAdapter:J,activeTrace:H,lastUpdate:w}=Z,B=Date.now(),U=X.heartbeatMs??xZ,q=fZ(U),h={boardId:X.boardId,cardId:X.cardId,runId:X.runId},M=H8({ctx:h,appendText:X.appendText,appendToolActivity:X.appendToolActivity});J.current=M,H.current={runId:X.runId,cardId:X.cardId,startedAt:B,updateCount:0,lastUpdateType:null},w.at=Date.now(),m("acp.prompt_started",{runId:X.runId,cardId:X.cardId,sessionId:Y,heartbeatWindowMs:U});let O=!1,f=null,C=()=>Q.kill();X.signal.addEventListener("abort",C);try{let N=async()=>{let G=Math.min(PZ,Math.max(50,Math.floor(U/2)));f=setInterval(()=>{let D=X.isAwaitingInput?.()??!1;if(D){w.at=Date.now();return}if(w8({nowMs:Date.now(),lastUpdateMs:w.at,windowMs:U,awaitingInput:D}))O=!0,m("acp.inactivity_timeout",{runId:X.runId,cardId:X.cardId,sessionId:Y,windowMs:U,silentForMs:Date.now()-w.at}),K.cancel({sessionId:Y}).catch(()=>{return}),Q.kill()},G);let _=RZ(X.prompt.systemPrompt,X.prompt.messages);await K.prompt({sessionId:Y,prompt:_}),m("acp.prompt_resolved",{runId:X.runId,cardId:X.cardId,sessionId:Y,elapsedMs:Date.now()-B}),M.flush({completeOpenToolCalls:!0})},b=Q.waitForExit.then((G)=>({kind:"exited",exit:G})),$=N().then(()=>({kind:"ok"})).catch(async(G)=>{if(G instanceof Error&&G.message==="ACP connection closed")return{kind:"crashed",exit:await Promise.race([Q.processCrashed,Q.waitForExit])};throw G}),v;try{v=await Promise.race([$,Q.processCrashed.then((G)=>({kind:"crashed",exit:G})),b])}catch(G){if(O)throw new U0(q);throw G}if(O)throw new U0(q);if(v.kind==="crashed")throw new T(`Runtime process exited before completion: ${v.exit.stderr.trim()}`);if(v.kind==="exited"){if(X.signal.aborted)throw new T("ACP session cancelled: abort signal received");if(O)throw new U0(q);throw new T(`Runtime process exited unexpectedly: ${v.exit.stderr.trim()}`)}return{modelReported:"unknown",finalText:M.getFinalText(),toolCallsExecuted:M.getToolCallCount(),stderrTail:Z.collectStderrTail(),updateTypeCounts:M.getUpdateTypeCounts()}}finally{if(m("acp.prompt_finished",{runId:X.runId,cardId:X.cardId,sessionId:Y,elapsedMs:Date.now()-B,timedOut:O,updateCount:H.current?.updateCount??0}),f!==null)clearInterval(f);X.signal.removeEventListener("abort",C),M.flush({completeOpenToolCalls:!0}),J.current=null,H.current=null}}var NZ=30000;async function y8(Z){let X=e4(Z.spawn),Q=P8(X.stdin),K=x8(X.stdout),Y=F8(Q,K),H=new U8((U)=>({requestPermission:async()=>({outcome:{outcome:"cancelled"}}),sessionUpdate:async()=>{return},readTextFile:async()=>({content:""})}),Y),w=()=>X.kill();if(Z.signal)Z.signal.addEventListener("abort",w);let B=null;try{let U=(async()=>{let h=await H.initialize({protocolVersion:J1,clientCapabilities:t4,clientInfo:L8()});q8(h.protocolVersion);let M=h.authMethods?.map((v)=>v.id)??[],O;try{O=await H.newSession({cwd:Z.spawn.cwd,mcpServers:[]})}catch(v){if(B8(v))throw new c0(v.message??"Authentication required",M);throw v}let f=V2(O),C=Z.modelId??null,N=C?f8(C,f.models):null;if(N&&N!==f.currentModelId)if(f.modelConfigId)f=await o1({conn:H,sessionId:O.sessionId,configId:f.modelConfigId,value:N,metadata:f,label:`${f.modelConfigId}=${N}`});else console.warn(`[acp] runtime did not advertise a model config option for ${N}; discovering agent default models.`);for(let[v,G]of Object.entries(Z.configValues??{}).sort(([_],[D])=>_.localeCompare(D))){if(v===f.modelConfigId)continue;if(!f.configOptions.some((_)=>_.id===v))continue;f=await o1({conn:H,sessionId:O.sessionId,configId:v,value:G,metadata:f,label:`${v}=${String(G)}`})}let b=f.models??[],$=f.currentModelId;return H.cancel({sessionId:O.sessionId}).catch(()=>{return}),{models:b,configOptions:f.configOptions,currentModelId:$}})(),q=new Promise((h,M)=>{B=setTimeout(()=>{M(new U0)},NZ)});return await Promise.race([U,q])}catch(U){if(U instanceof Error&&U.message==="ACP connection closed"){if(Z.signal?.aborted)throw new T("ACP model discovery cancelled: abort signal received");throw new T("Runtime process exited during model discovery.")}throw U}finally{if(B)clearTimeout(B);if(Z.signal)Z.signal.removeEventListener("abort",w);X.kill()}}import DZ from"node:fs/promises";import n1 from"node:os";async function O8(Z){let X={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},Q;try{Q=await DZ.readFile(Z,"utf-8")}catch(K){if(K.code==="ENOENT")return structuredClone(X);throw K}return E1.parse(JSON.parse(Q))}function H2(Z,X,Q){return{...Z.defaultConfigValues??{},...X?.configValues??{},...Q?.configValues??{}}}async function R0(Z){let X=Z.configPath?await O8(Z.configPath):await W0(),Q=Z.cardId?X.cardOverrides[Z.cardId]:void 0;if(Q?.runtimeConfigId){let Y=X.runtimes.find((J)=>J.id===Q.runtimeConfigId);if(Y)return{entry:Y,adapter:F0(Y),runFolder:Q.runFolder??Y.runFolder??n1.homedir(),modelId:Q.modelId??Y.defaultModelId??null,configValues:H2(Y,void 0,Q)}}let K=X.boardOverrides[Z.boardId];if(K?.runtimeConfigId){let Y=X.runtimes.find((J)=>J.id===K.runtimeConfigId);if(Y)return{entry:Y,adapter:F0(Y),runFolder:K.runFolder??Y.runFolder??n1.homedir(),modelId:K.modelId??Y.defaultModelId??null,configValues:H2(Y,K)}}if(X.globalDefaultConfigId){let Y=X.runtimes.find((J)=>J.id===X.globalDefaultConfigId);if(Y)return{entry:Y,adapter:F0(Y),runFolder:Q?.runFolder??K?.runFolder??Y.runFolder??n1.homedir(),modelId:Q?.modelId??K?.modelId??Y.defaultModelId??null,configValues:H2(Y,K,Q)}}throw new E0}async function b8(Z,X={}){let K=(X.configPath?await O8(X.configPath):await W0()).runtimes.find((Y)=>Y.id===Z);if(!K)return null;return{entry:K,adapter:F0(K),runFolder:K.runFolder??n1.homedir(),modelId:X.modelId??K.defaultModelId??null,configValues:{...K.defaultConfigValues??{},...X.configValues??{}}}}var v8=new Map;function z2(Z,X){if(!Z)return;v8.set(Z,X)}function R8(Z){if(!Z)return!1;return v8.get(Z)??!1}var _0=new Map,w2=new Set;function F2(Z){_0.get(Z)?.controller.abort()}function C8(Z){for(let[X,Q]of _0){if(Q.frontendSessionId!==Z)continue;Q.controller.abort(),_0.delete(X)}}function h8(){for(let Z of _0.values())Z.controller.abort();_0.clear()}function U2(Z,X){if(X?.aborted)return!0;return Z instanceof Error&&/abort signal received|session cancelled/i.test(Z.message)}function M8(Z,X,Q,K){if((!X.availableModels||X.availableModels.length===0)&&X.availableConfigOptions.length===0)return;j0((Y)=>{let J=Y.runtimes.find((H)=>H.id===Z);if(J){if(X.availableModels&&X.availableModels.length>0)J.discoveredModels=d1({adapterId:Q,models:X.availableModels,currentModelId:X.currentModelId??K});if(X.availableConfigOptions.length>0)J.discoveredConfigOptions=X.availableConfigOptions}}).catch(()=>{return})}function $Z(Z,X){return`${Z}
896
+ ${X}`)}function J2(Z){if(!Array.isArray(Z))return null;let X=Z.flatMap((Q)=>{if(!Q||typeof Q!=="object")return[];let K=Q;if(typeof K.path!=="string"||!K.path.trim())return[];let J=typeof K.line==="number"?`:${K.line}`:"";return[`${K.path}${J}`]});return X.length>0?X.slice(0,5):null}function w3(Z){let{ctx:X,appendText:Q,appendToolActivity:K}=Z,J=Z.flushIntervalMs??FZ,Y="",j="",U=0,B=null,z={},q=new Map,R=(D)=>{if(q.set(D.toolCallId,D),!K)return;K({boardId:X.boardId,cardId:X.cardId,runId:X.runId,entry:D}).catch((x)=>{console.warn("[streamAdapter] appendToolActivity failed",x)})},h=(D)=>{let x=`${X.runId}:thought`,E=q.get(x);if(!E||E.status!=="running")return;R({...E,status:"completed",completedAt:E.completedAt??D})},O=(D)=>{for(let x of q.values()){if(x.status!=="running"||x.rawTitle.toLowerCase()!=="toolsearch")continue;R({...x,status:"completed",completedAt:x.completedAt??D})}},f=(D)=>{for(let x of Array.from(q.values())){if(x.status!=="running")continue;if(x.kind==="thought"||x.rawTitle==="agent_thought")continue;R({...x,status:"completed",completedAt:x.completedAt??D})}},M="",N=0,b=null,g=null,v=(D)=>{if(D===M)return;M=D,N=Date.now(),Q({boardId:X.boardId,cardId:X.cardId,runId:X.runId,text:D}).catch((x)=>{console.warn("[streamAdapter] appendText failed",x)})},G=()=>{if(b!==null)clearTimeout(b),b=null;if(g!==null){let D=g;g=null,v(D)}},_=(D)=>{let x=Date.now()-N;if(x>=J&&b===null){v(D);return}if(g=D,b===null){let E=Math.max(0,J-x);b=setTimeout(()=>{b=null,G()},E)}};return{onSessionUpdate:async(D)=>{let x=D.update;switch(z[x.sessionUpdate]=(z[x.sessionUpdate]??0)+1,x.sessionUpdate){case"agent_message_chunk":{let E=new Date().toISOString();if(h(E),x.content.type==="text")Y+=x.content.text,_(Y);else{let k=`agent_message_chunk:${x.content.type}`;z[k]=(z[k]??0)+1}return}case"agent_thought_chunk":{if(x.content.type!=="text")return;j+=x.content.text;let E=new Date().toISOString(),k=`${X.runId}:thought`,l=q.get(k);R({toolCallId:k,rawTitle:"agent_thought",title:"Thought",kind:"thought",status:"running",startedAt:l?.startedAt??E,completedAt:null,contentPreview:k0(j.trim())});return}case"user_message_chunk":return;case"tool_call":{U+=1;let E=V3(x.title),k=X2(x.status),l=new Date().toISOString();h(l),O(l),R({toolCallId:x.toolCallId,rawTitle:E,title:K2(E,x.rawInput),kind:Q2(x.kind),status:k,startedAt:l,completedAt:k==="running"?null:l,inputPreview:x0(x.rawInput),outputPreview:W2(x.rawOutput),contentPreview:r1(x.content),locations:J2(x.locations)});return}case"tool_call_update":{let E=q.get(x.toolCallId);if(!E){let c=V3(x.title),X0=X2(x.status),s=new Date().toISOString();R({toolCallId:x.toolCallId,rawTitle:c,title:K2(c,x.rawInput),kind:Q2(x.kind),status:X0,startedAt:s,completedAt:X0==="running"?null:s,inputPreview:x0(x.rawInput),outputPreview:W2(x.rawOutput),contentPreview:r1(x.content),locations:J2(x.locations)});return}let k=x.status===void 0||x.status===null?E.status:X2(x.status),l=typeof x.title==="string"&&x.title.trim().length>0?x.title:E.rawTitle,L0=typeof x.title==="string"&&x.title.trim().length>0,y0=k==="running"?E.completedAt:E.completedAt??new Date().toISOString(),I=x.content===void 0?E.contentPreview:H3(E.contentPreview,r1(x.content)),p=x.rawOutput===void 0?E.outputPreview:H3(E.outputPreview,W2(x.rawOutput));R({...E,rawTitle:l,title:L0?K2(l,x.rawInput):E.title,kind:x.kind===void 0?E.kind:Q2(x.kind),status:k,completedAt:y0,inputPreview:x.rawInput===void 0?E.inputPreview:x0(x.rawInput),outputPreview:p,contentPreview:I,locations:x.locations===void 0?E.locations:J2(x.locations)});return}case"plan":B=x.entries;return;case"available_commands_update":return;case"current_mode_update":return;default:return}},getFinalText:()=>Y,getToolCallCount:()=>U,getLatestPlan:()=>B,getUpdateTypeCounts:()=>({...z}),flush:(D)=>{let x=new Date().toISOString();if(h(x),D?.completeOpenToolCalls)f(x);G()}}}var Y1=1,z3=-32000;function U3(Z){if(Z.awaitingInput)return!1;return Z.nowMs-Z.lastUpdateMs>=Z.windowMs}function L3(Z){if(!Z||typeof Z!=="object")return!1;return Z.code===z3}var xZ=60000,PZ=xZ,fZ=5000;function yZ(Z){let X=Math.max(1,Math.round(Z/1000));return`Runtime has not responded for ${X} ${X===1?"second":"seconds"}. Retry the agent run.`}function q3(){return{name:"ideawave-cli",title:"IdeaWave CLI",version:"0.0.66".trim()?"0.0.66":"dev"}}function x3(Z){if(Z===Y1)return;throw new T(`Unsupported ACP protocol version ${Z}; expected ${Y1}`)}function P3(Z){return LZ.toWeb(Z)}function f3(Z){return qZ.toWeb(Z)}function Y2(Z){return Z!==null&&typeof Z==="object"}function OZ(Z){if(!Array.isArray(Z))return[];let X=[];for(let Q of Z){if(!Y2(Q))continue;if(typeof Q.group==="string"&&Array.isArray(Q.options)){let K=typeof Q.name==="string"?Q.name:Q.group;for(let J of Q.options){if(!Y2(J))continue;if(typeof J.value!=="string"||typeof J.name!=="string")continue;X.push({value:J.value,name:J.name,description:typeof J.description==="string"?J.description:null,group:Q.group,groupName:K})}continue}if(typeof Q.value!=="string"||typeof Q.name!=="string")continue;X.push({value:Q.value,name:Q.name,description:typeof Q.description==="string"?Q.description:null,group:null,groupName:null})}return X}function bZ(Z){if(!Y2(Z))return null;if(typeof Z.id!=="string"||typeof Z.name!=="string")return null;let X=typeof Z.category==="string"?Z.category:null,Q=typeof Z.description==="string"?Z.description:null;if(Z.type==="select"){let K=typeof Z.currentValue==="string"?Z.currentValue:null;return{id:Z.id,name:Z.name,category:X,description:Q,type:"select",currentValue:K,options:OZ(Z.options)}}if(Z.type==="boolean"){let K=typeof Z.currentValue==="boolean"?Z.currentValue:typeof Z.value==="boolean"?Z.value:null;return{id:Z.id,name:Z.name,category:X,description:Q,type:"boolean",currentValue:K,options:[]}}return null}function V2(Z){let X=(Z.configOptions??[]).map(bZ).filter((U)=>U!==null),Q=X.find((U)=>U.type==="select"&&U.category==="model")??X.find((U)=>U.type==="select"&&U.id==="model")??null,K=Q?.options.map((U)=>({id:U.value,name:U.name,description:U.description??null})),J=vZ(Z.models),Y=K&&K.length>0?K:J&&J.length>0?J:null,j=(typeof Q?.currentValue==="string"?Q.currentValue:null)??RZ(Z.models)??null;return{models:Y,currentModelId:j,configOptions:X,modelConfigId:Q?.id??null}}function vZ(Z){if(!Z||!Array.isArray(Z.availableModels))return null;let X=[];for(let Q of Z.availableModels){if(typeof Q.modelId!=="string")continue;X.push({id:Q.modelId,name:typeof Q.name==="string"?Q.name:null,description:typeof Q.description==="string"?Q.description:null})}return X.length>0?X:null}function RZ(Z){return typeof Z?.currentModelId==="string"?Z.currentModelId:null}function CZ(Z,X){let Q=[];if(Z.trim())Q.push({type:"text",text:Z});for(let K of X)if(K.content.trim())Q.push({type:"text",text:K.content});return Q}function hZ(Z){if(typeof Z.value==="boolean")return{sessionId:Z.sessionId,configId:Z.configId,type:"boolean",value:Z.value};return{sessionId:Z.sessionId,configId:Z.configId,value:Z.value}}function MZ(Z,X){let Q=V2({configOptions:X.configOptions});return{models:Q.models??Z.models,currentModelId:Q.currentModelId??Z.currentModelId,configOptions:Q.configOptions,modelConfigId:Q.modelConfigId??Z.modelConfigId}}function y3(Z,X){if(Z==="default")return null;if(!X||X.length===0)return Z;let Q=X.find((z)=>z.id===Z);if(Q)return Q.id;let K=Z.toLowerCase(),J=K.includes("opus")?"opus":K.includes("sonnet")?"sonnet":K.includes("haiku")?"haiku":null;if(!J)return Z;let Y=(z)=>`${z.id} ${z.name??""} ${z.description??""}`.toLowerCase(),j=X.filter((z)=>Y(z).includes(J));if(j.length===0)return Z;let B=(K.includes("1m")?j.find((z)=>Y(z).includes("1m")):void 0)??j[0];return B?B.id:Z}async function o1(Z){try{let X=await Z.conn.setSessionConfigOption(hZ({sessionId:Z.sessionId,configId:Z.configId,value:Z.value}));return MZ(Z.metadata,X)}catch(X){return console.warn(`[acp] setSessionConfigOption(${Z.label}) failed; using agent default.`,X instanceof Error?X.message:X),Z.metadata}}async function j2(Z){let X=e4(Z.spawn),Q=[],K=0,J=4096;X.stderr.on("data",(I)=>{Q.push(I),K+=I.length;while(K>J*2&&Q.length>1){let p=Q.shift();if(p)K-=p.length}});let Y=()=>{let I=Buffer.concat(Q).toString("utf8");return I.length>J?I.slice(-J):I},j=Y3(Z.spawn.cwd),U={current:null},B={current:null},z={at:Date.now()},q=null,R=f3(X.stdin),h=P3(X.stdout),O=B3(R,h),M=new F3((I)=>({requestPermission:async(p)=>{let c=p.options,X0=c?.find((s)=>s.kind==="allow_once")??c?.find((s)=>s.kind==="allow_always");if(X0)return{outcome:{outcome:"selected",optionId:X0.optionId}};return{outcome:{outcome:"cancelled"}}},sessionUpdate:async(p)=>{z.at=Date.now();let c=B.current;if(c){let s=p.update.sessionUpdate;if(c.updateCount+=1,c.updateCount===1||c.lastUpdateType!==s||s==="tool_call"||s==="tool_call_update")m("acp.session_update",{runId:c.runId,cardId:c.cardId,sessionId:q,updateType:s,updateCount:c.updateCount,elapsedMs:Date.now()-c.startedAt});c.lastUpdateType=s}let X0=U.current;if(X0)await X0.onSessionUpdate(p)},readTextFile:j.readTextFile}),O),N=()=>X.kill();if(Z.signal)Z.signal.addEventListener("abort",N);let b=()=>{if(Z.signal)Z.signal.removeEventListener("abort",N)},g=async(I,p)=>{if(b(),X.kill(),L3(I))throw new c0(I.message??"Authentication required",p);if(I instanceof Error&&I.message==="ACP connection closed"){if(Z.signal?.aborted)throw new T("ACP session cancelled: abort signal received");let c=await Promise.race([X.processCrashed,X.waitForExit,new Promise((X0)=>setTimeout(()=>X0({stderr:""}),500))]);throw new T(`Runtime process exited before completion: ${c.stderr?.trim()??""}`)}throw I},v;try{v=await M.initialize({protocolVersion:Y1,clientCapabilities:t4,clientInfo:q3()})}catch(I){throw await g(I,[]),Error("unreachable")}try{x3(v.protocolVersion)}catch(I){throw b(),X.kill(),I}let G=v.authMethods?.map((I)=>I.id)??[],_;try{_=await M.newSession({cwd:Z.spawn.cwd,mcpServers:Z.mcpServers??[]})}catch(I){throw await g(I,G),Error("unreachable")}let D=_.sessionId;q=D;let x=V2(_),E=Z.modelId??null,k=E?y3(E,x.models):null;if(k&&k!==x.currentModelId)if(x.modelConfigId)x=await o1({conn:M,sessionId:D,configId:x.modelConfigId,value:k,metadata:x,label:`${x.modelConfigId}=${k}`});else console.warn(`[acp] runtime did not advertise a model config option for ${k}; using agent default.`);for(let[I,p]of Object.entries(Z.configValues??{}).sort(([c],[X0])=>c.localeCompare(X0))){if(I===x.modelConfigId)continue;if(!x.configOptions.some((c)=>c.id===I))continue;x=await o1({conn:M,sessionId:D,configId:I,value:p,metadata:x,label:`${I}=${String(p)}`})}b();let l=!1,L0=async()=>{if(l)return;l=!0,X.kill(),await Promise.race([X.waitForExit,new Promise((I)=>setTimeout(I,2000))])},y0=!1;return X.processCrashed.then(()=>{y0=!0}),{sessionId:D,availableModels:x.models,currentModelId:x.currentModelId,availableConfigOptions:x.configOptions,isAlive:()=>!l&&!y0,dispose:L0,prompt:(I)=>NZ({proc:X,conn:M,sessionId:D,activeAdapter:U,activeTrace:B,lastUpdate:z,collectStderrTail:Y},I)}}async function NZ(Z,X){let{proc:Q,conn:K,sessionId:J,activeAdapter:Y,activeTrace:j,lastUpdate:U}=Z,B=Date.now(),z=X.heartbeatMs??PZ,q=yZ(z),R={boardId:X.boardId,cardId:X.cardId,runId:X.runId},h=w3({ctx:R,appendText:X.appendText,appendToolActivity:X.appendToolActivity});Y.current=h,j.current={runId:X.runId,cardId:X.cardId,startedAt:B,updateCount:0,lastUpdateType:null},U.at=Date.now(),m("acp.prompt_started",{runId:X.runId,cardId:X.cardId,sessionId:J,heartbeatWindowMs:z});let O=!1,f=null,M=()=>Q.kill();X.signal.addEventListener("abort",M);try{let N=async()=>{let G=Math.min(fZ,Math.max(50,Math.floor(z/2)));f=setInterval(()=>{let D=X.isAwaitingInput?.()??!1;if(D){U.at=Date.now();return}if(U3({nowMs:Date.now(),lastUpdateMs:U.at,windowMs:z,awaitingInput:D}))O=!0,m("acp.inactivity_timeout",{runId:X.runId,cardId:X.cardId,sessionId:J,windowMs:z,silentForMs:Date.now()-U.at}),K.cancel({sessionId:J}).catch(()=>{return}),Q.kill()},G);let _=CZ(X.prompt.systemPrompt,X.prompt.messages);await K.prompt({sessionId:J,prompt:_}),m("acp.prompt_resolved",{runId:X.runId,cardId:X.cardId,sessionId:J,elapsedMs:Date.now()-B}),h.flush({completeOpenToolCalls:!0})},b=Q.waitForExit.then((G)=>({kind:"exited",exit:G})),g=N().then(()=>({kind:"ok"})).catch(async(G)=>{if(G instanceof Error&&G.message==="ACP connection closed")return{kind:"crashed",exit:await Promise.race([Q.processCrashed,Q.waitForExit])};throw G}),v;try{v=await Promise.race([g,Q.processCrashed.then((G)=>({kind:"crashed",exit:G})),b])}catch(G){if(O)throw new U0(q);throw G}if(O)throw new U0(q);if(v.kind==="crashed")throw new T(`Runtime process exited before completion: ${v.exit.stderr.trim()}`);if(v.kind==="exited"){if(X.signal.aborted)throw new T("ACP session cancelled: abort signal received");if(O)throw new U0(q);throw new T(`Runtime process exited unexpectedly: ${v.exit.stderr.trim()}`)}return{modelReported:"unknown",finalText:h.getFinalText(),toolCallsExecuted:h.getToolCallCount(),stderrTail:Z.collectStderrTail(),updateTypeCounts:h.getUpdateTypeCounts()}}finally{if(m("acp.prompt_finished",{runId:X.runId,cardId:X.cardId,sessionId:J,elapsedMs:Date.now()-B,timedOut:O,updateCount:j.current?.updateCount??0}),f!==null)clearInterval(f);X.signal.removeEventListener("abort",M),h.flush({completeOpenToolCalls:!0}),Y.current=null,j.current=null}}var DZ=30000;async function O3(Z){let X=e4(Z.spawn),Q=f3(X.stdin),K=P3(X.stdout),J=B3(Q,K),j=new F3((z)=>({requestPermission:async()=>({outcome:{outcome:"cancelled"}}),sessionUpdate:async()=>{return},readTextFile:async()=>({content:""})}),J),U=()=>X.kill();if(Z.signal)Z.signal.addEventListener("abort",U);let B=null;try{let z=(async()=>{let R=await j.initialize({protocolVersion:Y1,clientCapabilities:t4,clientInfo:q3()});x3(R.protocolVersion);let h=R.authMethods?.map((v)=>v.id)??[],O;try{O=await j.newSession({cwd:Z.spawn.cwd,mcpServers:[]})}catch(v){if(L3(v))throw new c0(v.message??"Authentication required",h);throw v}let f=V2(O),M=Z.modelId??null,N=M?y3(M,f.models):null;if(N&&N!==f.currentModelId)if(f.modelConfigId)f=await o1({conn:j,sessionId:O.sessionId,configId:f.modelConfigId,value:N,metadata:f,label:`${f.modelConfigId}=${N}`});else console.warn(`[acp] runtime did not advertise a model config option for ${N}; discovering agent default models.`);for(let[v,G]of Object.entries(Z.configValues??{}).sort(([_],[D])=>_.localeCompare(D))){if(v===f.modelConfigId)continue;if(!f.configOptions.some((_)=>_.id===v))continue;f=await o1({conn:j,sessionId:O.sessionId,configId:v,value:G,metadata:f,label:`${v}=${String(G)}`})}let b=f.models??[],g=f.currentModelId;return j.cancel({sessionId:O.sessionId}).catch(()=>{return}),{models:b,configOptions:f.configOptions,currentModelId:g}})(),q=new Promise((R,h)=>{B=setTimeout(()=>{h(new U0)},DZ)});return await Promise.race([z,q])}catch(z){if(z instanceof Error&&z.message==="ACP connection closed"){if(Z.signal?.aborted)throw new T("ACP model discovery cancelled: abort signal received");throw new T("Runtime process exited during model discovery.")}throw z}finally{if(B)clearTimeout(B);if(Z.signal)Z.signal.removeEventListener("abort",U);X.kill()}}import gZ from"node:fs/promises";import n1 from"node:os";async function b3(Z){let X={version:1,globalDefaultConfigId:null,runtimes:[],boardOverrides:{},cardOverrides:{}},Q;try{Q=await gZ.readFile(Z,"utf-8")}catch(K){if(K.code==="ENOENT")return structuredClone(X);throw K}return E1.parse(JSON.parse(Q))}function H2(Z,X,Q){return{...Z.defaultConfigValues??{},...X?.configValues??{},...Q?.configValues??{}}}async function R0(Z){let X=Z.configPath?await b3(Z.configPath):await W0(),Q=Z.cardId?X.cardOverrides[Z.cardId]:void 0;if(Q?.runtimeConfigId){let J=X.runtimes.find((Y)=>Y.id===Q.runtimeConfigId);if(J)return{entry:J,adapter:F0(J),runFolder:Q.runFolder??J.runFolder??n1.homedir(),modelId:Q.modelId??J.defaultModelId??null,configValues:H2(J,void 0,Q)}}let K=X.boardOverrides[Z.boardId];if(K?.runtimeConfigId){let J=X.runtimes.find((Y)=>Y.id===K.runtimeConfigId);if(J)return{entry:J,adapter:F0(J),runFolder:K.runFolder??J.runFolder??n1.homedir(),modelId:K.modelId??J.defaultModelId??null,configValues:H2(J,K)}}if(X.globalDefaultConfigId){let J=X.runtimes.find((Y)=>Y.id===X.globalDefaultConfigId);if(J)return{entry:J,adapter:F0(J),runFolder:Q?.runFolder??K?.runFolder??J.runFolder??n1.homedir(),modelId:Q?.modelId??K?.modelId??J.defaultModelId??null,configValues:H2(J,K,Q)}}throw new E0}async function v3(Z,X={}){let K=(X.configPath?await b3(X.configPath):await W0()).runtimes.find((J)=>J.id===Z);if(!K)return null;return{entry:K,adapter:F0(K),runFolder:K.runFolder??n1.homedir(),modelId:X.modelId??K.defaultModelId??null,configValues:{...K.defaultConfigValues??{},...X.configValues??{}}}}var R3=new Map;function w2(Z,X){if(!Z)return;R3.set(Z,X)}function C3(Z){if(!Z)return!1;return R3.get(Z)??!1}var _0=new Map,z2=new Set;function F2(Z){_0.get(Z)?.controller.abort()}function h3(Z){for(let[X,Q]of _0){if(Q.frontendSessionId!==Z)continue;Q.controller.abort(),_0.delete(X)}}function M3(){for(let Z of _0.values())Z.controller.abort();_0.clear()}function U2(Z,X){if(X?.aborted)return!0;return Z instanceof Error&&/abort signal received|session cancelled/i.test(Z.message)}function N3(Z,X,Q,K){if((!X.availableModels||X.availableModels.length===0)&&X.availableConfigOptions.length===0)return;j0((J)=>{let Y=J.runtimes.find((j)=>j.id===Z);if(Y){if(X.availableModels&&X.availableModels.length>0)Y.discoveredModels=i1({adapterId:Q,models:X.availableModels,currentModelId:X.currentModelId??K});if(X.availableConfigOptions.length>0)Y.discoveredConfigOptions=X.availableConfigOptions}}).catch(()=>{return})}function $Z(Z,X){return`${Z}
807
897
 
808
898
  Runtime run folder:
809
899
  - Effective run folder: ${X}
810
900
  - When the user says "my folder", "current folder", or "run folder", they mean this selected runtime folder.
811
901
  - Use list_run_folder and read_run_folder_file for run-folder inspection. Do not use attached context-card tools for this unless the user asks about attached board context.
812
- - Filesystem access is read-only and limited to this folder. Hidden/config folders and outside-folder paths are unavailable.`}async function N8(Z,X){let Q=Date.now(),K=new AbortController;_0.set(Z.runId,{controller:K,frontendSessionId:Z.frontendSessionId}),w2.add(Z.cardId),m("cli.run_started",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId});let Y=h4(Z.userId,Z.frontendSessionId,Z.cardId),J=!1,H=null;try{let B=(Z.runtimeConfigIdHint?await b8(Z.runtimeConfigIdHint,{modelId:Z.modelHint??null}):null)??await R0({boardId:Z.boardId,cardId:Z.cardId}),U=await B.adapter.resolveSpawnConfig(B.entry),q=Z.toolSurface??"full",h=B.adapter.supportsImages===!0;H=U;let M=D4({userId:Z.userId,frontendSessionId:Z.frontendSessionId,boardId:Z.boardId,toolSurface:q,imagesSupported:h,cardId:Z.cardId,runFolder:B.runFolder}),O=M?[M]:[];z2(Z.cardId,h);let f=Z.modelHint??B.modelId,C=N4({adapterId:B.adapter.id,configId:B.entry.id,modelId:f,configValues:B.configValues,mcpUrl:M?.url??null,runFolder:B.runFolder,toolSurface:q});m("cli.session_acquire_started",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId});let N=await D1({key:Y,frontendSessionId:Z.frontendSessionId,fingerprint:C,open:()=>j2({spawn:{...U,cwd:B.runFolder},mcpServers:O,modelId:f,configValues:B.configValues,signal:K.signal})});m("cli.session_acquired",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId,elapsedMs:Date.now()-Q}),M8(B.entry.id,N,B.adapter.id,f);let b;try{let $=0,v="";m("cli.prompt_started",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q}),b=await N.prompt({runId:Z.runId,boardId:Z.boardId,cardId:Z.cardId,prompt:{systemPrompt:$Z(Z.systemPrompt,B.runFolder),messages:Z.promptMessages.map((G)=>({role:G.role,content:G.content}))},signal:K.signal,appendText:async({text:G})=>{if($+=1,$===1)m("cli.first_partial_text_forwarded",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,textLength:G.length});X({type:"partial_text",runId:Z.runId,cardId:Z.cardId,text:G})},appendToolActivity:async({entry:G})=>{let _=`${G.toolCallId}:${G.status}`;if(_!==v)v=_,m("cli.tool_activity_forwarded",{runId:Z.runId,cardId:Z.cardId,toolCallId:G.toolCallId,toolStatus:G.status,elapsedMs:Date.now()-Q});X({type:"tool_activity",runId:Z.runId,cardId:Z.cardId,activity:G})}})}catch($){if(!N.isAlive()||$ instanceof T||$ instanceof U0)J=!0;throw $}X({type:"run_settled",runId:Z.runId,cardId:Z.cardId,result:{assistantContent:b.finalText,model:b.modelReported??null,latencyMs:Date.now()-Q,errorText:null,partialText:null}}),m("cli.run_settled",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,hasError:!1})}catch(w){let B=w instanceof Error?w.message:"Agent run failed";if(w instanceof T&&H&&!U2(w,K.signal))T4(H,B);if(!U2(w,K.signal))console.error(`[ideawave-cli] run ${Z.runId} failed:`,B);X({type:"run_settled",runId:Z.runId,cardId:Z.cardId,result:{assistantContent:"",model:null,latencyMs:Date.now()-Q,errorText:B,partialText:null}}),m("cli.run_settled",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,hasError:!0,errorName:w instanceof Error?w.name:"unknown"})}finally{M4(Y,J),_0.delete(Z.runId),w2.delete(Z.cardId),m("cli.run_released",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,sessionDead:J})}}async function D8(Z){if(w2.has(Z.cardId))return{status:"skipped"};let X=h4(Z.userId,Z.frontendSessionId,Z.cardId),Q=null;try{let K=await R0({boardId:Z.boardId,cardId:Z.cardId}),Y=await K.adapter.resolveSpawnConfig(K.entry);Q=Y;let J=D4({userId:Z.userId,frontendSessionId:Z.frontendSessionId,boardId:Z.boardId,cardId:Z.cardId,runFolder:K.runFolder}),H=J?[J]:[];z2(Z.cardId,K.adapter.supportsImages===!0);let w=N4({adapterId:K.adapter.id,configId:K.entry.id,modelId:K.modelId,configValues:K.configValues,mcpUrl:J?.url??null,runFolder:K.runFolder}),B=new AbortController,U=await D1({key:X,frontendSessionId:Z.frontendSessionId,fingerprint:w,open:()=>j2({spawn:{...Y,cwd:K.runFolder},mcpServers:H,modelId:K.modelId,configValues:K.configValues,signal:B.signal})});return M8(K.entry.id,U,K.adapter.id,K.modelId),M4(X,!1),console.log(`[ideawave-cli] warmed runtime for card ${Z.cardId}`),{status:"ready"}}catch(K){if(K instanceof E0)return{status:"skipped"};let Y=K instanceof Error?K.message:String(K);if(K instanceof T&&Q&&!U2(K))T4(Q,Y);if(K instanceof T&&/(not ready|installing|warming|retry in a moment)/i.test(Y))return{status:"retryable",error:Y};return console.warn(`[ideawave-cli] warmup failed for card ${Z.cardId}:`,Y),{status:"failed",error:Y}}}import{spawn as AZ}from"node:child_process";import{randomUUID as A8}from"node:crypto";import{access as uZ,mkdir as u8}from"node:fs/promises";import{createRequire as cZ}from"node:module";import{homedir as q2,platform as c8}from"node:os";import{dirname as lZ,join as h0}from"node:path";import{randomBytes as E8,timingSafeEqual as GZ}from"node:crypto";import{lookup as EZ}from"node:dns/promises";import m8 from"node:http";import mZ from"node:https";import kZ from"node:net";import{isIP as $8}from"node:net";var g8=12582912;function gZ(Z){let X=Z.split(".").map(Number);return X.length===4&&X.every((Q)=>Number.isInteger(Q)&&Q>=0&&Q<=255)?X:null}function H0(Z,X,Q=0,K=255){return Z[0]===X&&(Z[1]??0)>=Q&&(Z[1]??0)<=K}function B2(Z){let X=$8(Z);if(X===4){let Y=gZ(Z);if(!Y)return!1;if(H0(Y,0))return!1;if(H0(Y,10))return!1;if(H0(Y,100,64,127))return!1;if(H0(Y,127))return!1;if(H0(Y,169,254,254))return!1;if(H0(Y,172,16,31))return!1;if(H0(Y,192,0,0))return!1;if(H0(Y,192,168,168))return!1;if(H0(Y,198,18,19))return!1;if(H0(Y,198,51,51)&&Y[2]===100)return!1;if(H0(Y,203,0,0)&&Y[2]===113)return!1;if((Y[0]??0)>=224)return!1;return!0}if(X!==6)return!1;let Q=Z.toLowerCase().split("%")[0]??"";if(Q==="::"||Q==="::1")return!1;if(Q.startsWith("::"))return!1;if(Q.startsWith("fc")||Q.startsWith("fd"))return!1;if(/^fe[89a-f]/.test(Q))return!1;if(Q.startsWith("ff"))return!1;let K=Number.parseInt(Q.split(":")[0]??"",16);if(!Number.isFinite(K)||K<8192||K>16383)return!1;if(Q.startsWith("2002:"))return!1;if(Q.startsWith("3fff:"))return!1;if(Q==="2001::"||Q.startsWith("2001:0:"))return!1;if(Q.startsWith("2001:db8:"))return!1;if(Q.startsWith("2001:2:"))return!1;if(Q.startsWith("2001:10:"))return!1;if(Q.startsWith("2001:20:"))return!1;return!0}function C0(Z){let X;try{X=new URL(Z)}catch{throw Error("Browser URL is invalid")}if(X.protocol!=="http:"&&X.protocol!=="https:")throw Error("Only HTTP(S) browser URLs are allowed");if(X.username||X.password)throw Error("Browser URLs containing credentials are not allowed");let Q=X.hostname.replace(/^\[|\]$/g,"");if($8(Q)&&!B2(Q))throw Error("Browser destination is not on a public network");return X.hash="",X}function G8(Z){return(X,Q,K)=>{if(Q.all){K(null,[Z]);return}K(null,Z.address,Z.family)}}var k8=30000;async function I8(Z){return(await EZ(Z,{all:!0,verbatim:!0})).flatMap((Q)=>Q.family===4||Q.family===6?[{address:Q.address,family:Q.family}]:[])}async function _8(Z,X=I8){let Q=await X(Z);if(Q.length===0)throw Error("Browser destination did not resolve");if(Q.some((K)=>!B2(K.address)))throw Error("Browser destination resolves to a non-public network");return Q.find((K)=>K.family===4)??Q[0]}function T8(Z){return Array.isArray(Z)?Z[0]:Z}function _Z(Z,X){let Q=Buffer.from(Z),K=Buffer.from(X);return Q.byteLength===K.byteLength&&GZ(Q,K)}function S8(Z){let X={...Z},Q=T8(Z.connection)?.split(",").map((K)=>K.trim().toLowerCase()).filter(Boolean);for(let K of[...Q??[],"connection","proxy-authenticate","proxy-authorization","proxy-connection","keep-alive","te","trailer","transfer-encoding","upgrade"])delete X[K];return X}function SZ(Z){let X;try{X=new URL(`http://${Z}`)}catch{throw Error("Browser proxy CONNECT target is invalid")}let Q=Number(X.port||"443");if(!X.hostname||X.username||X.password||X.pathname!=="/"||X.search||X.hash||!Number.isInteger(Q)||Q<1||Q>65535)throw Error("Browser proxy CONNECT target is invalid");return{hostname:X.hostname.replace(/^\[|\]$/g,""),port:Q}}function IZ(Z){return new Promise((X,Q)=>{let K=(J)=>{Z.off("listening",Y),Q(J)},Y=()=>{Z.off("error",K);let J=Z.address();if(!J||typeof J==="string"){Q(Error("Headless browser proxy did not bind a TCP port"));return}X(J.port)};Z.once("error",K),Z.once("listening",Y),Z.listen(0,"127.0.0.1")})}function TZ(Z,X){let Q=()=>{if(!Z.destroyed)Z.destroy()},K=()=>{if(!X.destroyed)X.destroy()};Z.on("error",K),Z.once("close",K),X.on("error",Q),X.once("close",Q)}class L2{resolver;username=`ideawave-${E8(12).toString("hex")}`;password=E8(24).toString("base64url");sockets=new Set;server=null;port=null;constructor(Z=I8){this.resolver=Z}get serverUrl(){if(!this.port)throw Error("Headless browser proxy is not running");return`http://127.0.0.1:${this.port}`}authorized(Z){let X=`Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`;return _Z(T8(Z.headers["proxy-authorization"])??"",X)}rejectAuthentication(Z){Z.writeHead(407,{"content-type":"text/plain; charset=utf-8","proxy-authenticate":'Basic realm="IdeaWave browser"'}),Z.end("Proxy authentication required")}async handleHttp(Z,X){if(!this.authorized(Z)){this.rejectAuthentication(X);return}let Q;try{Q=C0(Z.url??"")}catch(K){X.writeHead(400,{"content-type":"text/plain; charset=utf-8"}),X.end(K instanceof Error?K.message:"Invalid target");return}try{let K=await _8(Q.hostname,this.resolver),J=(Q.protocol==="https:"?mZ:m8).request(Q,{method:Z.method,headers:S8(Z.headers),lookup:G8(K)});J.setTimeout(k8,()=>{J.destroy(Error("Browser request timed out"))}),J.once("response",(H)=>{X.writeHead(H.statusCode??502,S8(H.headers)),H.pipe(X)}),J.once("error",(H)=>{if(X.headersSent)X.destroy(H);else X.writeHead(502,{"content-type":"text/plain; charset=utf-8"}),X.end("Browser request failed")}),Z.pipe(J)}catch(K){X.writeHead(403,{"content-type":"text/plain; charset=utf-8"}),X.end(K instanceof Error?K.message:"Browser destination blocked")}}async handleConnect(Z,X,Q){if(!this.authorized(Z)){X.end(`HTTP/1.1 407 Proxy Authentication Required\r
902
+ - Filesystem access is read-only and limited to this folder. Hidden/config folders and outside-folder paths are unavailable.`}async function D3(Z,X){let Q=Date.now(),K=new AbortController;_0.set(Z.runId,{controller:K,frontendSessionId:Z.frontendSessionId}),z2.add(Z.cardId),m("cli.run_started",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId});let J=h4(Z.userId,Z.frontendSessionId,Z.cardId),Y=!1,j=null;try{let B=(Z.runtimeConfigIdHint?await v3(Z.runtimeConfigIdHint,{modelId:Z.modelHint??null}):null)??await R0({boardId:Z.boardId,cardId:Z.cardId}),z=await B.adapter.resolveSpawnConfig(B.entry),q=Z.toolSurface??"full",R=B.adapter.supportsImages===!0;j=z;let h=D4({userId:Z.userId,frontendSessionId:Z.frontendSessionId,boardId:Z.boardId,toolSurface:q,imagesSupported:R,cardId:Z.cardId,runFolder:B.runFolder}),O=h?[h]:[];w2(Z.cardId,R);let f=Z.modelHint??B.modelId,M=N4({adapterId:B.adapter.id,configId:B.entry.id,modelId:f,configValues:B.configValues,mcpUrl:h?.url??null,runFolder:B.runFolder,toolSurface:q});m("cli.session_acquire_started",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId});let N=await D1({key:J,frontendSessionId:Z.frontendSessionId,fingerprint:M,open:()=>j2({spawn:{...z,cwd:B.runFolder},mcpServers:O,modelId:f,configValues:B.configValues,signal:K.signal})});m("cli.session_acquired",{runId:Z.runId,cardId:Z.cardId,frontendSessionId:Z.frontendSessionId,elapsedMs:Date.now()-Q}),N3(B.entry.id,N,B.adapter.id,f);let b;try{let g=0,v="";m("cli.prompt_started",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q}),b=await N.prompt({runId:Z.runId,boardId:Z.boardId,cardId:Z.cardId,prompt:{systemPrompt:$Z(Z.systemPrompt,B.runFolder),messages:Z.promptMessages.map((G)=>({role:G.role,content:G.content}))},signal:K.signal,appendText:async({text:G})=>{if(g+=1,g===1)m("cli.first_partial_text_forwarded",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,textLength:G.length});X({type:"partial_text",runId:Z.runId,cardId:Z.cardId,text:G})},appendToolActivity:async({entry:G})=>{let _=`${G.toolCallId}:${G.status}`;if(_!==v)v=_,m("cli.tool_activity_forwarded",{runId:Z.runId,cardId:Z.cardId,toolCallId:G.toolCallId,toolStatus:G.status,elapsedMs:Date.now()-Q});X({type:"tool_activity",runId:Z.runId,cardId:Z.cardId,activity:G})}})}catch(g){if(!N.isAlive()||g instanceof T||g instanceof U0)Y=!0;throw g}X({type:"run_settled",runId:Z.runId,cardId:Z.cardId,result:{assistantContent:b.finalText,model:b.modelReported??null,latencyMs:Date.now()-Q,errorText:null,partialText:null}}),m("cli.run_settled",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,hasError:!1})}catch(U){let B=U instanceof Error?U.message:"Agent run failed";if(U instanceof T&&j&&!U2(U,K.signal))T4(j,B);if(!U2(U,K.signal))console.error(`[ideawave-cli] run ${Z.runId} failed:`,B);X({type:"run_settled",runId:Z.runId,cardId:Z.cardId,result:{assistantContent:"",model:null,latencyMs:Date.now()-Q,errorText:B,partialText:null}}),m("cli.run_settled",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,hasError:!0,errorName:U instanceof Error?U.name:"unknown"})}finally{M4(J,Y),_0.delete(Z.runId),z2.delete(Z.cardId),m("cli.run_released",{runId:Z.runId,cardId:Z.cardId,elapsedMs:Date.now()-Q,sessionDead:Y})}}async function g3(Z){if(z2.has(Z.cardId))return{status:"skipped"};let X=h4(Z.userId,Z.frontendSessionId,Z.cardId),Q=null;try{let K=await R0({boardId:Z.boardId,cardId:Z.cardId}),J=await K.adapter.resolveSpawnConfig(K.entry);Q=J;let Y=D4({userId:Z.userId,frontendSessionId:Z.frontendSessionId,boardId:Z.boardId,cardId:Z.cardId,runFolder:K.runFolder}),j=Y?[Y]:[];w2(Z.cardId,K.adapter.supportsImages===!0);let U=N4({adapterId:K.adapter.id,configId:K.entry.id,modelId:K.modelId,configValues:K.configValues,mcpUrl:Y?.url??null,runFolder:K.runFolder}),B=new AbortController,z=await D1({key:X,frontendSessionId:Z.frontendSessionId,fingerprint:U,open:()=>j2({spawn:{...J,cwd:K.runFolder},mcpServers:j,modelId:K.modelId,configValues:K.configValues,signal:B.signal})});return N3(K.entry.id,z,K.adapter.id,K.modelId),M4(X,!1),console.log(`[ideawave-cli] warmed runtime for card ${Z.cardId}`),{status:"ready"}}catch(K){if(K instanceof E0)return{status:"skipped"};let J=K instanceof Error?K.message:String(K);if(K instanceof T&&Q&&!U2(K))T4(Q,J);if(K instanceof T&&/(not ready|installing|warming|retry in a moment)/i.test(J))return{status:"retryable",error:J};return console.warn(`[ideawave-cli] warmup failed for card ${Z.cardId}:`,J),{status:"failed",error:J}}}import{spawn as uZ}from"node:child_process";import{randomUUID as u3}from"node:crypto";import{access as cZ,mkdir as c3}from"node:fs/promises";import{createRequire as lZ}from"node:module";import{homedir as q2,platform as l3}from"node:os";import{dirname as iZ,join as h0}from"node:path";import{randomBytes as m3,timingSafeEqual as EZ}from"node:crypto";import{lookup as mZ}from"node:dns/promises";import k3 from"node:http";import kZ from"node:https";import _Z from"node:net";import{isIP as $3}from"node:net";var G3=12582912;function GZ(Z){let X=Z.split(".").map(Number);return X.length===4&&X.every((Q)=>Number.isInteger(Q)&&Q>=0&&Q<=255)?X:null}function H0(Z,X,Q=0,K=255){return Z[0]===X&&(Z[1]??0)>=Q&&(Z[1]??0)<=K}function B2(Z){let X=$3(Z);if(X===4){let J=GZ(Z);if(!J)return!1;if(H0(J,0))return!1;if(H0(J,10))return!1;if(H0(J,100,64,127))return!1;if(H0(J,127))return!1;if(H0(J,169,254,254))return!1;if(H0(J,172,16,31))return!1;if(H0(J,192,0,0))return!1;if(H0(J,192,168,168))return!1;if(H0(J,198,18,19))return!1;if(H0(J,198,51,51)&&J[2]===100)return!1;if(H0(J,203,0,0)&&J[2]===113)return!1;if((J[0]??0)>=224)return!1;return!0}if(X!==6)return!1;let Q=Z.toLowerCase().split("%")[0]??"";if(Q==="::"||Q==="::1")return!1;if(Q.startsWith("::"))return!1;if(Q.startsWith("fc")||Q.startsWith("fd"))return!1;if(/^fe[89a-f]/.test(Q))return!1;if(Q.startsWith("ff"))return!1;let K=Number.parseInt(Q.split(":")[0]??"",16);if(!Number.isFinite(K)||K<8192||K>16383)return!1;if(Q.startsWith("2002:"))return!1;if(Q.startsWith("3fff:"))return!1;if(Q==="2001::"||Q.startsWith("2001:0:"))return!1;if(Q.startsWith("2001:db8:"))return!1;if(Q.startsWith("2001:2:"))return!1;if(Q.startsWith("2001:10:"))return!1;if(Q.startsWith("2001:20:"))return!1;return!0}function C0(Z){let X;try{X=new URL(Z)}catch{throw Error("Browser URL is invalid")}if(X.protocol!=="http:"&&X.protocol!=="https:")throw Error("Only HTTP(S) browser URLs are allowed");if(X.username||X.password)throw Error("Browser URLs containing credentials are not allowed");let Q=X.hostname.replace(/^\[|\]$/g,"");if($3(Q)&&!B2(Q))throw Error("Browser destination is not on a public network");return X.hash="",X}function E3(Z){return(X,Q,K)=>{if(Q.all){K(null,[Z]);return}K(null,Z.address,Z.family)}}var _3=30000;async function T3(Z){return(await mZ(Z,{all:!0,verbatim:!0})).flatMap((Q)=>Q.family===4||Q.family===6?[{address:Q.address,family:Q.family}]:[])}async function S3(Z,X=T3){let Q=await X(Z);if(Q.length===0)throw Error("Browser destination did not resolve");if(Q.some((K)=>!B2(K.address)))throw Error("Browser destination resolves to a non-public network");return Q.find((K)=>K.family===4)??Q[0]}function A3(Z){return Array.isArray(Z)?Z[0]:Z}function SZ(Z,X){let Q=Buffer.from(Z),K=Buffer.from(X);return Q.byteLength===K.byteLength&&EZ(Q,K)}function I3(Z){let X={...Z},Q=A3(Z.connection)?.split(",").map((K)=>K.trim().toLowerCase()).filter(Boolean);for(let K of[...Q??[],"connection","proxy-authenticate","proxy-authorization","proxy-connection","keep-alive","te","trailer","transfer-encoding","upgrade"])delete X[K];return X}function IZ(Z){let X;try{X=new URL(`http://${Z}`)}catch{throw Error("Browser proxy CONNECT target is invalid")}let Q=Number(X.port||"443");if(!X.hostname||X.username||X.password||X.pathname!=="/"||X.search||X.hash||!Number.isInteger(Q)||Q<1||Q>65535)throw Error("Browser proxy CONNECT target is invalid");return{hostname:X.hostname.replace(/^\[|\]$/g,""),port:Q}}function TZ(Z){return new Promise((X,Q)=>{let K=(Y)=>{Z.off("listening",J),Q(Y)},J=()=>{Z.off("error",K);let Y=Z.address();if(!Y||typeof Y==="string"){Q(Error("Headless browser proxy did not bind a TCP port"));return}X(Y.port)};Z.once("error",K),Z.once("listening",J),Z.listen(0,"127.0.0.1")})}function AZ(Z,X){let Q=()=>{if(!Z.destroyed)Z.destroy()},K=()=>{if(!X.destroyed)X.destroy()};Z.on("error",K),Z.once("close",K),X.on("error",Q),X.once("close",Q)}class L2{resolver;username=`ideawave-${m3(12).toString("hex")}`;password=m3(24).toString("base64url");sockets=new Set;server=null;port=null;constructor(Z=T3){this.resolver=Z}get serverUrl(){if(!this.port)throw Error("Headless browser proxy is not running");return`http://127.0.0.1:${this.port}`}authorized(Z){let X=`Basic ${Buffer.from(`${this.username}:${this.password}`).toString("base64")}`;return SZ(A3(Z.headers["proxy-authorization"])??"",X)}rejectAuthentication(Z){Z.writeHead(407,{"content-type":"text/plain; charset=utf-8","proxy-authenticate":'Basic realm="IdeaWave browser"'}),Z.end("Proxy authentication required")}async handleHttp(Z,X){if(!this.authorized(Z)){this.rejectAuthentication(X);return}let Q;try{Q=C0(Z.url??"")}catch(K){X.writeHead(400,{"content-type":"text/plain; charset=utf-8"}),X.end(K instanceof Error?K.message:"Invalid target");return}try{let K=await S3(Q.hostname,this.resolver),Y=(Q.protocol==="https:"?kZ:k3).request(Q,{method:Z.method,headers:I3(Z.headers),lookup:E3(K)});Y.setTimeout(_3,()=>{Y.destroy(Error("Browser request timed out"))}),Y.once("response",(j)=>{X.writeHead(j.statusCode??502,I3(j.headers)),j.pipe(X)}),Y.once("error",(j)=>{if(X.headersSent)X.destroy(j);else X.writeHead(502,{"content-type":"text/plain; charset=utf-8"}),X.end("Browser request failed")}),Z.pipe(Y)}catch(K){X.writeHead(403,{"content-type":"text/plain; charset=utf-8"}),X.end(K instanceof Error?K.message:"Browser destination blocked")}}async handleConnect(Z,X,Q){if(!this.authorized(Z)){X.end(`HTTP/1.1 407 Proxy Authentication Required\r
813
903
  Proxy-Authenticate: Basic realm="IdeaWave browser"\r
814
904
  Connection: close\r
815
905
  \r
816
- `);return}try{let K=SZ(Z.url??""),Y=await _8(K.hostname,this.resolver),J=kZ.connect({host:Y.address,family:Y.family,port:K.port});this.sockets.add(J),TZ(X,J),J.setTimeout(k8,()=>J.destroy()),J.once("connect",()=>{if(X.write(`HTTP/1.1 200 Connection Established\r
906
+ `);return}try{let K=IZ(Z.url??""),J=await S3(K.hostname,this.resolver),Y=_Z.connect({host:J.address,family:J.family,port:K.port});this.sockets.add(Y),AZ(X,Y),Y.setTimeout(_3,()=>Y.destroy()),Y.once("connect",()=>{if(X.write(`HTTP/1.1 200 Connection Established\r
817
907
  \r
818
- `),Q.byteLength>0)J.write(Q);X.pipe(J),J.pipe(X)}),J.once("close",()=>this.sockets.delete(J))}catch(K){X.end(`HTTP/1.1 403 Forbidden\r
908
+ `),Q.byteLength>0)Y.write(Q);X.pipe(Y),Y.pipe(X)}),Y.once("close",()=>this.sockets.delete(Y))}catch(K){X.end(`HTTP/1.1 403 Forbidden\r
819
909
  Content-Type: text/plain; charset=utf-8\r
820
910
  Connection: close\r
821
911
  \r
822
- ${K instanceof Error?K.message:"Browser destination blocked"}`)}}async start(){if(this.server)return;let Z=m8.createServer((X,Q)=>{this.handleHttp(X,Q).catch((K)=>{if(Q.headersSent)Q.destroy(K);else Q.writeHead(500),Q.end()})});Z.on("connect",(X,Q,K)=>{this.handleConnect(X,Q,K).catch(()=>Q.destroy())}),Z.on("connection",(X)=>{this.sockets.add(X),X.on("error",()=>X.destroy()),X.once("close",()=>this.sockets.delete(X))}),this.port=await IZ(Z),this.server=Z}async close(){let Z=this.server;this.server=null,this.port=null;for(let X of this.sockets)X.destroy();if(this.sockets.clear(),!Z)return;await new Promise((X)=>Z.close(()=>X()))}}var l8=8,dZ={width:720,height:442},iZ=320,aZ=180,d8=2048,pZ=45000,sZ=12582912,i8=300;function a8(Z,X,Q){return Math.min(Q,Math.max(X,Math.round(Z)))}function rZ(){if(c8()==="darwin")return h0(q2(),"Library","Application Support","IdeaWave","browser");if(c8()==="win32")return h0(process.env.LOCALAPPDATA??h0(q2(),"AppData","Local"),"IdeaWave","browser");return h0(process.env.XDG_CONFIG_HOME??h0(q2(),".config"),"ideawave","browser")}function oZ(Z=rZ()){return{profile:h0(Z,"profile"),browsers:h0(Z,"engines")}}async function nZ(Z){let Q=cZ(import.meta.url).resolve("playwright-core/package.json"),K=h0(lZ(Q),"cli.js");await new Promise((Y,J)=>{let H=AZ(process.execPath,[K,"install","chromium","--no-shell"],{stdio:"inherit",env:{...process.env,PLAYWRIGHT_BROWSERS_PATH:Z}});H.once("error",J),H.once("exit",(w)=>{if(w===0)Y();else J(Error(`Chromium installation exited with code ${w??"unknown"}`))})})}function tZ(Z){return{headless:!0,viewport:dZ,acceptDownloads:!1,serviceWorkers:"allow",proxy:{server:Z.serverUrl,username:Z.username,password:Z.password},args:["--disable-quic","--disable-session-crashed-bubble","--hide-crash-restore-bubble","--no-first-run","--proxy-bypass-list=<-loopback>","--force-webrtc-ip-handling-policy=disable_non_proxied_udp"]}}async function x2(Z){let X=[...Z.values()].map((Q)=>Q.handle);Z.clear(),await Promise.all(X.map((Q)=>Q.dispose().catch(()=>{return})))}async function eZ(Z){let X=[],Q=Z;while(Q?.parentFrame()){let Y=await(await Q.frameElement()).evaluate((J)=>{if(J.id)return`#${globalThis.CSS?.escape?globalThis.CSS.escape(J.id):J.id.replace(/[^a-zA-Z0-9_-]/g,(U)=>`\\${U}`)}`;let H=[],w=J;while(w&&w!==w.ownerDocument.documentElement&&H.length<8){let B=w.localName||"*",U=w.parentElement;if(U){let q=[...U.children].filter((h)=>h.localName===w?.localName);if(q.length>1)B+=`:nth-of-type(${q.indexOf(w)+1})`}H.unshift(B),w=U}return H.join(" > ")});X.unshift(Y||"iframe"),Q=Q.parentFrame()}return X}async function p8(Z){return Z.evaluate((X)=>{let Q=null;if(X.id)Q=`#${globalThis.CSS?.escape?globalThis.CSS.escape(X.id):X.id.replace(/[^a-zA-Z0-9_-]/g,(H)=>`\\${H}`)}`;else{let J=[],H=X;while(H&&H!==H.ownerDocument.documentElement&&J.length<8){let w=H.localName||"*",B=H.parentElement;if(B){let U=[...B.children].filter((q)=>q.localName===H?.localName);if(U.length>1)w+=`:nth-of-type(${U.indexOf(H)+1})`}J.unshift(w),H=B}Q=J.join(" > ")||null}let K=(X.innerText||X.textContent||"").replace(/\s+/g," ").trim().slice(0,500),Y={tag:X.localName,text:K,selector:Q};if(X instanceof HTMLAnchorElement)Y.href=X.href;if(X instanceof HTMLInputElement)Y.inputType=X.type,Y.value=X.type==="password"?"":X.value.slice(0,500);if(X instanceof HTMLButtonElement||X instanceof HTMLInputElement||X instanceof HTMLSelectElement||X instanceof HTMLTextAreaElement)Y.disabled=X.disabled;return Y})}class s8{page;onClose;revision=A8();refs=new Map;refCounter=0;eventListeners=new Set;frameListeners=new Set;cdp=null;stateTimer=null;closed=!1;constructor(Z,X){this.page=Z;this.onClose=X}async initialize(Z){this.page.setDefaultNavigationTimeout(pZ),this.page.setDefaultTimeout(12000),this.page.on("framenavigated",(X)=>{if(X!==this.page.mainFrame()||!/^https?:/.test(X.url()))return;this.revision=A8(),x2(this.refs),this.emitSoon()}),this.page.on("domcontentloaded",()=>this.emitSoon()),this.page.on("load",()=>this.emitSoon()),this.page.on("download",(X)=>void X.cancel()),this.page.on("popup",(X)=>{(async()=>{await X.waitForLoadState("domcontentloaded",{timeout:5000}).catch(()=>{return});let Q=X.url();if(await X.close().catch(()=>{return}),/^https?:/.test(Q))await this.navigate(Q)})().catch(()=>{return})}),this.cdp=await this.page.context().newCDPSession(this.page),this.cdp.on("Page.screencastFrame",(X)=>{let Q=Buffer.from(X.data,"base64");for(let K of this.frameListeners)K(Q);this.cdp?.send("Page.screencastFrameAck",{sessionId:X.sessionId})}),await this.cdp.send("Page.startScreencast",{format:"jpeg",quality:75,everyNthFrame:2}),await this.navigate(Z)}get currentRevision(){return this.revision}get currentUrl(){return this.page.url()}onEvent(Z){return this.eventListeners.add(Z),this.state().then((X)=>Z({event:"state",payload:X})).catch(()=>{return}),()=>this.eventListeners.delete(Z)}onFrame(Z){return this.frameListeners.add(Z),this.page.screenshot({type:"jpeg",quality:75}).then((X)=>Z(Buffer.from(X))).catch(()=>{return}),()=>this.frameListeners.delete(Z)}emit(Z){for(let X of this.eventListeners)X(Z)}emitSoon(){if(this.stateTimer||this.closed)return;this.stateTimer=setTimeout(()=>{this.stateTimer=null,this.state().then((Z)=>this.emit({event:"state",payload:Z})).catch(()=>{return})},50)}async metrics(){return this.page.evaluate(()=>{let{documentElement:Z,body:X}=document;return{scrollX:window.scrollX,scrollY:window.scrollY,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,documentWidth:Math.max(Z?.scrollWidth??0,X?.scrollWidth??0),documentHeight:Math.max(Z?.scrollHeight??0,X?.scrollHeight??0)}})}async state(){let Z=this.page.url(),[X,Q,K]=await Promise.all([this.page.title().catch(()=>Z),this.page.evaluate(()=>{return document.querySelector('link[rel~="icon"]')?.href||null}).catch(()=>null),this.metrics()]);return{sourceUrl:Z,title:X||Z,faviconUrl:Q,localFaviconUrl:null,revision:this.revision,metrics:K,frozen:!1}}async navigate(Z){let X=C0(Z).href;return this.emit({event:"navigating",payload:{sourceUrl:this.page.url(),revision:this.revision}}),await this.page.goto(X,{waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async refresh(){return this.emit({event:"navigating",payload:{sourceUrl:this.page.url(),revision:this.revision}}),await this.page.reload({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async goBack(){return await this.page.goBack({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async goForward(){return await this.page.goForward({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async setViewport(Z,X){await this.page.setViewportSize({width:a8(Z,iZ,d8),height:a8(X,aZ,d8)}),this.emitSoon()}async input(Z){for(let X of Z)if(X.type==="pointer"){if(await this.page.mouse.move(X.x,X.y),X.phase==="down")await this.page.mouse.down({button:X.button??"left"});else if(X.phase==="up")await this.page.mouse.up({button:X.button??"left"})}else if(X.type==="wheel")await this.page.mouse.wheel(X.deltaX,X.deltaY);else if(X.type==="key")if(X.phase==="down")await this.page.keyboard.down(X.key);else await this.page.keyboard.up(X.key);else await this.page.keyboard.insertText(X.text);this.emitSoon()}async framesWithPaths(){let Z=this.page.frames().slice(0,24);return Promise.all(Z.map(async(X)=>({frame:X,path:await eZ(X)})))}refFor(Z,X){for(let[K,Y]of this.refs)if(Y.handle===Z)return K;let Q=`${this.revision}:e${++this.refCounter}`;return this.refs.set(Q,{handle:Z,framePath:X}),Q}async resolveTarget(Z){if("ref"in Z&&Z.ref){if(!Z.ref.startsWith(`${this.revision}:`))throw Error("STALE_BROWSER_REF: inspect the browser again");let Y=this.refs.get(Z.ref);if(!Y)throw Error("STALE_BROWSER_REF: inspect the browser again");return Y}let X="framePath"in Z?Z.framePath??[]:[],Q=(await this.framesWithPaths()).find((Y)=>JSON.stringify(Y.path)===JSON.stringify(X));if(!Q)throw Error("Browser frame was not found");let K=null;if("selector"in Z&&Z.selector)K=await Q.frame.$(Z.selector);if(!K&&"textQuote"in Z&&Z.textQuote?.exact)K=await Q.frame.getByText(Z.textQuote.exact,{exact:!1}).first().elementHandle();if(!K)throw Error("Browser element was not found");return{handle:K,framePath:Q.path}}async locate(Z){let X=await this.resolveTarget(Z),Q=await X.handle.boundingBox();if(!Q)throw Error("STALE_BROWSER_REF: browser element is detached");let K=await X.handle.evaluate((J)=>{let H=J.getBoundingClientRect(),w=(J.textContent??"").replace(/\s+/g," ").trim().slice(0,2000);return{rect:{x:H.x,y:H.y,width:H.width,height:H.height},scrollX:J.ownerDocument.defaultView?.scrollX??0,scrollY:J.ownerDocument.defaultView?.scrollY??0,text:w}}),Y=await p8(X.handle);return{revision:this.revision,ref:this.refFor(X.handle,X.framePath),selector:Y.selector,textQuote:K.text?{exact:K.text}:null,framePath:X.framePath,frame:K.rect,viewport:Q,document:{x:K.rect.x+K.scrollX,y:K.rect.y+K.scrollY,width:K.rect.width,height:K.rect.height}}}async click(Z){return await(await this.resolveTarget(Z)).handle.click(),this.emitSoon(),{ok:!0,revision:this.revision}}async highlight(Z,X){let Q=await this.resolveTarget(Z);return await Q.handle.evaluate((K,Y)=>{let J=K;J.dataset.ideawaveBrowserHighlight="true",J.style.outline=`3px solid ${Y}`,J.style.outlineOffset="2px"},X),this.locate({ref:this.refFor(Q.handle,Q.framePath)})}async scroll(Z){await this.page.evaluate((Q)=>{window.scrollTo({left:typeof Q.left==="number"?Q.left:window.scrollX,top:typeof Q.top==="number"?Q.top:window.scrollY+(Q.deltaY??0)})},Z);let X=await this.metrics();return this.emitSoon(),{ok:!0,metrics:X,revision:this.revision}}async find(Z,X=!1){let Q=!1;for(let K of this.page.frames().slice(0,24))if(Q=await K.evaluate(({value:Y,backwards:J})=>window.find(Y,!1,J,!0,!1,!0,!1),{value:Z.slice(0,500),backwards:X}).catch(()=>!1),Q)break;return{found:Q,query:Z,revision:this.revision}}async selection(){for(let{frame:Z,path:X}of await this.framesWithPaths()){let Q=await Z.evaluateHandle(()=>{let Y=window.getSelection();if(!Y||Y.isCollapsed||!Y.anchorNode)return null;return Y.anchorNode.nodeType===Node.ELEMENT_NODE?Y.anchorNode:Y.anchorNode.parentElement}),K=Q.asElement();if(!K){await Q.dispose();continue}return this.locate({ref:this.refFor(K,X)})}throw Error("No page selection is available")}async inspect(){await this.page.waitForLoadState("domcontentloaded",{timeout:12000}).catch(()=>{return}),await x2(this.refs),this.refCounter=0;let Z=[],X=[],Q=[],K=[];for(let{frame:H,path:w}of await this.framesWithPaths()){let B=await H.locator("body").innerText({timeout:1500}).catch(()=>"");if(B.trim())K.push(B.replace(/\s+/g," ").trim());for(let[U,q,h]of[["h1,h2,h3,h4,h5,h6",Z,200],["a[href]",X,i8],["button,input,select,textarea,[role=button]",Q,i8]]){if(q.length>=h)continue;let M=(await H.$$(U)).slice(0,h-q.length);for(let O of M){let f=O;if(!await f.isVisible().catch(()=>!1)){await f.dispose();continue}let C=await p8(f);q.push({ref:this.refFor(f,w),...C,framePath:w})}}}let Y=K.join(`
823
- `),J=await this.state();return{sourceUrl:J.sourceUrl,title:J.title,mode:"live",revision:this.revision,untrustedContent:!0,visibleText:Y.slice(0,25000),truncated:Y.length>25000,headings:Z,links:X,controls:Q,metrics:J.metrics}}async snapshotHtml(){return this.page.evaluate(()=>{let Z=document.documentElement.cloneNode(!0),X=document.documentElement.querySelectorAll("*"),Q=Z.querySelectorAll("*");for(let K=0;K<X.length;K+=1){let Y=X[K],J=Q[K];if(!Y||!J)continue;if(Y instanceof HTMLInputElement&&J instanceof HTMLInputElement){if(Y.type==="password")J.removeAttribute("value");else J.setAttribute("value",Y.value);if(Y.checked)J.setAttribute("checked","");else J.removeAttribute("checked")}else if(Y instanceof HTMLTextAreaElement&&J instanceof HTMLTextAreaElement)J.textContent=Y.value;else if(Y instanceof HTMLOptionElement&&J instanceof HTMLOptionElement)if(Y.selected)J.setAttribute("selected","");else J.removeAttribute("selected");else if(Y instanceof HTMLImageElement&&J instanceof HTMLImageElement&&Y.currentSrc)J.setAttribute("src",Y.currentSrc),J.removeAttribute("srcset")}return`<!doctype html>${Z.outerHTML}`})}async fetchResource(Z,X=sZ){let Q=C0(Z).href,K=await this.page.context().request.get(Q,{failOnStatusCode:!1,maxRedirects:5,timeout:30000}),Y=Number(K.headers()["content-length"]??0);if(Number.isFinite(Y)&&Y>X)throw Error("Browser proxy response exceeds the size limit");let J=Buffer.from(await K.body());if(J.byteLength>X)throw Error("Browser proxy response exceeds the size limit");return{url:K.url(),status:K.status(),headers:K.headers(),body:J}}async command(Z){switch(Z.type){case"inspect":return this.inspect();case"locate":return this.locate(Z.target);case"click":return this.click(Z.target);case"scroll":return this.scroll({deltaY:typeof Z.deltaY==="number"?Z.deltaY:void 0,left:typeof Z.left==="number"?Z.left:void 0,top:typeof Z.top==="number"?Z.top:void 0});case"find":return this.find(String(Z.query??""),Z.direction==="backward");case"refresh":return this.refresh();case"navigate":return this.navigate(String(Z.url??""));case"back":return this.goBack();case"forward":return this.goForward();case"highlight":return this.highlight(Z.target,String(Z.color??"#FDE047"));case"selection":return this.selection();case"snapshot":return{sourceUrl:this.page.url(),title:await this.page.title(),revision:this.revision};default:throw Error("Unsupported browser command")}}async close(){if(this.closed)return;if(this.closed=!0,this.stateTimer)clearTimeout(this.stateTimer);this.stateTimer=null,await x2(this.refs),await this.cdp?.send("Page.stopScreencast").catch(()=>{return}),await this.cdp?.detach().catch(()=>{return}),await this.page.close({runBeforeUnload:!1}).catch(()=>{return}),this.eventListeners.clear(),this.frameListeners.clear(),this.onClose()}}class V1{onStatus;networkProxy;context=null;startPromise=null;pages=new Set;status={phase:"idle"};constructor(Z,X){this.onStatus=Z;this.networkProxy=X??new L2}setStatus(Z){this.status=Z,this.onStatus?.(Z)}getStatus(){return this.status}async startContext(){this.setStatus({phase:"starting",message:"Starting local Chrome…"});let Z=oZ();await Promise.all([u8(Z.profile,{recursive:!0}),u8(Z.browsers,{recursive:!0}),this.networkProxy.start()]),process.env.PLAYWRIGHT_BROWSERS_PATH=Z.browsers;let{chromium:X}=await import("playwright-core"),Q=tZ(this.networkProxy),K=null;if(await uZ(X.executablePath()).then(()=>!0,()=>!1))try{K=await X.launchPersistentContext(Z.profile,{...Q,channel:"chromium"})}catch{K=null}if(!K)try{K=await X.launchPersistentContext(Z.profile,{...Q,channel:"chrome"})}catch{K=null}if(!K)this.setStatus({phase:"downloading",message:"Downloading the IdeaWave Chromium engine…"}),await nZ(Z.browsers),K=await X.launchPersistentContext(Z.profile,{...Q,channel:"chromium"});await K.route("**/*",async(w)=>{let B=w.request().url();try{let U=new URL(B);if(U.protocol==="http:"||U.protocol==="https:")C0(B);else if(U.protocol!=="data:"&&U.protocol!=="blob:"){await w.abort("blockedbyclient");return}await w.continue()}catch{await w.abort("blockedbyclient")}});let J=K.pages();await Promise.all(J.slice(1).map((w)=>w.close({runBeforeUnload:!1}).catch(()=>{return})));let H=J[0];if(H&&H.url()!=="about:blank")await H.goto("about:blank").catch(()=>{return});return this.context=K,this.setStatus({phase:"ready"}),K}ensureContext(){if(this.context)return Promise.resolve(this.context);if(this.startPromise)return this.startPromise;return this.startPromise=this.startContext().catch((Z)=>{throw this.setStatus({phase:"failed",message:Z instanceof Error?Z.message:String(Z)}),this.startPromise=null,Z}),this.startPromise}async createPage(Z){if(this.pages.size>=l8)throw Error(`IdeaWave supports at most ${l8} simultaneous live browser cards`);let X=await this.ensureContext(),Q=X.pages().find((Y)=>Y.url()==="about:blank"&&![...this.pages].some((J)=>J.page===Y));Q??=await X.newPage();let K=new s8(Q,()=>this.pages.delete(K));this.pages.add(K);try{return await K.initialize(Z),K}catch(Y){throw await K.close(),Y}}async close(){let Z=[...this.pages];this.pages.clear(),await Promise.all(Z.map((Q)=>Q.close()));let X=this.context;this.context=null,this.startPromise=null,await X?.close().catch(()=>{return}),await this.networkProxy.close(),this.setStatus({phase:"idle"})}}import{randomBytes as S2,randomUUID as GQ}from"node:crypto";import*as B4 from"css-tree";var ZX=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),u="�",V;(function(Z){Z[Z.EOF=-1]="EOF",Z[Z.NULL=0]="NULL",Z[Z.TABULATION=9]="TABULATION",Z[Z.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",Z[Z.LINE_FEED=10]="LINE_FEED",Z[Z.FORM_FEED=12]="FORM_FEED",Z[Z.SPACE=32]="SPACE",Z[Z.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",Z[Z.QUOTATION_MARK=34]="QUOTATION_MARK",Z[Z.AMPERSAND=38]="AMPERSAND",Z[Z.APOSTROPHE=39]="APOSTROPHE",Z[Z.HYPHEN_MINUS=45]="HYPHEN_MINUS",Z[Z.SOLIDUS=47]="SOLIDUS",Z[Z.DIGIT_0=48]="DIGIT_0",Z[Z.DIGIT_9=57]="DIGIT_9",Z[Z.SEMICOLON=59]="SEMICOLON",Z[Z.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",Z[Z.EQUALS_SIGN=61]="EQUALS_SIGN",Z[Z.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",Z[Z.QUESTION_MARK=63]="QUESTION_MARK",Z[Z.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",Z[Z.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",Z[Z.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",Z[Z.GRAVE_ACCENT=96]="GRAVE_ACCENT",Z[Z.LATIN_SMALL_A=97]="LATIN_SMALL_A",Z[Z.LATIN_SMALL_Z=122]="LATIN_SMALL_Z"})(V||(V={}));var e={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function t1(Z){return Z>=55296&&Z<=57343}function r8(Z){return Z>=56320&&Z<=57343}function o8(Z,X){return(Z-55296)*1024+9216+X}function e1(Z){return Z!==32&&Z!==10&&Z!==13&&Z!==9&&Z!==12&&Z>=1&&Z<=31||Z>=127&&Z<=159}function Z4(Z){return Z>=64976&&Z<=65007||ZX.has(Z)}var L;(function(Z){Z.controlCharacterInInputStream="control-character-in-input-stream",Z.noncharacterInInputStream="noncharacter-in-input-stream",Z.surrogateInInputStream="surrogate-in-input-stream",Z.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",Z.endTagWithAttributes="end-tag-with-attributes",Z.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",Z.unexpectedSolidusInTag="unexpected-solidus-in-tag",Z.unexpectedNullCharacter="unexpected-null-character",Z.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",Z.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",Z.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",Z.missingEndTagName="missing-end-tag-name",Z.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",Z.unknownNamedCharacterReference="unknown-named-character-reference",Z.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",Z.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",Z.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",Z.eofBeforeTagName="eof-before-tag-name",Z.eofInTag="eof-in-tag",Z.missingAttributeValue="missing-attribute-value",Z.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",Z.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",Z.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",Z.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",Z.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",Z.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",Z.missingDoctypePublicIdentifier="missing-doctype-public-identifier",Z.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",Z.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",Z.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",Z.cdataInHtmlContent="cdata-in-html-content",Z.incorrectlyOpenedComment="incorrectly-opened-comment",Z.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",Z.eofInDoctype="eof-in-doctype",Z.nestedComment="nested-comment",Z.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",Z.eofInComment="eof-in-comment",Z.incorrectlyClosedComment="incorrectly-closed-comment",Z.eofInCdata="eof-in-cdata",Z.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",Z.nullCharacterReference="null-character-reference",Z.surrogateCharacterReference="surrogate-character-reference",Z.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",Z.controlCharacterReference="control-character-reference",Z.noncharacterCharacterReference="noncharacter-character-reference",Z.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",Z.missingDoctypeName="missing-doctype-name",Z.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",Z.duplicateAttribute="duplicate-attribute",Z.nonConformingDoctype="non-conforming-doctype",Z.missingDoctype="missing-doctype",Z.misplacedDoctype="misplaced-doctype",Z.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",Z.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",Z.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",Z.openElementsLeftAfterEof="open-elements-left-after-eof",Z.abandonedHeadElementChild="abandoned-head-element-child",Z.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",Z.nestedNoscriptInHead="nested-noscript-in-head",Z.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(L||(L={}));var QX=65536;class P2{constructor(Z){this.handler=Z,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=QX,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(Z,X){let{line:Q,col:K,offset:Y}=this,J=K+X,H=Y+X;return{code:Z,startLine:Q,endLine:Q,startCol:J,endCol:J,startOffset:H,endOffset:H}}_err(Z){if(this.handler.onParseError&&this.lastErrOffset!==this.offset)this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(Z,0))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(Z){if(this.pos!==this.html.length-1){let X=this.html.charCodeAt(this.pos+1);if(r8(X))return this.pos++,this._addGap(),o8(Z,X)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,V.EOF;return this._err(L.surrogateInInputStream),Z}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){if(this.willDropParsedChunk())this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0}write(Z,X){if(this.html.length>0)this.html+=Z;else this.html=Z;this.endOfChunkHit=!1,this.lastChunkWritten=X}insertHtmlAtCurrentPos(Z){this.html=this.html.substring(0,this.pos+1)+Z+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(Z,X){if(this.pos+Z.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(X)return this.html.startsWith(Z,this.pos);for(let Q=0;Q<Z.length;Q++)if((this.html.charCodeAt(this.pos+Q)|32)!==Z.charCodeAt(Q))return!1;return!0}peek(Z){let X=this.pos+Z;if(X>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,V.EOF;let Q=this.html.charCodeAt(X);return Q===V.CARRIAGE_RETURN?V.LINE_FEED:Q}advance(){if(this.pos++,this.isEol)this.isEol=!1,this.line++,this.lineStartPos=this.pos;if(this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,V.EOF;let Z=this.html.charCodeAt(this.pos);if(Z===V.CARRIAGE_RETURN)return this.isEol=!0,this.skipNextNewLine=!0,V.LINE_FEED;if(Z===V.LINE_FEED){if(this.isEol=!0,this.skipNextNewLine)return this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()}if(this.skipNextNewLine=!1,t1(Z))Z=this._processSurrogate(Z);if(!(this.handler.onParseError===null||Z>31&&Z<127||Z===V.LINE_FEED||Z===V.CARRIAGE_RETURN||Z>159&&Z<64976))this._checkForProblematicCharacters(Z);return Z}_checkForProblematicCharacters(Z){if(e1(Z))this._err(L.controlCharacterInInputStream);else if(Z4(Z))this._err(L.noncharacterInInputStream)}retreat(Z){this.pos-=Z;while(this.pos<this.lastGapPos)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=!1}}var S;(function(Z){Z[Z.CHARACTER=0]="CHARACTER",Z[Z.NULL_CHARACTER=1]="NULL_CHARACTER",Z[Z.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",Z[Z.START_TAG=3]="START_TAG",Z[Z.END_TAG=4]="END_TAG",Z[Z.COMMENT=5]="COMMENT",Z[Z.DOCTYPE=6]="DOCTYPE",Z[Z.EOF=7]="EOF",Z[Z.HIBERNATION=8]="HIBERNATION"})(S||(S={}));function X4(Z,X){for(let Q=Z.attrs.length-1;Q>=0;Q--)if(Z.attrs[Q].name===X)return Z.attrs[Q].value;return null}var WX=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function n8(Z){if(Z>=55296&&Z<=57343||Z>1114111)return 65533;return WX.get(Z)??Z}function t8(Z){let X=atob(Z),Q=X.length&-2,K=new Uint16Array(Q/2);for(let Y=0,J=0;Y<Q;Y+=2){let H=X.charCodeAt(Y),w=X.charCodeAt(Y+1);K[J++]=H|w<<8}return K}var f2=t8("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IAAOA12J/c8iFvaxBhAAhOVGFjZGZnbG1vcHFzdHV4owOlA6kDsAO/A8IDxgPNA9ID8gP9AwEEFAQeBCAEJQRHAEphSAA7gNAA0EBjAHUAdABlADuAyQDJQIABYWl5ALYDuQO+A/Ihb24aYXIAYwA7gMoAykAtZG8AdAAWYXIAAOA12AjdcgBhAHYAZQA7gMgAyEDlIm1lbnQAoAgiAAFhcNYD2QNjAHIAEmF0AHkAUwLhAwAAAADpA20lYWxsU3F1YXJlAACg+yVlJ3J5U21hbGxTcXVhcmUAAKCrJQABZ3D2A/kDbwBuABhhZgAA4DXYPN3zImlsb26VY3UAAAFhaQYEDgRsAFSgdSppImxkZQAAoEIi7CNpYnJpdW0AoMwhAAFjaRgEGwRyAACgMCFtAACgcyphAJdjbQBsADuAywDLQAABaXApBC0E8yF0cwCgAyLvJG5lbnRpYWxFAKBHIYACY2Zpb3MAPQQ/BEMEXQRyBHkAJGRyAADgNdgJ3WwibGVkAFMCTAQAAAAAVARtJWFsbFNxdWFyZQAAoPwlZSdyeVNtYWxsU3F1YXJlAACgqiVwA2UEAABpBAAAAABtBGYAAOA12D3dwSFsbACgACLyI2llcnRyZgCgMSFjAPIAcQQABkpUYWJjZGZnb3JzdIgEiwSOBJMElwSkBKcEqwStBLIE5QTqBGMAeQADZDuAPgA+QO0hbWFkoJMD3GNyImV2ZQAeYYABZWl5AJ0EoASjBOQhaWwiYXIAYwAcYRNkbwB0ACBhcgAA4DXYCt0AoNkicABmAADgNdg+3eUiYXRlcgADRUZHTFNUvwTIBM8E1QTZBOAEcSJ1YWwATKBlIuUhc3MAoNsidSRsbEVxdWFsAACgZyJyI2VhdGVyAACgoirlIXNzAKB3IuwkYW50RXF1YWwAoH4qaSJsZGUAAKBzImMAcgAA4DXYotwAoGsiAARBYWNmaW9zdfkE/QQFBQgFCwUTBSIFKwVSIkRjeQAqZAABY3QBBQQFZQBrAMdiXmDpIXJjJGFyAACgDCFsJWJlcnRTcGFjZQAAoAsh8AEYBQAAGwVmAACgDSHpJXpvbnRhbExpbmUAoAAlAAFjdCYFKAXyABIF8iFvayZhbQBwAEQBMQU5BW8AdwBuAEgAdQBtAPAAAAFxInVhbAAAoE8iAAdFSk9hY2RmZ21ub3N0dVMFVgVZBVwFYwVtBXAFcwV6BZAFtgXFBckFzQVjAHkAFWTsIWlnMmFjAHkAAWRjAHUAdABlADuAzQDNQAABaXlnBWwFcgBjADuAzgDOQBhkbwB0ADBhcgAAoBEhcgBhAHYAZQA7gMwAzEAAoREhYXB/BYsFAAFjZ4MFhQVyACphaSNuYXJ5SQAAoEghbABpAGUA8wD6AvQBlQUAAKUFZaAsIgABZ3KaBZ4F8iFhbACgKyLzI2VjdGlvbgCgwiJpI3NpYmxlAAABQ1SsBbEFbyJtbWEAAKBjIGkibWVzAACgYiCAAWdwdAC8Bb8FwwVvAG4ALmFmAADgNdhA3WEAmWNjAHIAAKAQIWkibGRlAChh6wHSBQAA1QVjAHkABmRsADuAzwDPQIACY2Zvc3UA4QXpBe0F8gX9BQABaXnlBegFcgBjADRhGWRyAADgNdgN3XAAZgAA4DXYQd3jAfcFAAD7BXIAAOA12KXc8iFjeQhk6yFjeQRkgANISmFjZm9zAAwGDwYSBhUGHQYhBiYGYwB5ACVkYwB5AAxk8CFwYZpjAAFleRkGHAbkIWlsNmEaZHIAAOA12A7dcABmAADgNdhC3WMAcgAA4DXYptyABUpUYWNlZmxtb3N0AD0GQAZDBl4GawZkB2gHcAd0B80H2gdjAHkACWQ7gDwAPECAAmNtbnByAEwGTwZSBlUGWwb1IXRlOWHiIWRhm2NnAACg6ifsI2FjZXRyZgCgEiFyAACgniGAAWFleQBkBmcGagbyIW9uPWHkIWlsO2EbZAABZnNvBjQHdAAABUFDREZSVFVWYXKABp4GpAbGBssG3AYDByEHwQIqBwABbnKEBowGZyVsZUJyYWNrZXQAAKDoJ/Ihb3cAoZAhQlKTBpcGYQByAACg5CHpJGdodEFycm93AKDGIWUjaWxpbmcAAKAII28A9QGqBgAAsgZiJWxlQnJhY2tldAAAoOYnbgDUAbcGAAC+BmUkZVZlY3RvcgAAoGEp5SJjdG9yQqDDIWEAcgAAoFkpbCJvb3IAAKAKI2kiZ2h0AAABQVbSBtcGciJyb3cAAKCUIeUiY3RvcgCgTikAAWVy4AbwBmUAAKGjIkFW5gbrBnIicm93AACgpCHlImN0b3IAoFopaSNhbmdsZQBCorIi+wYAAAAA/wZhAHIAAKDPKXEidWFsAACgtCJwAIABRFRWAAoHEQcYB+8kd25WZWN0b3IAoFEpZSRlVmVjdG9yAACgYCnlImN0b3JCoL8hYQByAACgWCnlImN0b3JCoLwhYQByAACgUilpAGcAaAB0AGEAcgByAG8A9wDMAnMAAANFRkdMU1Q/B0cHTgdUB1gHXwfxJXVhbEdyZWF0ZXIAoNoidSRsbEVxdWFsAACgZiJyI2VhdGVyAACgdiLlIXNzAKChKuwkYW50RXF1YWwAoH0qaSJsZGUAAKByInIAAOA12A/dZaDYIuYjdGFycm93AKDaIWkiZG90AD9hgAFucHcAege1B7kHZwAAAkxSbHKCB5QHmwerB+UhZnQAAUFSiAeNB3Iicm93AACg9SfpJGdodEFycm93AKD3J+kkZ2h0QXJyb3cAoPYn5SFmdAABYXLcAqEHaQBnAGgAdABhAHIAcgBvAPcA5wJpAGcAaAB0AGEAcgByAG8A9wDuAmYAAOA12EPdZQByAAABTFK/B8YHZSRmdEFycm93AACgmSHpJGdodEFycm93AKCYIYABY2h0ANMH1QfXB/IAWgYAoLAh8iFva0FhAKBqIgAEYWNlZmlvc3XpB+wH7gf/BwMICQgOCBEIcAAAoAUpeQAcZAABZGzyB/kHaSR1bVNwYWNlAACgXyBsI2ludHJmAACgMyFyAADgNdgQ3e4jdXNQbHVzAKATInAAZgAA4DXYRN1jAPIA/gecY4AESmFjZWZvc3R1ACEIJAgoCDUIgQiFCDsKQApHCmMAeQAKZGMidXRlAENhgAFhZXkALggxCDQI8iFvbkdh5CFpbEVhHWSAAWdzdwA7CGEIfQjhInRpdmWAAU1UVgBECEwIWQhlJWRpdW1TcGFjZQAAoAsgaABpAAABY25SCFMIawBTAHAAYQBjAOUASwhlAHIAeQBUAGgAaQDuAFQI9CFlZAABR0xnCHUIcgBlAGEAdABlAHIARwByAGUAYQB0AGUA8gDrBGUAcwBzAEwAZQBzAPMA2wdMImluZQAKYHIAAOA12BHdAAJCbnB0jAiRCJkInAhyImVhawAAoGAgwiZyZWFraW5nU3BhY2WgYGYAAKAVIUOq7CqzCMIIzQgAAOcIGwkAAAAAAAAtCQAAbwkAAIcJAACdCcAJGQoAADQKAAFvdbYIvAjuI2dydWVudACgYiJwIkNhcAAAoG0ibyh1YmxlVmVydGljYWxCYXIAAKAmIoABbHF4ANII1wjhCOUibWVudACgCSL1IWFsVKBgImkibGRlAADgQiI4A2kic3RzAACgBCJyI2VhdGVyAACjbyJFRkdMU1T1CPoIAgkJCQ0JFQlxInVhbAAAoHEidSRsbEVxdWFsAADgZyI4A3IjZWF0ZXIAAOBrIjgD5SFzcwCgeSLsJGFudEVxdWFsAOB+KjgDaSJsZGUAAKB1IvUhbXBEASAJJwnvI3duSHVtcADgTiI4A3EidWFsAADgTyI4A2UAAAFmczEJRgn0JFRyaWFuZ2xlQqLqIj0JAAAAAEIJYQByAADgzyk4A3EidWFsAACg7CJzAICibiJFR0xTVABRCVYJXAlhCWkJcSJ1YWwAAKBwInIjZWF0ZXIAAKB4IuUhc3MA4GoiOAPsJGFudEVxdWFsAOB9KjgDaSJsZGUAAKB0IuUic3RlZAABR0x1CX8J8iZlYXRlckdyZWF0ZXIA4KIqOAPlI3NzTGVzcwDgoSo4A/IjZWNlZGVzAKGAIkVTjwmVCXEidWFsAADgryo4A+wkYW50RXF1YWwAoOAiAAFlaaAJqQl2JmVyc2VFbGVtZW50AACgDCLnJWh0VHJpYW5nbGVCousitgkAAAAAuwlhAHIAAODQKTgDcSJ1YWwAAKDtIgABcXXDCeAJdSNhcmVTdQAAAWJwywnVCfMhZXRF4I8iOANxInVhbAAAoOIi5SJyc2V0ReCQIjgDcSJ1YWwAAKDjIoABYmNwAOYJ8AkNCvMhZXRF4IIi0iBxInVhbAAAoIgi4yJlZWRzgKGBIkVTVAD6CQAKBwpxInVhbAAA4LAqOAPsJGFudEVxdWFsAKDhImkibGRlAADgfyI4A+UicnNldEXggyLSIHEidWFsAACgiSJpImxkZQCAoUEiRUZUACIKJwouCnEidWFsAACgRCJ1JGxsRXF1YWwAAKBHImkibGRlAACgSSJlJXJ0aWNhbEJhcgAAoCQiYwByAADgNdip3GkAbABkAGUAO4DRANFAnWMAB0VhY2RmZ21vcHJzdHV2XgphCmgKcgp2CnoKgQqRCpYKqwqtCrsKyArNCuwhaWdSYWMAdQB0AGUAO4DTANNAAAFpeWwKcQpyAGMAO4DUANRAHmRiImxhYwBQYXIAAOA12BLdcgBhAHYAZQA7gNIA0kCAAWFlaQCHCooKjQpjAHIATGFnAGEAqWNjInJvbgCfY3AAZgAA4DXYRt3lI25DdXJseQABRFGeCqYKbyV1YmxlUXVvdGUAAKAcIHUib3RlAACgGCAAoFQqAAFjbLEKtQpyAADgNdiq3GEAcwBoADuA2ADYQGkAbAHACsUKZABlADuA1QDVQGUAcwAAoDcqbQBsADuA1gDWQGUAcgAAAUJQ0wrmCgABYXLXCtoKcgAAoD4gYQBjAAABZWvgCuIKAKDeI2UAdAAAoLQjYSVyZW50aGVzaXMAAKDcI4AEYWNmaGlsb3JzAP0KAwsFCwkLCwsMCxELIwtaC3IjdGlhbEQAAKACInkAH2RyAADgNdgT3WkApmOgY/Ujc01pbnVzsWAAAWlwFQsgC24AYwBhAHIAZQBwAGwAYQBuAOUACgVmAACgGSGAobsqZWlvACoLRQtJC+MiZWRlc4CheiJFU1QANAs5C0ALcSJ1YWwAAKCvKuwkYW50RXF1YWwAoHwiaSJsZGUAAKB+Im0AZQAAoDMgAAFkcE0LUQv1IWN0AKAPIm8jcnRpb24AYaA3ImwAAKAdIgABY2leC2ILcgAA4DXYq9yoYwACVWZvc2oLbwtzC3cLTwBUADuAIgAiQHIAAOA12BTdcABmAACgGiFjAHIAAOA12KzcAAZCRWFjZWZoaW9yc3WPC5MLlwupC7YL2AvbC90LhQyTDJoMowzhIXJyAKAQKUcAO4CuAK5AgAFjbnIAnQugC6ML9SF0ZVRhZwAAoOsncgB0oKAhbAAAoBYpgAFhZXkArwuyC7UL8iFvblhh5CFpbFZhIGR2oBwhZSJyc2UAAAFFVb8LzwsAAWxxwwvIC+UibWVudACgCyL1JGlsaWJyaXVtAKDLIXAmRXF1aWxpYnJpdW0AAKBvKXIAAKAcIW8AoWPnIWh0AARBQ0RGVFVWYewLCgwQDDIMNwxeDHwM9gIAAW5y8Av4C2clbGVCcmFja2V0AACg6SfyIW93AKGSIUJM/wsDDGEAcgAAoOUhZSRmdEFycm93AACgxCFlI2lsaW5nAACgCSNvAPUBFgwAAB4MYiVsZUJyYWNrZXQAAKDnJ24A1AEjDAAAKgxlJGVWZWN0b3IAAKBdKeUiY3RvckKgwiFhAHIAAKBVKWwib29yAACgCyMAAWVyOwxLDGUAAKGiIkFWQQxGDHIicm93AACgpiHlImN0b3IAoFspaSNhbmdsZQBCorMiVgwAAAAAWgxhAHIAAKDQKXEidWFsAACgtSJwAIABRFRWAGUMbAxzDO8kd25WZWN0b3IAoE8pZSRlVmVjdG9yAACgXCnlImN0b3JCoL4hYQByAACgVCnlImN0b3JCoMAhYQByAACgUykAAXB1iQyMDGYAAKAdIe4kZEltcGxpZXMAoHAp6SRnaHRhcnJvdwCg2yEAAWNongyhDHIAAKAbIQCgsSHsJGVEZWxheWVkAKD0KYAGSE9hY2ZoaW1vcXN0dQC/DMgMzAzQDOIM5gwKDQ0NFA0ZDU8NVA1YDQABQ2PDDMYMyCFjeSlkeQAoZEYiVGN5ACxkYyJ1dGUAWmEAorwqYWVpedgM2wzeDOEM8iFvbmBh5CFpbF5hcgBjAFxhIWRyAADgNdgW3e8hcnQAAkRMUlXvDPYM/QwEDW8kd25BcnJvdwAAoJMhZSRmdEFycm93AACgkCHpJGdodEFycm93AKCSIXAjQXJyb3cAAKCRIechbWGjY+EkbGxDaXJjbGUAoBgicABmAADgNdhK3XICHw0AAAAAIg10AACgGiLhIXJlgKGhJUlTVQAqDTINSg3uJXRlcnNlY3Rpb24AoJMidQAAAWJwNw1ADfMhZXRFoI8icSJ1YWwAAKCRIuUicnNldEWgkCJxInVhbAAAoJIibiJpb24AAKCUImMAcgAA4DXYrtxhAHIAAKDGIgACYmNtcF8Nag2ODZANc6DQImUAdABFoNAicSJ1YWwAAKCGIgABY2huDYkNZSJlZHMAgKF7IkVTVAB4DX0NhA1xInVhbAAAoLAq7CRhbnRFcXVhbACgfSJpImxkZQAAoH8iVABoAGEA9ADHCwCgESIAodEiZXOVDZ8NciJzZXQARaCDInEidWFsAACghyJlAHQAAKDRIoAFSFJTYWNmaGlvcnMAtQ27Db8NyA3ODdsN3w3+DRgOHQ4jDk8AUgBOADuA3gDeQMEhREUAoCIhAAFIY8MNxg1jAHkAC2R5ACZkAAFidcwNzQ0JYKRjgAFhZXkA1A3XDdoN8iFvbmRh5CFpbGJhImRyAADgNdgX3QABZWnjDe4N8gHoDQAA7Q3lImZvcmUAoDQiYQCYYwABY27yDfkNayNTcGFjZQAA4F8gCiDTInBhY2UAoAkg7CFkZYChPCJFRlQABw4MDhMOcSJ1YWwAAKBDInUkbGxFcXVhbAAAoEUiaSJsZGUAAKBIInAAZgAA4DXYS93pI3BsZURvdACg2yAAAWN0Jw4rDnIAAOA12K/c8iFva2Zh4QpFDlYOYA5qDgAAbg5yDgAAAAAAAAAAAAB5DnwOqA6zDgAADg8RDxYPGg8AAWNySA5ODnUAdABlADuA2gDaQHIAb6CfIeMhaXIAoEkpcgDjAVsOAABdDnkADmR2AGUAbGEAAWl5Yw5oDnIAYwA7gNsA20AjZGIibGFjAHBhcgAA4DXYGN1yAGEAdgBlADuA2QDZQOEhY3JqYQABZGl/Dp8OZQByAAABQlCFDpcOAAFhcokOiw5yAF9gYQBjAAABZWuRDpMOAKDfI2UAdAAAoLUjYSVyZW50aGVzaXMAAKDdI28AbgBQoMMi7CF1cwCgjiIAAWdwqw6uDm8AbgByYWYAAOA12EzdAARBREVUYWRwc78O0g7ZDuEOBQPqDvMOBw9yInJvdwDCoZEhyA4AAMwOYQByAACgEilvJHduQXJyb3cAAKDFIW8kd25BcnJvdwAAoJUhcSV1aWxpYnJpdW0AAKBuKWUAZQBBoKUiciJyb3cAAKClIW8AdwBuAGEAcgByAG8A9wAQA2UAcgAAAUxS+Q4AD2UkZnRBcnJvdwAAoJYh6SRnaHRBcnJvdwCglyFpAGyg0gNvAG4ApWPpIW5nbmFjAHIAAOA12LDcaSJsZGUAaGFtAGwAO4DcANxAgAREYmNkZWZvc3YALQ8xDzUPNw89D3IPdg97D4AP4SFzaACgqyJhAHIAAKDrKnkAEmThIXNobKCpIgCg5ioAAWVyQQ9DDwCgwSKAAWJ0eQBJD00Paw9hAHIAAKAWIGmgFiDjIWFsAAJCTFNUWA9cD18PZg9hAHIAAKAjIukhbmV8YGUkcGFyYXRvcgAAoFgnaSJsZGUAAKBAItQkaGluU3BhY2UAoAogcgAA4DXYGd1wAGYAAOA12E3dYwByAADgNdix3GQiYXNoAACgqiKAAmNlZm9zAI4PkQ+VD5kPng/pIXJjdGHkIWdlAKDAInIAAOA12BrdcABmAADgNdhO3WMAcgAA4DXYstwAAmZpb3OqD64Prw+0D3IAAOA12BvdnmNwAGYAAOA12E/dYwByAADgNdiz3IAEQUlVYWNmb3N1AMgPyw/OD9EP2A/gD+QP6Q/uD2MAeQAvZGMAeQAHZGMAeQAuZGMAdQB0AGUAO4DdAN1AAAFpedwP3w9yAGMAdmErZHIAAOA12BzdcABmAADgNdhQ3WMAcgAA4DXYtNxtAGwAeGEABEhhY2RlZm9z/g8BEAUQDRAQEB0QIBAkEGMAeQAWZGMidXRlAHlhAAFheQkQDBDyIW9ufWEXZG8AdAB7YfIBFRAAABwQbwBXAGkAZAB0AOgAVAhhAJZjcgAAoCghcABmAACgJCFjAHIAAOA12LXc4QtCEEkQTRAAAGcQbRByEAAAAAAAAAAAeRCKEJcQ8hD9EAAAGxEhETIROREAAD4RYwB1AHQAZQA7gOEA4UByImV2ZQADYYCiPiJFZGl1eQBWEFkQWxBgEGUQAOA+IjMDAKA/InIAYwA7gOIA4kB0AGUAO4C0ALRAMGRsAGkAZwA7gOYA5kByoGEgAOA12B7dcgBhAHYAZQA7gOAA4EAAAWVwfBCGEAABZnCAEIQQ8yF5bQCgNSHoAIMQaABhALFjAAFhcI0QWwAAAWNskRCTEHIAAWFnAACgPypkApwQAAAAALEQAKInImFkc3ajEKcQqRCuEG4AZAAAoFUqAKBcKmwib3BlAACgWCoAoFoqAKMgImVsbXJzersQvRDAEN0Q5RDtEACgpCllAACgICJzAGQAYaAhImEEzhDQENIQ1BDWENgQ2hDcEACgqCkAoKkpAKCqKQCgqykAoKwpAKCtKQCgrikAoK8pdAB2oB8iYgBkoL4iAKCdKQABcHTpEOwQaAAAoCIixWDhIXJyAKB8IwABZ3D1EPgQbwBuAAVhZgAA4DXYUt0Ao0giRWFlaW9wBxEJEQ0RDxESERQRAKBwKuMhaXIAoG8qAKBKImQAAKBLInMAJ2DyIW94ZaBIIvEADhFpAG4AZwA7gOUA5UCAAWN0eQAmESoRKxFyAADgNdi23CpgbQBwAGWgSCLxAPgBaQBsAGQAZQA7gOMA40BtAGwAO4DkAORAAAFjaUERRxFvAG4AaQBuAPQA6AFuAHQAAKARKgAITmFiY2RlZmlrbG5vcHJzdWQRaBGXEZ8RpxGrEdIR1hErEjASexKKEn0RThNbE3oTbwB0AACg7SoAAWNybBGJEWsAAAJjZXBzdBF4EX0RghHvIW5nAKBMInAjc2lsb24A9mNyImltZQAAoDUgaQBtAGWgPSJxAACgzSJ2AY0RkRFlAGUAAKC9ImUAZABnoAUjZQAAoAUjcgBrAHSgtSPiIXJrAKC2IwABb3mjEaYRbgDnAHcRMWTxIXVvAKAeIIACY21wcnQAtBG5Eb4RwRHFEeEhdXPloDUi5ABwInR5dgAAoLApcwDpAH0RbgBvAPUA6gCAAWFodwDLEcwRzhGyYwCgNiHlIWVuAKBsInIAAOA12B/dZwCAA2Nvc3R1dncA4xHyEQUSEhIhEiYSKRKAAWFpdQDpEesR7xHwAKMFcgBjAACg7yVwAACgwyKAAWRwdAD4EfwRABJvAHQAAKAAKuwhdXMAoAEqaSJtZXMAAKACKnECCxIAAAAADxLjIXVwAKAGKmEAcgAAoAUm8iNpYW5nbGUAAWR1GhIeEu8hd24AoL0lcAAAoLMlcCJsdXMAAKAEKmUA5QBCD+UAkg9hInJvdwAAoA0pgAFha28ANhJoEncSAAFjbjoSZRJrAIABbHN0AEESRxJNEm8jemVuZ2UAAKDrKXEAdQBhAHIA5QBcBPIjaWFuZ2xlgKG0JWRscgBYElwSYBLvIXduAKC+JeUhZnQAoMIlaSJnaHQAAKC4JWsAAKAjJLEBbRIAAHUSsgFxEgAAcxIAoJIlAKCRJTQAAKCTJWMAawAAoIglAAFlb38ShxJx4D0A5SD1IWl2AOBhIuUgdAAAoBAjAAJwdHd4kRKVEpsSnxJmAADgNdhT3XSgpSJvAG0AAKClIvQhaWUAoMgiAAZESFVWYmRobXB0dXayEsES0RLgEvcS+xIKExoTHxMjEygTNxMAAkxSbHK5ErsSvRK/EgCgVyUAoFQlAKBWJQCgUyUAolAlRFVkdckSyxLNEs8SAKBmJQCgaSUAoGQlAKBnJQACTFJsctgS2hLcEt4SAKBdJQCgWiUAoFwlAKBZJQCjUSVITFJobHLrEu0S7xLxEvMS9RIAoGwlAKBjJQCgYCUAoGslAKBiJQCgXyVvAHgAAKDJKQACTFJscgITBBMGEwgTAKBVJQCgUiUAoBAlAKAMJQCiACVEVWR1EhMUExYTGBMAoGUlAKBoJQCgLCUAoDQlaSJudXMAAKCfIuwhdXMAoJ4iaSJtZXMAAKCgIgACTFJsci8TMRMzEzUTAKBbJQCgWCUAoBglAKAUJQCjAiVITFJobHJCE0QTRhNIE0oTTBMAoGolAKBhJQCgXiUAoDwlAKAkJQCgHCUAAWV2UhNVE3YA5QD5AGIAYQByADuApgCmQAACY2Vpb2ITZhNqE24TcgAA4DXYt9xtAGkAAKBPIG0A5aA9IogRbAAAoVwAYmh0E3YTAKDFKfMhdWIAoMgnbAF+E4QTbABloCIgdAAAoCIgcAAAoU4iRWWJE4sTAKCuKvGgTyI8BeEMqRMAAN8TABQDFB8UAAAjFDQUAAAAAIUUAAAAAI0UAAAAANcU4xT3FPsUAACIFQAAlhWAAWNwcgCuE7ET1RP1IXRlB2GAoikiYWJjZHMAuxO/E8QTzhPSE24AZAAAoEQqciJjdXAAAKBJKgABYXXIE8sTcAAAoEsqcAAAoEcqbwB0AACgQCoA4CkiAP4AAWVv2RPcE3QAAKBBIO4ABAUAAmFlaXXlE+8T9RP4E/AB6hMAAO0TcwAAoE0qbwBuAA1hZABpAGwAO4DnAOdAcgBjAAlhcABzAHOgTCptAACgUCpvAHQAC2GAAWRtbgAIFA0UEhRpAGwAO4C4ALhAcCJ0eXYAAKCyKXQAAIGiADtlGBQZFKJAcgBkAG8A9ABiAXIAAOA12CDdgAFjZWkAKBQqFDIUeQBHZGMAawBtoBMn4SFyawCgEyfHY3IAAKPLJUVjZWZtcz8UQRRHFHcUfBSAFACgwykAocYCZWxGFEkUcQAAoFciZQBhAlAUAAAAAGAUciJyb3cAAAFsclYUWhTlIWZ0AKC6IWkiZ2h0AACguyGAAlJTYWNkAGgUaRRrFG8UcxSuYACgyCRzAHQAAKCbIukhcmMAoJoi4SFzaACgnSJuImludAAAoBAqaQBkAACg7yrjIWlyAKDCKfUhYnN1oGMmaQB0AACgYybsApMUmhS2FAAAwxRvAG4AZaA6APGgVCKrAG0CnxQAAAAAoxRhAHSgLABAYAChASJmbKcUqRTuABMNZQAAAW14rhSyFOUhbnQAoAEiZQDzANIB5wG6FAAAwBRkoEUibwB0AACgbSpuAPQAzAGAAWZyeQDIFMsUzhQA4DXYVN1vAOQA1wEAgakAO3MeAdMUcgAAoBchAAFhb9oU3hRyAHIAAKC1IXMAcwAAoBcnAAFjdeYU6hRyAADgNdi43AABYnDuFPIUZaDPKgCg0SploNAqAKDSKuQhb3QAoO8igANkZWxwcnZ3AAYVEBUbFSEVRBVlFYQV4SFycgABbHIMFQ4VAKA4KQCgNSlwAhYVAAAAABkVcgAAoN4iYwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");var o;(function(Z){Z[Z.VALUE_LENGTH=49152]="VALUE_LENGTH",Z[Z.FLAG13=8192]="FLAG13",Z[Z.BRANCH_LENGTH=8064]="BRANCH_LENGTH",Z[Z.JUMP_TABLE=127]="JUMP_TABLE"})(o||(o={}));var d;(function(Z){Z[Z.NUM=35]="NUM",Z[Z.SEMI=59]="SEMI",Z[Z.EQUALS=61]="EQUALS",Z[Z.ZERO=48]="ZERO",Z[Z.NINE=57]="NINE",Z[Z.LOWER_A=97]="LOWER_A",Z[Z.LOWER_F=102]="LOWER_F",Z[Z.LOWER_X=120]="LOWER_X",Z[Z.LOWER_Z=122]="LOWER_Z",Z[Z.UPPER_A=65]="UPPER_A",Z[Z.UPPER_F=70]="UPPER_F",Z[Z.UPPER_Z=90]="UPPER_Z"})(d||(d={}));var e8=32;function y2(Z){return Z>=d.ZERO&&Z<=d.NINE}function YX(Z){return Z>=d.UPPER_A&&Z<=d.UPPER_F||Z>=d.LOWER_A&&Z<=d.LOWER_F}function JX(Z){return Z>=d.UPPER_A&&Z<=d.UPPER_Z||Z>=d.LOWER_A&&Z<=d.LOWER_Z||y2(Z)}function VX(Z){return Z===d.EQUALS||JX(Z)}var s;(function(Z){Z[Z.EntityStart=0]="EntityStart",Z[Z.NumericStart=1]="NumericStart",Z[Z.NumericDecimal=2]="NumericDecimal",Z[Z.NumericHex=3]="NumericHex",Z[Z.NamedEntity=4]="NamedEntity"})(s||(s={}));var B0;(function(Z){Z[Z.Legacy=0]="Legacy",Z[Z.Strict=1]="Strict",Z[Z.Attribute=2]="Attribute"})(B0||(B0={}));class O2{decodeTree;emitCodePoint;errors;constructor(Z,X,Q){this.decodeTree=Z,this.emitCodePoint=X,this.errors=Q}state=s.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=B0.Strict;runConsumed=0;startEntity(Z){this.decodeMode=Z,this.state=s.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(Z,X){switch(this.state){case s.EntityStart:{if(Z.charCodeAt(X)===d.NUM)return this.state=s.NumericStart,this.consumed+=1,this.stateNumericStart(Z,X+1);return this.state=s.NamedEntity,this.stateNamedEntity(Z,X)}case s.NumericStart:return this.stateNumericStart(Z,X);case s.NumericDecimal:return this.stateNumericDecimal(Z,X);case s.NumericHex:return this.stateNumericHex(Z,X);case s.NamedEntity:return this.stateNamedEntity(Z,X)}}stateNumericStart(Z,X){if(X>=Z.length)return-1;if((Z.charCodeAt(X)|e8)===d.LOWER_X)return this.state=s.NumericHex,this.consumed+=1,this.stateNumericHex(Z,X+1);return this.state=s.NumericDecimal,this.stateNumericDecimal(Z,X)}stateNumericHex(Z,X){while(X<Z.length){let Q=Z.charCodeAt(X);if(y2(Q)||YX(Q)){let K=Q<=d.NINE?Q-d.ZERO:(Q|e8)-d.LOWER_A+10;this.result=this.result*16+K,this.consumed++,X++}else return this.emitNumericEntity(Q,3)}return-1}stateNumericDecimal(Z,X){while(X<Z.length){let Q=Z.charCodeAt(X);if(y2(Q))this.result=this.result*10+(Q-d.ZERO),this.consumed++,X++;else return this.emitNumericEntity(Q,2)}return-1}emitNumericEntity(Z,X){if(this.consumed<=X)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(Z===d.SEMI)this.consumed+=1;else if(this.decodeMode===B0.Strict)return 0;if(this.emitCodePoint(n8(this.result),this.consumed),this.errors){if(Z!==d.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(Z,X){let{decodeTree:Q}=this,K=Q[this.treeIndex],Y=(K&o.VALUE_LENGTH)>>14;while(X<Z.length){if(Y===0&&(K&o.FLAG13)!==0){let H=(K&o.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let w=K&o.JUMP_TABLE;if(Z.charCodeAt(X)!==w)return this.result===0?0:this.emitNotTerminatedNamedEntity();X++,this.excess++,this.runConsumed++}while(this.runConsumed<H){if(X>=Z.length)return-1;let w=this.runConsumed-1,B=Q[this.treeIndex+1+(w>>1)],U=w%2===0?B&255:B>>8&255;if(Z.charCodeAt(X)!==U)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();X++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(H>>1),K=Q[this.treeIndex],Y=(K&o.VALUE_LENGTH)>>14}if(X>=Z.length)break;let J=Z.charCodeAt(X);if(J===d.SEMI&&Y!==0&&(K&o.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,Y,this.consumed+this.excess);if(this.treeIndex=jX(Q,K,this.treeIndex+Math.max(1,Y),J),this.treeIndex<0)return this.result===0||this.decodeMode===B0.Attribute&&(Y===0||VX(J))?0:this.emitNotTerminatedNamedEntity();if(K=Q[this.treeIndex],Y=(K&o.VALUE_LENGTH)>>14,Y!==0){if(J===d.SEMI)return this.emitNamedEntityData(this.treeIndex,Y,this.consumed+this.excess);if(this.decodeMode!==B0.Strict&&(K&o.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}X++,this.excess++}return-1}emitNotTerminatedNamedEntity(){let{result:Z,decodeTree:X}=this,Q=(X[Z]&o.VALUE_LENGTH)>>14;return this.emitNamedEntityData(Z,Q,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(Z,X,Q){let{decodeTree:K}=this;if(this.emitCodePoint(X===1?K[Z]&~(o.VALUE_LENGTH|o.FLAG13):K[Z+1],Q),X===3)this.emitCodePoint(K[Z+2],Q);return Q}end(){switch(this.state){case s.NamedEntity:return this.result!==0&&(this.decodeMode!==B0.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case s.NumericDecimal:return this.emitNumericEntity(0,2);case s.NumericHex:return this.emitNumericEntity(0,3);case s.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case s.EntityStart:return 0}}}function jX(Z,X,Q,K){let Y=(X&o.BRANCH_LENGTH)>>7,J=X&o.JUMP_TABLE;if(Y===0)return J!==0&&K===J?Q:-1;if(J){let U=K-J;return U<0||U>=Y?-1:Z[Q+U]-1}let H=Y+1>>1,w=0,B=Y-1;while(w<=B){let U=w+B>>>1,q=U>>1,M=Z[Q+q]>>(U&1)*8&255;if(M<K)w=U+1;else if(M>K)B=U-1;else return Z[Q+H+U]}return-1}var P;(function(Z){Z.HTML="http://www.w3.org/1999/xhtml",Z.MATHML="http://www.w3.org/1998/Math/MathML",Z.SVG="http://www.w3.org/2000/svg",Z.XLINK="http://www.w3.org/1999/xlink",Z.XML="http://www.w3.org/XML/1998/namespace",Z.XMLNS="http://www.w3.org/2000/xmlns/"})(P||(P={}));var P0;(function(Z){Z.TYPE="type",Z.ACTION="action",Z.ENCODING="encoding",Z.PROMPT="prompt",Z.NAME="name",Z.COLOR="color",Z.FACE="face",Z.SIZE="size"})(P0||(P0={}));var Z0;(function(Z){Z.NO_QUIRKS="no-quirks",Z.QUIRKS="quirks",Z.LIMITED_QUIRKS="limited-quirks"})(Z0||(Z0={}));var F;(function(Z){Z.A="a",Z.ADDRESS="address",Z.ANNOTATION_XML="annotation-xml",Z.APPLET="applet",Z.AREA="area",Z.ARTICLE="article",Z.ASIDE="aside",Z.B="b",Z.BASE="base",Z.BASEFONT="basefont",Z.BGSOUND="bgsound",Z.BIG="big",Z.BLOCKQUOTE="blockquote",Z.BODY="body",Z.BR="br",Z.BUTTON="button",Z.CAPTION="caption",Z.CENTER="center",Z.CODE="code",Z.COL="col",Z.COLGROUP="colgroup",Z.DD="dd",Z.DESC="desc",Z.DETAILS="details",Z.DIALOG="dialog",Z.DIR="dir",Z.DIV="div",Z.DL="dl",Z.DT="dt",Z.EM="em",Z.EMBED="embed",Z.FIELDSET="fieldset",Z.FIGCAPTION="figcaption",Z.FIGURE="figure",Z.FONT="font",Z.FOOTER="footer",Z.FOREIGN_OBJECT="foreignObject",Z.FORM="form",Z.FRAME="frame",Z.FRAMESET="frameset",Z.H1="h1",Z.H2="h2",Z.H3="h3",Z.H4="h4",Z.H5="h5",Z.H6="h6",Z.HEAD="head",Z.HEADER="header",Z.HGROUP="hgroup",Z.HR="hr",Z.HTML="html",Z.I="i",Z.IMG="img",Z.IMAGE="image",Z.INPUT="input",Z.IFRAME="iframe",Z.KEYGEN="keygen",Z.LABEL="label",Z.LI="li",Z.LINK="link",Z.LISTING="listing",Z.MAIN="main",Z.MALIGNMARK="malignmark",Z.MARQUEE="marquee",Z.MATH="math",Z.MENU="menu",Z.META="meta",Z.MGLYPH="mglyph",Z.MI="mi",Z.MO="mo",Z.MN="mn",Z.MS="ms",Z.MTEXT="mtext",Z.NAV="nav",Z.NOBR="nobr",Z.NOFRAMES="noframes",Z.NOEMBED="noembed",Z.NOSCRIPT="noscript",Z.OBJECT="object",Z.OL="ol",Z.OPTGROUP="optgroup",Z.OPTION="option",Z.P="p",Z.PARAM="param",Z.PLAINTEXT="plaintext",Z.PRE="pre",Z.RB="rb",Z.RP="rp",Z.RT="rt",Z.RTC="rtc",Z.RUBY="ruby",Z.S="s",Z.SCRIPT="script",Z.SEARCH="search",Z.SECTION="section",Z.SELECT="select",Z.SOURCE="source",Z.SMALL="small",Z.SPAN="span",Z.STRIKE="strike",Z.STRONG="strong",Z.STYLE="style",Z.SUB="sub",Z.SUMMARY="summary",Z.SUP="sup",Z.TABLE="table",Z.TBODY="tbody",Z.TEMPLATE="template",Z.TEXTAREA="textarea",Z.TFOOT="tfoot",Z.TD="td",Z.TH="th",Z.THEAD="thead",Z.TITLE="title",Z.TR="tr",Z.TRACK="track",Z.TT="tt",Z.U="u",Z.UL="ul",Z.SVG="svg",Z.VAR="var",Z.WBR="wbr",Z.XMP="xmp"})(F||(F={}));var W;(function(Z){Z[Z.UNKNOWN=0]="UNKNOWN",Z[Z.A=1]="A",Z[Z.ADDRESS=2]="ADDRESS",Z[Z.ANNOTATION_XML=3]="ANNOTATION_XML",Z[Z.APPLET=4]="APPLET",Z[Z.AREA=5]="AREA",Z[Z.ARTICLE=6]="ARTICLE",Z[Z.ASIDE=7]="ASIDE",Z[Z.B=8]="B",Z[Z.BASE=9]="BASE",Z[Z.BASEFONT=10]="BASEFONT",Z[Z.BGSOUND=11]="BGSOUND",Z[Z.BIG=12]="BIG",Z[Z.BLOCKQUOTE=13]="BLOCKQUOTE",Z[Z.BODY=14]="BODY",Z[Z.BR=15]="BR",Z[Z.BUTTON=16]="BUTTON",Z[Z.CAPTION=17]="CAPTION",Z[Z.CENTER=18]="CENTER",Z[Z.CODE=19]="CODE",Z[Z.COL=20]="COL",Z[Z.COLGROUP=21]="COLGROUP",Z[Z.DD=22]="DD",Z[Z.DESC=23]="DESC",Z[Z.DETAILS=24]="DETAILS",Z[Z.DIALOG=25]="DIALOG",Z[Z.DIR=26]="DIR",Z[Z.DIV=27]="DIV",Z[Z.DL=28]="DL",Z[Z.DT=29]="DT",Z[Z.EM=30]="EM",Z[Z.EMBED=31]="EMBED",Z[Z.FIELDSET=32]="FIELDSET",Z[Z.FIGCAPTION=33]="FIGCAPTION",Z[Z.FIGURE=34]="FIGURE",Z[Z.FONT=35]="FONT",Z[Z.FOOTER=36]="FOOTER",Z[Z.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",Z[Z.FORM=38]="FORM",Z[Z.FRAME=39]="FRAME",Z[Z.FRAMESET=40]="FRAMESET",Z[Z.H1=41]="H1",Z[Z.H2=42]="H2",Z[Z.H3=43]="H3",Z[Z.H4=44]="H4",Z[Z.H5=45]="H5",Z[Z.H6=46]="H6",Z[Z.HEAD=47]="HEAD",Z[Z.HEADER=48]="HEADER",Z[Z.HGROUP=49]="HGROUP",Z[Z.HR=50]="HR",Z[Z.HTML=51]="HTML",Z[Z.I=52]="I",Z[Z.IMG=53]="IMG",Z[Z.IMAGE=54]="IMAGE",Z[Z.INPUT=55]="INPUT",Z[Z.IFRAME=56]="IFRAME",Z[Z.KEYGEN=57]="KEYGEN",Z[Z.LABEL=58]="LABEL",Z[Z.LI=59]="LI",Z[Z.LINK=60]="LINK",Z[Z.LISTING=61]="LISTING",Z[Z.MAIN=62]="MAIN",Z[Z.MALIGNMARK=63]="MALIGNMARK",Z[Z.MARQUEE=64]="MARQUEE",Z[Z.MATH=65]="MATH",Z[Z.MENU=66]="MENU",Z[Z.META=67]="META",Z[Z.MGLYPH=68]="MGLYPH",Z[Z.MI=69]="MI",Z[Z.MO=70]="MO",Z[Z.MN=71]="MN",Z[Z.MS=72]="MS",Z[Z.MTEXT=73]="MTEXT",Z[Z.NAV=74]="NAV",Z[Z.NOBR=75]="NOBR",Z[Z.NOFRAMES=76]="NOFRAMES",Z[Z.NOEMBED=77]="NOEMBED",Z[Z.NOSCRIPT=78]="NOSCRIPT",Z[Z.OBJECT=79]="OBJECT",Z[Z.OL=80]="OL",Z[Z.OPTGROUP=81]="OPTGROUP",Z[Z.OPTION=82]="OPTION",Z[Z.P=83]="P",Z[Z.PARAM=84]="PARAM",Z[Z.PLAINTEXT=85]="PLAINTEXT",Z[Z.PRE=86]="PRE",Z[Z.RB=87]="RB",Z[Z.RP=88]="RP",Z[Z.RT=89]="RT",Z[Z.RTC=90]="RTC",Z[Z.RUBY=91]="RUBY",Z[Z.S=92]="S",Z[Z.SCRIPT=93]="SCRIPT",Z[Z.SEARCH=94]="SEARCH",Z[Z.SECTION=95]="SECTION",Z[Z.SELECT=96]="SELECT",Z[Z.SOURCE=97]="SOURCE",Z[Z.SMALL=98]="SMALL",Z[Z.SPAN=99]="SPAN",Z[Z.STRIKE=100]="STRIKE",Z[Z.STRONG=101]="STRONG",Z[Z.STYLE=102]="STYLE",Z[Z.SUB=103]="SUB",Z[Z.SUMMARY=104]="SUMMARY",Z[Z.SUP=105]="SUP",Z[Z.TABLE=106]="TABLE",Z[Z.TBODY=107]="TBODY",Z[Z.TEMPLATE=108]="TEMPLATE",Z[Z.TEXTAREA=109]="TEXTAREA",Z[Z.TFOOT=110]="TFOOT",Z[Z.TD=111]="TD",Z[Z.TH=112]="TH",Z[Z.THEAD=113]="THEAD",Z[Z.TITLE=114]="TITLE",Z[Z.TR=115]="TR",Z[Z.TRACK=116]="TRACK",Z[Z.TT=117]="TT",Z[Z.U=118]="U",Z[Z.UL=119]="UL",Z[Z.SVG=120]="SVG",Z[Z.VAR=121]="VAR",Z[Z.WBR=122]="WBR",Z[Z.XMP=123]="XMP"})(W||(W={}));var HX=new Map([[F.A,W.A],[F.ADDRESS,W.ADDRESS],[F.ANNOTATION_XML,W.ANNOTATION_XML],[F.APPLET,W.APPLET],[F.AREA,W.AREA],[F.ARTICLE,W.ARTICLE],[F.ASIDE,W.ASIDE],[F.B,W.B],[F.BASE,W.BASE],[F.BASEFONT,W.BASEFONT],[F.BGSOUND,W.BGSOUND],[F.BIG,W.BIG],[F.BLOCKQUOTE,W.BLOCKQUOTE],[F.BODY,W.BODY],[F.BR,W.BR],[F.BUTTON,W.BUTTON],[F.CAPTION,W.CAPTION],[F.CENTER,W.CENTER],[F.CODE,W.CODE],[F.COL,W.COL],[F.COLGROUP,W.COLGROUP],[F.DD,W.DD],[F.DESC,W.DESC],[F.DETAILS,W.DETAILS],[F.DIALOG,W.DIALOG],[F.DIR,W.DIR],[F.DIV,W.DIV],[F.DL,W.DL],[F.DT,W.DT],[F.EM,W.EM],[F.EMBED,W.EMBED],[F.FIELDSET,W.FIELDSET],[F.FIGCAPTION,W.FIGCAPTION],[F.FIGURE,W.FIGURE],[F.FONT,W.FONT],[F.FOOTER,W.FOOTER],[F.FOREIGN_OBJECT,W.FOREIGN_OBJECT],[F.FORM,W.FORM],[F.FRAME,W.FRAME],[F.FRAMESET,W.FRAMESET],[F.H1,W.H1],[F.H2,W.H2],[F.H3,W.H3],[F.H4,W.H4],[F.H5,W.H5],[F.H6,W.H6],[F.HEAD,W.HEAD],[F.HEADER,W.HEADER],[F.HGROUP,W.HGROUP],[F.HR,W.HR],[F.HTML,W.HTML],[F.I,W.I],[F.IMG,W.IMG],[F.IMAGE,W.IMAGE],[F.INPUT,W.INPUT],[F.IFRAME,W.IFRAME],[F.KEYGEN,W.KEYGEN],[F.LABEL,W.LABEL],[F.LI,W.LI],[F.LINK,W.LINK],[F.LISTING,W.LISTING],[F.MAIN,W.MAIN],[F.MALIGNMARK,W.MALIGNMARK],[F.MARQUEE,W.MARQUEE],[F.MATH,W.MATH],[F.MENU,W.MENU],[F.META,W.META],[F.MGLYPH,W.MGLYPH],[F.MI,W.MI],[F.MO,W.MO],[F.MN,W.MN],[F.MS,W.MS],[F.MTEXT,W.MTEXT],[F.NAV,W.NAV],[F.NOBR,W.NOBR],[F.NOFRAMES,W.NOFRAMES],[F.NOEMBED,W.NOEMBED],[F.NOSCRIPT,W.NOSCRIPT],[F.OBJECT,W.OBJECT],[F.OL,W.OL],[F.OPTGROUP,W.OPTGROUP],[F.OPTION,W.OPTION],[F.P,W.P],[F.PARAM,W.PARAM],[F.PLAINTEXT,W.PLAINTEXT],[F.PRE,W.PRE],[F.RB,W.RB],[F.RP,W.RP],[F.RT,W.RT],[F.RTC,W.RTC],[F.RUBY,W.RUBY],[F.S,W.S],[F.SCRIPT,W.SCRIPT],[F.SEARCH,W.SEARCH],[F.SECTION,W.SECTION],[F.SELECT,W.SELECT],[F.SOURCE,W.SOURCE],[F.SMALL,W.SMALL],[F.SPAN,W.SPAN],[F.STRIKE,W.STRIKE],[F.STRONG,W.STRONG],[F.STYLE,W.STYLE],[F.SUB,W.SUB],[F.SUMMARY,W.SUMMARY],[F.SUP,W.SUP],[F.TABLE,W.TABLE],[F.TBODY,W.TBODY],[F.TEMPLATE,W.TEMPLATE],[F.TEXTAREA,W.TEXTAREA],[F.TFOOT,W.TFOOT],[F.TD,W.TD],[F.TH,W.TH],[F.THEAD,W.THEAD],[F.TITLE,W.TITLE],[F.TR,W.TR],[F.TRACK,W.TRACK],[F.TT,W.TT],[F.U,W.U],[F.UL,W.UL],[F.SVG,W.SVG],[F.VAR,W.VAR],[F.WBR,W.WBR],[F.XMP,W.XMP]]);function S0(Z){var X;return(X=HX.get(Z))!==null&&X!==void 0?X:W.UNKNOWN}var y=W,Z3={[P.HTML]:new Set([y.ADDRESS,y.APPLET,y.AREA,y.ARTICLE,y.ASIDE,y.BASE,y.BASEFONT,y.BGSOUND,y.BLOCKQUOTE,y.BODY,y.BR,y.BUTTON,y.CAPTION,y.CENTER,y.COL,y.COLGROUP,y.DD,y.DETAILS,y.DIR,y.DIV,y.DL,y.DT,y.EMBED,y.FIELDSET,y.FIGCAPTION,y.FIGURE,y.FOOTER,y.FORM,y.FRAME,y.FRAMESET,y.H1,y.H2,y.H3,y.H4,y.H5,y.H6,y.HEAD,y.HEADER,y.HGROUP,y.HR,y.HTML,y.IFRAME,y.IMG,y.INPUT,y.LI,y.LINK,y.LISTING,y.MAIN,y.MARQUEE,y.MENU,y.META,y.NAV,y.NOEMBED,y.NOFRAMES,y.NOSCRIPT,y.OBJECT,y.OL,y.P,y.PARAM,y.PLAINTEXT,y.PRE,y.SCRIPT,y.SECTION,y.SELECT,y.SOURCE,y.STYLE,y.SUMMARY,y.TABLE,y.TBODY,y.TD,y.TEMPLATE,y.TEXTAREA,y.TFOOT,y.TH,y.THEAD,y.TITLE,y.TR,y.TRACK,y.UL,y.WBR,y.XMP]),[P.MATHML]:new Set([y.MI,y.MO,y.MN,y.MS,y.MTEXT,y.ANNOTATION_XML]),[P.SVG]:new Set([y.TITLE,y.FOREIGN_OBJECT,y.DESC]),[P.XLINK]:new Set,[P.XML]:new Set,[P.XMLNS]:new Set},j1=new Set([y.H1,y.H2,y.H3,y.H4,y.H5,y.H6]),zX=new Set([F.STYLE,F.SCRIPT,F.XMP,F.IFRAME,F.NOEMBED,F.NOFRAMES,F.PLAINTEXT]);function X3(Z,X){return zX.has(Z)||X&&Z===F.NOSCRIPT}var j;(function(Z){Z[Z.DATA=0]="DATA",Z[Z.RCDATA=1]="RCDATA",Z[Z.RAWTEXT=2]="RAWTEXT",Z[Z.SCRIPT_DATA=3]="SCRIPT_DATA",Z[Z.PLAINTEXT=4]="PLAINTEXT",Z[Z.TAG_OPEN=5]="TAG_OPEN",Z[Z.END_TAG_OPEN=6]="END_TAG_OPEN",Z[Z.TAG_NAME=7]="TAG_NAME",Z[Z.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",Z[Z.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",Z[Z.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",Z[Z.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",Z[Z.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",Z[Z.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",Z[Z.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",Z[Z.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",Z[Z.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",Z[Z.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",Z[Z.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",Z[Z.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",Z[Z.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",Z[Z.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",Z[Z.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",Z[Z.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",Z[Z.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",Z[Z.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",Z[Z.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",Z[Z.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",Z[Z.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",Z[Z.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",Z[Z.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",Z[Z.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",Z[Z.BOGUS_COMMENT=40]="BOGUS_COMMENT",Z[Z.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",Z[Z.COMMENT_START=42]="COMMENT_START",Z[Z.COMMENT_START_DASH=43]="COMMENT_START_DASH",Z[Z.COMMENT=44]="COMMENT",Z[Z.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",Z[Z.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",Z[Z.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",Z[Z.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",Z[Z.COMMENT_END_DASH=49]="COMMENT_END_DASH",Z[Z.COMMENT_END=50]="COMMENT_END",Z[Z.COMMENT_END_BANG=51]="COMMENT_END_BANG",Z[Z.DOCTYPE=52]="DOCTYPE",Z[Z.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",Z[Z.DOCTYPE_NAME=54]="DOCTYPE_NAME",Z[Z.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",Z[Z.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",Z[Z.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",Z[Z.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",Z[Z.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",Z[Z.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",Z[Z.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",Z[Z.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",Z[Z.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",Z[Z.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",Z[Z.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",Z[Z.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",Z[Z.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",Z[Z.CDATA_SECTION=68]="CDATA_SECTION",Z[Z.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",Z[Z.CDATA_SECTION_END=70]="CDATA_SECTION_END",Z[Z.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",Z[Z.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(j||(j={}));var n={DATA:j.DATA,RCDATA:j.RCDATA,RAWTEXT:j.RAWTEXT,SCRIPT_DATA:j.SCRIPT_DATA,PLAINTEXT:j.PLAINTEXT,CDATA_SECTION:j.CDATA_SECTION};function UX(Z){return Z>=V.DIGIT_0&&Z<=V.DIGIT_9}function H1(Z){return Z>=V.LATIN_CAPITAL_A&&Z<=V.LATIN_CAPITAL_Z}function FX(Z){return Z>=V.LATIN_SMALL_A&&Z<=V.LATIN_SMALL_Z}function M0(Z){return FX(Z)||H1(Z)}function Q3(Z){return M0(Z)||UX(Z)}function Q4(Z){return Z+32}function W3(Z){return Z===V.SPACE||Z===V.LINE_FEED||Z===V.TABULATION||Z===V.FORM_FEED}function K3(Z){return W3(Z)||Z===V.SOLIDUS||Z===V.GREATER_THAN_SIGN}function BX(Z){if(Z===V.NULL)return L.nullCharacterReference;else if(Z>1114111)return L.characterReferenceOutsideUnicodeRange;else if(t1(Z))return L.surrogateCharacterReference;else if(Z4(Z))return L.noncharacterCharacterReference;else if(e1(Z)||Z===V.CARRIAGE_RETURN)return L.controlCharacterReference;return null}class K4{constructor(Z,X){this.options=Z,this.handler=X,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=j.DATA,this.returnState=j.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new P2(X),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new O2(f2,(Q,K)=>{this.preprocessor.pos=this.entityStartPos+K-1,this._flushCodePointConsumedAsCharacterReference(Q)},X.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(L.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:(Q)=>{this._err(L.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+Q)},validateNumericCharacterReference:(Q)=>{let K=BX(Q);if(K)this._err(K,1)}}:void 0)}_err(Z,X=0){var Q,K;(K=(Q=this.handler).onParseError)===null||K===void 0||K.call(Q,this.preprocessor.getError(Z,X))}getCurrentLocation(Z){if(!this.options.sourceCodeLocationInfo)return null;return{startLine:this.preprocessor.line,startCol:this.preprocessor.col-Z,startOffset:this.preprocessor.offset-Z,endLine:-1,endCol:-1,endOffset:-1}}_runParsingLoop(){if(this.inLoop)return;this.inLoop=!0;while(this.active&&!this.paused){this.consumedAfterSnapshot=0;let Z=this._consume();if(!this._ensureHibernation())this._callState(Z)}this.inLoop=!1}pause(){this.paused=!0}resume(Z){if(!this.paused)throw Error("Parser was already resumed");if(this.paused=!1,this.inLoop)return;if(this._runParsingLoop(),!this.paused)Z===null||Z===void 0||Z()}write(Z,X,Q){if(this.active=!0,this.preprocessor.write(Z,X),this._runParsingLoop(),!this.paused)Q===null||Q===void 0||Q()}insertHtmlAtCurrentPos(Z){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(Z),this._runParsingLoop()}_ensureHibernation(){if(this.preprocessor.endOfChunkHit)return this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0;return!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(Z){this.consumedAfterSnapshot+=Z;for(let X=0;X<Z;X++)this.preprocessor.advance()}_consumeSequenceIfMatch(Z,X){if(this.preprocessor.startsWith(Z,X))return this._advanceBy(Z.length-1),!0;return!1}_createStartTagToken(){this.currentToken={type:S.START_TAG,tagName:"",tagID:W.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(1)}}_createEndTagToken(){this.currentToken={type:S.END_TAG,tagName:"",tagID:W.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(2)}}_createCommentToken(Z){this.currentToken={type:S.COMMENT,data:"",location:this.getCurrentLocation(Z)}}_createDoctypeToken(Z){this.currentToken={type:S.DOCTYPE,name:Z,forceQuirks:!1,publicId:null,systemId:null,location:this.currentLocation}}_createCharacterToken(Z,X){this.currentCharacterToken={type:Z,chars:X,location:this.currentLocation}}_createAttr(Z){this.currentAttr={name:Z,value:""},this.currentLocation=this.getCurrentLocation(0)}_leaveAttrName(){var Z,X;let Q=this.currentToken;if(X4(Q,this.currentAttr.name)===null){if(Q.attrs.push(this.currentAttr),Q.location&&this.currentLocation){let K=(Z=(X=Q.location).attrs)!==null&&Z!==void 0?Z:X.attrs=Object.create(null);K[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue()}}else this._err(L.duplicateAttribute)}_leaveAttrValue(){if(this.currentLocation)this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset}prepareToken(Z){if(this._emitCurrentCharacterToken(Z.location),this.currentToken=null,Z.location)Z.location.endLine=this.preprocessor.line,Z.location.endCol=this.preprocessor.col+1,Z.location.endOffset=this.preprocessor.offset+1;this.currentLocation=this.getCurrentLocation(-1)}emitCurrentTagToken(){let Z=this.currentToken;if(this.prepareToken(Z),Z.tagID=S0(Z.tagName),Z.type===S.START_TAG)this.lastStartTagName=Z.tagName,this.handler.onStartTag(Z);else{if(Z.attrs.length>0)this._err(L.endTagWithAttributes);if(Z.selfClosing)this._err(L.endTagWithTrailingSolidus);this.handler.onEndTag(Z)}this.preprocessor.dropParsedChunk()}emitCurrentComment(Z){this.prepareToken(Z),this.handler.onComment(Z),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(Z){this.prepareToken(Z),this.handler.onDoctype(Z),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(Z){if(this.currentCharacterToken){if(Z&&this.currentCharacterToken.location)this.currentCharacterToken.location.endLine=Z.startLine,this.currentCharacterToken.location.endCol=Z.startCol,this.currentCharacterToken.location.endOffset=Z.startOffset;switch(this.currentCharacterToken.type){case S.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case S.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case S.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){let Z=this.getCurrentLocation(0);if(Z)Z.endLine=Z.startLine,Z.endCol=Z.startCol,Z.endOffset=Z.startOffset;this._emitCurrentCharacterToken(Z),this.handler.onEof({type:S.EOF,location:Z}),this.active=!1}_appendCharToCurrentCharacterToken(Z,X){if(this.currentCharacterToken)if(this.currentCharacterToken.type===Z){this.currentCharacterToken.chars+=X;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(Z,X)}_emitCodePoint(Z){let X=W3(Z)?S.WHITESPACE_CHARACTER:Z===V.NULL?S.NULL_CHARACTER:S.CHARACTER;this._appendCharToCurrentCharacterToken(X,Z<65536?String.fromCharCode(Z):String.fromCodePoint(Z))}_emitChars(Z){this._appendCharToCurrentCharacterToken(S.CHARACTER,Z)}_startCharacterReference(){this.returnState=this.state,this.state=j.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?B0.Attribute:B0.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===j.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===j.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(Z){if(this._isCharacterReferenceInAttribute())this.currentAttr.value+=String.fromCodePoint(Z);else this._emitCodePoint(Z)}_callState(Z){switch(this.state){case j.DATA:{this._stateData(Z);break}case j.RCDATA:{this._stateRcdata(Z);break}case j.RAWTEXT:{this._stateRawtext(Z);break}case j.SCRIPT_DATA:{this._stateScriptData(Z);break}case j.PLAINTEXT:{this._statePlaintext(Z);break}case j.TAG_OPEN:{this._stateTagOpen(Z);break}case j.END_TAG_OPEN:{this._stateEndTagOpen(Z);break}case j.TAG_NAME:{this._stateTagName(Z);break}case j.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(Z);break}case j.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(Z);break}case j.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(Z);break}case j.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(Z);break}case j.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(Z);break}case j.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(Z);break}case j.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(Z);break}case j.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(Z);break}case j.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(Z);break}case j.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(Z);break}case j.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(Z);break}case j.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(Z);break}case j.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(Z);break}case j.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(Z);break}case j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(Z);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(Z);break}case j.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(Z);break}case j.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(Z);break}case j.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(Z);break}case j.ATTRIBUTE_NAME:{this._stateAttributeName(Z);break}case j.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(Z);break}case j.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(Z);break}case j.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(Z);break}case j.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(Z);break}case j.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(Z);break}case j.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(Z);break}case j.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(Z);break}case j.BOGUS_COMMENT:{this._stateBogusComment(Z);break}case j.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(Z);break}case j.COMMENT_START:{this._stateCommentStart(Z);break}case j.COMMENT_START_DASH:{this._stateCommentStartDash(Z);break}case j.COMMENT:{this._stateComment(Z);break}case j.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(Z);break}case j.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(Z);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(Z);break}case j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(Z);break}case j.COMMENT_END_DASH:{this._stateCommentEndDash(Z);break}case j.COMMENT_END:{this._stateCommentEnd(Z);break}case j.COMMENT_END_BANG:{this._stateCommentEndBang(Z);break}case j.DOCTYPE:{this._stateDoctype(Z);break}case j.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(Z);break}case j.DOCTYPE_NAME:{this._stateDoctypeName(Z);break}case j.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(Z);break}case j.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(Z);break}case j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(Z);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(Z);break}case j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(Z);break}case j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(Z);break}case j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(Z);break}case j.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(Z);break}case j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(Z);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(Z);break}case j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(Z);break}case j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(Z);break}case j.BOGUS_DOCTYPE:{this._stateBogusDoctype(Z);break}case j.CDATA_SECTION:{this._stateCdataSection(Z);break}case j.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(Z);break}case j.CDATA_SECTION_END:{this._stateCdataSectionEnd(Z);break}case j.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case j.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(Z);break}default:throw Error("Unknown state")}}_stateData(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=j.TAG_OPEN;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitCodePoint(Z);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateRcdata(Z){switch(Z){case V.AMPERSAND:{this._startCharacterReference();break}case V.LESS_THAN_SIGN:{this.state=j.RCDATA_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateRawtext(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=j.RAWTEXT_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptData(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_statePlaintext(Z){switch(Z){case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateTagOpen(Z){if(M0(Z))this._createStartTagToken(),this.state=j.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.EXCLAMATION_MARK:{this.state=j.MARKUP_DECLARATION_OPEN;break}case V.SOLIDUS:{this.state=j.END_TAG_OPEN;break}case V.QUESTION_MARK:{this._err(L.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=j.BOGUS_COMMENT,this._stateBogusComment(Z);break}case V.EOF:{this._err(L.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(L.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=j.DATA,this._stateData(Z)}}_stateEndTagOpen(Z){if(M0(Z))this._createEndTagToken(),this.state=j.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.GREATER_THAN_SIGN:{this._err(L.missingEndTagName),this.state=j.DATA;break}case V.EOF:{this._err(L.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(L.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(Z)}}_stateTagName(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.tagName+=u;break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:X.tagName+=String.fromCodePoint(H1(Z)?Q4(Z):Z)}}_stateRcdataLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.RCDATA_END_TAG_OPEN;else this._emitChars("<"),this.state=j.RCDATA,this._stateRcdata(Z)}_stateRcdataEndTagOpen(Z){if(M0(Z))this.state=j.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(Z);else this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(Z)}handleSpecialEndTag(Z){if(!this.preprocessor.startsWith(this.lastStartTagName,!1))return!this._ensureHibernation();this._createEndTagToken();let X=this.currentToken;switch(X.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=j.BEFORE_ATTRIBUTE_NAME,!1;case V.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=j.SELF_CLOSING_START_TAG,!1;case V.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=j.DATA,!1;default:return!this._ensureHibernation()}}_stateRcdataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.RCDATA,this._stateRcdata(Z)}_stateRawtextLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.RAWTEXT_END_TAG_OPEN;else this._emitChars("<"),this.state=j.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagOpen(Z){if(M0(Z))this.state=j.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(Z);else this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.RAWTEXT,this._stateRawtext(Z)}_stateScriptDataLessThanSign(Z){switch(Z){case V.SOLIDUS:{this.state=j.SCRIPT_DATA_END_TAG_OPEN;break}case V.EXCLAMATION_MARK:{this.state=j.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}}_stateScriptDataEndTagOpen(Z){if(M0(Z))this.state=j.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(Z);else this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStart(Z){if(Z===V.HYPHEN_MINUS)this.state=j.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-");else this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStartDash(Z){if(Z===V.HYPHEN_MINUS)this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");else this.state=j.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptDataEscapedDash(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedDashDash(Z){switch(Z){case V.HYPHEN_MINUS:{this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;else if(M0(Z))this._emitChars("<"),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(Z);else this._emitChars("<"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagOpen(Z){if(M0(Z))this.state=j.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(Z);else this._emitChars("</"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscapeStart(Z){if(this.preprocessor.startsWith(e.SCRIPT,!1)&&K3(this.preprocessor.peek(e.SCRIPT.length))){this._emitCodePoint(Z);for(let X=0;X<e.SCRIPT.length;X++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED}else if(!this._ensureHibernation())this.state=j.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedDash(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedDashDash(Z){switch(Z){case V.HYPHEN_MINUS:{this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.GREATER_THAN_SIGN:{this.state=j.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=j.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/");else this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(Z)}_stateScriptDataDoubleEscapeEnd(Z){if(this.preprocessor.startsWith(e.SCRIPT,!1)&&K3(this.preprocessor.peek(e.SCRIPT.length))){this._emitCodePoint(Z);for(let X=0;X<e.SCRIPT.length;X++)this._emitCodePoint(this._consume());this.state=j.SCRIPT_DATA_ESCAPED}else if(!this._ensureHibernation())this.state=j.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(Z)}_stateBeforeAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.SOLIDUS:case V.GREATER_THAN_SIGN:case V.EOF:{this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._err(L.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=j.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(Z)}}_stateAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:case V.SOLIDUS:case V.GREATER_THAN_SIGN:case V.EOF:{this._leaveAttrName(),this.state=j.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._leaveAttrName(),this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case V.QUOTATION_MARK:case V.APOSTROPHE:case V.LESS_THAN_SIGN:{this._err(L.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(Z);break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.name+=u;break}default:this.currentAttr.name+=String.fromCodePoint(H1(Z)?Q4(Z):Z)}}_stateAfterAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.SOLIDUS:{this.state=j.SELF_CLOSING_START_TAG;break}case V.EQUALS_SIGN:{this.state=j.BEFORE_ATTRIBUTE_VALUE;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=j.ATTRIBUTE_NAME,this._stateAttributeName(Z)}}_stateBeforeAttributeValue(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{this.state=j.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this.state=j.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingAttributeValue),this.state=j.DATA,this.emitCurrentTagToken();break}default:this.state=j.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(Z)}}_stateAttributeValueDoubleQuoted(Z){switch(Z){case V.QUOTATION_MARK:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAttributeValueSingleQuoted(Z){switch(Z){case V.APOSTROPHE:{this.state=j.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAttributeValueUnquoted(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.QUOTATION_MARK:case V.APOSTROPHE:case V.LESS_THAN_SIGN:case V.EQUALS_SIGN:case V.GRAVE_ACCENT:{this._err(L.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(Z);break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAfterAttributeValueQuoted(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this._leaveAttrValue(),this.state=j.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this._leaveAttrValue(),this.state=j.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=j.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._err(L.missingWhitespaceBetweenAttributes),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateSelfClosingStartTag(Z){switch(Z){case V.GREATER_THAN_SIGN:{let X=this.currentToken;X.selfClosing=!0,this.state=j.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._err(L.unexpectedSolidusInTag),this.state=j.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateBogusComment(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(X);break}case V.EOF:{this.emitCurrentComment(X),this._emitEOFToken();break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.data+=u;break}default:X.data+=String.fromCodePoint(Z)}}_stateMarkupDeclarationOpen(Z){if(this._consumeSequenceIfMatch(e.DASH_DASH,!0))this._createCommentToken(e.DASH_DASH.length+1),this.state=j.COMMENT_START;else if(this._consumeSequenceIfMatch(e.DOCTYPE,!1))this.currentLocation=this.getCurrentLocation(e.DOCTYPE.length+1),this.state=j.DOCTYPE;else if(this._consumeSequenceIfMatch(e.CDATA_START,!0))if(this.inForeignNode)this.state=j.CDATA_SECTION;else this._err(L.cdataInHtmlContent),this._createCommentToken(e.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=j.BOGUS_COMMENT;else if(!this._ensureHibernation())this._err(L.incorrectlyOpenedComment),this._createCommentToken(2),this.state=j.BOGUS_COMMENT,this._stateBogusComment(Z)}_stateCommentStart(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_START_DASH;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptClosingOfEmptyComment),this.state=j.DATA;let X=this.currentToken;this.emitCurrentComment(X);break}default:this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentStartDash(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptClosingOfEmptyComment),this.state=j.DATA,this.emitCurrentComment(X);break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="-",this.state=j.COMMENT,this._stateComment(Z)}}_stateComment(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_END_DASH;break}case V.LESS_THAN_SIGN:{X.data+="<",this.state=j.COMMENT_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.data+=u;break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+=String.fromCodePoint(Z)}}_stateCommentLessThanSign(Z){let X=this.currentToken;switch(Z){case V.EXCLAMATION_MARK:{X.data+="!",this.state=j.COMMENT_LESS_THAN_SIGN_BANG;break}case V.LESS_THAN_SIGN:{X.data+="<";break}default:this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentLessThanSignBang(Z){if(Z===V.HYPHEN_MINUS)this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH;else this.state=j.COMMENT,this._stateComment(Z)}_stateCommentLessThanSignBangDash(Z){if(Z===V.HYPHEN_MINUS)this.state=j.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;else this.state=j.COMMENT_END_DASH,this._stateCommentEndDash(Z)}_stateCommentLessThanSignBangDashDash(Z){if(Z!==V.GREATER_THAN_SIGN&&Z!==V.EOF)this._err(L.nestedComment);this.state=j.COMMENT_END,this._stateCommentEnd(Z)}_stateCommentEndDash(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=j.COMMENT_END;break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="-",this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentEnd(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentComment(X);break}case V.EXCLAMATION_MARK:{this.state=j.COMMENT_END_BANG;break}case V.HYPHEN_MINUS:{X.data+="-";break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="--",this.state=j.COMMENT,this._stateComment(Z)}}_stateCommentEndBang(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{X.data+="--!",this.state=j.COMMENT_END_DASH;break}case V.GREATER_THAN_SIGN:{this._err(L.incorrectlyClosedComment),this.state=j.DATA,this.emitCurrentComment(X);break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="--!",this.state=j.COMMENT,this._stateComment(Z)}}_stateDoctype(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(Z);break}case V.EOF:{this._err(L.eofInDoctype),this._createDoctypeToken(null);let X=this.currentToken;X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingWhitespaceBeforeDoctypeName),this.state=j.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(Z)}}_stateBeforeDoctypeName(Z){if(H1(Z))this._createDoctypeToken(String.fromCharCode(Q4(Z))),this.state=j.DOCTYPE_NAME;else switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.NULL:{this._err(L.unexpectedNullCharacter),this._createDoctypeToken(u),this.state=j.DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypeName),this._createDoctypeToken(null);let X=this.currentToken;X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),this._createDoctypeToken(null);let X=this.currentToken;X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(Z)),this.state=j.DOCTYPE_NAME}}_stateDoctypeName(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.AFTER_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.name+=u;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.name+=String.fromCodePoint(H1(Z)?Q4(Z):Z)}}_stateAfterDoctypeName(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:if(this._consumeSequenceIfMatch(e.PUBLIC,!1))this.state=j.AFTER_DOCTYPE_PUBLIC_KEYWORD;else if(this._consumeSequenceIfMatch(e.SYSTEM,!1))this.state=j.AFTER_DOCTYPE_SYSTEM_KEYWORD;else if(!this._ensureHibernation())this._err(L.invalidCharacterSequenceAfterDoctypeName),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateAfterDoctypePublicKeyword(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceAfterDoctypePublicKeyword),X.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceAfterDoctypePublicKeyword),X.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypePublicIdentifier),X.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypePublicIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBeforeDoctypePublicIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{X.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.publicId="",this.state=j.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypePublicIdentifier),X.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypePublicIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypePublicIdentifierDoubleQuoted(Z){let X=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.publicId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypePublicIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.publicId+=String.fromCodePoint(Z)}}_stateDoctypePublicIdentifierSingleQuoted(Z){let X=this.currentToken;switch(Z){case V.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.publicId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypePublicIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.publicId+=String.fromCodePoint(Z)}}_stateAfterDoctypePublicIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case V.GREATER_THAN_SIGN:{this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBetweenDoctypePublicAndSystemIdentifiers(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.QUOTATION_MARK:{X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateAfterDoctypeSystemKeyword(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=j.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceAfterDoctypeSystemKeyword),X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceAfterDoctypeSystemKeyword),X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBeforeDoctypeSystemIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.systemId="",this.state=j.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypeSystemIdentifierDoubleQuoted(Z){let X=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.systemId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypeSystemIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.systemId+=String.fromCodePoint(Z)}}_stateDoctypeSystemIdentifierSingleQuoted(Z){let X=this.currentToken;switch(Z){case V.APOSTROPHE:{this.state=j.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.systemId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypeSystemIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.systemId+=String.fromCodePoint(Z)}}_stateAfterDoctypeSystemIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=j.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBogusDoctype(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(X),this.state=j.DATA;break}case V.NULL:{this._err(L.unexpectedNullCharacter);break}case V.EOF:{this.emitCurrentDoctype(X),this._emitEOFToken();break}default:}}_stateCdataSection(Z){switch(Z){case V.RIGHT_SQUARE_BRACKET:{this.state=j.CDATA_SECTION_BRACKET;break}case V.EOF:{this._err(L.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateCdataSectionBracket(Z){if(Z===V.RIGHT_SQUARE_BRACKET)this.state=j.CDATA_SECTION_END;else this._emitChars("]"),this.state=j.CDATA_SECTION,this._stateCdataSection(Z)}_stateCdataSectionEnd(Z){switch(Z){case V.GREATER_THAN_SIGN:{this.state=j.DATA;break}case V.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=j.CDATA_SECTION,this._stateCdataSection(Z)}}_stateCharacterReference(){let Z=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(Z<0)if(this.preprocessor.lastChunkWritten)Z=this.entityDecoder.end();else{this.active=!1,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=!0;return}if(Z===0)this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(V.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&Q3(this.preprocessor.peek(1))?j.AMBIGUOUS_AMPERSAND:this.returnState;else this.state=this.returnState}_stateAmbiguousAmpersand(Z){if(Q3(Z))this._flushCodePointConsumedAsCharacterReference(Z);else{if(Z===V.SEMICOLON)this._err(L.unknownNamedCharacterReference);this.state=this.returnState,this._callState(Z)}}}var j3=new Set([W.DD,W.DT,W.LI,W.OPTGROUP,W.OPTION,W.P,W.RB,W.RP,W.RT,W.RTC]),Y3=new Set([...j3,W.CAPTION,W.COLGROUP,W.TBODY,W.TD,W.TFOOT,W.TH,W.THEAD,W.TR]),W4=new Set([W.APPLET,W.CAPTION,W.HTML,W.MARQUEE,W.OBJECT,W.TABLE,W.TD,W.TEMPLATE,W.TH]),LX=new Set([...W4,W.OL,W.UL]),qX=new Set([...W4,W.BUTTON]),J3=new Set([W.ANNOTATION_XML,W.MI,W.MN,W.MO,W.MS,W.MTEXT]),V3=new Set([W.DESC,W.FOREIGN_OBJECT,W.TITLE]),xX=new Set([W.TR,W.TEMPLATE,W.HTML]),PX=new Set([W.TBODY,W.TFOOT,W.THEAD,W.TEMPLATE,W.HTML]),fX=new Set([W.TABLE,W.TEMPLATE,W.HTML]),yX=new Set([W.TD,W.TH]);class b2{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(Z,X,Q){this.treeAdapter=X,this.handler=Q,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=W.UNKNOWN,this.current=Z}_indexOf(Z){return this.items.lastIndexOf(Z,this.stackTop)}_isInTemplate(){return this.currentTagId===W.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===P.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(Z,X){if(this.stackTop++,this.items[this.stackTop]=Z,this.current=Z,this.tagIDs[this.stackTop]=X,this.currentTagId=X,this._isInTemplate())this.tmplCount++;this.handler.onItemPush(Z,X,!0)}pop(){let Z=this.current;if(this.tmplCount>0&&this._isInTemplate())this.tmplCount--;this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Z,!0)}replace(Z,X){let Q=this._indexOf(Z);if(this.items[Q]=X,Q===this.stackTop)this.current=X}insertAfter(Z,X,Q){let K=this._indexOf(Z)+1;if(this.items.splice(K,0,X),this.tagIDs.splice(K,0,Q),this.stackTop++,K===this.stackTop)this._updateCurrentElement();if(this.current&&this.currentTagId!==void 0)this.handler.onItemPush(this.current,this.currentTagId,K===this.stackTop)}popUntilTagNamePopped(Z){let X=this.stackTop+1;do X=this.tagIDs.lastIndexOf(Z,X-1);while(X>0&&this.treeAdapter.getNamespaceURI(this.items[X])!==P.HTML);this.shortenToLength(Math.max(X,0))}shortenToLength(Z){while(this.stackTop>=Z){let X=this.current;if(this.tmplCount>0&&this._isInTemplate())this.tmplCount-=1;this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(X,this.stackTop<Z)}}popUntilElementPopped(Z){let X=this._indexOf(Z);this.shortenToLength(Math.max(X,0))}popUntilPopped(Z,X){let Q=this._indexOfTagNames(Z,X);this.shortenToLength(Math.max(Q,0))}popUntilNumberedHeaderPopped(){this.popUntilPopped(j1,P.HTML)}popUntilTableCellPopped(){this.popUntilPopped(yX,P.HTML)}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1)}_indexOfTagNames(Z,X){for(let Q=this.stackTop;Q>=0;Q--)if(Z.has(this.tagIDs[Q])&&this.treeAdapter.getNamespaceURI(this.items[Q])===X)return Q;return-1}clearBackTo(Z,X){let Q=this._indexOfTagNames(Z,X);this.shortenToLength(Q+1)}clearBackToTableContext(){this.clearBackTo(fX,P.HTML)}clearBackToTableBodyContext(){this.clearBackTo(PX,P.HTML)}clearBackToTableRowContext(){this.clearBackTo(xX,P.HTML)}remove(Z){let X=this._indexOf(Z);if(X>=0)if(X===this.stackTop)this.pop();else this.items.splice(X,1),this.tagIDs.splice(X,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Z,!1)}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===W.BODY?this.items[1]:null}contains(Z){return this._indexOf(Z)>-1}getCommonAncestor(Z){let X=this._indexOf(Z)-1;return X>=0?this.items[X]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===W.HTML}hasInDynamicScope(Z,X){for(let Q=this.stackTop;Q>=0;Q--){let K=this.tagIDs[Q];switch(this.treeAdapter.getNamespaceURI(this.items[Q])){case P.HTML:{if(K===Z)return!0;if(X.has(K))return!1;break}case P.SVG:{if(V3.has(K))return!1;break}case P.MATHML:{if(J3.has(K))return!1;break}}}return!0}hasInScope(Z){return this.hasInDynamicScope(Z,W4)}hasInListItemScope(Z){return this.hasInDynamicScope(Z,LX)}hasInButtonScope(Z){return this.hasInDynamicScope(Z,qX)}hasNumberedHeaderInScope(){for(let Z=this.stackTop;Z>=0;Z--){let X=this.tagIDs[Z];switch(this.treeAdapter.getNamespaceURI(this.items[Z])){case P.HTML:{if(j1.has(X))return!0;if(W4.has(X))return!1;break}case P.SVG:{if(V3.has(X))return!1;break}case P.MATHML:{if(J3.has(X))return!1;break}}}return!0}hasInTableScope(Z){for(let X=this.stackTop;X>=0;X--){if(this.treeAdapter.getNamespaceURI(this.items[X])!==P.HTML)continue;switch(this.tagIDs[X]){case Z:return!0;case W.TABLE:case W.HTML:return!1}}return!0}hasTableBodyContextInTableScope(){for(let Z=this.stackTop;Z>=0;Z--){if(this.treeAdapter.getNamespaceURI(this.items[Z])!==P.HTML)continue;switch(this.tagIDs[Z]){case W.TBODY:case W.THEAD:case W.TFOOT:return!0;case W.TABLE:case W.HTML:return!1}}return!0}hasInSelectScope(Z){for(let X=this.stackTop;X>=0;X--){if(this.treeAdapter.getNamespaceURI(this.items[X])!==P.HTML)continue;switch(this.tagIDs[X]){case Z:return!0;case W.OPTION:case W.OPTGROUP:break;default:return!1}}return!0}generateImpliedEndTags(){while(this.currentTagId!==void 0&&j3.has(this.currentTagId))this.pop()}generateImpliedEndTagsThoroughly(){while(this.currentTagId!==void 0&&Y3.has(this.currentTagId))this.pop()}generateImpliedEndTagsWithExclusion(Z){while(this.currentTagId!==void 0&&this.currentTagId!==Z&&Y3.has(this.currentTagId))this.pop()}}var z0;(function(Z){Z[Z.Marker=0]="Marker",Z[Z.Element=1]="Element"})(z0||(z0={}));var H3={type:z0.Marker};class v2{constructor(Z){this.treeAdapter=Z,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(Z,X){let Q=[],K=X.length,Y=this.treeAdapter.getTagName(Z),J=this.treeAdapter.getNamespaceURI(Z);for(let H=0;H<this.entries.length;H++){let w=this.entries[H];if(w.type===z0.Marker)break;let{element:B}=w;if(this.treeAdapter.getTagName(B)===Y&&this.treeAdapter.getNamespaceURI(B)===J){let U=this.treeAdapter.getAttrList(B);if(U.length===K)Q.push({idx:H,attrs:U})}}return Q}_ensureNoahArkCondition(Z){if(this.entries.length<3)return;let X=this.treeAdapter.getAttrList(Z),Q=this._getNoahArkConditionCandidates(Z,X);if(Q.length<3)return;let K=new Map(X.map((J)=>[J.name,J.value])),Y=0;for(let J=0;J<Q.length;J++){let H=Q[J];if(H.attrs.every((w)=>K.get(w.name)===w.value)){if(Y+=1,Y>=3)this.entries.splice(H.idx,1)}}}insertMarker(){this.entries.unshift(H3)}pushElement(Z,X){this._ensureNoahArkCondition(Z),this.entries.unshift({type:z0.Element,element:Z,token:X})}insertElementAfterBookmark(Z,X){let Q=this.entries.indexOf(this.bookmark);this.entries.splice(Q,0,{type:z0.Element,element:Z,token:X})}removeEntry(Z){let X=this.entries.indexOf(Z);if(X!==-1)this.entries.splice(X,1)}clearToLastMarker(){let Z=this.entries.indexOf(H3);if(Z===-1)this.entries.length=0;else this.entries.splice(0,Z+1)}getElementEntryInScopeWithTagName(Z){let X=this.entries.find((Q)=>Q.type===z0.Marker||this.treeAdapter.getTagName(Q.element)===Z);return X&&X.type===z0.Element?X:null}getElementEntry(Z){return this.entries.find((X)=>X.type===z0.Element&&X.element===Z)}}var J0={createDocument(){return{nodeName:"#document",mode:Z0.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(Z,X,Q){return{nodeName:Z,tagName:Z,attrs:Q,namespaceURI:X,childNodes:[],parentNode:null}},createCommentNode(Z){return{nodeName:"#comment",data:Z,parentNode:null}},createTextNode(Z){return{nodeName:"#text",value:Z,parentNode:null}},appendChild(Z,X){Z.childNodes.push(X),X.parentNode=Z},insertBefore(Z,X,Q){let K=Z.childNodes.indexOf(Q);Z.childNodes.splice(K,0,X),X.parentNode=Z},setTemplateContent(Z,X){Z.content=X},getTemplateContent(Z){return Z.content},setDocumentType(Z,X,Q,K){let Y=Z.childNodes.find((J)=>J.nodeName==="#documentType");if(Y)Y.name=X,Y.publicId=Q,Y.systemId=K;else{let J={nodeName:"#documentType",name:X,publicId:Q,systemId:K,parentNode:null};J0.appendChild(Z,J)}},setDocumentMode(Z,X){Z.mode=X},getDocumentMode(Z){return Z.mode},detachNode(Z){if(Z.parentNode){let X=Z.parentNode.childNodes.indexOf(Z);Z.parentNode.childNodes.splice(X,1),Z.parentNode=null}},insertText(Z,X){if(Z.childNodes.length>0){let Q=Z.childNodes[Z.childNodes.length-1];if(J0.isTextNode(Q)){Q.value+=X;return}}J0.appendChild(Z,J0.createTextNode(X))},insertTextBefore(Z,X,Q){let K=Z.childNodes[Z.childNodes.indexOf(Q)-1];if(K&&J0.isTextNode(K))K.value+=X;else J0.insertBefore(Z,J0.createTextNode(X),Q)},adoptAttributes(Z,X){let Q=new Set(Z.attrs.map((K)=>K.name));for(let K=0;K<X.length;K++)if(!Q.has(X[K].name))Z.attrs.push(X[K])},getFirstChild(Z){return Z.childNodes[0]},getChildNodes(Z){return Z.childNodes},getParentNode(Z){return Z.parentNode},getAttrList(Z){return Z.attrs},getTagName(Z){return Z.tagName},getNamespaceURI(Z){return Z.namespaceURI},getTextNodeContent(Z){return Z.value},getCommentNodeContent(Z){return Z.data},getDocumentTypeNodeName(Z){return Z.name},getDocumentTypeNodePublicId(Z){return Z.publicId},getDocumentTypeNodeSystemId(Z){return Z.systemId},isTextNode(Z){return Z.nodeName==="#text"},isCommentNode(Z){return Z.nodeName==="#comment"},isDocumentTypeNode(Z){return Z.nodeName==="#documentType"},isElementNode(Z){return Object.prototype.hasOwnProperty.call(Z,"tagName")},setNodeSourceCodeLocation(Z,X){Z.sourceCodeLocation=X},getNodeSourceCodeLocation(Z){return Z.sourceCodeLocation},updateNodeSourceCodeLocation(Z,X){Z.sourceCodeLocation={...Z.sourceCodeLocation,...X}}};var w3="html",OX="about:legacy-compat",bX="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",U3=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],vX=[...U3,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],RX=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),F3=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],CX=[...F3,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function z3(Z,X){return X.some((Q)=>Z.startsWith(Q))}function B3(Z){return Z.name===w3&&Z.publicId===null&&(Z.systemId===null||Z.systemId===OX)}function L3(Z){if(Z.name!==w3)return Z0.QUIRKS;let{systemId:X}=Z;if(X&&X.toLowerCase()===bX)return Z0.QUIRKS;let{publicId:Q}=Z;if(Q!==null){if(Q=Q.toLowerCase(),RX.has(Q))return Z0.QUIRKS;let K=X===null?vX:U3;if(z3(Q,K))return Z0.QUIRKS;if(K=X===null?F3:CX,z3(Q,K))return Z0.LIMITED_QUIRKS}return Z0.NO_QUIRKS}var q3={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},MX="definitionurl",NX="definitionURL",DX=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((Z)=>[Z.toLowerCase(),Z])),$X=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:P.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:P.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:P.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:P.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:P.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:P.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:P.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:P.XML}],["xml:space",{prefix:"xml",name:"space",namespace:P.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:P.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:P.XMLNS}]]),gX=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((Z)=>[Z.toLowerCase(),Z])),GX=new Set([W.B,W.BIG,W.BLOCKQUOTE,W.BODY,W.BR,W.CENTER,W.CODE,W.DD,W.DIV,W.DL,W.DT,W.EM,W.EMBED,W.H1,W.H2,W.H3,W.H4,W.H5,W.H6,W.HEAD,W.HR,W.I,W.IMG,W.LI,W.LISTING,W.MENU,W.META,W.NOBR,W.OL,W.P,W.PRE,W.RUBY,W.S,W.SMALL,W.SPAN,W.STRONG,W.STRIKE,W.SUB,W.SUP,W.TABLE,W.TT,W.U,W.UL,W.VAR]);function x3(Z){let X=Z.tagID;return X===W.FONT&&Z.attrs.some(({name:K})=>K===P0.COLOR||K===P0.SIZE||K===P0.FACE)||GX.has(X)}function R2(Z){for(let X=0;X<Z.attrs.length;X++)if(Z.attrs[X].name===MX){Z.attrs[X].name=NX;break}}function C2(Z){for(let X=0;X<Z.attrs.length;X++){let Q=DX.get(Z.attrs[X].name);if(Q!=null)Z.attrs[X].name=Q}}function Y4(Z){for(let X=0;X<Z.attrs.length;X++){let Q=$X.get(Z.attrs[X].name);if(Q)Z.attrs[X].prefix=Q.prefix,Z.attrs[X].name=Q.name,Z.attrs[X].namespace=Q.namespace}}function P3(Z){let X=gX.get(Z.tagName);if(X!=null)Z.tagName=X,Z.tagID=S0(Z.tagName)}function EX(Z,X){return X===P.MATHML&&(Z===W.MI||Z===W.MO||Z===W.MN||Z===W.MS||Z===W.MTEXT)}function mX(Z,X,Q){if(X===P.MATHML&&Z===W.ANNOTATION_XML){for(let K=0;K<Q.length;K++)if(Q[K].name===P0.ENCODING){let Y=Q[K].value.toLowerCase();return Y===q3.TEXT_HTML||Y===q3.APPLICATION_XML}}return X===P.SVG&&(Z===W.FOREIGN_OBJECT||Z===W.DESC||Z===W.TITLE)}function f3(Z,X,Q,K){return(!K||K===P.HTML)&&mX(Z,X,Q)||(!K||K===P.MATHML)&&EX(Z,X)}var kX="hidden",_X=8,SX=3,z;(function(Z){Z[Z.INITIAL=0]="INITIAL",Z[Z.BEFORE_HTML=1]="BEFORE_HTML",Z[Z.BEFORE_HEAD=2]="BEFORE_HEAD",Z[Z.IN_HEAD=3]="IN_HEAD",Z[Z.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",Z[Z.AFTER_HEAD=5]="AFTER_HEAD",Z[Z.IN_BODY=6]="IN_BODY",Z[Z.TEXT=7]="TEXT",Z[Z.IN_TABLE=8]="IN_TABLE",Z[Z.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",Z[Z.IN_CAPTION=10]="IN_CAPTION",Z[Z.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",Z[Z.IN_TABLE_BODY=12]="IN_TABLE_BODY",Z[Z.IN_ROW=13]="IN_ROW",Z[Z.IN_CELL=14]="IN_CELL",Z[Z.IN_SELECT=15]="IN_SELECT",Z[Z.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",Z[Z.IN_TEMPLATE=17]="IN_TEMPLATE",Z[Z.AFTER_BODY=18]="AFTER_BODY",Z[Z.IN_FRAMESET=19]="IN_FRAMESET",Z[Z.AFTER_FRAMESET=20]="AFTER_FRAMESET",Z[Z.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",Z[Z.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET"})(z||(z={}));var IX={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},R3=new Set([W.TABLE,W.TBODY,W.TFOOT,W.THEAD,W.TR]),O3={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:J0,onParseError:null};class H4{constructor(Z,X,Q=null,K=null){if(this.fragmentContext=Q,this.scriptHandler=K,this.currentToken=null,this.stopped=!1,this.insertionMode=z.INITIAL,this.originalInsertionMode=z.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=!1,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1,this.options={...O3,...Z},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError)this.options.sourceCodeLocationInfo=!0;this.document=X!==null&&X!==void 0?X:this.treeAdapter.createDocument(),this.tokenizer=new K4(this.options,this),this.activeFormattingElements=new v2(this.treeAdapter),this.fragmentContextID=Q?S0(this.treeAdapter.getTagName(Q)):W.UNKNOWN,this._setContextModes(Q!==null&&Q!==void 0?Q:this.document,this.fragmentContextID),this.openElements=new b2(this.document,this.treeAdapter,this)}static parse(Z,X){let Q=new this(X);return Q.tokenizer.write(Z,!0),Q.document}static getFragmentParser(Z,X){let Q={...O3,...X};Z!==null&&Z!==void 0||(Z=Q.treeAdapter.createElement(F.TEMPLATE,P.HTML,[]));let K=Q.treeAdapter.createElement("documentmock",P.HTML,[]),Y=new this(Q,K,Z);if(Y.fragmentContextID===W.TEMPLATE)Y.tmplInsertionModeStack.unshift(z.IN_TEMPLATE);return Y._initTokenizerForFragmentParsing(),Y._insertFakeRootElement(),Y._resetInsertionMode(),Y._findFormInFragmentContext(),Y}getFragment(){let Z=this.treeAdapter.getFirstChild(this.document),X=this.treeAdapter.createDocumentFragment();return this._adoptNodes(Z,X),X}_err(Z,X,Q){var K;if(!this.onParseError)return;let Y=(K=Z.location)!==null&&K!==void 0?K:IX,J={code:X,startLine:Y.startLine,startCol:Y.startCol,startOffset:Y.startOffset,endLine:Q?Y.startLine:Y.endLine,endCol:Q?Y.startCol:Y.endCol,endOffset:Q?Y.startOffset:Y.endOffset};this.onParseError(J)}onItemPush(Z,X,Q){var K,Y;if((Y=(K=this.treeAdapter).onItemPush)===null||Y===void 0||Y.call(K,Z),Q&&this.openElements.stackTop>0)this._setContextModes(Z,X)}onItemPop(Z,X){var Q,K;if(this.options.sourceCodeLocationInfo)this._setEndLocation(Z,this.currentToken);if((K=(Q=this.treeAdapter).onItemPop)===null||K===void 0||K.call(Q,Z,this.openElements.current),X){let Y,J;if(this.openElements.stackTop===0&&this.fragmentContext)Y=this.fragmentContext,J=this.fragmentContextID;else({current:Y,currentTagId:J}=this.openElements);this._setContextModes(Y,J)}}_setContextModes(Z,X){let Q=Z===this.document||Z&&this.treeAdapter.getNamespaceURI(Z)===P.HTML;this.currentNotInHTML=!Q,this.tokenizer.inForeignNode=!Q&&Z!==void 0&&X!==void 0&&!this._isIntegrationPoint(X,Z)}_switchToTextParsing(Z,X){this._insertElement(Z,P.HTML),this.tokenizer.state=X,this.originalInsertionMode=this.insertionMode,this.insertionMode=z.TEXT}switchToPlaintextParsing(){this.insertionMode=z.TEXT,this.originalInsertionMode=z.IN_BODY,this.tokenizer.state=n.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let Z=this.fragmentContext;while(Z){if(this.treeAdapter.getTagName(Z)===F.FORM){this.formElement=Z;break}Z=this.treeAdapter.getParentNode(Z)}}_initTokenizerForFragmentParsing(){if(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==P.HTML)return;switch(this.fragmentContextID){case W.TITLE:case W.TEXTAREA:{this.tokenizer.state=n.RCDATA;break}case W.STYLE:case W.XMP:case W.IFRAME:case W.NOEMBED:case W.NOFRAMES:case W.NOSCRIPT:{this.tokenizer.state=n.RAWTEXT;break}case W.SCRIPT:{this.tokenizer.state=n.SCRIPT_DATA;break}case W.PLAINTEXT:{this.tokenizer.state=n.PLAINTEXT;break}default:}}_setDocumentType(Z){let X=Z.name||"",Q=Z.publicId||"",K=Z.systemId||"";if(this.treeAdapter.setDocumentType(this.document,X,Q,K),Z.location){let J=this.treeAdapter.getChildNodes(this.document).find((H)=>this.treeAdapter.isDocumentTypeNode(H));if(J)this.treeAdapter.setNodeSourceCodeLocation(J,Z.location)}}_attachElementToTree(Z,X){if(this.options.sourceCodeLocationInfo){let Q=X&&{...X,startTag:X};this.treeAdapter.setNodeSourceCodeLocation(Z,Q)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(Z);else{let Q=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(Q!==null&&Q!==void 0?Q:this.document,Z)}}_appendElement(Z,X){let Q=this.treeAdapter.createElement(Z.tagName,X,Z.attrs);this._attachElementToTree(Q,Z.location)}_insertElement(Z,X){let Q=this.treeAdapter.createElement(Z.tagName,X,Z.attrs);this._attachElementToTree(Q,Z.location),this.openElements.push(Q,Z.tagID)}_insertFakeElement(Z,X){let Q=this.treeAdapter.createElement(Z,P.HTML,[]);this._attachElementToTree(Q,null),this.openElements.push(Q,X)}_insertTemplate(Z){let X=this.treeAdapter.createElement(Z.tagName,P.HTML,Z.attrs),Q=this.treeAdapter.createDocumentFragment();if(this.treeAdapter.setTemplateContent(X,Q),this._attachElementToTree(X,Z.location),this.openElements.push(X,Z.tagID),this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Q,null)}_insertFakeRootElement(){let Z=this.treeAdapter.createElement(F.HTML,P.HTML,[]);if(this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Z,null);this.treeAdapter.appendChild(this.openElements.current,Z),this.openElements.push(Z,W.HTML)}_appendCommentNode(Z,X){let Q=this.treeAdapter.createCommentNode(Z.data);if(this.treeAdapter.appendChild(X,Q),this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Q,Z.location)}_insertCharacters(Z){let X,Q;if(this._shouldFosterParentOnInsertion())if({parent:X,beforeElement:Q}=this._findFosterParentingLocation(),Q)this.treeAdapter.insertTextBefore(X,Z.chars,Q);else this.treeAdapter.insertText(X,Z.chars);else X=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(X,Z.chars);if(!Z.location)return;let K=this.treeAdapter.getChildNodes(X),Y=Q?K.lastIndexOf(Q):K.length,J=K[Y-1];if(this.treeAdapter.getNodeSourceCodeLocation(J)){let{endLine:w,endCol:B,endOffset:U}=Z.location;this.treeAdapter.updateNodeSourceCodeLocation(J,{endLine:w,endCol:B,endOffset:U})}else if(this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(J,Z.location)}_adoptNodes(Z,X){for(let Q=this.treeAdapter.getFirstChild(Z);Q;Q=this.treeAdapter.getFirstChild(Z))this.treeAdapter.detachNode(Q),this.treeAdapter.appendChild(X,Q)}_setEndLocation(Z,X){if(this.treeAdapter.getNodeSourceCodeLocation(Z)&&X.location){let Q=X.location,K=this.treeAdapter.getTagName(Z),Y=X.type===S.END_TAG&&K===X.tagName?{endTag:{...Q},endLine:Q.endLine,endCol:Q.endCol,endOffset:Q.endOffset}:{endLine:Q.startLine,endCol:Q.startCol,endOffset:Q.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(Z,Y)}}shouldProcessStartTagTokenInForeignContent(Z){if(!this.currentNotInHTML)return!1;let X,Q;if(this.openElements.stackTop===0&&this.fragmentContext)X=this.fragmentContext,Q=this.fragmentContextID;else({current:X,currentTagId:Q}=this.openElements);if(Z.tagID===W.SVG&&this.treeAdapter.getTagName(X)===F.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(X)===P.MATHML)return!1;return this.tokenizer.inForeignNode||(Z.tagID===W.MGLYPH||Z.tagID===W.MALIGNMARK)&&Q!==void 0&&!this._isIntegrationPoint(Q,X,P.HTML)}_processToken(Z){switch(Z.type){case S.CHARACTER:{this.onCharacter(Z);break}case S.NULL_CHARACTER:{this.onNullCharacter(Z);break}case S.COMMENT:{this.onComment(Z);break}case S.DOCTYPE:{this.onDoctype(Z);break}case S.START_TAG:{this._processStartTag(Z);break}case S.END_TAG:{this.onEndTag(Z);break}case S.EOF:{this.onEof(Z);break}case S.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(Z);break}}}_isIntegrationPoint(Z,X,Q){let K=this.treeAdapter.getNamespaceURI(X),Y=this.treeAdapter.getAttrList(X);return f3(Z,K,Y,Q)}_reconstructActiveFormattingElements(){let Z=this.activeFormattingElements.entries.length;if(Z){let X=this.activeFormattingElements.entries.findIndex((K)=>K.type===z0.Marker||this.openElements.contains(K.element)),Q=X===-1?Z-1:X-1;for(let K=Q;K>=0;K--){let Y=this.activeFormattingElements.entries[K];this._insertElement(Y.token,this.treeAdapter.getNamespaceURI(Y.element)),Y.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=z.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(W.P),this.openElements.popUntilTagNamePopped(W.P)}_resetInsertionMode(){for(let Z=this.openElements.stackTop;Z>=0;Z--)switch(Z===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[Z]){case W.TR:{this.insertionMode=z.IN_ROW;return}case W.TBODY:case W.THEAD:case W.TFOOT:{this.insertionMode=z.IN_TABLE_BODY;return}case W.CAPTION:{this.insertionMode=z.IN_CAPTION;return}case W.COLGROUP:{this.insertionMode=z.IN_COLUMN_GROUP;return}case W.TABLE:{this.insertionMode=z.IN_TABLE;return}case W.BODY:{this.insertionMode=z.IN_BODY;return}case W.FRAMESET:{this.insertionMode=z.IN_FRAMESET;return}case W.SELECT:{this._resetInsertionModeForSelect(Z);return}case W.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case W.HTML:{this.insertionMode=this.headElement?z.AFTER_HEAD:z.BEFORE_HEAD;return}case W.TD:case W.TH:{if(Z>0){this.insertionMode=z.IN_CELL;return}break}case W.HEAD:{if(Z>0){this.insertionMode=z.IN_HEAD;return}break}}this.insertionMode=z.IN_BODY}_resetInsertionModeForSelect(Z){if(Z>0)for(let X=Z-1;X>0;X--){let Q=this.openElements.tagIDs[X];if(Q===W.TEMPLATE)break;else if(Q===W.TABLE){this.insertionMode=z.IN_SELECT_IN_TABLE;return}}this.insertionMode=z.IN_SELECT}_isElementCausesFosterParenting(Z){return R3.has(Z)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let Z=this.openElements.stackTop;Z>=0;Z--){let X=this.openElements.items[Z];switch(this.openElements.tagIDs[Z]){case W.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(X)===P.HTML)return{parent:this.treeAdapter.getTemplateContent(X),beforeElement:null};break}case W.TABLE:{let Q=this.treeAdapter.getParentNode(X);if(Q)return{parent:Q,beforeElement:X};return{parent:this.openElements.items[Z-1],beforeElement:null}}default:}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(Z){let X=this._findFosterParentingLocation();if(X.beforeElement)this.treeAdapter.insertBefore(X.parent,Z,X.beforeElement);else this.treeAdapter.appendChild(X.parent,Z)}_isSpecialElement(Z,X){let Q=this.treeAdapter.getNamespaceURI(Z);return Z3[Q].has(X)}onCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){BQ(this,Z);return}switch(this.insertionMode){case z.INITIAL:{z1(this,Z);break}case z.BEFORE_HTML:{U1(this,Z);break}case z.BEFORE_HEAD:{F1(this,Z);break}case z.IN_HEAD:{B1(this,Z);break}case z.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case z.AFTER_HEAD:{q1(this,Z);break}case z.IN_BODY:case z.IN_CAPTION:case z.IN_CELL:case z.IN_TEMPLATE:{h3(this,Z);break}case z.TEXT:case z.IN_SELECT:case z.IN_SELECT_IN_TABLE:{this._insertCharacters(Z);break}case z.IN_TABLE:case z.IN_TABLE_BODY:case z.IN_ROW:{h2(this,Z);break}case z.IN_TABLE_TEXT:{G3(this,Z);break}case z.IN_COLUMN_GROUP:{V4(this,Z);break}case z.AFTER_BODY:{j4(this,Z);break}case z.AFTER_AFTER_BODY:{J4(this,Z);break}default:}}onNullCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){FQ(this,Z);return}switch(this.insertionMode){case z.INITIAL:{z1(this,Z);break}case z.BEFORE_HTML:{U1(this,Z);break}case z.BEFORE_HEAD:{F1(this,Z);break}case z.IN_HEAD:{B1(this,Z);break}case z.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case z.AFTER_HEAD:{q1(this,Z);break}case z.TEXT:{this._insertCharacters(Z);break}case z.IN_TABLE:case z.IN_TABLE_BODY:case z.IN_ROW:{h2(this,Z);break}case z.IN_COLUMN_GROUP:{V4(this,Z);break}case z.AFTER_BODY:{j4(this,Z);break}case z.AFTER_AFTER_BODY:{J4(this,Z);break}default:}}onComment(Z){if(this.skipNextNewLine=!1,this.currentNotInHTML){M2(this,Z);return}switch(this.insertionMode){case z.INITIAL:case z.BEFORE_HTML:case z.BEFORE_HEAD:case z.IN_HEAD:case z.IN_HEAD_NO_SCRIPT:case z.AFTER_HEAD:case z.IN_BODY:case z.IN_TABLE:case z.IN_CAPTION:case z.IN_COLUMN_GROUP:case z.IN_TABLE_BODY:case z.IN_ROW:case z.IN_CELL:case z.IN_SELECT:case z.IN_SELECT_IN_TABLE:case z.IN_TEMPLATE:case z.IN_FRAMESET:case z.AFTER_FRAMESET:{M2(this,Z);break}case z.IN_TABLE_TEXT:{w1(this,Z);break}case z.AFTER_BODY:{iX(this,Z);break}case z.AFTER_AFTER_BODY:case z.AFTER_AFTER_FRAMESET:{aX(this,Z);break}default:}}onDoctype(Z){switch(this.skipNextNewLine=!1,this.insertionMode){case z.INITIAL:{pX(this,Z);break}case z.BEFORE_HEAD:case z.IN_HEAD:case z.IN_HEAD_NO_SCRIPT:case z.AFTER_HEAD:{this._err(Z,L.misplacedDoctype);break}case z.IN_TABLE_TEXT:{w1(this,Z);break}default:}}onStartTag(Z){if(this.skipNextNewLine=!1,this.currentToken=Z,this._processStartTag(Z),Z.selfClosing&&!Z.ackSelfClosing)this._err(Z,L.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(Z){if(this.shouldProcessStartTagTokenInForeignContent(Z))LQ(this,Z);else this._startTagOutsideForeignContent(Z)}_startTagOutsideForeignContent(Z){switch(this.insertionMode){case z.INITIAL:{z1(this,Z);break}case z.BEFORE_HTML:{sX(this,Z);break}case z.BEFORE_HEAD:{oX(this,Z);break}case z.IN_HEAD:{w0(this,Z);break}case z.IN_HEAD_NO_SCRIPT:{eX(this,Z);break}case z.AFTER_HEAD:{X5(this,Z);break}case z.IN_BODY:{t(this,Z);break}case z.IN_TABLE:{a0(this,Z);break}case z.IN_TABLE_TEXT:{w1(this,Z);break}case z.IN_CAPTION:{n5(this,Z);break}case z.IN_COLUMN_GROUP:{g2(this,Z);break}case z.IN_TABLE_BODY:{U4(this,Z);break}case z.IN_ROW:{F4(this,Z);break}case z.IN_CELL:{ZQ(this,Z);break}case z.IN_SELECT:{k3(this,Z);break}case z.IN_SELECT_IN_TABLE:{QQ(this,Z);break}case z.IN_TEMPLATE:{WQ(this,Z);break}case z.AFTER_BODY:{JQ(this,Z);break}case z.IN_FRAMESET:{VQ(this,Z);break}case z.AFTER_FRAMESET:{HQ(this,Z);break}case z.AFTER_AFTER_BODY:{wQ(this,Z);break}case z.AFTER_AFTER_FRAMESET:{UQ(this,Z);break}default:}}onEndTag(Z){if(this.skipNextNewLine=!1,this.currentToken=Z,this.currentNotInHTML)qQ(this,Z);else this._endTagOutsideForeignContent(Z)}_endTagOutsideForeignContent(Z){switch(this.insertionMode){case z.INITIAL:{z1(this,Z);break}case z.BEFORE_HTML:{rX(this,Z);break}case z.BEFORE_HEAD:{nX(this,Z);break}case z.IN_HEAD:{tX(this,Z);break}case z.IN_HEAD_NO_SCRIPT:{Z5(this,Z);break}case z.AFTER_HEAD:{Q5(this,Z);break}case z.IN_BODY:{w4(this,Z);break}case z.TEXT:{u5(this,Z);break}case z.IN_TABLE:{x1(this,Z);break}case z.IN_TABLE_TEXT:{w1(this,Z);break}case z.IN_CAPTION:{t5(this,Z);break}case z.IN_COLUMN_GROUP:{e5(this,Z);break}case z.IN_TABLE_BODY:{N2(this,Z);break}case z.IN_ROW:{m3(this,Z);break}case z.IN_CELL:{XQ(this,Z);break}case z.IN_SELECT:{_3(this,Z);break}case z.IN_SELECT_IN_TABLE:{KQ(this,Z);break}case z.IN_TEMPLATE:{YQ(this,Z);break}case z.AFTER_BODY:{I3(this,Z);break}case z.IN_FRAMESET:{jQ(this,Z);break}case z.AFTER_FRAMESET:{zQ(this,Z);break}case z.AFTER_AFTER_BODY:{J4(this,Z);break}default:}}onEof(Z){switch(this.insertionMode){case z.INITIAL:{z1(this,Z);break}case z.BEFORE_HTML:{U1(this,Z);break}case z.BEFORE_HEAD:{F1(this,Z);break}case z.IN_HEAD:{B1(this,Z);break}case z.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case z.AFTER_HEAD:{q1(this,Z);break}case z.IN_BODY:case z.IN_TABLE:case z.IN_CAPTION:case z.IN_COLUMN_GROUP:case z.IN_TABLE_BODY:case z.IN_ROW:case z.IN_CELL:case z.IN_SELECT:case z.IN_SELECT_IN_TABLE:{$3(this,Z);break}case z.TEXT:{c5(this,Z);break}case z.IN_TABLE_TEXT:{w1(this,Z);break}case z.IN_TEMPLATE:{S3(this,Z);break}case z.AFTER_BODY:case z.IN_FRAMESET:case z.AFTER_FRAMESET:case z.AFTER_AFTER_BODY:case z.AFTER_AFTER_FRAMESET:{$2(this,Z);break}default:}}onWhitespaceCharacter(Z){if(this.skipNextNewLine){if(this.skipNextNewLine=!1,Z.chars.charCodeAt(0)===V.LINE_FEED){if(Z.chars.length===1)return;Z.chars=Z.chars.substr(1)}}if(this.tokenizer.inForeignNode){this._insertCharacters(Z);return}switch(this.insertionMode){case z.IN_HEAD:case z.IN_HEAD_NO_SCRIPT:case z.AFTER_HEAD:case z.TEXT:case z.IN_COLUMN_GROUP:case z.IN_SELECT:case z.IN_SELECT_IN_TABLE:case z.IN_FRAMESET:case z.AFTER_FRAMESET:{this._insertCharacters(Z);break}case z.IN_BODY:case z.IN_CAPTION:case z.IN_CELL:case z.IN_TEMPLATE:case z.AFTER_BODY:case z.AFTER_AFTER_BODY:case z.AFTER_AFTER_FRAMESET:{C3(this,Z);break}case z.IN_TABLE:case z.IN_TABLE_BODY:case z.IN_ROW:{h2(this,Z);break}case z.IN_TABLE_TEXT:{g3(this,Z);break}default:}}}function TX(Z,X){let Q=Z.activeFormattingElements.getElementEntryInScopeWithTagName(X.tagName);if(Q){if(!Z.openElements.contains(Q.element))Z.activeFormattingElements.removeEntry(Q),Q=null;else if(!Z.openElements.hasInScope(X.tagID))Q=null}else D3(Z,X);return Q}function AX(Z,X){let Q=null,K=Z.openElements.stackTop;for(;K>=0;K--){let Y=Z.openElements.items[K];if(Y===X.element)break;if(Z._isSpecialElement(Y,Z.openElements.tagIDs[K]))Q=Y}if(!Q)Z.openElements.shortenToLength(Math.max(K,0)),Z.activeFormattingElements.removeEntry(X);return Q}function uX(Z,X,Q){let K=X,Y=Z.openElements.getCommonAncestor(X);for(let J=0,H=Y;H!==Q;J++,H=Y){Y=Z.openElements.getCommonAncestor(H);let w=Z.activeFormattingElements.getElementEntry(H),B=w&&J>=SX;if(!w||B){if(B)Z.activeFormattingElements.removeEntry(w);Z.openElements.remove(H)}else{if(H=cX(Z,w),K===X)Z.activeFormattingElements.bookmark=w;Z.treeAdapter.detachNode(K),Z.treeAdapter.appendChild(H,K),K=H}}return K}function cX(Z,X){let Q=Z.treeAdapter.getNamespaceURI(X.element),K=Z.treeAdapter.createElement(X.token.tagName,Q,X.token.attrs);return Z.openElements.replace(X.element,K),X.element=K,K}function lX(Z,X,Q){let K=Z.treeAdapter.getTagName(X),Y=S0(K);if(Z._isElementCausesFosterParenting(Y))Z._fosterParentElement(Q);else{let J=Z.treeAdapter.getNamespaceURI(X);if(Y===W.TEMPLATE&&J===P.HTML)X=Z.treeAdapter.getTemplateContent(X);Z.treeAdapter.appendChild(X,Q)}}function dX(Z,X,Q){let K=Z.treeAdapter.getNamespaceURI(Q.element),{token:Y}=Q,J=Z.treeAdapter.createElement(Y.tagName,K,Y.attrs);Z._adoptNodes(X,J),Z.treeAdapter.appendChild(X,J),Z.activeFormattingElements.insertElementAfterBookmark(J,Y),Z.activeFormattingElements.removeEntry(Q),Z.openElements.remove(Q.element),Z.openElements.insertAfter(X,J,Y.tagID)}function D2(Z,X){for(let Q=0;Q<_X;Q++){let K=TX(Z,X);if(!K)break;let Y=AX(Z,K);if(!Y)break;Z.activeFormattingElements.bookmark=K;let J=uX(Z,Y,K.element),H=Z.openElements.getCommonAncestor(K.element);if(Z.treeAdapter.detachNode(J),H)lX(Z,H,J);dX(Z,Y,K)}}function M2(Z,X){Z._appendCommentNode(X,Z.openElements.currentTmplContentOrNode)}function iX(Z,X){Z._appendCommentNode(X,Z.openElements.items[0])}function aX(Z,X){Z._appendCommentNode(X,Z.document)}function $2(Z,X){if(Z.stopped=!0,X.location){let Q=Z.fragmentContext?0:2;for(let K=Z.openElements.stackTop;K>=Q;K--)Z._setEndLocation(Z.openElements.items[K],X);if(!Z.fragmentContext&&Z.openElements.stackTop>=0){let K=Z.openElements.items[0],Y=Z.treeAdapter.getNodeSourceCodeLocation(K);if(Y&&!Y.endTag){if(Z._setEndLocation(K,X),Z.openElements.stackTop>=1){let J=Z.openElements.items[1],H=Z.treeAdapter.getNodeSourceCodeLocation(J);if(H&&!H.endTag)Z._setEndLocation(J,X)}}}}}function pX(Z,X){Z._setDocumentType(X);let Q=X.forceQuirks?Z0.QUIRKS:L3(X);if(!B3(X))Z._err(X,L.nonConformingDoctype);Z.treeAdapter.setDocumentMode(Z.document,Q),Z.insertionMode=z.BEFORE_HTML}function z1(Z,X){Z._err(X,L.missingDoctype,!0),Z.treeAdapter.setDocumentMode(Z.document,Z0.QUIRKS),Z.insertionMode=z.BEFORE_HTML,Z._processToken(X)}function sX(Z,X){if(X.tagID===W.HTML)Z._insertElement(X,P.HTML),Z.insertionMode=z.BEFORE_HEAD;else U1(Z,X)}function rX(Z,X){let Q=X.tagID;if(Q===W.HTML||Q===W.HEAD||Q===W.BODY||Q===W.BR)U1(Z,X)}function U1(Z,X){Z._insertFakeRootElement(),Z.insertionMode=z.BEFORE_HEAD,Z._processToken(X)}function oX(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.HEAD:{Z._insertElement(X,P.HTML),Z.headElement=Z.openElements.current,Z.insertionMode=z.IN_HEAD;break}default:F1(Z,X)}}function nX(Z,X){let Q=X.tagID;if(Q===W.HEAD||Q===W.BODY||Q===W.HTML||Q===W.BR)F1(Z,X);else Z._err(X,L.endTagWithoutMatchingOpenElement)}function F1(Z,X){Z._insertFakeElement(F.HEAD,W.HEAD),Z.headElement=Z.openElements.current,Z.insertionMode=z.IN_HEAD,Z._processToken(X)}function w0(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.BASE:case W.BASEFONT:case W.BGSOUND:case W.LINK:case W.META:{Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.TITLE:{Z._switchToTextParsing(X,n.RCDATA);break}case W.NOSCRIPT:{if(Z.options.scriptingEnabled)Z._switchToTextParsing(X,n.RAWTEXT);else Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_HEAD_NO_SCRIPT;break}case W.NOFRAMES:case W.STYLE:{Z._switchToTextParsing(X,n.RAWTEXT);break}case W.SCRIPT:{Z._switchToTextParsing(X,n.SCRIPT_DATA);break}case W.TEMPLATE:{Z._insertTemplate(X),Z.activeFormattingElements.insertMarker(),Z.framesetOk=!1,Z.insertionMode=z.IN_TEMPLATE,Z.tmplInsertionModeStack.unshift(z.IN_TEMPLATE);break}case W.HEAD:{Z._err(X,L.misplacedStartTagForHeadElement);break}default:B1(Z,X)}}function tX(Z,X){switch(X.tagID){case W.HEAD:{Z.openElements.pop(),Z.insertionMode=z.AFTER_HEAD;break}case W.BODY:case W.BR:case W.HTML:{B1(Z,X);break}case W.TEMPLATE:{I0(Z,X);break}default:Z._err(X,L.endTagWithoutMatchingOpenElement)}}function I0(Z,X){if(Z.openElements.tmplCount>0){if(Z.openElements.generateImpliedEndTagsThoroughly(),Z.openElements.currentTagId!==W.TEMPLATE)Z._err(X,L.closingOfElementWithOpenChildElements);Z.openElements.popUntilTagNamePopped(W.TEMPLATE),Z.activeFormattingElements.clearToLastMarker(),Z.tmplInsertionModeStack.shift(),Z._resetInsertionMode()}else Z._err(X,L.endTagWithoutMatchingOpenElement)}function B1(Z,X){Z.openElements.pop(),Z.insertionMode=z.AFTER_HEAD,Z._processToken(X)}function eX(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.BASEFONT:case W.BGSOUND:case W.HEAD:case W.LINK:case W.META:case W.NOFRAMES:case W.STYLE:{w0(Z,X);break}case W.NOSCRIPT:{Z._err(X,L.nestedNoscriptInHead);break}default:L1(Z,X)}}function Z5(Z,X){switch(X.tagID){case W.NOSCRIPT:{Z.openElements.pop(),Z.insertionMode=z.IN_HEAD;break}case W.BR:{L1(Z,X);break}default:Z._err(X,L.endTagWithoutMatchingOpenElement)}}function L1(Z,X){let Q=X.type===S.EOF?L.openElementsLeftAfterEof:L.disallowedContentInNoscriptInHead;Z._err(X,Q),Z.openElements.pop(),Z.insertionMode=z.IN_HEAD,Z._processToken(X)}function X5(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.BODY:{Z._insertElement(X,P.HTML),Z.framesetOk=!1,Z.insertionMode=z.IN_BODY;break}case W.FRAMESET:{Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_FRAMESET;break}case W.BASE:case W.BASEFONT:case W.BGSOUND:case W.LINK:case W.META:case W.NOFRAMES:case W.SCRIPT:case W.STYLE:case W.TEMPLATE:case W.TITLE:{Z._err(X,L.abandonedHeadElementChild),Z.openElements.push(Z.headElement,W.HEAD),w0(Z,X),Z.openElements.remove(Z.headElement);break}case W.HEAD:{Z._err(X,L.misplacedStartTagForHeadElement);break}default:q1(Z,X)}}function Q5(Z,X){switch(X.tagID){case W.BODY:case W.HTML:case W.BR:{q1(Z,X);break}case W.TEMPLATE:{I0(Z,X);break}default:Z._err(X,L.endTagWithoutMatchingOpenElement)}}function q1(Z,X){Z._insertFakeElement(F.BODY,W.BODY),Z.insertionMode=z.IN_BODY,z4(Z,X)}function z4(Z,X){switch(X.type){case S.CHARACTER:{h3(Z,X);break}case S.WHITESPACE_CHARACTER:{C3(Z,X);break}case S.COMMENT:{M2(Z,X);break}case S.START_TAG:{t(Z,X);break}case S.END_TAG:{w4(Z,X);break}case S.EOF:{$3(Z,X);break}default:}}function C3(Z,X){Z._reconstructActiveFormattingElements(),Z._insertCharacters(X)}function h3(Z,X){Z._reconstructActiveFormattingElements(),Z._insertCharacters(X),Z.framesetOk=!1}function K5(Z,X){if(Z.openElements.tmplCount===0)Z.treeAdapter.adoptAttributes(Z.openElements.items[0],X.attrs)}function W5(Z,X){let Q=Z.openElements.tryPeekProperlyNestedBodyElement();if(Q&&Z.openElements.tmplCount===0)Z.framesetOk=!1,Z.treeAdapter.adoptAttributes(Q,X.attrs)}function Y5(Z,X){let Q=Z.openElements.tryPeekProperlyNestedBodyElement();if(Z.framesetOk&&Q)Z.treeAdapter.detachNode(Q),Z.openElements.popAllUpToHtmlElement(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_FRAMESET}function J5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML)}function V5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();if(Z.openElements.currentTagId!==void 0&&j1.has(Z.openElements.currentTagId))Z.openElements.pop();Z._insertElement(X,P.HTML)}function j5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML),Z.skipNextNewLine=!0,Z.framesetOk=!1}function H5(Z,X){let Q=Z.openElements.tmplCount>0;if(!Z.formElement||Q){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();if(Z._insertElement(X,P.HTML),!Q)Z.formElement=Z.openElements.current}}function z5(Z,X){Z.framesetOk=!1;let Q=X.tagID;for(let K=Z.openElements.stackTop;K>=0;K--){let Y=Z.openElements.tagIDs[K];if(Q===W.LI&&Y===W.LI||(Q===W.DD||Q===W.DT)&&(Y===W.DD||Y===W.DT)){Z.openElements.generateImpliedEndTagsWithExclusion(Y),Z.openElements.popUntilTagNamePopped(Y);break}if(Y!==W.ADDRESS&&Y!==W.DIV&&Y!==W.P&&Z._isSpecialElement(Z.openElements.items[K],Y))break}if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML)}function w5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML),Z.tokenizer.state=n.PLAINTEXT}function U5(Z,X){if(Z.openElements.hasInScope(W.BUTTON))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(W.BUTTON);Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.framesetOk=!1}function F5(Z,X){let Q=Z.activeFormattingElements.getElementEntryInScopeWithTagName(F.A);if(Q)D2(Z,X),Z.openElements.remove(Q.element),Z.activeFormattingElements.removeEntry(Q);Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,X)}function B5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,X)}function L5(Z,X){if(Z._reconstructActiveFormattingElements(),Z.openElements.hasInScope(W.NOBR))D2(Z,X),Z._reconstructActiveFormattingElements();Z._insertElement(X,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,X)}function q5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.activeFormattingElements.insertMarker(),Z.framesetOk=!1}function x5(Z,X){if(Z.treeAdapter.getDocumentMode(Z.document)!==Z0.QUIRKS&&Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML),Z.framesetOk=!1,Z.insertionMode=z.IN_TABLE}function M3(Z,X){Z._reconstructActiveFormattingElements(),Z._appendElement(X,P.HTML),Z.framesetOk=!1,X.ackSelfClosing=!0}function N3(Z){let X=X4(Z,P0.TYPE);return X!=null&&X.toLowerCase()===kX}function P5(Z,X){if(Z._reconstructActiveFormattingElements(),Z._appendElement(X,P.HTML),!N3(X))Z.framesetOk=!1;X.ackSelfClosing=!0}function f5(Z,X){Z._appendElement(X,P.HTML),X.ackSelfClosing=!0}function y5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._appendElement(X,P.HTML),Z.framesetOk=!1,X.ackSelfClosing=!0}function O5(Z,X){X.tagName=F.IMG,X.tagID=W.IMG,M3(Z,X)}function b5(Z,X){Z._insertElement(X,P.HTML),Z.skipNextNewLine=!0,Z.tokenizer.state=n.RCDATA,Z.originalInsertionMode=Z.insertionMode,Z.framesetOk=!1,Z.insertionMode=z.TEXT}function v5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._reconstructActiveFormattingElements(),Z.framesetOk=!1,Z._switchToTextParsing(X,n.RAWTEXT)}function R5(Z,X){Z.framesetOk=!1,Z._switchToTextParsing(X,n.RAWTEXT)}function b3(Z,X){Z._switchToTextParsing(X,n.RAWTEXT)}function C5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.framesetOk=!1,Z.insertionMode=Z.insertionMode===z.IN_TABLE||Z.insertionMode===z.IN_CAPTION||Z.insertionMode===z.IN_TABLE_BODY||Z.insertionMode===z.IN_ROW||Z.insertionMode===z.IN_CELL?z.IN_SELECT_IN_TABLE:z.IN_SELECT}function h5(Z,X){if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML)}function M5(Z,X){if(Z.openElements.hasInScope(W.RUBY))Z.openElements.generateImpliedEndTags();Z._insertElement(X,P.HTML)}function N5(Z,X){if(Z.openElements.hasInScope(W.RUBY))Z.openElements.generateImpliedEndTagsWithExclusion(W.RTC);Z._insertElement(X,P.HTML)}function D5(Z,X){if(Z._reconstructActiveFormattingElements(),R2(X),Y4(X),X.selfClosing)Z._appendElement(X,P.MATHML);else Z._insertElement(X,P.MATHML);X.ackSelfClosing=!0}function $5(Z,X){if(Z._reconstructActiveFormattingElements(),C2(X),Y4(X),X.selfClosing)Z._appendElement(X,P.SVG);else Z._insertElement(X,P.SVG);X.ackSelfClosing=!0}function v3(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML)}function t(Z,X){switch(X.tagID){case W.I:case W.S:case W.B:case W.U:case W.EM:case W.TT:case W.BIG:case W.CODE:case W.FONT:case W.SMALL:case W.STRIKE:case W.STRONG:{B5(Z,X);break}case W.A:{F5(Z,X);break}case W.H1:case W.H2:case W.H3:case W.H4:case W.H5:case W.H6:{V5(Z,X);break}case W.P:case W.DL:case W.OL:case W.UL:case W.DIV:case W.DIR:case W.NAV:case W.MAIN:case W.MENU:case W.ASIDE:case W.CENTER:case W.FIGURE:case W.FOOTER:case W.HEADER:case W.HGROUP:case W.DIALOG:case W.DETAILS:case W.ADDRESS:case W.ARTICLE:case W.SEARCH:case W.SECTION:case W.SUMMARY:case W.FIELDSET:case W.BLOCKQUOTE:case W.FIGCAPTION:{J5(Z,X);break}case W.LI:case W.DD:case W.DT:{z5(Z,X);break}case W.BR:case W.IMG:case W.WBR:case W.AREA:case W.EMBED:case W.KEYGEN:{M3(Z,X);break}case W.HR:{y5(Z,X);break}case W.RB:case W.RTC:{M5(Z,X);break}case W.RT:case W.RP:{N5(Z,X);break}case W.PRE:case W.LISTING:{j5(Z,X);break}case W.XMP:{v5(Z,X);break}case W.SVG:{$5(Z,X);break}case W.HTML:{K5(Z,X);break}case W.BASE:case W.LINK:case W.META:case W.STYLE:case W.TITLE:case W.SCRIPT:case W.BGSOUND:case W.BASEFONT:case W.TEMPLATE:{w0(Z,X);break}case W.BODY:{W5(Z,X);break}case W.FORM:{H5(Z,X);break}case W.NOBR:{L5(Z,X);break}case W.MATH:{D5(Z,X);break}case W.TABLE:{x5(Z,X);break}case W.INPUT:{P5(Z,X);break}case W.PARAM:case W.TRACK:case W.SOURCE:{f5(Z,X);break}case W.IMAGE:{O5(Z,X);break}case W.BUTTON:{U5(Z,X);break}case W.APPLET:case W.OBJECT:case W.MARQUEE:{q5(Z,X);break}case W.IFRAME:{R5(Z,X);break}case W.SELECT:{C5(Z,X);break}case W.OPTION:case W.OPTGROUP:{h5(Z,X);break}case W.NOEMBED:case W.NOFRAMES:{b3(Z,X);break}case W.FRAMESET:{Y5(Z,X);break}case W.TEXTAREA:{b5(Z,X);break}case W.NOSCRIPT:{if(Z.options.scriptingEnabled)b3(Z,X);else v3(Z,X);break}case W.PLAINTEXT:{w5(Z,X);break}case W.COL:case W.TH:case W.TD:case W.TR:case W.HEAD:case W.FRAME:case W.TBODY:case W.TFOOT:case W.THEAD:case W.CAPTION:case W.COLGROUP:break;default:v3(Z,X)}}function g5(Z,X){if(Z.openElements.hasInScope(W.BODY)){if(Z.insertionMode=z.AFTER_BODY,Z.options.sourceCodeLocationInfo){let Q=Z.openElements.tryPeekProperlyNestedBodyElement();if(Q)Z._setEndLocation(Q,X)}}}function G5(Z,X){if(Z.openElements.hasInScope(W.BODY))Z.insertionMode=z.AFTER_BODY,I3(Z,X)}function E5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(Q)}function m5(Z){let X=Z.openElements.tmplCount>0,{formElement:Q}=Z;if(!X)Z.formElement=null;if((Q||X)&&Z.openElements.hasInScope(W.FORM)){if(Z.openElements.generateImpliedEndTags(),X)Z.openElements.popUntilTagNamePopped(W.FORM);else if(Q)Z.openElements.remove(Q)}}function k5(Z){if(!Z.openElements.hasInButtonScope(W.P))Z._insertFakeElement(F.P,W.P);Z._closePElement()}function _5(Z){if(Z.openElements.hasInListItemScope(W.LI))Z.openElements.generateImpliedEndTagsWithExclusion(W.LI),Z.openElements.popUntilTagNamePopped(W.LI)}function S5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTagsWithExclusion(Q),Z.openElements.popUntilTagNamePopped(Q)}function I5(Z){if(Z.openElements.hasNumberedHeaderInScope())Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilNumberedHeaderPopped()}function T5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(Q),Z.activeFormattingElements.clearToLastMarker()}function A5(Z){Z._reconstructActiveFormattingElements(),Z._insertFakeElement(F.BR,W.BR),Z.openElements.pop(),Z.framesetOk=!1}function D3(Z,X){let{tagName:Q,tagID:K}=X;for(let Y=Z.openElements.stackTop;Y>0;Y--){let J=Z.openElements.items[Y],H=Z.openElements.tagIDs[Y];if(K===H&&(K!==W.UNKNOWN||Z.treeAdapter.getTagName(J)===Q)){if(Z.openElements.generateImpliedEndTagsWithExclusion(K),Z.openElements.stackTop>=Y)Z.openElements.shortenToLength(Y);break}if(Z._isSpecialElement(J,H))break}}function w4(Z,X){switch(X.tagID){case W.A:case W.B:case W.I:case W.S:case W.U:case W.EM:case W.TT:case W.BIG:case W.CODE:case W.FONT:case W.NOBR:case W.SMALL:case W.STRIKE:case W.STRONG:{D2(Z,X);break}case W.P:{k5(Z);break}case W.DL:case W.UL:case W.OL:case W.DIR:case W.DIV:case W.NAV:case W.PRE:case W.MAIN:case W.MENU:case W.ASIDE:case W.BUTTON:case W.CENTER:case W.FIGURE:case W.FOOTER:case W.HEADER:case W.HGROUP:case W.DIALOG:case W.ADDRESS:case W.ARTICLE:case W.DETAILS:case W.SEARCH:case W.SECTION:case W.SUMMARY:case W.LISTING:case W.FIELDSET:case W.BLOCKQUOTE:case W.FIGCAPTION:{E5(Z,X);break}case W.LI:{_5(Z);break}case W.DD:case W.DT:{S5(Z,X);break}case W.H1:case W.H2:case W.H3:case W.H4:case W.H5:case W.H6:{I5(Z);break}case W.BR:{A5(Z);break}case W.BODY:{g5(Z,X);break}case W.HTML:{G5(Z,X);break}case W.FORM:{m5(Z);break}case W.APPLET:case W.OBJECT:case W.MARQUEE:{T5(Z,X);break}case W.TEMPLATE:{I0(Z,X);break}default:D3(Z,X)}}function $3(Z,X){if(Z.tmplInsertionModeStack.length>0)S3(Z,X);else $2(Z,X)}function u5(Z,X){var Q;if(X.tagID===W.SCRIPT)(Q=Z.scriptHandler)===null||Q===void 0||Q.call(Z,Z.openElements.current);Z.openElements.pop(),Z.insertionMode=Z.originalInsertionMode}function c5(Z,X){Z._err(X,L.eofInElementThatCanContainOnlyText),Z.openElements.pop(),Z.insertionMode=Z.originalInsertionMode,Z.onEof(X)}function h2(Z,X){if(Z.openElements.currentTagId!==void 0&&R3.has(Z.openElements.currentTagId))switch(Z.pendingCharacterTokens.length=0,Z.hasNonWhitespacePendingCharacterToken=!1,Z.originalInsertionMode=Z.insertionMode,Z.insertionMode=z.IN_TABLE_TEXT,X.type){case S.CHARACTER:{G3(Z,X);break}case S.WHITESPACE_CHARACTER:{g3(Z,X);break}}else P1(Z,X)}function l5(Z,X){Z.openElements.clearBackToTableContext(),Z.activeFormattingElements.insertMarker(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_CAPTION}function d5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_COLUMN_GROUP}function i5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(F.COLGROUP,W.COLGROUP),Z.insertionMode=z.IN_COLUMN_GROUP,g2(Z,X)}function a5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_TABLE_BODY}function p5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(F.TBODY,W.TBODY),Z.insertionMode=z.IN_TABLE_BODY,U4(Z,X)}function s5(Z,X){if(Z.openElements.hasInTableScope(W.TABLE))Z.openElements.popUntilTagNamePopped(W.TABLE),Z._resetInsertionMode(),Z._processStartTag(X)}function r5(Z,X){if(N3(X))Z._appendElement(X,P.HTML);else P1(Z,X);X.ackSelfClosing=!0}function o5(Z,X){if(!Z.formElement&&Z.openElements.tmplCount===0)Z._insertElement(X,P.HTML),Z.formElement=Z.openElements.current,Z.openElements.pop()}function a0(Z,X){switch(X.tagID){case W.TD:case W.TH:case W.TR:{p5(Z,X);break}case W.STYLE:case W.SCRIPT:case W.TEMPLATE:{w0(Z,X);break}case W.COL:{i5(Z,X);break}case W.FORM:{o5(Z,X);break}case W.TABLE:{s5(Z,X);break}case W.TBODY:case W.TFOOT:case W.THEAD:{a5(Z,X);break}case W.INPUT:{r5(Z,X);break}case W.CAPTION:{l5(Z,X);break}case W.COLGROUP:{d5(Z,X);break}default:P1(Z,X)}}function x1(Z,X){switch(X.tagID){case W.TABLE:{if(Z.openElements.hasInTableScope(W.TABLE))Z.openElements.popUntilTagNamePopped(W.TABLE),Z._resetInsertionMode();break}case W.TEMPLATE:{I0(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:case W.TBODY:case W.TD:case W.TFOOT:case W.TH:case W.THEAD:case W.TR:break;default:P1(Z,X)}}function P1(Z,X){let Q=Z.fosterParentingEnabled;Z.fosterParentingEnabled=!0,z4(Z,X),Z.fosterParentingEnabled=Q}function g3(Z,X){Z.pendingCharacterTokens.push(X)}function G3(Z,X){Z.pendingCharacterTokens.push(X),Z.hasNonWhitespacePendingCharacterToken=!0}function w1(Z,X){let Q=0;if(Z.hasNonWhitespacePendingCharacterToken)for(;Q<Z.pendingCharacterTokens.length;Q++)P1(Z,Z.pendingCharacterTokens[Q]);else for(;Q<Z.pendingCharacterTokens.length;Q++)Z._insertCharacters(Z.pendingCharacterTokens[Q]);Z.insertionMode=Z.originalInsertionMode,Z._processToken(X)}var E3=new Set([W.CAPTION,W.COL,W.COLGROUP,W.TBODY,W.TD,W.TFOOT,W.TH,W.THEAD,W.TR]);function n5(Z,X){let Q=X.tagID;if(E3.has(Q)){if(Z.openElements.hasInTableScope(W.CAPTION))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(W.CAPTION),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=z.IN_TABLE,a0(Z,X)}else t(Z,X)}function t5(Z,X){let Q=X.tagID;switch(Q){case W.CAPTION:case W.TABLE:{if(Z.openElements.hasInTableScope(W.CAPTION)){if(Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(W.CAPTION),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=z.IN_TABLE,Q===W.TABLE)x1(Z,X)}break}case W.BODY:case W.COL:case W.COLGROUP:case W.HTML:case W.TBODY:case W.TD:case W.TFOOT:case W.TH:case W.THEAD:case W.TR:break;default:w4(Z,X)}}function g2(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.COL:{Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.TEMPLATE:{w0(Z,X);break}default:V4(Z,X)}}function e5(Z,X){switch(X.tagID){case W.COLGROUP:{if(Z.openElements.currentTagId===W.COLGROUP)Z.openElements.pop(),Z.insertionMode=z.IN_TABLE;break}case W.TEMPLATE:{I0(Z,X);break}case W.COL:break;default:V4(Z,X)}}function V4(Z,X){if(Z.openElements.currentTagId===W.COLGROUP)Z.openElements.pop(),Z.insertionMode=z.IN_TABLE,Z._processToken(X)}function U4(Z,X){switch(X.tagID){case W.TR:{Z.openElements.clearBackToTableBodyContext(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_ROW;break}case W.TH:case W.TD:{Z.openElements.clearBackToTableBodyContext(),Z._insertFakeElement(F.TR,W.TR),Z.insertionMode=z.IN_ROW,F4(Z,X);break}case W.CAPTION:case W.COL:case W.COLGROUP:case W.TBODY:case W.TFOOT:case W.THEAD:{if(Z.openElements.hasTableBodyContextInTableScope())Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE,a0(Z,X);break}default:a0(Z,X)}}function N2(Z,X){let Q=X.tagID;switch(X.tagID){case W.TBODY:case W.TFOOT:case W.THEAD:{if(Z.openElements.hasInTableScope(Q))Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE;break}case W.TABLE:{if(Z.openElements.hasTableBodyContextInTableScope())Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE,x1(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:case W.TD:case W.TH:case W.TR:break;default:x1(Z,X)}}function F4(Z,X){switch(X.tagID){case W.TH:case W.TD:{Z.openElements.clearBackToTableRowContext(),Z._insertElement(X,P.HTML),Z.insertionMode=z.IN_CELL,Z.activeFormattingElements.insertMarker();break}case W.CAPTION:case W.COL:case W.COLGROUP:case W.TBODY:case W.TFOOT:case W.THEAD:case W.TR:{if(Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE_BODY,U4(Z,X);break}default:a0(Z,X)}}function m3(Z,X){switch(X.tagID){case W.TR:{if(Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE_BODY;break}case W.TABLE:{if(Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE_BODY,N2(Z,X);break}case W.TBODY:case W.TFOOT:case W.THEAD:{if(Z.openElements.hasInTableScope(X.tagID)||Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=z.IN_TABLE_BODY,N2(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:case W.TD:case W.TH:break;default:x1(Z,X)}}function ZQ(Z,X){let Q=X.tagID;if(E3.has(Q)){if(Z.openElements.hasInTableScope(W.TD)||Z.openElements.hasInTableScope(W.TH))Z._closeTableCell(),F4(Z,X)}else t(Z,X)}function XQ(Z,X){let Q=X.tagID;switch(Q){case W.TD:case W.TH:{if(Z.openElements.hasInTableScope(Q))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(Q),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=z.IN_ROW;break}case W.TABLE:case W.TBODY:case W.TFOOT:case W.THEAD:case W.TR:{if(Z.openElements.hasInTableScope(Q))Z._closeTableCell(),m3(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:break;default:w4(Z,X)}}function k3(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.OPTION:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();Z._insertElement(X,P.HTML);break}case W.OPTGROUP:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();if(Z.openElements.currentTagId===W.OPTGROUP)Z.openElements.pop();Z._insertElement(X,P.HTML);break}case W.HR:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();if(Z.openElements.currentTagId===W.OPTGROUP)Z.openElements.pop();Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.INPUT:case W.KEYGEN:case W.TEXTAREA:case W.SELECT:{if(Z.openElements.hasInSelectScope(W.SELECT)){if(Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode(),X.tagID!==W.SELECT)Z._processStartTag(X)}break}case W.SCRIPT:case W.TEMPLATE:{w0(Z,X);break}default:}}function _3(Z,X){switch(X.tagID){case W.OPTGROUP:{if(Z.openElements.stackTop>0&&Z.openElements.currentTagId===W.OPTION&&Z.openElements.tagIDs[Z.openElements.stackTop-1]===W.OPTGROUP)Z.openElements.pop();if(Z.openElements.currentTagId===W.OPTGROUP)Z.openElements.pop();break}case W.OPTION:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();break}case W.SELECT:{if(Z.openElements.hasInSelectScope(W.SELECT))Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode();break}case W.TEMPLATE:{I0(Z,X);break}default:}}function QQ(Z,X){let Q=X.tagID;if(Q===W.CAPTION||Q===W.TABLE||Q===W.TBODY||Q===W.TFOOT||Q===W.THEAD||Q===W.TR||Q===W.TD||Q===W.TH)Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode(),Z._processStartTag(X);else k3(Z,X)}function KQ(Z,X){let Q=X.tagID;if(Q===W.CAPTION||Q===W.TABLE||Q===W.TBODY||Q===W.TFOOT||Q===W.THEAD||Q===W.TR||Q===W.TD||Q===W.TH){if(Z.openElements.hasInTableScope(Q))Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode(),Z.onEndTag(X)}else _3(Z,X)}function WQ(Z,X){switch(X.tagID){case W.BASE:case W.BASEFONT:case W.BGSOUND:case W.LINK:case W.META:case W.NOFRAMES:case W.SCRIPT:case W.STYLE:case W.TEMPLATE:case W.TITLE:{w0(Z,X);break}case W.CAPTION:case W.COLGROUP:case W.TBODY:case W.TFOOT:case W.THEAD:{Z.tmplInsertionModeStack[0]=z.IN_TABLE,Z.insertionMode=z.IN_TABLE,a0(Z,X);break}case W.COL:{Z.tmplInsertionModeStack[0]=z.IN_COLUMN_GROUP,Z.insertionMode=z.IN_COLUMN_GROUP,g2(Z,X);break}case W.TR:{Z.tmplInsertionModeStack[0]=z.IN_TABLE_BODY,Z.insertionMode=z.IN_TABLE_BODY,U4(Z,X);break}case W.TD:case W.TH:{Z.tmplInsertionModeStack[0]=z.IN_ROW,Z.insertionMode=z.IN_ROW,F4(Z,X);break}default:Z.tmplInsertionModeStack[0]=z.IN_BODY,Z.insertionMode=z.IN_BODY,t(Z,X)}}function YQ(Z,X){if(X.tagID===W.TEMPLATE)I0(Z,X)}function S3(Z,X){if(Z.openElements.tmplCount>0)Z.openElements.popUntilTagNamePopped(W.TEMPLATE),Z.activeFormattingElements.clearToLastMarker(),Z.tmplInsertionModeStack.shift(),Z._resetInsertionMode(),Z.onEof(X);else $2(Z,X)}function JQ(Z,X){if(X.tagID===W.HTML)t(Z,X);else j4(Z,X)}function I3(Z,X){var Q;if(X.tagID===W.HTML){if(!Z.fragmentContext)Z.insertionMode=z.AFTER_AFTER_BODY;if(Z.options.sourceCodeLocationInfo&&Z.openElements.tagIDs[0]===W.HTML){Z._setEndLocation(Z.openElements.items[0],X);let K=Z.openElements.items[1];if(K&&!((Q=Z.treeAdapter.getNodeSourceCodeLocation(K))===null||Q===void 0?void 0:Q.endTag))Z._setEndLocation(K,X)}}else j4(Z,X)}function j4(Z,X){Z.insertionMode=z.IN_BODY,z4(Z,X)}function VQ(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.FRAMESET:{Z._insertElement(X,P.HTML);break}case W.FRAME:{Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.NOFRAMES:{w0(Z,X);break}default:}}function jQ(Z,X){if(X.tagID===W.FRAMESET&&!Z.openElements.isRootHtmlElementCurrent()){if(Z.openElements.pop(),!Z.fragmentContext&&Z.openElements.currentTagId!==W.FRAMESET)Z.insertionMode=z.AFTER_FRAMESET}}function HQ(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.NOFRAMES:{w0(Z,X);break}default:}}function zQ(Z,X){if(X.tagID===W.HTML)Z.insertionMode=z.AFTER_AFTER_FRAMESET}function wQ(Z,X){if(X.tagID===W.HTML)t(Z,X);else J4(Z,X)}function J4(Z,X){Z.insertionMode=z.IN_BODY,z4(Z,X)}function UQ(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.NOFRAMES:{w0(Z,X);break}default:}}function FQ(Z,X){X.chars=u,Z._insertCharacters(X)}function BQ(Z,X){Z._insertCharacters(X),Z.framesetOk=!1}function T3(Z){while(Z.treeAdapter.getNamespaceURI(Z.openElements.current)!==P.HTML&&Z.openElements.currentTagId!==void 0&&!Z._isIntegrationPoint(Z.openElements.currentTagId,Z.openElements.current))Z.openElements.pop()}function LQ(Z,X){if(x3(X))T3(Z),Z._startTagOutsideForeignContent(X);else{let Q=Z._getAdjustedCurrentElement(),K=Z.treeAdapter.getNamespaceURI(Q);if(K===P.MATHML)R2(X);else if(K===P.SVG)P3(X),C2(X);if(Y4(X),X.selfClosing)Z._appendElement(X,K);else Z._insertElement(X,K);X.ackSelfClosing=!0}}function qQ(Z,X){if(X.tagID===W.P||X.tagID===W.BR){T3(Z),Z._endTagOutsideForeignContent(X);return}for(let Q=Z.openElements.stackTop;Q>0;Q--){let K=Z.openElements.items[Q];if(Z.treeAdapter.getNamespaceURI(K)===P.HTML){Z._endTagOutsideForeignContent(X);break}let Y=Z.treeAdapter.getTagName(K);if(Y.toLowerCase()===X.tagName){X.tagName=Y,Z.openElements.shortenToLength(Q);break}}}var cV=typeof String.prototype.codePointAt==="function"?(Z,X)=>Z.codePointAt(X):(Z,X)=>(Z.charCodeAt(X)&64512)===55296?(Z.charCodeAt(X)-55296)*1024+Z.charCodeAt(X+1)-56320+65536:Z.charCodeAt(X);function A3(Z,X){return function(K){let Y,J=0,H="";while(Y=Z.exec(K)){if(J!==Y.index)H+=K.substring(J,Y.index);H+=X.get(Y[0].charCodeAt(0)),J=Y.index+1}return H+K.substring(J)}}var u3=A3(/["&\u00A0]/g,new Map([[34,"&quot;"],[38,"&amp;"],[160,"&nbsp;"]])),c3=A3(/[&<>\u00A0]/g,new Map([[38,"&amp;"],[60,"&lt;"],[62,"&gt;"],[160,"&nbsp;"]]));var xQ=new Set([F.AREA,F.BASE,F.BASEFONT,F.BGSOUND,F.BR,F.COL,F.EMBED,F.FRAME,F.HR,F.IMG,F.INPUT,F.KEYGEN,F.LINK,F.META,F.PARAM,F.SOURCE,F.TRACK,F.WBR]);function l3(Z,X){return X.treeAdapter.isElementNode(Z)&&X.treeAdapter.getNamespaceURI(Z)===P.HTML&&xQ.has(X.treeAdapter.getTagName(Z))}var PQ={treeAdapter:J0,scriptingEnabled:!0};function p0(Z,X){let Q={...PQ,...X};if(l3(Z,Q))return"";return d3(Z,Q)}function d3(Z,X){let Q="",K=X.treeAdapter.isElementNode(Z)&&X.treeAdapter.getTagName(Z)===F.TEMPLATE&&X.treeAdapter.getNamespaceURI(Z)===P.HTML?X.treeAdapter.getTemplateContent(Z):Z,Y=X.treeAdapter.getChildNodes(K);if(Y)for(let J of Y)Q+=fQ(J,X);return Q}function fQ(Z,X){if(X.treeAdapter.isElementNode(Z))return yQ(Z,X);if(X.treeAdapter.isTextNode(Z))return bQ(Z,X);if(X.treeAdapter.isCommentNode(Z))return vQ(Z,X);if(X.treeAdapter.isDocumentTypeNode(Z))return RQ(Z,X);return""}function yQ(Z,X){let Q=X.treeAdapter.getTagName(Z);return`<${Q}${OQ(Z,X)}>${l3(Z,X)?"":`${d3(Z,X)}</${Q}>`}`}function OQ(Z,{treeAdapter:X}){let Q="";for(let K of X.getAttrList(Z)){if(Q+=" ",K.namespace)switch(K.namespace){case P.XML:{Q+=`xml:${K.name}`;break}case P.XMLNS:{if(K.name!=="xmlns")Q+="xmlns:";Q+=K.name;break}case P.XLINK:{Q+=`xlink:${K.name}`;break}default:Q+=`${K.prefix}:${K.name}`}else Q+=K.name;Q+=`="${u3(K.value)}"`}return Q}function bQ(Z,X){let{treeAdapter:Q}=X,K=Q.getTextNodeContent(Z),Y=Q.getParentNode(Z),J=Y&&Q.isElementNode(Y)&&Q.getTagName(Y);return J&&Q.getNamespaceURI(Y)===P.HTML&&X3(J,X.scriptingEnabled)?K:c3(K)}function vQ(Z,{treeAdapter:X}){return`<!--${X.getCommentNodeContent(Z)}-->`}function RQ(Z,{treeAdapter:X}){return`<!DOCTYPE ${X.getDocumentTypeNodeName(Z)}>`}function f1(Z,X){return H4.parse(Z,X)}import{z as R}from"zod";import*as s0 from"css-tree";var y1=20971520,CQ=new Set(["script","form","iframe","frame","frameset","object","embed","portal","base","audio","video","source","track","noscript","animate","animatemotion","animatetransform","discard","set"]),hQ=new Set(["action","cite","data","formaction","href","ping","poster","src","srcset","xlink:href"]),G2=/^data:(?:image\/(?:png|jpe?g|gif|webp|avif|bmp|x-icon)|font\/[a-z0-9.+-]+|application\/(?:font-[a-z0-9.+-]+|vnd\.ms-fontobject|x-font-[a-z0-9.+-]+));/i,MQ=new Set(["date","datetime-local","email","month","number","password","search","tel","text","time","url","week"]);function NQ(Z){return"tagName"in Z}function i3(Z,X){return Z.attrs.find((Q)=>Q.name.toLowerCase()===X.toLowerCase())?.value??null}function N0(Z,X,Q){let K=Z.attrs.find((Y)=>Y.name.toLowerCase()===X.toLowerCase());if(K)K.value=Q;else Z.attrs.push({name:X,value:Q})}function a3(Z){try{let X=s0.parse(Z,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return s0.walk(X,{enter(Q,K,Y){if(Q.type==="Atrule"&&Q.name.toLowerCase()==="import"){Y.remove(K);return}if(Q.type==="Declaration"){let J=Q.property.toLowerCase();if(J==="behavior"||J==="-moz-binding")Y.remove(K);return}if(Q.type==="Url"&&!G2.test(Q.value)){Q.value="data:,";return}if(Q.type==="String"&&this.function&&["image-set","-webkit-image-set","src"].includes(this.function.name.toLowerCase())&&!G2.test(Q.value))Q.value="data:,"}}),s0.generate(X)}catch{return""}}function DQ(Z){return a3(`x{${Z}}`).replace(/^x\{/,"").replace(/\}$/,"")}function $Q(Z){Z.attrs=Z.attrs.flatMap((Q)=>{let K=Q.name.toLowerCase();if(K.startsWith("on")||K==="srcdoc"||K==="nonce")return[];if(K==="style"){let Y=DQ(Q.value);return Y?[{...Q,value:Y}]:[]}if(hQ.has(K)){if(K==="src"&&G2.test(Q.value))return[Q];if(K==="href"&&Q.value.startsWith("#"))return[Q];return[]}if(K==="target"||K==="download"||K==="http-equiv")return[];return[Q]});let X=Z.tagName.toLowerCase();if(X==="textarea"||X==="input"&&MQ.has((i3(Z,"type")??"text").toLowerCase()))N0(Z,"readonly",""),N0(Z,"aria-readonly","true"),N0(Z,"tabindex","-1");else if(X==="button"||X==="select"||X==="input")N0(Z,"disabled",""),N0(Z,"aria-disabled","true"),N0(Z,"tabindex","-1");if(i3(Z,"contenteditable")!==null)N0(Z,"contenteditable","false"),N0(Z,"tabindex","-1");if(Z.tagName==="style"&&Z.childNodes){for(let Q of Z.childNodes)if("value"in Q&&typeof Q.value==="string")Q.value=a3(Q.value)}}function p3(Z){let X=[];for(let Q of Z.childNodes){if(NQ(Q)){let K=Q.tagName.toLowerCase();if(CQ.has(K))continue;if(K==="meta"&&Q.attrs.some((Y)=>Y.name.toLowerCase()==="http-equiv"&&Y.value.toLowerCase()!=="content-type"))continue;if(K==="link")continue;$Q(Q),p3(Q)}X.push(Q)}Z.childNodes=X}function s3(Z){if(Buffer.byteLength(Z,"utf8")>y1)throw Error("Browser snapshot exceeds the 20 MiB limit");let X=f1(Z);p3(X);let Q=p0(X);if(Buffer.byteLength(Q,"utf8")>y1)throw Error("Sanitized browser snapshot exceeds the 20 MiB limit");return Q}import*as r0 from"css-tree";function gQ(Z,X){if(!Z||Z.startsWith("#"))return Z;try{let Q=new URL(Z,X);if(Q.protocol!=="http:"&&Q.protocol!=="https:")return null;if(Q.username||Q.password)return null;return Q.href}catch{return null}}function r3(Z){try{let X=r0.parse(Z.css,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return r0.walk(X,{enter(Q,K,Y){if(Q.type==="Atrule"&&Q.name.toLowerCase()==="import"){if(K&&Y)Y.remove(K);return}if(Q.type==="Declaration"){let H=Q.property.toLowerCase();if(H==="behavior"||H==="-moz-binding"){if(K&&Y)Y.remove(K)}return}if(Q.type!=="Url")return;let J=gQ(Q.value,Z.baseUrl);if(J&&!J.startsWith("#"))Q.value=Z.resourceUrl(J);else if(!J)Q.value="data:,"}}),r0.generate(X)}catch{return""}}var EQ=1200000,mQ=200,o3=8,kQ=65536,n3="ideawave-frame",_Q=R.object({browserNodeId:R.string().uuid(),url:R.string().max(4000)}).strict(),SQ=R.object({proxySessionId:R.string().uuid()}).strict(),IQ=R.object({proxySessionId:R.string().uuid(),revision:R.string().min(1).max(200),html:R.string().max(y1).optional()}).strict(),TQ=R.object({exact:R.string().min(1).max(2000),prefix:R.string().max(500).optional(),suffix:R.string().max(500).optional()}).strict(),E2=R.union([R.object({ref:R.string().min(1).max(200)}).strict(),R.object({selector:R.string().min(1).max(2000).nullable(),textQuote:TQ.nullable().optional(),framePath:R.array(R.string().max(1000)).max(12).optional()}).strict().refine((Z)=>Boolean(Z.selector||Z.textQuote),{message:"A selector or text quote is required"})]),AQ=R.discriminatedUnion("type",[R.object({type:R.literal("inspect")}).strict(),R.object({type:R.literal("locate"),target:E2}).strict(),R.object({type:R.literal("click"),target:E2}).strict(),R.object({type:R.literal("scroll"),deltaY:R.number().finite().min(-1e5).max(1e5).optional(),left:R.number().finite().min(0).max(1e7).optional(),top:R.number().finite().min(0).max(1e7).optional()}).strict(),R.object({type:R.literal("find"),query:R.string().max(500),direction:R.enum(["forward","backward"]).optional()}).strict(),R.object({type:R.literal("refresh")}).strict(),R.object({type:R.literal("back")}).strict(),R.object({type:R.literal("forward")}).strict(),R.object({type:R.literal("navigate"),url:R.string().max(4000)}).strict(),R.object({type:R.literal("highlight"),target:E2,color:R.string().regex(/^#[0-9a-fA-F]{6}$/)}).strict(),R.object({type:R.literal("selection")}).strict(),R.object({type:R.literal("snapshot")}).strict()]),uQ=R.object({type:R.literal("pointer"),phase:R.enum(["move","down","up"]),x:R.number().finite().min(0).max(2048),y:R.number().finite().min(0).max(2048),button:R.enum(["left","middle","right"]).optional(),buttons:R.number().int().min(0).max(31).optional()}).strict(),cQ=R.object({events:R.array(R.discriminatedUnion("type",[uQ,R.object({type:R.literal("wheel"),deltaX:R.number().finite().min(-1e5).max(1e5),deltaY:R.number().finite().min(-1e5).max(1e5)}).strict(),R.object({type:R.literal("key"),phase:R.enum(["down","up"]),key:R.string().min(1).max(64)}).strict(),R.object({type:R.literal("text"),text:R.string().max(5000)}).strict()])).max(64)}).strict(),lQ=R.object({width:R.number().finite().min(1).max(16384),height:R.number().finite().min(1).max(16384)}).strict();function dQ(){return S2(18).toString("hex")}function iQ(Z){if(!Z)return"";if(Z.startsWith("["))return Z.slice(1,Z.indexOf("]"));return Z.split(":")[0]?.toLowerCase()??""}function t3(Z){return typeof Z==="string"?Z:void 0}function aQ(Z){let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:"||X.username||X.password)throw Error("Browser proxy frontend origin is invalid");return X.origin}function pQ(Z){return Z.replace(/[&<>"']/g,(X)=>{if(X==="&")return"&amp;";if(X==="<")return"&lt;";if(X===">")return"&gt;";if(X==='"')return"&quot;";return"&#39;"})}function m2(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function sQ(Z){let X=m2(Z.bridgeToken),Q=m2(Z.frontendOrigin),Y=`session=${encodeURIComponent(Z.sessionId)}&token=${encodeURIComponent(Z.bridgeToken)}`,J=pQ(Z.cspNonce);return`<!doctype html><html><head><meta charset="utf-8"><meta name="color-scheme" content="light"><style nonce="${J}">*{box-sizing:border-box}html,body,#surface,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden}body{background:#fff}#surface{position:relative;outline:0;touch-action:none;user-select:none}#view{display:block;object-fit:fill;pointer-events:none}#status{position:absolute;inset:auto 12px 12px;padding:8px 10px;border:1px solid #fecaca;border-radius:8px;background:rgba(255,255,255,.96);color:#b91c1c;font:12px system-ui;box-shadow:0 8px 24px rgba(15,23,42,.12)}#status[hidden]{display:none}</style></head><body><div id="surface" tabindex="0" role="application" aria-label="Live browser page"><img id="view" draggable="false" alt="" src="/browser/stream?${Y}"><div id="status" hidden></div></div><script nonce="${J}">(()=>{"use strict";const TOKEN=${X};const FRONTEND_ORIGIN=${Q};const SESSION=${m2(Z.sessionId)};const surface=document.getElementById("surface");const view=document.getElementById("view");const status=document.getElementById("status");let metrics={viewportWidth:720,viewportHeight:442};let queue=[];let flushPending=false;let inputChain=Promise.resolve();const endpoint=(path)=>path+"?session="+encodeURIComponent(SESSION);const headers={"content-type":"application/json","x-ideawave-browser-token":TOKEN};const post=async(path,body)=>{const response=await fetch(endpoint(path),{method:"POST",headers,body:JSON.stringify(body),credentials:"omit",cache:"no-store"});if(!response.ok)throw new Error((await response.text())||"Browser command failed");const type=response.headers.get("content-type")||"";return type.includes("application/json")?response.json():null};const sendParent=(event,payload,requestId)=>window.parent.postMessage({type:"ideawave-browser-event",token:TOKEN,event,payload,...(requestId?{requestId}:{})},FRONTEND_ORIGIN);const showError=(message)=>{status.textContent=String(message);status.hidden=false};const flush=()=>{flushPending=false;const batch=queue.splice(0,64);if(batch.length)inputChain=inputChain.then(()=>post("/browser/input",{events:batch})).catch(showError);if(queue.length){flushPending=true;requestAnimationFrame(flush)}};const enqueue=(event)=>{queue.push(event);if(flushPending)return;flushPending=true;requestAnimationFrame(flush)};const point=(event)=>{const rect=surface.getBoundingClientRect();return{x:Math.max(0,Math.min(metrics.viewportWidth,(event.clientX-rect.left)*metrics.viewportWidth/Math.max(1,rect.width))),y:Math.max(0,Math.min(metrics.viewportHeight,(event.clientY-rect.top)*metrics.viewportHeight/Math.max(1,rect.height)))}};const button=(value)=>value===1?"middle":value===2?"right":"left";for(const name of ["pointermove","pointerdown","pointerup"]){surface.addEventListener(name,event=>{if(name==="pointerdown"){surface.focus({preventScroll:true});surface.setPointerCapture(event.pointerId)}const p=point(event);enqueue({type:"pointer",phase:name.slice(7),x:p.x,y:p.y,button:button(event.button),buttons:event.buttons});event.preventDefault()})}surface.addEventListener("wheel",event=>{enqueue({type:"wheel",deltaX:event.deltaX,deltaY:event.deltaY});event.preventDefault()},{passive:false});surface.addEventListener("keydown",event=>{if(event.isComposing)return;enqueue({type:"key",phase:"down",key:event.key});event.preventDefault()});surface.addEventListener("keyup",event=>{if(event.isComposing)return;enqueue({type:"key",phase:"up",key:event.key});event.preventDefault()});surface.addEventListener("compositionend",event=>{if(event.data)enqueue({type:"text",text:event.data})});surface.addEventListener("paste",event=>{const text=event.clipboardData&&event.clipboardData.getData("text/plain");if(text){enqueue({type:"text",text:text.slice(0,5000)});event.preventDefault()}});surface.addEventListener("contextmenu",event=>event.preventDefault());const resize=new ResizeObserver(entries=>{const rect=entries[0]&&entries[0].contentRect;if(rect)void post("/browser/viewport",{width:rect.width,height:rect.height}).catch(showError)});resize.observe(surface);const events=new EventSource("/browser/events?${Y}");events.onmessage=event=>{try{const message=JSON.parse(event.data);if(message.event==="state"&&message.payload&&message.payload.metrics)metrics=message.payload.metrics;if(message.event==="error")showError(message.payload&&message.payload.message||"Browser page error");else status.hidden=true;sendParent(message.event,message.payload)}catch(error){showError(error instanceof Error?error.message:String(error))}};events.onerror=()=>showError("Live browser stream disconnected");window.addEventListener("message",event=>{const message=event.data;if(event.source!==window.parent||event.origin!==FRONTEND_ORIGIN||!message||message.type!=="ideawave-browser-command"||message.token!==TOKEN)return;Promise.resolve(post("/browser/command",message.command||{})).then(result=>sendParent("response",{ok:true,result},message.requestId),error=>sendParent("response",{ok:false,error:error instanceof Error?error.message:String(error)},message.requestId))});window.addEventListener("beforeunload",()=>{events.close();resize.disconnect()})})();</script></body></html>`}function X7(Z){return(Z["content-type"]??"application/octet-stream").split(";")[0]?.trim().toLowerCase()??"application/octet-stream"}function rQ(Z){return"tagName"in Z}function k2(Z,X){return Z.attrs.find((Q)=>Q.name.toLowerCase()===X)?.value??null}function e3(Z,X,Q){let K=Z.attrs.find((Y)=>Y.name.toLowerCase()===X);if(K)K.value=Q;else Z.attrs.push({name:X,value:Q})}function Z7(Z){let X=X7(Z.headers);if(!(/^image\/(?:png|jpeg|gif|webp|avif|bmp|x-icon)$/.test(X)||/^(?:font\/|application\/(?:font-|vnd\.ms-fontobject|x-font-))/.test(X)))return null;return`data:${X};base64,${Buffer.from(Z.body).toString("base64")}`}async function _2(Z){let X=[],Q=0;for await(let K of Z){let Y=Buffer.isBuffer(K)?K:Buffer.from(K);if(Q+=Y.byteLength,Q>kQ)throw Error("Browser request is too large");X.push(Y)}return JSON.parse(Buffer.concat(X).toString("utf8"))}class I2{sessions=new Map;port=null;sweepTimer;runtime;constructor(Z){this.runtime=Z??new V1,this.sweepTimer=setInterval(()=>this.sweep(),60000),this.sweepTimer.unref?.()}setPort(Z){this.port=Z}origin(Z){if(!this.port)throw Error("Browser proxy is not ready");return`http://${Z}.localhost:${this.port}`}wrapperOrigin(Z){return this.origin(Z.wrapperHost)}result(Z){let X=this.wrapperOrigin(Z);return{proxySessionId:Z.id,wrapperUrl:`${X}/browser/wrapper?session=${encodeURIComponent(Z.id)}`,bridgeToken:Z.bridgeToken,navigateUrlPrefix:`${X}/browser/command?session=${encodeURIComponent(Z.id)}&url=`}}async handleRpc(Z,X,Q){switch(Q.method){case"open_proxy_session":{let K=_Q.parse(Q.params),Y=C0(K.url).href,J=aQ(X),H=[...this.sessions.values()].find((U)=>U.frontendSessionId===Z&&U.browserNodeId===K.browserNodeId);if(H){if(H.frontendOrigin!==J)throw Error("Browser proxy session origin changed unexpectedly");if(H.lastUsedAt=Date.now(),H.remote.currentUrl!==Y)await H.remote.navigate(Y);return this.result(H)}let w=await this.runtime.createPage(Y),B={id:GQ(),frontendSessionId:Z,frontendOrigin:J,browserNodeId:K.browserNodeId,wrapperHost:`iw-browser-${dQ()}`,bridgeToken:S2(24).toString("base64url"),remote:w,lastUsedAt:Date.now()};return this.sessions.set(B.id,B),this.result(B)}case"close_proxy_session":{let K=SQ.parse(Q.params),Y=this.sessions.get(K.proxySessionId);if(Y&&Y.frontendSessionId!==Z)throw Error("Browser proxy session belongs to another frontend session");if(Y)await this.closeSession(Y);return{closed:!0}}case"build_snapshot":{let K=IQ.parse(Q.params),Y=this.ownedSession(Z,K.proxySessionId);if(Y.remote.currentRevision!==K.revision)throw Error("STALE_BROWSER_REF: inspect the browser again before freezing");return this.buildSnapshot(Y,K.revision)}}}async closeSession(Z){if(this.sessions.get(Z.id)===Z)this.sessions.delete(Z.id);await Z.remote.close()}closeFrontendSession(Z){for(let X of[...this.sessions.values()])if(X.frontendSessionId===Z)this.closeSession(X)}async close(){clearInterval(this.sweepTimer);let Z=[...this.sessions.values()];this.sessions.clear(),await Promise.all(Z.map((X)=>X.remote.close())),await this.runtime.close()}ownedSession(Z,X){let Q=this.sessions.get(X);if(!Q||Q.frontendSessionId!==Z)throw Error("Browser proxy session is unavailable");return Q.lastUsedAt=Date.now(),Q}sweep(){let Z=Date.now()-EQ;for(let X of[...this.sessions.values()])if(X.lastUsedAt<Z)this.closeSession(X)}requestAuthorized(Z,X){return t3(Z.headers.origin)===this.wrapperOrigin(X)&&t3(Z.headers["x-ideawave-browser-token"])===X.bridgeToken}async handleHttpRequest(Z,X){let Q=new URL(Z.url??"/","http://localhost");if(!Q.pathname.startsWith("/browser/"))return!1;let K=Q.searchParams.get("session"),Y=K?this.sessions.get(K):null;if(!Y)return X.writeHead(404),X.end(),!0;if(Y.lastUsedAt=Date.now(),iQ(Z.headers.host)!==`${Y.wrapperHost}.localhost`)return X.writeHead(403),X.end(),!0;try{if(Q.pathname==="/browser/wrapper"){if(Z.method!=="GET"&&Z.method!=="HEAD")return X.writeHead(405),X.end(),!0;return this.sendViewer(X,Y,Z.method==="HEAD"),!0}if(Q.searchParams.get("token")===Y.bridgeToken){if(Q.pathname==="/browser/stream")return this.sendFrameStream(X,Y,Z.method==="HEAD"),!0;if(Q.pathname==="/browser/events")return this.sendEventStream(X,Y,Z.method==="HEAD"),!0}if(Z.method!=="POST"||!this.requestAuthorized(Z,Y))return X.writeHead(403),X.end(),!0;if(Q.pathname==="/browser/input"){let J=cQ.parse(await _2(Z));return await Y.remote.input(J.events),this.sendJson(X,{ok:!0}),!0}if(Q.pathname==="/browser/viewport"){let J=lQ.parse(await _2(Z));return await Y.remote.setViewport(J.width,J.height),this.sendJson(X,{ok:!0}),!0}if(Q.pathname==="/browser/command"){let J=AQ.parse(await _2(Z));return this.sendJson(X,await Y.remote.command(J)),!0}return X.writeHead(404),X.end(),!0}catch(J){let H=J instanceof Error?J.message:"Browser operation failed";if(X.headersSent)X.destroy(J instanceof Error?J:void 0);else X.writeHead(400,{"content-type":"text/plain; charset=utf-8"}),X.end(H);return!0}}sendViewer(Z,X,Q){let K=S2(18).toString("base64url"),Y=sQ({bridgeToken:X.bridgeToken,cspNonce:K,frontendOrigin:X.frontendOrigin,sessionId:X.id}),J=Buffer.from(Y),H=["default-src 'none'","img-src 'self'",`style-src 'nonce-${K}'`,`script-src 'nonce-${K}'`,"connect-src 'self'","base-uri 'none'","form-action 'none'",`frame-ancestors ${X.frontendOrigin}`].join("; ");Z.writeHead(200,{"access-control-allow-origin":X.frontendOrigin,"cache-control":"no-store","content-length":String(J.byteLength),"content-security-policy":H,"content-type":"text/html; charset=utf-8","cross-origin-resource-policy":"cross-origin","referrer-policy":"no-referrer","x-content-type-options":"nosniff"}),Z.end(Q?void 0:J)}sendFrameStream(Z,X,Q){if(Z.writeHead(200,{"cache-control":"no-store","content-type":`multipart/x-mixed-replace; boundary=${n3}`,"x-content-type-options":"nosniff"}),Q){Z.end();return}let K=!1,Y=X.remote.onFrame((J)=>{if(K||Z.destroyed)return;X.lastUsedAt=Date.now(),K=!Z.write(Buffer.concat([Buffer.from(`--${n3}\r
912
+ ${K instanceof Error?K.message:"Browser destination blocked"}`)}}async start(){if(this.server)return;let Z=k3.createServer((X,Q)=>{this.handleHttp(X,Q).catch((K)=>{if(Q.headersSent)Q.destroy(K);else Q.writeHead(500),Q.end()})});Z.on("connect",(X,Q,K)=>{this.handleConnect(X,Q,K).catch(()=>Q.destroy())}),Z.on("connection",(X)=>{this.sockets.add(X),X.on("error",()=>X.destroy()),X.once("close",()=>this.sockets.delete(X))}),this.port=await TZ(Z),this.server=Z}async close(){let Z=this.server;this.server=null,this.port=null;for(let X of this.sockets)X.destroy();if(this.sockets.clear(),!Z)return;await new Promise((X)=>Z.close(()=>X()))}}var i3=8,dZ={width:720,height:442},aZ=320,pZ=180,d3=2048,rZ=45000,sZ=12582912,a3=300;function p3(Z,X,Q){return Math.min(Q,Math.max(X,Math.round(Z)))}function oZ(){if(l3()==="darwin")return h0(q2(),"Library","Application Support","IdeaWave","browser");if(l3()==="win32")return h0(process.env.LOCALAPPDATA??h0(q2(),"AppData","Local"),"IdeaWave","browser");return h0(process.env.XDG_CONFIG_HOME??h0(q2(),".config"),"ideawave","browser")}function nZ(Z=oZ()){return{profile:h0(Z,"profile"),browsers:h0(Z,"engines")}}async function tZ(Z){let Q=lZ(import.meta.url).resolve("playwright-core/package.json"),K=h0(iZ(Q),"cli.js");await new Promise((J,Y)=>{let j=uZ(process.execPath,[K,"install","chromium","--no-shell"],{stdio:"inherit",env:{...process.env,PLAYWRIGHT_BROWSERS_PATH:Z}});j.once("error",Y),j.once("exit",(U)=>{if(U===0)J();else Y(Error(`Chromium installation exited with code ${U??"unknown"}`))})})}function eZ(Z){return{headless:!0,viewport:dZ,acceptDownloads:!1,serviceWorkers:"allow",proxy:{server:Z.serverUrl,username:Z.username,password:Z.password},args:["--disable-quic","--disable-session-crashed-bubble","--hide-crash-restore-bubble","--no-first-run","--proxy-bypass-list=<-loopback>","--force-webrtc-ip-handling-policy=disable_non_proxied_udp"]}}async function x2(Z){let X=[...Z.values()].map((Q)=>Q.handle);Z.clear(),await Promise.all(X.map((Q)=>Q.dispose().catch(()=>{return})))}async function ZX(Z){let X=[],Q=Z;while(Q?.parentFrame()){let J=await(await Q.frameElement()).evaluate((Y)=>{if(Y.id)return`#${globalThis.CSS?.escape?globalThis.CSS.escape(Y.id):Y.id.replace(/[^a-zA-Z0-9_-]/g,(z)=>`\\${z}`)}`;let j=[],U=Y;while(U&&U!==U.ownerDocument.documentElement&&j.length<8){let B=U.localName||"*",z=U.parentElement;if(z){let q=[...z.children].filter((R)=>R.localName===U?.localName);if(q.length>1)B+=`:nth-of-type(${q.indexOf(U)+1})`}j.unshift(B),U=z}return j.join(" > ")});X.unshift(J||"iframe"),Q=Q.parentFrame()}return X}async function r3(Z){return Z.evaluate((X)=>{let Q=null;if(X.id)Q=`#${globalThis.CSS?.escape?globalThis.CSS.escape(X.id):X.id.replace(/[^a-zA-Z0-9_-]/g,(j)=>`\\${j}`)}`;else{let Y=[],j=X;while(j&&j!==j.ownerDocument.documentElement&&Y.length<8){let U=j.localName||"*",B=j.parentElement;if(B){let z=[...B.children].filter((q)=>q.localName===j?.localName);if(z.length>1)U+=`:nth-of-type(${z.indexOf(j)+1})`}Y.unshift(U),j=B}Q=Y.join(" > ")||null}let K=(X.innerText||X.textContent||"").replace(/\s+/g," ").trim().slice(0,500),J={tag:X.localName,text:K,selector:Q};if(X instanceof HTMLAnchorElement)J.href=X.href;if(X instanceof HTMLInputElement)J.inputType=X.type,J.value=X.type==="password"?"":X.value.slice(0,500);if(X instanceof HTMLButtonElement||X instanceof HTMLInputElement||X instanceof HTMLSelectElement||X instanceof HTMLTextAreaElement)J.disabled=X.disabled;return J})}class s3{page;onClose;revision=u3();refs=new Map;refCounter=0;eventListeners=new Set;frameListeners=new Set;cdp=null;stateTimer=null;closed=!1;constructor(Z,X){this.page=Z;this.onClose=X}async initialize(Z){this.page.setDefaultNavigationTimeout(rZ),this.page.setDefaultTimeout(12000),this.page.on("framenavigated",(X)=>{if(X!==this.page.mainFrame()||!/^https?:/.test(X.url()))return;this.revision=u3(),x2(this.refs),this.emitSoon()}),this.page.on("domcontentloaded",()=>this.emitSoon()),this.page.on("load",()=>this.emitSoon()),this.page.on("download",(X)=>void X.cancel()),this.page.on("popup",(X)=>{(async()=>{await X.waitForLoadState("domcontentloaded",{timeout:5000}).catch(()=>{return});let Q=X.url();if(await X.close().catch(()=>{return}),/^https?:/.test(Q))await this.navigate(Q)})().catch(()=>{return})}),this.cdp=await this.page.context().newCDPSession(this.page),this.cdp.on("Page.screencastFrame",(X)=>{let Q=Buffer.from(X.data,"base64");for(let K of this.frameListeners)K(Q);this.cdp?.send("Page.screencastFrameAck",{sessionId:X.sessionId})}),await this.cdp.send("Page.startScreencast",{format:"jpeg",quality:75,everyNthFrame:2}),await this.navigate(Z)}get currentRevision(){return this.revision}get currentUrl(){return this.page.url()}onEvent(Z){return this.eventListeners.add(Z),this.state().then((X)=>Z({event:"state",payload:X})).catch(()=>{return}),()=>this.eventListeners.delete(Z)}onFrame(Z){return this.frameListeners.add(Z),this.page.screenshot({type:"jpeg",quality:75}).then((X)=>Z(Buffer.from(X))).catch(()=>{return}),()=>this.frameListeners.delete(Z)}emit(Z){for(let X of this.eventListeners)X(Z)}emitSoon(){if(this.stateTimer||this.closed)return;this.stateTimer=setTimeout(()=>{this.stateTimer=null,this.state().then((Z)=>this.emit({event:"state",payload:Z})).catch(()=>{return})},50)}async metrics(){return this.page.evaluate(()=>{let{documentElement:Z,body:X}=document;return{scrollX:window.scrollX,scrollY:window.scrollY,viewportWidth:window.innerWidth,viewportHeight:window.innerHeight,documentWidth:Math.max(Z?.scrollWidth??0,X?.scrollWidth??0),documentHeight:Math.max(Z?.scrollHeight??0,X?.scrollHeight??0)}})}async state(){let Z=this.page.url(),[X,Q,K]=await Promise.all([this.page.title().catch(()=>Z),this.page.evaluate(()=>{return document.querySelector('link[rel~="icon"]')?.href||null}).catch(()=>null),this.metrics()]);return{sourceUrl:Z,title:X||Z,faviconUrl:Q,localFaviconUrl:null,revision:this.revision,metrics:K,frozen:!1}}async navigate(Z){let X=C0(Z).href;return this.emit({event:"navigating",payload:{sourceUrl:this.page.url(),revision:this.revision}}),await this.page.goto(X,{waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async refresh(){return this.emit({event:"navigating",payload:{sourceUrl:this.page.url(),revision:this.revision}}),await this.page.reload({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async goBack(){return await this.page.goBack({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async goForward(){return await this.page.goForward({waitUntil:"domcontentloaded"}),this.emitSoon(),{ok:!0}}async setViewport(Z,X){await this.page.setViewportSize({width:p3(Z,aZ,d3),height:p3(X,pZ,d3)}),this.emitSoon()}async input(Z){for(let X of Z)if(X.type==="pointer"){if(await this.page.mouse.move(X.x,X.y),X.phase==="down")await this.page.mouse.down({button:X.button??"left"});else if(X.phase==="up")await this.page.mouse.up({button:X.button??"left"})}else if(X.type==="wheel")await this.page.mouse.wheel(X.deltaX,X.deltaY);else if(X.type==="key")if(X.phase==="down")await this.page.keyboard.down(X.key);else await this.page.keyboard.up(X.key);else await this.page.keyboard.insertText(X.text);this.emitSoon()}async framesWithPaths(){let Z=this.page.frames().slice(0,24);return Promise.all(Z.map(async(X)=>({frame:X,path:await ZX(X)})))}refFor(Z,X){for(let[K,J]of this.refs)if(J.handle===Z)return K;let Q=`${this.revision}:e${++this.refCounter}`;return this.refs.set(Q,{handle:Z,framePath:X}),Q}async resolveTarget(Z){if("ref"in Z&&Z.ref){if(!Z.ref.startsWith(`${this.revision}:`))throw Error("STALE_BROWSER_REF: inspect the browser again");let J=this.refs.get(Z.ref);if(!J)throw Error("STALE_BROWSER_REF: inspect the browser again");return J}let X="framePath"in Z?Z.framePath??[]:[],Q=(await this.framesWithPaths()).find((J)=>JSON.stringify(J.path)===JSON.stringify(X));if(!Q)throw Error("Browser frame was not found");let K=null;if("selector"in Z&&Z.selector)K=await Q.frame.$(Z.selector);if(!K&&"textQuote"in Z&&Z.textQuote?.exact)K=await Q.frame.getByText(Z.textQuote.exact,{exact:!1}).first().elementHandle();if(!K)throw Error("Browser element was not found");return{handle:K,framePath:Q.path}}async locate(Z){let X=await this.resolveTarget(Z),Q=await X.handle.boundingBox();if(!Q)throw Error("STALE_BROWSER_REF: browser element is detached");let K=await X.handle.evaluate((Y)=>{let j=Y.getBoundingClientRect(),U=(Y.textContent??"").replace(/\s+/g," ").trim().slice(0,2000);return{rect:{x:j.x,y:j.y,width:j.width,height:j.height},scrollX:Y.ownerDocument.defaultView?.scrollX??0,scrollY:Y.ownerDocument.defaultView?.scrollY??0,text:U}}),J=await r3(X.handle);return{revision:this.revision,ref:this.refFor(X.handle,X.framePath),selector:J.selector,textQuote:K.text?{exact:K.text}:null,framePath:X.framePath,frame:K.rect,viewport:Q,document:{x:K.rect.x+K.scrollX,y:K.rect.y+K.scrollY,width:K.rect.width,height:K.rect.height}}}async click(Z){return await(await this.resolveTarget(Z)).handle.click(),this.emitSoon(),{ok:!0,revision:this.revision}}async highlight(Z,X){let Q=await this.resolveTarget(Z);return await Q.handle.evaluate((K,J)=>{let Y=K;Y.dataset.ideawaveBrowserHighlight="true",Y.style.outline=`3px solid ${J}`,Y.style.outlineOffset="2px"},X),this.locate({ref:this.refFor(Q.handle,Q.framePath)})}async scroll(Z){await this.page.evaluate((Q)=>{window.scrollTo({left:typeof Q.left==="number"?Q.left:window.scrollX,top:typeof Q.top==="number"?Q.top:window.scrollY+(Q.deltaY??0)})},Z);let X=await this.metrics();return this.emitSoon(),{ok:!0,metrics:X,revision:this.revision}}async find(Z,X=!1){let Q=!1;for(let K of this.page.frames().slice(0,24))if(Q=await K.evaluate(({value:J,backwards:Y})=>window.find(J,!1,Y,!0,!1,!0,!1),{value:Z.slice(0,500),backwards:X}).catch(()=>!1),Q)break;return{found:Q,query:Z,revision:this.revision}}async selection(){for(let{frame:Z,path:X}of await this.framesWithPaths()){let Q=await Z.evaluateHandle(()=>{let J=window.getSelection();if(!J||J.isCollapsed||!J.anchorNode)return null;return J.anchorNode.nodeType===Node.ELEMENT_NODE?J.anchorNode:J.anchorNode.parentElement}),K=Q.asElement();if(!K){await Q.dispose();continue}return this.locate({ref:this.refFor(K,X)})}throw Error("No page selection is available")}async inspect(){await this.page.waitForLoadState("domcontentloaded",{timeout:12000}).catch(()=>{return}),await x2(this.refs),this.refCounter=0;let Z=[],X=[],Q=[],K=[];for(let{frame:j,path:U}of await this.framesWithPaths()){let B=await j.locator("body").innerText({timeout:1500}).catch(()=>"");if(B.trim())K.push(B.replace(/\s+/g," ").trim());for(let[z,q,R]of[["h1,h2,h3,h4,h5,h6",Z,200],["a[href]",X,a3],["button,input,select,textarea,[role=button]",Q,a3]]){if(q.length>=R)continue;let h=(await j.$$(z)).slice(0,R-q.length);for(let O of h){let f=O;if(!await f.isVisible().catch(()=>!1)){await f.dispose();continue}let M=await r3(f);q.push({ref:this.refFor(f,U),...M,framePath:U})}}}let J=K.join(`
913
+ `),Y=await this.state();return{sourceUrl:Y.sourceUrl,title:Y.title,mode:"live",revision:this.revision,untrustedContent:!0,visibleText:J.slice(0,25000),truncated:J.length>25000,headings:Z,links:X,controls:Q,metrics:Y.metrics}}async snapshotHtml(){return this.page.evaluate(()=>{let Z=document.documentElement.cloneNode(!0),X=document.documentElement.querySelectorAll("*"),Q=Z.querySelectorAll("*");for(let K=0;K<X.length;K+=1){let J=X[K],Y=Q[K];if(!J||!Y)continue;if(J instanceof HTMLInputElement&&Y instanceof HTMLInputElement){if(J.type==="password")Y.removeAttribute("value");else Y.setAttribute("value",J.value);if(J.checked)Y.setAttribute("checked","");else Y.removeAttribute("checked")}else if(J instanceof HTMLTextAreaElement&&Y instanceof HTMLTextAreaElement)Y.textContent=J.value;else if(J instanceof HTMLOptionElement&&Y instanceof HTMLOptionElement)if(J.selected)Y.setAttribute("selected","");else Y.removeAttribute("selected");else if(J instanceof HTMLImageElement&&Y instanceof HTMLImageElement&&J.currentSrc)Y.setAttribute("src",J.currentSrc),Y.removeAttribute("srcset")}return`<!doctype html>${Z.outerHTML}`})}async fetchResource(Z,X=sZ){let Q=C0(Z).href,K=await this.page.context().request.get(Q,{failOnStatusCode:!1,maxRedirects:5,timeout:30000}),J=Number(K.headers()["content-length"]??0);if(Number.isFinite(J)&&J>X)throw Error("Browser proxy response exceeds the size limit");let Y=Buffer.from(await K.body());if(Y.byteLength>X)throw Error("Browser proxy response exceeds the size limit");return{url:K.url(),status:K.status(),headers:K.headers(),body:Y}}async command(Z){switch(Z.type){case"inspect":return this.inspect();case"locate":return this.locate(Z.target);case"click":return this.click(Z.target);case"scroll":return this.scroll({deltaY:typeof Z.deltaY==="number"?Z.deltaY:void 0,left:typeof Z.left==="number"?Z.left:void 0,top:typeof Z.top==="number"?Z.top:void 0});case"find":return this.find(String(Z.query??""),Z.direction==="backward");case"refresh":return this.refresh();case"navigate":return this.navigate(String(Z.url??""));case"back":return this.goBack();case"forward":return this.goForward();case"highlight":return this.highlight(Z.target,String(Z.color??"#FDE047"));case"selection":return this.selection();case"snapshot":return{sourceUrl:this.page.url(),title:await this.page.title(),revision:this.revision};default:throw Error("Unsupported browser command")}}async close(){if(this.closed)return;if(this.closed=!0,this.stateTimer)clearTimeout(this.stateTimer);this.stateTimer=null,await x2(this.refs),await this.cdp?.send("Page.stopScreencast").catch(()=>{return}),await this.cdp?.detach().catch(()=>{return}),await this.page.close({runBeforeUnload:!1}).catch(()=>{return}),this.eventListeners.clear(),this.frameListeners.clear(),this.onClose()}}class V1{onStatus;networkProxy;context=null;startPromise=null;pages=new Set;status={phase:"idle"};constructor(Z,X){this.onStatus=Z;this.networkProxy=X??new L2}setStatus(Z){this.status=Z,this.onStatus?.(Z)}getStatus(){return this.status}async startContext(){this.setStatus({phase:"starting",message:"Starting local Chrome…"});let Z=nZ();await Promise.all([c3(Z.profile,{recursive:!0}),c3(Z.browsers,{recursive:!0}),this.networkProxy.start()]),process.env.PLAYWRIGHT_BROWSERS_PATH=Z.browsers;let{chromium:X}=await import("playwright-core"),Q=eZ(this.networkProxy),K=null;if(await cZ(X.executablePath()).then(()=>!0,()=>!1))try{K=await X.launchPersistentContext(Z.profile,{...Q,channel:"chromium"})}catch{K=null}if(!K)try{K=await X.launchPersistentContext(Z.profile,{...Q,channel:"chrome"})}catch{K=null}if(!K)this.setStatus({phase:"downloading",message:"Downloading the IdeaWave Chromium engine…"}),await tZ(Z.browsers),K=await X.launchPersistentContext(Z.profile,{...Q,channel:"chromium"});await K.route("**/*",async(U)=>{let B=U.request().url();try{let z=new URL(B);if(z.protocol==="http:"||z.protocol==="https:")C0(B);else if(z.protocol!=="data:"&&z.protocol!=="blob:"){await U.abort("blockedbyclient");return}await U.continue()}catch{await U.abort("blockedbyclient")}});let Y=K.pages();await Promise.all(Y.slice(1).map((U)=>U.close({runBeforeUnload:!1}).catch(()=>{return})));let j=Y[0];if(j&&j.url()!=="about:blank")await j.goto("about:blank").catch(()=>{return});return this.context=K,this.setStatus({phase:"ready"}),K}ensureContext(){if(this.context)return Promise.resolve(this.context);if(this.startPromise)return this.startPromise;return this.startPromise=this.startContext().catch((Z)=>{throw this.setStatus({phase:"failed",message:Z instanceof Error?Z.message:String(Z)}),this.startPromise=null,Z}),this.startPromise}async createPage(Z){if(this.pages.size>=i3)throw Error(`IdeaWave supports at most ${i3} simultaneous live browser cards`);let X=await this.ensureContext(),Q=X.pages().find((J)=>J.url()==="about:blank"&&![...this.pages].some((Y)=>Y.page===J));Q??=await X.newPage();let K=new s3(Q,()=>this.pages.delete(K));this.pages.add(K);try{return await K.initialize(Z),K}catch(J){throw await K.close(),J}}async close(){let Z=[...this.pages];this.pages.clear(),await Promise.all(Z.map((Q)=>Q.close()));let X=this.context;this.context=null,this.startPromise=null,await X?.close().catch(()=>{return}),await this.networkProxy.close(),this.setStatus({phase:"idle"})}}import{randomBytes as S2,randomUUID as EQ}from"node:crypto";import*as B4 from"css-tree";var XX=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),u="�",V;(function(Z){Z[Z.EOF=-1]="EOF",Z[Z.NULL=0]="NULL",Z[Z.TABULATION=9]="TABULATION",Z[Z.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",Z[Z.LINE_FEED=10]="LINE_FEED",Z[Z.FORM_FEED=12]="FORM_FEED",Z[Z.SPACE=32]="SPACE",Z[Z.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",Z[Z.QUOTATION_MARK=34]="QUOTATION_MARK",Z[Z.AMPERSAND=38]="AMPERSAND",Z[Z.APOSTROPHE=39]="APOSTROPHE",Z[Z.HYPHEN_MINUS=45]="HYPHEN_MINUS",Z[Z.SOLIDUS=47]="SOLIDUS",Z[Z.DIGIT_0=48]="DIGIT_0",Z[Z.DIGIT_9=57]="DIGIT_9",Z[Z.SEMICOLON=59]="SEMICOLON",Z[Z.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",Z[Z.EQUALS_SIGN=61]="EQUALS_SIGN",Z[Z.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",Z[Z.QUESTION_MARK=63]="QUESTION_MARK",Z[Z.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",Z[Z.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",Z[Z.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",Z[Z.GRAVE_ACCENT=96]="GRAVE_ACCENT",Z[Z.LATIN_SMALL_A=97]="LATIN_SMALL_A",Z[Z.LATIN_SMALL_Z=122]="LATIN_SMALL_Z"})(V||(V={}));var e={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function t1(Z){return Z>=55296&&Z<=57343}function o3(Z){return Z>=56320&&Z<=57343}function n3(Z,X){return(Z-55296)*1024+9216+X}function e1(Z){return Z!==32&&Z!==10&&Z!==13&&Z!==9&&Z!==12&&Z>=1&&Z<=31||Z>=127&&Z<=159}function Z4(Z){return Z>=64976&&Z<=65007||XX.has(Z)}var L;(function(Z){Z.controlCharacterInInputStream="control-character-in-input-stream",Z.noncharacterInInputStream="noncharacter-in-input-stream",Z.surrogateInInputStream="surrogate-in-input-stream",Z.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",Z.endTagWithAttributes="end-tag-with-attributes",Z.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",Z.unexpectedSolidusInTag="unexpected-solidus-in-tag",Z.unexpectedNullCharacter="unexpected-null-character",Z.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",Z.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",Z.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",Z.missingEndTagName="missing-end-tag-name",Z.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",Z.unknownNamedCharacterReference="unknown-named-character-reference",Z.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",Z.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",Z.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",Z.eofBeforeTagName="eof-before-tag-name",Z.eofInTag="eof-in-tag",Z.missingAttributeValue="missing-attribute-value",Z.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",Z.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",Z.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",Z.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",Z.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",Z.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",Z.missingDoctypePublicIdentifier="missing-doctype-public-identifier",Z.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",Z.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",Z.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",Z.cdataInHtmlContent="cdata-in-html-content",Z.incorrectlyOpenedComment="incorrectly-opened-comment",Z.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",Z.eofInDoctype="eof-in-doctype",Z.nestedComment="nested-comment",Z.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",Z.eofInComment="eof-in-comment",Z.incorrectlyClosedComment="incorrectly-closed-comment",Z.eofInCdata="eof-in-cdata",Z.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",Z.nullCharacterReference="null-character-reference",Z.surrogateCharacterReference="surrogate-character-reference",Z.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",Z.controlCharacterReference="control-character-reference",Z.noncharacterCharacterReference="noncharacter-character-reference",Z.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",Z.missingDoctypeName="missing-doctype-name",Z.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",Z.duplicateAttribute="duplicate-attribute",Z.nonConformingDoctype="non-conforming-doctype",Z.missingDoctype="missing-doctype",Z.misplacedDoctype="misplaced-doctype",Z.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",Z.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",Z.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",Z.openElementsLeftAfterEof="open-elements-left-after-eof",Z.abandonedHeadElementChild="abandoned-head-element-child",Z.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",Z.nestedNoscriptInHead="nested-noscript-in-head",Z.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(L||(L={}));var KX=65536;class P2{constructor(Z){this.handler=Z,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=KX,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+Number(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(Z,X){let{line:Q,col:K,offset:J}=this,Y=K+X,j=J+X;return{code:Z,startLine:Q,endLine:Q,startCol:Y,endCol:Y,startOffset:j,endOffset:j}}_err(Z){if(this.handler.onParseError&&this.lastErrOffset!==this.offset)this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(Z,0))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(Z){if(this.pos!==this.html.length-1){let X=this.html.charCodeAt(this.pos+1);if(o3(X))return this.pos++,this._addGap(),n3(Z,X)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,V.EOF;return this._err(L.surrogateInInputStream),Z}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){if(this.willDropParsedChunk())this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0}write(Z,X){if(this.html.length>0)this.html+=Z;else this.html=Z;this.endOfChunkHit=!1,this.lastChunkWritten=X}insertHtmlAtCurrentPos(Z){this.html=this.html.substring(0,this.pos+1)+Z+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(Z,X){if(this.pos+Z.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(X)return this.html.startsWith(Z,this.pos);for(let Q=0;Q<Z.length;Q++)if((this.html.charCodeAt(this.pos+Q)|32)!==Z.charCodeAt(Q))return!1;return!0}peek(Z){let X=this.pos+Z;if(X>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,V.EOF;let Q=this.html.charCodeAt(X);return Q===V.CARRIAGE_RETURN?V.LINE_FEED:Q}advance(){if(this.pos++,this.isEol)this.isEol=!1,this.line++,this.lineStartPos=this.pos;if(this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,V.EOF;let Z=this.html.charCodeAt(this.pos);if(Z===V.CARRIAGE_RETURN)return this.isEol=!0,this.skipNextNewLine=!0,V.LINE_FEED;if(Z===V.LINE_FEED){if(this.isEol=!0,this.skipNextNewLine)return this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()}if(this.skipNextNewLine=!1,t1(Z))Z=this._processSurrogate(Z);if(!(this.handler.onParseError===null||Z>31&&Z<127||Z===V.LINE_FEED||Z===V.CARRIAGE_RETURN||Z>159&&Z<64976))this._checkForProblematicCharacters(Z);return Z}_checkForProblematicCharacters(Z){if(e1(Z))this._err(L.controlCharacterInInputStream);else if(Z4(Z))this._err(L.noncharacterInInputStream)}retreat(Z){this.pos-=Z;while(this.pos<this.lastGapPos)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=!1}}var S;(function(Z){Z[Z.CHARACTER=0]="CHARACTER",Z[Z.NULL_CHARACTER=1]="NULL_CHARACTER",Z[Z.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",Z[Z.START_TAG=3]="START_TAG",Z[Z.END_TAG=4]="END_TAG",Z[Z.COMMENT=5]="COMMENT",Z[Z.DOCTYPE=6]="DOCTYPE",Z[Z.EOF=7]="EOF",Z[Z.HIBERNATION=8]="HIBERNATION"})(S||(S={}));function X4(Z,X){for(let Q=Z.attrs.length-1;Q>=0;Q--)if(Z.attrs[Q].name===X)return Z.attrs[Q].value;return null}var JX=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function t3(Z){if(Z>=55296&&Z<=57343||Z>1114111)return 65533;return JX.get(Z)??Z}function e3(Z){let X=atob(Z),Q=X.length&-2,K=new Uint16Array(Q/2);for(let J=0,Y=0;J<Q;J+=2){let j=X.charCodeAt(J),U=X.charCodeAt(J+1);K[Y++]=j|U<<8}return K}var f2=e3("QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg");var o;(function(Z){Z[Z.VALUE_LENGTH=49152]="VALUE_LENGTH",Z[Z.FLAG13=8192]="FLAG13",Z[Z.BRANCH_LENGTH=8064]="BRANCH_LENGTH",Z[Z.JUMP_TABLE=127]="JUMP_TABLE"})(o||(o={}));var i;(function(Z){Z[Z.NUM=35]="NUM",Z[Z.SEMI=59]="SEMI",Z[Z.EQUALS=61]="EQUALS",Z[Z.ZERO=48]="ZERO",Z[Z.NINE=57]="NINE",Z[Z.LOWER_A=97]="LOWER_A",Z[Z.LOWER_F=102]="LOWER_F",Z[Z.LOWER_X=120]="LOWER_X",Z[Z.LOWER_Z=122]="LOWER_Z",Z[Z.UPPER_A=65]="UPPER_A",Z[Z.UPPER_F=70]="UPPER_F",Z[Z.UPPER_Z=90]="UPPER_Z"})(i||(i={}));var Z8=32;function y2(Z){return Z>=i.ZERO&&Z<=i.NINE}function YX(Z){return Z>=i.UPPER_A&&Z<=i.UPPER_F||Z>=i.LOWER_A&&Z<=i.LOWER_F}function VX(Z){return Z>=i.UPPER_A&&Z<=i.UPPER_Z||Z>=i.LOWER_A&&Z<=i.LOWER_Z||y2(Z)}function jX(Z){return Z===i.EQUALS||VX(Z)}var r;(function(Z){Z[Z.EntityStart=0]="EntityStart",Z[Z.NumericStart=1]="NumericStart",Z[Z.NumericDecimal=2]="NumericDecimal",Z[Z.NumericHex=3]="NumericHex",Z[Z.NamedEntity=4]="NamedEntity"})(r||(r={}));var B0;(function(Z){Z[Z.Legacy=0]="Legacy",Z[Z.Strict=1]="Strict",Z[Z.Attribute=2]="Attribute"})(B0||(B0={}));class O2{decodeTree;emitCodePoint;errors;constructor(Z,X,Q){this.decodeTree=Z,this.emitCodePoint=X,this.errors=Q}state=r.EntityStart;consumed=1;result=0;treeIndex=0;excess=1;decodeMode=B0.Strict;runConsumed=0;startEntity(Z){this.decodeMode=Z,this.state=r.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1,this.runConsumed=0}write(Z,X){switch(this.state){case r.EntityStart:{if(Z.charCodeAt(X)===i.NUM)return this.state=r.NumericStart,this.consumed+=1,this.stateNumericStart(Z,X+1);return this.state=r.NamedEntity,this.stateNamedEntity(Z,X)}case r.NumericStart:return this.stateNumericStart(Z,X);case r.NumericDecimal:return this.stateNumericDecimal(Z,X);case r.NumericHex:return this.stateNumericHex(Z,X);case r.NamedEntity:return this.stateNamedEntity(Z,X)}}stateNumericStart(Z,X){if(X>=Z.length)return-1;if((Z.charCodeAt(X)|Z8)===i.LOWER_X)return this.state=r.NumericHex,this.consumed+=1,this.stateNumericHex(Z,X+1);return this.state=r.NumericDecimal,this.stateNumericDecimal(Z,X)}stateNumericHex(Z,X){while(X<Z.length){let Q=Z.charCodeAt(X);if(y2(Q)||YX(Q)){let K=Q<=i.NINE?Q-i.ZERO:(Q|Z8)-i.LOWER_A+10;this.result=this.result*16+K,this.consumed++,X++}else return this.emitNumericEntity(Q,3)}return-1}stateNumericDecimal(Z,X){while(X<Z.length){let Q=Z.charCodeAt(X);if(y2(Q))this.result=this.result*10+(Q-i.ZERO),this.consumed++,X++;else return this.emitNumericEntity(Q,2)}return-1}emitNumericEntity(Z,X){if(this.consumed<=X)return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(Z===i.SEMI)this.consumed+=1;else if(this.decodeMode===B0.Strict)return 0;if(this.emitCodePoint(t3(this.result),this.consumed),this.errors){if(Z!==i.SEMI)this.errors.missingSemicolonAfterCharacterReference();this.errors.validateNumericCharacterReference(this.result)}return this.consumed}stateNamedEntity(Z,X){let{decodeTree:Q}=this,K=Q[this.treeIndex],J=(K&o.VALUE_LENGTH)>>14;while(X<Z.length){if(J===0&&(K&o.FLAG13)!==0){let j=(K&o.BRANCH_LENGTH)>>7;if(this.runConsumed===0){let U=K&o.JUMP_TABLE;if(Z.charCodeAt(X)!==U)return this.result===0?0:this.emitNotTerminatedNamedEntity();X++,this.excess++,this.runConsumed++}while(this.runConsumed<j){if(X>=Z.length)return-1;let U=this.runConsumed-1,B=Q[this.treeIndex+1+(U>>1)],z=U%2===0?B&255:B>>8&255;if(Z.charCodeAt(X)!==z)return this.runConsumed=0,this.result===0?0:this.emitNotTerminatedNamedEntity();X++,this.excess++,this.runConsumed++}this.runConsumed=0,this.treeIndex+=1+(j>>1),K=Q[this.treeIndex],J=(K&o.VALUE_LENGTH)>>14}if(X>=Z.length)break;let Y=Z.charCodeAt(X);if(Y===i.SEMI&&J!==0&&(K&o.FLAG13)!==0)return this.emitNamedEntityData(this.treeIndex,J,this.consumed+this.excess);if(this.treeIndex=HX(Q,K,this.treeIndex+Math.max(1,J),Y),this.treeIndex<0)return this.result===0||this.decodeMode===B0.Attribute&&(J===0||jX(Y))?0:this.emitNotTerminatedNamedEntity();if(K=Q[this.treeIndex],J=(K&o.VALUE_LENGTH)>>14,J!==0){if(Y===i.SEMI)return this.emitNamedEntityData(this.treeIndex,J,this.consumed+this.excess);if(this.decodeMode!==B0.Strict&&(K&o.FLAG13)===0)this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0}X++,this.excess++}return-1}emitNotTerminatedNamedEntity(){let{result:Z,decodeTree:X}=this,Q=(X[Z]&o.VALUE_LENGTH)>>14;return this.emitNamedEntityData(Z,Q,this.consumed),this.errors?.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(Z,X,Q){let{decodeTree:K}=this;if(this.emitCodePoint(X===1?K[Z]&~(o.VALUE_LENGTH|o.FLAG13):K[Z+1],Q),X===3)this.emitCodePoint(K[Z+2],Q);return Q}end(){switch(this.state){case r.NamedEntity:return this.result!==0&&(this.decodeMode!==B0.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case r.NumericDecimal:return this.emitNumericEntity(0,2);case r.NumericHex:return this.emitNumericEntity(0,3);case r.NumericStart:return this.errors?.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case r.EntityStart:return 0}}}function HX(Z,X,Q,K){let J=(X&o.BRANCH_LENGTH)>>7,Y=X&o.JUMP_TABLE;if(J===0)return Y!==0&&K===Y?Q:-1;if(Y){let z=K-Y;return z<0||z>=J?-1:Z[Q+z]-1}let j=J+1>>1,U=0,B=J-1;while(U<=B){let z=U+B>>>1,q=z>>1,h=Z[Q+q]>>(z&1)*8&255;if(h<K)U=z+1;else if(h>K)B=z-1;else return Z[Q+j+z]}return-1}var P;(function(Z){Z.HTML="http://www.w3.org/1999/xhtml",Z.MATHML="http://www.w3.org/1998/Math/MathML",Z.SVG="http://www.w3.org/2000/svg",Z.XLINK="http://www.w3.org/1999/xlink",Z.XML="http://www.w3.org/XML/1998/namespace",Z.XMLNS="http://www.w3.org/2000/xmlns/"})(P||(P={}));var P0;(function(Z){Z.TYPE="type",Z.ACTION="action",Z.ENCODING="encoding",Z.PROMPT="prompt",Z.NAME="name",Z.COLOR="color",Z.FACE="face",Z.SIZE="size"})(P0||(P0={}));var Z0;(function(Z){Z.NO_QUIRKS="no-quirks",Z.QUIRKS="quirks",Z.LIMITED_QUIRKS="limited-quirks"})(Z0||(Z0={}));var F;(function(Z){Z.A="a",Z.ADDRESS="address",Z.ANNOTATION_XML="annotation-xml",Z.APPLET="applet",Z.AREA="area",Z.ARTICLE="article",Z.ASIDE="aside",Z.B="b",Z.BASE="base",Z.BASEFONT="basefont",Z.BGSOUND="bgsound",Z.BIG="big",Z.BLOCKQUOTE="blockquote",Z.BODY="body",Z.BR="br",Z.BUTTON="button",Z.CAPTION="caption",Z.CENTER="center",Z.CODE="code",Z.COL="col",Z.COLGROUP="colgroup",Z.DD="dd",Z.DESC="desc",Z.DETAILS="details",Z.DIALOG="dialog",Z.DIR="dir",Z.DIV="div",Z.DL="dl",Z.DT="dt",Z.EM="em",Z.EMBED="embed",Z.FIELDSET="fieldset",Z.FIGCAPTION="figcaption",Z.FIGURE="figure",Z.FONT="font",Z.FOOTER="footer",Z.FOREIGN_OBJECT="foreignObject",Z.FORM="form",Z.FRAME="frame",Z.FRAMESET="frameset",Z.H1="h1",Z.H2="h2",Z.H3="h3",Z.H4="h4",Z.H5="h5",Z.H6="h6",Z.HEAD="head",Z.HEADER="header",Z.HGROUP="hgroup",Z.HR="hr",Z.HTML="html",Z.I="i",Z.IMG="img",Z.IMAGE="image",Z.INPUT="input",Z.IFRAME="iframe",Z.KEYGEN="keygen",Z.LABEL="label",Z.LI="li",Z.LINK="link",Z.LISTING="listing",Z.MAIN="main",Z.MALIGNMARK="malignmark",Z.MARQUEE="marquee",Z.MATH="math",Z.MENU="menu",Z.META="meta",Z.MGLYPH="mglyph",Z.MI="mi",Z.MO="mo",Z.MN="mn",Z.MS="ms",Z.MTEXT="mtext",Z.NAV="nav",Z.NOBR="nobr",Z.NOFRAMES="noframes",Z.NOEMBED="noembed",Z.NOSCRIPT="noscript",Z.OBJECT="object",Z.OL="ol",Z.OPTGROUP="optgroup",Z.OPTION="option",Z.P="p",Z.PARAM="param",Z.PLAINTEXT="plaintext",Z.PRE="pre",Z.RB="rb",Z.RP="rp",Z.RT="rt",Z.RTC="rtc",Z.RUBY="ruby",Z.S="s",Z.SCRIPT="script",Z.SEARCH="search",Z.SECTION="section",Z.SELECT="select",Z.SOURCE="source",Z.SMALL="small",Z.SPAN="span",Z.STRIKE="strike",Z.STRONG="strong",Z.STYLE="style",Z.SUB="sub",Z.SUMMARY="summary",Z.SUP="sup",Z.TABLE="table",Z.TBODY="tbody",Z.TEMPLATE="template",Z.TEXTAREA="textarea",Z.TFOOT="tfoot",Z.TD="td",Z.TH="th",Z.THEAD="thead",Z.TITLE="title",Z.TR="tr",Z.TRACK="track",Z.TT="tt",Z.U="u",Z.UL="ul",Z.SVG="svg",Z.VAR="var",Z.WBR="wbr",Z.XMP="xmp"})(F||(F={}));var W;(function(Z){Z[Z.UNKNOWN=0]="UNKNOWN",Z[Z.A=1]="A",Z[Z.ADDRESS=2]="ADDRESS",Z[Z.ANNOTATION_XML=3]="ANNOTATION_XML",Z[Z.APPLET=4]="APPLET",Z[Z.AREA=5]="AREA",Z[Z.ARTICLE=6]="ARTICLE",Z[Z.ASIDE=7]="ASIDE",Z[Z.B=8]="B",Z[Z.BASE=9]="BASE",Z[Z.BASEFONT=10]="BASEFONT",Z[Z.BGSOUND=11]="BGSOUND",Z[Z.BIG=12]="BIG",Z[Z.BLOCKQUOTE=13]="BLOCKQUOTE",Z[Z.BODY=14]="BODY",Z[Z.BR=15]="BR",Z[Z.BUTTON=16]="BUTTON",Z[Z.CAPTION=17]="CAPTION",Z[Z.CENTER=18]="CENTER",Z[Z.CODE=19]="CODE",Z[Z.COL=20]="COL",Z[Z.COLGROUP=21]="COLGROUP",Z[Z.DD=22]="DD",Z[Z.DESC=23]="DESC",Z[Z.DETAILS=24]="DETAILS",Z[Z.DIALOG=25]="DIALOG",Z[Z.DIR=26]="DIR",Z[Z.DIV=27]="DIV",Z[Z.DL=28]="DL",Z[Z.DT=29]="DT",Z[Z.EM=30]="EM",Z[Z.EMBED=31]="EMBED",Z[Z.FIELDSET=32]="FIELDSET",Z[Z.FIGCAPTION=33]="FIGCAPTION",Z[Z.FIGURE=34]="FIGURE",Z[Z.FONT=35]="FONT",Z[Z.FOOTER=36]="FOOTER",Z[Z.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",Z[Z.FORM=38]="FORM",Z[Z.FRAME=39]="FRAME",Z[Z.FRAMESET=40]="FRAMESET",Z[Z.H1=41]="H1",Z[Z.H2=42]="H2",Z[Z.H3=43]="H3",Z[Z.H4=44]="H4",Z[Z.H5=45]="H5",Z[Z.H6=46]="H6",Z[Z.HEAD=47]="HEAD",Z[Z.HEADER=48]="HEADER",Z[Z.HGROUP=49]="HGROUP",Z[Z.HR=50]="HR",Z[Z.HTML=51]="HTML",Z[Z.I=52]="I",Z[Z.IMG=53]="IMG",Z[Z.IMAGE=54]="IMAGE",Z[Z.INPUT=55]="INPUT",Z[Z.IFRAME=56]="IFRAME",Z[Z.KEYGEN=57]="KEYGEN",Z[Z.LABEL=58]="LABEL",Z[Z.LI=59]="LI",Z[Z.LINK=60]="LINK",Z[Z.LISTING=61]="LISTING",Z[Z.MAIN=62]="MAIN",Z[Z.MALIGNMARK=63]="MALIGNMARK",Z[Z.MARQUEE=64]="MARQUEE",Z[Z.MATH=65]="MATH",Z[Z.MENU=66]="MENU",Z[Z.META=67]="META",Z[Z.MGLYPH=68]="MGLYPH",Z[Z.MI=69]="MI",Z[Z.MO=70]="MO",Z[Z.MN=71]="MN",Z[Z.MS=72]="MS",Z[Z.MTEXT=73]="MTEXT",Z[Z.NAV=74]="NAV",Z[Z.NOBR=75]="NOBR",Z[Z.NOFRAMES=76]="NOFRAMES",Z[Z.NOEMBED=77]="NOEMBED",Z[Z.NOSCRIPT=78]="NOSCRIPT",Z[Z.OBJECT=79]="OBJECT",Z[Z.OL=80]="OL",Z[Z.OPTGROUP=81]="OPTGROUP",Z[Z.OPTION=82]="OPTION",Z[Z.P=83]="P",Z[Z.PARAM=84]="PARAM",Z[Z.PLAINTEXT=85]="PLAINTEXT",Z[Z.PRE=86]="PRE",Z[Z.RB=87]="RB",Z[Z.RP=88]="RP",Z[Z.RT=89]="RT",Z[Z.RTC=90]="RTC",Z[Z.RUBY=91]="RUBY",Z[Z.S=92]="S",Z[Z.SCRIPT=93]="SCRIPT",Z[Z.SEARCH=94]="SEARCH",Z[Z.SECTION=95]="SECTION",Z[Z.SELECT=96]="SELECT",Z[Z.SOURCE=97]="SOURCE",Z[Z.SMALL=98]="SMALL",Z[Z.SPAN=99]="SPAN",Z[Z.STRIKE=100]="STRIKE",Z[Z.STRONG=101]="STRONG",Z[Z.STYLE=102]="STYLE",Z[Z.SUB=103]="SUB",Z[Z.SUMMARY=104]="SUMMARY",Z[Z.SUP=105]="SUP",Z[Z.TABLE=106]="TABLE",Z[Z.TBODY=107]="TBODY",Z[Z.TEMPLATE=108]="TEMPLATE",Z[Z.TEXTAREA=109]="TEXTAREA",Z[Z.TFOOT=110]="TFOOT",Z[Z.TD=111]="TD",Z[Z.TH=112]="TH",Z[Z.THEAD=113]="THEAD",Z[Z.TITLE=114]="TITLE",Z[Z.TR=115]="TR",Z[Z.TRACK=116]="TRACK",Z[Z.TT=117]="TT",Z[Z.U=118]="U",Z[Z.UL=119]="UL",Z[Z.SVG=120]="SVG",Z[Z.VAR=121]="VAR",Z[Z.WBR=122]="WBR",Z[Z.XMP=123]="XMP"})(W||(W={}));var wX=new Map([[F.A,W.A],[F.ADDRESS,W.ADDRESS],[F.ANNOTATION_XML,W.ANNOTATION_XML],[F.APPLET,W.APPLET],[F.AREA,W.AREA],[F.ARTICLE,W.ARTICLE],[F.ASIDE,W.ASIDE],[F.B,W.B],[F.BASE,W.BASE],[F.BASEFONT,W.BASEFONT],[F.BGSOUND,W.BGSOUND],[F.BIG,W.BIG],[F.BLOCKQUOTE,W.BLOCKQUOTE],[F.BODY,W.BODY],[F.BR,W.BR],[F.BUTTON,W.BUTTON],[F.CAPTION,W.CAPTION],[F.CENTER,W.CENTER],[F.CODE,W.CODE],[F.COL,W.COL],[F.COLGROUP,W.COLGROUP],[F.DD,W.DD],[F.DESC,W.DESC],[F.DETAILS,W.DETAILS],[F.DIALOG,W.DIALOG],[F.DIR,W.DIR],[F.DIV,W.DIV],[F.DL,W.DL],[F.DT,W.DT],[F.EM,W.EM],[F.EMBED,W.EMBED],[F.FIELDSET,W.FIELDSET],[F.FIGCAPTION,W.FIGCAPTION],[F.FIGURE,W.FIGURE],[F.FONT,W.FONT],[F.FOOTER,W.FOOTER],[F.FOREIGN_OBJECT,W.FOREIGN_OBJECT],[F.FORM,W.FORM],[F.FRAME,W.FRAME],[F.FRAMESET,W.FRAMESET],[F.H1,W.H1],[F.H2,W.H2],[F.H3,W.H3],[F.H4,W.H4],[F.H5,W.H5],[F.H6,W.H6],[F.HEAD,W.HEAD],[F.HEADER,W.HEADER],[F.HGROUP,W.HGROUP],[F.HR,W.HR],[F.HTML,W.HTML],[F.I,W.I],[F.IMG,W.IMG],[F.IMAGE,W.IMAGE],[F.INPUT,W.INPUT],[F.IFRAME,W.IFRAME],[F.KEYGEN,W.KEYGEN],[F.LABEL,W.LABEL],[F.LI,W.LI],[F.LINK,W.LINK],[F.LISTING,W.LISTING],[F.MAIN,W.MAIN],[F.MALIGNMARK,W.MALIGNMARK],[F.MARQUEE,W.MARQUEE],[F.MATH,W.MATH],[F.MENU,W.MENU],[F.META,W.META],[F.MGLYPH,W.MGLYPH],[F.MI,W.MI],[F.MO,W.MO],[F.MN,W.MN],[F.MS,W.MS],[F.MTEXT,W.MTEXT],[F.NAV,W.NAV],[F.NOBR,W.NOBR],[F.NOFRAMES,W.NOFRAMES],[F.NOEMBED,W.NOEMBED],[F.NOSCRIPT,W.NOSCRIPT],[F.OBJECT,W.OBJECT],[F.OL,W.OL],[F.OPTGROUP,W.OPTGROUP],[F.OPTION,W.OPTION],[F.P,W.P],[F.PARAM,W.PARAM],[F.PLAINTEXT,W.PLAINTEXT],[F.PRE,W.PRE],[F.RB,W.RB],[F.RP,W.RP],[F.RT,W.RT],[F.RTC,W.RTC],[F.RUBY,W.RUBY],[F.S,W.S],[F.SCRIPT,W.SCRIPT],[F.SEARCH,W.SEARCH],[F.SECTION,W.SECTION],[F.SELECT,W.SELECT],[F.SOURCE,W.SOURCE],[F.SMALL,W.SMALL],[F.SPAN,W.SPAN],[F.STRIKE,W.STRIKE],[F.STRONG,W.STRONG],[F.STYLE,W.STYLE],[F.SUB,W.SUB],[F.SUMMARY,W.SUMMARY],[F.SUP,W.SUP],[F.TABLE,W.TABLE],[F.TBODY,W.TBODY],[F.TEMPLATE,W.TEMPLATE],[F.TEXTAREA,W.TEXTAREA],[F.TFOOT,W.TFOOT],[F.TD,W.TD],[F.TH,W.TH],[F.THEAD,W.THEAD],[F.TITLE,W.TITLE],[F.TR,W.TR],[F.TRACK,W.TRACK],[F.TT,W.TT],[F.U,W.U],[F.UL,W.UL],[F.SVG,W.SVG],[F.VAR,W.VAR],[F.WBR,W.WBR],[F.XMP,W.XMP]]);function S0(Z){var X;return(X=wX.get(Z))!==null&&X!==void 0?X:W.UNKNOWN}var y=W,X8={[P.HTML]:new Set([y.ADDRESS,y.APPLET,y.AREA,y.ARTICLE,y.ASIDE,y.BASE,y.BASEFONT,y.BGSOUND,y.BLOCKQUOTE,y.BODY,y.BR,y.BUTTON,y.CAPTION,y.CENTER,y.COL,y.COLGROUP,y.DD,y.DETAILS,y.DIR,y.DIV,y.DL,y.DT,y.EMBED,y.FIELDSET,y.FIGCAPTION,y.FIGURE,y.FOOTER,y.FORM,y.FRAME,y.FRAMESET,y.H1,y.H2,y.H3,y.H4,y.H5,y.H6,y.HEAD,y.HEADER,y.HGROUP,y.HR,y.HTML,y.IFRAME,y.IMG,y.INPUT,y.LI,y.LINK,y.LISTING,y.MAIN,y.MARQUEE,y.MENU,y.META,y.NAV,y.NOEMBED,y.NOFRAMES,y.NOSCRIPT,y.OBJECT,y.OL,y.P,y.PARAM,y.PLAINTEXT,y.PRE,y.SCRIPT,y.SECTION,y.SELECT,y.SOURCE,y.STYLE,y.SUMMARY,y.TABLE,y.TBODY,y.TD,y.TEMPLATE,y.TEXTAREA,y.TFOOT,y.TH,y.THEAD,y.TITLE,y.TR,y.TRACK,y.UL,y.WBR,y.XMP]),[P.MATHML]:new Set([y.MI,y.MO,y.MN,y.MS,y.MTEXT,y.ANNOTATION_XML]),[P.SVG]:new Set([y.TITLE,y.FOREIGN_OBJECT,y.DESC]),[P.XLINK]:new Set,[P.XML]:new Set,[P.XMLNS]:new Set},j1=new Set([y.H1,y.H2,y.H3,y.H4,y.H5,y.H6]),zX=new Set([F.STYLE,F.SCRIPT,F.XMP,F.IFRAME,F.NOEMBED,F.NOFRAMES,F.PLAINTEXT]);function Q8(Z,X){return zX.has(Z)||X&&Z===F.NOSCRIPT}var H;(function(Z){Z[Z.DATA=0]="DATA",Z[Z.RCDATA=1]="RCDATA",Z[Z.RAWTEXT=2]="RAWTEXT",Z[Z.SCRIPT_DATA=3]="SCRIPT_DATA",Z[Z.PLAINTEXT=4]="PLAINTEXT",Z[Z.TAG_OPEN=5]="TAG_OPEN",Z[Z.END_TAG_OPEN=6]="END_TAG_OPEN",Z[Z.TAG_NAME=7]="TAG_NAME",Z[Z.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",Z[Z.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",Z[Z.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",Z[Z.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",Z[Z.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",Z[Z.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",Z[Z.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",Z[Z.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",Z[Z.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",Z[Z.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",Z[Z.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",Z[Z.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",Z[Z.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",Z[Z.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",Z[Z.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",Z[Z.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",Z[Z.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",Z[Z.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",Z[Z.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",Z[Z.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",Z[Z.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",Z[Z.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",Z[Z.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",Z[Z.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",Z[Z.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",Z[Z.BOGUS_COMMENT=40]="BOGUS_COMMENT",Z[Z.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",Z[Z.COMMENT_START=42]="COMMENT_START",Z[Z.COMMENT_START_DASH=43]="COMMENT_START_DASH",Z[Z.COMMENT=44]="COMMENT",Z[Z.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",Z[Z.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",Z[Z.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",Z[Z.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",Z[Z.COMMENT_END_DASH=49]="COMMENT_END_DASH",Z[Z.COMMENT_END=50]="COMMENT_END",Z[Z.COMMENT_END_BANG=51]="COMMENT_END_BANG",Z[Z.DOCTYPE=52]="DOCTYPE",Z[Z.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",Z[Z.DOCTYPE_NAME=54]="DOCTYPE_NAME",Z[Z.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",Z[Z.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",Z[Z.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",Z[Z.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",Z[Z.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",Z[Z.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",Z[Z.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",Z[Z.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",Z[Z.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",Z[Z.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",Z[Z.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",Z[Z.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",Z[Z.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",Z[Z.CDATA_SECTION=68]="CDATA_SECTION",Z[Z.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",Z[Z.CDATA_SECTION_END=70]="CDATA_SECTION_END",Z[Z.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",Z[Z.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(H||(H={}));var n={DATA:H.DATA,RCDATA:H.RCDATA,RAWTEXT:H.RAWTEXT,SCRIPT_DATA:H.SCRIPT_DATA,PLAINTEXT:H.PLAINTEXT,CDATA_SECTION:H.CDATA_SECTION};function FX(Z){return Z>=V.DIGIT_0&&Z<=V.DIGIT_9}function H1(Z){return Z>=V.LATIN_CAPITAL_A&&Z<=V.LATIN_CAPITAL_Z}function BX(Z){return Z>=V.LATIN_SMALL_A&&Z<=V.LATIN_SMALL_Z}function M0(Z){return BX(Z)||H1(Z)}function K8(Z){return M0(Z)||FX(Z)}function Q4(Z){return Z+32}function J8(Z){return Z===V.SPACE||Z===V.LINE_FEED||Z===V.TABULATION||Z===V.FORM_FEED}function W8(Z){return J8(Z)||Z===V.SOLIDUS||Z===V.GREATER_THAN_SIGN}function LX(Z){if(Z===V.NULL)return L.nullCharacterReference;else if(Z>1114111)return L.characterReferenceOutsideUnicodeRange;else if(t1(Z))return L.surrogateCharacterReference;else if(Z4(Z))return L.noncharacterCharacterReference;else if(e1(Z)||Z===V.CARRIAGE_RETURN)return L.controlCharacterReference;return null}class K4{constructor(Z,X){this.options=Z,this.handler=X,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=H.DATA,this.returnState=H.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new P2(X),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new O2(f2,(Q,K)=>{this.preprocessor.pos=this.entityStartPos+K-1,this._flushCodePointConsumedAsCharacterReference(Q)},X.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(L.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:(Q)=>{this._err(L.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+Q)},validateNumericCharacterReference:(Q)=>{let K=LX(Q);if(K)this._err(K,1)}}:void 0)}_err(Z,X=0){var Q,K;(K=(Q=this.handler).onParseError)===null||K===void 0||K.call(Q,this.preprocessor.getError(Z,X))}getCurrentLocation(Z){if(!this.options.sourceCodeLocationInfo)return null;return{startLine:this.preprocessor.line,startCol:this.preprocessor.col-Z,startOffset:this.preprocessor.offset-Z,endLine:-1,endCol:-1,endOffset:-1}}_runParsingLoop(){if(this.inLoop)return;this.inLoop=!0;while(this.active&&!this.paused){this.consumedAfterSnapshot=0;let Z=this._consume();if(!this._ensureHibernation())this._callState(Z)}this.inLoop=!1}pause(){this.paused=!0}resume(Z){if(!this.paused)throw Error("Parser was already resumed");if(this.paused=!1,this.inLoop)return;if(this._runParsingLoop(),!this.paused)Z===null||Z===void 0||Z()}write(Z,X,Q){if(this.active=!0,this.preprocessor.write(Z,X),this._runParsingLoop(),!this.paused)Q===null||Q===void 0||Q()}insertHtmlAtCurrentPos(Z){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(Z),this._runParsingLoop()}_ensureHibernation(){if(this.preprocessor.endOfChunkHit)return this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0;return!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(Z){this.consumedAfterSnapshot+=Z;for(let X=0;X<Z;X++)this.preprocessor.advance()}_consumeSequenceIfMatch(Z,X){if(this.preprocessor.startsWith(Z,X))return this._advanceBy(Z.length-1),!0;return!1}_createStartTagToken(){this.currentToken={type:S.START_TAG,tagName:"",tagID:W.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(1)}}_createEndTagToken(){this.currentToken={type:S.END_TAG,tagName:"",tagID:W.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(2)}}_createCommentToken(Z){this.currentToken={type:S.COMMENT,data:"",location:this.getCurrentLocation(Z)}}_createDoctypeToken(Z){this.currentToken={type:S.DOCTYPE,name:Z,forceQuirks:!1,publicId:null,systemId:null,location:this.currentLocation}}_createCharacterToken(Z,X){this.currentCharacterToken={type:Z,chars:X,location:this.currentLocation}}_createAttr(Z){this.currentAttr={name:Z,value:""},this.currentLocation=this.getCurrentLocation(0)}_leaveAttrName(){var Z,X;let Q=this.currentToken;if(X4(Q,this.currentAttr.name)===null){if(Q.attrs.push(this.currentAttr),Q.location&&this.currentLocation){let K=(Z=(X=Q.location).attrs)!==null&&Z!==void 0?Z:X.attrs=Object.create(null);K[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue()}}else this._err(L.duplicateAttribute)}_leaveAttrValue(){if(this.currentLocation)this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset}prepareToken(Z){if(this._emitCurrentCharacterToken(Z.location),this.currentToken=null,Z.location)Z.location.endLine=this.preprocessor.line,Z.location.endCol=this.preprocessor.col+1,Z.location.endOffset=this.preprocessor.offset+1;this.currentLocation=this.getCurrentLocation(-1)}emitCurrentTagToken(){let Z=this.currentToken;if(this.prepareToken(Z),Z.tagID=S0(Z.tagName),Z.type===S.START_TAG)this.lastStartTagName=Z.tagName,this.handler.onStartTag(Z);else{if(Z.attrs.length>0)this._err(L.endTagWithAttributes);if(Z.selfClosing)this._err(L.endTagWithTrailingSolidus);this.handler.onEndTag(Z)}this.preprocessor.dropParsedChunk()}emitCurrentComment(Z){this.prepareToken(Z),this.handler.onComment(Z),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(Z){this.prepareToken(Z),this.handler.onDoctype(Z),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(Z){if(this.currentCharacterToken){if(Z&&this.currentCharacterToken.location)this.currentCharacterToken.location.endLine=Z.startLine,this.currentCharacterToken.location.endCol=Z.startCol,this.currentCharacterToken.location.endOffset=Z.startOffset;switch(this.currentCharacterToken.type){case S.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case S.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case S.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){let Z=this.getCurrentLocation(0);if(Z)Z.endLine=Z.startLine,Z.endCol=Z.startCol,Z.endOffset=Z.startOffset;this._emitCurrentCharacterToken(Z),this.handler.onEof({type:S.EOF,location:Z}),this.active=!1}_appendCharToCurrentCharacterToken(Z,X){if(this.currentCharacterToken)if(this.currentCharacterToken.type===Z){this.currentCharacterToken.chars+=X;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(Z,X)}_emitCodePoint(Z){let X=J8(Z)?S.WHITESPACE_CHARACTER:Z===V.NULL?S.NULL_CHARACTER:S.CHARACTER;this._appendCharToCurrentCharacterToken(X,Z<65536?String.fromCharCode(Z):String.fromCodePoint(Z))}_emitChars(Z){this._appendCharToCurrentCharacterToken(S.CHARACTER,Z)}_startCharacterReference(){this.returnState=this.state,this.state=H.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?B0.Attribute:B0.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===H.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===H.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===H.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(Z){if(this._isCharacterReferenceInAttribute())this.currentAttr.value+=String.fromCodePoint(Z);else this._emitCodePoint(Z)}_callState(Z){switch(this.state){case H.DATA:{this._stateData(Z);break}case H.RCDATA:{this._stateRcdata(Z);break}case H.RAWTEXT:{this._stateRawtext(Z);break}case H.SCRIPT_DATA:{this._stateScriptData(Z);break}case H.PLAINTEXT:{this._statePlaintext(Z);break}case H.TAG_OPEN:{this._stateTagOpen(Z);break}case H.END_TAG_OPEN:{this._stateEndTagOpen(Z);break}case H.TAG_NAME:{this._stateTagName(Z);break}case H.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(Z);break}case H.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(Z);break}case H.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(Z);break}case H.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(Z);break}case H.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(Z);break}case H.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(Z);break}case H.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(Z);break}case H.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(Z);break}case H.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(Z);break}case H.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(Z);break}case H.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(Z);break}case H.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(Z);break}case H.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(Z);break}case H.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(Z);break}case H.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(Z);break}case H.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(Z);break}case H.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(Z);break}case H.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(Z);break}case H.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(Z);break}case H.ATTRIBUTE_NAME:{this._stateAttributeName(Z);break}case H.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(Z);break}case H.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(Z);break}case H.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(Z);break}case H.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(Z);break}case H.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(Z);break}case H.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(Z);break}case H.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(Z);break}case H.BOGUS_COMMENT:{this._stateBogusComment(Z);break}case H.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(Z);break}case H.COMMENT_START:{this._stateCommentStart(Z);break}case H.COMMENT_START_DASH:{this._stateCommentStartDash(Z);break}case H.COMMENT:{this._stateComment(Z);break}case H.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(Z);break}case H.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(Z);break}case H.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(Z);break}case H.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(Z);break}case H.COMMENT_END_DASH:{this._stateCommentEndDash(Z);break}case H.COMMENT_END:{this._stateCommentEnd(Z);break}case H.COMMENT_END_BANG:{this._stateCommentEndBang(Z);break}case H.DOCTYPE:{this._stateDoctype(Z);break}case H.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(Z);break}case H.DOCTYPE_NAME:{this._stateDoctypeName(Z);break}case H.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(Z);break}case H.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(Z);break}case H.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(Z);break}case H.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(Z);break}case H.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(Z);break}case H.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(Z);break}case H.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(Z);break}case H.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(Z);break}case H.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(Z);break}case H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(Z);break}case H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(Z);break}case H.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(Z);break}case H.BOGUS_DOCTYPE:{this._stateBogusDoctype(Z);break}case H.CDATA_SECTION:{this._stateCdataSection(Z);break}case H.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(Z);break}case H.CDATA_SECTION_END:{this._stateCdataSectionEnd(Z);break}case H.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case H.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(Z);break}default:throw Error("Unknown state")}}_stateData(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=H.TAG_OPEN;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitCodePoint(Z);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateRcdata(Z){switch(Z){case V.AMPERSAND:{this._startCharacterReference();break}case V.LESS_THAN_SIGN:{this.state=H.RCDATA_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateRawtext(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=H.RAWTEXT_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptData(Z){switch(Z){case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_statePlaintext(Z){switch(Z){case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateTagOpen(Z){if(M0(Z))this._createStartTagToken(),this.state=H.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.EXCLAMATION_MARK:{this.state=H.MARKUP_DECLARATION_OPEN;break}case V.SOLIDUS:{this.state=H.END_TAG_OPEN;break}case V.QUESTION_MARK:{this._err(L.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=H.BOGUS_COMMENT,this._stateBogusComment(Z);break}case V.EOF:{this._err(L.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(L.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=H.DATA,this._stateData(Z)}}_stateEndTagOpen(Z){if(M0(Z))this._createEndTagToken(),this.state=H.TAG_NAME,this._stateTagName(Z);else switch(Z){case V.GREATER_THAN_SIGN:{this._err(L.missingEndTagName),this.state=H.DATA;break}case V.EOF:{this._err(L.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(L.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=H.BOGUS_COMMENT,this._stateBogusComment(Z)}}_stateTagName(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this.state=H.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentTagToken();break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.tagName+=u;break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:X.tagName+=String.fromCodePoint(H1(Z)?Q4(Z):Z)}}_stateRcdataLessThanSign(Z){if(Z===V.SOLIDUS)this.state=H.RCDATA_END_TAG_OPEN;else this._emitChars("<"),this.state=H.RCDATA,this._stateRcdata(Z)}_stateRcdataEndTagOpen(Z){if(M0(Z))this.state=H.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(Z);else this._emitChars("</"),this.state=H.RCDATA,this._stateRcdata(Z)}handleSpecialEndTag(Z){if(!this.preprocessor.startsWith(this.lastStartTagName,!1))return!this._ensureHibernation();this._createEndTagToken();let X=this.currentToken;switch(X.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=H.BEFORE_ATTRIBUTE_NAME,!1;case V.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=H.SELF_CLOSING_START_TAG,!1;case V.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=H.DATA,!1;default:return!this._ensureHibernation()}}_stateRcdataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.RCDATA,this._stateRcdata(Z)}_stateRawtextLessThanSign(Z){if(Z===V.SOLIDUS)this.state=H.RAWTEXT_END_TAG_OPEN;else this._emitChars("<"),this.state=H.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagOpen(Z){if(M0(Z))this.state=H.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(Z);else this._emitChars("</"),this.state=H.RAWTEXT,this._stateRawtext(Z)}_stateRawtextEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.RAWTEXT,this._stateRawtext(Z)}_stateScriptDataLessThanSign(Z){switch(Z){case V.SOLIDUS:{this.state=H.SCRIPT_DATA_END_TAG_OPEN;break}case V.EXCLAMATION_MARK:{this.state=H.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}}_stateScriptDataEndTagOpen(Z){if(M0(Z))this.state=H.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(Z);else this._emitChars("</"),this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStart(Z){if(Z===V.HYPHEN_MINUS)this.state=H.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-");else this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscapeStartDash(Z){if(Z===V.HYPHEN_MINUS)this.state=H.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");else this.state=H.SCRIPT_DATA,this._stateScriptData(Z)}_stateScriptDataEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptDataEscapedDash(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedDashDash(Z){switch(Z){case V.HYPHEN_MINUS:{this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case V.GREATER_THAN_SIGN:{this.state=H.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.SCRIPT_DATA_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=H.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;else if(M0(Z))this._emitChars("<"),this.state=H.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(Z);else this._emitChars("<"),this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagOpen(Z){if(M0(Z))this.state=H.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(Z);else this._emitChars("</"),this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataEscapedEndTagName(Z){if(this.handleSpecialEndTag(Z))this._emitChars("</"),this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscapeStart(Z){if(this.preprocessor.startsWith(e.SCRIPT,!1)&&W8(this.preprocessor.peek(e.SCRIPT.length))){this._emitCodePoint(Z);for(let X=0;X<e.SCRIPT.length;X++)this._emitCodePoint(this._consume());this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED}else if(!this._ensureHibernation())this.state=H.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(Z)}_stateScriptDataDoubleEscaped(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedDash(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedDashDash(Z){switch(Z){case V.HYPHEN_MINUS:{this._emitChars("-");break}case V.LESS_THAN_SIGN:{this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case V.GREATER_THAN_SIGN:{this.state=H.SCRIPT_DATA,this._emitChars(">");break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(u);break}case V.EOF:{this._err(L.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(Z)}}_stateScriptDataDoubleEscapedLessThanSign(Z){if(Z===V.SOLIDUS)this.state=H.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/");else this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(Z)}_stateScriptDataDoubleEscapeEnd(Z){if(this.preprocessor.startsWith(e.SCRIPT,!1)&&W8(this.preprocessor.peek(e.SCRIPT.length))){this._emitCodePoint(Z);for(let X=0;X<e.SCRIPT.length;X++)this._emitCodePoint(this._consume());this.state=H.SCRIPT_DATA_ESCAPED}else if(!this._ensureHibernation())this.state=H.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(Z)}_stateBeforeAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.SOLIDUS:case V.GREATER_THAN_SIGN:case V.EOF:{this.state=H.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._err(L.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=H.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=H.ATTRIBUTE_NAME,this._stateAttributeName(Z)}}_stateAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:case V.SOLIDUS:case V.GREATER_THAN_SIGN:case V.EOF:{this._leaveAttrName(),this.state=H.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(Z);break}case V.EQUALS_SIGN:{this._leaveAttrName(),this.state=H.BEFORE_ATTRIBUTE_VALUE;break}case V.QUOTATION_MARK:case V.APOSTROPHE:case V.LESS_THAN_SIGN:{this._err(L.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(Z);break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.name+=u;break}default:this.currentAttr.name+=String.fromCodePoint(H1(Z)?Q4(Z):Z)}}_stateAfterAttributeName(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.SOLIDUS:{this.state=H.SELF_CLOSING_START_TAG;break}case V.EQUALS_SIGN:{this.state=H.BEFORE_ATTRIBUTE_VALUE;break}case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=H.ATTRIBUTE_NAME,this._stateAttributeName(Z)}}_stateBeforeAttributeValue(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{this.state=H.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this.state=H.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingAttributeValue),this.state=H.DATA,this.emitCurrentTagToken();break}default:this.state=H.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(Z)}}_stateAttributeValueDoubleQuoted(Z){switch(Z){case V.QUOTATION_MARK:{this.state=H.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAttributeValueSingleQuoted(Z){switch(Z){case V.APOSTROPHE:{this.state=H.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAttributeValueUnquoted(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this._leaveAttrValue(),this.state=H.BEFORE_ATTRIBUTE_NAME;break}case V.AMPERSAND:{this._startCharacterReference();break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=H.DATA,this.emitCurrentTagToken();break}case V.NULL:{this._err(L.unexpectedNullCharacter),this.currentAttr.value+=u;break}case V.QUOTATION_MARK:case V.APOSTROPHE:case V.LESS_THAN_SIGN:case V.EQUALS_SIGN:case V.GRAVE_ACCENT:{this._err(L.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(Z);break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(Z)}}_stateAfterAttributeValueQuoted(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this._leaveAttrValue(),this.state=H.BEFORE_ATTRIBUTE_NAME;break}case V.SOLIDUS:{this._leaveAttrValue(),this.state=H.SELF_CLOSING_START_TAG;break}case V.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=H.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._err(L.missingWhitespaceBetweenAttributes),this.state=H.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateSelfClosingStartTag(Z){switch(Z){case V.GREATER_THAN_SIGN:{let X=this.currentToken;X.selfClosing=!0,this.state=H.DATA,this.emitCurrentTagToken();break}case V.EOF:{this._err(L.eofInTag),this._emitEOFToken();break}default:this._err(L.unexpectedSolidusInTag),this.state=H.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(Z)}}_stateBogusComment(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentComment(X);break}case V.EOF:{this.emitCurrentComment(X),this._emitEOFToken();break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.data+=u;break}default:X.data+=String.fromCodePoint(Z)}}_stateMarkupDeclarationOpen(Z){if(this._consumeSequenceIfMatch(e.DASH_DASH,!0))this._createCommentToken(e.DASH_DASH.length+1),this.state=H.COMMENT_START;else if(this._consumeSequenceIfMatch(e.DOCTYPE,!1))this.currentLocation=this.getCurrentLocation(e.DOCTYPE.length+1),this.state=H.DOCTYPE;else if(this._consumeSequenceIfMatch(e.CDATA_START,!0))if(this.inForeignNode)this.state=H.CDATA_SECTION;else this._err(L.cdataInHtmlContent),this._createCommentToken(e.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=H.BOGUS_COMMENT;else if(!this._ensureHibernation())this._err(L.incorrectlyOpenedComment),this._createCommentToken(2),this.state=H.BOGUS_COMMENT,this._stateBogusComment(Z)}_stateCommentStart(Z){switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_START_DASH;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptClosingOfEmptyComment),this.state=H.DATA;let X=this.currentToken;this.emitCurrentComment(X);break}default:this.state=H.COMMENT,this._stateComment(Z)}}_stateCommentStartDash(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_END;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptClosingOfEmptyComment),this.state=H.DATA,this.emitCurrentComment(X);break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="-",this.state=H.COMMENT,this._stateComment(Z)}}_stateComment(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_END_DASH;break}case V.LESS_THAN_SIGN:{X.data+="<",this.state=H.COMMENT_LESS_THAN_SIGN;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.data+=u;break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+=String.fromCodePoint(Z)}}_stateCommentLessThanSign(Z){let X=this.currentToken;switch(Z){case V.EXCLAMATION_MARK:{X.data+="!",this.state=H.COMMENT_LESS_THAN_SIGN_BANG;break}case V.LESS_THAN_SIGN:{X.data+="<";break}default:this.state=H.COMMENT,this._stateComment(Z)}}_stateCommentLessThanSignBang(Z){if(Z===V.HYPHEN_MINUS)this.state=H.COMMENT_LESS_THAN_SIGN_BANG_DASH;else this.state=H.COMMENT,this._stateComment(Z)}_stateCommentLessThanSignBangDash(Z){if(Z===V.HYPHEN_MINUS)this.state=H.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;else this.state=H.COMMENT_END_DASH,this._stateCommentEndDash(Z)}_stateCommentLessThanSignBangDashDash(Z){if(Z!==V.GREATER_THAN_SIGN&&Z!==V.EOF)this._err(L.nestedComment);this.state=H.COMMENT_END,this._stateCommentEnd(Z)}_stateCommentEndDash(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{this.state=H.COMMENT_END;break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="-",this.state=H.COMMENT,this._stateComment(Z)}}_stateCommentEnd(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentComment(X);break}case V.EXCLAMATION_MARK:{this.state=H.COMMENT_END_BANG;break}case V.HYPHEN_MINUS:{X.data+="-";break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="--",this.state=H.COMMENT,this._stateComment(Z)}}_stateCommentEndBang(Z){let X=this.currentToken;switch(Z){case V.HYPHEN_MINUS:{X.data+="--!",this.state=H.COMMENT_END_DASH;break}case V.GREATER_THAN_SIGN:{this._err(L.incorrectlyClosedComment),this.state=H.DATA,this.emitCurrentComment(X);break}case V.EOF:{this._err(L.eofInComment),this.emitCurrentComment(X),this._emitEOFToken();break}default:X.data+="--!",this.state=H.COMMENT,this._stateComment(Z)}}_stateDoctype(Z){switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.BEFORE_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=H.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(Z);break}case V.EOF:{this._err(L.eofInDoctype),this._createDoctypeToken(null);let X=this.currentToken;X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingWhitespaceBeforeDoctypeName),this.state=H.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(Z)}}_stateBeforeDoctypeName(Z){if(H1(Z))this._createDoctypeToken(String.fromCharCode(Q4(Z))),this.state=H.DOCTYPE_NAME;else switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.NULL:{this._err(L.unexpectedNullCharacter),this._createDoctypeToken(u),this.state=H.DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypeName),this._createDoctypeToken(null);let X=this.currentToken;X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=H.DATA;break}case V.EOF:{this._err(L.eofInDoctype),this._createDoctypeToken(null);let X=this.currentToken;X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(Z)),this.state=H.DOCTYPE_NAME}}_stateDoctypeName(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.AFTER_DOCTYPE_NAME;break}case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentDoctype(X);break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.name+=u;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.name+=String.fromCodePoint(H1(Z)?Q4(Z):Z)}}_stateAfterDoctypeName(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:if(this._consumeSequenceIfMatch(e.PUBLIC,!1))this.state=H.AFTER_DOCTYPE_PUBLIC_KEYWORD;else if(this._consumeSequenceIfMatch(e.SYSTEM,!1))this.state=H.AFTER_DOCTYPE_SYSTEM_KEYWORD;else if(!this._ensureHibernation())this._err(L.invalidCharacterSequenceAfterDoctypeName),X.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateAfterDoctypePublicKeyword(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceAfterDoctypePublicKeyword),X.publicId="",this.state=H.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceAfterDoctypePublicKeyword),X.publicId="",this.state=H.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypePublicIdentifier),X.forceQuirks=!0,this.state=H.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypePublicIdentifier),X.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBeforeDoctypePublicIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{X.publicId="",this.state=H.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.publicId="",this.state=H.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypePublicIdentifier),X.forceQuirks=!0,this.state=H.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypePublicIdentifier),X.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypePublicIdentifierDoubleQuoted(Z){let X=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=H.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.publicId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypePublicIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=H.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.publicId+=String.fromCodePoint(Z)}}_stateDoctypePublicIdentifierSingleQuoted(Z){let X=this.currentToken;switch(Z){case V.APOSTROPHE:{this.state=H.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.publicId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypePublicIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=H.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.publicId+=String.fromCodePoint(Z)}}_stateAfterDoctypePublicIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case V.GREATER_THAN_SIGN:{this.state=H.DATA,this.emitCurrentDoctype(X);break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBetweenDoctypePublicAndSystemIdentifiers(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(X),this.state=H.DATA;break}case V.QUOTATION_MARK:{X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateAfterDoctypeSystemKeyword(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:{this.state=H.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.QUOTATION_MARK:{this._err(L.missingWhitespaceAfterDoctypeSystemKeyword),X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{this._err(L.missingWhitespaceAfterDoctypeSystemKeyword),X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=H.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBeforeDoctypeSystemIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.QUOTATION_MARK:{X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case V.APOSTROPHE:{X.systemId="",this.state=H.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case V.GREATER_THAN_SIGN:{this._err(L.missingDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=H.DATA,this.emitCurrentDoctype(X);break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.missingQuoteBeforeDoctypeSystemIdentifier),X.forceQuirks=!0,this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateDoctypeSystemIdentifierDoubleQuoted(Z){let X=this.currentToken;switch(Z){case V.QUOTATION_MARK:{this.state=H.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.systemId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypeSystemIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=H.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.systemId+=String.fromCodePoint(Z)}}_stateDoctypeSystemIdentifierSingleQuoted(Z){let X=this.currentToken;switch(Z){case V.APOSTROPHE:{this.state=H.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case V.NULL:{this._err(L.unexpectedNullCharacter),X.systemId+=u;break}case V.GREATER_THAN_SIGN:{this._err(L.abruptDoctypeSystemIdentifier),X.forceQuirks=!0,this.emitCurrentDoctype(X),this.state=H.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:X.systemId+=String.fromCodePoint(Z)}}_stateAfterDoctypeSystemIdentifier(Z){let X=this.currentToken;switch(Z){case V.SPACE:case V.LINE_FEED:case V.TABULATION:case V.FORM_FEED:break;case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(X),this.state=H.DATA;break}case V.EOF:{this._err(L.eofInDoctype),X.forceQuirks=!0,this.emitCurrentDoctype(X),this._emitEOFToken();break}default:this._err(L.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=H.BOGUS_DOCTYPE,this._stateBogusDoctype(Z)}}_stateBogusDoctype(Z){let X=this.currentToken;switch(Z){case V.GREATER_THAN_SIGN:{this.emitCurrentDoctype(X),this.state=H.DATA;break}case V.NULL:{this._err(L.unexpectedNullCharacter);break}case V.EOF:{this.emitCurrentDoctype(X),this._emitEOFToken();break}default:}}_stateCdataSection(Z){switch(Z){case V.RIGHT_SQUARE_BRACKET:{this.state=H.CDATA_SECTION_BRACKET;break}case V.EOF:{this._err(L.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(Z)}}_stateCdataSectionBracket(Z){if(Z===V.RIGHT_SQUARE_BRACKET)this.state=H.CDATA_SECTION_END;else this._emitChars("]"),this.state=H.CDATA_SECTION,this._stateCdataSection(Z)}_stateCdataSectionEnd(Z){switch(Z){case V.GREATER_THAN_SIGN:{this.state=H.DATA;break}case V.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=H.CDATA_SECTION,this._stateCdataSection(Z)}}_stateCharacterReference(){let Z=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(Z<0)if(this.preprocessor.lastChunkWritten)Z=this.entityDecoder.end();else{this.active=!1,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=!0;return}if(Z===0)this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(V.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&K8(this.preprocessor.peek(1))?H.AMBIGUOUS_AMPERSAND:this.returnState;else this.state=this.returnState}_stateAmbiguousAmpersand(Z){if(K8(Z))this._flushCodePointConsumedAsCharacterReference(Z);else{if(Z===V.SEMICOLON)this._err(L.unknownNamedCharacterReference);this.state=this.returnState,this._callState(Z)}}}var H8=new Set([W.DD,W.DT,W.LI,W.OPTGROUP,W.OPTION,W.P,W.RB,W.RP,W.RT,W.RTC]),Y8=new Set([...H8,W.CAPTION,W.COLGROUP,W.TBODY,W.TD,W.TFOOT,W.TH,W.THEAD,W.TR]),W4=new Set([W.APPLET,W.CAPTION,W.HTML,W.MARQUEE,W.OBJECT,W.TABLE,W.TD,W.TEMPLATE,W.TH]),qX=new Set([...W4,W.OL,W.UL]),xX=new Set([...W4,W.BUTTON]),V8=new Set([W.ANNOTATION_XML,W.MI,W.MN,W.MO,W.MS,W.MTEXT]),j8=new Set([W.DESC,W.FOREIGN_OBJECT,W.TITLE]),PX=new Set([W.TR,W.TEMPLATE,W.HTML]),fX=new Set([W.TBODY,W.TFOOT,W.THEAD,W.TEMPLATE,W.HTML]),yX=new Set([W.TABLE,W.TEMPLATE,W.HTML]),OX=new Set([W.TD,W.TH]);class b2{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(Z,X,Q){this.treeAdapter=X,this.handler=Q,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=W.UNKNOWN,this.current=Z}_indexOf(Z){return this.items.lastIndexOf(Z,this.stackTop)}_isInTemplate(){return this.currentTagId===W.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===P.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(Z,X){if(this.stackTop++,this.items[this.stackTop]=Z,this.current=Z,this.tagIDs[this.stackTop]=X,this.currentTagId=X,this._isInTemplate())this.tmplCount++;this.handler.onItemPush(Z,X,!0)}pop(){let Z=this.current;if(this.tmplCount>0&&this._isInTemplate())this.tmplCount--;this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Z,!0)}replace(Z,X){let Q=this._indexOf(Z);if(this.items[Q]=X,Q===this.stackTop)this.current=X}insertAfter(Z,X,Q){let K=this._indexOf(Z)+1;if(this.items.splice(K,0,X),this.tagIDs.splice(K,0,Q),this.stackTop++,K===this.stackTop)this._updateCurrentElement();if(this.current&&this.currentTagId!==void 0)this.handler.onItemPush(this.current,this.currentTagId,K===this.stackTop)}popUntilTagNamePopped(Z){let X=this.stackTop+1;do X=this.tagIDs.lastIndexOf(Z,X-1);while(X>0&&this.treeAdapter.getNamespaceURI(this.items[X])!==P.HTML);this.shortenToLength(Math.max(X,0))}shortenToLength(Z){while(this.stackTop>=Z){let X=this.current;if(this.tmplCount>0&&this._isInTemplate())this.tmplCount-=1;this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(X,this.stackTop<Z)}}popUntilElementPopped(Z){let X=this._indexOf(Z);this.shortenToLength(Math.max(X,0))}popUntilPopped(Z,X){let Q=this._indexOfTagNames(Z,X);this.shortenToLength(Math.max(Q,0))}popUntilNumberedHeaderPopped(){this.popUntilPopped(j1,P.HTML)}popUntilTableCellPopped(){this.popUntilPopped(OX,P.HTML)}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1)}_indexOfTagNames(Z,X){for(let Q=this.stackTop;Q>=0;Q--)if(Z.has(this.tagIDs[Q])&&this.treeAdapter.getNamespaceURI(this.items[Q])===X)return Q;return-1}clearBackTo(Z,X){let Q=this._indexOfTagNames(Z,X);this.shortenToLength(Q+1)}clearBackToTableContext(){this.clearBackTo(yX,P.HTML)}clearBackToTableBodyContext(){this.clearBackTo(fX,P.HTML)}clearBackToTableRowContext(){this.clearBackTo(PX,P.HTML)}remove(Z){let X=this._indexOf(Z);if(X>=0)if(X===this.stackTop)this.pop();else this.items.splice(X,1),this.tagIDs.splice(X,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(Z,!1)}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===W.BODY?this.items[1]:null}contains(Z){return this._indexOf(Z)>-1}getCommonAncestor(Z){let X=this._indexOf(Z)-1;return X>=0?this.items[X]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===W.HTML}hasInDynamicScope(Z,X){for(let Q=this.stackTop;Q>=0;Q--){let K=this.tagIDs[Q];switch(this.treeAdapter.getNamespaceURI(this.items[Q])){case P.HTML:{if(K===Z)return!0;if(X.has(K))return!1;break}case P.SVG:{if(j8.has(K))return!1;break}case P.MATHML:{if(V8.has(K))return!1;break}}}return!0}hasInScope(Z){return this.hasInDynamicScope(Z,W4)}hasInListItemScope(Z){return this.hasInDynamicScope(Z,qX)}hasInButtonScope(Z){return this.hasInDynamicScope(Z,xX)}hasNumberedHeaderInScope(){for(let Z=this.stackTop;Z>=0;Z--){let X=this.tagIDs[Z];switch(this.treeAdapter.getNamespaceURI(this.items[Z])){case P.HTML:{if(j1.has(X))return!0;if(W4.has(X))return!1;break}case P.SVG:{if(j8.has(X))return!1;break}case P.MATHML:{if(V8.has(X))return!1;break}}}return!0}hasInTableScope(Z){for(let X=this.stackTop;X>=0;X--){if(this.treeAdapter.getNamespaceURI(this.items[X])!==P.HTML)continue;switch(this.tagIDs[X]){case Z:return!0;case W.TABLE:case W.HTML:return!1}}return!0}hasTableBodyContextInTableScope(){for(let Z=this.stackTop;Z>=0;Z--){if(this.treeAdapter.getNamespaceURI(this.items[Z])!==P.HTML)continue;switch(this.tagIDs[Z]){case W.TBODY:case W.THEAD:case W.TFOOT:return!0;case W.TABLE:case W.HTML:return!1}}return!0}hasInSelectScope(Z){for(let X=this.stackTop;X>=0;X--){if(this.treeAdapter.getNamespaceURI(this.items[X])!==P.HTML)continue;switch(this.tagIDs[X]){case Z:return!0;case W.OPTION:case W.OPTGROUP:break;default:return!1}}return!0}generateImpliedEndTags(){while(this.currentTagId!==void 0&&H8.has(this.currentTagId))this.pop()}generateImpliedEndTagsThoroughly(){while(this.currentTagId!==void 0&&Y8.has(this.currentTagId))this.pop()}generateImpliedEndTagsWithExclusion(Z){while(this.currentTagId!==void 0&&this.currentTagId!==Z&&Y8.has(this.currentTagId))this.pop()}}var w0;(function(Z){Z[Z.Marker=0]="Marker",Z[Z.Element=1]="Element"})(w0||(w0={}));var w8={type:w0.Marker};class v2{constructor(Z){this.treeAdapter=Z,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(Z,X){let Q=[],K=X.length,J=this.treeAdapter.getTagName(Z),Y=this.treeAdapter.getNamespaceURI(Z);for(let j=0;j<this.entries.length;j++){let U=this.entries[j];if(U.type===w0.Marker)break;let{element:B}=U;if(this.treeAdapter.getTagName(B)===J&&this.treeAdapter.getNamespaceURI(B)===Y){let z=this.treeAdapter.getAttrList(B);if(z.length===K)Q.push({idx:j,attrs:z})}}return Q}_ensureNoahArkCondition(Z){if(this.entries.length<3)return;let X=this.treeAdapter.getAttrList(Z),Q=this._getNoahArkConditionCandidates(Z,X);if(Q.length<3)return;let K=new Map(X.map((Y)=>[Y.name,Y.value])),J=0;for(let Y=0;Y<Q.length;Y++){let j=Q[Y];if(j.attrs.every((U)=>K.get(U.name)===U.value)){if(J+=1,J>=3)this.entries.splice(j.idx,1)}}}insertMarker(){this.entries.unshift(w8)}pushElement(Z,X){this._ensureNoahArkCondition(Z),this.entries.unshift({type:w0.Element,element:Z,token:X})}insertElementAfterBookmark(Z,X){let Q=this.entries.indexOf(this.bookmark);this.entries.splice(Q,0,{type:w0.Element,element:Z,token:X})}removeEntry(Z){let X=this.entries.indexOf(Z);if(X!==-1)this.entries.splice(X,1)}clearToLastMarker(){let Z=this.entries.indexOf(w8);if(Z===-1)this.entries.length=0;else this.entries.splice(0,Z+1)}getElementEntryInScopeWithTagName(Z){let X=this.entries.find((Q)=>Q.type===w0.Marker||this.treeAdapter.getTagName(Q.element)===Z);return X&&X.type===w0.Element?X:null}getElementEntry(Z){return this.entries.find((X)=>X.type===w0.Element&&X.element===Z)}}var Y0={createDocument(){return{nodeName:"#document",mode:Z0.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(Z,X,Q){return{nodeName:Z,tagName:Z,attrs:Q,namespaceURI:X,childNodes:[],parentNode:null}},createCommentNode(Z){return{nodeName:"#comment",data:Z,parentNode:null}},createTextNode(Z){return{nodeName:"#text",value:Z,parentNode:null}},appendChild(Z,X){Z.childNodes.push(X),X.parentNode=Z},insertBefore(Z,X,Q){let K=Z.childNodes.indexOf(Q);Z.childNodes.splice(K,0,X),X.parentNode=Z},setTemplateContent(Z,X){Z.content=X},getTemplateContent(Z){return Z.content},setDocumentType(Z,X,Q,K){let J=Z.childNodes.find((Y)=>Y.nodeName==="#documentType");if(J)J.name=X,J.publicId=Q,J.systemId=K;else{let Y={nodeName:"#documentType",name:X,publicId:Q,systemId:K,parentNode:null};Y0.appendChild(Z,Y)}},setDocumentMode(Z,X){Z.mode=X},getDocumentMode(Z){return Z.mode},detachNode(Z){if(Z.parentNode){let X=Z.parentNode.childNodes.indexOf(Z);Z.parentNode.childNodes.splice(X,1),Z.parentNode=null}},insertText(Z,X){if(Z.childNodes.length>0){let Q=Z.childNodes[Z.childNodes.length-1];if(Y0.isTextNode(Q)){Q.value+=X;return}}Y0.appendChild(Z,Y0.createTextNode(X))},insertTextBefore(Z,X,Q){let K=Z.childNodes[Z.childNodes.indexOf(Q)-1];if(K&&Y0.isTextNode(K))K.value+=X;else Y0.insertBefore(Z,Y0.createTextNode(X),Q)},adoptAttributes(Z,X){let Q=new Set(Z.attrs.map((K)=>K.name));for(let K=0;K<X.length;K++)if(!Q.has(X[K].name))Z.attrs.push(X[K])},getFirstChild(Z){return Z.childNodes[0]},getChildNodes(Z){return Z.childNodes},getParentNode(Z){return Z.parentNode},getAttrList(Z){return Z.attrs},getTagName(Z){return Z.tagName},getNamespaceURI(Z){return Z.namespaceURI},getTextNodeContent(Z){return Z.value},getCommentNodeContent(Z){return Z.data},getDocumentTypeNodeName(Z){return Z.name},getDocumentTypeNodePublicId(Z){return Z.publicId},getDocumentTypeNodeSystemId(Z){return Z.systemId},isTextNode(Z){return Z.nodeName==="#text"},isCommentNode(Z){return Z.nodeName==="#comment"},isDocumentTypeNode(Z){return Z.nodeName==="#documentType"},isElementNode(Z){return Object.prototype.hasOwnProperty.call(Z,"tagName")},setNodeSourceCodeLocation(Z,X){Z.sourceCodeLocation=X},getNodeSourceCodeLocation(Z){return Z.sourceCodeLocation},updateNodeSourceCodeLocation(Z,X){Z.sourceCodeLocation={...Z.sourceCodeLocation,...X}}};var U8="html",bX="about:legacy-compat",vX="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",F8=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],RX=[...F8,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],CX=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),B8=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],hX=[...B8,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function z8(Z,X){return X.some((Q)=>Z.startsWith(Q))}function L8(Z){return Z.name===U8&&Z.publicId===null&&(Z.systemId===null||Z.systemId===bX)}function q8(Z){if(Z.name!==U8)return Z0.QUIRKS;let{systemId:X}=Z;if(X&&X.toLowerCase()===vX)return Z0.QUIRKS;let{publicId:Q}=Z;if(Q!==null){if(Q=Q.toLowerCase(),CX.has(Q))return Z0.QUIRKS;let K=X===null?RX:F8;if(z8(Q,K))return Z0.QUIRKS;if(K=X===null?B8:hX,z8(Q,K))return Z0.LIMITED_QUIRKS}return Z0.NO_QUIRKS}var x8={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},NX="definitionurl",DX="definitionURL",gX=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map((Z)=>[Z.toLowerCase(),Z])),$X=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:P.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:P.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:P.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:P.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:P.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:P.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:P.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:P.XML}],["xml:space",{prefix:"xml",name:"space",namespace:P.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:P.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:P.XMLNS}]]),GX=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map((Z)=>[Z.toLowerCase(),Z])),EX=new Set([W.B,W.BIG,W.BLOCKQUOTE,W.BODY,W.BR,W.CENTER,W.CODE,W.DD,W.DIV,W.DL,W.DT,W.EM,W.EMBED,W.H1,W.H2,W.H3,W.H4,W.H5,W.H6,W.HEAD,W.HR,W.I,W.IMG,W.LI,W.LISTING,W.MENU,W.META,W.NOBR,W.OL,W.P,W.PRE,W.RUBY,W.S,W.SMALL,W.SPAN,W.STRONG,W.STRIKE,W.SUB,W.SUP,W.TABLE,W.TT,W.U,W.UL,W.VAR]);function P8(Z){let X=Z.tagID;return X===W.FONT&&Z.attrs.some(({name:K})=>K===P0.COLOR||K===P0.SIZE||K===P0.FACE)||EX.has(X)}function R2(Z){for(let X=0;X<Z.attrs.length;X++)if(Z.attrs[X].name===NX){Z.attrs[X].name=DX;break}}function C2(Z){for(let X=0;X<Z.attrs.length;X++){let Q=gX.get(Z.attrs[X].name);if(Q!=null)Z.attrs[X].name=Q}}function J4(Z){for(let X=0;X<Z.attrs.length;X++){let Q=$X.get(Z.attrs[X].name);if(Q)Z.attrs[X].prefix=Q.prefix,Z.attrs[X].name=Q.name,Z.attrs[X].namespace=Q.namespace}}function f8(Z){let X=GX.get(Z.tagName);if(X!=null)Z.tagName=X,Z.tagID=S0(Z.tagName)}function mX(Z,X){return X===P.MATHML&&(Z===W.MI||Z===W.MO||Z===W.MN||Z===W.MS||Z===W.MTEXT)}function kX(Z,X,Q){if(X===P.MATHML&&Z===W.ANNOTATION_XML){for(let K=0;K<Q.length;K++)if(Q[K].name===P0.ENCODING){let J=Q[K].value.toLowerCase();return J===x8.TEXT_HTML||J===x8.APPLICATION_XML}}return X===P.SVG&&(Z===W.FOREIGN_OBJECT||Z===W.DESC||Z===W.TITLE)}function y8(Z,X,Q,K){return(!K||K===P.HTML)&&kX(Z,X,Q)||(!K||K===P.MATHML)&&mX(Z,X)}var _X="hidden",SX=8,IX=3,w;(function(Z){Z[Z.INITIAL=0]="INITIAL",Z[Z.BEFORE_HTML=1]="BEFORE_HTML",Z[Z.BEFORE_HEAD=2]="BEFORE_HEAD",Z[Z.IN_HEAD=3]="IN_HEAD",Z[Z.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",Z[Z.AFTER_HEAD=5]="AFTER_HEAD",Z[Z.IN_BODY=6]="IN_BODY",Z[Z.TEXT=7]="TEXT",Z[Z.IN_TABLE=8]="IN_TABLE",Z[Z.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",Z[Z.IN_CAPTION=10]="IN_CAPTION",Z[Z.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",Z[Z.IN_TABLE_BODY=12]="IN_TABLE_BODY",Z[Z.IN_ROW=13]="IN_ROW",Z[Z.IN_CELL=14]="IN_CELL",Z[Z.IN_SELECT=15]="IN_SELECT",Z[Z.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",Z[Z.IN_TEMPLATE=17]="IN_TEMPLATE",Z[Z.AFTER_BODY=18]="AFTER_BODY",Z[Z.IN_FRAMESET=19]="IN_FRAMESET",Z[Z.AFTER_FRAMESET=20]="AFTER_FRAMESET",Z[Z.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",Z[Z.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET"})(w||(w={}));var TX={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},C8=new Set([W.TABLE,W.TBODY,W.TFOOT,W.THEAD,W.TR]),b8={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:Y0,onParseError:null};class H4{constructor(Z,X,Q=null,K=null){if(this.fragmentContext=Q,this.scriptHandler=K,this.currentToken=null,this.stopped=!1,this.insertionMode=w.INITIAL,this.originalInsertionMode=w.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=!1,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1,this.options={...b8,...Z},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError)this.options.sourceCodeLocationInfo=!0;this.document=X!==null&&X!==void 0?X:this.treeAdapter.createDocument(),this.tokenizer=new K4(this.options,this),this.activeFormattingElements=new v2(this.treeAdapter),this.fragmentContextID=Q?S0(this.treeAdapter.getTagName(Q)):W.UNKNOWN,this._setContextModes(Q!==null&&Q!==void 0?Q:this.document,this.fragmentContextID),this.openElements=new b2(this.document,this.treeAdapter,this)}static parse(Z,X){let Q=new this(X);return Q.tokenizer.write(Z,!0),Q.document}static getFragmentParser(Z,X){let Q={...b8,...X};Z!==null&&Z!==void 0||(Z=Q.treeAdapter.createElement(F.TEMPLATE,P.HTML,[]));let K=Q.treeAdapter.createElement("documentmock",P.HTML,[]),J=new this(Q,K,Z);if(J.fragmentContextID===W.TEMPLATE)J.tmplInsertionModeStack.unshift(w.IN_TEMPLATE);return J._initTokenizerForFragmentParsing(),J._insertFakeRootElement(),J._resetInsertionMode(),J._findFormInFragmentContext(),J}getFragment(){let Z=this.treeAdapter.getFirstChild(this.document),X=this.treeAdapter.createDocumentFragment();return this._adoptNodes(Z,X),X}_err(Z,X,Q){var K;if(!this.onParseError)return;let J=(K=Z.location)!==null&&K!==void 0?K:TX,Y={code:X,startLine:J.startLine,startCol:J.startCol,startOffset:J.startOffset,endLine:Q?J.startLine:J.endLine,endCol:Q?J.startCol:J.endCol,endOffset:Q?J.startOffset:J.endOffset};this.onParseError(Y)}onItemPush(Z,X,Q){var K,J;if((J=(K=this.treeAdapter).onItemPush)===null||J===void 0||J.call(K,Z),Q&&this.openElements.stackTop>0)this._setContextModes(Z,X)}onItemPop(Z,X){var Q,K;if(this.options.sourceCodeLocationInfo)this._setEndLocation(Z,this.currentToken);if((K=(Q=this.treeAdapter).onItemPop)===null||K===void 0||K.call(Q,Z,this.openElements.current),X){let J,Y;if(this.openElements.stackTop===0&&this.fragmentContext)J=this.fragmentContext,Y=this.fragmentContextID;else({current:J,currentTagId:Y}=this.openElements);this._setContextModes(J,Y)}}_setContextModes(Z,X){let Q=Z===this.document||Z&&this.treeAdapter.getNamespaceURI(Z)===P.HTML;this.currentNotInHTML=!Q,this.tokenizer.inForeignNode=!Q&&Z!==void 0&&X!==void 0&&!this._isIntegrationPoint(X,Z)}_switchToTextParsing(Z,X){this._insertElement(Z,P.HTML),this.tokenizer.state=X,this.originalInsertionMode=this.insertionMode,this.insertionMode=w.TEXT}switchToPlaintextParsing(){this.insertionMode=w.TEXT,this.originalInsertionMode=w.IN_BODY,this.tokenizer.state=n.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let Z=this.fragmentContext;while(Z){if(this.treeAdapter.getTagName(Z)===F.FORM){this.formElement=Z;break}Z=this.treeAdapter.getParentNode(Z)}}_initTokenizerForFragmentParsing(){if(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==P.HTML)return;switch(this.fragmentContextID){case W.TITLE:case W.TEXTAREA:{this.tokenizer.state=n.RCDATA;break}case W.STYLE:case W.XMP:case W.IFRAME:case W.NOEMBED:case W.NOFRAMES:case W.NOSCRIPT:{this.tokenizer.state=n.RAWTEXT;break}case W.SCRIPT:{this.tokenizer.state=n.SCRIPT_DATA;break}case W.PLAINTEXT:{this.tokenizer.state=n.PLAINTEXT;break}default:}}_setDocumentType(Z){let X=Z.name||"",Q=Z.publicId||"",K=Z.systemId||"";if(this.treeAdapter.setDocumentType(this.document,X,Q,K),Z.location){let Y=this.treeAdapter.getChildNodes(this.document).find((j)=>this.treeAdapter.isDocumentTypeNode(j));if(Y)this.treeAdapter.setNodeSourceCodeLocation(Y,Z.location)}}_attachElementToTree(Z,X){if(this.options.sourceCodeLocationInfo){let Q=X&&{...X,startTag:X};this.treeAdapter.setNodeSourceCodeLocation(Z,Q)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(Z);else{let Q=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(Q!==null&&Q!==void 0?Q:this.document,Z)}}_appendElement(Z,X){let Q=this.treeAdapter.createElement(Z.tagName,X,Z.attrs);this._attachElementToTree(Q,Z.location)}_insertElement(Z,X){let Q=this.treeAdapter.createElement(Z.tagName,X,Z.attrs);this._attachElementToTree(Q,Z.location),this.openElements.push(Q,Z.tagID)}_insertFakeElement(Z,X){let Q=this.treeAdapter.createElement(Z,P.HTML,[]);this._attachElementToTree(Q,null),this.openElements.push(Q,X)}_insertTemplate(Z){let X=this.treeAdapter.createElement(Z.tagName,P.HTML,Z.attrs),Q=this.treeAdapter.createDocumentFragment();if(this.treeAdapter.setTemplateContent(X,Q),this._attachElementToTree(X,Z.location),this.openElements.push(X,Z.tagID),this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Q,null)}_insertFakeRootElement(){let Z=this.treeAdapter.createElement(F.HTML,P.HTML,[]);if(this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Z,null);this.treeAdapter.appendChild(this.openElements.current,Z),this.openElements.push(Z,W.HTML)}_appendCommentNode(Z,X){let Q=this.treeAdapter.createCommentNode(Z.data);if(this.treeAdapter.appendChild(X,Q),this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Q,Z.location)}_insertCharacters(Z){let X,Q;if(this._shouldFosterParentOnInsertion())if({parent:X,beforeElement:Q}=this._findFosterParentingLocation(),Q)this.treeAdapter.insertTextBefore(X,Z.chars,Q);else this.treeAdapter.insertText(X,Z.chars);else X=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(X,Z.chars);if(!Z.location)return;let K=this.treeAdapter.getChildNodes(X),J=Q?K.lastIndexOf(Q):K.length,Y=K[J-1];if(this.treeAdapter.getNodeSourceCodeLocation(Y)){let{endLine:U,endCol:B,endOffset:z}=Z.location;this.treeAdapter.updateNodeSourceCodeLocation(Y,{endLine:U,endCol:B,endOffset:z})}else if(this.options.sourceCodeLocationInfo)this.treeAdapter.setNodeSourceCodeLocation(Y,Z.location)}_adoptNodes(Z,X){for(let Q=this.treeAdapter.getFirstChild(Z);Q;Q=this.treeAdapter.getFirstChild(Z))this.treeAdapter.detachNode(Q),this.treeAdapter.appendChild(X,Q)}_setEndLocation(Z,X){if(this.treeAdapter.getNodeSourceCodeLocation(Z)&&X.location){let Q=X.location,K=this.treeAdapter.getTagName(Z),J=X.type===S.END_TAG&&K===X.tagName?{endTag:{...Q},endLine:Q.endLine,endCol:Q.endCol,endOffset:Q.endOffset}:{endLine:Q.startLine,endCol:Q.startCol,endOffset:Q.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(Z,J)}}shouldProcessStartTagTokenInForeignContent(Z){if(!this.currentNotInHTML)return!1;let X,Q;if(this.openElements.stackTop===0&&this.fragmentContext)X=this.fragmentContext,Q=this.fragmentContextID;else({current:X,currentTagId:Q}=this.openElements);if(Z.tagID===W.SVG&&this.treeAdapter.getTagName(X)===F.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(X)===P.MATHML)return!1;return this.tokenizer.inForeignNode||(Z.tagID===W.MGLYPH||Z.tagID===W.MALIGNMARK)&&Q!==void 0&&!this._isIntegrationPoint(Q,X,P.HTML)}_processToken(Z){switch(Z.type){case S.CHARACTER:{this.onCharacter(Z);break}case S.NULL_CHARACTER:{this.onNullCharacter(Z);break}case S.COMMENT:{this.onComment(Z);break}case S.DOCTYPE:{this.onDoctype(Z);break}case S.START_TAG:{this._processStartTag(Z);break}case S.END_TAG:{this.onEndTag(Z);break}case S.EOF:{this.onEof(Z);break}case S.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(Z);break}}}_isIntegrationPoint(Z,X,Q){let K=this.treeAdapter.getNamespaceURI(X),J=this.treeAdapter.getAttrList(X);return y8(Z,K,J,Q)}_reconstructActiveFormattingElements(){let Z=this.activeFormattingElements.entries.length;if(Z){let X=this.activeFormattingElements.entries.findIndex((K)=>K.type===w0.Marker||this.openElements.contains(K.element)),Q=X===-1?Z-1:X-1;for(let K=Q;K>=0;K--){let J=this.activeFormattingElements.entries[K];this._insertElement(J.token,this.treeAdapter.getNamespaceURI(J.element)),J.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=w.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(W.P),this.openElements.popUntilTagNamePopped(W.P)}_resetInsertionMode(){for(let Z=this.openElements.stackTop;Z>=0;Z--)switch(Z===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[Z]){case W.TR:{this.insertionMode=w.IN_ROW;return}case W.TBODY:case W.THEAD:case W.TFOOT:{this.insertionMode=w.IN_TABLE_BODY;return}case W.CAPTION:{this.insertionMode=w.IN_CAPTION;return}case W.COLGROUP:{this.insertionMode=w.IN_COLUMN_GROUP;return}case W.TABLE:{this.insertionMode=w.IN_TABLE;return}case W.BODY:{this.insertionMode=w.IN_BODY;return}case W.FRAMESET:{this.insertionMode=w.IN_FRAMESET;return}case W.SELECT:{this._resetInsertionModeForSelect(Z);return}case W.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case W.HTML:{this.insertionMode=this.headElement?w.AFTER_HEAD:w.BEFORE_HEAD;return}case W.TD:case W.TH:{if(Z>0){this.insertionMode=w.IN_CELL;return}break}case W.HEAD:{if(Z>0){this.insertionMode=w.IN_HEAD;return}break}}this.insertionMode=w.IN_BODY}_resetInsertionModeForSelect(Z){if(Z>0)for(let X=Z-1;X>0;X--){let Q=this.openElements.tagIDs[X];if(Q===W.TEMPLATE)break;else if(Q===W.TABLE){this.insertionMode=w.IN_SELECT_IN_TABLE;return}}this.insertionMode=w.IN_SELECT}_isElementCausesFosterParenting(Z){return C8.has(Z)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let Z=this.openElements.stackTop;Z>=0;Z--){let X=this.openElements.items[Z];switch(this.openElements.tagIDs[Z]){case W.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(X)===P.HTML)return{parent:this.treeAdapter.getTemplateContent(X),beforeElement:null};break}case W.TABLE:{let Q=this.treeAdapter.getParentNode(X);if(Q)return{parent:Q,beforeElement:X};return{parent:this.openElements.items[Z-1],beforeElement:null}}default:}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(Z){let X=this._findFosterParentingLocation();if(X.beforeElement)this.treeAdapter.insertBefore(X.parent,Z,X.beforeElement);else this.treeAdapter.appendChild(X.parent,Z)}_isSpecialElement(Z,X){let Q=this.treeAdapter.getNamespaceURI(Z);return X8[Q].has(X)}onCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){LQ(this,Z);return}switch(this.insertionMode){case w.INITIAL:{w1(this,Z);break}case w.BEFORE_HTML:{U1(this,Z);break}case w.BEFORE_HEAD:{F1(this,Z);break}case w.IN_HEAD:{B1(this,Z);break}case w.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case w.AFTER_HEAD:{q1(this,Z);break}case w.IN_BODY:case w.IN_CAPTION:case w.IN_CELL:case w.IN_TEMPLATE:{M8(this,Z);break}case w.TEXT:case w.IN_SELECT:case w.IN_SELECT_IN_TABLE:{this._insertCharacters(Z);break}case w.IN_TABLE:case w.IN_TABLE_BODY:case w.IN_ROW:{h2(this,Z);break}case w.IN_TABLE_TEXT:{E8(this,Z);break}case w.IN_COLUMN_GROUP:{V4(this,Z);break}case w.AFTER_BODY:{j4(this,Z);break}case w.AFTER_AFTER_BODY:{Y4(this,Z);break}default:}}onNullCharacter(Z){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){BQ(this,Z);return}switch(this.insertionMode){case w.INITIAL:{w1(this,Z);break}case w.BEFORE_HTML:{U1(this,Z);break}case w.BEFORE_HEAD:{F1(this,Z);break}case w.IN_HEAD:{B1(this,Z);break}case w.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case w.AFTER_HEAD:{q1(this,Z);break}case w.TEXT:{this._insertCharacters(Z);break}case w.IN_TABLE:case w.IN_TABLE_BODY:case w.IN_ROW:{h2(this,Z);break}case w.IN_COLUMN_GROUP:{V4(this,Z);break}case w.AFTER_BODY:{j4(this,Z);break}case w.AFTER_AFTER_BODY:{Y4(this,Z);break}default:}}onComment(Z){if(this.skipNextNewLine=!1,this.currentNotInHTML){M2(this,Z);return}switch(this.insertionMode){case w.INITIAL:case w.BEFORE_HTML:case w.BEFORE_HEAD:case w.IN_HEAD:case w.IN_HEAD_NO_SCRIPT:case w.AFTER_HEAD:case w.IN_BODY:case w.IN_TABLE:case w.IN_CAPTION:case w.IN_COLUMN_GROUP:case w.IN_TABLE_BODY:case w.IN_ROW:case w.IN_CELL:case w.IN_SELECT:case w.IN_SELECT_IN_TABLE:case w.IN_TEMPLATE:case w.IN_FRAMESET:case w.AFTER_FRAMESET:{M2(this,Z);break}case w.IN_TABLE_TEXT:{z1(this,Z);break}case w.AFTER_BODY:{aX(this,Z);break}case w.AFTER_AFTER_BODY:case w.AFTER_AFTER_FRAMESET:{pX(this,Z);break}default:}}onDoctype(Z){switch(this.skipNextNewLine=!1,this.insertionMode){case w.INITIAL:{rX(this,Z);break}case w.BEFORE_HEAD:case w.IN_HEAD:case w.IN_HEAD_NO_SCRIPT:case w.AFTER_HEAD:{this._err(Z,L.misplacedDoctype);break}case w.IN_TABLE_TEXT:{z1(this,Z);break}default:}}onStartTag(Z){if(this.skipNextNewLine=!1,this.currentToken=Z,this._processStartTag(Z),Z.selfClosing&&!Z.ackSelfClosing)this._err(Z,L.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(Z){if(this.shouldProcessStartTagTokenInForeignContent(Z))qQ(this,Z);else this._startTagOutsideForeignContent(Z)}_startTagOutsideForeignContent(Z){switch(this.insertionMode){case w.INITIAL:{w1(this,Z);break}case w.BEFORE_HTML:{sX(this,Z);break}case w.BEFORE_HEAD:{nX(this,Z);break}case w.IN_HEAD:{z0(this,Z);break}case w.IN_HEAD_NO_SCRIPT:{Z5(this,Z);break}case w.AFTER_HEAD:{Q5(this,Z);break}case w.IN_BODY:{t(this,Z);break}case w.IN_TABLE:{a0(this,Z);break}case w.IN_TABLE_TEXT:{z1(this,Z);break}case w.IN_CAPTION:{t5(this,Z);break}case w.IN_COLUMN_GROUP:{$2(this,Z);break}case w.IN_TABLE_BODY:{U4(this,Z);break}case w.IN_ROW:{F4(this,Z);break}case w.IN_CELL:{XQ(this,Z);break}case w.IN_SELECT:{_8(this,Z);break}case w.IN_SELECT_IN_TABLE:{KQ(this,Z);break}case w.IN_TEMPLATE:{JQ(this,Z);break}case w.AFTER_BODY:{VQ(this,Z);break}case w.IN_FRAMESET:{jQ(this,Z);break}case w.AFTER_FRAMESET:{wQ(this,Z);break}case w.AFTER_AFTER_BODY:{UQ(this,Z);break}case w.AFTER_AFTER_FRAMESET:{FQ(this,Z);break}default:}}onEndTag(Z){if(this.skipNextNewLine=!1,this.currentToken=Z,this.currentNotInHTML)xQ(this,Z);else this._endTagOutsideForeignContent(Z)}_endTagOutsideForeignContent(Z){switch(this.insertionMode){case w.INITIAL:{w1(this,Z);break}case w.BEFORE_HTML:{oX(this,Z);break}case w.BEFORE_HEAD:{tX(this,Z);break}case w.IN_HEAD:{eX(this,Z);break}case w.IN_HEAD_NO_SCRIPT:{X5(this,Z);break}case w.AFTER_HEAD:{K5(this,Z);break}case w.IN_BODY:{z4(this,Z);break}case w.TEXT:{c5(this,Z);break}case w.IN_TABLE:{x1(this,Z);break}case w.IN_TABLE_TEXT:{z1(this,Z);break}case w.IN_CAPTION:{e5(this,Z);break}case w.IN_COLUMN_GROUP:{ZQ(this,Z);break}case w.IN_TABLE_BODY:{N2(this,Z);break}case w.IN_ROW:{k8(this,Z);break}case w.IN_CELL:{QQ(this,Z);break}case w.IN_SELECT:{S8(this,Z);break}case w.IN_SELECT_IN_TABLE:{WQ(this,Z);break}case w.IN_TEMPLATE:{YQ(this,Z);break}case w.AFTER_BODY:{T8(this,Z);break}case w.IN_FRAMESET:{HQ(this,Z);break}case w.AFTER_FRAMESET:{zQ(this,Z);break}case w.AFTER_AFTER_BODY:{Y4(this,Z);break}default:}}onEof(Z){switch(this.insertionMode){case w.INITIAL:{w1(this,Z);break}case w.BEFORE_HTML:{U1(this,Z);break}case w.BEFORE_HEAD:{F1(this,Z);break}case w.IN_HEAD:{B1(this,Z);break}case w.IN_HEAD_NO_SCRIPT:{L1(this,Z);break}case w.AFTER_HEAD:{q1(this,Z);break}case w.IN_BODY:case w.IN_TABLE:case w.IN_CAPTION:case w.IN_COLUMN_GROUP:case w.IN_TABLE_BODY:case w.IN_ROW:case w.IN_CELL:case w.IN_SELECT:case w.IN_SELECT_IN_TABLE:{$8(this,Z);break}case w.TEXT:{l5(this,Z);break}case w.IN_TABLE_TEXT:{z1(this,Z);break}case w.IN_TEMPLATE:{I8(this,Z);break}case w.AFTER_BODY:case w.IN_FRAMESET:case w.AFTER_FRAMESET:case w.AFTER_AFTER_BODY:case w.AFTER_AFTER_FRAMESET:{g2(this,Z);break}default:}}onWhitespaceCharacter(Z){if(this.skipNextNewLine){if(this.skipNextNewLine=!1,Z.chars.charCodeAt(0)===V.LINE_FEED){if(Z.chars.length===1)return;Z.chars=Z.chars.substr(1)}}if(this.tokenizer.inForeignNode){this._insertCharacters(Z);return}switch(this.insertionMode){case w.IN_HEAD:case w.IN_HEAD_NO_SCRIPT:case w.AFTER_HEAD:case w.TEXT:case w.IN_COLUMN_GROUP:case w.IN_SELECT:case w.IN_SELECT_IN_TABLE:case w.IN_FRAMESET:case w.AFTER_FRAMESET:{this._insertCharacters(Z);break}case w.IN_BODY:case w.IN_CAPTION:case w.IN_CELL:case w.IN_TEMPLATE:case w.AFTER_BODY:case w.AFTER_AFTER_BODY:case w.AFTER_AFTER_FRAMESET:{h8(this,Z);break}case w.IN_TABLE:case w.IN_TABLE_BODY:case w.IN_ROW:{h2(this,Z);break}case w.IN_TABLE_TEXT:{G8(this,Z);break}default:}}}function AX(Z,X){let Q=Z.activeFormattingElements.getElementEntryInScopeWithTagName(X.tagName);if(Q){if(!Z.openElements.contains(Q.element))Z.activeFormattingElements.removeEntry(Q),Q=null;else if(!Z.openElements.hasInScope(X.tagID))Q=null}else g8(Z,X);return Q}function uX(Z,X){let Q=null,K=Z.openElements.stackTop;for(;K>=0;K--){let J=Z.openElements.items[K];if(J===X.element)break;if(Z._isSpecialElement(J,Z.openElements.tagIDs[K]))Q=J}if(!Q)Z.openElements.shortenToLength(Math.max(K,0)),Z.activeFormattingElements.removeEntry(X);return Q}function cX(Z,X,Q){let K=X,J=Z.openElements.getCommonAncestor(X);for(let Y=0,j=J;j!==Q;Y++,j=J){J=Z.openElements.getCommonAncestor(j);let U=Z.activeFormattingElements.getElementEntry(j),B=U&&Y>=IX;if(!U||B){if(B)Z.activeFormattingElements.removeEntry(U);Z.openElements.remove(j)}else{if(j=lX(Z,U),K===X)Z.activeFormattingElements.bookmark=U;Z.treeAdapter.detachNode(K),Z.treeAdapter.appendChild(j,K),K=j}}return K}function lX(Z,X){let Q=Z.treeAdapter.getNamespaceURI(X.element),K=Z.treeAdapter.createElement(X.token.tagName,Q,X.token.attrs);return Z.openElements.replace(X.element,K),X.element=K,K}function iX(Z,X,Q){let K=Z.treeAdapter.getTagName(X),J=S0(K);if(Z._isElementCausesFosterParenting(J))Z._fosterParentElement(Q);else{let Y=Z.treeAdapter.getNamespaceURI(X);if(J===W.TEMPLATE&&Y===P.HTML)X=Z.treeAdapter.getTemplateContent(X);Z.treeAdapter.appendChild(X,Q)}}function dX(Z,X,Q){let K=Z.treeAdapter.getNamespaceURI(Q.element),{token:J}=Q,Y=Z.treeAdapter.createElement(J.tagName,K,J.attrs);Z._adoptNodes(X,Y),Z.treeAdapter.appendChild(X,Y),Z.activeFormattingElements.insertElementAfterBookmark(Y,J),Z.activeFormattingElements.removeEntry(Q),Z.openElements.remove(Q.element),Z.openElements.insertAfter(X,Y,J.tagID)}function D2(Z,X){for(let Q=0;Q<SX;Q++){let K=AX(Z,X);if(!K)break;let J=uX(Z,K);if(!J)break;Z.activeFormattingElements.bookmark=K;let Y=cX(Z,J,K.element),j=Z.openElements.getCommonAncestor(K.element);if(Z.treeAdapter.detachNode(Y),j)iX(Z,j,Y);dX(Z,J,K)}}function M2(Z,X){Z._appendCommentNode(X,Z.openElements.currentTmplContentOrNode)}function aX(Z,X){Z._appendCommentNode(X,Z.openElements.items[0])}function pX(Z,X){Z._appendCommentNode(X,Z.document)}function g2(Z,X){if(Z.stopped=!0,X.location){let Q=Z.fragmentContext?0:2;for(let K=Z.openElements.stackTop;K>=Q;K--)Z._setEndLocation(Z.openElements.items[K],X);if(!Z.fragmentContext&&Z.openElements.stackTop>=0){let K=Z.openElements.items[0],J=Z.treeAdapter.getNodeSourceCodeLocation(K);if(J&&!J.endTag){if(Z._setEndLocation(K,X),Z.openElements.stackTop>=1){let Y=Z.openElements.items[1],j=Z.treeAdapter.getNodeSourceCodeLocation(Y);if(j&&!j.endTag)Z._setEndLocation(Y,X)}}}}}function rX(Z,X){Z._setDocumentType(X);let Q=X.forceQuirks?Z0.QUIRKS:q8(X);if(!L8(X))Z._err(X,L.nonConformingDoctype);Z.treeAdapter.setDocumentMode(Z.document,Q),Z.insertionMode=w.BEFORE_HTML}function w1(Z,X){Z._err(X,L.missingDoctype,!0),Z.treeAdapter.setDocumentMode(Z.document,Z0.QUIRKS),Z.insertionMode=w.BEFORE_HTML,Z._processToken(X)}function sX(Z,X){if(X.tagID===W.HTML)Z._insertElement(X,P.HTML),Z.insertionMode=w.BEFORE_HEAD;else U1(Z,X)}function oX(Z,X){let Q=X.tagID;if(Q===W.HTML||Q===W.HEAD||Q===W.BODY||Q===W.BR)U1(Z,X)}function U1(Z,X){Z._insertFakeRootElement(),Z.insertionMode=w.BEFORE_HEAD,Z._processToken(X)}function nX(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.HEAD:{Z._insertElement(X,P.HTML),Z.headElement=Z.openElements.current,Z.insertionMode=w.IN_HEAD;break}default:F1(Z,X)}}function tX(Z,X){let Q=X.tagID;if(Q===W.HEAD||Q===W.BODY||Q===W.HTML||Q===W.BR)F1(Z,X);else Z._err(X,L.endTagWithoutMatchingOpenElement)}function F1(Z,X){Z._insertFakeElement(F.HEAD,W.HEAD),Z.headElement=Z.openElements.current,Z.insertionMode=w.IN_HEAD,Z._processToken(X)}function z0(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.BASE:case W.BASEFONT:case W.BGSOUND:case W.LINK:case W.META:{Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.TITLE:{Z._switchToTextParsing(X,n.RCDATA);break}case W.NOSCRIPT:{if(Z.options.scriptingEnabled)Z._switchToTextParsing(X,n.RAWTEXT);else Z._insertElement(X,P.HTML),Z.insertionMode=w.IN_HEAD_NO_SCRIPT;break}case W.NOFRAMES:case W.STYLE:{Z._switchToTextParsing(X,n.RAWTEXT);break}case W.SCRIPT:{Z._switchToTextParsing(X,n.SCRIPT_DATA);break}case W.TEMPLATE:{Z._insertTemplate(X),Z.activeFormattingElements.insertMarker(),Z.framesetOk=!1,Z.insertionMode=w.IN_TEMPLATE,Z.tmplInsertionModeStack.unshift(w.IN_TEMPLATE);break}case W.HEAD:{Z._err(X,L.misplacedStartTagForHeadElement);break}default:B1(Z,X)}}function eX(Z,X){switch(X.tagID){case W.HEAD:{Z.openElements.pop(),Z.insertionMode=w.AFTER_HEAD;break}case W.BODY:case W.BR:case W.HTML:{B1(Z,X);break}case W.TEMPLATE:{I0(Z,X);break}default:Z._err(X,L.endTagWithoutMatchingOpenElement)}}function I0(Z,X){if(Z.openElements.tmplCount>0){if(Z.openElements.generateImpliedEndTagsThoroughly(),Z.openElements.currentTagId!==W.TEMPLATE)Z._err(X,L.closingOfElementWithOpenChildElements);Z.openElements.popUntilTagNamePopped(W.TEMPLATE),Z.activeFormattingElements.clearToLastMarker(),Z.tmplInsertionModeStack.shift(),Z._resetInsertionMode()}else Z._err(X,L.endTagWithoutMatchingOpenElement)}function B1(Z,X){Z.openElements.pop(),Z.insertionMode=w.AFTER_HEAD,Z._processToken(X)}function Z5(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.BASEFONT:case W.BGSOUND:case W.HEAD:case W.LINK:case W.META:case W.NOFRAMES:case W.STYLE:{z0(Z,X);break}case W.NOSCRIPT:{Z._err(X,L.nestedNoscriptInHead);break}default:L1(Z,X)}}function X5(Z,X){switch(X.tagID){case W.NOSCRIPT:{Z.openElements.pop(),Z.insertionMode=w.IN_HEAD;break}case W.BR:{L1(Z,X);break}default:Z._err(X,L.endTagWithoutMatchingOpenElement)}}function L1(Z,X){let Q=X.type===S.EOF?L.openElementsLeftAfterEof:L.disallowedContentInNoscriptInHead;Z._err(X,Q),Z.openElements.pop(),Z.insertionMode=w.IN_HEAD,Z._processToken(X)}function Q5(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.BODY:{Z._insertElement(X,P.HTML),Z.framesetOk=!1,Z.insertionMode=w.IN_BODY;break}case W.FRAMESET:{Z._insertElement(X,P.HTML),Z.insertionMode=w.IN_FRAMESET;break}case W.BASE:case W.BASEFONT:case W.BGSOUND:case W.LINK:case W.META:case W.NOFRAMES:case W.SCRIPT:case W.STYLE:case W.TEMPLATE:case W.TITLE:{Z._err(X,L.abandonedHeadElementChild),Z.openElements.push(Z.headElement,W.HEAD),z0(Z,X),Z.openElements.remove(Z.headElement);break}case W.HEAD:{Z._err(X,L.misplacedStartTagForHeadElement);break}default:q1(Z,X)}}function K5(Z,X){switch(X.tagID){case W.BODY:case W.HTML:case W.BR:{q1(Z,X);break}case W.TEMPLATE:{I0(Z,X);break}default:Z._err(X,L.endTagWithoutMatchingOpenElement)}}function q1(Z,X){Z._insertFakeElement(F.BODY,W.BODY),Z.insertionMode=w.IN_BODY,w4(Z,X)}function w4(Z,X){switch(X.type){case S.CHARACTER:{M8(Z,X);break}case S.WHITESPACE_CHARACTER:{h8(Z,X);break}case S.COMMENT:{M2(Z,X);break}case S.START_TAG:{t(Z,X);break}case S.END_TAG:{z4(Z,X);break}case S.EOF:{$8(Z,X);break}default:}}function h8(Z,X){Z._reconstructActiveFormattingElements(),Z._insertCharacters(X)}function M8(Z,X){Z._reconstructActiveFormattingElements(),Z._insertCharacters(X),Z.framesetOk=!1}function W5(Z,X){if(Z.openElements.tmplCount===0)Z.treeAdapter.adoptAttributes(Z.openElements.items[0],X.attrs)}function J5(Z,X){let Q=Z.openElements.tryPeekProperlyNestedBodyElement();if(Q&&Z.openElements.tmplCount===0)Z.framesetOk=!1,Z.treeAdapter.adoptAttributes(Q,X.attrs)}function Y5(Z,X){let Q=Z.openElements.tryPeekProperlyNestedBodyElement();if(Z.framesetOk&&Q)Z.treeAdapter.detachNode(Q),Z.openElements.popAllUpToHtmlElement(),Z._insertElement(X,P.HTML),Z.insertionMode=w.IN_FRAMESET}function V5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML)}function j5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();if(Z.openElements.currentTagId!==void 0&&j1.has(Z.openElements.currentTagId))Z.openElements.pop();Z._insertElement(X,P.HTML)}function H5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML),Z.skipNextNewLine=!0,Z.framesetOk=!1}function w5(Z,X){let Q=Z.openElements.tmplCount>0;if(!Z.formElement||Q){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();if(Z._insertElement(X,P.HTML),!Q)Z.formElement=Z.openElements.current}}function z5(Z,X){Z.framesetOk=!1;let Q=X.tagID;for(let K=Z.openElements.stackTop;K>=0;K--){let J=Z.openElements.tagIDs[K];if(Q===W.LI&&J===W.LI||(Q===W.DD||Q===W.DT)&&(J===W.DD||J===W.DT)){Z.openElements.generateImpliedEndTagsWithExclusion(J),Z.openElements.popUntilTagNamePopped(J);break}if(J!==W.ADDRESS&&J!==W.DIV&&J!==W.P&&Z._isSpecialElement(Z.openElements.items[K],J))break}if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML)}function U5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML),Z.tokenizer.state=n.PLAINTEXT}function F5(Z,X){if(Z.openElements.hasInScope(W.BUTTON))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(W.BUTTON);Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.framesetOk=!1}function B5(Z,X){let Q=Z.activeFormattingElements.getElementEntryInScopeWithTagName(F.A);if(Q)D2(Z,X),Z.openElements.remove(Q.element),Z.activeFormattingElements.removeEntry(Q);Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,X)}function L5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,X)}function q5(Z,X){if(Z._reconstructActiveFormattingElements(),Z.openElements.hasInScope(W.NOBR))D2(Z,X),Z._reconstructActiveFormattingElements();Z._insertElement(X,P.HTML),Z.activeFormattingElements.pushElement(Z.openElements.current,X)}function x5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.activeFormattingElements.insertMarker(),Z.framesetOk=!1}function P5(Z,X){if(Z.treeAdapter.getDocumentMode(Z.document)!==Z0.QUIRKS&&Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._insertElement(X,P.HTML),Z.framesetOk=!1,Z.insertionMode=w.IN_TABLE}function N8(Z,X){Z._reconstructActiveFormattingElements(),Z._appendElement(X,P.HTML),Z.framesetOk=!1,X.ackSelfClosing=!0}function D8(Z){let X=X4(Z,P0.TYPE);return X!=null&&X.toLowerCase()===_X}function f5(Z,X){if(Z._reconstructActiveFormattingElements(),Z._appendElement(X,P.HTML),!D8(X))Z.framesetOk=!1;X.ackSelfClosing=!0}function y5(Z,X){Z._appendElement(X,P.HTML),X.ackSelfClosing=!0}function O5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._appendElement(X,P.HTML),Z.framesetOk=!1,X.ackSelfClosing=!0}function b5(Z,X){X.tagName=F.IMG,X.tagID=W.IMG,N8(Z,X)}function v5(Z,X){Z._insertElement(X,P.HTML),Z.skipNextNewLine=!0,Z.tokenizer.state=n.RCDATA,Z.originalInsertionMode=Z.insertionMode,Z.framesetOk=!1,Z.insertionMode=w.TEXT}function R5(Z,X){if(Z.openElements.hasInButtonScope(W.P))Z._closePElement();Z._reconstructActiveFormattingElements(),Z.framesetOk=!1,Z._switchToTextParsing(X,n.RAWTEXT)}function C5(Z,X){Z.framesetOk=!1,Z._switchToTextParsing(X,n.RAWTEXT)}function v8(Z,X){Z._switchToTextParsing(X,n.RAWTEXT)}function h5(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML),Z.framesetOk=!1,Z.insertionMode=Z.insertionMode===w.IN_TABLE||Z.insertionMode===w.IN_CAPTION||Z.insertionMode===w.IN_TABLE_BODY||Z.insertionMode===w.IN_ROW||Z.insertionMode===w.IN_CELL?w.IN_SELECT_IN_TABLE:w.IN_SELECT}function M5(Z,X){if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML)}function N5(Z,X){if(Z.openElements.hasInScope(W.RUBY))Z.openElements.generateImpliedEndTags();Z._insertElement(X,P.HTML)}function D5(Z,X){if(Z.openElements.hasInScope(W.RUBY))Z.openElements.generateImpliedEndTagsWithExclusion(W.RTC);Z._insertElement(X,P.HTML)}function g5(Z,X){if(Z._reconstructActiveFormattingElements(),R2(X),J4(X),X.selfClosing)Z._appendElement(X,P.MATHML);else Z._insertElement(X,P.MATHML);X.ackSelfClosing=!0}function $5(Z,X){if(Z._reconstructActiveFormattingElements(),C2(X),J4(X),X.selfClosing)Z._appendElement(X,P.SVG);else Z._insertElement(X,P.SVG);X.ackSelfClosing=!0}function R8(Z,X){Z._reconstructActiveFormattingElements(),Z._insertElement(X,P.HTML)}function t(Z,X){switch(X.tagID){case W.I:case W.S:case W.B:case W.U:case W.EM:case W.TT:case W.BIG:case W.CODE:case W.FONT:case W.SMALL:case W.STRIKE:case W.STRONG:{L5(Z,X);break}case W.A:{B5(Z,X);break}case W.H1:case W.H2:case W.H3:case W.H4:case W.H5:case W.H6:{j5(Z,X);break}case W.P:case W.DL:case W.OL:case W.UL:case W.DIV:case W.DIR:case W.NAV:case W.MAIN:case W.MENU:case W.ASIDE:case W.CENTER:case W.FIGURE:case W.FOOTER:case W.HEADER:case W.HGROUP:case W.DIALOG:case W.DETAILS:case W.ADDRESS:case W.ARTICLE:case W.SEARCH:case W.SECTION:case W.SUMMARY:case W.FIELDSET:case W.BLOCKQUOTE:case W.FIGCAPTION:{V5(Z,X);break}case W.LI:case W.DD:case W.DT:{z5(Z,X);break}case W.BR:case W.IMG:case W.WBR:case W.AREA:case W.EMBED:case W.KEYGEN:{N8(Z,X);break}case W.HR:{O5(Z,X);break}case W.RB:case W.RTC:{N5(Z,X);break}case W.RT:case W.RP:{D5(Z,X);break}case W.PRE:case W.LISTING:{H5(Z,X);break}case W.XMP:{R5(Z,X);break}case W.SVG:{$5(Z,X);break}case W.HTML:{W5(Z,X);break}case W.BASE:case W.LINK:case W.META:case W.STYLE:case W.TITLE:case W.SCRIPT:case W.BGSOUND:case W.BASEFONT:case W.TEMPLATE:{z0(Z,X);break}case W.BODY:{J5(Z,X);break}case W.FORM:{w5(Z,X);break}case W.NOBR:{q5(Z,X);break}case W.MATH:{g5(Z,X);break}case W.TABLE:{P5(Z,X);break}case W.INPUT:{f5(Z,X);break}case W.PARAM:case W.TRACK:case W.SOURCE:{y5(Z,X);break}case W.IMAGE:{b5(Z,X);break}case W.BUTTON:{F5(Z,X);break}case W.APPLET:case W.OBJECT:case W.MARQUEE:{x5(Z,X);break}case W.IFRAME:{C5(Z,X);break}case W.SELECT:{h5(Z,X);break}case W.OPTION:case W.OPTGROUP:{M5(Z,X);break}case W.NOEMBED:case W.NOFRAMES:{v8(Z,X);break}case W.FRAMESET:{Y5(Z,X);break}case W.TEXTAREA:{v5(Z,X);break}case W.NOSCRIPT:{if(Z.options.scriptingEnabled)v8(Z,X);else R8(Z,X);break}case W.PLAINTEXT:{U5(Z,X);break}case W.COL:case W.TH:case W.TD:case W.TR:case W.HEAD:case W.FRAME:case W.TBODY:case W.TFOOT:case W.THEAD:case W.CAPTION:case W.COLGROUP:break;default:R8(Z,X)}}function G5(Z,X){if(Z.openElements.hasInScope(W.BODY)){if(Z.insertionMode=w.AFTER_BODY,Z.options.sourceCodeLocationInfo){let Q=Z.openElements.tryPeekProperlyNestedBodyElement();if(Q)Z._setEndLocation(Q,X)}}}function E5(Z,X){if(Z.openElements.hasInScope(W.BODY))Z.insertionMode=w.AFTER_BODY,T8(Z,X)}function m5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(Q)}function k5(Z){let X=Z.openElements.tmplCount>0,{formElement:Q}=Z;if(!X)Z.formElement=null;if((Q||X)&&Z.openElements.hasInScope(W.FORM)){if(Z.openElements.generateImpliedEndTags(),X)Z.openElements.popUntilTagNamePopped(W.FORM);else if(Q)Z.openElements.remove(Q)}}function _5(Z){if(!Z.openElements.hasInButtonScope(W.P))Z._insertFakeElement(F.P,W.P);Z._closePElement()}function S5(Z){if(Z.openElements.hasInListItemScope(W.LI))Z.openElements.generateImpliedEndTagsWithExclusion(W.LI),Z.openElements.popUntilTagNamePopped(W.LI)}function I5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTagsWithExclusion(Q),Z.openElements.popUntilTagNamePopped(Q)}function T5(Z){if(Z.openElements.hasNumberedHeaderInScope())Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilNumberedHeaderPopped()}function A5(Z,X){let Q=X.tagID;if(Z.openElements.hasInScope(Q))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(Q),Z.activeFormattingElements.clearToLastMarker()}function u5(Z){Z._reconstructActiveFormattingElements(),Z._insertFakeElement(F.BR,W.BR),Z.openElements.pop(),Z.framesetOk=!1}function g8(Z,X){let{tagName:Q,tagID:K}=X;for(let J=Z.openElements.stackTop;J>0;J--){let Y=Z.openElements.items[J],j=Z.openElements.tagIDs[J];if(K===j&&(K!==W.UNKNOWN||Z.treeAdapter.getTagName(Y)===Q)){if(Z.openElements.generateImpliedEndTagsWithExclusion(K),Z.openElements.stackTop>=J)Z.openElements.shortenToLength(J);break}if(Z._isSpecialElement(Y,j))break}}function z4(Z,X){switch(X.tagID){case W.A:case W.B:case W.I:case W.S:case W.U:case W.EM:case W.TT:case W.BIG:case W.CODE:case W.FONT:case W.NOBR:case W.SMALL:case W.STRIKE:case W.STRONG:{D2(Z,X);break}case W.P:{_5(Z);break}case W.DL:case W.UL:case W.OL:case W.DIR:case W.DIV:case W.NAV:case W.PRE:case W.MAIN:case W.MENU:case W.ASIDE:case W.BUTTON:case W.CENTER:case W.FIGURE:case W.FOOTER:case W.HEADER:case W.HGROUP:case W.DIALOG:case W.ADDRESS:case W.ARTICLE:case W.DETAILS:case W.SEARCH:case W.SECTION:case W.SUMMARY:case W.LISTING:case W.FIELDSET:case W.BLOCKQUOTE:case W.FIGCAPTION:{m5(Z,X);break}case W.LI:{S5(Z);break}case W.DD:case W.DT:{I5(Z,X);break}case W.H1:case W.H2:case W.H3:case W.H4:case W.H5:case W.H6:{T5(Z);break}case W.BR:{u5(Z);break}case W.BODY:{G5(Z,X);break}case W.HTML:{E5(Z,X);break}case W.FORM:{k5(Z);break}case W.APPLET:case W.OBJECT:case W.MARQUEE:{A5(Z,X);break}case W.TEMPLATE:{I0(Z,X);break}default:g8(Z,X)}}function $8(Z,X){if(Z.tmplInsertionModeStack.length>0)I8(Z,X);else g2(Z,X)}function c5(Z,X){var Q;if(X.tagID===W.SCRIPT)(Q=Z.scriptHandler)===null||Q===void 0||Q.call(Z,Z.openElements.current);Z.openElements.pop(),Z.insertionMode=Z.originalInsertionMode}function l5(Z,X){Z._err(X,L.eofInElementThatCanContainOnlyText),Z.openElements.pop(),Z.insertionMode=Z.originalInsertionMode,Z.onEof(X)}function h2(Z,X){if(Z.openElements.currentTagId!==void 0&&C8.has(Z.openElements.currentTagId))switch(Z.pendingCharacterTokens.length=0,Z.hasNonWhitespacePendingCharacterToken=!1,Z.originalInsertionMode=Z.insertionMode,Z.insertionMode=w.IN_TABLE_TEXT,X.type){case S.CHARACTER:{E8(Z,X);break}case S.WHITESPACE_CHARACTER:{G8(Z,X);break}}else P1(Z,X)}function i5(Z,X){Z.openElements.clearBackToTableContext(),Z.activeFormattingElements.insertMarker(),Z._insertElement(X,P.HTML),Z.insertionMode=w.IN_CAPTION}function d5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertElement(X,P.HTML),Z.insertionMode=w.IN_COLUMN_GROUP}function a5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(F.COLGROUP,W.COLGROUP),Z.insertionMode=w.IN_COLUMN_GROUP,$2(Z,X)}function p5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertElement(X,P.HTML),Z.insertionMode=w.IN_TABLE_BODY}function r5(Z,X){Z.openElements.clearBackToTableContext(),Z._insertFakeElement(F.TBODY,W.TBODY),Z.insertionMode=w.IN_TABLE_BODY,U4(Z,X)}function s5(Z,X){if(Z.openElements.hasInTableScope(W.TABLE))Z.openElements.popUntilTagNamePopped(W.TABLE),Z._resetInsertionMode(),Z._processStartTag(X)}function o5(Z,X){if(D8(X))Z._appendElement(X,P.HTML);else P1(Z,X);X.ackSelfClosing=!0}function n5(Z,X){if(!Z.formElement&&Z.openElements.tmplCount===0)Z._insertElement(X,P.HTML),Z.formElement=Z.openElements.current,Z.openElements.pop()}function a0(Z,X){switch(X.tagID){case W.TD:case W.TH:case W.TR:{r5(Z,X);break}case W.STYLE:case W.SCRIPT:case W.TEMPLATE:{z0(Z,X);break}case W.COL:{a5(Z,X);break}case W.FORM:{n5(Z,X);break}case W.TABLE:{s5(Z,X);break}case W.TBODY:case W.TFOOT:case W.THEAD:{p5(Z,X);break}case W.INPUT:{o5(Z,X);break}case W.CAPTION:{i5(Z,X);break}case W.COLGROUP:{d5(Z,X);break}default:P1(Z,X)}}function x1(Z,X){switch(X.tagID){case W.TABLE:{if(Z.openElements.hasInTableScope(W.TABLE))Z.openElements.popUntilTagNamePopped(W.TABLE),Z._resetInsertionMode();break}case W.TEMPLATE:{I0(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:case W.TBODY:case W.TD:case W.TFOOT:case W.TH:case W.THEAD:case W.TR:break;default:P1(Z,X)}}function P1(Z,X){let Q=Z.fosterParentingEnabled;Z.fosterParentingEnabled=!0,w4(Z,X),Z.fosterParentingEnabled=Q}function G8(Z,X){Z.pendingCharacterTokens.push(X)}function E8(Z,X){Z.pendingCharacterTokens.push(X),Z.hasNonWhitespacePendingCharacterToken=!0}function z1(Z,X){let Q=0;if(Z.hasNonWhitespacePendingCharacterToken)for(;Q<Z.pendingCharacterTokens.length;Q++)P1(Z,Z.pendingCharacterTokens[Q]);else for(;Q<Z.pendingCharacterTokens.length;Q++)Z._insertCharacters(Z.pendingCharacterTokens[Q]);Z.insertionMode=Z.originalInsertionMode,Z._processToken(X)}var m8=new Set([W.CAPTION,W.COL,W.COLGROUP,W.TBODY,W.TD,W.TFOOT,W.TH,W.THEAD,W.TR]);function t5(Z,X){let Q=X.tagID;if(m8.has(Q)){if(Z.openElements.hasInTableScope(W.CAPTION))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(W.CAPTION),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=w.IN_TABLE,a0(Z,X)}else t(Z,X)}function e5(Z,X){let Q=X.tagID;switch(Q){case W.CAPTION:case W.TABLE:{if(Z.openElements.hasInTableScope(W.CAPTION)){if(Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(W.CAPTION),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=w.IN_TABLE,Q===W.TABLE)x1(Z,X)}break}case W.BODY:case W.COL:case W.COLGROUP:case W.HTML:case W.TBODY:case W.TD:case W.TFOOT:case W.TH:case W.THEAD:case W.TR:break;default:z4(Z,X)}}function $2(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.COL:{Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.TEMPLATE:{z0(Z,X);break}default:V4(Z,X)}}function ZQ(Z,X){switch(X.tagID){case W.COLGROUP:{if(Z.openElements.currentTagId===W.COLGROUP)Z.openElements.pop(),Z.insertionMode=w.IN_TABLE;break}case W.TEMPLATE:{I0(Z,X);break}case W.COL:break;default:V4(Z,X)}}function V4(Z,X){if(Z.openElements.currentTagId===W.COLGROUP)Z.openElements.pop(),Z.insertionMode=w.IN_TABLE,Z._processToken(X)}function U4(Z,X){switch(X.tagID){case W.TR:{Z.openElements.clearBackToTableBodyContext(),Z._insertElement(X,P.HTML),Z.insertionMode=w.IN_ROW;break}case W.TH:case W.TD:{Z.openElements.clearBackToTableBodyContext(),Z._insertFakeElement(F.TR,W.TR),Z.insertionMode=w.IN_ROW,F4(Z,X);break}case W.CAPTION:case W.COL:case W.COLGROUP:case W.TBODY:case W.TFOOT:case W.THEAD:{if(Z.openElements.hasTableBodyContextInTableScope())Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=w.IN_TABLE,a0(Z,X);break}default:a0(Z,X)}}function N2(Z,X){let Q=X.tagID;switch(X.tagID){case W.TBODY:case W.TFOOT:case W.THEAD:{if(Z.openElements.hasInTableScope(Q))Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=w.IN_TABLE;break}case W.TABLE:{if(Z.openElements.hasTableBodyContextInTableScope())Z.openElements.clearBackToTableBodyContext(),Z.openElements.pop(),Z.insertionMode=w.IN_TABLE,x1(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:case W.TD:case W.TH:case W.TR:break;default:x1(Z,X)}}function F4(Z,X){switch(X.tagID){case W.TH:case W.TD:{Z.openElements.clearBackToTableRowContext(),Z._insertElement(X,P.HTML),Z.insertionMode=w.IN_CELL,Z.activeFormattingElements.insertMarker();break}case W.CAPTION:case W.COL:case W.COLGROUP:case W.TBODY:case W.TFOOT:case W.THEAD:case W.TR:{if(Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=w.IN_TABLE_BODY,U4(Z,X);break}default:a0(Z,X)}}function k8(Z,X){switch(X.tagID){case W.TR:{if(Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=w.IN_TABLE_BODY;break}case W.TABLE:{if(Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=w.IN_TABLE_BODY,N2(Z,X);break}case W.TBODY:case W.TFOOT:case W.THEAD:{if(Z.openElements.hasInTableScope(X.tagID)||Z.openElements.hasInTableScope(W.TR))Z.openElements.clearBackToTableRowContext(),Z.openElements.pop(),Z.insertionMode=w.IN_TABLE_BODY,N2(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:case W.TD:case W.TH:break;default:x1(Z,X)}}function XQ(Z,X){let Q=X.tagID;if(m8.has(Q)){if(Z.openElements.hasInTableScope(W.TD)||Z.openElements.hasInTableScope(W.TH))Z._closeTableCell(),F4(Z,X)}else t(Z,X)}function QQ(Z,X){let Q=X.tagID;switch(Q){case W.TD:case W.TH:{if(Z.openElements.hasInTableScope(Q))Z.openElements.generateImpliedEndTags(),Z.openElements.popUntilTagNamePopped(Q),Z.activeFormattingElements.clearToLastMarker(),Z.insertionMode=w.IN_ROW;break}case W.TABLE:case W.TBODY:case W.TFOOT:case W.THEAD:case W.TR:{if(Z.openElements.hasInTableScope(Q))Z._closeTableCell(),k8(Z,X);break}case W.BODY:case W.CAPTION:case W.COL:case W.COLGROUP:case W.HTML:break;default:z4(Z,X)}}function _8(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.OPTION:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();Z._insertElement(X,P.HTML);break}case W.OPTGROUP:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();if(Z.openElements.currentTagId===W.OPTGROUP)Z.openElements.pop();Z._insertElement(X,P.HTML);break}case W.HR:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();if(Z.openElements.currentTagId===W.OPTGROUP)Z.openElements.pop();Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.INPUT:case W.KEYGEN:case W.TEXTAREA:case W.SELECT:{if(Z.openElements.hasInSelectScope(W.SELECT)){if(Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode(),X.tagID!==W.SELECT)Z._processStartTag(X)}break}case W.SCRIPT:case W.TEMPLATE:{z0(Z,X);break}default:}}function S8(Z,X){switch(X.tagID){case W.OPTGROUP:{if(Z.openElements.stackTop>0&&Z.openElements.currentTagId===W.OPTION&&Z.openElements.tagIDs[Z.openElements.stackTop-1]===W.OPTGROUP)Z.openElements.pop();if(Z.openElements.currentTagId===W.OPTGROUP)Z.openElements.pop();break}case W.OPTION:{if(Z.openElements.currentTagId===W.OPTION)Z.openElements.pop();break}case W.SELECT:{if(Z.openElements.hasInSelectScope(W.SELECT))Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode();break}case W.TEMPLATE:{I0(Z,X);break}default:}}function KQ(Z,X){let Q=X.tagID;if(Q===W.CAPTION||Q===W.TABLE||Q===W.TBODY||Q===W.TFOOT||Q===W.THEAD||Q===W.TR||Q===W.TD||Q===W.TH)Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode(),Z._processStartTag(X);else _8(Z,X)}function WQ(Z,X){let Q=X.tagID;if(Q===W.CAPTION||Q===W.TABLE||Q===W.TBODY||Q===W.TFOOT||Q===W.THEAD||Q===W.TR||Q===W.TD||Q===W.TH){if(Z.openElements.hasInTableScope(Q))Z.openElements.popUntilTagNamePopped(W.SELECT),Z._resetInsertionMode(),Z.onEndTag(X)}else S8(Z,X)}function JQ(Z,X){switch(X.tagID){case W.BASE:case W.BASEFONT:case W.BGSOUND:case W.LINK:case W.META:case W.NOFRAMES:case W.SCRIPT:case W.STYLE:case W.TEMPLATE:case W.TITLE:{z0(Z,X);break}case W.CAPTION:case W.COLGROUP:case W.TBODY:case W.TFOOT:case W.THEAD:{Z.tmplInsertionModeStack[0]=w.IN_TABLE,Z.insertionMode=w.IN_TABLE,a0(Z,X);break}case W.COL:{Z.tmplInsertionModeStack[0]=w.IN_COLUMN_GROUP,Z.insertionMode=w.IN_COLUMN_GROUP,$2(Z,X);break}case W.TR:{Z.tmplInsertionModeStack[0]=w.IN_TABLE_BODY,Z.insertionMode=w.IN_TABLE_BODY,U4(Z,X);break}case W.TD:case W.TH:{Z.tmplInsertionModeStack[0]=w.IN_ROW,Z.insertionMode=w.IN_ROW,F4(Z,X);break}default:Z.tmplInsertionModeStack[0]=w.IN_BODY,Z.insertionMode=w.IN_BODY,t(Z,X)}}function YQ(Z,X){if(X.tagID===W.TEMPLATE)I0(Z,X)}function I8(Z,X){if(Z.openElements.tmplCount>0)Z.openElements.popUntilTagNamePopped(W.TEMPLATE),Z.activeFormattingElements.clearToLastMarker(),Z.tmplInsertionModeStack.shift(),Z._resetInsertionMode(),Z.onEof(X);else g2(Z,X)}function VQ(Z,X){if(X.tagID===W.HTML)t(Z,X);else j4(Z,X)}function T8(Z,X){var Q;if(X.tagID===W.HTML){if(!Z.fragmentContext)Z.insertionMode=w.AFTER_AFTER_BODY;if(Z.options.sourceCodeLocationInfo&&Z.openElements.tagIDs[0]===W.HTML){Z._setEndLocation(Z.openElements.items[0],X);let K=Z.openElements.items[1];if(K&&!((Q=Z.treeAdapter.getNodeSourceCodeLocation(K))===null||Q===void 0?void 0:Q.endTag))Z._setEndLocation(K,X)}}else j4(Z,X)}function j4(Z,X){Z.insertionMode=w.IN_BODY,w4(Z,X)}function jQ(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.FRAMESET:{Z._insertElement(X,P.HTML);break}case W.FRAME:{Z._appendElement(X,P.HTML),X.ackSelfClosing=!0;break}case W.NOFRAMES:{z0(Z,X);break}default:}}function HQ(Z,X){if(X.tagID===W.FRAMESET&&!Z.openElements.isRootHtmlElementCurrent()){if(Z.openElements.pop(),!Z.fragmentContext&&Z.openElements.currentTagId!==W.FRAMESET)Z.insertionMode=w.AFTER_FRAMESET}}function wQ(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.NOFRAMES:{z0(Z,X);break}default:}}function zQ(Z,X){if(X.tagID===W.HTML)Z.insertionMode=w.AFTER_AFTER_FRAMESET}function UQ(Z,X){if(X.tagID===W.HTML)t(Z,X);else Y4(Z,X)}function Y4(Z,X){Z.insertionMode=w.IN_BODY,w4(Z,X)}function FQ(Z,X){switch(X.tagID){case W.HTML:{t(Z,X);break}case W.NOFRAMES:{z0(Z,X);break}default:}}function BQ(Z,X){X.chars=u,Z._insertCharacters(X)}function LQ(Z,X){Z._insertCharacters(X),Z.framesetOk=!1}function A8(Z){while(Z.treeAdapter.getNamespaceURI(Z.openElements.current)!==P.HTML&&Z.openElements.currentTagId!==void 0&&!Z._isIntegrationPoint(Z.openElements.currentTagId,Z.openElements.current))Z.openElements.pop()}function qQ(Z,X){if(P8(X))A8(Z),Z._startTagOutsideForeignContent(X);else{let Q=Z._getAdjustedCurrentElement(),K=Z.treeAdapter.getNamespaceURI(Q);if(K===P.MATHML)R2(X);else if(K===P.SVG)f8(X),C2(X);if(J4(X),X.selfClosing)Z._appendElement(X,K);else Z._insertElement(X,K);X.ackSelfClosing=!0}}function xQ(Z,X){if(X.tagID===W.P||X.tagID===W.BR){A8(Z),Z._endTagOutsideForeignContent(X);return}for(let Q=Z.openElements.stackTop;Q>0;Q--){let K=Z.openElements.items[Q];if(Z.treeAdapter.getNamespaceURI(K)===P.HTML){Z._endTagOutsideForeignContent(X);break}let J=Z.treeAdapter.getTagName(K);if(J.toLowerCase()===X.tagName){X.tagName=J,Z.openElements.shortenToLength(Q);break}}}var lV=typeof String.prototype.codePointAt==="function"?(Z,X)=>Z.codePointAt(X):(Z,X)=>(Z.charCodeAt(X)&64512)===55296?(Z.charCodeAt(X)-55296)*1024+Z.charCodeAt(X+1)-56320+65536:Z.charCodeAt(X);function u8(Z,X){return function(K){let J,Y=0,j="";while(J=Z.exec(K)){if(Y!==J.index)j+=K.substring(Y,J.index);j+=X.get(J[0].charCodeAt(0)),Y=J.index+1}return j+K.substring(Y)}}var c8=u8(/["&\u00A0]/g,new Map([[34,"&quot;"],[38,"&amp;"],[160,"&nbsp;"]])),l8=u8(/[&<>\u00A0]/g,new Map([[38,"&amp;"],[60,"&lt;"],[62,"&gt;"],[160,"&nbsp;"]]));var PQ=new Set([F.AREA,F.BASE,F.BASEFONT,F.BGSOUND,F.BR,F.COL,F.EMBED,F.FRAME,F.HR,F.IMG,F.INPUT,F.KEYGEN,F.LINK,F.META,F.PARAM,F.SOURCE,F.TRACK,F.WBR]);function i8(Z,X){return X.treeAdapter.isElementNode(Z)&&X.treeAdapter.getNamespaceURI(Z)===P.HTML&&PQ.has(X.treeAdapter.getTagName(Z))}var fQ={treeAdapter:Y0,scriptingEnabled:!0};function p0(Z,X){let Q={...fQ,...X};if(i8(Z,Q))return"";return d8(Z,Q)}function d8(Z,X){let Q="",K=X.treeAdapter.isElementNode(Z)&&X.treeAdapter.getTagName(Z)===F.TEMPLATE&&X.treeAdapter.getNamespaceURI(Z)===P.HTML?X.treeAdapter.getTemplateContent(Z):Z,J=X.treeAdapter.getChildNodes(K);if(J)for(let Y of J)Q+=yQ(Y,X);return Q}function yQ(Z,X){if(X.treeAdapter.isElementNode(Z))return OQ(Z,X);if(X.treeAdapter.isTextNode(Z))return vQ(Z,X);if(X.treeAdapter.isCommentNode(Z))return RQ(Z,X);if(X.treeAdapter.isDocumentTypeNode(Z))return CQ(Z,X);return""}function OQ(Z,X){let Q=X.treeAdapter.getTagName(Z);return`<${Q}${bQ(Z,X)}>${i8(Z,X)?"":`${d8(Z,X)}</${Q}>`}`}function bQ(Z,{treeAdapter:X}){let Q="";for(let K of X.getAttrList(Z)){if(Q+=" ",K.namespace)switch(K.namespace){case P.XML:{Q+=`xml:${K.name}`;break}case P.XMLNS:{if(K.name!=="xmlns")Q+="xmlns:";Q+=K.name;break}case P.XLINK:{Q+=`xlink:${K.name}`;break}default:Q+=`${K.prefix}:${K.name}`}else Q+=K.name;Q+=`="${c8(K.value)}"`}return Q}function vQ(Z,X){let{treeAdapter:Q}=X,K=Q.getTextNodeContent(Z),J=Q.getParentNode(Z),Y=J&&Q.isElementNode(J)&&Q.getTagName(J);return Y&&Q.getNamespaceURI(J)===P.HTML&&Q8(Y,X.scriptingEnabled)?K:l8(K)}function RQ(Z,{treeAdapter:X}){return`<!--${X.getCommentNodeContent(Z)}-->`}function CQ(Z,{treeAdapter:X}){return`<!DOCTYPE ${X.getDocumentTypeNodeName(Z)}>`}function f1(Z,X){return H4.parse(Z,X)}import{z as C}from"zod";import*as r0 from"css-tree";var y1=20971520,hQ=new Set(["script","form","iframe","frame","frameset","object","embed","portal","base","audio","video","source","track","noscript","animate","animatemotion","animatetransform","discard","set"]),MQ=new Set(["action","cite","data","formaction","href","ping","poster","src","srcset","xlink:href"]),G2=/^data:(?:image\/(?:png|jpe?g|gif|webp|avif|bmp|x-icon)|font\/[a-z0-9.+-]+|application\/(?:font-[a-z0-9.+-]+|vnd\.ms-fontobject|x-font-[a-z0-9.+-]+));/i,NQ=new Set(["date","datetime-local","email","month","number","password","search","tel","text","time","url","week"]);function DQ(Z){return"tagName"in Z}function a8(Z,X){return Z.attrs.find((Q)=>Q.name.toLowerCase()===X.toLowerCase())?.value??null}function N0(Z,X,Q){let K=Z.attrs.find((J)=>J.name.toLowerCase()===X.toLowerCase());if(K)K.value=Q;else Z.attrs.push({name:X,value:Q})}function p8(Z){try{let X=r0.parse(Z,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return r0.walk(X,{enter(Q,K,J){if(Q.type==="Atrule"&&Q.name.toLowerCase()==="import"){J.remove(K);return}if(Q.type==="Declaration"){let Y=Q.property.toLowerCase();if(Y==="behavior"||Y==="-moz-binding")J.remove(K);return}if(Q.type==="Url"&&!G2.test(Q.value)){Q.value="data:,";return}if(Q.type==="String"&&this.function&&["image-set","-webkit-image-set","src"].includes(this.function.name.toLowerCase())&&!G2.test(Q.value))Q.value="data:,"}}),r0.generate(X)}catch{return""}}function gQ(Z){return p8(`x{${Z}}`).replace(/^x\{/,"").replace(/\}$/,"")}function $Q(Z){Z.attrs=Z.attrs.flatMap((Q)=>{let K=Q.name.toLowerCase();if(K.startsWith("on")||K==="srcdoc"||K==="nonce")return[];if(K==="style"){let J=gQ(Q.value);return J?[{...Q,value:J}]:[]}if(MQ.has(K)){if(K==="src"&&G2.test(Q.value))return[Q];if(K==="href"&&Q.value.startsWith("#"))return[Q];return[]}if(K==="target"||K==="download"||K==="http-equiv")return[];return[Q]});let X=Z.tagName.toLowerCase();if(X==="textarea"||X==="input"&&NQ.has((a8(Z,"type")??"text").toLowerCase()))N0(Z,"readonly",""),N0(Z,"aria-readonly","true"),N0(Z,"tabindex","-1");else if(X==="button"||X==="select"||X==="input")N0(Z,"disabled",""),N0(Z,"aria-disabled","true"),N0(Z,"tabindex","-1");if(a8(Z,"contenteditable")!==null)N0(Z,"contenteditable","false"),N0(Z,"tabindex","-1");if(Z.tagName==="style"&&Z.childNodes){for(let Q of Z.childNodes)if("value"in Q&&typeof Q.value==="string")Q.value=p8(Q.value)}}function r8(Z){let X=[];for(let Q of Z.childNodes){if(DQ(Q)){let K=Q.tagName.toLowerCase();if(hQ.has(K))continue;if(K==="meta"&&Q.attrs.some((J)=>J.name.toLowerCase()==="http-equiv"&&J.value.toLowerCase()!=="content-type"))continue;if(K==="link")continue;$Q(Q),r8(Q)}X.push(Q)}Z.childNodes=X}function s8(Z){if(Buffer.byteLength(Z,"utf8")>y1)throw Error("Browser snapshot exceeds the 20 MiB limit");let X=f1(Z);r8(X);let Q=p0(X);if(Buffer.byteLength(Q,"utf8")>y1)throw Error("Sanitized browser snapshot exceeds the 20 MiB limit");return Q}import*as s0 from"css-tree";function GQ(Z,X){if(!Z||Z.startsWith("#"))return Z;try{let Q=new URL(Z,X);if(Q.protocol!=="http:"&&Q.protocol!=="https:")return null;if(Q.username||Q.password)return null;return Q.href}catch{return null}}function o8(Z){try{let X=s0.parse(Z.css,{context:"stylesheet",parseCustomProperty:!0,positions:!1});return s0.walk(X,{enter(Q,K,J){if(Q.type==="Atrule"&&Q.name.toLowerCase()==="import"){if(K&&J)J.remove(K);return}if(Q.type==="Declaration"){let j=Q.property.toLowerCase();if(j==="behavior"||j==="-moz-binding"){if(K&&J)J.remove(K)}return}if(Q.type!=="Url")return;let Y=GQ(Q.value,Z.baseUrl);if(Y&&!Y.startsWith("#"))Q.value=Z.resourceUrl(Y);else if(!Y)Q.value="data:,"}}),s0.generate(X)}catch{return""}}var mQ=1200000,kQ=200,n8=8,_Q=65536,t8="ideawave-frame",SQ=C.object({browserNodeId:C.string().uuid(),url:C.string().max(4000)}).strict(),IQ=C.object({proxySessionId:C.string().uuid()}).strict(),TQ=C.object({proxySessionId:C.string().uuid(),revision:C.string().min(1).max(200),html:C.string().max(y1).optional()}).strict(),AQ=C.object({exact:C.string().min(1).max(2000),prefix:C.string().max(500).optional(),suffix:C.string().max(500).optional()}).strict(),E2=C.union([C.object({ref:C.string().min(1).max(200)}).strict(),C.object({selector:C.string().min(1).max(2000).nullable(),textQuote:AQ.nullable().optional(),framePath:C.array(C.string().max(1000)).max(12).optional()}).strict().refine((Z)=>Boolean(Z.selector||Z.textQuote),{message:"A selector or text quote is required"})]),uQ=C.discriminatedUnion("type",[C.object({type:C.literal("inspect")}).strict(),C.object({type:C.literal("locate"),target:E2}).strict(),C.object({type:C.literal("click"),target:E2}).strict(),C.object({type:C.literal("scroll"),deltaY:C.number().finite().min(-1e5).max(1e5).optional(),left:C.number().finite().min(0).max(1e7).optional(),top:C.number().finite().min(0).max(1e7).optional()}).strict(),C.object({type:C.literal("find"),query:C.string().max(500),direction:C.enum(["forward","backward"]).optional()}).strict(),C.object({type:C.literal("refresh")}).strict(),C.object({type:C.literal("back")}).strict(),C.object({type:C.literal("forward")}).strict(),C.object({type:C.literal("navigate"),url:C.string().max(4000)}).strict(),C.object({type:C.literal("highlight"),target:E2,color:C.string().regex(/^#[0-9a-fA-F]{6}$/)}).strict(),C.object({type:C.literal("selection")}).strict(),C.object({type:C.literal("snapshot")}).strict()]),cQ=C.object({type:C.literal("pointer"),phase:C.enum(["move","down","up"]),x:C.number().finite().min(0).max(2048),y:C.number().finite().min(0).max(2048),button:C.enum(["left","middle","right"]).optional(),buttons:C.number().int().min(0).max(31).optional()}).strict(),lQ=C.object({events:C.array(C.discriminatedUnion("type",[cQ,C.object({type:C.literal("wheel"),deltaX:C.number().finite().min(-1e5).max(1e5),deltaY:C.number().finite().min(-1e5).max(1e5)}).strict(),C.object({type:C.literal("key"),phase:C.enum(["down","up"]),key:C.string().min(1).max(64)}).strict(),C.object({type:C.literal("text"),text:C.string().max(5000)}).strict()])).max(64)}).strict(),iQ=C.object({width:C.number().finite().min(1).max(16384),height:C.number().finite().min(1).max(16384)}).strict();function dQ(){return S2(18).toString("hex")}function aQ(Z){if(!Z)return"";if(Z.startsWith("["))return Z.slice(1,Z.indexOf("]"));return Z.split(":")[0]?.toLowerCase()??""}function e8(Z){return typeof Z==="string"?Z:void 0}function pQ(Z){let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:"||X.username||X.password)throw Error("Browser proxy frontend origin is invalid");return X.origin}function rQ(Z){return Z.replace(/[&<>"']/g,(X)=>{if(X==="&")return"&amp;";if(X==="<")return"&lt;";if(X===">")return"&gt;";if(X==='"')return"&quot;";return"&#39;"})}function m2(Z){return JSON.stringify(Z).replace(/</g,"\\u003c")}function sQ(Z){let X=m2(Z.bridgeToken),Q=m2(Z.frontendOrigin),J=`session=${encodeURIComponent(Z.sessionId)}&token=${encodeURIComponent(Z.bridgeToken)}`,Y=rQ(Z.cspNonce);return`<!doctype html><html><head><meta charset="utf-8"><meta name="color-scheme" content="light"><style nonce="${Y}">*{box-sizing:border-box}html,body,#surface,#view{border:0;margin:0;width:100%;height:100%;overflow:hidden}body{background:#fff}#surface{position:relative;outline:0;touch-action:none;user-select:none}#view{display:block;object-fit:fill;pointer-events:none}#status{position:absolute;inset:auto 12px 12px;padding:8px 10px;border:1px solid #fecaca;border-radius:8px;background:rgba(255,255,255,.96);color:#b91c1c;font:12px system-ui;box-shadow:0 8px 24px rgba(15,23,42,.12)}#status[hidden]{display:none}</style></head><body><div id="surface" tabindex="0" role="application" aria-label="Live browser page"><img id="view" draggable="false" alt="" src="/browser/stream?${J}"><div id="status" hidden></div></div><script nonce="${Y}">(()=>{"use strict";const TOKEN=${X};const FRONTEND_ORIGIN=${Q};const SESSION=${m2(Z.sessionId)};const surface=document.getElementById("surface");const view=document.getElementById("view");const status=document.getElementById("status");let metrics={viewportWidth:720,viewportHeight:442};let queue=[];let flushPending=false;let inputChain=Promise.resolve();const endpoint=(path)=>path+"?session="+encodeURIComponent(SESSION);const headers={"content-type":"application/json","x-ideawave-browser-token":TOKEN};const post=async(path,body)=>{const response=await fetch(endpoint(path),{method:"POST",headers,body:JSON.stringify(body),credentials:"omit",cache:"no-store"});if(!response.ok)throw new Error((await response.text())||"Browser command failed");const type=response.headers.get("content-type")||"";return type.includes("application/json")?response.json():null};const sendParent=(event,payload,requestId)=>window.parent.postMessage({type:"ideawave-browser-event",token:TOKEN,event,payload,...(requestId?{requestId}:{})},FRONTEND_ORIGIN);const showError=(message)=>{status.textContent=String(message);status.hidden=false};const flush=()=>{flushPending=false;const batch=queue.splice(0,64);if(batch.length)inputChain=inputChain.then(()=>post("/browser/input",{events:batch})).catch(showError);if(queue.length){flushPending=true;requestAnimationFrame(flush)}};const enqueue=(event)=>{queue.push(event);if(flushPending)return;flushPending=true;requestAnimationFrame(flush)};const point=(event)=>{const rect=surface.getBoundingClientRect();return{x:Math.max(0,Math.min(metrics.viewportWidth,(event.clientX-rect.left)*metrics.viewportWidth/Math.max(1,rect.width))),y:Math.max(0,Math.min(metrics.viewportHeight,(event.clientY-rect.top)*metrics.viewportHeight/Math.max(1,rect.height)))}};const button=(value)=>value===1?"middle":value===2?"right":"left";for(const name of ["pointermove","pointerdown","pointerup"]){surface.addEventListener(name,event=>{if(name==="pointerdown"){surface.focus({preventScroll:true});surface.setPointerCapture(event.pointerId)}const p=point(event);enqueue({type:"pointer",phase:name.slice(7),x:p.x,y:p.y,button:button(event.button),buttons:event.buttons});event.preventDefault()})}surface.addEventListener("wheel",event=>{enqueue({type:"wheel",deltaX:event.deltaX,deltaY:event.deltaY});event.preventDefault()},{passive:false});surface.addEventListener("keydown",event=>{if(event.isComposing)return;enqueue({type:"key",phase:"down",key:event.key});event.preventDefault()});surface.addEventListener("keyup",event=>{if(event.isComposing)return;enqueue({type:"key",phase:"up",key:event.key});event.preventDefault()});surface.addEventListener("compositionend",event=>{if(event.data)enqueue({type:"text",text:event.data})});surface.addEventListener("paste",event=>{const text=event.clipboardData&&event.clipboardData.getData("text/plain");if(text){enqueue({type:"text",text:text.slice(0,5000)});event.preventDefault()}});surface.addEventListener("contextmenu",event=>event.preventDefault());const resize=new ResizeObserver(entries=>{const rect=entries[0]&&entries[0].contentRect;if(rect)void post("/browser/viewport",{width:rect.width,height:rect.height}).catch(showError)});resize.observe(surface);const events=new EventSource("/browser/events?${J}");events.onmessage=event=>{try{const message=JSON.parse(event.data);if(message.event==="state"&&message.payload&&message.payload.metrics)metrics=message.payload.metrics;if(message.event==="error")showError(message.payload&&message.payload.message||"Browser page error");else status.hidden=true;sendParent(message.event,message.payload)}catch(error){showError(error instanceof Error?error.message:String(error))}};events.onerror=()=>showError("Live browser stream disconnected");window.addEventListener("message",event=>{const message=event.data;if(event.source!==window.parent||event.origin!==FRONTEND_ORIGIN||!message||message.type!=="ideawave-browser-command"||message.token!==TOKEN)return;Promise.resolve(post("/browser/command",message.command||{})).then(result=>sendParent("response",{ok:true,result},message.requestId),error=>sendParent("response",{ok:false,error:error instanceof Error?error.message:String(error)},message.requestId))});window.addEventListener("beforeunload",()=>{events.close();resize.disconnect()})})();</script></body></html>`}function Q7(Z){return(Z["content-type"]??"application/octet-stream").split(";")[0]?.trim().toLowerCase()??"application/octet-stream"}function oQ(Z){return"tagName"in Z}function k2(Z,X){return Z.attrs.find((Q)=>Q.name.toLowerCase()===X)?.value??null}function Z7(Z,X,Q){let K=Z.attrs.find((J)=>J.name.toLowerCase()===X);if(K)K.value=Q;else Z.attrs.push({name:X,value:Q})}function X7(Z){let X=Q7(Z.headers);if(!(/^image\/(?:png|jpeg|gif|webp|avif|bmp|x-icon)$/.test(X)||/^(?:font\/|application\/(?:font-|vnd\.ms-fontobject|x-font-))/.test(X)))return null;return`data:${X};base64,${Buffer.from(Z.body).toString("base64")}`}async function _2(Z){let X=[],Q=0;for await(let K of Z){let J=Buffer.isBuffer(K)?K:Buffer.from(K);if(Q+=J.byteLength,Q>_Q)throw Error("Browser request is too large");X.push(J)}return JSON.parse(Buffer.concat(X).toString("utf8"))}class I2{sessions=new Map;port=null;sweepTimer;runtime;constructor(Z){this.runtime=Z??new V1,this.sweepTimer=setInterval(()=>this.sweep(),60000),this.sweepTimer.unref?.()}setPort(Z){this.port=Z}origin(Z){if(!this.port)throw Error("Browser proxy is not ready");return`http://${Z}.localhost:${this.port}`}wrapperOrigin(Z){return this.origin(Z.wrapperHost)}result(Z){let X=this.wrapperOrigin(Z);return{proxySessionId:Z.id,wrapperUrl:`${X}/browser/wrapper?session=${encodeURIComponent(Z.id)}`,bridgeToken:Z.bridgeToken,navigateUrlPrefix:`${X}/browser/command?session=${encodeURIComponent(Z.id)}&url=`}}async handleRpc(Z,X,Q){switch(Q.method){case"open_proxy_session":{let K=SQ.parse(Q.params),J=C0(K.url).href,Y=pQ(X),j=[...this.sessions.values()].find((z)=>z.frontendSessionId===Z&&z.browserNodeId===K.browserNodeId);if(j){if(j.frontendOrigin!==Y)throw Error("Browser proxy session origin changed unexpectedly");if(j.lastUsedAt=Date.now(),j.remote.currentUrl!==J)await j.remote.navigate(J);return this.result(j)}let U=await this.runtime.createPage(J),B={id:EQ(),frontendSessionId:Z,frontendOrigin:Y,browserNodeId:K.browserNodeId,wrapperHost:`iw-browser-${dQ()}`,bridgeToken:S2(24).toString("base64url"),remote:U,lastUsedAt:Date.now()};return this.sessions.set(B.id,B),this.result(B)}case"close_proxy_session":{let K=IQ.parse(Q.params),J=this.sessions.get(K.proxySessionId);if(J&&J.frontendSessionId!==Z)throw Error("Browser proxy session belongs to another frontend session");if(J)await this.closeSession(J);return{closed:!0}}case"build_snapshot":{let K=TQ.parse(Q.params),J=this.ownedSession(Z,K.proxySessionId);if(J.remote.currentRevision!==K.revision)throw Error("STALE_BROWSER_REF: inspect the browser again before freezing");return this.buildSnapshot(J,K.revision)}}}async closeSession(Z){if(this.sessions.get(Z.id)===Z)this.sessions.delete(Z.id);await Z.remote.close()}closeFrontendSession(Z){for(let X of[...this.sessions.values()])if(X.frontendSessionId===Z)this.closeSession(X)}async close(){clearInterval(this.sweepTimer);let Z=[...this.sessions.values()];this.sessions.clear(),await Promise.all(Z.map((X)=>X.remote.close())),await this.runtime.close()}ownedSession(Z,X){let Q=this.sessions.get(X);if(!Q||Q.frontendSessionId!==Z)throw Error("Browser proxy session is unavailable");return Q.lastUsedAt=Date.now(),Q}sweep(){let Z=Date.now()-mQ;for(let X of[...this.sessions.values()])if(X.lastUsedAt<Z)this.closeSession(X)}requestAuthorized(Z,X){return e8(Z.headers.origin)===this.wrapperOrigin(X)&&e8(Z.headers["x-ideawave-browser-token"])===X.bridgeToken}async handleHttpRequest(Z,X){let Q=new URL(Z.url??"/","http://localhost");if(!Q.pathname.startsWith("/browser/"))return!1;let K=Q.searchParams.get("session"),J=K?this.sessions.get(K):null;if(!J)return X.writeHead(404),X.end(),!0;if(J.lastUsedAt=Date.now(),aQ(Z.headers.host)!==`${J.wrapperHost}.localhost`)return X.writeHead(403),X.end(),!0;try{if(Q.pathname==="/browser/wrapper"){if(Z.method!=="GET"&&Z.method!=="HEAD")return X.writeHead(405),X.end(),!0;return this.sendViewer(X,J,Z.method==="HEAD"),!0}if(Q.searchParams.get("token")===J.bridgeToken){if(Q.pathname==="/browser/stream")return this.sendFrameStream(X,J,Z.method==="HEAD"),!0;if(Q.pathname==="/browser/events")return this.sendEventStream(X,J,Z.method==="HEAD"),!0}if(Z.method!=="POST"||!this.requestAuthorized(Z,J))return X.writeHead(403),X.end(),!0;if(Q.pathname==="/browser/input"){let Y=lQ.parse(await _2(Z));return await J.remote.input(Y.events),this.sendJson(X,{ok:!0}),!0}if(Q.pathname==="/browser/viewport"){let Y=iQ.parse(await _2(Z));return await J.remote.setViewport(Y.width,Y.height),this.sendJson(X,{ok:!0}),!0}if(Q.pathname==="/browser/command"){let Y=uQ.parse(await _2(Z));return this.sendJson(X,await J.remote.command(Y)),!0}return X.writeHead(404),X.end(),!0}catch(Y){let j=Y instanceof Error?Y.message:"Browser operation failed";if(X.headersSent)X.destroy(Y instanceof Error?Y:void 0);else X.writeHead(400,{"content-type":"text/plain; charset=utf-8"}),X.end(j);return!0}}sendViewer(Z,X,Q){let K=S2(18).toString("base64url"),J=sQ({bridgeToken:X.bridgeToken,cspNonce:K,frontendOrigin:X.frontendOrigin,sessionId:X.id}),Y=Buffer.from(J),j=["default-src 'none'","img-src 'self'",`style-src 'nonce-${K}'`,`script-src 'nonce-${K}'`,"connect-src 'self'","base-uri 'none'","form-action 'none'",`frame-ancestors ${X.frontendOrigin}`].join("; ");Z.writeHead(200,{"access-control-allow-origin":X.frontendOrigin,"cache-control":"no-store","content-length":String(Y.byteLength),"content-security-policy":j,"content-type":"text/html; charset=utf-8","cross-origin-resource-policy":"cross-origin","referrer-policy":"no-referrer","x-content-type-options":"nosniff"}),Z.end(Q?void 0:Y)}sendFrameStream(Z,X,Q){if(Z.writeHead(200,{"cache-control":"no-store","content-type":`multipart/x-mixed-replace; boundary=${t8}`,"x-content-type-options":"nosniff"}),Q){Z.end();return}let K=!1,J=X.remote.onFrame((Y)=>{if(K||Z.destroyed)return;X.lastUsedAt=Date.now(),K=!Z.write(Buffer.concat([Buffer.from(`--${t8}\r
824
914
  Content-Type: image/jpeg\r
825
- Content-Length: ${J.byteLength}\r
915
+ Content-Length: ${Y.byteLength}\r
826
916
  \r
827
- `),J,Buffer.from(`\r
828
- `)]))});Z.on("drain",()=>{K=!1}),Z.once("close",Y)}sendEventStream(Z,X,Q){if(Z.writeHead(200,{"cache-control":"no-cache, no-store",connection:"keep-alive","content-type":"text/event-stream; charset=utf-8","x-accel-buffering":"no"}),Q){Z.end();return}let K=(H)=>{if(!Z.destroyed)X.lastUsedAt=Date.now(),Z.write(`data: ${JSON.stringify(H)}
917
+ `),Y,Buffer.from(`\r
918
+ `)]))});Z.on("drain",()=>{K=!1}),Z.once("close",J)}sendEventStream(Z,X,Q){if(Z.writeHead(200,{"cache-control":"no-cache, no-store",connection:"keep-alive","content-type":"text/event-stream; charset=utf-8","x-accel-buffering":"no"}),Q){Z.end();return}let K=(j)=>{if(!Z.destroyed)X.lastUsedAt=Date.now(),Z.write(`data: ${JSON.stringify(j)}
829
919
 
830
- `)},Y=X.remote.onEvent(K),J=setInterval(()=>{if(!Z.destroyed)X.lastUsedAt=Date.now(),Z.write(`: ping
920
+ `)},J=X.remote.onEvent(K),Y=setInterval(()=>{if(!Z.destroyed)X.lastUsedAt=Date.now(),Z.write(`: ping
831
921
 
832
- `)},15000);J.unref?.(),Z.once("close",()=>{clearInterval(J),Y()})}sendJson(Z,X){let Q=Buffer.from(JSON.stringify(X));Z.writeHead(200,{"cache-control":"no-store","content-length":String(Q.byteLength),"content-type":"application/json; charset=utf-8","x-content-type-options":"nosniff"}),Z.end(Q)}async snapshotUpstream(Z,X,Q){if(Q.remaining<=0)return null;return Q.remaining-=1,Q.resourceCount+=1,Z.remote.fetchResource(X,g8)}async inlineCss(Z,X,Q,K){let Y=new Set;try{let w=B4.parse(X,{context:"stylesheet",parseCustomProperty:!0});B4.walk(w,(B)=>{if(B.type!=="Url")return;try{Y.add(new URL(B.value,Q).href)}catch{}})}catch{return""}let J=new Map,H=[...Y].slice(0,K.remaining);for(let w=0;w<H.length;w+=o3)await Promise.all(H.slice(w,w+o3).map(async(B)=>{try{let U=await this.snapshotUpstream(Z,B,K),q=U?Z7(U):null;if(q)J.set(B,q)}catch{}}));return r3({css:X,baseUrl:Q,resourceUrl:(w)=>J.get(w)??"data:"})}async inlineSnapshotTree(Z,X,Q,K){let Y=[];for(let J of X.childNodes){if(rQ(J)){let H=J.tagName.toLowerCase();if(H==="link"&&(k2(J,"rel")??"").toLowerCase().includes("stylesheet")){let w=k2(J,"href");if(w)try{let B=new URL(w,K).href,U=await this.snapshotUpstream(Z,B,Q);if(!U)continue;if(X7(U.headers)==="text/css")J.tagName="style",J.nodeName="style",J.attrs=[],J.childNodes=[{nodeName:"#text",value:await this.inlineCss(Z,Buffer.from(U.body).toString("utf8"),U.url,Q),parentNode:J}]}catch{continue}}if(H==="style"){for(let w of J.childNodes)if("value"in w&&typeof w.value==="string")w.value=await this.inlineCss(Z,w.value,K,Q)}if(H==="img"){let w=k2(J,"src");if(w&&!w.startsWith("data:"))try{let B=new URL(w,K).href,U=await this.snapshotUpstream(Z,B,Q);e3(J,"src",U&&Z7(U)||"data:")}catch{e3(J,"src","data:")}}await this.inlineSnapshotTree(Z,J,Q,K)}Y.push(J)}X.childNodes=Y}async buildSnapshot(Z,X){let Q=await Z.remote.snapshotHtml();if(Buffer.byteLength(Q,"utf8")>y1)throw Error("Browser snapshot exceeds the 20 MiB limit");let K=Z.remote.currentUrl,Y=f1(Q),J={remaining:mQ,resourceCount:0};await this.inlineSnapshotTree(Z,Y,J,K);let H=p0(Y),w=s3(H),B=H.match(/<title[^>]*>([^<]*)<\/title>/i)?.[1]?.trim()??"";return{html:w,sourceUrl:K,title:B,revision:X,byteLength:Buffer.byteLength(w,"utf8"),resourceCount:J.resourceCount,createdAt:new Date().toISOString()}}}import{chromium as HK}from"playwright-core";import{spawn as oQ}from"node:child_process";import{existsSync as O1,readFileSync as nQ}from"node:fs";import{createRequire as Q7}from"node:module";import L4 from"node:os";import a from"node:path";var D0={phase:"checking"},o0=null,T2=0,tQ=60000,eQ=["install","--only-shell","chromium"];class b1 extends Error{constructor(){super("The lightweight screenshot engine is being installed in the background. Live browsing remains available; retry the screenshot shortly.");this.name="CaptureEngineInstallingError"}}class K7 extends Error{constructor(Z){super(Z?`The screenshot engine could not be installed: ${Z}`:"The screenshot engine is unavailable. Retry after checking network access and disk space.");this.name="CaptureEngineUnavailableError"}}function ZK(Z){return Z.phase==="failed"?new K7(Z.error):new b1}function n0(){return{...D0}}function XK(Z){let X=Z.exists??O1;for(let[Q,K]of[[Z.override,"explicit"],[Z.managedShell,"headless-shell"],[Z.system,"system-chromium"]])if(Q&&X(Q))return{path:Q,engine:K};return null}function W7(Z,X){let Q=[],K=X.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??X.IDEAWAVE_CHROMIUM_PATH;if(K)Q.push(K);if(Z==="win32"){let Y=X.ProgramFiles??"C:\\Program Files",J=X["ProgramFiles(x86)"]??"C:\\Program Files (x86)";if(Q.push(a.win32.join(Y,"Google\\Chrome\\Application\\chrome.exe"),a.win32.join(J,"Google\\Chrome\\Application\\chrome.exe")),X.LOCALAPPDATA)Q.push(a.win32.join(X.LOCALAPPDATA,"Google\\Chrome\\Application\\chrome.exe"));Q.push(a.win32.join(J,"Microsoft\\Edge\\Application\\msedge.exe"),a.win32.join(Y,"Microsoft\\Edge\\Application\\msedge.exe"))}else if(Z==="darwin")Q.push("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Chromium.app/Contents/MacOS/Chromium","google-chrome","chromium");else Q.push("google-chrome","google-chrome-stable","chromium","chromium-browser","msedge");return Q}function QK(Z){let X=(process.env.PATH??"").split(a.delimiter),Q=process.platform==="win32"?[".exe",".cmd",".bat",""]:[""];for(let K of X){if(!K)continue;for(let Y of Q){let J=a.join(K,`${Z}${Y}`);if(O1(J))return J}}return null}function KK(){let Z=new Set([process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH,process.env.IDEAWAVE_CHROMIUM_PATH]);for(let X of W7(process.platform,process.env)){if(Z.has(X))continue;if(a.isAbsolute(X)){if(O1(X))return X}else{let Q=QK(X);if(Q)return Q}}return null}function WK(){try{let Z=Q7(import.meta.url);return a.dirname(Z.resolve("playwright-core/package.json"))}catch{return null}}function YK(Z){let X=process.env.PLAYWRIGHT_BROWSERS_PATH?.trim();if(X==="0")return a.join(Z,".local-browsers");if(X)return X.startsWith("~")?a.join(L4.homedir(),X.slice(1)):a.resolve(X);if(process.platform==="win32")return a.join(process.env.LOCALAPPDATA??a.join(L4.homedir(),"AppData","Local"),"ms-playwright");if(process.platform==="darwin")return a.join(L4.homedir(),"Library","Caches","ms-playwright");return a.join(L4.homedir(),".cache","ms-playwright")}function JK(){if(process.platform==="win32")return"win64";if(process.platform==="darwin")return process.arch==="arm64"?"mac-arm64":"mac-x64";return process.arch==="arm64"?"linux-arm64":"linux64"}function A2(){let Z=WK();if(!Z)return null;try{let Q=JSON.parse(nQ(a.join(Z,"browsers.json"),"utf8")).browsers?.find((w)=>w.name==="chromium-headless-shell");if(!Q?.revision)return null;let K=JK(),Y=Q.revisionOverrides?.[K]??Q.revision,J=a.join(YK(Z),`chromium_headless_shell-${Y}`),H=process.platform==="win32"?["chrome-headless-shell-win64/chrome-headless-shell.exe","chrome-headless-shell-win32/chrome-headless-shell.exe"]:process.platform==="darwin"?[`chrome-headless-shell-${K}/chrome-headless-shell`,"chrome-headless-shell-mac-x64/chrome-headless-shell","chrome-headless-shell-mac-arm64/chrome-headless-shell"]:[`chrome-headless-shell-${K}/chrome-headless-shell`,"chrome-headless-shell-linux64/chrome-headless-shell"];for(let w of H){let B=a.join(J,...w.split("/"));if(O1(B))return B}}catch{return null}return null}function VK(){let Z=process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??process.env.IDEAWAVE_CHROMIUM_PATH;return Z&&O1(Z)?Z:null}function Y7(){return XK({override:VK(),managedShell:A2(),system:KK()})}function jK(){let X=Q7(import.meta.url).resolve("playwright-core/package.json"),Q=a.join(a.dirname(X),"cli.js");return new Promise((K,Y)=>{let J=oQ(process.execPath,[Q,...eQ],{stdio:"ignore",windowsHide:!0});J.once("error",Y),J.once("exit",(H)=>{if(H===0)K();else Y(Error(`Playwright headless-shell installer exited with code ${H}`))})})}function u2(Z){let X=A2();if(X)return D0={phase:"ready",engine:"headless-shell",executablePath:X},Promise.resolve(n0());if(o0)return o0;if(T2>0&&Date.now()-T2<tQ)return Promise.resolve(n0());return D0=Z?{phase:"ready",engine:Z.engine,executablePath:Z.path,installingManagedShell:!0}:{phase:"installing",installingManagedShell:!0},o0=(async()=>{try{await jK();let Q=A2();if(!Q)throw Error("Headless Shell finished installing but its executable was not found");D0={phase:"ready",engine:"headless-shell",executablePath:Q}}catch(Q){T2=Date.now(),D0=Z?{phase:"ready",engine:Z.engine,executablePath:Z.path,error:Q instanceof Error?Q.message:String(Q)}:{phase:"failed",error:Q instanceof Error?Q.message:String(Q)}}finally{o0=null}return n0()})(),o0}function J7(){let Z=Y7();if(Z?.engine==="explicit"||Z?.engine==="headless-shell")return D0={phase:"ready",engine:Z.engine,executablePath:Z.path},Promise.resolve(n0());return u2(Z)}async function V7(){let Z=Y7();if(Z){if(D0={phase:"ready",engine:Z.engine,executablePath:Z.path,...Z.engine==="system-chromium"&&o0?{installingManagedShell:!0}:{}},Z.engine==="system-chromium")u2(Z);return Z.path}throw u2(null),ZK(D0)}var zK=60000,wK=16,T0=null,q4=null,t0=null,c2=Promise.resolve(),x4=0,l2=0,UK=0;class P4 extends Error{constructor(){super("The capture queue is busy; retry shortly.");this.name="CaptureQueueFullError"}}function d2(){if(t0)clearTimeout(t0);t0=null}async function i2(){d2();let Z=T0;if(T0=null,q4=null,Z)await Z.close().catch(()=>{return})}function FK(Z=zK){d2(),t0=setTimeout(()=>{if(t0=null,l2===0&&x4===0)i2()},Z),t0.unref?.()}async function BK(){let Z=await V7();if(T0?.isConnected()&&q4===Z)return T0;await i2();let X=await HK.launch({headless:!0,executablePath:Z,handleSIGHUP:!1,handleSIGINT:!1,handleSIGTERM:!1});return UK+=1,T0=X,q4=Z,X.on("disconnected",()=>{if(T0===X)T0=null,q4=null}),X}function j7(Z,X){if(x4>=wK)return Promise.reject(new P4);x4+=1;let Q,K,Y=new Promise((J,H)=>{Q=J,K=H});return c2=c2.then(async()=>{x4-=1,l2+=1,d2();let J=null,H;try{J=await(await BK()).newContext(Z.context);let B=await J.newPage();H={ok:!0,value:await X(B)}}catch(w){H={ok:!1,error:w}}finally{if(J)await J.close().catch(()=>{return});l2-=1,FK()}if(H.ok)Q(H.value);else K(H.error)}),Y}async function H7(){await c2.catch(()=>{return}),await i2()}import{randomUUID as vK}from"node:crypto";import{createServer as RK}from"node:http";import{WebSocket as P7,WebSocketServer as CK}from"ws";var a2="/cli-bridge",z7="/ping";function p2(Z=43275,X=43277){let Q=[];for(let K=Z;K<=X;K+=1)Q.push(K);return Q}function w7(Z=p2(),X="127.0.0.1",Q="/cli-bridge"){return Z.map((K)=>`ws://${X}:${K}${Q}`)}var LK=800;function U7({candidates:Z,createWebSocket:X,timeoutMs:Q=LK,maxConcurrent:K=1,staggerMs:Y=0,setTimeoutFn:J=setTimeout,clearTimeoutFn:H=clearTimeout}){return new Promise((w,B)=>{let U=0,q=!1,h=null,M=new Map,O=Math.max(1,Math.floor(K)),f=()=>{if(h===null)return;H(h),h=null},C=(D)=>{let{socket:x,listeners:E,timer:k}=D;x.removeEventListener("open",E.open),x.removeEventListener("message",E.message),x.removeEventListener("error",E.error),x.removeEventListener("close",E.close),H(k),M.delete(x)},N=(D)=>{f();for(let x of Array.from(M.values()))if(C(x),x.socket!==D)try{x.socket.close()}catch{}},b=()=>{if(q)return;if(U<Z.length)return;if(M.size>0)return;if(h!==null)return;q=!0,B(Error("No IdeaWave CLI bridge is reachable"))},$=(D)=>{if(q)return;if(U>=Z.length){b();return}if(M.size>=O)return;if(D<=0){f(),_();return}if(h!==null)return;h=J(()=>{h=null,_()},D)},v=()=>{if(q)return;if(M.size>=O)return;if(M.size===0||Y<=0||O===1){$(0);return}$(Y)},G=(D)=>{if(q)return;let x=M.get(D);if(!x)return;C(x);try{D.close()}catch{}v(),b()};function _(){if(q)return;if(M.size>=O)return;let D=Z[U];if(U+=1,!D){b();return}let x;try{x=X(D)}catch{v(),b();return}let E={open:()=>{if(q||!M.has(x))return;x.send(G1({type:"bridge_probe",protocolVersion:1}))},message:(l)=>{if(q||!M.has(x))return;if(g1(String(l?.data??""))?.type!=="bridge_probe_ack")return;q=!0,N(x),w({url:D,socket:x})},error:()=>G(x),close:()=>G(x)};x.addEventListener("open",E.open),x.addEventListener("message",E.message),x.addEventListener("error",E.error),x.addEventListener("close",E.close);let k=J(()=>G(x),Q);M.set(x,{url:D,socket:x,listeners:E,timer:k}),v()}_()})}import{randomBytes as qK}from"node:crypto";import{mkdir as xK,writeFile as PK}from"node:fs/promises";import fK from"node:os";import F7 from"node:path";var yK=30000,OK=1024;function B7(Z){let X;try{X=new URL(Z)}catch{return!1}if(X.protocol!=="http:"&&X.protocol!=="https:")return!1;let Q=X.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Q==="localhost"||Q==="127.0.0.1"||Q==="::1")return!0;let Y=Q==="ideawave.app"||Q.endsWith(".ideawave.app");return X.protocol==="https:"&&Y&&X.pathname.startsWith("/static_boards/")}async function bK(Z,X){let Q=F7.join(fK.tmpdir(),"ideawave-screenshots");await xK(Q,{recursive:!0});let K=F7.join(Q,`board-${Date.now()}-${qK(4).toString("hex")}.png`);return await PK(K,Z),{path:K,engine:X}}async function L7(Z){let X=Z.timeoutMs??yK;return j7({context:{viewport:{width:Z.width,height:Z.height},deviceScaleFactor:1}},async(Q)=>{Q.setDefaultTimeout(X),Q.setDefaultNavigationTimeout(X);let K=await Q.goto(Z.url,{waitUntil:"networkidle",timeout:X});if(!K?.ok())throw Error(`Static board responded with HTTP ${K?.status()??"unknown"}; request a fresh one-time token before retrying`);await Q.locator('[data-ideawave-static-board-ready="true"]').waitFor({state:"attached",timeout:X}),await Q.evaluate(async()=>{if(document.fonts?.ready)await document.fonts.ready});let Y=await Q.screenshot({type:"png",animations:"disabled",caret:"hide",scale:"css"});if(Y.byteLength<OK)throw Error("Headless Shell returned an empty screenshot");return bK(Buffer.from(Y),n0().engine??"system-chromium")})}var hK=0,MK=30000,NK=15000,DK="/screenshot",$K=65536,f7="http://127.0.0.1",y4="IDEAWAVE_CLI_ALLOW_RAILWAY_PR_PREVIEWS";async function y7(Z=w7(),X=(Q)=>new P7(Q,{headers:{origin:f7}})){try{let{url:Q,socket:K}=await U7({candidates:Z,createWebSocket:X});try{K.close()}catch{}return Q}catch{return null}}var gK=new Set(["https://ideawave-app-production.up.railway.app"]);function GK(Z){return Z==="ideawave.app"||Z.endsWith(".ideawave.app")}function EK(Z){return Z==="1"||Z?.toLowerCase()==="true"}function mK(Z){return/^ideawave-app-ideawave-app-pr-\d+\.up\.railway\.app$/i.test(Z)}function kK(){let Z=process.env.IDEAWAVE_CLI_ALLOWED_ORIGINS;if(!Z)return _K;let X=new Set;for(let Q of Z.split(",")){let K=Q.trim();if(!K)continue;try{X.add(new URL(K).origin)}catch{}}return X}var _K=new Set;function s2(Z){if(!Z)return!1;let X;try{X=new URL(Z)}catch{return!1}if(gK.has(X.origin))return!0;if(kK().has(X.origin))return!0;if(X.protocol==="https:"&&EK(process.env[y4])&&mK(X.hostname))return!0;if(X.protocol==="https:"&&GK(X.hostname))return!0;if(X.protocol!=="http:"&&X.protocol!=="https:")return!1;return X.hostname==="localhost"||X.hostname==="127.0.0.1"||X.hostname==="::1"}function e0(Z,X){if(Z.readyState!==P7.OPEN)return;try{Z.send(G1(X))}catch{}}function SK(Z){if(typeof Z==="string")return Z;if(Buffer.isBuffer(Z))return Z.toString("utf8");if(Array.isArray(Z))return Buffer.concat(Z).toString("utf8");return Buffer.from(Z).toString("utf8")}function f4(Z){if(typeof Z==="string")return Z;if(Array.isArray(Z))return Z[0]??null;return null}function q7(Z,X,Q){Z.write(`HTTP/1.1 ${X} ${Q}\r
922
+ `)},15000);Y.unref?.(),Z.once("close",()=>{clearInterval(Y),J()})}sendJson(Z,X){let Q=Buffer.from(JSON.stringify(X));Z.writeHead(200,{"cache-control":"no-store","content-length":String(Q.byteLength),"content-type":"application/json; charset=utf-8","x-content-type-options":"nosniff"}),Z.end(Q)}async snapshotUpstream(Z,X,Q){if(Q.remaining<=0)return null;return Q.remaining-=1,Q.resourceCount+=1,Z.remote.fetchResource(X,G3)}async inlineCss(Z,X,Q,K){let J=new Set;try{let U=B4.parse(X,{context:"stylesheet",parseCustomProperty:!0});B4.walk(U,(B)=>{if(B.type!=="Url")return;try{J.add(new URL(B.value,Q).href)}catch{}})}catch{return""}let Y=new Map,j=[...J].slice(0,K.remaining);for(let U=0;U<j.length;U+=n8)await Promise.all(j.slice(U,U+n8).map(async(B)=>{try{let z=await this.snapshotUpstream(Z,B,K),q=z?X7(z):null;if(q)Y.set(B,q)}catch{}}));return o8({css:X,baseUrl:Q,resourceUrl:(U)=>Y.get(U)??"data:"})}async inlineSnapshotTree(Z,X,Q,K){let J=[];for(let Y of X.childNodes){if(oQ(Y)){let j=Y.tagName.toLowerCase();if(j==="link"&&(k2(Y,"rel")??"").toLowerCase().includes("stylesheet")){let U=k2(Y,"href");if(U)try{let B=new URL(U,K).href,z=await this.snapshotUpstream(Z,B,Q);if(!z)continue;if(Q7(z.headers)==="text/css")Y.tagName="style",Y.nodeName="style",Y.attrs=[],Y.childNodes=[{nodeName:"#text",value:await this.inlineCss(Z,Buffer.from(z.body).toString("utf8"),z.url,Q),parentNode:Y}]}catch{continue}}if(j==="style"){for(let U of Y.childNodes)if("value"in U&&typeof U.value==="string")U.value=await this.inlineCss(Z,U.value,K,Q)}if(j==="img"){let U=k2(Y,"src");if(U&&!U.startsWith("data:"))try{let B=new URL(U,K).href,z=await this.snapshotUpstream(Z,B,Q);Z7(Y,"src",z&&X7(z)||"data:")}catch{Z7(Y,"src","data:")}}await this.inlineSnapshotTree(Z,Y,Q,K)}J.push(Y)}X.childNodes=J}async buildSnapshot(Z,X){let Q=await Z.remote.snapshotHtml();if(Buffer.byteLength(Q,"utf8")>y1)throw Error("Browser snapshot exceeds the 20 MiB limit");let K=Z.remote.currentUrl,J=f1(Q),Y={remaining:kQ,resourceCount:0};await this.inlineSnapshotTree(Z,J,Y,K);let j=p0(J),U=s8(j),B=j.match(/<title[^>]*>([^<]*)<\/title>/i)?.[1]?.trim()??"";return{html:U,sourceUrl:K,title:B,revision:X,byteLength:Buffer.byteLength(U,"utf8"),resourceCount:Y.resourceCount,createdAt:new Date().toISOString()}}}import{chromium as wK}from"playwright-core";import{spawn as nQ}from"node:child_process";import{existsSync as O1,readFileSync as tQ}from"node:fs";import{createRequire as K7}from"node:module";import L4 from"node:os";import a from"node:path";var D0={phase:"checking"},o0=null,T2=0,eQ=60000,ZK=["install","--only-shell","chromium"];class b1 extends Error{constructor(){super("The lightweight screenshot engine is being installed in the background. Live browsing remains available; retry the screenshot shortly.");this.name="CaptureEngineInstallingError"}}class W7 extends Error{constructor(Z){super(Z?`The screenshot engine could not be installed: ${Z}`:"The screenshot engine is unavailable. Retry after checking network access and disk space.");this.name="CaptureEngineUnavailableError"}}function XK(Z){return Z.phase==="failed"?new W7(Z.error):new b1}function n0(){return{...D0}}function QK(Z){let X=Z.exists??O1;for(let[Q,K]of[[Z.override,"explicit"],[Z.managedShell,"headless-shell"],[Z.system,"system-chromium"]])if(Q&&X(Q))return{path:Q,engine:K};return null}function J7(Z,X){let Q=[],K=X.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??X.IDEAWAVE_CHROMIUM_PATH;if(K)Q.push(K);if(Z==="win32"){let J=X.ProgramFiles??"C:\\Program Files",Y=X["ProgramFiles(x86)"]??"C:\\Program Files (x86)";if(Q.push(a.win32.join(J,"Google\\Chrome\\Application\\chrome.exe"),a.win32.join(Y,"Google\\Chrome\\Application\\chrome.exe")),X.LOCALAPPDATA)Q.push(a.win32.join(X.LOCALAPPDATA,"Google\\Chrome\\Application\\chrome.exe"));Q.push(a.win32.join(Y,"Microsoft\\Edge\\Application\\msedge.exe"),a.win32.join(J,"Microsoft\\Edge\\Application\\msedge.exe"))}else if(Z==="darwin")Q.push("/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Chromium.app/Contents/MacOS/Chromium","google-chrome","chromium");else Q.push("google-chrome","google-chrome-stable","chromium","chromium-browser","msedge");return Q}function KK(Z){let X=(process.env.PATH??"").split(a.delimiter),Q=process.platform==="win32"?[".exe",".cmd",".bat",""]:[""];for(let K of X){if(!K)continue;for(let J of Q){let Y=a.join(K,`${Z}${J}`);if(O1(Y))return Y}}return null}function WK(){let Z=new Set([process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH,process.env.IDEAWAVE_CHROMIUM_PATH]);for(let X of J7(process.platform,process.env)){if(Z.has(X))continue;if(a.isAbsolute(X)){if(O1(X))return X}else{let Q=KK(X);if(Q)return Q}}return null}function JK(){try{let Z=K7(import.meta.url);return a.dirname(Z.resolve("playwright-core/package.json"))}catch{return null}}function YK(Z){let X=process.env.PLAYWRIGHT_BROWSERS_PATH?.trim();if(X==="0")return a.join(Z,".local-browsers");if(X)return X.startsWith("~")?a.join(L4.homedir(),X.slice(1)):a.resolve(X);if(process.platform==="win32")return a.join(process.env.LOCALAPPDATA??a.join(L4.homedir(),"AppData","Local"),"ms-playwright");if(process.platform==="darwin")return a.join(L4.homedir(),"Library","Caches","ms-playwright");return a.join(L4.homedir(),".cache","ms-playwright")}function VK(){if(process.platform==="win32")return"win64";if(process.platform==="darwin")return process.arch==="arm64"?"mac-arm64":"mac-x64";return process.arch==="arm64"?"linux-arm64":"linux64"}function A2(){let Z=JK();if(!Z)return null;try{let Q=JSON.parse(tQ(a.join(Z,"browsers.json"),"utf8")).browsers?.find((U)=>U.name==="chromium-headless-shell");if(!Q?.revision)return null;let K=VK(),J=Q.revisionOverrides?.[K]??Q.revision,Y=a.join(YK(Z),`chromium_headless_shell-${J}`),j=process.platform==="win32"?["chrome-headless-shell-win64/chrome-headless-shell.exe","chrome-headless-shell-win32/chrome-headless-shell.exe"]:process.platform==="darwin"?[`chrome-headless-shell-${K}/chrome-headless-shell`,"chrome-headless-shell-mac-x64/chrome-headless-shell","chrome-headless-shell-mac-arm64/chrome-headless-shell"]:[`chrome-headless-shell-${K}/chrome-headless-shell`,"chrome-headless-shell-linux64/chrome-headless-shell"];for(let U of j){let B=a.join(Y,...U.split("/"));if(O1(B))return B}}catch{return null}return null}function jK(){let Z=process.env.IDEAWAVE_CAPTURE_EXECUTABLE_PATH??process.env.IDEAWAVE_CHROMIUM_PATH;return Z&&O1(Z)?Z:null}function Y7(){return QK({override:jK(),managedShell:A2(),system:WK()})}function HK(){let X=K7(import.meta.url).resolve("playwright-core/package.json"),Q=a.join(a.dirname(X),"cli.js");return new Promise((K,J)=>{let Y=nQ(process.execPath,[Q,...ZK],{stdio:"ignore",windowsHide:!0});Y.once("error",J),Y.once("exit",(j)=>{if(j===0)K();else J(Error(`Playwright headless-shell installer exited with code ${j}`))})})}function u2(Z){let X=A2();if(X)return D0={phase:"ready",engine:"headless-shell",executablePath:X},Promise.resolve(n0());if(o0)return o0;if(T2>0&&Date.now()-T2<eQ)return Promise.resolve(n0());return D0=Z?{phase:"ready",engine:Z.engine,executablePath:Z.path,installingManagedShell:!0}:{phase:"installing",installingManagedShell:!0},o0=(async()=>{try{await HK();let Q=A2();if(!Q)throw Error("Headless Shell finished installing but its executable was not found");D0={phase:"ready",engine:"headless-shell",executablePath:Q}}catch(Q){T2=Date.now(),D0=Z?{phase:"ready",engine:Z.engine,executablePath:Z.path,error:Q instanceof Error?Q.message:String(Q)}:{phase:"failed",error:Q instanceof Error?Q.message:String(Q)}}finally{o0=null}return n0()})(),o0}function V7(){let Z=Y7();if(Z?.engine==="explicit"||Z?.engine==="headless-shell")return D0={phase:"ready",engine:Z.engine,executablePath:Z.path},Promise.resolve(n0());return u2(Z)}async function j7(){let Z=Y7();if(Z){if(D0={phase:"ready",engine:Z.engine,executablePath:Z.path,...Z.engine==="system-chromium"&&o0?{installingManagedShell:!0}:{}},Z.engine==="system-chromium")u2(Z);return Z.path}throw u2(null),XK(D0)}var zK=60000,UK=16,T0=null,q4=null,t0=null,c2=Promise.resolve(),x4=0,l2=0,FK=0;class P4 extends Error{constructor(){super("The capture queue is busy; retry shortly.");this.name="CaptureQueueFullError"}}function i2(){if(t0)clearTimeout(t0);t0=null}async function d2(){i2();let Z=T0;if(T0=null,q4=null,Z)await Z.close().catch(()=>{return})}function BK(Z=zK){i2(),t0=setTimeout(()=>{if(t0=null,l2===0&&x4===0)d2()},Z),t0.unref?.()}async function LK(){let Z=await j7();if(T0?.isConnected()&&q4===Z)return T0;await d2();let X=await wK.launch({headless:!0,executablePath:Z,handleSIGHUP:!1,handleSIGINT:!1,handleSIGTERM:!1});return FK+=1,T0=X,q4=Z,X.on("disconnected",()=>{if(T0===X)T0=null,q4=null}),X}function H7(Z,X){if(x4>=UK)return Promise.reject(new P4);x4+=1;let Q,K,J=new Promise((Y,j)=>{Q=Y,K=j});return c2=c2.then(async()=>{x4-=1,l2+=1,i2();let Y=null,j;try{Y=await(await LK()).newContext(Z.context);let B=await Y.newPage();j={ok:!0,value:await X(B)}}catch(U){j={ok:!1,error:U}}finally{if(Y)await Y.close().catch(()=>{return});l2-=1,BK()}if(j.ok)Q(j.value);else K(j.error)}),J}async function w7(){await c2.catch(()=>{return}),await d2()}import{randomUUID as RK}from"node:crypto";import{createServer as CK}from"node:http";import{WebSocket as f7,WebSocketServer as hK}from"ws";var a2="/cli-bridge",z7="/ping";function p2(Z=43275,X=43277){let Q=[];for(let K=Z;K<=X;K+=1)Q.push(K);return Q}function U7(Z=p2(),X="127.0.0.1",Q="/cli-bridge"){return Z.map((K)=>`ws://${X}:${K}${Q}`)}var qK=800;function F7({candidates:Z,createWebSocket:X,timeoutMs:Q=qK,maxConcurrent:K=1,staggerMs:J=0,setTimeoutFn:Y=setTimeout,clearTimeoutFn:j=clearTimeout}){return new Promise((U,B)=>{let z=0,q=!1,R=null,h=new Map,O=Math.max(1,Math.floor(K)),f=()=>{if(R===null)return;j(R),R=null},M=(D)=>{let{socket:x,listeners:E,timer:k}=D;x.removeEventListener("open",E.open),x.removeEventListener("message",E.message),x.removeEventListener("error",E.error),x.removeEventListener("close",E.close),j(k),h.delete(x)},N=(D)=>{f();for(let x of Array.from(h.values()))if(M(x),x.socket!==D)try{x.socket.close()}catch{}},b=()=>{if(q)return;if(z<Z.length)return;if(h.size>0)return;if(R!==null)return;q=!0,B(Error("No IdeaWave CLI bridge is reachable"))},g=(D)=>{if(q)return;if(z>=Z.length){b();return}if(h.size>=O)return;if(D<=0){f(),_();return}if(R!==null)return;R=Y(()=>{R=null,_()},D)},v=()=>{if(q)return;if(h.size>=O)return;if(h.size===0||J<=0||O===1){g(0);return}g(J)},G=(D)=>{if(q)return;let x=h.get(D);if(!x)return;M(x);try{D.close()}catch{}v(),b()};function _(){if(q)return;if(h.size>=O)return;let D=Z[z];if(z+=1,!D){b();return}let x;try{x=X(D)}catch{v(),b();return}let E={open:()=>{if(q||!h.has(x))return;x.send(G1({type:"bridge_probe",protocolVersion:1}))},message:(l)=>{if(q||!h.has(x))return;if($1(String(l?.data??""))?.type!=="bridge_probe_ack")return;q=!0,N(x),U({url:D,socket:x})},error:()=>G(x),close:()=>G(x)};x.addEventListener("open",E.open),x.addEventListener("message",E.message),x.addEventListener("error",E.error),x.addEventListener("close",E.close);let k=Y(()=>G(x),Q);h.set(x,{url:D,socket:x,listeners:E,timer:k}),v()}_()})}import{randomBytes as xK}from"node:crypto";import{mkdir as PK,writeFile as fK}from"node:fs/promises";import yK from"node:os";import B7 from"node:path";var OK=30000,bK=1024;function L7(Z){let X;try{X=new URL(Z)}catch{return!1}if(X.protocol!=="http:"&&X.protocol!=="https:")return!1;let Q=X.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Q==="localhost"||Q==="127.0.0.1"||Q==="::1")return!0;let J=Q==="ideawave.app"||Q.endsWith(".ideawave.app");return X.protocol==="https:"&&J&&X.pathname.startsWith("/static_boards/")}async function vK(Z,X){let Q=B7.join(yK.tmpdir(),"ideawave-screenshots");await PK(Q,{recursive:!0});let K=B7.join(Q,`board-${Date.now()}-${xK(4).toString("hex")}.png`);return await fK(K,Z),{path:K,engine:X}}async function q7(Z){let X=Z.timeoutMs??OK;return H7({context:{viewport:{width:Z.width,height:Z.height},deviceScaleFactor:1}},async(Q)=>{Q.setDefaultTimeout(X),Q.setDefaultNavigationTimeout(X);let K=await Q.goto(Z.url,{waitUntil:"networkidle",timeout:X});if(!K?.ok())throw Error(`Static board responded with HTTP ${K?.status()??"unknown"}; request a fresh one-time token before retrying`);await Q.locator('[data-ideawave-static-board-ready="true"]').waitFor({state:"attached",timeout:X}),await Q.evaluate(async()=>{if(document.fonts?.ready)await document.fonts.ready});let J=await Q.screenshot({type:"png",animations:"disabled",caret:"hide",scale:"css"});if(J.byteLength<bK)throw Error("Headless Shell returned an empty screenshot");return vK(Buffer.from(J),n0().engine??"system-chromium")})}var MK=0,NK=30000,DK=15000,gK="/screenshot",$K=65536,y7="http://127.0.0.1",y4="IDEAWAVE_CLI_ALLOW_RAILWAY_PR_PREVIEWS";async function O7(Z=U7(),X=(Q)=>new f7(Q,{headers:{origin:y7}})){try{let{url:Q,socket:K}=await F7({candidates:Z,createWebSocket:X});try{K.close()}catch{}return Q}catch{return null}}var GK=new Set(["https://ideawave-app-production.up.railway.app"]);function EK(Z){return Z==="ideawave.app"||Z.endsWith(".ideawave.app")}function mK(Z){return Z==="1"||Z?.toLowerCase()==="true"}function kK(Z){return/^ideawave-app-ideawave-app-pr-\d+\.up\.railway\.app$/i.test(Z)}function _K(){let Z=process.env.IDEAWAVE_CLI_ALLOWED_ORIGINS;if(!Z)return SK;let X=new Set;for(let Q of Z.split(",")){let K=Q.trim();if(!K)continue;try{X.add(new URL(K).origin)}catch{}}return X}var SK=new Set;function r2(Z){if(!Z)return!1;let X;try{X=new URL(Z)}catch{return!1}if(GK.has(X.origin))return!0;if(_K().has(X.origin))return!0;if(X.protocol==="https:"&&mK(process.env[y4])&&kK(X.hostname))return!0;if(X.protocol==="https:"&&EK(X.hostname))return!0;if(X.protocol!=="http:"&&X.protocol!=="https:")return!1;return X.hostname==="localhost"||X.hostname==="127.0.0.1"||X.hostname==="::1"}function e0(Z,X){if(Z.readyState!==f7.OPEN)return;try{Z.send(G1(X))}catch{}}function IK(Z){if(typeof Z==="string")return Z;if(Buffer.isBuffer(Z))return Z.toString("utf8");if(Array.isArray(Z))return Buffer.concat(Z).toString("utf8");return Buffer.from(Z).toString("utf8")}function f4(Z){if(typeof Z==="string")return Z;if(Array.isArray(Z))return Z[0]??null;return null}function x7(Z,X,Q){Z.write(`HTTP/1.1 ${X} ${Q}\r
833
923
  Connection: close\r
834
924
  Content-Length: ${Buffer.byteLength(Q)}\r
835
925
  \r
836
- ${Q}`),Z.destroy()}function IK(Z,X){return new Promise((Q,K)=>{let Y=(H)=>{Z.off("listening",J),K(H)},J=()=>{Z.off("error",Y);let H=Z.address();if(!H||typeof H==="string"){K(Error("Failed to read CLI bridge server address"));return}Q(H.port)};Z.once("error",Y),Z.once("listening",J),Z.listen(X,"127.0.0.1")})}function x7(Z){return new Promise((X,Q)=>{Z.close((K)=>{if(K)Q(K);else X()})})}async function O7(Z,X=p2()){let Q=new Map,K=new Map,Y=Z.maxMessageSize??hK,J=!1,H=(O)=>{let f=K.get(O);if(f)clearTimeout(f);K.delete(O)},w=(O)=>{K.delete(O);let{activeRunIds:f}=Z.registry.disconnect(O);Z.onDisconnect(O,f)},B=(O,f)=>{let C={type:"cli_status",connected:!0,runtime:Z.runtime,mcpReady:Z.mcpReady(),error:f,capabilities:Z.capabilities??[],cliVersion:Z.cliVersion,browserRuntime:Z.browserRuntimeStatus?.()};if(O){let N=Q.get(O);if(N)e0(N,C);return}for(let N of Q.values())e0(N,C)},U=(O,f)=>{let C=f.sessionId.trim(),N=f.userId.trim();if(!C||!N){e0(O,{type:"cli_status",connected:!1,runtime:Z.runtime,mcpReady:Z.mcpReady(),error:"Missing frontend session or user id"}),O.close();return}H(C);let b=Q.get(C);if(b&&b!==O)b.close();O.data.frontendSessionId=C,Q.set(C,O),Z.registry.register({frontendSessionId:C,userId:N,tools:f.tools,send:($)=>e0(O,$)}),B(C),Z.onToolMetadata?.(C)},q=(O,f)=>{let C=Z.registry.getUserId(O);if(!C)return;switch(f.type){case"bridge_ping":{let N=Q.get(O);if(N)e0(N,{type:"bridge_pong"});break}case"tool_metadata":Z.registry.setMetadata(O,f.tools),Z.onToolMetadata?.(O);break;case"tool_result":Z.registry.handleToolResult(O,f);break;case"run_turn":m("bridge.run_received",{runId:f.run.runId,cardId:f.run.cardId,frontendSessionId:O}),Z.registry.markRunActive(O,f.run.runId,f.run.cardId),Z.onRunTurn(O,{...f.run,frontendSessionId:O,userId:C});break;case"cancel_run":if(Z.registry.ownsRun(O,f.runId))Z.onCancelRun(O,f.runId);break;case"runtime_rpc":Z.onRuntimeRpc(O,f);break;case"browser_rpc":Z.onBrowserRpc?.(O,Q.get(O)?.data.frontendOrigin??"",f);break;case"warmup_run":Z.onWarmupRun(O,{...f,frontendSessionId:O},C);break;default:break}},h=(O,f)=>{let C=f4(O.headers.origin),N=s2(C),b={Vary:"Origin"};if(N&&C)b["Access-Control-Allow-Origin"]=C,b["Access-Control-Allow-Private-Network"]="true";if(O.method==="OPTIONS"){f.writeHead(204,{...b,"Access-Control-Allow-Methods":"GET, OPTIONS","Access-Control-Allow-Headers":"*","Access-Control-Max-Age":"600"}),f.end();return}if(O.method!=="GET"){f.writeHead(405,b),f.end();return}f.writeHead(200,{...b,"content-type":"application/json","cache-control":"no-store"}),f.end(JSON.stringify({ideawave:!0,runtime:Z.runtime,mcpReady:Z.mcpReady(),capabilities:Z.capabilities??[],cliVersion:Z.cliVersion,browserRuntime:Z.browserRuntimeStatus?.()}))},M=(O,f)=>{let C=f4(O.headers.origin),N=s2(C),b={Vary:"Origin"};if(N&&C)b["Access-Control-Allow-Origin"]=C,b["Access-Control-Allow-Private-Network"]="true";if(O.method==="OPTIONS"){f.writeHead(204,{...b,"Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"content-type","Access-Control-Max-Age":"600"}),f.end();return}if(!N){f.writeHead(403,b),f.end();return}if(O.method!=="POST"){f.writeHead(405,b),f.end();return}let $={...b,"content-type":"application/json"},v=(D,x)=>{f.writeHead(D,$),f.end(JSON.stringify(x))},G="",_=!1;O.on("data",(D)=>{if(G+=D.toString("utf8"),G.length>$K)_=!0,O.destroy()}),O.on("end",()=>{if(_){v(400,{ok:!1,error:"Request body too large"});return}let D;try{D=JSON.parse(G)}catch{v(400,{ok:!1,error:"Invalid JSON body"});return}let x=typeof D.url==="string"?D.url:"";if(!B7(x)){v(400,{ok:!1,error:"url must be an http(s) loopback or /static_boards/ page URL"});return}let E=(k,l)=>{let L0=typeof k==="number"?k:Number.NaN;if(!Number.isFinite(L0))return l;return Math.min(4000,Math.max(200,Math.round(L0)))};L7({url:x,width:E(D.width,1440),height:E(D.height,900)}).then((k)=>v(200,{ok:!0,path:k.path,engine:k.engine})).catch((k)=>{let l=k instanceof b1?503:k instanceof P4?429:500;v(l,{ok:!1,...k instanceof b1?{installing:!0}:{},error:k instanceof Error?k.message:String(k)})})})};for(let O of X){let f=RK((b,$)=>{(async()=>{let v=new URL(b.url??"/","http://127.0.0.1").pathname;if(v===z7){h(b,$);return}if(v===DK){M(b,$);return}if(await Z.onHttpRequest?.(b,$))return;$.writeHead(404,{"content-type":"text/plain"}),$.end("IdeaWave CLI bridge")})().catch((v)=>{if($.headersSent){$.destroy(v instanceof Error?v:void 0);return}$.writeHead(500,{"content-type":"text/plain"}),$.end("IdeaWave CLI bridge request failed")})}),C=new CK({noServer:!0,maxPayload:Y}),N=(b)=>{if(b.idleTimer)clearTimeout(b.idleTimer);b.idleTimer=setTimeout(()=>{b.close()},MK),b.idleTimer.unref?.()};C.on("connection",(b,$)=>{let v=b;v.data={id:vK(),frontendSessionId:null,frontendOrigin:new URL(f4($.headers.origin)??f7).origin},v.idleTimer=null,N(v),v.on("ping",()=>N(v)),v.on("pong",()=>N(v)),v.on("error",()=>{if(v.idleTimer)clearTimeout(v.idleTimer);v.close()}),v.on("message",(G)=>{N(v);let _=SK(G);if(Y>0&&_.length>Y)return;let D=g1(_);if(!D)return;let x=v.data.frontendSessionId;if(!x){if(D.type==="bridge_probe")e0(v,{type:"bridge_probe_ack",protocolVersion:D.protocolVersion});else if(D.type==="frontend_hello")U(v,D);return}q(x,D)}),v.on("close",()=>{if(v.idleTimer)clearTimeout(v.idleTimer);let G=v.data.frontendSessionId;if(!G)return;if(Q.get(G)!==v)return;if(Q.delete(G),H(G),J)return;K.set(G,setTimeout(()=>w(G),NK))})}),f.on("upgrade",(b,$,v)=>{let G=new URL(b.url??"/","http://127.0.0.1").pathname;if(Z.onHttpUpgrade?.(b,$,v))return;if(G!==a2){q7($,404,"Not Found");return}if(!s2(f4(b.headers.origin))){q7($,403,"Forbidden");return}C.handleUpgrade(b,$,v,(_)=>{C.emit("connection",_,b)})});try{let b=await IK(f,O);return{url:`ws://127.0.0.1:${b}${a2}`,port:b,sendStatus:B,close:async()=>{J=!0;for(let $ of K.values())clearTimeout($);K.clear();for(let $ of C.clients){let v=$;if(v.idleTimer)clearTimeout(v.idleTimer);v.close()}C.close(),await x7(f).catch(()=>{return})}}}catch(b){if(C.close(),await x7(f).catch(()=>{return}),b?.code==="EADDRINUSE")continue;throw b}}throw Error(`No free IdeaWave CLI bridge port found in ${X[0]}-${X.at(-1)}`)}import{lstat as tK,readFile as eK}from"node:fs/promises";import ZW from"node:os";import v1 from"node:path";import{Server as XW}from"@modelcontextprotocol/sdk/server/index.js";import{CallToolRequestSchema as QW,ListToolsRequestSchema as KW}from"@modelcontextprotocol/sdk/types.js";import{randomUUID as AK}from"node:crypto";import{createServer as uK}from"node:http";import{StreamableHTTPServerTransport as cK}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as C7}from"@modelcontextprotocol/sdk/types.js";var b7=new Set(["127.0.0.1","localhost","[::1]","::1"]);function TK(Z){let X=Z.trim();if(X.length===0)return null;if(X.startsWith("[")){let J=X.indexOf("]");if(J===-1)return null;let H=X.slice(0,J+1),w=X.slice(J+1);if(w.length===0)return{host:H,port:null};if(!w.startsWith(":"))return null;let B=Number(w.slice(1));if(!Number.isInteger(B)||B<=0||B>65535)return null;return{host:H,port:B}}let Q=X.lastIndexOf(":");if(Q===-1)return{host:X,port:null};let K=X.slice(Q+1),Y=Number(K);if(!Number.isInteger(Y)||Y<=0||Y>65535)return{host:X,port:null};return{host:X.slice(0,Q),port:Y}}function v7(Z){return b7.has(Z)||b7.has(Z.toLowerCase())}function R7(Z,X){let Q=Z.headers.host;if(typeof Q!=="string")return{ok:!1,status:403,reason:"missing-host"};let K=TK(Q);if(!K)return{ok:!1,status:403,reason:"bad-host"};if(!v7(K.host))return{ok:!1,status:403,reason:"non-loopback-host"};if(K.port!==null&&K.port!==X)return{ok:!1,status:403,reason:"host-port-mismatch"};let Y=Z.headers.origin;if(typeof Y==="string"&&Y.length>0){if(Y!=="null"){let J;try{J=new URL(Y)}catch{return{ok:!1,status:403,reason:"bad-origin"}}if(!v7(J.hostname))return{ok:!1,status:403,reason:"non-loopback-origin"}}}return{ok:!0}}var h7="/mcp",lK=43274,N7=16777216,dK=1800000,iK=300000,M7=200,aK=-32700,$0=-32600,r2=-32603;function V0(Z,X,Q,K,Y){Z.statusCode=X,Z.setHeader("content-type","application/json"),Z.end(JSON.stringify({jsonrpc:"2.0",error:{code:Q,message:K,...Y?{data:Y}:{}},id:null}))}class o2 extends Error{constructor(){super("expected application/json");this.name="BadContentTypeError"}}class n2 extends Error{constructor(){super(`body exceeds ${N7} bytes`);this.name="BodyTooLargeError"}}async function pK(Z){if(Z.method&&Z.method!=="POST")return;let X=Z.headers["content-type"];if(typeof X==="string"&&X.trim().length>0){if(!X.toLowerCase().includes("application/json"))throw new o2}let Q=0,K=[];for await(let J of Z){let H=typeof J==="string"?Buffer.from(J):J;if(Q+=H.byteLength,Q>N7)throw new n2;K.push(H)}if(K.length===0)return;let Y=Buffer.concat(K).toString("utf8");if(Y.length===0)return;return JSON.parse(Y)}function sK(Z){if(Array.isArray(Z))return Z.some(C7);return C7(Z)}function rK(Z){if(typeof Z==="number")return Z;let X=process.env.IDEAWAVE_MCP_PORT;if(X&&X.trim().length>0){let Q=Number(X);if(Number.isInteger(Q)&&Q>=0&&Q<65536)return Q}return lK}async function oK(Z,X){let Q=(Y)=>new Promise((J,H)=>{let w=(U)=>{Z.off("listening",B),H(U)},B=()=>{Z.off("error",w),J()};Z.once("error",w),Z.once("listening",B),Z.listen(Y,"127.0.0.1")});try{await Q(X)}catch(Y){if(Y.code!=="EADDRINUSE"||X===0)throw Y;console.warn(`[mcp] port ${X} in use, falling back to an OS-assigned port; external CLIs will need to re-paste the install command from Settings → External agents`),await Q(0)}let K=Z.address();if(K==null||typeof K==="string")throw Error("[mcp] failed to read bound address");return K.port}function nK(Z,X){if(X&&typeof X==="object"&&!Array.isArray(X)){let K=X.params;if(K&&typeof K==="object"&&!Array.isArray(K)){let Y=K.clientInfo;if(Y&&typeof Y==="object"&&!Array.isArray(Y)){let J=Y.name;if(typeof J==="string"&&J.trim().length>0)return J.trim()}}}let Q=Z.headers["user-agent"];if(typeof Q==="string"&&Q.trim().length>0)return Q.trim();return null}async function D7(Z){let X=new Map,Q=0;function K(U){let q=X.get(U);if(q)q.lastActivity=Date.now()}async function Y(U,q){X.delete(U),await q.transport.close().catch(()=>{return})}async function J(){let U=null,q=1/0;for(let[h,M]of X)if(M.lastActivity<q)q=M.lastActivity,U=h;if(U!==null){let h=X.get(U);if(h)console.warn(`[mcp] session cap of ${M7} reached; evicting ${U}`),await Y(U,h)}}let H=setInterval(()=>{let U=Date.now()-dK;for(let[q,h]of X)if(h.lastActivity<U)console.log(`[mcp] sweeping idle session ${q}`),Y(q,h)},iK);H.unref?.();let w=uK((U,q)=>{(async()=>{let h;try{h=new URL(U.url??"/","http://127.0.0.1").pathname}catch{V0(q,400,$0,"bad-url");return}if(h!==h7){V0(q,404,$0,"not-found");return}let M=U.method??"POST";if(M!=="POST"&&M!=="GET"&&M!=="DELETE"){q.setHeader("Allow","GET, POST, DELETE"),V0(q,405,$0,"method-not-allowed");return}let O=R7(U,Q);if(!O.ok){V0(q,O.status,$0,"forbidden",{reason:O.reason});return}let f=U.headers["mcp-session-id"],C=typeof f==="string"?f:void 0;if(M==="GET"||M==="DELETE"){if(!C||!X.has(C)){V0(q,400,$0,"no-session",{hint:"Open a POST initialize first to receive an Mcp-Session-Id."});return}let $=X.get(C).transport;K(C);try{await $.handleRequest(U,q)}catch(v){if(console.error("[mcp] transport.handleRequest (GET/DELETE) threw",v),!q.headersSent)V0(q,500,r2,"internal")}return}let N;try{N=await pK(U)}catch($){if($ instanceof o2){V0(q,415,$0,"expected-application-json");return}if($ instanceof n2){V0(q,413,$0,"body-too-large");return}V0(q,400,aK,"invalid-json");return}let b;if(C&&X.has(C))b=X.get(C).transport,K(C);else if(!C&&N!==void 0&&sK(N)){let $=U.headers["x-ideawave-user-id"],v=typeof $==="string"&&$.trim().length>0?$.trim():null,G=U.headers["x-ideawave-frontend-session-id"],_=typeof G==="string"&&G.trim().length>0?G.trim():null,D=U.headers["x-ideawave-tool-surface"],x=typeof D==="string"&&D.trim()==="read"?"read":"full",E=U.headers["x-ideawave-images-supported"],k=typeof E==="string"&&E.trim()==="1",l=U.headers["x-ideawave-card-id"],L0=typeof l==="string"&&l.trim().length>0?l.trim():null,y0=U.headers["x-ideawave-board-id"],I=typeof y0==="string"&&y0.trim().length>0?y0.trim():null,p=U.headers["x-ideawave-run-folder"],c=typeof p==="string"&&p.trim().length>0?p.trim():null,X0=nK(U,N);if(X.size>=M7)await J();let r=null,G0=new cK({sessionIdGenerator:()=>AK(),onsessioninitialized:(u0)=>{r=u0,X.set(u0,{transport:G0,lastActivity:Date.now()})},onsessionclosed:(u0)=>{X.delete(u0)}});G0.onclose=()=>{if(G0.sessionId)X.delete(G0.sessionId)};try{await Z.buildServer({userId:v,frontendSessionId:_,boardId:I,toolSurface:x,imagesSupported:k,cardId:L0,runFolder:c,clientHint:X0}).connect(G0)}catch(u0){if(console.error("[mcp] buildServer/connect failed",u0),r)X.delete(r);await G0.close().catch(()=>{return}),V0(q,500,r2,"server-init-failed");return}b=G0}else{V0(q,400,$0,"no-session",{hint:"Non-initialize requests must include a valid Mcp-Session-Id header obtained from a prior initialize."});return}try{await b.handleRequest(U,q,N)}catch($){if(console.error("[mcp] transport.handleRequest threw",$),!q.headersSent)V0(q,500,r2,"internal")}})().catch((h)=>{console.error("[mcp] unhandled request handler error:",h)})});return Q=await oK(w,rK(Z.port)),{url:`http://127.0.0.1:${Q}${h7}`,port:Q,close:async()=>{clearInterval(H);for(let U of X.values())await U.transport.close().catch(()=>{return});X.clear(),await new Promise((U)=>w.close(()=>U()))}}}var WW={name:"ideawave-board",version:"1.0.0"},O4="list_run_folder",b4="read_run_folder_file",G7=new Set(["list_boards","get_board","screenshot_board","list_nodes","list_edges","inspect_node","list_context_sources","read_context_card","read_context_file","read_context_image","list_context_folder","get_board_wiki","search_board","get_card_messages","list_agent_cards","inspect_neighbors",O4,b4]),E7=new Set(["inspect_diagram"]),YW=[{name:O4,description:"List visible files and folders under the selected runtime run folder. Hidden/config folders are omitted.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Optional relative path inside the selected run folder. Defaults to the run-folder root."}},additionalProperties:!1}},{name:b4,description:"Read a text file inside the selected runtime run folder. Hidden/config paths and outside-folder paths are denied.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Relative path to a text file inside the selected run folder."}},required:["path"],additionalProperties:!1}}];function t2(Z){return{content:[{type:"text",text:Z}]}}function JW(Z){return t2(JSON.stringify(Z,null,2))}function $7(Z){return{...t2(Z),isError:!0}}async function VW(Z,X){if(!X||Z.isError)return Z;let Q=Z.content.find((J)=>J.type==="text");if(!Q)return Z;let K;try{let J=JSON.parse(Q.text);if(typeof J.path!=="string")return Z;K=v1.resolve(J.path)}catch{return Z}let Y=v1.resolve(v1.join(ZW.tmpdir(),"ideawave-screenshots"));if(v1.dirname(K)!==Y||!/^board-[a-z0-9-]+\.png$/i.test(v1.basename(K)))return Z;try{if(!(await tK(K)).isFile())return Z;let H=await eK(K);if(H.byteLength<1024||H.byteLength>26214400||!H.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])))return Z;return{...Z,content:[...Z.content,{type:"image",data:H.toString("base64"),mimeType:"image/png"}]}}catch{return Z}}function jW(Z,X,Q="full",K=!1){return Z.getMetadata(X).filter((Y)=>{let J=p1(Y.name);if(Q==="read"&&!G7.has(J))return!1;if(!K&&E7.has(J))return!1;return!0}).map((Y)=>({name:Y.name,description:Y.description,inputSchema:Y.inputSchema}))}function HW(Z,X,Q={}){let K=jW(Z,X,Q.toolSurface??"full",Q.imagesSupported??!1);return Q.includeRunFolderTools?[...K,...YW]:K}function g7(Z,X){if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let Q=Z[X];return typeof Q==="string"?Q:null}async function zW(Z,X,Q){if(Q&&Q.trim().length>0)return Q.trim();if(!Z||!X)throw Error("Run-folder tools require an active IdeaWave board and card.");return(await R0({boardId:Z,cardId:X})).runFolder}async function wW(Z){let X=await zW(Z.boardId,Z.cardId,Z.runFolder);if(Z.name===O4){let Q=g7(Z.args,"path")??"",K=await W8(X,Q);return JW(K)}if(Z.name===b4){let Q=g7(Z.args,"path");if(!Q)return $7("read_run_folder_file requires a path.");return t2(await a1(X,Q))}return $7(`Unknown local tool "${Z.name}"`)}function UW(Z,X,Q,K,Y,J="full",H=!1){let w=new XW(WW,{capabilities:{tools:{}}}),B=async()=>{if(H)return!0;if(R8(K))return!0;if(Q&&K)try{return(await R0({boardId:Q,cardId:K})).adapter.supportsImages===!0}catch{return!1}return!1};return w.setRequestHandler(KW,async()=>({tools:HW(Z,X,{includeRunFolderTools:Boolean(Y||Q&&K),toolSurface:J,imagesSupported:await B()})})),w.setRequestHandler(QW,async(U)=>{let{name:q,arguments:h}=U.params,M=p1(q),O=Date.now();m("mcp.tool_call_received",{frontendSessionId:X,cardId:K,toolName:M});try{if(M===O4||M===b4)return await wW({name:M,args:h,boardId:Q,cardId:K,runFolder:Y});if(J==="read"&&!G7.has(M))throw Error(`Tool "${q}" is not available in read-only mode`);if(E7.has(M)&&!await B())throw Error(`Tool "${q}" requires a runtime that supports image input`);let f=await Z.callTool(X,M,h??{},void 0,K??void 0);if(m("mcp.tool_result_returned",{frontendSessionId:X,cardId:K,toolName:M,elapsedMs:Date.now()-O}),f&&typeof f==="object"&&Array.isArray(f.content)){let C=f;return M==="screenshot_board"?await VW(C,await B()):C}return{content:[{type:"text",text:typeof f==="string"?f:JSON.stringify(f)}]}}catch(f){return m("mcp.tool_result_returned",{frontendSessionId:X,cardId:K,toolName:M,elapsedMs:Date.now()-O,hasError:!0}),{content:[{type:"text",text:f instanceof Error?f.message:"Tool call failed"}],isError:!0}}}),w}function m7(Z,X){return D7({buildServer:(Q)=>UW(Z,Q.frontendSessionId,Q.boardId,Q.cardId,Q.runFolder,Q.toolSurface,Q.imagesSupported),port:X})}import v4 from"node:fs/promises";import e2 from"node:os";import R4 from"node:path";function k7(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function FW(){let[Z,X]=await Promise.all([W0(),s6()]),Q=Z.globalDefaultConfigId?Z.runtimes.find((K)=>K.id===Z.globalDefaultConfigId)??null:null;return{runtimes:Z.runtimes,globalDefaultConfigId:Z.globalDefaultConfigId,globalDefaultEffective:Q?{runFolder:Q.runFolder??e2.homedir(),modelId:Q.defaultModelId??null,configValues:Q.defaultConfigValues??{}}:null,knownAdapters:d0().map((K)=>({id:K.id,displayName:K.displayName})),readiness:X}}async function BW(Z){try{let X=await R0({boardId:Z.boardId,cardId:Z.cardId});return{resolved:{configId:X.entry.id,adapterId:X.entry.kind==="registered"?X.entry.adapterId:null,displayName:X.entry.displayName,runFolder:X.runFolder,modelId:X.modelId,configValues:X.configValues}}}catch(X){if(X instanceof E0)return{resolved:null};throw X}}async function LW(Z){return j0((X)=>{let Q=X.runtimes.find((J)=>J.kind==="registered"&&J.adapterId===Z.adapterId);if(Q)return Q;let K=d0().find((J)=>J.id===Z.adapterId);if(!K)throw Error(`Unknown adapterId: ${Z.adapterId}`);let Y={id:k7(),kind:"registered",adapterId:Z.adapterId,displayName:K.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return X.runtimes.push(Y),Y})}async function qW(Z){return j0((X)=>{let Q={id:k7(),kind:"custom",displayName:Z.displayName,command:Z.command,args:Z.args,env:Z.env,runFolder:Z.runFolder,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return X.runtimes.push(Q),Q})}async function xW(Z){await j0((X)=>{if(X.runtimes=X.runtimes.filter((Q)=>Q.id!==Z.runtimeConfigId),X.globalDefaultConfigId===Z.runtimeConfigId)X.globalDefaultConfigId=null;for(let Q of Object.keys(X.boardOverrides))if(X.boardOverrides[Q].runtimeConfigId===Z.runtimeConfigId)delete X.boardOverrides[Q];for(let Q of Object.keys(X.cardOverrides))if(X.cardOverrides[Q].runtimeConfigId===Z.runtimeConfigId)delete X.cardOverrides[Q]})}async function PW(Z){await j0((X)=>{let Q=X.runtimes.find((K)=>K.id===Z.runtimeConfigId);if(!Q)throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);if(X.globalDefaultConfigId=Z.runtimeConfigId,Z.runFolder!==void 0)Q.runFolder=Z.runFolder;if(Z.modelId!==void 0)Q.defaultModelId=Z.modelId;if(Z.configValues!==void 0)Q.defaultConfigValues=Z.configValues})}async function fW(Z){Z.boardId,await j0((X)=>{if(Z.runtimeConfigId===null){delete X.cardOverrides[Z.cardId];return}if(!X.runtimes.some((Y)=>Y.id===Z.runtimeConfigId))throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);let K=X.cardOverrides[Z.cardId];X.cardOverrides[Z.cardId]={runtimeConfigId:Z.runtimeConfigId,runFolder:Z.runFolder!==void 0?Z.runFolder:K?.runFolder??null,modelId:Z.modelId!==void 0?Z.modelId:K?.modelId??null,configValues:Z.configValues!==void 0?Z.configValues:K?.configValues??{}}})}async function yW(Z){let Q=(await W0()).runtimes.find((H)=>H.id===Z.runtimeConfigId);if(!Q)throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);let K=F0(Q),Y=await K.resolveSpawnConfig(Q),J=Q.runFolder??e2.homedir();try{let H=await y8({spawn:{...Y,cwd:J},modelId:Z.modelId??Q.defaultModelId??null,configValues:Z.configValues??Q.defaultConfigValues??{}}),w=d1({adapterId:K.id,models:H.models,currentModelId:H.currentModelId}),B=new Date().toISOString();return await j0((U)=>{let q=U.runtimes.find((h)=>h.id===Z.runtimeConfigId);if(q)q.discoveredModels=w,q.discoveredConfigOptions=H.configOptions,q.discoveredAt=B}),{ok:!0,models:w,configOptions:H.configOptions,currentModelId:H.currentModelId}}catch(H){if(H instanceof c0)throw Error(`${H.message}${K.authHint?` ${K.authHint}`:""}`);if(H instanceof T||H instanceof U0)throw Error(H.message);throw H}}async function OW(Z){let X=e2.homedir(),Q=Z.path?.trim()?Z.path.trim():X,K=R4.resolve(Q),Y=!0;try{if(!(await v4.stat(K)).isDirectory())K=R4.dirname(K)}catch{Y=!1,K=X}let J=[];try{J=(await v4.readdir(K,{withFileTypes:!0})).filter((B)=>B.isDirectory()&&!B.name.startsWith(".")).map((B)=>({name:B.name,path:R4.join(K,B.name)})).sort((B,U)=>B.name.localeCompare(U.name))}catch{J=[]}let H=R4.dirname(K);return{path:K,parent:H===K?null:H,home:X,exists:Y,entries:J}}var _7={list:FW,getEffectiveForCard:BW,registerRegistered:LW,registerCustom:qW,unregister:xW,setUserDefault:PW,setCardOverride:fW,refreshModels:yW,browseFolder:OW};var bW=[{id:"claude-code",displayName:"Claude Code"},{id:"codex",displayName:"Codex"},{id:"copilot",displayName:"Copilot"},{id:"opencode",displayName:"OpenCode"}];function vW(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function S7(){try{let Z=await W0();if(Z.globalDefaultConfigId){if(Z.runtimes.some((Q)=>Q.id===Z.globalDefaultConfigId))return Z.globalDefaultConfigId}for(let X of bW){if((await r6(X.id))?.status!=="ready")continue;let K=null;if(await j0((Y)=>{if(Y.globalDefaultConfigId){if(Y.runtimes.some((w)=>w.id===Y.globalDefaultConfigId)){K=Y.globalDefaultConfigId;return}}let J=Y.runtimes.find((H)=>H.kind==="registered"&&H.adapterId===X.id);if(!J){let H={id:vW(),kind:"registered",adapterId:X.id,displayName:X.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};Y.runtimes.push(H),J=H}Y.globalDefaultConfigId=J.id,K=J.id}),K)return console.log(`[ideawave-cli] using agent runtime: ${X.displayName}`),K}return console.warn("[ideawave-cli] no agent runtime detected on PATH (tried claude, codex, gh copilot, opencode). Install one to run agents."),null}catch(Z){return console.warn("[ideawave-cli] runtime auto-seed failed",Z),null}}var RW=120000;function CW(){if(typeof crypto<"u"&&"randomUUID"in crypto)return`call_${crypto.randomUUID()}`;return`call_${Date.now()}_${Math.random().toString(16).slice(2)}`}class Z6{sessions=new Map;createCallId;toolCallTimeoutMs;constructor(Z={}){this.createCallId=Z.createCallId??CW,this.toolCallTimeoutMs=Z.toolCallTimeoutMs??RW}register(Z){let X=this.sessions.get(Z.frontendSessionId);if(X){if(X.userId!==Z.userId)this.rejectPending(X,"frontend session user changed"),X.activeRunIds.clear();this.sessions.set(Z.frontendSessionId,{frontendSessionId:Z.frontendSessionId,userId:Z.userId,tools:Z.tools,send:Z.send,pendingToolCalls:X.pendingToolCalls,activeRunIds:X.activeRunIds,activeRunCardIds:X.activeRunCardIds});return}this.sessions.set(Z.frontendSessionId,{frontendSessionId:Z.frontendSessionId,userId:Z.userId,tools:Z.tools,send:Z.send,pendingToolCalls:new Map,activeRunIds:new Set,activeRunCardIds:new Map})}disconnect(Z,X="frontend session disconnected"){let Q=this.sessions.get(Z);if(!Q)return{activeRunIds:[]};return this.sessions.delete(Z),this.rejectPending(Q,X),{activeRunIds:Array.from(Q.activeRunIds)}}sessionCount(){return this.sessions.size}has(Z){return this.sessions.has(Z)}getUserId(Z){return this.sessions.get(Z)?.userId??null}setMetadata(Z,X){let Q=this.sessions.get(Z);if(Q)Q.tools=X}getMetadata(Z){if(!Z)return[];return this.sessions.get(Z)?.tools??[]}sendToSession(Z,X){let Q=this.sessions.get(Z);if(!Q)return!1;return Q.send(X),!0}callTool(Z,X,Q,K,Y){if(!Z)return Promise.reject(Error("MCP tool call is missing a frontend session id"));let J=this.sessions.get(Z);if(!J)return Promise.reject(Error(`Frontend session ${Z} is not connected`));let H=this.createCallId();return new Promise((w,B)=>{let U=K??(Y?this.getActiveRunIdForCard(J,Y):this.getSoleActiveRunId(J)),q=Y??(U?J.activeRunCardIds.get(U):void 0),h=Date.now(),M=setTimeout(()=>{J.pendingToolCalls.delete(H),m("tool_queue.timeout",{frontendSessionId:Z,runId:U,cardId:q,callId:H,toolName:X,elapsedMs:Date.now()-h,queueDepth:J.pendingToolCalls.size}),B(Error(`Tool "${X}" timed out waiting for the frontend`))},this.toolCallTimeoutMs);J.pendingToolCalls.set(H,{resolve:w,reject:B,timer:M,name:X,runId:U??null,cardId:q??null,startedAt:h}),m("tool_queue.forwarded_to_browser",{frontendSessionId:Z,runId:U,cardId:q,callId:H,toolName:X,queueDepth:J.pendingToolCalls.size}),J.send({type:"tool_call",callId:H,name:X,args:Q,...U?{runId:U}:{},...q?{cardId:q}:{}})})}handleToolResult(Z,X){let Q=this.sessions.get(Z);if(!Q)return;let K=Q.pendingToolCalls.get(X.callId);if(!K)return;if(Q.pendingToolCalls.delete(X.callId),clearTimeout(K.timer),m("tool_queue.result_received",{frontendSessionId:Z,runId:K.runId,cardId:K.cardId,callId:X.callId,toolName:K.name,elapsedMs:Date.now()-K.startedAt,queueDepth:Q.pendingToolCalls.size,ok:X.ok}),X.ok){K.resolve(X.result);return}let Y=X.result;if(Y&&typeof Y==="object"&&Array.isArray(Y.content)){K.resolve({...Y,isError:!0});return}K.reject(Error(X.error??"Tool execution failed"))}markRunActive(Z,X,Q){let K=this.sessions.get(Z);if(!K)return;if(K.activeRunIds.add(X),Q)K.activeRunCardIds.set(X,Q)}markRunSettled(Z,X){let Q=this.sessions.get(Z);if(!Q)return;Q.activeRunIds.delete(X),Q.activeRunCardIds.delete(X)}ownsRun(Z,X){return this.sessions.get(Z)?.activeRunIds.has(X)??!1}rejectPending(Z,X){for(let Q of Z.pendingToolCalls.values())clearTimeout(Q.timer),m("tool_queue.rejected",{frontendSessionId:Z.frontendSessionId,runId:Q.runId,cardId:Q.cardId,toolName:Q.name,elapsedMs:Date.now()-Q.startedAt}),Q.reject(Error(X));Z.pendingToolCalls.clear()}getSoleActiveRunId(Z){return Z.activeRunIds.size===1?Z.activeRunIds.values().next().value:void 0}getActiveRunIdForCard(Z,X){let Q=[...Z.activeRunCardIds.entries()].filter(([K,Y])=>Z.activeRunIds.has(K)&&Y===X).map(([K])=>K);return Q.length===1?Q[0]:void 0}}function T7(){return"0.0.65".trim()?"0.0.65":"dev"}var hW=process.argv.slice(2),A7=[];for(let Z of hW){if(Z==="--dev"){process.env[y4]="1";continue}A7.push(Z)}var g0=A7[0],M1=process.env.APP_ENV==="development"||process.env[y4]==="1";if(g0==="--help"||g0==="-h"||g0==="help")console.log("ideawave — host the local bridge for a running ideawave.app session."),console.log(""),console.log("Usage:"),console.log(" ideawave Serve the browser bridge and MCP forwarder."),console.log(" ideawave --version Print the CLI version."),process.exit(0);if(g0==="--version"||g0==="-v"||g0==="version")console.log(T7()),process.exit(0);if(g0)console.error(`Unknown command: ${g0}`),console.error("Run `ideawave --help` for usage."),process.exit(1);var C1=new Z6,f0=null,u7=M1?{phase:"ready",message:"Local browser-kit proxy is ready"}:{phase:"idle"},K6=new I2(new V1((Z)=>{u7=Z,f0?.sendStatus()})),C4=new l1,X6=M1?C4:K6;function A0(Z,X){C1.sendToSession(Z,X)}async function MW(Z,X){try{let Q=_7[X.method],K=await Q(X.params);A0(Z,{type:"runtime_rpc_result",requestId:X.requestId,ok:!0,result:K})}catch(Q){A0(Z,{type:"runtime_rpc_result",requestId:X.requestId,ok:!1,error:Q instanceof Error?Q.message:String(Q)})}}var h1=!1,R1=null;async function Q6(){if(h1)return;if(R1)return R1;return R1=(async()=>{try{let Z=await m7(C1);z6({...Z,requestedPort:Z.port}),console.log(`[ideawave-cli] MCP endpoint for the agent: ${Z.url}`);try{await D6({onStatusChange:(X)=>{if(o6(),f0?.sendStatus(),X.status==="failed")console.warn(`[ideawave-cli] ACP bridge setup failed for ${X.packageName}: ${X.error??"unknown error"}`)}})}catch(X){console.warn("[ideawave-cli] ACP bridge setup skipped:",X instanceof Error?X.message:String(X))}await S7(),h1=!0,console.log("[ideawave-cli] ready — agent runs will drive the board."),f0?.sendStatus()}catch(Z){console.error("[ideawave-cli] failed to start agent host:",Z),f0?.sendStatus(void 0,Z instanceof Error?Z.message:String(Z))}finally{R1=null}})(),R1}if(process.env.APP_ENV!=="development"){let Z=await y7();if(Z)console.error(`[ideawave-cli] An IdeaWave CLI is already running at ${Z}.`),console.error("[ideawave-cli] Only one CLI per machine is supported — it already serves every browser tab. Exiting."),process.exit(0)}if(!M1)J7().then((Z)=>{if(Z.phase==="ready")console.log("[ideawave-cli] screenshot engine ready");else if(Z.phase==="failed")console.warn(`[ideawave-cli] screenshot engine setup failed: ${Z.error??"unknown error"}`)});f0=await O7({registry:C1,runtime:null,mcpReady:()=>h1,capabilities:M1?[F6]:["browser-proxy-v1",w6,U6],cliVersion:T7(),browserRuntimeStatus:()=>u7,onToolMetadata:(Z)=>{console.log(`[ideawave-cli] session ${Z} advertised ${C1.getMetadata(Z).length} tools`),Q6()},onRunTurn:(Z,X)=>{console.log(`[ideawave-cli] running agent turn for card ${X.cardId} (session ${Z})`),(async()=>{if(await Q6(),!h1){A0(Z,{type:"run_settled",runId:X.runId,cardId:X.cardId,result:{assistantContent:"",model:null,latencyMs:0,errorText:"IdeaWave CLI agent host is not ready",partialText:null}});return}await N8(X,(Q)=>A0(Z,Q))})().catch(()=>{return}).finally(()=>C1.markRunSettled(Z,X.runId))},onCancelRun:(Z,X)=>{F2(X)},onRuntimeRpc:(Z,X)=>{MW(Z,X)},onBrowserRpc:(Z,X,Q)=>{X6.handleRpc(Z,X,Q).then((K)=>{A0(Z,{type:"browser_rpc_result",requestId:Q.requestId,ok:!0,result:K})},(K)=>{A0(Z,{type:"browser_rpc_result",requestId:Q.requestId,ok:!1,error:K instanceof Error?K.message:String(K)})})},onHttpRequest:(Z,X)=>X6.handleHttpRequest(Z,X),onHttpUpgrade:(Z,X,Q)=>M1?C4.handleUpgrade(Z,X,Q):!1,onWarmupRun:(Z,X,Q)=>{(async()=>{if(await Q6(),!h1)return{status:"retryable",error:"agent host is not ready"};return D8({cardId:X.cardId,boardId:X.boardId,userId:Q,frontendSessionId:Z})})().then((K)=>{if(!X.warmupId)return;A0(Z,{type:"warmup_result",warmupId:X.warmupId,cardId:X.cardId,...K})})},onDisconnect:(Z,X)=>{X6.closeFrontendSession(Z),C8(Z);for(let Q of X)F2(Q);m("bridge.frontend_disconnected",{frontendSessionId:Z,activeRuns:X.length}),J6(Z).catch((Q)=>{console.warn(`[ideawave-cli] failed to evict sessions for ${Z}:`,Q instanceof Error?Q.message:String(Q))}),console.log(`[ideawave-cli] browser session ${Z} disconnected`)}});K6.setPort(f0.port);C4.setPort(f0.port);console.log(`[ideawave-cli] browser bridge listening on ${f0.url}`);console.log("[ideawave-cli] waiting for ideawave.app browser sessions…");var I7=!1;for(let Z of["SIGINT","SIGTERM"])process.once(Z,()=>{if(I7)return;I7=!0,h8(),(async()=>{await K6.close(),await C4.close(),await H7(),await f0?.close().catch(()=>{return}),process.exit(0)})()});
926
+ ${Q}`),Z.destroy()}function TK(Z,X){return new Promise((Q,K)=>{let J=(j)=>{Z.off("listening",Y),K(j)},Y=()=>{Z.off("error",J);let j=Z.address();if(!j||typeof j==="string"){K(Error("Failed to read CLI bridge server address"));return}Q(j.port)};Z.once("error",J),Z.once("listening",Y),Z.listen(X,"127.0.0.1")})}function P7(Z){return new Promise((X,Q)=>{Z.close((K)=>{if(K)Q(K);else X()})})}async function b7(Z,X=p2()){let Q=new Map,K=new Map,J=Z.maxMessageSize??MK,Y=!1,j=(O)=>{let f=K.get(O);if(f)clearTimeout(f);K.delete(O)},U=(O)=>{K.delete(O);let{activeRunIds:f}=Z.registry.disconnect(O);Z.onDisconnect(O,f)},B=(O,f)=>{let M={type:"cli_status",connected:!0,runtime:Z.runtime,mcpReady:Z.mcpReady(),error:f,capabilities:Z.capabilities??[],cliVersion:Z.cliVersion,browserRuntime:Z.browserRuntimeStatus?.()};if(O){let N=Q.get(O);if(N)e0(N,M);return}for(let N of Q.values())e0(N,M)},z=(O,f)=>{let M=f.sessionId.trim(),N=f.userId.trim();if(!M||!N){e0(O,{type:"cli_status",connected:!1,runtime:Z.runtime,mcpReady:Z.mcpReady(),error:"Missing frontend session or user id"}),O.close();return}j(M);let b=Q.get(M);if(b&&b!==O)b.close();O.data.frontendSessionId=M,Q.set(M,O),Z.registry.register({frontendSessionId:M,userId:N,tools:f.tools,send:(g)=>e0(O,g)}),B(M),Z.onToolMetadata?.(M)},q=(O,f)=>{let M=Z.registry.getUserId(O);if(!M)return;switch(f.type){case"bridge_ping":{let N=Q.get(O);if(N)e0(N,{type:"bridge_pong"});break}case"tool_metadata":Z.registry.setMetadata(O,f.tools),Z.onToolMetadata?.(O);break;case"tool_result":Z.registry.handleToolResult(O,f);break;case"run_turn":m("bridge.run_received",{runId:f.run.runId,cardId:f.run.cardId,frontendSessionId:O}),Z.registry.markRunActive(O,f.run.runId,f.run.cardId),Z.onRunTurn(O,{...f.run,frontendSessionId:O,userId:M});break;case"cancel_run":if(Z.registry.ownsRun(O,f.runId))Z.onCancelRun(O,f.runId);break;case"runtime_rpc":Z.onRuntimeRpc(O,f);break;case"browser_rpc":Z.onBrowserRpc?.(O,Q.get(O)?.data.frontendOrigin??"",f);break;case"warmup_run":Z.onWarmupRun(O,{...f,frontendSessionId:O},M);break;default:break}},R=(O,f)=>{let M=f4(O.headers.origin),N=r2(M),b={Vary:"Origin"};if(N&&M)b["Access-Control-Allow-Origin"]=M,b["Access-Control-Allow-Private-Network"]="true";if(O.method==="OPTIONS"){f.writeHead(204,{...b,"Access-Control-Allow-Methods":"GET, OPTIONS","Access-Control-Allow-Headers":"*","Access-Control-Max-Age":"600"}),f.end();return}if(O.method!=="GET"){f.writeHead(405,b),f.end();return}f.writeHead(200,{...b,"content-type":"application/json","cache-control":"no-store"}),f.end(JSON.stringify({ideawave:!0,runtime:Z.runtime,mcpReady:Z.mcpReady(),capabilities:Z.capabilities??[],cliVersion:Z.cliVersion,browserRuntime:Z.browserRuntimeStatus?.()}))},h=(O,f)=>{let M=f4(O.headers.origin),N=r2(M),b={Vary:"Origin"};if(N&&M)b["Access-Control-Allow-Origin"]=M,b["Access-Control-Allow-Private-Network"]="true";if(O.method==="OPTIONS"){f.writeHead(204,{...b,"Access-Control-Allow-Methods":"POST, OPTIONS","Access-Control-Allow-Headers":"content-type","Access-Control-Max-Age":"600"}),f.end();return}if(!N){f.writeHead(403,b),f.end();return}if(O.method!=="POST"){f.writeHead(405,b),f.end();return}let g={...b,"content-type":"application/json"},v=(D,x)=>{f.writeHead(D,g),f.end(JSON.stringify(x))},G="",_=!1;O.on("data",(D)=>{if(G+=D.toString("utf8"),G.length>$K)_=!0,O.destroy()}),O.on("end",()=>{if(_){v(400,{ok:!1,error:"Request body too large"});return}let D;try{D=JSON.parse(G)}catch{v(400,{ok:!1,error:"Invalid JSON body"});return}let x=typeof D.url==="string"?D.url:"";if(!L7(x)){v(400,{ok:!1,error:"url must be an http(s) loopback or /static_boards/ page URL"});return}let E=(k,l)=>{let L0=typeof k==="number"?k:Number.NaN;if(!Number.isFinite(L0))return l;return Math.min(4000,Math.max(200,Math.round(L0)))};q7({url:x,width:E(D.width,1440),height:E(D.height,900)}).then((k)=>v(200,{ok:!0,path:k.path,engine:k.engine})).catch((k)=>{let l=k instanceof b1?503:k instanceof P4?429:500;v(l,{ok:!1,...k instanceof b1?{installing:!0}:{},error:k instanceof Error?k.message:String(k)})})})};for(let O of X){let f=CK((b,g)=>{(async()=>{let v=new URL(b.url??"/","http://127.0.0.1").pathname;if(v===z7){R(b,g);return}if(v===gK){h(b,g);return}if(await Z.onHttpRequest?.(b,g))return;g.writeHead(404,{"content-type":"text/plain"}),g.end("IdeaWave CLI bridge")})().catch((v)=>{if(g.headersSent){g.destroy(v instanceof Error?v:void 0);return}g.writeHead(500,{"content-type":"text/plain"}),g.end("IdeaWave CLI bridge request failed")})}),M=new hK({noServer:!0,maxPayload:J}),N=(b)=>{if(b.idleTimer)clearTimeout(b.idleTimer);b.idleTimer=setTimeout(()=>{b.close()},NK),b.idleTimer.unref?.()};M.on("connection",(b,g)=>{let v=b;v.data={id:RK(),frontendSessionId:null,frontendOrigin:new URL(f4(g.headers.origin)??y7).origin},v.idleTimer=null,N(v),v.on("ping",()=>N(v)),v.on("pong",()=>N(v)),v.on("error",()=>{if(v.idleTimer)clearTimeout(v.idleTimer);v.close()}),v.on("message",(G)=>{N(v);let _=IK(G);if(J>0&&_.length>J)return;let D=$1(_);if(!D)return;let x=v.data.frontendSessionId;if(!x){if(D.type==="bridge_probe")e0(v,{type:"bridge_probe_ack",protocolVersion:D.protocolVersion});else if(D.type==="frontend_hello")z(v,D);return}q(x,D)}),v.on("close",()=>{if(v.idleTimer)clearTimeout(v.idleTimer);let G=v.data.frontendSessionId;if(!G)return;if(Q.get(G)!==v)return;if(Q.delete(G),j(G),Y)return;K.set(G,setTimeout(()=>U(G),DK))})}),f.on("upgrade",(b,g,v)=>{let G=new URL(b.url??"/","http://127.0.0.1").pathname;if(Z.onHttpUpgrade?.(b,g,v))return;if(G!==a2){x7(g,404,"Not Found");return}if(!r2(f4(b.headers.origin))){x7(g,403,"Forbidden");return}M.handleUpgrade(b,g,v,(_)=>{M.emit("connection",_,b)})});try{let b=await TK(f,O);return{url:`ws://127.0.0.1:${b}${a2}`,port:b,sendStatus:B,close:async()=>{Y=!0;for(let g of K.values())clearTimeout(g);K.clear();for(let g of M.clients){let v=g;if(v.idleTimer)clearTimeout(v.idleTimer);v.close()}M.close(),await P7(f).catch(()=>{return})}}}catch(b){if(M.close(),await P7(f).catch(()=>{return}),b?.code==="EADDRINUSE")continue;throw b}}throw Error(`No free IdeaWave CLI bridge port found in ${X[0]}-${X.at(-1)}`)}import{lstat as eK,readFile as ZW}from"node:fs/promises";import XW from"node:os";import v1 from"node:path";import{Server as QW}from"@modelcontextprotocol/sdk/server/index.js";import{CallToolRequestSchema as KW,ListToolsRequestSchema as WW}from"@modelcontextprotocol/sdk/types.js";import{randomUUID as uK}from"node:crypto";import{createServer as cK}from"node:http";import{StreamableHTTPServerTransport as lK}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{isInitializeRequest as h7}from"@modelcontextprotocol/sdk/types.js";var v7=new Set(["127.0.0.1","localhost","[::1]","::1"]);function AK(Z){let X=Z.trim();if(X.length===0)return null;if(X.startsWith("[")){let Y=X.indexOf("]");if(Y===-1)return null;let j=X.slice(0,Y+1),U=X.slice(Y+1);if(U.length===0)return{host:j,port:null};if(!U.startsWith(":"))return null;let B=Number(U.slice(1));if(!Number.isInteger(B)||B<=0||B>65535)return null;return{host:j,port:B}}let Q=X.lastIndexOf(":");if(Q===-1)return{host:X,port:null};let K=X.slice(Q+1),J=Number(K);if(!Number.isInteger(J)||J<=0||J>65535)return{host:X,port:null};return{host:X.slice(0,Q),port:J}}function R7(Z){return v7.has(Z)||v7.has(Z.toLowerCase())}function C7(Z,X){let Q=Z.headers.host;if(typeof Q!=="string")return{ok:!1,status:403,reason:"missing-host"};let K=AK(Q);if(!K)return{ok:!1,status:403,reason:"bad-host"};if(!R7(K.host))return{ok:!1,status:403,reason:"non-loopback-host"};if(K.port!==null&&K.port!==X)return{ok:!1,status:403,reason:"host-port-mismatch"};let J=Z.headers.origin;if(typeof J==="string"&&J.length>0){if(J!=="null"){let Y;try{Y=new URL(J)}catch{return{ok:!1,status:403,reason:"bad-origin"}}if(!R7(Y.hostname))return{ok:!1,status:403,reason:"non-loopback-origin"}}}return{ok:!0}}var M7="/mcp",iK=43274,D7=16777216,dK=1800000,aK=300000,N7=200,pK=-32700,g0=-32600,s2=-32603;function V0(Z,X,Q,K,J){Z.statusCode=X,Z.setHeader("content-type","application/json"),Z.end(JSON.stringify({jsonrpc:"2.0",error:{code:Q,message:K,...J?{data:J}:{}},id:null}))}class o2 extends Error{constructor(){super("expected application/json");this.name="BadContentTypeError"}}class n2 extends Error{constructor(){super(`body exceeds ${D7} bytes`);this.name="BodyTooLargeError"}}async function rK(Z){if(Z.method&&Z.method!=="POST")return;let X=Z.headers["content-type"];if(typeof X==="string"&&X.trim().length>0){if(!X.toLowerCase().includes("application/json"))throw new o2}let Q=0,K=[];for await(let Y of Z){let j=typeof Y==="string"?Buffer.from(Y):Y;if(Q+=j.byteLength,Q>D7)throw new n2;K.push(j)}if(K.length===0)return;let J=Buffer.concat(K).toString("utf8");if(J.length===0)return;return JSON.parse(J)}function sK(Z){if(Array.isArray(Z))return Z.some(h7);return h7(Z)}function oK(Z){if(typeof Z==="number")return Z;let X=process.env.IDEAWAVE_MCP_PORT;if(X&&X.trim().length>0){let Q=Number(X);if(Number.isInteger(Q)&&Q>=0&&Q<65536)return Q}return iK}async function nK(Z,X){let Q=(J)=>new Promise((Y,j)=>{let U=(z)=>{Z.off("listening",B),j(z)},B=()=>{Z.off("error",U),Y()};Z.once("error",U),Z.once("listening",B),Z.listen(J,"127.0.0.1")});try{await Q(X)}catch(J){if(J.code!=="EADDRINUSE"||X===0)throw J;console.warn(`[mcp] port ${X} in use, falling back to an OS-assigned port; external CLIs will need to re-paste the install command from Settings → External agents`),await Q(0)}let K=Z.address();if(K==null||typeof K==="string")throw Error("[mcp] failed to read bound address");return K.port}function tK(Z,X){if(X&&typeof X==="object"&&!Array.isArray(X)){let K=X.params;if(K&&typeof K==="object"&&!Array.isArray(K)){let J=K.clientInfo;if(J&&typeof J==="object"&&!Array.isArray(J)){let Y=J.name;if(typeof Y==="string"&&Y.trim().length>0)return Y.trim()}}}let Q=Z.headers["user-agent"];if(typeof Q==="string"&&Q.trim().length>0)return Q.trim();return null}async function g7(Z){let X=new Map,Q=0;function K(z){let q=X.get(z);if(q)q.lastActivity=Date.now()}async function J(z,q){X.delete(z),await q.transport.close().catch(()=>{return})}async function Y(){let z=null,q=1/0;for(let[R,h]of X)if(h.lastActivity<q)q=h.lastActivity,z=R;if(z!==null){let R=X.get(z);if(R)console.warn(`[mcp] session cap of ${N7} reached; evicting ${z}`),await J(z,R)}}let j=setInterval(()=>{let z=Date.now()-dK;for(let[q,R]of X)if(R.lastActivity<z)console.log(`[mcp] sweeping idle session ${q}`),J(q,R)},aK);j.unref?.();let U=cK((z,q)=>{(async()=>{let R;try{R=new URL(z.url??"/","http://127.0.0.1").pathname}catch{V0(q,400,g0,"bad-url");return}if(R!==M7){V0(q,404,g0,"not-found");return}let h=z.method??"POST";if(h!=="POST"&&h!=="GET"&&h!=="DELETE"){q.setHeader("Allow","GET, POST, DELETE"),V0(q,405,g0,"method-not-allowed");return}let O=C7(z,Q);if(!O.ok){V0(q,O.status,g0,"forbidden",{reason:O.reason});return}let f=z.headers["mcp-session-id"],M=typeof f==="string"?f:void 0;if(h==="GET"||h==="DELETE"){if(!M||!X.has(M)){V0(q,400,g0,"no-session",{hint:"Open a POST initialize first to receive an Mcp-Session-Id."});return}let g=X.get(M).transport;K(M);try{await g.handleRequest(z,q)}catch(v){if(console.error("[mcp] transport.handleRequest (GET/DELETE) threw",v),!q.headersSent)V0(q,500,s2,"internal")}return}let N;try{N=await rK(z)}catch(g){if(g instanceof o2){V0(q,415,g0,"expected-application-json");return}if(g instanceof n2){V0(q,413,g0,"body-too-large");return}V0(q,400,pK,"invalid-json");return}let b;if(M&&X.has(M))b=X.get(M).transport,K(M);else if(!M&&N!==void 0&&sK(N)){let g=z.headers["x-ideawave-user-id"],v=typeof g==="string"&&g.trim().length>0?g.trim():null,G=z.headers["x-ideawave-frontend-session-id"],_=typeof G==="string"&&G.trim().length>0?G.trim():null,D=z.headers["x-ideawave-tool-surface"],x=typeof D==="string"&&D.trim()==="read"?"read":"full",E=z.headers["x-ideawave-images-supported"],k=typeof E==="string"&&E.trim()==="1",l=z.headers["x-ideawave-card-id"],L0=typeof l==="string"&&l.trim().length>0?l.trim():null,y0=z.headers["x-ideawave-board-id"],I=typeof y0==="string"&&y0.trim().length>0?y0.trim():null,p=z.headers["x-ideawave-run-folder"],c=typeof p==="string"&&p.trim().length>0?p.trim():null,X0=tK(z,N);if(X.size>=N7)await Y();let s=null,G0=new lK({sessionIdGenerator:()=>uK(),onsessioninitialized:(u0)=>{s=u0,X.set(u0,{transport:G0,lastActivity:Date.now()})},onsessionclosed:(u0)=>{X.delete(u0)}});G0.onclose=()=>{if(G0.sessionId)X.delete(G0.sessionId)};try{await Z.buildServer({userId:v,frontendSessionId:_,boardId:I,toolSurface:x,imagesSupported:k,cardId:L0,runFolder:c,clientHint:X0}).connect(G0)}catch(u0){if(console.error("[mcp] buildServer/connect failed",u0),s)X.delete(s);await G0.close().catch(()=>{return}),V0(q,500,s2,"server-init-failed");return}b=G0}else{V0(q,400,g0,"no-session",{hint:"Non-initialize requests must include a valid Mcp-Session-Id header obtained from a prior initialize."});return}try{await b.handleRequest(z,q,N)}catch(g){if(console.error("[mcp] transport.handleRequest threw",g),!q.headersSent)V0(q,500,s2,"internal")}})().catch((R)=>{console.error("[mcp] unhandled request handler error:",R)})});return Q=await nK(U,oK(Z.port)),{url:`http://127.0.0.1:${Q}${M7}`,port:Q,close:async()=>{clearInterval(j);for(let z of X.values())await z.transport.close().catch(()=>{return});X.clear(),await new Promise((z)=>U.close(()=>z()))}}}var JW={name:"ideawave-board",version:"1.0.0"},O4="list_run_folder",b4="read_run_folder_file",E7=new Set(["list_boards","get_board","screenshot_board","list_nodes","list_edges","inspect_node","list_context_sources","read_context_card","read_context_file","read_context_image","list_context_folder","get_board_wiki","search_board","get_card_messages","list_agent_cards","inspect_neighbors",O4,b4]),m7=new Set(["inspect_diagram"]),YW=[{name:O4,description:"List visible files and folders under the selected runtime run folder. Hidden/config folders are omitted.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Optional relative path inside the selected run folder. Defaults to the run-folder root."}},additionalProperties:!1}},{name:b4,description:"Read a text file inside the selected runtime run folder. Hidden/config paths and outside-folder paths are denied.",inputSchema:{type:"object",properties:{path:{type:"string",description:"Relative path to a text file inside the selected run folder."}},required:["path"],additionalProperties:!1}}];function t2(Z){return{content:[{type:"text",text:Z}]}}function VW(Z){return t2(JSON.stringify(Z,null,2))}function $7(Z){return{...t2(Z),isError:!0}}async function jW(Z,X){if(!X||Z.isError)return Z;let Q=Z.content.find((Y)=>Y.type==="text");if(!Q)return Z;let K;try{let Y=JSON.parse(Q.text);if(typeof Y.path!=="string")return Z;K=v1.resolve(Y.path)}catch{return Z}let J=v1.resolve(v1.join(XW.tmpdir(),"ideawave-screenshots"));if(v1.dirname(K)!==J||!/^board-[a-z0-9-]+\.png$/i.test(v1.basename(K)))return Z;try{if(!(await eK(K)).isFile())return Z;let j=await ZW(K);if(j.byteLength<1024||j.byteLength>26214400||!j.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])))return Z;return{...Z,content:[...Z.content,{type:"image",data:j.toString("base64"),mimeType:"image/png"}]}}catch{return Z}}function HW(Z,X,Q="full",K=!1){return Z.getMetadata(X).filter((J)=>{let Y=p1(J.name);if(Q==="read"&&!E7.has(Y))return!1;if(!K&&m7.has(Y))return!1;return!0}).map((J)=>({name:J.name,description:J.description,inputSchema:J.inputSchema}))}function wW(Z,X,Q={}){let K=HW(Z,X,Q.toolSurface??"full",Q.imagesSupported??!1);return Q.includeRunFolderTools?[...K,...YW]:K}function G7(Z,X){if(!Z||typeof Z!=="object"||Array.isArray(Z))return null;let Q=Z[X];return typeof Q==="string"?Q:null}async function zW(Z,X,Q){if(Q&&Q.trim().length>0)return Q.trim();if(!Z||!X)throw Error("Run-folder tools require an active IdeaWave board and card.");return(await R0({boardId:Z,cardId:X})).runFolder}async function UW(Z){let X=await zW(Z.boardId,Z.cardId,Z.runFolder);if(Z.name===O4){let Q=G7(Z.args,"path")??"",K=await J3(X,Q);return VW(K)}if(Z.name===b4){let Q=G7(Z.args,"path");if(!Q)return $7("read_run_folder_file requires a path.");return t2(await a1(X,Q))}return $7(`Unknown local tool "${Z.name}"`)}function FW(Z,X,Q,K,J,Y="full",j=!1){let U=new QW(JW,{capabilities:{tools:{}}}),B=async()=>{if(j)return!0;if(C3(K))return!0;if(Q&&K)try{return(await R0({boardId:Q,cardId:K})).adapter.supportsImages===!0}catch{return!1}return!1};return U.setRequestHandler(WW,async()=>({tools:wW(Z,X,{includeRunFolderTools:Boolean(J||Q&&K),toolSurface:Y,imagesSupported:await B()})})),U.setRequestHandler(KW,async(z)=>{let{name:q,arguments:R}=z.params,h=p1(q),O=Date.now();m("mcp.tool_call_received",{frontendSessionId:X,cardId:K,toolName:h});try{if(h===O4||h===b4)return await UW({name:h,args:R,boardId:Q,cardId:K,runFolder:J});if(Y==="read"&&!E7.has(h))throw Error(`Tool "${q}" is not available in read-only mode`);if(m7.has(h)&&!await B())throw Error(`Tool "${q}" requires a runtime that supports image input`);let f=await Z.callTool(X,h,R??{},void 0,K??void 0);if(m("mcp.tool_result_returned",{frontendSessionId:X,cardId:K,toolName:h,elapsedMs:Date.now()-O}),f&&typeof f==="object"&&Array.isArray(f.content)){let M=f;return h==="screenshot_board"?await jW(M,await B()):M}return{content:[{type:"text",text:typeof f==="string"?f:JSON.stringify(f)}]}}catch(f){return m("mcp.tool_result_returned",{frontendSessionId:X,cardId:K,toolName:h,elapsedMs:Date.now()-O,hasError:!0}),{content:[{type:"text",text:f instanceof Error?f.message:"Tool call failed"}],isError:!0}}}),U}function k7(Z,X){return g7({buildServer:(Q)=>FW(Z,Q.frontendSessionId,Q.boardId,Q.cardId,Q.runFolder,Q.toolSurface,Q.imagesSupported),port:X})}import v4 from"node:fs/promises";import e2 from"node:os";import R4 from"node:path";function _7(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function BW(){let[Z,X]=await Promise.all([W0(),r6()]),Q=Z.globalDefaultConfigId?Z.runtimes.find((K)=>K.id===Z.globalDefaultConfigId)??null:null;return{runtimes:Z.runtimes,globalDefaultConfigId:Z.globalDefaultConfigId,globalDefaultEffective:Q?{runFolder:Q.runFolder??e2.homedir(),modelId:Q.defaultModelId??null,configValues:Q.defaultConfigValues??{}}:null,knownAdapters:i0().map((K)=>({id:K.id,displayName:K.displayName})),readiness:X}}async function LW(Z){try{let X=await R0({boardId:Z.boardId,cardId:Z.cardId});return{resolved:{configId:X.entry.id,adapterId:X.entry.kind==="registered"?X.entry.adapterId:null,displayName:X.entry.displayName,runFolder:X.runFolder,modelId:X.modelId,configValues:X.configValues}}}catch(X){if(X instanceof E0)return{resolved:null};throw X}}async function qW(Z){return j0((X)=>{let Q=X.runtimes.find((Y)=>Y.kind==="registered"&&Y.adapterId===Z.adapterId);if(Q)return Q;let K=i0().find((Y)=>Y.id===Z.adapterId);if(!K)throw Error(`Unknown adapterId: ${Z.adapterId}`);let J={id:_7(),kind:"registered",adapterId:Z.adapterId,displayName:K.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return X.runtimes.push(J),J})}async function xW(Z){return j0((X)=>{let Q={id:_7(),kind:"custom",displayName:Z.displayName,command:Z.command,args:Z.args,env:Z.env,runFolder:Z.runFolder,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};return X.runtimes.push(Q),Q})}async function PW(Z){await j0((X)=>{if(X.runtimes=X.runtimes.filter((Q)=>Q.id!==Z.runtimeConfigId),X.globalDefaultConfigId===Z.runtimeConfigId)X.globalDefaultConfigId=null;for(let Q of Object.keys(X.boardOverrides))if(X.boardOverrides[Q].runtimeConfigId===Z.runtimeConfigId)delete X.boardOverrides[Q];for(let Q of Object.keys(X.cardOverrides))if(X.cardOverrides[Q].runtimeConfigId===Z.runtimeConfigId)delete X.cardOverrides[Q]})}async function fW(Z){await j0((X)=>{let Q=X.runtimes.find((K)=>K.id===Z.runtimeConfigId);if(!Q)throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);if(X.globalDefaultConfigId=Z.runtimeConfigId,Z.runFolder!==void 0)Q.runFolder=Z.runFolder;if(Z.modelId!==void 0)Q.defaultModelId=Z.modelId;if(Z.configValues!==void 0)Q.defaultConfigValues=Z.configValues})}async function yW(Z){Z.boardId,await j0((X)=>{if(Z.runtimeConfigId===null){delete X.cardOverrides[Z.cardId];return}if(!X.runtimes.some((J)=>J.id===Z.runtimeConfigId))throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);let K=X.cardOverrides[Z.cardId];X.cardOverrides[Z.cardId]={runtimeConfigId:Z.runtimeConfigId,runFolder:Z.runFolder!==void 0?Z.runFolder:K?.runFolder??null,modelId:Z.modelId!==void 0?Z.modelId:K?.modelId??null,configValues:Z.configValues!==void 0?Z.configValues:K?.configValues??{}}})}async function OW(Z){let Q=(await W0()).runtimes.find((j)=>j.id===Z.runtimeConfigId);if(!Q)throw Error(`Runtime config not found: ${Z.runtimeConfigId}`);let K=F0(Q),J=await K.resolveSpawnConfig(Q),Y=Q.runFolder??e2.homedir();try{let j=await O3({spawn:{...J,cwd:Y},modelId:Z.modelId??Q.defaultModelId??null,configValues:Z.configValues??Q.defaultConfigValues??{}}),U=i1({adapterId:K.id,models:j.models,currentModelId:j.currentModelId}),B=new Date().toISOString();return await j0((z)=>{let q=z.runtimes.find((R)=>R.id===Z.runtimeConfigId);if(q)q.discoveredModels=U,q.discoveredConfigOptions=j.configOptions,q.discoveredAt=B}),{ok:!0,models:U,configOptions:j.configOptions,currentModelId:j.currentModelId}}catch(j){if(j instanceof c0)throw Error(`${j.message}${K.authHint?` ${K.authHint}`:""}`);if(j instanceof T||j instanceof U0)throw Error(j.message);throw j}}async function bW(Z){let X=e2.homedir(),Q=Z.path?.trim()?Z.path.trim():X,K=R4.resolve(Q),J=!0;try{if(!(await v4.stat(K)).isDirectory())K=R4.dirname(K)}catch{J=!1,K=X}let Y=[];try{Y=(await v4.readdir(K,{withFileTypes:!0})).filter((B)=>B.isDirectory()&&!B.name.startsWith(".")).map((B)=>({name:B.name,path:R4.join(K,B.name)})).sort((B,z)=>B.name.localeCompare(z.name))}catch{Y=[]}let j=R4.dirname(K);return{path:K,parent:j===K?null:j,home:X,exists:J,entries:Y}}var S7={list:BW,getEffectiveForCard:LW,registerRegistered:qW,registerCustom:xW,unregister:PW,setUserDefault:fW,setCardOverride:yW,refreshModels:OW,browseFolder:bW};var vW=[{id:"claude-code",displayName:"Claude Code"},{id:"codex",displayName:"Codex"},{id:"copilot",displayName:"Copilot"},{id:"opencode",displayName:"OpenCode"}];function RW(){return`cfg_${crypto.randomUUID().replace(/-/g,"").slice(0,16)}`}async function I7(){try{let Z=await W0();if(Z.globalDefaultConfigId){if(Z.runtimes.some((Q)=>Q.id===Z.globalDefaultConfigId))return Z.globalDefaultConfigId}for(let X of vW){if((await s6(X.id))?.status!=="ready")continue;let K=null;if(await j0((J)=>{if(J.globalDefaultConfigId){if(J.runtimes.some((U)=>U.id===J.globalDefaultConfigId)){K=J.globalDefaultConfigId;return}}let Y=J.runtimes.find((j)=>j.kind==="registered"&&j.adapterId===X.id);if(!Y){let j={id:RW(),kind:"registered",adapterId:X.id,displayName:X.displayName,runFolder:null,defaultModelId:null,defaultConfigValues:{},discoveredModels:[],discoveredConfigOptions:[],discoveredAt:null};J.runtimes.push(j),Y=j}J.globalDefaultConfigId=Y.id,K=Y.id}),K)return console.log(`[ideawave-cli] using agent runtime: ${X.displayName}`),K}return console.warn("[ideawave-cli] no agent runtime detected on PATH (tried claude, codex, gh copilot, opencode). Install one to run agents."),null}catch(Z){return console.warn("[ideawave-cli] runtime auto-seed failed",Z),null}}var CW=120000;function hW(){if(typeof crypto<"u"&&"randomUUID"in crypto)return`call_${crypto.randomUUID()}`;return`call_${Date.now()}_${Math.random().toString(16).slice(2)}`}class Z6{sessions=new Map;createCallId;toolCallTimeoutMs;constructor(Z={}){this.createCallId=Z.createCallId??hW,this.toolCallTimeoutMs=Z.toolCallTimeoutMs??CW}register(Z){let X=this.sessions.get(Z.frontendSessionId);if(X){if(X.userId!==Z.userId)this.rejectPending(X,"frontend session user changed"),X.activeRunIds.clear();this.sessions.set(Z.frontendSessionId,{frontendSessionId:Z.frontendSessionId,userId:Z.userId,tools:Z.tools,send:Z.send,pendingToolCalls:X.pendingToolCalls,activeRunIds:X.activeRunIds,activeRunCardIds:X.activeRunCardIds});return}this.sessions.set(Z.frontendSessionId,{frontendSessionId:Z.frontendSessionId,userId:Z.userId,tools:Z.tools,send:Z.send,pendingToolCalls:new Map,activeRunIds:new Set,activeRunCardIds:new Map})}disconnect(Z,X="frontend session disconnected"){let Q=this.sessions.get(Z);if(!Q)return{activeRunIds:[]};return this.sessions.delete(Z),this.rejectPending(Q,X),{activeRunIds:Array.from(Q.activeRunIds)}}sessionCount(){return this.sessions.size}has(Z){return this.sessions.has(Z)}getUserId(Z){return this.sessions.get(Z)?.userId??null}setMetadata(Z,X){let Q=this.sessions.get(Z);if(Q)Q.tools=X}getMetadata(Z){if(!Z)return[];return this.sessions.get(Z)?.tools??[]}sendToSession(Z,X){let Q=this.sessions.get(Z);if(!Q)return!1;return Q.send(X),!0}callTool(Z,X,Q,K,J){if(!Z)return Promise.reject(Error("MCP tool call is missing a frontend session id"));let Y=this.sessions.get(Z);if(!Y)return Promise.reject(Error(`Frontend session ${Z} is not connected`));let j=this.createCallId();return new Promise((U,B)=>{let z=K??(J?this.getActiveRunIdForCard(Y,J):this.getSoleActiveRunId(Y)),q=J??(z?Y.activeRunCardIds.get(z):void 0),R=Date.now(),h=setTimeout(()=>{Y.pendingToolCalls.delete(j),m("tool_queue.timeout",{frontendSessionId:Z,runId:z,cardId:q,callId:j,toolName:X,elapsedMs:Date.now()-R,queueDepth:Y.pendingToolCalls.size}),B(Error(`Tool "${X}" timed out waiting for the frontend`))},this.toolCallTimeoutMs);Y.pendingToolCalls.set(j,{resolve:U,reject:B,timer:h,name:X,runId:z??null,cardId:q??null,startedAt:R}),m("tool_queue.forwarded_to_browser",{frontendSessionId:Z,runId:z,cardId:q,callId:j,toolName:X,queueDepth:Y.pendingToolCalls.size}),Y.send({type:"tool_call",callId:j,name:X,args:Q,...z?{runId:z}:{},...q?{cardId:q}:{}})})}handleToolResult(Z,X){let Q=this.sessions.get(Z);if(!Q)return;let K=Q.pendingToolCalls.get(X.callId);if(!K)return;if(Q.pendingToolCalls.delete(X.callId),clearTimeout(K.timer),m("tool_queue.result_received",{frontendSessionId:Z,runId:K.runId,cardId:K.cardId,callId:X.callId,toolName:K.name,elapsedMs:Date.now()-K.startedAt,queueDepth:Q.pendingToolCalls.size,ok:X.ok}),X.ok){K.resolve(X.result);return}let J=X.result;if(J&&typeof J==="object"&&Array.isArray(J.content)){K.resolve({...J,isError:!0});return}K.reject(Error(X.error??"Tool execution failed"))}markRunActive(Z,X,Q){let K=this.sessions.get(Z);if(!K)return;if(K.activeRunIds.add(X),Q)K.activeRunCardIds.set(X,Q)}markRunSettled(Z,X){let Q=this.sessions.get(Z);if(!Q)return;Q.activeRunIds.delete(X),Q.activeRunCardIds.delete(X)}ownsRun(Z,X){return this.sessions.get(Z)?.activeRunIds.has(X)??!1}rejectPending(Z,X){for(let Q of Z.pendingToolCalls.values())clearTimeout(Q.timer),m("tool_queue.rejected",{frontendSessionId:Z.frontendSessionId,runId:Q.runId,cardId:Q.cardId,toolName:Q.name,elapsedMs:Date.now()-Q.startedAt}),Q.reject(Error(X));Z.pendingToolCalls.clear()}getSoleActiveRunId(Z){return Z.activeRunIds.size===1?Z.activeRunIds.values().next().value:void 0}getActiveRunIdForCard(Z,X){let Q=[...Z.activeRunCardIds.entries()].filter(([K,J])=>Z.activeRunIds.has(K)&&J===X).map(([K])=>K);return Q.length===1?Q[0]:void 0}}function A7(){return"0.0.66".trim()?"0.0.66":"dev"}var MW=process.argv.slice(2),u7=[];for(let Z of MW){if(Z==="--dev"){process.env[y4]="1";continue}u7.push(Z)}var $0=u7[0],M1=process.env.APP_ENV==="development"||process.env[y4]==="1";if($0==="--help"||$0==="-h"||$0==="help")console.log("ideawave — host the local bridge for a running ideawave.app session."),console.log(""),console.log("Usage:"),console.log(" ideawave Serve the browser bridge and MCP forwarder."),console.log(" ideawave --version Print the CLI version."),process.exit(0);if($0==="--version"||$0==="-v"||$0==="version")console.log(A7()),process.exit(0);if($0)console.error(`Unknown command: ${$0}`),console.error("Run `ideawave --help` for usage."),process.exit(1);var C1=new Z6,f0=null,c7=M1?{phase:"ready",message:"Local browser-kit proxy is ready"}:{phase:"idle"},K6=new I2(new V1((Z)=>{c7=Z,f0?.sendStatus()})),C4=new l1,X6=M1?C4:K6;function A0(Z,X){C1.sendToSession(Z,X)}async function NW(Z,X){try{let Q=S7[X.method],K=await Q(X.params);A0(Z,{type:"runtime_rpc_result",requestId:X.requestId,ok:!0,result:K})}catch(Q){A0(Z,{type:"runtime_rpc_result",requestId:X.requestId,ok:!1,error:Q instanceof Error?Q.message:String(Q)})}}var h1=!1,R1=null;async function Q6(){if(h1)return;if(R1)return R1;return R1=(async()=>{try{let Z=await k7(C1);w6({...Z,requestedPort:Z.port}),console.log(`[ideawave-cli] MCP endpoint for the agent: ${Z.url}`);try{await D6({onStatusChange:(X)=>{if(o6(),f0?.sendStatus(),X.status==="failed")console.warn(`[ideawave-cli] ACP bridge setup failed for ${X.packageName}: ${X.error??"unknown error"}`)}})}catch(X){console.warn("[ideawave-cli] ACP bridge setup skipped:",X instanceof Error?X.message:String(X))}await I7(),h1=!0,console.log("[ideawave-cli] ready — agent runs will drive the board."),f0?.sendStatus()}catch(Z){console.error("[ideawave-cli] failed to start agent host:",Z),f0?.sendStatus(void 0,Z instanceof Error?Z.message:String(Z))}finally{R1=null}})(),R1}if(process.env.APP_ENV!=="development"){let Z=await O7();if(Z)console.error(`[ideawave-cli] An IdeaWave CLI is already running at ${Z}.`),console.error("[ideawave-cli] Only one CLI per machine is supported — it already serves every browser tab. Exiting."),process.exit(0)}if(!M1)V7().then((Z)=>{if(Z.phase==="ready")console.log("[ideawave-cli] screenshot engine ready");else if(Z.phase==="failed")console.warn(`[ideawave-cli] screenshot engine setup failed: ${Z.error??"unknown error"}`)});f0=await b7({registry:C1,runtime:null,mcpReady:()=>h1,capabilities:M1?[F6]:["browser-proxy-v1",z6,U6],cliVersion:A7(),browserRuntimeStatus:()=>c7,onToolMetadata:(Z)=>{console.log(`[ideawave-cli] session ${Z} advertised ${C1.getMetadata(Z).length} tools`),Q6()},onRunTurn:(Z,X)=>{console.log(`[ideawave-cli] running agent turn for card ${X.cardId} (session ${Z})`),(async()=>{if(await Q6(),!h1){A0(Z,{type:"run_settled",runId:X.runId,cardId:X.cardId,result:{assistantContent:"",model:null,latencyMs:0,errorText:"IdeaWave CLI agent host is not ready",partialText:null}});return}await D3(X,(Q)=>A0(Z,Q))})().catch(()=>{return}).finally(()=>C1.markRunSettled(Z,X.runId))},onCancelRun:(Z,X)=>{F2(X)},onRuntimeRpc:(Z,X)=>{NW(Z,X)},onBrowserRpc:(Z,X,Q)=>{X6.handleRpc(Z,X,Q).then((K)=>{A0(Z,{type:"browser_rpc_result",requestId:Q.requestId,ok:!0,result:K})},(K)=>{A0(Z,{type:"browser_rpc_result",requestId:Q.requestId,ok:!1,error:K instanceof Error?K.message:String(K)})})},onHttpRequest:(Z,X)=>X6.handleHttpRequest(Z,X),onHttpUpgrade:(Z,X,Q)=>M1?C4.handleUpgrade(Z,X,Q):!1,onWarmupRun:(Z,X,Q)=>{(async()=>{if(await Q6(),!h1)return{status:"retryable",error:"agent host is not ready"};return g3({cardId:X.cardId,boardId:X.boardId,userId:Q,frontendSessionId:Z})})().then((K)=>{if(!X.warmupId)return;A0(Z,{type:"warmup_result",warmupId:X.warmupId,cardId:X.cardId,...K})})},onDisconnect:(Z,X)=>{X6.closeFrontendSession(Z),h3(Z);for(let Q of X)F2(Q);m("bridge.frontend_disconnected",{frontendSessionId:Z,activeRuns:X.length}),Y6(Z).catch((Q)=>{console.warn(`[ideawave-cli] failed to evict sessions for ${Z}:`,Q instanceof Error?Q.message:String(Q))}),console.log(`[ideawave-cli] browser session ${Z} disconnected`)}});K6.setPort(f0.port);C4.setPort(f0.port);console.log(`[ideawave-cli] browser bridge listening on ${f0.url}`);console.log("[ideawave-cli] waiting for ideawave.app browser sessions…");var T7=!1;for(let Z of["SIGINT","SIGTERM"])process.once(Z,()=>{if(T7)return;T7=!0,M3(),(async()=>{await K6.close(),await C4.close(),await w7(),await f0?.close().catch(()=>{return}),process.exit(0)})()});