eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
4 lines • 1.51 MB
JavaScript
import{stripTypeScriptTypes as e}from"node:module";import{asSchema as t,generateText as n,jsonSchema as r,streamText as i,tool as a}from"ai";import{createHash as o,createHmac as s,randomBytes as c,timingSafeEqual as l}from"node:crypto";import{AsyncResource as u}from"node:async_hooks";import{Buffer as d}from"node:buffer";import{Worker as f}from"node:worker_threads";import p from"node:os";var m=class extends Error{code;details;constructor(e,t=`CODE_MODE_ERROR`,n){super(e),this.name=new.target.name,this.code=t,this.details=n}},h=class extends m{constructor(e){super(`Code mode execution timed out after ${e}ms.`,`CODE_MODE_TIMEOUT`,{timeoutMs:e})}},ee=class extends m{constructor(){super(`Code mode execution was aborted.`,`CODE_MODE_ABORTED`)}},te=class extends m{constructor(e){super(`Code mode maxWorkers limit reached (${e}).`,`CODE_MODE_CONCURRENCY_LIMIT`,{maxWorkers:e})}},g=class extends m{constructor(e,t){super(`Code mode source exceeds the ${t} byte size limit.`,`CODE_MODE_SOURCE_TOO_LARGE`,{bytes:e,maxBytes:t})}},ne=class extends m{constructor(e,t){super(e,`CODE_MODE_BRIDGE_LIMIT`,t)}},re=class extends m{constructor(e,t){super(e,`CODE_MODE_DETACHED_BRIDGE_REQUEST`,t)}},_=class extends m{constructor(e,t){super(e,`CODE_MODE_PROTOCOL_ERROR`,t)}},v=class extends m{constructor(e,t){super(e,`CODE_MODE_TOOL_ERROR`,t)}},y=class extends v{constructor(e,t,n){super(`Tool "${e}" requires approval before execution.`,{toolName:e,input:t,toolCallId:n}),this.name=`CodeModeToolApprovalRequiredError`,this.code=`CODE_MODE_TOOL_APPROVAL_REQUIRED`}},ie=class extends v{constructor(e,t,n,r){super(`Tool "${e}" approval was denied.`,{toolName:e,input:t,toolCallId:n,reason:r}),this.name=`CodeModeToolApprovalDeniedError`,this.code=`CODE_MODE_TOOL_APPROVAL_DENIED`}},b=class extends m{constructor(e,t){super(e,`CODE_MODE_FETCH_ERROR`,t)}};function x(e){if(e instanceof m){let t=oe({name:e.name,message:e.message,code:e.code});return e.stack!==void 0&&(t.stack=e.stack),e.details!==void 0&&(t.details=e.details),t}if(e instanceof Error){let t=oe({name:e.name,message:e.message});e.stack!==void 0&&(t.stack=e.stack);let n=e;return typeof n.code==`string`&&(t.code=n.code),n.details!==void 0&&(t.details=n.details),t}return{name:`Error`,message:String(e)}}function ae(e,t){if(e instanceof m)return oe({name:e.name,message:e.message,code:e.code});let n=t===`tool`?{message:`Host tool failed.`,code:`CODE_MODE_HOST_TOOL_ERROR`}:t===`fetch`?{message:`Host fetch failed.`,code:`CODE_MODE_HOST_FETCH_ERROR`}:{message:`Host bridge request failed.`,code:`CODE_MODE_HOST_BRIDGE_ERROR`};return{name:`Error`,message:n.message,code:n.code}}function oe(e){return{name:e.name,message:e.message,...e.stack===void 0?{}:{stack:e.stack},...e.code===void 0?{}:{code:e.code},...e.details===void 0?{}:{details:e.details}}}function S(e){if(e.code===`CODE_MODE_SOURCE_TOO_LARGE`){let t=e.details,n=new g(t?.bytes??0,t?.maxBytes??0);return C(n,e),n}if(e.code===`CODE_MODE_BRIDGE_LIMIT`){let t=new ne(e.message,e.details);return C(t,e),t}if(e.code===`CODE_MODE_DETACHED_BRIDGE_REQUEST`){let t=new re(e.message,e.details);return C(t,e),t}if(e.code===`CODE_MODE_PROTOCOL_ERROR`){let t=new _(e.message,e.details);return C(t,e),t}if(e.code===`CODE_MODE_TOOL_APPROVAL_REQUIRED`){let t=e.details,n=new y(t?.toolName??`unknown`,t?.input,t?.toolCallId??`unknown`);return C(n,e),n}if(e.code===`CODE_MODE_TOOL_APPROVAL_DENIED`){let t=e.details,n=new ie(t?.toolName??`unknown`,t?.input,t?.toolCallId??`unknown`,t?.reason);return C(n,e),n}let t=new m(e.message,e.code??`CODE_MODE_ERROR`,e.details);return t.name=e.name,C(t,e),t}function C(e,t){t.stack&&(e.stack=t.stack)}const w=`ai-sdk-code-mode/tool-approval`;function se(e){return e.kind===w}function T(e){if(typeof e!=`object`||!e||Array.isArray(e)||typeof e.approvalId!=`string`||typeof e.approved!=`boolean`||`reason`in e&&e.reason!==void 0&&typeof e.reason!=`string`)throw new _(`Code mode approval response is malformed.`)}function ce(e){if(typeof e!=`object`||!e||Array.isArray(e)||typeof e.approved!=`boolean`||`reason`in e&&e.reason!==void 0&&typeof e.reason!=`string`)throw new _(`Code mode approval resolution must be a boolean approval decision.`,{resolution:e});let t=e.approved,n=e.reason;return{approved:t,...n===void 0?{}:{reason:n}}}const E=`HMAC-SHA256`,le=3600*1e3;let D=c(32),ue=le;function de(e,t={}){let n=O({signingKey:e??c(32),maxAgeMs:t.maxAgeMs??le});D=n.signingKey,ue=n.maxAgeMs}function O(e={}){let t=e.signingKey===void 0?Buffer.from(D):(e.signingKey,Buffer.from(e.signingKey));if(t.byteLength===0)throw TypeError(`Continuation signing key must not be empty.`);let n=e.maxAgeMs??ue;if(!Number.isInteger(n)||!Number.isFinite(n)||n<=0)throw TypeError(`Continuation maxAgeMs must be a positive integer.`);return{signingKey:t,maxAgeMs:n}}function fe(e,t=O()){let n=Date.now(),r={alg:E,nonce:c(16).toString(`hex`),issuedAtMs:n,expiresAtMs:n+t.maxAgeMs},i=he({...e,auth:r},t.signingKey);return{...structuredClone(e),auth:{...r,signature:i}}}function pe(e,t={}){let n=e.auth;ge(n);let r=Date.now();if(n.expiresAtMs<r)throw new _(`Code mode continuation has expired.`,{expiresAtMs:n.expiresAtMs,now:r});if(n.issuedAtMs>r+6e4)throw new _(`Code mode continuation was issued in the future.`,{issuedAtMs:n.issuedAtMs,now:r});let{signingKey:i}=O(t),a=he(k(e),i);if(!A(n.signature,a))throw new _(`Code mode continuation signature is invalid.`)}function me(e,t={}){try{return pe(e,t),!0}catch{return!1}}function he(e,t){return s(`sha256`,t).update(_e(e)).digest(`base64url`)}function k(e){let{auth:t,...n}=e,{signature:r,...i}=t;return{...n,auth:i}}function ge(e){if(typeof e!=`object`||!e||Array.isArray(e)||e.alg!==E||typeof e.nonce!=`string`||!/^[0-9a-f]{32}$/i.test(e.nonce)||typeof e.issuedAtMs!=`number`||!Number.isInteger(e.issuedAtMs)||typeof e.expiresAtMs!=`number`||!Number.isInteger(e.expiresAtMs)||e.expiresAtMs<=e.issuedAtMs||typeof e.signature!=`string`||e.signature.length===0)throw new _(`Code mode continuation is missing valid signed auth metadata.`)}function A(e,t){let n=Buffer.from(e),r=Buffer.from(t);return n.byteLength===r.byteLength&&l(n,r)}function _e(e){if(e===null)return`null`;let t=typeof e;if(t===`string`||t===`boolean`)return JSON.stringify(e);if(t===`number`){if(!Number.isFinite(e))throw new _(`Code mode continuation contains a non-finite number.`);return JSON.stringify(e)}if(t===`undefined`||t===`function`||t===`symbol`||t===`bigint`)throw new _(`Code mode continuation contains a non-JSON value.`);if(typeof e!=`object`)return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(e=>_e(e)).join(`,`)}]`;let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw new _(`Code mode continuation contains a non-plain object.`);let r=e;return`{${Object.keys(r).sort().map(e=>`${JSON.stringify(e)}:${_e(r[e])}`).join(`,`)}}`}const j=new Set([301,302,303,307,308]);async function ve({request:e,fetch:t,policy:n,signal:r}){if(!t)throw new b(`fetch is not enabled for this code-mode tool.`);L(r);let{response:i,url:a}=await M({request:be(e,n),fetch:t,policy:n,signal:r,redirectsRemaining:n.maxRedirects??10}),o=n.maxResponseBytes??1024*1024;Te(i,o);let s=await Ee(i,o,r),c={};return i.headers.forEach((e,t)=>{c[t.toLowerCase()]=e}),{url:a,status:i.status,statusText:i.statusText,headers:c,body:s}}async function M({request:e,fetch:t,policy:n,signal:r,redirectsRemaining:i}){let a=await ye(e,t,r),o=we(a.url||e.url,n);if(!j.has(a.status)||n.allowRedirects!==!0)return{response:a,url:o};let s=a.headers.get(`location`);if(s===null)return{response:a,url:o};if(i<=0){let e=n.maxRedirects??10;throw new b(`fetch exceeded the ${e} redirect limit.`,{maxRedirects:e})}let c=new URL(s,o).href,l=N(a.status,e,c,n);return a.body?.cancel().catch(()=>void 0),await M({request:l,fetch:t,policy:n,signal:r,redirectsRemaining:i-1})}async function ye(e,t,n){let r={method:e.method,redirect:`manual`,...e.headers===void 0?{}:{headers:e.headers},...e.method!==`GET`&&e.method!==`HEAD`&&e.body!==void 0?{body:e.body}:{},...n===void 0?{}:{signal:n}};try{return await t(e.url,r)}catch(e){throw L(n),e}}function be(e,t){let n=we(e.url,t),r=(e.method??`GET`).toUpperCase();return xe(r,t),Ce({url:n,method:r,...e.headers===void 0?{}:{headers:e.headers},...e.body===void 0?{}:{body:e.body}})}function N(e,t,n,r){let i=t.method,a=t.body,o=t.headers;return(e===303||(e===301||e===302)&&i===`POST`)&&(i=`GET`,a=void 0,o=Se(o)),be(Ce({url:n,method:i,...o===void 0?{}:{headers:o},...a===void 0?{}:{body:a}}),r)}function xe(e,t){let n=t.allowedMethods?.map(e=>e.toUpperCase())??[`GET`,`HEAD`];if(!n.includes(e))throw new b(`fetch method "${e}" is not allowed.`,{method:e,allowedMethods:n})}function Se(e){if(e!==void 0)return Object.fromEntries(Object.entries(e).filter(([e])=>e.toLowerCase()!==`content-length`&&e.toLowerCase()!==`content-type`))}function Ce(e){return e}function we(e,t){let n;try{n=new URL(e)}catch{throw new b(`Invalid fetch URL: ${e}`)}if(n.protocol!==`http:`&&n.protocol!==`https:`)throw new b(`Only http and https fetch URLs are allowed.`,{url:e});if(n.username!==``||n.password!==``)throw new b(`Fetch URLs with embedded credentials are not allowed.`,{url:n.href});let r=t.allowedOrigins?.some(e=>e===n.origin)??!1,i=t.allowedUrlPrefixes?.some(e=>F(n,P(e)))??!1;if(!r&&!i)throw new b(`fetch URL is not allowed: ${n.href}`,{url:n.href,allowedOrigins:t.allowedOrigins,allowedUrlPrefixes:t.allowedUrlPrefixes});return n.href}function P(e){let t;try{t=new URL(e)}catch{throw new b(`Invalid allowedUrlPrefixes entry: ${e}`,{prefix:e})}if(t.protocol!==`http:`&&t.protocol!==`https:`)throw new b(`allowedUrlPrefixes entries must use http or https.`,{prefix:e});if(t.username!==``||t.password!==``)throw new b(`allowedUrlPrefixes entries with embedded credentials are not allowed.`,{prefix:e});if(t.search!==``||t.hash!==``)throw new b(`allowedUrlPrefixes entries must not include query strings or fragments.`,{prefix:e});return t}function F(e,t){if(e.origin!==t.origin)return!1;if(e.pathname===t.pathname)return!0;let n=t.pathname.endsWith(`/`)?t.pathname:`${t.pathname}/`;return e.pathname.startsWith(n)}function Te(e,t){let n=e.headers.get(`content-length`);if(n===null)return;let r=Number(n);if(Number.isFinite(r)&&r>t)throw new b(`fetch response exceeds the ${t} byte size limit.`,{bytes:r,maxResponseBytes:t})}async function Ee(e,t,n){if(L(n),e.body!==null&&e.body!==void 0&&typeof e.body.getReader==`function`)return await De(e.body,t,n);let r=await I(e.text(),n),i=new TextEncoder().encode(r).byteLength;if(i>t)throw new b(`fetch response exceeds the ${t} byte size limit.`,{bytes:i,maxResponseBytes:t});return r}async function De(e,t,n){let r=e.getReader(),i=[],a=0;try{for(;;){L(n);let{done:e,value:o}=await I(r.read(),n);if(e)break;if(o!==void 0){if(a+=o.byteLength,a>t){let e=new b(`fetch response exceeds the ${t} byte size limit.`,{bytes:a,maxResponseBytes:t});throw r.cancel(e).catch(()=>void 0),e}i.push(o)}}}catch(e){throw r.cancel(e).catch(()=>void 0),e}finally{r.releaseLock()}let o=new Uint8Array(a),s=0;for(let e of i)o.set(e,s),s+=e.byteLength;return new TextDecoder().decode(o)}async function I(e,t){return t===void 0?await e:(L(t),await new Promise((n,r)=>{let i=()=>r(Oe(t));t.addEventListener(`abort`,i,{once:!0}),e.then(n,r).finally(()=>{t.removeEventListener(`abort`,i)})}))}function L(e){if(e?.aborted)throw Oe(e)}function Oe(e){let t=e.reason;return new b(`fetch was aborted.`,{reason:t instanceof Error?{name:t.name,message:t.message}:String(t??`aborted`)})}function ke(e={}){let t=e.executionPolicy??{},n=e.fetchPolicy===!1?void 0:e.fetchPolicy,r=n?.fetch??globalThis.fetch;if(n!==void 0&&typeof r!=`function`)throw TypeError(`fetchPolicy.fetch must be provided when global fetch is unavailable.`);return{timeoutMs:R(t.timeoutMs,3e4,`executionPolicy.timeoutMs`),memoryLimitBytes:R(t.memoryLimitBytes,67108864,`executionPolicy.memoryLimitBytes`),maxStackSizeBytes:R(t.maxStackSizeBytes,2097152,`executionPolicy.maxStackSizeBytes`),maxResultBytes:R(t.maxResultBytes,1048576,`executionPolicy.maxResultBytes`),maxSourceBytes:R(t.maxSourceBytes,262144,`executionPolicy.maxSourceBytes`),maxToolInputBytes:R(t.maxToolInputBytes,1048576,`executionPolicy.maxToolInputBytes`),maxToolOutputBytes:R(t.maxToolOutputBytes,4194304,`executionPolicy.maxToolOutputBytes`),maxBridgeRequests:R(t.maxBridgeRequests,256,`executionPolicy.maxBridgeRequests`),maxInFlightBridgeRequests:R(t.maxInFlightBridgeRequests,32,`executionPolicy.maxInFlightBridgeRequests`),fetch:n===void 0?void 0:r,fetchEnabled:n!==void 0,fetchPolicy:{...n?.allowedOrigins===void 0?{}:{allowedOrigins:n.allowedOrigins},...n?.allowedUrlPrefixes===void 0?{}:{allowedUrlPrefixes:n.allowedUrlPrefixes},...n?.allowedMethods===void 0?{}:{allowedMethods:n.allowedMethods},maxResponseBytes:R(n?.maxResponseBytes,1048576,`fetchPolicy.maxResponseBytes`),allowRedirects:n?.allowRedirects??!1,maxRedirects:R(n?.maxRedirects,10,`fetchPolicy.maxRedirects`)}}}function R(e,t,n){if(e===void 0)return t;if(!Number.isInteger(e)||e<=0)throw TypeError(`${n} must be a positive integer.`);return e}function z(e,t,n){Ae(e,t,n)}function Ae(e,t,n){return e===void 0?``:je(e,t,n)}function je(e,t,n){let r;try{r=JSON.stringify(e)}catch(e){throw new m(`${n} is not JSON-serializable: ${Ne(e)}`,`CODE_MODE_SERIALIZATION_ERROR`)}if(r===void 0)throw new m(`${n} is not JSON-serializable.`,`CODE_MODE_SERIALIZATION_ERROR`);return Me(r,t,n),r}function Me(e,t,n){let r=new TextEncoder().encode(e).byteLength;if(r>t)throw new m(`${n} exceeds the ${t} byte size limit.`,`CODE_MODE_SERIALIZATION_ERROR`,{bytes:r,maxBytes:t})}function Ne(e){return e instanceof Error?e.message:String(e)}const B=new Map;let V=0;function Pe(e,t){let n=Le(e);if(n>t)throw new g(n,t)}function Fe(e){let t=o(`sha256`).update(`strip:`).update(e).digest(`hex`),n=B.get(t);if(n!==void 0)return B.delete(t),B.set(t,n),n.source;let r=H(e),i=Le(r);return i<=65536&&(B.set(t,{source:r,bytes:i}),V+=i,Ie()),r}function H(t){let n=`async function __codeModeUser__(){
`,r=e(`${n}${t}
}`);return!r.startsWith(n)||!r.endsWith(`
}`)?t:r.slice(35,-2)}function Ie(){for(;B.size>256||V>4194304;){let e=B.keys().next().value;if(e===void 0)return;let t=B.get(e);B.delete(e),V-=t?.bytes??0}}function Le(e){return new TextEncoder().encode(e).byteLength}function Re(e,t,n){if(e?.isEnabled===!0)return e.tracer?.startSpan?.(t,{attributes:Ue({...He(e),...n})})}function ze(e,t,n={}){e?.addEvent?.(t,Ue(n))}function Be(e,t){if(e===void 0)return;let n=x(t);e.recordException?.(t),e.setStatus?.({code:2,message:n.message}),e.setAttributes?.(Ue({"code_mode.error.name":n.name,"code_mode.error.message":n.message,"code_mode.error.code":n.code}))}function Ve(e){e?.end?.()}function He(e){return{"ai.telemetry.functionId":e.functionId,"resource.name":e.functionId,...Object.fromEntries(Object.entries(e.metadata??{}).map(([e,t])=>[`ai.telemetry.metadata.${e}`,t]))}}function Ue(e){let t={};for(let[n,r]of Object.entries(e))if(r!=null){if(typeof r==`string`||typeof r==`number`||typeof r==`boolean`){t[n]=r;continue}Array.isArray(r)&&r.every(e=>typeof e==`string`||typeof e==`number`||typeof e==`boolean`)&&(t[n]=r)}return t}const We=Symbol.for(`experimental-ai-sdk-code-mode.host-interrupt`);function Ge(e){if(typeof e!=`object`||!e||Array.isArray(e))throw TypeError(`Code mode interrupt payload must be an object.`);if(typeof e.kind!=`string`||e.kind.length===0)throw TypeError(`Code mode interrupt payload must include a string kind.`);let t=Error(`Code mode host interruption requested.`);throw t.name=`CodeModeHostInterruptSignal`,Object.defineProperties(t,{[We]:{value:!0},payload:{value:e}}),t}function Ke(e){return typeof e==`object`&&!!e&&e[We]===!0&&typeof e.payload==`object`&&e.payload!==null}async function qe({toolName:e,inputJson:t,tools:n,baseExecutionOptions:r,codeModeOptions:i,maxToolInputBytes:a,maxToolOutputBytes:o,toolCallId:s,codeModeInterrupt:c,skipApproval:l=!1}){let u=n[e];if(!u)throw new v(`Unknown tool: ${e}`,{toolName:e,availableTools:Object.keys(n)});if(u.execute==null)throw new v(`Tool "${e}" does not have execute().`,{toolName:e});let d=t===``?void 0:JSON.parse(t);z(d,a,`Tool "${e}" input`);let f=await Ye(u.inputSchema,d);if(!f.success)throw new v(`Invalid input for tool "${e}": ${f.error.message}`,{toolName:e,input:d,cause:f.error.message});let p=f.value;if(!l&&await Je(u,p,{toolCallId:s,messages:r.messages,experimental_context:r.experimental_context,context:r.context})){if(i.approval?.mode===`interrupt`)return{type:`interrupted`,toolName:e,input:p,toolCallId:s,payload:{kind:w}};let t=await i.approval?.onApprovalRequired?.({toolName:e,input:p,toolCallId:s});if(t===void 0)throw new y(e,p,s);if(typeof t!=`string`&&(typeof t!=`object`||!t))throw new _(`Tool "${e}" approval callback returned a malformed approval decision.`,{toolName:e,toolCallId:s});let n=typeof t==`string`?t===`approved`:t.approved,r=typeof t==`string`?void 0:t.reason;if(typeof n!=`boolean`)throw new _(`Tool "${e}" approval callback returned a malformed approval decision.`,{toolName:e,toolCallId:s});if(r!==void 0&&typeof r!=`string`)throw new _(`Tool "${e}" approval callback returned a malformed approval reason.`,{toolName:e,toolCallId:s});if(!n)throw new ie(e,p,s,r)}let m={...r,toolCallId:s,...c===void 0?{}:{codeModeInterrupt:c}},h;try{h=await U(u.execute.bind(u),{input:p,options:m})}catch(t){if(Ke(t)){let n=Ae(t.payload,o,`Tool "${e}" interrupt payload`);return{type:`interrupted`,toolName:e,input:p,toolCallId:s,payload:n===``?void 0:JSON.parse(n)}}throw t}return{type:`success`,valueJson:Ae(h,o,`Tool "${e}" output`)}}async function Je(e,t,n){return e.needsApproval==null?!1:typeof e.needsApproval==`boolean`?e.needsApproval:await e.needsApproval(t,n)}async function Ye(e,n){let r=t(e);return r.validate===void 0?{success:!0,value:n}:await r.validate(n)}async function U(e,{input:t,options:n}){let r=e(t,n);if(Xe(r)){let e;for await(let t of r)e=t;return e}return await r}function Xe(e){return typeof e==`object`&&!!e&&Symbol.asyncIterator in e&&typeof e[Symbol.asyncIterator]==`function`}let W;function Ze(e){if(e===void 0){W=void 0;return}if(!Number.isInteger(e)||e<=0)throw TypeError(`maxWorkers must be a positive integer.`);W=e}function Qe({memoryLimitBytes:e,activeWorkers:t}){if(W!==void 0)return W;let n=e+50331648,r=Math.floor($e()/n);return Math.max(1,Math.min(32,t+r))}function $e(){let e=process,t=typeof e.availableMemory==`function`?e.availableMemory():p.freemem();return Number.isFinite(t)&&t>0?t:0}let G=0,et=0,tt,nt;const K=[];function rt(e){tt=e===void 0?void 0:ht(e),mt(0)}function it(){return tt??at()}function at(){return dt()}async function ot(e){let t=ke(e.options),n=O(e.options?.continuationSecurity),r=Qe({memoryLimitBytes:t.memoryLimitBytes,activeWorkers:G});if(G>=r)throw new te(r);G++;let i=!0;try{if(e.toolExecutionOptions?.abortSignal?.aborted)throw new ee;Pe(e.js,t.maxSourceBytes);let a=Fe(e.js);st({js:a,continuation:e.continuation,interruptResolution:e.interruptResolution,continuationSecurity:n});let o=ct({...e,js:a,normalizedOptions:t,maxWorkers:r,continuationSecurity:n});return i=!1,o.accountingDone.then(()=>gt(t.memoryLimitBytes),()=>gt(t.memoryLimitBytes)),await o.result}finally{i&>(t.memoryLimitBytes)}}function st({js:e,continuation:t,interruptResolution:n,continuationSecurity:r}){if(t===void 0){if(n!==void 0)throw new _(`A code-mode interrupt resolution was provided without continuation state.`,{hasInterruptResolution:n!==void 0});return}if(pe(t,r),t.version!==1)throw new _(`Unsupported code-mode continuation version.`,{version:t.version});if(t.js!==e)throw new _(`Code mode continuation source does not match the resumed source.`,{continuationSourceBytes:J(t.js),resumedSourceBytes:J(e)});if(typeof t.outerToolCallId!=`string`)throw new _(`Code mode continuation outerToolCallId must be a string.`,{outerToolCallId:t.outerToolCallId});if(xt(t.determinism),St(t),n!==void 0){let e=t.ledger.filter(e=>e.kind===`tool`&&e.status===`interrupted`&&e.interruptId===n.interruptId);if(e.length!==1)throw new _(`Interrupt resolution does not match exactly one pending continuation ledger entry.`,{interruptId:n.interruptId,matches:e.length})}}function ct({js:e,tools:t,toolExecutionOptions:n,options:r,continuation:i,interruptResolution:a,normalizedOptions:o,maxWorkers:s,continuationSecurity:c}){let l=`code-mode-${++et}`,d=lt(s),f=d.worker,p=new u(`ai-sdk-code-mode:invocation`),m=e=>(...t)=>{p.runInAsyncScope(e,void 0,...t)},te=n?.abortSignal,g=new AbortController,v=Et(i?.ledger??[]),y,b=!1,oe=!1,S=!1,C=!1,w=0,T=0,E,le=0,D,ue=a===void 0,de=new Set,O=yt(i?.ledger??[]),pe=i?.determinism??Dt(),me=n?.context??n?.experimental_context,he=n?.experimental_context??n?.context,k={toolCallId:n?.toolCallId??i?.outerToolCallId??l,messages:n?.messages??[],abortSignal:g.signal,...he===void 0?{}:{experimental_context:he},...me===void 0?{}:{context:me}},ge=Date.now(),A={invocationId:l,outerToolCallId:k.toolCallId,status:`completed`,startedAtMs:ge,completedAtMs:ge,durationMs:0,bridgeRequests:[]},_e=!1,j=Re(r?.telemetry,`ai.code_mode.execute`,{"code_mode.invocation.id":l,"code_mode.outer_tool_call.id":k.toolCallId,"code_mode.continuation":i!==void 0,"code_mode.fetch.enabled":o.fetchEnabled,"code_mode.max_workers":s,...r?.telemetry?.recordInputs===!1?{}:{"code_mode.source.bytes":J(e)}}),M=async e=>{await N(`onNestedToolCall`,e)},ye=async e=>{await N(`onNestedToolResult`,e)},be=async e=>{await N(`onInterrupt`,{invocationId:l,outerToolCallId:k.toolCallId,interrupt:e})},N=async(e,t)=>{let n=r?.lifecycle,i=n?.[e];if(i!==void 0)try{await i(t)}catch(r){try{await n?.onHookError?.(r,{hook:e,event:t})}catch{}}},xe=async e=>{await N(`onFetchRequest`,e)},Se=async e=>{await N(`onFetchResult`,e)},Ce=async e=>{await N(`onTrace`,e)},we,P=(e,t={})=>{if(_e)return we??Promise.resolve();_e=!0;let n=Date.now();return A.status=e,A.completedAtMs=n,A.durationMs=Math.max(0,n-A.startedAtMs),t.interruptedBy!==void 0&&(A.interruptedBy=t.interruptedBy,ze(j,`code_mode.interrupt`,{"code_mode.interrupt.type":t.interruptedBy})),t.error!==void 0&&(A.error=x(t.error),Be(j,t.error)),j?.setAttributes?.({"code_mode.status":e,"code_mode.duration_ms":A.durationMs,"code_mode.bridge_requests.count":A.bridgeRequests.length,"code_mode.bridge_requests.replayed_count":A.bridgeRequests.filter(e=>e.replayed).length}),Ve(j),we=Ce(At(A)),we},F=({bridgeIndex:e,toolName:t,input:n,inputJson:r,toolCallId:i,replayed:a,startedAtMs:o})=>({invocationId:l,outerToolCallId:k.toolCallId,bridgeIndex:e,toolName:t,input:n,inputBytes:J(r),toolCallId:i,replayed:a,startedAtMs:o}),Te=e=>{let t={kind:`tool`,bridgeIndex:e.bridgeIndex,toolName:e.toolName,toolCallId:e.toolCallId,status:e.status,replayed:e.replayed,startedAtMs:e.startedAtMs,completedAtMs:e.completedAtMs,durationMs:e.durationMs,inputBytes:e.inputBytes,...e.status===`fulfilled`?{outputBytes:e.outputBytes}:{},...e.status===`rejected`?{error:Ot(e.error)}:{},...e.status===`interrupted`?{interruptType:e.interrupt.type}:{}};return A.bridgeRequests.push(t),t},Ee=({bridgeIndex:e,inputJson:t,request:n,replayed:r,startedAtMs:i})=>({invocationId:l,outerToolCallId:k.toolCallId,bridgeIndex:e,url:n.url,method:n.method??`GET`,inputBytes:J(t),replayed:r,startedAtMs:i}),De=e=>{let t={kind:`fetch`,bridgeIndex:e.bridgeIndex,url:e.url,method:e.method,status:e.status,replayed:e.replayed,startedAtMs:e.startedAtMs,completedAtMs:e.completedAtMs,durationMs:e.durationMs,inputBytes:e.inputBytes,...e.status===`fulfilled`?{outputBytes:e.outputBytes}:{},...e.status===`rejected`?{error:Ot(e.error)}:{}};return A.bridgeRequests.push(t),t},I=async e=>{Te(e),ze(j,`code_mode.nested_tool.result`,{"code_mode.bridge.index":e.bridgeIndex,"code_mode.tool.name":e.toolName,"code_mode.tool_call.id":e.toolCallId,"code_mode.status":e.status,"code_mode.replayed":e.replayed,...e.status===`fulfilled`&&r?.telemetry?.recordOutputs!==!1?{"code_mode.tool.output.bytes":e.outputBytes}:{}}),await ye(e)},L=async e=>{De(e),ze(j,`code_mode.fetch.result`,{"code_mode.bridge.index":e.bridgeIndex,"code_mode.fetch.url":e.url,"code_mode.fetch.method":e.method,"code_mode.status":e.status,"code_mode.replayed":e.replayed,...e.status===`fulfilled`&&r?.telemetry?.recordOutputs!==!1?{"code_mode.fetch.output.bytes":e.outputBytes}:{}}),await Se(e)},Oe=e=>Re(r?.telemetry,`ai.code_mode.nested_tool`,{"code_mode.invocation.id":l,"code_mode.outer_tool_call.id":k.toolCallId,"code_mode.bridge.index":e.bridgeIndex,"code_mode.tool.name":e.toolName,"code_mode.tool_call.id":e.toolCallId,"code_mode.replayed":e.replayed,...r?.telemetry?.recordInputs===!1?{}:{"code_mode.tool.input.bytes":e.inputBytes}}),ke=e=>Re(r?.telemetry,`ai.code_mode.fetch`,{"code_mode.invocation.id":l,"code_mode.outer_tool_call.id":k.toolCallId,"code_mode.bridge.index":e.bridgeIndex,"code_mode.fetch.url":e.url,"code_mode.fetch.method":e.method,"code_mode.replayed":e.replayed,...r?.telemetry?.recordInputs===!1?{}:{"code_mode.fetch.input.bytes":e.inputBytes}}),R,z,je=new Promise((e,t)=>{R=e,z=t}),Me,Ne=new Promise(e=>{Me=e}),B=e=>{g.signal.aborted||g.abort(e)},V=e=>{C||(C=!0,clearTimeout(Le),te?.removeEventListener(`abort`,Ie),f.off(`message`,He),f.off(`error`,Ue),f.off(`exit`,We),p.emitDestroy(),e?ft(d):pt(d))},Pe=()=>{!oe&&b&&T===0&&(oe=!0,Me())},Fe=e=>{if(!b){b=!0,Pe();try{e()}catch(e){z(e)}finally{Pe()}}},H=e=>{S||(S=!0,B(e),V(!1),(async()=>{await P(`failed`,{error:e}),Fe(()=>z(e))})())},Ie=m(()=>{H(new ee)}),Le=setTimeout(m(()=>{H(new h(o.timeoutMs))}),o.timeoutMs),He=m(e=>{if(e.invocationId!==l){H(new _(`Worker message invocationId mismatch: expected ${l}, received ${e.invocationId}.`,{expectedInvocationId:l,receivedInvocationId:e.invocationId,messageType:e.type}));return}if(e.type===`result`){if(y!==void 0){H(new _(`Worker sent duplicate result for invocation ${l}.`,{invocationId:l}));return}y=e;return}if(e.type===`ready`){$e(e);return}if(e.type===`bridge-drained`){if(D===void 0||e.drainId!==D){H(new _(`Worker sent unexpected bridge drain acknowledgement ${e.drainId}.`,{invocationId:l,expectedDrainId:D,receivedDrainId:e.drainId}));return}D=void 0,T===0&&Ze();return}if(e.type===`tool-request`){let t=Ye(e);t!==void 0&&Ke(e,t);return}if(e.type===`fetch-request`){let t=Ye(e);t!==void 0&&Je(e,t)}}),Ue=m(e=>{H(e)}),We=m(e=>{!S&&e!==0&&H(Error(`Code mode worker exited with code ${e}.`))});f.on(`message`,He),f.on(`error`,Ue),f.on(`exit`,We),te?.addEventListener(`abort`,Ie,{once:!0}),te?.aborted&&Ie();let Ge={type:`run`,invocationId:l,js:e,determinism:pe,options:{timeoutMs:o.timeoutMs,memoryLimitBytes:o.memoryLimitBytes,maxStackSizeBytes:o.maxStackSizeBytes,maxResultBytes:o.maxResultBytes,fetchEnabled:o.fetchEnabled}};if(!S)try{f.postMessage(Ge)}catch(e){H(e)}return{result:je,accountingDone:Ne};async function Ke(e,n){let i=O[n-1],s=q(e.inputJson);try{if(i!==void 0){if(bt(i,{kind:`tool`,name:e.toolName,inputJson:e.inputJson}),i.kind!==`tool`)throw new _(`Continuation replay expected a tool ledger entry.`,{invocationId:l,bridgeIndex:n,kind:i.kind});if(i.status===`fulfilled`){let t=Date.now(),r=F({bridgeIndex:n,toolName:e.toolName,input:s,inputJson:e.inputJson,toolCallId:i.toolCallId,replayed:!0,startedAtMs:t});await M(r);let a=Date.now();await I({...r,status:`fulfilled`,completedAtMs:a,durationMs:a-t,outputBytes:J(i.valueJson),output:q(i.valueJson)}),U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!0,dateNowMs:i.dateNowMs,valueJson:i.valueJson});return}if(i.status===`rejected`){let t=Date.now(),r=F({bridgeIndex:n,toolName:e.toolName,input:s,inputJson:e.inputJson,toolCallId:i.toolCallId,replayed:!0,startedAtMs:t});await M(r);let a=Date.now();await I({...r,status:`rejected`,completedAtMs:a,durationMs:a-t,error:i.error}),U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!1,dateNowMs:i.dateNowMs,error:i.error});return}if(i.status===`interrupted`){if(a?.interruptId===i.interruptId){ue=!0;let c=se(i.interruptPayload);if(c){let t=ce(a.resolution);if(!t.approved){let r=new ie(i.name,s,i.toolCallId,t.reason),a=x(r),o=ae(r,`tool`),c=Date.now();O[n-1]={kind:`tool`,name:e.toolName,inputJson:e.inputJson,toolCallId:i.toolCallId,status:`rejected`,dateNowMs:c,error:o},await I({invocationId:l,outerToolCallId:k.toolCallId,bridgeIndex:n,toolName:e.toolName,input:s,inputBytes:J(e.inputJson),toolCallId:i.toolCallId,replayed:!1,startedAtMs:c,status:`rejected`,completedAtMs:c,durationMs:0,error:a}),U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!1,dateNowMs:c,error:o});return}}let u=c?void 0:{interruptId:i.interruptId,payload:i.interruptPayload,resolution:a.resolution},d=Date.now(),f=F({bridgeIndex:n,toolName:e.toolName,input:s,inputJson:e.inputJson,toolCallId:i.toolCallId,replayed:!1,startedAtMs:d});await M(f);let p=Oe(f),m=await qe({toolName:e.toolName,inputJson:e.inputJson,tools:t,baseExecutionOptions:k,codeModeOptions:r??{},maxToolInputBytes:o.maxToolInputBytes,maxToolOutputBytes:o.maxToolOutputBytes,toolCallId:i.toolCallId,...u===void 0?{}:{codeModeInterrupt:u},skipApproval:!0}).catch(e=>{throw Be(p,e),e}).finally(()=>Ve(p));if(m.type===`interrupted`){O[n-1]={kind:`tool`,name:e.toolName,inputJson:e.inputJson,toolCallId:i.toolCallId,interruptId:`${i.toolCallId}:interrupt`,interruptPayload:m.payload,status:`interrupted`},Xe(n-1);return}let h=Date.now();O[n-1]={kind:`tool`,name:e.toolName,inputJson:e.inputJson,toolCallId:i.toolCallId,status:`fulfilled`,dateNowMs:h,valueJson:m.valueJson},await I({...f,status:`fulfilled`,completedAtMs:h,durationMs:h-d,outputBytes:J(m.valueJson),output:q(m.valueJson)}),U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!0,dateNowMs:h,valueJson:m.valueJson});return}if(a!==void 0&&a.interruptId!==i.interruptId){Xe(n-1);return}Xe(n-1);return}return}let c=`${k.toolCallId}:tool-${++v}`,u=Date.now(),d=F({bridgeIndex:n,toolName:e.toolName,input:s,inputJson:e.inputJson,toolCallId:c,replayed:!1,startedAtMs:u});await M(d);let f=Oe(d),p=await qe({toolName:e.toolName,inputJson:e.inputJson,tools:t,baseExecutionOptions:k,codeModeOptions:r??{},maxToolInputBytes:o.maxToolInputBytes,maxToolOutputBytes:o.maxToolOutputBytes,toolCallId:c}).catch(e=>{throw Be(f,e),e}).finally(()=>Ve(f));if(p.type===`interrupted`){O[n-1]={kind:`tool`,name:e.toolName,inputJson:e.inputJson,toolCallId:c,interruptId:`${c}:interrupt`,interruptPayload:p.payload,status:`interrupted`},Xe(n-1);return}let m=Date.now();O[n-1]={kind:`tool`,name:e.toolName,inputJson:e.inputJson,toolCallId:c,status:`fulfilled`,dateNowMs:m,valueJson:p.valueJson},await I({...d,status:`fulfilled`,completedAtMs:m,durationMs:m-u,outputBytes:J(p.valueJson),output:q(p.valueJson)}),U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!0,dateNowMs:m,valueJson:p.valueJson})}catch(t){if(t instanceof _){H(t);return}let r=x(t),o=ae(t,`tool`),c=Date.now(),u=i?.kind===`tool`?i.toolCallId:`${k.toolCallId}:tool-${v}`;i?.kind===`tool`&&i.status===`interrupted`&&a?.interruptId===i.interruptId?O[n-1]={kind:`tool`,name:e.toolName,inputJson:e.inputJson,toolCallId:i.toolCallId,status:`rejected`,dateNowMs:c,error:o}:i===void 0&&(O[n-1]={kind:`tool`,name:e.toolName,inputJson:e.inputJson,toolCallId:u,status:`rejected`,dateNowMs:c,error:o}),await I({invocationId:l,outerToolCallId:k.toolCallId,bridgeIndex:n,toolName:e.toolName,input:s,inputBytes:J(e.inputJson),toolCallId:u,replayed:!1,startedAtMs:c,status:`rejected`,completedAtMs:c,durationMs:0,error:r}),U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!1,dateNowMs:c,error:o})}finally{T--,W(),Pe()}}async function Je(e,t){let n=JSON.stringify(e.request),r=O[t-1];try{if(r!==void 0){if(bt(r,{kind:`fetch`,name:e.request.url,inputJson:n}),r.kind!==`fetch`)throw new _(`Continuation replay expected a fetch ledger entry.`,{invocationId:l,bridgeIndex:t,kind:r.kind});if(r.status===`fulfilled`){let i=Date.now(),a=Ee({bridgeIndex:t,inputJson:n,request:e.request,replayed:!0,startedAtMs:i});await xe(a);let o=Date.now();await L({...a,status:`fulfilled`,completedAtMs:o,durationMs:o-i,outputBytes:J(r.valueJson)}),U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!0,dateNowMs:r.dateNowMs,valueJson:r.valueJson});return}if(r.status===`rejected`){let i=Date.now(),a=Ee({bridgeIndex:t,inputJson:n,request:e.request,replayed:!0,startedAtMs:i});await xe(a);let o=Date.now();await L({...a,status:`rejected`,completedAtMs:o,durationMs:o-i,error:r.error}),U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!1,dateNowMs:r.dateNowMs,error:r.error});return}throw new _(`Continuation ledger entry for fetch cannot be interrupted.`,{invocationId:l,requestId:e.requestId})}let i=Date.now(),a=Ee({bridgeIndex:t,inputJson:n,request:e.request,replayed:!1,startedAtMs:i});await xe(a);let s=ke(a),c=Ae(await ve({request:e.request,fetch:o.fetch,policy:o.fetchPolicy,signal:g.signal}).catch(e=>{throw Be(s,e),e}).finally(()=>Ve(s)),o.maxResultBytes,`fetch response`),u=Date.now();O[t-1]={kind:`fetch`,name:e.request.url,inputJson:n,status:`fulfilled`,dateNowMs:u,valueJson:c},await L({...a,status:`fulfilled`,completedAtMs:u,durationMs:u-i,outputBytes:J(c)}),U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!0,dateNowMs:u,valueJson:c})}catch(i){if(i instanceof _){H(i);return}let a=x(i),o=ae(i,`fetch`),s=Date.now();r===void 0&&(O[t-1]={kind:`fetch`,name:e.request.url,inputJson:n,status:`rejected`,dateNowMs:s,error:o}),await L({invocationId:l,outerToolCallId:k.toolCallId,bridgeIndex:t,url:e.request.url,method:e.request.method??`GET`,inputBytes:J(n),replayed:!1,startedAtMs:s,status:`rejected`,completedAtMs:s,durationMs:0,error:a}),U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!1,dateNowMs:s,error:o})}finally{T--,W(),Pe()}}function Ye(e){if(!S){if(y!==void 0){H(new _(`Worker sent ${e.type} after result for invocation ${l}.`,{invocationId:l,requestId:e.requestId,messageType:e.type}));return}if(de.has(e.requestId)){H(new _(`Worker reused requestId ${e.requestId} for invocation ${l}.`,{invocationId:l,requestId:e.requestId,messageType:e.type}));return}if(de.add(e.requestId),w>=o.maxBridgeRequests){let t=new ne(`Code mode exceeded the maxBridgeRequests limit (${o.maxBridgeRequests}).`,{invocationId:l,requestId:e.requestId,maxBridgeRequests:o.maxBridgeRequests});U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!1,dateNowMs:Date.now(),error:ae(t,`bridge`)});return}if(T>=o.maxInFlightBridgeRequests){let t=new ne(`Code mode exceeded the maxInFlightBridgeRequests limit (${o.maxInFlightBridgeRequests}).`,{invocationId:l,requestId:e.requestId,maxInFlightBridgeRequests:o.maxInFlightBridgeRequests});U({type:`bridge-response`,invocationId:l,requestId:e.requestId,success:!1,dateNowMs:Date.now(),error:ae(t,`bridge`)});return}return w++,T++,w}}function U(e){if(!(S||C))try{f.postMessage(e)}catch(e){H(e)}}function Xe(e){E??=e}function W(){E===void 0||S||T>0||D!==void 0||!ue||(D=`${l}:drain-${++le}`,U({type:`bridge-drain`,invocationId:l,drainId:D}))}function Ze(){if(E===void 0||S||T>0||!ue)return;let t=E,n=O[t];if(n===void 0||n.kind!==`tool`){H(new _(`Code mode interruption references a missing tool ledger entry.`,{invocationId:l,interruptEntryIndex:E}));return}if(n.status!==`interrupted`){H(new _(`Code mode interruption references a non-pending ledger entry.`,{invocationId:l,interruptEntryIndex:E,status:n.status}));return}let r=Qe(n,fe({version:1,js:e,outerToolCallId:k.toolCallId,determinism:{...pe},ledger:yt(O)},c));S=!0,B(r),V(!1),(async()=>{let e=Date.now();await I({...F({bridgeIndex:t+1,toolName:n.name,input:q(n.inputJson),inputJson:n.inputJson,toolCallId:n.toolCallId,replayed:!1,startedAtMs:e}),status:`interrupted`,completedAtMs:e,durationMs:0,interrupt:r}),await be(r),await P(`interrupted`,{interruptedBy:r.type}),Fe(()=>R(r))})()}function Qe(e,t){return{type:`code-mode-interrupt`,interruptId:e.interruptId,toolName:e.name,toolCallId:e.toolCallId,outerToolCallId:t.outerToolCallId,input:q(e.inputJson),payload:structuredClone(e.interruptPayload),continuation:t}}async function $e(e){if(S)return;if(E!==void 0){W();return}if(y===void 0){H(new _(`Code mode worker became ready without a result for ${e.invocationId}.`,{invocationId:e.invocationId}));return}let t=y;if(t.invocationId!==e.invocationId){H(new _(`Worker result/ready invocationId mismatch: result was ${t.invocationId}, ready was ${e.invocationId}.`,{resultInvocationId:t.invocationId,readyInvocationId:e.invocationId}));return}if(S=!0,T>0){let e=t.success?new re(`Code mode returned while ${T} bridge request(s) were still in flight.`,{invocationId:l,inFlightBridgeRequests:T,totalBridgeRequests:w}):_t(t);B(e),V(!1),await P(`failed`,{error:e}),Fe(()=>z(e));return}if(i!==void 0&&w<O.length){let e=new _(`Code mode continuation returned before replaying the full bridge ledger.`,{invocationId:l,replayedBridgeRequests:w,ledgerEntries:O.length,nextLedgerEntry:O[w]});B(e),V(!1),await P(`failed`,{error:e}),Fe(()=>z(e));return}t.success?await P(`completed`):await P(`failed`,{error:_t(t)}),V(!0),Fe(()=>vt(t,R,z))}}function lt(e){let t=K.pop();for(;t?.destroyed;)t=K.pop();return t??=ut(),t.worker.removeAllListeners(`exit`),t.worker.ref(),mt(Math.max(0,e-G)),t}function ut(){return{worker:tt===void 0?new f(dt()):new f(it()),destroyed:!1}}function dt(){return nt??=new URL(`data:text/javascript;base64,${d.from(`globalThis.__CODE_MODE_QUICKJS_WASM_BASE64__ = "AGFzbQEAAAABvQd2YAJ/fwBgA39/fwF/YAR/fn9/AX5gAn9/AX9gAX8Bf2AFf35/f38BfmADf39/AGACf34BfmAEf39/fwF/YAF/AGACf34AYAJ/fgF/YAF8AXxgAn9/AX5gA39/fgF/YAZ/fn9/f38BfmAFf39/f38Bf2ADf35/AX5gA39+fwBgBH9/f38AYAN/fn8Bf2ADf35+AX5gA39/fwF+YAZ/fn5/f38BfmAEf39+fwF/YAN/fn4Bf2AGf39/f39/AX9gBH9/f38BfmACfHwBfGAAAX9gAABgBX9+fn9/AX5gBH9+f38Bf2ABfgF/YAd/fn9+fn5/AX9gAX8BfmAEf39/fgF/YAR/fn9+AX5gBX9+f35/AX9gBH9+fn8Bf2AFf39/f38AYAV/fn5+fwF/YAZ/fn9+fn8Bf2AHf39/f39/fwF/YAV/f39/fwF+YAF+AX5gB39+f39/f38BfmACf3wBf2ADf39+AGADf39+AX5gAn5/AX9gBH9/fn8AYAR/fn9/AGAEf39+fgF/YAJ/fwF8YAZ/fH9/f38Bf2ACfn8AYAR/fn5/AX5gBH9+f34Bf2AEf35/fgBgBH9+fn4Bf2AJf39/f39/f39/AX9gBn9/f39/fwF+YAN+f38Bf2AIf39/f39/f38Bf2AEf39+fwF+YAd/f39/f39/AGAFf35/f38Bf2ABfAF/YAV/fn5/fwBgBH9+fn8AYAJ8fwF8YAN8fH8BfGAGf35+fn5/AX9gBX9+fn9/AX9gBH9/fn4BfmAAAXxgBX9+f35/AX5gDX9/f39/f39+f39/f38BfmAFf39+f38Bf2AGf39+fn5+AX9gB39+fn5/f38BfmABfwF8YAV/fH9/fwF+YAh/fn5/f39/fwF+YAZ/fn9/f38AYAh/f39/f39+fwF+YAZ/fn9/f38Bf2AKf39+f39+fn5/fwF/YAV/f35+fgF+YAJ8fAF/YAV/f39/fwF8YAV/f35+fwF/YAN/fn4AYAd/fn9/f39/AGAEf35+fgF+YAJ8fwF/YAh/fn5+fn9+fgF+YAN+fn8Bf2AHf39/fn5+fwF/YAN/f3wAYAN/fnwBfmAAAX5gA398fAF8YAJ/fAF8YAd/f35/fn5/AX9gBX9/fn9+AX5gBX9/f39+AX9gBX9/f35/AX9gCH9/fn9+fn5/AX9gB39/fH9/f38Bf2AH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YQDaCQJoYQDYCQJpYQDXCQJqYQDPCQJrYQC+CQJsYQC5CQJtYQCtCQJuYQCJCQJvYQCECQJwYQCDCQJxYQCCCQJyYQCBCQJzYQCACQJ0YQD/CAJ1YQD+CAJ2YQD9CAJ3YQD8CAJ4YQD7CAJ5YQD6CAJ6YQDUCAJBYQC0AwJCYQD5CAJDYQD/AwJEYQD4CAJFYQD2CAJGYQD1CAJHYQDzCAJIYQDyCAJJYQDvCAJKYQDuCAJLYQDtCAJMYQDqCAJNYQCpCQJOYQDoCAJPYQDnCAJQYQDmCAJRYQCoCQJSYQCnCQJTYQCmCQJUYQClCQJVYQCkCQJWYQCjCQJXYQCiCQJYYQChCQJZYQCgCQJaYQCfCQJfYQCeCQIkYQCdCQJhYgCcCQJiYgCbCQJjYgCaCQJkYgCZCQJlYgCYCQJmYgCXCQJnYgCWCQJoYgCVCQJpYgCUCQJqYgCTCQJrYgCSCQJsYgCRCQJtYgCQCQJuYgCPCQJvYgCOCQJwYgCNCQJxYgCMCQJyYgCLCQJzYgCKCQJ0YgCICQJ1YgCHCQJ2YgCGCQJ3YgCFCQgC3woJswcBAEEBC9YDuAmYBrcJtAORCI0IjAiCCOIHoAeTB9sDowiiCIoDhQiECIMIgQiACP8H/geTBf0H/Af7B/kH+AeLBb0C9wf1B/QH7QPzB/IH8Qf7A/AHrwX5BvgG3grrCOEIiwbYCPcI9AjxCPAI7AiqCeUI5AXkCOAI1wXOCM0IywjKCNYI1QjRCPoD0AiUCOQG6QfnB+UH5AffB94HiwbcB70HiQfrBPUG8wbZCdYJ+ATVCdQJ0wnSCdEJ0AnOCc0JzAnLCawJqwn3BsQIwwjCCKEFwQjACL8IoAW+CL0IvAi7CLoIuQi4CLcItgi1CLMIsgixCLAIrwiuCK0IrAifBZ4Fqgj0A6kI9AOfBZ4FqAinCKYIoQXFCMgIxwjGCMkI8wOlCKQItAP9BvwGiAeHB4YHhQeEB4MHggeBB4AH/wb+BtgH1wfWB/QD1QegBdQH0wfSB9EH6gftB+wH3AjbCNoI5wbmBugGiAj0BvEG8AbvBu4G7QbrBuoG6Qb2BvsG+gaKB5kH3gP1BJYHmAeXB5UHlAeSB7kCkQeQB48HjgeNB4wHiwe7AvIB3QfbB9oH2QePBOEH4AfjB+YH6AfVCtQG0wrcCtIG2wraCtkK2ArQBtcK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